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 1a8fe435e7deabf06029c8e50201136518e3af73 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 12 Aug 2017 01:26:29 -0400 Subject: split out src/ directory into categorized subdirectories. --- Makefile | 28 +- common_syms/agb_flash.txt | 10 - common_syms/battle/battle_anim.txt | 3 + common_syms/battle_anim.txt | 3 - common_syms/contest_painting.txt | 5 - common_syms/debug/mori_debug_menu.txt | 1 + common_syms/engine/agb_flash.txt | 10 + common_syms/engine/link.txt | 46 + common_syms/engine/load_save.txt | 1 + common_syms/engine/m4a_2.txt | 12 + common_syms/engine/main.txt | 9 + common_syms/engine/record_mixing.txt | 1 + common_syms/engine/rng.txt | 1 + common_syms/engine/rtc.txt | 1 + common_syms/engine/save.txt | 9 + common_syms/engine/sound.txt | 1 + common_syms/engine/sound_check_menu.txt | 1 + common_syms/engine/sprite.txt | 12 + common_syms/engine/string_util.txt | 1 + common_syms/engine/task.txt | 1 + common_syms/field/field_camera.txt | 3 + common_syms/field/field_control_avatar.txt | 1 + common_syms/field/field_map_obj.txt | 1 + common_syms/field/fieldmap.txt | 1 + common_syms/field/start_menu.txt | 1 + common_syms/field/tv.txt | 1 + common_syms/field_camera.txt | 3 - common_syms/field_control_avatar.txt | 1 - common_syms/field_map_obj.txt | 1 - common_syms/fieldmap.txt | 1 - common_syms/intro.txt | 2 - common_syms/link.txt | 46 - common_syms/load_save.txt | 1 - common_syms/m4a_2.txt | 12 - common_syms/main.txt | 9 - common_syms/misc/rom3.txt | 1 + common_syms/misc/rom4.txt | 4 + common_syms/mori_debug_menu.txt | 1 - common_syms/pokedex.txt | 2 - common_syms/pokemon/pokedex.txt | 2 + common_syms/pokemon/pokemon_1.txt | 4 + common_syms/pokemon_1.txt | 4 - common_syms/record_mixing.txt | 1 - common_syms/rng.txt | 1 - common_syms/rom3.txt | 1 - common_syms/rom4.txt | 4 - common_syms/rtc.txt | 1 - common_syms/save.txt | 9 - common_syms/scene/contest_painting.txt | 5 + common_syms/scene/intro.txt | 2 + common_syms/sound.txt | 1 - common_syms/sound_check_menu.txt | 1 - common_syms/sprite.txt | 12 - common_syms/start_menu.txt | 1 - common_syms/string_util.txt | 1 - common_syms/task.txt | 1 - common_syms/tv.txt | 1 - ld_script.txt | 516 +- src/agb_flash.c | 295 - src/agb_flash_1m.c | 86 - src/agb_flash_le.c | 31 - src/agb_flash_mx.c | 197 - src/bard_music.c | 97 - src/battle/battle_10.c | 1323 ++ src/battle/battle_2.c | 2441 ++++ src/battle/battle_4.c | 18196 +++++++++++++++++++++++++++ src/battle/battle_6.c | 1507 +++ src/battle/battle_7.c | 1235 ++ src/battle/battle_8.c | 1642 +++ src/battle/battle_811DA74.c | 1606 +++ src/battle/battle_ai.c | 2150 ++++ src/battle/battle_anim.c | 2270 ++++ src/battle/battle_anim_80A7E7C.c | 940 ++ src/battle/battle_anim_81258BC.c | 50 + src/battle/battle_anim_8137220.c | 1486 +++ src/battle/battle_interface.c | 3049 +++++ src/battle/battle_party_menu.c | 756 ++ src/battle/battle_records.c | 334 + src/battle/battle_setup.c | 1416 +++ src/battle/calculate_base_damage.c | 1474 +++ src/battle/contest_link_80C857C.c | 55 + src/battle/pokeball.c | 1193 ++ src/battle/post_battle_event_funcs.c | 69 + src/battle/smokescreen.c | 73 + src/battle_10.c | 1323 -- src/battle_2.c | 2441 ---- src/battle_4.c | 18196 --------------------------- src/battle_6.c | 1507 --- src/battle_7.c | 1235 -- src/battle_8.c | 1642 --- src/battle_811DA74.c | 1606 --- src/battle_ai.c | 2150 ---- src/battle_anim.c | 2270 ---- src/battle_anim_80A7E7C.c | 940 -- src/battle_anim_81258BC.c | 50 - src/battle_anim_8137220.c | 1486 --- src/battle_interface.c | 3049 ----- src/battle_party_menu.c | 756 -- src/battle_records.c | 334 - src/battle_setup.c | 1416 --- src/berry.c | 1380 -- src/berry_tag_screen.c | 580 - src/bike.c | 1013 -- src/birch_pc.c | 114 - src/blend_palette.c | 20 - src/braille_puzzles.c | 258 - src/cable_club.c | 317 - src/calculate_base_damage.c | 1474 --- src/choose_party.c | 1072 -- src/clear_save_data_menu.c | 177 - src/clock.c | 90 - src/coins.c | 84 - src/contest_link_80C857C.c | 55 - src/contest_painting.c | 805 -- src/coord_event_weather.c | 118 - src/credits.c | 1496 --- src/daycare.c | 350 - src/de_rom_8040FE0.c | 272 - src/debug/matsuda_debug_menu.c | 1113 ++ src/debug/mori_debug_menu.c | 168 + src/debug/unknown_debug_menu.c | 52 + src/decompress.c | 112 - src/decoration.c | 4280 ------- src/decoration_inventory.c | 169 - src/dewford_trend.c | 332 - src/diploma.c | 139 - src/easy_chat.c | 442 - src/egg_hatch.c | 52 - src/engine/agb_flash.c | 295 + src/engine/agb_flash_1m.c | 86 + src/engine/agb_flash_le.c | 31 + src/engine/agb_flash_mx.c | 197 + src/engine/blend_palette.c | 20 + src/engine/cable_club.c | 317 + src/engine/clear_save_data_menu.c | 177 + src/engine/clock.c | 90 + src/engine/decompress.c | 112 + src/engine/libc.c | 143 + src/engine/link.c | 1820 +++ src/engine/load_save.c | 168 + src/engine/m4a_2.c | 912 ++ src/engine/m4a_4.c | 545 + src/engine/m4a_tables.c | 307 + src/engine/main.c | 363 + src/engine/main_menu.c | 1639 +++ src/engine/menu.c | 871 ++ src/engine/menu_cursor.c | 798 ++ src/engine/mystery_event_menu.c | 341 + src/engine/mystery_event_script.c | 462 + src/engine/name_string_util.c | 40 + src/engine/naming_screen.c | 2038 +++ src/engine/option_menu.c | 579 + src/engine/palette.c | 834 ++ src/engine/play_time.c | 73 + src/engine/record_mixing.c | 1085 ++ src/engine/reset_rtc_screen.c | 496 + src/engine/rng.c | 18 + src/engine/rtc.c | 349 + src/engine/save.c | 797 ++ src/engine/save_failed_screen.c | 310 + src/engine/save_menu_util.c | 148 + src/engine/script.c | 368 + src/engine/siirtc.c | 432 + src/engine/sound.c | 585 + src/engine/sound_check_menu.c | 2199 ++++ src/engine/sprite.c | 1802 +++ src/engine/string_util.c | 561 + src/engine/task.c | 209 + src/engine/text.c | 4324 +++++++ src/engine/text_window.c | 184 + src/engine/tileset_anim.c | 630 + src/engine/time_events.c | 118 + src/engine/trade.c | 88 + src/engine/trainer_card.c | 1569 +++ src/engine/trig.c | 549 + src/engine/util.c | 525 + src/event_data.c | 184 - src/field/bard_music.c | 97 + src/field/berry.c | 1380 ++ src/field/berry_tag_screen.c | 580 + src/field/bike.c | 1013 ++ src/field/birch_pc.c | 114 + src/field/braille_puzzles.c | 258 + src/field/choose_party.c | 1072 ++ src/field/coins.c | 84 + src/field/coord_event_weather.c | 118 + src/field/daycare.c | 350 + src/field/decoration.c | 4280 +++++++ src/field/decoration_inventory.c | 169 + src/field/dewford_trend.c | 332 + src/field/diploma.c | 139 + src/field/easy_chat.c | 442 + src/field/event_data.c | 184 + src/field/field_camera.c | 495 + src/field/field_control_avatar.c | 878 ++ src/field/field_door.c | 221 + src/field/field_effect.c | 3406 +++++ src/field/field_fadetransition.c | 626 + src/field/field_ground_effect.c | 240 + src/field/field_map_obj.c | 8474 +++++++++++++ src/field/field_map_obj_helpers.c | 318 + src/field/field_message_box.c | 155 + src/field/field_player_avatar.c | 1728 +++ src/field/field_poison.c | 143 + src/field/field_region_map.c | 125 + src/field/field_screen_effect.c | 340 + src/field/field_special_scene.c | 349 + src/field/field_specials.c | 2383 ++++ src/field/field_tasks.c | 859 ++ src/field/field_weather.c | 367 + src/field/fieldmap.c | 955 ++ src/field/fldeff_cut.c | 290 + src/field/fldeff_flash.c | 306 + src/field/fldeff_softboiled.c | 153 + src/field/fldeff_strength.c | 76 + src/field/fldeff_sweetscent.c | 88 + src/field/fldeff_teleport.c | 46 + src/field/heal_location.c | 63 + src/field/hof_pc.c | 42 + src/field/item.c | 674 + src/field/item_menu.c | 4583 +++++++ src/field/item_use.c | 1198 ++ src/field/landmark.c | 73 + src/field/lottery_corner.c | 174 + src/field/map_name_popup.c | 107 + src/field/map_obj_lock.c | 118 + src/field/mauville_old_man.c | 247 + src/field/menu_helpers.c | 572 + src/field/metatile_behavior.c | 1308 ++ src/field/money.c | 275 + src/field/party_menu.c | 1505 +++ src/field/player_pc.c | 1368 ++ src/field/pokeblock.c | 1134 ++ src/field/pokenav.c | 40 + src/field/region_map.c | 1847 +++ src/field/roamer.c | 226 + src/field/rotating_gate.c | 1228 ++ src/field/safari_zone.c | 253 + src/field/scrcmd.c | 1887 +++ src/field/script_menu.c | 1134 ++ src/field/script_movement.c | 224 + src/field/secret_base.c | 1075 ++ src/field/shop.c | 342 + src/field/slot_machine.c | 150 + src/field/start_menu.c | 850 ++ src/field/starter_choose.c | 757 ++ src/field/trader.c | 261 + src/field/trainer_see.c | 455 + src/field/tv.c | 3260 +++++ src/field/use_pokeblock.c | 965 ++ src/field/wallclock.c | 1061 ++ src/field/wild_encounter.c | 3568 ++++++ src/field_camera.c | 495 - src/field_control_avatar.c | 878 -- src/field_door.c | 221 - src/field_effect.c | 3406 ----- src/field_fadetransition.c | 626 - src/field_ground_effect.c | 240 - src/field_map_obj.c | 8474 ------------- src/field_map_obj_helpers.c | 318 - src/field_message_box.c | 155 - src/field_player_avatar.c | 1728 --- src/field_poison.c | 143 - src/field_region_map.c | 125 - src/field_screen_effect.c | 340 - src/field_special_scene.c | 349 - src/field_specials.c | 2383 ---- src/field_tasks.c | 859 -- src/field_weather.c | 367 - src/fieldmap.c | 955 -- src/fldeff_cut.c | 290 - src/fldeff_flash.c | 306 - src/fldeff_softboiled.c | 153 - src/fldeff_strength.c | 76 - src/fldeff_sweetscent.c | 88 - src/fldeff_teleport.c | 46 - src/heal_location.c | 63 - src/hof_pc.c | 42 - src/intro.c | 3167 ----- src/item.c | 674 - src/item_menu.c | 4583 ------- src/item_use.c | 1198 -- src/landmark.c | 73 - src/libc.c | 143 - src/link.c | 1820 --- src/load_save.c | 168 - src/lottery_corner.c | 174 - src/m4a_2.c | 912 -- src/m4a_4.c | 545 - src/m4a_tables.c | 307 - src/mail.c | 437 - src/mail_data.c | 208 - src/main.c | 363 - src/main_menu.c | 1639 --- src/map_name_popup.c | 107 - src/map_obj_lock.c | 118 - src/matsuda_debug_menu.c | 1113 -- src/mauville_old_man.c | 247 - src/menu.c | 871 -- src/menu_cursor.c | 798 -- src/menu_helpers.c | 572 - src/metatile_behavior.c | 1308 -- src/misc/de_rom_8040FE0.c | 272 + src/misc/rom3.c | 1393 ++ src/misc/rom4.c | 2573 ++++ src/misc/rom6.c | 202 + src/misc/rom_800D42C.c | 118 + src/misc/rom_8077ABC.c | 2055 +++ src/misc/script_pokemon_util_80C4BF0.c | 716 ++ src/misc/script_pokemon_util_80F99CC.c | 445 + src/misc/unknown_task.c | 255 + src/misc/unused_8124F94.c | 126 + src/mon_markings.c | 383 - src/money.c | 275 - src/mori_debug_menu.c | 168 - src/mystery_event_menu.c | 341 - src/mystery_event_script.c | 462 - src/name_string_util.c | 40 - src/naming_screen.c | 2038 --- src/new_game.c | 166 - src/option_menu.c | 579 - src/palette.c | 834 -- src/party_menu.c | 1505 --- src/play_time.c | 73 - src/player_pc.c | 1368 -- src/pokeball.c | 1193 -- src/pokeblock.c | 1134 -- src/pokedex.c | 5528 -------- src/pokedex_cry_screen.c | 85 - src/pokemon/mail.c | 437 + src/pokemon/mail_data.c | 208 + src/pokemon/mon_markings.c | 383 + src/pokemon/pokedex.c | 5528 ++++++++ src/pokemon/pokedex_cry_screen.c | 85 + src/pokemon/pokemon_1.c | 666 + src/pokemon/pokemon_2.c | 1312 ++ src/pokemon/pokemon_3.c | 1380 ++ src/pokemon/pokemon_data.c | 128 + src/pokemon/pokemon_icon.c | 1276 ++ src/pokemon/pokemon_size_record.c | 217 + src/pokemon/pokemon_storage_system.c | 99 + src/pokemon/pokemon_summary_screen.c | 180 + src/pokemon_1.c | 666 - src/pokemon_2.c | 1312 -- src/pokemon_3.c | 1380 -- src/pokemon_data.c | 128 - src/pokemon_icon.c | 1276 -- src/pokemon_size_record.c | 217 - src/pokemon_storage_system.c | 99 - src/pokemon_summary_screen.c | 180 - src/pokenav.c | 40 - src/post_battle_event_funcs.c | 69 - src/record_mixing.c | 1085 -- src/region_map.c | 1847 --- src/reset_rtc_screen.c | 496 - src/rng.c | 18 - src/roamer.c | 226 - src/rom3.c | 1393 -- src/rom4.c | 2573 ---- src/rom6.c | 202 - src/rom_800D42C.c | 118 - src/rom_8077ABC.c | 2055 --- src/rotating_gate.c | 1228 -- src/rtc.c | 349 - src/safari_zone.c | 253 - src/save.c | 797 -- src/save_failed_screen.c | 310 - src/save_menu_util.c | 148 - src/scene/contest_painting.c | 805 ++ src/scene/credits.c | 1496 +++ src/scene/egg_hatch.c | 52 + src/scene/intro.c | 3167 +++++ src/scene/new_game.c | 166 + src/scene/title_screen.c | 892 ++ src/scrcmd.c | 1887 --- src/script.c | 368 - src/script_menu.c | 1134 -- src/script_movement.c | 224 - src/script_pokemon_util_80C4BF0.c | 716 -- src/script_pokemon_util_80F99CC.c | 445 - src/secret_base.c | 1075 -- src/shop.c | 342 - src/siirtc.c | 432 - src/slot_machine.c | 150 - src/smokescreen.c | 73 - src/sound.c | 585 - src/sound_check_menu.c | 2199 ---- src/sprite.c | 1802 --- src/start_menu.c | 850 -- src/starter_choose.c | 757 -- src/string_util.c | 561 - src/task.c | 209 - src/text.c | 4324 ------- src/text_window.c | 184 - src/tileset_anim.c | 630 - src/time_events.c | 118 - src/title_screen.c | 892 -- src/trade.c | 88 - src/trader.c | 261 - src/trainer_card.c | 1569 --- src/trainer_see.c | 455 - src/trig.c | 549 - src/tv.c | 3260 ----- src/unknown_debug_menu.c | 52 - src/unknown_task.c | 255 - src/unused_8124F94.c | 126 - src/use_pokeblock.c | 965 -- src/util.c | 525 - src/wallclock.c | 1061 -- src/wild_encounter.c | 3568 ------ sym_bss.txt | 56 +- sym_common.txt | 56 +- sym_ewram.txt | 124 +- 413 files changed, 169017 insertions(+), 169017 deletions(-) delete mode 100644 common_syms/agb_flash.txt create mode 100644 common_syms/battle/battle_anim.txt delete mode 100644 common_syms/battle_anim.txt delete mode 100644 common_syms/contest_painting.txt create mode 100644 common_syms/debug/mori_debug_menu.txt create mode 100644 common_syms/engine/agb_flash.txt create mode 100644 common_syms/engine/link.txt create mode 100644 common_syms/engine/load_save.txt create mode 100644 common_syms/engine/m4a_2.txt create mode 100644 common_syms/engine/main.txt create mode 100644 common_syms/engine/record_mixing.txt create mode 100644 common_syms/engine/rng.txt create mode 100644 common_syms/engine/rtc.txt create mode 100644 common_syms/engine/save.txt create mode 100644 common_syms/engine/sound.txt create mode 100644 common_syms/engine/sound_check_menu.txt create mode 100644 common_syms/engine/sprite.txt create mode 100644 common_syms/engine/string_util.txt create mode 100644 common_syms/engine/task.txt create mode 100644 common_syms/field/field_camera.txt create mode 100644 common_syms/field/field_control_avatar.txt create mode 100644 common_syms/field/field_map_obj.txt create mode 100644 common_syms/field/fieldmap.txt create mode 100644 common_syms/field/start_menu.txt create mode 100644 common_syms/field/tv.txt delete mode 100644 common_syms/field_camera.txt delete mode 100644 common_syms/field_control_avatar.txt delete mode 100644 common_syms/field_map_obj.txt delete mode 100644 common_syms/fieldmap.txt delete mode 100644 common_syms/intro.txt delete mode 100644 common_syms/link.txt delete mode 100644 common_syms/load_save.txt delete mode 100644 common_syms/m4a_2.txt delete mode 100644 common_syms/main.txt create mode 100644 common_syms/misc/rom3.txt create mode 100644 common_syms/misc/rom4.txt delete mode 100644 common_syms/mori_debug_menu.txt delete mode 100644 common_syms/pokedex.txt create mode 100644 common_syms/pokemon/pokedex.txt create mode 100644 common_syms/pokemon/pokemon_1.txt delete mode 100644 common_syms/pokemon_1.txt delete mode 100644 common_syms/record_mixing.txt delete mode 100644 common_syms/rng.txt delete mode 100644 common_syms/rom3.txt delete mode 100644 common_syms/rom4.txt delete mode 100644 common_syms/rtc.txt delete mode 100644 common_syms/save.txt create mode 100644 common_syms/scene/contest_painting.txt create mode 100644 common_syms/scene/intro.txt delete mode 100644 common_syms/sound.txt delete mode 100644 common_syms/sound_check_menu.txt delete mode 100644 common_syms/sprite.txt delete mode 100644 common_syms/start_menu.txt delete mode 100644 common_syms/string_util.txt delete mode 100644 common_syms/task.txt delete mode 100644 common_syms/tv.txt delete mode 100644 src/agb_flash.c delete mode 100644 src/agb_flash_1m.c delete mode 100644 src/agb_flash_le.c delete mode 100644 src/agb_flash_mx.c delete mode 100644 src/bard_music.c create mode 100644 src/battle/battle_10.c create mode 100644 src/battle/battle_2.c create mode 100644 src/battle/battle_4.c create mode 100644 src/battle/battle_6.c create mode 100644 src/battle/battle_7.c create mode 100644 src/battle/battle_8.c create mode 100644 src/battle/battle_811DA74.c create mode 100644 src/battle/battle_ai.c create mode 100644 src/battle/battle_anim.c create mode 100644 src/battle/battle_anim_80A7E7C.c create mode 100644 src/battle/battle_anim_81258BC.c create mode 100644 src/battle/battle_anim_8137220.c create mode 100644 src/battle/battle_interface.c create mode 100644 src/battle/battle_party_menu.c create mode 100644 src/battle/battle_records.c create mode 100644 src/battle/battle_setup.c create mode 100644 src/battle/calculate_base_damage.c create mode 100644 src/battle/contest_link_80C857C.c create mode 100644 src/battle/pokeball.c create mode 100644 src/battle/post_battle_event_funcs.c create mode 100644 src/battle/smokescreen.c delete mode 100644 src/battle_10.c delete mode 100644 src/battle_2.c delete mode 100644 src/battle_4.c delete mode 100644 src/battle_6.c delete mode 100644 src/battle_7.c delete mode 100644 src/battle_8.c delete mode 100644 src/battle_811DA74.c delete mode 100644 src/battle_ai.c delete mode 100644 src/battle_anim.c delete mode 100644 src/battle_anim_80A7E7C.c delete mode 100644 src/battle_anim_81258BC.c delete mode 100644 src/battle_anim_8137220.c delete mode 100644 src/battle_interface.c delete mode 100644 src/battle_party_menu.c delete mode 100644 src/battle_records.c delete mode 100644 src/battle_setup.c delete mode 100644 src/berry.c delete mode 100644 src/berry_tag_screen.c delete mode 100644 src/bike.c delete mode 100644 src/birch_pc.c delete mode 100644 src/blend_palette.c delete mode 100644 src/braille_puzzles.c delete mode 100644 src/cable_club.c delete mode 100644 src/calculate_base_damage.c delete mode 100644 src/choose_party.c delete mode 100644 src/clear_save_data_menu.c delete mode 100644 src/clock.c delete mode 100644 src/coins.c delete mode 100644 src/contest_link_80C857C.c delete mode 100644 src/contest_painting.c delete mode 100644 src/coord_event_weather.c delete mode 100644 src/credits.c delete mode 100644 src/daycare.c delete mode 100644 src/de_rom_8040FE0.c create mode 100644 src/debug/matsuda_debug_menu.c create mode 100644 src/debug/mori_debug_menu.c create mode 100644 src/debug/unknown_debug_menu.c delete mode 100644 src/decompress.c delete mode 100644 src/decoration.c delete mode 100644 src/decoration_inventory.c delete mode 100644 src/dewford_trend.c delete mode 100644 src/diploma.c delete mode 100644 src/easy_chat.c delete mode 100644 src/egg_hatch.c create mode 100644 src/engine/agb_flash.c create mode 100644 src/engine/agb_flash_1m.c create mode 100644 src/engine/agb_flash_le.c create mode 100644 src/engine/agb_flash_mx.c create mode 100644 src/engine/blend_palette.c create mode 100644 src/engine/cable_club.c create mode 100644 src/engine/clear_save_data_menu.c create mode 100644 src/engine/clock.c create mode 100644 src/engine/decompress.c create mode 100644 src/engine/libc.c create mode 100644 src/engine/link.c create mode 100644 src/engine/load_save.c create mode 100644 src/engine/m4a_2.c create mode 100644 src/engine/m4a_4.c create mode 100644 src/engine/m4a_tables.c create mode 100644 src/engine/main.c create mode 100644 src/engine/main_menu.c create mode 100644 src/engine/menu.c create mode 100644 src/engine/menu_cursor.c create mode 100644 src/engine/mystery_event_menu.c create mode 100644 src/engine/mystery_event_script.c create mode 100644 src/engine/name_string_util.c create mode 100644 src/engine/naming_screen.c create mode 100644 src/engine/option_menu.c create mode 100644 src/engine/palette.c create mode 100644 src/engine/play_time.c create mode 100644 src/engine/record_mixing.c create mode 100644 src/engine/reset_rtc_screen.c create mode 100644 src/engine/rng.c create mode 100644 src/engine/rtc.c create mode 100644 src/engine/save.c create mode 100644 src/engine/save_failed_screen.c create mode 100644 src/engine/save_menu_util.c create mode 100644 src/engine/script.c create mode 100644 src/engine/siirtc.c create mode 100644 src/engine/sound.c create mode 100644 src/engine/sound_check_menu.c create mode 100644 src/engine/sprite.c create mode 100644 src/engine/string_util.c create mode 100644 src/engine/task.c create mode 100644 src/engine/text.c create mode 100644 src/engine/text_window.c create mode 100644 src/engine/tileset_anim.c create mode 100644 src/engine/time_events.c create mode 100644 src/engine/trade.c create mode 100644 src/engine/trainer_card.c create mode 100644 src/engine/trig.c create mode 100644 src/engine/util.c delete mode 100644 src/event_data.c create mode 100644 src/field/bard_music.c create mode 100644 src/field/berry.c create mode 100644 src/field/berry_tag_screen.c create mode 100644 src/field/bike.c create mode 100644 src/field/birch_pc.c create mode 100644 src/field/braille_puzzles.c create mode 100644 src/field/choose_party.c create mode 100644 src/field/coins.c create mode 100644 src/field/coord_event_weather.c create mode 100644 src/field/daycare.c create mode 100644 src/field/decoration.c create mode 100644 src/field/decoration_inventory.c create mode 100644 src/field/dewford_trend.c create mode 100644 src/field/diploma.c create mode 100644 src/field/easy_chat.c create mode 100644 src/field/event_data.c create mode 100644 src/field/field_camera.c create mode 100644 src/field/field_control_avatar.c create mode 100644 src/field/field_door.c create mode 100644 src/field/field_effect.c create mode 100644 src/field/field_fadetransition.c create mode 100644 src/field/field_ground_effect.c create mode 100644 src/field/field_map_obj.c create mode 100644 src/field/field_map_obj_helpers.c create mode 100644 src/field/field_message_box.c create mode 100644 src/field/field_player_avatar.c create mode 100644 src/field/field_poison.c create mode 100644 src/field/field_region_map.c create mode 100644 src/field/field_screen_effect.c create mode 100644 src/field/field_special_scene.c create mode 100644 src/field/field_specials.c create mode 100644 src/field/field_tasks.c create mode 100644 src/field/field_weather.c create mode 100644 src/field/fieldmap.c create mode 100644 src/field/fldeff_cut.c create mode 100644 src/field/fldeff_flash.c create mode 100644 src/field/fldeff_softboiled.c create mode 100644 src/field/fldeff_strength.c create mode 100644 src/field/fldeff_sweetscent.c create mode 100644 src/field/fldeff_teleport.c create mode 100644 src/field/heal_location.c create mode 100644 src/field/hof_pc.c create mode 100644 src/field/item.c create mode 100644 src/field/item_menu.c create mode 100644 src/field/item_use.c create mode 100644 src/field/landmark.c create mode 100644 src/field/lottery_corner.c create mode 100644 src/field/map_name_popup.c create mode 100644 src/field/map_obj_lock.c create mode 100644 src/field/mauville_old_man.c create mode 100644 src/field/menu_helpers.c create mode 100644 src/field/metatile_behavior.c create mode 100644 src/field/money.c create mode 100644 src/field/party_menu.c create mode 100644 src/field/player_pc.c create mode 100644 src/field/pokeblock.c create mode 100644 src/field/pokenav.c create mode 100644 src/field/region_map.c create mode 100644 src/field/roamer.c create mode 100644 src/field/rotating_gate.c create mode 100644 src/field/safari_zone.c create mode 100644 src/field/scrcmd.c create mode 100644 src/field/script_menu.c create mode 100644 src/field/script_movement.c create mode 100644 src/field/secret_base.c create mode 100644 src/field/shop.c create mode 100644 src/field/slot_machine.c create mode 100644 src/field/start_menu.c create mode 100644 src/field/starter_choose.c create mode 100644 src/field/trader.c create mode 100644 src/field/trainer_see.c create mode 100644 src/field/tv.c create mode 100644 src/field/use_pokeblock.c create mode 100644 src/field/wallclock.c create mode 100644 src/field/wild_encounter.c delete mode 100644 src/field_camera.c delete mode 100644 src/field_control_avatar.c delete mode 100644 src/field_door.c delete mode 100644 src/field_effect.c delete mode 100644 src/field_fadetransition.c delete mode 100644 src/field_ground_effect.c delete mode 100644 src/field_map_obj.c delete mode 100644 src/field_map_obj_helpers.c delete mode 100644 src/field_message_box.c delete mode 100644 src/field_player_avatar.c delete mode 100644 src/field_poison.c delete mode 100644 src/field_region_map.c delete mode 100644 src/field_screen_effect.c delete mode 100644 src/field_special_scene.c delete mode 100644 src/field_specials.c delete mode 100644 src/field_tasks.c delete mode 100644 src/field_weather.c delete mode 100644 src/fieldmap.c delete mode 100644 src/fldeff_cut.c delete mode 100644 src/fldeff_flash.c delete mode 100644 src/fldeff_softboiled.c delete mode 100644 src/fldeff_strength.c delete mode 100644 src/fldeff_sweetscent.c delete mode 100644 src/fldeff_teleport.c delete mode 100644 src/heal_location.c delete mode 100644 src/hof_pc.c delete mode 100644 src/intro.c delete mode 100644 src/item.c delete mode 100644 src/item_menu.c delete mode 100644 src/item_use.c delete mode 100644 src/landmark.c delete mode 100644 src/libc.c delete mode 100644 src/link.c delete mode 100644 src/load_save.c delete mode 100644 src/lottery_corner.c delete mode 100644 src/m4a_2.c delete mode 100644 src/m4a_4.c delete mode 100644 src/m4a_tables.c delete mode 100644 src/mail.c delete mode 100644 src/mail_data.c delete mode 100644 src/main.c delete mode 100644 src/main_menu.c delete mode 100644 src/map_name_popup.c delete mode 100644 src/map_obj_lock.c delete mode 100644 src/matsuda_debug_menu.c delete mode 100644 src/mauville_old_man.c delete mode 100644 src/menu.c delete mode 100644 src/menu_cursor.c delete mode 100644 src/menu_helpers.c delete mode 100644 src/metatile_behavior.c create mode 100644 src/misc/de_rom_8040FE0.c create mode 100644 src/misc/rom3.c create mode 100644 src/misc/rom4.c create mode 100644 src/misc/rom6.c create mode 100644 src/misc/rom_800D42C.c create mode 100644 src/misc/rom_8077ABC.c create mode 100644 src/misc/script_pokemon_util_80C4BF0.c create mode 100644 src/misc/script_pokemon_util_80F99CC.c create mode 100644 src/misc/unknown_task.c create mode 100644 src/misc/unused_8124F94.c delete mode 100644 src/mon_markings.c delete mode 100644 src/money.c delete mode 100644 src/mori_debug_menu.c delete mode 100644 src/mystery_event_menu.c delete mode 100644 src/mystery_event_script.c delete mode 100644 src/name_string_util.c delete mode 100644 src/naming_screen.c delete mode 100644 src/new_game.c delete mode 100644 src/option_menu.c delete mode 100644 src/palette.c delete mode 100644 src/party_menu.c delete mode 100644 src/play_time.c delete mode 100644 src/player_pc.c delete mode 100644 src/pokeball.c delete mode 100644 src/pokeblock.c delete mode 100644 src/pokedex.c delete mode 100644 src/pokedex_cry_screen.c create mode 100644 src/pokemon/mail.c create mode 100644 src/pokemon/mail_data.c create mode 100644 src/pokemon/mon_markings.c create mode 100644 src/pokemon/pokedex.c create mode 100644 src/pokemon/pokedex_cry_screen.c create mode 100644 src/pokemon/pokemon_1.c create mode 100644 src/pokemon/pokemon_2.c create mode 100644 src/pokemon/pokemon_3.c create mode 100644 src/pokemon/pokemon_data.c create mode 100644 src/pokemon/pokemon_icon.c create mode 100644 src/pokemon/pokemon_size_record.c create mode 100644 src/pokemon/pokemon_storage_system.c create mode 100644 src/pokemon/pokemon_summary_screen.c delete mode 100644 src/pokemon_1.c delete mode 100644 src/pokemon_2.c delete mode 100644 src/pokemon_3.c delete mode 100644 src/pokemon_data.c delete mode 100644 src/pokemon_icon.c delete mode 100644 src/pokemon_size_record.c delete mode 100644 src/pokemon_storage_system.c delete mode 100644 src/pokemon_summary_screen.c delete mode 100644 src/pokenav.c delete mode 100644 src/post_battle_event_funcs.c delete mode 100644 src/record_mixing.c delete mode 100644 src/region_map.c delete mode 100644 src/reset_rtc_screen.c delete mode 100644 src/rng.c delete mode 100644 src/roamer.c delete mode 100644 src/rom3.c delete mode 100644 src/rom4.c delete mode 100644 src/rom6.c delete mode 100644 src/rom_800D42C.c delete mode 100644 src/rom_8077ABC.c delete mode 100644 src/rotating_gate.c delete mode 100644 src/rtc.c delete mode 100644 src/safari_zone.c delete mode 100644 src/save.c delete mode 100644 src/save_failed_screen.c delete mode 100644 src/save_menu_util.c create mode 100644 src/scene/contest_painting.c create mode 100644 src/scene/credits.c create mode 100644 src/scene/egg_hatch.c create mode 100644 src/scene/intro.c create mode 100644 src/scene/new_game.c create mode 100644 src/scene/title_screen.c delete mode 100644 src/scrcmd.c delete mode 100644 src/script.c delete mode 100644 src/script_menu.c delete mode 100644 src/script_movement.c delete mode 100644 src/script_pokemon_util_80C4BF0.c delete mode 100644 src/script_pokemon_util_80F99CC.c delete mode 100644 src/secret_base.c delete mode 100644 src/shop.c delete mode 100644 src/siirtc.c delete mode 100644 src/slot_machine.c delete mode 100644 src/smokescreen.c delete mode 100644 src/sound.c delete mode 100644 src/sound_check_menu.c delete mode 100644 src/sprite.c delete mode 100644 src/start_menu.c delete mode 100644 src/starter_choose.c delete mode 100644 src/string_util.c delete mode 100644 src/task.c delete mode 100644 src/text.c delete mode 100644 src/text_window.c delete mode 100644 src/tileset_anim.c delete mode 100644 src/time_events.c delete mode 100644 src/title_screen.c delete mode 100644 src/trade.c delete mode 100644 src/trader.c delete mode 100644 src/trainer_card.c delete mode 100644 src/trainer_see.c delete mode 100644 src/trig.c delete mode 100644 src/tv.c delete mode 100644 src/unknown_debug_menu.c delete mode 100644 src/unknown_task.c delete mode 100644 src/unused_8124F94.c delete mode 100644 src/use_pokeblock.c delete mode 100644 src/util.c delete mode 100644 src/wallclock.c delete mode 100644 src/wild_encounter.c diff --git a/Makefile b/Makefile index e18b7b2f0..097f2f974 100644 --- a/Makefile +++ b/Makefile @@ -40,9 +40,9 @@ VERSIONS := ruby sapphire ruby_rev1 sapphire_rev1 ruby_rev2 sapphire_rev2 ruby_d $(VERSIONS) $(VERSIONS:%=compare_%) -$(shell mkdir -p build/ $(VERSIONS:%=build/%/{,src,asm,data})) +$(shell mkdir -p build/ $(VERSIONS:%=build/%/{,asm,data,src{,/battle,/field,/debug,/misc,/scene,/pokemon,/engine}})) -C_SRCS := $(wildcard src/*.c) +C_SRCS := $(wildcard src/*/*.c) $(wildcard src/*.c) ASM_SRCS := $(wildcard asm/*.s) DATA_ASM_SRCS := $(wildcard data/*.s) @@ -90,17 +90,17 @@ sound/direct_sound_samples/cry_%.bin: sound/direct_sound_samples/cry_%.aif ; $(A sound/songs/%.s: sound/songs/%.mid cd $(@D) && ../../$(MID) $(> build/$1/$$*.s + $$(CPP) $$(CPPFLAGS) -D $$(VERSION) -D REVISION=$$(REVISION) -D $$(LANGUAGE) $$< -o build/$1/$$*.i + $$(PREPROC) build/$1/$$*.i charmap.txt | $$(CC1) $$(CFLAGS) -o build/$1/$$*.s + printf ".text\n\t.align\t2, 0\n" >> build/$1/$$*.s $$(AS) $$(ASFLAGS) -o $$@ build/$1/$$*.s $$($1_ASM_OBJS): VERSION := $2 diff --git a/common_syms/agb_flash.txt b/common_syms/agb_flash.txt deleted file mode 100644 index cb421ec80..000000000 --- a/common_syms/agb_flash.txt +++ /dev/null @@ -1,10 +0,0 @@ -gFlashTimeoutFlag -PollFlashStatus -WaitForFlashWrite -ProgramFlashSector -gFlash -ProgramFlashByte -gFlashNumRemainingBytes -EraseFlashChip -EraseFlashSector -gFlashMaxTime diff --git a/common_syms/battle/battle_anim.txt b/common_syms/battle/battle_anim.txt new file mode 100644 index 000000000..a93ac9b5d --- /dev/null +++ b/common_syms/battle/battle_anim.txt @@ -0,0 +1,3 @@ +gSoundAnimFramesToWait +gBattleAnimArgs +gAnimSpriteIndexArray diff --git a/common_syms/battle_anim.txt b/common_syms/battle_anim.txt deleted file mode 100644 index a93ac9b5d..000000000 --- a/common_syms/battle_anim.txt +++ /dev/null @@ -1,3 +0,0 @@ -gSoundAnimFramesToWait -gBattleAnimArgs -gAnimSpriteIndexArray diff --git a/common_syms/contest_painting.txt b/common_syms/contest_painting.txt deleted file mode 100644 index 2e8490348..000000000 --- a/common_syms/contest_painting.txt +++ /dev/null @@ -1,5 +0,0 @@ -gUnknown_03005E10 -gUnknown_03005E20 -gUnknown_03005E40 -gUnknown_03005E8C -gUnknown_03005E90 diff --git a/common_syms/debug/mori_debug_menu.txt b/common_syms/debug/mori_debug_menu.txt new file mode 100644 index 000000000..77ab5531c --- /dev/null +++ b/common_syms/debug/mori_debug_menu.txt @@ -0,0 +1 @@ +gUnknown_03004DA0 diff --git a/common_syms/engine/agb_flash.txt b/common_syms/engine/agb_flash.txt new file mode 100644 index 000000000..cb421ec80 --- /dev/null +++ b/common_syms/engine/agb_flash.txt @@ -0,0 +1,10 @@ +gFlashTimeoutFlag +PollFlashStatus +WaitForFlashWrite +ProgramFlashSector +gFlash +ProgramFlashByte +gFlashNumRemainingBytes +EraseFlashChip +EraseFlashSector +gFlashMaxTime diff --git a/common_syms/engine/link.txt b/common_syms/engine/link.txt new file mode 100644 index 000000000..faafda4d0 --- /dev/null +++ b/common_syms/engine/link.txt @@ -0,0 +1,46 @@ +word_3002910 +gLinkDebugValue1 +localLinkPlayerBlock +gLinkErrorOccurred +4 +gLinkDebugValue2 +4 +#begin GERMAN +deUnkValue1 +deUnkValue2 +#end +gLinkPlayerPending +gLinkPlayers +gBlockReceived +4 +gLinkHeldKeys +gLinkTimeOutCounter +4 +localLinkPlayer +gRecvCmds +gLinkStatus +gLinkDummyBool +byte_3002A68 +gBlockSendBuffer +u8_array_3002B70 +gLinkType +u8_array_3002B78 +gBlockRecvBuffer +gSuppressLinkErrorMessage +gSavedLinkPlayerCount +gSendCmd +gSavedMultiplayerId +gReceivedRemoteLinkPlayers +gLinkTestBGInfo +gLinkCallback +gSavedLinkPlayers +gShouldAdvanceLinkState +gLinkTestBlockChecksums +4 +gBlockRequestType +4 +4 +gLastSendQueueCount +gLink +gLastRecvQueueCount +gLinkSavedIme diff --git a/common_syms/engine/load_save.txt b/common_syms/engine/load_save.txt new file mode 100644 index 000000000..3b969deca --- /dev/null +++ b/common_syms/engine/load_save.txt @@ -0,0 +1 @@ +gFlashMemoryPresent diff --git a/common_syms/engine/m4a_2.txt b/common_syms/engine/m4a_2.txt new file mode 100644 index 000000000..a80d8a79d --- /dev/null +++ b/common_syms/engine/m4a_2.txt @@ -0,0 +1,12 @@ +gSoundInfo +gPokemonCrySongs +gPokemonCryMusicPlayers +gMPlayJumpTable +gCgbChans +gPokemonCryTracks +gPokemonCrySong +gMPlay_BGM +gMPlay_SE1 +gMPlay_SE2 +gMPlayMemAccArea +gMPlay_SE3 diff --git a/common_syms/engine/main.txt b/common_syms/engine/main.txt new file mode 100644 index 000000000..a620083d1 --- /dev/null +++ b/common_syms/engine/main.txt @@ -0,0 +1,9 @@ +gKeyRepeatStartDelay +gLinkTransferringData +gMain +gKeyRepeatContinueDelay +gSoftResetDisabled +gIntrTable +gLinkVSyncDisabled +IntrMain_Buffer +gPcmDmaCounter diff --git a/common_syms/engine/record_mixing.txt b/common_syms/engine/record_mixing.txt new file mode 100644 index 000000000..a6f4f8df3 --- /dev/null +++ b/common_syms/engine/record_mixing.txt @@ -0,0 +1 @@ +gUnknown_03005D2C diff --git a/common_syms/engine/rng.txt b/common_syms/engine/rng.txt new file mode 100644 index 000000000..794439ea5 --- /dev/null +++ b/common_syms/engine/rng.txt @@ -0,0 +1 @@ +gRngValue diff --git a/common_syms/engine/rtc.txt b/common_syms/engine/rtc.txt new file mode 100644 index 000000000..fa00a34d5 --- /dev/null +++ b/common_syms/engine/rtc.txt @@ -0,0 +1 @@ +gLocalTime diff --git a/common_syms/engine/save.txt b/common_syms/engine/save.txt new file mode 100644 index 000000000..d09a52bcf --- /dev/null +++ b/common_syms/engine/save.txt @@ -0,0 +1,9 @@ +gLastWrittenSector +gLastSaveCounter +gLastKnownGoodSector +gDamagedSaveSectors +gSaveCounter +gFastSaveSection +gUnknown_03005EB4 +gSaveFileStatus +gGameContinueCallback diff --git a/common_syms/engine/sound.txt b/common_syms/engine/sound.txt new file mode 100644 index 000000000..0f6f2fc75 --- /dev/null +++ b/common_syms/engine/sound.txt @@ -0,0 +1 @@ +gDisableMusic diff --git a/common_syms/engine/sound_check_menu.txt b/common_syms/engine/sound_check_menu.txt new file mode 100644 index 000000000..ba350ad8e --- /dev/null +++ b/common_syms/engine/sound_check_menu.txt @@ -0,0 +1 @@ +gUnknown_03005D30 diff --git a/common_syms/engine/sprite.txt b/common_syms/engine/sprite.txt new file mode 100644 index 000000000..fe38dc61f --- /dev/null +++ b/common_syms/engine/sprite.txt @@ -0,0 +1,12 @@ +gSpriteOrder +gSpriteTileAllocBitmap +gSpriteCoordOffsetX +gOamLimit +gReservedSpriteTileCount +gSpriteCopyRequestCount +gSpriteCopyRequests +gSpriteCoordOffsetY +gOamMatrices +gShouldProcessSpriteCopyRequests +gOamMatrixAllocBitmap +gReservedSpritePaletteCount diff --git a/common_syms/engine/string_util.txt b/common_syms/engine/string_util.txt new file mode 100644 index 000000000..1ee62aaad --- /dev/null +++ b/common_syms/engine/string_util.txt @@ -0,0 +1 @@ +gUnknownStringVar diff --git a/common_syms/engine/task.txt b/common_syms/engine/task.txt new file mode 100644 index 000000000..6601bd11b --- /dev/null +++ b/common_syms/engine/task.txt @@ -0,0 +1 @@ +gTasks diff --git a/common_syms/field/field_camera.txt b/common_syms/field/field_camera.txt new file mode 100644 index 000000000..7aad967f8 --- /dev/null +++ b/common_syms/field/field_camera.txt @@ -0,0 +1,3 @@ +gUnknown_03004880 +gUnknown_03004898 +gUnknown_0300489C diff --git a/common_syms/field/field_control_avatar.txt b/common_syms/field/field_control_avatar.txt new file mode 100644 index 000000000..040a9e6c1 --- /dev/null +++ b/common_syms/field/field_control_avatar.txt @@ -0,0 +1 @@ +gSelectedMapObject diff --git a/common_syms/field/field_map_obj.txt b/common_syms/field/field_map_obj.txt new file mode 100644 index 000000000..32d8b1915 --- /dev/null +++ b/common_syms/field/field_map_obj.txt @@ -0,0 +1 @@ +gMapObjects diff --git a/common_syms/field/fieldmap.txt b/common_syms/field/fieldmap.txt new file mode 100644 index 000000000..7819b3b40 --- /dev/null +++ b/common_syms/field/fieldmap.txt @@ -0,0 +1 @@ +gUnknown_03004870 diff --git a/common_syms/field/start_menu.txt b/common_syms/field/start_menu.txt new file mode 100644 index 000000000..bc0c247d1 --- /dev/null +++ b/common_syms/field/start_menu.txt @@ -0,0 +1 @@ +gCallback_03004AE8 diff --git a/common_syms/field/tv.txt b/common_syms/field/tv.txt new file mode 100644 index 000000000..829139f8f --- /dev/null +++ b/common_syms/field/tv.txt @@ -0,0 +1 @@ +gUnknown_03005D38 diff --git a/common_syms/field_camera.txt b/common_syms/field_camera.txt deleted file mode 100644 index 7aad967f8..000000000 --- a/common_syms/field_camera.txt +++ /dev/null @@ -1,3 +0,0 @@ -gUnknown_03004880 -gUnknown_03004898 -gUnknown_0300489C diff --git a/common_syms/field_control_avatar.txt b/common_syms/field_control_avatar.txt deleted file mode 100644 index 040a9e6c1..000000000 --- a/common_syms/field_control_avatar.txt +++ /dev/null @@ -1 +0,0 @@ -gSelectedMapObject diff --git a/common_syms/field_map_obj.txt b/common_syms/field_map_obj.txt deleted file mode 100644 index 32d8b1915..000000000 --- a/common_syms/field_map_obj.txt +++ /dev/null @@ -1 +0,0 @@ -gMapObjects diff --git a/common_syms/fieldmap.txt b/common_syms/fieldmap.txt deleted file mode 100644 index 7819b3b40..000000000 --- a/common_syms/fieldmap.txt +++ /dev/null @@ -1 +0,0 @@ -gUnknown_03004870 diff --git a/common_syms/intro.txt b/common_syms/intro.txt deleted file mode 100644 index d069b1014..000000000 --- a/common_syms/intro.txt +++ /dev/null @@ -1,2 +0,0 @@ -gIntroFrameCounter -gMultibootProgramStruct diff --git a/common_syms/link.txt b/common_syms/link.txt deleted file mode 100644 index faafda4d0..000000000 --- a/common_syms/link.txt +++ /dev/null @@ -1,46 +0,0 @@ -word_3002910 -gLinkDebugValue1 -localLinkPlayerBlock -gLinkErrorOccurred -4 -gLinkDebugValue2 -4 -#begin GERMAN -deUnkValue1 -deUnkValue2 -#end -gLinkPlayerPending -gLinkPlayers -gBlockReceived -4 -gLinkHeldKeys -gLinkTimeOutCounter -4 -localLinkPlayer -gRecvCmds -gLinkStatus -gLinkDummyBool -byte_3002A68 -gBlockSendBuffer -u8_array_3002B70 -gLinkType -u8_array_3002B78 -gBlockRecvBuffer -gSuppressLinkErrorMessage -gSavedLinkPlayerCount -gSendCmd -gSavedMultiplayerId -gReceivedRemoteLinkPlayers -gLinkTestBGInfo -gLinkCallback -gSavedLinkPlayers -gShouldAdvanceLinkState -gLinkTestBlockChecksums -4 -gBlockRequestType -4 -4 -gLastSendQueueCount -gLink -gLastRecvQueueCount -gLinkSavedIme diff --git a/common_syms/load_save.txt b/common_syms/load_save.txt deleted file mode 100644 index 3b969deca..000000000 --- a/common_syms/load_save.txt +++ /dev/null @@ -1 +0,0 @@ -gFlashMemoryPresent diff --git a/common_syms/m4a_2.txt b/common_syms/m4a_2.txt deleted file mode 100644 index a80d8a79d..000000000 --- a/common_syms/m4a_2.txt +++ /dev/null @@ -1,12 +0,0 @@ -gSoundInfo -gPokemonCrySongs -gPokemonCryMusicPlayers -gMPlayJumpTable -gCgbChans -gPokemonCryTracks -gPokemonCrySong -gMPlay_BGM -gMPlay_SE1 -gMPlay_SE2 -gMPlayMemAccArea -gMPlay_SE3 diff --git a/common_syms/main.txt b/common_syms/main.txt deleted file mode 100644 index a620083d1..000000000 --- a/common_syms/main.txt +++ /dev/null @@ -1,9 +0,0 @@ -gKeyRepeatStartDelay -gLinkTransferringData -gMain -gKeyRepeatContinueDelay -gSoftResetDisabled -gIntrTable -gLinkVSyncDisabled -IntrMain_Buffer -gPcmDmaCounter diff --git a/common_syms/misc/rom3.txt b/common_syms/misc/rom3.txt new file mode 100644 index 000000000..06a965ff6 --- /dev/null +++ b/common_syms/misc/rom3.txt @@ -0,0 +1 @@ +gBattleBuffersTransferData diff --git a/common_syms/misc/rom4.txt b/common_syms/misc/rom4.txt new file mode 100644 index 000000000..ecdb190b2 --- /dev/null +++ b/common_syms/misc/rom4.txt @@ -0,0 +1,4 @@ +word_3004858 +gFieldCallback +gUnknown_03004860 +gFieldLinkPlayerCount diff --git a/common_syms/mori_debug_menu.txt b/common_syms/mori_debug_menu.txt deleted file mode 100644 index 77ab5531c..000000000 --- a/common_syms/mori_debug_menu.txt +++ /dev/null @@ -1 +0,0 @@ -gUnknown_03004DA0 diff --git a/common_syms/pokedex.txt b/common_syms/pokedex.txt deleted file mode 100644 index 18b14f3ed..000000000 --- a/common_syms/pokedex.txt +++ /dev/null @@ -1,2 +0,0 @@ -gUnknown_03005CE8 -gUnknown_03005CEC diff --git a/common_syms/pokemon/pokedex.txt b/common_syms/pokemon/pokedex.txt new file mode 100644 index 000000000..18b14f3ed --- /dev/null +++ b/common_syms/pokemon/pokedex.txt @@ -0,0 +1,2 @@ +gUnknown_03005CE8 +gUnknown_03005CEC diff --git a/common_syms/pokemon/pokemon_1.txt b/common_syms/pokemon/pokemon_1.txt new file mode 100644 index 000000000..c588d53a7 --- /dev/null +++ b/common_syms/pokemon/pokemon_1.txt @@ -0,0 +1,4 @@ +gPlayerPartyCount +gPlayerParty +gEnemyPartyCount +gEnemyParty diff --git a/common_syms/pokemon_1.txt b/common_syms/pokemon_1.txt deleted file mode 100644 index c588d53a7..000000000 --- a/common_syms/pokemon_1.txt +++ /dev/null @@ -1,4 +0,0 @@ -gPlayerPartyCount -gPlayerParty -gEnemyPartyCount -gEnemyParty diff --git a/common_syms/record_mixing.txt b/common_syms/record_mixing.txt deleted file mode 100644 index a6f4f8df3..000000000 --- a/common_syms/record_mixing.txt +++ /dev/null @@ -1 +0,0 @@ -gUnknown_03005D2C diff --git a/common_syms/rng.txt b/common_syms/rng.txt deleted file mode 100644 index 794439ea5..000000000 --- a/common_syms/rng.txt +++ /dev/null @@ -1 +0,0 @@ -gRngValue diff --git a/common_syms/rom3.txt b/common_syms/rom3.txt deleted file mode 100644 index 06a965ff6..000000000 --- a/common_syms/rom3.txt +++ /dev/null @@ -1 +0,0 @@ -gBattleBuffersTransferData 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/common_syms/rtc.txt b/common_syms/rtc.txt deleted file mode 100644 index fa00a34d5..000000000 --- a/common_syms/rtc.txt +++ /dev/null @@ -1 +0,0 @@ -gLocalTime diff --git a/common_syms/save.txt b/common_syms/save.txt deleted file mode 100644 index d09a52bcf..000000000 --- a/common_syms/save.txt +++ /dev/null @@ -1,9 +0,0 @@ -gLastWrittenSector -gLastSaveCounter -gLastKnownGoodSector -gDamagedSaveSectors -gSaveCounter -gFastSaveSection -gUnknown_03005EB4 -gSaveFileStatus -gGameContinueCallback diff --git a/common_syms/scene/contest_painting.txt b/common_syms/scene/contest_painting.txt new file mode 100644 index 000000000..2e8490348 --- /dev/null +++ b/common_syms/scene/contest_painting.txt @@ -0,0 +1,5 @@ +gUnknown_03005E10 +gUnknown_03005E20 +gUnknown_03005E40 +gUnknown_03005E8C +gUnknown_03005E90 diff --git a/common_syms/scene/intro.txt b/common_syms/scene/intro.txt new file mode 100644 index 000000000..d069b1014 --- /dev/null +++ b/common_syms/scene/intro.txt @@ -0,0 +1,2 @@ +gIntroFrameCounter +gMultibootProgramStruct diff --git a/common_syms/sound.txt b/common_syms/sound.txt deleted file mode 100644 index 0f6f2fc75..000000000 --- a/common_syms/sound.txt +++ /dev/null @@ -1 +0,0 @@ -gDisableMusic diff --git a/common_syms/sound_check_menu.txt b/common_syms/sound_check_menu.txt deleted file mode 100644 index ba350ad8e..000000000 --- a/common_syms/sound_check_menu.txt +++ /dev/null @@ -1 +0,0 @@ -gUnknown_03005D30 diff --git a/common_syms/sprite.txt b/common_syms/sprite.txt deleted file mode 100644 index fe38dc61f..000000000 --- a/common_syms/sprite.txt +++ /dev/null @@ -1,12 +0,0 @@ -gSpriteOrder -gSpriteTileAllocBitmap -gSpriteCoordOffsetX -gOamLimit -gReservedSpriteTileCount -gSpriteCopyRequestCount -gSpriteCopyRequests -gSpriteCoordOffsetY -gOamMatrices -gShouldProcessSpriteCopyRequests -gOamMatrixAllocBitmap -gReservedSpritePaletteCount diff --git a/common_syms/start_menu.txt b/common_syms/start_menu.txt deleted file mode 100644 index bc0c247d1..000000000 --- a/common_syms/start_menu.txt +++ /dev/null @@ -1 +0,0 @@ -gCallback_03004AE8 diff --git a/common_syms/string_util.txt b/common_syms/string_util.txt deleted file mode 100644 index 1ee62aaad..000000000 --- a/common_syms/string_util.txt +++ /dev/null @@ -1 +0,0 @@ -gUnknownStringVar diff --git a/common_syms/task.txt b/common_syms/task.txt deleted file mode 100644 index 6601bd11b..000000000 --- a/common_syms/task.txt +++ /dev/null @@ -1 +0,0 @@ -gTasks diff --git a/common_syms/tv.txt b/common_syms/tv.txt deleted file mode 100644 index 829139f8f..000000000 --- a/common_syms/tv.txt +++ /dev/null @@ -1 +0,0 @@ -gUnknown_03005D38 diff --git a/ld_script.txt b/ld_script.txt index c895c4d06..338d8c8c7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -25,7 +25,7 @@ SECTIONS { /* .bss.code starts at 0x3000F60 */ - src/m4a_2.o(.bss.code); + src/engine/m4a_2.o(.bss.code); /* COMMON starts at 0x3001760 */ @@ -39,239 +39,239 @@ SECTIONS { ALIGN(4) { asm/crt0.o(.text); - src/main.o(.text); - src/sprite.o(.text); - src/text.o(.text); - src/string_util.o(.text); - src/link.o(.text); - src/rtc.o(.text); - src/main_menu.o(.text); - src/rom3.o(.text); - src/decompress.o(.text); + src/engine/main.o(.text); + src/engine/sprite.o(.text); + src/engine/text.o(.text); + src/engine/string_util.o(.text); + src/engine/link.o(.text); + src/engine/rtc.o(.text); + src/engine/main_menu.o(.text); + src/misc/rom3.o(.text); + src/engine/decompress.o(.text); asm/battle_1.o(.text); - src/rom_800D42C.o(.text); + src/misc/rom_800D42C.o(.text); asm/battle_1.o(.text_800DC24); - src/battle_2.o(.text); + src/battle/battle_2.o(.text); asm/battle_2.o(.text); asm/battle_3.o(.text); - src/battle_4.o(.text); + src/battle/battle_4.o(.text); asm/battle_5.o(.text); - src/battle_6.o(.text); - src/battle_7.o(.text); - src/battle_8.o(.text); + src/battle/battle_6.o(.text); + src/battle/battle_7.o(.text); + src/battle/battle_8.o(.text); asm/battle_9.o(.text); - src/battle_10.o(.text); - src/pokemon_1.o(.text); - src/calculate_base_damage.o(.text); - src/pokemon_2.o(.text); + src/battle/battle_10.o(.text); + src/pokemon/pokemon_1.o(.text); + src/battle/calculate_base_damage.o(.text); + src/pokemon/pokemon_2.o(.text); asm/pokemon_item_effect.o(.text); - src/pokemon_3.o(.text); - src/de_rom_8040FE0.o(.text); - src/trig.o(.text); - src/rng.o(.text); - src/util.o(.text); - src/blend_palette.o(.text); - src/daycare.o(.text); + src/pokemon/pokemon_3.o(.text); + src/misc/de_rom_8040FE0.o(.text); + src/engine/trig.o(.text); + src/engine/rng.o(.text); + src/engine/util.o(.text); + src/engine/blend_palette.o(.text); + src/field/daycare.o(.text); asm/daycare.o(.text); - src/egg_hatch.o(.text); + src/scene/egg_hatch.o(.text); asm/egg_hatch.o(.text); - src/battle_interface.o(.text); - src/smokescreen.o(.text); - src/pokeball.o(.text); - src/load_save.o(.text); + src/battle/battle_interface.o(.text); + src/battle/smokescreen.o(.text); + src/battle/pokeball.o(.text); + src/engine/load_save.o(.text); asm/trade.o(.text); - src/trade.o(.text); + src/engine/trade.o(.text); asm/trade.o(.text.sub_804A9F4); - src/trade.o(.text.sub_804DAD4); + src/engine/trade.o(.text.sub_804DAD4); asm/trade.o(.text.sub_804DB2C); asm/berry_blender.o(.text); - src/play_time.o(.text); - src/new_game.o(.text); - src/rom4.o(.text); - src/fieldmap.o(.text); - src/metatile_behavior.o(.text); - src/field_camera.o(.text); - src/field_door.o(.text); - src/field_player_avatar.o(.text); - src/field_map_obj.o(.text); + src/engine/play_time.o(.text); + src/scene/new_game.o(.text); + src/misc/rom4.o(.text); + src/field/fieldmap.o(.text); + src/field/metatile_behavior.o(.text); + src/field/field_camera.o(.text); + src/field/field_door.o(.text); + src/field/field_player_avatar.o(.text); + src/field/field_map_obj.o(.text); asm/field_map_obj.o(.text); - src/field_map_obj.o(.text_fmocb2_c); - src/field_ground_effect.o(.text); + src/field/field_map_obj.o(.text_fmocb2_c); + src/field/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); - src/text_window.o(.text); - src/script.o(.text); - src/scrcmd.o(.text); - src/field_control_avatar.o(.text); - src/event_data.o(.text); - src/coord_event_weather.o(.text); - src/field_tasks.o(.text); - src/clock.o(.text); - src/reset_rtc_screen.o(.text); + src/field/field_map_obj_helpers.o(.text); + src/field/field_message_box.o(.text); + src/field/map_obj_lock.o(.text); + src/engine/text_window.o(.text); + src/engine/script.o(.text); + src/field/scrcmd.o(.text); + src/field/field_control_avatar.o(.text); + src/field/event_data.o(.text); + src/field/coord_event_weather.o(.text); + src/field/field_tasks.o(.text); + src/engine/clock.o(.text); + src/engine/reset_rtc_screen.o(.text); asm/party_menu.o(.text); - src/party_menu.o(.text); + src/field/party_menu.o(.text); asm/party_menu.o(.text_8070968); - src/start_menu.o(.text); - src/menu.o(.text); - src/tileset_anim.o(.text); - src/palette.o(.text); - src/sound.o(.text); - src/battle_anim.o(.text); - src/rom_8077ABC.o(.text); - src/task.o(.text); + src/field/start_menu.o(.text); + src/engine/menu.o(.text); + src/engine/tileset_anim.o(.text); + src/engine/palette.o(.text); + src/engine/sound.o(.text); + src/battle/battle_anim.o(.text); + src/misc/rom_8077ABC.o(.text); + src/engine/task.o(.text); asm/reshow_battle_screen.o(.text); asm/battle_anim_807B69C.o(.text); - src/title_screen.o(.text); - src/field_weather.o(.text); + src/scene/title_screen.o(.text); + src/field/field_weather.o(.text); asm/field_weather.o(.text); - src/field_fadetransition.o(.text); - src/field_screen_effect.o(.text); - src/battle_setup.o(.text); + src/field/field_fadetransition.o(.text); + src/field/field_screen_effect.o(.text); + src/battle/battle_setup.o(.text); asm/cable_club.o(.text); - src/cable_club.o(.text); + src/engine/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); - src/field_effect.o(.text); - src/unknown_task.o(.text); + src/debug/mori_debug_menu.o(.text); + src/field/trainer_see.o(.text); + src/field/wild_encounter.o(.text); + src/field/field_effect.o(.text); + src/misc/unknown_task.o(.text); asm/pokemon_menu.o(.text); - src/option_menu.o(.text); - src/pokedex.o(.text); - src/trainer_card.o(.text); - src/save_menu_util.o(.text); - src/battle_party_menu.o(.text); + src/engine/option_menu.o(.text); + src/pokemon/pokedex.o(.text); + src/engine/trainer_card.o(.text); + src/engine/save_menu_util.o(.text); + src/battle/battle_party_menu.o(.text); asm/pokemon_storage_system.o(.text); - src/pokemon_storage_system.o(.text); + src/pokemon/pokemon_storage_system.o(.text); asm/pokemon_storage_system.o(.text_8098A38); - src/pokemon_icon.o(.text); + src/pokemon/pokemon_icon.o(.text); asm/pokemon_summary_screen.o(.text); - src/pokemon_summary_screen.o(.text); + src/pokemon/pokemon_summary_screen.o(.text); asm/pokemon_summary_screen.o(.text_80A0958); - src/script_movement.o(.text); - src/fldeff_cut.o(.text); - src/mail_data.o(.text); - src/map_name_popup.o(.text); - src/item_menu.o(.text); - src/battle_anim_80A7E7C.o(.text); - src/item.o(.text); - src/matsuda_debug_menu.o(.text); + src/field/script_movement.o(.text); + src/field/fldeff_cut.o(.text); + src/pokemon/mail_data.o(.text); + src/field/map_name_popup.o(.text); + src/field/item_menu.o(.text); + src/battle/battle_anim_80A7E7C.o(.text); + src/field/item.o(.text); + src/debug/matsuda_debug_menu.o(.text); asm/contest.o(.text); - src/shop.o(.text); + src/field/shop.o(.text); asm/shop.o(.text); - src/berry.o(.text); - src/script_menu.o(.text); - src/naming_screen.o(.text); - src/money.o(.text); + src/field/berry.o(.text); + src/field/script_menu.o(.text); + src/engine/naming_screen.o(.text); + src/field/money.o(.text); asm/contest_effect.o(.text); - src/record_mixing.o(.text); - src/sound_check_menu.o(.text); - src/secret_base.o(.text); + src/engine/record_mixing.o(.text); + src/engine/sound_check_menu.o(.text); + src/field/secret_base.o(.text); asm/secret_base.o(.text_80BC1D0); - src/tv.o(.text); + src/field/tv.o(.text); asm/contest_link_80C2020.o(.text); - src/script_pokemon_util_80C4BF0.o(.text); - src/field_poison.o(.text); - src/pokemon_size_record.o(.text); + src/misc/script_pokemon_util_80C4BF0.o(.text); + src/field/field_poison.o(.text); + src/pokemon/pokemon_size_record.o(.text); asm/fldeff_80C5CD4.o(.text); - src/field_special_scene.o(.text); - src/rotating_gate.o(.text); - src/safari_zone.o(.text); + src/field/field_special_scene.o(.text); + src/field/rotating_gate.o(.text); + src/field/safari_zone.o(.text); asm/contest_link_80C857C.o(.text); - src/contest_link_80C857C.o(.text); - src/item_use.o(.text); + src/battle/contest_link_80C857C.o(.text); + src/field/item_use.o(.text); asm/battle_anim_80CA710.o(.text); - src/bike.o(.text); + src/field/bike.o(.text); asm/easy_chat.o(.text); - src/easy_chat.o(.text); + src/field/easy_chat.o(.text); asm/pokenav.o(.text); - src/pokenav.o(.text); + src/field/pokenav.o(.text); asm/pokenav.o(.text_80F708C); - src/mon_markings.o(.text); - src/mauville_old_man.o(.text); + src/pokemon/mon_markings.o(.text); + src/field/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); - src/dewford_trend.o(.text); - src/heal_location.o(.text); - src/region_map.o(.text); + src/pokemon/mail.o(.text); + src/field/menu_helpers.o(.text); + src/misc/script_pokemon_util_80F99CC.o(.text); + src/field/dewford_trend.o(.text); + src/field/heal_location.o(.text); + src/field/region_map.o(.text); asm/cute_sketch.o(.text); - src/decoration.o(.text); + src/field/decoration.o(.text); asm/slot_machine.o(.text); - src/slot_machine.o(.text); + src/field/slot_machine.o(.text); asm/slot_machine.o(.text_8104D30) - src/slot_machine.o(.text_b); - src/contest_painting.o(.text); - src/battle_ai.o(.text); - src/trader.o(.text); - src/starter_choose.o(.text); - src/wallclock.o(.text); - src/rom6.o(.text); - src/pokeblock.o(.text); - src/fldeff_flash.o(.text); - src/post_battle_event_funcs.o(.text); - src/time_events.o(.text); - src/birch_pc.o(.text); - src/hof_pc.o(.text); - src/field_specials.o(.text); - src/battle_records.o(.text); + src/field/slot_machine.o(.text_b); + src/scene/contest_painting.o(.text); + src/battle/battle_ai.o(.text); + src/field/trader.o(.text); + src/field/starter_choose.o(.text); + src/field/wallclock.o(.text); + src/misc/rom6.o(.text); + src/field/pokeblock.o(.text); + src/field/fldeff_flash.o(.text); + src/battle/post_battle_event_funcs.o(.text); + src/engine/time_events.o(.text); + src/field/birch_pc.o(.text); + src/field/hof_pc.o(.text); + src/field/field_specials.o(.text); + src/battle/battle_records.o(.text); asm/pokedex_area_screen.o(.text); asm/evolution_scene.o(.text); asm/roulette.o(.text); asm/pokedex_cry_screen.o(.text); - src/pokedex_cry_screen.o(.text); + src/pokemon/pokedex_cry_screen.o(.text); asm/pokedex_cry_screen.o(.text_811A4F8); - src/coins.o(.text); - src/landmark.o(.text); - src/fldeff_strength.o(.text); + src/field/coins.o(.text); + src/field/landmark.o(.text); + src/field/fldeff_strength.o(.text); asm/battle_transition.o(.text); - src/battle_811DA74.o(.text); + src/battle/battle_811DA74.o(.text); asm/battle_message.o(.text); - src/choose_party.o(.text); + src/field/choose_party.o(.text); asm/cable_car.o(.text); asm/roulette_util.o(.text); asm/cable_car_util.o(.text); - src/unused_8124F94.o(.text); - src/save.o(.text); - src/mystery_event_script.o(.text); + src/misc/unused_8124F94.o(.text); + src/engine/save.o(.text); + src/engine/mystery_event_script.o(.text); asm/field_effect_helpers.o(.text); asm/contest_ai.o(.text); asm/battle_anim_81258BC.o(.text); - src/battle_anim_81258BC.o(.text); + src/battle/battle_anim_81258BC.o(.text); asm/battle_anim_81258BC.o(.text_812BBFC); - src/fldeff_sweetscent.o(.text); + src/field/fldeff_sweetscent.o(.text); asm/battle_anim_812C144.o(.text); asm/learn_move.o(.text); - src/fldeff_softboiled.o(.text); - src/decoration_inventory.o(.text); - src/roamer.o(.text); + src/field/fldeff_softboiled.o(.text); + src/field/decoration_inventory.o(.text); + src/field/roamer.o(.text); asm/battle_tower.o(.text); - src/use_pokeblock.o(.text); - src/battle_anim_8137220.o(.text); - src/player_pc.o(.text); - src/intro.o(.text); - src/field_region_map.o(.text); + src/field/use_pokeblock.o(.text); + src/battle/battle_anim_8137220.o(.text); + src/field/player_pc.o(.text); + src/scene/intro.o(.text); + src/field/field_region_map.o(.text); asm/battle_anim_813F0F4.o(.text); asm/hall_of_fame.o(.text); - src/credits.o(.text); - src/lottery_corner.o(.text); - src/diploma.o(.text); - src/berry_tag_screen.o(.text); - src/mystery_event_menu.o(.text); - src/save_failed_screen.o(.text); - src/braille_puzzles.o(.text); + src/scene/credits.o(.text); + src/field/lottery_corner.o(.text); + src/field/diploma.o(.text); + src/field/berry_tag_screen.o(.text); + src/engine/mystery_event_menu.o(.text); + src/engine/save_failed_screen.o(.text); + src/field/braille_puzzles.o(.text); asm/pokeblock_feed.o(.text); - src/clear_save_data_menu.o(.text); + src/engine/clear_save_data_menu.o(.text); asm/intro_credits_graphics.o(.text); asm/evolution_graphics.o(.text); - src/bard_music.o(.text); - src/fldeff_teleport.o(.text); - src/unknown_debug_menu.o(.text); - src/name_string_util.o(.text); - src/menu_cursor.o(.text); + src/field/bard_music.o(.text); + src/field/fldeff_teleport.o(.text); + src/debug/unknown_debug_menu.o(.text); + src/engine/name_string_util.o(.text); + src/engine/menu_cursor.o(.text); } =0 script_data : @@ -293,13 +293,13 @@ SECTIONS { { asm/libgcnmultiboot.o(.text); asm/m4a_1.o(.text); - src/m4a_2.o(.text); + src/engine/m4a_2.o(.text); asm/m4a_3.o(.text); - src/m4a_4.o(.text); - src/agb_flash.o(.text); - src/agb_flash_1m.o(.text); - src/agb_flash_mx.o(.text); - src/siirtc.o(.text); + src/engine/m4a_4.o(.text); + src/engine/agb_flash.o(.text); + src/engine/agb_flash_1m.o(.text); + src/engine/agb_flash_mx.o(.text); + src/engine/siirtc.o(.text); asm/libagbsyscall.o(.text); tools/agbcc/lib/libgcc.a:_call_via_rX.o(.text); tools/agbcc/lib/libgcc.a:_divsi3.o(.text); @@ -315,129 +315,129 @@ SECTIONS { tools/agbcc/lib/libgcc.a:fp-bit.o(.text); tools/agbcc/lib/libgcc.a:_lshrdi3.o(.text); tools/agbcc/lib/libgcc.a:_negdi2.o(.text); - src/libc.o(.text); + src/engine/libc.o(.text); } =0 .rodata : ALIGN(4) { - src/main.o(.rodata); - src/sprite.o(.rodata); + src/engine/main.o(.rodata); + src/engine/sprite.o(.rodata); . += 0x8; /* Why the gap? */ - src/text.o(.rodata); - src/string_util.o(.rodata); - src/link.o(.rodata); - src/rtc.o(.rodata); + src/engine/text.o(.rodata); + src/engine/string_util.o(.rodata); + src/engine/link.o(.rodata); + src/engine/rtc.o(.rodata); data/main_menu.o(.rodata); data/data2a.o(.rodata); - src/battle_4.o(.rodata); + src/battle/battle_4.o(.rodata); data/data2b.o(.rodata); - src/pokemon_data.o(.rodata); + src/pokemon/pokemon_data.o(.rodata); . = ALIGN(4); - src/trig.o(.rodata); - src/util.o(.rodata); + src/engine/trig.o(.rodata); + src/engine/util.o(.rodata); data/daycare.o(.rodata); data/egg_hatch.o(.rodata); data/battle_interface.o(.rodata); - src/pokeball.o(.rodata); + src/battle/pokeball.o(.rodata); data/trade.o(.rodata); data/berry_blender.o(.rodata); - src/new_game.o(.rodata); + src/scene/new_game.o(.rodata); data/rom4.o(.rodata); data/tilesets.o(.rodata); data/maps.o(.rodata); - src/fieldmap.o(.rodata); - src/metatile_behavior.o(.rodata); + src/field/fieldmap.o(.rodata); + src/field/metatile_behavior.o(.rodata); data/field_door.o(.rodata); - src/field_player_avatar.o(.rodata); - src/field_map_obj.o(.rodata); - src/field_ground_effect.o(.rodata); + src/field/field_player_avatar.o(.rodata); + src/field/field_map_obj.o(.rodata); + src/field/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); - src/scrcmd.o(.rodata); - src/coord_event_weather.o(.rodata); - src/field_tasks.o(.rodata); + src/engine/script.o(.rodata); + src/field/scrcmd.o(.rodata); + src/field/coord_event_weather.o(.rodata); + src/field/field_tasks.o(.rodata); data/reset_rtc_screen.o(.rodata); data/party_menu.o(.rodata); - src/start_menu.o(.rodata); - src/menu.o(.rodata); + src/field/start_menu.o(.rodata); + src/engine/menu.o(.rodata); data/tileset_anim.o(.rodata); - src/palette.o(.rodata); - src/sound.o(.rodata); + src/engine/palette.o(.rodata); + src/engine/sound.o(.rodata); data/battle_anim.o(.rodata); - src/battle_anim.o(.rodata); - src/rom_8077ABC.o(.rodata); + src/battle/battle_anim.o(.rodata); + src/misc/rom_8077ABC.o(.rodata); data/map_events.o(.rodata); data/data_8393054.o(.rodata); - src/task.o(.rodata); + src/engine/task.o(.rodata); data/battle_anim_807B69C.o(.rodata); - src/title_screen.o(.rodata); + src/scene/title_screen.o(.rodata); data/field_weather.o(.rodata); - src/field_screen_effect.o(.rodata); - src/battle_setup.o(.rodata); + src/field/field_screen_effect.o(.rodata); + src/battle/battle_setup.o(.rodata); data/cable_club.o(.rodata); data/mori_debug_menu.o(.rodata); data/trainer_see.o(.rodata); - src/wild_encounter.o(.rodata); + src/field/wild_encounter.o(.rodata); data/wild_encounter.o(.rodata); - src/field_effect.o(.rodata); + src/field/field_effect.o(.rodata); data/pokemon_menu.o(.rodata); - src/option_menu.o(.rodata); - src/pokedex.o(.rodata); - src/trainer_card.o(.rodata); - src/battle_party_menu.o(.rodata); + src/engine/option_menu.o(.rodata); + src/pokemon/pokedex.o(.rodata); + src/engine/trainer_card.o(.rodata); + src/battle/battle_party_menu.o(.rodata); data/pokemon_storage_system.o(.rodata); - src/pokemon_icon.o(.rodata); + src/pokemon/pokemon_icon.o(.rodata); data/pokemon_summary_screen.o(.rodata); data/fldeff_cut.o(.rodata); - src/item_menu.o(.rodata); + src/field/item_menu.o(.rodata); data/battle_anim_80A7E7C.o(.rodata); - src/item.o(.rodata); + src/field/item.o(.rodata); data/matsuda_debug_menu.o(.rodata); data/contest.o(.rodata); data/shop.o(.rodata); - src/berry.o(.rodata); - src/script_menu.o(.rodata); - src/naming_screen.o(.rodata); + src/field/berry.o(.rodata); + src/field/script_menu.o(.rodata); + src/engine/naming_screen.o(.rodata); data/naming_screen.o(.rodata); data/money.o(.rodata); data/contest_effect.o(.rodata); - src/record_mixing.o(.data); - src/record_mixing.o(.rodata); - src/sound_check_menu.o(.rodata); + src/engine/record_mixing.o(.data); + src/engine/record_mixing.o(.rodata); + src/engine/sound_check_menu.o(.rodata); data/secret_base.o(.rodata); data/tv.o(.rodata); data/contest_link_80C2020.o(.rodata); - src/pokemon_size_record.o(.rodata); + src/pokemon/pokemon_size_record.o(.rodata); data/fldeff_80C5CD4.o(.rodata); - src/field_special_scene.o(.rodata); + src/field/field_special_scene.o(.rodata); data/field_special_scene.o(.rodata); - src/rotating_gate.o(.rodata); - src/item_use.o(.rodata); + src/field/rotating_gate.o(.rodata); + src/field/item_use.o(.rodata); data/battle_anim_80CA710.o(.rodata); - src/bike.o(.rodata); + src/field/bike.o(.rodata); data/easy_chat.o(.rodata); data/pokenav.o(.rodata); data/mon_markings.o(.rodata); data/mauville_old_man.o(.rodata); data/mail.o(.rodata); - src/menu_helpers.o(.rodata); - src/heal_location.o(.rodata); - src/region_map.o(.rodata); + src/field/menu_helpers.o(.rodata); + src/field/heal_location.o(.rodata); + src/field/region_map.o(.rodata); data/cute_sketch.o(.rodata); - src/decoration.o(.rodata); + src/field/decoration.o(.rodata); data/slot_machine.o(.rodata); - src/contest_painting.o(.rodata); - src/battle_ai.o(.rodata); - src/trader.o(.rodata); - src/starter_choose.o(.rodata); - src/wallclock.o(.rodata); - src/pokeblock.o(.rodata); + src/scene/contest_painting.o(.rodata); + src/battle/battle_ai.o(.rodata); + src/field/trader.o(.rodata); + src/field/starter_choose.o(.rodata); + src/field/wallclock.o(.rodata); + src/field/pokeblock.o(.rodata); data/fldeff_flash.o(.rodata); - src/time_events.o(.rodata); - src/field_specials.o(.rodata); + src/engine/time_events.o(.rodata); + src/field/field_specials.o(.rodata); data/pokedex_area_screen.o(.rodata); data/evolution_scene.o(.rodata); data/roulette.o(.rodata); @@ -446,30 +446,30 @@ SECTIONS { data/battle_transition.o(.rodata); data/battle_811DA74.o(.rodata); data/battle_message.o(.rodata); - src/choose_party.o(.rodata); + src/field/choose_party.o(.rodata); data/cable_car.o(.rodata); - src/save.o(.rodata); + src/engine/save.o(.rodata); data/field_effect_helpers.o(.rodata); data/contest_ai.o(.rodata); data/battle_anim_81258BC.o(.rodata); data/battle_anim_812C144.o(.rodata); data/learn_move.o(.rodata); - src/decoration_inventory.o(.rodata); - src/roamer.o(.rodata); + src/field/decoration_inventory.o(.rodata); + src/field/roamer.o(.rodata); data/battle_tower.o(.rodata); - src/use_pokeblock.o(.rodata); + src/field/use_pokeblock.o(.rodata); data/battle_anim_8137220.o(.rodata); - src/player_pc.o(.rodata); - src/intro.o(.rodata); + src/field/player_pc.o(.rodata); + src/scene/intro.o(.rodata); data/battle_anim_813F0F4.o(.rodata); data/hall_of_fame.o(.rodata); - src/credits.o(.rodata); + src/scene/credits.o(.rodata); data/credits.o(.rodata); - src/lottery_corner.o(.rodata); - src/diploma.o(.rodata); + src/field/lottery_corner.o(.rodata); + src/field/diploma.o(.rodata); src/strings.o(.rodata); - src/berry_tag_screen.o(.rodata); - src/save_failed_screen.o(.rodata); + src/field/berry_tag_screen.o(.rodata); + src/engine/save_failed_screen.o(.rodata); data/pokeblock_feed.o(.rodata); data/intro_credits_graphics.o(.rodata); data/evolution_graphics.o(.rodata); @@ -478,7 +478,7 @@ SECTIONS { data/strings2.o(.rodata); data/menu_cursor.o(.rodata); data/mystery_event_msg.o(.rodata); - src/m4a_tables.o(.rodata); + src/engine/m4a_tables.o(.rodata); data/sound_data.o(.rodata); } =0 @@ -907,11 +907,11 @@ SECTIONS { lib_rodata : ALIGN(4) { - src/agb_flash.o(.rodata); - src/agb_flash_1m.o(.rodata); - src/agb_flash_mx.o(.rodata); - src/agb_flash_le.o(.rodata); - src/siirtc.o(.rodata); + src/engine/agb_flash.o(.rodata); + src/engine/agb_flash_1m.o(.rodata); + src/engine/agb_flash_mx.o(.rodata); + src/engine/agb_flash_le.o(.rodata); + src/engine/siirtc.o(.rodata); tools/agbcc/lib/libgcc.a:_udivdi3.o(.rodata); } =0 diff --git a/src/agb_flash.c b/src/agb_flash.c deleted file mode 100644 index 340d469a7..000000000 --- a/src/agb_flash.c +++ /dev/null @@ -1,295 +0,0 @@ -#include "gba/gba.h" -#include "gba/flash_internal.h" - -static u8 sTimerNum; -static u16 sTimerCount; -static vu16 *sTimerReg; -static u16 sSavedIme; - -u8 gFlashTimeoutFlag; -u8 (*PollFlashStatus)(u8 *); -u16 (*WaitForFlashWrite)(u8 phase, u8 *addr, u8 lastData); -u16 (*ProgramFlashSector)(u16 sectorNum, u8 *src); -const struct FlashType *gFlash; -u16 (*ProgramFlashByte)(u16 sectorNum, u32 offset, u8 data); -u16 gFlashNumRemainingBytes; -u16 (*EraseFlashChip)(); -u16 (*EraseFlashSector)(u16 sectorNum); -const u16 *gFlashMaxTime; - -void SetReadFlash1(u16 *dest); - -void SwitchFlashBank(u8 bankNum) -{ - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0xB0); - FLASH_WRITE(0x0000, bankNum); -} - -#define DELAY() \ -do { \ - vu16 i; \ - for (i = 20000; i != 0; i--) \ - ; \ -} while (0) - -u16 ReadFlashId(void) -{ - u16 flashId; - u16 readFlash1Buffer[0x20]; - u8 (*readFlash1)(u8 *); - - SetReadFlash1(readFlash1Buffer); - readFlash1 = (u8 (*)(u8 *))((s32)readFlash1Buffer + 1); - - // Enter ID mode. - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0x90); - DELAY(); - - flashId = readFlash1(FLASH_BASE + 1) << 8; - flashId |= readFlash1(FLASH_BASE); - - // Leave ID mode. - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0xF0); - FLASH_WRITE(0x5555, 0xF0); - DELAY(); - - return flashId; -} - -void FlashTimerIntr(void) -{ - if (sTimerCount != 0 && --sTimerCount == 0) - gFlashTimeoutFlag = 1; -} - -u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)) -{ - if (timerNum >= 4) - return 1; - - sTimerNum = timerNum; - sTimerReg = ®_TMCNT(sTimerNum); - *intrFunc = FlashTimerIntr; - return 0; -} - -void StartFlashTimer(u8 phase) -{ - const u16 *maxTime = &gFlashMaxTime[phase * 3]; - sSavedIme = REG_IME; - REG_IME = 0; - sTimerReg[1] = 0; - REG_IE |= (INTR_FLAG_TIMER0 << sTimerNum); - gFlashTimeoutFlag = 0; - sTimerCount = *maxTime++; - *sTimerReg++ = *maxTime++; - *sTimerReg-- = *maxTime++; - REG_IF = (INTR_FLAG_TIMER0 << sTimerNum); - REG_IME = 1; -} - -void StopFlashTimer(void) -{ - REG_IME = 0; - *sTimerReg++ = 0; - *sTimerReg-- = 0; - REG_IE &= ~(INTR_FLAG_TIMER0 << sTimerNum); - REG_IME = sSavedIme; -} - -u8 ReadFlash1(u8 *addr) -{ - return *addr; -} - -void SetReadFlash1(u16 *dest) -{ - u16 *src; - u16 i; - - PollFlashStatus = (u8 (*)(u8 *))((s32)dest + 1); - - src = (u16 *)ReadFlash1; - src = (u16 *)((s32)src ^ 1); - - i = ((s32)SetReadFlash1 - (s32)ReadFlash1) >> 1; - - while (i != 0) - { - *dest++ = *src++; - i--; - } -} - -void ReadFlash_Core(u8 *src, u8 *dest, u32 size) -{ - while (size-- != 0) - { - *dest++ = *src++; - } -} - -void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) -{ - u8 *src; - u16 i; - u16 readFlash_Core_Buffer[0x40]; - u16 *funcSrc; - u16 *funcDest; - void (*readFlash_Core)(u8 *, u8 *, u32); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - if (gFlash->romSize == FLASH_ROM_SIZE_1M) - { - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - } - - funcSrc = (u16 *)ReadFlash_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); - funcDest = readFlash_Core_Buffer; - - i = ((s32)ReadFlash - (s32)ReadFlash_Core) >> 1; - - while (i != 0) - { - *funcDest++ = *funcSrc++; - i--; - } - - readFlash_Core = (void (*)(u8 *, u8 *, u32))((s32)readFlash_Core_Buffer + 1); - - src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; - - readFlash_Core(src, dest, size); -} - -u32 VerifyFlashSector_Core(u8 *src, u8 *tgt, u32 size) -{ - while (size-- != 0) - { - if (*tgt++ != *src++) - return (u32)(tgt - 1); - } - - return 0; -} - -u32 VerifyFlashSector(u16 sectorNum, u8 *src) -{ - u16 i; - u16 verifyFlashSector_Core_Buffer[0x80]; - u16 *funcSrc; - u16 *funcDest; - u8 *tgt; - u16 size; - u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - if (gFlash->romSize == FLASH_ROM_SIZE_1M) - { - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - } - - funcSrc = (u16 *)VerifyFlashSector_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); - funcDest = verifyFlashSector_Core_Buffer; - - i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; - - while (i != 0) - { - *funcDest++ = *funcSrc++; - i--; - } - - verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); - - tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); - size = gFlash->sector.size; - - return verifyFlashSector_Core(src, tgt, size); // return 0 if verified. -} - -u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) -{ - u16 i; - u16 verifyFlashSector_Core_Buffer[0x80]; - u16 *funcSrc; - u16 *funcDest; - u8 *tgt; - u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32); - - if (gFlash->romSize == FLASH_ROM_SIZE_1M) - { - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - } - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - funcSrc = (u16 *)VerifyFlashSector_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); - funcDest = verifyFlashSector_Core_Buffer; - - i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; - - while (i != 0) - { - *funcDest++ = *funcSrc++; - i--; - } - - verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); - - tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); - - return verifyFlashSector_Core(src, tgt, n); -} - -u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src) // 3rd is unused -{ - u8 i; - u32 result; - - for (i = 0; i < 3; i++) // 3 attempts - { - result = ProgramFlashSector(sectorNum, src); - if (result != 0) - continue; - - result = VerifyFlashSector(sectorNum, src); - if (result == 0) - break; - } - - return result; // return 0 if verified and programmed. -} - -u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, u8 *src, u32 n) -{ - u8 i; - u32 result; - - for (i = 0; i < 3; i++) - { - result = ProgramFlashSector(sectorNum, src); - if (result != 0) - continue; - - result = VerifyFlashSectorNBytes(sectorNum, src, n); - if (result == 0) - break; - } - - return result; -} diff --git a/src/agb_flash_1m.c b/src/agb_flash_1m.c deleted file mode 100644 index e249fab9a..000000000 --- a/src/agb_flash_1m.c +++ /dev/null @@ -1,86 +0,0 @@ -#include "gba/gba.h" -#include "gba/flash_internal.h" - -static const char AgbLibFlashVersion[] = "FLASH1M_V103"; - -const struct FlashSetupInfo * const sSetupInfos[] = -{ - &MX29L010, - &LE26FV10N1TS, - &DefaultFlash -}; - -u16 IdentifyFlash(void) -{ - u16 result; - u16 flashId; - const struct FlashSetupInfo * const *setupInfo; - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - flashId = ReadFlashId(); - - setupInfo = sSetupInfos; - result = 1; - - for (;;) - { - if ((*setupInfo)->type.ids.separate.makerId == 0) - break; - - if (flashId == (*setupInfo)->type.ids.joined) - { - result = 0; - break; - } - - setupInfo++; - } - - ProgramFlashByte = (*setupInfo)->programFlashByte; - ProgramFlashSector = (*setupInfo)->programFlashSector; - EraseFlashChip = (*setupInfo)->eraseFlashChip; - EraseFlashSector = (*setupInfo)->eraseFlashSector; - WaitForFlashWrite = (*setupInfo)->WaitForFlashWrite; - gFlashMaxTime = (*setupInfo)->maxTime; - gFlash = &(*setupInfo)->type; - - return result; -} - -u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData) -{ - u16 result = 0; - u8 status; - - StartFlashTimer(phase); - - while ((status = PollFlashStatus(addr)) != lastData) - { - if (status & 0x20) - { - // The write operation exceeded the flash chip's time limit. - - if (PollFlashStatus(addr) == lastData) - break; - - FLASH_WRITE(0x5555, 0xF0); - result = phase | 0xA000u; - break; - } - - if (gFlashTimeoutFlag) - { - if (PollFlashStatus(addr) == lastData) - break; - - FLASH_WRITE(0x5555, 0xF0); - result = phase | 0xC000u; - break; - } - } - - StopFlashTimer(); - - return result; -} diff --git a/src/agb_flash_le.c b/src/agb_flash_le.c deleted file mode 100644 index 39d956e27..000000000 --- a/src/agb_flash_le.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "gba/gba.h" -#include "gba/flash_internal.h" - -const u16 leMaxTime[] = -{ - 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, -}; - -const struct FlashSetupInfo LE26FV10N1TS = -{ - ProgramFlashByte_MX, - ProgramFlashSector_MX, - EraseFlashChip_MX, - EraseFlashSector_MX, - WaitForFlashWrite_Common, - leMaxTime, - { - 131072, // ROM size - { - 4096, // sector size - 12, // bit shift to multiply by sector size (4096 == 1 << 12) - 32, // number of sectors - 0 // appears to be unused - }, - { 3, 1 }, // wait state setup data - { { 0x62, 0x13 } } // ID - } -}; diff --git a/src/agb_flash_mx.c b/src/agb_flash_mx.c deleted file mode 100644 index 67348901f..000000000 --- a/src/agb_flash_mx.c +++ /dev/null @@ -1,197 +0,0 @@ -#include "gba/gba.h" -#include "gba/flash_internal.h" - -const u16 mxMaxTime[] = -{ - 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, -}; - -const struct FlashSetupInfo MX29L010 = -{ - ProgramFlashByte_MX, - ProgramFlashSector_MX, - EraseFlashChip_MX, - EraseFlashSector_MX, - WaitForFlashWrite_Common, - mxMaxTime, - { - 131072, // ROM size - { - 4096, // sector size - 12, // bit shift to multiply by sector size (4096 == 1 << 12) - 32, // number of sectors - 0 // appears to be unused - }, - { 3, 1 }, // wait state setup data -#if defined(GERMAN) && defined(SAPPHIRE) - { { 0xBF, 0xD4 } } // ID -#else - { { 0xC2, 0x09 } } // ID -#endif - } -}; - -const struct FlashSetupInfo DefaultFlash = -{ - ProgramFlashByte_MX, - ProgramFlashSector_MX, - EraseFlashChip_MX, - EraseFlashSector_MX, - WaitForFlashWrite_Common, - mxMaxTime, - { - 131072, // ROM size - { - 4096, // sector size - 12, // bit shift to multiply by sector size (4096 == 1 << 12) - 32, // number of sectors - 0 // appears to be unused - }, - { 3, 1 }, // wait state setup data - { { 0x00, 0x00 } } // ID of 0 - } -}; - -u16 EraseFlashChip_MX(void) -{ - u16 result; - u16 readFlash1Buffer[0x20]; - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; - - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0x80); - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0x10); - - SetReadFlash1(readFlash1Buffer); - - result = WaitForFlashWrite(3, FLASH_BASE, 0xFF); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - return result; -} - -u16 EraseFlashSector_MX(u16 sectorNum) -{ - u16 numTries; - u16 result; - u8 *addr; - u16 readFlash1Buffer[0x20]; - - if (sectorNum >= gFlash->sector.count) - return 0x80FF; - - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - - numTries = 0; - -try_erase: - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; - - addr = FLASH_BASE + (sectorNum << gFlash->sector.shift); - - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0x80); - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - *addr = 0x30; - - SetReadFlash1(readFlash1Buffer); - - result = WaitForFlashWrite(2, addr, 0xFF); - - if (!(result & 0xA000) || numTries > 3) - goto done; - - numTries++; - - goto try_erase; - -done: - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - return result; -} - -u16 ProgramFlashByte_MX(u16 sectorNum, u32 offset, u8 data) -{ - u8 *addr; - u16 readFlash1Buffer[0x20]; - - if (offset >= gFlash->sector.size) - return 0x8000; - - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - - addr = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; - - SetReadFlash1(readFlash1Buffer); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; - - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0xA0); - *addr = data; - - return WaitForFlashWrite(1, addr, data); -} - -static u16 ProgramByte(u8 *src, u8 *dest) -{ - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0xA0); - *dest = *src; - - return WaitForFlashWrite(1, dest, *src); -} - -u16 ProgramFlashSector_MX(u16 sectorNum, u8 *src) -{ - u16 result; - u8 *dest; - u16 readFlash1Buffer[0x20]; - - if (sectorNum >= gFlash->sector.count) - return 0x80FF; - - result = EraseFlashSector_MX(sectorNum); - - if (result != 0) - return result; - - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - - SetReadFlash1(readFlash1Buffer); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; - - gFlashNumRemainingBytes = gFlash->sector.size; - dest = FLASH_BASE + (sectorNum << gFlash->sector.shift); - - while (gFlashNumRemainingBytes > 0) - { - result = ProgramByte(src, dest); - - if (result != 0) - break; - - gFlashNumRemainingBytes--; - src++; - dest++; - } - - return result; -} diff --git a/src/bard_music.c b/src/bard_music.c deleted file mode 100644 index a31568475..000000000 --- a/src/bard_music.c +++ /dev/null @@ -1,97 +0,0 @@ -#include "global.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[]; - -static s16 sub_814A2B8(u32 arg0, u32 arg1) -{ - return gUnknown_08417068[arg0][arg1]; -} - -#if ENGLISH -struct BardSound *sub_814A2D0(u16 arg0, u16 arg1) -{ - struct BardSound *sounds = gBardMusicTable[arg0]; - - return &sounds[arg1]; -} -#elif GERMAN -struct BardSound *sub_814A2D0(u16 arg0, u16 arg1) -{ - u32 index; - struct BardSound *sounds; - - sounds = gBardMusicTable[arg0]; - index = de_sub_80EB748(arg0, arg1); - - return &sounds[index]; -} -#endif - -s32 sub_814A2EC(struct UnkBard2 *dest, struct UnkBard *src, u16 arg2) -{ - s32 i; - s32 j; - s32 thirty; - - for (i = 0; i < 6; i++) - { - dest->var18[i].var00 = src[i].var00; - if (src[i].var00 != 0xFF) - { - 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; - } - } - - for (j = 0, thirty = 30; j < i; j++) - dest->var18[j].var04 = sub_814A2B8(thirty + arg2, j); - - dest->var00++; - dest->var01 = 0; - dest->var02 = 0; - dest->var03 = 0; - dest->var0A = 0; - - //warning: no return statement in function returning non-void -} diff --git a/src/battle/battle_10.c b/src/battle/battle_10.c new file mode 100644 index 000000000..0237bab4b --- /dev/null +++ b/src/battle/battle_10.c @@ -0,0 +1,1323 @@ +#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 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); + + 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 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); + 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 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].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 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].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 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].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; + 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/battle_2.c b/src/battle/battle_2.c new file mode 100644 index 000000000..7772444d7 --- /dev/null +++ b/src/battle/battle_2.c @@ -0,0 +1,2441 @@ +#include "global.h" +#include "abilities.h" +#include "battle.h" +#include "battle_interface.h" +#include "battle_setup.h" +#include "data2.h" +#include "item.h" +#include "link.h" +#include "main.h" +#include "name_string_util.h" +#include "palette.h" +#include "party_menu.h" +#include "pokeball.h" +#include "pokedex.h" +#include "pokemon.h" +#include "rng.h" +#include "rom3.h" +#include "rom_8077ABC.h" +#include "rom_8094928.h" +#include "songs.h" +#include "sound.h" +#include "species.h" +#include "sprite.h" +#include "task.h" +#include "text.h" +#include "trig.h" +#include "unknown_task.h" +#include "util.h" +#include "items.h" +#include "hold_effects.h" +#include "battle_move_effects.h" + +struct UnknownStruct6 +{ + u16 unk0[0xA0]; + u8 fillerA0[0x640]; + u16 unk780[0xA0]; +}; + +struct UnknownStruct7 +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; +}; + +struct UnknownStruct8 +{ + u8 unk0[7]; + u8 unk7; + u8 unk8[18]; + u8 unk1A; +}; + +struct UnknownPokemonStruct2 +{ + /*0x00*/ u16 species; + /*0x02*/ u16 heldItem; + /*0x04*/ u8 nickname[11]; + /*0x0F*/ u8 level; + /*0x10*/ u16 hp; + /*0x12*/ u16 maxhp; + /*0x14*/ u32 status; + /*0x18*/ u32 personality; + /*0x1C*/ u8 gender; + /*0x1D*/ u8 language; +}; + +struct UnknownStruct12 +{ + u32 unk0; + u8 filler4[0x54]; +}; + +extern const u16 gUnknown_08D004E0[]; +extern const struct MonCoords gCastformFrontSpriteCoords[]; + +extern u8 ewram[]; +#define ewram0 (*(struct UnknownStruct7 *)(ewram + 0x0)) +#define ewram4 (*(struct UnknownStruct8 *)(ewram + 0x4)) +#define ewram16000 (ewram[0x16000]) +#define ewram16001 (ewram[0x16001]) +#define ewram16002 (ewram[0x16002]) +#define ewram16003 (ewram[0x16003]) +#define ewram1600C (ewram[0x1600C]) +#define ewram1600E (ewram[0x1600E]) +#define ewram1601B (ewram[0x1601B]) +#define ewram16020 ((u8 *)(ewram + 0x16020)) +#define ewram16056 (ewram[0x16056]) +#define ewram16058 (ewram[0x16058]) +#define ewram16059 (ewram[0x16059]) +#define ewram16078 (ewram[0x16078]) +#define ewram16084 (ewram[0x16084]) +#define ewram16086 (ewram[0x16086]) +#define ewram16087 (ewram[0x16087]) +#define ewram16088 (ewram[0x16088]) +#define ewram16089 (ewram[0x16089]) +#define ewram160A1 (ewram[0x160A1]) +#define ewram160A6 (ewram[0x160A6]) +#define ewram160AC ((u8 *)(ewram + 0x160AC)) +#define ewram160BC ((u16 *)(ewram + 0x160BC)) // hp +#define ewram160C8 (ewram[0x160C8]) +#define ewram160C9 (ewram[0x160C9]) +#define ewram160CB (ewram[0x160CB]) +#define ewram160CC ((u8 *)(ewram + 0x160CC)) +#define ewram160E6 (ewram[0x160E6]) +#define ewram160E8 ((u8 *)(ewram + 0x160E8)) +#define ewram160F0 ((u8 *)(ewram + 0x160F0)) +#define ewram160F9 (ewram[0x160F9]) +#define ewram16100 ((u8 *)(ewram + 0x16100)) +#define ewram16108 ((u8 *)(ewram + 0x16108)) +#define ewram16110 (ewram[0x16110]) +#define ewram16111 (ewram[0x16111]) +#define ewram16113 (ewram[0x16113]) +#define ewram17100 ((u32 *)(ewram + 0x17100)) +#define ewram17130 (ewram[0x17130]) +#define ewram17160 (ewram[0x17160]) +#define ewram1D000 ((struct Pokemon *)(ewram + 0x1D000)) + +extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; +extern u8 gBattleBufferB[][0x200]; +extern u8 gActiveBank; +extern u32 gBattleExecBuffer; +extern u8 gNoOfAllBanks; +extern u16 gBattlePartyID[]; +extern u8 gFightStateTracker; +extern u8 gTurnOrder[]; +extern struct UnknownStruct12 gUnknown_02024AD0[]; +extern u8 gObjectBankIDs[]; +extern u16 gCurrentMove; +extern u8 gLastUsedAbility; +extern u8 gStringBank; +extern u8 gAbsentBankFlags; +extern u8 gMultiHitCounter; +extern u8 gActionForBanks[]; +extern u16 gUnknown_02024C2C[]; +extern u16 gLastUsedMove[]; +extern u16 gMoveHitWith[]; +extern u16 gUnknown_02024C44[]; +extern u16 gUnknown_02024C4C[]; +extern u16 gLockedMove[]; +extern u8 gUnknown_02024C5C[]; +extern u16 gChosenMovesByBanks[]; +extern u32 gHitMarker; +extern u8 gUnknown_02024C70[]; +extern u16 gSideAffecting[]; +extern u32 gStatuses3[]; +//extern u8 gDisableStructs[][0x1C]; +extern u16 gPauseCounterBattle; +extern u16 gPaydayMoney; +extern u16 gRandomTurnNumber; +extern u8 gBattleCommunication[]; +extern u8 gUnknown_02024D1F[]; // I don't actually know what type this is. +extern u8 gBattleOutcome; +extern u16 gUnknown_02024DE8; +extern u8 gActionSelectionCursor[]; +extern u8 gMoveSelectionCursor[]; +extern u8 gUnknown_02038470[]; +extern u16 gUnknown_030041B0; +extern u16 gUnknown_030041B4; +extern u16 gUnknown_030041B8; +extern struct Window gUnknown_030041D0; +extern u16 gUnknown_03004200; +extern struct Window gUnknown_03004210; +extern u16 gUnknown_03004244; +extern struct Window gUnknown_03004250; +extern u16 gUnknown_03004240; +extern u16 gUnknown_03004280; +extern u32 gUnknown_03004284; +extern u16 gUnknown_03004288; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; +extern u16 gUnknown_030042C0; +extern u16 gUnknown_030042C4; +extern MainCallback gPreBattleCallback1; +extern void (*gBattleMainFunc)(void); +extern u8 gLeveledUpInBattle; +extern void (*gBattleBankFunc[])(void); +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 u8 gReservedSpritePaletteCount; +extern u16 gTrainerBattleOpponent; +extern struct BattleEnigmaBerry gEnigmaBerries[]; +extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2]; +extern u8 gBattleMonForms[]; +extern u8 gBankAttacker; +extern u8 gBankTarget; +extern u16 gBattleWeather; +extern u32 gBattleMoveDamage; +extern struct BattlePokemon gBattleMons[]; +extern u8 gBattleMoveFlags; + +static void BattlePrepIntroSlide(void); + +void sub_800E7C4(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + sub_800B858(); + SetMainCallback2(sub_800F104); + gBattleCommunication[0] = 0; + } + else + { + InitBattle(); + } +} + +void InitBattle(void) +{ + s32 i; + + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + + REG_MOSAIC = 0; + REG_WIN0H = 0xF0; + REG_WIN0V = 0x5051; + REG_WININ = 0; + REG_WINOUT = 0; + gUnknown_030042C4 = 0xF0; + gUnknown_03004240 = 0x5051; + dp12_8087EA4(); + + for (i = 0; i < 80; i++) + { + gUnknown_03004DE0.unk0[i] = 0xF0; + gUnknown_03004DE0.unk780[i] = 0xF0; + } + for (i = 80; i < 160; i++) + { + asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter + gUnknown_03004DE0.unk0[i] = 0xFF10; + gUnknown_03004DE0.unk780[i] = 0xFF10; + } + sub_80895F8(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8); + SetUpWindowConfig(&gWindowConfig_81E6C58); + ResetPaletteFade(); + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + gUnknown_03004288 = 0; + gUnknown_03004280 = 0; + gUnknown_030041B0 = 0; + gUnknown_030041B8 = 0; + gBattleTerrain = GetBattleTerrain(); + InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); + InitWindowFromConfig(&gUnknown_030041D0, &gWindowConfig_81E71D0); + InitWindowFromConfig(&gUnknown_03004250, &gWindowConfig_81E71EC); + sub_800D6D4(); + sub_800DAB8(); + ResetSpriteData(); + ResetTasks(); + sub_800E23C(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + SetVBlankCallback(sub_800FCFC); + setup_poochyena_battle(); + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + SetMainCallback2(sub_800F298); + else + SetMainCallback2(sub_800EC9C); + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + CreateNPCTrainerParty(gEnemyParty, gTrainerBattleOpponent); + SetWildMonHeldItem(); + } + gMain.inBattle = TRUE; + for (i = 0; i < 6; i++) + AdjustFriendship(&gPlayerParty[i], 3); + gBattleCommunication[0] = 0; +} + +void sub_800E9EC(void) +{ + u16 r6 = 0; + u16 species; + u16 hp; + u32 status; + s32 i; + + for (i = 0; i < 6; i++) + { + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + + if (species == 0) + continue; + if (species != SPECIES_EGG && hp != 0 && status == 0) + r6 |= 1 << i * 2; + + if (species == 0) + continue; + if (hp != 0 && (species == SPECIES_EGG || status != 0)) + r6 |= 2 << i * 2; + + if (species == 0) + continue; + if (species != SPECIES_EGG && hp == 0) + r6 |= 3 << i * 2; + } + ewram0.unk2 = r6; + ewram0.unk3 = r6 >> 8; +} + +void sub_800EAAC(void) +{ + s32 i; + struct UnknownStruct8 *_ewram4 = &ewram4; + + for (i = 0; i < 7; i++) + _ewram4->unk0[i] = gSaveBlock1.enigmaBerry.berry.name[i]; + for (i = 0; i < 18; i++) + _ewram4->unk8[i] = gSaveBlock1.enigmaBerry.itemEffect[i]; + _ewram4->unk7 = gSaveBlock1.enigmaBerry.holdEffect; + _ewram4->unk1A = gSaveBlock1.enigmaBerry.holdEffectParam; +} + +void sub_800EB08(void) +{ + s32 i; + s32 j; + + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + for (i = 0; i < 7; i++) + { + gEnigmaBerries[0].name[i] = gSaveBlock1.enigmaBerry.berry.name[i]; + gEnigmaBerries[2].name[i] = gSaveBlock1.enigmaBerry.berry.name[i]; + } + for (i = 0; i < 18; i++) + { + gEnigmaBerries[0].itemEffect[i] = gSaveBlock1.enigmaBerry.itemEffect[i]; + gEnigmaBerries[2].itemEffect[i] = gSaveBlock1.enigmaBerry.itemEffect[i]; + } + gEnigmaBerries[0].holdEffect = gSaveBlock1.enigmaBerry.holdEffect; + gEnigmaBerries[2].holdEffect = gSaveBlock1.enigmaBerry.holdEffect; + gEnigmaBerries[0].holdEffectParam = gSaveBlock1.enigmaBerry.holdEffectParam; + gEnigmaBerries[2].holdEffectParam = gSaveBlock1.enigmaBerry.holdEffectParam; + } + else + { + s32 numPlayers; + struct BattleEnigmaBerry *src; + u8 r4; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + numPlayers = 4; + else + numPlayers = 2; + for (i = 0; i < numPlayers; i++) + { + src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2); + r4 = gLinkPlayers[i].lp_field_18; + + for (j = 0; j < 7; j++) + gEnigmaBerries[r4].name[j] = src->name[j]; + for (j = 0; j < 18; j++) + gEnigmaBerries[r4].itemEffect[j] = src->itemEffect[j]; + gEnigmaBerries[r4].holdEffect = src->holdEffect; + gEnigmaBerries[r4].holdEffectParam = src->holdEffectParam; + } + } +} + +void shedinja_something(struct Pokemon *pkmn) +{ + u8 nickname[POKEMON_NAME_LENGTH + 1]; + u8 language = 1; + + if (GetMonData(pkmn, MON_DATA_SPECIES) == SPECIES_SHEDINJA + && GetMonData(pkmn, MON_DATA_LANGUAGE) != language) + { + GetMonData(pkmn, MON_DATA_NICKNAME, nickname); + if (StringCompareWithoutExtCtrlCodes(nickname, gUnknown_081F96C8) == 0) + SetMonData(pkmn, MON_DATA_LANGUAGE, &language); + } +} + +void sub_800EC9C(void) +{ + u8 playerId; + u8 enemyId; + + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + playerId = GetMultiplayerId(); + ewram160CB = playerId; + enemyId = playerId ^ 1; + + switch (gBattleCommunication[0]) + { + case 0: + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) + { + ewram0.unk0 = 1; + ewram0.unk1 = 1; + sub_800E9EC(); + sub_800EAAC(); + SendBlock(bitmask_all_link_players_but_self(), &ewram0, 32); + gBattleCommunication[0] = 1; + } + } + else + { + gBattleTypeFlags |= BATTLE_TYPE_WILD; + gBattleCommunication[0] = 8; + sub_800EB08(); + } + break; + case 1: + if ((GetBlockReceivedStatus() & 3) == 3) + { + s32 id; + u8 taskId; + + ResetBlockReceivedFlags(); + id = 0; + if (gBlockRecvBuffer[0][0] == 0x100) + { + if (playerId == 0) + gBattleTypeFlags |= 12; + else + gBattleTypeFlags |= 8; + id++; + } + if (id == 0) + { + if (gBlockRecvBuffer[0][0] == gBlockRecvBuffer[1][0]) + { + if (playerId == 0) + gBattleTypeFlags |= 12; + else + gBattleTypeFlags |= 8; + id++; + } + if (id == 0) + { + while (id < 2) + { + if (gBlockRecvBuffer[id][0] > 0x0101 && id != playerId) + break; + id++; + } + if (id == 2) + gBattleTypeFlags |= 12; + else + gBattleTypeFlags |= 8; + } + } + sub_800EB08(); + taskId = CreateTask(sub_800DE30, 0); + gTasks[taskId].data[1] = 0x10E; + gTasks[taskId].data[2] = 0x5A; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[3] = ewram0.unk2 | (ewram0.unk3 << 8); + gTasks[taskId].data[4] = gBlockRecvBuffer[enemyId][1]; + gBattleCommunication[0]++; + } + break; + case 2: + if (sub_8007ECC()) + { + SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(*gPlayerParty) * 2); + gBattleCommunication[0]++; + } + break; + case 3: + if ((GetBlockReceivedStatus() & 3) == 3) + { + ResetBlockReceivedFlags(); + memcpy(gEnemyParty, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2); + gBattleCommunication[0]++; + } + break; + case 4: + if (sub_8007ECC()) + { + SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(*gPlayerParty) * 2); + gBattleCommunication[0]++; + } + break; + case 5: + if ((GetBlockReceivedStatus() & 3) == 3) + { + ResetBlockReceivedFlags(); + memcpy(gEnemyParty + 2, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2); + gBattleCommunication[0]++; + } + break; + case 6: + if (sub_8007ECC()) + { + SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(*gPlayerParty) * 2); + gBattleCommunication[0]++; + } + break; + case 7: + if ((GetBlockReceivedStatus() & 3) == 3) + { + ResetBlockReceivedFlags(); + memcpy(gEnemyParty + 4, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2); + shedinja_something(&gEnemyParty[0]); + shedinja_something(&gEnemyParty[1]); + shedinja_something(&gEnemyParty[2]); + shedinja_something(&gEnemyParty[3]); + shedinja_something(&gEnemyParty[4]); + shedinja_something(&gEnemyParty[5]); + gBattleCommunication[0]++; + } + break; + case 8: + sub_800B950(); + gBattleCommunication[0]++; + gBattleCommunication[1] = 0; + gBattleCommunication[2] = 0; + break; + case 9: + if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0) + { + gPreBattleCallback1 = gMain.callback1; + gMain.callback1 = sub_8010824; + SetMainCallback2(sub_800F808); + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gTrainerBattleOpponent = 0x800; + gBattleTypeFlags |= BATTLE_TYPE_20; + } + } + break; + } +} + +void sub_800F02C(void) +{ + s32 i; + + for (i = 0; i < 3; i++) + { + u8 *nickname = gUnknown_02023A00[i].nickname; + + gUnknown_02023A00[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES); + gUnknown_02023A00[i].heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nickname); + gUnknown_02023A00[i].level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + gUnknown_02023A00[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + gUnknown_02023A00[i].maxhp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + gUnknown_02023A00[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + gUnknown_02023A00[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); + gUnknown_02023A00[i].gender = GetMonGender(&gPlayerParty[i]); + StripExtCtrlCodes(nickname); + gUnknown_02023A00[i].language = GetMonData(&gPlayerParty[i], MON_DATA_LANGUAGE); + if (gUnknown_02023A00[i].language != 1) + PadNameString(nickname, 0); + } + memcpy(ewram, gUnknown_02023A00, 0x60); +} + +void sub_800F104(void) +{ + u8 playerId; + MainCallback *pSavedCallback; + u16 *pSavedBattleTypeFlags; + + playerId = GetMultiplayerId(); + ewram160CB = playerId; + // Seriously, Game Freak? + pSavedCallback = (MainCallback *)(ewram + 0x160C4); + pSavedBattleTypeFlags = (u16 *)(ewram + 0x160C2); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + + switch (gBattleCommunication[0]) + { + case 0: + if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) + { + sub_800F02C(); + SendBlock(bitmask_all_link_players_but_self(), ewram, 0x60); + gBattleCommunication[0]++; + } + break; + case 1: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + s32 i; + + ResetBlockReceivedFlags(); + for (i = 0; i < 4; i++) + { + if (i != playerId) + { + if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) + || ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) + memcpy(gUnknown_02023A00, gBlockRecvBuffer[i], 0x60); + } + } + gBattleCommunication[0]++; + *pSavedCallback = gMain.savedCallback; + *pSavedBattleTypeFlags = gBattleTypeFlags; + gMain.savedCallback = sub_800F104; + OpenPartyMenu(5, 0); + } + break; + case 2: + if (!gPaletteFade.active) + { + gBattleCommunication[0] = 3; + sub_800832C(); + } + break; + case 3: + if (gReceivedRemoteLinkPlayers == 0) + { + gBattleTypeFlags = *pSavedBattleTypeFlags; + gMain.savedCallback = *pSavedCallback; + SetMainCallback2(InitBattle); + } + break; + } +} + +void sub_800F298(void) +{ + u8 playerId; + s32 id; + + playerId = GetMultiplayerId(); + ewram160CB = playerId; + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + switch (gBattleCommunication[0]) + { + case 0: + if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) + { + ewram0.unk0 = 1; + ewram0.unk1 = 1; + sub_800E9EC(); + sub_800EAAC(); + SendBlock(bitmask_all_link_players_but_self(), ewram, 0x20); + gBattleCommunication[0]++; + } + break; + case 1: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + u8 taskId; + + ResetBlockReceivedFlags(); + id = 0; + if (gBlockRecvBuffer[0][0] == 0x100) + { + if (playerId == 0) + gBattleTypeFlags |= 12; + else + gBattleTypeFlags |= 8; + id++; + } + if (id == 0) + { + s32 i; + + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + if (gBlockRecvBuffer[0][0] != gBlockRecvBuffer[i][0]) + break; + } + if (i == MAX_LINK_PLAYERS) + { + if (playerId == 0) + gBattleTypeFlags |= 12; + else + gBattleTypeFlags |= 8; + id++; + } + if (id == 0) + { + while (id < MAX_LINK_PLAYERS) + { + if (gBlockRecvBuffer[id][0] == 0x0101 && id != playerId) + if (id < playerId) + break; + if (gBlockRecvBuffer[id][0] > 0x0101 && id != playerId) + break; + id++; + } + if (id == MAX_LINK_PLAYERS) + gBattleTypeFlags |= 12; + else + gBattleTypeFlags |= 8; + } + } + sub_800EB08(); + memcpy(ewram1D000, gPlayerParty, sizeof(struct Pokemon) * 3); + taskId = CreateTask(sub_800DE30, 0); + gTasks[taskId].data[1] = 0x10E; + gTasks[taskId].data[2] = 0x5A; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = 0; + for (id = 0; id < MAX_LINK_PLAYERS; id++) + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + gTasks[taskId].data[3] |= gBlockRecvBuffer[id][1] & 0x3F; + break; + case 1: + gTasks[taskId].data[4] |= gBlockRecvBuffer[id][1] & 0x3F; + break; + case 2: + gTasks[taskId].data[3] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6; + break; + case 3: + gTasks[taskId].data[4] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6; + break; + } + } + ZeroPlayerPartyMons(); + ZeroEnemyPartyMons(); + gBattleCommunication[0]++; + goto step_2; + } + break; + case 2: + step_2: + if (sub_8007ECC()) + { + SendBlock(bitmask_all_link_players_but_self(), ewram1D000, sizeof(struct Pokemon) * 2); + gBattleCommunication[0]++; + } + break; + case 3: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + ResetBlockReceivedFlags(); + for (id = 0; id < MAX_LINK_PLAYERS; id++) + { + if (id == playerId) + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + case 1: + case 2: + memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + } + } + else + { + if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) + || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + case 1: + case 2: + memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + } + } + else + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + memcpy(gEnemyParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + case 1: + case 2: + memcpy(gEnemyParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + } + } + } + } + gBattleCommunication[0]++; + } + break; + case 4: + if (sub_8007ECC()) + { + SendBlock(bitmask_all_link_players_but_self(), ewram1D000 + 2, sizeof(struct Pokemon)); + gBattleCommunication[0]++; + } + break; + case 5: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + ResetBlockReceivedFlags(); + for (id = 0; id < MAX_LINK_PLAYERS; id++) + { + if (id == playerId) + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + case 1: + case 2: + memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + } + } + else + { + if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) + || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + case 1: + case 2: + memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + } + } + else + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + memcpy(gEnemyParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + case 1: + case 2: + memcpy(gEnemyParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + } + } + } + } + + shedinja_something(&gPlayerParty[0]); + shedinja_something(&gPlayerParty[1]); + shedinja_something(&gPlayerParty[2]); + shedinja_something(&gPlayerParty[3]); + shedinja_something(&gPlayerParty[4]); + shedinja_something(&gPlayerParty[5]); + + shedinja_something(&gEnemyParty[0]); + shedinja_something(&gEnemyParty[1]); + shedinja_something(&gEnemyParty[2]); + shedinja_something(&gEnemyParty[3]); + shedinja_something(&gEnemyParty[4]); + shedinja_something(&gEnemyParty[5]); + + gBattleCommunication[0]++; + } + break; + case 6: + sub_800B950(); + gBattleCommunication[0]++; + gBattleCommunication[1] = 0; + gBattleCommunication[2] = 0; + break; + case 7: + if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0) + { + gPreBattleCallback1 = gMain.callback1; + gMain.callback1 = sub_8010824; + SetMainCallback2(sub_800F808); + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gTrainerBattleOpponent = 0x800; + gBattleTypeFlags |= BATTLE_TYPE_20; + } + } + break; + } +} + +void sub_800F808(void) +{ + AnimateSprites(); + BuildOamBuffer(); + sub_800374C(&gUnknown_03004210); + UpdatePaletteFade(); + RunTasks(); +} + +void sub_800F828(struct Sprite *sprite) +{ + sprite->data0 = 0; + sprite->callback = sub_800F838; +} + +void sub_800F838(struct Sprite *sprite) +{ + u16 *arr = (u16 *)ewram; + + switch (sprite->data0) + { + case 0: + sprite->data0++; + sprite->data1 = 0; + sprite->data2 = 0x281; + sprite->data3 = 0; + sprite->data4 = 1; + // fall through + case 1: + sprite->data4--; + if (sprite->data4 == 0) + { + s32 i; + s32 r2; + s32 r0; + + sprite->data4 = 2; + r2 = sprite->data1 + sprite->data3 * 32; + r0 = sprite->data2 - sprite->data3 * 32; + for (i = 0; i < 29; i += 2) + { + arr[r2 + i] = 0x3D; + arr[r0 + i] = 0x3D; + } + sprite->data3++; + if (sprite->data3 == 21) + { + sprite->data0++; + sprite->data1 = 32; + } + } + break; + case 2: + sprite->data1--; + if (sprite->data1 == 20) + SetMainCallback2(sub_800E7C4); + break; + } +} + +u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum) +{ + u32 nameHash = 0; + s32 i; + + if (trainerNum == 0x400) + return 0; + + if ((gBattleTypeFlags & 0x908) == 8) + { + ZeroEnemyPartyMons(); + for (i = 0; i < gTrainers[trainerNum].partySize; i++) + { + u32 personalityValue; + s32 j; + u8 fixedIV; + + if (gTrainers[trainerNum].doubleBattle == TRUE) + personalityValue = 0x80; + else if (gTrainers[trainerNum].encounterMusic_gender & 0x80) + personalityValue = 0x78; + else + personalityValue = 0x88; + + for (j = 0; gTrainers[trainerNum].trainerName[j] != 0xFF; j++) + nameHash += gTrainers[trainerNum].trainerName[j]; + + switch (gTrainers[trainerNum].partyFlags) + { + case 0: + { + struct TrainerPartyMember0 *partyData = gTrainers[trainerNum].party; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); + break; + } + case 1: + { + struct TrainerPartyMember1 *partyData = gTrainers[trainerNum].party; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); + + for (j = 0; j < 4; j++) + { + SetMonData(&party[i], MON_DATA_MOVE1 + j, (u8 *)&partyData[i].moves[j]); + SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + break; + } + case 2: + { + struct TrainerPartyMember2 *partyData = gTrainers[trainerNum].party; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); + + SetMonData(&party[i], MON_DATA_HELD_ITEM, (u8 *)&partyData[i].heldItem); + break; + } + case 3: + { + struct TrainerPartyMember3 *partyData = gTrainers[trainerNum].party; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); + + SetMonData(&party[i], MON_DATA_HELD_ITEM, (u8 *)&partyData[i].heldItem); + for (j = 0; j < 4; j++) + { + SetMonData(&party[i], MON_DATA_MOVE1 + j, (u8 *)&partyData[i].moves[j]); + SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + break; + } + } + } + gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; + } + return gTrainers[trainerNum].partySize; +} + +void sub_800FCD4(void) +{ + if (REG_VCOUNT < 0xA0 && REG_VCOUNT >= 0x6F ) + REG_BG0CNT = 0x9800; +} + +void sub_800FCFC(void) +{ + Random(); // unused return value + 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; + REG_WIN0H = gUnknown_030042C4; + REG_WIN0V = gUnknown_03004240; + REG_WIN1H = gUnknown_03004200; + REG_WIN1V = gUnknown_03004244; + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_8089668(); +} + +void nullsub_36(struct Sprite *sprite) +{ +} + +void sub_800FDB0(struct Sprite *sprite) +{ + if (sprite->data0 != 0) + sprite->pos1.x = sprite->data1 + ((sprite->data2 & 0xFF00) >> 8); + else + sprite->pos1.x = sprite->data1 - ((sprite->data2 & 0xFF00) >> 8); + sprite->data2 += 0x180; + if (sprite->affineAnimEnded) + { + FreeSpriteTilesByTag(0x2710); + FreeSpritePaletteByTag(0x2710); + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + } +} + +void sub_800FE20(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_800FDB0; + PlaySE(SE_BT_START); +} + +void sub_800FE40(u8 taskId) +{ + struct Pokemon *sp4 = NULL; + struct Pokemon *sp8 = NULL; + u8 r2 = ewram160CB; + u32 r7; + s32 i; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + switch (gLinkPlayers[r2].lp_field_18) + { + case 0: + case 2: + sp4 = gPlayerParty; + sp8 = gEnemyParty; + break; + case 1: + case 3: + sp4 = gEnemyParty; + sp8 = gPlayerParty; + break; + } + } + else + { + sp4 = gPlayerParty; + sp8 = gEnemyParty; + } + + r7 = 0; + for (i = 0; i < 6; i++) + { + u16 species = GetMonData(&sp4[i], MON_DATA_SPECIES2); + u16 hp = GetMonData(&sp4[i], MON_DATA_HP); + u32 status = GetMonData(&sp4[i], MON_DATA_STATUS); + + if (species == 0) + continue; + if (species != SPECIES_EGG && hp != 0 && status == 0) + r7 |= 1 << i * 2; + + if (species == 0) + continue; + if (hp != 0 && (species == SPECIES_EGG || status != 0)) + r7 |= 2 << i * 2; + + if (species == 0) + continue; + if (species != SPECIES_EGG && hp == 0) + r7 |= 3 << i * 2; + } + gTasks[taskId].data[3] = r7; + + r7 = 0; + for (i = 0; i < 6; i++) + { + u16 species = GetMonData(&sp8[i], MON_DATA_SPECIES2); + u16 hp = GetMonData(&sp8[i], MON_DATA_HP); + u32 status = GetMonData(&sp8[i], MON_DATA_STATUS); + + if (species == 0) + continue; + if (species != SPECIES_EGG && hp != 0 && status == 0) + r7 |= 1 << i * 2; + + if (species == 0) + continue; + if (hp != 0 && (species == SPECIES_EGG || status != 0)) + r7 |= 2 << i * 2; + + if (species == 0) + continue; + if (species != SPECIES_EGG && hp == 0) + r7 |= 3 << i * 2; + } + gTasks[taskId].data[4] = r7; +} + +void c2_8011A1C(void) +{ + s32 i; + u8 taskId; + + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + REG_MOSAIC = 0; + REG_WIN0H = 0xF0; + REG_WIN0V = 0x5051; + REG_WININ = 0; + REG_WINOUT = 0; + gUnknown_030042C4 = 0xF0; + gUnknown_03004240 = 0x5051; + dp12_8087EA4(); + + for (i = 0; i < 80; i++) + { + gUnknown_03004DE0.unk0[i] = 0xF0; + gUnknown_03004DE0.unk780[i] = 0xF0; + } + for (i = 80; i < 160; i++) + { + asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter + gUnknown_03004DE0.unk0[i] = 0xFF10; + gUnknown_03004DE0.unk780[i] = 0xFF10; + } + SetUpWindowConfig(&gWindowConfig_81E6C58); + ResetPaletteFade(); + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + gUnknown_03004288 = 0; + gUnknown_03004280 = 0; + gUnknown_030041B0 = 0; + gUnknown_030041B8 = 0; + + InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); + InitWindowFromConfig(&gUnknown_030041D0, &gWindowConfig_81E71D0); + InitWindowFromConfig(&gUnknown_03004250, &gWindowConfig_81E71EC); + sub_800D6D4(); + LoadCompressedPalette(gUnknown_08D004E0, 0, 64); + sub_800D74C(); + ResetSpriteData(); + ResetTasks(); + sub_800E23C(); + REG_WINOUT = 0x37; + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + SetVBlankCallback(sub_800FCFC); + taskId = CreateTask(sub_800DE30, 0); + gTasks[taskId].data[1] = 0x10E; + gTasks[taskId].data[2] = 0x5A; + gTasks[taskId].data[5] = 1; + sub_800FE40(taskId); + SetMainCallback2(sub_80101B8); + gBattleCommunication[0] = 0; +} + +void sub_80101B8(void) +{ + c2_081284E0(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + RunTasks(); +} + +void c2_081284E0(void) +{ + switch (gBattleCommunication[0]) + { + case 0: + gBattleCommunication[1] = 0xFF; + gBattleCommunication[0]++; + break; + case 1: + gBattleCommunication[1]--; + if (gBattleCommunication[1] == 0) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gBattleCommunication[0]++; + } + break; + case 2: + if (!gPaletteFade.active) + SetMainCallback2(gMain.savedCallback); + break; + } +} + +void oac_poke_opponent(struct Sprite *sprite) +{ + sprite->callback = sub_8010278; + StartSpriteAnimIfDifferent(sprite, 0); + BeginNormalPaletteFade(0x00020000, 0, 10, 10, 0x3DEF); +} + +void sub_8010278(struct Sprite *sprite) +{ + if ((gUnknown_02024DE8 & 1) == 0) + { + sprite->pos2.x += 2; + if (sprite->pos2.x == 0) + { + sprite->callback = sub_80102AC; + PlayCry1(sprite->data2, 25); + } + } +} + +void sub_80102AC(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + sub_804777C(sprite->data0); + sub_8043DFC(gHealthboxIDs[sprite->data0]); + sprite->callback = nullsub_37; + StartSpriteAnimIfDifferent(sprite, 0); + BeginNormalPaletteFade(0x00020000, 0, 10, 0, 0x3DEF); + } +} + +void nullsub_37(struct Sprite *sprite) +{ +} + +void unref_sub_801030C(struct Sprite *sprite) +{ + sprite->data3 = 6; + sprite->data4 = 1; + sprite->callback = sub_8010320; +} + +void sub_8010320(struct Sprite *sprite) +{ + sprite->data4--; + if (sprite->data4 == 0) + { + sprite->data4 = 8; + sprite->invisible ^= 1; + sprite->data3--; + if (sprite->data3 == 0) + { + sprite->invisible = FALSE; + sprite->callback = nullsub_37; + gUnknown_03004284 = 0; + } + } +} + +void sub_8010384(struct Sprite *sprite) +{ + u8 r6 = sprite->data0; + u16 species; + u8 yOffset; + + if (ewram17800[r6].unk2 != 0) + species = ewram17800[r6].unk2; + else + species = sprite->data2; + + GetMonData(&gEnemyParty[gBattlePartyID[r6]], MON_DATA_PERSONALITY); // Unused return value + + if (species == SPECIES_UNOWN) + { + u32 personalityValue = GetMonData(&gEnemyParty[gBattlePartyID[r6]], MON_DATA_PERSONALITY); + u16 unownForm = ((((personalityValue & 0x3000000) >> 18) | ((personalityValue & 0x30000) >> 12) | ((personalityValue & 0x300) >> 6) | (personalityValue & 3)) % 0x1C); + u16 unownSpecies; + + if (unownForm == 0) + unownSpecies = SPECIES_UNOWN; // Use the A Unown form + else + unownSpecies = NUM_SPECIES + unownForm; // Use one of the other Unown letters + + yOffset = gMonFrontPicCoords[unownSpecies].y_offset; + } + else if (species == SPECIES_CASTFORM) + { + yOffset = gCastformFrontSpriteCoords[gBattleMonForms[r6]].y_offset; + } + else if (species > NUM_SPECIES) + { + yOffset = gMonFrontPicCoords[SPECIES_NONE].y_offset; + } + else + { + yOffset = gMonFrontPicCoords[species].y_offset; + } + + sprite->data3 = 8 - yOffset / 8; + sprite->data4 = 1; + sprite->callback = sub_8010494; +} + +void sub_8010494(struct Sprite *sprite) +{ + s32 i; + + sprite->data4--; + if (sprite->data4 == 0) + { + sprite->data4 = 2; + sprite->pos2.y += 8; + sprite->data3--; + if (sprite->data3 < 0) + { + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + } + else + { + u8 *dst = (u8 *)gUnknown_081FAF4C[GetBankIdentity(sprite->data0)] + (gBattleMonForms[sprite->data0] << 11) + (sprite->data3 << 8); + + for (i = 0; i < 0x100; i++) + *(dst++) = 0; + StartSpriteAnim(sprite, gBattleMonForms[sprite->data0]); + } + } +} + +void sub_8010520(struct Sprite *sprite) +{ + sprite->data3 = 8; + sprite->data4 = sprite->invisible; + sprite->callback = sub_801053C; +} + +void sub_801053C(struct Sprite *sprite) +{ + sprite->data3--; + if (sprite->data3 == 0) + { + sprite->invisible ^= 1; + sprite->data3 = 8; + } +} + +void sub_8010574(struct Sprite *sprite) +{ + sprite->invisible = sprite->data4; + sprite->data4 = FALSE; + sprite->callback = nullsub_37; +} + +void sub_80105A0(struct Sprite *sprite) +{ + sprite->callback = oac_poke_ally_; +} + +void oac_poke_ally_(struct Sprite *sprite) +{ + if ((gUnknown_02024DE8 & 1) == 0) + { + sprite->pos2.x -= 2; + if (sprite->pos2.x == 0) + { + sprite->callback = nullsub_86; + sprite->data1 = 0; + } + } +} + +void sub_80105DC(struct Sprite *sprite) +{ + sprite->callback = nullsub_86; +} + +void nullsub_86(struct Sprite *sprite) +{ +} + +void sub_80105EC(struct Sprite *sprite) +{ + if ((gUnknown_02024DE8 & 1) == 0) + { + sprite->pos2.x += sprite->data1; + sprite->pos2.y += sprite->data2; + } +} + +void dp11b_obj_instanciate(u8 bank, u8 b, s8 c, s8 d) +{ + u8 spriteId; + u8 objectID; + + if (b) + { + if (ewram17810[bank].unk0_1) + return; + } + else + { + if (ewram17810[bank].unk0_2) + return; + } + + spriteId = CreateInvisibleSpriteWithCallback(objc_dp11b_pingpong); + if (b == TRUE) + { + objectID = gHealthboxIDs[bank]; + ewram17810[bank].unk2 = spriteId; + ewram17810[bank].unk0_1 = 1; + gSprites[spriteId].data0 = 0x80; + } + else + { + objectID = gObjectBankIDs[bank]; + ewram17810[bank].unk3 = spriteId; + ewram17810[bank].unk0_2 = 1; + gSprites[spriteId].data0 = 0xC0; + } + gSprites[spriteId].data1 = c; + gSprites[spriteId].data2 = d; + gSprites[spriteId].data3 = objectID; + gSprites[spriteId].data4 = b; + gSprites[objectID].pos2.x = 0; + gSprites[objectID].pos2.y = 0; +} + +void dp11b_obj_free(u8 a, u8 b) +{ + u8 r4; + + if (b == TRUE) + { + if (!ewram17810[a].unk0_1) + return; + r4 = gSprites[ewram17810[a].unk2].data3; + DestroySprite(&gSprites[ewram17810[a].unk2]); + ewram17810[a].unk0_1 = 0; + } + else + { + if (!ewram17810[a].unk0_2) + return; + r4 = gSprites[ewram17810[a].unk3].data3; + DestroySprite(&gSprites[ewram17810[a].unk3]); + ewram17810[a].unk0_2 = 0; + } + gSprites[r4].pos2.x = 0; + gSprites[r4].pos2.y = 0; +} + +void objc_dp11b_pingpong(struct Sprite *sprite) +{ + u8 spriteId = sprite->data3; + s32 var; + + if (sprite->data4 == 1) + var = sprite->data0; + else + var = sprite->data0; + + gSprites[spriteId].pos2.y = Sin(var, sprite->data2) + sprite->data2; + sprite->data0 = (sprite->data0 + sprite->data1) & 0xFF; +} + +void nullsub_41(void) +{ +} + +void sub_8010800(void) +{ + sub_8010874(); + gBattleCommunication[1] = 0; + gBattleMainFunc = bc_8012FAC; +} + +void sub_8010824(void) +{ + gBattleMainFunc(); + + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + gBattleBankFunc[gActiveBank](); +} + +void sub_8010874(void) +{ + s32 i; + u32 j; + u8 *r4; + + TurnValuesCleanUp(0); + SpecialStatusesClear(); + + for (i = 0; i < 4; i++) + { + gStatuses3[i] = 0; + + r4 = (u8 *)&gDisableStructs[i]; + for (j = 0; j < (u32)0x1C; j++) + r4[j] = 0; + + gDisableStructs[i].isFirstTurn= 2; + gUnknown_02024C70[i] = 0; + gLastUsedMove[i] = 0; + gMoveHitWith[i] = 0; + gUnknown_02024C44[i] = 0; + gUnknown_02024C4C[i] = 0; + gUnknown_02024C5C[i] = 0xFF; + gLockedMove[i] = 0; + gUnknown_02024C2C[i] = 0; + ewram17100[i] = 0; + } + + for (i = 0; i < 2; i++) + { + gSideAffecting[i] = 0; + + r4 = (u8 *)&gSideTimer[i]; + for (j = 0; j < 12; j++) + r4[j] = 0; + } + + gBankAttacker = 0; + gBankTarget = 0; + gBattleWeather = 0; + + r4 = (u8 *)&gWishFutureKnock; + for (i = 0; i < (u32)0x2C; i++) + r4[i] = 0; + + gHitMarker = 0; + if ((gBattleTypeFlags & BATTLE_TYPE_LINK) == 0 && gSaveBlock2.optionsBattleSceneOff == TRUE) + gHitMarker = HITMARKER_NO_ANIMATIONS; + ewram16084 = gSaveBlock2.optionsBattleStyle; + gMultiHitCounter = 0; + gBattleOutcome = 0; + gBattleExecBuffer = 0; + gPaydayMoney = 0; + ewram17130 = 0; + ewram17160 = 0; + for (i = 0; i < 8; i++) + gBattleCommunication[i] = 0; + gPauseCounterBattle = 0; + gBattleMoveDamage = 0; + gUnknown_02024DE8 = 0; + ewram16002 = 0; + ewram160A1 = 0; + gLeveledUpInBattle = 0; + gAbsentBankFlags = 0; + ewram16078 = 0; + ewram16086 = 0; + ewram16087 = 0; + ewram16089 = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275; + ewram16088 = 3; + ewram1601B = 0; + ewram16056 = 1; + + for (i = 0; i < 8; i++) + { + ewram[i + 0x160AC] = 0; + ewram[i + 0x160CC] = 0; + ewram[i + 0x160E8] = 0; + ewram[i + 0x160F0] = 0; + ewram[i + 0x16100] = 0; + ewram[i + 0x16108] = 0; + } + + ewram160C8 = 6; + ewram160C9 = 6; + ewram16113 = 0; + for (i = 0; i < 11; i++) + gBattleResults.unk36[i] = 0; + gBattleResults.battleTurnCounter = 0; + gBattleResults.playerFaintCounter = 0; + gBattleResults.opponentFaintCounter = 0; + gBattleResults.unk2 = 0; + gBattleResults.unk3 = 0; + gBattleResults.unk4 = 0; + gBattleResults.unk5_0 = 0; + gBattleResults.unk5_1 = 0; + gBattleResults.lastOpponentSpecies = 0; + gBattleResults.lastUsedMove = 0; + gBattleResults.opponentMove = 0; + gBattleResults.poke1Species = 0; + gBattleResults.opponentSpecies = 0; + gBattleResults.caughtPoke = 0; + for (i = 0; i < 10; i++) + { + gBattleResults.pokeString1[i] = 0; + gBattleResults.pokeString2[i] = 0; + gBattleResults.caughtNick[i] = 0; + } +} + +void SwitchInClearStructs(void) +{ + struct DisableStruct sp0 = gDisableStructs[gActiveBank]; + s32 i; + u8 *ptr; + u32 *ptr2; + + if (gBattleMoves[gCurrentMove].effect != EFFECT_BATON_PASS) + { + for (i = 0; i < 8; i++) + gBattleMons[gActiveBank].statStages[i] = 6; + for (i = 0; i < gNoOfAllBanks; i++) + { + struct UnknownStruct12 *sp20 = &gUnknown_02024AD0[i]; + + if ((sp20->unk0 & 0x04000000) && gDisableStructs[i].bankPreventingEscape == gActiveBank) + sp20->unk0 &= ~0x04000000; + if ((gStatuses3[i] & STATUS3_ALWAYS_HITS) && gDisableStructs[i].bankWithSureHit == gActiveBank) + { + gStatuses3[i] &= ~STATUS3_ALWAYS_HITS; + gDisableStructs[i].bankWithSureHit = 0; + } + } + } + if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) + { + gBattleMons[gActiveBank].status2 &= (STATUS2_CONFUSION | STATUS2_FOCUS_ENERGY | STATUS2_SUBSTITUTE | STATUS2_ESCAPE_PREVENTION | STATUS2_CURSED); + gStatuses3[gActiveBank] &= (STATUS3_LEECHSEED_BANK | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED | STATUS3_MUDSPORT | STATUS3_WATERSPORT); + + for (i = 0; i < gNoOfAllBanks; i++) + { + if (GetBankSide(gActiveBank) != GetBankSide(i) + && (gStatuses3[i] & STATUS3_ALWAYS_HITS) != 0 + && (gDisableStructs[i].bankWithSureHit == gActiveBank)) + { + gStatuses3[i] &= ~STATUS3_ALWAYS_HITS; + gStatuses3[i] |= 0x10; + } + } + } + else + { + gBattleMons[gActiveBank].status2 = 0; + gStatuses3[gActiveBank] = 0; + } + + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gUnknown_02024AD0[i].unk0 & (gBitTable[gActiveBank] << 16)) + gUnknown_02024AD0[i].unk0 &= ~(gBitTable[gActiveBank] << 16); + if ((gUnknown_02024AD0[i].unk0 & 0xE000) && ewram[0x16020 + i] == gActiveBank) + gUnknown_02024AD0[i].unk0 &= ~0xE000; + } + + gActionSelectionCursor[gActiveBank] = 0; + gMoveSelectionCursor[gActiveBank] = 0; + + ptr = (u8 *)&gDisableStructs[gActiveBank]; + for (i = 0; i < (u32)0x1C; i++) + ptr[i] = 0; + + if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) + { + gDisableStructs[gActiveBank].substituteHP = sp0.substituteHP; + gDisableStructs[gActiveBank].bankWithSureHit = sp0.bankWithSureHit; + gDisableStructs[gActiveBank].perishSong1 = sp0.perishSong1; + gDisableStructs[gActiveBank].perishSong2 = sp0.perishSong2; + } + + gDisableStructs[gActiveBank].isFirstTurn= 2; + gLastUsedMove[gActiveBank] = 0; + gMoveHitWith[gActiveBank] = 0; + gUnknown_02024C44[gActiveBank] = 0; + gUnknown_02024C4C[gActiveBank] = 0; + gUnknown_02024C2C[gActiveBank] = 0; + gUnknown_02024C5C[gActiveBank] = 0xFF; + + ewram[0x160AC + gActiveBank * 2 + 0] = 0; + ewram[0x160AC + gActiveBank * 2 + 1] = 0; + ewram[0x16100 + gActiveBank * 4 + 0] = 0; + ewram[0x16100 + gActiveBank * 4 + 1] = 0; + ewram[0x16100 + gActiveBank * 4 + 2] = 0; + ewram[0x16100 + gActiveBank * 4 + 3] = 0; + ewram[0x160E8 + gActiveBank * 2 + 0] = 0; + ewram[0x160E8 + gActiveBank * 2 + 1] = 0; + + ptr2 = (u32 *)(ewram + 0x17100); + ptr2[gActiveBank] = 0; + + gCurrentMove = 0; +} + +void UndoEffectsAfterFainting(void) +{ + s32 i; + u8 *ptr; + u32 *ptr2; + + for (i = 0; i < 8; i++) + gBattleMons[gActiveBank].statStages[i] = 6; + gBattleMons[gActiveBank].status2 = 0; + gStatuses3[gActiveBank] = 0; + for (i = 0; i < gNoOfAllBanks; i++) + { + if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].bankPreventingEscape == gActiveBank) + gBattleMons[i].status2 &= ~STATUS2_ESCAPE_PREVENTION; + if (gBattleMons[i].status2 & (gBitTable[gActiveBank] << 16)) + gBattleMons[i].status2 &= ~(gBitTable[gActiveBank] << 16); + if ((gBattleMons[i].status2 & STATUS2_WRAPPED) && ewram[0x16020 + i] == gActiveBank) + gBattleMons[i].status2 &= ~STATUS2_WRAPPED; + } + gActionSelectionCursor[gActiveBank] = 0; + gMoveSelectionCursor[gActiveBank] = 0; + + ptr = (u8 *)&gDisableStructs[gActiveBank]; + for (i = 0; i < (u32)0x1C; i++) + ptr[i] = 0; + gProtectStructs[gActiveBank].protected = 0; + gProtectStructs[gActiveBank].endured = 0; + gProtectStructs[gActiveBank].onlyStruggle = 0; + gProtectStructs[gActiveBank].helpingHand = 0; + gProtectStructs[gActiveBank].bounceMove = 0; + gProtectStructs[gActiveBank].stealMove = 0; + gProtectStructs[gActiveBank].flag0Unknown = 0; + gProtectStructs[gActiveBank].prlzImmobility = 0; + gProtectStructs[gActiveBank].confusionSelfDmg = 0; + gProtectStructs[gActiveBank].notEffective = 0; + gProtectStructs[gActiveBank].chargingTurn = 0; + gProtectStructs[gActiveBank].fleeFlag = 0; + gProtectStructs[gActiveBank].usedImprisionedMove = 0; + gProtectStructs[gActiveBank].loveImmobility = 0; + gProtectStructs[gActiveBank].usedDisabledMove = 0; + gProtectStructs[gActiveBank].usedTauntedMove = 0; + gProtectStructs[gActiveBank].flag2Unknown = 0; + gProtectStructs[gActiveBank].flinchImmobility = 0; + gProtectStructs[gActiveBank].notFirstStrike = 0; + + gDisableStructs[gActiveBank].isFirstTurn= 2; + gLastUsedMove[gActiveBank] = 0; + gMoveHitWith[gActiveBank] = 0; + gUnknown_02024C44[gActiveBank] = 0; + gUnknown_02024C4C[gActiveBank] = 0; + gUnknown_02024C2C[gActiveBank] = 0; + gUnknown_02024C5C[gActiveBank] = 0xFF; + + ewram[0x160E8 + gActiveBank * 2 + 0] = 0; + ewram[0x160E8 + gActiveBank * 2 + 1] = 0; + ewram[0x160AC + gActiveBank * 2 + 0] = 0; + ewram[0x160AC + gActiveBank * 2 + 1] = 0; + ewram[0x16100 + gActiveBank * 4 + 0] = 0; + ewram[0x16100 + gActiveBank * 4 + 1] = 0; + ewram[0x16100 + gActiveBank * 4 + 2] = 0; + ewram[0x16100 + gActiveBank * 4 + 3] = 0; + + ptr2 = (u32 *)(ewram + 0x17100); + ptr2[gActiveBank] = 0; + + gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1; + gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2; +} + +void bc_8012FAC(void) +{ + switch (gBattleCommunication[0]) + { + case 0: + gActiveBank = gBattleCommunication[1]; + EmitGetAttributes(0, 0, 0); + MarkBufferBankForExecution(gActiveBank); + gBattleCommunication[0]++; + break; + case 1: + if (gBattleExecBuffer == 0) + { + gBattleCommunication[1]++; + if (gBattleCommunication[1] == gNoOfAllBanks) + gBattleMainFunc = BattlePrepIntroSlide; + else + gBattleCommunication[0] = 0; + } + break; + } +} + +static void BattlePrepIntroSlide(void) +{ + if (gBattleExecBuffer == 0) + { + gActiveBank = GetBankByPlayerAI(0); + EmitBattleIntroSlide(0, gBattleTerrain); + MarkBufferBankForExecution(gActiveBank); + gBattleMainFunc = sub_8011384; + gBattleCommunication[0] = 0; + gBattleCommunication[1] = 0; + } +} + +void sub_8011384(void) +{ + u8 *ptr; + s32 i; + + if (gBattleExecBuffer == 0) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) + && GetBankSide(gActiveBank) == 0) + { + ptr = (u8 *)&gBattleMons[gActiveBank]; + for (i = 0; i < (u32)0x58; i++) + ptr[i] = 0; + } + else + { + u8 r0; + + ptr = (u8 *)&gBattleMons[gActiveBank]; + for (i = 0; i < (u32)0x58; i++) + ptr[i] = gBattleBufferB[gActiveBank][4 + i]; + + gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1; + gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2; + gBattleMons[gActiveBank].ability = GetAbilityBySpecies(gBattleMons[gActiveBank].species, gBattleMons[gActiveBank].altAbility); + r0 = GetBankSide(gActiveBank); + ewram160BC[r0] = gBattleMons[gActiveBank].hp; + for (i = 0; i < 8; i++) + gBattleMons[gActiveBank].statStages[i] = 6; + gBattleMons[gActiveBank].status2 = 0; + } + + if (GetBankIdentity(gActiveBank) == 0) + { + dp01_build_cmdbuf_x07_7_7_7(0); + MarkBufferBankForExecution(gActiveBank); + } + + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + if (GetBankIdentity(gActiveBank) == 1) + { + dp01_build_cmdbuf_x07_7_7_7(0); + MarkBufferBankForExecution(gActiveBank); + } + if (GetBankSide(gActiveBank) == 1 + && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) + GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); + } + else + { + if (GetBankSide(gActiveBank) == 1 + && !(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); + MarkBufferBankForExecution(gActiveBank); + } + } + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (GetBankIdentity(gActiveBank) == 2 + || GetBankIdentity(gActiveBank) == 3) + { + dp01_build_cmdbuf_x07_7_7_7(0); + MarkBufferBankForExecution(gActiveBank); + } + } + } + gBattleMainFunc = bc_801333C; + } +} + +void bc_801333C(void) +{ + s32 i; + + if (gBattleExecBuffer == 0) + { + struct + { + u16 hp; + u32 status; + } sp0[6]; + + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + for (i = 0; i < 6; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == 0 + || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + { + sp0[i].hp = 0xFFFF; + sp0[i].status = 0; + } + else + { + sp0[i].hp = GetMonData(&gEnemyParty[i], MON_DATA_HP); + sp0[i].status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS); + } + } + gActiveBank = GetBankByPlayerAI(1); + dp01_build_cmdbuf_x30_TODO(0, (u8 *)sp0, 0x80); + MarkBufferBankForExecution(gActiveBank); + + for (i = 0; i < 6; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == 0 + || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + { + sp0[i].hp = 0xFFFF; + sp0[i].status = 0; + } + else + { + sp0[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + sp0[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + } + } + gActiveBank = GetBankByPlayerAI(0); + dp01_build_cmdbuf_x30_TODO(0, (u8 *)sp0, 0x80); + MarkBufferBankForExecution(gActiveBank); + + gBattleMainFunc = bc_battle_begin_message; + } + else + { + // The array gets set here, but nothing is ever done with it. + // Likely unfinished code. + + for (i = 0; i < 6; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == 0 + || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + { + sp0[i].hp = 0xFFFF; + sp0[i].status = 0; + } + else + { + sp0[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + sp0[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + } + } + + gBattleMainFunc = bc_8013568; + } + } +} + +void bc_battle_begin_message(void) +{ + if (gBattleExecBuffer == 0) + { + gActiveBank = GetBankByPlayerAI(1); + PrepareStringBattle(0, gActiveBank); + gBattleMainFunc = sub_8011800; + } +} + +void bc_8013568(void) +{ + if (gBattleExecBuffer == 0) + { + gBattleMainFunc = sub_8011970; + PrepareStringBattle(0, 0); + } +} + +void sub_8011800(void) +{ + if (gBattleExecBuffer == 0) + { + PrepareStringBattle(1, GetBankByPlayerAI(1)); + gBattleMainFunc = sub_8011834; + } +} + +void sub_8011834(void) +{ + if (gBattleExecBuffer == 0) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (GetBankIdentity(gActiveBank) == 1) + { + dp01_build_cmdbuf_x2F_2F_2F_2F(0); + MarkBufferBankForExecution(gActiveBank); + } + if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) + && GetBankIdentity(gActiveBank) == 3) + { + dp01_build_cmdbuf_x2F_2F_2F_2F(0); + MarkBufferBankForExecution(gActiveBank); + } + } + gBattleMainFunc = bc_801362C; + } +} + +void bc_801362C(void) +{ + if (gBattleExecBuffer == 0) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (GetBankSide(gActiveBank) == 1 + && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) + GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); + } + gBattleMainFunc = sub_8011970; + } +} + +void unref_sub_8011950(void) +{ + if (gBattleExecBuffer == 0) + gBattleMainFunc = sub_8011970; +} + +void sub_8011970(void) +{ + if (gBattleExecBuffer == 0) + { + if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) + PrepareStringBattle(1, GetBankByPlayerAI(0)); + gBattleMainFunc = sub_80119B4; + } +} + +void sub_80119B4(void) +{ + if (gBattleExecBuffer == 0) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (GetBankIdentity(gActiveBank) == 0) + { + dp01_build_cmdbuf_x2F_2F_2F_2F(0); + MarkBufferBankForExecution(gActiveBank); + } + if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) + && GetBankIdentity(gActiveBank) == 2) + { + dp01_build_cmdbuf_x2F_2F_2F_2F(0); + MarkBufferBankForExecution(gActiveBank); + } + } + ewram16058 = 0; + ewram160F9 = 0; + ewram160E6 = 0; + gBattleMainFunc = BattleBeginFirstTurn; + } +} + +void unref_sub_8011A68(void) +{ + if (gBattleExecBuffer == 0) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (GetBankSide(gActiveBank) == 0) + { + EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], 0); + MarkBufferBankForExecution(gActiveBank); + } + } + ewram16058 = 0; + ewram160F9 = 0; + ewram160E6 = 0; + gBattleMainFunc = BattleBeginFirstTurn; + } +} + +void BattleBeginFirstTurn(void) +{ + s32 i; + s32 j; + u8 r9 = 0; + + if (gBattleExecBuffer == 0) + { + if (ewram16058 == 0) + { + for (i = 0; i < gNoOfAllBanks; i++) + gTurnOrder[i] = i; + for (i = 0; i < gNoOfAllBanks - 1; i++) + { + for (j = i + 1; j < gNoOfAllBanks; j++) + { + if (b_first_side(gTurnOrder[i], gTurnOrder[j], 1) != 0) + sub_8012FBC(i, j); + } + } + } + if (ewram160E6 == 0 && AbilityBattleEffects(0, 0, 0, 0xFF, 0) != 0) + { + ewram160E6 = 1; + return; + } + while (ewram16058 < gNoOfAllBanks) + { + if (AbilityBattleEffects(0, gTurnOrder[ewram16058], 0, 0, 0) != 0) + r9++; + ewram16058++; + if (r9 != 0) + return; + } + if (AbilityBattleEffects(9, 0, 0, 0, 0) != 0) + return; + if (AbilityBattleEffects(11, 0, 0, 0, 0) != 0) + return; + while (ewram160F9 < gNoOfAllBanks) + { + if (ItemBattleEffects(0, gTurnOrder[ewram160F9], 0) != 0) + r9++; + ewram160F9++; + if (r9 != 0) + return; + } + // Absolutely pointless for-loop that somehow doesn't get optimized out + for (i = 0; i < gNoOfAllBanks; i++) + ; + for (i = 0; i < 4; i++) + { + ewram[0x16068 + i] = 6; + gActionForBanks[i] = 0xFF; + gChosenMovesByBanks[i] = 0; + } + TurnValuesCleanUp(0); + SpecialStatusesClear(); + ewram160A6 = gAbsentBankFlags; + gBattleMainFunc = sub_8012324; + sub_80156DC(); + for (i = 0; i < 8; i++) + gBattleCommunication[i] = 0; + for (i = 0; i < gNoOfAllBanks; i++) + gBattleMons[i].status2 &= ~8; + ewram16000 = 0; + ewram16001 = 0; + ewram16110 = 0; + ewram16111 = 0; + ewram1600C = 0; + ewram16059 = 0; + ewram1600E = 0; + gBattleMoveFlags = 0; + gRandomTurnNumber = Random(); + } +} + +void bc_8013B1C(void) +{ + s32 i; + + if (gBattleExecBuffer == 0) + { + gBattleMainFunc = BattleTurnPassed; + for (i = 0; i < 8; i++) + gBattleCommunication[i] = 0; + for (i = 0; i < gNoOfAllBanks; i++) + { + gBattleMons[i].status2 &= ~8; + if ((gBattleMons[i].status1 & 7) && (gBattleMons[i].status2 & 0x1000)) + CancelMultiTurnMoves(i); + } + ewram16000 = 0; + ewram16001 = 0; + ewram16110 = 0; + ewram16111 = 0; + ewram1600E = 0; + gBattleMoveFlags = 0; + } +} + +void BattleTurnPassed(void) +{ + s32 i; + + TurnValuesCleanUp(1); + if (gBattleOutcome == 0) + { + if (UpdateTurnCounters() != 0) + return; + if (TurnBasedEffects() != 0) + return; + } + if (sub_80173A4() != 0) + return; + ewram16059 = 0; + if (sub_80170DC() != 0) + return; + TurnValuesCleanUp(0); + gHitMarker &= ~HITMARKER_NO_ATTACKSTRING; + gHitMarker &= ~0x80000; + gHitMarker &= ~0x400000; + gHitMarker &= ~0x100000; + ewram16002 = 0; + ewram160A1 = 0; + ewram1600C = 0; + gBattleMoveDamage = 0; + gBattleMoveFlags = 0; + for (i = 0; i < 5; i++) + gBattleCommunication[i] = 0; + if (gBattleOutcome != 0) + { + gFightStateTracker = 12; + gBattleMainFunc = sub_80138F0; + return; + } + if (gBattleResults.battleTurnCounter < 0xFF) + gBattleResults.battleTurnCounter++; + for (i = 0; i < gNoOfAllBanks; i++) + { + gActionForBanks[i] = 0xFF; + gChosenMovesByBanks[i] = 0; + } + for (i = 0; i < 4; i++) + ewram[0x16068 + i] = 6; + ewram160A6 = gAbsentBankFlags; + gBattleMainFunc = sub_8012324; + gRandomTurnNumber = Random(); +} + +u8 CanRunFromBattle(void) +{ + u8 r2; + u8 r6; + s32 i; + + if (gBattleMons[gActiveBank].item == ITEM_ENIGMA_BERRY) + r2 = gEnigmaBerries[gActiveBank].holdEffect; + else + r2 = ItemId_GetHoldEffect(gBattleMons[gActiveBank].item); + gStringBank = gActiveBank; + if (r2 == HOLD_EFFECT_CAN_ALWAYS_RUN) + return 0; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + return 0; + if (gBattleMons[gActiveBank].ability == ABILITY_RUN_AWAY) + return 0; + r6 = GetBankSide(gActiveBank); + for (i = 0; i < gNoOfAllBanks; i++) + { + if (r6 != GetBankSide(i) + && gBattleMons[i].ability == ABILITY_SHADOW_TAG) + { + ewram16003 = i; + gLastUsedAbility = gBattleMons[i].ability; + gBattleCommunication[5] = 2; + return 2; + } + if (r6 != GetBankSide(i) + && gBattleMons[gActiveBank].ability != ABILITY_LEVITATE + && gBattleMons[gActiveBank].type1 != 2 + && gBattleMons[gActiveBank].type2 != 2 + && gBattleMons[i].ability == ABILITY_ARENA_TRAP) + { + ewram16003 = i; + gLastUsedAbility = gBattleMons[i].ability; + gBattleCommunication[5] = 2; + return 2; + } + } + i = AbilityBattleEffects(15, gActiveBank, ABILITY_MAGNET_PULL, 0, 0); + if (i != 0 && (gBattleMons[gActiveBank].type1 == 8 || gBattleMons[gActiveBank].type2 == 8)) + { + ewram16003 = i - 1; + gLastUsedAbility = gBattleMons[i - 1].ability; + gBattleCommunication[5] = 2; + return 2; + } + if ((gBattleMons[gActiveBank].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED)) || (gStatuses3[gActiveBank] & STATUS3_ROOTED)) + { + gBattleCommunication[5] = 0; + return 1; + } + if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) + { + gBattleCommunication[5] = 1; + return 1; + } + return 0; +} + +void sub_8012258(u8 a) +{ + s32 i; + u8 r4; + u8 r1; + + for (i = 0; i < 3; i++) + gUnknown_02038470[i] = ewram[0x1606C + i + a * 3]; + r4 = pokemon_order_func(gBattlePartyID[a]); + r1 = pokemon_order_func(ewram[0x16068 + a]); + sub_8094C98(r4, r1); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + for (i = 0; i < 3; i++) + { + ewram[0x1606C + i + a * 3] = gUnknown_02038470[i]; + ewram[0x1606C + i + (a ^ 2) * 3] = gUnknown_02038470[i]; + } + } + else + { + for (i = 0; i < 3; i++) + { + ewram[0x1606C + i + a * 3] = gUnknown_02038470[i]; + } + } +} + +/* +void sub_8012324(void) +{ + u8 r5; + + gBattleCommunication[4] = 0; + // inverted loop + //_0801234C + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + r5 = GetBankIdentity(gActiveBank); + switch (gBattleCommunication[gActiveBank]) + { + case 0: + ewram[0x016068 + gActiveBank] = 6; + if (!(gBattleTypeFlags & 0x40) + && (r5 & 2) + && !(ewram160A6 & gBitTable[GetBankByPlayerAI(r5 ^ 2)]) + && gBattleCommunication[GetBankByPlayerAI(r5)] != 4) + break; + //_080123F8 + if (ewram160A6 & gBitTable[gActiveBank]) + { + gActionForBanks[gActiveBank] = 13; + if (!(gBattleTypeFlags & 0x40)) + gBattleCommunication[gActiveBank] = 4; + //_08012454 + else + gBattleCommunication[gActiveBank] = 3; + break; + } + //_08012468 + if ((gBattleMons[gActiveBank].status2 & 0x1000) + || (gBattleMons[gActiveBank].status2 & 0x10000000)) + { + gActionForBanks[gActiveBank] = 0; + gBattleCommunication[gActiveBank] = 3; + } + else + { + dp01_build_cmdbuf_x12_a_bb(0, gActionForBanks[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8)); + MarkBufferBankForExecution(gActiveBank); + gBattleCommunication[gActiveBank]++; + } + break; + case 1: + } + } +} +*/ diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c new file mode 100644 index 000000000..d58ae4145 --- /dev/null +++ b/src/battle/battle_4.c @@ -0,0 +1,18196 @@ +#include "global.h" +#include "battle.h" +#include "battle_move_effects.h" +#include "moves.h" +#include "abilities.h" +#include "item.h" +#include "items.h" +#include "data2.h" +#include "hold_effects.h" +#include "rng.h" +#include "rom3.h" +#include "species.h" +#include "pokemon.h" +#include "text.h" +#include "palette.h" +#include "main.h" +#include "songs.h" +#include "sound.h" +#include "task.h" +#include "decompress.h" +#include "naming_screen.h" + +//extern needed variables +extern u8 gCritMultiplier; +extern s32 gBattleMoveDamage; +extern u32 gStatuses3[4]; +extern u16 gBattleTypeFlags; +extern const u32 gBitTable[]; +extern const struct BaseStats gBaseStats[]; +extern struct BattleEnigmaBerry gEnigmaBerries[4]; +extern struct BattlePokemon gBattleMons[4]; +extern u8 gActiveBank; +extern u32 gBattleExecBuffer; +extern u8 gNoOfAllBanks; +extern u16 gBattlePartyID[4]; +extern u8 gTurnOrder[4]; +extern u8 gUnknown_02024A76[4]; +extern u16 gCurrentMove; +extern u8 gLastUsedAbility; +extern u16 gBattleWeather; +extern u8 gStringBank; +extern u8 gEffectBank; +extern u8 gAbsentBankFlags; +extern u8 gMultiHitCounter; +extern u16 gLastUsedMove[4]; +extern u16 gLockedMove[4]; +extern u16 gChosenMovesByBanks[4]; +extern u16 gSideAffecting[2]; +extern u16 gPauseCounterBattle; +extern u16 gPaydayMoney; +extern u16 gRandomTurnNumber; +extern u8 gBattleOutcome; +extern u8 gBattleTerrain; +extern u16 gTrainerBattleOpponent; +extern u8 gBankAttacker; +extern u8 gBankTarget; +extern u8* gBattlescriptCurrInstr; +extern u8 gCurrMovePos; +extern u8 gFightStateTracker; +extern u32 gHitMarker; +extern u8 gBattleMoveFlags; +extern u8 gBattleCommunication[]; +extern u16 gMoveHitWith[4]; +extern u16 gUnknown_02024C44[4]; +extern u8 gStringBank; +extern u16 gDynamicBasePower; +extern const u8 gTypeEffectiveness[]; +extern u16 gLastUsedItem; +extern u16 gBattleMovePower; +extern s32 gHP_dealt; +extern s32 gTakenDmg[4]; +extern u8 gTakenDmgBanks[4]; +extern const u16 gMissStrings[]; +extern u8 gSentPokesToOpponent[2]; +extern u8 gBank1; +extern u16 gExpShareExp; +extern u8 gBattleTextBuff1[]; +extern u8 gBattleTextBuff2[]; +extern u8 gBattleTextBuff3[]; +extern u8 gLeveledUpInBattle; +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 const u8 gTrainerMoney[]; +extern u16 gRandomMove; +extern u8* gBattleScriptsEffectsTable[]; +extern u16 gUnknown_02024BE8; //last used move in battle +extern u8 gBankInMenu; +extern u8 gActionForBanks[4]; +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 functions +bool8 CantUseMove(void); +void PressurePPLose(u8 bank_atk, u8 bank_def, u16 move); +void CancelMultiTurnMoves(u8 bank); +void b_movescr_stack_push(u8* BS_ptr); +void b_movescr_stack_push_cursor(void); +void RecordAbilityBattle(u8 bank, u8 ability); +void RecordItemBattle(u8 bank, u8 item); +int IsPokeDisobedient(void); +static bool8 IsTwoTurnsMove(u16 move); +static void DestinyBondFlagUpdate(void); +static void b_wonderguard_and_levitate(void); +u8 GetBankIdentity(u8 bank); +u8 GetBankSide(u8 bank); +u8 GetBattleBank(u8 bankValue); +s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 bank_atk, u8 bank_def); +static u8 AttacksThisTurn(u8 bank, u16 move); //Note: returns 1 if it's a charging turn, otherwise 2 +void UndoEffectsAfterFainting(void); +void BattleMusicStop(void); +void PlayBGM(u16 songID); +void MonGainEVs(struct Pokemon*, u16 defeatedSpecies); +extern u8 gBattleBufferB[4][0x200]; +void sub_80324F8(struct Pokemon*, u8 bank); +void AdjustFriendship(struct Pokemon*, u8 value); +bool8 IsTradedMon(struct Pokemon*); +void b_movescr_stack_pop_cursor(void); +void SwitchInClearStructs(void); +u8* ConvertIntToDecimalStringN(u8*, s32, u8, u8); +u8 GetNationalPokedexFlag(u16 nationalNum, u8 caseID); +u16 SpeciesToNationalPokedexNum(u16 species); +u8 sub_803FC34(u8 bank); +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 +u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move); +void IncrementGameStat(u8 index); +u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale); +u16 GetPokedexHeightWeight(u16 national_num, u8 heightweight); +u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5); +void DestroyMenuCursor(void); +void sub_802BC6C(void); +void sub_809D9F0(struct Pokemon *party, u8, u8, void *, u32); +u8 sub_809FA30(void); +bool32 IsHMMove2(u16 move); +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 sub_80156DC(void); //set sentpokes value +bool8 sub_8014AB8(u8 bank); //can run from battle +u8 CountAliveMons(u8 caseID); +void sub_803E1B0(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp); +u8 CanRunFromBattle(void); +u8 sub_801B5C0(u16 move, u8 targetbyte); //get target of move +void sub_80153D0(u8 atk); //pressure perish song pp decrement +u8 castform_switch(u8 bank); +void b_push_move_exec(u8* bs_ptr); +u8 sav1_map_get_light_level(void); +u8 CalculatePlayerPartyCount(void); +u16 Sqrt(u32 num); +u8 sub_809070C(u16 nationalNum, u32 TiD, u32 PiD); //task prepare poke dex display +void sub_814A880(u8 a1, u8 a2); +u8 sub_8015A98(u8 bank, u8 unusable_moves, u8 flags); //choose move limitations +void sub_801529C(u8 bank); +bool8 IsLinkDoubleBattle(void); +void sub_8094B6C(u8 bank, u8 partyID, u8 r2); + +//extern BattleScripts +extern u8 BattleScript_EndTurn[]; +extern u8 BattleScript_NoPPForMove[]; +extern u8 BattleScript_MagicCoatBounce[]; +extern u8 BattleScript_TookAttack[]; +extern u8 BattleScript_SnatchedMove[]; +extern u8 BattleScript_Pausex20[]; +extern u8 BattleScript_SubstituteFade[]; +extern u8 BattleScript_HangedOnMsg[]; +extern u8 BattleScript_OneHitKOMsg[]; +extern u8 BattleScript_EnduredMsg[]; +extern u8 BattleScript_PSNPrevention[]; +extern u8 BattleScript_BRNPrevention[]; +extern u8 BattleScript_PRLZPrevention[]; +extern u8 BattleScript_FlinchPrevention[]; +extern u8 BattleScript_StatUp[]; +extern u8 BattleScript_StatDown[]; +extern u8 BattleScript_NoItemSteal[]; +extern u8 BattleScript_ItemSteal[]; +extern u8 BattleScript_RapidSpinAway[]; +extern u8 BattleScript_TargetPRLZHeal[]; +extern u8 BattleScript_KnockedOff[]; +extern u8 BattleScript_LevelUp[]; +extern u8 BattleScript_WrapFree[]; +extern u8 BattleScript_LeechSeedFree[]; +extern u8 BattleScript_SpikesFree[]; +extern u8 BattleScript_ButItFailed[]; +extern u8 BattleScript_ObliviousPreventsAttraction[]; +extern u8 BattleScript_MistProtected[]; +extern u8 BattleScript_AbilityNoStatLoss[]; +extern u8 BattleScript_AbilityNoSpecificStatLoss[]; +extern u8 BattleScript_TrainerBallBlock[]; +extern u8 BattleScript_WallyBallThrow[]; +extern u8 BattleScript_SuccessBallThrow[]; +extern u8 BattleScript_ShakeBallThrow[]; + +extern u8 gUnknown_081D919F[]; //spikes1 +extern u8 gUnknown_081D9171[]; //spikes2 +extern u8 gUnknown_081D91CD[]; //spikes3 +extern u8 BattleScript_1D6F44[]; //present dmg +extern u8 BattleScript_1D83B5[]; //present full hp +extern u8 BattleScript_1D839B[]; //present hp heal +extern u8 BattleScript_1D6F74[]; +extern u8 gUnknown_081D977D[]; //castform change bs +extern u8 gUnknown_081D9834[]; +extern u8 gUnknown_081D90FC[]; //bs random switchout +extern u8 gUnknown_081D95DB[]; //bs payday money give + +//useful macros +//read via orr +#define BSScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24) +#define BSScriptRead8(ptr) (((u8)((ptr)[0]))) +#define BSScriptReadPtr(ptr) ((void *)BSScriptRead32(ptr)) + +//read via add +#define BS2ScriptRead32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24)) +#define BS2ScriptRead16(ptr) ((ptr)[0] + ((ptr)[1] << 8)) +#define BS2ScriptReadPtr(ptr) ((void *)BS2ScriptRead32(ptr)) + + +#define MOVESTATUS_MISSED (1 << 0) +#define MOVESTATUS_SUPEREFFECTIVE (1 << 1) +#define MOVESTATUS_NOTVERYEFFECTIVE (1 << 2) +#define MOVESTATUS_NOTAFFECTED (1 << 3) +#define MOVESTATUS_ONEHITKO (1 << 4) +#define MOVESTATUS_FAILED (1 << 5) +#define MOVESTATUS_ENDURED (1 << 6) +#define MOVESTATUS_HUNGON (1 << 7) + +#define MOVESTATUS_NOEFFECT ((MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED)) + +#define TargetProtectAffected ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED)) + +#define ABILITYEFFECT_CONTACT 0x4 +#define ABILITYEFFECT_IMMUNITY 0x5 +#define ABILITYEFFECT_SYNCHRONIZE 0x7 +#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8 +#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC +#define ABILITYEFFECT_CHECK_BANK_SIDE 0xD +#define ABILITYEFFECT_COUNT_OTHER_SIZE 0x10 +#define ABILITYEFFECT_COUNT_BANK_SIDE 0x11 +#define ABILITYEFFECT_COUNT_ON_FIELD 0x12 +#define ABILITYEFFECT_CHECK_ON_FIELD 0x13 + +//array entries for battle communication +#define MOVE_EFFECT_BYTE 0x3 +#define MULTISTRING_CHOOSER 0x5 +#define MSG_DISPLAY 0x7 + +#define TARGET_SELECTED 0x0 +#define TARGET_DEPENDS 0x1 +#define TARGET_BOTH 0x8 +#define TARGET_FOES_AND_ALLY 0x20 +#define TARGET_OPPONENTS_FIELD 0x40 + +#define TYPE_FORESIGHT 0xFE +#define TYPE_ENDTABLE 0xFF + +#define CMP_EQUAL 0x0 +#define CMP_NOT_EQUAL 0x1 +#define CMP_GREATER_THAN 0x2 +#define CMP_LESS_THAN 0x3 +#define CMP_COMMON_BITS 0x4 +#define CMP_NO_COMMON_BITS 0x5 + +#define BATTLE_WON 0x1 +#define BATTLE_LOST 0x2 +#define BATTLE_DREW 0x3 +#define BATTLE_RAN 0x4 +#define BATTLE_PLAYER_TELEPORTED 0x5 +#define BATTLE_POKE_FLED 0x6 +#define BATTLE_CAUGHT 0x7 +#define BATTLE_OPPONENT_TELEPORTED 0xA + +#define uBYTE0_16(value)(( (u8) (((u16)(value) & (0x000000FF)) >> 0x00))) +#define uBYTE1_16(value)(( (u8) (((u16)(value) & (0x0000FF00)) >> 0x08))) + +#define uBYTE0_32(value)(( (u8) (((u32)(value) & (0x000000FF)) >> 0x00))) +#define uBYTE1_32(value)(( (u8) (((u32)(value) & (0x0000FF00)) >> 0x08))) +#define uBYTE2_32(value)(( (u8) (((u32)(value) & (0x00FF0000)) >> 0x10))) +#define uBYTE3_32(value)(( (u8) (((u32)(value) & (0xFF000000)) >> 0x18))) + +#define sBYTE0_16(value)(( (u8) (((s16)(value) & (0x000000FF)) >> 0x00))) +#define sBYTE1_16(value)(( (u8) (((s16)(value) & (0x0000FF00)) >> 0x08))) + +#define sBYTE0_32(value)(( (u8) (((s32)(value) & (0x000000FF)) >> 0x00))) +#define sBYTE1_32(value)(( (u8) (((s32)(value) & (0x0000FF00)) >> 0x08))) +#define sBYTE2_32(value)(( (u8) (((s32)(value) & (0x00FF0000)) >> 0x10))) +#define sBYTE3_32(value)(( (u8) (((s32)(value) & (0xFF000000)) >> 0x18))) + +#define USED_HELD_ITEM(bank)((((u16*)(&unk_2000000[bank * 2 + 0x160cc])))) + +#define RecordAbilitySetField6(ability, fieldValue) \ +(gLastUsedAbility = ability, gBattleCommunication[6] = fieldValue, RecordAbilityBattle(gBankTarget, ability)) + +#define WEATHER_HAS_EFFECT ((!AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_AIR_LOCK, 0, 0))) +#define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_physical.moveturnLostHP_special))) + +#define HP_ON_SWITCHOUT (((u16*)(0x020160bc))) + +static void atk00_attackcanceler(void); +static void atk01_accuracycheck(void); +static void atk02_attackstring(void); +static void atk03_ppreduce(void); +static void atk04_critcalc(void); +static void atk05_damagecalc1(void); +static void atk06_typecalc(void); +static void atk07_dmg_adjustment(void); +static void atk08_dmg_adjustment2(void); +static void atk09_attackanimation(void); +static void atk0A_waitanimation(void); +static void atk0B_healthbarupdate(void); +static void atk0C_datahpupdate(void); +static void atk0D_critmessage(void); +static void atk0E_effectiveness_sound(void); +static void atk0F_resultmessage(void); +static void atk10_printstring(void); +static void atk11_printstring_playeronly(void); +static void atk12_waitmessage(void); +static void atk13_printfromtable(void); +static void atk14_printfromtable_playeronly(void); +static void atk15_seteffectwithchancetarget(void); +static void atk16_seteffectprimary(void); +static void atk17_seteffectsecondary(void); +static void atk18_status_effect_clear(void); +static void atk19_faint_pokemon(void); +static void atk1A_faint_animation(void); +static void atk1B_faint_effects_clear(void); +static void atk1C_jumpifstatus(void); +static void atk1D_jumpifstatus2(void); +static void atk1E_jumpifability(void); +static void atk1F_jumpifsideaffecting(void); +static void atk20_jumpifstat(void); +static void atk21_jumpifstatus3(void); +static void atk22_jumpiftype(void); +static void atk23_getexp(void); +static void atk24(void); +static void atk25_move_values_cleanup(void); +static void atk26_set_multihit(void); +static void atk27_decrement_multihit(void); +static void atk28_goto(void); +static void atk29_jumpifbyte(void); +static void atk2A_jumpifhalfword(void); +static void atk2B_jumpifword(void); +static void atk2C_jumpifarrayequal(void); +static void atk2D_jumpifarraynotequal(void); +static void atk2E_setbyte(void); +static void atk2F_addbyte(void); +static void atk30_subbyte(void); +static void atk31_copyarray(void); +static void atk32_copyarray_withindex(void); +static void atk33_orbyte(void); +static void atk34_orhalfword(void); +static void atk35_orword(void); +static void atk36_bicbyte(void); +static void atk37_bichalfword(void); +static void atk38_bicword(void); +static void atk39_pause(void); +static void atk3A_waitstate(void); +static void atk3B_healthbar_update(void); +static void atk3C_return(void); +static void atk3D_end(void); +static void atk3E_end2(void); +static void atk3F_end3(void); +static void atk40_jump_if_move_affected_by_protect(void); +static void atk41_call(void); +static void atk42_jumpiftype2(void); +static void atk43_jumpifabilitypresent(void); +static void atk44(void); +static void atk45_playanimation(void); +static void atk46_playanimation2(void); +static void atk47_setgraphicalstatchangevalues(void); +static void atk48_playstatchangeanimation(void); +static void atk49_moveendturn(void); +static void atk4A_typecalc2(void); +static void atk4B_return_atk_to_ball(void); +static void atk4C_copy_poke_data(void); +static void atk4D_switch_data_update(void); +static void atk4E_switchin_anim(void); +static void atk4F_jump_if_cannot_switch(void); +static void atk50_openpartyscreen(void); +static void atk51_switch_handle_order(void); +static void atk52_switch_in_effects(void); +static void atk53_trainer_slide(void); +static void atk54_effectiveness_sound(void); +static void atk55_play_sound(void); +static void atk56_fainting_cry(void); +static void atk57(void); +static void atk58_return_to_ball(void); +void atk59_learnmove_inbattle(void); +static void atk5A(void); +static void atk5B_80256E0(void); +static void atk5C_hitanimation(void); +static void atk5D_getmoneyreward(void); +static void atk5E_8025A70(void); +static void atk5F_8025B24(void); +static void atk60_increment_gamestat(void); +static void atk61_8025BA4(void); +static void atk62_08025C6C(void); +static void atk63_jumptorandomattack(void); +static void atk64_statusanimation(void); +static void atk65_status2animation(void); +static void atk66_chosenstatusanimation(void); +static void atk67_8025ECC(void); +static void atk68_80246A0(void); +static void atk69_dmg_adjustment2(void); +void atk6A_removeitem(void); +static void atk6B_atknameinbuff1(void); +static void atk6C_lvlbox_display(void); +static void atk6D_set_sentpokes_values(void); +static void atk6E_set_atk_to_player0(void); +static void atk6F_set_visible(void); +static void atk70_record_ability(void); +static void atk71_buffer_move_to_learn(void); +static void atk72_jump_if_can_run_frombattle(void); +static void atk73_hp_thresholds(void); +static void atk74_hp_thresholds2(void); +static void atk75_8026A58(void); +static void atk76_various(void); +static void atk77_setprotect(void); +static void atk78_faintifabilitynotdamp(void); +static void atk79_setatkhptozero(void); +static void atk7A_jumpwhiletargetvalid(void); +static void atk7B_healhalfHP_if_possible(void); +static void atk7C_8025508(void); +static void atk7D_set_rain(void); +static void atk7E_setreflect(void); +static void atk7F_setseeded(void); +static void atk80_manipulatedamage(void); +static void atk81_setrest(void); +static void atk82_jumpifnotfirstturn(void); +static void atk83_nop(void); +static void atk84_jump_if_cant_sleep(void); +static void atk85_stockpile(void); +static void atk86_stockpiletobasedamage(void); +static void atk87_stockpiletohpheal(void); +static void atk88_negativedamage(void); +static void atk89_statbuffchange(void); +static void atk8A_normalisebuffs(void); +static void atk8B_setbide(void); +static void atk8C_confuseifrepeatingattackends(void); +static void atk8D_setmultihit_counter(void); +static void atk8E_prepare_multihit(void); +static void atk8F_forcerandomswitch(void); +static void atk90_conversion_type_change(void); +static void atk91_givepaydaymoney(void); +static void atk92_setlightscreen(void); +static void atk93_ko_move(void); +static void atk94_gethalfcurrentenemyhp(void); +static void atk95_setsandstorm(void); +static void atk96_weatherdamage(void); +static void atk97_try_infatuation(void); +static void atk98_status_icon_update(void); +static void atk99_setmist(void); +static void atk9A_set_focusenergy(void); +static void atk9B_transformdataexecution(void); +static void atk9C_set_substitute(void); +static void atk9D_copyattack(void); +static void atk9E_metronome(void); +static void atk9F_dmgtolevel(void); +static void atkA0_psywavedamageeffect(void); +static void atkA1_counterdamagecalculator(void); +static void atkA2_mirrorcoatdamagecalculator(void); +static void atkA3_disablelastusedattack(void); +static void atkA4_setencore(void); +static void atkA5_painsplitdmgcalc(void); +static void atkA6_settypetorandomresistance(void); +static void atkA7_setalwayshitflag(void); +static void atkA8_copymovepermanently(void); +static void atkA9_sleeptalk_choose_move(void); +static void atkAA_set_destinybond(void); +static void atkAB_DestinyBondFlagUpdate(void); +static void atkAC_remaininghptopower(void); +static void atkAD_spite_ppreduce(void); +static void atkAE_heal_party_status(void); +static void atkAF_cursetarget(void); +static void atkB0_set_spikes(void); +static void atkB1_set_foresight(void); +static void atkB2_setperishsong(void); +static void atkB3_rolloutdamagecalculation(void); +static void atkB4_jumpifconfusedandstatmaxed(void); +static void atkB5_furycuttercalc(void); +static void atkB6_happinesstodamagecalculation(void); +static void atkB7_presentdamagecalculation(void); +static void atkB8_set_safeguard(void); +static void atkB9_magnitudedamagecalculation(void); +static void atkBA_jumpifnopursuitswitchdmg(void); +static void atkBB_setsunny(void); +static void atkBC_maxattackhalvehp(void); +static void atkBD_copyfoestats(void); +static void atkBE_breakfree(void); +static void atkBF_set_defense_curl(void); +static void atkC0_recoverbasedonsunlight(void); +static void atkC1_hidden_power(void); +static void atkC2_selectnexttarget(void); +static void atkC3_setfutureattack(void); +static void atkC4_beat_up(void); +static void atkC5_hidepreattack(void); +static void atkC6_unhidepostattack(void); +static void atkC7_setminimize(void); +static void atkC8_sethail(void); +static void atkC9_jumpifattackandspecialattackcannotfall(void); +static void atkCA_setforcedtarget(void); +static void atkCB_setcharge(void); +static void atkCC_callterrainattack(void); +static void atkCD_cureifburnedparalysedorpoisoned(void); +static void atkCE_settorment(void); +static void atkCF_jumpifnodamage(void); +static void atkD0_settaunt(void); +static void atkD1_set_helpinghand(void); +static void atkD2_swap_items(void); +static void atkD3_copy_ability(void); +static void atkD4_wish_effect(void); +static void atkD5_setroots(void); +static void atkD6_doubledamagedealtifdamaged(void); +static void atkD7_setyawn(void); +static void atkD8_setdamagetohealthdifference(void); +static void atkD9_scaledamagebyhealthratio(void); +static void atkDA_abilityswap(void); +static void atkDB_imprisoneffect(void); +static void atkDC_setgrudge(void); +static void atkDD_weightdamagecalculation(void); +static void atkDE_asistattackselect(void); +static void atkDF_setmagiccoat(void); +static void atkE0_setstealstatchange(void); +static void atkE1_intimidate_string_loader(void); +static void atkE2_switchout_abilities(void); +static void atkE3_jumpiffainted(void); +static void atkE4_getsecretpowereffect(void); +static void atkE5_pickup(void); +static void atkE6_castform_change_animation(void); +static void atkE7_castform_data_change(void); +static void atkE8_settypebasedhalvers(void); +static void atkE9_setweatherballtype(void); +static void atkEA_recycleitem(void); +static void atkEB_settypetoterrain(void); +static void atkEC_pursuit_sth(void); +static void atkED_802B4B4(void); +static void atkEE_removelightscreenreflect(void); +void atkEF_pokeball_catch_calculation(void); +static void atkF0_copy_caught_poke(void); +static void atkF1_setpoke_as_caught(void); +static void atkF2_display_dex_info(void); +static void atkF3_nickname_caught_poke(void); +static void atkF4_802BEF0(void); +static void atkF5_removeattackerstatus1(void); +static void atkF6_802BF48(void); +static void atkF7_802BF54(void); + +typedef void (*BattleCmdFunc)(void); + +const BattleCmdFunc gBattleScriptingCommandsTable[] = +{ + atk00_attackcanceler, + atk01_accuracycheck, + atk02_attackstring, + atk03_ppreduce, + atk04_critcalc, + atk05_damagecalc1, + atk06_typecalc, + atk07_dmg_adjustment, + atk08_dmg_adjustment2, + atk09_attackanimation, + atk0A_waitanimation, + atk0B_healthbarupdate, + atk0C_datahpupdate, + atk0D_critmessage, + atk0E_effectiveness_sound, + atk0F_resultmessage, + atk10_printstring, + atk11_printstring_playeronly, + atk12_waitmessage, + atk13_printfromtable, + atk14_printfromtable_playeronly, + atk15_seteffectwithchancetarget, + atk16_seteffectprimary, + atk17_seteffectsecondary, + atk18_status_effect_clear, + atk19_faint_pokemon, + atk1A_faint_animation, + atk1B_faint_effects_clear, + atk1C_jumpifstatus, + atk1D_jumpifstatus2, + atk1E_jumpifability, + atk1F_jumpifsideaffecting, + atk20_jumpifstat, + atk21_jumpifstatus3, + atk22_jumpiftype, + atk23_getexp, + atk24, + atk25_move_values_cleanup, + atk26_set_multihit, + atk27_decrement_multihit, + atk28_goto, + atk29_jumpifbyte, + atk2A_jumpifhalfword, + atk2B_jumpifword, + atk2C_jumpifarrayequal, + atk2D_jumpifarraynotequal, + atk2E_setbyte, + atk2F_addbyte, + atk30_subbyte, + atk31_copyarray, + atk32_copyarray_withindex, + atk33_orbyte, + atk34_orhalfword, + atk35_orword, + atk36_bicbyte, + atk37_bichalfword, + atk38_bicword, + atk39_pause, + atk3A_waitstate, + atk3B_healthbar_update, + atk3C_return, + atk3D_end, + atk3E_end2, + atk3F_end3, + atk40_jump_if_move_affected_by_protect, + atk41_call, + atk42_jumpiftype2, + atk43_jumpifabilitypresent, + atk44, + atk45_playanimation, + atk46_playanimation2, + atk47_setgraphicalstatchangevalues, + atk48_playstatchangeanimation, + atk49_moveendturn, + atk4A_typecalc2, + atk4B_return_atk_to_ball, + atk4C_copy_poke_data, + atk4D_switch_data_update, + atk4E_switchin_anim, + atk4F_jump_if_cannot_switch, + atk50_openpartyscreen, + atk51_switch_handle_order, + atk52_switch_in_effects, + atk53_trainer_slide, + atk54_effectiveness_sound, + atk55_play_sound, + atk56_fainting_cry, + atk57, + atk58_return_to_ball, + atk59_learnmove_inbattle, + atk5A, + atk5B_80256E0, + atk5C_hitanimation, + atk5D_getmoneyreward, + atk5E_8025A70, + atk5F_8025B24, + atk60_increment_gamestat, + atk61_8025BA4, + atk62_08025C6C, + atk63_jumptorandomattack, + atk64_statusanimation, + atk65_status2animation, + atk66_chosenstatusanimation, + atk67_8025ECC, + atk68_80246A0, + atk69_dmg_adjustment2, + atk6A_removeitem, + atk6B_atknameinbuff1, + atk6C_lvlbox_display, + atk6D_set_sentpokes_values, + atk6E_set_atk_to_player0, + atk6F_set_visible, + atk70_record_ability, + atk71_buffer_move_to_learn, + atk72_jump_if_can_run_frombattle, + atk73_hp_thresholds, + atk74_hp_thresholds2, + atk75_8026A58, + atk76_various, + atk77_setprotect, + atk78_faintifabilitynotdamp, + atk79_setatkhptozero, + atk7A_jumpwhiletargetvalid, + atk7B_healhalfHP_if_possible, + atk7C_8025508, + atk7D_set_rain, + atk7E_setreflect, + atk7F_setseeded, + atk80_manipulatedamage, + atk81_setrest, + atk82_jumpifnotfirstturn, + atk83_nop, + atk84_jump_if_cant_sleep, + atk85_stockpile, + atk86_stockpiletobasedamage, + atk87_stockpiletohpheal, + atk88_negativedamage, + atk89_statbuffchange, + atk8A_normalisebuffs, + atk8B_setbide, + atk8C_confuseifrepeatingattackends, + atk8D_setmultihit_counter, + atk8E_prepare_multihit, + atk8F_forcerandomswitch, + atk90_conversion_type_change, + atk91_givepaydaymoney, + atk92_setlightscreen, + atk93_ko_move, + atk94_gethalfcurrentenemyhp, + atk95_setsandstorm, + atk96_weatherdamage, + atk97_try_infatuation, + atk98_status_icon_update, + atk99_setmist, + atk9A_set_focusenergy, + atk9B_transformdataexecution, + atk9C_set_substitute, + atk9D_copyattack, + atk9E_metronome, + atk9F_dmgtolevel, + atkA0_psywavedamageeffect, + atkA1_counterdamagecalculator, + atkA2_mirrorcoatdamagecalculator, + atkA3_disablelastusedattack, + atkA4_setencore, + atkA5_painsplitdmgcalc, + atkA6_settypetorandomresistance, + atkA7_setalwayshitflag, + atkA8_copymovepermanently, + atkA9_sleeptalk_choose_move, + atkAA_set_destinybond, + atkAB_DestinyBondFlagUpdate, + atkAC_remaininghptopower, + atkAD_spite_ppreduce, + atkAE_heal_party_status, + atkAF_cursetarget, + atkB0_set_spikes, + atkB1_set_foresight, + atkB2_setperishsong, + atkB3_rolloutdamagecalculation, + atkB4_jumpifconfusedandstatmaxed, + atkB5_furycuttercalc, + atkB6_happinesstodamagecalculation, + atkB7_presentdamagecalculation, + atkB8_set_safeguard, + atkB9_magnitudedamagecalculation, + atkBA_jumpifnopursuitswitchdmg, + atkBB_setsunny, + atkBC_maxattackhalvehp, + atkBD_copyfoestats, + atkBE_breakfree, + atkBF_set_defense_curl, + atkC0_recoverbasedonsunlight, + atkC1_hidden_power, + atkC2_selectnexttarget, + atkC3_setfutureattack, + atkC4_beat_up, + atkC5_hidepreattack, + atkC6_unhidepostattack, + atkC7_setminimize, + atkC8_sethail, + atkC9_jumpifattackandspecialattackcannotfall, + atkCA_setforcedtarget, + atkCB_setcharge, + atkCC_callterrainattack, + atkCD_cureifburnedparalysedorpoisoned, + atkCE_settorment, + atkCF_jumpifnodamage, + atkD0_settaunt, + atkD1_set_helpinghand, + atkD2_swap_items, + atkD3_copy_ability, + atkD4_wish_effect, + atkD5_setroots, + atkD6_doubledamagedealtifdamaged, + atkD7_setyawn, + atkD8_setdamagetohealthdifference, + atkD9_scaledamagebyhealthratio, + atkDA_abilityswap, + atkDB_imprisoneffect, + atkDC_setgrudge, + atkDD_weightdamagecalculation, + atkDE_asistattackselect, + atkDF_setmagiccoat, + atkE0_setstealstatchange, + atkE1_intimidate_string_loader, + atkE2_switchout_abilities, + atkE3_jumpiffainted, + atkE4_getsecretpowereffect, + atkE5_pickup, + atkE6_castform_change_animation, + atkE7_castform_data_change, + atkE8_settypebasedhalvers, + atkE9_setweatherballtype, + atkEA_recycleitem, + atkEB_settypetoterrain, + atkEC_pursuit_sth, + atkED_802B4B4, + atkEE_removelightscreenreflect, + atkEF_pokeball_catch_calculation, + atkF0_copy_caught_poke, + atkF1_setpoke_as_caught, + atkF2_display_dex_info, + atkF3_nickname_caught_poke, + atkF4_802BEF0, + atkF5_removeattackerstatus1, + atkF6_802BF48, + atkF7_802BF54, +}; + +struct statFractions +{ + u8 dividend; + u8 divisor; +}; + +static const struct statFractions gAccuracyStageRatios[] = +{ + { 33, 100}, // -6 + { 36, 100}, // -5 + { 43, 100}, // -4 + { 50, 100}, // -3 + { 60, 100}, // -2 + { 75, 100}, // -1 + { 1, 1}, // 0 + {133, 100}, // +1 + {166, 100}, // +2 + { 2, 1}, // +3 + {233, 100}, // +4 + {133, 50}, // +5 + { 3, 1}, // +6 +}; + +//The chance is 1/N for each stage. +static const u16 gCriticalHitChance[] = {16, 8, 4, 3, 2}; + +static const u32 gStatusFlagsForMoveEffects[] = +{ + 0x00000000, + 0x00000007, + 0x00000008, + 0x00000010, + 0x00000020, + 0x00000040, + 0x00000080, + 0x00000007, + 0x00000008, + 0x00000000, + 0x00000070, + 0x00000000, + 0x00001000, + 0x0000E000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00400000, + 0x00000000, + 0x00000000, + 0x04000000, + 0x08000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000C00, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 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[]; + +const u8* const gMoveEffectBS_Ptrs[] = +{ + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D965A, + BattleScript_1D9669, + BattleScript_1D9678, + BattleScript_1D9687, + BattleScript_1D969D, + BattleScript_1D96BA, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D9696, + BattleScript_1D96AA, + BattleScript_1D963E, + BattleScript_1D96B1, + BattleScript_1D96C8, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D963E, + BattleScript_1D96C8 +}; + +const u8 sUnreferencedBitMask1[] = {0, 1, 3, 7, 0xF, 0x1F, 0x3F}; + +const u8 gLevelUpStatBoxStats[] = {MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPD}; + +static const u16 sProtectSuccessRates[] = {0xFFFF, 0x7FFF, 0x3FFF, 0x1FFF}; + +static const u16 sUnknown_081FACFE[] = //banned moves to copy +{ + MOVE_METRONOME, + MOVE_STRUGGLE, + MOVE_SKETCH, + MOVE_MIMIC, + 0xFFFE, + MOVE_COUNTER, + MOVE_MIRROR_COAT, + MOVE_PROTECT, + MOVE_DETECT, + MOVE_ENDURE, + MOVE_DESTINY_BOND, + MOVE_SLEEP_TALK, + MOVE_THIEF, + MOVE_FOLLOW_ME, + MOVE_SNATCH, + MOVE_HELPING_HAND, + MOVE_COVET, + MOVE_TRICK, + MOVE_FOCUS_PUNCH, + 0xFFFF +}; + +static const u8 sUnknown_081FAD26[] = +{ + 1, 200, + 4, 150, + 9, 100, + 16, 80, + 32, 40, + 48, 20 +}; + +static const u16 sNaturePowerMoves[] = +{ + MOVE_STUN_SPORE, + MOVE_RAZOR_LEAF, + MOVE_EARTHQUAKE, + MOVE_HYDRO_PUMP, + MOVE_SURF, + MOVE_BUBBLE_BEAM, + MOVE_ROCK_SLIDE, + MOVE_SHADOW_BALL, + MOVE_SWIFT, + MOVE_SWIFT +}; + +//weight-based damage table for Low Kick +//format: min. weight (hectograms), base power +static const u16 sWeightDamage[] = +{ + 100, 20, + 250, 40, + 500, 60, + 1000, 80, + 2000, 100, + -1, -1 +}; + +static const u16 sPickupItems[] = +{ + ITEM_SUPER_POTION, 30, + ITEM_FULL_HEAL, 40, + ITEM_ULTRA_BALL, 50, + ITEM_RARE_CANDY, 60, + ITEM_FULL_RESTORE, 70, + ITEM_REVIVE, 80, + ITEM_NUGGET, 90, + ITEM_PROTEIN, 95, + ITEM_PP_UP, 99, + ITEM_KINGS_ROCK, 1 +}; + +static const u8 sTerrainToType[] = +{ + TYPE_GRASS, // tall grass + TYPE_GRASS, // long grass + TYPE_GROUND, // sand + TYPE_WATER, // underwater + TYPE_WATER, // water + TYPE_WATER, // pond water + TYPE_ROCK , // rock + TYPE_ROCK , // cave + TYPE_NORMAL, // building + TYPE_NORMAL, // plain +}; + +static const u8 sBallCatchBonuses[] = +{ + 20, 15, 10, 15 //Ultra, Great, Poke, Safari +}; + +static void atk00_attackcanceler(void) +{ + int i; + if (gBattleOutcome) + { + gFightStateTracker = 0xC; + return; + } + if (gBattleMons[gBankAttacker].hp == 0 && !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) + { + gHitMarker |= HITMARKER_x80000; + gBattlescriptCurrInstr = BattleScript_EndTurn; + return; + } + if (CantUseMove()) + return; + if (AbilityBattleEffects(2, gBankTarget, 0, 0, 0)) + return; + if (!gBattleMons[gBankAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE && !(gHitMarker & 0x800200) + && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) + { + gBattlescriptCurrInstr = BattleScript_NoPPForMove; + gBattleMoveFlags |= MOVESTATUS_MISSED; + return; + } + gHitMarker &= ~(HITMARKER_x800000); + if (!(gHitMarker & HITMARKER_OBEYS) && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) + { + u8 disobedient = IsPokeDisobedient(); + asm("":::"r0"); //It's impossible to match + asm("":::"r1"); + if ((disobedient)) + { + if (disobedient == 2) + gHitMarker |= HITMARKER_OBEYS; + else + gBattleMoveFlags |= MOVESTATUS_MISSED; + return; + } + } + gHitMarker |= HITMARKER_OBEYS; + if (gProtectStructs[gBankTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGICCOAT_AFFECTED) + { + PressurePPLose(gBankAttacker, gBankTarget, MOVE_MAGIC_COAT); + gProtectStructs[gBankTarget].bounceMove = 0; + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_MagicCoatBounce; + return; + } + for (i = 0; i < gNoOfAllBanks; i++) + { + if ((gProtectStructs[gTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) + { + PressurePPLose(gBankAttacker, gTurnOrder[i], MOVE_SNATCH); + gProtectStructs[gTurnOrder[i]].stealMove = 0; + BATTLE_STRUCT->scriptingActive = gTurnOrder[i]; + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_SnatchedMove; + return; + } + } + if (gSpecialStatuses[gBankTarget].lightningRodRedirected) + { + gSpecialStatuses[gBankTarget].lightningRodRedirected = 0; + gLastUsedAbility = ABILITY_LIGHTNING_ROD; + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_TookAttack; + RecordAbilityBattle(gBankTarget, gLastUsedAbility); + } + else if (TargetProtectAffected + && (gCurrentMove != MOVE_CURSE || (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST)) + && ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)))) + { + CancelMultiTurnMoves(gBankAttacker); + gBattleMoveFlags |= MOVESTATUS_MISSED; + gMoveHitWith[gBankTarget] = 0; + gUnknown_02024C44[gBankTarget] = 0; + gBattleCommunication[6] = 1; + gBattlescriptCurrInstr++; + } + else + { + gBattlescriptCurrInstr++; + } +} + +static void JumpIfMoveFailed(u8 adder, u16 move) +{ + void* to_store = gBattlescriptCurrInstr + adder; + if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) + { + gMoveHitWith[gBankTarget] = 0; + gUnknown_02024C44[gBankTarget] = 0; + to_store = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + DestinyBondFlagUpdate(); + if (AbilityBattleEffects(3, gBankTarget, 0, 0, move)) + return; + } + gBattlescriptCurrInstr = to_store; +} + +static void atk40_jump_if_move_affected_by_protect(void) +{ + if (TargetProtectAffected) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + JumpIfMoveFailed(5, 0); + gBattleCommunication[6] = 1; + } + else + { + gBattlescriptCurrInstr += 5; + } +} + +static bool8 JumpIfMoveAffectedByProtect(u16 move) +{ + bool8 affected = 0; + if (TargetProtectAffected) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + JumpIfMoveFailed(7, move); + gBattleCommunication[6] = 1; + affected = 1; + } + return affected; +} + +static bool8 AccuracyCalcHelper(u16 move) +{ + if (gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBankTarget].bankWithSureHit == gBankAttacker) + { + JumpIfMoveFailed(7, move); + return TRUE; + } + + if (!(gHitMarker & HITMARKER_IGNORE_ON_AIR) && gStatuses3[gBankTarget] & STATUS3_ON_AIR) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + JumpIfMoveFailed(7, move); + return TRUE; + } + gHitMarker &= ~HITMARKER_IGNORE_ON_AIR; + + if (!(gHitMarker & HITMARKER_IGNORE_UNDERGROUND) && gStatuses3[gBankTarget] & STATUS3_UNDERGROUND) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + JumpIfMoveFailed(7, move); + return TRUE; + } + gHitMarker &= ~HITMARKER_IGNORE_UNDERGROUND; + + if (!(gHitMarker & HITMARKER_IGNORE_UNDERWATER) && gStatuses3[gBankTarget] & STATUS3_UNDERWATER) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + JumpIfMoveFailed(7, move); + return TRUE; + } + gHitMarker &= ~HITMARKER_IGNORE_UNDERWATER; + + if ((WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) && gBattleMoves[move].effect == EFFECT_THUNDER) + || (gBattleMoves[move].effect == EFFECT_ALWAYS_HIT || gBattleMoves[move].effect == EFFECT_VITAL_THROW)) + { + JumpIfMoveFailed(7, move); + return TRUE; + } + return FALSE; +} + +static void atk01_accuracycheck(void) +{ + u16 move = BS2ScriptRead16(gBattlescriptCurrInstr + 5); + if (move == 0xFFFE || move == 0xFFFF) + { + if (gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBankTarget].bankWithSureHit == gBankAttacker) + gBattlescriptCurrInstr += 7; + else if (gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else if (!JumpIfMoveAffectedByProtect(0)) + gBattlescriptCurrInstr += 7; + } + else + { + u8 type; s8 buff; u8 MoveAcc; u16 calc; u8 hold_effect; u8 quality; + if (move == 0) {move = gCurrentMove;} + + if (BATTLE_STRUCT->dynamicMoveType) + type = BATTLE_STRUCT->dynamicMoveType & 0x3F; + else + type = gBattleMoves[move].type; + + if (JumpIfMoveAffectedByProtect(move)) + return; + if (AccuracyCalcHelper(move)) + return; + + if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) + { + u8 acc = gBattleMons[gBankAttacker].statStages[STAT_STAGE_ACC]; + buff = acc; + } + else + { + u8 acc = gBattleMons[gBankAttacker].statStages[STAT_STAGE_ACC]; + buff = acc + 6 - gBattleMons[gBankTarget].statStages[STAT_STAGE_EVASION]; + } + + if (buff < 0) {buff = 0;} + if (buff > 0xC) {buff = 0xC;} + + MoveAcc = gBattleMoves[move].accuracy; + //check Thunder on sunny weather + if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && gBattleMoves[move].effect == EFFECT_THUNDER) + MoveAcc = 50; + + calc = gAccuracyStageRatios[buff].dividend * MoveAcc; + calc /= gAccuracyStageRatios[buff].divisor; + + if (gBattleMons[gBankAttacker].ability == ABILITY_COMPOUND_EYES) + calc = (calc * 130) / 100; //1.3 compound eyes boost + if (WEATHER_HAS_EFFECT && gBattleMons[gBankTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & WEATHER_SANDSTORM_ANY) + calc = (calc * 80) / 100; //1.2 sand veil loss; + if (gBattleMons[gBankAttacker].ability == ABILITY_HUSTLE && type < 9) + calc = (calc * 80) / 100; //1.2 hustle loss; + + if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) + hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; + else + { + hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); + quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); + } + + gStringBank = gBankTarget; + + if (hold_effect == HOLD_EFFECT_EVASION_UP) + calc = (calc * (100 - quality)) / 100; + + //final calculation + if ((Random() % 100 + 1) > calc) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && (gBattleMoves[move].target == 0x8 || gBattleMoves[move].target == 0x20)) + gBattleCommunication[6] = 2; + else + gBattleCommunication[6] = 0; + b_wonderguard_and_levitate(); + + } + JumpIfMoveFailed(7, move); + } +} + +static void atk02_attackstring(void) +{ + if (gBattleExecBuffer) + return; + if (!(gHitMarker & (HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED))) + { + PrepareStringBattle(4, gBankAttacker); + gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED; + } + gBattlescriptCurrInstr++; + gBattleCommunication[MSG_DISPLAY] = 0; +} + +static void atk03_ppreduce(void) +{ + int to_deduct = 1; + if (gBattleExecBuffer) + return; + if (!gSpecialStatuses[gBankAttacker].flag20) + { + switch (gBattleMoves[gCurrentMove].target) + { + case TARGET_FOES_AND_ALLY: + to_deduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_ON_FIELD, gBankAttacker, ABILITY_PRESSURE, 0, 0); + break; + case TARGET_BOTH: + case TARGET_OPPONENTS_FIELD: + to_deduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIZE, gBankAttacker, ABILITY_PRESSURE, 0, 0); + break; + default: + if (gBankAttacker != gBankTarget && gBattleMons[gBankTarget].ability == ABILITY_PRESSURE) + to_deduct++; + break; + } + } + if (!(gHitMarker & (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING)) && gBattleMons[gBankAttacker].pp[gCurrMovePos]) + { + gProtectStructs[gBankAttacker].notFirstStrike = 1; + if (gBattleMons[gBankAttacker].pp[gCurrMovePos] > to_deduct) + gBattleMons[gBankAttacker].pp[gCurrMovePos] -= to_deduct; + else + gBattleMons[gBankAttacker].pp[gCurrMovePos] = 0; + + if (!(gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED) + && !((gDisableStructs[gBankAttacker].unk18_b) & gBitTable[gCurrMovePos])) + { + gActiveBank = gBankAttacker; + EmitSetAttributes(0, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0, 1, &gBattleMons[gBankAttacker].pp[gCurrMovePos]); + MarkBufferBankForExecution(gBankAttacker); + } + } + gHitMarker &= ~(HITMARKER_NO_PPDEDUCT); + gBattlescriptCurrInstr++; +} + +static void atk04_critcalc(void) +{ + u8 hold_effect; u16 item; u16 crit_chance; int adderv3, adderv5, adderv6, adderv7, adderv8, adderv9, adderv10, adderv11; u16 adderv12; + item = gBattleMons[gBankAttacker].item; + if (item == ITEM_ENIGMA_BERRY) + hold_effect = gEnigmaBerries[gBankAttacker].holdEffect; + else + hold_effect = ItemId_GetHoldEffect(item); + + gStringBank = gBankAttacker; + + if (gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY) + adderv3 = 2; + else + adderv3 = 0; + + if (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL) {adderv3++;} + adderv5 = adderv3; + if (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK) {adderv5 = adderv3 + 1;} + + if (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK) {adderv5++;} + adderv6 = adderv5; + if (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL) {adderv6 = adderv5 + 1;} + + adderv7 = 0; + if (hold_effect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBankAttacker].species == SPECIES_CHANSEY) {adderv7 = 1;} + adderv8 = 2 * adderv7; + adderv9 = 0; + if (hold_effect == HOLD_EFFECT_STICK && gBattleMons[gBankAttacker].species == SPECIES_FARFETCHD) {adderv9 = 1;} + adderv11 = 2 * adderv9; + if (hold_effect == HOLD_EFFECT_SCOPE_LENS) + {adderv10 = 1 + adderv6 + adderv8; adderv12 = adderv10 + adderv11;} + else + {adderv10 = adderv6 + adderv8; adderv12 = adderv10 + adderv11;} + + crit_chance = adderv12; + + if (crit_chance > 4) {crit_chance = 4;} + + if ((gBattleMons[gBankTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBankTarget].ability != ABILITY_SHELL_ARMOR) + && !(gStatuses3[gBankAttacker] & STATUS3_CANT_SCORE_A_CRIT) + && !(gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE)) + && !(Random() % gCriticalHitChance[crit_chance])) + gCritMultiplier = 2; + else + gCritMultiplier = 1; + gBattlescriptCurrInstr++; +} + +static void atk05_damagecalc1(void) +{ + u16 side_hword = gSideAffecting[GetBankIdentity(gBankTarget) & 1]; + gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove, + side_hword, gDynamicBasePower, + BATTLE_STRUCT->dynamicMoveType, gBankAttacker, gBankTarget); + gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier; + + if (gStatuses3[gBankAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) + gBattleMoveDamage *= 2; + if (gProtectStructs[gBankAttacker].helpingHand) + gBattleMoveDamage = gBattleMoveDamage * 15 / 10; + + gBattlescriptCurrInstr++; +} + +void AI_CalcDmg(u8 BankAtk, u8 BankDef) +{ + u16 side_hword = gSideAffecting[GetBankIdentity(BankDef) & 1]; + gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[BankAtk], &gBattleMons[BankDef], gCurrentMove, + side_hword, gDynamicBasePower, + BATTLE_STRUCT->dynamicMoveType, BankAtk, BankDef); + gDynamicBasePower = 0; + gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier; + + if (gStatuses3[BankAtk] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) + gBattleMoveDamage *= 2; + if (gProtectStructs[BankAtk].helpingHand) + gBattleMoveDamage = gBattleMoveDamage * 15 / 10; +} + +static void ModulateDmgByType(u8 multiplier) +{ + gBattleMoveDamage = gBattleMoveDamage * multiplier / 10; + if (gBattleMoveDamage == 0 && multiplier != 0) + gBattleMoveDamage = 1; + + switch (multiplier) + { + case 0: //no effect + gBattleMoveFlags |= MOVESTATUS_NOTAFFECTED; + gBattleMoveFlags &= ~MOVESTATUS_NOTVERYEFFECTIVE; + gBattleMoveFlags &= ~MOVESTATUS_SUPEREFFECTIVE; + break; + case 5: //not very effecting + if (gBattleMoves[gCurrentMove].power && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) + { + if (gBattleMoveFlags & MOVESTATUS_SUPEREFFECTIVE) + gBattleMoveFlags &= ~MOVESTATUS_SUPEREFFECTIVE; + else + gBattleMoveFlags |= MOVESTATUS_NOTVERYEFFECTIVE; + } + break; + case 20: //super effective + if (gBattleMoves[gCurrentMove].power && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) + { + if (gBattleMoveFlags & MOVESTATUS_NOTVERYEFFECTIVE) + gBattleMoveFlags &= ~MOVESTATUS_NOTVERYEFFECTIVE; + else + gBattleMoveFlags |= MOVESTATUS_SUPEREFFECTIVE; + } + break; + } +} + +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) + { + gBattleMoveDamage = gBattleMoveDamage * 15; + gBattleMoveDamage = gBattleMoveDamage / 10; + } + + 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) + { + 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; + } + } + + 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; + + END: + gBattlescriptCurrInstr++; +} + +static void b_wonderguard_and_levitate(void) +{ + u8 flags = 0; + int i = 0; + u8 move_type; + + if (gCurrentMove == MOVE_STRUGGLE || !gBattleMoves[gCurrentMove].power) + return; + + 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) + { + RecordAbilitySetField6(ABILITY_LEVITATE, move_type); + return; + } + + while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) + { + if (gTypeEffectiveness[i] == TYPE_FORESIGHT) + { + if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) + break; + i += 3; + continue; + } + + if (gTypeEffectiveness[i] == move_type) + { + //check no effect + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1 && gTypeEffectiveness[i + 2] == 0) + { + gBattleMoveFlags |= MOVESTATUS_NOTAFFECTED; + gProtectStructs[gBankAttacker].notEffective = 1; + } + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 && + gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 && + gTypeEffectiveness[i + 2] == 0) + { + gBattleMoveFlags |= MOVESTATUS_NOTAFFECTED; + gProtectStructs[gBankAttacker].notEffective = 1; + } + + //check super effective + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1 && gTypeEffectiveness[i + 2] == 20) + flags |= 1; + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 + && gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 + && gTypeEffectiveness[i + 2] == 20) + flags |= 1; + + //check not very effective + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1 && gTypeEffectiveness[i + 2] == 5) + flags |= 2; + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 + && gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 + && gTypeEffectiveness[i + 2] == 5) + flags |= 2; + } + i += 3; + } + + if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2) + { + if (((flags & 2) || !(flags & 1)) && gBattleMoves[gCurrentMove].power) + { + RecordAbilitySetField6(ABILITY_WONDER_GUARD, 3); + } + } +} + +static void ModulateDmgByType2(u8 multiplier, u16 move, u8* flags) //a literal copy of the ModulateDmgbyType1 with different args... +{ + gBattleMoveDamage = gBattleMoveDamage * multiplier / 10; + if (gBattleMoveDamage == 0 && multiplier != 0) + gBattleMoveDamage = 1; + + switch (multiplier) + { + case 0: //no effect + *flags |= MOVESTATUS_NOTAFFECTED; + *flags &= ~MOVESTATUS_NOTVERYEFFECTIVE; + *flags &= ~MOVESTATUS_SUPEREFFECTIVE; + break; + case 5: //not very effecting + if (gBattleMoves[move].power && !(*flags & MOVESTATUS_NOEFFECT)) + { + if (*flags & MOVESTATUS_SUPEREFFECTIVE) + *flags &= ~MOVESTATUS_SUPEREFFECTIVE; + else + *flags |= MOVESTATUS_NOTVERYEFFECTIVE; + } + break; + case 20: //super effective + if (gBattleMoves[move].power && !(*flags & MOVESTATUS_NOEFFECT)) + { + if (*flags & MOVESTATUS_NOTVERYEFFECTIVE) + *flags &= ~MOVESTATUS_NOTVERYEFFECTIVE; + else + *flags |= MOVESTATUS_SUPEREFFECTIVE; + } + break; + } +} + +#ifdef NONMATCHING +u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def) +{ + int i = 0; + u8 flags = 0; + u8 move_type; + + if (move == MOVE_STRUGGLE) + return 0; + + move_type = gBattleMoves[move].type; + + //check stab + if (gBattleMons[bank_atk].type1 == move_type || gBattleMons[bank_atk].type2 == move_type) + { + gBattleMoveDamage = gBattleMoveDamage * 15; + gBattleMoveDamage = gBattleMoveDamage / 10; + } + + if (gBattleMons[bank_def].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND) + { + flags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED); + } + else + { + while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) + { + if (gTypeEffectiveness[i] == TYPE_FORESIGHT) + { + if (gBattleMons[bank_def].status2 & STATUS2_FORESIGHT) + break; + i += 3; + continue; + } + + else if (gTypeEffectiveness[i] == move_type) + { + //check type1 + if (gTypeEffectiveness[i + 1] == gBattleMons[bank_def].type1) + ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags); + //check type2 + if (gTypeEffectiveness[i + 1] == gBattleMons[bank_def].type2 && + gBattleMons[bank_def].type1 != gBattleMons[bank_def].type2) + ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags); + } + i += 3; + } + } + + if (gBattleMons[bank_def].ability == ABILITY_WONDER_GUARD && !(flags & MOVESTATUS_MISSED) && + AttacksThisTurn(bank_atk, move) == 2 && + (!(flags & MOVESTATUS_SUPEREFFECTIVE) || ((flags & (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)) == (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE))) && + gBattleMoves[move].power) + { + flags |= MOVESTATUS_MISSED; + } + 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) +{ + int i = 0; + u8 flags = 0; + u8 type1 = gBaseStats[species].type1, type2 = gBaseStats[species].type2, move_type; + + if (move == MOVE_STRUGGLE) + return 0; + + move_type = gBattleMoves[move].type; + + if (ability == ABILITY_LEVITATE && move_type == TYPE_GROUND) + flags = MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED; + else + { + while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) + { + if (gTypeEffectiveness[i] == TYPE_FORESIGHT) + { + i += 3; + continue; + } + if (gTypeEffectiveness[i] == move_type) + { + //check type1 + if (gTypeEffectiveness[i + 1] == type1) + ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags); + //check type2 + if (gTypeEffectiveness[i + 1] == type2 && gBattleMons[gBankTarget].type1 != type2) //gf you morons, you should check if (type1 != type2)... + ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags); + } + i += 3; + } + } + if (ability == ABILITY_WONDER_GUARD + && (!(flags & MOVESTATUS_SUPEREFFECTIVE) || ((flags & (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)) == (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE))) + && gBattleMoves[move].power) + flags |= MOVESTATUS_NOTAFFECTED; + return flags; +} + +// Multiplies the damage by a random factor between 85% to 100% inclusive +static inline void ApplyRandomDmgMultiplier(void) +{ + u16 rand = Random(); + u16 randPercent = 100 - (rand % 16); + + if (gBattleMoveDamage != 0) + { + gBattleMoveDamage *= randPercent; + gBattleMoveDamage /= 100; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + } +} + +void Unused_ApplyRandomDmgMultiplier(void) +{ + ApplyRandomDmgMultiplier(); +} + +static void atk07_dmg_adjustment(void) +{ + u8 hold_effect, quality; + ApplyRandomDmgMultiplier(); + if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) + { + hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; + } + else + { + hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); + quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); + } + + gStringBank = gBankTarget; + + if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality) + { + RecordItemBattle(gBankTarget, hold_effect); + gSpecialStatuses[gBankTarget].focusBanded = 1; + } + if (gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE) + goto END; + if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBankTarget].endured + && !gSpecialStatuses[gBankTarget].focusBanded) + goto END; + + if (gBattleMons[gBankTarget].hp > gBattleMoveDamage) + goto END; + + gBattleMoveDamage = gBattleMons[gBankTarget].hp - 1; + + if (gProtectStructs[gBankTarget].endured) + { + gBattleMoveFlags |= MOVESTATUS_ENDURED; + goto END; + } + if (gSpecialStatuses[gBankTarget].focusBanded) + { + gBattleMoveFlags |= MOVESTATUS_HUNGON; + gLastUsedItem = gBattleMons[gBankTarget].item; + } + + END: + gBattlescriptCurrInstr++; +} + +static void atk08_dmg_adjustment2(void) //literally the same as 0x7 except it doesn't check for false swipe move effect... +{ + u8 hold_effect, quality; + ApplyRandomDmgMultiplier(); + if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) + { + hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; + } + else + { + hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); + quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); + } + + gStringBank = gBankTarget; + + if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality) + { + RecordItemBattle(gBankTarget, hold_effect); + gSpecialStatuses[gBankTarget].focusBanded = 1; + } + if (gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE) + goto END; + if (!gProtectStructs[gBankTarget].endured + && !gSpecialStatuses[gBankTarget].focusBanded) + goto END; + + if (gBattleMons[gBankTarget].hp > gBattleMoveDamage) + goto END; + + gBattleMoveDamage = gBattleMons[gBankTarget].hp - 1; + + if (gProtectStructs[gBankTarget].endured) + { + gBattleMoveFlags |= MOVESTATUS_ENDURED; + goto END; + } + if (gSpecialStatuses[gBankTarget].focusBanded) + { + gBattleMoveFlags |= MOVESTATUS_HUNGON; + gLastUsedItem = gBattleMons[gBankTarget].item; + } + + END: + gBattlescriptCurrInstr++; +} + +static void atk09_attackanimation(void) +{ + if (gBattleExecBuffer) + return; + + if ((gHitMarker & HITMARKER_NO_ANIMATIONS) && (gCurrentMove != MOVE_TRANSFORM && gCurrentMove != MOVE_SUBSTITUTE)) + { + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_Pausex20; + BATTLE_STRUCT->animTurn += 1; + BATTLE_STRUCT->animTargetsHit += 1; + } + else + { + if ((gBattleMoves[gCurrentMove].target & TARGET_BOTH || gBattleMoves[gCurrentMove].target & TARGET_FOES_AND_ALLY || gBattleMoves[gCurrentMove].target & TARGET_DEPENDS) && BATTLE_STRUCT->animTargetsHit) + { + gBattlescriptCurrInstr++; + return; + } + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) + { + gActiveBank = gBankAttacker; + + EmitMoveAnimation(0, gCurrentMove, BATTLE_STRUCT->animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBankAttacker].friendship, &gDisableStructs[gBankAttacker]); + BATTLE_STRUCT->animTurn += 1; + BATTLE_STRUCT->animTargetsHit += 1; + MarkBufferBankForExecution(gBankAttacker); + gBattlescriptCurrInstr++; + } + else + { + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_Pausex20; + } + } +} + +static void atk0A_waitanimation(void) +{ + if (gBattleExecBuffer == 0) + gBattlescriptCurrInstr++; +} + +static void atk0B_healthbarupdate(void) +{ + if (gBattleExecBuffer) + return; + if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) + goto END; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + + if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) + { + PrepareStringBattle(0x80, gActiveBank); + goto END; + } + + EmitHealthBarUpdate(0, gBattleMoveDamage); + MarkBufferBankForExecution(gActiveBank); + + if (!GetBankSide(gActiveBank) && gBattleMoveDamage > 0) + gBattleResults.unk5_0 = 1; + + END: + gBattlescriptCurrInstr += 2; +} + +static void atk0C_datahpupdate(void) +{ + register u32 move_type asm("r6"); //no idea how to match it otherwise + u8 dynamic_move_type; + + if (gBattleExecBuffer) + return; + + dynamic_move_type = BATTLE_STRUCT->dynamicMoveType; + if (dynamic_move_type && !(dynamic_move_type & 0x40)) + { + move_type = 0x3F; + move_type &= dynamic_move_type; + } + else + { + move_type = gBattleMoves[gCurrentMove].type; + } + + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) + { + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) + { + if (gDisableStructs[gActiveBank].substituteHP >= gBattleMoveDamage) + { + if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0) + gSpecialStatuses[gActiveBank].moveturnLostHP = gBattleMoveDamage; + gDisableStructs[gActiveBank].substituteHP -= gBattleMoveDamage; + gHP_dealt = gBattleMoveDamage; + } + else + { + if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0) + gSpecialStatuses[gActiveBank].moveturnLostHP = gDisableStructs[gActiveBank].substituteHP; + gHP_dealt = gDisableStructs[gActiveBank].substituteHP; + gDisableStructs[gActiveBank].substituteHP = 0; + } + //check substitute fading + if (gDisableStructs[gActiveBank].substituteHP == 0) + { + gBattlescriptCurrInstr += 2; + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_SubstituteFade; + return; + } + } + else + { + gHitMarker &= ~(HITMARKER_IGNORE_SUBSTITUTE); + if (gBattleMoveDamage < 0) //hp goes up + { + gBattleMons[gActiveBank].hp -= gBattleMoveDamage; + if (gBattleMons[gActiveBank].hp > gBattleMons[gActiveBank].maxHP) + gBattleMons[gActiveBank].hp = gBattleMons[gActiveBank].maxHP; + + } + else //hp goes down + { + if (gHitMarker & HITMARKER_x20) + { + gHitMarker &= ~(HITMARKER_x20); + } + else + { + gTakenDmg[gActiveBank] += gBattleMoveDamage; + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) + gTakenDmgBanks[gActiveBank] = gBankAttacker; + else + gTakenDmgBanks[gActiveBank] = gBankTarget; + } + + if (gBattleMons[gActiveBank].hp > gBattleMoveDamage) + { + gBattleMons[gActiveBank].hp -= gBattleMoveDamage; + gHP_dealt = gBattleMoveDamage; + } + else + { + gHP_dealt = gBattleMons[gActiveBank].hp; + gBattleMons[gActiveBank].hp = 0; + } + + if (!gSpecialStatuses[gActiveBank].moveturnLostHP && !(gHitMarker & HITMARKER_x100000)) + gSpecialStatuses[gActiveBank].moveturnLostHP = gHP_dealt; + + if (move_type <= 8 && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT) + { + gProtectStructs[gActiveBank].physicalDmg = gHP_dealt; + gSpecialStatuses[gActiveBank].moveturnLostHP_physical = gHP_dealt; + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) + { + gProtectStructs[gActiveBank].physicalBank = gBankAttacker; + gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankAttacker; + } + else + { + gProtectStructs[gActiveBank].physicalBank = gBankTarget; + gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankTarget; + } + } + else if (move_type > 8 && !(gHitMarker & HITMARKER_x100000)) + { + gProtectStructs[gActiveBank].specialDmg = gHP_dealt; + gSpecialStatuses[gActiveBank].moveturnLostHP_special = gHP_dealt; + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) + { + gProtectStructs[gActiveBank].specialBank = gBankAttacker; + gSpecialStatuses[gActiveBank].moveturnSpecialBank = gBankAttacker; + } + else + { + gProtectStructs[gActiveBank].specialBank = gBankTarget; + gSpecialStatuses[gActiveBank].moveturnSpecialBank = gBankTarget; + } + } + } + gHitMarker &= ~(HITMARKER_x100000); + EmitSetAttributes(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp); + MarkBufferBankForExecution(gActiveBank); + } + } + else + { + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0) + gSpecialStatuses[gActiveBank].moveturnLostHP = 0xFFFF; + } + gBattlescriptCurrInstr += 2; +} + +static void atk0D_critmessage(void) +{ + if (gBattleExecBuffer == 0) + { + if (gCritMultiplier == 2 && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) + { + PrepareStringBattle(0xD9, gBankAttacker); + gBattleCommunication[MSG_DISPLAY] = 1; + } + gBattlescriptCurrInstr++; + } +} + +static void atk0E_effectiveness_sound(void) +{ + if (gBattleExecBuffer) + return; + gActiveBank = gBankTarget; + if (!(gBattleMoveFlags & MOVESTATUS_MISSED)) + { + u8 flag = ~MOVESTATUS_MISSED; + switch (gBattleMoveFlags & flag) + { + case MOVESTATUS_SUPEREFFECTIVE: + EmitEffectivenessSound(0, 14); + MarkBufferBankForExecution(gActiveBank); + break; + case MOVESTATUS_NOTVERYEFFECTIVE: + EmitEffectivenessSound(0, 12); + MarkBufferBankForExecution(gActiveBank); + break; + case MOVESTATUS_NOTAFFECTED: + case MOVESTATUS_FAILED: + break; + case MOVESTATUS_ENDURED: + case MOVESTATUS_ONEHITKO: + case MOVESTATUS_HUNGON: + default: + if (gBattleMoveFlags & MOVESTATUS_SUPEREFFECTIVE) + { + EmitEffectivenessSound(0, 14); + MarkBufferBankForExecution(gActiveBank); + } + else if (gBattleMoveFlags & MOVESTATUS_NOTVERYEFFECTIVE) + { + EmitEffectivenessSound(0, 12); + MarkBufferBankForExecution(gActiveBank); + } + else if (!(gBattleMoveFlags & (MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED))) + { + EmitEffectivenessSound(0, 13); + MarkBufferBankForExecution(gActiveBank); + } + break; + } + } + gBattlescriptCurrInstr++; +} + +static void atk0F_resultmessage(void) +{ + u16 stringID = 0; + + if (gBattleExecBuffer) + return; + + if (gBattleMoveFlags & MOVESTATUS_MISSED && (!(gBattleMoveFlags & MOVESTATUS_NOTAFFECTED) || gBattleCommunication[6] > 2)) + { + stringID = gMissStrings[gBattleCommunication[6]]; + gBattleCommunication[MSG_DISPLAY] = 1; + } + else + { + gBattleCommunication[MSG_DISPLAY] = 1; + switch (gBattleMoveFlags & 0xFE) + { + case MOVESTATUS_SUPEREFFECTIVE: + stringID = 0xDE; + break; + case MOVESTATUS_NOTVERYEFFECTIVE: + stringID = 0xDD; + break; + case MOVESTATUS_ONEHITKO: + stringID = 0xDA; + break; + case MOVESTATUS_ENDURED: + stringID = 0x99; + break; + case MOVESTATUS_FAILED: + goto FAILED; + case MOVESTATUS_NOTAFFECTED: + goto NOTAFFECTED; + case MOVESTATUS_HUNGON: + gLastUsedItem = gBattleMons[gBankTarget].item; + gStringBank = gBankTarget; + gBattleMoveFlags &= ~(MOVESTATUS_ENDURED | MOVESTATUS_HUNGON); + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_HangedOnMsg; + return; + default: + if (gBattleMoveFlags & MOVESTATUS_NOTAFFECTED) + NOTAFFECTED: + stringID = 0x1B; + else if (gBattleMoveFlags & MOVESTATUS_ONEHITKO) + { + gBattleMoveFlags &= ~(MOVESTATUS_ONEHITKO); + gBattleMoveFlags &= ~(MOVESTATUS_SUPEREFFECTIVE); + gBattleMoveFlags &= ~(MOVESTATUS_NOTVERYEFFECTIVE); + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_OneHitKOMsg; + return; + } + else if (gBattleMoveFlags & MOVESTATUS_ENDURED) + { + gBattleMoveFlags &= ~(MOVESTATUS_ENDURED | MOVESTATUS_HUNGON); + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_EnduredMsg; + return; + } + else if (gBattleMoveFlags & MOVESTATUS_HUNGON) + { + gLastUsedItem = gBattleMons[gBankTarget].item; + gStringBank = gBankTarget; + gBattleMoveFlags &= ~(MOVESTATUS_ENDURED | MOVESTATUS_HUNGON); + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_HangedOnMsg; + return; + } + else if (gBattleMoveFlags & MOVESTATUS_FAILED) + FAILED: + stringID = 0xE5; + else + gBattleCommunication[MSG_DISPLAY] = 0; + } + } + + if (stringID) + { + register u16 dummy asm("r0") = stringID; //Can't match it otherwise + PrepareStringBattle(dummy, gBankAttacker); + } + gBattlescriptCurrInstr++; +} + +static void atk10_printstring(void) +{ + if (gBattleExecBuffer == 0) + { + u16 var = BS2ScriptRead16(gBattlescriptCurrInstr + 1); + PrepareStringBattle(var, gBankAttacker); + gBattlescriptCurrInstr += 3; + gBattleCommunication[MSG_DISPLAY] = 1; + } +} + +static void atk11_printstring_playeronly(void) +{ + gActiveBank = gBankAttacker; + EmitPrintStringPlayerOnly(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1)); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 3; + gBattleCommunication[MSG_DISPLAY] = 1; +} + +static void atk12_waitmessage(void) +{ + if (gBattleExecBuffer == 0) + { + if (!gBattleCommunication[MSG_DISPLAY]) + { + gBattlescriptCurrInstr += 3; + } + else + { + u16 to_wait = BS2ScriptRead16(gBattlescriptCurrInstr + 1); + if (++gPauseCounterBattle >= to_wait) + { + gPauseCounterBattle = 0; + gBattlescriptCurrInstr += 3; + gBattleCommunication[MSG_DISPLAY] = 0; + } + } + } +} + +static void atk13_printfromtable(void) +{ + if (gBattleExecBuffer == 0) + { + u16 *ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + ptr += gBattleCommunication[MULTISTRING_CHOOSER]; + PrepareStringBattle(*(u16*)ptr, gBankAttacker); + gBattlescriptCurrInstr += 5; + gBattleCommunication[MSG_DISPLAY] = 1; + } +} + +static void atk14_printfromtable_playeronly(void) +{ + if (gBattleExecBuffer == 0) + { + u16 *ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + ptr += gBattleCommunication[MULTISTRING_CHOOSER]; + gActiveBank = gBankAttacker; + EmitPrintStringPlayerOnly(0, *(u16*)ptr); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 5; + gBattleCommunication[MSG_DISPLAY] = 1; + } +} + +u8 BankGetTurnOrder(u8 bank) +{ + int i; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gTurnOrder[i] == bank) + break; + } + return i; +} + +//Someone please decompile this monstrosity below... +#ifdef NONMATCHING +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 + bool32 NoSunCanFreeze = 1; + + if (gBattleCommunication[MOVE_EFFECT_BYTE] & EffectAffectsUser) + { + gEffectBank = gBankAttacker; //bank that effects get applied on + gBattleCommunication[MOVE_EFFECT_BYTE] &= ~(EffectAffectsUser); + AffectsUser = EffectAffectsUser; + BATTLE_STRUCT->scriptingActive = gBankTarget; //theoretically the attacker + } + else + { + gEffectBank = gBankTarget; + BATTLE_STRUCT->scriptingActive = gBankAttacker; + } + + if (gBattleMons[gEffectBank].ability_id == 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) && + !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) + {gBattlescriptCurrInstr++; return;} + + if (gBattleMons[gEffectBank].status2 & STATUS2_SUBSTITUTE && AffectsUser != EffectAffectsUser) + {gBattlescriptCurrInstr++; return;} + + if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) //status change + { + switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) + { + case STATUS_SLEEP: + //check active uproar + if (gBattleMons[gEffectBank].ability_id != ABILITY_SOUNDPROOF) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks && !(gBattleMons[gActiveBank].status2 & STATUS2_UPROAR); gActiveBank++) {} + } + else + gActiveBank = gNoOfAllBanks; + if (gBattleMons[gEffectBank].status) {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;} + + b_cancel_multi_turn_move_maybe(gEffectBank); + StatusChanged = 1; + break; + case STATUS_POISON: + if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80)) + { + gLastUsedAbility = ABILITY_IMMUNITY; + RecordAbility(gEffectBank, ABILITY_IMMUNITY); + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + //_0801E664: + gBattlescriptCurrInstr = BS_PSN_PREVENTION; + if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + { + gBattleCommunication.multistring_chooser = 1; + gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + return; + } + else + {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; + 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;} + StatusChanged = 1; + break; + case STATUS_BURN: + if (gBattleMons[gEffectBank].ability_id == ABILITY_WATER_VEIL && (primary == 1 || certain == 0x80)) + { + gLastUsedAbility = ABILITY_WATER_VEIL; + RecordAbility(gEffectBank, ABILITY_WATER_VEIL); + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + //_0801E664: + gBattlescriptCurrInstr = BS_BRN_PREVENTION; + if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + { + gBattleCommunication.multistring_chooser = 1; + gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + return; + } + else + {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; + 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].status1 == 0) {break;} + StatusChanged = 1; + break; + case STATUS_FREEZE: + 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 (NoSunCanFreeze == 0) {break;} + if (gBattleMons[gEffectBank].ability_id == ABILITY_MAGMA_ARMOR) {break;} + + b_cancel_multi_turn_move_maybe(gEffectBank); + StatusChanged = 1; + break; + case STATUS_PARALYSIS: + if (gBattleMons[gEffectBank].ability_id == ABILITY_LIMBER) + { + if ((primary == 1 || certain == 0x80)) + { + gLastUsedAbility = ABILITY_LIMBER; + RecordAbility(gEffectBank, ABILITY_LIMBER); + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + //_0801E664: + gBattlescriptCurrInstr = BS_PRLZ_PREVENTION; + if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + { + gBattleCommunication.multistring_chooser = 1; + gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + return; + } + else + {gBattleCommunication.multistring_chooser = 0; return;} + } + else {break;} + } + if (gBattleMons[gEffectBank].status) {break;} + StatusChanged = 1; + break; + case STATUS_TOXIC_POISON: + if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80)) + { + gLastUsedAbility = ABILITY_IMMUNITY; + RecordAbility(gEffectBank, ABILITY_IMMUNITY); + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + //_0801E664: + gBattlescriptCurrInstr = BS_PSN_PREVENTION; + if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + { + gBattleCommunication.multistring_chooser = 1; + gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + return; + } + else + {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; + return; + } + if (gBattleMons[gEffectBank].status) {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 + StatusChanged = 1; + break; + } + else + gBattleMoveFlags |= MOVESTATUS_NOTAFFECTED; + break; + } + if (StatusChanged == 1) + { + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + if (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP) + gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2); + else + gBattleMons[gEffectBank].status1 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr = MoveEffectBS_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); + if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) + { + gBattleCommunication.multistring_chooser = 1; + gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); + } + else + 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]; + gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT; + } + return; + } + else if (StatusChanged == 0) + {gBattlescriptCurrInstr++; return;} + } + else + { + if (gBattleMons[gEffectBank].status2 & gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) + { + gBattlescriptCurrInstr++; + return; + } + switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) + { + case 7: //confusion + if (gBattleMons[gEffectBank].ability_id == 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]]; + break; + case 8: //flinch + if (gBattleMons[gEffectBank].ability_id == ABILITY_INNER_FOCUS) + { + if (primary == 1 || certain == 0x80) + { + gLastUsedAbility = ABILITY_INNER_FOCUS; + RecordAbility(gEffectBank, ABILITY_INNER_FOCUS); + gBattlescriptCurrInstr = BS_FLINCH_PREVENTION; + return; + } + else + {gBattlescriptCurrInstr++; return;} + } + else + { + if (BankGetTurnOrder(gEffectBank) > gCurrentMoveTurn) + gBattleMons[gEffectBank].status2 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattlescriptCurrInstr++; return; + } + break; + case 10: //uproar + if (gBattleMons[gEffectBank].status2 & STATUS2_UPROAR) + {gBattlescriptCurrInstr++; return;} + gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; + gLockedMove[gEffectBank] = gCurrentMove; + gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 4; + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + break; + case 11: //pay day + if (!(get_bank_identity(gEffectBank) & 1)) + { + u16 PayDay = gPaydayMoney; + gPaydayMoney += (gBattleMons[gEffectBank].level * 5); + if (PayDay > gPaydayMoney) + gPaydayMoney = 0xFFFF; + } + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + break; + case 9: //tri attack + if (gBattleMons[gEffectBank].status) + {gBattlescriptCurrInstr++; return;} + gBattleCommunication[MOVE_EFFECT_BYTE] = Random() % 3 + 3; + SetMoveEffect(0, 0); + break; + case 12: //charging move + gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; + gLockedMove[gEffectBank] = gCurrentMove; + gProtectStructs[gEffectBank].flag1_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; + 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++; + break; + case 14: //recoil + gBattleMoveDamage = (gHP_dealt) / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + break; + case 15 ... 21: //stat + 1 + if (ChangeStats(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; + } + break; + case 22 ... 28: //stat - 1 + if (ChangeStats(~(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; + } + break; + case 39 ... 45: //stat + 2 + if (ChangeStats(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; + } + break; + case 46 ... 52: //stat - 2 + if (ChangeStats(~(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; + } + break; + case 29: //recharge + gBattleMons[gEffectBank].status2 |= STATUS2_RECHARGE; + gDisableStructs[gEffectBank].recharge_counter = 2; + gLockedMove[gEffectBank] = gCurrentMove; + gBattlescriptCurrInstr++; + break; + case 30: //rage + gBattleMons[gBankAttacker].status2 |= STATUS2_RAGE; + gBattlescriptCurrInstr++; + 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) + {gBattlescriptCurrInstr++; return;} + if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400 && (gWishFutureKnock.KnockedOff[side] & gBitTable[gBattlePartyID[gBankAttacker]])) + {gBattlescriptCurrInstr++; return;} + if (gBattleMons[gBankTarget].held_item && gBattleMons[gBankTarget].ability_id == ABILITY_STICKY_HOLD) + { + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BS_NO_ITEMSTEAL; + gLastUsedAbility = gBattleMons[gBankTarget].ability_id; + RecordAbility(gBankTarget, gLastUsedAbility); + return; + } + if (gBattleMons[gBankAttacker].held_item) + {gBattlescriptCurrInstr++; return;} + if (gBattleMons[gBankTarget].held_item == ITEM_ENIGMA_BERRY) + {gBattlescriptCurrInstr++; return;} + if (gBattleMons[gBankTarget].held_item == 0) + {gBattlescriptCurrInstr++; return;} + + CHANGED_HELDITEMS[gBankAttacker] = gLastUsedItem = gBattleMons[gBankTarget].held_item; + gBattleMons[gBankTarget].held_item = 0; + + gActiveBank = gBankAttacker; + bb2_setattributes_in_battle(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem); + mark_buffer_bank_for_execution(gBankAttacker); + + gActiveBank = gBankTarget; + bb2_setattributes_in_battle(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBankTarget].held_item); + mark_buffer_bank_for_execution(gBankTarget); + + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_ITEMSTEAL; + + STORE_CHOICEMOVE(gBankTarget, 0); + } + break; + case 32: //escape prevention + gBattleMons[gBankTarget].status2 |= STATUS2_RECHARGE; + gDisableStructs[gBankTarget].BankPreventingEscape = gBankAttacker; + gBattlescriptCurrInstr++; + break; + case 33: //nightmare + gBattleMons[gBankTarget].status2 |= STATUS2_NIGHTMARE; + gBattlescriptCurrInstr++; + break; + case 34: + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = gUnknown_081D9224; + return; + case 35: //break free rapidspin + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_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); + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_PARALYSISHEALED; + } + else + {gBattlescriptCurrInstr++; return;} + break; + case 37: // + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = gUnknown_081D93FA; + return; + case 38: //recoil plus paralysis + gBattleMoveDamage = gHP_dealt / 3; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; + break; + case 53: //thrash + if (!(gBattleMons[gEffectBank].status2 & STATUS2_LOCK_CONFUSE)) + { + gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; + gLockedMove[gEffectBank] = gCurrentMove; + gBattleMons[gEffectBank].status2 |= (((Random() & 1) + 2) << 0xA); + } + else + {gBattlescriptCurrInstr++; return;} + break; + case 54: //knock off + if (gBattleMons[gEffectBank].ability_id == ABILITY_STICKY_HOLD) + { + if (gBattleMons[gEffectBank].held_item == 0) + {gBattlescriptCurrInstr++; return;} + gLastUsedAbility = ABILITY_STICKY_HOLD; + gBattlescriptCurrInstr = BS_STICKYHOLD_ACTIVATES; + RecordAbility(gEffectBank, ABILITY_STICKY_HOLD); + return; + } + if (gBattleMons[gEffectBank].held_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]]; + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BS_KNOCKEDOFF; + + STORE_CHOICEMOVE(gEffectBank, 0); + } + break; + case 59: //overheat I guess, dont remember + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = gUnknown_081D94B0; + return; + } + } +} +#else +__attribute__((naked)) +void SetMoveEffect(bool8 primary, u8 certainArg) +{ + 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\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + lsls r1, 24\n\ + lsrs r5, r1, 24\n\ + movs r0, 0\n\ + mov r10, r0\n\ + movs r6, 0\n\ + movs r1, 0x1\n\ + str r1, [sp, 0x4]\n\ + ldr r1, _0801E430 @ =gBattleCommunication\n\ + ldrb r3, [r1, 0x3]\n\ + movs r0, 0x40\n\ + ands r0, r3\n\ + adds r7, r1, 0\n\ + cmp r0, 0\n\ + beq _0801E444\n\ + ldr r2, _0801E434 @ =gEffectBank\n\ + ldr r0, _0801E438 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + strb r0, [r2]\n\ + movs r0, 0xBF\n\ + ands r0, r3\n\ + strb r0, [r7, 0x3]\n\ + movs r6, 0x40\n\ + ldr r0, _0801E43C @ =0x02000000\n\ + ldr r1, _0801E440 @ =gBankTarget\n\ + b _0801E450\n\ + .align 2, 0\n\ +_0801E430: .4byte gBattleCommunication\n\ +_0801E434: .4byte gEffectBank\n\ +_0801E438: .4byte gBankAttacker\n\ +_0801E43C: .4byte 0x02000000\n\ +_0801E440: .4byte gBankTarget\n\ +_0801E444:\n\ + ldr r2, _0801E538 @ =gEffectBank\n\ + ldr r0, _0801E53C @ =gBankTarget\n\ + ldrb r0, [r0]\n\ + strb r0, [r2]\n\ + ldr r0, _0801E540 @ =0x02000000\n\ + ldr r1, _0801E544 @ =gBankAttacker\n\ +_0801E450:\n\ + ldrb r1, [r1]\n\ + ldr r3, _0801E548 @ =0x00016003\n\ + adds r0, r3\n\ + strb r1, [r0]\n\ + mov r8, r2\n\ + ldr r2, _0801E54C @ =gBattleMons\n\ + mov r0, r8\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r2\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x13\n\ + bne _0801E48A\n\ + ldr r0, _0801E550 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801E48A\n\ + cmp r4, 0\n\ + bne _0801E48A\n\ + ldrb r0, [r7, 0x3]\n\ + cmp r0, 0x9\n\ + bhi _0801E48A\n\ + bl _0801F5DC\n\ +_0801E48A:\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + bl GetBankIdentity\n\ + ldr r2, _0801E554 @ =gSideAffecting\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + lsls r1, 1\n\ + adds r1, r2\n\ + ldrh r1, [r1]\n\ + movs r0, 0x20\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E4C4\n\ + ldr r0, _0801E550 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801E4C4\n\ + cmp r4, 0\n\ + bne _0801E4C4\n\ + ldr r0, _0801E558 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + cmp r0, 0x7\n\ + bhi _0801E4C4\n\ + bl _0801F5DC\n\ +_0801E4C4:\n\ + ldr r3, _0801E54C @ =gBattleMons\n\ + ldr r2, _0801E538 @ =gEffectBank\n\ + ldrb r1, [r2]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r3\n\ + ldrh r0, [r0, 0x28]\n\ + mov r8, r2\n\ + mov r9, r3\n\ + cmp r0, 0\n\ + bne _0801E4EA\n\ + ldr r0, _0801E558 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + cmp r0, 0xB\n\ + beq _0801E4EA\n\ + cmp r0, 0x1F\n\ + beq _0801E4EA\n\ + bl _0801F5DC\n\ +_0801E4EA:\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + mov r1, r9\n\ + adds r1, 0x50\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 17\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E50C\n\ + cmp r6, 0x40\n\ + beq _0801E50C\n\ + bl _0801F5DC\n\ +_0801E50C:\n\ + ldr r0, _0801E558 @ =gBattleCommunication\n\ + ldrb r1, [r0, 0x3]\n\ + adds r7, r0, 0\n\ + cmp r1, 0x6\n\ + bls _0801E518\n\ + b _0801EB4A\n\ +_0801E518:\n\ + ldr r1, _0801E55C @ =gStatusFlagsForMoveEffects\n\ + ldrb r0, [r7, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + cmp r0, 0x10\n\ + bne _0801E528\n\ + b _0801E714\n\ +_0801E528:\n\ + cmp r0, 0x10\n\ + bhi _0801E560\n\ + cmp r0, 0x7\n\ + beq _0801E57A\n\ + cmp r0, 0x8\n\ + bne _0801E536\n\ + b _0801E630\n\ +_0801E536:\n\ + b _0801EA14\n\ + .align 2, 0\n\ +_0801E538: .4byte gEffectBank\n\ +_0801E53C: .4byte gBankTarget\n\ +_0801E540: .4byte 0x02000000\n\ +_0801E544: .4byte gBankAttacker\n\ +_0801E548: .4byte 0x00016003\n\ +_0801E54C: .4byte gBattleMons\n\ +_0801E550: .4byte gHitMarker\n\ +_0801E554: .4byte gSideAffecting\n\ +_0801E558: .4byte gBattleCommunication\n\ +_0801E55C: .4byte gStatusFlagsForMoveEffects\n\ +_0801E560:\n\ + cmp r0, 0x40\n\ + bne _0801E566\n\ + b _0801E888\n\ +_0801E566:\n\ + cmp r0, 0x40\n\ + bhi _0801E572\n\ + cmp r0, 0x20\n\ + bne _0801E570\n\ + b _0801E7EA\n\ +_0801E570:\n\ + b _0801EA14\n\ +_0801E572:\n\ + cmp r0, 0x80\n\ + bne _0801E578\n\ + b _0801E8E4\n\ +_0801E578:\n\ + b _0801EA14\n\ +_0801E57A:\n\ + mov r3, r8\n\ + ldrb r1, [r3]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + add r0, r9\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2B\n\ + beq _0801E5DC\n\ + ldr r0, _0801E5D4 @ =gActiveBank\n\ + movs r1, 0\n\ + strb r1, [r0]\n\ + ldr r1, _0801E5D8 @ =gNoOfAllBanks\n\ + ldrb r3, [r1]\n\ + adds r7, r0, 0\n\ + mov r12, r1\n\ + cmp r3, 0\n\ + beq _0801E5E8\n\ + mov r4, r9\n\ + ldr r0, [r4, 0x50]\n\ + movs r1, 0x70\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801E5E8\n\ + adds r1, r7, 0\n\ + mov r6, r9\n\ + adds r6, 0x50\n\ + movs r5, 0x58\n\ + movs r4, 0x70\n\ +_0801E5B4:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, r3\n\ + bcs _0801E5E8\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + ands r0, r4\n\ + cmp r0, 0\n\ + beq _0801E5B4\n\ + b _0801E5E8\n\ + .align 2, 0\n\ +_0801E5D4: .4byte gActiveBank\n\ +_0801E5D8: .4byte gNoOfAllBanks\n\ +_0801E5DC:\n\ + ldr r0, _0801E628 @ =gActiveBank\n\ + ldr r2, _0801E62C @ =gNoOfAllBanks\n\ + ldrb r1, [r2]\n\ + strb r1, [r0]\n\ + adds r7, r0, 0\n\ + mov r12, r2\n\ +_0801E5E8:\n\ + mov r0, r8\n\ + ldrb r2, [r0]\n\ + movs r0, 0x58\n\ + adds r1, r2, 0\n\ + muls r1, r0\n\ + mov r0, r9\n\ + adds r0, 0x4C\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _0801E600\n\ + b _0801EA14\n\ +_0801E600:\n\ + ldrb r0, [r7]\n\ + mov r3, r12\n\ + ldrb r3, [r3]\n\ + cmp r0, r3\n\ + beq _0801E60C\n\ + b _0801EA14\n\ +_0801E60C:\n\ + mov r4, r9\n\ + adds r0, r1, r4\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x48\n\ + bne _0801E61A\n\ + b _0801EA14\n\ +_0801E61A:\n\ + cmp r0, 0xF\n\ + bne _0801E620\n\ + b _0801EA14\n\ +_0801E620:\n\ + adds r0, r2, 0\n\ + bl CancelMultiTurnMoves\n\ + b _0801EA04\n\ + .align 2, 0\n\ +_0801E628: .4byte gActiveBank\n\ +_0801E62C: .4byte gNoOfAllBanks\n\ +_0801E630:\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + add r0, r9\n\ + adds r0, 0x20\n\ + ldrb r1, [r0]\n\ + cmp r1, 0x11\n\ + bne _0801E688\n\ + cmp r4, 0x1\n\ + beq _0801E64A\n\ + cmp r5, 0x80\n\ + bne _0801E688\n\ +_0801E64A:\n\ + ldr r0, _0801E678 @ =gLastUsedAbility\n\ + strb r1, [r0]\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r1, 0x11\n\ + bl RecordAbilityBattle\n\ + ldr r4, _0801E67C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801E680 @ =BattleScript_PSNPrevention\n\ +_0801E664:\n\ + str r0, [r4]\n\ + ldr r2, _0801E684 @ =gHitMarker\n\ + ldr r1, [r2]\n\ + movs r0, 0x80\n\ + lsls r0, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E676\n\ + b _0801E928\n\ +_0801E676:\n\ + b _0801E94C\n\ + .align 2, 0\n\ +_0801E678: .4byte gLastUsedAbility\n\ +_0801E67C: .4byte gBattlescriptCurrInstr\n\ +_0801E680: .4byte BattleScript_PSNPrevention\n\ +_0801E684: .4byte gHitMarker\n\ +_0801E688:\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + movs r1, 0x58\n\ + muls r0, r1\n\ + add r0, r9\n\ + adds r1, r0, 0\n\ + adds r1, 0x21\n\ + ldrb r1, [r1]\n\ + cmp r1, 0x3\n\ + beq _0801E6AC\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3\n\ + beq _0801E6AC\n\ + cmp r1, 0x8\n\ + beq _0801E6AC\n\ + cmp r0, 0x8\n\ + bne _0801E6C6\n\ +_0801E6AC:\n\ + ldr r0, _0801E710 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E6C6\n\ + cmp r4, 0x1\n\ + bne _0801E6C0\n\ + b _0801E98C\n\ +_0801E6C0:\n\ + cmp r5, 0x80\n\ + bne _0801E6C6\n\ + b _0801E98C\n\ +_0801E6C6:\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + movs r0, 0x58\n\ + muls r1, r0\n\ + mov r4, r9\n\ + adds r3, r1, r4\n\ + adds r0, r3, 0\n\ + adds r0, 0x21\n\ + ldrb r4, [r0]\n\ + cmp r4, 0x3\n\ + bne _0801E6DE\n\ + b _0801EA14\n\ +_0801E6DE:\n\ + adds r0, 0x1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3\n\ + bne _0801E6E8\n\ + b _0801EA14\n\ +_0801E6E8:\n\ + cmp r4, 0x8\n\ + bne _0801E6EE\n\ + b _0801EA14\n\ +_0801E6EE:\n\ + cmp r0, 0x8\n\ + bne _0801E6F4\n\ + b _0801EA14\n\ +_0801E6F4:\n\ + mov r0, r9\n\ + adds r0, 0x4C\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _0801E702\n\ + b _0801EA14\n\ +_0801E702:\n\ + adds r0, r3, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x11\n\ + bne _0801E70E\n\ + b _0801EA14\n\ +_0801E70E:\n\ + b _0801EA04\n\ + .align 2, 0\n\ +_0801E710: .4byte gHitMarker\n\ +_0801E714:\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + add r0, r9\n\ + adds r0, 0x20\n\ + ldrb r1, [r0]\n\ + cmp r1, 0x29\n\ + bne _0801E758\n\ + cmp r4, 0x1\n\ + beq _0801E72E\n\ + cmp r5, 0x80\n\ + bne _0801E758\n\ +_0801E72E:\n\ + ldr r0, _0801E74C @ =gLastUsedAbility\n\ + strb r1, [r0]\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r1, 0x29\n\ + bl RecordAbilityBattle\n\ + ldr r4, _0801E750 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801E754 @ =BattleScript_BRNPrevention\n\ + b _0801E664\n\ + .align 2, 0\n\ +_0801E74C: .4byte gLastUsedAbility\n\ +_0801E750: .4byte gBattlescriptCurrInstr\n\ +_0801E754: .4byte BattleScript_BRNPrevention\n\ +_0801E758:\n\ + mov r0, r8\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + mov r2, r9\n\ + adds r1, r0, r2\n\ + adds r0, r1, 0\n\ + adds r0, 0x21\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xA\n\ + beq _0801E778\n\ + adds r0, r1, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xA\n\ + bne _0801E7A8\n\ +_0801E778:\n\ + ldr r0, _0801E79C @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E7A8\n\ + cmp r4, 0x1\n\ + beq _0801E78E\n\ + cmp r5, 0x80\n\ + bne _0801E7A8\n\ +_0801E78E:\n\ + ldr r4, _0801E7A0 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801E7A4 @ =BattleScript_BRNPrevention\n\ + b _0801E998\n\ + .align 2, 0\n\ +_0801E79C: .4byte gHitMarker\n\ +_0801E7A0: .4byte gBattlescriptCurrInstr\n\ +_0801E7A4: .4byte BattleScript_BRNPrevention\n\ +_0801E7A8:\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r1, 0x58\n\ + adds r2, r0, 0\n\ + muls r2, r1\n\ + mov r4, r9\n\ + adds r1, r2, r4\n\ + adds r0, r1, 0\n\ + adds r0, 0x21\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xA\n\ + bne _0801E7C2\n\ + b _0801EA14\n\ +_0801E7C2:\n\ + adds r0, r1, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xA\n\ + bne _0801E7CE\n\ + b _0801EA14\n\ +_0801E7CE:\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x29\n\ + bne _0801E7DA\n\ + b _0801EA14\n\ +_0801E7DA:\n\ + mov r0, r9\n\ + adds r0, 0x4C\n\ + adds r0, r2, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _0801E7E8\n\ + b _0801EA14\n\ +_0801E7E8:\n\ + b _0801EA04\n\ +_0801E7EA:\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\ + bne _0801E826\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\ + bne _0801E826\n\ + ldr r0, _0801E87C @ =gBattleWeather\n\ + ldrh r1, [r0]\n\ + movs r0, 0x60\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E826\n\ + movs r1, 0\n\ + str r1, [sp, 0x4]\n\ +_0801E826:\n\ + ldr r4, _0801E880 @ =gBattleMons\n\ + ldr r0, _0801E884 @ =gEffectBank\n\ + ldrb r3, [r0]\n\ + movs r0, 0x58\n\ + adds r2, r3, 0\n\ + muls r2, r0\n\ + adds r1, r2, r4\n\ + adds r0, r1, 0\n\ + adds r0, 0x21\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xF\n\ + bne _0801E840\n\ + b _0801EA14\n\ +_0801E840:\n\ + adds r0, r1, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xF\n\ + bne _0801E84C\n\ + b _0801EA14\n\ +_0801E84C:\n\ + adds r0, r4, 0\n\ + adds r0, 0x4C\n\ + adds r0, r2, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _0801E85A\n\ + b _0801EA14\n\ +_0801E85A:\n\ + ldr r2, [sp, 0x4]\n\ + cmp r2, 0\n\ + bne _0801E862\n\ + b _0801EA14\n\ +_0801E862:\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x28\n\ + bne _0801E86E\n\ + b _0801EA14\n\ +_0801E86E:\n\ + adds r0, r3, 0\n\ + bl CancelMultiTurnMoves\n\ + movs r3, 0x1\n\ + mov r10, r3\n\ + b _0801EA14\n\ + .align 2, 0\n\ +_0801E87C: .4byte gBattleWeather\n\ +_0801E880: .4byte gBattleMons\n\ +_0801E884: .4byte gEffectBank\n\ +_0801E888:\n\ + mov r0, r8\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r1, r0\n\ + mov r2, r9\n\ + adds r0, r1, r2\n\ + adds r0, 0x20\n\ + ldrb r2, [r0]\n\ + cmp r2, 0x7\n\ + bne _0801E8D0\n\ + cmp r4, 0x1\n\ + beq _0801E8A6\n\ + cmp r5, 0x80\n\ + beq _0801E8A6\n\ + b _0801EA14\n\ +_0801E8A6:\n\ + ldr r0, _0801E8C4 @ =gLastUsedAbility\n\ + strb r2, [r0]\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r1, 0x7\n\ + bl RecordAbilityBattle\n\ + ldr r4, _0801E8C8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801E8CC @ =BattleScript_PRLZPrevention\n\ + b _0801E664\n\ + .align 2, 0\n\ +_0801E8C4: .4byte gLastUsedAbility\n\ +_0801E8C8: .4byte gBattlescriptCurrInstr\n\ +_0801E8CC: .4byte BattleScript_PRLZPrevention\n\ +_0801E8D0:\n\ + mov r0, r9\n\ + adds r0, 0x4C\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _0801E8DE\n\ + b _0801EA14\n\ +_0801E8DE:\n\ + movs r4, 0x1\n\ + mov r10, r4\n\ + b _0801EA14\n\ +_0801E8E4:\n\ + mov r0, r8\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + add r0, r9\n\ + adds r0, 0x20\n\ + ldrb r1, [r0]\n\ + cmp r1, 0x11\n\ + bne _0801E952\n\ + cmp r4, 0x1\n\ + beq _0801E8FE\n\ + cmp r5, 0x80\n\ + bne _0801E952\n\ +_0801E8FE:\n\ + ldr r0, _0801E938 @ =gLastUsedAbility\n\ + strb r1, [r0]\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + movs r1, 0x11\n\ + bl RecordAbilityBattle\n\ + ldr r4, _0801E93C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801E940 @ =BattleScript_PSNPrevention\n\ + str r0, [r4]\n\ + ldr r2, _0801E944 @ =gHitMarker\n\ + ldr r1, [r2]\n\ + movs r0, 0x80\n\ + lsls r0, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E94C\n\ +_0801E928:\n\ + movs r0, 0x1\n\ + strb r0, [r7, 0x5]\n\ + ldr r0, _0801E948 @ =0xffffdfff\n\ + ands r1, r0\n\ + str r1, [r2]\n\ + bl _0801F5FA\n\ + .align 2, 0\n\ +_0801E938: .4byte gLastUsedAbility\n\ +_0801E93C: .4byte gBattlescriptCurrInstr\n\ +_0801E940: .4byte BattleScript_PSNPrevention\n\ +_0801E944: .4byte gHitMarker\n\ +_0801E948: .4byte 0xffffdfff\n\ +_0801E94C:\n\ + strb r0, [r7, 0x5]\n\ + bl _0801F5FA\n\ +_0801E952:\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + movs r1, 0x58\n\ + muls r0, r1\n\ + add r0, r9\n\ + adds r1, r0, 0\n\ + adds r1, 0x21\n\ + ldrb r1, [r1]\n\ + cmp r1, 0x3\n\ + beq _0801E976\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3\n\ + beq _0801E976\n\ + cmp r1, 0x8\n\ + beq _0801E976\n\ + cmp r0, 0x8\n\ + bne _0801E9B4\n\ +_0801E976:\n\ + ldr r0, _0801E9A4 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801E9B4\n\ + cmp r4, 0x1\n\ + beq _0801E98C\n\ + cmp r5, 0x80\n\ + bne _0801E9B4\n\ +_0801E98C:\n\ + ldr r4, _0801E9A8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801E9AC @ =BattleScript_PSNPrevention\n\ +_0801E998:\n\ + str r0, [r4]\n\ + ldr r1, _0801E9B0 @ =gBattleCommunication\n\ + movs r0, 0x2\n\ + strb r0, [r1, 0x5]\n\ + bl _0801F5FA\n\ + .align 2, 0\n\ +_0801E9A4: .4byte gHitMarker\n\ +_0801E9A8: .4byte gBattlescriptCurrInstr\n\ +_0801E9AC: .4byte BattleScript_PSNPrevention\n\ +_0801E9B0: .4byte gBattleCommunication\n\ +_0801E9B4:\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r6, 0x58\n\ + muls r0, r6\n\ + mov r2, r9\n\ + adds r2, 0x4C\n\ + adds r5, r0, r2\n\ + ldr r4, [r5]\n\ + cmp r4, 0\n\ + bne _0801EA14\n\ + mov r3, r9\n\ + adds r1, r0, r3\n\ + adds r0, r1, 0\n\ + adds r0, 0x21\n\ + ldrb r3, [r0]\n\ + cmp r3, 0x3\n\ + beq _0801EA0A\n\ + adds r0, 0x1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3\n\ + beq _0801EA0A\n\ + cmp r3, 0x8\n\ + beq _0801EA0A\n\ + cmp r0, 0x8\n\ + beq _0801EA0A\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x11\n\ + beq _0801EA14\n\ + mov r4, r8\n\ + ldrb r0, [r4]\n\ + adds r1, r0, 0\n\ + muls r1, r6\n\ + adds r1, r2\n\ + ldr r0, [r1]\n\ + movs r2, 0x9\n\ + negs r2, r2\n\ + ands r0, r2\n\ + str r0, [r1]\n\ +_0801EA04:\n\ + movs r0, 0x1\n\ + mov r10, r0\n\ + b _0801EA14\n\ +_0801EA0A:\n\ + ldr r0, _0801EA58 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r2, 0x8\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_0801EA14:\n\ + mov r1, r10\n\ + cmp r1, 0x1\n\ + beq _0801EA1C\n\ + b _0801EB3C\n\ +_0801EA1C:\n\ + ldr r0, _0801EA5C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r0]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801EA60 @ =gStatusFlagsForMoveEffects\n\ + ldr r0, _0801EA64 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r3, [r0]\n\ + cmp r3, 0x7\n\ + bne _0801EA70\n\ + bl Random\n\ + ldr r2, _0801EA68 @ =gBattleMons\n\ + ldr r1, _0801EA6C @ =gEffectBank\n\ + ldrb r3, [r1]\n\ + movs r1, 0x58\n\ + muls r3, r1\n\ + adds r2, 0x4C\n\ + adds r3, r2\n\ + movs r1, 0x3\n\ + ands r1, r0\n\ + adds r1, 0x2\n\ + ldr r0, [r3]\n\ + orrs r0, r1\n\ + str r0, [r3]\n\ + b _0801EA84\n\ + .align 2, 0\n\ +_0801EA58: .4byte gBattleMoveFlags\n\ +_0801EA5C: .4byte gBattlescriptCurrInstr\n\ +_0801EA60: .4byte gStatusFlagsForMoveEffects\n\ +_0801EA64: .4byte gBattleCommunication\n\ +_0801EA68: .4byte gBattleMons\n\ +_0801EA6C: .4byte gEffectBank\n\ +_0801EA70:\n\ + ldr r2, _0801EAD4 @ =gBattleMons\n\ + ldr r0, _0801EAD8 @ =gEffectBank\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r1, r0\n\ + adds r2, 0x4C\n\ + adds r1, r2\n\ + ldr r0, [r1]\n\ + orrs r0, r3\n\ + str r0, [r1]\n\ +_0801EA84:\n\ + ldr r2, _0801EADC @ =gBattlescriptCurrInstr\n\ + ldr r1, _0801EAE0 @ =gMoveEffectBS_Ptrs\n\ + ldr r5, _0801EAE4 @ =gBattleCommunication\n\ + ldrb r0, [r5, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + str r0, [r2]\n\ + ldr r4, _0801EAE8 @ =gActiveBank\n\ + ldr r1, _0801EAD8 @ =gEffectBank\n\ + ldrb r0, [r1]\n\ + strb r0, [r4]\n\ + ldrb r1, [r1]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + ldr r1, _0801EAEC @ =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\ + ldr r2, _0801EAF0 @ =gHitMarker\n\ + ldr r1, [r2]\n\ + movs r0, 0x80\n\ + lsls r0, 6\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801EAF8\n\ + movs r0, 0x1\n\ + strb r0, [r5, 0x5]\n\ + ldr r0, _0801EAF4 @ =0xffffdfff\n\ + ands r1, r0\n\ + str r1, [r2]\n\ + b _0801EAFA\n\ + .align 2, 0\n\ +_0801EAD4: .4byte gBattleMons\n\ +_0801EAD8: .4byte gEffectBank\n\ +_0801EADC: .4byte gBattlescriptCurrInstr\n\ +_0801EAE0: .4byte gMoveEffectBS_Ptrs\n\ +_0801EAE4: .4byte gBattleCommunication\n\ +_0801EAE8: .4byte gActiveBank\n\ +_0801EAEC: .4byte gUnknown_02024ACC\n\ +_0801EAF0: .4byte gHitMarker\n\ +_0801EAF4: .4byte 0xffffdfff\n\ +_0801EAF8:\n\ + strb r0, [r5, 0x5]\n\ +_0801EAFA:\n\ + ldr r0, _0801EB2C @ =gBattleCommunication\n\ + ldrb r2, [r0, 0x3]\n\ + adds r7, r0, 0\n\ + cmp r2, 0x2\n\ + beq _0801EB14\n\ + cmp r2, 0x6\n\ + beq _0801EB14\n\ + cmp r2, 0x5\n\ + beq _0801EB14\n\ + cmp r2, 0x3\n\ + beq _0801EB14\n\ + bl _0801F5FA\n\ +_0801EB14:\n\ + ldr r0, _0801EB30 @ =0x02000000\n\ + ldrb r1, [r7, 0x3]\n\ + ldr r2, _0801EB34 @ =0x000160ca\n\ + adds r0, r2\n\ + strb r1, [r0]\n\ + ldr r2, _0801EB38 @ =gHitMarker\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 7\n\ + bl _0801F4F2\n\ + .align 2, 0\n\ +_0801EB2C: .4byte gBattleCommunication\n\ +_0801EB30: .4byte 0x02000000\n\ +_0801EB34: .4byte 0x000160ca\n\ +_0801EB38: .4byte gHitMarker\n\ +_0801EB3C:\n\ + mov r3, r10\n\ + cmp r3, 0\n\ + beq _0801EB46\n\ + bl _0801F5FA\n\ +_0801EB46:\n\ + bl _0801F5DC\n\ +_0801EB4A:\n\ + mov r0, r8\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r1, r0\n\ + mov r0, r9\n\ + adds r0, 0x50\n\ + adds r1, r0\n\ + ldr r2, _0801EB84 @ =gStatusFlagsForMoveEffects\n\ + ldrb r3, [r7, 0x3]\n\ + lsls r0, r3, 2\n\ + adds r0, r2\n\ + ldr r1, [r1]\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _0801EB6E\n\ + bl _0801F5DC\n\ +_0801EB6E:\n\ + subs r0, r3, 0x7\n\ + cmp r0, 0x34\n\ + bls _0801EB78\n\ + bl _0801F5FA\n\ +_0801EB78:\n\ + lsls r0, 2\n\ + ldr r1, _0801EB88 @ =_0801EB8C\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0801EB84: .4byte gStatusFlagsForMoveEffects\n\ +_0801EB88: .4byte _0801EB8C\n\ + .align 2, 0\n\ +_0801EB8C:\n\ + .4byte _0801EC60\n\ + .4byte _0801ECD4\n\ + .4byte _0801EE4C\n\ + .4byte _0801ED60\n\ + .4byte _0801EDDC\n\ + .4byte _0801EE84\n\ + .4byte _0801EECC\n\ + .4byte _0801EFA8\n\ + .4byte _0801EFEC\n\ + .4byte _0801EFEC\n\ + .4byte _0801EFEC\n\ + .4byte _0801EFEC\n\ + .4byte _0801EFEC\n\ + .4byte _0801EFEC\n\ + .4byte _0801EFEC\n\ + .4byte _0801F040\n\ + .4byte _0801F040\n\ + .4byte _0801F040\n\ + .4byte _0801F040\n\ + .4byte _0801F040\n\ + .4byte _0801F040\n\ + .4byte _0801F040\n\ + .4byte _0801F13C\n\ + .4byte _0801F184\n\ + .4byte _0801F1A4\n\ + .4byte _0801F364\n\ + .4byte _0801F3A0\n\ + .4byte _0801F3BC\n\ + .4byte _0801F3D4\n\ + .4byte _0801F3EC\n\ + .4byte _0801F44C\n\ + .4byte _0801F464\n\ + .4byte _0801F094\n\ + .4byte _0801F094\n\ + .4byte _0801F094\n\ + .4byte _0801F094\n\ + .4byte _0801F094\n\ + .4byte _0801F094\n\ + .4byte _0801F094\n\ + .4byte _0801F0E8\n\ + .4byte _0801F0E8\n\ + .4byte _0801F0E8\n\ + .4byte _0801F0E8\n\ + .4byte _0801F0E8\n\ + .4byte _0801F0E8\n\ + .4byte _0801F0E8\n\ + .4byte _0801F4A8\n\ + .4byte _0801F500\n\ + .4byte _0801F5FA\n\ + .4byte _0801F5FA\n\ + .4byte _0801F5FA\n\ + .4byte _0801F5FA\n\ + .4byte _0801F5EC\n\ +_0801EC60:\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + movs r5, 0x58\n\ + adds r1, r0, 0\n\ + muls r1, r5\n\ + mov r2, r9\n\ + adds r0, r1, r2\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x14\n\ + bne _0801EC7A\n\ + bl _0801F5DC\n\ +_0801EC7A:\n\ + mov r4, r9\n\ + adds r4, 0x50\n\ + adds r0, r1, r4\n\ + ldr r0, [r0]\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801EC8E\n\ + bl _0801F5DC\n\ +_0801EC8E:\n\ + bl Random\n\ + mov r3, r8\n\ + ldrb r1, [r3]\n\ + adds r2, r1, 0\n\ + muls r2, r5\n\ + adds r2, r4\n\ + lsls r0, 16\n\ + movs r1, 0xC0\n\ + lsls r1, 10\n\ + ands r1, r0\n\ + lsrs r1, 16\n\ + adds r1, 0x2\n\ + ldr r0, [r2]\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r4, _0801ECC8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801ECCC @ =gMoveEffectBS_Ptrs\n\ + ldr r0, _0801ECD0 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + bl _0801F5F8\n\ + .align 2, 0\n\ +_0801ECC8: .4byte gBattlescriptCurrInstr\n\ +_0801ECCC: .4byte gMoveEffectBS_Ptrs\n\ +_0801ECD0: .4byte gBattleCommunication\n\ +_0801ECD4:\n\ + mov r0, r8\n\ + ldrb r2, [r0]\n\ + movs r6, 0x58\n\ + adds r0, r2, 0\n\ + muls r0, r6\n\ + add r0, r9\n\ + adds r0, 0x20\n\ + ldrb r1, [r0]\n\ + cmp r1, 0x27\n\ + bne _0801ED18\n\ + cmp r4, 0x1\n\ + beq _0801ECF4\n\ + cmp r5, 0x80\n\ + beq _0801ECF4\n\ + bl _0801F5DC\n\ +_0801ECF4:\n\ + ldr r0, _0801ED0C @ =gLastUsedAbility\n\ + strb r1, [r0]\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + movs r1, 0x27\n\ + bl RecordAbilityBattle\n\ + ldr r1, _0801ED10 @ =gBattlescriptCurrInstr\n\ + ldr r0, _0801ED14 @ =BattleScript_FlinchPrevention\n\ + str r0, [r1]\n\ + bl _0801F5FA\n\ + .align 2, 0\n\ +_0801ED0C: .4byte gLastUsedAbility\n\ +_0801ED10: .4byte gBattlescriptCurrInstr\n\ +_0801ED14: .4byte BattleScript_FlinchPrevention\n\ +_0801ED18:\n\ + adds r0, r2, 0\n\ + bl BankGetTurnOrder\n\ + ldr r1, _0801ED54 @ =gCurrentMoveTurn\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bhi _0801ED2E\n\ + bl _0801F5DC\n\ +_0801ED2E:\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + adds r2, r0, 0\n\ + muls r2, r6\n\ + mov r0, r9\n\ + adds r0, 0x50\n\ + adds r2, r0\n\ + ldr r1, _0801ED58 @ =gStatusFlagsForMoveEffects\n\ + ldr r0, _0801ED5C @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r1, [r2]\n\ + ldr r0, [r0]\n\ + orrs r1, r0\n\ + str r1, [r2]\n\ + bl _0801F5DC\n\ + .align 2, 0\n\ +_0801ED54: .4byte gCurrentMoveTurn\n\ +_0801ED58: .4byte gStatusFlagsForMoveEffects\n\ +_0801ED5C: .4byte gBattleCommunication\n\ +_0801ED60:\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r5, 0x58\n\ + muls r0, r5\n\ + mov r4, r9\n\ + adds r4, 0x50\n\ + adds r2, r0, r4\n\ + ldr r1, [r2]\n\ + movs r0, 0x70\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801ED7C\n\ + bl _0801F5DC\n\ +_0801ED7C:\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + orrs r1, r0\n\ + str r1, [r2]\n\ + ldr r1, _0801EDC8 @ =gLockedMove\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldr r1, _0801EDCC @ =gCurrentMove\n\ + ldrh r1, [r1]\n\ + strh r1, [r0]\n\ + bl Random\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + adds r2, r1, 0\n\ + muls r2, r5\n\ + adds r2, r4\n\ + movs r1, 0x3\n\ + ands r1, r0\n\ + adds r1, 0x2\n\ + lsls r1, 4\n\ + ldr r0, [r2]\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r4, _0801EDD0 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801EDD4 @ =gMoveEffectBS_Ptrs\n\ + ldr r0, _0801EDD8 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + bl _0801F5F8\n\ + .align 2, 0\n\ +_0801EDC8: .4byte gLockedMove\n\ +_0801EDCC: .4byte gCurrentMove\n\ +_0801EDD0: .4byte gBattlescriptCurrInstr\n\ +_0801EDD4: .4byte gMoveEffectBS_Ptrs\n\ +_0801EDD8: .4byte gBattleCommunication\n\ +_0801EDDC:\n\ + ldr r5, _0801EE30 @ =gBankAttacker\n\ + ldrb r0, [r5]\n\ + bl GetBankIdentity\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _0801EE14\n\ + ldr r4, _0801EE34 @ =gPaydayMoney\n\ + ldrh r3, [r4]\n\ + ldr r2, _0801EE38 @ =gBattleMons\n\ + ldrb r1, [r5]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r2\n\ + adds r0, 0x2A\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + adds r0, r3, r0\n\ + strh r0, [r4]\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r3, r0\n\ + bls _0801EE14\n\ + ldr r3, _0801EE3C @ =0x0000ffff\n\ + adds r0, r3, 0\n\ + strh r0, [r4]\n\ +_0801EE14:\n\ + ldr r4, _0801EE40 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801EE44 @ =gMoveEffectBS_Ptrs\n\ + ldr r0, _0801EE48 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + bl _0801F5F8\n\ + .align 2, 0\n\ +_0801EE30: .4byte gBankAttacker\n\ +_0801EE34: .4byte gPaydayMoney\n\ +_0801EE38: .4byte gBattleMons\n\ +_0801EE3C: .4byte 0x0000ffff\n\ +_0801EE40: .4byte gBattlescriptCurrInstr\n\ +_0801EE44: .4byte gMoveEffectBS_Ptrs\n\ +_0801EE48: .4byte gBattleCommunication\n\ +_0801EE4C:\n\ + mov r4, r8\n\ + ldrb r1, [r4]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + mov r1, r9\n\ + adds r1, 0x4C\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _0801EE62\n\ + b _0801F5DC\n\ +_0801EE62:\n\ + bl Random\n\ + ldr r4, _0801EE80 @ =gBattleCommunication\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x3\n\ + bl __umodsi3\n\ + adds r0, 0x3\n\ + strb r0, [r4, 0x3]\n\ + movs r0, 0\n\ + movs r1, 0\n\ + bl SetMoveEffect\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801EE80: .4byte gBattleCommunication\n\ +_0801EE84:\n\ + mov r0, r8\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + adds r2, r1, 0\n\ + muls r2, r0\n\ + mov r0, r9\n\ + adds r0, 0x50\n\ + adds r2, r0\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 5\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r1, _0801EEC0 @ =gLockedMove\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldr r1, _0801EEC4 @ =gCurrentMove\n\ + ldrh r1, [r1]\n\ + strh r1, [r0]\n\ + ldr r0, _0801EEC8 @ =gProtectStructs\n\ + ldrb r1, [r2]\n\ + lsls r1, 4\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + movs r2, 0x4\n\ + orrs r0, r2\n\ + strb r0, [r1, 0x1]\n\ + b _0801F5DC\n\ + .align 2, 0\n\ +_0801EEC0: .4byte gLockedMove\n\ +_0801EEC4: .4byte gCurrentMove\n\ +_0801EEC8: .4byte gProtectStructs\n\ +_0801EECC:\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r6, 0x58\n\ + muls r0, r6\n\ + mov r4, r9\n\ + adds r4, 0x50\n\ + adds r0, r4\n\ + ldr r5, [r0]\n\ + movs r0, 0xE0\n\ + lsls r0, 8\n\ + ands r5, r0\n\ + cmp r5, 0\n\ + beq _0801EEE8\n\ + b _0801F5DC\n\ +_0801EEE8:\n\ + bl Random\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + adds r2, r1, 0\n\ + muls r2, r6\n\ + adds r2, r4\n\ + movs r1, 0x3\n\ + ands r1, r0\n\ + adds r1, 0x3\n\ + lsls r1, 13\n\ + ldr r0, [r2]\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r2, _0801EF80 @ =0x02000000\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + ldr r4, _0801EF84 @ =0x00016004\n\ + adds r0, r4\n\ + adds r0, r2\n\ + ldr r6, _0801EF88 @ =gCurrentMove\n\ + ldrh r1, [r6]\n\ + strb r1, [r0]\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + ldr r1, _0801EF8C @ =0x00016005\n\ + adds r0, r1\n\ + adds r0, r2\n\ + ldrh r1, [r6]\n\ + lsrs r1, 8\n\ + strb r1, [r0]\n\ + ldrb r0, [r3]\n\ + ldr r3, _0801EF90 @ =0x00016020\n\ + adds r0, r3\n\ + adds r0, r2\n\ + ldr r1, _0801EF94 @ =gBankAttacker\n\ + ldrb r1, [r1]\n\ + strb r1, [r0]\n\ + ldr r4, _0801EF98 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801EF9C @ =gMoveEffectBS_Ptrs\n\ + ldr r2, _0801EFA0 @ =gBattleCommunication\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + str r0, [r4]\n\ + strb r5, [r2, 0x5]\n\ + ldr r1, _0801EFA4 @ =gTrappingMoves\n\ + ldrh r0, [r1]\n\ + ldrh r4, [r6]\n\ + cmp r0, r4\n\ + bne _0801EF5C\n\ + b _0801F5FA\n\ +_0801EF5C:\n\ + adds r3, r1, 0\n\ + adds r1, r6, 0\n\ +_0801EF60:\n\ + ldrb r0, [r2, 0x5]\n\ + adds r0, 0x1\n\ + strb r0, [r2, 0x5]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x4\n\ + bls _0801EF70\n\ + b _0801F5FA\n\ +_0801EF70:\n\ + ldrb r0, [r2, 0x5]\n\ + lsls r0, 1\n\ + adds r0, r3\n\ + ldrh r0, [r0]\n\ + ldrh r4, [r1]\n\ + cmp r0, r4\n\ + bne _0801EF60\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801EF80: .4byte 0x02000000\n\ +_0801EF84: .4byte 0x00016004\n\ +_0801EF88: .4byte gCurrentMove\n\ +_0801EF8C: .4byte 0x00016005\n\ +_0801EF90: .4byte 0x00016020\n\ +_0801EF94: .4byte gBankAttacker\n\ +_0801EF98: .4byte gBattlescriptCurrInstr\n\ +_0801EF9C: .4byte gMoveEffectBS_Ptrs\n\ +_0801EFA0: .4byte gBattleCommunication\n\ +_0801EFA4: .4byte gTrappingMoves\n\ +_0801EFA8:\n\ + ldr r1, _0801EFD8 @ =gBattleMoveDamage\n\ + ldr r0, _0801EFDC @ =gHP_dealt\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bge _0801EFB4\n\ + adds r0, 0x3\n\ +_0801EFB4:\n\ + asrs r0, 2\n\ + str r0, [r1]\n\ + cmp r0, 0\n\ + bne _0801EFC0\n\ + movs r0, 0x1\n\ + str r0, [r1]\n\ +_0801EFC0:\n\ + ldr r4, _0801EFE0 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801EFE4 @ =gMoveEffectBS_Ptrs\n\ + ldr r0, _0801EFE8 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801EFD8: .4byte gBattleMoveDamage\n\ +_0801EFDC: .4byte gHP_dealt\n\ +_0801EFE0: .4byte gBattlescriptCurrInstr\n\ +_0801EFE4: .4byte gMoveEffectBS_Ptrs\n\ +_0801EFE8: .4byte gBattleCommunication\n\ +_0801EFEC:\n\ + ldrb r1, [r7, 0x3]\n\ + adds r1, 0xF2\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + movs r0, 0x10\n\ + adds r2, r6, 0\n\ + movs r3, 0\n\ + bl ChangeStatBuffs\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0\n\ + beq _0801F008\n\ + b _0801F5DC\n\ +_0801F008:\n\ + ldr r2, _0801F02C @ =0x02000000\n\ + ldrb r1, [r7, 0x3]\n\ + movs r0, 0x3F\n\ + ands r0, r1\n\ + ldr r4, _0801F030 @ =0x000160a4\n\ + adds r1, r2, r4\n\ + strb r0, [r1]\n\ + ldr r0, _0801F034 @ =0x000160a5\n\ + adds r2, r0\n\ + strb r3, [r2]\n\ + ldr r4, _0801F038 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F03C @ =BattleScript_StatUp\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F02C: .4byte 0x02000000\n\ +_0801F030: .4byte 0x000160a4\n\ +_0801F034: .4byte 0x000160a5\n\ +_0801F038: .4byte gBattlescriptCurrInstr\n\ +_0801F03C: .4byte BattleScript_StatUp\n\ +_0801F040:\n\ + movs r0, 0x70\n\ + negs r0, r0\n\ + ldrb r1, [r7, 0x3]\n\ + adds r1, 0xEB\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r2, r6, 0\n\ + movs r3, 0\n\ + bl ChangeStatBuffs\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0\n\ + beq _0801F05E\n\ + b _0801F5DC\n\ +_0801F05E:\n\ + ldr r2, _0801F080 @ =0x02000000\n\ + ldrb r1, [r7, 0x3]\n\ + movs r0, 0x3F\n\ + ands r0, r1\n\ + ldr r4, _0801F084 @ =0x000160a4\n\ + adds r1, r2, r4\n\ + strb r0, [r1]\n\ + ldr r0, _0801F088 @ =0x000160a5\n\ + adds r2, r0\n\ + strb r3, [r2]\n\ + ldr r4, _0801F08C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F090 @ =BattleScript_StatDown\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F080: .4byte 0x02000000\n\ +_0801F084: .4byte 0x000160a4\n\ +_0801F088: .4byte 0x000160a5\n\ +_0801F08C: .4byte gBattlescriptCurrInstr\n\ +_0801F090: .4byte BattleScript_StatDown\n\ +_0801F094:\n\ + ldrb r1, [r7, 0x3]\n\ + adds r1, 0xDA\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + movs r0, 0x20\n\ + adds r2, r6, 0\n\ + movs r3, 0\n\ + bl ChangeStatBuffs\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0\n\ + beq _0801F0B0\n\ + b _0801F5DC\n\ +_0801F0B0:\n\ + ldr r2, _0801F0D4 @ =0x02000000\n\ + ldrb r1, [r7, 0x3]\n\ + movs r0, 0x3F\n\ + ands r0, r1\n\ + ldr r4, _0801F0D8 @ =0x000160a4\n\ + adds r1, r2, r4\n\ + strb r0, [r1]\n\ + ldr r0, _0801F0DC @ =0x000160a5\n\ + adds r2, r0\n\ + strb r3, [r2]\n\ + ldr r4, _0801F0E0 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F0E4 @ =BattleScript_StatUp\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F0D4: .4byte 0x02000000\n\ +_0801F0D8: .4byte 0x000160a4\n\ +_0801F0DC: .4byte 0x000160a5\n\ +_0801F0E0: .4byte gBattlescriptCurrInstr\n\ +_0801F0E4: .4byte BattleScript_StatUp\n\ +_0801F0E8:\n\ + movs r0, 0x60\n\ + negs r0, r0\n\ + ldrb r1, [r7, 0x3]\n\ + adds r1, 0xD3\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r2, r6, 0\n\ + movs r3, 0\n\ + bl ChangeStatBuffs\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0\n\ + beq _0801F106\n\ + b _0801F5DC\n\ +_0801F106:\n\ + ldr r2, _0801F128 @ =0x02000000\n\ + ldrb r1, [r7, 0x3]\n\ + movs r0, 0x3F\n\ + ands r0, r1\n\ + ldr r4, _0801F12C @ =0x000160a4\n\ + adds r1, r2, r4\n\ + strb r0, [r1]\n\ + ldr r0, _0801F130 @ =0x000160a5\n\ + adds r2, r0\n\ + strb r3, [r2]\n\ + ldr r4, _0801F134 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F138 @ =BattleScript_StatDown\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F128: .4byte 0x02000000\n\ +_0801F12C: .4byte 0x000160a4\n\ +_0801F130: .4byte 0x000160a5\n\ +_0801F134: .4byte gBattlescriptCurrInstr\n\ +_0801F138: .4byte BattleScript_StatDown\n\ +_0801F13C:\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + movs r0, 0x58\n\ + adds r2, r1, 0\n\ + muls r2, r0\n\ + mov r0, r9\n\ + adds r0, 0x50\n\ + adds r2, r0\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 15\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r2, _0801F178 @ =gDisableStructs\n\ + mov r3, r8\n\ + ldrb r1, [r3]\n\ + lsls r0, r1, 3\n\ + subs r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + movs r1, 0x2\n\ + strb r1, [r0, 0x19]\n\ + ldr r1, _0801F17C @ =gLockedMove\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldr r1, _0801F180 @ =gCurrentMove\n\ + ldrh r1, [r1]\n\ + strh r1, [r0]\n\ + b _0801F5DC\n\ + .align 2, 0\n\ +_0801F178: .4byte gDisableStructs\n\ +_0801F17C: .4byte gLockedMove\n\ +_0801F180: .4byte gCurrentMove\n\ +_0801F184:\n\ + ldr r0, _0801F1A0 @ =gBankAttacker\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + adds r2, r1, 0\n\ + muls r2, r0\n\ + mov r0, r9\n\ + adds r0, 0x50\n\ + adds r2, r0\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 16\n\ +_0801F19A:\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + b _0801F5DC\n\ + .align 2, 0\n\ +_0801F1A0: .4byte gBankAttacker\n\ +_0801F1A4:\n\ + ldr r4, _0801F254 @ =gBankAttacker\n\ + ldrb r0, [r4]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + ldrb r0, [r4]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0801F1D8\n\ + ldr r0, _0801F258 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + ldr r0, _0801F25C @ =0x00000902\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801F214\n\ + ldr r0, _0801F260 @ =gTrainerBattleOpponent\n\ + ldrh r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 3\n\ + cmp r1, r0\n\ + beq _0801F1D8\n\ + b _0801F5DC\n\ +_0801F1D8:\n\ + ldr r0, _0801F258 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + ldr r0, _0801F25C @ =0x00000902\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0801F214\n\ + ldr r0, _0801F260 @ =gTrainerBattleOpponent\n\ + ldrh r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 3\n\ + cmp r1, r0\n\ + beq _0801F214\n\ + ldr r0, _0801F264 @ =gWishFutureKnock\n\ + adds r0, 0x29\n\ + adds r0, r6, r0\n\ + ldrb r1, [r0]\n\ + ldr r3, _0801F268 @ =gBitTable\n\ + ldr r2, _0801F26C @ =gBattlePartyID\n\ + ldr r0, _0801F254 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _0801F214\n\ + b _0801F5DC\n\ +_0801F214:\n\ + ldr r2, _0801F270 @ =gBattleMons\n\ + ldr r1, _0801F274 @ =gBankTarget\n\ + ldrb r0, [r1]\n\ + movs r3, 0x58\n\ + muls r0, r3\n\ + adds r4, r0, r2\n\ + ldrh r0, [r4, 0x2E]\n\ + adds r7, r1, 0\n\ + mov r9, r2\n\ + cmp r0, 0\n\ + beq _0801F284\n\ + adds r0, r4, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3C\n\ + bne _0801F284\n\ + ldr r1, _0801F278 @ =gBattlescriptCurrInstr\n\ + ldr r0, _0801F27C @ =BattleScript_NoItemSteal\n\ + str r0, [r1]\n\ + ldr r1, _0801F280 @ =gLastUsedAbility\n\ + ldrb r0, [r7]\n\ + muls r0, r3\n\ + add r0, r9\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldrb r0, [r7]\n\ + ldrb r1, [r1]\n\ + bl RecordAbilityBattle\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801F254: .4byte gBankAttacker\n\ +_0801F258: .4byte gBattleTypeFlags\n\ +_0801F25C: .4byte 0x00000902\n\ +_0801F260: .4byte gTrainerBattleOpponent\n\ +_0801F264: .4byte gWishFutureKnock\n\ +_0801F268: .4byte gBitTable\n\ +_0801F26C: .4byte gBattlePartyID\n\ +_0801F270: .4byte gBattleMons\n\ +_0801F274: .4byte gBankTarget\n\ +_0801F278: .4byte gBattlescriptCurrInstr\n\ +_0801F27C: .4byte BattleScript_NoItemSteal\n\ +_0801F280: .4byte gLastUsedAbility\n\ +_0801F284:\n\ + ldr r4, _0801F340 @ =gBankAttacker\n\ + mov r10, r4\n\ + ldrb r1, [r4]\n\ + movs r0, 0x58\n\ + mov r8, r0\n\ + mov r0, r8\n\ + muls r0, r1\n\ + add r0, r9\n\ + ldrh r3, [r0, 0x2E]\n\ + cmp r3, 0\n\ + beq _0801F29C\n\ + b _0801F5DC\n\ +_0801F29C:\n\ + ldrb r0, [r7]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + add r0, r9\n\ + ldrh r2, [r0, 0x2E]\n\ + adds r0, r2, 0\n\ + cmp r0, 0xAF\n\ + bne _0801F2B0\n\ + b _0801F5DC\n\ +_0801F2B0:\n\ + cmp r0, 0\n\ + bne _0801F2B6\n\ + b _0801F5DC\n\ +_0801F2B6:\n\ + lsls r0, r1, 1\n\ + ldr r5, _0801F344 @ =0x020160f0\n\ + adds r0, r5\n\ + ldr r1, _0801F348 @ =gLastUsedItem\n\ + strh r2, [r0]\n\ + strh r2, [r1]\n\ + ldrb r0, [r7]\n\ + mov r4, r8\n\ + muls r4, r0\n\ + adds r0, r4, 0\n\ + add r0, r9\n\ + movs r6, 0\n\ + strh r3, [r0, 0x2E]\n\ + ldr r4, _0801F34C @ =gActiveBank\n\ + mov r2, r10\n\ + ldrb r0, [r2]\n\ + strb r0, [r4]\n\ + str r1, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + movs r2, 0\n\ + movs r3, 0x2\n\ + bl EmitSetAttributes\n\ + mov r3, r10\n\ + ldrb r0, [r3]\n\ + bl MarkBufferBankForExecution\n\ + ldrb r0, [r7]\n\ + strb r0, [r4]\n\ + ldrb r0, [r7]\n\ + mov r4, r8\n\ + muls r4, r0\n\ + adds r0, r4, 0\n\ + mov r1, r9\n\ + adds r1, 0x2E\n\ + adds r0, r1\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + movs r2, 0\n\ + movs r3, 0x2\n\ + bl EmitSetAttributes\n\ + ldrb r0, [r7]\n\ + bl MarkBufferBankForExecution\n\ + ldr r4, _0801F350 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F354 @ =BattleScript_ItemSteal\n\ + str r0, [r4]\n\ + ldr r0, _0801F358 @ =0xfffe9f10\n\ + adds r5, r0\n\ + ldrb r0, [r7]\n\ + lsls r0, 1\n\ + ldr r1, _0801F35C @ =0x000160e8\n\ + adds r0, r1\n\ + adds r0, r5\n\ + strb r6, [r0]\n\ + ldrb r0, [r7]\n\ + lsls r0, 1\n\ + ldr r2, _0801F360 @ =0x000160e9\n\ + adds r0, r2\n\ + adds r0, r5\n\ + strb r6, [r0]\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801F340: .4byte gBankAttacker\n\ +_0801F344: .4byte 0x020160f0\n\ +_0801F348: .4byte gLastUsedItem\n\ +_0801F34C: .4byte gActiveBank\n\ +_0801F350: .4byte gBattlescriptCurrInstr\n\ +_0801F354: .4byte BattleScript_ItemSteal\n\ +_0801F358: .4byte 0xfffe9f10\n\ +_0801F35C: .4byte 0x000160e8\n\ +_0801F360: .4byte 0x000160e9\n\ +_0801F364:\n\ + ldr r3, _0801F394 @ =gBankTarget\n\ + ldrb r1, [r3]\n\ + movs r0, 0x58\n\ + adds r2, r1, 0\n\ + muls r2, r0\n\ + mov r0, r9\n\ + adds r0, 0x50\n\ + adds r2, r0\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 19\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r2, _0801F398 @ =gDisableStructs\n\ + ldrb r1, [r3]\n\ + lsls r0, r1, 3\n\ + subs r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldr r1, _0801F39C @ =gBankAttacker\n\ + ldrb r1, [r1]\n\ + strb r1, [r0, 0x14]\n\ + b _0801F5DC\n\ + .align 2, 0\n\ +_0801F394: .4byte gBankTarget\n\ +_0801F398: .4byte gDisableStructs\n\ +_0801F39C: .4byte gBankAttacker\n\ +_0801F3A0:\n\ + ldr r0, _0801F3B8 @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + adds r2, r1, 0\n\ + muls r2, r0\n\ + mov r0, r9\n\ + adds r0, 0x50\n\ + adds r2, r0\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 20\n\ + b _0801F19A\n\ + .align 2, 0\n\ +_0801F3B8: .4byte gBankTarget\n\ +_0801F3BC:\n\ + ldr r4, _0801F3CC @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F3D0 @ =gUnknown_081D9224\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F3CC: .4byte gBattlescriptCurrInstr\n\ +_0801F3D0: .4byte gUnknown_081D9224\n\ +_0801F3D4:\n\ + ldr r4, _0801F3E4 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F3E8 @ =BattleScript_RapidSpinAway\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F3E4: .4byte gBattlescriptCurrInstr\n\ +_0801F3E8: .4byte BattleScript_RapidSpinAway\n\ +_0801F3EC:\n\ + ldr r6, _0801F43C @ =gBankTarget\n\ + ldrb r0, [r6]\n\ + movs r2, 0x58\n\ + muls r0, r2\n\ + mov r1, r9\n\ + adds r1, 0x4C\n\ + adds r5, r0, r1\n\ + ldr r4, [r5]\n\ + movs r0, 0x40\n\ + ands r0, r4\n\ + cmp r0, 0\n\ + bne _0801F406\n\ + b _0801F5DC\n\ +_0801F406:\n\ + movs r0, 0x41\n\ + negs r0, r0\n\ + ands r4, r0\n\ + str r4, [r5]\n\ + ldr r4, _0801F440 @ =gActiveBank\n\ + ldrb r0, [r6]\n\ + strb r0, [r4]\n\ + ldrb r0, [r4]\n\ + muls r0, r2\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\ + ldr r4, _0801F444 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F448 @ =BattleScript_TargetPRLZHeal\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F43C: .4byte gBankTarget\n\ +_0801F440: .4byte gActiveBank\n\ +_0801F444: .4byte gBattlescriptCurrInstr\n\ +_0801F448: .4byte BattleScript_TargetPRLZHeal\n\ +_0801F44C:\n\ + ldr r4, _0801F45C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F460 @ =gUnknown_081D93FA\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F45C: .4byte gBattlescriptCurrInstr\n\ +_0801F460: .4byte gUnknown_081D93FA\n\ +_0801F464:\n\ + ldr r4, _0801F494 @ =gBattleMoveDamage\n\ + ldr r0, _0801F498 @ =gHP_dealt\n\ + ldr r0, [r0]\n\ + movs r1, 0x3\n\ + bl __divsi3\n\ + str r0, [r4]\n\ + cmp r0, 0\n\ + bne _0801F47A\n\ + movs r0, 0x1\n\ + str r0, [r4]\n\ +_0801F47A:\n\ + ldr r4, _0801F49C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r1, _0801F4A0 @ =gMoveEffectBS_Ptrs\n\ + ldr r0, _0801F4A4 @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + b _0801F5F8\n\ + .align 2, 0\n\ +_0801F494: .4byte gBattleMoveDamage\n\ +_0801F498: .4byte gHP_dealt\n\ +_0801F49C: .4byte gBattlescriptCurrInstr\n\ +_0801F4A0: .4byte gMoveEffectBS_Ptrs\n\ +_0801F4A4: .4byte gBattleCommunication\n\ +_0801F4A8:\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + movs r5, 0x58\n\ + muls r0, r5\n\ + mov r4, r9\n\ + adds r4, 0x50\n\ + adds r2, r0, r4\n\ + ldr r1, [r2]\n\ + movs r0, 0xC0\n\ + lsls r0, 4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0801F4C4\n\ + b _0801F5DC\n\ +_0801F4C4:\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + orrs r1, r0\n\ + str r1, [r2]\n\ + ldr r1, _0801F4F8 @ =gLockedMove\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldr r1, _0801F4FC @ =gCurrentMove\n\ + ldrh r1, [r1]\n\ + strh r1, [r0]\n\ + bl Random\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + adds r2, r1, 0\n\ + muls r2, r5\n\ + adds r2, r4\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + adds r1, 0x2\n\ + lsls r1, 10\n\ + ldr r0, [r2]\n\ +_0801F4F2:\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801F4F8: .4byte gLockedMove\n\ +_0801F4FC: .4byte gCurrentMove\n\ +_0801F500:\n\ + mov r5, r8\n\ + ldrb r3, [r5]\n\ + movs r4, 0x58\n\ + adds r0, r3, 0\n\ + muls r0, r4\n\ + mov r2, r9\n\ + adds r1, r0, r2\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r2, [r0]\n\ + cmp r2, 0x3C\n\ + bne _0801F540\n\ + ldrh r0, [r1, 0x2E]\n\ + cmp r0, 0\n\ + beq _0801F5DC\n\ + ldr r0, _0801F534 @ =gLastUsedAbility\n\ + strb r2, [r0]\n\ + ldr r1, _0801F538 @ =gBattlescriptCurrInstr\n\ + ldr r0, _0801F53C @ =BattleScript_NoItemSteal\n\ + str r0, [r1]\n\ + ldrb r0, [r5]\n\ + movs r1, 0x3C\n\ + bl RecordAbilityBattle\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801F534: .4byte gLastUsedAbility\n\ +_0801F538: .4byte gBattlescriptCurrInstr\n\ +_0801F53C: .4byte BattleScript_NoItemSteal\n\ +_0801F540:\n\ + ldrh r0, [r1, 0x2E]\n\ + cmp r0, 0\n\ + beq _0801F5DC\n\ + adds r0, r3, 0\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + ldr r1, _0801F5B8 @ =gLastUsedItem\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + muls r0, r4\n\ + add r0, r9\n\ + ldrh r0, [r0, 0x2E]\n\ + strh r0, [r1]\n\ + ldrb r0, [r3]\n\ + muls r0, r4\n\ + add r0, r9\n\ + movs r5, 0\n\ + movs r1, 0\n\ + strh r1, [r0, 0x2E]\n\ + ldr r2, _0801F5BC @ =gWishFutureKnock\n\ + adds r2, 0x29\n\ + adds r2, r6, r2\n\ + ldr r3, _0801F5C0 @ =gBitTable\n\ + ldr r1, _0801F5C4 @ =gBattlePartyID\n\ + mov r4, r8\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r4, _0801F5C8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F5CC @ =BattleScript_KnockedOff\n\ + str r0, [r4]\n\ + ldr r1, _0801F5D0 @ =0x02000000\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + lsls r0, 1\n\ + ldr r3, _0801F5D4 @ =0x000160e8\n\ + adds r0, r3\n\ + adds r0, r1\n\ + strb r5, [r0]\n\ + ldrb r0, [r2]\n\ + lsls r0, 1\n\ + ldr r4, _0801F5D8 @ =0x000160e9\n\ + adds r0, r4\n\ + adds r0, r1\n\ + strb r5, [r0]\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801F5B8: .4byte gLastUsedItem\n\ +_0801F5BC: .4byte gWishFutureKnock\n\ +_0801F5C0: .4byte gBitTable\n\ +_0801F5C4: .4byte gBattlePartyID\n\ +_0801F5C8: .4byte gBattlescriptCurrInstr\n\ +_0801F5CC: .4byte BattleScript_KnockedOff\n\ +_0801F5D0: .4byte 0x02000000\n\ +_0801F5D4: .4byte 0x000160e8\n\ +_0801F5D8: .4byte 0x000160e9\n\ +_0801F5DC:\n\ + ldr r1, _0801F5E8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x1\n\ + str r0, [r1]\n\ + b _0801F5FA\n\ + .align 2, 0\n\ +_0801F5E8: .4byte gBattlescriptCurrInstr\n\ +_0801F5EC:\n\ + ldr r4, _0801F60C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + bl b_movescr_stack_push\n\ + ldr r0, _0801F610 @ =gUnknown_081D94B0\n\ +_0801F5F8:\n\ + str r0, [r4]\n\ +_0801F5FA:\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\ +_0801F60C: .4byte gBattlescriptCurrInstr\n\ +_0801F610: .4byte gUnknown_081D94B0\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +static void atk15_seteffectwithchancetarget(void) +{ + u32 PercentChance; + if (gBattleMons[gBankAttacker].ability == ABILITY_SERENE_GRACE) + PercentChance = gBattleMoves[gCurrentMove].secondaryEffectChance * 2; + else + PercentChance = gBattleMoves[gCurrentMove].secondaryEffectChance; + if (gBattleCommunication[MOVE_EFFECT_BYTE] & 0x80 && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) + { + gBattleCommunication[MOVE_EFFECT_BYTE] &= 0x7F; + SetMoveEffect(0, 0x80); + } + else if (Random() % 100 <= PercentChance && gBattleCommunication[MOVE_EFFECT_BYTE] && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) + { + if (PercentChance >= 100) + SetMoveEffect(0, 0x80); + else + SetMoveEffect(0, 0); + } + else + gBattlescriptCurrInstr++; + gBattleCommunication[MOVE_EFFECT_BYTE] = 0; + BATTLE_STRUCT->filler2[0x3E] = 0; //TODO: to fix this later +} + +static void atk16_seteffectprimary(void) +{ + SetMoveEffect(1, 0); +} + +static void atk17_seteffectsecondary(void) +{ + SetMoveEffect(0, 0); +} + +static void atk18_status_effect_clear(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) + gBattleMons[gActiveBank].status1 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); + else + gBattleMons[gActiveBank].status2 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); + + gBattleCommunication[MOVE_EFFECT_BYTE] = 0; + gBattlescriptCurrInstr += 2; + BATTLE_STRUCT->filler2[0x3E] = 0; //TODO: to fix this later +} + +//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"); +} + +static void atk1A_faint_animation(void) +{ + if (gBattleExecBuffer == 0) + { + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + EmitFaintAnimation(0); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; + } +} + +static void atk1B_faint_effects_clear(void) +{ + //Clears things like attraction or trapping to other banks + if (gBattleExecBuffer == 0) + { + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gBattleMons[gActiveBank].status1 = 0; + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 0x4, &gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + UndoEffectsAfterFainting(); + gBattlescriptCurrInstr += 2; + } +} + +static void atk1C_jumpifstatus(void) +{ + u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); + void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6); + if (gBattleMons[bank].status1 & flags && gBattleMons[bank].hp) + gBattlescriptCurrInstr = jump_loc; + else + gBattlescriptCurrInstr += 10; +} + +static void atk1D_jumpifstatus2(void) +{ + u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); + void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6); + if (gBattleMons[bank].status2 & flags && gBattleMons[bank].hp) + gBattlescriptCurrInstr = jump_loc; + else + gBattlescriptCurrInstr += 10; +} + +static void atk1E_jumpifability(void) +{ + u8 bank; + u8 ability = BSScriptRead8(gBattlescriptCurrInstr + 2); + void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3); + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 8) + { + bank = AbilityBattleEffects(ABILITYEFFECT_CHECK_BANK_SIDE, gBankAttacker, ability, 0, 0); + if (bank) + { + gLastUsedAbility = ability; + gBattlescriptCurrInstr = jump_loc; + RecordAbilityBattle(bank -1, gLastUsedAbility); + unk_2000000[0x160f8] = bank - 1; + } + else + gBattlescriptCurrInstr += 7; + } + else if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 9) + { + bank = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gBankAttacker, ability, 0, 0); + if (bank) + { + gLastUsedAbility = ability; + gBattlescriptCurrInstr = jump_loc; + RecordAbilityBattle(bank - 1, gLastUsedAbility); + unk_2000000[0x160f8] = bank - 1; + } + else + gBattlescriptCurrInstr += 7; + } + else + { + bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (gBattleMons[bank].ability == ability) + { + gLastUsedAbility = ability; + gBattlescriptCurrInstr = jump_loc; + RecordAbilityBattle(bank, gLastUsedAbility); + unk_2000000[0x160f8] = bank; + } + else + gBattlescriptCurrInstr += 7; + } +} + +static void atk1F_jumpifsideaffecting(void) +{ + u8 side; + u16 flags; + void* jump_loc; + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 1) + side = GetBankIdentity(gBankAttacker) & 1; + else + side = GetBankIdentity(gBankTarget) & 1; + + flags = BS2ScriptRead16(gBattlescriptCurrInstr + 2); + jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 4); + + if (gSideAffecting[side] & flags) + gBattlescriptCurrInstr = jump_loc; + else + gBattlescriptCurrInstr += 8; +} + +static void atk20_jumpifstat(void) +{ + u8 ret = 0; + u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + u8 value = gBattleMons[bank].statStages[BSScriptRead8(gBattlescriptCurrInstr + 3)]; + switch (BSScriptRead8(gBattlescriptCurrInstr + 2)) + { + case CMP_EQUAL: + if (value == BSScriptRead8(gBattlescriptCurrInstr + 4)) + ret++; + break; + case CMP_NOT_EQUAL: + if (value != BSScriptRead8(gBattlescriptCurrInstr + 4)) + ret++; + break; + case CMP_GREATER_THAN: + if (value > BSScriptRead8(gBattlescriptCurrInstr + 4)) + ret++; + break; + case CMP_LESS_THAN: + if (value < BSScriptRead8(gBattlescriptCurrInstr + 4)) + ret++; + break; + case CMP_COMMON_BITS: + if (value & BSScriptRead8(gBattlescriptCurrInstr + 4)) + ret++; + break; + case CMP_NO_COMMON_BITS: + if (!(value & BSScriptRead8(gBattlescriptCurrInstr + 4))) + ret++; + break; + } + if (ret) + gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + else + gBattlescriptCurrInstr += 9; +} + +static void atk21_jumpifstatus3(void) +{ + u32 flags; + void* jump_loc; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); + jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7); + if (BSScriptRead8(gBattlescriptCurrInstr + 6)) + { + if ((gStatuses3[gActiveBank] & flags) != 0) + gBattlescriptCurrInstr += 11; + else + gBattlescriptCurrInstr = jump_loc; + } + else + { + if ((gStatuses3[gActiveBank] & flags) != 0) + gBattlescriptCurrInstr = jump_loc; + else + gBattlescriptCurrInstr += 11; + } +} + +static void atk22_jumpiftype(void) //u8 bank, u8 type, *ptr +{ + u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + u8 type = BSScriptRead8(gBattlescriptCurrInstr + 2); + void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3); + + if (gBattleMons[bank].type1 == type || gBattleMons[bank].type2 == type) + gBattlescriptCurrInstr = jump_loc; + else + gBattlescriptCurrInstr += 7; +} + +//here we go again... +#ifdef NONMATCHING +static void atk23_getexp(void) +{ + u8 hold_effect; + int via_expshare = 0, sent_in; + u16* exp = &BATTLE_STRUCT->exp; + gBank1 = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + sent_in = gSentPokesToOpponent[(gBank1 & 2) >> 1]; + switch (BATTLE_STRUCT->atk23StateTracker) + { + case 0: //check if should receive exp at all + if (GetBankSide(gBank1) != 1 || (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) + BATTLE_STRUCT->atk23StateTracker = 6; //goto last case + else + { + BATTLE_STRUCT->atk23StateTracker++; + unk_2000000[0x16113] |= gBitTable[gBattlePartyID[gBank1]]; + } + break; + case 1: //calculate experience points to redistribute + { + int via_sent_in = 0, i; + u16 calculatedExp; + for (i = 0; i < 6; i++) + { + u16 item; + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == 0 || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) + continue; + if (gBitTable[i] & sent_in) + via_sent_in++; + + item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + if (item == ITEM_ENIGMA_BERRY) + hold_effect = gSaveBlock1.enigmaBerry.holdEffect; + else + hold_effect = ItemId_GetHoldEffect(item); + + if (hold_effect == HOLD_EFFECT_EXP_SHARE) + via_expshare++; + } + calculatedExp = gBaseStats[gBattleMons[gBank1].species].expYield * gBattleMons[gBank1].level / 7; + if (via_expshare) //at least one poke is getting exp via exp share + { + calculatedExp /= 2; + *exp = calculatedExp / via_sent_in; + if (*exp == 0) + *exp = 1; + + gExpShareExp = calculatedExp / via_expshare; + if (gExpShareExp == 0) + gExpShareExp = 1; + } + else + { + *exp = calculatedExp / via_sent_in; + if (*exp == 0) + *exp = 1; + gExpShareExp = 0; + } + BATTLE_STRUCT->atk23StateTracker++; + BATTLE_STRUCT->expGetterID = 0; + BATTLE_STRUCT->sentInPokes = sent_in; + } //no break statement + case 2: //loop; set exp value to the poke in expgetter_id and print message + if (gBattleExecBuffer == 0) + { + u16 item = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HELD_ITEM); + u8* tracker; u32 zero; + if (item == ITEM_ENIGMA_BERRY) + hold_effect = gSaveBlock1.enigmaBerry.holdEffect; + else + hold_effect = ItemId_GetHoldEffect(item); + + if ((hold_effect != HOLD_EFFECT_EXP_SHARE && !(BATTLE_STRUCT->sentInPokes & 1))) + { + BATTLE_STRUCT->sentInPokes >>= 1; + tracker = &BATTLE_STRUCT->atk23StateTracker; + zero = 0; + goto LABEL; + } + 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 + } + else + { + //music change in wild battle after fainting a poke + if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !BATTLE_STRUCT->wildVictorySong) + { + BattleMusicStop(); + PlayBGM(0x161); + BATTLE_STRUCT->wildVictorySong++; + } + + if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP)) + { + s16 stringID; + if (BATTLE_STRUCT->sentInPokes & 1) + gBattleMoveDamage = *exp; + else + gBattleMoveDamage = 0; + + if (hold_effect == HOLD_EFFECT_EXP_SHARE) + gBattleMoveDamage += gExpShareExp; + if (hold_effect == HOLD_EFFECT_LUCKY_EGG) + gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; + + if (IsTradedMon(&gPlayerParty[BATTLE_STRUCT->expGetterID])) + { + gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; + stringID = 0x14A; + } + else + stringID = 0x149; + + //get exp getter bank + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + if (!(gBattlePartyID[2] != BATTLE_STRUCT->expGetterID) && !(gAbsentBankFlags & gBitTable[2])) + BATTLE_STRUCT->expGetterBank = 2; + else + { + if (!(gAbsentBankFlags & gBitTable[0])) + BATTLE_STRUCT->expGetterBank = 0; + else + BATTLE_STRUCT->expGetterBank = 2; + } + } + else + BATTLE_STRUCT->expGetterBank = 0; + + //buffer poke name + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 4; + gBattleTextBuff1[2] = BATTLE_STRUCT->expGetterBank; + gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID; + gBattleTextBuff1[4] = 0xFF; + + //buffer 'gained' or 'gained a boosted' + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 0; + gBattleTextBuff2[2] = sBYTE0_32(stringID); + gBattleTextBuff2[3] = sBYTE1_32(stringID); + gBattleTextBuff2[4] = 0xFF; + + //buffer exp number + gBattleTextBuff3[0] = 0xFD; + gBattleTextBuff3[1] = 1; + gBattleTextBuff3[2] = 4; //word + gBattleTextBuff3[3] = 5; //max digits + gBattleTextBuff3[4] = gBattleMoveDamage; + gBattleTextBuff3[5] = sBYTE1_32(gBattleMoveDamage); + gBattleTextBuff3[6] = sBYTE2_32(gBattleMoveDamage); + gBattleTextBuff3[7] = sBYTE3_32(gBattleMoveDamage); + gBattleTextBuff3[8] = 0xFF; + + PrepareStringBattle(0xD, BATTLE_STRUCT->expGetterBank); + MonGainEVs(&gPlayerParty[BATTLE_STRUCT->expGetterID], gBattleMons[gBank1].species); + } + BATTLE_STRUCT->sentInPokes >>= 1; + BATTLE_STRUCT->atk23StateTracker++; + } + } + break; + case 3: //Set Stats and give exp + if (gBattleExecBuffer == 0) + { + gBattleBufferB[BATTLE_STRUCT->expGetterBank][0] = 0; + if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) != 100) + { + 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); + + gActiveBank = BATTLE_STRUCT->expGetterBank; + EmitExpBarUpdate(0, BATTLE_STRUCT->expGetterID, gBattleMoveDamage); + MarkBufferBankForExecution(gActiveBank); + } + BATTLE_STRUCT->atk23StateTracker++; + } + break; + case 4: //lvl up if necessary + if (gBattleExecBuffer == 0) + { + gActiveBank = BATTLE_STRUCT->expGetterBank; + if (gBattleBufferB[gActiveBank][0] == 0x21 && gBattleBufferB[gActiveBank][1] == 0xB) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID) + sub_80324F8(&gPlayerParty[gActiveBank], gActiveBank); + + //buff poke name + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 4; + gBattleTextBuff1[2] = gActiveBank; + gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID; + gBattleTextBuff1[4] = 0xFF; + + //buff level + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 1; + gBattleTextBuff2[2] = 1; + gBattleTextBuff2[3] = 3; + gBattleTextBuff2[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); + gBattleTextBuff2[5] = 0xFF; + + b_movescr_stack_push_cursor(); + gLeveledUpInBattle |= gBitTable[BATTLE_STRUCT->expGetterID]; + gBattlescriptCurrInstr = BattleScript_LevelUp; + gBattleMoveDamage = (gBattleBufferB[gActiveBank][2] | (gBattleBufferB[gActiveBank][3] << 8)); + AdjustFriendship(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0); + + //update battle mon structure after level up + if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && gBattleMons[0].hp) + { + gBattleMons[0].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); + gBattleMons[0].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP); + gBattleMons[0].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); + gBattleMons[0].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); + gBattleMons[0].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); + gBattleMons[0].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD); + gBattleMons[0].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); + gBattleMons[0].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF); + } + //What is else if? Guess it's too advanced for GameFreak + if (gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + gBattleMons[2].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); + gBattleMons[2].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP); + gBattleMons[2].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); + gBattleMons[2].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); + gBattleMons[2].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); + //There are no words...GF can't even copy&paste code properly + gBattleMons[2].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD); + gBattleMons[2].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD /*RIP*/); + gBattleMons[2].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); + } + BATTLE_STRUCT->atk23StateTracker = 5; + } + else + { + gBattleMoveDamage = 0; + BATTLE_STRUCT->atk23StateTracker = 5; + } + } + break; + case 5: //looper increment + if (gBattleMoveDamage) //there is exp to give, goto case 3 that gives exp + BATTLE_STRUCT->atk23StateTracker = 3; + else + { + if (++BATTLE_STRUCT->expGetterID <= 5) + BATTLE_STRUCT->atk23StateTracker = 2; //loop again + else + BATTLE_STRUCT->atk23StateTracker = 6; //we're done + } + break; + case 6: //increment instruction + if (gBattleExecBuffer == 0) + { + //not even sure why gamefreak clears that data in this place + gBattleMons[gBank1].item = 0; + gBattleMons[gBank1].ability = 0; + gBattlescriptCurrInstr += 2; + } + break; + } +} +#else +__attribute__((naked)) +static void atk23_getexp(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + movs r6, 0\n\ + ldr r0, _0802004C @ =0x0201605c\n\ + mov r10, r0\n\ + ldr r0, _08020050 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x1]\n\ + bl GetBattleBank\n\ + ldr r1, _08020054 @ =gBank1\n\ + strb r0, [r1]\n\ + ldr r2, _08020058 @ =gSentPokesToOpponent\n\ + movs r1, 0x2\n\ + ands r1, r0\n\ + lsls r1, 24\n\ + lsrs r1, 25\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + mov r8, r1\n\ + mov r0, r10\n\ + subs r0, 0x4D\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x6\n\ + bls _08020040\n\ + bl _08020996\n\ +_08020040:\n\ + lsls r0, 2\n\ + ldr r1, _0802005C @ =_08020060\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0802004C: .4byte 0x0201605c\n\ +_08020050: .4byte gBattlescriptCurrInstr\n\ +_08020054: .4byte gBank1\n\ +_08020058: .4byte gSentPokesToOpponent\n\ +_0802005C: .4byte _08020060\n\ + .align 2, 0\n\ +_08020060:\n\ + .4byte _0802007C\n\ + .4byte _080200FC\n\ + .4byte _08020216\n\ + .4byte _0802055C\n\ + .4byte _08020648\n\ + .4byte _08020910\n\ + .4byte _0802096C\n\ +_0802007C:\n\ + ldr r4, _080200A8 @ =gBank1\n\ + ldrb r0, [r4]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _08020098\n\ + ldr r0, _080200AC @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + ldr r0, _080200B0 @ =0x00000982\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080200BC\n\ +_08020098:\n\ + ldr r0, _080200B4 @ =0x02000000\n\ + ldr r1, _080200B8 @ =0x0001600f\n\ + adds r0, r1\n\ + movs r1, 0x6\n\ + strb r1, [r0]\n\ + bl _08020996\n\ + .align 2, 0\n\ +_080200A8: .4byte gBank1\n\ +_080200AC: .4byte gBattleTypeFlags\n\ +_080200B0: .4byte 0x00000982\n\ +_080200B4: .4byte 0x02000000\n\ +_080200B8: .4byte 0x0001600f\n\ +_080200BC:\n\ + ldr r2, _080200E8 @ =0x02000000\n\ + ldr r3, _080200EC @ =0x0001600f\n\ + adds r1, r2, r3\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + ldr r0, _080200F0 @ =0x00016113\n\ + adds r2, r0\n\ + ldr r3, _080200F4 @ =gBitTable\n\ + ldr r1, _080200F8 @ =gBattlePartyID\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + bl _08020996\n\ + .align 2, 0\n\ +_080200E8: .4byte 0x02000000\n\ +_080200EC: .4byte 0x0001600f\n\ +_080200F0: .4byte 0x00016113\n\ +_080200F4: .4byte gBitTable\n\ +_080200F8: .4byte gBattlePartyID\n\ +_080200FC:\n\ + movs r5, 0\n\ + movs r7, 0\n\ + ldr r1, _08020150 @ =gSaveBlock1 + 0x3688\n\ + mov r9, r1\n\ +_08020104:\n\ + movs r0, 0x64\n\ + adds r1, r7, 0\n\ + muls r1, r0\n\ + ldr r0, _08020154 @ =gPlayerParty\n\ + adds r4, r1, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0802016A\n\ + adds r0, r4, 0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0802016A\n\ + ldr r0, _08020158 @ =gBitTable\n\ + lsls r1, r7, 2\n\ + adds r1, r0\n\ + ldr r0, [r1]\n\ + mov r2, r8\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _08020138\n\ + adds r5, 0x1\n\ +_08020138:\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0xAF\n\ + bne _0802015C\n\ + mov r3, r9\n\ + ldrb r4, [r3]\n\ + b _08020164\n\ + .align 2, 0\n\ +_08020150: .4byte gSaveBlock1 + 0x3688\n\ +_08020154: .4byte gPlayerParty\n\ +_08020158: .4byte gBitTable\n\ +_0802015C:\n\ + bl ItemId_GetHoldEffect\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ +_08020164:\n\ + cmp r4, 0x19\n\ + bne _0802016A\n\ + adds r6, 0x1\n\ +_0802016A:\n\ + adds r7, 0x1\n\ + cmp r7, 0x5\n\ + ble _08020104\n\ + ldr r3, _080201D0 @ =gBaseStats\n\ + ldr r2, _080201D4 @ =gBattleMons\n\ + ldr r0, _080201D8 @ =gBank1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r1, r0\n\ + adds r1, r2\n\ + ldrh r2, [r1]\n\ + lsls r0, r2, 3\n\ + subs r0, r2\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldrb r2, [r0, 0x9]\n\ + adds r1, 0x2A\n\ + ldrb r0, [r1]\n\ + muls r0, r2\n\ + movs r1, 0x7\n\ + bl __divsi3\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + cmp r6, 0\n\ + beq _080201E0\n\ + lsrs r4, r0, 17\n\ + adds r0, r4, 0\n\ + adds r1, r5, 0\n\ + bl __divsi3\n\ + mov r1, r10\n\ + strh r0, [r1]\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + bne _080201B6\n\ + movs r0, 0x1\n\ + strh r0, [r1]\n\ +_080201B6:\n\ + ldr r5, _080201DC @ =gExpShareExp\n\ + adds r0, r4, 0\n\ + adds r1, r6, 0\n\ + bl __divsi3\n\ + strh r0, [r5]\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + bne _080201FA\n\ + movs r0, 0x1\n\ + strh r0, [r5]\n\ + b _080201FA\n\ + .align 2, 0\n\ +_080201D0: .4byte gBaseStats\n\ +_080201D4: .4byte gBattleMons\n\ +_080201D8: .4byte gBank1\n\ +_080201DC: .4byte gExpShareExp\n\ +_080201E0:\n\ + adds r0, r1, 0\n\ + adds r1, r5, 0\n\ + bl __divsi3\n\ + mov r2, r10\n\ + strh r0, [r2]\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + bne _080201F6\n\ + movs r0, 0x1\n\ + strh r0, [r2]\n\ +_080201F6:\n\ + ldr r0, _08020248 @ =gExpShareExp\n\ + strh r6, [r0]\n\ +_080201FA:\n\ + ldr r1, _0802024C @ =0x02000000\n\ + ldr r3, _08020250 @ =0x0001600f\n\ + adds r2, r1, r3\n\ + ldrb r0, [r2]\n\ + adds r0, 0x1\n\ + movs r3, 0\n\ + strb r0, [r2]\n\ + ldr r2, _08020254 @ =0x00016018\n\ + adds r0, r1, r2\n\ + strb r3, [r0]\n\ + ldr r3, _08020258 @ =0x0001605f\n\ + adds r1, r3\n\ + mov r0, r8\n\ + strb r0, [r1]\n\ +_08020216:\n\ + ldr r0, _0802025C @ =gBattleExecBuffer\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _08020220\n\ + b _08020996\n\ +_08020220:\n\ + ldr r0, _0802024C @ =0x02000000\n\ + ldr r1, _08020254 @ =0x00016018\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _08020260 @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0xC\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0xAF\n\ + bne _0802026C\n\ + ldr r0, _08020264 @ =gSaveBlock1\n\ + ldr r2, _08020268 @ =0x00003688\n\ + adds r0, r2\n\ + ldrb r4, [r0]\n\ + b _08020274\n\ + .align 2, 0\n\ +_08020248: .4byte gExpShareExp\n\ +_0802024C: .4byte 0x02000000\n\ +_08020250: .4byte 0x0001600f\n\ +_08020254: .4byte 0x00016018\n\ +_08020258: .4byte 0x0001605f\n\ +_0802025C: .4byte gBattleExecBuffer\n\ +_08020260: .4byte gPlayerParty\n\ +_08020264: .4byte gSaveBlock1\n\ +_08020268: .4byte 0x00003688\n\ +_0802026C:\n\ + bl ItemId_GetHoldEffect\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ +_08020274:\n\ + ldr r5, _08020294 @ =0x02000000\n\ + cmp r4, 0x19\n\ + beq _080202A0\n\ + ldr r3, _08020298 @ =0x0001605f\n\ + adds r1, r5, r3\n\ + ldrb r0, [r1]\n\ + movs r2, 0x1\n\ + ands r2, r0\n\ + cmp r2, 0\n\ + bne _080202A0\n\ + lsrs r0, 1\n\ + strb r0, [r1]\n\ + ldr r0, _0802029C @ =0x0001600f\n\ + adds r1, r5, r0\n\ + b _080202C8\n\ + .align 2, 0\n\ +_08020294: .4byte 0x02000000\n\ +_08020298: .4byte 0x0001605f\n\ +_0802029C: .4byte 0x0001600f\n\ +_080202A0:\n\ + ldr r1, _080202D4 @ =0x00016018\n\ + adds r0, r5, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _080202D8 @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + cmp r0, 0x64\n\ + bne _080202E8\n\ + ldr r2, _080202DC @ =0x0001605f\n\ + adds r1, r5, r2\n\ + ldrb r0, [r1]\n\ + lsrs r0, 1\n\ + movs r2, 0\n\ + strb r0, [r1]\n\ + ldr r3, _080202E0 @ =0x0001600f\n\ + adds r1, r5, r3\n\ +_080202C8:\n\ + movs r0, 0x5\n\ + strb r0, [r1]\n\ + ldr r0, _080202E4 @ =gBattleMoveDamage\n\ + str r2, [r0]\n\ + b _08020996\n\ + .align 2, 0\n\ +_080202D4: .4byte 0x00016018\n\ +_080202D8: .4byte gPlayerParty\n\ +_080202DC: .4byte 0x0001605f\n\ +_080202E0: .4byte 0x0001600f\n\ +_080202E4: .4byte gBattleMoveDamage\n\ +_080202E8:\n\ + ldr r0, _0802034C @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08020316\n\ + ldr r0, _08020350 @ =gBattleMons\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + beq _08020316\n\ + ldr r0, _08020354 @ =0x0001601b\n\ + adds r5, r0\n\ + ldrb r0, [r5]\n\ + cmp r0, 0\n\ + bne _08020316\n\ + bl BattleMusicStop\n\ + ldr r0, _08020358 @ =0x00000161\n\ + bl PlayBGM\n\ + ldrb r0, [r5]\n\ + adds r0, 0x1\n\ + strb r0, [r5]\n\ +_08020316:\n\ + ldr r5, _0802035C @ =0x02000000\n\ + ldr r1, _08020360 @ =0x00016018\n\ + adds r0, r5, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _08020364 @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _08020332\n\ + b _0802051E\n\ +_08020332:\n\ + ldr r2, _08020368 @ =0x0001605f\n\ + adds r0, r5, r2\n\ + ldrb r0, [r0]\n\ + movs r3, 0x1\n\ + ands r3, r0\n\ + cmp r3, 0\n\ + beq _08020370\n\ + ldr r1, _0802036C @ =gBattleMoveDamage\n\ + mov r3, r10\n\ + ldrh r0, [r3]\n\ + str r0, [r1]\n\ + mov r8, r1\n\ + b _08020376\n\ + .align 2, 0\n\ +_0802034C: .4byte gBattleTypeFlags\n\ +_08020350: .4byte gBattleMons\n\ +_08020354: .4byte 0x0001601b\n\ +_08020358: .4byte 0x00000161\n\ +_0802035C: .4byte 0x02000000\n\ +_08020360: .4byte 0x00016018\n\ +_08020364: .4byte gPlayerParty\n\ +_08020368: .4byte 0x0001605f\n\ +_0802036C: .4byte gBattleMoveDamage\n\ +_08020370:\n\ + ldr r0, _080203EC @ =gBattleMoveDamage\n\ + str r3, [r0]\n\ + mov r8, r0\n\ +_08020376:\n\ + cmp r4, 0x19\n\ + bne _08020386\n\ + ldr r0, _080203F0 @ =gExpShareExp\n\ + ldrh r1, [r0]\n\ + mov r2, r8\n\ + ldr r0, [r2]\n\ + adds r0, r1\n\ + str r0, [r2]\n\ +_08020386:\n\ + cmp r4, 0x28\n\ + bne _0802039C\n\ + mov r3, r8\n\ + ldr r1, [r3]\n\ + movs r0, 0x96\n\ + muls r0, r1\n\ + movs r1, 0x64\n\ + bl __divsi3\n\ + mov r1, r8\n\ + str r0, [r1]\n\ +_0802039C:\n\ + ldr r0, _080203F4 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080203B8\n\ + ldr r4, _080203EC @ =gBattleMoveDamage\n\ + ldr r1, [r4]\n\ + movs r0, 0x96\n\ + muls r0, r1\n\ + movs r1, 0x64\n\ + bl __divsi3\n\ + str r0, [r4]\n\ +_080203B8:\n\ + ldr r0, _080203F8 @ =0x02000000\n\ + ldr r2, _080203FC @ =0x00016018\n\ + adds r0, r2\n\ + ldrb r1, [r0]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _08020400 @ =gPlayerParty\n\ + adds r0, r1\n\ + bl IsTradedMon\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08020404\n\ + ldr r4, _080203EC @ =gBattleMoveDamage\n\ + ldr r1, [r4]\n\ + movs r0, 0x96\n\ + muls r0, r1\n\ + movs r1, 0x64\n\ + bl __divsi3\n\ + str r0, [r4]\n\ + movs r7, 0xA5\n\ + lsls r7, 1\n\ + mov r8, r4\n\ + b _0802040A\n\ + .align 2, 0\n\ +_080203EC: .4byte gBattleMoveDamage\n\ +_080203F0: .4byte gExpShareExp\n\ +_080203F4: .4byte gBattleTypeFlags\n\ +_080203F8: .4byte 0x02000000\n\ +_080203FC: .4byte 0x00016018\n\ +_08020400: .4byte gPlayerParty\n\ +_08020404:\n\ + ldr r7, _0802043C @ =0x00000149\n\ + ldr r3, _08020440 @ =gBattleMoveDamage\n\ + mov r8, r3\n\ +_0802040A:\n\ + ldr r0, _08020444 @ =gBattleTypeFlags\n\ + ldrh r0, [r0]\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _08020488\n\ + ldr r1, _08020448 @ =gBattlePartyID\n\ + ldr r0, _0802044C @ =0x02000000\n\ + ldr r3, _08020450 @ =0x00016018\n\ + adds r2, r0, r3\n\ + ldrh r1, [r1, 0x4]\n\ + adds r5, r0, 0\n\ + ldr r4, _08020454 @ =gBitTable\n\ + ldr r3, _08020458 @ =gAbsentBankFlags\n\ + ldrb r2, [r2]\n\ + cmp r1, r2\n\ + bne _08020460\n\ + ldrb r1, [r3]\n\ + ldr r0, [r4, 0x8]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _08020460\n\ + ldr r0, _0802045C @ =0x000160a2\n\ + adds r1, r5, r0\n\ + b _0802047C\n\ + .align 2, 0\n\ +_0802043C: .4byte 0x00000149\n\ +_08020440: .4byte gBattleMoveDamage\n\ +_08020444: .4byte gBattleTypeFlags\n\ +_08020448: .4byte gBattlePartyID\n\ +_0802044C: .4byte 0x02000000\n\ +_08020450: .4byte 0x00016018\n\ +_08020454: .4byte gBitTable\n\ +_08020458: .4byte gAbsentBankFlags\n\ +_0802045C: .4byte 0x000160a2\n\ +_08020460:\n\ + ldrb r2, [r3]\n\ + ldr r0, [r4]\n\ + ands r2, r0\n\ + cmp r2, 0\n\ + bne _08020478\n\ + ldr r1, _08020474 @ =0x000160a2\n\ + adds r0, r5, r1\n\ + strb r2, [r0]\n\ + b _08020490\n\ + .align 2, 0\n\ +_08020474: .4byte 0x000160a2\n\ +_08020478:\n\ + ldr r2, _08020484 @ =0x000160a2\n\ + adds r1, r5, r2\n\ +_0802047C:\n\ + movs r0, 0x2\n\ + strb r0, [r1]\n\ + b _08020490\n\ + .align 2, 0\n\ +_08020484: .4byte 0x000160a2\n\ +_08020488:\n\ + ldr r0, _08020530 @ =0x02000000\n\ + ldr r3, _08020534 @ =0x000160a2\n\ + adds r0, r3\n\ + strb r1, [r0]\n\ +_08020490:\n\ + ldr r1, _08020538 @ =gBattleTextBuff1\n\ + movs r3, 0\n\ + movs r2, 0xFD\n\ + strb r2, [r1]\n\ + movs r5, 0x4\n\ + strb r5, [r1, 0x1]\n\ + ldr r4, _08020530 @ =0x02000000\n\ + ldr r0, _08020534 @ =0x000160a2\n\ + adds r6, r4, r0\n\ + ldrb r0, [r6]\n\ + strb r0, [r1, 0x2]\n\ + ldr r0, _0802053C @ =0x00016018\n\ + adds r4, r0\n\ + ldrb r0, [r4]\n\ + strb r0, [r1, 0x3]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x4]\n\ + ldr r1, _08020540 @ =gBattleTextBuff2\n\ + strb r2, [r1]\n\ + strb r3, [r1, 0x1]\n\ + strb r7, [r1, 0x2]\n\ + movs r3, 0xFF\n\ + lsls r3, 8\n\ + ands r7, r3\n\ + asrs r0, r7, 8\n\ + strb r0, [r1, 0x3]\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + strb r0, [r1, 0x4]\n\ + ldr r1, _08020544 @ =gBattleTextBuff3\n\ + strb r2, [r1]\n\ + movs r0, 0x1\n\ + strb r0, [r1, 0x1]\n\ + strb r5, [r1, 0x2]\n\ + movs r0, 0x5\n\ + strb r0, [r1, 0x3]\n\ + mov r0, r8\n\ + ldr r2, [r0]\n\ + strb r2, [r1, 0x4]\n\ + adds r0, r2, 0\n\ + ands r0, r3\n\ + asrs r0, 8\n\ + strb r0, [r1, 0x5]\n\ + movs r0, 0xFF\n\ + lsls r0, 16\n\ + ands r0, r2\n\ + asrs r0, 16\n\ + strb r0, [r1, 0x6]\n\ + lsrs r2, 24\n\ + strb r2, [r1, 0x7]\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + strb r0, [r1, 0x8]\n\ + ldrb r1, [r6]\n\ + movs r0, 0xD\n\ + bl PrepareStringBattle\n\ + ldrb r1, [r4]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _08020548 @ =gPlayerParty\n\ + adds r0, r1\n\ + ldr r3, _0802054C @ =gBattleMons\n\ + ldr r1, _08020550 @ =gBank1\n\ + ldrb r2, [r1]\n\ + movs r1, 0x58\n\ + muls r1, r2\n\ + adds r1, r3\n\ + ldrh r1, [r1]\n\ + bl MonGainEVs\n\ +_0802051E:\n\ + ldr r1, _08020530 @ =0x02000000\n\ + ldr r3, _08020554 @ =0x0001605f\n\ + adds r2, r1, r3\n\ + ldrb r0, [r2]\n\ + lsrs r0, 1\n\ + strb r0, [r2]\n\ + ldr r0, _08020558 @ =0x0001600f\n\ + adds r1, r0\n\ + b _08020618\n\ + .align 2, 0\n\ +_08020530: .4byte 0x02000000\n\ +_08020534: .4byte 0x000160a2\n\ +_08020538: .4byte gBattleTextBuff1\n\ +_0802053C: .4byte 0x00016018\n\ +_08020540: .4byte gBattleTextBuff2\n\ +_08020544: .4byte gBattleTextBuff3\n\ +_08020548: .4byte gPlayerParty\n\ +_0802054C: .4byte gBattleMons\n\ +_08020550: .4byte gBank1\n\ +_08020554: .4byte 0x0001605f\n\ +_08020558: .4byte 0x0001600f\n\ +_0802055C:\n\ + ldr r0, _08020620 @ =gBattleExecBuffer\n\ + ldr r2, [r0]\n\ + cmp r2, 0\n\ + beq _08020566\n\ + b _08020996\n\ +_08020566:\n\ + ldr r1, _08020624 @ =gBattleBufferB\n\ + ldr r4, _08020628 @ =0x02000000\n\ + ldr r3, _0802062C @ =0x000160a2\n\ + adds r3, r4\n\ + mov r8, r3\n\ + ldrb r0, [r3]\n\ + lsls r0, 9\n\ + adds r0, r1\n\ + strb r2, [r0]\n\ + ldr r0, _08020630 @ =0x00016018\n\ + adds r7, r4, r0\n\ + ldrb r0, [r7]\n\ + movs r6, 0x64\n\ + muls r0, r6\n\ + ldr r5, _08020634 @ =gPlayerParty\n\ + adds r0, r5\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _08020612\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + cmp r0, 0x64\n\ + beq _08020612\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + movs r1, 0x3A\n\ + bl GetMonData\n\ + ldr r1, _08020638 @ =0x00017180\n\ + adds r4, r1\n\ + strh r0, [r4]\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + movs r1, 0x3B\n\ + bl GetMonData\n\ + strh r0, [r4, 0x2]\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + movs r1, 0x3C\n\ + bl GetMonData\n\ + strh r0, [r4, 0x4]\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + movs r1, 0x3D\n\ + bl GetMonData\n\ + strh r0, [r4, 0x6]\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + movs r1, 0x3E\n\ + bl GetMonData\n\ + strh r0, [r4, 0x8]\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r5\n\ + movs r1, 0x3F\n\ + bl GetMonData\n\ + strh r0, [r4, 0xA]\n\ + ldr r4, _0802063C @ =gActiveBank\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + strb r0, [r4]\n\ + ldrb r1, [r7]\n\ + ldr r0, _08020640 @ =gBattleMoveDamage\n\ + ldrh r2, [r0]\n\ + movs r0, 0\n\ + bl EmitExpBarUpdate\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ +_08020612:\n\ + ldr r1, _08020628 @ =0x02000000\n\ + ldr r3, _08020644 @ =0x0001600f\n\ + adds r1, r3\n\ +_08020618:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + b _08020996\n\ + .align 2, 0\n\ +_08020620: .4byte gBattleExecBuffer\n\ +_08020624: .4byte gBattleBufferB\n\ +_08020628: .4byte 0x02000000\n\ +_0802062C: .4byte 0x000160a2\n\ +_08020630: .4byte 0x00016018\n\ +_08020634: .4byte gPlayerParty\n\ +_08020638: .4byte 0x00017180\n\ +_0802063C: .4byte gActiveBank\n\ +_08020640: .4byte gBattleMoveDamage\n\ +_08020644: .4byte 0x0001600f\n\ +_08020648:\n\ + ldr r0, _080208AC @ =gBattleExecBuffer\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _08020652\n\ + b _08020996\n\ +_08020652:\n\ + ldr r1, _080208B0 @ =gActiveBank\n\ + ldr r4, _080208B4 @ =0x02000000\n\ + ldr r2, _080208B8 @ =0x000160a2\n\ + adds r0, r4, r2\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldr r2, _080208BC @ =gBattleBufferB\n\ + ldrb r3, [r1]\n\ + lsls r1, r3, 9\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x21\n\ + beq _0802066E\n\ + b _080208F0\n\ +_0802066E:\n\ + adds r0, r2, 0x1\n\ + adds r0, r1, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xB\n\ + beq _0802067A\n\ + b _080208F0\n\ +_0802067A:\n\ + ldr r0, _080208C0 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080206A8\n\ + ldr r1, _080208C4 @ =gBattlePartyID\n\ + lsls r0, r3, 1\n\ + adds r2, r0, r1\n\ + ldr r0, _080208C8 @ =0x00016018\n\ + adds r1, r4, r0\n\ + ldrh r0, [r2]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bne _080206A8\n\ + adds r1, r0, 0\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _080208CC @ =gPlayerParty\n\ + adds r0, r1\n\ + adds r1, r3, 0\n\ + bl sub_80324F8\n\ +_080206A8:\n\ + ldr r1, _080208D0 @ =gBattleTextBuff1\n\ + movs r2, 0xFD\n\ + strb r2, [r1]\n\ + movs r0, 0x4\n\ + strb r0, [r1, 0x1]\n\ + ldr r5, _080208B0 @ =gActiveBank\n\ + ldrb r0, [r5]\n\ + strb r0, [r1, 0x2]\n\ + ldr r0, _080208B4 @ =0x02000000\n\ + ldr r3, _080208C8 @ =0x00016018\n\ + adds r6, r0, r3\n\ + ldrb r0, [r6]\n\ + strb r0, [r1, 0x3]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x4]\n\ + ldr r4, _080208D4 @ =gBattleTextBuff2\n\ + strb r2, [r4]\n\ + movs r0, 0x1\n\ + strb r0, [r4, 0x1]\n\ + strb r0, [r4, 0x2]\n\ + movs r0, 0x3\n\ + strb r0, [r4, 0x3]\n\ + ldrb r0, [r6]\n\ + movs r1, 0x64\n\ + mov r8, r1\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + ldr r7, _080208CC @ =gPlayerParty\n\ + adds r0, r7\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + strb r0, [r4, 0x4]\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + strb r0, [r4, 0x5]\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r2, _080208D8 @ =gLeveledUpInBattle\n\ + ldr r1, _080208DC @ =gBitTable\n\ + ldrb r0, [r6]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r1, _080208E0 @ =gBattlescriptCurrInstr\n\ + ldr r0, _080208E4 @ =BattleScript_LevelUp\n\ + str r0, [r1]\n\ + ldr r4, _080208E8 @ =gBattleMoveDamage\n\ + ldr r2, _080208BC @ =gBattleBufferB\n\ + ldrb r1, [r5]\n\ + lsls r1, 9\n\ + adds r0, r2, 0x2\n\ + adds r0, r1, r0\n\ + ldrb r3, [r0]\n\ + adds r2, 0x3\n\ + adds r1, r2\n\ + ldrb r0, [r1]\n\ + lsls r0, 8\n\ + orrs r3, r0\n\ + str r3, [r4]\n\ + ldrb r0, [r6]\n\ + mov r3, r8\n\ + muls r3, r0\n\ + adds r0, r3, 0\n\ + adds r0, r7\n\ + movs r1, 0\n\ + bl AdjustFriendship\n\ + ldr r0, _080208C4 @ =gBattlePartyID\n\ + ldrb r1, [r6]\n\ + ldrh r0, [r0]\n\ + cmp r0, r1\n\ + bne _080207EC\n\ + ldr r4, _080208EC @ =gBattleMons\n\ + ldrh r0, [r4, 0x28]\n\ + cmp r0, 0\n\ + beq _080207EC\n\ + mov r0, r8\n\ + muls r0, r1\n\ + adds r0, r7\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + adds r1, r4, 0\n\ + adds r1, 0x2A\n\ + strb r0, [r1]\n\ + ldrb r0, [r6]\n\ + mov r1, r8\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + adds r0, r7\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + strh r0, [r4, 0x28]\n\ + ldrb r0, [r6]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + adds r0, r7\n\ + movs r1, 0x3A\n\ + bl GetMonData\n\ + strh r0, [r4, 0x2C]\n\ + ldrb r0, [r6]\n\ + mov r3, r8\n\ + muls r3, r0\n\ + adds r0, r3, 0\n\ + adds r0, r7\n\ + movs r1, 0x3B\n\ + bl GetMonData\n\ + strh r0, [r4, 0x2]\n\ + ldrb r0, [r6]\n\ + mov r1, r8\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + adds r0, r7\n\ + movs r1, 0x3C\n\ + bl GetMonData\n\ + strh r0, [r4, 0x4]\n\ + ldrb r0, [r6]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + adds r0, r7\n\ + movs r1, 0x3D\n\ + bl GetMonData\n\ + strh r0, [r4, 0x6]\n\ + ldrb r0, [r6]\n\ + mov r3, r8\n\ + muls r3, r0\n\ + adds r0, r3, 0\n\ + adds r0, r7\n\ + movs r1, 0x3D\n\ + bl GetMonData\n\ + strh r0, [r4, 0x6]\n\ + ldrb r0, [r6]\n\ + mov r1, r8\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + adds r0, r7\n\ + movs r1, 0x3E\n\ + bl GetMonData\n\ + strh r0, [r4, 0x8]\n\ + ldrb r0, [r6]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + adds r0, r7\n\ + movs r1, 0x3F\n\ + bl GetMonData\n\ + strh r0, [r4, 0xA]\n\ +_080207EC:\n\ + ldr r0, _080208C4 @ =gBattlePartyID\n\ + ldr r1, _080208B4 @ =0x02000000\n\ + ldr r3, _080208C8 @ =0x00016018\n\ + adds r7, r1, r3\n\ + ldrb r2, [r7]\n\ + ldrh r0, [r0, 0x4]\n\ + cmp r0, r2\n\ + bne _080208F6\n\ + ldr r6, _080208EC @ =gBattleMons\n\ + movs r0, 0xD8\n\ + adds r0, r6\n\ + mov r8, r0\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + beq _080208F6\n\ + ldr r0, _080208C0 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080208F6\n\ + movs r5, 0x64\n\ + adds r0, r2, 0\n\ + muls r0, r5\n\ + ldr r4, _080208CC @ =gPlayerParty\n\ + adds r0, r4\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + adds r1, r6, 0\n\ + adds r1, 0xDA\n\ + strb r0, [r1]\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r4\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + mov r1, r8\n\ + strh r0, [r1]\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r4\n\ + movs r1, 0x3A\n\ + bl GetMonData\n\ + adds r1, r6, 0\n\ + adds r1, 0xDC\n\ + strh r0, [r1]\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r4\n\ + movs r1, 0x3B\n\ + bl GetMonData\n\ + adds r1, r6, 0\n\ + adds r1, 0xB2\n\ + strh r0, [r1]\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r4\n\ + movs r1, 0x3C\n\ + bl GetMonData\n\ + adds r1, r6, 0\n\ + adds r1, 0xB4\n\ + strh r0, [r1]\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r4\n\ + movs r1, 0x3D\n\ + bl GetMonData\n\ + movs r2, 0xB6\n\ + adds r2, r6\n\ + mov r8, r2\n\ + strh r0, [r2]\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r4\n\ + movs r1, 0x3D\n\ + bl GetMonData\n\ + mov r3, r8\n\ + strh r0, [r3]\n\ + ldrb r0, [r7]\n\ + muls r0, r5\n\ + adds r0, r4\n\ + movs r1, 0x3E\n\ + bl GetMonData\n\ + adds r1, r6, 0\n\ + adds r1, 0xB8\n\ + strh r0, [r1]\n\ + b _080208F6\n\ + .align 2, 0\n\ +_080208AC: .4byte gBattleExecBuffer\n\ +_080208B0: .4byte gActiveBank\n\ +_080208B4: .4byte 0x02000000\n\ +_080208B8: .4byte 0x000160a2\n\ +_080208BC: .4byte gBattleBufferB\n\ +_080208C0: .4byte gBattleTypeFlags\n\ +_080208C4: .4byte gBattlePartyID\n\ +_080208C8: .4byte 0x00016018\n\ +_080208CC: .4byte gPlayerParty\n\ +_080208D0: .4byte gBattleTextBuff1\n\ +_080208D4: .4byte gBattleTextBuff2\n\ +_080208D8: .4byte gLeveledUpInBattle\n\ +_080208DC: .4byte gBitTable\n\ +_080208E0: .4byte gBattlescriptCurrInstr\n\ +_080208E4: .4byte BattleScript_LevelUp\n\ +_080208E8: .4byte gBattleMoveDamage\n\ +_080208EC: .4byte gBattleMons\n\ +_080208F0:\n\ + ldr r1, _08020904 @ =gBattleMoveDamage\n\ + movs r0, 0\n\ + str r0, [r1]\n\ +_080208F6:\n\ + ldr r0, _08020908 @ =0x02000000\n\ + ldr r1, _0802090C @ =0x0001600f\n\ + adds r0, r1\n\ + movs r1, 0x5\n\ + strb r1, [r0]\n\ + b _08020996\n\ + .align 2, 0\n\ +_08020904: .4byte gBattleMoveDamage\n\ +_08020908: .4byte 0x02000000\n\ +_0802090C: .4byte 0x0001600f\n\ +_08020910:\n\ + ldr r0, _08020924 @ =gBattleMoveDamage\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _08020930\n\ + ldr r0, _08020928 @ =0x02000000\n\ + ldr r2, _0802092C @ =0x0001600f\n\ + adds r0, r2\n\ + movs r1, 0x3\n\ + strb r1, [r0]\n\ + b _08020996\n\ + .align 2, 0\n\ +_08020924: .4byte gBattleMoveDamage\n\ +_08020928: .4byte 0x02000000\n\ +_0802092C: .4byte 0x0001600f\n\ +_08020930:\n\ + ldr r2, _08020950 @ =0x02000000\n\ + ldr r3, _08020954 @ =0x00016018\n\ + adds r1, r2, r3\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x5\n\ + bhi _0802095C\n\ + ldr r0, _08020958 @ =0x0001600f\n\ + adds r1, r2, r0\n\ + movs r0, 0x2\n\ + strb r0, [r1]\n\ + b _08020996\n\ + .align 2, 0\n\ +_08020950: .4byte 0x02000000\n\ +_08020954: .4byte 0x00016018\n\ +_08020958: .4byte 0x0001600f\n\ +_0802095C:\n\ + ldr r3, _08020968 @ =0x0001600f\n\ + adds r1, r2, r3\n\ + movs r0, 0x6\n\ + strb r0, [r1]\n\ + b _08020996\n\ + .align 2, 0\n\ +_08020968: .4byte 0x0001600f\n\ +_0802096C:\n\ + ldr r0, _080209A4 @ =gBattleExecBuffer\n\ + ldr r5, [r0]\n\ + cmp r5, 0\n\ + bne _08020996\n\ + ldr r4, _080209A8 @ =gBattleMons\n\ + ldr r2, _080209AC @ =gBank1\n\ + ldrb r0, [r2]\n\ + movs r1, 0x58\n\ + muls r0, r1\n\ + adds r0, r4\n\ + movs r3, 0\n\ + strh r5, [r0, 0x2E]\n\ + ldrb r0, [r2]\n\ + muls r0, r1\n\ + adds r0, r4\n\ + adds r0, 0x20\n\ + strb r3, [r0]\n\ + ldr r1, _080209B0 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x2\n\ + str r0, [r1]\n\ +_08020996:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080209A4: .4byte gBattleExecBuffer\n\ +_080209A8: .4byte gBattleMons\n\ +_080209AC: .4byte gBank1\n\ +_080209B0: .4byte gBattlescriptCurrInstr\n\ + .syntax divided\n"); +} + +#endif // NONMATCHING + +#ifdef NONMATCHING +static void atk24(void) +{ + u16 HP_count = 0; + int i; + if (gBattleExecBuffer) {return;} + + for (i = 0; i < 6; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP); + } + + if (HP_count == 0) + gBattleOutcome |= BATTLE_LOST; + + for (HP_count = 0, i = 0; i < 6; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG)) + HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP); + } + + if (!HP_count) + gBattleOutcome |= BATTLE_WON; + + if (!gBattleOutcome && (gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + register int found1 asm("r2"); + register int found2 asm("r4"); + + //I can't for the love of god decompile that part + + for (found1 = 0, i = 0; i < gNoOfAllBanks; i += 2) + { + if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40) + found1++; + } + + for (found2 = 0, i = 1; i < gNoOfAllBanks; i += 2) + { + if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40) + found2++; + } + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (found2 + found1 > 1) + gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; + } + else + { + if (found2 != 0 && found1 != 0) + gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; + } + } + else + gBattlescriptCurrInstr += 5; + +} +#else +__attribute__((naked)) +static void atk24(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + movs r6, 0\n\ + ldr r0, _08020AF0 @ =gBattleExecBuffer\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _080209C6\n\ + b _08020B46\n\ +_080209C6:\n\ + movs r5, 0\n\ +_080209C8:\n\ + movs r0, 0x64\n\ + adds r1, r5, 0\n\ + muls r1, r0\n\ + ldr r0, _08020AF4 @ =gPlayerParty\n\ + adds r4, r1, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _080209F8\n\ + adds r0, r4, 0\n\ + movs r1, 0x2D\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _080209F8\n\ + adds r0, r4, 0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + adds r0, r6, r0\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ +_080209F8:\n\ + adds r5, 0x1\n\ + cmp r5, 0x5\n\ + ble _080209C8\n\ + cmp r6, 0\n\ + bne _08020A0C\n\ + ldr r0, _08020AF8 @ =gBattleOutcome\n\ + ldrb r1, [r0]\n\ + movs r2, 0x2\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_08020A0C:\n\ + movs r6, 0\n\ + movs r5, 0\n\ +_08020A10:\n\ + movs r0, 0x64\n\ + adds r1, r5, 0\n\ + muls r1, r0\n\ + ldr r0, _08020AFC @ =gEnemyParty\n\ + adds r4, r1, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _08020A40\n\ + adds r0, r4, 0\n\ + movs r1, 0x2D\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _08020A40\n\ + adds r0, r4, 0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + adds r0, r6, r0\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ +_08020A40:\n\ + adds r5, 0x1\n\ + cmp r5, 0x5\n\ + ble _08020A10\n\ + ldr r2, _08020AF8 @ =gBattleOutcome\n\ + cmp r6, 0\n\ + bne _08020A54\n\ + ldrb r0, [r2]\n\ + movs r1, 0x1\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ +_08020A54:\n\ + ldrb r0, [r2]\n\ + cmp r0, 0\n\ + bne _08020B3E\n\ + ldr r2, _08020B00 @ =gBattleTypeFlags\n\ + ldrh r1, [r2]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + mov r8, r2\n\ + cmp r0, 0\n\ + beq _08020B3E\n\ + movs r2, 0\n\ + movs r5, 0\n\ + ldr r0, _08020B04 @ =gNoOfAllBanks\n\ + ldrb r3, [r0]\n\ + mov r12, r0\n\ + ldr r7, _08020B08 @ =gBattlescriptCurrInstr\n\ + cmp r2, r3\n\ + bge _08020AA0\n\ + ldr r0, _08020B0C @ =gHitMarker\n\ + movs r1, 0x80\n\ + lsls r1, 21\n\ + ldr r6, [r0]\n\ + adds r4, r3, 0\n\ + ldr r3, _08020B10 @ =gSpecialStatuses\n\ +_08020A84:\n\ + adds r0, r1, 0\n\ + lsls r0, r5\n\ + ands r0, r6\n\ + cmp r0, 0\n\ + beq _08020A98\n\ + ldrb r0, [r3]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08020A98\n\ + adds r2, 0x1\n\ +_08020A98:\n\ + adds r3, 0x28\n\ + adds r5, 0x2\n\ + cmp r5, r4\n\ + blt _08020A84\n\ +_08020AA0:\n\ + movs r4, 0\n\ + movs r5, 0x1\n\ + mov r0, r12\n\ + ldrb r3, [r0]\n\ + cmp r5, r3\n\ + bge _08020ADA\n\ + ldr r0, _08020B0C @ =gHitMarker\n\ + movs r1, 0x80\n\ + lsls r1, 21\n\ + mov r12, r1\n\ + ldr r1, [r0]\n\ + ldr r0, _08020B10 @ =gSpecialStatuses\n\ + adds r6, r3, 0\n\ + adds r3, r0, 0\n\ + adds r3, 0x14\n\ +_08020ABE:\n\ + mov r0, r12\n\ + lsls r0, r5\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08020AD2\n\ + ldrb r0, [r3]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08020AD2\n\ + adds r4, 0x1\n\ +_08020AD2:\n\ + adds r3, 0x28\n\ + adds r5, 0x2\n\ + cmp r5, r6\n\ + blt _08020ABE\n\ +_08020ADA:\n\ + mov r0, r8\n\ + ldrh r1, [r0]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08020B14\n\ + adds r0, r4, r2\n\ + cmp r0, 0x1\n\ + bgt _08020B1C\n\ + b _08020B36\n\ + .align 2, 0\n\ +_08020AF0: .4byte gBattleExecBuffer\n\ +_08020AF4: .4byte gPlayerParty\n\ +_08020AF8: .4byte gBattleOutcome\n\ +_08020AFC: .4byte gEnemyParty\n\ +_08020B00: .4byte gBattleTypeFlags\n\ +_08020B04: .4byte gNoOfAllBanks\n\ +_08020B08: .4byte gBattlescriptCurrInstr\n\ +_08020B0C: .4byte gHitMarker\n\ +_08020B10: .4byte gSpecialStatuses\n\ +_08020B14:\n\ + cmp r4, 0\n\ + beq _08020B36\n\ + cmp r2, 0\n\ + beq _08020B36\n\ +_08020B1C:\n\ + ldr r2, [r7]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + adds r1, r0\n\ + str r1, [r7]\n\ + b _08020B46\n\ +_08020B36:\n\ + ldr r0, [r7]\n\ + adds r0, 0x5\n\ + str r0, [r7]\n\ + b _08020B46\n\ +_08020B3E:\n\ + ldr r1, _08020B50 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x5\n\ + str r0, [r1]\n\ +_08020B46:\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08020B50: .4byte gBattlescriptCurrInstr\n\ + .syntax divided\n"); +} +#endif + +static void MoveValuesCleanUp(void) +{ + gBattleMoveFlags = 0; + BATTLE_STRUCT->dmgMultiplier = 1; + gCritMultiplier = 1; + gBattleCommunication[MOVE_EFFECT_BYTE] = 0; + gBattleCommunication[6] = 0; + gHitMarker &= ~(HITMARKER_DESTINYBOND); + gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); +} + +static void atk25_move_values_cleanup(void) +{ + MoveValuesCleanUp(); + gBattlescriptCurrInstr += 1; +} + +static void atk26_set_multihit(void) +{ + gMultiHitCounter = BSScriptRead8(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr += 2; +} + +static void atk27_decrement_multihit(void) +{ + if (--gMultiHitCounter == 0) + gBattlescriptCurrInstr += 5; + else + gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atk28_goto(void) +{ + gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atk29_jumpifbyte(void) +{ + u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1); + u8* ptr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); + u8 value = BSScriptRead8(gBattlescriptCurrInstr + 6); + u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7); + gBattlescriptCurrInstr += 11; + switch (caseID) + { + case CMP_EQUAL: + if (*ptr == value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_NOT_EQUAL: + if (*ptr != value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_GREATER_THAN: + if (*ptr > value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_LESS_THAN: + if (*ptr < value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_COMMON_BITS: + if (*ptr & value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_NO_COMMON_BITS: + if (!(*ptr & value)) + gBattlescriptCurrInstr = jump_loc; + break; + } +} + +static void atk2A_jumpifhalfword(void) +{ + u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1); + u16* ptr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); + u16 value = BS2ScriptRead16(gBattlescriptCurrInstr + 6); + u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 8); + gBattlescriptCurrInstr += 12; + switch (caseID) + { + case CMP_EQUAL: + if (*ptr == value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_NOT_EQUAL: + if (*ptr != value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_GREATER_THAN: + if (*ptr > value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_LESS_THAN: + if (*ptr < value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_COMMON_BITS: + if (*ptr & value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_NO_COMMON_BITS: + if (!(*ptr & value)) + gBattlescriptCurrInstr = jump_loc; + break; + } +} + +static void atk2B_jumpifword(void) +{ + u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1); + u32* ptr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); + u32 value = BSScriptRead32(gBattlescriptCurrInstr + 6); + u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); + gBattlescriptCurrInstr += 14; + switch (caseID) + { + case CMP_EQUAL: + if (*ptr == value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_NOT_EQUAL: + if (*ptr != value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_GREATER_THAN: + if (*ptr > value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_LESS_THAN: + if (*ptr < value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_COMMON_BITS: + if (*ptr & value) + gBattlescriptCurrInstr = jump_loc; + break; + case CMP_NO_COMMON_BITS: + if (!(*ptr & value)) + gBattlescriptCurrInstr = jump_loc; + break; + } +} + +static void atk2C_jumpifarrayequal(void) +{ + //Mem1, Mem2, Size, Jump Loc + u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + u32 size = BSScriptRead8(gBattlescriptCurrInstr + 9); + u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); + + u8 i; + for (i = 0; i < size; i++) + { + if (*mem1 != *mem2) + { + gBattlescriptCurrInstr += 14; + break; + } + mem1++, mem2++; + } + + if (i == size) + gBattlescriptCurrInstr = jump_loc; +} + +static void atk2D_jumpifarraynotequal(void) +{ + //Mem1, Mem2, Size, Jump Loc + u8 equal_bytes = 0; + u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + u32 size = BSScriptRead8(gBattlescriptCurrInstr + 9); + u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); + + u8 i; + for (i = 0; i < size; i++) + { + if (*mem1 == *mem2) + { + equal_bytes++; + } + mem1++, mem2++; + } + + if (equal_bytes != size) + gBattlescriptCurrInstr = jump_loc; + else + gBattlescriptCurrInstr += 14; +} + +static void atk2E_setbyte(void) +{ + u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + *mem = BSScriptRead8(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr += 6; +} + +static void atk2F_addbyte(void) +{ + u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + *mem += BSScriptRead8(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr += 6; +} + +static void atk30_subbyte(void) +{ + u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + *mem -= BSScriptRead8(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr += 6; +} + +static void atk31_copyarray(void) +{ + u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + s32 size = BSScriptRead8(gBattlescriptCurrInstr + 9); + + s32 i; + for (i = 0; i < size; i++) + { + mem1[i] = mem2[i]; + } + + gBattlescriptCurrInstr += 10; +} + +static void atk32_copyarray_withindex(void) +{ + u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + u8* index = BS2ScriptReadPtr(gBattlescriptCurrInstr + 9); + s32 size = BSScriptRead8(gBattlescriptCurrInstr + 13); + + s32 i; + for (i = 0; i < size; i++) + { + mem1[i] = mem2[i + *index]; + } + + gBattlescriptCurrInstr += 14; +} + +static void atk33_orbyte(void) +{ + u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + *mem |= BSScriptRead8(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr += 6; +} + +static void atk34_orhalfword(void) +{ + u16* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u16 val = BS2ScriptRead16(gBattlescriptCurrInstr + 5); + + *mem |= val; + gBattlescriptCurrInstr += 7; +} + +static void atk35_orword(void) +{ + u32* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u32 val = BS2ScriptRead32(gBattlescriptCurrInstr + 5); + + *mem |= val; + gBattlescriptCurrInstr += 9; +} + +static void atk36_bicbyte(void) +{ + u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + *mem &= ~(BSScriptRead8(gBattlescriptCurrInstr + 5)); + gBattlescriptCurrInstr += 6; +} + +static void atk37_bichalfword(void) +{ + u16* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u16 val = BS2ScriptRead16(gBattlescriptCurrInstr + 5); + + *mem &= ~val; + gBattlescriptCurrInstr += 7; +} + +static void atk38_bicword(void) +{ + u32* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u32 val = BS2ScriptRead32(gBattlescriptCurrInstr + 5); + + *mem &= ~val; + gBattlescriptCurrInstr += 9; +} + +static void atk39_pause(void) +{ + if (gBattleExecBuffer == 0) + { + u16 value = BS2ScriptRead16(gBattlescriptCurrInstr + 1); + if (++gPauseCounterBattle >= value) + { + gPauseCounterBattle = 0; + gBattlescriptCurrInstr += 3; + } + } +} + +static void atk3A_waitstate(void) +{ + if (gBattleExecBuffer == 0) + gBattlescriptCurrInstr++; +} + +static void atk3B_healthbar_update(void) +{ + if (!BSScriptRead8(gBattlescriptCurrInstr + 1)) + gActiveBank = gBankTarget; + else + gActiveBank = gBankAttacker; + + EmitHealthBarUpdate(0, gBattleMoveDamage); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk3C_return(void) +{ + b_movescr_stack_pop_cursor(); +} + +static void atk3D_end(void) +{ + gBattleMoveFlags = 0; + gActiveBank = 0; + gFightStateTracker = 0xB; +} + +static void atk3E_end2(void) +{ + //not much difference between this and 3D. It's more apparent in Emerald + gActiveBank = 0; + gFightStateTracker = 0xB; +} + +static void atk3F_end3(void) //pops the main function stack +{ + b_movescr_stack_pop_cursor(); + if (B_FUNCTION_STACK->size) + B_FUNCTION_STACK->size--; + gBattleMainFunc = B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size]; +} + +static void atk41_call(void) +{ + b_movescr_stack_push(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atk42_jumpiftype2(void) //u8 bank, u8 type, *ptr +{ + u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + + if (BSScriptRead8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type1 || BSScriptRead8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type2) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 3); + else + gBattlescriptCurrInstr += 7; +} + +static void atk43_jumpifabilitypresent(void) +{ + if (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, BSScriptRead8(gBattlescriptCurrInstr + 1), 0, 0)) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; +} + +static void atk44(void) +{ + unk_2000000[gBankAttacker + 0x16060] = 1; +} + +#ifdef NONMATCHING + +static void atk45_playanimation(void) +{ + #define ANIMATION_ID BSScriptRead8(gBattlescriptCurrInstr + 2) + #define ARGUMENT (u16*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 3) + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + + if ( ANIMATION_ID == 1 || ANIMATION_ID == 0x11 || ANIMATION_ID == 2) { + EmitBattleAnimation(0, ANIMATION_ID, *argument); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 7; + } else if (gHitMarker & HITMARKER_NO_ANIMATIONS) { + b_movescr_stack_push(gBattlescriptCurrInstr + 7); + gBattlescriptCurrInstr = BattleScript_Pausex20; + } else { + if (((ANIMATION_ID - 10) > 3 && gStatuses3[gActiveBank] & (STATUS3_SEMI_INVULNERABLE))) { + gBattlescriptCurrInstr += 7; + } else { + EmitBattleAnimation(0, ANIMATION_ID, *argument); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 7; + } + } +} + +#else +__attribute__((naked)) +static void atk45_playanimation(void) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + ldr r5, _08021444 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r5]\n\ + ldrb r0, [r0, 0x1]\n\ + bl GetBattleBank\n\ + ldr r6, _08021448 @ =gActiveBank\n\ + strb r0, [r6]\n\ + ldr r2, [r5]\n\ + ldrb r1, [r2, 0x3]\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 8\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x5]\n\ + lsls r0, 16\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x6]\n\ + lsls r0, 24\n\ + adds r3, r1, r0\n\ + ldrb r4, [r2, 0x2]\n\ + adds r0, r4, 0\n\ + cmp r0, 0x1\n\ + beq _08021426\n\ + cmp r0, 0x11\n\ + beq _08021426\n\ + cmp r0, 0x2\n\ + bne _0802144C\n\ +_08021426:\n\ + ldr r4, _08021444 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r4]\n\ + ldrb r1, [r0, 0x2]\n\ + ldrh r2, [r3]\n\ + movs r0, 0\n\ + bl EmitBattleAnimation\n\ + ldr r0, _08021448 @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, [r4]\n\ + adds r0, 0x7\n\ + str r0, [r4]\n\ + b _080214AE\n\ + .align 2, 0\n\ +_08021444: .4byte gBattlescriptCurrInstr\n\ +_08021448: .4byte gActiveBank\n\ +_0802144C:\n\ + ldr r0, _08021464 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0802146C\n\ + adds r0, r2, 0x7\n\ + bl b_movescr_stack_push\n\ + ldr r0, _08021468 @ =BattleScript_Pausex20\n\ + b _080214AC\n\ + .align 2, 0\n\ +_08021464: .4byte gHitMarker\n\ +_08021468: .4byte BattleScript_Pausex20\n\ +_0802146C:\n\ + adds r0, r4, 0\n\ + subs r0, 0xA\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x3\n\ + bls _08021498\n\ + ldr r1, _08021490 @ =gStatuses3\n\ + ldrb r0, [r6]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ldr r1, _08021494 @ =0x000400c0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021498\n\ + adds r0, r2, 0x7\n\ + b _080214AC\n\ + .align 2, 0\n\ +_08021490: .4byte gStatuses3\n\ +_08021494: .4byte 0x000400c0\n\ +_08021498:\n\ + ldrb r1, [r2, 0x2]\n\ + ldrh r2, [r3]\n\ + movs r0, 0\n\ + bl EmitBattleAnimation\n\ + ldrb r0, [r6]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, [r5]\n\ + adds r0, 0x7\n\ +_080214AC:\n\ + str r0, [r5]\n\ +_080214AE:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); +} +#endif // NONMATCHING + +#ifdef NONMATCHING +static void atk46_playanimation2(void) +{ + +} + +#else +__attribute__((naked)) +static void atk46_playanimation2(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + ldr r6, _0802151C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r6]\n\ + ldrb r0, [r0, 0x1]\n\ + bl GetBattleBank\n\ + ldr r7, _08021520 @ =gActiveBank\n\ + strb r0, [r7]\n\ + ldr r2, [r6]\n\ + ldrb r1, [r2, 0x2]\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 8\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 16\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x5]\n\ + lsls r0, 24\n\ + adds r3, r1, r0\n\ + ldrb r1, [r2, 0x6]\n\ + ldrb r0, [r2, 0x7]\n\ + lsls r0, 8\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x8]\n\ + lsls r0, 16\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x9]\n\ + lsls r0, 24\n\ + adds r4, r1, r0\n\ + ldrb r5, [r3]\n\ + adds r0, r5, 0\n\ + cmp r0, 0x1\n\ + beq _080214FE\n\ + cmp r0, 0x11\n\ + beq _080214FE\n\ + cmp r0, 0x2\n\ + bne _08021524\n\ +_080214FE:\n\ + ldrb r1, [r3]\n\ + ldrh r2, [r4]\n\ + movs r0, 0\n\ + bl EmitBattleAnimation\n\ + ldr r0, _08021520 @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + bl MarkBufferBankForExecution\n\ + ldr r1, _0802151C @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0xA\n\ + str r0, [r1]\n\ + b _0802157A\n\ + .align 2, 0\n\ +_0802151C: .4byte gBattlescriptCurrInstr\n\ +_08021520: .4byte gActiveBank\n\ +_08021524:\n\ + ldr r0, _08021534 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021538\n\ + adds r0, r2, 0\n\ + b _08021576\n\ + .align 2, 0\n\ +_08021534: .4byte gHitMarker\n\ +_08021538:\n\ + adds r0, r5, 0\n\ + subs r0, 0xA\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x3\n\ + bls _08021564\n\ + ldr r1, _0802155C @ =gStatuses3\n\ + ldrb r0, [r7]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ldr r1, _08021560 @ =0x000400c0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021564\n\ + adds r0, r2, 0\n\ + b _08021576\n\ + .align 2, 0\n\ +_0802155C: .4byte gStatuses3\n\ +_08021560: .4byte 0x000400c0\n\ +_08021564:\n\ + ldrb r1, [r3]\n\ + ldrh r2, [r4]\n\ + movs r0, 0\n\ + bl EmitBattleAnimation\n\ + ldrb r0, [r7]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, [r6]\n\ +_08021576:\n\ + adds r0, 0xA\n\ + str r0, [r6]\n\ +_0802157A:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided "); +} +#endif // NONMATCHING + +static void atk47_setgraphicalstatchangevalues(void) +{ + u8 to_add = 0; + switch (BATTLE_STRUCT->statChanger & 0xF0) + { + case 0x10: //+1 + to_add = 0xF; + break; + case 0x20: //+2 + to_add = 0x27; + break; + case 0x90: //-1 + to_add = 0x16; + break; + case 0xA0: //-2 + to_add = 0x2E; + break; + } + BATTLE_STRUCT->animArg1 = (BATTLE_STRUCT->statChanger & 0xF) + to_add - 1; + BATTLE_STRUCT->animArg2 = 0; + gBattlescriptCurrInstr++; +} + +#ifdef NONMATCHING +static void atk48_playstatchangeanimation(void) +{ + int curr_stat = 0; + u16 stat_animID = 0; + int changeable_stats = 0; + u32 stats_to_check; + u8 arg3; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + stats_to_check = BSScriptRead8(gBattlescriptCurrInstr + 2); + arg3 = BSScriptRead8(gBattlescriptCurrInstr + 3); + if (arg3 & 1) + { + u16 r1 = 0x15; + if (arg3 & 0x2) + r1 = 0x2D; + while (stats_to_check != 0) + { + if (!(stats_to_check & 1)) + continue; + if (!(BSScriptRead8(gBattlescriptCurrInstr + 3))) + { + u8 ability; + if (gSideTimer[GetBankIdentity(gActiveBank) & 1].mistTimer) + continue; + ability = gBattleMons[gActiveBank].ability; + if (ability == ABILITY_CLEAR_BODY || ability == ABILITY_WHITE_SMOKE || (ability == ABILITY_KEEN_EYE && curr_stat == 6) || (ability == ABILITY_HYPER_CUTTER && curr_stat == 1)) + continue; + } + if (gBattleMons[gActiveBank].statStages[curr_stat] > 0) + { + stat_animID = r1; + changeable_stats++; + } + + stats_to_check >>= 1; + r1 += 1; + curr_stat++; + } + if (changeable_stats > 1 && BSScriptRead8(gBattlescriptCurrInstr + 3) & 2) + stat_animID = 0x39; + else + stat_animID = 0x3A; + } + else + { + u16 r1 = 0x15; + if (arg3 & 0x2) + r1 = 0x2D; + while (stats_to_check != 0) + { + if (!(stats_to_check & 1)) + continue; + if (gBattleMons[gActiveBank].statStages[curr_stat] < 0xB) + { + stat_animID = r1; + changeable_stats++; + } + + stats_to_check >>= 1; + r1 += 1; + curr_stat++; + } + if (changeable_stats > 1 && BSScriptRead8(gBattlescriptCurrInstr + 3) & 2) + stat_animID = 0x37; + else + stat_animID = 0x38; + } + if ((BSScriptRead8(gBattlescriptCurrInstr + 3) & 2 && changeable_stats <= 1) + || changeable_stats == 0 || BATTLE_STRUCT->filler2[0] != 0) + gBattlescriptCurrInstr += 4; + else + { + EmitBattleAnimation(0, 1, stat_animID); + MarkBufferBankForExecution(gActiveBank); + if ((BSScriptRead8(gBattlescriptCurrInstr + 3) & 4) && changeable_stats > 1) + BATTLE_STRUCT->filler2[0] = 1; + gBattlescriptCurrInstr += 4; + } +} + +#else +__attribute__((naked)) +static void atk48_playstatchangeanimation(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\ + movs r7, 0\n\ + movs r0, 0\n\ + mov r8, r0\n\ + movs r3, 0\n\ + ldr r5, _08021670 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r5]\n\ + ldrb r0, [r0, 0x1]\n\ + str r3, [sp]\n\ + bl GetBattleBank\n\ + ldr r2, _08021674 @ =gActiveBank\n\ + strb r0, [r2]\n\ + ldr r0, [r5]\n\ + ldrb r4, [r0, 0x2]\n\ + ldrb r1, [r0, 0x3]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + ldr r3, [sp]\n\ + cmp r0, 0\n\ + beq _08021710\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + movs r1, 0x15\n\ + cmp r0, 0\n\ + beq _0802163C\n\ + movs r1, 0x2D\n\ +_0802163C:\n\ + cmp r4, 0\n\ + beq _080216E4\n\ + movs r0, 0x1\n\ + mov r10, r0\n\ + ldr r0, _08021678 @ =gUnknown_02024A98\n\ + mov r9, r0\n\ + lsls r5, r1, 16\n\ +_0802164A:\n\ + adds r0, r4, 0\n\ + mov r1, r10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080216D6\n\ + ldr r0, _08021670 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r0]\n\ + ldrb r1, [r0, 0x3]\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0802167C\n\ + ldr r0, _08021674 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r7, r0\n\ + b _080216C4\n\ + .align 2, 0\n\ +_08021670: .4byte gBattlescriptCurrInstr\n\ +_08021674: .4byte gActiveBank\n\ +_08021678: .4byte gUnknown_02024A98\n\ +_0802167C:\n\ + ldr r6, _08021700 @ =gActiveBank\n\ + ldrb r0, [r6]\n\ + str r3, [sp]\n\ + bl GetBankIdentity\n\ + mov r1, r10\n\ + ands r1, r0\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r1, _08021704 @ =gSideTimer\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0x2]\n\ + ldr r3, [sp]\n\ + cmp r0, 0\n\ + bne _080216D6\n\ + ldr r0, _08021708 @ =gBattleMons\n\ + ldrb r2, [r6]\n\ + movs r1, 0x58\n\ + muls r2, r1\n\ + adds r0, r2, r0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1D\n\ + beq _080216D6\n\ + cmp r0, 0x49\n\ + beq _080216D6\n\ + cmp r0, 0x33\n\ + bne _080216BA\n\ + cmp r7, 0x6\n\ + beq _080216D6\n\ +_080216BA:\n\ + cmp r0, 0x34\n\ + bne _080216C2\n\ + cmp r7, 0x1\n\ + beq _080216D6\n\ +_080216C2:\n\ + adds r0, r7, r2\n\ +_080216C4:\n\ + add r0, r9\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0\n\ + ble _080216D6\n\ + lsrs r0, r5, 16\n\ + mov r8, r0\n\ + adds r3, 0x1\n\ +_080216D6:\n\ + lsrs r4, 1\n\ + movs r1, 0x80\n\ + lsls r1, 9\n\ + adds r5, r1\n\ + adds r7, 0x1\n\ + cmp r4, 0\n\ + bne _0802164A\n\ +_080216E4:\n\ + ldr r0, _0802170C @ =gBattlescriptCurrInstr\n\ + mov r9, r0\n\ + cmp r3, 0x1\n\ + ble _08021772\n\ + ldr r0, [r0]\n\ + ldrb r1, [r0, 0x3]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + movs r1, 0x39\n\ + mov r8, r1\n\ + cmp r0, 0\n\ + beq _08021772\n\ + movs r0, 0x3A\n\ + b _08021770\n\ + .align 2, 0\n\ +_08021700: .4byte gActiveBank\n\ +_08021704: .4byte gSideTimer\n\ +_08021708: .4byte gBattleMons\n\ +_0802170C: .4byte gBattlescriptCurrInstr\n\ +_08021710:\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + movs r1, 0xE\n\ + cmp r0, 0\n\ + beq _0802171C\n\ + movs r1, 0x26\n\ +_0802171C:\n\ + mov r9, r5\n\ + cmp r4, 0\n\ + beq _08021758\n\ + ldr r6, _0802178C @ =gUnknown_02024A98\n\ + adds r5, r2, 0\n\ + lsls r2, r1, 16\n\ +_08021728:\n\ + movs r0, 0x1\n\ + ands r0, r4\n\ + cmp r0, 0\n\ + beq _0802174A\n\ + ldrb r1, [r5]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r7, r0\n\ + adds r0, r6\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0xB\n\ + bgt _0802174A\n\ + lsrs r1, r2, 16\n\ + mov r8, r1\n\ + adds r3, 0x1\n\ +_0802174A:\n\ + lsrs r4, 1\n\ + movs r0, 0x80\n\ + lsls r0, 9\n\ + adds r2, r0\n\ + adds r7, 0x1\n\ + cmp r4, 0\n\ + bne _08021728\n\ +_08021758:\n\ + cmp r3, 0x1\n\ + ble _08021772\n\ + mov r1, r9\n\ + ldr r0, [r1]\n\ + ldrb r1, [r0, 0x3]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + movs r1, 0x37\n\ + mov r8, r1\n\ + cmp r0, 0\n\ + beq _08021772\n\ + movs r0, 0x38\n\ +_08021770:\n\ + mov r8, r0\n\ +_08021772:\n\ + mov r1, r9\n\ + ldr r2, [r1]\n\ + ldrb r1, [r2, 0x3]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021790\n\ + cmp r3, 0x1\n\ + bgt _08021790\n\ + adds r0, r2, 0x4\n\ + mov r1, r9\n\ + b _080217E6\n\ + .align 2, 0\n\ +_0802178C: .4byte gUnknown_02024A98\n\ +_08021790:\n\ + cmp r3, 0\n\ + beq _080217E0\n\ + ldr r0, _080217D0 @ =0x02000000\n\ + ldr r1, _080217D4 @ =0x000160dc\n\ + adds r4, r0, r1\n\ + ldrb r0, [r4]\n\ + cmp r0, 0\n\ + bne _080217E0\n\ + movs r0, 0\n\ + movs r1, 0x1\n\ + mov r2, r8\n\ + str r3, [sp]\n\ + bl EmitBattleAnimation\n\ + ldr r0, _080217D8 @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, _080217DC @ =gBattlescriptCurrInstr\n\ + ldr r0, [r0]\n\ + ldrb r1, [r0, 0x3]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + ldr r3, [sp]\n\ + cmp r0, 0\n\ + beq _080217CC\n\ + cmp r3, 0x1\n\ + ble _080217CC\n\ + movs r0, 0x1\n\ + strb r0, [r4]\n\ +_080217CC:\n\ + ldr r1, _080217DC @ =gBattlescriptCurrInstr\n\ + b _080217E2\n\ + .align 2, 0\n\ +_080217D0: .4byte 0x02000000\n\ +_080217D4: .4byte 0x000160dc\n\ +_080217D8: .4byte gActiveBank\n\ +_080217DC: .4byte gBattlescriptCurrInstr\n\ +_080217E0:\n\ + mov r1, r9\n\ +_080217E2:\n\ + ldr r0, [r1]\n\ + adds r0, 0x4\n\ +_080217E6:\n\ + str r0, [r1]\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"); +} + +#endif // NONMATCHING + +#ifdef NONMATCHING +static void atk49_moveendturn(void) +{ + int i; + int effect = 0; + u16 last_move = 0, *choiced_move_atk; + int arg1, arg2, hold_effect_atk, move_type; + if (gLastUsedMove != 0xFFFF) + last_move = gLastUsedMove; + + arg1 = BSScriptRead8(gBattlescriptCurrInstr + 1); + arg2 = BSScriptRead8(gBattlescriptCurrInstr + 2); + if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) + hold_effect_atk = gEnigmaBerries[gBankAttacker].holdEffect; + else + hold_effect_atk = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); + + choiced_move_atk = (u16*)(gBankAttacker * 0x020160e8); + if (BATTLE_STRUCT->dynamicMoveType) + move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F; + else + move_type = gBattleMoves[gCurrentMove].type; + + do + { + switch (BATTLE_STRUCT->cmd49StateTracker) + { + case 0: //rage check + if (gBattleMons[gBankTarget].status2 & STATUS2_RAGE + && gBattleMons[gBankTarget].hp && gBankAttacker != gBankTarget + && GetBankSide(gBankAttacker) != GetBankSide(gBankTarget) + && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT) && TARGET_TURN_DAMAGED + && gBattleMoves[gCurrentMove].power && gBattleMons[gBankTarget].statStages[STAT_STAGE_ATK] <= 0xB) + { + gBattleMons[gBankTarget].statStages[STAT_STAGE_ATK]++; + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = gUnknown_081D9132; + effect = 1; + } + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 1: //defrosting check + if (gBattleMons[gBankTarget].status1 & STATUS_FREEZE + && gBattleMons[gBankTarget].hp && gBankAttacker != gBankTarget + && gSpecialStatuses[gBankTarget].moveturnLostHP + && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT) && move_type == TYPE_FIRE) + { + gBattleMons[gBankTarget].status1 &= ~(STATUS_FREEZE); + gActiveBank = gBankTarget; + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1); + MarkBufferBankForExecution(gActiveBank); + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = gUnknown_081D955D; + effect = 1; + } + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 2: //target synchronize + if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBankTarget, 0, 0, 0)) + effect = 1; + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 3: //contact abilities + if (AbilityBattleEffects(ABILITYEFFECT_CONTACT, gBankTarget, 0, 0, 0)) + effect = 1; + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 4: //status immunities + if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0)) + effect = 1; //it loops through 4 banks, so we increment after its done with all banks + else + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 5: //attacker synchronize + if (AbilityBattleEffects(ABILITYEFFECT_ATK_SYNCHRONIZE, gBankAttacker, 0, 0, 0)) + effect = 1; + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 6: //update choice band move + if (gHitMarker & HITMARKER_OBEYS && hold_effect_atk == HOLD_EFFECT_CHOICE_BAND + && gLastUsedMove != MOVE_STRUGGLE && (*choiced_move_atk == 0 || *choiced_move_atk == 0xFFF) + && gLastUsedMove != MOVE_BATON_PASS && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) + { + *choiced_move_atk = gLastUsedMove; + for (i = 0; i < 4 && gBattleMons[gBankAttacker].moves[i] != *choiced_move_atk; i++){} + if (i == 4) + *choiced_move_atk = 0; + } + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 7: //changed held items + for (i = 0; i < gNoOfAllBanks; i++) + { + #define CHANGED_ITEM (((*u16)(0x020160f0))) + if (CHANGED_ITEM(i)) + gBattleMons[i].item = CHANGED_ITEM(i); + } + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 8: //make sprite invisible + if (gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER) + && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) + { + gActiveBank = gBankAttacker; + EmitSpriteInvisibility(0, 1); + MarkBufferBankForExecution(gActiveBank); + } + BATTLE_STRUCT->cmd49StateTracker++; + break; + //sub_8015660 CheckIfMoveFailed + case 9: //semi-invlurneable attacker make visible + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + || sub_8015660(gBankAttacker)) + { + gActiveBank = gBankAttacker; + EmitSpriteInvisibility(0, 0); + MarkBufferBankForExecution(gActiveBank); + gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER); + gSpecialStatuses[gBankAttacker].restored_bank_sprite = 1; + } + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 10: //semi-invlurneable target make visible + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + || sub_8015660(gBankTarget)) + { + gActiveBank = gBankTarget; + EmitSpriteInvisibility(0, 0); + MarkBufferBankForExecution(gActiveBank); + gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER); + gSpecialStatuses[gBankTarget].restored_bank_sprite = 1; + } + BATTLE_STRUCT->cmd49StateTracker++; + break; + case 11: // + } + + } while (effect == 0) +} +#else +__attribute__((naked)) +static void atk49_moveendturn(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\ + movs r0, 0\n\ + mov r10, r0\n\ + ldr r0, _08021834 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r0]\n\ + ldrb r1, [r0, 0x1]\n\ + str r1, [sp, 0x10]\n\ + ldrb r0, [r0, 0x2]\n\ + str r0, [sp, 0x14]\n\ + ldr r1, _08021838 @ =gBattleMons\n\ + ldr r0, _0802183C @ =gBankAttacker\n\ + ldrb r2, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r1, r0, r1\n\ + ldrh r0, [r1, 0x2E]\n\ + cmp r0, 0xAF\n\ + bne _08021844\n\ + ldr r1, _08021840 @ =gEnigmaBerries\n\ + lsls r0, r2, 3\n\ + subs r0, r2\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0x7]\n\ + b _0802184E\n\ + .align 2, 0\n\ +_08021834: .4byte gBattlescriptCurrInstr\n\ +_08021838: .4byte gBattleMons\n\ +_0802183C: .4byte gBankAttacker\n\ +_08021840: .4byte gEnigmaBerries\n\ +_08021844:\n\ + ldrh r0, [r1, 0x2E]\n\ + bl ItemId_GetHoldEffect\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ +_0802184E:\n\ + str r0, [sp, 0x8]\n\ + ldr r0, _0802186C @ =gBankAttacker\n\ + ldrb r1, [r0]\n\ + lsls r1, 1\n\ + ldr r0, _08021870 @ =0x020160e8\n\ + adds r1, r0\n\ + str r1, [sp, 0xC]\n\ + subs r0, 0xCC\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _080218C0\n\ + movs r2, 0x3F\n\ + ands r2, r0\n\ + str r2, [sp, 0x4]\n\ + b _080218D2\n\ + .align 2, 0\n\ +_0802186C: .4byte gBankAttacker\n\ +_08021870: .4byte 0x020160e8\n\ +_08021874:\n\ + strb r2, [r7]\n\ + ldr r0, [r5]\n\ + orrs r0, r6\n\ + str r0, [r5]\n\ + ldr r0, _080218AC @ =0x02000000\n\ + ldr r3, _080218B0 @ =0x0001600c\n\ + adds r0, r3\n\ + strb r4, [r0]\n\ + bl MoveValuesCleanUp\n\ + ldr r2, _080218B4 @ =gBattleScriptsEffectsTable\n\ + mov r4, r8\n\ + ldrh r1, [r4]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + add r0, r9\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + bl b_movescr_stack_push\n\ + ldr r1, _080218B8 @ =gBattlescriptCurrInstr\n\ + ldr r0, _080218BC @ =gUnknown_081D9B2D\n\ + bl _0802229C\n\ + .align 2, 0\n\ +_080218AC: .4byte 0x02000000\n\ +_080218B0: .4byte 0x0001600c\n\ +_080218B4: .4byte gBattleScriptsEffectsTable\n\ +_080218B8: .4byte gBattlescriptCurrInstr\n\ +_080218BC: .4byte gUnknown_081D9B2D\n\ +_080218C0:\n\ + ldr r2, _080218D8 @ =gBattleMoves\n\ + ldr r0, _080218DC @ =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, 0x2]\n\ + str r0, [sp, 0x4]\n\ +_080218D2:\n\ + ldr r5, _080218E0 @ =0x02000000\n\ + mov r12, r5\n\ + b _080218EE\n\ + .align 2, 0\n\ +_080218D8: .4byte gBattleMoves\n\ +_080218DC: .4byte gCurrentMove\n\ +_080218E0: .4byte 0x02000000\n\ +_080218E4:\n\ + mov r0, r10\n\ + cmp r0, 0\n\ + beq _080218EE\n\ + bl _08022286\n\ +_080218EE:\n\ + ldr r0, _08021908 @ =0x0001600c\n\ + add r0, r12\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x11\n\ + bls _080218FC\n\ + bl _0802224E\n\ +_080218FC:\n\ + lsls r0, 2\n\ + ldr r1, _0802190C @ =_08021910\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08021908: .4byte 0x0001600c\n\ +_0802190C: .4byte _08021910\n\ + .align 2, 0\n\ +_08021910:\n\ + .4byte _08021958\n\ + .4byte _08021A34\n\ + .4byte _08021AF0\n\ + .4byte _08021B20\n\ + .4byte _08021B44\n\ + .4byte _08021B78\n\ + .4byte _08021B9C\n\ + .4byte _08021C40\n\ + .4byte _08021C78\n\ + .4byte _08021CA8\n\ + .4byte _08021CCC\n\ + .4byte _08021D18\n\ + .4byte _08021DAC\n\ + .4byte _08021E30\n\ + .4byte _08021E70\n\ + .4byte _08022068\n\ + .4byte _080221C0\n\ + .4byte _0802224E\n\ +_08021958:\n\ + ldr r5, _08021A08 @ =gBattleMons\n\ + ldr r2, _08021A0C @ =gBankTarget\n\ + ldrb r4, [r2]\n\ + movs r6, 0x58\n\ + adds r3, r4, 0\n\ + muls r3, r6\n\ + adds r0, r5, 0\n\ + adds r0, 0x50\n\ + adds r0, r3, r0\n\ + ldr r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 16\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _080219FE\n\ + adds r0, r3, r5\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + beq _080219FE\n\ + ldr r0, _08021A10 @ =gBankAttacker\n\ + ldrb r1, [r0]\n\ + cmp r1, r4\n\ + beq _080219FE\n\ + adds r0, r1, 0\n\ + bl GetBankSide\n\ + adds r4, r0, 0\n\ + ldr r1, _08021A0C @ =gBankTarget\n\ + ldrb r0, [r1]\n\ + bl GetBankSide\n\ + lsls r4, 24\n\ + lsls r0, 24\n\ + cmp r4, r0\n\ + beq _080219FE\n\ + ldr r0, _08021A14 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080219FE\n\ + ldr r2, _08021A18 @ =gProtectStructs\n\ + ldr r4, _08021A0C @ =gBankTarget\n\ + ldrb r3, [r4]\n\ + lsls r1, r3, 4\n\ + adds r0, r2, 0x4\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _080219C8\n\ + adds r0, r2, 0\n\ + adds r0, 0x8\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _080219FE\n\ +_080219C8:\n\ + ldr r2, _08021A1C @ =gBattleMoves\n\ + ldr r0, _08021A20 @ =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, 0x1]\n\ + cmp r0, 0\n\ + beq _080219FE\n\ + adds r0, r3, 0\n\ + muls r0, r6\n\ + adds r1, r0, r5\n\ + ldrb r2, [r1, 0x19]\n\ + movs r0, 0x19\n\ + ldrsb r0, [r1, r0]\n\ + cmp r0, 0xB\n\ + bgt _080219FE\n\ + adds r0, r2, 0x1\n\ + strb r0, [r1, 0x19]\n\ + bl b_movescr_stack_push_cursor\n\ + ldr r1, _08021A24 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08021A28 @ =gUnknown_081D9132\n\ + str r0, [r1]\n\ + movs r5, 0x1\n\ + mov r10, r5\n\ +_080219FE:\n\ + ldr r2, _08021A2C @ =0x02000000\n\ + ldr r0, _08021A30 @ =0x0001600c\n\ + adds r1, r2, r0\n\ + b _08021E00\n\ + .align 2, 0\n\ +_08021A08: .4byte gBattleMons\n\ +_08021A0C: .4byte gBankTarget\n\ +_08021A10: .4byte gBankAttacker\n\ +_08021A14: .4byte gBattleMoveFlags\n\ +_08021A18: .4byte gProtectStructs\n\ +_08021A1C: .4byte gBattleMoves\n\ +_08021A20: .4byte gCurrentMove\n\ +_08021A24: .4byte gBattlescriptCurrInstr\n\ +_08021A28: .4byte gUnknown_081D9132\n\ +_08021A2C: .4byte 0x02000000\n\ +_08021A30: .4byte 0x0001600c\n\ +_08021A34:\n\ + ldr r2, _08021AD0 @ =gBattleMons\n\ + ldr r1, _08021AD4 @ =gBankTarget\n\ + ldrb r4, [r1]\n\ + movs r3, 0x58\n\ + mov r12, r3\n\ + mov r3, r12\n\ + muls r3, r4\n\ + adds r7, r2, 0\n\ + adds r7, 0x4C\n\ + adds r6, r3, r7\n\ + ldr r5, [r6]\n\ + movs r0, 0x20\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + bne _08021A54\n\ + b _08021DFA\n\ +_08021A54:\n\ + adds r0, r3, r2\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + bne _08021A5E\n\ + b _08021DFA\n\ +_08021A5E:\n\ + ldr r0, _08021AD8 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + cmp r0, r4\n\ + bne _08021A68\n\ + b _08021DFA\n\ +_08021A68:\n\ + ldr r0, _08021ADC @ =gSpecialStatuses\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 2\n\ + adds r0, 0xC\n\ + adds r1, r0\n\ + ldr r0, [r1]\n\ + cmp r0, 0\n\ + bne _08021A7C\n\ + b _08021DFA\n\ +_08021A7C:\n\ + ldr r0, _08021AE0 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021A8A\n\ + b _08021DFA\n\ +_08021A8A:\n\ + ldr r4, [sp, 0x4]\n\ + cmp r4, 0xA\n\ + beq _08021A92\n\ + b _08021DFA\n\ +_08021A92:\n\ + movs r0, 0x21\n\ + negs r0, r0\n\ + ands r5, r0\n\ + str r5, [r6]\n\ + ldr r4, _08021AE4 @ =gActiveBank\n\ + ldr r5, _08021AD4 @ =gBankTarget\n\ + ldrb r0, [r5]\n\ + strb r0, [r4]\n\ + ldrb r0, [r5]\n\ + mov r1, r12\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + adds r0, r7\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 b_movescr_stack_push_cursor\n\ + ldr r1, _08021AE8 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08021AEC @ =gUnknown_081D955D\n\ + str r0, [r1]\n\ + movs r2, 0x1\n\ + mov r10, r2\n\ + b _08021DFA\n\ + .align 2, 0\n\ +_08021AD0: .4byte gBattleMons\n\ +_08021AD4: .4byte gBankTarget\n\ +_08021AD8: .4byte gBankAttacker\n\ +_08021ADC: .4byte gSpecialStatuses\n\ +_08021AE0: .4byte gBattleMoveFlags\n\ +_08021AE4: .4byte gActiveBank\n\ +_08021AE8: .4byte gBattlescriptCurrInstr\n\ +_08021AEC: .4byte gUnknown_081D955D\n\ +_08021AF0:\n\ + ldr r0, _08021B14 @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + movs r0, 0x7\n\ + movs r2, 0\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08021B0C\n\ + movs r4, 0x1\n\ + mov r10, r4\n\ +_08021B0C:\n\ + ldr r2, _08021B18 @ =0x02000000\n\ + ldr r5, _08021B1C @ =0x0001600c\n\ + adds r1, r2, r5\n\ + b _08021E00\n\ + .align 2, 0\n\ +_08021B14: .4byte gBankTarget\n\ +_08021B18: .4byte 0x02000000\n\ +_08021B1C: .4byte 0x0001600c\n\ +_08021B20:\n\ + ldr r0, _08021B40 @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + movs r0, 0x4\n\ + movs r2, 0\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08021B3A\n\ + b _08021DFA\n\ +_08021B3A:\n\ + movs r0, 0x1\n\ + mov r10, r0\n\ + b _08021DFA\n\ + .align 2, 0\n\ +_08021B40: .4byte gBankTarget\n\ +_08021B44:\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + movs r0, 0x5\n\ + movs r1, 0\n\ + movs r2, 0\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08021B68\n\ + movs r4, 0x1\n\ + mov r10, r4\n\ + ldr r5, _08021B64 @ =0x02000000\n\ + mov r12, r5\n\ + b _0802224E\n\ + .align 2, 0\n\ +_08021B64: .4byte 0x02000000\n\ +_08021B68:\n\ + ldr r2, _08021B70 @ =0x02000000\n\ + ldr r0, _08021B74 @ =0x0001600c\n\ + adds r1, r2, r0\n\ + b _08021E00\n\ + .align 2, 0\n\ +_08021B70: .4byte 0x02000000\n\ +_08021B74: .4byte 0x0001600c\n\ +_08021B78:\n\ + ldr r0, _08021B98 @ =gBankAttacker\n\ + ldrb r1, [r0]\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + movs r0, 0x8\n\ + movs r2, 0\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08021B92\n\ + b _08021DFA\n\ +_08021B92:\n\ + movs r1, 0x1\n\ + mov r10, r1\n\ + b _08021DFA\n\ + .align 2, 0\n\ +_08021B98: .4byte gBankAttacker\n\ +_08021B9C:\n\ + ldr r0, _08021C28 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 18\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021BE0\n\ + ldr r4, [sp, 0x8]\n\ + cmp r4, 0x1D\n\ + bne _08021BE0\n\ + ldr r0, _08021C2C @ =gUnknown_02024BE8\n\ + ldrh r2, [r0]\n\ + adds r7, r0, 0\n\ + cmp r2, 0xA5\n\ + beq _08021BE0\n\ + ldr r5, [sp, 0xC]\n\ + ldrh r1, [r5]\n\ + cmp r1, 0\n\ + beq _08021BC8\n\ + ldr r0, _08021C30 @ =0x0000ffff\n\ + cmp r1, r0\n\ + bne _08021BE0\n\ +_08021BC8:\n\ + cmp r2, 0xE2\n\ + bne _08021BDA\n\ + ldr r0, _08021C34 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x20\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08021BDA\n\ + b _08022244\n\ +_08021BDA:\n\ + ldrh r0, [r7]\n\ + ldr r1, [sp, 0xC]\n\ + strh r0, [r1]\n\ +_08021BE0:\n\ + movs r4, 0\n\ + ldr r2, _08021C38 @ =gBattleMons\n\ + ldr r3, _08021C3C @ =gBankAttacker\n\ + ldrb r1, [r3]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r2, 0xC\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + ldr r5, [sp, 0xC]\n\ + ldrh r1, [r5]\n\ + mov r9, r3\n\ + cmp r0, r1\n\ + beq _08021C18\n\ + mov r6, r9\n\ + movs r3, 0x58\n\ + adds r5, r1, 0\n\ +_08021C02:\n\ + adds r4, 0x1\n\ + cmp r4, 0x3\n\ + bgt _08021C18\n\ + lsls r0, r4, 1\n\ + ldrb r1, [r6]\n\ + muls r1, r3\n\ + adds r0, r1\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + cmp r0, r5\n\ + bne _08021C02\n\ +_08021C18:\n\ + cmp r4, 0x4\n\ + beq _08021C1E\n\ + b _08022244\n\ +_08021C1E:\n\ + movs r0, 0\n\ + ldr r1, [sp, 0xC]\n\ +_08021C22:\n\ + strh r0, [r1]\n\ + b _08022244\n\ + .align 2, 0\n\ +_08021C28: .4byte gHitMarker\n\ +_08021C2C: .4byte gUnknown_02024BE8\n\ +_08021C30: .4byte 0x0000ffff\n\ +_08021C34: .4byte gBattleMoveFlags\n\ +_08021C38: .4byte gBattleMons\n\ +_08021C3C: .4byte gBankAttacker\n\ +_08021C40:\n\ + movs r4, 0\n\ + ldr r0, _08021C6C @ =gNoOfAllBanks\n\ + ldrb r2, [r0]\n\ + cmp r4, r2\n\ + blt _08021C4C\n\ + b _08022244\n\ +_08021C4C:\n\ + movs r5, 0\n\ + ldr r2, _08021C70 @ =0x020160f0\n\ + ldr r3, _08021C74 @ =gBattleMons\n\ +_08021C52:\n\ + ldrh r1, [r2]\n\ + cmp r1, 0\n\ + beq _08021C5C\n\ + strh r1, [r3, 0x2E]\n\ + strh r5, [r2]\n\ +_08021C5C:\n\ + adds r2, 0x2\n\ + adds r3, 0x58\n\ + adds r4, 0x1\n\ + ldrb r1, [r0]\n\ + cmp r4, r1\n\ + blt _08021C52\n\ + b _08022244\n\ + .align 2, 0\n\ +_08021C6C: .4byte gNoOfAllBanks\n\ +_08021C70: .4byte 0x020160f0\n\ +_08021C74: .4byte gBattleMons\n\ +_08021C78:\n\ + movs r0, 0x3\n\ + movs r1, 0\n\ + movs r2, 0\n\ + bl ItemBattleEffects\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08021C98\n\ + movs r2, 0x1\n\ + mov r10, r2\n\ + ldr r3, _08021C94 @ =0x02000000\n\ + mov r12, r3\n\ + b _0802224E\n\ + .align 2, 0\n\ +_08021C94: .4byte 0x02000000\n\ +_08021C98:\n\ + ldr r2, _08021CA0 @ =0x02000000\n\ + ldr r4, _08021CA4 @ =0x0001600c\n\ + adds r1, r2, r4\n\ + b _08021E00\n\ + .align 2, 0\n\ +_08021CA0: .4byte 0x02000000\n\ +_08021CA4: .4byte 0x0001600c\n\ +_08021CA8:\n\ + movs r0, 0x4\n\ + movs r1, 0\n\ + movs r2, 0\n\ + bl ItemBattleEffects\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08021CBC\n\ + movs r5, 0x1\n\ + mov r10, r5\n\ +_08021CBC:\n\ + ldr r2, _08021CC4 @ =0x02000000\n\ + ldr r0, _08021CC8 @ =0x0001600c\n\ + adds r1, r2, r0\n\ + b _08021E00\n\ + .align 2, 0\n\ +_08021CC4: .4byte 0x02000000\n\ +_08021CC8: .4byte 0x0001600c\n\ +_08021CCC:\n\ + ldr r1, _08021D04 @ =gStatuses3\n\ + ldr r0, _08021D08 @ =gBankAttacker\n\ + ldrb r2, [r0]\n\ + lsls r0, r2, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ldr r1, _08021D0C @ =0x000400c0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08021CE2\n\ + b _08021DFA\n\ +_08021CE2:\n\ + ldr r0, _08021D10 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08021CF0\n\ + b _08021DFA\n\ +_08021CF0:\n\ + ldr r4, _08021D14 @ =gActiveBank\n\ + strb r2, [r4]\n\ + movs r0, 0\n\ + movs r1, 0x1\n\ + bl EmitSpriteInvisibility\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08021DFA\n\ + .align 2, 0\n\ +_08021D04: .4byte gStatuses3\n\ +_08021D08: .4byte gBankAttacker\n\ +_08021D0C: .4byte 0x000400c0\n\ +_08021D10: .4byte gHitMarker\n\ +_08021D14: .4byte gActiveBank\n\ +_08021D18:\n\ + ldr r0, _08021D88 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08021D44\n\ + ldr r1, _08021D8C @ =gStatuses3\n\ + ldr r0, _08021D90 @ =gBankAttacker\n\ + ldrb r2, [r0]\n\ + lsls r0, r2, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ldr r1, _08021D94 @ =0x000400c0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021D44\n\ + adds r0, r2, 0\n\ + bl sub_8015660\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08021D7E\n\ +_08021D44:\n\ + ldr r4, _08021D98 @ =gActiveBank\n\ + ldr r5, _08021D90 @ =gBankAttacker\n\ + ldrb r0, [r5]\n\ + strb r0, [r4]\n\ + movs r0, 0\n\ + movs r1, 0\n\ + bl EmitSpriteInvisibility\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, _08021D8C @ =gStatuses3\n\ + ldrb r2, [r5]\n\ + lsls r2, 2\n\ + adds r2, r0\n\ + ldr r0, [r2]\n\ + ldr r1, _08021D9C @ =0xfffbff3f\n\ + ands r0, r1\n\ + str r0, [r2]\n\ + ldr r2, _08021DA0 @ =gSpecialStatuses\n\ + ldrb r1, [r5]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrb r1, [r0]\n\ + movs r2, 0x4\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_08021D7E:\n\ + ldr r2, _08021DA4 @ =0x02000000\n\ + ldr r4, _08021DA8 @ =0x0001600c\n\ + adds r1, r2, r4\n\ + b _08021E00\n\ + .align 2, 0\n\ +_08021D88: .4byte gBattleMoveFlags\n\ +_08021D8C: .4byte gStatuses3\n\ +_08021D90: .4byte gBankAttacker\n\ +_08021D94: .4byte 0x000400c0\n\ +_08021D98: .4byte gActiveBank\n\ +_08021D9C: .4byte 0xfffbff3f\n\ +_08021DA0: .4byte gSpecialStatuses\n\ +_08021DA4: .4byte 0x02000000\n\ +_08021DA8: .4byte 0x0001600c\n\ +_08021DAC:\n\ + ldr r2, _08021E0C @ =gSpecialStatuses\n\ + ldr r1, _08021E10 @ =gBankTarget\n\ + ldrb r3, [r1]\n\ + lsls r4, r3, 2\n\ + adds r0, r4, r3\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ + lsls r0, 29\n\ + cmp r0, 0\n\ + blt _08021DFA\n\ + ldr r0, _08021E14 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r3, r0\n\ + bcs _08021DFA\n\ + ldr r5, _08021E18 @ =gStatuses3\n\ + adds r0, r4, r5\n\ + ldr r0, [r0]\n\ + ldr r1, _08021E1C @ =0x000400c0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08021DFA\n\ + ldr r4, _08021E20 @ =gActiveBank\n\ + strb r3, [r4]\n\ + movs r0, 0\n\ + movs r1, 0\n\ + bl EmitSpriteInvisibility\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, _08021E10 @ =gBankTarget\n\ + ldrb r2, [r0]\n\ + lsls r2, 2\n\ + adds r2, r5\n\ + ldr r0, [r2]\n\ + ldr r1, _08021E24 @ =0xfffbff3f\n\ + ands r0, r1\n\ + str r0, [r2]\n\ +_08021DFA:\n\ + ldr r2, _08021E28 @ =0x02000000\n\ + ldr r3, _08021E2C @ =0x0001600c\n\ + adds r1, r2, r3\n\ +_08021E00:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + mov r12, r2\n\ + b _0802224E\n\ + .align 2, 0\n\ +_08021E0C: .4byte gSpecialStatuses\n\ +_08021E10: .4byte gBankTarget\n\ +_08021E14: .4byte gNoOfAllBanks\n\ +_08021E18: .4byte gStatuses3\n\ +_08021E1C: .4byte 0x000400c0\n\ +_08021E20: .4byte gActiveBank\n\ +_08021E24: .4byte 0xfffbff3f\n\ +_08021E28: .4byte 0x02000000\n\ +_08021E2C: .4byte 0x0001600c\n\ +_08021E30:\n\ + movs r4, 0\n\ + ldr r0, _08021E60 @ =gNoOfAllBanks\n\ + ldrb r5, [r0]\n\ + cmp r4, r5\n\ + blt _08021E3C\n\ + b _08022244\n\ +_08021E3C:\n\ + ldr r2, _08021E64 @ =gDisableStructs\n\ + ldr r5, _08021E68 @ =0xfeffffff\n\ + adds r3, r0, 0\n\ + ldr r1, _08021E6C @ =gUnknown_02024AD0\n\ +_08021E44:\n\ + ldrb r0, [r2, 0xA]\n\ + cmp r0, 0\n\ + bne _08021E50\n\ + ldr r0, [r1]\n\ + ands r0, r5\n\ + str r0, [r1]\n\ +_08021E50:\n\ + adds r2, 0x1C\n\ + adds r1, 0x58\n\ + adds r4, 0x1\n\ + ldrb r0, [r3]\n\ + cmp r4, r0\n\ + blt _08021E44\n\ + b _08022244\n\ + .align 2, 0\n\ +_08021E60: .4byte gNoOfAllBanks\n\ +_08021E64: .4byte gDisableStructs\n\ +_08021E68: .4byte 0xfeffffff\n\ +_08021E6C: .4byte gUnknown_02024AD0\n\ +_08021E70:\n\ + ldr r1, _08021F2C @ =gHitMarker\n\ + ldr r3, [r1]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + ands r0, r3\n\ + ldr r2, _08021F30 @ =gBankAttacker\n\ + mov r9, r2\n\ + adds r5, r1, 0\n\ + cmp r0, 0\n\ + beq _08021E9A\n\ + ldr r0, _08021F34 @ =gActiveBank\n\ + ldrb r2, [r2]\n\ + strb r2, [r0]\n\ + ldr r1, _08021F38 @ =gBankTarget\n\ + ldrb r0, [r1]\n\ + mov r4, r9\n\ + strb r0, [r4]\n\ + strb r2, [r1]\n\ + ldr r0, _08021F3C @ =0xffffefff\n\ + ands r3, r0\n\ + str r3, [r5]\n\ +_08021E9A:\n\ + ldr r1, _08021F40 @ =gBattleMoves\n\ + ldr r2, _08021F44 @ =gUnknown_02024BE8\n\ + ldrh r3, [r2]\n\ + lsls r0, r3, 1\n\ + adds r0, r3\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + mov r8, r1\n\ + adds r7, r2, 0\n\ + cmp r0, 0x7F\n\ + bne _08021EBE\n\ + ldr r0, _08021F48 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021ECA\n\ +_08021EBE:\n\ + ldr r1, _08021F4C @ =gUnknown_02024C2C\n\ + mov r2, r9\n\ + ldrb r0, [r2]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + strh r3, [r0]\n\ +_08021ECA:\n\ + ldr r0, _08021F50 @ =gAbsentBankFlags\n\ + ldrb r1, [r0]\n\ + ldr r2, _08021F54 @ =gBitTable\n\ + mov r3, r9\n\ + ldrb r4, [r3]\n\ + lsls r0, r4, 2\n\ + adds r0, r2\n\ + ldr r3, [r0]\n\ + ands r1, r3\n\ + adds r6, r2, 0\n\ + cmp r1, 0\n\ + beq _08021EE4\n\ + b _08022244\n\ +_08021EE4:\n\ + ldr r0, _08021F58 @ =0x000160a6\n\ + add r0, r12\n\ + ldrb r0, [r0]\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _08021EF2\n\ + b _08022244\n\ +_08021EF2:\n\ + ldrh r2, [r7]\n\ + lsls r0, r2, 1\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + add r0, r8\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x7F\n\ + bne _08021F04\n\ + b _08022244\n\ +_08021F04:\n\ + ldr r0, [r5]\n\ + movs r1, 0x80\n\ + lsls r1, 18\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08021F68\n\ + ldr r1, _08021F5C @ =gLastUsedMove\n\ + lsls r0, r4, 1\n\ + adds r0, r1\n\ + strh r2, [r0]\n\ + ldr r0, _08021F60 @ =gUnknown_02024C4C\n\ + mov r4, r9\n\ + ldrb r1, [r4]\n\ + lsls r1, 1\n\ + adds r1, r0\n\ + ldr r0, _08021F64 @ =gCurrentMove\n\ + ldrh r0, [r0]\n\ + strh r0, [r1]\n\ + b _08021F82\n\ + .align 2, 0\n\ +_08021F2C: .4byte gHitMarker\n\ +_08021F30: .4byte gBankAttacker\n\ +_08021F34: .4byte gActiveBank\n\ +_08021F38: .4byte gBankTarget\n\ +_08021F3C: .4byte 0xffffefff\n\ +_08021F40: .4byte gBattleMoves\n\ +_08021F44: .4byte gUnknown_02024BE8\n\ +_08021F48: .4byte gBattleMoveFlags\n\ +_08021F4C: .4byte gUnknown_02024C2C\n\ +_08021F50: .4byte gAbsentBankFlags\n\ +_08021F54: .4byte gBitTable\n\ +_08021F58: .4byte 0x000160a6\n\ +_08021F5C: .4byte gLastUsedMove\n\ +_08021F60: .4byte gUnknown_02024C4C\n\ +_08021F64: .4byte gCurrentMove\n\ +_08021F68:\n\ + ldr r1, _08021FD0 @ =gLastUsedMove\n\ + lsls r0, r4, 1\n\ + adds r0, r1\n\ + ldr r1, _08021FD4 @ =0x0000ffff\n\ + strh r1, [r0]\n\ + ldr r1, _08021FD8 @ =gUnknown_02024C4C\n\ + mov r2, r9\n\ + ldrb r0, [r2]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + strh r1, [r0]\n\ +_08021F82:\n\ + ldr r2, _08021FDC @ =gBankTarget\n\ + ldrb r3, [r2]\n\ + lsls r0, r3, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + lsls r0, 28\n\ + ldr r1, [r5]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _08021FA0\n\ + ldr r0, _08021FE0 @ =gUnknown_02024C5C\n\ + adds r0, r3, r0\n\ + mov r3, r9\n\ + ldrb r1, [r3]\n\ + strb r1, [r0]\n\ +_08021FA0:\n\ + ldr r0, [r5]\n\ + movs r1, 0x80\n\ + lsls r1, 18\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0802204C\n\ + ldr r0, _08021FE4 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0802204C\n\ + ldrh r2, [r7]\n\ + ldr r0, _08021FD4 @ =0x0000ffff\n\ + cmp r2, r0\n\ + bne _08021FEC\n\ + ldr r1, _08021FE8 @ =gMoveHitWith\n\ + ldr r4, _08021FDC @ =gBankTarget\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + strh r2, [r0]\n\ + b _08022244\n\ + .align 2, 0\n\ +_08021FD0: .4byte gLastUsedMove\n\ +_08021FD4: .4byte 0x0000ffff\n\ +_08021FD8: .4byte gUnknown_02024C4C\n\ +_08021FDC: .4byte gBankTarget\n\ +_08021FE0: .4byte gUnknown_02024C5C\n\ +_08021FE4: .4byte gBattleMoveFlags\n\ +_08021FE8: .4byte gMoveHitWith\n\ +_08021FEC:\n\ + ldr r0, _08022014 @ =gMoveHitWith\n\ + ldr r5, _08022018 @ =gBankTarget\n\ + ldrb r1, [r5]\n\ + lsls r1, 1\n\ + adds r1, r0\n\ + ldr r4, _0802201C @ =gCurrentMove\n\ + ldrh r0, [r4]\n\ + strh r0, [r1]\n\ + ldr r0, _08022020 @ =0x0001601c\n\ + add r0, r12\n\ + ldrb r3, [r0]\n\ + cmp r3, 0\n\ + beq _08022028\n\ + ldr r0, _08022024 @ =gUnknown_02024C44\n\ + ldrb r1, [r5]\n\ + lsls r1, 1\n\ + adds r1, r0\n\ + movs r0, 0x3F\n\ + ands r0, r3\n\ + b _08021C22\n\ + .align 2, 0\n\ +_08022014: .4byte gMoveHitWith\n\ +_08022018: .4byte gBankTarget\n\ +_0802201C: .4byte gCurrentMove\n\ +_08022020: .4byte 0x0001601c\n\ +_08022024: .4byte gUnknown_02024C44\n\ +_08022028:\n\ + ldr r0, _08022044 @ =gUnknown_02024C44\n\ + ldr r1, _08022048 @ =gBankTarget\n\ + ldrb r2, [r1]\n\ + lsls r2, 1\n\ + adds r2, r0\n\ + ldrh r1, [r4]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + add r0, r8\n\ + ldrb r0, [r0, 0x2]\n\ + strh r0, [r2]\n\ + b _08022244\n\ + .align 2, 0\n\ +_08022044: .4byte gUnknown_02024C44\n\ +_08022048: .4byte gBankTarget\n\ +_0802204C:\n\ + ldr r0, _0802205C @ =gMoveHitWith\n\ + ldr r2, _08022060 @ =gBankTarget\n\ + ldrb r1, [r2]\n\ + lsls r1, 1\n\ + adds r1, r0\n\ + ldr r0, _08022064 @ =0x0000ffff\n\ + b _08021C22\n\ + .align 2, 0\n\ +_0802205C: .4byte gMoveHitWith\n\ +_08022060: .4byte gBankTarget\n\ +_08022064: .4byte 0x0000ffff\n\ +_08022068:\n\ + ldr r0, _0802212C @ =gAbsentBankFlags\n\ + ldrb r1, [r0]\n\ + ldr r6, _08022130 @ =gBitTable\n\ + ldr r2, _08022134 @ =gBankAttacker\n\ + ldrb r5, [r2]\n\ + lsls r0, r5, 2\n\ + adds r0, r6\n\ + ldr r4, [r0]\n\ + ands r1, r4\n\ + mov r9, r2\n\ + cmp r1, 0\n\ + beq _08022082\n\ + b _08022244\n\ +_08022082:\n\ + ldr r0, _08022138 @ =0x000160a6\n\ + add r0, r12\n\ + ldrb r0, [r0]\n\ + ands r0, r4\n\ + cmp r0, 0\n\ + beq _08022090\n\ + b _08022244\n\ +_08022090:\n\ + ldr r1, _0802213C @ =gBattleMoves\n\ + ldr r4, _08022140 @ =gUnknown_02024BE8\n\ + ldrh r3, [r4]\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, 0x10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0802215C\n\ + ldr r0, _08022144 @ =gHitMarker\n\ + ldr r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 18\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0802215C\n\ + ldr r2, _08022148 @ =gBankTarget\n\ + ldrb r0, [r2]\n\ + cmp r5, r0\n\ + bne _080220C0\n\ + b _08022244\n\ +_080220C0:\n\ + adds r2, r0, 0\n\ + lsls r0, r2, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + lsls r0, 28\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _0802215C\n\ + ldr r0, _0802214C @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r0, 0x29\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0802215C\n\ + lsls r0, r2, 1\n\ + ldr r5, _08022150 @ =0x000160ac\n\ + adds r0, r5\n\ + add r0, r12\n\ + strb r3, [r0]\n\ + ldr r0, _08022148 @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + lsls r1, 1\n\ + ldr r2, _08022154 @ =0x000160ad\n\ + adds r1, r2\n\ + add r1, r12\n\ + ldrh r0, [r4]\n\ + lsrs r0, 8\n\ + strb r0, [r1]\n\ + ldr r3, _08022148 @ =gBankTarget\n\ + ldrb r2, [r3]\n\ + lsls r2, 2\n\ + mov r5, r9\n\ + ldrb r0, [r5]\n\ + lsrs r0, 1\n\ + lsls r0, 1\n\ + ldr r1, _08022158 @ =0x00016100\n\ + adds r0, r1\n\ + adds r2, r0\n\ + add r2, r12\n\ + ldrh r0, [r4]\n\ + strb r0, [r2]\n\ + ldrb r2, [r3]\n\ + lsls r2, 2\n\ + ldrb r0, [r5]\n\ + lsrs r0, 1\n\ + lsls r0, 1\n\ + adds r1, 0x1\n\ + adds r0, r1\n\ + adds r2, r0\n\ + add r2, r12\n\ + ldrh r0, [r4]\n\ + lsrs r0, 8\n\ + strb r0, [r2]\n\ + b _08022244\n\ + .align 2, 0\n\ +_0802212C: .4byte gAbsentBankFlags\n\ +_08022130: .4byte gBitTable\n\ +_08022134: .4byte gBankAttacker\n\ +_08022138: .4byte 0x000160a6\n\ +_0802213C: .4byte gBattleMoves\n\ +_08022140: .4byte gUnknown_02024BE8\n\ +_08022144: .4byte gHitMarker\n\ +_08022148: .4byte gBankTarget\n\ +_0802214C: .4byte gBattleMoveFlags\n\ +_08022150: .4byte 0x000160ac\n\ +_08022154: .4byte 0x000160ad\n\ +_08022158: .4byte 0x00016100\n\ +_0802215C:\n\ + mov r1, r9\n\ + ldrb r0, [r1]\n\ + ldr r2, _080221B4 @ =gBankTarget\n\ + ldrb r2, [r2]\n\ + cmp r0, r2\n\ + beq _08022244\n\ + ldr r3, _080221B4 @ =gBankTarget\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + ldr r4, _080221B8 @ =0x000160ac\n\ + adds r0, r4\n\ + add r0, r12\n\ + movs r3, 0\n\ + strb r3, [r0]\n\ + ldr r5, _080221B4 @ =gBankTarget\n\ + ldrb r0, [r5]\n\ + lsls r0, 1\n\ + ldr r1, _080221BC @ =0x000160ad\n\ + adds r0, r1\n\ + add r0, r12\n\ + strb r3, [r0]\n\ + ldrb r2, [r5]\n\ + lsls r2, 2\n\ + mov r4, r9\n\ + ldrb r0, [r4]\n\ + lsrs r0, 1\n\ + lsls r0, 1\n\ + adds r1, 0x53\n\ + adds r0, r1\n\ + adds r2, r0\n\ + add r2, r12\n\ + strb r3, [r2]\n\ + ldrb r2, [r5]\n\ + lsls r2, 2\n\ + ldrb r0, [r4]\n\ + lsrs r0, 1\n\ + lsls r0, 1\n\ + adds r1, 0x1\n\ + adds r0, r1\n\ + adds r2, r0\n\ + add r2, r12\n\ + strb r3, [r2]\n\ + b _08022244\n\ + .align 2, 0\n\ +_080221B4: .4byte gBankTarget\n\ +_080221B8: .4byte 0x000160ac\n\ +_080221BC: .4byte 0x000160ad\n\ +_080221C0:\n\ + ldr r5, _080222B0 @ =gHitMarker\n\ + ldr r2, [r5]\n\ + movs r0, 0x80\n\ + lsls r0, 12\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + bne _08022244\n\ + ldr r0, _080222B4 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08022244\n\ + ldr r1, _080222B8 @ =gProtectStructs\n\ + ldr r0, _080222BC @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + lsls r0, 4\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0x1]\n\ + lsls r0, 29\n\ + cmp r0, 0\n\ + blt _08022244\n\ + ldr r0, _080222C0 @ =gBattleMoves\n\ + mov r9, r0\n\ + ldr r1, _080222C4 @ =gCurrentMove\n\ + mov r8, r1\n\ + ldrh r0, [r1]\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + add r1, r9\n\ + ldrb r0, [r1, 0x6]\n\ + cmp r0, 0x8\n\ + bne _08022244\n\ + movs r6, 0x80\n\ + lsls r6, 2\n\ + adds r4, r6, 0\n\ + ands r4, r2\n\ + cmp r4, 0\n\ + bne _08022244\n\ + ldr r7, _080222C8 @ =gBankTarget\n\ + ldrb r0, [r7]\n\ + bl GetBankIdentity\n\ + movs r1, 0x2\n\ + eors r0, r1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetBankByPlayerAI\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + ldr r1, _080222CC @ =gBattleMons\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + beq _0802223A\n\ + bl _08021874\n\ +_0802223A:\n\ + ldr r0, [r5]\n\ + orrs r0, r6\n\ + str r0, [r5]\n\ + ldr r2, _080222D0 @ =0x02000000\n\ + mov r12, r2\n\ +_08022244:\n\ + ldr r1, _080222D4 @ =0x0001600c\n\ + add r1, r12\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ +_0802224E:\n\ + ldr r3, [sp, 0x10]\n\ + cmp r3, 0x1\n\ + bne _08022262\n\ + mov r4, r10\n\ + cmp r4, 0\n\ + bne _08022262\n\ + ldr r1, _080222D4 @ =0x0001600c\n\ + add r1, r12\n\ + movs r0, 0x11\n\ + strb r0, [r1]\n\ +_08022262:\n\ + ldr r5, [sp, 0x10]\n\ + cmp r5, 0x2\n\ + bne _08022278\n\ + ldr r1, _080222D4 @ =0x0001600c\n\ + add r1, r12\n\ + ldr r0, [sp, 0x14]\n\ + ldrb r2, [r1]\n\ + cmp r0, r2\n\ + bne _08022278\n\ + movs r0, 0x11\n\ + strb r0, [r1]\n\ +_08022278:\n\ + ldr r0, _080222D4 @ =0x0001600c\n\ + add r0, r12\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x11\n\ + beq _08022286\n\ + bl _080218E4\n\ +_08022286:\n\ + ldr r0, _080222D4 @ =0x0001600c\n\ + add r0, r12\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x11\n\ + bne _0802229E\n\ + mov r3, r10\n\ + cmp r3, 0\n\ + bne _0802229E\n\ + ldr r1, _080222D8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x3\n\ +_0802229C:\n\ + str r0, [r1]\n\ +_0802229E:\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\ + .align 2, 0\n\ +_080222B0: .4byte gHitMarker\n\ +_080222B4: .4byte gBattleTypeFlags\n\ +_080222B8: .4byte gProtectStructs\n\ +_080222BC: .4byte gBankAttacker\n\ +_080222C0: .4byte gBattleMoves\n\ +_080222C4: .4byte gCurrentMove\n\ +_080222C8: .4byte gBankTarget\n\ +_080222CC: .4byte gBattleMons\n\ +_080222D0: .4byte 0x02000000\n\ +_080222D4: .4byte 0x0001600c\n\ +_080222D8: .4byte gBattlescriptCurrInstr\n\ + .syntax divided" + ); +} +#endif // NONMATCHING + +static void atk4A_typecalc2(void) +{ + u8 flags = 0; + int i = 0; + u8 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; + gBattleCommunication[6] = move_type; + RecordAbilityBattle(gBankTarget, gLastUsedAbility); + } + else + { + while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) + { + if (gTypeEffectiveness[i] == TYPE_FORESIGHT) + { + if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) {break;} + else {i += 3; continue;} + } + + if (gTypeEffectiveness[i] == move_type) + { + //check type1 + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1) + { + if (gTypeEffectiveness[i + 2] == 0) + { + gBattleMoveFlags |= MOVESTATUS_NOTAFFECTED; + break; + } + if (gTypeEffectiveness[i + 2] == 5) + flags |= MOVESTATUS_NOTVERYEFFECTIVE; + if (gTypeEffectiveness[i + 2] == 20) + flags |= MOVESTATUS_SUPEREFFECTIVE; + } + //check type2 + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2) + { + if (gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 + && gTypeEffectiveness[i + 2] == 0) + { + gBattleMoveFlags |= MOVESTATUS_NOTAFFECTED; + break; + } + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 && gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 && gTypeEffectiveness[i + 2] == 5) + flags |= MOVESTATUS_NOTVERYEFFECTIVE; + if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 + && gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 && gTypeEffectiveness[i + 2] == 20) + flags |= MOVESTATUS_SUPEREFFECTIVE; + } + } + i += 3; + } + } + + if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && !(flags & MOVESTATUS_NOEFFECT) && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2 && + (!(flags & MOVESTATUS_SUPEREFFECTIVE) || ((flags & (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)) == (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE))) && + gBattleMoves[gCurrentMove].power) + { + gLastUsedAbility = ABILITY_WONDER_GUARD; + gBattleMoveFlags |= MOVESTATUS_MISSED; + gMoveHitWith[gBankTarget] = 0; + gBattleCommunication[6] = 3; + RecordAbilityBattle(gBankTarget, gLastUsedAbility); + } + if (gBattleMoveFlags & MOVESTATUS_NOTAFFECTED) + gProtectStructs[gBankAttacker].notEffective = 1; + + gBattlescriptCurrInstr++; +} + +static void atk4B_return_atk_to_ball(void) +{ + gActiveBank = gBankAttacker; + if (!(gHitMarker & HITMARKER_FAINTED(gActiveBank))) + { + EmitReturnPokeToBall(0, 0); + MarkBufferBankForExecution(gActiveBank); + } + gBattlescriptCurrInstr++; +} + +static void atk4C_copy_poke_data(void) +{ + if (gBattleExecBuffer) + return; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + + gBattlePartyID[gActiveBank] = unk_2000000[0x16068 + gActiveBank]; + + EmitGetAttributes(0, 0, gBitTable[gBattlePartyID[gActiveBank]]); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static inline u8 get_knocked_off_byte(u8 bank) +{ + register u32 side asm("r2") = GetBankSide(bank); + register struct WishFutureKnock* dummy = &gWishFutureKnock; + register u8* aa = ((u8*)((u8*)(dummy))); + register u8* bb = aa + 0x29; + register u8* cc asm("r0") = side + bb; + return *cc; +} + +static void atk4D_switch_data_update(void) +{ + struct BattlePokemon OldData; + int i; + u8 *monData; + if (gBattleExecBuffer) + return; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + OldData = gBattleMons[gActiveBank]; + monData = (u8*)(&gBattleMons[gActiveBank]); + for (i = 0; i < sizeof(struct BattlePokemon); i++) + { + monData[i] = gBattleBufferB[gActiveBank][4 + i]; + } + + gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1; + gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2; + gBattleMons[gActiveBank].ability = GetAbilityBySpecies(gBattleMons[gActiveBank].species, gBattleMons[gActiveBank].altAbility); + //check knocked off item + if (get_knocked_off_byte(gActiveBank) & gBitTable[gBattlePartyID[gActiveBank]]) + { + gBattleMons[gActiveBank].item = 0; + } + + if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) + { + for (i = 0; i < 8; i++) + { + gBattleMons[gActiveBank].statStages[i] = OldData.statStages[i]; + } + gBattleMons[gActiveBank].status2 = OldData.status2; + } + SwitchInClearStructs(); + BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 7; + gBattleTextBuff1[2] = gActiveBank; + gBattleTextBuff1[3] = gBattlePartyID[gActiveBank]; + gBattleTextBuff1[4] = 0xFF; + + gBattlescriptCurrInstr += 2; +} + +static void atk4E_switchin_anim(void) +{ + if (gBattleExecBuffer) + return; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (GetBankSide(gActiveBank) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER))) + { + GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); + } + gAbsentBankFlags &= ~(gBitTable[gActiveBank]); + EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2)); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 3; +} + +static void atk4F_jump_if_cannot_switch(void) +{ + int val, to_cmp; + register struct Pokemon *party; + u8 r7; + //0x80 byte is used as a way of telling the function whether to not check status2/status3 + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1) & 0x7F); + if (!(BSScriptRead8(gBattlescriptCurrInstr + 1) & 0x80) + && ((gBattleMons[gActiveBank].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) + || (gStatuses3[gActiveBank] & STATUS3_ROOTED))) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + return; + } + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (GetBankSide(gActiveBank) == 1) + party = gEnemyParty; + else + party = gPlayerParty; + val = 0; + if (sub_803FBFC(sub_803FC34(gActiveBank)) == 1) + val = 3; + for (to_cmp = val + 3; val < to_cmp; val++) + { + if (GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE + && !GetMonData(&party[val], MON_DATA_IS_EGG) + && GetMonData(&party[val], MON_DATA_HP) != 0 + && gBattlePartyID[gActiveBank] != val) + break; + } + if (val == to_cmp) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; + } + else + { + if (GetBankSide(gActiveBank) == 1) + { + r7 = GetBankByPlayerAI(1); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + to_cmp = GetBankByPlayerAI(3); + else + to_cmp = r7; + party = gEnemyParty; + } + else + { + r7 = GetBankByPlayerAI(0); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + to_cmp = GetBankByPlayerAI(2); + else + to_cmp = r7; + party = gPlayerParty; + } + for (val = 0; val < 6; val++) + { + if (GetMonData(&party[val], MON_DATA_HP) != 0 + && GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE + && !GetMonData(&party[val], MON_DATA_IS_EGG) + && val != gBattlePartyID[r7] && val != gBattlePartyID[to_cmp]) + break; + } + if (val == 6) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; + } +} + +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]); + MarkBufferBankForExecution(gActiveBank); +} + +/* +static void atk50_openpartyscreen(void) +{ + int i = 0; + int r9 = 0; + u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 5) + { + if ((gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI)) != BATTLE_TYPE_DOUBLE) + { + for (gActiveBank = i; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (!(gHitMarker & HITMARKER_FAINTED(gActiveBank))) + { + EmitLinkStandbyMsg(0, 2); + MarkBufferBankForExecution(gActiveBank); + } + else if (sub_8018018(gActiveBank, 6, 6) == 0 + && !gSpecialStatuses[gActiveBank].flag40) + { + sub_8022A3C(6); + gSpecialStatuses[gActiveBank].flag40 = 1; + } + else + { + gAbsentBankFlags |= gBitTable[gActiveBank]; + gHitMarker &= (~HITMARKER_FAINTED(gActiveBank)); + EmitLinkStandbyMsg(0, 2); + MarkBufferBankForExecution(gActiveBank); + } + } + } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + if (!(gHitMarker >> 0x1C & gBitTable[0])) + { + + } + else if (sub_8018018(gActiveBank, 6, 6) == 0 + && !gSpecialStatuses[gActiveBank].flag40) + { + + } + else + { + + } + } + } +} +*/ + +__attribute__((naked)) +static void atk50_openpartyscreen(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + sub sp, 0x4\n\ + movs r7, 0\n\ + movs r0, 0\n\ + mov r9, r0\n\ + ldr r6, _08022B44 @ =gBattlescriptCurrInstr\n\ + ldr r1, [r6]\n\ + ldrb r2, [r1, 0x2]\n\ + ldrb r0, [r1, 0x3]\n\ + lsls r0, 8\n\ + orrs r2, r0\n\ + ldrb r0, [r1, 0x4]\n\ + lsls r0, 16\n\ + orrs r2, r0\n\ + ldrb r0, [r1, 0x5]\n\ + lsls r0, 24\n\ + orrs r2, r0\n\ + mov r8, r2\n\ + ldrb r2, [r1, 0x1]\n\ + adds r0, r2, 0\n\ + mov r12, r6\n\ + cmp r0, 0x5\n\ + beq _08022ACE\n\ + b _08022F74\n\ +_08022ACE:\n\ + ldr r0, _08022B48 @ =gBattleTypeFlags\n\ + ldrh r0, [r0]\n\ + movs r1, 0x41\n\ + ands r1, r0\n\ + cmp r1, 0x1\n\ + beq _08022BBC\n\ + ldr r1, _08022B4C @ =gActiveBank\n\ + strb r7, [r1]\n\ + ldr r0, _08022B50 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r7, r0\n\ + bcc _08022AE8\n\ + b _08022F62\n\ +_08022AE8:\n\ + ldr r7, _08022B54 @ =gHitMarker\n\ + ldr r6, _08022B58 @ =gBitTable\n\ + adds r4, r1, 0\n\ + ldr r0, _08022B5C @ =gAbsentBankFlags\n\ + mov r8, r0\n\ +_08022AF2:\n\ + ldrb r2, [r4]\n\ + lsls r0, r2, 2\n\ + adds r0, r6\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r7]\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08022B94\n\ + adds r0, r2, 0\n\ + movs r1, 0x6\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08022B60\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r7]\n\ + bics r0, r1\n\ + str r0, [r7]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08022BA2\n\ + .align 2, 0\n\ +_08022B44: .4byte gBattlescriptCurrInstr\n\ +_08022B48: .4byte gBattleTypeFlags\n\ +_08022B4C: .4byte gActiveBank\n\ +_08022B50: .4byte gNoOfAllBanks\n\ +_08022B54: .4byte gHitMarker\n\ +_08022B58: .4byte gBitTable\n\ +_08022B5C: .4byte gAbsentBankFlags\n\ +_08022B60:\n\ + ldr r5, _08022B90 @ =gSpecialStatuses\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022BA2\n\ + movs r0, 0x6\n\ + bl sub_8022A3C\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + ldrb r1, [r0]\n\ + movs r2, 0x40\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _08022BA2\n\ + .align 2, 0\n\ +_08022B90: .4byte gSpecialStatuses\n\ +_08022B94:\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ +_08022BA2:\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + ldr r1, _08022BB8 @ =gNoOfAllBanks\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc _08022AF2\n\ + b _08022F62\n\ + .align 2, 0\n\ +_08022BB8: .4byte gNoOfAllBanks\n\ +_08022BBC:\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _08022BC4\n\ + b _08022F62\n\ +_08022BC4:\n\ + ldr r0, _08022C1C @ =gHitMarker\n\ + mov r8, r0\n\ + ldr r0, [r0]\n\ + lsrs r5, r0, 28\n\ + ldr r6, _08022C20 @ =gBitTable\n\ + ldr r0, [r6]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _08022C7E\n\ + ldr r4, _08022C24 @ =gActiveBank\n\ + strb r7, [r4]\n\ + movs r0, 0\n\ + movs r1, 0x6\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08022C2C\n\ + ldr r2, _08022C28 @ =gAbsentBankFlags\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + mov r2, r8\n\ + ldr r0, [r2]\n\ + bics r0, r1\n\ + str r0, [r2]\n\ + movs r0, 0\n\ + bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08022C7E\n\ + .align 2, 0\n\ +_08022C1C: .4byte gHitMarker\n\ +_08022C20: .4byte gBitTable\n\ +_08022C24: .4byte gActiveBank\n\ +_08022C28: .4byte gAbsentBankFlags\n\ +_08022C2C:\n\ + ldr r6, _08022C60 @ =gSpecialStatuses\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r6\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022C6C\n\ + ldr r0, _08022C64 @ =0x02000000\n\ + ldr r1, _08022C68 @ =0x0001606a\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bl sub_8022A3C\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldrb r1, [r0]\n\ + movs r2, 0x40\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _08022C7E\n\ + .align 2, 0\n\ +_08022C60: .4byte gSpecialStatuses\n\ +_08022C64: .4byte 0x02000000\n\ +_08022C68: .4byte 0x0001606a\n\ +_08022C6C:\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + movs r2, 0x1\n\ + mov r9, r2\n\ +_08022C7E:\n\ + ldr r6, _08022CD8 @ =gBitTable\n\ + ldr r0, [r6, 0x8]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _08022D40\n\ + ldr r0, [r6]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + bne _08022D40\n\ + ldr r4, _08022CDC @ =gActiveBank\n\ + movs r0, 0x2\n\ + strb r0, [r4]\n\ + movs r0, 0x2\n\ + movs r1, 0x6\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08022CE8\n\ + ldr r2, _08022CE0 @ =gAbsentBankFlags\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r2, _08022CE4 @ =gHitMarker\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r2]\n\ + bics r0, r1\n\ + str r0, [r2]\n\ + movs r0, 0\n\ + bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08022D40\n\ + .align 2, 0\n\ +_08022CD8: .4byte gBitTable\n\ +_08022CDC: .4byte gActiveBank\n\ +_08022CE0: .4byte gAbsentBankFlags\n\ +_08022CE4: .4byte gHitMarker\n\ +_08022CE8:\n\ + ldr r6, _08022D1C @ =gSpecialStatuses\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r6\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022D28\n\ + ldr r0, _08022D20 @ =0x02000000\n\ + ldr r1, _08022D24 @ =0x00016068\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bl sub_8022A3C\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldrb r1, [r0]\n\ + movs r2, 0x40\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _08022D40\n\ + .align 2, 0\n\ +_08022D1C: .4byte gSpecialStatuses\n\ +_08022D20: .4byte 0x02000000\n\ +_08022D24: .4byte 0x00016068\n\ +_08022D28:\n\ + movs r0, 0x1\n\ + mov r2, r9\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + bne _08022D40\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ +_08022D40:\n\ + ldr r6, _08022D90 @ =gBitTable\n\ + ldr r0, [r6, 0x4]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _08022DF6\n\ + ldr r4, _08022D94 @ =gActiveBank\n\ + movs r0, 0x1\n\ + strb r0, [r4]\n\ + movs r0, 0x1\n\ + movs r1, 0x6\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08022DA0\n\ + ldr r2, _08022D98 @ =gAbsentBankFlags\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r2, _08022D9C @ =gHitMarker\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r2]\n\ + bics r0, r1\n\ + str r0, [r2]\n\ + movs r0, 0\n\ + bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08022DF6\n\ + .align 2, 0\n\ +_08022D90: .4byte gBitTable\n\ +_08022D94: .4byte gActiveBank\n\ +_08022D98: .4byte gAbsentBankFlags\n\ +_08022D9C: .4byte gHitMarker\n\ +_08022DA0:\n\ + ldr r6, _08022DD4 @ =gSpecialStatuses\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r6\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022DE0\n\ + ldr r0, _08022DD8 @ =0x02000000\n\ + ldr r1, _08022DDC @ =0x0001606b\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bl sub_8022A3C\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldrb r1, [r0]\n\ + movs r2, 0x40\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _08022DF6\n\ + .align 2, 0\n\ +_08022DD4: .4byte gSpecialStatuses\n\ +_08022DD8: .4byte 0x02000000\n\ +_08022DDC: .4byte 0x0001606b\n\ +_08022DE0:\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + movs r0, 0x2\n\ + mov r2, r9\n\ + orrs r2, r0\n\ + mov r9, r2\n\ +_08022DF6:\n\ + ldr r6, _08022E50 @ =gBitTable\n\ + ldr r0, [r6, 0xC]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _08022EB8\n\ + ldr r0, [r6, 0x4]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + bne _08022EB8\n\ + ldr r4, _08022E54 @ =gActiveBank\n\ + movs r0, 0x3\n\ + strb r0, [r4]\n\ + movs r0, 0x3\n\ + movs r1, 0x6\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08022E60\n\ + ldr r2, _08022E58 @ =gAbsentBankFlags\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r2, _08022E5C @ =gHitMarker\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r2]\n\ + bics r0, r1\n\ + str r0, [r2]\n\ + movs r0, 0\n\ + bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08022EB8\n\ + .align 2, 0\n\ +_08022E50: .4byte gBitTable\n\ +_08022E54: .4byte gActiveBank\n\ +_08022E58: .4byte gAbsentBankFlags\n\ +_08022E5C: .4byte gHitMarker\n\ +_08022E60:\n\ + ldr r6, _08022E94 @ =gSpecialStatuses\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r6\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022EA0\n\ + ldr r0, _08022E98 @ =0x02000000\n\ + ldr r1, _08022E9C @ =0x00016069\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bl sub_8022A3C\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldrb r1, [r0]\n\ + movs r2, 0x40\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _08022EB8\n\ + .align 2, 0\n\ +_08022E94: .4byte gSpecialStatuses\n\ +_08022E98: .4byte 0x02000000\n\ +_08022E9C: .4byte 0x00016069\n\ +_08022EA0:\n\ + movs r0, 0x2\n\ + mov r2, r9\n\ + ands r2, r0\n\ + cmp r2, 0\n\ + bne _08022EB8\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ +_08022EB8:\n\ + ldr r1, _08022EE8 @ =gSpecialStatuses\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022F0C\n\ + adds r0, r1, 0\n\ + adds r0, 0x28\n\ + ldrb r0, [r0]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022F0C\n\ + cmp r5, 0\n\ + beq _08022F0C\n\ + ldr r0, _08022EEC @ =gAbsentBankFlags\n\ + ldrb r1, [r0]\n\ + ldr r0, _08022EF0 @ =gBitTable\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _08022EF8\n\ + ldr r1, _08022EF4 @ =gActiveBank\n\ + movs r0, 0x2\n\ + strb r0, [r1]\n\ + b _08022EFC\n\ + .align 2, 0\n\ +_08022EE8: .4byte gSpecialStatuses\n\ +_08022EEC: .4byte gAbsentBankFlags\n\ +_08022EF0: .4byte gBitTable\n\ +_08022EF4: .4byte gActiveBank\n\ +_08022EF8:\n\ + ldr r0, _08022F3C @ =gActiveBank\n\ + strb r1, [r0]\n\ +_08022EFC:\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldr r0, _08022F3C @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + bl MarkBufferBankForExecution\n\ +_08022F0C:\n\ + ldr r1, _08022F40 @ =gSpecialStatuses\n\ + ldrb r0, [r1, 0x14]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022F62\n\ + adds r0, r1, 0\n\ + adds r0, 0x3C\n\ + ldrb r0, [r0]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _08022F62\n\ + cmp r5, 0\n\ + beq _08022F62\n\ + ldr r0, _08022F44 @ =gAbsentBankFlags\n\ + ldrb r0, [r0]\n\ + ldr r1, _08022F48 @ =gBitTable\n\ + ldr r1, [r1, 0x4]\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08022F4C\n\ + ldr r1, _08022F3C @ =gActiveBank\n\ + movs r0, 0x3\n\ + b _08022F50\n\ + .align 2, 0\n\ +_08022F3C: .4byte gActiveBank\n\ +_08022F40: .4byte gSpecialStatuses\n\ +_08022F44: .4byte gAbsentBankFlags\n\ +_08022F48: .4byte gBitTable\n\ +_08022F4C:\n\ + ldr r1, _08022F6C @ =gActiveBank\n\ + movs r0, 0x1\n\ +_08022F50:\n\ + strb r0, [r1]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldr r0, _08022F6C @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + bl MarkBufferBankForExecution\n\ +_08022F62:\n\ + ldr r1, _08022F70 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x6\n\ + str r0, [r1]\n\ + b _08023302\n\ + .align 2, 0\n\ +_08022F6C: .4byte gActiveBank\n\ +_08022F70: .4byte gBattlescriptCurrInstr\n\ +_08022F74:\n\ + cmp r0, 0x6\n\ + beq _08022F7A\n\ + b _08023170\n\ +_08022F7A:\n\ + ldr r0, _08022FF0 @ =gBattleTypeFlags\n\ + ldrh r2, [r0]\n\ + movs r0, 0x40\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _08022F88\n\ + b _0802310C\n\ +_08022F88:\n\ + movs r0, 0x1\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + bne _08022F92\n\ + b _0802310C\n\ +_08022F92:\n\ + ldr r7, _08022FF4 @ =gHitMarker\n\ + ldr r0, [r7]\n\ + lsrs r5, r0, 28\n\ + ldr r4, _08022FF8 @ =gBitTable\n\ + ldr r0, [r4, 0x8]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _0802303A\n\ + ldr r0, [r4]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _0802303A\n\ + ldr r6, _08022FFC @ =gActiveBank\n\ + movs r0, 0x2\n\ + strb r0, [r6]\n\ + ldr r0, _08023000 @ =gBattleBufferB\n\ + ldrb r1, [r0, 0x1]\n\ + movs r0, 0x2\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08023008\n\ + ldr r2, _08023004 @ =gAbsentBankFlags\n\ + ldrb r0, [r6]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldrb r0, [r6]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r7]\n\ + bics r0, r1\n\ + str r0, [r7]\n\ + movs r0, 0\n\ + bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + ldrb r0, [r6]\n\ + bl MarkBufferBankForExecution\n\ + b _0802303A\n\ + .align 2, 0\n\ +_08022FF0: .4byte gBattleTypeFlags\n\ +_08022FF4: .4byte gHitMarker\n\ +_08022FF8: .4byte gBitTable\n\ +_08022FFC: .4byte gActiveBank\n\ +_08023000: .4byte gBattleBufferB\n\ +_08023004: .4byte gAbsentBankFlags\n\ +_08023008:\n\ + ldr r4, _08023098 @ =gSpecialStatuses\n\ + ldrb r0, [r6]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r4\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _0802303A\n\ + ldr r0, _0802309C @ =0x02000000\n\ + ldr r1, _080230A0 @ =0x00016068\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bl sub_8022A3C\n\ + ldrb r1, [r6]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldrb r1, [r0]\n\ + movs r2, 0x40\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_0802303A:\n\ + ldr r4, _080230A4 @ =gBitTable\n\ + ldr r0, [r4, 0xC]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _080230EE\n\ + ldr r0, [r4, 0x4]\n\ + ands r5, r0\n\ + cmp r5, 0\n\ + beq _080230EE\n\ + ldr r5, _080230A8 @ =gActiveBank\n\ + movs r0, 0x3\n\ + strb r0, [r5]\n\ + ldr r0, _080230AC @ =gBattleBufferB\n\ + ldr r2, _080230B0 @ =0x00000201\n\ + adds r0, r2\n\ + ldrb r1, [r0]\n\ + movs r0, 0x3\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080230BC\n\ + ldr r2, _080230B4 @ =gAbsentBankFlags\n\ + ldrb r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r0, [r0]\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r2, _080230B8 @ =gHitMarker\n\ + ldrb r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r2]\n\ + bics r0, r1\n\ + str r0, [r2]\n\ + movs r0, 0\n\ + bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ + ldrb r0, [r5]\n\ + bl MarkBufferBankForExecution\n\ + b _080230EE\n\ + .align 2, 0\n\ +_08023098: .4byte gSpecialStatuses\n\ +_0802309C: .4byte 0x02000000\n\ +_080230A0: .4byte 0x00016068\n\ +_080230A4: .4byte gBitTable\n\ +_080230A8: .4byte gActiveBank\n\ +_080230AC: .4byte gBattleBufferB\n\ +_080230B0: .4byte 0x00000201\n\ +_080230B4: .4byte gAbsentBankFlags\n\ +_080230B8: .4byte gHitMarker\n\ +_080230BC:\n\ + ldr r4, _080230FC @ =gSpecialStatuses\n\ + ldrb r0, [r5]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r4\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _080230EE\n\ + ldr r0, _08023100 @ =0x02000000\n\ + ldr r1, _08023104 @ =0x00016069\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bl sub_8022A3C\n\ + ldrb r1, [r5]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldrb r1, [r0]\n\ + movs r2, 0x40\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_080230EE:\n\ + ldr r1, _08023108 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x6\n\ + str r0, [r1]\n\ + mov r12, r1\n\ + b _08023110\n\ + .align 2, 0\n\ +_080230FC: .4byte gSpecialStatuses\n\ +_08023100: .4byte 0x02000000\n\ +_08023104: .4byte 0x00016069\n\ +_08023108: .4byte gBattlescriptCurrInstr\n\ +_0802310C:\n\ + adds r0, r1, 0x6\n\ + str r0, [r6]\n\ +_08023110:\n\ + ldr r0, _08023160 @ =gHitMarker\n\ + ldr r0, [r0]\n\ + lsrs r5, r0, 28\n\ + ldr r1, _08023164 @ =gBank1\n\ + movs r0, 0\n\ + strb r0, [r1]\n\ + ldr r4, _08023168 @ =gBitTable\n\ + ldr r2, [r4]\n\ + ands r2, r5\n\ + ldr r6, _0802316C @ =gNoOfAllBanks\n\ + cmp r2, 0\n\ + bne _0802314C\n\ + adds r7, r6, 0\n\ + ldrb r0, [r6]\n\ + cmp r2, r0\n\ + bcs _0802314C\n\ + adds r3, r1, 0\n\ +_08023132:\n\ + ldrb r0, [r3]\n\ + adds r0, 0x1\n\ + strb r0, [r3]\n\ + ldrb r2, [r3]\n\ + lsls r0, r2, 2\n\ + adds r0, r4\n\ + ldr r0, [r0]\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + bne _0802314C\n\ + ldrb r0, [r7]\n\ + cmp r2, r0\n\ + bcc _08023132\n\ +_0802314C:\n\ + ldrb r0, [r1]\n\ + ldrb r6, [r6]\n\ + cmp r0, r6\n\ + beq _08023156\n\ + b _08023302\n\ +_08023156:\n\ + mov r1, r8\n\ + mov r2, r12\n\ + str r1, [r2]\n\ + b _08023302\n\ + .align 2, 0\n\ +_08023160: .4byte gHitMarker\n\ +_08023164: .4byte gBank1\n\ +_08023168: .4byte gBitTable\n\ +_0802316C: .4byte gNoOfAllBanks\n\ +_08023170:\n\ + movs r0, 0x80\n\ + ands r0, r2\n\ + movs r5, 0x1\n\ + cmp r0, 0\n\ + beq _0802317C\n\ + movs r5, 0\n\ +_0802317C:\n\ + movs r0, 0x7F\n\ + ands r0, r2\n\ + bl GetBattleBank\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + ldr r1, _080231A4 @ =gSpecialStatuses\n\ + lsls r0, r7, 2\n\ + adds r0, r7\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + bge _080231A8\n\ + ldr r0, [r6]\n\ + adds r0, 0x6\n\ + str r0, [r6]\n\ + b _08023302\n\ + .align 2, 0\n\ +_080231A4: .4byte gSpecialStatuses\n\ +_080231A8:\n\ + adds r0, r7, 0\n\ + movs r1, 0x6\n\ + movs r2, 0x6\n\ + bl sub_8018018\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080231F8\n\ + ldr r2, _080231E8 @ =gActiveBank\n\ + strb r7, [r2]\n\ + ldr r3, _080231EC @ =gAbsentBankFlags\n\ + ldr r4, _080231F0 @ =gBitTable\n\ + ldrb r0, [r2]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r0, [r0]\n\ + ldrb r1, [r3]\n\ + orrs r0, r1\n\ + strb r0, [r3]\n\ + ldr r3, _080231F4 @ =gHitMarker\n\ + ldrb r0, [r2]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r1, [r0]\n\ + lsls r1, 28\n\ + ldr r0, [r3]\n\ + bics r0, r1\n\ + str r0, [r3]\n\ + mov r0, r8\n\ + str r0, [r6]\n\ + b _08023302\n\ + .align 2, 0\n\ +_080231E8: .4byte gActiveBank\n\ +_080231EC: .4byte gAbsentBankFlags\n\ +_080231F0: .4byte gBitTable\n\ +_080231F4: .4byte gHitMarker\n\ +_080231F8:\n\ + ldr r4, _080232A0 @ =gActiveBank\n\ + strb r7, [r4]\n\ + ldr r3, _080232A4 @ =0x02000000\n\ + ldrb r0, [r4]\n\ + ldr r2, _080232A8 @ =0x00016064\n\ + adds r1, r0, r2\n\ + adds r1, r3\n\ + ldr r2, _080232AC @ =gBattlePartyID\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + strb r0, [r1]\n\ + ldrb r1, [r4]\n\ + movs r0, 0x2\n\ + eors r0, r1\n\ + ldr r1, _080232B0 @ =0x00016068\n\ + adds r0, r1\n\ + adds r0, r3\n\ + ldrb r2, [r0]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + ldr r1, _080232B4 @ =0x0001606c\n\ + adds r3, r1\n\ + adds r0, r3\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + adds r1, r5, 0\n\ + movs r3, 0\n\ + bl EmitChoosePokemon\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, [r6]\n\ + adds r0, 0x6\n\ + str r0, [r6]\n\ + ldrb r0, [r4]\n\ + bl GetBankIdentity\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0802325A\n\ + ldr r1, _080232B8 @ =gBattleResults\n\ + ldrb r0, [r1, 0x2]\n\ + cmp r0, 0xFE\n\ + bhi _0802325A\n\ + adds r0, 0x1\n\ + strb r0, [r1, 0x2]\n\ +_0802325A:\n\ + ldr r0, _080232BC @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080232C4\n\ + ldr r1, _080232A0 @ =gActiveBank\n\ + movs r0, 0\n\ + strb r0, [r1]\n\ + ldr r0, _080232C0 @ =gNoOfAllBanks\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _08023302\n\ + adds r4, r1, 0\n\ +_08023276:\n\ + ldrb r0, [r4]\n\ + cmp r0, r7\n\ + beq _0802328A\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ +_0802328A:\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + ldr r1, _080232C0 @ =gNoOfAllBanks\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc _08023276\n\ + b _08023302\n\ + .align 2, 0\n\ +_080232A0: .4byte gActiveBank\n\ +_080232A4: .4byte 0x02000000\n\ +_080232A8: .4byte 0x00016064\n\ +_080232AC: .4byte gBattlePartyID\n\ +_080232B0: .4byte 0x00016068\n\ +_080232B4: .4byte 0x0001606c\n\ +_080232B8: .4byte gBattleResults\n\ +_080232BC: .4byte gBattleTypeFlags\n\ +_080232C0: .4byte gNoOfAllBanks\n\ +_080232C4:\n\ + adds r0, r7, 0\n\ + bl GetBankIdentity\n\ + movs r1, 0x1\n\ + eors r0, r1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetBankByPlayerAI\n\ + ldr r4, _08023310 @ =gActiveBank\n\ + strb r0, [r4]\n\ + ldr r0, _08023314 @ =gAbsentBankFlags\n\ + ldrb r1, [r0]\n\ + ldr r2, _08023318 @ =gBitTable\n\ + ldrb r3, [r4]\n\ + lsls r0, r3, 2\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _080232F4\n\ + movs r0, 0x2\n\ + eors r3, r0\n\ + strb r3, [r4]\n\ +_080232F4:\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + bl EmitLinkStandbyMsg\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ +_08023302:\n\ + add sp, 0x4\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\ +_08023310: .4byte gActiveBank\n\ +_08023314: .4byte gAbsentBankFlags\n\ +_08023318: .4byte gBitTable\n\ + .syntax divided"); +} + +static void atk51_switch_handle_order(void) +{ + int i; + if (gBattleExecBuffer) + return; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + switch (BSScriptRead8(gBattlescriptCurrInstr + 2)) + { + case 0: + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleBufferB[i][0] == 0x22) + ewram[i + 0x16068] = gBattleBufferB[i][1]; + } + break; + case 1: + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + sub_8012258(gActiveBank); + break; + case 2: + gBattleCommunication[0] = gBattleBufferB[gActiveBank][1]; + ewram[gActiveBank + 0x16068] = gBattleBufferB[gActiveBank][1]; + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + + ewram[(gActiveBank) * 3 + (0x1606C + 0)] &= 0xF; + ewram[(gActiveBank) * 3 + (0x1606C + 0)] |= (gBattleBufferB[gActiveBank][2] & 0xF0); + ewram[(gActiveBank) * 3 + (0x1606C + 1)] = gBattleBufferB[gActiveBank][3]; + + ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 0)] &= (0xF0); + ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 0)] |= (gBattleBufferB[gActiveBank][2] & 0xF0) >> 4; + ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 2)] = gBattleBufferB[gActiveBank][3]; + } + else + sub_8012258(gActiveBank); + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 6; + gBattleTextBuff1[2] = gBattleMons[gBankAttacker].species; + gBattleTextBuff1[3] = gBattleMons[gBankAttacker].species >> 8; + gBattleTextBuff1[4] = 0xFF; + + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 7; + gBattleTextBuff2[2] = gActiveBank; + gBattleTextBuff2[3] = gBattleBufferB[gActiveBank][1]; + gBattleTextBuff2[4] = 0xFF; + break; + } + gBattlescriptCurrInstr += 3; +} + +static void atk52_switch_in_effects(void) +{ + int i; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + sub_80157C4(gActiveBank); + gHitMarker &= ~(HITMARKER_FAINTED(gActiveBank)); + gSpecialStatuses[gActiveBank].flag40 = 0; + + if (!(gSideAffecting[GetBankSide(gActiveBank)] & SIDE_STATUS_SPIKES_DAMAGED) && (gSideAffecting[GetBankSide(gActiveBank)] & SIDE_STATUS_SPIKES) + && gBattleMons[gActiveBank].type1 != TYPE_FLYING && gBattleMons[gActiveBank].type2 != TYPE_FLYING && gBattleMons[gActiveBank].ability != ABILITY_LEVITATE) + { + u8 spikesDmg; + + gSideAffecting[GetBankSide(gActiveBank)] |= SIDE_STATUS_SPIKES_DAMAGED; + + spikesDmg = (5 - gSideTimer[GetBankSide(gActiveBank)].spikesAmount) * 2; + gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / (spikesDmg); + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + + BATTLE_STRUCT->scriptingActive = gActiveBank; + b_movescr_stack_push_cursor(); + + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) + gBattlescriptCurrInstr = gUnknown_081D919F; + else if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 1) + gBattlescriptCurrInstr = gUnknown_081D9171; + else + gBattlescriptCurrInstr = gUnknown_081D91CD; + } + else + { + if (gBattleMons[gActiveBank].ability == ABILITY_TRUANT) + { + gDisableStructs[gActiveBank].truantCounter = 1; + } + + if (AbilityBattleEffects(0, gActiveBank, 0, 0, 0) == 0 && ItemBattleEffects(0, gActiveBank, 0) == 0) + { + gSideAffecting[GetBankSide(gActiveBank)] &= ~(SIDE_STATUS_SPIKES_DAMAGED); + + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gTurnOrder[i] == gActiveBank) + gUnknown_02024A76[i] = 0xC; + } + + for (i = 0; i < gNoOfAllBanks; i++) + { + *(HP_ON_SWITCHOUT + GetBankSide(i)) = gBattleMons[i].hp; + } + + if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 5) + { + u32 hitmark = gHitMarker >> 0x1C; + gBank1++; + while (1) + { + if (hitmark & gBitTable[gBank1] && !(gAbsentBankFlags & gBitTable[gBank1])) + break; + if (gBank1 >= gNoOfAllBanks) + break; + gBank1++; + } + } + gBattlescriptCurrInstr += 2; + } + } +} + +static void atk53_trainer_slide(void) +{ + if (!BSScriptRead8(gBattlescriptCurrInstr + 1)) + gActiveBank = GetBankByPlayerAI(0); + else + gActiveBank = GetBankByPlayerAI(1); + + EmitTrainerSlide(0); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk54_effectiveness_sound(void) +{ + gActiveBank = gBankAttacker; + EmitEffectivenessSound(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1)); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 3; +} + +static void atk55_play_sound(void) +{ + gActiveBank = gBankAttacker; + EmitPlaySound(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1)); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 3; +} + +static void atk56_fainting_cry(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + EmitFaintingCry(0); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk57(void) +{ + gActiveBank = GetBankByPlayerAI(0); + dp01_build_cmdbuf_x37_a(0, gBattleOutcome); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 1; +} + +static void atk58_return_to_ball(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + EmitReturnPokeToBall(0, 1); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +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)); + while (ret == 0xFFFE) + ret = sub_803B7C8(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0); + + if (ret == 0) + { + gBattlescriptCurrInstr = loc2; + } + else if (ret == 0xFFFF) + { + gBattlescriptCurrInstr += 10; + } + else + { + gActiveBank = GetBankByPlayerAI(0); + if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) + GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) //what is else if + { + gActiveBank = GetBankByPlayerAI(2); + if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) + GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret); + } + gBattlescriptCurrInstr = loc1; + } +} + +void sub_8023A80(void) +{ + sub_802BBD4(0x18, 8, 0x1D, 0xD, 0); + InitWindow(&gUnknown_03004210, gUnknown_08400D7A, 0x100, 0x19, 0x9); + sub_8002F44(&gUnknown_03004210); + sub_814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20); +} + +void sub_8023AD8(void) +{ + sub_802BBD4(0x18, 8, 0x1D, 0xD, 1); + DestroyMenuCursor(); +} + +static void atk5A(void) +{ + gActiveBank = 0; + switch (BATTLE_STRUCT->atk5A_StateTracker) + { + case 0: + sub_8023A80(); + BATTLE_STRUCT->atk5A_StateTracker++; + gBattleCommunication[1] = 0; + sub_802BC6C(); + break; + case 1: + if (gMain.newKeys & DPAD_UP && gBattleCommunication[1] != 0) + { + PlaySE(SE_SELECT); + nullsub_6(); + gBattleCommunication[1] = 0; + sub_802BC6C(); + } + if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[1] == 0) + { + PlaySE(SE_SELECT); + nullsub_6(); + gBattleCommunication[1] = 1; + sub_802BC6C(); + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gBattleCommunication[1] == 0) + { + sub_8023AD8(); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + BATTLE_STRUCT->atk5A_StateTracker++; + return; + } + goto state_tracker_4; + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + state_tracker_4: + BATTLE_STRUCT->atk5A_StateTracker = 4; + } + break; + case 2: + if (!gPaletteFade.active) + { + sub_809D9F0(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, word_2024E82); + BATTLE_STRUCT->atk5A_StateTracker++; + } + break; + case 3: + if (!gPaletteFade.active && gMain.callback2 == sub_800F808) + { + u8 move_pos = sub_809FA30(); + if (move_pos == 4) + { + BATTLE_STRUCT->atk5A_StateTracker = 4; + } + else + { + u16 move = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MOVE1 + move_pos); + if (IsHMMove2(move)) + { + PrepareStringBattle(0x13F, gActiveBank); + BATTLE_STRUCT->atk5A_StateTracker = 5; + } + else + { + u8 *ptr; + + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + ptr = gBattleTextBuff2; + { + ptr[0] = 0xFD; + ptr[1] = 2; + ptr[2] = move; + ptr[3] = ((move & 0xFF00) >> 8); + ptr += 4; + } + ptr[0] = 0xFF; + RemoveMonPPBonus(&gPlayerParty[BATTLE_STRUCT->expGetterID], move_pos); + SetMonMoveSlot(&gPlayerParty[BATTLE_STRUCT->expGetterID], word_2024E82, 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); + } + 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); + } + } + } + } + break; + case 4: + sub_8023AD8(); + gBattlescriptCurrInstr += 5; + break; + case 5: + if (gBattleExecBuffer == 0) + { + BATTLE_STRUCT->atk5A_StateTracker = 2; + } + break; + } +} + +static void atk5B_80256E0(void) +{ + switch (BATTLE_STRUCT->atk5A_StateTracker) + { + case 0: + sub_8023A80(); + BATTLE_STRUCT->atk5A_StateTracker++; + gBattleCommunication[1] = 0; + sub_802BC6C(); + break; + case 1: + if (gMain.newKeys & DPAD_UP && gBattleCommunication[1] != 0) + { + PlaySE(SE_SELECT); + nullsub_6(); + gBattleCommunication[1] = 0; + sub_802BC6C(); + } + if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[1] == 0) + { + PlaySE(SE_SELECT); + nullsub_6(); + gBattleCommunication[1] = 1; + sub_802BC6C(); + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gBattleCommunication[1] != 0) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; + sub_8023AD8(); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + sub_8023AD8(); + } + } +} + +static void atk5C_hitanimation(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) + gBattlescriptCurrInstr += 2; + else if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) || !(gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE) || gDisableStructs[gActiveBank].substituteHP == 0) + { + EmitHitAnimation(0); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; + } + else + gBattlescriptCurrInstr += 2; +} + +#define MONEY_UNKNOWN ((*(u8*)(0x02017000 + 0x94))) + +#ifdef NONMATCHING +static void atk5D_getmoneyreward(void) +{ + int i = 0; + u8 r5 = 0; + u32 money_to_give; + if (gTrainerBattleOpponent == 0x400) + { + money_to_give = 2 * BATTLE_STRUCT->moneyMultiplier * MONEY_UNKNOWN; + } + else + { + switch(gTrainers[gTrainerBattleOpponent].partyFlags) + { + case 0: + { + const struct PokeTrainerData1 *data = &gTrainers[gTrainerBattleOpponent].party->noItemNoMoves; + r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].lvl; + } + break; + case 2: + { + const struct PokeTrainerData2 *data = &gTrainers[gTrainerBattleOpponent].party->itemNoMoves; + r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].lvl; + } + break; + case 1: + case 3: + { + const struct PokeTrainerData3 *data = &gTrainers[gTrainerBattleOpponent].party->itemMoves; + r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].lvl; + } + break; + } + for (; gTrainerMoney[i * 4] != 0xFF && gTrainerMoney[i * 4 + 1] != gTrainers[gTrainerBattleOpponent].trainerClass ; i++) {} + + money_to_give = (r5 << 2) * BATTLE_STRUCT->moneyMultiplier; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + money_to_give = 2 * gTrainerMoney[i * 4 + 1] * money_to_give; + else + money_to_give = 1 * gTrainerMoney[i * 4 + 1] * money_to_give; + } + + sub_80B79B8(&gSaveBlock1.money, money_to_give); + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 1; + gBattleTextBuff1[2] = 4; + gBattleTextBuff1[3] = 5; + gBattleTextBuff1[4] = BYTE0(money_to_give); + gBattleTextBuff1[5] = BYTE1(money_to_give); + gBattleTextBuff1[6] = BYTE2(money_to_give); + gBattleTextBuff1[7] = BYTE3(money_to_give); + gBattleTextBuff1[8] = 0xFF; + + gBattlescriptCurrInstr += 1; +} +#else +__attribute__((naked)) +static void atk5D_getmoneyreward(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + movs r6, 0\n\ + movs r5, 0\n\ + ldr r0, _08024048 @ =gTrainerBattleOpponent\n\ + ldrh r2, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 3\n\ + cmp r2, r1\n\ + bne _08024058\n\ + ldr r0, _0802404C @ =0x02017000\n\ + adds r1, r0, 0\n\ + adds r1, 0x94\n\ + ldrb r2, [r1]\n\ + ldr r1, _08024050 @ =0xfffff056\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r4, r2, 0\n\ + muls r4, r0\n\ + ldr r0, _08024054 @ =gSaveBlock1 + 0x490\n\ + mov r8, r0\n\ + b _08024140\n\ + .align 2, 0\n\ +_08024048: .4byte gTrainerBattleOpponent\n\ +_0802404C: .4byte 0x02017000\n\ +_08024050: .4byte 0xfffff056\n\ +_08024054: .4byte gSaveBlock1 + 0x490\n\ +_08024058:\n\ + ldr r2, _08024074 @ =gTrainers\n\ + ldrh r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r3, r0, 3\n\ + adds r4, r3, r2\n\ + ldrb r1, [r4]\n\ + cmp r1, 0x1\n\ + beq _080240AE\n\ + cmp r1, 0x1\n\ + bgt _08024078\n\ + cmp r1, 0\n\ + beq _08024082\n\ + b _080240C4\n\ + .align 2, 0\n\ +_08024074: .4byte gTrainers\n\ +_08024078:\n\ + cmp r1, 0x2\n\ + beq _08024098\n\ + cmp r1, 0x3\n\ + beq _080240AE\n\ + b _080240C4\n\ +_08024082:\n\ + adds r0, r2, 0\n\ + adds r0, 0x24\n\ + adds r0, r3, r0\n\ + ldr r1, [r0]\n\ + adds r0, r4, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + subs r0, 0x8\n\ + b _080240C2\n\ +_08024098:\n\ + adds r0, r2, 0\n\ + adds r0, 0x24\n\ + adds r0, r3, r0\n\ + ldr r1, [r0]\n\ + adds r0, r4, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + subs r0, 0x8\n\ + b _080240C2\n\ +_080240AE:\n\ + adds r0, r2, 0\n\ + adds r0, 0x24\n\ + adds r0, r3, r0\n\ + ldr r1, [r0]\n\ + adds r0, r4, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + lsls r0, 4\n\ + adds r0, r1\n\ + subs r0, 0x10\n\ +_080240C2:\n\ + ldrb r5, [r0, 0x2]\n\ +_080240C4:\n\ + ldr r0, _08024120 @ =gTrainerMoney\n\ + lsls r1, r6, 2\n\ + adds r3, r1, r0\n\ + ldrb r1, [r3]\n\ + mov r12, r0\n\ + lsls r4, r5, 2\n\ + ldr r5, _08024124 @ =0x02000000\n\ + ldr r7, _08024128 @ =gBattleTypeFlags\n\ + ldr r0, _0802412C @ =gSaveBlock1 + 0x490\n\ + mov r8, r0\n\ + cmp r1, 0xFF\n\ + beq _080240FE\n\ + ldr r2, _08024130 @ =gTrainers\n\ + ldr r0, _08024134 @ =gTrainerBattleOpponent\n\ + ldrh r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 3\n\ + adds r0, r2\n\ + ldrb r2, [r0, 0x1]\n\ + adds r1, r3, 0\n\ +_080240EE:\n\ + ldrb r0, [r1]\n\ + cmp r0, r2\n\ + beq _080240FE\n\ + adds r1, 0x4\n\ + adds r6, 0x1\n\ + ldrb r0, [r1]\n\ + cmp r0, 0xFF\n\ + bne _080240EE\n\ +_080240FE:\n\ + ldr r1, _08024138 @ =0x00016056\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + adds r3, r4, 0\n\ + muls r3, r0\n\ + lsls r0, r6, 2\n\ + add r0, r12\n\ + ldrb r2, [r0, 0x1]\n\ + ldrh r1, [r7]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0802413C\n\ + lsls r0, r2, 1\n\ + adds r4, r3, 0\n\ + muls r4, r0\n\ + b _08024140\n\ + .align 2, 0\n\ +_08024120: .4byte gTrainerMoney\n\ +_08024124: .4byte 0x02000000\n\ +_08024128: .4byte gBattleTypeFlags\n\ +_0802412C: .4byte gSaveBlock1 + 0x490\n\ +_08024130: .4byte gTrainers\n\ +_08024134: .4byte gTrainerBattleOpponent\n\ +_08024138: .4byte 0x00016056\n\ +_0802413C:\n\ + adds r4, r3, 0\n\ + muls r4, r2\n\ +_08024140:\n\ + mov r0, r8\n\ + adds r1, r4, 0\n\ + bl sub_80B79B8\n\ + ldr r1, _0802418C @ =gBattleTextBuff1\n\ + movs r0, 0xFD\n\ + strb r0, [r1]\n\ + movs r0, 0x1\n\ + strb r0, [r1, 0x1]\n\ + movs r0, 0x4\n\ + strb r0, [r1, 0x2]\n\ + movs r0, 0x5\n\ + strb r0, [r1, 0x3]\n\ + strb r4, [r1, 0x4]\n\ + movs r0, 0xFF\n\ + lsls r0, 8\n\ + ands r0, r4\n\ + lsrs r0, 8\n\ + strb r0, [r1, 0x5]\n\ + movs r0, 0xFF\n\ + lsls r0, 16\n\ + ands r0, r4\n\ + lsrs r0, 16\n\ + strb r0, [r1, 0x6]\n\ + lsrs r0, r4, 24\n\ + strb r0, [r1, 0x7]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x8]\n\ + ldr r1, _08024190 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x1\n\ + str r0, [r1]\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0802418C: .4byte gBattleTextBuff1\n\ +_08024190: .4byte gBattlescriptCurrInstr\n\ + .syntax divided"); +} +#endif //NONMATCHING + +static void atk5E_8025A70(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + switch (gBattleCommunication[0]) + { + case 0: + EmitGetAttributes(0, REQUEST_ALL_BATTLE, 0); + MarkBufferBankForExecution(gActiveBank); + gBattleCommunication[0]++; + break; + case 1: + if (gBattleExecBuffer == 0) + { + int i; + struct BattlePokemon* bufferPoke = (struct BattlePokemon*) &gBattleBufferB[gActiveBank][4]; + for (i = 0; i < 4; i++) + { + gBattleMons[gActiveBank].moves[i] = bufferPoke->moves[i]; + gBattleMons[gActiveBank].pp[i] = bufferPoke->pp[i]; + } + gBattlescriptCurrInstr += 2; + } + break; + } +} + +static void atk5F_8025B24(void) +{ + gActiveBank = gBankAttacker; + gBankAttacker = gBankTarget; + gBankTarget = gActiveBank; + //what is xor... + if (gHitMarker & HITMARKER_PURSUIT_TRAP) + gHitMarker &= ~(HITMARKER_PURSUIT_TRAP); + else + gHitMarker |= HITMARKER_PURSUIT_TRAP; + gBattlescriptCurrInstr++; +} + +static void atk60_increment_gamestat(void) +{ + if (GetBankSide(gBankAttacker) == 0) + { + IncrementGameStat(BSScriptRead8(gBattlescriptCurrInstr + 1)); + } + gBattlescriptCurrInstr += 2; +} + +struct hp_status +{ + u16 hp; + u32 status; +}; + +static void atk61_8025BA4(void) +{ + int i; + struct Pokemon* party; + struct hp_status hpStatus[6]; + if (gBattleExecBuffer) + return; + + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (GetBankSide(gActiveBank) == 0) + party = gPlayerParty; + else + party = gEnemyParty; + + for (i = 0; i < 6; i++) + { + if (GetMonData(&party[i], MON_DATA_SPECIES2) == 0 || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) + { + hpStatus[i].hp = 0xFFFF; + hpStatus[i].status = 0; + } + else + { + hpStatus[i].hp = GetMonData(&party[i], MON_DATA_HP); + hpStatus[i].status = GetMonData(&party[i], MON_DATA_STATUS); + } + } + dp01_build_cmdbuf_x30_TODO(0, (u8*)(hpStatus), 1); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk62_08025C6C(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + dp01_build_cmdbuf_x31_31_31_31(0); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk63_jumptorandomattack(void) +{ + if (BSScriptRead8(gBattlescriptCurrInstr + 1)) + gCurrentMove = gRandomMove; + else + gUnknown_02024BE8 = gCurrentMove = gRandomMove; + gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; +} + +static void atk64_statusanimation(void) +{ + if (gBattleExecBuffer == 0) + { + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) + { + EmitStatusAnimation(0, 0, gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + } + gBattlescriptCurrInstr += 2; + } +} + +static void atk65_status2animation(void) +{ + if (gBattleExecBuffer == 0) + { + u32 possible_to_anim; + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + possible_to_anim = BSScriptRead32(gBattlescriptCurrInstr + 2); + if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) + { + EmitStatusAnimation(0, 1, gBattleMons[gActiveBank].status2 & possible_to_anim); + MarkBufferBankForExecution(gActiveBank); + } + gBattlescriptCurrInstr += 6; + } +} + +static void atk66_chosenstatusanimation(void) +{ + if (gBattleExecBuffer == 0) + { + u32 status; + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + status = BSScriptRead32(gBattlescriptCurrInstr + 3); + if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) + { + EmitStatusAnimation(0, BSScriptRead8(gBattlescriptCurrInstr + 2), status); + MarkBufferBankForExecution(gActiveBank); + } + gBattlescriptCurrInstr += 7; + } +} + +static void atk67_8025ECC(void) +{ + switch (gBattleCommunication[0]) + { + case 0: + sub_8023A80(); + gBattleCommunication[0]++; + gBattleCommunication[1] = 0; + sub_802BC6C(); + break; + case 1: + if (gMain.newKeys & DPAD_UP && gBattleCommunication[1] != 0) + { + PlaySE(SE_SELECT); + nullsub_6(); + gBattleCommunication[1] = 0; + sub_802BC6C(); + } + if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[1] == 0) + { + PlaySE(SE_SELECT); + nullsub_6(); + gBattleCommunication[1] = 1; + sub_802BC6C(); + } + if (gMain.newKeys & B_BUTTON) + { + gBattleCommunication[1] = 1; + PlaySE(SE_SELECT); + sub_8023AD8(); + gBattlescriptCurrInstr++; + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_8023AD8(); + gBattlescriptCurrInstr++; + } + break; + } +} + +static void atk68_80246A0(void) +{ + int i; + for (i = 0; i < gNoOfAllBanks; i++) + { + gUnknown_02024A76[i] = 0xC; + } + gBattlescriptCurrInstr++; +} + +static void atk69_dmg_adjustment2(void) //literally a copy of atk07 except theres no rand dmg modifier... +{ + u8 hold_effect, quality; + if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) + hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; + else + { + hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); + quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); + } + + gStringBank = gBankTarget; + + if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality) + { + RecordItemBattle(gBankTarget, hold_effect); + gSpecialStatuses[gBankTarget].focusBanded = 1; + } + if (gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE) + goto END; + if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBankTarget].endured + && !gSpecialStatuses[gBankTarget].focusBanded) + goto END; + if (gBattleMons[gBankTarget].hp > gBattleMoveDamage) + goto END; + + gBattleMoveDamage = gBattleMons[gBankTarget].hp - 1; + + if (gProtectStructs[gBankTarget].endured) + { + gBattleMoveFlags |= MOVESTATUS_ENDURED; + goto END; + } + if (gSpecialStatuses[gBankTarget].focusBanded) + { + gBattleMoveFlags |= MOVESTATUS_HUNGON; + gLastUsedItem = gBattleMons[gBankTarget].item; + } + + END: + gBattlescriptCurrInstr++; +} + +void atk6A_removeitem(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + #define USED_HELD_ITEMS(bank) (*(u16 *)&ewram[0x160CC + 2 * (bank)]) + USED_HELD_ITEMS(gActiveBank) = gBattleMons[gActiveBank].item; + + gBattleMons[gActiveBank].item = 0; + EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk6B_atknameinbuff1(void) +{ + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 7; + gBattleTextBuff1[2] = gBankAttacker; + gBattleTextBuff1[3] = gBattlePartyID[gBankAttacker]; + gBattleTextBuff1[4] = 0xFF; + gBattlescriptCurrInstr++; +} + +#ifdef NONMATCHING +static void atk6C_lvlbox_display(void) +{ + u8 r1 = 0; + u8 r7 = 0; + switch (BATTLE_STRUCT->atk6C_statetracker) + { + case 0: + sub_802BBD4(0xB, 0, 0x1D, 0x7, r1); + StringCopy(gStringVar4, gUnknown_08400D9F); + + } +} + +#else +__attribute__((naked)) +static void atk6C_lvlbox_display(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\ + movs r1, 0\n\ + movs r7, 0\n\ + ldr r0, _08024928 @ =0x02000000\n\ + mov r10, r0\n\ + ldr r4, _0802492C @ =0x0001609c\n\ + add r4, r10\n\ + ldrb r0, [r4]\n\ + cmp r0, 0x1\n\ + bne _0802491C\n\ + b _08024AF4\n\ +_0802491C:\n\ + cmp r0, 0x1\n\ + bgt _08024930\n\ + cmp r0, 0\n\ + beq _0802493E\n\ + b _08024C38\n\ + .align 2, 0\n\ +_08024928: .4byte 0x02000000\n\ +_0802492C: .4byte 0x0001609c\n\ +_08024930:\n\ + cmp r0, 0x2\n\ + bne _08024936\n\ + b _08024C04\n\ +_08024936:\n\ + cmp r0, 0x3\n\ + bne _0802493C\n\ + b _08024C30\n\ +_0802493C:\n\ + b _08024C38\n\ +_0802493E:\n\ + str r1, [sp]\n\ + movs r0, 0xB\n\ + movs r1, 0\n\ + movs r2, 0x1D\n\ + movs r3, 0x7\n\ + bl sub_802BBD4\n\ + ldr r0, _0802499C @ =gStringVar4\n\ + ldr r1, _080249A0 @ =gUnknown_08400D9F\n\ + bl StringCopy\n\ + adds r5, r0, 0\n\ + movs r1, 0\n\ + mov r8, r1\n\ +_0802495A:\n\ + movs r2, 0\n\ + mov r9, r2\n\ + ldr r0, _080249A4 @ =gUnknown_0840165C\n\ + mov r1, r8\n\ + lsls r4, r1, 2\n\ + adds r0, r4, r0\n\ + ldr r1, [r0]\n\ + adds r0, r5, 0\n\ + bl StringAppend\n\ + adds r5, r0, 0\n\ + ldr r0, _080249A8 @ =0x02000000\n\ + ldr r2, _080249AC @ =0x00016018\n\ + adds r0, r2\n\ + ldrb r1, [r0]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _080249B0 @ =gPlayerParty\n\ + adds r0, r1\n\ + ldr r1, _080249B4 @ =gLevelUpStatBoxStats\n\ + add r1, r8\n\ + ldrb r1, [r1]\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + mov r0, r8\n\ + cmp r0, 0x5\n\ + bhi _08024A1A\n\ + ldr r0, _080249B8 @ =_080249BC\n\ + adds r0, r4, r0\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0802499C: .4byte gStringVar4\n\ +_080249A0: .4byte gUnknown_08400D9F\n\ +_080249A4: .4byte gUnknown_0840165C\n\ +_080249A8: .4byte 0x02000000\n\ +_080249AC: .4byte 0x00016018\n\ +_080249B0: .4byte gPlayerParty\n\ +_080249B4: .4byte gLevelUpStatBoxStats\n\ +_080249B8: .4byte _080249BC\n\ + .align 2, 0\n\ +_080249BC:\n\ + .4byte _080249D4\n\ + .4byte _080249E0\n\ + .4byte _080249EC\n\ + .4byte _080249F8\n\ + .4byte _08024A04\n\ + .4byte _08024A10\n\ +_080249D4:\n\ + ldr r0, _080249DC @ =0x02017180\n\ + ldrh r0, [r0]\n\ + b _08024A14\n\ + .align 2, 0\n\ +_080249DC: .4byte 0x02017180\n\ +_080249E0:\n\ + ldr r0, _080249E8 @ =0x02017180\n\ + ldrh r0, [r0, 0x8]\n\ + b _08024A14\n\ + .align 2, 0\n\ +_080249E8: .4byte 0x02017180\n\ +_080249EC:\n\ + ldr r0, _080249F4 @ =0x02017180\n\ + ldrh r0, [r0, 0x2]\n\ + b _08024A14\n\ + .align 2, 0\n\ +_080249F4: .4byte 0x02017180\n\ +_080249F8:\n\ + ldr r0, _08024A00 @ =0x02017180\n\ + ldrh r0, [r0, 0xA]\n\ + b _08024A14\n\ + .align 2, 0\n\ +_08024A00: .4byte 0x02017180\n\ +_08024A04:\n\ + ldr r0, _08024A0C @ =0x02017180\n\ + ldrh r0, [r0, 0x4]\n\ + b _08024A14\n\ + .align 2, 0\n\ +_08024A0C: .4byte 0x02017180\n\ +_08024A10:\n\ + ldr r0, _08024A54 @ =0x02017180\n\ + ldrh r0, [r0, 0x6]\n\ +_08024A14:\n\ + subs r0, r1, r0\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ +_08024A1A:\n\ + lsls r0, r7, 16\n\ + asrs r0, 16\n\ + cmp r0, 0\n\ + bge _08024A2C\n\ + negs r0, r0\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + movs r1, 0x1\n\ + add r9, r1\n\ +_08024A2C:\n\ + movs r0, 0xFC\n\ + strb r0, [r5]\n\ + movs r0, 0x13\n\ + strb r0, [r5, 0x1]\n\ + movs r1, 0x1\n\ + mov r2, r8\n\ + ands r1, r2\n\ + lsls r0, r1, 3\n\ + adds r0, r1\n\ + adds r0, 0x5\n\ + lsls r0, 3\n\ + adds r0, 0x6\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + mov r0, r9\n\ + cmp r0, 0\n\ + beq _08024A5C\n\ + ldr r1, _08024A58 @ =gUnknown_08400DAC\n\ + b _08024A5E\n\ + .align 2, 0\n\ +_08024A54: .4byte 0x02017180\n\ +_08024A58: .4byte gUnknown_08400DAC\n\ +_08024A5C:\n\ + ldr r1, _08024AA4 @ =gUnknown_08400DAA\n\ +_08024A5E:\n\ + adds r0, r5, 0\n\ + bl StringCopy\n\ + adds r5, r0, 0\n\ + movs r6, 0xFC\n\ + strb r6, [r5]\n\ + movs r4, 0x14\n\ + strb r4, [r5, 0x1]\n\ + movs r0, 0x6\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + lsls r1, r7, 16\n\ + asrs r1, 16\n\ + adds r0, r5, 0\n\ + movs r2, 0x1\n\ + movs r3, 0x2\n\ + bl ConvertIntToDecimalStringN\n\ + adds r5, r0, 0\n\ + strb r6, [r5]\n\ + strb r4, [r5, 0x1]\n\ + movs r0, 0\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + movs r0, 0x1\n\ + mov r1, r8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08024AA8\n\ + movs r0, 0xFE\n\ + strb r0, [r5]\n\ + movs r0, 0xFF\n\ + strb r0, [r5, 0x1]\n\ + adds r5, 0x1\n\ + b _08024AB8\n\ + .align 2, 0\n\ +_08024AA4: .4byte gUnknown_08400DAA\n\ +_08024AA8:\n\ + strb r6, [r5]\n\ + movs r0, 0x11\n\ + strb r0, [r5, 0x1]\n\ + movs r0, 0x8\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + movs r0, 0xFF\n\ + strb r0, [r5]\n\ +_08024AB8:\n\ + movs r2, 0x1\n\ + add r8, r2\n\ + mov r0, r8\n\ + cmp r0, 0x5\n\ + bgt _08024AC4\n\ + b _0802495A\n\ +_08024AC4:\n\ + ldr r4, _08024AE4 @ =gUnknown_03004210\n\ + ldr r1, _08024AE8 @ =gStringVar4\n\ + adds r2, 0xFF\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + adds r0, r4, 0\n\ + movs r3, 0xC\n\ + bl InitWindow\n\ + adds r0, r4, 0\n\ + bl sub_8002F44\n\ + ldr r1, _08024AEC @ =0x02000000\n\ + ldr r2, _08024AF0 @ =0x0001609c\n\ + adds r1, r2\n\ + b _08024BEA\n\ + .align 2, 0\n\ +_08024AE4: .4byte gUnknown_03004210\n\ +_08024AE8: .4byte gStringVar4\n\ +_08024AEC: .4byte 0x02000000\n\ +_08024AF0: .4byte 0x0001609c\n\ +_08024AF4:\n\ + ldr r0, _08024B94 @ =gMain\n\ + ldrh r0, [r0, 0x2E]\n\ + cmp r0, 0\n\ + bne _08024AFE\n\ + b _08024C38\n\ +_08024AFE:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r0, _08024B98 @ =gStringVar4\n\ + ldr r1, _08024B9C @ =gUnknown_08400D9F\n\ + bl StringCopy\n\ + adds r5, r0, 0\n\ + movs r0, 0\n\ + mov r8, r0\n\ + mov r9, r0\n\ + movs r6, 0xFC\n\ + movs r7, 0x14\n\ + ldr r1, _08024BA0 @ =0x00016018\n\ + add r10, r1\n\ +_08024B1C:\n\ + ldr r1, _08024BA4 @ =gUnknown_0840165C\n\ + mov r2, r8\n\ + lsls r0, r2, 2\n\ + adds r0, r1\n\ + ldr r1, [r0]\n\ + adds r0, r5, 0\n\ + bl StringAppend\n\ + adds r5, r0, 0\n\ + mov r0, r10\n\ + ldrb r1, [r0]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, _08024BA8 @ =gPlayerParty\n\ + adds r0, r1\n\ + ldr r1, _08024BAC @ =gLevelUpStatBoxStats\n\ + add r1, r8\n\ + ldrb r1, [r1]\n\ + bl GetMonData\n\ + adds r1, r0, 0\n\ + strb r6, [r5]\n\ + movs r0, 0x13\n\ + strb r0, [r5, 0x1]\n\ + movs r4, 0x1\n\ + mov r2, r8\n\ + ands r4, r2\n\ + lsls r0, r4, 3\n\ + adds r0, r4\n\ + adds r0, 0x5\n\ + lsls r0, 3\n\ + adds r0, 0x6\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + strb r6, [r5]\n\ + strb r7, [r5, 0x1]\n\ + movs r0, 0x6\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + adds r0, r5, 0\n\ + movs r2, 0x1\n\ + movs r3, 0x3\n\ + bl ConvertIntToDecimalStringN\n\ + adds r5, r0, 0\n\ + strb r6, [r5]\n\ + strb r7, [r5, 0x1]\n\ + mov r0, r9\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + cmp r4, 0\n\ + beq _08024BB0\n\ + movs r0, 0xFE\n\ + strb r0, [r5]\n\ + movs r0, 0xFF\n\ + strb r0, [r5, 0x1]\n\ + adds r5, 0x1\n\ + b _08024BC0\n\ + .align 2, 0\n\ +_08024B94: .4byte gMain\n\ +_08024B98: .4byte gStringVar4\n\ +_08024B9C: .4byte gUnknown_08400D9F\n\ +_08024BA0: .4byte 0x00016018\n\ +_08024BA4: .4byte gUnknown_0840165C\n\ +_08024BA8: .4byte gPlayerParty\n\ +_08024BAC: .4byte gLevelUpStatBoxStats\n\ +_08024BB0:\n\ + strb r6, [r5]\n\ + movs r0, 0x11\n\ + strb r0, [r5, 0x1]\n\ + movs r0, 0x8\n\ + strb r0, [r5, 0x2]\n\ + adds r5, 0x3\n\ + movs r0, 0xFF\n\ + strb r0, [r5]\n\ +_08024BC0:\n\ + movs r1, 0x1\n\ + add r8, r1\n\ + mov r2, r8\n\ + cmp r2, 0x5\n\ + ble _08024B1C\n\ + ldr r4, _08024BF4 @ =gUnknown_03004210\n\ + ldr r1, _08024BF8 @ =gStringVar4\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + adds r0, r4, 0\n\ + movs r3, 0xC\n\ + bl InitWindow\n\ + adds r0, r4, 0\n\ + bl sub_8002F44\n\ + ldr r1, _08024BFC @ =0x02000000\n\ + ldr r0, _08024C00 @ =0x0001609c\n\ + adds r1, r0\n\ +_08024BEA:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + b _08024C38\n\ + .align 2, 0\n\ +_08024BF4: .4byte gUnknown_03004210\n\ +_08024BF8: .4byte gStringVar4\n\ +_08024BFC: .4byte 0x02000000\n\ +_08024C00: .4byte 0x0001609c\n\ +_08024C04:\n\ + ldr r0, _08024C2C @ =gMain\n\ + ldrh r0, [r0, 0x2E]\n\ + cmp r0, 0\n\ + beq _08024C38\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + movs r0, 0xB\n\ + movs r1, 0\n\ + movs r2, 0x1D\n\ + movs r3, 0x7\n\ + bl sub_802BBD4\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + b _08024C38\n\ + .align 2, 0\n\ +_08024C2C: .4byte gMain\n\ +_08024C30:\n\ + ldr r1, _08024C48 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x1\n\ + str r0, [r1]\n\ +_08024C38:\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\ +_08024C48: .4byte gBattlescriptCurrInstr\n\ + .syntax divided"); +} + +#endif + +static void atk6D_set_sentpokes_values(void) +{ + sub_80156DC(); + gBattlescriptCurrInstr++; +} + +static void atk6E_set_atk_to_player0(void) +{ + gBankAttacker = GetBankByPlayerAI(0); + gBattlescriptCurrInstr++; +} + +static void atk6F_set_visible(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + EmitSpriteInvisibility(0, 0); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; +} + +static void atk70_record_ability(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + RecordAbilityBattle(gActiveBank, gLastUsedAbility); + gBattlescriptCurrInstr += 1; //buggy, should be += 2, one byte for command, one byte for argument... +} + +void sub_8024CEC(void) +{ + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 2; + gBattleTextBuff2[2] = (word_2024E82); + gBattleTextBuff2[3] = uBYTE1_16(word_2024E82); + gBattleTextBuff2[4] = 0xFF; +} + +static void atk71_buffer_move_to_learn(void) +{ + sub_8024CEC(); + gBattlescriptCurrInstr++; +} + +static void atk72_jump_if_can_run_frombattle(void) +{ + if (sub_8014AB8(gBank1)) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; +} + +static void atk73_hp_thresholds(void) +{ + u8 opposing_bank; + s32 result; + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + opposing_bank = gActiveBank ^ 1; + + result = gBattleMons[opposing_bank].hp * 100 / gBattleMons[opposing_bank].maxHP; + if (result == 0) + result = 1; + + if (result > 69 || !gBattleMons[opposing_bank].hp) + BATTLE_STRUCT->hpScale = 0; + else if (result > 39) + BATTLE_STRUCT->hpScale = 1; + else if (result > 9) + BATTLE_STRUCT->hpScale = 2; + else + BATTLE_STRUCT->hpScale = 3; + } + + gBattlescriptCurrInstr += 2; +} + +static void atk74_hp_thresholds2(void) +{ + u8 opposing_bank; + u8 hp_switchout; + s32 result; + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + opposing_bank = gActiveBank ^ 1; + hp_switchout = ewram[2 * GetBankSide(opposing_bank) + 0x160bc]; //BATTLE_STRUCT->HP_OnSwitchout[GetBankSide(opposing_bank)]; + result = (hp_switchout - gBattleMons[opposing_bank].hp) * 100 / hp_switchout; + + if (gBattleMons[opposing_bank].hp >= hp_switchout) + BATTLE_STRUCT->hpScale = 0; + else if (result <= 29) + BATTLE_STRUCT->hpScale = 1; + else if (result <= 69) + BATTLE_STRUCT->hpScale = 2; + else + BATTLE_STRUCT->hpScale = 3; + } + + gBattlescriptCurrInstr += 2; +} + +static void atk75_8026A58(void) +{ + gBankInMenu = gBankAttacker; + sub_803E1B0(&gEnemyParty[gBattlePartyID[gBankAttacker]], gLastUsedItem, gBattlePartyID[gBankAttacker], 0, 1); + gBattlescriptCurrInstr += 1; +} + +static void atk76_various(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + switch (BSScriptRead8(gBattlescriptCurrInstr + 2)) + { + case 0: + CancelMultiTurnMoves(gActiveBank); + break; + case 1: + { + u8 side; + gBankAttacker = gBankTarget; + side = GetBankSide(gBankAttacker) ^ 1; + if (gSideTimer[side].followmeTimer && gBattleMons[gSideTimer[side].followmeTarget].hp) + gBankTarget = gSideTimer[side].followmeTarget; + else + gBankTarget = gActiveBank; + } + break; + case 2: + gBattleCommunication[0] = CanRunFromBattle(); + break; + case 3: + gBankTarget = sub_801B5C0(gCurrentMove, 0); + break; + case 4: + if (gHitMarker & HITMARKER_FAINTED(gActiveBank)) + gBattleCommunication[0] = 1; + else + gBattleCommunication[0] = 0; + break; + case 5: + gSpecialStatuses[gActiveBank].intimidatedPoke = 0; + gSpecialStatuses[gActiveBank].traced = 0; + break; + case 6: + { + int i; + u16* choiced_move; + if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID) + goto ACTIVE_0; + if (gBattlePartyID[2] != BATTLE_STRUCT->expGetterID) + break; + if (gBattlePartyID[0] == gBattlePartyID[2]) + { + ACTIVE_0: + gActiveBank = 0; + } + else + gActiveBank = 2; + + choiced_move = (u16*)(&ewram[gActiveBank * 2 + 0x160e8]); + for (i = 0; i < 4; i++) + { + if (gBattleMons[gActiveBank].moves[i] == *choiced_move) + break; + } + if (i == 4) + *choiced_move = 0; + } + break; + } + + gBattlescriptCurrInstr += 3; +} + +static void atk77_setprotect(void) //protect and endure +{ + bool8 not_last_turn = 1; + u16 last_move = gUnknown_02024C4C[gBankAttacker]; + + if (last_move != MOVE_PROTECT && last_move != MOVE_DETECT && last_move != MOVE_ENDURE) + gDisableStructs[gBankAttacker].protectUses = 0; + if (gCurrentMoveTurn == (gNoOfAllBanks - 1)) + not_last_turn = 0; + + if (sProtectSuccessRates[gDisableStructs[gBankAttacker].protectUses] > Random() && not_last_turn) + { + if (gBattleMoves[gCurrentMove].effect == EFFECT_PROTECT) + { + gProtectStructs[gBankAttacker].protected = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + if (gBattleMoves[gCurrentMove].effect == EFFECT_ENDURE) //what is else if + { + gProtectStructs[gBankAttacker].endured = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + gDisableStructs[gBankAttacker].protectUses++; + } + else + { + gDisableStructs[gBankAttacker].protectUses = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + gBattleMoveFlags |= MOVESTATUS_MISSED; + } + + gBattlescriptCurrInstr++; +} + +static void atk78_faintifabilitynotdamp(void) +{ + if (gBattleExecBuffer) + return; + + for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++) + { + if (gBattleMons[gBankTarget].ability == ABILITY_DAMP) + break; + } + + if (gBankTarget == gNoOfAllBanks) + { + gActiveBank = gBankAttacker; + gBattleMoveDamage = gBattleMons[gActiveBank].hp; + EmitHealthBarUpdate(0, 0x7FFF); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr++; + + for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++) + { + if (gBankTarget == gBankAttacker) + continue; + if (!(gAbsentBankFlags & gBitTable[gBankTarget])) + break; + } + } + else + { + gLastUsedAbility = ABILITY_DAMP; + RecordAbilityBattle(gBankTarget, gBattleMons[gBankTarget].ability); + gBattlescriptCurrInstr = gUnknown_081D9834; + } +} + +static void atk79_setatkhptozero(void) +{ + if (gBattleExecBuffer) + return; + + gActiveBank = gBankAttacker; + gBattleMons[gActiveBank].hp = 0; + EmitSetAttributes(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp); + MarkBufferBankForExecution(gActiveBank); + + gBattlescriptCurrInstr++; +} + +static void atk7A_jumpwhiletargetvalid(void) //used by intimidate to loop through all targets +{ + u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + for (gBankTarget++; ; gBankTarget++) + { + if (gBankTarget == gBankAttacker) + continue; + if (!(gAbsentBankFlags & gBitTable[gBankTarget])) + break; + } + + if (gBankTarget >= gNoOfAllBanks) + gBattlescriptCurrInstr += 5; + else + gBattlescriptCurrInstr = jump_loc; + } + else + gBattlescriptCurrInstr += 5; +} + +static void atk7B_healhalfHP_if_possible(void) +{ + u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + + if (BSScriptRead8(gBattlescriptCurrInstr + 5) == 1) + gBankTarget = gBankAttacker; + + gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 2; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + + if (gBattleMons[gBankTarget].hp == gBattleMons[gBankTarget].maxHP) + gBattlescriptCurrInstr = fail_loc; + else + gBattlescriptCurrInstr += 6; +} + +static void atk7C_8025508(void) +{ + u16 r7 = ewram[gBankAttacker * 2 + 0x160ac] | (ewram[gBankAttacker * 2 + 0x160ad] << 8); + u16 r6 = ewram[gBankAttacker * 4 + 0x16100] | (ewram[gBankAttacker * 4 + 0x16101] << 8); + u16 r5 = ewram[gBankAttacker * 4 + 0x16102] | (ewram[gBankAttacker * 4 + 0x16103] << 8); + + if (r7 !=0 && r7 != 0xFFFF) + { + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gCurrentMove = r7; + gBankTarget = sub_801B5C0(gCurrentMove, 0); + gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; + } + else if (r6 != 0 && r5 != 0 && r6 != 0xFFFF && r5 != 0xFFFF) + { + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + if (Random() & 1) + gCurrentMove = r6; + else + gCurrentMove = r5; + gBankTarget = sub_801B5C0(gCurrentMove, 0); + gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; + } + else if (r6 != 0 && r6 != 0xFFFF) + { + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gCurrentMove = r6; + gBankTarget = sub_801B5C0(gCurrentMove, 0); + gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; + } + else if (r5 != 0 && r5 != 0xFFFF) + { + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gCurrentMove = r5; + gBankTarget = sub_801B5C0(gCurrentMove, 0); + gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; + } + else + { + gSpecialStatuses[gBankAttacker].flag20 = 1; + gBattlescriptCurrInstr++; + } +} + +static void atk7D_set_rain(void) +{ + if (gBattleWeather & WEATHER_RAIN_ANY) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else + { + gBattleWeather = WEATHER_RAIN_TEMPORARY; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gWishFutureKnock.weatherDuration = 5; + } + gBattlescriptCurrInstr++; +} + +static void atk7E_setreflect(void) +{ + if (gSideAffecting[GetBankIdentity(gBankAttacker) & 1] & SIDE_STATUS_REFLECT) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else + { + gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_REFLECT; + gSideTimer[GetBankIdentity(gBankAttacker) & 1].reflectTimer = 5; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMons(1) == 2) + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + gBattlescriptCurrInstr++; +} + +static void atk7F_setseeded(void) +{ + if (gBattleMoveFlags & MOVESTATUS_NOEFFECT || gStatuses3[gBankTarget] & STATUS3_LEECHSEED) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else if (gBattleMons[gBankTarget].type1 == TYPE_GRASS || gBattleMons[gBankTarget].type2 == TYPE_GRASS) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else + { + gStatuses3[gBankTarget] |= gBankAttacker; + gStatuses3[gBankTarget] |= STATUS3_LEECHSEED; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + + gBattlescriptCurrInstr++; +} + +static void atk80_manipulatedamage(void) +{ + switch (BSScriptRead8(gBattlescriptCurrInstr + 1)) + { + case 0: + gBattleMoveDamage *= -1; + break; + case 1: + gBattleMoveDamage /= 2; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + if ((gBattleMons[gBankTarget].maxHP / 2) < gBattleMoveDamage) + gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 2; + break; + case 2: + gBattleMoveDamage *= 2; + break; + } + + gBattlescriptCurrInstr += 2; +} + +static void atk81_setrest(void) +{ + u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gActiveBank = gBankTarget = gBankAttacker; + gBattleMoveDamage = gBattleMons[gBankTarget].maxHP * (-1); + if (gBattleMons[gBankTarget].hp == gBattleMons[gBankTarget].maxHP) + gBattlescriptCurrInstr = fail_loc; + else + { + if (gBattleMons[gBankTarget].status1 & ((u8)(~STATUS_SLEEP))) + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + + gBattleMons[gBankTarget].status1 = 3; + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 5; + } +} + +static void atk82_jumpifnotfirstturn(void) +{ + u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + + if (gDisableStructs[gBankAttacker].isFirstTurn) + gBattlescriptCurrInstr += 5; + else + gBattlescriptCurrInstr = jump_loc; +} + +static void atk83_nop(void) +{ + gBattlescriptCurrInstr++; +} + +bool8 sub_8025A44(u8 bank) //uproar wakeup check +{ + int i; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || gBattleMons[bank].ability == ABILITY_SOUNDPROOF) //wtf gamefreak, you should check this only once, not every time in a loop... + continue; + BATTLE_STRUCT->scriptingActive = i; + if (gBankTarget == 0xFF) + gBankTarget = i; + else if (gBankTarget == i) + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + break; + } + if (i == gNoOfAllBanks) + return 0; + else + return 1; +} + +static void atk84_jump_if_cant_sleep(void) +{ + u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + if (sub_8025A44(gBankTarget)) + gBattlescriptCurrInstr = jump_loc; + else if (gBattleMons[gBankTarget].ability == ABILITY_INSOMNIA || gBattleMons[gBankTarget].ability == ABILITY_VITAL_SPIRIT) + { + gLastUsedAbility = gBattleMons[gBankTarget].ability; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + gBattlescriptCurrInstr = jump_loc; + RecordAbilityBattle(gBankTarget, gLastUsedAbility); + } + else + { + gBattlescriptCurrInstr += 5; + } +} + +static void atk85_stockpile(void) +{ + if (gDisableStructs[gBankAttacker].stockpileCounter == 3) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else + { + gDisableStructs[gBankAttacker].stockpileCounter++; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 1; + gBattleTextBuff1[2] = 1; + gBattleTextBuff1[3] = 1; + gBattleTextBuff1[4] = gDisableStructs[gBankAttacker].stockpileCounter; + gBattleTextBuff1[5] = 0xFF; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + gBattlescriptCurrInstr++; +} + +static void atk86_stockpiletobasedamage(void) +{ + u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + if (gDisableStructs[gBankAttacker].stockpileCounter == 0) + { + gBattlescriptCurrInstr = jump_loc; + } + else + { + if (gBattleCommunication[6] != 1) + { + gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove, + gSideAffecting[GetBankIdentity(gBankTarget) & 1], 0, + 0, gBankAttacker, gBankTarget) + * gDisableStructs[gBankAttacker].stockpileCounter; + BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter; + + if (gProtectStructs[gBankAttacker].helpingHand) + gBattleMoveDamage = gBattleMoveDamage * 15 / 10; + } + gDisableStructs[gBankAttacker].stockpileCounter = 0; + gBattlescriptCurrInstr += 5; + } +} + +static void atk87_stockpiletohpheal(void) +{ + u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + if (gDisableStructs[gBankAttacker].stockpileCounter == 0) + { + gBattlescriptCurrInstr = jump_loc; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else if (gBattleMons[gBankAttacker].maxHP == gBattleMons[gBankAttacker].hp) + { + gDisableStructs[gBankAttacker].stockpileCounter = 0; + gBattlescriptCurrInstr = jump_loc; + gBankTarget = gBankAttacker; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else + { + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / (1 << (3 - gDisableStructs[gBankAttacker].stockpileCounter)); + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter; + gDisableStructs[gBankAttacker].stockpileCounter = 0; + gBattlescriptCurrInstr += 5; + gBankTarget = gBankAttacker; + } +} + +static void atk88_negativedamage(void) +{ + gBattleMoveDamage = -(gHP_dealt / 2); + if (gBattleMoveDamage == 0) + gBattleMoveDamage = -1; + gBattlescriptCurrInstr++; +} + +#ifdef NONMATCHING +u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) +{ + u8 r9 = 0; + u8 r10 = 0; + u8 index; + if (flags & 0x40) + gActiveBank = gBankAttacker; + else + gActiveBank = gBankTarget; + flags &= ~(0x40); + if (flags & 0x80) + r9++; + flags &= ~(0x80); + if (flags & 0x20) + r10++; + flags &= ~(0x20); + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 5; + gBattleTextBuff1[2] = stat; + gBattleTextBuff1[3] = 0xFF; + + if ((statchanger << 0x18) < 0) //stat decrease + { + if (gSideTimer[GetBankIdentity(gActiveBank) & 1].mistTimer && !r9 && gCurrentMove != MOVE_CURSE) + { + if (flags == 1) + { + if (gSpecialStatuses[gActiveBank].statloweringflag) + gBattlescriptCurrInstr = bs_ptr; + else + { + b_movescr_stack_push(bs_ptr); + BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattlescriptCurrInstr = BattleScript_MistProtected; + gSpecialStatuses[gActiveBank].statloweringflag = 1; + } + } + return 1; + } + else if (gCurrentMove != MOVE_CURSE && r10 != 1 && JumpIfMoveAffectedByProtect(0)) + { + gBattlescriptCurrInstr = BattleScript_ButItFailed; + return 1; + } + else if ((gBattleMons[gActiveBank].ability == ABILITY_CLEAR_BODY || gBattleMons[gActiveBank].ability == ABILITY_WHITE_SMOKE) && !r9 && gCurrentMove != MOVE_CURSE) + { + if (flags == 1) + { + if (gSpecialStatuses[gActiveBank].statloweringflag) + gBattlescriptCurrInstr = bs_ptr; + else + { + b_movescr_stack_push(bs_ptr); + BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss; + gLastUsedAbility = gBattleMons[gActiveBank].ability; + RecordAbilityBattle(gActiveBank, gLastUsedAbility); + gSpecialStatuses[gActiveBank].statloweringflag = 1; + } + } + return 1; + } + else if (gBattleMons[gActiveBank].ability == ABILITY_KEEN_EYE && !r9 && stat == STAT_STAGE_ACC) + { + if (flags == 1) + { + b_movescr_stack_push(bs_ptr); + BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; + gLastUsedAbility = gBattleMons[gActiveBank].ability; + RecordAbilityBattle(gActiveBank, gLastUsedAbility); + } + return 1; + } + else if (gBattleMons[gActiveBank].ability == ABILITY_HYPER_CUTTER && !r9 && stat == STAT_STAGE_ATK) + { + if (flags == 1) + { + b_movescr_stack_push(bs_ptr); + BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; + gLastUsedAbility = gBattleMons[gActiveBank].ability; + RecordAbilityBattle(gActiveBank, gLastUsedAbility); + } + return 1; + } + else if (gBattleMons[gActiveBank].ability == ABILITY_SHIELD_DUST && flags == 0) + return 1; + else //decrease + { + statchanger = -((statchanger >> 4) & (7)); + gBattleTextBuff2[0] = 0xFD; + index = 1; + if (statchanger == -2) + { + gBattleTextBuff2[1] = 0; + gBattleTextBuff2[2] = 0xD3; //harshly + gBattleTextBuff2[3] = 0x0; + index = 4; + } + gBattleTextBuff2[index] = 0; + index++; + gBattleTextBuff2[index] = 0xD4; //fell + index++; + gBattleTextBuff2[index] = 0; + index++; + gBattleTextBuff2[index] = 0xFF; + + if (gBattleMons[gActiveBank].statStages[stat] == 0) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else + { + u8 stringID = 0; + if (gBankTarget == gActiveBank) + stringID = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = stringID; + } + } + } + else //stat increase + { + statchanger = (statchanger >> 4) & (7); + gBattleTextBuff2[0] = 0xFD; + index = 1; + if (statchanger == 2) + { + gBattleTextBuff2[1] = 0; + gBattleTextBuff2[2] = 0xD1; //sharply + gBattleTextBuff2[3] = 0x0; + index = 4; + } + gBattleTextBuff2[index] = 0; + index++; + gBattleTextBuff2[index] = 0xD2; //rose + index++; + gBattleTextBuff2[index] = 0; + index++; + gBattleTextBuff2[index] = 0xFF; + + if (gBattleMons[gActiveBank].statStages[stat] == 0xC) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else + { + u8 stringID = 0; + if (gBankTarget == gActiveBank) + stringID = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = stringID; + } + } + + gBattleMons[gActiveBank].statStages[stat] += statchanger; + if (gBattleMons[gActiveBank].statStages[stat] < 0) + gBattleMons[gActiveBank].statStages[stat] = 0; + if (gBattleMons[gActiveBank].statStages[stat] > 0xC) + gBattleMons[gActiveBank].statStages[stat] = 0xC; + + if (gBattleCommunication[MULTISTRING_CHOOSER] == 2) + { + if (flags & 1) + gBattleMoveFlags |= MOVESTATUS_MISSED; + if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & 1)) //what the actual fuck gamefreak... + return 1; + } + return 0; +} + +#else +__attribute__((naked)) +u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + mov r8, r3\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + lsls r1, 24\n\ + lsrs r7, r1, 24\n\ + lsls r2, 24\n\ + lsrs r5, r2, 24\n\ + movs r0, 0\n\ + mov r9, r0\n\ + mov r10, r0\n\ + movs r0, 0x40\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _08025E54\n\ + ldr r0, _08025E4C @ =gActiveBank\n\ + ldr r1, _08025E50 @ =gBankAttacker\n\ + b _08025E58\n\ + .align 2, 0\n\ +_08025E4C: .4byte gActiveBank\n\ +_08025E50: .4byte gBankAttacker\n\ +_08025E54:\n\ + ldr r0, _08025EF8 @ =gActiveBank\n\ + ldr r1, _08025EFC @ =gBankTarget\n\ +_08025E58:\n\ + ldrb r1, [r1]\n\ + strb r1, [r0]\n\ + movs r0, 0xBF\n\ + ands r5, r0\n\ + movs r0, 0x80\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _08025E72\n\ + mov r0, r9\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ +_08025E72:\n\ + movs r0, 0x7F\n\ + ands r5, r0\n\ + movs r0, 0x20\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _08025E88\n\ + mov r0, r10\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ +_08025E88:\n\ + movs r0, 0xDF\n\ + ands r5, r0\n\ + ldr r1, _08025F00 @ =gBattleTextBuff1\n\ + movs r4, 0\n\ + movs r2, 0xFD\n\ + strb r2, [r1]\n\ + movs r0, 0x5\n\ + strb r0, [r1, 0x1]\n\ + strb r7, [r1, 0x2]\n\ + movs r3, 0x1\n\ + negs r3, r3\n\ + mov r12, r3\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x3]\n\ + lsls r0, r6, 24\n\ + cmp r0, 0\n\ + blt _08025EAC\n\ + b _080261B0\n\ +_08025EAC:\n\ + ldr r4, _08025F04 @ =gSideTimer\n\ + ldr r1, _08025EF8 @ =gActiveBank\n\ + ldrb r0, [r1]\n\ + bl GetBankIdentity\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldrb r0, [r0, 0x2]\n\ + cmp r0, 0\n\ + beq _08025F54\n\ + mov r2, r9\n\ + cmp r2, 0\n\ + bne _08025F54\n\ + ldr r0, _08025F08 @ =gCurrentMove\n\ + ldrh r0, [r0]\n\ + cmp r0, 0xAE\n\ + beq _08025F84\n\ + cmp r5, 0x1\n\ + bne _08025F74\n\ + ldr r4, _08025F0C @ =gSpecialStatuses\n\ + ldr r3, _08025EF8 @ =gActiveBank\n\ + ldrb r0, [r3]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r4\n\ + ldrb r0, [r1]\n\ + lsls r0, 31\n\ + cmp r0, 0\n\ + beq _08025F14\n\ + ldr r0, _08025F10 @ =gBattlescriptCurrInstr\n\ + mov r4, r8\n\ + str r4, [r0]\n\ + b _08025F74\n\ + .align 2, 0\n\ +_08025EF8: .4byte gActiveBank\n\ +_08025EFC: .4byte gBankTarget\n\ +_08025F00: .4byte gBattleTextBuff1\n\ +_08025F04: .4byte gSideTimer\n\ +_08025F08: .4byte gCurrentMove\n\ +_08025F0C: .4byte gSpecialStatuses\n\ +_08025F10: .4byte gBattlescriptCurrInstr\n\ +_08025F14:\n\ + mov r0, r8\n\ + bl b_movescr_stack_push\n\ + ldr r0, _08025F40 @ =0x02000000\n\ + ldr r6, _08025F44 @ =gActiveBank\n\ + ldrb r1, [r6]\n\ + ldr r2, _08025F48 @ =0x00016003\n\ + adds r0, r2\n\ + strb r1, [r0]\n\ + ldr r1, _08025F4C @ =gBattlescriptCurrInstr\n\ + ldr r0, _08025F50 @ =BattleScript_MistProtected\n\ + str r0, [r1]\n\ + ldrb r1, [r6]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldrb r1, [r0]\n\ + movs r2, 0x1\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _08025F74\n\ + .align 2, 0\n\ +_08025F40: .4byte 0x02000000\n\ +_08025F44: .4byte gActiveBank\n\ +_08025F48: .4byte 0x00016003\n\ +_08025F4C: .4byte gBattlescriptCurrInstr\n\ +_08025F50: .4byte BattleScript_MistProtected\n\ +_08025F54:\n\ + ldr r0, _08025F78 @ =gCurrentMove\n\ + ldrh r0, [r0]\n\ + cmp r0, 0xAE\n\ + beq _08025F84\n\ + mov r3, r10\n\ + cmp r3, 0x1\n\ + beq _08025F84\n\ + movs r0, 0\n\ + bl JumpIfMoveAffectedByProtect\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08025F84\n\ + ldr r1, _08025F7C @ =gBattlescriptCurrInstr\n\ + ldr r0, _08025F80 @ =BattleScript_ButItFailed\n\ + str r0, [r1]\n\ +_08025F74:\n\ + movs r0, 0x1\n\ + b _080262A4\n\ + .align 2, 0\n\ +_08025F78: .4byte gCurrentMove\n\ +_08025F7C: .4byte gBattlescriptCurrInstr\n\ +_08025F80: .4byte BattleScript_ButItFailed\n\ +_08025F84:\n\ + ldr r2, _08025FCC @ =gBattleMons\n\ + ldr r1, _08025FD0 @ =gActiveBank\n\ + ldrb r3, [r1]\n\ + movs r4, 0x58\n\ + adds r0, r3, 0\n\ + muls r0, r4\n\ + adds r0, r2\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + mov r10, r2\n\ + cmp r0, 0x1D\n\ + beq _08025FA0\n\ + cmp r0, 0x49\n\ + bne _08026040\n\ +_08025FA0:\n\ + mov r0, r9\n\ + cmp r0, 0\n\ + bne _08026040\n\ + ldr r0, _08025FD4 @ =gCurrentMove\n\ + ldrh r0, [r0]\n\ + cmp r0, 0xAE\n\ + beq _08026040\n\ + cmp r5, 0x1\n\ + bne _08025F74\n\ + ldr r4, _08025FD8 @ =gSpecialStatuses\n\ + lsls r0, r3, 2\n\ + adds r0, r3\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldrb r0, [r0]\n\ + lsls r0, 31\n\ + cmp r0, 0\n\ + beq _08025FE0\n\ + ldr r0, _08025FDC @ =gBattlescriptCurrInstr\n\ + mov r1, r8\n\ + str r1, [r0]\n\ + b _08025F74\n\ + .align 2, 0\n\ +_08025FCC: .4byte gBattleMons\n\ +_08025FD0: .4byte gActiveBank\n\ +_08025FD4: .4byte gCurrentMove\n\ +_08025FD8: .4byte gSpecialStatuses\n\ +_08025FDC: .4byte gBattlescriptCurrInstr\n\ +_08025FE0:\n\ + mov r0, r8\n\ + bl b_movescr_stack_push\n\ + ldr r0, _08026028 @ =0x02000000\n\ + ldr r2, _0802602C @ =gActiveBank\n\ + ldrb r1, [r2]\n\ + ldr r3, _08026030 @ =0x00016003\n\ + adds r0, r3\n\ + strb r1, [r0]\n\ + ldr r1, _08026034 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08026038 @ =BattleScript_AbilityNoStatLoss\n\ + str r0, [r1]\n\ + ldr r1, _0802603C @ =gLastUsedAbility\n\ + ldrb r0, [r2]\n\ + movs r6, 0x58\n\ + muls r0, r6\n\ + add r0, r10\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldrb r0, [r2]\n\ + ldrb r1, [r1]\n\ + bl RecordAbilityBattle\n\ + ldr r0, _0802602C @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldrb r1, [r0]\n\ + movs r2, 0x1\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + b _08025F74\n\ + .align 2, 0\n\ +_08026028: .4byte 0x02000000\n\ +_0802602C: .4byte gActiveBank\n\ +_08026030: .4byte 0x00016003\n\ +_08026034: .4byte gBattlescriptCurrInstr\n\ +_08026038: .4byte BattleScript_AbilityNoStatLoss\n\ +_0802603C: .4byte gLastUsedAbility\n\ +_08026040:\n\ + ldr r1, _08026090 @ =gActiveBank\n\ + ldrb r0, [r1]\n\ + movs r4, 0x58\n\ + muls r0, r4\n\ + add r0, r10\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x33\n\ + bne _080260A8\n\ + mov r2, r9\n\ + cmp r2, 0\n\ + bne _080260A8\n\ + cmp r7, 0x6\n\ + bne _080260A8\n\ + cmp r5, 0x1\n\ + bne _08025F74\n\ + mov r0, r8\n\ + bl b_movescr_stack_push\n\ + ldr r0, _08026094 @ =0x02000000\n\ + ldr r3, _08026090 @ =gActiveBank\n\ + ldrb r1, [r3]\n\ + ldr r6, _08026098 @ =0x00016003\n\ + adds r0, r6\n\ + strb r1, [r0]\n\ + ldr r1, _0802609C @ =gBattlescriptCurrInstr\n\ + ldr r0, _080260A0 @ =BattleScript_AbilityNoSpecificStatLoss\n\ + str r0, [r1]\n\ + ldr r1, _080260A4 @ =gLastUsedAbility\n\ + ldrb r0, [r3]\n\ + muls r0, r4\n\ + add r0, r10\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldrb r0, [r3]\n\ + ldrb r1, [r1]\n\ + bl RecordAbilityBattle\n\ + b _08025F74\n\ + .align 2, 0\n\ +_08026090: .4byte gActiveBank\n\ +_08026094: .4byte 0x02000000\n\ +_08026098: .4byte 0x00016003\n\ +_0802609C: .4byte gBattlescriptCurrInstr\n\ +_080260A0: .4byte BattleScript_AbilityNoSpecificStatLoss\n\ +_080260A4: .4byte gLastUsedAbility\n\ +_080260A8:\n\ + ldr r1, _080260FC @ =gActiveBank\n\ + ldrb r0, [r1]\n\ + movs r4, 0x58\n\ + muls r0, r4\n\ + add r0, r10\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x34\n\ + bne _08026114\n\ + mov r2, r9\n\ + cmp r2, 0\n\ + bne _08026114\n\ + cmp r7, 0x1\n\ + bne _08026114\n\ + cmp r5, 0x1\n\ + beq _080260CA\n\ + b _08025F74\n\ +_080260CA:\n\ + mov r0, r8\n\ + bl b_movescr_stack_push\n\ + ldr r0, _08026100 @ =0x02000000\n\ + ldr r3, _080260FC @ =gActiveBank\n\ + ldrb r1, [r3]\n\ + ldr r6, _08026104 @ =0x00016003\n\ + adds r0, r6\n\ + strb r1, [r0]\n\ + ldr r1, _08026108 @ =gBattlescriptCurrInstr\n\ + ldr r0, _0802610C @ =BattleScript_AbilityNoSpecificStatLoss\n\ + str r0, [r1]\n\ + ldr r1, _08026110 @ =gLastUsedAbility\n\ + ldrb r0, [r3]\n\ + muls r0, r4\n\ + add r0, r10\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldrb r0, [r3]\n\ + ldrb r1, [r1]\n\ + bl RecordAbilityBattle\n\ + b _08025F74\n\ + .align 2, 0\n\ +_080260FC: .4byte gActiveBank\n\ +_08026100: .4byte 0x02000000\n\ +_08026104: .4byte 0x00016003\n\ +_08026108: .4byte gBattlescriptCurrInstr\n\ +_0802610C: .4byte BattleScript_AbilityNoSpecificStatLoss\n\ +_08026110: .4byte gLastUsedAbility\n\ +_08026114:\n\ + ldr r0, _080261A0 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + add r0, r10\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x13\n\ + bne _0802612C\n\ + cmp r5, 0\n\ + bne _0802612C\n\ + b _08025F74\n\ +_0802612C:\n\ + lsls r0, r6, 24\n\ + asrs r0, 28\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ + negs r0, r0\n\ + lsls r0, 24\n\ + ldr r3, _080261A4 @ =gBattleTextBuff2\n\ + movs r4, 0\n\ + movs r1, 0xFD\n\ + strb r1, [r3]\n\ + movs r2, 0x1\n\ + lsrs r6, r0, 24\n\ + asrs r0, 24\n\ + subs r1, 0xFF\n\ + cmp r0, r1\n\ + bne _08026156\n\ + strb r4, [r3, 0x1]\n\ + movs r0, 0xD3\n\ + strb r0, [r3, 0x2]\n\ + strb r4, [r3, 0x3]\n\ + movs r2, 0x4\n\ +_08026156:\n\ + adds r0, r2, r3\n\ + strb r4, [r0]\n\ + adds r2, 0x1\n\ + adds r1, r2, r3\n\ + movs r0, 0xD4\n\ + strb r0, [r1]\n\ + adds r2, 0x1\n\ + adds r0, r2, r3\n\ + strb r4, [r0]\n\ + adds r2, 0x1\n\ + adds r1, r2, r3\n\ + movs r0, 0xFF\n\ + strb r0, [r1]\n\ + ldr r1, _080261A0 @ =gActiveBank\n\ + ldrb r2, [r1]\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r0, r7, r0\n\ + mov r1, r10\n\ + adds r1, 0x18\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0\n\ + beq _08026206\n\ + movs r1, 0\n\ + ldr r0, _080261A8 @ =gBankTarget\n\ + ldrb r0, [r0]\n\ + ldr r3, _080261AC @ =gBattleCommunication\n\ + mov r8, r3\n\ + cmp r0, r2\n\ + bne _0802619A\n\ + movs r1, 0x1\n\ +_0802619A:\n\ + mov r4, r8\n\ + strb r1, [r4, 0x5]\n\ + b _08026234\n\ + .align 2, 0\n\ +_080261A0: .4byte gActiveBank\n\ +_080261A4: .4byte gBattleTextBuff2\n\ +_080261A8: .4byte gBankTarget\n\ +_080261AC: .4byte gBattleCommunication\n\ +_080261B0:\n\ + asrs r6, r0, 28\n\ + movs r0, 0x7\n\ + ands r6, r0\n\ + ldr r3, _08026210 @ =gBattleTextBuff2\n\ + strb r2, [r3]\n\ + movs r2, 0x1\n\ + cmp r6, 0x2\n\ + bne _080261CA\n\ + strb r4, [r3, 0x1]\n\ + movs r0, 0xD1\n\ + strb r0, [r3, 0x2]\n\ + strb r4, [r3, 0x3]\n\ + movs r2, 0x4\n\ +_080261CA:\n\ + adds r0, r2, r3\n\ + strb r4, [r0]\n\ + adds r2, 0x1\n\ + adds r1, r2, r3\n\ + movs r0, 0xD2\n\ + strb r0, [r1]\n\ + adds r2, 0x1\n\ + adds r0, r2, r3\n\ + strb r4, [r0]\n\ + adds r2, 0x1\n\ + adds r1, r2, r3\n\ + ldrb r0, [r1]\n\ + mov r2, r12\n\ + orrs r0, r2\n\ + strb r0, [r1]\n\ + ldr r2, _08026214 @ =gBattleMons\n\ + ldr r4, _08026218 @ =gActiveBank\n\ + ldrb r3, [r4]\n\ + movs r0, 0x58\n\ + muls r0, r3\n\ + adds r0, r7, r0\n\ + adds r1, r2, 0\n\ + adds r1, 0x18\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + mov r10, r2\n\ + cmp r0, 0xC\n\ + bne _08026220\n\ +_08026206:\n\ + ldr r1, _0802621C @ =gBattleCommunication\n\ + movs r0, 0x2\n\ + strb r0, [r1, 0x5]\n\ + mov r8, r1\n\ + b _08026234\n\ + .align 2, 0\n\ +_08026210: .4byte gBattleTextBuff2\n\ +_08026214: .4byte gBattleMons\n\ +_08026218: .4byte gActiveBank\n\ +_0802621C: .4byte gBattleCommunication\n\ +_08026220:\n\ + movs r1, 0\n\ + ldr r0, _080262B4 @ =gBankTarget\n\ + ldrb r0, [r0]\n\ + ldr r2, _080262B8 @ =gBattleCommunication\n\ + mov r8, r2\n\ + cmp r0, r3\n\ + bne _08026230\n\ + movs r1, 0x1\n\ +_08026230:\n\ + mov r3, r8\n\ + strb r1, [r3, 0x5]\n\ +_08026234:\n\ + ldr r2, _080262BC @ =gActiveBank\n\ + ldrb r0, [r2]\n\ + movs r4, 0x58\n\ + adds r1, r0, 0\n\ + muls r1, r4\n\ + adds r1, r7, r1\n\ + mov r3, r10\n\ + adds r3, 0x18\n\ + adds r1, r3\n\ + lsls r0, r6, 24\n\ + asrs r0, 24\n\ + ldrb r6, [r1]\n\ + adds r0, r6\n\ + strb r0, [r1]\n\ + ldrb r0, [r2]\n\ + muls r0, r4\n\ + adds r0, r7, r0\n\ + adds r1, r0, r3\n\ + movs r0, 0\n\ + ldrsb r0, [r1, r0]\n\ + cmp r0, 0\n\ + bge _08026264\n\ + movs r0, 0\n\ + strb r0, [r1]\n\ +_08026264:\n\ + ldr r1, _080262BC @ =gActiveBank\n\ + ldrb r0, [r1]\n\ + muls r0, r4\n\ + adds r0, r7, r0\n\ + adds r1, r0, r3\n\ + movs r0, 0\n\ + ldrsb r0, [r1, r0]\n\ + cmp r0, 0xC\n\ + ble _0802627A\n\ + movs r0, 0xC\n\ + strb r0, [r1]\n\ +_0802627A:\n\ + mov r2, r8\n\ + ldrb r0, [r2, 0x5]\n\ + cmp r0, 0x2\n\ + bne _080262A2\n\ + movs r3, 0x1\n\ + ands r3, r5\n\ + cmp r3, 0\n\ + beq _08026294\n\ + ldr r0, _080262C0 @ =gBattleMoveFlags\n\ + ldrb r1, [r0]\n\ + movs r2, 0x1\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_08026294:\n\ + mov r4, r8\n\ + ldrb r0, [r4, 0x5]\n\ + cmp r0, 0x2\n\ + bne _080262A2\n\ + cmp r3, 0\n\ + bne _080262A2\n\ + b _08025F74\n\ +_080262A2:\n\ + movs r0, 0\n\ +_080262A4:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_080262B4: .4byte gBankTarget\n\ +_080262B8: .4byte gBattleCommunication\n\ +_080262BC: .4byte gActiveBank\n\ +_080262C0: .4byte gBattleMoveFlags\n\ + .syntax divided"); +} +#endif // NONMATCHING + +static void atk89_statbuffchange(void) +{ + u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + if (ChangeStatBuffs(BATTLE_STRUCT->statChanger & 0xF0, BATTLE_STRUCT->statChanger & 0xF, BSScriptRead8(gBattlescriptCurrInstr + 1), jump_loc) == 0) + gBattlescriptCurrInstr += 6; +} + +static void atk8A_normalisebuffs(void) //haze +{ + int i, j; + for (i = 0; i < gNoOfAllBanks; i++) + { + for (j = 0; j < 8; j++) + { + gBattleMons[i].statStages[j] = 6; + } + } + gBattlescriptCurrInstr++; +} + +static void atk8B_setbide(void) +{ + gBattleMons[gBankAttacker].status2 |= STATUS2_MULTIPLETURNS; + gLockedMove[gBankAttacker] = gCurrentMove; + gTakenDmg[gBankAttacker] = 0; + gBattleMons[gBankAttacker].status2 |= (STATUS2_BIDE - 0x100); //2 turns + gBattlescriptCurrInstr++; +} + +static void atk8C_confuseifrepeatingattackends(void) +{ + if (!(gBattleMons[gBankAttacker].status2 & STATUS2_LOCK_CONFUSE)) + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x75; + gBattlescriptCurrInstr++; +} + +static void atk8D_setmultihit_counter(void) +{ + if (BSScriptRead8(gBattlescriptCurrInstr + 1)) + gMultiHitCounter = BSScriptRead8(gBattlescriptCurrInstr + 1); + else + { + gMultiHitCounter = Random() & 3; + if (gMultiHitCounter > 1) + gMultiHitCounter = (Random() & 3) + 2; + else + gMultiHitCounter += 2; + } + gBattlescriptCurrInstr += 2; +} + +static void atk8E_prepare_multihit(void) +{ + ewram[0x160e0] = 0xFD; + ewram[0x160e1] = 1; + ewram[0x160e2] = 1; + ewram[0x160e3] = 1; + ewram[0x160e4] = 0; + ewram[0x160e5] = 0xFF; + gBattlescriptCurrInstr++; +} + +static bool8 sub_80264C0(void) +{ + if (gBattleMons[gBankAttacker].level >= gBattleMons[gBankTarget].level) + { + ewram[gBankTarget + 0x16064] = gBattlePartyID[gBankTarget]; + } + else + { + u16 random = Random() & 0xFF; + if ((u32)((random * (gBattleMons[gBankAttacker].level + gBattleMons[gBankTarget].level) >> 8) + 1) <= (gBattleMons[gBankTarget].level / 4)) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + return 0; + } + ewram[gBankTarget + 0x16064] = gBattlePartyID[gBankTarget]; + } + gBattlescriptCurrInstr = gUnknown_081D90FC; + return 1; +} + +static void atk8F_forcerandomswitch(void) +{ + if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)) + { + u8 i; + struct Pokemon* party; + u8 valid; + u8 val; + if (!GetBankSide(gBankTarget)) + party = gPlayerParty; + else + party = gEnemyParty; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + valid = 0; + val = 0; + if (sub_803FBFC(sub_803FC34(gBankTarget)) == 1) + val = 3; + for (i = val; i < val + 3; i++) + { + if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE + && !GetMonData(&party[i], MON_DATA_IS_EGG) + && GetMonData(&party[i], MON_DATA_HP) != 0) + valid++; + } + } + else + { + valid = 0; + for (i = 0; i < 6; i++) + { + if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE + && !GetMonData(&party[i], MON_DATA_IS_EGG) + && GetMonData(&party[i], MON_DATA_HP) != 0) + valid++; + } + } + + if ((valid < 2 && (gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI)) != BATTLE_TYPE_DOUBLE) + || (valid < 3 && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else if (sub_80264C0()) + { +#define MON_CAN_BATTLE(mon) (((GetMonData(mon, MON_DATA_SPECIES) && GetMonData(mon, MON_DATA_IS_EGG) != 1 && GetMonData(mon, MON_DATA_HP)))) + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + do + { + val = Random() % 3; + if (sub_803FBFC(sub_803FC34(gBankTarget)) == 1) + i = val + 3; + else + i = val; + } while (i == gBattlePartyID[gBankTarget] || i == gBattlePartyID[gBankTarget ^ 2] || !MON_CAN_BATTLE(&party[i])); + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + do + { + i = Random() % 6; + } while (i == gBattlePartyID[gBankTarget] || i == gBattlePartyID[gBankTarget ^ 2] || !MON_CAN_BATTLE(&party[i])); + } + else + { + do + { + i = Random() % 6; + } while (i == gBattlePartyID[gBankTarget] || !MON_CAN_BATTLE(&party[i])); + } + } + ewram[gBankTarget + 0x16068] = i; + if (!IsLinkDoubleBattle()) + sub_8012258(gBankTarget); + sub_8094B6C(gBankTarget, i, 0); + sub_8094B6C(gBankTarget ^ 2, i, 1); +#undef MON_CAN_BATTLE + } + } + else + { + sub_80264C0(); + } +} + +static void atk90_conversion_type_change(void) +{ + //randomly changes user's type to one of its moves' type + u8 valid_moves = 0; + u8 checked_move; + u8 move_type; + while (valid_moves < 4) + { + if (gBattleMons[gBankAttacker].moves[valid_moves] == 0) + break; + valid_moves++; + } + + for (checked_move = 0; checked_move < valid_moves; checked_move++) + { + move_type = gBattleMoves[gBattleMons[gBankAttacker].moves[checked_move]].type; + if (move_type == TYPE_MYSTERY) + { + if (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST) + move_type = TYPE_GHOST; + else + move_type = TYPE_NORMAL; + } + if (move_type != gBattleMons[gBankAttacker].type1 && move_type != gBattleMons[gBankAttacker].type2) + break; + } + + if (checked_move == valid_moves) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + do + { + + while ((checked_move = Random() & 3) >= valid_moves); + + move_type = gBattleMoves[gBattleMons[gBankAttacker].moves[checked_move]].type; + if (move_type == TYPE_MYSTERY) + { + if (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST) + move_type = TYPE_GHOST; + else + move_type = TYPE_NORMAL; + } + } while (move_type == gBattleMons[gBankAttacker].type1 || move_type == gBattleMons[gBankAttacker].type2); + + gBattleMons[gBankAttacker].type1 = move_type; + gBattleMons[gBankAttacker].type2 = move_type; + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 3; + gBattleTextBuff1[2] = move_type; + gBattleTextBuff1[3] = 0xFF; + + gBattlescriptCurrInstr += 5; + } +} + +static void atk91_givepaydaymoney(void) +{ + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && gPaydayMoney) + { + sub_80B79B8(&gSaveBlock1.money, gPaydayMoney * BATTLE_STRUCT->moneyMultiplier); + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 1; + gBattleTextBuff1[2] = 2; + gBattleTextBuff1[3] = 5; + gBattleTextBuff1[4] = gPaydayMoney; + gBattleTextBuff1[5] = uBYTE1_16(gPaydayMoney); + gBattleTextBuff1[6] = 0xFF; + b_movescr_stack_push(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = gUnknown_081D95DB; + } + else + gBattlescriptCurrInstr++; +} + +static void atk92_setlightscreen(void) +{ + if (gSideAffecting[GetBankIdentity(gBankAttacker) & 1] & SIDE_STATUS_LIGHTSCREEN) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else + { + gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_LIGHTSCREEN; + gSideTimer[GetBankIdentity(gBankAttacker) & 1].lightscreenTimer = 5; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMons(1) == 2) + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + } + gBattlescriptCurrInstr++; +} + +#ifdef NOTMATCHING +static void atk93_ko_move(void) +{ + if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) + hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; + else + { + hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); + quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); + } + + gStringBank = gBankTarget; + + if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality) + { + RecordItemBattle(gBankTarget, hold_effect); + gSpecialStatuses[gBankTarget].focusBanded = 1; + } + + if (gBattleMons[gBankTarget].ability == ABILITY_STURDY) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + gLastUsedAbility = ABILITY_STURDY; + gBattlescriptCurrInstr = x; + RecordAbilityBattle(gBankTarget, ABILITY_STURDY); + return; + } + + if (!(gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS)) + { + u16 to_cmp = gBattleMons[gBankAttacker].level - gBattleMons[gBankTarget].level + gBattleMoves[gCurrentMove].accuracy; + if (Random() % 0x64 + 1 < to_cmp || gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level) + { + goto MOVESTATUS_MISSED_LABEL; + } + } + else + { + if (gDisableStructs[gBankTarget].bankWithSureHit != gBankAttacker || gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level) + { + + } + } + +MOVESTATUS_MISSED_LABEL: + gBattleTypeFlags |= MOVESTATUS_MISSED; + if (gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level) + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +#else +__attribute((naked)) +static void atk93_ko_move(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\ + ldr r7, _08026BA8 @ =gBattleMons\n\ + ldr r6, _08026BAC @ =gBankTarget\n\ + ldrb r2, [r6]\n\ + movs r5, 0x58\n\ + adds r0, r2, 0\n\ + muls r0, r5\n\ + adds r1, r0, r7\n\ + ldrh r0, [r1, 0x2E]\n\ + cmp r0, 0xAF\n\ + bne _08026BB4\n\ + ldr r1, _08026BB0 @ =gEnigmaBerries\n\ + lsls r0, r2, 3\n\ + subs r0, r2\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r4, [r0, 0x7]\n\ + ldrb r6, [r0, 0x1A]\n\ + b _08026BCE\n\ + .align 2, 0\n\ +_08026BA8: .4byte gBattleMons\n\ +_08026BAC: .4byte gBankTarget\n\ +_08026BB0: .4byte gEnigmaBerries\n\ +_08026BB4:\n\ + ldrh r0, [r1, 0x2E]\n\ + bl ItemId_GetHoldEffect\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + ldrb r0, [r6]\n\ + muls r0, r5\n\ + adds r0, r7\n\ + ldrh r0, [r0, 0x2E]\n\ + bl ItemId_GetHoldEffectParam\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ +_08026BCE:\n\ + ldr r1, _08026C4C @ =gStringBank\n\ + ldr r5, _08026C50 @ =gBankTarget\n\ + ldrb r0, [r5]\n\ + strb r0, [r1]\n\ + cmp r4, 0x27\n\ + bne _08026C0C\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x64\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, r6\n\ + bcs _08026C0C\n\ + ldrb r0, [r5]\n\ + movs r1, 0x27\n\ + bl RecordItemBattle\n\ + ldr r2, _08026C54 @ =gSpecialStatuses\n\ + ldrb r1, [r5]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrb r1, [r0]\n\ + movs r2, 0x80\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_08026C0C:\n\ + ldr r0, _08026C58 @ =gBattleMons\n\ + mov r8, r0\n\ + ldr r1, _08026C50 @ =gBankTarget\n\ + ldrb r2, [r1]\n\ + movs r6, 0x58\n\ + adds r0, r2, 0\n\ + muls r0, r6\n\ + mov r3, r8\n\ + adds r5, r0, r3\n\ + adds r0, r5, 0\n\ + adds r0, 0x20\n\ + ldrb r3, [r0]\n\ + mov r10, r8\n\ + cmp r3, 0x5\n\ + bne _08026C6C\n\ + ldr r2, _08026C5C @ =gBattleMoveFlags\n\ + ldrb r0, [r2]\n\ + movs r1, 0x1\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r0, _08026C60 @ =gLastUsedAbility\n\ + strb r3, [r0]\n\ + ldr r1, _08026C64 @ =gBattlescriptCurrInstr\n\ + ldr r0, _08026C68 @ =gUnknown_081D9826\n\ + str r0, [r1]\n\ + ldr r1, _08026C50 @ =gBankTarget\n\ + ldrb r0, [r1]\n\ + movs r1, 0x5\n\ + bl RecordAbilityBattle\n\ + b _08026E40\n\ + .align 2, 0\n\ +_08026C4C: .4byte gStringBank\n\ +_08026C50: .4byte gBankTarget\n\ +_08026C54: .4byte gSpecialStatuses\n\ +_08026C58: .4byte gBattleMons\n\ +_08026C5C: .4byte gBattleMoveFlags\n\ +_08026C60: .4byte gLastUsedAbility\n\ +_08026C64: .4byte gBattlescriptCurrInstr\n\ +_08026C68: .4byte gUnknown_081D9826\n\ +_08026C6C:\n\ + ldr r1, _08026CE0 @ =gStatuses3\n\ + lsls r0, r2, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x18\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08026CF4\n\ + ldr r1, _08026CE4 @ =gBattleMoves\n\ + ldr r0, _08026CE8 @ =gCurrentMove\n\ + ldrh r0, [r0]\n\ + lsls r2, r0, 1\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r1\n\ + ldr r7, _08026CEC @ =gBankAttacker\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + add r0, r10\n\ + adds r0, 0x2A\n\ + ldrb r0, [r0]\n\ + adds r1, r5, 0\n\ + adds r1, 0x2A\n\ + ldrb r1, [r1]\n\ + subs r0, r1\n\ + ldrb r2, [r2, 0x3]\n\ + adds r0, r2\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x64\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + adds r0, 0x1\n\ + cmp r0, r4\n\ + bge _08026CDC\n\ + ldrb r0, [r7]\n\ + adds r1, r0, 0\n\ + muls r1, r6\n\ + add r1, r10\n\ + adds r1, 0x2A\n\ + ldr r2, _08026CF0 @ =gBankTarget\n\ + ldrb r0, [r2]\n\ + muls r0, r6\n\ + add r0, r10\n\ + adds r0, 0x2A\n\ + ldrb r1, [r1]\n\ + movs r4, 0x1\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + bcs _08026D20\n\ +_08026CDC:\n\ + mov r10, r8\n\ + b _08026DE0\n\ + .align 2, 0\n\ +_08026CE0: .4byte gStatuses3\n\ +_08026CE4: .4byte gBattleMoves\n\ +_08026CE8: .4byte gCurrentMove\n\ +_08026CEC: .4byte gBankAttacker\n\ +_08026CF0: .4byte gBankTarget\n\ +_08026CF4:\n\ + ldr r0, _08026D4C @ =gDisableStructs\n\ + lsls r1, r2, 3\n\ + subs r1, r2\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldr r2, _08026D50 @ =gBankAttacker\n\ + ldrb r0, [r1, 0x15]\n\ + movs r4, 0\n\ + ldrb r3, [r2]\n\ + cmp r0, r3\n\ + bne _08026D20\n\ + ldrb r0, [r2]\n\ + muls r0, r6\n\ + add r0, r10\n\ + adds r0, 0x2A\n\ + adds r1, r5, 0\n\ + adds r1, 0x2A\n\ + ldrb r0, [r0]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc _08026D20\n\ + movs r4, 0x1\n\ +_08026D20:\n\ + cmp r4, 0\n\ + beq _08026DE0\n\ + ldr r0, _08026D54 @ =gProtectStructs\n\ + ldr r1, _08026D58 @ =gBankTarget\n\ + ldrb r2, [r1]\n\ + lsls r1, r2, 4\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + lsls r0, 30\n\ + cmp r0, 0\n\ + bge _08026D64\n\ + ldr r1, _08026D5C @ =gBattleMoveDamage\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + add r0, r10\n\ + ldrh r0, [r0, 0x28]\n\ + subs r0, 0x1\n\ + str r0, [r1]\n\ + ldr r2, _08026D60 @ =gBattleMoveFlags\n\ + ldrb r0, [r2]\n\ + movs r1, 0x40\n\ + b _08026DC6\n\ + .align 2, 0\n\ +_08026D4C: .4byte gDisableStructs\n\ +_08026D50: .4byte gBankAttacker\n\ +_08026D54: .4byte gProtectStructs\n\ +_08026D58: .4byte gBankTarget\n\ +_08026D5C: .4byte gBattleMoveDamage\n\ +_08026D60: .4byte gBattleMoveFlags\n\ +_08026D64:\n\ + ldr r0, _08026DA0 @ =gSpecialStatuses\n\ + lsls r1, r2, 2\n\ + adds r1, r2\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + lsrs r0, 7\n\ + cmp r0, 0\n\ + beq _08026DB4\n\ + ldr r1, _08026DA4 @ =gBattleMoveDamage\n\ + movs r3, 0x58\n\ + adds r0, r2, 0\n\ + muls r0, r3\n\ + add r0, r10\n\ + ldrh r0, [r0, 0x28]\n\ + subs r0, 0x1\n\ + str r0, [r1]\n\ + ldr r2, _08026DA8 @ =gBattleMoveFlags\n\ + ldrb r0, [r2]\n\ + movs r1, 0x80\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r1, _08026DAC @ =gLastUsedItem\n\ + ldr r2, _08026DB0 @ =gBankTarget\n\ + ldrb r0, [r2]\n\ + muls r0, r3\n\ + add r0, r10\n\ + ldrh r0, [r0, 0x2E]\n\ + strh r0, [r1]\n\ + b _08026DCA\n\ + .align 2, 0\n\ +_08026DA0: .4byte gSpecialStatuses\n\ +_08026DA4: .4byte gBattleMoveDamage\n\ +_08026DA8: .4byte gBattleMoveFlags\n\ +_08026DAC: .4byte gLastUsedItem\n\ +_08026DB0: .4byte gBankTarget\n\ +_08026DB4:\n\ + ldr r1, _08026DD4 @ =gBattleMoveDamage\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + add r0, r10\n\ + ldrh r0, [r0, 0x28]\n\ + str r0, [r1]\n\ + ldr r2, _08026DD8 @ =gBattleMoveFlags\n\ + ldrb r0, [r2]\n\ + movs r1, 0x10\n\ +_08026DC6:\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ +_08026DCA:\n\ + ldr r1, _08026DDC @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x5\n\ + str r0, [r1]\n\ + b _08026E40\n\ + .align 2, 0\n\ +_08026DD4: .4byte gBattleMoveDamage\n\ +_08026DD8: .4byte gBattleMoveFlags\n\ +_08026DDC: .4byte gBattlescriptCurrInstr\n\ +_08026DE0:\n\ + ldr r2, _08026E10 @ =gBattleMoveFlags\n\ + ldrb r0, [r2]\n\ + movs r1, 0x1\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r0, _08026E14 @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + movs r2, 0x58\n\ + adds r1, r0, 0\n\ + muls r1, r2\n\ + add r1, r10\n\ + adds r1, 0x2A\n\ + ldr r3, _08026E18 @ =gBankTarget\n\ + ldrb r0, [r3]\n\ + muls r0, r2\n\ + add r0, r10\n\ + adds r0, 0x2A\n\ + ldrb r1, [r1]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + bcc _08026E20\n\ + ldr r1, _08026E1C @ =gBattleCommunication\n\ + movs r0, 0\n\ + b _08026E24\n\ + .align 2, 0\n\ +_08026E10: .4byte gBattleMoveFlags\n\ +_08026E14: .4byte gBankAttacker\n\ +_08026E18: .4byte gBankTarget\n\ +_08026E1C: .4byte gBattleCommunication\n\ +_08026E20:\n\ + ldr r1, _08026E50 @ =gBattleCommunication\n\ + movs r0, 0x1\n\ +_08026E24:\n\ + strb r0, [r1, 0x5]\n\ + ldr r3, _08026E54 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + str r1, [r3]\n\ +_08026E40:\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\ +_08026E50: .4byte gBattleCommunication\n\ +_08026E54: .4byte gBattlescriptCurrInstr\n\ + .syntax divided"); +} +#endif // NOTMATCHING + +static void atk94_gethalfcurrentenemyhp(void) //super fang +{ + gBattleMoveDamage = gBattleMons[gBankTarget].hp / 2; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattlescriptCurrInstr++; +} + +static void atk95_setsandstorm(void) +{ + if (gBattleWeather & WEATHER_SANDSTORM_ANY) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else + { + gBattleWeather = WEATHER_SANDSTORM_TEMPORARY; + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + gWishFutureKnock.weatherDuration = 5; + } + gBattlescriptCurrInstr++; +} + +static void atk96_weatherdamage(void) +{ + if (WEATHER_HAS_EFFECT) + { + if (gBattleWeather & WEATHER_SANDSTORM_ANY) + { + if (gBattleMons[gBankAttacker].type1 != TYPE_ROCK && gBattleMons[gBankAttacker].type1 != TYPE_STEEL && gBattleMons[gBankAttacker].type1 != TYPE_GROUND + && gBattleMons[gBankAttacker].type2 != TYPE_ROCK && gBattleMons[gBankAttacker].type2 != TYPE_STEEL && gBattleMons[gBankAttacker].type2 != TYPE_GROUND + && gBattleMons[gBankAttacker].ability != ABILITY_SAND_VEIL && !(gStatuses3[gBankAttacker] & STATUS3_UNDERGROUND) && !(gStatuses3[gBankAttacker] & STATUS3_UNDERWATER)) + { + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 16; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + } + else + { + gBattleMoveDamage = 0; + } + } + if (gBattleWeather & WEATHER_HAIL) + { + if (gBattleMons[gBankAttacker].type1 != TYPE_ICE && gBattleMons[gBankAttacker].type2 != TYPE_ICE && !(gStatuses3[gBankAttacker] & STATUS3_UNDERGROUND) && !(gStatuses3[gBankAttacker] & STATUS3_UNDERWATER)) + { + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 16; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + } + else + { + gBattleMoveDamage = 0; + } + } + } + else + gBattleMoveDamage = 0; + + if (gAbsentBankFlags & gBitTable[gBankAttacker]) + gBattleMoveDamage = 0; + + gBattlescriptCurrInstr++; +} + +static void atk97_try_infatuation(void) +{ + struct Pokemon *attacker, *target; + u16 atk_species, def_species; + u32 atk_pid, def_pid; + if (!GetBankSide(gBankAttacker)) + attacker = &gPlayerParty[gBattlePartyID[gBankAttacker]]; + else + attacker = &gEnemyParty[gBattlePartyID[gBankAttacker]]; + + if (!GetBankSide(gBankTarget)) + target = &gPlayerParty[gBattlePartyID[gBankTarget]]; + else + target = &gEnemyParty[gBattlePartyID[gBankTarget]]; + + atk_species = GetMonData(attacker, MON_DATA_SPECIES); + atk_pid = GetMonData(attacker, MON_DATA_PERSONALITY); + + def_species = GetMonData(target, MON_DATA_SPECIES); + def_pid = GetMonData(target, MON_DATA_PERSONALITY); + + if (gBattleMons[gBankTarget].ability == ABILITY_OBLIVIOUS) + { + gBattlescriptCurrInstr = BattleScript_ObliviousPreventsAttraction; + gLastUsedAbility = ABILITY_OBLIVIOUS; + RecordAbilityBattle(gBankTarget, ABILITY_OBLIVIOUS); + } + else + { + if (GetGenderFromSpeciesAndPersonality(atk_species, atk_pid) == GetGenderFromSpeciesAndPersonality(def_species, def_pid) + || gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE || gBattleMons[gBankTarget].status2 & STATUS2_INFATUATION || GetGenderFromSpeciesAndPersonality(atk_species, atk_pid) == 0xFF + || GetGenderFromSpeciesAndPersonality(def_species, def_pid) == 0xFF) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + gBattleMons[gBankTarget].status2 |= (gBitTable[gBankAttacker] << 16); + gBattlescriptCurrInstr += 5; + } + } +} + +static void atk98_status_icon_update(void) +{ + if (gBattleExecBuffer) + return; + + if (BSScriptRead8(gBattlescriptCurrInstr + 1) != 4) + { + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 2; + } + else + { + gActiveBank = gBankAttacker; + if (!(gAbsentBankFlags & gBitTable[gActiveBank])) + { + EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2); + MarkBufferBankForExecution(gActiveBank); + } + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + if (!(gAbsentBankFlags & gBitTable[gActiveBank])) + { + EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2); + MarkBufferBankForExecution(gActiveBank); + } + } + gBattlescriptCurrInstr += 2; + } +} + +static void atk99_setmist(void) +{ + if (gSideTimer[GetBankIdentity(gBankAttacker) & 1].mistTimer) + { + gBattleMoveFlags |= MOVESTATUS_FAILED; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else + { + gSideTimer[GetBankIdentity(gBankAttacker) & 1].mistTimer = 5; + gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_MIST; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + gBattlescriptCurrInstr++; +} + +static void atk9A_set_focusenergy(void) +{ + if (gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY) + { + gBattleMoveFlags |= MOVESTATUS_FAILED; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else + { + gBattleMons[gBankAttacker].status2 |= STATUS2_FOCUS_ENERGY; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + gBattlescriptCurrInstr++; +} + +static void atk9B_transformdataexecution(void) +{ + gUnknown_02024BE8 = 0xFFFF; + gBattlescriptCurrInstr++; + if (gBattleMons[gBankTarget].status2 & STATUS2_TRANSFORMED || gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE) + { + gBattleMoveFlags |= MOVESTATUS_FAILED; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else + { + u32 i; s32 j; + u8 *atk_data, *def_data; + gBattleMons[gBankAttacker].status2 |= STATUS2_TRANSFORMED; + gDisableStructs[gBankAttacker].disabledMove = 0; + gDisableStructs[gBankAttacker].disableTimer1 = 0; + gDisableStructs[gBankAttacker].unk0 = gBattleMons[gBankTarget].personality; + gDisableStructs[gBankAttacker].unk18_b = 0; + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 6; + gBattleTextBuff1[2] = (gBattleMons[gBankTarget].species); + gBattleTextBuff1[3] = uBYTE1_16(gBattleMons[gBankTarget].species); + gBattleTextBuff1[4] = 0xFF; + + atk_data = (u8*)(&gBattleMons[gBankAttacker]); + def_data = (u8*)(&gBattleMons[gBankTarget]); + + for (i = 0; i < 0x24; i++) + atk_data[i] = def_data[i]; + + for (j = 0; j < 4; j++) + { + if (gBattleMoves[gBattleMons[gBankAttacker].moves[j]].pp < 5) + gBattleMons[gBankAttacker].pp[j] = gBattleMoves[gBattleMons[gBankAttacker].moves[j]].pp; + else + gBattleMons[gBankAttacker].pp[j] = 5; + } + + gActiveBank = gBankAttacker; + EmitResetActionMoveSelection(0, 2); + MarkBufferBankForExecution(gActiveBank); + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } +} + +static void atk9C_set_substitute(void) +{ + u32 hp = gBattleMons[gBankAttacker].maxHP / 4; + if (gBattleMons[gBankAttacker].maxHP / 4 == 0) + hp = 1; + if (gBattleMons[gBankAttacker].hp <= hp) + { + gBattleMoveDamage = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else + { + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMons[gBankAttacker].status2 |= STATUS2_SUBSTITUTE; + gBattleMons[gBankAttacker].status2 &= ~(STATUS2_WRAPPED); + gDisableStructs[gBankAttacker].substituteHP = gBattleMoveDamage; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE; + } + gBattlescriptCurrInstr++; +} + +static bool8 IsMoveUncopyable(u16 move) +{ + int i; + for (i = 0; sUnknown_081FACFE[i] != 0xFFFE && sUnknown_081FACFE[i] != move; i++) {} + return (sUnknown_081FACFE[i] != 0xFFFE); +} + +static void atk9D_copyattack(void) +{ + gUnknown_02024BE8 = 0xFFFF; + if (IsMoveUncopyable(gLastUsedMove[gBankTarget]) || gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED + || gLastUsedMove[gBankTarget] == 0 || gLastUsedMove[gBankTarget] == 0xFFFF) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + int i; + for (i = 0; i < 4; i++) + { + if (gBattleMons[gBankAttacker].moves[i] == gLastUsedMove[gBankTarget]) + break; + } + if (i == 4) + { + gBattleMons[gBankAttacker].moves[gCurrMovePos] = gLastUsedMove[gBankTarget]; + if (gBattleMoves[gLastUsedMove[gBankTarget]].pp < 5) + gBattleMons[gBankAttacker].pp[gCurrMovePos] = gBattleMoves[gLastUsedMove[gBankTarget]].pp; + else + gBattleMons[gBankAttacker].pp[gCurrMovePos] = 5; + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = gLastUsedMove[gBankTarget]; + gBattleTextBuff1[3] = uBYTE1_16(gLastUsedMove[gBankTarget]); + gBattleTextBuff1[4] = 0xFF; + + gDisableStructs[gBankAttacker].unk18_b |= gBitTable[gCurrMovePos]; + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +#ifdef NONMATCHING +static void atk9E_metronome(void) +{ + // sUnknown_081FACFE + int i; + do + { + while ((gCurrentMove = (Random() & 0x1FF) + 1) > 0x162); + for (i = 0; sUnknown_081FACFE[i] != gCurrentMove && sUnknown_081FACFE[i] != 0xFFFF; i++); + } while (sUnknown_081FACFE[i] != 0xFFFF); + + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; + gBankTarget = sub_801B5C0(gCurrentMove, 0); +} + +#else +__attribute__((naked)) +static void atk9E_metronome(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + ldr r7, _08027938 @ =gCurrentMove\n\ + movs r6, 0xB1\n\ + lsls r6, 1\n\ + ldr r5, _0802793C @ =sUnknown_081FACFE\n\ + ldr r0, _08027940 @ =gBattlescriptCurrInstr\n\ + mov r8, r0\n\ +_080278CA:\n\ + bl Random\n\ + ldr r2, _08027944 @ =0x000001ff\n\ + adds r1, r2, 0\n\ + ands r0, r1\n\ + adds r0, 0x1\n\ + strh r0, [r7]\n\ + cmp r0, r6\n\ + bhi _080278CA\n\ + movs r0, 0x3\n\ +_080278DE:\n\ + subs r0, 0x1\n\ + cmp r0, 0\n\ + bge _080278DE\n\ + ldr r4, _08027938 @ =gCurrentMove\n\ + ldrh r2, [r4]\n\ + ldr r3, _08027948 @ =0x0000ffff\n\ + subs r0, r5, 0x2\n\ +_080278EC:\n\ + adds r0, 0x2\n\ + ldrh r1, [r0]\n\ + cmp r1, r2\n\ + beq _080278F8\n\ + cmp r1, r3\n\ + bne _080278EC\n\ +_080278F8:\n\ + ldr r0, _08027948 @ =0x0000ffff\n\ + cmp r1, r0\n\ + bne _080278CA\n\ + ldr r2, _0802794C @ =gHitMarker\n\ + ldr r0, [r2]\n\ + ldr r1, _08027950 @ =0xfffffbff\n\ + ands r0, r1\n\ + str r0, [r2]\n\ + ldr r3, _08027954 @ =gBattleScriptsEffectsTable\n\ + ldr r2, _08027958 @ =gBattleMoves\n\ + ldrh r1, [r4]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldr r0, [r0]\n\ + mov r1, r8\n\ + str r0, [r1]\n\ + ldrh r0, [r4]\n\ + movs r1, 0\n\ + bl sub_801B5C0\n\ + ldr r1, _0802795C @ =gBankTarget\n\ + strb r0, [r1]\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08027938: .4byte gCurrentMove\n\ +_0802793C: .4byte sUnknown_081FACFE\n\ +_08027940: .4byte gBattlescriptCurrInstr\n\ +_08027944: .4byte 0x000001ff\n\ +_08027948: .4byte 0x0000ffff\n\ +_0802794C: .4byte gHitMarker\n\ +_08027950: .4byte 0xfffffbff\n\ +_08027954: .4byte gBattleScriptsEffectsTable\n\ +_08027958: .4byte gBattleMoves\n\ +_0802795C: .4byte gBankTarget\n\ + .syntax divided"); +} +#endif // NONMATCHING + +static void atk9F_dmgtolevel(void) +{ + gBattleMoveDamage = gBattleMons[gBankAttacker].level; + gBattlescriptCurrInstr++; +} + +static void atkA0_psywavedamageeffect(void) +{ + s32 rand_dmg; + while ((rand_dmg = (Random() & 0xF)) > 0xA); + rand_dmg *= 10; + gBattleMoveDamage = gBattleMons[gBankAttacker].level * (rand_dmg + 50) / 100; + gBattlescriptCurrInstr++; +} + +static void atkA1_counterdamagecalculator(void) +{ + u8 atk_side = GetBankSide(gBankAttacker); + u8 def_side = GetBankSide(gProtectStructs[gBankAttacker].physicalBank); + if (gProtectStructs[gBankAttacker].physicalDmg && atk_side != def_side && gBattleMons[gProtectStructs[gBankAttacker].physicalBank].hp) + { + gBattleMoveDamage = gProtectStructs[gBankAttacker].physicalDmg * 2; + if (gSideTimer[def_side].followmeTimer && gBattleMons[gSideTimer[def_side].followmeTarget].hp) + gBankTarget = gSideTimer[def_side].followmeTarget; + else + gBankTarget = gProtectStructs[gBankAttacker].physicalBank; + gBattlescriptCurrInstr += 5; + } + else + { + gSpecialStatuses[gBankAttacker].flag20 = 1; + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +static void atkA2_mirrorcoatdamagecalculator(void) //a copy of atkA1 with the physical -> special field changes +{ + u8 atk_side = GetBankSide(gBankAttacker); + u8 def_side = GetBankSide(gProtectStructs[gBankAttacker].specialBank); + if (gProtectStructs[gBankAttacker].specialDmg && atk_side != def_side && gBattleMons[gProtectStructs[gBankAttacker].specialBank].hp) + { + gBattleMoveDamage = gProtectStructs[gBankAttacker].specialDmg * 2; + if (gSideTimer[def_side].followmeTimer && gBattleMons[gSideTimer[def_side].followmeTarget].hp) + gBankTarget = gSideTimer[def_side].followmeTarget; + else + gBankTarget = gProtectStructs[gBankAttacker].specialBank; + gBattlescriptCurrInstr += 5; + } + else + { + gSpecialStatuses[gBankAttacker].flag20 = 1; + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +static void atkA3_disablelastusedattack(void) +{ + int i; + for (i = 0; i < 4; i++) + { + if (gBattleMons[gBankTarget].moves[i] == gLastUsedMove[gBankTarget]) + break; + } + if (gDisableStructs[gBankTarget].disabledMove == 0 && i != 4 && gBattleMons[gBankTarget].pp[i] != 0) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = gBattleMons[gBankTarget].moves[i]; + gBattleTextBuff1[3] = uBYTE1_16(gBattleMons[gBankTarget].moves[i]); + gBattleTextBuff1[4] = 0xFF; + + gDisableStructs[gBankTarget].disabledMove = gBattleMons[gBankTarget].moves[i]; + gDisableStructs[gBankTarget].disableTimer1 = (Random() & 3) + 2; + gDisableStructs[gBankTarget].disableTimer2 = gDisableStructs[gBankTarget].disableTimer1; //that's interesting + gBattlescriptCurrInstr += 5; + } + else + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +static void atkA4_setencore(void) +{ + int i; + for (i = 0; i < 4; i++) + { + if (gBattleMons[gBankTarget].moves[i] == gLastUsedMove[gBankTarget]) + break; + } + if (gLastUsedMove[gBankTarget] == MOVE_STRUGGLE || gLastUsedMove[gBankTarget] == MOVE_ENCORE || gLastUsedMove[gBankTarget] == MOVE_MIRROR_MOVE) + i = 4; + if (gDisableStructs[gBankTarget].encoredMove == 0 && i != 4 && gBattleMons[gBankTarget].pp[i] != 0) + { + gDisableStructs[gBankTarget].encoredMove = gBattleMons[gBankTarget].moves[i]; + gDisableStructs[gBankTarget].encoredMovePos = i; + gDisableStructs[gBankTarget].encoreTimer1 = (Random() & 3) + 3; + gDisableStructs[gBankTarget].encoreTimer2 = gDisableStructs[gBankTarget].encoreTimer1; + gBattlescriptCurrInstr += 5; + } + else + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +static void atkA5_painsplitdmgcalc(void) +{ + if (!(gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE)) + { + s32 hp_diff = (gBattleMons[gBankAttacker].hp + gBattleMons[gBankTarget].hp) / 2; + s32 to_store = gBattleMoveDamage = gBattleMons[gBankTarget].hp - hp_diff; + BATTLE_STRUCT->unk16014 = sBYTE0_32(to_store); + BATTLE_STRUCT->unk16015 = sBYTE1_32(to_store); + BATTLE_STRUCT->unk16016 = sBYTE2_32(to_store); + BATTLE_STRUCT->unk16017 = sBYTE3_32(to_store); + + gBattleMoveDamage = gBattleMons[gBankAttacker].hp - hp_diff; + gSpecialStatuses[gBankTarget].moveturnLostHP = 0xFFFF; + + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +#ifdef NONMATCHING +static void atkA6_settypetorandomresistance(void) +{ + if (gMoveHitWith[gBankAttacker] == 0 || gMoveHitWith[gBankAttacker] == 0xFFFF || (IsTwoTurnsMove(gMoveHitWith[gBankAttacker]) && !gProtectStructs[gBankAttacker].physicalDmg && !gProtectStructs[gBankAttacker].specialDmg)) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + int type = 0, rands = 0; + do + { + while (((type = (Random() & 0x7F)) > 0x70)); + type *= 3; + if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1]) + { + gBattleMons[gBankAttacker].type1 = type; + gBattleMons[gBankAttacker].type2 = type; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 3; + gBattleTextBuff1[2] = type; + gBattleTextBuff1[3] = 0xFF; + gBattlescriptCurrInstr += 5; + return; + } + rands++; + } while (rands <= 999); + + type = 0, rands = 0; + do + { + if (gTypeEffectiveness[type] == 0xFE || gTypeEffectiveness[type] != 0xFF) + { + if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1]) + { + gBattleMons[gBankAttacker].type1 = gTypeEffectiveness[rands + 1]; + gBattleMons[gBankAttacker].type2 = gTypeEffectiveness[rands + 1]; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 3; + gBattleTextBuff1[2] = gTypeEffectiveness[rands + 1]; + gBattleTextBuff1[3] = 0xFF; + gBattlescriptCurrInstr += 5; + return; + } + } + type += 3, rands += 3; + } while (rands < 336); + + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +#else +__attribute__((naked)) +static void atkA6_settypetorandomresistance(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\ + ldr r1, _08027FA8 @ =gMoveHitWith\n\ + ldr r4, _08027FAC @ =gBankAttacker\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r2, r0, r1\n\ + ldrh r1, [r2]\n\ + cmp r1, 0\n\ + beq _08027F8C\n\ + ldr r0, _08027FB0 @ =0x0000ffff\n\ + cmp r1, r0\n\ + beq _08027F8C\n\ + ldrh r0, [r2]\n\ + bl IsTwoTurnsMove\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08028024\n\ + ldr r2, _08027FB4 @ =gProtectStructs\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 4\n\ + adds r0, r2, 0x4\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _08028024\n\ + adds r0, r2, 0\n\ + adds r0, 0x8\n\ + adds r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _08028024\n\ +_08027F8C:\n\ + ldr r3, _08027FB8 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + str r1, [r3]\n\ + b _08028110\n\ + .align 2, 0\n\ +_08027FA8: .4byte gMoveHitWith\n\ +_08027FAC: .4byte gBankAttacker\n\ +_08027FB0: .4byte 0x0000ffff\n\ +_08027FB4: .4byte gProtectStructs\n\ +_08027FB8: .4byte gBattlescriptCurrInstr\n\ +_08027FBC:\n\ + mov r0, r12\n\ + strb r5, [r0]\n\ + mov r1, r10\n\ + ldrb r0, [r1]\n\ + muls r0, r2\n\ + adds r0, r7\n\ + adds r0, 0x22\n\ + strb r5, [r0]\n\ + ldr r1, _08027FE0 @ =gBattleTextBuff1\n\ + movs r0, 0xFD\n\ + strb r0, [r1]\n\ + movs r0, 0x3\n\ + strb r0, [r1, 0x1]\n\ + strb r5, [r1, 0x2]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x3]\n\ + ldr r1, _08027FE4 @ =gBattlescriptCurrInstr\n\ + b _08028012\n\ + .align 2, 0\n\ +_08027FE0: .4byte gBattleTextBuff1\n\ +_08027FE4: .4byte gBattlescriptCurrInstr\n\ +_08027FE8:\n\ + mov r0, r8\n\ + adds r0, 0x1\n\ + adds r0, r3\n\ + ldrb r2, [r0]\n\ + strb r2, [r4]\n\ + mov r4, r10\n\ + ldrb r0, [r4]\n\ + muls r0, r6\n\ + ldr r7, _0802801C @ =gBattleMons\n\ + adds r0, r7\n\ + adds r0, 0x22\n\ + strb r2, [r0]\n\ + ldr r1, _08028020 @ =gBattleTextBuff1\n\ + movs r0, 0xFD\n\ + strb r0, [r1]\n\ + movs r0, 0x3\n\ + strb r0, [r1, 0x1]\n\ + strb r2, [r1, 0x2]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x3]\n\ + mov r1, r12\n\ +_08028012:\n\ + ldr r0, [r1]\n\ + adds r0, 0x5\n\ + str r0, [r1]\n\ + b _08028110\n\ + .align 2, 0\n\ +_0802801C: .4byte gBattleMons\n\ +_08028020: .4byte gBattleTextBuff1\n\ +_08028024:\n\ + movs r4, 0\n\ + mov r8, r4\n\ + movs r7, 0x7F\n\ + mov r9, r7\n\ +_0802802C:\n\ + bl Random\n\ + mov r4, r9\n\ + ands r4, r0\n\ + cmp r4, 0x70\n\ + bhi _0802802C\n\ + lsls r0, r4, 1\n\ + adds r4, r0, r4\n\ + ldr r6, _08028120 @ =gTypeEffectiveness\n\ + adds r3, r4, r6\n\ + ldr r1, _08028124 @ =gUnknown_02024C44\n\ + ldr r2, _08028128 @ =gBankAttacker\n\ + ldrb r5, [r2]\n\ + lsls r0, r5, 1\n\ + adds r0, r1\n\ + ldrb r1, [r3]\n\ + mov r10, r2\n\ + ldrh r0, [r0]\n\ + cmp r1, r0\n\ + bne _08028088\n\ + adds r0, r4, 0x2\n\ + adds r0, r6\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x5\n\ + bhi _08028088\n\ + ldr r7, _0802812C @ =gBattleMons\n\ + movs r2, 0x58\n\ + adds r0, r5, 0\n\ + muls r0, r2\n\ + adds r3, r0, r7\n\ + movs r0, 0x21\n\ + adds r0, r3\n\ + mov r12, r0\n\ + adds r0, r4, 0x1\n\ + adds r0, r6\n\ + ldrb r5, [r0]\n\ + mov r1, r12\n\ + ldrb r0, [r1]\n\ + adds r1, r5, 0\n\ + cmp r0, r1\n\ + beq _08028088\n\ + adds r0, r3, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, r1\n\ + bne _08027FBC\n\ +_08028088:\n\ + movs r7, 0x1\n\ + add r8, r7\n\ + ldr r0, _08028130 @ =0x000003e7\n\ + cmp r8, r0\n\ + ble _0802802C\n\ + movs r0, 0\n\ + mov r8, r0\n\ + ldr r1, _08028134 @ =gBattlescriptCurrInstr\n\ + mov r12, r1\n\ + ldr r3, _08028120 @ =gTypeEffectiveness\n\ + adds r0, r4, 0x1\n\ + adds r0, r3\n\ + mov r9, r0\n\ + adds r5, r3, 0\n\ +_080280A4:\n\ + ldrb r1, [r5]\n\ + cmp r1, 0xFF\n\ + bgt _080280AE\n\ + cmp r1, 0xFE\n\ + bge _080280E8\n\ +_080280AE:\n\ + mov r4, r10\n\ + ldrb r2, [r4]\n\ + lsls r0, r2, 1\n\ + ldr r7, _08028124 @ =gUnknown_02024C44\n\ + adds r0, r7\n\ + ldrh r0, [r0]\n\ + cmp r1, r0\n\ + bne _080280E8\n\ + ldrb r0, [r5, 0x2]\n\ + cmp r0, 0x5\n\ + bhi _080280E8\n\ + movs r6, 0x58\n\ + adds r0, r2, 0\n\ + muls r0, r6\n\ + ldr r1, _0802812C @ =gBattleMons\n\ + adds r2, r0, r1\n\ + adds r4, r2, 0\n\ + adds r4, 0x21\n\ + ldrb r0, [r4]\n\ + mov r7, r9\n\ + ldrb r1, [r7]\n\ + cmp r0, r1\n\ + beq _080280E8\n\ + adds r0, r2, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, r1\n\ + beq _080280E8\n\ + b _08027FE8\n\ +_080280E8:\n\ + adds r5, 0x3\n\ + movs r0, 0x3\n\ + add r8, r0\n\ + ldr r0, _08028138 @ =0x0000014f\n\ + cmp r8, r0\n\ + bls _080280A4\n\ + mov r1, r12\n\ + ldr r2, [r1]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + mov r4, r12\n\ + str r1, [r4]\n\ +_08028110:\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\ +_08028120: .4byte gTypeEffectiveness\n\ +_08028124: .4byte gUnknown_02024C44\n\ +_08028128: .4byte gBankAttacker\n\ +_0802812C: .4byte gBattleMons\n\ +_08028130: .4byte 0x000003e7\n\ +_08028134: .4byte gBattlescriptCurrInstr\n\ +_08028138: .4byte 0x0000014f\n\ + .syntax divided"); +} +#endif // NONMATCHING + +static void atkA7_setalwayshitflag(void) +{ + gStatuses3[gBankTarget] &= ~(STATUS3_ALWAYS_HITS); + gStatuses3[gBankTarget] |= 0x10; + gDisableStructs[gBankTarget].bankWithSureHit = gBankAttacker; + gBattlescriptCurrInstr++; +} + +struct move_pp +{ + u16 move[4]; + u8 pp[4]; + u8 ppBonuses; +}; + +static void atkA8_copymovepermanently(void) +{ + gUnknown_02024BE8 = 0xFFFF; + if (!(gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED) && gUnknown_02024C2C[gBankTarget] != MOVE_STRUGGLE && gUnknown_02024C2C[gBankTarget] != 0 && gUnknown_02024C2C[gBankTarget] != 0xFFFF && gUnknown_02024C2C[gBankTarget] != MOVE_SKETCH) + { + int i; + for (i = 0; i < 4; i++) + { + if (gBattleMons[gBankAttacker].moves[i] == MOVE_SKETCH) + continue; + if (gBattleMons[gBankAttacker].moves[i] == gUnknown_02024C2C[gBankTarget]) + break; + } + if (i != 4) //sketch fail + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else //sketch worked + { + struct move_pp moves_data; + gBattleMons[gBankAttacker].moves[gCurrMovePos] = gUnknown_02024C2C[gBankTarget]; + gBattleMons[gBankAttacker].pp[gCurrMovePos] = gBattleMoves[gUnknown_02024C2C[gBankTarget]].pp; + gActiveBank = gBankAttacker; + for (i = 0; i < 4; i++) + { + moves_data.move[i] = gBattleMons[gBankAttacker].moves[i]; + moves_data.pp[i] = gBattleMons[gBankAttacker].pp[i]; + } + moves_data.ppBonuses = gBattleMons[gBankAttacker].ppBonuses; + EmitSetAttributes(0, REQUEST_MOVES_PP_BATTLE, 0, sizeof(struct move_pp), &moves_data); + MarkBufferBankForExecution(gActiveBank); + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = gUnknown_02024C2C[gBankTarget]; + gBattleTextBuff1[3] = gUnknown_02024C2C[gBankTarget] >> 8; + gBattleTextBuff1[4] = 0xFF; + gBattlescriptCurrInstr += 5; + } + } + else //sketch fail + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static bool8 IsTwoTurnsMove(u16 move) +{ + u8 effect = gBattleMoves[move].effect; + if (effect == EFFECT_SKULL_BASH || effect == EFFECT_RAZOR_WIND || effect == EFFECT_SKY_ATTACK || effect == EFFECT_SOLARBEAM || effect == EFFECT_FLY || effect == EFFECT_BIDE) + return 1; + else + return 0; +} + +static bool8 IsMoveUnchoosable(u16 move) +{ + if (move == 0 || move == MOVE_SLEEP_TALK || move == MOVE_ASSIST || move == MOVE_MIRROR_MOVE || move == MOVE_METRONOME) + return 1; + else + return 0; +} + +static u8 AttacksThisTurn(u8 bank, u16 move) //Note: returns 1 if it's a charging turn, otherwise 2 +{ + //first argument is unused + u8 effect; + if (gBattleMoves[move].effect == EFFECT_SOLARBEAM && (gBattleWeather & WEATHER_SUN_ANY)) + return 2; + effect = gBattleMoves[move].effect; + if (effect == EFFECT_SKULL_BASH || effect == EFFECT_RAZOR_WIND || effect == EFFECT_SKY_ATTACK || effect == EFFECT_SOLARBEAM || effect == EFFECT_FLY || effect == EFFECT_BIDE) + { + if ((gHitMarker & HITMARKER_x8000000)) + return 1; + } + return 2; +} + +static void atkA9_sleeptalk_choose_move(void) +{ + u8 unusable_moves = 0; + int i; + + for (i = 0; i < 4; i++) + { + if (IsMoveUnchoosable(gBattleMons[gBankAttacker].moves[i]) || gBattleMons[gBankAttacker].moves[i] == MOVE_FOCUS_PUNCH + || gBattleMons[gBankAttacker].moves[i] == MOVE_UPROAR || IsTwoTurnsMove(gBattleMons[gBankAttacker].moves[i])) + unusable_moves |= gBitTable[i]; + } + unusable_moves = sub_8015A98(gBankAttacker, unusable_moves, 0xFD); + if (unusable_moves == 0xF) //all 4 moves cannot be chosen + gBattlescriptCurrInstr += 5; + else //at least one move can be chosen + { + u32 random_pos; + do + { + random_pos = Random() & 3; + } while ((gBitTable[random_pos] & unusable_moves)); + + gRandomMove = gBattleMons[gBankAttacker].moves[random_pos]; + gCurrMovePos = random_pos; + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gBankTarget = sub_801B5C0(gRandomMove, 0); + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +static void atkAA_set_destinybond(void) +{ + gBattleMons[gBankAttacker].status2 |= STATUS2_DESTINY_BOND; + gBattlescriptCurrInstr++; +} + +static void DestinyBondFlagUpdate(void) +{ + u8 atk_side = GetBankSide(gBankAttacker); + u8 def_side = GetBankSide(gBankTarget); + if (gBattleMons[gBankTarget].status2 & STATUS2_DESTINY_BOND && atk_side != def_side && !(gHitMarker & HITMARKER_GRUDGE)) + gHitMarker |= HITMARKER_DESTINYBOND; +} + +static void atkAB_DestinyBondFlagUpdate(void) +{ + DestinyBondFlagUpdate(); + gBattlescriptCurrInstr++; +} + +static void atkAC_remaininghptopower(void) +{ + s32 hp_fraction = GetScaledHPFraction(gBattleMons[gBankAttacker].hp, gBattleMons[gBankAttacker].maxHP, 48); + int i; + for (i = 0; i < 12; i += 2) + { + if (hp_fraction <= sUnknown_081FAD26[i]) + break; + } + gDynamicBasePower = sUnknown_081FAD26[i + 1]; + gBattlescriptCurrInstr++; +} + +static void atkAD_spite_ppreduce(void) +{ + if (gLastUsedMove[gBankTarget] != 0 && gLastUsedMove[gBankTarget] != 0xFFFF && !(gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE)) + { + int i; + for (i = 0; i < 4; i++) + { + if (gLastUsedMove[gBankTarget] == gBattleMons[gBankTarget].moves[i]) + break; + } + if (i != 4 && gBattleMons[gBankTarget].pp[i] > 1) + { + s32 lost_pp = (Random() & 3) + 2; + if (gBattleMons[gBankTarget].pp[i] < lost_pp) + lost_pp = gBattleMons[gBankTarget].pp[i]; + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = gLastUsedMove[gBankTarget]; + gBattleTextBuff1[3] = gLastUsedMove[gBankTarget] >> 8; + gBattleTextBuff1[4] = 0xFF; + ConvertIntToDecimalStringN(gBattleTextBuff2, lost_pp, 0, 1); + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 1; + gBattleTextBuff2[2] = 1; + gBattleTextBuff2[3] = 1; + gBattleTextBuff2[4] = lost_pp; + gBattleTextBuff2[5] = 0xFF; + + gBattleMons[gBankTarget].pp[i] -= lost_pp; + gActiveBank = gBankTarget; + if (!(gDisableStructs[gActiveBank].unk18_b & gBitTable[i]) + && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) + { + EmitSetAttributes(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBank].pp[i]); + MarkBufferBankForExecution(gActiveBank); + } + gBattlescriptCurrInstr += 5; + if (gBattleMons[gBankTarget].pp[i] == 0) + CancelMultiTurnMoves(gBankTarget); + return; + } + } + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkAE_heal_party_status(void) +{ + register u32 zero2 asm("r4") = 0; + u32 zero = zero2; + u8 to_heal = 0; + if (gCurrentMove == MOVE_HEAL_BELL) + { + struct Pokemon* party; + int i; + + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + if (GetBankSide(gBankAttacker) == 0) + party = gPlayerParty; + else + party = gEnemyParty; + + if (gBattleMons[gBankAttacker].ability != ABILITY_SOUNDPROOF) + { + gBattleMons[gBankAttacker].status1 = 0; + } + else + { + RecordAbilityBattle(gBankAttacker, gBattleMons[gBankAttacker].ability); + gBattleCommunication[MULTISTRING_CHOOSER] |= 1; + } + + gActiveBank = BATTLE_STRUCT->scriptingActive = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank])) + { + if (gBattleMons[gActiveBank].ability != ABILITY_SOUNDPROOF) + { + gBattleMons[gActiveBank].status1 = 0; + } + else + { + RecordAbilityBattle(gActiveBank, gBattleMons[gActiveBank].ability); + gBattleCommunication[MULTISTRING_CHOOSER] |= 2; + } + } + + for (i = 0; i < 6; i++) + { + u16 species = GetMonData(&party[i], MON_DATA_SPECIES2); + u8 abilityBit = GetMonData(&party[i], MON_DATA_ALT_ABILITY); + if (species != 0 && species != SPECIES_EGG) + { + u8 ability; + if (gBattlePartyID[gBankAttacker] == i) + ability = gBattleMons[gBankAttacker].ability; + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[gActiveBank] == i && !(gAbsentBankFlags & gBitTable[gActiveBank])) + ability = gBattleMons[gActiveBank].ability; + else + ability = GetAbilityBySpecies(species, abilityBit); + if (ability != ABILITY_SOUNDPROOF) + to_heal |= (1 << i); + } + } + } + else //Aromatherapy + { + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + to_heal = 0x3F; + gBattleMons[gBankAttacker].status1 = zero2; + + gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank])) + gBattleMons[gActiveBank].status1 = 0; + + } + //missing check? + gActiveBank = gBankAttacker; + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, to_heal, 4, &zero); + MarkBufferBankForExecution(gActiveBank); + + gBattlescriptCurrInstr++; +} + +static void atkAF_cursetarget(void) +{ + if (gBattleMons[gBankTarget].status2 & STATUS2_CURSED || gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + gBattleMons[gBankTarget].status2 |= STATUS2_CURSED; + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 2; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattlescriptCurrInstr += 5; + } +} + +static void atkB0_set_spikes(void) +{ + u8 side = GetBankSide(gBankAttacker) ^ 1; + if (gSideTimer[side].spikesAmount == 3) + { + gSpecialStatuses[gBankAttacker].flag20 = 1; + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + gSideAffecting[side] |= SIDE_STATUS_SPIKES; + gSideTimer[side].spikesAmount++; + gBattlescriptCurrInstr += 5; + } +} + +static void atkB1_set_foresight(void) +{ + gBattleMons[gBankTarget].status2 |= STATUS2_FORESIGHT; + gBattlescriptCurrInstr++; +} + +static void atkB2_setperishsong(void) +{ + int not_affected_pokes = 0, i; + + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gStatuses3[i] & STATUS3_PERISH_SONG || gBattleMons[i].ability == ABILITY_SOUNDPROOF) + not_affected_pokes++; + else + { + gStatuses3[i] |= STATUS3_PERISH_SONG; + gDisableStructs[i].perishSong1 = 3; + gDisableStructs[i].perishSong2 = 3; + } + } + + sub_80153D0(gBankAttacker); + if (not_affected_pokes == gNoOfAllBanks) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; +} + +static void atkB3_rolloutdamagecalculation(void) +{ + if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) + { + CancelMultiTurnMoves(gBankAttacker); + gBattlescriptCurrInstr = BattleScript_1D6F74; + } + else + { + int i; + if (!(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) //first hit + { + gDisableStructs[gBankAttacker].rolloutTimer1 = 5; + gDisableStructs[gBankAttacker].rolloutTimer2 = 5; + gBattleMons[gBankAttacker].status2 |= STATUS2_MULTIPLETURNS; + gLockedMove[gBankAttacker] = gCurrentMove; + } + if (--gDisableStructs[gBankAttacker].rolloutTimer1 == 0) + gBattleMons[gBankAttacker].status2 &= ~(STATUS2_MULTIPLETURNS); + + gDynamicBasePower = gBattleMoves[gCurrentMove].power; + for (i = 1; i < (5 - gDisableStructs[gBankAttacker].rolloutTimer1); i++) + gDynamicBasePower *= 2; + + if (gBattleMons[gBankAttacker].status2 & STATUS2_DEFENSE_CURL) + gDynamicBasePower *= 2; + + gBattlescriptCurrInstr++; + } +} + +static void atkB4_jumpifconfusedandstatmaxed(void) +{ + if (gBattleMons[gBankTarget].status2 & STATUS2_CONFUSION && gBattleMons[gBankTarget].statStages[BSScriptRead8(gBattlescriptCurrInstr + 1)] == 0xC) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; +} + +static void atkB5_furycuttercalc(void) +{ + if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) + { + gDisableStructs[gBankAttacker].furyCutterCounter = 0; + gBattlescriptCurrInstr = BattleScript_1D6F74; + } + else + { + int i; + + if (gDisableStructs[gBankAttacker].furyCutterCounter != 5) + gDisableStructs[gBankAttacker].furyCutterCounter++; + + gDynamicBasePower = gBattleMoves[gCurrentMove].power; + for (i = 1; i < gDisableStructs[gBankAttacker].furyCutterCounter; i++) + gDynamicBasePower *= 2; + + gBattlescriptCurrInstr++; + } +} + +static void atkB6_happinesstodamagecalculation(void) +{ + if (gBattleMoves[gCurrentMove].effect == EFFECT_RETURN) + gDynamicBasePower = 10 * (gBattleMons[gBankAttacker].friendship) / 25; + else //EFFECT_FRUSTRATION + gDynamicBasePower = 10 * (255 - gBattleMons[gBankAttacker].friendship) / 25; + gBattlescriptCurrInstr++; +} + +static void atkB7_presentdamagecalculation(void) +{ + s32 rand = Random() & 0xFF; + if (rand < 102) + gDynamicBasePower = 40; + else if (rand < 178) + gDynamicBasePower = 80; + else if (rand < 204) + gDynamicBasePower = 120; + else + { + gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + } + if (rand < 204) + gBattlescriptCurrInstr = BattleScript_1D6F44; + else if (gBattleMons[gBankTarget].maxHP == gBattleMons[gBankTarget].hp) + gBattlescriptCurrInstr = BattleScript_1D83B5; + else + { + //gBattleMoveFlags &= ~(MOVESTATUS_NOTAFFECTED); only in Emerald + gBattlescriptCurrInstr = BattleScript_1D839B; + } +} + +static void atkB8_set_safeguard(void) +{ + if (gSideAffecting[GetBankIdentity(gBankAttacker) & 1] & SIDE_STATUS_SAFEGUARD) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else + { + gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_SAFEGUARD; + gSideTimer[GetBankIdentity(gBankAttacker) & 1].safeguardTimer = 5; + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + gBattlescriptCurrInstr++; +} + +static void atkB9_magnitudedamagecalculation(void) +{ + s32 magnitude = Random() % 100; + if (magnitude < 5) + { + gDynamicBasePower = 10; + magnitude = 4; + } + else if (magnitude < 15) + { + gDynamicBasePower = 30; + magnitude = 5; + } + else if (magnitude < 35) + { + gDynamicBasePower = 50; + magnitude = 6; + } + else if (magnitude < 65) + { + gDynamicBasePower = 70; + magnitude = 7; + } + else if (magnitude < 85) + { + gDynamicBasePower = 90; + magnitude = 8; + } + else if (magnitude < 95) + { + gDynamicBasePower = 110; + magnitude = 9; + } + else + { + gDynamicBasePower = 150; + magnitude = 10; + } + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 1; + gBattleTextBuff1[2] = 1; + gBattleTextBuff1[3] = 2; + gBattleTextBuff1[4] = magnitude; + gBattleTextBuff1[5] = 0xFF; + + for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++) + { + if (gBankTarget == gBankAttacker) + continue; + if (!(gAbsentBankFlags & gBitTable[gBankTarget])) //a valid target was found + break; + } + gBattlescriptCurrInstr++; +} + +static void atkBA_jumpifnopursuitswitchdmg(void) +{ + if (gMultiHitCounter == 1) + { + if (GetBankSide(gBankAttacker) == 0) + gBankTarget = GetBankByPlayerAI(1); + else + gBankTarget = GetBankByPlayerAI(0); + } + else + { + if (GetBankSide(gBankAttacker) == 0) + gBankTarget = GetBankByPlayerAI(3); + else + gBankTarget = GetBankByPlayerAI(2); + } + + if (gActionForBanks[gBankTarget] == 0 && gBankAttacker == ewram[gBankTarget + 0x16010] && !(gBattleMons[gBankTarget].status1 & (STATUS_SLEEP | STATUS_FREEZE)) + && gBattleMons[gBankAttacker].hp && !gDisableStructs[gBankTarget].truantCounter && gChosenMovesByBanks[gBankTarget] == MOVE_PURSUIT) + { + int i; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gTurnOrder[i] == gBankTarget) + gUnknown_02024A76[i] = 11; + } + gCurrentMove = MOVE_PURSUIT; + gBattlescriptCurrInstr += 5; + BATTLE_STRUCT->animTurn = 1; + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkBB_setsunny(void) +{ + if (gBattleWeather & WEATHER_SUN_ANY) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else + { + gBattleWeather = WEATHER_SUN_TEMPORARY; + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gWishFutureKnock.weatherDuration = 5; + } + gBattlescriptCurrInstr++; +} + +static void atkBC_maxattackhalvehp(void) //belly drum +{ + u32 half_hp = gBattleMons[gBankAttacker].maxHP / 2; + if (!(gBattleMons[gBankAttacker].maxHP / 2)) + half_hp = 1; + + if (gBattleMons[gBankAttacker].statStages[STAT_STAGE_ATK] < 12 && gBattleMons[gBankAttacker].hp > half_hp) + { + gBattleMons[gBankAttacker].statStages[STAT_STAGE_ATK] = 12; + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 2; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattlescriptCurrInstr += 5; + } + else + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +static void atkBD_copyfoestats(void) //psych up +{ + int i; + for (i = 0; i < 8; i++) + { + gBattleMons[gBankAttacker].statStages[i] = gBattleMons[gBankTarget].statStages[i]; + } + gBattlescriptCurrInstr += 5; //why not 1? possible unused fail possibility? +} + +static void atkBE_breakfree(void) //rapid spin +{ + if (gBattleMons[gBankAttacker].status2 & STATUS2_WRAPPED) + { + gBattleMons[gBankAttacker].status2 &= ~(STATUS2_WRAPPED); + gBankTarget = ewram[gBankAttacker + 0x16020]; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = ewram[gBankAttacker * 2 + 0x16004]; + gBattleTextBuff1[3] = ewram[gBankAttacker * 2 + 0x16005]; + gBattleTextBuff1[4] = 0xFF; + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_WrapFree; + } + else if (gStatuses3[gBankAttacker] & STATUS3_LEECHSEED) + { + gStatuses3[gBankAttacker] &= ~(STATUS3_LEECHSEED); + gStatuses3[gBankAttacker] &= ~(STATUS3_LEECHSEED_BANK); + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_LeechSeedFree; + } + else if (gSideAffecting[GetBankSide(gBankAttacker)] & SIDE_STATUS_SPIKES) + { + gSideAffecting[GetBankSide(gBankAttacker)] &= ~(SIDE_STATUS_SPIKES); + gSideTimer[GetBankSide(gBankAttacker)].spikesAmount = 0; + b_movescr_stack_push_cursor(); + gBattlescriptCurrInstr = BattleScript_SpikesFree; + } + else + gBattlescriptCurrInstr++; +} + +static void atkBF_set_defense_curl(void) +{ + gBattleMons[gBankAttacker].status2 |= STATUS2_DEFENSE_CURL; + gBattlescriptCurrInstr++; +} + +static void atkC0_recoverbasedonsunlight(void) +{ + gBankTarget = gBankAttacker; + if (gBattleMons[gBankAttacker].hp != gBattleMons[gBankAttacker].maxHP) + { + if (!gBattleWeather || !WEATHER_HAS_EFFECT) + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 2; + else if (gBattleWeather & WEATHER_SUN_ANY) + gBattleMoveDamage = 20 * gBattleMons[gBankAttacker].maxHP / 30; + else //not sunny weather + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + gBattlescriptCurrInstr += 5; + } + else + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +__attribute__((naked)) +static void atkC1_hidden_power(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\ + ldr r2, _08029894 @ =gBattleMons\n\ + ldr r0, _08029898 @ =gBankAttacker\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + adds r4, r1, 0\n\ + muls r4, r0\n\ + adds r4, r2\n\ + ldrb r0, [r4, 0x14]\n\ + mov r10, r0\n\ + mov r7, r10\n\ + lsls r7, 27\n\ + adds r0, r7, 0\n\ + lsrs r0, 27\n\ + mov r10, r0\n\ + movs r1, 0x2\n\ + mov r2, r10\n\ + ands r2, r1\n\ + asrs r2, 1\n\ + ldrh r7, [r4, 0x14]\n\ + mov r9, r7\n\ + mov r0, r9\n\ + lsls r0, 22\n\ + mov r9, r0\n\ + lsrs r3, r0, 27\n\ + adds r0, r1, 0\n\ + ands r0, r3\n\ + orrs r2, r0\n\ + ldrb r7, [r4, 0x15]\n\ + mov r8, r7\n\ + mov r0, r8\n\ + lsls r0, 25\n\ + mov r8, r0\n\ + lsrs r3, r0, 27\n\ + adds r0, r1, 0\n\ + ands r0, r3\n\ + lsls r0, 1\n\ + orrs r2, r0\n\ + ldr r6, [r4, 0x14]\n\ + lsls r6, 12\n\ + lsrs r3, r6, 27\n\ + adds r0, r1, 0\n\ + ands r0, r3\n\ + lsls r0, 2\n\ + orrs r2, r0\n\ + ldrh r5, [r4, 0x16]\n\ + lsls r5, 23\n\ + lsrs r3, r5, 27\n\ + adds r0, r1, 0\n\ + ands r0, r3\n\ + lsls r0, 3\n\ + orrs r2, r0\n\ + ldrb r3, [r4, 0x17]\n\ + lsls r3, 26\n\ + lsrs r0, r3, 27\n\ + ands r1, r0\n\ + lsls r1, 4\n\ + orrs r2, r1\n\ + movs r1, 0x1\n\ + adds r4, r1, 0\n\ + mov r7, r10\n\ + ands r4, r7\n\ + mov r0, r9\n\ + lsrs r0, 27\n\ + mov r9, r0\n\ + adds r0, r1, 0\n\ + mov r7, r9\n\ + ands r0, r7\n\ + lsls r0, 1\n\ + orrs r4, r0\n\ + mov r0, r8\n\ + lsrs r0, 27\n\ + mov r8, r0\n\ + adds r0, r1, 0\n\ + mov r7, r8\n\ + ands r0, r7\n\ + lsls r0, 2\n\ + orrs r4, r0\n\ + lsrs r6, 27\n\ + adds r0, r1, 0\n\ + ands r0, r6\n\ + lsls r0, 3\n\ + orrs r4, r0\n\ + lsrs r5, 27\n\ + adds r0, r1, 0\n\ + ands r0, r5\n\ + lsls r0, 4\n\ + orrs r4, r0\n\ + lsrs r3, 27\n\ + ands r1, r3\n\ + lsls r1, 5\n\ + orrs r4, r1\n\ + ldr r5, _0802989C @ =gDynamicBasePower\n\ + lsls r0, r2, 2\n\ + adds r0, r2\n\ + lsls r0, 3\n\ + movs r1, 0x3F\n\ + bl __divsi3\n\ + adds r0, 0x1E\n\ + strh r0, [r5]\n\ + ldr r5, _080298A0 @ =0x02000000\n\ + lsls r0, r4, 4\n\ + subs r0, r4\n\ + movs r1, 0x3F\n\ + bl __divsi3\n\ + adds r1, r0, 0x1\n\ + ldr r0, _080298A4 @ =0x0001601c\n\ + adds r5, r0\n\ + strb r1, [r5]\n\ + lsls r0, r1, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x8\n\ + bls _08029876\n\ + adds r0, r1, 0x1\n\ + strb r0, [r5]\n\ +_08029876:\n\ + ldrb r0, [r5]\n\ + movs r1, 0xC0\n\ + orrs r0, r1\n\ + strb r0, [r5]\n\ + ldr r1, _080298A8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x1\n\ + str r0, [r1]\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\ +_08029894: .4byte gBattleMons\n\ +_08029898: .4byte gBankAttacker\n\ +_0802989C: .4byte gDynamicBasePower\n\ +_080298A0: .4byte 0x02000000\n\ +_080298A4: .4byte 0x0001601c\n\ +_080298A8: .4byte gBattlescriptCurrInstr\n\ + .syntax divided"); +} + +static void atkC2_selectnexttarget(void) +{ + for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++) + { + if (gBankTarget == gBankAttacker) + continue; + if (!(gAbsentBankFlags & gBitTable[gBankTarget])) + break; + } + gBattlescriptCurrInstr++; +} + +static void atkC3_setfutureattack(void) +{ + if (gWishFutureKnock.futureSightCounter[gBankTarget] != 0) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + gWishFutureKnock.futureSightMove[gBankTarget] = gCurrentMove; + gWishFutureKnock.futureSightAttacker[gBankTarget] = gBankAttacker; + gWishFutureKnock.futureSightCounter[gBankTarget] = 3; + gWishFutureKnock.futureSightDmg[gBankTarget] = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove, + gSideAffecting[GetBankIdentity(gBankTarget) & 1], 0, + 0, gBankAttacker, gBankTarget); + + if (gProtectStructs[gBankAttacker].helpingHand) + gWishFutureKnock.futureSightDmg[gBankTarget] = gWishFutureKnock.futureSightDmg[gBankTarget] * 15 / 10; + + if (gCurrentMove == MOVE_DOOM_DESIRE) + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + + gBattlescriptCurrInstr += 5; + } +} + +#ifdef NONMATCHING +static void atkC4_beat_up(void) +{ + register struct Pokemon* party asm("r7"); + if (GetBankSide(gBankAttacker) == 0) + party = gPlayerParty; + else + party = gEnemyParty; + + if (gBattleMons[gBankTarget].hp == 0) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + while (gBattleCommunication[0] < 6) + { + if (GetMonData(&party[gBattleCommunication[0]], MON_DATA_HP) && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) + && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) != SPECIES_EGG && !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS)) + break; + gBattleCommunication[0]++; + } + if (gBattleCommunication[0] < 6) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 4; + gBattleTextBuff1[2] = gBankAttacker; + gBattleTextBuff1[3] = gBattleCommunication[0]; + gBattleTextBuff1[4] = 0xFF; + gBattlescriptCurrInstr += 9; + + gBattleMoveDamage = gBaseStats[GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES)].baseAttack; + gBattleMoveDamage *= gBattleMoves[gCurrentMove].power; + gBattleMoveDamage *= (GetMonData(&party[gBattleCommunication[0]], MON_DATA_LEVEL) * 2 / 5 + 2); + gBattleMoveDamage /= gBaseStats[gBattleMons[gBankTarget].species].baseDefense; + gBattleMoveDamage = (gBattleMoveDamage / 50) + 2; + if (gProtectStructs[gBankAttacker].helpingHand) + gBattleMoveDamage = gBattleMoveDamage * 15 / 10; + + gBattleCommunication[0]++; + } + else if (gBattleCommunication[0] != 0) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 5); + } +} +#else +__attribute__((naked)) +static void atkC4_beat_up(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + ldr r0, _08029A8C @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + ldr r7, _08029A90 @ =gEnemyParty\n\ + cmp r0, 0\n\ + bne _08029A62\n\ + ldr r7, _08029A94 @ =gPlayerParty\n\ +_08029A62:\n\ + ldr r2, _08029A98 @ =gBattleMons\n\ + ldr r0, _08029A9C @ =gBankTarget\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r2\n\ + ldrh r0, [r0, 0x28]\n\ + cmp r0, 0\n\ + bne _08029AA4\n\ + ldr r3, _08029AA0 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + b _08029C40\n\ + .align 2, 0\n\ +_08029A8C: .4byte gBankAttacker\n\ +_08029A90: .4byte gEnemyParty\n\ +_08029A94: .4byte gPlayerParty\n\ +_08029A98: .4byte gBattleMons\n\ +_08029A9C: .4byte gBankTarget\n\ +_08029AA0: .4byte gBattlescriptCurrInstr\n\ +_08029AA4:\n\ + ldr r6, _08029BE0 @ =gBattleCommunication\n\ + ldrb r0, [r6]\n\ + mov r8, r0\n\ + cmp r0, 0x5\n\ + bls _08029AB0\n\ + b _08029C0C\n\ +_08029AB0:\n\ + adds r4, r6, 0\n\ + movs r5, 0x64\n\ +_08029AB4:\n\ + ldrb r0, [r4]\n\ + muls r0, r5\n\ + adds r0, r7, r0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _08029AF8\n\ + ldrb r0, [r6]\n\ + muls r0, r5\n\ + adds r0, r7, r0\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _08029AF8\n\ + ldrb r0, [r4]\n\ + muls r0, r5\n\ + adds r0, r7, r0\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + movs r1, 0xCE\n\ + lsls r1, 1\n\ + cmp r0, r1\n\ + beq _08029AF8\n\ + ldrb r0, [r4]\n\ + muls r0, r5\n\ + adds r0, r7, r0\n\ + movs r1, 0x37\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _08029B08\n\ +_08029AF8:\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + adds r6, r4, 0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x5\n\ + bls _08029AB4\n\ +_08029B08:\n\ + ldr r1, _08029BE0 @ =gBattleCommunication\n\ + mov r9, r1\n\ + ldrb r2, [r1]\n\ + cmp r2, 0x5\n\ + bhi _08029C0C\n\ + ldr r1, _08029BE4 @ =gBattleTextBuff1\n\ + movs r0, 0xFD\n\ + strb r0, [r1]\n\ + movs r0, 0x4\n\ + strb r0, [r1, 0x1]\n\ + ldr r6, _08029BE8 @ =gBankAttacker\n\ + ldrb r0, [r6]\n\ + strb r0, [r1, 0x2]\n\ + strb r2, [r1, 0x3]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x4]\n\ + ldr r1, _08029BEC @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x9\n\ + str r0, [r1]\n\ + ldr r2, _08029BF0 @ =gBattleMoveDamage\n\ + mov r8, r2\n\ + ldr r5, _08029BF4 @ =gBaseStats\n\ + mov r1, r9\n\ + ldrb r0, [r1]\n\ + movs r4, 0x64\n\ + muls r0, r4\n\ + adds r0, r7, r0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + lsls r1, r0, 3\n\ + subs r1, r0\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + ldrb r3, [r1, 0x1]\n\ + mov r2, r8\n\ + str r3, [r2]\n\ + ldr r2, _08029BF8 @ =gBattleMoves\n\ + ldr r0, _08029BFC @ =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, 0x1]\n\ + muls r0, r3\n\ + mov r1, r8\n\ + str r0, [r1]\n\ + mov r2, r9\n\ + ldrb r0, [r2]\n\ + muls r0, r4\n\ + adds r0, r7, r0\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + lsls r0, 1\n\ + movs r1, 0x5\n\ + bl __udivsi3\n\ + adds r0, 0x2\n\ + mov r2, r8\n\ + ldr r1, [r2]\n\ + muls r0, r1\n\ + str r0, [r2]\n\ + ldr r3, _08029C00 @ =gBattleMons\n\ + ldr r1, _08029C04 @ =gBankTarget\n\ + ldrb r2, [r1]\n\ + movs r1, 0x58\n\ + muls r1, r2\n\ + adds r1, r3\n\ + ldrh r2, [r1]\n\ + lsls r1, r2, 3\n\ + subs r1, r2\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + ldrb r1, [r1, 0x2]\n\ + bl __divsi3\n\ + mov r1, r8\n\ + str r0, [r1]\n\ + movs r1, 0x32\n\ + bl __divsi3\n\ + adds r2, r0, 0x2\n\ + mov r0, r8\n\ + str r2, [r0]\n\ + ldr r1, _08029C08 @ =gProtectStructs\n\ + ldrb r0, [r6]\n\ + lsls r0, 4\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 28\n\ + cmp r0, 0\n\ + bge _08029BD4\n\ + lsls r0, r2, 4\n\ + subs r0, r2\n\ + movs r1, 0xA\n\ + bl __divsi3\n\ + mov r1, r8\n\ + str r0, [r1]\n\ +_08029BD4:\n\ + mov r2, r9\n\ + ldrb r0, [r2]\n\ + adds r0, 0x1\n\ + strb r0, [r2]\n\ + b _08029C46\n\ + .align 2, 0\n\ +_08029BE0: .4byte gBattleCommunication\n\ +_08029BE4: .4byte gBattleTextBuff1\n\ +_08029BE8: .4byte gBankAttacker\n\ +_08029BEC: .4byte gBattlescriptCurrInstr\n\ +_08029BF0: .4byte gBattleMoveDamage\n\ +_08029BF4: .4byte gBaseStats\n\ +_08029BF8: .4byte gBattleMoves\n\ +_08029BFC: .4byte gCurrentMove\n\ +_08029C00: .4byte gBattleMons\n\ +_08029C04: .4byte gBankTarget\n\ +_08029C08: .4byte gProtectStructs\n\ +_08029C0C:\n\ + mov r0, r8\n\ + cmp r0, 0\n\ + beq _08029C2C\n\ + ldr r3, _08029C28 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + b _08029C40\n\ + .align 2, 0\n\ +_08029C28: .4byte gBattlescriptCurrInstr\n\ +_08029C2C:\n\ + ldr r3, _08029C54 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x5]\n\ + ldrb r0, [r2, 0x6]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x7]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x8]\n\ +_08029C40:\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + str r1, [r3]\n\ +_08029C46:\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\ +_08029C54: .4byte gBattlescriptCurrInstr\n\ + .syntax divided"); +} +#endif // NONMATCHING + +static void atkC5_hidepreattack(void) +{ + switch (gCurrentMove) + { + case MOVE_FLY: + case MOVE_BOUNCE: + gStatuses3[gBankAttacker] |= STATUS3_ON_AIR; + break; + case MOVE_DIG: + gStatuses3[gBankAttacker] |= STATUS3_UNDERGROUND; + break; + case MOVE_DIVE: + gStatuses3[gBankAttacker] |= STATUS3_UNDERWATER; + break; + } + gBattlescriptCurrInstr++; +} + +static void atkC6_unhidepostattack(void) +{ + switch (gCurrentMove) + { + case MOVE_FLY: + case MOVE_BOUNCE: + gStatuses3[gBankAttacker] &= ~STATUS3_ON_AIR; + break; + case MOVE_DIG: + gStatuses3[gBankAttacker] &= ~STATUS3_UNDERGROUND; + break; + case MOVE_DIVE: + gStatuses3[gBankAttacker] &= ~STATUS3_UNDERWATER; + break; + } + gBattlescriptCurrInstr++; +} + +static void atkC7_setminimize(void) +{ + if (gHitMarker & HITMARKER_OBEYS) + gStatuses3[gBankAttacker] |= STATUS3_MINIMIZED; + gBattlescriptCurrInstr++; +} + +static void atkC8_sethail(void) +{ + if (gBattleWeather & WEATHER_HAIL) + { + gBattleMoveFlags |= MOVESTATUS_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else + { + gBattleWeather = WEATHER_HAIL; + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + gWishFutureKnock.weatherDuration = 5; + } + gBattlescriptCurrInstr++; +} + +static void atkC9_jumpifattackandspecialattackcannotfall(void) //memento +{ + if (gBattleMons[gBankTarget].statStages[STAT_STAGE_ATK] == 0 + && gBattleMons[gBankTarget].statStages[STAT_STAGE_SPATK] == 0 + && gBattleCommunication[6] != 1) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gActiveBank = gBankAttacker; + gBattleMoveDamage = gBattleMons[gActiveBank].hp; + EmitHealthBarUpdate(0, 0x7FFF); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 5; + } +} + +static void atkCA_setforcedtarget(void) //follow me +{ + gSideTimer[GetBankSide(gBankAttacker)].followmeTimer = 1; + gSideTimer[GetBankSide(gBankAttacker)].followmeTarget = gBankAttacker; + gBattlescriptCurrInstr++; +} + +static void atkCB_setcharge(void) +{ + gStatuses3[gBankAttacker] |= STATUS3_CHARGED_UP; + gDisableStructs[gBankAttacker].chargeTimer1 = 2; + gDisableStructs[gBankAttacker].chargeTimer2 = 2; + gBattlescriptCurrInstr++; +} + +static void atkCC_callterrainattack(void) //nature power +{ + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gCurrentMove = sNaturePowerMoves[gBattleTerrain]; + gBankTarget = sub_801B5C0(gCurrentMove, 0); + b_movescr_stack_push(gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]); + gBattlescriptCurrInstr++; +} + +static void atkCD_cureifburnedparalysedorpoisoned(void) //refresh +{ + if (gBattleMons[gBankAttacker].status1 & (STATUS_POISON | STATUS_BURN | STATUS_PARALYSIS | STATUS_TOXIC_POISON)) + { + gBattleMons[gBankAttacker].status1 = 0; + gBattlescriptCurrInstr += 5; + gActiveBank = gBankAttacker; + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkCE_settorment(void) +{ + if (gBattleMons[gBankTarget].status2 & STATUS2_TORMENT) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gBattleMons[gBankTarget].status2 |= STATUS2_TORMENT; + gBattlescriptCurrInstr += 5; + } +} + +static void atkCF_jumpifnodamage(void) +{ + if (gProtectStructs[gBankAttacker].physicalDmg || gProtectStructs[gBankAttacker].specialDmg) + gBattlescriptCurrInstr += 5; + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkD0_settaunt(void) +{ + if (gDisableStructs[gBankTarget].tauntTimer1 == 0) + { + gDisableStructs[gBankTarget].tauntTimer1 = 2; + gDisableStructs[gBankTarget].tauntTimer2 = 2; + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkD1_set_helpinghand(void) +{ + gBankTarget = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gBankTarget]) + && !gProtectStructs[gBankAttacker].helpingHand && !gProtectStructs[gBankTarget].helpingHand) + { + gProtectStructs[gBankTarget].helpingHand = 1; + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +#ifdef NONMATCHING +static void atkD2_swap_items(void) +{ + if ((GetBankSide(gBankAttacker) != 1 || gBattleTypeFlags & (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER) || gTrainerBattleOpponent == 0x400)) + { + u8 side = GetBankSide(gBankAttacker); + if (gBattleTypeFlags) + } + + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +#else +__attribute__((naked)) +static void atkD2_swap_items(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, _0802A30C @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0802A24C\n\ + ldr r0, _0802A310 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + ldr r0, _0802A314 @ =0x00000902\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0802A24C\n\ + ldr r0, _0802A318 @ =gTrainerBattleOpponent\n\ + ldrh r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 3\n\ + cmp r1, r0\n\ + bne _0802A2EE\n\ +_0802A24C:\n\ + ldr r4, _0802A30C @ =gBankAttacker\n\ + ldrb r0, [r4]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + ldr r0, _0802A310 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + ldr r0, _0802A314 @ =0x00000902\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0802A290\n\ + ldr r0, _0802A318 @ =gTrainerBattleOpponent\n\ + ldrh r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 3\n\ + cmp r1, r0\n\ + beq _0802A290\n\ + ldr r0, _0802A31C @ =gWishFutureKnock\n\ + adds r0, 0x29\n\ + adds r0, r2, r0\n\ + ldrb r1, [r0]\n\ + ldr r3, _0802A320 @ =gBitTable\n\ + ldr r2, _0802A324 @ =gBattlePartyID\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _0802A2EE\n\ +_0802A290:\n\ + ldr r0, _0802A328 @ =gBattleMons\n\ + mov r9, r0\n\ + ldr r1, _0802A30C @ =gBankAttacker\n\ + ldrb r4, [r1]\n\ + movs r2, 0x58\n\ + mov r8, r2\n\ + mov r0, r8\n\ + muls r0, r4\n\ + mov r3, r9\n\ + adds r5, r0, r3\n\ + ldrh r3, [r5, 0x2E]\n\ + adds r1, r3, 0\n\ + cmp r1, 0\n\ + bne _0802A2BE\n\ + ldr r0, _0802A32C @ =gBankTarget\n\ + ldrb r0, [r0]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + add r0, r9\n\ + ldrh r0, [r0, 0x2E]\n\ + cmp r0, 0\n\ + beq _0802A2EE\n\ +_0802A2BE:\n\ + cmp r1, 0xAF\n\ + beq _0802A2EE\n\ + ldr r7, _0802A32C @ =gBankTarget\n\ + ldrb r0, [r7]\n\ + mov r1, r8\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + mov r1, r9\n\ + adds r2, r0, r1\n\ + ldrh r1, [r2, 0x2E]\n\ + cmp r1, 0xAF\n\ + beq _0802A2EE\n\ + adds r0, r3, 0\n\ + subs r0, 0x79\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0xB\n\ + bls _0802A2EE\n\ + adds r0, r1, 0\n\ + subs r0, 0x79\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0xB\n\ + bhi _0802A334\n\ +_0802A2EE:\n\ + ldr r3, _0802A330 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + str r1, [r3]\n\ + b _0802A49A\n\ + .align 2, 0\n\ +_0802A30C: .4byte gBankAttacker\n\ +_0802A310: .4byte gBattleTypeFlags\n\ +_0802A314: .4byte 0x00000902\n\ +_0802A318: .4byte gTrainerBattleOpponent\n\ +_0802A31C: .4byte gWishFutureKnock\n\ +_0802A320: .4byte gBitTable\n\ +_0802A324: .4byte gBattlePartyID\n\ +_0802A328: .4byte gBattleMons\n\ +_0802A32C: .4byte gBankTarget\n\ +_0802A330: .4byte gBattlescriptCurrInstr\n\ +_0802A334:\n\ + adds r0, r2, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3C\n\ + bne _0802A36C\n\ + ldr r1, _0802A360 @ =gBattlescriptCurrInstr\n\ + ldr r0, _0802A364 @ =BattleScript_NoItemSteal\n\ + str r0, [r1]\n\ + ldr r1, _0802A368 @ =gLastUsedAbility\n\ + ldrb r0, [r7]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + add r0, r9\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldrb r0, [r7]\n\ + ldrb r1, [r1]\n\ + bl RecordAbilityBattle\n\ + b _0802A49A\n\ + .align 2, 0\n\ +_0802A360: .4byte gBattlescriptCurrInstr\n\ +_0802A364: .4byte BattleScript_NoItemSteal\n\ +_0802A368: .4byte gLastUsedAbility\n\ +_0802A36C:\n\ + lsls r0, r4, 1\n\ + ldr r4, _0802A458 @ =0x020160f0\n\ + adds r6, r0, r4\n\ + ldrh r5, [r5, 0x2E]\n\ + mov r10, r5\n\ + strh r1, [r6]\n\ + ldr r3, _0802A45C @ =gBankAttacker\n\ + ldrb r0, [r3]\n\ + mov r1, r8\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + add r0, r9\n\ + movs r1, 0\n\ + strh r1, [r0, 0x2E]\n\ + ldrb r0, [r7]\n\ + mov r2, r8\n\ + muls r2, r0\n\ + adds r0, r2, 0\n\ + add r0, r9\n\ + mov r3, r10\n\ + strh r3, [r0, 0x2E]\n\ + ldr r5, _0802A460 @ =gActiveBank\n\ + ldr r1, _0802A45C @ =gBankAttacker\n\ + ldrb r0, [r1]\n\ + strb r0, [r5]\n\ + str r6, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + movs r2, 0\n\ + movs r3, 0x2\n\ + bl EmitSetAttributes\n\ + ldr r2, _0802A45C @ =gBankAttacker\n\ + ldrb r0, [r2]\n\ + bl MarkBufferBankForExecution\n\ + ldrb r0, [r7]\n\ + strb r0, [r5]\n\ + ldrb r0, [r7]\n\ + mov r3, r8\n\ + muls r3, r0\n\ + adds r0, r3, 0\n\ + mov r1, r9\n\ + adds r1, 0x2E\n\ + adds r0, r1\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + movs r2, 0\n\ + movs r3, 0x2\n\ + bl EmitSetAttributes\n\ + ldrb r0, [r7]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, _0802A464 @ =0xfffe9f10\n\ + adds r4, r0\n\ + ldrb r0, [r7]\n\ + lsls r0, 1\n\ + ldr r2, _0802A468 @ =0x000160e8\n\ + adds r0, r2\n\ + adds r0, r4\n\ + movs r1, 0\n\ + strb r1, [r0]\n\ + ldrb r0, [r7]\n\ + lsls r0, 1\n\ + ldr r1, _0802A46C @ =0x000160e9\n\ + adds r0, r1\n\ + adds r0, r4\n\ + movs r3, 0\n\ + strb r3, [r0]\n\ + ldr r3, _0802A45C @ =gBankAttacker\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + adds r0, r4\n\ + movs r2, 0\n\ + strb r2, [r0]\n\ + ldrb r0, [r3]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + adds r0, r4\n\ + strb r2, [r0]\n\ + ldr r1, _0802A470 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x5\n\ + str r0, [r1]\n\ + ldr r1, _0802A474 @ =gBattleTextBuff1\n\ + movs r3, 0xFD\n\ + strb r3, [r1]\n\ + movs r2, 0xA\n\ + strb r2, [r1, 0x1]\n\ + ldrh r0, [r6]\n\ + strb r0, [r1, 0x2]\n\ + ldrh r0, [r6]\n\ + lsrs r0, 8\n\ + strb r0, [r1, 0x3]\n\ + movs r0, 0xFF\n\ + strb r0, [r1, 0x4]\n\ + ldr r1, _0802A478 @ =gBattleTextBuff2\n\ + strb r3, [r1]\n\ + strb r2, [r1, 0x1]\n\ + mov r3, r10\n\ + strb r3, [r1, 0x2]\n\ + mov r2, r10\n\ + lsrs r0, r2, 8\n\ + strb r0, [r1, 0x3]\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + strb r0, [r1, 0x4]\n\ + cmp r2, 0\n\ + beq _0802A480\n\ + ldrh r0, [r6]\n\ + cmp r0, 0\n\ + beq _0802A494\n\ + ldr r1, _0802A47C @ =gBattleCommunication\n\ + movs r0, 0x2\n\ + b _0802A498\n\ + .align 2, 0\n\ +_0802A458: .4byte 0x020160f0\n\ +_0802A45C: .4byte gBankAttacker\n\ +_0802A460: .4byte gActiveBank\n\ +_0802A464: .4byte 0xfffe9f10\n\ +_0802A468: .4byte 0x000160e8\n\ +_0802A46C: .4byte 0x000160e9\n\ +_0802A470: .4byte gBattlescriptCurrInstr\n\ +_0802A474: .4byte gBattleTextBuff1\n\ +_0802A478: .4byte gBattleTextBuff2\n\ +_0802A47C: .4byte gBattleCommunication\n\ +_0802A480:\n\ + ldrh r0, [r6]\n\ + cmp r0, 0\n\ + beq _0802A494\n\ + ldr r0, _0802A490 @ =gBattleCommunication\n\ + movs r3, 0\n\ + strb r3, [r0, 0x5]\n\ + b _0802A49A\n\ + .align 2, 0\n\ +_0802A490: .4byte gBattleCommunication\n\ +_0802A494:\n\ + ldr r1, _0802A4AC @ =gBattleCommunication\n\ + movs r0, 0x1\n\ +_0802A498:\n\ + strb r0, [r1, 0x5]\n\ +_0802A49A:\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\ +_0802A4AC: .4byte gBattleCommunication\n\ + .syntax divided"); +} +#endif // NONMATCHING + +static void atkD3_copy_ability(void) //role play +{ + if (gBattleMons[gBankTarget].ability != 0 && gBattleMons[gBankTarget].ability != ABILITY_WONDER_GUARD) + { + gBattleMons[gBankAttacker].ability = gBattleMons[gBankTarget].ability; + gLastUsedAbility = gBattleMons[gBankTarget].ability; + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkD4_wish_effect(void) +{ + switch (BSScriptRead8(gBattlescriptCurrInstr + 1)) + { + case 0: //use wish + if (gWishFutureKnock.wishCounter[gBankAttacker] == 0) + { + gWishFutureKnock.wishCounter[gBankAttacker] = 2; + gWishFutureKnock.wishUserID[gBankAttacker] = gBattlePartyID[gBankAttacker]; + gBattlescriptCurrInstr += 6; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + break; + case 1: //heal effect + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 4; + gBattleTextBuff1[2] = gBankTarget; + gBattleTextBuff1[3] = gWishFutureKnock.wishUserID[gBankTarget]; + gBattleTextBuff1[4] = 0xFF; + gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 2; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + if (gBattleMons[gBankTarget].hp == gBattleMons[gBankTarget].maxHP) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; + break; + } +} + +static void atkD5_setroots(void) //ingrain +{ + if (gStatuses3[gBankAttacker] & STATUS3_ROOTED) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gStatuses3[gBankAttacker] |= STATUS3_ROOTED; + gBattlescriptCurrInstr += 5; + } +} + +static void atkD6_doubledamagedealtifdamaged(void) +{ + if ((gProtectStructs[gBankAttacker].physicalDmg && gProtectStructs[gBankAttacker].physicalBank == gBankTarget) + || (gProtectStructs[gBankAttacker].specialDmg && gProtectStructs[gBankAttacker].specialBank == gBankTarget)) + BATTLE_STRUCT->dmgMultiplier = 2; + gBattlescriptCurrInstr++; +} + +static void atkD7_setyawn(void) +{ + if (gStatuses3[gBankTarget] & STATUS3_YAWN || (u8) gBattleMons[gBankTarget].status1) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gStatuses3[gBankTarget] |= 0x1000; + gBattlescriptCurrInstr += 5; + } +} + +static void atkD8_setdamagetohealthdifference(void) +{ + if (gBattleMons[gBankTarget].hp <= gBattleMons[gBankAttacker].hp) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + gBattleMoveDamage = gBattleMons[gBankTarget].hp - gBattleMons[gBankAttacker].hp; + gBattlescriptCurrInstr += 5; + } +} + +static void atkD9_scaledamagebyhealthratio(void) +{ + if (gDynamicBasePower == 0) + { + u8 power = gBattleMoves[gCurrentMove].power; + gDynamicBasePower = gBattleMons[gBankAttacker].hp * power / gBattleMons[gBankAttacker].maxHP; + if (gDynamicBasePower == 0) + gDynamicBasePower = 1; + } + gBattlescriptCurrInstr++; +} + +static void atkDA_abilityswap(void) +{ + if ((gBattleMons[gBankAttacker].ability == 0 && gBattleMons[gBankTarget].ability == 0) + || gBattleMons[gBankAttacker].ability == ABILITY_WONDER_GUARD || gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD + || gBattleMoveFlags & MOVESTATUS_NOEFFECT) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + u8 atk_ability = gBattleMons[gBankAttacker].ability; + gBattleMons[gBankAttacker].ability = gBattleMons[gBankTarget].ability; + gBattleMons[gBankTarget].ability = atk_ability; + gBattlescriptCurrInstr += 5; + } +} + +static void atkDB_imprisoneffect(void) +{ + u8 r8 = 0; + if ((gStatuses3[gBankAttacker] & STATUS3_IMPRISIONED)) + { + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + else + { + u8 bank; + sub_801529C(gBankAttacker); + for (bank = 0; bank < gNoOfAllBanks; bank++) + { + if (r8 != GetBankSide(bank)) + { + int j; + for (j = 0; j < 4; j++) + { + int k; + for (k = 0; k < 4; k++) + { + if (gBattleMons[gBankAttacker].moves[j] == gBattleMons[bank].moves[k] && gBattleMons[gBankAttacker].moves[j]) + break; + } + if (k != 4) + break; + } + if (j != 4) + { + gStatuses3[gBankAttacker] |= STATUS3_IMPRISIONED; + gBattlescriptCurrInstr += 5; + break; + } + } + } + if (bank == gNoOfAllBanks) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } +} + +static void atkDC_setgrudge(void) +{ + if (gStatuses3[gBankAttacker] & STATUS3_GRUDGE) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gStatuses3[gBankAttacker] |= STATUS3_GRUDGE; + gBattlescriptCurrInstr += 5; + } +} + +static void atkDD_weightdamagecalculation(void) +{ + int i; + for (i = 0; sWeightDamage[i] != 0xFFFF; i += 2) + { + if (sWeightDamage[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) + break; + } + if (sWeightDamage[i] != 0xFFFF) + gDynamicBasePower = sWeightDamage[i + 1]; + else + gDynamicBasePower = 120; + gBattlescriptCurrInstr++; +} + +#ifdef NONMATCHING +static void atkDE_asistattackselect(void) +{ + u32 chooseable_moves_no = 0; + struct Pokemon* party; + int i, j; + u16* chooseable_moves; + if (GetBankIdentity(gBankAttacker) & 1) + party = gEnemyParty; + else + party = gPlayerParty; + + for (i = 0; i < 6; i++) + { + if (i == gBattlePartyID[gBankAttacker]) + break; + if (!GetMonData(&party[i], MON_DATA_SPECIES2) || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) + break; + chooseable_moves = &BATTLE_STRUCT->assistMove[chooseable_moves_no]; + for (j = 0; j < 4; j++) + { + int k; + u16 move = GetMonData(&party[i], MON_DATA_MOVE1 + i); + if (IsMoveUnchoosable(move)) + break; + //sUnknown_081FACFE[k] + for (k = 0; ;k++) + { + if (sUnknown_081FACFE[k] == 0xFFFF) + { + if (move) + { + *chooseable_moves = move; + chooseable_moves++; + chooseable_moves_no++; + } + break; + } + if (sUnknown_081FACFE[k] == move) + break; + } + } + } + if (chooseable_moves_no) + { + gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); + gRandomMove = BATTLE_STRUCT->assistMove[Random() % chooseable_moves_no]; + gBankTarget = sub_801B5C0(gRandomMove, 0); + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +#else +__attribute__((naked)) +static void atkDE_asistattackselect(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 r10, r0\n\ + ldr r0, _0802AB9C @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBankIdentity\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + ldr r0, _0802ABA0 @ =gPlayerParty\n\ + str r0, [sp]\n\ + cmp r1, 0\n\ + beq _0802AAAC\n\ + ldr r1, _0802ABA4 @ =gEnemyParty\n\ + str r1, [sp]\n\ +_0802AAAC:\n\ + movs r2, 0\n\ +_0802AAAE:\n\ + ldr r1, _0802ABA8 @ =gBattlePartyID\n\ + ldr r0, _0802AB9C @ =gBankAttacker\n\ + ldrb r0, [r0]\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + adds r1, r2, 0x1\n\ + str r1, [sp, 0x4]\n\ + ldrh r0, [r0]\n\ + cmp r2, r0\n\ + beq _0802AB54\n\ + movs r0, 0x64\n\ + adds r6, r2, 0\n\ + muls r6, r0\n\ + ldr r0, [sp]\n\ + adds r4, r0, r6\n\ + adds r0, r4, 0\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0802AB54\n\ + adds r0, r4, 0\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + movs r1, 0xCE\n\ + lsls r1, 1\n\ + cmp r0, r1\n\ + beq _0802AB54\n\ + movs r5, 0\n\ + ldr r1, _0802ABAC @ =0x0000ffff\n\ + mov r8, r1\n\ + mov r9, r6\n\ + mov r1, r10\n\ + lsls r0, r1, 1\n\ + ldr r1, _0802ABB0 @ =0x02016024\n\ + adds r6, r0, r1\n\ +_0802AAF8:\n\ + movs r7, 0\n\ + adds r1, r5, 0\n\ + adds r1, 0xD\n\ + ldr r0, [sp]\n\ + add r0, r9\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + adds r0, r4, 0\n\ + bl IsMoveUnchoosable\n\ + lsls r0, 24\n\ + adds r1, r5, 0x1\n\ + cmp r0, 0\n\ + bne _0802AB4E\n\ + ldr r0, _0802ABB4 @ =sUnknown_081FACFE\n\ + ldrh r2, [r0]\n\ + adds r3, r0, 0\n\ + cmp r2, r8\n\ + beq _0802AB42\n\ + cmp r4, r2\n\ + beq _0802AB38\n\ + ldr r5, _0802ABAC @ =0x0000ffff\n\ + adds r2, r3, 0\n\ +_0802AB2A:\n\ + adds r2, 0x2\n\ + adds r7, 0x1\n\ + ldrh r0, [r2]\n\ + cmp r0, r5\n\ + beq _0802AB42\n\ + cmp r4, r0\n\ + bne _0802AB2A\n\ +_0802AB38:\n\ + lsls r0, r7, 1\n\ + adds r0, r3\n\ + ldrh r0, [r0]\n\ + cmp r0, r8\n\ + bne _0802AB4E\n\ +_0802AB42:\n\ + cmp r4, 0\n\ + beq _0802AB4E\n\ + strh r4, [r6]\n\ + adds r6, 0x2\n\ + movs r0, 0x1\n\ + add r10, r0\n\ +_0802AB4E:\n\ + adds r5, r1, 0\n\ + cmp r5, 0x3\n\ + ble _0802AAF8\n\ +_0802AB54:\n\ + ldr r2, [sp, 0x4]\n\ + cmp r2, 0x5\n\ + ble _0802AAAE\n\ + mov r1, r10\n\ + cmp r1, 0\n\ + beq _0802ABCC\n\ + ldr r2, _0802ABB8 @ =gHitMarker\n\ + ldr r0, [r2]\n\ + ldr r1, _0802ABBC @ =0xfffffbff\n\ + ands r0, r1\n\ + str r0, [r2]\n\ + ldr r4, _0802ABC0 @ =gRandomMove\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + mov r0, r10\n\ + muls r0, r1\n\ + asrs r0, 8\n\ + lsls r0, 1\n\ + ldr r1, _0802ABB0 @ =0x02016024\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + strh r0, [r4]\n\ + ldrh r0, [r4]\n\ + movs r1, 0\n\ + bl sub_801B5C0\n\ + ldr r1, _0802ABC4 @ =gBankTarget\n\ + strb r0, [r1]\n\ + ldr r1, _0802ABC8 @ =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x5\n\ + str r0, [r1]\n\ + b _0802ABE6\n\ + .align 2, 0\n\ +_0802AB9C: .4byte gBankAttacker\n\ +_0802ABA0: .4byte gPlayerParty\n\ +_0802ABA4: .4byte gEnemyParty\n\ +_0802ABA8: .4byte gBattlePartyID\n\ +_0802ABAC: .4byte 0x0000ffff\n\ +_0802ABB0: .4byte 0x02016024\n\ +_0802ABB4: .4byte sUnknown_081FACFE\n\ +_0802ABB8: .4byte gHitMarker\n\ +_0802ABBC: .4byte 0xfffffbff\n\ +_0802ABC0: .4byte gRandomMove\n\ +_0802ABC4: .4byte gBankTarget\n\ +_0802ABC8: .4byte gBattlescriptCurrInstr\n\ +_0802ABCC:\n\ + ldr r3, _0802ABF8 @ =gBattlescriptCurrInstr\n\ + ldr r2, [r3]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + orrs r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + str r1, [r3]\n\ +_0802ABE6:\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\ +_0802ABF8: .4byte gBattlescriptCurrInstr\n\ + .syntax divided"); +} + +#endif // NONMATCHING + +static void atkDF_setmagiccoat(void) +{ + gBankTarget = gBankAttacker; + gSpecialStatuses[gBankAttacker].flag20 = 1; + if (gCurrentMoveTurn == gNoOfAllBanks - 1) //last turn + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gProtectStructs[gBankAttacker].bounceMove = 1; + gBattlescriptCurrInstr += 5; + } +} + +static void atkE0_setstealstatchange(void) +{ + gSpecialStatuses[gBankAttacker].flag20 = 1; + if (gCurrentMoveTurn == gNoOfAllBanks - 1) //last turn + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + gProtectStructs[gBankAttacker].stealMove = 1; + gBattlescriptCurrInstr += 5; + } +} + +static void atkE1_intimidate_string_loader(void) +{ + u8 side; + + BATTLE_STRUCT->scriptingActive = ewram[0x160dd]; + side = GetBankSide(BATTLE_STRUCT->scriptingActive); + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 9; + gBattleTextBuff1[2] = gBattleMons[BATTLE_STRUCT->scriptingActive].ability; + gBattleTextBuff1[3] = 0xFF; + + for (;gBankTarget < gNoOfAllBanks; gBankTarget++) + { + if (GetBankSide(gBankTarget) == side) + continue; + if (!(gAbsentBankFlags & gBitTable[gBankTarget])) + break; + } + + if (gBankTarget >= gNoOfAllBanks) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + gBattlescriptCurrInstr += 5; +} + +static void atkE2_switchout_abilities(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + switch (gBattleMons[gActiveBank].ability) + { + case ABILITY_NATURAL_CURE: + gBattleMons[gActiveBank].status1 = 0; + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, gBitTable[ewram[gActiveBank + 0x16064]], 4, &gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + break; + } + gBattlescriptCurrInstr += 2; +} + +static void atkE3_jumpiffainted(void) +{ + gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + if (gBattleMons[gActiveBank].hp == 0) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + else + gBattlescriptCurrInstr += 6; +} + +static void atkE4_getsecretpowereffect(void) +{ + switch (gBattleTerrain) + { + case 0: + gBattleCommunication[MOVE_EFFECT_BYTE] = 2; + break; + case 1: + gBattleCommunication[MOVE_EFFECT_BYTE] = 1; + break; + case 2: + gBattleCommunication[MOVE_EFFECT_BYTE] = 27; + break; + case 3: + gBattleCommunication[MOVE_EFFECT_BYTE] = 23; + break; + case 4: + gBattleCommunication[MOVE_EFFECT_BYTE] = 22; + break; + case 5: + gBattleCommunication[MOVE_EFFECT_BYTE] = 24; + break; + case 6: + gBattleCommunication[MOVE_EFFECT_BYTE] = 7; + break; + case 7: + gBattleCommunication[MOVE_EFFECT_BYTE] = 8; + break; + default: + gBattleCommunication[MOVE_EFFECT_BYTE] = 5; + break; + } + gBattlescriptCurrInstr++; +} + +static void atkE5_pickup(void) +{ + int i; + for (i = 0; i < 6; i++) + { + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + u16 held_item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + u8 ability; + if (GetMonData(&gPlayerParty[i], MON_DATA_ALT_ABILITY)) + ability = gBaseStats[species].ability2; + else + ability = gBaseStats[species].ability1; + + if (ability == ABILITY_PICKUP && species != 0 && species != SPECIES_EGG && held_item == 0 && (Random() % 10) == 0) + { + s32 chance = Random() % 100; + s32 j; + for (j = 0; j < 18; j += 2) + { + if (sPickupItems[j + 1] > chance) + break; + } + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, (const void*) &sPickupItems[j]); + } + } + gBattlescriptCurrInstr++; +} + +static void atkE6_castform_change_animation(void) +{ + gActiveBank = BATTLE_STRUCT->scriptingActive; + if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE) + BATTLE_STRUCT->castformToChangeInto |= 0x80; + EmitBattleAnimation(0, 0, BATTLE_STRUCT->castformToChangeInto); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr++; +} + +static void atkE7_castform_data_change(void) +{ + u8 form; + gBattlescriptCurrInstr++; + form = castform_switch(BATTLE_STRUCT->scriptingActive); + if (form) + { + b_push_move_exec(gUnknown_081D977D); + BATTLE_STRUCT->castformToChangeInto = form - 1; + } +} + +static void atkE8_settypebasedhalvers(void) //water/mud sport +{ + bool8 worked = FALSE; + if (gBattleMoves[gCurrentMove].effect == EFFECT_MUD_SPORT) + { + if (!(gStatuses3[gBankAttacker] & STATUS3_MUDSPORT)) + { + gStatuses3[gBankAttacker] |= STATUS3_MUDSPORT; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + worked = TRUE; + } + } + else //water sport + { + if (!(gStatuses3[gBankAttacker] & STATUS3_WATERSPORT)) + { + gStatuses3[gBankAttacker] |= STATUS3_WATERSPORT; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + worked = TRUE; + } + } + if (worked) + gBattlescriptCurrInstr += 5; + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkE9_setweatherballtype(void) +{ + if (WEATHER_HAS_EFFECT) + { + if ((u8)(gBattleWeather)) + BATTLE_STRUCT->dmgMultiplier = 2; + if (gBattleWeather & WEATHER_RAIN_ANY) + BATTLE_STRUCT->dynamicMoveType = TYPE_WATER | 0x80; + else if (gBattleWeather & WEATHER_SANDSTORM_ANY) + BATTLE_STRUCT->dynamicMoveType = TYPE_ROCK | 0x80; + else if (gBattleWeather & WEATHER_SUN_ANY) + BATTLE_STRUCT->dynamicMoveType = TYPE_FIRE | 0x80; + else if (gBattleWeather & WEATHER_HAIL) + BATTLE_STRUCT->dynamicMoveType = TYPE_ICE | 0x80; + else + BATTLE_STRUCT->dynamicMoveType = TYPE_NORMAL | 0x80; + } + gBattlescriptCurrInstr++; +} + +static void atkEA_recycleitem(void) +{ + u16* used_item; + gActiveBank = gBankAttacker; + used_item = USED_HELD_ITEM(gActiveBank); + if (*used_item && gBattleMons[gActiveBank].item == 0) + { + gLastUsedItem = *used_item; + *used_item = 0; + gBattleMons[gActiveBank].item = gLastUsedItem; + EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkEB_settypetoterrain(void) +{ + if (gBattleMons[gBankAttacker].type1 != sTerrainToType[gBattleTerrain] && gBattleMons[gBankAttacker].type2 != sTerrainToType[gBattleTerrain]) + { + gBattleMons[gBankAttacker].type1 = sTerrainToType[gBattleTerrain]; + gBattleMons[gBankAttacker].type2 = sTerrainToType[gBattleTerrain]; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 3; + gBattleTextBuff1[2] = sTerrainToType[gBattleTerrain]; + gBattleTextBuff1[3] = 0xFF; + gBattlescriptCurrInstr += 5; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkEC_pursuit_sth(void) +{ + gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank]) && gActionForBanks[gActiveBank] == 0 && gChosenMovesByBanks[gActiveBank] == MOVE_PURSUIT) + { + gUnknown_02024A76[gActiveBank] = 11; + gCurrentMove = MOVE_PURSUIT; + gBattlescriptCurrInstr += 5; + BATTLE_STRUCT->animTurn = 1; + BATTLE_STRUCT->unk160A7 = gBankAttacker; + gBankAttacker = gActiveBank; + } + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); +} + +static void atkED_802B4B4(void) +{ + gEffectBank = gBankAttacker; + if (gBankAttacker == gBankTarget) + gBankAttacker = gBankTarget = BATTLE_STRUCT->scriptingActive; + else + gBankTarget = BATTLE_STRUCT->scriptingActive; + BATTLE_STRUCT->scriptingActive = gEffectBank; + gBattlescriptCurrInstr++; +} + +static void atkEE_removelightscreenreflect(void) //brick break +{ + u8 side = GetBankSide(gBankAttacker) ^ 1; + if (gSideTimer[side].reflectTimer || gSideTimer[side].lightscreenTimer) + { + gSideAffecting[side] &= ~(SIDE_STATUS_REFLECT); + gSideAffecting[side] &= ~(SIDE_STATUS_LIGHTSCREEN); + gSideTimer[side].reflectTimer = 0; + gSideTimer[side].lightscreenTimer = 0; + BATTLE_STRUCT->animTurn = 1; + BATTLE_STRUCT->animTargetsHit = 1; + } + else + { + BATTLE_STRUCT->animTurn = 0; + BATTLE_STRUCT->animTargetsHit = 0; + } + gBattlescriptCurrInstr++; +} + +void atkEF_pokeball_catch_calculation(void) +{ + u8 ball_multiplier = 0; + if (gBattleExecBuffer) + return; + + gActiveBank = gBankAttacker; + gBankTarget = gBankAttacker ^ 1; + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + EmitBallThrowAnim(0, 5); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr = BattleScript_TrainerBallBlock; + } + else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) + { + EmitBallThrowAnim(0, 4); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr = BattleScript_WallyBallThrow; + } + else + { + u32 odds; + u8 catch_rate; + if (gLastUsedItem == ITEM_SAFARI_BALL) + catch_rate = BATTLE_STRUCT->unk16089 * 1275 / 100; //correct the name to safariFleeRate + else + catch_rate = gBaseStats[gBattleMons[gBankTarget].species].catchRate; + if (gLastUsedItem > 5) + { + switch (gLastUsedItem) + { + case ITEM_NET_BALL: + if (gBattleMons[gBankTarget].type1 == TYPE_WATER || gBattleMons[gBankTarget].type2 == TYPE_WATER || gBattleMons[gBankTarget].type1 == TYPE_BUG || gBattleMons[gBankTarget].type2 == TYPE_BUG) + ball_multiplier = 30; + else + ball_multiplier = 10; + break; + case ITEM_DIVE_BALL: + if (sav1_map_get_light_level() == 5) + ball_multiplier = 35; + else + ball_multiplier = 10; + break; + case ITEM_NEST_BALL: + if (gBattleMons[gBankTarget].level <= 39) + { + ball_multiplier = 40 - gBattleMons[gBankTarget].level; + if (ball_multiplier <= 9) + ball_multiplier = 10; + } + else + ball_multiplier = 10; + break; + case ITEM_REPEAT_BALL: + if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) + ball_multiplier = 30; + else + ball_multiplier = 10; + break; + case ITEM_TIMER_BALL: + ball_multiplier = gBattleResults.battleTurnCounter + 10; + if (ball_multiplier > 40) + ball_multiplier = 40; + break; + case ITEM_LUXURY_BALL: + case ITEM_PREMIER_BALL: + ball_multiplier = 10; + break; + } + } + else + ball_multiplier = sBallCatchBonuses[gLastUsedItem - 2]; + + odds = (catch_rate * ball_multiplier / 10) * (gBattleMons[gBankTarget].maxHP * 3 - gBattleMons[gBankTarget].hp * 2) / (3 * gBattleMons[gBankTarget].maxHP); + if (gBattleMons[gBankTarget].status1 & (STATUS_SLEEP | STATUS_FREEZE)) + odds *= 2; + if (gBattleMons[gBankTarget].status1 & (STATUS_POISON | STATUS_BURN | STATUS_PARALYSIS /*| STATUS_TOXIC_POISON */)) //nice one gf + odds = (odds * 15) / 10; + + if (gLastUsedItem != ITEM_SAFARI_BALL) + { + if (gLastUsedItem == ITEM_MASTER_BALL) + { + gBattleResults.unk5_1 = 1; + } + else + { + if (gBattleResults.unk36[gLastUsedItem - ITEM_ULTRA_BALL] < 0xFF) + gBattleResults.unk36[gLastUsedItem - ITEM_ULTRA_BALL]++; + } + } + if (odds > 254) //poke caught + { + EmitBallThrowAnim(0, 4); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; + SetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_POKEBALL, (const void*) &gLastUsedItem); + if (CalculatePlayerPartyCount() == 6) + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else //poke may be caught, calculate shakes + { + u8 shakes; + odds = Sqrt(Sqrt(16711680 / odds)); + odds = 1048560 / odds; + 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); + MarkBufferBankForExecution(gActiveBank); + if (shakes == 4) //poke caught, copy of the code above + { + gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; + SetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_POKEBALL, (const void*) &gLastUsedItem); + if (CalculatePlayerPartyCount() == 6) + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else //rip + { + gBattleCommunication[MULTISTRING_CHOOSER] = shakes; + gBattlescriptCurrInstr = BattleScript_ShakeBallThrow; + } + } + } +} + +static void atkF0_copy_caught_poke(void) +{ + GiveMonToPlayer(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]); + gBattleResults.caughtPoke = gBattleMons[gBankAttacker ^ 1].species; + GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, gBattleResults.caughtNick); + gBattlescriptCurrInstr++; +} + +static void atkF1_setpoke_as_caught(void) +{ + if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + else + { + GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 3); + if (gBattleMons[gBankTarget].species == SPECIES_UNOWN) + gSaveBlock2.pokedex.unownPersonality = gBattleMons[gBankTarget].personality; + if (gBattleMons[gBankTarget].species == SPECIES_SPINDA) //else if + gSaveBlock2.pokedex.spindaPersonality = gBattleMons[gBankTarget].personality; + gBattlescriptCurrInstr += 5; + } +} + +extern const u32 gBattleTerrainTiles_Building[]; +extern const u32 gBattleTerrainTilemap_Building[]; +extern const u32 gBattleTerrainPalette_BattleTower[]; + +static void atkF2_display_dex_info(void) +{ + switch (gBattleCommunication[0]) + { + case 0: + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gBattleCommunication[0]++; + break; + case 1: + if (!gPaletteFade.active) + { + gBattleCommunication[1] = sub_809070C(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), gBattleMons[gBankTarget].otId, gBattleMons[gBankTarget].personality); + gBattleCommunication[0]++; + } + break; + case 2: + if (!gPaletteFade.active && gMain.callback2 == sub_800F808 && !gTasks[gBattleCommunication[1]].isActive) + { + LZDecompressVram(gBattleTerrainTiles_Building, (void*)(0x06008000)); + LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(0x0600d000)); + LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60); + REG_BG3CNT = 0x5a0b; + gUnknown_030041B0 = 0x100; + BeginNormalPaletteFade(0xfffc, 0, 0x10, 0, 0); + gBattleCommunication[0]++; + } + break; + case 3: + if (!gPaletteFade.active) + gBattlescriptCurrInstr++; + break; + } +} + +__attribute__((naked)) +void sub_802BBD4(u8 r0, u8 r1, u8 r2, u8 r3, u8 sp0) +{ + 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 r4, [sp, 0x20]\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r12, r1\n\ + lsls r2, 24\n\ + lsrs r5, r2, 24\n\ + lsls r3, 24\n\ + lsrs r7, r3, 24\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + mov r8, r4\n\ + mov r2, r12\n\ + cmp r2, r7\n\ + bgt _0802BC5A\n\ + lsls r1, r6, 1\n\ + ldr r0, _0802BC20 @ =0x0600c000\n\ + adds r1, r0\n\ + mov r9, r1\n\ +_0802BC06:\n\ + adds r1, r6, 0\n\ + adds r0, r2, 0x1\n\ + mov r10, r0\n\ + cmp r1, r5\n\ + bgt _0802BC54\n\ + lsls r0, r2, 6\n\ + mov r4, r9\n\ + adds r3, r4, r0\n\ +_0802BC16:\n\ + cmp r2, r12\n\ + bne _0802BC28\n\ + ldr r0, _0802BC24 @ =0x00001022\n\ + b _0802BC36\n\ + .align 2, 0\n\ +_0802BC20: .4byte 0x0600c000\n\ +_0802BC24: .4byte 0x00001022\n\ +_0802BC28:\n\ + cmp r2, r7\n\ + bne _0802BC34\n\ + ldr r0, _0802BC30 @ =0x00001028\n\ + b _0802BC36\n\ + .align 2, 0\n\ +_0802BC30: .4byte 0x00001028\n\ +_0802BC34:\n\ + ldr r0, _0802BC68 @ =0x00001025\n\ +_0802BC36:\n\ + cmp r1, r6\n\ + beq _0802BC42\n\ + adds r0, 0x1\n\ + cmp r1, r5\n\ + bne _0802BC42\n\ + adds r0, 0x1\n\ +_0802BC42:\n\ + mov r4, r8\n\ + cmp r4, 0\n\ + beq _0802BC4A\n\ + movs r0, 0\n\ +_0802BC4A:\n\ + strh r0, [r3]\n\ + adds r3, 0x2\n\ + adds r1, 0x1\n\ + cmp r1, r5\n\ + ble _0802BC16\n\ +_0802BC54:\n\ + mov r2, r10\n\ + cmp r2, r7\n\ + ble _0802BC06\n\ +_0802BC5A:\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\ +_0802BC68: .4byte 0x00001025\n\ + .syntax divided"); +} + +void sub_802BC6C(void) +{ + sub_814A880(0xC8, ((gBattleCommunication[1] << 28) + 1207959552) >> 24); //what could that be? +} + +void nullsub_6(void) +{ + return; +} + +static void atkF3_nickname_caught_poke(void) +{ + switch (gBattleCommunication[0]) + { + case 0: + sub_8023A80(); + gBattleCommunication[0]++; + gBattleCommunication[1] = 0; + sub_802BC6C(); + break; + case 1: + if (gMain.newKeys & DPAD_UP && gBattleCommunication[1] != 0) + { + PlaySE(SE_SELECT); + nullsub_6(); + gBattleCommunication[1] = 0; + sub_802BC6C(); + } + if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[1] == 0) + { + PlaySE(SE_SELECT); + nullsub_6(); + gBattleCommunication[1] = 1; + sub_802BC6C(); + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gBattleCommunication[1] == 0) + { + gBattleCommunication[0]++; + BeginFastPaletteFade(3); + } + else + gBattleCommunication[0] = 4; + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gBattleCommunication[0] = 4; + } + break; + case 2: + if (!gPaletteFade.active) + { + GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); + DoNamingScreen(2, BATTLE_STRUCT->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), sub_800F808); + gBattleCommunication[0]++; + } + break; + case 3: + if (gMain.callback2 == sub_800F808 && !gPaletteFade.active ) + { + SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + } + break; + case 4: + if (CalculatePlayerPartyCount() == 6) + gBattlescriptCurrInstr += 5; + else + gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + break; + } +} + +static void atkF4_802BEF0(void) +{ + gBattleMons[gBankAttacker].hp -= gBattleMoveDamage; + gBattlescriptCurrInstr++; +} + +static void atkF5_removeattackerstatus1(void) +{ + gBattleMons[gBankAttacker].status1 = 0; + gBattlescriptCurrInstr++; +} + +static void atkF6_802BF48(void) +{ + gFightStateTracker = 0xC; +} + +static void atkF7_802BF54(void) +{ + gFightStateTracker = 0xC; + gCurrentMoveTurn = gNoOfAllBanks; +} diff --git a/src/battle/battle_6.c b/src/battle/battle_6.c new file mode 100644 index 000000000..c833aef5e --- /dev/null +++ b/src/battle/battle_6.c @@ -0,0 +1,1507 @@ +#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 sub_80318FC(); +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 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); + +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) +{ + 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 sub_802FE7C(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 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].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 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); + 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 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/battle_7.c b/src/battle/battle_7.c new file mode 100644 index 000000000..f2838467e --- /dev/null +++ b/src/battle/battle_7.c @@ -0,0 +1,1235 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_interface.h" +#include "blend_palette.h" +#include "data2.h" +#include "decompress.h" +#include "main.h" +#include "m4a.h" +#include "palette.h" +#include "pokemon.h" +#include "rom_8077ABC.h" +#include "rom_8094928.h" +#include "songs.h" +#include "sound.h" +#include "species.h" +#include "sprite.h" +#include "task.h" +#include "text.h" +#include "gba/m4a_internal.h" + +struct Struct2019348 +{ + u8 filler0[2]; + u16 unk2; + u8 filler4[4]; + u32 unk8; + u32 unkC; + u32 unk10; +}; + +extern u8 gBattleBufferA[][0x200]; +extern u8 gActiveBank; +extern u32 gBattleExecBuffer; +extern u8 gNoOfAllBanks; +extern u16 gBattlePartyID[]; +extern u8 gBanksBySide[]; +extern u8 gObjectBankIDs[]; +extern u16 gUnknown_02024DE8; +extern u8 gDoingBattleAnim; +extern u32 gPID_perBank[]; +extern struct Window gUnknown_03004210; +extern void (*gBattleBankFunc[])(void); +extern u8 gHealthboxIDs[]; +extern u8 gUnknown_0300434C[]; +extern struct MusicPlayerInfo gMPlay_SE1; +extern struct MusicPlayerInfo gMPlay_SE2; +extern struct MusicPlayerInfo gMPlay_BGM; +extern u32 gBitTable[]; +extern u16 gBattleTypeFlags; +extern u8 gBattleMonForms[]; +extern u8 gBattleAnimPlayerMonIndex; +extern u8 gBattleAnimEnemyMonIndex; +extern void (*gAnimScriptCallback)(void); +extern u8 gAnimScriptActive; +extern const u8 *const gBattleAnims_Unknown1[]; +extern const u8 *const gBattleAnims_Unknown2[]; +extern const struct CompressedSpriteSheet gTrainerFrontPicTable[]; +extern const struct MonCoords gTrainerFrontPicCoords[]; +extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; +extern const u8 gSubstituteDollTilemap[]; +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[]; +extern const struct CompressedSpriteSheet gUnknown_0820A49C[]; +extern const struct CompressedSpriteSheet gUnknown_0820A4AC; +extern const struct CompressedSpriteSheet gUnknown_0820A4B4[]; +extern const struct SpritePalette gUnknown_0820A4D4[]; +extern const u8 gUnknown_08D09C48[]; + +#define ewram19348 (*(struct Struct2019348 *)(ewram + 0x19348)) + +extern void c3_0802FDF4(u8); +extern void sub_80440EC(); +extern void sub_804777C(); +extern void sub_8141828(); +extern u8 sub_8077ABC(); +extern u8 sub_8078874(u8); +extern u8 sub_8077F68(u8); +extern u8 sub_8077F7C(u8); +extern void sub_8094958(void); +extern void sub_80105DC(struct Sprite *); +extern void move_anim_start_t2(); + +void sub_80315E8(u8); +u8 sub_803163C(u8); +void sub_80316CC(u8); +void sub_8031F0C(void); +void refresh_graphics_maybe(u8, u8, u8); +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) +{ + u8 spriteId = sprite->data1; + + if (gSprites[spriteId].affineAnimEnded && !gSprites[spriteId].invisible) + { + if (gSprites[spriteId].animPaused) + gSprites[spriteId].animPaused = FALSE; + else if (gSprites[spriteId].animEnded) + { + gSprites[spriteId].callback = sub_80105DC; + StartSpriteAffineAnim(&gSprites[spriteId], 0); + sprite->callback = SpriteCallbackDummy; + } + } +} + +void unref_sub_8031364(struct Sprite *sprite, bool8 stupid) +{ + sprite->animPaused = TRUE; + sprite->callback = SpriteCallbackDummy; + if (!stupid) + StartSpriteAffineAnim(sprite, 1); + else + StartSpriteAffineAnim(sprite, 1); + AnimateSprite(sprite); +} + +void sub_80313A0(struct Sprite *sprite) +{ + if (!(gUnknown_02024DE8 & 1)) + { + sprite->pos2.x += sprite->data0; + if (sprite->pos2.x == 0) + sprite->callback = SpriteCallbackDummy; + } +} + +void move_anim_start_t2_for_situation(u8 a, u32 b) +{ + ewram17810[gActiveBank].unk0_4 = 1; + if (a == 0) + { + if (b == 0x20) + move_anim_start_t2(gActiveBank, 6); + else if (b == 8 || (b & 0x80)) + move_anim_start_t2(gActiveBank, 0); + else if (b == 0x10) + move_anim_start_t2(gActiveBank, 2); + else if (b & 7) + move_anim_start_t2(gActiveBank, 4); + else if (b == 0x40) + move_anim_start_t2(gActiveBank, 5); + else + ewram17810[gActiveBank].unk0_4 = 0; + } + else + { + if (b & 0x000F0000) + move_anim_start_t2(gActiveBank, 3); + else if (b & 7) + move_anim_start_t2(gActiveBank, 1); + else if (b & 0x10000000) + move_anim_start_t2(gActiveBank, 7); + else if (b & 0x08000000) + move_anim_start_t2(gActiveBank, 8); + else if (b & 0x0000E000) + move_anim_start_t2(gActiveBank, 9); + else + ewram17810[gActiveBank].unk0_4 = 0; + } +} + +bool8 move_anim_start_t3(u8 a, u8 b, u8 c, u8 d, u16 e) +{ + u8 taskId; + + if (d == 0 && (e & 0x80)) + { + gBattleMonForms[a] = e & 0x7F; + return TRUE; + } + if (ewram17800[a].unk0_2 && sub_803163C(d) == 0) + return TRUE; + if (ewram17800[a].unk0_2 && d == 2 && gSprites[gObjectBankIDs[a]].invisible) + { + refresh_graphics_maybe(a, 1, gObjectBankIDs[a]); + sub_80324E0(a); + return TRUE; + } + gBattleAnimPlayerMonIndex = b; + gBattleAnimEnemyMonIndex = c; + ewram17840.unk0 = e; + DoMoveAnim(gBattleAnims_Unknown1, d, 0); + taskId = CreateTask(sub_80315E8, 10); + gTasks[taskId].data[0] = a; + ewram17810[gTasks[taskId].data[0]].unk0_5 = 1; + return FALSE; +} + +void sub_80315E8(u8 taskId) +{ + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + ewram17810[gTasks[taskId].data[0]].unk0_5 = 0; + DestroyTask(taskId); + } +} + +u8 sub_803163C(u8 a) +{ + switch (a) + { + case 2: + case 10: + case 11: + case 12: + case 13: + case 17: + return 1; + default: + return 0; + } +} + +void move_anim_start_t4(u8 a, u8 b, u8 c, u8 d) +{ + u8 taskId; + + gBattleAnimPlayerMonIndex = b; + gBattleAnimEnemyMonIndex = c; + DoMoveAnim(gBattleAnims_Unknown2, d, 0); + taskId = CreateTask(sub_80316CC, 10); + gTasks[taskId].data[0] = a; + ewram17810[gTasks[taskId].data[0]].unk0_6 = 1; +} + +void sub_80316CC(u8 taskId) +{ + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + ewram17810[gTasks[taskId].data[0]].unk0_6 = 0; + DestroyTask(taskId); + } +} + +u8 sub_8031720(int unused1, int unused2) +{ + return 0; +} + +bool8 mplay_80342A4(u8 a) +{ + u8 zero = 0; + + if (IsSEPlaying()) + { + ewram17810[a].unk8++; + if (ewram17810[gActiveBank].unk8 < 30) + return TRUE; + m4aMPlayStop(&gMPlay_SE1); + m4aMPlayStop(&gMPlay_SE2); + } + if (zero == 0) + { + ewram17810[a].unk8 = 0; + return FALSE; + } + return TRUE; +} + +void sub_8031794(struct Pokemon *pkmn, u8 b) +{ + u32 personalityValue; + u16 species; + u32 r7; + u32 otId; + u8 var; + u16 paletteOffset; + const u8 *lzPaletteData; + + personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); + if (ewram17800[b].unk2 == 0) + { + species = GetMonData(pkmn, MON_DATA_SPECIES); + r7 = personalityValue; + } + else + { + species = ewram17800[b].unk2; + r7 = gPID_perBank[b]; + } + otId = GetMonData(pkmn, MON_DATA_OT_ID); + var = GetBankIdentity(b); + HandleLoadSpecialPokePic( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].coords, + gMonFrontPicCoords[species].y_offset, + 0x02000000, + gUnknown_081FAF4C[var], + species, + 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 + b * 16, 0x20); + if (species == SPECIES_CASTFORM) + { + paletteOffset = 0x100 + b * 16; + sub_800D238(lzPaletteData, ewram + 0x16400); + LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); + } + if (ewram17800[b].unk2 != 0) + { + BlendPalette(paletteOffset, 16, 6, 0x7FFF); + CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); + } +} + +void sub_80318FC(struct Pokemon *pkmn, u8 b) +{ + u32 personalityValue; + u16 species; + u32 r7; + u32 otId; + u8 var; + u16 paletteOffset; + const u8 *lzPaletteData; + + personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); + if (ewram17800[b].unk2 == 0) + { + species = GetMonData(pkmn, MON_DATA_SPECIES); + r7 = personalityValue; + } + else + { + species = ewram17800[b].unk2; + r7 = gPID_perBank[b]; + } + otId = GetMonData(pkmn, MON_DATA_OT_ID); + var = GetBankIdentity(b); + HandleLoadSpecialPokePic( + &gMonBackPicTable[species], + gMonBackPicCoords[species].coords, + gMonBackPicCoords[species].y_offset, + 0x02000000, + gUnknown_081FAF4C[var], + species, + 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 + b * 16, 0x20); + if (species == SPECIES_CASTFORM) + { + paletteOffset = 0x100 + b * 16; + sub_800D238(lzPaletteData, ewram + 0x16400); + LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); + } + if (ewram17800[b].unk2 != 0) + { + BlendPalette(paletteOffset, 16, 6, 0x7FFF); + CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); + } +} + +void unref_sub_8031A64(void) +{ +} + +void nullsub_9(u16 unused) +{ +} + +void sub_8031A6C(u16 a, u8 b) +{ + u8 status; + struct CompressedSpriteSheet spriteSheet; + + status = GetBankIdentity(b); + DecompressPicFromTable_2( + &gTrainerFrontPicTable[a], + gTrainerFrontPicCoords[a].coords, + gTrainerFrontPicCoords[a].y_offset, + (void *)0x02000000, + gUnknown_081FAF4C[status], + 0); + spriteSheet.data = gUnknown_081FAF4C[status]; + spriteSheet.size = gTrainerFrontPicTable[a].size; + spriteSheet.tag = gTrainerFrontPicTable[a].tag; + LoadCompressedObjectPic(&spriteSheet); + LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[a]); +} + +void sub_8031AF4(u16 a, u8 b) +{ + u8 status; + + status = GetBankIdentity(b); + DecompressPicFromTable_2( + &gTrainerBackPicTable[a], + gTrainerBackPicCoords[a].coords, + gTrainerBackPicCoords[a].y_offset, + (void *)0x02000000, + gUnknown_081FAF4C[status], + 0); + LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + b * 16, 32); +} + +void nullsub_10(int unused) +{ +} + +void sub_8031B74(u16 a) +{ + FreeSpritePaletteByTag(gTrainerFrontPicPaletteTable[a].tag); + FreeSpriteTilesByTag(gTrainerFrontPicTable[a].tag); +} + +void unref_sub_8031BA0(void) +{ + u8 count; + u8 i; + + LoadSpritePalette(&gUnknown_0820A4D4[0]); + LoadSpritePalette(&gUnknown_0820A4D4[1]); + if (!IsDoubleBattle()) + { + LoadCompressedObjectPic(&gUnknown_0820A47C); + LoadCompressedObjectPic(&gUnknown_0820A484); + count = 2; + } + else + { + LoadCompressedObjectPic(&gUnknown_0820A48C[0]); + LoadCompressedObjectPic(&gUnknown_0820A48C[1]); + LoadCompressedObjectPic(&gUnknown_0820A49C[0]); + LoadCompressedObjectPic(&gUnknown_0820A49C[1]); + count = 4; + } + for (i = 0; i < count; i++) + LoadCompressedObjectPic(&gUnknown_0820A4B4[gBanksBySide[i]]); +} + +bool8 sub_8031C30(u8 a) +{ + bool8 retVal = FALSE; + + if (a != 0) + { + if (a == 1) + { + LoadSpritePalette(&gUnknown_0820A4D4[0]); + LoadSpritePalette(&gUnknown_0820A4D4[1]); + } + else if (!IsDoubleBattle()) + { + if (a == 2) + { + if (gBattleTypeFlags & 0x80) + LoadCompressedObjectPic(&gUnknown_0820A4AC); + else + LoadCompressedObjectPic(&gUnknown_0820A47C); + } + else if (a == 3) + LoadCompressedObjectPic(&gUnknown_0820A484); + else if (a == 4) + LoadCompressedObjectPic(&gUnknown_0820A4B4[gBanksBySide[0]]); + else if (a == 5) + LoadCompressedObjectPic(&gUnknown_0820A4B4[gBanksBySide[1]]); + else + retVal = TRUE; + } + else + { + if (a == 2) + LoadCompressedObjectPic(&gUnknown_0820A48C[0]); + else if (a == 3) + LoadCompressedObjectPic(&gUnknown_0820A48C[1]); + else if (a == 4) + LoadCompressedObjectPic(&gUnknown_0820A49C[0]); + else if (a == 5) + LoadCompressedObjectPic(&gUnknown_0820A49C[1]); + else if (a == 6) + LoadCompressedObjectPic(&gUnknown_0820A4B4[gBanksBySide[0]]); + else if (a == 7) + LoadCompressedObjectPic(&gUnknown_0820A4B4[gBanksBySide[1]]); + else if (a == 8) + LoadCompressedObjectPic(&gUnknown_0820A4B4[gBanksBySide[2]]); + else if (a == 9) + LoadCompressedObjectPic(&gUnknown_0820A4B4[gBanksBySide[3]]); + else + retVal = TRUE; + } + } + return retVal; +} + +void load_gfxc_health_bar(void) +{ + sub_800D238(gUnknown_08D09C48, (void *)0x02000000); +} + +u8 battle_load_something(u8 *pState, u8 *b) +{ + bool8 retVal = FALSE; + + switch (*pState) + { + case 0: + sub_8031F0C(); + (*pState)++; + break; + case 1: + if (sub_8031C30(*b) == 0) + { + (*b)++; + } + else + { + *b = 0; + (*pState)++; + } + break; + case 2: + (*pState)++; + break; + case 3: + if ((gBattleTypeFlags & 0x80) && *b == 0) + gHealthboxIDs[*b] = battle_make_oam_safari_battle(); + else + gHealthboxIDs[*b] = battle_make_oam_normal_battle(*b); + (*b)++; + if (*b == gNoOfAllBanks) + { + *b = 0; + (*pState)++; + } + break; + case 4: + sub_8043F44(*b); + if (gBanksBySide[*b] <= 1) + nullsub_11(gHealthboxIDs[*b], 0); + else + nullsub_11(gHealthboxIDs[*b], 1); + (*b)++; + if (*b == gNoOfAllBanks) + { + *b = 0; + (*pState)++; + } + break; + case 5: + if (GetBankSide(*b) == 0) + { + if (!(gBattleTypeFlags & 0x80)) + sub_8045A5C(gHealthboxIDs[*b], &gPlayerParty[gBattlePartyID[*b]], 0); + } + else + { + sub_8045A5C(gHealthboxIDs[*b], &gEnemyParty[gBattlePartyID[*b]], 0); + } + sub_8043DB0(gHealthboxIDs[*b]); + (*b)++; + if (*b == gNoOfAllBanks) + { + *b = 0; + (*pState)++; + } + break; + case 6: + sub_80327CC(); + sub_8094958(); + retVal = TRUE; + break; + } + return retVal; +} + +void sub_8031EE8(void) +{ + memset(ewram17810, 0, 0x30); + memset(&ewram17840, 0, 0x10); +} + +void sub_8031F0C(void) +{ + sub_8031EE8(); + memset(ewram17800, 0, 0x10); +} + +void sub_8031F24(void) +{ + s32 i; + + for (i = 0; i < gNoOfAllBanks; i++) + ewram17800[i].unk0_0 = gSprites[gObjectBankIDs[i]].invisible; +} + +void sub_8031F88(u8 a) +{ + ewram17800[a].unk0_0 = gSprites[gObjectBankIDs[a]].invisible; +} + +void sub_8031FC4(u8 a, u8 b, bool8 c) +{ + u16 paletteOffset; + u16 species; + u32 personalityValue; + u32 otId; + u8 r10; + const u8 *lzPaletteData; + + if (c) + { + StartSpriteAnim(&gSprites[gObjectBankIDs[a]], ewram17840.unk0); + paletteOffset = 0x100 + a * 16; + LoadPalette(ewram + 0x16400 + ewram17840.unk0 * 32, paletteOffset, 32); + gBattleMonForms[a] = ewram17840.unk0; + if (ewram17800[a].unk2 != 0) + { + BlendPalette(paletteOffset, 16, 6, 0x7FFF); + CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); + } + gSprites[gObjectBankIDs[a]].pos1.y = sub_8077F68(a); + } + else + { + const void *src; + void *dst; + + if (IsContest()) + { + r10 = 0; + species = ewram19348.unk2; + personalityValue = ewram19348.unk8; + otId = ewram19348.unkC; + HandleLoadSpecialPokePic( + &gMonBackPicTable[species], + gMonBackPicCoords[species].coords, + gMonBackPicCoords[species].y_offset, + 0x02000000, + gUnknown_081FAF4C[0], + species, + ewram19348.unk10); + } + else + { + r10 = GetBankIdentity(a); + if (GetBankSide(b) == 1) + species = GetMonData(&gEnemyParty[gBattlePartyID[b]], MON_DATA_SPECIES); + else + species = GetMonData(&gPlayerParty[gBattlePartyID[b]], MON_DATA_SPECIES); + if (GetBankSide(a) == 0) + { + personalityValue = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_PERSONALITY); + otId = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_OT_ID); + HandleLoadSpecialPokePic( + &gMonBackPicTable[species], + gMonBackPicCoords[species].coords, + gMonBackPicCoords[species].y_offset, + 0x02000000, + gUnknown_081FAF4C[r10], + species, + gPID_perBank[a]); + } + else + { + personalityValue = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_PERSONALITY); + otId = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_OT_ID); + HandleLoadSpecialPokePic( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].coords, + gMonFrontPicCoords[species].y_offset, + 0x02000000, + gUnknown_081FAF4C[r10], + species, + gPID_perBank[a]); + } + } + src = gUnknown_081FAF4C[r10]; + dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[a]].oam.tileNum * 32); + DmaCopy32(3, src, dst, 0x800); + paletteOffset = 0x100 + a * 16; + lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue); + sub_800D238(lzPaletteData, ewram); + LoadPalette(ewram, paletteOffset, 32); + if (species == SPECIES_CASTFORM) + { + u16 *paletteSrc = (u16 *)(ewram + 0x16400); + + sub_800D238(lzPaletteData, paletteSrc); + LoadPalette(paletteSrc + gBattleMonForms[b] * 16, paletteOffset, 32); + } + BlendPalette(paletteOffset, 16, 6, 0x7FFF); + CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); + if (!IsContest()) + { + ewram17800[a].unk2 = species; + gBattleMonForms[a] = gBattleMonForms[b]; + } + gSprites[gObjectBankIDs[a]].pos1.y = sub_8077F68(a); + StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); + } +} + +void sub_8032350(u8 a, u8 b) +{ + u8 r4; + u16 foo; + const u8 *gSubstituteDollPal_; + void *src; + s32 i; + + if (b == 0) + { + if (IsContest()) + r4 = 0; + else + r4 = GetBankIdentity(a); + if (IsContest()) + LZDecompressVram(gSubstituteDollTilemap, gUnknown_081FAF4C[r4]); + else if (GetBankSide(a) != 0) + LZDecompressVram(gSubstituteDollGfx, gUnknown_081FAF4C[r4]); + else + LZDecompressVram(gSubstituteDollTilemap, gUnknown_081FAF4C[r4]); + // There is probably a way to do this without all the temp variables, but I couldn't figure it out. + foo = a * 16; + gSubstituteDollPal_ = gSubstituteDollPal; + src = gUnknown_081FAF4C[r4]; + for (i = 0; i < 3; i++) + DmaCopy32(3, src, src + i * 0x800 + 0x800, 0x800); + LoadCompressedPalette(gSubstituteDollPal_, 0x100 + foo, 32); + } + else + { + if (!IsContest()) + { + if (GetBankSide(a) != 0) + sub_8031794(&gEnemyParty[gBattlePartyID[a]], a); + else + sub_80318FC(&gPlayerParty[gBattlePartyID[a]], a); + } + } +} + +void refresh_graphics_maybe(u8 a, u8 b, u8 spriteId) +{ + sub_8032350(a, b); + StartSpriteAnim(&gSprites[spriteId], gBattleMonForms[a]); + if (b == 0) + gSprites[spriteId].pos1.y = sub_8077F7C(a); + else + gSprites[spriteId].pos1.y = sub_8077F68(a); +} + +void sub_80324BC(u8 a, u16 b) +{ + if (b == 0xA4) + ewram17800[a].unk0_2 = 1; +} + +void sub_80324E0(u8 a) +{ + ewram17800[a].unk0_2 = 0; +} + +void sub_80324F8(struct Pokemon *pkmn, u8 b) +{ + u16 hp = GetMonData(pkmn, MON_DATA_HP); + u16 maxHP = GetMonData(pkmn, MON_DATA_MAX_HP); + + if (GetHPBarLevel(hp, maxHP) == 1) + { + if (!ewram17800[b].unk0_1) + { + if (!ewram17800[b ^ 2].unk0_1) + PlaySE(SE_HINSI); + ewram17800[b].unk0_1 = 1; + } + } + else + { + ewram17800[b].unk0_1 = 0; + if (!IsDoubleBattle()) + { + m4aSongNumStop(SE_HINSI); + return; + } + if (IsDoubleBattle() && !ewram17800[b ^ 2].unk0_1) + { + m4aSongNumStop(SE_HINSI); + return; + } + } +} + +void BattleMusicStop(void) +{ + u8 r4 = GetBankByPlayerAI(0); + + ewram17800[r4].unk0_1 = 0; + if (IsDoubleBattle()) + ewram17800[r4 ^ 2].unk0_1 = 0; + m4aSongNumStop(SE_HINSI); +} + +u8 unref_sub_8032604(struct Pokemon *pkmn) +{ + u16 hp = GetMonData(pkmn, MON_DATA_HP); + u16 maxHP = GetMonData(pkmn, MON_DATA_MAX_HP); + + return GetHPBarLevel(hp, maxHP); +} + +void sub_8032638(void) +{ + if (gMain.inBattle) + { + u8 r8 = GetBankByPlayerAI(0); + u8 r9 = GetBankByPlayerAI(2); + u8 r4 = pokemon_order_func(gBattlePartyID[r8]); + u8 r5 = pokemon_order_func(gBattlePartyID[r9]); + + if (GetMonData(&gPlayerParty[r4], MON_DATA_HP) != 0) + sub_80324F8(&gPlayerParty[r4], r8); + if (IsDoubleBattle()) + { + if (GetMonData(&gPlayerParty[r5], MON_DATA_HP) != 0) + sub_80324F8(&gPlayerParty[r5], r9); + } + } +} + +void sub_80326EC(u8 a) +{ + s32 i; + + for (i = 0; i < gNoOfAllBanks; i++) + { + if (sub_8078874(i) != 0) + { + gSprites[gObjectBankIDs[i]].oam.affineMode = a; + if (a == 0) + { + ewram17810[i].unk6 = gSprites[gObjectBankIDs[i]].oam.matrixNum; + gSprites[gObjectBankIDs[i]].oam.matrixNum = 0; + } + else + { + gSprites[gObjectBankIDs[i]].oam.matrixNum = ewram17810[i].unk6; + } + } + } +} + +void sub_80327CC(void) +{ + u8 r5; + + LoadCompressedObjectPic(&gUnknown_081FAF24); + r5 = GetBankByPlayerAI(1); + ewram17810[r5].unk7 = CreateSprite(&gSpriteTemplate_81FAF34, sub_8077ABC(r5, 0), sub_8077ABC(r5, 1) + 32, 0xC8); + gSprites[ewram17810[r5].unk7].data0 = r5; + if (IsDoubleBattle()) + { + r5 = GetBankByPlayerAI(3); + ewram17810[r5].unk7 = CreateSprite(&gSpriteTemplate_81FAF34, sub_8077ABC(r5, 0), sub_8077ABC(r5, 1) + 32, 0xC8); + gSprites[ewram17810[r5].unk7].data0 = r5; + } +} + +void sub_80328A4(struct Sprite *sprite) +{ + bool8 invisible = FALSE; + u8 r4 = sprite->data0; + struct Sprite *r7 = &gSprites[gObjectBankIDs[r4]]; + + if (!r7->inUse || sub_8078874(r4) == 0) + { + sprite->callback = sub_8032978; + return; + } + if (gAnimScriptActive || r7->invisible) + invisible = TRUE; + else if (ewram17800[r4].unk2 != 0 && gEnemyMonElevation[ewram17800[r4].unk2] == 0) + invisible = TRUE; + if (ewram17800[r4].unk0_2) + invisible = TRUE; + sprite->pos1.x = r7->pos1.x; + sprite->pos2.x = r7->pos2.x; + sprite->invisible = invisible; +} + +void sub_8032978(struct Sprite *sprite) +{ + sprite->invisible = TRUE; +} + +void sub_8032984(u8 a, u16 b) +{ + if (GetBankSide(a) != 0) + { + if (ewram17800[a].unk2 != 0) + b = ewram17800[a].unk2; + if (gEnemyMonElevation[b] != 0) + gSprites[ewram17810[a].unk7].callback = sub_80328A4; + else + gSprites[ewram17810[a].unk7].callback = sub_8032978; + } +} + +void sub_8032A08(u8 a) +{ + gSprites[ewram17810[a].unk7].callback = sub_8032978; +} + +void sub_8032A38(void) +{ + u16 *ptr = (u16 *)(VRAM + 0x240); + s32 i; + s32 j; + + for (i = 0; i < 9; i++) + { + for (j = 0; j < 16; j++) + { + if (!(*ptr & 0xF000)) + *ptr |= 0xF000; + if (!(*ptr & 0x0F00)) + *ptr |= 0x0F00; + if (!(*ptr & 0x00F0)) + *ptr |= 0x00F0; + if (!(*ptr & 0x000F)) + *ptr |= 0x000F; + ptr++; + } + } +} + +void sub_8032AA8(u8 a, u8 b) +{ + 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].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]; +} diff --git a/src/battle/battle_8.c b/src/battle/battle_8.c new file mode 100644 index 000000000..75f10c4b1 --- /dev/null +++ b/src/battle/battle_8.c @@ -0,0 +1,1642 @@ +#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 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); +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); + + 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 sub_8035030(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 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].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 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/battle_811DA74.c b/src/battle/battle_811DA74.c new file mode 100644 index 000000000..36a287efc --- /dev/null +++ b/src/battle/battle_811DA74.c @@ -0,0 +1,1606 @@ +#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 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); + +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].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; + } + } + 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) +{ + 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 sub_811F7F4(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 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].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 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; + } + 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 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].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 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].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 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]; + sub_80318FC(&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/battle_ai.c b/src/battle/battle_ai.c new file mode 100644 index 000000000..a1cb805d9 --- /dev/null +++ b/src/battle/battle_ai.c @@ -0,0 +1,2150 @@ +#include "global.h" +#include "battle_ai.h" +#include "abilities.h" +#include "battle.h" +#include "battle_move_effects.h" +#include "data2.h" +#include "item.h" +#include "moves.h" +#include "pokemon.h" +#include "rng.h" +#include "rom_8077ABC.h" +#include "species.h" +#include "util.h" + +extern u16 gBattleTypeFlags; +extern u16 gBattleWeather; +extern u8 gActiveBank; +extern u16 gBattlePartyID[MAX_BANKS_BATTLE]; +extern u16 gCurrentMove; +extern int gBattleMoveDamage; +extern u8 gBankAttacker; +extern u8 gBankTarget; +extern u8 gAbsentBankFlags; +extern u8 gBattleMoveFlags; +extern u16 gDynamicBasePower; +extern u16 gLastUsedMove[MAX_BANKS_BATTLE]; +extern u32 gStatuses3[MAX_BANKS_BATTLE]; +extern u16 gSideAffecting[2]; +extern struct BattlePokemon gBattleMons[MAX_BANKS_BATTLE]; +extern u8 gCritMultiplier; +extern u16 gTrainerBattleOpponent; +extern u8 *BattleAIs[]; + +enum +{ + WEATHER_TYPE_SUN, + WEATHER_TYPE_RAIN, + WEATHER_TYPE_SANDSTORM, + WEATHER_TYPE_HAIL, +}; + +/* +gAIScriptPtr is a pointer to the next battle AI cmd command to read. +when a command finishes processing, gAIScriptPtr is incremented by +the number of bytes that the current command had reserved for arguments +in order to read the next command correctly. refer to battle_ai_scripts.s for the +AI scripts. +*/ +EWRAM_DATA u8 *gAIScriptPtr = NULL; + +static void BattleAICmd_if_random_less_than(void); +static void BattleAICmd_if_random_greater_than(void); +static void BattleAICmd_if_random_equal(void); +static void BattleAICmd_if_random_not_equal(void); +static void BattleAICmd_score(void); +static void BattleAICmd_if_hp_less_than(void); +static void BattleAICmd_if_hp_more_than(void); +static void BattleAICmd_if_hp_equal(void); +static void BattleAICmd_if_hp_not_equal(void); +static void BattleAICmd_if_status(void); +static void BattleAICmd_if_not_status(void); +static void BattleAICmd_if_status2(void); +static void BattleAICmd_if_not_status2(void); +static void BattleAICmd_if_status3(void); +static void BattleAICmd_if_not_status3(void); +static void BattleAICmd_if_status4(void); +static void BattleAICmd_if_not_status4(void); +static void BattleAICmd_if_less_than(void); +static void BattleAICmd_if_more_than(void); +static void BattleAICmd_if_equal(void); +static void BattleAICmd_if_not_equal(void); +static void BattleAICmd_if_less_than_32(void); +static void BattleAICmd_if_more_than_32(void); +static void BattleAICmd_if_equal_32(void); +static void BattleAICmd_if_not_equal_32(void); +static void BattleAICmd_if_move(void); +static void BattleAICmd_if_not_move(void); +static void BattleAICmd_if_in_bytes(void); +static void BattleAICmd_if_not_in_bytes(void); +static void BattleAICmd_if_in_words(void); +static void BattleAICmd_if_not_in_words(void); +static void BattleAICmd_if_user_can_damage(void); +static void BattleAICmd_if_user_cant_damage(void); +static void BattleAICmd_get_turn_count(void); +static void BattleAICmd_get_type(void); +static void BattleAICmd_get_move_power(void); +static void BattleAICmd_is_most_powerful_move(void); +static void BattleAICmd_get_move(void); +static void BattleAICmd_if_arg_equal(void); +static void BattleAICmd_if_arg_not_equal(void); +static void BattleAICmd_if_would_go_first(void); +static void BattleAICmd_if_would_not_go_first(void); +static void BattleAICmd_nullsub_2A(void); +static void BattleAICmd_nullsub_2B(void); +static void BattleAICmd_count_alive_pokemon(void); +static void BattleAICmd_get_considered_move(void); +static void BattleAICmd_get_considered_move_effect(void); +static void BattleAICmd_get_ability(void); +static void BattleAICmd_get_highest_possible_damage(void); +static void BattleAICmd_if_damage_bonus(void); +static void BattleAICmd_nullsub_32(void); +static void BattleAICmd_nullsub_33(void); +static void BattleAICmd_if_status_in_party(void); +static void BattleAICmd_if_status_not_in_party(void); +static void BattleAICmd_get_weather(void); +static void BattleAICmd_if_effect(void); +static void BattleAICmd_if_not_effect(void); +static void BattleAICmd_if_stat_level_less_than(void); +static void BattleAICmd_if_stat_level_more_than(void); +static void BattleAICmd_if_stat_level_equal(void); +static void BattleAICmd_if_stat_level_not_equal(void); +static void BattleAICmd_if_can_faint(void); +static void BattleAICmd_if_cant_faint(void); +static void BattleAICmd_if_has_move(void); +static void BattleAICmd_if_dont_have_move(void); +static void BattleAICmd_if_move_effect(void); +static void BattleAICmd_if_not_move_effect(void); +static void BattleAICmd_if_last_move_did_damage(void); +static void BattleAICmd_if_encored(void); +static void BattleAICmd_flee(void); +static void BattleAICmd_if_random_100(void); +static void BattleAICmd_watch(void); +static void BattleAICmd_get_hold_effect(void); +static void BattleAICmd_get_gender(void); +static void BattleAICmd_is_first_turn(void); +static void BattleAICmd_get_stockpile_count(void); +static void BattleAICmd_is_double_battle(void); +static void BattleAICmd_get_used_item(void); +static void BattleAICmd_get_move_type_from_result(void); +static void BattleAICmd_get_move_power_from_result(void); +static void BattleAICmd_get_move_effect_from_result(void); +static void BattleAICmd_get_protect_count(void); +static void BattleAICmd_nullsub_52(void); +static void BattleAICmd_nullsub_53(void); +static void BattleAICmd_nullsub_54(void); +static void BattleAICmd_nullsub_55(void); +static void BattleAICmd_nullsub_56(void); +static void BattleAICmd_nullsub_57(void); +static void BattleAICmd_call(void); +static void BattleAICmd_jump(void); +static void BattleAICmd_end(void); +static void BattleAICmd_if_level_compare(void); +static void BattleAICmd_if_taunted(void); +static void BattleAICmd_if_not_taunted(void); + +typedef void (*BattleAICmdFunc)(void); + +static const BattleAICmdFunc sBattleAICmdTable[] = +{ + BattleAICmd_if_random_less_than, // 0x0 + BattleAICmd_if_random_greater_than, // 0x1 + BattleAICmd_if_random_equal, // 0x2 + BattleAICmd_if_random_not_equal, // 0x3 + BattleAICmd_score, // 0x4 + BattleAICmd_if_hp_less_than, // 0x5 + BattleAICmd_if_hp_more_than, // 0x6 + BattleAICmd_if_hp_equal, // 0x7 + BattleAICmd_if_hp_not_equal, // 0x8 + BattleAICmd_if_status, // 0x9 + BattleAICmd_if_not_status, // 0xA + BattleAICmd_if_status2, // 0xB + BattleAICmd_if_not_status2, // 0xC + BattleAICmd_if_status3, // 0xD + BattleAICmd_if_not_status3, // 0xE + BattleAICmd_if_status4, // 0xF + BattleAICmd_if_not_status4, // 0x10 + BattleAICmd_if_less_than, // 0x11 + BattleAICmd_if_more_than, // 0x12 + BattleAICmd_if_equal, // 0x13 + BattleAICmd_if_not_equal, // 0x14 + BattleAICmd_if_less_than_32, // 0x15 + BattleAICmd_if_more_than_32, // 0x16 + BattleAICmd_if_equal_32, // 0x17 + BattleAICmd_if_not_equal_32, // 0x18 + BattleAICmd_if_move, // 0x19 + BattleAICmd_if_not_move, // 0x1A + BattleAICmd_if_in_bytes, // 0x1B + BattleAICmd_if_not_in_bytes, // 0x1C + BattleAICmd_if_in_words, // 0x1D + BattleAICmd_if_not_in_words, // 0x1E + BattleAICmd_if_user_can_damage, // 0x1F + BattleAICmd_if_user_cant_damage, // 0x20 + BattleAICmd_get_turn_count, // 0x21 + BattleAICmd_get_type, // 0x22 + BattleAICmd_get_move_power, // 0x23 + BattleAICmd_is_most_powerful_move, // 0x24 + BattleAICmd_get_move, // 0x25 + BattleAICmd_if_arg_equal, // 0x26 + BattleAICmd_if_arg_not_equal, // 0x27 + BattleAICmd_if_would_go_first, // 0x28 + BattleAICmd_if_would_not_go_first, // 0x29 + BattleAICmd_nullsub_2A, // 0x2A + BattleAICmd_nullsub_2B, // 0x2B + BattleAICmd_count_alive_pokemon, // 0x2C + BattleAICmd_get_considered_move, // 0x2D + BattleAICmd_get_considered_move_effect, // 0x2E + BattleAICmd_get_ability, // 0x2F + BattleAICmd_get_highest_possible_damage, // 0x30 + BattleAICmd_if_damage_bonus, // 0x31 + BattleAICmd_nullsub_32, // 0x32 + BattleAICmd_nullsub_33, // 0x33 + BattleAICmd_if_status_in_party, // 0x34 + BattleAICmd_if_status_not_in_party, // 0x35 + BattleAICmd_get_weather, // 0x36 + BattleAICmd_if_effect, // 0x37 + BattleAICmd_if_not_effect, // 0x38 + BattleAICmd_if_stat_level_less_than, // 0x39 + BattleAICmd_if_stat_level_more_than, // 0x3A + BattleAICmd_if_stat_level_equal, // 0x3B + BattleAICmd_if_stat_level_not_equal, // 0x3C + BattleAICmd_if_can_faint, // 0x3D + BattleAICmd_if_cant_faint, // 0x3E + BattleAICmd_if_has_move, // 0x3F + BattleAICmd_if_dont_have_move, // 0x40 + BattleAICmd_if_move_effect, // 0x41 + BattleAICmd_if_not_move_effect, // 0x42 + BattleAICmd_if_last_move_did_damage, // 0x43 + BattleAICmd_if_encored, // 0x44 + BattleAICmd_flee, // 0x45 + BattleAICmd_if_random_100, // 0x46 + BattleAICmd_watch, // 0x47 + BattleAICmd_get_hold_effect, // 0x48 + BattleAICmd_get_gender, // 0x49 + BattleAICmd_is_first_turn, // 0x4A + BattleAICmd_get_stockpile_count, // 0x4B + BattleAICmd_is_double_battle, // 0x4C + BattleAICmd_get_used_item, // 0x4D + BattleAICmd_get_move_type_from_result, // 0x4E + BattleAICmd_get_move_power_from_result, // 0x4F + BattleAICmd_get_move_effect_from_result, // 0x50 + BattleAICmd_get_protect_count, // 0x51 + BattleAICmd_nullsub_52, // 0x52 + BattleAICmd_nullsub_53, // 0x53 + BattleAICmd_nullsub_54, // 0x54 + BattleAICmd_nullsub_55, // 0x55 + BattleAICmd_nullsub_56, // 0x56 + BattleAICmd_nullsub_57, // 0x57 + BattleAICmd_call, // 0x58 + BattleAICmd_jump, // 0x59 + BattleAICmd_end, // 0x5A + BattleAICmd_if_level_compare, // 0x5B + BattleAICmd_if_taunted, // 0x5C + BattleAICmd_if_not_taunted, // 0x5D +}; + +#ifdef NONMATCHING +static +#endif +const u16 sDiscouragedPowerfulMoveEffects[] = +{ + EFFECT_EXPLOSION, + EFFECT_DREAM_EATER, + EFFECT_RAZOR_WIND, + EFFECT_SKY_ATTACK, + EFFECT_RECHARGE, + EFFECT_SKULL_BASH, + EFFECT_SOLARBEAM, + EFFECT_SPIT_UP, + EFFECT_FOCUS_PUNCH, + EFFECT_SUPERPOWER, + EFFECT_ERUPTION, + EFFECT_OVERHEAT, + 0xFFFF +}; + +// if the AI is a Link battle, safari, battle tower, or ereader, it will ignore considering item uses. +void BattleAI_HandleItemUseBeforeAISetup(void) +{ + s32 i; + u8 *data = (u8 *)UNK_2016A00_STRUCT; + + for (i = 0; (u32)i < sizeof(struct UnkBattleStruct1); i++) + data[i] = 0; + + if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) + && gTrainerBattleOpponent != 0x400 + && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) + { + for (i = 0; i < MAX_TRAINER_ITEMS; i++) + { + if (gTrainers[gTrainerBattleOpponent].items[i] != 0) + { + UNK_2016A00_STRUCT->items[UNK_2016A00_STRUCT->numOfItems] = gTrainers[gTrainerBattleOpponent].items[i]; + UNK_2016A00_STRUCT->numOfItems++; + } + } + } + + BattleAI_SetupAIData(); +} + +void BattleAI_SetupAIData(void) +{ + s32 i; + u8 *data = (u8 *)AI_THINKING_STRUCT; + u8 r7; + + // clear AI data and set default move score to 100. strange that they didn't use memset here. + for (i = 0; (u32)i < sizeof(struct AI_ThinkingStruct); i++) + data[i] = 0; + for (i = 0; i < MAX_MON_MOVES; i++) + AI_THINKING_STRUCT->score[i] = 100; + + r7 = sub_8015A98(gActiveBank, 0, 0xFF); + + // probably sets up the moves to consider and ignores non-valid moves such as NO_MOVE or glitch moves. + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBitTable[i] & r7) + AI_THINKING_STRUCT->score[i] = 0; + + AI_THINKING_STRUCT->simulatedRNG[i] = 100 - (Random() % 16); + } + + // clear AI stack. + AI_STACK->size = 0; + gBankAttacker = gActiveBank; + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + gBankTarget = Random() & 2; // just pick somebody to target. + + if (gAbsentBankFlags & gBitTable[gBankTarget]) + gBankTarget ^= 2; + } + else + gBankTarget = gActiveBank ^ 1; + + // special AI flag cases. + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + AI_THINKING_STRUCT->aiFlags = 0x40000000; + else if (gBattleTypeFlags & BATTLE_TYPE_ROAMER) + AI_THINKING_STRUCT->aiFlags = 0x20000000; + else if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) + AI_THINKING_STRUCT->aiFlags = 0x80000000; +#ifdef GERMAN + else if (gBattleTypeFlags & 0x900 || gTrainerBattleOpponent == 0x400) + AI_THINKING_STRUCT->aiFlags = 7; +#endif + else // otherwise, just set aiFlags to whatever flags the trainer has set in their data. + AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent].aiFlags; +} + +u8 BattleAI_GetAIActionToUse(void) +{ + u8 currentMoveArray[MAX_MON_MOVES]; + u8 consideredMoveArray[MAX_MON_MOVES]; + u8 numOfBestMoves; + s32 i; + + sub_810745C(); + while (AI_THINKING_STRUCT->aiFlags != 0) + { + if (AI_THINKING_STRUCT->aiFlags & 1) + { + AI_THINKING_STRUCT->aiState = AIState_SettingUp; + BattleAI_DoAIProcessing(); + } + AI_THINKING_STRUCT->aiFlags >>= 1; + AI_THINKING_STRUCT->aiLogicId++; + AI_THINKING_STRUCT->movesetIndex = 0; + } + + // special flee or watch cases for safari. + if (AI_THINKING_STRUCT->aiAction & (AI_ACTION_FLEE)) // flee + return 4; + if (AI_THINKING_STRUCT->aiAction & (AI_ACTION_WATCH)) // watch + return 5; + + numOfBestMoves = 1; + currentMoveArray[0] = AI_THINKING_STRUCT->score[0]; + consideredMoveArray[0] = 0; + + for (i = 1; i < MAX_MON_MOVES; i++) + { + if (currentMoveArray[0] < AI_THINKING_STRUCT->score[i]) + { + numOfBestMoves = 1; + currentMoveArray[0] = AI_THINKING_STRUCT->score[i]; + consideredMoveArray[0] = i; + } + if (currentMoveArray[0] == AI_THINKING_STRUCT->score[i]) + { + currentMoveArray[numOfBestMoves] = AI_THINKING_STRUCT->score[i]; + consideredMoveArray[numOfBestMoves++] = i; + } + } + + return consideredMoveArray[Random() % numOfBestMoves]; // break any ties that exist. +} + +void BattleAI_DoAIProcessing(void) +{ + while (AI_THINKING_STRUCT->aiState != AIState_FinishedProcessing) + { + switch (AI_THINKING_STRUCT->aiState) + { + case AIState_DoNotProcess: //Needed to match. + break; + case AIState_SettingUp: + gAIScriptPtr = BattleAIs[AI_THINKING_STRUCT->aiLogicId]; // set the AI ptr. + if (gBattleMons[gBankAttacker].pp[AI_THINKING_STRUCT->movesetIndex] == 0) + { + AI_THINKING_STRUCT->moveConsidered = MOVE_NONE; // don't consider a move you have 0 PP for, idiot. + } + else + { + AI_THINKING_STRUCT->moveConsidered = gBattleMons[gBankAttacker].moves[AI_THINKING_STRUCT->movesetIndex]; + } + AI_THINKING_STRUCT->aiState++; + break; + case AIState_Processing: + if (AI_THINKING_STRUCT->moveConsidered != MOVE_NONE) + sBattleAICmdTable[*(u8 *)gAIScriptPtr](); // run AI command. + else + { + AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0; // definitely do not consider any move that has 0 PP. + AI_THINKING_STRUCT->aiAction |= AI_ACTION_DONE; + } + if (AI_THINKING_STRUCT->aiAction & AI_ACTION_DONE) + { + AI_THINKING_STRUCT->movesetIndex++; + if (AI_THINKING_STRUCT->movesetIndex < MAX_MON_MOVES && (AI_THINKING_STRUCT->aiAction & AI_ACTION_DO_NOT_ATTACK) == 0) + AI_THINKING_STRUCT->aiState = AIState_SettingUp; // as long as their are more moves to process, keep setting this to setup state. + else + AI_THINKING_STRUCT->aiState++; // done processing. + AI_THINKING_STRUCT->aiAction &= (AI_ACTION_FLEE | AI_ACTION_WATCH | AI_ACTION_DO_NOT_ATTACK | + AI_ACTION_UNK5 | AI_ACTION_UNK6 | AI_ACTION_UNK7 | AI_ACTION_UNK8); // disable AI_ACTION_DONE. + } + break; + } + } +} + +void sub_810745C(void) +{ + s32 i; + + for (i = 0; i < 8; i++) + { + if (UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i] == 0) + { + UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i] = gLastUsedMove[gBankTarget]; + return; + } + } +} + +void unref_sub_81074A0(u8 a) +{ + s32 i; + + for (i = 0; i < 8; i++) + UNK_2016A00_STRUCT->movesUsed[a / 2][i] = 0; +} + +void RecordAbilityBattle(u8 a, u8 b) +{ + if (GetBankSide(a) == 0) + UNK_2016A00_STRUCT->unk20[GetBankIdentity(a) & 1] = b; +} + +void RecordItemBattle(u8 a, u8 b) +{ + if (GetBankSide(a) == 0) + UNK_2016A00_STRUCT->unk22[GetBankIdentity(a) & 1] = b; +} + +static void BattleAICmd_if_random_less_than(void) +{ + if (Random() % 256 < gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_if_random_greater_than(void) +{ + if (Random() % 256 > gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_if_random_equal(void) +{ + if (Random() % 256 == gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_if_random_not_equal(void) +{ + if (Random() % 256 != gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_score(void) +{ + AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] += gAIScriptPtr[1]; // add the result to the array of the move consider's score. + + if (AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] < 0) // if the score is negative, flatten it to 0. + AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0; + + gAIScriptPtr += 2; // AI return. +} + +static void BattleAICmd_if_hp_less_than(void) +{ + u16 index; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) < gAIScriptPtr[2]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +static void BattleAICmd_if_hp_more_than(void) +{ + u16 index; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) > gAIScriptPtr[2]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +static void BattleAICmd_if_hp_equal(void) +{ + u16 index; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) == gAIScriptPtr[2]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +static void BattleAICmd_if_hp_not_equal(void) +{ + u16 index; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) != gAIScriptPtr[2]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +static void BattleAICmd_if_status(void) +{ + u16 index; + u32 arg; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + arg = AIScriptRead32(gAIScriptPtr + 2); + + if ((gBattleMons[index].status1 & arg) != 0) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +static void BattleAICmd_if_not_status(void) +{ + u16 index; + u32 arg; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + arg = AIScriptRead32(gAIScriptPtr + 2); + + if ((gBattleMons[index].status1 & arg) == 0) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +static void BattleAICmd_if_status2(void) +{ + u16 index; + u32 arg; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + arg = AIScriptRead32(gAIScriptPtr + 2); + + if ((gBattleMons[index].status2 & arg) != 0) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +static void BattleAICmd_if_not_status2(void) +{ + u16 index; + u32 arg; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + arg = AIScriptRead32(gAIScriptPtr + 2); + + if ((gBattleMons[index].status2 & arg) == 0) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +static void BattleAICmd_if_status3(void) +{ + u16 index; + u32 arg; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + arg = AIScriptRead32(gAIScriptPtr + 2); + + if ((gStatuses3[index] & arg) != 0) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +static void BattleAICmd_if_not_status3(void) +{ + u16 index; + u32 arg; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + arg = AIScriptRead32(gAIScriptPtr + 2); + + if ((gStatuses3[index] & arg) == 0) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +static void BattleAICmd_if_status4(void) +{ + u16 index; + u32 arg1, arg2; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + arg1 = GetBankIdentity(index) & 1; + arg2 = AIScriptRead32(gAIScriptPtr + 2); + + if ((gSideAffecting[arg1] & arg2) != 0) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +static void BattleAICmd_if_not_status4(void) +{ + u16 index; + u32 arg1, arg2; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + arg1 = GetBankIdentity(index) & 1; + arg2 = AIScriptRead32(gAIScriptPtr + 2); + + if ((gSideAffecting[arg1] & arg2) == 0) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + else + gAIScriptPtr += 10; +} + +static void BattleAICmd_if_less_than(void) +{ + if (AI_THINKING_STRUCT->funcResult < gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_if_more_than(void) +{ + if (AI_THINKING_STRUCT->funcResult > gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_if_equal(void) +{ + if (AI_THINKING_STRUCT->funcResult == gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_if_not_equal(void) +{ + if (AI_THINKING_STRUCT->funcResult != gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_if_less_than_32(void) +{ + u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); + + if (AI_THINKING_STRUCT->funcResult < *temp) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + else + gAIScriptPtr += 9; +} + +static void BattleAICmd_if_more_than_32(void) +{ + u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); + + if (AI_THINKING_STRUCT->funcResult > *temp) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + else + gAIScriptPtr += 9; +} + +static void BattleAICmd_if_equal_32(void) +{ + u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); + + if (AI_THINKING_STRUCT->funcResult == *temp) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + else + gAIScriptPtr += 9; +} + +static void BattleAICmd_if_not_equal_32(void) +{ + u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); + + if (AI_THINKING_STRUCT->funcResult != *temp) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + else + gAIScriptPtr += 9; +} + +static void BattleAICmd_if_move(void) +{ + u16 move = AIScriptRead16(gAIScriptPtr + 1); + + if (AI_THINKING_STRUCT->moveConsidered == move) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +static void BattleAICmd_if_not_move(void) +{ + u16 move = AIScriptRead16(gAIScriptPtr + 1); + + if (AI_THINKING_STRUCT->moveConsidered != move) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +static void BattleAICmd_if_in_bytes(void) +{ + u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1); + + while (*ptr != 0xFF) + { + if (AI_THINKING_STRUCT->funcResult == *ptr) + { + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + return; + } + ptr++; + } + gAIScriptPtr += 9; +} + +static void BattleAICmd_if_not_in_bytes(void) +{ + u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1); + + while (*ptr != 0xFF) + { + if (AI_THINKING_STRUCT->funcResult == *ptr) + { + gAIScriptPtr += 9; + return; + } + ptr++; + } + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); +} + +static void BattleAICmd_if_in_words(void) +{ + u16 *ptr = (u16 *)AIScriptReadPtr(gAIScriptPtr + 1); + + while (*ptr != 0xFFFF) + { + if (AI_THINKING_STRUCT->funcResult == *ptr) + { + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + return; + } + ptr++; + } + gAIScriptPtr += 9; +} + +static void BattleAICmd_if_not_in_words(void) +{ + u16 *ptr = (u16 *)AIScriptReadPtr(gAIScriptPtr + 1); + + while (*ptr != 0xFFFF) + { + if (AI_THINKING_STRUCT->funcResult == *ptr) + { + gAIScriptPtr += 9; + return; + } + ptr++; + } + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); +} + +static void BattleAICmd_if_user_can_damage(void) +{ + s32 i; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleMons[gBankAttacker].moves[i] != 0 + && gBattleMoves[gBattleMons[gBankAttacker].moves[i]].power != 0) + break; + } + if (i == MAX_MON_MOVES) + gAIScriptPtr += 5; + else + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); +} + +static void BattleAICmd_if_user_cant_damage(void) +{ + s32 i; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleMons[gBankAttacker].moves[i] != 0 + && gBattleMoves[gBattleMons[gBankAttacker].moves[i]].power != 0) + break; + } + if (i != MAX_MON_MOVES) + gAIScriptPtr += 5; + else + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); +} + +static void BattleAICmd_get_turn_count(void) +{ + AI_THINKING_STRUCT->funcResult = gBattleResults.battleTurnCounter; + gAIScriptPtr += 1; +} + +static void BattleAICmd_get_type(void) +{ + switch (gAIScriptPtr[1]) + { + case 1: // player primary type + AI_THINKING_STRUCT->funcResult = gBattleMons[gBankAttacker].type1; + break; + case 0: // enemy primary type + AI_THINKING_STRUCT->funcResult = gBattleMons[gBankTarget].type1; + break; + case 3: // player secondary type + AI_THINKING_STRUCT->funcResult = gBattleMons[gBankAttacker].type2; + break; + case 2: // enemy secondary type + AI_THINKING_STRUCT->funcResult = gBattleMons[gBankTarget].type2; + break; + case 4: // type of move being pointed to + AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].type; + break; + } + gAIScriptPtr += 2; +} + +static void BattleAICmd_get_move_power(void) +{ + AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power; + gAIScriptPtr += 1; +} + +#ifdef NONMATCHING +static void BattleAICmd_is_most_powerful_move(void) +{ + int i, j; + s32 damages[MAX_MON_MOVES]; + + for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++) + if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == sDiscouragedPowerfulMoveEffects[i]) + break; + + if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power > 1 + && sDiscouragedPowerfulMoveEffects[i] == 0xFFFF) + { + gDynamicBasePower = 0; + ewram[0x1601C] = 0; // why is this a manual array? + ewram[0x1601F] = 1; + gBattleMoveFlags = 0; + gCritMultiplier = 1; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + for (j = 0; sDiscouragedPowerfulMoveEffects[j] != 0xFFFF; j++) + { // _08108276 + if (gBattleMoves[gBattleMons[gBankAttacker].moves[i]].effect == sDiscouragedPowerfulMoveEffects[j]) + break; + } + + // _081082BA + if (gBattleMons[gBankAttacker].moves[i] + && sDiscouragedPowerfulMoveEffects[j] == 0xFFFF + && gBattleMoves[gBattleMons[gBankAttacker].moves[i]].power > 1) + { + gCurrentMove = gBattleMons[gBankAttacker].moves[i]; + AI_CalcDmg(gBankAttacker, gBankTarget); + TypeCalc(gCurrentMove, gBankAttacker, gBankTarget); + damages[i] = (gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[i]) / 100; + + if (damages[i] == 0) // moves always do at least 1 damage. + damages[i] = 1; + } + else + { + damages[i] = 0; + } + } + + for (i = 0; i < MAX_MON_MOVES; i++) + if (damages[i] > damages[AI_THINKING_STRUCT->movesetIndex]) + break; + + if (i == MAX_MON_MOVES) + AI_THINKING_STRUCT->funcResult = 2; + else + AI_THINKING_STRUCT->funcResult = 1; + } + else + { + AI_THINKING_STRUCT->funcResult = 0; + } + + gAIScriptPtr += 1; +} +#else +__attribute__((naked)) +static void BattleAICmd_is_most_powerful_move(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, 0x14\n\ + movs r3, 0\n\ + ldr r0, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\ + ldrh r1, [r0]\n\ + ldr r4, _0810832C @ =0x0000ffff\n\ + ldr r6, _08108330 @ =gBattleMoves\n\ + ldr r5, _08108334 @ =0x02016800\n\ + cmp r1, r4\n\ + beq _0810822E\n\ + ldrh r1, [r5, 0x2]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldrb r2, [r0]\n\ + ldr r1, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\ +_0810821E:\n\ + ldrh r0, [r1]\n\ + cmp r2, r0\n\ + beq _0810822E\n\ + adds r1, 0x2\n\ + adds r3, 0x1\n\ + ldrh r0, [r1]\n\ + cmp r0, r4\n\ + bne _0810821E\n\ +_0810822E:\n\ + ldrh r0, [r5, 0x2]\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r6\n\ + ldrb r0, [r1, 0x1]\n\ + cmp r0, 0x1\n\ + bhi _08108240\n\ + b _081083B2\n\ +_08108240:\n\ + lsls r0, r3, 1\n\ + ldr r1, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\ + adds r0, r1\n\ + ldrh r3, [r0]\n\ + ldr r0, _0810832C @ =0x0000ffff\n\ + cmp r3, r0\n\ + beq _08108250\n\ + b _081083B2\n\ +_08108250:\n\ + ldr r0, _08108338 @ =gDynamicBasePower\n\ + movs r1, 0\n\ + strh r1, [r0]\n\ + ldr r2, _0810833C @ =0xfffff81c\n\ + adds r0, r5, r2\n\ + strb r1, [r0]\n\ + adds r2, 0x3\n\ + adds r0, r5, r2\n\ + movs r2, 0x1\n\ + strb r2, [r0]\n\ + ldr r0, _08108340 @ =gBattleMoveFlags\n\ + strb r1, [r0]\n\ + ldr r0, _08108344 @ =gCritMultiplier\n\ + strb r2, [r0]\n\ + movs r6, 0\n\ + mov r9, r3\n\ + ldr r0, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\ + ldrh r0, [r0]\n\ + str r0, [sp, 0x10]\n\ +_08108276:\n\ + movs r3, 0\n\ + ldr r5, _08108348 @ =gBattleMons\n\ + lsls r4, r6, 1\n\ + ldr r7, _0810834C @ =gBankAttacker\n\ + lsls r1, r6, 2\n\ + mov r8, r1\n\ + adds r2, r6, 0x1\n\ + mov r10, r2\n\ + ldr r0, [sp, 0x10]\n\ + cmp r0, r9\n\ + beq _081082BA\n\ + ldr r2, _08108330 @ =gBattleMoves\n\ + ldrb r1, [r7]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r4, r0\n\ + adds r1, r5, 0\n\ + adds r1, 0xC\n\ + adds r0, r1\n\ + ldrh r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrb r2, [r0]\n\ + ldr r1, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\ +_081082AA:\n\ + ldrh r0, [r1]\n\ + cmp r2, r0\n\ + beq _081082BA\n\ + adds r1, 0x2\n\ + adds r3, 0x1\n\ + ldrh r0, [r1]\n\ + cmp r0, r9\n\ + bne _081082AA\n\ +_081082BA:\n\ + ldrb r1, [r7]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r4, r0\n\ + adds r1, r5, 0\n\ + adds r1, 0xC\n\ + adds r1, r0, r1\n\ + ldrh r0, [r1]\n\ + cmp r0, 0\n\ + beq _0810835C\n\ + lsls r0, r3, 1\n\ + ldr r2, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + cmp r0, r9\n\ + bne _0810835C\n\ + ldr r0, _08108330 @ =gBattleMoves\n\ + ldrh r2, [r1]\n\ + lsls r1, r2, 1\n\ + adds r1, r2\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + cmp r0, 0x1\n\ + bls _0810835C\n\ + ldr r5, _08108350 @ =gCurrentMove\n\ + strh r2, [r5]\n\ + ldrb r0, [r7]\n\ + ldr r4, _08108354 @ =gBankTarget\n\ + ldrb r1, [r4]\n\ + bl AI_CalcDmg\n\ + ldrh r0, [r5]\n\ + ldrb r1, [r7]\n\ + ldrb r2, [r4]\n\ + bl TypeCalc\n\ + mov r4, sp\n\ + add r4, r8\n\ + ldr r2, _08108358 @ =gBattleMoveDamage\n\ + ldr r0, _08108334 @ =0x02016800\n\ + adds r0, 0x18\n\ + adds r0, r6, r0\n\ + ldrb r1, [r0]\n\ + ldr r0, [r2]\n\ + muls r0, r1\n\ + movs r1, 0x64\n\ + bl __divsi3\n\ + str r0, [r4]\n\ + cmp r0, 0\n\ + bne _08108364\n\ + movs r0, 0x1\n\ + str r0, [r4]\n\ + b _08108364\n\ + .align 2, 0\n\ +_08108328: .4byte sDiscouragedPowerfulMoveEffects\n\ +_0810832C: .4byte 0x0000ffff\n\ +_08108330: .4byte gBattleMoves\n\ +_08108334: .4byte 0x02016800\n\ +_08108338: .4byte gDynamicBasePower\n\ +_0810833C: .4byte 0xfffff81c\n\ +_08108340: .4byte gBattleMoveFlags\n\ +_08108344: .4byte gCritMultiplier\n\ +_08108348: .4byte gBattleMons\n\ +_0810834C: .4byte gBankAttacker\n\ +_08108350: .4byte gCurrentMove\n\ +_08108354: .4byte gBankTarget\n\ +_08108358: .4byte gBattleMoveDamage\n\ +_0810835C:\n\ + mov r1, sp\n\ + add r1, r8\n\ + movs r0, 0\n\ + str r0, [r1]\n\ +_08108364:\n\ + mov r6, r10\n\ + cmp r6, 0x3\n\ + ble _08108276\n\ + movs r6, 0\n\ + ldr r1, _081083A4 @ =0x02016800\n\ + ldrb r0, [r1, 0x1]\n\ + lsls r0, 2\n\ + add r0, sp\n\ + ldr r2, [sp]\n\ + ldr r0, [r0]\n\ + adds r5, r1, 0\n\ + ldr r4, _081083A8 @ =gAIScriptPtr\n\ + cmp r2, r0\n\ + bgt _0810839A\n\ + adds r3, r5, 0\n\ + mov r2, sp\n\ +_08108384:\n\ + adds r2, 0x4\n\ + adds r6, 0x1\n\ + cmp r6, 0x3\n\ + bgt _0810839A\n\ + ldrb r0, [r3, 0x1]\n\ + lsls r0, 2\n\ + add r0, sp\n\ + ldr r1, [r2]\n\ + ldr r0, [r0]\n\ + cmp r1, r0\n\ + ble _08108384\n\ +_0810839A:\n\ + cmp r6, 0x4\n\ + bne _081083AC\n\ + movs r0, 0x2\n\ + str r0, [r5, 0x8]\n\ + b _081083B8\n\ + .align 2, 0\n\ +_081083A4: .4byte 0x02016800\n\ +_081083A8: .4byte gAIScriptPtr\n\ +_081083AC:\n\ + movs r0, 0x1\n\ + str r0, [r5, 0x8]\n\ + b _081083B8\n\ +_081083B2:\n\ + movs r0, 0\n\ + str r0, [r5, 0x8]\n\ + ldr r4, _081083D0 @ =gAIScriptPtr\n\ +_081083B8:\n\ + ldr r0, [r4]\n\ + adds r0, 0x1\n\ + str r0, [r4]\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 {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081083D0: .4byte gAIScriptPtr\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +static void BattleAICmd_get_move(void) +{ + if (gAIScriptPtr[1] == USER) + AI_THINKING_STRUCT->funcResult = gLastUsedMove[gBankAttacker]; + else + AI_THINKING_STRUCT->funcResult = gLastUsedMove[gBankTarget]; + + gAIScriptPtr += 2; +} + +static void BattleAICmd_if_arg_equal(void) +{ + if (gAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_if_arg_not_equal(void) +{ + if (gAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_if_would_go_first(void) +{ + if (b_first_side(gBankAttacker, gBankTarget, 1) == gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_if_would_not_go_first(void) +{ + if (b_first_side(gBankAttacker, gBankTarget, 1) != gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_nullsub_2A(void) +{ +} + +static void BattleAICmd_nullsub_2B(void) +{ +} + +static void BattleAICmd_count_alive_pokemon(void) +{ + struct Pokemon *party; + int i; + u8 index; + u8 var, var2; + + AI_THINKING_STRUCT->funcResult = 0; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + if (GetBankSide(index) == 0) + party = gPlayerParty; + else + party = gEnemyParty; + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + u32 status; + var = gBattlePartyID[index]; + status = GetBankIdentity(index) ^ 2; + var2 = gBattlePartyID[GetBankByPlayerAI(status)]; + } + else + { + var = gBattlePartyID[index]; + var2 = gBattlePartyID[index]; + } + + for (i = 0; i < 6; i++) + { + if (i != var && i != var2 + && GetMonData(&party[i], MON_DATA_HP) != 0 + && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + { + AI_THINKING_STRUCT->funcResult++; + } + } + + gAIScriptPtr += 2; +} + +static void BattleAICmd_get_considered_move(void) +{ + AI_THINKING_STRUCT->funcResult = AI_THINKING_STRUCT->moveConsidered; + gAIScriptPtr += 1; +} + +static void BattleAICmd_get_considered_move_effect(void) +{ + AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect; + gAIScriptPtr += 1; +} + +static void BattleAICmd_get_ability(void) +{ + u8 index; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + if (GetBankSide(index) == TARGET) + { + u16 unk = GetBankIdentity(index) & 1; + + if (UNK_2016A00_STRUCT->unk20[unk] != 0) + { + AI_THINKING_STRUCT->funcResult = UNK_2016A00_STRUCT->unk20[unk]; + gAIScriptPtr += 2; + return; + } + + // abilities that prevent fleeing. + if (gBattleMons[index].ability == ABILITY_SHADOW_TAG + || gBattleMons[index].ability == ABILITY_MAGNET_PULL + || gBattleMons[index].ability == ABILITY_ARENA_TRAP) + { + AI_THINKING_STRUCT->funcResult = gBattleMons[index].ability; + gAIScriptPtr += 2; + return; + } + + if (gBaseStats[gBattleMons[index].species].ability1 != ABILITY_NONE) + { + if (gBaseStats[gBattleMons[index].species].ability2 != ABILITY_NONE) + { + // AI has no knowledge of opponent, so it guesses which ability. + if (Random() % 2) + { + AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[index].species].ability1; + } + else + { + AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[index].species].ability2; + } + } + else + { + AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[index].species].ability1; // it's definitely ability 1. + } + } + else + { + AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[index].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability. + } + } + else + { + // The AI knows its own ability. + AI_THINKING_STRUCT->funcResult = gBattleMons[index].ability; + } + gAIScriptPtr += 2; +} + +static void BattleAICmd_get_highest_possible_damage(void) +{ + s32 i; + + gDynamicBasePower = 0; + BATTLE_STRUCT->dynamicMoveType = 0; + BATTLE_STRUCT->dmgMultiplier = 1; + gBattleMoveFlags = 0; + gCritMultiplier = 1; + AI_THINKING_STRUCT->funcResult = 0; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + gBattleMoveDamage = 40; + gCurrentMove = gBattleMons[gBankAttacker].moves[i]; + + if (gCurrentMove) + { + TypeCalc(gCurrentMove, gBankAttacker, gBankTarget); + + // reduce by 1/3. + if (gBattleMoveDamage == 120) + gBattleMoveDamage = 80; + if (gBattleMoveDamage == 240) + gBattleMoveDamage = 160; + if (gBattleMoveDamage == 30) + gBattleMoveDamage = 20; + if (gBattleMoveDamage == 15) + gBattleMoveDamage = 10; + + if (gBattleMoveFlags & 8) // if it's a status move, it wont do anything. + gBattleMoveDamage = 0; + + if (AI_THINKING_STRUCT->funcResult < gBattleMoveDamage) + AI_THINKING_STRUCT->funcResult = gBattleMoveDamage; + } + } + gAIScriptPtr += 1; +} + +static void BattleAICmd_if_damage_bonus(void) +{ + u8 damageVar; + + gDynamicBasePower = 0; + BATTLE_STRUCT->dynamicMoveType = 0; + BATTLE_STRUCT->dmgMultiplier = 1; + gBattleMoveFlags = 0; + gCritMultiplier = 1; + + gBattleMoveDamage = 40; + gCurrentMove = AI_THINKING_STRUCT->moveConsidered; + + TypeCalc(gCurrentMove, gBankAttacker, gBankTarget); + + if (gBattleMoveDamage == 120) + gBattleMoveDamage = 80; + if (gBattleMoveDamage == 240) + gBattleMoveDamage = 160; + if (gBattleMoveDamage == 30) + gBattleMoveDamage = 20; + if (gBattleMoveDamage == 15) + gBattleMoveDamage = 10; + + if (gBattleMoveFlags & 8) + gBattleMoveDamage = 0; + + // store gBattleMoveDamage in a u8 variable because gAIScriptPtr[1] is a u8. + damageVar = gBattleMoveDamage; + + if (damageVar == gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_nullsub_32(void) +{ +} + +static void BattleAICmd_nullsub_33(void) +{ +} + +static void BattleAICmd_if_status_in_party(void) +{ + struct Pokemon *party; + struct Pokemon *partyPtr; + int i; + u32 statusToCompareTo; + + // for whatever reason, game freak put the party pointer into 2 variables instead of 1. it's possible at some point the switch encompassed the whole function and used each respective variable creating largely duplicate code. + switch (gAIScriptPtr[1]) + { + case 1: + party = partyPtr = gEnemyParty; + break; + default: + party = partyPtr = gPlayerParty; + break; + } + + statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2); + + for (i = 0; i < 6; i++) + { + u16 species = GetMonData(&party[i], MON_DATA_SPECIES); + u16 hp = GetMonData(&party[i], MON_DATA_HP); + u32 status = GetMonData(&party[i], MON_DATA_STATUS); + + if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) + { + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); // WHAT. why is this being merged into the above switch + return; + } + } + + gAIScriptPtr += 10; +} + +// bugged, doesnt return properly. also unused +static void BattleAICmd_if_status_not_in_party(void) +{ + struct Pokemon *party; + struct Pokemon *partyPtr; + int i; + u32 statusToCompareTo; + + switch (gAIScriptPtr[1]) + { + case 1: + party = partyPtr = gEnemyParty; + break; + default: + party = partyPtr = gPlayerParty; + break; + } + + statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2); + + for (i = 0; i < 6; i++) + { + u16 species = GetMonData(&party[i], MON_DATA_SPECIES); + u16 hp = GetMonData(&party[i], MON_DATA_HP); + u32 status = GetMonData(&party[i], MON_DATA_STATUS); + + // everytime the status is found, the AI's logic jumps further and further past its intended destination. this results in a broken AI macro and is probably why it is unused. + if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) + gAIScriptPtr += 10; // doesnt return? + } + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); +} + +static void BattleAICmd_get_weather(void) +{ + if (gBattleWeather & WEATHER_RAIN_ANY) + AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_RAIN; + if (gBattleWeather & WEATHER_SANDSTORM_ANY) + AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_SANDSTORM; + if (gBattleWeather & WEATHER_SUN_ANY) + AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_SUN; + if (gBattleWeather & WEATHER_HAIL) + AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_HAIL; + + gAIScriptPtr += 1; +} + +static void BattleAICmd_if_effect(void) +{ + if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_if_not_effect(void) +{ + if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect != gAIScriptPtr[1]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void BattleAICmd_if_stat_level_less_than(void) +{ + u32 party; + + if (gAIScriptPtr[1] == USER) + party = gBankAttacker; + else + party = gBankTarget; + + if (gBattleMons[party].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + else + gAIScriptPtr += 8; +} + +static void BattleAICmd_if_stat_level_more_than(void) +{ + u32 party; + + if (gAIScriptPtr[1] == USER) + party = gBankAttacker; + else + party = gBankTarget; + + if (gBattleMons[party].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + else + gAIScriptPtr += 8; +} + +static void BattleAICmd_if_stat_level_equal(void) +{ + u32 party; + + if (gAIScriptPtr[1] == USER) + party = gBankAttacker; + else + party = gBankTarget; + + if (gBattleMons[party].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + else + gAIScriptPtr += 8; +} + +static void BattleAICmd_if_stat_level_not_equal(void) +{ + u32 party; + + if (gAIScriptPtr[1] == USER) + party = gBankAttacker; + else + party = gBankTarget; + + if (gBattleMons[party].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3]) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + else + gAIScriptPtr += 8; +} + +static void BattleAICmd_if_can_faint(void) +{ + if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2) + { + gAIScriptPtr += 5; + return; + } + + gDynamicBasePower = 0; + BATTLE_STRUCT->dynamicMoveType = 0; + BATTLE_STRUCT->dmgMultiplier = 1; + gBattleMoveFlags = 0; + gCritMultiplier = 1; + gCurrentMove = AI_THINKING_STRUCT->moveConsidered; + AI_CalcDmg(gBankAttacker, gBankTarget); + TypeCalc(gCurrentMove, gBankAttacker, gBankTarget); + + gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100; + + // moves always do at least 1 damage. + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + + if (gBattleMons[gBankTarget].hp <= gBattleMoveDamage) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void BattleAICmd_if_cant_faint(void) +{ + if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2) + { + gAIScriptPtr += 5; + return; + } + + gDynamicBasePower = 0; + BATTLE_STRUCT->dynamicMoveType = 0; + BATTLE_STRUCT->dmgMultiplier = 1; + gBattleMoveFlags = 0; + gCritMultiplier = 1; + gCurrentMove = AI_THINKING_STRUCT->moveConsidered; + AI_CalcDmg(gBankAttacker, gBankTarget); + TypeCalc(gCurrentMove, gBankAttacker, gBankTarget); + + gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100; + + // this macro is missing the damage 0 = 1 assumption. + + if (gBattleMons[gBankTarget].hp > gBattleMoveDamage) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void BattleAICmd_if_has_move(void) +{ + int i; + u16 *temp_ptr = (u16 *)(gAIScriptPtr + 2); + + switch (gAIScriptPtr[1]) + { + case 1: + case 3: + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleMons[gBankAttacker].moves[i] == *temp_ptr) + break; + } + if (i == MAX_MON_MOVES) + gAIScriptPtr += 8; + else + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + break; + case 0: + case 2: + for (i = 0; i < 8; i++) + { + if (UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i] == *temp_ptr) + break; + } + if (i == 8) + gAIScriptPtr += 8; + else + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + break; + } +} + +static void BattleAICmd_if_dont_have_move(void) +{ + int i; + u16 *temp_ptr = (u16 *)(gAIScriptPtr + 2); + + switch (gAIScriptPtr[1]) + { + case 1: + case 3: + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleMons[gBankAttacker].moves[i] == *temp_ptr) + break; + } + if (i != MAX_MON_MOVES) + gAIScriptPtr += 8; + else + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + break; + case 0: + case 2: + for (i = 0; i < 8; i++) + { + if (UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i] == *temp_ptr) + break; + } + if (i != 8) + gAIScriptPtr += 8; + else + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + break; + } +} + +static void BattleAICmd_if_move_effect(void) +{ + int i; + + switch (gAIScriptPtr[1]) + { + case 1: + case 3: + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleMons[gBankAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBankAttacker].moves[i]].effect == gAIScriptPtr[2]) + break; + } + if (i != MAX_MON_MOVES) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; + break; + case 0: + case 2: + for (i = 0; i < 8; i++) + { + if (gBattleMons[gBankAttacker].moves[i] != 0 && gBattleMoves[UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i]].effect == gAIScriptPtr[2]) + break; + } + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + } +} + +static void BattleAICmd_if_not_move_effect(void) +{ + int i; + + switch (gAIScriptPtr[1]) + { + case 1: + case 3: + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleMons[gBankAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBankAttacker].moves[i]].effect == gAIScriptPtr[2]) + break; + } + if (i != MAX_MON_MOVES) + gAIScriptPtr += 7; + else + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + break; + case 0: + case 2: + for (i = 0; i < 8; i++) + { + if (UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i] != 0 && gBattleMoves[UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i]].effect == gAIScriptPtr[2]) + break; + } + gAIScriptPtr += 7; + } +} + +static void BattleAICmd_if_last_move_did_damage(void) +{ + u8 index; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + if (gAIScriptPtr[2] == 0) + { + if (gDisableStructs[index].disabledMove == 0) + { + gAIScriptPtr += 7; + return; + } + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + return; + } + else if (gAIScriptPtr[2] != 1) // ignore the macro if its not 0 or 1. + { + gAIScriptPtr += 7; + return; + } + else if (gDisableStructs[index].encoredMove != 0) + { + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + return; + } + gAIScriptPtr += 7; +} + +static void BattleAICmd_if_encored(void) +{ + switch (gAIScriptPtr[1]) + { + case 0: // _08109348 + if (gDisableStructs[gActiveBank].disabledMove == AI_THINKING_STRUCT->moveConsidered) + { + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + return; + } + gAIScriptPtr += 6; + return; + case 1: // _08109370 + if (gDisableStructs[gActiveBank].encoredMove == AI_THINKING_STRUCT->moveConsidered) + { + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + return; + } + gAIScriptPtr += 6; + return; + default: + gAIScriptPtr += 6; + return; + } +} + +static void BattleAICmd_flee(void) +{ + AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_FLEE | AI_ACTION_DO_NOT_ATTACK); // what matters is AI_ACTION_FLEE being enabled. +} + +static void BattleAICmd_if_random_100(void) +{ + u8 safariFleeRate = BATTLE_STRUCT->safariFleeRate * 5; // safari flee rate, from 0-20 + + if ((u8)(Random() % 100) < safariFleeRate) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void BattleAICmd_watch(void) +{ + AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_WATCH | AI_ACTION_DO_NOT_ATTACK); // what matters is AI_ACTION_WATCH being enabled. +} + +static void BattleAICmd_get_hold_effect(void) +{ + u8 index; + u16 status; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + if (GetBankSide(index) == 0) + { + status = (GetBankIdentity(index) & 1); + AI_THINKING_STRUCT->funcResult = UNK_2016A00_STRUCT->unk22[status]; + } + else + AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(gBattleMons[index].item); + + gAIScriptPtr += 2; +} + +static void BattleAICmd_get_gender(void) +{ + u8 index; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[index].species, gBattleMons[index].personality); + + gAIScriptPtr += 2; +} + +static void BattleAICmd_is_first_turn(void) +{ + u8 index; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + AI_THINKING_STRUCT->funcResult = gDisableStructs[index].isFirstTurn; + + gAIScriptPtr += 2; +} + +static void BattleAICmd_get_stockpile_count(void) +{ + u8 index; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + AI_THINKING_STRUCT->funcResult = gDisableStructs[index].stockpileCounter; + + gAIScriptPtr += 2; +} + +static void BattleAICmd_is_double_battle(void) +{ + AI_THINKING_STRUCT->funcResult = gBattleTypeFlags & BATTLE_TYPE_DOUBLE; + + gAIScriptPtr += 1; +} + +static void BattleAICmd_get_used_item(void) +{ + u8 index; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + // this hack and a half matches. whatever. i dont care. someone else fix this mess later. PS: still cant fix this. + AI_THINKING_STRUCT->funcResult = ewram[MULTI_DIM_ARR(index, B_16, 0x160CC)]; + + gAIScriptPtr += 2; +} + +static void BattleAICmd_get_move_type_from_result(void) +{ + AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].type; + + gAIScriptPtr += 1; +} + +static void BattleAICmd_get_move_power_from_result(void) +{ + AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].power; + + gAIScriptPtr += 1; +} + +static void BattleAICmd_get_move_effect_from_result(void) +{ + AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].effect; + + gAIScriptPtr += 1; +} + +static void BattleAICmd_get_protect_count(void) +{ + u8 index; + + if (gAIScriptPtr[1] == USER) + index = gBankAttacker; + else + index = gBankTarget; + + AI_THINKING_STRUCT->funcResult = gDisableStructs[index].protectUses; + + gAIScriptPtr += 2; +} + +static void BattleAICmd_nullsub_52(void) +{ +} + +static void BattleAICmd_nullsub_53(void) +{ +} + +static void BattleAICmd_nullsub_54(void) +{ +} + +static void BattleAICmd_nullsub_55(void) +{ +} + +static void BattleAICmd_nullsub_56(void) +{ +} + +static void BattleAICmd_nullsub_57(void) +{ +} + +static void BattleAICmd_call(void) +{ + AIStackPushVar(gAIScriptPtr + 5); + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); +} + +static void BattleAICmd_jump(void) +{ + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); +} + +static void BattleAICmd_end(void) +{ + if (AIStackPop() == FALSE) + AI_THINKING_STRUCT->aiAction |= AI_ACTION_DONE; +} + +static void BattleAICmd_if_level_compare(void) +{ + switch (gAIScriptPtr[1]) + { + case 0: // greater than + if (gBattleMons[gBankAttacker].level > gBattleMons[gBankTarget].level) + { + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + return; + } + gAIScriptPtr += 6; + return; + case 1: // less than + if (gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level) + { + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + return; + } + gAIScriptPtr += 6; + return; + case 2: // equal + if (gBattleMons[gBankAttacker].level == gBattleMons[gBankTarget].level) + { + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + return; + } + gAIScriptPtr += 6; + return; + } +} + +static void BattleAICmd_if_taunted(void) +{ + if (gDisableStructs[gBankTarget].tauntTimer1 != 0) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void BattleAICmd_if_not_taunted(void) +{ + if (gDisableStructs[gBankTarget].tauntTimer1 == 0) + gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +void AIStackPushVar(u8 *var) +{ + AI_STACK->ptr[AI_STACK->size++] = var; +} + +// unused +void AIStackPushAIPtr(void) +{ + AI_STACK->ptr[AI_STACK->size++] = gAIScriptPtr; +} + +bool8 AIStackPop(void) +{ + if (AI_STACK->size != 0) + { + --AI_STACK->size; + gAIScriptPtr = AI_STACK->ptr[AI_STACK->size]; + return TRUE; + } + else + return FALSE; +} diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c new file mode 100644 index 000000000..6bd98099a --- /dev/null +++ b/src/battle/battle_anim.c @@ -0,0 +1,2270 @@ +#include "global.h" +#include "battle_anim.h" +#include "battle.h" +#include "battle_anim_80CA710.h" +#include "battle_interface.h" +#include "contest.h" +#include "decompress.h" +#include "m4a.h" +#include "main.h" +#include "palette.h" +#include "rom_8077ABC.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" + +// sprites start at 10000 and thus must be subtracted of 10000 to account for the true index. +#define GET_TRUE_SPRITE_INDEX(i) (i - 10000) + +extern u8 unk_2000000[]; +extern u16 gBattlePartyID[4]; +extern u8 gObjectBankIDs[]; +extern u8 gBankAttacker; +extern u8 gBankTarget; +EWRAM_DATA const u8 *gBattleAnimScriptPtr = NULL; +EWRAM_DATA const u8 *gBattleAnimScriptRetAddr = NULL; +EWRAM_DATA void (*gAnimScriptCallback)(void) = NULL; +EWRAM_DATA s8 gAnimFramesToWait = 0; +EWRAM_DATA u8 gAnimScriptActive = FALSE; +EWRAM_DATA u8 gAnimVisualTaskCount = 0; +EWRAM_DATA u8 gAnimSoundTaskCount = 0; +EWRAM_DATA u32 gDisableStructMoveAnim = 0; +EWRAM_DATA u32 gMoveDmgMoveAnim = 0; +EWRAM_DATA u16 gMovePowerMoveAnim = 0; +EWRAM_DATA u8 gHappinessMoveAnim = 0; +EWRAM_DATA u16 gWeatherMoveAnim = 0; +EWRAM_DATA u8 gMonAnimTaskIdArray[2] = {0}; +EWRAM_DATA u8 gUnknown_0202F7C4 = 0; +EWRAM_DATA u8 gUnknown_0202F7C5 = 0; +EWRAM_DATA u16 gAnimMoveIndex = 0; // set but unused. +EWRAM_DATA u8 gBattleAnimPlayerMonIndex = 0; +EWRAM_DATA u8 gBattleAnimEnemyMonIndex = 0; +EWRAM_DATA u16 gUnknown_0202F7CA[4] = {0}; +EWRAM_DATA u8 gUnknown_0202F7D2 = 0; +extern u16 gUnknown_030041B4; +extern u16 gUnknown_03004200; +extern u16 gUnknown_03004240; +extern u16 gUnknown_03004244; +extern u16 gUnknown_03004280; +extern u16 gUnknown_03004288; +extern u16 gUnknown_030042C0; +extern u16 gUnknown_030042C4; + +u16 gSoundAnimFramesToWait; +s16 gBattleAnimArgs[8]; +u16 gAnimSpriteIndexArray[8]; + +extern struct MusicPlayerInfo gMPlay_BGM; +extern struct MusicPlayerInfo gMPlay_SE1; +extern struct MusicPlayerInfo gMPlay_SE2; + +extern const u16 gUnknown_081C7160[]; +extern const u8 *const gBattleAnims_Moves[]; +extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; +extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; +extern const struct BattleAnimBackground gBattleAnimBackgroundTable[]; + +static void RunAnimScriptCommand(void); +static void ScriptCmd_loadsprite(void); +static void ScriptCmd_unloadsprite(void); +static void ScriptCmd_sprite(void); +static void ScriptCmd_createtask(void); +static void ScriptCmd_delay(void); +static void ScriptCmd_waitforvisualfinish(void); +static void ScriptCmd_hang1(void); +static void ScriptCmd_hang2(void); +static void ScriptCmd_end(void); +static void ScriptCmd_playse(void); +static void ScriptCmd_monbg(void); +static void sub_8076380(void); +static void task_pA_ma0A_obj_to_bg_pal(u8); +static void ScriptCmd_clearmonbg(void); +static void sub_807672C(u8); +static void ScriptCmd_monbg_22(void); +static void ScriptCmd_clearmonbg_23(void); +static void sub_80769A4(u8); +static void ScriptCmd_setalpha(void); +static void ScriptCmd_setbldcnt(void); +static void ScriptCmd_blendoff(void); +static void ScriptCmd_call(void); +static void ScriptCmd_return(void); +static void ScriptCmd_setvar(void); +static void ScriptCmd_ifelse(void); +static void ScriptCmd_jumpif(void); +static void ScriptCmd_jump(void); +static void ScriptCmd_fadetobg(void); +static void ScriptCmd_fadetobg_25(void); +static void task_p5_load_battle_screen_elements(u8); +static void sub_8076DB8(u16); +static void dp01t_11_3_message_for_player_only(void); +static void ScriptCmd_restorebg(void); +static void ScriptCmd_waitbgfadeout(void); +static void ScriptCmd_waitbgfadein(void); +static void ScriptCmd_changebg(void); +static void ScriptCmd_panse_19(void); +static void ScriptCmd_setpan(void); +static void ScriptCmd_panse_1B(void); +static void c3_08073CEC(u8); +static void ScriptCmd_panse_26(void); +static void ScriptCmd_panse_27(void); +static void ScriptCmd_panse_1C(void); +static void sub_80774FC(u8); +static void ScriptCmd_panse_1D(void); +static void sub_80775CC(u8); +static void ScriptCmd_createtask_1F(void); +static void ScriptCmd_waitsound(void); +static void ScriptCmd_jumpvareq(void); +static void ScriptCmd_jumpunkcond(void); +static void ScriptCmd_monbgprio_28(void); +static void ScriptCmd_monbgprio_29(void); +static void ScriptCmd_monbgprio_2A(void); +static void ScriptCmd_invisible(void); +static void ScriptCmd_visible(void); +static void ScriptCmd_doublebattle_2D(void); +static void ScriptCmd_doublebattle_2E(void); +static void ScriptCmd_stopsound(void); + +static void (*const sScriptCmdTable[])(void) = { + ScriptCmd_loadsprite, + ScriptCmd_unloadsprite, + ScriptCmd_sprite, + ScriptCmd_createtask, + ScriptCmd_delay, + ScriptCmd_waitforvisualfinish, + ScriptCmd_hang1, + ScriptCmd_hang2, + ScriptCmd_end, + ScriptCmd_playse, + ScriptCmd_monbg, + ScriptCmd_clearmonbg, + ScriptCmd_setalpha, + ScriptCmd_blendoff, + ScriptCmd_call, + ScriptCmd_return, + ScriptCmd_setvar, + ScriptCmd_ifelse, + ScriptCmd_jumpif, + ScriptCmd_jump, + ScriptCmd_fadetobg, + ScriptCmd_restorebg, + ScriptCmd_waitbgfadeout, + ScriptCmd_waitbgfadein, + ScriptCmd_changebg, + ScriptCmd_panse_19, + ScriptCmd_setpan, + ScriptCmd_panse_1B, + ScriptCmd_panse_1C, + ScriptCmd_panse_1D, + ScriptCmd_setbldcnt, + ScriptCmd_createtask_1F, + ScriptCmd_waitsound, + ScriptCmd_jumpvareq, + ScriptCmd_monbg_22, + ScriptCmd_clearmonbg_23, + ScriptCmd_jumpunkcond, + ScriptCmd_fadetobg_25, + ScriptCmd_panse_26, + ScriptCmd_panse_27, + ScriptCmd_monbgprio_28, + ScriptCmd_monbgprio_29, + ScriptCmd_monbgprio_2A, + ScriptCmd_invisible, + ScriptCmd_visible, + ScriptCmd_doublebattle_2D, + ScriptCmd_doublebattle_2E, + ScriptCmd_stopsound, +}; + +void battle_anim_clear_some_data(void) +{ + s32 i; + + gAnimFramesToWait = 0; + gAnimScriptActive = FALSE; + gAnimVisualTaskCount = 0; + gAnimSoundTaskCount = 0; + gDisableStructMoveAnim = 0; + gMoveDmgMoveAnim = 0; + gMovePowerMoveAnim = 0; + gHappinessMoveAnim = 0; + + // clear index array. + for (i = 0; i < 8; i++) + gAnimSpriteIndexArray[i] |= 0xFFFF; + + // clear anim args. + for (i = 0; i < 8; i++) + gBattleAnimArgs[i] = 0; + + gMonAnimTaskIdArray[0] = 0xFF; + gMonAnimTaskIdArray[1] = 0xFF; + gUnknown_0202F7C4 = 0; + gUnknown_0202F7C5 = 0; + gAnimMoveIndex = 0; + gBattleAnimPlayerMonIndex = 0; + gBattleAnimEnemyMonIndex = 0; + gUnknown_0202F7D2 = 0; +} + +void ExecuteMoveAnim(u16 move) +{ + gBattleAnimPlayerMonIndex = gBankAttacker; + gBattleAnimEnemyMonIndex = gBankTarget; + DoMoveAnim(gBattleAnims_Moves, move, 1); +} + +void DoMoveAnim(const u8 *const moveAnims[], u16 move, u8 c) +{ + s32 i; + + if (IsContest() == 0) + { + sub_8079E24(); + sub_8043EB4(0); + for (i = 0; i < 4; i++) + { + if (GetBankSide(i) != 0) + gUnknown_0202F7CA[i] = GetMonData(&gEnemyParty[gBattlePartyID[i]], MON_DATA_SPECIES); + else + gUnknown_0202F7CA[i] = GetMonData(&gPlayerParty[gBattlePartyID[i]], MON_DATA_SPECIES); + } + } + else + { + for (i = 0; i < 4; i++) + gUnknown_0202F7CA[i] = EWRAM_19348; + } + + if (c == 0) + gAnimMoveIndex = 0; + else + gAnimMoveIndex = move; + + for (i = 0; i < 8; i++) + gBattleAnimArgs[i] = 0; + + gMonAnimTaskIdArray[0] = 0xFF; + gMonAnimTaskIdArray[1] = 0xFF; + gBattleAnimScriptPtr = moveAnims[move]; + gAnimScriptActive = TRUE; + gAnimFramesToWait = 0; + gAnimScriptCallback = RunAnimScriptCommand; + + for (i = 0; i < 8; i++) + gAnimSpriteIndexArray[i] |= 0xFFFF; + + if (c != 0) + { + for (i = 0; gUnknown_081C7160[i] != 0xFFFF; i++) + { + if (move == gUnknown_081C7160[i]) + { + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 128); + break; + } + } + } + + gUnknown_030042C4 = 0; + gUnknown_03004240 = 0; + gUnknown_03004200 = 0; + gUnknown_03004244 = 0; +} + +void move_anim_8072740(struct Sprite *sprite) +{ + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + gAnimVisualTaskCount--; +} + +void DestroyAnimVisualTask(u8 taskId) +{ + DestroyTask(taskId); + gAnimVisualTaskCount--; +} + +void DestroyAnimSoundTask(u8 taskId) +{ + DestroyTask(taskId); + gAnimSoundTaskCount--; +} + +static void AddSpriteIndex(u16 index) +{ + s32 i; + + for (i = 0; i < 8; i++) + { + if (gAnimSpriteIndexArray[i] == 0xFFFF) + { + gAnimSpriteIndexArray[i] = index; + return; + } + } +} + +static void ClearSpriteIndex(u16 index) +{ + s32 i; + + for (i = 0; i < 8; i++) + { + if (gAnimSpriteIndexArray[i] == index) + { + gAnimSpriteIndexArray[i] |= 0xFFFF; + return; + } + } +} + +static void WaitAnimFrameCount(void) +{ + if (gAnimFramesToWait <= 0) + { + gAnimScriptCallback = RunAnimScriptCommand; + gAnimFramesToWait = 0; + } + else + { + gAnimFramesToWait--; + } +} + +static void RunAnimScriptCommand(void) +{ + do + { + sScriptCmdTable[SCRIPT_READ_8(gBattleAnimScriptPtr)](); + } while (gAnimFramesToWait == 0 && gAnimScriptActive != FALSE); +} + +static void ScriptCmd_loadsprite(void) +{ + u16 index; + + gBattleAnimScriptPtr++; + index = SCRIPT_READ_16(gBattleAnimScriptPtr); + LoadCompressedObjectPic(&gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)]); + LoadCompressedObjectPalette(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(index)]); + gBattleAnimScriptPtr += 2; + AddSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); + gAnimFramesToWait = 1; + gAnimScriptCallback = WaitAnimFrameCount; +} + +static void ScriptCmd_unloadsprite(void) +{ + u16 index; + + gBattleAnimScriptPtr++; + index = SCRIPT_READ_16(gBattleAnimScriptPtr); + FreeSpriteTilesByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag); + FreeSpritePaletteByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag); + gBattleAnimScriptPtr += 2; + ClearSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); +} + +#ifdef NONMATCHING +static void ScriptCmd_sprite(void) +{ + s32 i; + struct SpriteTemplate *r7; + u8 r4; + u8 r0; + u8 _r0; + u16 r6; + u8 r2; + s8 r1; + + gBattleAnimScriptPtr++; + r7 = (struct SpriteTemplate *)(SCRIPT_READ_32(gBattleAnimScriptPtr)); + gBattleAnimScriptPtr += 4; + r4 = SCRIPT_READ_8(gBattleAnimScriptPtr); + gBattleAnimScriptPtr++; + r0 = SCRIPT_READ_8(gBattleAnimScriptPtr); + gBattleAnimScriptPtr++; + for (i = 0; i < r0; i++) + { + gBattleAnimArgs[i] = SCRIPT_READ_16(gBattleAnimScriptPtr); + gBattleAnimScriptPtr += 2; + } + if (r4 & 0x80) + { + r4 ^= 0x80; + if (r4 > 0x3F) + r4 -= 0x40; + else + r4 = -r4; + _r0 = sub_8079E90(gBattleAnimEnemyMonIndex); + r1 = r4; + + } + else + { + //_08075B44 + if (r4 > 0x3F) + r4 -= 0x40; + else + r4 = -r4; + _r0 = sub_8079E90(gBattleAnimPlayerMonIndex); + r1 = r4; + } + r6 = _r0 + r1; + if ((s16)r6 < 3) + r6 = 3; + + r4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + r2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + CreateSpriteAndAnimate(r7, r4, r2, r6); + gAnimVisualTaskCount++; +} +#else +__attribute__((naked)) +static void ScriptCmd_sprite(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + ldr r5, _08075B2C @ =gBattleAnimScriptPtr\n\ + ldr r1, [r5]\n\ + adds r3, r1, 0x1\n\ + str r3, [r5]\n\ + ldrb r2, [r1, 0x1]\n\ + ldrb r0, [r3, 0x1]\n\ + lsls r0, 8\n\ + adds r2, r0\n\ + ldrb r0, [r3, 0x2]\n\ + lsls r0, 16\n\ + adds r2, r0\n\ + ldrb r0, [r3, 0x3]\n\ + lsls r0, 24\n\ + adds r7, r2, r0\n\ + adds r0, r1, 0x5\n\ + str r0, [r5]\n\ + ldrb r4, [r1, 0x5]\n\ + adds r0, r1, 0x6\n\ + str r0, [r5]\n\ + ldrb r0, [r1, 0x6]\n\ + adds r1, 0x7\n\ + str r1, [r5]\n\ + cmp r0, 0\n\ + beq _08075B14\n\ + adds r6, r5, 0\n\ + ldr r5, _08075B30 @ =gBattleAnimArgs\n\ + adds r3, r0, 0\n\ +_08075AFC:\n\ + ldr r2, [r6]\n\ + ldrb r1, [r2]\n\ + ldrb r0, [r2, 0x1]\n\ + lsls r0, 8\n\ + orrs r1, r0\n\ + strh r1, [r5]\n\ + adds r2, 0x2\n\ + str r2, [r6]\n\ + adds r5, 0x2\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bne _08075AFC\n\ +_08075B14:\n\ + movs r0, 0x80\n\ + ands r0, r4\n\ + cmp r0, 0\n\ + beq _08075B44\n\ + movs r0, 0x80\n\ + eors r4, r0\n\ + cmp r4, 0x3F\n\ + bls _08075B34\n\ + adds r0, r4, 0\n\ + subs r0, 0x40\n\ + b _08075B36\n\ + .align 2, 0\n\ +_08075B2C: .4byte gBattleAnimScriptPtr\n\ +_08075B30: .4byte gBattleAnimArgs\n\ +_08075B34:\n\ + negs r0, r4\n\ +_08075B36:\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + ldr r0, _08075B40 @ =gBattleAnimEnemyMonIndex\n\ + b _08075B56\n\ + .align 2, 0\n\ +_08075B40: .4byte gBattleAnimEnemyMonIndex\n\ +_08075B44:\n\ + cmp r4, 0x3F\n\ + bls _08075B4E\n\ + adds r0, r4, 0\n\ + subs r0, 0x40\n\ + b _08075B50\n\ +_08075B4E:\n\ + negs r0, r4\n\ +_08075B50:\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + ldr r0, _08075BAC @ =gBattleAnimPlayerMonIndex\n\ +_08075B56:\n\ + ldrb r0, [r0]\n\ + bl sub_8079E90\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, r4, 24\n\ + asrs r1, 24\n\ + adds r0, r1\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + lsls r0, r6, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x2\n\ + bgt _08075B74\n\ + movs r6, 0x3\n\ +_08075B74:\n\ + ldr r5, _08075BB0 @ =gBattleAnimEnemyMonIndex\n\ + ldrb r0, [r5]\n\ + movs r1, 0x2\n\ + bl sub_8077ABC\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + ldrb r0, [r5]\n\ + movs r1, 0x3\n\ + bl sub_8077ABC\n\ + adds r2, r0, 0\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + lsls r3, r6, 24\n\ + lsrs r3, 24\n\ + adds r0, r7, 0\n\ + adds r1, r4, 0\n\ + bl CreateSpriteAndAnimate\n\ + ldr r1, _08075BB4 @ =gAnimVisualTaskCount\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08075BAC: .4byte gBattleAnimPlayerMonIndex\n\ +_08075BB0: .4byte gBattleAnimEnemyMonIndex\n\ +_08075BB4: .4byte gAnimVisualTaskCount\n\ + .syntax divided\n"); +} +#endif + +static void ScriptCmd_createtask(void) +{ + TaskFunc taskFunc; + u8 taskPriority; + u8 taskId; + u8 numArgs; + s32 i; + + gBattleAnimScriptPtr++; + taskFunc = (TaskFunc)SCRIPT_READ_32(gBattleAnimScriptPtr); + gBattleAnimScriptPtr += 4; + taskPriority = SCRIPT_READ_8(gBattleAnimScriptPtr); + gBattleAnimScriptPtr++; + numArgs = SCRIPT_READ_8(gBattleAnimScriptPtr); + gBattleAnimScriptPtr++; + + for (i = 0; i < numArgs; i++) + { + gBattleAnimArgs[i] = SCRIPT_READ_16(gBattleAnimScriptPtr); + gBattleAnimScriptPtr += 2; + } + + taskId = CreateTask(taskFunc, taskPriority); + taskFunc(taskId); + gAnimVisualTaskCount++; +} + +static void ScriptCmd_delay(void) +{ + gBattleAnimScriptPtr++; + gAnimFramesToWait = SCRIPT_READ_8(gBattleAnimScriptPtr); + if (gAnimFramesToWait == 0) + gAnimFramesToWait = -1; + gBattleAnimScriptPtr++; + gAnimScriptCallback = WaitAnimFrameCount; +} + +// wait for visual tasks to finish. +static void ScriptCmd_waitforvisualfinish(void) +{ + if (gAnimVisualTaskCount == 0) + { + gBattleAnimScriptPtr++; + gAnimFramesToWait = 0; + } + else + { + gAnimFramesToWait = 1; + } +} + +static void ScriptCmd_hang1(void) +{ +} + +static void ScriptCmd_hang2(void) +{ +} + +static void ScriptCmd_end(void) +{ + s32 i; + bool32 continuousAnim = FALSE; + + // keep waiting as long as there is animations to be done. + if (gAnimVisualTaskCount != 0 || gAnimSoundTaskCount != 0 + || gMonAnimTaskIdArray[0] != 0xFF || gMonAnimTaskIdArray[1] != 0xFF) + { + gSoundAnimFramesToWait = 0; + gAnimFramesToWait = 1; + return; + } + + // finish the sound effects. + if (IsSEPlaying()) + { + if (++gSoundAnimFramesToWait <= 90) // wait 90 frames, then halt the sound effect. + { + gAnimFramesToWait = 1; + return; + } + else + { + m4aMPlayStop(&gMPlay_SE1); + m4aMPlayStop(&gMPlay_SE2); + } + } + + // the SE has halted, so set the SE Frame Counter to 0 and continue. + gSoundAnimFramesToWait = 0; + + for (i = 0; i < 8; i++) + { + if (gAnimSpriteIndexArray[i] != 0xFFFF) + { + FreeSpriteTilesByTag(gBattleAnimPicTable[gAnimSpriteIndexArray[i]].tag); + FreeSpritePaletteByTag(gBattleAnimPicTable[gAnimSpriteIndexArray[i]].tag); + gAnimSpriteIndexArray[i] |= 0xFFFF; // set terminator. + } + } + + if (continuousAnim == FALSE) // may have been used for debug? + { + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); + if (IsContest() == 0) + { + sub_8079E24(); + sub_8043EB4(1); + } + gAnimScriptActive = FALSE; + } +} + +static void ScriptCmd_playse(void) +{ + gBattleAnimScriptPtr++; + PlaySE(SCRIPT_READ_16(gBattleAnimScriptPtr)); + gBattleAnimScriptPtr += 2; +} + +static void ScriptCmd_monbg(void) +{ + u8 r6; + u8 r5; + u8 r0; + u8 r7; + u16 r4; + u8 taskId; + + gBattleAnimScriptPtr++; + r6 = SCRIPT_READ_8(gBattleAnimScriptPtr); + if (r6 == 0) + r6 = 2; + else if (r6 == 1) + r6 = 3; + if (r6 == 0 || r6 == 2) + r5 = gBattleAnimPlayerMonIndex; + else + r5 = gBattleAnimEnemyMonIndex; + if (b_side_obj__get_some_boolean(r5)) + { + r0 = GetBankIdentity(r5); + r0 += 0xFF; + if (r0 <= 1 || IsContest() != 0) + r7 = 0; + else + r7 = 1; + sub_8076034(r5, r7); + r4 = gObjectBankIDs[r5]; + taskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10); + gTasks[taskId].data[0] = r4; + gTasks[taskId].data[1] = gSprites[r4].pos1.x + gSprites[r4].pos2.x; + gTasks[taskId].data[2] = gSprites[r4].pos1.y + gSprites[r4].pos2.y; + if (r7 == 0) + { + gTasks[taskId].data[3] = gUnknown_030042C0; + gTasks[taskId].data[4] = gUnknown_030041B4; + } + else + { + gTasks[taskId].data[3] = gUnknown_03004288; + gTasks[taskId].data[4] = gUnknown_03004280; + } + gTasks[taskId].data[5] = r7; + gTasks[taskId].data[6] = r5; + gMonAnimTaskIdArray[0] = taskId; + + } + r5 ^= 2; + if (r6 > 1 && b_side_obj__get_some_boolean(r5)) + { + r0 = GetBankIdentity(r5); + r0 += 0xFF; + if (r0 <= 1 || IsContest() != 0) + r7 = 0; + else + r7 = 1; + sub_8076034(r5, r7); + r4 = gObjectBankIDs[r5]; + taskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10); + gTasks[taskId].data[0] = r4; + gTasks[taskId].data[1] = gSprites[r4].pos1.x + gSprites[r4].pos2.x; + gTasks[taskId].data[2] = gSprites[r4].pos1.y + gSprites[r4].pos2.y; + if (r7 == 0) + { + gTasks[taskId].data[3] = gUnknown_030042C0; + gTasks[taskId].data[4] = gUnknown_030041B4; + } + else + { + gTasks[taskId].data[3] = gUnknown_03004288; + gTasks[taskId].data[4] = gUnknown_03004280; + } + gTasks[taskId].data[5] = r7; + gTasks[taskId].data[6] = r5; + gMonAnimTaskIdArray[1] = taskId; + } + gBattleAnimScriptPtr++; +} + +#ifdef NONMATCHING +bool8 b_side_obj__get_some_boolean(u8 a) +{ + if (IsContest() != 0) + { + if (a == gBattleAnimPlayerMonIndex) + return TRUE; + else + return FALSE; + } + if (sub_8078874(a) == 0) + return FALSE; + if (IsContest() != 0) + return TRUE; // this line wont ever be reached. + if ((EWRAM_17800[a].unk0 & 1) == 0) + return TRUE; + if (gSprites[gObjectBankIDs[a]].invisible) + return FALSE; + return TRUE; +} +#else +__attribute__((naked)) +bool8 b_side_obj__get_some_boolean(u8 a) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + adds r5, r4, 0\n\ + bl IsContest\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08075FDC\n\ + ldr r0, _08075FD8 @ =gBattleAnimPlayerMonIndex\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + beq _0807601C\n\ + b _0807602C\n\ + .align 2, 0\n\ +_08075FD8: .4byte gBattleAnimPlayerMonIndex\n\ +_08075FDC:\n\ + adds r0, r4, 0\n\ + bl sub_8078874\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _0807602C\n\ + bl IsContest\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0807601C\n\ + lsls r0, r5, 2\n\ + ldr r1, _08076020 @ =0x02017800\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0807601C\n\ + ldr r2, _08076024 @ =gSprites\n\ + ldr r0, _08076028 @ =gObjectBankIDs\n\ + adds r0, r5, r0\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + adds r0, 0x3E\n\ + ldrb r0, [r0]\n\ + lsls r0, 29\n\ + cmp r0, 0\n\ + blt _0807602C\n\ +_0807601C:\n\ + movs r0, 0x1\n\ + b _0807602E\n\ + .align 2, 0\n\ +_08076020: .4byte 0x02017800\n\ +_08076024: .4byte gSprites\n\ +_08076028: .4byte gObjectBankIDs\n\ +_0807602C:\n\ + movs r0, 0\n\ +_0807602E:\n\ + pop {r4,r5}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif + +void sub_8076034(u8 a, u8 b) +{ + volatile u8 pointlessZero; + u16 *addr2; + u8 spriteId; + + if (b == 0) + { + struct UnknownStruct2 s; + u8 *addr; + u32 size; + u8 r2; + u16 *addr3; + + sub_8078914(&s); + addr = s.unk0; + size = 0x2000; + while (1) + { + DmaFill32(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill32(3, 0, addr, size); + break; + } + } + pointlessZero = 0; + pointlessZero = 0; + addr2 = (void *)s.unk4; + DmaFill16(3, 0xFF, addr2, 0x1000); + + REG_BG1CNT_BITFIELD.priority = 2; + REG_BG1CNT_BITFIELD.screenSize = 1; + REG_BG1CNT_BITFIELD.areaOverflowMode = 0; + + spriteId = gObjectBankIDs[a]; + gUnknown_030042C0 = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32; + if (IsContest() != 0 && sub_80AEB1C(EWRAM_19348) != 0) + gUnknown_030042C0--; + gUnknown_030041B4 = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32; + gSprites[gObjectBankIDs[a]].invisible = TRUE; + + REG_BG1HOFS = gUnknown_030042C0; + REG_BG1VOFS = gUnknown_030041B4; + + LoadPalette(gPlttBufferUnfaded + 0x100 + a * 16, s.unk8 * 16, 32); + addr3 = (u16 *)PLTT + s.unk8 * 16; + DmaCopy32(3, gPlttBufferUnfaded + 0x100 + a * 16, addr3, 32); + + if (IsContest() != 0) + r2 = 0; + else + r2 = GetBankIdentity(a); + sub_80E4EF8(0, 0, r2, s.unk8, (u32)s.unk0, (((s32)s.unk4 - VRAM) / 2048), REG_BG1CNT_BITFIELD.charBaseBlock); + if (IsContest() != 0) + sub_8076380(); + } + else + { + u8 *addr; + u32 size; + u16 *addr3; + + addr = (void *)(VRAM + 0x6000); + size = 0x2000; + while (1) + { + DmaFill32(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill32(3, 0, addr, size); + break; + } + } + pointlessZero = 0; + pointlessZero = 0; + addr2 = (void *)(VRAM + 0xF000); + DmaFill32(3, 0, addr2, 0x800); + + REG_BG2CNT_BITFIELD.priority = 2; + REG_BG2CNT_BITFIELD.screenSize = 1; + REG_BG2CNT_BITFIELD.areaOverflowMode = 0; + + spriteId = gObjectBankIDs[a]; + gUnknown_03004288 = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32; + gUnknown_03004280 = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32; + gSprites[gObjectBankIDs[a]].invisible = TRUE; + + REG_BG2HOFS = gUnknown_03004288; + REG_BG2VOFS = gUnknown_03004280; + + LoadPalette(gPlttBufferUnfaded + 0x100 + a * 16, 0x90, 32); + addr3 = (void *)(PLTT + 0x120); + DmaCopy32(3, gPlttBufferUnfaded + 0x100 + a * 16, addr3, 32); + + sub_80E4EF8(0, 0, GetBankIdentity(a), 9, 0x6000, 0x1E, REG_BG2CNT_BITFIELD.charBaseBlock); + } +} + +static void sub_8076380(void) +{ + int i; + int j; + struct UnknownStruct2 s; + u16 *ptr; + + if (sub_80AEB1C(EWRAM_19348) != 0) + { + sub_8078914(&s); + ptr = s.unk4; + for (i = 0; i < 8; i++) + { + for (j = 0; j < 4; j++) + { + u16 temp = ptr[j + i * 32]; + + ptr[j + i * 32] = ptr[7 - j + i * 32]; + ptr[7 - j + i * 32] = temp; + } + } + for (i = 0; i < 8; i++) + { + for (j = 0; j < 8; j++) + ptr[j + i * 32] ^= 0x400; + } + } +} + +void sub_80763FC(u16 a, u16 *b, u32 c, u8 d) +{ + u8 i; + u8 j; + u32 r9; + + if (d == 0) + r9 = 32; + else + r9 = 64; + a <<= 12; + for (i = 0; i < r9; i++) + { + for (j = 0; j < 32; j++) + b[j + i * 32] = ((b[j + i * 32] & 0xFFF) | a) + c; + } +} + +void sub_8076464(u8 a) +{ + u8 *addr; + u32 size; + volatile u8 pointlessZero; + struct UnknownStruct2 s; + + sub_8078914(&s); + if (a == 0 || IsContest() != 0) + { + u16 *addr2; + + addr = s.unk0; + size = 0x2000; + while (1) + { + DmaFill32(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill32(3, 0, addr, size); + break; + } + } + pointlessZero = 0; + pointlessZero = 0; + addr2 = s.unk4; + DmaFill32(3, 0, addr2, 0x800); + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + } + else + { + u16 *addr2; + + addr = (void *)(VRAM + 0x6000); + size = 0x2000; + while (1) + { + DmaFill32(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill32(3, 0, addr, size); + break; + } + } + pointlessZero = 0; + pointlessZero = 0; + addr2 = (void *)(VRAM + 0xF000); + DmaFill32(3, 0, addr2, 0x800); + gUnknown_03004288 = 0; + gUnknown_03004280 = 0; + } +} + +static void task_pA_ma0A_obj_to_bg_pal(u8 taskId) +{ + u8 r4; + u8 r6; + s16 r3; + s16 r2; + struct UnknownStruct2 s; + + r4 = gTasks[taskId].data[0]; + r6 = gTasks[taskId].data[6]; + sub_8078914(&s); + r3 = gTasks[taskId].data[1] - (gSprites[r4].pos1.x + gSprites[r4].pos2.x); + r2 = gTasks[taskId].data[2] - (gSprites[r4].pos1.y + gSprites[r4].pos2.y); + if (gTasks[taskId].data[5] == 0) + { + u16 *src; + u16 *dst; + + gUnknown_030042C0 = r3 + gTasks[taskId].data[3]; + gUnknown_030041B4 = r2 + gTasks[taskId].data[4]; + src = gPlttBufferFaded + 0x100 + r6 * 16; + dst = gPlttBufferFaded + 0x100 + s.unk8 * 16 - 256; + DmaCopy32(3, src, dst, 32); + } + else + { + u16 *src; + u16 *dst; + + gUnknown_03004288 = r3 + gTasks[taskId].data[3]; + gUnknown_03004280 = r2 + gTasks[taskId].data[4]; + src = gPlttBufferFaded + 0x100 + r6 * 16; + dst = gPlttBufferFaded + 0x100 - 112; + DmaCopy32(3, src, dst, 32); + } +} + +static void ScriptCmd_clearmonbg(void) +{ + u8 r4; + u8 r5; + u8 taskId; + + gBattleAnimScriptPtr++; + r4 = SCRIPT_READ_8(gBattleAnimScriptPtr); + if (r4 == 0) + r4 = 2; + else if (r4 == 1) + r4 = 3; + if (r4 == 0 || r4 == 2) + r5 = gBattleAnimPlayerMonIndex; + else + r5 = gBattleAnimEnemyMonIndex; + if (gMonAnimTaskIdArray[0] != 0xFF) + gSprites[gObjectBankIDs[r5]].invisible = FALSE; + if (r4 > 1 && gMonAnimTaskIdArray[1] != 0xFF) + gSprites[gObjectBankIDs[r5 ^ 2]].invisible = FALSE; + else + r4 = 0; + taskId = CreateTask(sub_807672C, 5); + gTasks[taskId].data[0] = r4; + gTasks[taskId].data[2] = r5; + gBattleAnimScriptPtr++; +} + +static void sub_807672C(u8 taskId) +{ + u8 var; + u8 r4; + + gTasks[taskId].data[1]++; + if (gTasks[taskId].data[1] != 1) + { + var = GetBankIdentity(gTasks[taskId].data[2]); + var += 0xFF; + if (var <= 1 || IsContest() != 0) + r4 = 0; + else + r4 = 1; + if (gMonAnimTaskIdArray[0] != 0xFF) + { + sub_8076464(r4); + DestroyTask(gMonAnimTaskIdArray[0]); + gMonAnimTaskIdArray[0] = 0xFF; + } + if (gTasks[taskId].data[0] > 1) + { + sub_8076464(r4 ^ 1); + DestroyTask(gMonAnimTaskIdArray[1]); + gMonAnimTaskIdArray[1] = 0xFF; + } + DestroyTask(taskId); + } +} + +static void ScriptCmd_monbg_22(void) +{ + u8 r5; + u8 r4; + u8 r0; + u8 r1; + + gBattleAnimScriptPtr++; + r5 = SCRIPT_READ_8(gBattleAnimScriptPtr); + if (r5 == 0) + r5 = 2; + else if (r5 == 1) + r5 = 3; + if (r5 == 0 || r5 == 2) + r4 = gBattleAnimPlayerMonIndex; + else + r4 = gBattleAnimEnemyMonIndex; + if (b_side_obj__get_some_boolean(r4)) + { + r0 = GetBankIdentity(r4); + r0 += 0xFF; + if (r0 <= 1 || IsContest() != 0) + r1 = 0; + else + r1 = 1; + sub_8076034(r4, r1); + gSprites[gObjectBankIDs[r4]].invisible = FALSE; + } + r4 ^= 2; + if (r5 > 1 && b_side_obj__get_some_boolean(r4)) + { + r0 = GetBankIdentity(r4); + r0 += 0xFF; + if (r0 <= 1 || IsContest() != 0) + r1 = 0; + else + r1 = 1; + sub_8076034(r4, r1); + gSprites[gObjectBankIDs[r4]].invisible = FALSE; + } + gBattleAnimScriptPtr++; +} + +static void ScriptCmd_clearmonbg_23(void) +{ + u8 r5; + u8 r6; + u8 taskId; + + gBattleAnimScriptPtr++; + r5 = SCRIPT_READ_8(gBattleAnimScriptPtr); + if (r5 == 0) + r5 = 2; + else if (r5 == 1) + r5 = 3; + if (r5 == 0 || r5 == 2) + r6 = gBattleAnimPlayerMonIndex; + else + r6 = gBattleAnimEnemyMonIndex; + if (b_side_obj__get_some_boolean(r6)) + gSprites[gObjectBankIDs[r6]].invisible = FALSE; + if (r5 > 1 && b_side_obj__get_some_boolean(r6 ^ 2)) + gSprites[gObjectBankIDs[r6 ^ 2]].invisible = FALSE; + else + r5 = 0; + taskId = CreateTask(sub_80769A4, 5); + gTasks[taskId].data[0] = r5; + gTasks[taskId].data[2] = r6; + gBattleAnimScriptPtr++; +} + +static void sub_80769A4(u8 taskId) +{ + u8 r0; + u8 r4; + u8 r5; + + gTasks[taskId].data[1]++; + if (gTasks[taskId].data[1] != 1) + { + r4 = gTasks[taskId].data[2]; + r0 = GetBankIdentity(r4); + r0 += 0xFF; + if (r0 <= 1 || IsContest() != 0) + r5 = 0; + else + r5 = 1; + if (b_side_obj__get_some_boolean(r4)) + sub_8076464(r5); + if (gTasks[taskId].data[0] > 1 && b_side_obj__get_some_boolean(r4 ^ 2)) + sub_8076464(r5 ^ 1); + DestroyTask(taskId); + } +} + +static void ScriptCmd_setalpha(void) +{ + u16 r3; + u16 r1; + + gBattleAnimScriptPtr++; + r3 = *(gBattleAnimScriptPtr++); + r1 = *(gBattleAnimScriptPtr++) << 8; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = r3 | r1; +} + +static void ScriptCmd_setbldcnt(void) +{ + u16 r3; + u16 r1; + + gBattleAnimScriptPtr++; + r3 = *(gBattleAnimScriptPtr++); + r1 = *(gBattleAnimScriptPtr++) << 8; + REG_BLDCNT = r3 | r1; +} + +static void ScriptCmd_blendoff(void) +{ + gBattleAnimScriptPtr++; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; +} + +static void ScriptCmd_call(void) +{ + u32 addr; + + gBattleAnimScriptPtr++; + gBattleAnimScriptRetAddr = gBattleAnimScriptPtr + 4; + addr = SCRIPT_READ_32(gBattleAnimScriptPtr); + gBattleAnimScriptPtr = (u8 *)addr; +} + +static void ScriptCmd_return(void) +{ + gBattleAnimScriptPtr = gBattleAnimScriptRetAddr; +} + +static void ScriptCmd_setvar(void) +{ + const u8 *addr = gBattleAnimScriptPtr; + u16 r4; + u8 r2; + + gBattleAnimScriptPtr++; + r2 = SCRIPT_READ_8(gBattleAnimScriptPtr); + gBattleAnimScriptPtr++; + r4 = SCRIPT_READ_16(gBattleAnimScriptPtr); + gBattleAnimScriptPtr = addr + 4; + gBattleAnimArgs[r2] = r4; +} + +static void ScriptCmd_ifelse(void) +{ + u32 addr; + + gBattleAnimScriptPtr++; + if (gUnknown_0202F7C4 & 1) + gBattleAnimScriptPtr += 4; + addr = SCRIPT_READ_32(gBattleAnimScriptPtr); + gBattleAnimScriptPtr = (u8 *)addr; +} + +static void ScriptCmd_jumpif(void) +{ + u8 r1; + u32 addr; + + gBattleAnimScriptPtr++; + r1 = SCRIPT_READ_8(gBattleAnimScriptPtr); + gBattleAnimScriptPtr++; + if (r1 == gUnknown_0202F7C4) + { + addr = SCRIPT_READ_32(gBattleAnimScriptPtr); + gBattleAnimScriptPtr = (u8 *)addr; + } + else + { + gBattleAnimScriptPtr += 4; + } +} + +static void ScriptCmd_jump(void) +{ + u32 addr; + + gBattleAnimScriptPtr++; + addr = SCRIPT_READ_32(gBattleAnimScriptPtr); + gBattleAnimScriptPtr = (u8 *)addr; +} + +// Uses of this function that rely on a TRUE return are expecting inBattle to not be ticked as defined in contest behavior. As a result, if misused, this function cannot reliably discern between field and contest status and could result in undefined behavior. +bool8 IsContest(void) +{ + if (!gMain.inBattle) + return TRUE; + else + return FALSE; +} + +static void ScriptCmd_fadetobg(void) +{ + u8 r4; + u8 taskId; + + gBattleAnimScriptPtr++; + r4 = SCRIPT_READ_8(gBattleAnimScriptPtr); + gBattleAnimScriptPtr++; + taskId = CreateTask(task_p5_load_battle_screen_elements, 5); + gTasks[taskId].data[0] = r4; + gUnknown_0202F7C5 = 1; +} + +static void ScriptCmd_fadetobg_25(void) +{ + u8 r8; + u8 r7; + u8 r6; + u8 taskId; + + gBattleAnimScriptPtr++; + r8 = gBattleAnimScriptPtr[0]; + r7 = gBattleAnimScriptPtr[1]; + r6 = gBattleAnimScriptPtr[2]; + gBattleAnimScriptPtr += 3; + taskId = CreateTask(task_p5_load_battle_screen_elements, 5); + if (IsContest() != 0) + gTasks[taskId].data[0] = r6; + else if (GetBankSide(gBattleAnimEnemyMonIndex) == 0) + gTasks[taskId].data[0] = r7; + else + gTasks[taskId].data[0] = r8; + gUnknown_0202F7C5 = 1; +} + +static void task_p5_load_battle_screen_elements(u8 taskId) +{ + if (gTasks[taskId].data[10] == 0) + { + BeginHardwarePaletteFade(0xE8, 0, 0, 16, 0); + gTasks[taskId].data[10]++; + return; + } + if (gPaletteFade.active) + return; + if (gTasks[taskId].data[10] == 1) + { + gTasks[taskId].data[10]++; + gUnknown_0202F7C5 = 2; + } + else if (gTasks[taskId].data[10] == 2) + { + s16 data0 = (u16)gTasks[taskId].data[0]; + + if (data0 == -1) + dp01t_11_3_message_for_player_only(); + else + sub_8076DB8(data0); + BeginHardwarePaletteFade(0xE8, 0, 16, 0, 1); + gTasks[taskId].data[10]++; + return; + } + if (gPaletteFade.active) + return; + if (gTasks[taskId].data[10] == 3) + { + DestroyTask(taskId); + gUnknown_0202F7C5 = 0; + } +} + +static void sub_8076DB8(u16 a) +{ + if (IsContest()) + { + void *tilemap = gBattleAnimBackgroundTable[a].tilemap; + void *dmaSrc; + void *dmaDest; + + sub_800D238(tilemap, IsContest() ? EWRAM_14800 : EWRAM_18000); + sub_80763FC(sub_80789BC(), IsContest() ? EWRAM_14800 : EWRAM_18000, 0x100, 0); + dmaSrc = IsContest() ? EWRAM_14800 : EWRAM_18000; + dmaDest = (void *)(VRAM + 0xD000); + DmaCopy32(3, dmaSrc, dmaDest, 0x800); + LZDecompressVram(gBattleAnimBackgroundTable[a].image, (void *)(VRAM + 0x2000)); + LoadCompressedPalette(gBattleAnimBackgroundTable[a].palette, sub_80789BC() * 16, 32); + } + else + { + LZDecompressVram(gBattleAnimBackgroundTable[a].tilemap, (void *)(VRAM + 0xD000)); + LZDecompressVram(gBattleAnimBackgroundTable[a].image, (void *)(VRAM + 0x8000)); + LoadCompressedPalette(gBattleAnimBackgroundTable[a].palette, 32, 32); + } +} + +static void dp01t_11_3_message_for_player_only(void) +{ + if (IsContest()) + sub_80AB2AC(); + else + sub_800D7B8(); +} + +static void ScriptCmd_restorebg(void) +{ + u8 taskId; + + gBattleAnimScriptPtr++; + taskId = CreateTask(task_p5_load_battle_screen_elements, 5); + gTasks[taskId].data[0] = 0xFFFF; + gUnknown_0202F7C5 = 1; +} + +static void ScriptCmd_waitbgfadeout(void) +{ + if (gUnknown_0202F7C5 == 2) + { + gBattleAnimScriptPtr++; + gAnimFramesToWait = 0; + } + else + { + gAnimFramesToWait = 1; + } +} + +static void ScriptCmd_waitbgfadein(void) +{ + if (gUnknown_0202F7C5 == 0) + { + gBattleAnimScriptPtr++; + gAnimFramesToWait = 0; + } + else + { + gAnimFramesToWait = 1; + } +} + +static void ScriptCmd_changebg(void) +{ + gBattleAnimScriptPtr++; + sub_8076DB8(SCRIPT_READ_8(gBattleAnimScriptPtr)); + gBattleAnimScriptPtr++; +} + +//Weird control flow +/* +s8 sub_8076F98(s8 a) +{ + if (!IsContest() && (EWRAM_17810[gBattleAnimPlayerMonIndex].unk0 & 0x10)) + { + a = GetBankSide(gBattleAnimPlayerMonIndex) ? 0xC0 : 0x3F; + } + //_08076FDC + else + { + if (IsContest()) + { + if (gBattleAnimPlayerMonIndex == gBattleAnimEnemyMonIndex && gBattleAnimPlayerMonIndex == 2 + && a == 0x3F) + { + //jump to _0807707A + if (a < -0x40) + a = 0xC0; + return a; + } + } + //_08077004 + else + { + if (GetBankSide(gBattleAnimPlayerMonIndex) == 0) + { + if (GetBankSide(gBattleAnimEnemyMonIndex) == 0) + } + //_08077042 + else + { + + } + //_0807706C + } + } + //_0807706E +} +*/ +__attribute__((naked)) +s8 sub_8076F98(s8 a) +{ + asm(".syntax unified\n\ + push {r4,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + bl IsContest\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08076FDC\n\ + ldr r0, _08076FD4 @ =gBattleAnimPlayerMonIndex\n\ + ldrb r2, [r0]\n\ + lsls r0, r2, 1\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + ldr r1, _08076FD8 @ =0x02017810\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08076FDC\n\ + adds r0, r2, 0\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + movs r4, 0xC0\n\ + cmp r0, 0\n\ + beq _0807706E\n\ + movs r4, 0x3F\n\ + b _0807706E\n\ + .align 2, 0\n\ +_08076FD4: .4byte gBattleAnimPlayerMonIndex\n\ +_08076FD8: .4byte 0x02017810\n\ +_08076FDC:\n\ + bl IsContest\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08077004\n\ + ldr r0, _08076FFC @ =gBattleAnimPlayerMonIndex\n\ + ldr r1, _08077000 @ =gBattleAnimEnemyMonIndex\n\ + ldrb r0, [r0]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bne _08077068\n\ + cmp r0, 0x2\n\ + bne _08077068\n\ + cmp r4, 0x3F\n\ + beq _0807707A\n\ + b _08077068\n\ + .align 2, 0\n\ +_08076FFC: .4byte gBattleAnimPlayerMonIndex\n\ +_08077000: .4byte gBattleAnimEnemyMonIndex\n\ +_08077004:\n\ + ldr r0, _0807702C @ =gBattleAnimPlayerMonIndex\n\ + ldrb r0, [r0]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08077042\n\ + ldr r0, _08077030 @ =gBattleAnimEnemyMonIndex\n\ + ldrb r0, [r0]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0807706E\n\ + lsls r0, r4, 24\n\ + asrs r1, r0, 24\n\ + cmp r1, 0x3F\n\ + bne _08077034\n\ + movs r4, 0xC0\n\ + b _0807706E\n\ + .align 2, 0\n\ +_0807702C: .4byte gBattleAnimPlayerMonIndex\n\ +_08077030: .4byte gBattleAnimEnemyMonIndex\n\ +_08077034:\n\ + movs r0, 0x40\n\ + negs r0, r0\n\ + cmp r1, r0\n\ + beq _0807706E\n\ + negs r0, r1\n\ + lsls r0, 24\n\ + b _0807706C\n\ +_08077042:\n\ + ldr r0, _08077064 @ =gBattleAnimEnemyMonIndex\n\ + ldrb r0, [r0]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _08077068\n\ + lsls r0, r4, 24\n\ + asrs r0, 24\n\ + movs r1, 0x40\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + bne _0807706E\n\ + movs r4, 0x3F\n\ + b _0807706E\n\ + .align 2, 0\n\ +_08077064: .4byte gBattleAnimEnemyMonIndex\n\ +_08077068:\n\ + lsls r0, r4, 24\n\ + negs r0, r0\n\ +_0807706C:\n\ + lsrs r4, r0, 24\n\ +_0807706E:\n\ + lsls r0, r4, 24\n\ + asrs r0, 24\n\ + cmp r0, 0x3F\n\ + ble _0807707A\n\ + movs r4, 0x3F\n\ + b _08077088\n\ +_0807707A:\n\ + lsls r0, r4, 24\n\ + asrs r0, 24\n\ + movs r1, 0x40\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + bge _08077088\n\ + movs r4, 0xC0\n\ +_08077088:\n\ + lsls r0, r4, 24\n\ + asrs r0, 24\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} + +s8 sub_8077094(s8 a) +{ + if (!IsContest() && (EWRAM_17810[gBattleAnimPlayerMonIndex].unk0 & 0x10)) + { + if (GetBankSide(gBattleAnimPlayerMonIndex) != 0) + a = 0x3F; + else + a = 0xC0; + } + else + { + if (GetBankSide(gBattleAnimPlayerMonIndex) != 0 || IsContest() != 0) + a = -a; + } + return a; +} + +s16 sub_8077104(s16 a) +{ + s16 var = a; + + if (var > 63) + var = 63; + else if (var < -64) + var = -64; + return var; +} + +s16 sub_807712C(s16 a, s16 b, s16 c) +{ + u16 var; + + if (a < b) + var = ((c < 0) ? -c : c); + else if (a > b) + var = -((c < 0) ? -c : c); + else + var = 0; + return var; +} + +static void ScriptCmd_panse_19(void) +{ + u16 r4; + s8 r0; + + gBattleAnimScriptPtr++; + r4 = SCRIPT_READ_16(gBattleAnimScriptPtr); + r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); + PlaySE12WithPanning(r4, sub_8076F98(r0)); + gBattleAnimScriptPtr += 3; +} + +static void ScriptCmd_setpan(void) +{ + s8 r0; + + gBattleAnimScriptPtr++; + r0 = SCRIPT_READ_8(gBattleAnimScriptPtr); + SE12PanpotControl(sub_8076F98(r0)); + gBattleAnimScriptPtr++; +} + +static void ScriptCmd_panse_1B(void) +{ + u16 songNum; + s8 r0; + s8 r4; + s8 r6; + u8 r7; + s8 panning; + s8 r8; + u8 taskId; + + gBattleAnimScriptPtr++; + songNum = SCRIPT_READ_16(gBattleAnimScriptPtr); + r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); + r4 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); + r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4); + r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 5); + panning = sub_8076F98(r0); + r8 = sub_8076F98(r4); + r4 = sub_807712C(panning, r8, r6); + taskId = CreateTask(c3_08073CEC, 1); + gTasks[taskId].data[0] = panning; + gTasks[taskId].data[1] = r8; + gTasks[taskId].data[2] = r4; + gTasks[taskId].data[3] = r7; + gTasks[taskId].data[4] = panning; + PlaySE12WithPanning(songNum, panning); + gAnimSoundTaskCount++; + gBattleAnimScriptPtr += 6; +} + +#ifdef NONMATCHING +static void c3_08073CEC(u8 taskId) +{ + u16 r7 = 0; + s16 r0; + s16 r6; + s16 r3; + s16 r4; + int foo; + + r0 = gTasks[taskId].data[8]; + gTasks[taskId].data[8]++; + if (r0 >= gTasks[taskId].data[3]) + { + gTasks[taskId].data[8] = r7; + r6 = gTasks[taskId].data[0]; + r3 = gTasks[taskId].data[1]; + foo = gTasks[taskId].data[4] + gTasks[taskId].data[2]; + r4 = foo; + gTasks[taskId].data[4] = r4; + if (gTasks[taskId].data[2] == 0) + { + r4 = r3; + DestroyTask(taskId); + gAnimSoundTaskCount--; + } + //_080772D8 + else + { + if (r6 < r3) + { + if (r4 < r3) + goto check; + DestroyTask(taskId); + gAnimSoundTaskCount--; + } + else + { + if (r4 <= r3) + r7 = 1; + check: + if (r7 != 0) + { + DestroyTask(taskId); + gAnimSoundTaskCount--; + } + } + } + //_080772F8 + SE12PanpotControl(r4); + } + //_08077314 +} +#else +__attribute__((naked)) +static void c3_08073CEC(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + movs r7, 0\n\ + ldr r1, _080772D4 @ =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r2, r0, r1\n\ + ldrh r0, [r2, 0x18]\n\ + adds r1, r0, 0x1\n\ + strh r1, [r2, 0x18]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + movs r3, 0xE\n\ + ldrsh r1, [r2, r3]\n\ + cmp r0, r1\n\ + blt _08077314\n\ + strh r7, [r2, 0x18]\n\ + ldrh r6, [r2, 0x8]\n\ + ldrh r3, [r2, 0xA]\n\ + movs r4, 0x10\n\ + ldrsh r0, [r2, r4]\n\ + movs r4, 0xC\n\ + ldrsh r1, [r2, r4]\n\ + adds r0, r1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + strh r4, [r2, 0x10]\n\ + cmp r1, 0\n\ + bne _080772D8\n\ + lsls r2, r3, 16\n\ + b _080772FC\n\ + .align 2, 0\n\ +_080772D4: .4byte gTasks\n\ +_080772D8:\n\ + lsls r1, r6, 16\n\ + lsls r0, r3, 16\n\ + asrs r3, r0, 16\n\ + adds r2, r0, 0\n\ + cmp r1, r2\n\ + bge _080772EE\n\ + lsls r0, r4, 16\n\ + asrs r0, 16\n\ + cmp r0, r3\n\ + blt _080772F8\n\ + b _080772FC\n\ +_080772EE:\n\ + lsls r0, r4, 16\n\ + asrs r0, 16\n\ + cmp r0, r3\n\ + bgt _080772F8\n\ + movs r7, 0x1\n\ +_080772F8:\n\ + cmp r7, 0\n\ + beq _0807730C\n\ +_080772FC:\n\ + lsrs r4, r2, 16\n\ + adds r0, r5, 0\n\ + bl DestroyTask\n\ + ldr r1, _0807731C @ =gAnimSoundTaskCount\n\ + ldrb r0, [r1]\n\ + subs r0, 0x1\n\ + strb r0, [r1]\n\ +_0807730C:\n\ + lsls r0, r4, 24\n\ + asrs r0, 24\n\ + bl SE12PanpotControl\n\ +_08077314:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0807731C: .4byte gAnimSoundTaskCount\n\ + .syntax divided\n"); +} +#endif + +static void ScriptCmd_panse_26(void) +{ + u16 r8; + s8 r4; + s8 r5; + s8 r6; + u8 r10; + u8 taskId; + + gBattleAnimScriptPtr++; + r8 = SCRIPT_READ_16(gBattleAnimScriptPtr); + r4 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); + r5 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); + r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4); + r10 = SCRIPT_READ_8(gBattleAnimScriptPtr + 5); + taskId = CreateTask(c3_08073CEC, 1); + gTasks[taskId].data[0] = r4; + gTasks[taskId].data[1] = r5; + gTasks[taskId].data[2] = r6; + gTasks[taskId].data[3] = r10; + gTasks[taskId].data[4] = r4; + PlaySE12WithPanning(r8, r4); + gAnimSoundTaskCount++; + gBattleAnimScriptPtr += 6; +} + +static void ScriptCmd_panse_27(void) +{ + u16 r9; + u8 r4; + u8 r8; + u8 r7; + u8 r0; + s8 r6; + s8 r5; + s8 r4_2; + u8 taskId; + + gBattleAnimScriptPtr++; + r9 = SCRIPT_READ_16(gBattleAnimScriptPtr); + r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); + r4 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); + r8 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4); + r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 5); + r6 = sub_8077094(r0); + r5 = sub_8077094(r4); + r4_2 = sub_8077094(r8); + taskId = CreateTask(c3_08073CEC, 1); + gTasks[taskId].data[0] = r6; + gTasks[taskId].data[1] = r5; + gTasks[taskId].data[2] = r4_2; + gTasks[taskId].data[3] = r7; + gTasks[taskId].data[4] = r6; + PlaySE12WithPanning(r9, r6); + gAnimSoundTaskCount++; + gBattleAnimScriptPtr += 6; +} + +static void ScriptCmd_panse_1C(void) +{ + u16 r5; + u8 r0; + u8 r8; + u8 r9; + s8 r4; + u8 taskId; + + gBattleAnimScriptPtr++; + r5 = SCRIPT_READ_16(gBattleAnimScriptPtr); + r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); + r8 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); + r9 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4); + r4 = sub_8076F98(r0); + taskId = CreateTask(sub_80774FC, 1); + gTasks[taskId].data[0] = r5; + gTasks[taskId].data[1] = r4; + gTasks[taskId].data[2] = r8; + gTasks[taskId].data[3] = r9; + gTasks[taskId].data[8] = r8; + gTasks[taskId].func(taskId); + gAnimSoundTaskCount++; + gBattleAnimScriptPtr += 5; +} + +static void sub_80774FC(u8 taskId) +{ + s16 data8; + u16 r0; + s8 r1; + u8 r4; + + data8 = gTasks[taskId].data[8]; + gTasks[taskId].data[8]++; + if (data8 >= gTasks[taskId].data[2]) + { + gTasks[taskId].data[8] = 0; + r0 = gTasks[taskId].data[0]; + r1 = gTasks[taskId].data[1]; + gTasks[taskId].data[3]--; + r4 = gTasks[taskId].data[3]; + PlaySE12WithPanning(r0, r1); + if (r4 == 0) + { + DestroyTask(taskId); + gAnimSoundTaskCount--; + } + } +} + +static void ScriptCmd_panse_1D(void) +{ + u16 r5; + u8 r0; + u8 r8; + s8 r4; + u8 taskId; + + gBattleAnimScriptPtr++; + r5 = SCRIPT_READ_16(gBattleAnimScriptPtr); + r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); + r8 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); + r4 = sub_8076F98(r0); + taskId = CreateTask(sub_80775CC, 1); + gTasks[taskId].data[0] = r5; + gTasks[taskId].data[1] = r4; + gTasks[taskId].data[2] = r8; + gAnimSoundTaskCount++; + gBattleAnimScriptPtr += 4; +} + +static void sub_80775CC(u8 taskId) +{ + s16 r0; + + r0 = gTasks[taskId].data[2]; + gTasks[taskId].data[2]--; + if (r0 <= 0) + { + PlaySE12WithPanning(gTasks[taskId].data[0], gTasks[taskId].data[1]); + DestroyTask(taskId); + gAnimSoundTaskCount--; + } +} + +static void ScriptCmd_createtask_1F(void) +{ + TaskFunc func; + u8 numArgs; + int i; + u8 taskId; + + gBattleAnimScriptPtr++; + func = (TaskFunc)SCRIPT_READ_32(gBattleAnimScriptPtr); + gBattleAnimScriptPtr += 4; + numArgs = SCRIPT_READ_8(gBattleAnimScriptPtr); + gBattleAnimScriptPtr++; + for (i = 0; i < numArgs; i++) + { + gBattleAnimArgs[i] = SCRIPT_READ_16(gBattleAnimScriptPtr); + gBattleAnimScriptPtr += 2; + } + taskId = CreateTask(func, 1); + func(taskId); + gAnimSoundTaskCount++; +} + +static void ScriptCmd_waitsound(void) +{ + if (gAnimSoundTaskCount != 0) + { + gSoundAnimFramesToWait = 0; + gAnimFramesToWait = 1; + } + else if (IsSEPlaying()) + { + if (++gSoundAnimFramesToWait > 90) + { + m4aMPlayStop(&gMPlay_SE1); + m4aMPlayStop(&gMPlay_SE2); + gSoundAnimFramesToWait = 0; + } + else + { + gAnimFramesToWait = 1; + } + } + else + { + gSoundAnimFramesToWait = 0; + gBattleAnimScriptPtr++; + gAnimFramesToWait = 0; + } +} + +static void ScriptCmd_jumpvareq(void) +{ + u8 r2; + s16 r1; + u8 *addr; + + gBattleAnimScriptPtr++; + r2 = SCRIPT_READ_8(gBattleAnimScriptPtr); + r1 = SCRIPT_READ_16(gBattleAnimScriptPtr + 1); + if (r1 == gBattleAnimArgs[r2]) + { + addr = (u8 *)SCRIPT_READ_32(gBattleAnimScriptPtr + 3); + gBattleAnimScriptPtr = addr; + } + else + { + gBattleAnimScriptPtr += 7; + } +} + +static void ScriptCmd_jumpunkcond(void) +{ + u8 *addr; + + gBattleAnimScriptPtr++; + if (IsContest()) + { + addr = (u8 *)SCRIPT_READ_32(gBattleAnimScriptPtr); + gBattleAnimScriptPtr = addr; + } + else + { + gBattleAnimScriptPtr += 4; + } +} + +static void ScriptCmd_monbgprio_28(void) +{ + u8 r2; + u8 r0; + u8 r4; + + r2 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); + gBattleAnimScriptPtr += 2; + if (r2 != 0) + r0 = gBattleAnimEnemyMonIndex; + else + r0 = gBattleAnimPlayerMonIndex; + r4 = GetBankIdentity(r0); + if (!IsContest() && (r4 == 0 || r4 == 3)) + { + REG_BG1CNT_BITFIELD.priority = 1; + REG_BG2CNT_BITFIELD.priority = 2; + } +} + +static void ScriptCmd_monbgprio_29(void) +{ + gBattleAnimScriptPtr++; + if (!IsContest()) + { + REG_BG1CNT_BITFIELD.priority = 1; + REG_BG2CNT_BITFIELD.priority = 2; + } +} + +static void ScriptCmd_monbgprio_2A(void) +{ + u8 r6; + u8 r4; + u8 r0; + + r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); + gBattleAnimScriptPtr += 2; + if (GetBankSide(gBattleAnimPlayerMonIndex) != GetBankSide(gBattleAnimEnemyMonIndex)) + { + if (r6 != 0) + r0 = gBattleAnimEnemyMonIndex; + else + r0 = gBattleAnimPlayerMonIndex; + r4 = GetBankIdentity(r0); + if (!IsContest() && (r4 == 0 || r4 == 3)) + { + REG_BG1CNT_BITFIELD.priority = 1; + REG_BG2CNT_BITFIELD.priority = 2; + } + } +} + +static void ScriptCmd_invisible(void) +{ + u8 r0; + u8 spriteId; + + r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); + spriteId = obj_id_for_side_relative_to_move(r0); + if (spriteId != 0xFF) + { + gSprites[spriteId].invisible = TRUE; + } + gBattleAnimScriptPtr += 2; +} + +static void ScriptCmd_visible(void) +{ + u8 r0; + u8 spriteId; + + r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); + spriteId = obj_id_for_side_relative_to_move(r0); + if (spriteId != 0xFF) + { + gSprites[spriteId].invisible = FALSE; + } + gBattleAnimScriptPtr += 2; +} + +static void ScriptCmd_doublebattle_2D(void) +{ + u8 r7; + u8 r4; + u8 spriteId; + + r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); + gBattleAnimScriptPtr += 2; + if (!IsContest() && IsDoubleBattle() + && GetBankSide(gBattleAnimPlayerMonIndex) == GetBankSide(gBattleAnimEnemyMonIndex)) + { + if (r7 == 0) + { + r4 = GetBankIdentity_permutated(gBattleAnimPlayerMonIndex); + spriteId = obj_id_for_side_relative_to_move(0); + } + else + { + r4 = GetBankIdentity_permutated(gBattleAnimEnemyMonIndex); + spriteId = obj_id_for_side_relative_to_move(1); + } + if (spriteId != 0xFF) + { + gSprites[spriteId].invisible = FALSE; + if (r4 == 2) + gSprites[spriteId].oam.priority = 3; + if (r4 == 1) + sub_8076464(0); + else + sub_8076464(1); + } + } +} + +static void ScriptCmd_doublebattle_2E(void) +{ + u8 r7; + u8 r4; + u8 spriteId; + + r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); + gBattleAnimScriptPtr += 2; + if (!IsContest() && IsDoubleBattle() + && GetBankSide(gBattleAnimPlayerMonIndex) == GetBankSide(gBattleAnimEnemyMonIndex)) + { + if (r7 == 0) + { + r4 = GetBankIdentity_permutated(gBattleAnimPlayerMonIndex); + spriteId = obj_id_for_side_relative_to_move(0); + } + else + { + r4 = GetBankIdentity_permutated(gBattleAnimEnemyMonIndex); + spriteId = obj_id_for_side_relative_to_move(1); + } + if (spriteId != 0xFF && r4 == 2) + { + gSprites[spriteId].oam.priority = 2; + } + } +} + +static void ScriptCmd_stopsound(void) +{ + m4aMPlayStop(&gMPlay_SE1); + m4aMPlayStop(&gMPlay_SE2); + gBattleAnimScriptPtr++; +} diff --git a/src/battle/battle_anim_80A7E7C.c b/src/battle/battle_anim_80A7E7C.c new file mode 100644 index 000000000..31984977f --- /dev/null +++ b/src/battle/battle_anim_80A7E7C.c @@ -0,0 +1,940 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" + +#define SPRITE gSprites[TASK.data[0]] + +extern s16 gBattleAnimArgs[8]; + +extern u8 gObjectBankIDs[]; +extern s32 gMoveDmgMoveAnim; +extern u16 gMovePowerMoveAnim; +extern u8 gBattleAnimPlayerMonIndex; +extern u8 gBattleAnimEnemyMonIndex; + +static void sub_80A7EF0(u8 taskId); +static void sub_80A808C(u8 taskId); +static void sub_80A81D8(u8 taskId); +static void sub_80A8374(u8 taskId); +static void sub_80A8488(u8 taskId); +static void sub_80A85A4(struct Sprite *sprite); +void sub_80A8614(struct Sprite* sprite); +static void sub_80A86F4(struct Sprite *sprite); +static void sub_80A88F0(struct Sprite *sprite); +static void sub_80A89B4(u8 taskId); +static void sub_80A8A18(u8 taskId); +static void sub_80A8C0C(u8 taskId); +static void sub_80A8D8C(u8 taskId); +void sub_80A8FD8(u8 taskId); +static void sub_80A913C(u8 taskId); + +void sub_80A7E7C(u8 taskId) +{ + u8 sprite; + sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + if (sprite == 0xff) + { + DestroyAnimVisualTask(taskId); + return; + } + gSprites[sprite].pos2.x = gBattleAnimArgs[1]; + gSprites[sprite].pos2.y = gBattleAnimArgs[2]; + TASK.data[0] = sprite; + TASK.data[1] = gBattleAnimArgs[3]; + TASK.data[2] = gBattleAnimArgs[4]; + TASK.data[3] = gBattleAnimArgs[4]; + TASK.data[4] = gBattleAnimArgs[1]; + TASK.data[5] = gBattleAnimArgs[2]; + TASK.func = sub_80A7EF0; + sub_80A7EF0(taskId); +} + +static void sub_80A7EF0(u8 taskId) +{ + if (TASK.data[3] == 0) + { + if (SPRITE.pos2.x == 0) + { + SPRITE.pos2.x = TASK.data[4]; + } + else + { + SPRITE.pos2.x = 0; + } + if (SPRITE.pos2.y == 0) + { + SPRITE.pos2.y = TASK.data[5]; + } + else + { + SPRITE.pos2.y = 0; + } + TASK.data[3] = TASK.data[2]; + if (--TASK.data[1] == 0) + { + SPRITE.pos2.x = 0; + SPRITE.pos2.y = 0; + DestroyAnimVisualTask(taskId); + return; + } + } + else + { + TASK.data[3]--; + } +} + + +void sub_80A7FA0(u8 taskId) +{ + u8 sprite; + bool8 r6; + u8 side; + r6 = 0; + if (gBattleAnimArgs[0] < 4) + { + sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + if (sprite == 0xff) + { + DestroyAnimVisualTask(taskId); + return; + } + } + else if (gBattleAnimArgs[0] != 8) + { + switch (gBattleAnimArgs[0]) + { + case 4: + side = GetBankByPlayerAI(0); + break; + case 5: + side = GetBankByPlayerAI(2); + break; + case 6: + side = GetBankByPlayerAI(1); + break; + case 7: + default: + side = GetBankByPlayerAI(3); + break; + } + if (b_side_obj__get_some_boolean(side) == FALSE) + { + r6 = 1; + } + sprite = gObjectBankIDs[side]; + } + else + { + sprite = gObjectBankIDs[gBattleAnimPlayerMonIndex]; + } + if (r6) + { + DestroyAnimVisualTask(taskId); + return; + } + gSprites[sprite].pos2.x = gBattleAnimArgs[1]; + gSprites[sprite].pos2.y = gBattleAnimArgs[2]; + TASK.data[0] = sprite; + TASK.data[1] = gBattleAnimArgs[3]; + TASK.data[2] = gBattleAnimArgs[4]; + TASK.data[3] = gBattleAnimArgs[4]; + TASK.data[4] = gBattleAnimArgs[1]; + TASK.data[5] = gBattleAnimArgs[2]; + TASK.func = sub_80A808C; + sub_80A808C(taskId); +} + +static void sub_80A808C(u8 taskId) +{ + if (TASK.data[3] == 0) + { + if (SPRITE.pos2.x == TASK.data[4]) + { + SPRITE.pos2.x = -TASK.data[4]; + } + else + { + SPRITE.pos2.x = TASK.data[4]; + } + if (SPRITE.pos2.y == TASK.data[5]) + { + SPRITE.pos2.y = -TASK.data[5]; + } + else + { + SPRITE.pos2.y = TASK.data[5]; + } + TASK.data[3] = TASK.data[2]; + if (--TASK.data[1] == 0) + { + SPRITE.pos2.x = 0; + SPRITE.pos2.y = 0; + DestroyAnimVisualTask(taskId); + return; + } + } + else + { + TASK.data[3]--; + } +} + +void sub_80A8154(u8 taskId) +{ + u8 sprite; + sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + if (sprite == 0xff) + { + DestroyAnimVisualTask(taskId); + return; + } + gSprites[sprite].pos2.x += gBattleAnimArgs[1]; + gSprites[sprite].pos2.y += gBattleAnimArgs[2]; + TASK.data[0] = sprite; + TASK.data[1] = 0; + TASK.data[2] = gBattleAnimArgs[3]; + TASK.data[3] = 0; + TASK.data[4] = gBattleAnimArgs[4]; + TASK.data[5] = gBattleAnimArgs[1] * 2; + TASK.data[6] = gBattleAnimArgs[2] * 2; + TASK.func = sub_80A81D8; + sub_80A81D8(taskId); +} + +static void sub_80A81D8(u8 taskId) +{ + if (TASK.data[3] == 0) + { + if (TASK.data[1] & 1) + { + SPRITE.pos2.x += TASK.data[5]; + SPRITE.pos2.y += TASK.data[6]; + } + else + { + SPRITE.pos2.x -= TASK.data[5]; + SPRITE.pos2.y -= TASK.data[6]; + } + TASK.data[3] = TASK.data[4]; + if (++TASK.data[1] >= TASK.data[2]) + { + if (TASK.data[1] & 1) + { + SPRITE.pos2.x += TASK.data[5] / 2; + SPRITE.pos2.y += TASK.data[6] / 2; + } + else + { + SPRITE.pos2.x -= TASK.data[5] / 2; + SPRITE.pos2.y -= TASK.data[6] / 2; + } + DestroyAnimVisualTask(taskId); + return; + } + } + else + { + TASK.data[3]--; + } +} + +void sub_80A8314(u8 taskId) +{ + u8 sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + gSprites[sprite].pos2.x = gBattleAnimArgs[1]; + TASK.data[0] = sprite; + TASK.data[1] = gBattleAnimArgs[1]; + TASK.data[2] = gBattleAnimArgs[2]; + TASK.data[3] = gBattleAnimArgs[3]; + TASK.data[4] = gBattleAnimArgs[4]; + TASK.func = sub_80A8374; + sub_80A8374(taskId); +} + +static void sub_80A8374(u8 taskId) +{ + s16 x; + u8 sprite; + sprite = TASK.data[0]; + x = TASK.data[1]; + if (TASK.data[2] == TASK.data[8]++) + { + TASK.data[8] = 0; + if (gSprites[sprite].pos2.x == x) + { + x = -x; + } + gSprites[sprite].pos2.x += x; + } + TASK.data[1] = x; + TASK.data[9] += TASK.data[3]; + gSprites[sprite].pos2.y = TASK.data[9] >> 8; + if (--TASK.data[4] == 0) + { + DestroyAnimVisualTask(taskId); + return; + } +} + +void sub_80A8408(u8 taskId) +{ + u8 i; + u8 sprite; + u8 v1; + v1 = 1; + sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + if (gBattleAnimArgs[4] > 5) + { + gBattleAnimArgs[4] = 5; + } + for (i = 0; i < gBattleAnimArgs[4]; i++) + { + v1 <<= 1; + } + TASK.data[0] = sprite; + TASK.data[1] = gBattleAnimArgs[1]; + TASK.data[2] = gBattleAnimArgs[2]; + TASK.data[3] = gBattleAnimArgs[3]; + TASK.data[4] = v1; + TASK.func = sub_80A8488; + sub_80A8488(taskId); +} + +static void sub_80A8488(u8 taskId) +{ + u8 sprite; + sprite = TASK.data[0]; + gSprites[sprite].pos2.x = Sin(TASK.data[5], TASK.data[1]); + gSprites[sprite].pos2.y = -Cos(TASK.data[5], TASK.data[2]); + gSprites[sprite].pos2.y += TASK.data[2]; + TASK.data[5] += TASK.data[4]; + TASK.data[5] &= 0xff; + if (TASK.data[5] == 0) + { + TASK.data[3]--; + } + if (TASK.data[3] == 0) + { + gSprites[sprite].pos2.x = 0; + gSprites[sprite].pos2.y = 0; + DestroyAnimVisualTask(taskId); + return; + } +} + +void sub_80A8500(u8 taskId) +{ + if (GetBankSide(gBattleAnimPlayerMonIndex)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + } + sub_80A8408(taskId); +} + +void sub_80A8530(struct Sprite *sprite) +{ + sprite->invisible = TRUE; + if (GetBankSide(gBattleAnimPlayerMonIndex)) + { + sprite->data1 = -gBattleAnimArgs[1]; + } + else + { + sprite->data1 = gBattleAnimArgs[1]; + } + sprite->data0 = gBattleAnimArgs[0]; + sprite->data2 = 0; + sprite->data3 = gObjectBankIDs[gBattleAnimPlayerMonIndex]; + sprite->data4 = gBattleAnimArgs[0]; + oamt_set_x3A_32(sprite, sub_80A85A4); + sprite->callback = sub_8078458; +} + +static void sub_80A85A4(struct Sprite *sprite) +{ + sprite->data0 = sprite->data4; + sprite->data1 = -sprite->data1; + sprite->callback = sub_8078458; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_80A85C8(struct Sprite *sprite) +{ + u8 spriteId; + sprite->invisible = TRUE; + spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[2]); + sprite->data0 = gBattleAnimArgs[0]; + sprite->data1 = 0; + sprite->data2 = gBattleAnimArgs[1]; + sprite->data3 = spriteId; + sprite->data4 = gBattleAnimArgs[0]; + oamt_set_x3A_32(sprite, sub_80A8614); + sprite->callback = sub_8078458; +} + +void sub_80A8614(struct Sprite *sprite) +{ + sprite->data0 = sprite->data4; + sprite->data2 = -sprite->data2; + sprite->callback = sub_8078458; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_80A8638(struct Sprite *sprite) +{ + int something; + int spriteId; + if (!gBattleAnimArgs[0]) + { + spriteId = gObjectBankIDs[gBattleAnimPlayerMonIndex]; + } + else + { + spriteId = gObjectBankIDs[gBattleAnimEnemyMonIndex]; + } + sprite->data0 = gBattleAnimArgs[2]; + sprite->data1 = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; + sprite->data2 = gSprites[spriteId].pos1.x; + sprite->data3 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; + sprite->data4 = gSprites[spriteId].pos1.y; + something = 0; + sub_8078A5C(sprite); + sprite->data3 = something; + sprite->data4 = something; + sprite->data5 = gSprites[spriteId].pos2.x; + sprite->data6 = gSprites[spriteId].pos2.y; + sprite->invisible = TRUE; + if (gBattleAnimArgs[1] == 1) + { + sprite->data2 = something; + } + else if (gBattleAnimArgs[1] == 2) + { + sprite->data1 = something; + } + sprite->data7 = gBattleAnimArgs[1]; + sprite->data7 |= spriteId << 8; + sprite->callback = sub_80A86F4; +} + +static void sub_80A86F4(struct Sprite *sprite) +{ + s8 spriteId; + u8 lo; + struct Sprite *sprite2; + lo = sprite->data7 & 0xff; + spriteId = sprite->data7 >> 8; + sprite2 = &gSprites[spriteId]; + if (sprite->data0 == 0) + { + if (lo < 2) + { + sprite2->pos2.x = 0; + } + if (lo == 2 || lo == 0) + { + sprite2->pos2.y = 0; + } + move_anim_8072740(sprite); + } + else + { + sprite->data0--; + sprite->data3 += sprite->data1; + sprite->data4 += sprite->data2; + sprite2->pos2.x = (s8)(sprite->data3 >> 8) + sprite->data5; + sprite2->pos2.y = (s8)(sprite->data4 >> 8) + sprite->data6; + } +} + +void sub_80A8764(struct Sprite *sprite) +{ + u8 v1; + u8 spriteId; + if (!gBattleAnimArgs[0]) + { + v1 = gBattleAnimPlayerMonIndex; + } + else + { + v1 = gBattleAnimEnemyMonIndex; + } + spriteId = gObjectBankIDs[v1]; + if (GetBankSide(v1)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + if (gBattleAnimArgs[3] == 1) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + } + sprite->data0 = gBattleAnimArgs[4]; + sprite->data1 = gSprites[spriteId].pos1.x; + sprite->data2 = gSprites[spriteId].pos1.x + gBattleAnimArgs[1]; + sprite->data3 = gSprites[spriteId].pos1.y; + sprite->data4 = gSprites[spriteId].pos1.y + gBattleAnimArgs[2]; + sub_8078A5C(sprite); + sprite->data3 = 0; + sprite->data4 = 0; + sprite->data5 = spriteId; + sprite->invisible = TRUE; + oamt_set_x3A_32(sprite, move_anim_8072740); + sprite->callback = sub_80784A8; +} + +void sub_80A8818(struct Sprite *sprite) +{ + u8 spriteId; + u8 v1; + sprite->invisible = TRUE; + if (!gBattleAnimArgs[0]) + { + v1 = gBattleAnimPlayerMonIndex; + } + else + { + v1 = gBattleAnimEnemyMonIndex; + } + spriteId = gObjectBankIDs[v1]; + if (GetBankSide(v1)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + if (gBattleAnimArgs[3] == 1) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + } + sprite->data0 = gBattleAnimArgs[4]; + sprite->data1 = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; + sprite->data2 = sprite->data1 + gBattleAnimArgs[1]; + sprite->data3 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; + sprite->data4 = sprite->data3 + gBattleAnimArgs[2]; + sub_8078A5C(sprite); + sprite->data3 = gSprites[spriteId].pos2.x << 8; + sprite->data4 = gSprites[spriteId].pos2.y << 8; + sprite->data5 = spriteId; + sprite->data6 = gBattleAnimArgs[5]; + if (!gBattleAnimArgs[5]) + { + oamt_set_x3A_32(sprite, move_anim_8072740); + } + else + { + oamt_set_x3A_32(sprite, sub_80A88F0); + } + sprite->callback = sub_80784A8; +} + + +static void sub_80A88F0(struct Sprite *sprite) +{ + gSprites[sprite->data5].pos2.x = 0; + gSprites[sprite->data5].pos2.y = 0; + move_anim_8072740(sprite); +} + +void sub_80A8920(u8 taskId) +{ + s16 r7; + r7 = 0x8000 / gBattleAnimArgs[3]; + if (GetBankSide(gBattleAnimPlayerMonIndex)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[5] = -gBattleAnimArgs[5]; + } + TASK.data[0] = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + TASK.data[1] = (gBattleAnimArgs[1] << 8) / gBattleAnimArgs[3]; + TASK.data[2] = gBattleAnimArgs[2]; + TASK.data[3] = gBattleAnimArgs[3]; + TASK.data[4] = gBattleAnimArgs[4]; + TASK.data[5] = (gBattleAnimArgs[5] << 8) / gBattleAnimArgs[6]; + TASK.data[6] = gBattleAnimArgs[6]; + TASK.data[7] = r7; + TASK.func = sub_80A89B4; +} + +static void sub_80A89B4(u8 taskId) +{ + u8 spriteId; + spriteId = TASK.data[0]; + TASK.data[11] += TASK.data[1]; + gSprites[spriteId].pos2.x = TASK.data[11] >> 8; + gSprites[spriteId].pos2.y = Sin((u8)(TASK.data[10] >> 8), TASK.data[2]); + TASK.data[10] += TASK.data[7]; + if (--TASK.data[3] == 0) + { + TASK.func = sub_80A8A18; + } +} + +static void sub_80A8A18(u8 taskId) +{ + u8 spriteId; + if (TASK.data[4] > 0) + { + TASK.data[4]--; + } + else + { + spriteId = TASK.data[0]; + TASK.data[12] += TASK.data[5]; + gSprites[spriteId].pos2.x = (TASK.data[12] >> 8) + (TASK.data[11] >> 8); + if (--TASK.data[6] == 0) + { + DestroyAnimVisualTask(taskId); + return; + } + } +} + +static void sub_80A8B3C(u8 taskId); + +void sub_80A8A80(u8 taskId) +{ + u8 spriteId; + switch (gBattleAnimArgs[0]) + { + case 0: + case 1: + spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + break; + case 2: + if (!b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) + { + DestroyAnimVisualTask(taskId); + return; + } + spriteId = gObjectBankIDs[gBattleAnimPlayerMonIndex ^ 2]; + break; + case 3: + if (!b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) + { + DestroyAnimVisualTask(taskId); + return; + } + spriteId = gObjectBankIDs[gBattleAnimEnemyMonIndex ^ 2]; + break; + default: + DestroyAnimVisualTask(taskId); + return; + } + TASK.data[0] = spriteId; + if (GetBankSide(gBattleAnimEnemyMonIndex)) + { + TASK.data[1] = gBattleAnimArgs[1]; + } + else + { + TASK.data[1] = -gBattleAnimArgs[1]; + } + TASK.func = sub_80A8B3C; +} + +static void sub_80A8B3C(u8 taskId) +{ + u8 spriteId = TASK.data[0]; + gSprites[spriteId].pos2.x += TASK.data[1]; + if (gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x + 0x20 > 0x130u) + { + DestroyAnimVisualTask(taskId); + return; + } +} + +void sub_80A8B88(u8 taskId) +{ + u8 spriteId; + if (GetBankSide(gBattleAnimPlayerMonIndex)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + } + spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[4]); + TASK.data[0] = gBattleAnimArgs[0]; + TASK.data[1] = gBattleAnimArgs[1]; + TASK.data[2] = gBattleAnimArgs[2]; + TASK.data[3] = gBattleAnimArgs[3]; + TASK.data[4] = spriteId; + if (gBattleAnimArgs[4] == 0) + { + TASK.data[5] = gBattleAnimPlayerMonIndex; + } + else + { + TASK.data[5] = gBattleAnimEnemyMonIndex; + } + TASK.data[12] = 1; + TASK.func = sub_80A8C0C; +} + +static void sub_80A8C0C(u8 taskId) +{ + s16 y; + u8 spriteId; + int index; + u16 val; + spriteId = TASK.data[4]; + val = TASK.data[10] + TASK.data[2]; + TASK.data[10] = val; + index = val >> 8; + y = Sin(index, TASK.data[1]); + if (TASK.data[0] == 0) + { + gSprites[spriteId].pos2.x = y; + } + else + { + if (GetBankSide(TASK.data[5]) == 0) + { + gSprites[spriteId].pos2.y = (y >= 0) ? y : -y; + } + else + { + gSprites[spriteId].pos2.y = (y >= 0) ? -y : y; + } + } + if (((index >= 0x80u) && (TASK.data[11] == 0) && (TASK.data[12] == 1)) + || ((index < 0x7fu) && (TASK.data[11] == 1) && (TASK.data[12] == 0))) + { + TASK.data[11] ^= 1; + TASK.data[12] ^= 1; + if (--TASK.data[3] == 0) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + return; + } + } +} + +void sub_80A8D34(u8 taskId) +{ + u8 spriteId; + spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[3]); + sub_8078E70(spriteId, gBattleAnimArgs[4]); + TASK.data[0] = gBattleAnimArgs[0]; + TASK.data[1] = gBattleAnimArgs[1]; + TASK.data[2] = gBattleAnimArgs[2]; + TASK.data[3] = gBattleAnimArgs[2]; + TASK.data[4] = spriteId; + TASK.data[10] = 0x100; + TASK.data[11] = 0x100; + TASK.func = sub_80A8D8C; +} + +static void sub_80A8D8C(u8 taskId) +{ + u8 spriteId; + TASK.data[10] += TASK.data[0]; + TASK.data[11] += TASK.data[1]; + spriteId = TASK.data[4]; + obj_id_set_rotscale(spriteId, TASK.data[10], TASK.data[11], 0); + if (--TASK.data[2] == 0) + { + if (TASK.data[3] > 0) + { + TASK.data[0] = -TASK.data[0]; + TASK.data[1] = -TASK.data[1]; + TASK.data[2] = TASK.data[3]; + TASK.data[3] = 0; + } + else + { + sub_8078F40(spriteId); + DestroyAnimVisualTask(taskId); + return; + } + } +} + +void sub_80A8E04(u8 taskId) +{ + u8 spriteId; + spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[2]); + sub_8078E70(spriteId, 0); + TASK.data[1] = 0; + TASK.data[2] = gBattleAnimArgs[0]; + if (gBattleAnimArgs[3] != 1) + { + TASK.data[3] = 0; + } + else + { + TASK.data[3] = gBattleAnimArgs[0] * gBattleAnimArgs[1]; + } + TASK.data[4] = gBattleAnimArgs[1]; + TASK.data[5] = spriteId; + TASK.data[6] = gBattleAnimArgs[3]; + if (IsContest()) + { + TASK.data[7] = 1; + } + else + { + if (gBattleAnimArgs[2] == 0) + { + TASK.data[7] = !GetBankSide(gBattleAnimPlayerMonIndex); + } + else + { + TASK.data[7] = !GetBankSide(gBattleAnimEnemyMonIndex); + } + } + if (TASK.data[7]) + { + if (!IsContest()) + { + TASK.data[3] *= -1; + TASK.data[4] *= -1; + } + } + TASK.func = sub_80A8FD8; +} + +void sub_80A8EFC(u8 taskId) +{ + u8 spriteId; + spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[2]); + sub_8078E70(spriteId, 0); + TASK.data[1] = 0; + TASK.data[2] = gBattleAnimArgs[0]; + if (gBattleAnimArgs[2] == 0) + { + if (GetBankSide(gBattleAnimPlayerMonIndex)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + } + } + else + { + if (GetBankSide(gBattleAnimEnemyMonIndex)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + } + } + if (gBattleAnimArgs[3] != 1) + { + TASK.data[3] = 0; + } + else + { + TASK.data[3] = gBattleAnimArgs[0] * gBattleAnimArgs[1]; + } + TASK.data[4] = gBattleAnimArgs[1]; + TASK.data[5] = spriteId; + TASK.data[6] = gBattleAnimArgs[3]; + TASK.data[7] = 1; + TASK.data[3] *= -1; + TASK.data[4] *= -1; + TASK.func = sub_80A8FD8; +} + +void sub_80A8FD8(u8 taskId) +{ + TASK.data[3] += TASK.data[4]; + obj_id_set_rotscale(TASK.data[5], 0x100, 0x100, TASK.data[3]); + if (TASK.data[7]) + { + sub_8078F9C(TASK.data[5]); + } + if (++TASK.data[1] >= TASK.data[2]) + { + switch (TASK.data[6]) + { + case 1: + sub_8078F40(TASK.data[5]); + case 0: + default: + DestroyAnimVisualTask(taskId); + return; + case 2: + TASK.data[1] = 0; + TASK.data[4] *= -1; + TASK.data[6] = 1; + break; + } + } +} + +void sub_80A9058(u8 taskId) +{ + if (!gBattleAnimArgs[0]) + { + TASK.data[15] = gMovePowerMoveAnim / 12; + if (TASK.data[15] < 1) + { + TASK.data[15] = 1; + } + if (TASK.data[15] > 16) + { + TASK.data[15] = 16; + } + } + else + { + TASK.data[15] = gMoveDmgMoveAnim / 12; + if (TASK.data[15] < 1) + { + TASK.data[15] = 1; + } + if (TASK.data[15] > 16) + { + TASK.data[15] = 16; + } + } + TASK.data[14] = TASK.data[15] / 2; + TASK.data[13] = TASK.data[14] + (TASK.data[15] & 1); + TASK.data[12] = 0; + TASK.data[10] = gBattleAnimArgs[3]; + TASK.data[11] = gBattleAnimArgs[4]; + TASK.data[7] = obj_id_for_side_relative_to_move(1); + TASK.data[8] = gSprites[TASK.data[7]].pos2.x; + TASK.data[9] = gSprites[TASK.data[7]].pos2.y; + TASK.data[0] = 0; + TASK.data[1] = gBattleAnimArgs[1]; + TASK.data[2] = gBattleAnimArgs[2]; + TASK.func = sub_80A913C; +} + +static void sub_80A913C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + if (++task->data[0] > task->data[1]) + { + task->data[0] = 0; + task->data[12] = (task->data[12] + 1) & 1; + if (task->data[10]) + { + if (task->data[12]) + { + gSprites[task->data[7]].pos2.x = task->data[8] + task->data[13]; + } + else + { + gSprites[task->data[7]].pos2.x = task->data[8] - task->data[14]; + } + } + if (task->data[11]) + { + if (task->data[12]) + { + gSprites[task->data[7]].pos2.y = task->data[15]; + } + else + { + gSprites[task->data[7]].pos2.y = 0; + } + } + if (!--task->data[2]) + { + gSprites[task->data[7]].pos2.x = 0; + gSprites[task->data[7]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + return; + } + } +} diff --git a/src/battle/battle_anim_81258BC.c b/src/battle/battle_anim_81258BC.c new file mode 100644 index 000000000..5bdbb4946 --- /dev/null +++ b/src/battle/battle_anim_81258BC.c @@ -0,0 +1,50 @@ +#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/battle_anim_8137220.c b/src/battle/battle_anim_8137220.c new file mode 100644 index 000000000..bb181d5fb --- /dev/null +++ b/src/battle/battle_anim_8137220.c @@ -0,0 +1,1486 @@ +#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 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(); + +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) +{ + 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 sub_8138E04(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 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].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 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].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 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/battle_interface.c b/src/battle/battle_interface.c new file mode 100644 index 000000000..246bda62b --- /dev/null +++ b/src/battle/battle_interface.c @@ -0,0 +1,3049 @@ +#include "global.h" +#include "battle.h" +#include "battle_interface.h" +#include "decompress.h" +#include "palette.h" +#include "pokedex.h" +#include "pokemon.h" +#include "rom_8077ABC.h" +#include "safari_zone.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "task.h" +#include "text.h" + +struct UnknownStruct5 +{ + u8 unk0; + u32 unk4; + u32 unk8; + u32 unkC; + u32 unk10; +}; + +struct UnknownStruct7 +{ + u8 filler0[0x180]; +}; + +extern u8 ewram[]; +#define ewram520 ((struct UnknownStruct7 *)(ewram + 0x00520)) +#define ewram16088 (*(u8 *) (ewram + 0x16088)) +#define ewram16089 (*(u8 *) (ewram + 0x16089)) +#define ewram17850 ((struct UnknownStruct5 *)(ewram + 0x17850)) + +extern u8 gDisplayedStringBattle[]; +extern u8 gNoOfAllBanks; +extern u16 gBattlePartyID[]; +extern u8 gBanksBySide[]; +extern u8 gHealthboxIDs[]; + +extern u16 gBattleTypeFlags; + +extern const struct SpriteTemplate gSpriteTemplate_820A4EC[]; +extern const struct SpriteTemplate gSpriteTemplate_820A51C[]; +extern const struct SpriteTemplate gSpriteTemplate_820A54C; +extern const struct SpriteTemplate gSpriteTemplate_820A56C[]; +extern const struct SubspriteTable gSubspriteTables_820A684[]; +extern const struct SubspriteTable gSubspriteTables_820A6E4[]; +extern const struct SubspriteTable gSubspriteTables_820A6EC[]; +extern const struct SpriteSheet gUnknown_0820A754[]; +extern const struct SpritePalette gUnknown_0820A764[]; +extern const struct SpritePalette gUnknown_0820A774[]; +extern const struct SpriteSheet gUnknown_0820A784[]; +extern const struct SpriteTemplate gSpriteTemplate_820A7A4[]; +extern const struct SpriteTemplate gSpriteTemplate_820A7D4[]; +extern void *const gUnknown_0820A804[]; +extern void *const gUnknown_0820A80C[]; +extern void *const gUnknown_0820A814[]; +extern void *const gUnknown_0820A83C[]; +extern void *const gUnknown_0820A848[]; +extern void *const gUnknown_0820A854[]; +extern void *const gUnknown_0820A85C[]; +extern void *const gUnknown_0820A87C[]; +extern void *const gUnknown_0820A894[]; +extern void *const gUnknown_0820A8B4[]; +extern void *const gUnknown_0820A8DC[]; +extern void *const gUnknown_0820A904[]; +extern const u8 gUnknown_0820A81C[]; +extern const u8 gUnknown_0820A864[]; +extern const u8 gUnknown_0820A89C[]; +extern const u8 gUnknown_0820A8B0[]; +extern const u8 BattleText_SafariBalls[]; +extern const u8 BattleText_SafariBallsLeft[]; +extern const u8 BattleText_HighlightRed[]; +extern const u8 gUnknown_08D1216C[][32]; + +extern const u16 gBattleInterfaceStatusIcons_DynPal[]; + +#define ABS(n) ((n) >= 0 ? (n) : -(n)) +// Used for computing copy destination addresses +#define MACRO1(n) ((n) - (n) / 8 * 8) + 64 * ((n) / 8) + +static void sub_8043D5C(struct Sprite *); +static const void *sub_8043CDC(u8); +static void sub_8044210(u8, s16, u8); +static void draw_status_ailment_maybe(u8); +extern void sub_8045180(struct Sprite *); +static void sub_8045110(struct Sprite *); +static void sub_8045048(struct Sprite *); +static void sub_8044F70(u8 taskId); +static void sub_8044E74(u8 taskId); +static void sub_8044ECC(u8 taskId); +static u8 sub_80457E8(u8, u8); +static int sub_8045F58(s32, s32, int, int *, u8, u16); +static u8 GetScaledExpFraction(int, int, int, u8); +static void sub_8045D58(u8, u8); +static u8 sub_804602C(int, int, int, int *, u8 *, u8); +static void sub_8046128(struct BattleInterfaceStruct1 *a, int *b, void *c); + +static int do_nothing(s16 unused1, s16 unused2, int unused3) +{ + return 9; +} + +#ifdef NONMATCHING +void sub_8043740(s16 a, u16 *b, u8 c) +{ + u8 sp0[4]; + s8 i; + s8 j; + s32 r9; + + for (i = 0; i < 4; i++) + sp0[i] = 0; + + //_0804377C + //i = 3; + //r9 = -1; + for (i = 3, r9 = -1;;) + { + if (a > 0) + { + sp0[i] = a % 10; + a /= 10; + i--; + } + else + break; + asm(""::"r"(r9)); + } + + //_080437AA + for (; i > r9; i--) + { + //asm("":"=r"(r9)); + sp0[i] = -1; + } + //_080437CE + if (sp0[3] == 0xFF) + sp0[3] = 0; + + //_080437DA + if (c == 0) + { + for (i = 0, j = 0; i < 4; i++) + { + if (sp0[j] == 0xFF) + { + b[j] = (b[j] & 0xFC00) | 0x1E; + b[i + 0x20] = (b[i + 0x20] & 0xFC00) | 0x1E; + } + else + { + b[j] = (b[j] & 0xFC00) | (sp0[j] + 0x14); + b[i + 0x20] = (b[i + 0x20] & 0xFC00) | (sp0[i] + 0x34); + } + j++; + } + + } + //_0804386A + else + { + for (i = 0; i < 4; i++) + { + if (sp0[i] == 0xFF) + { + b[i] = (b[i] & 0xFC00) | 0x1E; + b[i + 0x20] = (b[i + 0x20] & 0xFC00) | 0x1E; + } + else + { + b[i] = (b[i] & 0xFC00) | (sp0[i] + 0x14); + b[i + 0x20] = (b[i + 0x20] & 0xFC00) | (sp0[i] + 0x34); + } + } + } + asm(""::"r"(r9)); +} +#else +__attribute__((naked)) +void sub_8043740(s16 a, u16 *b, u8 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, 0x4\n\ + adds r7, r1, 0\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r10, r2\n\ + movs r3, 0\n\ + movs r2, 0\n\ +_0804375C:\n\ + lsls r0, r3, 24\n\ + asrs r0, 24\n\ + mov r3, sp\n\ + adds r1, r3, r0\n\ + strb r2, [r1]\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0x3\n\ + ble _0804375C\n\ + movs r3, 0x3\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + mov r9, r0\n\ + mov r8, sp\n\ +_0804377C:\n\ + lsls r0, r5, 16\n\ + asrs r6, r0, 16\n\ + cmp r6, 0\n\ + ble _080437AA\n\ + lsls r4, r3, 24\n\ + asrs r4, 24\n\ + mov r1, sp\n\ + adds r5, r1, r4\n\ + adds r0, r6, 0\n\ + movs r1, 0xA\n\ + bl __modsi3\n\ + strb r0, [r5]\n\ + adds r0, r6, 0\n\ + movs r1, 0xA\n\ + bl __divsi3\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + subs r4, 0x1\n\ + lsls r4, 24\n\ + lsrs r3, r4, 24\n\ + b _0804377C\n\ +_080437AA:\n\ + lsls r1, r3, 24\n\ + asrs r0, r1, 24\n\ + cmp r0, r9\n\ + ble _080437CE\n\ + movs r4, 0xFF\n\ + movs r3, 0x1\n\ + negs r3, r3\n\ +_080437B8:\n\ + asrs r2, r1, 24\n\ + mov r5, sp\n\ + adds r1, r5, r2\n\ + ldrb r0, [r1]\n\ + orrs r0, r4\n\ + strb r0, [r1]\n\ + subs r2, 0x1\n\ + lsls r1, r2, 24\n\ + asrs r0, r1, 24\n\ + cmp r0, r3\n\ + bgt _080437B8\n\ +_080437CE:\n\ + mov r1, r8\n\ + ldrb r0, [r1, 0x3]\n\ + cmp r0, 0xFF\n\ + bne _080437DA\n\ + movs r0, 0\n\ + strb r0, [r1, 0x3]\n\ +_080437DA:\n\ + mov r2, r10\n\ + cmp r2, 0\n\ + bne _0804386A\n\ + movs r3, 0\n\ + movs r1, 0\n\ + movs r6, 0xFC\n\ + lsls r6, 8\n\ + movs r5, 0x1E\n\ + mov r12, r5\n\ +_080437EC:\n\ + lsls r1, 24\n\ + asrs r2, r1, 24\n\ + mov r0, sp\n\ + adds r5, r0, r2\n\ + ldrb r0, [r5]\n\ + mov r8, r1\n\ + cmp r0, 0xFF\n\ + bne _08043822\n\ + lsls r1, r2, 1\n\ + adds r1, r7\n\ + ldrh r2, [r1]\n\ + adds r0, r6, 0\n\ + ands r0, r2\n\ + mov r2, r12\n\ + orrs r0, r2\n\ + strh r0, [r1]\n\ + lsls r3, 24\n\ + asrs r1, r3, 23\n\ + adds r1, r7\n\ + adds r1, 0x40\n\ + ldrh r2, [r1]\n\ + adds r0, r6, 0\n\ + ands r0, r2\n\ + mov r5, r12\n\ + orrs r0, r5\n\ + strh r0, [r1]\n\ + b _08043852\n\ +_08043822:\n\ + lsls r2, 1\n\ + adds r2, r7\n\ + ldrh r0, [r2]\n\ + adds r1, r6, 0\n\ + ands r1, r0\n\ + ldrb r0, [r5]\n\ + adds r0, 0x14\n\ + orrs r1, r0\n\ + strh r1, [r2]\n\ + lsls r4, r3, 24\n\ + asrs r3, r4, 24\n\ + lsls r2, r3, 1\n\ + adds r2, r7\n\ + adds r2, 0x40\n\ + ldrh r0, [r2]\n\ + adds r1, r6, 0\n\ + ands r1, r0\n\ + mov r5, sp\n\ + adds r0, r5, r3\n\ + ldrb r0, [r0]\n\ + adds r0, 0x34\n\ + orrs r1, r0\n\ + strh r1, [r2]\n\ + adds r3, r4, 0\n\ +_08043852:\n\ + movs r0, 0x80\n\ + lsls r0, 17\n\ + add r0, r8\n\ + lsrs r1, r0, 24\n\ + movs r2, 0x80\n\ + lsls r2, 17\n\ + adds r0, r3, r2\n\ + lsrs r3, r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0x3\n\ + ble _080437EC\n\ + b _080438CE\n\ +_0804386A:\n\ + movs r3, 0\n\ + movs r4, 0xFC\n\ + lsls r4, 8\n\ + movs r6, 0x1E\n\ +_08043872:\n\ + lsls r1, r3, 24\n\ + asrs r2, r1, 24\n\ + mov r3, sp\n\ + adds r5, r3, r2\n\ + ldrb r0, [r5]\n\ + adds r3, r1, 0\n\ + cmp r0, 0xFF\n\ + bne _0804389E\n\ + lsls r1, r2, 1\n\ + adds r1, r7\n\ + ldrh r2, [r1]\n\ + adds r0, r4, 0\n\ + ands r0, r2\n\ + orrs r0, r6\n\ + strh r0, [r1]\n\ + adds r1, 0x40\n\ + ldrh r2, [r1]\n\ + adds r0, r4, 0\n\ + ands r0, r2\n\ + orrs r0, r6\n\ + strh r0, [r1]\n\ + b _080438C0\n\ +_0804389E:\n\ + lsls r2, 1\n\ + adds r2, r7\n\ + ldrh r0, [r2]\n\ + adds r1, r4, 0\n\ + ands r1, r0\n\ + ldrb r0, [r5]\n\ + adds r0, 0x14\n\ + orrs r1, r0\n\ + strh r1, [r2]\n\ + adds r2, 0x40\n\ + ldrh r0, [r2]\n\ + adds r1, r4, 0\n\ + ands r1, r0\n\ + ldrb r0, [r5]\n\ + adds r0, 0x34\n\ + orrs r1, r0\n\ + strh r1, [r2]\n\ +_080438C0:\n\ + movs r5, 0x80\n\ + lsls r5, 17\n\ + adds r0, r3, r5\n\ + lsrs r3, r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0x3\n\ + ble _08043872\n\ +_080438CE:\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"); +} +#endif + +void unref_sub_80438E0(s16 a, s16 b, u16 *c) +{ + c[4] = 0x1E; + sub_8043740(b, c, 0); + sub_8043740(a, c + 5, 1); +} + +u8 battle_make_oam_normal_battle(u8 a) +{ + int sp0 = 0; + u8 spriteId1; + u8 spriteId2; + u8 spriteId3; + struct Sprite *sprite; + + if (!IsDoubleBattle()) + { + if (GetBankSide(a) == 0) + { + spriteId1 = CreateSprite(&gSpriteTemplate_820A4EC[0], 240, 160, 1); + spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A4EC[0], 240, 160, 1); + + gSprites[spriteId1].oam.shape = 0; + gSprites[spriteId2].oam.shape = 0; + gSprites[spriteId2].oam.tileNum += 64; + } + else + { + spriteId1 = CreateSprite(&gSpriteTemplate_820A51C[0], 240, 160, 1); + spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A51C[0], 240, 160, 1); + + gSprites[spriteId2].oam.tileNum += 32; + sp0 = 2; + } + //_080439F2 + + gSprites[spriteId1].oam.affineParam = spriteId2; + gSprites[spriteId2].data5 = spriteId1; + gSprites[spriteId2].callback = sub_8043D5C; + } + //_08043A28 + else + { + if (GetBankSide(a) == 0) + { + spriteId1 = CreateSprite(&gSpriteTemplate_820A4EC[GetBankIdentity(a) / 2], 240, 160, 1); + spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A4EC[GetBankIdentity(a) / 2], 240, 160, 1); + + gSprites[spriteId1].oam.affineParam = spriteId2; + gSprites[spriteId2].data5 = spriteId1; + gSprites[spriteId2].oam.tileNum += 32; + gSprites[spriteId2].callback = sub_8043D5C; + sp0 = 1; + } + //_08043ACC + else + { + spriteId1 = CreateSprite(&gSpriteTemplate_820A51C[GetBankIdentity(a) / 2], 240, 160, 1); + spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A51C[GetBankIdentity(a) / 2], 240, 160, 1); + + gSprites[spriteId1].oam.affineParam = spriteId2; + gSprites[spriteId2].data5 = spriteId1; + gSprites[spriteId2].oam.tileNum += 32; + gSprites[spriteId2].callback = sub_8043D5C; + sp0 = 2; + } + //_08043B4E + } + //_08043B50 + + spriteId3 = CreateSpriteAtEnd(&gSpriteTemplate_820A56C[gBanksBySide[a]], 140, 60, 0); + sprite = &gSprites[spriteId3]; + SetSubspriteTables(sprite, &gSubspriteTables_820A684[GetBankSide(a)]); + sprite->subspriteMode = 2; + sprite->oam.priority = 1; + CpuCopy32(sub_8043CDC(1), (void *)(OBJ_VRAM0 + sprite->oam.tileNum * 32), 64); + + gSprites[spriteId1].data5 = spriteId3; + gSprites[spriteId1].data6 = a; + gSprites[spriteId1].invisible = TRUE; + gSprites[spriteId2].invisible = TRUE; + sprite->data5 = spriteId1; + sprite->data6 = sp0; + sprite->invisible = TRUE; + + return spriteId1; +} + +u8 battle_make_oam_safari_battle(void) +{ + u8 spriteId1 = CreateSprite(&gSpriteTemplate_820A54C, 240, 160, 1); + u8 spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A54C, 240, 160, 1); + + gSprites[spriteId1].oam.shape = 0; + gSprites[spriteId2].oam.shape = 0; + gSprites[spriteId2].oam.tileNum += 0x40; + gSprites[spriteId1].oam.affineParam = spriteId2; + gSprites[spriteId2].data5 = spriteId1; + gSprites[spriteId2].callback = sub_8043D5C; + return spriteId1; +} + +static const void *sub_8043CDC(u8 a) +{ + return gUnknown_08D1216C[a]; +} + +void sub_8043CEC(struct Sprite *sprite) +{ + u8 r5 = sprite->data5; + + switch (sprite->data6) + { + case 0: + sprite->pos1.x = gSprites[r5].pos1.x + 16; + sprite->pos1.y = gSprites[r5].pos1.y; + break; + case 1: + sprite->pos1.x = gSprites[r5].pos1.x + 16; + sprite->pos1.y = gSprites[r5].pos1.y; + break; + default: + case 2: + sprite->pos1.x = gSprites[r5].pos1.x + 8; + sprite->pos1.y = gSprites[r5].pos1.y; + break; + } + sprite->pos2.x = gSprites[r5].pos2.x; + sprite->pos2.y = gSprites[r5].pos2.y; +} + +static void sub_8043D5C(struct Sprite *sprite) +{ + u8 data5 = sprite->data5; + + sprite->pos1.x = gSprites[data5].pos1.x + 64; + sprite->pos1.y = gSprites[data5].pos1.y; + sprite->pos2.x = gSprites[data5].pos2.x; + sprite->pos2.y = gSprites[data5].pos2.y; +} + +void sub_8043D84(u8 a, u8 b, u32 c, u32 d, u32 e) +{ + ewram17850[a].unk0 = b; + ewram17850[a].unk4 = c; + ewram17850[a].unk8 = d; + ewram17850[a].unkC = e; + ewram17850[a].unk10 = 0xFFFF8000; +} + +void sub_8043DB0(u8 a) +{ + gSprites[a].invisible = TRUE; + gSprites[gSprites[a].data5].invisible = TRUE; + gSprites[gSprites[a].oam.affineParam].invisible = TRUE; +} + +void sub_8043DFC(u8 a) +{ + gSprites[a].invisible = FALSE; + gSprites[gSprites[a].data5].invisible = FALSE; + gSprites[gSprites[a].oam.affineParam].invisible = FALSE; +} + +static void sub_8043E50(u8 spriteId, s16 x, s16 y) +{ + gSprites[spriteId].pos1.x = x; + gSprites[spriteId].pos1.y = y; +} + +void unref_sub_8043E70(u8 a) +{ + DestroySprite(&gSprites[gSprites[a].oam.affineParam]); + DestroySprite(&gSprites[gSprites[a].data5]); + DestroySprite(&gSprites[a]); +} + +void nullsub_11() +{ +} + +void sub_8043EB4(u8 priority) +{ + s32 i; + + for (i = 0; i < gNoOfAllBanks; i++) + { + u8 spriteId1; + u8 spriteId2; + u8 spriteId3; + + spriteId1 = gHealthboxIDs[i]; + spriteId2 = gSprites[spriteId1].oam.affineParam; + spriteId3 = gSprites[spriteId1].data5; + gSprites[spriteId1].oam.priority = priority; + gSprites[spriteId2].oam.priority = priority; + gSprites[spriteId3].oam.priority = priority; + } +} + +void sub_8043F44(u8 a) +{ + s16 x = 0; + s16 y = 0; + + if (!IsDoubleBattle()) + { + if (GetBankSide(a) != 0) + { + x = 44; + y = 30; + } + else + { + x = 158; + y = 88; + } + } + else + { + switch (GetBankIdentity(a)) + { + case 0: + x = 159; + y = 77; + break; + case 2: + x = 171; + y = 102; + break; + case 1: + x = 44; + y = 19; + break; + case 3: + x = 32; + y = 44; + break; + } + } + sub_8043E50(gHealthboxIDs[a], x, y); +} + +#if ENGLISH +#define CHAR_LV_SEPARATOR CHAR_COLON +#elif GERMAN +#define CHAR_LV_SEPARATOR CHAR_PERIOD +#endif + +static void sub_8043FC0(u8 a, u8 b) +{ + u8 str[30]; + void *const *r7; + u8 *ptr; + s32 i; + s32 two; + + // TODO: Make this a local variable + memcpy(str, gUnknown_0820A81C, sizeof(str)); + if (!IsDoubleBattle()) + { + if (GetBankSide(gSprites[a].data6) == 0) + r7 = gUnknown_0820A804; + else + r7 = gUnknown_0820A80C; + } + else + { + if (GetBankSide(gSprites[a].data6) == 0) + r7 = gUnknown_0820A814; + else + r7 = gUnknown_0820A80C; + } + + ptr = str + 6; + if (b == 100) + { + ptr = ConvertIntToDecimalStringN(ptr, 100, 0, 3); + } + else + { + *(ptr++) = EXT_CTRL_CODE_BEGIN; + *(ptr++) = 0x11; + *(ptr++) = 1; + *(ptr++) = EXT_CTRL_CODE_BEGIN; + *(ptr++) = 0x14; + *(ptr++) = 4; + *(ptr++) = CHAR_LV_SEPARATOR; + *(ptr++) = EXT_CTRL_CODE_BEGIN; + *(ptr++) = 0x14; + *(ptr++) = 0; + ptr = ConvertIntToDecimalStringN(ptr, b, 0, 2); + } + + *(ptr++) = EXT_CTRL_CODE_BEGIN; + *(ptr++) = 0x13; + *(ptr++) = 0xF; + *(ptr++) = EOS; + sub_80034D4((u8 *)0x02000000, str); + + two = 2; + for (i = 0; i < two; i++) + CpuCopy32((void *)(0x02000020 + i * 64), r7[i] + gSprites[a].oam.tileNum * 32, 32); +} + +#ifdef NONMATCHING +void sub_80440EC(u8 a, s16 b, u8 c) +{ + u8 str[0x14]; + u8 *ptr; + s32 foo; + void *const *r4; + s32 i; + + // TODO: make this a local variable + memcpy(str, gUnknown_0820A864, sizeof(str)); + foo = gSprites[a].data6; + + if (IsDoubleBattle() == TRUE || GetBankSide(foo) == 1) + { + //_08044136 + sub_8044210(a, b, c); + return; + } + // + ptr = str + 6; + if (c == 0) + { + if (GetBankSide(gSprites[a].data6) == 0) + r4 = gUnknown_0820A83C; + else + r4 = gUnknown_0820A848; + c = 3; + ptr = sub_8003504(ptr, b, 0x13, 1); + *(ptr++) = 0xBA; + *(ptr++) = 0xFF; + sub_80034D4((u8 *)0x02000000, str); + } + else + { + if (GetBankSide(gSprites[a].data6) == 0) + r4 = gUnknown_0820A854; + else + r4 = gUnknown_0820A85C; + c = 2; + sub_8003504(ptr, b, 0xF, 1); + sub_80034D4((u8 *)0x02000000, str); + } + //asm(""::"r"(a)); + //_080441B6 + for (i = 0; i < c; i++) // _080440BC + { + void *temp = r4[i] + gSprites[a].oam.tileNum * 32; + CpuCopy32((void *)(0x02000020 + i * 0x40), temp, 0x20); + } +} +#else +__attribute__((naked)) +void sub_80440EC(u8 a, s16 b, u8 c) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0x14\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + lsls r1, 16\n\ + lsrs r6, r1, 16\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r8, r2\n\ + ldr r1, _08044144 @ =gUnknown_0820A864\n\ + mov r0, sp\n\ + movs r2, 0x14\n\ + bl memcpy\n\ + ldr r1, _08044148 @ =gSprites\n\ + lsls r0, r7, 4\n\ + adds r0, r7\n\ + lsls r0, 2\n\ + adds r4, r0, r1\n\ + movs r0, 0x3A\n\ + ldrsh r5, [r4, r0]\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + beq _08044136\n\ + lsls r0, r5, 24\n\ + lsrs r0, 24\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0804414C\n\ +_08044136:\n\ + lsls r1, r6, 16\n\ + asrs r1, 16\n\ + adds r0, r7, 0\n\ + mov r2, r8\n\ + bl sub_8044210\n\ + b _080441F0\n\ + .align 2, 0\n\ +_08044144: .4byte gUnknown_0820A864\n\ +_08044148: .4byte gSprites\n\ +_0804414C:\n\ + mov r5, sp\n\ + adds r5, 0x6\n\ + mov r0, r8\n\ + cmp r0, 0\n\ + bne _08044190\n\ + ldrh r0, [r4, 0x3A]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + ldr r4, _08044188 @ =gUnknown_0820A848\n\ + cmp r0, 0\n\ + bne _0804416A\n\ + ldr r4, _0804418C @ =gUnknown_0820A83C\n\ +_0804416A:\n\ + movs r0, 0x3\n\ + mov r8, r0\n\ + lsls r1, r6, 16\n\ + asrs r1, 16\n\ + adds r0, r5, 0\n\ + movs r2, 0x13\n\ + movs r3, 0x1\n\ + bl sub_8003504\n\ + adds r5, r0, 0\n\ + movs r0, 0xBA\n\ + strb r0, [r5]\n\ + movs r0, 0xFF\n\ + strb r0, [r5, 0x1]\n\ + b _080441B6\n\ + .align 2, 0\n\ +_08044188: .4byte gUnknown_0820A848\n\ +_0804418C: .4byte gUnknown_0820A83C\n\ +_08044190:\n\ + ldrh r0, [r4, 0x3A]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + ldr r4, _080441FC @ =gUnknown_0820A85C\n\ + cmp r0, 0\n\ + bne _080441A4\n\ + ldr r4, _08044200 @ =gUnknown_0820A854\n\ +_080441A4:\n\ + movs r0, 0x2\n\ + mov r8, r0\n\ + lsls r1, r6, 16\n\ + asrs r1, 16\n\ + adds r0, r5, 0\n\ + movs r2, 0xF\n\ + movs r3, 0x1\n\ + bl sub_8003504\n\ +_080441B6:\n\ + movs r0, 0x80\n\ + lsls r0, 18\n\ + mov r1, sp\n\ + bl sub_80034D4\n\ + mov r0, r8\n\ + cmp r0, 0\n\ + beq _080441F0\n\ + ldr r1, _08044204 @ =gSprites\n\ + lsls r0, r7, 4\n\ + adds r0, r7\n\ + lsls r0, 2\n\ + adds r6, r0, r1\n\ + adds r7, r4, 0\n\ + ldr r5, _08044208 @ =0x02000020\n\ + mov r4, r8\n\ +_080441D6:\n\ + ldrh r0, [r6, 0x4]\n\ + lsls r0, 22\n\ + lsrs r0, 17\n\ + ldm r7!, {r1}\n\ + adds r1, r0\n\ + adds r0, r5, 0\n\ + ldr r2, _0804420C @ =REG_BG0CNT\n\ + bl CpuSet\n\ + adds r5, 0x40\n\ + subs r4, 0x1\n\ + cmp r4, 0\n\ + bne _080441D6\n\ +_080441F0:\n\ + add sp, 0x14\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080441FC: .4byte gUnknown_0820A85C\n\ +_08044200: .4byte gUnknown_0820A854\n\ +_08044204: .4byte gSprites\n\ +_08044208: .4byte 0x02000020\n\ +_0804420C: .4byte 0x04000008\n\ + .syntax divided\n"); +} +#endif + +static void sub_8044210(u8 a, s16 b, u8 c) +{ + u8 str[0x14]; + u8 *ptr; + void *const *r7; + int r10; + int r4; + int i; + + // TODO: make this a local variable + memcpy(str, gUnknown_0820A89C, sizeof(str)); + r4 = gSprites[a].data6; + if ((ewram17800[r4].unk0_4) == 0) + return; + ptr = str + 6; + if (c == 0) + { + r7 = gUnknown_0820A87C; + r10 = 6; + ptr = sub_8003504(ptr, b, 0x2B, 1); + *(ptr++) = CHAR_SLASH; + *(ptr++) = EOS; + } + else + { + r7 = gUnknown_0820A894; + r10 = 2; + sub_8003504(ptr, b, 0xF, 1); + if (GetBankSide(r4) == 0) + { + CpuCopy32(sub_8043CDC(0x74), (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x34) * 32), 32); + } + } + r4 = gSprites[a].data5; + sub_80034D4((u8 *)0x02000000, str); + for (i = 0; i < r10; i++) + { + CpuCopy32((void *)(0x02000020 + i * 0x40), r7[i] + gSprites[r4].oam.tileNum * 32, 0x20); + } +} + +#ifdef NONMATCHING +void sub_8044338(u8 a, struct Pokemon *pkmn) +{ + u8 str[0x14]; + u8 *r6; + s32 r8; + u8 nature; // = GetNature(pkmn); + s32 r7; + u8 i; + u8 r5; + + // TODO: make this a local variable + memcpy(str, gUnknown_0820A864, sizeof(str)); + r6 = ewram520[GetBankIdentity(gSprites[a].data6)].filler0; + r8 = 5; + nature = GetNature(pkmn); + StringCopy(str + 6, gNatureNames[nature]); + sub_80034D4(r6, str); + r7 = 6; + for (i = 0; i < (u32)r8; i++, r7++) //_080443AA + { + u8 val; + + if ((u8)(str[r7] - 0x37) <= 0x13 || (u8)(str[r7] + 0x79) <= 0x13) + val = 0x2C; + //_080443DC + else if ((u8)(str[r7] - 0x4B) <= 4 || (u8)(str[r7] + 0x65) <= 4) + val = 0x2D; + else + val = 0x2B; + + CpuCopy32(sub_8043CDC(val), r6 + i * 64, 32); + } + //r7 = 1; + //sp18 = a * 16; + for (r7 = 1; r7 < r8 + 1; r7++) + { + int foo; + + foo = gSprites[a].oam.tileNum + MACRO1(r7); + CpuCopy32(r6, (u8 *)0x06010000 + foo * 32, 32); + r6 += 32; + + foo = gSprites[a].oam.tileNum + 8 + MACRO1(r7); + CpuCopy32(r6, (u8 *)0x06010000 + foo * 32, 32); + r6 += 32; + } + //_08044486 + r5 = gSprites[a].data5; + ConvertIntToDecimalStringN(str + 6, ewram[0x16089], 1, 2); + ConvertIntToDecimalStringN(str + 9, ewram[0x16088], 1, 2); + str[5] = 0; + str[8] = 0xBA; + sub_80034D4((u8 *)0x02000000, str); + + for (r7 = 0; r7 < 5; r7++) + { + if (r7 <= 1) + { + int foo = (gSprites[r5].oam.tileNum + 2 + r7); + CpuCopy32((u8 *)0x02000020 + r7 * 0x40, (u8 *)0x06010000 + foo * 32, 32); + } + else + { + int foo = (r7 + gSprites[r5].oam.tileNum); + CpuCopy32((u8 *)0x02000020 + r7 * 0x40, (u8 *)0x060100C0 + foo * 32, 32); + } + } +} +#else +__attribute__((naked)) +void sub_8044338(u8 a, struct Pokemon *pkmn) +{ + 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, 0x20\n\ + adds r4, r1, 0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x14]\n\ + ldr r1, _080443CC @ =gUnknown_0820A864\n\ + mov r0, sp\n\ + movs r2, 0x14\n\ + bl memcpy\n\ + ldr r1, _080443D0 @ =gSprites\n\ + ldr r2, [sp, 0x14]\n\ + lsls r0, r2, 4\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x3A]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetBankIdentity\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + lsls r1, 7\n\ + ldr r3, _080443D4 @ =0x02000520\n\ + adds r6, r1, r3\n\ + movs r0, 0x5\n\ + mov r8, r0\n\ + adds r0, r4, 0\n\ + bl GetNature\n\ + lsls r0, 24\n\ + mov r4, sp\n\ + adds r4, 0x6\n\ + ldr r1, _080443D8 @ =gNatureNames\n\ + lsrs r0, 22\n\ + adds r0, r1\n\ + ldr r1, [r0]\n\ + adds r0, r4, 0\n\ + bl StringCopy\n\ + adds r0, r6, 0\n\ + mov r1, sp\n\ + bl sub_80034D4\n\ + movs r7, 0x6\n\ + movs r5, 0\n\ + mov r1, sp\n\ + adds r1, 0x9\n\ + str r1, [sp, 0x1C]\n\ +_080443AA:\n\ + mov r2, sp\n\ + adds r0, r2, r7\n\ + ldrb r1, [r0]\n\ + adds r0, r1, 0\n\ + subs r0, 0x37\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x13\n\ + bls _080443C8\n\ + adds r0, r1, 0\n\ + adds r0, 0x79\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x13\n\ + bhi _080443DC\n\ +_080443C8:\n\ + movs r0, 0x2C\n\ + b _080443FA\n\ + .align 2, 0\n\ +_080443CC: .4byte gUnknown_0820A864\n\ +_080443D0: .4byte gSprites\n\ +_080443D4: .4byte 0x02000520\n\ +_080443D8: .4byte gNatureNames\n\ +_080443DC:\n\ + adds r0, r1, 0\n\ + subs r0, 0x4B\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x4\n\ + bls _080443F4\n\ + adds r0, r1, 0\n\ + adds r0, 0x65\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x4\n\ + bhi _080443F8\n\ +_080443F4:\n\ + movs r0, 0x2D\n\ + b _080443FA\n\ +_080443F8:\n\ + movs r0, 0x2B\n\ +_080443FA:\n\ + bl sub_8043CDC\n\ + lsls r1, r5, 6\n\ + adds r1, r6, r1\n\ + ldr r2, _080444F8 @ =REG_BG0CNT\n\ + bl CpuSet\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + adds r7, 0x1\n\ + cmp r5, r8\n\ + bcc _080443AA\n\ + movs r7, 0x1\n\ + ldr r3, [sp, 0x14]\n\ + lsls r3, 4\n\ + str r3, [sp, 0x18]\n\ + movs r0, 0x1\n\ + add r0, r8\n\ + mov r9, r0\n\ + cmp r7, r9\n\ + bge _08044486\n\ + ldr r1, _080444FC @ =gSprites\n\ + ldr r2, _080444F8 @ =REG_BG0CNT\n\ + mov r10, r2\n\ + ldr r2, [sp, 0x14]\n\ + adds r0, r3, r2\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + mov r8, r0\n\ +_08044436:\n\ + mov r3, r8\n\ + ldrh r0, [r3, 0x4]\n\ + lsls r0, 22\n\ + lsrs r0, 22\n\ + adds r5, r7, 0\n\ + cmp r7, 0\n\ + bge _08044446\n\ + adds r5, r7, 0x7\n\ +_08044446:\n\ + asrs r5, 3\n\ + lsls r4, r5, 3\n\ + subs r4, r7, r4\n\ + adds r0, r4\n\ + lsls r5, 6\n\ + adds r0, r5\n\ + lsls r0, 5\n\ + ldr r2, _08044500 @ =0x06010000\n\ + adds r1, r0, r2\n\ + adds r0, r6, 0\n\ + mov r2, r10\n\ + bl CpuSet\n\ + adds r6, 0x20\n\ + mov r3, r8\n\ + ldrh r0, [r3, 0x4]\n\ + lsls r0, 22\n\ + lsrs r0, 22\n\ + adds r4, 0x8\n\ + adds r0, r4\n\ + adds r0, r5\n\ + lsls r0, 5\n\ + ldr r2, _08044500 @ =0x06010000\n\ + adds r1, r0, r2\n\ + adds r0, r6, 0\n\ + mov r2, r10\n\ + bl CpuSet\n\ + adds r6, 0x20\n\ + adds r7, 0x1\n\ + cmp r7, r9\n\ + blt _08044436\n\ +_08044486:\n\ + ldr r6, _080444FC @ =gSprites\n\ + ldr r3, [sp, 0x18]\n\ + ldr r1, [sp, 0x14]\n\ + adds r0, r3, r1\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldrh r5, [r0, 0x38]\n\ + lsls r5, 24\n\ + lsrs r5, 24\n\ + ldr r4, _08044504 @ =0x02000000\n\ + ldr r2, _08044508 @ =0x00016089\n\ + adds r0, r4, r2\n\ + ldrb r1, [r0]\n\ + mov r0, sp\n\ + adds r0, 0x6\n\ + movs r2, 0x1\n\ + movs r3, 0x2\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r3, _0804450C @ =0x00016088\n\ + adds r4, r3\n\ + ldrb r1, [r4]\n\ + ldr r0, [sp, 0x1C]\n\ + movs r2, 0x1\n\ + movs r3, 0x2\n\ + bl ConvertIntToDecimalStringN\n\ + mov r1, sp\n\ + movs r0, 0\n\ + strb r0, [r1, 0x5]\n\ + movs r0, 0xBA\n\ + strb r0, [r1, 0x8]\n\ + movs r0, 0x80\n\ + lsls r0, 18\n\ + bl sub_80034D4\n\ + movs r7, 0\n\ + lsls r0, r5, 4\n\ + adds r0, r5\n\ + lsls r0, 2\n\ + adds r5, r0, r6\n\ + ldr r4, _08044510 @ =0x02000020\n\ +_080444DA:\n\ + cmp r7, 0x1\n\ + bgt _08044514\n\ + ldrh r1, [r5, 0x4]\n\ + lsls r1, 22\n\ + lsrs r1, 22\n\ + adds r0, r7, 0x2\n\ + adds r1, r0\n\ + lsls r1, 5\n\ + ldr r0, _08044500 @ =0x06010000\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + ldr r2, _080444F8 @ =REG_BG0CNT\n\ + bl CpuSet\n\ + b _0804452A\n\ + .align 2, 0\n\ +_080444F8: .4byte 0x04000008\n\ +_080444FC: .4byte gSprites\n\ +_08044500: .4byte 0x06010000\n\ +_08044504: .4byte 0x02000000\n\ +_08044508: .4byte 0x00016089\n\ +_0804450C: .4byte 0x00016088\n\ +_08044510: .4byte 0x02000020\n\ +_08044514:\n\ + ldrh r1, [r5, 0x4]\n\ + lsls r1, 22\n\ + lsrs r1, 22\n\ + adds r1, r7, r1\n\ + lsls r1, 5\n\ + ldr r2, _08044544 @ =0x060100c0\n\ + adds r1, r2\n\ + adds r0, r4, 0\n\ + ldr r2, _08044548 @ =REG_BG0CNT\n\ + bl CpuSet\n\ +_0804452A:\n\ + adds r4, 0x40\n\ + adds r7, 0x1\n\ + cmp r7, 0x4\n\ + ble _080444DA\n\ + add sp, 0x20\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\ +_08044544: .4byte 0x060100c0\n\ +_08044548: .4byte 0x04000008\n\ + .syntax divided\n"); +} +#endif + +void sub_804454C(void) +{ + s32 i; + u8 spriteId; + + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gSprites[gHealthboxIDs[i]].callback == SpriteCallbackDummy + && GetBankSide(i) != 1 + && (IsDoubleBattle() || GetBankSide(i) != 0)) + { + u8 r6; + + ewram17800[i].unk0_4 ^= 1; + r6 = ewram17800[i].unk0_4; + if (GetBankSide(i) == 0) + { + + if (!IsDoubleBattle()) + continue; + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + continue; + + if (r6 == 1) + { + spriteId = gSprites[gHealthboxIDs[i]].data5; + + CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32), 0x100); + sub_8044210(gHealthboxIDs[i], GetMonData(&gPlayerParty[gBattlePartyID[i]], MON_DATA_HP), 0); + sub_8044210(gHealthboxIDs[i], GetMonData(&gPlayerParty[gBattlePartyID[i]], MON_DATA_MAX_HP), 1); + } + else + { + draw_status_ailment_maybe(gHealthboxIDs[i]); + sub_8045A5C(gHealthboxIDs[i], &gPlayerParty[gBattlePartyID[i]], 5); + CpuCopy32(sub_8043CDC(0x75), (void *)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxIDs[i]].oam.tileNum * 32), 32); + } + } + else + { + if (r6 == 1) + { + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + { + sub_8044338(gHealthboxIDs[i], &gEnemyParty[gBattlePartyID[i]]); + } + else + { + spriteId = gSprites[gHealthboxIDs[i]].data5; + + CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32), 0x100); + sub_8044210(gHealthboxIDs[i], GetMonData(&gEnemyParty[gBattlePartyID[i]], MON_DATA_HP), 0); + sub_8044210(gHealthboxIDs[i], GetMonData(&gEnemyParty[gBattlePartyID[i]], MON_DATA_MAX_HP), 1); + } + } + else + { + draw_status_ailment_maybe(gHealthboxIDs[i]); + sub_8045A5C(gHealthboxIDs[i], &gEnemyParty[gBattlePartyID[i]], 5); + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + sub_8045A5C(gHealthboxIDs[i], &gEnemyParty[gBattlePartyID[i]], 4); + } + } + gSprites[gHealthboxIDs[i]].data7 ^= 1; + } + } +} + +// This function almost matches except for just two instructions around 0x08044B52 that are swapped. +#ifdef NONMATCHING +u8 sub_8044804(u8 a, const struct BattleInterfaceStruct2 *b, u8 c, u8 d) +{ + u8 r7; + s16 x; + s16 y; + s16 r8; + s16 r5; + + int i; + u8 sp[6]; + s8 sp14; + u8 sp18; + u8 taskId; + + if (c == 0 || GetBankIdentity(a) != 3) + { + if (GetBankSide(a) == 0) + { + r7 = 0; + x = 136; + y = 96; + r8 = 100; + r5 = -5; + } + else + { + r7 = 1; + if (c == 0 || !IsDoubleBattle()) + { + x = 104; + y = 40; + } + else + { + x = 104; + y = 16; + } + r8 = -100; + r5 = 5; + } + } + else + { + r7 = 1; + x = 104; + y = 40; + r8 = -100; + r5 = 5; + } + //_08044884 + + sp14 = 0; + for (i = 0; i < 6; i++) //_080448A0 + { + if (b[i].unk0 != 0xFFFF) + sp14++; + } + + LoadCompressedObjectPic(&gUnknown_0820A754[r7]); + LoadSpriteSheet(&gUnknown_0820A784[r7]); + LoadSpritePalette(&gUnknown_0820A764[r7]); + LoadSpritePalette(&gUnknown_0820A774[r7]); + + sp18 = CreateSprite(&gSpriteTemplate_820A7A4[r7], x, y, 10); + SetSubspriteTables(&gSprites[sp18], gSubspriteTables_820A6E4); + gSprites[sp18].pos2.x = r8; + gSprites[sp18].data0 = r5; + if (r7 != 0) + { + gSprites[sp18].pos1.x -= 96; + gSprites[sp18].oam.matrixNum = 8; + } + else + { + gSprites[sp18].pos1.x += 0x60; + } + //_0804495A + for (i = 0; i < 6; i++) //_08044970 + { + sp[i] = CreateSpriteAtEnd(&gSpriteTemplate_820A7D4[r7], x, y - 4, 9); + if (d == 0) + { + gSprites[sp[i]].callback = sub_8045180; + } + //_080449A0 + if (r7 == 0) + { + gSprites[sp[i]].pos2.x = 0; + gSprites[sp[i]].pos2.y = 0; + } + //_080449BE + gSprites[sp[i]].data0 = sp18; + if (r7 == 0) + { + gSprites[sp[i]].pos1.x += 10 * i + 24; + gSprites[sp[i]].data1 = i * 7 + 10; + gSprites[sp[i]].pos2.x = 120; + } + //_08044A18 + else + { + gSprites[sp[i]].pos1.x -= 10 * (5 - i) + 24; + gSprites[sp[i]].data1 = (6 - i) * 7 + 10; + gSprites[sp[i]].pos2.x = -120; + } + //_08044A56 + gSprites[sp[i]].data2 = r7; + } + //_08044A76 + if (GetBankSide(a) == 0) + { + for (i = 0; i < 6; i++) //_08044A9A + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) // && b[i] != 0xFFFF && b[i] + { + if (b[i].unk0 == 0xFFFF) + { + //_08044AE6 + gSprites[sp[i]].oam.tileNum += 1; + gSprites[sp[i]].data7 = 1; + // to _08044B52 + } + else if (b[i].unk0 == 0) + { + gSprites[sp[i]].oam.tileNum += 3; + // to _08044B46 + } + else if (b[i].unk4 != 0) + { + gSprites[sp[i]].oam.tileNum += 2; + } + } + //_08044ADC + else + { + if (i >= sp14) + { + //_08044AE6 + gSprites[sp[i]].oam.tileNum += 1; + gSprites[sp[i]].data7 = 1; + // to _08044B52 + } + else if (b[i].unk0 == 0) + { + //_08044B14 + gSprites[sp[i]].oam.tileNum += 3; + // to _08044B46 + } + else if (b[i].unk4 != 0) + { + gSprites[sp[i]].oam.tileNum += 2; + } + } + } + } + //_08044B5E + else + { + // Mismatch occurrs in this loop initialization + for (i = 0; i < 6; i++) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (b[i].unk0 == 0xFFFF) + { + gSprites[sp[5 - i]].oam.tileNum += 1; + gSprites[sp[5 - i]].data7 = 1; + } + else if (b[i].unk0 == 0) + { + gSprites[sp[5 - i]].oam.tileNum += 3; + } + else if (b[i].unk4 != 0) + { + gSprites[sp[5 - i]].oam.tileNum += 2; + } + } + else + { + if (i >= sp14) + { + gSprites[sp[5 - i]].oam.tileNum += 1; + gSprites[sp[5 - i]].data7 = 1; + } + else if (b[i].unk0 == 0) + { + gSprites[sp[5 - i]].oam.tileNum += 3; + } + else if (b[i].unk4 != 0) + { + gSprites[sp[5 - i]].oam.tileNum += 2; + } + } + // This corrects the initialization order, but messes up the counter update order + asm(""::"r"(&b[i])); + } + } + //_08044C38 + taskId = CreateTask(TaskDummy, 5); + gTasks[taskId].data[0] = a; + gTasks[taskId].data[1] = sp18; + for (i = 0; i < 6; i++) + gTasks[taskId].data[3 + i] = sp[i]; + gTasks[taskId].data[10] = d; + PlaySE12WithPanning(SE_TB_START, 0); + return taskId; +} +#else +__attribute__((naked)) +u8 sub_8044804(u8 a, const struct BattleInterfaceStruct2 *b, u8 c, u8 d) +{ + 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\ + str r1, [sp, 0xC]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x8]\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + adds r4, r2, 0\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + str r3, [sp, 0x10]\n\ + cmp r4, 0\n\ + beq _08044834\n\ + bl GetBankIdentity\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x3\n\ + beq _08044878\n\ +_08044834:\n\ + ldr r0, [sp, 0x8]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08044854\n\ + movs r7, 0\n\ + movs r1, 0x88\n\ + movs r2, 0x60\n\ + movs r0, 0x64\n\ + mov r8, r0\n\ + ldr r5, _08044850 @ =0x0000fffb\n\ + b _08044884\n\ + .align 2, 0\n\ +_08044850: .4byte 0x0000fffb\n\ +_08044854:\n\ + movs r7, 0x1\n\ + cmp r4, 0\n\ + beq _08044864\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0804486A\n\ +_08044864:\n\ + movs r1, 0x68\n\ + movs r2, 0x28\n\ + b _0804486E\n\ +_0804486A:\n\ + movs r1, 0x68\n\ + movs r2, 0x10\n\ +_0804486E:\n\ + ldr r3, _08044874 @ =0x0000ff9c\n\ + mov r8, r3\n\ + b _08044882\n\ + .align 2, 0\n\ +_08044874: .4byte 0x0000ff9c\n\ +_08044878:\n\ + movs r7, 0x1\n\ + movs r1, 0x68\n\ + movs r2, 0x28\n\ + ldr r5, _08044930 @ =0x0000ff9c\n\ + mov r8, r5\n\ +_08044882:\n\ + movs r5, 0x5\n\ +_08044884:\n\ + movs r6, 0\n\ + str r6, [sp, 0x14]\n\ + lsls r4, r7, 3\n\ + ldr r0, _08044934 @ =gUnknown_0820A754\n\ + mov r10, r0\n\ + lsls r3, r7, 1\n\ + mov r9, r3\n\ + lsls r1, 16\n\ + str r1, [sp, 0x20]\n\ + lsls r2, 16\n\ + str r2, [sp, 0x24]\n\ + ldr r2, _08044938 @ =0x0000ffff\n\ + ldr r1, [sp, 0xC]\n\ + movs r6, 0x5\n\ +_080448A0:\n\ + ldrh r0, [r1]\n\ + cmp r0, r2\n\ + beq _080448B4\n\ + ldr r3, [sp, 0x14]\n\ + lsls r0, r3, 24\n\ + movs r3, 0x80\n\ + lsls r3, 17\n\ + adds r0, r3\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x14]\n\ +_080448B4:\n\ + adds r1, 0x8\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080448A0\n\ + mov r6, r10\n\ + adds r0, r4, r6\n\ + bl LoadCompressedObjectPic\n\ + ldr r0, _0804493C @ =gUnknown_0820A784\n\ + adds r0, r4, r0\n\ + bl LoadSpriteSheet\n\ + ldr r0, _08044940 @ =gUnknown_0820A764\n\ + adds r0, r4, r0\n\ + bl LoadSpritePalette\n\ + ldr r0, _08044944 @ =gUnknown_0820A774\n\ + adds r0, r4, r0\n\ + bl LoadSpritePalette\n\ + mov r1, r9\n\ + adds r0, r1, r7\n\ + lsls r0, 3\n\ + ldr r1, _08044948 @ =gSpriteTemplate_820A7A4\n\ + adds r0, r1\n\ + ldr r2, [sp, 0x20]\n\ + asrs r1, r2, 16\n\ + ldr r3, [sp, 0x24]\n\ + asrs r2, r3, 16\n\ + movs r3, 0xA\n\ + bl CreateSprite\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x18]\n\ + lsls r0, 4\n\ + ldr r6, [sp, 0x18]\n\ + adds r0, r6\n\ + lsls r0, 2\n\ + ldr r1, _0804494C @ =gSprites\n\ + adds r4, r0, r1\n\ + ldr r1, _08044950 @ =gSubspriteTables_820A6E4\n\ + adds r0, r4, 0\n\ + bl SetSubspriteTables\n\ + mov r0, r8\n\ + strh r0, [r4, 0x24]\n\ + strh r5, [r4, 0x2E]\n\ + cmp r7, 0\n\ + beq _08044954\n\ + ldrh r0, [r4, 0x20]\n\ + subs r0, 0x60\n\ + strh r0, [r4, 0x20]\n\ + ldrb r1, [r4, 0x3]\n\ + movs r0, 0x3F\n\ + negs r0, r0\n\ + ands r0, r1\n\ + movs r1, 0x10\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x3]\n\ + b _0804495A\n\ + .align 2, 0\n\ +_08044930: .4byte 0x0000ff9c\n\ +_08044934: .4byte gUnknown_0820A754\n\ +_08044938: .4byte 0x0000ffff\n\ +_0804493C: .4byte gUnknown_0820A784\n\ +_08044940: .4byte gUnknown_0820A764\n\ +_08044944: .4byte gUnknown_0820A774\n\ +_08044948: .4byte gSpriteTemplate_820A7A4\n\ +_0804494C: .4byte gSprites\n\ +_08044950: .4byte gSubspriteTables_820A6E4\n\ +_08044954:\n\ + ldrh r0, [r4, 0x20]\n\ + adds r0, 0x60\n\ + strh r0, [r4, 0x20]\n\ +_0804495A:\n\ + movs r6, 0\n\ + ldr r1, _08044A04 @ =gSprites\n\ + mov r10, r1\n\ + mov r4, sp\n\ + mov r2, r9\n\ + adds r0, r2, r7\n\ + lsls r0, 3\n\ + str r0, [sp, 0x1C]\n\ + movs r3, 0xA\n\ + mov r9, r3\n\ + mov r8, r6\n\ +_08044970:\n\ + ldr r0, _08044A08 @ =gSpriteTemplate_820A7D4\n\ + ldr r5, [sp, 0x24]\n\ + ldr r1, _08044A0C @ =0xfffc0000\n\ + adds r2, r5, r1\n\ + ldr r3, [sp, 0x1C]\n\ + adds r0, r3, r0\n\ + ldr r5, [sp, 0x20]\n\ + asrs r1, r5, 16\n\ + asrs r2, 16\n\ + movs r3, 0x9\n\ + bl CreateSpriteAtEnd\n\ + strb r0, [r4]\n\ + ldr r0, [sp, 0x10]\n\ + cmp r0, 0\n\ + bne _080449A0\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 4\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + ldr r2, _08044A10 @ =gSprites + 0x1C\n\ + adds r1, r2\n\ + ldr r0, _08044A14 @ =sub_8045180\n\ + str r0, [r1]\n\ +_080449A0:\n\ + ldr r5, _08044A04 @ =gSprites\n\ + cmp r7, 0\n\ + bne _080449BE\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + add r0, r10\n\ + strh r7, [r0, 0x24]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + add r0, r10\n\ + strh r7, [r0, 0x26]\n\ +_080449BE:\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + movs r1, 0\n\ + mov r3, sp\n\ + ldrh r3, [r3, 0x18]\n\ + strh r3, [r0, 0x2E]\n\ + cmp r7, 0\n\ + bne _08044A18\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 4\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + ldrh r0, [r1, 0x20]\n\ + adds r0, 0x18\n\ + add r0, r8\n\ + strh r0, [r1, 0x20]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + mov r1, r9\n\ + strh r1, [r0, 0x30]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + movs r1, 0x78\n\ + b _08044A56\n\ + .align 2, 0\n\ +_08044A04: .4byte gSprites\n\ +_08044A08: .4byte gSpriteTemplate_820A7D4\n\ +_08044A0C: .4byte 0xfffc0000\n\ +_08044A10: .4byte gSprites + 0x1C\n\ +_08044A14: .4byte sub_8045180\n\ +_08044A18:\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r5\n\ + ldrh r3, [r2, 0x20]\n\ + subs r3, 0x18\n\ + movs r1, 0x5\n\ + subs r1, r6\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 1\n\ + subs r3, r0\n\ + strh r3, [r2, 0x20]\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r5\n\ + movs r1, 0x6\n\ + subs r1, r6\n\ + lsls r0, r1, 3\n\ + subs r0, r1\n\ + adds r0, 0xA\n\ + strh r0, [r2, 0x30]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + ldr r1, _08044AC4 @ =0x0000ff88\n\ +_08044A56:\n\ + strh r1, [r0, 0x24]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + strh r7, [r0, 0x32]\n\ + adds r4, 0x1\n\ + movs r2, 0x7\n\ + add r9, r2\n\ + movs r3, 0xA\n\ + add r8, r3\n\ + adds r6, 0x1\n\ + cmp r6, 0x5\n\ + bgt _08044A76\n\ + b _08044970\n\ +_08044A76:\n\ + ldr r0, [sp, 0x8]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _08044B5E\n\ + movs r6, 0\n\ + ldr r5, _08044AC8 @ =gBattleTypeFlags\n\ + mov r10, r5\n\ + ldr r0, _08044ACC @ =0x0000ffff\n\ + mov r9, r0\n\ + ldr r7, _08044AD0 @ =gSprites\n\ + ldr r1, _08044AD4 @ =0x000003ff\n\ + mov r12, r1\n\ + ldr r2, _08044AD8 @ =0xfffffc00\n\ + mov r8, r2\n\ + mov r4, sp\n\ + ldr r5, [sp, 0xC]\n\ +_08044A9A:\n\ + mov r3, r10\n\ + ldrh r1, [r3]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08044ADC\n\ + ldrh r0, [r5]\n\ + cmp r0, r9\n\ + beq _08044AE6\n\ + cmp r0, 0\n\ + bne _08044B2E\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x3\n\ + b _08044B46\n\ + .align 2, 0\n\ +_08044AC4: .4byte 0x0000ff88\n\ +_08044AC8: .4byte gBattleTypeFlags\n\ +_08044ACC: .4byte 0x0000ffff\n\ +_08044AD0: .4byte gSprites\n\ +_08044AD4: .4byte 0x000003ff\n\ +_08044AD8: .4byte 0xfffffc00\n\ +_08044ADC:\n\ + ldr r1, [sp, 0x14]\n\ + lsls r0, r1, 24\n\ + asrs r0, 24\n\ + cmp r6, r0\n\ + blt _08044B14\n\ +_08044AE6:\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x1\n\ + mov r0, r12\n\ + ands r1, r0\n\ + mov r0, r8\n\ + ands r0, r3\n\ + orrs r0, r1\n\ + strh r0, [r2, 0x4]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r7\n\ + movs r1, 0x1\n\ + strh r1, [r0, 0x3C]\n\ + b _08044B52\n\ +_08044B14:\n\ + ldrh r0, [r5]\n\ + cmp r0, 0\n\ + bne _08044B2E\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x3\n\ + b _08044B46\n\ +_08044B2E:\n\ + ldr r0, [r5, 0x4]\n\ + cmp r0, 0\n\ + beq _08044B52\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x2\n\ +_08044B46:\n\ + mov r0, r12\n\ + ands r1, r0\n\ + mov r0, r8\n\ + ands r0, r3\n\ + orrs r0, r1\n\ + strh r0, [r2, 0x4]\n\ +_08044B52:\n\ + adds r4, 0x1\n\ + adds r5, 0x8\n\ + adds r6, 0x1\n\ + cmp r6, 0x5\n\ + ble _08044A9A\n\ + b _08044C38\n\ +_08044B5E:\n\ + movs r6, 0\n\ + ldr r1, _08044BA4 @ =gBattleTypeFlags\n\ + mov r10, r1\n\ + ldr r2, _08044BA8 @ =0x0000ffff\n\ + mov r9, r2\n\ + ldr r7, _08044BAC @ =gSprites\n\ + ldr r3, _08044BB0 @ =0x000003ff\n\ + mov r12, r3\n\ + ldr r5, _08044BB4 @ =0xfffffc00\n\ + mov r8, r5\n\ + ldr r5, [sp, 0xC]\n\ + mov r4, sp\n\ + adds r4, 0x5\n\ +_08044B78:\n\ + mov r0, r10\n\ + ldrh r1, [r0]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08044BB8\n\ + ldrh r0, [r5]\n\ + cmp r0, r9\n\ + beq _08044BC2\n\ + cmp r0, 0\n\ + bne _08044C0A\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x3\n\ + b _08044C22\n\ + .align 2, 0\n\ +_08044BA4: .4byte gBattleTypeFlags\n\ +_08044BA8: .4byte 0x0000ffff\n\ +_08044BAC: .4byte gSprites\n\ +_08044BB0: .4byte 0x000003ff\n\ +_08044BB4: .4byte 0xfffffc00\n\ +_08044BB8:\n\ + ldr r1, [sp, 0x14]\n\ + lsls r0, r1, 24\n\ + asrs r0, 24\n\ + cmp r6, r0\n\ + blt _08044BF0\n\ +_08044BC2:\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x1\n\ + mov r0, r12\n\ + ands r1, r0\n\ + mov r0, r8\n\ + ands r0, r3\n\ + orrs r0, r1\n\ + strh r0, [r2, 0x4]\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r7\n\ + movs r1, 0x1\n\ + strh r1, [r0, 0x3C]\n\ + b _08044C2E\n\ +_08044BF0:\n\ + ldrh r0, [r5]\n\ + cmp r0, 0\n\ + bne _08044C0A\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x3\n\ + b _08044C22\n\ +_08044C0A:\n\ + ldr r0, [r5, 0x4]\n\ + cmp r0, 0\n\ + beq _08044C2E\n\ + ldrb r0, [r4]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r7\n\ + ldrh r3, [r2, 0x4]\n\ + lsls r1, r3, 22\n\ + lsrs r1, 22\n\ + adds r1, 0x2\n\ +_08044C22:\n\ + mov r0, r12\n\ + ands r1, r0\n\ + mov r0, r8\n\ + ands r0, r3\n\ + orrs r0, r1\n\ + strh r0, [r2, 0x4]\n\ +_08044C2E:\n\ + subs r4, 0x1\n\ + adds r5, 0x8\n\ + adds r6, 0x1\n\ + cmp r6, 0x5\n\ + ble _08044B78\n\ +_08044C38:\n\ + ldr r0, _08044C98 @ =TaskDummy\n\ + movs r1, 0x5\n\ + bl CreateTask\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + ldr r2, _08044C9C @ =gTasks\n\ + lsls r3, r4, 2\n\ + adds r1, r3, r4\n\ + lsls r1, 3\n\ + adds r0, r1, r2\n\ + mov r5, sp\n\ + ldrh r5, [r5, 0x8]\n\ + strh r5, [r0, 0x8]\n\ + mov r6, sp\n\ + ldrh r6, [r6, 0x18]\n\ + strh r6, [r0, 0xA]\n\ + movs r6, 0\n\ + adds r0, r2, 0\n\ + adds r0, 0xE\n\ + adds r1, r0\n\ +_08044C62:\n\ + mov r5, sp\n\ + adds r0, r5, r6\n\ + ldrb r0, [r0]\n\ + strh r0, [r1]\n\ + adds r1, 0x2\n\ + adds r6, 0x1\n\ + cmp r6, 0x5\n\ + ble _08044C62\n\ + adds r0, r3, r4\n\ + lsls r0, 3\n\ + adds r0, r2\n\ + ldrh r6, [r5, 0x10]\n\ + strh r6, [r0, 0x1C]\n\ + movs r0, 0x72\n\ + movs r1, 0\n\ + bl PlaySE12WithPanning\n\ + adds r0, r4, 0\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\ +_08044C98: .4byte TaskDummy\n\ +_08044C9C: .4byte gTasks\n\ + .syntax divided\n"); +} +#endif + +void sub_8044CA0(u8 taskId) +{ + u8 sp[6]; + u8 r9; + u8 r10; + u8 sp8; + s32 i; + + r9 = gTasks[taskId].data[10]; + r10 = gTasks[taskId].data[1]; + sp8 = gTasks[taskId].data[0]; + for (i = 0; i < 6; i++) + sp[i] = gTasks[taskId].data[3 + i]; + + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = 0x10; + gTasks[taskId].data[15] = 16; + for (i = 0; i < 6; i++) + gSprites[sp[i]].oam.objMode = 1; + gSprites[r10].oam.objMode = 1; + if (r9 != 0) + { + for (i = 0; i < 6; i++) + { + if (GetBankSide(sp8) != 0) + { + gSprites[sp[5 - i]].data1 = 7 * i; + gSprites[sp[5 - i]].data3 = 0; + gSprites[sp[5 - i]].data4 = 0; + gSprites[sp[5 - i]].callback = sub_8045110; + } + else + { + gSprites[sp[i]].data1 = 7 * i; + gSprites[sp[i]].data3 = 0; + gSprites[sp[i]].data4 = 0; + gSprites[sp[i]].callback = sub_8045110; + } + } + gSprites[r10].data0 /= 2; + gSprites[r10].data1 = 0; + gSprites[r10].callback = sub_8045048; + SetSubspriteTables(&gSprites[r10], gSubspriteTables_820A6EC); + gTasks[taskId].func = sub_8044E74; + } + else + { + gTasks[taskId].func = sub_8044F70; + } +} + +static void sub_8044E74(u8 taskId) +{ + u16 temp = gTasks[taskId].data[11]++; + + if ((temp & 1) == 0) + { + gTasks[taskId].data[15]--; + if (gTasks[taskId].data[15] < 0) + return; + REG_BLDALPHA = (gTasks[taskId].data[15]) | ((16 - gTasks[taskId].data[15]) << 8); + } + if (gTasks[taskId].data[15] == 0) + gTasks[taskId].func = sub_8044ECC; +} + +static void sub_8044ECC(u8 taskId) +{ + u8 sp[6]; + s32 i; + + gTasks[taskId].data[15]--; + if (gTasks[taskId].data[15] == -1) + { + u8 var = gTasks[taskId].data[1]; + + for (i = 0; i < 6; i++) + sp[i] = gTasks[taskId].data[3 + i]; + DestroySpriteAndFreeResources(&gSprites[var]); + DestroySpriteAndFreeResources(&gSprites[sp[0]]); + for (i = 1; i < 6; i++) + DestroySprite(&gSprites[sp[i]]); + } + else if (gTasks[taskId].data[15] == -3) + { + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyTask(taskId); + } +} + +static void sub_8044F70(u8 taskId) +{ + u8 sp[6]; + s32 i; + + gTasks[taskId].data[15]--; + // Same as above function except with this check. + if (gTasks[taskId].data[15] >= 0) + { + REG_BLDALPHA = (gTasks[taskId].data[15]) | ((16 - gTasks[taskId].data[15]) << 8); + } + else if (gTasks[taskId].data[15] == -1) + { + u8 var = gTasks[taskId].data[1]; + + for (i = 0; i < 6; i++) + sp[i] = gTasks[taskId].data[3 + i]; + DestroySpriteAndFreeResources(&gSprites[var]); + DestroySpriteAndFreeResources(&gSprites[sp[0]]); + for (i = 1; i < 6; i++) + DestroySprite(&gSprites[sp[i]]); + } + else if (gTasks[taskId].data[15] == -3) + { + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyTask(taskId); + } +} + +void sub_8045030(struct Sprite *sprite) +{ + if (sprite->pos2.x != 0) + sprite->pos2.x += sprite->data0; +} + +static void sub_8045048(struct Sprite *sprite) +{ + sprite->data1 += 32; + if (sprite->data0 > 0) + sprite->pos2.x += sprite->data1 >> 4; + else + sprite->pos2.x -= sprite->data1 >> 4; + sprite->data1 &= 0xF; +} + +void sub_804507C(struct Sprite *sprite) +{ + u8 r3; + u16 r2; + s8 pan; + + if (sprite->data1 > 0) + { + sprite->data1--; + return; + } + r3 = sprite->data2; + r2 = sprite->data3; + r2 += 56; + sprite->data3 = r2 & 0xFFF0; + if (r3 != 0) + { + sprite->pos2.x += r2 >> 4; + if (sprite->pos2.x > 0) + sprite->pos2.x = 0; + } + else + { + sprite->pos2.x -= r2 >> 4; + if (sprite->pos2.x < 0) + sprite->pos2.x = 0; + } + if (sprite->pos2.x == 0) + { + pan = 63; + if (r3 != 0) + pan = -64; + if (sprite->data7 != 0) + PlaySE2WithPanning(SE_TB_KARA, pan); + else + PlaySE1WithPanning(SE_TB_KON, pan); + sprite->callback = SpriteCallbackDummy; + } +} + +static void sub_8045110(struct Sprite *sprite) +{ + u8 r0; + u16 r2; + + if (sprite->data1 > 0) + { + sprite->data1--; + return; + } + r0 = sprite->data2; + r2 = sprite->data3; + r2 += 56; + sprite->data3 = r2 & 0xFFF0; + if (r0 != 0) + sprite->pos2.x += r2 >> 4; + else + sprite->pos2.x -= r2 >> 4; + if (sprite->pos2.x + sprite->pos1.x > 248 + || sprite->pos2.x + sprite->pos1.x < -8) + { + sprite->invisible = TRUE; + sprite->callback = SpriteCallbackDummy; + } +} + +void sub_8045180(struct Sprite *sprite) +{ + u8 spriteId = sprite->data0; + + sprite->pos2.x = gSprites[spriteId].pos2.x; + sprite->pos2.y = gSprites[spriteId].pos2.y; +} + +static void sub_80451A0(u8 a, struct Pokemon *pkmn) +{ + u8 nickname[POKEMON_NAME_LENGTH]; + u8 gender; + u16 species; + u8 language; + u8 *ptr; + s32 i; + s32 _7; + u8 *const *r1; + + StringCopy(gDisplayedStringBattle, gUnknown_0820A8B0); + GetMonData(pkmn, MON_DATA_NICKNAME, nickname); + StringGetEnd10(nickname); + ptr = StringCopy(gDisplayedStringBattle + 3, nickname); + ptr[0] = EXT_CTRL_CODE_BEGIN; + ptr[1] = 3; + ptr[2] = 2; + ptr[3] = EXT_CTRL_CODE_BEGIN; + ptr[4] = 1; + ptr += 5; + gender = GetMonGender(pkmn); + species = GetMonData(pkmn, MON_DATA_SPECIES); + language = GetMonData(pkmn, MON_DATA_LANGUAGE); + if (sub_8040D3C(species, nickname, language)) + gender = 100; + switch (gender) + { + default: + ptr[0] = 0xB; + ptr[1] = EOS; + ptr += 1; + break; + case MON_MALE: + ptr[0] = 0xB; + ptr[1] = CHAR_MALE; + ptr[2] = EOS; + ptr += 2; + break; + case MON_FEMALE: + ptr[0] = 0xA; + ptr[1] = CHAR_FEMALE; + ptr[2] = EOS; + ptr += 2; + break; + } + ptr[0] = EXT_CTRL_CODE_BEGIN; + ptr[1] = 0x13; + ptr[2] = 0x37; + ptr[3] = EOS; + ptr = (u8 *)0x02000520 + GetBankIdentity(gSprites[a].data6) * 0x180; + sub_80034D4(ptr, gDisplayedStringBattle); + + i = 0; + _7 = 7; + if (GetMonData(pkmn, MON_DATA_LANGUAGE) == 1 + && GetMonData(pkmn, MON_DATA_IS_EGG) == 0) + { + u8 *p = gDisplayedStringBattle; + + while (*p != EOS) + { + if (*p == EXT_CTRL_CODE_BEGIN) + { + p += GetExtCtrlCodeLength(p[1]) + 1; + } + else + { + u8 r0; + + if ((*p >= 0x37 && *p <= 0x4A) || (*p >= 0x87 && *p <= 0x9A)) + r0 = 0x2C; + else if ((*p >= 0x4B && *p <= 0x4F) || (*p >= 0x9B && *p <= 0x9F)) + r0 = 0x2D; + else + r0 = 0x2B; + + CpuCopy32(sub_8043CDC(r0), ptr + 0x40 * i, 32); + i++; + p++; + } + } + } + + for (; i < _7; i++) + CpuCopy32(sub_8043CDC(0x2B), ptr + 64 * i, 32); + + if (GetBankSide(gSprites[a].data6) == 0 && !IsDoubleBattle()) + { + r1 = (u8 *const *)gUnknown_0820A8B4; + for (i = 0; i < _7; i++) + { + u8 *r4 = r1[i]; + + r4 += gSprites[a].oam.tileNum * 32; + CpuCopy32(ptr, r4, 32); + ptr += 32; + + r4 += 0x100; + CpuCopy32(ptr, r4, 32); + ptr += 32; + } + } + else + { + if (GetBankSide(gSprites[a].data6) == 0) + r1 = (u8 *const *)gUnknown_0820A904; + else + r1 = (u8 *const *)gUnknown_0820A8DC; + for (i = 0; i < _7; i++) + { + u8 *r4 = r1[i]; + + r4 += gSprites[a].oam.tileNum * 32; + CpuCopy32(ptr, r4, 32); + ptr += 32; + + r4 += 0x100; + CpuCopy32(ptr, r4, 32); + ptr += 32; + } + } +} + +static void sub_8045458(u8 a, u8 b) +{ + u8 r4; + + if (gBattleTypeFlags & 0x200) + return; + if (gBattleTypeFlags & 8) + return; + + r4 = gSprites[a].data6; + if (GetBankSide(r4) != 0) + { + u16 species = GetMonData(&gEnemyParty[gBattlePartyID[r4]], MON_DATA_SPECIES); + if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(species), 1) != 0) + { + r4 = gSprites[a].data5; + if (b != 0) + CpuCopy32(sub_8043CDC(0x46), (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32), 32); + else + CpuFill32(0, (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32), 32); + } + } +} + +static void draw_status_ailment_maybe(u8 a) +{ + s32 r4; + s32 r4_2; + u8 r7; + u8 r10; + s16 r8; + const u8 *r6; + u8 r0; + s32 i; + + r7 = gSprites[a].data6; + r10 = gSprites[a].data5; + if (GetBankSide(r7) == 0) + { + r4 = GetMonData(&gPlayerParty[gBattlePartyID[r7]], MON_DATA_STATUS); + if (!IsDoubleBattle()) + r8 = 0x1A; + else + r8 = 0x12; + } + else + { + r4 = GetMonData(&gEnemyParty[gBattlePartyID[r7]], MON_DATA_STATUS); + r8 = 0x11; + } + if (r4 & 7) + { + r6 = sub_8043CDC(sub_80457E8(0x1B, r7)); + r0 = 2; + } + else if (r4 & 0x88) + { + r6 = sub_8043CDC(sub_80457E8(0x15, r7)); + r0 = 0; + } + else if (r4 & 0x10) + { + r6 = sub_8043CDC(sub_80457E8(0x21, r7)); + r0 = 4; + } + else if (r4 & 0x20) + { + r6 = sub_8043CDC(sub_80457E8(0x1E, r7)); + r0 = 3; + } + else if (r4 & 0x40) + { + r6 = sub_8043CDC(sub_80457E8(0x18, r7)); + r0 = 1; + } + else + { + r6 = sub_8043CDC(0x27); + + for (i = 0; i < 3; i++) + CpuCopy32(r6, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8 + i) * 32), 32); + + if (!ewram17800[r7].unk0_4) + CpuCopy32(sub_8043CDC(1), (void *)(OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32), 64); + + sub_8045458(a, 1); + return; + } + + r4_2 = gSprites[a].oam.paletteNum * 16; + r4_2 += r7 + 12; + // I don't like writing the array index like this, but I can't get it to match otherwise. + FillPalette(r0[gBattleInterfaceStatusIcons_DynPal], r4_2 + 0x100, 2); + CpuCopy16(gPlttBufferUnfaded + 0x100 + r4_2, (void *)(OBJ_PLTT + r4_2 * 2), 2); + CpuCopy32(r6, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8) * 32), 96); + if (IsDoubleBattle() == TRUE || GetBankSide(r7) == TRUE) + { + if (!ewram17800[r7].unk0_4) + { + CpuCopy32(sub_8043CDC(0), (void *)(OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32), 32); + CpuCopy32(sub_8043CDC(0x41), (void *)(OBJ_VRAM0 + (gSprites[r10].oam.tileNum + 1) * 32), 32); + } + } + sub_8045458(a, 0); +} + +static u8 sub_80457E8(u8 a, u8 b) +{ + u8 ret = a; + + switch (a) + { + case 21: + if (b == 0) + ret = 21; + else if (b == 1) + ret = 71; + else if (b == 2) + ret = 86; + else + ret = 101; + break; + case 24: + if (b == 0) + ret = 24; + else if (b == 1) + ret = 74; + else if (b == 2) + ret = 89; + else + ret = 104; + break; + case 27: + if (b == 0) + ret = 27; + else if (b == 1) + ret = 77; + else if (b == 2) + ret = 92; + else + ret = 107; + break; + case 30: + if (b == 0) + ret = 30; + else if (b == 1) + ret = 80; + else if (b == 2) + ret = 95; + else + ret = 110; + break; + case 33: + if (b == 0) + ret = 33; + else if (b == 1) + ret = 83; + else if (b == 2) + ret = 98; + else + ret = 113; + break; + } + return ret; +} + +static void sub_80458B0(u8 a) +{ + u8 *r6; + u8 r8; + u8 i; + s32 r7; + u8 *addr; + + r6 = (u8 *)0x02000520 + GetBankIdentity(gSprites[a].data6) * 0x180; + r8 = 7; + sub_80034D4(r6, BattleText_SafariBalls); + for (i = 0; i < r8; i++) + CpuCopy32(sub_8043CDC(0x2B), r6 + i * 64, 32); + for (r7 = 3; r7 < 3 + r8; r7++) + { + addr = (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + MACRO1(r7)) * 32); + CpuCopy32(r6, addr, 32); + r6 += 32; + + addr = (void *)(OBJ_VRAM0 + (8 + gSprites[a].oam.tileNum + MACRO1(r7)) * 32); + CpuCopy32(r6, addr, 32); + r6 += 32; + } + +} + +static void sub_8045998(u8 a) +{ + u8 *r7; + u8 status; + s32 r6; + s32 i; + + r7 = StringCopy(gDisplayedStringBattle, BattleText_SafariBallsLeft); + r7 = sub_8003504(r7, gNumSafariBalls, 10, 1); + StringAppend(r7, BattleText_HighlightRed); + status = GetBankIdentity(gSprites[a].data6); + r7 = (u8 *)0x02000520 + status * 0x180; + r6 = 5; + sub_80034D4(r7, gDisplayedStringBattle); + r7 = (u8 *)0x02000520 + status * 0x180 + 32; + for (i = 6; i < 6 + r6; i++) + { + CpuCopy32(r7, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x18 + MACRO1(i)) * 32), 32); + r7 += 64; + } +} + +void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c) +{ + u8 r10; + u32 maxhp; + u32 currhp; + + r10 = gSprites[a].data6; + if (GetBankSide(r10) == 0) + { + if (c == 3 || c == 0) + sub_8043FC0(a, GetMonData(pkmn, MON_DATA_LEVEL)); + if (c == 1 || c == 0) + sub_80440EC(a, GetMonData(pkmn, MON_DATA_HP), 0); + if (c == 2 || c == 0) + sub_80440EC(a, GetMonData(pkmn, MON_DATA_MAX_HP), 1); + if (c == 5 || c == 0) + { + load_gfxc_health_bar(0); + maxhp = GetMonData(pkmn, MON_DATA_MAX_HP); + currhp = GetMonData(pkmn, MON_DATA_HP); + sub_8043D84(r10, a, maxhp, currhp, 0); + sub_8045C78(r10, a, 0, 0); + } + if (!IsDoubleBattle() && (c == 6 || c == 0)) + { + u16 species; + u8 level; + u32 exp; + u32 var1; + u32 var2; + u32 currLevelExp; + + load_gfxc_health_bar(3); + species = GetMonData(pkmn, MON_DATA_SPECIES); + level = GetMonData(pkmn, MON_DATA_LEVEL); + exp = GetMonData(pkmn, MON_DATA_EXP); + currLevelExp = gExperienceTables[gBaseStats[species].growthRate][level]; + var1 = exp - currLevelExp; + var2 = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLevelExp; + sub_8043D84(r10, a, var2, var1, 0); + sub_8045C78(r10, a, 1, 0); + } + if (c == 4 || c == 0) + sub_80451A0(a, pkmn); + if (c == 9 || c == 0) + draw_status_ailment_maybe(a); + if (c == 10) + sub_80458B0(a); + if (c == 10 || c == 11) + sub_8045998(a); + } + else + { + if (c == 3 || c == 0) + sub_8043FC0(a, GetMonData(pkmn, MON_DATA_LEVEL)); + if (c == 5 || c == 0) + { + load_gfxc_health_bar(0); + maxhp = GetMonData(pkmn, MON_DATA_MAX_HP); + currhp = GetMonData(pkmn, MON_DATA_HP); + sub_8043D84(r10, a, maxhp, currhp, 0); + sub_8045C78(r10, a, 0, 0); + } + if (c == 4 || c == 0) + sub_80451A0(a, pkmn); + if (c == 9 || c == 0) + draw_status_ailment_maybe(a); + } +} + +s32 sub_8045C78(u8 a, u8 unused1, u8 c, u8 unused2) +{ + s32 r6; + + if (c == 0) + { + r6 = sub_8045F58(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, 6, 1); + } + else + { + u16 r5; + s32 r8; + + r5 = GetScaledExpFraction(ewram17850[a].unk8, ewram17850[a].unkC, ewram17850[a].unk4, 8); + if (r5 == 0) + r5 = 1; + r8 = ewram17850[a].unkC; + r5 = ABS(r8 / r5); + r6 = sub_8045F58(ewram17850[a].unk4, ewram17850[a].unk8, r8, &ewram17850[a].unk10, 8, r5); + } + if (c == 1 || (c == 0 && (!ewram17800[a].unk0_4))) + sub_8045D58(a, c); + if (r6 == -1) + ewram17850[a].unk10 = 0; + return r6; +} + +static void sub_8045D58(u8 a, u8 b) +{ + u8 sp8[7]; + u8 r0; + u8 r8; + u8 i; + + switch (b) + { + case 0: + r0 = sub_804602C(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, sp8, 6); + r8 = 3; + if (r0 <= 0x18) + { + r8 = 0x38; + if (r0 > 9) + r8 = 0x2F; + } + for (i = 0; i < 6; i++) + { + u8 r4 = gSprites[ewram17850[a].unk0].data5; + if (i < 2) + CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 2 + i) * 32), 32); + else + CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, (void *)(OBJ_VRAM0 + 64 + (i + gSprites[r4].oam.tileNum) * 32), 32); + } + break; + case 1: + sub_804602C(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, sp8, 8); + r0 = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_LEVEL); + if (r0 == 100) + { + for (i = 0; i < 8; i++) + sp8[i] = 0; + } + for (i = 0; i < 8; i++) + { + if (i < 4) + CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, (void *)(OBJ_VRAM0 + (gSprites[ewram17850[a].unk0].oam.tileNum + 0x24 + i) * 32), 32); + else + CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, (void *)(OBJ_VRAM0 + 0xB80 + (i + gSprites[ewram17850[a].unk0].oam.tileNum) * 32), 32); + } + break; + } +} + +static int sub_8045F58(s32 a, s32 b, int c, int *d, u8 e, u16 f) +{ + u8 r2 = e << 3; + int r6; + int ret; + + if (*d == -32768) + { + if (a < r2) + *d = b << 8; + else + *d = b; + } + //_08045F8A + b -= c; + if (b < 0) + b = 0; + else if (b > a) + b = a; + if (a < r2) + { + int var = *d >> 8; + + r6 = *d; + if (b == var && (r6 & 0xFF) == 0) + return -1; + } + else + { + r6 = *d; + if (b == r6) + return -1; + } + //_08045FC4 + if (a < r2) + { + int r0 = (a << 8) / r2; + + if (c < 0) + { + *d = r6 + r0; + ret = *d >> 8; + if (ret >= b) + { + *d = b << 8; + ret = b; + } + } + //_08045FE2 + else + { + *d = r6 - r0; + ret = *d >> 8; + if ((*d & 0xFF) > 0) + ret++; + if (ret <= b) + { + *d = b << 8; + ret = b; + } + } + } + else + { + //_08045FFE + if (c < 0) + { + *d += f; + if (*d > b) + *d = b; + ret = *d; + } + //_08046010 + else + { + *d -= f; + if (*d < b) + *d = b; + ret = *d; + } + } + return ret; +} + +static u8 sub_804602C(int a, int b, int c, int *d, u8 *e, u8 f) +{ + s32 r5 = b - c; + u8 r3; + u8 i; + u8 r2; + + if (r5 < 0) + r5 = 0; + else if (r5 > a) + r5 = a; + r3 = f << 3; + for (i = 0; i < f; i++) + e[i] = 0; + if (a < r3) + r2 = *d * r3 / a >> 8; + else + r2 = *d * r3 / a; + r3 = r2; + if (r3 == 0 && r5 > 0) + { + e[0] = 1; + r3 = 1; + } + else + { + for (i = 0; i < f; i++) + { + if (r2 >= 8) + { + e[i] = 8; + } + else + { + e[i] = r2; + break; + } + r2 -= 8; + } + } + return r3; +} + +s16 sub_80460C8(struct BattleInterfaceStruct1 *a, int *b, void *c, int d) +{ + u16 r7; + s16 r1; + + r7 = sub_8045F58(a->unk0, a->unk4, a->unk8, b, 6, 1); + sub_8046128(a, b, c); + if (a->unk0 < 0x30) + r1 = *b >> 8; + else + r1 = *b; + do_nothing(a->unk0, r1, d); + return r7; +} + +static void sub_8046128(struct BattleInterfaceStruct1 *a, int *b, void *c) +{ + u8 sp8[6]; + u16 sp10[6]; + u8 i; + + sub_804602C(a->unk0, a->unk4, a->unk8, b, (u8 *)sp8, 6); + for (i = 0; i < 6; i++) + sp10[i] = (a->unkC_0 << 12) | (a->unk10 + sp8[i]); + CpuCopy16(sp10, c, sizeof(sp10)); +} + +static u8 GetScaledExpFraction(int a, int b, int c, u8 d) +{ + u8 r7 = d * 8; + int r5 = a - b; + s8 r4; + s8 r0; + s32 result; + + if (r5 < 0) + r5 = 0; + else if (r5 > c) + r5 = c; + + r4 = a * r7 / c; + r0 = r5 * r7 / c; + result = r4 - r0; + return ABS(result); +} + +u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale) +{ + u8 result = hp * scale / maxhp; + + if (result == 0 && hp > 0) + return 1; + return result; +} + +u8 GetHPBarLevel(s16 hp, s16 maxhp) +{ + int result; + + if (hp == maxhp) + result = 4; + else + { + u8 fraction = GetScaledHPFraction(hp, maxhp, 48); + if (fraction > 24) + result = 3; + else if (fraction > 9) + result = 2; + else if (fraction > 0) + result = 1; + else + result = 0; + } + return result; +} diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c new file mode 100644 index 000000000..73b847713 --- /dev/null +++ b/src/battle/battle_party_menu.c @@ -0,0 +1,756 @@ +#include "global.h" +#include "battle_party_menu.h" +#include "battle.h" +#include "item_menu.h" +#include "item_use.h" +#include "main.h" +#include "menu.h" +#include "menu_helpers.h" +#include "palette.h" +#include "party_menu.h" +#include "pokemon.h" +#include "pokemon_summary_screen.h" +#include "rom_8077ABC.h" +#include "rom_8094928.h" +#include "songs.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" + +extern u8 ewram[]; +#define UNK_201606C_ARRAY (ewram + 0x1606C) // lazy define but whatever. + +extern u8 IsLinkDoubleBattle(void); +extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *); +extern void LoadHeldItemIconGraphics(void); +extern void CreateHeldItemIcons_806DC34(); +extern u8 sub_806BD58(u8, u8); +extern void PartyMenuPrintMonsLevelOrStatus(void); +extern void PrintPartyMenuMonNicknames(void); +extern void PartyMenuTryPrintMonsHP(void); +extern void nullsub_13(void); +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); + +extern u8 gPlayerPartyCount; +extern u8 gNoOfAllBanks; +extern u16 gBattlePartyID[]; +extern u8 gBankInMenu; +extern u8 gUnknown_0202E8F4; +extern u8 gUnknown_0202E8F5; +extern u8 gUnknown_0202E8F6; +extern u8 gUnknown_02038470[3]; +extern u8 gUnknown_02038473; +extern u8 gUnknown_020384F0; +extern void (*gUnknown_03004AE4)(); //don't know types yet +extern struct PokemonStorage gPokemonStorage; +extern void nullsub_14(); + +void sub_8094C98(u8, u8); +u8 pokemon_order_func(u8); + +static void sub_8094998(u8[3], u8); +static void sub_8094A74(u8[3], u8, u32); +static void sub_8094D60(void); +static void Task_809527C(u8); +static void Task_80952B4(u8); +static void Task_80952E4(u8); +static void Task_8095330(u8); +static void Task_809538C(void); +static void Task_HandlePopupMenuInput(u8); +static void Task_BattlePartyMenuSummary(u8 taskId); +static void Task_BattlePartyMenuShift(u8 taskId); +static void Task_BattlePartyMenuCancel(u8 taskId); + +static const struct PartyMenuItem sBattlePartyMenuActions[] = +{ + {OtherText_Summary, Task_BattlePartyMenuSummary}, + {gOtherText_CancelNoTerminator, Task_BattlePartyMenuCancel}, + {OtherText_Shift, Task_BattlePartyMenuShift}, + {OtherText_SendOut, Task_BattlePartyMenuShift}, +}; +static const u8 Unknown_83B5FEC[] = {2, 0, 1}; //SHIFT, SUMMARY, CANCEL +static const u8 Unknown_83B5FEF[] = {3, 0, 1}; //SEND OUT, SUMMARY, CANCEL +static const u8 Unknown_83B5FF2[] = {0, 1}; //SUMMARY, CANCEL +static const struct PartyPopupMenu sBattlePartyPopupMenus[] = +{ + {ARRAY_COUNT(Unknown_83B5FEC), 9, Unknown_83B5FEC}, + {ARRAY_COUNT(Unknown_83B5FEF), 9, Unknown_83B5FEF}, + {ARRAY_COUNT(Unknown_83B5FF2), 9, Unknown_83B5FF2}, +}; + +void unref_sub_8094928(struct PokemonStorage *ptr) +{ + *ptr = gPokemonStorage; +} + +void unref_sub_8094940(struct PokemonStorage *ptr) +{ + gPokemonStorage = *ptr; +} + +void sub_8094958(void) +{ + sub_8094998(gUnknown_02038470, sub_803FBBC()); +} + +void sub_8094978(u8 arg1, u8 arg2) +{ + sub_8094A74((UNK_201606C_ARRAY) + arg1 * 3, arg2, arg1); +} + +static void sub_8094998(u8 arg[3], u8 player_number) +{ + int i; + u32 pos; + u8 temp[6]; + if (IsLinkDoubleBattle() == TRUE) + { + if (player_number) + { + *arg = 0x30; + arg[1] = 0x45; + arg[2] = 0x12; + } + else + { + *arg = 0x03; + arg[1] = 0x12; + arg[2] = 0x45; + } + } + else + { + if (!IsDoubleBattle()) + { + pos = 1; + *temp = gBattlePartyID[GetBankByPlayerAI(0)]; + for (i = 0; i <= 5; i++) + if (i != *temp) + temp[pos++] = i; + } + else + { + pos = 2; + *temp = gBattlePartyID[GetBankByPlayerAI(0)]; + temp[1] = gBattlePartyID[GetBankByPlayerAI(2)]; + for (i = 0; i <= 5; i++) + if ((i != *temp) && (i != temp[1])) + temp[pos++] = i; + } + for (i = 0; i <= 2; i++) + arg[i] = (temp[i << 1] << 4) | temp[(i << 1) + 1]; + } +} + +static void sub_8094A74(u8 arg[3], u8 player_number, u32 arg3) +{ + int i, j; + u8 temp[6]; + if (!GetBankSide(arg3)) + { + i = GetBankByPlayerAI(0); + j = GetBankByPlayerAI(2); + } + else + { + i = GetBankByPlayerAI(1); + j = GetBankByPlayerAI(3); + } + if (IsLinkDoubleBattle() == TRUE) + { + if (player_number) + { + *arg = 0x30; + arg[1] = 0x45; + arg[2] = 0x12; + } + else + { + *arg = 0x03; + arg[1] = 0x12; + arg[2] = 0x45; + } + } + else + { + if (!IsDoubleBattle()) + { + int pos = 1; + *temp = gBattlePartyID[i]; + for (i = 0; i <= 5; i++) + if (i != *temp) + temp[pos++] = i; + } + else + { + int pos = 2; + *temp = gBattlePartyID[i]; + temp[1] = gBattlePartyID[j]; + for (i = 0; i <= 5; i++) + if ((i != *temp) && (i != temp[1])) + temp[pos++] = i; + } + for (i = 0; i <= 2; i++) + arg[i] = (temp[i << 1] << 4) | temp[(i << 1) + 1]; + } +} + +void sub_8094B6C(u8 a, u8 b, u8 c) +{ + s32 i; + s32 j; + u8 temp[6]; + u8 r3; + u8 r7 = 0; + + if (IsLinkDoubleBattle()) + { + u8 *arr = ewram + 0x1606C + a * 3; + + for (i = 0, j = 0; i < 3; i++) + { + temp[j++] = arr[i] >> 4; + temp[j++] = arr[i] & 0xF; + } + r3 = temp[c]; + for (i = 0; i < 6; i++) + { + if (temp[i] == b) + { + r7 = temp[i]; + temp[i] = r3; + break; + } + } + if (i != 6) + { + temp[c] = r7; + + arr[0] = (temp[0] << 4) | temp[1]; + arr[1] = (temp[2] << 4) | temp[3]; + arr[2] = (temp[4] << 4) | temp[5]; + } + } +} + +u8 sub_8094C20(u8 a) +{ + u8 retVal; + u8 val = a & 1; + + a /= 2; + if (val) + retVal = gUnknown_02038470[a] & 0xF; + else + retVal = gUnknown_02038470[a] >> 4; + return retVal; +} + +void sub_8094C54(u8 a, u8 b) +{ + u8 val = a & 1; + + a /= 2; + if (val) + gUnknown_02038470[a] = (gUnknown_02038470[a] & 0xF0) | b; + else + gUnknown_02038470[a] = (gUnknown_02038470[a] & 0xF) | (b << 4); +} + +void sub_8094C98(u8 a, u8 b) +{ + u8 r4 = sub_8094C20(a); + u8 r1 = sub_8094C20(b); + + sub_8094C54(a, r1); + sub_8094C54(b, r4); +} + +u8 pokemon_order_func(u8 a) +{ + u8 i; + u8 r2; + + for (i = 0, r2 = 0; i < 3; i++) + { + if ((gUnknown_02038470[i] >> 4) == a) + return r2; + r2++; + if ((gUnknown_02038470[i] & 0xF) == a) + return r2; + r2++; + } + return 0; +} + +void pokemon_change_order(void) +{ + u8 i; + + memcpy(ewram1B000.unk0, gPlayerParty, sizeof(gPlayerParty)); + for (i = 0; i < 6; i++) + { + u8 n = pokemon_order_func(i); + + memcpy(&gPlayerParty[n], &ewram1B000.unk0[i], sizeof(struct Pokemon)); + } +} + +static void sub_8094D60(void) +{ + struct Pokemon temp[6]; + u8 i; + + memcpy(temp, gPlayerParty, sizeof(gPlayerParty)); + for (i = 0; i < 6; i++) + { + u8 n = sub_8094C20(i); + + memcpy(&gPlayerParty[n], &temp[i], sizeof(struct Pokemon)); + } +} + +void unref_sub_8094DB0(void) +{ + u8 i; + u8 r4; + + for (i = 1; i < 6; i++) + { + u8 n = sub_8094C20(i); + + if (GetMonData(&gPlayerParty[n], MON_DATA_SPECIES) != 0 + && GetMonData(&gPlayerParty[n], MON_DATA_HP) != 0) + { + r4 = sub_8094C20(0); + sub_8094C98(0, i); + sub_806E6F0(&gPlayerParty[r4], &gPlayerParty[n]); + break; + } + } +} + +void sub_8094E20(u8 a) +{ + gPaletteFade.bufferTransferDisabled = TRUE; + gUnknown_02038473 = a; + nullsub_14(); + pokemon_change_order(); + OpenPartyMenu(1, 0xFF); +} + +void sub_8094E4C(void) +{ + sub_8094E20(3); +} + +int SetUpBattlePartyMenu(void) +{ + switch (EWRAM_1B000.unk264) + //switch (ewram1B000.unk264[0]) + { + case 0: + //TODO: try to get rid of this duplicate code + if (IsLinkDoubleBattle() == TRUE) + { + if (EWRAM_1B000.unk266 != 6) + { + TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); + EWRAM_1B000.unk266++; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + } + else + { + if (EWRAM_1B000.unk266 < 6) + { + TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); + EWRAM_1B000.unk266++; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + } + break; + case 1: + LoadHeldItemIconGraphics(); + EWRAM_1B000.unk264++; + break; + case 2: + CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); + EWRAM_1B000.unk264++; + break; + case 3: + if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) == 1) + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + else + EWRAM_1B000.unk266++; + break; + case 4: + PartyMenuPrintMonsLevelOrStatus(); + EWRAM_1B000.unk264++; + break; + case 5: + PrintPartyMenuMonNicknames(); + EWRAM_1B000.unk264++; + break; + case 6: + PartyMenuTryPrintMonsHP(); + EWRAM_1B000.unk264++; + break; + case 7: + nullsub_13(); + EWRAM_1B000.unk264++; + break; + case 8: + PartyMenuDrawHPBars(); + EWRAM_1B000.unk264++; + break; + case 9: + if (sub_806B58C(EWRAM_1B000.unk266) == 1) + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + else + EWRAM_1B000.unk266++; + break; + case 10: + if (gUnknown_02038473 == 3) + { + if (GetItemEffectType(gScriptItemId) == 10) + ewram1B000.unk259 = 0xFF; + else + ewram1B000.unk259 = 3; + } + return TRUE; + } + return FALSE; +} + +static void sub_8095050(u8 a, u8 b) +{ + if (!GetMonData(&gPlayerParty[b], MON_DATA_IS_EGG)) + { + if (gUnknown_02038473 == 1) + { + gTasks[EWRAM_1B000.unk260].data[4] = 1; + gTasks[EWRAM_1B000.unk260].data[5] = 1; + } + else + { + gTasks[EWRAM_1B000.unk260].data[4] = 0; + gTasks[EWRAM_1B000.unk260].data[5] = 0; + } + } + else + { + gTasks[EWRAM_1B000.unk260].data[4] = 2; + gTasks[EWRAM_1B000.unk260].data[5] = 2; + } + sub_806E750(gTasks[a].data[4], sBattlePartyPopupMenus, sBattlePartyMenuActions, 0); +} + +void SetUpBattlePokemonMenu(u8 a) +{ + if (!gPaletteFade.active) + { + if (gUnknown_02038473 == 3 && GetItemEffectType(gScriptItemId) == 10) + { + gUnknown_03004AE4(a, gScriptItemId, Task_80952E4); + return; + } + + switch (sub_806BD80(a)) + { + case 1: + if (gUnknown_02038473 == 3) + { + if (GetMonData(&gPlayerParty[sub_806CA38(a)], MON_DATA_IS_EGG)) + PlaySE(SE_HAZURE); + else + { + sub_806D5A4(); + gUnknown_03004AE4(a, gScriptItemId, Task_80952E4); + } + } + else + { + PlaySE(SE_SELECT); + GetMonNickname(&gPlayerParty[sub_806CA38(a)], gStringVar1); + sub_8095050(a, sub_806CA38(a)); + SetTaskFuncWithFollowupFunc(a, Task_HandlePopupMenuInput, SetUpBattlePokemonMenu); + } + break; + case 2: + if (gUnknown_02038473 == 1) + PlaySE(SE_HAZURE); + else + { + PlaySE(SE_SELECT); + if (gUnknown_02038473 == 3) + { + gUnknown_0202E8F4 = 0; + gTasks[a].func = Task_80952E4; + } + else + { + gUnknown_0202E8F4 = 0; + gTasks[a].func = Task_809527C; + } + } + break; + } + } +} + +static void Task_809527C(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = Task_80952B4; +} + +static void Task_80952B4(u8 taskId) +{ + if (!gPaletteFade.active) + { + sub_8094D60(); + DestroyTask(taskId); + SetMainCallback2(sub_802E414); + } +} + +static void Task_80952E4(u8 taskId) +{ + if (gUnknown_0202E8F4 != 0) + Task_809527C(taskId); + else + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = Task_8095330; + } +} + +static void Task_8095330(u8 taskId) +{ + if (!gPaletteFade.active) + { + sub_8094D60(); + DestroyTask(taskId); + sub_80A6DCC(); + } +} + +static void Task_809535C(void) +{ + gPaletteFade.bufferTransferDisabled = TRUE; + sub_806AF4C(1, 0xFF, SetUpBattlePokemonMenu, 5); + SetMainCallback2(Task_809538C); +} + +static void Task_809538C(void) +{ + do + { + if (sub_806B124() == 1) + { + sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0); + sub_806BF74(EWRAM_1B000.unk260, 0); + GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); + sub_8095050(EWRAM_1B000.unk260, gUnknown_020384F0); + SetTaskFuncWithFollowupFunc(EWRAM_1B000.unk260, Task_HandlePopupMenuInput, SetUpBattlePokemonMenu); + SetMainCallback2(sub_806AEDC); + return; + } + } while (sub_80F9344() != 1); +} + +static void Task_HandlePopupMenuInput(u8 taskId) +{ + TaskFunc func; + + if (!gPaletteFade.active) + { + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + return; + } + if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + MoveMenuCursor(1); + return; + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + func = PartyMenuGetPopupMenuFunc(gTasks[taskId].data[4], + sBattlePartyPopupMenus, + sBattlePartyMenuActions, + GetMenuCursorPos()); + func(taskId); + return; + } + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + Task_BattlePartyMenuCancel(taskId); + return; + } + } +} + +static void Task_80954C0(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + Task_BattlePartyMenuCancel(taskId); +} + +static void Task_ShowSummaryScreen(u8 taskId) +{ + u8 partySelection = sub_806CA38(taskId); + + if (!gPaletteFade.active) + { + DestroyTask(taskId); + EWRAM_1B000.unk262 = 1; + ShowPokemonSummaryScreen(gPlayerParty, partySelection, gPlayerPartyCount - 1, Task_809535C, 4); + } +} + +static void Task_BattlePartyMenuSummary(u8 taskId) +{ + sub_806CA38(taskId); //an unused variable was probably set with this. + gTasks[taskId].func = Task_ShowSummaryScreen; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); +} + +static void Task_BattlePartyMenuShift(u8 taskId) +{ + u8 partySelection; + u8 i; + u8 r4; + + sub_806E7D0(gTasks[taskId].data[4], sBattlePartyPopupMenus); + partySelection = sub_806CA38(taskId); + if (IsLinkDoubleBattle() == TRUE && (partySelection == 1 || partySelection == 4 || partySelection == 5)) + { + sub_806D5A4(); + StringCopy(gStringVar1, sub_8040D08()); + StringExpandPlaceholders(gStringVar4, gOtherText_CantSwitchPokeWithYours); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + if (GetMonData(&gPlayerParty[partySelection], MON_DATA_HP) == 0) + { + sub_806D5A4(); + GetMonNickname(&gPlayerParty[partySelection], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_NoEnergyLeft); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + for (i = 0; i < gNoOfAllBanks; i++) + { + if (GetBankSide(i) == 0 + && sub_8094C20(partySelection) == gBattlePartyID[i]) + { + sub_806D5A4(); + GetMonNickname(&gPlayerParty[partySelection], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_AlreadyBattle); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + } + if (GetMonData(&gPlayerParty[partySelection], MON_DATA_IS_EGG)) + { + sub_806D5A4(); + StringExpandPlaceholders(gStringVar4, gOtherText_EGGCantBattle); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + if (sub_8094C20(partySelection) == EWRAM_1609D) + { + sub_806D5A4(); + GetMonNickname(&gPlayerParty[partySelection], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_AlreadySelected); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + if (gUnknown_02038473 == 4) + { + sub_806D5A4(); + sub_8040B8C(); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + if (gUnknown_02038473 == 2) + { + u8 r0; + u8 r4 = gBankInMenu; + + sub_806D5A4(); + r0 = pokemon_order_func(gBattlePartyID[r4]); + GetMonNickname(&gPlayerParty[r0], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_CantBeSwitched); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + gUnknown_0202E8F5 = sub_8094C20(partySelection); + gUnknown_0202E8F4 = 1; + r4 = pokemon_order_func(gBattlePartyID[gBankInMenu]); + sub_8094C98(r4, partySelection); + sub_806E6F0(&gPlayerParty[r4], &gPlayerParty[partySelection]); + gTasks[taskId].func = Task_809527C; +} + +static void Task_BattlePartyMenuCancel(u8 taskId) +{ + HandleDestroyMenuCursors(); + sub_806E7D0(gTasks[taskId].data[4], sBattlePartyPopupMenus); + gTasks[taskId].data[4] = gTasks[taskId].data[5]; + sub_806D538(0, 0); + SwitchTaskToFollowupFunc(taskId); +} diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c new file mode 100644 index 000000000..61dc09792 --- /dev/null +++ b/src/battle/battle_records.c @@ -0,0 +1,334 @@ +#include "global.h" +#include "battle_records.h" +#include "game_stat.h" +#include "link.h" +#include "menu.h" +#include "rom4.h" +#include "string_util.h" +#include "strings2.h" +#include "trainer_card.h" + +extern struct LinkPlayerMapObject gLinkPlayerMapObjects[4]; +extern u8 gBattleOutcome; + +static void InitLinkBattleRecord(struct LinkBattleRecord *record) +{ + CpuFill16(0, record, sizeof(struct LinkBattleRecord)); + record->name[0] = 0xFF; + record->trainerId = 0; + record->wins = 0; + record->losses = 0; + record->draws = 0; +} + +static void InitLinkBattleRecords_(struct LinkBattleRecord *records) +{ + int i; + for (i = 0; i < 5; i++) + { + InitLinkBattleRecord(records + i); + } + SetGameStat(GAME_STAT_LINK_BATTLE_WINS, 0); + SetGameStat(GAME_STAT_LINK_BATTLE_LOSSES, 0); + SetGameStat(GAME_STAT_LINK_BATTLE_DRAWS, 0); +} + +static int GetLinkBattleRecordTotalBattles(struct LinkBattleRecord *record) +{ + return record->wins + record->losses + record->draws; +} + +static int FindLinkBattleRecord(struct LinkBattleRecord *records, u8 *name, u16 trainerId) +{ + int i; + + for (i = 0; i < 5; i++) + { + memcpy(gStringVar1, records[i].name, 7); + gStringVar1[7] = EOS; + if (!StringCompareWithoutExtCtrlCodes(gStringVar1, name) && records[i].trainerId == trainerId) + return i; + } + + return 5; +} + +static void SortLinkBattleRecords(struct LinkBattleRecord *records) +{ + int i, j; + + for (i = 4; i > 0; i--) + { + for (j = i - 1; j >= 0; j--) + { + int totalBattlesI = GetLinkBattleRecordTotalBattles(records + i); + int totalBattlesJ = GetLinkBattleRecordTotalBattles(records + j); + + if (totalBattlesI > totalBattlesJ) + { + struct LinkBattleRecord temp = *(records + i); + *(records + i) = *(records + j); + *(records + j) = temp; + } + } + } +} + +static void UpdateLinkBattleRecord(struct LinkBattleRecord *record, int battleOutcome) +{ + switch (battleOutcome) + { + case 1: + record->wins++; + if (record->wins > 9999) + record->wins = 9999; + break; + case 2: + record->losses++; + if (record->losses > 9999) + record->losses = 9999; + break; + case 3: + record->draws++; + if (record->draws > 9999) + record->draws = 9999; + break; + } +} + +static void UpdateLinkBattleGameStats(int battleOutcome) +{ + u8 stat; + + switch (battleOutcome) + { + case 1: + stat = GAME_STAT_LINK_BATTLE_WINS; + break; + case 2: + stat = GAME_STAT_LINK_BATTLE_LOSSES; + break; + case 3: + stat = GAME_STAT_LINK_BATTLE_DRAWS; + break; + default: + return; + } + + if (GetGameStat(stat) < 9999) + IncrementGameStat(stat); +} + +static void UpdateLinkBattleRecords_(struct LinkBattleRecord *records, u8 *name, u16 trainerId, int battleOutcome, u8 language) +{ + int index; + UpdateLinkBattleGameStats(battleOutcome); + SortLinkBattleRecords(records); + index = FindLinkBattleRecord(records, name, trainerId); + if (index == 5) + { + index = 4; + InitLinkBattleRecord(records + index); + if (language == LANGUAGE_JAPANESE) + { + records[index].name[0] = EXT_CTRL_CODE_BEGIN; + records[index].name[1] = 0x15; + StringCopyN(records[index].name + 2, name, 5); + } + else + { + StringCopyN(records[index].name, name, 7); + } + + // needed block to match + { + struct LinkBattleRecord *record = records + index; + record->trainerId = trainerId; + } + } + UpdateLinkBattleRecord(records + index, battleOutcome); + SortLinkBattleRecords(records); +} + +void InitLinkBattleRecords(void) +{ + InitLinkBattleRecords_(gSaveBlock1.linkBattleRecords); +} + +static void IncTrainerCardWins(int id) +{ + u16 *wins = &gTrainerCards[id].linkBattleWins; + (*wins)++; + if (*wins > 9999) + *wins = 9999; +} + +static void IncTrainerCardLosses(int id) +{ + u16 *losses = &gTrainerCards[id].linkBattleLosses; + (*losses)++; + if (*losses > 9999) + *losses = 9999; +} + +static void UpdateTrainerCardWinsLosses(int id) +{ + switch (gBattleOutcome) + { + case 1: + IncTrainerCardWins(id ^ 1); + IncTrainerCardLosses(id); + break; + case 2: + IncTrainerCardLosses(id ^ 1); + IncTrainerCardWins(id); + break; + } +} + +void UpdateLinkBattleRecords(int id) +{ + UpdateTrainerCardWinsLosses(id); + UpdateLinkBattleRecords_( + gSaveBlock1.linkBattleRecords, + gTrainerCards[id].playerName, + gTrainerCards[id].trainerId, + gBattleOutcome, + gLinkPlayers[gLinkPlayerMapObjects[id].linkPlayerId].language); +} + +static void PrintLinkBattleWinsLossesDraws(struct LinkBattleRecord *records) +{ + ConvertIntToDecimalStringN_DigitWidth6(gStringVar1, GetGameStat(GAME_STAT_LINK_BATTLE_WINS), STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN_DigitWidth6(gStringVar2, GetGameStat(GAME_STAT_LINK_BATTLE_LOSSES), STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN_DigitWidth6(gStringVar3, GetGameStat(GAME_STAT_LINK_BATTLE_DRAWS), STR_CONV_MODE_RIGHT_ALIGN, 4); + MenuPrint(gOtherText_WinRecord, 3, 3); +} + +static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y) +{ + if (!record->wins && !record->losses && !record->draws) + { + u8 buffer[16]; + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x14; + buffer[2] = 6; + buffer[3] = EXT_CTRL_CODE_BEGIN; + buffer[4] = 0x11; + buffer[5] = 1; + StringCopy(buffer + 6, gOtherText_SevenDashes); + MenuPrint(buffer, 3, y); + StringCopy(buffer + 6, gOtherText_FourDashes); + MenuPrint(buffer, 11, y); + MenuPrint(buffer, 17, y); + MenuPrint(buffer, 23, y); + } + else + { + StringFillWithTerminator(gStringVar1, 8); + StringCopyN(gStringVar1, record->name, 7); + MenuPrint(gStringVar1, 3, y); + gStringVar1[0] = EXT_CTRL_CODE_BEGIN; + gStringVar1[1] = 0x14; + gStringVar1[2] = 6; + ConvertIntToDecimalStringN(gStringVar1 + 3, record->wins, STR_CONV_MODE_RIGHT_ALIGN, 4); + MenuPrint(gStringVar1, 11, y); + ConvertIntToDecimalStringN(gStringVar1 + 3, record->losses, STR_CONV_MODE_RIGHT_ALIGN, 4); + MenuPrint(gStringVar1, 17, y); + ConvertIntToDecimalStringN(gStringVar1 + 3, record->draws, STR_CONV_MODE_RIGHT_ALIGN, 4); + MenuPrint(gStringVar1, 23, y); + } +} + +void ShowLinkBattleRecords(void) { + s32 i; + MenuDrawTextWindow(1, 0, 28, 18); + sub_8072BD8((u8 *) gOtherText_BattleResults, 0, 1, 240); + + PrintLinkBattleWinsLossesDraws(gSaveBlock1.linkBattleRecords); +#if ENGLISH + MenuPrint(gOtherText_WinLoseDraw, 12, 6); +#elif GERMAN + MenuPrint_PixelCoords(gOtherText_WinLoseDraw, 88, 48, 1); +#endif + + for (i = 0; i < 5; i++) + { + PrintLinkBattleRecord(&gSaveBlock1.linkBattleRecords[i], 6 + (i + 1) * 2); + } +} + +static bool32 sub_8110494(u8 level) +{ + struct SaveBlock2_Sub *sb2sub = &gSaveBlock2.filler_A8; + + switch (sb2sub->var_4AE[level]) + { + case 0: + return FALSE; + case 1: + return FALSE; + case 2: + return TRUE; + case 4: + return FALSE; + case 3: + return TRUE; + case 5: + return FALSE; + case 6: + return TRUE; + default: + return FALSE; + } +} + +static void PrintWinStreak(const u8 *str, u16 streak, u8 left, u8 top) +{ + MenuPrint(str, left, top); + if (streak > 9999) + streak = 9999; + sub_8072C14(gStringVar1, streak, 24, 1); + MenuPrint(gOtherText_WinStreak, left + 7, top); +} + +static void PrintRecordWinStreak(u8 level, u8 left, u8 top) +{ + struct SaveBlock2_Sub *sb2sub = &gSaveBlock2.filler_A8; + u16 winStreak = sb2sub->recordWinStreak[level]; + PrintWinStreak(gOtherText_Record, winStreak, left, top); +} + +static u16 GetLastWinStreak(u8 level) +{ + u16 result = gSaveBlock2.filler_A8.winStreak[level]; + if (result > 9999) + result = 9999; + return result; +} + +static void PrintLastWinStreak(u8 level, u8 left, u8 top) +{ + u16 winStreak = GetLastWinStreak(level); + if (sub_8110494(level) == TRUE) + PrintWinStreak(gOtherText_Current, winStreak, left, top); + else + PrintWinStreak(gOtherText_Prev, winStreak, left, top); +} + +void ShowBattleTowerRecords(void) +{ + u16 i; + MenuDrawTextWindow(3, 1, 27, 17); + sub_8072BD8(gOtherText_BattleTowerResults, 3, 2, 0xC8); + MenuPrint(gOtherText_Lv50, 5, 6); + MenuPrint(gOtherText_Lv100, 5, 12); + for (i = 5; i < 26; i++) + { + sub_8071F60(CHAR_HYPHEN, i, 10); + } + PrintLastWinStreak(0, 10, 6); + PrintRecordWinStreak(0, 10, 8); + PrintLastWinStreak(1, 10, 12); + PrintRecordWinStreak(1, 10, 14); +} diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c new file mode 100644 index 000000000..04674e739 --- /dev/null +++ b/src/battle/battle_setup.c @@ -0,0 +1,1416 @@ +#include "global.h" +#include "battle_setup.h" +#include "battle.h" +#include "battle_transition.h" +#include "data2.h" +#include "event_data.h" +#include "field_control_avatar.h" +#include "field_fadetransition.h" +#include "field_map_obj_helpers.h" +#include "field_message_box.h" +#include "field_player_avatar.h" +#include "field_weather.h" +#include "fieldmap.h" +#include "fldeff_80C5CD4.h" +#include "main.h" +#include "map_constants.h" +#include "metatile_behavior.h" +#include "opponent_constants.h" +#include "palette.h" +#include "rng.h" +#include "rom4.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 "starter_choose.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "trainer.h" + +extern u16 gScriptResult; + +extern void (*gFieldCallback)(void); + +EWRAM_DATA u16 gTrainerBattleMode = 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; + +extern u16 gBattleTypeFlags; +extern u16 gScriptLastTalked; +extern u8 gBattleOutcome; + +extern struct MapObject gMapObjects[]; + +extern u8 gUnknown_0819F818[]; +extern u8 gUnknown_0819F840[]; +extern u8 gUnknown_0819F878[]; +extern u8 gUnknown_0819F887[]; +extern u8 gUnknown_0819F8AE[]; + +extern u8 gUnknown_0819F80B[]; +extern u8 gUnknown_081C6C02[]; + + +static const u8 gBattleTransitionTable_Wild[][2] = +{ + {8, 9}, + {5, 10}, + {0, 10}, + {7, 6}, +}; +static const u8 gBattleTransitionTable_Trainer[][2] = +{ + {4, 11}, + {2, 3}, + {0, 10}, + {1, 6}, +}; +static const struct TrainerBattleSpec gTrainerBattleSpecs_0[] = +{ + {&gTrainerBattleMode, 0}, + {&gTrainerBattleOpponent, 1}, + {&gTrainerMapObjectLocalId, 1}, + {&gTrainerIntroSpeech, 2}, + {&gTrainerDefeatSpeech, 2}, + {&gTrainerVictorySpeech, 5}, + {&gTrainerCannotBattleSpeech, 5}, + {&gTrainerBattleEndScript, 5}, + {&gTrainerBattleScriptReturnAddress, 6}, +}; +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 TrainerBattleSpec gTrainerBattleSpecs_2[] = +{ + {&gTrainerBattleMode, 0}, + {&gTrainerBattleOpponent, 1}, + {&gTrainerMapObjectLocalId, 1}, + {&gTrainerIntroSpeech, 2}, + {&gTrainerDefeatSpeech, 2}, + {&gTrainerVictorySpeech, 5}, + {&gTrainerCannotBattleSpeech, 2}, + {&gTrainerBattleEndScript, 5}, + {&gTrainerBattleScriptReturnAddress, 6}, +}; +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 TrainerBattleSpec gTrainerBattleSpecs_4[] = +{ + {&gTrainerBattleMode, 0}, + {&gTrainerBattleOpponent, 1}, + {&gTrainerMapObjectLocalId, 1}, + {&gTrainerIntroSpeech, 2}, + {&gTrainerDefeatSpeech, 2}, + {&gTrainerVictorySpeech, 5}, + {&gTrainerCannotBattleSpeech, 2}, + {&gTrainerBattleEndScript, 2}, + {&gTrainerBattleScriptReturnAddress, 6}, +}; + +const struct TrainerEyeTrainer gTrainerEyeTrainers[] = +{ + { + {OPPONENT_ROSE_1, OPPONENT_ROSE_2, OPPONENT_ROSE_3, OPPONENT_ROSE_4, OPPONENT_ROSE_5}, + MAP_GROUP_ROUTE118, + MAP_ID_ROUTE118, + }, + { + {OPPONENT_DUSTY_1, OPPONENT_DUSTY_2, OPPONENT_DUSTY_3, OPPONENT_DUSTY_4, OPPONENT_DUSTY_5}, + MAP_GROUP_ROUTE111, + MAP_ID_ROUTE111, + }, + { + {OPPONENT_LOLA_1, OPPONENT_LOLA_2, OPPONENT_LOLA_3, OPPONENT_LOLA_4, OPPONENT_LOLA_5}, + MAP_GROUP_ROUTE109, + MAP_ID_ROUTE109, + }, + { + {OPPONENT_RICKY_1, OPPONENT_RICKY_2, OPPONENT_RICKY_3, OPPONENT_RICKY_4, OPPONENT_RICKY_5}, + MAP_GROUP_ROUTE109, + MAP_ID_ROUTE109, + }, + { + {OPPONENT_RITA_AND_SAM_1, OPPONENT_RITA_AND_SAM_2, OPPONENT_RITA_AND_SAM_3, OPPONENT_RITA_AND_SAM_4, OPPONENT_RITA_AND_SAM_5}, + MAP_GROUP_ROUTE124, + MAP_ID_ROUTE124, + }, + { + {OPPONENT_BROOKE_1, OPPONENT_BROOKE_2, OPPONENT_BROOKE_3, OPPONENT_BROOKE_4, OPPONENT_BROOKE_5}, + MAP_GROUP_ROUTE111, + MAP_ID_ROUTE111, + }, + { + {OPPONENT_WILTON_1, OPPONENT_WILTON_2, OPPONENT_WILTON_3, OPPONENT_WILTON_4, OPPONENT_WILTON_5}, + MAP_GROUP_ROUTE111, + MAP_ID_ROUTE111, + }, + { + {OPPONENT_VALERIE_1, OPPONENT_VALERIE_2, OPPONENT_VALERIE_3, OPPONENT_VALERIE_4, OPPONENT_VALERIE_5}, + MAP_GROUP_MT_PYRE_6F, + MAP_ID_MT_PYRE_6F, + }, + { + {OPPONENT_CINDY_1, OPPONENT_CINDY_3, OPPONENT_CINDY_4, OPPONENT_CINDY_5, OPPONENT_CINDY_6}, + MAP_GROUP_ROUTE104, + MAP_ID_ROUTE104, + }, + { + {OPPONENT_JESSICA_1, OPPONENT_JESSICA_2, OPPONENT_JESSICA_3, OPPONENT_JESSICA_4, OPPONENT_JESSICA_5}, + MAP_GROUP_ROUTE121, + MAP_ID_ROUTE121, + }, + { + {OPPONENT_WINSTON_1, OPPONENT_WINSTON_2, OPPONENT_WINSTON_3, OPPONENT_WINSTON_4, OPPONENT_WINSTON_5}, + MAP_GROUP_ROUTE104, + MAP_ID_ROUTE104, + }, + { + {OPPONENT_STEVE_1, OPPONENT_STEVE_2, OPPONENT_STEVE_3, OPPONENT_STEVE_4, OPPONENT_STEVE_5}, + MAP_GROUP_ROUTE114, + MAP_ID_ROUTE114, + }, + { + {OPPONENT_TONY_1, OPPONENT_TONY_2, OPPONENT_TONY_3, OPPONENT_TONY_4, OPPONENT_TONY_5}, + MAP_GROUP_ROUTE107, + MAP_ID_ROUTE107, + }, + { + {OPPONENT_NOB_1, OPPONENT_NOB_2, OPPONENT_NOB_3, OPPONENT_NOB_4, OPPONENT_NOB_5}, + MAP_GROUP_ROUTE115, + MAP_ID_ROUTE115, + }, + { + {OPPONENT_DALTON_1, OPPONENT_DALTON_2, OPPONENT_DALTON_3, OPPONENT_DALTON_4, OPPONENT_DALTON_5}, + MAP_GROUP_ROUTE118, + MAP_ID_ROUTE118, + }, + { + {OPPONENT_BERNIE_1, OPPONENT_BERNIE_2, OPPONENT_BERNIE_3, OPPONENT_BERNIE_4, OPPONENT_BERNIE_5}, + MAP_GROUP_ROUTE114, + MAP_ID_ROUTE114, + }, + { + {OPPONENT_ETHAN_1, OPPONENT_ETHAN_2, OPPONENT_ETHAN_3, OPPONENT_ETHAN_4, OPPONENT_ETHAN_5}, + MAP_GROUP_JAGGED_PASS, + MAP_ID_JAGGED_PASS, + }, + { + {OPPONENT_JOHN_AND_JAY_1, OPPONENT_JOHN_AND_JAY_2, OPPONENT_JOHN_AND_JAY_3, OPPONENT_JOHN_AND_JAY_4, OPPONENT_JOHN_AND_JAY_5}, + MAP_GROUP_METEOR_FALLS_1F_2R, + MAP_ID_METEOR_FALLS_1F_2R, + }, + { + {OPPONENT_BRANDON_1, OPPONENT_BRANDON_2, OPPONENT_BRANDON_3, OPPONENT_BRANDON_4, OPPONENT_BRANDON_5}, + MAP_GROUP_ROUTE120, + MAP_ID_ROUTE120, + }, + { + {OPPONENT_CAMERON_1, OPPONENT_CAMERON_2, OPPONENT_CAMERON_3, OPPONENT_CAMERON_4, OPPONENT_CAMERON_5}, + MAP_GROUP_ROUTE123, + MAP_ID_ROUTE123, + }, + { + {OPPONENT_JACKI_1, OPPONENT_JACKI_2, OPPONENT_JACKI_3, OPPONENT_JACKI_4, OPPONENT_JACKI_5}, + MAP_GROUP_ROUTE123, + MAP_ID_ROUTE123, + }, + { + {OPPONENT_WALTER_1, OPPONENT_WALTER_2, OPPONENT_WALTER_3, OPPONENT_WALTER_4, OPPONENT_WALTER_5}, + MAP_GROUP_ROUTE121, + MAP_ID_ROUTE121, + }, + { + {OPPONENT_KAREN_1, OPPONENT_KAREN_2, OPPONENT_KAREN_3, OPPONENT_KAREN_4, OPPONENT_KAREN_5}, + MAP_GROUP_ROUTE116, + MAP_ID_ROUTE116, + }, + { + {OPPONENT_JERRY_1, OPPONENT_JERRY_2, OPPONENT_JERRY_3, OPPONENT_JERRY_4, OPPONENT_JERRY_5}, + MAP_GROUP_ROUTE116, + MAP_ID_ROUTE116, + }, + { + {OPPONENT_ANNA_AND_MEG_1, OPPONENT_ANNA_AND_MEG_2, OPPONENT_ANNA_AND_MEG_3, OPPONENT_ANNA_AND_MEG_4, OPPONENT_ANNA_AND_MEG_5}, + MAP_GROUP_ROUTE117, + MAP_ID_ROUTE117, + }, + { + {OPPONENT_ISABEL_1, OPPONENT_ISABEL_2, OPPONENT_ISABEL_3, OPPONENT_ISABEL_4, OPPONENT_ISABEL_5}, + MAP_GROUP_ROUTE110, + MAP_ID_ROUTE110, + }, + { + {OPPONENT_MIGUEL_1, OPPONENT_MIGUEL_2, OPPONENT_MIGUEL_3, OPPONENT_MIGUEL_4, OPPONENT_MIGUEL_5}, + MAP_GROUP_ROUTE103, + MAP_ID_ROUTE103, + }, + { + {OPPONENT_TIMOTHY_1, OPPONENT_TIMOTHY_2, OPPONENT_TIMOTHY_3, OPPONENT_TIMOTHY_4, OPPONENT_TIMOTHY_5}, + MAP_GROUP_ROUTE115, + MAP_ID_ROUTE115, + }, + { + {OPPONENT_SHELBY_1, OPPONENT_SHELBY_2, OPPONENT_SHELBY_3, OPPONENT_SHELBY_4, OPPONENT_SHELBY_5}, + MAP_GROUP_MT_CHIMNEY, + MAP_ID_MT_CHIMNEY, + }, + { + {OPPONENT_CALVIN_1, OPPONENT_CALVIN_2, OPPONENT_CALVIN_3, OPPONENT_CALVIN_4, OPPONENT_CALVIN_5}, + MAP_GROUP_ROUTE102, + MAP_ID_ROUTE102, + }, + { + {OPPONENT_ELLIOT_1, OPPONENT_ELLIOT_2, OPPONENT_ELLIOT_3, OPPONENT_ELLIOT_4, OPPONENT_ELLIOT_5}, + MAP_GROUP_ROUTE106, + MAP_ID_ROUTE106, + }, + { + {OPPONENT_ABIGAIL_1, OPPONENT_ABIGAIL_2, OPPONENT_ABIGAIL_3, OPPONENT_ABIGAIL_4, OPPONENT_ABIGAIL_5}, + MAP_GROUP_ROUTE110, + MAP_ID_ROUTE110, + }, + { + {OPPONENT_BENJAMIN_1, OPPONENT_BENJAMIN_2, OPPONENT_BENJAMIN_3, OPPONENT_BENJAMIN_4, OPPONENT_BENJAMIN_5}, + MAP_GROUP_ROUTE110, + MAP_ID_ROUTE110, + }, + { + {OPPONENT_ISAIAH_1, OPPONENT_ISAIAH_2, OPPONENT_ISAIAH_3, OPPONENT_ISAIAH_4, OPPONENT_ISAIAH_5}, + MAP_GROUP_ROUTE128, + MAP_ID_ROUTE128, + }, + { + {OPPONENT_KATELYN_1, OPPONENT_KATELYN_2, OPPONENT_KATELYN_3, OPPONENT_KATELYN_4, OPPONENT_KATELYN_5}, + MAP_GROUP_ROUTE128, + MAP_ID_ROUTE128, + }, + { + {OPPONENT_MARIA_1, OPPONENT_MARIA_2, OPPONENT_MARIA_3, OPPONENT_MARIA_4, OPPONENT_MARIA_5}, + MAP_GROUP_ROUTE117, + MAP_ID_ROUTE117, + }, + { + {OPPONENT_DYLAN_1, OPPONENT_DYLAN_2, OPPONENT_DYLAN_3, OPPONENT_DYLAN_4, OPPONENT_DYLAN_5}, + MAP_GROUP_ROUTE117, + MAP_ID_ROUTE117, + }, + { + {OPPONENT_NICOLAS_1, OPPONENT_NICOLAS_2, OPPONENT_NICOLAS_3, OPPONENT_NICOLAS_4, OPPONENT_NICOLAS_5}, + MAP_GROUP_METEOR_FALLS_1F_2R, + MAP_ID_METEOR_FALLS_1F_2R, + }, + { + {OPPONENT_ROBERT_1, OPPONENT_ROBERT_2, OPPONENT_ROBERT_3, OPPONENT_ROBERT_4, OPPONENT_ROBERT_5}, + MAP_GROUP_ROUTE120, + MAP_ID_ROUTE120, + }, + { + {OPPONENT_LAO_1, OPPONENT_LAO_2, OPPONENT_LAO_3, OPPONENT_LAO_4, OPPONENT_LAO_5}, + MAP_GROUP_ROUTE113, + MAP_ID_ROUTE113, + }, + { + {OPPONENT_CYNDY_1, OPPONENT_CYNDY_2, OPPONENT_CYNDY_3, OPPONENT_CYNDY_4, OPPONENT_CYNDY_5}, + MAP_GROUP_ROUTE115, + MAP_ID_ROUTE115, + }, + { + {OPPONENT_MADELINE_1, OPPONENT_MADELINE_2, OPPONENT_MADELINE_3, OPPONENT_MADELINE_4, OPPONENT_MADELINE_5}, + MAP_GROUP_ROUTE113, + MAP_ID_ROUTE113, + }, + { + {OPPONENT_JENNY_1, OPPONENT_JENNY_2, OPPONENT_JENNY_3, OPPONENT_JENNY_4, OPPONENT_JENNY_5}, + MAP_GROUP_ROUTE124, + MAP_ID_ROUTE124, + }, + { + {OPPONENT_DIANA_1, OPPONENT_DIANA_2, OPPONENT_DIANA_3, OPPONENT_DIANA_4, OPPONENT_DIANA_5}, + MAP_GROUP_JAGGED_PASS, + MAP_ID_JAGGED_PASS, + }, + { + {OPPONENT_AMY_AND_LIV_1, OPPONENT_AMY_AND_LIV_2, OPPONENT_AMY_AND_LIV_4, OPPONENT_AMY_AND_LIV_5, OPPONENT_AMY_AND_LIV_6}, + MAP_GROUP_ROUTE103, + MAP_ID_ROUTE103, + }, + { + {OPPONENT_ERNEST_1, OPPONENT_ERNEST_2, OPPONENT_ERNEST_3, OPPONENT_ERNEST_4, OPPONENT_ERNEST_5}, + MAP_GROUP_ROUTE125, + MAP_ID_ROUTE125, + }, + { + {OPPONENT_EDWIN_1, OPPONENT_EDWIN_2, OPPONENT_EDWIN_3, OPPONENT_EDWIN_4, OPPONENT_EDWIN_5}, + MAP_GROUP_ROUTE110, + MAP_ID_ROUTE110, + }, + { + {OPPONENT_LYDIA_1, OPPONENT_LYDIA_2, OPPONENT_LYDIA_3, OPPONENT_LYDIA_4, OPPONENT_LYDIA_5}, + MAP_GROUP_ROUTE117, + MAP_ID_ROUTE117, + }, + { + {OPPONENT_ISAAC_1, OPPONENT_ISAAC_2, OPPONENT_ISAAC_3, OPPONENT_ISAAC_4, OPPONENT_ISAAC_5}, + MAP_GROUP_ROUTE117, + MAP_ID_ROUTE117, + }, + { + {OPPONENT_CATHERINE_1, OPPONENT_CATHERINE_2, OPPONENT_CATHERINE_3, OPPONENT_CATHERINE_4, OPPONENT_CATHERINE_5}, + MAP_GROUP_ROUTE119, + MAP_ID_ROUTE119, + }, + { + {OPPONENT_JACKSON_1, OPPONENT_JACKSON_2, OPPONENT_JACKSON_3, OPPONENT_JACKSON_4, OPPONENT_JACKSON_5}, + MAP_GROUP_ROUTE119, + MAP_ID_ROUTE119, + }, + { + {OPPONENT_HALEY_1, OPPONENT_HALEY_2, OPPONENT_HALEY_3, OPPONENT_HALEY_4, OPPONENT_HALEY_5}, + MAP_GROUP_ROUTE104, + MAP_ID_ROUTE104, + }, + { + {OPPONENT_JAMES_1, OPPONENT_JAMES_2, OPPONENT_JAMES_3, OPPONENT_JAMES_4, OPPONENT_JAMES_5}, + MAP_GROUP_PETALBURG_WOODS, + MAP_ID_PETALBURG_WOODS, + }, + { + {OPPONENT_TRENT_1, OPPONENT_TRENT_2, OPPONENT_TRENT_3, OPPONENT_TRENT_4, OPPONENT_TRENT_5}, + MAP_GROUP_ROUTE112, + MAP_ID_ROUTE112, + }, + { + {OPPONENT_LOIS_AND_HAL_1, OPPONENT_LOIS_AND_HAL_2, OPPONENT_LOIS_AND_HAL_3, OPPONENT_LOIS_AND_HAL_4, OPPONENT_LOIS_AND_HAL_5}, + MAP_GROUP_ABANDONED_SHIP_ROOMS2_1F, + MAP_ID_ABANDONED_SHIP_ROOMS2_1F, + }, + { + {OPPONENT_WALLY_3, OPPONENT_WALLY_4, OPPONENT_WALLY_5, OPPONENT_WALLY_6, OPPONENT_NONE}, + MAP_GROUP_VICTORY_ROAD_1F, + MAP_ID_VICTORY_ROAD_1F, + }, +}; + +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) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + if (!FieldPoisonEffectIsRunning()) // is poison not active? + { + sub_811AABC(data[1]); + data[0]++; // go to case 1. + } + break; + case 1: + if (sub_811AAE8() == TRUE) + { + SetMainCallback2(sub_800E7C4); + prev_quest_postbuffer_cursor_backup_reset(); + overworld_poison_timer_set(); + DestroyTask(taskId); + } + break; + } +} + +void task_add_01_battle_start(u8 transition, u16 song) +{ + u8 taskId = CreateTask(task01_battle_start, 1); + + gTasks[taskId].data[1] = transition; + current_map_music_set__default_for_battle(song); +} + +void CheckForSafariZoneAndProceed(void) +{ + if (GetSafariZoneFlag()) + StartBattle_Safari(); + else + StartBattle_StandardWild(); +} + +void StartBattle_StandardWild(void) +{ + ScriptContext2_Enable(); + FreezeMapObjects(); + sub_80597F4(); + gMain.savedCallback = HandleWildBattleEnd; + gBattleTypeFlags = 0; + task_add_01_battle_start(GetWildBattleTransition(), 0); + IncrementGameStat(7); + IncrementGameStat(8); +} + +void StartBattle_Roamer(void) +{ + ScriptContext2_Enable(); + FreezeMapObjects(); + sub_80597F4(); + gMain.savedCallback = HandleWildBattleEnd; + gBattleTypeFlags = BATTLE_TYPE_ROAMER; + task_add_01_battle_start(GetWildBattleTransition(), 0); + IncrementGameStat(7); + IncrementGameStat(8); +} + +void StartBattle_Safari(void) +{ + ScriptContext2_Enable(); + FreezeMapObjects(); + sub_80597F4(); + gMain.savedCallback = sub_80C824C; + gBattleTypeFlags = BATTLE_TYPE_SAFARI; + task_add_01_battle_start(GetWildBattleTransition(), 0); +} + +void task_add_01_battle_start_with_music_and_stats(void) +{ + task_add_01_battle_start(GetTrainerBattleTransition(), 0); + IncrementGameStat(7); + IncrementGameStat(9); +} + +//Initiates battle where Wally catches Ralts +void StartBattle_WallyTutorial(void) +{ + CreateMaleMon(&gEnemyParty[0], SPECIES_RALTS, 5); + 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); +} + +void StartBattle_ScriptedWild(void) +{ + ScriptContext2_Enable(); + gMain.savedCallback = HandleScriptedWildBattleEnd; + gBattleTypeFlags = 0; + task_add_01_battle_start(GetWildBattleTransition(), 0); + IncrementGameStat(7); + IncrementGameStat(8); +} + +void StartBattle_SouthernIsland(void) +{ + ScriptContext2_Enable(); + gMain.savedCallback = HandleScriptedWildBattleEnd; + gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; + task_add_01_battle_start(GetWildBattleTransition(), 0); + IncrementGameStat(7); + IncrementGameStat(8); +} + +void StartBattle_Rayquaza(void) +{ + ScriptContext2_Enable(); + gMain.savedCallback = HandleScriptedWildBattleEnd; + gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; + task_add_01_battle_start(0, BGM_BATTLE34); + IncrementGameStat(7); + IncrementGameStat(8); +} + +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 + else + task_add_01_battle_start(0x6, BGM_BATTLE34); // GROUDON + IncrementGameStat(7); + IncrementGameStat(8); +} + +void StartBattle_Regi(void) +{ + ScriptContext2_Enable(); + gMain.savedCallback = HandleScriptedWildBattleEnd; + gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI; + task_add_01_battle_start(0xA, BGM_BATTLE36); + IncrementGameStat(7); + IncrementGameStat(8); +} + +void HandleWildBattleEnd(void) +{ + CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE); + ResetOamRange(0, 128); + + if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE) + { + SetMainCallback2(CB2_WhiteOut); + } + else + { + SetMainCallback2(c2_exit_to_overworld_2_switch); + gFieldCallback = sub_8080E44; + } +} + +void HandleScriptedWildBattleEnd(void) +{ + CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE); + ResetOamRange(0, 128); + + if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE) + SetMainCallback2(CB2_WhiteOut); + else + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +s8 GetBattleTerrain(void) +{ + u16 tileBehavior; + s16 x, y; + + PlayerGetDestCoords(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + + if (MetatileBehavior_IsTallGrass(tileBehavior)) + return 0; + if (MetatileBehavior_IsLongGrass(tileBehavior)) + return 1; + if (MetatileBehavior_IsSandOrDeepSand(tileBehavior)) + return 2; + switch (gMapHeader.mapType) + { + case MAP_TYPE_TOWN: + case MAP_TYPE_CITY: + case MAP_TYPE_ROUTE: + break; + case MAP_TYPE_UNDERGROUND: + if (sub_80574C4(tileBehavior)) + return 8; + if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) + return 5; + return 7; + case MAP_TYPE_INDOOR: + case MAP_TYPE_SECRET_BASE: + return 8; + case MAP_TYPE_UNDERWATER: + return 3; + case MAP_TYPE_6: + if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) + return 4; + return 9; + } + if (sub_8057568(tileBehavior)) + return 4; + if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) + return 5; + if (sub_80574D8(tileBehavior)) + return 6; + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + { + if (sub_8057450(tileBehavior)) + return 5; + if (MetatileBehavior_IsBridge(tileBehavior) == TRUE) + return 4; + } + if (gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 28) + return 2; + if (GetSav1Weather() == 8) + return 2; + return 9; +} + +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) + return 2; + + if (!MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) + { + switch (gMapHeader.mapType) + { + case MAP_TYPE_UNDERGROUND: + return 1; + case MAP_TYPE_UNDERWATER: + return 3; + default: + return 0; + } + } + return 3; +} + +u16 GetSumOfPartyMonLevel(u8 numMons) +{ + u8 sum = 0; + int i; + + for (i = 0; i < 6; i++) + { + u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + + if (species != SPECIES_EGG && species != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) != 0) + { + sum += GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + numMons--; + if (numMons == 0) + break; + } + } + return sum; +} + +u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons) +{ + u8 i; + u8 sum; + u32 count = numMons; + void *party; + + if (gTrainers[trainerNum].partySize < count) + count = gTrainers[trainerNum].partySize; + + sum = 0; + + switch (gTrainers[trainerNum].partyFlags) + { + case 0: + party = gTrainers[trainerNum].party; + for (i = 0; i < count; i++) + sum += ((struct TrainerPartyMember0 *)party)[i].level; + break; + case 1: + party = gTrainers[trainerNum].party; + for (i = 0; i < count; i++) + sum += ((struct TrainerPartyMember1 *)party)[i].level; + break; + case 2: + party = gTrainers[trainerNum].party; + for (i = 0; i < count; i++) + sum += ((struct TrainerPartyMember2 *)party)[i].level; + break; + case 3: + party = gTrainers[trainerNum].party; + for (i = 0; i < count; i++) + sum += ((struct TrainerPartyMember3 *)party)[i].level; + break; + } + + return sum; +} + +u8 GetWildBattleTransition(void) +{ + u8 flashVar = GetBattleTransitionTypeByMap(); + u8 level = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); + + if (level < (u8)GetSumOfPartyMonLevel(1)) // is wild mon level than the player's mon level? + return gBattleTransitionTable_Wild[flashVar][0]; + else + return gBattleTransitionTable_Wild[flashVar][1]; // use a white fade in instead of normal transition. +} + +u8 GetTrainerBattleTransition(void) +{ + const struct Trainer *trainer; + u8 minPartyCount; + u8 flashVar; + u8 level; + + if (gTrainerBattleOpponent == 1024) // link battle? + return 16; + + trainer = gTrainers; + + if (trainer[gTrainerBattleOpponent].trainerClass == 24) // league? + { + if (gTrainerBattleOpponent == 261) + return 12; + if (gTrainerBattleOpponent == 262) + return 13; + if (gTrainerBattleOpponent == 263) + return 14; + if (gTrainerBattleOpponent == 264) + return 15; + return 16; + } + + if (trainer[gTrainerBattleOpponent].trainerClass == 32) // team leader? + return 16; + + 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]; + else + return gBattleTransitionTable_Trainer[flashVar][1]; +} + +u8 GetBattleTowerBattleTransition(void) +{ + u8 monData = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); + + if (monData < (u8)GetSumOfPartyMonLevel(1)) + return 4; + else + return 3; +} + +void ChooseStarter(void) +{ + SetMainCallback2(CB2_ChooseStarter); + gMain.savedCallback = CB2_GiveStarter; +} + +void CB2_GiveStarter(void) +{ + u16 starterPoke; + + *GetVarPointer(0x4023) = gScriptResult; + starterPoke = GetStarterPokemon(gScriptResult); + ScriptGiveMon(starterPoke, 5, 0, 0, 0, 0); + ResetTasks(); + sub_80408BC(); + SetMainCallback2(CB2_StartFirstBattle); + sub_811AAD8(0); +} + +void CB2_StartFirstBattle(void) +{ + UpdatePaletteFade(); + RunTasks(); + + if (sub_811AAE8() == TRUE) + { + gBattleTypeFlags = BATTLE_TYPE_FIRST_BATTLE; + gMain.savedCallback = HandleFirstBattleEnd; + SetMainCallback2(sub_800E7C4); + prev_quest_postbuffer_cursor_backup_reset(); + overworld_poison_timer_set(); + IncrementGameStat(7); + IncrementGameStat(8); + } +} + +void HandleFirstBattleEnd(void) +{ + sav1_reset_battle_music_maybe(); + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +u32 TrainerBattleLoadArg32(const u8 *ptr) +{ + return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); +} + +u16 TrainerBattleLoadArg16(const u8 *ptr) +{ + return ptr[0] | (ptr[1] << 8); +} + +u8 TrainerBattleLoadArg8(const u8 *ptr) +{ + return ptr[0]; +} + +u16 trainerflag_opponent(void) +{ + return TRAINER_FLAG_START + gTrainerBattleOpponent; +} + +bool32 battle_exit_is_player_defeat(u32 a1) +{ + switch (a1) + { + case 2: + case 3: + return TRUE; + case 1: + case 4: + case 5: + case 6: + case 7: + return FALSE; + } + return FALSE; +} + +void sub_80822BC(void) +{ + gTrainerBattleMode = 0; + gTrainerBattleOpponent = 0; + gTrainerMapObjectLocalId = 0; + gTrainerIntroSpeech = 0; + gTrainerDefeatSpeech = 0; + gTrainerVictorySpeech = 0; + gTrainerCannotBattleSpeech = 0; + gTrainerBattleScriptReturnAddress = 0; + gTrainerBattleEndScript = 0; +} + +void TrainerBattleLoadArgs(const struct TrainerBattleSpec *specs, const u8 *data) +{ + while (1) + { + switch (specs->ptrType) + { + case 0: + *(u8 *)specs->ptr = TrainerBattleLoadArg8(data); + data++; + break; + case 1: + *(u16 *)specs->ptr = TrainerBattleLoadArg16(data); + data += 2; + break; + case 2: + *(u32 *)specs->ptr = TrainerBattleLoadArg32(data); + data += 4; + break; + case 3: + *(u8 *)specs->ptr = 0; + break; + case 4: + *(u16 *)specs->ptr = 0; + break; + case 5: + *(u32 *)specs->ptr = 0; + break; + case 6: + *(const u8 **)specs->ptr = data; + return; + } + specs++; + } +} + +void battle_80801F0(void) +{ + if (gTrainerMapObjectLocalId) + { + gScriptLastTalked = gTrainerMapObjectLocalId; + gSelectedMapObject = GetFieldObjectIdByLocalIdAndMap(gTrainerMapObjectLocalId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + } +} + +u8 *TrainerBattleConfigure(const u8 *data) +{ + sub_80822BC(); + gTrainerBattleMode = TrainerBattleLoadArg8(data); + + switch (gTrainerBattleMode) + { + case 3: + TrainerBattleLoadArgs(gTrainerBattleSpecs_3, data); + return gUnknown_0819F878; + case 4: + TrainerBattleLoadArgs(gTrainerBattleSpecs_2, data); + battle_80801F0(); + return gUnknown_0819F840; + case 1: + case 2: + TrainerBattleLoadArgs(gTrainerBattleSpecs_1, data); + battle_80801F0(); + return gUnknown_0819F818; + case 6: + case 8: + TrainerBattleLoadArgs(gTrainerBattleSpecs_4, data); + battle_80801F0(); + return gUnknown_0819F840; + case 7: + TrainerBattleLoadArgs(gTrainerBattleSpecs_2, data); + battle_80801F0(); + gTrainerBattleOpponent = sub_8082C4C(gTrainerBattleOpponent); + return gUnknown_0819F8AE; + case 5: + TrainerBattleLoadArgs(gTrainerBattleSpecs_0, data); + battle_80801F0(); + gTrainerBattleOpponent = sub_8082C4C(gTrainerBattleOpponent); + return gUnknown_0819F887; + default: + TrainerBattleLoadArgs(gTrainerBattleSpecs_0, data); + battle_80801F0(); + return gUnknown_0819F818; + } +} + +void TrainerWantsBattle(u8 trainerMapObjId, u8 *trainerScript) +{ + gSelectedMapObject = trainerMapObjId; + gScriptLastTalked = gMapObjects[trainerMapObjId].localId; + TrainerBattleConfigure(trainerScript + 1); + ScriptContext1_SetupScript(gUnknown_0819F80B); + ScriptContext2_Enable(); +} + +bool32 GetTrainerFlagFromScriptPointer(u8 *data) +{ + u32 flag = TrainerBattleLoadArg16(data + 2); + return FlagGet(TRAINER_FLAG_START + flag); +} + +void sub_8082524(void) +{ + struct MapObject *mapObject = &gMapObjects[gSelectedMapObject]; + + npc_set_running_behaviour_etc(mapObject, npc_running_behaviour_by_direction(mapObject->mapobj_unk_18)); +} + +u8 sub_8082558(void) +{ + return gTrainerBattleMode; +} + +u8 sub_8082564(void) +{ + return FlagGet(trainerflag_opponent()); +} + +void sub_808257C(void) +{ + FlagSet(trainerflag_opponent()); +} + +void unref_sub_8082590(void) +{ + FlagSet(trainerflag_opponent()); // duplicate function +} + +u8 trainer_flag_check(u16 flag) +{ + return FlagGet(TRAINER_FLAG_START + flag); +} + +void trainer_flag_set(u16 flag) +{ + FlagSet(TRAINER_FLAG_START + flag); +} + +void trainer_flag_clear(u16 flag) +{ + FlagReset(TRAINER_FLAG_START + flag); +} + +void sub_80825E4(void) +{ + gBattleTypeFlags = BATTLE_TYPE_TRAINER; + gMain.savedCallback = sub_808260C; + task_add_01_battle_start_with_music_and_stats(); + ScriptContext1_Stop(); +} + +void sub_808260C(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) + { + SetMainCallback2(CB2_WhiteOut); + } + else + { + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); + sub_808257C(); + } +} + +void do_choose_name_or_words_screen(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) + { + SetMainCallback2(CB2_WhiteOut); + } + else + { + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); + sub_808257C(); + sub_8082CB8(); + } +} + +void sub_80826B0(void) +{ + gBattleTypeFlags = BATTLE_TYPE_TRAINER; + gMain.savedCallback = do_choose_name_or_words_screen; + task_add_01_battle_start_with_music_and_stats(); + ScriptContext1_Stop(); +} + +void sub_80826D8(void) +{ + ShowFieldMessage(sub_808281C()); +} + +u8 *sub_80826E8(void) +{ + if (gTrainerBattleScriptReturnAddress) + return gTrainerBattleScriptReturnAddress; + else + return gUnknown_081C6C02; +} + +u8 *sub_8082700(void) +{ + if (gTrainerBattleEndScript) + return gTrainerBattleEndScript; + else + return gUnknown_081C6C02; +} + +void sub_8082718(void) +{ + ShowFieldMessage(sub_8082880()); +} + +void PlayTrainerEncounterMusic(void) +{ + u16 music; + + if (gTrainerBattleMode != 1 && gTrainerBattleMode != 8) + { + switch (sub_803FC58(gTrainerBattleOpponent)) + { + case TRAINER_ENCOUNTER_MUSIC_MALE: + music = BGM_BOYEYE; + break; + case TRAINER_ENCOUNTER_MUSIC_FEMALE: + music = BGM_GIRLEYE; + break; + case TRAINER_ENCOUNTER_MUSIC_GIRL: + music = BGM_SYOUJOEYE; + break; + case TRAINER_ENCOUNTER_MUSIC_INTENSE: + music = BGM_HAGESHII; + break; + case TRAINER_ENCOUNTER_MUSIC_COOL: + music = BGM_KAKKOII; + break; + case TRAINER_ENCOUNTER_MUSIC_AQUA: + music = BGM_AQA_0; + break; + case TRAINER_ENCOUNTER_MUSIC_MAGMA: + music = BGM_MGM0; + break; + case TRAINER_ENCOUNTER_MUSIC_SWIMMER: + music = BGM_SWIMEYE; + break; + case TRAINER_ENCOUNTER_MUSIC_TWINS: + music = BGM_HUTAGO; + break; + case TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR: + music = BGM_SITENNOU; + break; + case TRAINER_ENCOUNTER_MUSIC_HIKER: + music = BGM_YAMA_EYE; + break; + case TRAINER_ENCOUNTER_MUSIC_INTERVIEWER: + music = BGM_INTER_V; + break; + case TRAINER_ENCOUNTER_MUSIC_RICH: + music = BGM_TEST; + break; + default: + music = BGM_AYASII; + } + PlayNewMapMusic(music); + } +} + +//Returns an empty string if a null pointer was passed, otherwise returns str +u8 *SanitizeString(const u8 *str) +{ + if (str) + return (u8 *) str; + else + return (u8 *) gOtherText_CancelWithTerminator; +} + +u8 *sub_808281C(void) +{ + return SanitizeString(gTrainerIntroSpeech); +} + +u8 *sub_8082830(void) +{ + u8 *str; + + if (gTrainerBattleOpponent == 1024) + str = sub_80BCCE8(); + else + str = gTrainerDefeatSpeech; + + StringExpandPlaceholders(gStringVar4, SanitizeString(str)); + return gStringVar4; +} + +u8 *unref_sub_808286C(void) +{ + return SanitizeString(gTrainerVictorySpeech); +} + +u8 *sub_8082880(void) +{ + return SanitizeString(gTrainerCannotBattleSpeech); +} + +s32 sub_8082894(const struct TrainerEyeTrainer *trainers, u16 trainerNum) +{ + s32 i; + + for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++) + { + if (trainers[i].trainerNums[0] == trainerNum) + return i; + } + return -1; +} + +s32 sub_80828B8(const struct TrainerEyeTrainer *trainers, u16 trainerNum) +{ + s32 i; + s32 j; + + for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++) + { + for (j = 0; j < 5 && trainers[i].trainerNums[j] != 0; j++) + { + if (trainers[i].trainerNums[j] == trainerNum) + return i; + } + } + return -1; +} + +bool32 sub_80828FC(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum) +{ + int i; + bool32 ret = FALSE; + + for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++) + { + if (trainers[i].mapGroup == mapGroup && trainers[i].mapNum == mapNum) + { + if (gSaveBlock1.trainerRematches[i] != 0) + ret = TRUE; + else if (trainer_flag_check(trainers[i].trainerNums[0]) == TRUE && (Random() % 100) <= 30) + { + int j = 1; + + while (j < 5 && trainers[i].trainerNums[j] != 0 && trainer_flag_check(trainers[i].trainerNums[j])) + j++; + gSaveBlock1.trainerRematches[i] = j; + ret = TRUE; + } + } + } + return ret; +} + +s32 sub_80829A8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum) +{ + s32 i; + + for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++) + { + if (trainers[i].mapGroup == mapGroup && trainers[i].mapNum == mapNum && gSaveBlock1.trainerRematches[i]) + return 1; + } + return 0; +} + +s32 sub_80829E8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum) +{ + s32 i; + + for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++) + { + if (trainers[i].mapGroup == mapGroup && trainers[i].mapNum == mapNum) + return 1; + } + return 0; +} + +bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 trainerNum) +{ + s32 trainerEyeIndex = sub_8082894(trainers, trainerNum); + + if (trainerEyeIndex != -1 && trainerEyeIndex < 100 && gSaveBlock1.trainerRematches[trainerEyeIndex]) + return TRUE; + else + return FALSE; +} + +bool8 sub_8082A54(const struct TrainerEyeTrainer *trainers, u16 trainerNum) +{ + s32 trainerEyeIndex = sub_80828B8(trainers, trainerNum); + + if (trainerEyeIndex != -1 && trainerEyeIndex < 100 && gSaveBlock1.trainerRematches[trainerEyeIndex]) + return TRUE; + else + return FALSE; +} + +u16 sub_8082A90(const struct TrainerEyeTrainer *trainers, u16 trainerNum) +{ + int i; + const struct TrainerEyeTrainer *trainer; + s32 trainerEyeIndex = sub_8082894(trainers, trainerNum); + + 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]; + } + return trainer->trainerNums[4]; +} + +void sub_8082AE4(const struct TrainerEyeTrainer *trainers, u16 trainerNum) +{ + s32 trainerEyeIndex = sub_80828B8(trainers, trainerNum); + + if (trainerEyeIndex != -1) + gSaveBlock1.trainerRematches[trainerEyeIndex] = 0; +} + +bool8 sub_8082B10(const struct TrainerEyeTrainer *trainers, u16 trainerNum) +{ + s32 trainerEyeIndex = sub_8082894(trainers, trainerNum); + + if (trainerEyeIndex != -1 && trainer_flag_check(trainers[trainerEyeIndex].trainerNums[1])) + return TRUE; + else + return FALSE; +} + +bool32 sub_8082B44(void) +{ + int badgeCount = 0; + u32 i; + + for (i = 0; i < 8; i++) + { + if (FlagGet(sBadgeFlags[i]) == TRUE) + { + badgeCount++; + if (badgeCount >= 5) + return TRUE; + } + } + return FALSE; +} + +void sub_8082B78(void) +{ + if (sub_8082B44()) + { + if (gSaveBlock1.trainerRematchStepCounter >= TRAINER_REMATCH_STEPS) + gSaveBlock1.trainerRematchStepCounter = TRAINER_REMATCH_STEPS; + else + gSaveBlock1.trainerRematchStepCounter++; + } +} + +bool32 sub_8082BA4(void) +{ + if (sub_8082B44() && gSaveBlock1.trainerRematchStepCounter >= TRAINER_REMATCH_STEPS) + return TRUE; + else + return FALSE; +} + +void sub_8082BD0(u16 mapGroup, u16 mapNum) +{ + if (sub_8082BA4() && sub_80828FC(gTrainerEyeTrainers, mapGroup, mapNum) == TRUE) + gSaveBlock1.trainerRematchStepCounter = 0; +} + +s32 sub_8082C0C(u16 mapGroup, u16 mapNum) +{ + return sub_80829A8(gTrainerEyeTrainers, mapGroup, mapNum); +} + +s32 unref_sub_8082C2C(u16 mapGroup, u16 mapNum) +{ + return sub_80829E8(gTrainerEyeTrainers, mapGroup, mapNum); +} + +u16 sub_8082C4C(u16 trainerNum) +{ + return sub_8082A90(gTrainerEyeTrainers, trainerNum); +} + +s32 sub_8082C68(void) +{ + if (sub_8082A18(gTrainerEyeTrainers, gTrainerBattleOpponent)) + return 1; + else + return sub_8082B10(gTrainerEyeTrainers, gTrainerBattleOpponent); +} + +u8 sub_8082C9C(void) +{ + return sub_8082A54(gTrainerEyeTrainers, gTrainerBattleOpponent); +} + +void sub_8082CB8(void) +{ + sub_8082AE4(gTrainerEyeTrainers, gTrainerBattleOpponent); + sub_808257C(); +} diff --git a/src/battle/calculate_base_damage.c b/src/battle/calculate_base_damage.c new file mode 100644 index 000000000..0f2605e5b --- /dev/null +++ b/src/battle/calculate_base_damage.c @@ -0,0 +1,1474 @@ +#include "global.h" +#include "abilities.h" +#include "battle.h" +#include "berry.h" +#include "data2.h" +#include "event_data.h" +#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" + +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]; + +#define APPLY_STAT_MOD(var, mon, stat, statIndex) \ +{ \ + (var) = (stat) * (gStatStageRatios)[(mon)->statStages[(statIndex)] * 2]; \ + (var) /= (gStatStageRatios + 1)[(mon)->statStages[(statIndex)] * 2]; \ +} + +#ifdef NONMATCHING +s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 a7, u8 a8) +{ + s32 i; + s32 damage = 0; + u8 type; + u16 attack, defense; + u16 spAttack, spDefense; + u8 defenderHoldEffect; + u8 defenderHoldEffectParam; + u8 attackerHoldEffect; + u8 attackerHoldEffectParam; + s32 a, b; + + if (!powerOverride) + gBattleMovePower = gBattleMoves[move].power; + else + gBattleMovePower = powerOverride; + + if (!typeOverride) + type = gBattleMoves[move].type; + else + type = typeOverride & 0x3F; + + attack = attacker->attack; + defense = defender->defense; + spAttack = attacker->spAttack; + spDefense = defender->spDefense; + + if (attacker->item == ITEM_ENIGMA_BERRY) + { + attackerHoldEffect = gEnigmaBerries[a7].holdEffect; + attackerHoldEffectParam = gEnigmaBerries[a7].holdEffectParam; + } + else + { + attackerHoldEffect = ItemId_GetHoldEffect(attacker->item); + attackerHoldEffectParam = ItemId_GetHoldEffectParam(attacker->item); + } + + if (defender->item == ITEM_ENIGMA_BERRY) + { + defenderHoldEffect = gEnigmaBerries[a8].holdEffect; + defenderHoldEffectParam = gEnigmaBerries[a8].holdEffectParam; + } + else + { + defenderHoldEffect = ItemId_GetHoldEffect(defender->item); + defenderHoldEffectParam = ItemId_GetHoldEffectParam(defender->item); + } + + if (attacker->ability == ABILITY_HUGE_POWER || attacker->ability == ABILITY_PURE_POWER) + attack *= 2; + + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) + { + if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) + && gTrainerBattleOpponent != 1024 + && FlagGet(BADGE01_GET) + && !GetBankSide(a7)) + 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(a8)) + 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(a7)) + 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(a8)) + spDefense = (110 * spDefense) / 100; + } + } + } + } + + for (i = 0; i < 17; i++) + { + if (attackerHoldEffect == gHoldEffectToType[i][0] + && type == gHoldEffectToType[i][1]) + { + if (type <= 8) + attack = (attack * (attackerHoldEffectParam + 100)) / 100; + else + spAttack = (spAttack * (attackerHoldEffectParam + 100)) / 100; + break; + } + } + + if (attackerHoldEffect == HOLD_EFFECT_CHOICE_BAND) + attack = (150 * attack) / 100; + if (attackerHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) && (attacker->species == SPECIES_LATIAS || attacker->species == SPECIES_LATIOS)) + spAttack = (150 * spAttack) / 100; + if (defenderHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) && (defender->species == SPECIES_LATIAS || defender->species == SPECIES_LATIOS)) + spDefense = (150 * spDefense) / 100; + if (attackerHoldEffect == HOLD_EFFECT_DEEP_SEA_TOOTH && attacker->species == SPECIES_CLAMPERL) + spAttack *= 2; + if (defenderHoldEffect == HOLD_EFFECT_DEEP_SEA_SCALE && defender->species == SPECIES_CLAMPERL) + spDefense *= 2; + if (attackerHoldEffect == HOLD_EFFECT_LIGHT_BALL && attacker->species == SPECIES_PIKACHU) + spAttack *= 2; + if (defenderHoldEffect == HOLD_EFFECT_METAL_POWDER && defender->species == SPECIES_DITTO) + defense *= 2; + if (attackerHoldEffect == HOLD_EFFECT_THICK_CLUB && (attacker->species == SPECIES_CUBONE || attacker->species == SPECIES_MAROWAK)) + attack *= 2; + if (defender->ability == ABILITY_THICK_FAT && (type == TYPE_FIRE || type == TYPE_ICE)) + spAttack /= 2; + if (attacker->ability == ABILITY_HUSTLE) + attack = (150 * attack) / 100; + if (attacker->ability == ABILITY_PLUS && AbilityBattleEffects(0xE, 0, ABILITY_MINUS, 0, 0)) + spAttack = (150 * spAttack) / 100; + if (attacker->ability == ABILITY_MINUS && AbilityBattleEffects(0xE, 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)) + gBattleMovePower /= 2; + if (type == TYPE_FIRE && AbilityBattleEffects(0xE, 0, 0, 0xFE, 0)) + gBattleMovePower /= 2; + if (type == TYPE_GRASS && attacker->ability == ABILITY_OVERGROW && attacker->hp <= (attacker->maxHP / 3)) + gBattleMovePower = (150 * gBattleMovePower) / 100; + if (type == TYPE_FIRE && attacker->ability == ABILITY_BLAZE && attacker->hp <= (attacker->maxHP / 3)) + gBattleMovePower = (150 * gBattleMovePower) / 100; + if (type == TYPE_WATER && attacker->ability == ABILITY_TORRENT && attacker->hp <= (attacker->maxHP / 3)) + 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) + defense /= 2; + + if (type < TYPE_MYSTERY) // is physical? + { + if (gCritMultiplier == 2) + { + if (attacker->statStages[1] > 6) + APPLY_STAT_MOD(a, attacker, attack, 1) + else + a = attack; + } + else + APPLY_STAT_MOD(a, attacker, attack, 1) + + a = a * gBattleMovePower * (2 * attacker->level / 5 + 2); + + if (gCritMultiplier == 2) + { + if (defender->statStages[2] < 6) + APPLY_STAT_MOD(b, defender, defense, 2) + else + b = defense; + } + else + APPLY_STAT_MOD(b, defender, defense, 2) + + damage = (a / b) / 50; + + if ((attacker->status1 & 0x10) && attacker->ability != ABILITY_GUTS) + damage /= 2; + + if ((a4 & 1) && gCritMultiplier == 1) + { + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMons(2) == 2) + damage = 2 * (damage / 3); + else + damage /= 2; + } + + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMons(2) == 2) + damage /= 2; + + // moves always do at least 1 damage. + if (damage == 0) + damage = 1; + } + + if (type == TYPE_MYSTERY) + damage = 0; // is ??? type. does 0 damage. + + if (type > TYPE_MYSTERY) // is special? + { + if (gCritMultiplier == 2) + { + if (attacker->statStages[4] > 6) + APPLY_STAT_MOD(a, attacker, spAttack, 4) + else + a = spAttack; + } + else + APPLY_STAT_MOD(a, attacker, spAttack, 4) + + a = a * gBattleMovePower * (2 * attacker->level / 5 + 2); + + if (gCritMultiplier == 2) + { + if (defender->statStages[5] < 6) + APPLY_STAT_MOD(b, defender, spDefense, 5) + else + b = spDefense; + } + else + APPLY_STAT_MOD(b, defender, spDefense, 5) + + damage = (a / b) / 50; + + if ((a4 & 2) && gCritMultiplier == 1) + { + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMons(2) == 2) + damage = 2 * (damage / 3); + else + damage /= 2; + } + + 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)) + { + // rain? + if (gBattleWeather & 1) + { + if (type == TYPE_FIRE) + damage /= 2; + else if (type == TYPE_WATER) + damage = (15 * damage) / 10; + } + + // does lack of sun half solar beam damage? + if ((gBattleWeather & 0x9F) && gCurrentMove == 76) + damage /= 2; + + // sunny? + if (gBattleWeather & 0x60) + { + if (type == TYPE_FIRE) + damage = (15 * damage) / 10; + else if (type == TYPE_WATER) + damage /= 2; + } + } + + // flash fire triggered? + if ((dword_2017100[a7] & 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 diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c new file mode 100644 index 000000000..0ae98af09 --- /dev/null +++ b/src/battle/contest_link_80C857C.c @@ -0,0 +1,55 @@ +#include "global.h" +#include "link.h" + +#if GERMAN + +void de_sub_80C9274(bool32 arg0) { + if (deUnkValue2 != 1) + { + return; + } + + if (arg0) + { + deUnkValue2 = 3; + } + else + { + deUnkValue2 = 2; + } +} + +void de_sub_80C9294(bool32 arg0) { + if (deUnkValue2 == 1) + { + if (arg0) + { + deUnkValue2 = 3; + } + else + { + deUnkValue2 = 2; + } + + return; + } + + + if (deUnkValue2 == 2) + { + SendBlock(0, sBlockRequestLookupTable[deUnkValue1].address, sBlockRequestLookupTable[deUnkValue1].size); + + if (arg0) + { + deUnkValue2 = 0; + } + else + { + deUnkValue2 = 1; + } + + return; + } +} + +#endif diff --git a/src/battle/pokeball.c b/src/battle/pokeball.c new file mode 100644 index 000000000..ee3b95678 --- /dev/null +++ b/src/battle/pokeball.c @@ -0,0 +1,1193 @@ +#include "global.h" +#include "gba/m4a_internal.h" +#include "battle.h" +#include "decompress.h" +#include "graphics.h" +#include "m4a.h" +#include "main.h" +#include "pokeball.h" +#include "pokemon.h" +#include "rom_8077ABC.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "util.h" + +extern struct MusicPlayerInfo gMPlay_BGM; +extern u16 gBattleTypeFlags; +extern u8 gBankTarget; +extern u8 gActiveBank; +extern u16 gBattlePartyID[]; +extern u8 gObjectBankIDs[]; +extern u8 gDoingBattleAnim; +extern u8 gHealthboxIDs[]; + +#define GFX_TAG_POKEBALL 55000 +#define GFX_TAG_GREATBALL 55001 +#define GFX_TAG_SAFARIBALL 55002 +#define GFX_TAG_ULTRABALL 55003 +#define GFX_TAG_MASTERBALL 55004 +#define GFX_TAG_NETBALL 55005 +#define GFX_TAG_DIVEBALL 55006 +#define GFX_TAG_NESTBALL 55007 +#define GFX_TAG_REPEATBALL 55008 +#define GFX_TAG_TIMERBALL 55009 +#define GFX_TAG_LUXURYBALL 55010 +#define GFX_TAG_PREMIERBALL 55011 + +static const struct CompressedSpriteSheet sBallSpriteSheets[] = +{ + {gInterfaceGfx_PokeBall, 384, GFX_TAG_POKEBALL}, + {gInterfaceGfx_GreatBall, 384, GFX_TAG_GREATBALL}, + {gInterfaceGfx_SafariBall, 384, GFX_TAG_SAFARIBALL}, + {gInterfaceGfx_UltraBall, 384, GFX_TAG_ULTRABALL}, + {gInterfaceGfx_MasterBall, 384, GFX_TAG_MASTERBALL}, + {gInterfaceGfx_NetBall, 384, GFX_TAG_NETBALL}, + {gInterfaceGfx_DiveBall, 384, GFX_TAG_DIVEBALL}, + {gInterfaceGfx_NestBall, 384, GFX_TAG_NESTBALL}, + {gInterfaceGfx_RepeatBall, 384, GFX_TAG_REPEATBALL}, + {gInterfaceGfx_TimerBall, 384, GFX_TAG_TIMERBALL}, + {gInterfaceGfx_LuxuryBall, 384, GFX_TAG_LUXURYBALL}, + {gInterfaceGfx_PremierBall, 384, GFX_TAG_PREMIERBALL}, +}; + +static const struct CompressedSpritePalette sBallSpritePalettes[] = +{ + {gInterfacePal_PokeBall, GFX_TAG_POKEBALL}, + {gInterfacePal_GreatBall, GFX_TAG_GREATBALL}, + {gInterfacePal_SafariBall, GFX_TAG_SAFARIBALL}, + {gInterfacePal_UltraBall, GFX_TAG_ULTRABALL}, + {gInterfacePal_MasterBall, GFX_TAG_MASTERBALL}, + {gInterfacePal_NetBall, GFX_TAG_NETBALL}, + {gInterfacePal_DiveBall, GFX_TAG_DIVEBALL}, + {gInterfacePal_NestBall, GFX_TAG_NESTBALL}, + {gInterfacePal_RepeatBall, GFX_TAG_REPEATBALL}, + {gInterfacePal_TimerBall, GFX_TAG_TIMERBALL}, + {gInterfacePal_LuxuryBall, GFX_TAG_LUXURYBALL}, + {gInterfacePal_PremierBall, GFX_TAG_PREMIERBALL}, +}; + +static const struct OamData sBallOamData = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sBallAnimSeq3[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sBallAnimSeq5[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sBallAnimSeq4[] = +{ + ANIMCMD_FRAME(8, 5), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sBallAnimSeq6[] = +{ + ANIMCMD_FRAME(12, 1), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sBallAnimSeq0[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sBallAnimSeq1[] = +{ + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_END, +}; + +static const union AnimCmd sBallAnimSeq2[] = +{ + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +static const union AnimCmd *const sBallAnimSequences[] = +{ + sBallAnimSeq0, + sBallAnimSeq1, + sBallAnimSeq2, + + // unused? + sBallAnimSeq3, + sBallAnimSeq4, + sBallAnimSeq5, + sBallAnimSeq6, +}; + +static const union AffineAnimCmd sBallAffineAnimSeq0[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd sBallAffineAnimSeq1[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -3, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd sBallAffineAnimSeq2[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 3, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd sBallAffineAnimSeq3[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sBallAffineAnimSeq4[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 25, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd *const sBallAffineAnimSequences[] = +{ + sBallAffineAnimSeq0, + sBallAffineAnimSeq1, + sBallAffineAnimSeq2, + sBallAffineAnimSeq3, + sBallAffineAnimSeq4, +}; + +static void objc_0804ABD4(struct Sprite *sprite); +const struct SpriteTemplate gBallSpriteTemplates[] = +{ + { + .tileTag = GFX_TAG_POKEBALL, + .paletteTag = GFX_TAG_POKEBALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = objc_0804ABD4, + }, + { + .tileTag = GFX_TAG_GREATBALL, + .paletteTag = GFX_TAG_GREATBALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = objc_0804ABD4, + }, + { + .tileTag = GFX_TAG_SAFARIBALL, + .paletteTag = GFX_TAG_SAFARIBALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = objc_0804ABD4, + }, + { + .tileTag = GFX_TAG_ULTRABALL, + .paletteTag = GFX_TAG_ULTRABALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = objc_0804ABD4, + }, + { + .tileTag = GFX_TAG_MASTERBALL, + .paletteTag = GFX_TAG_MASTERBALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = objc_0804ABD4, + }, + { + .tileTag = GFX_TAG_NETBALL, + .paletteTag = GFX_TAG_NETBALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = objc_0804ABD4, + }, + { + .tileTag = GFX_TAG_DIVEBALL, + .paletteTag = GFX_TAG_DIVEBALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = objc_0804ABD4, + }, + { + .tileTag = GFX_TAG_NESTBALL, + .paletteTag = GFX_TAG_NESTBALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = objc_0804ABD4, + }, + { + .tileTag = GFX_TAG_REPEATBALL, + .paletteTag = GFX_TAG_REPEATBALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = objc_0804ABD4, + }, + { + .tileTag = GFX_TAG_TIMERBALL, + .paletteTag = GFX_TAG_TIMERBALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = objc_0804ABD4, + }, + { + .tileTag = GFX_TAG_LUXURYBALL, + .paletteTag = GFX_TAG_LUXURYBALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = objc_0804ABD4, + }, + { + .tileTag = GFX_TAG_PREMIERBALL, + .paletteTag = GFX_TAG_PREMIERBALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = objc_0804ABD4, + }, +}; + +extern u32 ball_number_to_ball_processing_index(u16); // not sure of return type +extern void sub_80786EC(); +extern bool8 sub_8078718(struct Sprite *); +extern u8 sub_814086C(u8, u8, int, int, u8); +extern u8 sub_8141314(u8, u8, int, u8); + +static void sub_8046464(u8); +static void sub_80466E8(struct Sprite *); +static void sub_80466F4(struct Sprite *); +static void sub_8046760(struct Sprite *); +static void sub_80467F8(struct Sprite *); +static void sub_804684C(struct Sprite *); +static void sub_8046944(struct Sprite *); +static void sub_8046984(struct Sprite *); +static void sub_8046C78(struct Sprite *); +static void sub_8046E7C(struct Sprite *); +static void sub_8046E9C(struct Sprite *); +static void sub_8046FBC(struct Sprite *); +static void sub_8047074(struct Sprite *); +static void sub_80470C4(struct Sprite *); +static void sub_8047230(struct Sprite *); +static void sub_8047254(struct Sprite *); +static void sub_80473D0(struct Sprite *); +static void sub_804748C(struct Sprite *); +static void sub_8047638(struct Sprite *); +static void sub_80476E0(struct Sprite *); +static void sub_8047754(struct Sprite *); +static void sub_804780C(struct Sprite *); +static void sub_8047830(struct Sprite *); +static void oamc_804BEB4(struct Sprite *); +static u16 sub_8047978(u8); + +u8 sub_8046400(u16 a, u8 b) +{ + u8 taskId; + + gDoingBattleAnim = 1; + ewram17810[gActiveBank].unk0_3 = 1; + taskId = CreateTask(sub_8046464, 5); + gTasks[taskId].data[1] = a; + gTasks[taskId].data[2] = b; + gTasks[taskId].data[3] = gActiveBank; + return 0; +} + +static void sub_8046464(u8 taskId) +{ + bool8 sp0 = FALSE; + u16 r8; + u8 r5; + u16 ball; + u8 r4; + u8 spriteId; + + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[0]++; + return; + } + r8 = gTasks[taskId].data[2]; + r5 = gTasks[taskId].data[3]; + if (GetBankSide(r5) != 0) + ball = GetMonData(&gEnemyParty[gBattlePartyID[r5]], MON_DATA_POKEBALL); + else + ball = GetMonData(&gPlayerParty[gBattlePartyID[r5]], MON_DATA_POKEBALL); + r4 = ball_number_to_ball_processing_index(ball); + sub_80478DC(r4); + spriteId = CreateSprite(&gBallSpriteTemplates[r4], 32, 80, 0x1D); + gSprites[spriteId].data0 = 0x80; + gSprites[spriteId].data1 = 0; + gSprites[spriteId].data7 = r8; + switch (r8) + { + case 0xFF: + gBankTarget = r5; + gSprites[spriteId].pos1.x = 24; + gSprites[spriteId].pos1.y = 68; + gSprites[spriteId].callback = sub_8047074; + break; + case 0xFE: + gSprites[spriteId].pos1.x = sub_8077ABC(r5, 0); + gSprites[spriteId].pos1.y = sub_8077ABC(r5, 1) + 24; + gBankTarget = r5; + gSprites[spriteId].data0 = 0; + gSprites[spriteId].callback = sub_8047254; + break; + default: + gBankTarget = GetBankByPlayerAI(1); + sp0 = TRUE; + break; + } + gSprites[spriteId].data6 = gBankTarget; + if (!sp0) + { + DestroyTask(taskId); + return; + } + gSprites[spriteId].data0 = 0x22; + gSprites[spriteId].data2 = sub_8077ABC(gBankTarget, 0); + gSprites[spriteId].data4 = sub_8077ABC(gBankTarget, 1) - 16; + gSprites[spriteId].data5 = -40; + sub_80786EC(&gSprites[spriteId]); + gSprites[spriteId].oam.affineParam = taskId; + gTasks[taskId].data[4] = gBankTarget; + gTasks[taskId].func = TaskDummy; + PlaySE(SE_NAGERU); +} + +static void objc_0804ABD4(struct Sprite *sprite) +{ + if (sub_8078718(sprite)) + { + u8 taskId = sprite->oam.affineParam; + u8 r5 = gTasks[taskId].data[4]; + u8 r8 = gTasks[taskId].data[2]; + u32 r4; // not sure of this type + + StartSpriteAnim(sprite, 1); + sprite->affineAnimPaused = TRUE; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data5 = 0; + r4 = ball_number_to_ball_processing_index(sub_8047978(r5)); + sub_814086C(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, r4); + sprite->data0 = sub_8141314(0, r5, 14, r4); + sprite->data6 = r5; + sprite->data7 = r8; + DestroyTask(taskId); + sprite->callback = sub_80466E8; + } +} + +static void sub_80466E8(struct Sprite *sprite) +{ + sprite->callback = sub_80466F4; +} + +static void sub_80466F4(struct Sprite *sprite) +{ + sprite->data5++; + if (sprite->data5 == 10) + { + sprite->data5 = 0; + sprite->callback = sub_8046760; + StartSpriteAffineAnim(&gSprites[gObjectBankIDs[sprite->data6]], 2); + AnimateSprite(&gSprites[gObjectBankIDs[sprite->data6]]); + gSprites[gObjectBankIDs[sprite->data6]].data1 = 0; + } +} + +static void sub_8046760(struct Sprite *sprite) +{ + sprite->data5++; + if (sprite->data5 == 11) + PlaySE(SE_SUIKOMU); + if (gSprites[gObjectBankIDs[sprite->data6]].affineAnimEnded) + { + StartSpriteAnim(sprite, 2); + gSprites[gObjectBankIDs[sprite->data6]].invisible = TRUE; + sprite->data5 = 0; + sprite->callback = sub_80467F8; + } + else + { + gSprites[gObjectBankIDs[sprite->data6]].data1 += 0x60; + gSprites[gObjectBankIDs[sprite->data6]].pos2.y = -gSprites[gObjectBankIDs[sprite->data6]].data1 >> 8; + } +} + +static void sub_80467F8(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + sprite->data5++; + if (sprite->data5 == 1) + { + sprite->data3 = 0; + sprite->data4 = 32; + sprite->data5 = 0; + sprite->pos1.y += Cos(0, 32); + sprite->pos2.y = -Cos(0, sprite->data4); + sprite->callback = sub_804684C; + } + } +} + +static void sub_804684C(struct Sprite *sprite) +{ + bool8 r5 = FALSE; + + switch (sprite->data3 & 0xFF) + { + case 0: + sprite->pos2.y = -Cos(sprite->data5, sprite->data4); + sprite->data5 += 4 + (sprite->data3 >> 8); + if (sprite->data5 >= 64) + { + sprite->data4 -= 10; + sprite->data3 += 0x101; + if (sprite->data3 >> 8 == 4) + r5 = TRUE; + switch (sprite->data3 >> 8) + { + case 1: + PlaySE(SE_KON); + break; + case 2: + PlaySE(SE_KON2); + break; + case 3: + PlaySE(SE_KON3); + break; + default: + PlaySE(SE_KON4); + break; + } + } + break; + case 1: + sprite->pos2.y = -Cos(sprite->data5, sprite->data4); + sprite->data5 -= 4 + (sprite->data3 >> 8); + if (sprite->data5 <= 0) + { + sprite->data5 = 0; + sprite->data3 &= 0xFF00; + } + break; + } + if (r5) + { + sprite->data3 = 0; + sprite->pos1.y += Cos(64, 32); + sprite->pos2.y = 0; + if (sprite->data7 == 0) + { + sprite->callback = sub_8046C78; + } + else + { + sprite->callback = sub_8046944; + sprite->data4 = 1; + sprite->data5 = 0; + } + } +} + +static void sub_8046944(struct Sprite *sprite) +{ + sprite->data3++; + if (sprite->data3 == 31) + { + sprite->data3 = 0; + sprite->affineAnimPaused = TRUE; + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_8046984; + PlaySE(SE_BOWA); + } +} + +static void sub_8046984(struct Sprite *sprite) +{ + switch (sprite->data3 & 0xFF) + { + case 0: + case 2: + sprite->pos2.x += sprite->data4; + sprite->data5 += sprite->data4; + sprite->affineAnimPaused = FALSE; + if (sprite->data5 > 3 || sprite->data5 < -3) + { + sprite->data3++; + sprite->data5 = 0; + } + break; + case 1: + sprite->data5++; + if (sprite->data5 == 1) + { + sprite->data5 = 0; + sprite->data4 = -sprite->data4; + sprite->data3++; + sprite->affineAnimPaused = FALSE; + if (sprite->data4 < 0) + ChangeSpriteAffineAnim(sprite, 2); + else + ChangeSpriteAffineAnim(sprite, 1); + } + else + { + sprite->affineAnimPaused = TRUE; + } + break; + case 3: + sprite->data3 += 0x100; + if (sprite->data3 >> 8 == sprite->data7) + { + sprite->callback = sub_8046C78; + } + else + { + if (sprite->data7 == 4 && sprite->data3 >> 8 == 3) + { + sprite->callback = sub_8046E7C; + sprite->affineAnimPaused = TRUE; + } + else + { + sprite->data3++; + sprite->affineAnimPaused = TRUE; + } + } + break; + case 4: + default: + sprite->data5++; + if (sprite->data5 == 31) + { + sprite->data5 = 0; + sprite->data3 &= 0xFF00; + StartSpriteAffineAnim(sprite, 3); + if (sprite->data4 < 0) + StartSpriteAffineAnim(sprite, 2); + else + StartSpriteAffineAnim(sprite, 1); + PlaySE(SE_BOWA); + } + break; + } +} + +static void sub_8046AD0(u8 taskId) +{ + u8 r6 = gTasks[taskId].data[2]; + u8 r3 = gTasks[taskId].data[1]; + u16 species = gTasks[taskId].data[0]; + + switch (gTasks[taskId].data[15]) + { + case 0: + default: + if (gTasks[taskId].data[8] < 3) + gTasks[taskId].data[8]++; + else + gTasks[taskId].data[15] = r6 + 1; + break; + case 1: + PlayCry1(species, r3); + DestroyTask(taskId); + break; + case 2: + StopCryAndClearCrySongs(); + gTasks[taskId].data[10] = 3; + gTasks[taskId].data[15] = 20; + break; + case 20: + if (gTasks[taskId].data[10] != 0) + { + gTasks[taskId].data[10]--; + break; + } + PlayCry4(species, r3, 1); + DestroyTask(taskId); + break; + case 3: + gTasks[taskId].data[10] = 6; + gTasks[taskId].data[15] = 30; + break; + case 30: + if (gTasks[taskId].data[10] != 0) + { + gTasks[taskId].data[10]--; + break; + } + gTasks[taskId].data[15]++; + // fall through + case 31: + if (!IsCryPlayingOrClearCrySongs()) + { + StopCryAndClearCrySongs(); + gTasks[taskId].data[10] = 3; + gTasks[taskId].data[15]++; + } + break; + case 32: + if (gTasks[taskId].data[10] != 0) + { + gTasks[taskId].data[10]--; + break; + } + PlayCry4(species, r3, 0); + DestroyTask(taskId); + break; + } +} + +static void sub_8046C78(struct Sprite *sprite) +{ + u8 r5 = sprite->data6; + u32 r4; // not sure of this type + + StartSpriteAnim(sprite, 1); + r4 = ball_number_to_ball_processing_index(sub_8047978(r5)); + sub_814086C(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, r4); + sprite->data0 = sub_8141314(1, sprite->data6, 14, r4); + sprite->callback = sub_8046E9C; + if (gMain.inBattle) + { + struct Pokemon *pkmn; + u16 species; + s8 r8; + u16 r4_2; + u8 taskId; + + if (GetBankSide(r5) != 0) + { + pkmn = &gEnemyParty[gBattlePartyID[r5]]; + r8 = 25; + } + else + { + pkmn = &gPlayerParty[gBattlePartyID[r5]]; + r8 = -25; + } + species = GetMonData(pkmn, MON_DATA_SPECIES); + if ((r5 == GetBankByPlayerAI(0) || r5 == GetBankByPlayerAI(1)) + && IsDoubleBattle() && ewram17840.unk9_0) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (IsBGMPlaying()) + m4aMPlayStop(&gMPlay_BGM); + } + else + { + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 128); + } + } + if (!IsDoubleBattle() || !ewram17840.unk9_0) + r4_2 = 0; + else if (r5 == GetBankByPlayerAI(0) || r5 == GetBankByPlayerAI(1)) + r4_2 = 1; + else + r4_2 = 2; + taskId = CreateTask(sub_8046AD0, 3); + gTasks[taskId].data[0] = species; + gTasks[taskId].data[1] = r8; + gTasks[taskId].data[2] = r4_2; + gTasks[taskId].data[15] = 0; + } + StartSpriteAffineAnim(&gSprites[gObjectBankIDs[sprite->data6]], 1); + AnimateSprite(&gSprites[gObjectBankIDs[sprite->data6]]); + gSprites[gObjectBankIDs[sprite->data6]].data1 = 0x1000; +} + +static void sub_8046E7C(struct Sprite *sprite) +{ + sprite->animPaused = TRUE; + sprite->callback = sub_8046FBC; + sprite->data3 = 0; + sprite->data4 = 0; + sprite->data5 = 0; +} + +static void sub_8046E9C(struct Sprite *sprite) +{ + bool8 r7 = FALSE; + u8 r4 = sprite->data6; + + gSprites[gObjectBankIDs[r4]].invisible = FALSE; + if (sprite->animEnded) + sprite->invisible = TRUE; + if (gSprites[gObjectBankIDs[r4]].affineAnimEnded) + { + StartSpriteAffineAnim(&gSprites[gObjectBankIDs[r4]], 0); + r7 = TRUE; + } + else + { + gSprites[gObjectBankIDs[r4]].data1 -= 288; + gSprites[gObjectBankIDs[r4]].pos2.y = gSprites[gObjectBankIDs[r4]].data1 >> 8; + } + if (sprite->animEnded && r7) + { + s32 i; + u32 r3; + + gSprites[gObjectBankIDs[r4]].pos2.y = 0; + gDoingBattleAnim = 0; + ewram17810[r4].unk0_3 = 0; + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + for (r3 = 0, i = 0; i < 4; i++) + { + if (ewram17810[i].unk0_3 == 0) + r3++; + } + if (r3 == 4) + { + for (i = 0; i < 12; i++) + sub_804794C(i); + } + } +} + +static void sub_8046FBC(struct Sprite *sprite) +{ + u8 r7 = sprite->data6; + + sprite->data4++; + if (sprite->data4 == 40) + { + return; + } + else if (sprite->data4 == 95) + { + gDoingBattleAnim = 0; + m4aMPlayAllStop(); + PlaySE(BGM_FANFA5); + } + else if (sprite->data4 == 315) + { + FreeOamMatrix(gSprites[gObjectBankIDs[sprite->data6]].oam.matrixNum); + DestroySprite(&gSprites[gObjectBankIDs[sprite->data6]]); + DestroySpriteAndFreeResources(sprite); + if (gMain.inBattle) + ewram17810[r7].unk0_3 = 0; + } +} + +static void sub_8047074(struct Sprite *sprite) +{ + sprite->data0 = 25; + sprite->data2 = sub_8077ABC(sprite->data6, 2); + sprite->data4 = sub_8077ABC(sprite->data6, 3) + 24; + sprite->data5 = -30; + sprite->oam.affineParam = sprite->data6; + sub_80786EC(sprite); + sprite->callback = sub_80470C4; +} + +#define HIBYTE(x) (((x) >> 8) & 0xFF) + +static void sub_80470C4(struct Sprite *sprite) +{ + u32 r6; + u32 r7; + + if (HIBYTE(sprite->data7) >= 35 && HIBYTE(sprite->data7) < 80) + { + s16 r4; + + if ((sprite->oam.affineParam & 0xFF00) == 0) + { + r6 = sprite->data1 & 1; + r7 = sprite->data2 & 1; + sprite->data1 = ((sprite->data1 / 3) & ~1) | r6; + sprite->data2 = ((sprite->data2 / 3) & ~1) | r7; + StartSpriteAffineAnim(sprite, 4); + } + r4 = sprite->data0; + sub_8078B5C(sprite); + sprite->data7 += sprite->data6 / 3; + sprite->pos2.y += Sin(HIBYTE(sprite->data7), sprite->data5); + sprite->oam.affineParam += 0x100; + if ((sprite->oam.affineParam >> 8) % 3 != 0) + sprite->data0 = r4; + else + sprite->data0 = r4 - 1; + if (HIBYTE(sprite->data7) >= 80) + { + r6 = sprite->data1 & 1; + r7 = sprite->data2 & 1; + sprite->data1 = ((sprite->data1 * 3) & ~1) | r6; + sprite->data2 = ((sprite->data2 * 3) & ~1) | r7; + } + } + else + { + if (sub_8078718(sprite)) + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data6 = sprite->oam.affineParam & 0xFF; + sprite->data0 = 0; + if (IsDoubleBattle() && ewram17840.unk9_0 + && sprite->data6 == GetBankByPlayerAI(2)) + sprite->callback = sub_8047230; + else + sprite->callback = sub_8046C78; + StartSpriteAffineAnim(sprite, 0); + } + } +} + +static void sub_8047230(struct Sprite *sprite) +{ + if (sprite->data0++ > 24) + { + sprite->data0 = 0; + sprite->callback = sub_8046C78; + } +} + +static void sub_8047254(struct Sprite *sprite) +{ + sprite->data0++; + if (sprite->data0 > 15) + { + sprite->data0 = 0; + if (IsDoubleBattle() && ewram17840.unk9_0 + && sprite->data6 == GetBankByPlayerAI(3)) + sprite->callback = sub_8047230; + else + sprite->callback = sub_8046C78; + } +} + +static u8 sub_80472B0(u8 a, u8 b, u8 c, u8 d) +{ + return sub_814086C(a, b, c, d, 0); +} + +static u8 sub_80472D8(u8 a, u8 b, u32 c) +{ + return sub_8141314(a, b, c, 0); +} + +void CreatePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 e, u8 f, u8 g, u32 h) +{ + u8 spriteId; + + LoadCompressedObjectPic(&sBallSpriteSheets[0]); + LoadCompressedObjectPalette(&sBallSpritePalettes[0]); + spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, f); + gSprites[spriteId].data0 = a; + gSprites[spriteId].data5 = gSprites[a].pos1.x; + gSprites[spriteId].data6 = gSprites[a].pos1.y; + gSprites[a].pos1.x = x; + gSprites[a].pos1.y = y; + gSprites[spriteId].data1 = g; + gSprites[spriteId].data2 = b; + gSprites[spriteId].data3 = h; + gSprites[spriteId].data4 = h >> 16; + gSprites[spriteId].oam.priority = e; + gSprites[spriteId].callback = sub_80473D0; + gSprites[a].invisible = TRUE; +} + +static void sub_80473D0(struct Sprite *sprite) +{ + if (sprite->data1 == 0) + { + u8 r5; + u8 r7 = sprite->data0; + u8 r8 = sprite->data2; + u32 r4 = (u16)sprite->data3 | ((u16)sprite->data4 << 16); + + if (sprite->subpriority != 0) + r5 = sprite->subpriority - 1; + else + r5 = 0; + StartSpriteAnim(sprite, 1); + sub_80472B0(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5); + sprite->data1 = sub_80472D8(1, r8, r4); + sprite->callback = sub_804748C; + gSprites[r7].invisible = FALSE; + StartSpriteAffineAnim(&gSprites[r7], 1); + AnimateSprite(&gSprites[r7]); + gSprites[r7].data1 = 0x1000; + sprite->data7 = 0; + } + else + { + sprite->data1--; + } +} + +static void sub_804748C(struct Sprite *sprite) +{ + bool8 r12 = FALSE; + bool8 r6 = FALSE; + u8 r3 = sprite->data0; + u16 var1; + u16 var2; + + if (sprite->animEnded) + sprite->invisible = TRUE; + if (gSprites[r3].affineAnimEnded) + { + StartSpriteAffineAnim(&gSprites[r3], 0); + r12 = TRUE; + } + var1 = (sprite->data5 - sprite->pos1.x) * sprite->data7 / 128 + sprite->pos1.x; + var2 = (sprite->data6 - sprite->pos1.y) * sprite->data7 / 128 + sprite->pos1.y; + gSprites[r3].pos1.x = var1; + gSprites[r3].pos1.y = var2; + if (sprite->data7 < 128) + { + s16 sine = -(gSineTable[(u8)sprite->data7] / 8); + + sprite->data7 += 4; + gSprites[r3].pos2.x = sine; + gSprites[r3].pos2.y = sine; + } + else + { + gSprites[r3].pos1.x = sprite->data5; + gSprites[r3].pos1.y = sprite->data6; + gSprites[r3].pos2.x = 0; + gSprites[r3].pos2.y = 0; + r6 = TRUE; + } + if (sprite->animEnded && r12 && r6) + DestroySpriteAndFreeResources(sprite); +} + +u8 sub_8047580(u8 a, u8 b, u8 x, u8 y, u8 e, u8 f, u8 g, u32 h) +{ + u8 spriteId; + + LoadCompressedObjectPic(&sBallSpriteSheets[0]); + LoadCompressedObjectPalette(&sBallSpritePalettes[0]); + spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, f); + gSprites[spriteId].data0 = a; + gSprites[spriteId].data1 = g; + gSprites[spriteId].data2 = b; + gSprites[spriteId].data3 = h; + gSprites[spriteId].data4 = h >> 16; + gSprites[spriteId].oam.priority = e; + gSprites[spriteId].callback = sub_8047638; + return spriteId; +} + +static void sub_8047638(struct Sprite *sprite) +{ + if (sprite->data1 == 0) + { + u8 r6; + u8 r7 = sprite->data0; + u8 r8 = sprite->data2; + u32 r5 = (u16)sprite->data3 | ((u16)sprite->data4 << 16); + + if (sprite->subpriority != 0) + r6 = sprite->subpriority - 1; + else + r6 = 0; + StartSpriteAnim(sprite, 1); + sub_80472B0(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r6); + sprite->data1 = sub_80472D8(1, r8, r5); + sprite->callback = sub_80476E0; + StartSpriteAffineAnim(&gSprites[r7], 2); + AnimateSprite(&gSprites[r7]); + gSprites[r7].data1 = 0; + } + else + { + sprite->data1--; + } +} + +static void sub_80476E0(struct Sprite *sprite) +{ + u8 r1; + + sprite->data5++; + if (sprite->data5 == 11) + PlaySE(SE_SUIKOMU); + r1 = sprite->data0; + if (gSprites[r1].affineAnimEnded) + { + StartSpriteAnim(sprite, 2); + gSprites[r1].invisible = TRUE; + sprite->data5 = 0; + sprite->callback = sub_8047754; + } + else + { + gSprites[r1].data1 += 96; + gSprites[r1].pos2.y = -gSprites[r1].data1 >> 8; + } +} + +static void sub_8047754(struct Sprite *sprite) +{ + if (sprite->animEnded) + sprite->callback = SpriteCallbackDummy; +} + +void obj_delete_and_free_associated_resources_(struct Sprite *sprite) +{ + DestroySpriteAndFreeResources(sprite); +} + +void sub_804777C(u8 a) +{ + struct Sprite *sprite = &gSprites[gHealthboxIDs[a]]; + + sprite->data0 = 5; + sprite->data1 = 0; + sprite->pos2.x = 0x73; + sprite->pos2.y = 0; + sprite->callback = sub_8047830; + if (GetBankSide(a) != 0) + { + sprite->data0 = -sprite->data0; + sprite->data1 = -sprite->data1; + sprite->pos2.x = -sprite->pos2.x; + sprite->pos2.y = -sprite->pos2.y; + } + gSprites[sprite->data5].callback(&gSprites[sprite->data5]); + if (GetBankIdentity(a) == 2) + sprite->callback = sub_804780C; +} + +static void sub_804780C(struct Sprite *sprite) +{ + sprite->data1++; + if (sprite->data1 == 20) + { + sprite->data1 = 0; + sprite->callback = sub_8047830; + } +} + +static void sub_8047830(struct Sprite *sprite) +{ + sprite->pos2.x -= sprite->data0; + sprite->pos2.y -= sprite->data1; + if (sprite->pos2.x == 0 && sprite->pos2.y == 0) + sprite->callback = SpriteCallbackDummy; +} + +void sub_8047858(u8 a) +{ + u8 spriteId; + + spriteId = CreateInvisibleSpriteWithCallback(oamc_804BEB4); + gSprites[spriteId].data0 = 1; + gSprites[spriteId].data1 = gHealthboxIDs[a]; + gSprites[spriteId].callback = oamc_804BEB4; +} + +static void oamc_804BEB4(struct Sprite *sprite) +{ + u8 r1 = sprite->data1; + + gSprites[r1].pos2.y = sprite->data0; + sprite->data0 = -sprite->data0; + sprite->data2++; + if (sprite->data2 == 21) + { + gSprites[r1].pos2.x = 0; + gSprites[r1].pos2.y = 0; + DestroySprite(sprite); + } +} + +void sub_80478DC(u8 a) +{ + u16 var; + + if (GetSpriteTileStartByTag(sBallSpriteSheets[a].tag) == 0xFFFF) + { + LoadCompressedObjectPic(&sBallSpriteSheets[a]); + LoadCompressedObjectPalette(&sBallSpritePalettes[a]); + } + switch (a) + { + case 6: + case 10: + case 11: + break; + default: + var = GetSpriteTileStartByTag(sBallSpriteSheets[a].tag); + LZDecompressVram(gUnknown_08D030D0, (void *)(VRAM + 0x10100 + var * 32)); + break; + } +} + +void sub_804794C(u8 a) +{ + FreeSpriteTilesByTag(sBallSpriteSheets[a].tag); + FreeSpritePaletteByTag(sBallSpritePalettes[a].tag); +} + +static u16 sub_8047978(u8 a) +{ + if (GetBankSide(a) == 0) + return GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_POKEBALL); + else + return GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_POKEBALL); +} diff --git a/src/battle/post_battle_event_funcs.c b/src/battle/post_battle_event_funcs.c new file mode 100644 index 000000000..8d85705c8 --- /dev/null +++ b/src/battle/post_battle_event_funcs.c @@ -0,0 +1,69 @@ +#include "global.h" +#include "event_data.h" +#include "hall_of_fame.h" +#include "load_save.h" +#include "main.h" +#include "pokemon.h" +#include "rom4.h" +#include "script_pokemon_80C4.h" + +extern u8 gUnknown_02039324; + +int GameClear(void) +{ + int i; + bool32 ribbonGet; + + HealPlayerParty(); + + if (FlagGet(SYS_GAME_CLEAR) == TRUE) + { + gUnknown_02039324 = 1; + } + else + { + gUnknown_02039324 = 0; + FlagSet(SYS_GAME_CLEAR); + } + + if (!GetGameStat(1)) + SetGameStat(1, (gSaveBlock2.playTimeHours << 16) | (gSaveBlock2.playTimeMinutes << 8) | gSaveBlock2.playTimeSeconds); + + SetSecretBase2Field_9(); + + if (gSaveBlock2.playerGender == MALE) + sub_80537CC(1); + else + sub_80537CC(2); + + ribbonGet = FALSE; + + for (i = 0; i < 6; i++) + { + u8 val; + u8 *ptr = &val; + if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_BIT2) + && !GetMonData(&gPlayerParty[i], MON_DATA_SANITY_BIT3) + && !GetMonData(&gPlayerParty[i], MON_DATA_CHAMPION_RIBBON)) + { + *ptr = 1; + SetMonData(&gPlayerParty[i], MON_DATA_CHAMPION_RIBBON, ptr); + ribbonGet = TRUE; + } + } + + if (ribbonGet == TRUE) + { + IncrementGameStat(42); + FlagSet(SYS_RIBBON_GET); + } + + SetMainCallback2(sub_8141F90); + return 0; +} + +int sp0C8_whiteout_maybe(void) +{ + SetMainCallback2(CB2_WhiteOut); + return 0; +} diff --git a/src/battle/smokescreen.c b/src/battle/smokescreen.c new file mode 100644 index 000000000..8345cb6ad --- /dev/null +++ b/src/battle/smokescreen.c @@ -0,0 +1,73 @@ +#include "global.h" +#include "data2.h" +#include "decompress.h" +#include "sprite.h" +#include "util.h" + + +static void sub_8046388(struct Sprite *); + + +u8 sub_8046234(s16 x, s16 y, u8 a3) +{ + u8 mainSpriteId; + u8 spriteId1, spriteId2, spriteId3, spriteId4; + struct Sprite *mainSprite; + + if (GetSpriteTileStartByTag(gUnknown_081FAEA4.tag) == 0xFFFF) + { + LoadCompressedObjectPic(&gUnknown_081FAEA4); + LoadCompressedObjectPalette(&gUnknown_081FAEAC); + } + + mainSpriteId = CreateInvisibleSpriteWithCallback(sub_8046388); + mainSprite = &gSprites[mainSpriteId]; + mainSprite->data1 = a3; + + spriteId1 = CreateSprite(&gSpriteTemplate_81FAF0C, x - 16, y - 16, 2); + gSprites[spriteId1].data0 = mainSpriteId; + mainSprite->data0++; + AnimateSprite(&gSprites[spriteId1]); + + spriteId2 = CreateSprite(&gSpriteTemplate_81FAF0C, x, y - 16, 2); + gSprites[spriteId2].data0 = mainSpriteId; + mainSprite->data0++; + StartSpriteAnim(&gSprites[spriteId2], 1); + AnimateSprite(&gSprites[spriteId2]); + + spriteId3 = CreateSprite(&gSpriteTemplate_81FAF0C, x - 16, y, 2); + gSprites[spriteId3].data0 = mainSpriteId; + mainSprite->data0++; + StartSpriteAnim(&gSprites[spriteId3], 2); + AnimateSprite(&gSprites[spriteId3]); + + spriteId4 = CreateSprite(&gSpriteTemplate_81FAF0C, x, y, 2); + gSprites[spriteId4].data0 = mainSpriteId; + mainSprite->data0++; + StartSpriteAnim(&gSprites[spriteId4], 3); + AnimateSprite(&gSprites[spriteId4]); + + return mainSpriteId; +} + +static void sub_8046388(struct Sprite *sprite) +{ + if (!sprite->data0) + { + FreeSpriteTilesByTag(gUnknown_081FAEA4.tag); + FreeSpritePaletteByTag(gUnknown_081FAEAC.tag); + if (!sprite->data1) + DestroySprite(sprite); + else + sprite->callback = SpriteCallbackDummy; + } +} + +void sub_80463CC(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + gSprites[sprite->data0].data0--; + DestroySprite(sprite); + } +} diff --git a/src/battle_10.c b/src/battle_10.c deleted file mode 100644 index 0237bab4b..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 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 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); - - 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 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); - 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 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].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 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].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 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].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; - 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 deleted file mode 100644 index 7772444d7..000000000 --- a/src/battle_2.c +++ /dev/null @@ -1,2441 +0,0 @@ -#include "global.h" -#include "abilities.h" -#include "battle.h" -#include "battle_interface.h" -#include "battle_setup.h" -#include "data2.h" -#include "item.h" -#include "link.h" -#include "main.h" -#include "name_string_util.h" -#include "palette.h" -#include "party_menu.h" -#include "pokeball.h" -#include "pokedex.h" -#include "pokemon.h" -#include "rng.h" -#include "rom3.h" -#include "rom_8077ABC.h" -#include "rom_8094928.h" -#include "songs.h" -#include "sound.h" -#include "species.h" -#include "sprite.h" -#include "task.h" -#include "text.h" -#include "trig.h" -#include "unknown_task.h" -#include "util.h" -#include "items.h" -#include "hold_effects.h" -#include "battle_move_effects.h" - -struct UnknownStruct6 -{ - u16 unk0[0xA0]; - u8 fillerA0[0x640]; - u16 unk780[0xA0]; -}; - -struct UnknownStruct7 -{ - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; -}; - -struct UnknownStruct8 -{ - u8 unk0[7]; - u8 unk7; - u8 unk8[18]; - u8 unk1A; -}; - -struct UnknownPokemonStruct2 -{ - /*0x00*/ u16 species; - /*0x02*/ u16 heldItem; - /*0x04*/ u8 nickname[11]; - /*0x0F*/ u8 level; - /*0x10*/ u16 hp; - /*0x12*/ u16 maxhp; - /*0x14*/ u32 status; - /*0x18*/ u32 personality; - /*0x1C*/ u8 gender; - /*0x1D*/ u8 language; -}; - -struct UnknownStruct12 -{ - u32 unk0; - u8 filler4[0x54]; -}; - -extern const u16 gUnknown_08D004E0[]; -extern const struct MonCoords gCastformFrontSpriteCoords[]; - -extern u8 ewram[]; -#define ewram0 (*(struct UnknownStruct7 *)(ewram + 0x0)) -#define ewram4 (*(struct UnknownStruct8 *)(ewram + 0x4)) -#define ewram16000 (ewram[0x16000]) -#define ewram16001 (ewram[0x16001]) -#define ewram16002 (ewram[0x16002]) -#define ewram16003 (ewram[0x16003]) -#define ewram1600C (ewram[0x1600C]) -#define ewram1600E (ewram[0x1600E]) -#define ewram1601B (ewram[0x1601B]) -#define ewram16020 ((u8 *)(ewram + 0x16020)) -#define ewram16056 (ewram[0x16056]) -#define ewram16058 (ewram[0x16058]) -#define ewram16059 (ewram[0x16059]) -#define ewram16078 (ewram[0x16078]) -#define ewram16084 (ewram[0x16084]) -#define ewram16086 (ewram[0x16086]) -#define ewram16087 (ewram[0x16087]) -#define ewram16088 (ewram[0x16088]) -#define ewram16089 (ewram[0x16089]) -#define ewram160A1 (ewram[0x160A1]) -#define ewram160A6 (ewram[0x160A6]) -#define ewram160AC ((u8 *)(ewram + 0x160AC)) -#define ewram160BC ((u16 *)(ewram + 0x160BC)) // hp -#define ewram160C8 (ewram[0x160C8]) -#define ewram160C9 (ewram[0x160C9]) -#define ewram160CB (ewram[0x160CB]) -#define ewram160CC ((u8 *)(ewram + 0x160CC)) -#define ewram160E6 (ewram[0x160E6]) -#define ewram160E8 ((u8 *)(ewram + 0x160E8)) -#define ewram160F0 ((u8 *)(ewram + 0x160F0)) -#define ewram160F9 (ewram[0x160F9]) -#define ewram16100 ((u8 *)(ewram + 0x16100)) -#define ewram16108 ((u8 *)(ewram + 0x16108)) -#define ewram16110 (ewram[0x16110]) -#define ewram16111 (ewram[0x16111]) -#define ewram16113 (ewram[0x16113]) -#define ewram17100 ((u32 *)(ewram + 0x17100)) -#define ewram17130 (ewram[0x17130]) -#define ewram17160 (ewram[0x17160]) -#define ewram1D000 ((struct Pokemon *)(ewram + 0x1D000)) - -extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; -extern u8 gBattleBufferB[][0x200]; -extern u8 gActiveBank; -extern u32 gBattleExecBuffer; -extern u8 gNoOfAllBanks; -extern u16 gBattlePartyID[]; -extern u8 gFightStateTracker; -extern u8 gTurnOrder[]; -extern struct UnknownStruct12 gUnknown_02024AD0[]; -extern u8 gObjectBankIDs[]; -extern u16 gCurrentMove; -extern u8 gLastUsedAbility; -extern u8 gStringBank; -extern u8 gAbsentBankFlags; -extern u8 gMultiHitCounter; -extern u8 gActionForBanks[]; -extern u16 gUnknown_02024C2C[]; -extern u16 gLastUsedMove[]; -extern u16 gMoveHitWith[]; -extern u16 gUnknown_02024C44[]; -extern u16 gUnknown_02024C4C[]; -extern u16 gLockedMove[]; -extern u8 gUnknown_02024C5C[]; -extern u16 gChosenMovesByBanks[]; -extern u32 gHitMarker; -extern u8 gUnknown_02024C70[]; -extern u16 gSideAffecting[]; -extern u32 gStatuses3[]; -//extern u8 gDisableStructs[][0x1C]; -extern u16 gPauseCounterBattle; -extern u16 gPaydayMoney; -extern u16 gRandomTurnNumber; -extern u8 gBattleCommunication[]; -extern u8 gUnknown_02024D1F[]; // I don't actually know what type this is. -extern u8 gBattleOutcome; -extern u16 gUnknown_02024DE8; -extern u8 gActionSelectionCursor[]; -extern u8 gMoveSelectionCursor[]; -extern u8 gUnknown_02038470[]; -extern u16 gUnknown_030041B0; -extern u16 gUnknown_030041B4; -extern u16 gUnknown_030041B8; -extern struct Window gUnknown_030041D0; -extern u16 gUnknown_03004200; -extern struct Window gUnknown_03004210; -extern u16 gUnknown_03004244; -extern struct Window gUnknown_03004250; -extern u16 gUnknown_03004240; -extern u16 gUnknown_03004280; -extern u32 gUnknown_03004284; -extern u16 gUnknown_03004288; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; -extern u16 gUnknown_030042C0; -extern u16 gUnknown_030042C4; -extern MainCallback gPreBattleCallback1; -extern void (*gBattleMainFunc)(void); -extern u8 gLeveledUpInBattle; -extern void (*gBattleBankFunc[])(void); -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 u8 gReservedSpritePaletteCount; -extern u16 gTrainerBattleOpponent; -extern struct BattleEnigmaBerry gEnigmaBerries[]; -extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2]; -extern u8 gBattleMonForms[]; -extern u8 gBankAttacker; -extern u8 gBankTarget; -extern u16 gBattleWeather; -extern u32 gBattleMoveDamage; -extern struct BattlePokemon gBattleMons[]; -extern u8 gBattleMoveFlags; - -static void BattlePrepIntroSlide(void); - -void sub_800E7C4(void) -{ - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - sub_800B858(); - SetMainCallback2(sub_800F104); - gBattleCommunication[0] = 0; - } - else - { - InitBattle(); - } -} - -void InitBattle(void) -{ - s32 i; - - SetHBlankCallback(NULL); - SetVBlankCallback(NULL); - - CpuFill32(0, (void *)VRAM, VRAM_SIZE); - - REG_MOSAIC = 0; - REG_WIN0H = 0xF0; - REG_WIN0V = 0x5051; - REG_WININ = 0; - REG_WINOUT = 0; - gUnknown_030042C4 = 0xF0; - gUnknown_03004240 = 0x5051; - dp12_8087EA4(); - - for (i = 0; i < 80; i++) - { - gUnknown_03004DE0.unk0[i] = 0xF0; - gUnknown_03004DE0.unk780[i] = 0xF0; - } - for (i = 80; i < 160; i++) - { - asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter - gUnknown_03004DE0.unk0[i] = 0xFF10; - gUnknown_03004DE0.unk780[i] = 0xFF10; - } - sub_80895F8(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8); - SetUpWindowConfig(&gWindowConfig_81E6C58); - ResetPaletteFade(); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; - gUnknown_030042C0 = 0; - gUnknown_030041B4 = 0; - gUnknown_03004288 = 0; - gUnknown_03004280 = 0; - gUnknown_030041B0 = 0; - gUnknown_030041B8 = 0; - gBattleTerrain = GetBattleTerrain(); - InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); - InitWindowFromConfig(&gUnknown_030041D0, &gWindowConfig_81E71D0); - InitWindowFromConfig(&gUnknown_03004250, &gWindowConfig_81E71EC); - sub_800D6D4(); - sub_800DAB8(); - ResetSpriteData(); - ResetTasks(); - sub_800E23C(); - FreeAllSpritePalettes(); - gReservedSpritePaletteCount = 4; - SetVBlankCallback(sub_800FCFC); - setup_poochyena_battle(); - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - SetMainCallback2(sub_800F298); - else - SetMainCallback2(sub_800EC9C); - if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) - { - CreateNPCTrainerParty(gEnemyParty, gTrainerBattleOpponent); - SetWildMonHeldItem(); - } - gMain.inBattle = TRUE; - for (i = 0; i < 6; i++) - AdjustFriendship(&gPlayerParty[i], 3); - gBattleCommunication[0] = 0; -} - -void sub_800E9EC(void) -{ - u16 r6 = 0; - u16 species; - u16 hp; - u32 status; - s32 i; - - for (i = 0; i < 6; i++) - { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); - status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); - - if (species == 0) - continue; - if (species != SPECIES_EGG && hp != 0 && status == 0) - r6 |= 1 << i * 2; - - if (species == 0) - continue; - if (hp != 0 && (species == SPECIES_EGG || status != 0)) - r6 |= 2 << i * 2; - - if (species == 0) - continue; - if (species != SPECIES_EGG && hp == 0) - r6 |= 3 << i * 2; - } - ewram0.unk2 = r6; - ewram0.unk3 = r6 >> 8; -} - -void sub_800EAAC(void) -{ - s32 i; - struct UnknownStruct8 *_ewram4 = &ewram4; - - for (i = 0; i < 7; i++) - _ewram4->unk0[i] = gSaveBlock1.enigmaBerry.berry.name[i]; - for (i = 0; i < 18; i++) - _ewram4->unk8[i] = gSaveBlock1.enigmaBerry.itemEffect[i]; - _ewram4->unk7 = gSaveBlock1.enigmaBerry.holdEffect; - _ewram4->unk1A = gSaveBlock1.enigmaBerry.holdEffectParam; -} - -void sub_800EB08(void) -{ - s32 i; - s32 j; - - if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) - { - for (i = 0; i < 7; i++) - { - gEnigmaBerries[0].name[i] = gSaveBlock1.enigmaBerry.berry.name[i]; - gEnigmaBerries[2].name[i] = gSaveBlock1.enigmaBerry.berry.name[i]; - } - for (i = 0; i < 18; i++) - { - gEnigmaBerries[0].itemEffect[i] = gSaveBlock1.enigmaBerry.itemEffect[i]; - gEnigmaBerries[2].itemEffect[i] = gSaveBlock1.enigmaBerry.itemEffect[i]; - } - gEnigmaBerries[0].holdEffect = gSaveBlock1.enigmaBerry.holdEffect; - gEnigmaBerries[2].holdEffect = gSaveBlock1.enigmaBerry.holdEffect; - gEnigmaBerries[0].holdEffectParam = gSaveBlock1.enigmaBerry.holdEffectParam; - gEnigmaBerries[2].holdEffectParam = gSaveBlock1.enigmaBerry.holdEffectParam; - } - else - { - s32 numPlayers; - struct BattleEnigmaBerry *src; - u8 r4; - - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - numPlayers = 4; - else - numPlayers = 2; - for (i = 0; i < numPlayers; i++) - { - src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2); - r4 = gLinkPlayers[i].lp_field_18; - - for (j = 0; j < 7; j++) - gEnigmaBerries[r4].name[j] = src->name[j]; - for (j = 0; j < 18; j++) - gEnigmaBerries[r4].itemEffect[j] = src->itemEffect[j]; - gEnigmaBerries[r4].holdEffect = src->holdEffect; - gEnigmaBerries[r4].holdEffectParam = src->holdEffectParam; - } - } -} - -void shedinja_something(struct Pokemon *pkmn) -{ - u8 nickname[POKEMON_NAME_LENGTH + 1]; - u8 language = 1; - - if (GetMonData(pkmn, MON_DATA_SPECIES) == SPECIES_SHEDINJA - && GetMonData(pkmn, MON_DATA_LANGUAGE) != language) - { - GetMonData(pkmn, MON_DATA_NICKNAME, nickname); - if (StringCompareWithoutExtCtrlCodes(nickname, gUnknown_081F96C8) == 0) - SetMonData(pkmn, MON_DATA_LANGUAGE, &language); - } -} - -void sub_800EC9C(void) -{ - u8 playerId; - u8 enemyId; - - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - playerId = GetMultiplayerId(); - ewram160CB = playerId; - enemyId = playerId ^ 1; - - switch (gBattleCommunication[0]) - { - case 0: - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) - { - ewram0.unk0 = 1; - ewram0.unk1 = 1; - sub_800E9EC(); - sub_800EAAC(); - SendBlock(bitmask_all_link_players_but_self(), &ewram0, 32); - gBattleCommunication[0] = 1; - } - } - else - { - gBattleTypeFlags |= BATTLE_TYPE_WILD; - gBattleCommunication[0] = 8; - sub_800EB08(); - } - break; - case 1: - if ((GetBlockReceivedStatus() & 3) == 3) - { - s32 id; - u8 taskId; - - ResetBlockReceivedFlags(); - id = 0; - if (gBlockRecvBuffer[0][0] == 0x100) - { - if (playerId == 0) - gBattleTypeFlags |= 12; - else - gBattleTypeFlags |= 8; - id++; - } - if (id == 0) - { - if (gBlockRecvBuffer[0][0] == gBlockRecvBuffer[1][0]) - { - if (playerId == 0) - gBattleTypeFlags |= 12; - else - gBattleTypeFlags |= 8; - id++; - } - if (id == 0) - { - while (id < 2) - { - if (gBlockRecvBuffer[id][0] > 0x0101 && id != playerId) - break; - id++; - } - if (id == 2) - gBattleTypeFlags |= 12; - else - gBattleTypeFlags |= 8; - } - } - sub_800EB08(); - taskId = CreateTask(sub_800DE30, 0); - gTasks[taskId].data[1] = 0x10E; - gTasks[taskId].data[2] = 0x5A; - gTasks[taskId].data[5] = 0; - gTasks[taskId].data[3] = ewram0.unk2 | (ewram0.unk3 << 8); - gTasks[taskId].data[4] = gBlockRecvBuffer[enemyId][1]; - gBattleCommunication[0]++; - } - break; - case 2: - if (sub_8007ECC()) - { - SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(*gPlayerParty) * 2); - gBattleCommunication[0]++; - } - break; - case 3: - if ((GetBlockReceivedStatus() & 3) == 3) - { - ResetBlockReceivedFlags(); - memcpy(gEnemyParty, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2); - gBattleCommunication[0]++; - } - break; - case 4: - if (sub_8007ECC()) - { - SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(*gPlayerParty) * 2); - gBattleCommunication[0]++; - } - break; - case 5: - if ((GetBlockReceivedStatus() & 3) == 3) - { - ResetBlockReceivedFlags(); - memcpy(gEnemyParty + 2, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2); - gBattleCommunication[0]++; - } - break; - case 6: - if (sub_8007ECC()) - { - SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(*gPlayerParty) * 2); - gBattleCommunication[0]++; - } - break; - case 7: - if ((GetBlockReceivedStatus() & 3) == 3) - { - ResetBlockReceivedFlags(); - memcpy(gEnemyParty + 4, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2); - shedinja_something(&gEnemyParty[0]); - shedinja_something(&gEnemyParty[1]); - shedinja_something(&gEnemyParty[2]); - shedinja_something(&gEnemyParty[3]); - shedinja_something(&gEnemyParty[4]); - shedinja_something(&gEnemyParty[5]); - gBattleCommunication[0]++; - } - break; - case 8: - sub_800B950(); - gBattleCommunication[0]++; - gBattleCommunication[1] = 0; - gBattleCommunication[2] = 0; - break; - case 9: - if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0) - { - gPreBattleCallback1 = gMain.callback1; - gMain.callback1 = sub_8010824; - SetMainCallback2(sub_800F808); - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - gTrainerBattleOpponent = 0x800; - gBattleTypeFlags |= BATTLE_TYPE_20; - } - } - break; - } -} - -void sub_800F02C(void) -{ - s32 i; - - for (i = 0; i < 3; i++) - { - u8 *nickname = gUnknown_02023A00[i].nickname; - - gUnknown_02023A00[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES); - gUnknown_02023A00[i].heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nickname); - gUnknown_02023A00[i].level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); - gUnknown_02023A00[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); - gUnknown_02023A00[i].maxhp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); - gUnknown_02023A00[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); - gUnknown_02023A00[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); - gUnknown_02023A00[i].gender = GetMonGender(&gPlayerParty[i]); - StripExtCtrlCodes(nickname); - gUnknown_02023A00[i].language = GetMonData(&gPlayerParty[i], MON_DATA_LANGUAGE); - if (gUnknown_02023A00[i].language != 1) - PadNameString(nickname, 0); - } - memcpy(ewram, gUnknown_02023A00, 0x60); -} - -void sub_800F104(void) -{ - u8 playerId; - MainCallback *pSavedCallback; - u16 *pSavedBattleTypeFlags; - - playerId = GetMultiplayerId(); - ewram160CB = playerId; - // Seriously, Game Freak? - pSavedCallback = (MainCallback *)(ewram + 0x160C4); - pSavedBattleTypeFlags = (u16 *)(ewram + 0x160C2); - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - - switch (gBattleCommunication[0]) - { - case 0: - if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) - { - sub_800F02C(); - SendBlock(bitmask_all_link_players_but_self(), ewram, 0x60); - gBattleCommunication[0]++; - } - break; - case 1: - if ((GetBlockReceivedStatus() & 0xF) == 0xF) - { - s32 i; - - ResetBlockReceivedFlags(); - for (i = 0; i < 4; i++) - { - if (i != playerId) - { - if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) - || ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) - memcpy(gUnknown_02023A00, gBlockRecvBuffer[i], 0x60); - } - } - gBattleCommunication[0]++; - *pSavedCallback = gMain.savedCallback; - *pSavedBattleTypeFlags = gBattleTypeFlags; - gMain.savedCallback = sub_800F104; - OpenPartyMenu(5, 0); - } - break; - case 2: - if (!gPaletteFade.active) - { - gBattleCommunication[0] = 3; - sub_800832C(); - } - break; - case 3: - if (gReceivedRemoteLinkPlayers == 0) - { - gBattleTypeFlags = *pSavedBattleTypeFlags; - gMain.savedCallback = *pSavedCallback; - SetMainCallback2(InitBattle); - } - break; - } -} - -void sub_800F298(void) -{ - u8 playerId; - s32 id; - - playerId = GetMultiplayerId(); - ewram160CB = playerId; - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - switch (gBattleCommunication[0]) - { - case 0: - if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) - { - ewram0.unk0 = 1; - ewram0.unk1 = 1; - sub_800E9EC(); - sub_800EAAC(); - SendBlock(bitmask_all_link_players_but_self(), ewram, 0x20); - gBattleCommunication[0]++; - } - break; - case 1: - if ((GetBlockReceivedStatus() & 0xF) == 0xF) - { - u8 taskId; - - ResetBlockReceivedFlags(); - id = 0; - if (gBlockRecvBuffer[0][0] == 0x100) - { - if (playerId == 0) - gBattleTypeFlags |= 12; - else - gBattleTypeFlags |= 8; - id++; - } - if (id == 0) - { - s32 i; - - for (i = 0; i < MAX_LINK_PLAYERS; i++) - { - if (gBlockRecvBuffer[0][0] != gBlockRecvBuffer[i][0]) - break; - } - if (i == MAX_LINK_PLAYERS) - { - if (playerId == 0) - gBattleTypeFlags |= 12; - else - gBattleTypeFlags |= 8; - id++; - } - if (id == 0) - { - while (id < MAX_LINK_PLAYERS) - { - if (gBlockRecvBuffer[id][0] == 0x0101 && id != playerId) - if (id < playerId) - break; - if (gBlockRecvBuffer[id][0] > 0x0101 && id != playerId) - break; - id++; - } - if (id == MAX_LINK_PLAYERS) - gBattleTypeFlags |= 12; - else - gBattleTypeFlags |= 8; - } - } - sub_800EB08(); - memcpy(ewram1D000, gPlayerParty, sizeof(struct Pokemon) * 3); - taskId = CreateTask(sub_800DE30, 0); - gTasks[taskId].data[1] = 0x10E; - gTasks[taskId].data[2] = 0x5A; - gTasks[taskId].data[5] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; - for (id = 0; id < MAX_LINK_PLAYERS; id++) - { - switch (gLinkPlayers[id].lp_field_18) - { - case 0: - gTasks[taskId].data[3] |= gBlockRecvBuffer[id][1] & 0x3F; - break; - case 1: - gTasks[taskId].data[4] |= gBlockRecvBuffer[id][1] & 0x3F; - break; - case 2: - gTasks[taskId].data[3] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6; - break; - case 3: - gTasks[taskId].data[4] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6; - break; - } - } - ZeroPlayerPartyMons(); - ZeroEnemyPartyMons(); - gBattleCommunication[0]++; - goto step_2; - } - break; - case 2: - step_2: - if (sub_8007ECC()) - { - SendBlock(bitmask_all_link_players_but_self(), ewram1D000, sizeof(struct Pokemon) * 2); - gBattleCommunication[0]++; - } - break; - case 3: - if ((GetBlockReceivedStatus() & 0xF) == 0xF) - { - ResetBlockReceivedFlags(); - for (id = 0; id < MAX_LINK_PLAYERS; id++) - { - if (id == playerId) - { - switch (gLinkPlayers[id].lp_field_18) - { - case 0: - case 3: - memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); - break; - case 1: - case 2: - memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); - break; - } - } - else - { - if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) - || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) - { - switch (gLinkPlayers[id].lp_field_18) - { - case 0: - case 3: - memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); - break; - case 1: - case 2: - memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); - break; - } - } - else - { - switch (gLinkPlayers[id].lp_field_18) - { - case 0: - case 3: - memcpy(gEnemyParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); - break; - case 1: - case 2: - memcpy(gEnemyParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); - break; - } - } - } - } - gBattleCommunication[0]++; - } - break; - case 4: - if (sub_8007ECC()) - { - SendBlock(bitmask_all_link_players_but_self(), ewram1D000 + 2, sizeof(struct Pokemon)); - gBattleCommunication[0]++; - } - break; - case 5: - if ((GetBlockReceivedStatus() & 0xF) == 0xF) - { - ResetBlockReceivedFlags(); - for (id = 0; id < MAX_LINK_PLAYERS; id++) - { - if (id == playerId) - { - switch (gLinkPlayers[id].lp_field_18) - { - case 0: - case 3: - memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); - break; - case 1: - case 2: - memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); - break; - } - } - else - { - if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) - || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) - { - switch (gLinkPlayers[id].lp_field_18) - { - case 0: - case 3: - memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); - break; - case 1: - case 2: - memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); - break; - } - } - else - { - switch (gLinkPlayers[id].lp_field_18) - { - case 0: - case 3: - memcpy(gEnemyParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); - break; - case 1: - case 2: - memcpy(gEnemyParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); - break; - } - } - } - } - - shedinja_something(&gPlayerParty[0]); - shedinja_something(&gPlayerParty[1]); - shedinja_something(&gPlayerParty[2]); - shedinja_something(&gPlayerParty[3]); - shedinja_something(&gPlayerParty[4]); - shedinja_something(&gPlayerParty[5]); - - shedinja_something(&gEnemyParty[0]); - shedinja_something(&gEnemyParty[1]); - shedinja_something(&gEnemyParty[2]); - shedinja_something(&gEnemyParty[3]); - shedinja_something(&gEnemyParty[4]); - shedinja_something(&gEnemyParty[5]); - - gBattleCommunication[0]++; - } - break; - case 6: - sub_800B950(); - gBattleCommunication[0]++; - gBattleCommunication[1] = 0; - gBattleCommunication[2] = 0; - break; - case 7: - if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0) - { - gPreBattleCallback1 = gMain.callback1; - gMain.callback1 = sub_8010824; - SetMainCallback2(sub_800F808); - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - gTrainerBattleOpponent = 0x800; - gBattleTypeFlags |= BATTLE_TYPE_20; - } - } - break; - } -} - -void sub_800F808(void) -{ - AnimateSprites(); - BuildOamBuffer(); - sub_800374C(&gUnknown_03004210); - UpdatePaletteFade(); - RunTasks(); -} - -void sub_800F828(struct Sprite *sprite) -{ - sprite->data0 = 0; - sprite->callback = sub_800F838; -} - -void sub_800F838(struct Sprite *sprite) -{ - u16 *arr = (u16 *)ewram; - - switch (sprite->data0) - { - case 0: - sprite->data0++; - sprite->data1 = 0; - sprite->data2 = 0x281; - sprite->data3 = 0; - sprite->data4 = 1; - // fall through - case 1: - sprite->data4--; - if (sprite->data4 == 0) - { - s32 i; - s32 r2; - s32 r0; - - sprite->data4 = 2; - r2 = sprite->data1 + sprite->data3 * 32; - r0 = sprite->data2 - sprite->data3 * 32; - for (i = 0; i < 29; i += 2) - { - arr[r2 + i] = 0x3D; - arr[r0 + i] = 0x3D; - } - sprite->data3++; - if (sprite->data3 == 21) - { - sprite->data0++; - sprite->data1 = 32; - } - } - break; - case 2: - sprite->data1--; - if (sprite->data1 == 20) - SetMainCallback2(sub_800E7C4); - break; - } -} - -u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum) -{ - u32 nameHash = 0; - s32 i; - - if (trainerNum == 0x400) - return 0; - - if ((gBattleTypeFlags & 0x908) == 8) - { - ZeroEnemyPartyMons(); - for (i = 0; i < gTrainers[trainerNum].partySize; i++) - { - u32 personalityValue; - s32 j; - u8 fixedIV; - - if (gTrainers[trainerNum].doubleBattle == TRUE) - personalityValue = 0x80; - else if (gTrainers[trainerNum].encounterMusic_gender & 0x80) - personalityValue = 0x78; - else - personalityValue = 0x88; - - for (j = 0; gTrainers[trainerNum].trainerName[j] != 0xFF; j++) - nameHash += gTrainers[trainerNum].trainerName[j]; - - switch (gTrainers[trainerNum].partyFlags) - { - case 0: - { - struct TrainerPartyMember0 *partyData = gTrainers[trainerNum].party; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); - break; - } - case 1: - { - struct TrainerPartyMember1 *partyData = gTrainers[trainerNum].party; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); - - for (j = 0; j < 4; j++) - { - SetMonData(&party[i], MON_DATA_MOVE1 + j, (u8 *)&partyData[i].moves[j]); - SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); - } - break; - } - case 2: - { - struct TrainerPartyMember2 *partyData = gTrainers[trainerNum].party; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); - - SetMonData(&party[i], MON_DATA_HELD_ITEM, (u8 *)&partyData[i].heldItem); - break; - } - case 3: - { - struct TrainerPartyMember3 *partyData = gTrainers[trainerNum].party; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); - - SetMonData(&party[i], MON_DATA_HELD_ITEM, (u8 *)&partyData[i].heldItem); - for (j = 0; j < 4; j++) - { - SetMonData(&party[i], MON_DATA_MOVE1 + j, (u8 *)&partyData[i].moves[j]); - SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); - } - break; - } - } - } - gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; - } - return gTrainers[trainerNum].partySize; -} - -void sub_800FCD4(void) -{ - if (REG_VCOUNT < 0xA0 && REG_VCOUNT >= 0x6F ) - REG_BG0CNT = 0x9800; -} - -void sub_800FCFC(void) -{ - Random(); // unused return value - 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; - REG_WIN0H = gUnknown_030042C4; - REG_WIN0V = gUnknown_03004240; - REG_WIN1H = gUnknown_03004200; - REG_WIN1V = gUnknown_03004244; - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - sub_8089668(); -} - -void nullsub_36(struct Sprite *sprite) -{ -} - -void sub_800FDB0(struct Sprite *sprite) -{ - if (sprite->data0 != 0) - sprite->pos1.x = sprite->data1 + ((sprite->data2 & 0xFF00) >> 8); - else - sprite->pos1.x = sprite->data1 - ((sprite->data2 & 0xFF00) >> 8); - sprite->data2 += 0x180; - if (sprite->affineAnimEnded) - { - FreeSpriteTilesByTag(0x2710); - FreeSpritePaletteByTag(0x2710); - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); - } -} - -void sub_800FE20(struct Sprite *sprite) -{ - StartSpriteAffineAnim(sprite, 1); - sprite->callback = sub_800FDB0; - PlaySE(SE_BT_START); -} - -void sub_800FE40(u8 taskId) -{ - struct Pokemon *sp4 = NULL; - struct Pokemon *sp8 = NULL; - u8 r2 = ewram160CB; - u32 r7; - s32 i; - - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - switch (gLinkPlayers[r2].lp_field_18) - { - case 0: - case 2: - sp4 = gPlayerParty; - sp8 = gEnemyParty; - break; - case 1: - case 3: - sp4 = gEnemyParty; - sp8 = gPlayerParty; - break; - } - } - else - { - sp4 = gPlayerParty; - sp8 = gEnemyParty; - } - - r7 = 0; - for (i = 0; i < 6; i++) - { - u16 species = GetMonData(&sp4[i], MON_DATA_SPECIES2); - u16 hp = GetMonData(&sp4[i], MON_DATA_HP); - u32 status = GetMonData(&sp4[i], MON_DATA_STATUS); - - if (species == 0) - continue; - if (species != SPECIES_EGG && hp != 0 && status == 0) - r7 |= 1 << i * 2; - - if (species == 0) - continue; - if (hp != 0 && (species == SPECIES_EGG || status != 0)) - r7 |= 2 << i * 2; - - if (species == 0) - continue; - if (species != SPECIES_EGG && hp == 0) - r7 |= 3 << i * 2; - } - gTasks[taskId].data[3] = r7; - - r7 = 0; - for (i = 0; i < 6; i++) - { - u16 species = GetMonData(&sp8[i], MON_DATA_SPECIES2); - u16 hp = GetMonData(&sp8[i], MON_DATA_HP); - u32 status = GetMonData(&sp8[i], MON_DATA_STATUS); - - if (species == 0) - continue; - if (species != SPECIES_EGG && hp != 0 && status == 0) - r7 |= 1 << i * 2; - - if (species == 0) - continue; - if (hp != 0 && (species == SPECIES_EGG || status != 0)) - r7 |= 2 << i * 2; - - if (species == 0) - continue; - if (species != SPECIES_EGG && hp == 0) - r7 |= 3 << i * 2; - } - gTasks[taskId].data[4] = r7; -} - -void c2_8011A1C(void) -{ - s32 i; - u8 taskId; - - SetHBlankCallback(NULL); - SetVBlankCallback(NULL); - CpuFill32(0, (void *)VRAM, VRAM_SIZE); - REG_MOSAIC = 0; - REG_WIN0H = 0xF0; - REG_WIN0V = 0x5051; - REG_WININ = 0; - REG_WINOUT = 0; - gUnknown_030042C4 = 0xF0; - gUnknown_03004240 = 0x5051; - dp12_8087EA4(); - - for (i = 0; i < 80; i++) - { - gUnknown_03004DE0.unk0[i] = 0xF0; - gUnknown_03004DE0.unk780[i] = 0xF0; - } - for (i = 80; i < 160; i++) - { - asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter - gUnknown_03004DE0.unk0[i] = 0xFF10; - gUnknown_03004DE0.unk780[i] = 0xFF10; - } - SetUpWindowConfig(&gWindowConfig_81E6C58); - ResetPaletteFade(); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; - gUnknown_030042C0 = 0; - gUnknown_030041B4 = 0; - gUnknown_03004288 = 0; - gUnknown_03004280 = 0; - gUnknown_030041B0 = 0; - gUnknown_030041B8 = 0; - - InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); - InitWindowFromConfig(&gUnknown_030041D0, &gWindowConfig_81E71D0); - InitWindowFromConfig(&gUnknown_03004250, &gWindowConfig_81E71EC); - sub_800D6D4(); - LoadCompressedPalette(gUnknown_08D004E0, 0, 64); - sub_800D74C(); - ResetSpriteData(); - ResetTasks(); - sub_800E23C(); - REG_WINOUT = 0x37; - FreeAllSpritePalettes(); - gReservedSpritePaletteCount = 4; - SetVBlankCallback(sub_800FCFC); - taskId = CreateTask(sub_800DE30, 0); - gTasks[taskId].data[1] = 0x10E; - gTasks[taskId].data[2] = 0x5A; - gTasks[taskId].data[5] = 1; - sub_800FE40(taskId); - SetMainCallback2(sub_80101B8); - gBattleCommunication[0] = 0; -} - -void sub_80101B8(void) -{ - c2_081284E0(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); - RunTasks(); -} - -void c2_081284E0(void) -{ - switch (gBattleCommunication[0]) - { - case 0: - gBattleCommunication[1] = 0xFF; - gBattleCommunication[0]++; - break; - case 1: - gBattleCommunication[1]--; - if (gBattleCommunication[1] == 0) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gBattleCommunication[0]++; - } - break; - case 2: - if (!gPaletteFade.active) - SetMainCallback2(gMain.savedCallback); - break; - } -} - -void oac_poke_opponent(struct Sprite *sprite) -{ - sprite->callback = sub_8010278; - StartSpriteAnimIfDifferent(sprite, 0); - BeginNormalPaletteFade(0x00020000, 0, 10, 10, 0x3DEF); -} - -void sub_8010278(struct Sprite *sprite) -{ - if ((gUnknown_02024DE8 & 1) == 0) - { - sprite->pos2.x += 2; - if (sprite->pos2.x == 0) - { - sprite->callback = sub_80102AC; - PlayCry1(sprite->data2, 25); - } - } -} - -void sub_80102AC(struct Sprite *sprite) -{ - if (sprite->animEnded) - { - sub_804777C(sprite->data0); - sub_8043DFC(gHealthboxIDs[sprite->data0]); - sprite->callback = nullsub_37; - StartSpriteAnimIfDifferent(sprite, 0); - BeginNormalPaletteFade(0x00020000, 0, 10, 0, 0x3DEF); - } -} - -void nullsub_37(struct Sprite *sprite) -{ -} - -void unref_sub_801030C(struct Sprite *sprite) -{ - sprite->data3 = 6; - sprite->data4 = 1; - sprite->callback = sub_8010320; -} - -void sub_8010320(struct Sprite *sprite) -{ - sprite->data4--; - if (sprite->data4 == 0) - { - sprite->data4 = 8; - sprite->invisible ^= 1; - sprite->data3--; - if (sprite->data3 == 0) - { - sprite->invisible = FALSE; - sprite->callback = nullsub_37; - gUnknown_03004284 = 0; - } - } -} - -void sub_8010384(struct Sprite *sprite) -{ - u8 r6 = sprite->data0; - u16 species; - u8 yOffset; - - if (ewram17800[r6].unk2 != 0) - species = ewram17800[r6].unk2; - else - species = sprite->data2; - - GetMonData(&gEnemyParty[gBattlePartyID[r6]], MON_DATA_PERSONALITY); // Unused return value - - if (species == SPECIES_UNOWN) - { - u32 personalityValue = GetMonData(&gEnemyParty[gBattlePartyID[r6]], MON_DATA_PERSONALITY); - u16 unownForm = ((((personalityValue & 0x3000000) >> 18) | ((personalityValue & 0x30000) >> 12) | ((personalityValue & 0x300) >> 6) | (personalityValue & 3)) % 0x1C); - u16 unownSpecies; - - if (unownForm == 0) - unownSpecies = SPECIES_UNOWN; // Use the A Unown form - else - unownSpecies = NUM_SPECIES + unownForm; // Use one of the other Unown letters - - yOffset = gMonFrontPicCoords[unownSpecies].y_offset; - } - else if (species == SPECIES_CASTFORM) - { - yOffset = gCastformFrontSpriteCoords[gBattleMonForms[r6]].y_offset; - } - else if (species > NUM_SPECIES) - { - yOffset = gMonFrontPicCoords[SPECIES_NONE].y_offset; - } - else - { - yOffset = gMonFrontPicCoords[species].y_offset; - } - - sprite->data3 = 8 - yOffset / 8; - sprite->data4 = 1; - sprite->callback = sub_8010494; -} - -void sub_8010494(struct Sprite *sprite) -{ - s32 i; - - sprite->data4--; - if (sprite->data4 == 0) - { - sprite->data4 = 2; - sprite->pos2.y += 8; - sprite->data3--; - if (sprite->data3 < 0) - { - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); - } - else - { - u8 *dst = (u8 *)gUnknown_081FAF4C[GetBankIdentity(sprite->data0)] + (gBattleMonForms[sprite->data0] << 11) + (sprite->data3 << 8); - - for (i = 0; i < 0x100; i++) - *(dst++) = 0; - StartSpriteAnim(sprite, gBattleMonForms[sprite->data0]); - } - } -} - -void sub_8010520(struct Sprite *sprite) -{ - sprite->data3 = 8; - sprite->data4 = sprite->invisible; - sprite->callback = sub_801053C; -} - -void sub_801053C(struct Sprite *sprite) -{ - sprite->data3--; - if (sprite->data3 == 0) - { - sprite->invisible ^= 1; - sprite->data3 = 8; - } -} - -void sub_8010574(struct Sprite *sprite) -{ - sprite->invisible = sprite->data4; - sprite->data4 = FALSE; - sprite->callback = nullsub_37; -} - -void sub_80105A0(struct Sprite *sprite) -{ - sprite->callback = oac_poke_ally_; -} - -void oac_poke_ally_(struct Sprite *sprite) -{ - if ((gUnknown_02024DE8 & 1) == 0) - { - sprite->pos2.x -= 2; - if (sprite->pos2.x == 0) - { - sprite->callback = nullsub_86; - sprite->data1 = 0; - } - } -} - -void sub_80105DC(struct Sprite *sprite) -{ - sprite->callback = nullsub_86; -} - -void nullsub_86(struct Sprite *sprite) -{ -} - -void sub_80105EC(struct Sprite *sprite) -{ - if ((gUnknown_02024DE8 & 1) == 0) - { - sprite->pos2.x += sprite->data1; - sprite->pos2.y += sprite->data2; - } -} - -void dp11b_obj_instanciate(u8 bank, u8 b, s8 c, s8 d) -{ - u8 spriteId; - u8 objectID; - - if (b) - { - if (ewram17810[bank].unk0_1) - return; - } - else - { - if (ewram17810[bank].unk0_2) - return; - } - - spriteId = CreateInvisibleSpriteWithCallback(objc_dp11b_pingpong); - if (b == TRUE) - { - objectID = gHealthboxIDs[bank]; - ewram17810[bank].unk2 = spriteId; - ewram17810[bank].unk0_1 = 1; - gSprites[spriteId].data0 = 0x80; - } - else - { - objectID = gObjectBankIDs[bank]; - ewram17810[bank].unk3 = spriteId; - ewram17810[bank].unk0_2 = 1; - gSprites[spriteId].data0 = 0xC0; - } - gSprites[spriteId].data1 = c; - gSprites[spriteId].data2 = d; - gSprites[spriteId].data3 = objectID; - gSprites[spriteId].data4 = b; - gSprites[objectID].pos2.x = 0; - gSprites[objectID].pos2.y = 0; -} - -void dp11b_obj_free(u8 a, u8 b) -{ - u8 r4; - - if (b == TRUE) - { - if (!ewram17810[a].unk0_1) - return; - r4 = gSprites[ewram17810[a].unk2].data3; - DestroySprite(&gSprites[ewram17810[a].unk2]); - ewram17810[a].unk0_1 = 0; - } - else - { - if (!ewram17810[a].unk0_2) - return; - r4 = gSprites[ewram17810[a].unk3].data3; - DestroySprite(&gSprites[ewram17810[a].unk3]); - ewram17810[a].unk0_2 = 0; - } - gSprites[r4].pos2.x = 0; - gSprites[r4].pos2.y = 0; -} - -void objc_dp11b_pingpong(struct Sprite *sprite) -{ - u8 spriteId = sprite->data3; - s32 var; - - if (sprite->data4 == 1) - var = sprite->data0; - else - var = sprite->data0; - - gSprites[spriteId].pos2.y = Sin(var, sprite->data2) + sprite->data2; - sprite->data0 = (sprite->data0 + sprite->data1) & 0xFF; -} - -void nullsub_41(void) -{ -} - -void sub_8010800(void) -{ - sub_8010874(); - gBattleCommunication[1] = 0; - gBattleMainFunc = bc_8012FAC; -} - -void sub_8010824(void) -{ - gBattleMainFunc(); - - for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) - gBattleBankFunc[gActiveBank](); -} - -void sub_8010874(void) -{ - s32 i; - u32 j; - u8 *r4; - - TurnValuesCleanUp(0); - SpecialStatusesClear(); - - for (i = 0; i < 4; i++) - { - gStatuses3[i] = 0; - - r4 = (u8 *)&gDisableStructs[i]; - for (j = 0; j < (u32)0x1C; j++) - r4[j] = 0; - - gDisableStructs[i].isFirstTurn= 2; - gUnknown_02024C70[i] = 0; - gLastUsedMove[i] = 0; - gMoveHitWith[i] = 0; - gUnknown_02024C44[i] = 0; - gUnknown_02024C4C[i] = 0; - gUnknown_02024C5C[i] = 0xFF; - gLockedMove[i] = 0; - gUnknown_02024C2C[i] = 0; - ewram17100[i] = 0; - } - - for (i = 0; i < 2; i++) - { - gSideAffecting[i] = 0; - - r4 = (u8 *)&gSideTimer[i]; - for (j = 0; j < 12; j++) - r4[j] = 0; - } - - gBankAttacker = 0; - gBankTarget = 0; - gBattleWeather = 0; - - r4 = (u8 *)&gWishFutureKnock; - for (i = 0; i < (u32)0x2C; i++) - r4[i] = 0; - - gHitMarker = 0; - if ((gBattleTypeFlags & BATTLE_TYPE_LINK) == 0 && gSaveBlock2.optionsBattleSceneOff == TRUE) - gHitMarker = HITMARKER_NO_ANIMATIONS; - ewram16084 = gSaveBlock2.optionsBattleStyle; - gMultiHitCounter = 0; - gBattleOutcome = 0; - gBattleExecBuffer = 0; - gPaydayMoney = 0; - ewram17130 = 0; - ewram17160 = 0; - for (i = 0; i < 8; i++) - gBattleCommunication[i] = 0; - gPauseCounterBattle = 0; - gBattleMoveDamage = 0; - gUnknown_02024DE8 = 0; - ewram16002 = 0; - ewram160A1 = 0; - gLeveledUpInBattle = 0; - gAbsentBankFlags = 0; - ewram16078 = 0; - ewram16086 = 0; - ewram16087 = 0; - ewram16089 = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275; - ewram16088 = 3; - ewram1601B = 0; - ewram16056 = 1; - - for (i = 0; i < 8; i++) - { - ewram[i + 0x160AC] = 0; - ewram[i + 0x160CC] = 0; - ewram[i + 0x160E8] = 0; - ewram[i + 0x160F0] = 0; - ewram[i + 0x16100] = 0; - ewram[i + 0x16108] = 0; - } - - ewram160C8 = 6; - ewram160C9 = 6; - ewram16113 = 0; - for (i = 0; i < 11; i++) - gBattleResults.unk36[i] = 0; - gBattleResults.battleTurnCounter = 0; - gBattleResults.playerFaintCounter = 0; - gBattleResults.opponentFaintCounter = 0; - gBattleResults.unk2 = 0; - gBattleResults.unk3 = 0; - gBattleResults.unk4 = 0; - gBattleResults.unk5_0 = 0; - gBattleResults.unk5_1 = 0; - gBattleResults.lastOpponentSpecies = 0; - gBattleResults.lastUsedMove = 0; - gBattleResults.opponentMove = 0; - gBattleResults.poke1Species = 0; - gBattleResults.opponentSpecies = 0; - gBattleResults.caughtPoke = 0; - for (i = 0; i < 10; i++) - { - gBattleResults.pokeString1[i] = 0; - gBattleResults.pokeString2[i] = 0; - gBattleResults.caughtNick[i] = 0; - } -} - -void SwitchInClearStructs(void) -{ - struct DisableStruct sp0 = gDisableStructs[gActiveBank]; - s32 i; - u8 *ptr; - u32 *ptr2; - - if (gBattleMoves[gCurrentMove].effect != EFFECT_BATON_PASS) - { - for (i = 0; i < 8; i++) - gBattleMons[gActiveBank].statStages[i] = 6; - for (i = 0; i < gNoOfAllBanks; i++) - { - struct UnknownStruct12 *sp20 = &gUnknown_02024AD0[i]; - - if ((sp20->unk0 & 0x04000000) && gDisableStructs[i].bankPreventingEscape == gActiveBank) - sp20->unk0 &= ~0x04000000; - if ((gStatuses3[i] & STATUS3_ALWAYS_HITS) && gDisableStructs[i].bankWithSureHit == gActiveBank) - { - gStatuses3[i] &= ~STATUS3_ALWAYS_HITS; - gDisableStructs[i].bankWithSureHit = 0; - } - } - } - if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) - { - gBattleMons[gActiveBank].status2 &= (STATUS2_CONFUSION | STATUS2_FOCUS_ENERGY | STATUS2_SUBSTITUTE | STATUS2_ESCAPE_PREVENTION | STATUS2_CURSED); - gStatuses3[gActiveBank] &= (STATUS3_LEECHSEED_BANK | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED | STATUS3_MUDSPORT | STATUS3_WATERSPORT); - - for (i = 0; i < gNoOfAllBanks; i++) - { - if (GetBankSide(gActiveBank) != GetBankSide(i) - && (gStatuses3[i] & STATUS3_ALWAYS_HITS) != 0 - && (gDisableStructs[i].bankWithSureHit == gActiveBank)) - { - gStatuses3[i] &= ~STATUS3_ALWAYS_HITS; - gStatuses3[i] |= 0x10; - } - } - } - else - { - gBattleMons[gActiveBank].status2 = 0; - gStatuses3[gActiveBank] = 0; - } - - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gUnknown_02024AD0[i].unk0 & (gBitTable[gActiveBank] << 16)) - gUnknown_02024AD0[i].unk0 &= ~(gBitTable[gActiveBank] << 16); - if ((gUnknown_02024AD0[i].unk0 & 0xE000) && ewram[0x16020 + i] == gActiveBank) - gUnknown_02024AD0[i].unk0 &= ~0xE000; - } - - gActionSelectionCursor[gActiveBank] = 0; - gMoveSelectionCursor[gActiveBank] = 0; - - ptr = (u8 *)&gDisableStructs[gActiveBank]; - for (i = 0; i < (u32)0x1C; i++) - ptr[i] = 0; - - if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) - { - gDisableStructs[gActiveBank].substituteHP = sp0.substituteHP; - gDisableStructs[gActiveBank].bankWithSureHit = sp0.bankWithSureHit; - gDisableStructs[gActiveBank].perishSong1 = sp0.perishSong1; - gDisableStructs[gActiveBank].perishSong2 = sp0.perishSong2; - } - - gDisableStructs[gActiveBank].isFirstTurn= 2; - gLastUsedMove[gActiveBank] = 0; - gMoveHitWith[gActiveBank] = 0; - gUnknown_02024C44[gActiveBank] = 0; - gUnknown_02024C4C[gActiveBank] = 0; - gUnknown_02024C2C[gActiveBank] = 0; - gUnknown_02024C5C[gActiveBank] = 0xFF; - - ewram[0x160AC + gActiveBank * 2 + 0] = 0; - ewram[0x160AC + gActiveBank * 2 + 1] = 0; - ewram[0x16100 + gActiveBank * 4 + 0] = 0; - ewram[0x16100 + gActiveBank * 4 + 1] = 0; - ewram[0x16100 + gActiveBank * 4 + 2] = 0; - ewram[0x16100 + gActiveBank * 4 + 3] = 0; - ewram[0x160E8 + gActiveBank * 2 + 0] = 0; - ewram[0x160E8 + gActiveBank * 2 + 1] = 0; - - ptr2 = (u32 *)(ewram + 0x17100); - ptr2[gActiveBank] = 0; - - gCurrentMove = 0; -} - -void UndoEffectsAfterFainting(void) -{ - s32 i; - u8 *ptr; - u32 *ptr2; - - for (i = 0; i < 8; i++) - gBattleMons[gActiveBank].statStages[i] = 6; - gBattleMons[gActiveBank].status2 = 0; - gStatuses3[gActiveBank] = 0; - for (i = 0; i < gNoOfAllBanks; i++) - { - if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].bankPreventingEscape == gActiveBank) - gBattleMons[i].status2 &= ~STATUS2_ESCAPE_PREVENTION; - if (gBattleMons[i].status2 & (gBitTable[gActiveBank] << 16)) - gBattleMons[i].status2 &= ~(gBitTable[gActiveBank] << 16); - if ((gBattleMons[i].status2 & STATUS2_WRAPPED) && ewram[0x16020 + i] == gActiveBank) - gBattleMons[i].status2 &= ~STATUS2_WRAPPED; - } - gActionSelectionCursor[gActiveBank] = 0; - gMoveSelectionCursor[gActiveBank] = 0; - - ptr = (u8 *)&gDisableStructs[gActiveBank]; - for (i = 0; i < (u32)0x1C; i++) - ptr[i] = 0; - gProtectStructs[gActiveBank].protected = 0; - gProtectStructs[gActiveBank].endured = 0; - gProtectStructs[gActiveBank].onlyStruggle = 0; - gProtectStructs[gActiveBank].helpingHand = 0; - gProtectStructs[gActiveBank].bounceMove = 0; - gProtectStructs[gActiveBank].stealMove = 0; - gProtectStructs[gActiveBank].flag0Unknown = 0; - gProtectStructs[gActiveBank].prlzImmobility = 0; - gProtectStructs[gActiveBank].confusionSelfDmg = 0; - gProtectStructs[gActiveBank].notEffective = 0; - gProtectStructs[gActiveBank].chargingTurn = 0; - gProtectStructs[gActiveBank].fleeFlag = 0; - gProtectStructs[gActiveBank].usedImprisionedMove = 0; - gProtectStructs[gActiveBank].loveImmobility = 0; - gProtectStructs[gActiveBank].usedDisabledMove = 0; - gProtectStructs[gActiveBank].usedTauntedMove = 0; - gProtectStructs[gActiveBank].flag2Unknown = 0; - gProtectStructs[gActiveBank].flinchImmobility = 0; - gProtectStructs[gActiveBank].notFirstStrike = 0; - - gDisableStructs[gActiveBank].isFirstTurn= 2; - gLastUsedMove[gActiveBank] = 0; - gMoveHitWith[gActiveBank] = 0; - gUnknown_02024C44[gActiveBank] = 0; - gUnknown_02024C4C[gActiveBank] = 0; - gUnknown_02024C2C[gActiveBank] = 0; - gUnknown_02024C5C[gActiveBank] = 0xFF; - - ewram[0x160E8 + gActiveBank * 2 + 0] = 0; - ewram[0x160E8 + gActiveBank * 2 + 1] = 0; - ewram[0x160AC + gActiveBank * 2 + 0] = 0; - ewram[0x160AC + gActiveBank * 2 + 1] = 0; - ewram[0x16100 + gActiveBank * 4 + 0] = 0; - ewram[0x16100 + gActiveBank * 4 + 1] = 0; - ewram[0x16100 + gActiveBank * 4 + 2] = 0; - ewram[0x16100 + gActiveBank * 4 + 3] = 0; - - ptr2 = (u32 *)(ewram + 0x17100); - ptr2[gActiveBank] = 0; - - gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1; - gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2; -} - -void bc_8012FAC(void) -{ - switch (gBattleCommunication[0]) - { - case 0: - gActiveBank = gBattleCommunication[1]; - EmitGetAttributes(0, 0, 0); - MarkBufferBankForExecution(gActiveBank); - gBattleCommunication[0]++; - break; - case 1: - if (gBattleExecBuffer == 0) - { - gBattleCommunication[1]++; - if (gBattleCommunication[1] == gNoOfAllBanks) - gBattleMainFunc = BattlePrepIntroSlide; - else - gBattleCommunication[0] = 0; - } - break; - } -} - -static void BattlePrepIntroSlide(void) -{ - if (gBattleExecBuffer == 0) - { - gActiveBank = GetBankByPlayerAI(0); - EmitBattleIntroSlide(0, gBattleTerrain); - MarkBufferBankForExecution(gActiveBank); - gBattleMainFunc = sub_8011384; - gBattleCommunication[0] = 0; - gBattleCommunication[1] = 0; - } -} - -void sub_8011384(void) -{ - u8 *ptr; - s32 i; - - if (gBattleExecBuffer == 0) - { - for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) - { - if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) - && GetBankSide(gActiveBank) == 0) - { - ptr = (u8 *)&gBattleMons[gActiveBank]; - for (i = 0; i < (u32)0x58; i++) - ptr[i] = 0; - } - else - { - u8 r0; - - ptr = (u8 *)&gBattleMons[gActiveBank]; - for (i = 0; i < (u32)0x58; i++) - ptr[i] = gBattleBufferB[gActiveBank][4 + i]; - - gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1; - gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2; - gBattleMons[gActiveBank].ability = GetAbilityBySpecies(gBattleMons[gActiveBank].species, gBattleMons[gActiveBank].altAbility); - r0 = GetBankSide(gActiveBank); - ewram160BC[r0] = gBattleMons[gActiveBank].hp; - for (i = 0; i < 8; i++) - gBattleMons[gActiveBank].statStages[i] = 6; - gBattleMons[gActiveBank].status2 = 0; - } - - if (GetBankIdentity(gActiveBank) == 0) - { - dp01_build_cmdbuf_x07_7_7_7(0); - MarkBufferBankForExecution(gActiveBank); - } - - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { - if (GetBankIdentity(gActiveBank) == 1) - { - dp01_build_cmdbuf_x07_7_7_7(0); - MarkBufferBankForExecution(gActiveBank); - } - if (GetBankSide(gActiveBank) == 1 - && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) - GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); - } - else - { - if (GetBankSide(gActiveBank) == 1 - && !(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); - MarkBufferBankForExecution(gActiveBank); - } - } - - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - if (GetBankIdentity(gActiveBank) == 2 - || GetBankIdentity(gActiveBank) == 3) - { - dp01_build_cmdbuf_x07_7_7_7(0); - MarkBufferBankForExecution(gActiveBank); - } - } - } - gBattleMainFunc = bc_801333C; - } -} - -void bc_801333C(void) -{ - s32 i; - - if (gBattleExecBuffer == 0) - { - struct - { - u16 hp; - u32 status; - } sp0[6]; - - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { - for (i = 0; i < 6; i++) - { - if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == 0 - || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) - { - sp0[i].hp = 0xFFFF; - sp0[i].status = 0; - } - else - { - sp0[i].hp = GetMonData(&gEnemyParty[i], MON_DATA_HP); - sp0[i].status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS); - } - } - gActiveBank = GetBankByPlayerAI(1); - dp01_build_cmdbuf_x30_TODO(0, (u8 *)sp0, 0x80); - MarkBufferBankForExecution(gActiveBank); - - for (i = 0; i < 6; i++) - { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == 0 - || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) - { - sp0[i].hp = 0xFFFF; - sp0[i].status = 0; - } - else - { - sp0[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); - sp0[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); - } - } - gActiveBank = GetBankByPlayerAI(0); - dp01_build_cmdbuf_x30_TODO(0, (u8 *)sp0, 0x80); - MarkBufferBankForExecution(gActiveBank); - - gBattleMainFunc = bc_battle_begin_message; - } - else - { - // The array gets set here, but nothing is ever done with it. - // Likely unfinished code. - - for (i = 0; i < 6; i++) - { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == 0 - || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) - { - sp0[i].hp = 0xFFFF; - sp0[i].status = 0; - } - else - { - sp0[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); - sp0[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); - } - } - - gBattleMainFunc = bc_8013568; - } - } -} - -void bc_battle_begin_message(void) -{ - if (gBattleExecBuffer == 0) - { - gActiveBank = GetBankByPlayerAI(1); - PrepareStringBattle(0, gActiveBank); - gBattleMainFunc = sub_8011800; - } -} - -void bc_8013568(void) -{ - if (gBattleExecBuffer == 0) - { - gBattleMainFunc = sub_8011970; - PrepareStringBattle(0, 0); - } -} - -void sub_8011800(void) -{ - if (gBattleExecBuffer == 0) - { - PrepareStringBattle(1, GetBankByPlayerAI(1)); - gBattleMainFunc = sub_8011834; - } -} - -void sub_8011834(void) -{ - if (gBattleExecBuffer == 0) - { - for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) - { - if (GetBankIdentity(gActiveBank) == 1) - { - dp01_build_cmdbuf_x2F_2F_2F_2F(0); - MarkBufferBankForExecution(gActiveBank); - } - if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) - && GetBankIdentity(gActiveBank) == 3) - { - dp01_build_cmdbuf_x2F_2F_2F_2F(0); - MarkBufferBankForExecution(gActiveBank); - } - } - gBattleMainFunc = bc_801362C; - } -} - -void bc_801362C(void) -{ - if (gBattleExecBuffer == 0) - { - for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) - { - if (GetBankSide(gActiveBank) == 1 - && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) - GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); - } - gBattleMainFunc = sub_8011970; - } -} - -void unref_sub_8011950(void) -{ - if (gBattleExecBuffer == 0) - gBattleMainFunc = sub_8011970; -} - -void sub_8011970(void) -{ - if (gBattleExecBuffer == 0) - { - if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) - PrepareStringBattle(1, GetBankByPlayerAI(0)); - gBattleMainFunc = sub_80119B4; - } -} - -void sub_80119B4(void) -{ - if (gBattleExecBuffer == 0) - { - for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) - { - if (GetBankIdentity(gActiveBank) == 0) - { - dp01_build_cmdbuf_x2F_2F_2F_2F(0); - MarkBufferBankForExecution(gActiveBank); - } - if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) - && GetBankIdentity(gActiveBank) == 2) - { - dp01_build_cmdbuf_x2F_2F_2F_2F(0); - MarkBufferBankForExecution(gActiveBank); - } - } - ewram16058 = 0; - ewram160F9 = 0; - ewram160E6 = 0; - gBattleMainFunc = BattleBeginFirstTurn; - } -} - -void unref_sub_8011A68(void) -{ - if (gBattleExecBuffer == 0) - { - for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) - { - if (GetBankSide(gActiveBank) == 0) - { - EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], 0); - MarkBufferBankForExecution(gActiveBank); - } - } - ewram16058 = 0; - ewram160F9 = 0; - ewram160E6 = 0; - gBattleMainFunc = BattleBeginFirstTurn; - } -} - -void BattleBeginFirstTurn(void) -{ - s32 i; - s32 j; - u8 r9 = 0; - - if (gBattleExecBuffer == 0) - { - if (ewram16058 == 0) - { - for (i = 0; i < gNoOfAllBanks; i++) - gTurnOrder[i] = i; - for (i = 0; i < gNoOfAllBanks - 1; i++) - { - for (j = i + 1; j < gNoOfAllBanks; j++) - { - if (b_first_side(gTurnOrder[i], gTurnOrder[j], 1) != 0) - sub_8012FBC(i, j); - } - } - } - if (ewram160E6 == 0 && AbilityBattleEffects(0, 0, 0, 0xFF, 0) != 0) - { - ewram160E6 = 1; - return; - } - while (ewram16058 < gNoOfAllBanks) - { - if (AbilityBattleEffects(0, gTurnOrder[ewram16058], 0, 0, 0) != 0) - r9++; - ewram16058++; - if (r9 != 0) - return; - } - if (AbilityBattleEffects(9, 0, 0, 0, 0) != 0) - return; - if (AbilityBattleEffects(11, 0, 0, 0, 0) != 0) - return; - while (ewram160F9 < gNoOfAllBanks) - { - if (ItemBattleEffects(0, gTurnOrder[ewram160F9], 0) != 0) - r9++; - ewram160F9++; - if (r9 != 0) - return; - } - // Absolutely pointless for-loop that somehow doesn't get optimized out - for (i = 0; i < gNoOfAllBanks; i++) - ; - for (i = 0; i < 4; i++) - { - ewram[0x16068 + i] = 6; - gActionForBanks[i] = 0xFF; - gChosenMovesByBanks[i] = 0; - } - TurnValuesCleanUp(0); - SpecialStatusesClear(); - ewram160A6 = gAbsentBankFlags; - gBattleMainFunc = sub_8012324; - sub_80156DC(); - for (i = 0; i < 8; i++) - gBattleCommunication[i] = 0; - for (i = 0; i < gNoOfAllBanks; i++) - gBattleMons[i].status2 &= ~8; - ewram16000 = 0; - ewram16001 = 0; - ewram16110 = 0; - ewram16111 = 0; - ewram1600C = 0; - ewram16059 = 0; - ewram1600E = 0; - gBattleMoveFlags = 0; - gRandomTurnNumber = Random(); - } -} - -void bc_8013B1C(void) -{ - s32 i; - - if (gBattleExecBuffer == 0) - { - gBattleMainFunc = BattleTurnPassed; - for (i = 0; i < 8; i++) - gBattleCommunication[i] = 0; - for (i = 0; i < gNoOfAllBanks; i++) - { - gBattleMons[i].status2 &= ~8; - if ((gBattleMons[i].status1 & 7) && (gBattleMons[i].status2 & 0x1000)) - CancelMultiTurnMoves(i); - } - ewram16000 = 0; - ewram16001 = 0; - ewram16110 = 0; - ewram16111 = 0; - ewram1600E = 0; - gBattleMoveFlags = 0; - } -} - -void BattleTurnPassed(void) -{ - s32 i; - - TurnValuesCleanUp(1); - if (gBattleOutcome == 0) - { - if (UpdateTurnCounters() != 0) - return; - if (TurnBasedEffects() != 0) - return; - } - if (sub_80173A4() != 0) - return; - ewram16059 = 0; - if (sub_80170DC() != 0) - return; - TurnValuesCleanUp(0); - gHitMarker &= ~HITMARKER_NO_ATTACKSTRING; - gHitMarker &= ~0x80000; - gHitMarker &= ~0x400000; - gHitMarker &= ~0x100000; - ewram16002 = 0; - ewram160A1 = 0; - ewram1600C = 0; - gBattleMoveDamage = 0; - gBattleMoveFlags = 0; - for (i = 0; i < 5; i++) - gBattleCommunication[i] = 0; - if (gBattleOutcome != 0) - { - gFightStateTracker = 12; - gBattleMainFunc = sub_80138F0; - return; - } - if (gBattleResults.battleTurnCounter < 0xFF) - gBattleResults.battleTurnCounter++; - for (i = 0; i < gNoOfAllBanks; i++) - { - gActionForBanks[i] = 0xFF; - gChosenMovesByBanks[i] = 0; - } - for (i = 0; i < 4; i++) - ewram[0x16068 + i] = 6; - ewram160A6 = gAbsentBankFlags; - gBattleMainFunc = sub_8012324; - gRandomTurnNumber = Random(); -} - -u8 CanRunFromBattle(void) -{ - u8 r2; - u8 r6; - s32 i; - - if (gBattleMons[gActiveBank].item == ITEM_ENIGMA_BERRY) - r2 = gEnigmaBerries[gActiveBank].holdEffect; - else - r2 = ItemId_GetHoldEffect(gBattleMons[gActiveBank].item); - gStringBank = gActiveBank; - if (r2 == HOLD_EFFECT_CAN_ALWAYS_RUN) - return 0; - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - return 0; - if (gBattleMons[gActiveBank].ability == ABILITY_RUN_AWAY) - return 0; - r6 = GetBankSide(gActiveBank); - for (i = 0; i < gNoOfAllBanks; i++) - { - if (r6 != GetBankSide(i) - && gBattleMons[i].ability == ABILITY_SHADOW_TAG) - { - ewram16003 = i; - gLastUsedAbility = gBattleMons[i].ability; - gBattleCommunication[5] = 2; - return 2; - } - if (r6 != GetBankSide(i) - && gBattleMons[gActiveBank].ability != ABILITY_LEVITATE - && gBattleMons[gActiveBank].type1 != 2 - && gBattleMons[gActiveBank].type2 != 2 - && gBattleMons[i].ability == ABILITY_ARENA_TRAP) - { - ewram16003 = i; - gLastUsedAbility = gBattleMons[i].ability; - gBattleCommunication[5] = 2; - return 2; - } - } - i = AbilityBattleEffects(15, gActiveBank, ABILITY_MAGNET_PULL, 0, 0); - if (i != 0 && (gBattleMons[gActiveBank].type1 == 8 || gBattleMons[gActiveBank].type2 == 8)) - { - ewram16003 = i - 1; - gLastUsedAbility = gBattleMons[i - 1].ability; - gBattleCommunication[5] = 2; - return 2; - } - if ((gBattleMons[gActiveBank].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED)) || (gStatuses3[gActiveBank] & STATUS3_ROOTED)) - { - gBattleCommunication[5] = 0; - return 1; - } - if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) - { - gBattleCommunication[5] = 1; - return 1; - } - return 0; -} - -void sub_8012258(u8 a) -{ - s32 i; - u8 r4; - u8 r1; - - for (i = 0; i < 3; i++) - gUnknown_02038470[i] = ewram[0x1606C + i + a * 3]; - r4 = pokemon_order_func(gBattlePartyID[a]); - r1 = pokemon_order_func(ewram[0x16068 + a]); - sub_8094C98(r4, r1); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - for (i = 0; i < 3; i++) - { - ewram[0x1606C + i + a * 3] = gUnknown_02038470[i]; - ewram[0x1606C + i + (a ^ 2) * 3] = gUnknown_02038470[i]; - } - } - else - { - for (i = 0; i < 3; i++) - { - ewram[0x1606C + i + a * 3] = gUnknown_02038470[i]; - } - } -} - -/* -void sub_8012324(void) -{ - u8 r5; - - gBattleCommunication[4] = 0; - // inverted loop - //_0801234C - for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) - { - r5 = GetBankIdentity(gActiveBank); - switch (gBattleCommunication[gActiveBank]) - { - case 0: - ewram[0x016068 + gActiveBank] = 6; - if (!(gBattleTypeFlags & 0x40) - && (r5 & 2) - && !(ewram160A6 & gBitTable[GetBankByPlayerAI(r5 ^ 2)]) - && gBattleCommunication[GetBankByPlayerAI(r5)] != 4) - break; - //_080123F8 - if (ewram160A6 & gBitTable[gActiveBank]) - { - gActionForBanks[gActiveBank] = 13; - if (!(gBattleTypeFlags & 0x40)) - gBattleCommunication[gActiveBank] = 4; - //_08012454 - else - gBattleCommunication[gActiveBank] = 3; - break; - } - //_08012468 - if ((gBattleMons[gActiveBank].status2 & 0x1000) - || (gBattleMons[gActiveBank].status2 & 0x10000000)) - { - gActionForBanks[gActiveBank] = 0; - gBattleCommunication[gActiveBank] = 3; - } - else - { - dp01_build_cmdbuf_x12_a_bb(0, gActionForBanks[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8)); - MarkBufferBankForExecution(gActiveBank); - gBattleCommunication[gActiveBank]++; - } - break; - case 1: - } - } -} -*/ diff --git a/src/battle_4.c b/src/battle_4.c deleted file mode 100644 index d58ae4145..000000000 --- a/src/battle_4.c +++ /dev/null @@ -1,18196 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_move_effects.h" -#include "moves.h" -#include "abilities.h" -#include "item.h" -#include "items.h" -#include "data2.h" -#include "hold_effects.h" -#include "rng.h" -#include "rom3.h" -#include "species.h" -#include "pokemon.h" -#include "text.h" -#include "palette.h" -#include "main.h" -#include "songs.h" -#include "sound.h" -#include "task.h" -#include "decompress.h" -#include "naming_screen.h" - -//extern needed variables -extern u8 gCritMultiplier; -extern s32 gBattleMoveDamage; -extern u32 gStatuses3[4]; -extern u16 gBattleTypeFlags; -extern const u32 gBitTable[]; -extern const struct BaseStats gBaseStats[]; -extern struct BattleEnigmaBerry gEnigmaBerries[4]; -extern struct BattlePokemon gBattleMons[4]; -extern u8 gActiveBank; -extern u32 gBattleExecBuffer; -extern u8 gNoOfAllBanks; -extern u16 gBattlePartyID[4]; -extern u8 gTurnOrder[4]; -extern u8 gUnknown_02024A76[4]; -extern u16 gCurrentMove; -extern u8 gLastUsedAbility; -extern u16 gBattleWeather; -extern u8 gStringBank; -extern u8 gEffectBank; -extern u8 gAbsentBankFlags; -extern u8 gMultiHitCounter; -extern u16 gLastUsedMove[4]; -extern u16 gLockedMove[4]; -extern u16 gChosenMovesByBanks[4]; -extern u16 gSideAffecting[2]; -extern u16 gPauseCounterBattle; -extern u16 gPaydayMoney; -extern u16 gRandomTurnNumber; -extern u8 gBattleOutcome; -extern u8 gBattleTerrain; -extern u16 gTrainerBattleOpponent; -extern u8 gBankAttacker; -extern u8 gBankTarget; -extern u8* gBattlescriptCurrInstr; -extern u8 gCurrMovePos; -extern u8 gFightStateTracker; -extern u32 gHitMarker; -extern u8 gBattleMoveFlags; -extern u8 gBattleCommunication[]; -extern u16 gMoveHitWith[4]; -extern u16 gUnknown_02024C44[4]; -extern u8 gStringBank; -extern u16 gDynamicBasePower; -extern const u8 gTypeEffectiveness[]; -extern u16 gLastUsedItem; -extern u16 gBattleMovePower; -extern s32 gHP_dealt; -extern s32 gTakenDmg[4]; -extern u8 gTakenDmgBanks[4]; -extern const u16 gMissStrings[]; -extern u8 gSentPokesToOpponent[2]; -extern u8 gBank1; -extern u16 gExpShareExp; -extern u8 gBattleTextBuff1[]; -extern u8 gBattleTextBuff2[]; -extern u8 gBattleTextBuff3[]; -extern u8 gLeveledUpInBattle; -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 const u8 gTrainerMoney[]; -extern u16 gRandomMove; -extern u8* gBattleScriptsEffectsTable[]; -extern u16 gUnknown_02024BE8; //last used move in battle -extern u8 gBankInMenu; -extern u8 gActionForBanks[4]; -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 functions -bool8 CantUseMove(void); -void PressurePPLose(u8 bank_atk, u8 bank_def, u16 move); -void CancelMultiTurnMoves(u8 bank); -void b_movescr_stack_push(u8* BS_ptr); -void b_movescr_stack_push_cursor(void); -void RecordAbilityBattle(u8 bank, u8 ability); -void RecordItemBattle(u8 bank, u8 item); -int IsPokeDisobedient(void); -static bool8 IsTwoTurnsMove(u16 move); -static void DestinyBondFlagUpdate(void); -static void b_wonderguard_and_levitate(void); -u8 GetBankIdentity(u8 bank); -u8 GetBankSide(u8 bank); -u8 GetBattleBank(u8 bankValue); -s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 bank_atk, u8 bank_def); -static u8 AttacksThisTurn(u8 bank, u16 move); //Note: returns 1 if it's a charging turn, otherwise 2 -void UndoEffectsAfterFainting(void); -void BattleMusicStop(void); -void PlayBGM(u16 songID); -void MonGainEVs(struct Pokemon*, u16 defeatedSpecies); -extern u8 gBattleBufferB[4][0x200]; -void sub_80324F8(struct Pokemon*, u8 bank); -void AdjustFriendship(struct Pokemon*, u8 value); -bool8 IsTradedMon(struct Pokemon*); -void b_movescr_stack_pop_cursor(void); -void SwitchInClearStructs(void); -u8* ConvertIntToDecimalStringN(u8*, s32, u8, u8); -u8 GetNationalPokedexFlag(u16 nationalNum, u8 caseID); -u16 SpeciesToNationalPokedexNum(u16 species); -u8 sub_803FC34(u8 bank); -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 -u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move); -void IncrementGameStat(u8 index); -u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale); -u16 GetPokedexHeightWeight(u16 national_num, u8 heightweight); -u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5); -void DestroyMenuCursor(void); -void sub_802BC6C(void); -void sub_809D9F0(struct Pokemon *party, u8, u8, void *, u32); -u8 sub_809FA30(void); -bool32 IsHMMove2(u16 move); -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 sub_80156DC(void); //set sentpokes value -bool8 sub_8014AB8(u8 bank); //can run from battle -u8 CountAliveMons(u8 caseID); -void sub_803E1B0(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp); -u8 CanRunFromBattle(void); -u8 sub_801B5C0(u16 move, u8 targetbyte); //get target of move -void sub_80153D0(u8 atk); //pressure perish song pp decrement -u8 castform_switch(u8 bank); -void b_push_move_exec(u8* bs_ptr); -u8 sav1_map_get_light_level(void); -u8 CalculatePlayerPartyCount(void); -u16 Sqrt(u32 num); -u8 sub_809070C(u16 nationalNum, u32 TiD, u32 PiD); //task prepare poke dex display -void sub_814A880(u8 a1, u8 a2); -u8 sub_8015A98(u8 bank, u8 unusable_moves, u8 flags); //choose move limitations -void sub_801529C(u8 bank); -bool8 IsLinkDoubleBattle(void); -void sub_8094B6C(u8 bank, u8 partyID, u8 r2); - -//extern BattleScripts -extern u8 BattleScript_EndTurn[]; -extern u8 BattleScript_NoPPForMove[]; -extern u8 BattleScript_MagicCoatBounce[]; -extern u8 BattleScript_TookAttack[]; -extern u8 BattleScript_SnatchedMove[]; -extern u8 BattleScript_Pausex20[]; -extern u8 BattleScript_SubstituteFade[]; -extern u8 BattleScript_HangedOnMsg[]; -extern u8 BattleScript_OneHitKOMsg[]; -extern u8 BattleScript_EnduredMsg[]; -extern u8 BattleScript_PSNPrevention[]; -extern u8 BattleScript_BRNPrevention[]; -extern u8 BattleScript_PRLZPrevention[]; -extern u8 BattleScript_FlinchPrevention[]; -extern u8 BattleScript_StatUp[]; -extern u8 BattleScript_StatDown[]; -extern u8 BattleScript_NoItemSteal[]; -extern u8 BattleScript_ItemSteal[]; -extern u8 BattleScript_RapidSpinAway[]; -extern u8 BattleScript_TargetPRLZHeal[]; -extern u8 BattleScript_KnockedOff[]; -extern u8 BattleScript_LevelUp[]; -extern u8 BattleScript_WrapFree[]; -extern u8 BattleScript_LeechSeedFree[]; -extern u8 BattleScript_SpikesFree[]; -extern u8 BattleScript_ButItFailed[]; -extern u8 BattleScript_ObliviousPreventsAttraction[]; -extern u8 BattleScript_MistProtected[]; -extern u8 BattleScript_AbilityNoStatLoss[]; -extern u8 BattleScript_AbilityNoSpecificStatLoss[]; -extern u8 BattleScript_TrainerBallBlock[]; -extern u8 BattleScript_WallyBallThrow[]; -extern u8 BattleScript_SuccessBallThrow[]; -extern u8 BattleScript_ShakeBallThrow[]; - -extern u8 gUnknown_081D919F[]; //spikes1 -extern u8 gUnknown_081D9171[]; //spikes2 -extern u8 gUnknown_081D91CD[]; //spikes3 -extern u8 BattleScript_1D6F44[]; //present dmg -extern u8 BattleScript_1D83B5[]; //present full hp -extern u8 BattleScript_1D839B[]; //present hp heal -extern u8 BattleScript_1D6F74[]; -extern u8 gUnknown_081D977D[]; //castform change bs -extern u8 gUnknown_081D9834[]; -extern u8 gUnknown_081D90FC[]; //bs random switchout -extern u8 gUnknown_081D95DB[]; //bs payday money give - -//useful macros -//read via orr -#define BSScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24) -#define BSScriptRead8(ptr) (((u8)((ptr)[0]))) -#define BSScriptReadPtr(ptr) ((void *)BSScriptRead32(ptr)) - -//read via add -#define BS2ScriptRead32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24)) -#define BS2ScriptRead16(ptr) ((ptr)[0] + ((ptr)[1] << 8)) -#define BS2ScriptReadPtr(ptr) ((void *)BS2ScriptRead32(ptr)) - - -#define MOVESTATUS_MISSED (1 << 0) -#define MOVESTATUS_SUPEREFFECTIVE (1 << 1) -#define MOVESTATUS_NOTVERYEFFECTIVE (1 << 2) -#define MOVESTATUS_NOTAFFECTED (1 << 3) -#define MOVESTATUS_ONEHITKO (1 << 4) -#define MOVESTATUS_FAILED (1 << 5) -#define MOVESTATUS_ENDURED (1 << 6) -#define MOVESTATUS_HUNGON (1 << 7) - -#define MOVESTATUS_NOEFFECT ((MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED)) - -#define TargetProtectAffected ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED)) - -#define ABILITYEFFECT_CONTACT 0x4 -#define ABILITYEFFECT_IMMUNITY 0x5 -#define ABILITYEFFECT_SYNCHRONIZE 0x7 -#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8 -#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC -#define ABILITYEFFECT_CHECK_BANK_SIDE 0xD -#define ABILITYEFFECT_COUNT_OTHER_SIZE 0x10 -#define ABILITYEFFECT_COUNT_BANK_SIDE 0x11 -#define ABILITYEFFECT_COUNT_ON_FIELD 0x12 -#define ABILITYEFFECT_CHECK_ON_FIELD 0x13 - -//array entries for battle communication -#define MOVE_EFFECT_BYTE 0x3 -#define MULTISTRING_CHOOSER 0x5 -#define MSG_DISPLAY 0x7 - -#define TARGET_SELECTED 0x0 -#define TARGET_DEPENDS 0x1 -#define TARGET_BOTH 0x8 -#define TARGET_FOES_AND_ALLY 0x20 -#define TARGET_OPPONENTS_FIELD 0x40 - -#define TYPE_FORESIGHT 0xFE -#define TYPE_ENDTABLE 0xFF - -#define CMP_EQUAL 0x0 -#define CMP_NOT_EQUAL 0x1 -#define CMP_GREATER_THAN 0x2 -#define CMP_LESS_THAN 0x3 -#define CMP_COMMON_BITS 0x4 -#define CMP_NO_COMMON_BITS 0x5 - -#define BATTLE_WON 0x1 -#define BATTLE_LOST 0x2 -#define BATTLE_DREW 0x3 -#define BATTLE_RAN 0x4 -#define BATTLE_PLAYER_TELEPORTED 0x5 -#define BATTLE_POKE_FLED 0x6 -#define BATTLE_CAUGHT 0x7 -#define BATTLE_OPPONENT_TELEPORTED 0xA - -#define uBYTE0_16(value)(( (u8) (((u16)(value) & (0x000000FF)) >> 0x00))) -#define uBYTE1_16(value)(( (u8) (((u16)(value) & (0x0000FF00)) >> 0x08))) - -#define uBYTE0_32(value)(( (u8) (((u32)(value) & (0x000000FF)) >> 0x00))) -#define uBYTE1_32(value)(( (u8) (((u32)(value) & (0x0000FF00)) >> 0x08))) -#define uBYTE2_32(value)(( (u8) (((u32)(value) & (0x00FF0000)) >> 0x10))) -#define uBYTE3_32(value)(( (u8) (((u32)(value) & (0xFF000000)) >> 0x18))) - -#define sBYTE0_16(value)(( (u8) (((s16)(value) & (0x000000FF)) >> 0x00))) -#define sBYTE1_16(value)(( (u8) (((s16)(value) & (0x0000FF00)) >> 0x08))) - -#define sBYTE0_32(value)(( (u8) (((s32)(value) & (0x000000FF)) >> 0x00))) -#define sBYTE1_32(value)(( (u8) (((s32)(value) & (0x0000FF00)) >> 0x08))) -#define sBYTE2_32(value)(( (u8) (((s32)(value) & (0x00FF0000)) >> 0x10))) -#define sBYTE3_32(value)(( (u8) (((s32)(value) & (0xFF000000)) >> 0x18))) - -#define USED_HELD_ITEM(bank)((((u16*)(&unk_2000000[bank * 2 + 0x160cc])))) - -#define RecordAbilitySetField6(ability, fieldValue) \ -(gLastUsedAbility = ability, gBattleCommunication[6] = fieldValue, RecordAbilityBattle(gBankTarget, ability)) - -#define WEATHER_HAS_EFFECT ((!AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_AIR_LOCK, 0, 0))) -#define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_physical.moveturnLostHP_special))) - -#define HP_ON_SWITCHOUT (((u16*)(0x020160bc))) - -static void atk00_attackcanceler(void); -static void atk01_accuracycheck(void); -static void atk02_attackstring(void); -static void atk03_ppreduce(void); -static void atk04_critcalc(void); -static void atk05_damagecalc1(void); -static void atk06_typecalc(void); -static void atk07_dmg_adjustment(void); -static void atk08_dmg_adjustment2(void); -static void atk09_attackanimation(void); -static void atk0A_waitanimation(void); -static void atk0B_healthbarupdate(void); -static void atk0C_datahpupdate(void); -static void atk0D_critmessage(void); -static void atk0E_effectiveness_sound(void); -static void atk0F_resultmessage(void); -static void atk10_printstring(void); -static void atk11_printstring_playeronly(void); -static void atk12_waitmessage(void); -static void atk13_printfromtable(void); -static void atk14_printfromtable_playeronly(void); -static void atk15_seteffectwithchancetarget(void); -static void atk16_seteffectprimary(void); -static void atk17_seteffectsecondary(void); -static void atk18_status_effect_clear(void); -static void atk19_faint_pokemon(void); -static void atk1A_faint_animation(void); -static void atk1B_faint_effects_clear(void); -static void atk1C_jumpifstatus(void); -static void atk1D_jumpifstatus2(void); -static void atk1E_jumpifability(void); -static void atk1F_jumpifsideaffecting(void); -static void atk20_jumpifstat(void); -static void atk21_jumpifstatus3(void); -static void atk22_jumpiftype(void); -static void atk23_getexp(void); -static void atk24(void); -static void atk25_move_values_cleanup(void); -static void atk26_set_multihit(void); -static void atk27_decrement_multihit(void); -static void atk28_goto(void); -static void atk29_jumpifbyte(void); -static void atk2A_jumpifhalfword(void); -static void atk2B_jumpifword(void); -static void atk2C_jumpifarrayequal(void); -static void atk2D_jumpifarraynotequal(void); -static void atk2E_setbyte(void); -static void atk2F_addbyte(void); -static void atk30_subbyte(void); -static void atk31_copyarray(void); -static void atk32_copyarray_withindex(void); -static void atk33_orbyte(void); -static void atk34_orhalfword(void); -static void atk35_orword(void); -static void atk36_bicbyte(void); -static void atk37_bichalfword(void); -static void atk38_bicword(void); -static void atk39_pause(void); -static void atk3A_waitstate(void); -static void atk3B_healthbar_update(void); -static void atk3C_return(void); -static void atk3D_end(void); -static void atk3E_end2(void); -static void atk3F_end3(void); -static void atk40_jump_if_move_affected_by_protect(void); -static void atk41_call(void); -static void atk42_jumpiftype2(void); -static void atk43_jumpifabilitypresent(void); -static void atk44(void); -static void atk45_playanimation(void); -static void atk46_playanimation2(void); -static void atk47_setgraphicalstatchangevalues(void); -static void atk48_playstatchangeanimation(void); -static void atk49_moveendturn(void); -static void atk4A_typecalc2(void); -static void atk4B_return_atk_to_ball(void); -static void atk4C_copy_poke_data(void); -static void atk4D_switch_data_update(void); -static void atk4E_switchin_anim(void); -static void atk4F_jump_if_cannot_switch(void); -static void atk50_openpartyscreen(void); -static void atk51_switch_handle_order(void); -static void atk52_switch_in_effects(void); -static void atk53_trainer_slide(void); -static void atk54_effectiveness_sound(void); -static void atk55_play_sound(void); -static void atk56_fainting_cry(void); -static void atk57(void); -static void atk58_return_to_ball(void); -void atk59_learnmove_inbattle(void); -static void atk5A(void); -static void atk5B_80256E0(void); -static void atk5C_hitanimation(void); -static void atk5D_getmoneyreward(void); -static void atk5E_8025A70(void); -static void atk5F_8025B24(void); -static void atk60_increment_gamestat(void); -static void atk61_8025BA4(void); -static void atk62_08025C6C(void); -static void atk63_jumptorandomattack(void); -static void atk64_statusanimation(void); -static void atk65_status2animation(void); -static void atk66_chosenstatusanimation(void); -static void atk67_8025ECC(void); -static void atk68_80246A0(void); -static void atk69_dmg_adjustment2(void); -void atk6A_removeitem(void); -static void atk6B_atknameinbuff1(void); -static void atk6C_lvlbox_display(void); -static void atk6D_set_sentpokes_values(void); -static void atk6E_set_atk_to_player0(void); -static void atk6F_set_visible(void); -static void atk70_record_ability(void); -static void atk71_buffer_move_to_learn(void); -static void atk72_jump_if_can_run_frombattle(void); -static void atk73_hp_thresholds(void); -static void atk74_hp_thresholds2(void); -static void atk75_8026A58(void); -static void atk76_various(void); -static void atk77_setprotect(void); -static void atk78_faintifabilitynotdamp(void); -static void atk79_setatkhptozero(void); -static void atk7A_jumpwhiletargetvalid(void); -static void atk7B_healhalfHP_if_possible(void); -static void atk7C_8025508(void); -static void atk7D_set_rain(void); -static void atk7E_setreflect(void); -static void atk7F_setseeded(void); -static void atk80_manipulatedamage(void); -static void atk81_setrest(void); -static void atk82_jumpifnotfirstturn(void); -static void atk83_nop(void); -static void atk84_jump_if_cant_sleep(void); -static void atk85_stockpile(void); -static void atk86_stockpiletobasedamage(void); -static void atk87_stockpiletohpheal(void); -static void atk88_negativedamage(void); -static void atk89_statbuffchange(void); -static void atk8A_normalisebuffs(void); -static void atk8B_setbide(void); -static void atk8C_confuseifrepeatingattackends(void); -static void atk8D_setmultihit_counter(void); -static void atk8E_prepare_multihit(void); -static void atk8F_forcerandomswitch(void); -static void atk90_conversion_type_change(void); -static void atk91_givepaydaymoney(void); -static void atk92_setlightscreen(void); -static void atk93_ko_move(void); -static void atk94_gethalfcurrentenemyhp(void); -static void atk95_setsandstorm(void); -static void atk96_weatherdamage(void); -static void atk97_try_infatuation(void); -static void atk98_status_icon_update(void); -static void atk99_setmist(void); -static void atk9A_set_focusenergy(void); -static void atk9B_transformdataexecution(void); -static void atk9C_set_substitute(void); -static void atk9D_copyattack(void); -static void atk9E_metronome(void); -static void atk9F_dmgtolevel(void); -static void atkA0_psywavedamageeffect(void); -static void atkA1_counterdamagecalculator(void); -static void atkA2_mirrorcoatdamagecalculator(void); -static void atkA3_disablelastusedattack(void); -static void atkA4_setencore(void); -static void atkA5_painsplitdmgcalc(void); -static void atkA6_settypetorandomresistance(void); -static void atkA7_setalwayshitflag(void); -static void atkA8_copymovepermanently(void); -static void atkA9_sleeptalk_choose_move(void); -static void atkAA_set_destinybond(void); -static void atkAB_DestinyBondFlagUpdate(void); -static void atkAC_remaininghptopower(void); -static void atkAD_spite_ppreduce(void); -static void atkAE_heal_party_status(void); -static void atkAF_cursetarget(void); -static void atkB0_set_spikes(void); -static void atkB1_set_foresight(void); -static void atkB2_setperishsong(void); -static void atkB3_rolloutdamagecalculation(void); -static void atkB4_jumpifconfusedandstatmaxed(void); -static void atkB5_furycuttercalc(void); -static void atkB6_happinesstodamagecalculation(void); -static void atkB7_presentdamagecalculation(void); -static void atkB8_set_safeguard(void); -static void atkB9_magnitudedamagecalculation(void); -static void atkBA_jumpifnopursuitswitchdmg(void); -static void atkBB_setsunny(void); -static void atkBC_maxattackhalvehp(void); -static void atkBD_copyfoestats(void); -static void atkBE_breakfree(void); -static void atkBF_set_defense_curl(void); -static void atkC0_recoverbasedonsunlight(void); -static void atkC1_hidden_power(void); -static void atkC2_selectnexttarget(void); -static void atkC3_setfutureattack(void); -static void atkC4_beat_up(void); -static void atkC5_hidepreattack(void); -static void atkC6_unhidepostattack(void); -static void atkC7_setminimize(void); -static void atkC8_sethail(void); -static void atkC9_jumpifattackandspecialattackcannotfall(void); -static void atkCA_setforcedtarget(void); -static void atkCB_setcharge(void); -static void atkCC_callterrainattack(void); -static void atkCD_cureifburnedparalysedorpoisoned(void); -static void atkCE_settorment(void); -static void atkCF_jumpifnodamage(void); -static void atkD0_settaunt(void); -static void atkD1_set_helpinghand(void); -static void atkD2_swap_items(void); -static void atkD3_copy_ability(void); -static void atkD4_wish_effect(void); -static void atkD5_setroots(void); -static void atkD6_doubledamagedealtifdamaged(void); -static void atkD7_setyawn(void); -static void atkD8_setdamagetohealthdifference(void); -static void atkD9_scaledamagebyhealthratio(void); -static void atkDA_abilityswap(void); -static void atkDB_imprisoneffect(void); -static void atkDC_setgrudge(void); -static void atkDD_weightdamagecalculation(void); -static void atkDE_asistattackselect(void); -static void atkDF_setmagiccoat(void); -static void atkE0_setstealstatchange(void); -static void atkE1_intimidate_string_loader(void); -static void atkE2_switchout_abilities(void); -static void atkE3_jumpiffainted(void); -static void atkE4_getsecretpowereffect(void); -static void atkE5_pickup(void); -static void atkE6_castform_change_animation(void); -static void atkE7_castform_data_change(void); -static void atkE8_settypebasedhalvers(void); -static void atkE9_setweatherballtype(void); -static void atkEA_recycleitem(void); -static void atkEB_settypetoterrain(void); -static void atkEC_pursuit_sth(void); -static void atkED_802B4B4(void); -static void atkEE_removelightscreenreflect(void); -void atkEF_pokeball_catch_calculation(void); -static void atkF0_copy_caught_poke(void); -static void atkF1_setpoke_as_caught(void); -static void atkF2_display_dex_info(void); -static void atkF3_nickname_caught_poke(void); -static void atkF4_802BEF0(void); -static void atkF5_removeattackerstatus1(void); -static void atkF6_802BF48(void); -static void atkF7_802BF54(void); - -typedef void (*BattleCmdFunc)(void); - -const BattleCmdFunc gBattleScriptingCommandsTable[] = -{ - atk00_attackcanceler, - atk01_accuracycheck, - atk02_attackstring, - atk03_ppreduce, - atk04_critcalc, - atk05_damagecalc1, - atk06_typecalc, - atk07_dmg_adjustment, - atk08_dmg_adjustment2, - atk09_attackanimation, - atk0A_waitanimation, - atk0B_healthbarupdate, - atk0C_datahpupdate, - atk0D_critmessage, - atk0E_effectiveness_sound, - atk0F_resultmessage, - atk10_printstring, - atk11_printstring_playeronly, - atk12_waitmessage, - atk13_printfromtable, - atk14_printfromtable_playeronly, - atk15_seteffectwithchancetarget, - atk16_seteffectprimary, - atk17_seteffectsecondary, - atk18_status_effect_clear, - atk19_faint_pokemon, - atk1A_faint_animation, - atk1B_faint_effects_clear, - atk1C_jumpifstatus, - atk1D_jumpifstatus2, - atk1E_jumpifability, - atk1F_jumpifsideaffecting, - atk20_jumpifstat, - atk21_jumpifstatus3, - atk22_jumpiftype, - atk23_getexp, - atk24, - atk25_move_values_cleanup, - atk26_set_multihit, - atk27_decrement_multihit, - atk28_goto, - atk29_jumpifbyte, - atk2A_jumpifhalfword, - atk2B_jumpifword, - atk2C_jumpifarrayequal, - atk2D_jumpifarraynotequal, - atk2E_setbyte, - atk2F_addbyte, - atk30_subbyte, - atk31_copyarray, - atk32_copyarray_withindex, - atk33_orbyte, - atk34_orhalfword, - atk35_orword, - atk36_bicbyte, - atk37_bichalfword, - atk38_bicword, - atk39_pause, - atk3A_waitstate, - atk3B_healthbar_update, - atk3C_return, - atk3D_end, - atk3E_end2, - atk3F_end3, - atk40_jump_if_move_affected_by_protect, - atk41_call, - atk42_jumpiftype2, - atk43_jumpifabilitypresent, - atk44, - atk45_playanimation, - atk46_playanimation2, - atk47_setgraphicalstatchangevalues, - atk48_playstatchangeanimation, - atk49_moveendturn, - atk4A_typecalc2, - atk4B_return_atk_to_ball, - atk4C_copy_poke_data, - atk4D_switch_data_update, - atk4E_switchin_anim, - atk4F_jump_if_cannot_switch, - atk50_openpartyscreen, - atk51_switch_handle_order, - atk52_switch_in_effects, - atk53_trainer_slide, - atk54_effectiveness_sound, - atk55_play_sound, - atk56_fainting_cry, - atk57, - atk58_return_to_ball, - atk59_learnmove_inbattle, - atk5A, - atk5B_80256E0, - atk5C_hitanimation, - atk5D_getmoneyreward, - atk5E_8025A70, - atk5F_8025B24, - atk60_increment_gamestat, - atk61_8025BA4, - atk62_08025C6C, - atk63_jumptorandomattack, - atk64_statusanimation, - atk65_status2animation, - atk66_chosenstatusanimation, - atk67_8025ECC, - atk68_80246A0, - atk69_dmg_adjustment2, - atk6A_removeitem, - atk6B_atknameinbuff1, - atk6C_lvlbox_display, - atk6D_set_sentpokes_values, - atk6E_set_atk_to_player0, - atk6F_set_visible, - atk70_record_ability, - atk71_buffer_move_to_learn, - atk72_jump_if_can_run_frombattle, - atk73_hp_thresholds, - atk74_hp_thresholds2, - atk75_8026A58, - atk76_various, - atk77_setprotect, - atk78_faintifabilitynotdamp, - atk79_setatkhptozero, - atk7A_jumpwhiletargetvalid, - atk7B_healhalfHP_if_possible, - atk7C_8025508, - atk7D_set_rain, - atk7E_setreflect, - atk7F_setseeded, - atk80_manipulatedamage, - atk81_setrest, - atk82_jumpifnotfirstturn, - atk83_nop, - atk84_jump_if_cant_sleep, - atk85_stockpile, - atk86_stockpiletobasedamage, - atk87_stockpiletohpheal, - atk88_negativedamage, - atk89_statbuffchange, - atk8A_normalisebuffs, - atk8B_setbide, - atk8C_confuseifrepeatingattackends, - atk8D_setmultihit_counter, - atk8E_prepare_multihit, - atk8F_forcerandomswitch, - atk90_conversion_type_change, - atk91_givepaydaymoney, - atk92_setlightscreen, - atk93_ko_move, - atk94_gethalfcurrentenemyhp, - atk95_setsandstorm, - atk96_weatherdamage, - atk97_try_infatuation, - atk98_status_icon_update, - atk99_setmist, - atk9A_set_focusenergy, - atk9B_transformdataexecution, - atk9C_set_substitute, - atk9D_copyattack, - atk9E_metronome, - atk9F_dmgtolevel, - atkA0_psywavedamageeffect, - atkA1_counterdamagecalculator, - atkA2_mirrorcoatdamagecalculator, - atkA3_disablelastusedattack, - atkA4_setencore, - atkA5_painsplitdmgcalc, - atkA6_settypetorandomresistance, - atkA7_setalwayshitflag, - atkA8_copymovepermanently, - atkA9_sleeptalk_choose_move, - atkAA_set_destinybond, - atkAB_DestinyBondFlagUpdate, - atkAC_remaininghptopower, - atkAD_spite_ppreduce, - atkAE_heal_party_status, - atkAF_cursetarget, - atkB0_set_spikes, - atkB1_set_foresight, - atkB2_setperishsong, - atkB3_rolloutdamagecalculation, - atkB4_jumpifconfusedandstatmaxed, - atkB5_furycuttercalc, - atkB6_happinesstodamagecalculation, - atkB7_presentdamagecalculation, - atkB8_set_safeguard, - atkB9_magnitudedamagecalculation, - atkBA_jumpifnopursuitswitchdmg, - atkBB_setsunny, - atkBC_maxattackhalvehp, - atkBD_copyfoestats, - atkBE_breakfree, - atkBF_set_defense_curl, - atkC0_recoverbasedonsunlight, - atkC1_hidden_power, - atkC2_selectnexttarget, - atkC3_setfutureattack, - atkC4_beat_up, - atkC5_hidepreattack, - atkC6_unhidepostattack, - atkC7_setminimize, - atkC8_sethail, - atkC9_jumpifattackandspecialattackcannotfall, - atkCA_setforcedtarget, - atkCB_setcharge, - atkCC_callterrainattack, - atkCD_cureifburnedparalysedorpoisoned, - atkCE_settorment, - atkCF_jumpifnodamage, - atkD0_settaunt, - atkD1_set_helpinghand, - atkD2_swap_items, - atkD3_copy_ability, - atkD4_wish_effect, - atkD5_setroots, - atkD6_doubledamagedealtifdamaged, - atkD7_setyawn, - atkD8_setdamagetohealthdifference, - atkD9_scaledamagebyhealthratio, - atkDA_abilityswap, - atkDB_imprisoneffect, - atkDC_setgrudge, - atkDD_weightdamagecalculation, - atkDE_asistattackselect, - atkDF_setmagiccoat, - atkE0_setstealstatchange, - atkE1_intimidate_string_loader, - atkE2_switchout_abilities, - atkE3_jumpiffainted, - atkE4_getsecretpowereffect, - atkE5_pickup, - atkE6_castform_change_animation, - atkE7_castform_data_change, - atkE8_settypebasedhalvers, - atkE9_setweatherballtype, - atkEA_recycleitem, - atkEB_settypetoterrain, - atkEC_pursuit_sth, - atkED_802B4B4, - atkEE_removelightscreenreflect, - atkEF_pokeball_catch_calculation, - atkF0_copy_caught_poke, - atkF1_setpoke_as_caught, - atkF2_display_dex_info, - atkF3_nickname_caught_poke, - atkF4_802BEF0, - atkF5_removeattackerstatus1, - atkF6_802BF48, - atkF7_802BF54, -}; - -struct statFractions -{ - u8 dividend; - u8 divisor; -}; - -static const struct statFractions gAccuracyStageRatios[] = -{ - { 33, 100}, // -6 - { 36, 100}, // -5 - { 43, 100}, // -4 - { 50, 100}, // -3 - { 60, 100}, // -2 - { 75, 100}, // -1 - { 1, 1}, // 0 - {133, 100}, // +1 - {166, 100}, // +2 - { 2, 1}, // +3 - {233, 100}, // +4 - {133, 50}, // +5 - { 3, 1}, // +6 -}; - -//The chance is 1/N for each stage. -static const u16 gCriticalHitChance[] = {16, 8, 4, 3, 2}; - -static const u32 gStatusFlagsForMoveEffects[] = -{ - 0x00000000, - 0x00000007, - 0x00000008, - 0x00000010, - 0x00000020, - 0x00000040, - 0x00000080, - 0x00000007, - 0x00000008, - 0x00000000, - 0x00000070, - 0x00000000, - 0x00001000, - 0x0000E000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00400000, - 0x00000000, - 0x00000000, - 0x04000000, - 0x08000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000C00, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - 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[]; - -const u8* const gMoveEffectBS_Ptrs[] = -{ - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D965A, - BattleScript_1D9669, - BattleScript_1D9678, - BattleScript_1D9687, - BattleScript_1D969D, - BattleScript_1D96BA, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D9696, - BattleScript_1D96AA, - BattleScript_1D963E, - BattleScript_1D96B1, - BattleScript_1D96C8, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D963E, - BattleScript_1D96C8 -}; - -const u8 sUnreferencedBitMask1[] = {0, 1, 3, 7, 0xF, 0x1F, 0x3F}; - -const u8 gLevelUpStatBoxStats[] = {MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPD}; - -static const u16 sProtectSuccessRates[] = {0xFFFF, 0x7FFF, 0x3FFF, 0x1FFF}; - -static const u16 sUnknown_081FACFE[] = //banned moves to copy -{ - MOVE_METRONOME, - MOVE_STRUGGLE, - MOVE_SKETCH, - MOVE_MIMIC, - 0xFFFE, - MOVE_COUNTER, - MOVE_MIRROR_COAT, - MOVE_PROTECT, - MOVE_DETECT, - MOVE_ENDURE, - MOVE_DESTINY_BOND, - MOVE_SLEEP_TALK, - MOVE_THIEF, - MOVE_FOLLOW_ME, - MOVE_SNATCH, - MOVE_HELPING_HAND, - MOVE_COVET, - MOVE_TRICK, - MOVE_FOCUS_PUNCH, - 0xFFFF -}; - -static const u8 sUnknown_081FAD26[] = -{ - 1, 200, - 4, 150, - 9, 100, - 16, 80, - 32, 40, - 48, 20 -}; - -static const u16 sNaturePowerMoves[] = -{ - MOVE_STUN_SPORE, - MOVE_RAZOR_LEAF, - MOVE_EARTHQUAKE, - MOVE_HYDRO_PUMP, - MOVE_SURF, - MOVE_BUBBLE_BEAM, - MOVE_ROCK_SLIDE, - MOVE_SHADOW_BALL, - MOVE_SWIFT, - MOVE_SWIFT -}; - -//weight-based damage table for Low Kick -//format: min. weight (hectograms), base power -static const u16 sWeightDamage[] = -{ - 100, 20, - 250, 40, - 500, 60, - 1000, 80, - 2000, 100, - -1, -1 -}; - -static const u16 sPickupItems[] = -{ - ITEM_SUPER_POTION, 30, - ITEM_FULL_HEAL, 40, - ITEM_ULTRA_BALL, 50, - ITEM_RARE_CANDY, 60, - ITEM_FULL_RESTORE, 70, - ITEM_REVIVE, 80, - ITEM_NUGGET, 90, - ITEM_PROTEIN, 95, - ITEM_PP_UP, 99, - ITEM_KINGS_ROCK, 1 -}; - -static const u8 sTerrainToType[] = -{ - TYPE_GRASS, // tall grass - TYPE_GRASS, // long grass - TYPE_GROUND, // sand - TYPE_WATER, // underwater - TYPE_WATER, // water - TYPE_WATER, // pond water - TYPE_ROCK , // rock - TYPE_ROCK , // cave - TYPE_NORMAL, // building - TYPE_NORMAL, // plain -}; - -static const u8 sBallCatchBonuses[] = -{ - 20, 15, 10, 15 //Ultra, Great, Poke, Safari -}; - -static void atk00_attackcanceler(void) -{ - int i; - if (gBattleOutcome) - { - gFightStateTracker = 0xC; - return; - } - if (gBattleMons[gBankAttacker].hp == 0 && !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) - { - gHitMarker |= HITMARKER_x80000; - gBattlescriptCurrInstr = BattleScript_EndTurn; - return; - } - if (CantUseMove()) - return; - if (AbilityBattleEffects(2, gBankTarget, 0, 0, 0)) - return; - if (!gBattleMons[gBankAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE && !(gHitMarker & 0x800200) - && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) - { - gBattlescriptCurrInstr = BattleScript_NoPPForMove; - gBattleMoveFlags |= MOVESTATUS_MISSED; - return; - } - gHitMarker &= ~(HITMARKER_x800000); - if (!(gHitMarker & HITMARKER_OBEYS) && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) - { - u8 disobedient = IsPokeDisobedient(); - asm("":::"r0"); //It's impossible to match - asm("":::"r1"); - if ((disobedient)) - { - if (disobedient == 2) - gHitMarker |= HITMARKER_OBEYS; - else - gBattleMoveFlags |= MOVESTATUS_MISSED; - return; - } - } - gHitMarker |= HITMARKER_OBEYS; - if (gProtectStructs[gBankTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGICCOAT_AFFECTED) - { - PressurePPLose(gBankAttacker, gBankTarget, MOVE_MAGIC_COAT); - gProtectStructs[gBankTarget].bounceMove = 0; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_MagicCoatBounce; - return; - } - for (i = 0; i < gNoOfAllBanks; i++) - { - if ((gProtectStructs[gTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) - { - PressurePPLose(gBankAttacker, gTurnOrder[i], MOVE_SNATCH); - gProtectStructs[gTurnOrder[i]].stealMove = 0; - BATTLE_STRUCT->scriptingActive = gTurnOrder[i]; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_SnatchedMove; - return; - } - } - if (gSpecialStatuses[gBankTarget].lightningRodRedirected) - { - gSpecialStatuses[gBankTarget].lightningRodRedirected = 0; - gLastUsedAbility = ABILITY_LIGHTNING_ROD; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_TookAttack; - RecordAbilityBattle(gBankTarget, gLastUsedAbility); - } - else if (TargetProtectAffected - && (gCurrentMove != MOVE_CURSE || (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST)) - && ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)))) - { - CancelMultiTurnMoves(gBankAttacker); - gBattleMoveFlags |= MOVESTATUS_MISSED; - gMoveHitWith[gBankTarget] = 0; - gUnknown_02024C44[gBankTarget] = 0; - gBattleCommunication[6] = 1; - gBattlescriptCurrInstr++; - } - else - { - gBattlescriptCurrInstr++; - } -} - -static void JumpIfMoveFailed(u8 adder, u16 move) -{ - void* to_store = gBattlescriptCurrInstr + adder; - if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) - { - gMoveHitWith[gBankTarget] = 0; - gUnknown_02024C44[gBankTarget] = 0; - to_store = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } - else - { - DestinyBondFlagUpdate(); - if (AbilityBattleEffects(3, gBankTarget, 0, 0, move)) - return; - } - gBattlescriptCurrInstr = to_store; -} - -static void atk40_jump_if_move_affected_by_protect(void) -{ - if (TargetProtectAffected) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - JumpIfMoveFailed(5, 0); - gBattleCommunication[6] = 1; - } - else - { - gBattlescriptCurrInstr += 5; - } -} - -static bool8 JumpIfMoveAffectedByProtect(u16 move) -{ - bool8 affected = 0; - if (TargetProtectAffected) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - JumpIfMoveFailed(7, move); - gBattleCommunication[6] = 1; - affected = 1; - } - return affected; -} - -static bool8 AccuracyCalcHelper(u16 move) -{ - if (gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBankTarget].bankWithSureHit == gBankAttacker) - { - JumpIfMoveFailed(7, move); - return TRUE; - } - - if (!(gHitMarker & HITMARKER_IGNORE_ON_AIR) && gStatuses3[gBankTarget] & STATUS3_ON_AIR) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - JumpIfMoveFailed(7, move); - return TRUE; - } - gHitMarker &= ~HITMARKER_IGNORE_ON_AIR; - - if (!(gHitMarker & HITMARKER_IGNORE_UNDERGROUND) && gStatuses3[gBankTarget] & STATUS3_UNDERGROUND) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - JumpIfMoveFailed(7, move); - return TRUE; - } - gHitMarker &= ~HITMARKER_IGNORE_UNDERGROUND; - - if (!(gHitMarker & HITMARKER_IGNORE_UNDERWATER) && gStatuses3[gBankTarget] & STATUS3_UNDERWATER) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - JumpIfMoveFailed(7, move); - return TRUE; - } - gHitMarker &= ~HITMARKER_IGNORE_UNDERWATER; - - if ((WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) && gBattleMoves[move].effect == EFFECT_THUNDER) - || (gBattleMoves[move].effect == EFFECT_ALWAYS_HIT || gBattleMoves[move].effect == EFFECT_VITAL_THROW)) - { - JumpIfMoveFailed(7, move); - return TRUE; - } - return FALSE; -} - -static void atk01_accuracycheck(void) -{ - u16 move = BS2ScriptRead16(gBattlescriptCurrInstr + 5); - if (move == 0xFFFE || move == 0xFFFF) - { - if (gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBankTarget].bankWithSureHit == gBankAttacker) - gBattlescriptCurrInstr += 7; - else if (gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else if (!JumpIfMoveAffectedByProtect(0)) - gBattlescriptCurrInstr += 7; - } - else - { - u8 type; s8 buff; u8 MoveAcc; u16 calc; u8 hold_effect; u8 quality; - if (move == 0) {move = gCurrentMove;} - - if (BATTLE_STRUCT->dynamicMoveType) - type = BATTLE_STRUCT->dynamicMoveType & 0x3F; - else - type = gBattleMoves[move].type; - - if (JumpIfMoveAffectedByProtect(move)) - return; - if (AccuracyCalcHelper(move)) - return; - - if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) - { - u8 acc = gBattleMons[gBankAttacker].statStages[STAT_STAGE_ACC]; - buff = acc; - } - else - { - u8 acc = gBattleMons[gBankAttacker].statStages[STAT_STAGE_ACC]; - buff = acc + 6 - gBattleMons[gBankTarget].statStages[STAT_STAGE_EVASION]; - } - - if (buff < 0) {buff = 0;} - if (buff > 0xC) {buff = 0xC;} - - MoveAcc = gBattleMoves[move].accuracy; - //check Thunder on sunny weather - if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && gBattleMoves[move].effect == EFFECT_THUNDER) - MoveAcc = 50; - - calc = gAccuracyStageRatios[buff].dividend * MoveAcc; - calc /= gAccuracyStageRatios[buff].divisor; - - if (gBattleMons[gBankAttacker].ability == ABILITY_COMPOUND_EYES) - calc = (calc * 130) / 100; //1.3 compound eyes boost - if (WEATHER_HAS_EFFECT && gBattleMons[gBankTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & WEATHER_SANDSTORM_ANY) - calc = (calc * 80) / 100; //1.2 sand veil loss; - if (gBattleMons[gBankAttacker].ability == ABILITY_HUSTLE && type < 9) - calc = (calc * 80) / 100; //1.2 hustle loss; - - if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) - hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; - else - { - hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); - quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); - } - - gStringBank = gBankTarget; - - if (hold_effect == HOLD_EFFECT_EVASION_UP) - calc = (calc * (100 - quality)) / 100; - - //final calculation - if ((Random() % 100 + 1) > calc) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && (gBattleMoves[move].target == 0x8 || gBattleMoves[move].target == 0x20)) - gBattleCommunication[6] = 2; - else - gBattleCommunication[6] = 0; - b_wonderguard_and_levitate(); - - } - JumpIfMoveFailed(7, move); - } -} - -static void atk02_attackstring(void) -{ - if (gBattleExecBuffer) - return; - if (!(gHitMarker & (HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED))) - { - PrepareStringBattle(4, gBankAttacker); - gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED; - } - gBattlescriptCurrInstr++; - gBattleCommunication[MSG_DISPLAY] = 0; -} - -static void atk03_ppreduce(void) -{ - int to_deduct = 1; - if (gBattleExecBuffer) - return; - if (!gSpecialStatuses[gBankAttacker].flag20) - { - switch (gBattleMoves[gCurrentMove].target) - { - case TARGET_FOES_AND_ALLY: - to_deduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_ON_FIELD, gBankAttacker, ABILITY_PRESSURE, 0, 0); - break; - case TARGET_BOTH: - case TARGET_OPPONENTS_FIELD: - to_deduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIZE, gBankAttacker, ABILITY_PRESSURE, 0, 0); - break; - default: - if (gBankAttacker != gBankTarget && gBattleMons[gBankTarget].ability == ABILITY_PRESSURE) - to_deduct++; - break; - } - } - if (!(gHitMarker & (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING)) && gBattleMons[gBankAttacker].pp[gCurrMovePos]) - { - gProtectStructs[gBankAttacker].notFirstStrike = 1; - if (gBattleMons[gBankAttacker].pp[gCurrMovePos] > to_deduct) - gBattleMons[gBankAttacker].pp[gCurrMovePos] -= to_deduct; - else - gBattleMons[gBankAttacker].pp[gCurrMovePos] = 0; - - if (!(gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED) - && !((gDisableStructs[gBankAttacker].unk18_b) & gBitTable[gCurrMovePos])) - { - gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0, 1, &gBattleMons[gBankAttacker].pp[gCurrMovePos]); - MarkBufferBankForExecution(gBankAttacker); - } - } - gHitMarker &= ~(HITMARKER_NO_PPDEDUCT); - gBattlescriptCurrInstr++; -} - -static void atk04_critcalc(void) -{ - u8 hold_effect; u16 item; u16 crit_chance; int adderv3, adderv5, adderv6, adderv7, adderv8, adderv9, adderv10, adderv11; u16 adderv12; - item = gBattleMons[gBankAttacker].item; - if (item == ITEM_ENIGMA_BERRY) - hold_effect = gEnigmaBerries[gBankAttacker].holdEffect; - else - hold_effect = ItemId_GetHoldEffect(item); - - gStringBank = gBankAttacker; - - if (gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY) - adderv3 = 2; - else - adderv3 = 0; - - if (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL) {adderv3++;} - adderv5 = adderv3; - if (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK) {adderv5 = adderv3 + 1;} - - if (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK) {adderv5++;} - adderv6 = adderv5; - if (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL) {adderv6 = adderv5 + 1;} - - adderv7 = 0; - if (hold_effect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBankAttacker].species == SPECIES_CHANSEY) {adderv7 = 1;} - adderv8 = 2 * adderv7; - adderv9 = 0; - if (hold_effect == HOLD_EFFECT_STICK && gBattleMons[gBankAttacker].species == SPECIES_FARFETCHD) {adderv9 = 1;} - adderv11 = 2 * adderv9; - if (hold_effect == HOLD_EFFECT_SCOPE_LENS) - {adderv10 = 1 + adderv6 + adderv8; adderv12 = adderv10 + adderv11;} - else - {adderv10 = adderv6 + adderv8; adderv12 = adderv10 + adderv11;} - - crit_chance = adderv12; - - if (crit_chance > 4) {crit_chance = 4;} - - if ((gBattleMons[gBankTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBankTarget].ability != ABILITY_SHELL_ARMOR) - && !(gStatuses3[gBankAttacker] & STATUS3_CANT_SCORE_A_CRIT) - && !(gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE)) - && !(Random() % gCriticalHitChance[crit_chance])) - gCritMultiplier = 2; - else - gCritMultiplier = 1; - gBattlescriptCurrInstr++; -} - -static void atk05_damagecalc1(void) -{ - u16 side_hword = gSideAffecting[GetBankIdentity(gBankTarget) & 1]; - gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove, - side_hword, gDynamicBasePower, - BATTLE_STRUCT->dynamicMoveType, gBankAttacker, gBankTarget); - gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier; - - if (gStatuses3[gBankAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) - gBattleMoveDamage *= 2; - if (gProtectStructs[gBankAttacker].helpingHand) - gBattleMoveDamage = gBattleMoveDamage * 15 / 10; - - gBattlescriptCurrInstr++; -} - -void AI_CalcDmg(u8 BankAtk, u8 BankDef) -{ - u16 side_hword = gSideAffecting[GetBankIdentity(BankDef) & 1]; - gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[BankAtk], &gBattleMons[BankDef], gCurrentMove, - side_hword, gDynamicBasePower, - BATTLE_STRUCT->dynamicMoveType, BankAtk, BankDef); - gDynamicBasePower = 0; - gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier; - - if (gStatuses3[BankAtk] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) - gBattleMoveDamage *= 2; - if (gProtectStructs[BankAtk].helpingHand) - gBattleMoveDamage = gBattleMoveDamage * 15 / 10; -} - -static void ModulateDmgByType(u8 multiplier) -{ - gBattleMoveDamage = gBattleMoveDamage * multiplier / 10; - if (gBattleMoveDamage == 0 && multiplier != 0) - gBattleMoveDamage = 1; - - switch (multiplier) - { - case 0: //no effect - gBattleMoveFlags |= MOVESTATUS_NOTAFFECTED; - gBattleMoveFlags &= ~MOVESTATUS_NOTVERYEFFECTIVE; - gBattleMoveFlags &= ~MOVESTATUS_SUPEREFFECTIVE; - break; - case 5: //not very effecting - if (gBattleMoves[gCurrentMove].power && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) - { - if (gBattleMoveFlags & MOVESTATUS_SUPEREFFECTIVE) - gBattleMoveFlags &= ~MOVESTATUS_SUPEREFFECTIVE; - else - gBattleMoveFlags |= MOVESTATUS_NOTVERYEFFECTIVE; - } - break; - case 20: //super effective - if (gBattleMoves[gCurrentMove].power && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) - { - if (gBattleMoveFlags & MOVESTATUS_NOTVERYEFFECTIVE) - gBattleMoveFlags &= ~MOVESTATUS_NOTVERYEFFECTIVE; - else - gBattleMoveFlags |= MOVESTATUS_SUPEREFFECTIVE; - } - break; - } -} - -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) - { - gBattleMoveDamage = gBattleMoveDamage * 15; - gBattleMoveDamage = gBattleMoveDamage / 10; - } - - 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) - { - 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; - } - } - - 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; - - END: - gBattlescriptCurrInstr++; -} - -static void b_wonderguard_and_levitate(void) -{ - u8 flags = 0; - int i = 0; - u8 move_type; - - if (gCurrentMove == MOVE_STRUGGLE || !gBattleMoves[gCurrentMove].power) - return; - - 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) - { - RecordAbilitySetField6(ABILITY_LEVITATE, move_type); - return; - } - - while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) - { - if (gTypeEffectiveness[i] == TYPE_FORESIGHT) - { - if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) - break; - i += 3; - continue; - } - - if (gTypeEffectiveness[i] == move_type) - { - //check no effect - if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1 && gTypeEffectiveness[i + 2] == 0) - { - gBattleMoveFlags |= MOVESTATUS_NOTAFFECTED; - gProtectStructs[gBankAttacker].notEffective = 1; - } - if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 && - gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 && - gTypeEffectiveness[i + 2] == 0) - { - gBattleMoveFlags |= MOVESTATUS_NOTAFFECTED; - gProtectStructs[gBankAttacker].notEffective = 1; - } - - //check super effective - if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1 && gTypeEffectiveness[i + 2] == 20) - flags |= 1; - if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 - && gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 - && gTypeEffectiveness[i + 2] == 20) - flags |= 1; - - //check not very effective - if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1 && gTypeEffectiveness[i + 2] == 5) - flags |= 2; - if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 - && gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 - && gTypeEffectiveness[i + 2] == 5) - flags |= 2; - } - i += 3; - } - - if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2) - { - if (((flags & 2) || !(flags & 1)) && gBattleMoves[gCurrentMove].power) - { - RecordAbilitySetField6(ABILITY_WONDER_GUARD, 3); - } - } -} - -static void ModulateDmgByType2(u8 multiplier, u16 move, u8* flags) //a literal copy of the ModulateDmgbyType1 with different args... -{ - gBattleMoveDamage = gBattleMoveDamage * multiplier / 10; - if (gBattleMoveDamage == 0 && multiplier != 0) - gBattleMoveDamage = 1; - - switch (multiplier) - { - case 0: //no effect - *flags |= MOVESTATUS_NOTAFFECTED; - *flags &= ~MOVESTATUS_NOTVERYEFFECTIVE; - *flags &= ~MOVESTATUS_SUPEREFFECTIVE; - break; - case 5: //not very effecting - if (gBattleMoves[move].power && !(*flags & MOVESTATUS_NOEFFECT)) - { - if (*flags & MOVESTATUS_SUPEREFFECTIVE) - *flags &= ~MOVESTATUS_SUPEREFFECTIVE; - else - *flags |= MOVESTATUS_NOTVERYEFFECTIVE; - } - break; - case 20: //super effective - if (gBattleMoves[move].power && !(*flags & MOVESTATUS_NOEFFECT)) - { - if (*flags & MOVESTATUS_NOTVERYEFFECTIVE) - *flags &= ~MOVESTATUS_NOTVERYEFFECTIVE; - else - *flags |= MOVESTATUS_SUPEREFFECTIVE; - } - break; - } -} - -#ifdef NONMATCHING -u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def) -{ - int i = 0; - u8 flags = 0; - u8 move_type; - - if (move == MOVE_STRUGGLE) - return 0; - - move_type = gBattleMoves[move].type; - - //check stab - if (gBattleMons[bank_atk].type1 == move_type || gBattleMons[bank_atk].type2 == move_type) - { - gBattleMoveDamage = gBattleMoveDamage * 15; - gBattleMoveDamage = gBattleMoveDamage / 10; - } - - if (gBattleMons[bank_def].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND) - { - flags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED); - } - else - { - while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) - { - if (gTypeEffectiveness[i] == TYPE_FORESIGHT) - { - if (gBattleMons[bank_def].status2 & STATUS2_FORESIGHT) - break; - i += 3; - continue; - } - - else if (gTypeEffectiveness[i] == move_type) - { - //check type1 - if (gTypeEffectiveness[i + 1] == gBattleMons[bank_def].type1) - ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags); - //check type2 - if (gTypeEffectiveness[i + 1] == gBattleMons[bank_def].type2 && - gBattleMons[bank_def].type1 != gBattleMons[bank_def].type2) - ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags); - } - i += 3; - } - } - - if (gBattleMons[bank_def].ability == ABILITY_WONDER_GUARD && !(flags & MOVESTATUS_MISSED) && - AttacksThisTurn(bank_atk, move) == 2 && - (!(flags & MOVESTATUS_SUPEREFFECTIVE) || ((flags & (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)) == (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE))) && - gBattleMoves[move].power) - { - flags |= MOVESTATUS_MISSED; - } - 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) -{ - int i = 0; - u8 flags = 0; - u8 type1 = gBaseStats[species].type1, type2 = gBaseStats[species].type2, move_type; - - if (move == MOVE_STRUGGLE) - return 0; - - move_type = gBattleMoves[move].type; - - if (ability == ABILITY_LEVITATE && move_type == TYPE_GROUND) - flags = MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED; - else - { - while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) - { - if (gTypeEffectiveness[i] == TYPE_FORESIGHT) - { - i += 3; - continue; - } - if (gTypeEffectiveness[i] == move_type) - { - //check type1 - if (gTypeEffectiveness[i + 1] == type1) - ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags); - //check type2 - if (gTypeEffectiveness[i + 1] == type2 && gBattleMons[gBankTarget].type1 != type2) //gf you morons, you should check if (type1 != type2)... - ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags); - } - i += 3; - } - } - if (ability == ABILITY_WONDER_GUARD - && (!(flags & MOVESTATUS_SUPEREFFECTIVE) || ((flags & (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)) == (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE))) - && gBattleMoves[move].power) - flags |= MOVESTATUS_NOTAFFECTED; - return flags; -} - -// Multiplies the damage by a random factor between 85% to 100% inclusive -static inline void ApplyRandomDmgMultiplier(void) -{ - u16 rand = Random(); - u16 randPercent = 100 - (rand % 16); - - if (gBattleMoveDamage != 0) - { - gBattleMoveDamage *= randPercent; - gBattleMoveDamage /= 100; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - } -} - -void Unused_ApplyRandomDmgMultiplier(void) -{ - ApplyRandomDmgMultiplier(); -} - -static void atk07_dmg_adjustment(void) -{ - u8 hold_effect, quality; - ApplyRandomDmgMultiplier(); - if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) - { - hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; - } - else - { - hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); - quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); - } - - gStringBank = gBankTarget; - - if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality) - { - RecordItemBattle(gBankTarget, hold_effect); - gSpecialStatuses[gBankTarget].focusBanded = 1; - } - if (gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE) - goto END; - if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBankTarget].endured - && !gSpecialStatuses[gBankTarget].focusBanded) - goto END; - - if (gBattleMons[gBankTarget].hp > gBattleMoveDamage) - goto END; - - gBattleMoveDamage = gBattleMons[gBankTarget].hp - 1; - - if (gProtectStructs[gBankTarget].endured) - { - gBattleMoveFlags |= MOVESTATUS_ENDURED; - goto END; - } - if (gSpecialStatuses[gBankTarget].focusBanded) - { - gBattleMoveFlags |= MOVESTATUS_HUNGON; - gLastUsedItem = gBattleMons[gBankTarget].item; - } - - END: - gBattlescriptCurrInstr++; -} - -static void atk08_dmg_adjustment2(void) //literally the same as 0x7 except it doesn't check for false swipe move effect... -{ - u8 hold_effect, quality; - ApplyRandomDmgMultiplier(); - if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) - { - hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; - } - else - { - hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); - quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); - } - - gStringBank = gBankTarget; - - if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality) - { - RecordItemBattle(gBankTarget, hold_effect); - gSpecialStatuses[gBankTarget].focusBanded = 1; - } - if (gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE) - goto END; - if (!gProtectStructs[gBankTarget].endured - && !gSpecialStatuses[gBankTarget].focusBanded) - goto END; - - if (gBattleMons[gBankTarget].hp > gBattleMoveDamage) - goto END; - - gBattleMoveDamage = gBattleMons[gBankTarget].hp - 1; - - if (gProtectStructs[gBankTarget].endured) - { - gBattleMoveFlags |= MOVESTATUS_ENDURED; - goto END; - } - if (gSpecialStatuses[gBankTarget].focusBanded) - { - gBattleMoveFlags |= MOVESTATUS_HUNGON; - gLastUsedItem = gBattleMons[gBankTarget].item; - } - - END: - gBattlescriptCurrInstr++; -} - -static void atk09_attackanimation(void) -{ - if (gBattleExecBuffer) - return; - - if ((gHitMarker & HITMARKER_NO_ANIMATIONS) && (gCurrentMove != MOVE_TRANSFORM && gCurrentMove != MOVE_SUBSTITUTE)) - { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_Pausex20; - BATTLE_STRUCT->animTurn += 1; - BATTLE_STRUCT->animTargetsHit += 1; - } - else - { - if ((gBattleMoves[gCurrentMove].target & TARGET_BOTH || gBattleMoves[gCurrentMove].target & TARGET_FOES_AND_ALLY || gBattleMoves[gCurrentMove].target & TARGET_DEPENDS) && BATTLE_STRUCT->animTargetsHit) - { - gBattlescriptCurrInstr++; - return; - } - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) - { - gActiveBank = gBankAttacker; - - EmitMoveAnimation(0, gCurrentMove, BATTLE_STRUCT->animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBankAttacker].friendship, &gDisableStructs[gBankAttacker]); - BATTLE_STRUCT->animTurn += 1; - BATTLE_STRUCT->animTargetsHit += 1; - MarkBufferBankForExecution(gBankAttacker); - gBattlescriptCurrInstr++; - } - else - { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_Pausex20; - } - } -} - -static void atk0A_waitanimation(void) -{ - if (gBattleExecBuffer == 0) - gBattlescriptCurrInstr++; -} - -static void atk0B_healthbarupdate(void) -{ - if (gBattleExecBuffer) - return; - if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) - goto END; - - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - - if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) - { - PrepareStringBattle(0x80, gActiveBank); - goto END; - } - - EmitHealthBarUpdate(0, gBattleMoveDamage); - MarkBufferBankForExecution(gActiveBank); - - if (!GetBankSide(gActiveBank) && gBattleMoveDamage > 0) - gBattleResults.unk5_0 = 1; - - END: - gBattlescriptCurrInstr += 2; -} - -static void atk0C_datahpupdate(void) -{ - register u32 move_type asm("r6"); //no idea how to match it otherwise - u8 dynamic_move_type; - - if (gBattleExecBuffer) - return; - - dynamic_move_type = BATTLE_STRUCT->dynamicMoveType; - if (dynamic_move_type && !(dynamic_move_type & 0x40)) - { - move_type = 0x3F; - move_type &= dynamic_move_type; - } - else - { - move_type = gBattleMoves[gCurrentMove].type; - } - - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) - { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) - { - if (gDisableStructs[gActiveBank].substituteHP >= gBattleMoveDamage) - { - if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0) - gSpecialStatuses[gActiveBank].moveturnLostHP = gBattleMoveDamage; - gDisableStructs[gActiveBank].substituteHP -= gBattleMoveDamage; - gHP_dealt = gBattleMoveDamage; - } - else - { - if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0) - gSpecialStatuses[gActiveBank].moveturnLostHP = gDisableStructs[gActiveBank].substituteHP; - gHP_dealt = gDisableStructs[gActiveBank].substituteHP; - gDisableStructs[gActiveBank].substituteHP = 0; - } - //check substitute fading - if (gDisableStructs[gActiveBank].substituteHP == 0) - { - gBattlescriptCurrInstr += 2; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_SubstituteFade; - return; - } - } - else - { - gHitMarker &= ~(HITMARKER_IGNORE_SUBSTITUTE); - if (gBattleMoveDamage < 0) //hp goes up - { - gBattleMons[gActiveBank].hp -= gBattleMoveDamage; - if (gBattleMons[gActiveBank].hp > gBattleMons[gActiveBank].maxHP) - gBattleMons[gActiveBank].hp = gBattleMons[gActiveBank].maxHP; - - } - else //hp goes down - { - if (gHitMarker & HITMARKER_x20) - { - gHitMarker &= ~(HITMARKER_x20); - } - else - { - gTakenDmg[gActiveBank] += gBattleMoveDamage; - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) - gTakenDmgBanks[gActiveBank] = gBankAttacker; - else - gTakenDmgBanks[gActiveBank] = gBankTarget; - } - - if (gBattleMons[gActiveBank].hp > gBattleMoveDamage) - { - gBattleMons[gActiveBank].hp -= gBattleMoveDamage; - gHP_dealt = gBattleMoveDamage; - } - else - { - gHP_dealt = gBattleMons[gActiveBank].hp; - gBattleMons[gActiveBank].hp = 0; - } - - if (!gSpecialStatuses[gActiveBank].moveturnLostHP && !(gHitMarker & HITMARKER_x100000)) - gSpecialStatuses[gActiveBank].moveturnLostHP = gHP_dealt; - - if (move_type <= 8 && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT) - { - gProtectStructs[gActiveBank].physicalDmg = gHP_dealt; - gSpecialStatuses[gActiveBank].moveturnLostHP_physical = gHP_dealt; - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) - { - gProtectStructs[gActiveBank].physicalBank = gBankAttacker; - gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankAttacker; - } - else - { - gProtectStructs[gActiveBank].physicalBank = gBankTarget; - gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankTarget; - } - } - else if (move_type > 8 && !(gHitMarker & HITMARKER_x100000)) - { - gProtectStructs[gActiveBank].specialDmg = gHP_dealt; - gSpecialStatuses[gActiveBank].moveturnLostHP_special = gHP_dealt; - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) - { - gProtectStructs[gActiveBank].specialBank = gBankAttacker; - gSpecialStatuses[gActiveBank].moveturnSpecialBank = gBankAttacker; - } - else - { - gProtectStructs[gActiveBank].specialBank = gBankTarget; - gSpecialStatuses[gActiveBank].moveturnSpecialBank = gBankTarget; - } - } - } - gHitMarker &= ~(HITMARKER_x100000); - EmitSetAttributes(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp); - MarkBufferBankForExecution(gActiveBank); - } - } - else - { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0) - gSpecialStatuses[gActiveBank].moveturnLostHP = 0xFFFF; - } - gBattlescriptCurrInstr += 2; -} - -static void atk0D_critmessage(void) -{ - if (gBattleExecBuffer == 0) - { - if (gCritMultiplier == 2 && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) - { - PrepareStringBattle(0xD9, gBankAttacker); - gBattleCommunication[MSG_DISPLAY] = 1; - } - gBattlescriptCurrInstr++; - } -} - -static void atk0E_effectiveness_sound(void) -{ - if (gBattleExecBuffer) - return; - gActiveBank = gBankTarget; - if (!(gBattleMoveFlags & MOVESTATUS_MISSED)) - { - u8 flag = ~MOVESTATUS_MISSED; - switch (gBattleMoveFlags & flag) - { - case MOVESTATUS_SUPEREFFECTIVE: - EmitEffectivenessSound(0, 14); - MarkBufferBankForExecution(gActiveBank); - break; - case MOVESTATUS_NOTVERYEFFECTIVE: - EmitEffectivenessSound(0, 12); - MarkBufferBankForExecution(gActiveBank); - break; - case MOVESTATUS_NOTAFFECTED: - case MOVESTATUS_FAILED: - break; - case MOVESTATUS_ENDURED: - case MOVESTATUS_ONEHITKO: - case MOVESTATUS_HUNGON: - default: - if (gBattleMoveFlags & MOVESTATUS_SUPEREFFECTIVE) - { - EmitEffectivenessSound(0, 14); - MarkBufferBankForExecution(gActiveBank); - } - else if (gBattleMoveFlags & MOVESTATUS_NOTVERYEFFECTIVE) - { - EmitEffectivenessSound(0, 12); - MarkBufferBankForExecution(gActiveBank); - } - else if (!(gBattleMoveFlags & (MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED))) - { - EmitEffectivenessSound(0, 13); - MarkBufferBankForExecution(gActiveBank); - } - break; - } - } - gBattlescriptCurrInstr++; -} - -static void atk0F_resultmessage(void) -{ - u16 stringID = 0; - - if (gBattleExecBuffer) - return; - - if (gBattleMoveFlags & MOVESTATUS_MISSED && (!(gBattleMoveFlags & MOVESTATUS_NOTAFFECTED) || gBattleCommunication[6] > 2)) - { - stringID = gMissStrings[gBattleCommunication[6]]; - gBattleCommunication[MSG_DISPLAY] = 1; - } - else - { - gBattleCommunication[MSG_DISPLAY] = 1; - switch (gBattleMoveFlags & 0xFE) - { - case MOVESTATUS_SUPEREFFECTIVE: - stringID = 0xDE; - break; - case MOVESTATUS_NOTVERYEFFECTIVE: - stringID = 0xDD; - break; - case MOVESTATUS_ONEHITKO: - stringID = 0xDA; - break; - case MOVESTATUS_ENDURED: - stringID = 0x99; - break; - case MOVESTATUS_FAILED: - goto FAILED; - case MOVESTATUS_NOTAFFECTED: - goto NOTAFFECTED; - case MOVESTATUS_HUNGON: - gLastUsedItem = gBattleMons[gBankTarget].item; - gStringBank = gBankTarget; - gBattleMoveFlags &= ~(MOVESTATUS_ENDURED | MOVESTATUS_HUNGON); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_HangedOnMsg; - return; - default: - if (gBattleMoveFlags & MOVESTATUS_NOTAFFECTED) - NOTAFFECTED: - stringID = 0x1B; - else if (gBattleMoveFlags & MOVESTATUS_ONEHITKO) - { - gBattleMoveFlags &= ~(MOVESTATUS_ONEHITKO); - gBattleMoveFlags &= ~(MOVESTATUS_SUPEREFFECTIVE); - gBattleMoveFlags &= ~(MOVESTATUS_NOTVERYEFFECTIVE); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_OneHitKOMsg; - return; - } - else if (gBattleMoveFlags & MOVESTATUS_ENDURED) - { - gBattleMoveFlags &= ~(MOVESTATUS_ENDURED | MOVESTATUS_HUNGON); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_EnduredMsg; - return; - } - else if (gBattleMoveFlags & MOVESTATUS_HUNGON) - { - gLastUsedItem = gBattleMons[gBankTarget].item; - gStringBank = gBankTarget; - gBattleMoveFlags &= ~(MOVESTATUS_ENDURED | MOVESTATUS_HUNGON); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_HangedOnMsg; - return; - } - else if (gBattleMoveFlags & MOVESTATUS_FAILED) - FAILED: - stringID = 0xE5; - else - gBattleCommunication[MSG_DISPLAY] = 0; - } - } - - if (stringID) - { - register u16 dummy asm("r0") = stringID; //Can't match it otherwise - PrepareStringBattle(dummy, gBankAttacker); - } - gBattlescriptCurrInstr++; -} - -static void atk10_printstring(void) -{ - if (gBattleExecBuffer == 0) - { - u16 var = BS2ScriptRead16(gBattlescriptCurrInstr + 1); - PrepareStringBattle(var, gBankAttacker); - gBattlescriptCurrInstr += 3; - gBattleCommunication[MSG_DISPLAY] = 1; - } -} - -static void atk11_printstring_playeronly(void) -{ - gActiveBank = gBankAttacker; - EmitPrintStringPlayerOnly(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1)); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 3; - gBattleCommunication[MSG_DISPLAY] = 1; -} - -static void atk12_waitmessage(void) -{ - if (gBattleExecBuffer == 0) - { - if (!gBattleCommunication[MSG_DISPLAY]) - { - gBattlescriptCurrInstr += 3; - } - else - { - u16 to_wait = BS2ScriptRead16(gBattlescriptCurrInstr + 1); - if (++gPauseCounterBattle >= to_wait) - { - gPauseCounterBattle = 0; - gBattlescriptCurrInstr += 3; - gBattleCommunication[MSG_DISPLAY] = 0; - } - } - } -} - -static void atk13_printfromtable(void) -{ - if (gBattleExecBuffer == 0) - { - u16 *ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - ptr += gBattleCommunication[MULTISTRING_CHOOSER]; - PrepareStringBattle(*(u16*)ptr, gBankAttacker); - gBattlescriptCurrInstr += 5; - gBattleCommunication[MSG_DISPLAY] = 1; - } -} - -static void atk14_printfromtable_playeronly(void) -{ - if (gBattleExecBuffer == 0) - { - u16 *ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - ptr += gBattleCommunication[MULTISTRING_CHOOSER]; - gActiveBank = gBankAttacker; - EmitPrintStringPlayerOnly(0, *(u16*)ptr); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 5; - gBattleCommunication[MSG_DISPLAY] = 1; - } -} - -u8 BankGetTurnOrder(u8 bank) -{ - int i; - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gTurnOrder[i] == bank) - break; - } - return i; -} - -//Someone please decompile this monstrosity below... -#ifdef NONMATCHING -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 - bool32 NoSunCanFreeze = 1; - - if (gBattleCommunication[MOVE_EFFECT_BYTE] & EffectAffectsUser) - { - gEffectBank = gBankAttacker; //bank that effects get applied on - gBattleCommunication[MOVE_EFFECT_BYTE] &= ~(EffectAffectsUser); - AffectsUser = EffectAffectsUser; - BATTLE_STRUCT->scriptingActive = gBankTarget; //theoretically the attacker - } - else - { - gEffectBank = gBankTarget; - BATTLE_STRUCT->scriptingActive = gBankAttacker; - } - - if (gBattleMons[gEffectBank].ability_id == 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) && - !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) - {gBattlescriptCurrInstr++; return;} - - if (gBattleMons[gEffectBank].status2 & STATUS2_SUBSTITUTE && AffectsUser != EffectAffectsUser) - {gBattlescriptCurrInstr++; return;} - - if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) //status change - { - switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) - { - case STATUS_SLEEP: - //check active uproar - if (gBattleMons[gEffectBank].ability_id != ABILITY_SOUNDPROOF) - { - for (gActiveBank = 0; gActiveBank < gNoOfAllBanks && !(gBattleMons[gActiveBank].status2 & STATUS2_UPROAR); gActiveBank++) {} - } - else - gActiveBank = gNoOfAllBanks; - if (gBattleMons[gEffectBank].status) {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;} - - b_cancel_multi_turn_move_maybe(gEffectBank); - StatusChanged = 1; - break; - case STATUS_POISON: - if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80)) - { - gLastUsedAbility = ABILITY_IMMUNITY; - RecordAbility(gEffectBank, ABILITY_IMMUNITY); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - //_0801E664: - gBattlescriptCurrInstr = BS_PSN_PREVENTION; - if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) - { - gBattleCommunication.multistring_chooser = 1; - gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); - return; - } - else - {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; - 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;} - StatusChanged = 1; - break; - case STATUS_BURN: - if (gBattleMons[gEffectBank].ability_id == ABILITY_WATER_VEIL && (primary == 1 || certain == 0x80)) - { - gLastUsedAbility = ABILITY_WATER_VEIL; - RecordAbility(gEffectBank, ABILITY_WATER_VEIL); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - //_0801E664: - gBattlescriptCurrInstr = BS_BRN_PREVENTION; - if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) - { - gBattleCommunication.multistring_chooser = 1; - gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); - return; - } - else - {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; - 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].status1 == 0) {break;} - StatusChanged = 1; - break; - case STATUS_FREEZE: - 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 (NoSunCanFreeze == 0) {break;} - if (gBattleMons[gEffectBank].ability_id == ABILITY_MAGMA_ARMOR) {break;} - - b_cancel_multi_turn_move_maybe(gEffectBank); - StatusChanged = 1; - break; - case STATUS_PARALYSIS: - if (gBattleMons[gEffectBank].ability_id == ABILITY_LIMBER) - { - if ((primary == 1 || certain == 0x80)) - { - gLastUsedAbility = ABILITY_LIMBER; - RecordAbility(gEffectBank, ABILITY_LIMBER); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - //_0801E664: - gBattlescriptCurrInstr = BS_PRLZ_PREVENTION; - if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) - { - gBattleCommunication.multistring_chooser = 1; - gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); - return; - } - else - {gBattleCommunication.multistring_chooser = 0; return;} - } - else {break;} - } - if (gBattleMons[gEffectBank].status) {break;} - StatusChanged = 1; - break; - case STATUS_TOXIC_POISON: - if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80)) - { - gLastUsedAbility = ABILITY_IMMUNITY; - RecordAbility(gEffectBank, ABILITY_IMMUNITY); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - //_0801E664: - gBattlescriptCurrInstr = BS_PSN_PREVENTION; - if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) - { - gBattleCommunication.multistring_chooser = 1; - gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); - return; - } - else - {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; - return; - } - if (gBattleMons[gEffectBank].status) {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 - StatusChanged = 1; - break; - } - else - gBattleMoveFlags |= MOVESTATUS_NOTAFFECTED; - break; - } - if (StatusChanged == 1) - { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - if (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP) - gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2); - else - gBattleMons[gEffectBank].status1 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; - gBattlescriptCurrInstr = MoveEffectBS_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); - if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) - { - gBattleCommunication.multistring_chooser = 1; - gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD); - } - else - 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]; - gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT; - } - return; - } - else if (StatusChanged == 0) - {gBattlescriptCurrInstr++; return;} - } - else - { - if (gBattleMons[gEffectBank].status2 & gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) - { - gBattlescriptCurrInstr++; - return; - } - switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) - { - case 7: //confusion - if (gBattleMons[gEffectBank].ability_id == 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]]; - break; - case 8: //flinch - if (gBattleMons[gEffectBank].ability_id == ABILITY_INNER_FOCUS) - { - if (primary == 1 || certain == 0x80) - { - gLastUsedAbility = ABILITY_INNER_FOCUS; - RecordAbility(gEffectBank, ABILITY_INNER_FOCUS); - gBattlescriptCurrInstr = BS_FLINCH_PREVENTION; - return; - } - else - {gBattlescriptCurrInstr++; return;} - } - else - { - if (BankGetTurnOrder(gEffectBank) > gCurrentMoveTurn) - gBattleMons[gEffectBank].status2 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; - gBattlescriptCurrInstr++; return; - } - break; - case 10: //uproar - if (gBattleMons[gEffectBank].status2 & STATUS2_UPROAR) - {gBattlescriptCurrInstr++; return;} - gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gEffectBank] = gCurrentMove; - gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 4; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; - break; - case 11: //pay day - if (!(get_bank_identity(gEffectBank) & 1)) - { - u16 PayDay = gPaydayMoney; - gPaydayMoney += (gBattleMons[gEffectBank].level * 5); - if (PayDay > gPaydayMoney) - gPaydayMoney = 0xFFFF; - } - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; - break; - case 9: //tri attack - if (gBattleMons[gEffectBank].status) - {gBattlescriptCurrInstr++; return;} - gBattleCommunication[MOVE_EFFECT_BYTE] = Random() % 3 + 3; - SetMoveEffect(0, 0); - break; - case 12: //charging move - gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gEffectBank] = gCurrentMove; - gProtectStructs[gEffectBank].flag1_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; - 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++; - break; - case 14: //recoil - gBattleMoveDamage = (gHP_dealt) / 4; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; - break; - case 15 ... 21: //stat + 1 - if (ChangeStats(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; - } - break; - case 22 ... 28: //stat - 1 - if (ChangeStats(~(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; - } - break; - case 39 ... 45: //stat + 2 - if (ChangeStats(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; - } - break; - case 46 ... 52: //stat - 2 - if (ChangeStats(~(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; - } - break; - case 29: //recharge - gBattleMons[gEffectBank].status2 |= STATUS2_RECHARGE; - gDisableStructs[gEffectBank].recharge_counter = 2; - gLockedMove[gEffectBank] = gCurrentMove; - gBattlescriptCurrInstr++; - break; - case 30: //rage - gBattleMons[gBankAttacker].status2 |= STATUS2_RAGE; - gBattlescriptCurrInstr++; - 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) - {gBattlescriptCurrInstr++; return;} - if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400 && (gWishFutureKnock.KnockedOff[side] & gBitTable[gBattlePartyID[gBankAttacker]])) - {gBattlescriptCurrInstr++; return;} - if (gBattleMons[gBankTarget].held_item && gBattleMons[gBankTarget].ability_id == ABILITY_STICKY_HOLD) - { - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BS_NO_ITEMSTEAL; - gLastUsedAbility = gBattleMons[gBankTarget].ability_id; - RecordAbility(gBankTarget, gLastUsedAbility); - return; - } - if (gBattleMons[gBankAttacker].held_item) - {gBattlescriptCurrInstr++; return;} - if (gBattleMons[gBankTarget].held_item == ITEM_ENIGMA_BERRY) - {gBattlescriptCurrInstr++; return;} - if (gBattleMons[gBankTarget].held_item == 0) - {gBattlescriptCurrInstr++; return;} - - CHANGED_HELDITEMS[gBankAttacker] = gLastUsedItem = gBattleMons[gBankTarget].held_item; - gBattleMons[gBankTarget].held_item = 0; - - gActiveBank = gBankAttacker; - bb2_setattributes_in_battle(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem); - mark_buffer_bank_for_execution(gBankAttacker); - - gActiveBank = gBankTarget; - bb2_setattributes_in_battle(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBankTarget].held_item); - mark_buffer_bank_for_execution(gBankTarget); - - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_ITEMSTEAL; - - STORE_CHOICEMOVE(gBankTarget, 0); - } - break; - case 32: //escape prevention - gBattleMons[gBankTarget].status2 |= STATUS2_RECHARGE; - gDisableStructs[gBankTarget].BankPreventingEscape = gBankAttacker; - gBattlescriptCurrInstr++; - break; - case 33: //nightmare - gBattleMons[gBankTarget].status2 |= STATUS2_NIGHTMARE; - gBattlescriptCurrInstr++; - break; - case 34: - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = gUnknown_081D9224; - return; - case 35: //break free rapidspin - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_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); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_PARALYSISHEALED; - } - else - {gBattlescriptCurrInstr++; return;} - break; - case 37: // - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = gUnknown_081D93FA; - return; - case 38: //recoil plus paralysis - gBattleMoveDamage = gHP_dealt / 3; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; - break; - case 53: //thrash - if (!(gBattleMons[gEffectBank].status2 & STATUS2_LOCK_CONFUSE)) - { - gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gEffectBank] = gCurrentMove; - gBattleMons[gEffectBank].status2 |= (((Random() & 1) + 2) << 0xA); - } - else - {gBattlescriptCurrInstr++; return;} - break; - case 54: //knock off - if (gBattleMons[gEffectBank].ability_id == ABILITY_STICKY_HOLD) - { - if (gBattleMons[gEffectBank].held_item == 0) - {gBattlescriptCurrInstr++; return;} - gLastUsedAbility = ABILITY_STICKY_HOLD; - gBattlescriptCurrInstr = BS_STICKYHOLD_ACTIVATES; - RecordAbility(gEffectBank, ABILITY_STICKY_HOLD); - return; - } - if (gBattleMons[gEffectBank].held_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]]; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BS_KNOCKEDOFF; - - STORE_CHOICEMOVE(gEffectBank, 0); - } - break; - case 59: //overheat I guess, dont remember - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = gUnknown_081D94B0; - return; - } - } -} -#else -__attribute__((naked)) -void SetMoveEffect(bool8 primary, u8 certainArg) -{ - 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\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - lsls r1, 24\n\ - lsrs r5, r1, 24\n\ - movs r0, 0\n\ - mov r10, r0\n\ - movs r6, 0\n\ - movs r1, 0x1\n\ - str r1, [sp, 0x4]\n\ - ldr r1, _0801E430 @ =gBattleCommunication\n\ - ldrb r3, [r1, 0x3]\n\ - movs r0, 0x40\n\ - ands r0, r3\n\ - adds r7, r1, 0\n\ - cmp r0, 0\n\ - beq _0801E444\n\ - ldr r2, _0801E434 @ =gEffectBank\n\ - ldr r0, _0801E438 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - strb r0, [r2]\n\ - movs r0, 0xBF\n\ - ands r0, r3\n\ - strb r0, [r7, 0x3]\n\ - movs r6, 0x40\n\ - ldr r0, _0801E43C @ =0x02000000\n\ - ldr r1, _0801E440 @ =gBankTarget\n\ - b _0801E450\n\ - .align 2, 0\n\ -_0801E430: .4byte gBattleCommunication\n\ -_0801E434: .4byte gEffectBank\n\ -_0801E438: .4byte gBankAttacker\n\ -_0801E43C: .4byte 0x02000000\n\ -_0801E440: .4byte gBankTarget\n\ -_0801E444:\n\ - ldr r2, _0801E538 @ =gEffectBank\n\ - ldr r0, _0801E53C @ =gBankTarget\n\ - ldrb r0, [r0]\n\ - strb r0, [r2]\n\ - ldr r0, _0801E540 @ =0x02000000\n\ - ldr r1, _0801E544 @ =gBankAttacker\n\ -_0801E450:\n\ - ldrb r1, [r1]\n\ - ldr r3, _0801E548 @ =0x00016003\n\ - adds r0, r3\n\ - strb r1, [r0]\n\ - mov r8, r2\n\ - ldr r2, _0801E54C @ =gBattleMons\n\ - mov r0, r8\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - adds r0, r2\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x13\n\ - bne _0801E48A\n\ - ldr r0, _0801E550 @ =gHitMarker\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801E48A\n\ - cmp r4, 0\n\ - bne _0801E48A\n\ - ldrb r0, [r7, 0x3]\n\ - cmp r0, 0x9\n\ - bhi _0801E48A\n\ - bl _0801F5DC\n\ -_0801E48A:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - bl GetBankIdentity\n\ - ldr r2, _0801E554 @ =gSideAffecting\n\ - movs r1, 0x1\n\ - ands r1, r0\n\ - lsls r1, 1\n\ - adds r1, r2\n\ - ldrh r1, [r1]\n\ - movs r0, 0x20\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801E4C4\n\ - ldr r0, _0801E550 @ =gHitMarker\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801E4C4\n\ - cmp r4, 0\n\ - bne _0801E4C4\n\ - ldr r0, _0801E558 @ =gBattleCommunication\n\ - ldrb r0, [r0, 0x3]\n\ - cmp r0, 0x7\n\ - bhi _0801E4C4\n\ - bl _0801F5DC\n\ -_0801E4C4:\n\ - ldr r3, _0801E54C @ =gBattleMons\n\ - ldr r2, _0801E538 @ =gEffectBank\n\ - ldrb r1, [r2]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - adds r0, r3\n\ - ldrh r0, [r0, 0x28]\n\ - mov r8, r2\n\ - mov r9, r3\n\ - cmp r0, 0\n\ - bne _0801E4EA\n\ - ldr r0, _0801E558 @ =gBattleCommunication\n\ - ldrb r0, [r0, 0x3]\n\ - cmp r0, 0xB\n\ - beq _0801E4EA\n\ - cmp r0, 0x1F\n\ - beq _0801E4EA\n\ - bl _0801F5DC\n\ -_0801E4EA:\n\ - mov r2, r8\n\ - ldrb r1, [r2]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - mov r1, r9\n\ - adds r1, 0x50\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 17\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801E50C\n\ - cmp r6, 0x40\n\ - beq _0801E50C\n\ - bl _0801F5DC\n\ -_0801E50C:\n\ - ldr r0, _0801E558 @ =gBattleCommunication\n\ - ldrb r1, [r0, 0x3]\n\ - adds r7, r0, 0\n\ - cmp r1, 0x6\n\ - bls _0801E518\n\ - b _0801EB4A\n\ -_0801E518:\n\ - ldr r1, _0801E55C @ =gStatusFlagsForMoveEffects\n\ - ldrb r0, [r7, 0x3]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - cmp r0, 0x10\n\ - bne _0801E528\n\ - b _0801E714\n\ -_0801E528:\n\ - cmp r0, 0x10\n\ - bhi _0801E560\n\ - cmp r0, 0x7\n\ - beq _0801E57A\n\ - cmp r0, 0x8\n\ - bne _0801E536\n\ - b _0801E630\n\ -_0801E536:\n\ - b _0801EA14\n\ - .align 2, 0\n\ -_0801E538: .4byte gEffectBank\n\ -_0801E53C: .4byte gBankTarget\n\ -_0801E540: .4byte 0x02000000\n\ -_0801E544: .4byte gBankAttacker\n\ -_0801E548: .4byte 0x00016003\n\ -_0801E54C: .4byte gBattleMons\n\ -_0801E550: .4byte gHitMarker\n\ -_0801E554: .4byte gSideAffecting\n\ -_0801E558: .4byte gBattleCommunication\n\ -_0801E55C: .4byte gStatusFlagsForMoveEffects\n\ -_0801E560:\n\ - cmp r0, 0x40\n\ - bne _0801E566\n\ - b _0801E888\n\ -_0801E566:\n\ - cmp r0, 0x40\n\ - bhi _0801E572\n\ - cmp r0, 0x20\n\ - bne _0801E570\n\ - b _0801E7EA\n\ -_0801E570:\n\ - b _0801EA14\n\ -_0801E572:\n\ - cmp r0, 0x80\n\ - bne _0801E578\n\ - b _0801E8E4\n\ -_0801E578:\n\ - b _0801EA14\n\ -_0801E57A:\n\ - mov r3, r8\n\ - ldrb r1, [r3]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - add r0, r9\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x2B\n\ - beq _0801E5DC\n\ - ldr r0, _0801E5D4 @ =gActiveBank\n\ - movs r1, 0\n\ - strb r1, [r0]\n\ - ldr r1, _0801E5D8 @ =gNoOfAllBanks\n\ - ldrb r3, [r1]\n\ - adds r7, r0, 0\n\ - mov r12, r1\n\ - cmp r3, 0\n\ - beq _0801E5E8\n\ - mov r4, r9\n\ - ldr r0, [r4, 0x50]\n\ - movs r1, 0x70\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801E5E8\n\ - adds r1, r7, 0\n\ - mov r6, r9\n\ - adds r6, 0x50\n\ - movs r5, 0x58\n\ - movs r4, 0x70\n\ -_0801E5B4:\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, r3\n\ - bcs _0801E5E8\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r6\n\ - ldr r0, [r0]\n\ - ands r0, r4\n\ - cmp r0, 0\n\ - beq _0801E5B4\n\ - b _0801E5E8\n\ - .align 2, 0\n\ -_0801E5D4: .4byte gActiveBank\n\ -_0801E5D8: .4byte gNoOfAllBanks\n\ -_0801E5DC:\n\ - ldr r0, _0801E628 @ =gActiveBank\n\ - ldr r2, _0801E62C @ =gNoOfAllBanks\n\ - ldrb r1, [r2]\n\ - strb r1, [r0]\n\ - adds r7, r0, 0\n\ - mov r12, r2\n\ -_0801E5E8:\n\ - mov r0, r8\n\ - ldrb r2, [r0]\n\ - movs r0, 0x58\n\ - adds r1, r2, 0\n\ - muls r1, r0\n\ - mov r0, r9\n\ - adds r0, 0x4C\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _0801E600\n\ - b _0801EA14\n\ -_0801E600:\n\ - ldrb r0, [r7]\n\ - mov r3, r12\n\ - ldrb r3, [r3]\n\ - cmp r0, r3\n\ - beq _0801E60C\n\ - b _0801EA14\n\ -_0801E60C:\n\ - mov r4, r9\n\ - adds r0, r1, r4\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x48\n\ - bne _0801E61A\n\ - b _0801EA14\n\ -_0801E61A:\n\ - cmp r0, 0xF\n\ - bne _0801E620\n\ - b _0801EA14\n\ -_0801E620:\n\ - adds r0, r2, 0\n\ - bl CancelMultiTurnMoves\n\ - b _0801EA04\n\ - .align 2, 0\n\ -_0801E628: .4byte gActiveBank\n\ -_0801E62C: .4byte gNoOfAllBanks\n\ -_0801E630:\n\ - mov r2, r8\n\ - ldrb r1, [r2]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - add r0, r9\n\ - adds r0, 0x20\n\ - ldrb r1, [r0]\n\ - cmp r1, 0x11\n\ - bne _0801E688\n\ - cmp r4, 0x1\n\ - beq _0801E64A\n\ - cmp r5, 0x80\n\ - bne _0801E688\n\ -_0801E64A:\n\ - ldr r0, _0801E678 @ =gLastUsedAbility\n\ - strb r1, [r0]\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - movs r1, 0x11\n\ - bl RecordAbilityBattle\n\ - ldr r4, _0801E67C @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801E680 @ =BattleScript_PSNPrevention\n\ -_0801E664:\n\ - str r0, [r4]\n\ - ldr r2, _0801E684 @ =gHitMarker\n\ - ldr r1, [r2]\n\ - movs r0, 0x80\n\ - lsls r0, 6\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801E676\n\ - b _0801E928\n\ -_0801E676:\n\ - b _0801E94C\n\ - .align 2, 0\n\ -_0801E678: .4byte gLastUsedAbility\n\ -_0801E67C: .4byte gBattlescriptCurrInstr\n\ -_0801E680: .4byte BattleScript_PSNPrevention\n\ -_0801E684: .4byte gHitMarker\n\ -_0801E688:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - movs r1, 0x58\n\ - muls r0, r1\n\ - add r0, r9\n\ - adds r1, r0, 0\n\ - adds r1, 0x21\n\ - ldrb r1, [r1]\n\ - cmp r1, 0x3\n\ - beq _0801E6AC\n\ - adds r0, 0x22\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x3\n\ - beq _0801E6AC\n\ - cmp r1, 0x8\n\ - beq _0801E6AC\n\ - cmp r0, 0x8\n\ - bne _0801E6C6\n\ -_0801E6AC:\n\ - ldr r0, _0801E710 @ =gHitMarker\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801E6C6\n\ - cmp r4, 0x1\n\ - bne _0801E6C0\n\ - b _0801E98C\n\ -_0801E6C0:\n\ - cmp r5, 0x80\n\ - bne _0801E6C6\n\ - b _0801E98C\n\ -_0801E6C6:\n\ - mov r2, r8\n\ - ldrb r1, [r2]\n\ - movs r0, 0x58\n\ - muls r1, r0\n\ - mov r4, r9\n\ - adds r3, r1, r4\n\ - adds r0, r3, 0\n\ - adds r0, 0x21\n\ - ldrb r4, [r0]\n\ - cmp r4, 0x3\n\ - bne _0801E6DE\n\ - b _0801EA14\n\ -_0801E6DE:\n\ - adds r0, 0x1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x3\n\ - bne _0801E6E8\n\ - b _0801EA14\n\ -_0801E6E8:\n\ - cmp r4, 0x8\n\ - bne _0801E6EE\n\ - b _0801EA14\n\ -_0801E6EE:\n\ - cmp r0, 0x8\n\ - bne _0801E6F4\n\ - b _0801EA14\n\ -_0801E6F4:\n\ - mov r0, r9\n\ - adds r0, 0x4C\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _0801E702\n\ - b _0801EA14\n\ -_0801E702:\n\ - adds r0, r3, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x11\n\ - bne _0801E70E\n\ - b _0801EA14\n\ -_0801E70E:\n\ - b _0801EA04\n\ - .align 2, 0\n\ -_0801E710: .4byte gHitMarker\n\ -_0801E714:\n\ - mov r2, r8\n\ - ldrb r1, [r2]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - add r0, r9\n\ - adds r0, 0x20\n\ - ldrb r1, [r0]\n\ - cmp r1, 0x29\n\ - bne _0801E758\n\ - cmp r4, 0x1\n\ - beq _0801E72E\n\ - cmp r5, 0x80\n\ - bne _0801E758\n\ -_0801E72E:\n\ - ldr r0, _0801E74C @ =gLastUsedAbility\n\ - strb r1, [r0]\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - movs r1, 0x29\n\ - bl RecordAbilityBattle\n\ - ldr r4, _0801E750 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801E754 @ =BattleScript_BRNPrevention\n\ - b _0801E664\n\ - .align 2, 0\n\ -_0801E74C: .4byte gLastUsedAbility\n\ -_0801E750: .4byte gBattlescriptCurrInstr\n\ -_0801E754: .4byte BattleScript_BRNPrevention\n\ -_0801E758:\n\ - mov r0, r8\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - mov r2, r9\n\ - adds r1, r0, r2\n\ - adds r0, r1, 0\n\ - adds r0, 0x21\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xA\n\ - beq _0801E778\n\ - adds r0, r1, 0\n\ - adds r0, 0x22\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xA\n\ - bne _0801E7A8\n\ -_0801E778:\n\ - ldr r0, _0801E79C @ =gHitMarker\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801E7A8\n\ - cmp r4, 0x1\n\ - beq _0801E78E\n\ - cmp r5, 0x80\n\ - bne _0801E7A8\n\ -_0801E78E:\n\ - ldr r4, _0801E7A0 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801E7A4 @ =BattleScript_BRNPrevention\n\ - b _0801E998\n\ - .align 2, 0\n\ -_0801E79C: .4byte gHitMarker\n\ -_0801E7A0: .4byte gBattlescriptCurrInstr\n\ -_0801E7A4: .4byte BattleScript_BRNPrevention\n\ -_0801E7A8:\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - movs r1, 0x58\n\ - adds r2, r0, 0\n\ - muls r2, r1\n\ - mov r4, r9\n\ - adds r1, r2, r4\n\ - adds r0, r1, 0\n\ - adds r0, 0x21\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xA\n\ - bne _0801E7C2\n\ - b _0801EA14\n\ -_0801E7C2:\n\ - adds r0, r1, 0\n\ - adds r0, 0x22\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xA\n\ - bne _0801E7CE\n\ - b _0801EA14\n\ -_0801E7CE:\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x29\n\ - bne _0801E7DA\n\ - b _0801EA14\n\ -_0801E7DA:\n\ - mov r0, r9\n\ - adds r0, 0x4C\n\ - adds r0, r2, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _0801E7E8\n\ - b _0801EA14\n\ -_0801E7E8:\n\ - b _0801EA04\n\ -_0801E7EA:\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\ - bne _0801E826\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\ - bne _0801E826\n\ - ldr r0, _0801E87C @ =gBattleWeather\n\ - ldrh r1, [r0]\n\ - movs r0, 0x60\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801E826\n\ - movs r1, 0\n\ - str r1, [sp, 0x4]\n\ -_0801E826:\n\ - ldr r4, _0801E880 @ =gBattleMons\n\ - ldr r0, _0801E884 @ =gEffectBank\n\ - ldrb r3, [r0]\n\ - movs r0, 0x58\n\ - adds r2, r3, 0\n\ - muls r2, r0\n\ - adds r1, r2, r4\n\ - adds r0, r1, 0\n\ - adds r0, 0x21\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xF\n\ - bne _0801E840\n\ - b _0801EA14\n\ -_0801E840:\n\ - adds r0, r1, 0\n\ - adds r0, 0x22\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xF\n\ - bne _0801E84C\n\ - b _0801EA14\n\ -_0801E84C:\n\ - adds r0, r4, 0\n\ - adds r0, 0x4C\n\ - adds r0, r2, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _0801E85A\n\ - b _0801EA14\n\ -_0801E85A:\n\ - ldr r2, [sp, 0x4]\n\ - cmp r2, 0\n\ - bne _0801E862\n\ - b _0801EA14\n\ -_0801E862:\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x28\n\ - bne _0801E86E\n\ - b _0801EA14\n\ -_0801E86E:\n\ - adds r0, r3, 0\n\ - bl CancelMultiTurnMoves\n\ - movs r3, 0x1\n\ - mov r10, r3\n\ - b _0801EA14\n\ - .align 2, 0\n\ -_0801E87C: .4byte gBattleWeather\n\ -_0801E880: .4byte gBattleMons\n\ -_0801E884: .4byte gEffectBank\n\ -_0801E888:\n\ - mov r0, r8\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - muls r1, r0\n\ - mov r2, r9\n\ - adds r0, r1, r2\n\ - adds r0, 0x20\n\ - ldrb r2, [r0]\n\ - cmp r2, 0x7\n\ - bne _0801E8D0\n\ - cmp r4, 0x1\n\ - beq _0801E8A6\n\ - cmp r5, 0x80\n\ - beq _0801E8A6\n\ - b _0801EA14\n\ -_0801E8A6:\n\ - ldr r0, _0801E8C4 @ =gLastUsedAbility\n\ - strb r2, [r0]\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - movs r1, 0x7\n\ - bl RecordAbilityBattle\n\ - ldr r4, _0801E8C8 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801E8CC @ =BattleScript_PRLZPrevention\n\ - b _0801E664\n\ - .align 2, 0\n\ -_0801E8C4: .4byte gLastUsedAbility\n\ -_0801E8C8: .4byte gBattlescriptCurrInstr\n\ -_0801E8CC: .4byte BattleScript_PRLZPrevention\n\ -_0801E8D0:\n\ - mov r0, r9\n\ - adds r0, 0x4C\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _0801E8DE\n\ - b _0801EA14\n\ -_0801E8DE:\n\ - movs r4, 0x1\n\ - mov r10, r4\n\ - b _0801EA14\n\ -_0801E8E4:\n\ - mov r0, r8\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - add r0, r9\n\ - adds r0, 0x20\n\ - ldrb r1, [r0]\n\ - cmp r1, 0x11\n\ - bne _0801E952\n\ - cmp r4, 0x1\n\ - beq _0801E8FE\n\ - cmp r5, 0x80\n\ - bne _0801E952\n\ -_0801E8FE:\n\ - ldr r0, _0801E938 @ =gLastUsedAbility\n\ - strb r1, [r0]\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - movs r1, 0x11\n\ - bl RecordAbilityBattle\n\ - ldr r4, _0801E93C @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801E940 @ =BattleScript_PSNPrevention\n\ - str r0, [r4]\n\ - ldr r2, _0801E944 @ =gHitMarker\n\ - ldr r1, [r2]\n\ - movs r0, 0x80\n\ - lsls r0, 6\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801E94C\n\ -_0801E928:\n\ - movs r0, 0x1\n\ - strb r0, [r7, 0x5]\n\ - ldr r0, _0801E948 @ =0xffffdfff\n\ - ands r1, r0\n\ - str r1, [r2]\n\ - bl _0801F5FA\n\ - .align 2, 0\n\ -_0801E938: .4byte gLastUsedAbility\n\ -_0801E93C: .4byte gBattlescriptCurrInstr\n\ -_0801E940: .4byte BattleScript_PSNPrevention\n\ -_0801E944: .4byte gHitMarker\n\ -_0801E948: .4byte 0xffffdfff\n\ -_0801E94C:\n\ - strb r0, [r7, 0x5]\n\ - bl _0801F5FA\n\ -_0801E952:\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - movs r1, 0x58\n\ - muls r0, r1\n\ - add r0, r9\n\ - adds r1, r0, 0\n\ - adds r1, 0x21\n\ - ldrb r1, [r1]\n\ - cmp r1, 0x3\n\ - beq _0801E976\n\ - adds r0, 0x22\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x3\n\ - beq _0801E976\n\ - cmp r1, 0x8\n\ - beq _0801E976\n\ - cmp r0, 0x8\n\ - bne _0801E9B4\n\ -_0801E976:\n\ - ldr r0, _0801E9A4 @ =gHitMarker\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801E9B4\n\ - cmp r4, 0x1\n\ - beq _0801E98C\n\ - cmp r5, 0x80\n\ - bne _0801E9B4\n\ -_0801E98C:\n\ - ldr r4, _0801E9A8 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801E9AC @ =BattleScript_PSNPrevention\n\ -_0801E998:\n\ - str r0, [r4]\n\ - ldr r1, _0801E9B0 @ =gBattleCommunication\n\ - movs r0, 0x2\n\ - strb r0, [r1, 0x5]\n\ - bl _0801F5FA\n\ - .align 2, 0\n\ -_0801E9A4: .4byte gHitMarker\n\ -_0801E9A8: .4byte gBattlescriptCurrInstr\n\ -_0801E9AC: .4byte BattleScript_PSNPrevention\n\ -_0801E9B0: .4byte gBattleCommunication\n\ -_0801E9B4:\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - movs r6, 0x58\n\ - muls r0, r6\n\ - mov r2, r9\n\ - adds r2, 0x4C\n\ - adds r5, r0, r2\n\ - ldr r4, [r5]\n\ - cmp r4, 0\n\ - bne _0801EA14\n\ - mov r3, r9\n\ - adds r1, r0, r3\n\ - adds r0, r1, 0\n\ - adds r0, 0x21\n\ - ldrb r3, [r0]\n\ - cmp r3, 0x3\n\ - beq _0801EA0A\n\ - adds r0, 0x1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x3\n\ - beq _0801EA0A\n\ - cmp r3, 0x8\n\ - beq _0801EA0A\n\ - cmp r0, 0x8\n\ - beq _0801EA0A\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x11\n\ - beq _0801EA14\n\ - mov r4, r8\n\ - ldrb r0, [r4]\n\ - adds r1, r0, 0\n\ - muls r1, r6\n\ - adds r1, r2\n\ - ldr r0, [r1]\n\ - movs r2, 0x9\n\ - negs r2, r2\n\ - ands r0, r2\n\ - str r0, [r1]\n\ -_0801EA04:\n\ - movs r0, 0x1\n\ - mov r10, r0\n\ - b _0801EA14\n\ -_0801EA0A:\n\ - ldr r0, _0801EA58 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r2, 0x8\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ -_0801EA14:\n\ - mov r1, r10\n\ - cmp r1, 0x1\n\ - beq _0801EA1C\n\ - b _0801EB3C\n\ -_0801EA1C:\n\ - ldr r0, _0801EA5C @ =gBattlescriptCurrInstr\n\ - ldr r0, [r0]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r1, _0801EA60 @ =gStatusFlagsForMoveEffects\n\ - ldr r0, _0801EA64 @ =gBattleCommunication\n\ - ldrb r0, [r0, 0x3]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r3, [r0]\n\ - cmp r3, 0x7\n\ - bne _0801EA70\n\ - bl Random\n\ - ldr r2, _0801EA68 @ =gBattleMons\n\ - ldr r1, _0801EA6C @ =gEffectBank\n\ - ldrb r3, [r1]\n\ - movs r1, 0x58\n\ - muls r3, r1\n\ - adds r2, 0x4C\n\ - adds r3, r2\n\ - movs r1, 0x3\n\ - ands r1, r0\n\ - adds r1, 0x2\n\ - ldr r0, [r3]\n\ - orrs r0, r1\n\ - str r0, [r3]\n\ - b _0801EA84\n\ - .align 2, 0\n\ -_0801EA58: .4byte gBattleMoveFlags\n\ -_0801EA5C: .4byte gBattlescriptCurrInstr\n\ -_0801EA60: .4byte gStatusFlagsForMoveEffects\n\ -_0801EA64: .4byte gBattleCommunication\n\ -_0801EA68: .4byte gBattleMons\n\ -_0801EA6C: .4byte gEffectBank\n\ -_0801EA70:\n\ - ldr r2, _0801EAD4 @ =gBattleMons\n\ - ldr r0, _0801EAD8 @ =gEffectBank\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - muls r1, r0\n\ - adds r2, 0x4C\n\ - adds r1, r2\n\ - ldr r0, [r1]\n\ - orrs r0, r3\n\ - str r0, [r1]\n\ -_0801EA84:\n\ - ldr r2, _0801EADC @ =gBattlescriptCurrInstr\n\ - ldr r1, _0801EAE0 @ =gMoveEffectBS_Ptrs\n\ - ldr r5, _0801EAE4 @ =gBattleCommunication\n\ - ldrb r0, [r5, 0x3]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - str r0, [r2]\n\ - ldr r4, _0801EAE8 @ =gActiveBank\n\ - ldr r1, _0801EAD8 @ =gEffectBank\n\ - ldrb r0, [r1]\n\ - strb r0, [r4]\n\ - ldrb r1, [r1]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - ldr r1, _0801EAEC @ =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\ - ldr r2, _0801EAF0 @ =gHitMarker\n\ - ldr r1, [r2]\n\ - movs r0, 0x80\n\ - lsls r0, 6\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801EAF8\n\ - movs r0, 0x1\n\ - strb r0, [r5, 0x5]\n\ - ldr r0, _0801EAF4 @ =0xffffdfff\n\ - ands r1, r0\n\ - str r1, [r2]\n\ - b _0801EAFA\n\ - .align 2, 0\n\ -_0801EAD4: .4byte gBattleMons\n\ -_0801EAD8: .4byte gEffectBank\n\ -_0801EADC: .4byte gBattlescriptCurrInstr\n\ -_0801EAE0: .4byte gMoveEffectBS_Ptrs\n\ -_0801EAE4: .4byte gBattleCommunication\n\ -_0801EAE8: .4byte gActiveBank\n\ -_0801EAEC: .4byte gUnknown_02024ACC\n\ -_0801EAF0: .4byte gHitMarker\n\ -_0801EAF4: .4byte 0xffffdfff\n\ -_0801EAF8:\n\ - strb r0, [r5, 0x5]\n\ -_0801EAFA:\n\ - ldr r0, _0801EB2C @ =gBattleCommunication\n\ - ldrb r2, [r0, 0x3]\n\ - adds r7, r0, 0\n\ - cmp r2, 0x2\n\ - beq _0801EB14\n\ - cmp r2, 0x6\n\ - beq _0801EB14\n\ - cmp r2, 0x5\n\ - beq _0801EB14\n\ - cmp r2, 0x3\n\ - beq _0801EB14\n\ - bl _0801F5FA\n\ -_0801EB14:\n\ - ldr r0, _0801EB30 @ =0x02000000\n\ - ldrb r1, [r7, 0x3]\n\ - ldr r2, _0801EB34 @ =0x000160ca\n\ - adds r0, r2\n\ - strb r1, [r0]\n\ - ldr r2, _0801EB38 @ =gHitMarker\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 7\n\ - bl _0801F4F2\n\ - .align 2, 0\n\ -_0801EB2C: .4byte gBattleCommunication\n\ -_0801EB30: .4byte 0x02000000\n\ -_0801EB34: .4byte 0x000160ca\n\ -_0801EB38: .4byte gHitMarker\n\ -_0801EB3C:\n\ - mov r3, r10\n\ - cmp r3, 0\n\ - beq _0801EB46\n\ - bl _0801F5FA\n\ -_0801EB46:\n\ - bl _0801F5DC\n\ -_0801EB4A:\n\ - mov r0, r8\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - muls r1, r0\n\ - mov r0, r9\n\ - adds r0, 0x50\n\ - adds r1, r0\n\ - ldr r2, _0801EB84 @ =gStatusFlagsForMoveEffects\n\ - ldrb r3, [r7, 0x3]\n\ - lsls r0, r3, 2\n\ - adds r0, r2\n\ - ldr r1, [r1]\n\ - ldr r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _0801EB6E\n\ - bl _0801F5DC\n\ -_0801EB6E:\n\ - subs r0, r3, 0x7\n\ - cmp r0, 0x34\n\ - bls _0801EB78\n\ - bl _0801F5FA\n\ -_0801EB78:\n\ - lsls r0, 2\n\ - ldr r1, _0801EB88 @ =_0801EB8C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_0801EB84: .4byte gStatusFlagsForMoveEffects\n\ -_0801EB88: .4byte _0801EB8C\n\ - .align 2, 0\n\ -_0801EB8C:\n\ - .4byte _0801EC60\n\ - .4byte _0801ECD4\n\ - .4byte _0801EE4C\n\ - .4byte _0801ED60\n\ - .4byte _0801EDDC\n\ - .4byte _0801EE84\n\ - .4byte _0801EECC\n\ - .4byte _0801EFA8\n\ - .4byte _0801EFEC\n\ - .4byte _0801EFEC\n\ - .4byte _0801EFEC\n\ - .4byte _0801EFEC\n\ - .4byte _0801EFEC\n\ - .4byte _0801EFEC\n\ - .4byte _0801EFEC\n\ - .4byte _0801F040\n\ - .4byte _0801F040\n\ - .4byte _0801F040\n\ - .4byte _0801F040\n\ - .4byte _0801F040\n\ - .4byte _0801F040\n\ - .4byte _0801F040\n\ - .4byte _0801F13C\n\ - .4byte _0801F184\n\ - .4byte _0801F1A4\n\ - .4byte _0801F364\n\ - .4byte _0801F3A0\n\ - .4byte _0801F3BC\n\ - .4byte _0801F3D4\n\ - .4byte _0801F3EC\n\ - .4byte _0801F44C\n\ - .4byte _0801F464\n\ - .4byte _0801F094\n\ - .4byte _0801F094\n\ - .4byte _0801F094\n\ - .4byte _0801F094\n\ - .4byte _0801F094\n\ - .4byte _0801F094\n\ - .4byte _0801F094\n\ - .4byte _0801F0E8\n\ - .4byte _0801F0E8\n\ - .4byte _0801F0E8\n\ - .4byte _0801F0E8\n\ - .4byte _0801F0E8\n\ - .4byte _0801F0E8\n\ - .4byte _0801F0E8\n\ - .4byte _0801F4A8\n\ - .4byte _0801F500\n\ - .4byte _0801F5FA\n\ - .4byte _0801F5FA\n\ - .4byte _0801F5FA\n\ - .4byte _0801F5FA\n\ - .4byte _0801F5EC\n\ -_0801EC60:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - movs r5, 0x58\n\ - adds r1, r0, 0\n\ - muls r1, r5\n\ - mov r2, r9\n\ - adds r0, r1, r2\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x14\n\ - bne _0801EC7A\n\ - bl _0801F5DC\n\ -_0801EC7A:\n\ - mov r4, r9\n\ - adds r4, 0x50\n\ - adds r0, r1, r4\n\ - ldr r0, [r0]\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801EC8E\n\ - bl _0801F5DC\n\ -_0801EC8E:\n\ - bl Random\n\ - mov r3, r8\n\ - ldrb r1, [r3]\n\ - adds r2, r1, 0\n\ - muls r2, r5\n\ - adds r2, r4\n\ - lsls r0, 16\n\ - movs r1, 0xC0\n\ - lsls r1, 10\n\ - ands r1, r0\n\ - lsrs r1, 16\n\ - adds r1, 0x2\n\ - ldr r0, [r2]\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - ldr r4, _0801ECC8 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r1, _0801ECCC @ =gMoveEffectBS_Ptrs\n\ - ldr r0, _0801ECD0 @ =gBattleCommunication\n\ - ldrb r0, [r0, 0x3]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - bl _0801F5F8\n\ - .align 2, 0\n\ -_0801ECC8: .4byte gBattlescriptCurrInstr\n\ -_0801ECCC: .4byte gMoveEffectBS_Ptrs\n\ -_0801ECD0: .4byte gBattleCommunication\n\ -_0801ECD4:\n\ - mov r0, r8\n\ - ldrb r2, [r0]\n\ - movs r6, 0x58\n\ - adds r0, r2, 0\n\ - muls r0, r6\n\ - add r0, r9\n\ - adds r0, 0x20\n\ - ldrb r1, [r0]\n\ - cmp r1, 0x27\n\ - bne _0801ED18\n\ - cmp r4, 0x1\n\ - beq _0801ECF4\n\ - cmp r5, 0x80\n\ - beq _0801ECF4\n\ - bl _0801F5DC\n\ -_0801ECF4:\n\ - ldr r0, _0801ED0C @ =gLastUsedAbility\n\ - strb r1, [r0]\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - movs r1, 0x27\n\ - bl RecordAbilityBattle\n\ - ldr r1, _0801ED10 @ =gBattlescriptCurrInstr\n\ - ldr r0, _0801ED14 @ =BattleScript_FlinchPrevention\n\ - str r0, [r1]\n\ - bl _0801F5FA\n\ - .align 2, 0\n\ -_0801ED0C: .4byte gLastUsedAbility\n\ -_0801ED10: .4byte gBattlescriptCurrInstr\n\ -_0801ED14: .4byte BattleScript_FlinchPrevention\n\ -_0801ED18:\n\ - adds r0, r2, 0\n\ - bl BankGetTurnOrder\n\ - ldr r1, _0801ED54 @ =gCurrentMoveTurn\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bhi _0801ED2E\n\ - bl _0801F5DC\n\ -_0801ED2E:\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - adds r2, r0, 0\n\ - muls r2, r6\n\ - mov r0, r9\n\ - adds r0, 0x50\n\ - adds r2, r0\n\ - ldr r1, _0801ED58 @ =gStatusFlagsForMoveEffects\n\ - ldr r0, _0801ED5C @ =gBattleCommunication\n\ - ldrb r0, [r0, 0x3]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r1, [r2]\n\ - ldr r0, [r0]\n\ - orrs r1, r0\n\ - str r1, [r2]\n\ - bl _0801F5DC\n\ - .align 2, 0\n\ -_0801ED54: .4byte gCurrentMoveTurn\n\ -_0801ED58: .4byte gStatusFlagsForMoveEffects\n\ -_0801ED5C: .4byte gBattleCommunication\n\ -_0801ED60:\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - movs r5, 0x58\n\ - muls r0, r5\n\ - mov r4, r9\n\ - adds r4, 0x50\n\ - adds r2, r0, r4\n\ - ldr r1, [r2]\n\ - movs r0, 0x70\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801ED7C\n\ - bl _0801F5DC\n\ -_0801ED7C:\n\ - movs r0, 0x80\n\ - lsls r0, 5\n\ - orrs r1, r0\n\ - str r1, [r2]\n\ - ldr r1, _0801EDC8 @ =gLockedMove\n\ - ldrb r0, [r3]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldr r1, _0801EDCC @ =gCurrentMove\n\ - ldrh r1, [r1]\n\ - strh r1, [r0]\n\ - bl Random\n\ - mov r2, r8\n\ - ldrb r1, [r2]\n\ - adds r2, r1, 0\n\ - muls r2, r5\n\ - adds r2, r4\n\ - movs r1, 0x3\n\ - ands r1, r0\n\ - adds r1, 0x2\n\ - lsls r1, 4\n\ - ldr r0, [r2]\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - ldr r4, _0801EDD0 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r1, _0801EDD4 @ =gMoveEffectBS_Ptrs\n\ - ldr r0, _0801EDD8 @ =gBattleCommunication\n\ - ldrb r0, [r0, 0x3]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - bl _0801F5F8\n\ - .align 2, 0\n\ -_0801EDC8: .4byte gLockedMove\n\ -_0801EDCC: .4byte gCurrentMove\n\ -_0801EDD0: .4byte gBattlescriptCurrInstr\n\ -_0801EDD4: .4byte gMoveEffectBS_Ptrs\n\ -_0801EDD8: .4byte gBattleCommunication\n\ -_0801EDDC:\n\ - ldr r5, _0801EE30 @ =gBankAttacker\n\ - ldrb r0, [r5]\n\ - bl GetBankIdentity\n\ - movs r1, 0x1\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _0801EE14\n\ - ldr r4, _0801EE34 @ =gPaydayMoney\n\ - ldrh r3, [r4]\n\ - ldr r2, _0801EE38 @ =gBattleMons\n\ - ldrb r1, [r5]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - adds r0, r2\n\ - adds r0, 0x2A\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - adds r0, r3, r0\n\ - strh r0, [r4]\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r3, r0\n\ - bls _0801EE14\n\ - ldr r3, _0801EE3C @ =0x0000ffff\n\ - adds r0, r3, 0\n\ - strh r0, [r4]\n\ -_0801EE14:\n\ - ldr r4, _0801EE40 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r1, _0801EE44 @ =gMoveEffectBS_Ptrs\n\ - ldr r0, _0801EE48 @ =gBattleCommunication\n\ - ldrb r0, [r0, 0x3]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - bl _0801F5F8\n\ - .align 2, 0\n\ -_0801EE30: .4byte gBankAttacker\n\ -_0801EE34: .4byte gPaydayMoney\n\ -_0801EE38: .4byte gBattleMons\n\ -_0801EE3C: .4byte 0x0000ffff\n\ -_0801EE40: .4byte gBattlescriptCurrInstr\n\ -_0801EE44: .4byte gMoveEffectBS_Ptrs\n\ -_0801EE48: .4byte gBattleCommunication\n\ -_0801EE4C:\n\ - mov r4, r8\n\ - ldrb r1, [r4]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - mov r1, r9\n\ - adds r1, 0x4C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _0801EE62\n\ - b _0801F5DC\n\ -_0801EE62:\n\ - bl Random\n\ - ldr r4, _0801EE80 @ =gBattleCommunication\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x3\n\ - bl __umodsi3\n\ - adds r0, 0x3\n\ - strb r0, [r4, 0x3]\n\ - movs r0, 0\n\ - movs r1, 0\n\ - bl SetMoveEffect\n\ - b _0801F5FA\n\ - .align 2, 0\n\ -_0801EE80: .4byte gBattleCommunication\n\ -_0801EE84:\n\ - mov r0, r8\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - adds r2, r1, 0\n\ - muls r2, r0\n\ - mov r0, r9\n\ - adds r0, 0x50\n\ - adds r2, r0\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 5\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - ldr r1, _0801EEC0 @ =gLockedMove\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldr r1, _0801EEC4 @ =gCurrentMove\n\ - ldrh r1, [r1]\n\ - strh r1, [r0]\n\ - ldr r0, _0801EEC8 @ =gProtectStructs\n\ - ldrb r1, [r2]\n\ - lsls r1, 4\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - movs r2, 0x4\n\ - orrs r0, r2\n\ - strb r0, [r1, 0x1]\n\ - b _0801F5DC\n\ - .align 2, 0\n\ -_0801EEC0: .4byte gLockedMove\n\ -_0801EEC4: .4byte gCurrentMove\n\ -_0801EEC8: .4byte gProtectStructs\n\ -_0801EECC:\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - movs r6, 0x58\n\ - muls r0, r6\n\ - mov r4, r9\n\ - adds r4, 0x50\n\ - adds r0, r4\n\ - ldr r5, [r0]\n\ - movs r0, 0xE0\n\ - lsls r0, 8\n\ - ands r5, r0\n\ - cmp r5, 0\n\ - beq _0801EEE8\n\ - b _0801F5DC\n\ -_0801EEE8:\n\ - bl Random\n\ - mov r2, r8\n\ - ldrb r1, [r2]\n\ - adds r2, r1, 0\n\ - muls r2, r6\n\ - adds r2, r4\n\ - movs r1, 0x3\n\ - ands r1, r0\n\ - adds r1, 0x3\n\ - lsls r1, 13\n\ - ldr r0, [r2]\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - ldr r2, _0801EF80 @ =0x02000000\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - lsls r0, 1\n\ - ldr r4, _0801EF84 @ =0x00016004\n\ - adds r0, r4\n\ - adds r0, r2\n\ - ldr r6, _0801EF88 @ =gCurrentMove\n\ - ldrh r1, [r6]\n\ - strb r1, [r0]\n\ - ldrb r0, [r3]\n\ - lsls r0, 1\n\ - ldr r1, _0801EF8C @ =0x00016005\n\ - adds r0, r1\n\ - adds r0, r2\n\ - ldrh r1, [r6]\n\ - lsrs r1, 8\n\ - strb r1, [r0]\n\ - ldrb r0, [r3]\n\ - ldr r3, _0801EF90 @ =0x00016020\n\ - adds r0, r3\n\ - adds r0, r2\n\ - ldr r1, _0801EF94 @ =gBankAttacker\n\ - ldrb r1, [r1]\n\ - strb r1, [r0]\n\ - ldr r4, _0801EF98 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r1, _0801EF9C @ =gMoveEffectBS_Ptrs\n\ - ldr r2, _0801EFA0 @ =gBattleCommunication\n\ - ldrb r0, [r2, 0x3]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - str r0, [r4]\n\ - strb r5, [r2, 0x5]\n\ - ldr r1, _0801EFA4 @ =gTrappingMoves\n\ - ldrh r0, [r1]\n\ - ldrh r4, [r6]\n\ - cmp r0, r4\n\ - bne _0801EF5C\n\ - b _0801F5FA\n\ -_0801EF5C:\n\ - adds r3, r1, 0\n\ - adds r1, r6, 0\n\ -_0801EF60:\n\ - ldrb r0, [r2, 0x5]\n\ - adds r0, 0x1\n\ - strb r0, [r2, 0x5]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x4\n\ - bls _0801EF70\n\ - b _0801F5FA\n\ -_0801EF70:\n\ - ldrb r0, [r2, 0x5]\n\ - lsls r0, 1\n\ - adds r0, r3\n\ - ldrh r0, [r0]\n\ - ldrh r4, [r1]\n\ - cmp r0, r4\n\ - bne _0801EF60\n\ - b _0801F5FA\n\ - .align 2, 0\n\ -_0801EF80: .4byte 0x02000000\n\ -_0801EF84: .4byte 0x00016004\n\ -_0801EF88: .4byte gCurrentMove\n\ -_0801EF8C: .4byte 0x00016005\n\ -_0801EF90: .4byte 0x00016020\n\ -_0801EF94: .4byte gBankAttacker\n\ -_0801EF98: .4byte gBattlescriptCurrInstr\n\ -_0801EF9C: .4byte gMoveEffectBS_Ptrs\n\ -_0801EFA0: .4byte gBattleCommunication\n\ -_0801EFA4: .4byte gTrappingMoves\n\ -_0801EFA8:\n\ - ldr r1, _0801EFD8 @ =gBattleMoveDamage\n\ - ldr r0, _0801EFDC @ =gHP_dealt\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bge _0801EFB4\n\ - adds r0, 0x3\n\ -_0801EFB4:\n\ - asrs r0, 2\n\ - str r0, [r1]\n\ - cmp r0, 0\n\ - bne _0801EFC0\n\ - movs r0, 0x1\n\ - str r0, [r1]\n\ -_0801EFC0:\n\ - ldr r4, _0801EFE0 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r1, _0801EFE4 @ =gMoveEffectBS_Ptrs\n\ - ldr r0, _0801EFE8 @ =gBattleCommunication\n\ - ldrb r0, [r0, 0x3]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - b _0801F5F8\n\ - .align 2, 0\n\ -_0801EFD8: .4byte gBattleMoveDamage\n\ -_0801EFDC: .4byte gHP_dealt\n\ -_0801EFE0: .4byte gBattlescriptCurrInstr\n\ -_0801EFE4: .4byte gMoveEffectBS_Ptrs\n\ -_0801EFE8: .4byte gBattleCommunication\n\ -_0801EFEC:\n\ - ldrb r1, [r7, 0x3]\n\ - adds r1, 0xF2\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - movs r0, 0x10\n\ - adds r2, r6, 0\n\ - movs r3, 0\n\ - bl ChangeStatBuffs\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0\n\ - beq _0801F008\n\ - b _0801F5DC\n\ -_0801F008:\n\ - ldr r2, _0801F02C @ =0x02000000\n\ - ldrb r1, [r7, 0x3]\n\ - movs r0, 0x3F\n\ - ands r0, r1\n\ - ldr r4, _0801F030 @ =0x000160a4\n\ - adds r1, r2, r4\n\ - strb r0, [r1]\n\ - ldr r0, _0801F034 @ =0x000160a5\n\ - adds r2, r0\n\ - strb r3, [r2]\n\ - ldr r4, _0801F038 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801F03C @ =BattleScript_StatUp\n\ - b _0801F5F8\n\ - .align 2, 0\n\ -_0801F02C: .4byte 0x02000000\n\ -_0801F030: .4byte 0x000160a4\n\ -_0801F034: .4byte 0x000160a5\n\ -_0801F038: .4byte gBattlescriptCurrInstr\n\ -_0801F03C: .4byte BattleScript_StatUp\n\ -_0801F040:\n\ - movs r0, 0x70\n\ - negs r0, r0\n\ - ldrb r1, [r7, 0x3]\n\ - adds r1, 0xEB\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - adds r2, r6, 0\n\ - movs r3, 0\n\ - bl ChangeStatBuffs\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0\n\ - beq _0801F05E\n\ - b _0801F5DC\n\ -_0801F05E:\n\ - ldr r2, _0801F080 @ =0x02000000\n\ - ldrb r1, [r7, 0x3]\n\ - movs r0, 0x3F\n\ - ands r0, r1\n\ - ldr r4, _0801F084 @ =0x000160a4\n\ - adds r1, r2, r4\n\ - strb r0, [r1]\n\ - ldr r0, _0801F088 @ =0x000160a5\n\ - adds r2, r0\n\ - strb r3, [r2]\n\ - ldr r4, _0801F08C @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801F090 @ =BattleScript_StatDown\n\ - b _0801F5F8\n\ - .align 2, 0\n\ -_0801F080: .4byte 0x02000000\n\ -_0801F084: .4byte 0x000160a4\n\ -_0801F088: .4byte 0x000160a5\n\ -_0801F08C: .4byte gBattlescriptCurrInstr\n\ -_0801F090: .4byte BattleScript_StatDown\n\ -_0801F094:\n\ - ldrb r1, [r7, 0x3]\n\ - adds r1, 0xDA\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - movs r0, 0x20\n\ - adds r2, r6, 0\n\ - movs r3, 0\n\ - bl ChangeStatBuffs\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0\n\ - beq _0801F0B0\n\ - b _0801F5DC\n\ -_0801F0B0:\n\ - ldr r2, _0801F0D4 @ =0x02000000\n\ - ldrb r1, [r7, 0x3]\n\ - movs r0, 0x3F\n\ - ands r0, r1\n\ - ldr r4, _0801F0D8 @ =0x000160a4\n\ - adds r1, r2, r4\n\ - strb r0, [r1]\n\ - ldr r0, _0801F0DC @ =0x000160a5\n\ - adds r2, r0\n\ - strb r3, [r2]\n\ - ldr r4, _0801F0E0 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801F0E4 @ =BattleScript_StatUp\n\ - b _0801F5F8\n\ - .align 2, 0\n\ -_0801F0D4: .4byte 0x02000000\n\ -_0801F0D8: .4byte 0x000160a4\n\ -_0801F0DC: .4byte 0x000160a5\n\ -_0801F0E0: .4byte gBattlescriptCurrInstr\n\ -_0801F0E4: .4byte BattleScript_StatUp\n\ -_0801F0E8:\n\ - movs r0, 0x60\n\ - negs r0, r0\n\ - ldrb r1, [r7, 0x3]\n\ - adds r1, 0xD3\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - adds r2, r6, 0\n\ - movs r3, 0\n\ - bl ChangeStatBuffs\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0\n\ - beq _0801F106\n\ - b _0801F5DC\n\ -_0801F106:\n\ - ldr r2, _0801F128 @ =0x02000000\n\ - ldrb r1, [r7, 0x3]\n\ - movs r0, 0x3F\n\ - ands r0, r1\n\ - ldr r4, _0801F12C @ =0x000160a4\n\ - adds r1, r2, r4\n\ - strb r0, [r1]\n\ - ldr r0, _0801F130 @ =0x000160a5\n\ - adds r2, r0\n\ - strb r3, [r2]\n\ - ldr r4, _0801F134 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801F138 @ =BattleScript_StatDown\n\ - b _0801F5F8\n\ - .align 2, 0\n\ -_0801F128: .4byte 0x02000000\n\ -_0801F12C: .4byte 0x000160a4\n\ -_0801F130: .4byte 0x000160a5\n\ -_0801F134: .4byte gBattlescriptCurrInstr\n\ -_0801F138: .4byte BattleScript_StatDown\n\ -_0801F13C:\n\ - mov r2, r8\n\ - ldrb r1, [r2]\n\ - movs r0, 0x58\n\ - adds r2, r1, 0\n\ - muls r2, r0\n\ - mov r0, r9\n\ - adds r0, 0x50\n\ - adds r2, r0\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 15\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - ldr r2, _0801F178 @ =gDisableStructs\n\ - mov r3, r8\n\ - ldrb r1, [r3]\n\ - lsls r0, r1, 3\n\ - subs r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - movs r1, 0x2\n\ - strb r1, [r0, 0x19]\n\ - ldr r1, _0801F17C @ =gLockedMove\n\ - ldrb r0, [r3]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldr r1, _0801F180 @ =gCurrentMove\n\ - ldrh r1, [r1]\n\ - strh r1, [r0]\n\ - b _0801F5DC\n\ - .align 2, 0\n\ -_0801F178: .4byte gDisableStructs\n\ -_0801F17C: .4byte gLockedMove\n\ -_0801F180: .4byte gCurrentMove\n\ -_0801F184:\n\ - ldr r0, _0801F1A0 @ =gBankAttacker\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - adds r2, r1, 0\n\ - muls r2, r0\n\ - mov r0, r9\n\ - adds r0, 0x50\n\ - adds r2, r0\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 16\n\ -_0801F19A:\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - b _0801F5DC\n\ - .align 2, 0\n\ -_0801F1A0: .4byte gBankAttacker\n\ -_0801F1A4:\n\ - ldr r4, _0801F254 @ =gBankAttacker\n\ - ldrb r0, [r4]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - ldrb r0, [r4]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0801F1D8\n\ - ldr r0, _0801F258 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - ldr r0, _0801F25C @ =0x00000902\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801F214\n\ - ldr r0, _0801F260 @ =gTrainerBattleOpponent\n\ - ldrh r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 3\n\ - cmp r1, r0\n\ - beq _0801F1D8\n\ - b _0801F5DC\n\ -_0801F1D8:\n\ - ldr r0, _0801F258 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - ldr r0, _0801F25C @ =0x00000902\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801F214\n\ - ldr r0, _0801F260 @ =gTrainerBattleOpponent\n\ - ldrh r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 3\n\ - cmp r1, r0\n\ - beq _0801F214\n\ - ldr r0, _0801F264 @ =gWishFutureKnock\n\ - adds r0, 0x29\n\ - adds r0, r6, r0\n\ - ldrb r1, [r0]\n\ - ldr r3, _0801F268 @ =gBitTable\n\ - ldr r2, _0801F26C @ =gBattlePartyID\n\ - ldr r0, _0801F254 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - ldrh r0, [r0]\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - ldr r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _0801F214\n\ - b _0801F5DC\n\ -_0801F214:\n\ - ldr r2, _0801F270 @ =gBattleMons\n\ - ldr r1, _0801F274 @ =gBankTarget\n\ - ldrb r0, [r1]\n\ - movs r3, 0x58\n\ - muls r0, r3\n\ - adds r4, r0, r2\n\ - ldrh r0, [r4, 0x2E]\n\ - adds r7, r1, 0\n\ - mov r9, r2\n\ - cmp r0, 0\n\ - beq _0801F284\n\ - adds r0, r4, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x3C\n\ - bne _0801F284\n\ - ldr r1, _0801F278 @ =gBattlescriptCurrInstr\n\ - ldr r0, _0801F27C @ =BattleScript_NoItemSteal\n\ - str r0, [r1]\n\ - ldr r1, _0801F280 @ =gLastUsedAbility\n\ - ldrb r0, [r7]\n\ - muls r0, r3\n\ - add r0, r9\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldrb r0, [r7]\n\ - ldrb r1, [r1]\n\ - bl RecordAbilityBattle\n\ - b _0801F5FA\n\ - .align 2, 0\n\ -_0801F254: .4byte gBankAttacker\n\ -_0801F258: .4byte gBattleTypeFlags\n\ -_0801F25C: .4byte 0x00000902\n\ -_0801F260: .4byte gTrainerBattleOpponent\n\ -_0801F264: .4byte gWishFutureKnock\n\ -_0801F268: .4byte gBitTable\n\ -_0801F26C: .4byte gBattlePartyID\n\ -_0801F270: .4byte gBattleMons\n\ -_0801F274: .4byte gBankTarget\n\ -_0801F278: .4byte gBattlescriptCurrInstr\n\ -_0801F27C: .4byte BattleScript_NoItemSteal\n\ -_0801F280: .4byte gLastUsedAbility\n\ -_0801F284:\n\ - ldr r4, _0801F340 @ =gBankAttacker\n\ - mov r10, r4\n\ - ldrb r1, [r4]\n\ - movs r0, 0x58\n\ - mov r8, r0\n\ - mov r0, r8\n\ - muls r0, r1\n\ - add r0, r9\n\ - ldrh r3, [r0, 0x2E]\n\ - cmp r3, 0\n\ - beq _0801F29C\n\ - b _0801F5DC\n\ -_0801F29C:\n\ - ldrb r0, [r7]\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - add r0, r9\n\ - ldrh r2, [r0, 0x2E]\n\ - adds r0, r2, 0\n\ - cmp r0, 0xAF\n\ - bne _0801F2B0\n\ - b _0801F5DC\n\ -_0801F2B0:\n\ - cmp r0, 0\n\ - bne _0801F2B6\n\ - b _0801F5DC\n\ -_0801F2B6:\n\ - lsls r0, r1, 1\n\ - ldr r5, _0801F344 @ =0x020160f0\n\ - adds r0, r5\n\ - ldr r1, _0801F348 @ =gLastUsedItem\n\ - strh r2, [r0]\n\ - strh r2, [r1]\n\ - ldrb r0, [r7]\n\ - mov r4, r8\n\ - muls r4, r0\n\ - adds r0, r4, 0\n\ - add r0, r9\n\ - movs r6, 0\n\ - strh r3, [r0, 0x2E]\n\ - ldr r4, _0801F34C @ =gActiveBank\n\ - mov r2, r10\n\ - ldrb r0, [r2]\n\ - strb r0, [r4]\n\ - str r1, [sp]\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - movs r2, 0\n\ - movs r3, 0x2\n\ - bl EmitSetAttributes\n\ - mov r3, r10\n\ - ldrb r0, [r3]\n\ - bl MarkBufferBankForExecution\n\ - ldrb r0, [r7]\n\ - strb r0, [r4]\n\ - ldrb r0, [r7]\n\ - mov r4, r8\n\ - muls r4, r0\n\ - adds r0, r4, 0\n\ - mov r1, r9\n\ - adds r1, 0x2E\n\ - adds r0, r1\n\ - str r0, [sp]\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - movs r2, 0\n\ - movs r3, 0x2\n\ - bl EmitSetAttributes\n\ - ldrb r0, [r7]\n\ - bl MarkBufferBankForExecution\n\ - ldr r4, _0801F350 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801F354 @ =BattleScript_ItemSteal\n\ - str r0, [r4]\n\ - ldr r0, _0801F358 @ =0xfffe9f10\n\ - adds r5, r0\n\ - ldrb r0, [r7]\n\ - lsls r0, 1\n\ - ldr r1, _0801F35C @ =0x000160e8\n\ - adds r0, r1\n\ - adds r0, r5\n\ - strb r6, [r0]\n\ - ldrb r0, [r7]\n\ - lsls r0, 1\n\ - ldr r2, _0801F360 @ =0x000160e9\n\ - adds r0, r2\n\ - adds r0, r5\n\ - strb r6, [r0]\n\ - b _0801F5FA\n\ - .align 2, 0\n\ -_0801F340: .4byte gBankAttacker\n\ -_0801F344: .4byte 0x020160f0\n\ -_0801F348: .4byte gLastUsedItem\n\ -_0801F34C: .4byte gActiveBank\n\ -_0801F350: .4byte gBattlescriptCurrInstr\n\ -_0801F354: .4byte BattleScript_ItemSteal\n\ -_0801F358: .4byte 0xfffe9f10\n\ -_0801F35C: .4byte 0x000160e8\n\ -_0801F360: .4byte 0x000160e9\n\ -_0801F364:\n\ - ldr r3, _0801F394 @ =gBankTarget\n\ - ldrb r1, [r3]\n\ - movs r0, 0x58\n\ - adds r2, r1, 0\n\ - muls r2, r0\n\ - mov r0, r9\n\ - adds r0, 0x50\n\ - adds r2, r0\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 19\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - ldr r2, _0801F398 @ =gDisableStructs\n\ - ldrb r1, [r3]\n\ - lsls r0, r1, 3\n\ - subs r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldr r1, _0801F39C @ =gBankAttacker\n\ - ldrb r1, [r1]\n\ - strb r1, [r0, 0x14]\n\ - b _0801F5DC\n\ - .align 2, 0\n\ -_0801F394: .4byte gBankTarget\n\ -_0801F398: .4byte gDisableStructs\n\ -_0801F39C: .4byte gBankAttacker\n\ -_0801F3A0:\n\ - ldr r0, _0801F3B8 @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - adds r2, r1, 0\n\ - muls r2, r0\n\ - mov r0, r9\n\ - adds r0, 0x50\n\ - adds r2, r0\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 20\n\ - b _0801F19A\n\ - .align 2, 0\n\ -_0801F3B8: .4byte gBankTarget\n\ -_0801F3BC:\n\ - ldr r4, _0801F3CC @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801F3D0 @ =gUnknown_081D9224\n\ - b _0801F5F8\n\ - .align 2, 0\n\ -_0801F3CC: .4byte gBattlescriptCurrInstr\n\ -_0801F3D0: .4byte gUnknown_081D9224\n\ -_0801F3D4:\n\ - ldr r4, _0801F3E4 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801F3E8 @ =BattleScript_RapidSpinAway\n\ - b _0801F5F8\n\ - .align 2, 0\n\ -_0801F3E4: .4byte gBattlescriptCurrInstr\n\ -_0801F3E8: .4byte BattleScript_RapidSpinAway\n\ -_0801F3EC:\n\ - ldr r6, _0801F43C @ =gBankTarget\n\ - ldrb r0, [r6]\n\ - movs r2, 0x58\n\ - muls r0, r2\n\ - mov r1, r9\n\ - adds r1, 0x4C\n\ - adds r5, r0, r1\n\ - ldr r4, [r5]\n\ - movs r0, 0x40\n\ - ands r0, r4\n\ - cmp r0, 0\n\ - bne _0801F406\n\ - b _0801F5DC\n\ -_0801F406:\n\ - movs r0, 0x41\n\ - negs r0, r0\n\ - ands r4, r0\n\ - str r4, [r5]\n\ - ldr r4, _0801F440 @ =gActiveBank\n\ - ldrb r0, [r6]\n\ - strb r0, [r4]\n\ - ldrb r0, [r4]\n\ - muls r0, r2\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\ - ldr r4, _0801F444 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801F448 @ =BattleScript_TargetPRLZHeal\n\ - b _0801F5F8\n\ - .align 2, 0\n\ -_0801F43C: .4byte gBankTarget\n\ -_0801F440: .4byte gActiveBank\n\ -_0801F444: .4byte gBattlescriptCurrInstr\n\ -_0801F448: .4byte BattleScript_TargetPRLZHeal\n\ -_0801F44C:\n\ - ldr r4, _0801F45C @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801F460 @ =gUnknown_081D93FA\n\ - b _0801F5F8\n\ - .align 2, 0\n\ -_0801F45C: .4byte gBattlescriptCurrInstr\n\ -_0801F460: .4byte gUnknown_081D93FA\n\ -_0801F464:\n\ - ldr r4, _0801F494 @ =gBattleMoveDamage\n\ - ldr r0, _0801F498 @ =gHP_dealt\n\ - ldr r0, [r0]\n\ - movs r1, 0x3\n\ - bl __divsi3\n\ - str r0, [r4]\n\ - cmp r0, 0\n\ - bne _0801F47A\n\ - movs r0, 0x1\n\ - str r0, [r4]\n\ -_0801F47A:\n\ - ldr r4, _0801F49C @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r1, _0801F4A0 @ =gMoveEffectBS_Ptrs\n\ - ldr r0, _0801F4A4 @ =gBattleCommunication\n\ - ldrb r0, [r0, 0x3]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - b _0801F5F8\n\ - .align 2, 0\n\ -_0801F494: .4byte gBattleMoveDamage\n\ -_0801F498: .4byte gHP_dealt\n\ -_0801F49C: .4byte gBattlescriptCurrInstr\n\ -_0801F4A0: .4byte gMoveEffectBS_Ptrs\n\ -_0801F4A4: .4byte gBattleCommunication\n\ -_0801F4A8:\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - movs r5, 0x58\n\ - muls r0, r5\n\ - mov r4, r9\n\ - adds r4, 0x50\n\ - adds r2, r0, r4\n\ - ldr r1, [r2]\n\ - movs r0, 0xC0\n\ - lsls r0, 4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801F4C4\n\ - b _0801F5DC\n\ -_0801F4C4:\n\ - movs r0, 0x80\n\ - lsls r0, 5\n\ - orrs r1, r0\n\ - str r1, [r2]\n\ - ldr r1, _0801F4F8 @ =gLockedMove\n\ - ldrb r0, [r3]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldr r1, _0801F4FC @ =gCurrentMove\n\ - ldrh r1, [r1]\n\ - strh r1, [r0]\n\ - bl Random\n\ - mov r2, r8\n\ - ldrb r1, [r2]\n\ - adds r2, r1, 0\n\ - muls r2, r5\n\ - adds r2, r4\n\ - movs r1, 0x1\n\ - ands r1, r0\n\ - adds r1, 0x2\n\ - lsls r1, 10\n\ - ldr r0, [r2]\n\ -_0801F4F2:\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - b _0801F5FA\n\ - .align 2, 0\n\ -_0801F4F8: .4byte gLockedMove\n\ -_0801F4FC: .4byte gCurrentMove\n\ -_0801F500:\n\ - mov r5, r8\n\ - ldrb r3, [r5]\n\ - movs r4, 0x58\n\ - adds r0, r3, 0\n\ - muls r0, r4\n\ - mov r2, r9\n\ - adds r1, r0, r2\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r2, [r0]\n\ - cmp r2, 0x3C\n\ - bne _0801F540\n\ - ldrh r0, [r1, 0x2E]\n\ - cmp r0, 0\n\ - beq _0801F5DC\n\ - ldr r0, _0801F534 @ =gLastUsedAbility\n\ - strb r2, [r0]\n\ - ldr r1, _0801F538 @ =gBattlescriptCurrInstr\n\ - ldr r0, _0801F53C @ =BattleScript_NoItemSteal\n\ - str r0, [r1]\n\ - ldrb r0, [r5]\n\ - movs r1, 0x3C\n\ - bl RecordAbilityBattle\n\ - b _0801F5FA\n\ - .align 2, 0\n\ -_0801F534: .4byte gLastUsedAbility\n\ -_0801F538: .4byte gBattlescriptCurrInstr\n\ -_0801F53C: .4byte BattleScript_NoItemSteal\n\ -_0801F540:\n\ - ldrh r0, [r1, 0x2E]\n\ - cmp r0, 0\n\ - beq _0801F5DC\n\ - adds r0, r3, 0\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - ldr r1, _0801F5B8 @ =gLastUsedItem\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - muls r0, r4\n\ - add r0, r9\n\ - ldrh r0, [r0, 0x2E]\n\ - strh r0, [r1]\n\ - ldrb r0, [r3]\n\ - muls r0, r4\n\ - add r0, r9\n\ - movs r5, 0\n\ - movs r1, 0\n\ - strh r1, [r0, 0x2E]\n\ - ldr r2, _0801F5BC @ =gWishFutureKnock\n\ - adds r2, 0x29\n\ - adds r2, r6, r2\n\ - ldr r3, _0801F5C0 @ =gBitTable\n\ - ldr r1, _0801F5C4 @ =gBattlePartyID\n\ - mov r4, r8\n\ - ldrb r0, [r4]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - ldr r0, [r0]\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldr r4, _0801F5C8 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801F5CC @ =BattleScript_KnockedOff\n\ - str r0, [r4]\n\ - ldr r1, _0801F5D0 @ =0x02000000\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - lsls r0, 1\n\ - ldr r3, _0801F5D4 @ =0x000160e8\n\ - adds r0, r3\n\ - adds r0, r1\n\ - strb r5, [r0]\n\ - ldrb r0, [r2]\n\ - lsls r0, 1\n\ - ldr r4, _0801F5D8 @ =0x000160e9\n\ - adds r0, r4\n\ - adds r0, r1\n\ - strb r5, [r0]\n\ - b _0801F5FA\n\ - .align 2, 0\n\ -_0801F5B8: .4byte gLastUsedItem\n\ -_0801F5BC: .4byte gWishFutureKnock\n\ -_0801F5C0: .4byte gBitTable\n\ -_0801F5C4: .4byte gBattlePartyID\n\ -_0801F5C8: .4byte gBattlescriptCurrInstr\n\ -_0801F5CC: .4byte BattleScript_KnockedOff\n\ -_0801F5D0: .4byte 0x02000000\n\ -_0801F5D4: .4byte 0x000160e8\n\ -_0801F5D8: .4byte 0x000160e9\n\ -_0801F5DC:\n\ - ldr r1, _0801F5E8 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x1\n\ - str r0, [r1]\n\ - b _0801F5FA\n\ - .align 2, 0\n\ -_0801F5E8: .4byte gBattlescriptCurrInstr\n\ -_0801F5EC:\n\ - ldr r4, _0801F60C @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ - ldr r0, _0801F610 @ =gUnknown_081D94B0\n\ -_0801F5F8:\n\ - str r0, [r4]\n\ -_0801F5FA:\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\ -_0801F60C: .4byte gBattlescriptCurrInstr\n\ -_0801F610: .4byte gUnknown_081D94B0\n\ - .syntax divided\n"); -} -#endif // NONMATCHING - -static void atk15_seteffectwithchancetarget(void) -{ - u32 PercentChance; - if (gBattleMons[gBankAttacker].ability == ABILITY_SERENE_GRACE) - PercentChance = gBattleMoves[gCurrentMove].secondaryEffectChance * 2; - else - PercentChance = gBattleMoves[gCurrentMove].secondaryEffectChance; - if (gBattleCommunication[MOVE_EFFECT_BYTE] & 0x80 && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) - { - gBattleCommunication[MOVE_EFFECT_BYTE] &= 0x7F; - SetMoveEffect(0, 0x80); - } - else if (Random() % 100 <= PercentChance && gBattleCommunication[MOVE_EFFECT_BYTE] && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) - { - if (PercentChance >= 100) - SetMoveEffect(0, 0x80); - else - SetMoveEffect(0, 0); - } - else - gBattlescriptCurrInstr++; - gBattleCommunication[MOVE_EFFECT_BYTE] = 0; - BATTLE_STRUCT->filler2[0x3E] = 0; //TODO: to fix this later -} - -static void atk16_seteffectprimary(void) -{ - SetMoveEffect(1, 0); -} - -static void atk17_seteffectsecondary(void) -{ - SetMoveEffect(0, 0); -} - -static void atk18_status_effect_clear(void) -{ - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) - gBattleMons[gActiveBank].status1 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); - else - gBattleMons[gActiveBank].status2 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); - - gBattleCommunication[MOVE_EFFECT_BYTE] = 0; - gBattlescriptCurrInstr += 2; - BATTLE_STRUCT->filler2[0x3E] = 0; //TODO: to fix this later -} - -//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"); -} - -static void atk1A_faint_animation(void) -{ - if (gBattleExecBuffer == 0) - { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - EmitFaintAnimation(0); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 2; - } -} - -static void atk1B_faint_effects_clear(void) -{ - //Clears things like attraction or trapping to other banks - if (gBattleExecBuffer == 0) - { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - gBattleMons[gActiveBank].status1 = 0; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 0x4, &gBattleMons[gActiveBank].status1); - MarkBufferBankForExecution(gActiveBank); - UndoEffectsAfterFainting(); - gBattlescriptCurrInstr += 2; - } -} - -static void atk1C_jumpifstatus(void) -{ - u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); - void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6); - if (gBattleMons[bank].status1 & flags && gBattleMons[bank].hp) - gBattlescriptCurrInstr = jump_loc; - else - gBattlescriptCurrInstr += 10; -} - -static void atk1D_jumpifstatus2(void) -{ - u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); - void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6); - if (gBattleMons[bank].status2 & flags && gBattleMons[bank].hp) - gBattlescriptCurrInstr = jump_loc; - else - gBattlescriptCurrInstr += 10; -} - -static void atk1E_jumpifability(void) -{ - u8 bank; - u8 ability = BSScriptRead8(gBattlescriptCurrInstr + 2); - void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3); - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 8) - { - bank = AbilityBattleEffects(ABILITYEFFECT_CHECK_BANK_SIDE, gBankAttacker, ability, 0, 0); - if (bank) - { - gLastUsedAbility = ability; - gBattlescriptCurrInstr = jump_loc; - RecordAbilityBattle(bank -1, gLastUsedAbility); - unk_2000000[0x160f8] = bank - 1; - } - else - gBattlescriptCurrInstr += 7; - } - else if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 9) - { - bank = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gBankAttacker, ability, 0, 0); - if (bank) - { - gLastUsedAbility = ability; - gBattlescriptCurrInstr = jump_loc; - RecordAbilityBattle(bank - 1, gLastUsedAbility); - unk_2000000[0x160f8] = bank - 1; - } - else - gBattlescriptCurrInstr += 7; - } - else - { - bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - if (gBattleMons[bank].ability == ability) - { - gLastUsedAbility = ability; - gBattlescriptCurrInstr = jump_loc; - RecordAbilityBattle(bank, gLastUsedAbility); - unk_2000000[0x160f8] = bank; - } - else - gBattlescriptCurrInstr += 7; - } -} - -static void atk1F_jumpifsideaffecting(void) -{ - u8 side; - u16 flags; - void* jump_loc; - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 1) - side = GetBankIdentity(gBankAttacker) & 1; - else - side = GetBankIdentity(gBankTarget) & 1; - - flags = BS2ScriptRead16(gBattlescriptCurrInstr + 2); - jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 4); - - if (gSideAffecting[side] & flags) - gBattlescriptCurrInstr = jump_loc; - else - gBattlescriptCurrInstr += 8; -} - -static void atk20_jumpifstat(void) -{ - u8 ret = 0; - u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - u8 value = gBattleMons[bank].statStages[BSScriptRead8(gBattlescriptCurrInstr + 3)]; - switch (BSScriptRead8(gBattlescriptCurrInstr + 2)) - { - case CMP_EQUAL: - if (value == BSScriptRead8(gBattlescriptCurrInstr + 4)) - ret++; - break; - case CMP_NOT_EQUAL: - if (value != BSScriptRead8(gBattlescriptCurrInstr + 4)) - ret++; - break; - case CMP_GREATER_THAN: - if (value > BSScriptRead8(gBattlescriptCurrInstr + 4)) - ret++; - break; - case CMP_LESS_THAN: - if (value < BSScriptRead8(gBattlescriptCurrInstr + 4)) - ret++; - break; - case CMP_COMMON_BITS: - if (value & BSScriptRead8(gBattlescriptCurrInstr + 4)) - ret++; - break; - case CMP_NO_COMMON_BITS: - if (!(value & BSScriptRead8(gBattlescriptCurrInstr + 4))) - ret++; - break; - } - if (ret) - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); - else - gBattlescriptCurrInstr += 9; -} - -static void atk21_jumpifstatus3(void) -{ - u32 flags; - void* jump_loc; - - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); - jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7); - if (BSScriptRead8(gBattlescriptCurrInstr + 6)) - { - if ((gStatuses3[gActiveBank] & flags) != 0) - gBattlescriptCurrInstr += 11; - else - gBattlescriptCurrInstr = jump_loc; - } - else - { - if ((gStatuses3[gActiveBank] & flags) != 0) - gBattlescriptCurrInstr = jump_loc; - else - gBattlescriptCurrInstr += 11; - } -} - -static void atk22_jumpiftype(void) //u8 bank, u8 type, *ptr -{ - u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - u8 type = BSScriptRead8(gBattlescriptCurrInstr + 2); - void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3); - - if (gBattleMons[bank].type1 == type || gBattleMons[bank].type2 == type) - gBattlescriptCurrInstr = jump_loc; - else - gBattlescriptCurrInstr += 7; -} - -//here we go again... -#ifdef NONMATCHING -static void atk23_getexp(void) -{ - u8 hold_effect; - int via_expshare = 0, sent_in; - u16* exp = &BATTLE_STRUCT->exp; - gBank1 = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - sent_in = gSentPokesToOpponent[(gBank1 & 2) >> 1]; - switch (BATTLE_STRUCT->atk23StateTracker) - { - case 0: //check if should receive exp at all - if (GetBankSide(gBank1) != 1 || (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) - BATTLE_STRUCT->atk23StateTracker = 6; //goto last case - else - { - BATTLE_STRUCT->atk23StateTracker++; - unk_2000000[0x16113] |= gBitTable[gBattlePartyID[gBank1]]; - } - break; - case 1: //calculate experience points to redistribute - { - int via_sent_in = 0, i; - u16 calculatedExp; - for (i = 0; i < 6; i++) - { - u16 item; - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == 0 || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) - continue; - if (gBitTable[i] & sent_in) - via_sent_in++; - - item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - if (item == ITEM_ENIGMA_BERRY) - hold_effect = gSaveBlock1.enigmaBerry.holdEffect; - else - hold_effect = ItemId_GetHoldEffect(item); - - if (hold_effect == HOLD_EFFECT_EXP_SHARE) - via_expshare++; - } - calculatedExp = gBaseStats[gBattleMons[gBank1].species].expYield * gBattleMons[gBank1].level / 7; - if (via_expshare) //at least one poke is getting exp via exp share - { - calculatedExp /= 2; - *exp = calculatedExp / via_sent_in; - if (*exp == 0) - *exp = 1; - - gExpShareExp = calculatedExp / via_expshare; - if (gExpShareExp == 0) - gExpShareExp = 1; - } - else - { - *exp = calculatedExp / via_sent_in; - if (*exp == 0) - *exp = 1; - gExpShareExp = 0; - } - BATTLE_STRUCT->atk23StateTracker++; - BATTLE_STRUCT->expGetterID = 0; - BATTLE_STRUCT->sentInPokes = sent_in; - } //no break statement - case 2: //loop; set exp value to the poke in expgetter_id and print message - if (gBattleExecBuffer == 0) - { - u16 item = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HELD_ITEM); - u8* tracker; u32 zero; - if (item == ITEM_ENIGMA_BERRY) - hold_effect = gSaveBlock1.enigmaBerry.holdEffect; - else - hold_effect = ItemId_GetHoldEffect(item); - - if ((hold_effect != HOLD_EFFECT_EXP_SHARE && !(BATTLE_STRUCT->sentInPokes & 1))) - { - BATTLE_STRUCT->sentInPokes >>= 1; - tracker = &BATTLE_STRUCT->atk23StateTracker; - zero = 0; - goto LABEL; - } - 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 - } - else - { - //music change in wild battle after fainting a poke - if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !BATTLE_STRUCT->wildVictorySong) - { - BattleMusicStop(); - PlayBGM(0x161); - BATTLE_STRUCT->wildVictorySong++; - } - - if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP)) - { - s16 stringID; - if (BATTLE_STRUCT->sentInPokes & 1) - gBattleMoveDamage = *exp; - else - gBattleMoveDamage = 0; - - if (hold_effect == HOLD_EFFECT_EXP_SHARE) - gBattleMoveDamage += gExpShareExp; - if (hold_effect == HOLD_EFFECT_LUCKY_EGG) - gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; - - if (IsTradedMon(&gPlayerParty[BATTLE_STRUCT->expGetterID])) - { - gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; - stringID = 0x14A; - } - else - stringID = 0x149; - - //get exp getter bank - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - if (!(gBattlePartyID[2] != BATTLE_STRUCT->expGetterID) && !(gAbsentBankFlags & gBitTable[2])) - BATTLE_STRUCT->expGetterBank = 2; - else - { - if (!(gAbsentBankFlags & gBitTable[0])) - BATTLE_STRUCT->expGetterBank = 0; - else - BATTLE_STRUCT->expGetterBank = 2; - } - } - else - BATTLE_STRUCT->expGetterBank = 0; - - //buffer poke name - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 4; - gBattleTextBuff1[2] = BATTLE_STRUCT->expGetterBank; - gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID; - gBattleTextBuff1[4] = 0xFF; - - //buffer 'gained' or 'gained a boosted' - gBattleTextBuff2[0] = 0xFD; - gBattleTextBuff2[1] = 0; - gBattleTextBuff2[2] = sBYTE0_32(stringID); - gBattleTextBuff2[3] = sBYTE1_32(stringID); - gBattleTextBuff2[4] = 0xFF; - - //buffer exp number - gBattleTextBuff3[0] = 0xFD; - gBattleTextBuff3[1] = 1; - gBattleTextBuff3[2] = 4; //word - gBattleTextBuff3[3] = 5; //max digits - gBattleTextBuff3[4] = gBattleMoveDamage; - gBattleTextBuff3[5] = sBYTE1_32(gBattleMoveDamage); - gBattleTextBuff3[6] = sBYTE2_32(gBattleMoveDamage); - gBattleTextBuff3[7] = sBYTE3_32(gBattleMoveDamage); - gBattleTextBuff3[8] = 0xFF; - - PrepareStringBattle(0xD, BATTLE_STRUCT->expGetterBank); - MonGainEVs(&gPlayerParty[BATTLE_STRUCT->expGetterID], gBattleMons[gBank1].species); - } - BATTLE_STRUCT->sentInPokes >>= 1; - BATTLE_STRUCT->atk23StateTracker++; - } - } - break; - case 3: //Set Stats and give exp - if (gBattleExecBuffer == 0) - { - gBattleBufferB[BATTLE_STRUCT->expGetterBank][0] = 0; - if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) != 100) - { - 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); - - gActiveBank = BATTLE_STRUCT->expGetterBank; - EmitExpBarUpdate(0, BATTLE_STRUCT->expGetterID, gBattleMoveDamage); - MarkBufferBankForExecution(gActiveBank); - } - BATTLE_STRUCT->atk23StateTracker++; - } - break; - case 4: //lvl up if necessary - if (gBattleExecBuffer == 0) - { - gActiveBank = BATTLE_STRUCT->expGetterBank; - if (gBattleBufferB[gActiveBank][0] == 0x21 && gBattleBufferB[gActiveBank][1] == 0xB) - { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID) - sub_80324F8(&gPlayerParty[gActiveBank], gActiveBank); - - //buff poke name - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 4; - gBattleTextBuff1[2] = gActiveBank; - gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID; - gBattleTextBuff1[4] = 0xFF; - - //buff level - gBattleTextBuff2[0] = 0xFD; - gBattleTextBuff2[1] = 1; - gBattleTextBuff2[2] = 1; - gBattleTextBuff2[3] = 3; - gBattleTextBuff2[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); - gBattleTextBuff2[5] = 0xFF; - - b_movescr_stack_push_cursor(); - gLeveledUpInBattle |= gBitTable[BATTLE_STRUCT->expGetterID]; - gBattlescriptCurrInstr = BattleScript_LevelUp; - gBattleMoveDamage = (gBattleBufferB[gActiveBank][2] | (gBattleBufferB[gActiveBank][3] << 8)); - AdjustFriendship(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0); - - //update battle mon structure after level up - if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && gBattleMons[0].hp) - { - gBattleMons[0].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); - gBattleMons[0].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP); - gBattleMons[0].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); - gBattleMons[0].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); - gBattleMons[0].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); - gBattleMons[0].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD); - gBattleMons[0].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); - gBattleMons[0].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF); - } - //What is else if? Guess it's too advanced for GameFreak - if (gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - { - gBattleMons[2].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); - gBattleMons[2].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP); - gBattleMons[2].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); - gBattleMons[2].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); - gBattleMons[2].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); - //There are no words...GF can't even copy&paste code properly - gBattleMons[2].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD); - gBattleMons[2].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD /*RIP*/); - gBattleMons[2].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); - } - BATTLE_STRUCT->atk23StateTracker = 5; - } - else - { - gBattleMoveDamage = 0; - BATTLE_STRUCT->atk23StateTracker = 5; - } - } - break; - case 5: //looper increment - if (gBattleMoveDamage) //there is exp to give, goto case 3 that gives exp - BATTLE_STRUCT->atk23StateTracker = 3; - else - { - if (++BATTLE_STRUCT->expGetterID <= 5) - BATTLE_STRUCT->atk23StateTracker = 2; //loop again - else - BATTLE_STRUCT->atk23StateTracker = 6; //we're done - } - break; - case 6: //increment instruction - if (gBattleExecBuffer == 0) - { - //not even sure why gamefreak clears that data in this place - gBattleMons[gBank1].item = 0; - gBattleMons[gBank1].ability = 0; - gBattlescriptCurrInstr += 2; - } - break; - } -} -#else -__attribute__((naked)) -static void atk23_getexp(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - movs r6, 0\n\ - ldr r0, _0802004C @ =0x0201605c\n\ - mov r10, r0\n\ - ldr r0, _08020050 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r0]\n\ - ldrb r0, [r0, 0x1]\n\ - bl GetBattleBank\n\ - ldr r1, _08020054 @ =gBank1\n\ - strb r0, [r1]\n\ - ldr r2, _08020058 @ =gSentPokesToOpponent\n\ - movs r1, 0x2\n\ - ands r1, r0\n\ - lsls r1, 24\n\ - lsrs r1, 25\n\ - adds r1, r2\n\ - ldrb r1, [r1]\n\ - mov r8, r1\n\ - mov r0, r10\n\ - subs r0, 0x4D\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x6\n\ - bls _08020040\n\ - bl _08020996\n\ -_08020040:\n\ - lsls r0, 2\n\ - ldr r1, _0802005C @ =_08020060\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_0802004C: .4byte 0x0201605c\n\ -_08020050: .4byte gBattlescriptCurrInstr\n\ -_08020054: .4byte gBank1\n\ -_08020058: .4byte gSentPokesToOpponent\n\ -_0802005C: .4byte _08020060\n\ - .align 2, 0\n\ -_08020060:\n\ - .4byte _0802007C\n\ - .4byte _080200FC\n\ - .4byte _08020216\n\ - .4byte _0802055C\n\ - .4byte _08020648\n\ - .4byte _08020910\n\ - .4byte _0802096C\n\ -_0802007C:\n\ - ldr r4, _080200A8 @ =gBank1\n\ - ldrb r0, [r4]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _08020098\n\ - ldr r0, _080200AC @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - ldr r0, _080200B0 @ =0x00000982\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080200BC\n\ -_08020098:\n\ - ldr r0, _080200B4 @ =0x02000000\n\ - ldr r1, _080200B8 @ =0x0001600f\n\ - adds r0, r1\n\ - movs r1, 0x6\n\ - strb r1, [r0]\n\ - bl _08020996\n\ - .align 2, 0\n\ -_080200A8: .4byte gBank1\n\ -_080200AC: .4byte gBattleTypeFlags\n\ -_080200B0: .4byte 0x00000982\n\ -_080200B4: .4byte 0x02000000\n\ -_080200B8: .4byte 0x0001600f\n\ -_080200BC:\n\ - ldr r2, _080200E8 @ =0x02000000\n\ - ldr r3, _080200EC @ =0x0001600f\n\ - adds r1, r2, r3\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - ldr r0, _080200F0 @ =0x00016113\n\ - adds r2, r0\n\ - ldr r3, _080200F4 @ =gBitTable\n\ - ldr r1, _080200F8 @ =gBattlePartyID\n\ - ldrb r0, [r4]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - ldr r0, [r0]\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - bl _08020996\n\ - .align 2, 0\n\ -_080200E8: .4byte 0x02000000\n\ -_080200EC: .4byte 0x0001600f\n\ -_080200F0: .4byte 0x00016113\n\ -_080200F4: .4byte gBitTable\n\ -_080200F8: .4byte gBattlePartyID\n\ -_080200FC:\n\ - movs r5, 0\n\ - movs r7, 0\n\ - ldr r1, _08020150 @ =gSaveBlock1 + 0x3688\n\ - mov r9, r1\n\ -_08020104:\n\ - movs r0, 0x64\n\ - adds r1, r7, 0\n\ - muls r1, r0\n\ - ldr r0, _08020154 @ =gPlayerParty\n\ - adds r4, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0802016A\n\ - adds r0, r4, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0802016A\n\ - ldr r0, _08020158 @ =gBitTable\n\ - lsls r1, r7, 2\n\ - adds r1, r0\n\ - ldr r0, [r1]\n\ - mov r2, r8\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - beq _08020138\n\ - adds r5, 0x1\n\ -_08020138:\n\ - adds r0, r4, 0\n\ - movs r1, 0xC\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0xAF\n\ - bne _0802015C\n\ - mov r3, r9\n\ - ldrb r4, [r3]\n\ - b _08020164\n\ - .align 2, 0\n\ -_08020150: .4byte gSaveBlock1 + 0x3688\n\ -_08020154: .4byte gPlayerParty\n\ -_08020158: .4byte gBitTable\n\ -_0802015C:\n\ - bl ItemId_GetHoldEffect\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ -_08020164:\n\ - cmp r4, 0x19\n\ - bne _0802016A\n\ - adds r6, 0x1\n\ -_0802016A:\n\ - adds r7, 0x1\n\ - cmp r7, 0x5\n\ - ble _08020104\n\ - ldr r3, _080201D0 @ =gBaseStats\n\ - ldr r2, _080201D4 @ =gBattleMons\n\ - ldr r0, _080201D8 @ =gBank1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - muls r1, r0\n\ - adds r1, r2\n\ - ldrh r2, [r1]\n\ - lsls r0, r2, 3\n\ - subs r0, r2\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - ldrb r2, [r0, 0x9]\n\ - adds r1, 0x2A\n\ - ldrb r0, [r1]\n\ - muls r0, r2\n\ - movs r1, 0x7\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r1, r0, 16\n\ - cmp r6, 0\n\ - beq _080201E0\n\ - lsrs r4, r0, 17\n\ - adds r0, r4, 0\n\ - adds r1, r5, 0\n\ - bl __divsi3\n\ - mov r1, r10\n\ - strh r0, [r1]\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - bne _080201B6\n\ - movs r0, 0x1\n\ - strh r0, [r1]\n\ -_080201B6:\n\ - ldr r5, _080201DC @ =gExpShareExp\n\ - adds r0, r4, 0\n\ - adds r1, r6, 0\n\ - bl __divsi3\n\ - strh r0, [r5]\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - bne _080201FA\n\ - movs r0, 0x1\n\ - strh r0, [r5]\n\ - b _080201FA\n\ - .align 2, 0\n\ -_080201D0: .4byte gBaseStats\n\ -_080201D4: .4byte gBattleMons\n\ -_080201D8: .4byte gBank1\n\ -_080201DC: .4byte gExpShareExp\n\ -_080201E0:\n\ - adds r0, r1, 0\n\ - adds r1, r5, 0\n\ - bl __divsi3\n\ - mov r2, r10\n\ - strh r0, [r2]\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - bne _080201F6\n\ - movs r0, 0x1\n\ - strh r0, [r2]\n\ -_080201F6:\n\ - ldr r0, _08020248 @ =gExpShareExp\n\ - strh r6, [r0]\n\ -_080201FA:\n\ - ldr r1, _0802024C @ =0x02000000\n\ - ldr r3, _08020250 @ =0x0001600f\n\ - adds r2, r1, r3\n\ - ldrb r0, [r2]\n\ - adds r0, 0x1\n\ - movs r3, 0\n\ - strb r0, [r2]\n\ - ldr r2, _08020254 @ =0x00016018\n\ - adds r0, r1, r2\n\ - strb r3, [r0]\n\ - ldr r3, _08020258 @ =0x0001605f\n\ - adds r1, r3\n\ - mov r0, r8\n\ - strb r0, [r1]\n\ -_08020216:\n\ - ldr r0, _0802025C @ =gBattleExecBuffer\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _08020220\n\ - b _08020996\n\ -_08020220:\n\ - ldr r0, _0802024C @ =0x02000000\n\ - ldr r1, _08020254 @ =0x00016018\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _08020260 @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0xC\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0xAF\n\ - bne _0802026C\n\ - ldr r0, _08020264 @ =gSaveBlock1\n\ - ldr r2, _08020268 @ =0x00003688\n\ - adds r0, r2\n\ - ldrb r4, [r0]\n\ - b _08020274\n\ - .align 2, 0\n\ -_08020248: .4byte gExpShareExp\n\ -_0802024C: .4byte 0x02000000\n\ -_08020250: .4byte 0x0001600f\n\ -_08020254: .4byte 0x00016018\n\ -_08020258: .4byte 0x0001605f\n\ -_0802025C: .4byte gBattleExecBuffer\n\ -_08020260: .4byte gPlayerParty\n\ -_08020264: .4byte gSaveBlock1\n\ -_08020268: .4byte 0x00003688\n\ -_0802026C:\n\ - bl ItemId_GetHoldEffect\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ -_08020274:\n\ - ldr r5, _08020294 @ =0x02000000\n\ - cmp r4, 0x19\n\ - beq _080202A0\n\ - ldr r3, _08020298 @ =0x0001605f\n\ - adds r1, r5, r3\n\ - ldrb r0, [r1]\n\ - movs r2, 0x1\n\ - ands r2, r0\n\ - cmp r2, 0\n\ - bne _080202A0\n\ - lsrs r0, 1\n\ - strb r0, [r1]\n\ - ldr r0, _0802029C @ =0x0001600f\n\ - adds r1, r5, r0\n\ - b _080202C8\n\ - .align 2, 0\n\ -_08020294: .4byte 0x02000000\n\ -_08020298: .4byte 0x0001605f\n\ -_0802029C: .4byte 0x0001600f\n\ -_080202A0:\n\ - ldr r1, _080202D4 @ =0x00016018\n\ - adds r0, r5, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _080202D8 @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - cmp r0, 0x64\n\ - bne _080202E8\n\ - ldr r2, _080202DC @ =0x0001605f\n\ - adds r1, r5, r2\n\ - ldrb r0, [r1]\n\ - lsrs r0, 1\n\ - movs r2, 0\n\ - strb r0, [r1]\n\ - ldr r3, _080202E0 @ =0x0001600f\n\ - adds r1, r5, r3\n\ -_080202C8:\n\ - movs r0, 0x5\n\ - strb r0, [r1]\n\ - ldr r0, _080202E4 @ =gBattleMoveDamage\n\ - str r2, [r0]\n\ - b _08020996\n\ - .align 2, 0\n\ -_080202D4: .4byte 0x00016018\n\ -_080202D8: .4byte gPlayerParty\n\ -_080202DC: .4byte 0x0001605f\n\ -_080202E0: .4byte 0x0001600f\n\ -_080202E4: .4byte gBattleMoveDamage\n\ -_080202E8:\n\ - ldr r0, _0802034C @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08020316\n\ - ldr r0, _08020350 @ =gBattleMons\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - beq _08020316\n\ - ldr r0, _08020354 @ =0x0001601b\n\ - adds r5, r0\n\ - ldrb r0, [r5]\n\ - cmp r0, 0\n\ - bne _08020316\n\ - bl BattleMusicStop\n\ - ldr r0, _08020358 @ =0x00000161\n\ - bl PlayBGM\n\ - ldrb r0, [r5]\n\ - adds r0, 0x1\n\ - strb r0, [r5]\n\ -_08020316:\n\ - ldr r5, _0802035C @ =0x02000000\n\ - ldr r1, _08020360 @ =0x00016018\n\ - adds r0, r5, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _08020364 @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _08020332\n\ - b _0802051E\n\ -_08020332:\n\ - ldr r2, _08020368 @ =0x0001605f\n\ - adds r0, r5, r2\n\ - ldrb r0, [r0]\n\ - movs r3, 0x1\n\ - ands r3, r0\n\ - cmp r3, 0\n\ - beq _08020370\n\ - ldr r1, _0802036C @ =gBattleMoveDamage\n\ - mov r3, r10\n\ - ldrh r0, [r3]\n\ - str r0, [r1]\n\ - mov r8, r1\n\ - b _08020376\n\ - .align 2, 0\n\ -_0802034C: .4byte gBattleTypeFlags\n\ -_08020350: .4byte gBattleMons\n\ -_08020354: .4byte 0x0001601b\n\ -_08020358: .4byte 0x00000161\n\ -_0802035C: .4byte 0x02000000\n\ -_08020360: .4byte 0x00016018\n\ -_08020364: .4byte gPlayerParty\n\ -_08020368: .4byte 0x0001605f\n\ -_0802036C: .4byte gBattleMoveDamage\n\ -_08020370:\n\ - ldr r0, _080203EC @ =gBattleMoveDamage\n\ - str r3, [r0]\n\ - mov r8, r0\n\ -_08020376:\n\ - cmp r4, 0x19\n\ - bne _08020386\n\ - ldr r0, _080203F0 @ =gExpShareExp\n\ - ldrh r1, [r0]\n\ - mov r2, r8\n\ - ldr r0, [r2]\n\ - adds r0, r1\n\ - str r0, [r2]\n\ -_08020386:\n\ - cmp r4, 0x28\n\ - bne _0802039C\n\ - mov r3, r8\n\ - ldr r1, [r3]\n\ - movs r0, 0x96\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - mov r1, r8\n\ - str r0, [r1]\n\ -_0802039C:\n\ - ldr r0, _080203F4 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080203B8\n\ - ldr r4, _080203EC @ =gBattleMoveDamage\n\ - ldr r1, [r4]\n\ - movs r0, 0x96\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - str r0, [r4]\n\ -_080203B8:\n\ - ldr r0, _080203F8 @ =0x02000000\n\ - ldr r2, _080203FC @ =0x00016018\n\ - adds r0, r2\n\ - ldrb r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _08020400 @ =gPlayerParty\n\ - adds r0, r1\n\ - bl IsTradedMon\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08020404\n\ - ldr r4, _080203EC @ =gBattleMoveDamage\n\ - ldr r1, [r4]\n\ - movs r0, 0x96\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - str r0, [r4]\n\ - movs r7, 0xA5\n\ - lsls r7, 1\n\ - mov r8, r4\n\ - b _0802040A\n\ - .align 2, 0\n\ -_080203EC: .4byte gBattleMoveDamage\n\ -_080203F0: .4byte gExpShareExp\n\ -_080203F4: .4byte gBattleTypeFlags\n\ -_080203F8: .4byte 0x02000000\n\ -_080203FC: .4byte 0x00016018\n\ -_08020400: .4byte gPlayerParty\n\ -_08020404:\n\ - ldr r7, _0802043C @ =0x00000149\n\ - ldr r3, _08020440 @ =gBattleMoveDamage\n\ - mov r8, r3\n\ -_0802040A:\n\ - ldr r0, _08020444 @ =gBattleTypeFlags\n\ - ldrh r0, [r0]\n\ - movs r1, 0x1\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _08020488\n\ - ldr r1, _08020448 @ =gBattlePartyID\n\ - ldr r0, _0802044C @ =0x02000000\n\ - ldr r3, _08020450 @ =0x00016018\n\ - adds r2, r0, r3\n\ - ldrh r1, [r1, 0x4]\n\ - adds r5, r0, 0\n\ - ldr r4, _08020454 @ =gBitTable\n\ - ldr r3, _08020458 @ =gAbsentBankFlags\n\ - ldrb r2, [r2]\n\ - cmp r1, r2\n\ - bne _08020460\n\ - ldrb r1, [r3]\n\ - ldr r0, [r4, 0x8]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _08020460\n\ - ldr r0, _0802045C @ =0x000160a2\n\ - adds r1, r5, r0\n\ - b _0802047C\n\ - .align 2, 0\n\ -_0802043C: .4byte 0x00000149\n\ -_08020440: .4byte gBattleMoveDamage\n\ -_08020444: .4byte gBattleTypeFlags\n\ -_08020448: .4byte gBattlePartyID\n\ -_0802044C: .4byte 0x02000000\n\ -_08020450: .4byte 0x00016018\n\ -_08020454: .4byte gBitTable\n\ -_08020458: .4byte gAbsentBankFlags\n\ -_0802045C: .4byte 0x000160a2\n\ -_08020460:\n\ - ldrb r2, [r3]\n\ - ldr r0, [r4]\n\ - ands r2, r0\n\ - cmp r2, 0\n\ - bne _08020478\n\ - ldr r1, _08020474 @ =0x000160a2\n\ - adds r0, r5, r1\n\ - strb r2, [r0]\n\ - b _08020490\n\ - .align 2, 0\n\ -_08020474: .4byte 0x000160a2\n\ -_08020478:\n\ - ldr r2, _08020484 @ =0x000160a2\n\ - adds r1, r5, r2\n\ -_0802047C:\n\ - movs r0, 0x2\n\ - strb r0, [r1]\n\ - b _08020490\n\ - .align 2, 0\n\ -_08020484: .4byte 0x000160a2\n\ -_08020488:\n\ - ldr r0, _08020530 @ =0x02000000\n\ - ldr r3, _08020534 @ =0x000160a2\n\ - adds r0, r3\n\ - strb r1, [r0]\n\ -_08020490:\n\ - ldr r1, _08020538 @ =gBattleTextBuff1\n\ - movs r3, 0\n\ - movs r2, 0xFD\n\ - strb r2, [r1]\n\ - movs r5, 0x4\n\ - strb r5, [r1, 0x1]\n\ - ldr r4, _08020530 @ =0x02000000\n\ - ldr r0, _08020534 @ =0x000160a2\n\ - adds r6, r4, r0\n\ - ldrb r0, [r6]\n\ - strb r0, [r1, 0x2]\n\ - ldr r0, _0802053C @ =0x00016018\n\ - adds r4, r0\n\ - ldrb r0, [r4]\n\ - strb r0, [r1, 0x3]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x4]\n\ - ldr r1, _08020540 @ =gBattleTextBuff2\n\ - strb r2, [r1]\n\ - strb r3, [r1, 0x1]\n\ - strb r7, [r1, 0x2]\n\ - movs r3, 0xFF\n\ - lsls r3, 8\n\ - ands r7, r3\n\ - asrs r0, r7, 8\n\ - strb r0, [r1, 0x3]\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - strb r0, [r1, 0x4]\n\ - ldr r1, _08020544 @ =gBattleTextBuff3\n\ - strb r2, [r1]\n\ - movs r0, 0x1\n\ - strb r0, [r1, 0x1]\n\ - strb r5, [r1, 0x2]\n\ - movs r0, 0x5\n\ - strb r0, [r1, 0x3]\n\ - mov r0, r8\n\ - ldr r2, [r0]\n\ - strb r2, [r1, 0x4]\n\ - adds r0, r2, 0\n\ - ands r0, r3\n\ - asrs r0, 8\n\ - strb r0, [r1, 0x5]\n\ - movs r0, 0xFF\n\ - lsls r0, 16\n\ - ands r0, r2\n\ - asrs r0, 16\n\ - strb r0, [r1, 0x6]\n\ - lsrs r2, 24\n\ - strb r2, [r1, 0x7]\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - strb r0, [r1, 0x8]\n\ - ldrb r1, [r6]\n\ - movs r0, 0xD\n\ - bl PrepareStringBattle\n\ - ldrb r1, [r4]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _08020548 @ =gPlayerParty\n\ - adds r0, r1\n\ - ldr r3, _0802054C @ =gBattleMons\n\ - ldr r1, _08020550 @ =gBank1\n\ - ldrb r2, [r1]\n\ - movs r1, 0x58\n\ - muls r1, r2\n\ - adds r1, r3\n\ - ldrh r1, [r1]\n\ - bl MonGainEVs\n\ -_0802051E:\n\ - ldr r1, _08020530 @ =0x02000000\n\ - ldr r3, _08020554 @ =0x0001605f\n\ - adds r2, r1, r3\n\ - ldrb r0, [r2]\n\ - lsrs r0, 1\n\ - strb r0, [r2]\n\ - ldr r0, _08020558 @ =0x0001600f\n\ - adds r1, r0\n\ - b _08020618\n\ - .align 2, 0\n\ -_08020530: .4byte 0x02000000\n\ -_08020534: .4byte 0x000160a2\n\ -_08020538: .4byte gBattleTextBuff1\n\ -_0802053C: .4byte 0x00016018\n\ -_08020540: .4byte gBattleTextBuff2\n\ -_08020544: .4byte gBattleTextBuff3\n\ -_08020548: .4byte gPlayerParty\n\ -_0802054C: .4byte gBattleMons\n\ -_08020550: .4byte gBank1\n\ -_08020554: .4byte 0x0001605f\n\ -_08020558: .4byte 0x0001600f\n\ -_0802055C:\n\ - ldr r0, _08020620 @ =gBattleExecBuffer\n\ - ldr r2, [r0]\n\ - cmp r2, 0\n\ - beq _08020566\n\ - b _08020996\n\ -_08020566:\n\ - ldr r1, _08020624 @ =gBattleBufferB\n\ - ldr r4, _08020628 @ =0x02000000\n\ - ldr r3, _0802062C @ =0x000160a2\n\ - adds r3, r4\n\ - mov r8, r3\n\ - ldrb r0, [r3]\n\ - lsls r0, 9\n\ - adds r0, r1\n\ - strb r2, [r0]\n\ - ldr r0, _08020630 @ =0x00016018\n\ - adds r7, r4, r0\n\ - ldrb r0, [r7]\n\ - movs r6, 0x64\n\ - muls r0, r6\n\ - ldr r5, _08020634 @ =gPlayerParty\n\ - adds r0, r5\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _08020612\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - cmp r0, 0x64\n\ - beq _08020612\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3A\n\ - bl GetMonData\n\ - ldr r1, _08020638 @ =0x00017180\n\ - adds r4, r1\n\ - strh r0, [r4]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3B\n\ - bl GetMonData\n\ - strh r0, [r4, 0x2]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3C\n\ - bl GetMonData\n\ - strh r0, [r4, 0x4]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - strh r0, [r4, 0x6]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3E\n\ - bl GetMonData\n\ - strh r0, [r4, 0x8]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3F\n\ - bl GetMonData\n\ - strh r0, [r4, 0xA]\n\ - ldr r4, _0802063C @ =gActiveBank\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - strb r0, [r4]\n\ - ldrb r1, [r7]\n\ - ldr r0, _08020640 @ =gBattleMoveDamage\n\ - ldrh r2, [r0]\n\ - movs r0, 0\n\ - bl EmitExpBarUpdate\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ -_08020612:\n\ - ldr r1, _08020628 @ =0x02000000\n\ - ldr r3, _08020644 @ =0x0001600f\n\ - adds r1, r3\n\ -_08020618:\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020620: .4byte gBattleExecBuffer\n\ -_08020624: .4byte gBattleBufferB\n\ -_08020628: .4byte 0x02000000\n\ -_0802062C: .4byte 0x000160a2\n\ -_08020630: .4byte 0x00016018\n\ -_08020634: .4byte gPlayerParty\n\ -_08020638: .4byte 0x00017180\n\ -_0802063C: .4byte gActiveBank\n\ -_08020640: .4byte gBattleMoveDamage\n\ -_08020644: .4byte 0x0001600f\n\ -_08020648:\n\ - ldr r0, _080208AC @ =gBattleExecBuffer\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _08020652\n\ - b _08020996\n\ -_08020652:\n\ - ldr r1, _080208B0 @ =gActiveBank\n\ - ldr r4, _080208B4 @ =0x02000000\n\ - ldr r2, _080208B8 @ =0x000160a2\n\ - adds r0, r4, r2\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldr r2, _080208BC @ =gBattleBufferB\n\ - ldrb r3, [r1]\n\ - lsls r1, r3, 9\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x21\n\ - beq _0802066E\n\ - b _080208F0\n\ -_0802066E:\n\ - adds r0, r2, 0x1\n\ - adds r0, r1, r0\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xB\n\ - beq _0802067A\n\ - b _080208F0\n\ -_0802067A:\n\ - ldr r0, _080208C0 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080206A8\n\ - ldr r1, _080208C4 @ =gBattlePartyID\n\ - lsls r0, r3, 1\n\ - adds r2, r0, r1\n\ - ldr r0, _080208C8 @ =0x00016018\n\ - adds r1, r4, r0\n\ - ldrh r0, [r2]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bne _080206A8\n\ - adds r1, r0, 0\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _080208CC @ =gPlayerParty\n\ - adds r0, r1\n\ - adds r1, r3, 0\n\ - bl sub_80324F8\n\ -_080206A8:\n\ - ldr r1, _080208D0 @ =gBattleTextBuff1\n\ - movs r2, 0xFD\n\ - strb r2, [r1]\n\ - movs r0, 0x4\n\ - strb r0, [r1, 0x1]\n\ - ldr r5, _080208B0 @ =gActiveBank\n\ - ldrb r0, [r5]\n\ - strb r0, [r1, 0x2]\n\ - ldr r0, _080208B4 @ =0x02000000\n\ - ldr r3, _080208C8 @ =0x00016018\n\ - adds r6, r0, r3\n\ - ldrb r0, [r6]\n\ - strb r0, [r1, 0x3]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x4]\n\ - ldr r4, _080208D4 @ =gBattleTextBuff2\n\ - strb r2, [r4]\n\ - movs r0, 0x1\n\ - strb r0, [r4, 0x1]\n\ - strb r0, [r4, 0x2]\n\ - movs r0, 0x3\n\ - strb r0, [r4, 0x3]\n\ - ldrb r0, [r6]\n\ - movs r1, 0x64\n\ - mov r8, r1\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - ldr r7, _080208CC @ =gPlayerParty\n\ - adds r0, r7\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - strb r0, [r4, 0x4]\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - strb r0, [r4, 0x5]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r2, _080208D8 @ =gLeveledUpInBattle\n\ - ldr r1, _080208DC @ =gBitTable\n\ - ldrb r0, [r6]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldr r1, _080208E0 @ =gBattlescriptCurrInstr\n\ - ldr r0, _080208E4 @ =BattleScript_LevelUp\n\ - str r0, [r1]\n\ - ldr r4, _080208E8 @ =gBattleMoveDamage\n\ - ldr r2, _080208BC @ =gBattleBufferB\n\ - ldrb r1, [r5]\n\ - lsls r1, 9\n\ - adds r0, r2, 0x2\n\ - adds r0, r1, r0\n\ - ldrb r3, [r0]\n\ - adds r2, 0x3\n\ - adds r1, r2\n\ - ldrb r0, [r1]\n\ - lsls r0, 8\n\ - orrs r3, r0\n\ - str r3, [r4]\n\ - ldrb r0, [r6]\n\ - mov r3, r8\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r0, r7\n\ - movs r1, 0\n\ - bl AdjustFriendship\n\ - ldr r0, _080208C4 @ =gBattlePartyID\n\ - ldrb r1, [r6]\n\ - ldrh r0, [r0]\n\ - cmp r0, r1\n\ - bne _080207EC\n\ - ldr r4, _080208EC @ =gBattleMons\n\ - ldrh r0, [r4, 0x28]\n\ - cmp r0, 0\n\ - beq _080207EC\n\ - mov r0, r8\n\ - muls r0, r1\n\ - adds r0, r7\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - adds r1, r4, 0\n\ - adds r1, 0x2A\n\ - strb r0, [r1]\n\ - ldrb r0, [r6]\n\ - mov r1, r8\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r0, r7\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - strh r0, [r4, 0x28]\n\ - ldrb r0, [r6]\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - adds r0, r7\n\ - movs r1, 0x3A\n\ - bl GetMonData\n\ - strh r0, [r4, 0x2C]\n\ - ldrb r0, [r6]\n\ - mov r3, r8\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r0, r7\n\ - movs r1, 0x3B\n\ - bl GetMonData\n\ - strh r0, [r4, 0x2]\n\ - ldrb r0, [r6]\n\ - mov r1, r8\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r0, r7\n\ - movs r1, 0x3C\n\ - bl GetMonData\n\ - strh r0, [r4, 0x4]\n\ - ldrb r0, [r6]\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - adds r0, r7\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - strh r0, [r4, 0x6]\n\ - ldrb r0, [r6]\n\ - mov r3, r8\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r0, r7\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - strh r0, [r4, 0x6]\n\ - ldrb r0, [r6]\n\ - mov r1, r8\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r0, r7\n\ - movs r1, 0x3E\n\ - bl GetMonData\n\ - strh r0, [r4, 0x8]\n\ - ldrb r0, [r6]\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - adds r0, r7\n\ - movs r1, 0x3F\n\ - bl GetMonData\n\ - strh r0, [r4, 0xA]\n\ -_080207EC:\n\ - ldr r0, _080208C4 @ =gBattlePartyID\n\ - ldr r1, _080208B4 @ =0x02000000\n\ - ldr r3, _080208C8 @ =0x00016018\n\ - adds r7, r1, r3\n\ - ldrb r2, [r7]\n\ - ldrh r0, [r0, 0x4]\n\ - cmp r0, r2\n\ - bne _080208F6\n\ - ldr r6, _080208EC @ =gBattleMons\n\ - movs r0, 0xD8\n\ - adds r0, r6\n\ - mov r8, r0\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - beq _080208F6\n\ - ldr r0, _080208C0 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080208F6\n\ - movs r5, 0x64\n\ - adds r0, r2, 0\n\ - muls r0, r5\n\ - ldr r4, _080208CC @ =gPlayerParty\n\ - adds r0, r4\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xDA\n\ - strb r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - mov r1, r8\n\ - strh r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3A\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xDC\n\ - strh r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3B\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xB2\n\ - strh r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3C\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xB4\n\ - strh r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - movs r2, 0xB6\n\ - adds r2, r6\n\ - mov r8, r2\n\ - strh r0, [r2]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - mov r3, r8\n\ - strh r0, [r3]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3E\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xB8\n\ - strh r0, [r1]\n\ - b _080208F6\n\ - .align 2, 0\n\ -_080208AC: .4byte gBattleExecBuffer\n\ -_080208B0: .4byte gActiveBank\n\ -_080208B4: .4byte 0x02000000\n\ -_080208B8: .4byte 0x000160a2\n\ -_080208BC: .4byte gBattleBufferB\n\ -_080208C0: .4byte gBattleTypeFlags\n\ -_080208C4: .4byte gBattlePartyID\n\ -_080208C8: .4byte 0x00016018\n\ -_080208CC: .4byte gPlayerParty\n\ -_080208D0: .4byte gBattleTextBuff1\n\ -_080208D4: .4byte gBattleTextBuff2\n\ -_080208D8: .4byte gLeveledUpInBattle\n\ -_080208DC: .4byte gBitTable\n\ -_080208E0: .4byte gBattlescriptCurrInstr\n\ -_080208E4: .4byte BattleScript_LevelUp\n\ -_080208E8: .4byte gBattleMoveDamage\n\ -_080208EC: .4byte gBattleMons\n\ -_080208F0:\n\ - ldr r1, _08020904 @ =gBattleMoveDamage\n\ - movs r0, 0\n\ - str r0, [r1]\n\ -_080208F6:\n\ - ldr r0, _08020908 @ =0x02000000\n\ - ldr r1, _0802090C @ =0x0001600f\n\ - adds r0, r1\n\ - movs r1, 0x5\n\ - strb r1, [r0]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020904: .4byte gBattleMoveDamage\n\ -_08020908: .4byte 0x02000000\n\ -_0802090C: .4byte 0x0001600f\n\ -_08020910:\n\ - ldr r0, _08020924 @ =gBattleMoveDamage\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _08020930\n\ - ldr r0, _08020928 @ =0x02000000\n\ - ldr r2, _0802092C @ =0x0001600f\n\ - adds r0, r2\n\ - movs r1, 0x3\n\ - strb r1, [r0]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020924: .4byte gBattleMoveDamage\n\ -_08020928: .4byte 0x02000000\n\ -_0802092C: .4byte 0x0001600f\n\ -_08020930:\n\ - ldr r2, _08020950 @ =0x02000000\n\ - ldr r3, _08020954 @ =0x00016018\n\ - adds r1, r2, r3\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x5\n\ - bhi _0802095C\n\ - ldr r0, _08020958 @ =0x0001600f\n\ - adds r1, r2, r0\n\ - movs r0, 0x2\n\ - strb r0, [r1]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020950: .4byte 0x02000000\n\ -_08020954: .4byte 0x00016018\n\ -_08020958: .4byte 0x0001600f\n\ -_0802095C:\n\ - ldr r3, _08020968 @ =0x0001600f\n\ - adds r1, r2, r3\n\ - movs r0, 0x6\n\ - strb r0, [r1]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020968: .4byte 0x0001600f\n\ -_0802096C:\n\ - ldr r0, _080209A4 @ =gBattleExecBuffer\n\ - ldr r5, [r0]\n\ - cmp r5, 0\n\ - bne _08020996\n\ - ldr r4, _080209A8 @ =gBattleMons\n\ - ldr r2, _080209AC @ =gBank1\n\ - ldrb r0, [r2]\n\ - movs r1, 0x58\n\ - muls r0, r1\n\ - adds r0, r4\n\ - movs r3, 0\n\ - strh r5, [r0, 0x2E]\n\ - ldrb r0, [r2]\n\ - muls r0, r1\n\ - adds r0, r4\n\ - adds r0, 0x20\n\ - strb r3, [r0]\n\ - ldr r1, _080209B0 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x2\n\ - str r0, [r1]\n\ -_08020996:\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080209A4: .4byte gBattleExecBuffer\n\ -_080209A8: .4byte gBattleMons\n\ -_080209AC: .4byte gBank1\n\ -_080209B0: .4byte gBattlescriptCurrInstr\n\ - .syntax divided\n"); -} - -#endif // NONMATCHING - -#ifdef NONMATCHING -static void atk24(void) -{ - u16 HP_count = 0; - int i; - if (gBattleExecBuffer) {return;} - - for (i = 0; i < 6; i++) - { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) - HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP); - } - - if (HP_count == 0) - gBattleOutcome |= BATTLE_LOST; - - for (HP_count = 0, i = 0; i < 6; i++) - { - if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG)) - HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP); - } - - if (!HP_count) - gBattleOutcome |= BATTLE_WON; - - if (!gBattleOutcome && (gBattleTypeFlags & BATTLE_TYPE_LINK)) - { - register int found1 asm("r2"); - register int found2 asm("r4"); - - //I can't for the love of god decompile that part - - for (found1 = 0, i = 0; i < gNoOfAllBanks; i += 2) - { - if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40) - found1++; - } - - for (found2 = 0, i = 1; i < gNoOfAllBanks; i += 2) - { - if ((gHitMarker & HITMARKER_UNK(i)) && !gSpecialStatuses[i].flag40) - found2++; - } - - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - if (found2 + found1 > 1) - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - else - gBattlescriptCurrInstr += 5; - } - else - { - if (found2 != 0 && found1 != 0) - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - else - gBattlescriptCurrInstr += 5; - } - } - else - gBattlescriptCurrInstr += 5; - -} -#else -__attribute__((naked)) -static void atk24(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - movs r6, 0\n\ - ldr r0, _08020AF0 @ =gBattleExecBuffer\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _080209C6\n\ - b _08020B46\n\ -_080209C6:\n\ - movs r5, 0\n\ -_080209C8:\n\ - movs r0, 0x64\n\ - adds r1, r5, 0\n\ - muls r1, r0\n\ - ldr r0, _08020AF4 @ =gPlayerParty\n\ - adds r4, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _080209F8\n\ - adds r0, r4, 0\n\ - movs r1, 0x2D\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _080209F8\n\ - adds r0, r4, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - adds r0, r6, r0\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ -_080209F8:\n\ - adds r5, 0x1\n\ - cmp r5, 0x5\n\ - ble _080209C8\n\ - cmp r6, 0\n\ - bne _08020A0C\n\ - ldr r0, _08020AF8 @ =gBattleOutcome\n\ - ldrb r1, [r0]\n\ - movs r2, 0x2\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ -_08020A0C:\n\ - movs r6, 0\n\ - movs r5, 0\n\ -_08020A10:\n\ - movs r0, 0x64\n\ - adds r1, r5, 0\n\ - muls r1, r0\n\ - ldr r0, _08020AFC @ =gEnemyParty\n\ - adds r4, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _08020A40\n\ - adds r0, r4, 0\n\ - movs r1, 0x2D\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _08020A40\n\ - adds r0, r4, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - adds r0, r6, r0\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ -_08020A40:\n\ - adds r5, 0x1\n\ - cmp r5, 0x5\n\ - ble _08020A10\n\ - ldr r2, _08020AF8 @ =gBattleOutcome\n\ - cmp r6, 0\n\ - bne _08020A54\n\ - ldrb r0, [r2]\n\ - movs r1, 0x1\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ -_08020A54:\n\ - ldrb r0, [r2]\n\ - cmp r0, 0\n\ - bne _08020B3E\n\ - ldr r2, _08020B00 @ =gBattleTypeFlags\n\ - ldrh r1, [r2]\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - mov r8, r2\n\ - cmp r0, 0\n\ - beq _08020B3E\n\ - movs r2, 0\n\ - movs r5, 0\n\ - ldr r0, _08020B04 @ =gNoOfAllBanks\n\ - ldrb r3, [r0]\n\ - mov r12, r0\n\ - ldr r7, _08020B08 @ =gBattlescriptCurrInstr\n\ - cmp r2, r3\n\ - bge _08020AA0\n\ - ldr r0, _08020B0C @ =gHitMarker\n\ - movs r1, 0x80\n\ - lsls r1, 21\n\ - ldr r6, [r0]\n\ - adds r4, r3, 0\n\ - ldr r3, _08020B10 @ =gSpecialStatuses\n\ -_08020A84:\n\ - adds r0, r1, 0\n\ - lsls r0, r5\n\ - ands r0, r6\n\ - cmp r0, 0\n\ - beq _08020A98\n\ - ldrb r0, [r3]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _08020A98\n\ - adds r2, 0x1\n\ -_08020A98:\n\ - adds r3, 0x28\n\ - adds r5, 0x2\n\ - cmp r5, r4\n\ - blt _08020A84\n\ -_08020AA0:\n\ - movs r4, 0\n\ - movs r5, 0x1\n\ - mov r0, r12\n\ - ldrb r3, [r0]\n\ - cmp r5, r3\n\ - bge _08020ADA\n\ - ldr r0, _08020B0C @ =gHitMarker\n\ - movs r1, 0x80\n\ - lsls r1, 21\n\ - mov r12, r1\n\ - ldr r1, [r0]\n\ - ldr r0, _08020B10 @ =gSpecialStatuses\n\ - adds r6, r3, 0\n\ - adds r3, r0, 0\n\ - adds r3, 0x14\n\ -_08020ABE:\n\ - mov r0, r12\n\ - lsls r0, r5\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08020AD2\n\ - ldrb r0, [r3]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _08020AD2\n\ - adds r4, 0x1\n\ -_08020AD2:\n\ - adds r3, 0x28\n\ - adds r5, 0x2\n\ - cmp r5, r6\n\ - blt _08020ABE\n\ -_08020ADA:\n\ - mov r0, r8\n\ - ldrh r1, [r0]\n\ - movs r0, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08020B14\n\ - adds r0, r4, r2\n\ - cmp r0, 0x1\n\ - bgt _08020B1C\n\ - b _08020B36\n\ - .align 2, 0\n\ -_08020AF0: .4byte gBattleExecBuffer\n\ -_08020AF4: .4byte gPlayerParty\n\ -_08020AF8: .4byte gBattleOutcome\n\ -_08020AFC: .4byte gEnemyParty\n\ -_08020B00: .4byte gBattleTypeFlags\n\ -_08020B04: .4byte gNoOfAllBanks\n\ -_08020B08: .4byte gBattlescriptCurrInstr\n\ -_08020B0C: .4byte gHitMarker\n\ -_08020B10: .4byte gSpecialStatuses\n\ -_08020B14:\n\ - cmp r4, 0\n\ - beq _08020B36\n\ - cmp r2, 0\n\ - beq _08020B36\n\ -_08020B1C:\n\ - ldr r2, [r7]\n\ - ldrb r1, [r2, 0x1]\n\ - ldrb r0, [r2, 0x2]\n\ - lsls r0, 8\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x3]\n\ - lsls r0, 16\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x4]\n\ - lsls r0, 24\n\ - adds r1, r0\n\ - str r1, [r7]\n\ - b _08020B46\n\ -_08020B36:\n\ - ldr r0, [r7]\n\ - adds r0, 0x5\n\ - str r0, [r7]\n\ - b _08020B46\n\ -_08020B3E:\n\ - ldr r1, _08020B50 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x5\n\ - str r0, [r1]\n\ -_08020B46:\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08020B50: .4byte gBattlescriptCurrInstr\n\ - .syntax divided\n"); -} -#endif - -static void MoveValuesCleanUp(void) -{ - gBattleMoveFlags = 0; - BATTLE_STRUCT->dmgMultiplier = 1; - gCritMultiplier = 1; - gBattleCommunication[MOVE_EFFECT_BYTE] = 0; - gBattleCommunication[6] = 0; - gHitMarker &= ~(HITMARKER_DESTINYBOND); - gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); -} - -static void atk25_move_values_cleanup(void) -{ - MoveValuesCleanUp(); - gBattlescriptCurrInstr += 1; -} - -static void atk26_set_multihit(void) -{ - gMultiHitCounter = BSScriptRead8(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr += 2; -} - -static void atk27_decrement_multihit(void) -{ - if (--gMultiHitCounter == 0) - gBattlescriptCurrInstr += 5; - else - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -static void atk28_goto(void) -{ - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -static void atk29_jumpifbyte(void) -{ - u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1); - u8* ptr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); - u8 value = BSScriptRead8(gBattlescriptCurrInstr + 6); - u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7); - gBattlescriptCurrInstr += 11; - switch (caseID) - { - case CMP_EQUAL: - if (*ptr == value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_NOT_EQUAL: - if (*ptr != value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_GREATER_THAN: - if (*ptr > value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_LESS_THAN: - if (*ptr < value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_COMMON_BITS: - if (*ptr & value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_NO_COMMON_BITS: - if (!(*ptr & value)) - gBattlescriptCurrInstr = jump_loc; - break; - } -} - -static void atk2A_jumpifhalfword(void) -{ - u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1); - u16* ptr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); - u16 value = BS2ScriptRead16(gBattlescriptCurrInstr + 6); - u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 8); - gBattlescriptCurrInstr += 12; - switch (caseID) - { - case CMP_EQUAL: - if (*ptr == value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_NOT_EQUAL: - if (*ptr != value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_GREATER_THAN: - if (*ptr > value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_LESS_THAN: - if (*ptr < value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_COMMON_BITS: - if (*ptr & value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_NO_COMMON_BITS: - if (!(*ptr & value)) - gBattlescriptCurrInstr = jump_loc; - break; - } -} - -static void atk2B_jumpifword(void) -{ - u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1); - u32* ptr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); - u32 value = BSScriptRead32(gBattlescriptCurrInstr + 6); - u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); - gBattlescriptCurrInstr += 14; - switch (caseID) - { - case CMP_EQUAL: - if (*ptr == value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_NOT_EQUAL: - if (*ptr != value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_GREATER_THAN: - if (*ptr > value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_LESS_THAN: - if (*ptr < value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_COMMON_BITS: - if (*ptr & value) - gBattlescriptCurrInstr = jump_loc; - break; - case CMP_NO_COMMON_BITS: - if (!(*ptr & value)) - gBattlescriptCurrInstr = jump_loc; - break; - } -} - -static void atk2C_jumpifarrayequal(void) -{ - //Mem1, Mem2, Size, Jump Loc - u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); - u32 size = BSScriptRead8(gBattlescriptCurrInstr + 9); - u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); - - u8 i; - for (i = 0; i < size; i++) - { - if (*mem1 != *mem2) - { - gBattlescriptCurrInstr += 14; - break; - } - mem1++, mem2++; - } - - if (i == size) - gBattlescriptCurrInstr = jump_loc; -} - -static void atk2D_jumpifarraynotequal(void) -{ - //Mem1, Mem2, Size, Jump Loc - u8 equal_bytes = 0; - u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); - u32 size = BSScriptRead8(gBattlescriptCurrInstr + 9); - u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); - - u8 i; - for (i = 0; i < size; i++) - { - if (*mem1 == *mem2) - { - equal_bytes++; - } - mem1++, mem2++; - } - - if (equal_bytes != size) - gBattlescriptCurrInstr = jump_loc; - else - gBattlescriptCurrInstr += 14; -} - -static void atk2E_setbyte(void) -{ - u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - *mem = BSScriptRead8(gBattlescriptCurrInstr + 5); - gBattlescriptCurrInstr += 6; -} - -static void atk2F_addbyte(void) -{ - u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - *mem += BSScriptRead8(gBattlescriptCurrInstr + 5); - gBattlescriptCurrInstr += 6; -} - -static void atk30_subbyte(void) -{ - u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - *mem -= BSScriptRead8(gBattlescriptCurrInstr + 5); - gBattlescriptCurrInstr += 6; -} - -static void atk31_copyarray(void) -{ - u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); - s32 size = BSScriptRead8(gBattlescriptCurrInstr + 9); - - s32 i; - for (i = 0; i < size; i++) - { - mem1[i] = mem2[i]; - } - - gBattlescriptCurrInstr += 10; -} - -static void atk32_copyarray_withindex(void) -{ - u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); - u8* index = BS2ScriptReadPtr(gBattlescriptCurrInstr + 9); - s32 size = BSScriptRead8(gBattlescriptCurrInstr + 13); - - s32 i; - for (i = 0; i < size; i++) - { - mem1[i] = mem2[i + *index]; - } - - gBattlescriptCurrInstr += 14; -} - -static void atk33_orbyte(void) -{ - u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - *mem |= BSScriptRead8(gBattlescriptCurrInstr + 5); - gBattlescriptCurrInstr += 6; -} - -static void atk34_orhalfword(void) -{ - u16* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u16 val = BS2ScriptRead16(gBattlescriptCurrInstr + 5); - - *mem |= val; - gBattlescriptCurrInstr += 7; -} - -static void atk35_orword(void) -{ - u32* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u32 val = BS2ScriptRead32(gBattlescriptCurrInstr + 5); - - *mem |= val; - gBattlescriptCurrInstr += 9; -} - -static void atk36_bicbyte(void) -{ - u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - *mem &= ~(BSScriptRead8(gBattlescriptCurrInstr + 5)); - gBattlescriptCurrInstr += 6; -} - -static void atk37_bichalfword(void) -{ - u16* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u16 val = BS2ScriptRead16(gBattlescriptCurrInstr + 5); - - *mem &= ~val; - gBattlescriptCurrInstr += 7; -} - -static void atk38_bicword(void) -{ - u32* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u32 val = BS2ScriptRead32(gBattlescriptCurrInstr + 5); - - *mem &= ~val; - gBattlescriptCurrInstr += 9; -} - -static void atk39_pause(void) -{ - if (gBattleExecBuffer == 0) - { - u16 value = BS2ScriptRead16(gBattlescriptCurrInstr + 1); - if (++gPauseCounterBattle >= value) - { - gPauseCounterBattle = 0; - gBattlescriptCurrInstr += 3; - } - } -} - -static void atk3A_waitstate(void) -{ - if (gBattleExecBuffer == 0) - gBattlescriptCurrInstr++; -} - -static void atk3B_healthbar_update(void) -{ - if (!BSScriptRead8(gBattlescriptCurrInstr + 1)) - gActiveBank = gBankTarget; - else - gActiveBank = gBankAttacker; - - EmitHealthBarUpdate(0, gBattleMoveDamage); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 2; -} - -static void atk3C_return(void) -{ - b_movescr_stack_pop_cursor(); -} - -static void atk3D_end(void) -{ - gBattleMoveFlags = 0; - gActiveBank = 0; - gFightStateTracker = 0xB; -} - -static void atk3E_end2(void) -{ - //not much difference between this and 3D. It's more apparent in Emerald - gActiveBank = 0; - gFightStateTracker = 0xB; -} - -static void atk3F_end3(void) //pops the main function stack -{ - b_movescr_stack_pop_cursor(); - if (B_FUNCTION_STACK->size) - B_FUNCTION_STACK->size--; - gBattleMainFunc = B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size]; -} - -static void atk41_call(void) -{ - b_movescr_stack_push(gBattlescriptCurrInstr + 5); - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -static void atk42_jumpiftype2(void) //u8 bank, u8 type, *ptr -{ - u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - - if (BSScriptRead8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type1 || BSScriptRead8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type2) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 3); - else - gBattlescriptCurrInstr += 7; -} - -static void atk43_jumpifabilitypresent(void) -{ - if (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, BSScriptRead8(gBattlescriptCurrInstr + 1), 0, 0)) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); - else - gBattlescriptCurrInstr += 6; -} - -static void atk44(void) -{ - unk_2000000[gBankAttacker + 0x16060] = 1; -} - -#ifdef NONMATCHING - -static void atk45_playanimation(void) -{ - #define ANIMATION_ID BSScriptRead8(gBattlescriptCurrInstr + 2) - #define ARGUMENT (u16*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 3) - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - - if ( ANIMATION_ID == 1 || ANIMATION_ID == 0x11 || ANIMATION_ID == 2) { - EmitBattleAnimation(0, ANIMATION_ID, *argument); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 7; - } else if (gHitMarker & HITMARKER_NO_ANIMATIONS) { - b_movescr_stack_push(gBattlescriptCurrInstr + 7); - gBattlescriptCurrInstr = BattleScript_Pausex20; - } else { - if (((ANIMATION_ID - 10) > 3 && gStatuses3[gActiveBank] & (STATUS3_SEMI_INVULNERABLE))) { - gBattlescriptCurrInstr += 7; - } else { - EmitBattleAnimation(0, ANIMATION_ID, *argument); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 7; - } - } -} - -#else -__attribute__((naked)) -static void atk45_playanimation(void) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - ldr r5, _08021444 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r5]\n\ - ldrb r0, [r0, 0x1]\n\ - bl GetBattleBank\n\ - ldr r6, _08021448 @ =gActiveBank\n\ - strb r0, [r6]\n\ - ldr r2, [r5]\n\ - ldrb r1, [r2, 0x3]\n\ - ldrb r0, [r2, 0x4]\n\ - lsls r0, 8\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x5]\n\ - lsls r0, 16\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x6]\n\ - lsls r0, 24\n\ - adds r3, r1, r0\n\ - ldrb r4, [r2, 0x2]\n\ - adds r0, r4, 0\n\ - cmp r0, 0x1\n\ - beq _08021426\n\ - cmp r0, 0x11\n\ - beq _08021426\n\ - cmp r0, 0x2\n\ - bne _0802144C\n\ -_08021426:\n\ - ldr r4, _08021444 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - ldrb r1, [r0, 0x2]\n\ - ldrh r2, [r3]\n\ - movs r0, 0\n\ - bl EmitBattleAnimation\n\ - ldr r0, _08021448 @ =gActiveBank\n\ - ldrb r0, [r0]\n\ - bl MarkBufferBankForExecution\n\ - ldr r0, [r4]\n\ - adds r0, 0x7\n\ - str r0, [r4]\n\ - b _080214AE\n\ - .align 2, 0\n\ -_08021444: .4byte gBattlescriptCurrInstr\n\ -_08021448: .4byte gActiveBank\n\ -_0802144C:\n\ - ldr r0, _08021464 @ =gHitMarker\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0802146C\n\ - adds r0, r2, 0x7\n\ - bl b_movescr_stack_push\n\ - ldr r0, _08021468 @ =BattleScript_Pausex20\n\ - b _080214AC\n\ - .align 2, 0\n\ -_08021464: .4byte gHitMarker\n\ -_08021468: .4byte BattleScript_Pausex20\n\ -_0802146C:\n\ - adds r0, r4, 0\n\ - subs r0, 0xA\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x3\n\ - bls _08021498\n\ - ldr r1, _08021490 @ =gStatuses3\n\ - ldrb r0, [r6]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - ldr r1, _08021494 @ =0x000400c0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08021498\n\ - adds r0, r2, 0x7\n\ - b _080214AC\n\ - .align 2, 0\n\ -_08021490: .4byte gStatuses3\n\ -_08021494: .4byte 0x000400c0\n\ -_08021498:\n\ - ldrb r1, [r2, 0x2]\n\ - ldrh r2, [r3]\n\ - movs r0, 0\n\ - bl EmitBattleAnimation\n\ - ldrb r0, [r6]\n\ - bl MarkBufferBankForExecution\n\ - ldr r0, [r5]\n\ - adds r0, 0x7\n\ -_080214AC:\n\ - str r0, [r5]\n\ -_080214AE:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided"); -} -#endif // NONMATCHING - -#ifdef NONMATCHING -static void atk46_playanimation2(void) -{ - -} - -#else -__attribute__((naked)) -static void atk46_playanimation2(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - ldr r6, _0802151C @ =gBattlescriptCurrInstr\n\ - ldr r0, [r6]\n\ - ldrb r0, [r0, 0x1]\n\ - bl GetBattleBank\n\ - ldr r7, _08021520 @ =gActiveBank\n\ - strb r0, [r7]\n\ - ldr r2, [r6]\n\ - ldrb r1, [r2, 0x2]\n\ - ldrb r0, [r2, 0x3]\n\ - lsls r0, 8\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x4]\n\ - lsls r0, 16\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x5]\n\ - lsls r0, 24\n\ - adds r3, r1, r0\n\ - ldrb r1, [r2, 0x6]\n\ - ldrb r0, [r2, 0x7]\n\ - lsls r0, 8\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x8]\n\ - lsls r0, 16\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x9]\n\ - lsls r0, 24\n\ - adds r4, r1, r0\n\ - ldrb r5, [r3]\n\ - adds r0, r5, 0\n\ - cmp r0, 0x1\n\ - beq _080214FE\n\ - cmp r0, 0x11\n\ - beq _080214FE\n\ - cmp r0, 0x2\n\ - bne _08021524\n\ -_080214FE:\n\ - ldrb r1, [r3]\n\ - ldrh r2, [r4]\n\ - movs r0, 0\n\ - bl EmitBattleAnimation\n\ - ldr r0, _08021520 @ =gActiveBank\n\ - ldrb r0, [r0]\n\ - bl MarkBufferBankForExecution\n\ - ldr r1, _0802151C @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0xA\n\ - str r0, [r1]\n\ - b _0802157A\n\ - .align 2, 0\n\ -_0802151C: .4byte gBattlescriptCurrInstr\n\ -_08021520: .4byte gActiveBank\n\ -_08021524:\n\ - ldr r0, _08021534 @ =gHitMarker\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08021538\n\ - adds r0, r2, 0\n\ - b _08021576\n\ - .align 2, 0\n\ -_08021534: .4byte gHitMarker\n\ -_08021538:\n\ - adds r0, r5, 0\n\ - subs r0, 0xA\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x3\n\ - bls _08021564\n\ - ldr r1, _0802155C @ =gStatuses3\n\ - ldrb r0, [r7]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - ldr r1, _08021560 @ =0x000400c0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08021564\n\ - adds r0, r2, 0\n\ - b _08021576\n\ - .align 2, 0\n\ -_0802155C: .4byte gStatuses3\n\ -_08021560: .4byte 0x000400c0\n\ -_08021564:\n\ - ldrb r1, [r3]\n\ - ldrh r2, [r4]\n\ - movs r0, 0\n\ - bl EmitBattleAnimation\n\ - ldrb r0, [r7]\n\ - bl MarkBufferBankForExecution\n\ - ldr r0, [r6]\n\ -_08021576:\n\ - adds r0, 0xA\n\ - str r0, [r6]\n\ -_0802157A:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided "); -} -#endif // NONMATCHING - -static void atk47_setgraphicalstatchangevalues(void) -{ - u8 to_add = 0; - switch (BATTLE_STRUCT->statChanger & 0xF0) - { - case 0x10: //+1 - to_add = 0xF; - break; - case 0x20: //+2 - to_add = 0x27; - break; - case 0x90: //-1 - to_add = 0x16; - break; - case 0xA0: //-2 - to_add = 0x2E; - break; - } - BATTLE_STRUCT->animArg1 = (BATTLE_STRUCT->statChanger & 0xF) + to_add - 1; - BATTLE_STRUCT->animArg2 = 0; - gBattlescriptCurrInstr++; -} - -#ifdef NONMATCHING -static void atk48_playstatchangeanimation(void) -{ - int curr_stat = 0; - u16 stat_animID = 0; - int changeable_stats = 0; - u32 stats_to_check; - u8 arg3; - - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - stats_to_check = BSScriptRead8(gBattlescriptCurrInstr + 2); - arg3 = BSScriptRead8(gBattlescriptCurrInstr + 3); - if (arg3 & 1) - { - u16 r1 = 0x15; - if (arg3 & 0x2) - r1 = 0x2D; - while (stats_to_check != 0) - { - if (!(stats_to_check & 1)) - continue; - if (!(BSScriptRead8(gBattlescriptCurrInstr + 3))) - { - u8 ability; - if (gSideTimer[GetBankIdentity(gActiveBank) & 1].mistTimer) - continue; - ability = gBattleMons[gActiveBank].ability; - if (ability == ABILITY_CLEAR_BODY || ability == ABILITY_WHITE_SMOKE || (ability == ABILITY_KEEN_EYE && curr_stat == 6) || (ability == ABILITY_HYPER_CUTTER && curr_stat == 1)) - continue; - } - if (gBattleMons[gActiveBank].statStages[curr_stat] > 0) - { - stat_animID = r1; - changeable_stats++; - } - - stats_to_check >>= 1; - r1 += 1; - curr_stat++; - } - if (changeable_stats > 1 && BSScriptRead8(gBattlescriptCurrInstr + 3) & 2) - stat_animID = 0x39; - else - stat_animID = 0x3A; - } - else - { - u16 r1 = 0x15; - if (arg3 & 0x2) - r1 = 0x2D; - while (stats_to_check != 0) - { - if (!(stats_to_check & 1)) - continue; - if (gBattleMons[gActiveBank].statStages[curr_stat] < 0xB) - { - stat_animID = r1; - changeable_stats++; - } - - stats_to_check >>= 1; - r1 += 1; - curr_stat++; - } - if (changeable_stats > 1 && BSScriptRead8(gBattlescriptCurrInstr + 3) & 2) - stat_animID = 0x37; - else - stat_animID = 0x38; - } - if ((BSScriptRead8(gBattlescriptCurrInstr + 3) & 2 && changeable_stats <= 1) - || changeable_stats == 0 || BATTLE_STRUCT->filler2[0] != 0) - gBattlescriptCurrInstr += 4; - else - { - EmitBattleAnimation(0, 1, stat_animID); - MarkBufferBankForExecution(gActiveBank); - if ((BSScriptRead8(gBattlescriptCurrInstr + 3) & 4) && changeable_stats > 1) - BATTLE_STRUCT->filler2[0] = 1; - gBattlescriptCurrInstr += 4; - } -} - -#else -__attribute__((naked)) -static void atk48_playstatchangeanimation(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\ - movs r7, 0\n\ - movs r0, 0\n\ - mov r8, r0\n\ - movs r3, 0\n\ - ldr r5, _08021670 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r5]\n\ - ldrb r0, [r0, 0x1]\n\ - str r3, [sp]\n\ - bl GetBattleBank\n\ - ldr r2, _08021674 @ =gActiveBank\n\ - strb r0, [r2]\n\ - ldr r0, [r5]\n\ - ldrb r4, [r0, 0x2]\n\ - ldrb r1, [r0, 0x3]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - ldr r3, [sp]\n\ - cmp r0, 0\n\ - beq _08021710\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - movs r1, 0x15\n\ - cmp r0, 0\n\ - beq _0802163C\n\ - movs r1, 0x2D\n\ -_0802163C:\n\ - cmp r4, 0\n\ - beq _080216E4\n\ - movs r0, 0x1\n\ - mov r10, r0\n\ - ldr r0, _08021678 @ =gUnknown_02024A98\n\ - mov r9, r0\n\ - lsls r5, r1, 16\n\ -_0802164A:\n\ - adds r0, r4, 0\n\ - mov r1, r10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080216D6\n\ - ldr r0, _08021670 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r0]\n\ - ldrb r1, [r0, 0x3]\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0802167C\n\ - ldr r0, _08021674 @ =gActiveBank\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - adds r0, r7, r0\n\ - b _080216C4\n\ - .align 2, 0\n\ -_08021670: .4byte gBattlescriptCurrInstr\n\ -_08021674: .4byte gActiveBank\n\ -_08021678: .4byte gUnknown_02024A98\n\ -_0802167C:\n\ - ldr r6, _08021700 @ =gActiveBank\n\ - ldrb r0, [r6]\n\ - str r3, [sp]\n\ - bl GetBankIdentity\n\ - mov r1, r10\n\ - ands r1, r0\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r1, _08021704 @ =gSideTimer\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x2]\n\ - ldr r3, [sp]\n\ - cmp r0, 0\n\ - bne _080216D6\n\ - ldr r0, _08021708 @ =gBattleMons\n\ - ldrb r2, [r6]\n\ - movs r1, 0x58\n\ - muls r2, r1\n\ - adds r0, r2, r0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1D\n\ - beq _080216D6\n\ - cmp r0, 0x49\n\ - beq _080216D6\n\ - cmp r0, 0x33\n\ - bne _080216BA\n\ - cmp r7, 0x6\n\ - beq _080216D6\n\ -_080216BA:\n\ - cmp r0, 0x34\n\ - bne _080216C2\n\ - cmp r7, 0x1\n\ - beq _080216D6\n\ -_080216C2:\n\ - adds r0, r7, r2\n\ -_080216C4:\n\ - add r0, r9\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - cmp r0, 0\n\ - ble _080216D6\n\ - lsrs r0, r5, 16\n\ - mov r8, r0\n\ - adds r3, 0x1\n\ -_080216D6:\n\ - lsrs r4, 1\n\ - movs r1, 0x80\n\ - lsls r1, 9\n\ - adds r5, r1\n\ - adds r7, 0x1\n\ - cmp r4, 0\n\ - bne _0802164A\n\ -_080216E4:\n\ - ldr r0, _0802170C @ =gBattlescriptCurrInstr\n\ - mov r9, r0\n\ - cmp r3, 0x1\n\ - ble _08021772\n\ - ldr r0, [r0]\n\ - ldrb r1, [r0, 0x3]\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - movs r1, 0x39\n\ - mov r8, r1\n\ - cmp r0, 0\n\ - beq _08021772\n\ - movs r0, 0x3A\n\ - b _08021770\n\ - .align 2, 0\n\ -_08021700: .4byte gActiveBank\n\ -_08021704: .4byte gSideTimer\n\ -_08021708: .4byte gBattleMons\n\ -_0802170C: .4byte gBattlescriptCurrInstr\n\ -_08021710:\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - movs r1, 0xE\n\ - cmp r0, 0\n\ - beq _0802171C\n\ - movs r1, 0x26\n\ -_0802171C:\n\ - mov r9, r5\n\ - cmp r4, 0\n\ - beq _08021758\n\ - ldr r6, _0802178C @ =gUnknown_02024A98\n\ - adds r5, r2, 0\n\ - lsls r2, r1, 16\n\ -_08021728:\n\ - movs r0, 0x1\n\ - ands r0, r4\n\ - cmp r0, 0\n\ - beq _0802174A\n\ - ldrb r1, [r5]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - adds r0, r7, r0\n\ - adds r0, r6\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - cmp r0, 0xB\n\ - bgt _0802174A\n\ - lsrs r1, r2, 16\n\ - mov r8, r1\n\ - adds r3, 0x1\n\ -_0802174A:\n\ - lsrs r4, 1\n\ - movs r0, 0x80\n\ - lsls r0, 9\n\ - adds r2, r0\n\ - adds r7, 0x1\n\ - cmp r4, 0\n\ - bne _08021728\n\ -_08021758:\n\ - cmp r3, 0x1\n\ - ble _08021772\n\ - mov r1, r9\n\ - ldr r0, [r1]\n\ - ldrb r1, [r0, 0x3]\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - movs r1, 0x37\n\ - mov r8, r1\n\ - cmp r0, 0\n\ - beq _08021772\n\ - movs r0, 0x38\n\ -_08021770:\n\ - mov r8, r0\n\ -_08021772:\n\ - mov r1, r9\n\ - ldr r2, [r1]\n\ - ldrb r1, [r2, 0x3]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08021790\n\ - cmp r3, 0x1\n\ - bgt _08021790\n\ - adds r0, r2, 0x4\n\ - mov r1, r9\n\ - b _080217E6\n\ - .align 2, 0\n\ -_0802178C: .4byte gUnknown_02024A98\n\ -_08021790:\n\ - cmp r3, 0\n\ - beq _080217E0\n\ - ldr r0, _080217D0 @ =0x02000000\n\ - ldr r1, _080217D4 @ =0x000160dc\n\ - adds r4, r0, r1\n\ - ldrb r0, [r4]\n\ - cmp r0, 0\n\ - bne _080217E0\n\ - movs r0, 0\n\ - movs r1, 0x1\n\ - mov r2, r8\n\ - str r3, [sp]\n\ - bl EmitBattleAnimation\n\ - ldr r0, _080217D8 @ =gActiveBank\n\ - ldrb r0, [r0]\n\ - bl MarkBufferBankForExecution\n\ - ldr r0, _080217DC @ =gBattlescriptCurrInstr\n\ - ldr r0, [r0]\n\ - ldrb r1, [r0, 0x3]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - ldr r3, [sp]\n\ - cmp r0, 0\n\ - beq _080217CC\n\ - cmp r3, 0x1\n\ - ble _080217CC\n\ - movs r0, 0x1\n\ - strb r0, [r4]\n\ -_080217CC:\n\ - ldr r1, _080217DC @ =gBattlescriptCurrInstr\n\ - b _080217E2\n\ - .align 2, 0\n\ -_080217D0: .4byte 0x02000000\n\ -_080217D4: .4byte 0x000160dc\n\ -_080217D8: .4byte gActiveBank\n\ -_080217DC: .4byte gBattlescriptCurrInstr\n\ -_080217E0:\n\ - mov r1, r9\n\ -_080217E2:\n\ - ldr r0, [r1]\n\ - adds r0, 0x4\n\ -_080217E6:\n\ - str r0, [r1]\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"); -} - -#endif // NONMATCHING - -#ifdef NONMATCHING -static void atk49_moveendturn(void) -{ - int i; - int effect = 0; - u16 last_move = 0, *choiced_move_atk; - int arg1, arg2, hold_effect_atk, move_type; - if (gLastUsedMove != 0xFFFF) - last_move = gLastUsedMove; - - arg1 = BSScriptRead8(gBattlescriptCurrInstr + 1); - arg2 = BSScriptRead8(gBattlescriptCurrInstr + 2); - if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) - hold_effect_atk = gEnigmaBerries[gBankAttacker].holdEffect; - else - hold_effect_atk = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); - - choiced_move_atk = (u16*)(gBankAttacker * 0x020160e8); - if (BATTLE_STRUCT->dynamicMoveType) - move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F; - else - move_type = gBattleMoves[gCurrentMove].type; - - do - { - switch (BATTLE_STRUCT->cmd49StateTracker) - { - case 0: //rage check - if (gBattleMons[gBankTarget].status2 & STATUS2_RAGE - && gBattleMons[gBankTarget].hp && gBankAttacker != gBankTarget - && GetBankSide(gBankAttacker) != GetBankSide(gBankTarget) - && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT) && TARGET_TURN_DAMAGED - && gBattleMoves[gCurrentMove].power && gBattleMons[gBankTarget].statStages[STAT_STAGE_ATK] <= 0xB) - { - gBattleMons[gBankTarget].statStages[STAT_STAGE_ATK]++; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = gUnknown_081D9132; - effect = 1; - } - BATTLE_STRUCT->cmd49StateTracker++; - break; - case 1: //defrosting check - if (gBattleMons[gBankTarget].status1 & STATUS_FREEZE - && gBattleMons[gBankTarget].hp && gBankAttacker != gBankTarget - && gSpecialStatuses[gBankTarget].moveturnLostHP - && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT) && move_type == TYPE_FIRE) - { - gBattleMons[gBankTarget].status1 &= ~(STATUS_FREEZE); - gActiveBank = gBankTarget; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1); - MarkBufferBankForExecution(gActiveBank); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = gUnknown_081D955D; - effect = 1; - } - BATTLE_STRUCT->cmd49StateTracker++; - break; - case 2: //target synchronize - if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBankTarget, 0, 0, 0)) - effect = 1; - BATTLE_STRUCT->cmd49StateTracker++; - break; - case 3: //contact abilities - if (AbilityBattleEffects(ABILITYEFFECT_CONTACT, gBankTarget, 0, 0, 0)) - effect = 1; - BATTLE_STRUCT->cmd49StateTracker++; - break; - case 4: //status immunities - if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0)) - effect = 1; //it loops through 4 banks, so we increment after its done with all banks - else - BATTLE_STRUCT->cmd49StateTracker++; - break; - case 5: //attacker synchronize - if (AbilityBattleEffects(ABILITYEFFECT_ATK_SYNCHRONIZE, gBankAttacker, 0, 0, 0)) - effect = 1; - BATTLE_STRUCT->cmd49StateTracker++; - break; - case 6: //update choice band move - if (gHitMarker & HITMARKER_OBEYS && hold_effect_atk == HOLD_EFFECT_CHOICE_BAND - && gLastUsedMove != MOVE_STRUGGLE && (*choiced_move_atk == 0 || *choiced_move_atk == 0xFFF) - && gLastUsedMove != MOVE_BATON_PASS && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) - { - *choiced_move_atk = gLastUsedMove; - for (i = 0; i < 4 && gBattleMons[gBankAttacker].moves[i] != *choiced_move_atk; i++){} - if (i == 4) - *choiced_move_atk = 0; - } - BATTLE_STRUCT->cmd49StateTracker++; - break; - case 7: //changed held items - for (i = 0; i < gNoOfAllBanks; i++) - { - #define CHANGED_ITEM (((*u16)(0x020160f0))) - if (CHANGED_ITEM(i)) - gBattleMons[i].item = CHANGED_ITEM(i); - } - BATTLE_STRUCT->cmd49StateTracker++; - break; - case 8: //make sprite invisible - if (gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER) - && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) - { - gActiveBank = gBankAttacker; - EmitSpriteInvisibility(0, 1); - MarkBufferBankForExecution(gActiveBank); - } - BATTLE_STRUCT->cmd49StateTracker++; - break; - //sub_8015660 CheckIfMoveFailed - case 9: //semi-invlurneable attacker make visible - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - || sub_8015660(gBankAttacker)) - { - gActiveBank = gBankAttacker; - EmitSpriteInvisibility(0, 0); - MarkBufferBankForExecution(gActiveBank); - gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER); - gSpecialStatuses[gBankAttacker].restored_bank_sprite = 1; - } - BATTLE_STRUCT->cmd49StateTracker++; - break; - case 10: //semi-invlurneable target make visible - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - || sub_8015660(gBankTarget)) - { - gActiveBank = gBankTarget; - EmitSpriteInvisibility(0, 0); - MarkBufferBankForExecution(gActiveBank); - gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER); - gSpecialStatuses[gBankTarget].restored_bank_sprite = 1; - } - BATTLE_STRUCT->cmd49StateTracker++; - break; - case 11: // - } - - } while (effect == 0) -} -#else -__attribute__((naked)) -static void atk49_moveendturn(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\ - movs r0, 0\n\ - mov r10, r0\n\ - ldr r0, _08021834 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r0]\n\ - ldrb r1, [r0, 0x1]\n\ - str r1, [sp, 0x10]\n\ - ldrb r0, [r0, 0x2]\n\ - str r0, [sp, 0x14]\n\ - ldr r1, _08021838 @ =gBattleMons\n\ - ldr r0, _0802183C @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r1, r0, r1\n\ - ldrh r0, [r1, 0x2E]\n\ - cmp r0, 0xAF\n\ - bne _08021844\n\ - ldr r1, _08021840 @ =gEnigmaBerries\n\ - lsls r0, r2, 3\n\ - subs r0, r2\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x7]\n\ - b _0802184E\n\ - .align 2, 0\n\ -_08021834: .4byte gBattlescriptCurrInstr\n\ -_08021838: .4byte gBattleMons\n\ -_0802183C: .4byte gBankAttacker\n\ -_08021840: .4byte gEnigmaBerries\n\ -_08021844:\n\ - ldrh r0, [r1, 0x2E]\n\ - bl ItemId_GetHoldEffect\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ -_0802184E:\n\ - str r0, [sp, 0x8]\n\ - ldr r0, _0802186C @ =gBankAttacker\n\ - ldrb r1, [r0]\n\ - lsls r1, 1\n\ - ldr r0, _08021870 @ =0x020160e8\n\ - adds r1, r0\n\ - str r1, [sp, 0xC]\n\ - subs r0, 0xCC\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _080218C0\n\ - movs r2, 0x3F\n\ - ands r2, r0\n\ - str r2, [sp, 0x4]\n\ - b _080218D2\n\ - .align 2, 0\n\ -_0802186C: .4byte gBankAttacker\n\ -_08021870: .4byte 0x020160e8\n\ -_08021874:\n\ - strb r2, [r7]\n\ - ldr r0, [r5]\n\ - orrs r0, r6\n\ - str r0, [r5]\n\ - ldr r0, _080218AC @ =0x02000000\n\ - ldr r3, _080218B0 @ =0x0001600c\n\ - adds r0, r3\n\ - strb r4, [r0]\n\ - bl MoveValuesCleanUp\n\ - ldr r2, _080218B4 @ =gBattleScriptsEffectsTable\n\ - mov r4, r8\n\ - ldrh r1, [r4]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - add r0, r9\n\ - ldrb r0, [r0]\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - bl b_movescr_stack_push\n\ - ldr r1, _080218B8 @ =gBattlescriptCurrInstr\n\ - ldr r0, _080218BC @ =gUnknown_081D9B2D\n\ - bl _0802229C\n\ - .align 2, 0\n\ -_080218AC: .4byte 0x02000000\n\ -_080218B0: .4byte 0x0001600c\n\ -_080218B4: .4byte gBattleScriptsEffectsTable\n\ -_080218B8: .4byte gBattlescriptCurrInstr\n\ -_080218BC: .4byte gUnknown_081D9B2D\n\ -_080218C0:\n\ - ldr r2, _080218D8 @ =gBattleMoves\n\ - ldr r0, _080218DC @ =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, 0x2]\n\ - str r0, [sp, 0x4]\n\ -_080218D2:\n\ - ldr r5, _080218E0 @ =0x02000000\n\ - mov r12, r5\n\ - b _080218EE\n\ - .align 2, 0\n\ -_080218D8: .4byte gBattleMoves\n\ -_080218DC: .4byte gCurrentMove\n\ -_080218E0: .4byte 0x02000000\n\ -_080218E4:\n\ - mov r0, r10\n\ - cmp r0, 0\n\ - beq _080218EE\n\ - bl _08022286\n\ -_080218EE:\n\ - ldr r0, _08021908 @ =0x0001600c\n\ - add r0, r12\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x11\n\ - bls _080218FC\n\ - bl _0802224E\n\ -_080218FC:\n\ - lsls r0, 2\n\ - ldr r1, _0802190C @ =_08021910\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_08021908: .4byte 0x0001600c\n\ -_0802190C: .4byte _08021910\n\ - .align 2, 0\n\ -_08021910:\n\ - .4byte _08021958\n\ - .4byte _08021A34\n\ - .4byte _08021AF0\n\ - .4byte _08021B20\n\ - .4byte _08021B44\n\ - .4byte _08021B78\n\ - .4byte _08021B9C\n\ - .4byte _08021C40\n\ - .4byte _08021C78\n\ - .4byte _08021CA8\n\ - .4byte _08021CCC\n\ - .4byte _08021D18\n\ - .4byte _08021DAC\n\ - .4byte _08021E30\n\ - .4byte _08021E70\n\ - .4byte _08022068\n\ - .4byte _080221C0\n\ - .4byte _0802224E\n\ -_08021958:\n\ - ldr r5, _08021A08 @ =gBattleMons\n\ - ldr r2, _08021A0C @ =gBankTarget\n\ - ldrb r4, [r2]\n\ - movs r6, 0x58\n\ - adds r3, r4, 0\n\ - muls r3, r6\n\ - adds r0, r5, 0\n\ - adds r0, 0x50\n\ - adds r0, r3, r0\n\ - ldr r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 16\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _080219FE\n\ - adds r0, r3, r5\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - beq _080219FE\n\ - ldr r0, _08021A10 @ =gBankAttacker\n\ - ldrb r1, [r0]\n\ - cmp r1, r4\n\ - beq _080219FE\n\ - adds r0, r1, 0\n\ - bl GetBankSide\n\ - adds r4, r0, 0\n\ - ldr r1, _08021A0C @ =gBankTarget\n\ - ldrb r0, [r1]\n\ - bl GetBankSide\n\ - lsls r4, 24\n\ - lsls r0, 24\n\ - cmp r4, r0\n\ - beq _080219FE\n\ - ldr r0, _08021A14 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080219FE\n\ - ldr r2, _08021A18 @ =gProtectStructs\n\ - ldr r4, _08021A0C @ =gBankTarget\n\ - ldrb r3, [r4]\n\ - lsls r1, r3, 4\n\ - adds r0, r2, 0x4\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _080219C8\n\ - adds r0, r2, 0\n\ - adds r0, 0x8\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _080219FE\n\ -_080219C8:\n\ - ldr r2, _08021A1C @ =gBattleMoves\n\ - ldr r0, _08021A20 @ =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, 0x1]\n\ - cmp r0, 0\n\ - beq _080219FE\n\ - adds r0, r3, 0\n\ - muls r0, r6\n\ - adds r1, r0, r5\n\ - ldrb r2, [r1, 0x19]\n\ - movs r0, 0x19\n\ - ldrsb r0, [r1, r0]\n\ - cmp r0, 0xB\n\ - bgt _080219FE\n\ - adds r0, r2, 0x1\n\ - strb r0, [r1, 0x19]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08021A24 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08021A28 @ =gUnknown_081D9132\n\ - str r0, [r1]\n\ - movs r5, 0x1\n\ - mov r10, r5\n\ -_080219FE:\n\ - ldr r2, _08021A2C @ =0x02000000\n\ - ldr r0, _08021A30 @ =0x0001600c\n\ - adds r1, r2, r0\n\ - b _08021E00\n\ - .align 2, 0\n\ -_08021A08: .4byte gBattleMons\n\ -_08021A0C: .4byte gBankTarget\n\ -_08021A10: .4byte gBankAttacker\n\ -_08021A14: .4byte gBattleMoveFlags\n\ -_08021A18: .4byte gProtectStructs\n\ -_08021A1C: .4byte gBattleMoves\n\ -_08021A20: .4byte gCurrentMove\n\ -_08021A24: .4byte gBattlescriptCurrInstr\n\ -_08021A28: .4byte gUnknown_081D9132\n\ -_08021A2C: .4byte 0x02000000\n\ -_08021A30: .4byte 0x0001600c\n\ -_08021A34:\n\ - ldr r2, _08021AD0 @ =gBattleMons\n\ - ldr r1, _08021AD4 @ =gBankTarget\n\ - ldrb r4, [r1]\n\ - movs r3, 0x58\n\ - mov r12, r3\n\ - mov r3, r12\n\ - muls r3, r4\n\ - adds r7, r2, 0\n\ - adds r7, 0x4C\n\ - adds r6, r3, r7\n\ - ldr r5, [r6]\n\ - movs r0, 0x20\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - bne _08021A54\n\ - b _08021DFA\n\ -_08021A54:\n\ - adds r0, r3, r2\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - bne _08021A5E\n\ - b _08021DFA\n\ -_08021A5E:\n\ - ldr r0, _08021AD8 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - cmp r0, r4\n\ - bne _08021A68\n\ - b _08021DFA\n\ -_08021A68:\n\ - ldr r0, _08021ADC @ =gSpecialStatuses\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 2\n\ - adds r0, 0xC\n\ - adds r1, r0\n\ - ldr r0, [r1]\n\ - cmp r0, 0\n\ - bne _08021A7C\n\ - b _08021DFA\n\ -_08021A7C:\n\ - ldr r0, _08021AE0 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08021A8A\n\ - b _08021DFA\n\ -_08021A8A:\n\ - ldr r4, [sp, 0x4]\n\ - cmp r4, 0xA\n\ - beq _08021A92\n\ - b _08021DFA\n\ -_08021A92:\n\ - movs r0, 0x21\n\ - negs r0, r0\n\ - ands r5, r0\n\ - str r5, [r6]\n\ - ldr r4, _08021AE4 @ =gActiveBank\n\ - ldr r5, _08021AD4 @ =gBankTarget\n\ - ldrb r0, [r5]\n\ - strb r0, [r4]\n\ - ldrb r0, [r5]\n\ - mov r1, r12\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r0, r7\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 b_movescr_stack_push_cursor\n\ - ldr r1, _08021AE8 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08021AEC @ =gUnknown_081D955D\n\ - str r0, [r1]\n\ - movs r2, 0x1\n\ - mov r10, r2\n\ - b _08021DFA\n\ - .align 2, 0\n\ -_08021AD0: .4byte gBattleMons\n\ -_08021AD4: .4byte gBankTarget\n\ -_08021AD8: .4byte gBankAttacker\n\ -_08021ADC: .4byte gSpecialStatuses\n\ -_08021AE0: .4byte gBattleMoveFlags\n\ -_08021AE4: .4byte gActiveBank\n\ -_08021AE8: .4byte gBattlescriptCurrInstr\n\ -_08021AEC: .4byte gUnknown_081D955D\n\ -_08021AF0:\n\ - ldr r0, _08021B14 @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - movs r0, 0\n\ - str r0, [sp]\n\ - movs r0, 0x7\n\ - movs r2, 0\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08021B0C\n\ - movs r4, 0x1\n\ - mov r10, r4\n\ -_08021B0C:\n\ - ldr r2, _08021B18 @ =0x02000000\n\ - ldr r5, _08021B1C @ =0x0001600c\n\ - adds r1, r2, r5\n\ - b _08021E00\n\ - .align 2, 0\n\ -_08021B14: .4byte gBankTarget\n\ -_08021B18: .4byte 0x02000000\n\ -_08021B1C: .4byte 0x0001600c\n\ -_08021B20:\n\ - ldr r0, _08021B40 @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - movs r0, 0\n\ - str r0, [sp]\n\ - movs r0, 0x4\n\ - movs r2, 0\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08021B3A\n\ - b _08021DFA\n\ -_08021B3A:\n\ - movs r0, 0x1\n\ - mov r10, r0\n\ - b _08021DFA\n\ - .align 2, 0\n\ -_08021B40: .4byte gBankTarget\n\ -_08021B44:\n\ - movs r0, 0\n\ - str r0, [sp]\n\ - movs r0, 0x5\n\ - movs r1, 0\n\ - movs r2, 0\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08021B68\n\ - movs r4, 0x1\n\ - mov r10, r4\n\ - ldr r5, _08021B64 @ =0x02000000\n\ - mov r12, r5\n\ - b _0802224E\n\ - .align 2, 0\n\ -_08021B64: .4byte 0x02000000\n\ -_08021B68:\n\ - ldr r2, _08021B70 @ =0x02000000\n\ - ldr r0, _08021B74 @ =0x0001600c\n\ - adds r1, r2, r0\n\ - b _08021E00\n\ - .align 2, 0\n\ -_08021B70: .4byte 0x02000000\n\ -_08021B74: .4byte 0x0001600c\n\ -_08021B78:\n\ - ldr r0, _08021B98 @ =gBankAttacker\n\ - ldrb r1, [r0]\n\ - movs r0, 0\n\ - str r0, [sp]\n\ - movs r0, 0x8\n\ - movs r2, 0\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08021B92\n\ - b _08021DFA\n\ -_08021B92:\n\ - movs r1, 0x1\n\ - mov r10, r1\n\ - b _08021DFA\n\ - .align 2, 0\n\ -_08021B98: .4byte gBankAttacker\n\ -_08021B9C:\n\ - ldr r0, _08021C28 @ =gHitMarker\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 18\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08021BE0\n\ - ldr r4, [sp, 0x8]\n\ - cmp r4, 0x1D\n\ - bne _08021BE0\n\ - ldr r0, _08021C2C @ =gUnknown_02024BE8\n\ - ldrh r2, [r0]\n\ - adds r7, r0, 0\n\ - cmp r2, 0xA5\n\ - beq _08021BE0\n\ - ldr r5, [sp, 0xC]\n\ - ldrh r1, [r5]\n\ - cmp r1, 0\n\ - beq _08021BC8\n\ - ldr r0, _08021C30 @ =0x0000ffff\n\ - cmp r1, r0\n\ - bne _08021BE0\n\ -_08021BC8:\n\ - cmp r2, 0xE2\n\ - bne _08021BDA\n\ - ldr r0, _08021C34 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x20\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08021BDA\n\ - b _08022244\n\ -_08021BDA:\n\ - ldrh r0, [r7]\n\ - ldr r1, [sp, 0xC]\n\ - strh r0, [r1]\n\ -_08021BE0:\n\ - movs r4, 0\n\ - ldr r2, _08021C38 @ =gBattleMons\n\ - ldr r3, _08021C3C @ =gBankAttacker\n\ - ldrb r1, [r3]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - adds r2, 0xC\n\ - adds r0, r2\n\ - ldrh r0, [r0]\n\ - ldr r5, [sp, 0xC]\n\ - ldrh r1, [r5]\n\ - mov r9, r3\n\ - cmp r0, r1\n\ - beq _08021C18\n\ - mov r6, r9\n\ - movs r3, 0x58\n\ - adds r5, r1, 0\n\ -_08021C02:\n\ - adds r4, 0x1\n\ - cmp r4, 0x3\n\ - bgt _08021C18\n\ - lsls r0, r4, 1\n\ - ldrb r1, [r6]\n\ - muls r1, r3\n\ - adds r0, r1\n\ - adds r0, r2\n\ - ldrh r0, [r0]\n\ - cmp r0, r5\n\ - bne _08021C02\n\ -_08021C18:\n\ - cmp r4, 0x4\n\ - beq _08021C1E\n\ - b _08022244\n\ -_08021C1E:\n\ - movs r0, 0\n\ - ldr r1, [sp, 0xC]\n\ -_08021C22:\n\ - strh r0, [r1]\n\ - b _08022244\n\ - .align 2, 0\n\ -_08021C28: .4byte gHitMarker\n\ -_08021C2C: .4byte gUnknown_02024BE8\n\ -_08021C30: .4byte 0x0000ffff\n\ -_08021C34: .4byte gBattleMoveFlags\n\ -_08021C38: .4byte gBattleMons\n\ -_08021C3C: .4byte gBankAttacker\n\ -_08021C40:\n\ - movs r4, 0\n\ - ldr r0, _08021C6C @ =gNoOfAllBanks\n\ - ldrb r2, [r0]\n\ - cmp r4, r2\n\ - blt _08021C4C\n\ - b _08022244\n\ -_08021C4C:\n\ - movs r5, 0\n\ - ldr r2, _08021C70 @ =0x020160f0\n\ - ldr r3, _08021C74 @ =gBattleMons\n\ -_08021C52:\n\ - ldrh r1, [r2]\n\ - cmp r1, 0\n\ - beq _08021C5C\n\ - strh r1, [r3, 0x2E]\n\ - strh r5, [r2]\n\ -_08021C5C:\n\ - adds r2, 0x2\n\ - adds r3, 0x58\n\ - adds r4, 0x1\n\ - ldrb r1, [r0]\n\ - cmp r4, r1\n\ - blt _08021C52\n\ - b _08022244\n\ - .align 2, 0\n\ -_08021C6C: .4byte gNoOfAllBanks\n\ -_08021C70: .4byte 0x020160f0\n\ -_08021C74: .4byte gBattleMons\n\ -_08021C78:\n\ - movs r0, 0x3\n\ - movs r1, 0\n\ - movs r2, 0\n\ - bl ItemBattleEffects\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08021C98\n\ - movs r2, 0x1\n\ - mov r10, r2\n\ - ldr r3, _08021C94 @ =0x02000000\n\ - mov r12, r3\n\ - b _0802224E\n\ - .align 2, 0\n\ -_08021C94: .4byte 0x02000000\n\ -_08021C98:\n\ - ldr r2, _08021CA0 @ =0x02000000\n\ - ldr r4, _08021CA4 @ =0x0001600c\n\ - adds r1, r2, r4\n\ - b _08021E00\n\ - .align 2, 0\n\ -_08021CA0: .4byte 0x02000000\n\ -_08021CA4: .4byte 0x0001600c\n\ -_08021CA8:\n\ - movs r0, 0x4\n\ - movs r1, 0\n\ - movs r2, 0\n\ - bl ItemBattleEffects\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08021CBC\n\ - movs r5, 0x1\n\ - mov r10, r5\n\ -_08021CBC:\n\ - ldr r2, _08021CC4 @ =0x02000000\n\ - ldr r0, _08021CC8 @ =0x0001600c\n\ - adds r1, r2, r0\n\ - b _08021E00\n\ - .align 2, 0\n\ -_08021CC4: .4byte 0x02000000\n\ -_08021CC8: .4byte 0x0001600c\n\ -_08021CCC:\n\ - ldr r1, _08021D04 @ =gStatuses3\n\ - ldr r0, _08021D08 @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - lsls r0, r2, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - ldr r1, _08021D0C @ =0x000400c0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08021CE2\n\ - b _08021DFA\n\ -_08021CE2:\n\ - ldr r0, _08021D10 @ =gHitMarker\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08021CF0\n\ - b _08021DFA\n\ -_08021CF0:\n\ - ldr r4, _08021D14 @ =gActiveBank\n\ - strb r2, [r4]\n\ - movs r0, 0\n\ - movs r1, 0x1\n\ - bl EmitSpriteInvisibility\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - b _08021DFA\n\ - .align 2, 0\n\ -_08021D04: .4byte gStatuses3\n\ -_08021D08: .4byte gBankAttacker\n\ -_08021D0C: .4byte 0x000400c0\n\ -_08021D10: .4byte gHitMarker\n\ -_08021D14: .4byte gActiveBank\n\ -_08021D18:\n\ - ldr r0, _08021D88 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08021D44\n\ - ldr r1, _08021D8C @ =gStatuses3\n\ - ldr r0, _08021D90 @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - lsls r0, r2, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - ldr r1, _08021D94 @ =0x000400c0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08021D44\n\ - adds r0, r2, 0\n\ - bl sub_8015660\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08021D7E\n\ -_08021D44:\n\ - ldr r4, _08021D98 @ =gActiveBank\n\ - ldr r5, _08021D90 @ =gBankAttacker\n\ - ldrb r0, [r5]\n\ - strb r0, [r4]\n\ - movs r0, 0\n\ - movs r1, 0\n\ - bl EmitSpriteInvisibility\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - ldr r0, _08021D8C @ =gStatuses3\n\ - ldrb r2, [r5]\n\ - lsls r2, 2\n\ - adds r2, r0\n\ - ldr r0, [r2]\n\ - ldr r1, _08021D9C @ =0xfffbff3f\n\ - ands r0, r1\n\ - str r0, [r2]\n\ - ldr r2, _08021DA0 @ =gSpecialStatuses\n\ - ldrb r1, [r5]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldrb r1, [r0]\n\ - movs r2, 0x4\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ -_08021D7E:\n\ - ldr r2, _08021DA4 @ =0x02000000\n\ - ldr r4, _08021DA8 @ =0x0001600c\n\ - adds r1, r2, r4\n\ - b _08021E00\n\ - .align 2, 0\n\ -_08021D88: .4byte gBattleMoveFlags\n\ -_08021D8C: .4byte gStatuses3\n\ -_08021D90: .4byte gBankAttacker\n\ -_08021D94: .4byte 0x000400c0\n\ -_08021D98: .4byte gActiveBank\n\ -_08021D9C: .4byte 0xfffbff3f\n\ -_08021DA0: .4byte gSpecialStatuses\n\ -_08021DA4: .4byte 0x02000000\n\ -_08021DA8: .4byte 0x0001600c\n\ -_08021DAC:\n\ - ldr r2, _08021E0C @ =gSpecialStatuses\n\ - ldr r1, _08021E10 @ =gBankTarget\n\ - ldrb r3, [r1]\n\ - lsls r4, r3, 2\n\ - adds r0, r4, r3\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ - lsls r0, 29\n\ - cmp r0, 0\n\ - blt _08021DFA\n\ - ldr r0, _08021E14 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r3, r0\n\ - bcs _08021DFA\n\ - ldr r5, _08021E18 @ =gStatuses3\n\ - adds r0, r4, r5\n\ - ldr r0, [r0]\n\ - ldr r1, _08021E1C @ =0x000400c0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08021DFA\n\ - ldr r4, _08021E20 @ =gActiveBank\n\ - strb r3, [r4]\n\ - movs r0, 0\n\ - movs r1, 0\n\ - bl EmitSpriteInvisibility\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - ldr r0, _08021E10 @ =gBankTarget\n\ - ldrb r2, [r0]\n\ - lsls r2, 2\n\ - adds r2, r5\n\ - ldr r0, [r2]\n\ - ldr r1, _08021E24 @ =0xfffbff3f\n\ - ands r0, r1\n\ - str r0, [r2]\n\ -_08021DFA:\n\ - ldr r2, _08021E28 @ =0x02000000\n\ - ldr r3, _08021E2C @ =0x0001600c\n\ - adds r1, r2, r3\n\ -_08021E00:\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - mov r12, r2\n\ - b _0802224E\n\ - .align 2, 0\n\ -_08021E0C: .4byte gSpecialStatuses\n\ -_08021E10: .4byte gBankTarget\n\ -_08021E14: .4byte gNoOfAllBanks\n\ -_08021E18: .4byte gStatuses3\n\ -_08021E1C: .4byte 0x000400c0\n\ -_08021E20: .4byte gActiveBank\n\ -_08021E24: .4byte 0xfffbff3f\n\ -_08021E28: .4byte 0x02000000\n\ -_08021E2C: .4byte 0x0001600c\n\ -_08021E30:\n\ - movs r4, 0\n\ - ldr r0, _08021E60 @ =gNoOfAllBanks\n\ - ldrb r5, [r0]\n\ - cmp r4, r5\n\ - blt _08021E3C\n\ - b _08022244\n\ -_08021E3C:\n\ - ldr r2, _08021E64 @ =gDisableStructs\n\ - ldr r5, _08021E68 @ =0xfeffffff\n\ - adds r3, r0, 0\n\ - ldr r1, _08021E6C @ =gUnknown_02024AD0\n\ -_08021E44:\n\ - ldrb r0, [r2, 0xA]\n\ - cmp r0, 0\n\ - bne _08021E50\n\ - ldr r0, [r1]\n\ - ands r0, r5\n\ - str r0, [r1]\n\ -_08021E50:\n\ - adds r2, 0x1C\n\ - adds r1, 0x58\n\ - adds r4, 0x1\n\ - ldrb r0, [r3]\n\ - cmp r4, r0\n\ - blt _08021E44\n\ - b _08022244\n\ - .align 2, 0\n\ -_08021E60: .4byte gNoOfAllBanks\n\ -_08021E64: .4byte gDisableStructs\n\ -_08021E68: .4byte 0xfeffffff\n\ -_08021E6C: .4byte gUnknown_02024AD0\n\ -_08021E70:\n\ - ldr r1, _08021F2C @ =gHitMarker\n\ - ldr r3, [r1]\n\ - movs r0, 0x80\n\ - lsls r0, 5\n\ - ands r0, r3\n\ - ldr r2, _08021F30 @ =gBankAttacker\n\ - mov r9, r2\n\ - adds r5, r1, 0\n\ - cmp r0, 0\n\ - beq _08021E9A\n\ - ldr r0, _08021F34 @ =gActiveBank\n\ - ldrb r2, [r2]\n\ - strb r2, [r0]\n\ - ldr r1, _08021F38 @ =gBankTarget\n\ - ldrb r0, [r1]\n\ - mov r4, r9\n\ - strb r0, [r4]\n\ - strb r2, [r1]\n\ - ldr r0, _08021F3C @ =0xffffefff\n\ - ands r3, r0\n\ - str r3, [r5]\n\ -_08021E9A:\n\ - ldr r1, _08021F40 @ =gBattleMoves\n\ - ldr r2, _08021F44 @ =gUnknown_02024BE8\n\ - ldrh r3, [r2]\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - mov r8, r1\n\ - adds r7, r2, 0\n\ - cmp r0, 0x7F\n\ - bne _08021EBE\n\ - ldr r0, _08021F48 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08021ECA\n\ -_08021EBE:\n\ - ldr r1, _08021F4C @ =gUnknown_02024C2C\n\ - mov r2, r9\n\ - ldrb r0, [r2]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - strh r3, [r0]\n\ -_08021ECA:\n\ - ldr r0, _08021F50 @ =gAbsentBankFlags\n\ - ldrb r1, [r0]\n\ - ldr r2, _08021F54 @ =gBitTable\n\ - mov r3, r9\n\ - ldrb r4, [r3]\n\ - lsls r0, r4, 2\n\ - adds r0, r2\n\ - ldr r3, [r0]\n\ - ands r1, r3\n\ - adds r6, r2, 0\n\ - cmp r1, 0\n\ - beq _08021EE4\n\ - b _08022244\n\ -_08021EE4:\n\ - ldr r0, _08021F58 @ =0x000160a6\n\ - add r0, r12\n\ - ldrb r0, [r0]\n\ - ands r0, r3\n\ - cmp r0, 0\n\ - beq _08021EF2\n\ - b _08022244\n\ -_08021EF2:\n\ - ldrh r2, [r7]\n\ - lsls r0, r2, 1\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - add r0, r8\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x7F\n\ - bne _08021F04\n\ - b _08022244\n\ -_08021F04:\n\ - ldr r0, [r5]\n\ - movs r1, 0x80\n\ - lsls r1, 18\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08021F68\n\ - ldr r1, _08021F5C @ =gLastUsedMove\n\ - lsls r0, r4, 1\n\ - adds r0, r1\n\ - strh r2, [r0]\n\ - ldr r0, _08021F60 @ =gUnknown_02024C4C\n\ - mov r4, r9\n\ - ldrb r1, [r4]\n\ - lsls r1, 1\n\ - adds r1, r0\n\ - ldr r0, _08021F64 @ =gCurrentMove\n\ - ldrh r0, [r0]\n\ - strh r0, [r1]\n\ - b _08021F82\n\ - .align 2, 0\n\ -_08021F2C: .4byte gHitMarker\n\ -_08021F30: .4byte gBankAttacker\n\ -_08021F34: .4byte gActiveBank\n\ -_08021F38: .4byte gBankTarget\n\ -_08021F3C: .4byte 0xffffefff\n\ -_08021F40: .4byte gBattleMoves\n\ -_08021F44: .4byte gUnknown_02024BE8\n\ -_08021F48: .4byte gBattleMoveFlags\n\ -_08021F4C: .4byte gUnknown_02024C2C\n\ -_08021F50: .4byte gAbsentBankFlags\n\ -_08021F54: .4byte gBitTable\n\ -_08021F58: .4byte 0x000160a6\n\ -_08021F5C: .4byte gLastUsedMove\n\ -_08021F60: .4byte gUnknown_02024C4C\n\ -_08021F64: .4byte gCurrentMove\n\ -_08021F68:\n\ - ldr r1, _08021FD0 @ =gLastUsedMove\n\ - lsls r0, r4, 1\n\ - adds r0, r1\n\ - ldr r1, _08021FD4 @ =0x0000ffff\n\ - strh r1, [r0]\n\ - ldr r1, _08021FD8 @ =gUnknown_02024C4C\n\ - mov r2, r9\n\ - ldrb r0, [r2]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - movs r1, 0x1\n\ - negs r1, r1\n\ - strh r1, [r0]\n\ -_08021F82:\n\ - ldr r2, _08021FDC @ =gBankTarget\n\ - ldrb r3, [r2]\n\ - lsls r0, r3, 2\n\ - adds r0, r6\n\ - ldr r0, [r0]\n\ - lsls r0, 28\n\ - ldr r1, [r5]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _08021FA0\n\ - ldr r0, _08021FE0 @ =gUnknown_02024C5C\n\ - adds r0, r3, r0\n\ - mov r3, r9\n\ - ldrb r1, [r3]\n\ - strb r1, [r0]\n\ -_08021FA0:\n\ - ldr r0, [r5]\n\ - movs r1, 0x80\n\ - lsls r1, 18\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0802204C\n\ - ldr r0, _08021FE4 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0802204C\n\ - ldrh r2, [r7]\n\ - ldr r0, _08021FD4 @ =0x0000ffff\n\ - cmp r2, r0\n\ - bne _08021FEC\n\ - ldr r1, _08021FE8 @ =gMoveHitWith\n\ - ldr r4, _08021FDC @ =gBankTarget\n\ - ldrb r0, [r4]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - strh r2, [r0]\n\ - b _08022244\n\ - .align 2, 0\n\ -_08021FD0: .4byte gLastUsedMove\n\ -_08021FD4: .4byte 0x0000ffff\n\ -_08021FD8: .4byte gUnknown_02024C4C\n\ -_08021FDC: .4byte gBankTarget\n\ -_08021FE0: .4byte gUnknown_02024C5C\n\ -_08021FE4: .4byte gBattleMoveFlags\n\ -_08021FE8: .4byte gMoveHitWith\n\ -_08021FEC:\n\ - ldr r0, _08022014 @ =gMoveHitWith\n\ - ldr r5, _08022018 @ =gBankTarget\n\ - ldrb r1, [r5]\n\ - lsls r1, 1\n\ - adds r1, r0\n\ - ldr r4, _0802201C @ =gCurrentMove\n\ - ldrh r0, [r4]\n\ - strh r0, [r1]\n\ - ldr r0, _08022020 @ =0x0001601c\n\ - add r0, r12\n\ - ldrb r3, [r0]\n\ - cmp r3, 0\n\ - beq _08022028\n\ - ldr r0, _08022024 @ =gUnknown_02024C44\n\ - ldrb r1, [r5]\n\ - lsls r1, 1\n\ - adds r1, r0\n\ - movs r0, 0x3F\n\ - ands r0, r3\n\ - b _08021C22\n\ - .align 2, 0\n\ -_08022014: .4byte gMoveHitWith\n\ -_08022018: .4byte gBankTarget\n\ -_0802201C: .4byte gCurrentMove\n\ -_08022020: .4byte 0x0001601c\n\ -_08022024: .4byte gUnknown_02024C44\n\ -_08022028:\n\ - ldr r0, _08022044 @ =gUnknown_02024C44\n\ - ldr r1, _08022048 @ =gBankTarget\n\ - ldrb r2, [r1]\n\ - lsls r2, 1\n\ - adds r2, r0\n\ - ldrh r1, [r4]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - add r0, r8\n\ - ldrb r0, [r0, 0x2]\n\ - strh r0, [r2]\n\ - b _08022244\n\ - .align 2, 0\n\ -_08022044: .4byte gUnknown_02024C44\n\ -_08022048: .4byte gBankTarget\n\ -_0802204C:\n\ - ldr r0, _0802205C @ =gMoveHitWith\n\ - ldr r2, _08022060 @ =gBankTarget\n\ - ldrb r1, [r2]\n\ - lsls r1, 1\n\ - adds r1, r0\n\ - ldr r0, _08022064 @ =0x0000ffff\n\ - b _08021C22\n\ - .align 2, 0\n\ -_0802205C: .4byte gMoveHitWith\n\ -_08022060: .4byte gBankTarget\n\ -_08022064: .4byte 0x0000ffff\n\ -_08022068:\n\ - ldr r0, _0802212C @ =gAbsentBankFlags\n\ - ldrb r1, [r0]\n\ - ldr r6, _08022130 @ =gBitTable\n\ - ldr r2, _08022134 @ =gBankAttacker\n\ - ldrb r5, [r2]\n\ - lsls r0, r5, 2\n\ - adds r0, r6\n\ - ldr r4, [r0]\n\ - ands r1, r4\n\ - mov r9, r2\n\ - cmp r1, 0\n\ - beq _08022082\n\ - b _08022244\n\ -_08022082:\n\ - ldr r0, _08022138 @ =0x000160a6\n\ - add r0, r12\n\ - ldrb r0, [r0]\n\ - ands r0, r4\n\ - cmp r0, 0\n\ - beq _08022090\n\ - b _08022244\n\ -_08022090:\n\ - ldr r1, _0802213C @ =gBattleMoves\n\ - ldr r4, _08022140 @ =gUnknown_02024BE8\n\ - ldrh r3, [r4]\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, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0802215C\n\ - ldr r0, _08022144 @ =gHitMarker\n\ - ldr r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 18\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0802215C\n\ - ldr r2, _08022148 @ =gBankTarget\n\ - ldrb r0, [r2]\n\ - cmp r5, r0\n\ - bne _080220C0\n\ - b _08022244\n\ -_080220C0:\n\ - adds r2, r0, 0\n\ - lsls r0, r2, 2\n\ - adds r0, r6\n\ - ldr r0, [r0]\n\ - lsls r0, 28\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _0802215C\n\ - ldr r0, _0802214C @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0802215C\n\ - lsls r0, r2, 1\n\ - ldr r5, _08022150 @ =0x000160ac\n\ - adds r0, r5\n\ - add r0, r12\n\ - strb r3, [r0]\n\ - ldr r0, _08022148 @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - lsls r1, 1\n\ - ldr r2, _08022154 @ =0x000160ad\n\ - adds r1, r2\n\ - add r1, r12\n\ - ldrh r0, [r4]\n\ - lsrs r0, 8\n\ - strb r0, [r1]\n\ - ldr r3, _08022148 @ =gBankTarget\n\ - ldrb r2, [r3]\n\ - lsls r2, 2\n\ - mov r5, r9\n\ - ldrb r0, [r5]\n\ - lsrs r0, 1\n\ - lsls r0, 1\n\ - ldr r1, _08022158 @ =0x00016100\n\ - adds r0, r1\n\ - adds r2, r0\n\ - add r2, r12\n\ - ldrh r0, [r4]\n\ - strb r0, [r2]\n\ - ldrb r2, [r3]\n\ - lsls r2, 2\n\ - ldrb r0, [r5]\n\ - lsrs r0, 1\n\ - lsls r0, 1\n\ - adds r1, 0x1\n\ - adds r0, r1\n\ - adds r2, r0\n\ - add r2, r12\n\ - ldrh r0, [r4]\n\ - lsrs r0, 8\n\ - strb r0, [r2]\n\ - b _08022244\n\ - .align 2, 0\n\ -_0802212C: .4byte gAbsentBankFlags\n\ -_08022130: .4byte gBitTable\n\ -_08022134: .4byte gBankAttacker\n\ -_08022138: .4byte 0x000160a6\n\ -_0802213C: .4byte gBattleMoves\n\ -_08022140: .4byte gUnknown_02024BE8\n\ -_08022144: .4byte gHitMarker\n\ -_08022148: .4byte gBankTarget\n\ -_0802214C: .4byte gBattleMoveFlags\n\ -_08022150: .4byte 0x000160ac\n\ -_08022154: .4byte 0x000160ad\n\ -_08022158: .4byte 0x00016100\n\ -_0802215C:\n\ - mov r1, r9\n\ - ldrb r0, [r1]\n\ - ldr r2, _080221B4 @ =gBankTarget\n\ - ldrb r2, [r2]\n\ - cmp r0, r2\n\ - beq _08022244\n\ - ldr r3, _080221B4 @ =gBankTarget\n\ - ldrb r0, [r3]\n\ - lsls r0, 1\n\ - ldr r4, _080221B8 @ =0x000160ac\n\ - adds r0, r4\n\ - add r0, r12\n\ - movs r3, 0\n\ - strb r3, [r0]\n\ - ldr r5, _080221B4 @ =gBankTarget\n\ - ldrb r0, [r5]\n\ - lsls r0, 1\n\ - ldr r1, _080221BC @ =0x000160ad\n\ - adds r0, r1\n\ - add r0, r12\n\ - strb r3, [r0]\n\ - ldrb r2, [r5]\n\ - lsls r2, 2\n\ - mov r4, r9\n\ - ldrb r0, [r4]\n\ - lsrs r0, 1\n\ - lsls r0, 1\n\ - adds r1, 0x53\n\ - adds r0, r1\n\ - adds r2, r0\n\ - add r2, r12\n\ - strb r3, [r2]\n\ - ldrb r2, [r5]\n\ - lsls r2, 2\n\ - ldrb r0, [r4]\n\ - lsrs r0, 1\n\ - lsls r0, 1\n\ - adds r1, 0x1\n\ - adds r0, r1\n\ - adds r2, r0\n\ - add r2, r12\n\ - strb r3, [r2]\n\ - b _08022244\n\ - .align 2, 0\n\ -_080221B4: .4byte gBankTarget\n\ -_080221B8: .4byte 0x000160ac\n\ -_080221BC: .4byte 0x000160ad\n\ -_080221C0:\n\ - ldr r5, _080222B0 @ =gHitMarker\n\ - ldr r2, [r5]\n\ - movs r0, 0x80\n\ - lsls r0, 12\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - bne _08022244\n\ - ldr r0, _080222B4 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08022244\n\ - ldr r1, _080222B8 @ =gProtectStructs\n\ - ldr r0, _080222BC @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - lsls r0, 4\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x1]\n\ - lsls r0, 29\n\ - cmp r0, 0\n\ - blt _08022244\n\ - ldr r0, _080222C0 @ =gBattleMoves\n\ - mov r9, r0\n\ - ldr r1, _080222C4 @ =gCurrentMove\n\ - mov r8, r1\n\ - ldrh r0, [r1]\n\ - lsls r1, r0, 1\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - add r1, r9\n\ - ldrb r0, [r1, 0x6]\n\ - cmp r0, 0x8\n\ - bne _08022244\n\ - movs r6, 0x80\n\ - lsls r6, 2\n\ - adds r4, r6, 0\n\ - ands r4, r2\n\ - cmp r4, 0\n\ - bne _08022244\n\ - ldr r7, _080222C8 @ =gBankTarget\n\ - ldrb r0, [r7]\n\ - bl GetBankIdentity\n\ - movs r1, 0x2\n\ - eors r0, r1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl GetBankByPlayerAI\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - ldr r1, _080222CC @ =gBattleMons\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - beq _0802223A\n\ - bl _08021874\n\ -_0802223A:\n\ - ldr r0, [r5]\n\ - orrs r0, r6\n\ - str r0, [r5]\n\ - ldr r2, _080222D0 @ =0x02000000\n\ - mov r12, r2\n\ -_08022244:\n\ - ldr r1, _080222D4 @ =0x0001600c\n\ - add r1, r12\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ -_0802224E:\n\ - ldr r3, [sp, 0x10]\n\ - cmp r3, 0x1\n\ - bne _08022262\n\ - mov r4, r10\n\ - cmp r4, 0\n\ - bne _08022262\n\ - ldr r1, _080222D4 @ =0x0001600c\n\ - add r1, r12\n\ - movs r0, 0x11\n\ - strb r0, [r1]\n\ -_08022262:\n\ - ldr r5, [sp, 0x10]\n\ - cmp r5, 0x2\n\ - bne _08022278\n\ - ldr r1, _080222D4 @ =0x0001600c\n\ - add r1, r12\n\ - ldr r0, [sp, 0x14]\n\ - ldrb r2, [r1]\n\ - cmp r0, r2\n\ - bne _08022278\n\ - movs r0, 0x11\n\ - strb r0, [r1]\n\ -_08022278:\n\ - ldr r0, _080222D4 @ =0x0001600c\n\ - add r0, r12\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x11\n\ - beq _08022286\n\ - bl _080218E4\n\ -_08022286:\n\ - ldr r0, _080222D4 @ =0x0001600c\n\ - add r0, r12\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x11\n\ - bne _0802229E\n\ - mov r3, r10\n\ - cmp r3, 0\n\ - bne _0802229E\n\ - ldr r1, _080222D8 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x3\n\ -_0802229C:\n\ - str r0, [r1]\n\ -_0802229E:\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\ - .align 2, 0\n\ -_080222B0: .4byte gHitMarker\n\ -_080222B4: .4byte gBattleTypeFlags\n\ -_080222B8: .4byte gProtectStructs\n\ -_080222BC: .4byte gBankAttacker\n\ -_080222C0: .4byte gBattleMoves\n\ -_080222C4: .4byte gCurrentMove\n\ -_080222C8: .4byte gBankTarget\n\ -_080222CC: .4byte gBattleMons\n\ -_080222D0: .4byte 0x02000000\n\ -_080222D4: .4byte 0x0001600c\n\ -_080222D8: .4byte gBattlescriptCurrInstr\n\ - .syntax divided" - ); -} -#endif // NONMATCHING - -static void atk4A_typecalc2(void) -{ - u8 flags = 0; - int i = 0; - u8 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; - gBattleCommunication[6] = move_type; - RecordAbilityBattle(gBankTarget, gLastUsedAbility); - } - else - { - while (gTypeEffectiveness[i]!= TYPE_ENDTABLE) - { - if (gTypeEffectiveness[i] == TYPE_FORESIGHT) - { - if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT) {break;} - else {i += 3; continue;} - } - - if (gTypeEffectiveness[i] == move_type) - { - //check type1 - if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1) - { - if (gTypeEffectiveness[i + 2] == 0) - { - gBattleMoveFlags |= MOVESTATUS_NOTAFFECTED; - break; - } - if (gTypeEffectiveness[i + 2] == 5) - flags |= MOVESTATUS_NOTVERYEFFECTIVE; - if (gTypeEffectiveness[i + 2] == 20) - flags |= MOVESTATUS_SUPEREFFECTIVE; - } - //check type2 - if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2) - { - if (gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 - && gTypeEffectiveness[i + 2] == 0) - { - gBattleMoveFlags |= MOVESTATUS_NOTAFFECTED; - break; - } - if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 && gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 && gTypeEffectiveness[i + 2] == 5) - flags |= MOVESTATUS_NOTVERYEFFECTIVE; - if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 - && gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2 && gTypeEffectiveness[i + 2] == 20) - flags |= MOVESTATUS_SUPEREFFECTIVE; - } - } - i += 3; - } - } - - if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && !(flags & MOVESTATUS_NOEFFECT) && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2 && - (!(flags & MOVESTATUS_SUPEREFFECTIVE) || ((flags & (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)) == (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE))) && - gBattleMoves[gCurrentMove].power) - { - gLastUsedAbility = ABILITY_WONDER_GUARD; - gBattleMoveFlags |= MOVESTATUS_MISSED; - gMoveHitWith[gBankTarget] = 0; - gBattleCommunication[6] = 3; - RecordAbilityBattle(gBankTarget, gLastUsedAbility); - } - if (gBattleMoveFlags & MOVESTATUS_NOTAFFECTED) - gProtectStructs[gBankAttacker].notEffective = 1; - - gBattlescriptCurrInstr++; -} - -static void atk4B_return_atk_to_ball(void) -{ - gActiveBank = gBankAttacker; - if (!(gHitMarker & HITMARKER_FAINTED(gActiveBank))) - { - EmitReturnPokeToBall(0, 0); - MarkBufferBankForExecution(gActiveBank); - } - gBattlescriptCurrInstr++; -} - -static void atk4C_copy_poke_data(void) -{ - if (gBattleExecBuffer) - return; - - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - - gBattlePartyID[gActiveBank] = unk_2000000[0x16068 + gActiveBank]; - - EmitGetAttributes(0, 0, gBitTable[gBattlePartyID[gActiveBank]]); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 2; -} - -static inline u8 get_knocked_off_byte(u8 bank) -{ - register u32 side asm("r2") = GetBankSide(bank); - register struct WishFutureKnock* dummy = &gWishFutureKnock; - register u8* aa = ((u8*)((u8*)(dummy))); - register u8* bb = aa + 0x29; - register u8* cc asm("r0") = side + bb; - return *cc; -} - -static void atk4D_switch_data_update(void) -{ - struct BattlePokemon OldData; - int i; - u8 *monData; - if (gBattleExecBuffer) - return; - - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - OldData = gBattleMons[gActiveBank]; - monData = (u8*)(&gBattleMons[gActiveBank]); - for (i = 0; i < sizeof(struct BattlePokemon); i++) - { - monData[i] = gBattleBufferB[gActiveBank][4 + i]; - } - - gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1; - gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2; - gBattleMons[gActiveBank].ability = GetAbilityBySpecies(gBattleMons[gActiveBank].species, gBattleMons[gActiveBank].altAbility); - //check knocked off item - if (get_knocked_off_byte(gActiveBank) & gBitTable[gBattlePartyID[gActiveBank]]) - { - gBattleMons[gActiveBank].item = 0; - } - - if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) - { - for (i = 0; i < 8; i++) - { - gBattleMons[gActiveBank].statStages[i] = OldData.statStages[i]; - } - gBattleMons[gActiveBank].status2 = OldData.status2; - } - SwitchInClearStructs(); - BATTLE_STRUCT->scriptingActive = gActiveBank; - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 7; - gBattleTextBuff1[2] = gActiveBank; - gBattleTextBuff1[3] = gBattlePartyID[gActiveBank]; - gBattleTextBuff1[4] = 0xFF; - - gBattlescriptCurrInstr += 2; -} - -static void atk4E_switchin_anim(void) -{ - if (gBattleExecBuffer) - return; - - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - if (GetBankSide(gActiveBank) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER))) - { - GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); - } - gAbsentBankFlags &= ~(gBitTable[gActiveBank]); - EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2)); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 3; -} - -static void atk4F_jump_if_cannot_switch(void) -{ - int val, to_cmp; - register struct Pokemon *party; - u8 r7; - //0x80 byte is used as a way of telling the function whether to not check status2/status3 - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1) & 0x7F); - if (!(BSScriptRead8(gBattlescriptCurrInstr + 1) & 0x80) - && ((gBattleMons[gActiveBank].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) - || (gStatuses3[gActiveBank] & STATUS3_ROOTED))) - { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); - return; - } - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - if (GetBankSide(gActiveBank) == 1) - party = gEnemyParty; - else - party = gPlayerParty; - val = 0; - if (sub_803FBFC(sub_803FC34(gActiveBank)) == 1) - val = 3; - for (to_cmp = val + 3; val < to_cmp; val++) - { - if (GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE - && !GetMonData(&party[val], MON_DATA_IS_EGG) - && GetMonData(&party[val], MON_DATA_HP) != 0 - && gBattlePartyID[gActiveBank] != val) - break; - } - if (val == to_cmp) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); - else - gBattlescriptCurrInstr += 6; - } - else - { - if (GetBankSide(gActiveBank) == 1) - { - r7 = GetBankByPlayerAI(1); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - to_cmp = GetBankByPlayerAI(3); - else - to_cmp = r7; - party = gEnemyParty; - } - else - { - r7 = GetBankByPlayerAI(0); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - to_cmp = GetBankByPlayerAI(2); - else - to_cmp = r7; - party = gPlayerParty; - } - for (val = 0; val < 6; val++) - { - if (GetMonData(&party[val], MON_DATA_HP) != 0 - && GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE - && !GetMonData(&party[val], MON_DATA_IS_EGG) - && val != gBattlePartyID[r7] && val != gBattlePartyID[to_cmp]) - break; - } - if (val == 6) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); - else - gBattlescriptCurrInstr += 6; - } -} - -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]); - MarkBufferBankForExecution(gActiveBank); -} - -/* -static void atk50_openpartyscreen(void) -{ - int i = 0; - int r9 = 0; - u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 2); - - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 5) - { - if ((gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI)) != BATTLE_TYPE_DOUBLE) - { - for (gActiveBank = i; gActiveBank < gNoOfAllBanks; gActiveBank++) - { - if (!(gHitMarker & HITMARKER_FAINTED(gActiveBank))) - { - EmitLinkStandbyMsg(0, 2); - MarkBufferBankForExecution(gActiveBank); - } - else if (sub_8018018(gActiveBank, 6, 6) == 0 - && !gSpecialStatuses[gActiveBank].flag40) - { - sub_8022A3C(6); - gSpecialStatuses[gActiveBank].flag40 = 1; - } - else - { - gAbsentBankFlags |= gBitTable[gActiveBank]; - gHitMarker &= (~HITMARKER_FAINTED(gActiveBank)); - EmitLinkStandbyMsg(0, 2); - MarkBufferBankForExecution(gActiveBank); - } - } - } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - if (!(gHitMarker >> 0x1C & gBitTable[0])) - { - - } - else if (sub_8018018(gActiveBank, 6, 6) == 0 - && !gSpecialStatuses[gActiveBank].flag40) - { - - } - else - { - - } - } - } -} -*/ - -__attribute__((naked)) -static void atk50_openpartyscreen(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - sub sp, 0x4\n\ - movs r7, 0\n\ - movs r0, 0\n\ - mov r9, r0\n\ - ldr r6, _08022B44 @ =gBattlescriptCurrInstr\n\ - ldr r1, [r6]\n\ - ldrb r2, [r1, 0x2]\n\ - ldrb r0, [r1, 0x3]\n\ - lsls r0, 8\n\ - orrs r2, r0\n\ - ldrb r0, [r1, 0x4]\n\ - lsls r0, 16\n\ - orrs r2, r0\n\ - ldrb r0, [r1, 0x5]\n\ - lsls r0, 24\n\ - orrs r2, r0\n\ - mov r8, r2\n\ - ldrb r2, [r1, 0x1]\n\ - adds r0, r2, 0\n\ - mov r12, r6\n\ - cmp r0, 0x5\n\ - beq _08022ACE\n\ - b _08022F74\n\ -_08022ACE:\n\ - ldr r0, _08022B48 @ =gBattleTypeFlags\n\ - ldrh r0, [r0]\n\ - movs r1, 0x41\n\ - ands r1, r0\n\ - cmp r1, 0x1\n\ - beq _08022BBC\n\ - ldr r1, _08022B4C @ =gActiveBank\n\ - strb r7, [r1]\n\ - ldr r0, _08022B50 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r7, r0\n\ - bcc _08022AE8\n\ - b _08022F62\n\ -_08022AE8:\n\ - ldr r7, _08022B54 @ =gHitMarker\n\ - ldr r6, _08022B58 @ =gBitTable\n\ - adds r4, r1, 0\n\ - ldr r0, _08022B5C @ =gAbsentBankFlags\n\ - mov r8, r0\n\ -_08022AF2:\n\ - ldrb r2, [r4]\n\ - lsls r0, r2, 2\n\ - adds r0, r6\n\ - ldr r1, [r0]\n\ - lsls r1, 28\n\ - ldr r0, [r7]\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08022B94\n\ - adds r0, r2, 0\n\ - movs r1, 0x6\n\ - movs r2, 0x6\n\ - bl sub_8018018\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08022B60\n\ - ldrb r0, [r4]\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldr r0, [r0]\n\ - mov r2, r8\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldrb r0, [r4]\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldr r1, [r0]\n\ - lsls r1, 28\n\ - ldr r0, [r7]\n\ - bics r0, r1\n\ - str r0, [r7]\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - bl EmitLinkStandbyMsg\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - b _08022BA2\n\ - .align 2, 0\n\ -_08022B44: .4byte gBattlescriptCurrInstr\n\ -_08022B48: .4byte gBattleTypeFlags\n\ -_08022B4C: .4byte gActiveBank\n\ -_08022B50: .4byte gNoOfAllBanks\n\ -_08022B54: .4byte gHitMarker\n\ -_08022B58: .4byte gBitTable\n\ -_08022B5C: .4byte gAbsentBankFlags\n\ -_08022B60:\n\ - ldr r5, _08022B90 @ =gSpecialStatuses\n\ - ldrb r0, [r4]\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r5\n\ - ldrb r0, [r1]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _08022BA2\n\ - movs r0, 0x6\n\ - bl sub_8022A3C\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r5\n\ - ldrb r1, [r0]\n\ - movs r2, 0x40\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - b _08022BA2\n\ - .align 2, 0\n\ -_08022B90: .4byte gSpecialStatuses\n\ -_08022B94:\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - bl EmitLinkStandbyMsg\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ -_08022BA2:\n\ - ldrb r0, [r4]\n\ - adds r0, 0x1\n\ - strb r0, [r4]\n\ - ldr r1, _08022BB8 @ =gNoOfAllBanks\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bcc _08022AF2\n\ - b _08022F62\n\ - .align 2, 0\n\ -_08022BB8: .4byte gNoOfAllBanks\n\ -_08022BBC:\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _08022BC4\n\ - b _08022F62\n\ -_08022BC4:\n\ - ldr r0, _08022C1C @ =gHitMarker\n\ - mov r8, r0\n\ - ldr r0, [r0]\n\ - lsrs r5, r0, 28\n\ - ldr r6, _08022C20 @ =gBitTable\n\ - ldr r0, [r6]\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _08022C7E\n\ - ldr r4, _08022C24 @ =gActiveBank\n\ - strb r7, [r4]\n\ - movs r0, 0\n\ - movs r1, 0x6\n\ - movs r2, 0x6\n\ - bl sub_8018018\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08022C2C\n\ - ldr r2, _08022C28 @ =gAbsentBankFlags\n\ - ldrb r0, [r4]\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldr r0, [r0]\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldrb r0, [r4]\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldr r1, [r0]\n\ - lsls r1, 28\n\ - mov r2, r8\n\ - ldr r0, [r2]\n\ - bics r0, r1\n\ - str r0, [r2]\n\ - movs r0, 0\n\ - bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - b _08022C7E\n\ - .align 2, 0\n\ -_08022C1C: .4byte gHitMarker\n\ -_08022C20: .4byte gBitTable\n\ -_08022C24: .4byte gActiveBank\n\ -_08022C28: .4byte gAbsentBankFlags\n\ -_08022C2C:\n\ - ldr r6, _08022C60 @ =gSpecialStatuses\n\ - ldrb r0, [r4]\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r6\n\ - ldrb r0, [r1]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _08022C6C\n\ - ldr r0, _08022C64 @ =0x02000000\n\ - ldr r1, _08022C68 @ =0x0001606a\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - bl sub_8022A3C\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldrb r1, [r0]\n\ - movs r2, 0x40\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - b _08022C7E\n\ - .align 2, 0\n\ -_08022C60: .4byte gSpecialStatuses\n\ -_08022C64: .4byte 0x02000000\n\ -_08022C68: .4byte 0x0001606a\n\ -_08022C6C:\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - bl EmitLinkStandbyMsg\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - movs r2, 0x1\n\ - mov r9, r2\n\ -_08022C7E:\n\ - ldr r6, _08022CD8 @ =gBitTable\n\ - ldr r0, [r6, 0x8]\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _08022D40\n\ - ldr r0, [r6]\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - bne _08022D40\n\ - ldr r4, _08022CDC @ =gActiveBank\n\ - movs r0, 0x2\n\ - strb r0, [r4]\n\ - movs r0, 0x2\n\ - movs r1, 0x6\n\ - movs r2, 0x6\n\ - bl sub_8018018\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08022CE8\n\ - ldr r2, _08022CE0 @ =gAbsentBankFlags\n\ - ldrb r0, [r4]\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldr r0, [r0]\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldr r2, _08022CE4 @ =gHitMarker\n\ - ldrb r0, [r4]\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldr r1, [r0]\n\ - lsls r1, 28\n\ - ldr r0, [r2]\n\ - bics r0, r1\n\ - str r0, [r2]\n\ - movs r0, 0\n\ - bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - b _08022D40\n\ - .align 2, 0\n\ -_08022CD8: .4byte gBitTable\n\ -_08022CDC: .4byte gActiveBank\n\ -_08022CE0: .4byte gAbsentBankFlags\n\ -_08022CE4: .4byte gHitMarker\n\ -_08022CE8:\n\ - ldr r6, _08022D1C @ =gSpecialStatuses\n\ - ldrb r0, [r4]\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r6\n\ - ldrb r0, [r1]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _08022D28\n\ - ldr r0, _08022D20 @ =0x02000000\n\ - ldr r1, _08022D24 @ =0x00016068\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - bl sub_8022A3C\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldrb r1, [r0]\n\ - movs r2, 0x40\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - b _08022D40\n\ - .align 2, 0\n\ -_08022D1C: .4byte gSpecialStatuses\n\ -_08022D20: .4byte 0x02000000\n\ -_08022D24: .4byte 0x00016068\n\ -_08022D28:\n\ - movs r0, 0x1\n\ - mov r2, r9\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - bne _08022D40\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - bl EmitLinkStandbyMsg\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ -_08022D40:\n\ - ldr r6, _08022D90 @ =gBitTable\n\ - ldr r0, [r6, 0x4]\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _08022DF6\n\ - ldr r4, _08022D94 @ =gActiveBank\n\ - movs r0, 0x1\n\ - strb r0, [r4]\n\ - movs r0, 0x1\n\ - movs r1, 0x6\n\ - movs r2, 0x6\n\ - bl sub_8018018\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08022DA0\n\ - ldr r2, _08022D98 @ =gAbsentBankFlags\n\ - ldrb r0, [r4]\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldr r0, [r0]\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldr r2, _08022D9C @ =gHitMarker\n\ - ldrb r0, [r4]\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldr r1, [r0]\n\ - lsls r1, 28\n\ - ldr r0, [r2]\n\ - bics r0, r1\n\ - str r0, [r2]\n\ - movs r0, 0\n\ - bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - b _08022DF6\n\ - .align 2, 0\n\ -_08022D90: .4byte gBitTable\n\ -_08022D94: .4byte gActiveBank\n\ -_08022D98: .4byte gAbsentBankFlags\n\ -_08022D9C: .4byte gHitMarker\n\ -_08022DA0:\n\ - ldr r6, _08022DD4 @ =gSpecialStatuses\n\ - ldrb r0, [r4]\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r6\n\ - ldrb r0, [r1]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _08022DE0\n\ - ldr r0, _08022DD8 @ =0x02000000\n\ - ldr r1, _08022DDC @ =0x0001606b\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - bl sub_8022A3C\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldrb r1, [r0]\n\ - movs r2, 0x40\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - b _08022DF6\n\ - .align 2, 0\n\ -_08022DD4: .4byte gSpecialStatuses\n\ -_08022DD8: .4byte 0x02000000\n\ -_08022DDC: .4byte 0x0001606b\n\ -_08022DE0:\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - bl EmitLinkStandbyMsg\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - movs r0, 0x2\n\ - mov r2, r9\n\ - orrs r2, r0\n\ - mov r9, r2\n\ -_08022DF6:\n\ - ldr r6, _08022E50 @ =gBitTable\n\ - ldr r0, [r6, 0xC]\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _08022EB8\n\ - ldr r0, [r6, 0x4]\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - bne _08022EB8\n\ - ldr r4, _08022E54 @ =gActiveBank\n\ - movs r0, 0x3\n\ - strb r0, [r4]\n\ - movs r0, 0x3\n\ - movs r1, 0x6\n\ - movs r2, 0x6\n\ - bl sub_8018018\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08022E60\n\ - ldr r2, _08022E58 @ =gAbsentBankFlags\n\ - ldrb r0, [r4]\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldr r0, [r0]\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldr r2, _08022E5C @ =gHitMarker\n\ - ldrb r0, [r4]\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldr r1, [r0]\n\ - lsls r1, 28\n\ - ldr r0, [r2]\n\ - bics r0, r1\n\ - str r0, [r2]\n\ - movs r0, 0\n\ - bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - b _08022EB8\n\ - .align 2, 0\n\ -_08022E50: .4byte gBitTable\n\ -_08022E54: .4byte gActiveBank\n\ -_08022E58: .4byte gAbsentBankFlags\n\ -_08022E5C: .4byte gHitMarker\n\ -_08022E60:\n\ - ldr r6, _08022E94 @ =gSpecialStatuses\n\ - ldrb r0, [r4]\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r6\n\ - ldrb r0, [r1]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _08022EA0\n\ - ldr r0, _08022E98 @ =0x02000000\n\ - ldr r1, _08022E9C @ =0x00016069\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - bl sub_8022A3C\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldrb r1, [r0]\n\ - movs r2, 0x40\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - b _08022EB8\n\ - .align 2, 0\n\ -_08022E94: .4byte gSpecialStatuses\n\ -_08022E98: .4byte 0x02000000\n\ -_08022E9C: .4byte 0x00016069\n\ -_08022EA0:\n\ - movs r0, 0x2\n\ - mov r2, r9\n\ - ands r2, r0\n\ - cmp r2, 0\n\ - bne _08022EB8\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - bl EmitLinkStandbyMsg\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ -_08022EB8:\n\ - ldr r1, _08022EE8 @ =gSpecialStatuses\n\ - ldrb r0, [r1]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _08022F0C\n\ - adds r0, r1, 0\n\ - adds r0, 0x28\n\ - ldrb r0, [r0]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _08022F0C\n\ - cmp r5, 0\n\ - beq _08022F0C\n\ - ldr r0, _08022EEC @ =gAbsentBankFlags\n\ - ldrb r1, [r0]\n\ - ldr r0, _08022EF0 @ =gBitTable\n\ - ldr r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _08022EF8\n\ - ldr r1, _08022EF4 @ =gActiveBank\n\ - movs r0, 0x2\n\ - strb r0, [r1]\n\ - b _08022EFC\n\ - .align 2, 0\n\ -_08022EE8: .4byte gSpecialStatuses\n\ -_08022EEC: .4byte gAbsentBankFlags\n\ -_08022EF0: .4byte gBitTable\n\ -_08022EF4: .4byte gActiveBank\n\ -_08022EF8:\n\ - ldr r0, _08022F3C @ =gActiveBank\n\ - strb r1, [r0]\n\ -_08022EFC:\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - bl EmitLinkStandbyMsg\n\ - ldr r0, _08022F3C @ =gActiveBank\n\ - ldrb r0, [r0]\n\ - bl MarkBufferBankForExecution\n\ -_08022F0C:\n\ - ldr r1, _08022F40 @ =gSpecialStatuses\n\ - ldrb r0, [r1, 0x14]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _08022F62\n\ - adds r0, r1, 0\n\ - adds r0, 0x3C\n\ - ldrb r0, [r0]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _08022F62\n\ - cmp r5, 0\n\ - beq _08022F62\n\ - ldr r0, _08022F44 @ =gAbsentBankFlags\n\ - ldrb r0, [r0]\n\ - ldr r1, _08022F48 @ =gBitTable\n\ - ldr r1, [r1, 0x4]\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08022F4C\n\ - ldr r1, _08022F3C @ =gActiveBank\n\ - movs r0, 0x3\n\ - b _08022F50\n\ - .align 2, 0\n\ -_08022F3C: .4byte gActiveBank\n\ -_08022F40: .4byte gSpecialStatuses\n\ -_08022F44: .4byte gAbsentBankFlags\n\ -_08022F48: .4byte gBitTable\n\ -_08022F4C:\n\ - ldr r1, _08022F6C @ =gActiveBank\n\ - movs r0, 0x1\n\ -_08022F50:\n\ - strb r0, [r1]\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - bl EmitLinkStandbyMsg\n\ - ldr r0, _08022F6C @ =gActiveBank\n\ - ldrb r0, [r0]\n\ - bl MarkBufferBankForExecution\n\ -_08022F62:\n\ - ldr r1, _08022F70 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x6\n\ - str r0, [r1]\n\ - b _08023302\n\ - .align 2, 0\n\ -_08022F6C: .4byte gActiveBank\n\ -_08022F70: .4byte gBattlescriptCurrInstr\n\ -_08022F74:\n\ - cmp r0, 0x6\n\ - beq _08022F7A\n\ - b _08023170\n\ -_08022F7A:\n\ - ldr r0, _08022FF0 @ =gBattleTypeFlags\n\ - ldrh r2, [r0]\n\ - movs r0, 0x40\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - beq _08022F88\n\ - b _0802310C\n\ -_08022F88:\n\ - movs r0, 0x1\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - bne _08022F92\n\ - b _0802310C\n\ -_08022F92:\n\ - ldr r7, _08022FF4 @ =gHitMarker\n\ - ldr r0, [r7]\n\ - lsrs r5, r0, 28\n\ - ldr r4, _08022FF8 @ =gBitTable\n\ - ldr r0, [r4, 0x8]\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _0802303A\n\ - ldr r0, [r4]\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _0802303A\n\ - ldr r6, _08022FFC @ =gActiveBank\n\ - movs r0, 0x2\n\ - strb r0, [r6]\n\ - ldr r0, _08023000 @ =gBattleBufferB\n\ - ldrb r1, [r0, 0x1]\n\ - movs r0, 0x2\n\ - movs r2, 0x6\n\ - bl sub_8018018\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08023008\n\ - ldr r2, _08023004 @ =gAbsentBankFlags\n\ - ldrb r0, [r6]\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldr r0, [r0]\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldrb r0, [r6]\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldr r1, [r0]\n\ - lsls r1, 28\n\ - ldr r0, [r7]\n\ - bics r0, r1\n\ - str r0, [r7]\n\ - movs r0, 0\n\ - bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ - ldrb r0, [r6]\n\ - bl MarkBufferBankForExecution\n\ - b _0802303A\n\ - .align 2, 0\n\ -_08022FF0: .4byte gBattleTypeFlags\n\ -_08022FF4: .4byte gHitMarker\n\ -_08022FF8: .4byte gBitTable\n\ -_08022FFC: .4byte gActiveBank\n\ -_08023000: .4byte gBattleBufferB\n\ -_08023004: .4byte gAbsentBankFlags\n\ -_08023008:\n\ - ldr r4, _08023098 @ =gSpecialStatuses\n\ - ldrb r0, [r6]\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r4\n\ - ldrb r0, [r1]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _0802303A\n\ - ldr r0, _0802309C @ =0x02000000\n\ - ldr r1, _080230A0 @ =0x00016068\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - bl sub_8022A3C\n\ - ldrb r1, [r6]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrb r1, [r0]\n\ - movs r2, 0x40\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ -_0802303A:\n\ - ldr r4, _080230A4 @ =gBitTable\n\ - ldr r0, [r4, 0xC]\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _080230EE\n\ - ldr r0, [r4, 0x4]\n\ - ands r5, r0\n\ - cmp r5, 0\n\ - beq _080230EE\n\ - ldr r5, _080230A8 @ =gActiveBank\n\ - movs r0, 0x3\n\ - strb r0, [r5]\n\ - ldr r0, _080230AC @ =gBattleBufferB\n\ - ldr r2, _080230B0 @ =0x00000201\n\ - adds r0, r2\n\ - ldrb r1, [r0]\n\ - movs r0, 0x3\n\ - movs r2, 0x6\n\ - bl sub_8018018\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080230BC\n\ - ldr r2, _080230B4 @ =gAbsentBankFlags\n\ - ldrb r0, [r5]\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldr r0, [r0]\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldr r2, _080230B8 @ =gHitMarker\n\ - ldrb r0, [r5]\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldr r1, [r0]\n\ - lsls r1, 28\n\ - ldr r0, [r2]\n\ - bics r0, r1\n\ - str r0, [r2]\n\ - movs r0, 0\n\ - bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\ - ldrb r0, [r5]\n\ - bl MarkBufferBankForExecution\n\ - b _080230EE\n\ - .align 2, 0\n\ -_08023098: .4byte gSpecialStatuses\n\ -_0802309C: .4byte 0x02000000\n\ -_080230A0: .4byte 0x00016068\n\ -_080230A4: .4byte gBitTable\n\ -_080230A8: .4byte gActiveBank\n\ -_080230AC: .4byte gBattleBufferB\n\ -_080230B0: .4byte 0x00000201\n\ -_080230B4: .4byte gAbsentBankFlags\n\ -_080230B8: .4byte gHitMarker\n\ -_080230BC:\n\ - ldr r4, _080230FC @ =gSpecialStatuses\n\ - ldrb r0, [r5]\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r4\n\ - ldrb r0, [r1]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _080230EE\n\ - ldr r0, _08023100 @ =0x02000000\n\ - ldr r1, _08023104 @ =0x00016069\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - bl sub_8022A3C\n\ - ldrb r1, [r5]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrb r1, [r0]\n\ - movs r2, 0x40\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ -_080230EE:\n\ - ldr r1, _08023108 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x6\n\ - str r0, [r1]\n\ - mov r12, r1\n\ - b _08023110\n\ - .align 2, 0\n\ -_080230FC: .4byte gSpecialStatuses\n\ -_08023100: .4byte 0x02000000\n\ -_08023104: .4byte 0x00016069\n\ -_08023108: .4byte gBattlescriptCurrInstr\n\ -_0802310C:\n\ - adds r0, r1, 0x6\n\ - str r0, [r6]\n\ -_08023110:\n\ - ldr r0, _08023160 @ =gHitMarker\n\ - ldr r0, [r0]\n\ - lsrs r5, r0, 28\n\ - ldr r1, _08023164 @ =gBank1\n\ - movs r0, 0\n\ - strb r0, [r1]\n\ - ldr r4, _08023168 @ =gBitTable\n\ - ldr r2, [r4]\n\ - ands r2, r5\n\ - ldr r6, _0802316C @ =gNoOfAllBanks\n\ - cmp r2, 0\n\ - bne _0802314C\n\ - adds r7, r6, 0\n\ - ldrb r0, [r6]\n\ - cmp r2, r0\n\ - bcs _0802314C\n\ - adds r3, r1, 0\n\ -_08023132:\n\ - ldrb r0, [r3]\n\ - adds r0, 0x1\n\ - strb r0, [r3]\n\ - ldrb r2, [r3]\n\ - lsls r0, r2, 2\n\ - adds r0, r4\n\ - ldr r0, [r0]\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - bne _0802314C\n\ - ldrb r0, [r7]\n\ - cmp r2, r0\n\ - bcc _08023132\n\ -_0802314C:\n\ - ldrb r0, [r1]\n\ - ldrb r6, [r6]\n\ - cmp r0, r6\n\ - beq _08023156\n\ - b _08023302\n\ -_08023156:\n\ - mov r1, r8\n\ - mov r2, r12\n\ - str r1, [r2]\n\ - b _08023302\n\ - .align 2, 0\n\ -_08023160: .4byte gHitMarker\n\ -_08023164: .4byte gBank1\n\ -_08023168: .4byte gBitTable\n\ -_0802316C: .4byte gNoOfAllBanks\n\ -_08023170:\n\ - movs r0, 0x80\n\ - ands r0, r2\n\ - movs r5, 0x1\n\ - cmp r0, 0\n\ - beq _0802317C\n\ - movs r5, 0\n\ -_0802317C:\n\ - movs r0, 0x7F\n\ - ands r0, r2\n\ - bl GetBattleBank\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - ldr r1, _080231A4 @ =gSpecialStatuses\n\ - lsls r0, r7, 2\n\ - adds r0, r7\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - bge _080231A8\n\ - ldr r0, [r6]\n\ - adds r0, 0x6\n\ - str r0, [r6]\n\ - b _08023302\n\ - .align 2, 0\n\ -_080231A4: .4byte gSpecialStatuses\n\ -_080231A8:\n\ - adds r0, r7, 0\n\ - movs r1, 0x6\n\ - movs r2, 0x6\n\ - bl sub_8018018\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080231F8\n\ - ldr r2, _080231E8 @ =gActiveBank\n\ - strb r7, [r2]\n\ - ldr r3, _080231EC @ =gAbsentBankFlags\n\ - ldr r4, _080231F0 @ =gBitTable\n\ - ldrb r0, [r2]\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldr r0, [r0]\n\ - ldrb r1, [r3]\n\ - orrs r0, r1\n\ - strb r0, [r3]\n\ - ldr r3, _080231F4 @ =gHitMarker\n\ - ldrb r0, [r2]\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldr r1, [r0]\n\ - lsls r1, 28\n\ - ldr r0, [r3]\n\ - bics r0, r1\n\ - str r0, [r3]\n\ - mov r0, r8\n\ - str r0, [r6]\n\ - b _08023302\n\ - .align 2, 0\n\ -_080231E8: .4byte gActiveBank\n\ -_080231EC: .4byte gAbsentBankFlags\n\ -_080231F0: .4byte gBitTable\n\ -_080231F4: .4byte gHitMarker\n\ -_080231F8:\n\ - ldr r4, _080232A0 @ =gActiveBank\n\ - strb r7, [r4]\n\ - ldr r3, _080232A4 @ =0x02000000\n\ - ldrb r0, [r4]\n\ - ldr r2, _080232A8 @ =0x00016064\n\ - adds r1, r0, r2\n\ - adds r1, r3\n\ - ldr r2, _080232AC @ =gBattlePartyID\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - ldrh r0, [r0]\n\ - strb r0, [r1]\n\ - ldrb r1, [r4]\n\ - movs r0, 0x2\n\ - eors r0, r1\n\ - ldr r1, _080232B0 @ =0x00016068\n\ - adds r0, r1\n\ - adds r0, r3\n\ - ldrb r2, [r0]\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - ldr r1, _080232B4 @ =0x0001606c\n\ - adds r3, r1\n\ - adds r0, r3\n\ - str r0, [sp]\n\ - movs r0, 0\n\ - adds r1, r5, 0\n\ - movs r3, 0\n\ - bl EmitChoosePokemon\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - ldr r0, [r6]\n\ - adds r0, 0x6\n\ - str r0, [r6]\n\ - ldrb r0, [r4]\n\ - bl GetBankIdentity\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0802325A\n\ - ldr r1, _080232B8 @ =gBattleResults\n\ - ldrb r0, [r1, 0x2]\n\ - cmp r0, 0xFE\n\ - bhi _0802325A\n\ - adds r0, 0x1\n\ - strb r0, [r1, 0x2]\n\ -_0802325A:\n\ - ldr r0, _080232BC @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080232C4\n\ - ldr r1, _080232A0 @ =gActiveBank\n\ - movs r0, 0\n\ - strb r0, [r1]\n\ - ldr r0, _080232C0 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _08023302\n\ - adds r4, r1, 0\n\ -_08023276:\n\ - ldrb r0, [r4]\n\ - cmp r0, r7\n\ - beq _0802328A\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - bl EmitLinkStandbyMsg\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ -_0802328A:\n\ - ldrb r0, [r4]\n\ - adds r0, 0x1\n\ - strb r0, [r4]\n\ - ldr r1, _080232C0 @ =gNoOfAllBanks\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bcc _08023276\n\ - b _08023302\n\ - .align 2, 0\n\ -_080232A0: .4byte gActiveBank\n\ -_080232A4: .4byte 0x02000000\n\ -_080232A8: .4byte 0x00016064\n\ -_080232AC: .4byte gBattlePartyID\n\ -_080232B0: .4byte 0x00016068\n\ -_080232B4: .4byte 0x0001606c\n\ -_080232B8: .4byte gBattleResults\n\ -_080232BC: .4byte gBattleTypeFlags\n\ -_080232C0: .4byte gNoOfAllBanks\n\ -_080232C4:\n\ - adds r0, r7, 0\n\ - bl GetBankIdentity\n\ - movs r1, 0x1\n\ - eors r0, r1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl GetBankByPlayerAI\n\ - ldr r4, _08023310 @ =gActiveBank\n\ - strb r0, [r4]\n\ - ldr r0, _08023314 @ =gAbsentBankFlags\n\ - ldrb r1, [r0]\n\ - ldr r2, _08023318 @ =gBitTable\n\ - ldrb r3, [r4]\n\ - lsls r0, r3, 2\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _080232F4\n\ - movs r0, 0x2\n\ - eors r3, r0\n\ - strb r3, [r4]\n\ -_080232F4:\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - bl EmitLinkStandbyMsg\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ -_08023302:\n\ - add sp, 0x4\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\ -_08023310: .4byte gActiveBank\n\ -_08023314: .4byte gAbsentBankFlags\n\ -_08023318: .4byte gBitTable\n\ - .syntax divided"); -} - -static void atk51_switch_handle_order(void) -{ - int i; - if (gBattleExecBuffer) - return; - - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - switch (BSScriptRead8(gBattlescriptCurrInstr + 2)) - { - case 0: - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gBattleBufferB[i][0] == 0x22) - ewram[i + 0x16068] = gBattleBufferB[i][1]; - } - break; - case 1: - if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - sub_8012258(gActiveBank); - break; - case 2: - gBattleCommunication[0] = gBattleBufferB[gActiveBank][1]; - ewram[gActiveBank + 0x16068] = gBattleBufferB[gActiveBank][1]; - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - - ewram[(gActiveBank) * 3 + (0x1606C + 0)] &= 0xF; - ewram[(gActiveBank) * 3 + (0x1606C + 0)] |= (gBattleBufferB[gActiveBank][2] & 0xF0); - ewram[(gActiveBank) * 3 + (0x1606C + 1)] = gBattleBufferB[gActiveBank][3]; - - ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 0)] &= (0xF0); - ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 0)] |= (gBattleBufferB[gActiveBank][2] & 0xF0) >> 4; - ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 2)] = gBattleBufferB[gActiveBank][3]; - } - else - sub_8012258(gActiveBank); - - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 6; - gBattleTextBuff1[2] = gBattleMons[gBankAttacker].species; - gBattleTextBuff1[3] = gBattleMons[gBankAttacker].species >> 8; - gBattleTextBuff1[4] = 0xFF; - - gBattleTextBuff2[0] = 0xFD; - gBattleTextBuff2[1] = 7; - gBattleTextBuff2[2] = gActiveBank; - gBattleTextBuff2[3] = gBattleBufferB[gActiveBank][1]; - gBattleTextBuff2[4] = 0xFF; - break; - } - gBattlescriptCurrInstr += 3; -} - -static void atk52_switch_in_effects(void) -{ - int i; - - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - sub_80157C4(gActiveBank); - gHitMarker &= ~(HITMARKER_FAINTED(gActiveBank)); - gSpecialStatuses[gActiveBank].flag40 = 0; - - if (!(gSideAffecting[GetBankSide(gActiveBank)] & SIDE_STATUS_SPIKES_DAMAGED) && (gSideAffecting[GetBankSide(gActiveBank)] & SIDE_STATUS_SPIKES) - && gBattleMons[gActiveBank].type1 != TYPE_FLYING && gBattleMons[gActiveBank].type2 != TYPE_FLYING && gBattleMons[gActiveBank].ability != ABILITY_LEVITATE) - { - u8 spikesDmg; - - gSideAffecting[GetBankSide(gActiveBank)] |= SIDE_STATUS_SPIKES_DAMAGED; - - spikesDmg = (5 - gSideTimer[GetBankSide(gActiveBank)].spikesAmount) * 2; - gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / (spikesDmg); - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - - BATTLE_STRUCT->scriptingActive = gActiveBank; - b_movescr_stack_push_cursor(); - - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) - gBattlescriptCurrInstr = gUnknown_081D919F; - else if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 1) - gBattlescriptCurrInstr = gUnknown_081D9171; - else - gBattlescriptCurrInstr = gUnknown_081D91CD; - } - else - { - if (gBattleMons[gActiveBank].ability == ABILITY_TRUANT) - { - gDisableStructs[gActiveBank].truantCounter = 1; - } - - if (AbilityBattleEffects(0, gActiveBank, 0, 0, 0) == 0 && ItemBattleEffects(0, gActiveBank, 0) == 0) - { - gSideAffecting[GetBankSide(gActiveBank)] &= ~(SIDE_STATUS_SPIKES_DAMAGED); - - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gTurnOrder[i] == gActiveBank) - gUnknown_02024A76[i] = 0xC; - } - - for (i = 0; i < gNoOfAllBanks; i++) - { - *(HP_ON_SWITCHOUT + GetBankSide(i)) = gBattleMons[i].hp; - } - - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 5) - { - u32 hitmark = gHitMarker >> 0x1C; - gBank1++; - while (1) - { - if (hitmark & gBitTable[gBank1] && !(gAbsentBankFlags & gBitTable[gBank1])) - break; - if (gBank1 >= gNoOfAllBanks) - break; - gBank1++; - } - } - gBattlescriptCurrInstr += 2; - } - } -} - -static void atk53_trainer_slide(void) -{ - if (!BSScriptRead8(gBattlescriptCurrInstr + 1)) - gActiveBank = GetBankByPlayerAI(0); - else - gActiveBank = GetBankByPlayerAI(1); - - EmitTrainerSlide(0); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 2; -} - -static void atk54_effectiveness_sound(void) -{ - gActiveBank = gBankAttacker; - EmitEffectivenessSound(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1)); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 3; -} - -static void atk55_play_sound(void) -{ - gActiveBank = gBankAttacker; - EmitPlaySound(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1)); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 3; -} - -static void atk56_fainting_cry(void) -{ - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - EmitFaintingCry(0); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 2; -} - -static void atk57(void) -{ - gActiveBank = GetBankByPlayerAI(0); - dp01_build_cmdbuf_x37_a(0, gBattleOutcome); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 1; -} - -static void atk58_return_to_ball(void) -{ - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - EmitReturnPokeToBall(0, 1); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 2; -} - -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)); - while (ret == 0xFFFE) - ret = sub_803B7C8(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0); - - if (ret == 0) - { - gBattlescriptCurrInstr = loc2; - } - else if (ret == 0xFFFF) - { - gBattlescriptCurrInstr += 10; - } - else - { - gActiveBank = GetBankByPlayerAI(0); - if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) - GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) //what is else if - { - gActiveBank = GetBankByPlayerAI(2); - if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) - GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret); - } - gBattlescriptCurrInstr = loc1; - } -} - -void sub_8023A80(void) -{ - sub_802BBD4(0x18, 8, 0x1D, 0xD, 0); - InitWindow(&gUnknown_03004210, gUnknown_08400D7A, 0x100, 0x19, 0x9); - sub_8002F44(&gUnknown_03004210); - sub_814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20); -} - -void sub_8023AD8(void) -{ - sub_802BBD4(0x18, 8, 0x1D, 0xD, 1); - DestroyMenuCursor(); -} - -static void atk5A(void) -{ - gActiveBank = 0; - switch (BATTLE_STRUCT->atk5A_StateTracker) - { - case 0: - sub_8023A80(); - BATTLE_STRUCT->atk5A_StateTracker++; - gBattleCommunication[1] = 0; - sub_802BC6C(); - break; - case 1: - if (gMain.newKeys & DPAD_UP && gBattleCommunication[1] != 0) - { - PlaySE(SE_SELECT); - nullsub_6(); - gBattleCommunication[1] = 0; - sub_802BC6C(); - } - if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[1] == 0) - { - PlaySE(SE_SELECT); - nullsub_6(); - gBattleCommunication[1] = 1; - sub_802BC6C(); - } - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if (gBattleCommunication[1] == 0) - { - sub_8023AD8(); - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - BATTLE_STRUCT->atk5A_StateTracker++; - return; - } - goto state_tracker_4; - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - state_tracker_4: - BATTLE_STRUCT->atk5A_StateTracker = 4; - } - break; - case 2: - if (!gPaletteFade.active) - { - sub_809D9F0(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, word_2024E82); - BATTLE_STRUCT->atk5A_StateTracker++; - } - break; - case 3: - if (!gPaletteFade.active && gMain.callback2 == sub_800F808) - { - u8 move_pos = sub_809FA30(); - if (move_pos == 4) - { - BATTLE_STRUCT->atk5A_StateTracker = 4; - } - else - { - u16 move = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MOVE1 + move_pos); - if (IsHMMove2(move)) - { - PrepareStringBattle(0x13F, gActiveBank); - BATTLE_STRUCT->atk5A_StateTracker = 5; - } - else - { - u8 *ptr; - - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - ptr = gBattleTextBuff2; - { - ptr[0] = 0xFD; - ptr[1] = 2; - ptr[2] = move; - ptr[3] = ((move & 0xFF00) >> 8); - ptr += 4; - } - ptr[0] = 0xFF; - RemoveMonPPBonus(&gPlayerParty[BATTLE_STRUCT->expGetterID], move_pos); - SetMonMoveSlot(&gPlayerParty[BATTLE_STRUCT->expGetterID], word_2024E82, 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); - } - 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); - } - } - } - } - break; - case 4: - sub_8023AD8(); - gBattlescriptCurrInstr += 5; - break; - case 5: - if (gBattleExecBuffer == 0) - { - BATTLE_STRUCT->atk5A_StateTracker = 2; - } - break; - } -} - -static void atk5B_80256E0(void) -{ - switch (BATTLE_STRUCT->atk5A_StateTracker) - { - case 0: - sub_8023A80(); - BATTLE_STRUCT->atk5A_StateTracker++; - gBattleCommunication[1] = 0; - sub_802BC6C(); - break; - case 1: - if (gMain.newKeys & DPAD_UP && gBattleCommunication[1] != 0) - { - PlaySE(SE_SELECT); - nullsub_6(); - gBattleCommunication[1] = 0; - sub_802BC6C(); - } - if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[1] == 0) - { - PlaySE(SE_SELECT); - nullsub_6(); - gBattleCommunication[1] = 1; - sub_802BC6C(); - } - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if (gBattleCommunication[1] != 0) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - gBattlescriptCurrInstr += 5; - sub_8023AD8(); - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - sub_8023AD8(); - } - } -} - -static void atk5C_hitanimation(void) -{ - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) - gBattlescriptCurrInstr += 2; - else if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) || !(gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE) || gDisableStructs[gActiveBank].substituteHP == 0) - { - EmitHitAnimation(0); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 2; - } - else - gBattlescriptCurrInstr += 2; -} - -#define MONEY_UNKNOWN ((*(u8*)(0x02017000 + 0x94))) - -#ifdef NONMATCHING -static void atk5D_getmoneyreward(void) -{ - int i = 0; - u8 r5 = 0; - u32 money_to_give; - if (gTrainerBattleOpponent == 0x400) - { - money_to_give = 2 * BATTLE_STRUCT->moneyMultiplier * MONEY_UNKNOWN; - } - else - { - switch(gTrainers[gTrainerBattleOpponent].partyFlags) - { - case 0: - { - const struct PokeTrainerData1 *data = &gTrainers[gTrainerBattleOpponent].party->noItemNoMoves; - r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].lvl; - } - break; - case 2: - { - const struct PokeTrainerData2 *data = &gTrainers[gTrainerBattleOpponent].party->itemNoMoves; - r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].lvl; - } - break; - case 1: - case 3: - { - const struct PokeTrainerData3 *data = &gTrainers[gTrainerBattleOpponent].party->itemMoves; - r5 = data[gTrainers[gTrainerBattleOpponent].partySize - 1].lvl; - } - break; - } - for (; gTrainerMoney[i * 4] != 0xFF && gTrainerMoney[i * 4 + 1] != gTrainers[gTrainerBattleOpponent].trainerClass ; i++) {} - - money_to_give = (r5 << 2) * BATTLE_STRUCT->moneyMultiplier; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - money_to_give = 2 * gTrainerMoney[i * 4 + 1] * money_to_give; - else - money_to_give = 1 * gTrainerMoney[i * 4 + 1] * money_to_give; - } - - sub_80B79B8(&gSaveBlock1.money, money_to_give); - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 1; - gBattleTextBuff1[2] = 4; - gBattleTextBuff1[3] = 5; - gBattleTextBuff1[4] = BYTE0(money_to_give); - gBattleTextBuff1[5] = BYTE1(money_to_give); - gBattleTextBuff1[6] = BYTE2(money_to_give); - gBattleTextBuff1[7] = BYTE3(money_to_give); - gBattleTextBuff1[8] = 0xFF; - - gBattlescriptCurrInstr += 1; -} -#else -__attribute__((naked)) -static void atk5D_getmoneyreward(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - movs r6, 0\n\ - movs r5, 0\n\ - ldr r0, _08024048 @ =gTrainerBattleOpponent\n\ - ldrh r2, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 3\n\ - cmp r2, r1\n\ - bne _08024058\n\ - ldr r0, _0802404C @ =0x02017000\n\ - adds r1, r0, 0\n\ - adds r1, 0x94\n\ - ldrb r2, [r1]\n\ - ldr r1, _08024050 @ =0xfffff056\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r4, r2, 0\n\ - muls r4, r0\n\ - ldr r0, _08024054 @ =gSaveBlock1 + 0x490\n\ - mov r8, r0\n\ - b _08024140\n\ - .align 2, 0\n\ -_08024048: .4byte gTrainerBattleOpponent\n\ -_0802404C: .4byte 0x02017000\n\ -_08024050: .4byte 0xfffff056\n\ -_08024054: .4byte gSaveBlock1 + 0x490\n\ -_08024058:\n\ - ldr r2, _08024074 @ =gTrainers\n\ - ldrh r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r3, r0, 3\n\ - adds r4, r3, r2\n\ - ldrb r1, [r4]\n\ - cmp r1, 0x1\n\ - beq _080240AE\n\ - cmp r1, 0x1\n\ - bgt _08024078\n\ - cmp r1, 0\n\ - beq _08024082\n\ - b _080240C4\n\ - .align 2, 0\n\ -_08024074: .4byte gTrainers\n\ -_08024078:\n\ - cmp r1, 0x2\n\ - beq _08024098\n\ - cmp r1, 0x3\n\ - beq _080240AE\n\ - b _080240C4\n\ -_08024082:\n\ - adds r0, r2, 0\n\ - adds r0, 0x24\n\ - adds r0, r3, r0\n\ - ldr r1, [r0]\n\ - adds r0, r4, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - subs r0, 0x8\n\ - b _080240C2\n\ -_08024098:\n\ - adds r0, r2, 0\n\ - adds r0, 0x24\n\ - adds r0, r3, r0\n\ - ldr r1, [r0]\n\ - adds r0, r4, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - subs r0, 0x8\n\ - b _080240C2\n\ -_080240AE:\n\ - adds r0, r2, 0\n\ - adds r0, 0x24\n\ - adds r0, r3, r0\n\ - ldr r1, [r0]\n\ - adds r0, r4, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - lsls r0, 4\n\ - adds r0, r1\n\ - subs r0, 0x10\n\ -_080240C2:\n\ - ldrb r5, [r0, 0x2]\n\ -_080240C4:\n\ - ldr r0, _08024120 @ =gTrainerMoney\n\ - lsls r1, r6, 2\n\ - adds r3, r1, r0\n\ - ldrb r1, [r3]\n\ - mov r12, r0\n\ - lsls r4, r5, 2\n\ - ldr r5, _08024124 @ =0x02000000\n\ - ldr r7, _08024128 @ =gBattleTypeFlags\n\ - ldr r0, _0802412C @ =gSaveBlock1 + 0x490\n\ - mov r8, r0\n\ - cmp r1, 0xFF\n\ - beq _080240FE\n\ - ldr r2, _08024130 @ =gTrainers\n\ - ldr r0, _08024134 @ =gTrainerBattleOpponent\n\ - ldrh r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 3\n\ - adds r0, r2\n\ - ldrb r2, [r0, 0x1]\n\ - adds r1, r3, 0\n\ -_080240EE:\n\ - ldrb r0, [r1]\n\ - cmp r0, r2\n\ - beq _080240FE\n\ - adds r1, 0x4\n\ - adds r6, 0x1\n\ - ldrb r0, [r1]\n\ - cmp r0, 0xFF\n\ - bne _080240EE\n\ -_080240FE:\n\ - ldr r1, _08024138 @ =0x00016056\n\ - adds r0, r5, r1\n\ - ldrb r0, [r0]\n\ - adds r3, r4, 0\n\ - muls r3, r0\n\ - lsls r0, r6, 2\n\ - add r0, r12\n\ - ldrb r2, [r0, 0x1]\n\ - ldrh r1, [r7]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0802413C\n\ - lsls r0, r2, 1\n\ - adds r4, r3, 0\n\ - muls r4, r0\n\ - b _08024140\n\ - .align 2, 0\n\ -_08024120: .4byte gTrainerMoney\n\ -_08024124: .4byte 0x02000000\n\ -_08024128: .4byte gBattleTypeFlags\n\ -_0802412C: .4byte gSaveBlock1 + 0x490\n\ -_08024130: .4byte gTrainers\n\ -_08024134: .4byte gTrainerBattleOpponent\n\ -_08024138: .4byte 0x00016056\n\ -_0802413C:\n\ - adds r4, r3, 0\n\ - muls r4, r2\n\ -_08024140:\n\ - mov r0, r8\n\ - adds r1, r4, 0\n\ - bl sub_80B79B8\n\ - ldr r1, _0802418C @ =gBattleTextBuff1\n\ - movs r0, 0xFD\n\ - strb r0, [r1]\n\ - movs r0, 0x1\n\ - strb r0, [r1, 0x1]\n\ - movs r0, 0x4\n\ - strb r0, [r1, 0x2]\n\ - movs r0, 0x5\n\ - strb r0, [r1, 0x3]\n\ - strb r4, [r1, 0x4]\n\ - movs r0, 0xFF\n\ - lsls r0, 8\n\ - ands r0, r4\n\ - lsrs r0, 8\n\ - strb r0, [r1, 0x5]\n\ - movs r0, 0xFF\n\ - lsls r0, 16\n\ - ands r0, r4\n\ - lsrs r0, 16\n\ - strb r0, [r1, 0x6]\n\ - lsrs r0, r4, 24\n\ - strb r0, [r1, 0x7]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x8]\n\ - ldr r1, _08024190 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x1\n\ - str r0, [r1]\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0802418C: .4byte gBattleTextBuff1\n\ -_08024190: .4byte gBattlescriptCurrInstr\n\ - .syntax divided"); -} -#endif //NONMATCHING - -static void atk5E_8025A70(void) -{ - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - switch (gBattleCommunication[0]) - { - case 0: - EmitGetAttributes(0, REQUEST_ALL_BATTLE, 0); - MarkBufferBankForExecution(gActiveBank); - gBattleCommunication[0]++; - break; - case 1: - if (gBattleExecBuffer == 0) - { - int i; - struct BattlePokemon* bufferPoke = (struct BattlePokemon*) &gBattleBufferB[gActiveBank][4]; - for (i = 0; i < 4; i++) - { - gBattleMons[gActiveBank].moves[i] = bufferPoke->moves[i]; - gBattleMons[gActiveBank].pp[i] = bufferPoke->pp[i]; - } - gBattlescriptCurrInstr += 2; - } - break; - } -} - -static void atk5F_8025B24(void) -{ - gActiveBank = gBankAttacker; - gBankAttacker = gBankTarget; - gBankTarget = gActiveBank; - //what is xor... - if (gHitMarker & HITMARKER_PURSUIT_TRAP) - gHitMarker &= ~(HITMARKER_PURSUIT_TRAP); - else - gHitMarker |= HITMARKER_PURSUIT_TRAP; - gBattlescriptCurrInstr++; -} - -static void atk60_increment_gamestat(void) -{ - if (GetBankSide(gBankAttacker) == 0) - { - IncrementGameStat(BSScriptRead8(gBattlescriptCurrInstr + 1)); - } - gBattlescriptCurrInstr += 2; -} - -struct hp_status -{ - u16 hp; - u32 status; -}; - -static void atk61_8025BA4(void) -{ - int i; - struct Pokemon* party; - struct hp_status hpStatus[6]; - if (gBattleExecBuffer) - return; - - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - if (GetBankSide(gActiveBank) == 0) - party = gPlayerParty; - else - party = gEnemyParty; - - for (i = 0; i < 6; i++) - { - if (GetMonData(&party[i], MON_DATA_SPECIES2) == 0 || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) - { - hpStatus[i].hp = 0xFFFF; - hpStatus[i].status = 0; - } - else - { - hpStatus[i].hp = GetMonData(&party[i], MON_DATA_HP); - hpStatus[i].status = GetMonData(&party[i], MON_DATA_STATUS); - } - } - dp01_build_cmdbuf_x30_TODO(0, (u8*)(hpStatus), 1); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 2; -} - -static void atk62_08025C6C(void) -{ - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - dp01_build_cmdbuf_x31_31_31_31(0); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 2; -} - -static void atk63_jumptorandomattack(void) -{ - if (BSScriptRead8(gBattlescriptCurrInstr + 1)) - gCurrentMove = gRandomMove; - else - gUnknown_02024BE8 = gCurrentMove = gRandomMove; - gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; -} - -static void atk64_statusanimation(void) -{ - if (gBattleExecBuffer == 0) - { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) - { - EmitStatusAnimation(0, 0, gBattleMons[gActiveBank].status1); - MarkBufferBankForExecution(gActiveBank); - } - gBattlescriptCurrInstr += 2; - } -} - -static void atk65_status2animation(void) -{ - if (gBattleExecBuffer == 0) - { - u32 possible_to_anim; - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - possible_to_anim = BSScriptRead32(gBattlescriptCurrInstr + 2); - if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) - { - EmitStatusAnimation(0, 1, gBattleMons[gActiveBank].status2 & possible_to_anim); - MarkBufferBankForExecution(gActiveBank); - } - gBattlescriptCurrInstr += 6; - } -} - -static void atk66_chosenstatusanimation(void) -{ - if (gBattleExecBuffer == 0) - { - u32 status; - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - status = BSScriptRead32(gBattlescriptCurrInstr + 3); - if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) - { - EmitStatusAnimation(0, BSScriptRead8(gBattlescriptCurrInstr + 2), status); - MarkBufferBankForExecution(gActiveBank); - } - gBattlescriptCurrInstr += 7; - } -} - -static void atk67_8025ECC(void) -{ - switch (gBattleCommunication[0]) - { - case 0: - sub_8023A80(); - gBattleCommunication[0]++; - gBattleCommunication[1] = 0; - sub_802BC6C(); - break; - case 1: - if (gMain.newKeys & DPAD_UP && gBattleCommunication[1] != 0) - { - PlaySE(SE_SELECT); - nullsub_6(); - gBattleCommunication[1] = 0; - sub_802BC6C(); - } - if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[1] == 0) - { - PlaySE(SE_SELECT); - nullsub_6(); - gBattleCommunication[1] = 1; - sub_802BC6C(); - } - if (gMain.newKeys & B_BUTTON) - { - gBattleCommunication[1] = 1; - PlaySE(SE_SELECT); - sub_8023AD8(); - gBattlescriptCurrInstr++; - } - else if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - sub_8023AD8(); - gBattlescriptCurrInstr++; - } - break; - } -} - -static void atk68_80246A0(void) -{ - int i; - for (i = 0; i < gNoOfAllBanks; i++) - { - gUnknown_02024A76[i] = 0xC; - } - gBattlescriptCurrInstr++; -} - -static void atk69_dmg_adjustment2(void) //literally a copy of atk07 except theres no rand dmg modifier... -{ - u8 hold_effect, quality; - if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) - hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; - else - { - hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); - quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); - } - - gStringBank = gBankTarget; - - if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality) - { - RecordItemBattle(gBankTarget, hold_effect); - gSpecialStatuses[gBankTarget].focusBanded = 1; - } - if (gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE) - goto END; - if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBankTarget].endured - && !gSpecialStatuses[gBankTarget].focusBanded) - goto END; - if (gBattleMons[gBankTarget].hp > gBattleMoveDamage) - goto END; - - gBattleMoveDamage = gBattleMons[gBankTarget].hp - 1; - - if (gProtectStructs[gBankTarget].endured) - { - gBattleMoveFlags |= MOVESTATUS_ENDURED; - goto END; - } - if (gSpecialStatuses[gBankTarget].focusBanded) - { - gBattleMoveFlags |= MOVESTATUS_HUNGON; - gLastUsedItem = gBattleMons[gBankTarget].item; - } - - END: - gBattlescriptCurrInstr++; -} - -void atk6A_removeitem(void) -{ - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - #define USED_HELD_ITEMS(bank) (*(u16 *)&ewram[0x160CC + 2 * (bank)]) - USED_HELD_ITEMS(gActiveBank) = gBattleMons[gActiveBank].item; - - gBattleMons[gActiveBank].item = 0; - EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 2; -} - -static void atk6B_atknameinbuff1(void) -{ - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 7; - gBattleTextBuff1[2] = gBankAttacker; - gBattleTextBuff1[3] = gBattlePartyID[gBankAttacker]; - gBattleTextBuff1[4] = 0xFF; - gBattlescriptCurrInstr++; -} - -#ifdef NONMATCHING -static void atk6C_lvlbox_display(void) -{ - u8 r1 = 0; - u8 r7 = 0; - switch (BATTLE_STRUCT->atk6C_statetracker) - { - case 0: - sub_802BBD4(0xB, 0, 0x1D, 0x7, r1); - StringCopy(gStringVar4, gUnknown_08400D9F); - - } -} - -#else -__attribute__((naked)) -static void atk6C_lvlbox_display(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\ - movs r1, 0\n\ - movs r7, 0\n\ - ldr r0, _08024928 @ =0x02000000\n\ - mov r10, r0\n\ - ldr r4, _0802492C @ =0x0001609c\n\ - add r4, r10\n\ - ldrb r0, [r4]\n\ - cmp r0, 0x1\n\ - bne _0802491C\n\ - b _08024AF4\n\ -_0802491C:\n\ - cmp r0, 0x1\n\ - bgt _08024930\n\ - cmp r0, 0\n\ - beq _0802493E\n\ - b _08024C38\n\ - .align 2, 0\n\ -_08024928: .4byte 0x02000000\n\ -_0802492C: .4byte 0x0001609c\n\ -_08024930:\n\ - cmp r0, 0x2\n\ - bne _08024936\n\ - b _08024C04\n\ -_08024936:\n\ - cmp r0, 0x3\n\ - bne _0802493C\n\ - b _08024C30\n\ -_0802493C:\n\ - b _08024C38\n\ -_0802493E:\n\ - str r1, [sp]\n\ - movs r0, 0xB\n\ - movs r1, 0\n\ - movs r2, 0x1D\n\ - movs r3, 0x7\n\ - bl sub_802BBD4\n\ - ldr r0, _0802499C @ =gStringVar4\n\ - ldr r1, _080249A0 @ =gUnknown_08400D9F\n\ - bl StringCopy\n\ - adds r5, r0, 0\n\ - movs r1, 0\n\ - mov r8, r1\n\ -_0802495A:\n\ - movs r2, 0\n\ - mov r9, r2\n\ - ldr r0, _080249A4 @ =gUnknown_0840165C\n\ - mov r1, r8\n\ - lsls r4, r1, 2\n\ - adds r0, r4, r0\n\ - ldr r1, [r0]\n\ - adds r0, r5, 0\n\ - bl StringAppend\n\ - adds r5, r0, 0\n\ - ldr r0, _080249A8 @ =0x02000000\n\ - ldr r2, _080249AC @ =0x00016018\n\ - adds r0, r2\n\ - ldrb r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _080249B0 @ =gPlayerParty\n\ - adds r0, r1\n\ - ldr r1, _080249B4 @ =gLevelUpStatBoxStats\n\ - add r1, r8\n\ - ldrb r1, [r1]\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r1, r0, 16\n\ - mov r0, r8\n\ - cmp r0, 0x5\n\ - bhi _08024A1A\n\ - ldr r0, _080249B8 @ =_080249BC\n\ - adds r0, r4, r0\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_0802499C: .4byte gStringVar4\n\ -_080249A0: .4byte gUnknown_08400D9F\n\ -_080249A4: .4byte gUnknown_0840165C\n\ -_080249A8: .4byte 0x02000000\n\ -_080249AC: .4byte 0x00016018\n\ -_080249B0: .4byte gPlayerParty\n\ -_080249B4: .4byte gLevelUpStatBoxStats\n\ -_080249B8: .4byte _080249BC\n\ - .align 2, 0\n\ -_080249BC:\n\ - .4byte _080249D4\n\ - .4byte _080249E0\n\ - .4byte _080249EC\n\ - .4byte _080249F8\n\ - .4byte _08024A04\n\ - .4byte _08024A10\n\ -_080249D4:\n\ - ldr r0, _080249DC @ =0x02017180\n\ - ldrh r0, [r0]\n\ - b _08024A14\n\ - .align 2, 0\n\ -_080249DC: .4byte 0x02017180\n\ -_080249E0:\n\ - ldr r0, _080249E8 @ =0x02017180\n\ - ldrh r0, [r0, 0x8]\n\ - b _08024A14\n\ - .align 2, 0\n\ -_080249E8: .4byte 0x02017180\n\ -_080249EC:\n\ - ldr r0, _080249F4 @ =0x02017180\n\ - ldrh r0, [r0, 0x2]\n\ - b _08024A14\n\ - .align 2, 0\n\ -_080249F4: .4byte 0x02017180\n\ -_080249F8:\n\ - ldr r0, _08024A00 @ =0x02017180\n\ - ldrh r0, [r0, 0xA]\n\ - b _08024A14\n\ - .align 2, 0\n\ -_08024A00: .4byte 0x02017180\n\ -_08024A04:\n\ - ldr r0, _08024A0C @ =0x02017180\n\ - ldrh r0, [r0, 0x4]\n\ - b _08024A14\n\ - .align 2, 0\n\ -_08024A0C: .4byte 0x02017180\n\ -_08024A10:\n\ - ldr r0, _08024A54 @ =0x02017180\n\ - ldrh r0, [r0, 0x6]\n\ -_08024A14:\n\ - subs r0, r1, r0\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ -_08024A1A:\n\ - lsls r0, r7, 16\n\ - asrs r0, 16\n\ - cmp r0, 0\n\ - bge _08024A2C\n\ - negs r0, r0\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ - movs r1, 0x1\n\ - add r9, r1\n\ -_08024A2C:\n\ - movs r0, 0xFC\n\ - strb r0, [r5]\n\ - movs r0, 0x13\n\ - strb r0, [r5, 0x1]\n\ - movs r1, 0x1\n\ - mov r2, r8\n\ - ands r1, r2\n\ - lsls r0, r1, 3\n\ - adds r0, r1\n\ - adds r0, 0x5\n\ - lsls r0, 3\n\ - adds r0, 0x6\n\ - strb r0, [r5, 0x2]\n\ - adds r5, 0x3\n\ - mov r0, r9\n\ - cmp r0, 0\n\ - beq _08024A5C\n\ - ldr r1, _08024A58 @ =gUnknown_08400DAC\n\ - b _08024A5E\n\ - .align 2, 0\n\ -_08024A54: .4byte 0x02017180\n\ -_08024A58: .4byte gUnknown_08400DAC\n\ -_08024A5C:\n\ - ldr r1, _08024AA4 @ =gUnknown_08400DAA\n\ -_08024A5E:\n\ - adds r0, r5, 0\n\ - bl StringCopy\n\ - adds r5, r0, 0\n\ - movs r6, 0xFC\n\ - strb r6, [r5]\n\ - movs r4, 0x14\n\ - strb r4, [r5, 0x1]\n\ - movs r0, 0x6\n\ - strb r0, [r5, 0x2]\n\ - adds r5, 0x3\n\ - lsls r1, r7, 16\n\ - asrs r1, 16\n\ - adds r0, r5, 0\n\ - movs r2, 0x1\n\ - movs r3, 0x2\n\ - bl ConvertIntToDecimalStringN\n\ - adds r5, r0, 0\n\ - strb r6, [r5]\n\ - strb r4, [r5, 0x1]\n\ - movs r0, 0\n\ - strb r0, [r5, 0x2]\n\ - adds r5, 0x3\n\ - movs r0, 0x1\n\ - mov r1, r8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08024AA8\n\ - movs r0, 0xFE\n\ - strb r0, [r5]\n\ - movs r0, 0xFF\n\ - strb r0, [r5, 0x1]\n\ - adds r5, 0x1\n\ - b _08024AB8\n\ - .align 2, 0\n\ -_08024AA4: .4byte gUnknown_08400DAA\n\ -_08024AA8:\n\ - strb r6, [r5]\n\ - movs r0, 0x11\n\ - strb r0, [r5, 0x1]\n\ - movs r0, 0x8\n\ - strb r0, [r5, 0x2]\n\ - adds r5, 0x3\n\ - movs r0, 0xFF\n\ - strb r0, [r5]\n\ -_08024AB8:\n\ - movs r2, 0x1\n\ - add r8, r2\n\ - mov r0, r8\n\ - cmp r0, 0x5\n\ - bgt _08024AC4\n\ - b _0802495A\n\ -_08024AC4:\n\ - ldr r4, _08024AE4 @ =gUnknown_03004210\n\ - ldr r1, _08024AE8 @ =gStringVar4\n\ - adds r2, 0xFF\n\ - movs r0, 0x1\n\ - str r0, [sp]\n\ - adds r0, r4, 0\n\ - movs r3, 0xC\n\ - bl InitWindow\n\ - adds r0, r4, 0\n\ - bl sub_8002F44\n\ - ldr r1, _08024AEC @ =0x02000000\n\ - ldr r2, _08024AF0 @ =0x0001609c\n\ - adds r1, r2\n\ - b _08024BEA\n\ - .align 2, 0\n\ -_08024AE4: .4byte gUnknown_03004210\n\ -_08024AE8: .4byte gStringVar4\n\ -_08024AEC: .4byte 0x02000000\n\ -_08024AF0: .4byte 0x0001609c\n\ -_08024AF4:\n\ - ldr r0, _08024B94 @ =gMain\n\ - ldrh r0, [r0, 0x2E]\n\ - cmp r0, 0\n\ - bne _08024AFE\n\ - b _08024C38\n\ -_08024AFE:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - ldr r0, _08024B98 @ =gStringVar4\n\ - ldr r1, _08024B9C @ =gUnknown_08400D9F\n\ - bl StringCopy\n\ - adds r5, r0, 0\n\ - movs r0, 0\n\ - mov r8, r0\n\ - mov r9, r0\n\ - movs r6, 0xFC\n\ - movs r7, 0x14\n\ - ldr r1, _08024BA0 @ =0x00016018\n\ - add r10, r1\n\ -_08024B1C:\n\ - ldr r1, _08024BA4 @ =gUnknown_0840165C\n\ - mov r2, r8\n\ - lsls r0, r2, 2\n\ - adds r0, r1\n\ - ldr r1, [r0]\n\ - adds r0, r5, 0\n\ - bl StringAppend\n\ - adds r5, r0, 0\n\ - mov r0, r10\n\ - ldrb r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _08024BA8 @ =gPlayerParty\n\ - adds r0, r1\n\ - ldr r1, _08024BAC @ =gLevelUpStatBoxStats\n\ - add r1, r8\n\ - ldrb r1, [r1]\n\ - bl GetMonData\n\ - adds r1, r0, 0\n\ - strb r6, [r5]\n\ - movs r0, 0x13\n\ - strb r0, [r5, 0x1]\n\ - movs r4, 0x1\n\ - mov r2, r8\n\ - ands r4, r2\n\ - lsls r0, r4, 3\n\ - adds r0, r4\n\ - adds r0, 0x5\n\ - lsls r0, 3\n\ - adds r0, 0x6\n\ - strb r0, [r5, 0x2]\n\ - adds r5, 0x3\n\ - strb r6, [r5]\n\ - strb r7, [r5, 0x1]\n\ - movs r0, 0x6\n\ - strb r0, [r5, 0x2]\n\ - adds r5, 0x3\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - adds r0, r5, 0\n\ - movs r2, 0x1\n\ - movs r3, 0x3\n\ - bl ConvertIntToDecimalStringN\n\ - adds r5, r0, 0\n\ - strb r6, [r5]\n\ - strb r7, [r5, 0x1]\n\ - mov r0, r9\n\ - strb r0, [r5, 0x2]\n\ - adds r5, 0x3\n\ - cmp r4, 0\n\ - beq _08024BB0\n\ - movs r0, 0xFE\n\ - strb r0, [r5]\n\ - movs r0, 0xFF\n\ - strb r0, [r5, 0x1]\n\ - adds r5, 0x1\n\ - b _08024BC0\n\ - .align 2, 0\n\ -_08024B94: .4byte gMain\n\ -_08024B98: .4byte gStringVar4\n\ -_08024B9C: .4byte gUnknown_08400D9F\n\ -_08024BA0: .4byte 0x00016018\n\ -_08024BA4: .4byte gUnknown_0840165C\n\ -_08024BA8: .4byte gPlayerParty\n\ -_08024BAC: .4byte gLevelUpStatBoxStats\n\ -_08024BB0:\n\ - strb r6, [r5]\n\ - movs r0, 0x11\n\ - strb r0, [r5, 0x1]\n\ - movs r0, 0x8\n\ - strb r0, [r5, 0x2]\n\ - adds r5, 0x3\n\ - movs r0, 0xFF\n\ - strb r0, [r5]\n\ -_08024BC0:\n\ - movs r1, 0x1\n\ - add r8, r1\n\ - mov r2, r8\n\ - cmp r2, 0x5\n\ - ble _08024B1C\n\ - ldr r4, _08024BF4 @ =gUnknown_03004210\n\ - ldr r1, _08024BF8 @ =gStringVar4\n\ - movs r2, 0x80\n\ - lsls r2, 1\n\ - movs r0, 0x1\n\ - str r0, [sp]\n\ - adds r0, r4, 0\n\ - movs r3, 0xC\n\ - bl InitWindow\n\ - adds r0, r4, 0\n\ - bl sub_8002F44\n\ - ldr r1, _08024BFC @ =0x02000000\n\ - ldr r0, _08024C00 @ =0x0001609c\n\ - adds r1, r0\n\ -_08024BEA:\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - b _08024C38\n\ - .align 2, 0\n\ -_08024BF4: .4byte gUnknown_03004210\n\ -_08024BF8: .4byte gStringVar4\n\ -_08024BFC: .4byte 0x02000000\n\ -_08024C00: .4byte 0x0001609c\n\ -_08024C04:\n\ - ldr r0, _08024C2C @ =gMain\n\ - ldrh r0, [r0, 0x2E]\n\ - cmp r0, 0\n\ - beq _08024C38\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x1\n\ - str r0, [sp]\n\ - movs r0, 0xB\n\ - movs r1, 0\n\ - movs r2, 0x1D\n\ - movs r3, 0x7\n\ - bl sub_802BBD4\n\ - ldrb r0, [r4]\n\ - adds r0, 0x1\n\ - strb r0, [r4]\n\ - b _08024C38\n\ - .align 2, 0\n\ -_08024C2C: .4byte gMain\n\ -_08024C30:\n\ - ldr r1, _08024C48 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x1\n\ - str r0, [r1]\n\ -_08024C38:\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\ -_08024C48: .4byte gBattlescriptCurrInstr\n\ - .syntax divided"); -} - -#endif - -static void atk6D_set_sentpokes_values(void) -{ - sub_80156DC(); - gBattlescriptCurrInstr++; -} - -static void atk6E_set_atk_to_player0(void) -{ - gBankAttacker = GetBankByPlayerAI(0); - gBattlescriptCurrInstr++; -} - -static void atk6F_set_visible(void) -{ - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - EmitSpriteInvisibility(0, 0); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 2; -} - -static void atk70_record_ability(void) -{ - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - RecordAbilityBattle(gActiveBank, gLastUsedAbility); - gBattlescriptCurrInstr += 1; //buggy, should be += 2, one byte for command, one byte for argument... -} - -void sub_8024CEC(void) -{ - gBattleTextBuff2[0] = 0xFD; - gBattleTextBuff2[1] = 2; - gBattleTextBuff2[2] = (word_2024E82); - gBattleTextBuff2[3] = uBYTE1_16(word_2024E82); - gBattleTextBuff2[4] = 0xFF; -} - -static void atk71_buffer_move_to_learn(void) -{ - sub_8024CEC(); - gBattlescriptCurrInstr++; -} - -static void atk72_jump_if_can_run_frombattle(void) -{ - if (sub_8014AB8(gBank1)) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - gBattlescriptCurrInstr += 5; -} - -static void atk73_hp_thresholds(void) -{ - u8 opposing_bank; - s32 result; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - opposing_bank = gActiveBank ^ 1; - - result = gBattleMons[opposing_bank].hp * 100 / gBattleMons[opposing_bank].maxHP; - if (result == 0) - result = 1; - - if (result > 69 || !gBattleMons[opposing_bank].hp) - BATTLE_STRUCT->hpScale = 0; - else if (result > 39) - BATTLE_STRUCT->hpScale = 1; - else if (result > 9) - BATTLE_STRUCT->hpScale = 2; - else - BATTLE_STRUCT->hpScale = 3; - } - - gBattlescriptCurrInstr += 2; -} - -static void atk74_hp_thresholds2(void) -{ - u8 opposing_bank; - u8 hp_switchout; - s32 result; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - opposing_bank = gActiveBank ^ 1; - hp_switchout = ewram[2 * GetBankSide(opposing_bank) + 0x160bc]; //BATTLE_STRUCT->HP_OnSwitchout[GetBankSide(opposing_bank)]; - result = (hp_switchout - gBattleMons[opposing_bank].hp) * 100 / hp_switchout; - - if (gBattleMons[opposing_bank].hp >= hp_switchout) - BATTLE_STRUCT->hpScale = 0; - else if (result <= 29) - BATTLE_STRUCT->hpScale = 1; - else if (result <= 69) - BATTLE_STRUCT->hpScale = 2; - else - BATTLE_STRUCT->hpScale = 3; - } - - gBattlescriptCurrInstr += 2; -} - -static void atk75_8026A58(void) -{ - gBankInMenu = gBankAttacker; - sub_803E1B0(&gEnemyParty[gBattlePartyID[gBankAttacker]], gLastUsedItem, gBattlePartyID[gBankAttacker], 0, 1); - gBattlescriptCurrInstr += 1; -} - -static void atk76_various(void) -{ - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - switch (BSScriptRead8(gBattlescriptCurrInstr + 2)) - { - case 0: - CancelMultiTurnMoves(gActiveBank); - break; - case 1: - { - u8 side; - gBankAttacker = gBankTarget; - side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimer[side].followmeTimer && gBattleMons[gSideTimer[side].followmeTarget].hp) - gBankTarget = gSideTimer[side].followmeTarget; - else - gBankTarget = gActiveBank; - } - break; - case 2: - gBattleCommunication[0] = CanRunFromBattle(); - break; - case 3: - gBankTarget = sub_801B5C0(gCurrentMove, 0); - break; - case 4: - if (gHitMarker & HITMARKER_FAINTED(gActiveBank)) - gBattleCommunication[0] = 1; - else - gBattleCommunication[0] = 0; - break; - case 5: - gSpecialStatuses[gActiveBank].intimidatedPoke = 0; - gSpecialStatuses[gActiveBank].traced = 0; - break; - case 6: - { - int i; - u16* choiced_move; - if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID) - goto ACTIVE_0; - if (gBattlePartyID[2] != BATTLE_STRUCT->expGetterID) - break; - if (gBattlePartyID[0] == gBattlePartyID[2]) - { - ACTIVE_0: - gActiveBank = 0; - } - else - gActiveBank = 2; - - choiced_move = (u16*)(&ewram[gActiveBank * 2 + 0x160e8]); - for (i = 0; i < 4; i++) - { - if (gBattleMons[gActiveBank].moves[i] == *choiced_move) - break; - } - if (i == 4) - *choiced_move = 0; - } - break; - } - - gBattlescriptCurrInstr += 3; -} - -static void atk77_setprotect(void) //protect and endure -{ - bool8 not_last_turn = 1; - u16 last_move = gUnknown_02024C4C[gBankAttacker]; - - if (last_move != MOVE_PROTECT && last_move != MOVE_DETECT && last_move != MOVE_ENDURE) - gDisableStructs[gBankAttacker].protectUses = 0; - if (gCurrentMoveTurn == (gNoOfAllBanks - 1)) - not_last_turn = 0; - - if (sProtectSuccessRates[gDisableStructs[gBankAttacker].protectUses] > Random() && not_last_turn) - { - if (gBattleMoves[gCurrentMove].effect == EFFECT_PROTECT) - { - gProtectStructs[gBankAttacker].protected = 1; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - } - if (gBattleMoves[gCurrentMove].effect == EFFECT_ENDURE) //what is else if - { - gProtectStructs[gBankAttacker].endured = 1; - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - } - gDisableStructs[gBankAttacker].protectUses++; - } - else - { - gDisableStructs[gBankAttacker].protectUses = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - gBattleMoveFlags |= MOVESTATUS_MISSED; - } - - gBattlescriptCurrInstr++; -} - -static void atk78_faintifabilitynotdamp(void) -{ - if (gBattleExecBuffer) - return; - - for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++) - { - if (gBattleMons[gBankTarget].ability == ABILITY_DAMP) - break; - } - - if (gBankTarget == gNoOfAllBanks) - { - gActiveBank = gBankAttacker; - gBattleMoveDamage = gBattleMons[gActiveBank].hp; - EmitHealthBarUpdate(0, 0x7FFF); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr++; - - for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++) - { - if (gBankTarget == gBankAttacker) - continue; - if (!(gAbsentBankFlags & gBitTable[gBankTarget])) - break; - } - } - else - { - gLastUsedAbility = ABILITY_DAMP; - RecordAbilityBattle(gBankTarget, gBattleMons[gBankTarget].ability); - gBattlescriptCurrInstr = gUnknown_081D9834; - } -} - -static void atk79_setatkhptozero(void) -{ - if (gBattleExecBuffer) - return; - - gActiveBank = gBankAttacker; - gBattleMons[gActiveBank].hp = 0; - EmitSetAttributes(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp); - MarkBufferBankForExecution(gActiveBank); - - gBattlescriptCurrInstr++; -} - -static void atk7A_jumpwhiletargetvalid(void) //used by intimidate to loop through all targets -{ - u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - for (gBankTarget++; ; gBankTarget++) - { - if (gBankTarget == gBankAttacker) - continue; - if (!(gAbsentBankFlags & gBitTable[gBankTarget])) - break; - } - - if (gBankTarget >= gNoOfAllBanks) - gBattlescriptCurrInstr += 5; - else - gBattlescriptCurrInstr = jump_loc; - } - else - gBattlescriptCurrInstr += 5; -} - -static void atk7B_healhalfHP_if_possible(void) -{ - u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - - if (BSScriptRead8(gBattlescriptCurrInstr + 5) == 1) - gBankTarget = gBankAttacker; - - gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 2; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMoveDamage *= -1; - - if (gBattleMons[gBankTarget].hp == gBattleMons[gBankTarget].maxHP) - gBattlescriptCurrInstr = fail_loc; - else - gBattlescriptCurrInstr += 6; -} - -static void atk7C_8025508(void) -{ - u16 r7 = ewram[gBankAttacker * 2 + 0x160ac] | (ewram[gBankAttacker * 2 + 0x160ad] << 8); - u16 r6 = ewram[gBankAttacker * 4 + 0x16100] | (ewram[gBankAttacker * 4 + 0x16101] << 8); - u16 r5 = ewram[gBankAttacker * 4 + 0x16102] | (ewram[gBankAttacker * 4 + 0x16103] << 8); - - if (r7 !=0 && r7 != 0xFFFF) - { - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); - gCurrentMove = r7; - gBankTarget = sub_801B5C0(gCurrentMove, 0); - gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; - } - else if (r6 != 0 && r5 != 0 && r6 != 0xFFFF && r5 != 0xFFFF) - { - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); - if (Random() & 1) - gCurrentMove = r6; - else - gCurrentMove = r5; - gBankTarget = sub_801B5C0(gCurrentMove, 0); - gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; - } - else if (r6 != 0 && r6 != 0xFFFF) - { - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); - gCurrentMove = r6; - gBankTarget = sub_801B5C0(gCurrentMove, 0); - gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; - } - else if (r5 != 0 && r5 != 0xFFFF) - { - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); - gCurrentMove = r5; - gBankTarget = sub_801B5C0(gCurrentMove, 0); - gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; - } - else - { - gSpecialStatuses[gBankAttacker].flag20 = 1; - gBattlescriptCurrInstr++; - } -} - -static void atk7D_set_rain(void) -{ - if (gBattleWeather & WEATHER_RAIN_ANY) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - } - else - { - gBattleWeather = WEATHER_RAIN_TEMPORARY; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - gWishFutureKnock.weatherDuration = 5; - } - gBattlescriptCurrInstr++; -} - -static void atk7E_setreflect(void) -{ - if (gSideAffecting[GetBankIdentity(gBankAttacker) & 1] & SIDE_STATUS_REFLECT) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - } - else - { - gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_REFLECT; - gSideTimer[GetBankIdentity(gBankAttacker) & 1].reflectTimer = 5; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMons(1) == 2) - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - } - gBattlescriptCurrInstr++; -} - -static void atk7F_setseeded(void) -{ - if (gBattleMoveFlags & MOVESTATUS_NOEFFECT || gStatuses3[gBankTarget] & STATUS3_LEECHSEED) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - } - else if (gBattleMons[gBankTarget].type1 == TYPE_GRASS || gBattleMons[gBankTarget].type2 == TYPE_GRASS) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - } - else - { - gStatuses3[gBankTarget] |= gBankAttacker; - gStatuses3[gBankTarget] |= STATUS3_LEECHSEED; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - } - - gBattlescriptCurrInstr++; -} - -static void atk80_manipulatedamage(void) -{ - switch (BSScriptRead8(gBattlescriptCurrInstr + 1)) - { - case 0: - gBattleMoveDamage *= -1; - break; - case 1: - gBattleMoveDamage /= 2; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - if ((gBattleMons[gBankTarget].maxHP / 2) < gBattleMoveDamage) - gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 2; - break; - case 2: - gBattleMoveDamage *= 2; - break; - } - - gBattlescriptCurrInstr += 2; -} - -static void atk81_setrest(void) -{ - u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - gActiveBank = gBankTarget = gBankAttacker; - gBattleMoveDamage = gBattleMons[gBankTarget].maxHP * (-1); - if (gBattleMons[gBankTarget].hp == gBattleMons[gBankTarget].maxHP) - gBattlescriptCurrInstr = fail_loc; - else - { - if (gBattleMons[gBankTarget].status1 & ((u8)(~STATUS_SLEEP))) - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - - gBattleMons[gBankTarget].status1 = 3; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 5; - } -} - -static void atk82_jumpifnotfirstturn(void) -{ - u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - - if (gDisableStructs[gBankAttacker].isFirstTurn) - gBattlescriptCurrInstr += 5; - else - gBattlescriptCurrInstr = jump_loc; -} - -static void atk83_nop(void) -{ - gBattlescriptCurrInstr++; -} - -bool8 sub_8025A44(u8 bank) //uproar wakeup check -{ - int i; - for (i = 0; i < gNoOfAllBanks; i++) - { - if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || gBattleMons[bank].ability == ABILITY_SOUNDPROOF) //wtf gamefreak, you should check this only once, not every time in a loop... - continue; - BATTLE_STRUCT->scriptingActive = i; - if (gBankTarget == 0xFF) - gBankTarget = i; - else if (gBankTarget == i) - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - break; - } - if (i == gNoOfAllBanks) - return 0; - else - return 1; -} - -static void atk84_jump_if_cant_sleep(void) -{ - u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - if (sub_8025A44(gBankTarget)) - gBattlescriptCurrInstr = jump_loc; - else if (gBattleMons[gBankTarget].ability == ABILITY_INSOMNIA || gBattleMons[gBankTarget].ability == ABILITY_VITAL_SPIRIT) - { - gLastUsedAbility = gBattleMons[gBankTarget].ability; - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - gBattlescriptCurrInstr = jump_loc; - RecordAbilityBattle(gBankTarget, gLastUsedAbility); - } - else - { - gBattlescriptCurrInstr += 5; - } -} - -static void atk85_stockpile(void) -{ - if (gDisableStructs[gBankAttacker].stockpileCounter == 3) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - } - else - { - gDisableStructs[gBankAttacker].stockpileCounter++; - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 1; - gBattleTextBuff1[2] = 1; - gBattleTextBuff1[3] = 1; - gBattleTextBuff1[4] = gDisableStructs[gBankAttacker].stockpileCounter; - gBattleTextBuff1[5] = 0xFF; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - } - gBattlescriptCurrInstr++; -} - -static void atk86_stockpiletobasedamage(void) -{ - u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - if (gDisableStructs[gBankAttacker].stockpileCounter == 0) - { - gBattlescriptCurrInstr = jump_loc; - } - else - { - if (gBattleCommunication[6] != 1) - { - gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove, - gSideAffecting[GetBankIdentity(gBankTarget) & 1], 0, - 0, gBankAttacker, gBankTarget) - * gDisableStructs[gBankAttacker].stockpileCounter; - BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter; - - if (gProtectStructs[gBankAttacker].helpingHand) - gBattleMoveDamage = gBattleMoveDamage * 15 / 10; - } - gDisableStructs[gBankAttacker].stockpileCounter = 0; - gBattlescriptCurrInstr += 5; - } -} - -static void atk87_stockpiletohpheal(void) -{ - u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - if (gDisableStructs[gBankAttacker].stockpileCounter == 0) - { - gBattlescriptCurrInstr = jump_loc; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - } - else if (gBattleMons[gBankAttacker].maxHP == gBattleMons[gBankAttacker].hp) - { - gDisableStructs[gBankAttacker].stockpileCounter = 0; - gBattlescriptCurrInstr = jump_loc; - gBankTarget = gBankAttacker; - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - } - else - { - gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / (1 << (3 - gDisableStructs[gBankAttacker].stockpileCounter)); - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMoveDamage *= -1; - BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter; - gDisableStructs[gBankAttacker].stockpileCounter = 0; - gBattlescriptCurrInstr += 5; - gBankTarget = gBankAttacker; - } -} - -static void atk88_negativedamage(void) -{ - gBattleMoveDamage = -(gHP_dealt / 2); - if (gBattleMoveDamage == 0) - gBattleMoveDamage = -1; - gBattlescriptCurrInstr++; -} - -#ifdef NONMATCHING -u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) -{ - u8 r9 = 0; - u8 r10 = 0; - u8 index; - if (flags & 0x40) - gActiveBank = gBankAttacker; - else - gActiveBank = gBankTarget; - flags &= ~(0x40); - if (flags & 0x80) - r9++; - flags &= ~(0x80); - if (flags & 0x20) - r10++; - flags &= ~(0x20); - - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 5; - gBattleTextBuff1[2] = stat; - gBattleTextBuff1[3] = 0xFF; - - if ((statchanger << 0x18) < 0) //stat decrease - { - if (gSideTimer[GetBankIdentity(gActiveBank) & 1].mistTimer && !r9 && gCurrentMove != MOVE_CURSE) - { - if (flags == 1) - { - if (gSpecialStatuses[gActiveBank].statloweringflag) - gBattlescriptCurrInstr = bs_ptr; - else - { - b_movescr_stack_push(bs_ptr); - BATTLE_STRUCT->scriptingActive = gActiveBank; - gBattlescriptCurrInstr = BattleScript_MistProtected; - gSpecialStatuses[gActiveBank].statloweringflag = 1; - } - } - return 1; - } - else if (gCurrentMove != MOVE_CURSE && r10 != 1 && JumpIfMoveAffectedByProtect(0)) - { - gBattlescriptCurrInstr = BattleScript_ButItFailed; - return 1; - } - else if ((gBattleMons[gActiveBank].ability == ABILITY_CLEAR_BODY || gBattleMons[gActiveBank].ability == ABILITY_WHITE_SMOKE) && !r9 && gCurrentMove != MOVE_CURSE) - { - if (flags == 1) - { - if (gSpecialStatuses[gActiveBank].statloweringflag) - gBattlescriptCurrInstr = bs_ptr; - else - { - b_movescr_stack_push(bs_ptr); - BATTLE_STRUCT->scriptingActive = gActiveBank; - gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss; - gLastUsedAbility = gBattleMons[gActiveBank].ability; - RecordAbilityBattle(gActiveBank, gLastUsedAbility); - gSpecialStatuses[gActiveBank].statloweringflag = 1; - } - } - return 1; - } - else if (gBattleMons[gActiveBank].ability == ABILITY_KEEN_EYE && !r9 && stat == STAT_STAGE_ACC) - { - if (flags == 1) - { - b_movescr_stack_push(bs_ptr); - BATTLE_STRUCT->scriptingActive = gActiveBank; - gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; - gLastUsedAbility = gBattleMons[gActiveBank].ability; - RecordAbilityBattle(gActiveBank, gLastUsedAbility); - } - return 1; - } - else if (gBattleMons[gActiveBank].ability == ABILITY_HYPER_CUTTER && !r9 && stat == STAT_STAGE_ATK) - { - if (flags == 1) - { - b_movescr_stack_push(bs_ptr); - BATTLE_STRUCT->scriptingActive = gActiveBank; - gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; - gLastUsedAbility = gBattleMons[gActiveBank].ability; - RecordAbilityBattle(gActiveBank, gLastUsedAbility); - } - return 1; - } - else if (gBattleMons[gActiveBank].ability == ABILITY_SHIELD_DUST && flags == 0) - return 1; - else //decrease - { - statchanger = -((statchanger >> 4) & (7)); - gBattleTextBuff2[0] = 0xFD; - index = 1; - if (statchanger == -2) - { - gBattleTextBuff2[1] = 0; - gBattleTextBuff2[2] = 0xD3; //harshly - gBattleTextBuff2[3] = 0x0; - index = 4; - } - gBattleTextBuff2[index] = 0; - index++; - gBattleTextBuff2[index] = 0xD4; //fell - index++; - gBattleTextBuff2[index] = 0; - index++; - gBattleTextBuff2[index] = 0xFF; - - if (gBattleMons[gActiveBank].statStages[stat] == 0) - { - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - } - else - { - u8 stringID = 0; - if (gBankTarget == gActiveBank) - stringID = 1; - gBattleCommunication[MULTISTRING_CHOOSER] = stringID; - } - } - } - else //stat increase - { - statchanger = (statchanger >> 4) & (7); - gBattleTextBuff2[0] = 0xFD; - index = 1; - if (statchanger == 2) - { - gBattleTextBuff2[1] = 0; - gBattleTextBuff2[2] = 0xD1; //sharply - gBattleTextBuff2[3] = 0x0; - index = 4; - } - gBattleTextBuff2[index] = 0; - index++; - gBattleTextBuff2[index] = 0xD2; //rose - index++; - gBattleTextBuff2[index] = 0; - index++; - gBattleTextBuff2[index] = 0xFF; - - if (gBattleMons[gActiveBank].statStages[stat] == 0xC) - { - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - } - else - { - u8 stringID = 0; - if (gBankTarget == gActiveBank) - stringID = 1; - gBattleCommunication[MULTISTRING_CHOOSER] = stringID; - } - } - - gBattleMons[gActiveBank].statStages[stat] += statchanger; - if (gBattleMons[gActiveBank].statStages[stat] < 0) - gBattleMons[gActiveBank].statStages[stat] = 0; - if (gBattleMons[gActiveBank].statStages[stat] > 0xC) - gBattleMons[gActiveBank].statStages[stat] = 0xC; - - if (gBattleCommunication[MULTISTRING_CHOOSER] == 2) - { - if (flags & 1) - gBattleMoveFlags |= MOVESTATUS_MISSED; - if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & 1)) //what the actual fuck gamefreak... - return 1; - } - return 0; -} - -#else -__attribute__((naked)) -u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - mov r8, r3\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - lsls r1, 24\n\ - lsrs r7, r1, 24\n\ - lsls r2, 24\n\ - lsrs r5, r2, 24\n\ - movs r0, 0\n\ - mov r9, r0\n\ - mov r10, r0\n\ - movs r0, 0x40\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _08025E54\n\ - ldr r0, _08025E4C @ =gActiveBank\n\ - ldr r1, _08025E50 @ =gBankAttacker\n\ - b _08025E58\n\ - .align 2, 0\n\ -_08025E4C: .4byte gActiveBank\n\ -_08025E50: .4byte gBankAttacker\n\ -_08025E54:\n\ - ldr r0, _08025EF8 @ =gActiveBank\n\ - ldr r1, _08025EFC @ =gBankTarget\n\ -_08025E58:\n\ - ldrb r1, [r1]\n\ - strb r1, [r0]\n\ - movs r0, 0xBF\n\ - ands r5, r0\n\ - movs r0, 0x80\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _08025E72\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_08025E72:\n\ - movs r0, 0x7F\n\ - ands r5, r0\n\ - movs r0, 0x20\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _08025E88\n\ - mov r0, r10\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ -_08025E88:\n\ - movs r0, 0xDF\n\ - ands r5, r0\n\ - ldr r1, _08025F00 @ =gBattleTextBuff1\n\ - movs r4, 0\n\ - movs r2, 0xFD\n\ - strb r2, [r1]\n\ - movs r0, 0x5\n\ - strb r0, [r1, 0x1]\n\ - strb r7, [r1, 0x2]\n\ - movs r3, 0x1\n\ - negs r3, r3\n\ - mov r12, r3\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x3]\n\ - lsls r0, r6, 24\n\ - cmp r0, 0\n\ - blt _08025EAC\n\ - b _080261B0\n\ -_08025EAC:\n\ - ldr r4, _08025F04 @ =gSideTimer\n\ - ldr r1, _08025EF8 @ =gActiveBank\n\ - ldrb r0, [r1]\n\ - bl GetBankIdentity\n\ - movs r1, 0x1\n\ - ands r1, r0\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrb r0, [r0, 0x2]\n\ - cmp r0, 0\n\ - beq _08025F54\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - bne _08025F54\n\ - ldr r0, _08025F08 @ =gCurrentMove\n\ - ldrh r0, [r0]\n\ - cmp r0, 0xAE\n\ - beq _08025F84\n\ - cmp r5, 0x1\n\ - bne _08025F74\n\ - ldr r4, _08025F0C @ =gSpecialStatuses\n\ - ldr r3, _08025EF8 @ =gActiveBank\n\ - ldrb r0, [r3]\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r4\n\ - ldrb r0, [r1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _08025F14\n\ - ldr r0, _08025F10 @ =gBattlescriptCurrInstr\n\ - mov r4, r8\n\ - str r4, [r0]\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08025EF8: .4byte gActiveBank\n\ -_08025EFC: .4byte gBankTarget\n\ -_08025F00: .4byte gBattleTextBuff1\n\ -_08025F04: .4byte gSideTimer\n\ -_08025F08: .4byte gCurrentMove\n\ -_08025F0C: .4byte gSpecialStatuses\n\ -_08025F10: .4byte gBattlescriptCurrInstr\n\ -_08025F14:\n\ - mov r0, r8\n\ - bl b_movescr_stack_push\n\ - ldr r0, _08025F40 @ =0x02000000\n\ - ldr r6, _08025F44 @ =gActiveBank\n\ - ldrb r1, [r6]\n\ - ldr r2, _08025F48 @ =0x00016003\n\ - adds r0, r2\n\ - strb r1, [r0]\n\ - ldr r1, _08025F4C @ =gBattlescriptCurrInstr\n\ - ldr r0, _08025F50 @ =BattleScript_MistProtected\n\ - str r0, [r1]\n\ - ldrb r1, [r6]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrb r1, [r0]\n\ - movs r2, 0x1\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08025F40: .4byte 0x02000000\n\ -_08025F44: .4byte gActiveBank\n\ -_08025F48: .4byte 0x00016003\n\ -_08025F4C: .4byte gBattlescriptCurrInstr\n\ -_08025F50: .4byte BattleScript_MistProtected\n\ -_08025F54:\n\ - ldr r0, _08025F78 @ =gCurrentMove\n\ - ldrh r0, [r0]\n\ - cmp r0, 0xAE\n\ - beq _08025F84\n\ - mov r3, r10\n\ - cmp r3, 0x1\n\ - beq _08025F84\n\ - movs r0, 0\n\ - bl JumpIfMoveAffectedByProtect\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08025F84\n\ - ldr r1, _08025F7C @ =gBattlescriptCurrInstr\n\ - ldr r0, _08025F80 @ =BattleScript_ButItFailed\n\ - str r0, [r1]\n\ -_08025F74:\n\ - movs r0, 0x1\n\ - b _080262A4\n\ - .align 2, 0\n\ -_08025F78: .4byte gCurrentMove\n\ -_08025F7C: .4byte gBattlescriptCurrInstr\n\ -_08025F80: .4byte BattleScript_ButItFailed\n\ -_08025F84:\n\ - ldr r2, _08025FCC @ =gBattleMons\n\ - ldr r1, _08025FD0 @ =gActiveBank\n\ - ldrb r3, [r1]\n\ - movs r4, 0x58\n\ - adds r0, r3, 0\n\ - muls r0, r4\n\ - adds r0, r2\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - mov r10, r2\n\ - cmp r0, 0x1D\n\ - beq _08025FA0\n\ - cmp r0, 0x49\n\ - bne _08026040\n\ -_08025FA0:\n\ - mov r0, r9\n\ - cmp r0, 0\n\ - bne _08026040\n\ - ldr r0, _08025FD4 @ =gCurrentMove\n\ - ldrh r0, [r0]\n\ - cmp r0, 0xAE\n\ - beq _08026040\n\ - cmp r5, 0x1\n\ - bne _08025F74\n\ - ldr r4, _08025FD8 @ =gSpecialStatuses\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrb r0, [r0]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _08025FE0\n\ - ldr r0, _08025FDC @ =gBattlescriptCurrInstr\n\ - mov r1, r8\n\ - str r1, [r0]\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08025FCC: .4byte gBattleMons\n\ -_08025FD0: .4byte gActiveBank\n\ -_08025FD4: .4byte gCurrentMove\n\ -_08025FD8: .4byte gSpecialStatuses\n\ -_08025FDC: .4byte gBattlescriptCurrInstr\n\ -_08025FE0:\n\ - mov r0, r8\n\ - bl b_movescr_stack_push\n\ - ldr r0, _08026028 @ =0x02000000\n\ - ldr r2, _0802602C @ =gActiveBank\n\ - ldrb r1, [r2]\n\ - ldr r3, _08026030 @ =0x00016003\n\ - adds r0, r3\n\ - strb r1, [r0]\n\ - ldr r1, _08026034 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08026038 @ =BattleScript_AbilityNoStatLoss\n\ - str r0, [r1]\n\ - ldr r1, _0802603C @ =gLastUsedAbility\n\ - ldrb r0, [r2]\n\ - movs r6, 0x58\n\ - muls r0, r6\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldrb r0, [r2]\n\ - ldrb r1, [r1]\n\ - bl RecordAbilityBattle\n\ - ldr r0, _0802602C @ =gActiveBank\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrb r1, [r0]\n\ - movs r2, 0x1\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08026028: .4byte 0x02000000\n\ -_0802602C: .4byte gActiveBank\n\ -_08026030: .4byte 0x00016003\n\ -_08026034: .4byte gBattlescriptCurrInstr\n\ -_08026038: .4byte BattleScript_AbilityNoStatLoss\n\ -_0802603C: .4byte gLastUsedAbility\n\ -_08026040:\n\ - ldr r1, _08026090 @ =gActiveBank\n\ - ldrb r0, [r1]\n\ - movs r4, 0x58\n\ - muls r0, r4\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x33\n\ - bne _080260A8\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - bne _080260A8\n\ - cmp r7, 0x6\n\ - bne _080260A8\n\ - cmp r5, 0x1\n\ - bne _08025F74\n\ - mov r0, r8\n\ - bl b_movescr_stack_push\n\ - ldr r0, _08026094 @ =0x02000000\n\ - ldr r3, _08026090 @ =gActiveBank\n\ - ldrb r1, [r3]\n\ - ldr r6, _08026098 @ =0x00016003\n\ - adds r0, r6\n\ - strb r1, [r0]\n\ - ldr r1, _0802609C @ =gBattlescriptCurrInstr\n\ - ldr r0, _080260A0 @ =BattleScript_AbilityNoSpecificStatLoss\n\ - str r0, [r1]\n\ - ldr r1, _080260A4 @ =gLastUsedAbility\n\ - ldrb r0, [r3]\n\ - muls r0, r4\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldrb r0, [r3]\n\ - ldrb r1, [r1]\n\ - bl RecordAbilityBattle\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08026090: .4byte gActiveBank\n\ -_08026094: .4byte 0x02000000\n\ -_08026098: .4byte 0x00016003\n\ -_0802609C: .4byte gBattlescriptCurrInstr\n\ -_080260A0: .4byte BattleScript_AbilityNoSpecificStatLoss\n\ -_080260A4: .4byte gLastUsedAbility\n\ -_080260A8:\n\ - ldr r1, _080260FC @ =gActiveBank\n\ - ldrb r0, [r1]\n\ - movs r4, 0x58\n\ - muls r0, r4\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x34\n\ - bne _08026114\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - bne _08026114\n\ - cmp r7, 0x1\n\ - bne _08026114\n\ - cmp r5, 0x1\n\ - beq _080260CA\n\ - b _08025F74\n\ -_080260CA:\n\ - mov r0, r8\n\ - bl b_movescr_stack_push\n\ - ldr r0, _08026100 @ =0x02000000\n\ - ldr r3, _080260FC @ =gActiveBank\n\ - ldrb r1, [r3]\n\ - ldr r6, _08026104 @ =0x00016003\n\ - adds r0, r6\n\ - strb r1, [r0]\n\ - ldr r1, _08026108 @ =gBattlescriptCurrInstr\n\ - ldr r0, _0802610C @ =BattleScript_AbilityNoSpecificStatLoss\n\ - str r0, [r1]\n\ - ldr r1, _08026110 @ =gLastUsedAbility\n\ - ldrb r0, [r3]\n\ - muls r0, r4\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldrb r0, [r3]\n\ - ldrb r1, [r1]\n\ - bl RecordAbilityBattle\n\ - b _08025F74\n\ - .align 2, 0\n\ -_080260FC: .4byte gActiveBank\n\ -_08026100: .4byte 0x02000000\n\ -_08026104: .4byte 0x00016003\n\ -_08026108: .4byte gBattlescriptCurrInstr\n\ -_0802610C: .4byte BattleScript_AbilityNoSpecificStatLoss\n\ -_08026110: .4byte gLastUsedAbility\n\ -_08026114:\n\ - ldr r0, _080261A0 @ =gActiveBank\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x13\n\ - bne _0802612C\n\ - cmp r5, 0\n\ - bne _0802612C\n\ - b _08025F74\n\ -_0802612C:\n\ - lsls r0, r6, 24\n\ - asrs r0, 28\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - negs r0, r0\n\ - lsls r0, 24\n\ - ldr r3, _080261A4 @ =gBattleTextBuff2\n\ - movs r4, 0\n\ - movs r1, 0xFD\n\ - strb r1, [r3]\n\ - movs r2, 0x1\n\ - lsrs r6, r0, 24\n\ - asrs r0, 24\n\ - subs r1, 0xFF\n\ - cmp r0, r1\n\ - bne _08026156\n\ - strb r4, [r3, 0x1]\n\ - movs r0, 0xD3\n\ - strb r0, [r3, 0x2]\n\ - strb r4, [r3, 0x3]\n\ - movs r2, 0x4\n\ -_08026156:\n\ - adds r0, r2, r3\n\ - strb r4, [r0]\n\ - adds r2, 0x1\n\ - adds r1, r2, r3\n\ - movs r0, 0xD4\n\ - strb r0, [r1]\n\ - adds r2, 0x1\n\ - adds r0, r2, r3\n\ - strb r4, [r0]\n\ - adds r2, 0x1\n\ - adds r1, r2, r3\n\ - movs r0, 0xFF\n\ - strb r0, [r1]\n\ - ldr r1, _080261A0 @ =gActiveBank\n\ - ldrb r2, [r1]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r0, r7, r0\n\ - mov r1, r10\n\ - adds r1, 0x18\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - cmp r0, 0\n\ - beq _08026206\n\ - movs r1, 0\n\ - ldr r0, _080261A8 @ =gBankTarget\n\ - ldrb r0, [r0]\n\ - ldr r3, _080261AC @ =gBattleCommunication\n\ - mov r8, r3\n\ - cmp r0, r2\n\ - bne _0802619A\n\ - movs r1, 0x1\n\ -_0802619A:\n\ - mov r4, r8\n\ - strb r1, [r4, 0x5]\n\ - b _08026234\n\ - .align 2, 0\n\ -_080261A0: .4byte gActiveBank\n\ -_080261A4: .4byte gBattleTextBuff2\n\ -_080261A8: .4byte gBankTarget\n\ -_080261AC: .4byte gBattleCommunication\n\ -_080261B0:\n\ - asrs r6, r0, 28\n\ - movs r0, 0x7\n\ - ands r6, r0\n\ - ldr r3, _08026210 @ =gBattleTextBuff2\n\ - strb r2, [r3]\n\ - movs r2, 0x1\n\ - cmp r6, 0x2\n\ - bne _080261CA\n\ - strb r4, [r3, 0x1]\n\ - movs r0, 0xD1\n\ - strb r0, [r3, 0x2]\n\ - strb r4, [r3, 0x3]\n\ - movs r2, 0x4\n\ -_080261CA:\n\ - adds r0, r2, r3\n\ - strb r4, [r0]\n\ - adds r2, 0x1\n\ - adds r1, r2, r3\n\ - movs r0, 0xD2\n\ - strb r0, [r1]\n\ - adds r2, 0x1\n\ - adds r0, r2, r3\n\ - strb r4, [r0]\n\ - adds r2, 0x1\n\ - adds r1, r2, r3\n\ - ldrb r0, [r1]\n\ - mov r2, r12\n\ - orrs r0, r2\n\ - strb r0, [r1]\n\ - ldr r2, _08026214 @ =gBattleMons\n\ - ldr r4, _08026218 @ =gActiveBank\n\ - ldrb r3, [r4]\n\ - movs r0, 0x58\n\ - muls r0, r3\n\ - adds r0, r7, r0\n\ - adds r1, r2, 0\n\ - adds r1, 0x18\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - mov r10, r2\n\ - cmp r0, 0xC\n\ - bne _08026220\n\ -_08026206:\n\ - ldr r1, _0802621C @ =gBattleCommunication\n\ - movs r0, 0x2\n\ - strb r0, [r1, 0x5]\n\ - mov r8, r1\n\ - b _08026234\n\ - .align 2, 0\n\ -_08026210: .4byte gBattleTextBuff2\n\ -_08026214: .4byte gBattleMons\n\ -_08026218: .4byte gActiveBank\n\ -_0802621C: .4byte gBattleCommunication\n\ -_08026220:\n\ - movs r1, 0\n\ - ldr r0, _080262B4 @ =gBankTarget\n\ - ldrb r0, [r0]\n\ - ldr r2, _080262B8 @ =gBattleCommunication\n\ - mov r8, r2\n\ - cmp r0, r3\n\ - bne _08026230\n\ - movs r1, 0x1\n\ -_08026230:\n\ - mov r3, r8\n\ - strb r1, [r3, 0x5]\n\ -_08026234:\n\ - ldr r2, _080262BC @ =gActiveBank\n\ - ldrb r0, [r2]\n\ - movs r4, 0x58\n\ - adds r1, r0, 0\n\ - muls r1, r4\n\ - adds r1, r7, r1\n\ - mov r3, r10\n\ - adds r3, 0x18\n\ - adds r1, r3\n\ - lsls r0, r6, 24\n\ - asrs r0, 24\n\ - ldrb r6, [r1]\n\ - adds r0, r6\n\ - strb r0, [r1]\n\ - ldrb r0, [r2]\n\ - muls r0, r4\n\ - adds r0, r7, r0\n\ - adds r1, r0, r3\n\ - movs r0, 0\n\ - ldrsb r0, [r1, r0]\n\ - cmp r0, 0\n\ - bge _08026264\n\ - movs r0, 0\n\ - strb r0, [r1]\n\ -_08026264:\n\ - ldr r1, _080262BC @ =gActiveBank\n\ - ldrb r0, [r1]\n\ - muls r0, r4\n\ - adds r0, r7, r0\n\ - adds r1, r0, r3\n\ - movs r0, 0\n\ - ldrsb r0, [r1, r0]\n\ - cmp r0, 0xC\n\ - ble _0802627A\n\ - movs r0, 0xC\n\ - strb r0, [r1]\n\ -_0802627A:\n\ - mov r2, r8\n\ - ldrb r0, [r2, 0x5]\n\ - cmp r0, 0x2\n\ - bne _080262A2\n\ - movs r3, 0x1\n\ - ands r3, r5\n\ - cmp r3, 0\n\ - beq _08026294\n\ - ldr r0, _080262C0 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r2, 0x1\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ -_08026294:\n\ - mov r4, r8\n\ - ldrb r0, [r4, 0x5]\n\ - cmp r0, 0x2\n\ - bne _080262A2\n\ - cmp r3, 0\n\ - bne _080262A2\n\ - b _08025F74\n\ -_080262A2:\n\ - movs r0, 0\n\ -_080262A4:\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_080262B4: .4byte gBankTarget\n\ -_080262B8: .4byte gBattleCommunication\n\ -_080262BC: .4byte gActiveBank\n\ -_080262C0: .4byte gBattleMoveFlags\n\ - .syntax divided"); -} -#endif // NONMATCHING - -static void atk89_statbuffchange(void) -{ - u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 2); - if (ChangeStatBuffs(BATTLE_STRUCT->statChanger & 0xF0, BATTLE_STRUCT->statChanger & 0xF, BSScriptRead8(gBattlescriptCurrInstr + 1), jump_loc) == 0) - gBattlescriptCurrInstr += 6; -} - -static void atk8A_normalisebuffs(void) //haze -{ - int i, j; - for (i = 0; i < gNoOfAllBanks; i++) - { - for (j = 0; j < 8; j++) - { - gBattleMons[i].statStages[j] = 6; - } - } - gBattlescriptCurrInstr++; -} - -static void atk8B_setbide(void) -{ - gBattleMons[gBankAttacker].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gBankAttacker] = gCurrentMove; - gTakenDmg[gBankAttacker] = 0; - gBattleMons[gBankAttacker].status2 |= (STATUS2_BIDE - 0x100); //2 turns - gBattlescriptCurrInstr++; -} - -static void atk8C_confuseifrepeatingattackends(void) -{ - if (!(gBattleMons[gBankAttacker].status2 & STATUS2_LOCK_CONFUSE)) - gBattleCommunication[MOVE_EFFECT_BYTE] = 0x75; - gBattlescriptCurrInstr++; -} - -static void atk8D_setmultihit_counter(void) -{ - if (BSScriptRead8(gBattlescriptCurrInstr + 1)) - gMultiHitCounter = BSScriptRead8(gBattlescriptCurrInstr + 1); - else - { - gMultiHitCounter = Random() & 3; - if (gMultiHitCounter > 1) - gMultiHitCounter = (Random() & 3) + 2; - else - gMultiHitCounter += 2; - } - gBattlescriptCurrInstr += 2; -} - -static void atk8E_prepare_multihit(void) -{ - ewram[0x160e0] = 0xFD; - ewram[0x160e1] = 1; - ewram[0x160e2] = 1; - ewram[0x160e3] = 1; - ewram[0x160e4] = 0; - ewram[0x160e5] = 0xFF; - gBattlescriptCurrInstr++; -} - -static bool8 sub_80264C0(void) -{ - if (gBattleMons[gBankAttacker].level >= gBattleMons[gBankTarget].level) - { - ewram[gBankTarget + 0x16064] = gBattlePartyID[gBankTarget]; - } - else - { - u16 random = Random() & 0xFF; - if ((u32)((random * (gBattleMons[gBankAttacker].level + gBattleMons[gBankTarget].level) >> 8) + 1) <= (gBattleMons[gBankTarget].level / 4)) - { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - return 0; - } - ewram[gBankTarget + 0x16064] = gBattlePartyID[gBankTarget]; - } - gBattlescriptCurrInstr = gUnknown_081D90FC; - return 1; -} - -static void atk8F_forcerandomswitch(void) -{ - if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)) - { - u8 i; - struct Pokemon* party; - u8 valid; - u8 val; - if (!GetBankSide(gBankTarget)) - party = gPlayerParty; - else - party = gEnemyParty; - - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - valid = 0; - val = 0; - if (sub_803FBFC(sub_803FC34(gBankTarget)) == 1) - val = 3; - for (i = val; i < val + 3; i++) - { - if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE - && !GetMonData(&party[i], MON_DATA_IS_EGG) - && GetMonData(&party[i], MON_DATA_HP) != 0) - valid++; - } - } - else - { - valid = 0; - for (i = 0; i < 6; i++) - { - if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE - && !GetMonData(&party[i], MON_DATA_IS_EGG) - && GetMonData(&party[i], MON_DATA_HP) != 0) - valid++; - } - } - - if ((valid < 2 && (gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI)) != BATTLE_TYPE_DOUBLE) - || (valid < 3 && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))) - { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } - else if (sub_80264C0()) - { -#define MON_CAN_BATTLE(mon) (((GetMonData(mon, MON_DATA_SPECIES) && GetMonData(mon, MON_DATA_IS_EGG) != 1 && GetMonData(mon, MON_DATA_HP)))) - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - do - { - val = Random() % 3; - if (sub_803FBFC(sub_803FC34(gBankTarget)) == 1) - i = val + 3; - else - i = val; - } while (i == gBattlePartyID[gBankTarget] || i == gBattlePartyID[gBankTarget ^ 2] || !MON_CAN_BATTLE(&party[i])); - } - else - { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - do - { - i = Random() % 6; - } while (i == gBattlePartyID[gBankTarget] || i == gBattlePartyID[gBankTarget ^ 2] || !MON_CAN_BATTLE(&party[i])); - } - else - { - do - { - i = Random() % 6; - } while (i == gBattlePartyID[gBankTarget] || !MON_CAN_BATTLE(&party[i])); - } - } - ewram[gBankTarget + 0x16068] = i; - if (!IsLinkDoubleBattle()) - sub_8012258(gBankTarget); - sub_8094B6C(gBankTarget, i, 0); - sub_8094B6C(gBankTarget ^ 2, i, 1); -#undef MON_CAN_BATTLE - } - } - else - { - sub_80264C0(); - } -} - -static void atk90_conversion_type_change(void) -{ - //randomly changes user's type to one of its moves' type - u8 valid_moves = 0; - u8 checked_move; - u8 move_type; - while (valid_moves < 4) - { - if (gBattleMons[gBankAttacker].moves[valid_moves] == 0) - break; - valid_moves++; - } - - for (checked_move = 0; checked_move < valid_moves; checked_move++) - { - move_type = gBattleMoves[gBattleMons[gBankAttacker].moves[checked_move]].type; - if (move_type == TYPE_MYSTERY) - { - if (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST) - move_type = TYPE_GHOST; - else - move_type = TYPE_NORMAL; - } - if (move_type != gBattleMons[gBankAttacker].type1 && move_type != gBattleMons[gBankAttacker].type2) - break; - } - - if (checked_move == valid_moves) - { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } - else - { - do - { - - while ((checked_move = Random() & 3) >= valid_moves); - - move_type = gBattleMoves[gBattleMons[gBankAttacker].moves[checked_move]].type; - if (move_type == TYPE_MYSTERY) - { - if (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST) - move_type = TYPE_GHOST; - else - move_type = TYPE_NORMAL; - } - } while (move_type == gBattleMons[gBankAttacker].type1 || move_type == gBattleMons[gBankAttacker].type2); - - gBattleMons[gBankAttacker].type1 = move_type; - gBattleMons[gBankAttacker].type2 = move_type; - - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 3; - gBattleTextBuff1[2] = move_type; - gBattleTextBuff1[3] = 0xFF; - - gBattlescriptCurrInstr += 5; - } -} - -static void atk91_givepaydaymoney(void) -{ - if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && gPaydayMoney) - { - sub_80B79B8(&gSaveBlock1.money, gPaydayMoney * BATTLE_STRUCT->moneyMultiplier); - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 1; - gBattleTextBuff1[2] = 2; - gBattleTextBuff1[3] = 5; - gBattleTextBuff1[4] = gPaydayMoney; - gBattleTextBuff1[5] = uBYTE1_16(gPaydayMoney); - gBattleTextBuff1[6] = 0xFF; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = gUnknown_081D95DB; - } - else - gBattlescriptCurrInstr++; -} - -static void atk92_setlightscreen(void) -{ - if (gSideAffecting[GetBankIdentity(gBankAttacker) & 1] & SIDE_STATUS_LIGHTSCREEN) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - } - else - { - gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_LIGHTSCREEN; - gSideTimer[GetBankIdentity(gBankAttacker) & 1].lightscreenTimer = 5; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMons(1) == 2) - gBattleCommunication[MULTISTRING_CHOOSER] = 4; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 3; - } - gBattlescriptCurrInstr++; -} - -#ifdef NOTMATCHING -static void atk93_ko_move(void) -{ - if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) - hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; - else - { - hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); - quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); - } - - gStringBank = gBankTarget; - - if (hold_effect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < quality) - { - RecordItemBattle(gBankTarget, hold_effect); - gSpecialStatuses[gBankTarget].focusBanded = 1; - } - - if (gBattleMons[gBankTarget].ability == ABILITY_STURDY) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - gLastUsedAbility = ABILITY_STURDY; - gBattlescriptCurrInstr = x; - RecordAbilityBattle(gBankTarget, ABILITY_STURDY); - return; - } - - if (!(gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS)) - { - u16 to_cmp = gBattleMons[gBankAttacker].level - gBattleMons[gBankTarget].level + gBattleMoves[gCurrentMove].accuracy; - if (Random() % 0x64 + 1 < to_cmp || gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level) - { - goto MOVESTATUS_MISSED_LABEL; - } - } - else - { - if (gDisableStructs[gBankTarget].bankWithSureHit != gBankAttacker || gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level) - { - - } - } - -MOVESTATUS_MISSED_LABEL: - gBattleTypeFlags |= MOVESTATUS_MISSED; - if (gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level) - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -#else -__attribute((naked)) -static void atk93_ko_move(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\ - ldr r7, _08026BA8 @ =gBattleMons\n\ - ldr r6, _08026BAC @ =gBankTarget\n\ - ldrb r2, [r6]\n\ - movs r5, 0x58\n\ - adds r0, r2, 0\n\ - muls r0, r5\n\ - adds r1, r0, r7\n\ - ldrh r0, [r1, 0x2E]\n\ - cmp r0, 0xAF\n\ - bne _08026BB4\n\ - ldr r1, _08026BB0 @ =gEnigmaBerries\n\ - lsls r0, r2, 3\n\ - subs r0, r2\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r4, [r0, 0x7]\n\ - ldrb r6, [r0, 0x1A]\n\ - b _08026BCE\n\ - .align 2, 0\n\ -_08026BA8: .4byte gBattleMons\n\ -_08026BAC: .4byte gBankTarget\n\ -_08026BB0: .4byte gEnigmaBerries\n\ -_08026BB4:\n\ - ldrh r0, [r1, 0x2E]\n\ - bl ItemId_GetHoldEffect\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - ldrb r0, [r6]\n\ - muls r0, r5\n\ - adds r0, r7\n\ - ldrh r0, [r0, 0x2E]\n\ - bl ItemId_GetHoldEffectParam\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ -_08026BCE:\n\ - ldr r1, _08026C4C @ =gStringBank\n\ - ldr r5, _08026C50 @ =gBankTarget\n\ - ldrb r0, [r5]\n\ - strb r0, [r1]\n\ - cmp r4, 0x27\n\ - bne _08026C0C\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x64\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, r6\n\ - bcs _08026C0C\n\ - ldrb r0, [r5]\n\ - movs r1, 0x27\n\ - bl RecordItemBattle\n\ - ldr r2, _08026C54 @ =gSpecialStatuses\n\ - ldrb r1, [r5]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldrb r1, [r0]\n\ - movs r2, 0x80\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ -_08026C0C:\n\ - ldr r0, _08026C58 @ =gBattleMons\n\ - mov r8, r0\n\ - ldr r1, _08026C50 @ =gBankTarget\n\ - ldrb r2, [r1]\n\ - movs r6, 0x58\n\ - adds r0, r2, 0\n\ - muls r0, r6\n\ - mov r3, r8\n\ - adds r5, r0, r3\n\ - adds r0, r5, 0\n\ - adds r0, 0x20\n\ - ldrb r3, [r0]\n\ - mov r10, r8\n\ - cmp r3, 0x5\n\ - bne _08026C6C\n\ - ldr r2, _08026C5C @ =gBattleMoveFlags\n\ - ldrb r0, [r2]\n\ - movs r1, 0x1\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldr r0, _08026C60 @ =gLastUsedAbility\n\ - strb r3, [r0]\n\ - ldr r1, _08026C64 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08026C68 @ =gUnknown_081D9826\n\ - str r0, [r1]\n\ - ldr r1, _08026C50 @ =gBankTarget\n\ - ldrb r0, [r1]\n\ - movs r1, 0x5\n\ - bl RecordAbilityBattle\n\ - b _08026E40\n\ - .align 2, 0\n\ -_08026C4C: .4byte gStringBank\n\ -_08026C50: .4byte gBankTarget\n\ -_08026C54: .4byte gSpecialStatuses\n\ -_08026C58: .4byte gBattleMons\n\ -_08026C5C: .4byte gBattleMoveFlags\n\ -_08026C60: .4byte gLastUsedAbility\n\ -_08026C64: .4byte gBattlescriptCurrInstr\n\ -_08026C68: .4byte gUnknown_081D9826\n\ -_08026C6C:\n\ - ldr r1, _08026CE0 @ =gStatuses3\n\ - lsls r0, r2, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x18\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08026CF4\n\ - ldr r1, _08026CE4 @ =gBattleMoves\n\ - ldr r0, _08026CE8 @ =gCurrentMove\n\ - ldrh r0, [r0]\n\ - lsls r2, r0, 1\n\ - adds r2, r0\n\ - lsls r2, 2\n\ - adds r2, r1\n\ - ldr r7, _08026CEC @ =gBankAttacker\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - add r0, r10\n\ - adds r0, 0x2A\n\ - ldrb r0, [r0]\n\ - adds r1, r5, 0\n\ - adds r1, 0x2A\n\ - ldrb r1, [r1]\n\ - subs r0, r1\n\ - ldrb r2, [r2, 0x3]\n\ - adds r0, r2\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x64\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - adds r0, 0x1\n\ - cmp r0, r4\n\ - bge _08026CDC\n\ - ldrb r0, [r7]\n\ - adds r1, r0, 0\n\ - muls r1, r6\n\ - add r1, r10\n\ - adds r1, 0x2A\n\ - ldr r2, _08026CF0 @ =gBankTarget\n\ - ldrb r0, [r2]\n\ - muls r0, r6\n\ - add r0, r10\n\ - adds r0, 0x2A\n\ - ldrb r1, [r1]\n\ - movs r4, 0x1\n\ - ldrb r0, [r0]\n\ - cmp r1, r0\n\ - bcs _08026D20\n\ -_08026CDC:\n\ - mov r10, r8\n\ - b _08026DE0\n\ - .align 2, 0\n\ -_08026CE0: .4byte gStatuses3\n\ -_08026CE4: .4byte gBattleMoves\n\ -_08026CE8: .4byte gCurrentMove\n\ -_08026CEC: .4byte gBankAttacker\n\ -_08026CF0: .4byte gBankTarget\n\ -_08026CF4:\n\ - ldr r0, _08026D4C @ =gDisableStructs\n\ - lsls r1, r2, 3\n\ - subs r1, r2\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldr r2, _08026D50 @ =gBankAttacker\n\ - ldrb r0, [r1, 0x15]\n\ - movs r4, 0\n\ - ldrb r3, [r2]\n\ - cmp r0, r3\n\ - bne _08026D20\n\ - ldrb r0, [r2]\n\ - muls r0, r6\n\ - add r0, r10\n\ - adds r0, 0x2A\n\ - adds r1, r5, 0\n\ - adds r1, 0x2A\n\ - ldrb r0, [r0]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bcc _08026D20\n\ - movs r4, 0x1\n\ -_08026D20:\n\ - cmp r4, 0\n\ - beq _08026DE0\n\ - ldr r0, _08026D54 @ =gProtectStructs\n\ - ldr r1, _08026D58 @ =gBankTarget\n\ - ldrb r2, [r1]\n\ - lsls r1, r2, 4\n\ - adds r1, r0\n\ - ldrb r0, [r1]\n\ - lsls r0, 30\n\ - cmp r0, 0\n\ - bge _08026D64\n\ - ldr r1, _08026D5C @ =gBattleMoveDamage\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - add r0, r10\n\ - ldrh r0, [r0, 0x28]\n\ - subs r0, 0x1\n\ - str r0, [r1]\n\ - ldr r2, _08026D60 @ =gBattleMoveFlags\n\ - ldrb r0, [r2]\n\ - movs r1, 0x40\n\ - b _08026DC6\n\ - .align 2, 0\n\ -_08026D4C: .4byte gDisableStructs\n\ -_08026D50: .4byte gBankAttacker\n\ -_08026D54: .4byte gProtectStructs\n\ -_08026D58: .4byte gBankTarget\n\ -_08026D5C: .4byte gBattleMoveDamage\n\ -_08026D60: .4byte gBattleMoveFlags\n\ -_08026D64:\n\ - ldr r0, _08026DA0 @ =gSpecialStatuses\n\ - lsls r1, r2, 2\n\ - adds r1, r2\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrb r0, [r1]\n\ - lsrs r0, 7\n\ - cmp r0, 0\n\ - beq _08026DB4\n\ - ldr r1, _08026DA4 @ =gBattleMoveDamage\n\ - movs r3, 0x58\n\ - adds r0, r2, 0\n\ - muls r0, r3\n\ - add r0, r10\n\ - ldrh r0, [r0, 0x28]\n\ - subs r0, 0x1\n\ - str r0, [r1]\n\ - ldr r2, _08026DA8 @ =gBattleMoveFlags\n\ - ldrb r0, [r2]\n\ - movs r1, 0x80\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldr r1, _08026DAC @ =gLastUsedItem\n\ - ldr r2, _08026DB0 @ =gBankTarget\n\ - ldrb r0, [r2]\n\ - muls r0, r3\n\ - add r0, r10\n\ - ldrh r0, [r0, 0x2E]\n\ - strh r0, [r1]\n\ - b _08026DCA\n\ - .align 2, 0\n\ -_08026DA0: .4byte gSpecialStatuses\n\ -_08026DA4: .4byte gBattleMoveDamage\n\ -_08026DA8: .4byte gBattleMoveFlags\n\ -_08026DAC: .4byte gLastUsedItem\n\ -_08026DB0: .4byte gBankTarget\n\ -_08026DB4:\n\ - ldr r1, _08026DD4 @ =gBattleMoveDamage\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - add r0, r10\n\ - ldrh r0, [r0, 0x28]\n\ - str r0, [r1]\n\ - ldr r2, _08026DD8 @ =gBattleMoveFlags\n\ - ldrb r0, [r2]\n\ - movs r1, 0x10\n\ -_08026DC6:\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ -_08026DCA:\n\ - ldr r1, _08026DDC @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x5\n\ - str r0, [r1]\n\ - b _08026E40\n\ - .align 2, 0\n\ -_08026DD4: .4byte gBattleMoveDamage\n\ -_08026DD8: .4byte gBattleMoveFlags\n\ -_08026DDC: .4byte gBattlescriptCurrInstr\n\ -_08026DE0:\n\ - ldr r2, _08026E10 @ =gBattleMoveFlags\n\ - ldrb r0, [r2]\n\ - movs r1, 0x1\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldr r0, _08026E14 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - movs r2, 0x58\n\ - adds r1, r0, 0\n\ - muls r1, r2\n\ - add r1, r10\n\ - adds r1, 0x2A\n\ - ldr r3, _08026E18 @ =gBankTarget\n\ - ldrb r0, [r3]\n\ - muls r0, r2\n\ - add r0, r10\n\ - adds r0, 0x2A\n\ - ldrb r1, [r1]\n\ - ldrb r0, [r0]\n\ - cmp r1, r0\n\ - bcc _08026E20\n\ - ldr r1, _08026E1C @ =gBattleCommunication\n\ - movs r0, 0\n\ - b _08026E24\n\ - .align 2, 0\n\ -_08026E10: .4byte gBattleMoveFlags\n\ -_08026E14: .4byte gBankAttacker\n\ -_08026E18: .4byte gBankTarget\n\ -_08026E1C: .4byte gBattleCommunication\n\ -_08026E20:\n\ - ldr r1, _08026E50 @ =gBattleCommunication\n\ - movs r0, 0x1\n\ -_08026E24:\n\ - strb r0, [r1, 0x5]\n\ - ldr r3, _08026E54 @ =gBattlescriptCurrInstr\n\ - ldr r2, [r3]\n\ - ldrb r1, [r2, 0x1]\n\ - ldrb r0, [r2, 0x2]\n\ - lsls r0, 8\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x3]\n\ - lsls r0, 16\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x4]\n\ - lsls r0, 24\n\ - orrs r1, r0\n\ - str r1, [r3]\n\ -_08026E40:\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\ -_08026E50: .4byte gBattleCommunication\n\ -_08026E54: .4byte gBattlescriptCurrInstr\n\ - .syntax divided"); -} -#endif // NOTMATCHING - -static void atk94_gethalfcurrentenemyhp(void) //super fang -{ - gBattleMoveDamage = gBattleMons[gBankTarget].hp / 2; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattlescriptCurrInstr++; -} - -static void atk95_setsandstorm(void) -{ - if (gBattleWeather & WEATHER_SANDSTORM_ANY) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - } - else - { - gBattleWeather = WEATHER_SANDSTORM_TEMPORARY; - gBattleCommunication[MULTISTRING_CHOOSER] = 3; - gWishFutureKnock.weatherDuration = 5; - } - gBattlescriptCurrInstr++; -} - -static void atk96_weatherdamage(void) -{ - if (WEATHER_HAS_EFFECT) - { - if (gBattleWeather & WEATHER_SANDSTORM_ANY) - { - if (gBattleMons[gBankAttacker].type1 != TYPE_ROCK && gBattleMons[gBankAttacker].type1 != TYPE_STEEL && gBattleMons[gBankAttacker].type1 != TYPE_GROUND - && gBattleMons[gBankAttacker].type2 != TYPE_ROCK && gBattleMons[gBankAttacker].type2 != TYPE_STEEL && gBattleMons[gBankAttacker].type2 != TYPE_GROUND - && gBattleMons[gBankAttacker].ability != ABILITY_SAND_VEIL && !(gStatuses3[gBankAttacker] & STATUS3_UNDERGROUND) && !(gStatuses3[gBankAttacker] & STATUS3_UNDERWATER)) - { - gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - } - else - { - gBattleMoveDamage = 0; - } - } - if (gBattleWeather & WEATHER_HAIL) - { - if (gBattleMons[gBankAttacker].type1 != TYPE_ICE && gBattleMons[gBankAttacker].type2 != TYPE_ICE && !(gStatuses3[gBankAttacker] & STATUS3_UNDERGROUND) && !(gStatuses3[gBankAttacker] & STATUS3_UNDERWATER)) - { - gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - } - else - { - gBattleMoveDamage = 0; - } - } - } - else - gBattleMoveDamage = 0; - - if (gAbsentBankFlags & gBitTable[gBankAttacker]) - gBattleMoveDamage = 0; - - gBattlescriptCurrInstr++; -} - -static void atk97_try_infatuation(void) -{ - struct Pokemon *attacker, *target; - u16 atk_species, def_species; - u32 atk_pid, def_pid; - if (!GetBankSide(gBankAttacker)) - attacker = &gPlayerParty[gBattlePartyID[gBankAttacker]]; - else - attacker = &gEnemyParty[gBattlePartyID[gBankAttacker]]; - - if (!GetBankSide(gBankTarget)) - target = &gPlayerParty[gBattlePartyID[gBankTarget]]; - else - target = &gEnemyParty[gBattlePartyID[gBankTarget]]; - - atk_species = GetMonData(attacker, MON_DATA_SPECIES); - atk_pid = GetMonData(attacker, MON_DATA_PERSONALITY); - - def_species = GetMonData(target, MON_DATA_SPECIES); - def_pid = GetMonData(target, MON_DATA_PERSONALITY); - - if (gBattleMons[gBankTarget].ability == ABILITY_OBLIVIOUS) - { - gBattlescriptCurrInstr = BattleScript_ObliviousPreventsAttraction; - gLastUsedAbility = ABILITY_OBLIVIOUS; - RecordAbilityBattle(gBankTarget, ABILITY_OBLIVIOUS); - } - else - { - if (GetGenderFromSpeciesAndPersonality(atk_species, atk_pid) == GetGenderFromSpeciesAndPersonality(def_species, def_pid) - || gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE || gBattleMons[gBankTarget].status2 & STATUS2_INFATUATION || GetGenderFromSpeciesAndPersonality(atk_species, atk_pid) == 0xFF - || GetGenderFromSpeciesAndPersonality(def_species, def_pid) == 0xFF) - { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } - else - { - gBattleMons[gBankTarget].status2 |= (gBitTable[gBankAttacker] << 16); - gBattlescriptCurrInstr += 5; - } - } -} - -static void atk98_status_icon_update(void) -{ - if (gBattleExecBuffer) - return; - - if (BSScriptRead8(gBattlescriptCurrInstr + 1) != 4) - { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 2; - } - else - { - gActiveBank = gBankAttacker; - if (!(gAbsentBankFlags & gBitTable[gActiveBank])) - { - EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2); - MarkBufferBankForExecution(gActiveBank); - } - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - { - gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); - if (!(gAbsentBankFlags & gBitTable[gActiveBank])) - { - EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2); - MarkBufferBankForExecution(gActiveBank); - } - } - gBattlescriptCurrInstr += 2; - } -} - -static void atk99_setmist(void) -{ - if (gSideTimer[GetBankIdentity(gBankAttacker) & 1].mistTimer) - { - gBattleMoveFlags |= MOVESTATUS_FAILED; - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - } - else - { - gSideTimer[GetBankIdentity(gBankAttacker) & 1].mistTimer = 5; - gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_MIST; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - } - gBattlescriptCurrInstr++; -} - -static void atk9A_set_focusenergy(void) -{ - if (gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY) - { - gBattleMoveFlags |= MOVESTATUS_FAILED; - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - } - else - { - gBattleMons[gBankAttacker].status2 |= STATUS2_FOCUS_ENERGY; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - } - gBattlescriptCurrInstr++; -} - -static void atk9B_transformdataexecution(void) -{ - gUnknown_02024BE8 = 0xFFFF; - gBattlescriptCurrInstr++; - if (gBattleMons[gBankTarget].status2 & STATUS2_TRANSFORMED || gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE) - { - gBattleMoveFlags |= MOVESTATUS_FAILED; - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - } - else - { - u32 i; s32 j; - u8 *atk_data, *def_data; - gBattleMons[gBankAttacker].status2 |= STATUS2_TRANSFORMED; - gDisableStructs[gBankAttacker].disabledMove = 0; - gDisableStructs[gBankAttacker].disableTimer1 = 0; - gDisableStructs[gBankAttacker].unk0 = gBattleMons[gBankTarget].personality; - gDisableStructs[gBankAttacker].unk18_b = 0; - - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 6; - gBattleTextBuff1[2] = (gBattleMons[gBankTarget].species); - gBattleTextBuff1[3] = uBYTE1_16(gBattleMons[gBankTarget].species); - gBattleTextBuff1[4] = 0xFF; - - atk_data = (u8*)(&gBattleMons[gBankAttacker]); - def_data = (u8*)(&gBattleMons[gBankTarget]); - - for (i = 0; i < 0x24; i++) - atk_data[i] = def_data[i]; - - for (j = 0; j < 4; j++) - { - if (gBattleMoves[gBattleMons[gBankAttacker].moves[j]].pp < 5) - gBattleMons[gBankAttacker].pp[j] = gBattleMoves[gBattleMons[gBankAttacker].moves[j]].pp; - else - gBattleMons[gBankAttacker].pp[j] = 5; - } - - gActiveBank = gBankAttacker; - EmitResetActionMoveSelection(0, 2); - MarkBufferBankForExecution(gActiveBank); - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - } -} - -static void atk9C_set_substitute(void) -{ - u32 hp = gBattleMons[gBankAttacker].maxHP / 4; - if (gBattleMons[gBankAttacker].maxHP / 4 == 0) - hp = 1; - if (gBattleMons[gBankAttacker].hp <= hp) - { - gBattleMoveDamage = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - } - else - { - gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 4; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMons[gBankAttacker].status2 |= STATUS2_SUBSTITUTE; - gBattleMons[gBankAttacker].status2 &= ~(STATUS2_WRAPPED); - gDisableStructs[gBankAttacker].substituteHP = gBattleMoveDamage; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE; - } - gBattlescriptCurrInstr++; -} - -static bool8 IsMoveUncopyable(u16 move) -{ - int i; - for (i = 0; sUnknown_081FACFE[i] != 0xFFFE && sUnknown_081FACFE[i] != move; i++) {} - return (sUnknown_081FACFE[i] != 0xFFFE); -} - -static void atk9D_copyattack(void) -{ - gUnknown_02024BE8 = 0xFFFF; - if (IsMoveUncopyable(gLastUsedMove[gBankTarget]) || gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED - || gLastUsedMove[gBankTarget] == 0 || gLastUsedMove[gBankTarget] == 0xFFFF) - { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } - else - { - int i; - for (i = 0; i < 4; i++) - { - if (gBattleMons[gBankAttacker].moves[i] == gLastUsedMove[gBankTarget]) - break; - } - if (i == 4) - { - gBattleMons[gBankAttacker].moves[gCurrMovePos] = gLastUsedMove[gBankTarget]; - if (gBattleMoves[gLastUsedMove[gBankTarget]].pp < 5) - gBattleMons[gBankAttacker].pp[gCurrMovePos] = gBattleMoves[gLastUsedMove[gBankTarget]].pp; - else - gBattleMons[gBankAttacker].pp[gCurrMovePos] = 5; - - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = gLastUsedMove[gBankTarget]; - gBattleTextBuff1[3] = uBYTE1_16(gLastUsedMove[gBankTarget]); - gBattleTextBuff1[4] = 0xFF; - - gDisableStructs[gBankAttacker].unk18_b |= gBitTable[gCurrMovePos]; - gBattlescriptCurrInstr += 5; - } - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } -} - -#ifdef NONMATCHING -static void atk9E_metronome(void) -{ - // sUnknown_081FACFE - int i; - do - { - while ((gCurrentMove = (Random() & 0x1FF) + 1) > 0x162); - for (i = 0; sUnknown_081FACFE[i] != gCurrentMove && sUnknown_081FACFE[i] != 0xFFFF; i++); - } while (sUnknown_081FACFE[i] != 0xFFFF); - - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); - gBattlescriptCurrInstr = gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]; - gBankTarget = sub_801B5C0(gCurrentMove, 0); -} - -#else -__attribute__((naked)) -static void atk9E_metronome(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - ldr r7, _08027938 @ =gCurrentMove\n\ - movs r6, 0xB1\n\ - lsls r6, 1\n\ - ldr r5, _0802793C @ =sUnknown_081FACFE\n\ - ldr r0, _08027940 @ =gBattlescriptCurrInstr\n\ - mov r8, r0\n\ -_080278CA:\n\ - bl Random\n\ - ldr r2, _08027944 @ =0x000001ff\n\ - adds r1, r2, 0\n\ - ands r0, r1\n\ - adds r0, 0x1\n\ - strh r0, [r7]\n\ - cmp r0, r6\n\ - bhi _080278CA\n\ - movs r0, 0x3\n\ -_080278DE:\n\ - subs r0, 0x1\n\ - cmp r0, 0\n\ - bge _080278DE\n\ - ldr r4, _08027938 @ =gCurrentMove\n\ - ldrh r2, [r4]\n\ - ldr r3, _08027948 @ =0x0000ffff\n\ - subs r0, r5, 0x2\n\ -_080278EC:\n\ - adds r0, 0x2\n\ - ldrh r1, [r0]\n\ - cmp r1, r2\n\ - beq _080278F8\n\ - cmp r1, r3\n\ - bne _080278EC\n\ -_080278F8:\n\ - ldr r0, _08027948 @ =0x0000ffff\n\ - cmp r1, r0\n\ - bne _080278CA\n\ - ldr r2, _0802794C @ =gHitMarker\n\ - ldr r0, [r2]\n\ - ldr r1, _08027950 @ =0xfffffbff\n\ - ands r0, r1\n\ - str r0, [r2]\n\ - ldr r3, _08027954 @ =gBattleScriptsEffectsTable\n\ - ldr r2, _08027958 @ =gBattleMoves\n\ - ldrh r1, [r4]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - ldr r0, [r0]\n\ - mov r1, r8\n\ - str r0, [r1]\n\ - ldrh r0, [r4]\n\ - movs r1, 0\n\ - bl sub_801B5C0\n\ - ldr r1, _0802795C @ =gBankTarget\n\ - strb r0, [r1]\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08027938: .4byte gCurrentMove\n\ -_0802793C: .4byte sUnknown_081FACFE\n\ -_08027940: .4byte gBattlescriptCurrInstr\n\ -_08027944: .4byte 0x000001ff\n\ -_08027948: .4byte 0x0000ffff\n\ -_0802794C: .4byte gHitMarker\n\ -_08027950: .4byte 0xfffffbff\n\ -_08027954: .4byte gBattleScriptsEffectsTable\n\ -_08027958: .4byte gBattleMoves\n\ -_0802795C: .4byte gBankTarget\n\ - .syntax divided"); -} -#endif // NONMATCHING - -static void atk9F_dmgtolevel(void) -{ - gBattleMoveDamage = gBattleMons[gBankAttacker].level; - gBattlescriptCurrInstr++; -} - -static void atkA0_psywavedamageeffect(void) -{ - s32 rand_dmg; - while ((rand_dmg = (Random() & 0xF)) > 0xA); - rand_dmg *= 10; - gBattleMoveDamage = gBattleMons[gBankAttacker].level * (rand_dmg + 50) / 100; - gBattlescriptCurrInstr++; -} - -static void atkA1_counterdamagecalculator(void) -{ - u8 atk_side = GetBankSide(gBankAttacker); - u8 def_side = GetBankSide(gProtectStructs[gBankAttacker].physicalBank); - if (gProtectStructs[gBankAttacker].physicalDmg && atk_side != def_side && gBattleMons[gProtectStructs[gBankAttacker].physicalBank].hp) - { - gBattleMoveDamage = gProtectStructs[gBankAttacker].physicalDmg * 2; - if (gSideTimer[def_side].followmeTimer && gBattleMons[gSideTimer[def_side].followmeTarget].hp) - gBankTarget = gSideTimer[def_side].followmeTarget; - else - gBankTarget = gProtectStructs[gBankAttacker].physicalBank; - gBattlescriptCurrInstr += 5; - } - else - { - gSpecialStatuses[gBankAttacker].flag20 = 1; - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } -} - -static void atkA2_mirrorcoatdamagecalculator(void) //a copy of atkA1 with the physical -> special field changes -{ - u8 atk_side = GetBankSide(gBankAttacker); - u8 def_side = GetBankSide(gProtectStructs[gBankAttacker].specialBank); - if (gProtectStructs[gBankAttacker].specialDmg && atk_side != def_side && gBattleMons[gProtectStructs[gBankAttacker].specialBank].hp) - { - gBattleMoveDamage = gProtectStructs[gBankAttacker].specialDmg * 2; - if (gSideTimer[def_side].followmeTimer && gBattleMons[gSideTimer[def_side].followmeTarget].hp) - gBankTarget = gSideTimer[def_side].followmeTarget; - else - gBankTarget = gProtectStructs[gBankAttacker].specialBank; - gBattlescriptCurrInstr += 5; - } - else - { - gSpecialStatuses[gBankAttacker].flag20 = 1; - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } -} - -static void atkA3_disablelastusedattack(void) -{ - int i; - for (i = 0; i < 4; i++) - { - if (gBattleMons[gBankTarget].moves[i] == gLastUsedMove[gBankTarget]) - break; - } - if (gDisableStructs[gBankTarget].disabledMove == 0 && i != 4 && gBattleMons[gBankTarget].pp[i] != 0) - { - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = gBattleMons[gBankTarget].moves[i]; - gBattleTextBuff1[3] = uBYTE1_16(gBattleMons[gBankTarget].moves[i]); - gBattleTextBuff1[4] = 0xFF; - - gDisableStructs[gBankTarget].disabledMove = gBattleMons[gBankTarget].moves[i]; - gDisableStructs[gBankTarget].disableTimer1 = (Random() & 3) + 2; - gDisableStructs[gBankTarget].disableTimer2 = gDisableStructs[gBankTarget].disableTimer1; //that's interesting - gBattlescriptCurrInstr += 5; - } - else - { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } -} - -static void atkA4_setencore(void) -{ - int i; - for (i = 0; i < 4; i++) - { - if (gBattleMons[gBankTarget].moves[i] == gLastUsedMove[gBankTarget]) - break; - } - if (gLastUsedMove[gBankTarget] == MOVE_STRUGGLE || gLastUsedMove[gBankTarget] == MOVE_ENCORE || gLastUsedMove[gBankTarget] == MOVE_MIRROR_MOVE) - i = 4; - if (gDisableStructs[gBankTarget].encoredMove == 0 && i != 4 && gBattleMons[gBankTarget].pp[i] != 0) - { - gDisableStructs[gBankTarget].encoredMove = gBattleMons[gBankTarget].moves[i]; - gDisableStructs[gBankTarget].encoredMovePos = i; - gDisableStructs[gBankTarget].encoreTimer1 = (Random() & 3) + 3; - gDisableStructs[gBankTarget].encoreTimer2 = gDisableStructs[gBankTarget].encoreTimer1; - gBattlescriptCurrInstr += 5; - } - else - { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } -} - -static void atkA5_painsplitdmgcalc(void) -{ - if (!(gBattleMons[gBankTarget].status2 & STATUS2_SUBSTITUTE)) - { - s32 hp_diff = (gBattleMons[gBankAttacker].hp + gBattleMons[gBankTarget].hp) / 2; - s32 to_store = gBattleMoveDamage = gBattleMons[gBankTarget].hp - hp_diff; - BATTLE_STRUCT->unk16014 = sBYTE0_32(to_store); - BATTLE_STRUCT->unk16015 = sBYTE1_32(to_store); - BATTLE_STRUCT->unk16016 = sBYTE2_32(to_store); - BATTLE_STRUCT->unk16017 = sBYTE3_32(to_store); - - gBattleMoveDamage = gBattleMons[gBankAttacker].hp - hp_diff; - gSpecialStatuses[gBankTarget].moveturnLostHP = 0xFFFF; - - gBattlescriptCurrInstr += 5; - } - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -#ifdef NONMATCHING -static void atkA6_settypetorandomresistance(void) -{ - if (gMoveHitWith[gBankAttacker] == 0 || gMoveHitWith[gBankAttacker] == 0xFFFF || (IsTwoTurnsMove(gMoveHitWith[gBankAttacker]) && !gProtectStructs[gBankAttacker].physicalDmg && !gProtectStructs[gBankAttacker].specialDmg)) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - { - int type = 0, rands = 0; - do - { - while (((type = (Random() & 0x7F)) > 0x70)); - type *= 3; - if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1]) - { - gBattleMons[gBankAttacker].type1 = type; - gBattleMons[gBankAttacker].type2 = type; - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 3; - gBattleTextBuff1[2] = type; - gBattleTextBuff1[3] = 0xFF; - gBattlescriptCurrInstr += 5; - return; - } - rands++; - } while (rands <= 999); - - type = 0, rands = 0; - do - { - if (gTypeEffectiveness[type] == 0xFE || gTypeEffectiveness[type] != 0xFF) - { - if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1]) - { - gBattleMons[gBankAttacker].type1 = gTypeEffectiveness[rands + 1]; - gBattleMons[gBankAttacker].type2 = gTypeEffectiveness[rands + 1]; - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 3; - gBattleTextBuff1[2] = gTypeEffectiveness[rands + 1]; - gBattleTextBuff1[3] = 0xFF; - gBattlescriptCurrInstr += 5; - return; - } - } - type += 3, rands += 3; - } while (rands < 336); - - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } -} - -#else -__attribute__((naked)) -static void atkA6_settypetorandomresistance(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\ - ldr r1, _08027FA8 @ =gMoveHitWith\n\ - ldr r4, _08027FAC @ =gBankAttacker\n\ - ldrb r0, [r4]\n\ - lsls r0, 1\n\ - adds r2, r0, r1\n\ - ldrh r1, [r2]\n\ - cmp r1, 0\n\ - beq _08027F8C\n\ - ldr r0, _08027FB0 @ =0x0000ffff\n\ - cmp r1, r0\n\ - beq _08027F8C\n\ - ldrh r0, [r2]\n\ - bl IsTwoTurnsMove\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08028024\n\ - ldr r2, _08027FB4 @ =gProtectStructs\n\ - ldrb r0, [r4]\n\ - lsls r1, r0, 4\n\ - adds r0, r2, 0x4\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08028024\n\ - adds r0, r2, 0\n\ - adds r0, 0x8\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08028024\n\ -_08027F8C:\n\ - ldr r3, _08027FB8 @ =gBattlescriptCurrInstr\n\ - ldr r2, [r3]\n\ - ldrb r1, [r2, 0x1]\n\ - ldrb r0, [r2, 0x2]\n\ - lsls r0, 8\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x3]\n\ - lsls r0, 16\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x4]\n\ - lsls r0, 24\n\ - orrs r1, r0\n\ - str r1, [r3]\n\ - b _08028110\n\ - .align 2, 0\n\ -_08027FA8: .4byte gMoveHitWith\n\ -_08027FAC: .4byte gBankAttacker\n\ -_08027FB0: .4byte 0x0000ffff\n\ -_08027FB4: .4byte gProtectStructs\n\ -_08027FB8: .4byte gBattlescriptCurrInstr\n\ -_08027FBC:\n\ - mov r0, r12\n\ - strb r5, [r0]\n\ - mov r1, r10\n\ - ldrb r0, [r1]\n\ - muls r0, r2\n\ - adds r0, r7\n\ - adds r0, 0x22\n\ - strb r5, [r0]\n\ - ldr r1, _08027FE0 @ =gBattleTextBuff1\n\ - movs r0, 0xFD\n\ - strb r0, [r1]\n\ - movs r0, 0x3\n\ - strb r0, [r1, 0x1]\n\ - strb r5, [r1, 0x2]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x3]\n\ - ldr r1, _08027FE4 @ =gBattlescriptCurrInstr\n\ - b _08028012\n\ - .align 2, 0\n\ -_08027FE0: .4byte gBattleTextBuff1\n\ -_08027FE4: .4byte gBattlescriptCurrInstr\n\ -_08027FE8:\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - adds r0, r3\n\ - ldrb r2, [r0]\n\ - strb r2, [r4]\n\ - mov r4, r10\n\ - ldrb r0, [r4]\n\ - muls r0, r6\n\ - ldr r7, _0802801C @ =gBattleMons\n\ - adds r0, r7\n\ - adds r0, 0x22\n\ - strb r2, [r0]\n\ - ldr r1, _08028020 @ =gBattleTextBuff1\n\ - movs r0, 0xFD\n\ - strb r0, [r1]\n\ - movs r0, 0x3\n\ - strb r0, [r1, 0x1]\n\ - strb r2, [r1, 0x2]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x3]\n\ - mov r1, r12\n\ -_08028012:\n\ - ldr r0, [r1]\n\ - adds r0, 0x5\n\ - str r0, [r1]\n\ - b _08028110\n\ - .align 2, 0\n\ -_0802801C: .4byte gBattleMons\n\ -_08028020: .4byte gBattleTextBuff1\n\ -_08028024:\n\ - movs r4, 0\n\ - mov r8, r4\n\ - movs r7, 0x7F\n\ - mov r9, r7\n\ -_0802802C:\n\ - bl Random\n\ - mov r4, r9\n\ - ands r4, r0\n\ - cmp r4, 0x70\n\ - bhi _0802802C\n\ - lsls r0, r4, 1\n\ - adds r4, r0, r4\n\ - ldr r6, _08028120 @ =gTypeEffectiveness\n\ - adds r3, r4, r6\n\ - ldr r1, _08028124 @ =gUnknown_02024C44\n\ - ldr r2, _08028128 @ =gBankAttacker\n\ - ldrb r5, [r2]\n\ - lsls r0, r5, 1\n\ - adds r0, r1\n\ - ldrb r1, [r3]\n\ - mov r10, r2\n\ - ldrh r0, [r0]\n\ - cmp r1, r0\n\ - bne _08028088\n\ - adds r0, r4, 0x2\n\ - adds r0, r6\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x5\n\ - bhi _08028088\n\ - ldr r7, _0802812C @ =gBattleMons\n\ - movs r2, 0x58\n\ - adds r0, r5, 0\n\ - muls r0, r2\n\ - adds r3, r0, r7\n\ - movs r0, 0x21\n\ - adds r0, r3\n\ - mov r12, r0\n\ - adds r0, r4, 0x1\n\ - adds r0, r6\n\ - ldrb r5, [r0]\n\ - mov r1, r12\n\ - ldrb r0, [r1]\n\ - adds r1, r5, 0\n\ - cmp r0, r1\n\ - beq _08028088\n\ - adds r0, r3, 0\n\ - adds r0, 0x22\n\ - ldrb r0, [r0]\n\ - cmp r0, r1\n\ - bne _08027FBC\n\ -_08028088:\n\ - movs r7, 0x1\n\ - add r8, r7\n\ - ldr r0, _08028130 @ =0x000003e7\n\ - cmp r8, r0\n\ - ble _0802802C\n\ - movs r0, 0\n\ - mov r8, r0\n\ - ldr r1, _08028134 @ =gBattlescriptCurrInstr\n\ - mov r12, r1\n\ - ldr r3, _08028120 @ =gTypeEffectiveness\n\ - adds r0, r4, 0x1\n\ - adds r0, r3\n\ - mov r9, r0\n\ - adds r5, r3, 0\n\ -_080280A4:\n\ - ldrb r1, [r5]\n\ - cmp r1, 0xFF\n\ - bgt _080280AE\n\ - cmp r1, 0xFE\n\ - bge _080280E8\n\ -_080280AE:\n\ - mov r4, r10\n\ - ldrb r2, [r4]\n\ - lsls r0, r2, 1\n\ - ldr r7, _08028124 @ =gUnknown_02024C44\n\ - adds r0, r7\n\ - ldrh r0, [r0]\n\ - cmp r1, r0\n\ - bne _080280E8\n\ - ldrb r0, [r5, 0x2]\n\ - cmp r0, 0x5\n\ - bhi _080280E8\n\ - movs r6, 0x58\n\ - adds r0, r2, 0\n\ - muls r0, r6\n\ - ldr r1, _0802812C @ =gBattleMons\n\ - adds r2, r0, r1\n\ - adds r4, r2, 0\n\ - adds r4, 0x21\n\ - ldrb r0, [r4]\n\ - mov r7, r9\n\ - ldrb r1, [r7]\n\ - cmp r0, r1\n\ - beq _080280E8\n\ - adds r0, r2, 0\n\ - adds r0, 0x22\n\ - ldrb r0, [r0]\n\ - cmp r0, r1\n\ - beq _080280E8\n\ - b _08027FE8\n\ -_080280E8:\n\ - adds r5, 0x3\n\ - movs r0, 0x3\n\ - add r8, r0\n\ - ldr r0, _08028138 @ =0x0000014f\n\ - cmp r8, r0\n\ - bls _080280A4\n\ - mov r1, r12\n\ - ldr r2, [r1]\n\ - ldrb r1, [r2, 0x1]\n\ - ldrb r0, [r2, 0x2]\n\ - lsls r0, 8\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x3]\n\ - lsls r0, 16\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x4]\n\ - lsls r0, 24\n\ - orrs r1, r0\n\ - mov r4, r12\n\ - str r1, [r4]\n\ -_08028110:\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\ -_08028120: .4byte gTypeEffectiveness\n\ -_08028124: .4byte gUnknown_02024C44\n\ -_08028128: .4byte gBankAttacker\n\ -_0802812C: .4byte gBattleMons\n\ -_08028130: .4byte 0x000003e7\n\ -_08028134: .4byte gBattlescriptCurrInstr\n\ -_08028138: .4byte 0x0000014f\n\ - .syntax divided"); -} -#endif // NONMATCHING - -static void atkA7_setalwayshitflag(void) -{ - gStatuses3[gBankTarget] &= ~(STATUS3_ALWAYS_HITS); - gStatuses3[gBankTarget] |= 0x10; - gDisableStructs[gBankTarget].bankWithSureHit = gBankAttacker; - gBattlescriptCurrInstr++; -} - -struct move_pp -{ - u16 move[4]; - u8 pp[4]; - u8 ppBonuses; -}; - -static void atkA8_copymovepermanently(void) -{ - gUnknown_02024BE8 = 0xFFFF; - if (!(gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED) && gUnknown_02024C2C[gBankTarget] != MOVE_STRUGGLE && gUnknown_02024C2C[gBankTarget] != 0 && gUnknown_02024C2C[gBankTarget] != 0xFFFF && gUnknown_02024C2C[gBankTarget] != MOVE_SKETCH) - { - int i; - for (i = 0; i < 4; i++) - { - if (gBattleMons[gBankAttacker].moves[i] == MOVE_SKETCH) - continue; - if (gBattleMons[gBankAttacker].moves[i] == gUnknown_02024C2C[gBankTarget]) - break; - } - if (i != 4) //sketch fail - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else //sketch worked - { - struct move_pp moves_data; - gBattleMons[gBankAttacker].moves[gCurrMovePos] = gUnknown_02024C2C[gBankTarget]; - gBattleMons[gBankAttacker].pp[gCurrMovePos] = gBattleMoves[gUnknown_02024C2C[gBankTarget]].pp; - gActiveBank = gBankAttacker; - for (i = 0; i < 4; i++) - { - moves_data.move[i] = gBattleMons[gBankAttacker].moves[i]; - moves_data.pp[i] = gBattleMons[gBankAttacker].pp[i]; - } - moves_data.ppBonuses = gBattleMons[gBankAttacker].ppBonuses; - EmitSetAttributes(0, REQUEST_MOVES_PP_BATTLE, 0, sizeof(struct move_pp), &moves_data); - MarkBufferBankForExecution(gActiveBank); - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = gUnknown_02024C2C[gBankTarget]; - gBattleTextBuff1[3] = gUnknown_02024C2C[gBankTarget] >> 8; - gBattleTextBuff1[4] = 0xFF; - gBattlescriptCurrInstr += 5; - } - } - else //sketch fail - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -static bool8 IsTwoTurnsMove(u16 move) -{ - u8 effect = gBattleMoves[move].effect; - if (effect == EFFECT_SKULL_BASH || effect == EFFECT_RAZOR_WIND || effect == EFFECT_SKY_ATTACK || effect == EFFECT_SOLARBEAM || effect == EFFECT_FLY || effect == EFFECT_BIDE) - return 1; - else - return 0; -} - -static bool8 IsMoveUnchoosable(u16 move) -{ - if (move == 0 || move == MOVE_SLEEP_TALK || move == MOVE_ASSIST || move == MOVE_MIRROR_MOVE || move == MOVE_METRONOME) - return 1; - else - return 0; -} - -static u8 AttacksThisTurn(u8 bank, u16 move) //Note: returns 1 if it's a charging turn, otherwise 2 -{ - //first argument is unused - u8 effect; - if (gBattleMoves[move].effect == EFFECT_SOLARBEAM && (gBattleWeather & WEATHER_SUN_ANY)) - return 2; - effect = gBattleMoves[move].effect; - if (effect == EFFECT_SKULL_BASH || effect == EFFECT_RAZOR_WIND || effect == EFFECT_SKY_ATTACK || effect == EFFECT_SOLARBEAM || effect == EFFECT_FLY || effect == EFFECT_BIDE) - { - if ((gHitMarker & HITMARKER_x8000000)) - return 1; - } - return 2; -} - -static void atkA9_sleeptalk_choose_move(void) -{ - u8 unusable_moves = 0; - int i; - - for (i = 0; i < 4; i++) - { - if (IsMoveUnchoosable(gBattleMons[gBankAttacker].moves[i]) || gBattleMons[gBankAttacker].moves[i] == MOVE_FOCUS_PUNCH - || gBattleMons[gBankAttacker].moves[i] == MOVE_UPROAR || IsTwoTurnsMove(gBattleMons[gBankAttacker].moves[i])) - unusable_moves |= gBitTable[i]; - } - unusable_moves = sub_8015A98(gBankAttacker, unusable_moves, 0xFD); - if (unusable_moves == 0xF) //all 4 moves cannot be chosen - gBattlescriptCurrInstr += 5; - else //at least one move can be chosen - { - u32 random_pos; - do - { - random_pos = Random() & 3; - } while ((gBitTable[random_pos] & unusable_moves)); - - gRandomMove = gBattleMons[gBankAttacker].moves[random_pos]; - gCurrMovePos = random_pos; - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); - gBankTarget = sub_801B5C0(gRandomMove, 0); - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } -} - -static void atkAA_set_destinybond(void) -{ - gBattleMons[gBankAttacker].status2 |= STATUS2_DESTINY_BOND; - gBattlescriptCurrInstr++; -} - -static void DestinyBondFlagUpdate(void) -{ - u8 atk_side = GetBankSide(gBankAttacker); - u8 def_side = GetBankSide(gBankTarget); - if (gBattleMons[gBankTarget].status2 & STATUS2_DESTINY_BOND && atk_side != def_side && !(gHitMarker & HITMARKER_GRUDGE)) - gHitMarker |= HITMARKER_DESTINYBOND; -} - -static void atkAB_DestinyBondFlagUpdate(void) -{ - DestinyBondFlagUpdate(); - gBattlescriptCurrInstr++; -} - -static void atkAC_remaininghptopower(void) -{ - s32 hp_fraction = GetScaledHPFraction(gBattleMons[gBankAttacker].hp, gBattleMons[gBankAttacker].maxHP, 48); - int i; - for (i = 0; i < 12; i += 2) - { - if (hp_fraction <= sUnknown_081FAD26[i]) - break; - } - gDynamicBasePower = sUnknown_081FAD26[i + 1]; - gBattlescriptCurrInstr++; -} - -static void atkAD_spite_ppreduce(void) -{ - if (gLastUsedMove[gBankTarget] != 0 && gLastUsedMove[gBankTarget] != 0xFFFF && !(gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE)) - { - int i; - for (i = 0; i < 4; i++) - { - if (gLastUsedMove[gBankTarget] == gBattleMons[gBankTarget].moves[i]) - break; - } - if (i != 4 && gBattleMons[gBankTarget].pp[i] > 1) - { - s32 lost_pp = (Random() & 3) + 2; - if (gBattleMons[gBankTarget].pp[i] < lost_pp) - lost_pp = gBattleMons[gBankTarget].pp[i]; - - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = gLastUsedMove[gBankTarget]; - gBattleTextBuff1[3] = gLastUsedMove[gBankTarget] >> 8; - gBattleTextBuff1[4] = 0xFF; - ConvertIntToDecimalStringN(gBattleTextBuff2, lost_pp, 0, 1); - gBattleTextBuff2[0] = 0xFD; - gBattleTextBuff2[1] = 1; - gBattleTextBuff2[2] = 1; - gBattleTextBuff2[3] = 1; - gBattleTextBuff2[4] = lost_pp; - gBattleTextBuff2[5] = 0xFF; - - gBattleMons[gBankTarget].pp[i] -= lost_pp; - gActiveBank = gBankTarget; - if (!(gDisableStructs[gActiveBank].unk18_b & gBitTable[i]) - && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) - { - EmitSetAttributes(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBank].pp[i]); - MarkBufferBankForExecution(gActiveBank); - } - gBattlescriptCurrInstr += 5; - if (gBattleMons[gBankTarget].pp[i] == 0) - CancelMultiTurnMoves(gBankTarget); - return; - } - } - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -static void atkAE_heal_party_status(void) -{ - register u32 zero2 asm("r4") = 0; - u32 zero = zero2; - u8 to_heal = 0; - if (gCurrentMove == MOVE_HEAL_BELL) - { - struct Pokemon* party; - int i; - - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - if (GetBankSide(gBankAttacker) == 0) - party = gPlayerParty; - else - party = gEnemyParty; - - if (gBattleMons[gBankAttacker].ability != ABILITY_SOUNDPROOF) - { - gBattleMons[gBankAttacker].status1 = 0; - } - else - { - RecordAbilityBattle(gBankAttacker, gBattleMons[gBankAttacker].ability); - gBattleCommunication[MULTISTRING_CHOOSER] |= 1; - } - - gActiveBank = BATTLE_STRUCT->scriptingActive = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank])) - { - if (gBattleMons[gActiveBank].ability != ABILITY_SOUNDPROOF) - { - gBattleMons[gActiveBank].status1 = 0; - } - else - { - RecordAbilityBattle(gActiveBank, gBattleMons[gActiveBank].ability); - gBattleCommunication[MULTISTRING_CHOOSER] |= 2; - } - } - - for (i = 0; i < 6; i++) - { - u16 species = GetMonData(&party[i], MON_DATA_SPECIES2); - u8 abilityBit = GetMonData(&party[i], MON_DATA_ALT_ABILITY); - if (species != 0 && species != SPECIES_EGG) - { - u8 ability; - if (gBattlePartyID[gBankAttacker] == i) - ability = gBattleMons[gBankAttacker].ability; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[gActiveBank] == i && !(gAbsentBankFlags & gBitTable[gActiveBank])) - ability = gBattleMons[gActiveBank].ability; - else - ability = GetAbilityBySpecies(species, abilityBit); - if (ability != ABILITY_SOUNDPROOF) - to_heal |= (1 << i); - } - } - } - else //Aromatherapy - { - gBattleCommunication[MULTISTRING_CHOOSER] = 4; - to_heal = 0x3F; - gBattleMons[gBankAttacker].status1 = zero2; - - gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank])) - gBattleMons[gActiveBank].status1 = 0; - - } - //missing check? - gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, to_heal, 4, &zero); - MarkBufferBankForExecution(gActiveBank); - - gBattlescriptCurrInstr++; -} - -static void atkAF_cursetarget(void) -{ - if (gBattleMons[gBankTarget].status2 & STATUS2_CURSED || gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE) - { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } - else - { - gBattleMons[gBankTarget].status2 |= STATUS2_CURSED; - gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 2; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattlescriptCurrInstr += 5; - } -} - -static void atkB0_set_spikes(void) -{ - u8 side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimer[side].spikesAmount == 3) - { - gSpecialStatuses[gBankAttacker].flag20 = 1; - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } - else - { - gSideAffecting[side] |= SIDE_STATUS_SPIKES; - gSideTimer[side].spikesAmount++; - gBattlescriptCurrInstr += 5; - } -} - -static void atkB1_set_foresight(void) -{ - gBattleMons[gBankTarget].status2 |= STATUS2_FORESIGHT; - gBattlescriptCurrInstr++; -} - -static void atkB2_setperishsong(void) -{ - int not_affected_pokes = 0, i; - - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gStatuses3[i] & STATUS3_PERISH_SONG || gBattleMons[i].ability == ABILITY_SOUNDPROOF) - not_affected_pokes++; - else - { - gStatuses3[i] |= STATUS3_PERISH_SONG; - gDisableStructs[i].perishSong1 = 3; - gDisableStructs[i].perishSong2 = 3; - } - } - - sub_80153D0(gBankAttacker); - if (not_affected_pokes == gNoOfAllBanks) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - gBattlescriptCurrInstr += 5; -} - -static void atkB3_rolloutdamagecalculation(void) -{ - if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) - { - CancelMultiTurnMoves(gBankAttacker); - gBattlescriptCurrInstr = BattleScript_1D6F74; - } - else - { - int i; - if (!(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) //first hit - { - gDisableStructs[gBankAttacker].rolloutTimer1 = 5; - gDisableStructs[gBankAttacker].rolloutTimer2 = 5; - gBattleMons[gBankAttacker].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gBankAttacker] = gCurrentMove; - } - if (--gDisableStructs[gBankAttacker].rolloutTimer1 == 0) - gBattleMons[gBankAttacker].status2 &= ~(STATUS2_MULTIPLETURNS); - - gDynamicBasePower = gBattleMoves[gCurrentMove].power; - for (i = 1; i < (5 - gDisableStructs[gBankAttacker].rolloutTimer1); i++) - gDynamicBasePower *= 2; - - if (gBattleMons[gBankAttacker].status2 & STATUS2_DEFENSE_CURL) - gDynamicBasePower *= 2; - - gBattlescriptCurrInstr++; - } -} - -static void atkB4_jumpifconfusedandstatmaxed(void) -{ - if (gBattleMons[gBankTarget].status2 & STATUS2_CONFUSION && gBattleMons[gBankTarget].statStages[BSScriptRead8(gBattlescriptCurrInstr + 1)] == 0xC) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); - else - gBattlescriptCurrInstr += 6; -} - -static void atkB5_furycuttercalc(void) -{ - if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) - { - gDisableStructs[gBankAttacker].furyCutterCounter = 0; - gBattlescriptCurrInstr = BattleScript_1D6F74; - } - else - { - int i; - - if (gDisableStructs[gBankAttacker].furyCutterCounter != 5) - gDisableStructs[gBankAttacker].furyCutterCounter++; - - gDynamicBasePower = gBattleMoves[gCurrentMove].power; - for (i = 1; i < gDisableStructs[gBankAttacker].furyCutterCounter; i++) - gDynamicBasePower *= 2; - - gBattlescriptCurrInstr++; - } -} - -static void atkB6_happinesstodamagecalculation(void) -{ - if (gBattleMoves[gCurrentMove].effect == EFFECT_RETURN) - gDynamicBasePower = 10 * (gBattleMons[gBankAttacker].friendship) / 25; - else //EFFECT_FRUSTRATION - gDynamicBasePower = 10 * (255 - gBattleMons[gBankAttacker].friendship) / 25; - gBattlescriptCurrInstr++; -} - -static void atkB7_presentdamagecalculation(void) -{ - s32 rand = Random() & 0xFF; - if (rand < 102) - gDynamicBasePower = 40; - else if (rand < 178) - gDynamicBasePower = 80; - else if (rand < 204) - gDynamicBasePower = 120; - else - { - gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 4; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMoveDamage *= -1; - } - if (rand < 204) - gBattlescriptCurrInstr = BattleScript_1D6F44; - else if (gBattleMons[gBankTarget].maxHP == gBattleMons[gBankTarget].hp) - gBattlescriptCurrInstr = BattleScript_1D83B5; - else - { - //gBattleMoveFlags &= ~(MOVESTATUS_NOTAFFECTED); only in Emerald - gBattlescriptCurrInstr = BattleScript_1D839B; - } -} - -static void atkB8_set_safeguard(void) -{ - if (gSideAffecting[GetBankIdentity(gBankAttacker) & 1] & SIDE_STATUS_SAFEGUARD) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - } - else - { - gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_SAFEGUARD; - gSideTimer[GetBankIdentity(gBankAttacker) & 1].safeguardTimer = 5; - gBattleCommunication[MULTISTRING_CHOOSER] = 5; - } - gBattlescriptCurrInstr++; -} - -static void atkB9_magnitudedamagecalculation(void) -{ - s32 magnitude = Random() % 100; - if (magnitude < 5) - { - gDynamicBasePower = 10; - magnitude = 4; - } - else if (magnitude < 15) - { - gDynamicBasePower = 30; - magnitude = 5; - } - else if (magnitude < 35) - { - gDynamicBasePower = 50; - magnitude = 6; - } - else if (magnitude < 65) - { - gDynamicBasePower = 70; - magnitude = 7; - } - else if (magnitude < 85) - { - gDynamicBasePower = 90; - magnitude = 8; - } - else if (magnitude < 95) - { - gDynamicBasePower = 110; - magnitude = 9; - } - else - { - gDynamicBasePower = 150; - magnitude = 10; - } - - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 1; - gBattleTextBuff1[2] = 1; - gBattleTextBuff1[3] = 2; - gBattleTextBuff1[4] = magnitude; - gBattleTextBuff1[5] = 0xFF; - - for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++) - { - if (gBankTarget == gBankAttacker) - continue; - if (!(gAbsentBankFlags & gBitTable[gBankTarget])) //a valid target was found - break; - } - gBattlescriptCurrInstr++; -} - -static void atkBA_jumpifnopursuitswitchdmg(void) -{ - if (gMultiHitCounter == 1) - { - if (GetBankSide(gBankAttacker) == 0) - gBankTarget = GetBankByPlayerAI(1); - else - gBankTarget = GetBankByPlayerAI(0); - } - else - { - if (GetBankSide(gBankAttacker) == 0) - gBankTarget = GetBankByPlayerAI(3); - else - gBankTarget = GetBankByPlayerAI(2); - } - - if (gActionForBanks[gBankTarget] == 0 && gBankAttacker == ewram[gBankTarget + 0x16010] && !(gBattleMons[gBankTarget].status1 & (STATUS_SLEEP | STATUS_FREEZE)) - && gBattleMons[gBankAttacker].hp && !gDisableStructs[gBankTarget].truantCounter && gChosenMovesByBanks[gBankTarget] == MOVE_PURSUIT) - { - int i; - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gTurnOrder[i] == gBankTarget) - gUnknown_02024A76[i] = 11; - } - gCurrentMove = MOVE_PURSUIT; - gBattlescriptCurrInstr += 5; - BATTLE_STRUCT->animTurn = 1; - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); - } - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -static void atkBB_setsunny(void) -{ - if (gBattleWeather & WEATHER_SUN_ANY) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - } - else - { - gBattleWeather = WEATHER_SUN_TEMPORARY; - gBattleCommunication[MULTISTRING_CHOOSER] = 4; - gWishFutureKnock.weatherDuration = 5; - } - gBattlescriptCurrInstr++; -} - -static void atkBC_maxattackhalvehp(void) //belly drum -{ - u32 half_hp = gBattleMons[gBankAttacker].maxHP / 2; - if (!(gBattleMons[gBankAttacker].maxHP / 2)) - half_hp = 1; - - if (gBattleMons[gBankAttacker].statStages[STAT_STAGE_ATK] < 12 && gBattleMons[gBankAttacker].hp > half_hp) - { - gBattleMons[gBankAttacker].statStages[STAT_STAGE_ATK] = 12; - gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 2; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattlescriptCurrInstr += 5; - } - else - { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } -} - -static void atkBD_copyfoestats(void) //psych up -{ - int i; - for (i = 0; i < 8; i++) - { - gBattleMons[gBankAttacker].statStages[i] = gBattleMons[gBankTarget].statStages[i]; - } - gBattlescriptCurrInstr += 5; //why not 1? possible unused fail possibility? -} - -static void atkBE_breakfree(void) //rapid spin -{ - if (gBattleMons[gBankAttacker].status2 & STATUS2_WRAPPED) - { - gBattleMons[gBankAttacker].status2 &= ~(STATUS2_WRAPPED); - gBankTarget = ewram[gBankAttacker + 0x16020]; - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = ewram[gBankAttacker * 2 + 0x16004]; - gBattleTextBuff1[3] = ewram[gBankAttacker * 2 + 0x16005]; - gBattleTextBuff1[4] = 0xFF; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_WrapFree; - } - else if (gStatuses3[gBankAttacker] & STATUS3_LEECHSEED) - { - gStatuses3[gBankAttacker] &= ~(STATUS3_LEECHSEED); - gStatuses3[gBankAttacker] &= ~(STATUS3_LEECHSEED_BANK); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_LeechSeedFree; - } - else if (gSideAffecting[GetBankSide(gBankAttacker)] & SIDE_STATUS_SPIKES) - { - gSideAffecting[GetBankSide(gBankAttacker)] &= ~(SIDE_STATUS_SPIKES); - gSideTimer[GetBankSide(gBankAttacker)].spikesAmount = 0; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_SpikesFree; - } - else - gBattlescriptCurrInstr++; -} - -static void atkBF_set_defense_curl(void) -{ - gBattleMons[gBankAttacker].status2 |= STATUS2_DEFENSE_CURL; - gBattlescriptCurrInstr++; -} - -static void atkC0_recoverbasedonsunlight(void) -{ - gBankTarget = gBankAttacker; - if (gBattleMons[gBankAttacker].hp != gBattleMons[gBankAttacker].maxHP) - { - if (!gBattleWeather || !WEATHER_HAS_EFFECT) - gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 2; - else if (gBattleWeather & WEATHER_SUN_ANY) - gBattleMoveDamage = 20 * gBattleMons[gBankAttacker].maxHP / 30; - else //not sunny weather - gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 4; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMoveDamage *= -1; - gBattlescriptCurrInstr += 5; - } - else - { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } -} - -__attribute__((naked)) -static void atkC1_hidden_power(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\ - ldr r2, _08029894 @ =gBattleMons\n\ - ldr r0, _08029898 @ =gBankAttacker\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - adds r4, r1, 0\n\ - muls r4, r0\n\ - adds r4, r2\n\ - ldrb r0, [r4, 0x14]\n\ - mov r10, r0\n\ - mov r7, r10\n\ - lsls r7, 27\n\ - adds r0, r7, 0\n\ - lsrs r0, 27\n\ - mov r10, r0\n\ - movs r1, 0x2\n\ - mov r2, r10\n\ - ands r2, r1\n\ - asrs r2, 1\n\ - ldrh r7, [r4, 0x14]\n\ - mov r9, r7\n\ - mov r0, r9\n\ - lsls r0, 22\n\ - mov r9, r0\n\ - lsrs r3, r0, 27\n\ - adds r0, r1, 0\n\ - ands r0, r3\n\ - orrs r2, r0\n\ - ldrb r7, [r4, 0x15]\n\ - mov r8, r7\n\ - mov r0, r8\n\ - lsls r0, 25\n\ - mov r8, r0\n\ - lsrs r3, r0, 27\n\ - adds r0, r1, 0\n\ - ands r0, r3\n\ - lsls r0, 1\n\ - orrs r2, r0\n\ - ldr r6, [r4, 0x14]\n\ - lsls r6, 12\n\ - lsrs r3, r6, 27\n\ - adds r0, r1, 0\n\ - ands r0, r3\n\ - lsls r0, 2\n\ - orrs r2, r0\n\ - ldrh r5, [r4, 0x16]\n\ - lsls r5, 23\n\ - lsrs r3, r5, 27\n\ - adds r0, r1, 0\n\ - ands r0, r3\n\ - lsls r0, 3\n\ - orrs r2, r0\n\ - ldrb r3, [r4, 0x17]\n\ - lsls r3, 26\n\ - lsrs r0, r3, 27\n\ - ands r1, r0\n\ - lsls r1, 4\n\ - orrs r2, r1\n\ - movs r1, 0x1\n\ - adds r4, r1, 0\n\ - mov r7, r10\n\ - ands r4, r7\n\ - mov r0, r9\n\ - lsrs r0, 27\n\ - mov r9, r0\n\ - adds r0, r1, 0\n\ - mov r7, r9\n\ - ands r0, r7\n\ - lsls r0, 1\n\ - orrs r4, r0\n\ - mov r0, r8\n\ - lsrs r0, 27\n\ - mov r8, r0\n\ - adds r0, r1, 0\n\ - mov r7, r8\n\ - ands r0, r7\n\ - lsls r0, 2\n\ - orrs r4, r0\n\ - lsrs r6, 27\n\ - adds r0, r1, 0\n\ - ands r0, r6\n\ - lsls r0, 3\n\ - orrs r4, r0\n\ - lsrs r5, 27\n\ - adds r0, r1, 0\n\ - ands r0, r5\n\ - lsls r0, 4\n\ - orrs r4, r0\n\ - lsrs r3, 27\n\ - ands r1, r3\n\ - lsls r1, 5\n\ - orrs r4, r1\n\ - ldr r5, _0802989C @ =gDynamicBasePower\n\ - lsls r0, r2, 2\n\ - adds r0, r2\n\ - lsls r0, 3\n\ - movs r1, 0x3F\n\ - bl __divsi3\n\ - adds r0, 0x1E\n\ - strh r0, [r5]\n\ - ldr r5, _080298A0 @ =0x02000000\n\ - lsls r0, r4, 4\n\ - subs r0, r4\n\ - movs r1, 0x3F\n\ - bl __divsi3\n\ - adds r1, r0, 0x1\n\ - ldr r0, _080298A4 @ =0x0001601c\n\ - adds r5, r0\n\ - strb r1, [r5]\n\ - lsls r0, r1, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x8\n\ - bls _08029876\n\ - adds r0, r1, 0x1\n\ - strb r0, [r5]\n\ -_08029876:\n\ - ldrb r0, [r5]\n\ - movs r1, 0xC0\n\ - orrs r0, r1\n\ - strb r0, [r5]\n\ - ldr r1, _080298A8 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x1\n\ - str r0, [r1]\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\ -_08029894: .4byte gBattleMons\n\ -_08029898: .4byte gBankAttacker\n\ -_0802989C: .4byte gDynamicBasePower\n\ -_080298A0: .4byte 0x02000000\n\ -_080298A4: .4byte 0x0001601c\n\ -_080298A8: .4byte gBattlescriptCurrInstr\n\ - .syntax divided"); -} - -static void atkC2_selectnexttarget(void) -{ - for (gBankTarget = 0; gBankTarget < gNoOfAllBanks; gBankTarget++) - { - if (gBankTarget == gBankAttacker) - continue; - if (!(gAbsentBankFlags & gBitTable[gBankTarget])) - break; - } - gBattlescriptCurrInstr++; -} - -static void atkC3_setfutureattack(void) -{ - if (gWishFutureKnock.futureSightCounter[gBankTarget] != 0) - { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } - else - { - gWishFutureKnock.futureSightMove[gBankTarget] = gCurrentMove; - gWishFutureKnock.futureSightAttacker[gBankTarget] = gBankAttacker; - gWishFutureKnock.futureSightCounter[gBankTarget] = 3; - gWishFutureKnock.futureSightDmg[gBankTarget] = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove, - gSideAffecting[GetBankIdentity(gBankTarget) & 1], 0, - 0, gBankAttacker, gBankTarget); - - if (gProtectStructs[gBankAttacker].helpingHand) - gWishFutureKnock.futureSightDmg[gBankTarget] = gWishFutureKnock.futureSightDmg[gBankTarget] * 15 / 10; - - if (gCurrentMove == MOVE_DOOM_DESIRE) - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - - gBattlescriptCurrInstr += 5; - } -} - -#ifdef NONMATCHING -static void atkC4_beat_up(void) -{ - register struct Pokemon* party asm("r7"); - if (GetBankSide(gBankAttacker) == 0) - party = gPlayerParty; - else - party = gEnemyParty; - - if (gBattleMons[gBankTarget].hp == 0) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - { - while (gBattleCommunication[0] < 6) - { - if (GetMonData(&party[gBattleCommunication[0]], MON_DATA_HP) && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) - && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) != SPECIES_EGG && !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS)) - break; - gBattleCommunication[0]++; - } - if (gBattleCommunication[0] < 6) - { - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 4; - gBattleTextBuff1[2] = gBankAttacker; - gBattleTextBuff1[3] = gBattleCommunication[0]; - gBattleTextBuff1[4] = 0xFF; - gBattlescriptCurrInstr += 9; - - gBattleMoveDamage = gBaseStats[GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES)].baseAttack; - gBattleMoveDamage *= gBattleMoves[gCurrentMove].power; - gBattleMoveDamage *= (GetMonData(&party[gBattleCommunication[0]], MON_DATA_LEVEL) * 2 / 5 + 2); - gBattleMoveDamage /= gBaseStats[gBattleMons[gBankTarget].species].baseDefense; - gBattleMoveDamage = (gBattleMoveDamage / 50) + 2; - if (gProtectStructs[gBankAttacker].helpingHand) - gBattleMoveDamage = gBattleMoveDamage * 15 / 10; - - gBattleCommunication[0]++; - } - else if (gBattleCommunication[0] != 0) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 5); - } -} -#else -__attribute__((naked)) -static void atkC4_beat_up(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - ldr r0, _08029A8C @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - ldr r7, _08029A90 @ =gEnemyParty\n\ - cmp r0, 0\n\ - bne _08029A62\n\ - ldr r7, _08029A94 @ =gPlayerParty\n\ -_08029A62:\n\ - ldr r2, _08029A98 @ =gBattleMons\n\ - ldr r0, _08029A9C @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - adds r0, r2\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - bne _08029AA4\n\ - ldr r3, _08029AA0 @ =gBattlescriptCurrInstr\n\ - ldr r2, [r3]\n\ - ldrb r1, [r2, 0x1]\n\ - ldrb r0, [r2, 0x2]\n\ - lsls r0, 8\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x3]\n\ - lsls r0, 16\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x4]\n\ - b _08029C40\n\ - .align 2, 0\n\ -_08029A8C: .4byte gBankAttacker\n\ -_08029A90: .4byte gEnemyParty\n\ -_08029A94: .4byte gPlayerParty\n\ -_08029A98: .4byte gBattleMons\n\ -_08029A9C: .4byte gBankTarget\n\ -_08029AA0: .4byte gBattlescriptCurrInstr\n\ -_08029AA4:\n\ - ldr r6, _08029BE0 @ =gBattleCommunication\n\ - ldrb r0, [r6]\n\ - mov r8, r0\n\ - cmp r0, 0x5\n\ - bls _08029AB0\n\ - b _08029C0C\n\ -_08029AB0:\n\ - adds r4, r6, 0\n\ - movs r5, 0x64\n\ -_08029AB4:\n\ - ldrb r0, [r4]\n\ - muls r0, r5\n\ - adds r0, r7, r0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _08029AF8\n\ - ldrb r0, [r6]\n\ - muls r0, r5\n\ - adds r0, r7, r0\n\ - movs r1, 0x41\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _08029AF8\n\ - ldrb r0, [r4]\n\ - muls r0, r5\n\ - adds r0, r7, r0\n\ - movs r1, 0x41\n\ - bl GetMonData\n\ - movs r1, 0xCE\n\ - lsls r1, 1\n\ - cmp r0, r1\n\ - beq _08029AF8\n\ - ldrb r0, [r4]\n\ - muls r0, r5\n\ - adds r0, r7, r0\n\ - movs r1, 0x37\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _08029B08\n\ -_08029AF8:\n\ - ldrb r0, [r4]\n\ - adds r0, 0x1\n\ - strb r0, [r4]\n\ - adds r6, r4, 0\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x5\n\ - bls _08029AB4\n\ -_08029B08:\n\ - ldr r1, _08029BE0 @ =gBattleCommunication\n\ - mov r9, r1\n\ - ldrb r2, [r1]\n\ - cmp r2, 0x5\n\ - bhi _08029C0C\n\ - ldr r1, _08029BE4 @ =gBattleTextBuff1\n\ - movs r0, 0xFD\n\ - strb r0, [r1]\n\ - movs r0, 0x4\n\ - strb r0, [r1, 0x1]\n\ - ldr r6, _08029BE8 @ =gBankAttacker\n\ - ldrb r0, [r6]\n\ - strb r0, [r1, 0x2]\n\ - strb r2, [r1, 0x3]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x4]\n\ - ldr r1, _08029BEC @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x9\n\ - str r0, [r1]\n\ - ldr r2, _08029BF0 @ =gBattleMoveDamage\n\ - mov r8, r2\n\ - ldr r5, _08029BF4 @ =gBaseStats\n\ - mov r1, r9\n\ - ldrb r0, [r1]\n\ - movs r4, 0x64\n\ - muls r0, r4\n\ - adds r0, r7, r0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - lsls r1, r0, 3\n\ - subs r1, r0\n\ - lsls r1, 2\n\ - adds r1, r5\n\ - ldrb r3, [r1, 0x1]\n\ - mov r2, r8\n\ - str r3, [r2]\n\ - ldr r2, _08029BF8 @ =gBattleMoves\n\ - ldr r0, _08029BFC @ =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, 0x1]\n\ - muls r0, r3\n\ - mov r1, r8\n\ - str r0, [r1]\n\ - mov r2, r9\n\ - ldrb r0, [r2]\n\ - muls r0, r4\n\ - adds r0, r7, r0\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - lsls r0, 1\n\ - movs r1, 0x5\n\ - bl __udivsi3\n\ - adds r0, 0x2\n\ - mov r2, r8\n\ - ldr r1, [r2]\n\ - muls r0, r1\n\ - str r0, [r2]\n\ - ldr r3, _08029C00 @ =gBattleMons\n\ - ldr r1, _08029C04 @ =gBankTarget\n\ - ldrb r2, [r1]\n\ - movs r1, 0x58\n\ - muls r1, r2\n\ - adds r1, r3\n\ - ldrh r2, [r1]\n\ - lsls r1, r2, 3\n\ - subs r1, r2\n\ - lsls r1, 2\n\ - adds r1, r5\n\ - ldrb r1, [r1, 0x2]\n\ - bl __divsi3\n\ - mov r1, r8\n\ - str r0, [r1]\n\ - movs r1, 0x32\n\ - bl __divsi3\n\ - adds r2, r0, 0x2\n\ - mov r0, r8\n\ - str r2, [r0]\n\ - ldr r1, _08029C08 @ =gProtectStructs\n\ - ldrb r0, [r6]\n\ - lsls r0, 4\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 28\n\ - cmp r0, 0\n\ - bge _08029BD4\n\ - lsls r0, r2, 4\n\ - subs r0, r2\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - mov r1, r8\n\ - str r0, [r1]\n\ -_08029BD4:\n\ - mov r2, r9\n\ - ldrb r0, [r2]\n\ - adds r0, 0x1\n\ - strb r0, [r2]\n\ - b _08029C46\n\ - .align 2, 0\n\ -_08029BE0: .4byte gBattleCommunication\n\ -_08029BE4: .4byte gBattleTextBuff1\n\ -_08029BE8: .4byte gBankAttacker\n\ -_08029BEC: .4byte gBattlescriptCurrInstr\n\ -_08029BF0: .4byte gBattleMoveDamage\n\ -_08029BF4: .4byte gBaseStats\n\ -_08029BF8: .4byte gBattleMoves\n\ -_08029BFC: .4byte gCurrentMove\n\ -_08029C00: .4byte gBattleMons\n\ -_08029C04: .4byte gBankTarget\n\ -_08029C08: .4byte gProtectStructs\n\ -_08029C0C:\n\ - mov r0, r8\n\ - cmp r0, 0\n\ - beq _08029C2C\n\ - ldr r3, _08029C28 @ =gBattlescriptCurrInstr\n\ - ldr r2, [r3]\n\ - ldrb r1, [r2, 0x1]\n\ - ldrb r0, [r2, 0x2]\n\ - lsls r0, 8\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x3]\n\ - lsls r0, 16\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x4]\n\ - b _08029C40\n\ - .align 2, 0\n\ -_08029C28: .4byte gBattlescriptCurrInstr\n\ -_08029C2C:\n\ - ldr r3, _08029C54 @ =gBattlescriptCurrInstr\n\ - ldr r2, [r3]\n\ - ldrb r1, [r2, 0x5]\n\ - ldrb r0, [r2, 0x6]\n\ - lsls r0, 8\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x7]\n\ - lsls r0, 16\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x8]\n\ -_08029C40:\n\ - lsls r0, 24\n\ - orrs r1, r0\n\ - str r1, [r3]\n\ -_08029C46:\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\ -_08029C54: .4byte gBattlescriptCurrInstr\n\ - .syntax divided"); -} -#endif // NONMATCHING - -static void atkC5_hidepreattack(void) -{ - switch (gCurrentMove) - { - case MOVE_FLY: - case MOVE_BOUNCE: - gStatuses3[gBankAttacker] |= STATUS3_ON_AIR; - break; - case MOVE_DIG: - gStatuses3[gBankAttacker] |= STATUS3_UNDERGROUND; - break; - case MOVE_DIVE: - gStatuses3[gBankAttacker] |= STATUS3_UNDERWATER; - break; - } - gBattlescriptCurrInstr++; -} - -static void atkC6_unhidepostattack(void) -{ - switch (gCurrentMove) - { - case MOVE_FLY: - case MOVE_BOUNCE: - gStatuses3[gBankAttacker] &= ~STATUS3_ON_AIR; - break; - case MOVE_DIG: - gStatuses3[gBankAttacker] &= ~STATUS3_UNDERGROUND; - break; - case MOVE_DIVE: - gStatuses3[gBankAttacker] &= ~STATUS3_UNDERWATER; - break; - } - gBattlescriptCurrInstr++; -} - -static void atkC7_setminimize(void) -{ - if (gHitMarker & HITMARKER_OBEYS) - gStatuses3[gBankAttacker] |= STATUS3_MINIMIZED; - gBattlescriptCurrInstr++; -} - -static void atkC8_sethail(void) -{ - if (gBattleWeather & WEATHER_HAIL) - { - gBattleMoveFlags |= MOVESTATUS_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - } - else - { - gBattleWeather = WEATHER_HAIL; - gBattleCommunication[MULTISTRING_CHOOSER] = 5; - gWishFutureKnock.weatherDuration = 5; - } - gBattlescriptCurrInstr++; -} - -static void atkC9_jumpifattackandspecialattackcannotfall(void) //memento -{ - if (gBattleMons[gBankTarget].statStages[STAT_STAGE_ATK] == 0 - && gBattleMons[gBankTarget].statStages[STAT_STAGE_SPATK] == 0 - && gBattleCommunication[6] != 1) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - { - gActiveBank = gBankAttacker; - gBattleMoveDamage = gBattleMons[gActiveBank].hp; - EmitHealthBarUpdate(0, 0x7FFF); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 5; - } -} - -static void atkCA_setforcedtarget(void) //follow me -{ - gSideTimer[GetBankSide(gBankAttacker)].followmeTimer = 1; - gSideTimer[GetBankSide(gBankAttacker)].followmeTarget = gBankAttacker; - gBattlescriptCurrInstr++; -} - -static void atkCB_setcharge(void) -{ - gStatuses3[gBankAttacker] |= STATUS3_CHARGED_UP; - gDisableStructs[gBankAttacker].chargeTimer1 = 2; - gDisableStructs[gBankAttacker].chargeTimer2 = 2; - gBattlescriptCurrInstr++; -} - -static void atkCC_callterrainattack(void) //nature power -{ - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); - gCurrentMove = sNaturePowerMoves[gBattleTerrain]; - gBankTarget = sub_801B5C0(gCurrentMove, 0); - b_movescr_stack_push(gBattleScriptsEffectsTable[gBattleMoves[gCurrentMove].effect]); - gBattlescriptCurrInstr++; -} - -static void atkCD_cureifburnedparalysedorpoisoned(void) //refresh -{ - if (gBattleMons[gBankAttacker].status1 & (STATUS_POISON | STATUS_BURN | STATUS_PARALYSIS | STATUS_TOXIC_POISON)) - { - gBattleMons[gBankAttacker].status1 = 0; - gBattlescriptCurrInstr += 5; - gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); - MarkBufferBankForExecution(gActiveBank); - } - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -static void atkCE_settorment(void) -{ - if (gBattleMons[gBankTarget].status2 & STATUS2_TORMENT) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - { - gBattleMons[gBankTarget].status2 |= STATUS2_TORMENT; - gBattlescriptCurrInstr += 5; - } -} - -static void atkCF_jumpifnodamage(void) -{ - if (gProtectStructs[gBankAttacker].physicalDmg || gProtectStructs[gBankAttacker].specialDmg) - gBattlescriptCurrInstr += 5; - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -static void atkD0_settaunt(void) -{ - if (gDisableStructs[gBankTarget].tauntTimer1 == 0) - { - gDisableStructs[gBankTarget].tauntTimer1 = 2; - gDisableStructs[gBankTarget].tauntTimer2 = 2; - gBattlescriptCurrInstr += 5; - } - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -static void atkD1_set_helpinghand(void) -{ - gBankTarget = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gBankTarget]) - && !gProtectStructs[gBankAttacker].helpingHand && !gProtectStructs[gBankTarget].helpingHand) - { - gProtectStructs[gBankTarget].helpingHand = 1; - gBattlescriptCurrInstr += 5; - } - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -#ifdef NONMATCHING -static void atkD2_swap_items(void) -{ - if ((GetBankSide(gBankAttacker) != 1 || gBattleTypeFlags & (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER) || gTrainerBattleOpponent == 0x400)) - { - u8 side = GetBankSide(gBankAttacker); - if (gBattleTypeFlags) - } - - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -#else -__attribute__((naked)) -static void atkD2_swap_items(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, _0802A30C @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0802A24C\n\ - ldr r0, _0802A310 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - ldr r0, _0802A314 @ =0x00000902\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0802A24C\n\ - ldr r0, _0802A318 @ =gTrainerBattleOpponent\n\ - ldrh r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 3\n\ - cmp r1, r0\n\ - bne _0802A2EE\n\ -_0802A24C:\n\ - ldr r4, _0802A30C @ =gBankAttacker\n\ - ldrb r0, [r4]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - ldr r0, _0802A310 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - ldr r0, _0802A314 @ =0x00000902\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0802A290\n\ - ldr r0, _0802A318 @ =gTrainerBattleOpponent\n\ - ldrh r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 3\n\ - cmp r1, r0\n\ - beq _0802A290\n\ - ldr r0, _0802A31C @ =gWishFutureKnock\n\ - adds r0, 0x29\n\ - adds r0, r2, r0\n\ - ldrb r1, [r0]\n\ - ldr r3, _0802A320 @ =gBitTable\n\ - ldr r2, _0802A324 @ =gBattlePartyID\n\ - ldrb r0, [r4]\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - ldrh r0, [r0]\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - ldr r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _0802A2EE\n\ -_0802A290:\n\ - ldr r0, _0802A328 @ =gBattleMons\n\ - mov r9, r0\n\ - ldr r1, _0802A30C @ =gBankAttacker\n\ - ldrb r4, [r1]\n\ - movs r2, 0x58\n\ - mov r8, r2\n\ - mov r0, r8\n\ - muls r0, r4\n\ - mov r3, r9\n\ - adds r5, r0, r3\n\ - ldrh r3, [r5, 0x2E]\n\ - adds r1, r3, 0\n\ - cmp r1, 0\n\ - bne _0802A2BE\n\ - ldr r0, _0802A32C @ =gBankTarget\n\ - ldrb r0, [r0]\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - add r0, r9\n\ - ldrh r0, [r0, 0x2E]\n\ - cmp r0, 0\n\ - beq _0802A2EE\n\ -_0802A2BE:\n\ - cmp r1, 0xAF\n\ - beq _0802A2EE\n\ - ldr r7, _0802A32C @ =gBankTarget\n\ - ldrb r0, [r7]\n\ - mov r1, r8\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - mov r1, r9\n\ - adds r2, r0, r1\n\ - ldrh r1, [r2, 0x2E]\n\ - cmp r1, 0xAF\n\ - beq _0802A2EE\n\ - adds r0, r3, 0\n\ - subs r0, 0x79\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0xB\n\ - bls _0802A2EE\n\ - adds r0, r1, 0\n\ - subs r0, 0x79\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0xB\n\ - bhi _0802A334\n\ -_0802A2EE:\n\ - ldr r3, _0802A330 @ =gBattlescriptCurrInstr\n\ - ldr r2, [r3]\n\ - ldrb r1, [r2, 0x1]\n\ - ldrb r0, [r2, 0x2]\n\ - lsls r0, 8\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x3]\n\ - lsls r0, 16\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x4]\n\ - lsls r0, 24\n\ - orrs r1, r0\n\ - str r1, [r3]\n\ - b _0802A49A\n\ - .align 2, 0\n\ -_0802A30C: .4byte gBankAttacker\n\ -_0802A310: .4byte gBattleTypeFlags\n\ -_0802A314: .4byte 0x00000902\n\ -_0802A318: .4byte gTrainerBattleOpponent\n\ -_0802A31C: .4byte gWishFutureKnock\n\ -_0802A320: .4byte gBitTable\n\ -_0802A324: .4byte gBattlePartyID\n\ -_0802A328: .4byte gBattleMons\n\ -_0802A32C: .4byte gBankTarget\n\ -_0802A330: .4byte gBattlescriptCurrInstr\n\ -_0802A334:\n\ - adds r0, r2, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x3C\n\ - bne _0802A36C\n\ - ldr r1, _0802A360 @ =gBattlescriptCurrInstr\n\ - ldr r0, _0802A364 @ =BattleScript_NoItemSteal\n\ - str r0, [r1]\n\ - ldr r1, _0802A368 @ =gLastUsedAbility\n\ - ldrb r0, [r7]\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - add r0, r9\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldrb r0, [r7]\n\ - ldrb r1, [r1]\n\ - bl RecordAbilityBattle\n\ - b _0802A49A\n\ - .align 2, 0\n\ -_0802A360: .4byte gBattlescriptCurrInstr\n\ -_0802A364: .4byte BattleScript_NoItemSteal\n\ -_0802A368: .4byte gLastUsedAbility\n\ -_0802A36C:\n\ - lsls r0, r4, 1\n\ - ldr r4, _0802A458 @ =0x020160f0\n\ - adds r6, r0, r4\n\ - ldrh r5, [r5, 0x2E]\n\ - mov r10, r5\n\ - strh r1, [r6]\n\ - ldr r3, _0802A45C @ =gBankAttacker\n\ - ldrb r0, [r3]\n\ - mov r1, r8\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - add r0, r9\n\ - movs r1, 0\n\ - strh r1, [r0, 0x2E]\n\ - ldrb r0, [r7]\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - add r0, r9\n\ - mov r3, r10\n\ - strh r3, [r0, 0x2E]\n\ - ldr r5, _0802A460 @ =gActiveBank\n\ - ldr r1, _0802A45C @ =gBankAttacker\n\ - ldrb r0, [r1]\n\ - strb r0, [r5]\n\ - str r6, [sp]\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - movs r2, 0\n\ - movs r3, 0x2\n\ - bl EmitSetAttributes\n\ - ldr r2, _0802A45C @ =gBankAttacker\n\ - ldrb r0, [r2]\n\ - bl MarkBufferBankForExecution\n\ - ldrb r0, [r7]\n\ - strb r0, [r5]\n\ - ldrb r0, [r7]\n\ - mov r3, r8\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - mov r1, r9\n\ - adds r1, 0x2E\n\ - adds r0, r1\n\ - str r0, [sp]\n\ - movs r0, 0\n\ - movs r1, 0x2\n\ - movs r2, 0\n\ - movs r3, 0x2\n\ - bl EmitSetAttributes\n\ - ldrb r0, [r7]\n\ - bl MarkBufferBankForExecution\n\ - ldr r0, _0802A464 @ =0xfffe9f10\n\ - adds r4, r0\n\ - ldrb r0, [r7]\n\ - lsls r0, 1\n\ - ldr r2, _0802A468 @ =0x000160e8\n\ - adds r0, r2\n\ - adds r0, r4\n\ - movs r1, 0\n\ - strb r1, [r0]\n\ - ldrb r0, [r7]\n\ - lsls r0, 1\n\ - ldr r1, _0802A46C @ =0x000160e9\n\ - adds r0, r1\n\ - adds r0, r4\n\ - movs r3, 0\n\ - strb r3, [r0]\n\ - ldr r3, _0802A45C @ =gBankAttacker\n\ - ldrb r0, [r3]\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - adds r0, r4\n\ - movs r2, 0\n\ - strb r2, [r0]\n\ - ldrb r0, [r3]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - adds r0, r4\n\ - strb r2, [r0]\n\ - ldr r1, _0802A470 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x5\n\ - str r0, [r1]\n\ - ldr r1, _0802A474 @ =gBattleTextBuff1\n\ - movs r3, 0xFD\n\ - strb r3, [r1]\n\ - movs r2, 0xA\n\ - strb r2, [r1, 0x1]\n\ - ldrh r0, [r6]\n\ - strb r0, [r1, 0x2]\n\ - ldrh r0, [r6]\n\ - lsrs r0, 8\n\ - strb r0, [r1, 0x3]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x4]\n\ - ldr r1, _0802A478 @ =gBattleTextBuff2\n\ - strb r3, [r1]\n\ - strb r2, [r1, 0x1]\n\ - mov r3, r10\n\ - strb r3, [r1, 0x2]\n\ - mov r2, r10\n\ - lsrs r0, r2, 8\n\ - strb r0, [r1, 0x3]\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - strb r0, [r1, 0x4]\n\ - cmp r2, 0\n\ - beq _0802A480\n\ - ldrh r0, [r6]\n\ - cmp r0, 0\n\ - beq _0802A494\n\ - ldr r1, _0802A47C @ =gBattleCommunication\n\ - movs r0, 0x2\n\ - b _0802A498\n\ - .align 2, 0\n\ -_0802A458: .4byte 0x020160f0\n\ -_0802A45C: .4byte gBankAttacker\n\ -_0802A460: .4byte gActiveBank\n\ -_0802A464: .4byte 0xfffe9f10\n\ -_0802A468: .4byte 0x000160e8\n\ -_0802A46C: .4byte 0x000160e9\n\ -_0802A470: .4byte gBattlescriptCurrInstr\n\ -_0802A474: .4byte gBattleTextBuff1\n\ -_0802A478: .4byte gBattleTextBuff2\n\ -_0802A47C: .4byte gBattleCommunication\n\ -_0802A480:\n\ - ldrh r0, [r6]\n\ - cmp r0, 0\n\ - beq _0802A494\n\ - ldr r0, _0802A490 @ =gBattleCommunication\n\ - movs r3, 0\n\ - strb r3, [r0, 0x5]\n\ - b _0802A49A\n\ - .align 2, 0\n\ -_0802A490: .4byte gBattleCommunication\n\ -_0802A494:\n\ - ldr r1, _0802A4AC @ =gBattleCommunication\n\ - movs r0, 0x1\n\ -_0802A498:\n\ - strb r0, [r1, 0x5]\n\ -_0802A49A:\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\ -_0802A4AC: .4byte gBattleCommunication\n\ - .syntax divided"); -} -#endif // NONMATCHING - -static void atkD3_copy_ability(void) //role play -{ - if (gBattleMons[gBankTarget].ability != 0 && gBattleMons[gBankTarget].ability != ABILITY_WONDER_GUARD) - { - gBattleMons[gBankAttacker].ability = gBattleMons[gBankTarget].ability; - gLastUsedAbility = gBattleMons[gBankTarget].ability; - gBattlescriptCurrInstr += 5; - } - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -static void atkD4_wish_effect(void) -{ - switch (BSScriptRead8(gBattlescriptCurrInstr + 1)) - { - case 0: //use wish - if (gWishFutureKnock.wishCounter[gBankAttacker] == 0) - { - gWishFutureKnock.wishCounter[gBankAttacker] = 2; - gWishFutureKnock.wishUserID[gBankAttacker] = gBattlePartyID[gBankAttacker]; - gBattlescriptCurrInstr += 6; - } - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); - break; - case 1: //heal effect - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 4; - gBattleTextBuff1[2] = gBankTarget; - gBattleTextBuff1[3] = gWishFutureKnock.wishUserID[gBankTarget]; - gBattleTextBuff1[4] = 0xFF; - gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 2; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMoveDamage *= -1; - if (gBattleMons[gBankTarget].hp == gBattleMons[gBankTarget].maxHP) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); - else - gBattlescriptCurrInstr += 6; - break; - } -} - -static void atkD5_setroots(void) //ingrain -{ - if (gStatuses3[gBankAttacker] & STATUS3_ROOTED) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - { - gStatuses3[gBankAttacker] |= STATUS3_ROOTED; - gBattlescriptCurrInstr += 5; - } -} - -static void atkD6_doubledamagedealtifdamaged(void) -{ - if ((gProtectStructs[gBankAttacker].physicalDmg && gProtectStructs[gBankAttacker].physicalBank == gBankTarget) - || (gProtectStructs[gBankAttacker].specialDmg && gProtectStructs[gBankAttacker].specialBank == gBankTarget)) - BATTLE_STRUCT->dmgMultiplier = 2; - gBattlescriptCurrInstr++; -} - -static void atkD7_setyawn(void) -{ - if (gStatuses3[gBankTarget] & STATUS3_YAWN || (u8) gBattleMons[gBankTarget].status1) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - { - gStatuses3[gBankTarget] |= 0x1000; - gBattlescriptCurrInstr += 5; - } -} - -static void atkD8_setdamagetohealthdifference(void) -{ - if (gBattleMons[gBankTarget].hp <= gBattleMons[gBankAttacker].hp) - { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } - else - { - gBattleMoveDamage = gBattleMons[gBankTarget].hp - gBattleMons[gBankAttacker].hp; - gBattlescriptCurrInstr += 5; - } -} - -static void atkD9_scaledamagebyhealthratio(void) -{ - if (gDynamicBasePower == 0) - { - u8 power = gBattleMoves[gCurrentMove].power; - gDynamicBasePower = gBattleMons[gBankAttacker].hp * power / gBattleMons[gBankAttacker].maxHP; - if (gDynamicBasePower == 0) - gDynamicBasePower = 1; - } - gBattlescriptCurrInstr++; -} - -static void atkDA_abilityswap(void) -{ - if ((gBattleMons[gBankAttacker].ability == 0 && gBattleMons[gBankTarget].ability == 0) - || gBattleMons[gBankAttacker].ability == ABILITY_WONDER_GUARD || gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD - || gBattleMoveFlags & MOVESTATUS_NOEFFECT) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - { - u8 atk_ability = gBattleMons[gBankAttacker].ability; - gBattleMons[gBankAttacker].ability = gBattleMons[gBankTarget].ability; - gBattleMons[gBankTarget].ability = atk_ability; - gBattlescriptCurrInstr += 5; - } -} - -static void atkDB_imprisoneffect(void) -{ - u8 r8 = 0; - if ((gStatuses3[gBankAttacker] & STATUS3_IMPRISIONED)) - { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } - else - { - u8 bank; - sub_801529C(gBankAttacker); - for (bank = 0; bank < gNoOfAllBanks; bank++) - { - if (r8 != GetBankSide(bank)) - { - int j; - for (j = 0; j < 4; j++) - { - int k; - for (k = 0; k < 4; k++) - { - if (gBattleMons[gBankAttacker].moves[j] == gBattleMons[bank].moves[k] && gBattleMons[gBankAttacker].moves[j]) - break; - } - if (k != 4) - break; - } - if (j != 4) - { - gStatuses3[gBankAttacker] |= STATUS3_IMPRISIONED; - gBattlescriptCurrInstr += 5; - break; - } - } - } - if (bank == gNoOfAllBanks) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } -} - -static void atkDC_setgrudge(void) -{ - if (gStatuses3[gBankAttacker] & STATUS3_GRUDGE) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - { - gStatuses3[gBankAttacker] |= STATUS3_GRUDGE; - gBattlescriptCurrInstr += 5; - } -} - -static void atkDD_weightdamagecalculation(void) -{ - int i; - for (i = 0; sWeightDamage[i] != 0xFFFF; i += 2) - { - if (sWeightDamage[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) - break; - } - if (sWeightDamage[i] != 0xFFFF) - gDynamicBasePower = sWeightDamage[i + 1]; - else - gDynamicBasePower = 120; - gBattlescriptCurrInstr++; -} - -#ifdef NONMATCHING -static void atkDE_asistattackselect(void) -{ - u32 chooseable_moves_no = 0; - struct Pokemon* party; - int i, j; - u16* chooseable_moves; - if (GetBankIdentity(gBankAttacker) & 1) - party = gEnemyParty; - else - party = gPlayerParty; - - for (i = 0; i < 6; i++) - { - if (i == gBattlePartyID[gBankAttacker]) - break; - if (!GetMonData(&party[i], MON_DATA_SPECIES2) || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) - break; - chooseable_moves = &BATTLE_STRUCT->assistMove[chooseable_moves_no]; - for (j = 0; j < 4; j++) - { - int k; - u16 move = GetMonData(&party[i], MON_DATA_MOVE1 + i); - if (IsMoveUnchoosable(move)) - break; - //sUnknown_081FACFE[k] - for (k = 0; ;k++) - { - if (sUnknown_081FACFE[k] == 0xFFFF) - { - if (move) - { - *chooseable_moves = move; - chooseable_moves++; - chooseable_moves_no++; - } - break; - } - if (sUnknown_081FACFE[k] == move) - break; - } - } - } - if (chooseable_moves_no) - { - gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); - gRandomMove = BATTLE_STRUCT->assistMove[Random() % chooseable_moves_no]; - gBankTarget = sub_801B5C0(gRandomMove, 0); - gBattlescriptCurrInstr += 5; - } - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -#else -__attribute__((naked)) -static void atkDE_asistattackselect(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 r10, r0\n\ - ldr r0, _0802AB9C @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - bl GetBankIdentity\n\ - movs r1, 0x1\n\ - ands r1, r0\n\ - ldr r0, _0802ABA0 @ =gPlayerParty\n\ - str r0, [sp]\n\ - cmp r1, 0\n\ - beq _0802AAAC\n\ - ldr r1, _0802ABA4 @ =gEnemyParty\n\ - str r1, [sp]\n\ -_0802AAAC:\n\ - movs r2, 0\n\ -_0802AAAE:\n\ - ldr r1, _0802ABA8 @ =gBattlePartyID\n\ - ldr r0, _0802AB9C @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - adds r1, r2, 0x1\n\ - str r1, [sp, 0x4]\n\ - ldrh r0, [r0]\n\ - cmp r2, r0\n\ - beq _0802AB54\n\ - movs r0, 0x64\n\ - adds r6, r2, 0\n\ - muls r6, r0\n\ - ldr r0, [sp]\n\ - adds r4, r0, r6\n\ - adds r0, r4, 0\n\ - movs r1, 0x41\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0802AB54\n\ - adds r0, r4, 0\n\ - movs r1, 0x41\n\ - bl GetMonData\n\ - movs r1, 0xCE\n\ - lsls r1, 1\n\ - cmp r0, r1\n\ - beq _0802AB54\n\ - movs r5, 0\n\ - ldr r1, _0802ABAC @ =0x0000ffff\n\ - mov r8, r1\n\ - mov r9, r6\n\ - mov r1, r10\n\ - lsls r0, r1, 1\n\ - ldr r1, _0802ABB0 @ =0x02016024\n\ - adds r6, r0, r1\n\ -_0802AAF8:\n\ - movs r7, 0\n\ - adds r1, r5, 0\n\ - adds r1, 0xD\n\ - ldr r0, [sp]\n\ - add r0, r9\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - adds r0, r4, 0\n\ - bl IsMoveUnchoosable\n\ - lsls r0, 24\n\ - adds r1, r5, 0x1\n\ - cmp r0, 0\n\ - bne _0802AB4E\n\ - ldr r0, _0802ABB4 @ =sUnknown_081FACFE\n\ - ldrh r2, [r0]\n\ - adds r3, r0, 0\n\ - cmp r2, r8\n\ - beq _0802AB42\n\ - cmp r4, r2\n\ - beq _0802AB38\n\ - ldr r5, _0802ABAC @ =0x0000ffff\n\ - adds r2, r3, 0\n\ -_0802AB2A:\n\ - adds r2, 0x2\n\ - adds r7, 0x1\n\ - ldrh r0, [r2]\n\ - cmp r0, r5\n\ - beq _0802AB42\n\ - cmp r4, r0\n\ - bne _0802AB2A\n\ -_0802AB38:\n\ - lsls r0, r7, 1\n\ - adds r0, r3\n\ - ldrh r0, [r0]\n\ - cmp r0, r8\n\ - bne _0802AB4E\n\ -_0802AB42:\n\ - cmp r4, 0\n\ - beq _0802AB4E\n\ - strh r4, [r6]\n\ - adds r6, 0x2\n\ - movs r0, 0x1\n\ - add r10, r0\n\ -_0802AB4E:\n\ - adds r5, r1, 0\n\ - cmp r5, 0x3\n\ - ble _0802AAF8\n\ -_0802AB54:\n\ - ldr r2, [sp, 0x4]\n\ - cmp r2, 0x5\n\ - ble _0802AAAE\n\ - mov r1, r10\n\ - cmp r1, 0\n\ - beq _0802ABCC\n\ - ldr r2, _0802ABB8 @ =gHitMarker\n\ - ldr r0, [r2]\n\ - ldr r1, _0802ABBC @ =0xfffffbff\n\ - ands r0, r1\n\ - str r0, [r2]\n\ - ldr r4, _0802ABC0 @ =gRandomMove\n\ - bl Random\n\ - movs r1, 0xFF\n\ - ands r1, r0\n\ - mov r0, r10\n\ - muls r0, r1\n\ - asrs r0, 8\n\ - lsls r0, 1\n\ - ldr r1, _0802ABB0 @ =0x02016024\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - strh r0, [r4]\n\ - ldrh r0, [r4]\n\ - movs r1, 0\n\ - bl sub_801B5C0\n\ - ldr r1, _0802ABC4 @ =gBankTarget\n\ - strb r0, [r1]\n\ - ldr r1, _0802ABC8 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x5\n\ - str r0, [r1]\n\ - b _0802ABE6\n\ - .align 2, 0\n\ -_0802AB9C: .4byte gBankAttacker\n\ -_0802ABA0: .4byte gPlayerParty\n\ -_0802ABA4: .4byte gEnemyParty\n\ -_0802ABA8: .4byte gBattlePartyID\n\ -_0802ABAC: .4byte 0x0000ffff\n\ -_0802ABB0: .4byte 0x02016024\n\ -_0802ABB4: .4byte sUnknown_081FACFE\n\ -_0802ABB8: .4byte gHitMarker\n\ -_0802ABBC: .4byte 0xfffffbff\n\ -_0802ABC0: .4byte gRandomMove\n\ -_0802ABC4: .4byte gBankTarget\n\ -_0802ABC8: .4byte gBattlescriptCurrInstr\n\ -_0802ABCC:\n\ - ldr r3, _0802ABF8 @ =gBattlescriptCurrInstr\n\ - ldr r2, [r3]\n\ - ldrb r1, [r2, 0x1]\n\ - ldrb r0, [r2, 0x2]\n\ - lsls r0, 8\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x3]\n\ - lsls r0, 16\n\ - orrs r1, r0\n\ - ldrb r0, [r2, 0x4]\n\ - lsls r0, 24\n\ - orrs r1, r0\n\ - str r1, [r3]\n\ -_0802ABE6:\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\ -_0802ABF8: .4byte gBattlescriptCurrInstr\n\ - .syntax divided"); -} - -#endif // NONMATCHING - -static void atkDF_setmagiccoat(void) -{ - gBankTarget = gBankAttacker; - gSpecialStatuses[gBankAttacker].flag20 = 1; - if (gCurrentMoveTurn == gNoOfAllBanks - 1) //last turn - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - { - gProtectStructs[gBankAttacker].bounceMove = 1; - gBattlescriptCurrInstr += 5; - } -} - -static void atkE0_setstealstatchange(void) -{ - gSpecialStatuses[gBankAttacker].flag20 = 1; - if (gCurrentMoveTurn == gNoOfAllBanks - 1) //last turn - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - { - gProtectStructs[gBankAttacker].stealMove = 1; - gBattlescriptCurrInstr += 5; - } -} - -static void atkE1_intimidate_string_loader(void) -{ - u8 side; - - BATTLE_STRUCT->scriptingActive = ewram[0x160dd]; - side = GetBankSide(BATTLE_STRUCT->scriptingActive); - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 9; - gBattleTextBuff1[2] = gBattleMons[BATTLE_STRUCT->scriptingActive].ability; - gBattleTextBuff1[3] = 0xFF; - - for (;gBankTarget < gNoOfAllBanks; gBankTarget++) - { - if (GetBankSide(gBankTarget) == side) - continue; - if (!(gAbsentBankFlags & gBitTable[gBankTarget])) - break; - } - - if (gBankTarget >= gNoOfAllBanks) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - gBattlescriptCurrInstr += 5; -} - -static void atkE2_switchout_abilities(void) -{ - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - switch (gBattleMons[gActiveBank].ability) - { - case ABILITY_NATURAL_CURE: - gBattleMons[gActiveBank].status1 = 0; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, gBitTable[ewram[gActiveBank + 0x16064]], 4, &gBattleMons[gActiveBank].status1); - MarkBufferBankForExecution(gActiveBank); - break; - } - gBattlescriptCurrInstr += 2; -} - -static void atkE3_jumpiffainted(void) -{ - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - if (gBattleMons[gActiveBank].hp == 0) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); - else - gBattlescriptCurrInstr += 6; -} - -static void atkE4_getsecretpowereffect(void) -{ - switch (gBattleTerrain) - { - case 0: - gBattleCommunication[MOVE_EFFECT_BYTE] = 2; - break; - case 1: - gBattleCommunication[MOVE_EFFECT_BYTE] = 1; - break; - case 2: - gBattleCommunication[MOVE_EFFECT_BYTE] = 27; - break; - case 3: - gBattleCommunication[MOVE_EFFECT_BYTE] = 23; - break; - case 4: - gBattleCommunication[MOVE_EFFECT_BYTE] = 22; - break; - case 5: - gBattleCommunication[MOVE_EFFECT_BYTE] = 24; - break; - case 6: - gBattleCommunication[MOVE_EFFECT_BYTE] = 7; - break; - case 7: - gBattleCommunication[MOVE_EFFECT_BYTE] = 8; - break; - default: - gBattleCommunication[MOVE_EFFECT_BYTE] = 5; - break; - } - gBattlescriptCurrInstr++; -} - -static void atkE5_pickup(void) -{ - int i; - for (i = 0; i < 6; i++) - { - u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - u16 held_item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - u8 ability; - if (GetMonData(&gPlayerParty[i], MON_DATA_ALT_ABILITY)) - ability = gBaseStats[species].ability2; - else - ability = gBaseStats[species].ability1; - - if (ability == ABILITY_PICKUP && species != 0 && species != SPECIES_EGG && held_item == 0 && (Random() % 10) == 0) - { - s32 chance = Random() % 100; - s32 j; - for (j = 0; j < 18; j += 2) - { - if (sPickupItems[j + 1] > chance) - break; - } - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, (const void*) &sPickupItems[j]); - } - } - gBattlescriptCurrInstr++; -} - -static void atkE6_castform_change_animation(void) -{ - gActiveBank = BATTLE_STRUCT->scriptingActive; - if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE) - BATTLE_STRUCT->castformToChangeInto |= 0x80; - EmitBattleAnimation(0, 0, BATTLE_STRUCT->castformToChangeInto); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr++; -} - -static void atkE7_castform_data_change(void) -{ - u8 form; - gBattlescriptCurrInstr++; - form = castform_switch(BATTLE_STRUCT->scriptingActive); - if (form) - { - b_push_move_exec(gUnknown_081D977D); - BATTLE_STRUCT->castformToChangeInto = form - 1; - } -} - -static void atkE8_settypebasedhalvers(void) //water/mud sport -{ - bool8 worked = FALSE; - if (gBattleMoves[gCurrentMove].effect == EFFECT_MUD_SPORT) - { - if (!(gStatuses3[gBankAttacker] & STATUS3_MUDSPORT)) - { - gStatuses3[gBankAttacker] |= STATUS3_MUDSPORT; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - worked = TRUE; - } - } - else //water sport - { - if (!(gStatuses3[gBankAttacker] & STATUS3_WATERSPORT)) - { - gStatuses3[gBankAttacker] |= STATUS3_WATERSPORT; - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - worked = TRUE; - } - } - if (worked) - gBattlescriptCurrInstr += 5; - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -static void atkE9_setweatherballtype(void) -{ - if (WEATHER_HAS_EFFECT) - { - if ((u8)(gBattleWeather)) - BATTLE_STRUCT->dmgMultiplier = 2; - if (gBattleWeather & WEATHER_RAIN_ANY) - BATTLE_STRUCT->dynamicMoveType = TYPE_WATER | 0x80; - else if (gBattleWeather & WEATHER_SANDSTORM_ANY) - BATTLE_STRUCT->dynamicMoveType = TYPE_ROCK | 0x80; - else if (gBattleWeather & WEATHER_SUN_ANY) - BATTLE_STRUCT->dynamicMoveType = TYPE_FIRE | 0x80; - else if (gBattleWeather & WEATHER_HAIL) - BATTLE_STRUCT->dynamicMoveType = TYPE_ICE | 0x80; - else - BATTLE_STRUCT->dynamicMoveType = TYPE_NORMAL | 0x80; - } - gBattlescriptCurrInstr++; -} - -static void atkEA_recycleitem(void) -{ - u16* used_item; - gActiveBank = gBankAttacker; - used_item = USED_HELD_ITEM(gActiveBank); - if (*used_item && gBattleMons[gActiveBank].item == 0) - { - gLastUsedItem = *used_item; - *used_item = 0; - gBattleMons[gActiveBank].item = gLastUsedItem; - EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 5; - } - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -static void atkEB_settypetoterrain(void) -{ - if (gBattleMons[gBankAttacker].type1 != sTerrainToType[gBattleTerrain] && gBattleMons[gBankAttacker].type2 != sTerrainToType[gBattleTerrain]) - { - gBattleMons[gBankAttacker].type1 = sTerrainToType[gBattleTerrain]; - gBattleMons[gBankAttacker].type2 = sTerrainToType[gBattleTerrain]; - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 3; - gBattleTextBuff1[2] = sTerrainToType[gBattleTerrain]; - gBattleTextBuff1[3] = 0xFF; - gBattlescriptCurrInstr += 5; - } - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -static void atkEC_pursuit_sth(void) -{ - gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank]) && gActionForBanks[gActiveBank] == 0 && gChosenMovesByBanks[gActiveBank] == MOVE_PURSUIT) - { - gUnknown_02024A76[gActiveBank] = 11; - gCurrentMove = MOVE_PURSUIT; - gBattlescriptCurrInstr += 5; - BATTLE_STRUCT->animTurn = 1; - BATTLE_STRUCT->unk160A7 = gBankAttacker; - gBankAttacker = gActiveBank; - } - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); -} - -static void atkED_802B4B4(void) -{ - gEffectBank = gBankAttacker; - if (gBankAttacker == gBankTarget) - gBankAttacker = gBankTarget = BATTLE_STRUCT->scriptingActive; - else - gBankTarget = BATTLE_STRUCT->scriptingActive; - BATTLE_STRUCT->scriptingActive = gEffectBank; - gBattlescriptCurrInstr++; -} - -static void atkEE_removelightscreenreflect(void) //brick break -{ - u8 side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimer[side].reflectTimer || gSideTimer[side].lightscreenTimer) - { - gSideAffecting[side] &= ~(SIDE_STATUS_REFLECT); - gSideAffecting[side] &= ~(SIDE_STATUS_LIGHTSCREEN); - gSideTimer[side].reflectTimer = 0; - gSideTimer[side].lightscreenTimer = 0; - BATTLE_STRUCT->animTurn = 1; - BATTLE_STRUCT->animTargetsHit = 1; - } - else - { - BATTLE_STRUCT->animTurn = 0; - BATTLE_STRUCT->animTargetsHit = 0; - } - gBattlescriptCurrInstr++; -} - -void atkEF_pokeball_catch_calculation(void) -{ - u8 ball_multiplier = 0; - if (gBattleExecBuffer) - return; - - gActiveBank = gBankAttacker; - gBankTarget = gBankAttacker ^ 1; - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { - EmitBallThrowAnim(0, 5); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr = BattleScript_TrainerBallBlock; - } - else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) - { - EmitBallThrowAnim(0, 4); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr = BattleScript_WallyBallThrow; - } - else - { - u32 odds; - u8 catch_rate; - if (gLastUsedItem == ITEM_SAFARI_BALL) - catch_rate = BATTLE_STRUCT->unk16089 * 1275 / 100; //correct the name to safariFleeRate - else - catch_rate = gBaseStats[gBattleMons[gBankTarget].species].catchRate; - if (gLastUsedItem > 5) - { - switch (gLastUsedItem) - { - case ITEM_NET_BALL: - if (gBattleMons[gBankTarget].type1 == TYPE_WATER || gBattleMons[gBankTarget].type2 == TYPE_WATER || gBattleMons[gBankTarget].type1 == TYPE_BUG || gBattleMons[gBankTarget].type2 == TYPE_BUG) - ball_multiplier = 30; - else - ball_multiplier = 10; - break; - case ITEM_DIVE_BALL: - if (sav1_map_get_light_level() == 5) - ball_multiplier = 35; - else - ball_multiplier = 10; - break; - case ITEM_NEST_BALL: - if (gBattleMons[gBankTarget].level <= 39) - { - ball_multiplier = 40 - gBattleMons[gBankTarget].level; - if (ball_multiplier <= 9) - ball_multiplier = 10; - } - else - ball_multiplier = 10; - break; - case ITEM_REPEAT_BALL: - if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) - ball_multiplier = 30; - else - ball_multiplier = 10; - break; - case ITEM_TIMER_BALL: - ball_multiplier = gBattleResults.battleTurnCounter + 10; - if (ball_multiplier > 40) - ball_multiplier = 40; - break; - case ITEM_LUXURY_BALL: - case ITEM_PREMIER_BALL: - ball_multiplier = 10; - break; - } - } - else - ball_multiplier = sBallCatchBonuses[gLastUsedItem - 2]; - - odds = (catch_rate * ball_multiplier / 10) * (gBattleMons[gBankTarget].maxHP * 3 - gBattleMons[gBankTarget].hp * 2) / (3 * gBattleMons[gBankTarget].maxHP); - if (gBattleMons[gBankTarget].status1 & (STATUS_SLEEP | STATUS_FREEZE)) - odds *= 2; - if (gBattleMons[gBankTarget].status1 & (STATUS_POISON | STATUS_BURN | STATUS_PARALYSIS /*| STATUS_TOXIC_POISON */)) //nice one gf - odds = (odds * 15) / 10; - - if (gLastUsedItem != ITEM_SAFARI_BALL) - { - if (gLastUsedItem == ITEM_MASTER_BALL) - { - gBattleResults.unk5_1 = 1; - } - else - { - if (gBattleResults.unk36[gLastUsedItem - ITEM_ULTRA_BALL] < 0xFF) - gBattleResults.unk36[gLastUsedItem - ITEM_ULTRA_BALL]++; - } - } - if (odds > 254) //poke caught - { - EmitBallThrowAnim(0, 4); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; - SetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_POKEBALL, (const void*) &gLastUsedItem); - if (CalculatePlayerPartyCount() == 6) - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - } - else //poke may be caught, calculate shakes - { - u8 shakes; - odds = Sqrt(Sqrt(16711680 / odds)); - odds = 1048560 / odds; - 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); - MarkBufferBankForExecution(gActiveBank); - if (shakes == 4) //poke caught, copy of the code above - { - gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; - SetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_POKEBALL, (const void*) &gLastUsedItem); - if (CalculatePlayerPartyCount() == 6) - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - } - else //rip - { - gBattleCommunication[MULTISTRING_CHOOSER] = shakes; - gBattlescriptCurrInstr = BattleScript_ShakeBallThrow; - } - } - } -} - -static void atkF0_copy_caught_poke(void) -{ - GiveMonToPlayer(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]); - gBattleResults.caughtPoke = gBattleMons[gBankAttacker ^ 1].species; - GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, gBattleResults.caughtNick); - gBattlescriptCurrInstr++; -} - -static void atkF1_setpoke_as_caught(void) -{ - if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - else - { - GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 3); - if (gBattleMons[gBankTarget].species == SPECIES_UNOWN) - gSaveBlock2.pokedex.unownPersonality = gBattleMons[gBankTarget].personality; - if (gBattleMons[gBankTarget].species == SPECIES_SPINDA) //else if - gSaveBlock2.pokedex.spindaPersonality = gBattleMons[gBankTarget].personality; - gBattlescriptCurrInstr += 5; - } -} - -extern const u32 gBattleTerrainTiles_Building[]; -extern const u32 gBattleTerrainTilemap_Building[]; -extern const u32 gBattleTerrainPalette_BattleTower[]; - -static void atkF2_display_dex_info(void) -{ - switch (gBattleCommunication[0]) - { - case 0: - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gBattleCommunication[0]++; - break; - case 1: - if (!gPaletteFade.active) - { - gBattleCommunication[1] = sub_809070C(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), gBattleMons[gBankTarget].otId, gBattleMons[gBankTarget].personality); - gBattleCommunication[0]++; - } - break; - case 2: - if (!gPaletteFade.active && gMain.callback2 == sub_800F808 && !gTasks[gBattleCommunication[1]].isActive) - { - LZDecompressVram(gBattleTerrainTiles_Building, (void*)(0x06008000)); - LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(0x0600d000)); - LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60); - REG_BG3CNT = 0x5a0b; - gUnknown_030041B0 = 0x100; - BeginNormalPaletteFade(0xfffc, 0, 0x10, 0, 0); - gBattleCommunication[0]++; - } - break; - case 3: - if (!gPaletteFade.active) - gBattlescriptCurrInstr++; - break; - } -} - -__attribute__((naked)) -void sub_802BBD4(u8 r0, u8 r1, u8 r2, u8 r3, u8 sp0) -{ - 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 r4, [sp, 0x20]\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r12, r1\n\ - lsls r2, 24\n\ - lsrs r5, r2, 24\n\ - lsls r3, 24\n\ - lsrs r7, r3, 24\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - mov r8, r4\n\ - mov r2, r12\n\ - cmp r2, r7\n\ - bgt _0802BC5A\n\ - lsls r1, r6, 1\n\ - ldr r0, _0802BC20 @ =0x0600c000\n\ - adds r1, r0\n\ - mov r9, r1\n\ -_0802BC06:\n\ - adds r1, r6, 0\n\ - adds r0, r2, 0x1\n\ - mov r10, r0\n\ - cmp r1, r5\n\ - bgt _0802BC54\n\ - lsls r0, r2, 6\n\ - mov r4, r9\n\ - adds r3, r4, r0\n\ -_0802BC16:\n\ - cmp r2, r12\n\ - bne _0802BC28\n\ - ldr r0, _0802BC24 @ =0x00001022\n\ - b _0802BC36\n\ - .align 2, 0\n\ -_0802BC20: .4byte 0x0600c000\n\ -_0802BC24: .4byte 0x00001022\n\ -_0802BC28:\n\ - cmp r2, r7\n\ - bne _0802BC34\n\ - ldr r0, _0802BC30 @ =0x00001028\n\ - b _0802BC36\n\ - .align 2, 0\n\ -_0802BC30: .4byte 0x00001028\n\ -_0802BC34:\n\ - ldr r0, _0802BC68 @ =0x00001025\n\ -_0802BC36:\n\ - cmp r1, r6\n\ - beq _0802BC42\n\ - adds r0, 0x1\n\ - cmp r1, r5\n\ - bne _0802BC42\n\ - adds r0, 0x1\n\ -_0802BC42:\n\ - mov r4, r8\n\ - cmp r4, 0\n\ - beq _0802BC4A\n\ - movs r0, 0\n\ -_0802BC4A:\n\ - strh r0, [r3]\n\ - adds r3, 0x2\n\ - adds r1, 0x1\n\ - cmp r1, r5\n\ - ble _0802BC16\n\ -_0802BC54:\n\ - mov r2, r10\n\ - cmp r2, r7\n\ - ble _0802BC06\n\ -_0802BC5A:\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\ -_0802BC68: .4byte 0x00001025\n\ - .syntax divided"); -} - -void sub_802BC6C(void) -{ - sub_814A880(0xC8, ((gBattleCommunication[1] << 28) + 1207959552) >> 24); //what could that be? -} - -void nullsub_6(void) -{ - return; -} - -static void atkF3_nickname_caught_poke(void) -{ - switch (gBattleCommunication[0]) - { - case 0: - sub_8023A80(); - gBattleCommunication[0]++; - gBattleCommunication[1] = 0; - sub_802BC6C(); - break; - case 1: - if (gMain.newKeys & DPAD_UP && gBattleCommunication[1] != 0) - { - PlaySE(SE_SELECT); - nullsub_6(); - gBattleCommunication[1] = 0; - sub_802BC6C(); - } - if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[1] == 0) - { - PlaySE(SE_SELECT); - nullsub_6(); - gBattleCommunication[1] = 1; - sub_802BC6C(); - } - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if (gBattleCommunication[1] == 0) - { - gBattleCommunication[0]++; - BeginFastPaletteFade(3); - } - else - gBattleCommunication[0] = 4; - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - gBattleCommunication[0] = 4; - } - break; - case 2: - if (!gPaletteFade.active) - { - GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); - DoNamingScreen(2, BATTLE_STRUCT->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), sub_800F808); - gBattleCommunication[0]++; - } - break; - case 3: - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active ) - { - SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - } - break; - case 4: - if (CalculatePlayerPartyCount() == 6) - gBattlescriptCurrInstr += 5; - else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - break; - } -} - -static void atkF4_802BEF0(void) -{ - gBattleMons[gBankAttacker].hp -= gBattleMoveDamage; - gBattlescriptCurrInstr++; -} - -static void atkF5_removeattackerstatus1(void) -{ - gBattleMons[gBankAttacker].status1 = 0; - gBattlescriptCurrInstr++; -} - -static void atkF6_802BF48(void) -{ - gFightStateTracker = 0xC; -} - -static void atkF7_802BF54(void) -{ - gFightStateTracker = 0xC; - gCurrentMoveTurn = gNoOfAllBanks; -} diff --git a/src/battle_6.c b/src/battle_6.c deleted file mode 100644 index c833aef5e..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 sub_80318FC(); -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 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); - -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) -{ - 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 sub_802FE7C(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 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].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 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); - 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 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 deleted file mode 100644 index f2838467e..000000000 --- a/src/battle_7.c +++ /dev/null @@ -1,1235 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_anim.h" -#include "battle_interface.h" -#include "blend_palette.h" -#include "data2.h" -#include "decompress.h" -#include "main.h" -#include "m4a.h" -#include "palette.h" -#include "pokemon.h" -#include "rom_8077ABC.h" -#include "rom_8094928.h" -#include "songs.h" -#include "sound.h" -#include "species.h" -#include "sprite.h" -#include "task.h" -#include "text.h" -#include "gba/m4a_internal.h" - -struct Struct2019348 -{ - u8 filler0[2]; - u16 unk2; - u8 filler4[4]; - u32 unk8; - u32 unkC; - u32 unk10; -}; - -extern u8 gBattleBufferA[][0x200]; -extern u8 gActiveBank; -extern u32 gBattleExecBuffer; -extern u8 gNoOfAllBanks; -extern u16 gBattlePartyID[]; -extern u8 gBanksBySide[]; -extern u8 gObjectBankIDs[]; -extern u16 gUnknown_02024DE8; -extern u8 gDoingBattleAnim; -extern u32 gPID_perBank[]; -extern struct Window gUnknown_03004210; -extern void (*gBattleBankFunc[])(void); -extern u8 gHealthboxIDs[]; -extern u8 gUnknown_0300434C[]; -extern struct MusicPlayerInfo gMPlay_SE1; -extern struct MusicPlayerInfo gMPlay_SE2; -extern struct MusicPlayerInfo gMPlay_BGM; -extern u32 gBitTable[]; -extern u16 gBattleTypeFlags; -extern u8 gBattleMonForms[]; -extern u8 gBattleAnimPlayerMonIndex; -extern u8 gBattleAnimEnemyMonIndex; -extern void (*gAnimScriptCallback)(void); -extern u8 gAnimScriptActive; -extern const u8 *const gBattleAnims_Unknown1[]; -extern const u8 *const gBattleAnims_Unknown2[]; -extern const struct CompressedSpriteSheet gTrainerFrontPicTable[]; -extern const struct MonCoords gTrainerFrontPicCoords[]; -extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; -extern const u8 gSubstituteDollTilemap[]; -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[]; -extern const struct CompressedSpriteSheet gUnknown_0820A49C[]; -extern const struct CompressedSpriteSheet gUnknown_0820A4AC; -extern const struct CompressedSpriteSheet gUnknown_0820A4B4[]; -extern const struct SpritePalette gUnknown_0820A4D4[]; -extern const u8 gUnknown_08D09C48[]; - -#define ewram19348 (*(struct Struct2019348 *)(ewram + 0x19348)) - -extern void c3_0802FDF4(u8); -extern void sub_80440EC(); -extern void sub_804777C(); -extern void sub_8141828(); -extern u8 sub_8077ABC(); -extern u8 sub_8078874(u8); -extern u8 sub_8077F68(u8); -extern u8 sub_8077F7C(u8); -extern void sub_8094958(void); -extern void sub_80105DC(struct Sprite *); -extern void move_anim_start_t2(); - -void sub_80315E8(u8); -u8 sub_803163C(u8); -void sub_80316CC(u8); -void sub_8031F0C(void); -void refresh_graphics_maybe(u8, u8, u8); -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) -{ - u8 spriteId = sprite->data1; - - if (gSprites[spriteId].affineAnimEnded && !gSprites[spriteId].invisible) - { - if (gSprites[spriteId].animPaused) - gSprites[spriteId].animPaused = FALSE; - else if (gSprites[spriteId].animEnded) - { - gSprites[spriteId].callback = sub_80105DC; - StartSpriteAffineAnim(&gSprites[spriteId], 0); - sprite->callback = SpriteCallbackDummy; - } - } -} - -void unref_sub_8031364(struct Sprite *sprite, bool8 stupid) -{ - sprite->animPaused = TRUE; - sprite->callback = SpriteCallbackDummy; - if (!stupid) - StartSpriteAffineAnim(sprite, 1); - else - StartSpriteAffineAnim(sprite, 1); - AnimateSprite(sprite); -} - -void sub_80313A0(struct Sprite *sprite) -{ - if (!(gUnknown_02024DE8 & 1)) - { - sprite->pos2.x += sprite->data0; - if (sprite->pos2.x == 0) - sprite->callback = SpriteCallbackDummy; - } -} - -void move_anim_start_t2_for_situation(u8 a, u32 b) -{ - ewram17810[gActiveBank].unk0_4 = 1; - if (a == 0) - { - if (b == 0x20) - move_anim_start_t2(gActiveBank, 6); - else if (b == 8 || (b & 0x80)) - move_anim_start_t2(gActiveBank, 0); - else if (b == 0x10) - move_anim_start_t2(gActiveBank, 2); - else if (b & 7) - move_anim_start_t2(gActiveBank, 4); - else if (b == 0x40) - move_anim_start_t2(gActiveBank, 5); - else - ewram17810[gActiveBank].unk0_4 = 0; - } - else - { - if (b & 0x000F0000) - move_anim_start_t2(gActiveBank, 3); - else if (b & 7) - move_anim_start_t2(gActiveBank, 1); - else if (b & 0x10000000) - move_anim_start_t2(gActiveBank, 7); - else if (b & 0x08000000) - move_anim_start_t2(gActiveBank, 8); - else if (b & 0x0000E000) - move_anim_start_t2(gActiveBank, 9); - else - ewram17810[gActiveBank].unk0_4 = 0; - } -} - -bool8 move_anim_start_t3(u8 a, u8 b, u8 c, u8 d, u16 e) -{ - u8 taskId; - - if (d == 0 && (e & 0x80)) - { - gBattleMonForms[a] = e & 0x7F; - return TRUE; - } - if (ewram17800[a].unk0_2 && sub_803163C(d) == 0) - return TRUE; - if (ewram17800[a].unk0_2 && d == 2 && gSprites[gObjectBankIDs[a]].invisible) - { - refresh_graphics_maybe(a, 1, gObjectBankIDs[a]); - sub_80324E0(a); - return TRUE; - } - gBattleAnimPlayerMonIndex = b; - gBattleAnimEnemyMonIndex = c; - ewram17840.unk0 = e; - DoMoveAnim(gBattleAnims_Unknown1, d, 0); - taskId = CreateTask(sub_80315E8, 10); - gTasks[taskId].data[0] = a; - ewram17810[gTasks[taskId].data[0]].unk0_5 = 1; - return FALSE; -} - -void sub_80315E8(u8 taskId) -{ - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - ewram17810[gTasks[taskId].data[0]].unk0_5 = 0; - DestroyTask(taskId); - } -} - -u8 sub_803163C(u8 a) -{ - switch (a) - { - case 2: - case 10: - case 11: - case 12: - case 13: - case 17: - return 1; - default: - return 0; - } -} - -void move_anim_start_t4(u8 a, u8 b, u8 c, u8 d) -{ - u8 taskId; - - gBattleAnimPlayerMonIndex = b; - gBattleAnimEnemyMonIndex = c; - DoMoveAnim(gBattleAnims_Unknown2, d, 0); - taskId = CreateTask(sub_80316CC, 10); - gTasks[taskId].data[0] = a; - ewram17810[gTasks[taskId].data[0]].unk0_6 = 1; -} - -void sub_80316CC(u8 taskId) -{ - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - ewram17810[gTasks[taskId].data[0]].unk0_6 = 0; - DestroyTask(taskId); - } -} - -u8 sub_8031720(int unused1, int unused2) -{ - return 0; -} - -bool8 mplay_80342A4(u8 a) -{ - u8 zero = 0; - - if (IsSEPlaying()) - { - ewram17810[a].unk8++; - if (ewram17810[gActiveBank].unk8 < 30) - return TRUE; - m4aMPlayStop(&gMPlay_SE1); - m4aMPlayStop(&gMPlay_SE2); - } - if (zero == 0) - { - ewram17810[a].unk8 = 0; - return FALSE; - } - return TRUE; -} - -void sub_8031794(struct Pokemon *pkmn, u8 b) -{ - u32 personalityValue; - u16 species; - u32 r7; - u32 otId; - u8 var; - u16 paletteOffset; - const u8 *lzPaletteData; - - personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); - if (ewram17800[b].unk2 == 0) - { - species = GetMonData(pkmn, MON_DATA_SPECIES); - r7 = personalityValue; - } - else - { - species = ewram17800[b].unk2; - r7 = gPID_perBank[b]; - } - otId = GetMonData(pkmn, MON_DATA_OT_ID); - var = GetBankIdentity(b); - HandleLoadSpecialPokePic( - &gMonFrontPicTable[species], - gMonFrontPicCoords[species].coords, - gMonFrontPicCoords[species].y_offset, - 0x02000000, - gUnknown_081FAF4C[var], - species, - 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 + b * 16, 0x20); - if (species == SPECIES_CASTFORM) - { - paletteOffset = 0x100 + b * 16; - sub_800D238(lzPaletteData, ewram + 0x16400); - LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); - } - if (ewram17800[b].unk2 != 0) - { - BlendPalette(paletteOffset, 16, 6, 0x7FFF); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); - } -} - -void sub_80318FC(struct Pokemon *pkmn, u8 b) -{ - u32 personalityValue; - u16 species; - u32 r7; - u32 otId; - u8 var; - u16 paletteOffset; - const u8 *lzPaletteData; - - personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); - if (ewram17800[b].unk2 == 0) - { - species = GetMonData(pkmn, MON_DATA_SPECIES); - r7 = personalityValue; - } - else - { - species = ewram17800[b].unk2; - r7 = gPID_perBank[b]; - } - otId = GetMonData(pkmn, MON_DATA_OT_ID); - var = GetBankIdentity(b); - HandleLoadSpecialPokePic( - &gMonBackPicTable[species], - gMonBackPicCoords[species].coords, - gMonBackPicCoords[species].y_offset, - 0x02000000, - gUnknown_081FAF4C[var], - species, - 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 + b * 16, 0x20); - if (species == SPECIES_CASTFORM) - { - paletteOffset = 0x100 + b * 16; - sub_800D238(lzPaletteData, ewram + 0x16400); - LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); - } - if (ewram17800[b].unk2 != 0) - { - BlendPalette(paletteOffset, 16, 6, 0x7FFF); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); - } -} - -void unref_sub_8031A64(void) -{ -} - -void nullsub_9(u16 unused) -{ -} - -void sub_8031A6C(u16 a, u8 b) -{ - u8 status; - struct CompressedSpriteSheet spriteSheet; - - status = GetBankIdentity(b); - DecompressPicFromTable_2( - &gTrainerFrontPicTable[a], - gTrainerFrontPicCoords[a].coords, - gTrainerFrontPicCoords[a].y_offset, - (void *)0x02000000, - gUnknown_081FAF4C[status], - 0); - spriteSheet.data = gUnknown_081FAF4C[status]; - spriteSheet.size = gTrainerFrontPicTable[a].size; - spriteSheet.tag = gTrainerFrontPicTable[a].tag; - LoadCompressedObjectPic(&spriteSheet); - LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[a]); -} - -void sub_8031AF4(u16 a, u8 b) -{ - u8 status; - - status = GetBankIdentity(b); - DecompressPicFromTable_2( - &gTrainerBackPicTable[a], - gTrainerBackPicCoords[a].coords, - gTrainerBackPicCoords[a].y_offset, - (void *)0x02000000, - gUnknown_081FAF4C[status], - 0); - LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + b * 16, 32); -} - -void nullsub_10(int unused) -{ -} - -void sub_8031B74(u16 a) -{ - FreeSpritePaletteByTag(gTrainerFrontPicPaletteTable[a].tag); - FreeSpriteTilesByTag(gTrainerFrontPicTable[a].tag); -} - -void unref_sub_8031BA0(void) -{ - u8 count; - u8 i; - - LoadSpritePalette(&gUnknown_0820A4D4[0]); - LoadSpritePalette(&gUnknown_0820A4D4[1]); - if (!IsDoubleBattle()) - { - LoadCompressedObjectPic(&gUnknown_0820A47C); - LoadCompressedObjectPic(&gUnknown_0820A484); - count = 2; - } - else - { - LoadCompressedObjectPic(&gUnknown_0820A48C[0]); - LoadCompressedObjectPic(&gUnknown_0820A48C[1]); - LoadCompressedObjectPic(&gUnknown_0820A49C[0]); - LoadCompressedObjectPic(&gUnknown_0820A49C[1]); - count = 4; - } - for (i = 0; i < count; i++) - LoadCompressedObjectPic(&gUnknown_0820A4B4[gBanksBySide[i]]); -} - -bool8 sub_8031C30(u8 a) -{ - bool8 retVal = FALSE; - - if (a != 0) - { - if (a == 1) - { - LoadSpritePalette(&gUnknown_0820A4D4[0]); - LoadSpritePalette(&gUnknown_0820A4D4[1]); - } - else if (!IsDoubleBattle()) - { - if (a == 2) - { - if (gBattleTypeFlags & 0x80) - LoadCompressedObjectPic(&gUnknown_0820A4AC); - else - LoadCompressedObjectPic(&gUnknown_0820A47C); - } - else if (a == 3) - LoadCompressedObjectPic(&gUnknown_0820A484); - else if (a == 4) - LoadCompressedObjectPic(&gUnknown_0820A4B4[gBanksBySide[0]]); - else if (a == 5) - LoadCompressedObjectPic(&gUnknown_0820A4B4[gBanksBySide[1]]); - else - retVal = TRUE; - } - else - { - if (a == 2) - LoadCompressedObjectPic(&gUnknown_0820A48C[0]); - else if (a == 3) - LoadCompressedObjectPic(&gUnknown_0820A48C[1]); - else if (a == 4) - LoadCompressedObjectPic(&gUnknown_0820A49C[0]); - else if (a == 5) - LoadCompressedObjectPic(&gUnknown_0820A49C[1]); - else if (a == 6) - LoadCompressedObjectPic(&gUnknown_0820A4B4[gBanksBySide[0]]); - else if (a == 7) - LoadCompressedObjectPic(&gUnknown_0820A4B4[gBanksBySide[1]]); - else if (a == 8) - LoadCompressedObjectPic(&gUnknown_0820A4B4[gBanksBySide[2]]); - else if (a == 9) - LoadCompressedObjectPic(&gUnknown_0820A4B4[gBanksBySide[3]]); - else - retVal = TRUE; - } - } - return retVal; -} - -void load_gfxc_health_bar(void) -{ - sub_800D238(gUnknown_08D09C48, (void *)0x02000000); -} - -u8 battle_load_something(u8 *pState, u8 *b) -{ - bool8 retVal = FALSE; - - switch (*pState) - { - case 0: - sub_8031F0C(); - (*pState)++; - break; - case 1: - if (sub_8031C30(*b) == 0) - { - (*b)++; - } - else - { - *b = 0; - (*pState)++; - } - break; - case 2: - (*pState)++; - break; - case 3: - if ((gBattleTypeFlags & 0x80) && *b == 0) - gHealthboxIDs[*b] = battle_make_oam_safari_battle(); - else - gHealthboxIDs[*b] = battle_make_oam_normal_battle(*b); - (*b)++; - if (*b == gNoOfAllBanks) - { - *b = 0; - (*pState)++; - } - break; - case 4: - sub_8043F44(*b); - if (gBanksBySide[*b] <= 1) - nullsub_11(gHealthboxIDs[*b], 0); - else - nullsub_11(gHealthboxIDs[*b], 1); - (*b)++; - if (*b == gNoOfAllBanks) - { - *b = 0; - (*pState)++; - } - break; - case 5: - if (GetBankSide(*b) == 0) - { - if (!(gBattleTypeFlags & 0x80)) - sub_8045A5C(gHealthboxIDs[*b], &gPlayerParty[gBattlePartyID[*b]], 0); - } - else - { - sub_8045A5C(gHealthboxIDs[*b], &gEnemyParty[gBattlePartyID[*b]], 0); - } - sub_8043DB0(gHealthboxIDs[*b]); - (*b)++; - if (*b == gNoOfAllBanks) - { - *b = 0; - (*pState)++; - } - break; - case 6: - sub_80327CC(); - sub_8094958(); - retVal = TRUE; - break; - } - return retVal; -} - -void sub_8031EE8(void) -{ - memset(ewram17810, 0, 0x30); - memset(&ewram17840, 0, 0x10); -} - -void sub_8031F0C(void) -{ - sub_8031EE8(); - memset(ewram17800, 0, 0x10); -} - -void sub_8031F24(void) -{ - s32 i; - - for (i = 0; i < gNoOfAllBanks; i++) - ewram17800[i].unk0_0 = gSprites[gObjectBankIDs[i]].invisible; -} - -void sub_8031F88(u8 a) -{ - ewram17800[a].unk0_0 = gSprites[gObjectBankIDs[a]].invisible; -} - -void sub_8031FC4(u8 a, u8 b, bool8 c) -{ - u16 paletteOffset; - u16 species; - u32 personalityValue; - u32 otId; - u8 r10; - const u8 *lzPaletteData; - - if (c) - { - StartSpriteAnim(&gSprites[gObjectBankIDs[a]], ewram17840.unk0); - paletteOffset = 0x100 + a * 16; - LoadPalette(ewram + 0x16400 + ewram17840.unk0 * 32, paletteOffset, 32); - gBattleMonForms[a] = ewram17840.unk0; - if (ewram17800[a].unk2 != 0) - { - BlendPalette(paletteOffset, 16, 6, 0x7FFF); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); - } - gSprites[gObjectBankIDs[a]].pos1.y = sub_8077F68(a); - } - else - { - const void *src; - void *dst; - - if (IsContest()) - { - r10 = 0; - species = ewram19348.unk2; - personalityValue = ewram19348.unk8; - otId = ewram19348.unkC; - HandleLoadSpecialPokePic( - &gMonBackPicTable[species], - gMonBackPicCoords[species].coords, - gMonBackPicCoords[species].y_offset, - 0x02000000, - gUnknown_081FAF4C[0], - species, - ewram19348.unk10); - } - else - { - r10 = GetBankIdentity(a); - if (GetBankSide(b) == 1) - species = GetMonData(&gEnemyParty[gBattlePartyID[b]], MON_DATA_SPECIES); - else - species = GetMonData(&gPlayerParty[gBattlePartyID[b]], MON_DATA_SPECIES); - if (GetBankSide(a) == 0) - { - personalityValue = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_PERSONALITY); - otId = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_OT_ID); - HandleLoadSpecialPokePic( - &gMonBackPicTable[species], - gMonBackPicCoords[species].coords, - gMonBackPicCoords[species].y_offset, - 0x02000000, - gUnknown_081FAF4C[r10], - species, - gPID_perBank[a]); - } - else - { - personalityValue = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_PERSONALITY); - otId = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_OT_ID); - HandleLoadSpecialPokePic( - &gMonFrontPicTable[species], - gMonFrontPicCoords[species].coords, - gMonFrontPicCoords[species].y_offset, - 0x02000000, - gUnknown_081FAF4C[r10], - species, - gPID_perBank[a]); - } - } - src = gUnknown_081FAF4C[r10]; - dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[a]].oam.tileNum * 32); - DmaCopy32(3, src, dst, 0x800); - paletteOffset = 0x100 + a * 16; - lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue); - sub_800D238(lzPaletteData, ewram); - LoadPalette(ewram, paletteOffset, 32); - if (species == SPECIES_CASTFORM) - { - u16 *paletteSrc = (u16 *)(ewram + 0x16400); - - sub_800D238(lzPaletteData, paletteSrc); - LoadPalette(paletteSrc + gBattleMonForms[b] * 16, paletteOffset, 32); - } - BlendPalette(paletteOffset, 16, 6, 0x7FFF); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); - if (!IsContest()) - { - ewram17800[a].unk2 = species; - gBattleMonForms[a] = gBattleMonForms[b]; - } - gSprites[gObjectBankIDs[a]].pos1.y = sub_8077F68(a); - StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); - } -} - -void sub_8032350(u8 a, u8 b) -{ - u8 r4; - u16 foo; - const u8 *gSubstituteDollPal_; - void *src; - s32 i; - - if (b == 0) - { - if (IsContest()) - r4 = 0; - else - r4 = GetBankIdentity(a); - if (IsContest()) - LZDecompressVram(gSubstituteDollTilemap, gUnknown_081FAF4C[r4]); - else if (GetBankSide(a) != 0) - LZDecompressVram(gSubstituteDollGfx, gUnknown_081FAF4C[r4]); - else - LZDecompressVram(gSubstituteDollTilemap, gUnknown_081FAF4C[r4]); - // There is probably a way to do this without all the temp variables, but I couldn't figure it out. - foo = a * 16; - gSubstituteDollPal_ = gSubstituteDollPal; - src = gUnknown_081FAF4C[r4]; - for (i = 0; i < 3; i++) - DmaCopy32(3, src, src + i * 0x800 + 0x800, 0x800); - LoadCompressedPalette(gSubstituteDollPal_, 0x100 + foo, 32); - } - else - { - if (!IsContest()) - { - if (GetBankSide(a) != 0) - sub_8031794(&gEnemyParty[gBattlePartyID[a]], a); - else - sub_80318FC(&gPlayerParty[gBattlePartyID[a]], a); - } - } -} - -void refresh_graphics_maybe(u8 a, u8 b, u8 spriteId) -{ - sub_8032350(a, b); - StartSpriteAnim(&gSprites[spriteId], gBattleMonForms[a]); - if (b == 0) - gSprites[spriteId].pos1.y = sub_8077F7C(a); - else - gSprites[spriteId].pos1.y = sub_8077F68(a); -} - -void sub_80324BC(u8 a, u16 b) -{ - if (b == 0xA4) - ewram17800[a].unk0_2 = 1; -} - -void sub_80324E0(u8 a) -{ - ewram17800[a].unk0_2 = 0; -} - -void sub_80324F8(struct Pokemon *pkmn, u8 b) -{ - u16 hp = GetMonData(pkmn, MON_DATA_HP); - u16 maxHP = GetMonData(pkmn, MON_DATA_MAX_HP); - - if (GetHPBarLevel(hp, maxHP) == 1) - { - if (!ewram17800[b].unk0_1) - { - if (!ewram17800[b ^ 2].unk0_1) - PlaySE(SE_HINSI); - ewram17800[b].unk0_1 = 1; - } - } - else - { - ewram17800[b].unk0_1 = 0; - if (!IsDoubleBattle()) - { - m4aSongNumStop(SE_HINSI); - return; - } - if (IsDoubleBattle() && !ewram17800[b ^ 2].unk0_1) - { - m4aSongNumStop(SE_HINSI); - return; - } - } -} - -void BattleMusicStop(void) -{ - u8 r4 = GetBankByPlayerAI(0); - - ewram17800[r4].unk0_1 = 0; - if (IsDoubleBattle()) - ewram17800[r4 ^ 2].unk0_1 = 0; - m4aSongNumStop(SE_HINSI); -} - -u8 unref_sub_8032604(struct Pokemon *pkmn) -{ - u16 hp = GetMonData(pkmn, MON_DATA_HP); - u16 maxHP = GetMonData(pkmn, MON_DATA_MAX_HP); - - return GetHPBarLevel(hp, maxHP); -} - -void sub_8032638(void) -{ - if (gMain.inBattle) - { - u8 r8 = GetBankByPlayerAI(0); - u8 r9 = GetBankByPlayerAI(2); - u8 r4 = pokemon_order_func(gBattlePartyID[r8]); - u8 r5 = pokemon_order_func(gBattlePartyID[r9]); - - if (GetMonData(&gPlayerParty[r4], MON_DATA_HP) != 0) - sub_80324F8(&gPlayerParty[r4], r8); - if (IsDoubleBattle()) - { - if (GetMonData(&gPlayerParty[r5], MON_DATA_HP) != 0) - sub_80324F8(&gPlayerParty[r5], r9); - } - } -} - -void sub_80326EC(u8 a) -{ - s32 i; - - for (i = 0; i < gNoOfAllBanks; i++) - { - if (sub_8078874(i) != 0) - { - gSprites[gObjectBankIDs[i]].oam.affineMode = a; - if (a == 0) - { - ewram17810[i].unk6 = gSprites[gObjectBankIDs[i]].oam.matrixNum; - gSprites[gObjectBankIDs[i]].oam.matrixNum = 0; - } - else - { - gSprites[gObjectBankIDs[i]].oam.matrixNum = ewram17810[i].unk6; - } - } - } -} - -void sub_80327CC(void) -{ - u8 r5; - - LoadCompressedObjectPic(&gUnknown_081FAF24); - r5 = GetBankByPlayerAI(1); - ewram17810[r5].unk7 = CreateSprite(&gSpriteTemplate_81FAF34, sub_8077ABC(r5, 0), sub_8077ABC(r5, 1) + 32, 0xC8); - gSprites[ewram17810[r5].unk7].data0 = r5; - if (IsDoubleBattle()) - { - r5 = GetBankByPlayerAI(3); - ewram17810[r5].unk7 = CreateSprite(&gSpriteTemplate_81FAF34, sub_8077ABC(r5, 0), sub_8077ABC(r5, 1) + 32, 0xC8); - gSprites[ewram17810[r5].unk7].data0 = r5; - } -} - -void sub_80328A4(struct Sprite *sprite) -{ - bool8 invisible = FALSE; - u8 r4 = sprite->data0; - struct Sprite *r7 = &gSprites[gObjectBankIDs[r4]]; - - if (!r7->inUse || sub_8078874(r4) == 0) - { - sprite->callback = sub_8032978; - return; - } - if (gAnimScriptActive || r7->invisible) - invisible = TRUE; - else if (ewram17800[r4].unk2 != 0 && gEnemyMonElevation[ewram17800[r4].unk2] == 0) - invisible = TRUE; - if (ewram17800[r4].unk0_2) - invisible = TRUE; - sprite->pos1.x = r7->pos1.x; - sprite->pos2.x = r7->pos2.x; - sprite->invisible = invisible; -} - -void sub_8032978(struct Sprite *sprite) -{ - sprite->invisible = TRUE; -} - -void sub_8032984(u8 a, u16 b) -{ - if (GetBankSide(a) != 0) - { - if (ewram17800[a].unk2 != 0) - b = ewram17800[a].unk2; - if (gEnemyMonElevation[b] != 0) - gSprites[ewram17810[a].unk7].callback = sub_80328A4; - else - gSprites[ewram17810[a].unk7].callback = sub_8032978; - } -} - -void sub_8032A08(u8 a) -{ - gSprites[ewram17810[a].unk7].callback = sub_8032978; -} - -void sub_8032A38(void) -{ - u16 *ptr = (u16 *)(VRAM + 0x240); - s32 i; - s32 j; - - for (i = 0; i < 9; i++) - { - for (j = 0; j < 16; j++) - { - if (!(*ptr & 0xF000)) - *ptr |= 0xF000; - if (!(*ptr & 0x0F00)) - *ptr |= 0x0F00; - if (!(*ptr & 0x00F0)) - *ptr |= 0x00F0; - if (!(*ptr & 0x000F)) - *ptr |= 0x000F; - ptr++; - } - } -} - -void sub_8032AA8(u8 a, u8 b) -{ - 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].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]; -} diff --git a/src/battle_8.c b/src/battle_8.c deleted file mode 100644 index 75f10c4b1..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 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); -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); - - 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 sub_8035030(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 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].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 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 36a287efc..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 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); - -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].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; - } - } - 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) -{ - 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 sub_811F7F4(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 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].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 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; - } - 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 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].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 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].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 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]; - sub_80318FC(&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_ai.c b/src/battle_ai.c deleted file mode 100644 index a1cb805d9..000000000 --- a/src/battle_ai.c +++ /dev/null @@ -1,2150 +0,0 @@ -#include "global.h" -#include "battle_ai.h" -#include "abilities.h" -#include "battle.h" -#include "battle_move_effects.h" -#include "data2.h" -#include "item.h" -#include "moves.h" -#include "pokemon.h" -#include "rng.h" -#include "rom_8077ABC.h" -#include "species.h" -#include "util.h" - -extern u16 gBattleTypeFlags; -extern u16 gBattleWeather; -extern u8 gActiveBank; -extern u16 gBattlePartyID[MAX_BANKS_BATTLE]; -extern u16 gCurrentMove; -extern int gBattleMoveDamage; -extern u8 gBankAttacker; -extern u8 gBankTarget; -extern u8 gAbsentBankFlags; -extern u8 gBattleMoveFlags; -extern u16 gDynamicBasePower; -extern u16 gLastUsedMove[MAX_BANKS_BATTLE]; -extern u32 gStatuses3[MAX_BANKS_BATTLE]; -extern u16 gSideAffecting[2]; -extern struct BattlePokemon gBattleMons[MAX_BANKS_BATTLE]; -extern u8 gCritMultiplier; -extern u16 gTrainerBattleOpponent; -extern u8 *BattleAIs[]; - -enum -{ - WEATHER_TYPE_SUN, - WEATHER_TYPE_RAIN, - WEATHER_TYPE_SANDSTORM, - WEATHER_TYPE_HAIL, -}; - -/* -gAIScriptPtr is a pointer to the next battle AI cmd command to read. -when a command finishes processing, gAIScriptPtr is incremented by -the number of bytes that the current command had reserved for arguments -in order to read the next command correctly. refer to battle_ai_scripts.s for the -AI scripts. -*/ -EWRAM_DATA u8 *gAIScriptPtr = NULL; - -static void BattleAICmd_if_random_less_than(void); -static void BattleAICmd_if_random_greater_than(void); -static void BattleAICmd_if_random_equal(void); -static void BattleAICmd_if_random_not_equal(void); -static void BattleAICmd_score(void); -static void BattleAICmd_if_hp_less_than(void); -static void BattleAICmd_if_hp_more_than(void); -static void BattleAICmd_if_hp_equal(void); -static void BattleAICmd_if_hp_not_equal(void); -static void BattleAICmd_if_status(void); -static void BattleAICmd_if_not_status(void); -static void BattleAICmd_if_status2(void); -static void BattleAICmd_if_not_status2(void); -static void BattleAICmd_if_status3(void); -static void BattleAICmd_if_not_status3(void); -static void BattleAICmd_if_status4(void); -static void BattleAICmd_if_not_status4(void); -static void BattleAICmd_if_less_than(void); -static void BattleAICmd_if_more_than(void); -static void BattleAICmd_if_equal(void); -static void BattleAICmd_if_not_equal(void); -static void BattleAICmd_if_less_than_32(void); -static void BattleAICmd_if_more_than_32(void); -static void BattleAICmd_if_equal_32(void); -static void BattleAICmd_if_not_equal_32(void); -static void BattleAICmd_if_move(void); -static void BattleAICmd_if_not_move(void); -static void BattleAICmd_if_in_bytes(void); -static void BattleAICmd_if_not_in_bytes(void); -static void BattleAICmd_if_in_words(void); -static void BattleAICmd_if_not_in_words(void); -static void BattleAICmd_if_user_can_damage(void); -static void BattleAICmd_if_user_cant_damage(void); -static void BattleAICmd_get_turn_count(void); -static void BattleAICmd_get_type(void); -static void BattleAICmd_get_move_power(void); -static void BattleAICmd_is_most_powerful_move(void); -static void BattleAICmd_get_move(void); -static void BattleAICmd_if_arg_equal(void); -static void BattleAICmd_if_arg_not_equal(void); -static void BattleAICmd_if_would_go_first(void); -static void BattleAICmd_if_would_not_go_first(void); -static void BattleAICmd_nullsub_2A(void); -static void BattleAICmd_nullsub_2B(void); -static void BattleAICmd_count_alive_pokemon(void); -static void BattleAICmd_get_considered_move(void); -static void BattleAICmd_get_considered_move_effect(void); -static void BattleAICmd_get_ability(void); -static void BattleAICmd_get_highest_possible_damage(void); -static void BattleAICmd_if_damage_bonus(void); -static void BattleAICmd_nullsub_32(void); -static void BattleAICmd_nullsub_33(void); -static void BattleAICmd_if_status_in_party(void); -static void BattleAICmd_if_status_not_in_party(void); -static void BattleAICmd_get_weather(void); -static void BattleAICmd_if_effect(void); -static void BattleAICmd_if_not_effect(void); -static void BattleAICmd_if_stat_level_less_than(void); -static void BattleAICmd_if_stat_level_more_than(void); -static void BattleAICmd_if_stat_level_equal(void); -static void BattleAICmd_if_stat_level_not_equal(void); -static void BattleAICmd_if_can_faint(void); -static void BattleAICmd_if_cant_faint(void); -static void BattleAICmd_if_has_move(void); -static void BattleAICmd_if_dont_have_move(void); -static void BattleAICmd_if_move_effect(void); -static void BattleAICmd_if_not_move_effect(void); -static void BattleAICmd_if_last_move_did_damage(void); -static void BattleAICmd_if_encored(void); -static void BattleAICmd_flee(void); -static void BattleAICmd_if_random_100(void); -static void BattleAICmd_watch(void); -static void BattleAICmd_get_hold_effect(void); -static void BattleAICmd_get_gender(void); -static void BattleAICmd_is_first_turn(void); -static void BattleAICmd_get_stockpile_count(void); -static void BattleAICmd_is_double_battle(void); -static void BattleAICmd_get_used_item(void); -static void BattleAICmd_get_move_type_from_result(void); -static void BattleAICmd_get_move_power_from_result(void); -static void BattleAICmd_get_move_effect_from_result(void); -static void BattleAICmd_get_protect_count(void); -static void BattleAICmd_nullsub_52(void); -static void BattleAICmd_nullsub_53(void); -static void BattleAICmd_nullsub_54(void); -static void BattleAICmd_nullsub_55(void); -static void BattleAICmd_nullsub_56(void); -static void BattleAICmd_nullsub_57(void); -static void BattleAICmd_call(void); -static void BattleAICmd_jump(void); -static void BattleAICmd_end(void); -static void BattleAICmd_if_level_compare(void); -static void BattleAICmd_if_taunted(void); -static void BattleAICmd_if_not_taunted(void); - -typedef void (*BattleAICmdFunc)(void); - -static const BattleAICmdFunc sBattleAICmdTable[] = -{ - BattleAICmd_if_random_less_than, // 0x0 - BattleAICmd_if_random_greater_than, // 0x1 - BattleAICmd_if_random_equal, // 0x2 - BattleAICmd_if_random_not_equal, // 0x3 - BattleAICmd_score, // 0x4 - BattleAICmd_if_hp_less_than, // 0x5 - BattleAICmd_if_hp_more_than, // 0x6 - BattleAICmd_if_hp_equal, // 0x7 - BattleAICmd_if_hp_not_equal, // 0x8 - BattleAICmd_if_status, // 0x9 - BattleAICmd_if_not_status, // 0xA - BattleAICmd_if_status2, // 0xB - BattleAICmd_if_not_status2, // 0xC - BattleAICmd_if_status3, // 0xD - BattleAICmd_if_not_status3, // 0xE - BattleAICmd_if_status4, // 0xF - BattleAICmd_if_not_status4, // 0x10 - BattleAICmd_if_less_than, // 0x11 - BattleAICmd_if_more_than, // 0x12 - BattleAICmd_if_equal, // 0x13 - BattleAICmd_if_not_equal, // 0x14 - BattleAICmd_if_less_than_32, // 0x15 - BattleAICmd_if_more_than_32, // 0x16 - BattleAICmd_if_equal_32, // 0x17 - BattleAICmd_if_not_equal_32, // 0x18 - BattleAICmd_if_move, // 0x19 - BattleAICmd_if_not_move, // 0x1A - BattleAICmd_if_in_bytes, // 0x1B - BattleAICmd_if_not_in_bytes, // 0x1C - BattleAICmd_if_in_words, // 0x1D - BattleAICmd_if_not_in_words, // 0x1E - BattleAICmd_if_user_can_damage, // 0x1F - BattleAICmd_if_user_cant_damage, // 0x20 - BattleAICmd_get_turn_count, // 0x21 - BattleAICmd_get_type, // 0x22 - BattleAICmd_get_move_power, // 0x23 - BattleAICmd_is_most_powerful_move, // 0x24 - BattleAICmd_get_move, // 0x25 - BattleAICmd_if_arg_equal, // 0x26 - BattleAICmd_if_arg_not_equal, // 0x27 - BattleAICmd_if_would_go_first, // 0x28 - BattleAICmd_if_would_not_go_first, // 0x29 - BattleAICmd_nullsub_2A, // 0x2A - BattleAICmd_nullsub_2B, // 0x2B - BattleAICmd_count_alive_pokemon, // 0x2C - BattleAICmd_get_considered_move, // 0x2D - BattleAICmd_get_considered_move_effect, // 0x2E - BattleAICmd_get_ability, // 0x2F - BattleAICmd_get_highest_possible_damage, // 0x30 - BattleAICmd_if_damage_bonus, // 0x31 - BattleAICmd_nullsub_32, // 0x32 - BattleAICmd_nullsub_33, // 0x33 - BattleAICmd_if_status_in_party, // 0x34 - BattleAICmd_if_status_not_in_party, // 0x35 - BattleAICmd_get_weather, // 0x36 - BattleAICmd_if_effect, // 0x37 - BattleAICmd_if_not_effect, // 0x38 - BattleAICmd_if_stat_level_less_than, // 0x39 - BattleAICmd_if_stat_level_more_than, // 0x3A - BattleAICmd_if_stat_level_equal, // 0x3B - BattleAICmd_if_stat_level_not_equal, // 0x3C - BattleAICmd_if_can_faint, // 0x3D - BattleAICmd_if_cant_faint, // 0x3E - BattleAICmd_if_has_move, // 0x3F - BattleAICmd_if_dont_have_move, // 0x40 - BattleAICmd_if_move_effect, // 0x41 - BattleAICmd_if_not_move_effect, // 0x42 - BattleAICmd_if_last_move_did_damage, // 0x43 - BattleAICmd_if_encored, // 0x44 - BattleAICmd_flee, // 0x45 - BattleAICmd_if_random_100, // 0x46 - BattleAICmd_watch, // 0x47 - BattleAICmd_get_hold_effect, // 0x48 - BattleAICmd_get_gender, // 0x49 - BattleAICmd_is_first_turn, // 0x4A - BattleAICmd_get_stockpile_count, // 0x4B - BattleAICmd_is_double_battle, // 0x4C - BattleAICmd_get_used_item, // 0x4D - BattleAICmd_get_move_type_from_result, // 0x4E - BattleAICmd_get_move_power_from_result, // 0x4F - BattleAICmd_get_move_effect_from_result, // 0x50 - BattleAICmd_get_protect_count, // 0x51 - BattleAICmd_nullsub_52, // 0x52 - BattleAICmd_nullsub_53, // 0x53 - BattleAICmd_nullsub_54, // 0x54 - BattleAICmd_nullsub_55, // 0x55 - BattleAICmd_nullsub_56, // 0x56 - BattleAICmd_nullsub_57, // 0x57 - BattleAICmd_call, // 0x58 - BattleAICmd_jump, // 0x59 - BattleAICmd_end, // 0x5A - BattleAICmd_if_level_compare, // 0x5B - BattleAICmd_if_taunted, // 0x5C - BattleAICmd_if_not_taunted, // 0x5D -}; - -#ifdef NONMATCHING -static -#endif -const u16 sDiscouragedPowerfulMoveEffects[] = -{ - EFFECT_EXPLOSION, - EFFECT_DREAM_EATER, - EFFECT_RAZOR_WIND, - EFFECT_SKY_ATTACK, - EFFECT_RECHARGE, - EFFECT_SKULL_BASH, - EFFECT_SOLARBEAM, - EFFECT_SPIT_UP, - EFFECT_FOCUS_PUNCH, - EFFECT_SUPERPOWER, - EFFECT_ERUPTION, - EFFECT_OVERHEAT, - 0xFFFF -}; - -// if the AI is a Link battle, safari, battle tower, or ereader, it will ignore considering item uses. -void BattleAI_HandleItemUseBeforeAISetup(void) -{ - s32 i; - u8 *data = (u8 *)UNK_2016A00_STRUCT; - - for (i = 0; (u32)i < sizeof(struct UnkBattleStruct1); i++) - data[i] = 0; - - if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) - && gTrainerBattleOpponent != 0x400 - && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) - { - for (i = 0; i < MAX_TRAINER_ITEMS; i++) - { - if (gTrainers[gTrainerBattleOpponent].items[i] != 0) - { - UNK_2016A00_STRUCT->items[UNK_2016A00_STRUCT->numOfItems] = gTrainers[gTrainerBattleOpponent].items[i]; - UNK_2016A00_STRUCT->numOfItems++; - } - } - } - - BattleAI_SetupAIData(); -} - -void BattleAI_SetupAIData(void) -{ - s32 i; - u8 *data = (u8 *)AI_THINKING_STRUCT; - u8 r7; - - // clear AI data and set default move score to 100. strange that they didn't use memset here. - for (i = 0; (u32)i < sizeof(struct AI_ThinkingStruct); i++) - data[i] = 0; - for (i = 0; i < MAX_MON_MOVES; i++) - AI_THINKING_STRUCT->score[i] = 100; - - r7 = sub_8015A98(gActiveBank, 0, 0xFF); - - // probably sets up the moves to consider and ignores non-valid moves such as NO_MOVE or glitch moves. - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBitTable[i] & r7) - AI_THINKING_STRUCT->score[i] = 0; - - AI_THINKING_STRUCT->simulatedRNG[i] = 100 - (Random() % 16); - } - - // clear AI stack. - AI_STACK->size = 0; - gBankAttacker = gActiveBank; - - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - gBankTarget = Random() & 2; // just pick somebody to target. - - if (gAbsentBankFlags & gBitTable[gBankTarget]) - gBankTarget ^= 2; - } - else - gBankTarget = gActiveBank ^ 1; - - // special AI flag cases. - if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) - AI_THINKING_STRUCT->aiFlags = 0x40000000; - else if (gBattleTypeFlags & BATTLE_TYPE_ROAMER) - AI_THINKING_STRUCT->aiFlags = 0x20000000; - else if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) - AI_THINKING_STRUCT->aiFlags = 0x80000000; -#ifdef GERMAN - else if (gBattleTypeFlags & 0x900 || gTrainerBattleOpponent == 0x400) - AI_THINKING_STRUCT->aiFlags = 7; -#endif - else // otherwise, just set aiFlags to whatever flags the trainer has set in their data. - AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent].aiFlags; -} - -u8 BattleAI_GetAIActionToUse(void) -{ - u8 currentMoveArray[MAX_MON_MOVES]; - u8 consideredMoveArray[MAX_MON_MOVES]; - u8 numOfBestMoves; - s32 i; - - sub_810745C(); - while (AI_THINKING_STRUCT->aiFlags != 0) - { - if (AI_THINKING_STRUCT->aiFlags & 1) - { - AI_THINKING_STRUCT->aiState = AIState_SettingUp; - BattleAI_DoAIProcessing(); - } - AI_THINKING_STRUCT->aiFlags >>= 1; - AI_THINKING_STRUCT->aiLogicId++; - AI_THINKING_STRUCT->movesetIndex = 0; - } - - // special flee or watch cases for safari. - if (AI_THINKING_STRUCT->aiAction & (AI_ACTION_FLEE)) // flee - return 4; - if (AI_THINKING_STRUCT->aiAction & (AI_ACTION_WATCH)) // watch - return 5; - - numOfBestMoves = 1; - currentMoveArray[0] = AI_THINKING_STRUCT->score[0]; - consideredMoveArray[0] = 0; - - for (i = 1; i < MAX_MON_MOVES; i++) - { - if (currentMoveArray[0] < AI_THINKING_STRUCT->score[i]) - { - numOfBestMoves = 1; - currentMoveArray[0] = AI_THINKING_STRUCT->score[i]; - consideredMoveArray[0] = i; - } - if (currentMoveArray[0] == AI_THINKING_STRUCT->score[i]) - { - currentMoveArray[numOfBestMoves] = AI_THINKING_STRUCT->score[i]; - consideredMoveArray[numOfBestMoves++] = i; - } - } - - return consideredMoveArray[Random() % numOfBestMoves]; // break any ties that exist. -} - -void BattleAI_DoAIProcessing(void) -{ - while (AI_THINKING_STRUCT->aiState != AIState_FinishedProcessing) - { - switch (AI_THINKING_STRUCT->aiState) - { - case AIState_DoNotProcess: //Needed to match. - break; - case AIState_SettingUp: - gAIScriptPtr = BattleAIs[AI_THINKING_STRUCT->aiLogicId]; // set the AI ptr. - if (gBattleMons[gBankAttacker].pp[AI_THINKING_STRUCT->movesetIndex] == 0) - { - AI_THINKING_STRUCT->moveConsidered = MOVE_NONE; // don't consider a move you have 0 PP for, idiot. - } - else - { - AI_THINKING_STRUCT->moveConsidered = gBattleMons[gBankAttacker].moves[AI_THINKING_STRUCT->movesetIndex]; - } - AI_THINKING_STRUCT->aiState++; - break; - case AIState_Processing: - if (AI_THINKING_STRUCT->moveConsidered != MOVE_NONE) - sBattleAICmdTable[*(u8 *)gAIScriptPtr](); // run AI command. - else - { - AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0; // definitely do not consider any move that has 0 PP. - AI_THINKING_STRUCT->aiAction |= AI_ACTION_DONE; - } - if (AI_THINKING_STRUCT->aiAction & AI_ACTION_DONE) - { - AI_THINKING_STRUCT->movesetIndex++; - if (AI_THINKING_STRUCT->movesetIndex < MAX_MON_MOVES && (AI_THINKING_STRUCT->aiAction & AI_ACTION_DO_NOT_ATTACK) == 0) - AI_THINKING_STRUCT->aiState = AIState_SettingUp; // as long as their are more moves to process, keep setting this to setup state. - else - AI_THINKING_STRUCT->aiState++; // done processing. - AI_THINKING_STRUCT->aiAction &= (AI_ACTION_FLEE | AI_ACTION_WATCH | AI_ACTION_DO_NOT_ATTACK | - AI_ACTION_UNK5 | AI_ACTION_UNK6 | AI_ACTION_UNK7 | AI_ACTION_UNK8); // disable AI_ACTION_DONE. - } - break; - } - } -} - -void sub_810745C(void) -{ - s32 i; - - for (i = 0; i < 8; i++) - { - if (UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i] == 0) - { - UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i] = gLastUsedMove[gBankTarget]; - return; - } - } -} - -void unref_sub_81074A0(u8 a) -{ - s32 i; - - for (i = 0; i < 8; i++) - UNK_2016A00_STRUCT->movesUsed[a / 2][i] = 0; -} - -void RecordAbilityBattle(u8 a, u8 b) -{ - if (GetBankSide(a) == 0) - UNK_2016A00_STRUCT->unk20[GetBankIdentity(a) & 1] = b; -} - -void RecordItemBattle(u8 a, u8 b) -{ - if (GetBankSide(a) == 0) - UNK_2016A00_STRUCT->unk22[GetBankIdentity(a) & 1] = b; -} - -static void BattleAICmd_if_random_less_than(void) -{ - if (Random() % 256 < gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_if_random_greater_than(void) -{ - if (Random() % 256 > gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_if_random_equal(void) -{ - if (Random() % 256 == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_if_random_not_equal(void) -{ - if (Random() % 256 != gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_score(void) -{ - AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] += gAIScriptPtr[1]; // add the result to the array of the move consider's score. - - if (AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] < 0) // if the score is negative, flatten it to 0. - AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0; - - gAIScriptPtr += 2; // AI return. -} - -static void BattleAICmd_if_hp_less_than(void) -{ - u16 index; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) < gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; -} - -static void BattleAICmd_if_hp_more_than(void) -{ - u16 index; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) > gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; -} - -static void BattleAICmd_if_hp_equal(void) -{ - u16 index; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) == gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; -} - -static void BattleAICmd_if_hp_not_equal(void) -{ - u16 index; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) != gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; -} - -static void BattleAICmd_if_status(void) -{ - u16 index; - u32 arg; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - arg = AIScriptRead32(gAIScriptPtr + 2); - - if ((gBattleMons[index].status1 & arg) != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void BattleAICmd_if_not_status(void) -{ - u16 index; - u32 arg; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - arg = AIScriptRead32(gAIScriptPtr + 2); - - if ((gBattleMons[index].status1 & arg) == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void BattleAICmd_if_status2(void) -{ - u16 index; - u32 arg; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - arg = AIScriptRead32(gAIScriptPtr + 2); - - if ((gBattleMons[index].status2 & arg) != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void BattleAICmd_if_not_status2(void) -{ - u16 index; - u32 arg; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - arg = AIScriptRead32(gAIScriptPtr + 2); - - if ((gBattleMons[index].status2 & arg) == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void BattleAICmd_if_status3(void) -{ - u16 index; - u32 arg; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - arg = AIScriptRead32(gAIScriptPtr + 2); - - if ((gStatuses3[index] & arg) != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void BattleAICmd_if_not_status3(void) -{ - u16 index; - u32 arg; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - arg = AIScriptRead32(gAIScriptPtr + 2); - - if ((gStatuses3[index] & arg) == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void BattleAICmd_if_status4(void) -{ - u16 index; - u32 arg1, arg2; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - arg1 = GetBankIdentity(index) & 1; - arg2 = AIScriptRead32(gAIScriptPtr + 2); - - if ((gSideAffecting[arg1] & arg2) != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void BattleAICmd_if_not_status4(void) -{ - u16 index; - u32 arg1, arg2; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - arg1 = GetBankIdentity(index) & 1; - arg2 = AIScriptRead32(gAIScriptPtr + 2); - - if ((gSideAffecting[arg1] & arg2) == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); - else - gAIScriptPtr += 10; -} - -static void BattleAICmd_if_less_than(void) -{ - if (AI_THINKING_STRUCT->funcResult < gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_if_more_than(void) -{ - if (AI_THINKING_STRUCT->funcResult > gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_if_equal(void) -{ - if (AI_THINKING_STRUCT->funcResult == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_if_not_equal(void) -{ - if (AI_THINKING_STRUCT->funcResult != gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_if_less_than_32(void) -{ - u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); - - if (AI_THINKING_STRUCT->funcResult < *temp) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); - else - gAIScriptPtr += 9; -} - -static void BattleAICmd_if_more_than_32(void) -{ - u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); - - if (AI_THINKING_STRUCT->funcResult > *temp) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); - else - gAIScriptPtr += 9; -} - -static void BattleAICmd_if_equal_32(void) -{ - u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); - - if (AI_THINKING_STRUCT->funcResult == *temp) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); - else - gAIScriptPtr += 9; -} - -static void BattleAICmd_if_not_equal_32(void) -{ - u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); - - if (AI_THINKING_STRUCT->funcResult != *temp) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); - else - gAIScriptPtr += 9; -} - -static void BattleAICmd_if_move(void) -{ - u16 move = AIScriptRead16(gAIScriptPtr + 1); - - if (AI_THINKING_STRUCT->moveConsidered == move) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; -} - -static void BattleAICmd_if_not_move(void) -{ - u16 move = AIScriptRead16(gAIScriptPtr + 1); - - if (AI_THINKING_STRUCT->moveConsidered != move) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; -} - -static void BattleAICmd_if_in_bytes(void) -{ - u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1); - - while (*ptr != 0xFF) - { - if (AI_THINKING_STRUCT->funcResult == *ptr) - { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); - return; - } - ptr++; - } - gAIScriptPtr += 9; -} - -static void BattleAICmd_if_not_in_bytes(void) -{ - u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1); - - while (*ptr != 0xFF) - { - if (AI_THINKING_STRUCT->funcResult == *ptr) - { - gAIScriptPtr += 9; - return; - } - ptr++; - } - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); -} - -static void BattleAICmd_if_in_words(void) -{ - u16 *ptr = (u16 *)AIScriptReadPtr(gAIScriptPtr + 1); - - while (*ptr != 0xFFFF) - { - if (AI_THINKING_STRUCT->funcResult == *ptr) - { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); - return; - } - ptr++; - } - gAIScriptPtr += 9; -} - -static void BattleAICmd_if_not_in_words(void) -{ - u16 *ptr = (u16 *)AIScriptReadPtr(gAIScriptPtr + 1); - - while (*ptr != 0xFFFF) - { - if (AI_THINKING_STRUCT->funcResult == *ptr) - { - gAIScriptPtr += 9; - return; - } - ptr++; - } - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); -} - -static void BattleAICmd_if_user_can_damage(void) -{ - s32 i; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[gBankAttacker].moves[i] != 0 - && gBattleMoves[gBattleMons[gBankAttacker].moves[i]].power != 0) - break; - } - if (i == MAX_MON_MOVES) - gAIScriptPtr += 5; - else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); -} - -static void BattleAICmd_if_user_cant_damage(void) -{ - s32 i; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[gBankAttacker].moves[i] != 0 - && gBattleMoves[gBattleMons[gBankAttacker].moves[i]].power != 0) - break; - } - if (i != MAX_MON_MOVES) - gAIScriptPtr += 5; - else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); -} - -static void BattleAICmd_get_turn_count(void) -{ - AI_THINKING_STRUCT->funcResult = gBattleResults.battleTurnCounter; - gAIScriptPtr += 1; -} - -static void BattleAICmd_get_type(void) -{ - switch (gAIScriptPtr[1]) - { - case 1: // player primary type - AI_THINKING_STRUCT->funcResult = gBattleMons[gBankAttacker].type1; - break; - case 0: // enemy primary type - AI_THINKING_STRUCT->funcResult = gBattleMons[gBankTarget].type1; - break; - case 3: // player secondary type - AI_THINKING_STRUCT->funcResult = gBattleMons[gBankAttacker].type2; - break; - case 2: // enemy secondary type - AI_THINKING_STRUCT->funcResult = gBattleMons[gBankTarget].type2; - break; - case 4: // type of move being pointed to - AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].type; - break; - } - gAIScriptPtr += 2; -} - -static void BattleAICmd_get_move_power(void) -{ - AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power; - gAIScriptPtr += 1; -} - -#ifdef NONMATCHING -static void BattleAICmd_is_most_powerful_move(void) -{ - int i, j; - s32 damages[MAX_MON_MOVES]; - - for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++) - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == sDiscouragedPowerfulMoveEffects[i]) - break; - - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power > 1 - && sDiscouragedPowerfulMoveEffects[i] == 0xFFFF) - { - gDynamicBasePower = 0; - ewram[0x1601C] = 0; // why is this a manual array? - ewram[0x1601F] = 1; - gBattleMoveFlags = 0; - gCritMultiplier = 1; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - for (j = 0; sDiscouragedPowerfulMoveEffects[j] != 0xFFFF; j++) - { // _08108276 - if (gBattleMoves[gBattleMons[gBankAttacker].moves[i]].effect == sDiscouragedPowerfulMoveEffects[j]) - break; - } - - // _081082BA - if (gBattleMons[gBankAttacker].moves[i] - && sDiscouragedPowerfulMoveEffects[j] == 0xFFFF - && gBattleMoves[gBattleMons[gBankAttacker].moves[i]].power > 1) - { - gCurrentMove = gBattleMons[gBankAttacker].moves[i]; - AI_CalcDmg(gBankAttacker, gBankTarget); - TypeCalc(gCurrentMove, gBankAttacker, gBankTarget); - damages[i] = (gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[i]) / 100; - - if (damages[i] == 0) // moves always do at least 1 damage. - damages[i] = 1; - } - else - { - damages[i] = 0; - } - } - - for (i = 0; i < MAX_MON_MOVES; i++) - if (damages[i] > damages[AI_THINKING_STRUCT->movesetIndex]) - break; - - if (i == MAX_MON_MOVES) - AI_THINKING_STRUCT->funcResult = 2; - else - AI_THINKING_STRUCT->funcResult = 1; - } - else - { - AI_THINKING_STRUCT->funcResult = 0; - } - - gAIScriptPtr += 1; -} -#else -__attribute__((naked)) -static void BattleAICmd_is_most_powerful_move(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, 0x14\n\ - movs r3, 0\n\ - ldr r0, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\ - ldrh r1, [r0]\n\ - ldr r4, _0810832C @ =0x0000ffff\n\ - ldr r6, _08108330 @ =gBattleMoves\n\ - ldr r5, _08108334 @ =0x02016800\n\ - cmp r1, r4\n\ - beq _0810822E\n\ - ldrh r1, [r5, 0x2]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldrb r2, [r0]\n\ - ldr r1, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\ -_0810821E:\n\ - ldrh r0, [r1]\n\ - cmp r2, r0\n\ - beq _0810822E\n\ - adds r1, 0x2\n\ - adds r3, 0x1\n\ - ldrh r0, [r1]\n\ - cmp r0, r4\n\ - bne _0810821E\n\ -_0810822E:\n\ - ldrh r0, [r5, 0x2]\n\ - lsls r1, r0, 1\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r6\n\ - ldrb r0, [r1, 0x1]\n\ - cmp r0, 0x1\n\ - bhi _08108240\n\ - b _081083B2\n\ -_08108240:\n\ - lsls r0, r3, 1\n\ - ldr r1, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\ - adds r0, r1\n\ - ldrh r3, [r0]\n\ - ldr r0, _0810832C @ =0x0000ffff\n\ - cmp r3, r0\n\ - beq _08108250\n\ - b _081083B2\n\ -_08108250:\n\ - ldr r0, _08108338 @ =gDynamicBasePower\n\ - movs r1, 0\n\ - strh r1, [r0]\n\ - ldr r2, _0810833C @ =0xfffff81c\n\ - adds r0, r5, r2\n\ - strb r1, [r0]\n\ - adds r2, 0x3\n\ - adds r0, r5, r2\n\ - movs r2, 0x1\n\ - strb r2, [r0]\n\ - ldr r0, _08108340 @ =gBattleMoveFlags\n\ - strb r1, [r0]\n\ - ldr r0, _08108344 @ =gCritMultiplier\n\ - strb r2, [r0]\n\ - movs r6, 0\n\ - mov r9, r3\n\ - ldr r0, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\ - ldrh r0, [r0]\n\ - str r0, [sp, 0x10]\n\ -_08108276:\n\ - movs r3, 0\n\ - ldr r5, _08108348 @ =gBattleMons\n\ - lsls r4, r6, 1\n\ - ldr r7, _0810834C @ =gBankAttacker\n\ - lsls r1, r6, 2\n\ - mov r8, r1\n\ - adds r2, r6, 0x1\n\ - mov r10, r2\n\ - ldr r0, [sp, 0x10]\n\ - cmp r0, r9\n\ - beq _081082BA\n\ - ldr r2, _08108330 @ =gBattleMoves\n\ - ldrb r1, [r7]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - adds r0, r4, r0\n\ - adds r1, r5, 0\n\ - adds r1, 0xC\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldrb r2, [r0]\n\ - ldr r1, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\ -_081082AA:\n\ - ldrh r0, [r1]\n\ - cmp r2, r0\n\ - beq _081082BA\n\ - adds r1, 0x2\n\ - adds r3, 0x1\n\ - ldrh r0, [r1]\n\ - cmp r0, r9\n\ - bne _081082AA\n\ -_081082BA:\n\ - ldrb r1, [r7]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - adds r0, r4, r0\n\ - adds r1, r5, 0\n\ - adds r1, 0xC\n\ - adds r1, r0, r1\n\ - ldrh r0, [r1]\n\ - cmp r0, 0\n\ - beq _0810835C\n\ - lsls r0, r3, 1\n\ - ldr r2, _08108328 @ =sDiscouragedPowerfulMoveEffects\n\ - adds r0, r2\n\ - ldrh r0, [r0]\n\ - cmp r0, r9\n\ - bne _0810835C\n\ - ldr r0, _08108330 @ =gBattleMoves\n\ - ldrh r2, [r1]\n\ - lsls r1, r2, 1\n\ - adds r1, r2\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - cmp r0, 0x1\n\ - bls _0810835C\n\ - ldr r5, _08108350 @ =gCurrentMove\n\ - strh r2, [r5]\n\ - ldrb r0, [r7]\n\ - ldr r4, _08108354 @ =gBankTarget\n\ - ldrb r1, [r4]\n\ - bl AI_CalcDmg\n\ - ldrh r0, [r5]\n\ - ldrb r1, [r7]\n\ - ldrb r2, [r4]\n\ - bl TypeCalc\n\ - mov r4, sp\n\ - add r4, r8\n\ - ldr r2, _08108358 @ =gBattleMoveDamage\n\ - ldr r0, _08108334 @ =0x02016800\n\ - adds r0, 0x18\n\ - adds r0, r6, r0\n\ - ldrb r1, [r0]\n\ - ldr r0, [r2]\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - str r0, [r4]\n\ - cmp r0, 0\n\ - bne _08108364\n\ - movs r0, 0x1\n\ - str r0, [r4]\n\ - b _08108364\n\ - .align 2, 0\n\ -_08108328: .4byte sDiscouragedPowerfulMoveEffects\n\ -_0810832C: .4byte 0x0000ffff\n\ -_08108330: .4byte gBattleMoves\n\ -_08108334: .4byte 0x02016800\n\ -_08108338: .4byte gDynamicBasePower\n\ -_0810833C: .4byte 0xfffff81c\n\ -_08108340: .4byte gBattleMoveFlags\n\ -_08108344: .4byte gCritMultiplier\n\ -_08108348: .4byte gBattleMons\n\ -_0810834C: .4byte gBankAttacker\n\ -_08108350: .4byte gCurrentMove\n\ -_08108354: .4byte gBankTarget\n\ -_08108358: .4byte gBattleMoveDamage\n\ -_0810835C:\n\ - mov r1, sp\n\ - add r1, r8\n\ - movs r0, 0\n\ - str r0, [r1]\n\ -_08108364:\n\ - mov r6, r10\n\ - cmp r6, 0x3\n\ - ble _08108276\n\ - movs r6, 0\n\ - ldr r1, _081083A4 @ =0x02016800\n\ - ldrb r0, [r1, 0x1]\n\ - lsls r0, 2\n\ - add r0, sp\n\ - ldr r2, [sp]\n\ - ldr r0, [r0]\n\ - adds r5, r1, 0\n\ - ldr r4, _081083A8 @ =gAIScriptPtr\n\ - cmp r2, r0\n\ - bgt _0810839A\n\ - adds r3, r5, 0\n\ - mov r2, sp\n\ -_08108384:\n\ - adds r2, 0x4\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - bgt _0810839A\n\ - ldrb r0, [r3, 0x1]\n\ - lsls r0, 2\n\ - add r0, sp\n\ - ldr r1, [r2]\n\ - ldr r0, [r0]\n\ - cmp r1, r0\n\ - ble _08108384\n\ -_0810839A:\n\ - cmp r6, 0x4\n\ - bne _081083AC\n\ - movs r0, 0x2\n\ - str r0, [r5, 0x8]\n\ - b _081083B8\n\ - .align 2, 0\n\ -_081083A4: .4byte 0x02016800\n\ -_081083A8: .4byte gAIScriptPtr\n\ -_081083AC:\n\ - movs r0, 0x1\n\ - str r0, [r5, 0x8]\n\ - b _081083B8\n\ -_081083B2:\n\ - movs r0, 0\n\ - str r0, [r5, 0x8]\n\ - ldr r4, _081083D0 @ =gAIScriptPtr\n\ -_081083B8:\n\ - ldr r0, [r4]\n\ - adds r0, 0x1\n\ - str r0, [r4]\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 {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_081083D0: .4byte gAIScriptPtr\n\ - .syntax divided\n"); -} -#endif // NONMATCHING - -static void BattleAICmd_get_move(void) -{ - if (gAIScriptPtr[1] == USER) - AI_THINKING_STRUCT->funcResult = gLastUsedMove[gBankAttacker]; - else - AI_THINKING_STRUCT->funcResult = gLastUsedMove[gBankTarget]; - - gAIScriptPtr += 2; -} - -static void BattleAICmd_if_arg_equal(void) -{ - if (gAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_if_arg_not_equal(void) -{ - if (gAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_if_would_go_first(void) -{ - if (b_first_side(gBankAttacker, gBankTarget, 1) == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_if_would_not_go_first(void) -{ - if (b_first_side(gBankAttacker, gBankTarget, 1) != gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_nullsub_2A(void) -{ -} - -static void BattleAICmd_nullsub_2B(void) -{ -} - -static void BattleAICmd_count_alive_pokemon(void) -{ - struct Pokemon *party; - int i; - u8 index; - u8 var, var2; - - AI_THINKING_STRUCT->funcResult = 0; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - if (GetBankSide(index) == 0) - party = gPlayerParty; - else - party = gEnemyParty; - - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - u32 status; - var = gBattlePartyID[index]; - status = GetBankIdentity(index) ^ 2; - var2 = gBattlePartyID[GetBankByPlayerAI(status)]; - } - else - { - var = gBattlePartyID[index]; - var2 = gBattlePartyID[index]; - } - - for (i = 0; i < 6; i++) - { - if (i != var && i != var2 - && GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) - { - AI_THINKING_STRUCT->funcResult++; - } - } - - gAIScriptPtr += 2; -} - -static void BattleAICmd_get_considered_move(void) -{ - AI_THINKING_STRUCT->funcResult = AI_THINKING_STRUCT->moveConsidered; - gAIScriptPtr += 1; -} - -static void BattleAICmd_get_considered_move_effect(void) -{ - AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect; - gAIScriptPtr += 1; -} - -static void BattleAICmd_get_ability(void) -{ - u8 index; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - if (GetBankSide(index) == TARGET) - { - u16 unk = GetBankIdentity(index) & 1; - - if (UNK_2016A00_STRUCT->unk20[unk] != 0) - { - AI_THINKING_STRUCT->funcResult = UNK_2016A00_STRUCT->unk20[unk]; - gAIScriptPtr += 2; - return; - } - - // abilities that prevent fleeing. - if (gBattleMons[index].ability == ABILITY_SHADOW_TAG - || gBattleMons[index].ability == ABILITY_MAGNET_PULL - || gBattleMons[index].ability == ABILITY_ARENA_TRAP) - { - AI_THINKING_STRUCT->funcResult = gBattleMons[index].ability; - gAIScriptPtr += 2; - return; - } - - if (gBaseStats[gBattleMons[index].species].ability1 != ABILITY_NONE) - { - if (gBaseStats[gBattleMons[index].species].ability2 != ABILITY_NONE) - { - // AI has no knowledge of opponent, so it guesses which ability. - if (Random() % 2) - { - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[index].species].ability1; - } - else - { - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[index].species].ability2; - } - } - else - { - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[index].species].ability1; // it's definitely ability 1. - } - } - else - { - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[index].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability. - } - } - else - { - // The AI knows its own ability. - AI_THINKING_STRUCT->funcResult = gBattleMons[index].ability; - } - gAIScriptPtr += 2; -} - -static void BattleAICmd_get_highest_possible_damage(void) -{ - s32 i; - - gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; - BATTLE_STRUCT->dmgMultiplier = 1; - gBattleMoveFlags = 0; - gCritMultiplier = 1; - AI_THINKING_STRUCT->funcResult = 0; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - gBattleMoveDamage = 40; - gCurrentMove = gBattleMons[gBankAttacker].moves[i]; - - if (gCurrentMove) - { - TypeCalc(gCurrentMove, gBankAttacker, gBankTarget); - - // reduce by 1/3. - if (gBattleMoveDamage == 120) - gBattleMoveDamage = 80; - if (gBattleMoveDamage == 240) - gBattleMoveDamage = 160; - if (gBattleMoveDamage == 30) - gBattleMoveDamage = 20; - if (gBattleMoveDamage == 15) - gBattleMoveDamage = 10; - - if (gBattleMoveFlags & 8) // if it's a status move, it wont do anything. - gBattleMoveDamage = 0; - - if (AI_THINKING_STRUCT->funcResult < gBattleMoveDamage) - AI_THINKING_STRUCT->funcResult = gBattleMoveDamage; - } - } - gAIScriptPtr += 1; -} - -static void BattleAICmd_if_damage_bonus(void) -{ - u8 damageVar; - - gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; - BATTLE_STRUCT->dmgMultiplier = 1; - gBattleMoveFlags = 0; - gCritMultiplier = 1; - - gBattleMoveDamage = 40; - gCurrentMove = AI_THINKING_STRUCT->moveConsidered; - - TypeCalc(gCurrentMove, gBankAttacker, gBankTarget); - - if (gBattleMoveDamage == 120) - gBattleMoveDamage = 80; - if (gBattleMoveDamage == 240) - gBattleMoveDamage = 160; - if (gBattleMoveDamage == 30) - gBattleMoveDamage = 20; - if (gBattleMoveDamage == 15) - gBattleMoveDamage = 10; - - if (gBattleMoveFlags & 8) - gBattleMoveDamage = 0; - - // store gBattleMoveDamage in a u8 variable because gAIScriptPtr[1] is a u8. - damageVar = gBattleMoveDamage; - - if (damageVar == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_nullsub_32(void) -{ -} - -static void BattleAICmd_nullsub_33(void) -{ -} - -static void BattleAICmd_if_status_in_party(void) -{ - struct Pokemon *party; - struct Pokemon *partyPtr; - int i; - u32 statusToCompareTo; - - // for whatever reason, game freak put the party pointer into 2 variables instead of 1. it's possible at some point the switch encompassed the whole function and used each respective variable creating largely duplicate code. - switch (gAIScriptPtr[1]) - { - case 1: - party = partyPtr = gEnemyParty; - break; - default: - party = partyPtr = gPlayerParty; - break; - } - - statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2); - - for (i = 0; i < 6; i++) - { - u16 species = GetMonData(&party[i], MON_DATA_SPECIES); - u16 hp = GetMonData(&party[i], MON_DATA_HP); - u32 status = GetMonData(&party[i], MON_DATA_STATUS); - - if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) - { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); // WHAT. why is this being merged into the above switch - return; - } - } - - gAIScriptPtr += 10; -} - -// bugged, doesnt return properly. also unused -static void BattleAICmd_if_status_not_in_party(void) -{ - struct Pokemon *party; - struct Pokemon *partyPtr; - int i; - u32 statusToCompareTo; - - switch (gAIScriptPtr[1]) - { - case 1: - party = partyPtr = gEnemyParty; - break; - default: - party = partyPtr = gPlayerParty; - break; - } - - statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2); - - for (i = 0; i < 6; i++) - { - u16 species = GetMonData(&party[i], MON_DATA_SPECIES); - u16 hp = GetMonData(&party[i], MON_DATA_HP); - u32 status = GetMonData(&party[i], MON_DATA_STATUS); - - // everytime the status is found, the AI's logic jumps further and further past its intended destination. this results in a broken AI macro and is probably why it is unused. - if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) - gAIScriptPtr += 10; // doesnt return? - } - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); -} - -static void BattleAICmd_get_weather(void) -{ - if (gBattleWeather & WEATHER_RAIN_ANY) - AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_RAIN; - if (gBattleWeather & WEATHER_SANDSTORM_ANY) - AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_SANDSTORM; - if (gBattleWeather & WEATHER_SUN_ANY) - AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_SUN; - if (gBattleWeather & WEATHER_HAIL) - AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_HAIL; - - gAIScriptPtr += 1; -} - -static void BattleAICmd_if_effect(void) -{ - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_if_not_effect(void) -{ - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect != gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - else - gAIScriptPtr += 6; -} - -static void BattleAICmd_if_stat_level_less_than(void) -{ - u32 party; - - if (gAIScriptPtr[1] == USER) - party = gBankAttacker; - else - party = gBankTarget; - - if (gBattleMons[party].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); - else - gAIScriptPtr += 8; -} - -static void BattleAICmd_if_stat_level_more_than(void) -{ - u32 party; - - if (gAIScriptPtr[1] == USER) - party = gBankAttacker; - else - party = gBankTarget; - - if (gBattleMons[party].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); - else - gAIScriptPtr += 8; -} - -static void BattleAICmd_if_stat_level_equal(void) -{ - u32 party; - - if (gAIScriptPtr[1] == USER) - party = gBankAttacker; - else - party = gBankTarget; - - if (gBattleMons[party].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); - else - gAIScriptPtr += 8; -} - -static void BattleAICmd_if_stat_level_not_equal(void) -{ - u32 party; - - if (gAIScriptPtr[1] == USER) - party = gBankAttacker; - else - party = gBankTarget; - - if (gBattleMons[party].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); - else - gAIScriptPtr += 8; -} - -static void BattleAICmd_if_can_faint(void) -{ - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2) - { - gAIScriptPtr += 5; - return; - } - - gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; - BATTLE_STRUCT->dmgMultiplier = 1; - gBattleMoveFlags = 0; - gCritMultiplier = 1; - gCurrentMove = AI_THINKING_STRUCT->moveConsidered; - AI_CalcDmg(gBankAttacker, gBankTarget); - TypeCalc(gCurrentMove, gBankAttacker, gBankTarget); - - gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100; - - // moves always do at least 1 damage. - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - - if (gBattleMons[gBankTarget].hp <= gBattleMoveDamage) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); - else - gAIScriptPtr += 5; -} - -static void BattleAICmd_if_cant_faint(void) -{ - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2) - { - gAIScriptPtr += 5; - return; - } - - gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; - BATTLE_STRUCT->dmgMultiplier = 1; - gBattleMoveFlags = 0; - gCritMultiplier = 1; - gCurrentMove = AI_THINKING_STRUCT->moveConsidered; - AI_CalcDmg(gBankAttacker, gBankTarget); - TypeCalc(gCurrentMove, gBankAttacker, gBankTarget); - - gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100; - - // this macro is missing the damage 0 = 1 assumption. - - if (gBattleMons[gBankTarget].hp > gBattleMoveDamage) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); - else - gAIScriptPtr += 5; -} - -static void BattleAICmd_if_has_move(void) -{ - int i; - u16 *temp_ptr = (u16 *)(gAIScriptPtr + 2); - - switch (gAIScriptPtr[1]) - { - case 1: - case 3: - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[gBankAttacker].moves[i] == *temp_ptr) - break; - } - if (i == MAX_MON_MOVES) - gAIScriptPtr += 8; - else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); - break; - case 0: - case 2: - for (i = 0; i < 8; i++) - { - if (UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i] == *temp_ptr) - break; - } - if (i == 8) - gAIScriptPtr += 8; - else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); - break; - } -} - -static void BattleAICmd_if_dont_have_move(void) -{ - int i; - u16 *temp_ptr = (u16 *)(gAIScriptPtr + 2); - - switch (gAIScriptPtr[1]) - { - case 1: - case 3: - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[gBankAttacker].moves[i] == *temp_ptr) - break; - } - if (i != MAX_MON_MOVES) - gAIScriptPtr += 8; - else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); - break; - case 0: - case 2: - for (i = 0; i < 8; i++) - { - if (UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i] == *temp_ptr) - break; - } - if (i != 8) - gAIScriptPtr += 8; - else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); - break; - } -} - -static void BattleAICmd_if_move_effect(void) -{ - int i; - - switch (gAIScriptPtr[1]) - { - case 1: - case 3: - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[gBankAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBankAttacker].moves[i]].effect == gAIScriptPtr[2]) - break; - } - if (i != MAX_MON_MOVES) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - else - gAIScriptPtr += 7; - break; - case 0: - case 2: - for (i = 0; i < 8; i++) - { - if (gBattleMons[gBankAttacker].moves[i] != 0 && gBattleMoves[UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i]].effect == gAIScriptPtr[2]) - break; - } - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - } -} - -static void BattleAICmd_if_not_move_effect(void) -{ - int i; - - switch (gAIScriptPtr[1]) - { - case 1: - case 3: - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[gBankAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBankAttacker].moves[i]].effect == gAIScriptPtr[2]) - break; - } - if (i != MAX_MON_MOVES) - gAIScriptPtr += 7; - else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - break; - case 0: - case 2: - for (i = 0; i < 8; i++) - { - if (UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i] != 0 && gBattleMoves[UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i]].effect == gAIScriptPtr[2]) - break; - } - gAIScriptPtr += 7; - } -} - -static void BattleAICmd_if_last_move_did_damage(void) -{ - u8 index; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - if (gAIScriptPtr[2] == 0) - { - if (gDisableStructs[index].disabledMove == 0) - { - gAIScriptPtr += 7; - return; - } - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - return; - } - else if (gAIScriptPtr[2] != 1) // ignore the macro if its not 0 or 1. - { - gAIScriptPtr += 7; - return; - } - else if (gDisableStructs[index].encoredMove != 0) - { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); - return; - } - gAIScriptPtr += 7; -} - -static void BattleAICmd_if_encored(void) -{ - switch (gAIScriptPtr[1]) - { - case 0: // _08109348 - if (gDisableStructs[gActiveBank].disabledMove == AI_THINKING_STRUCT->moveConsidered) - { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - return; - } - gAIScriptPtr += 6; - return; - case 1: // _08109370 - if (gDisableStructs[gActiveBank].encoredMove == AI_THINKING_STRUCT->moveConsidered) - { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - return; - } - gAIScriptPtr += 6; - return; - default: - gAIScriptPtr += 6; - return; - } -} - -static void BattleAICmd_flee(void) -{ - AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_FLEE | AI_ACTION_DO_NOT_ATTACK); // what matters is AI_ACTION_FLEE being enabled. -} - -static void BattleAICmd_if_random_100(void) -{ - u8 safariFleeRate = BATTLE_STRUCT->safariFleeRate * 5; // safari flee rate, from 0-20 - - if ((u8)(Random() % 100) < safariFleeRate) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); - else - gAIScriptPtr += 5; -} - -static void BattleAICmd_watch(void) -{ - AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_WATCH | AI_ACTION_DO_NOT_ATTACK); // what matters is AI_ACTION_WATCH being enabled. -} - -static void BattleAICmd_get_hold_effect(void) -{ - u8 index; - u16 status; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - if (GetBankSide(index) == 0) - { - status = (GetBankIdentity(index) & 1); - AI_THINKING_STRUCT->funcResult = UNK_2016A00_STRUCT->unk22[status]; - } - else - AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(gBattleMons[index].item); - - gAIScriptPtr += 2; -} - -static void BattleAICmd_get_gender(void) -{ - u8 index; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[index].species, gBattleMons[index].personality); - - gAIScriptPtr += 2; -} - -static void BattleAICmd_is_first_turn(void) -{ - u8 index; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - AI_THINKING_STRUCT->funcResult = gDisableStructs[index].isFirstTurn; - - gAIScriptPtr += 2; -} - -static void BattleAICmd_get_stockpile_count(void) -{ - u8 index; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - AI_THINKING_STRUCT->funcResult = gDisableStructs[index].stockpileCounter; - - gAIScriptPtr += 2; -} - -static void BattleAICmd_is_double_battle(void) -{ - AI_THINKING_STRUCT->funcResult = gBattleTypeFlags & BATTLE_TYPE_DOUBLE; - - gAIScriptPtr += 1; -} - -static void BattleAICmd_get_used_item(void) -{ - u8 index; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - // this hack and a half matches. whatever. i dont care. someone else fix this mess later. PS: still cant fix this. - AI_THINKING_STRUCT->funcResult = ewram[MULTI_DIM_ARR(index, B_16, 0x160CC)]; - - gAIScriptPtr += 2; -} - -static void BattleAICmd_get_move_type_from_result(void) -{ - AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].type; - - gAIScriptPtr += 1; -} - -static void BattleAICmd_get_move_power_from_result(void) -{ - AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].power; - - gAIScriptPtr += 1; -} - -static void BattleAICmd_get_move_effect_from_result(void) -{ - AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].effect; - - gAIScriptPtr += 1; -} - -static void BattleAICmd_get_protect_count(void) -{ - u8 index; - - if (gAIScriptPtr[1] == USER) - index = gBankAttacker; - else - index = gBankTarget; - - AI_THINKING_STRUCT->funcResult = gDisableStructs[index].protectUses; - - gAIScriptPtr += 2; -} - -static void BattleAICmd_nullsub_52(void) -{ -} - -static void BattleAICmd_nullsub_53(void) -{ -} - -static void BattleAICmd_nullsub_54(void) -{ -} - -static void BattleAICmd_nullsub_55(void) -{ -} - -static void BattleAICmd_nullsub_56(void) -{ -} - -static void BattleAICmd_nullsub_57(void) -{ -} - -static void BattleAICmd_call(void) -{ - AIStackPushVar(gAIScriptPtr + 5); - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); -} - -static void BattleAICmd_jump(void) -{ - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); -} - -static void BattleAICmd_end(void) -{ - if (AIStackPop() == FALSE) - AI_THINKING_STRUCT->aiAction |= AI_ACTION_DONE; -} - -static void BattleAICmd_if_level_compare(void) -{ - switch (gAIScriptPtr[1]) - { - case 0: // greater than - if (gBattleMons[gBankAttacker].level > gBattleMons[gBankTarget].level) - { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - return; - } - gAIScriptPtr += 6; - return; - case 1: // less than - if (gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level) - { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - return; - } - gAIScriptPtr += 6; - return; - case 2: // equal - if (gBattleMons[gBankAttacker].level == gBattleMons[gBankTarget].level) - { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); - return; - } - gAIScriptPtr += 6; - return; - } -} - -static void BattleAICmd_if_taunted(void) -{ - if (gDisableStructs[gBankTarget].tauntTimer1 != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); - else - gAIScriptPtr += 5; -} - -static void BattleAICmd_if_not_taunted(void) -{ - if (gDisableStructs[gBankTarget].tauntTimer1 == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); - else - gAIScriptPtr += 5; -} - -void AIStackPushVar(u8 *var) -{ - AI_STACK->ptr[AI_STACK->size++] = var; -} - -// unused -void AIStackPushAIPtr(void) -{ - AI_STACK->ptr[AI_STACK->size++] = gAIScriptPtr; -} - -bool8 AIStackPop(void) -{ - if (AI_STACK->size != 0) - { - --AI_STACK->size; - gAIScriptPtr = AI_STACK->ptr[AI_STACK->size]; - return TRUE; - } - else - return FALSE; -} diff --git a/src/battle_anim.c b/src/battle_anim.c deleted file mode 100644 index 6bd98099a..000000000 --- a/src/battle_anim.c +++ /dev/null @@ -1,2270 +0,0 @@ -#include "global.h" -#include "battle_anim.h" -#include "battle.h" -#include "battle_anim_80CA710.h" -#include "battle_interface.h" -#include "contest.h" -#include "decompress.h" -#include "m4a.h" -#include "main.h" -#include "palette.h" -#include "rom_8077ABC.h" -#include "sound.h" -#include "sprite.h" -#include "task.h" - -// sprites start at 10000 and thus must be subtracted of 10000 to account for the true index. -#define GET_TRUE_SPRITE_INDEX(i) (i - 10000) - -extern u8 unk_2000000[]; -extern u16 gBattlePartyID[4]; -extern u8 gObjectBankIDs[]; -extern u8 gBankAttacker; -extern u8 gBankTarget; -EWRAM_DATA const u8 *gBattleAnimScriptPtr = NULL; -EWRAM_DATA const u8 *gBattleAnimScriptRetAddr = NULL; -EWRAM_DATA void (*gAnimScriptCallback)(void) = NULL; -EWRAM_DATA s8 gAnimFramesToWait = 0; -EWRAM_DATA u8 gAnimScriptActive = FALSE; -EWRAM_DATA u8 gAnimVisualTaskCount = 0; -EWRAM_DATA u8 gAnimSoundTaskCount = 0; -EWRAM_DATA u32 gDisableStructMoveAnim = 0; -EWRAM_DATA u32 gMoveDmgMoveAnim = 0; -EWRAM_DATA u16 gMovePowerMoveAnim = 0; -EWRAM_DATA u8 gHappinessMoveAnim = 0; -EWRAM_DATA u16 gWeatherMoveAnim = 0; -EWRAM_DATA u8 gMonAnimTaskIdArray[2] = {0}; -EWRAM_DATA u8 gUnknown_0202F7C4 = 0; -EWRAM_DATA u8 gUnknown_0202F7C5 = 0; -EWRAM_DATA u16 gAnimMoveIndex = 0; // set but unused. -EWRAM_DATA u8 gBattleAnimPlayerMonIndex = 0; -EWRAM_DATA u8 gBattleAnimEnemyMonIndex = 0; -EWRAM_DATA u16 gUnknown_0202F7CA[4] = {0}; -EWRAM_DATA u8 gUnknown_0202F7D2 = 0; -extern u16 gUnknown_030041B4; -extern u16 gUnknown_03004200; -extern u16 gUnknown_03004240; -extern u16 gUnknown_03004244; -extern u16 gUnknown_03004280; -extern u16 gUnknown_03004288; -extern u16 gUnknown_030042C0; -extern u16 gUnknown_030042C4; - -u16 gSoundAnimFramesToWait; -s16 gBattleAnimArgs[8]; -u16 gAnimSpriteIndexArray[8]; - -extern struct MusicPlayerInfo gMPlay_BGM; -extern struct MusicPlayerInfo gMPlay_SE1; -extern struct MusicPlayerInfo gMPlay_SE2; - -extern const u16 gUnknown_081C7160[]; -extern const u8 *const gBattleAnims_Moves[]; -extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; -extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; -extern const struct BattleAnimBackground gBattleAnimBackgroundTable[]; - -static void RunAnimScriptCommand(void); -static void ScriptCmd_loadsprite(void); -static void ScriptCmd_unloadsprite(void); -static void ScriptCmd_sprite(void); -static void ScriptCmd_createtask(void); -static void ScriptCmd_delay(void); -static void ScriptCmd_waitforvisualfinish(void); -static void ScriptCmd_hang1(void); -static void ScriptCmd_hang2(void); -static void ScriptCmd_end(void); -static void ScriptCmd_playse(void); -static void ScriptCmd_monbg(void); -static void sub_8076380(void); -static void task_pA_ma0A_obj_to_bg_pal(u8); -static void ScriptCmd_clearmonbg(void); -static void sub_807672C(u8); -static void ScriptCmd_monbg_22(void); -static void ScriptCmd_clearmonbg_23(void); -static void sub_80769A4(u8); -static void ScriptCmd_setalpha(void); -static void ScriptCmd_setbldcnt(void); -static void ScriptCmd_blendoff(void); -static void ScriptCmd_call(void); -static void ScriptCmd_return(void); -static void ScriptCmd_setvar(void); -static void ScriptCmd_ifelse(void); -static void ScriptCmd_jumpif(void); -static void ScriptCmd_jump(void); -static void ScriptCmd_fadetobg(void); -static void ScriptCmd_fadetobg_25(void); -static void task_p5_load_battle_screen_elements(u8); -static void sub_8076DB8(u16); -static void dp01t_11_3_message_for_player_only(void); -static void ScriptCmd_restorebg(void); -static void ScriptCmd_waitbgfadeout(void); -static void ScriptCmd_waitbgfadein(void); -static void ScriptCmd_changebg(void); -static void ScriptCmd_panse_19(void); -static void ScriptCmd_setpan(void); -static void ScriptCmd_panse_1B(void); -static void c3_08073CEC(u8); -static void ScriptCmd_panse_26(void); -static void ScriptCmd_panse_27(void); -static void ScriptCmd_panse_1C(void); -static void sub_80774FC(u8); -static void ScriptCmd_panse_1D(void); -static void sub_80775CC(u8); -static void ScriptCmd_createtask_1F(void); -static void ScriptCmd_waitsound(void); -static void ScriptCmd_jumpvareq(void); -static void ScriptCmd_jumpunkcond(void); -static void ScriptCmd_monbgprio_28(void); -static void ScriptCmd_monbgprio_29(void); -static void ScriptCmd_monbgprio_2A(void); -static void ScriptCmd_invisible(void); -static void ScriptCmd_visible(void); -static void ScriptCmd_doublebattle_2D(void); -static void ScriptCmd_doublebattle_2E(void); -static void ScriptCmd_stopsound(void); - -static void (*const sScriptCmdTable[])(void) = { - ScriptCmd_loadsprite, - ScriptCmd_unloadsprite, - ScriptCmd_sprite, - ScriptCmd_createtask, - ScriptCmd_delay, - ScriptCmd_waitforvisualfinish, - ScriptCmd_hang1, - ScriptCmd_hang2, - ScriptCmd_end, - ScriptCmd_playse, - ScriptCmd_monbg, - ScriptCmd_clearmonbg, - ScriptCmd_setalpha, - ScriptCmd_blendoff, - ScriptCmd_call, - ScriptCmd_return, - ScriptCmd_setvar, - ScriptCmd_ifelse, - ScriptCmd_jumpif, - ScriptCmd_jump, - ScriptCmd_fadetobg, - ScriptCmd_restorebg, - ScriptCmd_waitbgfadeout, - ScriptCmd_waitbgfadein, - ScriptCmd_changebg, - ScriptCmd_panse_19, - ScriptCmd_setpan, - ScriptCmd_panse_1B, - ScriptCmd_panse_1C, - ScriptCmd_panse_1D, - ScriptCmd_setbldcnt, - ScriptCmd_createtask_1F, - ScriptCmd_waitsound, - ScriptCmd_jumpvareq, - ScriptCmd_monbg_22, - ScriptCmd_clearmonbg_23, - ScriptCmd_jumpunkcond, - ScriptCmd_fadetobg_25, - ScriptCmd_panse_26, - ScriptCmd_panse_27, - ScriptCmd_monbgprio_28, - ScriptCmd_monbgprio_29, - ScriptCmd_monbgprio_2A, - ScriptCmd_invisible, - ScriptCmd_visible, - ScriptCmd_doublebattle_2D, - ScriptCmd_doublebattle_2E, - ScriptCmd_stopsound, -}; - -void battle_anim_clear_some_data(void) -{ - s32 i; - - gAnimFramesToWait = 0; - gAnimScriptActive = FALSE; - gAnimVisualTaskCount = 0; - gAnimSoundTaskCount = 0; - gDisableStructMoveAnim = 0; - gMoveDmgMoveAnim = 0; - gMovePowerMoveAnim = 0; - gHappinessMoveAnim = 0; - - // clear index array. - for (i = 0; i < 8; i++) - gAnimSpriteIndexArray[i] |= 0xFFFF; - - // clear anim args. - for (i = 0; i < 8; i++) - gBattleAnimArgs[i] = 0; - - gMonAnimTaskIdArray[0] = 0xFF; - gMonAnimTaskIdArray[1] = 0xFF; - gUnknown_0202F7C4 = 0; - gUnknown_0202F7C5 = 0; - gAnimMoveIndex = 0; - gBattleAnimPlayerMonIndex = 0; - gBattleAnimEnemyMonIndex = 0; - gUnknown_0202F7D2 = 0; -} - -void ExecuteMoveAnim(u16 move) -{ - gBattleAnimPlayerMonIndex = gBankAttacker; - gBattleAnimEnemyMonIndex = gBankTarget; - DoMoveAnim(gBattleAnims_Moves, move, 1); -} - -void DoMoveAnim(const u8 *const moveAnims[], u16 move, u8 c) -{ - s32 i; - - if (IsContest() == 0) - { - sub_8079E24(); - sub_8043EB4(0); - for (i = 0; i < 4; i++) - { - if (GetBankSide(i) != 0) - gUnknown_0202F7CA[i] = GetMonData(&gEnemyParty[gBattlePartyID[i]], MON_DATA_SPECIES); - else - gUnknown_0202F7CA[i] = GetMonData(&gPlayerParty[gBattlePartyID[i]], MON_DATA_SPECIES); - } - } - else - { - for (i = 0; i < 4; i++) - gUnknown_0202F7CA[i] = EWRAM_19348; - } - - if (c == 0) - gAnimMoveIndex = 0; - else - gAnimMoveIndex = move; - - for (i = 0; i < 8; i++) - gBattleAnimArgs[i] = 0; - - gMonAnimTaskIdArray[0] = 0xFF; - gMonAnimTaskIdArray[1] = 0xFF; - gBattleAnimScriptPtr = moveAnims[move]; - gAnimScriptActive = TRUE; - gAnimFramesToWait = 0; - gAnimScriptCallback = RunAnimScriptCommand; - - for (i = 0; i < 8; i++) - gAnimSpriteIndexArray[i] |= 0xFFFF; - - if (c != 0) - { - for (i = 0; gUnknown_081C7160[i] != 0xFFFF; i++) - { - if (move == gUnknown_081C7160[i]) - { - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 128); - break; - } - } - } - - gUnknown_030042C4 = 0; - gUnknown_03004240 = 0; - gUnknown_03004200 = 0; - gUnknown_03004244 = 0; -} - -void move_anim_8072740(struct Sprite *sprite) -{ - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); - gAnimVisualTaskCount--; -} - -void DestroyAnimVisualTask(u8 taskId) -{ - DestroyTask(taskId); - gAnimVisualTaskCount--; -} - -void DestroyAnimSoundTask(u8 taskId) -{ - DestroyTask(taskId); - gAnimSoundTaskCount--; -} - -static void AddSpriteIndex(u16 index) -{ - s32 i; - - for (i = 0; i < 8; i++) - { - if (gAnimSpriteIndexArray[i] == 0xFFFF) - { - gAnimSpriteIndexArray[i] = index; - return; - } - } -} - -static void ClearSpriteIndex(u16 index) -{ - s32 i; - - for (i = 0; i < 8; i++) - { - if (gAnimSpriteIndexArray[i] == index) - { - gAnimSpriteIndexArray[i] |= 0xFFFF; - return; - } - } -} - -static void WaitAnimFrameCount(void) -{ - if (gAnimFramesToWait <= 0) - { - gAnimScriptCallback = RunAnimScriptCommand; - gAnimFramesToWait = 0; - } - else - { - gAnimFramesToWait--; - } -} - -static void RunAnimScriptCommand(void) -{ - do - { - sScriptCmdTable[SCRIPT_READ_8(gBattleAnimScriptPtr)](); - } while (gAnimFramesToWait == 0 && gAnimScriptActive != FALSE); -} - -static void ScriptCmd_loadsprite(void) -{ - u16 index; - - gBattleAnimScriptPtr++; - index = SCRIPT_READ_16(gBattleAnimScriptPtr); - LoadCompressedObjectPic(&gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)]); - LoadCompressedObjectPalette(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(index)]); - gBattleAnimScriptPtr += 2; - AddSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); - gAnimFramesToWait = 1; - gAnimScriptCallback = WaitAnimFrameCount; -} - -static void ScriptCmd_unloadsprite(void) -{ - u16 index; - - gBattleAnimScriptPtr++; - index = SCRIPT_READ_16(gBattleAnimScriptPtr); - FreeSpriteTilesByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag); - FreeSpritePaletteByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag); - gBattleAnimScriptPtr += 2; - ClearSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); -} - -#ifdef NONMATCHING -static void ScriptCmd_sprite(void) -{ - s32 i; - struct SpriteTemplate *r7; - u8 r4; - u8 r0; - u8 _r0; - u16 r6; - u8 r2; - s8 r1; - - gBattleAnimScriptPtr++; - r7 = (struct SpriteTemplate *)(SCRIPT_READ_32(gBattleAnimScriptPtr)); - gBattleAnimScriptPtr += 4; - r4 = SCRIPT_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; - for (i = 0; i < r0; i++) - { - gBattleAnimArgs[i] = SCRIPT_READ_16(gBattleAnimScriptPtr); - gBattleAnimScriptPtr += 2; - } - if (r4 & 0x80) - { - r4 ^= 0x80; - if (r4 > 0x3F) - r4 -= 0x40; - else - r4 = -r4; - _r0 = sub_8079E90(gBattleAnimEnemyMonIndex); - r1 = r4; - - } - else - { - //_08075B44 - if (r4 > 0x3F) - r4 -= 0x40; - else - r4 = -r4; - _r0 = sub_8079E90(gBattleAnimPlayerMonIndex); - r1 = r4; - } - r6 = _r0 + r1; - if ((s16)r6 < 3) - r6 = 3; - - r4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); - r2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); - CreateSpriteAndAnimate(r7, r4, r2, r6); - gAnimVisualTaskCount++; -} -#else -__attribute__((naked)) -static void ScriptCmd_sprite(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - ldr r5, _08075B2C @ =gBattleAnimScriptPtr\n\ - ldr r1, [r5]\n\ - adds r3, r1, 0x1\n\ - str r3, [r5]\n\ - ldrb r2, [r1, 0x1]\n\ - ldrb r0, [r3, 0x1]\n\ - lsls r0, 8\n\ - adds r2, r0\n\ - ldrb r0, [r3, 0x2]\n\ - lsls r0, 16\n\ - adds r2, r0\n\ - ldrb r0, [r3, 0x3]\n\ - lsls r0, 24\n\ - adds r7, r2, r0\n\ - adds r0, r1, 0x5\n\ - str r0, [r5]\n\ - ldrb r4, [r1, 0x5]\n\ - adds r0, r1, 0x6\n\ - str r0, [r5]\n\ - ldrb r0, [r1, 0x6]\n\ - adds r1, 0x7\n\ - str r1, [r5]\n\ - cmp r0, 0\n\ - beq _08075B14\n\ - adds r6, r5, 0\n\ - ldr r5, _08075B30 @ =gBattleAnimArgs\n\ - adds r3, r0, 0\n\ -_08075AFC:\n\ - ldr r2, [r6]\n\ - ldrb r1, [r2]\n\ - ldrb r0, [r2, 0x1]\n\ - lsls r0, 8\n\ - orrs r1, r0\n\ - strh r1, [r5]\n\ - adds r2, 0x2\n\ - str r2, [r6]\n\ - adds r5, 0x2\n\ - subs r3, 0x1\n\ - cmp r3, 0\n\ - bne _08075AFC\n\ -_08075B14:\n\ - movs r0, 0x80\n\ - ands r0, r4\n\ - cmp r0, 0\n\ - beq _08075B44\n\ - movs r0, 0x80\n\ - eors r4, r0\n\ - cmp r4, 0x3F\n\ - bls _08075B34\n\ - adds r0, r4, 0\n\ - subs r0, 0x40\n\ - b _08075B36\n\ - .align 2, 0\n\ -_08075B2C: .4byte gBattleAnimScriptPtr\n\ -_08075B30: .4byte gBattleAnimArgs\n\ -_08075B34:\n\ - negs r0, r4\n\ -_08075B36:\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - ldr r0, _08075B40 @ =gBattleAnimEnemyMonIndex\n\ - b _08075B56\n\ - .align 2, 0\n\ -_08075B40: .4byte gBattleAnimEnemyMonIndex\n\ -_08075B44:\n\ - cmp r4, 0x3F\n\ - bls _08075B4E\n\ - adds r0, r4, 0\n\ - subs r0, 0x40\n\ - b _08075B50\n\ -_08075B4E:\n\ - negs r0, r4\n\ -_08075B50:\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - ldr r0, _08075BAC @ =gBattleAnimPlayerMonIndex\n\ -_08075B56:\n\ - ldrb r0, [r0]\n\ - bl sub_8079E90\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - lsls r1, r4, 24\n\ - asrs r1, 24\n\ - adds r0, r1\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - lsls r0, r6, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x2\n\ - bgt _08075B74\n\ - movs r6, 0x3\n\ -_08075B74:\n\ - ldr r5, _08075BB0 @ =gBattleAnimEnemyMonIndex\n\ - ldrb r0, [r5]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - ldrb r0, [r5]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - adds r2, r0, 0\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - lsls r3, r6, 24\n\ - lsrs r3, 24\n\ - adds r0, r7, 0\n\ - adds r1, r4, 0\n\ - bl CreateSpriteAndAnimate\n\ - ldr r1, _08075BB4 @ =gAnimVisualTaskCount\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08075BAC: .4byte gBattleAnimPlayerMonIndex\n\ -_08075BB0: .4byte gBattleAnimEnemyMonIndex\n\ -_08075BB4: .4byte gAnimVisualTaskCount\n\ - .syntax divided\n"); -} -#endif - -static void ScriptCmd_createtask(void) -{ - TaskFunc taskFunc; - u8 taskPriority; - u8 taskId; - u8 numArgs; - s32 i; - - gBattleAnimScriptPtr++; - taskFunc = (TaskFunc)SCRIPT_READ_32(gBattleAnimScriptPtr); - gBattleAnimScriptPtr += 4; - taskPriority = SCRIPT_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; - numArgs = SCRIPT_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; - - for (i = 0; i < numArgs; i++) - { - gBattleAnimArgs[i] = SCRIPT_READ_16(gBattleAnimScriptPtr); - gBattleAnimScriptPtr += 2; - } - - taskId = CreateTask(taskFunc, taskPriority); - taskFunc(taskId); - gAnimVisualTaskCount++; -} - -static void ScriptCmd_delay(void) -{ - gBattleAnimScriptPtr++; - gAnimFramesToWait = SCRIPT_READ_8(gBattleAnimScriptPtr); - if (gAnimFramesToWait == 0) - gAnimFramesToWait = -1; - gBattleAnimScriptPtr++; - gAnimScriptCallback = WaitAnimFrameCount; -} - -// wait for visual tasks to finish. -static void ScriptCmd_waitforvisualfinish(void) -{ - if (gAnimVisualTaskCount == 0) - { - gBattleAnimScriptPtr++; - gAnimFramesToWait = 0; - } - else - { - gAnimFramesToWait = 1; - } -} - -static void ScriptCmd_hang1(void) -{ -} - -static void ScriptCmd_hang2(void) -{ -} - -static void ScriptCmd_end(void) -{ - s32 i; - bool32 continuousAnim = FALSE; - - // keep waiting as long as there is animations to be done. - if (gAnimVisualTaskCount != 0 || gAnimSoundTaskCount != 0 - || gMonAnimTaskIdArray[0] != 0xFF || gMonAnimTaskIdArray[1] != 0xFF) - { - gSoundAnimFramesToWait = 0; - gAnimFramesToWait = 1; - return; - } - - // finish the sound effects. - if (IsSEPlaying()) - { - if (++gSoundAnimFramesToWait <= 90) // wait 90 frames, then halt the sound effect. - { - gAnimFramesToWait = 1; - return; - } - else - { - m4aMPlayStop(&gMPlay_SE1); - m4aMPlayStop(&gMPlay_SE2); - } - } - - // the SE has halted, so set the SE Frame Counter to 0 and continue. - gSoundAnimFramesToWait = 0; - - for (i = 0; i < 8; i++) - { - if (gAnimSpriteIndexArray[i] != 0xFFFF) - { - FreeSpriteTilesByTag(gBattleAnimPicTable[gAnimSpriteIndexArray[i]].tag); - FreeSpritePaletteByTag(gBattleAnimPicTable[gAnimSpriteIndexArray[i]].tag); - gAnimSpriteIndexArray[i] |= 0xFFFF; // set terminator. - } - } - - if (continuousAnim == FALSE) // may have been used for debug? - { - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); - if (IsContest() == 0) - { - sub_8079E24(); - sub_8043EB4(1); - } - gAnimScriptActive = FALSE; - } -} - -static void ScriptCmd_playse(void) -{ - gBattleAnimScriptPtr++; - PlaySE(SCRIPT_READ_16(gBattleAnimScriptPtr)); - gBattleAnimScriptPtr += 2; -} - -static void ScriptCmd_monbg(void) -{ - u8 r6; - u8 r5; - u8 r0; - u8 r7; - u16 r4; - u8 taskId; - - gBattleAnimScriptPtr++; - r6 = SCRIPT_READ_8(gBattleAnimScriptPtr); - if (r6 == 0) - r6 = 2; - else if (r6 == 1) - r6 = 3; - if (r6 == 0 || r6 == 2) - r5 = gBattleAnimPlayerMonIndex; - else - r5 = gBattleAnimEnemyMonIndex; - if (b_side_obj__get_some_boolean(r5)) - { - r0 = GetBankIdentity(r5); - r0 += 0xFF; - if (r0 <= 1 || IsContest() != 0) - r7 = 0; - else - r7 = 1; - sub_8076034(r5, r7); - r4 = gObjectBankIDs[r5]; - taskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10); - gTasks[taskId].data[0] = r4; - gTasks[taskId].data[1] = gSprites[r4].pos1.x + gSprites[r4].pos2.x; - gTasks[taskId].data[2] = gSprites[r4].pos1.y + gSprites[r4].pos2.y; - if (r7 == 0) - { - gTasks[taskId].data[3] = gUnknown_030042C0; - gTasks[taskId].data[4] = gUnknown_030041B4; - } - else - { - gTasks[taskId].data[3] = gUnknown_03004288; - gTasks[taskId].data[4] = gUnknown_03004280; - } - gTasks[taskId].data[5] = r7; - gTasks[taskId].data[6] = r5; - gMonAnimTaskIdArray[0] = taskId; - - } - r5 ^= 2; - if (r6 > 1 && b_side_obj__get_some_boolean(r5)) - { - r0 = GetBankIdentity(r5); - r0 += 0xFF; - if (r0 <= 1 || IsContest() != 0) - r7 = 0; - else - r7 = 1; - sub_8076034(r5, r7); - r4 = gObjectBankIDs[r5]; - taskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10); - gTasks[taskId].data[0] = r4; - gTasks[taskId].data[1] = gSprites[r4].pos1.x + gSprites[r4].pos2.x; - gTasks[taskId].data[2] = gSprites[r4].pos1.y + gSprites[r4].pos2.y; - if (r7 == 0) - { - gTasks[taskId].data[3] = gUnknown_030042C0; - gTasks[taskId].data[4] = gUnknown_030041B4; - } - else - { - gTasks[taskId].data[3] = gUnknown_03004288; - gTasks[taskId].data[4] = gUnknown_03004280; - } - gTasks[taskId].data[5] = r7; - gTasks[taskId].data[6] = r5; - gMonAnimTaskIdArray[1] = taskId; - } - gBattleAnimScriptPtr++; -} - -#ifdef NONMATCHING -bool8 b_side_obj__get_some_boolean(u8 a) -{ - if (IsContest() != 0) - { - if (a == gBattleAnimPlayerMonIndex) - return TRUE; - else - return FALSE; - } - if (sub_8078874(a) == 0) - return FALSE; - if (IsContest() != 0) - return TRUE; // this line wont ever be reached. - if ((EWRAM_17800[a].unk0 & 1) == 0) - return TRUE; - if (gSprites[gObjectBankIDs[a]].invisible) - return FALSE; - return TRUE; -} -#else -__attribute__((naked)) -bool8 b_side_obj__get_some_boolean(u8 a) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - adds r5, r4, 0\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08075FDC\n\ - ldr r0, _08075FD8 @ =gBattleAnimPlayerMonIndex\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - beq _0807601C\n\ - b _0807602C\n\ - .align 2, 0\n\ -_08075FD8: .4byte gBattleAnimPlayerMonIndex\n\ -_08075FDC:\n\ - adds r0, r4, 0\n\ - bl sub_8078874\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0807602C\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0807601C\n\ - lsls r0, r5, 2\n\ - ldr r1, _08076020 @ =0x02017800\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0807601C\n\ - ldr r2, _08076024 @ =gSprites\n\ - ldr r0, _08076028 @ =gObjectBankIDs\n\ - adds r0, r5, r0\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - adds r0, 0x3E\n\ - ldrb r0, [r0]\n\ - lsls r0, 29\n\ - cmp r0, 0\n\ - blt _0807602C\n\ -_0807601C:\n\ - movs r0, 0x1\n\ - b _0807602E\n\ - .align 2, 0\n\ -_08076020: .4byte 0x02017800\n\ -_08076024: .4byte gSprites\n\ -_08076028: .4byte gObjectBankIDs\n\ -_0807602C:\n\ - movs r0, 0\n\ -_0807602E:\n\ - pop {r4,r5}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); -} -#endif - -void sub_8076034(u8 a, u8 b) -{ - volatile u8 pointlessZero; - u16 *addr2; - u8 spriteId; - - if (b == 0) - { - struct UnknownStruct2 s; - u8 *addr; - u32 size; - u8 r2; - u16 *addr3; - - sub_8078914(&s); - addr = s.unk0; - size = 0x2000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - pointlessZero = 0; - pointlessZero = 0; - addr2 = (void *)s.unk4; - DmaFill16(3, 0xFF, addr2, 0x1000); - - REG_BG1CNT_BITFIELD.priority = 2; - REG_BG1CNT_BITFIELD.screenSize = 1; - REG_BG1CNT_BITFIELD.areaOverflowMode = 0; - - spriteId = gObjectBankIDs[a]; - gUnknown_030042C0 = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32; - if (IsContest() != 0 && sub_80AEB1C(EWRAM_19348) != 0) - gUnknown_030042C0--; - gUnknown_030041B4 = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32; - gSprites[gObjectBankIDs[a]].invisible = TRUE; - - REG_BG1HOFS = gUnknown_030042C0; - REG_BG1VOFS = gUnknown_030041B4; - - LoadPalette(gPlttBufferUnfaded + 0x100 + a * 16, s.unk8 * 16, 32); - addr3 = (u16 *)PLTT + s.unk8 * 16; - DmaCopy32(3, gPlttBufferUnfaded + 0x100 + a * 16, addr3, 32); - - if (IsContest() != 0) - r2 = 0; - else - r2 = GetBankIdentity(a); - sub_80E4EF8(0, 0, r2, s.unk8, (u32)s.unk0, (((s32)s.unk4 - VRAM) / 2048), REG_BG1CNT_BITFIELD.charBaseBlock); - if (IsContest() != 0) - sub_8076380(); - } - else - { - u8 *addr; - u32 size; - u16 *addr3; - - addr = (void *)(VRAM + 0x6000); - size = 0x2000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - pointlessZero = 0; - pointlessZero = 0; - addr2 = (void *)(VRAM + 0xF000); - DmaFill32(3, 0, addr2, 0x800); - - REG_BG2CNT_BITFIELD.priority = 2; - REG_BG2CNT_BITFIELD.screenSize = 1; - REG_BG2CNT_BITFIELD.areaOverflowMode = 0; - - spriteId = gObjectBankIDs[a]; - gUnknown_03004288 = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32; - gUnknown_03004280 = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32; - gSprites[gObjectBankIDs[a]].invisible = TRUE; - - REG_BG2HOFS = gUnknown_03004288; - REG_BG2VOFS = gUnknown_03004280; - - LoadPalette(gPlttBufferUnfaded + 0x100 + a * 16, 0x90, 32); - addr3 = (void *)(PLTT + 0x120); - DmaCopy32(3, gPlttBufferUnfaded + 0x100 + a * 16, addr3, 32); - - sub_80E4EF8(0, 0, GetBankIdentity(a), 9, 0x6000, 0x1E, REG_BG2CNT_BITFIELD.charBaseBlock); - } -} - -static void sub_8076380(void) -{ - int i; - int j; - struct UnknownStruct2 s; - u16 *ptr; - - if (sub_80AEB1C(EWRAM_19348) != 0) - { - sub_8078914(&s); - ptr = s.unk4; - for (i = 0; i < 8; i++) - { - for (j = 0; j < 4; j++) - { - u16 temp = ptr[j + i * 32]; - - ptr[j + i * 32] = ptr[7 - j + i * 32]; - ptr[7 - j + i * 32] = temp; - } - } - for (i = 0; i < 8; i++) - { - for (j = 0; j < 8; j++) - ptr[j + i * 32] ^= 0x400; - } - } -} - -void sub_80763FC(u16 a, u16 *b, u32 c, u8 d) -{ - u8 i; - u8 j; - u32 r9; - - if (d == 0) - r9 = 32; - else - r9 = 64; - a <<= 12; - for (i = 0; i < r9; i++) - { - for (j = 0; j < 32; j++) - b[j + i * 32] = ((b[j + i * 32] & 0xFFF) | a) + c; - } -} - -void sub_8076464(u8 a) -{ - u8 *addr; - u32 size; - volatile u8 pointlessZero; - struct UnknownStruct2 s; - - sub_8078914(&s); - if (a == 0 || IsContest() != 0) - { - u16 *addr2; - - addr = s.unk0; - size = 0x2000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - pointlessZero = 0; - pointlessZero = 0; - addr2 = s.unk4; - DmaFill32(3, 0, addr2, 0x800); - gUnknown_030042C0 = 0; - gUnknown_030041B4 = 0; - } - else - { - u16 *addr2; - - addr = (void *)(VRAM + 0x6000); - size = 0x2000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - pointlessZero = 0; - pointlessZero = 0; - addr2 = (void *)(VRAM + 0xF000); - DmaFill32(3, 0, addr2, 0x800); - gUnknown_03004288 = 0; - gUnknown_03004280 = 0; - } -} - -static void task_pA_ma0A_obj_to_bg_pal(u8 taskId) -{ - u8 r4; - u8 r6; - s16 r3; - s16 r2; - struct UnknownStruct2 s; - - r4 = gTasks[taskId].data[0]; - r6 = gTasks[taskId].data[6]; - sub_8078914(&s); - r3 = gTasks[taskId].data[1] - (gSprites[r4].pos1.x + gSprites[r4].pos2.x); - r2 = gTasks[taskId].data[2] - (gSprites[r4].pos1.y + gSprites[r4].pos2.y); - if (gTasks[taskId].data[5] == 0) - { - u16 *src; - u16 *dst; - - gUnknown_030042C0 = r3 + gTasks[taskId].data[3]; - gUnknown_030041B4 = r2 + gTasks[taskId].data[4]; - src = gPlttBufferFaded + 0x100 + r6 * 16; - dst = gPlttBufferFaded + 0x100 + s.unk8 * 16 - 256; - DmaCopy32(3, src, dst, 32); - } - else - { - u16 *src; - u16 *dst; - - gUnknown_03004288 = r3 + gTasks[taskId].data[3]; - gUnknown_03004280 = r2 + gTasks[taskId].data[4]; - src = gPlttBufferFaded + 0x100 + r6 * 16; - dst = gPlttBufferFaded + 0x100 - 112; - DmaCopy32(3, src, dst, 32); - } -} - -static void ScriptCmd_clearmonbg(void) -{ - u8 r4; - u8 r5; - u8 taskId; - - gBattleAnimScriptPtr++; - r4 = SCRIPT_READ_8(gBattleAnimScriptPtr); - if (r4 == 0) - r4 = 2; - else if (r4 == 1) - r4 = 3; - if (r4 == 0 || r4 == 2) - r5 = gBattleAnimPlayerMonIndex; - else - r5 = gBattleAnimEnemyMonIndex; - if (gMonAnimTaskIdArray[0] != 0xFF) - gSprites[gObjectBankIDs[r5]].invisible = FALSE; - if (r4 > 1 && gMonAnimTaskIdArray[1] != 0xFF) - gSprites[gObjectBankIDs[r5 ^ 2]].invisible = FALSE; - else - r4 = 0; - taskId = CreateTask(sub_807672C, 5); - gTasks[taskId].data[0] = r4; - gTasks[taskId].data[2] = r5; - gBattleAnimScriptPtr++; -} - -static void sub_807672C(u8 taskId) -{ - u8 var; - u8 r4; - - gTasks[taskId].data[1]++; - if (gTasks[taskId].data[1] != 1) - { - var = GetBankIdentity(gTasks[taskId].data[2]); - var += 0xFF; - if (var <= 1 || IsContest() != 0) - r4 = 0; - else - r4 = 1; - if (gMonAnimTaskIdArray[0] != 0xFF) - { - sub_8076464(r4); - DestroyTask(gMonAnimTaskIdArray[0]); - gMonAnimTaskIdArray[0] = 0xFF; - } - if (gTasks[taskId].data[0] > 1) - { - sub_8076464(r4 ^ 1); - DestroyTask(gMonAnimTaskIdArray[1]); - gMonAnimTaskIdArray[1] = 0xFF; - } - DestroyTask(taskId); - } -} - -static void ScriptCmd_monbg_22(void) -{ - u8 r5; - u8 r4; - u8 r0; - u8 r1; - - gBattleAnimScriptPtr++; - r5 = SCRIPT_READ_8(gBattleAnimScriptPtr); - if (r5 == 0) - r5 = 2; - else if (r5 == 1) - r5 = 3; - if (r5 == 0 || r5 == 2) - r4 = gBattleAnimPlayerMonIndex; - else - r4 = gBattleAnimEnemyMonIndex; - if (b_side_obj__get_some_boolean(r4)) - { - r0 = GetBankIdentity(r4); - r0 += 0xFF; - if (r0 <= 1 || IsContest() != 0) - r1 = 0; - else - r1 = 1; - sub_8076034(r4, r1); - gSprites[gObjectBankIDs[r4]].invisible = FALSE; - } - r4 ^= 2; - if (r5 > 1 && b_side_obj__get_some_boolean(r4)) - { - r0 = GetBankIdentity(r4); - r0 += 0xFF; - if (r0 <= 1 || IsContest() != 0) - r1 = 0; - else - r1 = 1; - sub_8076034(r4, r1); - gSprites[gObjectBankIDs[r4]].invisible = FALSE; - } - gBattleAnimScriptPtr++; -} - -static void ScriptCmd_clearmonbg_23(void) -{ - u8 r5; - u8 r6; - u8 taskId; - - gBattleAnimScriptPtr++; - r5 = SCRIPT_READ_8(gBattleAnimScriptPtr); - if (r5 == 0) - r5 = 2; - else if (r5 == 1) - r5 = 3; - if (r5 == 0 || r5 == 2) - r6 = gBattleAnimPlayerMonIndex; - else - r6 = gBattleAnimEnemyMonIndex; - if (b_side_obj__get_some_boolean(r6)) - gSprites[gObjectBankIDs[r6]].invisible = FALSE; - if (r5 > 1 && b_side_obj__get_some_boolean(r6 ^ 2)) - gSprites[gObjectBankIDs[r6 ^ 2]].invisible = FALSE; - else - r5 = 0; - taskId = CreateTask(sub_80769A4, 5); - gTasks[taskId].data[0] = r5; - gTasks[taskId].data[2] = r6; - gBattleAnimScriptPtr++; -} - -static void sub_80769A4(u8 taskId) -{ - u8 r0; - u8 r4; - u8 r5; - - gTasks[taskId].data[1]++; - if (gTasks[taskId].data[1] != 1) - { - r4 = gTasks[taskId].data[2]; - r0 = GetBankIdentity(r4); - r0 += 0xFF; - if (r0 <= 1 || IsContest() != 0) - r5 = 0; - else - r5 = 1; - if (b_side_obj__get_some_boolean(r4)) - sub_8076464(r5); - if (gTasks[taskId].data[0] > 1 && b_side_obj__get_some_boolean(r4 ^ 2)) - sub_8076464(r5 ^ 1); - DestroyTask(taskId); - } -} - -static void ScriptCmd_setalpha(void) -{ - u16 r3; - u16 r1; - - gBattleAnimScriptPtr++; - r3 = *(gBattleAnimScriptPtr++); - r1 = *(gBattleAnimScriptPtr++) << 8; - REG_BLDCNT = 0x3F40; - REG_BLDALPHA = r3 | r1; -} - -static void ScriptCmd_setbldcnt(void) -{ - u16 r3; - u16 r1; - - gBattleAnimScriptPtr++; - r3 = *(gBattleAnimScriptPtr++); - r1 = *(gBattleAnimScriptPtr++) << 8; - REG_BLDCNT = r3 | r1; -} - -static void ScriptCmd_blendoff(void) -{ - gBattleAnimScriptPtr++; - REG_BLDCNT = 0; - REG_BLDALPHA = 0; -} - -static void ScriptCmd_call(void) -{ - u32 addr; - - gBattleAnimScriptPtr++; - gBattleAnimScriptRetAddr = gBattleAnimScriptPtr + 4; - addr = SCRIPT_READ_32(gBattleAnimScriptPtr); - gBattleAnimScriptPtr = (u8 *)addr; -} - -static void ScriptCmd_return(void) -{ - gBattleAnimScriptPtr = gBattleAnimScriptRetAddr; -} - -static void ScriptCmd_setvar(void) -{ - const u8 *addr = gBattleAnimScriptPtr; - u16 r4; - u8 r2; - - gBattleAnimScriptPtr++; - r2 = SCRIPT_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; - r4 = SCRIPT_READ_16(gBattleAnimScriptPtr); - gBattleAnimScriptPtr = addr + 4; - gBattleAnimArgs[r2] = r4; -} - -static void ScriptCmd_ifelse(void) -{ - u32 addr; - - gBattleAnimScriptPtr++; - if (gUnknown_0202F7C4 & 1) - gBattleAnimScriptPtr += 4; - addr = SCRIPT_READ_32(gBattleAnimScriptPtr); - gBattleAnimScriptPtr = (u8 *)addr; -} - -static void ScriptCmd_jumpif(void) -{ - u8 r1; - u32 addr; - - gBattleAnimScriptPtr++; - r1 = SCRIPT_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; - if (r1 == gUnknown_0202F7C4) - { - addr = SCRIPT_READ_32(gBattleAnimScriptPtr); - gBattleAnimScriptPtr = (u8 *)addr; - } - else - { - gBattleAnimScriptPtr += 4; - } -} - -static void ScriptCmd_jump(void) -{ - u32 addr; - - gBattleAnimScriptPtr++; - addr = SCRIPT_READ_32(gBattleAnimScriptPtr); - gBattleAnimScriptPtr = (u8 *)addr; -} - -// Uses of this function that rely on a TRUE return are expecting inBattle to not be ticked as defined in contest behavior. As a result, if misused, this function cannot reliably discern between field and contest status and could result in undefined behavior. -bool8 IsContest(void) -{ - if (!gMain.inBattle) - return TRUE; - else - return FALSE; -} - -static void ScriptCmd_fadetobg(void) -{ - u8 r4; - u8 taskId; - - gBattleAnimScriptPtr++; - r4 = SCRIPT_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; - taskId = CreateTask(task_p5_load_battle_screen_elements, 5); - gTasks[taskId].data[0] = r4; - gUnknown_0202F7C5 = 1; -} - -static void ScriptCmd_fadetobg_25(void) -{ - u8 r8; - u8 r7; - u8 r6; - u8 taskId; - - gBattleAnimScriptPtr++; - r8 = gBattleAnimScriptPtr[0]; - r7 = gBattleAnimScriptPtr[1]; - r6 = gBattleAnimScriptPtr[2]; - gBattleAnimScriptPtr += 3; - taskId = CreateTask(task_p5_load_battle_screen_elements, 5); - if (IsContest() != 0) - gTasks[taskId].data[0] = r6; - else if (GetBankSide(gBattleAnimEnemyMonIndex) == 0) - gTasks[taskId].data[0] = r7; - else - gTasks[taskId].data[0] = r8; - gUnknown_0202F7C5 = 1; -} - -static void task_p5_load_battle_screen_elements(u8 taskId) -{ - if (gTasks[taskId].data[10] == 0) - { - BeginHardwarePaletteFade(0xE8, 0, 0, 16, 0); - gTasks[taskId].data[10]++; - return; - } - if (gPaletteFade.active) - return; - if (gTasks[taskId].data[10] == 1) - { - gTasks[taskId].data[10]++; - gUnknown_0202F7C5 = 2; - } - else if (gTasks[taskId].data[10] == 2) - { - s16 data0 = (u16)gTasks[taskId].data[0]; - - if (data0 == -1) - dp01t_11_3_message_for_player_only(); - else - sub_8076DB8(data0); - BeginHardwarePaletteFade(0xE8, 0, 16, 0, 1); - gTasks[taskId].data[10]++; - return; - } - if (gPaletteFade.active) - return; - if (gTasks[taskId].data[10] == 3) - { - DestroyTask(taskId); - gUnknown_0202F7C5 = 0; - } -} - -static void sub_8076DB8(u16 a) -{ - if (IsContest()) - { - void *tilemap = gBattleAnimBackgroundTable[a].tilemap; - void *dmaSrc; - void *dmaDest; - - sub_800D238(tilemap, IsContest() ? EWRAM_14800 : EWRAM_18000); - sub_80763FC(sub_80789BC(), IsContest() ? EWRAM_14800 : EWRAM_18000, 0x100, 0); - dmaSrc = IsContest() ? EWRAM_14800 : EWRAM_18000; - dmaDest = (void *)(VRAM + 0xD000); - DmaCopy32(3, dmaSrc, dmaDest, 0x800); - LZDecompressVram(gBattleAnimBackgroundTable[a].image, (void *)(VRAM + 0x2000)); - LoadCompressedPalette(gBattleAnimBackgroundTable[a].palette, sub_80789BC() * 16, 32); - } - else - { - LZDecompressVram(gBattleAnimBackgroundTable[a].tilemap, (void *)(VRAM + 0xD000)); - LZDecompressVram(gBattleAnimBackgroundTable[a].image, (void *)(VRAM + 0x8000)); - LoadCompressedPalette(gBattleAnimBackgroundTable[a].palette, 32, 32); - } -} - -static void dp01t_11_3_message_for_player_only(void) -{ - if (IsContest()) - sub_80AB2AC(); - else - sub_800D7B8(); -} - -static void ScriptCmd_restorebg(void) -{ - u8 taskId; - - gBattleAnimScriptPtr++; - taskId = CreateTask(task_p5_load_battle_screen_elements, 5); - gTasks[taskId].data[0] = 0xFFFF; - gUnknown_0202F7C5 = 1; -} - -static void ScriptCmd_waitbgfadeout(void) -{ - if (gUnknown_0202F7C5 == 2) - { - gBattleAnimScriptPtr++; - gAnimFramesToWait = 0; - } - else - { - gAnimFramesToWait = 1; - } -} - -static void ScriptCmd_waitbgfadein(void) -{ - if (gUnknown_0202F7C5 == 0) - { - gBattleAnimScriptPtr++; - gAnimFramesToWait = 0; - } - else - { - gAnimFramesToWait = 1; - } -} - -static void ScriptCmd_changebg(void) -{ - gBattleAnimScriptPtr++; - sub_8076DB8(SCRIPT_READ_8(gBattleAnimScriptPtr)); - gBattleAnimScriptPtr++; -} - -//Weird control flow -/* -s8 sub_8076F98(s8 a) -{ - if (!IsContest() && (EWRAM_17810[gBattleAnimPlayerMonIndex].unk0 & 0x10)) - { - a = GetBankSide(gBattleAnimPlayerMonIndex) ? 0xC0 : 0x3F; - } - //_08076FDC - else - { - if (IsContest()) - { - if (gBattleAnimPlayerMonIndex == gBattleAnimEnemyMonIndex && gBattleAnimPlayerMonIndex == 2 - && a == 0x3F) - { - //jump to _0807707A - if (a < -0x40) - a = 0xC0; - return a; - } - } - //_08077004 - else - { - if (GetBankSide(gBattleAnimPlayerMonIndex) == 0) - { - if (GetBankSide(gBattleAnimEnemyMonIndex) == 0) - } - //_08077042 - else - { - - } - //_0807706C - } - } - //_0807706E -} -*/ -__attribute__((naked)) -s8 sub_8076F98(s8 a) -{ - asm(".syntax unified\n\ - push {r4,lr}\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08076FDC\n\ - ldr r0, _08076FD4 @ =gBattleAnimPlayerMonIndex\n\ - ldrb r2, [r0]\n\ - lsls r0, r2, 1\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - ldr r1, _08076FD8 @ =0x02017810\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08076FDC\n\ - adds r0, r2, 0\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - movs r4, 0xC0\n\ - cmp r0, 0\n\ - beq _0807706E\n\ - movs r4, 0x3F\n\ - b _0807706E\n\ - .align 2, 0\n\ -_08076FD4: .4byte gBattleAnimPlayerMonIndex\n\ -_08076FD8: .4byte 0x02017810\n\ -_08076FDC:\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08077004\n\ - ldr r0, _08076FFC @ =gBattleAnimPlayerMonIndex\n\ - ldr r1, _08077000 @ =gBattleAnimEnemyMonIndex\n\ - ldrb r0, [r0]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bne _08077068\n\ - cmp r0, 0x2\n\ - bne _08077068\n\ - cmp r4, 0x3F\n\ - beq _0807707A\n\ - b _08077068\n\ - .align 2, 0\n\ -_08076FFC: .4byte gBattleAnimPlayerMonIndex\n\ -_08077000: .4byte gBattleAnimEnemyMonIndex\n\ -_08077004:\n\ - ldr r0, _0807702C @ =gBattleAnimPlayerMonIndex\n\ - ldrb r0, [r0]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08077042\n\ - ldr r0, _08077030 @ =gBattleAnimEnemyMonIndex\n\ - ldrb r0, [r0]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0807706E\n\ - lsls r0, r4, 24\n\ - asrs r1, r0, 24\n\ - cmp r1, 0x3F\n\ - bne _08077034\n\ - movs r4, 0xC0\n\ - b _0807706E\n\ - .align 2, 0\n\ -_0807702C: .4byte gBattleAnimPlayerMonIndex\n\ -_08077030: .4byte gBattleAnimEnemyMonIndex\n\ -_08077034:\n\ - movs r0, 0x40\n\ - negs r0, r0\n\ - cmp r1, r0\n\ - beq _0807706E\n\ - negs r0, r1\n\ - lsls r0, 24\n\ - b _0807706C\n\ -_08077042:\n\ - ldr r0, _08077064 @ =gBattleAnimEnemyMonIndex\n\ - ldrb r0, [r0]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _08077068\n\ - lsls r0, r4, 24\n\ - asrs r0, 24\n\ - movs r1, 0x40\n\ - negs r1, r1\n\ - cmp r0, r1\n\ - bne _0807706E\n\ - movs r4, 0x3F\n\ - b _0807706E\n\ - .align 2, 0\n\ -_08077064: .4byte gBattleAnimEnemyMonIndex\n\ -_08077068:\n\ - lsls r0, r4, 24\n\ - negs r0, r0\n\ -_0807706C:\n\ - lsrs r4, r0, 24\n\ -_0807706E:\n\ - lsls r0, r4, 24\n\ - asrs r0, 24\n\ - cmp r0, 0x3F\n\ - ble _0807707A\n\ - movs r4, 0x3F\n\ - b _08077088\n\ -_0807707A:\n\ - lsls r0, r4, 24\n\ - asrs r0, 24\n\ - movs r1, 0x40\n\ - negs r1, r1\n\ - cmp r0, r1\n\ - bge _08077088\n\ - movs r4, 0xC0\n\ -_08077088:\n\ - lsls r0, r4, 24\n\ - asrs r0, 24\n\ - pop {r4}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); -} - -s8 sub_8077094(s8 a) -{ - if (!IsContest() && (EWRAM_17810[gBattleAnimPlayerMonIndex].unk0 & 0x10)) - { - if (GetBankSide(gBattleAnimPlayerMonIndex) != 0) - a = 0x3F; - else - a = 0xC0; - } - else - { - if (GetBankSide(gBattleAnimPlayerMonIndex) != 0 || IsContest() != 0) - a = -a; - } - return a; -} - -s16 sub_8077104(s16 a) -{ - s16 var = a; - - if (var > 63) - var = 63; - else if (var < -64) - var = -64; - return var; -} - -s16 sub_807712C(s16 a, s16 b, s16 c) -{ - u16 var; - - if (a < b) - var = ((c < 0) ? -c : c); - else if (a > b) - var = -((c < 0) ? -c : c); - else - var = 0; - return var; -} - -static void ScriptCmd_panse_19(void) -{ - u16 r4; - s8 r0; - - gBattleAnimScriptPtr++; - r4 = SCRIPT_READ_16(gBattleAnimScriptPtr); - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); - PlaySE12WithPanning(r4, sub_8076F98(r0)); - gBattleAnimScriptPtr += 3; -} - -static void ScriptCmd_setpan(void) -{ - s8 r0; - - gBattleAnimScriptPtr++; - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr); - SE12PanpotControl(sub_8076F98(r0)); - gBattleAnimScriptPtr++; -} - -static void ScriptCmd_panse_1B(void) -{ - u16 songNum; - s8 r0; - s8 r4; - s8 r6; - u8 r7; - s8 panning; - s8 r8; - u8 taskId; - - gBattleAnimScriptPtr++; - songNum = SCRIPT_READ_16(gBattleAnimScriptPtr); - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); - r4 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); - r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4); - r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 5); - panning = sub_8076F98(r0); - r8 = sub_8076F98(r4); - r4 = sub_807712C(panning, r8, r6); - taskId = CreateTask(c3_08073CEC, 1); - gTasks[taskId].data[0] = panning; - gTasks[taskId].data[1] = r8; - gTasks[taskId].data[2] = r4; - gTasks[taskId].data[3] = r7; - gTasks[taskId].data[4] = panning; - PlaySE12WithPanning(songNum, panning); - gAnimSoundTaskCount++; - gBattleAnimScriptPtr += 6; -} - -#ifdef NONMATCHING -static void c3_08073CEC(u8 taskId) -{ - u16 r7 = 0; - s16 r0; - s16 r6; - s16 r3; - s16 r4; - int foo; - - r0 = gTasks[taskId].data[8]; - gTasks[taskId].data[8]++; - if (r0 >= gTasks[taskId].data[3]) - { - gTasks[taskId].data[8] = r7; - r6 = gTasks[taskId].data[0]; - r3 = gTasks[taskId].data[1]; - foo = gTasks[taskId].data[4] + gTasks[taskId].data[2]; - r4 = foo; - gTasks[taskId].data[4] = r4; - if (gTasks[taskId].data[2] == 0) - { - r4 = r3; - DestroyTask(taskId); - gAnimSoundTaskCount--; - } - //_080772D8 - else - { - if (r6 < r3) - { - if (r4 < r3) - goto check; - DestroyTask(taskId); - gAnimSoundTaskCount--; - } - else - { - if (r4 <= r3) - r7 = 1; - check: - if (r7 != 0) - { - DestroyTask(taskId); - gAnimSoundTaskCount--; - } - } - } - //_080772F8 - SE12PanpotControl(r4); - } - //_08077314 -} -#else -__attribute__((naked)) -static void c3_08073CEC(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - movs r7, 0\n\ - ldr r1, _080772D4 @ =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r2, r0, r1\n\ - ldrh r0, [r2, 0x18]\n\ - adds r1, r0, 0x1\n\ - strh r1, [r2, 0x18]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - movs r3, 0xE\n\ - ldrsh r1, [r2, r3]\n\ - cmp r0, r1\n\ - blt _08077314\n\ - strh r7, [r2, 0x18]\n\ - ldrh r6, [r2, 0x8]\n\ - ldrh r3, [r2, 0xA]\n\ - movs r4, 0x10\n\ - ldrsh r0, [r2, r4]\n\ - movs r4, 0xC\n\ - ldrsh r1, [r2, r4]\n\ - adds r0, r1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - strh r4, [r2, 0x10]\n\ - cmp r1, 0\n\ - bne _080772D8\n\ - lsls r2, r3, 16\n\ - b _080772FC\n\ - .align 2, 0\n\ -_080772D4: .4byte gTasks\n\ -_080772D8:\n\ - lsls r1, r6, 16\n\ - lsls r0, r3, 16\n\ - asrs r3, r0, 16\n\ - adds r2, r0, 0\n\ - cmp r1, r2\n\ - bge _080772EE\n\ - lsls r0, r4, 16\n\ - asrs r0, 16\n\ - cmp r0, r3\n\ - blt _080772F8\n\ - b _080772FC\n\ -_080772EE:\n\ - lsls r0, r4, 16\n\ - asrs r0, 16\n\ - cmp r0, r3\n\ - bgt _080772F8\n\ - movs r7, 0x1\n\ -_080772F8:\n\ - cmp r7, 0\n\ - beq _0807730C\n\ -_080772FC:\n\ - lsrs r4, r2, 16\n\ - adds r0, r5, 0\n\ - bl DestroyTask\n\ - ldr r1, _0807731C @ =gAnimSoundTaskCount\n\ - ldrb r0, [r1]\n\ - subs r0, 0x1\n\ - strb r0, [r1]\n\ -_0807730C:\n\ - lsls r0, r4, 24\n\ - asrs r0, 24\n\ - bl SE12PanpotControl\n\ -_08077314:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0807731C: .4byte gAnimSoundTaskCount\n\ - .syntax divided\n"); -} -#endif - -static void ScriptCmd_panse_26(void) -{ - u16 r8; - s8 r4; - s8 r5; - s8 r6; - u8 r10; - u8 taskId; - - gBattleAnimScriptPtr++; - r8 = SCRIPT_READ_16(gBattleAnimScriptPtr); - r4 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); - r5 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); - r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4); - r10 = SCRIPT_READ_8(gBattleAnimScriptPtr + 5); - taskId = CreateTask(c3_08073CEC, 1); - gTasks[taskId].data[0] = r4; - gTasks[taskId].data[1] = r5; - gTasks[taskId].data[2] = r6; - gTasks[taskId].data[3] = r10; - gTasks[taskId].data[4] = r4; - PlaySE12WithPanning(r8, r4); - gAnimSoundTaskCount++; - gBattleAnimScriptPtr += 6; -} - -static void ScriptCmd_panse_27(void) -{ - u16 r9; - u8 r4; - u8 r8; - u8 r7; - u8 r0; - s8 r6; - s8 r5; - s8 r4_2; - u8 taskId; - - gBattleAnimScriptPtr++; - r9 = SCRIPT_READ_16(gBattleAnimScriptPtr); - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); - r4 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); - r8 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4); - r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 5); - r6 = sub_8077094(r0); - r5 = sub_8077094(r4); - r4_2 = sub_8077094(r8); - taskId = CreateTask(c3_08073CEC, 1); - gTasks[taskId].data[0] = r6; - gTasks[taskId].data[1] = r5; - gTasks[taskId].data[2] = r4_2; - gTasks[taskId].data[3] = r7; - gTasks[taskId].data[4] = r6; - PlaySE12WithPanning(r9, r6); - gAnimSoundTaskCount++; - gBattleAnimScriptPtr += 6; -} - -static void ScriptCmd_panse_1C(void) -{ - u16 r5; - u8 r0; - u8 r8; - u8 r9; - s8 r4; - u8 taskId; - - gBattleAnimScriptPtr++; - r5 = SCRIPT_READ_16(gBattleAnimScriptPtr); - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); - r8 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); - r9 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4); - r4 = sub_8076F98(r0); - taskId = CreateTask(sub_80774FC, 1); - gTasks[taskId].data[0] = r5; - gTasks[taskId].data[1] = r4; - gTasks[taskId].data[2] = r8; - gTasks[taskId].data[3] = r9; - gTasks[taskId].data[8] = r8; - gTasks[taskId].func(taskId); - gAnimSoundTaskCount++; - gBattleAnimScriptPtr += 5; -} - -static void sub_80774FC(u8 taskId) -{ - s16 data8; - u16 r0; - s8 r1; - u8 r4; - - data8 = gTasks[taskId].data[8]; - gTasks[taskId].data[8]++; - if (data8 >= gTasks[taskId].data[2]) - { - gTasks[taskId].data[8] = 0; - r0 = gTasks[taskId].data[0]; - r1 = gTasks[taskId].data[1]; - gTasks[taskId].data[3]--; - r4 = gTasks[taskId].data[3]; - PlaySE12WithPanning(r0, r1); - if (r4 == 0) - { - DestroyTask(taskId); - gAnimSoundTaskCount--; - } - } -} - -static void ScriptCmd_panse_1D(void) -{ - u16 r5; - u8 r0; - u8 r8; - s8 r4; - u8 taskId; - - gBattleAnimScriptPtr++; - r5 = SCRIPT_READ_16(gBattleAnimScriptPtr); - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); - r8 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); - r4 = sub_8076F98(r0); - taskId = CreateTask(sub_80775CC, 1); - gTasks[taskId].data[0] = r5; - gTasks[taskId].data[1] = r4; - gTasks[taskId].data[2] = r8; - gAnimSoundTaskCount++; - gBattleAnimScriptPtr += 4; -} - -static void sub_80775CC(u8 taskId) -{ - s16 r0; - - r0 = gTasks[taskId].data[2]; - gTasks[taskId].data[2]--; - if (r0 <= 0) - { - PlaySE12WithPanning(gTasks[taskId].data[0], gTasks[taskId].data[1]); - DestroyTask(taskId); - gAnimSoundTaskCount--; - } -} - -static void ScriptCmd_createtask_1F(void) -{ - TaskFunc func; - u8 numArgs; - int i; - u8 taskId; - - gBattleAnimScriptPtr++; - func = (TaskFunc)SCRIPT_READ_32(gBattleAnimScriptPtr); - gBattleAnimScriptPtr += 4; - numArgs = SCRIPT_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; - for (i = 0; i < numArgs; i++) - { - gBattleAnimArgs[i] = SCRIPT_READ_16(gBattleAnimScriptPtr); - gBattleAnimScriptPtr += 2; - } - taskId = CreateTask(func, 1); - func(taskId); - gAnimSoundTaskCount++; -} - -static void ScriptCmd_waitsound(void) -{ - if (gAnimSoundTaskCount != 0) - { - gSoundAnimFramesToWait = 0; - gAnimFramesToWait = 1; - } - else if (IsSEPlaying()) - { - if (++gSoundAnimFramesToWait > 90) - { - m4aMPlayStop(&gMPlay_SE1); - m4aMPlayStop(&gMPlay_SE2); - gSoundAnimFramesToWait = 0; - } - else - { - gAnimFramesToWait = 1; - } - } - else - { - gSoundAnimFramesToWait = 0; - gBattleAnimScriptPtr++; - gAnimFramesToWait = 0; - } -} - -static void ScriptCmd_jumpvareq(void) -{ - u8 r2; - s16 r1; - u8 *addr; - - gBattleAnimScriptPtr++; - r2 = SCRIPT_READ_8(gBattleAnimScriptPtr); - r1 = SCRIPT_READ_16(gBattleAnimScriptPtr + 1); - if (r1 == gBattleAnimArgs[r2]) - { - addr = (u8 *)SCRIPT_READ_32(gBattleAnimScriptPtr + 3); - gBattleAnimScriptPtr = addr; - } - else - { - gBattleAnimScriptPtr += 7; - } -} - -static void ScriptCmd_jumpunkcond(void) -{ - u8 *addr; - - gBattleAnimScriptPtr++; - if (IsContest()) - { - addr = (u8 *)SCRIPT_READ_32(gBattleAnimScriptPtr); - gBattleAnimScriptPtr = addr; - } - else - { - gBattleAnimScriptPtr += 4; - } -} - -static void ScriptCmd_monbgprio_28(void) -{ - u8 r2; - u8 r0; - u8 r4; - - r2 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); - gBattleAnimScriptPtr += 2; - if (r2 != 0) - r0 = gBattleAnimEnemyMonIndex; - else - r0 = gBattleAnimPlayerMonIndex; - r4 = GetBankIdentity(r0); - if (!IsContest() && (r4 == 0 || r4 == 3)) - { - REG_BG1CNT_BITFIELD.priority = 1; - REG_BG2CNT_BITFIELD.priority = 2; - } -} - -static void ScriptCmd_monbgprio_29(void) -{ - gBattleAnimScriptPtr++; - if (!IsContest()) - { - REG_BG1CNT_BITFIELD.priority = 1; - REG_BG2CNT_BITFIELD.priority = 2; - } -} - -static void ScriptCmd_monbgprio_2A(void) -{ - u8 r6; - u8 r4; - u8 r0; - - r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); - gBattleAnimScriptPtr += 2; - if (GetBankSide(gBattleAnimPlayerMonIndex) != GetBankSide(gBattleAnimEnemyMonIndex)) - { - if (r6 != 0) - r0 = gBattleAnimEnemyMonIndex; - else - r0 = gBattleAnimPlayerMonIndex; - r4 = GetBankIdentity(r0); - if (!IsContest() && (r4 == 0 || r4 == 3)) - { - REG_BG1CNT_BITFIELD.priority = 1; - REG_BG2CNT_BITFIELD.priority = 2; - } - } -} - -static void ScriptCmd_invisible(void) -{ - u8 r0; - u8 spriteId; - - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); - spriteId = obj_id_for_side_relative_to_move(r0); - if (spriteId != 0xFF) - { - gSprites[spriteId].invisible = TRUE; - } - gBattleAnimScriptPtr += 2; -} - -static void ScriptCmd_visible(void) -{ - u8 r0; - u8 spriteId; - - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); - spriteId = obj_id_for_side_relative_to_move(r0); - if (spriteId != 0xFF) - { - gSprites[spriteId].invisible = FALSE; - } - gBattleAnimScriptPtr += 2; -} - -static void ScriptCmd_doublebattle_2D(void) -{ - u8 r7; - u8 r4; - u8 spriteId; - - r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); - gBattleAnimScriptPtr += 2; - if (!IsContest() && IsDoubleBattle() - && GetBankSide(gBattleAnimPlayerMonIndex) == GetBankSide(gBattleAnimEnemyMonIndex)) - { - if (r7 == 0) - { - r4 = GetBankIdentity_permutated(gBattleAnimPlayerMonIndex); - spriteId = obj_id_for_side_relative_to_move(0); - } - else - { - r4 = GetBankIdentity_permutated(gBattleAnimEnemyMonIndex); - spriteId = obj_id_for_side_relative_to_move(1); - } - if (spriteId != 0xFF) - { - gSprites[spriteId].invisible = FALSE; - if (r4 == 2) - gSprites[spriteId].oam.priority = 3; - if (r4 == 1) - sub_8076464(0); - else - sub_8076464(1); - } - } -} - -static void ScriptCmd_doublebattle_2E(void) -{ - u8 r7; - u8 r4; - u8 spriteId; - - r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); - gBattleAnimScriptPtr += 2; - if (!IsContest() && IsDoubleBattle() - && GetBankSide(gBattleAnimPlayerMonIndex) == GetBankSide(gBattleAnimEnemyMonIndex)) - { - if (r7 == 0) - { - r4 = GetBankIdentity_permutated(gBattleAnimPlayerMonIndex); - spriteId = obj_id_for_side_relative_to_move(0); - } - else - { - r4 = GetBankIdentity_permutated(gBattleAnimEnemyMonIndex); - spriteId = obj_id_for_side_relative_to_move(1); - } - if (spriteId != 0xFF && r4 == 2) - { - gSprites[spriteId].oam.priority = 2; - } - } -} - -static void ScriptCmd_stopsound(void) -{ - m4aMPlayStop(&gMPlay_SE1); - m4aMPlayStop(&gMPlay_SE2); - gBattleAnimScriptPtr++; -} diff --git a/src/battle_anim_80A7E7C.c b/src/battle_anim_80A7E7C.c deleted file mode 100644 index 31984977f..000000000 --- a/src/battle_anim_80A7E7C.c +++ /dev/null @@ -1,940 +0,0 @@ -#include "global.h" -#include "battle_anim.h" -#include "rom_8077ABC.h" -#include "sprite.h" -#include "task.h" -#include "trig.h" - -#define SPRITE gSprites[TASK.data[0]] - -extern s16 gBattleAnimArgs[8]; - -extern u8 gObjectBankIDs[]; -extern s32 gMoveDmgMoveAnim; -extern u16 gMovePowerMoveAnim; -extern u8 gBattleAnimPlayerMonIndex; -extern u8 gBattleAnimEnemyMonIndex; - -static void sub_80A7EF0(u8 taskId); -static void sub_80A808C(u8 taskId); -static void sub_80A81D8(u8 taskId); -static void sub_80A8374(u8 taskId); -static void sub_80A8488(u8 taskId); -static void sub_80A85A4(struct Sprite *sprite); -void sub_80A8614(struct Sprite* sprite); -static void sub_80A86F4(struct Sprite *sprite); -static void sub_80A88F0(struct Sprite *sprite); -static void sub_80A89B4(u8 taskId); -static void sub_80A8A18(u8 taskId); -static void sub_80A8C0C(u8 taskId); -static void sub_80A8D8C(u8 taskId); -void sub_80A8FD8(u8 taskId); -static void sub_80A913C(u8 taskId); - -void sub_80A7E7C(u8 taskId) -{ - u8 sprite; - sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); - if (sprite == 0xff) - { - DestroyAnimVisualTask(taskId); - return; - } - gSprites[sprite].pos2.x = gBattleAnimArgs[1]; - gSprites[sprite].pos2.y = gBattleAnimArgs[2]; - TASK.data[0] = sprite; - TASK.data[1] = gBattleAnimArgs[3]; - TASK.data[2] = gBattleAnimArgs[4]; - TASK.data[3] = gBattleAnimArgs[4]; - TASK.data[4] = gBattleAnimArgs[1]; - TASK.data[5] = gBattleAnimArgs[2]; - TASK.func = sub_80A7EF0; - sub_80A7EF0(taskId); -} - -static void sub_80A7EF0(u8 taskId) -{ - if (TASK.data[3] == 0) - { - if (SPRITE.pos2.x == 0) - { - SPRITE.pos2.x = TASK.data[4]; - } - else - { - SPRITE.pos2.x = 0; - } - if (SPRITE.pos2.y == 0) - { - SPRITE.pos2.y = TASK.data[5]; - } - else - { - SPRITE.pos2.y = 0; - } - TASK.data[3] = TASK.data[2]; - if (--TASK.data[1] == 0) - { - SPRITE.pos2.x = 0; - SPRITE.pos2.y = 0; - DestroyAnimVisualTask(taskId); - return; - } - } - else - { - TASK.data[3]--; - } -} - - -void sub_80A7FA0(u8 taskId) -{ - u8 sprite; - bool8 r6; - u8 side; - r6 = 0; - if (gBattleAnimArgs[0] < 4) - { - sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); - if (sprite == 0xff) - { - DestroyAnimVisualTask(taskId); - return; - } - } - else if (gBattleAnimArgs[0] != 8) - { - switch (gBattleAnimArgs[0]) - { - case 4: - side = GetBankByPlayerAI(0); - break; - case 5: - side = GetBankByPlayerAI(2); - break; - case 6: - side = GetBankByPlayerAI(1); - break; - case 7: - default: - side = GetBankByPlayerAI(3); - break; - } - if (b_side_obj__get_some_boolean(side) == FALSE) - { - r6 = 1; - } - sprite = gObjectBankIDs[side]; - } - else - { - sprite = gObjectBankIDs[gBattleAnimPlayerMonIndex]; - } - if (r6) - { - DestroyAnimVisualTask(taskId); - return; - } - gSprites[sprite].pos2.x = gBattleAnimArgs[1]; - gSprites[sprite].pos2.y = gBattleAnimArgs[2]; - TASK.data[0] = sprite; - TASK.data[1] = gBattleAnimArgs[3]; - TASK.data[2] = gBattleAnimArgs[4]; - TASK.data[3] = gBattleAnimArgs[4]; - TASK.data[4] = gBattleAnimArgs[1]; - TASK.data[5] = gBattleAnimArgs[2]; - TASK.func = sub_80A808C; - sub_80A808C(taskId); -} - -static void sub_80A808C(u8 taskId) -{ - if (TASK.data[3] == 0) - { - if (SPRITE.pos2.x == TASK.data[4]) - { - SPRITE.pos2.x = -TASK.data[4]; - } - else - { - SPRITE.pos2.x = TASK.data[4]; - } - if (SPRITE.pos2.y == TASK.data[5]) - { - SPRITE.pos2.y = -TASK.data[5]; - } - else - { - SPRITE.pos2.y = TASK.data[5]; - } - TASK.data[3] = TASK.data[2]; - if (--TASK.data[1] == 0) - { - SPRITE.pos2.x = 0; - SPRITE.pos2.y = 0; - DestroyAnimVisualTask(taskId); - return; - } - } - else - { - TASK.data[3]--; - } -} - -void sub_80A8154(u8 taskId) -{ - u8 sprite; - sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); - if (sprite == 0xff) - { - DestroyAnimVisualTask(taskId); - return; - } - gSprites[sprite].pos2.x += gBattleAnimArgs[1]; - gSprites[sprite].pos2.y += gBattleAnimArgs[2]; - TASK.data[0] = sprite; - TASK.data[1] = 0; - TASK.data[2] = gBattleAnimArgs[3]; - TASK.data[3] = 0; - TASK.data[4] = gBattleAnimArgs[4]; - TASK.data[5] = gBattleAnimArgs[1] * 2; - TASK.data[6] = gBattleAnimArgs[2] * 2; - TASK.func = sub_80A81D8; - sub_80A81D8(taskId); -} - -static void sub_80A81D8(u8 taskId) -{ - if (TASK.data[3] == 0) - { - if (TASK.data[1] & 1) - { - SPRITE.pos2.x += TASK.data[5]; - SPRITE.pos2.y += TASK.data[6]; - } - else - { - SPRITE.pos2.x -= TASK.data[5]; - SPRITE.pos2.y -= TASK.data[6]; - } - TASK.data[3] = TASK.data[4]; - if (++TASK.data[1] >= TASK.data[2]) - { - if (TASK.data[1] & 1) - { - SPRITE.pos2.x += TASK.data[5] / 2; - SPRITE.pos2.y += TASK.data[6] / 2; - } - else - { - SPRITE.pos2.x -= TASK.data[5] / 2; - SPRITE.pos2.y -= TASK.data[6] / 2; - } - DestroyAnimVisualTask(taskId); - return; - } - } - else - { - TASK.data[3]--; - } -} - -void sub_80A8314(u8 taskId) -{ - u8 sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); - gSprites[sprite].pos2.x = gBattleAnimArgs[1]; - TASK.data[0] = sprite; - TASK.data[1] = gBattleAnimArgs[1]; - TASK.data[2] = gBattleAnimArgs[2]; - TASK.data[3] = gBattleAnimArgs[3]; - TASK.data[4] = gBattleAnimArgs[4]; - TASK.func = sub_80A8374; - sub_80A8374(taskId); -} - -static void sub_80A8374(u8 taskId) -{ - s16 x; - u8 sprite; - sprite = TASK.data[0]; - x = TASK.data[1]; - if (TASK.data[2] == TASK.data[8]++) - { - TASK.data[8] = 0; - if (gSprites[sprite].pos2.x == x) - { - x = -x; - } - gSprites[sprite].pos2.x += x; - } - TASK.data[1] = x; - TASK.data[9] += TASK.data[3]; - gSprites[sprite].pos2.y = TASK.data[9] >> 8; - if (--TASK.data[4] == 0) - { - DestroyAnimVisualTask(taskId); - return; - } -} - -void sub_80A8408(u8 taskId) -{ - u8 i; - u8 sprite; - u8 v1; - v1 = 1; - sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); - if (gBattleAnimArgs[4] > 5) - { - gBattleAnimArgs[4] = 5; - } - for (i = 0; i < gBattleAnimArgs[4]; i++) - { - v1 <<= 1; - } - TASK.data[0] = sprite; - TASK.data[1] = gBattleAnimArgs[1]; - TASK.data[2] = gBattleAnimArgs[2]; - TASK.data[3] = gBattleAnimArgs[3]; - TASK.data[4] = v1; - TASK.func = sub_80A8488; - sub_80A8488(taskId); -} - -static void sub_80A8488(u8 taskId) -{ - u8 sprite; - sprite = TASK.data[0]; - gSprites[sprite].pos2.x = Sin(TASK.data[5], TASK.data[1]); - gSprites[sprite].pos2.y = -Cos(TASK.data[5], TASK.data[2]); - gSprites[sprite].pos2.y += TASK.data[2]; - TASK.data[5] += TASK.data[4]; - TASK.data[5] &= 0xff; - if (TASK.data[5] == 0) - { - TASK.data[3]--; - } - if (TASK.data[3] == 0) - { - gSprites[sprite].pos2.x = 0; - gSprites[sprite].pos2.y = 0; - DestroyAnimVisualTask(taskId); - return; - } -} - -void sub_80A8500(u8 taskId) -{ - if (GetBankSide(gBattleAnimPlayerMonIndex)) - { - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - } - sub_80A8408(taskId); -} - -void sub_80A8530(struct Sprite *sprite) -{ - sprite->invisible = TRUE; - if (GetBankSide(gBattleAnimPlayerMonIndex)) - { - sprite->data1 = -gBattleAnimArgs[1]; - } - else - { - sprite->data1 = gBattleAnimArgs[1]; - } - sprite->data0 = gBattleAnimArgs[0]; - sprite->data2 = 0; - sprite->data3 = gObjectBankIDs[gBattleAnimPlayerMonIndex]; - sprite->data4 = gBattleAnimArgs[0]; - oamt_set_x3A_32(sprite, sub_80A85A4); - sprite->callback = sub_8078458; -} - -static void sub_80A85A4(struct Sprite *sprite) -{ - sprite->data0 = sprite->data4; - sprite->data1 = -sprite->data1; - sprite->callback = sub_8078458; - oamt_set_x3A_32(sprite, move_anim_8072740); -} - -void sub_80A85C8(struct Sprite *sprite) -{ - u8 spriteId; - sprite->invisible = TRUE; - spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[2]); - sprite->data0 = gBattleAnimArgs[0]; - sprite->data1 = 0; - sprite->data2 = gBattleAnimArgs[1]; - sprite->data3 = spriteId; - sprite->data4 = gBattleAnimArgs[0]; - oamt_set_x3A_32(sprite, sub_80A8614); - sprite->callback = sub_8078458; -} - -void sub_80A8614(struct Sprite *sprite) -{ - sprite->data0 = sprite->data4; - sprite->data2 = -sprite->data2; - sprite->callback = sub_8078458; - oamt_set_x3A_32(sprite, move_anim_8072740); -} - -void sub_80A8638(struct Sprite *sprite) -{ - int something; - int spriteId; - if (!gBattleAnimArgs[0]) - { - spriteId = gObjectBankIDs[gBattleAnimPlayerMonIndex]; - } - else - { - spriteId = gObjectBankIDs[gBattleAnimEnemyMonIndex]; - } - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; - sprite->data2 = gSprites[spriteId].pos1.x; - sprite->data3 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; - sprite->data4 = gSprites[spriteId].pos1.y; - something = 0; - sub_8078A5C(sprite); - sprite->data3 = something; - sprite->data4 = something; - sprite->data5 = gSprites[spriteId].pos2.x; - sprite->data6 = gSprites[spriteId].pos2.y; - sprite->invisible = TRUE; - if (gBattleAnimArgs[1] == 1) - { - sprite->data2 = something; - } - else if (gBattleAnimArgs[1] == 2) - { - sprite->data1 = something; - } - sprite->data7 = gBattleAnimArgs[1]; - sprite->data7 |= spriteId << 8; - sprite->callback = sub_80A86F4; -} - -static void sub_80A86F4(struct Sprite *sprite) -{ - s8 spriteId; - u8 lo; - struct Sprite *sprite2; - lo = sprite->data7 & 0xff; - spriteId = sprite->data7 >> 8; - sprite2 = &gSprites[spriteId]; - if (sprite->data0 == 0) - { - if (lo < 2) - { - sprite2->pos2.x = 0; - } - if (lo == 2 || lo == 0) - { - sprite2->pos2.y = 0; - } - move_anim_8072740(sprite); - } - else - { - sprite->data0--; - sprite->data3 += sprite->data1; - sprite->data4 += sprite->data2; - sprite2->pos2.x = (s8)(sprite->data3 >> 8) + sprite->data5; - sprite2->pos2.y = (s8)(sprite->data4 >> 8) + sprite->data6; - } -} - -void sub_80A8764(struct Sprite *sprite) -{ - u8 v1; - u8 spriteId; - if (!gBattleAnimArgs[0]) - { - v1 = gBattleAnimPlayerMonIndex; - } - else - { - v1 = gBattleAnimEnemyMonIndex; - } - spriteId = gObjectBankIDs[v1]; - if (GetBankSide(v1)) - { - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - if (gBattleAnimArgs[3] == 1) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - } - sprite->data0 = gBattleAnimArgs[4]; - sprite->data1 = gSprites[spriteId].pos1.x; - sprite->data2 = gSprites[spriteId].pos1.x + gBattleAnimArgs[1]; - sprite->data3 = gSprites[spriteId].pos1.y; - sprite->data4 = gSprites[spriteId].pos1.y + gBattleAnimArgs[2]; - sub_8078A5C(sprite); - sprite->data3 = 0; - sprite->data4 = 0; - sprite->data5 = spriteId; - sprite->invisible = TRUE; - oamt_set_x3A_32(sprite, move_anim_8072740); - sprite->callback = sub_80784A8; -} - -void sub_80A8818(struct Sprite *sprite) -{ - u8 spriteId; - u8 v1; - sprite->invisible = TRUE; - if (!gBattleAnimArgs[0]) - { - v1 = gBattleAnimPlayerMonIndex; - } - else - { - v1 = gBattleAnimEnemyMonIndex; - } - spriteId = gObjectBankIDs[v1]; - if (GetBankSide(v1)) - { - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - if (gBattleAnimArgs[3] == 1) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - } - sprite->data0 = gBattleAnimArgs[4]; - sprite->data1 = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; - sprite->data2 = sprite->data1 + gBattleAnimArgs[1]; - sprite->data3 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; - sprite->data4 = sprite->data3 + gBattleAnimArgs[2]; - sub_8078A5C(sprite); - sprite->data3 = gSprites[spriteId].pos2.x << 8; - sprite->data4 = gSprites[spriteId].pos2.y << 8; - sprite->data5 = spriteId; - sprite->data6 = gBattleAnimArgs[5]; - if (!gBattleAnimArgs[5]) - { - oamt_set_x3A_32(sprite, move_anim_8072740); - } - else - { - oamt_set_x3A_32(sprite, sub_80A88F0); - } - sprite->callback = sub_80784A8; -} - - -static void sub_80A88F0(struct Sprite *sprite) -{ - gSprites[sprite->data5].pos2.x = 0; - gSprites[sprite->data5].pos2.y = 0; - move_anim_8072740(sprite); -} - -void sub_80A8920(u8 taskId) -{ - s16 r7; - r7 = 0x8000 / gBattleAnimArgs[3]; - if (GetBankSide(gBattleAnimPlayerMonIndex)) - { - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - gBattleAnimArgs[5] = -gBattleAnimArgs[5]; - } - TASK.data[0] = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); - TASK.data[1] = (gBattleAnimArgs[1] << 8) / gBattleAnimArgs[3]; - TASK.data[2] = gBattleAnimArgs[2]; - TASK.data[3] = gBattleAnimArgs[3]; - TASK.data[4] = gBattleAnimArgs[4]; - TASK.data[5] = (gBattleAnimArgs[5] << 8) / gBattleAnimArgs[6]; - TASK.data[6] = gBattleAnimArgs[6]; - TASK.data[7] = r7; - TASK.func = sub_80A89B4; -} - -static void sub_80A89B4(u8 taskId) -{ - u8 spriteId; - spriteId = TASK.data[0]; - TASK.data[11] += TASK.data[1]; - gSprites[spriteId].pos2.x = TASK.data[11] >> 8; - gSprites[spriteId].pos2.y = Sin((u8)(TASK.data[10] >> 8), TASK.data[2]); - TASK.data[10] += TASK.data[7]; - if (--TASK.data[3] == 0) - { - TASK.func = sub_80A8A18; - } -} - -static void sub_80A8A18(u8 taskId) -{ - u8 spriteId; - if (TASK.data[4] > 0) - { - TASK.data[4]--; - } - else - { - spriteId = TASK.data[0]; - TASK.data[12] += TASK.data[5]; - gSprites[spriteId].pos2.x = (TASK.data[12] >> 8) + (TASK.data[11] >> 8); - if (--TASK.data[6] == 0) - { - DestroyAnimVisualTask(taskId); - return; - } - } -} - -static void sub_80A8B3C(u8 taskId); - -void sub_80A8A80(u8 taskId) -{ - u8 spriteId; - switch (gBattleAnimArgs[0]) - { - case 0: - case 1: - spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); - break; - case 2: - if (!b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) - { - DestroyAnimVisualTask(taskId); - return; - } - spriteId = gObjectBankIDs[gBattleAnimPlayerMonIndex ^ 2]; - break; - case 3: - if (!b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) - { - DestroyAnimVisualTask(taskId); - return; - } - spriteId = gObjectBankIDs[gBattleAnimEnemyMonIndex ^ 2]; - break; - default: - DestroyAnimVisualTask(taskId); - return; - } - TASK.data[0] = spriteId; - if (GetBankSide(gBattleAnimEnemyMonIndex)) - { - TASK.data[1] = gBattleAnimArgs[1]; - } - else - { - TASK.data[1] = -gBattleAnimArgs[1]; - } - TASK.func = sub_80A8B3C; -} - -static void sub_80A8B3C(u8 taskId) -{ - u8 spriteId = TASK.data[0]; - gSprites[spriteId].pos2.x += TASK.data[1]; - if (gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x + 0x20 > 0x130u) - { - DestroyAnimVisualTask(taskId); - return; - } -} - -void sub_80A8B88(u8 taskId) -{ - u8 spriteId; - if (GetBankSide(gBattleAnimPlayerMonIndex)) - { - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - } - spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[4]); - TASK.data[0] = gBattleAnimArgs[0]; - TASK.data[1] = gBattleAnimArgs[1]; - TASK.data[2] = gBattleAnimArgs[2]; - TASK.data[3] = gBattleAnimArgs[3]; - TASK.data[4] = spriteId; - if (gBattleAnimArgs[4] == 0) - { - TASK.data[5] = gBattleAnimPlayerMonIndex; - } - else - { - TASK.data[5] = gBattleAnimEnemyMonIndex; - } - TASK.data[12] = 1; - TASK.func = sub_80A8C0C; -} - -static void sub_80A8C0C(u8 taskId) -{ - s16 y; - u8 spriteId; - int index; - u16 val; - spriteId = TASK.data[4]; - val = TASK.data[10] + TASK.data[2]; - TASK.data[10] = val; - index = val >> 8; - y = Sin(index, TASK.data[1]); - if (TASK.data[0] == 0) - { - gSprites[spriteId].pos2.x = y; - } - else - { - if (GetBankSide(TASK.data[5]) == 0) - { - gSprites[spriteId].pos2.y = (y >= 0) ? y : -y; - } - else - { - gSprites[spriteId].pos2.y = (y >= 0) ? -y : y; - } - } - if (((index >= 0x80u) && (TASK.data[11] == 0) && (TASK.data[12] == 1)) - || ((index < 0x7fu) && (TASK.data[11] == 1) && (TASK.data[12] == 0))) - { - TASK.data[11] ^= 1; - TASK.data[12] ^= 1; - if (--TASK.data[3] == 0) - { - gSprites[spriteId].pos2.x = 0; - gSprites[spriteId].pos2.y = 0; - DestroyAnimVisualTask(taskId); - return; - } - } -} - -void sub_80A8D34(u8 taskId) -{ - u8 spriteId; - spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[3]); - sub_8078E70(spriteId, gBattleAnimArgs[4]); - TASK.data[0] = gBattleAnimArgs[0]; - TASK.data[1] = gBattleAnimArgs[1]; - TASK.data[2] = gBattleAnimArgs[2]; - TASK.data[3] = gBattleAnimArgs[2]; - TASK.data[4] = spriteId; - TASK.data[10] = 0x100; - TASK.data[11] = 0x100; - TASK.func = sub_80A8D8C; -} - -static void sub_80A8D8C(u8 taskId) -{ - u8 spriteId; - TASK.data[10] += TASK.data[0]; - TASK.data[11] += TASK.data[1]; - spriteId = TASK.data[4]; - obj_id_set_rotscale(spriteId, TASK.data[10], TASK.data[11], 0); - if (--TASK.data[2] == 0) - { - if (TASK.data[3] > 0) - { - TASK.data[0] = -TASK.data[0]; - TASK.data[1] = -TASK.data[1]; - TASK.data[2] = TASK.data[3]; - TASK.data[3] = 0; - } - else - { - sub_8078F40(spriteId); - DestroyAnimVisualTask(taskId); - return; - } - } -} - -void sub_80A8E04(u8 taskId) -{ - u8 spriteId; - spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[2]); - sub_8078E70(spriteId, 0); - TASK.data[1] = 0; - TASK.data[2] = gBattleAnimArgs[0]; - if (gBattleAnimArgs[3] != 1) - { - TASK.data[3] = 0; - } - else - { - TASK.data[3] = gBattleAnimArgs[0] * gBattleAnimArgs[1]; - } - TASK.data[4] = gBattleAnimArgs[1]; - TASK.data[5] = spriteId; - TASK.data[6] = gBattleAnimArgs[3]; - if (IsContest()) - { - TASK.data[7] = 1; - } - else - { - if (gBattleAnimArgs[2] == 0) - { - TASK.data[7] = !GetBankSide(gBattleAnimPlayerMonIndex); - } - else - { - TASK.data[7] = !GetBankSide(gBattleAnimEnemyMonIndex); - } - } - if (TASK.data[7]) - { - if (!IsContest()) - { - TASK.data[3] *= -1; - TASK.data[4] *= -1; - } - } - TASK.func = sub_80A8FD8; -} - -void sub_80A8EFC(u8 taskId) -{ - u8 spriteId; - spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[2]); - sub_8078E70(spriteId, 0); - TASK.data[1] = 0; - TASK.data[2] = gBattleAnimArgs[0]; - if (gBattleAnimArgs[2] == 0) - { - if (GetBankSide(gBattleAnimPlayerMonIndex)) - { - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - } - } - else - { - if (GetBankSide(gBattleAnimEnemyMonIndex)) - { - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - } - } - if (gBattleAnimArgs[3] != 1) - { - TASK.data[3] = 0; - } - else - { - TASK.data[3] = gBattleAnimArgs[0] * gBattleAnimArgs[1]; - } - TASK.data[4] = gBattleAnimArgs[1]; - TASK.data[5] = spriteId; - TASK.data[6] = gBattleAnimArgs[3]; - TASK.data[7] = 1; - TASK.data[3] *= -1; - TASK.data[4] *= -1; - TASK.func = sub_80A8FD8; -} - -void sub_80A8FD8(u8 taskId) -{ - TASK.data[3] += TASK.data[4]; - obj_id_set_rotscale(TASK.data[5], 0x100, 0x100, TASK.data[3]); - if (TASK.data[7]) - { - sub_8078F9C(TASK.data[5]); - } - if (++TASK.data[1] >= TASK.data[2]) - { - switch (TASK.data[6]) - { - case 1: - sub_8078F40(TASK.data[5]); - case 0: - default: - DestroyAnimVisualTask(taskId); - return; - case 2: - TASK.data[1] = 0; - TASK.data[4] *= -1; - TASK.data[6] = 1; - break; - } - } -} - -void sub_80A9058(u8 taskId) -{ - if (!gBattleAnimArgs[0]) - { - TASK.data[15] = gMovePowerMoveAnim / 12; - if (TASK.data[15] < 1) - { - TASK.data[15] = 1; - } - if (TASK.data[15] > 16) - { - TASK.data[15] = 16; - } - } - else - { - TASK.data[15] = gMoveDmgMoveAnim / 12; - if (TASK.data[15] < 1) - { - TASK.data[15] = 1; - } - if (TASK.data[15] > 16) - { - TASK.data[15] = 16; - } - } - TASK.data[14] = TASK.data[15] / 2; - TASK.data[13] = TASK.data[14] + (TASK.data[15] & 1); - TASK.data[12] = 0; - TASK.data[10] = gBattleAnimArgs[3]; - TASK.data[11] = gBattleAnimArgs[4]; - TASK.data[7] = obj_id_for_side_relative_to_move(1); - TASK.data[8] = gSprites[TASK.data[7]].pos2.x; - TASK.data[9] = gSprites[TASK.data[7]].pos2.y; - TASK.data[0] = 0; - TASK.data[1] = gBattleAnimArgs[1]; - TASK.data[2] = gBattleAnimArgs[2]; - TASK.func = sub_80A913C; -} - -static void sub_80A913C(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - if (++task->data[0] > task->data[1]) - { - task->data[0] = 0; - task->data[12] = (task->data[12] + 1) & 1; - if (task->data[10]) - { - if (task->data[12]) - { - gSprites[task->data[7]].pos2.x = task->data[8] + task->data[13]; - } - else - { - gSprites[task->data[7]].pos2.x = task->data[8] - task->data[14]; - } - } - if (task->data[11]) - { - if (task->data[12]) - { - gSprites[task->data[7]].pos2.y = task->data[15]; - } - else - { - gSprites[task->data[7]].pos2.y = 0; - } - } - if (!--task->data[2]) - { - gSprites[task->data[7]].pos2.x = 0; - gSprites[task->data[7]].pos2.y = 0; - DestroyAnimVisualTask(taskId); - return; - } - } -} 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 bb181d5fb..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 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(); - -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) -{ - 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 sub_8138E04(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 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].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 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].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 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_interface.c b/src/battle_interface.c deleted file mode 100644 index 246bda62b..000000000 --- a/src/battle_interface.c +++ /dev/null @@ -1,3049 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_interface.h" -#include "decompress.h" -#include "palette.h" -#include "pokedex.h" -#include "pokemon.h" -#include "rom_8077ABC.h" -#include "safari_zone.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "string_util.h" -#include "task.h" -#include "text.h" - -struct UnknownStruct5 -{ - u8 unk0; - u32 unk4; - u32 unk8; - u32 unkC; - u32 unk10; -}; - -struct UnknownStruct7 -{ - u8 filler0[0x180]; -}; - -extern u8 ewram[]; -#define ewram520 ((struct UnknownStruct7 *)(ewram + 0x00520)) -#define ewram16088 (*(u8 *) (ewram + 0x16088)) -#define ewram16089 (*(u8 *) (ewram + 0x16089)) -#define ewram17850 ((struct UnknownStruct5 *)(ewram + 0x17850)) - -extern u8 gDisplayedStringBattle[]; -extern u8 gNoOfAllBanks; -extern u16 gBattlePartyID[]; -extern u8 gBanksBySide[]; -extern u8 gHealthboxIDs[]; - -extern u16 gBattleTypeFlags; - -extern const struct SpriteTemplate gSpriteTemplate_820A4EC[]; -extern const struct SpriteTemplate gSpriteTemplate_820A51C[]; -extern const struct SpriteTemplate gSpriteTemplate_820A54C; -extern const struct SpriteTemplate gSpriteTemplate_820A56C[]; -extern const struct SubspriteTable gSubspriteTables_820A684[]; -extern const struct SubspriteTable gSubspriteTables_820A6E4[]; -extern const struct SubspriteTable gSubspriteTables_820A6EC[]; -extern const struct SpriteSheet gUnknown_0820A754[]; -extern const struct SpritePalette gUnknown_0820A764[]; -extern const struct SpritePalette gUnknown_0820A774[]; -extern const struct SpriteSheet gUnknown_0820A784[]; -extern const struct SpriteTemplate gSpriteTemplate_820A7A4[]; -extern const struct SpriteTemplate gSpriteTemplate_820A7D4[]; -extern void *const gUnknown_0820A804[]; -extern void *const gUnknown_0820A80C[]; -extern void *const gUnknown_0820A814[]; -extern void *const gUnknown_0820A83C[]; -extern void *const gUnknown_0820A848[]; -extern void *const gUnknown_0820A854[]; -extern void *const gUnknown_0820A85C[]; -extern void *const gUnknown_0820A87C[]; -extern void *const gUnknown_0820A894[]; -extern void *const gUnknown_0820A8B4[]; -extern void *const gUnknown_0820A8DC[]; -extern void *const gUnknown_0820A904[]; -extern const u8 gUnknown_0820A81C[]; -extern const u8 gUnknown_0820A864[]; -extern const u8 gUnknown_0820A89C[]; -extern const u8 gUnknown_0820A8B0[]; -extern const u8 BattleText_SafariBalls[]; -extern const u8 BattleText_SafariBallsLeft[]; -extern const u8 BattleText_HighlightRed[]; -extern const u8 gUnknown_08D1216C[][32]; - -extern const u16 gBattleInterfaceStatusIcons_DynPal[]; - -#define ABS(n) ((n) >= 0 ? (n) : -(n)) -// Used for computing copy destination addresses -#define MACRO1(n) ((n) - (n) / 8 * 8) + 64 * ((n) / 8) - -static void sub_8043D5C(struct Sprite *); -static const void *sub_8043CDC(u8); -static void sub_8044210(u8, s16, u8); -static void draw_status_ailment_maybe(u8); -extern void sub_8045180(struct Sprite *); -static void sub_8045110(struct Sprite *); -static void sub_8045048(struct Sprite *); -static void sub_8044F70(u8 taskId); -static void sub_8044E74(u8 taskId); -static void sub_8044ECC(u8 taskId); -static u8 sub_80457E8(u8, u8); -static int sub_8045F58(s32, s32, int, int *, u8, u16); -static u8 GetScaledExpFraction(int, int, int, u8); -static void sub_8045D58(u8, u8); -static u8 sub_804602C(int, int, int, int *, u8 *, u8); -static void sub_8046128(struct BattleInterfaceStruct1 *a, int *b, void *c); - -static int do_nothing(s16 unused1, s16 unused2, int unused3) -{ - return 9; -} - -#ifdef NONMATCHING -void sub_8043740(s16 a, u16 *b, u8 c) -{ - u8 sp0[4]; - s8 i; - s8 j; - s32 r9; - - for (i = 0; i < 4; i++) - sp0[i] = 0; - - //_0804377C - //i = 3; - //r9 = -1; - for (i = 3, r9 = -1;;) - { - if (a > 0) - { - sp0[i] = a % 10; - a /= 10; - i--; - } - else - break; - asm(""::"r"(r9)); - } - - //_080437AA - for (; i > r9; i--) - { - //asm("":"=r"(r9)); - sp0[i] = -1; - } - //_080437CE - if (sp0[3] == 0xFF) - sp0[3] = 0; - - //_080437DA - if (c == 0) - { - for (i = 0, j = 0; i < 4; i++) - { - if (sp0[j] == 0xFF) - { - b[j] = (b[j] & 0xFC00) | 0x1E; - b[i + 0x20] = (b[i + 0x20] & 0xFC00) | 0x1E; - } - else - { - b[j] = (b[j] & 0xFC00) | (sp0[j] + 0x14); - b[i + 0x20] = (b[i + 0x20] & 0xFC00) | (sp0[i] + 0x34); - } - j++; - } - - } - //_0804386A - else - { - for (i = 0; i < 4; i++) - { - if (sp0[i] == 0xFF) - { - b[i] = (b[i] & 0xFC00) | 0x1E; - b[i + 0x20] = (b[i + 0x20] & 0xFC00) | 0x1E; - } - else - { - b[i] = (b[i] & 0xFC00) | (sp0[i] + 0x14); - b[i + 0x20] = (b[i + 0x20] & 0xFC00) | (sp0[i] + 0x34); - } - } - } - asm(""::"r"(r9)); -} -#else -__attribute__((naked)) -void sub_8043740(s16 a, u16 *b, u8 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, 0x4\n\ - adds r7, r1, 0\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - mov r10, r2\n\ - movs r3, 0\n\ - movs r2, 0\n\ -_0804375C:\n\ - lsls r0, r3, 24\n\ - asrs r0, 24\n\ - mov r3, sp\n\ - adds r1, r3, r0\n\ - strb r2, [r1]\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - asrs r0, 24\n\ - cmp r0, 0x3\n\ - ble _0804375C\n\ - movs r3, 0x3\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - mov r9, r0\n\ - mov r8, sp\n\ -_0804377C:\n\ - lsls r0, r5, 16\n\ - asrs r6, r0, 16\n\ - cmp r6, 0\n\ - ble _080437AA\n\ - lsls r4, r3, 24\n\ - asrs r4, 24\n\ - mov r1, sp\n\ - adds r5, r1, r4\n\ - adds r0, r6, 0\n\ - movs r1, 0xA\n\ - bl __modsi3\n\ - strb r0, [r5]\n\ - adds r0, r6, 0\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - subs r4, 0x1\n\ - lsls r4, 24\n\ - lsrs r3, r4, 24\n\ - b _0804377C\n\ -_080437AA:\n\ - lsls r1, r3, 24\n\ - asrs r0, r1, 24\n\ - cmp r0, r9\n\ - ble _080437CE\n\ - movs r4, 0xFF\n\ - movs r3, 0x1\n\ - negs r3, r3\n\ -_080437B8:\n\ - asrs r2, r1, 24\n\ - mov r5, sp\n\ - adds r1, r5, r2\n\ - ldrb r0, [r1]\n\ - orrs r0, r4\n\ - strb r0, [r1]\n\ - subs r2, 0x1\n\ - lsls r1, r2, 24\n\ - asrs r0, r1, 24\n\ - cmp r0, r3\n\ - bgt _080437B8\n\ -_080437CE:\n\ - mov r1, r8\n\ - ldrb r0, [r1, 0x3]\n\ - cmp r0, 0xFF\n\ - bne _080437DA\n\ - movs r0, 0\n\ - strb r0, [r1, 0x3]\n\ -_080437DA:\n\ - mov r2, r10\n\ - cmp r2, 0\n\ - bne _0804386A\n\ - movs r3, 0\n\ - movs r1, 0\n\ - movs r6, 0xFC\n\ - lsls r6, 8\n\ - movs r5, 0x1E\n\ - mov r12, r5\n\ -_080437EC:\n\ - lsls r1, 24\n\ - asrs r2, r1, 24\n\ - mov r0, sp\n\ - adds r5, r0, r2\n\ - ldrb r0, [r5]\n\ - mov r8, r1\n\ - cmp r0, 0xFF\n\ - bne _08043822\n\ - lsls r1, r2, 1\n\ - adds r1, r7\n\ - ldrh r2, [r1]\n\ - adds r0, r6, 0\n\ - ands r0, r2\n\ - mov r2, r12\n\ - orrs r0, r2\n\ - strh r0, [r1]\n\ - lsls r3, 24\n\ - asrs r1, r3, 23\n\ - adds r1, r7\n\ - adds r1, 0x40\n\ - ldrh r2, [r1]\n\ - adds r0, r6, 0\n\ - ands r0, r2\n\ - mov r5, r12\n\ - orrs r0, r5\n\ - strh r0, [r1]\n\ - b _08043852\n\ -_08043822:\n\ - lsls r2, 1\n\ - adds r2, r7\n\ - ldrh r0, [r2]\n\ - adds r1, r6, 0\n\ - ands r1, r0\n\ - ldrb r0, [r5]\n\ - adds r0, 0x14\n\ - orrs r1, r0\n\ - strh r1, [r2]\n\ - lsls r4, r3, 24\n\ - asrs r3, r4, 24\n\ - lsls r2, r3, 1\n\ - adds r2, r7\n\ - adds r2, 0x40\n\ - ldrh r0, [r2]\n\ - adds r1, r6, 0\n\ - ands r1, r0\n\ - mov r5, sp\n\ - adds r0, r5, r3\n\ - ldrb r0, [r0]\n\ - adds r0, 0x34\n\ - orrs r1, r0\n\ - strh r1, [r2]\n\ - adds r3, r4, 0\n\ -_08043852:\n\ - movs r0, 0x80\n\ - lsls r0, 17\n\ - add r0, r8\n\ - lsrs r1, r0, 24\n\ - movs r2, 0x80\n\ - lsls r2, 17\n\ - adds r0, r3, r2\n\ - lsrs r3, r0, 24\n\ - asrs r0, 24\n\ - cmp r0, 0x3\n\ - ble _080437EC\n\ - b _080438CE\n\ -_0804386A:\n\ - movs r3, 0\n\ - movs r4, 0xFC\n\ - lsls r4, 8\n\ - movs r6, 0x1E\n\ -_08043872:\n\ - lsls r1, r3, 24\n\ - asrs r2, r1, 24\n\ - mov r3, sp\n\ - adds r5, r3, r2\n\ - ldrb r0, [r5]\n\ - adds r3, r1, 0\n\ - cmp r0, 0xFF\n\ - bne _0804389E\n\ - lsls r1, r2, 1\n\ - adds r1, r7\n\ - ldrh r2, [r1]\n\ - adds r0, r4, 0\n\ - ands r0, r2\n\ - orrs r0, r6\n\ - strh r0, [r1]\n\ - adds r1, 0x40\n\ - ldrh r2, [r1]\n\ - adds r0, r4, 0\n\ - ands r0, r2\n\ - orrs r0, r6\n\ - strh r0, [r1]\n\ - b _080438C0\n\ -_0804389E:\n\ - lsls r2, 1\n\ - adds r2, r7\n\ - ldrh r0, [r2]\n\ - adds r1, r4, 0\n\ - ands r1, r0\n\ - ldrb r0, [r5]\n\ - adds r0, 0x14\n\ - orrs r1, r0\n\ - strh r1, [r2]\n\ - adds r2, 0x40\n\ - ldrh r0, [r2]\n\ - adds r1, r4, 0\n\ - ands r1, r0\n\ - ldrb r0, [r5]\n\ - adds r0, 0x34\n\ - orrs r1, r0\n\ - strh r1, [r2]\n\ -_080438C0:\n\ - movs r5, 0x80\n\ - lsls r5, 17\n\ - adds r0, r3, r5\n\ - lsrs r3, r0, 24\n\ - asrs r0, 24\n\ - cmp r0, 0x3\n\ - ble _08043872\n\ -_080438CE:\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"); -} -#endif - -void unref_sub_80438E0(s16 a, s16 b, u16 *c) -{ - c[4] = 0x1E; - sub_8043740(b, c, 0); - sub_8043740(a, c + 5, 1); -} - -u8 battle_make_oam_normal_battle(u8 a) -{ - int sp0 = 0; - u8 spriteId1; - u8 spriteId2; - u8 spriteId3; - struct Sprite *sprite; - - if (!IsDoubleBattle()) - { - if (GetBankSide(a) == 0) - { - spriteId1 = CreateSprite(&gSpriteTemplate_820A4EC[0], 240, 160, 1); - spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A4EC[0], 240, 160, 1); - - gSprites[spriteId1].oam.shape = 0; - gSprites[spriteId2].oam.shape = 0; - gSprites[spriteId2].oam.tileNum += 64; - } - else - { - spriteId1 = CreateSprite(&gSpriteTemplate_820A51C[0], 240, 160, 1); - spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A51C[0], 240, 160, 1); - - gSprites[spriteId2].oam.tileNum += 32; - sp0 = 2; - } - //_080439F2 - - gSprites[spriteId1].oam.affineParam = spriteId2; - gSprites[spriteId2].data5 = spriteId1; - gSprites[spriteId2].callback = sub_8043D5C; - } - //_08043A28 - else - { - if (GetBankSide(a) == 0) - { - spriteId1 = CreateSprite(&gSpriteTemplate_820A4EC[GetBankIdentity(a) / 2], 240, 160, 1); - spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A4EC[GetBankIdentity(a) / 2], 240, 160, 1); - - gSprites[spriteId1].oam.affineParam = spriteId2; - gSprites[spriteId2].data5 = spriteId1; - gSprites[spriteId2].oam.tileNum += 32; - gSprites[spriteId2].callback = sub_8043D5C; - sp0 = 1; - } - //_08043ACC - else - { - spriteId1 = CreateSprite(&gSpriteTemplate_820A51C[GetBankIdentity(a) / 2], 240, 160, 1); - spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A51C[GetBankIdentity(a) / 2], 240, 160, 1); - - gSprites[spriteId1].oam.affineParam = spriteId2; - gSprites[spriteId2].data5 = spriteId1; - gSprites[spriteId2].oam.tileNum += 32; - gSprites[spriteId2].callback = sub_8043D5C; - sp0 = 2; - } - //_08043B4E - } - //_08043B50 - - spriteId3 = CreateSpriteAtEnd(&gSpriteTemplate_820A56C[gBanksBySide[a]], 140, 60, 0); - sprite = &gSprites[spriteId3]; - SetSubspriteTables(sprite, &gSubspriteTables_820A684[GetBankSide(a)]); - sprite->subspriteMode = 2; - sprite->oam.priority = 1; - CpuCopy32(sub_8043CDC(1), (void *)(OBJ_VRAM0 + sprite->oam.tileNum * 32), 64); - - gSprites[spriteId1].data5 = spriteId3; - gSprites[spriteId1].data6 = a; - gSprites[spriteId1].invisible = TRUE; - gSprites[spriteId2].invisible = TRUE; - sprite->data5 = spriteId1; - sprite->data6 = sp0; - sprite->invisible = TRUE; - - return spriteId1; -} - -u8 battle_make_oam_safari_battle(void) -{ - u8 spriteId1 = CreateSprite(&gSpriteTemplate_820A54C, 240, 160, 1); - u8 spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A54C, 240, 160, 1); - - gSprites[spriteId1].oam.shape = 0; - gSprites[spriteId2].oam.shape = 0; - gSprites[spriteId2].oam.tileNum += 0x40; - gSprites[spriteId1].oam.affineParam = spriteId2; - gSprites[spriteId2].data5 = spriteId1; - gSprites[spriteId2].callback = sub_8043D5C; - return spriteId1; -} - -static const void *sub_8043CDC(u8 a) -{ - return gUnknown_08D1216C[a]; -} - -void sub_8043CEC(struct Sprite *sprite) -{ - u8 r5 = sprite->data5; - - switch (sprite->data6) - { - case 0: - sprite->pos1.x = gSprites[r5].pos1.x + 16; - sprite->pos1.y = gSprites[r5].pos1.y; - break; - case 1: - sprite->pos1.x = gSprites[r5].pos1.x + 16; - sprite->pos1.y = gSprites[r5].pos1.y; - break; - default: - case 2: - sprite->pos1.x = gSprites[r5].pos1.x + 8; - sprite->pos1.y = gSprites[r5].pos1.y; - break; - } - sprite->pos2.x = gSprites[r5].pos2.x; - sprite->pos2.y = gSprites[r5].pos2.y; -} - -static void sub_8043D5C(struct Sprite *sprite) -{ - u8 data5 = sprite->data5; - - sprite->pos1.x = gSprites[data5].pos1.x + 64; - sprite->pos1.y = gSprites[data5].pos1.y; - sprite->pos2.x = gSprites[data5].pos2.x; - sprite->pos2.y = gSprites[data5].pos2.y; -} - -void sub_8043D84(u8 a, u8 b, u32 c, u32 d, u32 e) -{ - ewram17850[a].unk0 = b; - ewram17850[a].unk4 = c; - ewram17850[a].unk8 = d; - ewram17850[a].unkC = e; - ewram17850[a].unk10 = 0xFFFF8000; -} - -void sub_8043DB0(u8 a) -{ - gSprites[a].invisible = TRUE; - gSprites[gSprites[a].data5].invisible = TRUE; - gSprites[gSprites[a].oam.affineParam].invisible = TRUE; -} - -void sub_8043DFC(u8 a) -{ - gSprites[a].invisible = FALSE; - gSprites[gSprites[a].data5].invisible = FALSE; - gSprites[gSprites[a].oam.affineParam].invisible = FALSE; -} - -static void sub_8043E50(u8 spriteId, s16 x, s16 y) -{ - gSprites[spriteId].pos1.x = x; - gSprites[spriteId].pos1.y = y; -} - -void unref_sub_8043E70(u8 a) -{ - DestroySprite(&gSprites[gSprites[a].oam.affineParam]); - DestroySprite(&gSprites[gSprites[a].data5]); - DestroySprite(&gSprites[a]); -} - -void nullsub_11() -{ -} - -void sub_8043EB4(u8 priority) -{ - s32 i; - - for (i = 0; i < gNoOfAllBanks; i++) - { - u8 spriteId1; - u8 spriteId2; - u8 spriteId3; - - spriteId1 = gHealthboxIDs[i]; - spriteId2 = gSprites[spriteId1].oam.affineParam; - spriteId3 = gSprites[spriteId1].data5; - gSprites[spriteId1].oam.priority = priority; - gSprites[spriteId2].oam.priority = priority; - gSprites[spriteId3].oam.priority = priority; - } -} - -void sub_8043F44(u8 a) -{ - s16 x = 0; - s16 y = 0; - - if (!IsDoubleBattle()) - { - if (GetBankSide(a) != 0) - { - x = 44; - y = 30; - } - else - { - x = 158; - y = 88; - } - } - else - { - switch (GetBankIdentity(a)) - { - case 0: - x = 159; - y = 77; - break; - case 2: - x = 171; - y = 102; - break; - case 1: - x = 44; - y = 19; - break; - case 3: - x = 32; - y = 44; - break; - } - } - sub_8043E50(gHealthboxIDs[a], x, y); -} - -#if ENGLISH -#define CHAR_LV_SEPARATOR CHAR_COLON -#elif GERMAN -#define CHAR_LV_SEPARATOR CHAR_PERIOD -#endif - -static void sub_8043FC0(u8 a, u8 b) -{ - u8 str[30]; - void *const *r7; - u8 *ptr; - s32 i; - s32 two; - - // TODO: Make this a local variable - memcpy(str, gUnknown_0820A81C, sizeof(str)); - if (!IsDoubleBattle()) - { - if (GetBankSide(gSprites[a].data6) == 0) - r7 = gUnknown_0820A804; - else - r7 = gUnknown_0820A80C; - } - else - { - if (GetBankSide(gSprites[a].data6) == 0) - r7 = gUnknown_0820A814; - else - r7 = gUnknown_0820A80C; - } - - ptr = str + 6; - if (b == 100) - { - ptr = ConvertIntToDecimalStringN(ptr, 100, 0, 3); - } - else - { - *(ptr++) = EXT_CTRL_CODE_BEGIN; - *(ptr++) = 0x11; - *(ptr++) = 1; - *(ptr++) = EXT_CTRL_CODE_BEGIN; - *(ptr++) = 0x14; - *(ptr++) = 4; - *(ptr++) = CHAR_LV_SEPARATOR; - *(ptr++) = EXT_CTRL_CODE_BEGIN; - *(ptr++) = 0x14; - *(ptr++) = 0; - ptr = ConvertIntToDecimalStringN(ptr, b, 0, 2); - } - - *(ptr++) = EXT_CTRL_CODE_BEGIN; - *(ptr++) = 0x13; - *(ptr++) = 0xF; - *(ptr++) = EOS; - sub_80034D4((u8 *)0x02000000, str); - - two = 2; - for (i = 0; i < two; i++) - CpuCopy32((void *)(0x02000020 + i * 64), r7[i] + gSprites[a].oam.tileNum * 32, 32); -} - -#ifdef NONMATCHING -void sub_80440EC(u8 a, s16 b, u8 c) -{ - u8 str[0x14]; - u8 *ptr; - s32 foo; - void *const *r4; - s32 i; - - // TODO: make this a local variable - memcpy(str, gUnknown_0820A864, sizeof(str)); - foo = gSprites[a].data6; - - if (IsDoubleBattle() == TRUE || GetBankSide(foo) == 1) - { - //_08044136 - sub_8044210(a, b, c); - return; - } - // - ptr = str + 6; - if (c == 0) - { - if (GetBankSide(gSprites[a].data6) == 0) - r4 = gUnknown_0820A83C; - else - r4 = gUnknown_0820A848; - c = 3; - ptr = sub_8003504(ptr, b, 0x13, 1); - *(ptr++) = 0xBA; - *(ptr++) = 0xFF; - sub_80034D4((u8 *)0x02000000, str); - } - else - { - if (GetBankSide(gSprites[a].data6) == 0) - r4 = gUnknown_0820A854; - else - r4 = gUnknown_0820A85C; - c = 2; - sub_8003504(ptr, b, 0xF, 1); - sub_80034D4((u8 *)0x02000000, str); - } - //asm(""::"r"(a)); - //_080441B6 - for (i = 0; i < c; i++) // _080440BC - { - void *temp = r4[i] + gSprites[a].oam.tileNum * 32; - CpuCopy32((void *)(0x02000020 + i * 0x40), temp, 0x20); - } -} -#else -__attribute__((naked)) -void sub_80440EC(u8 a, s16 b, u8 c) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - sub sp, 0x14\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - lsls r1, 16\n\ - lsrs r6, r1, 16\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - mov r8, r2\n\ - ldr r1, _08044144 @ =gUnknown_0820A864\n\ - mov r0, sp\n\ - movs r2, 0x14\n\ - bl memcpy\n\ - ldr r1, _08044148 @ =gSprites\n\ - lsls r0, r7, 4\n\ - adds r0, r7\n\ - lsls r0, 2\n\ - adds r4, r0, r1\n\ - movs r0, 0x3A\n\ - ldrsh r5, [r4, r0]\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - beq _08044136\n\ - lsls r0, r5, 24\n\ - lsrs r0, 24\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0804414C\n\ -_08044136:\n\ - lsls r1, r6, 16\n\ - asrs r1, 16\n\ - adds r0, r7, 0\n\ - mov r2, r8\n\ - bl sub_8044210\n\ - b _080441F0\n\ - .align 2, 0\n\ -_08044144: .4byte gUnknown_0820A864\n\ -_08044148: .4byte gSprites\n\ -_0804414C:\n\ - mov r5, sp\n\ - adds r5, 0x6\n\ - mov r0, r8\n\ - cmp r0, 0\n\ - bne _08044190\n\ - ldrh r0, [r4, 0x3A]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - ldr r4, _08044188 @ =gUnknown_0820A848\n\ - cmp r0, 0\n\ - bne _0804416A\n\ - ldr r4, _0804418C @ =gUnknown_0820A83C\n\ -_0804416A:\n\ - movs r0, 0x3\n\ - mov r8, r0\n\ - lsls r1, r6, 16\n\ - asrs r1, 16\n\ - adds r0, r5, 0\n\ - movs r2, 0x13\n\ - movs r3, 0x1\n\ - bl sub_8003504\n\ - adds r5, r0, 0\n\ - movs r0, 0xBA\n\ - strb r0, [r5]\n\ - movs r0, 0xFF\n\ - strb r0, [r5, 0x1]\n\ - b _080441B6\n\ - .align 2, 0\n\ -_08044188: .4byte gUnknown_0820A848\n\ -_0804418C: .4byte gUnknown_0820A83C\n\ -_08044190:\n\ - ldrh r0, [r4, 0x3A]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - ldr r4, _080441FC @ =gUnknown_0820A85C\n\ - cmp r0, 0\n\ - bne _080441A4\n\ - ldr r4, _08044200 @ =gUnknown_0820A854\n\ -_080441A4:\n\ - movs r0, 0x2\n\ - mov r8, r0\n\ - lsls r1, r6, 16\n\ - asrs r1, 16\n\ - adds r0, r5, 0\n\ - movs r2, 0xF\n\ - movs r3, 0x1\n\ - bl sub_8003504\n\ -_080441B6:\n\ - movs r0, 0x80\n\ - lsls r0, 18\n\ - mov r1, sp\n\ - bl sub_80034D4\n\ - mov r0, r8\n\ - cmp r0, 0\n\ - beq _080441F0\n\ - ldr r1, _08044204 @ =gSprites\n\ - lsls r0, r7, 4\n\ - adds r0, r7\n\ - lsls r0, 2\n\ - adds r6, r0, r1\n\ - adds r7, r4, 0\n\ - ldr r5, _08044208 @ =0x02000020\n\ - mov r4, r8\n\ -_080441D6:\n\ - ldrh r0, [r6, 0x4]\n\ - lsls r0, 22\n\ - lsrs r0, 17\n\ - ldm r7!, {r1}\n\ - adds r1, r0\n\ - adds r0, r5, 0\n\ - ldr r2, _0804420C @ =REG_BG0CNT\n\ - bl CpuSet\n\ - adds r5, 0x40\n\ - subs r4, 0x1\n\ - cmp r4, 0\n\ - bne _080441D6\n\ -_080441F0:\n\ - add sp, 0x14\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080441FC: .4byte gUnknown_0820A85C\n\ -_08044200: .4byte gUnknown_0820A854\n\ -_08044204: .4byte gSprites\n\ -_08044208: .4byte 0x02000020\n\ -_0804420C: .4byte 0x04000008\n\ - .syntax divided\n"); -} -#endif - -static void sub_8044210(u8 a, s16 b, u8 c) -{ - u8 str[0x14]; - u8 *ptr; - void *const *r7; - int r10; - int r4; - int i; - - // TODO: make this a local variable - memcpy(str, gUnknown_0820A89C, sizeof(str)); - r4 = gSprites[a].data6; - if ((ewram17800[r4].unk0_4) == 0) - return; - ptr = str + 6; - if (c == 0) - { - r7 = gUnknown_0820A87C; - r10 = 6; - ptr = sub_8003504(ptr, b, 0x2B, 1); - *(ptr++) = CHAR_SLASH; - *(ptr++) = EOS; - } - else - { - r7 = gUnknown_0820A894; - r10 = 2; - sub_8003504(ptr, b, 0xF, 1); - if (GetBankSide(r4) == 0) - { - CpuCopy32(sub_8043CDC(0x74), (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x34) * 32), 32); - } - } - r4 = gSprites[a].data5; - sub_80034D4((u8 *)0x02000000, str); - for (i = 0; i < r10; i++) - { - CpuCopy32((void *)(0x02000020 + i * 0x40), r7[i] + gSprites[r4].oam.tileNum * 32, 0x20); - } -} - -#ifdef NONMATCHING -void sub_8044338(u8 a, struct Pokemon *pkmn) -{ - u8 str[0x14]; - u8 *r6; - s32 r8; - u8 nature; // = GetNature(pkmn); - s32 r7; - u8 i; - u8 r5; - - // TODO: make this a local variable - memcpy(str, gUnknown_0820A864, sizeof(str)); - r6 = ewram520[GetBankIdentity(gSprites[a].data6)].filler0; - r8 = 5; - nature = GetNature(pkmn); - StringCopy(str + 6, gNatureNames[nature]); - sub_80034D4(r6, str); - r7 = 6; - for (i = 0; i < (u32)r8; i++, r7++) //_080443AA - { - u8 val; - - if ((u8)(str[r7] - 0x37) <= 0x13 || (u8)(str[r7] + 0x79) <= 0x13) - val = 0x2C; - //_080443DC - else if ((u8)(str[r7] - 0x4B) <= 4 || (u8)(str[r7] + 0x65) <= 4) - val = 0x2D; - else - val = 0x2B; - - CpuCopy32(sub_8043CDC(val), r6 + i * 64, 32); - } - //r7 = 1; - //sp18 = a * 16; - for (r7 = 1; r7 < r8 + 1; r7++) - { - int foo; - - foo = gSprites[a].oam.tileNum + MACRO1(r7); - CpuCopy32(r6, (u8 *)0x06010000 + foo * 32, 32); - r6 += 32; - - foo = gSprites[a].oam.tileNum + 8 + MACRO1(r7); - CpuCopy32(r6, (u8 *)0x06010000 + foo * 32, 32); - r6 += 32; - } - //_08044486 - r5 = gSprites[a].data5; - ConvertIntToDecimalStringN(str + 6, ewram[0x16089], 1, 2); - ConvertIntToDecimalStringN(str + 9, ewram[0x16088], 1, 2); - str[5] = 0; - str[8] = 0xBA; - sub_80034D4((u8 *)0x02000000, str); - - for (r7 = 0; r7 < 5; r7++) - { - if (r7 <= 1) - { - int foo = (gSprites[r5].oam.tileNum + 2 + r7); - CpuCopy32((u8 *)0x02000020 + r7 * 0x40, (u8 *)0x06010000 + foo * 32, 32); - } - else - { - int foo = (r7 + gSprites[r5].oam.tileNum); - CpuCopy32((u8 *)0x02000020 + r7 * 0x40, (u8 *)0x060100C0 + foo * 32, 32); - } - } -} -#else -__attribute__((naked)) -void sub_8044338(u8 a, struct Pokemon *pkmn) -{ - 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, 0x20\n\ - adds r4, r1, 0\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x14]\n\ - ldr r1, _080443CC @ =gUnknown_0820A864\n\ - mov r0, sp\n\ - movs r2, 0x14\n\ - bl memcpy\n\ - ldr r1, _080443D0 @ =gSprites\n\ - ldr r2, [sp, 0x14]\n\ - lsls r0, r2, 4\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x3A]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - bl GetBankIdentity\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - lsls r1, r0, 1\n\ - adds r1, r0\n\ - lsls r1, 7\n\ - ldr r3, _080443D4 @ =0x02000520\n\ - adds r6, r1, r3\n\ - movs r0, 0x5\n\ - mov r8, r0\n\ - adds r0, r4, 0\n\ - bl GetNature\n\ - lsls r0, 24\n\ - mov r4, sp\n\ - adds r4, 0x6\n\ - ldr r1, _080443D8 @ =gNatureNames\n\ - lsrs r0, 22\n\ - adds r0, r1\n\ - ldr r1, [r0]\n\ - adds r0, r4, 0\n\ - bl StringCopy\n\ - adds r0, r6, 0\n\ - mov r1, sp\n\ - bl sub_80034D4\n\ - movs r7, 0x6\n\ - movs r5, 0\n\ - mov r1, sp\n\ - adds r1, 0x9\n\ - str r1, [sp, 0x1C]\n\ -_080443AA:\n\ - mov r2, sp\n\ - adds r0, r2, r7\n\ - ldrb r1, [r0]\n\ - adds r0, r1, 0\n\ - subs r0, 0x37\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x13\n\ - bls _080443C8\n\ - adds r0, r1, 0\n\ - adds r0, 0x79\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x13\n\ - bhi _080443DC\n\ -_080443C8:\n\ - movs r0, 0x2C\n\ - b _080443FA\n\ - .align 2, 0\n\ -_080443CC: .4byte gUnknown_0820A864\n\ -_080443D0: .4byte gSprites\n\ -_080443D4: .4byte 0x02000520\n\ -_080443D8: .4byte gNatureNames\n\ -_080443DC:\n\ - adds r0, r1, 0\n\ - subs r0, 0x4B\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x4\n\ - bls _080443F4\n\ - adds r0, r1, 0\n\ - adds r0, 0x65\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x4\n\ - bhi _080443F8\n\ -_080443F4:\n\ - movs r0, 0x2D\n\ - b _080443FA\n\ -_080443F8:\n\ - movs r0, 0x2B\n\ -_080443FA:\n\ - bl sub_8043CDC\n\ - lsls r1, r5, 6\n\ - adds r1, r6, r1\n\ - ldr r2, _080444F8 @ =REG_BG0CNT\n\ - bl CpuSet\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - adds r7, 0x1\n\ - cmp r5, r8\n\ - bcc _080443AA\n\ - movs r7, 0x1\n\ - ldr r3, [sp, 0x14]\n\ - lsls r3, 4\n\ - str r3, [sp, 0x18]\n\ - movs r0, 0x1\n\ - add r0, r8\n\ - mov r9, r0\n\ - cmp r7, r9\n\ - bge _08044486\n\ - ldr r1, _080444FC @ =gSprites\n\ - ldr r2, _080444F8 @ =REG_BG0CNT\n\ - mov r10, r2\n\ - ldr r2, [sp, 0x14]\n\ - adds r0, r3, r2\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - mov r8, r0\n\ -_08044436:\n\ - mov r3, r8\n\ - ldrh r0, [r3, 0x4]\n\ - lsls r0, 22\n\ - lsrs r0, 22\n\ - adds r5, r7, 0\n\ - cmp r7, 0\n\ - bge _08044446\n\ - adds r5, r7, 0x7\n\ -_08044446:\n\ - asrs r5, 3\n\ - lsls r4, r5, 3\n\ - subs r4, r7, r4\n\ - adds r0, r4\n\ - lsls r5, 6\n\ - adds r0, r5\n\ - lsls r0, 5\n\ - ldr r2, _08044500 @ =0x06010000\n\ - adds r1, r0, r2\n\ - adds r0, r6, 0\n\ - mov r2, r10\n\ - bl CpuSet\n\ - adds r6, 0x20\n\ - mov r3, r8\n\ - ldrh r0, [r3, 0x4]\n\ - lsls r0, 22\n\ - lsrs r0, 22\n\ - adds r4, 0x8\n\ - adds r0, r4\n\ - adds r0, r5\n\ - lsls r0, 5\n\ - ldr r2, _08044500 @ =0x06010000\n\ - adds r1, r0, r2\n\ - adds r0, r6, 0\n\ - mov r2, r10\n\ - bl CpuSet\n\ - adds r6, 0x20\n\ - adds r7, 0x1\n\ - cmp r7, r9\n\ - blt _08044436\n\ -_08044486:\n\ - ldr r6, _080444FC @ =gSprites\n\ - ldr r3, [sp, 0x18]\n\ - ldr r1, [sp, 0x14]\n\ - adds r0, r3, r1\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldrh r5, [r0, 0x38]\n\ - lsls r5, 24\n\ - lsrs r5, 24\n\ - ldr r4, _08044504 @ =0x02000000\n\ - ldr r2, _08044508 @ =0x00016089\n\ - adds r0, r4, r2\n\ - ldrb r1, [r0]\n\ - mov r0, sp\n\ - adds r0, 0x6\n\ - movs r2, 0x1\n\ - movs r3, 0x2\n\ - bl ConvertIntToDecimalStringN\n\ - ldr r3, _0804450C @ =0x00016088\n\ - adds r4, r3\n\ - ldrb r1, [r4]\n\ - ldr r0, [sp, 0x1C]\n\ - movs r2, 0x1\n\ - movs r3, 0x2\n\ - bl ConvertIntToDecimalStringN\n\ - mov r1, sp\n\ - movs r0, 0\n\ - strb r0, [r1, 0x5]\n\ - movs r0, 0xBA\n\ - strb r0, [r1, 0x8]\n\ - movs r0, 0x80\n\ - lsls r0, 18\n\ - bl sub_80034D4\n\ - movs r7, 0\n\ - lsls r0, r5, 4\n\ - adds r0, r5\n\ - lsls r0, 2\n\ - adds r5, r0, r6\n\ - ldr r4, _08044510 @ =0x02000020\n\ -_080444DA:\n\ - cmp r7, 0x1\n\ - bgt _08044514\n\ - ldrh r1, [r5, 0x4]\n\ - lsls r1, 22\n\ - lsrs r1, 22\n\ - adds r0, r7, 0x2\n\ - adds r1, r0\n\ - lsls r1, 5\n\ - ldr r0, _08044500 @ =0x06010000\n\ - adds r1, r0\n\ - adds r0, r4, 0\n\ - ldr r2, _080444F8 @ =REG_BG0CNT\n\ - bl CpuSet\n\ - b _0804452A\n\ - .align 2, 0\n\ -_080444F8: .4byte 0x04000008\n\ -_080444FC: .4byte gSprites\n\ -_08044500: .4byte 0x06010000\n\ -_08044504: .4byte 0x02000000\n\ -_08044508: .4byte 0x00016089\n\ -_0804450C: .4byte 0x00016088\n\ -_08044510: .4byte 0x02000020\n\ -_08044514:\n\ - ldrh r1, [r5, 0x4]\n\ - lsls r1, 22\n\ - lsrs r1, 22\n\ - adds r1, r7, r1\n\ - lsls r1, 5\n\ - ldr r2, _08044544 @ =0x060100c0\n\ - adds r1, r2\n\ - adds r0, r4, 0\n\ - ldr r2, _08044548 @ =REG_BG0CNT\n\ - bl CpuSet\n\ -_0804452A:\n\ - adds r4, 0x40\n\ - adds r7, 0x1\n\ - cmp r7, 0x4\n\ - ble _080444DA\n\ - add sp, 0x20\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\ -_08044544: .4byte 0x060100c0\n\ -_08044548: .4byte 0x04000008\n\ - .syntax divided\n"); -} -#endif - -void sub_804454C(void) -{ - s32 i; - u8 spriteId; - - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gSprites[gHealthboxIDs[i]].callback == SpriteCallbackDummy - && GetBankSide(i) != 1 - && (IsDoubleBattle() || GetBankSide(i) != 0)) - { - u8 r6; - - ewram17800[i].unk0_4 ^= 1; - r6 = ewram17800[i].unk0_4; - if (GetBankSide(i) == 0) - { - - if (!IsDoubleBattle()) - continue; - if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) - continue; - - if (r6 == 1) - { - spriteId = gSprites[gHealthboxIDs[i]].data5; - - CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32), 0x100); - sub_8044210(gHealthboxIDs[i], GetMonData(&gPlayerParty[gBattlePartyID[i]], MON_DATA_HP), 0); - sub_8044210(gHealthboxIDs[i], GetMonData(&gPlayerParty[gBattlePartyID[i]], MON_DATA_MAX_HP), 1); - } - else - { - draw_status_ailment_maybe(gHealthboxIDs[i]); - sub_8045A5C(gHealthboxIDs[i], &gPlayerParty[gBattlePartyID[i]], 5); - CpuCopy32(sub_8043CDC(0x75), (void *)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxIDs[i]].oam.tileNum * 32), 32); - } - } - else - { - if (r6 == 1) - { - if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) - { - sub_8044338(gHealthboxIDs[i], &gEnemyParty[gBattlePartyID[i]]); - } - else - { - spriteId = gSprites[gHealthboxIDs[i]].data5; - - CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32), 0x100); - sub_8044210(gHealthboxIDs[i], GetMonData(&gEnemyParty[gBattlePartyID[i]], MON_DATA_HP), 0); - sub_8044210(gHealthboxIDs[i], GetMonData(&gEnemyParty[gBattlePartyID[i]], MON_DATA_MAX_HP), 1); - } - } - else - { - draw_status_ailment_maybe(gHealthboxIDs[i]); - sub_8045A5C(gHealthboxIDs[i], &gEnemyParty[gBattlePartyID[i]], 5); - if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) - sub_8045A5C(gHealthboxIDs[i], &gEnemyParty[gBattlePartyID[i]], 4); - } - } - gSprites[gHealthboxIDs[i]].data7 ^= 1; - } - } -} - -// This function almost matches except for just two instructions around 0x08044B52 that are swapped. -#ifdef NONMATCHING -u8 sub_8044804(u8 a, const struct BattleInterfaceStruct2 *b, u8 c, u8 d) -{ - u8 r7; - s16 x; - s16 y; - s16 r8; - s16 r5; - - int i; - u8 sp[6]; - s8 sp14; - u8 sp18; - u8 taskId; - - if (c == 0 || GetBankIdentity(a) != 3) - { - if (GetBankSide(a) == 0) - { - r7 = 0; - x = 136; - y = 96; - r8 = 100; - r5 = -5; - } - else - { - r7 = 1; - if (c == 0 || !IsDoubleBattle()) - { - x = 104; - y = 40; - } - else - { - x = 104; - y = 16; - } - r8 = -100; - r5 = 5; - } - } - else - { - r7 = 1; - x = 104; - y = 40; - r8 = -100; - r5 = 5; - } - //_08044884 - - sp14 = 0; - for (i = 0; i < 6; i++) //_080448A0 - { - if (b[i].unk0 != 0xFFFF) - sp14++; - } - - LoadCompressedObjectPic(&gUnknown_0820A754[r7]); - LoadSpriteSheet(&gUnknown_0820A784[r7]); - LoadSpritePalette(&gUnknown_0820A764[r7]); - LoadSpritePalette(&gUnknown_0820A774[r7]); - - sp18 = CreateSprite(&gSpriteTemplate_820A7A4[r7], x, y, 10); - SetSubspriteTables(&gSprites[sp18], gSubspriteTables_820A6E4); - gSprites[sp18].pos2.x = r8; - gSprites[sp18].data0 = r5; - if (r7 != 0) - { - gSprites[sp18].pos1.x -= 96; - gSprites[sp18].oam.matrixNum = 8; - } - else - { - gSprites[sp18].pos1.x += 0x60; - } - //_0804495A - for (i = 0; i < 6; i++) //_08044970 - { - sp[i] = CreateSpriteAtEnd(&gSpriteTemplate_820A7D4[r7], x, y - 4, 9); - if (d == 0) - { - gSprites[sp[i]].callback = sub_8045180; - } - //_080449A0 - if (r7 == 0) - { - gSprites[sp[i]].pos2.x = 0; - gSprites[sp[i]].pos2.y = 0; - } - //_080449BE - gSprites[sp[i]].data0 = sp18; - if (r7 == 0) - { - gSprites[sp[i]].pos1.x += 10 * i + 24; - gSprites[sp[i]].data1 = i * 7 + 10; - gSprites[sp[i]].pos2.x = 120; - } - //_08044A18 - else - { - gSprites[sp[i]].pos1.x -= 10 * (5 - i) + 24; - gSprites[sp[i]].data1 = (6 - i) * 7 + 10; - gSprites[sp[i]].pos2.x = -120; - } - //_08044A56 - gSprites[sp[i]].data2 = r7; - } - //_08044A76 - if (GetBankSide(a) == 0) - { - for (i = 0; i < 6; i++) //_08044A9A - { - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) // && b[i] != 0xFFFF && b[i] - { - if (b[i].unk0 == 0xFFFF) - { - //_08044AE6 - gSprites[sp[i]].oam.tileNum += 1; - gSprites[sp[i]].data7 = 1; - // to _08044B52 - } - else if (b[i].unk0 == 0) - { - gSprites[sp[i]].oam.tileNum += 3; - // to _08044B46 - } - else if (b[i].unk4 != 0) - { - gSprites[sp[i]].oam.tileNum += 2; - } - } - //_08044ADC - else - { - if (i >= sp14) - { - //_08044AE6 - gSprites[sp[i]].oam.tileNum += 1; - gSprites[sp[i]].data7 = 1; - // to _08044B52 - } - else if (b[i].unk0 == 0) - { - //_08044B14 - gSprites[sp[i]].oam.tileNum += 3; - // to _08044B46 - } - else if (b[i].unk4 != 0) - { - gSprites[sp[i]].oam.tileNum += 2; - } - } - } - } - //_08044B5E - else - { - // Mismatch occurrs in this loop initialization - for (i = 0; i < 6; i++) - { - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - if (b[i].unk0 == 0xFFFF) - { - gSprites[sp[5 - i]].oam.tileNum += 1; - gSprites[sp[5 - i]].data7 = 1; - } - else if (b[i].unk0 == 0) - { - gSprites[sp[5 - i]].oam.tileNum += 3; - } - else if (b[i].unk4 != 0) - { - gSprites[sp[5 - i]].oam.tileNum += 2; - } - } - else - { - if (i >= sp14) - { - gSprites[sp[5 - i]].oam.tileNum += 1; - gSprites[sp[5 - i]].data7 = 1; - } - else if (b[i].unk0 == 0) - { - gSprites[sp[5 - i]].oam.tileNum += 3; - } - else if (b[i].unk4 != 0) - { - gSprites[sp[5 - i]].oam.tileNum += 2; - } - } - // This corrects the initialization order, but messes up the counter update order - asm(""::"r"(&b[i])); - } - } - //_08044C38 - taskId = CreateTask(TaskDummy, 5); - gTasks[taskId].data[0] = a; - gTasks[taskId].data[1] = sp18; - for (i = 0; i < 6; i++) - gTasks[taskId].data[3 + i] = sp[i]; - gTasks[taskId].data[10] = d; - PlaySE12WithPanning(SE_TB_START, 0); - return taskId; -} -#else -__attribute__((naked)) -u8 sub_8044804(u8 a, const struct BattleInterfaceStruct2 *b, u8 c, u8 d) -{ - 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\ - str r1, [sp, 0xC]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x8]\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - adds r4, r2, 0\n\ - lsls r3, 24\n\ - lsrs r3, 24\n\ - str r3, [sp, 0x10]\n\ - cmp r4, 0\n\ - beq _08044834\n\ - bl GetBankIdentity\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x3\n\ - beq _08044878\n\ -_08044834:\n\ - ldr r0, [sp, 0x8]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08044854\n\ - movs r7, 0\n\ - movs r1, 0x88\n\ - movs r2, 0x60\n\ - movs r0, 0x64\n\ - mov r8, r0\n\ - ldr r5, _08044850 @ =0x0000fffb\n\ - b _08044884\n\ - .align 2, 0\n\ -_08044850: .4byte 0x0000fffb\n\ -_08044854:\n\ - movs r7, 0x1\n\ - cmp r4, 0\n\ - beq _08044864\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0804486A\n\ -_08044864:\n\ - movs r1, 0x68\n\ - movs r2, 0x28\n\ - b _0804486E\n\ -_0804486A:\n\ - movs r1, 0x68\n\ - movs r2, 0x10\n\ -_0804486E:\n\ - ldr r3, _08044874 @ =0x0000ff9c\n\ - mov r8, r3\n\ - b _08044882\n\ - .align 2, 0\n\ -_08044874: .4byte 0x0000ff9c\n\ -_08044878:\n\ - movs r7, 0x1\n\ - movs r1, 0x68\n\ - movs r2, 0x28\n\ - ldr r5, _08044930 @ =0x0000ff9c\n\ - mov r8, r5\n\ -_08044882:\n\ - movs r5, 0x5\n\ -_08044884:\n\ - movs r6, 0\n\ - str r6, [sp, 0x14]\n\ - lsls r4, r7, 3\n\ - ldr r0, _08044934 @ =gUnknown_0820A754\n\ - mov r10, r0\n\ - lsls r3, r7, 1\n\ - mov r9, r3\n\ - lsls r1, 16\n\ - str r1, [sp, 0x20]\n\ - lsls r2, 16\n\ - str r2, [sp, 0x24]\n\ - ldr r2, _08044938 @ =0x0000ffff\n\ - ldr r1, [sp, 0xC]\n\ - movs r6, 0x5\n\ -_080448A0:\n\ - ldrh r0, [r1]\n\ - cmp r0, r2\n\ - beq _080448B4\n\ - ldr r3, [sp, 0x14]\n\ - lsls r0, r3, 24\n\ - movs r3, 0x80\n\ - lsls r3, 17\n\ - adds r0, r3\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x14]\n\ -_080448B4:\n\ - adds r1, 0x8\n\ - subs r6, 0x1\n\ - cmp r6, 0\n\ - bge _080448A0\n\ - mov r6, r10\n\ - adds r0, r4, r6\n\ - bl LoadCompressedObjectPic\n\ - ldr r0, _0804493C @ =gUnknown_0820A784\n\ - adds r0, r4, r0\n\ - bl LoadSpriteSheet\n\ - ldr r0, _08044940 @ =gUnknown_0820A764\n\ - adds r0, r4, r0\n\ - bl LoadSpritePalette\n\ - ldr r0, _08044944 @ =gUnknown_0820A774\n\ - adds r0, r4, r0\n\ - bl LoadSpritePalette\n\ - mov r1, r9\n\ - adds r0, r1, r7\n\ - lsls r0, 3\n\ - ldr r1, _08044948 @ =gSpriteTemplate_820A7A4\n\ - adds r0, r1\n\ - ldr r2, [sp, 0x20]\n\ - asrs r1, r2, 16\n\ - ldr r3, [sp, 0x24]\n\ - asrs r2, r3, 16\n\ - movs r3, 0xA\n\ - bl CreateSprite\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x18]\n\ - lsls r0, 4\n\ - ldr r6, [sp, 0x18]\n\ - adds r0, r6\n\ - lsls r0, 2\n\ - ldr r1, _0804494C @ =gSprites\n\ - adds r4, r0, r1\n\ - ldr r1, _08044950 @ =gSubspriteTables_820A6E4\n\ - adds r0, r4, 0\n\ - bl SetSubspriteTables\n\ - mov r0, r8\n\ - strh r0, [r4, 0x24]\n\ - strh r5, [r4, 0x2E]\n\ - cmp r7, 0\n\ - beq _08044954\n\ - ldrh r0, [r4, 0x20]\n\ - subs r0, 0x60\n\ - strh r0, [r4, 0x20]\n\ - ldrb r1, [r4, 0x3]\n\ - movs r0, 0x3F\n\ - negs r0, r0\n\ - ands r0, r1\n\ - movs r1, 0x10\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x3]\n\ - b _0804495A\n\ - .align 2, 0\n\ -_08044930: .4byte 0x0000ff9c\n\ -_08044934: .4byte gUnknown_0820A754\n\ -_08044938: .4byte 0x0000ffff\n\ -_0804493C: .4byte gUnknown_0820A784\n\ -_08044940: .4byte gUnknown_0820A764\n\ -_08044944: .4byte gUnknown_0820A774\n\ -_08044948: .4byte gSpriteTemplate_820A7A4\n\ -_0804494C: .4byte gSprites\n\ -_08044950: .4byte gSubspriteTables_820A6E4\n\ -_08044954:\n\ - ldrh r0, [r4, 0x20]\n\ - adds r0, 0x60\n\ - strh r0, [r4, 0x20]\n\ -_0804495A:\n\ - movs r6, 0\n\ - ldr r1, _08044A04 @ =gSprites\n\ - mov r10, r1\n\ - mov r4, sp\n\ - mov r2, r9\n\ - adds r0, r2, r7\n\ - lsls r0, 3\n\ - str r0, [sp, 0x1C]\n\ - movs r3, 0xA\n\ - mov r9, r3\n\ - mov r8, r6\n\ -_08044970:\n\ - ldr r0, _08044A08 @ =gSpriteTemplate_820A7D4\n\ - ldr r5, [sp, 0x24]\n\ - ldr r1, _08044A0C @ =0xfffc0000\n\ - adds r2, r5, r1\n\ - ldr r3, [sp, 0x1C]\n\ - adds r0, r3, r0\n\ - ldr r5, [sp, 0x20]\n\ - asrs r1, r5, 16\n\ - asrs r2, 16\n\ - movs r3, 0x9\n\ - bl CreateSpriteAtEnd\n\ - strb r0, [r4]\n\ - ldr r0, [sp, 0x10]\n\ - cmp r0, 0\n\ - bne _080449A0\n\ - ldrb r0, [r4]\n\ - lsls r1, r0, 4\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - ldr r2, _08044A10 @ =gSprites + 0x1C\n\ - adds r1, r2\n\ - ldr r0, _08044A14 @ =sub_8045180\n\ - str r0, [r1]\n\ -_080449A0:\n\ - ldr r5, _08044A04 @ =gSprites\n\ - cmp r7, 0\n\ - bne _080449BE\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - add r0, r10\n\ - strh r7, [r0, 0x24]\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - add r0, r10\n\ - strh r7, [r0, 0x26]\n\ -_080449BE:\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r5\n\ - movs r1, 0\n\ - mov r3, sp\n\ - ldrh r3, [r3, 0x18]\n\ - strh r3, [r0, 0x2E]\n\ - cmp r7, 0\n\ - bne _08044A18\n\ - ldrb r0, [r4]\n\ - lsls r1, r0, 4\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r5\n\ - ldrh r0, [r1, 0x20]\n\ - adds r0, 0x18\n\ - add r0, r8\n\ - strh r0, [r1, 0x20]\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r5\n\ - mov r1, r9\n\ - strh r1, [r0, 0x30]\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r5\n\ - movs r1, 0x78\n\ - b _08044A56\n\ - .align 2, 0\n\ -_08044A04: .4byte gSprites\n\ -_08044A08: .4byte gSpriteTemplate_820A7D4\n\ -_08044A0C: .4byte 0xfffc0000\n\ -_08044A10: .4byte gSprites + 0x1C\n\ -_08044A14: .4byte sub_8045180\n\ -_08044A18:\n\ - ldrb r0, [r4]\n\ - lsls r2, r0, 4\n\ - adds r2, r0\n\ - lsls r2, 2\n\ - adds r2, r5\n\ - ldrh r3, [r2, 0x20]\n\ - subs r3, 0x18\n\ - movs r1, 0x5\n\ - subs r1, r6\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 1\n\ - subs r3, r0\n\ - strh r3, [r2, 0x20]\n\ - ldrb r0, [r4]\n\ - lsls r2, r0, 4\n\ - adds r2, r0\n\ - lsls r2, 2\n\ - adds r2, r5\n\ - movs r1, 0x6\n\ - subs r1, r6\n\ - lsls r0, r1, 3\n\ - subs r0, r1\n\ - adds r0, 0xA\n\ - strh r0, [r2, 0x30]\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r5\n\ - ldr r1, _08044AC4 @ =0x0000ff88\n\ -_08044A56:\n\ - strh r1, [r0, 0x24]\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r5\n\ - strh r7, [r0, 0x32]\n\ - adds r4, 0x1\n\ - movs r2, 0x7\n\ - add r9, r2\n\ - movs r3, 0xA\n\ - add r8, r3\n\ - adds r6, 0x1\n\ - cmp r6, 0x5\n\ - bgt _08044A76\n\ - b _08044970\n\ -_08044A76:\n\ - ldr r0, [sp, 0x8]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08044B5E\n\ - movs r6, 0\n\ - ldr r5, _08044AC8 @ =gBattleTypeFlags\n\ - mov r10, r5\n\ - ldr r0, _08044ACC @ =0x0000ffff\n\ - mov r9, r0\n\ - ldr r7, _08044AD0 @ =gSprites\n\ - ldr r1, _08044AD4 @ =0x000003ff\n\ - mov r12, r1\n\ - ldr r2, _08044AD8 @ =0xfffffc00\n\ - mov r8, r2\n\ - mov r4, sp\n\ - ldr r5, [sp, 0xC]\n\ -_08044A9A:\n\ - mov r3, r10\n\ - ldrh r1, [r3]\n\ - movs r0, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08044ADC\n\ - ldrh r0, [r5]\n\ - cmp r0, r9\n\ - beq _08044AE6\n\ - cmp r0, 0\n\ - bne _08044B2E\n\ - ldrb r0, [r4]\n\ - lsls r2, r0, 4\n\ - adds r2, r0\n\ - lsls r2, 2\n\ - adds r2, r7\n\ - ldrh r3, [r2, 0x4]\n\ - lsls r1, r3, 22\n\ - lsrs r1, 22\n\ - adds r1, 0x3\n\ - b _08044B46\n\ - .align 2, 0\n\ -_08044AC4: .4byte 0x0000ff88\n\ -_08044AC8: .4byte gBattleTypeFlags\n\ -_08044ACC: .4byte 0x0000ffff\n\ -_08044AD0: .4byte gSprites\n\ -_08044AD4: .4byte 0x000003ff\n\ -_08044AD8: .4byte 0xfffffc00\n\ -_08044ADC:\n\ - ldr r1, [sp, 0x14]\n\ - lsls r0, r1, 24\n\ - asrs r0, 24\n\ - cmp r6, r0\n\ - blt _08044B14\n\ -_08044AE6:\n\ - ldrb r0, [r4]\n\ - lsls r2, r0, 4\n\ - adds r2, r0\n\ - lsls r2, 2\n\ - adds r2, r7\n\ - ldrh r3, [r2, 0x4]\n\ - lsls r1, r3, 22\n\ - lsrs r1, 22\n\ - adds r1, 0x1\n\ - mov r0, r12\n\ - ands r1, r0\n\ - mov r0, r8\n\ - ands r0, r3\n\ - orrs r0, r1\n\ - strh r0, [r2, 0x4]\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r7\n\ - movs r1, 0x1\n\ - strh r1, [r0, 0x3C]\n\ - b _08044B52\n\ -_08044B14:\n\ - ldrh r0, [r5]\n\ - cmp r0, 0\n\ - bne _08044B2E\n\ - ldrb r0, [r4]\n\ - lsls r2, r0, 4\n\ - adds r2, r0\n\ - lsls r2, 2\n\ - adds r2, r7\n\ - ldrh r3, [r2, 0x4]\n\ - lsls r1, r3, 22\n\ - lsrs r1, 22\n\ - adds r1, 0x3\n\ - b _08044B46\n\ -_08044B2E:\n\ - ldr r0, [r5, 0x4]\n\ - cmp r0, 0\n\ - beq _08044B52\n\ - ldrb r0, [r4]\n\ - lsls r2, r0, 4\n\ - adds r2, r0\n\ - lsls r2, 2\n\ - adds r2, r7\n\ - ldrh r3, [r2, 0x4]\n\ - lsls r1, r3, 22\n\ - lsrs r1, 22\n\ - adds r1, 0x2\n\ -_08044B46:\n\ - mov r0, r12\n\ - ands r1, r0\n\ - mov r0, r8\n\ - ands r0, r3\n\ - orrs r0, r1\n\ - strh r0, [r2, 0x4]\n\ -_08044B52:\n\ - adds r4, 0x1\n\ - adds r5, 0x8\n\ - adds r6, 0x1\n\ - cmp r6, 0x5\n\ - ble _08044A9A\n\ - b _08044C38\n\ -_08044B5E:\n\ - movs r6, 0\n\ - ldr r1, _08044BA4 @ =gBattleTypeFlags\n\ - mov r10, r1\n\ - ldr r2, _08044BA8 @ =0x0000ffff\n\ - mov r9, r2\n\ - ldr r7, _08044BAC @ =gSprites\n\ - ldr r3, _08044BB0 @ =0x000003ff\n\ - mov r12, r3\n\ - ldr r5, _08044BB4 @ =0xfffffc00\n\ - mov r8, r5\n\ - ldr r5, [sp, 0xC]\n\ - mov r4, sp\n\ - adds r4, 0x5\n\ -_08044B78:\n\ - mov r0, r10\n\ - ldrh r1, [r0]\n\ - movs r0, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08044BB8\n\ - ldrh r0, [r5]\n\ - cmp r0, r9\n\ - beq _08044BC2\n\ - cmp r0, 0\n\ - bne _08044C0A\n\ - ldrb r0, [r4]\n\ - lsls r2, r0, 4\n\ - adds r2, r0\n\ - lsls r2, 2\n\ - adds r2, r7\n\ - ldrh r3, [r2, 0x4]\n\ - lsls r1, r3, 22\n\ - lsrs r1, 22\n\ - adds r1, 0x3\n\ - b _08044C22\n\ - .align 2, 0\n\ -_08044BA4: .4byte gBattleTypeFlags\n\ -_08044BA8: .4byte 0x0000ffff\n\ -_08044BAC: .4byte gSprites\n\ -_08044BB0: .4byte 0x000003ff\n\ -_08044BB4: .4byte 0xfffffc00\n\ -_08044BB8:\n\ - ldr r1, [sp, 0x14]\n\ - lsls r0, r1, 24\n\ - asrs r0, 24\n\ - cmp r6, r0\n\ - blt _08044BF0\n\ -_08044BC2:\n\ - ldrb r0, [r4]\n\ - lsls r2, r0, 4\n\ - adds r2, r0\n\ - lsls r2, 2\n\ - adds r2, r7\n\ - ldrh r3, [r2, 0x4]\n\ - lsls r1, r3, 22\n\ - lsrs r1, 22\n\ - adds r1, 0x1\n\ - mov r0, r12\n\ - ands r1, r0\n\ - mov r0, r8\n\ - ands r0, r3\n\ - orrs r0, r1\n\ - strh r0, [r2, 0x4]\n\ - ldrb r1, [r4]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r7\n\ - movs r1, 0x1\n\ - strh r1, [r0, 0x3C]\n\ - b _08044C2E\n\ -_08044BF0:\n\ - ldrh r0, [r5]\n\ - cmp r0, 0\n\ - bne _08044C0A\n\ - ldrb r0, [r4]\n\ - lsls r2, r0, 4\n\ - adds r2, r0\n\ - lsls r2, 2\n\ - adds r2, r7\n\ - ldrh r3, [r2, 0x4]\n\ - lsls r1, r3, 22\n\ - lsrs r1, 22\n\ - adds r1, 0x3\n\ - b _08044C22\n\ -_08044C0A:\n\ - ldr r0, [r5, 0x4]\n\ - cmp r0, 0\n\ - beq _08044C2E\n\ - ldrb r0, [r4]\n\ - lsls r2, r0, 4\n\ - adds r2, r0\n\ - lsls r2, 2\n\ - adds r2, r7\n\ - ldrh r3, [r2, 0x4]\n\ - lsls r1, r3, 22\n\ - lsrs r1, 22\n\ - adds r1, 0x2\n\ -_08044C22:\n\ - mov r0, r12\n\ - ands r1, r0\n\ - mov r0, r8\n\ - ands r0, r3\n\ - orrs r0, r1\n\ - strh r0, [r2, 0x4]\n\ -_08044C2E:\n\ - subs r4, 0x1\n\ - adds r5, 0x8\n\ - adds r6, 0x1\n\ - cmp r6, 0x5\n\ - ble _08044B78\n\ -_08044C38:\n\ - ldr r0, _08044C98 @ =TaskDummy\n\ - movs r1, 0x5\n\ - bl CreateTask\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - ldr r2, _08044C9C @ =gTasks\n\ - lsls r3, r4, 2\n\ - adds r1, r3, r4\n\ - lsls r1, 3\n\ - adds r0, r1, r2\n\ - mov r5, sp\n\ - ldrh r5, [r5, 0x8]\n\ - strh r5, [r0, 0x8]\n\ - mov r6, sp\n\ - ldrh r6, [r6, 0x18]\n\ - strh r6, [r0, 0xA]\n\ - movs r6, 0\n\ - adds r0, r2, 0\n\ - adds r0, 0xE\n\ - adds r1, r0\n\ -_08044C62:\n\ - mov r5, sp\n\ - adds r0, r5, r6\n\ - ldrb r0, [r0]\n\ - strh r0, [r1]\n\ - adds r1, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x5\n\ - ble _08044C62\n\ - adds r0, r3, r4\n\ - lsls r0, 3\n\ - adds r0, r2\n\ - ldrh r6, [r5, 0x10]\n\ - strh r6, [r0, 0x1C]\n\ - movs r0, 0x72\n\ - movs r1, 0\n\ - bl PlaySE12WithPanning\n\ - adds r0, r4, 0\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\ -_08044C98: .4byte TaskDummy\n\ -_08044C9C: .4byte gTasks\n\ - .syntax divided\n"); -} -#endif - -void sub_8044CA0(u8 taskId) -{ - u8 sp[6]; - u8 r9; - u8 r10; - u8 sp8; - s32 i; - - r9 = gTasks[taskId].data[10]; - r10 = gTasks[taskId].data[1]; - sp8 = gTasks[taskId].data[0]; - for (i = 0; i < 6; i++) - sp[i] = gTasks[taskId].data[3 + i]; - - REG_BLDCNT = 0x3F40; - REG_BLDALPHA = 0x10; - gTasks[taskId].data[15] = 16; - for (i = 0; i < 6; i++) - gSprites[sp[i]].oam.objMode = 1; - gSprites[r10].oam.objMode = 1; - if (r9 != 0) - { - for (i = 0; i < 6; i++) - { - if (GetBankSide(sp8) != 0) - { - gSprites[sp[5 - i]].data1 = 7 * i; - gSprites[sp[5 - i]].data3 = 0; - gSprites[sp[5 - i]].data4 = 0; - gSprites[sp[5 - i]].callback = sub_8045110; - } - else - { - gSprites[sp[i]].data1 = 7 * i; - gSprites[sp[i]].data3 = 0; - gSprites[sp[i]].data4 = 0; - gSprites[sp[i]].callback = sub_8045110; - } - } - gSprites[r10].data0 /= 2; - gSprites[r10].data1 = 0; - gSprites[r10].callback = sub_8045048; - SetSubspriteTables(&gSprites[r10], gSubspriteTables_820A6EC); - gTasks[taskId].func = sub_8044E74; - } - else - { - gTasks[taskId].func = sub_8044F70; - } -} - -static void sub_8044E74(u8 taskId) -{ - u16 temp = gTasks[taskId].data[11]++; - - if ((temp & 1) == 0) - { - gTasks[taskId].data[15]--; - if (gTasks[taskId].data[15] < 0) - return; - REG_BLDALPHA = (gTasks[taskId].data[15]) | ((16 - gTasks[taskId].data[15]) << 8); - } - if (gTasks[taskId].data[15] == 0) - gTasks[taskId].func = sub_8044ECC; -} - -static void sub_8044ECC(u8 taskId) -{ - u8 sp[6]; - s32 i; - - gTasks[taskId].data[15]--; - if (gTasks[taskId].data[15] == -1) - { - u8 var = gTasks[taskId].data[1]; - - for (i = 0; i < 6; i++) - sp[i] = gTasks[taskId].data[3 + i]; - DestroySpriteAndFreeResources(&gSprites[var]); - DestroySpriteAndFreeResources(&gSprites[sp[0]]); - for (i = 1; i < 6; i++) - DestroySprite(&gSprites[sp[i]]); - } - else if (gTasks[taskId].data[15] == -3) - { - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - DestroyTask(taskId); - } -} - -static void sub_8044F70(u8 taskId) -{ - u8 sp[6]; - s32 i; - - gTasks[taskId].data[15]--; - // Same as above function except with this check. - if (gTasks[taskId].data[15] >= 0) - { - REG_BLDALPHA = (gTasks[taskId].data[15]) | ((16 - gTasks[taskId].data[15]) << 8); - } - else if (gTasks[taskId].data[15] == -1) - { - u8 var = gTasks[taskId].data[1]; - - for (i = 0; i < 6; i++) - sp[i] = gTasks[taskId].data[3 + i]; - DestroySpriteAndFreeResources(&gSprites[var]); - DestroySpriteAndFreeResources(&gSprites[sp[0]]); - for (i = 1; i < 6; i++) - DestroySprite(&gSprites[sp[i]]); - } - else if (gTasks[taskId].data[15] == -3) - { - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - DestroyTask(taskId); - } -} - -void sub_8045030(struct Sprite *sprite) -{ - if (sprite->pos2.x != 0) - sprite->pos2.x += sprite->data0; -} - -static void sub_8045048(struct Sprite *sprite) -{ - sprite->data1 += 32; - if (sprite->data0 > 0) - sprite->pos2.x += sprite->data1 >> 4; - else - sprite->pos2.x -= sprite->data1 >> 4; - sprite->data1 &= 0xF; -} - -void sub_804507C(struct Sprite *sprite) -{ - u8 r3; - u16 r2; - s8 pan; - - if (sprite->data1 > 0) - { - sprite->data1--; - return; - } - r3 = sprite->data2; - r2 = sprite->data3; - r2 += 56; - sprite->data3 = r2 & 0xFFF0; - if (r3 != 0) - { - sprite->pos2.x += r2 >> 4; - if (sprite->pos2.x > 0) - sprite->pos2.x = 0; - } - else - { - sprite->pos2.x -= r2 >> 4; - if (sprite->pos2.x < 0) - sprite->pos2.x = 0; - } - if (sprite->pos2.x == 0) - { - pan = 63; - if (r3 != 0) - pan = -64; - if (sprite->data7 != 0) - PlaySE2WithPanning(SE_TB_KARA, pan); - else - PlaySE1WithPanning(SE_TB_KON, pan); - sprite->callback = SpriteCallbackDummy; - } -} - -static void sub_8045110(struct Sprite *sprite) -{ - u8 r0; - u16 r2; - - if (sprite->data1 > 0) - { - sprite->data1--; - return; - } - r0 = sprite->data2; - r2 = sprite->data3; - r2 += 56; - sprite->data3 = r2 & 0xFFF0; - if (r0 != 0) - sprite->pos2.x += r2 >> 4; - else - sprite->pos2.x -= r2 >> 4; - if (sprite->pos2.x + sprite->pos1.x > 248 - || sprite->pos2.x + sprite->pos1.x < -8) - { - sprite->invisible = TRUE; - sprite->callback = SpriteCallbackDummy; - } -} - -void sub_8045180(struct Sprite *sprite) -{ - u8 spriteId = sprite->data0; - - sprite->pos2.x = gSprites[spriteId].pos2.x; - sprite->pos2.y = gSprites[spriteId].pos2.y; -} - -static void sub_80451A0(u8 a, struct Pokemon *pkmn) -{ - u8 nickname[POKEMON_NAME_LENGTH]; - u8 gender; - u16 species; - u8 language; - u8 *ptr; - s32 i; - s32 _7; - u8 *const *r1; - - StringCopy(gDisplayedStringBattle, gUnknown_0820A8B0); - GetMonData(pkmn, MON_DATA_NICKNAME, nickname); - StringGetEnd10(nickname); - ptr = StringCopy(gDisplayedStringBattle + 3, nickname); - ptr[0] = EXT_CTRL_CODE_BEGIN; - ptr[1] = 3; - ptr[2] = 2; - ptr[3] = EXT_CTRL_CODE_BEGIN; - ptr[4] = 1; - ptr += 5; - gender = GetMonGender(pkmn); - species = GetMonData(pkmn, MON_DATA_SPECIES); - language = GetMonData(pkmn, MON_DATA_LANGUAGE); - if (sub_8040D3C(species, nickname, language)) - gender = 100; - switch (gender) - { - default: - ptr[0] = 0xB; - ptr[1] = EOS; - ptr += 1; - break; - case MON_MALE: - ptr[0] = 0xB; - ptr[1] = CHAR_MALE; - ptr[2] = EOS; - ptr += 2; - break; - case MON_FEMALE: - ptr[0] = 0xA; - ptr[1] = CHAR_FEMALE; - ptr[2] = EOS; - ptr += 2; - break; - } - ptr[0] = EXT_CTRL_CODE_BEGIN; - ptr[1] = 0x13; - ptr[2] = 0x37; - ptr[3] = EOS; - ptr = (u8 *)0x02000520 + GetBankIdentity(gSprites[a].data6) * 0x180; - sub_80034D4(ptr, gDisplayedStringBattle); - - i = 0; - _7 = 7; - if (GetMonData(pkmn, MON_DATA_LANGUAGE) == 1 - && GetMonData(pkmn, MON_DATA_IS_EGG) == 0) - { - u8 *p = gDisplayedStringBattle; - - while (*p != EOS) - { - if (*p == EXT_CTRL_CODE_BEGIN) - { - p += GetExtCtrlCodeLength(p[1]) + 1; - } - else - { - u8 r0; - - if ((*p >= 0x37 && *p <= 0x4A) || (*p >= 0x87 && *p <= 0x9A)) - r0 = 0x2C; - else if ((*p >= 0x4B && *p <= 0x4F) || (*p >= 0x9B && *p <= 0x9F)) - r0 = 0x2D; - else - r0 = 0x2B; - - CpuCopy32(sub_8043CDC(r0), ptr + 0x40 * i, 32); - i++; - p++; - } - } - } - - for (; i < _7; i++) - CpuCopy32(sub_8043CDC(0x2B), ptr + 64 * i, 32); - - if (GetBankSide(gSprites[a].data6) == 0 && !IsDoubleBattle()) - { - r1 = (u8 *const *)gUnknown_0820A8B4; - for (i = 0; i < _7; i++) - { - u8 *r4 = r1[i]; - - r4 += gSprites[a].oam.tileNum * 32; - CpuCopy32(ptr, r4, 32); - ptr += 32; - - r4 += 0x100; - CpuCopy32(ptr, r4, 32); - ptr += 32; - } - } - else - { - if (GetBankSide(gSprites[a].data6) == 0) - r1 = (u8 *const *)gUnknown_0820A904; - else - r1 = (u8 *const *)gUnknown_0820A8DC; - for (i = 0; i < _7; i++) - { - u8 *r4 = r1[i]; - - r4 += gSprites[a].oam.tileNum * 32; - CpuCopy32(ptr, r4, 32); - ptr += 32; - - r4 += 0x100; - CpuCopy32(ptr, r4, 32); - ptr += 32; - } - } -} - -static void sub_8045458(u8 a, u8 b) -{ - u8 r4; - - if (gBattleTypeFlags & 0x200) - return; - if (gBattleTypeFlags & 8) - return; - - r4 = gSprites[a].data6; - if (GetBankSide(r4) != 0) - { - u16 species = GetMonData(&gEnemyParty[gBattlePartyID[r4]], MON_DATA_SPECIES); - if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(species), 1) != 0) - { - r4 = gSprites[a].data5; - if (b != 0) - CpuCopy32(sub_8043CDC(0x46), (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32), 32); - else - CpuFill32(0, (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32), 32); - } - } -} - -static void draw_status_ailment_maybe(u8 a) -{ - s32 r4; - s32 r4_2; - u8 r7; - u8 r10; - s16 r8; - const u8 *r6; - u8 r0; - s32 i; - - r7 = gSprites[a].data6; - r10 = gSprites[a].data5; - if (GetBankSide(r7) == 0) - { - r4 = GetMonData(&gPlayerParty[gBattlePartyID[r7]], MON_DATA_STATUS); - if (!IsDoubleBattle()) - r8 = 0x1A; - else - r8 = 0x12; - } - else - { - r4 = GetMonData(&gEnemyParty[gBattlePartyID[r7]], MON_DATA_STATUS); - r8 = 0x11; - } - if (r4 & 7) - { - r6 = sub_8043CDC(sub_80457E8(0x1B, r7)); - r0 = 2; - } - else if (r4 & 0x88) - { - r6 = sub_8043CDC(sub_80457E8(0x15, r7)); - r0 = 0; - } - else if (r4 & 0x10) - { - r6 = sub_8043CDC(sub_80457E8(0x21, r7)); - r0 = 4; - } - else if (r4 & 0x20) - { - r6 = sub_8043CDC(sub_80457E8(0x1E, r7)); - r0 = 3; - } - else if (r4 & 0x40) - { - r6 = sub_8043CDC(sub_80457E8(0x18, r7)); - r0 = 1; - } - else - { - r6 = sub_8043CDC(0x27); - - for (i = 0; i < 3; i++) - CpuCopy32(r6, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8 + i) * 32), 32); - - if (!ewram17800[r7].unk0_4) - CpuCopy32(sub_8043CDC(1), (void *)(OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32), 64); - - sub_8045458(a, 1); - return; - } - - r4_2 = gSprites[a].oam.paletteNum * 16; - r4_2 += r7 + 12; - // I don't like writing the array index like this, but I can't get it to match otherwise. - FillPalette(r0[gBattleInterfaceStatusIcons_DynPal], r4_2 + 0x100, 2); - CpuCopy16(gPlttBufferUnfaded + 0x100 + r4_2, (void *)(OBJ_PLTT + r4_2 * 2), 2); - CpuCopy32(r6, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8) * 32), 96); - if (IsDoubleBattle() == TRUE || GetBankSide(r7) == TRUE) - { - if (!ewram17800[r7].unk0_4) - { - CpuCopy32(sub_8043CDC(0), (void *)(OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32), 32); - CpuCopy32(sub_8043CDC(0x41), (void *)(OBJ_VRAM0 + (gSprites[r10].oam.tileNum + 1) * 32), 32); - } - } - sub_8045458(a, 0); -} - -static u8 sub_80457E8(u8 a, u8 b) -{ - u8 ret = a; - - switch (a) - { - case 21: - if (b == 0) - ret = 21; - else if (b == 1) - ret = 71; - else if (b == 2) - ret = 86; - else - ret = 101; - break; - case 24: - if (b == 0) - ret = 24; - else if (b == 1) - ret = 74; - else if (b == 2) - ret = 89; - else - ret = 104; - break; - case 27: - if (b == 0) - ret = 27; - else if (b == 1) - ret = 77; - else if (b == 2) - ret = 92; - else - ret = 107; - break; - case 30: - if (b == 0) - ret = 30; - else if (b == 1) - ret = 80; - else if (b == 2) - ret = 95; - else - ret = 110; - break; - case 33: - if (b == 0) - ret = 33; - else if (b == 1) - ret = 83; - else if (b == 2) - ret = 98; - else - ret = 113; - break; - } - return ret; -} - -static void sub_80458B0(u8 a) -{ - u8 *r6; - u8 r8; - u8 i; - s32 r7; - u8 *addr; - - r6 = (u8 *)0x02000520 + GetBankIdentity(gSprites[a].data6) * 0x180; - r8 = 7; - sub_80034D4(r6, BattleText_SafariBalls); - for (i = 0; i < r8; i++) - CpuCopy32(sub_8043CDC(0x2B), r6 + i * 64, 32); - for (r7 = 3; r7 < 3 + r8; r7++) - { - addr = (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + MACRO1(r7)) * 32); - CpuCopy32(r6, addr, 32); - r6 += 32; - - addr = (void *)(OBJ_VRAM0 + (8 + gSprites[a].oam.tileNum + MACRO1(r7)) * 32); - CpuCopy32(r6, addr, 32); - r6 += 32; - } - -} - -static void sub_8045998(u8 a) -{ - u8 *r7; - u8 status; - s32 r6; - s32 i; - - r7 = StringCopy(gDisplayedStringBattle, BattleText_SafariBallsLeft); - r7 = sub_8003504(r7, gNumSafariBalls, 10, 1); - StringAppend(r7, BattleText_HighlightRed); - status = GetBankIdentity(gSprites[a].data6); - r7 = (u8 *)0x02000520 + status * 0x180; - r6 = 5; - sub_80034D4(r7, gDisplayedStringBattle); - r7 = (u8 *)0x02000520 + status * 0x180 + 32; - for (i = 6; i < 6 + r6; i++) - { - CpuCopy32(r7, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x18 + MACRO1(i)) * 32), 32); - r7 += 64; - } -} - -void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c) -{ - u8 r10; - u32 maxhp; - u32 currhp; - - r10 = gSprites[a].data6; - if (GetBankSide(r10) == 0) - { - if (c == 3 || c == 0) - sub_8043FC0(a, GetMonData(pkmn, MON_DATA_LEVEL)); - if (c == 1 || c == 0) - sub_80440EC(a, GetMonData(pkmn, MON_DATA_HP), 0); - if (c == 2 || c == 0) - sub_80440EC(a, GetMonData(pkmn, MON_DATA_MAX_HP), 1); - if (c == 5 || c == 0) - { - load_gfxc_health_bar(0); - maxhp = GetMonData(pkmn, MON_DATA_MAX_HP); - currhp = GetMonData(pkmn, MON_DATA_HP); - sub_8043D84(r10, a, maxhp, currhp, 0); - sub_8045C78(r10, a, 0, 0); - } - if (!IsDoubleBattle() && (c == 6 || c == 0)) - { - u16 species; - u8 level; - u32 exp; - u32 var1; - u32 var2; - u32 currLevelExp; - - load_gfxc_health_bar(3); - species = GetMonData(pkmn, MON_DATA_SPECIES); - level = GetMonData(pkmn, MON_DATA_LEVEL); - exp = GetMonData(pkmn, MON_DATA_EXP); - currLevelExp = gExperienceTables[gBaseStats[species].growthRate][level]; - var1 = exp - currLevelExp; - var2 = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLevelExp; - sub_8043D84(r10, a, var2, var1, 0); - sub_8045C78(r10, a, 1, 0); - } - if (c == 4 || c == 0) - sub_80451A0(a, pkmn); - if (c == 9 || c == 0) - draw_status_ailment_maybe(a); - if (c == 10) - sub_80458B0(a); - if (c == 10 || c == 11) - sub_8045998(a); - } - else - { - if (c == 3 || c == 0) - sub_8043FC0(a, GetMonData(pkmn, MON_DATA_LEVEL)); - if (c == 5 || c == 0) - { - load_gfxc_health_bar(0); - maxhp = GetMonData(pkmn, MON_DATA_MAX_HP); - currhp = GetMonData(pkmn, MON_DATA_HP); - sub_8043D84(r10, a, maxhp, currhp, 0); - sub_8045C78(r10, a, 0, 0); - } - if (c == 4 || c == 0) - sub_80451A0(a, pkmn); - if (c == 9 || c == 0) - draw_status_ailment_maybe(a); - } -} - -s32 sub_8045C78(u8 a, u8 unused1, u8 c, u8 unused2) -{ - s32 r6; - - if (c == 0) - { - r6 = sub_8045F58(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, 6, 1); - } - else - { - u16 r5; - s32 r8; - - r5 = GetScaledExpFraction(ewram17850[a].unk8, ewram17850[a].unkC, ewram17850[a].unk4, 8); - if (r5 == 0) - r5 = 1; - r8 = ewram17850[a].unkC; - r5 = ABS(r8 / r5); - r6 = sub_8045F58(ewram17850[a].unk4, ewram17850[a].unk8, r8, &ewram17850[a].unk10, 8, r5); - } - if (c == 1 || (c == 0 && (!ewram17800[a].unk0_4))) - sub_8045D58(a, c); - if (r6 == -1) - ewram17850[a].unk10 = 0; - return r6; -} - -static void sub_8045D58(u8 a, u8 b) -{ - u8 sp8[7]; - u8 r0; - u8 r8; - u8 i; - - switch (b) - { - case 0: - r0 = sub_804602C(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, sp8, 6); - r8 = 3; - if (r0 <= 0x18) - { - r8 = 0x38; - if (r0 > 9) - r8 = 0x2F; - } - for (i = 0; i < 6; i++) - { - u8 r4 = gSprites[ewram17850[a].unk0].data5; - if (i < 2) - CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 2 + i) * 32), 32); - else - CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, (void *)(OBJ_VRAM0 + 64 + (i + gSprites[r4].oam.tileNum) * 32), 32); - } - break; - case 1: - sub_804602C(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, sp8, 8); - r0 = GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_LEVEL); - if (r0 == 100) - { - for (i = 0; i < 8; i++) - sp8[i] = 0; - } - for (i = 0; i < 8; i++) - { - if (i < 4) - CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, (void *)(OBJ_VRAM0 + (gSprites[ewram17850[a].unk0].oam.tileNum + 0x24 + i) * 32), 32); - else - CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, (void *)(OBJ_VRAM0 + 0xB80 + (i + gSprites[ewram17850[a].unk0].oam.tileNum) * 32), 32); - } - break; - } -} - -static int sub_8045F58(s32 a, s32 b, int c, int *d, u8 e, u16 f) -{ - u8 r2 = e << 3; - int r6; - int ret; - - if (*d == -32768) - { - if (a < r2) - *d = b << 8; - else - *d = b; - } - //_08045F8A - b -= c; - if (b < 0) - b = 0; - else if (b > a) - b = a; - if (a < r2) - { - int var = *d >> 8; - - r6 = *d; - if (b == var && (r6 & 0xFF) == 0) - return -1; - } - else - { - r6 = *d; - if (b == r6) - return -1; - } - //_08045FC4 - if (a < r2) - { - int r0 = (a << 8) / r2; - - if (c < 0) - { - *d = r6 + r0; - ret = *d >> 8; - if (ret >= b) - { - *d = b << 8; - ret = b; - } - } - //_08045FE2 - else - { - *d = r6 - r0; - ret = *d >> 8; - if ((*d & 0xFF) > 0) - ret++; - if (ret <= b) - { - *d = b << 8; - ret = b; - } - } - } - else - { - //_08045FFE - if (c < 0) - { - *d += f; - if (*d > b) - *d = b; - ret = *d; - } - //_08046010 - else - { - *d -= f; - if (*d < b) - *d = b; - ret = *d; - } - } - return ret; -} - -static u8 sub_804602C(int a, int b, int c, int *d, u8 *e, u8 f) -{ - s32 r5 = b - c; - u8 r3; - u8 i; - u8 r2; - - if (r5 < 0) - r5 = 0; - else if (r5 > a) - r5 = a; - r3 = f << 3; - for (i = 0; i < f; i++) - e[i] = 0; - if (a < r3) - r2 = *d * r3 / a >> 8; - else - r2 = *d * r3 / a; - r3 = r2; - if (r3 == 0 && r5 > 0) - { - e[0] = 1; - r3 = 1; - } - else - { - for (i = 0; i < f; i++) - { - if (r2 >= 8) - { - e[i] = 8; - } - else - { - e[i] = r2; - break; - } - r2 -= 8; - } - } - return r3; -} - -s16 sub_80460C8(struct BattleInterfaceStruct1 *a, int *b, void *c, int d) -{ - u16 r7; - s16 r1; - - r7 = sub_8045F58(a->unk0, a->unk4, a->unk8, b, 6, 1); - sub_8046128(a, b, c); - if (a->unk0 < 0x30) - r1 = *b >> 8; - else - r1 = *b; - do_nothing(a->unk0, r1, d); - return r7; -} - -static void sub_8046128(struct BattleInterfaceStruct1 *a, int *b, void *c) -{ - u8 sp8[6]; - u16 sp10[6]; - u8 i; - - sub_804602C(a->unk0, a->unk4, a->unk8, b, (u8 *)sp8, 6); - for (i = 0; i < 6; i++) - sp10[i] = (a->unkC_0 << 12) | (a->unk10 + sp8[i]); - CpuCopy16(sp10, c, sizeof(sp10)); -} - -static u8 GetScaledExpFraction(int a, int b, int c, u8 d) -{ - u8 r7 = d * 8; - int r5 = a - b; - s8 r4; - s8 r0; - s32 result; - - if (r5 < 0) - r5 = 0; - else if (r5 > c) - r5 = c; - - r4 = a * r7 / c; - r0 = r5 * r7 / c; - result = r4 - r0; - return ABS(result); -} - -u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale) -{ - u8 result = hp * scale / maxhp; - - if (result == 0 && hp > 0) - return 1; - return result; -} - -u8 GetHPBarLevel(s16 hp, s16 maxhp) -{ - int result; - - if (hp == maxhp) - result = 4; - else - { - u8 fraction = GetScaledHPFraction(hp, maxhp, 48); - if (fraction > 24) - result = 3; - else if (fraction > 9) - result = 2; - else if (fraction > 0) - result = 1; - else - result = 0; - } - return result; -} diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c deleted file mode 100644 index 73b847713..000000000 --- a/src/battle_party_menu.c +++ /dev/null @@ -1,756 +0,0 @@ -#include "global.h" -#include "battle_party_menu.h" -#include "battle.h" -#include "item_menu.h" -#include "item_use.h" -#include "main.h" -#include "menu.h" -#include "menu_helpers.h" -#include "palette.h" -#include "party_menu.h" -#include "pokemon.h" -#include "pokemon_summary_screen.h" -#include "rom_8077ABC.h" -#include "rom_8094928.h" -#include "songs.h" -#include "sound.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "text.h" - -extern u8 ewram[]; -#define UNK_201606C_ARRAY (ewram + 0x1606C) // lazy define but whatever. - -extern u8 IsLinkDoubleBattle(void); -extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *); -extern void LoadHeldItemIconGraphics(void); -extern void CreateHeldItemIcons_806DC34(); -extern u8 sub_806BD58(u8, u8); -extern void PartyMenuPrintMonsLevelOrStatus(void); -extern void PrintPartyMenuMonNicknames(void); -extern void PartyMenuTryPrintMonsHP(void); -extern void nullsub_13(void); -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); - -extern u8 gPlayerPartyCount; -extern u8 gNoOfAllBanks; -extern u16 gBattlePartyID[]; -extern u8 gBankInMenu; -extern u8 gUnknown_0202E8F4; -extern u8 gUnknown_0202E8F5; -extern u8 gUnknown_0202E8F6; -extern u8 gUnknown_02038470[3]; -extern u8 gUnknown_02038473; -extern u8 gUnknown_020384F0; -extern void (*gUnknown_03004AE4)(); //don't know types yet -extern struct PokemonStorage gPokemonStorage; -extern void nullsub_14(); - -void sub_8094C98(u8, u8); -u8 pokemon_order_func(u8); - -static void sub_8094998(u8[3], u8); -static void sub_8094A74(u8[3], u8, u32); -static void sub_8094D60(void); -static void Task_809527C(u8); -static void Task_80952B4(u8); -static void Task_80952E4(u8); -static void Task_8095330(u8); -static void Task_809538C(void); -static void Task_HandlePopupMenuInput(u8); -static void Task_BattlePartyMenuSummary(u8 taskId); -static void Task_BattlePartyMenuShift(u8 taskId); -static void Task_BattlePartyMenuCancel(u8 taskId); - -static const struct PartyMenuItem sBattlePartyMenuActions[] = -{ - {OtherText_Summary, Task_BattlePartyMenuSummary}, - {gOtherText_CancelNoTerminator, Task_BattlePartyMenuCancel}, - {OtherText_Shift, Task_BattlePartyMenuShift}, - {OtherText_SendOut, Task_BattlePartyMenuShift}, -}; -static const u8 Unknown_83B5FEC[] = {2, 0, 1}; //SHIFT, SUMMARY, CANCEL -static const u8 Unknown_83B5FEF[] = {3, 0, 1}; //SEND OUT, SUMMARY, CANCEL -static const u8 Unknown_83B5FF2[] = {0, 1}; //SUMMARY, CANCEL -static const struct PartyPopupMenu sBattlePartyPopupMenus[] = -{ - {ARRAY_COUNT(Unknown_83B5FEC), 9, Unknown_83B5FEC}, - {ARRAY_COUNT(Unknown_83B5FEF), 9, Unknown_83B5FEF}, - {ARRAY_COUNT(Unknown_83B5FF2), 9, Unknown_83B5FF2}, -}; - -void unref_sub_8094928(struct PokemonStorage *ptr) -{ - *ptr = gPokemonStorage; -} - -void unref_sub_8094940(struct PokemonStorage *ptr) -{ - gPokemonStorage = *ptr; -} - -void sub_8094958(void) -{ - sub_8094998(gUnknown_02038470, sub_803FBBC()); -} - -void sub_8094978(u8 arg1, u8 arg2) -{ - sub_8094A74((UNK_201606C_ARRAY) + arg1 * 3, arg2, arg1); -} - -static void sub_8094998(u8 arg[3], u8 player_number) -{ - int i; - u32 pos; - u8 temp[6]; - if (IsLinkDoubleBattle() == TRUE) - { - if (player_number) - { - *arg = 0x30; - arg[1] = 0x45; - arg[2] = 0x12; - } - else - { - *arg = 0x03; - arg[1] = 0x12; - arg[2] = 0x45; - } - } - else - { - if (!IsDoubleBattle()) - { - pos = 1; - *temp = gBattlePartyID[GetBankByPlayerAI(0)]; - for (i = 0; i <= 5; i++) - if (i != *temp) - temp[pos++] = i; - } - else - { - pos = 2; - *temp = gBattlePartyID[GetBankByPlayerAI(0)]; - temp[1] = gBattlePartyID[GetBankByPlayerAI(2)]; - for (i = 0; i <= 5; i++) - if ((i != *temp) && (i != temp[1])) - temp[pos++] = i; - } - for (i = 0; i <= 2; i++) - arg[i] = (temp[i << 1] << 4) | temp[(i << 1) + 1]; - } -} - -static void sub_8094A74(u8 arg[3], u8 player_number, u32 arg3) -{ - int i, j; - u8 temp[6]; - if (!GetBankSide(arg3)) - { - i = GetBankByPlayerAI(0); - j = GetBankByPlayerAI(2); - } - else - { - i = GetBankByPlayerAI(1); - j = GetBankByPlayerAI(3); - } - if (IsLinkDoubleBattle() == TRUE) - { - if (player_number) - { - *arg = 0x30; - arg[1] = 0x45; - arg[2] = 0x12; - } - else - { - *arg = 0x03; - arg[1] = 0x12; - arg[2] = 0x45; - } - } - else - { - if (!IsDoubleBattle()) - { - int pos = 1; - *temp = gBattlePartyID[i]; - for (i = 0; i <= 5; i++) - if (i != *temp) - temp[pos++] = i; - } - else - { - int pos = 2; - *temp = gBattlePartyID[i]; - temp[1] = gBattlePartyID[j]; - for (i = 0; i <= 5; i++) - if ((i != *temp) && (i != temp[1])) - temp[pos++] = i; - } - for (i = 0; i <= 2; i++) - arg[i] = (temp[i << 1] << 4) | temp[(i << 1) + 1]; - } -} - -void sub_8094B6C(u8 a, u8 b, u8 c) -{ - s32 i; - s32 j; - u8 temp[6]; - u8 r3; - u8 r7 = 0; - - if (IsLinkDoubleBattle()) - { - u8 *arr = ewram + 0x1606C + a * 3; - - for (i = 0, j = 0; i < 3; i++) - { - temp[j++] = arr[i] >> 4; - temp[j++] = arr[i] & 0xF; - } - r3 = temp[c]; - for (i = 0; i < 6; i++) - { - if (temp[i] == b) - { - r7 = temp[i]; - temp[i] = r3; - break; - } - } - if (i != 6) - { - temp[c] = r7; - - arr[0] = (temp[0] << 4) | temp[1]; - arr[1] = (temp[2] << 4) | temp[3]; - arr[2] = (temp[4] << 4) | temp[5]; - } - } -} - -u8 sub_8094C20(u8 a) -{ - u8 retVal; - u8 val = a & 1; - - a /= 2; - if (val) - retVal = gUnknown_02038470[a] & 0xF; - else - retVal = gUnknown_02038470[a] >> 4; - return retVal; -} - -void sub_8094C54(u8 a, u8 b) -{ - u8 val = a & 1; - - a /= 2; - if (val) - gUnknown_02038470[a] = (gUnknown_02038470[a] & 0xF0) | b; - else - gUnknown_02038470[a] = (gUnknown_02038470[a] & 0xF) | (b << 4); -} - -void sub_8094C98(u8 a, u8 b) -{ - u8 r4 = sub_8094C20(a); - u8 r1 = sub_8094C20(b); - - sub_8094C54(a, r1); - sub_8094C54(b, r4); -} - -u8 pokemon_order_func(u8 a) -{ - u8 i; - u8 r2; - - for (i = 0, r2 = 0; i < 3; i++) - { - if ((gUnknown_02038470[i] >> 4) == a) - return r2; - r2++; - if ((gUnknown_02038470[i] & 0xF) == a) - return r2; - r2++; - } - return 0; -} - -void pokemon_change_order(void) -{ - u8 i; - - memcpy(ewram1B000.unk0, gPlayerParty, sizeof(gPlayerParty)); - for (i = 0; i < 6; i++) - { - u8 n = pokemon_order_func(i); - - memcpy(&gPlayerParty[n], &ewram1B000.unk0[i], sizeof(struct Pokemon)); - } -} - -static void sub_8094D60(void) -{ - struct Pokemon temp[6]; - u8 i; - - memcpy(temp, gPlayerParty, sizeof(gPlayerParty)); - for (i = 0; i < 6; i++) - { - u8 n = sub_8094C20(i); - - memcpy(&gPlayerParty[n], &temp[i], sizeof(struct Pokemon)); - } -} - -void unref_sub_8094DB0(void) -{ - u8 i; - u8 r4; - - for (i = 1; i < 6; i++) - { - u8 n = sub_8094C20(i); - - if (GetMonData(&gPlayerParty[n], MON_DATA_SPECIES) != 0 - && GetMonData(&gPlayerParty[n], MON_DATA_HP) != 0) - { - r4 = sub_8094C20(0); - sub_8094C98(0, i); - sub_806E6F0(&gPlayerParty[r4], &gPlayerParty[n]); - break; - } - } -} - -void sub_8094E20(u8 a) -{ - gPaletteFade.bufferTransferDisabled = TRUE; - gUnknown_02038473 = a; - nullsub_14(); - pokemon_change_order(); - OpenPartyMenu(1, 0xFF); -} - -void sub_8094E4C(void) -{ - sub_8094E20(3); -} - -int SetUpBattlePartyMenu(void) -{ - switch (EWRAM_1B000.unk264) - //switch (ewram1B000.unk264[0]) - { - case 0: - //TODO: try to get rid of this duplicate code - if (IsLinkDoubleBattle() == TRUE) - { - if (EWRAM_1B000.unk266 != 6) - { - TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); - EWRAM_1B000.unk266++; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; - } - } - else - { - if (EWRAM_1B000.unk266 < 6) - { - TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); - EWRAM_1B000.unk266++; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; - } - } - break; - case 1: - LoadHeldItemIconGraphics(); - EWRAM_1B000.unk264++; - break; - case 2: - CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); - EWRAM_1B000.unk264++; - break; - case 3: - if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) == 1) - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; - } - else - EWRAM_1B000.unk266++; - break; - case 4: - PartyMenuPrintMonsLevelOrStatus(); - EWRAM_1B000.unk264++; - break; - case 5: - PrintPartyMenuMonNicknames(); - EWRAM_1B000.unk264++; - break; - case 6: - PartyMenuTryPrintMonsHP(); - EWRAM_1B000.unk264++; - break; - case 7: - nullsub_13(); - EWRAM_1B000.unk264++; - break; - case 8: - PartyMenuDrawHPBars(); - EWRAM_1B000.unk264++; - break; - case 9: - if (sub_806B58C(EWRAM_1B000.unk266) == 1) - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; - } - else - EWRAM_1B000.unk266++; - break; - case 10: - if (gUnknown_02038473 == 3) - { - if (GetItemEffectType(gScriptItemId) == 10) - ewram1B000.unk259 = 0xFF; - else - ewram1B000.unk259 = 3; - } - return TRUE; - } - return FALSE; -} - -static void sub_8095050(u8 a, u8 b) -{ - if (!GetMonData(&gPlayerParty[b], MON_DATA_IS_EGG)) - { - if (gUnknown_02038473 == 1) - { - gTasks[EWRAM_1B000.unk260].data[4] = 1; - gTasks[EWRAM_1B000.unk260].data[5] = 1; - } - else - { - gTasks[EWRAM_1B000.unk260].data[4] = 0; - gTasks[EWRAM_1B000.unk260].data[5] = 0; - } - } - else - { - gTasks[EWRAM_1B000.unk260].data[4] = 2; - gTasks[EWRAM_1B000.unk260].data[5] = 2; - } - sub_806E750(gTasks[a].data[4], sBattlePartyPopupMenus, sBattlePartyMenuActions, 0); -} - -void SetUpBattlePokemonMenu(u8 a) -{ - if (!gPaletteFade.active) - { - if (gUnknown_02038473 == 3 && GetItemEffectType(gScriptItemId) == 10) - { - gUnknown_03004AE4(a, gScriptItemId, Task_80952E4); - return; - } - - switch (sub_806BD80(a)) - { - case 1: - if (gUnknown_02038473 == 3) - { - if (GetMonData(&gPlayerParty[sub_806CA38(a)], MON_DATA_IS_EGG)) - PlaySE(SE_HAZURE); - else - { - sub_806D5A4(); - gUnknown_03004AE4(a, gScriptItemId, Task_80952E4); - } - } - else - { - PlaySE(SE_SELECT); - GetMonNickname(&gPlayerParty[sub_806CA38(a)], gStringVar1); - sub_8095050(a, sub_806CA38(a)); - SetTaskFuncWithFollowupFunc(a, Task_HandlePopupMenuInput, SetUpBattlePokemonMenu); - } - break; - case 2: - if (gUnknown_02038473 == 1) - PlaySE(SE_HAZURE); - else - { - PlaySE(SE_SELECT); - if (gUnknown_02038473 == 3) - { - gUnknown_0202E8F4 = 0; - gTasks[a].func = Task_80952E4; - } - else - { - gUnknown_0202E8F4 = 0; - gTasks[a].func = Task_809527C; - } - } - break; - } - } -} - -static void Task_809527C(u8 taskId) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = Task_80952B4; -} - -static void Task_80952B4(u8 taskId) -{ - if (!gPaletteFade.active) - { - sub_8094D60(); - DestroyTask(taskId); - SetMainCallback2(sub_802E414); - } -} - -static void Task_80952E4(u8 taskId) -{ - if (gUnknown_0202E8F4 != 0) - Task_809527C(taskId); - else - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = Task_8095330; - } -} - -static void Task_8095330(u8 taskId) -{ - if (!gPaletteFade.active) - { - sub_8094D60(); - DestroyTask(taskId); - sub_80A6DCC(); - } -} - -static void Task_809535C(void) -{ - gPaletteFade.bufferTransferDisabled = TRUE; - sub_806AF4C(1, 0xFF, SetUpBattlePokemonMenu, 5); - SetMainCallback2(Task_809538C); -} - -static void Task_809538C(void) -{ - do - { - if (sub_806B124() == 1) - { - sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0); - sub_806BF74(EWRAM_1B000.unk260, 0); - GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); - sub_8095050(EWRAM_1B000.unk260, gUnknown_020384F0); - SetTaskFuncWithFollowupFunc(EWRAM_1B000.unk260, Task_HandlePopupMenuInput, SetUpBattlePokemonMenu); - SetMainCallback2(sub_806AEDC); - return; - } - } while (sub_80F9344() != 1); -} - -static void Task_HandlePopupMenuInput(u8 taskId) -{ - TaskFunc func; - - if (!gPaletteFade.active) - { - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - MoveMenuCursor(-1); - return; - } - if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - MoveMenuCursor(1); - return; - } - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - func = PartyMenuGetPopupMenuFunc(gTasks[taskId].data[4], - sBattlePartyPopupMenus, - sBattlePartyMenuActions, - GetMenuCursorPos()); - func(taskId); - return; - } - if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - Task_BattlePartyMenuCancel(taskId); - return; - } - } -} - -static void Task_80954C0(u8 taskId) -{ - if (gUnknown_0202E8F6 == 0) - Task_BattlePartyMenuCancel(taskId); -} - -static void Task_ShowSummaryScreen(u8 taskId) -{ - u8 partySelection = sub_806CA38(taskId); - - if (!gPaletteFade.active) - { - DestroyTask(taskId); - EWRAM_1B000.unk262 = 1; - ShowPokemonSummaryScreen(gPlayerParty, partySelection, gPlayerPartyCount - 1, Task_809535C, 4); - } -} - -static void Task_BattlePartyMenuSummary(u8 taskId) -{ - sub_806CA38(taskId); //an unused variable was probably set with this. - gTasks[taskId].func = Task_ShowSummaryScreen; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); -} - -static void Task_BattlePartyMenuShift(u8 taskId) -{ - u8 partySelection; - u8 i; - u8 r4; - - sub_806E7D0(gTasks[taskId].data[4], sBattlePartyPopupMenus); - partySelection = sub_806CA38(taskId); - if (IsLinkDoubleBattle() == TRUE && (partySelection == 1 || partySelection == 4 || partySelection == 5)) - { - sub_806D5A4(); - StringCopy(gStringVar1, sub_8040D08()); - StringExpandPlaceholders(gStringVar4, gOtherText_CantSwitchPokeWithYours); - sub_806E834(gStringVar4, 0); - gTasks[taskId].func = Task_80954C0; - return; - } - if (GetMonData(&gPlayerParty[partySelection], MON_DATA_HP) == 0) - { - sub_806D5A4(); - GetMonNickname(&gPlayerParty[partySelection], gStringVar1); - StringExpandPlaceholders(gStringVar4, gOtherText_NoEnergyLeft); - sub_806E834(gStringVar4, 0); - gTasks[taskId].func = Task_80954C0; - return; - } - for (i = 0; i < gNoOfAllBanks; i++) - { - if (GetBankSide(i) == 0 - && sub_8094C20(partySelection) == gBattlePartyID[i]) - { - sub_806D5A4(); - GetMonNickname(&gPlayerParty[partySelection], gStringVar1); - StringExpandPlaceholders(gStringVar4, gOtherText_AlreadyBattle); - sub_806E834(gStringVar4, 0); - gTasks[taskId].func = Task_80954C0; - return; - } - } - if (GetMonData(&gPlayerParty[partySelection], MON_DATA_IS_EGG)) - { - sub_806D5A4(); - StringExpandPlaceholders(gStringVar4, gOtherText_EGGCantBattle); - sub_806E834(gStringVar4, 0); - gTasks[taskId].func = Task_80954C0; - return; - } - if (sub_8094C20(partySelection) == EWRAM_1609D) - { - sub_806D5A4(); - GetMonNickname(&gPlayerParty[partySelection], gStringVar1); - StringExpandPlaceholders(gStringVar4, gOtherText_AlreadySelected); - sub_806E834(gStringVar4, 0); - gTasks[taskId].func = Task_80954C0; - return; - } - if (gUnknown_02038473 == 4) - { - sub_806D5A4(); - sub_8040B8C(); - sub_806E834(gStringVar4, 0); - gTasks[taskId].func = Task_80954C0; - return; - } - if (gUnknown_02038473 == 2) - { - u8 r0; - u8 r4 = gBankInMenu; - - sub_806D5A4(); - r0 = pokemon_order_func(gBattlePartyID[r4]); - GetMonNickname(&gPlayerParty[r0], gStringVar1); - StringExpandPlaceholders(gStringVar4, gOtherText_CantBeSwitched); - sub_806E834(gStringVar4, 0); - gTasks[taskId].func = Task_80954C0; - return; - } - gUnknown_0202E8F5 = sub_8094C20(partySelection); - gUnknown_0202E8F4 = 1; - r4 = pokemon_order_func(gBattlePartyID[gBankInMenu]); - sub_8094C98(r4, partySelection); - sub_806E6F0(&gPlayerParty[r4], &gPlayerParty[partySelection]); - gTasks[taskId].func = Task_809527C; -} - -static void Task_BattlePartyMenuCancel(u8 taskId) -{ - HandleDestroyMenuCursors(); - sub_806E7D0(gTasks[taskId].data[4], sBattlePartyPopupMenus); - gTasks[taskId].data[4] = gTasks[taskId].data[5]; - sub_806D538(0, 0); - SwitchTaskToFollowupFunc(taskId); -} diff --git a/src/battle_records.c b/src/battle_records.c deleted file mode 100644 index 61dc09792..000000000 --- a/src/battle_records.c +++ /dev/null @@ -1,334 +0,0 @@ -#include "global.h" -#include "battle_records.h" -#include "game_stat.h" -#include "link.h" -#include "menu.h" -#include "rom4.h" -#include "string_util.h" -#include "strings2.h" -#include "trainer_card.h" - -extern struct LinkPlayerMapObject gLinkPlayerMapObjects[4]; -extern u8 gBattleOutcome; - -static void InitLinkBattleRecord(struct LinkBattleRecord *record) -{ - CpuFill16(0, record, sizeof(struct LinkBattleRecord)); - record->name[0] = 0xFF; - record->trainerId = 0; - record->wins = 0; - record->losses = 0; - record->draws = 0; -} - -static void InitLinkBattleRecords_(struct LinkBattleRecord *records) -{ - int i; - for (i = 0; i < 5; i++) - { - InitLinkBattleRecord(records + i); - } - SetGameStat(GAME_STAT_LINK_BATTLE_WINS, 0); - SetGameStat(GAME_STAT_LINK_BATTLE_LOSSES, 0); - SetGameStat(GAME_STAT_LINK_BATTLE_DRAWS, 0); -} - -static int GetLinkBattleRecordTotalBattles(struct LinkBattleRecord *record) -{ - return record->wins + record->losses + record->draws; -} - -static int FindLinkBattleRecord(struct LinkBattleRecord *records, u8 *name, u16 trainerId) -{ - int i; - - for (i = 0; i < 5; i++) - { - memcpy(gStringVar1, records[i].name, 7); - gStringVar1[7] = EOS; - if (!StringCompareWithoutExtCtrlCodes(gStringVar1, name) && records[i].trainerId == trainerId) - return i; - } - - return 5; -} - -static void SortLinkBattleRecords(struct LinkBattleRecord *records) -{ - int i, j; - - for (i = 4; i > 0; i--) - { - for (j = i - 1; j >= 0; j--) - { - int totalBattlesI = GetLinkBattleRecordTotalBattles(records + i); - int totalBattlesJ = GetLinkBattleRecordTotalBattles(records + j); - - if (totalBattlesI > totalBattlesJ) - { - struct LinkBattleRecord temp = *(records + i); - *(records + i) = *(records + j); - *(records + j) = temp; - } - } - } -} - -static void UpdateLinkBattleRecord(struct LinkBattleRecord *record, int battleOutcome) -{ - switch (battleOutcome) - { - case 1: - record->wins++; - if (record->wins > 9999) - record->wins = 9999; - break; - case 2: - record->losses++; - if (record->losses > 9999) - record->losses = 9999; - break; - case 3: - record->draws++; - if (record->draws > 9999) - record->draws = 9999; - break; - } -} - -static void UpdateLinkBattleGameStats(int battleOutcome) -{ - u8 stat; - - switch (battleOutcome) - { - case 1: - stat = GAME_STAT_LINK_BATTLE_WINS; - break; - case 2: - stat = GAME_STAT_LINK_BATTLE_LOSSES; - break; - case 3: - stat = GAME_STAT_LINK_BATTLE_DRAWS; - break; - default: - return; - } - - if (GetGameStat(stat) < 9999) - IncrementGameStat(stat); -} - -static void UpdateLinkBattleRecords_(struct LinkBattleRecord *records, u8 *name, u16 trainerId, int battleOutcome, u8 language) -{ - int index; - UpdateLinkBattleGameStats(battleOutcome); - SortLinkBattleRecords(records); - index = FindLinkBattleRecord(records, name, trainerId); - if (index == 5) - { - index = 4; - InitLinkBattleRecord(records + index); - if (language == LANGUAGE_JAPANESE) - { - records[index].name[0] = EXT_CTRL_CODE_BEGIN; - records[index].name[1] = 0x15; - StringCopyN(records[index].name + 2, name, 5); - } - else - { - StringCopyN(records[index].name, name, 7); - } - - // needed block to match - { - struct LinkBattleRecord *record = records + index; - record->trainerId = trainerId; - } - } - UpdateLinkBattleRecord(records + index, battleOutcome); - SortLinkBattleRecords(records); -} - -void InitLinkBattleRecords(void) -{ - InitLinkBattleRecords_(gSaveBlock1.linkBattleRecords); -} - -static void IncTrainerCardWins(int id) -{ - u16 *wins = &gTrainerCards[id].linkBattleWins; - (*wins)++; - if (*wins > 9999) - *wins = 9999; -} - -static void IncTrainerCardLosses(int id) -{ - u16 *losses = &gTrainerCards[id].linkBattleLosses; - (*losses)++; - if (*losses > 9999) - *losses = 9999; -} - -static void UpdateTrainerCardWinsLosses(int id) -{ - switch (gBattleOutcome) - { - case 1: - IncTrainerCardWins(id ^ 1); - IncTrainerCardLosses(id); - break; - case 2: - IncTrainerCardLosses(id ^ 1); - IncTrainerCardWins(id); - break; - } -} - -void UpdateLinkBattleRecords(int id) -{ - UpdateTrainerCardWinsLosses(id); - UpdateLinkBattleRecords_( - gSaveBlock1.linkBattleRecords, - gTrainerCards[id].playerName, - gTrainerCards[id].trainerId, - gBattleOutcome, - gLinkPlayers[gLinkPlayerMapObjects[id].linkPlayerId].language); -} - -static void PrintLinkBattleWinsLossesDraws(struct LinkBattleRecord *records) -{ - ConvertIntToDecimalStringN_DigitWidth6(gStringVar1, GetGameStat(GAME_STAT_LINK_BATTLE_WINS), STR_CONV_MODE_RIGHT_ALIGN, 4); - ConvertIntToDecimalStringN_DigitWidth6(gStringVar2, GetGameStat(GAME_STAT_LINK_BATTLE_LOSSES), STR_CONV_MODE_RIGHT_ALIGN, 4); - ConvertIntToDecimalStringN_DigitWidth6(gStringVar3, GetGameStat(GAME_STAT_LINK_BATTLE_DRAWS), STR_CONV_MODE_RIGHT_ALIGN, 4); - MenuPrint(gOtherText_WinRecord, 3, 3); -} - -static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y) -{ - if (!record->wins && !record->losses && !record->draws) - { - u8 buffer[16]; - buffer[0] = EXT_CTRL_CODE_BEGIN; - buffer[1] = 0x14; - buffer[2] = 6; - buffer[3] = EXT_CTRL_CODE_BEGIN; - buffer[4] = 0x11; - buffer[5] = 1; - StringCopy(buffer + 6, gOtherText_SevenDashes); - MenuPrint(buffer, 3, y); - StringCopy(buffer + 6, gOtherText_FourDashes); - MenuPrint(buffer, 11, y); - MenuPrint(buffer, 17, y); - MenuPrint(buffer, 23, y); - } - else - { - StringFillWithTerminator(gStringVar1, 8); - StringCopyN(gStringVar1, record->name, 7); - MenuPrint(gStringVar1, 3, y); - gStringVar1[0] = EXT_CTRL_CODE_BEGIN; - gStringVar1[1] = 0x14; - gStringVar1[2] = 6; - ConvertIntToDecimalStringN(gStringVar1 + 3, record->wins, STR_CONV_MODE_RIGHT_ALIGN, 4); - MenuPrint(gStringVar1, 11, y); - ConvertIntToDecimalStringN(gStringVar1 + 3, record->losses, STR_CONV_MODE_RIGHT_ALIGN, 4); - MenuPrint(gStringVar1, 17, y); - ConvertIntToDecimalStringN(gStringVar1 + 3, record->draws, STR_CONV_MODE_RIGHT_ALIGN, 4); - MenuPrint(gStringVar1, 23, y); - } -} - -void ShowLinkBattleRecords(void) { - s32 i; - MenuDrawTextWindow(1, 0, 28, 18); - sub_8072BD8((u8 *) gOtherText_BattleResults, 0, 1, 240); - - PrintLinkBattleWinsLossesDraws(gSaveBlock1.linkBattleRecords); -#if ENGLISH - MenuPrint(gOtherText_WinLoseDraw, 12, 6); -#elif GERMAN - MenuPrint_PixelCoords(gOtherText_WinLoseDraw, 88, 48, 1); -#endif - - for (i = 0; i < 5; i++) - { - PrintLinkBattleRecord(&gSaveBlock1.linkBattleRecords[i], 6 + (i + 1) * 2); - } -} - -static bool32 sub_8110494(u8 level) -{ - struct SaveBlock2_Sub *sb2sub = &gSaveBlock2.filler_A8; - - switch (sb2sub->var_4AE[level]) - { - case 0: - return FALSE; - case 1: - return FALSE; - case 2: - return TRUE; - case 4: - return FALSE; - case 3: - return TRUE; - case 5: - return FALSE; - case 6: - return TRUE; - default: - return FALSE; - } -} - -static void PrintWinStreak(const u8 *str, u16 streak, u8 left, u8 top) -{ - MenuPrint(str, left, top); - if (streak > 9999) - streak = 9999; - sub_8072C14(gStringVar1, streak, 24, 1); - MenuPrint(gOtherText_WinStreak, left + 7, top); -} - -static void PrintRecordWinStreak(u8 level, u8 left, u8 top) -{ - struct SaveBlock2_Sub *sb2sub = &gSaveBlock2.filler_A8; - u16 winStreak = sb2sub->recordWinStreak[level]; - PrintWinStreak(gOtherText_Record, winStreak, left, top); -} - -static u16 GetLastWinStreak(u8 level) -{ - u16 result = gSaveBlock2.filler_A8.winStreak[level]; - if (result > 9999) - result = 9999; - return result; -} - -static void PrintLastWinStreak(u8 level, u8 left, u8 top) -{ - u16 winStreak = GetLastWinStreak(level); - if (sub_8110494(level) == TRUE) - PrintWinStreak(gOtherText_Current, winStreak, left, top); - else - PrintWinStreak(gOtherText_Prev, winStreak, left, top); -} - -void ShowBattleTowerRecords(void) -{ - u16 i; - MenuDrawTextWindow(3, 1, 27, 17); - sub_8072BD8(gOtherText_BattleTowerResults, 3, 2, 0xC8); - MenuPrint(gOtherText_Lv50, 5, 6); - MenuPrint(gOtherText_Lv100, 5, 12); - for (i = 5; i < 26; i++) - { - sub_8071F60(CHAR_HYPHEN, i, 10); - } - PrintLastWinStreak(0, 10, 6); - PrintRecordWinStreak(0, 10, 8); - PrintLastWinStreak(1, 10, 12); - PrintRecordWinStreak(1, 10, 14); -} diff --git a/src/battle_setup.c b/src/battle_setup.c deleted file mode 100644 index 04674e739..000000000 --- a/src/battle_setup.c +++ /dev/null @@ -1,1416 +0,0 @@ -#include "global.h" -#include "battle_setup.h" -#include "battle.h" -#include "battle_transition.h" -#include "data2.h" -#include "event_data.h" -#include "field_control_avatar.h" -#include "field_fadetransition.h" -#include "field_map_obj_helpers.h" -#include "field_message_box.h" -#include "field_player_avatar.h" -#include "field_weather.h" -#include "fieldmap.h" -#include "fldeff_80C5CD4.h" -#include "main.h" -#include "map_constants.h" -#include "metatile_behavior.h" -#include "opponent_constants.h" -#include "palette.h" -#include "rng.h" -#include "rom4.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 "starter_choose.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "text.h" -#include "trainer.h" - -extern u16 gScriptResult; - -extern void (*gFieldCallback)(void); - -EWRAM_DATA u16 gTrainerBattleMode = 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; - -extern u16 gBattleTypeFlags; -extern u16 gScriptLastTalked; -extern u8 gBattleOutcome; - -extern struct MapObject gMapObjects[]; - -extern u8 gUnknown_0819F818[]; -extern u8 gUnknown_0819F840[]; -extern u8 gUnknown_0819F878[]; -extern u8 gUnknown_0819F887[]; -extern u8 gUnknown_0819F8AE[]; - -extern u8 gUnknown_0819F80B[]; -extern u8 gUnknown_081C6C02[]; - - -static const u8 gBattleTransitionTable_Wild[][2] = -{ - {8, 9}, - {5, 10}, - {0, 10}, - {7, 6}, -}; -static const u8 gBattleTransitionTable_Trainer[][2] = -{ - {4, 11}, - {2, 3}, - {0, 10}, - {1, 6}, -}; -static const struct TrainerBattleSpec gTrainerBattleSpecs_0[] = -{ - {&gTrainerBattleMode, 0}, - {&gTrainerBattleOpponent, 1}, - {&gTrainerMapObjectLocalId, 1}, - {&gTrainerIntroSpeech, 2}, - {&gTrainerDefeatSpeech, 2}, - {&gTrainerVictorySpeech, 5}, - {&gTrainerCannotBattleSpeech, 5}, - {&gTrainerBattleEndScript, 5}, - {&gTrainerBattleScriptReturnAddress, 6}, -}; -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 TrainerBattleSpec gTrainerBattleSpecs_2[] = -{ - {&gTrainerBattleMode, 0}, - {&gTrainerBattleOpponent, 1}, - {&gTrainerMapObjectLocalId, 1}, - {&gTrainerIntroSpeech, 2}, - {&gTrainerDefeatSpeech, 2}, - {&gTrainerVictorySpeech, 5}, - {&gTrainerCannotBattleSpeech, 2}, - {&gTrainerBattleEndScript, 5}, - {&gTrainerBattleScriptReturnAddress, 6}, -}; -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 TrainerBattleSpec gTrainerBattleSpecs_4[] = -{ - {&gTrainerBattleMode, 0}, - {&gTrainerBattleOpponent, 1}, - {&gTrainerMapObjectLocalId, 1}, - {&gTrainerIntroSpeech, 2}, - {&gTrainerDefeatSpeech, 2}, - {&gTrainerVictorySpeech, 5}, - {&gTrainerCannotBattleSpeech, 2}, - {&gTrainerBattleEndScript, 2}, - {&gTrainerBattleScriptReturnAddress, 6}, -}; - -const struct TrainerEyeTrainer gTrainerEyeTrainers[] = -{ - { - {OPPONENT_ROSE_1, OPPONENT_ROSE_2, OPPONENT_ROSE_3, OPPONENT_ROSE_4, OPPONENT_ROSE_5}, - MAP_GROUP_ROUTE118, - MAP_ID_ROUTE118, - }, - { - {OPPONENT_DUSTY_1, OPPONENT_DUSTY_2, OPPONENT_DUSTY_3, OPPONENT_DUSTY_4, OPPONENT_DUSTY_5}, - MAP_GROUP_ROUTE111, - MAP_ID_ROUTE111, - }, - { - {OPPONENT_LOLA_1, OPPONENT_LOLA_2, OPPONENT_LOLA_3, OPPONENT_LOLA_4, OPPONENT_LOLA_5}, - MAP_GROUP_ROUTE109, - MAP_ID_ROUTE109, - }, - { - {OPPONENT_RICKY_1, OPPONENT_RICKY_2, OPPONENT_RICKY_3, OPPONENT_RICKY_4, OPPONENT_RICKY_5}, - MAP_GROUP_ROUTE109, - MAP_ID_ROUTE109, - }, - { - {OPPONENT_RITA_AND_SAM_1, OPPONENT_RITA_AND_SAM_2, OPPONENT_RITA_AND_SAM_3, OPPONENT_RITA_AND_SAM_4, OPPONENT_RITA_AND_SAM_5}, - MAP_GROUP_ROUTE124, - MAP_ID_ROUTE124, - }, - { - {OPPONENT_BROOKE_1, OPPONENT_BROOKE_2, OPPONENT_BROOKE_3, OPPONENT_BROOKE_4, OPPONENT_BROOKE_5}, - MAP_GROUP_ROUTE111, - MAP_ID_ROUTE111, - }, - { - {OPPONENT_WILTON_1, OPPONENT_WILTON_2, OPPONENT_WILTON_3, OPPONENT_WILTON_4, OPPONENT_WILTON_5}, - MAP_GROUP_ROUTE111, - MAP_ID_ROUTE111, - }, - { - {OPPONENT_VALERIE_1, OPPONENT_VALERIE_2, OPPONENT_VALERIE_3, OPPONENT_VALERIE_4, OPPONENT_VALERIE_5}, - MAP_GROUP_MT_PYRE_6F, - MAP_ID_MT_PYRE_6F, - }, - { - {OPPONENT_CINDY_1, OPPONENT_CINDY_3, OPPONENT_CINDY_4, OPPONENT_CINDY_5, OPPONENT_CINDY_6}, - MAP_GROUP_ROUTE104, - MAP_ID_ROUTE104, - }, - { - {OPPONENT_JESSICA_1, OPPONENT_JESSICA_2, OPPONENT_JESSICA_3, OPPONENT_JESSICA_4, OPPONENT_JESSICA_5}, - MAP_GROUP_ROUTE121, - MAP_ID_ROUTE121, - }, - { - {OPPONENT_WINSTON_1, OPPONENT_WINSTON_2, OPPONENT_WINSTON_3, OPPONENT_WINSTON_4, OPPONENT_WINSTON_5}, - MAP_GROUP_ROUTE104, - MAP_ID_ROUTE104, - }, - { - {OPPONENT_STEVE_1, OPPONENT_STEVE_2, OPPONENT_STEVE_3, OPPONENT_STEVE_4, OPPONENT_STEVE_5}, - MAP_GROUP_ROUTE114, - MAP_ID_ROUTE114, - }, - { - {OPPONENT_TONY_1, OPPONENT_TONY_2, OPPONENT_TONY_3, OPPONENT_TONY_4, OPPONENT_TONY_5}, - MAP_GROUP_ROUTE107, - MAP_ID_ROUTE107, - }, - { - {OPPONENT_NOB_1, OPPONENT_NOB_2, OPPONENT_NOB_3, OPPONENT_NOB_4, OPPONENT_NOB_5}, - MAP_GROUP_ROUTE115, - MAP_ID_ROUTE115, - }, - { - {OPPONENT_DALTON_1, OPPONENT_DALTON_2, OPPONENT_DALTON_3, OPPONENT_DALTON_4, OPPONENT_DALTON_5}, - MAP_GROUP_ROUTE118, - MAP_ID_ROUTE118, - }, - { - {OPPONENT_BERNIE_1, OPPONENT_BERNIE_2, OPPONENT_BERNIE_3, OPPONENT_BERNIE_4, OPPONENT_BERNIE_5}, - MAP_GROUP_ROUTE114, - MAP_ID_ROUTE114, - }, - { - {OPPONENT_ETHAN_1, OPPONENT_ETHAN_2, OPPONENT_ETHAN_3, OPPONENT_ETHAN_4, OPPONENT_ETHAN_5}, - MAP_GROUP_JAGGED_PASS, - MAP_ID_JAGGED_PASS, - }, - { - {OPPONENT_JOHN_AND_JAY_1, OPPONENT_JOHN_AND_JAY_2, OPPONENT_JOHN_AND_JAY_3, OPPONENT_JOHN_AND_JAY_4, OPPONENT_JOHN_AND_JAY_5}, - MAP_GROUP_METEOR_FALLS_1F_2R, - MAP_ID_METEOR_FALLS_1F_2R, - }, - { - {OPPONENT_BRANDON_1, OPPONENT_BRANDON_2, OPPONENT_BRANDON_3, OPPONENT_BRANDON_4, OPPONENT_BRANDON_5}, - MAP_GROUP_ROUTE120, - MAP_ID_ROUTE120, - }, - { - {OPPONENT_CAMERON_1, OPPONENT_CAMERON_2, OPPONENT_CAMERON_3, OPPONENT_CAMERON_4, OPPONENT_CAMERON_5}, - MAP_GROUP_ROUTE123, - MAP_ID_ROUTE123, - }, - { - {OPPONENT_JACKI_1, OPPONENT_JACKI_2, OPPONENT_JACKI_3, OPPONENT_JACKI_4, OPPONENT_JACKI_5}, - MAP_GROUP_ROUTE123, - MAP_ID_ROUTE123, - }, - { - {OPPONENT_WALTER_1, OPPONENT_WALTER_2, OPPONENT_WALTER_3, OPPONENT_WALTER_4, OPPONENT_WALTER_5}, - MAP_GROUP_ROUTE121, - MAP_ID_ROUTE121, - }, - { - {OPPONENT_KAREN_1, OPPONENT_KAREN_2, OPPONENT_KAREN_3, OPPONENT_KAREN_4, OPPONENT_KAREN_5}, - MAP_GROUP_ROUTE116, - MAP_ID_ROUTE116, - }, - { - {OPPONENT_JERRY_1, OPPONENT_JERRY_2, OPPONENT_JERRY_3, OPPONENT_JERRY_4, OPPONENT_JERRY_5}, - MAP_GROUP_ROUTE116, - MAP_ID_ROUTE116, - }, - { - {OPPONENT_ANNA_AND_MEG_1, OPPONENT_ANNA_AND_MEG_2, OPPONENT_ANNA_AND_MEG_3, OPPONENT_ANNA_AND_MEG_4, OPPONENT_ANNA_AND_MEG_5}, - MAP_GROUP_ROUTE117, - MAP_ID_ROUTE117, - }, - { - {OPPONENT_ISABEL_1, OPPONENT_ISABEL_2, OPPONENT_ISABEL_3, OPPONENT_ISABEL_4, OPPONENT_ISABEL_5}, - MAP_GROUP_ROUTE110, - MAP_ID_ROUTE110, - }, - { - {OPPONENT_MIGUEL_1, OPPONENT_MIGUEL_2, OPPONENT_MIGUEL_3, OPPONENT_MIGUEL_4, OPPONENT_MIGUEL_5}, - MAP_GROUP_ROUTE103, - MAP_ID_ROUTE103, - }, - { - {OPPONENT_TIMOTHY_1, OPPONENT_TIMOTHY_2, OPPONENT_TIMOTHY_3, OPPONENT_TIMOTHY_4, OPPONENT_TIMOTHY_5}, - MAP_GROUP_ROUTE115, - MAP_ID_ROUTE115, - }, - { - {OPPONENT_SHELBY_1, OPPONENT_SHELBY_2, OPPONENT_SHELBY_3, OPPONENT_SHELBY_4, OPPONENT_SHELBY_5}, - MAP_GROUP_MT_CHIMNEY, - MAP_ID_MT_CHIMNEY, - }, - { - {OPPONENT_CALVIN_1, OPPONENT_CALVIN_2, OPPONENT_CALVIN_3, OPPONENT_CALVIN_4, OPPONENT_CALVIN_5}, - MAP_GROUP_ROUTE102, - MAP_ID_ROUTE102, - }, - { - {OPPONENT_ELLIOT_1, OPPONENT_ELLIOT_2, OPPONENT_ELLIOT_3, OPPONENT_ELLIOT_4, OPPONENT_ELLIOT_5}, - MAP_GROUP_ROUTE106, - MAP_ID_ROUTE106, - }, - { - {OPPONENT_ABIGAIL_1, OPPONENT_ABIGAIL_2, OPPONENT_ABIGAIL_3, OPPONENT_ABIGAIL_4, OPPONENT_ABIGAIL_5}, - MAP_GROUP_ROUTE110, - MAP_ID_ROUTE110, - }, - { - {OPPONENT_BENJAMIN_1, OPPONENT_BENJAMIN_2, OPPONENT_BENJAMIN_3, OPPONENT_BENJAMIN_4, OPPONENT_BENJAMIN_5}, - MAP_GROUP_ROUTE110, - MAP_ID_ROUTE110, - }, - { - {OPPONENT_ISAIAH_1, OPPONENT_ISAIAH_2, OPPONENT_ISAIAH_3, OPPONENT_ISAIAH_4, OPPONENT_ISAIAH_5}, - MAP_GROUP_ROUTE128, - MAP_ID_ROUTE128, - }, - { - {OPPONENT_KATELYN_1, OPPONENT_KATELYN_2, OPPONENT_KATELYN_3, OPPONENT_KATELYN_4, OPPONENT_KATELYN_5}, - MAP_GROUP_ROUTE128, - MAP_ID_ROUTE128, - }, - { - {OPPONENT_MARIA_1, OPPONENT_MARIA_2, OPPONENT_MARIA_3, OPPONENT_MARIA_4, OPPONENT_MARIA_5}, - MAP_GROUP_ROUTE117, - MAP_ID_ROUTE117, - }, - { - {OPPONENT_DYLAN_1, OPPONENT_DYLAN_2, OPPONENT_DYLAN_3, OPPONENT_DYLAN_4, OPPONENT_DYLAN_5}, - MAP_GROUP_ROUTE117, - MAP_ID_ROUTE117, - }, - { - {OPPONENT_NICOLAS_1, OPPONENT_NICOLAS_2, OPPONENT_NICOLAS_3, OPPONENT_NICOLAS_4, OPPONENT_NICOLAS_5}, - MAP_GROUP_METEOR_FALLS_1F_2R, - MAP_ID_METEOR_FALLS_1F_2R, - }, - { - {OPPONENT_ROBERT_1, OPPONENT_ROBERT_2, OPPONENT_ROBERT_3, OPPONENT_ROBERT_4, OPPONENT_ROBERT_5}, - MAP_GROUP_ROUTE120, - MAP_ID_ROUTE120, - }, - { - {OPPONENT_LAO_1, OPPONENT_LAO_2, OPPONENT_LAO_3, OPPONENT_LAO_4, OPPONENT_LAO_5}, - MAP_GROUP_ROUTE113, - MAP_ID_ROUTE113, - }, - { - {OPPONENT_CYNDY_1, OPPONENT_CYNDY_2, OPPONENT_CYNDY_3, OPPONENT_CYNDY_4, OPPONENT_CYNDY_5}, - MAP_GROUP_ROUTE115, - MAP_ID_ROUTE115, - }, - { - {OPPONENT_MADELINE_1, OPPONENT_MADELINE_2, OPPONENT_MADELINE_3, OPPONENT_MADELINE_4, OPPONENT_MADELINE_5}, - MAP_GROUP_ROUTE113, - MAP_ID_ROUTE113, - }, - { - {OPPONENT_JENNY_1, OPPONENT_JENNY_2, OPPONENT_JENNY_3, OPPONENT_JENNY_4, OPPONENT_JENNY_5}, - MAP_GROUP_ROUTE124, - MAP_ID_ROUTE124, - }, - { - {OPPONENT_DIANA_1, OPPONENT_DIANA_2, OPPONENT_DIANA_3, OPPONENT_DIANA_4, OPPONENT_DIANA_5}, - MAP_GROUP_JAGGED_PASS, - MAP_ID_JAGGED_PASS, - }, - { - {OPPONENT_AMY_AND_LIV_1, OPPONENT_AMY_AND_LIV_2, OPPONENT_AMY_AND_LIV_4, OPPONENT_AMY_AND_LIV_5, OPPONENT_AMY_AND_LIV_6}, - MAP_GROUP_ROUTE103, - MAP_ID_ROUTE103, - }, - { - {OPPONENT_ERNEST_1, OPPONENT_ERNEST_2, OPPONENT_ERNEST_3, OPPONENT_ERNEST_4, OPPONENT_ERNEST_5}, - MAP_GROUP_ROUTE125, - MAP_ID_ROUTE125, - }, - { - {OPPONENT_EDWIN_1, OPPONENT_EDWIN_2, OPPONENT_EDWIN_3, OPPONENT_EDWIN_4, OPPONENT_EDWIN_5}, - MAP_GROUP_ROUTE110, - MAP_ID_ROUTE110, - }, - { - {OPPONENT_LYDIA_1, OPPONENT_LYDIA_2, OPPONENT_LYDIA_3, OPPONENT_LYDIA_4, OPPONENT_LYDIA_5}, - MAP_GROUP_ROUTE117, - MAP_ID_ROUTE117, - }, - { - {OPPONENT_ISAAC_1, OPPONENT_ISAAC_2, OPPONENT_ISAAC_3, OPPONENT_ISAAC_4, OPPONENT_ISAAC_5}, - MAP_GROUP_ROUTE117, - MAP_ID_ROUTE117, - }, - { - {OPPONENT_CATHERINE_1, OPPONENT_CATHERINE_2, OPPONENT_CATHERINE_3, OPPONENT_CATHERINE_4, OPPONENT_CATHERINE_5}, - MAP_GROUP_ROUTE119, - MAP_ID_ROUTE119, - }, - { - {OPPONENT_JACKSON_1, OPPONENT_JACKSON_2, OPPONENT_JACKSON_3, OPPONENT_JACKSON_4, OPPONENT_JACKSON_5}, - MAP_GROUP_ROUTE119, - MAP_ID_ROUTE119, - }, - { - {OPPONENT_HALEY_1, OPPONENT_HALEY_2, OPPONENT_HALEY_3, OPPONENT_HALEY_4, OPPONENT_HALEY_5}, - MAP_GROUP_ROUTE104, - MAP_ID_ROUTE104, - }, - { - {OPPONENT_JAMES_1, OPPONENT_JAMES_2, OPPONENT_JAMES_3, OPPONENT_JAMES_4, OPPONENT_JAMES_5}, - MAP_GROUP_PETALBURG_WOODS, - MAP_ID_PETALBURG_WOODS, - }, - { - {OPPONENT_TRENT_1, OPPONENT_TRENT_2, OPPONENT_TRENT_3, OPPONENT_TRENT_4, OPPONENT_TRENT_5}, - MAP_GROUP_ROUTE112, - MAP_ID_ROUTE112, - }, - { - {OPPONENT_LOIS_AND_HAL_1, OPPONENT_LOIS_AND_HAL_2, OPPONENT_LOIS_AND_HAL_3, OPPONENT_LOIS_AND_HAL_4, OPPONENT_LOIS_AND_HAL_5}, - MAP_GROUP_ABANDONED_SHIP_ROOMS2_1F, - MAP_ID_ABANDONED_SHIP_ROOMS2_1F, - }, - { - {OPPONENT_WALLY_3, OPPONENT_WALLY_4, OPPONENT_WALLY_5, OPPONENT_WALLY_6, OPPONENT_NONE}, - MAP_GROUP_VICTORY_ROAD_1F, - MAP_ID_VICTORY_ROAD_1F, - }, -}; - -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) -{ - s16 *data = gTasks[taskId].data; - - switch (data[0]) - { - case 0: - if (!FieldPoisonEffectIsRunning()) // is poison not active? - { - sub_811AABC(data[1]); - data[0]++; // go to case 1. - } - break; - case 1: - if (sub_811AAE8() == TRUE) - { - SetMainCallback2(sub_800E7C4); - prev_quest_postbuffer_cursor_backup_reset(); - overworld_poison_timer_set(); - DestroyTask(taskId); - } - break; - } -} - -void task_add_01_battle_start(u8 transition, u16 song) -{ - u8 taskId = CreateTask(task01_battle_start, 1); - - gTasks[taskId].data[1] = transition; - current_map_music_set__default_for_battle(song); -} - -void CheckForSafariZoneAndProceed(void) -{ - if (GetSafariZoneFlag()) - StartBattle_Safari(); - else - StartBattle_StandardWild(); -} - -void StartBattle_StandardWild(void) -{ - ScriptContext2_Enable(); - FreezeMapObjects(); - sub_80597F4(); - gMain.savedCallback = HandleWildBattleEnd; - gBattleTypeFlags = 0; - task_add_01_battle_start(GetWildBattleTransition(), 0); - IncrementGameStat(7); - IncrementGameStat(8); -} - -void StartBattle_Roamer(void) -{ - ScriptContext2_Enable(); - FreezeMapObjects(); - sub_80597F4(); - gMain.savedCallback = HandleWildBattleEnd; - gBattleTypeFlags = BATTLE_TYPE_ROAMER; - task_add_01_battle_start(GetWildBattleTransition(), 0); - IncrementGameStat(7); - IncrementGameStat(8); -} - -void StartBattle_Safari(void) -{ - ScriptContext2_Enable(); - FreezeMapObjects(); - sub_80597F4(); - gMain.savedCallback = sub_80C824C; - gBattleTypeFlags = BATTLE_TYPE_SAFARI; - task_add_01_battle_start(GetWildBattleTransition(), 0); -} - -void task_add_01_battle_start_with_music_and_stats(void) -{ - task_add_01_battle_start(GetTrainerBattleTransition(), 0); - IncrementGameStat(7); - IncrementGameStat(9); -} - -//Initiates battle where Wally catches Ralts -void StartBattle_WallyTutorial(void) -{ - CreateMaleMon(&gEnemyParty[0], SPECIES_RALTS, 5); - 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); -} - -void StartBattle_ScriptedWild(void) -{ - ScriptContext2_Enable(); - gMain.savedCallback = HandleScriptedWildBattleEnd; - gBattleTypeFlags = 0; - task_add_01_battle_start(GetWildBattleTransition(), 0); - IncrementGameStat(7); - IncrementGameStat(8); -} - -void StartBattle_SouthernIsland(void) -{ - ScriptContext2_Enable(); - gMain.savedCallback = HandleScriptedWildBattleEnd; - gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; - task_add_01_battle_start(GetWildBattleTransition(), 0); - IncrementGameStat(7); - IncrementGameStat(8); -} - -void StartBattle_Rayquaza(void) -{ - ScriptContext2_Enable(); - gMain.savedCallback = HandleScriptedWildBattleEnd; - gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; - task_add_01_battle_start(0, BGM_BATTLE34); - IncrementGameStat(7); - IncrementGameStat(8); -} - -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 - else - task_add_01_battle_start(0x6, BGM_BATTLE34); // GROUDON - IncrementGameStat(7); - IncrementGameStat(8); -} - -void StartBattle_Regi(void) -{ - ScriptContext2_Enable(); - gMain.savedCallback = HandleScriptedWildBattleEnd; - gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI; - task_add_01_battle_start(0xA, BGM_BATTLE36); - IncrementGameStat(7); - IncrementGameStat(8); -} - -void HandleWildBattleEnd(void) -{ - CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE); - ResetOamRange(0, 128); - - if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE) - { - SetMainCallback2(CB2_WhiteOut); - } - else - { - SetMainCallback2(c2_exit_to_overworld_2_switch); - gFieldCallback = sub_8080E44; - } -} - -void HandleScriptedWildBattleEnd(void) -{ - CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE); - ResetOamRange(0, 128); - - if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE) - SetMainCallback2(CB2_WhiteOut); - else - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); -} - -s8 GetBattleTerrain(void) -{ - u16 tileBehavior; - s16 x, y; - - PlayerGetDestCoords(&x, &y); - tileBehavior = MapGridGetMetatileBehaviorAt(x, y); - - if (MetatileBehavior_IsTallGrass(tileBehavior)) - return 0; - if (MetatileBehavior_IsLongGrass(tileBehavior)) - return 1; - if (MetatileBehavior_IsSandOrDeepSand(tileBehavior)) - return 2; - switch (gMapHeader.mapType) - { - case MAP_TYPE_TOWN: - case MAP_TYPE_CITY: - case MAP_TYPE_ROUTE: - break; - case MAP_TYPE_UNDERGROUND: - if (sub_80574C4(tileBehavior)) - return 8; - if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) - return 5; - return 7; - case MAP_TYPE_INDOOR: - case MAP_TYPE_SECRET_BASE: - return 8; - case MAP_TYPE_UNDERWATER: - return 3; - case MAP_TYPE_6: - if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) - return 4; - return 9; - } - if (sub_8057568(tileBehavior)) - return 4; - if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) - return 5; - if (sub_80574D8(tileBehavior)) - return 6; - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) - { - if (sub_8057450(tileBehavior)) - return 5; - if (MetatileBehavior_IsBridge(tileBehavior) == TRUE) - return 4; - } - if (gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 28) - return 2; - if (GetSav1Weather() == 8) - return 2; - return 9; -} - -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) - return 2; - - if (!MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) - { - switch (gMapHeader.mapType) - { - case MAP_TYPE_UNDERGROUND: - return 1; - case MAP_TYPE_UNDERWATER: - return 3; - default: - return 0; - } - } - return 3; -} - -u16 GetSumOfPartyMonLevel(u8 numMons) -{ - u8 sum = 0; - int i; - - for (i = 0; i < 6; i++) - { - u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - - if (species != SPECIES_EGG && species != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) != 0) - { - sum += GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); - numMons--; - if (numMons == 0) - break; - } - } - return sum; -} - -u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons) -{ - u8 i; - u8 sum; - u32 count = numMons; - void *party; - - if (gTrainers[trainerNum].partySize < count) - count = gTrainers[trainerNum].partySize; - - sum = 0; - - switch (gTrainers[trainerNum].partyFlags) - { - case 0: - party = gTrainers[trainerNum].party; - for (i = 0; i < count; i++) - sum += ((struct TrainerPartyMember0 *)party)[i].level; - break; - case 1: - party = gTrainers[trainerNum].party; - for (i = 0; i < count; i++) - sum += ((struct TrainerPartyMember1 *)party)[i].level; - break; - case 2: - party = gTrainers[trainerNum].party; - for (i = 0; i < count; i++) - sum += ((struct TrainerPartyMember2 *)party)[i].level; - break; - case 3: - party = gTrainers[trainerNum].party; - for (i = 0; i < count; i++) - sum += ((struct TrainerPartyMember3 *)party)[i].level; - break; - } - - return sum; -} - -u8 GetWildBattleTransition(void) -{ - u8 flashVar = GetBattleTransitionTypeByMap(); - u8 level = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); - - if (level < (u8)GetSumOfPartyMonLevel(1)) // is wild mon level than the player's mon level? - return gBattleTransitionTable_Wild[flashVar][0]; - else - return gBattleTransitionTable_Wild[flashVar][1]; // use a white fade in instead of normal transition. -} - -u8 GetTrainerBattleTransition(void) -{ - const struct Trainer *trainer; - u8 minPartyCount; - u8 flashVar; - u8 level; - - if (gTrainerBattleOpponent == 1024) // link battle? - return 16; - - trainer = gTrainers; - - if (trainer[gTrainerBattleOpponent].trainerClass == 24) // league? - { - if (gTrainerBattleOpponent == 261) - return 12; - if (gTrainerBattleOpponent == 262) - return 13; - if (gTrainerBattleOpponent == 263) - return 14; - if (gTrainerBattleOpponent == 264) - return 15; - return 16; - } - - if (trainer[gTrainerBattleOpponent].trainerClass == 32) // team leader? - return 16; - - 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]; - else - return gBattleTransitionTable_Trainer[flashVar][1]; -} - -u8 GetBattleTowerBattleTransition(void) -{ - u8 monData = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); - - if (monData < (u8)GetSumOfPartyMonLevel(1)) - return 4; - else - return 3; -} - -void ChooseStarter(void) -{ - SetMainCallback2(CB2_ChooseStarter); - gMain.savedCallback = CB2_GiveStarter; -} - -void CB2_GiveStarter(void) -{ - u16 starterPoke; - - *GetVarPointer(0x4023) = gScriptResult; - starterPoke = GetStarterPokemon(gScriptResult); - ScriptGiveMon(starterPoke, 5, 0, 0, 0, 0); - ResetTasks(); - sub_80408BC(); - SetMainCallback2(CB2_StartFirstBattle); - sub_811AAD8(0); -} - -void CB2_StartFirstBattle(void) -{ - UpdatePaletteFade(); - RunTasks(); - - if (sub_811AAE8() == TRUE) - { - gBattleTypeFlags = BATTLE_TYPE_FIRST_BATTLE; - gMain.savedCallback = HandleFirstBattleEnd; - SetMainCallback2(sub_800E7C4); - prev_quest_postbuffer_cursor_backup_reset(); - overworld_poison_timer_set(); - IncrementGameStat(7); - IncrementGameStat(8); - } -} - -void HandleFirstBattleEnd(void) -{ - sav1_reset_battle_music_maybe(); - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); -} - -u32 TrainerBattleLoadArg32(const u8 *ptr) -{ - return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); -} - -u16 TrainerBattleLoadArg16(const u8 *ptr) -{ - return ptr[0] | (ptr[1] << 8); -} - -u8 TrainerBattleLoadArg8(const u8 *ptr) -{ - return ptr[0]; -} - -u16 trainerflag_opponent(void) -{ - return TRAINER_FLAG_START + gTrainerBattleOpponent; -} - -bool32 battle_exit_is_player_defeat(u32 a1) -{ - switch (a1) - { - case 2: - case 3: - return TRUE; - case 1: - case 4: - case 5: - case 6: - case 7: - return FALSE; - } - return FALSE; -} - -void sub_80822BC(void) -{ - gTrainerBattleMode = 0; - gTrainerBattleOpponent = 0; - gTrainerMapObjectLocalId = 0; - gTrainerIntroSpeech = 0; - gTrainerDefeatSpeech = 0; - gTrainerVictorySpeech = 0; - gTrainerCannotBattleSpeech = 0; - gTrainerBattleScriptReturnAddress = 0; - gTrainerBattleEndScript = 0; -} - -void TrainerBattleLoadArgs(const struct TrainerBattleSpec *specs, const u8 *data) -{ - while (1) - { - switch (specs->ptrType) - { - case 0: - *(u8 *)specs->ptr = TrainerBattleLoadArg8(data); - data++; - break; - case 1: - *(u16 *)specs->ptr = TrainerBattleLoadArg16(data); - data += 2; - break; - case 2: - *(u32 *)specs->ptr = TrainerBattleLoadArg32(data); - data += 4; - break; - case 3: - *(u8 *)specs->ptr = 0; - break; - case 4: - *(u16 *)specs->ptr = 0; - break; - case 5: - *(u32 *)specs->ptr = 0; - break; - case 6: - *(const u8 **)specs->ptr = data; - return; - } - specs++; - } -} - -void battle_80801F0(void) -{ - if (gTrainerMapObjectLocalId) - { - gScriptLastTalked = gTrainerMapObjectLocalId; - gSelectedMapObject = GetFieldObjectIdByLocalIdAndMap(gTrainerMapObjectLocalId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - } -} - -u8 *TrainerBattleConfigure(const u8 *data) -{ - sub_80822BC(); - gTrainerBattleMode = TrainerBattleLoadArg8(data); - - switch (gTrainerBattleMode) - { - case 3: - TrainerBattleLoadArgs(gTrainerBattleSpecs_3, data); - return gUnknown_0819F878; - case 4: - TrainerBattleLoadArgs(gTrainerBattleSpecs_2, data); - battle_80801F0(); - return gUnknown_0819F840; - case 1: - case 2: - TrainerBattleLoadArgs(gTrainerBattleSpecs_1, data); - battle_80801F0(); - return gUnknown_0819F818; - case 6: - case 8: - TrainerBattleLoadArgs(gTrainerBattleSpecs_4, data); - battle_80801F0(); - return gUnknown_0819F840; - case 7: - TrainerBattleLoadArgs(gTrainerBattleSpecs_2, data); - battle_80801F0(); - gTrainerBattleOpponent = sub_8082C4C(gTrainerBattleOpponent); - return gUnknown_0819F8AE; - case 5: - TrainerBattleLoadArgs(gTrainerBattleSpecs_0, data); - battle_80801F0(); - gTrainerBattleOpponent = sub_8082C4C(gTrainerBattleOpponent); - return gUnknown_0819F887; - default: - TrainerBattleLoadArgs(gTrainerBattleSpecs_0, data); - battle_80801F0(); - return gUnknown_0819F818; - } -} - -void TrainerWantsBattle(u8 trainerMapObjId, u8 *trainerScript) -{ - gSelectedMapObject = trainerMapObjId; - gScriptLastTalked = gMapObjects[trainerMapObjId].localId; - TrainerBattleConfigure(trainerScript + 1); - ScriptContext1_SetupScript(gUnknown_0819F80B); - ScriptContext2_Enable(); -} - -bool32 GetTrainerFlagFromScriptPointer(u8 *data) -{ - u32 flag = TrainerBattleLoadArg16(data + 2); - return FlagGet(TRAINER_FLAG_START + flag); -} - -void sub_8082524(void) -{ - struct MapObject *mapObject = &gMapObjects[gSelectedMapObject]; - - npc_set_running_behaviour_etc(mapObject, npc_running_behaviour_by_direction(mapObject->mapobj_unk_18)); -} - -u8 sub_8082558(void) -{ - return gTrainerBattleMode; -} - -u8 sub_8082564(void) -{ - return FlagGet(trainerflag_opponent()); -} - -void sub_808257C(void) -{ - FlagSet(trainerflag_opponent()); -} - -void unref_sub_8082590(void) -{ - FlagSet(trainerflag_opponent()); // duplicate function -} - -u8 trainer_flag_check(u16 flag) -{ - return FlagGet(TRAINER_FLAG_START + flag); -} - -void trainer_flag_set(u16 flag) -{ - FlagSet(TRAINER_FLAG_START + flag); -} - -void trainer_flag_clear(u16 flag) -{ - FlagReset(TRAINER_FLAG_START + flag); -} - -void sub_80825E4(void) -{ - gBattleTypeFlags = BATTLE_TYPE_TRAINER; - gMain.savedCallback = sub_808260C; - task_add_01_battle_start_with_music_and_stats(); - ScriptContext1_Stop(); -} - -void sub_808260C(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) - { - SetMainCallback2(CB2_WhiteOut); - } - else - { - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); - sub_808257C(); - } -} - -void do_choose_name_or_words_screen(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) - { - SetMainCallback2(CB2_WhiteOut); - } - else - { - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); - sub_808257C(); - sub_8082CB8(); - } -} - -void sub_80826B0(void) -{ - gBattleTypeFlags = BATTLE_TYPE_TRAINER; - gMain.savedCallback = do_choose_name_or_words_screen; - task_add_01_battle_start_with_music_and_stats(); - ScriptContext1_Stop(); -} - -void sub_80826D8(void) -{ - ShowFieldMessage(sub_808281C()); -} - -u8 *sub_80826E8(void) -{ - if (gTrainerBattleScriptReturnAddress) - return gTrainerBattleScriptReturnAddress; - else - return gUnknown_081C6C02; -} - -u8 *sub_8082700(void) -{ - if (gTrainerBattleEndScript) - return gTrainerBattleEndScript; - else - return gUnknown_081C6C02; -} - -void sub_8082718(void) -{ - ShowFieldMessage(sub_8082880()); -} - -void PlayTrainerEncounterMusic(void) -{ - u16 music; - - if (gTrainerBattleMode != 1 && gTrainerBattleMode != 8) - { - switch (sub_803FC58(gTrainerBattleOpponent)) - { - case TRAINER_ENCOUNTER_MUSIC_MALE: - music = BGM_BOYEYE; - break; - case TRAINER_ENCOUNTER_MUSIC_FEMALE: - music = BGM_GIRLEYE; - break; - case TRAINER_ENCOUNTER_MUSIC_GIRL: - music = BGM_SYOUJOEYE; - break; - case TRAINER_ENCOUNTER_MUSIC_INTENSE: - music = BGM_HAGESHII; - break; - case TRAINER_ENCOUNTER_MUSIC_COOL: - music = BGM_KAKKOII; - break; - case TRAINER_ENCOUNTER_MUSIC_AQUA: - music = BGM_AQA_0; - break; - case TRAINER_ENCOUNTER_MUSIC_MAGMA: - music = BGM_MGM0; - break; - case TRAINER_ENCOUNTER_MUSIC_SWIMMER: - music = BGM_SWIMEYE; - break; - case TRAINER_ENCOUNTER_MUSIC_TWINS: - music = BGM_HUTAGO; - break; - case TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR: - music = BGM_SITENNOU; - break; - case TRAINER_ENCOUNTER_MUSIC_HIKER: - music = BGM_YAMA_EYE; - break; - case TRAINER_ENCOUNTER_MUSIC_INTERVIEWER: - music = BGM_INTER_V; - break; - case TRAINER_ENCOUNTER_MUSIC_RICH: - music = BGM_TEST; - break; - default: - music = BGM_AYASII; - } - PlayNewMapMusic(music); - } -} - -//Returns an empty string if a null pointer was passed, otherwise returns str -u8 *SanitizeString(const u8 *str) -{ - if (str) - return (u8 *) str; - else - return (u8 *) gOtherText_CancelWithTerminator; -} - -u8 *sub_808281C(void) -{ - return SanitizeString(gTrainerIntroSpeech); -} - -u8 *sub_8082830(void) -{ - u8 *str; - - if (gTrainerBattleOpponent == 1024) - str = sub_80BCCE8(); - else - str = gTrainerDefeatSpeech; - - StringExpandPlaceholders(gStringVar4, SanitizeString(str)); - return gStringVar4; -} - -u8 *unref_sub_808286C(void) -{ - return SanitizeString(gTrainerVictorySpeech); -} - -u8 *sub_8082880(void) -{ - return SanitizeString(gTrainerCannotBattleSpeech); -} - -s32 sub_8082894(const struct TrainerEyeTrainer *trainers, u16 trainerNum) -{ - s32 i; - - for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++) - { - if (trainers[i].trainerNums[0] == trainerNum) - return i; - } - return -1; -} - -s32 sub_80828B8(const struct TrainerEyeTrainer *trainers, u16 trainerNum) -{ - s32 i; - s32 j; - - for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++) - { - for (j = 0; j < 5 && trainers[i].trainerNums[j] != 0; j++) - { - if (trainers[i].trainerNums[j] == trainerNum) - return i; - } - } - return -1; -} - -bool32 sub_80828FC(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum) -{ - int i; - bool32 ret = FALSE; - - for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++) - { - if (trainers[i].mapGroup == mapGroup && trainers[i].mapNum == mapNum) - { - if (gSaveBlock1.trainerRematches[i] != 0) - ret = TRUE; - else if (trainer_flag_check(trainers[i].trainerNums[0]) == TRUE && (Random() % 100) <= 30) - { - int j = 1; - - while (j < 5 && trainers[i].trainerNums[j] != 0 && trainer_flag_check(trainers[i].trainerNums[j])) - j++; - gSaveBlock1.trainerRematches[i] = j; - ret = TRUE; - } - } - } - return ret; -} - -s32 sub_80829A8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum) -{ - s32 i; - - for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++) - { - if (trainers[i].mapGroup == mapGroup && trainers[i].mapNum == mapNum && gSaveBlock1.trainerRematches[i]) - return 1; - } - return 0; -} - -s32 sub_80829E8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum) -{ - s32 i; - - for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++) - { - if (trainers[i].mapGroup == mapGroup && trainers[i].mapNum == mapNum) - return 1; - } - return 0; -} - -bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 trainerNum) -{ - s32 trainerEyeIndex = sub_8082894(trainers, trainerNum); - - if (trainerEyeIndex != -1 && trainerEyeIndex < 100 && gSaveBlock1.trainerRematches[trainerEyeIndex]) - return TRUE; - else - return FALSE; -} - -bool8 sub_8082A54(const struct TrainerEyeTrainer *trainers, u16 trainerNum) -{ - s32 trainerEyeIndex = sub_80828B8(trainers, trainerNum); - - if (trainerEyeIndex != -1 && trainerEyeIndex < 100 && gSaveBlock1.trainerRematches[trainerEyeIndex]) - return TRUE; - else - return FALSE; -} - -u16 sub_8082A90(const struct TrainerEyeTrainer *trainers, u16 trainerNum) -{ - int i; - const struct TrainerEyeTrainer *trainer; - s32 trainerEyeIndex = sub_8082894(trainers, trainerNum); - - 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]; - } - return trainer->trainerNums[4]; -} - -void sub_8082AE4(const struct TrainerEyeTrainer *trainers, u16 trainerNum) -{ - s32 trainerEyeIndex = sub_80828B8(trainers, trainerNum); - - if (trainerEyeIndex != -1) - gSaveBlock1.trainerRematches[trainerEyeIndex] = 0; -} - -bool8 sub_8082B10(const struct TrainerEyeTrainer *trainers, u16 trainerNum) -{ - s32 trainerEyeIndex = sub_8082894(trainers, trainerNum); - - if (trainerEyeIndex != -1 && trainer_flag_check(trainers[trainerEyeIndex].trainerNums[1])) - return TRUE; - else - return FALSE; -} - -bool32 sub_8082B44(void) -{ - int badgeCount = 0; - u32 i; - - for (i = 0; i < 8; i++) - { - if (FlagGet(sBadgeFlags[i]) == TRUE) - { - badgeCount++; - if (badgeCount >= 5) - return TRUE; - } - } - return FALSE; -} - -void sub_8082B78(void) -{ - if (sub_8082B44()) - { - if (gSaveBlock1.trainerRematchStepCounter >= TRAINER_REMATCH_STEPS) - gSaveBlock1.trainerRematchStepCounter = TRAINER_REMATCH_STEPS; - else - gSaveBlock1.trainerRematchStepCounter++; - } -} - -bool32 sub_8082BA4(void) -{ - if (sub_8082B44() && gSaveBlock1.trainerRematchStepCounter >= TRAINER_REMATCH_STEPS) - return TRUE; - else - return FALSE; -} - -void sub_8082BD0(u16 mapGroup, u16 mapNum) -{ - if (sub_8082BA4() && sub_80828FC(gTrainerEyeTrainers, mapGroup, mapNum) == TRUE) - gSaveBlock1.trainerRematchStepCounter = 0; -} - -s32 sub_8082C0C(u16 mapGroup, u16 mapNum) -{ - return sub_80829A8(gTrainerEyeTrainers, mapGroup, mapNum); -} - -s32 unref_sub_8082C2C(u16 mapGroup, u16 mapNum) -{ - return sub_80829E8(gTrainerEyeTrainers, mapGroup, mapNum); -} - -u16 sub_8082C4C(u16 trainerNum) -{ - return sub_8082A90(gTrainerEyeTrainers, trainerNum); -} - -s32 sub_8082C68(void) -{ - if (sub_8082A18(gTrainerEyeTrainers, gTrainerBattleOpponent)) - return 1; - else - return sub_8082B10(gTrainerEyeTrainers, gTrainerBattleOpponent); -} - -u8 sub_8082C9C(void) -{ - return sub_8082A54(gTrainerEyeTrainers, gTrainerBattleOpponent); -} - -void sub_8082CB8(void) -{ - sub_8082AE4(gTrainerEyeTrainers, gTrainerBattleOpponent); - sub_808257C(); -} diff --git a/src/berry.c b/src/berry.c deleted file mode 100644 index fa15672e7..000000000 --- a/src/berry.c +++ /dev/null @@ -1,1380 +0,0 @@ -#include "global.h" -#include "berry.h" -#include "field_control_avatar.h" -#include "field_map_obj.h" -#include "fieldmap.h" -#include "item.h" -#include "item_menu.h" -#include "item_use.h" -#include "items.h" -#include "main.h" -#include "rng.h" -#include "text.h" - -#define BERRY_NAME_LENGTH 6 - -#define FIRST_BERRY ITEM_CHERI_BERRY -#define LAST_BERRY ITEM_ENIGMA_BERRY - -#ifdef ENGLISH -#define NAME_CHERI_BERRY _("CHERI") -#define NAME_CHESTO_BERRY _("CHESTO") -#define NAME_PECHA_BERRY _("PECHA") -#define NAME_RAWST_BERRY _("RAWST") -#define NAME_ASPEAR_BERRY _("ASPEAR") -#define NAME_LEPPA_BERRY _("LEPPA") -#define NAME_ORAN_BERRY _("ORAN") -#define NAME_PERSIM_BERRY _("PERSIM") -#define NAME_LUM_BERRY _("LUM") -#define NAME_SITRUS_BERRY _("SITRUS") -#define NAME_FIGY_BERRY _("FIGY") -#define NAME_WIKI_BERRY _("WIKI") -#define NAME_MAGO_BERRY _("MAGO") -#define NAME_AGUAV_BERRY _("AGUAV") -#define NAME_IAPAPA_BERRY _("IAPAPA") -#define NAME_RAZZ_BERRY _("RAZZ") -#define NAME_BLUK_BERRY _("BLUK") -#define NAME_NANAB_BERRY _("NANAB") -#define NAME_WEPEAR_BERRY _("WEPEAR") -#define NAME_PINAP_BERRY _("PINAP") -#define NAME_POMEG_BERRY _("POMEG") -#define NAME_KELPSY_BERRY _("KELPSY") -#define NAME_QUALOT_BERRY _("QUALOT") -#define NAME_HONDEW_BERRY _("HONDEW") -#define NAME_GREPA_BERRY _("GREPA") -#define NAME_TAMATO_BERRY _("TAMATO") -#define NAME_CORNN_BERRY _("CORNN") -#define NAME_MAGOST_BERRY _("MAGOST") -#define NAME_RABUTA_BERRY _("RABUTA") -#define NAME_NOMEL_BERRY _("NOMEL") -#define NAME_SPELON_BERRY _("SPELON") -#define NAME_PAMTRE_BERRY _("PAMTRE") -#define NAME_WATMEL_BERRY _("WATMEL") -#define NAME_DURIN_BERRY _("DURIN") -#define NAME_BELUE_BERRY _("BELUE") -#define NAME_LIECHI_BERRY _("LIECHI") -#define NAME_GANLON_BERRY _("GANLON") -#define NAME_SALAC_BERRY _("SALAC") -#define NAME_PETAYA_BERRY _("PETAYA") -#define NAME_APICOT_BERRY _("APICOT") -#define NAME_LANSAT_BERRY _("LANSAT") -#define NAME_STARF_BERRY _("STARF") -#define NAME_ENIGMA_BERRY _("ENIGMA") - -const u8 gBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers."); -const u8 gBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy."); -const u8 gBerryDescriptionPart1_Chesto[] = _("The BERRY’s thick skin and fruit are"); -const u8 gBerryDescriptionPart2_Chesto[] = _("very tough. It is dry-tasting all over."); -const u8 gBerryDescriptionPart1_Pecha[] = _("Very sweet and delicious."); -const u8 gBerryDescriptionPart2_Pecha[] = _("Also very tender - handle with care."); -const u8 gBerryDescriptionPart1_Rawst[] = _("If the leaves grow long and curly,"); -const u8 gBerryDescriptionPart2_Rawst[] = _("the BERRY seems to grow very bitter."); -const u8 gBerryDescriptionPart1_Aspear[] = _("The hard BERRY is dense with a rich"); -const u8 gBerryDescriptionPart2_Aspear[] = _("juice. It is quite sour."); -const u8 gBerryDescriptionPart1_Leppa[] = _("Grows slower than CHERI and others."); -const u8 gBerryDescriptionPart2_Leppa[] = _("The smaller the BERRY, the tastier."); -const u8 gBerryDescriptionPart1_Oran[] = _("A peculiar BERRY with a mix of flavors."); -const u8 gBerryDescriptionPart2_Oran[] = _("BERRIES grow in half a day."); -const u8 gBerryDescriptionPart1_Persim[] = _("Loves sunlight. The BERRY’s color"); -const u8 gBerryDescriptionPart2_Persim[] = _("grows vivid when exposed to the sun."); -const u8 gBerryDescriptionPart1_Lum[] = _("Slow to grow. If raised with loving"); -const u8 gBerryDescriptionPart2_Lum[] = _("care, it may grow two BERRIES."); -const u8 gBerryDescriptionPart1_Sitrus[] = _("Closely related to ORAN. The large"); -const u8 gBerryDescriptionPart2_Sitrus[] = _("BERRY has a well-rounded flavor."); -const u8 gBerryDescriptionPart1_Figy[] = _("The BERRY, which looks chewed up,"); -const u8 gBerryDescriptionPart2_Figy[] = _("brims with spicy substances."); -const u8 gBerryDescriptionPart1_Wiki[] = _("The BERRY is said to have grown lumpy"); -const u8 gBerryDescriptionPart2_Wiki[] = _("to help POKéMON grip it."); -const u8 gBerryDescriptionPart1_Mago[] = _("The BERRY turns curvy as it grows."); -const u8 gBerryDescriptionPart2_Mago[] = _("The curvier, the sweeter and tastier."); -const u8 gBerryDescriptionPart1_Aguav[] = _("The flower is dainty. It is rare in its"); -const u8 gBerryDescriptionPart2_Aguav[] = _("ability to grow without light."); -const u8 gBerryDescriptionPart1_Iapapa[] = _("The BERRY is very big and sour."); -const u8 gBerryDescriptionPart2_Iapapa[] = _("It takes at least a day to grow."); -const u8 gBerryDescriptionPart1_Razz[] = _("The red BERRY tastes slightly spicy."); -const u8 gBerryDescriptionPart2_Razz[] = _("It grows quickly in just four hours."); -const u8 gBerryDescriptionPart1_Bluk[] = _("The BERRY is blue on the outside, but"); -const u8 gBerryDescriptionPart2_Bluk[] = _("it blackens the mouth when eaten."); -const u8 gBerryDescriptionPart1_Nanab[] = _("This BERRY was the seventh"); -const u8 gBerryDescriptionPart2_Nanab[] = _("discovered in the world. It is sweet."); -const u8 gBerryDescriptionPart1_Wepear[] = _("The flower is small and white. It has a"); -const u8 gBerryDescriptionPart2_Wepear[] = _("delicate balance of bitter and sour."); -const u8 gBerryDescriptionPart1_Pinap[] = _("Weak against wind and cold."); -const u8 gBerryDescriptionPart2_Pinap[] = _("The fruit is spicy and the skin, sour."); -const u8 gBerryDescriptionPart1_Pomeg[] = _("However much it is watered,"); -const u8 gBerryDescriptionPart2_Pomeg[] = _("it only grows up to six BERRIES."); -const u8 gBerryDescriptionPart1_Kelpsy[] = _("A rare variety shaped like a root."); -const u8 gBerryDescriptionPart2_Kelpsy[] = _("Grows a very large flower."); -const u8 gBerryDescriptionPart1_Qualot[] = _("Loves water. Grows strong even in"); -const u8 gBerryDescriptionPart2_Qualot[] = _("locations with constant rainfall."); -const u8 gBerryDescriptionPart1_Hondew[] = _("A BERRY that is very valuable and"); -const u8 gBerryDescriptionPart2_Hondew[] = _("rarely seen. It is very delicious."); -const u8 gBerryDescriptionPart1_Grepa[] = _("Despite its tenderness and round"); -const u8 gBerryDescriptionPart2_Grepa[] = _("shape, the BERRY is unimaginably sour."); -const u8 gBerryDescriptionPart1_Tamato[] = _("The BERRY is lip-bendingly spicy."); -const u8 gBerryDescriptionPart2_Tamato[] = _("It takes time to grow."); -const u8 gBerryDescriptionPart1_Cornn[] = _("A BERRY from an ancient era. May not"); -const u8 gBerryDescriptionPart2_Cornn[] = _("grow unless planted in quantity."); -const u8 gBerryDescriptionPart1_Magost[] = _("A BERRY that is widely said to have"); -const u8 gBerryDescriptionPart2_Magost[] = _("a finely balanced flavor."); -const u8 gBerryDescriptionPart1_Rabuta[] = _("A rare variety that is overgrown with"); -const u8 gBerryDescriptionPart2_Rabuta[] = _("hair. It is quite bitter."); -const u8 gBerryDescriptionPart1_Nomel[] = _("Quite sour. Just one bite makes it"); -const u8 gBerryDescriptionPart2_Nomel[] = _("impossible to taste for three days."); -const u8 gBerryDescriptionPart1_Spelon[] = _("The vividly red BERRY is very spicy."); -const u8 gBerryDescriptionPart2_Spelon[] = _("Its warts secrete a spicy substance."); -const u8 gBerryDescriptionPart1_Pamtre[] = _("Drifts on the sea from somewhere."); -const u8 gBerryDescriptionPart2_Pamtre[] = _("It is thought to grow elsewhere."); -const u8 gBerryDescriptionPart1_Watmel[] = _("A huge BERRY, with some over 20"); -const u8 gBerryDescriptionPart2_Watmel[] = _("inches discovered. Exceedingly sweet."); -const u8 gBerryDescriptionPart1_Durin[] = _("Bitter to even look at. It is so"); -const u8 gBerryDescriptionPart2_Durin[] = _("bitter, no one has ever eaten it as is."); -const u8 gBerryDescriptionPart1_Belue[] = _("It is glossy and looks delicious, but"); -const u8 gBerryDescriptionPart2_Belue[] = _("it is awfully sour. Takes time to grow."); -const u8 gBerryDescriptionPart1_Liechi[] = _("A mysterious BERRY. It is rumored to"); -const u8 gBerryDescriptionPart2_Liechi[] = _("contain the power of the sea."); -const u8 gBerryDescriptionPart1_Ganlon[] = _("A mysterious BERRY. It is rumored to"); -const u8 gBerryDescriptionPart2_Ganlon[] = _("contain the power of the land."); -const u8 gBerryDescriptionPart1_Salac[] = _("A mysterious BERRY. It is rumored to"); -const u8 gBerryDescriptionPart2_Salac[] = _("contain the power of the sky."); -const u8 gBerryDescriptionPart1_Petaya[] = _("A mysterious BERRY. It is rumored to"); -const u8 gBerryDescriptionPart2_Petaya[] = _("contain the power of all living things."); -const u8 gBerryDescriptionPart1_Apicot[] = _("A very mystifying BERRY. No telling"); -const u8 gBerryDescriptionPart2_Apicot[] = _("what may happen or how it can be used."); -const u8 gBerryDescriptionPart1_Lansat[] = _("Said to be a legendary BERRY."); -const u8 gBerryDescriptionPart2_Lansat[] = _("Holding it supposedly brings joy."); -const u8 gBerryDescriptionPart1_Starf[] = _("So strong, it was abandoned at the"); -const u8 gBerryDescriptionPart2_Starf[] = _("world’s edge. Considered a mirage."); -const u8 gBerryDescriptionPart1_Enigma[] = _("A completely enigmatic BERRY."); -const u8 gBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars."); -#elif defined(GERMAN) -#define NAME_CHERI_BERRY _("AMRENA") -#define NAME_CHESTO_BERRY _("MARON") -#define NAME_PECHA_BERRY _("PIRSIF") -#define NAME_RAWST_BERRY _("FRAGIA") -#define NAME_ASPEAR_BERRY _("WILBIR") -#define NAME_LEPPA_BERRY _("JONAGO") -#define NAME_ORAN_BERRY _("SINEL") -#define NAME_PERSIM_BERRY _("PERSIM") -#define NAME_LUM_BERRY _("PRUNUS") -#define NAME_SITRUS_BERRY _("TSITRU") -#define NAME_FIGY_BERRY _("GIEFE") -#define NAME_WIKI_BERRY _("WIKI") -#define NAME_MAGO_BERRY _("MAGO") -#define NAME_AGUAV_BERRY _("GAUVE") -#define NAME_IAPAPA_BERRY _("YAPA") -#define NAME_RAZZ_BERRY _("HIMMIH") -#define NAME_BLUK_BERRY _("MORB") -#define NAME_NANAB_BERRY _("NANAB") -#define NAME_WEPEAR_BERRY _("NIRBE") -#define NAME_PINAP_BERRY _("SANANA") -#define NAME_POMEG_BERRY _("GRANA") -#define NAME_KELPSY_BERRY _("SETANG") -#define NAME_QUALOT_BERRY _("QUALOT") -#define NAME_HONDEW_BERRY _("HONMEL") -#define NAME_GREPA_BERRY _("LABRUS") -#define NAME_TAMATO_BERRY _("TAMOT") -#define NAME_CORNN_BERRY _("SAIM") -#define NAME_MAGOST_BERRY _("MAGOST") -#define NAME_RABUTA_BERRY _("RABUTA") -#define NAME_NOMEL_BERRY _("TRONZI") -#define NAME_SPELON_BERRY _("KIWAN") -#define NAME_PAMTRE_BERRY _("PALLM") -#define NAME_WATMEL_BERRY _("WASMEL") -#define NAME_DURIN_BERRY _("DURIN") -#define NAME_BELUE_BERRY _("MYRTIL") -#define NAME_LIECHI_BERRY _("LYDZI") -#define NAME_GANLON_BERRY _("LINGAN") -#define NAME_SALAC_BERRY _("SALKA") -#define NAME_PETAYA_BERRY _("TAHAY") -#define NAME_APICOT_BERRY _("APIKO") -#define NAME_LANSAT_BERRY _("LANSAT") -#define NAME_STARF_BERRY _("KRAMBO") -#define NAME_ENIGMA_BERRY _("ENIGMA") - -const u8 gBerryDescriptionPart1_Cheri[] = _("Erblüht mit hübschen, zarten Blumen."); -const u8 gBerryDescriptionPart2_Cheri[] = _("Diese knallrote BEERE ist sehr scharf."); -const u8 gBerryDescriptionPart1_Chesto[] = _("Diese BEERE hat eine dicke Haut und"); -const u8 gBerryDescriptionPart2_Chesto[] = _("hartes Fruchtfleisch. Trocken!"); -const u8 gBerryDescriptionPart1_Pecha[] = _("Sehr süß und delikat."); -const u8 gBerryDescriptionPart2_Pecha[] = _("Sehr zart. Vorsichtig anfassen!"); -const u8 gBerryDescriptionPart1_Rawst[] = _("Wenn die Blätter lang und wellig sind,"); -const u8 gBerryDescriptionPart2_Rawst[] = _("wird die BEERE sehr bitter."); -const u8 gBerryDescriptionPart1_Aspear[] = _("Diese harte BEERE ist sehr"); -const u8 gBerryDescriptionPart2_Aspear[] = _("saftig und sauer im Geschmack!"); -const u8 gBerryDescriptionPart1_Leppa[] = _("Wächst langsamer als AMRENA und"); -const u8 gBerryDescriptionPart2_Leppa[] = _("andere. Je kleiner, desto delikater."); -const u8 gBerryDescriptionPart1_Oran[] = _("Eine BEERE unterschiedlichsten Ge-"); -const u8 gBerryDescriptionPart2_Oran[] = _("schmacks. Wächst an einem halben Tag."); -const u8 gBerryDescriptionPart1_Persim[] = _("Liebt Sonnenlicht. Die BEERE"); -const u8 gBerryDescriptionPart2_Persim[] = _("wächst im Sonnenlicht sehr schnell."); -const u8 gBerryDescriptionPart1_Lum[] = _("Langsamer Wuchs. Wird sie liebevoll ge-"); -const u8 gBerryDescriptionPart2_Lum[] = _("pflegt, kann sie 2 BEEREN tragen."); -const u8 gBerryDescriptionPart1_Sitrus[] = _("Eng verwandt mit SINEL. Diese große"); -const u8 gBerryDescriptionPart2_Sitrus[] = _("BEERE ist von rundem Geschmack."); -const u8 gBerryDescriptionPart1_Figy[] = _("Die BEERE sieht angekaut aus. Sie ist"); -const u8 gBerryDescriptionPart2_Figy[] = _("voller scharfer Substanzen."); -const u8 gBerryDescriptionPart1_Wiki[] = _("Die BEERE wächst unförmig,"); -const u8 gBerryDescriptionPart2_Wiki[] = _("damit PKMN sie besser greifen können."); -const u8 gBerryDescriptionPart1_Mago[] = _("Die BEERE hat Ausbeulungen. Je mehr"); -const u8 gBerryDescriptionPart2_Mago[] = _("Beulen, desto schmackhafter ist sie."); -const u8 gBerryDescriptionPart1_Aguav[] = _("Die Blume ist zart. Sie ist fähig,"); -const u8 gBerryDescriptionPart2_Aguav[] = _("ohne Licht wachsen zu können."); -const u8 gBerryDescriptionPart1_Iapapa[] = _("Die BEERE ist groß und sauer."); -const u8 gBerryDescriptionPart2_Iapapa[] = _("Sie braucht einen Tag zum Wachsen."); -const u8 gBerryDescriptionPart1_Razz[] = _("Diese rote BEERE schmeckt etwas"); -const u8 gBerryDescriptionPart2_Razz[] = _("scharf. Sie wächst in nur 4 Stunden."); -const u8 gBerryDescriptionPart1_Bluk[] = _("Die BEERE ist außen blau, verfärbt"); -const u8 gBerryDescriptionPart2_Bluk[] = _("sich im Mund aber schwarz."); -const u8 gBerryDescriptionPart1_Nanab[] = _("Diese BEERE war die 7., die auf der"); -const u8 gBerryDescriptionPart2_Nanab[] = _("Welt entdeckt wurde. Sie ist süß."); -const u8 gBerryDescriptionPart1_Wepear[] = _("Die Blume ist klein und weiß. Angenehm"); -const u8 gBerryDescriptionPart2_Wepear[] = _("bitter und sauer zugleich."); -const u8 gBerryDescriptionPart1_Pinap[] = _("Wind und Kälte verträgt sie nicht."); -const u8 gBerryDescriptionPart2_Pinap[] = _("Fruchtfleisch: Scharf. Haut: Sauer."); -const u8 gBerryDescriptionPart1_Pomeg[] = _("Egal wie viel Wasser sie bekommt, sie"); -const u8 gBerryDescriptionPart2_Pomeg[] = _("trägt immer bis zu 6 BEEREN."); -const u8 gBerryDescriptionPart1_Kelpsy[] = _("Eine Seltenheit. Geformt wie eine"); -const u8 gBerryDescriptionPart2_Kelpsy[] = _("Wurzel. Hat eine große Blume."); -const u8 gBerryDescriptionPart1_Qualot[] = _("Liebt das Wasser. Wächst besonders"); -const u8 gBerryDescriptionPart2_Qualot[] = _("gut in regenreichen Gegenden."); -const u8 gBerryDescriptionPart1_Hondew[] = _("Eine wertvolle und seltene BEERE."); -const u8 gBerryDescriptionPart2_Hondew[] = _("Sie ist sehr schmackhaft."); -const u8 gBerryDescriptionPart1_Grepa[] = _("Die BEERE ist zart und von runder"); -const u8 gBerryDescriptionPart2_Grepa[] = _("Form. Aber sie ist unglaublich sauer!"); -const u8 gBerryDescriptionPart1_Tamato[] = _("Die Schärfe der BEERE verbrennt die"); -const u8 gBerryDescriptionPart2_Tamato[] = _("Lippen. Sie braucht Zeit zum Wachsen."); -const u8 gBerryDescriptionPart1_Cornn[] = _("Eine BEERE aus alten Zeiten. Wächst"); -const u8 gBerryDescriptionPart2_Cornn[] = _("nur, wenn in großen Mengen gepflanzt."); -const u8 gBerryDescriptionPart1_Magost[] = _("Eine BEERE, die für ihren feinen, aus-"); -const u8 gBerryDescriptionPart2_Magost[] = _("gewogenen Geschmack bekannt ist."); -const u8 gBerryDescriptionPart1_Rabuta[] = _("Eine Seltenheit, die über und über mit"); -const u8 gBerryDescriptionPart2_Rabuta[] = _("Haaren bewachsen ist. Sehr bitter!"); -const u8 gBerryDescriptionPart1_Nomel[] = _("Sehr sauer. Ein Biss betäubt die"); -const u8 gBerryDescriptionPart2_Nomel[] = _("Geschmacksnerven für 3 Tage!"); -const u8 gBerryDescriptionPart1_Spelon[] = _("Die leuchtend rote BEERE ist sehr"); -const u8 gBerryDescriptionPart2_Spelon[] = _("scharf. Gibt scharfe Substanzen ab!"); -const u8 gBerryDescriptionPart1_Pamtre[] = _("Wird vom Meer angespült. Sie wächst"); -const u8 gBerryDescriptionPart2_Pamtre[] = _("an einem anderen Ort."); -const u8 gBerryDescriptionPart1_Watmel[] = _("Eine große BEERE, 25 cm groß."); -const u8 gBerryDescriptionPart2_Watmel[] = _("Außergewöhnlich süß."); -const u8 gBerryDescriptionPart1_Durin[] = _("Bitter schon ihr Anblick! Sie ist so"); -const u8 gBerryDescriptionPart2_Durin[] = _("bitter, dass niemand sie pur isst."); -const u8 gBerryDescriptionPart1_Belue[] = _("Sie glänzt, sieht zart aus, ist extrem"); -const u8 gBerryDescriptionPart2_Belue[] = _("sauer und braucht Zeit zum Wachsen."); -const u8 gBerryDescriptionPart1_Liechi[] = _("Eine geheimnisvolle BEERE. Man sagt,"); -const u8 gBerryDescriptionPart2_Liechi[] = _("sie enthalte die Kraft des Meeres."); -const u8 gBerryDescriptionPart1_Ganlon[] = _("Eine geheimnisvolle BEERE. Man sagt,"); -const u8 gBerryDescriptionPart2_Ganlon[] = _("sie enthalte die Kraft des Landes."); -const u8 gBerryDescriptionPart1_Salac[] = _("Eine geheimnisvolle BEERE. Man sagt,"); -const u8 gBerryDescriptionPart2_Salac[] = _("sie enthalte die Kraft des Himmels."); -const u8 gBerryDescriptionPart1_Petaya[] = _("Eine geheimnisvolle BEERE. Man sagt,"); -const u8 gBerryDescriptionPart2_Petaya[] = _("sie enthalte die Kraft allen Lebens."); -const u8 gBerryDescriptionPart1_Apicot[] = _("Eine rätselhafte BEERE. Man kann"); -const u8 gBerryDescriptionPart2_Apicot[] = _("nicht sagen, wie und was sie ist."); -const u8 gBerryDescriptionPart1_Lansat[] = _("Eine legendäre BEERE. Sie zu"); -const u8 gBerryDescriptionPart2_Lansat[] = _("tragen bringt Freude."); -const u8 gBerryDescriptionPart1_Starf[] = _("So stark, dass sie an den Rand der"); -const u8 gBerryDescriptionPart2_Starf[] = _("Welt verbannt wurde. Ein Märchen?"); -const u8 gBerryDescriptionPart1_Enigma[] = _("Eine enigmatische BEERE. Sie scheint"); -const u8 gBerryDescriptionPart2_Enigma[] = _("die Macht der Sterne zu besitzen."); -#endif - -const struct Berry gBerries[] = -{ - { - .name = NAME_CHERI_BERRY, - .firmness = BERRY_FIRMNESS_SOFT, - .size = 20, - .maxYield = 3, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Cheri, - .description2 = gBerryDescriptionPart2_Cheri, - .stageDuration = 3, - .spicy = 10, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 25, - }, - { - .name = NAME_CHESTO_BERRY, - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .size = 80, - .maxYield = 3, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Chesto, - .description2 = gBerryDescriptionPart2_Chesto, - .stageDuration = 3, - .spicy = 0, - .dry = 10, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 25, - }, - { - .name = NAME_PECHA_BERRY, - .firmness = BERRY_FIRMNESS_VERY_SOFT, - .size = 40, - .maxYield = 3, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Pecha, - .description2 = gBerryDescriptionPart2_Pecha, - .stageDuration = 3, - .spicy = 0, - .dry = 0, - .sweet = 10, - .bitter = 0, - .sour = 0, - .smoothness = 25, - }, - { - .name = NAME_RAWST_BERRY, - .firmness = BERRY_FIRMNESS_HARD, - .size = 32, - .maxYield = 3, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Rawst, - .description2 = gBerryDescriptionPart2_Rawst, - .stageDuration = 3, - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 10, - .sour = 0, - .smoothness = 25, - }, - { - .name = NAME_ASPEAR_BERRY, - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .size = 50, - .maxYield = 3, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Aspear, - .description2 = gBerryDescriptionPart2_Aspear, - .stageDuration = 3, - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 10, - .smoothness = 25, - }, - { - .name = NAME_LEPPA_BERRY, - .firmness = BERRY_FIRMNESS_VERY_HARD, - .size = 28, - .maxYield = 3, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Leppa, - .description2 = gBerryDescriptionPart2_Leppa, - .stageDuration = 4, - .spicy = 10, - .dry = 0, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 20, - }, - { - .name = NAME_ORAN_BERRY, - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .size = 35, - .maxYield = 3, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Oran, - .description2 = gBerryDescriptionPart2_Oran, - .stageDuration = 3, - .spicy = 10, - .dry = 10, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 20, - }, - { - .name = NAME_PERSIM_BERRY, - .firmness = BERRY_FIRMNESS_HARD, - .size = 47, - .maxYield = 3, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Persim, - .description2 = gBerryDescriptionPart2_Persim, - .stageDuration = 3, - .spicy = 10, - .dry = 10, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 20, - }, - { - .name = NAME_LUM_BERRY, - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .size = 34, - .maxYield = 2, - .minYield = 1, - .description1 = gBerryDescriptionPart1_Lum, - .description2 = gBerryDescriptionPart2_Lum, - .stageDuration = 12, - .spicy = 10, - .dry = 10, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 20, - }, - { - .name = NAME_SITRUS_BERRY, - .firmness = BERRY_FIRMNESS_VERY_HARD, - .size = 95, - .maxYield = 3, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Sitrus, - .description2 = gBerryDescriptionPart2_Sitrus, - .stageDuration = 6, - .spicy = 10, - .dry = 10, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 20, - }, - { - .name = NAME_FIGY_BERRY, - .firmness = BERRY_FIRMNESS_SOFT, - .size = 100, - .maxYield = 3, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Figy, - .description2 = gBerryDescriptionPart2_Figy, - .stageDuration = 6, - .spicy = 10, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 25, - }, - { - .name = NAME_WIKI_BERRY, - .firmness = BERRY_FIRMNESS_HARD, - .size = 115, - .maxYield = 3, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Wiki, - .description2 = gBerryDescriptionPart2_Wiki, - .stageDuration = 6, - .spicy = 0, - .dry = 10, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 25, - }, - { - .name = NAME_MAGO_BERRY, - .firmness = BERRY_FIRMNESS_HARD, - .size = 126, - .maxYield = 3, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Mago, - .description2 = gBerryDescriptionPart2_Mago, - .stageDuration = 6, - .spicy = 0, - .dry = 0, - .sweet = 10, - .bitter = 0, - .sour = 0, - .smoothness = 25, - }, - { - .name = NAME_AGUAV_BERRY, - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .size = 64, - .maxYield = 3, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Aguav, - .description2 = gBerryDescriptionPart2_Aguav, - .stageDuration = 6, - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 10, - .sour = 0, - .smoothness = 25, - }, - { - .name = NAME_IAPAPA_BERRY, - .firmness = BERRY_FIRMNESS_SOFT, - .size = 223, - .maxYield = 3, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Iapapa, - .description2 = gBerryDescriptionPart2_Iapapa, - .stageDuration = 6, - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 10, - .smoothness = 25, - }, - { - .name = NAME_RAZZ_BERRY, - .firmness = BERRY_FIRMNESS_VERY_HARD, - .size = 120, - .maxYield = 6, - .minYield = 3, - .description1 = gBerryDescriptionPart1_Razz, - .description2 = gBerryDescriptionPart2_Razz, - .stageDuration = 1, - .spicy = 10, - .dry = 10, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 20, - }, - { - .name = NAME_BLUK_BERRY, - .firmness = BERRY_FIRMNESS_SOFT, - .size = 108, - .maxYield = 6, - .minYield = 3, - .description1 = gBerryDescriptionPart1_Bluk, - .description2 = gBerryDescriptionPart2_Bluk, - .stageDuration = 1, - .spicy = 0, - .dry = 10, - .sweet = 10, - .bitter = 0, - .sour = 0, - .smoothness = 20, - }, - { - .name = NAME_NANAB_BERRY, - .firmness = BERRY_FIRMNESS_VERY_HARD, - .size = 77, - .maxYield = 6, - .minYield = 3, - .description1 = gBerryDescriptionPart1_Nanab, - .description2 = gBerryDescriptionPart2_Nanab, - .stageDuration = 1, - .spicy = 0, - .dry = 0, - .sweet = 10, - .bitter = 10, - .sour = 0, - .smoothness = 20, - }, - { - .name = NAME_WEPEAR_BERRY, - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .size = 74, - .maxYield = 6, - .minYield = 3, - .description1 = gBerryDescriptionPart1_Wepear, - .description2 = gBerryDescriptionPart2_Wepear, - .stageDuration = 1, - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 10, - .sour = 10, - .smoothness = 20, - }, - { - .name = NAME_PINAP_BERRY, - .firmness = BERRY_FIRMNESS_HARD, - .size = 80, - .maxYield = 6, - .minYield = 3, - .description1 = gBerryDescriptionPart1_Pinap, - .description2 = gBerryDescriptionPart2_Pinap, - .stageDuration = 1, - .spicy = 10, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 10, - .smoothness = 20, - }, - { - .name = NAME_POMEG_BERRY, - .firmness = BERRY_FIRMNESS_VERY_HARD, - .size = 135, - .maxYield = 6, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Pomeg, - .description2 = gBerryDescriptionPart2_Pomeg, - .stageDuration = 3, - .spicy = 10, - .dry = 0, - .sweet = 10, - .bitter = 10, - .sour = 0, - .smoothness = 20, - }, - { - .name = NAME_KELPSY_BERRY, - .firmness = BERRY_FIRMNESS_HARD, - .size = 150, - .maxYield = 6, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Kelpsy, - .description2 = gBerryDescriptionPart2_Kelpsy, - .stageDuration = 3, - .spicy = 0, - .dry = 10, - .sweet = 0, - .bitter = 10, - .sour = 10, - .smoothness = 20, - }, - { - .name = NAME_QUALOT_BERRY, - .firmness = BERRY_FIRMNESS_HARD, - .size = 110, - .maxYield = 6, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Qualot, - .description2 = gBerryDescriptionPart2_Qualot, - .stageDuration = 3, - .spicy = 10, - .dry = 0, - .sweet = 10, - .bitter = 0, - .sour = 10, - .smoothness = 20, - }, - { - .name = NAME_HONDEW_BERRY, - .firmness = BERRY_FIRMNESS_HARD, - .size = 162, - .maxYield = 6, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Hondew, - .description2 = gBerryDescriptionPart2_Hondew, - .stageDuration = 3, - .spicy = 10, - .dry = 10, - .sweet = 0, - .bitter = 10, - .sour = 0, - .smoothness = 20, - }, - { - .name = NAME_GREPA_BERRY, - .firmness = BERRY_FIRMNESS_SOFT, - .size = 149, - .maxYield = 6, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Grepa, - .description2 = gBerryDescriptionPart2_Grepa, - .stageDuration = 3, - .spicy = 0, - .dry = 10, - .sweet = 10, - .bitter = 0, - .sour = 10, - .smoothness = 20, - }, - { - .name = NAME_TAMATO_BERRY, - .firmness = BERRY_FIRMNESS_SOFT, - .size = 200, - .maxYield = 4, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Tamato, - .description2 = gBerryDescriptionPart2_Tamato, - .stageDuration = 6, - .spicy = 20, - .dry = 10, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 30, - }, - { - .name = NAME_CORNN_BERRY, - .firmness = BERRY_FIRMNESS_HARD, - .size = 75, - .maxYield = 4, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Cornn, - .description2 = gBerryDescriptionPart2_Cornn, - .stageDuration = 6, - .spicy = 0, - .dry = 20, - .sweet = 10, - .bitter = 0, - .sour = 0, - .smoothness = 30, - }, - { - .name = NAME_MAGOST_BERRY, - .firmness = BERRY_FIRMNESS_HARD, - .size = 140, - .maxYield = 4, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Magost, - .description2 = gBerryDescriptionPart2_Magost, - .stageDuration = 6, - .spicy = 0, - .dry = 0, - .sweet = 20, - .bitter = 10, - .sour = 0, - .smoothness = 30, - }, - { - .name = NAME_RABUTA_BERRY, - .firmness = BERRY_FIRMNESS_SOFT, - .size = 226, - .maxYield = 4, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Rabuta, - .description2 = gBerryDescriptionPart2_Rabuta, - .stageDuration = 6, - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 20, - .sour = 10, - .smoothness = 30, - }, - { - .name = NAME_NOMEL_BERRY, - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .size = 285, - .maxYield = 4, - .minYield = 2, - .description1 = gBerryDescriptionPart1_Nomel, - .description2 = gBerryDescriptionPart2_Nomel, - .stageDuration = 6, - .spicy = 10, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 20, - .smoothness = 30, - }, - { - .name = NAME_SPELON_BERRY, - .firmness = BERRY_FIRMNESS_SOFT, - .size = 133, - .maxYield = 2, - .minYield = 1, - .description1 = gBerryDescriptionPart1_Spelon, - .description2 = gBerryDescriptionPart2_Spelon, - .stageDuration = 18, - .spicy = 40, - .dry = 10, - .sweet = 0, - .bitter = 0, - .sour = 0, - .smoothness = 70, - }, - { - .name = NAME_PAMTRE_BERRY, - .firmness = BERRY_FIRMNESS_VERY_SOFT, - .size = 244, - .maxYield = 2, - .minYield = 1, - .description1 = gBerryDescriptionPart1_Pamtre, - .description2 = gBerryDescriptionPart2_Pamtre, - .stageDuration = 18, - .spicy = 0, - .dry = 40, - .sweet = 10, - .bitter = 0, - .sour = 0, - .smoothness = 70, - }, - { - .name = NAME_WATMEL_BERRY, - .firmness = BERRY_FIRMNESS_SOFT, - .size = 250, - .maxYield = 2, - .minYield = 1, - .description1 = gBerryDescriptionPart1_Watmel, - .description2 = gBerryDescriptionPart2_Watmel, - .stageDuration = 18, - .spicy = 0, - .dry = 0, - .sweet = 40, - .bitter = 10, - .sour = 0, - .smoothness = 70, - }, - { - .name = NAME_DURIN_BERRY, - .firmness = BERRY_FIRMNESS_HARD, - .size = 280, - .maxYield = 2, - .minYield = 1, - .description1 = gBerryDescriptionPart1_Durin, - .description2 = gBerryDescriptionPart2_Durin, - .stageDuration = 18, - .spicy = 0, - .dry = 0, - .sweet = 0, - .bitter = 40, - .sour = 10, - .smoothness = 70, - }, - { - .name = NAME_BELUE_BERRY, - .firmness = BERRY_FIRMNESS_VERY_SOFT, - .size = 300, - .maxYield = 2, - .minYield = 1, - .description1 = gBerryDescriptionPart1_Belue, - .description2 = gBerryDescriptionPart2_Belue, - .stageDuration = 18, - .spicy = 10, - .dry = 0, - .sweet = 0, - .bitter = 0, - .sour = 40, - .smoothness = 70, - }, - { - .name = NAME_LIECHI_BERRY, - .firmness = BERRY_FIRMNESS_VERY_HARD, - .size = 111, - .maxYield = 2, - .minYield = 1, - .description1 = gBerryDescriptionPart1_Liechi, - .description2 = gBerryDescriptionPart2_Liechi, - .stageDuration = 24, - .spicy = 40, - .dry = 0, - .sweet = 40, - .bitter = 0, - .sour = 10, - .smoothness = 80, - }, - { - .name = NAME_GANLON_BERRY, - .firmness = BERRY_FIRMNESS_VERY_HARD, - .size = 33, - .maxYield = 2, - .minYield = 1, - .description1 = gBerryDescriptionPart1_Ganlon, - .description2 = gBerryDescriptionPart2_Ganlon, - .stageDuration = 24, - .spicy = 0, - .dry = 40, - .sweet = 0, - .bitter = 40, - .sour = 0, - .smoothness = 80, - }, - { - .name = NAME_SALAC_BERRY, - .firmness = BERRY_FIRMNESS_VERY_HARD, - .size = 95, - .maxYield = 2, - .minYield = 1, - .description1 = gBerryDescriptionPart1_Salac, - .description2 = gBerryDescriptionPart2_Salac, - .stageDuration = 24, - .spicy = 0, - .dry = 0, - .sweet = 40, - .bitter = 0, - .sour = 40, - .smoothness = 80, - }, - { - .name = NAME_PETAYA_BERRY, - .firmness = BERRY_FIRMNESS_VERY_HARD, - .size = 237, - .maxYield = 2, - .minYield = 1, - .description1 = gBerryDescriptionPart1_Petaya, - .description2 = gBerryDescriptionPart2_Petaya, - .stageDuration = 24, - .spicy = 40, - .dry = 0, - .sweet = 0, - .bitter = 40, - .sour = 0, - .smoothness = 80, - }, - { - .name = NAME_APICOT_BERRY, - .firmness = BERRY_FIRMNESS_HARD, - .size = 75, - .maxYield = 2, - .minYield = 1, - .description1 = gBerryDescriptionPart1_Apicot, - .description2 = gBerryDescriptionPart2_Apicot, - .stageDuration = 24, - .spicy = 0, - .dry = 40, - .sweet = 0, - .bitter = 0, - .sour = 40, - .smoothness = 80, - }, - { - .name = NAME_LANSAT_BERRY, - .firmness = BERRY_FIRMNESS_SOFT, - .size = 97, - .maxYield = 2, - .minYield = 1, - .description1 = gBerryDescriptionPart1_Lansat, - .description2 = gBerryDescriptionPart2_Lansat, - .stageDuration = 24, - .spicy = 10, - .dry = 10, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 30, - }, - { - .name = NAME_STARF_BERRY, - .firmness = BERRY_FIRMNESS_SUPER_HARD, - .size = 153, - .maxYield = 2, - .minYield = 1, - .description1 = gBerryDescriptionPart1_Starf, - .description2 = gBerryDescriptionPart2_Starf, - .stageDuration = 24, - .spicy = 10, - .dry = 10, - .sweet = 10, - .bitter = 10, - .sour = 10, - .smoothness = 30, - }, - { - .name = NAME_ENIGMA_BERRY, - .firmness = BERRY_FIRMNESS_UNKNOWN, - .size = 0, - .maxYield = 2, - .minYield = 1, - .description1 = gBerryDescriptionPart1_Enigma, - .description2 = gBerryDescriptionPart2_Enigma, - .stageDuration = 24, - .spicy = 40, - .dry = 40, - .sweet = 40, - .bitter = 40, - .sour = 40, - .smoothness = 40, - }, -}; - -const struct BerryTree gBlankBerryTree = {0}; - -extern u8 BerryTreeScript; -extern u16 gScriptLastTalked; -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; -extern u16 gSpecialVar_0x8006; - -// unused -void ClearEnigmaBerries(void) -{ - CpuFill16(0, &gSaveBlock1.enigmaBerry, sizeof(gSaveBlock1.enigmaBerry)); -} - -void SetEnigmaBerry(u8 *src) -{ - u32 i; - u8 *dest = (u8*)&gSaveBlock1.enigmaBerry; - - for (i = 0; i < sizeof(gSaveBlock1.enigmaBerry); i++) - dest[i] = src[i]; - - gSaveBlock1.enigmaBerry.berry.description1 = gSaveBlock1.enigmaBerry.description1; - gSaveBlock1.enigmaBerry.berry.description2 = gSaveBlock1.enigmaBerry.description2; -} - -u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) -{ - const u8 *description1; - const u8 *description2; - u32 i; - u32 checksum; - u8 *dest; - - description1 = gSaveBlock1.enigmaBerry.berry.description1; - description2 = gSaveBlock1.enigmaBerry.berry.description2; - gSaveBlock1.enigmaBerry.berry.description1 = 0; - gSaveBlock1.enigmaBerry.berry.description2 = 0; - - dest = (u8*)enigmaBerry; - checksum = 0; - for (i = 0; i < ((u32)&gSaveBlock1.enigmaBerry.checksum - (u32)&gSaveBlock1.enigmaBerry); i++) - { - checksum += dest[i]; - } - - gSaveBlock1.enigmaBerry.berry.description1 = description1; - gSaveBlock1.enigmaBerry.berry.description2 = description2; - - return checksum; -} - -bool32 IsEnigmaBerryValid(void) -{ - if (!gSaveBlock1.enigmaBerry.berry.stageDuration) - return FALSE; - if (!gSaveBlock1.enigmaBerry.berry.maxYield) - return FALSE; - if (GetEnigmaBerryChecksum(&gSaveBlock1.enigmaBerry) != gSaveBlock1.enigmaBerry.checksum) - return FALSE; - return TRUE; -} - -const struct Berry *GetBerryInfo(u8 berry) -{ - if (berry == 0x2B && IsEnigmaBerryValid()) - return &gSaveBlock1.enigmaBerry.berry; - else - { - if (berry == 0 || berry > 0x2B) - berry = 1; - return &gBerries[berry - 1]; - } -} - -struct BerryTree *GetBerryTreeInfo(u8 id) -{ - return &gSaveBlock1.berryTrees[id]; -} - -bool32 FieldObjectInteractionWaterBerryTree(void) -{ - struct BerryTree *tree = GetBerryTreeInfo(FieldObjectGetBerryTreeId(gSelectedMapObject)); - - switch (tree->stage) - { - case 1: - tree->watered1 = TRUE; - break; - case 2: - tree->watered2 = TRUE; - break; - case 3: - tree->watered3 = TRUE; - break; - case 4: - tree->watered4 = TRUE; - break; - default: - return FALSE; - } - return TRUE; -} - -bool8 IsPlayerFacingPlantedBerryTree(void) -{ - if (GetFieldObjectScriptPointerForComparison() == &BerryTreeScript - && GetStageByBerryTreeId(FieldObjectGetBerryTreeId(gSelectedMapObject)) == 0) - return TRUE; - else - return FALSE; -} - -bool8 TryToWaterBerryTree(void) -{ - if (GetFieldObjectScriptPointerForComparison() != &BerryTreeScript) - return FALSE; - else - return FieldObjectInteractionWaterBerryTree(); -} - -void ClearBerryTrees(void) -{ - int i; - struct SaveBlock1 *saveBlock1 = &gSaveBlock1; - struct BerryTree berryTree = gBlankBerryTree; - - for (i = 0; i < (u8)ARRAY_COUNT(saveBlock1->berryTrees); i++) // casting to u8 fixes a mismatched signed compare. what - saveBlock1->berryTrees[i] = berryTree; -} - -bool32 BerryTreeGrow(struct BerryTree *tree) -{ - if (tree->growthSparkle) - return FALSE; - switch (tree->stage) - { - case 0: - return FALSE; - case 4: - tree->berryYield = CalcBerryYield(tree); - case 1: - case 2: - case 3: - tree->stage++; - break; - case 5: - tree->watered1 = 0; - tree->watered2 = 0; - tree->watered3 = 0; - tree->watered4 = 0; - tree->berryYield = 0; - tree->stage = 2; - if (++tree->regrowthCount == 10) - *tree = gBlankBerryTree; - break; - } - return TRUE; -} - -void BerryTreeTimeUpdate(s32 minutes) -{ - int i; - struct BerryTree *tree; - - for (i = 0; i < (u8)ARRAY_COUNT(gSaveBlock1.berryTrees); i++) - { - tree = &gSaveBlock1.berryTrees[i]; - - if (tree->berry && tree->stage && !tree->growthSparkle) - { - if (minutes >= GetStageDurationByBerryType(tree->berry) * 71) - { - *tree = gBlankBerryTree; - } - else - { - s32 time = minutes; - - while (time != 0) - { - if (tree->minutesUntilNextStage > time) - { - tree->minutesUntilNextStage -= time; - break; - } - time -= tree->minutesUntilNextStage; - tree->minutesUntilNextStage = GetStageDurationByBerryType(tree->berry); - if (!BerryTreeGrow(tree)) - break; - if (tree->stage == 5) - tree->minutesUntilNextStage *= 4; - } - } - } - } -} - -void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle) -{ - struct BerryTree *tree = GetBerryTreeInfo(id); - - *tree = gBlankBerryTree; - tree->berry = berry; - tree->minutesUntilNextStage = GetStageDurationByBerryType(berry); - tree->stage = stage; - if (stage == 5) - { - tree->berryYield = CalcBerryYield(tree); - tree->minutesUntilNextStage *= 4; - } - if (!sparkle) - { - tree->growthSparkle = TRUE; - } -} - -void RemoveBerryTree(u8 id) -{ - gSaveBlock1.berryTrees[id] = gBlankBerryTree; -} - -u8 GetBerryTypeByBerryTreeId(u8 id) -{ - return gSaveBlock1.berryTrees[id].berry; -} - -u8 GetStageByBerryTreeId(u8 id) -{ - return gSaveBlock1.berryTrees[id].stage; -} - -u8 ItemIdToBerryType(u16 item) -{ - u16 berry = item - FIRST_BERRY; - - if (berry > LAST_BERRY - FIRST_BERRY) - return 1; - else - return item - FIRST_BERRY + 1; -} - -u16 BerryTypeToItemId(u16 berry) -{ - u16 item = berry - 1; - - if (item > LAST_BERRY - FIRST_BERRY) - return FIRST_BERRY; - else - return berry + FIRST_BERRY - 1; -} - -void GetBerryNameByBerryType(u8 berry, u8 *string) -{ - memcpy(string, GetBerryInfo(berry)->name, BERRY_NAME_LENGTH); - string[BERRY_NAME_LENGTH] = EOS; -} - -void ResetBerryTreeSparkleFlag(u8 id) -{ - GetBerryTreeInfo(id)->growthSparkle = 0; -} - -u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree) -{ - u8 count = 0; - - if (tree->watered1) - count++; - if (tree->watered2) - count++; - if (tree->watered3) - count++; - if (tree->watered4) - count++; - return count; -} - -u8 GetNumStagesWateredByBerryTreeId(u8 id) -{ - return BerryTreeGetNumStagesWatered(GetBerryTreeInfo(id)); -} - -u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water) -{ - u32 randMin; - u32 randMax; - u32 rand; - u32 extraYield; - - if (water == 0) - return min; - else - { - randMin = (max - min) * (water - 1); - randMax = (max - min) * (water); - rand = randMin + Random() % (randMax - randMin + 1); - - if ((rand & 3) > 1) - extraYield = rand / 4 + 1; - else - extraYield = rand / 4; - return extraYield + min; - } -} - -u8 CalcBerryYield(struct BerryTree *tree) -{ - const struct Berry *berry = GetBerryInfo(tree->berry); - u8 min = berry->minYield; - u8 max = berry->maxYield; - - return CalcBerryYieldInternal(max, min, BerryTreeGetNumStagesWatered(tree)); -} - -u8 GetBerryCountByBerryTreeId(u8 id) -{ - return gSaveBlock1.berryTrees[id].berryYield; -} - -u16 GetStageDurationByBerryType(u8 berry) -{ - return GetBerryInfo(berry)->stageDuration * 60; -} - -void FieldObjectInteractionGetBerryTreeData(void) -{ - u8 id; - u8 berry; - u8 unk; - u8 group; - u8 num; - - id = FieldObjectGetBerryTreeId(gSelectedMapObject); - berry = GetBerryTypeByBerryTreeId(id); - ResetBerryTreeSparkleFlag(id); - unk = gScriptLastTalked; - num = gSaveBlock1.location.mapNum; - group = gSaveBlock1.location.mapGroup; - if (sub_8060234(unk, num, group)) - gSpecialVar_0x8004 = 0xFF; - else - gSpecialVar_0x8004 = GetStageByBerryTreeId(id); - gSpecialVar_0x8005 = GetNumStagesWateredByBerryTreeId(id); - gSpecialVar_0x8006 = GetBerryCountByBerryTreeId(id); - GetBerryNameByBerryType(berry, gStringVar1); -} - -void sub_80B4EE4(void) -{ - SetMainCallback2(sub_80A68CC); -} - -void FieldObjectInteractionPlantBerryTree(void) -{ - u8 berry = ItemIdToBerryType(gScriptItemId); - - PlantBerryTree(FieldObjectGetBerryTreeId(gSelectedMapObject), berry, 1, TRUE); - FieldObjectInteractionGetBerryTreeData(); -} - -void FieldObjectInteractionPickBerryTree(void) -{ - u8 id = FieldObjectGetBerryTreeId(gSelectedMapObject); - u8 berry = GetBerryTypeByBerryTreeId(id); - - gSpecialVar_0x8004 = AddBagItem(BerryTypeToItemId(berry), GetBerryCountByBerryTreeId(id)); -} - -void FieldObjectInteractionRemoveBerryTree(void) -{ - RemoveBerryTree(FieldObjectGetBerryTreeId(gSelectedMapObject)); - sub_8060288(gScriptLastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); -} - -u8 PlayerHasBerries(void) -{ - return IsBagPocketNonEmpty(BAG_BERRIES); -} - -void ResetBerryTreeSparkleFlags(void) -{ - s16 cam_left; - s16 cam_top; - s16 left; - s16 top; - s16 right; - s16 bottom; - int i; - - GetCameraCoords(&cam_left, &cam_top); - left = cam_left; - top = cam_top + 3; - right = cam_left + 14; - bottom = top + 8; - for (i = 0; i < (u8)ARRAY_COUNT(gSaveBlock1.mapObjects); i++) - { - if (gMapObjects[i].active && gMapObjects[i].animPattern == 12) - { - cam_left = gMapObjects[i].coords2.x; - cam_top = gMapObjects[i].coords2.y; - if (left <= cam_left && cam_left <= right && top <= cam_top && cam_top <= bottom) - ResetBerryTreeSparkleFlag(gMapObjects[i].trainerRange_berryTreeId); - } - } -} diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c deleted file mode 100644 index ff430e7b2..000000000 --- a/src/berry_tag_screen.c +++ /dev/null @@ -1,580 +0,0 @@ -#include "global.h" -#include "berry_tag_screen.h" -#include "berry.h" -#include "decompress.h" -#include "field_map_obj.h" -#include "item_menu.h" -#include "items.h" -#include "item_use.h" -#include "main.h" -#include "menu.h" -#include "menu_helpers.h" -#include "palette.h" -#include "rom4.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "text.h" - -#define OFFSET_7B (123) -#define FIRST_BERRY ITEM_CHERI_BERRY - -struct Struct2000000 -{ - /*0x00*/ u8 filler_0[0x1FFFF]; - /*0x1FFFF*/ u8 var_1FFFF; -}; - -extern struct Struct2000000 unk_2000000; -extern u16 gUnknown_030041B4; - -static EWRAM_DATA u8 gUnknown_0203932C = 0; -static EWRAM_DATA s16 gUnknown_0203932E[5] = {0}; - -extern const struct CompressedSpriteSheet gUnknown_083C1F74; -extern const struct CompressedSpritePalette gUnknown_083C1F7C; - -extern u8 gBerryCheck_Gfx[]; -extern u8 gBerryCheck_Pal[]; -extern u8 gUnknown_08E788E4[]; -extern u8 gUnknown_08E78A84[]; - -static const u8 *const gUnknown_0841192C[] = -{ - ContestStatsText_VerySoft, - ContestStatsText_Soft, - ContestStatsText_Hard, - ContestStatsText_VeryHard, - ContestStatsText_SuperHard, -}; - -static void sub_8146014(void); -static void sub_814602C(void); -static bool8 sub_8146058(void); -static void sub_8146288(void); -static bool8 sub_81462B8(void); -static void sub_814640C(u8 taskId); -static void sub_8146440(u8 taskId); -static void sub_8146480(u8 taskid); -static void sub_81464E4(void); -static void sub_8146600(u8 berry); -// static void sub_81466A0(void); -static void sub_81466E8(u8 taskId, s8 direction); -// static void sub_8146798(u8 berry); -static void sub_8146810(s8 berry); -static void sub_81468BC(void); - -static void sub_8146014(void) -{ - AnimateSprites(); - BuildOamBuffer(); - RunTasks(); - UpdatePaletteFade(); -} - -static void sub_814602C(void) -{ - REG_BG0VOFS = gUnknown_030041B4; - REG_BG1VOFS = gUnknown_030041B4; - - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -static bool8 sub_8146058(void) -{ - u8 berry; - u16 backup; - - switch (gMain.state) - { - case 0: - sub_80F9438(); - sub_80F9368(); - sub_8146288(); - REG_BLDCNT = 0; - gMain.state += 1; - break; - case 1: - ResetPaletteFade(); - gPaletteFade.bufferTransferDisabled = 1; - gMain.state += 1; - break; - case 2: - ResetSpriteData(); - gMain.state += 1; - break; - case 3: - SetUpWindowConfig(&gWindowConfig_81E6E18); - gMain.state += 1; - break; - case 4: - MultistepInitMenuWindowBegin(&gWindowConfig_81E6E18); - gMain.state += 1; - break; - case 5: - if (!MultistepInitMenuWindowContinue()) - break; - unk_2000000.var_1FFFF = 0; - gMain.state += 1; - break; - case 6: - if (!sub_81462B8()) - break; - unk_2000000.var_1FFFF = 0; - gMain.state += 1; - break; - case 7: - sub_81464E4(); - gMain.state += 1; - break; - case 8: - berry = gScriptItemId + OFFSET_7B; - gUnknown_0203932C = CreateBerrySprite(berry, 56, 64); - gMain.state += 1; - break; - case 9: - sub_8146600(gScriptItemId + OFFSET_7B); - gMain.state += 1; - break; - case 10: - backup = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = backup; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - SetVBlankCallback(sub_814602C); - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP; - gMain.state += 1; - break; - case 11: - if (sub_8055870() == TRUE) - break; - gMain.state += 1; - break; - case 12: - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - gPaletteFade.bufferTransferDisabled = 0; - SetMainCallback2(sub_8146014); - return TRUE; - } - - return FALSE; -} - -void BerryTagScreen_814625C(u8 taskId) -{ - do - { - if (sub_8146058() == TRUE) - { - CreateTask(sub_8146480, 0); - return; - } - } while (sub_80F9344() != TRUE); -} - -static void sub_8146288(void) -{ - REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG2CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; - gUnknown_030041B4 = 0; -} - -bool8 sub_81462B8(void) -{ - u16 i; - void *addr; - - switch (unk_2000000.var_1FFFF) - { - case 0: - LZDecompressVram(gBerryCheck_Gfx, (void *)VRAM); - unk_2000000.var_1FFFF += 1; - break; - case 1: - LZDecompressVram(gUnknown_08E788E4, (void *)VRAM + 0x2800); - unk_2000000.var_1FFFF += 1; - break; - case 2: - LZDecompressVram(gUnknown_08E78A84, (void *)VRAM + 0x3000); - unk_2000000.var_1FFFF += 1; - break; - case 3: - for (i = 0; i < 0x400; i++) - { - if (gSaveBlock2.playerGender == MALE) - gBGTilemapBuffers[2][i] = 0x4042; - else - gBGTilemapBuffers[2][i] = 0x5042; - } - addr = (void *)(VRAM + 0x3800); - DmaCopy16(3, gBGTilemapBuffers[2], addr, 0x800); - unk_2000000.var_1FFFF += 1; - break; - case 4: - LoadCompressedPalette(gBerryCheck_Pal, 0, 96 * 2); - unk_2000000.var_1FFFF += 1; - break; - case 5: - LoadCompressedObjectPic(&gUnknown_083C1F74); - unk_2000000.var_1FFFF += 1; - break; - case 6: - LoadCompressedObjectPalette(&gUnknown_083C1F7C); - unk_2000000.var_1FFFF = 0; - return TRUE; - } - - return FALSE; -} - -static void sub_814640C(u8 taskId) -{ - if (!gPaletteFade.active) - { - SetMainCallback2(sub_80A5B40); - sub_80A7DD4(); - gpu_pal_allocator_reset__manage_upper_four(); - DestroyTask(taskId); - } -} - -static void sub_8146440(u8 taskId) -{ - PlaySE(SE_SELECT); - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gTasks[taskId].func = sub_814640C; -} - -static void sub_8146480(u8 taskid) -{ - if (!gPaletteFade.active) - { - if ((gMain.newAndRepeatedKeys & (DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN)) == DPAD_UP) - sub_81466E8(taskid, -1); - if ((gMain.newAndRepeatedKeys & (DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN)) == DPAD_DOWN) - sub_81466E8(taskid, 1); - if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) - sub_8146440(taskid); - } -} - -static void sub_81464E4(void) -{ - const struct Berry *berryInfo; -#ifdef UNITS_IMPERIAL - u32 size; - s32 sizeMajor; - s32 sizeMinor; -#endif -#if GERMAN - u8 buffer[16]; -#endif - - berryInfo = GetBerryInfo(gScriptItemId + OFFSET_7B + 1); - - ConvertIntToDecimalStringN(gStringVar1, gScriptItemId - FIRST_BERRY + 1, STR_CONV_MODE_LEADING_ZEROS, 2); - MenuPrint(gStringVar1, 12, 4); - -#if ENGLISH - MenuPrint(berryInfo->name, 14, 4); -#elif GERMAN - StringCopy(buffer, berryInfo->name); - StringAppend(buffer, gOtherText_Berry2); - MenuPrint(buffer, 14, 4); -#endif - - MenuPrint(berryInfo->description1, 4, 14); - MenuPrint(berryInfo->description2, 4, 16); - -#ifdef UNITS_IMPERIAL - size = (berryInfo->size * 1000) / 254; - if (size % 10 >= 5) - size += 10; - sizeMinor = (size % 100) / 10; - sizeMajor = size / 100; -#endif - - MenuPrint(gOtherText_Size, 11, 7); - if (berryInfo->size != 0) - { -#ifdef UNITS_IMPERIAL - ConvertIntToDecimalStringN(gStringVar1, sizeMajor, STR_CONV_MODE_LEFT_ALIGN, 2); - ConvertIntToDecimalStringN(gStringVar2, sizeMinor, STR_CONV_MODE_LEFT_ALIGN, 2); -#else - ConvertIntToDecimalStringN(gStringVar1, berryInfo->size / 10, STR_CONV_MODE_LEFT_ALIGN, 2); - ConvertIntToDecimalStringN(gStringVar2, berryInfo->size % 10, STR_CONV_MODE_LEFT_ALIGN, 2); -#endif - MenuPrint(gContestStatsText_Unknown1, 16, 7); - } - else - { - MenuPrint(gOtherText_ThreeQuestions2, 16, 7); - } - - MenuPrint(gOtherText_Firm, 11, 9); - if (berryInfo->firmness != 0) - MenuPrint(gUnknown_0841192C[berryInfo->firmness - 1], 16, 9); - else - MenuPrint(gOtherText_ThreeQuestions2, 16, 9); -} - -static void sub_8146600(u8 berry) -{ - const struct Berry *berryInfo; - u16 i; - - berryInfo = GetBerryInfo(berry + 1); - for (i = 0; i < 5; i++) - gUnknown_0203932E[i] = (u16)gUnknown_0203932E[i] | 0xFFFF; - - // argument is the center of the circle - if (berryInfo->spicy) - gUnknown_0203932E[0] = sub_80A7E5C(48); - if (berryInfo->dry) - gUnknown_0203932E[1] = sub_80A7E5C(88); - if (berryInfo->sweet) - gUnknown_0203932E[2] = sub_80A7E5C(128); - if (berryInfo->bitter) - gUnknown_0203932E[3] = sub_80A7E5C(168); - if (berryInfo->sour) - gUnknown_0203932E[4] = sub_80A7E5C(208); -} - -void sub_81466A0(void) -{ - u16 i; - - for (i = 0; i < 5; i++) - { - if (gUnknown_0203932E[i] != -1) - { - DestroySprite(&gSprites[gUnknown_0203932E[i]]); - gUnknown_0203932E[i] = -1; - } - } -} - -__attribute__((naked)) -static void sub_81466E8(u8 taskId, s8 direction) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - lsls r1, 24\n\ - lsrs r2, r1, 24\n\ - lsls r0, r7, 2\n\ - adds r0, r7\n\ - lsls r0, 3\n\ - ldr r1, _08146748 @ =gTasks + 0x8\n\ - adds r6, r0, r1\n\ - ldr r4, _0814674C @ =gBagPocketScrollStates\n\ - movs r0, 0xC\n\ - adds r0, r4\n\ - mov r8, r0\n\ - ldrb r1, [r0, 0x1]\n\ - ldrb r0, [r4, 0xC]\n\ - adds r1, r0\n\ - cmp r1, 0\n\ - bne _08146718\n\ - lsls r0, r2, 24\n\ - cmp r0, 0\n\ - blt _0814678C\n\ -_08146718:\n\ - adds r0, r1, 0x1\n\ - lsls r5, r2, 24\n\ - mov r1, r8\n\ - ldrb r1, [r1, 0x2]\n\ - cmp r0, r1\n\ - bne _08146728\n\ - cmp r5, 0\n\ - bgt _0814678C\n\ -_08146728:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - mov r2, r8\n\ - ldrb r3, [r2, 0x1]\n\ - ldrb r4, [r4, 0xC]\n\ - mov r12, r4\n\ - adds r0, r3, r4\n\ - asrs r2, r5, 24\n\ - adds r1, r0, r2\n\ - cmp r1, 0\n\ - bge _08146750\n\ - negs r0, r0\n\ - strh r0, [r6, 0x2]\n\ - b _08146766\n\ - .align 2, 0\n\ -_08146748: .4byte gTasks + 0x8\n\ -_0814674C: .4byte gBagPocketScrollStates\n\ -_08146750:\n\ - mov r4, r8\n\ - ldrb r0, [r4, 0x2]\n\ - cmp r1, r0\n\ - blt _08146764\n\ - subs r0, r3\n\ - mov r1, r12\n\ - subs r0, r1\n\ - subs r0, 0x1\n\ - strh r0, [r6, 0x2]\n\ - b _08146766\n\ -_08146764:\n\ - strh r2, [r6, 0x2]\n\ -_08146766:\n\ - ldr r0, _08146780 @ =gTasks\n\ - lsls r1, r7, 2\n\ - adds r1, r7\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldr r0, _08146784 @ =sub_8146798\n\ - str r0, [r1]\n\ - cmp r5, 0\n\ - bge _08146788\n\ - movs r2, 0x10\n\ - negs r2, r2\n\ - adds r0, r2, 0\n\ - b _0814678A\n\ - .align 2, 0\n\ -_08146780: .4byte gTasks\n\ -_08146784: .4byte sub_8146798\n\ -_08146788:\n\ - movs r0, 0x10\n\ -_0814678A:\n\ - strh r0, [r6]\n\ -_0814678C:\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} - -void sub_8146798(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - gUnknown_030041B4 = (gUnknown_030041B4 + taskData[0]) & 0xFF; - if ((taskData[0] > 0 && gUnknown_030041B4 == 144) - || (taskData[0] < 0 && gUnknown_030041B4 == 112)) - { - sub_8146810(gTasks[taskId].data[1]); - sub_81468BC(); - } - if (gUnknown_030041B4 == 0) - { - gTasks[taskId].data[0] = gUnknown_030041B4; - gTasks[taskId].data[1] = gUnknown_030041B4; - gTasks[taskId].func = sub_8146480; - } -} - -__attribute__((naked)) -static void sub_8146810(s8 berry) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - adds r4, r3, 0\n\ - lsls r0, r3, 24\n\ - asrs r1, r0, 24\n\ - cmp r1, 0\n\ - ble _08146848\n\ - ldr r0, _08146840 @ =gBagPocketScrollStates\n\ - adds r4, r0, 0\n\ - adds r4, 0xC\n\ - ldrb r2, [r0, 0xC]\n\ - adds r1, r2, r1\n\ - adds r6, r0, 0\n\ - cmp r1, 0x7\n\ - ble _08146844\n\ - adds r0, r3, 0\n\ - adds r0, 0xF9\n\ - adds r0, r2, r0\n\ - ldrb r1, [r4, 0x1]\n\ - adds r0, r1\n\ - strb r0, [r4, 0x1]\n\ - movs r0, 0x7\n\ - b _0814686E\n\ - .align 2, 0\n\ -_08146840: .4byte gBagPocketScrollStates\n\ -_08146844:\n\ - adds r0, r2, r3\n\ - b _0814686E\n\ -_08146848:\n\ - ldr r0, _08146868 @ =gBagPocketScrollStates\n\ - adds r5, r0, 0\n\ - adds r5, 0xC\n\ - ldrb r2, [r0, 0xC]\n\ - adds r1, r2, r1\n\ - adds r6, r0, 0\n\ - cmp r1, 0\n\ - bge _0814686C\n\ - adds r0, r2, r3\n\ - ldrb r1, [r5, 0x1]\n\ - adds r0, r1\n\ - movs r1, 0\n\ - strb r0, [r5, 0x1]\n\ - strb r1, [r6, 0xC]\n\ - b _08146870\n\ - .align 2, 0\n\ -_08146868: .4byte gBagPocketScrollStates\n\ -_0814686C:\n\ - adds r0, r2, r4\n\ -_0814686E:\n\ - strb r0, [r6, 0xC]\n\ -_08146870:\n\ - ldr r2, _081468AC @ =gScriptItemId\n\ - movs r0, 0x3\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldrb r1, [r0, 0x1]\n\ - ldrb r0, [r0]\n\ - adds r1, r0\n\ - ldr r0, _081468B0 @ =gCurrentBagPocketItemSlots\n\ - ldr r0, [r0]\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrh r0, [r1]\n\ - strh r0, [r2]\n\ - ldr r0, _081468B4 @ =gUnknown_0203932C\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r1, _081468B8 @ =gSprites\n\ - adds r0, r1\n\ - bl DestroySprite\n\ - bl sub_81466A0\n\ - bl sub_80A7DD4\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_081468AC: .4byte gScriptItemId\n\ -_081468B0: .4byte gCurrentBagPocketItemSlots\n\ -_081468B4: .4byte gUnknown_0203932C\n\ -_081468B8: .4byte gSprites\n\ - .syntax divided\n"); -} - -static void sub_81468BC(void) -{ - MenuZeroFillWindowRect(0, 4, 29, 19); - sub_81464E4(); - - // center of berry sprite - gUnknown_0203932C = CreateBerrySprite(gScriptItemId + OFFSET_7B, 56, 64); - - sub_8146600(gScriptItemId + OFFSET_7B); -} diff --git a/src/bike.c b/src/bike.c deleted file mode 100644 index 58a4f38f4..000000000 --- a/src/bike.c +++ /dev/null @@ -1,1013 +0,0 @@ -#include "global.h" -#include "bike.h" -#include "field_map_obj.h" -#include "field_player_avatar.h" -#include "fieldmap.h" -#include "flags.h" -#include "global.fieldmap.h" -#include "metatile_behavior.h" -#include "rom4.h" -#include "songs.h" -#include "sound.h" - -extern u8 sub_80608A4(u8); - -extern u8 gUnknown_02039250; -extern u8 gUnknown_02039251; -extern u8 gUnknown_0202E854; - -static void MovePlayerOnMachBike(u8, u16, u16); -static u8 GetMachBikeTransition(u8 *); -static void MachBikeTransition_FaceDirection(u8); -static void MachBikeTransition_80E517C(u8); -static void MachBikeTransition_80E51C4(u8); -static void MachBikeTransition_80E5270(u8); -static void MovePlayerOnAcroBike(u8, u16, u16); -static u8 CheckMovementInputAcroBike(u8 *, u16, u16); -static u8 AcroBikeHandleInputNormal(u8 *, u16, u16); -static u8 AcroBikeHandleInputTurning(u8 *, u16, u16); -static u8 AcroBikeHandleInputWheelieStanding(u8 *, u16, u16); -static u8 AcroBikeHandleInputBunnyHop(u8 *, u16, u16); -static u8 AcroBikeHandleInputWheelieMoving(u8 *, u16, u16); -static u8 AcroBikeHandleInputState5(u8 *, u16, u16); -static u8 AcroBikeHandleInputState6(u8 *, u16, u16); -static void AcroBikeTransition_FaceDirection(u8); -static void AcroBikeTransition_80E5708(u8); -static void AcroBikeTransition_80E5744(u8); -static void AcroBikeTransition_NormalToWheelie(u8); -static void AcroBikeTransition_80E57F8(u8); -static void AcroBikeTransition_80E5834(u8); -static void AcroBikeTransition_80E5870(u8); -static void AcroBikeTransition_80E58AC(u8); -static void AcroBikeTransition_80E5920(u8); -static void AcroBikeTransition_80E5990(u8); -static void AcroBikeTransition_80E59A0(u8); -static void AcroBikeTransition_80E5A30(u8); -static void AcroBikeTransition_80E5AC0(u8); -static void sub_80E5B60(u16, u16); -static u8 sub_80E5C2C(void); -static void sub_80E5C7C(u8); -static void sub_80E5CB8(u8); -static u8 sub_80E5CF4(u16); -static u8 get_some_collision(u8); -static u8 sub_80E5DA0(struct MapObject *, s16, s16, u8, u8); -static bool8 IsRunningDisallowedByMetatile(u8); -static void sub_80E5E4C(); -static u8 CanBikeFaceDirOnMetatile(u8, u8); -static bool8 sub_80E5EC0(u8, u8); -static void sub_80E6024(void); - -static void (*const sMachBikeTransitions[])(u8) = -{ - MachBikeTransition_FaceDirection, - MachBikeTransition_80E517C, - MachBikeTransition_80E51C4, - MachBikeTransition_80E5270, -}; - -static void (*const gUnknown_083DB5A4[])(u8) = -{ - PlayerGoSpeed0, - sub_80593C4, - sub_80593F4, -}; - -static void (*const sAcroBikeTransitions[])(u8) = -{ - AcroBikeTransition_FaceDirection, - AcroBikeTransition_80E5708, - AcroBikeTransition_80E5744, - AcroBikeTransition_NormalToWheelie, - AcroBikeTransition_80E57F8, - AcroBikeTransition_80E5834, - AcroBikeTransition_80E5870, - AcroBikeTransition_80E58AC, - AcroBikeTransition_80E5920, - AcroBikeTransition_80E5990, - AcroBikeTransition_80E59A0, - AcroBikeTransition_80E5A30, - AcroBikeTransition_80E5AC0, -}; - -static u8 (*const sAcroBikeInputHandlers[])(u8 *, u16, u16) = -{ - AcroBikeHandleInputNormal, - AcroBikeHandleInputTurning, - AcroBikeHandleInputWheelieStanding, - AcroBikeHandleInputBunnyHop, - AcroBikeHandleInputWheelieMoving, - AcroBikeHandleInputState5, - AcroBikeHandleInputState6, -}; - -const u16 gMachBikeSpeeds[] = {SPEED_NORMAL, SPEED_FAST, SPEED_FASTEST}; -static const u8 Unknown_3DB606[] = {4, 0}; - -static const struct UnknownStruct1 gUnknown_083DB608[] = -{ - {1, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 1}, - {2, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 2}, - {3, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 3}, - {4, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 4}, -}; - -void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys) -{ - if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE) - MovePlayerOnMachBike(direction, newKeys, heldKeys); - else - MovePlayerOnAcroBike(direction, newKeys, heldKeys); -} - -static void MovePlayerOnMachBike(u8 direction, u16 newKeys, u16 heldKeys) -{ - sMachBikeTransitions[GetMachBikeTransition(&direction)](direction); -} - -static u8 GetMachBikeTransition(u8 *ptr) -{ - u8 direction = player_get_direction_upper_nybble(); - - if (*ptr == 0) - { - *ptr = direction; - if (gPlayerAvatar.unkB == 0) - { - gPlayerAvatar.running2 = 0; - return 0; - } - gPlayerAvatar.running2 = 2; - return 3; - } - - if (*ptr != direction && gPlayerAvatar.running2 != 2) - { - if (gPlayerAvatar.unkB != 0) - { - *ptr = direction; - gPlayerAvatar.running2 = 2; - return 3; - } - gPlayerAvatar.running2 = 1; - return 1; - } - else - { - gPlayerAvatar.running2 = 2; - return 2; - } -} - -static void MachBikeTransition_FaceDirection(u8 direction) -{ - PlayerFaceDirection(direction); - sub_80E6024(); -} - -static void MachBikeTransition_80E517C(u8 direction) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E)) - { - PlayerTurnInPlace(direction); - sub_80E6024(); - } - else - { - MachBikeTransition_FaceDirection(playerMapObj->mapobj_unk_18); - } -} - -static void MachBikeTransition_80E51C4(u8 direction) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - u8 collision; - - if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) - { - if (gPlayerAvatar.unkB) - MachBikeTransition_80E5270(playerMapObj->placeholder18); - else - MachBikeTransition_FaceDirection(playerMapObj->placeholder18); - } - else - { - collision = get_some_collision(direction); - if (collision > 0 && collision < 12) - { - if (collision == COLLISION_LEDGE_JUMP) - { - PlayerJumpLedge(direction); - } - else - { - sub_80E6024(); - if (collision < 5 || collision > 8) - PlayerOnBikeCollide(direction); - } - } - else - { - gUnknown_083DB5A4[gPlayerAvatar.bikeFrameCounter](direction); - gPlayerAvatar.unkB = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // same as dividing by 2, but compiler is insistent on >> 1 - if (gPlayerAvatar.bikeFrameCounter < 2) // do not go faster than the last element in the mach bike array - gPlayerAvatar.bikeFrameCounter++; - } - } -} - -static void MachBikeTransition_80E5270(u8 var) -{ - u8 collision; - - if (gPlayerAvatar.unkB != 0) - gPlayerAvatar.bikeFrameCounter = --gPlayerAvatar.unkB; - - collision = get_some_collision(var); - - if (collision > 0 && collision < 12) - { - if (collision == COLLISION_LEDGE_JUMP) - { - PlayerJumpLedge(var); - } - else - { - sub_80E6024(); - if (collision < 5 || collision > 8) - PlayerOnBikeCollide(var); - } - } - else - { - gUnknown_083DB5A4[gPlayerAvatar.bikeFrameCounter](var); - } -} - -static void MovePlayerOnAcroBike(u8 newDirection, u16 newKeys, u16 heldKeys) -{ - sAcroBikeTransitions[CheckMovementInputAcroBike(&newDirection, newKeys, heldKeys)](newDirection); -} - -static u8 CheckMovementInputAcroBike(u8 *newDirection, u16 newKeys, u16 heldKeys) -{ - return sAcroBikeInputHandlers[gPlayerAvatar.acroBikeState](newDirection, newKeys, heldKeys); -} - -static u8 AcroBikeHandleInputNormal(u8 *newDirection, u16 newKeys, u16 heldKeys) -{ - u8 direction = player_get_direction_upper_nybble(); - - gPlayerAvatar.bikeFrameCounter = 0; - if (*newDirection == DIR_NONE) - { - if (newKeys & B_BUTTON) - { - //We're standing still with the B button held. - //Do a wheelie. - *newDirection = direction; - gPlayerAvatar.running2 = 0; - gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; - return ACRO_TRANS_NORMAL_TO_WHEELIE; - } - else - { - *newDirection = direction; - gPlayerAvatar.running2 = 0; - return ACRO_TRANS_FACE_DIRECTION; - } - } - if (*newDirection == direction && (heldKeys & B_BUTTON) && gPlayerAvatar.unkB == 0) - { - gPlayerAvatar.unkB++; - gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_MOVING; - return 11; - } - if (*newDirection != direction && gPlayerAvatar.running2 != 2) - { - gPlayerAvatar.acroBikeState = ACRO_STATE_TURNING; - gPlayerAvatar.unk9 = *newDirection; - gPlayerAvatar.running2 = 0; - return CheckMovementInputAcroBike(newDirection, newKeys, heldKeys); - } - gPlayerAvatar.running2 = 2; - return 2; -} - -static u8 AcroBikeHandleInputTurning(u8 *newDirection, u16 newKeys, u16 heldKeys) -{ - u8 direction; - - *newDirection = gPlayerAvatar.unk9; - gPlayerAvatar.bikeFrameCounter++; - - //Wait 6 frames before actually changing direction - if (gPlayerAvatar.bikeFrameCounter > 6) - { - gPlayerAvatar.running2 = 1; - gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - sub_80E6024(); - return 1; - } - direction = player_get_direction_upper_nybble(); - if (*newDirection == sub_80E5C2C()) - { - sub_80E6024(); - gPlayerAvatar.unkB = 1; - if (*newDirection == GetOppositeDirection(direction)) - { - gPlayerAvatar.acroBikeState = ACRO_STATE_6; - return 9; - } - else - { - gPlayerAvatar.running2 = 2; - gPlayerAvatar.acroBikeState = ACRO_STATE_5; - return 8; - } - } - *newDirection = direction; - return 0; -} - -static u8 AcroBikeHandleInputWheelieStanding(u8 *ptr, u16 newKeys, u16 heldKeys) -{ - u8 direction; - struct MapObject *playerMapObj; - - direction = player_get_direction_upper_nybble(); - playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - gPlayerAvatar.running2 = 0; - - if (heldKeys & B_BUTTON) - gPlayerAvatar.bikeFrameCounter++; - else - { - //B button was released. - gPlayerAvatar.bikeFrameCounter = 0; - if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) - { - //Go back to normal on flat ground - *ptr = direction; - gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - sub_80E6024(); - return 4; - } - } - if (gPlayerAvatar.bikeFrameCounter >= 40) - { - *ptr = direction; - gPlayerAvatar.acroBikeState = ACRO_STATE_BUNNY_HOP; - sub_80E6024(); - return 6; - } - if (*ptr == direction) - { - gPlayerAvatar.running2 = 2; - gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_MOVING; - sub_80E6024(); - return 10; - } - if (*ptr == 0) - { - *ptr = direction; - return 5; - } - gPlayerAvatar.running2 = 1; - return 5; -} - -static u8 AcroBikeHandleInputBunnyHop(u8 *ptr, u16 newKeys, u16 heldKeys) -{ - u8 direction; - struct MapObject *playerMapObj; - - direction = player_get_direction_upper_nybble(); - playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (!(heldKeys & B_BUTTON)) - { - //B button was released - sub_80E6024(); - if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) - { - //Do a standing wheelie on a bumpy slope - gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; - return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); - } - else - { - //Go back to normal on flat ground - *ptr = direction; - gPlayerAvatar.running2 = 0; - gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - return 4; - } - } - - //B Button is still held - - if (*ptr == DIR_NONE) - { - *ptr = direction; - gPlayerAvatar.running2 = 0; - return 6; - } - if (*ptr != direction && gPlayerAvatar.running2 != 2) - { - gPlayerAvatar.running2 = 1; - return 6; - } - gPlayerAvatar.running2 = 2; - return 7; -} - -static u8 AcroBikeHandleInputWheelieMoving(u8 *ptr, u16 newKeys, u16 heldKeys) -{ - u8 direction; - struct MapObject *playerMapObj; - - direction = player_get_direction_lower_nybble(); - playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (!(heldKeys & B_BUTTON)) - { - sub_80E6024(); - if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) - { - gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - if (*ptr == 0) - { - *ptr = direction; - gPlayerAvatar.running2 = 0; - return 4; - } - if (*ptr != direction && gPlayerAvatar.running2 != 2) - { - gPlayerAvatar.running2 = 0; - return 4; - } - gPlayerAvatar.running2 = 2; - return 12; - } - gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; - return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); - } - if (*ptr == 0) - { - *ptr = direction; - gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; - gPlayerAvatar.running2 = 0; - sub_80E6024(); - return 5; - } - if (direction != *ptr && gPlayerAvatar.running2 != 2) - { - gPlayerAvatar.running2 = 0; - return 5; - } - gPlayerAvatar.running2 = 2; - return 10; -} - -static u8 AcroBikeHandleInputState5(u8 *ptr, u16 newKeys, u16 heldKeys) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - playerMapObj->mapobj_bit_9 = 0; - FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18); - gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); -} - -static u8 AcroBikeHandleInputState6(u8 *ptr, u16 newKeys, u16 heldKeys) -{ - gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); -} - -static void AcroBikeTransition_FaceDirection(u8 direction) -{ - PlayerFaceDirection(direction); -} - -static void AcroBikeTransition_80E5708(u8 direction) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) - direction = playerMapObj->placeholder18; - PlayerFaceDirection(direction); -} - -static void AcroBikeTransition_80E5744(u8 direction) -{ - u8 collision; - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) - { - AcroBikeTransition_FaceDirection(playerMapObj->placeholder18); - return; - } - collision = get_some_collision(direction); - if (collision > 0 && collision < 12) - { - if (collision == COLLISION_LEDGE_JUMP) - PlayerJumpLedge(direction); - else if (collision < 5 || collision > 8) - PlayerOnBikeCollide(direction); - } - else - { - npc_use_some_d2s(direction); - } -} - -static void AcroBikeTransition_NormalToWheelie(u8 direction) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) - direction = playerMapObj->placeholder18; - PlayerStartWheelie(direction); -} - -static void AcroBikeTransition_80E57F8(u8 direction) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) - direction = playerMapObj->placeholder18; - sub_8059534(direction); -} - -static void AcroBikeTransition_80E5834(u8 direction) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) - direction = playerMapObj->placeholder18; - sub_8059504(direction); -} - -static void AcroBikeTransition_80E5870(u8 direction) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) - direction = playerMapObj->placeholder18; - sub_805954C(direction); -} - -static void AcroBikeTransition_80E58AC(u8 direction) -{ - u8 var; - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) - { - AcroBikeTransition_80E5870(playerMapObj->placeholder18); - return; - } - var = get_some_collision(direction); - //TODO: Try to get rid of this goto - if (var == 0 || var == 9) - { - goto derp; - } - else if (var == 6) - { - sub_8059594(direction); - } - else if (var < 5 || var > 8) - { - if (var <= 11) - { - AcroBikeTransition_80E5870(direction); - } - else - { - derp: - sub_8059570(direction); - } - } -} - -static void AcroBikeTransition_80E5920(u8 direction) -{ - u8 var; - struct MapObject *playerMapObj; - - var = get_some_collision(direction); - if (var != 0) - { - if (var == 7) - return; - if (var < 10) - { - AcroBikeTransition_80E5708(direction); - return; - } - if (sub_80E5EC0(var, direction) == 0) - { - AcroBikeTransition_80E5708(direction); - return; - } - } - playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - PlaySE(SE_JITE_PYOKO); - playerMapObj->mapobj_bit_9 = 1; - PlayerSetAnimId(sub_80608A4(direction), 2); -} - -static void AcroBikeTransition_80E5990(u8 direction) -{ - sub_80595B8(direction); -} - -static void AcroBikeTransition_80E59A0(u8 direction) -{ - u8 var; - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) - { - sub_8059504(playerMapObj->placeholder18); - return; - } - var = get_some_collision(direction); - if (var > 0 && var < 12) - { - if (var == 6) - { - sub_8059594(direction); - } - else if (var == 9) - { - sub_8059504(direction); - } - else if (var <= 4) - { - if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) - sub_8059504(direction); - else - sub_80595DC(direction); //hit wall? - } - return; - } - sub_8059618(direction); - gPlayerAvatar.running2 = 2; -} - -static void AcroBikeTransition_80E5A30(u8 direction) -{ - u8 var; - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) - { - PlayerStartWheelie(playerMapObj->placeholder18); - return; - } - var = get_some_collision(direction); - if (var > 0 && var < 12) - { - if (var == 6) - { - sub_8059594(direction); - } - else if (var == 9) - { - sub_8059504(direction); - } - else if (var <= 4) - { - if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) - sub_8059504(direction); - else - sub_80595DC(direction); //hit wall? - } - return; - } - sub_8059600(direction); - gPlayerAvatar.running2 = 2; -} - -static void AcroBikeTransition_80E5AC0(u8 direction) -{ - u8 var; - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) - { - sub_8059534(playerMapObj->placeholder18); - return; - } - var = get_some_collision(direction); - if (var > 0 && var < 12) - { - if (var == 6) - PlayerJumpLedge(direction); - else if (var < 5 || var > 8) - sub_8059534(direction); - return; - } - sub_8059630(direction); -} - -void sub_80E5B38(u16 a, u16 b) -{ - if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE) - sub_80E5B60(a, b); -} - -static void sub_80E5B60(u16 unused, u16 b) -{ - u8 var; - - var = sub_80E5CF4(b); - if (var == (gPlayerAvatar.unkC & 0xF)) - { - if (gPlayerAvatar.unk14[0] < 0xFF) - gPlayerAvatar.unk14[0]++; - } - else - { - sub_80E5C7C(var); - gPlayerAvatar.unkB = 0; - } - - var = b & 0xF; - if (var == (gPlayerAvatar.unk10 & 0xF)) - { - if (gPlayerAvatar.unk1C[0] < 0xFF) - gPlayerAvatar.unk1C[0]++; - } - else - { - sub_80E5CB8(var); - gPlayerAvatar.unkB = 0; - } -} - -static bool8 sub_80E5BC8(const u8 *a, const u8 *b) -{ - u8 i; - - for (i = 0; a[i] != 0; i++) - { - if (gPlayerAvatar.unk14[i] > a[i]) - return FALSE; - } - for (i = 0; b[i] != 0; i++) - { - if (gPlayerAvatar.unk1C[i] > b[i]) - return FALSE; - } - return TRUE; -} - -static u8 sub_80E5C2C(void) -{ - u32 i; - - for (i = 0; i < 4; i++) - { - const struct UnknownStruct1 *s = &gUnknown_083DB608[i]; - u32 r1 = gPlayerAvatar.unkC; - u32 r2 = gPlayerAvatar.unk10; - - r1 &= s->unk8; - r2 &= s->unkC; - if (r1 == s->unk0 && r2 == s->unk4 && sub_80E5BC8(s->unk10, s->unk14)) - return s->unk18; - } - return 0; -} - -static void sub_80E5C7C(u8 a) -{ - u8 i; - - gPlayerAvatar.unkC = (gPlayerAvatar.unkC << 4) | (a & 0xF); - - for (i = 7; i != 0; i--) - gPlayerAvatar.unk14[i] = gPlayerAvatar.unk14[i - 1]; - gPlayerAvatar.unk14[0] = 1; -} - -static void sub_80E5CB8(u8 a) -{ - u8 i; - - gPlayerAvatar.unk10 = (gPlayerAvatar.unk10 << 4) | (a & 0xF); - - for (i = 7; i != 0; i--) - gPlayerAvatar.unk1C[i] = gPlayerAvatar.unk1C[i - 1]; - gPlayerAvatar.unk1C[0] = 1; -} - -static u8 sub_80E5CF4(u16 a) -{ - if (a & 0x40) - return 2; - if (a & 0x80) - return 1; - if (a & 0x20) - return 3; - if (a & 0x10) - return 4; - return 0; -} - -static u8 get_some_collision(u8 direction) -{ - s16 x; - s16 y; - u8 metatitleBehavior; - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - x = playerMapObj->coords2.x; - y = playerMapObj->coords2.y; - MoveCoords(direction, &x, &y); - metatitleBehavior = MapGridGetMetatileBehaviorAt(x, y); - return sub_80E5DA0(playerMapObj, x, y, direction, metatitleBehavior); -} - -static u8 sub_80E5DA0(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior) -{ - u8 collision = CheckForFieldObjectCollision(mapObject, x, y, direction, metatitleBehavior); - - if (collision > 4) - return collision; - - if (collision == 0 && IsRunningDisallowedByMetatile(metatitleBehavior)) - collision = 2; - - if (collision) - sub_80E5E4C(); - - return collision; -} - -bool8 IsRunningDisallowed(u8 tile) -{ - if (IsRunningDisallowedByMetatile(tile) != FALSE || gMapHeader.mapType == MAP_TYPE_INDOOR) - return TRUE; - else - return FALSE; -} - -static bool8 IsRunningDisallowedByMetatile(u8 tile) -{ - if (MetatileBehavior_IsRunningDisallowed(tile)) - return TRUE; - if (MetatileBehavior_IsFortreeBridge(tile) && (PlayerGetZCoord() & 1) == 0) - return TRUE; - return FALSE; -} - -static void sub_80E5E4C(void) -{ - if (gUnknown_02039250 != 0 && gUnknown_02039251 < 100) - gUnknown_02039251++; -} - -static bool8 CanBikeFaceDirOnMetatile(u8 direction, u8 tile) -{ - if (direction == DIR_EAST || direction == DIR_WEST) - { - //Bike cannot face east or west on a vertical rail - if (MetatileBehavior_IsIsolatedVerticalRail(tile) - || MetatileBehavior_IsVerticalRail(tile)) - return FALSE; - } - else - { - //Bike cannot face north or south on a horizontal rail - if (MetatileBehavior_IsIsolatedHorizontalRail(tile) - || MetatileBehavior_IsHorizontalRail(tile)) - return FALSE; - } - return TRUE; -} - -static bool8 sub_80E5EC0(u8 var1, u8 direction) -{ - if (direction == DIR_NORTH || direction == DIR_SOUTH) - { - if (var1 == 10 || var1 == 12) - return FALSE; - } - else if (var1 == 11 || var1 == 13) - { - return FALSE; - } - - return TRUE; -} - -bool8 IsBikingDisallowedByPlayer(void) -{ - s16 x, y; - u8 tileBehavior; - - if (!(gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_4))) - { - PlayerGetDestCoords(&x, &y); - tileBehavior = MapGridGetMetatileBehaviorAt(x, y); - if (!IsRunningDisallowedByMetatile(tileBehavior)) - return FALSE; - } - return TRUE; -} - -bool8 player_should_look_direction_be_enforced_upon_movement(void) -{ - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE) != FALSE && MetatileBehavior_IsBumpySlope(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E) != FALSE) - return FALSE; - else - return TRUE; -} - -void GetOnOffBike(u8 var) -{ - gUnknown_0202E854 = 0; - - if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) - { - SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); - sav1_reset_battle_music_maybe(); - sub_8053E90(); - } - else - { - SetPlayerAvatarTransitionFlags(var); - sav1_set_battle_music_maybe(BGM_CYCLING); - sub_8053FB0(BGM_CYCLING); - } -} - -void BikeClearState(int var1, int var2) -{ - u8 i; - - gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - gPlayerAvatar.unk9 = 0; - gPlayerAvatar.bikeFrameCounter = 0; - gPlayerAvatar.unkB = 0; - gPlayerAvatar.unkC = var1; - gPlayerAvatar.unk10 = var2; - - for (i = 0; i < 8; i++) - gPlayerAvatar.unk14[i] = 0; - - for (i = 0; i < 8; i++) - gPlayerAvatar.unk1C[i] = 0; -} - -void sub_80E6010(u8 var) -{ - gPlayerAvatar.bikeFrameCounter = var; - gPlayerAvatar.unkB = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // lazy way of multiplying by 1.5. -} - -static void sub_80E6024(void) -{ - gPlayerAvatar.bikeFrameCounter = 0; - gPlayerAvatar.unkB = 0; -} - -s16 GetPlayerSpeed(void) -{ - // because the player pressed a direction, it won't ever return a speed of 0 since this function returns the player's current speed. - s16 machSpeeds[3]; - - memcpy(machSpeeds, gMachBikeSpeeds, sizeof(machSpeeds)); - - if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE) - return machSpeeds[gPlayerAvatar.bikeFrameCounter]; - else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE) - return SPEED_FASTER; - else if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_DASH)) - return SPEED_FAST; - else - return SPEED_NORMAL; -} - -void sub_80E6084(void) -{ - s16 x, y; - u8 tileBehavior; - - if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE) - { - PlayerGetDestCoords(&x, &y); - tileBehavior = MapGridGetMetatileBehaviorAt(x, y); - if (MetatileBehavior_IsBumpySlope(tileBehavior)) - { - gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; - sub_8059C94(player_get_direction_upper_nybble()); - } - } -} diff --git a/src/birch_pc.c b/src/birch_pc.c deleted file mode 100644 index 5fb6427c3..000000000 --- a/src/birch_pc.c +++ /dev/null @@ -1,114 +0,0 @@ -#include "global.h" -#include "event_data.h" -#include "field_message_box.h" -#include "pokedex.h" -#include "species.h" - -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; -extern u16 gSpecialVar_0x8006; - -extern const u8 gBirchDexRatingText_LessThan10[]; -extern const u8 gBirchDexRatingText_LessThan20[]; -extern const u8 gBirchDexRatingText_LessThan30[]; -extern const u8 gBirchDexRatingText_LessThan40[]; -extern const u8 gBirchDexRatingText_LessThan50[]; -extern const u8 gBirchDexRatingText_LessThan60[]; -extern const u8 gBirchDexRatingText_LessThan70[]; -extern const u8 gBirchDexRatingText_LessThan80[]; -extern const u8 gBirchDexRatingText_LessThan90[]; -extern const u8 gBirchDexRatingText_LessThan100[]; -extern const u8 gBirchDexRatingText_LessThan110[]; -extern const u8 gBirchDexRatingText_LessThan120[]; -extern const u8 gBirchDexRatingText_LessThan130[]; -extern const u8 gBirchDexRatingText_LessThan140[]; -extern const u8 gBirchDexRatingText_LessThan150[]; -extern const u8 gBirchDexRatingText_LessThan160[]; -extern const u8 gBirchDexRatingText_LessThan170[]; -extern const u8 gBirchDexRatingText_LessThan180[]; -extern const u8 gBirchDexRatingText_LessThan190[]; -extern const u8 gBirchDexRatingText_LessThan200[]; -extern const u8 gBirchDexRatingText_DexCompleted[]; - -bool16 ScriptGetPokedexInfo(void) -{ - if (gSpecialVar_0x8004 == 0) // is national dex not present? - { - gSpecialVar_0x8005 = GetHoennPokedexCount(0); - gSpecialVar_0x8006 = GetHoennPokedexCount(1); - } - else - { - gSpecialVar_0x8005 = GetNationalPokedexCount(0); - gSpecialVar_0x8006 = GetNationalPokedexCount(1); - } - - return IsNationalPokedexEnabled(); -} - -// This shows your Hoenn Pokedex rating and not your National Dex. -const u8 *GetPokedexRatingText(u16 count) -{ - if (count < 10) - return gBirchDexRatingText_LessThan10; - if (count < 20) - return gBirchDexRatingText_LessThan20; - if (count < 30) - return gBirchDexRatingText_LessThan30; - if (count < 40) - return gBirchDexRatingText_LessThan40; - if (count < 50) - return gBirchDexRatingText_LessThan50; - if (count < 60) - return gBirchDexRatingText_LessThan60; - if (count < 70) - return gBirchDexRatingText_LessThan70; - if (count < 80) - return gBirchDexRatingText_LessThan80; - if (count < 90) - return gBirchDexRatingText_LessThan90; - if (count < 100) - return gBirchDexRatingText_LessThan100; - if (count < 110) - return gBirchDexRatingText_LessThan110; - if (count < 120) - return gBirchDexRatingText_LessThan120; - if (count < 130) - return gBirchDexRatingText_LessThan130; - if (count < 140) - return gBirchDexRatingText_LessThan140; - if (count < 150) - return gBirchDexRatingText_LessThan150; - if (count < 160) - return gBirchDexRatingText_LessThan160; - if (count < 170) - return gBirchDexRatingText_LessThan170; - if (count < 180) - return gBirchDexRatingText_LessThan180; - if (count < 190) - return gBirchDexRatingText_LessThan190; - if (count < 200) - return gBirchDexRatingText_LessThan200; - if (count == 200) - { - if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1) - || GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // Jirachi or Deoxys is not counted towards the dex completion. If either of these flags are enabled, it means the actual count is less than 200. - return gBirchDexRatingText_LessThan200; - return gBirchDexRatingText_DexCompleted; - } - if (count == 201) - { - if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1) - && GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // If both of these flags are enabled, it means the actual count is less than 200. - return gBirchDexRatingText_LessThan200; - return gBirchDexRatingText_DexCompleted; - } - if (count == 202) - return gBirchDexRatingText_DexCompleted; // Hoenn dex is considered complete, even though the hoenn dex count is 210. - return gBirchDexRatingText_LessThan10; -} - -void ShowPokedexRatingMessage(void) -{ - ShowFieldMessage(GetPokedexRatingText(gSpecialVar_0x8004)); -} diff --git a/src/blend_palette.c b/src/blend_palette.c deleted file mode 100644 index 843c50ac1..000000000 --- a/src/blend_palette.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "global.h" -#include "blend_palette.h" -#include "palette.h" - -void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor) -{ - u16 i; - for (i = 0; i < numEntries; i++) - { - u16 index = i + palOffset; - struct PlttData *data1 = (struct PlttData *)&gPlttBufferUnfaded[index]; - s8 r = data1->r; - s8 g = data1->g; - s8 b = data1->b; - struct PlttData *data2 = (struct PlttData *)&blendColor; - gPlttBufferFaded[index] = ((r + (((data2->r - r) * coeff) >> 4)) << 0) - | ((g + (((data2->g - g) * coeff) >> 4)) << 5) - | ((b + (((data2->b - b) * coeff) >> 4)) << 10); - } -} diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c deleted file mode 100644 index b8d7cd386..000000000 --- a/src/braille_puzzles.c +++ /dev/null @@ -1,258 +0,0 @@ -#include "global.h" -#include "braille_puzzles.h" -#include "event_data.h" -#include "field_camera.h" -#include "field_effect.h" -#include "fieldmap.h" -#include "flags.h" -#include "main.h" -#include "map_obj_lock.h" -#include "menu.h" -#include "rom6.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "species.h" -#include "task.h" -#include "text.h" - -extern u8 gPlayerPartyCount; -extern u8 gLastFieldPokeMenuOpened; - -extern u8 gIslandCave_EventScript_OpenRegiiceChamber[]; // regiice event script - -bool8 ShouldDoBrailleDigEffect(void) -{ - if (!FlagGet(SYS_BRAILLE_DIG) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x47)) - { - if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 3) - return TRUE; - else if (gSaveBlock1.pos.x == 9 && gSaveBlock1.pos.y == 3) - return TRUE; - else if (gSaveBlock1.pos.x == 11 && gSaveBlock1.pos.y == 3) - return TRUE; - } - - return FALSE; -} - -void DoBrailleDigEffect(void) -{ - MapGridSetMetatileIdAt(16, 8, 554); - MapGridSetMetatileIdAt(17, 8, 555); - MapGridSetMetatileIdAt(18, 8, 556); - MapGridSetMetatileIdAt(16, 9, 3634); - MapGridSetMetatileIdAt(17, 9, 563); - MapGridSetMetatileIdAt(18, 9, 3636); - DrawWholeMapView(); - PlaySE(SE_BAN); - FlagSet(SYS_BRAILLE_DIG); - ScriptContext2_Disable(); -} - -bool8 CheckRelicanthWailord(void) -{ - if (GetMonData(&gPlayerParty, MON_DATA_SPECIES2, 0) == SPECIES_RELICANTH) - { - CalculatePlayerPartyCount(); - - if (GetMonData(&gPlayerParty[gPlayerPartyCount - 1], MON_DATA_SPECIES2, 0) == SPECIES_WAILORD) - return TRUE; - } - return FALSE; -} - -bool8 ShouldDoBrailleStrengthEffect(void) -{ - if (!FlagGet(SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x6)) - { - if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 23) - return TRUE; - else if (gSaveBlock1.pos.x == 9 && gSaveBlock1.pos.y == 23) - return TRUE; - else if (gSaveBlock1.pos.x == 11 && gSaveBlock1.pos.y == 23) - return TRUE; - } - - return FALSE; -} - -void DoBrailleStrengthEffect(void) -{ - FieldEffectActiveListRemove(0x28); - MapGridSetMetatileIdAt(14, 26, 554); - MapGridSetMetatileIdAt(15, 26, 555); - MapGridSetMetatileIdAt(16, 26, 556); - MapGridSetMetatileIdAt(14, 27, 3634); - MapGridSetMetatileIdAt(15, 27, 563); - MapGridSetMetatileIdAt(16, 27, 3636); - DrawWholeMapView(); - PlaySE(SE_BAN); - FlagSet(SYS_BRAILLE_STRENGTH); - ScriptContext2_Disable(); -} - -bool8 ShouldDoBrailleFlyEffect(void) -{ - if (!FlagGet(SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x44)) - { - if (gSaveBlock1.pos.x == 8 && gSaveBlock1.pos.y == 25) - return TRUE; - } - - return FALSE; -} - -void DoBrailleFlyEffect(void) -{ - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; - FieldEffectStart(0x3C); -} - -bool8 FldEff_UseFlyAncientTomb(void) -{ - u8 taskId = oei_task_add(); - - gTasks[taskId].data[8] = (u32)UseFlyAncientTomb_Callback >> 16; - gTasks[taskId].data[9] = (u32)UseFlyAncientTomb_Callback; - return FALSE; -} - -void UseFlyAncientTomb_Callback(void) -{ - FieldEffectActiveListRemove(0x3C); - UseFlyAncientTomb_Finish(); -} - -void UseFlyAncientTomb_Finish(void) -{ - MapGridSetMetatileIdAt(14, 26, 554); - MapGridSetMetatileIdAt(15, 26, 555); - MapGridSetMetatileIdAt(16, 26, 556); - MapGridSetMetatileIdAt(14, 27, 3634); - MapGridSetMetatileIdAt(15, 27, 563); - MapGridSetMetatileIdAt(16, 27, 3636); - DrawWholeMapView(); - PlaySE(SE_BAN); - FlagSet(SYS_BRAILLE_FLY); - ScriptContext2_Disable(); -} - -void DoBrailleWait(void) -{ - if (!FlagGet(SYS_BRAILLE_WAIT)) - CreateTask(Task_BrailleWait, 0x50); -} - -void Task_BrailleWait(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - switch (data[0]) - { - case 0: - data[1] = 7200; - data[0] = 1; - break; - case 1: - if (BrailleWait_CheckButtonPress() != FALSE) - { - MenuZeroFillScreen(); - PlaySE(5); - data[0] = 2; - } - else - { - data[1] = data[1] - 1; - if (data[1] == 0) - { - MenuZeroFillScreen(); - data[0] = 3; - data[1] = 30; - } - } - break; - case 2: - if (BrailleWait_CheckButtonPress() == FALSE) - { - data[1] = data[1] - 1; - if (data[1] == 0) - data[0] = 4; - break; - } - sub_8064E2C(); - DestroyTask(taskId); - ScriptContext2_Disable(); - break; - case 3: - data[1] = data[1] - 1; - if (data[1] == 0) - data[0] = 4; - break; - case 4: - sub_8064E2C(); - ScriptContext1_SetupScript(gIslandCave_EventScript_OpenRegiiceChamber); - DestroyTask(taskId); - break; - } -} - -bool32 BrailleWait_CheckButtonPress(void) -{ - u16 var = 0xFF; - - if (gSaveBlock2.optionsButtonMode == 1) - var |= 0x300; - if (gSaveBlock2.optionsButtonMode == 2) - var |= 0x200; - - if ((var & gMain.newKeys) != FALSE) - return TRUE; - else - return FALSE; -} - -void DoSealedChamberShakingEffect1(void) -{ - u8 taskId = CreateTask(SealedChamberShakingEffect, 0x9); - - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[4] = 2; - gTasks[taskId].data[5] = 5; - gTasks[taskId].data[6] = 50; - SetCameraPanningCallback(0); -} - -void DoSealedChamberShakingEffect2(void) -{ - u8 taskId = CreateTask(SealedChamberShakingEffect, 0x9); - - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[4] = 3; - gTasks[taskId].data[5] = 5; - gTasks[taskId].data[6] = 2; - SetCameraPanningCallback(0); -} - -void SealedChamberShakingEffect(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - task->data[1]++; - - if (!(task->data[1] % task->data[5])) - { - task->data[1] = 0; - task->data[2]++; - task->data[4] = -task->data[4]; - SetCameraPanning(0, task->data[4]); - if (task->data[2] == task->data[6]) - { - DestroyTask(taskId); - EnableBothScriptContexts(); - InstallCameraPanAheadCallback(); - } - } -} diff --git a/src/cable_club.c b/src/cable_club.c deleted file mode 100644 index 20b087f4e..000000000 --- a/src/cable_club.c +++ /dev/null @@ -1,317 +0,0 @@ -#include "global.h" -#include "cable_club.h" -#include "field_message_box.h" -#include "link.h" -#include "main.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "string_util.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 const u8 gUnknown_081A4975[]; - -static void sub_80830E4(u8 taskId); -static void sub_8083288(u8 taskId); -static void sub_8083314(u8 taskId); - -void sub_808303C(u8 taskId) { - s32 linkPlayerCount; - s16 *taskData; - - taskData = gTasks[taskId].data; - - linkPlayerCount = GetLinkPlayerCount_2(); - - 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(); - ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); // r5 - ShowFieldAutoScrollMessage((u8 *) gUnknown_081A4975); - gTasks[taskId].func = sub_80830E4; -#elif GERMAN - 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); - gTasks[taskId].func = sub_80830E4; - } -#endif -} - -#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)) - { - 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; - } -} -#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 - -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()) - { - gTasks[taskId].func = sub_8083418; - return; - } - - result = &gScriptResult; - *result = sub_8082D9C(local1, local2); - if (*result) - { - 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) == 1 || - sub_8082DF4(taskId) == 1) - { - return; - } - - result = &gScriptResult; - *result = sub_8082D9C(local1, local2); - if (*result == 0) - { - return; - } - - - if (*result == 3) - { - sub_800832C(); - HideFieldMessageBox(); - gTasks[taskId].func = sub_80833C4; - } - else - { - gFieldLinkPlayerCount = GetLinkPlayerCount_2(); - gUnknown_03004860 = GetMultiplayerId(); - sub_80081C8(gFieldLinkPlayerCount); - sub_8093390((struct TrainerCard *) gBlockSendBuffer); - gTasks[taskId].func = sub_8083314; - } -} - -static void sub_8083288(u8 taskId) { - if (sub_8082DF4(taskId) == 1) - { - return; - } - - if (gScriptResult == 3) - { - sub_800832C(); - HideFieldMessageBox(); - gTasks[taskId].func = sub_80833C4; - } - else - { - gFieldLinkPlayerCount = GetLinkPlayerCount_2(); - gUnknown_03004860 = GetMultiplayerId(); - sub_80081C8(gFieldLinkPlayerCount); - sub_8093390((struct TrainerCard *) gBlockSendBuffer); - gTasks[taskId].func = sub_8083314; - sub_8007E9C(2); - } -} - -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; - for (index = 0; index < GetLinkPlayerCount(); index++) - { - void *src; - src = gBlockRecvBuffer[index]; - memcpy(&trainerCards[index], src, sizeof(struct TrainerCard)); - } - - SetSuppressLinkErrorMessage(FALSE); - ResetBlockReceivedFlags(); - HideFieldMessageBox(); - - if (gScriptResult == 1) - { -#if ENGLISH - u16 linkType; - linkType = gLinkType; - // FIXME: sub_8082D4C doesn't take any arguments - sub_8082D4C(0x00004411, linkType); -#elif GERMAN - if (gLinkType != 0x4411) - { - if (gLinkType == 0x6601) - { - deUnkValue2 = 1; - } - } - sub_8082D4C(); -#endif - EnableBothScriptContexts(); - DestroyTask(taskId); - return; - } - - sub_800832C(); - gTasks[taskId].func = sub_80833C4; -} diff --git a/src/calculate_base_damage.c b/src/calculate_base_damage.c deleted file mode 100644 index 0f2605e5b..000000000 --- a/src/calculate_base_damage.c +++ /dev/null @@ -1,1474 +0,0 @@ -#include "global.h" -#include "abilities.h" -#include "battle.h" -#include "berry.h" -#include "data2.h" -#include "event_data.h" -#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" - -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]; - -#define APPLY_STAT_MOD(var, mon, stat, statIndex) \ -{ \ - (var) = (stat) * (gStatStageRatios)[(mon)->statStages[(statIndex)] * 2]; \ - (var) /= (gStatStageRatios + 1)[(mon)->statStages[(statIndex)] * 2]; \ -} - -#ifdef NONMATCHING -s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 a7, u8 a8) -{ - s32 i; - s32 damage = 0; - u8 type; - u16 attack, defense; - u16 spAttack, spDefense; - u8 defenderHoldEffect; - u8 defenderHoldEffectParam; - u8 attackerHoldEffect; - u8 attackerHoldEffectParam; - s32 a, b; - - if (!powerOverride) - gBattleMovePower = gBattleMoves[move].power; - else - gBattleMovePower = powerOverride; - - if (!typeOverride) - type = gBattleMoves[move].type; - else - type = typeOverride & 0x3F; - - attack = attacker->attack; - defense = defender->defense; - spAttack = attacker->spAttack; - spDefense = defender->spDefense; - - if (attacker->item == ITEM_ENIGMA_BERRY) - { - attackerHoldEffect = gEnigmaBerries[a7].holdEffect; - attackerHoldEffectParam = gEnigmaBerries[a7].holdEffectParam; - } - else - { - attackerHoldEffect = ItemId_GetHoldEffect(attacker->item); - attackerHoldEffectParam = ItemId_GetHoldEffectParam(attacker->item); - } - - if (defender->item == ITEM_ENIGMA_BERRY) - { - defenderHoldEffect = gEnigmaBerries[a8].holdEffect; - defenderHoldEffectParam = gEnigmaBerries[a8].holdEffectParam; - } - else - { - defenderHoldEffect = ItemId_GetHoldEffect(defender->item); - defenderHoldEffectParam = ItemId_GetHoldEffectParam(defender->item); - } - - if (attacker->ability == ABILITY_HUGE_POWER || attacker->ability == ABILITY_PURE_POWER) - attack *= 2; - - if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) - { - if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) - && gTrainerBattleOpponent != 1024 - && FlagGet(BADGE01_GET) - && !GetBankSide(a7)) - 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(a8)) - 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(a7)) - 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(a8)) - spDefense = (110 * spDefense) / 100; - } - } - } - } - - for (i = 0; i < 17; i++) - { - if (attackerHoldEffect == gHoldEffectToType[i][0] - && type == gHoldEffectToType[i][1]) - { - if (type <= 8) - attack = (attack * (attackerHoldEffectParam + 100)) / 100; - else - spAttack = (spAttack * (attackerHoldEffectParam + 100)) / 100; - break; - } - } - - if (attackerHoldEffect == HOLD_EFFECT_CHOICE_BAND) - attack = (150 * attack) / 100; - if (attackerHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) && (attacker->species == SPECIES_LATIAS || attacker->species == SPECIES_LATIOS)) - spAttack = (150 * spAttack) / 100; - if (defenderHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) && (defender->species == SPECIES_LATIAS || defender->species == SPECIES_LATIOS)) - spDefense = (150 * spDefense) / 100; - if (attackerHoldEffect == HOLD_EFFECT_DEEP_SEA_TOOTH && attacker->species == SPECIES_CLAMPERL) - spAttack *= 2; - if (defenderHoldEffect == HOLD_EFFECT_DEEP_SEA_SCALE && defender->species == SPECIES_CLAMPERL) - spDefense *= 2; - if (attackerHoldEffect == HOLD_EFFECT_LIGHT_BALL && attacker->species == SPECIES_PIKACHU) - spAttack *= 2; - if (defenderHoldEffect == HOLD_EFFECT_METAL_POWDER && defender->species == SPECIES_DITTO) - defense *= 2; - if (attackerHoldEffect == HOLD_EFFECT_THICK_CLUB && (attacker->species == SPECIES_CUBONE || attacker->species == SPECIES_MAROWAK)) - attack *= 2; - if (defender->ability == ABILITY_THICK_FAT && (type == TYPE_FIRE || type == TYPE_ICE)) - spAttack /= 2; - if (attacker->ability == ABILITY_HUSTLE) - attack = (150 * attack) / 100; - if (attacker->ability == ABILITY_PLUS && AbilityBattleEffects(0xE, 0, ABILITY_MINUS, 0, 0)) - spAttack = (150 * spAttack) / 100; - if (attacker->ability == ABILITY_MINUS && AbilityBattleEffects(0xE, 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)) - gBattleMovePower /= 2; - if (type == TYPE_FIRE && AbilityBattleEffects(0xE, 0, 0, 0xFE, 0)) - gBattleMovePower /= 2; - if (type == TYPE_GRASS && attacker->ability == ABILITY_OVERGROW && attacker->hp <= (attacker->maxHP / 3)) - gBattleMovePower = (150 * gBattleMovePower) / 100; - if (type == TYPE_FIRE && attacker->ability == ABILITY_BLAZE && attacker->hp <= (attacker->maxHP / 3)) - gBattleMovePower = (150 * gBattleMovePower) / 100; - if (type == TYPE_WATER && attacker->ability == ABILITY_TORRENT && attacker->hp <= (attacker->maxHP / 3)) - 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) - defense /= 2; - - if (type < TYPE_MYSTERY) // is physical? - { - if (gCritMultiplier == 2) - { - if (attacker->statStages[1] > 6) - APPLY_STAT_MOD(a, attacker, attack, 1) - else - a = attack; - } - else - APPLY_STAT_MOD(a, attacker, attack, 1) - - a = a * gBattleMovePower * (2 * attacker->level / 5 + 2); - - if (gCritMultiplier == 2) - { - if (defender->statStages[2] < 6) - APPLY_STAT_MOD(b, defender, defense, 2) - else - b = defense; - } - else - APPLY_STAT_MOD(b, defender, defense, 2) - - damage = (a / b) / 50; - - if ((attacker->status1 & 0x10) && attacker->ability != ABILITY_GUTS) - damage /= 2; - - if ((a4 & 1) && gCritMultiplier == 1) - { - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMons(2) == 2) - damage = 2 * (damage / 3); - else - damage /= 2; - } - - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMons(2) == 2) - damage /= 2; - - // moves always do at least 1 damage. - if (damage == 0) - damage = 1; - } - - if (type == TYPE_MYSTERY) - damage = 0; // is ??? type. does 0 damage. - - if (type > TYPE_MYSTERY) // is special? - { - if (gCritMultiplier == 2) - { - if (attacker->statStages[4] > 6) - APPLY_STAT_MOD(a, attacker, spAttack, 4) - else - a = spAttack; - } - else - APPLY_STAT_MOD(a, attacker, spAttack, 4) - - a = a * gBattleMovePower * (2 * attacker->level / 5 + 2); - - if (gCritMultiplier == 2) - { - if (defender->statStages[5] < 6) - APPLY_STAT_MOD(b, defender, spDefense, 5) - else - b = spDefense; - } - else - APPLY_STAT_MOD(b, defender, spDefense, 5) - - damage = (a / b) / 50; - - if ((a4 & 2) && gCritMultiplier == 1) - { - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMons(2) == 2) - damage = 2 * (damage / 3); - else - damage /= 2; - } - - 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)) - { - // rain? - if (gBattleWeather & 1) - { - if (type == TYPE_FIRE) - damage /= 2; - else if (type == TYPE_WATER) - damage = (15 * damage) / 10; - } - - // does lack of sun half solar beam damage? - if ((gBattleWeather & 0x9F) && gCurrentMove == 76) - damage /= 2; - - // sunny? - if (gBattleWeather & 0x60) - { - if (type == TYPE_FIRE) - damage = (15 * damage) / 10; - else if (type == TYPE_WATER) - damage /= 2; - } - } - - // flash fire triggered? - if ((dword_2017100[a7] & 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 diff --git a/src/choose_party.c b/src/choose_party.c deleted file mode 100644 index d8df44028..000000000 --- a/src/choose_party.c +++ /dev/null @@ -1,1072 +0,0 @@ -#include "global.h" -#include "decoration.h" -#include "field_fadetransition.h" -#include "main.h" -#include "menu.h" -#include "name_string_util.h" -#include "palette.h" -#include "party_menu.h" -#include "pokemon.h" -#include "pokemon_summary_screen.h" -#include "rom4.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "strings.h" -#include "string_util.h" -#include "task.h" -#include "text.h" - -struct UnknownPokemonStruct2 -{ - /*0x00*/ u16 species; - /*0x02*/ u16 heldItem; - /*0x04*/ u8 nickname[11]; - /*0x0F*/ u8 level; - /*0x10*/ u16 hp; - /*0x12*/ u16 maxhp; - /*0x14*/ u32 status; - /*0x18*/ u32 personality; - /*0x1C*/ u8 gender; - /*0x1D*/ u8 language; -}; - -extern u8 gPlayerPartyCount; -extern u8 gLastFieldPokeMenuOpened; -extern u8 gUnknown_020384F0; -extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; -extern u8 gUnknown_0202E8F6; -extern struct Pokemon gUnknown_030042FC[]; -extern const u16 gBattleTowerBanlist[]; - -EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0}; - -extern void OpenPartyMenu(); -extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *); -extern void LoadHeldItemIconGraphics(void); -extern void CreateHeldItemIcons_806DC34(); -extern u8 sub_806BD58(u8, u8); -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(); -extern void sub_806C658(); -extern void sub_806AEDC(void); -extern void sub_806AF4C(); -extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); -extern void sub_806C890(); -extern void sub_806D5A4(); -extern void sub_806B908(void); -extern void CreateMonIcon_806D99C(int, u8, int, struct UnknownPokemonStruct2 *); -extern void sub_806D50C(int, u8); -extern void CreatePartyMenuMonIcon(); -extern void CreateHeldItemIcon_806DCD4(int, u8, int); -extern u8 GetMonStatusAndPokerus(); -extern void PartyMenuPrintHP(); -extern void PartyMenuPutStatusTilemap(u8, int, u8); -extern void PartyMenuPrintLevel(); -extern void PartyMenuPutNicknameTilemap(); -extern void PrintPartyMenuMonNickname(); -extern void PartyMenuDrawHPBar(); -extern bool8 sub_80F9344(void); -extern void sub_806D4AC(); -extern void sub_806D3B4(); -extern void PartyMenuDoPrintLevel(u8, u8, u8); -extern void PartyMenuDoDrawHPBar(u8, u8, u16, u16); -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 *); -static void sub_812238C(u8); -static void sub_8122450(u8); -static void sub_81224A8(u8); -static void sub_8122728(u8); -static void BattleTowerEntryMenuCallback_Exit(u8); -static void sub_81228E8(u8); -static void sub_8122950(u8); -static void sub_81229B8(void); -static void sub_8122AB8(u8); -static void sub_8122B10(u8); -static void sub_8122C18(u8); -static void Task_DaycareStorageMenu8122EAC(u8); -void sub_8123138(u8); -static void sub_8123170(u8); -static void sub_81231AC(void); - -void sub_8121E10(void) -{ - ClearPartySelection(); - ewram1B000.unk263 = 0; - OpenPartyMenu(4, 0); -} - -void sub_8121E34(void) -{ - ClearPartySelection(); - ewram1B000.unk263 = 1; - OpenPartyMenu(4, 0); -} - -static void ClearPartySelection(void) -{ - u8 i; - - for (i = 0; i < 3; i++) - gSelectedOrderFromParty[i] = 0; -} - -bool8 sub_8121E78(void) -{ - u8 i; - - switch (ewram1B000_alt.unk264) - { - case 0: - if (ewram1B000_alt.unk266 < gPlayerPartyCount) - { - TryCreatePartyMenuMonIcon(ewram1B000_alt.unk260, ewram1B000_alt.unk266, &gPlayerParty[ewram1B000_alt.unk266]); - ewram1B000_alt.unk266++; - } - else - { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264++; - } - break; - case 1: - LoadHeldItemIconGraphics(); - ewram1B000_alt.unk264++; - break; - case 2: - CreateHeldItemIcons_806DC34(ewram1B000_alt.unk260); - ewram1B000_alt.unk264++; - break; - case 3: - if (sub_806BD58(ewram1B000_alt.unk260, ewram1B000_alt.unk266) == 1) - { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264++; - } - else - { - ewram1B000_alt.unk266++; - } - break; - case 4: - PartyMenuPrintMonsLevelOrStatus(); - ewram1B000_alt.unk264++; - break; - case 5: - PrintPartyMenuMonNicknames(); - ewram1B000_alt.unk264++; - break; - case 6: - for (i = 0; i < gPlayerPartyCount; i++) - { - u8 j; - - for (j = 0; j < 3; j++) - { - if (gSelectedOrderFromParty[j] == i + 1) - { - sub_806BC3C(i, j * 14 + 0x1C); - break; - } - } - if (j == 3) - { - if (IsMonAllowedInBattleTower(&gPlayerParty[i]) == TRUE) - sub_806BC3C(i, 0x70); - else - sub_806BC3C(i, 0x7E); - } - } - ewram1B000_alt.unk264++; - break; - case 7: - if (sub_806B58C(ewram1B000_alt.unk266) == 1) - { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264 = 0; - return TRUE; - } - else - { - ewram1B000_alt.unk266++; - } - break; - } - return FALSE; -} - -#ifdef NONMATCHING -static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn) -{ - u16 r3; - s32 i; - - if (GetMonData(pkmn, MON_DATA_IS_EGG)) - return FALSE; - - if (ewram1B000.unk263 == 0) - { - if (GetMonData(pkmn, MON_DATA_HP) == 0) - return FALSE; - else - return TRUE; - } - - if ((gSaveBlock2.filler_A8.var_4AC & 1) == 0 - && GetMonData(pkmn, MON_DATA_LEVEL) > 50) - return FALSE; - - r3 = GetMonData(pkmn, MON_DATA_SPECIES); - // Can't stop the compiler from optimizing out the first index - for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++) - { - if (gBattleTowerBanlist[i] == r3) - return FALSE; - } - return TRUE; -} -#else -__attribute__((naked)) -static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn) -{ - asm_unified( - "push {r4,lr}\n\ - adds r4, r0, 0\n\ - movs r1, 0x2D\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _0812207C\n\ - ldr r0, _08122058 @ =0x0201b000\n\ - ldr r1, _0812205C @ =0x00000263\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _08122060\n\ - adds r0, r4, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0812207C\n\ - b _081220B6\n\ - .align 2, 0\n\ -_08122058: .4byte 0x0201b000\n\ -_0812205C: .4byte 0x00000263\n\ -_08122060:\n\ - ldr r0, _08122080 @ =gSaveBlock2\n\ - ldr r1, _08122084 @ =0x00000554\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08122088\n\ - adds r0, r4, 0\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - cmp r0, 0x32\n\ - bls _08122088\n\ -_0812207C:\n\ - movs r0, 0\n\ - b _081220B8\n\ - .align 2, 0\n\ -_08122080: .4byte gSaveBlock2\n\ -_08122084: .4byte 0x00000554\n\ -_08122088:\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - ldr r1, _081220C0 @ =gBattleTowerBanlist\n\ - movs r0, 0\n\ - lsls r0, 1\n\ - adds r2, r0, r1\n\ - ldrh r0, [r2]\n\ - ldr r1, _081220C4 @ =0x0000ffff\n\ - cmp r0, r1\n\ - beq _081220B6\n\ - adds r4, r1, 0\n\ - adds r1, r2, 0\n\ -_081220A8:\n\ - ldrh r0, [r1]\n\ - cmp r0, r3\n\ - beq _0812207C\n\ - adds r1, 0x2\n\ - ldrh r0, [r1]\n\ - cmp r0, r4\n\ - bne _081220A8\n\ -_081220B6:\n\ - movs r0, 0x1\n\ -_081220B8:\n\ - pop {r4}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_081220C0: .4byte gBattleTowerBanlist\n\ -_081220C4: .4byte 0x0000ffff\n" - ); -} -#endif - -static u8 sub_81220C8(void) -{ - u8 i; - - if (ewram1B000.unk263 == 0) - return 0xFF; - if (gSelectedOrderFromParty[2] == 0) - return 0x11; - for (i = 0; i < 2; i++) - { - u8 j; - - ewram1B000.unk282 = GetMonData(&gUnknown_030042FC[gSelectedOrderFromParty[i]], MON_DATA_SPECIES); - ewram1B000.unk280 = GetMonData(&gUnknown_030042FC[gSelectedOrderFromParty[i]], MON_DATA_HELD_ITEM); - for (j = i + 1; j < 3; j++) - { - if (ewram1B000.unk282 == GetMonData(&gUnknown_030042FC[gSelectedOrderFromParty[j]], MON_DATA_SPECIES)) - return 0x12; - if (ewram1B000.unk280 != 0 && ewram1B000.unk280 == GetMonData(&gUnknown_030042FC[gSelectedOrderFromParty[j]], MON_DATA_HELD_ITEM)) - return 0x13; - } - } - return 0xFF; -} - -//------------------------------------------------------------------------------ -// Battle Tower Entry Menu -//------------------------------------------------------------------------------ - -static void BattleTowerEntryMenuCallback_Summary(u8); -static void BattleTowerEntryMenuCallback_Enter(u8); -static void BattleTowerEntryMenuCallback_NoEntry(u8); -static void BattleTowerEntryMenuCallback_Exit(u8); - -static const struct PartyMenuItem sBattleTowerEntryMenuItems[] = -{ - {OtherText_Summary, BattleTowerEntryMenuCallback_Summary}, - {OtherText_Enter2, BattleTowerEntryMenuCallback_Enter}, - {OtherText_NoEntry, BattleTowerEntryMenuCallback_NoEntry}, - {gUnknownText_Exit, BattleTowerEntryMenuCallback_Exit}, -}; - -static const u8 gUnknown_084017D0[] = {1, 0, 3}; -static const u8 gUnknown_084017D3[] = {2, 0, 3}; -static const u8 gUnknown_084017D6[] = {0, 3}; - -static const struct PartyPopupMenu sBattleTowerEntryMenu[] = -{ - {ARRAY_COUNT(gUnknown_084017D0), 9, gUnknown_084017D0}, - {ARRAY_COUNT(gUnknown_084017D3), 9, gUnknown_084017D3}, - {ARRAY_COUNT(gUnknown_084017D6), 9, gUnknown_084017D6}, -}; - - -static bool8 IsPartyMemberAlreadySelected(u8 partyMember) -{ - u8 i; - - for (i = 0; i < 3; i++) - { - if (gSelectedOrderFromParty[i] == partyMember) - return TRUE; - } - return FALSE; -} - -static void sub_81221F8(u8 taskId) -{ - sub_806D538(5, 1); - if (IsMonAllowedInBattleTower(&gPlayerParty[gLastFieldPokeMenuOpened]) == TRUE) - { - if (IsPartyMemberAlreadySelected(gLastFieldPokeMenuOpened + 1) == TRUE) - { - gTasks[taskId].data[4] = 1; - sub_806E750(1, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0); - } - else - { - gTasks[taskId].data[4] = 0; - sub_806E750(0, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0); - } - } - else - { - gTasks[taskId].data[4] = 2; - sub_806E750(2, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0); - } -} - -void sub_81222B0(u8 taskId) -{ - if (!gPaletteFade.active) - { - switch (sub_806BE38(taskId)) - { - case 1: - PlaySE(SE_SELECT); - gLastFieldPokeMenuOpened = sub_806CA38(taskId); - if (gLastFieldPokeMenuOpened != 6) - { - GetMonNickname(&gPlayerParty[gLastFieldPokeMenuOpened], gStringVar1); - sub_81221F8(taskId); - gTasks[taskId].func = sub_812238C; - } - else - { - gTasks[taskId].func = sub_81224A8; - } - sub_808B5B4(taskId); - break; - case 2: - PlaySE(SE_SELECT); - ClearPartySelection(); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = sub_8122450; - break; - } - } -} - -// Handle input -static void sub_812238C(u8 taskId) -{ - if (!gPaletteFade.active) - { - if (gMain.newAndRepeatedKeys & 0x40) - { - if (GetMenuCursorPos() != 0) - { - PlaySE(SE_SELECT); - MoveMenuCursor(-1); - } - return; - } - if (gMain.newAndRepeatedKeys & 0x80) - { - if (GetMenuCursorPos() != 3) - { - PlaySE(SE_SELECT); - MoveMenuCursor(1); - } - return; - } - if (gMain.newKeys & A_BUTTON) - { - TaskFunc popupMenuFunc; - - PlaySE(SE_SELECT); - popupMenuFunc = PartyMenuGetPopupMenuFunc( - gTasks[taskId].data[4], - sBattleTowerEntryMenu, - sBattleTowerEntryMenuItems, - GetMenuCursorPos()); - popupMenuFunc(taskId); - return; - } - if (gMain.newKeys & B_BUTTON) - { - BattleTowerEntryMenuCallback_Exit(taskId); - return; - } - } -} - -// Return from menu? -static void sub_8122450(u8 taskId) -{ - if (!gPaletteFade.active) - { - SetMainCallback2(gMain.savedCallback); - DestroyTask(taskId); - } -} - -// Wait for A or B press -static void sub_8122480(u8 taskId) -{ - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) - BattleTowerEntryMenuCallback_Exit(taskId); -} - -static void sub_81224A8(u8 taskId) -{ - u8 val = sub_81220C8(); - - if (val != 0xFF) - { - sub_806D538(val, 0); - gTasks[taskId].func = sub_8122480; - } - else - { - if (gSelectedOrderFromParty[0] != 0) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = sub_8122450; - } - else - { - PlaySE(SE_HAZURE); - sub_806D538(14, 0); - gTasks[taskId].func = sub_8122480; - } - } -} - -// CB2 for menu? -static void sub_8122530(void) -{ - while (1) - { - if (sub_806B124() == 1) - { - sub_806C994(ewram1B000.unk260, gUnknown_020384F0); - sub_806C658(ewram1B000.unk260, 0); - GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); - gLastFieldPokeMenuOpened = gUnknown_020384F0; - sub_81221F8(ewram1B000.unk260); - SetMainCallback2(sub_806AEDC); - break; - } - if (sub_80F9344() == 1) - break; - } -} - -static void sub_81225A4(void) -{ - gPaletteFade.bufferTransferDisabled = TRUE; - sub_806AF4C(4, 0xFF, sub_812238C, 5); - SetMainCallback2(sub_8122530); -} - -// Wait for fade, then show summary screen -static void sub_81225D4(u8 taskId) -{ - if (!gPaletteFade.active) - { - u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data0; - - DestroyTask(taskId); - ewram1B000.unk262 = 1; - ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_81225A4, 0); - } -} - -// Summary callback? -static void BattleTowerEntryMenuCallback_Summary(u8 taskId) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = sub_81225D4; -} - -static void BattleTowerEntryMenuCallback_Enter(u8 taskId) -{ - u8 i; - - for (i = 0; i < 3; i++) - { - if (gSelectedOrderFromParty[i] == 0) - { - gSelectedOrderFromParty[i] = gLastFieldPokeMenuOpened + 1; - sub_806BC3C(gLastFieldPokeMenuOpened, i * 14 + 0x1C); - if (i == 2) - sub_806C890(taskId); - BattleTowerEntryMenuCallback_Exit(taskId); - return; - } - } - PlaySE(SE_HAZURE); - MenuZeroFillWindowRect(20, 10, 29, 19); - HandleDestroyMenuCursors(); - sub_806D5A4(); - sub_806E834(gOtherText_NoMoreThreePoke, 1); - gTasks[taskId].func = sub_8122728; -} - -static void sub_8122728(u8 taskId) -{ - if (gUnknown_0202E8F6 == 1) - return; - - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) - { - MenuZeroFillWindowRect(0, 14, 29, 19); - HandleDestroyMenuCursors(); - BattleTowerEntryMenuCallback_Exit(taskId); - } -} - -static void BattleTowerEntryMenuCallback_NoEntry(u8 taskId) -{ - u8 i; - - for (i = 0; i < 3; i++) - { - if (gSelectedOrderFromParty[i] == gLastFieldPokeMenuOpened + 1) - { - gSelectedOrderFromParty[i] = 0; - switch (i) - { - case 0: - gSelectedOrderFromParty[0] = gSelectedOrderFromParty[1]; - gSelectedOrderFromParty[1] = gSelectedOrderFromParty[2]; - gSelectedOrderFromParty[2] = 0; - break; - case 1: - gSelectedOrderFromParty[1] = gSelectedOrderFromParty[2]; - gSelectedOrderFromParty[2] = 0; - break; - } - break; // exit loop - } - } - sub_806BC3C(gLastFieldPokeMenuOpened, 0x70); - if (gSelectedOrderFromParty[0] != 0) - sub_806BC3C(gSelectedOrderFromParty[0] - 1, 0x1C); - if (gSelectedOrderFromParty[1] != 0) - sub_806BC3C(gSelectedOrderFromParty[1] - 1, 0x2A); - BattleTowerEntryMenuCallback_Exit(taskId); -} - -static void sub_81227FC(u8 taskId) -{ - MenuZeroFillWindowRect(20, 10, 29, 19); - HandleDestroyMenuCursors(); - sub_806D538(0, 0); - gTasks[taskId].func = sub_81222B0; -} - -static void BattleTowerEntryMenuCallback_Exit(u8 taskId) -{ - PlaySE(SE_SELECT); - sub_81227FC(taskId); -} - -bool8 sub_8122854(void) -{ - switch (ewram1B000_alt.unk264) - { - case 0: - sub_81228E8(ewram1B000_alt.unk260); - ewram1B000_alt.unk264++; - break; - case 1: - LoadHeldItemIconGraphics(); - ewram1B000_alt.unk264++; - break; - case 2: - sub_8122950(ewram1B000_alt.unk260); - ewram1B000_alt.unk264++; - break; - case 3: - sub_81229B8(); - ewram1B000_alt.unk264++; - break; - case 4: - sub_806B908(); - return TRUE; - } - return FALSE; -} - -static void sub_81228E8(u8 a) -{ - u8 i; - - for (i = 0; i < 3; i++) - { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0) - CreatePartyMenuMonIcon(a, i, 3, &gPlayerParty[i]); - if (gUnknown_02023A00[i].species != 0) - { - CreateMonIcon_806D99C(a, i + 3, 3, &gUnknown_02023A00[i]); - sub_806D50C(a, i + 3); - } - } -} - -static void sub_8122950(u8 a) -{ - u8 i; - - for (i = 0; i < 3; i++) - { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0) - { - u16 item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - - CreateHeldItemIcon_806DCD4(a, i, item); - } - if (gUnknown_02023A00[i].species != 0) - CreateHeldItemIcon_806DCD4(a, i + 3, gUnknown_02023A00[i].heldItem); - } -} - -static void sub_81229B8(void) -{ - u8 i; - - for (i = 0; i < 3; i++) - { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0) - { - u8 status; - - PartyMenuPrintHP(i, 3, &gPlayerParty[i]); - status = GetMonStatusAndPokerus(&gPlayerParty[i]); - if (status != 0 && status != 6) - PartyMenuPutStatusTilemap(i, 3, status - 1); - else - PartyMenuPrintLevel(i, 3, &gPlayerParty[i]); - PartyMenuPutNicknameTilemap(i, 3, &gPlayerParty[i]); - PrintPartyMenuMonNickname(i, 3, &gPlayerParty[i]); - PartyMenuDrawHPBar(i, 3, &gPlayerParty[i]); - } - } -} - -void sub_8122A48(u8 taskId) -{ - if (!gPaletteFade.active) - { - gTasks[taskId].data[0] = 30; - sub_806D4AC(taskId, gUnknown_02023A00[0].species, 0); - sub_806D4AC(taskId, gUnknown_02023A00[1].species, 1); - sub_806D4AC(taskId, gUnknown_02023A00[2].species, 2); - gTasks[taskId].func = sub_8122AB8; - ewram1B000.unk261 = 1; - } -} - -static void sub_8122AB8(u8 taskId) -{ - sub_806D3B4(taskId, gUnknown_02023A00[1].species, gUnknown_02023A00[2].species); - if (gTasks[taskId].data[0] == 0) - { - gTasks[taskId].func = sub_8122B10; - ewram1B000.unk261 = 2; - PlaySE(SE_W231); - } -} - -static void sub_8122B10(u8 taskId) -{ - u8 i; - - for (i = 0; i < 3; i++) - { - if (gUnknown_02023A00[i].species != 0) - { - u8 r2; - - PartyMenuDoPrintHP(i + 3, 3, gUnknown_02023A00[i].hp, gUnknown_02023A00[i].maxhp); - if (gUnknown_02023A00[i].hp == 0) - r2 = 7; - else - r2 = pokemon_ailments_get_primary(gUnknown_02023A00[i].status); - if (r2 != 0) - PartyMenuPutStatusTilemap(i + 3, 3, r2 - 1); - else - PartyMenuDoPrintLevel(i + 3, 3, gUnknown_02023A00[i].level); - PartyMenuDoPutNicknameTilemap(gUnknown_02023A00[i].species, gUnknown_02023A00[i].gender, 3, i + 3, gUnknown_02023A00[i].nickname); - StringCopy(gStringVar1, gUnknown_02023A00[i].nickname); - StringGetEnd10(gStringVar1); - SanitizeNameString(gStringVar1); - box_print(i + 3, 3, gStringVar1); - PartyMenuDoDrawHPBar(i + 3, 3, gUnknown_02023A00[i].hp, gUnknown_02023A00[i].maxhp); - } - } - gTasks[taskId].func = sub_8122C18; - gTasks[taskId].data[0] = 0; -} - -static void sub_8122C18(u8 taskId) -{ - gTasks[taskId].data[0]++; - if (gTasks[taskId].data[0] == 256) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = sub_8122450; - } -} - -// Exactly the same as sub_8121E78 except for case 6 -bool8 unref_sub_8122C60(void) -{ - switch (ewram1B000_alt.unk264) - { - case 0: - if (ewram1B000_alt.unk266 < gPlayerPartyCount) - { - TryCreatePartyMenuMonIcon(ewram1B000_alt.unk260, ewram1B000_alt.unk266, &gPlayerParty[ewram1B000_alt.unk266]); - ewram1B000_alt.unk266++; - } - else - { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264++; - } - break; - case 1: - LoadHeldItemIconGraphics(); - ewram1B000_alt.unk264++; - break; - case 2: - CreateHeldItemIcons_806DC34(ewram1B000_alt.unk260); - ewram1B000_alt.unk264++; - break; - case 3: - if (sub_806BD58(ewram1B000_alt.unk260, ewram1B000_alt.unk266) == 1) - { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264++; - } - else - { - ewram1B000_alt.unk266++; - } - break; - case 4: - PartyMenuPrintMonsLevelOrStatus(); - ewram1B000_alt.unk264++; - break; - case 5: - PrintPartyMenuMonNicknames(); - ewram1B000_alt.unk264++; - break; - case 6: - sub_806BCE8(); - ewram1B000_alt.unk264++; - break; - case 7: - if (sub_806B58C(ewram1B000_alt.unk266) == 1) - { - ewram1B000_alt.unk266 = 0; - ewram1B000_alt.unk264 = 0; - return TRUE; - } - else - { - ewram1B000_alt.unk266++; - } - break; - } - return FALSE; -} - -//------------------------------------------------------------------------------ -// Daycare Pokemon Storage Menu -//------------------------------------------------------------------------------ - -static void DaycareStorageMenuCallback_Store(u8); -static void DaycareStorageMenuCallback_Summary(u8); -static void DaycareStorageMenuCallback_Exit(u8); - -static const struct PartyMenuItem sDaycareStorageMenuItems[] = -{ - {OtherText_Store, DaycareStorageMenuCallback_Store}, - {OtherText_Summary, DaycareStorageMenuCallback_Summary}, - {gUnknownText_Exit, DaycareStorageMenuCallback_Exit}, -}; - -static const u8 gUnknown_08401808[] = {0, 1, 2}; -static const u8 gUnknown_0840180B[] = {1, 2}; - -static const struct PartyPopupMenu sDaycareStorageMenus[] = -{ - {ARRAY_COUNT(gUnknown_08401808), 9, gUnknown_08401808}, - {ARRAY_COUNT(gUnknown_0840180B), 9, gUnknown_0840180B}, -}; - -static void sub_8122D94(u8 taskId) -{ - if (!GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_IS_EGG)) - { - gTasks[taskId].data[4] = 0; - sub_806E750(0, sDaycareStorageMenus, sDaycareStorageMenuItems, 0); - } - else - { - gTasks[taskId].data[4] = 1; - sub_806E750(1, sDaycareStorageMenus, sDaycareStorageMenuItems, 0); - } -} - -void sub_8122E0C(u8 taskId) -{ - if (!gPaletteFade.active) - { - switch (sub_806BD80(taskId)) - { - case 1: - PlaySE(SE_SELECT); - gLastFieldPokeMenuOpened = sub_806CA38(taskId); - GetMonNickname(&gPlayerParty[gLastFieldPokeMenuOpened], gStringVar1); - sub_8122D94(taskId); - gTasks[taskId].func = Task_DaycareStorageMenu8122EAC; - break; - case 2: - PlaySE(SE_SELECT); - gLastFieldPokeMenuOpened = 0xFF; - gSpecialVar_0x8004 = 0xFF; - sub_8123138(taskId); - break; - } - } -} - -static void Task_DaycareStorageMenu8122EAC(u8 taskId) -{ - if (!gPaletteFade.active) - { - if (gMain.newAndRepeatedKeys & 0x40) - { - if (GetMenuCursorPos() != 0) - { - PlaySE(SE_SELECT); - MoveMenuCursor(-1); - } - return; - } - if (gMain.newAndRepeatedKeys & 0x80) - { - if (GetMenuCursorPos() != 3) - { - PlaySE(SE_SELECT); - MoveMenuCursor(1); - } - return; - } - if (gMain.newKeys & A_BUTTON) - { - TaskFunc popupMenuFunc; - - PlaySE(SE_SELECT); - popupMenuFunc = PartyMenuGetPopupMenuFunc( - gTasks[taskId].data[4], - sDaycareStorageMenus, - sDaycareStorageMenuItems, - GetMenuCursorPos()); - popupMenuFunc(taskId); - return; - } - if (gMain.newKeys & B_BUTTON) - { - DaycareStorageMenuCallback_Exit(taskId); - return; - } - } -} - -static void DaycareStorageMenuCallback_Store(u8 taskId) -{ - gSpecialVar_0x8004 = gLastFieldPokeMenuOpened; - sub_8123138(taskId); -} - -static void sub_8122F90(void) -{ - while (1) - { - if (sub_806B124() == 1) - { - sub_806C994(ewram1B000.unk260, gUnknown_020384F0); - sub_806BF74(ewram1B000.unk260, 0); - GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); - gLastFieldPokeMenuOpened = gUnknown_020384F0; - sub_8122D94(ewram1B000.unk260); - SetMainCallback2(sub_806AEDC); - break; - } - if (sub_80F9344() == 1) - break; - } -} - -static void sub_8123004(void) -{ - gPaletteFade.bufferTransferDisabled = TRUE; - sub_806AF4C(6, 0xFF, Task_DaycareStorageMenu8122EAC, 5); - SetMainCallback2(sub_8122F90); -} - -static void sub_8123034(u8 taskId) -{ - if (!gPaletteFade.active) - { - u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data0; - - DestroyTask(taskId); - ewram1B000.unk262 = 1; - ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_8123004, 0); - } -} - -static void DaycareStorageMenuCallback_Summary(u8 taskId) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = sub_8123034; -} - -static void DaycareStorageMenuCallback_Exit(u8 taskId) -{ - PlaySE(SE_SELECT); - MenuZeroFillWindowRect(20, 10, 29, 19); - HandleDestroyMenuCursors(); - sub_806D538(15, 0); - gTasks[taskId].func = sub_8122E0C; -} - -void sub_8123138(u8 taskId) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = sub_8123170; -} - -static void sub_8123170(u8 taskId) -{ - if (!gPaletteFade.active) - { - gFieldCallback = sub_81231AC; - SetMainCallback2(c2_exit_to_overworld_2_switch); - DestroyTask(taskId); - } -} - -// Do these last two functions really belong in here? - -static void sub_81231C4(u8); - -void sub_81231AC(void) -{ - pal_fill_black(); - CreateTask(sub_81231C4, 10); -} - -static void sub_81231C4(u8 taskId) -{ - if (sub_807D770() == TRUE) - { - DestroyTask(taskId); - ScriptContext2_Disable(); - EnableBothScriptContexts(); - } -} diff --git a/src/clear_save_data_menu.c b/src/clear_save_data_menu.c deleted file mode 100644 index 498562fe0..000000000 --- a/src/clear_save_data_menu.c +++ /dev/null @@ -1,177 +0,0 @@ -#include "global.h" -#include "clear_save_data_menu.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "save.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "strings2.h" -#include "task.h" - -static void VBlankCB_ClearSaveDataScreen(void); -static void Task_InitMenu(u8); -static void Task_ProcessMenuInput(u8); -static void Task_ClearSaveData(u8); -static void CB2_ClearSaveDataScreen(void); -static void VBlankCB_InitClearSaveDataScreen(void); -static u8 InitClearSaveDataScreen(void); -static void CB2_SoftReset(void); - -void CB2_InitClearSaveDataScreen(void) -{ - if (InitClearSaveDataScreen()) - { - CreateTask(Task_InitMenu, 0); - } -} - -static void VBlankCB_ClearSaveDataScreen(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -static void Task_InitMenu(u8 taskId) -{ - ResetSpriteData(); - - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; - - SetVBlankCallback(VBlankCB_ClearSaveDataScreen); - MenuDrawTextWindow(2, 14, 27, 19); - MenuPrint(gSystemText_ClearAllSaveDataPrompt, 3, 15); - - MenuDrawTextWindow(2, 1, 8, 6); - PrintMenuItems(3, 2, 2, gMenuYesNoItems); - InitMenu(0, 3, 2, 2, 1, 5); - - gTasks[taskId].func = Task_ProcessMenuInput; -} - -static void Task_ProcessMenuInput(u8 taskId) -{ - switch (ProcessMenuInputNoWrap_()) - { - case 0: - PlaySE(SE_SELECT); - sub_8071F40(gSystemText_ClearingData); - gTasks[taskId].func = Task_ClearSaveData; - break; - case -1: - case 1: - PlaySE(SE_SELECT); - DestroyTask(taskId); - SetMainCallback2(CB2_SoftReset); - break; - } - AnimateSprites(); - BuildOamBuffer(); -} - -static void Task_ClearSaveData(u8 taskId) -{ - ClearSaveData(); - DestroyTask(taskId); - SetMainCallback2(CB2_SoftReset); -} - -static void CB2_ClearSaveDataScreen(void) -{ - RunTasks(); - UpdatePaletteFade(); -} - -static void VBlankCB_InitClearSaveDataScreen(void) -{ - TransferPlttBuffer(); -} - -static u8 InitClearSaveDataScreen(void) -{ - u16 i; - u16 ime; - - switch (gMain.state) - { - case 0: - default: - SetVBlankCallback(NULL); - - REG_DISPCNT = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - REG_WIN0H = 0; - REG_WIN0V = 0; - REG_WININ = 0; - REG_WINOUT = 0; - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - - DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); - DmaFill32(3, 0, (void *)OAM, OAM_SIZE); - DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2); - - ResetPaletteFade(); - - gPlttBufferUnfaded[0] = 0x7fff; - gPlttBufferFaded[0] = 0x7fff; - gPlttBufferUnfaded[1] = 0x3945; - gPlttBufferFaded[1] = 0x3945; - - for (i = 0; i < 0x10; i++) - ((u16 *)(VRAM + 0x20))[i] = 0x1111; - - for (i = 0; i < 0x500; i++) - ((u16 *)(VRAM + 0x3800))[i] = 0x0001; - - ResetTasks(); - ResetSpriteData(); - - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow(&gWindowConfig_81E6CE4); - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0xffff); - - ime = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = ime; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - - SetVBlankCallback(VBlankCB_InitClearSaveDataScreen); - - REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_BG0_ON | DISPCNT_BG3_ON; - gMain.state = 1; - return 0; - case 1: - UpdatePaletteFade(); - if (gPaletteFade.active) - return 0; - SetMainCallback2(CB2_ClearSaveDataScreen); - return 1; - } -} - -static void CB2_SoftReset(void) -{ - switch (gMain.state) - { - case 0: - default: - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0xffff); - gMain.state = 1; - break; - case 1: - UpdatePaletteFade(); - if (gPaletteFade.active) - return; - DoSoftReset(); - break; - } -} diff --git a/src/clock.c b/src/clock.c deleted file mode 100644 index 1f2aac9fd..000000000 --- a/src/clock.c +++ /dev/null @@ -1,90 +0,0 @@ -#include "global.h" -#include "clock.h" -#include "berry.h" -#include "dewford_trend.h" -#include "event_data.h" -#include "field_specials.h" -#include "field_weather.h" -#include "lottery_corner.h" -#include "main.h" -#include "rom4.h" -#include "rtc.h" -#include "time_events.h" -#include "tv.h" -#include "wallclock.h" - -static void InitTimeBasedEvents(void); -static void UpdatePerDay(struct Time *time); -static void UpdatePerMinute(struct Time *time); -static void ReturnFromStartWallClock(void); - -static void InitTimeBasedEvents(void) -{ - FlagSet(SYS_CLOCK_SET); - RtcCalcLocalTime(); - gSaveBlock2.lastBerryTreeUpdate = gLocalTime; - VarSet(VAR_DAYS, gLocalTime.days); -} - -void DoTimeBasedEvents(void) -{ - if (FlagGet(SYS_CLOCK_SET)) - { - RtcCalcLocalTime(); - UpdatePerDay(&gLocalTime); - UpdatePerMinute(&gLocalTime); - } -} - -static void UpdatePerDay(struct Time *time) -{ - u16 *varPtr = GetVarPointer(VAR_DAYS); - int days = *varPtr; - u16 newDays; - - if (days != time->days && days <= time->days) - { - newDays = time->days - days; - ClearUpperFlags(); - UpdateDewfordTrendPerDay(newDays); - UpdateTVShowsPerDay(newDays); - UpdateWeatherPerDay(newDays); - UpdatePartyPokerusTime(newDays); - UpdateMirageRnd(newDays); - UpdateBirchState(newDays); - SetShoalItemFlag(newDays); - SetRandomLotteryNumber(newDays); - *varPtr = time->days; - } -} - -static void UpdatePerMinute(struct Time *time) -{ - struct Time newTime; - s32 minutes; - - CalcTimeDifference(&newTime, &gSaveBlock2.lastBerryTreeUpdate, time); - minutes = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes; - - // there's no way to get the correct assembly other than with this nested if check. so dumb. - if (minutes != 0) - { - if (minutes >= 0) - { - BerryTreeTimeUpdate(minutes); - gSaveBlock2.lastBerryTreeUpdate = *time; - } - } -} - -static void ReturnFromStartWallClock(void) -{ - InitTimeBasedEvents(); - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); -} - -void StartWallClock(void) -{ - SetMainCallback2(CB2_StartWallClock); - gMain.savedCallback = ReturnFromStartWallClock; -} diff --git a/src/coins.c b/src/coins.c deleted file mode 100644 index 3c6356612..000000000 --- a/src/coins.c +++ /dev/null @@ -1,84 +0,0 @@ -#include "global.h" -#include "coins.h" -#include "menu.h" -#include "string_util.h" -#include "strings.h" - -#define MAX_COINS 9999 - -void UpdateCoinsWindow(s32 a, u8 b, u8 c) -{ - PrintCoins(a, 4, b + 2, c + 1); -} - -void ShowCoinsWindow(u32 a, u8 b, u8 c) -{ - MenuDrawTextWindow(b, c, b + 9, c + 3); - UpdateCoinsWindow(a, b, c); -} - -void HideCoinsWindow(u8 a, u8 b) -{ - MenuZeroFillWindowRect(a, b, a + 9, b + 3); -} - -void PrintCoins(s32 a, u8 b, u8 c, u8 d) -{ - u8 string[16]; - u8 *ptr; - u8 r1; - u8 foo; - - ConvertIntToDecimalString(string, a); - r1 = (b * 6 + 0x21 - 8 * (b + 2)); - c = c - r1 / 8; - foo = r1 % 8; - ptr = gStringVar1; - if (foo) - { - ptr[0] = 0xFC; - ptr[1] = 0x11; - ptr[2] = 8 - (foo); - ptr += 3; - } - ptr[0] = 0xFC; - ptr[1] = 0x11; - ptr[2] = (b - StringLength(string)) * 6; - ptr += 3; - StringCopy(ptr, string); - MenuPrint(gOtherText_Coins2, c, d); -} - -u16 GetCoins(void) -{ - return gSaveBlock1.coins; -} - -bool8 GiveCoins(u16 coins) -{ - u32 newCoins; - - if (GetCoins() >= MAX_COINS) - return FALSE; - newCoins = coins + gSaveBlock1.coins; - if (gSaveBlock1.coins > (u16)newCoins) - gSaveBlock1.coins = MAX_COINS; - else - { - gSaveBlock1.coins = newCoins; - if ((u16)newCoins > MAX_COINS) - gSaveBlock1.coins = MAX_COINS; - } - return TRUE; -} - -bool8 TakeCoins(u16 coins) -{ - if (GetCoins() >= coins) - { - gSaveBlock1.coins -= coins; - return TRUE; - } - else - return FALSE; -} diff --git a/src/contest_link_80C857C.c b/src/contest_link_80C857C.c deleted file mode 100644 index 0ae98af09..000000000 --- a/src/contest_link_80C857C.c +++ /dev/null @@ -1,55 +0,0 @@ -#include "global.h" -#include "link.h" - -#if GERMAN - -void de_sub_80C9274(bool32 arg0) { - if (deUnkValue2 != 1) - { - return; - } - - if (arg0) - { - deUnkValue2 = 3; - } - else - { - deUnkValue2 = 2; - } -} - -void de_sub_80C9294(bool32 arg0) { - if (deUnkValue2 == 1) - { - if (arg0) - { - deUnkValue2 = 3; - } - else - { - deUnkValue2 = 2; - } - - return; - } - - - if (deUnkValue2 == 2) - { - SendBlock(0, sBlockRequestLookupTable[deUnkValue1].address, sBlockRequestLookupTable[deUnkValue1].size); - - if (arg0) - { - deUnkValue2 = 0; - } - else - { - deUnkValue2 = 1; - } - - return; - } -} - -#endif diff --git a/src/contest_painting.c b/src/contest_painting.c deleted file mode 100644 index 391cbdfaa..000000000 --- a/src/contest_painting.c +++ /dev/null @@ -1,805 +0,0 @@ -#include "global.h" -#include "contest_painting.h" -#include "cute_sketch.h" -#include "data2.h" -#include "decompress.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "rng.h" -#include "sprite.h" -#include "string_util.h" -#include "strings.h" -#include "text.h" -#include "unknown_task.h" - -extern u8 unk_2000000[]; - -static u8 gUnknown_03000750; -static u16 gUnknown_03000752; -static u16 gUnknown_03000754; -static u8 gUnknown_03000756; - -u16 (*gUnknown_03005E10)[][32]; -struct Unk03005E20 gUnknown_03005E20; -u8 gUnknown_03005E40[0x4C]; -struct ContestEntry *gUnknown_03005E8C; -u16 (*gUnknown_03005E90)[]; - -extern struct ContestEntry unk_2015de0; -extern struct Unk2015E00 unk_2015e00; - -static const u16 gPictureFramePalettes[][16] = -{ - INCBIN_U16("graphics/picture_frame/bg0.gbapal"), - INCBIN_U16("graphics/picture_frame/bg1.gbapal"), - INCBIN_U16("graphics/picture_frame/bg2.gbapal"), - INCBIN_U16("graphics/picture_frame/bg3.gbapal"), - INCBIN_U16("graphics/picture_frame/bg4.gbapal"), - INCBIN_U16("graphics/picture_frame/bg5.gbapal"), - {0}, - {0}, -}; -const u8 emptySpace[8 * 32] = {0}; -const u8 gPictureFrameTiles_0[] = INCBIN_U8("graphics/picture_frame/frame0.4bpp.rl"); -const u8 gPictureFrameTiles_1[] = INCBIN_U8("graphics/picture_frame/frame1.4bpp.rl"); -const u8 gPictureFrameTiles_2[] = INCBIN_U8("graphics/picture_frame/frame2.4bpp.rl"); -const u8 gPictureFrameTiles_3[] = INCBIN_U8("graphics/picture_frame/frame3.4bpp.rl"); -const u8 gPictureFrameTiles_4[] = INCBIN_U8("graphics/picture_frame/frame4.4bpp.rl"); -const u8 gPictureFrameTiles_5[] = INCBIN_U8("graphics/picture_frame/frame5.4bpp.rl"); -const u8 gPictureFrameTilemap_0[] = INCBIN_U8("graphics/picture_frame/frame0_map.bin.rl"); -const u8 gPictureFrameTilemap_1[] = INCBIN_U8("graphics/picture_frame/frame1_map.bin.rl"); -const u8 gPictureFrameTilemap_2[] = INCBIN_U8("graphics/picture_frame/frame2_map.bin.rl"); -const u8 gPictureFrameTilemap_3[] = INCBIN_U8("graphics/picture_frame/frame3_map.bin.rl"); -const u8 gPictureFrameTilemap_4[] = INCBIN_U8("graphics/picture_frame/frame4_map.bin.rl"); -const u8 gPictureFrameTilemap_5[] = INCBIN_U8("graphics/picture_frame/frame5_map.bin.rl"); -const u8 *const gUnknown_083F60AC[] = -{ - OtherText_Cool, - OtherText_Beauty2, - OtherText_Cute, - OtherText_Smart, - OtherText_Tough, -}; -const struct LabelPair gUnknown_083F60C0[] = -{ - {OtherText_NonstopSuperCool, OtherText_Terminator6}, - {OtherText_GoodLookingPoke, OtherText_Terminator7}, - {OtherText_MarvelousGreat, OtherText_Terminator8}, - {OtherText_CenturyLastVenus, OtherText_Terminator9}, - {OtherText_Terminator10, OtherText_DazzlingSmile}, - {OtherText_PokeCenterIdol, OtherText_Terminator11}, - {OtherText_LovelyAndSweet, OtherText_Terminator12}, - {OtherText_ThePretty, OtherText_WinningPortrait}, - {OtherText_GiveUsWink, OtherText_Terminator13}, - {OtherText_SmartnessMaestro, OtherText_Terminator15}, - {OtherText_ChosenPokeAmong, OtherText_Terminator15}, - {OtherText_TheExcellent, OtherText_ItsMomentOfElegance}, - {OtherText_PowerfullyMuscular, OtherText_Terminator16}, - {OtherText_StrongErEst, OtherText_Terminator17}, - {OtherText_MightyTough, OtherText_Exclamation}, -}; -const struct OamData gOamData_83F6138 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 1, - .bpp = 1, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -const u16 gUnknown_083F6140[] = {0, 0}; - -static void ShowContestPainting(); -static void CB2_HoldContestPainting(void); -static void HoldContestPainting(void); -static void ContestPaintingInitWindow(u8 arg0); -static void ContestPaintingPrintCaption(u8 arg0, u8 arg1); -static void ContestPaintingInitBG(void); -static void ContestPaintingInitVars(u8 arg0); -static void VBlankCB_ContestPainting(void); -void sub_8106B90(); //should be static -static void sub_8107090(u8 arg0, u8 arg1); - -__attribute__((naked)) -void sub_8106630(u32 arg0) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - ldr r2, _0810665C @ =0x02015de0\n\ - subs r4, r2, 0x2\n\ - subs r5, r2, 0x1\n\ - ldr r3, _08106660 @ =gSaveBlock1\n\ - subs r0, 0x1\n\ - lsls r1, r0, 5\n\ - adds r1, r3\n\ - ldr r3, _08106664 @ =0x00002dfc\n\ - adds r1, r3\n\ - ldm r1!, {r3,r6,r7}\n\ - stm r2!, {r3,r6,r7}\n\ - ldm r1!, {r3,r6,r7}\n\ - stm r2!, {r3,r6,r7}\n\ - ldm r1!, {r6,r7}\n\ - stm r2!, {r6,r7}\n\ - strb r0, [r4]\n\ - movs r0, 0\n\ - strb r0, [r5]\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0810665C: .4byte 0x02015de0\n\ -_08106660: .4byte gSaveBlock1\n\ -_08106664: .4byte 0x00002dfc\n\ - .syntax divided\n"); -} - -void CB2_ContestPainting(void) -{ - ShowContestPainting(); -} - -static void ShowContestPainting(void) -{ - switch (gMain.state) - { - case 0: - remove_some_task(); - SetVBlankCallback(NULL); - gUnknown_03005E8C = &unk_2015de0; - ContestPaintingInitVars(TRUE); - ContestPaintingInitBG(); - gMain.state++; - break; - case 1: - { - u8 *addr; - size_t size; - - ResetPaletteFade(); - addr = (void *)VRAM; - size = 0x18000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - ResetSpriteData(); - gMain.state++; - break; - } - case 2: - SeedRng(gMain.vblankCounter1); - InitKeys(); - ContestPaintingInitWindow(unk_2000000[0x15DDF]); - gMain.state++; - break; - case 3: - sub_8107090(unk_2000000[0x15DDE], unk_2000000[0x15DDF]); - gMain.state++; - break; - case 4: - ContestPaintingPrintCaption(unk_2000000[0x15DDE], unk_2000000[0x15DDF]); - LoadPalette(gUnknown_083F6140, 0, 1 * 2); - DmaClear32(3, PLTT, 0x400); - BeginFastPaletteFade(2); - SetVBlankCallback(VBlankCB_ContestPainting); - gUnknown_03000750 = 0; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; - SetMainCallback2(CB2_HoldContestPainting); - break; - } -} - -static void CB2_HoldContestPainting(void) -{ - HoldContestPainting(); - UpdatePaletteFade(); -} - -static void CB2_QuitContestPainting(void) -{ - SetMainCallback2(gMain.savedCallback); -} - -static void HoldContestPainting(void) -{ - switch (gUnknown_03000750) - { - case 0: - if (!gPaletteFade.active) - gUnknown_03000750 = 1; - if (gUnknown_03000756 != 0 && gUnknown_03000754 != 0) - gUnknown_03000754--; - break; - case 1: - if ((gMain.newKeys & 1) || (gMain.newKeys & 2)) - { - u8 two = 2; //needed to make the asm match - - gUnknown_03000750 = two; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - } - if (gUnknown_03000756 != 0) - gUnknown_03000754 = 0; - break; - case 2: - if (!gPaletteFade.active) - SetMainCallback2(CB2_QuitContestPainting); - if (gUnknown_03000756 != 0 && gUnknown_03000754 <= 0x1D) - gUnknown_03000754++; - break; - } -} - -static void ContestPaintingInitWindow(u8 arg0) -{ - InitMenuWindow(&gWindowConfig_81E7160); - SetUpWindowConfig(&gWindowConfig_81E7160); -} - -static void ContestPaintingPrintCaption(u8 contestType, u8 arg1) -{ - u8 xPos, yPos; - u8 *ptr; - u8 type; - - if (arg1 == TRUE) - return; - ptr = gUnknown_03005E40; - type = gUnknown_03005E8C->contestType; - if (contestType < 8) - { - ptr = StringCopy(ptr, gUnknown_083F60AC[type]); - ptr = StringCopy(ptr, gContestText_ContestWinner); -#if ENGLISH - ptr = StringCopy(ptr, gUnknown_03005E8C->trainer_name); -#elif GERMAN - ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); -#endif - - // {LATIN} - ptr[0] = 0xFC; - ptr[1] = 0x16; - ptr += 2; - - ptr = StringCopy(ptr, gOtherText_Unknown1); -#if ENGLISH - ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); -#elif GERMAN - ptr = StringCopy(ptr, gUnknown_03005E8C->trainer_name); -#endif - - xPos = 6; - yPos = 14; - } - else - { - ptr = StringCopy(ptr, gUnknown_083F60C0[type].prefix); - ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); - ptr = StringCopy(ptr, gUnknown_083F60C0[type].suffix); - - xPos = 3; - yPos = 14; - } - MenuPrint_PixelCoords(gUnknown_03005E40, xPos * 8 + 1, yPos * 8, 1); -} - -static void ContestPaintingInitBG(void) -{ - REG_DISPCNT = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_BG0CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(12) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; -} - -static void ContestPaintingInitVars(bool8 arg0) -{ - if (arg0 == FALSE) - { - gUnknown_03000756 = FALSE; - gUnknown_03000752 = 0; - gUnknown_03000754 = 0; - } - else - { - gUnknown_03000756 = TRUE; - gUnknown_03000752 = 15; - gUnknown_03000754 = 30; - } -} - -static void ContestPaintingMosaic(void) -{ - if (gUnknown_03000756 == FALSE) - { - REG_MOSAIC = 0; - return; - } - - REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256; - gUnknown_03000752 = gUnknown_03000754 / 2; - - REG_MOSAIC = (gUnknown_03000752 << 12) | (gUnknown_03000752 << 8) | (gUnknown_03000752 << 4) | (gUnknown_03000752 << 0); -} - -static void VBlankCB_ContestPainting(void) -{ - ContestPaintingMosaic(); - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -#ifdef NONMATCHING -static void sub_8106AC4(u16 species, u8 arg1) -{ - void *pal; - - // Unsure what gUnknown_03005E8C->var0 is supposed to be. - pal = species_and_otid_get_pal(species, gUnknown_03005E8C->var4, gUnknown_03005E8C->var0); - LZDecompressVram(pal, gUnknown_03005E90); - - if (arg1 == 1) - { - HandleLoadSpecialPokePic( - &gMonFrontPicTable[species], - gMonFrontPicCoords[species].x, - gMonFrontPicCoords[species].y, - 0x2000000, - gUnknown_081FAF4C[1], - species, - (u32)gUnknown_03005E8C->var0 - ); - sub_8106B90(gUnknown_081FAF4C[1], gUnknown_03005E90, gUnknown_03005E10); - } - else - { - HandleLoadSpecialPokePic( - &gMonBackPicTable[species], - gMonBackPicCoords[species].x, - gMonBackPicCoords[species].y, - 0x2000000, - gUnknown_081FAF4C[0], - species, - (u32)gUnknown_03005E8C->var0 - ); - sub_8106B90(gUnknown_081FAF4C[0], gUnknown_03005E90, gUnknown_03005E10); - } -} -#else -__attribute__((naked)) -static void sub_8106AC4(u16 arg0, u8 arg2) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - sub sp, 0xC\n\ - adds r4, r1, 0\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - ldr r7, _08106B28 @ =gUnknown_03005E8C\n\ - ldr r0, [r7]\n\ - ldr r1, [r0, 0x4]\n\ - ldr r2, [r0]\n\ - adds r0, r6, 0\n\ - bl species_and_otid_get_pal\n\ - ldr r1, _08106B2C @ =gUnknown_03005E90\n\ - mov r8, r1\n\ - ldr r1, [r1]\n\ - bl LZDecompressVram\n\ - cmp r4, 0\n\ - bne _08106B40\n\ - lsls r0, r6, 3\n\ - ldr r1, _08106B30 @ =gMonFrontPicTable\n\ - adds r0, r1\n\ - ldr r1, _08106B34 @ =gMonFrontPicCoords\n\ - lsls r2, r6, 2\n\ - adds r2, r1\n\ - ldrb r1, [r2]\n\ - ldrb r2, [r2, 0x1]\n\ - movs r3, 0x80\n\ - lsls r3, 18\n\ - ldr r4, _08106B38 @ =gUnknown_081FAF4C\n\ - ldr r5, [r4, 0x4]\n\ - str r5, [sp]\n\ - str r6, [sp, 0x4]\n\ - ldr r4, [r7]\n\ - ldr r4, [r4]\n\ - str r4, [sp, 0x8]\n\ - bl HandleLoadSpecialPokePic\n\ - mov r2, r8\n\ - ldr r1, [r2]\n\ - ldr r0, _08106B3C @ =gUnknown_03005E10\n\ - ldr r2, [r0]\n\ - adds r0, r5, 0\n\ - bl sub_8106B90\n\ - b _08106B74\n\ - .align 2, 0\n\ -_08106B28: .4byte gUnknown_03005E8C\n\ -_08106B2C: .4byte gUnknown_03005E90\n\ -_08106B30: .4byte gMonFrontPicTable\n\ -_08106B34: .4byte gMonFrontPicCoords\n\ -_08106B38: .4byte gUnknown_081FAF4C\n\ -_08106B3C: .4byte gUnknown_03005E10\n\ -_08106B40:\n\ - lsls r0, r6, 3\n\ - ldr r1, _08106B80 @ =gMonBackPicTable\n\ - adds r0, r1\n\ - ldr r1, _08106B84 @ =gMonBackPicCoords\n\ - lsls r2, r6, 2\n\ - adds r2, r1\n\ - ldrb r1, [r2]\n\ - ldrb r2, [r2, 0x1]\n\ - movs r3, 0x80\n\ - lsls r3, 18\n\ - ldr r4, _08106B88 @ =gUnknown_081FAF4C\n\ - ldr r5, [r4]\n\ - str r5, [sp]\n\ - str r6, [sp, 0x4]\n\ - ldr r4, [r7]\n\ - ldr r4, [r4]\n\ - str r4, [sp, 0x8]\n\ - bl HandleLoadSpecialPokePic\n\ - mov r0, r8\n\ - ldr r1, [r0]\n\ - ldr r0, _08106B8C @ =gUnknown_03005E10\n\ - ldr r2, [r0]\n\ - adds r0, r5, 0\n\ - bl sub_8106B90\n\ -_08106B74:\n\ - add sp, 0xC\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08106B80: .4byte gMonBackPicTable\n\ -_08106B84: .4byte gMonBackPicCoords\n\ -_08106B88: .4byte gUnknown_081FAF4C\n\ -_08106B8C: .4byte gUnknown_03005E10\n\ - .syntax divided\n"); -} -#endif - -#ifdef NONMATCHING -void sub_8106B90(u8 a[][8][8][4], u16 b[], u16 c[][8][8][8]) -{ - u16 i; - u16 j; - u16 k; - u16 l; - - for (i = 0; i < 8; i++) - { - for (j = 0; j < 8; j++) - { - for (k = 0; k < 8; k++) - { - for (l = 0; l < 8; l++) - { - //u8 *arr = a[i][j][k]; - //u8 r1 = arr[l / 2]; - u8 r1 = a[i][j][k][l / 2]; - - if (l & 1) - r1 /= 16; - else - r1 %= 16; - //_08106BEA - if (r1 == 0) - c[i][k][j][l] = 0x8000; - else - c[i][k][j][l] = b[r1]; - } - } - } - } -} -#else -__attribute__((naked)) -void sub_8106B90() -{ - 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\ - mov r10, r0\n\ - mov r9, r1\n\ - str r2, [sp]\n\ - movs r0, 0\n\ -_08106BA4:\n\ - movs r3, 0\n\ - adds r1, r0, 0x1\n\ - str r1, [sp, 0x4]\n\ - lsls r0, 3\n\ - str r0, [sp, 0x8]\n\ -_08106BAE:\n\ - movs r1, 0\n\ - adds r2, r3, 0x1\n\ - mov r8, r2\n\ - ldr r7, [sp, 0x8]\n\ - adds r0, r7, r3\n\ - lsls r0, 5\n\ - mov r12, r0\n\ - lsls r4, r3, 3\n\ -_08106BBE:\n\ - movs r3, 0\n\ - lsls r0, r1, 2\n\ - adds r6, r1, 0x1\n\ - mov r2, r12\n\ - adds r5, r2, r0\n\ - ldr r7, [sp, 0x8]\n\ - adds r0, r7, r1\n\ - lsls r0, 7\n\ - ldr r1, [sp]\n\ - adds r2, r0, r1\n\ -_08106BD2:\n\ - lsrs r0, r3, 1\n\ - adds r0, r5, r0\n\ - add r0, r10\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r3\n\ - cmp r0, 0\n\ - beq _08106BE6\n\ - lsrs r1, 4\n\ - b _08106BEA\n\ -_08106BE6:\n\ - movs r0, 0xF\n\ - ands r1, r0\n\ -_08106BEA:\n\ - cmp r1, 0\n\ - bne _08106BFC\n\ - adds r0, r4, r3\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - movs r7, 0x80\n\ - lsls r7, 8\n\ - adds r1, r7, 0\n\ - b _08106C08\n\ -_08106BFC:\n\ - adds r0, r4, r3\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - lsls r1, 1\n\ - add r1, r9\n\ - ldrh r1, [r1]\n\ -_08106C08:\n\ - strh r1, [r0]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, 0x7\n\ - bls _08106BD2\n\ - lsls r0, r6, 16\n\ - lsrs r1, r0, 16\n\ - cmp r1, 0x7\n\ - bls _08106BBE\n\ - mov r1, r8\n\ - lsls r0, r1, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, 0x7\n\ - bls _08106BAE\n\ - ldr r2, [sp, 0x4]\n\ - lsls r0, r2, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x7\n\ - bls _08106BA4\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 {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} -#endif - -static void sub_8106C40(u8 arg0, u8 arg1) -{ - u8 x, y; - - LoadPalette(gPictureFramePalettes, 0, sizeof(gPictureFramePalettes)); - if (arg1 == 1) - { - switch (gUnknown_03005E8C->contestType / 3) - { - case CONTEST_COOL: - RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_0, gUnknown_03005E10); - break; - case CONTEST_BEAUTY: - RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_1, gUnknown_03005E10); - break; - case CONTEST_CUTE: - RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_2, gUnknown_03005E10); - break; - case CONTEST_SMART: - RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_3, gUnknown_03005E10); - break; - case CONTEST_TOUGH: - RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_4, gUnknown_03005E10); - break; - } - -#define VRAM_PICTURE_DATA(x, y) (((u16 *)(VRAM + 0x6000))[(y) * 32 + (x)]) - - // Set the background - for (y = 0; y < 20; y++) - { - for (x = 0; x < 32; x++) - VRAM_PICTURE_DATA(x, y) = 0x1015; - } - - // Copy the image frame - for (y = 0; y < 10; y++) - { - for (x = 0; x < 18; x++) - VRAM_PICTURE_DATA(x + 6, y + 2) = (*gUnknown_03005E10)[y + 2][x + 6]; - } - - // Re-set the entire top row to the first top frame part - for (x = 0; x < 16; x++) - VRAM_PICTURE_DATA(x + 7, 2) = (*gUnknown_03005E10)[2][7]; - -#undef VRAM_PICTURE_DATA - } - else if (arg0 < 8) - { - RLUnCompVram(gPictureFrameTiles_5, (void *)VRAM); - RLUnCompVram(gPictureFrameTilemap_5, (void *)(VRAM + 0x6000)); - } - else - { - switch (gUnknown_03005E8C->contestType / 3) - { - case CONTEST_COOL: - RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM); - RLUnCompVram(gPictureFrameTilemap_0, (void *)(VRAM + 0x6000)); - break; - case CONTEST_BEAUTY: - RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM); - RLUnCompVram(gPictureFrameTilemap_1, (void *)(VRAM + 0x6000)); - break; - case CONTEST_CUTE: - RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM); - RLUnCompVram(gPictureFrameTilemap_2, (void *)(VRAM + 0x6000)); - break; - case CONTEST_SMART: - RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM); - RLUnCompVram(gPictureFrameTilemap_3, (void *)(VRAM + 0x6000)); - break; - case CONTEST_TOUGH: - RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM); - RLUnCompVram(gPictureFrameTilemap_4, (void *)(VRAM + 0x6000)); - break; - } - } -} - -static void sub_8106E98(u8 arg0) -{ - //Some hacks just to get the asm to match -#ifndef NONMATCHING - asm(""::"r"(arg0)); -#endif - - gMain.oamBuffer[0] = gOamData_83F6138; - gMain.oamBuffer[0].tileNum = 0; - -#ifndef NONMATCHING - if (arg0) arg0 = gMain.oamBuffer[0].tileNum; -#endif - - gMain.oamBuffer[0].x = 88; - gMain.oamBuffer[0].y = 24; -} - -static u8 sub_8106EE0(u8 arg0) -{ - u8 contestType; - - if (arg0 < 8) - contestType = gUnknown_03005E8C->contestType; - else - contestType = gUnknown_03005E8C->contestType / 3; - - switch (contestType) - { - case CONTEST_COOL: - return CONTESTRESULT_COOL; - case CONTEST_BEAUTY: - return CONTESTRESULT_BEAUTY; - case CONTEST_CUTE: - return CONTESTRESULT_CUTE; - case CONTEST_SMART: - return CONTESTRESULT_SMART; - case CONTEST_TOUGH: - return CONTESTRESULT_TOUGH; - } - - return contestType; -} - -static void sub_8106F4C(void) -{ - gUnknown_03005E90 = &unk_2015e00.unk2017e00; - gUnknown_03005E10 = &unk_2015e00.unk2015e00; -} - -static void sub_8106F6C(u8 arg0) -{ - gUnknown_03005E20.var_4 = gUnknown_03005E10; - gUnknown_03005E20.var_8 = gUnknown_03005E90; - gUnknown_03005E20.var_18 = 0; - gUnknown_03005E20.var_1F = gUnknown_03005E8C->var0; - gUnknown_03005E20.var_19 = 0; - gUnknown_03005E20.var_1A = 0; - gUnknown_03005E20.var_1B = 64; - gUnknown_03005E20.var_1C = 64; - gUnknown_03005E20.var_1D = 64; - gUnknown_03005E20.var_1E = 64; - - switch (arg0) - { - case CONTESTRESULT_SMART: - case CONTESTRESULT_TOUGH: - gUnknown_03005E20.var_14 = 3; - break; - case CONTESTRESULT_COOL: - case CONTESTRESULT_BEAUTY: - case CONTESTRESULT_CUTE: - default: - gUnknown_03005E20.var_14 = 1; - break; - } - - gUnknown_03005E20.var_16 = 2; - gUnknown_03005E20.var_0 = arg0; - gUnknown_03005E20.var_10 = 0x6010000; - - sub_80FC7A0(&gUnknown_03005E20); - sub_80FDA18(&gUnknown_03005E20); - sub_80FD8CC(&gUnknown_03005E20); - - LoadPalette(gUnknown_03005E90, 256, 256 * 2); -} - -static void sub_8107090(u8 arg0, u8 arg1) -{ - sub_8106F4C(); - sub_8106AC4(gUnknown_03005E8C->var8, 0); - sub_8106F6C(sub_8106EE0(arg0)); - sub_8106E98(arg0); - sub_8106C40(arg0, arg1); -} diff --git a/src/coord_event_weather.c b/src/coord_event_weather.c deleted file mode 100644 index 9c5a1ca4d..000000000 --- a/src/coord_event_weather.c +++ /dev/null @@ -1,118 +0,0 @@ -#include "global.h" -#include "coord_event_weather.h" -#include "field_weather.h" - -struct CoordEventWeather -{ - u8 weather; - void (*func)(void); -}; - -static void CoordEventWeather_Indoor(void); -static void CoordEventWeather_Sunny(void); -static void CoordEventWeather_Rain(void); -static void CoordEventWeather_Snowflakes(void); -static void CoordEventWeather_Thunderstorm(void); -static void CoordEventWeather_Fog(void); -static void CoordEventWeather_DiagonalFog(void); -static void CoordEventWeather_Snow(void); -static void CoordEventWeather_Sandstorm(void); -static void CoordEventWeather_Cloudy(void); -static void CoordEventWeather_Drought(void); -static void CoordEventWeather_UnderwaterFog(void); -static void CoordEventWeather_UnderwaterBubbles(void); - -static const struct CoordEventWeather sCoordEventWeatherFuncs[] = -{ - { 0x1, CoordEventWeather_Indoor }, - { 0x2, CoordEventWeather_Sunny }, - { 0x3, CoordEventWeather_Rain }, - { 0x4, CoordEventWeather_Snowflakes }, - { 0x5, CoordEventWeather_Thunderstorm }, - { 0x6, CoordEventWeather_Fog }, - { 0x7, CoordEventWeather_DiagonalFog }, - { 0x8, CoordEventWeather_Snow }, - { 0x9, CoordEventWeather_Sandstorm }, - { 0xa, CoordEventWeather_Cloudy }, - { 0xb, CoordEventWeather_Drought }, - { 0x14, CoordEventWeather_UnderwaterFog }, - { 0x15, CoordEventWeather_UnderwaterBubbles }, -}; - -static void CoordEventWeather_Indoor(void) -{ - SetWeather(1); -} - -static void CoordEventWeather_Sunny(void) -{ - SetWeather(2); -} - -static void CoordEventWeather_Rain(void) -{ - SetWeather(3); -} - -static void CoordEventWeather_Snowflakes(void) -{ - SetWeather(4); -} - -static void CoordEventWeather_Thunderstorm(void) -{ - SetWeather(5); -} - -static void CoordEventWeather_Fog(void) -{ - SetWeather(6); -} - -static void CoordEventWeather_DiagonalFog(void) -{ - SetWeather(9); -} - -static void CoordEventWeather_Snow(void) -{ - SetWeather(7); -} - -static void CoordEventWeather_Sandstorm(void) -{ - SetWeather(8); -} - -static void CoordEventWeather_Cloudy(void) -{ - SetWeather(11); -} - -static void CoordEventWeather_Drought(void) -{ - SetWeather(12); -} - -static void CoordEventWeather_UnderwaterFog(void) -{ - SetWeather(20); -} - -static void CoordEventWeather_UnderwaterBubbles(void) -{ - SetWeather(21); -} - -void DoCoordEventWeather(u8 n) -{ - u8 i; - for (i = 0; i < ARRAY_COUNT(sCoordEventWeatherFuncs); i++) - { - if (sCoordEventWeatherFuncs[i].weather == n) - { - sCoordEventWeatherFuncs[i].func(); - return; - } - } -} diff --git a/src/credits.c b/src/credits.c deleted file mode 100644 index df70674b6..000000000 --- a/src/credits.c +++ /dev/null @@ -1,1496 +0,0 @@ -#include "global.h" -#include "data2.h" -#include "decompress.h" -#include "event_data.h" -#include "hall_of_fame.h" -#include "intro_credits_graphics.h" -#include "m4a.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "pokedex.h" -#include "rng.h" -#include "songs.h" -#include "sound.h" -#include "species.h" -#include "starter_choose.h" -#include "task.h" -#include "trig.h" - -asm(".set REG_BASE, 0x4000000"); -asm(".set OFFSET_REG_BLDCNT, 0x50"); -asm(".set OFFSET_REG_BLDALPHA, 0x52"); -asm(".set REG_BLDCNT, REG_BASE + OFFSET_REG_BLDCNT"); -asm(".set REG_BLDALPHA, REG_BASE + OFFSET_REG_BLDALPHA"); - -enum -{ - PAGE_TITLE, - PAGE_DIRECTOR, - PAGE_ART_DIRECTOR, - PAGE_BATTLE_DIRECTOR, - PAGE_MAIN_PROGRAMMER, - PAGE_BATTLE_SYSTEM_PROGRAMMER, - PAGE_PROGRAMMERS_1, - PAGE_PROGRAMMERS_2, - PAGE_PROGRAMMERS_3, - PAGE_MAIN_GRAHPICS_DESIGNER, - PAGE_POKEMON_GRAHPIC_DESIGNERS_1, - PAGE_POKEMON_GRAHPIC_DESIGNERS_2, - PAGE_POKEMON_GRAHPIC_DESIGNERS_3, - PAGE_POKEMON_DESIGNERS_1, - PAGE_POKEMON_DESIGNERS_2, - PAGE_MUSIC_COMPOSITION, - PAGE_SOUND_EFFECTS, - PAGE_GAME_DESIGNERS_1, - PAGE_GAME_DESIGNERS_2, - PAGE_GAME_DESIGNERS_3, - PAGE_PLOT_SCENARIO, - PAGE_GAME_SCENARIO, - PAGE_SCRIPT_DESIGNERS, - PAGE_MAP_DESIGNERS, - PAGE_MAP_DATA_DESIGNERS, - PAGE_PARAMETRIC_DESIGNERS, - PAGE_POKEDEX_TEXT, - PAGE_ENVIRONMENT_TOOLS, - PAGE_PRODUCT_TESTING, - PAGE_SPECIAL_THANKS, - PAGE_SPECIAL_THANKS_1, - PAGE_SPECIAL_THANKS_2, - PAGE_SPECIAL_THANKS_3, - PAGE_INFORMATION_SUPERVISORS, - PAGE_COORDINATORS, - PAGE_TASK_MANAGERS, - PAGE_PRODUCERS, - PAGE_EXECUTIVE_DIRECTOR, - PAGE_EXECUTIVE_PRODUCERS_1, - PAGE_EXECUTIVE_PRODUCERS_2, - PAGE_TRANSLATION_COORDINATOR, - PAGE_TRANSLATORS, - PAGE_PROGRAMMERS, - PAGE_GRAPHIC_DESIGNERS, - PAGE_PRODUCT_SUPPORT, - -#if ENGLISH - PAGE_ARTWORK, - PAGE_TEXT_EDITOR, - PAGE_NOA_TESTING, - PAGE_BRAILLE_CODE_CHECK_1, - PAGE_BRAILLE_CODE_CHECK_2, -#elif GERMAN - PAGE_NOE_TESTING, - PAGE_BRAILLE_CODE_CHECK_1, -#endif - - PAGE_SPECIAL_THANKS_4, - PAGE_SPECIAL_THANKS_5, - - PAGE_COUNT -}; - -#if ENGLISH -#define POKEMON_TILE_COUNT 68 -#define LAST_PAGE (PAGE_TEXT_EDITOR) -#define UNK_DEFINE_45 (0x45) -#define UNK_DEFINE_82 (0x82) -#define UNK_DEF_1F3 (499) -#elif GERMAN -#define POKEMON_TILE_COUNT 65 -#define LAST_PAGE (PAGE_NOE_TESTING) -#define UNK_DEFINE_45 (8) -#define UNK_DEFINE_82 (0x8D) -#define UNK_DEF_1F3 (554) -#endif - -#define COLOR_DARK_GREEN 0x1967 -#define COLOR_LIGHT_GREEN 0x328D - -enum -{ - TDA_0 = 0, - TDA_TASK_C_ID = 1, - TDA_TASK_E_ID = 2, - TDA_TASK_D_ID = 3, - TDA_4 = 4, - TDA_PLAYER_CYCLIST = 5, - TDA_RIVAL_CYCLIST = 6, - TDA_7 = 7, // Has something to do with the bike scene - TDA_11 = 11, // Gets set depending on whether the bike or the grass scene should be shown - TDA_12 = 12, - TDA_13 = 13, - TDA_14 = 14, - TDA_TASK_B_ID = 15, - - // Appears to be responsible for text - TDB_0 = 0, - TDB_TASK_A_ID = 1, - TDB_CURRENT_PAGE = 2, - TDB_3 = 3, - - TDC_0 = 0, - TDC_1 = 1, - TDC_2 = 2, - TDC_3 = 3, - TDC_4 = 4, - TDC_5 = 5, - - TDD_STATE = 0, - TDD_TASK_A_ID = 1, - TDD_2 = 2, - TDD_3 = 3, - - TDE_0 = 0, - TDE_1 = 1, - TDE_TASK_A_ID = 2, -}; - - -struct Unk201C000 -{ - u16 unk0[POKEMON_TILE_COUNT]; - u16 unk88; - u16 unk8A; - u16 unk8C; - u16 unk8E; - u16 unk90[386]; - u16 unk394; -}; - -struct CreditsEntry -{ - u8 var_0; - u8 *text; -}; - -extern u8 ewram[]; - -#define EWRAM_1F800 ((u16 *)(ewram + 0x1F800)) -#define HALL_OF_FAME_SHEET_0 ((u8 *)(ewram + 0x1E000)) -#define HALL_OF_FAME_SHEET_1 ((u8 *)(ewram + 0x1E800)) -#define HALL_OF_FAME_SHEET_2 ((u8 *)(ewram + 0x1F000)) -#define ewram1c000 (*(struct Unk201C000 *)(ewram + 0x1C000)) - -extern struct HallOfFame gHallOfFame; -extern u8 unk_201e800[0x800]; -extern u8 unk_201f000[0x800]; -extern u16 unk_201f800[]; - -extern struct SpriteTemplate gUnknown_02024E8C; - -extern u16 gUnknown_02039358; -extern s16 gUnknown_0203935A; -extern s16 gUnknown_0203935C; - -static EWRAM_DATA s16 gUnknown_02039320 = 0; -static EWRAM_DATA u16 gUnknown_02039322 = 0; // TASK A -EWRAM_DATA u8 gUnknown_02039324 = 0; -static EWRAM_DATA u8 gUnknown_02039325 = 0; - -extern u8 gReservedSpritePaletteCount; - -// data/hall_of_fame -extern void *gUnknown_0840B5A0[]; - -// data/credits -const u16 gUnknown_0840B7BC[] = INCBIN_U16("graphics/credits/palette_1.gbapal"); -const u8 gUnknown_0840B7FC[] = INCBIN_U8("graphics/credits/ampersand.4bpp"); -extern u8 gUnknown_0840B83C[]; -extern u8 gUnknown_0840B84B[]; -extern u8 gUnknown_0840B85A[]; -extern u8 gUnknown_0840B869[]; -extern u8 gUnknown_0840B878[]; -extern struct CreditsEntry *gCreditsEntryPointerTable[][5]; -extern u8 gUnknown_0840CA00[][2]; -extern struct SpriteSheet gUnknown_0840CAA0; -extern struct SpritePalette gUnknown_0840CAB0; -extern const union AnimCmd *const gSpriteAnimTable_0840CA54[]; -extern const union AnimCmd *const gSpriteAnimTable_0840CA94[]; -extern struct SpriteTemplate gSpriteTemplate_840CAEC; - -// graphics -extern u8 gCreditsCopyrightEnd_Gfx[]; -extern u16 gIntroCopyright_Pal[16]; - -static void task_a_8143B38(u8 taskIdA); -static void task_a_8143B68(u8 taskIdA); -static void task_a_8143BFC(u8 taskIdA); -static void task_a_80C9BFC(u8 taskIdA); -static void task_a_8143CC0(u8 taskIdA); -static void task_a_8143D04(u8 taskIdA); -static void task_a_8143EBC(u8 taskIdA); -static void task_a_8143F04(u8 taskIdA); -static void task_a_8143F3C(u8 taskIdA); -static void task_a_8143FDC(u8 taskIdA); -static void task_a_8144024(u8 taskIdA); -static void task_a_8144080(u8 taskIdA); -static void task_a_8144114(u8 taskIdA); -static void sub_8144130(void); -static void task_b_81441B8(u8 taskIdB); -static u8 sub_8144454(u8 page, u8 taskIdA); -static void task_d_8144514(u8 taskIdD); -static bool8 sub_8144ECC(u8 data, u8 taskIdA); -static void sub_81450AC(u8 taskIdA); -static void sub_8145128(u16, u16, u16); -static void sub_81452D0(u16 arg0, u16 palette); -static void spritecb_player_8145378(struct Sprite *sprite); -static void spritecb_rival_8145420(struct Sprite *sprite); -static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position); -static void sub_81458DC(void); - -static void vblank_8143948(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -static void sub_814395C(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); - - if ((gMain.heldKeys & B_BUTTON) - && gUnknown_02039324 != 0 - && gTasks[gUnknown_02039322].func == task_a_8143B68) - { - vblank_8143948(); - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); - gUnknown_02039325 = 1; - } -} - -void sub_81439D0(void) -{ - u8 taskIdA; - s16 taskIdC; - u8 taskIdB; - u16 savedIme; - struct Unk201C000 *c000; - - sub_8144130(); - SetVBlankCallback(NULL); - ResetPaletteFade(); - ResetTasks(); - - taskIdA = CreateTask(task_a_8143B38, 0); - - gTasks[taskIdA].data[TDA_4] = 0; - gTasks[taskIdA].data[TDA_7] = 0; - gTasks[taskIdA].data[TDA_11] = 0; - gTasks[taskIdA].data[TDA_13] = 1; - - while (TRUE) - { - if (sub_8144ECC(0, taskIdA)) - break; - } - - taskIdC = gTasks[taskIdA].data[TDA_TASK_C_ID]; - gTasks[taskIdC].data[TDC_0] = 40; - - SetUpWindowConfig(&gWindowConfig_81E7208); - InitMenuWindow(&gWindowConfig_81E7208); - LoadPalette(&gUnknown_0840B7BC, 0x80, sizeof(gUnknown_0840B7BC)); - - CpuCopy16(&gUnknown_0840B7FC, (void *)(VRAM + 0xBEE0), sizeof(gUnknown_0840B7FC)); - - REG_BG0VOFS = 0xFFFC; - - taskIdB = CreateTask(task_b_81441B8, 0); - - gTasks[taskIdB].data[TDB_TASK_A_ID] = taskIdA; - gTasks[taskIdA].data[TDA_TASK_B_ID] = taskIdB; - - BeginNormalPaletteFade(-1, 0, 16, 0, 0); - - savedIme = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = savedIme; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - - - SetVBlankCallback(vblank_8143948); - m4aSongNumStart(BGM_THANKFOR); - SetMainCallback2(sub_814395C); - gUnknown_02039325 = 0; - - c000 = &ewram1c000; - - sub_81458DC(); - - c000->unk88 = 0; - c000->unk8A = 0; - c000->unk8C = 0; - - gUnknown_02039322 = taskIdA; -} - -static void task_a_8143B38(u8 taskIdA) -{ - if (!gPaletteFade.active) - gTasks[taskIdA].func = task_a_8143B68; -} - -static void task_a_8143B68(u8 taskIdA) -{ - u16 data11; - - if (gTasks[taskIdA].data[TDA_4]) - { - s16 taskIdC; - - taskIdC = gTasks[taskIdA].data[TDA_TASK_C_ID]; - gTasks[taskIdC].data[TDC_0] = 30; - - gTasks[taskIdA].data[TDA_12] = 0x100; - gTasks[taskIdA].func = task_a_8143EBC; - return; - } - - gUnknown_02039320 = 0; - data11 = gTasks[taskIdA].data[TDA_11]; - - if (gTasks[taskIdA].data[TDA_11] == 1) - { - gTasks[taskIdA].data[TDA_13] = data11; - gTasks[taskIdA].data[TDA_11] = 0; - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskIdA].func = task_a_8143BFC; - } - else if (gTasks[taskIdA].data[TDA_11] == 2) - { - gTasks[taskIdA].data[TDA_13] = data11; - gTasks[taskIdA].data[TDA_11] = 0; - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskIdA].func = task_a_8143CC0; - } -} - -static void task_a_8143BFC(u8 taskIdA) -{ - if (!gPaletteFade.active) - { - REG_DISPCNT = 0; - sub_81450AC(taskIdA); - gTasks[taskIdA].func = task_a_80C9BFC; - } -} - -static void task_a_80C9BFC(u8 taskIdA) -{ - u16 backup; - - SetVBlankCallback(NULL); - - if (sub_8144ECC(gTasks[taskIdA].data[TDA_7], taskIdA)) - { - BeginNormalPaletteFade(-1, 0, 16, 0, 0); - - backup = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = backup; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - - SetVBlankCallback(vblank_8143948); - gTasks[taskIdA].func = task_a_8143B38; - } -} - -static void task_a_8143CC0(u8 taskIdA) -{ - if (!gPaletteFade.active) - { - REG_DISPCNT = 0; - sub_81450AC(taskIdA); - gTasks[taskIdA].func = task_a_8143D04; - } -} - -void task_a_8143D04(u8 taskIdA) -{ - switch (gMain.state) - { - default: - case 0: - { - u16 i; - - ResetSpriteData(); - FreeAllSpritePalettes(); - gReservedSpritePaletteCount = 8; - LZ77UnCompVram(&gBirchHelpGfx, (void *)VRAM); - LZ77UnCompVram(&gBirchGrassTilemap, (void *)(VRAM + 0x3800)); - LoadPalette(gBirchBagGrassPal[0] + 1, 1, 31 * 2); - - for (i = 0; i < 0x800; i++) - HALL_OF_FAME_SHEET_0[i] = 0x11; - for (i = 0; i < 0x800; i++) - HALL_OF_FAME_SHEET_1[i] = 0x22; - for (i = 0; i < 0x800; i++) - HALL_OF_FAME_SHEET_2[i] = 0x33; - - EWRAM_1F800[0] = 0; - EWRAM_1F800[1] = 0x53FF; // light yellow - EWRAM_1F800[2] = 0x529F; // light red - EWRAM_1F800[3] = 0x7E94; // light blue - - LoadSpriteSheet(&gUnknown_0840CAA0); - LoadSpritePalette(&gUnknown_0840CAB0); - - gMain.state += 1; - break; - } - case 1: - gTasks[taskIdA].data[TDA_TASK_D_ID] = CreateTask(task_d_8144514, 0); - gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_STATE] = 1; - gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_TASK_A_ID] = taskIdA; - gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_2] = gTasks[taskIdA].data[TDA_7]; - - BeginNormalPaletteFade(-1, 0, 16, 0, 0); - REG_BG3HOFS = 0; - REG_BG3VOFS = 32; - REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; - - gMain.state = 0; - gUnknown_0203935C = 0; - gTasks[taskIdA].func = task_a_8143B38; - break; - } -} - -static void task_a_8143EBC(u8 taskIdA) -{ - if (gTasks[taskIdA].data[TDA_12]) - { - gTasks[taskIdA].data[TDA_12] -= 1; - return; - } - - BeginNormalPaletteFade(-1, 12, 0, 16, 0); - gTasks[taskIdA].func = task_a_8143F04; -} - -static void task_a_8143F04(u8 taskIdA) -{ - if (!gPaletteFade.active) - { - sub_81450AC(taskIdA); - gTasks[taskIdA].func = task_a_8143F3C; - } -} - -static void task_a_8143F3C(u8 taskIdA) -{ - u16 backup; - - sub_8144130(); - ResetPaletteFade(); - sub_8145128(0, 0x3800, 0); - ResetSpriteData(); - FreeAllSpritePalettes(); - BeginNormalPaletteFade(-1, 8, 16, 0, 0); - - REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; - backup = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = backup; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON; - - gTasks[taskIdA].data[TDA_0] = 0x100; - gTasks[taskIdA].func = task_a_8143FDC; -} - -static void task_a_8143FDC(u8 taskIdA) -{ - if (gTasks[taskIdA].data[TDA_0]) - { - gTasks[taskIdA].data[TDA_0] -= 1; - return; - } - - BeginNormalPaletteFade(-1, 6, 0, 16, 0); - gTasks[taskIdA].func = task_a_8144024; -} - -static void task_a_8144024(u8 taskIdA) -{ - if (!gPaletteFade.active) - { - sub_81452D0(0x3800, 0); - - BeginNormalPaletteFade(-1, 0, 0, 0, 0); - gTasks[taskIdA].data[TDA_0] = 7200; - gTasks[taskIdA].func = task_a_8144080; - } -} - -static void task_a_8144080(u8 taskIdA) -{ - if (!gPaletteFade.active) - { - if (gTasks[taskIdA].data[TDA_0] == 0) - { - FadeOutBGM(4); - BeginNormalPaletteFade(-1, 8, 0, 16, 0xFFFF); - gTasks[taskIdA].func = task_a_8144114; - return; - } - - if (gMain.newKeys) - { - FadeOutBGM(4); - BeginNormalPaletteFade(-1, 8, 0, 16, 0xFFFF); - gTasks[taskIdA].func = task_a_8144114; - return; - } - - if (gTasks[taskIdA].data[TDA_0] == 7144) - { - FadeOutBGM(8); - } - - if (gTasks[taskIdA].data[TDA_0] == 6840) - m4aSongNumStart(BGM_END); - - gTasks[taskIdA].data[TDA_0] -= 1; - } -} - -static void task_a_8144114(u8 taskIdA) -{ - if (!gPaletteFade.active) - SoftReset(0xFF); -} - -static void sub_8144130(void) -{ - REG_DISPCNT = 0; - - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - - DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); - DmaFill32(3, 0, (void *)OAM, OAM_SIZE); - DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2); -} - -static void task_b_81441B8(u8 taskIdB) -{ - u16 i; - - switch (gTasks[taskIdB].data[TDB_0]) - { - case 0: - case 6: - case 7: - case 8: - case 9: - default: - if (!gPaletteFade.active) - { - gTasks[taskIdB].data[TDB_0] = 1; - gTasks[taskIdB].data[TDB_3] = 0x58; - gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 0; - gUnknown_02039320 = 0; - } - return; - case 1: - if (gTasks[taskIdB].data[TDB_3] != 0) - { - gTasks[taskIdB].data[TDB_3] -= 1; - return; - } - gTasks[taskIdB].data[TDB_0] += 1; - return; - case 2: - REG_DISPCNT &= ~DISPCNT_BG0_ON; - if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].func == task_a_8143B68) - { - if (gTasks[taskIdB].data[TDB_CURRENT_PAGE] < PAGE_COUNT) - { - for (i = 0; i < 5; i++) - sub_8072BD8(gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->text, 0, 9 + i * 2, 240); - - gTasks[taskIdB].data[TDB_CURRENT_PAGE] += 1; - gTasks[taskIdB].data[TDB_0] += 1; - - gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 1; - - if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_13] == 1) - BeginNormalPaletteFade(0x300, 0, 16, 0, COLOR_LIGHT_GREEN); - else - BeginNormalPaletteFade(0x300, 0, 16, 0, COLOR_DARK_GREEN); - return; - } - gTasks[taskIdB].data[TDB_0] = 10; - return; - } - gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 0; - return; - case 3: - REG_DISPCNT |= DISPCNT_BG0_ON; - if (!gPaletteFade.active) - { - gTasks[taskIdB].data[TDB_3] = UNK_DEFINE_82; - gTasks[taskIdB].data[TDB_0] += 1; - } - return; - case 4: - if (gTasks[taskIdB].data[TDB_3] != 0) - { - gTasks[taskIdB].data[TDB_3] -= 1; - return; - } - - if (sub_8144454((u8)gTasks[taskIdB].data[TDB_CURRENT_PAGE], (u8)gTasks[taskIdB].data[TDB_TASK_A_ID])) - { - gTasks[taskIdB].data[TDB_0] += 1; - return; - } - gTasks[taskIdB].data[TDB_0] += 1; - if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_13] == 1) - BeginNormalPaletteFade(0x300, 0, 0, 16, COLOR_LIGHT_GREEN); - else - BeginNormalPaletteFade(0x300, 0, 0, 16, COLOR_DARK_GREEN); - return; - case 5: - if (!gPaletteFade.active) - { - MenuZeroFillWindowRect(0, 9, 29, 19); - gTasks[taskIdB].data[TDB_0] = 2; - } - return; - - case 10: - gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_4] = 1; - DestroyTask(taskIdB); - return; - } -} - -static u8 sub_8144454(u8 page, u8 taskIdA) -{ - // Starts with bike + ocean + morning - - if (page == PAGE_PROGRAMMERS_1) - { - // Grass patch - gTasks[taskIdA].data[TDA_11] = 2; - } - - if (page == PAGE_POKEMON_GRAHPIC_DESIGNERS_3) - { - // Bike + ocean + sunset - gTasks[taskIdA].data[TDA_7] = 1; - gTasks[taskIdA].data[TDA_11] = 1; - } - - if (page == PAGE_GAME_DESIGNERS_2) - { - // Grass patch - gTasks[taskIdA].data[TDA_11] = 2; - } - - if (page == PAGE_MAP_DATA_DESIGNERS) - { - // Bike + forest + sunset - gTasks[taskIdA].data[TDA_7] = 2; - gTasks[taskIdA].data[TDA_11] = 1; - } - - if (page == PAGE_SPECIAL_THANKS_1) - { - // Grass patch - gTasks[taskIdA].data[TDA_11] = 2; - } - - if (page == PAGE_TASK_MANAGERS) - { - // Bike + forest + sunset - gTasks[taskIdA].data[TDA_7] = 3; - gTasks[taskIdA].data[TDA_11] = 1; - } - - if (page == PAGE_TRANSLATION_COORDINATOR) - { - // Grass patch - gTasks[taskIdA].data[TDA_11] = 2; - } - - if (page == LAST_PAGE) - { - // Bike + town + night - gTasks[taskIdA].data[TDA_7] = 4; - gTasks[taskIdA].data[TDA_11] = 1; - } - - if (gTasks[taskIdA].data[TDA_11] != 0) - { - // Returns true if changed? - return TRUE; - } - - return FALSE; -} - -static void task_d_8144514(u8 taskIdD) -{ - struct Unk201C000 *r6 = &ewram1c000; - u8 r2; - - switch (gTasks[taskIdD].data[TDD_STATE]) - { - case 0: - break; - case 1: - if (r6->unk8A == 0 && gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14] == 0) - break; - gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14] = 0; - gTasks[taskIdD].data[TDD_STATE]++; - break; - case 2: - if (r6->unk88 == POKEMON_TILE_COUNT || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != task_a_8143B68) - break; - r2 = sub_81456B4(r6->unk0[r6->unk8C], gUnknown_0840CA00[r6->unk8A][0], gUnknown_0840CA00[r6->unk8A][1], r6->unk8A); - if (r6->unk8C < r6->unk8E - 1) - { - r6->unk8C++; - gSprites[r2].data3 = 50; - } - else - { - r6->unk8C = 0; - gSprites[r2].data3 = 512; - } - r6->unk88++; - if (r6->unk8A == 2) - r6->unk8A = 0; - else - r6->unk8A++; - gTasks[taskIdD].data[TDD_3] = 50; - gTasks[taskIdD].data[TDD_STATE]++; - break; - case 3: - if (gTasks[taskIdD].data[TDD_3] != 0) - gTasks[taskIdD].data[TDD_3]--; - else - gTasks[taskIdD].data[TDD_STATE] = 1; - break; - } -} - -void task_c_8144664(u8 taskIdC) -{ - switch (gTasks[taskIdC].data[TDC_0]) - { - case 0: - gUnknown_0203935A = Sin((gTasks[taskIdC].data[TDC_5] >> 1) & 0x7F, 12); - gTasks[taskIdC].data[TDC_5]++; - break; - case 1: - if (gUnknown_0203935A != 0) - { - gUnknown_0203935A = Sin((gTasks[taskIdC].data[TDC_5] >> 1) & 0x7F, 12); - gTasks[taskIdC].data[TDC_5]++; - } - else - { - gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 2; - gTasks[taskIdC].data[TDC_5] = 0; - gTasks[taskIdC].data[TDC_0]++; - } - break; - case 2: - if (gTasks[taskIdC].data[TDC_5] < 64) - { - gTasks[taskIdC].data[TDC_5]++; - gUnknown_0203935A = Sin(gTasks[taskIdC].data[TDC_5] & 0x7F, 20); - } - else - { - gTasks[taskIdC].data[TDC_0]++; - } - break; - case 3: - gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 3; - gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 1; - gTasks[taskIdC].data[TDC_4] = 120; - gTasks[taskIdC].data[TDC_0]++; - break; - case 4: - if (gTasks[taskIdC].data[TDC_4] != 0) - { - gTasks[taskIdC].data[TDC_4]--; - } - else - { - gTasks[taskIdC].data[TDC_5] = 64; - gTasks[taskIdC].data[TDC_0]++; - } - break; - case 5: - if (gTasks[taskIdC].data[TDC_5] > 0) - { - gTasks[taskIdC].data[TDC_5]--; - gUnknown_0203935A = Sin(gTasks[taskIdC].data[TDC_5] & 0x7F, 20); - } - else - { - gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 1; - gTasks[taskIdC].data[TDC_0]++; - } - break; - case 6: - gTasks[taskIdC].data[TDC_0] = 50; - break; - case 10: - gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 2; - gTasks[taskIdC].data[TDC_0] = 50; - break; - case 20: - gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 4; - gTasks[taskIdC].data[TDC_0] = 50; - break; - case 30: - gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 5; - gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 3; - gTasks[taskIdC].data[TDC_0] = 50; - break; - case 50: - gTasks[taskIdC].data[TDC_0] = 0; - break; - } -} - -void task_e_8144934(u8 taskIdE) -{ - s16 taskIdC; - - switch (gTasks[taskIdE].data[TDE_0]) - { - default: - case 0: - if (gTasks[taskIdE].data[TDE_1] != 0x7FFF) - { - - if (gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_B_ID]].data[TDB_CURRENT_PAGE] == PAGE_ART_DIRECTOR) - { - gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]].data[TDC_0] = 20; - gTasks[taskIdE].data[TDE_1] = 0x7FFF; - } - } - sub_8149020(0); - break; - case 1: - sub_8149020(0); - break; - case 2: - if (gTasks[taskIdE].data[TDE_1] != 0x7FFF) - { - taskIdC = gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]; - - // Floor to multiple of 128 - if ((gTasks[taskIdC].data[TDC_5] & -128) == 640) - { - gTasks[taskIdC].data[TDC_0] = 1; - gTasks[taskIdE].data[TDE_1] = 0x7FFF; - } - } - sub_8149020(1); - break; - case 3: - if (gTasks[taskIdE].data[TDE_1] != 0x7FFF) - { - - if (gTasks[taskIdE].data[TDE_1] == UNK_DEF_1F3) - { - gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]].data[TDC_0] = 10; - gTasks[taskIdE].data[TDE_1] = 0x7FFF; - } - else - { - gTasks[taskIdE].data[TDE_1] += 1; - } - } - sub_8149020(1); - break; - case 4: - sub_8149020(2); - break; - } -} - -static void sub_8144A68(u8 data, u8 taskIdA) -{ - switch (data) - { - case 0: - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 272; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; - gTasks[taskIdA].data[TDA_0] = sub_8148EC0(0, 0x2000, 0x20, 8); - break; - case 1: - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; - gTasks[taskIdA].data[TDA_0] = sub_8148EC0(0, 0x2000, 0x20, 8); - break; - case 2: - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; - gTasks[taskIdA].data[TDA_0] = sub_8148EC0(1, 0x2000, 0x200, 8); - break; - case 3: - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = -32; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; - gTasks[taskIdA].data[TDA_0] = sub_8148EC0(1, 0x2000, 0x200, 8); - break; - case 4: - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 88; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 152; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; - gTasks[taskIdA].data[TDA_0] = sub_8148EC0(2, 0x2000, 0x200, 8); - break; - } - - gTasks[taskIdA].data[TDA_TASK_E_ID] = CreateTask(task_e_8144934, 0); - gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_0] = data; - gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_1] = 0; - gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_TASK_A_ID] = taskIdA; - - gTasks[taskIdA].data[TDA_TASK_C_ID] = CreateTask(task_c_8144664, 0); - gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_0] = 0; - gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_1] = taskIdA; - gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_2] = gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]; - gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_3] = gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]; - gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_4] = 0; - - if (data == 2) - gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_5] = UNK_DEFINE_45; -} - -static bool8 sub_8144ECC(u8 data, u8 taskIdA) -{ - u8 spriteId; - - switch (gMain.state) - { - default: - case 0: - REG_DISPCNT = 0; - REG_BG3HOFS = 8; - REG_BG3VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - ResetSpriteData(); - FreeAllSpritePalettes(); - gMain.state = 1; - break; - case 1: - gUnknown_02039358 = 34; - gUnknown_0203935A = 0; - sub_8148CB0(data); - gMain.state += 1; - break; - case 2: - if (gSaveBlock2.playerGender == MALE) - { - LoadCompressedObjectPic(&gIntro2BrendanSpriteSheet); - LoadCompressedObjectPic(&gUnknown_08416E34); - LoadCompressedObjectPic(&gIntro2BicycleSpriteSheet); - LoadSpritePalettes(gIntro2SpritePalettes); - - spriteId = intro_create_brendan_sprite(120, 46); - gTasks[taskIdA].data[TDA_PLAYER_CYCLIST] = spriteId; - gSprites[spriteId].callback = spritecb_player_8145378; - gSprites[spriteId].anims = gSpriteAnimTable_0840CA54; - - spriteId = intro_create_may_sprite(272, 46); - gTasks[taskIdA].data[TDA_RIVAL_CYCLIST] = spriteId; - gSprites[spriteId].callback = spritecb_rival_8145420; - gSprites[spriteId].anims = gSpriteAnimTable_0840CA94; - } - else - { - LoadCompressedObjectPic(&gIntro2MaySpriteSheet); - LoadCompressedObjectPic(&gUnknown_08416E24); - LoadCompressedObjectPic(&gIntro2BicycleSpriteSheet); - LoadSpritePalettes(gIntro2SpritePalettes); - - spriteId = intro_create_may_sprite(120, 46); - gTasks[taskIdA].data[TDA_PLAYER_CYCLIST] = spriteId; - gSprites[spriteId].callback = spritecb_player_8145378; - gSprites[spriteId].anims = gSpriteAnimTable_0840CA54; - - spriteId = intro_create_brendan_sprite(272, 46); - gTasks[taskIdA].data[TDA_RIVAL_CYCLIST] = spriteId; - gSprites[spriteId].callback = spritecb_rival_8145420; - gSprites[spriteId].anims = gSpriteAnimTable_0840CA94; - }; - gMain.state += 1; - break; - case 3: - sub_8144A68(data, taskIdA); - sub_8148E90(data); - gMain.state = 0; - return TRUE; - } - return FALSE; -} - -static void sub_81450AC(u8 taskIdA) -{ - if (gTasks[taskIdA].data[TDA_0] != 0) - { - DestroyTask(gTasks[taskIdA].data[TDA_0]); - gTasks[taskIdA].data[TDA_0] = 0; - } - - if (gTasks[taskIdA].data[TDA_TASK_C_ID] != 0) - { - DestroyTask(gTasks[taskIdA].data[TDA_TASK_C_ID]); - gTasks[taskIdA].data[TDA_TASK_C_ID] = 0; - } - - if (gTasks[taskIdA].data[TDA_TASK_E_ID] != 0) - { - DestroyTask(gTasks[taskIdA].data[TDA_TASK_E_ID]); - gTasks[taskIdA].data[TDA_TASK_E_ID] = 0; - } - - if (gTasks[taskIdA].data[TDA_TASK_D_ID] != 0) - { - DestroyTask(gTasks[taskIdA].data[TDA_TASK_D_ID]); - gTasks[taskIdA].data[TDA_TASK_D_ID] = 0; - } - - gUnknown_0203935C = 1; -} - -static void sub_8145128(u16 arg0, u16 arg1, u16 arg2) -{ - u16 baseTile; - u16 i; - - LZ77UnCompVram(gCreditsCopyrightEnd_Gfx, (void *) (VRAM + arg0)); - LoadPalette(gIntroCopyright_Pal, arg2, sizeof(gIntroCopyright_Pal)); - - baseTile = (arg2 / 16) << 12; - - for (i = 0; i < 32 * 32; i++) - ((u16 *) (VRAM + arg1))[i] = baseTile + 1; - - for (i = 0; i < 21; i++) - ((u16 *) (VRAM + arg1))[7 * 32 + 4 + i] = i + 2 + baseTile; - - for (i = 0; i < 20; i++) - ((u16 *) (VRAM + arg1))[9 * 32 + 4 + i] = i + 23 + baseTile; - - for (i = 0; i < 23; i++) - ((u16 *) (VRAM + arg1))[11 * 32 + 4 + i] = i + 43 + baseTile; - - for (i = 0; i < 12; i++) - ((u16 *) (VRAM + arg1))[13 * 32 + 4 + i] = i + 66 + baseTile; -} - -u16 sub_8145208(u8 arg0) -{ - u16 out = (arg0 & 0x3F) + 80; - - if (arg0 == 0xFF) - return 1; - - if (arg0 & (1 << 7)) - out |= 1 << 11; - if (arg0 & (1 << 6)) - out |= 1 << 10; - - return out; -} - -void sub_814524C(u8 arg0[], u8 baseX, u8 baseY, u16 arg3, u16 palette) -{ - u8 y, x; - const u16 tileOffset = (palette / 16) << 12; - - for (y = 0; y < 5; y++) - { - for (x = 0; x < 3; x++) - ((u16 *) (VRAM + arg3 + (baseY + y) * 64))[baseX + x] = tileOffset + sub_8145208(arg0[y * 3 + x]); - } -} - -static void sub_81452D0(u16 arg0, u16 palette) -{ - u16 pos; - u16 baseTile = (palette / 16) << 12; - - for (pos = 0; pos < 32 * 32; pos++) - ((u16 *) (VRAM + arg0))[pos] = baseTile + 1; - -#if ENGLISH - sub_814524C(gUnknown_0840B83C, 3, 7, arg0, palette); - sub_814524C(gUnknown_0840B84B, 7, 7, arg0, palette); - sub_814524C(gUnknown_0840B85A, 11, 7, arg0, palette); - sub_814524C(gUnknown_0840B85A, 16, 7, arg0, palette); - sub_814524C(gUnknown_0840B869, 20, 7, arg0, palette); - sub_814524C(gUnknown_0840B878, 24, 7, arg0, palette); -#elif GERMAN - sub_814524C(gUnknown_0840B85A, 7, 7, arg0, palette); - sub_814524C(gUnknown_0840B869, 11, 7, arg0, palette); - sub_814524C(gUnknown_0840B878, 15, 7, arg0, palette); - sub_814524C(gUnknown_0840B85A, 19, 7, arg0, palette); -#endif -} - -static void spritecb_player_8145378(struct Sprite *sprite) -{ - if (gUnknown_0203935C != 0) - { - DestroySprite(sprite); - return; - } - - switch (sprite->data0) - { - case 0: - StartSpriteAnimIfDifferent(sprite, 0); - break; - case 1: - StartSpriteAnimIfDifferent(sprite, 1); - if (sprite->pos1.x > -32) - sprite->pos1.x -= 1; - break; - case 2: - StartSpriteAnimIfDifferent(sprite, 2); - break; - case 3: - StartSpriteAnimIfDifferent(sprite, 3); - break; - case 4: - StartSpriteAnimIfDifferent(sprite, 0); - if (sprite->pos1.x > 120) - sprite->pos1.x -= 1; - break; - case 5: - StartSpriteAnimIfDifferent(sprite, 0); - if (sprite->pos1.x > -32) - sprite->pos1.x -= 1; - break; - } -} - -static void spritecb_rival_8145420(struct Sprite *sprite) -{ - if (gUnknown_0203935C != 0) - { - DestroySprite(sprite); - return; - } - - switch (sprite->data0) - { - case 0: - sprite->pos2.y = 0; - StartSpriteAnimIfDifferent(sprite, 0); - break; - case 1: - if (sprite->pos1.x > 200) - StartSpriteAnimIfDifferent(sprite, 1); - else - StartSpriteAnimIfDifferent(sprite, 2); - if (sprite->pos1.x > -32) - sprite->pos1.x -= 2; - sprite->pos2.y = -gUnknown_0203935A; - break; - case 2: - sprite->data7 += 1; - StartSpriteAnimIfDifferent(sprite, 0); - if ((sprite->data7 & 3) == 0) - sprite->pos1.x += 1; - break; - case 3: - StartSpriteAnimIfDifferent(sprite, 0); - if (sprite->pos1.x > -32) - sprite->pos1.x -= 1; - break; - } -} - -void spritecb_81454E0(struct Sprite *sprite) -{ - if (gUnknown_0203935C) - { - DestroySprite(sprite); - return; - } - - sprite->data7 += 1; - switch (sprite->data0) - { - case 0: - default: - sprite->oam.affineMode = 1; - sprite->oam.matrixNum = sprite->data1; - sprite->data2 = 16; - SetOamMatrix(sprite->data1, 0x10000 / sprite->data2, 0, 0, 0x10000 / sprite->data2); - sprite->invisible = FALSE; - sprite->data0 = 1; - break; - case 1: - if (sprite->data2 < 256) - { - sprite->data2 += 8; - SetOamMatrix(sprite->data1, 0x10000 / sprite->data2, 0, 0, 0x10000 / sprite->data2); - } - else - { - sprite->data0 += 1; - } - switch (sprite->data1) - { - case 1: - if ((sprite->data7 & 3) == 0) - sprite->pos1.y += 1; - sprite->pos1.x -= 2; - break; - case 2: - break; - case 3: - if ((sprite->data7 & 3) == 0) - sprite->pos1.y += 1; - sprite->pos1.x += 2; - break; - } - break; - case 2: - if (sprite->data3 != 0) - { - sprite->data3 -= 1; - } - else - { - REG_BLDCNT = 0xF40; - REG_BLDALPHA = 0x10; - sprite->oam.objMode = 1; - sprite->data3 = 16; - sprite->data0 += 1; - } - break; - case 3: - if (sprite->data3 != 0) - { - int data3; - vu16 *reg; - - sprite->data3 -= 1; - - reg = ®_BLDALPHA; - data3 = 16 - sprite->data3; - *reg = (data3 << 8) + sprite->data3; - } - else - { - sprite->invisible = TRUE; - sprite->data0 = 10; - } - break; - case 10: - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - DestroySprite(sprite); - break; - } -} - -static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position) -{ - u32 personality; - const u8 *lzPaletteData; - u8 spriteId; - u8 spriteId2; - - species = NationalPokedexNumToSpecies(species); - switch (species) - { - default: - personality = 0; - break; - case SPECIES_SPINDA: - personality = gSaveBlock2.pokedex.spindaPersonality; - break; - case SPECIES_UNOWN: - personality = gSaveBlock2.pokedex.unownPersonality; - break; - } - - LoadSpecialPokePic( - &gMonFrontPicTable[species], - gMonFrontPicCoords[species].coords, - gMonFrontPicCoords[species].y_offset, - 0x2000000, - gUnknown_0840B5A0[position], - species, - personality, - 1 - ); - - lzPaletteData = species_and_otid_get_pal(species, 0, 0xFFFF); - LoadCompressedPalette(lzPaletteData, 0x100 + (position * 16), 0x20); - sub_8143648(position, position); - - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); - gSprites[spriteId].oam.paletteNum = position; - gSprites[spriteId].oam.priority = 1; - gSprites[spriteId].data1 = position + 1; - gSprites[spriteId].invisible = TRUE; - gSprites[spriteId].callback = spritecb_81454E0; - - spriteId2 = CreateSprite(&gSpriteTemplate_840CAEC, gSprites[spriteId].pos1.x, gSprites[spriteId].pos1.y, 1); - gSprites[spriteId2].data0 = spriteId; - - StartSpriteAnimIfDifferent(&gSprites[spriteId2], position); - - return spriteId; -} - -void spritecb_814580C(struct Sprite *sprite) -{ - if (gSprites[sprite->data0].data0 == 10 || gUnknown_0203935C) - { - DestroySprite(sprite); - return; - } - - sprite->invisible = gSprites[sprite->data0].invisible; - sprite->oam.objMode = gSprites[sprite->data0].oam.objMode; - sprite->oam.affineMode = gSprites[sprite->data0].oam.affineMode; - sprite->oam.matrixNum = gSprites[sprite->data0].oam.matrixNum; - sprite->pos1.x = gSprites[sprite->data0].pos1.x; - sprite->pos1.y = gSprites[sprite->data0].pos1.y; -} - -static void sub_81458DC(void) -{ - struct Unk201C000 *unk201C000 = &ewram1c000; - u16 starter = SpeciesToNationalPokedexNum(GetStarterPokemon(VarGet(VAR_FIRST_POKE))); - u16 seenTypesCount; - u16 page; - u16 dexNum; - u16 j; - - for (dexNum = 1, seenTypesCount = 0; dexNum < 386; dexNum++) - { - if (GetNationalPokedexFlag(dexNum, 1)) - { - unk201C000->unk90[seenTypesCount] = dexNum; - seenTypesCount++; - } - } - - for (dexNum = seenTypesCount; dexNum < 386; dexNum++) - unk201C000->unk90[dexNum] = 0; - - unk201C000->unk394 = seenTypesCount; - if (unk201C000->unk394 < POKEMON_TILE_COUNT) - unk201C000->unk8E = seenTypesCount; - else - unk201C000->unk8E = POKEMON_TILE_COUNT; - - j = 0; - do - { - page = Random() % unk201C000->unk394; - unk201C000->unk0[j] = unk201C000->unk90[page]; - - j++; - unk201C000->unk90[page] = 0; - unk201C000->unk394--; - if (page != unk201C000->unk394) - { - unk201C000->unk90[page] = unk201C000->unk90[unk201C000->unk394]; - unk201C000->unk90[unk201C000->unk394] = 0; - } - } - while (unk201C000->unk394 != 0 && j < POKEMON_TILE_COUNT); - - if (unk201C000->unk8E < POKEMON_TILE_COUNT) - { - for (j = unk201C000->unk8E, page = 0; j < POKEMON_TILE_COUNT; j++) - { - unk201C000->unk0[j] = unk201C000->unk0[page]; - - page++; - if (page == unk201C000->unk8E) - page = 0; - } - unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter; - } - else - { - for (dexNum = 0; unk201C000->unk0[dexNum] != starter && dexNum < POKEMON_TILE_COUNT; dexNum++); - - if (dexNum < unk201C000->unk8E - 1) - { - unk201C000->unk0[dexNum] = unk201C000->unk0[POKEMON_TILE_COUNT - 1]; - unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter; - } - else - { - unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter; - } - } - unk201C000->unk8E = POKEMON_TILE_COUNT; -} diff --git a/src/daycare.c b/src/daycare.c deleted file mode 100644 index cded18207..000000000 --- a/src/daycare.c +++ /dev/null @@ -1,350 +0,0 @@ -#include "global.h" -#include "daycare.h" -#include "pokemon.h" -#include "species.h" -#include "items.h" -#include "string_util.h" - -extern u8 gLastFieldPokeMenuOpened; - -u8 *GetMonNick(struct Pokemon *mon, u8 *dest) -{ - s8 nickname[POKEMON_NAME_LENGTH * 2]; - - GetMonData(mon, MON_DATA_NICKNAME, nickname); - return StringCopy10(dest, nickname); -} - -u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest) -{ - s8 nickname[POKEMON_NAME_LENGTH * 2]; - - GetBoxMonData(mon, MON_DATA_NICKNAME, nickname); - return StringCopy10(dest, nickname); -} - -u8 Daycare_CountPokemon(struct BoxPokemon *daycare_data) -{ - u8 i, count; - count = 0; - - for(i = 0;i <= 1;i++) - if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) != 0) - count++; - - return count; -} - -void sub_8041324(struct BoxPokemon * box_pokemon, struct RecordMixing_UnknownStruct * void_pointer) -{ - u8 i; - u8 specCount; - specCount = 0; - for (i=0; i<2; i++) - { - if (GetBoxMonData(&box_pokemon[i], MON_DATA_SPECIES) != SPECIES_NONE) - { - specCount ++; - if (GetBoxMonData(&box_pokemon[i], MON_DATA_HELD_ITEM) == ITEM_NONE) - { - void_pointer->unk74[i] = 0; - } else - { - void_pointer->unk74[i] = 1; - } - } else - { - void_pointer->unk74[i] = 1; - } - } - void_pointer->unk70 = specCount; -} - -s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data) -{ - u8 i; - - for(i = 0;i <= 1;i++) - if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) == 0) - return i; - - return -1; -} - -/*void Daycare_SendPokemon(struct Pokemon * mon, struct BoxPokemon * daycare_data){ // unfinished - s8 empty_slot; - - 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"); -} - -void Daycare_SendPokemon_Special() -{ - Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, gSaveBlock1.daycareData); -} - -void sub_80417F4(u8 *); - -void sub_80414C0(struct BoxPokemon * 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); - } -} - -u8 TryIncrementMonLevel(struct Pokemon *); -extern u16 word_2024E82; - -void sub_804151C(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); - } - } - } - - end: - - CalculateMonStats(mon); -} - -__attribute__((naked)) -u16 sub_8041570(struct BoxPokemon * 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"); -} - -extern u8 gSpecialVar_0x8004; - -u16 sub_8041648() -{ - return sub_8041570(gSaveBlock1.daycareData, gSpecialVar_0x8004); -} - -u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){ - struct BoxPokemon temp = *mon; - u32 new_exp = GetBoxMonData(mon, MON_DATA_EXP) + steps; - SetBoxMonData(&temp, MON_DATA_EXP, (u8 *) &new_exp); - return GetLevelFromBoxMonExp(&temp); -} diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c deleted file mode 100644 index c618ebdb2..000000000 --- a/src/de_rom_8040FE0.c +++ /dev/null @@ -1,272 +0,0 @@ -#include "global.h" -#include "battle.h" - -#if GERMAN - -enum { - TRAINER_CLASS_NAME_LEADER = 25, - TRAINER_CLASS_NAME_SCHOOL_KID = 26, - TRAINER_CLASS_NAME_EXPERT = 30, - TRAINER_CLASS_NAME_POKEMON_TRAINER_3 = 46, -}; - -enum { - TRAINER_CLASS_LEADER_F = 26, - TRAINER_CLASS_ELITE_FOUR_F = 25, - TRAINER_CLASS_SCHOOL_KID_F = 30, - TRAINER_CLASS_BIRD_KEEPER = 46, - TRAINER_CLASS_MAY_1 = 61, - TRAINER_CLASS_MAY_2 = 62, - TRAINER_CLASS_MAY_3 = 63, -}; - -extern struct SecretBaseRecord gSecretBaseRecord; - -extern u8 gTrainerClassNames[][13]; -extern struct Trainer gTrainers[]; - -u8 *de_sub_8040FE0(u8 gender) { - if (gender) - { - gender++; - - } - - gender = TRAINER_CLASS_NAME_SCHOOL_KID; - return gTrainerClassNames[gender]; -} - -u8 *de_sub_8040FF4(u8 gender) { - if (gender) { - gender++; - } - - gender = TRAINER_CLASS_NAME_POKEMON_TRAINER_3; - return gTrainerClassNames[gender]; -} - -u8 *de_sub_804100C(u8 gender) { - if (gender) { - gender++; - } - - gender = TRAINER_CLASS_NAME_LEADER; - return gTrainerClassNames[gender]; -} - -#ifdef NONMATCHING - -u8 de_sub_81364AC(void); -u8 get_trainer_class_name_index(void); -u8 de_sub_81364F8(void); -u8 sub_8135FD8(void); - -u8 *de_sub_8041024(s32 arg0, u32 arg1) { - u8 nameIndex, trainerClass, gender; - struct Trainer *trainer; - u8 local2; - - switch (arg0) - { - case 0x400: - nameIndex = GetSecretBaseTrainerNameIndex(); - gender = gSecretBaseRecord.gender; - if (nameIndex == TRAINER_CLASS_NAME_SCHOOL_KID) - { - return de_sub_8040FE0(gender); - } - - return gTrainerClassNames[nameIndex]; - - case 0x100: - trainerClass = de_sub_81364AC(); - nameIndex = get_trainer_class_name_index(); - if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F) - { - return de_sub_8040FE0(FEMALE); - } - if (trainerClass == TRAINER_CLASS_MAY_1 || trainerClass == TRAINER_CLASS_MAY_2 || trainerClass == TRAINER_CLASS_MAY_3) - { - return de_sub_8040FF4(FEMALE); - } - - return gTrainerClassNames[nameIndex]; - - case 0x800: - trainerClass = de_sub_81364F8(); - nameIndex = sub_8135FD8(); - if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F) - { - return de_sub_8040FE0(FEMALE); - } - if (trainerClass == TRAINER_CLASS_MAY_1 || trainerClass == TRAINER_CLASS_MAY_2 || trainerClass == TRAINER_CLASS_MAY_3) - { - return de_sub_8040FF4(FEMALE); - } - - return gTrainerClassNames[nameIndex]; - - default: - trainer = &gTrainers[arg1]; - trainerClass = trainer->trainerClass; - local2 = sub_803FC58(arg1); - - if (trainerClass == TRAINER_CLASS_LEADER_F) - { - return de_sub_8040FE0(local2); - } - - if (trainerClass == TRAINER_CLASS_BIRD_KEEPER && local2 == FEMALE) - { - return de_sub_8040FF4(FEMALE); - } - - if (trainerClass == TRAINER_CLASS_ELITE_FOUR_F) - { - if (gTrainers[arg1].doubleBattle == TRUE) - { - return de_sub_804100C(FEMALE); - } - else - { - return de_sub_804100C(MALE); - } - } - - - return gTrainerClassNames[trainerClass]; - } -} -#else - -__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\ -_08041040:\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\ -_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\ -_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\ -_08041086:\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\ -_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\ -_080410B8:\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\ -_080410CC:\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\ -_080410EA:\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\ -_08041102:\n\ - pop {r4-r6}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_08041108: .4byte gTrainerClassNames\n\ - .syntax divided\n"); -} -#endif - -u32 de_sub_804110C(u32 arg0, u32 arg1) { - return arg1; -} - -#endif diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c new file mode 100644 index 000000000..3665cabd8 --- /dev/null +++ b/src/debug/matsuda_debug_menu.c @@ -0,0 +1,1113 @@ +#include "global.h" +#include "matsuda_debug_menu.h" +#include "contest.h" +#include "contest_link_80C2020.h" +#include "contest_link_80C857C.h" +#include "data2.h" +#include "link.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "rom4.h" +#include "sprite.h" +#include "start_menu.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "unknown_task.h" + +extern u8 gUnknown_0203856C; +extern u8 gUnknown_0203857D[][64]; +extern u16 gUnknown_02038670[]; +extern u16 gUnknown_02038678[]; +extern u16 gUnknown_02038680[]; +extern u8 gUnknown_02038690[]; +extern u8 gUnknown_02038694; +extern u8 gIsLinkContest; +extern u8 gUnknown_0203869B; +extern u8 gContestPlayerMonIndex; +extern u16 gScriptContestCategory; +extern u16 gScriptContestRank; + +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 struct Window gUnknown_03004210; +extern u8 (*gCallback_03004AE8)(void); + +extern u8 gUnknown_083C926E[][2]; +extern u8 gUnknown_083C9282[]; +extern const u8 gUnknown_083C928E[][2]; +extern u8 gUnknown_083C9296[]; +extern u8 gUnknown_083C92A8[]; +extern u8 unk_2000000[]; +extern u8 gMatsudaDebugMenu_GoBackText[]; +extern u8 gMatsudaDebugMenu_BattlePointsText[]; +extern u8 gMatsudaDebugMenu_StartText[]; + +extern struct SpritePalette gUnknown_083C92BC; +extern struct SpriteSheet gUnknown_083C92B4; +extern struct SpriteTemplate gSpriteTemplate_83C92CC; +extern void (*gUnknown_083C92E4[][2])(struct Sprite *, s8); +extern u32 gUnknown_083C9400[2]; + + +extern u8 gMatsudaDebugMenu_UnknownByteArray[]; +extern u8* gMatsudaDebugMenuTextList1[]; +extern u8* gMatsudaDebugMenuTextList2[]; +extern u8* gMatsudaDebugMenuTextList3[]; +extern u8 gMatsudaDebugMenuContestTopLeft[][2]; + +extern bool8 gReceivedRemoteLinkPlayers; + +extern struct MenuAction gMatsudaDebugMenuActions[]; + +static bool8 sub_80A9B78(void); +static void sub_80A9BE4(u8 taskId); +static void sub_80A9C98(u8); +static void sub_80A9CC0(u8); +static void sub_80A9CDC(u8); +static void sub_80A9D58(u8); +static void sub_80A9DBC(u8); +static void sub_80A9DD8(u8); +static void sub_80A9E04(u8 taskId); +static void sub_80A9E3C(u8 taskId); +static void sub_80A9E80(u8); +static void sub_80A9ED8(u8); +static void sub_80A9F10(u8); +static void sub_80AA10C(void); +static void sub_80AA5BC(u8); +static void sub_80AA614(u8, u8); +static void sub_80AAD08(struct Sprite *, s8); + +u8 unref_sub_80A9B28(void) +{ + MenuZeroFillScreen(); + MenuDrawTextWindow(0, 0, 17, 18); + PrintMenuItems(1, 1, 7, gMatsudaDebugMenuActions); + InitMenu(0, 1, 1, 7, 0, 16); + gCallback_03004AE8 = sub_80A9B78; + return 0; +} + +static bool8 sub_80A9B78(void) +{ + s8 choice = ProcessMenuInput(); + + switch (choice) + { + case -2: + return FALSE; + default: + gCallback_03004AE8 = gMatsudaDebugMenuActions[choice].func; + return FALSE; + case -1: + CloseMenu(); + return TRUE; + } +} + +s8 MatsudaDebugMenu_ContestResults(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + CreateTask(sub_80A9BE4, 0xFF); + return 1; +} + +static void sub_80A9BE4(u8 taskId) +{ + if (!gPaletteFade.active) + { + DestroyTask(taskId); + + if (!(gIsLinkContest & 1)) + sub_80AF668(); + + sub_80C2358(); + } +} + +s8 MatsudaDebugMenu_Contest(void) +{ + gIsLinkContest = 0; + sub_80AA10C(); + return 0; +} + +s8 MatsudaDebugMenu_ContestComm(void) +{ + sub_80AA10C(); + return 0; +} + +s8 MatsudaDebugMenu_CommTest(void) +{ + u8 newTaskId; + u8 newTaskId2; + + newTaskId = CreateTask(sub_80A9E3C, 0); + SetTaskFuncWithFollowupFunc(newTaskId, sub_80A9E3C, sub_80A9C98); + newTaskId2 = CreateTask(sub_80A9E04, 1); + gTasks[newTaskId2].data[10] = newTaskId; + gTasks[newTaskId].data[10] = newTaskId2; + return 1; +} + +static void sub_80A9C98(u8 taskId) +{ + sub_80AE098(0); + SetTaskFuncWithFollowupFunc(taskId, sub_80C8734, sub_80A9CC0); +} + +static void sub_80A9CC0(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_80C88AC, sub_80A9CDC); +} + +static void sub_80A9CDC(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_80C8E1C, sub_80A9D58); +} + +static void sub_80A9CF8(u8 taskId) +{ + if (gReceivedRemoteLinkPlayers == FALSE) + { + DestroyTask(gTasks[taskId].data[10]); + DestroyTask(taskId); + CloseMenu(); + } +} + +static void sub_80A9D30(u8 taskId) +{ + sub_800832C(); + gTasks[taskId].func = sub_80A9CF8; +} + +static void sub_80A9D58(u8 taskId) +{ + int i; + u8 dest[4]; + + for (i = 0; i < 4; i++) + dest[i] = gTasks[taskId].data[5 + i]; + + gUnknown_0203869B = sub_80C4B34(dest); + sub_80AE82C((u8)gScriptContestCategory); + sub_80B0F28(0); + SetTaskFuncWithFollowupFunc(taskId, sub_80C8EBC, sub_80A9DBC); +} + +static void sub_80A9DBC(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_80C8F34, sub_80A9DD8); +} + +static void sub_80A9DD8(u8 taskId) +{ + DestroyTask(gTasks[taskId].data[10]); + DestroyTask(taskId); + CloseMenu(); +} + +static void sub_80A9E04(u8 taskId) +{ + if (gMain.newKeys == 2) + gTasks[(u8)gTasks[taskId].data[10]].func = sub_80A9D30; +} + +static void sub_80A9E3C(u8 taskId) +{ + u8 i; + + OpenLink(); + + for (i = 0; i < 4; i++) + gBlockRecvBuffer[i][0] = 255; + + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_80A9E80; +} + +static void sub_80A9E80(u8 taskId) +{ + TaskFunc func; + + if (gTasks[taskId].data[0] < 10) + gTasks[taskId].data[0]++; + else + { + if (GetLinkPlayerCount_2() > 3) + { + gTasks[taskId].data[0] = 0; + + if (IsLinkMaster()) + { + func = sub_80A9ED8; + gTasks[taskId].func = (TaskFunc)func; + } + else + { + func = sub_80A9F10; + gTasks[taskId].func = (TaskFunc)func; + } + } + } +} + +static void sub_80A9ED8(u8 taskId) +{ + gTasks[taskId].data[0] = gTasks[taskId].data[0] + 1; + if ((gTasks[taskId].data[0]) == 101) + { + sub_8007F4C(); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_80A9F10; + } +} + +static void sub_80A9F10(u8 taskId) +{ + if (gReceivedRemoteLinkPlayers) + { + gContestPlayerMonIndex = GetMultiplayerId(); + if (GetLinkPlayerCount() == 4) + { + gIsLinkContest = 1; + SwitchTaskToFollowupFunc(taskId); + } + } +} + +static void sub_80A9F50(void) +{ + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP; + REG_DISPCNT |= DISPCNT_OBJ_ON | DISPCNT_BG0_ON; + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitWindowFromConfig(&gMenuWindow, &gWindowConfig_81E6C3C); + REG_MOSAIC = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + gUnknown_03004288 = 0; + gUnknown_03004280 = 0; + gUnknown_030041B0 = 0; + gUnknown_030041B8 = 0; +} + +static void sub_80A9FE4(void) +{ + u8 *addr; + u32 i; + u8 ptr[5]; + + memcpy(ptr, gMatsudaDebugMenu_UnknownByteArray, 5); + + addr = (void *)VRAM; + i = VRAM_SIZE; + + while (1) + { + DmaFill32(3, 0, addr, 0x1000); + addr += 0x1000; + i -= 0x1000; + if (i <= 0x1000) + { + DmaFill32(3, 0, addr, i); + break; + } + } + sub_80034D4((void *)VRAM, ptr); + LoadFontDefaultPalette(&gWindowConfig_81E6C3C); +} + +static void sub_80AA064(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTasks(); + UpdatePaletteFade(); + if (gMain.newKeys == 4) + SetMainCallback2(sub_805469C); +} + +static void sub_80AA090(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_80AA10C(void) +{ + u8 i; + u8 zero; + u8 spriteId; + + gPaletteFade.bufferTransferDisabled = 1; + SetVBlankCallback(0); + sub_80A9F50(); + dp12_8087EA4(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + FreeAllSpritePalettes(); + sub_80A9FE4(); + SetVBlankCallback(sub_80AA090); + SetMainCallback2(sub_80AA064); + gPaletteFade.bufferTransferDisabled = 0; + gUnknown_02038694 = 0; + + if (!(gContestMons[0].nickname[0])) + sub_80AE398(0, 0); + + sub_80AE098(gUnknown_02038694); + + for (i = 0; i < 6; i++) + { + sub_8003460(&gMenuWindow, gMatsudaDebugMenuTextList1[i], + (0xA * i + 0x2A), gMatsudaDebugMenuContestTopLeft[i][0], + gMatsudaDebugMenuContestTopLeft[i][1]); + } + + gScriptContestCategory = gScriptContestRank = 0; + zero = 0; // it's possible this was some assignment that matsuda used to quickly edit and test things without changing whats passed to the later functions. + sub_80AA5BC(zero); + sub_80AA5E8(gScriptContestRank); + sub_8003460(&gMenuWindow, gMatsudaDebugMenu_GoBackText, 0xD6, 0x12, 0x12); + sub_8003460(&gMenuWindow, gMatsudaDebugMenu_BattlePointsText, 0xDC, zero, 0xC); + LoadSpriteSheet(&gUnknown_083C92B4); + LoadSpritePalette(&gUnknown_083C92BC); + sub_80AA280(3); + sub_80AA658(3); + sub_80AA614(3, zero); + spriteId = CreateSprite(&gSpriteTemplate_83C92CC, gUnknown_083C9296[3], gUnknown_083C92A8[1], 5); + gSprites[spriteId].data0 = 1; + gSprites[spriteId].data1 = 1; + gSprites[spriteId].data2 = 3; + gSprites[spriteId].data3 = zero; // only this assignment of zero is necessary. other replacements of 0 with zero do not change the asm, compiler will treat it the same. +} + +void sub_80AA280(u8 var) // no? +{ + u8 i; + + FillWindowRect_DefaultPalette(&gMenuWindow, 0, 0, 0, 0x1E, 3); + StringCopy(unk_2000000, gMatsudaDebugMenu_StartText); + StringAppend(unk_2000000, &gUnknown_0203857D[var][0]); + + for (i = 0; i < 4; i++) + { + if (var == i) + { + sub_8003460(&gMenuWindow, unk_2000000, (10 * i + 2), gUnknown_083C926E[i][0], gUnknown_083C926E[i][1]); + } + else + { + u8 *ptr = gUnknown_0203857D[i]; + sub_8003460(&gMenuWindow, ptr, (10 * i + 2), gUnknown_083C926E[i][0], gUnknown_083C926E[i][1]); + } + } +} + +static void sub_80AA340(u8 var) +{ + ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].cool, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, unk_2000000, 0x66, gUnknown_083C9282[0], gUnknown_083C9282[1]); +} + +static void sub_80AA388(u8 var) +{ + ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].cute, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, unk_2000000, 0x6C, gUnknown_083C9282[2], gUnknown_083C9282[3]); +} + +static void sub_80AA3D0(u8 var) +{ + ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].beauty, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, unk_2000000, 0x72, gUnknown_083C9282[4], gUnknown_083C9282[5]); +} + +static void sub_80AA418(u8 var) +{ + ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].smart, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, unk_2000000, 0x78, gUnknown_083C9282[6], gUnknown_083C9282[7]); +} + +static void sub_80AA460(u8 var) +{ + ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].tough, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, unk_2000000, 0x7E, gUnknown_083C9282[8], gUnknown_083C9282[9]); +} + +static void sub_80AA4A8(u8 var) +{ + ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].sheen, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, unk_2000000, 0x84, gUnknown_083C9282[10], gUnknown_083C9282[11]); +} + +static void sub_80AA4F0(u8 var1, u8 var2) +{ + FillWindowRect_DefaultPalette(&gMenuWindow, 0, gUnknown_083C928E[var2][0], gUnknown_083C928E[var2][1], gUnknown_083C928E[var2][0] + 7, gUnknown_083C928E[var2][1] + 1); + sub_8003460(&gMenuWindow, gMoveNames[gContestMons[var1].moves[var2]], 0x8A + var2 * 14, gUnknown_083C928E[var2][0], gUnknown_083C928E[var2][1]); + ConvertIntToDecimalStringN(gStringVar1, gContestMons[var1].moves[var2], STR_CONV_MODE_LEADING_ZEROS, 3); + sub_8003460(&gMenuWindow, gStringVar1, 0xFA + var2 * 6, gUnknown_083C928E[var2][0] + 7, gUnknown_083C928E[var2][1]); +} + +static void sub_80AA5BC(u8 var) +{ + sub_8003460(&gMenuWindow, gMatsudaDebugMenuTextList2[var], 0xC2, 3, 0x12); +} + +void sub_80AA5E8(u8 var) +{ + sub_8003460(&gMenuWindow, gMatsudaDebugMenuTextList3[var], 0xE8, 3, 4); +} + +static void sub_80AA614(u8 var1, u8 var2) +{ + u16 var = sub_80AE770(var1, var2); + + ConvertIntToDecimalStringN(unk_2000000, var, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, unk_2000000, 0xE2, 3, 0xC); +} + +void sub_80AA658(u8 var) +{ + u8 i; + + sub_80AA340(var); + sub_80AA388(var); + sub_80AA3D0(var); + sub_80AA418(var); + sub_80AA460(var); + sub_80AA4A8(var); + + for (i = 0; i < 4; i++) + sub_80AA4F0(var, i); +} + +void SetDebugMonForContest(void) +{ + SetMonData(&gPlayerParty[0], MON_DATA_COOL, &gContestMons[gContestPlayerMonIndex].cool); + SetMonData(&gPlayerParty[0], MON_DATA_CUTE, &gContestMons[gContestPlayerMonIndex].cute); + SetMonData(&gPlayerParty[0], MON_DATA_BEAUTY, &gContestMons[gContestPlayerMonIndex].beauty); + SetMonData(&gPlayerParty[0], MON_DATA_SMART, &gContestMons[gContestPlayerMonIndex].smart); + SetMonData(&gPlayerParty[0], MON_DATA_TOUGH, &gContestMons[gContestPlayerMonIndex].tough); + SetMonData(&gPlayerParty[0], MON_DATA_SHEEN, &gContestMons[gContestPlayerMonIndex].sheen); + SetMonData(&gPlayerParty[0], MON_DATA_MOVE1, (const u8 *) &gContestMons[gContestPlayerMonIndex].moves[0]); + SetMonData(&gPlayerParty[0], MON_DATA_MOVE2, (const u8 *) &gContestMons[gContestPlayerMonIndex].moves[1]); + SetMonData(&gPlayerParty[0], MON_DATA_MOVE3, (const u8 *) &gContestMons[gContestPlayerMonIndex].moves[2]); + SetMonData(&gPlayerParty[0], MON_DATA_MOVE4, (const u8 *) &gContestMons[gContestPlayerMonIndex].moves[3]); +} + +void sub_80AA754(struct Sprite *sprite) +{ + switch (gMain.newAndRepeatedKeys) + { + case DPAD_RIGHT: + case DPAD_LEFT: + sprite->data0 ^= 1; + break; + case DPAD_UP: + if (sprite->data1 == 0) + sprite->data1 = 8; + else + sprite->data1--; + break; + case DPAD_DOWN: + if (sprite->data1 == 8) + sprite->data1 = 0; + else + sprite->data1++; + break; + case A_BUTTON: + gUnknown_083C92E4[sprite->data1][sprite->data0](sprite, 1); + sub_80AA614(sprite->data2, sprite->data3); + break; + case B_BUTTON: + gUnknown_083C92E4[sprite->data1][sprite->data0](sprite, -1); + sub_80AA614(sprite->data2, sprite->data3); + break; + case R_BUTTON: + gUnknown_083C92E4[sprite->data1][sprite->data0](sprite, 10); + sub_80AA614(sprite->data2, sprite->data3); + break; + case L_BUTTON: + gUnknown_083C92E4[sprite->data1][sprite->data0](sprite, -10); + sub_80AA614(sprite->data2, sprite->data3); + break; + case START_BUTTON: + sub_80AAD08(sprite, 1); + break; + } + sprite->pos1.x = gUnknown_083C9296[sprite->data0 + sprite->data1 * 2]; + sprite->pos1.y = gUnknown_083C92A8[sprite->data1]; +} + +static void sub_80AA8A0(struct Sprite *sprite, s8 var1, u8 var2) +{ + if (var1 == 1) + { + sprite->data2 = var2; + sub_80AA280(var2); + sub_80AA658(sprite->data2); + } +} + +void sub_80AA8C8(struct Sprite *sprite, s8 var1) +{ + sub_80AA8A0(sprite, var1, 0); +} + +void sub_80AA8D8(struct Sprite *sprite, s8 var1) +{ + sub_80AA8A0(sprite, var1, 1); +} + +void sub_80AA8E8(struct Sprite *sprite, s8 var1) +{ + sub_80AA8A0(sprite, var1, 2); +} + +void sub_80AA8F8(struct Sprite *sprite, s8 var1) +{ + sub_80AA8A0(sprite, var1, 3); +} + +static u8 sub_80AA908(u32 a1, u8 a2, s8 a3) // first param is unused. +{ + s16 val = a2 + a3; + + if (val > 255) + val = 255; + else if (val < 0) + val = 0; + + return val; +} + +void sub_80AA930(struct Sprite *sprite, u8 var2) +{ + u8 val = sprite->data2; + + gContestMons[sprite->data2].cool = sub_80AA908(val, gContestMons[sprite->data2].cool, var2); + sub_80AA340(sprite->data2); +} + +void sub_80AA974(struct Sprite *sprite, u8 var2) +{ + u8 val = sprite->data2; + + gContestMons[sprite->data2].cute = sub_80AA908(val, gContestMons[sprite->data2].cute, var2); + sub_80AA388(sprite->data2); +} + +void sub_80AA9B8(struct Sprite *sprite, u8 var2) +{ + u8 val = sprite->data2; + + gContestMons[sprite->data2].beauty = sub_80AA908(val, gContestMons[sprite->data2].beauty, var2); + sub_80AA3D0(sprite->data2); +} + +void sub_80AA9FC(struct Sprite *sprite, u8 var2) +{ + u8 val = sprite->data2; + + gContestMons[sprite->data2].smart = sub_80AA908(val, gContestMons[sprite->data2].smart, var2); + sub_80AA418(sprite->data2); +} + +void sub_80AAA40(struct Sprite *sprite, u8 var2) +{ + u8 val = sprite->data2; + + gContestMons[sprite->data2].tough = sub_80AA908(val, gContestMons[sprite->data2].tough, var2); + sub_80AA460(sprite->data2); +} + +void sub_80AAA84(struct Sprite *sprite, u8 var2) +{ + u8 val = sprite->data2; + + gContestMons[sprite->data2].sheen = sub_80AA908(val, gContestMons[sprite->data2].sheen, var2); + sub_80AA4A8(sprite->data2); +} + +// a similar function is at 0x80AA908, however, it apparently returns the wrong type (u8 vs u16). +static u16 sub_80AAAC8(u32 a1, u16 a2, s8 a3) // first param is unused. +{ + s16 val = a2 + a3; + + if (val > 354) + val = 1; + else if (val < 0) + val = 354; + + return val; +} + +void sub_80AAAF0(struct Sprite *sprite, u8 var2) +{ + u8 val = sprite->data2; + + gContestMons[sprite->data2].moves[0] = sub_80AAAC8(val, gContestMons[sprite->data2].moves[0], var2); + sub_80AA4F0(sprite->data2, 0); +} + +void sub_80AAB30(struct Sprite *sprite, u8 var2) +{ + u8 val = sprite->data2; + + gContestMons[sprite->data2].moves[1] = sub_80AAAC8(val, gContestMons[sprite->data2].moves[1], var2); + sub_80AA4F0(sprite->data2, 1); +} + +void sub_80AAB70(struct Sprite *sprite, u8 var2) +{ + u8 val = sprite->data2; + + gContestMons[sprite->data2].moves[2] = sub_80AAAC8(val, gContestMons[sprite->data2].moves[2], var2); + sub_80AA4F0(sprite->data2, 2); +} + +void sub_80AABB0(struct Sprite *sprite, u8 var2) +{ + u8 val = sprite->data2; + + gContestMons[sprite->data2].moves[3] = sub_80AAAC8(val, gContestMons[sprite->data2].moves[3], var2); + sub_80AA4F0(sprite->data2, 3); +} + +void sub_80AABF0(struct Sprite *sprite, s8 var2) +{ + s8 a = (var2 > 0) ? 1 : -1; + s8 r4 = sprite->data3 + a; + + if (r4 < 0) + r4 = 0; + else if (r4 > 4) + r4 = 4; + sub_80AA5BC(r4); + sprite->data3 = r4; + gScriptContestCategory = sprite->data3; + sub_80AE398(sprite->data3, gScriptContestRank); + sub_80AA280(sprite->data2); + sub_80AA658(sprite->data2); +} + +void sub_80AAC5C(struct Sprite *sprite, s8 var2) +{ + if (var2 > 0) + gScriptContestRank++; + else if (gScriptContestRank != 0) + gScriptContestRank--; + if (gScriptContestRank > 3) + gScriptContestRank = 3; + sub_80AA5E8(gScriptContestRank); + sub_80AE398(gScriptContestCategory, gScriptContestRank); + sub_80AA280(sprite->data2); + sub_80AA658(sprite->data2); +} + +void sub_80AACC4(void) +{ + UpdatePaletteFade(); + if (!gPaletteFade.active) + { + SetDebugMonForContest(); + if (!(gIsLinkContest & 1)) + sub_80AE82C(unk_2000000[0]); + SetMainCallback2(sub_80AB47C); + } +} + +void sub_80AAD08(struct Sprite *sprite, s8 var2) +{ + if (var2 == 1) + { + unk_2000000[0] = sprite->data3; + SetMainCallback2(sub_80AACC4); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + } +} + +void sub_80AAD44(struct Sprite *sprite, s8 var2) +{ + if (var2 == 1) + { + int i; + + SetDebugMonForContest(); + for (i = 0; i < 4; i++) + gUnknown_02038670[i] = sub_80AE770(i, gScriptContestCategory); + SetMainCallback2(sub_805469C); + } +} + +//Do this later +/* +void sub_80AAD84(u8 *string, u8 b, u8 c, u8 d) +{ + u32 r5; + u16 r7; + u8 r7_2; + //u32 sp44; + //u32 sp48; + u32 sp58; + + gMain.state = 0; + + r5 = d + 1; + //Could also be DmaClear32 + DmaFill32(3, 0, (u8 *)VRAM + 0x18000 - r5 * 256, 0x100); + + r7 = StringLength(string); + if (r7 > 8) + r7 = 8; + sp58 = d * 2; + + //More stuff + + r7_2 = 0x7C - sp58; + +} +*/ + +__attribute__((naked)) +void sub_80AAD84(u8 *string, u8 b, u8 c, u8 d) +{ + 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, 0x64\n\ + mov r9, r0\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + str r1, [sp, 0x48]\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + str r2, [sp, 0x4C]\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + mov r10, r3\n\ + mov r5, r10\n\ + adds r5, 0x1\n\ + lsls r1, r5, 8\n\ + ldr r0, _080AAEC4 @ =0x06018000\n\ + subs r1, r0, r1\n\ + movs r0, 0\n\ + str r0, [sp, 0x44]\n\ + ldr r4, _080AAEC8 @ =0x040000d4\n\ + add r0, sp, 0x44\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + ldr r0, _080AAECC @ =0x85000040\n\ + str r0, [r4, 0x8]\n\ + ldr r0, [r4, 0x8]\n\ + mov r0, r9\n\ + bl StringLength\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + cmp r7, 0x8\n\ + bls _080AADD0\n\ + movs r7, 0x8\n\ +_080AADD0:\n\ + movs r6, 0\n\ + mov r8, r5\n\ + mov r1, r10\n\ + lsls r1, 1\n\ + str r1, [sp, 0x58]\n\ + ldr r2, [sp, 0x48]\n\ + adds r2, 0x20\n\ + str r2, [sp, 0x5C]\n\ + cmp r6, r7\n\ + bge _080AAE1E\n\ + add r5, sp, 0x40\n\ + add r0, sp, 0x20\n\ + mov r10, r0\n\ + ldr r2, _080AAEC4 @ =0x06018000\n\ +_080AADEC:\n\ + mov r1, r9\n\ + adds r0, r1, r6\n\ + ldrb r0, [r0]\n\ + strb r0, [r5]\n\ + movs r0, 0xFF\n\ + strb r0, [r5, 0x1]\n\ + mov r0, sp\n\ + adds r1, r5, 0\n\ + str r2, [sp, 0x60]\n\ + bl sub_80034D4\n\ + mov r1, r8\n\ + lsls r0, r1, 8\n\ + ldr r2, [sp, 0x60]\n\ + subs r0, r2, r0\n\ + mov r1, r10\n\ + str r1, [r4]\n\ + str r0, [r4, 0x4]\n\ + ldr r0, _080AAED0 @ =0x84000008\n\ + str r0, [r4, 0x8]\n\ + ldr r0, [r4, 0x8]\n\ + adds r2, 0x20\n\ + adds r6, 0x1\n\ + cmp r6, r7\n\ + blt _080AADEC\n\ +_080AAE1E:\n\ + movs r1, 0x7C\n\ + ldr r2, [sp, 0x58]\n\ + subs r1, r2\n\ + lsls r1, 24\n\ + lsrs r7, r1, 24\n\ + ldr r0, _080AAED4 @ =gMain\n\ + mov r9, r0\n\ + lsls r3, r7, 3\n\ + add r3, r9\n\ + ldr r0, _080AAED8 @ =gUnknown_083C9400\n\ + ldr r1, [r0]\n\ + ldr r2, [r0, 0x4]\n\ + str r1, [sp, 0x50]\n\ + str r2, [sp, 0x54]\n\ + str r1, [r3, 0x3C]\n\ + str r2, [r3, 0x40]\n\ + mov r2, r8\n\ + lsls r0, r2, 3\n\ + movs r1, 0x80\n\ + lsls r1, 3\n\ + adds r2, r1, 0\n\ + subs r2, r0\n\ + adds r6, r3, 0\n\ + adds r6, 0x40\n\ + ldr r0, _080AAEDC @ =0x000003ff\n\ + mov r8, r0\n\ + mov r1, r8\n\ + ands r2, r1\n\ + ldrh r5, [r6]\n\ + ldr r4, _080AAEE0 @ =0xfffffc00\n\ + adds r0, r4, 0\n\ + ands r0, r5\n\ + orrs r0, r2\n\ + strh r0, [r6]\n\ + ldrh r5, [r3, 0x3E]\n\ + ldr r2, _080AAEE4 @ =0xfffffe00\n\ + adds r0, r2, 0\n\ + ands r0, r5\n\ + ldr r1, [sp, 0x48]\n\ + orrs r0, r1\n\ + strh r0, [r3, 0x3E]\n\ + adds r3, 0x3C\n\ + add r0, sp, 0x4C\n\ + ldrb r0, [r0]\n\ + strb r0, [r3]\n\ + adds r1, r7, 0x1\n\ + lsls r1, 3\n\ + mov r0, r9\n\ + adds r7, r1, r0\n\ + ldr r0, [sp, 0x50]\n\ + ldr r1, [sp, 0x54]\n\ + str r0, [r7, 0x3C]\n\ + str r1, [r7, 0x40]\n\ + ldrh r0, [r6]\n\ + lsls r0, 22\n\ + lsrs r0, 22\n\ + adds r0, 0x4\n\ + adds r5, r7, 0\n\ + adds r5, 0x40\n\ + mov r1, r8\n\ + ands r0, r1\n\ + ldrh r3, [r5]\n\ + ands r4, r3\n\ + orrs r4, r0\n\ + strh r4, [r5]\n\ + ldrh r0, [r7, 0x3E]\n\ + ands r2, r0\n\ + ldr r0, [sp, 0x5C]\n\ + orrs r2, r0\n\ + strh r2, [r7, 0x3E]\n\ + adds r1, r7, 0\n\ + adds r1, 0x3C\n\ + add r2, sp, 0x4C\n\ + ldrb r2, [r2]\n\ + strb r2, [r1]\n\ + add sp, 0x64\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\ +_080AAEC4: .4byte 0x06018000\n\ +_080AAEC8: .4byte 0x040000d4\n\ +_080AAECC: .4byte 0x85000040\n\ +_080AAED0: .4byte 0x84000008\n\ +_080AAED4: .4byte gMain\n\ +_080AAED8: .4byte gUnknown_083C9400\n\ +_080AAEDC: .4byte 0x000003ff\n\ +_080AAEE0: .4byte 0xfffffc00\n\ +_080AAEE4: .4byte 0xfffffe00\n\ + .syntax divided\n"); +} + +void unref_sub_80AAEE8(s32 a, u8 b, u8 c, u8 d) +{ + u8 string[12]; + u8 offset = 0; + + if (a < 0) + { + string[0] = 0xAE; + offset = 1; + } + ConvertIntToDecimalStringN(string + offset, (a < 0) ? -a : a, 0, 8); + sub_80AAD84(string, b, c, d); +} + +void sub_80AAF30(void) +{ + s32 i; + + gUnknown_0203856C = 1; + gContestPlayerMonIndex = 3; + sub_80AE098(0); + + for (i = 3; i > -1; i--) + gUnknown_02038690[i] = 3 - i; + + for (i = 0; i < 3; i++) + { + gUnknown_02038670[i] = 0; + gUnknown_02038680[i] = 0; + gUnknown_02038678[i] = 0; + memcpy(&gContestMons[i], &gContestMons[3], sizeof(struct ContestPokemon)); + } + + gUnknown_02038670[3] = 0x12C; + gUnknown_02038680[3] = 0x190; + gUnknown_02038678[3] = 0x190; + sub_80B2A7C(0xFE); +} + +//Don't know size of return type +int MatsudaDebugMenu_SetHighScore(void) +{ + sub_80AAF30(); + CloseMenu(); + return 1; +} + +//Don't know size of return type +int MatsudaDebugMenu_ResetHighScore(void) +{ + s32 i; + + gUnknown_0203856C = 0; + for (i = 0; i < 4; i++) + { + gUnknown_02038670[i] = 0; + gUnknown_02038680[i] = 0; + gUnknown_02038678[i] = 0; + } + CloseMenu(); + return 1; +} + +//Don't know size of return type +int MatsudaDebugMenu_SetArtMuseumItems(void) +{ + s32 i; + + gContestPlayerMonIndex = 3; + sub_80AE098(0); + for (i = 3; i > -1; i--) + gUnknown_02038690[i] = 3 - i; + for (gScriptContestCategory = 0; gScriptContestCategory < 5; gScriptContestCategory++) + sub_80B2A7C(0xFF); + CloseMenu(); + return 1; +} + +void unref_sub_80AB084(u8 *text) +{ + u16 savedIme; + u8 *addr; + size_t size; + + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WIN1H = 0; + REG_WIN1V = 0; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; + + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + REG_DISPSTAT = 8; + ResetTasks(); + ResetSpriteData(); + SetMainCallback2(sub_80AB184); + + addr = (void *)VRAM; + size = 0x18000; + while (1) + { + DmaFill32(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill32(3, 0, addr, size); + break; + } + } + SetUpWindowConfig(&gWindowConfig_81E6FD8); + InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6FD8); + LoadFontDefaultPalette(&gWindowConfig_81E6FD8); + sub_8003460(&gUnknown_03004210, text, 1, 9, 7); +} + +void sub_80AB184(void) +{ + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; +} diff --git a/src/debug/mori_debug_menu.c b/src/debug/mori_debug_menu.c new file mode 100644 index 000000000..273191192 --- /dev/null +++ b/src/debug/mori_debug_menu.c @@ -0,0 +1,168 @@ +#include "global.h" +#include "mori_debug_menu.h" +#include "data2.h" +#include "daycare.h" +#include "learn_move.h" +#include "link.h" +#include "main.h" +#include "menu.h" +#include "pokeblock.h" +#include "start_menu.h" +#include "string_util.h" + +#define SIO_MULTI_CNT ((struct SioMultiCnt *)REG_ADDR_SIOCNT) + +extern u8 (*gCallback_03004AE8)(void); + +u8 gUnknown_03004DA0[0x20]; + +extern u8 gUnknown_0839B22C[][3]; +extern u8 gUnknown_0839B24A[]; +extern u8 gUnknown_0839B24D[]; +extern u8 gUnknown_0839B255[]; +extern u8 gUnknown_0839B257[]; + +extern const struct MenuAction gMoriDebugMenuActions[]; + +void unref_sub_8083CF0(void) +{ + int i; + int id = SIO_MULTI_CNT->id; + gUnknown_03004DA0[0] = EOS; + StringAppend(gUnknown_03004DA0, gUnknown_0839B24A); + for (i = 0; i < 10; i++) + if ((word_3002910[id ^ 1] >> i) & 1) + StringAppend(gUnknown_03004DA0, gUnknown_0839B22C[i]); +} + +bool8 sub_8083D4C(void) +{ + if ( gMain.newKeys & A_BUTTON ) + { + CloseMenu(); + return TRUE; + } + else + return FALSE; +} + +u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr) +{ + u8 localPtr[52]; + u16 monData; + u16 var; + + monData = GetMonData(gPlayerParty, 11, ptr); + var = sub_8041870(monData); + StringCopy(localPtr, gSpeciesNames[monData]); + StringAppend(localPtr, gUnknown_0839B24D); + StringAppend(localPtr, gSpeciesNames[var]); + StringAppend(localPtr, gUnknown_0839B255); + MenuZeroFillScreen(); + MenuDrawTextWindow(0, 14, 30, 19); + MenuPrint(localPtr, 1, 15); + gCallback_03004AE8 = sub_8083D4C; + return 0; +} + +s8 MoriDebugMenu_Egg(void) +{ + if ( Daycare_CountPokemon(gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() ) + sub_8041940(); + CloseMenu(); + + return 1; +} + +s8 MoriDebugMenu_MaleEgg(void) +{ + if ( Daycare_CountPokemon(gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() ) + sub_8041950(); + CloseMenu(); + + return 1; +} + +s8 MoriDebugMenu_1000Steps(void) +{ + sub_8041790(1000); + CloseMenu(); + return 1; +} + +s8 MoriDebugMenu_10000Steps(void) +{ + sub_8041790(10000); + CloseMenu(); + return 1; +} + +s8 MoriDebugMenu_MoveTutor(void) +{ + sub_8132670(); + CloseMenu(); + return 1; +} + +s8 MoriDebugMenu_BreedEgg(void) +{ + u8 loopCounter; + + for (loopCounter = 0; loopCounter <= 5; loopCounter++) + { + //UB: Too few arguments for function 'GetMonData' + if ( GetMonData(&gPlayerParty[loopCounter], MON_DATA_IS_EGG) ) + { + u8 friendship = 0; + SetMonData(&gPlayerParty[loopCounter], MON_DATA_FRIENDSHIP, &friendship); + } + } + gSaveBlock1.filler_30B6 = -3; + CloseMenu(); + return 1; +} + +s8 MoriDebugMenu_LongName(void) +{ + SetMonData(gPlayerParty, MON_DATA_NICKNAME, gUnknown_0839B257); + CloseMenu(); + return 1; +} + +s8 MoriDebugMenu_PokeblockCase(void) +{ + s32 loopCounter; + + for (loopCounter = 0; loopCounter <= 39; loopCounter++) + sub_810CA6C(loopCounter); + + CloseMenu(); + return 1; +} + +bool8 MoriDebugMenuProcessInput(void) +{ + s8 choice = ProcessMenuInput(); + + switch (choice) + { + default: + gCallback_03004AE8 = gMoriDebugMenuActions[choice].func; + return FALSE; + case -2: + return FALSE; + case -1: + CloseMenu(); + return TRUE; + } +} + +s8 InitMoriDebugMenu(void) +{ + MenuZeroFillScreen(); + MenuDrawTextWindow(0, 0, 10, 19); + PrintMenuItems(1, 1, 9, gMoriDebugMenuActions); + InitMenu(0, 1, 1, 9, 0, 9); + gCallback_03004AE8 = MoriDebugMenuProcessInput; + return 0; +} diff --git a/src/debug/unknown_debug_menu.c b/src/debug/unknown_debug_menu.c new file mode 100644 index 000000000..a81625f2a --- /dev/null +++ b/src/debug/unknown_debug_menu.c @@ -0,0 +1,52 @@ +#include "global.h" +#include "menu.h" + +extern u8 gBattleCommunication[]; + +extern u8 (*gCallback_03004AE8)(void); + +extern const struct MenuAction gUnknown_0842C29C[]; + +static u8 sub_814A464(void); + +int unref_sub_814A414(void) +{ + MenuZeroFillScreen(); + MenuDrawTextWindow(0, 0, 16, 18); + PrintMenuItems(2, 1, 8, gUnknown_0842C29C); + InitMenu(0, 1, 1, 8, 0, 15); + gCallback_03004AE8 = sub_814A464; + return 0; +} + +static u8 sub_814A464(void) +{ + s8 result = ProcessMenuInput(); + if (result == -2) + { + return 0; + } + else if (result == -1) + { + CloseMenu(); + return 1; + } + else + { + gBattleCommunication[0] = result; + gCallback_03004AE8 = gUnknown_0842C29C[result].func; + return 0; + } +} + +u8 sub_814A4B8(void) +{ + gSaveBlock2.filler_A8.var_4AE[0] = 3; + gSaveBlock2.filler_A8.var_4AE[1] = 3; + gSaveBlock2.filler_A8.var_4B4 = gBattleCommunication[0] + 1; + gSaveBlock2.filler_A8.var_4B6 = gBattleCommunication[0] + 1; + gSaveBlock2.filler_A8.var_4B0 = 1; + gSaveBlock2.filler_A8.var_4B2 = 1; + CloseMenu(); + return 1; +} diff --git a/src/decompress.c b/src/decompress.c deleted file mode 100644 index d7f7087a7..000000000 --- a/src/decompress.c +++ /dev/null @@ -1,112 +0,0 @@ -#include "global.h" -#include "decompress.h" -#include "data2.h" -#include "species.h" -#include "text.h" - -#define WRAM 0x02000000 - -void sub_800D238(const void *src, void *dest) -{ - LZ77UnCompWram(src, dest); -} - -void LZDecompressVram(const void *src, void *dest) -{ - LZ77UnCompVram(src, dest); -} - -void LoadCompressedObjectPic(const struct CompressedSpriteSheet *src) -{ - struct SpriteSheet dest; - - LZ77UnCompWram(src->data, (void *)WRAM); - dest.data = (void *)WRAM; - dest.size = src->size; - dest.tag = src->tag; - LoadSpriteSheet(&dest); -} - -void LoadCompressedObjectPicOverrideBuffer(const struct CompressedSpriteSheet *src, void *buffer) -{ - struct SpriteSheet dest; - - LZ77UnCompWram(src->data, buffer); - dest.data = buffer; - dest.size = src->size; - dest.tag = src->tag; - LoadSpriteSheet(&dest); -} - -void LoadCompressedObjectPalette(const struct CompressedSpritePalette *src) -{ - struct SpritePalette dest; - - LZ77UnCompWram(src->data, (void *)WRAM); - dest.data = (void *)WRAM; - dest.tag = src->tag; - LoadSpritePalette(&dest); -} - -void LoadCompressedObjectPaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer) -{ - struct SpritePalette dest; - - LZ77UnCompWram(a->data, buffer); - dest.data = buffer; - dest.tag = a->tag; - LoadSpritePalette(&dest); -} - -void DecompressPicFromTable_2(const struct CompressedSpriteSheet *src, u8 b, u8 c, void *d, void *buffer, s32 species) -{ - if (species > SPECIES_EGG) - LZ77UnCompWram(gMonFrontPicTable[0].data, buffer); - else - LZ77UnCompWram(src->data, buffer); -} - -void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g) -{ - u32 frontOrBack; - - // gUnknown_081FAF4C appears to be a list of pointers to locations to store poke pics for back and front pic here. the first and third pointers are used for back while the others are used for front. - if (dest == gUnknown_081FAF4C[0] || dest == gUnknown_081FAF4C[2]) - frontOrBack = 0; // backPic - else - frontOrBack = 1; // frontPic - - LoadSpecialPokePic(src, b, c, d, dest, species, g, frontOrBack); -} - -void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g, u32 frontOrBack) -{ - u8 frontOrBack8 = frontOrBack; - - if (species == SPECIES_UNOWN) - { - u16 i = (((g & 0x3000000) >> 18) | ((g & 0x30000) >> 12) | ((g & 0x300) >> 6) | (g & 3)) % 0x1C; - - // The other Unowns are separate from Unown A. - if (i == 0) - i = SPECIES_UNOWN; - else - i += SPECIES_UNOWN_B - 1; - - if (frontOrBack8 == 0) - LZ77UnCompWram(gMonBackPicTable[i].data, dest); - else - LZ77UnCompWram(gMonFrontPicTable[i].data, dest); - } - else if (species > SPECIES_EGG) // is species unknown? draw the ? icon - LZ77UnCompWram(gMonFrontPicTable[0].data, dest); - else - LZ77UnCompWram(src->data, dest); - - DrawSpindaSpots(species, g, dest, frontOrBack8); -} - -void Unused_LZDecompressWramIndirect(const void **src, void *dest) -{ - LZ77UnCompWram(*src, dest); -} diff --git a/src/decoration.c b/src/decoration.c deleted file mode 100644 index da33b3ab7..000000000 --- a/src/decoration.c +++ /dev/null @@ -1,4280 +0,0 @@ -#include "global.h" -#include "main.h" -#include "map_object_constants.h" -#include "rom4.h" -#include "sound.h" -#include "songs.h" -#include "string_util.h" -#include "menu.h" -#include "menu_helpers.h" -#include "strings.h" -#include "script.h" -#include "palette.h" -#include "field_player_avatar.h" -#include "field_camera.h" -#include "field_fadetransition.h" -#include "fieldmap.h" -#include "metatile_behavior.h" -#include "event_data.h" -#include "field_weather.h" -#include "decoration.h" - -EWRAM_DATA u8 *gUnknown_020388D0 = NULL; -EWRAM_DATA u8 gUnknown_020388D4 = 0; -EWRAM_DATA u8 gUnknown_020388D5 = 0; -EWRAM_DATA u8 gUnknown_020388D6[16] = {0}; -EWRAM_DATA u8 gUnknown_020388E6[12] = {0}; -EWRAM_DATA u8 gUnknown_020388F2 = 0; -EWRAM_DATA u8 gUnknown_020388F3 = 0; -EWRAM_DATA u8 gUnknown_020388F4 = 0; -EWRAM_DATA u8 gUnknown_020388F5 = 0; -EWRAM_DATA u8 gUnknown_020388F6 = 0; -EWRAM_DATA u8 gUnknown_020388F7[8] = {0}; -EWRAM_DATA struct UnkStruct_02038900 gUnknown_02038900 = {0}; -EWRAM_DATA u16 gUnknown_020391A4 = 0; -EWRAM_DATA u16 gUnknown_020391A6 = 0; -EWRAM_DATA u8 gUnknown_020391A8 = 0; -EWRAM_DATA u8 gUnknown_020391A9 = 0; -EWRAM_DATA u8 gUnknown_020391AA = 0; -EWRAM_DATA struct OamData gUnknown_020391AC = {0}; -EWRAM_DATA struct UnkStruct_020391B4 gUnknown_020391B4[16] = {0}; -EWRAM_DATA u8 gUnknown_02039234 = 0; - -#if ENGLISH -const u8 DecorDesc_SMALL_DESK[] = _( - "A small desk built\n" - "for one."); - -const u8 DecorDesc_POKEMON_DESK[] = _( - "A small desk built in\n" - "the shape of a POKé\n" - "BALL."); - -const u8 DecorDesc_HEAVY_DESK[] = _( - "A large desk made\n" - "of steel. Put some\n" - "decorations on it."); - -const u8 DecorDesc_RAGGED_DESK[] = _( - "A large desk made\n" - "of wood. Put some\n" - "decorations on it."); - -const u8 DecorDesc_COMFORT_DESK[] = _( - "A large desk made\n" - "of leaves. Put some\n" - "decorations on it."); - -const u8 DecorDesc_PRETTY_DESK[] = _( - "A huge desk made\n" - "of glass. Holds lots\n" - "of decorations."); - -const u8 DecorDesc_BRICK_DESK[] = _( - "A huge desk made\n" - "of brick. Holds lots\n" - "of decorations."); - -const u8 DecorDesc_CAMP_DESK[] = _( - "A huge desk made\n" - "of logs. Put lots of\n" - "decorations on it."); - -const u8 DecorDesc_HARD_DESK[] = _( - "A huge desk made\n" - "of rocks. Holds\n" - "many decorations."); - -const u8 DecorDesc_SMALL_CHAIR[] = _( - "A small chair made\n" - "for one."); - -const u8 DecorDesc_POKEMON_CHAIR[] = _( - "A small chair built\n" - "in the shape of a\n" - "POKé BALL."); - -const u8 DecorDesc_HEAVY_CHAIR[] = _( - "A small chair made\n" - "of steel."); - -const u8 DecorDesc_PRETTY_CHAIR[] = _( - "A small chair made\n" - "of glass."); - -const u8 DecorDesc_COMFORT_CHAIR[] = _( - "A small chair made\n" - "of leaves."); - -const u8 DecorDesc_RAGGED_CHAIR[] = _( - "A small chair made\n" - "of wood."); - -const u8 DecorDesc_BRICK_CHAIR[] = _( - "A small chair made\n" - "of brick."); - -const u8 DecorDesc_CAMP_CHAIR[] = _( - "A small chair made\n" - "of logs."); - -const u8 DecorDesc_HARD_CHAIR[] = _( - "A small chair made\n" - "of rock."); - -const u8 DecorDesc_RED_PLANT[] = _( - "A vivid red potted\n" - "plant."); - -const u8 DecorDesc_TROPICAL_PLANT[] = _( - "A flowering tropical\n" - "plant in a pot."); - -const u8 DecorDesc_PRETTY_FLOWERS[] = _( - "A pot of cute\n" - "flowers."); - -const u8 DecorDesc_COLORFUL_PLANT[] = _( - "A large pot with\n" - "many colorful\n" - "flowers."); - -const u8 DecorDesc_BIG_PLANT[] = _( - "A large, umbrella-\n" - "shaped plant in a\n" - "big pot."); - -const u8 DecorDesc_GORGEOUS_PLANT[] = _( - "A large, impressive\n" - "plant in a big pot."); - -const u8 DecorDesc_RED_BRICK[] = _( - "A red-colored brick.\n" - "Decorations can be\n" - "placed on top."); - -const u8 DecorDesc_YELLOW_BRICK[] = _( - "A yellow-colored\n" - "brick. Put some\n" - "decorations on top."); - -const u8 DecorDesc_BLUE_BRICK[] = _( - "A blue-colored\n" - "brick. Put some\n" - "decorations on top."); - -const u8 DecorDesc_RED_BALLOON[] = _( - "A red balloon filled\n" - "with water. Bursts\n" - "if stepped on."); - -const u8 DecorDesc_BLUE_BALLOON[] = _( - "A blue balloon filled\n" - "with water. Bursts\n" - "if stepped on."); - -const u8 DecorDesc_YELLOW_BALLOON[] = _( - "A yellow balloon\n" - "filled with water.\n" - "Pops if stepped on."); - -const u8 DecorDesc_RED_TENT[] = _( - "A large red tent.\n" - "You can hide inside\n" - "it."); - -const u8 DecorDesc_BLUE_TENT[] = _( - "A large blue tent.\n" - "You can hide inside\n" - "it."); - -const u8 DecorDesc_SOLID_BOARD[] = _( - "Place over a hole to\n" - "cross to the other\n" - "side."); - -const u8 DecorDesc_SLIDE[] = _( - "Use to slide down\n" - "from the platform."); - -const u8 DecorDesc_FENCE_LENGTH[] = _( - "A small fence that\n" - "blocks passage."); - -const u8 DecorDesc_FENCE_WIDTH[] = _( - "A small fence that\n" - "blocks passage."); - -const u8 DecorDesc_TIRE[] = _( - "An old large tire.\n" - "Decorations can be\n" - "placed on top."); - -const u8 DecorDesc_STAND[] = _( - "A large pedestal\n" - "with steps."); - -const u8 DecorDesc_MUD_BALL[] = _( - "A large ball of mud.\n" - "Crumbles if stepped\n" - "on."); - -const u8 DecorDesc_BREAKABLE_DOOR[] = _( - "A weird door that\n" - "people can walk\n" - "right through."); - -const u8 DecorDesc_SAND_ORNAMENT[] = _( - "An ornament made\n" - "of sand. Crumbles if\n" - "touched."); - -const u8 DecorDesc_SILVER_SHIELD[] = _( - "Awarded for 50\n" - "straight wins at\n" - "the BATTLE TOWER."); - -const u8 DecorDesc_GOLD_SHIELD[] = _( - "Awarded for 100\n" - "straight wins at\n" - "the BATTLE TOWER."); - -const u8 DecorDesc_GLASS_ORNAMENT[] = _( - "A glass replica of\n" - "a famous sculpture\n" - "at the ART MUSEUM."); - -const u8 DecorDesc_TV[] = _( - "A small, gray-\n" - "colored toy TV."); - -const u8 DecorDesc_ROUND_TV[] = _( - "A toy TV modeled\n" - "in the image of a\n" - "SEEDOT."); - -const u8 DecorDesc_CUTE_TV[] = _( - "A toy TV modeled\n" - "in the image of a\n" - "SKITTY."); - -const u8 DecorDesc_GLITTER_MAT[] = _( - "An odd mat that\n" - "glitters if stepped\n" - "on."); - -const u8 DecorDesc_JUMP_MAT[] = _( - "A trick mat that\n" - "jumps when it is\n" - "stepped on."); - -const u8 DecorDesc_SPIN_MAT[] = _( - "A trick mat that\n" - "spins around when\n" - "stepped on."); - -const u8 DecorDesc_C_LOW_NOTE_MAT[] = _( - "A mat that plays\n" - "a low C note when\n" - "stepped on."); - -const u8 DecorDesc_D_NOTE_MAT[] = _( - "A mat that plays\n" - "a D note when\n" - "stepped on."); - -const u8 DecorDesc_E_NOTE_MAT[] = _( - "A mat that plays\n" - "an E note when\n" - "stepped on."); - -const u8 DecorDesc_F_NOTE_MAT[] = _( - "A mat that plays\n" - "an F note when\n" - "stepped on."); - -const u8 DecorDesc_G_NOTE_MAT[] = _( - "A mat that plays\n" - "a G note when\n" - "stepped on."); - -const u8 DecorDesc_A_NOTE_MAT[] = _( - "A mat that plays\n" - "an A note when\n" - "stepped on."); - -const u8 DecorDesc_B_NOTE_MAT[] = _( - "A mat that plays\n" - "a B note when\n" - "stepped on."); - -const u8 DecorDesc_C_HIGH_NOTE_MAT[] = _( - "A mat that plays\n" - "a high C note when\n" - "stepped on."); - -const u8 DecorDesc_SURF_MAT[] = _( - "A mat designed with\n" - "a SURF image.\n" - "Put items on top."); - -const u8 DecorDesc_THUNDER_MAT[] = _( - "A mat designed with\n" - "a THUNDER image.\n" - "Put items on top."); - -const u8 DecorDesc_FIRE_BLAST_MAT[] = _( - "A mat designed with\n" - "a FIRE BLAST image.\n" - "Put items on top."); - -const u8 DecorDesc_POWDER_SNOW_MAT[] = _( - "A mat with a POWDER\n" - "SNOW image design.\n" - "Put items on top."); - -const u8 DecorDesc_ATTRACT_MAT[] = _( - "A mat designed with\n" - "an ATTRACT image.\n" - "Put items on top."); - -const u8 DecorDesc_FISSURE_MAT[] = _( - "A mat designed with\n" - "a FISSURE image.\n" - "Put items on top."); - -const u8 DecorDesc_SPIKES_MAT[] = _( - "A mat designed with\n" - "a SPIKES image.\n" - "Put items on top."); - -const u8 DecorDesc_BALL_POSTER[] = _( - "A small poster\n" - "printed with POKé\n" - "BALLS."); - -const u8 DecorDesc_GREEN_POSTER[] = _( - "A small poster with\n" - "a TREECKO print."); - -const u8 DecorDesc_RED_POSTER[] = _( - "A small poster with\n" - "a TORCHIC print."); - -const u8 DecorDesc_BLUE_POSTER[] = _( - "A small poster with\n" - "a MUDKIP print."); - -const u8 DecorDesc_CUTE_POSTER[] = _( - "A small poster with\n" - "an AZURILL print."); - -const u8 DecorDesc_PIKA_POSTER[] = _( - "A large poster with\n" - "a PIKACHU and\n" - "PICHU print."); - -const u8 DecorDesc_LONG_POSTER[] = _( - "A large poster with\n" - "a SEVIPER print."); - -const u8 DecorDesc_SEA_POSTER[] = _( - "A large poster with\n" - "a RELICANTH print."); - -const u8 DecorDesc_SKY_POSTER[] = _( - "A large poster with\n" - "a WINGULL print."); - -const u8 DecorDesc_KISS_POSTER[] = _( - "A large poster with\n" - "a SMOOCHUM print."); - -const u8 DecorDesc_PICHU_DOLL[] = _( - "A PICHU doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_PIKACHU_DOLL[] = _( - "A PIKACHU doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_MARILL_DOLL[] = _( - "A MARILL doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_TOGEPI_DOLL[] = _( -#if REVISION >= 1 - "A TOGEPI doll.\n" -#else - "A TOPGEPI doll.\n" -#endif - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_CYNDAQUIL_DOLL[] = _( - "A CYNDAQUIL doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_CHIKORITA_DOLL[] = _( - "A CHIKORITA doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_TOTODILE_DOLL[] = _( - "A TOTODILE doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_JIGGLYPUFF_DOLL[] = _( - "A JIGGLYPUFF doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_MEOWTH_DOLL[] = _( - "A MEOWTH doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_CLEFAIRY_DOLL[] = _( - "A CLEFAIRY doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_DITTO_DOLL[] = _( - "A DITTO doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_SMOOCHUM_DOLL[] = _( - "A SMOOCHUM doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_TREECKO_DOLL[] = _( - "A TREECKO doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_TORCHIC_DOLL[] = _( - "A TORCHIC doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_MUDKIP_DOLL[] = _( - "A MUDKIP doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_DUSKULL_DOLL[] = _( - "A DUSKULL doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_WYNAUT_DOLL[] = _( - "A WYNAUT doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_BALTOY_DOLL[] = _( - "A BALTOY doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_KECLEON_DOLL[] = _( - "A KECLEON doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_AZURILL_DOLL[] = _( - "An AZURILL doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_SKITTY_DOLL[] = _( - "A SKITTY doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_SWABLU_DOLL[] = _( - "A SWABLU doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_GULPIN_DOLL[] = _( - "A GULPIN doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_LOTAD_DOLL[] = _( - "A LOTAD doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_SEEDOT_DOLL[] = _( - "A SEEDOT doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_PIKA_CUSHION[] = _( - "A PIKACHU cushion.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_ROUND_CUSHION[] = _( - "A MARILL cushion.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_KISS_CUSHION[] = _( - "A SMOOCHUM\n" - "cushion. Place it on\n" - "a mat or a desk."); - -const u8 DecorDesc_ZIGZAG_CUSHION[] = _( - "A ZIGZAGOON\n" - "cushion. Place it on\n" - "a mat or a desk."); - -const u8 DecorDesc_SPIN_CUSHION[] = _( - "A SPINDA cushion.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_DIAMOND_CUSHION[] = _( - "A SABLEYE cushion.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_BALL_CUSHION[] = _( - "A BALL cushion.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_GRASS_CUSHION[] = _( - "A grass-mark\n" - "cushion. Place it on\n" - "a mat or a desk."); - -const u8 DecorDesc_FIRE_CUSHION[] = _( - "A fire-mark\n" - "cushion. Place it on\n" - "a mat or a desk."); - -const u8 DecorDesc_WATER_CUSHION[] = _( - "A water-mark\n" - "cushion. Place it on\n" - "a mat or a desk."); - -const u8 DecorDesc_SNORLAX_DOLL[] = _( - "A large doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_RHYDON_DOLL[] = _( - "A large doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_LAPRAS_DOLL[] = _( - "A large doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_VENUSAUR_DOLL[] = _( - "A large doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_CHARIZARD_DOLL[] = _( - "A large doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_BLASTOISE_DOLL[] = _( - "A large doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_WAILMER_DOLL[] = _( - "A large doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_REGIROCK_DOLL[] = _( - "A large doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_REGICE_DOLL[] = _( - "A large doll.\n" - "Place it on a mat\n" - "or a desk."); - -const u8 DecorDesc_REGISTEEL_DOLL[] = _( - "A large doll.\n" - "Place it on a mat\n" - "or a desk."); -#elif GERMAN -#include "data/decoration/descriptions_de.h" -#endif - -const u16 DecorGfx_SMALL_DESK[] = { - 0x87 -}; - -const u16 DecorGfx_POKEMON_DESK[] = { - 0x8F -}; - -const u16 DecorGfx_HEAVY_DESK[] = { - 0x90, - 0x91, - 0x92, - 0x98, - 0x99, - 0x9A -}; - -const u16 DecorGfx_RAGGED_DESK[] = { - 0x93, - 0x94, - 0x95, - 0x9B, - 0x9C, - 0x9D -}; - -const u16 DecorGfx_COMFORT_DESK[] = { - 0x96, - 0x97, - 0xA3, - 0x9E, - 0x9F, - 0xAB -}; - -const u16 DecorGfx_PRETTY_DESK[] = { - 0xBD, - 0xBE, - 0xBF, - 0xC5, - 0xC6, - 0xC7, - 0xCD, - 0xCE, - 0xCF -}; - -const u16 DecorGfx_BRICK_DESK[] = { - 0xA0, - 0xA1, - 0xA2, - 0xA8, - 0xA9, - 0xAA, - 0xB0, - 0xB1, - 0xB2 -}; - -const u16 DecorGfx_CAMP_DESK[] = { - 0xA4, - 0xA5, - 0xA6, - 0xAC, - 0xAD, - 0xAE, - 0xB4, - 0xB5, - 0xB6 -}; - -const u16 DecorGfx_HARD_DESK[] = { - 0xA7, - 0xBB, - 0xBC, - 0xAF, - 0xC3, - 0xC4, - 0xB7, - 0xCB, - 0xCC -}; - -const u16 DecorGfx_SMALL_CHAIR[] = { - 0xB8 -}; - -const u16 DecorGfx_POKEMON_CHAIR[] = { - 0xB9 -}; - -const u16 DecorGfx_HEAVY_CHAIR[] = { - 0xBA -}; - -const u16 DecorGfx_PRETTY_CHAIR[] = { - 0xC0 -}; - -const u16 DecorGfx_COMFORT_CHAIR[] = { - 0xC1 -}; - -const u16 DecorGfx_RAGGED_CHAIR[] = { - 0xC2 -}; - -const u16 DecorGfx_BRICK_CHAIR[] = { - 0xC8 -}; - -const u16 DecorGfx_CAMP_CHAIR[] = { - 0xC9 -}; - -const u16 DecorGfx_HARD_CHAIR[] = { - 0xCA -}; - -const u16 DecorGfx_RED_PLANT[] = { - 0xD0, - 0xD8 -}; - -const u16 DecorGfx_TROPICAL_PLANT[] = { - 0xD2, - 0xDA -}; - -const u16 DecorGfx_PRETTY_FLOWERS[] = { - 0xD4, - 0xDC -}; - -const u16 DecorGfx_COLORFUL_PLANT[] = { - 0xE0, - 0xE2, - 0xE8, - 0xE9 -}; - -const u16 DecorGfx_BIG_PLANT[] = { - 0xE4, - 0xE6, - 0xEC, - 0xED -}; - -const u16 DecorGfx_GORGEOUS_PLANT[] = { - 0xF0, - 0xF2, - 0xF8, - 0xF9 -}; - -const u16 DecorGfx_RED_BRICK[] = { - 0x25, - 0x2D -}; - -const u16 DecorGfx_YELLOW_BRICK[] = { - 0x26, - 0x2E -}; - -const u16 DecorGfx_BLUE_BRICK[] = { - 0x27, - 0x2F -}; - -const u16 DecorGfx_RED_BALLOON[] = { - 0x138 -}; - -const u16 DecorGfx_BLUE_BALLOON[] = { - 0x13C -}; - -const u16 DecorGfx_YELLOW_BALLOON[] = { - 0x140 -}; - -const u16 DecorGfx_RED_TENT[] = { - 0x30, - 0x31, - 0x32, - 0x38, - 0x39, - 0x3A, - 0x40, - 0x41, - 0x3B -}; - -const u16 DecorGfx_BLUE_TENT[] = { - 0x48, - 0x49, - 0x68, - 0x50, - 0x51, - 0x70, - 0x58, - 0x59, - 0x69 -}; - -const u16 DecorGfx_SOLID_BOARD[] = { - 0x34, - 0x3C -}; - -const u16 DecorGfx_SLIDE[] = { - 0x35, - 0x36, - 0x3D, - 0x3E, - 0x63, - 0x64, - 0x6F, - 0x77 -}; - -const u16 DecorGfx_FENCE_LENGTH[] = { - 0x33 -}; - -const u16 DecorGfx_FENCE_WIDTH[] = { - 0x2C -}; - -const u16 DecorGfx_TIRE[] = { - 0x80, - 0x81, - 0x88, - 0x89 -}; - -const u16 DecorGfx_STAND[] = { - 0x6A, - 0x6B, - 0x6C, - 0x6D, - 0x72, - 0x73, - 0x74, - 0x75 -}; - -const u16 DecorGfx_MUD_BALL[] = { - 0x28 -}; - -const u16 DecorGfx_BREAKABLE_DOOR[] = { - 0x37, - 0x3F -}; - -const u16 DecorGfx_SAND_ORNAMENT[] = { - 0x85, - 0x8D -}; - -const u16 DecorGfx_SILVER_SHIELD[] = { - 0xD6, - 0xDE -}; - -const u16 DecorGfx_GOLD_SHIELD[] = { - 0x12E, - 0x136 -}; - -const u16 DecorGfx_GLASS_ORNAMENT[] = { - 0x82, - 0x8A -}; - -const u16 DecorGfx_TV[] = { - 0xF4 -}; - -const u16 DecorGfx_ROUND_TV[] = { - 0xF5 -}; - -const u16 DecorGfx_CUTE_TV[] = { - 0xF6 -}; - -const u16 DecorGfx_GLITTER_MAT[] = { - 0x60 -}; - -const u16 DecorGfx_JUMP_MAT[] = { - 0x61 -}; - -const u16 DecorGfx_SPIN_MAT[] = { - 0x62 -}; - -const u16 DecorGfx_C_LOW_NOTE_MAT[] = { - 0x78 -}; - -const u16 DecorGfx_D_NOTE_MAT[] = { - 0x79 -}; - -const u16 DecorGfx_E_NOTE_MAT[] = { - 0x7A -}; - -const u16 DecorGfx_F_NOTE_MAT[] = { - 0x7B -}; - -const u16 DecorGfx_G_NOTE_MAT[] = { - 0x7C -}; - -const u16 DecorGfx_A_NOTE_MAT[] = { - 0x7D -}; - -const u16 DecorGfx_B_NOTE_MAT[] = { - 0x7E -}; - -const u16 DecorGfx_C_HIGH_NOTE_MAT[] = { - 0xB3 -}; - -const u16 DecorGfx_SURF_MAT[] = { - 0x42, - 0x43, - 0x44, - 0x4A, - 0x4B, - 0x4C, - 0x52, - 0x53, - 0x54 -}; - -const u16 DecorGfx_THUNDER_MAT[] = { - 0x45, - 0x46, - 0x47, - 0x4D, - 0x4E, - 0x4F, - 0x55, - 0x56, - 0x57 -}; - -const u16 DecorGfx_FIRE_BLAST_MAT[] = { - 0x5A, - 0x5B, - 0x5C, - 0x5D, - 0x5E, - 0x5F, - 0x65, - 0x66, - 0x67 -}; - -const u16 DecorGfx_POWDER_SNOW_MAT[] = { - 0x100, - 0x101, - 0x102, - 0x108, - 0x109, - 0x10A, - 0x110, - 0x111, - 0x112 -}; - -const u16 DecorGfx_ATTRACT_MAT[] = { - 0x103, - 0x104, - 0x105, - 0x10B, - 0x10C, - 0x10D, - 0x113, - 0x114, - 0x115 -}; - -const u16 DecorGfx_FISSURE_MAT[] = { - 0x106, - 0x107, - 0x118, - 0x10E, - 0x10F, - 0x120, - 0x116, - 0x117, - 0x128 -}; - -const u16 DecorGfx_SPIKES_MAT[] = { - 0x119, - 0x11A, - 0x11B, - 0x121, - 0x122, - 0x123, - 0x129, - 0x12A, - 0x12B -}; - -const u16 DecorGfx_BALL_POSTER[] = { - 0x130 -}; - -const u16 DecorGfx_GREEN_POSTER[] = { - 0x131 -}; - -const u16 DecorGfx_RED_POSTER[] = { - 0x132 -}; - -const u16 DecorGfx_BLUE_POSTER[] = { - 0x133 -}; - -const u16 DecorGfx_CUTE_POSTER[] = { - 0x134 -}; - -const u16 DecorGfx_PIKA_POSTER[] = { - 0x11C, - 0x11D -}; - -const u16 DecorGfx_LONG_POSTER[] = { - 0x11E, - 0x11F -}; - -const u16 DecorGfx_SEA_POSTER[] = { - 0x124, - 0x125 -}; - -const u16 DecorGfx_SKY_POSTER[] = { - 0x126, - 0x127 -}; - -const u16 DecorGfx_KISS_POSTER[] = { - 0x12C, - 0x12D -}; - -const u16 DecorGfx_PICHU_DOLL[] = { - MAP_OBJ_GFX_PICHU_DOLL -}; - -const u16 DecorGfx_PIKACHU_DOLL[] = { - MAP_OBJ_GFX_PIKACHU_DOLL -}; - -const u16 DecorGfx_MARILL_DOLL[] = { - MAP_OBJ_GFX_MARILL_DOLL -}; - -const u16 DecorGfx_TOGEPI_DOLL[] = { - MAP_OBJ_GFX_TOGEPI_DOLL -}; - -const u16 DecorGfx_CYNDAQUIL_DOLL[] = { - MAP_OBJ_GFX_CYNDAQUIL_DOLL -}; - -const u16 DecorGfx_CHIKORITA_DOLL[] = { - MAP_OBJ_GFX_CHIKORITA_DOLL -}; - -const u16 DecorGfx_TOTODILE_DOLL[] = { - MAP_OBJ_GFX_TOTODILE_DOLL -}; - -const u16 DecorGfx_JIGGLYPUFF_DOLL[] = { - MAP_OBJ_GFX_JIGGLYPUFF_DOLL -}; - -const u16 DecorGfx_MEOWTH_DOLL[] = { - MAP_OBJ_GFX_MEOWTH_DOLL -}; - -const u16 DecorGfx_CLEFAIRY_DOLL[] = { - MAP_OBJ_GFX_CLEFAIRY_DOLL -}; - -const u16 DecorGfx_DITTO_DOLL[] = { - MAP_OBJ_GFX_DITTO_DOLL -}; - -const u16 DecorGfx_SMOOCHUM_DOLL[] = { - MAP_OBJ_GFX_SMOOCHUM_DOLL -}; - -const u16 DecorGfx_TREECKO_DOLL[] = { - MAP_OBJ_GFX_TREECKO_DOLL -}; - -const u16 DecorGfx_TORCHIC_DOLL[] = { - MAP_OBJ_GFX_TORCHIC_DOLL -}; - -const u16 DecorGfx_MUDKIP_DOLL[] = { - MAP_OBJ_GFX_MUDKIP_DOLL -}; - -const u16 DecorGfx_DUSKULL_DOLL[] = { - MAP_OBJ_GFX_DUSKULL_DOLL -}; - -const u16 DecorGfx_WYNAUT_DOLL[] = { - MAP_OBJ_GFX_WYNAUT_DOLL -}; - -const u16 DecorGfx_BALTOY_DOLL[] = { - MAP_OBJ_GFX_BALTOY_DOLL -}; - -const u16 DecorGfx_KECLEON_DOLL[] = { - MAP_OBJ_GFX_KECLEON_DOLL -}; - -const u16 DecorGfx_AZURILL_DOLL[] = { - MAP_OBJ_GFX_AZURILL_DOLL -}; - -const u16 DecorGfx_SKITTY_DOLL[] = { - MAP_OBJ_GFX_SKITTY_DOLL -}; - -const u16 DecorGfx_SWABLU_DOLL[] = { - MAP_OBJ_GFX_SWABLU_DOLL -}; - -const u16 DecorGfx_GULPIN_DOLL[] = { - MAP_OBJ_GFX_GULPIN_DOLL -}; - -const u16 DecorGfx_LOTAD_DOLL[] = { - MAP_OBJ_GFX_LOTAD_DOLL -}; - -const u16 DecorGfx_SEEDOT_DOLL[] = { - MAP_OBJ_GFX_SEEDOT_DOLL -}; - -const u16 DecorGfx_PIKA_CUSHION[] = { - MAP_OBJ_GFX_PIKA_CUSHION -}; - -const u16 DecorGfx_ROUND_CUSHION[] = { - MAP_OBJ_GFX_ROUND_CUSHION -}; - -const u16 DecorGfx_KISS_CUSHION[] = { - MAP_OBJ_GFX_KISS_CUSHION -}; - -const u16 DecorGfx_ZIGZAG_CUSHION[] = { - MAP_OBJ_GFX_ZIGZAG_CUSHION -}; - -const u16 DecorGfx_SPIN_CUSHION[] = { - MAP_OBJ_GFX_SPIN_CUSHION -}; - -const u16 DecorGfx_DIAMOND_CUSHION[] = { - MAP_OBJ_GFX_DIAMOND_CUSHION -}; - -const u16 DecorGfx_BALL_CUSHION[] = { - MAP_OBJ_GFX_BALL_CUSHION -}; - -const u16 DecorGfx_GRASS_CUSHION[] = { - MAP_OBJ_GFX_GRASS_CUSHION -}; - -const u16 DecorGfx_FIRE_CUSHION[] = { - MAP_OBJ_GFX_FIRE_CUSHION -}; - -const u16 DecorGfx_WATER_CUSHION[] = { - MAP_OBJ_GFX_WATER_CUSHION -}; - -const u16 DecorGfx_SNORLAX_DOLL[] = { - MAP_OBJ_GFX_BIG_SNORLAX_DOLL -}; - -const u16 DecorGfx_RHYDON_DOLL[] = { - MAP_OBJ_GFX_BIG_RHYDON_DOLL -}; - -const u16 DecorGfx_LAPRAS_DOLL[] = { - MAP_OBJ_GFX_BIG_LAPRAS_DOLL -}; - -const u16 DecorGfx_VENUSAUR_DOLL[] = { - MAP_OBJ_GFX_BIG_VENUSAUR_DOLL -}; - -const u16 DecorGfx_CHARIZARD_DOLL[] = { - MAP_OBJ_GFX_BIG_CHARIZARD_DOLL -}; - -const u16 DecorGfx_BLASTOISE_DOLL[] = { - MAP_OBJ_GFX_BIG_BLASTOISE_DOLL -}; - -const u16 DecorGfx_WAILMER_DOLL[] = { - MAP_OBJ_GFX_BIG_WAILMER_DOLL -}; - -const u16 DecorGfx_REGIROCK_DOLL[] = { - MAP_OBJ_GFX_BIG_REGIROCK_DOLL -}; - -const u16 DecorGfx_REGICE_DOLL[] = { - MAP_OBJ_GFX_BIG_REGICE_DOLL -}; - -const u16 DecorGfx_REGISTEEL_DOLL[] = { - MAP_OBJ_GFX_BIG_REGISTEEL_DOLL -}; - -#if ENGLISH -const struct Decoration gDecorations[] = { - {DECOR_NONE, _("SMALL DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_DESK, 0, DecorDesc_SMALL_DESK, DecorGfx_SMALL_DESK}, - {DECOR_SMALL_DESK, _("SMALL DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_DESK, 3000, DecorDesc_SMALL_DESK, DecorGfx_SMALL_DESK}, - {DECOR_POKEMON_DESK, _("POKéMON DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_DESK, 3000, DecorDesc_POKEMON_DESK, DecorGfx_POKEMON_DESK}, - {DECOR_HEAVY_DESK, _("HEAVY DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_3x2, DECORCAT_DESK, 6000, DecorDesc_HEAVY_DESK, DecorGfx_HEAVY_DESK}, - {DECOR_RAGGED_DESK, _("RAGGED DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_3x2, DECORCAT_DESK, 6000, DecorDesc_RAGGED_DESK, DecorGfx_RAGGED_DESK}, - {DECOR_COMFORT_DESK, _("COMFORT DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_3x2, DECORCAT_DESK, 6000, DecorDesc_COMFORT_DESK, DecorGfx_COMFORT_DESK}, - {DECOR_PRETTY_DESK, _("PRETTY DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_3x3, DECORCAT_DESK, 9000, DecorDesc_PRETTY_DESK, DecorGfx_PRETTY_DESK}, - {DECOR_BRICK_DESK, _("BRICK DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_3x3, DECORCAT_DESK, 9000, DecorDesc_BRICK_DESK, DecorGfx_BRICK_DESK}, - {DECOR_CAMP_DESK, _("CAMP DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_3x3, DECORCAT_DESK, 9000, DecorDesc_CAMP_DESK, DecorGfx_CAMP_DESK}, - {DECOR_HARD_DESK, _("HARD DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_3x3, DECORCAT_DESK, 9000, DecorDesc_HARD_DESK, DecorGfx_HARD_DESK}, - {DECOR_SMALL_CHAIR, _("SMALL CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_SMALL_CHAIR, DecorGfx_SMALL_CHAIR}, - {DECOR_POKEMON_CHAIR, _("POKéMON CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_POKEMON_CHAIR, DecorGfx_POKEMON_CHAIR}, - {DECOR_HEAVY_CHAIR, _("HEAVY CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_HEAVY_CHAIR, DecorGfx_HEAVY_CHAIR}, - {DECOR_PRETTY_CHAIR, _("PRETTY CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_PRETTY_CHAIR, DecorGfx_PRETTY_CHAIR}, - {DECOR_COMFORT_CHAIR, _("COMFORT CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_COMFORT_CHAIR, DecorGfx_COMFORT_CHAIR}, - {DECOR_RAGGED_CHAIR, _("RAGGED CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_RAGGED_CHAIR, DecorGfx_RAGGED_CHAIR}, - {DECOR_BRICK_CHAIR, _("BRICK CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_BRICK_CHAIR, DecorGfx_BRICK_CHAIR}, - {DECOR_CAMP_CHAIR, _("CAMP CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_CAMP_CHAIR, DecorGfx_CAMP_CHAIR}, - {DECOR_HARD_CHAIR, _("HARD CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_HARD_CHAIR, DecorGfx_HARD_CHAIR}, - {DECOR_RED_PLANT, _("RED PLANT"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_1x2, DECORCAT_PLANT, 3000, DecorDesc_RED_PLANT, DecorGfx_RED_PLANT}, - {DECOR_TROPICAL_PLANT, _("TROPICAL PLANT"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_1x2, DECORCAT_PLANT, 3000, DecorDesc_TROPICAL_PLANT, DecorGfx_TROPICAL_PLANT}, - {DECOR_PRETTY_FLOWERS, _("PRETTY FLOWERS"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_1x2, DECORCAT_PLANT, 3000, DecorDesc_PRETTY_FLOWERS, DecorGfx_PRETTY_FLOWERS}, - {DECOR_COLORFUL_PLANT, _("COLORFUL PLANT"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_2x2, DECORCAT_PLANT, 5000, DecorDesc_COLORFUL_PLANT, DecorGfx_COLORFUL_PLANT}, - {DECOR_BIG_PLANT, _("BIG PLANT"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_2x2, DECORCAT_PLANT, 5000, DecorDesc_BIG_PLANT, DecorGfx_BIG_PLANT}, - {DECOR_GORGEOUS_PLANT, _("GORGEOUS PLANT"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_2x2, DECORCAT_PLANT, 5000, DecorDesc_GORGEOUS_PLANT, DecorGfx_GORGEOUS_PLANT}, - {DECOR_RED_BRICK, _("RED BRICK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 500, DecorDesc_RED_BRICK, DecorGfx_RED_BRICK}, - {DECOR_YELLOW_BRICK, _("YELLOW BRICK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 500, DecorDesc_YELLOW_BRICK, DecorGfx_YELLOW_BRICK}, - {DECOR_BLUE_BRICK, _("BLUE BRICK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 500, DecorDesc_BLUE_BRICK, DecorGfx_BLUE_BRICK}, - {DECOR_RED_BALLOON, _("RED BALLOON"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 500, DecorDesc_RED_BALLOON, DecorGfx_RED_BALLOON}, - {DECOR_BLUE_BALLOON, _("BLUE BALLOON"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 500, DecorDesc_BLUE_BALLOON, DecorGfx_BLUE_BALLOON}, - {DECOR_YELLOW_BALLOON, _("YELLOW BALLOON"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 500, DecorDesc_YELLOW_BALLOON, DecorGfx_YELLOW_BALLOON}, - {DECOR_RED_TENT, _("RED TENT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_ORNAMENT, 10000, DecorDesc_RED_TENT, DecorGfx_RED_TENT}, - {DECOR_BLUE_TENT, _("BLUE TENT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_ORNAMENT, 10000, DecorDesc_BLUE_TENT, DecorGfx_BLUE_TENT}, - {DECOR_SOLID_BOARD, _("SOLID BOARD"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 3000, DecorDesc_SOLID_BOARD, DecorGfx_SOLID_BOARD}, - {DECOR_SLIDE, _("SLIDE"), DECORPERM_PASS_FLOOR, DECORSHAPE_2x4, DECORCAT_ORNAMENT, 8000, DecorDesc_SLIDE, DecorGfx_SLIDE}, - {DECOR_FENCE_LENGTH, _("FENCE LENGTH"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 500, DecorDesc_FENCE_LENGTH, DecorGfx_FENCE_LENGTH}, - {DECOR_FENCE_WIDTH, _("FENCE WIDTH"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 500, DecorDesc_FENCE_WIDTH, DecorGfx_FENCE_WIDTH}, - {DECOR_TIRE, _("TIRE"), DECORPERM_SOLID_FLOOR, DECORSHAPE_2x2, DECORCAT_ORNAMENT, 800, DecorDesc_TIRE, DecorGfx_TIRE}, - {DECOR_STAND, _("STAND"), DECORPERM_PASS_FLOOR, DECORSHAPE_4x2, DECORCAT_ORNAMENT, 7000, DecorDesc_STAND, DecorGfx_STAND}, - {DECOR_MUD_BALL, _("MUD BALL"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 200, DecorDesc_MUD_BALL, DecorGfx_MUD_BALL}, - {DECOR_BREAKABLE_DOOR, _("BREAKABLE DOOR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 3000, DecorDesc_BREAKABLE_DOOR, DecorGfx_BREAKABLE_DOOR}, - {DECOR_SAND_ORNAMENT, _("SAND ORNAMENT"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 3000, DecorDesc_SAND_ORNAMENT, DecorGfx_SAND_ORNAMENT}, - {DECOR_SILVER_SHIELD, _("SILVER SHIELD"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 0, DecorDesc_SILVER_SHIELD, DecorGfx_SILVER_SHIELD}, - {DECOR_GOLD_SHIELD, _("GOLD SHIELD"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 0, DecorDesc_GOLD_SHIELD, DecorGfx_GOLD_SHIELD}, - {DECOR_GLASS_ORNAMENT, _("GLASS ORNAMENT"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 0, DecorDesc_GLASS_ORNAMENT, DecorGfx_GLASS_ORNAMENT}, - {DECOR_TV, _("TV"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 3000, DecorDesc_TV, DecorGfx_TV}, - {DECOR_ROUND_TV, _("ROUND TV"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 4000, DecorDesc_ROUND_TV, DecorGfx_ROUND_TV}, - {DECOR_CUTE_TV, _("CUTE TV"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 4000, DecorDesc_CUTE_TV, DecorGfx_CUTE_TV}, - {DECOR_GLITTER_MAT, _("GLITTER MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 2000, DecorDesc_GLITTER_MAT, DecorGfx_GLITTER_MAT}, - {DECOR_JUMP_MAT, _("JUMP MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 2000, DecorDesc_JUMP_MAT, DecorGfx_JUMP_MAT}, - {DECOR_SPIN_MAT, _("SPIN MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 2000, DecorDesc_SPIN_MAT, DecorGfx_SPIN_MAT}, - {DECOR_C_LOW_NOTE_MAT, _("C Low NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_C_LOW_NOTE_MAT, DecorGfx_C_LOW_NOTE_MAT}, - {DECOR_D_NOTE_MAT, _("D NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_D_NOTE_MAT, DecorGfx_D_NOTE_MAT}, - {DECOR_E_NOTE_MAT, _("E NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_E_NOTE_MAT, DecorGfx_E_NOTE_MAT}, - {DECOR_F_NOTE_MAT, _("F NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_F_NOTE_MAT, DecorGfx_F_NOTE_MAT}, - {DECOR_G_NOTE_MAT, _("G NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_G_NOTE_MAT, DecorGfx_G_NOTE_MAT}, - {DECOR_A_NOTE_MAT, _("A NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_A_NOTE_MAT, DecorGfx_A_NOTE_MAT}, - {DECOR_B_NOTE_MAT, _("B NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_B_NOTE_MAT, DecorGfx_B_NOTE_MAT}, - {DECOR_C_HIGH_NOTE_MAT, _("C High NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_C_HIGH_NOTE_MAT, DecorGfx_C_HIGH_NOTE_MAT}, - {DECOR_SURF_MAT, _("SURF MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_MAT, 4000, DecorDesc_SURF_MAT, DecorGfx_SURF_MAT}, - {DECOR_THUNDER_MAT, _("THUNDER MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_MAT, 4000, DecorDesc_THUNDER_MAT, DecorGfx_THUNDER_MAT}, - {DECOR_FIRE_BLAST_MAT, _("FIRE BLAST MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_MAT, 4000, DecorDesc_FIRE_BLAST_MAT, DecorGfx_FIRE_BLAST_MAT}, - {DECOR_POWDER_SNOW_MAT, _("POWDER SNOW MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_MAT, 4000, DecorDesc_POWDER_SNOW_MAT, DecorGfx_POWDER_SNOW_MAT}, - {DECOR_ATTRACT_MAT, _("ATTRACT MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_MAT, 4000, DecorDesc_ATTRACT_MAT, DecorGfx_ATTRACT_MAT}, - {DECOR_FISSURE_MAT, _("FISSURE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_MAT, 4000, DecorDesc_FISSURE_MAT, DecorGfx_FISSURE_MAT}, - {DECOR_SPIKES_MAT, _("SPIKES MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_MAT, 4000, DecorDesc_SPIKES_MAT, DecorGfx_SPIKES_MAT}, - {DECOR_BALL_POSTER, _("BALL POSTER"), DECORPERM_NA_WALL, DECORSHAPE_1x1, DECORCAT_POSTER, 1000, DecorDesc_BALL_POSTER, DecorGfx_BALL_POSTER}, - {DECOR_GREEN_POSTER, _("GREEN POSTER"), DECORPERM_NA_WALL, DECORSHAPE_1x1, DECORCAT_POSTER, 1000, DecorDesc_GREEN_POSTER, DecorGfx_GREEN_POSTER}, - {DECOR_RED_POSTER, _("RED POSTER"), DECORPERM_NA_WALL, DECORSHAPE_1x1, DECORCAT_POSTER, 1000, DecorDesc_RED_POSTER, DecorGfx_RED_POSTER}, - {DECOR_BLUE_POSTER, _("BLUE POSTER"), DECORPERM_NA_WALL, DECORSHAPE_1x1, DECORCAT_POSTER, 1000, DecorDesc_BLUE_POSTER, DecorGfx_BLUE_POSTER}, - {DECOR_CUTE_POSTER, _("CUTE POSTER"), DECORPERM_NA_WALL, DECORSHAPE_1x1, DECORCAT_POSTER, 1000, DecorDesc_CUTE_POSTER, DecorGfx_CUTE_POSTER}, - {DECOR_PIKA_POSTER, _("PIKA POSTER"), DECORPERM_NA_WALL, DECORSHAPE_2x1, DECORCAT_POSTER, 1500, DecorDesc_PIKA_POSTER, DecorGfx_PIKA_POSTER}, - {DECOR_LONG_POSTER, _("LONG POSTER"), DECORPERM_NA_WALL, DECORSHAPE_2x1, DECORCAT_POSTER, 1500, DecorDesc_LONG_POSTER, DecorGfx_LONG_POSTER}, - {DECOR_SEA_POSTER, _("SEA POSTER"), DECORPERM_NA_WALL, DECORSHAPE_2x1, DECORCAT_POSTER, 1500, DecorDesc_SEA_POSTER, DecorGfx_SEA_POSTER}, - {DECOR_SKY_POSTER, _("SKY POSTER"), DECORPERM_NA_WALL, DECORSHAPE_2x1, DECORCAT_POSTER, 1500, DecorDesc_SKY_POSTER, DecorGfx_SKY_POSTER}, - {DECOR_KISS_POSTER, _("KISS POSTER"), DECORPERM_NA_WALL, DECORSHAPE_2x1, DECORCAT_POSTER, 1500, DecorDesc_KISS_POSTER, DecorGfx_KISS_POSTER}, - {DECOR_PICHU_DOLL, _("PICHU DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_PICHU_DOLL, DecorGfx_PICHU_DOLL}, - {DECOR_PIKACHU_DOLL, _("PIKACHU DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_PIKACHU_DOLL, DecorGfx_PIKACHU_DOLL}, - {DECOR_MARILL_DOLL, _("MARILL DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_MARILL_DOLL, DecorGfx_MARILL_DOLL}, - {DECOR_TOGEPI_DOLL, _("TOGEPI DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_TOGEPI_DOLL, DecorGfx_TOGEPI_DOLL}, - {DECOR_CYNDAQUIL_DOLL, _("CYNDAQUIL DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_CYNDAQUIL_DOLL, DecorGfx_CYNDAQUIL_DOLL}, - {DECOR_CHIKORITA_DOLL, _("CHIKORITA DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_CHIKORITA_DOLL, DecorGfx_CHIKORITA_DOLL}, - {DECOR_TOTODILE_DOLL, _("TOTODILE DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_TOTODILE_DOLL, DecorGfx_TOTODILE_DOLL}, - {DECOR_JIGGLYPUFF_DOLL, _("JIGGLYPUFF DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_JIGGLYPUFF_DOLL, DecorGfx_JIGGLYPUFF_DOLL}, - {DECOR_MEOWTH_DOLL, _("MEOWTH DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_MEOWTH_DOLL, DecorGfx_MEOWTH_DOLL}, - {DECOR_CLEFAIRY_DOLL, _("CLEFAIRY DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_CLEFAIRY_DOLL, DecorGfx_CLEFAIRY_DOLL}, - {DECOR_DITTO_DOLL, _("DITTO DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_DITTO_DOLL, DecorGfx_DITTO_DOLL}, - {DECOR_SMOOCHUM_DOLL, _("SMOOCHUM DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_SMOOCHUM_DOLL, DecorGfx_SMOOCHUM_DOLL}, - {DECOR_TREECKO_DOLL, _("TREECKO DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_TREECKO_DOLL, DecorGfx_TREECKO_DOLL}, - {DECOR_TORCHIC_DOLL, _("TORCHIC DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_TORCHIC_DOLL, DecorGfx_TORCHIC_DOLL}, - {DECOR_MUDKIP_DOLL, _("MUDKIP DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_MUDKIP_DOLL, DecorGfx_MUDKIP_DOLL}, - {DECOR_DUSKULL_DOLL, _("DUSKULL DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_DUSKULL_DOLL, DecorGfx_DUSKULL_DOLL}, - {DECOR_WYNAUT_DOLL, _("WYNAUT DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_WYNAUT_DOLL, DecorGfx_WYNAUT_DOLL}, - {DECOR_BALTOY_DOLL, _("BALTOY DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_BALTOY_DOLL, DecorGfx_BALTOY_DOLL}, - {DECOR_KECLEON_DOLL, _("KECLEON DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_KECLEON_DOLL, DecorGfx_KECLEON_DOLL}, - {DECOR_AZURILL_DOLL, _("AZURILL DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_AZURILL_DOLL, DecorGfx_AZURILL_DOLL}, - {DECOR_SKITTY_DOLL, _("SKITTY DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_SKITTY_DOLL, DecorGfx_SKITTY_DOLL}, - {DECOR_SWABLU_DOLL, _("SWABLU DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_SWABLU_DOLL, DecorGfx_SWABLU_DOLL}, - {DECOR_GULPIN_DOLL, _("GULPIN DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_GULPIN_DOLL, DecorGfx_GULPIN_DOLL}, - {DECOR_LOTAD_DOLL, _("LOTAD DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_LOTAD_DOLL, DecorGfx_LOTAD_DOLL}, - {DECOR_SEEDOT_DOLL, _("SEEDOT DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_SEEDOT_DOLL, DecorGfx_SEEDOT_DOLL}, - {DECOR_PIKA_CUSHION, _("PIKA CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_PIKA_CUSHION, DecorGfx_PIKA_CUSHION}, - {DECOR_ROUND_CUSHION, _("ROUND CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_ROUND_CUSHION, DecorGfx_ROUND_CUSHION}, - {DECOR_KISS_CUSHION, _("KISS CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_KISS_CUSHION, DecorGfx_KISS_CUSHION}, - {DECOR_ZIGZAG_CUSHION, _("ZIGZAG CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_ZIGZAG_CUSHION, DecorGfx_ZIGZAG_CUSHION}, - {DECOR_SPIN_CUSHION, _("SPIN CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_SPIN_CUSHION, DecorGfx_SPIN_CUSHION}, - {DECOR_DIAMOND_CUSHION, _("DIAMOND CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_DIAMOND_CUSHION, DecorGfx_DIAMOND_CUSHION}, - {DECOR_BALL_CUSHION, _("BALL CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_BALL_CUSHION, DecorGfx_BALL_CUSHION}, - {DECOR_GRASS_CUSHION, _("GRASS CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_GRASS_CUSHION, DecorGfx_GRASS_CUSHION}, - {DECOR_FIRE_CUSHION, _("FIRE CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_FIRE_CUSHION, DecorGfx_FIRE_CUSHION}, - {DECOR_WATER_CUSHION, _("WATER CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_WATER_CUSHION, DecorGfx_WATER_CUSHION}, - {DECOR_SNORLAX_DOLL, _("SNORLAX DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_SNORLAX_DOLL, DecorGfx_SNORLAX_DOLL}, - {DECOR_RHYDON_DOLL, _("RHYDON DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_RHYDON_DOLL, DecorGfx_RHYDON_DOLL}, - {DECOR_LAPRAS_DOLL, _("LAPRAS DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_LAPRAS_DOLL, DecorGfx_LAPRAS_DOLL}, - {DECOR_VENUSAUR_DOLL, _("VENUSAUR DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_VENUSAUR_DOLL, DecorGfx_VENUSAUR_DOLL}, - {DECOR_CHARIZARD_DOLL, _("CHARIZARD DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_CHARIZARD_DOLL, DecorGfx_CHARIZARD_DOLL}, - {DECOR_BLASTOISE_DOLL, _("BLASTOISE DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_BLASTOISE_DOLL, DecorGfx_BLASTOISE_DOLL}, - {DECOR_WAILMER_DOLL, _("WAILMER DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_WAILMER_DOLL, DecorGfx_WAILMER_DOLL}, - {DECOR_REGIROCK_DOLL, _("REGIROCK DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_REGIROCK_DOLL, DecorGfx_REGIROCK_DOLL}, - {DECOR_REGICE_DOLL, _("REGICE DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_REGICE_DOLL, DecorGfx_REGICE_DOLL}, - {DECOR_REGISTEEL_DOLL, _("REGISTEEL DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_REGISTEEL_DOLL, DecorGfx_REGISTEEL_DOLL} -}; -#elif GERMAN -#include "data/decoration/decorations.h" -#endif - -const u8 *const gUnknown_083EC5E4[] = { - SecretBaseText_Desk, - SecretBaseText_Chair, - SecretBaseText_Plant, - SecretBaseText_Ornament, - SecretBaseText_Mat, - SecretBaseText_Poster, - SecretBaseText_Doll, - SecretBaseText_Cushion -}; - -const struct MenuAction2 gUnknown_083EC604[] = { - {SecretBaseText_Decorate, sub_80FF160}, - {SecretBaseText_PutAway, sub_8100A0C}, - {SecretBaseText_Toss, sub_8101700}, - {gUnknownText_Exit, gpu_pal_decompress_alloc_tag_and_upload} -}; - -const u8 *const gUnknown_083EC624[] = { - SecretBaseText_PutOutDecor, - SecretBaseText_StoreChosenDecor, - SecretBaseText_ThrowAwayDecor, - gMenuText_GoBackToPrev -}; - -const struct YesNoFuncTable gUnknown_083EC634[] = { - {sub_80FF5BC, sub_80FF058}, - {sub_81017A0, sub_80FF058}, - {sub_81017A0, sub_80FF058}, - {sub_8109D04, sub_80FF058} -}; - -const u16 gUnknown_083EC654[] = {0x6318, 0x739C, 0x7FFF}; -const u8 gUnknown_083EC65A[] = _("{PALETTE 13}{STR_VAR_1}"); - -const u8 Unknown_3EC660[] = {0, 1, 2, 3}; -const u8 Unknown_3EC664[] = {0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13}; -const u8 Unknown_3EC670[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; -const u8 Unknown_3EC680[] = {0, 1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21}; -const u8 Unknown_3EC68C[] = {0, 1, 2, 3, 4, 5, 6, 7}; -const u8 Unknown_3EC694[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}; -const u8 Unknown_3EC6B4[] = {0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29, 32, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 45}; -const u8 Unknown_3EC6D8[] = {0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29}; - -const u8 Unknown_3EC6F0[] = {0, 0, 0, 0}; -const u8 Unknown_3EC6F4[] = {0, 0, 1, 1, 0, 0, 1, 1}; -const u8 Unknown_3EC6FC[] = {0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2}; -const u8 Unknown_3EC708[] = {0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 4, 4, 5, 5, 6, 6, 7, 7}; -const u8 Unknown_3EC728[] = {0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3}; -const u8 Unknown_3EC738[] = {0, 0, 0, 0, 1, 1, 1, 1}; -const u8 Unknown_3EC740[] = {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2}; -const u8 Unknown_3EC74C[] = {0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3, 4, 4, 5, 5, 4, 4, 5, 5, 6, 6, 7, 7, 6, 6, 7, 7}; -const u8 Unknown_3EC76C[] = {0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 6, 6, 7, 7, 8, 8}; -const u8 Unknown_3EC790[] = {0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 3, 3, 4, 4, 5, 5}; - -const u8 Unknown_3EC7A8[] = {4, 5, 6, 7}; -const u8 Unknown_3EC7AC[] = {4, 5, 4, 5, 6, 7, 6, 7}; -const u8 Unknown_3EC7B4[] = {4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7}; -const u8 Unknown_3EC7C0[] = {4, 5, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 6, 7}; -const u8 Unknown_3EC7E0[] = {4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7}; -const u8 Unknown_3EC7F0[] = {4, 5, 6, 7, 4, 5, 6, 7}; -const u8 Unknown_3EC7F8[] = {4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7}; -const u8 Unknown_3EC804[] = {4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7}; -const u8 Unknown_3EC824[] = {4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7}; -const u8 Unknown_3EC848[] = {4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7}; - -const struct UnkStruct_803EC860 gUnknown_083EC860[] = { - {Unknown_3EC660, Unknown_3EC6F0, Unknown_3EC7A8, 0x4}, - {Unknown_3EC68C, Unknown_3EC6F4, Unknown_3EC7AC, 0x8}, - {Unknown_3EC664, Unknown_3EC6FC, Unknown_3EC7B4, 0xc}, - {Unknown_3EC694, Unknown_3EC708, Unknown_3EC7C0, 0x20}, - {Unknown_3EC670, Unknown_3EC728, Unknown_3EC7E0, 0x10}, - {Unknown_3EC68C, Unknown_3EC738, Unknown_3EC7F0, 0x8}, - {Unknown_3EC680, Unknown_3EC740, Unknown_3EC7F8, 0xc}, - {Unknown_3EC694, Unknown_3EC74C, Unknown_3EC804, 0x20}, - {Unknown_3EC6B4, Unknown_3EC76C, Unknown_3EC824, 0x24}, - {Unknown_3EC6D8, Unknown_3EC790, Unknown_3EC848, 0x18} -}; - -const struct UnkStruct_083EC900 gUnknown_083EC900[] = { - {0, 1, 0x78, 0x4e}, - {1, 2, 0x80, 0x4e}, - {1, 3, 0x90, 0x56}, - {1, 3, 0x90, 0x46}, - {0, 2, 0x80, 0x46}, - {2, 2, 0x78, 0x46}, - {2, 3, 0x80, 0x56}, - {2, 3, 0x80, 0x36}, - {0, 3, 0x90, 0x46}, - {1, 3, 0x90, 0x46} -}; - -const union AnimCmd gSpriteAnim_83EC928[] = { - ANIMCMD_FRAME(.imageValue = 0, .duration = 0), - ANIMCMD_END -}; - -const union AnimCmd *const gSpriteAnimTable_83EC930[] = { - gSpriteAnim_83EC928 -}; - -const struct SpriteFrameImage gSpriteImageTable_83EC934[] = { - {.data = (u8 *)&gUnknown_02038900.image, .size = sizeof gUnknown_02038900.image} -}; - -const struct SpriteTemplate gSpriteTemplate_83EC93C = { - .tileTag = 0xffff, - .paletteTag = 3000, - .oam = &gUnknown_020391AC, - .anims = gSpriteAnimTable_83EC930, - .images = gSpriteImageTable_83EC934, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81009A8 -}; - -const struct SpritePalette gUnknown_083EC954 = {.data = (u16 *)&gUnknown_02038900.palette, .tag = 3000}; - -const struct YesNoFuncTable gUnknown_083EC95C = {.yesFunc = sub_81000C4, .noFunc = sub_810065C}; -const struct YesNoFuncTable gUnknown_083EC964 = {.yesFunc = sub_810026C, .noFunc = sub_810065C}; -const struct YesNoFuncTable gUnknown_083EC96C[] = { - {.yesFunc = sub_80FFAB0, .noFunc = sub_80FFB08}, - {.yesFunc = sub_8100F88, .noFunc = sub_8100FB4} -}; - -const u8 gUnknown_083EC97C[] = {4, 4, 4, 4, 0, 3, 3, 0}; -const u8 gUnknown_083EC984[] = {4, 4, 4, 4, 0, 4, 3, 0}; - -const u16 gUnknown_083EC98C[] = INCBIN_U16("graphics/unknown/83EC98C.gbapal"); -const u16 Unknown_3EC9AC[] = INCBIN_U16("graphics/unknown/83EC9AC.gbapal"); -const struct YesNoFuncTable gUnknown_083EC9CC = {.yesFunc = sub_810153C, .noFunc = sub_8100EEC}; -const struct YesNoFuncTable gUnknown_083EC9D4 = {.yesFunc = sub_8101590, .noFunc = sub_8100EEC}; -const u32 gSpriteImage_83EC9DC[] = INCBIN_U32("graphics/unknown_sprites/83EC9DC.4bpp"); -const struct SpritePalette gUnknown_083ECA5C = {.data = gUnknown_083EC98C, .tag = 8}; -const struct SpritePalette gUnknown_083ECA64 = {.data = Unknown_3EC9AC, .tag = 8}; -const struct OamData gOamData_83ECA6C = { - .size = 1, .priority = 1 -}; - -const union AnimCmd gSpriteAnim_83ECA74[] = { - ANIMCMD_FRAME(.imageValue = 0, .duration = 0), - ANIMCMD_END -}; - -const union AnimCmd *const gSpriteAnimTable_83ECA7C[] = { - gSpriteAnim_83ECA74 -}; - -const struct SpriteFrameImage gSpriteImageTable_83ECA80[] = { - obj_frame_tiles(gSpriteImage_83EC9DC) -}; - -const struct SpriteTemplate gSpriteTemplate_83ECA88 = { - .tileTag = 0xffff, - .paletteTag = 8, - .oam = &gOamData_83ECA6C, - .anims = gSpriteAnimTable_83ECA7C, - .images = gSpriteImageTable_83ECA80, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8101698 -}; - -const struct YesNoFuncTable gUnknown_083ECAA0 = {.yesFunc = sub_8101848, .noFunc = sub_80FED3C}; - -u8 *const unref_label_083ECAA8[] = {ewram}; - -// text - -extern u8 gUnknown_0815F399[]; - -void sub_80FE1DC(void) -{ - sub_80FE2B4(); - MenuDrawTextWindow(0, 0, 10, 9); - PrintMenuItems(1, 1, 4, (const struct MenuAction *)gUnknown_083EC604); - InitMenu(0, 1, 1, 4, gUnknown_020388D4, 9); -} - -void sub_80FE220(void) -{ - gUnknown_020388D4 = 0; - ScriptContext2_Enable(); - sub_80FE1DC(); - sub_80FE394(); -} - -void DecorationPC(u8 taskId) -{ - sub_80FE220(); - gTasks[taskId].func = Task_DecorationPCProcessMenuInput; -} - -void Task_SecretBasePC_Decoration(u8 taskId) -{ - DecorationPC(taskId); - ewram_1f000.items = gSaveBlock1.secretBases[0].decorations; - ewram_1f000.pos = gSaveBlock1.secretBases[0].decorationPos; - ewram_1f000.size = sizeof gSaveBlock1.secretBases[0].decorations; - ewram_1f000.isPlayerRoom = 0; -} - -void DoPlayerPCDecoration(u8 taskId) -{ - DecorationPC(taskId); - ewram_1f000.items = gSaveBlock1.playerRoomDecor; - ewram_1f000.pos = gSaveBlock1.playerRoomDecorPos; - ewram_1f000.size = sizeof gSaveBlock1.playerRoomDecor; - ewram_1f000.isPlayerRoom = 1; -} - -void sub_80FE2B4(void) -{ - u16 palettes[3]; - memcpy(palettes, gUnknown_083EC654, sizeof gUnknown_083EC654); - LoadPalette(&palettes[2], 0xdf, 2); - LoadPalette(&palettes[1], 0xd1, 2); - LoadPalette(&palettes[0], 0xd8, 2); -} - -void Task_DecorationPCProcessMenuInput(u8 taskId) -{ - if (!gPaletteFade.active) - { - if (gMain.newKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - gUnknown_020388D4 = MoveMenuCursor(-1); - sub_80FE394(); - } - if (gMain.newKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - gUnknown_020388D4 = MoveMenuCursor(1); - sub_80FE394(); - } - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - gUnknown_083EC604[gUnknown_020388D4].func(taskId); - } else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - gpu_pal_decompress_alloc_tag_and_upload(taskId); - } - } -} - -void sub_80FE394(void) -{ - MenuFillWindowRectWithBlankTile(2, 15, 27, 18); - MenuPrint(gUnknown_083EC624[gUnknown_020388D4], 2, 15); -} - -void gpu_pal_decompress_alloc_tag_and_upload(u8 taskId) -{ - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(0, 0, 10, 9); - MenuFillWindowRectWithBlankTile(2, 15, 27, 18); - FreeSpritePaletteByTag(6); - if (ewram_1f000.isPlayerRoom == 0) - { - ScriptContext1_SetupScript(gUnknown_0815F399); - DestroyTask(taskId); - } else - { - ReshowPlayerPC(taskId); - } -} - -void sub_80FE418(u8 taskId) -{ - sub_80FE5AC(taskId); -} - -void sub_80FE428(u8 taskId) -{ - InitMenu(0, 1, 1, 4, gUnknown_020388D4, 9); - sub_80FE394(); - gTasks[taskId].func = Task_DecorationPCProcessMenuInput; -} - -void sub_80FE470(u8 decoCat, u8 left, u8 top, u8 palIdx) // PrintDecorationCategorySelectionMenuString -{ - u8 *strptr; - u8 v0; - v0 = sub_8072CBC(); - // PALETTE {palIdx} - strptr = gStringVar4; - strptr[0] = EXT_CTRL_CODE_BEGIN; - strptr[1] = 5; - strptr[2] = palIdx; - strptr += 3; - strptr = StringCopy(strptr, gUnknown_083EC5E4[decoCat]); - strptr = sub_8072C14(strptr, sub_8134194(decoCat), 0x56, 1); - *strptr++ = 0xba; - strptr = sub_8072C14(strptr, gDecorationInventories[decoCat].size, 0x68, 1); - strptr[0] = EXT_CTRL_CODE_BEGIN; - strptr[1] = 5; - strptr[2] = v0; - strptr[3] = EOS; - MenuPrint(gStringVar4, left, top); -} - -void sub_80FE528(u8 taskId) // PrintDecorationCategorySelectionMenuStrings -{ - u8 decoCat; - MenuDrawTextWindow(0, 0, 14, 19); - for (decoCat=0; decoCat<8; decoCat++) - { - if (ewram_1f000.isPlayerRoom == 1 && gTasks[taskId].data[11] == 0 && decoCat != DECORCAT_DOLL && decoCat != DECORCAT_CUSHION) - { - sub_80FE470(decoCat, 1, 2 * decoCat + 1, 13); // Selectable - } else - { - sub_80FE470(decoCat, 1, 2 * decoCat + 1, 255); // Unselectable - } - } - MenuPrint(gUnknownText_Exit, 1, 17); -} - -void sub_80FE5AC(u8 taskId) -{ - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(0, 0, 29, 19); - sub_80FE528(taskId); - InitMenu(0, 1, 1, 9, gUnknown_020388F6, 13); - gTasks[taskId].func = sub_80FE604; -} - -void sub_80FE604(u8 taskId) -{ - if (!gPaletteFade.active) - { - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - MoveMenuCursor(-1); - } else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - MoveMenuCursor(1); - } else if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - gUnknown_020388F6 = GetMenuCursorPos(); - if (gUnknown_020388F6 != 8) - { - gUnknown_020388D5 = sub_8134194(gUnknown_020388F6); - if (gUnknown_020388D5) - { - sub_8134104(gUnknown_020388F6); - gUnknown_020388D0 = gDecorationInventories[gUnknown_020388F6].items; - sub_80FEF50(taskId); - sub_80F944C(); - sub_80F9480(gUnknown_020388F7, 8); - LoadScrollIndicatorPalette(); - gTasks[taskId].func = sub_80FE868; - } else - { - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(0, 0, 14, 19); - DisplayItemMessageOnField(taskId, gSecretBaseText_NoDecors, sub_80FE418, 0); - } - } else - { - sub_80FE728(taskId); - } - } else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - sub_80FE728(taskId); - } - } -} - -void sub_80FE728(u8 taskId) -{ - if (gTasks[taskId].data[11] != 3) - { - sub_80FE758(taskId); - } else - { - sub_8109DAC(taskId); - } -} - -void sub_80FE758(u8 taskId) -{ - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(0, 0, 14, 19); - if (gTasks[taskId].data[11] != 2) - { - sub_80FE1DC(); - MenuDisplayMessageBox(); - sub_80FE394(); - gTasks[taskId].func = Task_DecorationPCProcessMenuInput; - } else - { - sub_80B3068(taskId); - } -} - -void sub_80FE7A8(u8 taskId) -{ - gTasks[taskId].data[11] = 3; - gUnknown_020388F6 = 0; - sub_80FE5AC(taskId); -} - -void sub_80FE7D4(u8 *dest, u8 decClass) -{ - StringCopy(dest, gUnknown_083EC5E4[decClass]); -} - -void sub_80FE7EC(u8 taskId) -{ - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(0, 0, 29, 19); - - sub_80FEC94(taskId); - sub_80FECB8(gUnknown_020388F6); - -#if ENGLISH - MenuDrawTextWindow(15, 12, 29, 19); -#elif GERMAN - if ((gUnknown_020388F2 + gUnknown_020388F4) != gUnknown_020388D5) - { - MenuDrawTextWindow(15, 12, 29, 19); - } -#endif - - sub_80FECE0(gUnknown_020388F2 + gUnknown_020388F4); - InitMenu(0, 1, 2, gUnknown_020388F3 + 1, gUnknown_020388F2, 13); -} - -void sub_80FE868(u8 taskId) -{ - sub_80FE7EC(taskId); - gTasks[taskId].func = sub_80FE948; -} - -void sub_80FE894(u8 taskId /*r8*/, s8 cursorVector /*r5*/, s8 bgVector /*r7*/) -{ - int v0 /*r10*/; - u8 v1; - v0 = gUnknown_020388F2 + gUnknown_020388F4 == gUnknown_020388D5; - PlaySE(SE_SELECT); - if (cursorVector != 0) - { - gUnknown_020388F2 = MoveMenuCursor(cursorVector); - } - if (bgVector != 0) - { - v1 = gUnknown_020388F4; - gUnknown_020388F4 = v1 + bgVector; - sub_80FEABC(taskId, 1); - } - if (gUnknown_020388F2 + gUnknown_020388F4 != gUnknown_020388D5) - { - if (v0) - { - MenuDrawTextWindow(15, 12, 29, 19); - } - sub_80FECE0(gUnknown_020388F2 + gUnknown_020388F4); - } else - { - MenuZeroFillWindowRect(15, 12, 29, 19); - } -} - -void sub_80FE948(u8 taskId) -{ - if (!gPaletteFade.active) - { - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) - { - if (gUnknown_020388F2 != 0) - { - sub_80FE894(taskId, -1, 0); - } else if (gUnknown_020388F4 != 0) - { - sub_80FE894(taskId, 0, -1); - } - } - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) - { - if (gUnknown_020388F2 != gUnknown_020388F3) - { - sub_80FE894(taskId, 1, 0); - } else if (gUnknown_020388F4 + gUnknown_020388F2 != gUnknown_020388D5) - { - sub_80FE894(taskId, 0, 1); - } - } - if (gMain.newKeys & A_BUTTON) - { - HandleDestroyMenuCursors(); - PlaySE(SE_SELECT); - gUnknown_020388F5 = gUnknown_020388F2 + gUnknown_020388F4; - if (gUnknown_020388F5 == gUnknown_020388D5) - { - gUnknown_083EC634[gTasks[taskId].data[11]].noFunc(taskId); - } else - { - gUnknown_083EC634[gTasks[taskId].data[11]].yesFunc(taskId); - } - } else if (gMain.newKeys & B_BUTTON) - { - HandleDestroyMenuCursors(); - PlaySE(SE_SELECT); - gUnknown_083EC634[gTasks[taskId].data[11]].noFunc(taskId); - } - } -} - -void sub_80FEABC(u8 taskId, u8 dummy1) -{ - u16 i; - u16 j; - u8 ni; - if (gUnknown_020388F4 != 0 || (DestroyVerticalScrollIndicator(0), gUnknown_020388F4 != 0)) - { - CreateVerticalScrollIndicators(0, 0x3c, 0x08); - } - if (gUnknown_020388F4 + 7 == gUnknown_020388D5) - { - DestroyVerticalScrollIndicator(1); - } - if (gUnknown_020388F4 + 7 < gUnknown_020388D5) - { - CreateVerticalScrollIndicators(1, 0x3c, 0x98); - } - for (i=gUnknown_020388F4; i gUnknown_020388D5 && gUnknown_020388F4 != 0) - { - gUnknown_020388F4--; - } - sub_8134104(gUnknown_020388F6); - sub_80FED90(taskId); - sub_80FEF28(); -} - -void sub_80FF0E0(u8 taskId) -{ - gTasks[taskId].data[3] = gSaveBlock1.pos.x; - gTasks[taskId].data[4] = gSaveBlock1.pos.y; - PlayerGetDestCoords(&gTasks[taskId].data[0], &gTasks[taskId].data[1]); -} - -void sub_80FF114(u8 taskId) -{ - DrawWholeMapView(); - warp1_set(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, gTasks[taskId].data[3], gTasks[taskId].data[4]); - warp_in(); -} -void sub_80FF160(u8 taskId) -{ - if (!sub_81341D4()) - { - DisplayItemMessageOnField(taskId, gSecretBaseText_NoDecors, sub_80FE428, 0); - } else - { - gTasks[taskId].data[11] = 0; - gUnknown_020388F6 = 0; - sub_80FE5AC(taskId); - } -} - -u16 sub_80FF1B0(u8 decoId, u8 a1) -{ - u16 retval; - retval = 0xffff; - - switch (decoId) - { - case DECOR_STAND: - retval = gUnknown_083EC97C[a1] << 12; - return retval; - case DECOR_SLIDE: - retval = gUnknown_083EC984[a1] << 12; - return retval; - default: - return retval; - } -} - -void sub_80FF1EC(u16 mapX, u16 mapY, u8 decWidth, u8 decHeight, u16 decIdx) -{ - u16 i; - u16 j; // r10 - u16 behavior; - u16 flags; // r8 - u16 v0; - u16 v1; - s16 x; - s16 decBottom; - - for (i=0; i> 12))) - { - flags = 0xc00; - } else - { - flags = 0x000; - } - if (gDecorations[decIdx].permission != DECORPERM_NA_WALL && sub_80572B0(MapGridGetMetatileBehaviorAt(x, decBottom)) == 1) - { - v0 = 1; - } else - { - v0 = 0; - } - v1 = sub_80FF1B0(gDecorations[decIdx].id, i * decWidth + j); - if (v1 != 0xffff) - { - MapGridSetMetatileEntryAt(x, decBottom, (gDecorations[decIdx].tiles[i * decWidth + j] + (0x200 | v0)) | flags | v1); - } else - { - MapGridSetMetatileIdAt(x, decBottom, (gDecorations[decIdx].tiles[i * decWidth + j] + (0x200 | v0)) | flags); - } - } - } -} - -void sub_80FF394(u16 mapX, u16 mapY, u16 decIdx) -{ - switch (gDecorations[decIdx].shape) - { - case DECORSHAPE_1x1: - sub_80FF1EC(mapX, mapY, 1, 1, decIdx); - break; - case DECORSHAPE_2x1: - sub_80FF1EC(mapX, mapY, 2, 1, decIdx); - break; - case DECORSHAPE_3x1: // unused - sub_80FF1EC(mapX, mapY, 3, 1, decIdx); - break; - case DECORSHAPE_4x2: - sub_80FF1EC(mapX, mapY, 4, 2, decIdx); - break; - case DECORSHAPE_2x2: - sub_80FF1EC(mapX, mapY, 2, 2, decIdx); - break; - case DECORSHAPE_1x2: - sub_80FF1EC(mapX, mapY, 1, 2, decIdx); - break; - case DECORSHAPE_1x3: // unused - sub_80FF1EC(mapX, mapY, 1, 3, decIdx); - break; - case DECORSHAPE_2x4: - sub_80FF1EC(mapX, mapY, 2, 4, decIdx); - break; - case DECORSHAPE_3x3: - sub_80FF1EC(mapX, mapY, 3, 3, decIdx); - break; - case DECORSHAPE_3x2: - sub_80FF1EC(mapX, mapY, 3, 2, decIdx); - break; - } -} - -void sub_80FF474(void) -{ - u8 i; - u8 j; - for (i=0; i<14; i++) - { - if (FlagGet(i + 0xae) == 1) - { - FlagReset(i + 0xae); - for (j=0; jmapObjectCount; j++) - { - if (gMapHeader.events->mapObjects[j].flagId == i + 0xae) - { - break; - } - } - VarSet(0x3f20 + gMapHeader.events->mapObjects[j].graphicsId, gUnknown_02038900.decoration->tiles[0]); - gSpecialVar_0x8005 = gMapHeader.events->mapObjects[j].localId; - gSpecialVar_0x8006 = gUnknown_020391A4; - gSpecialVar_0x8007 = gUnknown_020391A6; - show_sprite(gSpecialVar_0x8005, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - sub_805C0F8(gSpecialVar_0x8005, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007); - sub_805C78C(gSpecialVar_0x8005, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - break; - } - } -} - -bool8 sub_80FF58C/*IsThereRoomForMoreDecorations*/(void) -{ - u16 i; - for (i=0; idecoration = &gDecorations[decoIdx]; - if (gDecorations[decoIdx].permission != DECORPERM_SOLID_MAT) - { - sub_81008BC(unk_02038900); - sub_8100930(unk_02038900->decoration->shape); - sub_8100874(unk_02038900); - sub_810070C(unk_02038900->palette, ((u16 *)gMapHeader.mapData->secondaryTileset->metatiles + 8 * unk_02038900->decoration->tiles[0])[7] >> 12); - LoadSpritePalette(&gUnknown_083EC954); - gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data0; - gUnknown_03004880.unk4 = CreateSprite(&gSpriteTemplate_83EC93C, gUnknown_083EC900[unk_02038900->decoration->shape].x, gUnknown_083EC900[unk_02038900->decoration->shape].y, 0); - } else - { - gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data0; - gUnknown_03004880.unk4 = AddPseudoFieldObject(unk_02038900->decoration->tiles[0], sub_81009A8, gUnknown_083EC900[unk_02038900->decoration->shape].x, gUnknown_083EC900[unk_02038900->decoration->shape].y, 1); - gSprites[gUnknown_03004880.unk4].oam.priority = 1; - } -} - -void SetUpPlacingDecorationPlayerAvatar(u8 taskId, struct UnkStruct_02038900 *unk_02038900) -{ - u8 v0; - v0 = 16 * (u8)gTasks[taskId].data[5] + gUnknown_083EC900[unk_02038900->decoration->shape].x - 8 * ((u8)gTasks[taskId].data[5] - 1); - if (unk_02038900->decoration->shape == DECORSHAPE_3x1 || unk_02038900->decoration->shape == DECORSHAPE_3x3 || unk_02038900->decoration->shape == DECORSHAPE_3x2) - { - v0 -= 8; - } - if (gSaveBlock2.playerGender == MALE) - { - gUnknown_020391A9 = AddPseudoFieldObject(0xc1, SpriteCallbackDummy, v0, 0x48, 0); - } else - { - gUnknown_020391A9 = AddPseudoFieldObject(0xc2, SpriteCallbackDummy, v0, 0x48, 0); - } - gSprites[gUnknown_020391A9].oam.priority = 1; - DestroySprite(&gSprites[gUnknown_020391A8]); - gUnknown_020391A8 = gUnknown_03004880.unk4; -} - -void sub_80FF960(u8 taskId) -{ - switch (gDecorations[gUnknown_020388D0[gUnknown_020388F5]].shape) - { - case DECORSHAPE_1x1: - gTasks[taskId].data[5] = 1; - gTasks[taskId].data[6] = 1; - break; - case DECORSHAPE_2x1: - gTasks[taskId].data[5] = 2; - gTasks[taskId].data[6] = 1; - break; - case DECORSHAPE_3x1: - gTasks[taskId].data[5] = 3; - gTasks[taskId].data[6] = 1; - break; - case DECORSHAPE_4x2: - gTasks[taskId].data[5] = 4; - gTasks[taskId].data[6] = 2; - break; - case DECORSHAPE_2x2: - gTasks[taskId].data[5] = 2; - gTasks[taskId].data[6] = 2; - break; - case DECORSHAPE_1x2: - gTasks[taskId].data[5] = 1; - gTasks[taskId].data[6] = 2; - break; - case DECORSHAPE_1x3: - gTasks[taskId].data[5] = 1; - gTasks[taskId].data[6] = 3; - gTasks[taskId].data[1]++; - break; - case DECORSHAPE_2x4: - gTasks[taskId].data[5] = 2; - gTasks[taskId].data[6] = 4; - break; - case DECORSHAPE_3x3: - gTasks[taskId].data[5] = 3; - gTasks[taskId].data[6] = 3; - break; - case DECORSHAPE_3x2: - gTasks[taskId].data[5] = 3; - gTasks[taskId].data[6] = 2; - break; - } -} - -void sub_80FFAB0(u8 taskId) -{ - gTasks[taskId].data[10] = 0; - gSprites[gUnknown_020391A8].data7 = 1; - gSprites[gUnknown_020391A9].data7 = 1; - sub_810045C(); - sub_8100038(taskId); -} - -void sub_80FFB08(u8 taskId) -{ - gTasks[taskId].data[10] = 0; - gSprites[gUnknown_020391A8].data7 = 1; - gSprites[gUnknown_020391A9].data7 = 1; - sub_810045C(); - DisplayItemMessageOnField(taskId, gSecretBaseText_CancelDecorating, sub_8100248, 0); -} - -bool8 sub_80FFB6C(u8 a0, u16 a1) -{ - if (sub_8057274(a0) != 1 || a1 != 0) - { - return FALSE; - } - return TRUE; -} - -bool8 sub_80FFB94(u8 taskId, s16 x, s16 y, u16 decoId) -{ - if (x == gTasks[taskId].data[3] + 7 && y == gTasks[taskId].data[4] + 7 && decoId != 0) - { - return FALSE; - } - return TRUE; -} - -bool8 sub_80FFBDC(u16 a0, const struct Decoration *decoration) -{ - if (sub_8057274(a0) != 1) - { - if (decoration->id == DECOR_SOLID_BOARD && sub_8057300(a0) == 1) - { - return TRUE; - } - if (sub_805729C(a0)) - { - return TRUE; - } - } - return FALSE; -} - -// When behaviorBy is set, it is masked by 0xf000. This is the step that fails to match when built. -#ifdef NONMATCHING -bool8 sub_80FFC24(u8 taskId, const struct Decoration *decoration) -{ - u8 i; - u8 j; - u8 behaviorAt; - u16 behaviorBy; - u8 mapY; - u8 mapX; - s16 curY; - s16 curX; - mapY = gTasks[taskId].data[6]; - mapX = gTasks[taskId].data[5]; - switch (decoration->permission) - { - case DECORPERM_SOLID_FLOOR: - case DECORPERM_PASS_FLOOR: - for (i=0; itiles[(mapY - 1 - i) * mapX + j]) & 0xf000; - if (!sub_80FFBDC(behaviorAt, decoration)) - { - return FALSE; - } - if (!sub_80FFB94(taskId, curX, curY, behaviorBy)) - { - return FALSE; - } - behaviorAt = GetFieldObjectIdByXYZ(curX, curY, 0); - if (behaviorAt != 0 && behaviorAt != 16) - { - return FALSE; - } - } - } - break; - case DECORPERM_BEHIND_FLOOR: - for (i=0; itiles[(mapY - 1 - i) * mapX + j]) & 0xf000; - if (!sub_805729C(behaviorAt) && !sub_80FFB6C(behaviorAt, behaviorBy)) - { - return FALSE; - } - if (!sub_80FFB94(taskId, curX, curY, behaviorBy)) - { - return FALSE; - } - if (GetFieldObjectIdByXYZ(curX, curY, 0) != 16) - { - return FALSE; - } - } - } - curY = gTasks[taskId].data[1] - mapY + 1; - for (j=0; jtiles[j]) & 0xf000; - if (!sub_805729C(behaviorAt) && !sub_80572B0(behaviorAt)) - { - return FALSE; - } - if (!sub_80FFB94(taskId, curX, curY, behaviorBy)) - { - return FALSE; - } - behaviorAt = GetFieldObjectIdByXYZ(curX, curY, 0); - if (behaviorAt != 0 && behaviorAt != 16) - { - return FALSE; - } - } - break; - case DECORPERM_NA_WALL: - for (i=0; ishape == DECORSHAPE_1x2) - { - if (!sub_80572EC(behaviorAt)) - { - return FALSE; - } - } - else if (!sub_80572D8(behaviorAt)) - { - if (!sub_80572EC(behaviorAt)) - { - return FALSE; - } - } - if (GetFieldObjectIdByXYZ(curX, curY, 0) != 16) - { - return FALSE; - } - } - break; - } - return TRUE; -} -#else -__attribute__((naked)) -bool8 sub_80FFC24(u8 taskId, const struct Decoration *decoration) -{ - asm(".syntax unified\n" - "\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x24\n" - "\tstr r1, [sp]\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tmov r10, r0\n" - "\tldr r1, _080FFC60 @ =gTasks\n" - "\tlsls r0, 2\n" - "\tadd r0, r10\n" - "\tlsls r0, 3\n" - "\tadds r0, r1\n" - "\tldrb r2, [r0, 0x14]\n" - "\tstr r2, [sp, 0x4]\n" - "\tldrb r0, [r0, 0x12]\n" - "\tstr r0, [sp, 0x8]\n" - "\tldr r3, [sp]\n" - "\tldrb r0, [r3, 0x11]\n" - "\tadds r2, r1, 0\n" - "\tcmp r0, 0x4\n" - "\tbls _080FFC56\n" - "\tb _08100024\n" - "_080FFC56:\n" - "\tlsls r0, 2\n" - "\tldr r1, _080FFC64 @ =_080FFC68\n" - "\tadds r0, r1\n" - "\tldr r0, [r0]\n" - "\tmov pc, r0\n" - "\t.align 2, 0\n" - "_080FFC60: .4byte gTasks\n" - "_080FFC64: .4byte _080FFC68\n" - "\t.align 2, 0\n" - "_080FFC68:\n" - "\t.4byte _080FFC7C\n" - "\t.4byte _080FFC7C\n" - "\t.4byte _080FFD68\n" - "\t.4byte _080FFF1C\n" - "\t.4byte _080FFFA0\n" - "_080FFC7C:\n" - "\tmovs r6, 0\n" - "\tldr r0, [sp, 0x4]\n" - "\tcmp r6, r0\n" - "\tbcc _080FFC86\n" - "\tb _08100024\n" - "_080FFC86:\n" - "\tmov r1, r10\n" - "\tlsls r1, 2\n" - "\tstr r1, [sp, 0x1C]\n" - "_080FFC8C:\n" - "\tmov r2, r10\n" - "\tlsls r0, r2, 2\n" - "\tadd r0, r10\n" - "\tlsls r0, 3\n" - "\tldr r3, _080FFD64 @ =gTasks\n" - "\tadds r0, r3\n" - "\tldrh r0, [r0, 0xA]\n" - "\tsubs r0, r6\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tmov r9, r0\n" - "\tmovs r7, 0\n" - "\tadds r6, 0x1\n" - "\tstr r6, [sp, 0x14]\n" - "\tldr r0, [sp, 0x8]\n" - "\tcmp r7, r0\n" - "\tbcs _080FFD56\n" - "\tmov r1, r9\n" - "\tlsls r1, 16\n" - "\tstr r1, [sp, 0xC]\n" - "\tasrs r1, 16\n" - "\tmov r9, r1\n" - "_080FFCB8:\n" - "\tldr r0, [sp, 0x1C]\n" - "\tadd r0, r10\n" - "\tlsls r0, 3\n" - "\tldr r2, _080FFD64 @ =gTasks\n" - "\tadds r0, r2\n" - "\tldrh r0, [r0, 0x8]\n" - "\tadds r0, r7\n" - "\tlsls r0, 16\n" - "\tmov r8, r0\n" - "\tasrs r6, r0, 16\n" - "\tadds r0, r6, 0\n" - "\tmov r1, r9\n" - "\tbl MapGridGetMetatileBehaviorAt\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tldr r3, [sp, 0x4]\n" - "\tldr r1, [sp, 0x14]\n" - "\tsubs r0, r3, r1\n" - "\tldr r2, [sp, 0x8]\n" - "\tadds r1, r0, 0\n" - "\tmuls r1, r2\n" - "\tadds r1, r7\n" - "\tldr r3, [sp]\n" - "\tldr r0, [r3, 0x1C]\n" - "\tlsls r1, 1\n" - "\tadds r1, r0\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 2\n" - "\tadds r0, r2, 0\n" - "\tldrh r1, [r1]\n" - "\tadds r0, r1\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tbl GetBehaviorByMetatileId\n" - "\tmovs r3, 0xF0\n" - "\tlsls r3, 8\n" - "\tadds r1, r3, 0\n" - "\tadds r5, r1, 0\n" - "\tands r5, r0\n" - "\tadds r0, r4, 0\n" - "\tldr r1, [sp]\n" - "\tbl sub_80FFBDC\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _080FFD1A\n" - "\tb _080FFFF4\n" - "_080FFD1A:\n" - "\tmov r0, r10\n" - "\tadds r1, r6, 0\n" - "\tmov r2, r9\n" - "\tadds r3, r5, 0\n" - "\tbl sub_80FFB94\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _080FFD2E\n" - "\tb _080FFFF4\n" - "_080FFD2E:\n" - "\tmov r1, r8\n" - "\tlsrs r0, r1, 16\n" - "\tldr r2, [sp, 0xC]\n" - "\tlsrs r1, r2, 16\n" - "\tmovs r2, 0\n" - "\tbl GetFieldObjectIdByXYZ\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tcmp r4, 0\n" - "\tbeq _080FFD4A\n" - "\tcmp r4, 0x10\n" - "\tbeq _080FFD4A\n" - "\tb _080FFFF4\n" - "_080FFD4A:\n" - "\tadds r0, r7, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r7, r0, 24\n" - "\tldr r3, [sp, 0x8]\n" - "\tcmp r7, r3\n" - "\tbcc _080FFCB8\n" - "_080FFD56:\n" - "\tldr r1, [sp, 0x14]\n" - "\tlsls r0, r1, 24\n" - "\tlsrs r6, r0, 24\n" - "\tldr r2, [sp, 0x4]\n" - "\tcmp r6, r2\n" - "\tbcc _080FFC8C\n" - "\tb _08100024\n" - "\t.align 2, 0\n" - "_080FFD64: .4byte gTasks\n" - "_080FFD68:\n" - "\tmovs r6, 0\n" - "\tmov r3, r10\n" - "\tlsls r3, 2\n" - "\tstr r3, [sp, 0x1C]\n" - "\tldr r0, [sp, 0x4]\n" - "\tsubs r0, 0x1\n" - "\tstr r0, [sp, 0x18]\n" - "\tcmp r6, r0\n" - "\tbge _080FFE54\n" - "\tadds r0, r3, 0\n" - "\tadd r0, r10\n" - "\tlsls r0, 3\n" - "\tstr r0, [sp, 0x10]\n" - "_080FFD82:\n" - "\tldr r1, [sp, 0x10]\n" - "\tadds r0, r1, r2\n" - "\tldrh r0, [r0, 0xA]\n" - "\tsubs r0, r6\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tmov r9, r0\n" - "\tmovs r7, 0\n" - "\tadds r6, 0x1\n" - "\tstr r6, [sp, 0x14]\n" - "\tldr r3, [sp, 0x8]\n" - "\tcmp r7, r3\n" - "\tbcs _080FFE48\n" - "\tlsls r0, 16\n" - "\tstr r0, [sp, 0x20]\n" - "_080FFDA0:\n" - "\tldr r1, [sp, 0x10]\n" - "\tadds r0, r1, r2\n" - "\tldrh r0, [r0, 0x8]\n" - "\tadds r0, r7\n" - "\tlsls r0, 16\n" - "\tmov r8, r0\n" - "\tasrs r6, r0, 16\n" - "\tmov r2, r9\n" - "\tlsls r1, r2, 16\n" - "\tadds r0, r6, 0\n" - "\tasrs r1, 16\n" - "\tbl MapGridGetMetatileBehaviorAt\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tldr r3, [sp, 0x4]\n" - "\tldr r1, [sp, 0x14]\n" - "\tsubs r0, r3, r1\n" - "\tldr r2, [sp, 0x8]\n" - "\tadds r1, r0, 0\n" - "\tmuls r1, r2\n" - "\tadds r1, r7\n" - "\tldr r3, [sp]\n" - "\tldr r0, [r3, 0x1C]\n" - "\tlsls r1, 1\n" - "\tadds r1, r0\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 2\n" - "\tadds r0, r2, 0\n" - "\tldrh r1, [r1]\n" - "\tadds r0, r1\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tbl GetBehaviorByMetatileId\n" - "\tmovs r3, 0xF0\n" - "\tlsls r3, 8\n" - "\tadds r1, r3, 0\n" - "\tadds r5, r1, 0\n" - "\tands r5, r0\n" - "\tadds r0, r4, 0\n" - "\tbl sub_805729C\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _080FFE0C\n" - "\tadds r0, r4, 0\n" - "\tadds r1, r5, 0\n" - "\tbl sub_80FFB6C\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _080FFE0C\n" - "\tb _080FFFF4\n" - "_080FFE0C:\n" - "\tmov r0, r10\n" - "\tadds r1, r6, 0\n" - "\tldr r3, [sp, 0x20]\n" - "\tasrs r2, r3, 16\n" - "\tadds r3, r5, 0\n" - "\tbl sub_80FFB94\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _080FFE22\n" - "\tb _080FFFF4\n" - "_080FFE22:\n" - "\tmov r1, r8\n" - "\tlsrs r0, r1, 16\n" - "\tldr r2, [sp, 0x20]\n" - "\tlsrs r1, r2, 16\n" - "\tmovs r2, 0\n" - "\tbl GetFieldObjectIdByXYZ\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x10\n" - "\tbeq _080FFE3A\n" - "\tb _080FFFF4\n" - "_080FFE3A:\n" - "\tadds r0, r7, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r7, r0, 24\n" - "\tldr r2, _080FFF18 @ =gTasks\n" - "\tldr r3, [sp, 0x8]\n" - "\tcmp r7, r3\n" - "\tbcc _080FFDA0\n" - "_080FFE48:\n" - "\tldr r1, [sp, 0x14]\n" - "\tlsls r0, r1, 24\n" - "\tlsrs r6, r0, 24\n" - "\tldr r3, [sp, 0x18]\n" - "\tcmp r6, r3\n" - "\tblt _080FFD82\n" - "_080FFE54:\n" - "\tldr r0, [sp, 0x1C]\n" - "\tadd r0, r10\n" - "\tlsls r0, 3\n" - "\tadds r0, r2\n" - "\tldrh r0, [r0, 0xA]\n" - "\tldr r1, [sp, 0x4]\n" - "\tsubs r0, r1\n" - "\tadds r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tmov r9, r0\n" - "\tmovs r7, 0\n" - "\tldr r3, [sp, 0x8]\n" - "\tcmp r7, r3\n" - "\tbcc _080FFE74\n" - "\tb _08100024\n" - "_080FFE74:\n" - "\tlsls r0, 16\n" - "\tstr r0, [sp, 0x20]\n" - "_080FFE78:\n" - "\tldr r0, [sp, 0x1C]\n" - "\tadd r0, r10\n" - "\tlsls r0, 3\n" - "\tldr r1, _080FFF18 @ =gTasks\n" - "\tadds r0, r1\n" - "\tldrh r0, [r0, 0x8]\n" - "\tadds r0, r7\n" - "\tlsls r0, 16\n" - "\tmov r8, r0\n" - "\tasrs r6, r0, 16\n" - "\tmov r2, r9\n" - "\tlsls r1, r2, 16\n" - "\tadds r0, r6, 0\n" - "\tasrs r1, 16\n" - "\tbl MapGridGetMetatileBehaviorAt\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tldr r3, [sp]\n" - "\tldr r0, [r3, 0x1C]\n" - "\tlsls r1, r7, 1\n" - "\tadds r1, r0\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 2\n" - "\tadds r0, r2, 0\n" - "\tldrh r1, [r1]\n" - "\tadds r0, r1\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tbl GetBehaviorByMetatileId\n" - "\tmovs r3, 0xF0\n" - "\tlsls r3, 8\n" - "\tadds r1, r3, 0\n" - "\tadds r5, r1, 0\n" - "\tands r5, r0\n" - "\tadds r0, r4, 0\n" - "\tbl sub_805729C\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _080FFEDA\n" - "\tadds r0, r4, 0\n" - "\tbl sub_80572B0\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _080FFEDA\n" - "\tb _080FFFF4\n" - "_080FFEDA:\n" - "\tmov r0, r10\n" - "\tadds r1, r6, 0\n" - "\tldr r3, [sp, 0x20]\n" - "\tasrs r2, r3, 16\n" - "\tadds r3, r5, 0\n" - "\tbl sub_80FFB94\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _080FFEF0\n" - "\tb _080FFFF4\n" - "_080FFEF0:\n" - "\tmov r1, r8\n" - "\tlsrs r0, r1, 16\n" - "\tldr r2, [sp, 0x20]\n" - "\tlsrs r1, r2, 16\n" - "\tmovs r2, 0\n" - "\tbl GetFieldObjectIdByXYZ\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tcmp r4, 0\n" - "\tbeq _080FFF0A\n" - "\tcmp r4, 0x10\n" - "\tbne _080FFFF4\n" - "_080FFF0A:\n" - "\tadds r0, r7, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r7, r0, 24\n" - "\tldr r3, [sp, 0x8]\n" - "\tcmp r7, r3\n" - "\tbcc _080FFE78\n" - "\tb _08100024\n" - "\t.align 2, 0\n" - "_080FFF18: .4byte gTasks\n" - "_080FFF1C:\n" - "\tmovs r6, 0\n" - "\tldr r0, [sp, 0x4]\n" - "\tcmp r6, r0\n" - "\tbcc _080FFF26\n" - "\tb _08100024\n" - "_080FFF26:\n" - "\tmov r1, r10\n" - "\tlsls r0, r1, 2\n" - "\tadd r0, r10\n" - "\tlsls r1, r0, 3\n" - "\tldr r2, _080FFF9C @ =gTasks\n" - "\tadds r0, r1, r2\n" - "\tldrh r0, [r0, 0xA]\n" - "\tsubs r0, r6\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tmov r9, r0\n" - "\tmovs r7, 0\n" - "\tldr r3, [sp, 0x8]\n" - "\tcmp r7, r3\n" - "\tbcs _080FFF8C\n" - "\tadds r0, r2, 0\n" - "\tadds r1, r0\n" - "\tmov r8, r1\n" - "\tmov r1, r9\n" - "\tlsls r0, r1, 16\n" - "\tasrs r5, r0, 16\n" - "_080FFF50:\n" - "\tmov r2, r8\n" - "\tldrh r0, [r2, 0x8]\n" - "\tadds r0, r7\n" - "\tlsls r0, 16\n" - "\tasrs r4, r0, 16\n" - "\tadds r0, r4, 0\n" - "\tadds r1, r5, 0\n" - "\tbl MapGridGetMetatileBehaviorAt\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tbl sub_80572B0\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _080FFFF4\n" - "\tadds r0, r4, 0\n" - "\tadds r1, r5, 0x1\n" - "\tbl MapGridGetMetatileIdAt\n" - "\tmovs r1, 0xA3\n" - "\tlsls r1, 2\n" - "\tcmp r0, r1\n" - "\tbeq _080FFFF4\n" - "\tadds r0, r7, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r7, r0, 24\n" - "\tldr r3, [sp, 0x8]\n" - "\tcmp r7, r3\n" - "\tbcc _080FFF50\n" - "_080FFF8C:\n" - "\tadds r0, r6, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tldr r0, [sp, 0x4]\n" - "\tcmp r6, r0\n" - "\tbcc _080FFF26\n" - "\tb _08100024\n" - "\t.align 2, 0\n" - "_080FFF9C: .4byte gTasks\n" - "_080FFFA0:\n" - "\tmov r3, r10\n" - "\tlsls r1, r3, 2\n" - "\tadds r0, r1, r3\n" - "\tlsls r0, 3\n" - "\tadds r0, r2\n" - "\tldrh r0, [r0, 0xA]\n" - "\tmov r9, r0\n" - "\tmovs r7, 0\n" - "\tstr r1, [sp, 0x1C]\n" - "\tldr r0, [sp, 0x8]\n" - "\tcmp r7, r0\n" - "\tbcs _08100024\n" - "\tadds r6, r2, 0\n" - "\tmov r1, r9\n" - "\tlsls r1, 16\n" - "\tstr r1, [sp, 0x20]\n" - "_080FFFC0:\n" - "\tldr r0, [sp, 0x1C]\n" - "\tadd r0, r10\n" - "\tlsls r0, 3\n" - "\tadds r0, r6\n" - "\tldrh r0, [r0, 0x8]\n" - "\tadds r0, r7\n" - "\tlsls r0, 16\n" - "\tlsrs r5, r0, 16\n" - "\tasrs r0, 16\n" - "\tmov r2, r9\n" - "\tlsls r1, r2, 16\n" - "\tasrs r1, 16\n" - "\tbl MapGridGetMetatileBehaviorAt\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tldr r3, [sp]\n" - "\tldrb r0, [r3, 0x12]\n" - "\tcmp r0, 0x5\n" - "\tbne _080FFFF8\n" - "_080FFFE8:\n" - "\tadds r0, r4, 0\n" - "\tbl sub_80572EC\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _08100004\n" - "_080FFFF4:\n" - "\tmovs r0, 0\n" - "\tb _08100026\n" - "_080FFFF8:\n" - "\tadds r0, r4, 0\n" - "\tbl sub_80572D8\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _080FFFE8\n" - "_08100004:\n" - "\tadds r0, r5, 0\n" - "\tldr r2, [sp, 0x20]\n" - "\tlsrs r1, r2, 16\n" - "\tmovs r2, 0\n" - "\tbl GetFieldObjectIdByXYZ\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x10\n" - "\tbne _080FFFF4\n" - "\tadds r0, r7, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r7, r0, 24\n" - "\tldr r3, [sp, 0x8]\n" - "\tcmp r7, r3\n" - "\tbcc _080FFFC0\n" - "_08100024:\n" - "\tmovs r0, 0x1\n" - "_08100026:\n" - "\tadd sp, 0x24\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\n" - ".syntax divided\n"); -} -#endif - -void sub_8100038(u8 taskId) -{ - if (sub_80FFC24(taskId, &gDecorations[gUnknown_020388D0[gUnknown_020388F5]]) == 1) - { - DisplayItemMessageOnField(taskId, gSecretBaseText_PlaceItHere, sub_81000A0, 0); - } else - { - PlaySE(SE_HAZURE); - DisplayItemMessageOnField(taskId, gSecretBaseText_CantBePlacedHere, sub_81006A8, 0); - } -} - -void sub_81000A0(u8 taskId) -{ - DisplayYesNoMenu(20, 8, 1); - DoYesNoFuncWithChoice(taskId, &gUnknown_083EC95C); -} - -void sub_81000C4(u8 taskId) -{ - MenuZeroFillWindowRect(0, 0, 29, 19); - sub_8100174(taskId); - if (gDecorations[gUnknown_020388D0[gUnknown_020388F5]].permission != DECORPERM_SOLID_MAT) - { - sub_80FF394(gTasks[taskId].data[0], gTasks[taskId].data[1], gUnknown_020388D0[gUnknown_020388F5]); - } else - { - gUnknown_020391A4 = gTasks[taskId].data[0] - 7; - gUnknown_020391A6 = gTasks[taskId].data[1] - 7; - ScriptContext1_SetupScript(gUnknown_081A2F7B); - } - gSprites[gUnknown_020391A8].pos1.y += 2; - sub_810028C(taskId); -} - -void sub_8100174(u8 taskId) -{ - u16 i; - for (i=0; i= gMapHeader.mapData->height) - { - data[1]--; - return FALSE; - } else if (gUnknown_020391AA == DIR_WEST && data[0] - 7 < 0) - { - data[0]++; - return FALSE; - } else if (gUnknown_020391AA == DIR_EAST && data[0] + data[5] - 8 >= gMapHeader.mapData->width) - { - data[0]--; - return FALSE; - } - return TRUE; -} - -bool8 sub_8100430(void) -{ - if ((gMain.heldKeys & DPAD_ANY) != DPAD_UP && (gMain.heldKeys & DPAD_ANY) != DPAD_DOWN && (gMain.heldKeys & DPAD_ANY) != DPAD_LEFT && (gMain.heldKeys & DPAD_ANY) != DPAD_RIGHT) - { - return FALSE; - } - return TRUE; -} - -void sub_810045C(void) -{ - gUnknown_020391AA = 0; - gSprites[gUnknown_020391A8].data2 = 0; - gSprites[gUnknown_020391A8].data3 = 0; -} - -void sub_8100494(u8 taskId) -{ - if (!gSprites[gUnknown_020391A8].data4) - { - if (gTasks[taskId].data[10] == 1) - { - gUnknown_083EC96C[gTasks[taskId].data[12]].yesFunc(taskId); - return; - } else if (gTasks[taskId].data[10] == 2) - { - gUnknown_083EC96C[gTasks[taskId].data[12]].noFunc(taskId); - return; - } - if ((gMain.heldKeys & DPAD_ANY) == DPAD_UP) - { - gUnknown_020391AA = DIR_SOUTH; - gSprites[gUnknown_020391A8].data2 = 0; - gSprites[gUnknown_020391A8].data3 = -2; - gTasks[taskId].data[1]--; - } - if ((gMain.heldKeys & DPAD_ANY) == DPAD_DOWN) - { - gUnknown_020391AA = DIR_NORTH; - gSprites[gUnknown_020391A8].data2 = 0; - gSprites[gUnknown_020391A8].data3 = 2; - gTasks[taskId].data[1]++; - } - if ((gMain.heldKeys & DPAD_ANY) == DPAD_LEFT) - { - gUnknown_020391AA = DIR_WEST; - gSprites[gUnknown_020391A8].data2 = -2; - gSprites[gUnknown_020391A8].data3 = 0; - gTasks[taskId].data[0]--; - } - if ((gMain.heldKeys & DPAD_ANY) == DPAD_RIGHT) - { - gUnknown_020391AA = DIR_EAST; - gSprites[gUnknown_020391A8].data2 = 2; - gSprites[gUnknown_020391A8].data3 = 0; - gTasks[taskId].data[0]++; - } - if (!sub_8100430() || !sub_810038C(taskId)) - { - sub_810045C(); - } - } - if (gUnknown_020391AA) - { - gSprites[gUnknown_020391A8].data4++; - gSprites[gUnknown_020391A8].data4 &= 7; - } - if (!gTasks[taskId].data[10]) - { - if (gMain.newKeys & A_BUTTON) - { - gTasks[taskId].data[10] = A_BUTTON; - } - if (gMain.newKeys & B_BUTTON) - { - gTasks[taskId].data[10] = B_BUTTON; - } - } -} - -void sub_810065C(u8 taskId) -{ - MenuZeroFillWindowRect(0, 0, 29, 19); - gSprites[gUnknown_020391A8].data7 = 0; - gTasks[taskId].data[10] = 0; - gTasks[taskId].func = sub_8100494; -} - -void sub_81006A8(u8 taskId) -{ - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) - { - sub_810065C(taskId); - } -} - -void sub_81006D0(struct UnkStruct_02038900 *unk_02038900) -{ - u16 i; - for (i=0; i<0x800; i++) - { - unk_02038900->image[i] = 0; - } - for (i=0; i<0x40; i++) - { - unk_02038900->tiles[i] = 0; - } -} - -void sub_810070C(u16 *a0, u16 a1) -{ - u16 i; - for (i=0; i<16; i++) - { - a0[i] = ((u16 *)gMapHeader.mapData->primaryTileset->palettes)[16 * a1 + i]; - } -} - -void sub_8100740(u8 *dest, u16 flags) -{ - u8 buffer[32]; - u16 mode; - u16 i; - mode = flags >> 10; - if (flags != 0) - { - flags &= 0x3ff; - } - for (i=0; i<32; i++) - { - buffer[i] = ((u8 *)gMapHeader.mapData->primaryTileset->tiles)[flags * 32 + i]; - } - switch (mode) - { - case 0: - for (i=0; i<32; i++) - { - dest[i] = buffer[i]; - } - break; - case 1: - for (i=0; i<8; i++) - { - dest[4*i] = (buffer[4*(i+1) - 1] >> 4) + ((buffer[4*(i+1) - 1] & 0xf) << 4); - dest[4*i + 1] = (buffer[4*(i+1) - 2] >> 4) + ((buffer[4*(i+1) - 2] & 0xf) << 4); - dest[4*i + 2] = (buffer[4*(i+1) - 3] >> 4) + ((buffer[4*(i+1) - 3] & 0xf) << 4); - dest[4*i + 3] = (buffer[4*(i+1) - 4] >> 4) + ((buffer[4*(i+1) - 4] & 0xf) << 4); - } - break; - case 2: - for (i=0; i<8; i++) - { - dest[4*i] = buffer[4*(7-i)]; - dest[4*i + 1] = buffer[4*(7-i) + 1]; - dest[4*i + 2] = buffer[4*(7-i) + 2]; - dest[4*i + 3] = buffer[4*(7-i) + 3]; - } - break; - case 3: - for (i=0; i<32; i++) - { - dest[i] = (buffer[31-i] >> 4) + ((buffer[31-i] & 0xf) << 4); - } - break; - } -} - -void sub_8100874(struct UnkStruct_02038900 *unk_02038900) -{ - u16 i; - for (i=0; i<0x40; i++) - sub_8100740(&unk_02038900->image[i * 32], unk_02038900->tiles[i]); -} - -u16 sub_810089C(u16 a0) -{ - return ((u16 *)gMapHeader.mapData->secondaryTileset->metatiles)[a0] & 0xfff; -} - -void sub_81008BC(struct UnkStruct_02038900 *unk_02038900) -{ - u8 i; - u8 shape; - shape = unk_02038900->decoration->shape; - for (i=0; itiles[gUnknown_083EC860[shape].tiles[i]] = sub_810089C(unk_02038900->decoration->tiles[gUnknown_083EC860[shape].y[i]] * 8 + gUnknown_083EC860[shape].x[i]); - } -} - -void sub_8100930(u8 decoShape) -{ - gUnknown_020391AC.y = 0; - gUnknown_020391AC.affineMode = 0; - gUnknown_020391AC.objMode = 0; - gUnknown_020391AC.mosaic = 0; - gUnknown_020391AC.bpp = 0; - gUnknown_020391AC.shape = gUnknown_083EC900[decoShape].shape; - gUnknown_020391AC.x = 0; - gUnknown_020391AC.matrixNum = 0; - gUnknown_020391AC.size = gUnknown_083EC900[decoShape].size; - gUnknown_020391AC.tileNum = 0; - gUnknown_020391AC.priority = 1; - gUnknown_020391AC.paletteNum = 0; -} - -void sub_81009A8(struct Sprite *sprite) -{ - sprite->data2 = 0; - sprite->data3 = 0; - sprite->data4 = 0; - sprite->data5 = 0; - sprite->data6 = 0; - sprite->data7 = 0; - sprite->callback = sub_81009C0; -} - -void sub_81009C0(struct Sprite *sprite) -{ - if (sprite->data7 == 0) - { - if (sprite->data6 < 15) - { - sprite->invisible = 0; - } else - { - sprite->invisible = 1; - } - sprite->data6 = (sprite->data6 + 1) & 0x1f; - } else - { - sprite->invisible = 0; - } -} - -void sub_8100A0C(u8 taskId) -{ - if (sub_8100D38(taskId) == 1) - { - fade_screen(1, 0); - gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_8100E70; - } else - { - DisplayItemMessageOnField(taskId, gSecretBaseText_NoDecorInUse, sub_80FE428, 0); - } -} - -void sub_8100A60(u8 a0) -{ - ewram_1f000.items[a0] = 0; - ewram_1f000.pos[a0] = 0; -} - -void sub_8100A7C(void) -{ - u16 i; - gSpecialVar_0x8005 = 0; - gScriptResult = 0; - if (gSpecialVar_0x8004 == gUnknown_02039234) - { - gScriptResult = 1; - } else if (gDecorations[ewram_1f000.items[gUnknown_020391B4[gSpecialVar_0x8004].decorId]].permission == DECORPERM_SOLID_MAT) - { - gSpecialVar_0x8005 = gUnknown_020391B4[gSpecialVar_0x8004].flagId; - sub_8100A60(gUnknown_020391B4[gSpecialVar_0x8004].decorId); - for (i=0; imapObjectCount; i++) - { - if (gMapHeader.events->mapObjects[i].flagId == gSpecialVar_0x8005) - { - gSpecialVar_0x8006 = gMapHeader.events->mapObjects[i].localId; - break; - } - } - } -} - -void sub_8100B20(void) -{ - u8 i; - for (i=0; imapObjectCount; i++) - { - if (gMapHeader.events->mapObjects[i].flagId == gSpecialVar_0x8004) - { - gSpecialVar_0x8005 = gMapHeader.events->mapObjects[i].localId; - break; - } - } -} - -void sub_8100B6C(void) -{ - u8 i; - u8 j; - u8 k; - u8 x; - u8 y; - u8 permission; - for (i=0; i> 4; - y = ewram_1f000.pos[gUnknown_020391B4[i].decorId] & 0xf; - if (permission != DECORPERM_SOLID_MAT) - { - if (ewram_1f000.items[gUnknown_020391B4[i].decorId] == DECOR_SAND_ORNAMENT && MapGridGetMetatileIdAt(x + 7, y + 7) == 0x28c) - { - gUnknown_020391B4[i].height++; - } - for (j=0; jmap)[(x + k) + gMapHeader.mapData->width * (y - j)] | 0x3000); - } - } - sub_8100A60(gUnknown_020391B4[i].decorId); - } - } -} - -void sub_8100C88(u8 taskId) -{ - switch (gTasks[taskId].data[2]) - { - case 0: - sub_8100B6C(); - gTasks[taskId].data[2] = 1; - break; - case 1: - if (!gPaletteFade.active) - { - DrawWholeMapView(); - ScriptContext1_SetupScript(gUnknown_081A2F8A); - MenuZeroFillWindowRect(0, 0, 29, 19); - gTasks[taskId].data[2] = 2; - } - break; - case 2: - ScriptContext2_Enable(); - sub_80FED90(taskId); - pal_fill_black(); - gTasks[taskId].data[2] = 3; - break; - case 3: - if (sub_807D770() == 1) - { - gTasks[taskId].data[13] = -1; - DisplayItemMessageOnField(taskId, gSecretBaseText_DecorReturned, sub_81010F0, 0); - } - break; - } -} - -bool8 sub_8100D38(u8 taskId) -{ - u16 i; - for (i=0; iwidth = 1; - unk_020391B4->height = 1; - } else if (gDecorations[decorIdx].shape == DECORSHAPE_2x1) - { - unk_020391B4->width = 2; - unk_020391B4->height = 1; - } else if (gDecorations[decorIdx].shape == DECORSHAPE_3x1) - { - unk_020391B4->width = 3; - unk_020391B4->height = 1; - } else if (gDecorations[decorIdx].shape == DECORSHAPE_4x2) - { - unk_020391B4->width = 4; - unk_020391B4->height = 2; - } else if (gDecorations[decorIdx].shape == DECORSHAPE_2x2) - { - unk_020391B4->width = 2; - unk_020391B4->height = 2; - } else if (gDecorations[decorIdx].shape == DECORSHAPE_1x2) - { - unk_020391B4->width = 1; - unk_020391B4->height = 2; - } else if (gDecorations[decorIdx].shape == DECORSHAPE_1x3) - { - unk_020391B4->width = 1; - unk_020391B4->height = 3; - } else if (gDecorations[decorIdx].shape == DECORSHAPE_2x4) - { - unk_020391B4->width = 2; - unk_020391B4->height = 4; - } else if (gDecorations[decorIdx].shape == DECORSHAPE_3x3) - { - unk_020391B4->width = 3; - unk_020391B4->height = 3; - } else if (gDecorations[decorIdx].shape == DECORSHAPE_3x2) - { - unk_020391B4->width = 3; - unk_020391B4->height = 2; - } -} - -void sub_8101198(u8 x, u8 y) -{ - gSprites[gUnknown_020391A8].invisible = 1; - gSprites[gUnknown_020391A8].callback = SpriteCallbackDummy; - gSprites[gUnknown_020391A9].pos1.x = 0x88 + x * 16; - gSprites[gUnknown_020391A9].pos1.y = 0x48 + y * 16; -} - -bool8 sub_8101200(u8 taskId, u8 decorIdx, struct UnkStruct_020391B4 *unk_020391B4) -{ - u8 x; - u8 y; - u8 xOff; - u8 yOff; - x = gTasks[taskId].data[0] - 7; - y = gTasks[taskId].data[1] - 7; - xOff = ewram_1f000.pos[decorIdx] >> 4; - yOff = ewram_1f000.pos[decorIdx] & 0xf; - if (ewram_1f000.items[decorIdx] == DECOR_SAND_ORNAMENT && MapGridGetMetatileIdAt(xOff + 7, yOff + 7) == 0x28c) - { - unk_020391B4->height--; - } - if (x >= xOff && x < xOff + unk_020391B4->width && y > yOff - unk_020391B4->height && y <= yOff) - { - sub_8101198(unk_020391B4->width - (x - xOff + 1), yOff - y); - return TRUE; - } - return FALSE; -} - -void sub_81012A0(void) -{ - u8 xOff; - u8 yOff; - u16 i; - xOff = ewram_1f000.pos[gUnknown_020391B4[gUnknown_02039234].decorId] >> 4; - yOff = ewram_1f000.pos[gUnknown_020391B4[gUnknown_02039234].decorId] & 0xf; - for (i=0; i<0x40; i++) - { - if (gSaveBlock1.mapObjectTemplates[i].x == xOff && gSaveBlock1.mapObjectTemplates[i].y == yOff && !FlagGet(gSaveBlock1.mapObjectTemplates[i].flagId)) - { - gUnknown_020391B4[gUnknown_02039234].flagId = gSaveBlock1.mapObjectTemplates[i].flagId; - break; - } - } -} - -bool8 sub_8101340(u8 taskId) -{ - u16 i; - for (i=0; idecorId = i; - sub_81012A0(); - gUnknown_02039234 = 1; - return TRUE; - } - } - } - } - return FALSE; -} - -void sub_81013B8(u8 a0, u8 a1, u8 a2, u8 a3) -{ - u8 i; - u8 xOff; - u8 yOff; - u8 decorIdx; - for (i=0; i> 4; - yOff = ewram_1f000.pos[i] & 0xf; - if (decorIdx != 0 && gDecorations[decorIdx].permission == DECORPERM_SOLID_MAT && a0 <= xOff && a1 <= yOff && a2 >= xOff && a3 >= yOff) - { - gUnknown_020391B4[gUnknown_02039234].decorId = i; - sub_81012A0(); - gUnknown_02039234++; - } - } -} - -#ifdef NONMATCHING -void sub_8101460(u8 taskId) -{ - u8 i; - u8 xOff; - u8 yOff; - gUnknown_02039234 = 0; - if (sub_8101340(taskId) != TRUE) - { - for (i=0; i> 4; - yOff = ewram_1f000.pos[gUnknown_020391B4[0].decorId] & 0xf; - sub_81013B8(xOff, yOff - gUnknown_020391B4[0].height + 1, xOff + gUnknown_020391B4[0].width - 1, yOff); - } - } -} -#else -__attribute__((naked)) -void sub_8101460(u8 taskId) -{ - asm(".syntax unified\n" - "\tpush {r4-r7,lr}\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tldr r4, _081014B8 @ =gUnknown_02039234\n" - "\tmovs r0, 0\n" - "\tstrb r0, [r4]\n" - "\tadds r0, r6, 0\n" - "\tbl sub_8101340\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x1\n" - "\tbeq _08101504\n" - "\tmovs r5, 0\n" - "\tldr r0, _081014BC @ =ewram_1f000\n" - "\tldrb r1, [r0, 0x8]\n" - "\tcmp r5, r1\n" - "\tbcs _081014D2\n" - "\tadds r7, r4, 0\n" - "_08101486:\n" - "\tldr r0, [r0]\n" - "\tadds r0, r5\n" - "\tldrb r1, [r0] @ compiler incorrectly uses r0 for this and the next instruction\n" - "\tcmp r1, 0\n" - "\tbeq _081014C4\n" - "\tldr r4, _081014C0 @ =gUnknown_020391B4\n" - "\tadds r0, r1, 0\n" - "\tadds r1, r4, 0\n" - "\tbl sub_8101118\n" - "\tadds r0, r6, 0\n" - "\tadds r1, r5, 0\n" - "\tadds r2, r4, 0\n" - "\tbl sub_8101200\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x1\n" - "\tbne _081014C4\n" - "\tstrb r5, [r4]\n" - "\tldrb r0, [r7]\n" - "\tadds r0, 0x1\n" - "\tstrb r0, [r7]\n" - "\tb _081014D2\n" - "\t.align 2, 0\n" - "_081014B8: .4byte gUnknown_02039234\n" - "_081014BC: .4byte 0x201f000\n" - "_081014C0: .4byte gUnknown_020391B4\n" - "_081014C4:\n" - "\tadds r0, r5, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tldr r0, _0810150C @ =ewram_1f000\n" - "\tldrb r1, [r0, 0x8]\n" - "\tcmp r5, r1\n" - "\tbcc _08101486\n" - "_081014D2:\n" - "\tldr r0, _08101510 @ =gUnknown_02039234\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbeq _08101504\n" - "\tldr r0, _0810150C @ =ewram_1f000\n" - "\tldr r2, _08101514 @ =gUnknown_020391B4\n" - "\tldrb r1, [r2]\n" - "\tldr r0, [r0, 0x4]\n" - "\tadds r0, r1\n" - "\tldrb r1, [r0]\n" - "\tlsrs r0, r1, 4\n" - "\tmovs r3, 0xF\n" - "\tands r3, r1\n" - "\tldrb r1, [r2, 0x2]\n" - "\tsubs r1, r3, r1\n" - "\tadds r1, 0x1\n" - "\tlsls r1, 24\n" - "\tlsrs r1, 24\n" - "\tldrb r2, [r2, 0x1]\n" - "\tadds r2, r0\n" - "\tsubs r2, 0x1\n" - "\tlsls r2, 24\n" - "\tlsrs r2, 24\n" - "\tbl sub_81013B8\n" - "_08101504:\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0810150C: .4byte 0x201f000\n" - "_08101510: .4byte gUnknown_02039234\n" - "_08101514: .4byte gUnknown_020391B4\n" - ".syntax divided\n"); -} -#endif - -void sub_8101518(u8 taskId) -{ - DisplayYesNoMenu(20, 8, 1); - DoYesNoFuncWithChoice(taskId, &gUnknown_083EC9CC); -} - -void sub_810153C(u8 taskId) -{ - fade_screen(1, 0); - gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_8100C88; -} - -void sub_810156C(u8 taskId) -{ - DisplayYesNoMenu(20, 8, 1); - DoYesNoFuncWithChoice(taskId, &gUnknown_083EC9D4); -} - -void sub_8101590(u8 taskId) -{ - MenuZeroFillWindowRect(0, 0, 29, 19); - sub_81015B0(taskId); -} - -void sub_81015B0(u8 taskId) -{ - fade_screen(1, 0); - gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_81015E0; -} - -void sub_81015E0(u8 taskId) -{ - switch (gTasks[taskId].data[2]) - { - case 0: - if (!gPaletteFade.active) - { - sub_80FF114(taskId); - gTasks[taskId].data[2] = 1; - } - break; - case 1: - sub_81016F4(); - gFieldCallback = sub_8101678; - SetMainCallback2(c2_exit_to_overworld_2_switch); - DestroyTask(taskId); - break; - } -} - -void sub_8101648(u8 taskId) -{ - if (sub_807D770() == TRUE) - { - gTasks[taskId].func = Task_DecorationPCProcessMenuInput; - } -} - -void sub_8101678(void) -{ - pal_fill_black(); - MenuDisplayMessageBox(); - sub_80FE220(); - CreateTask(sub_8101648, 8); -} - -void sub_8101698(struct Sprite *sprite) -{ - sprite->data0 = (sprite->data0 + 1) & 0x1f; - if (sprite->data0 >= 16) - { - sprite->invisible = TRUE; - } else - { - sprite->invisible = FALSE; - } -} - -void sub_81016C8(void) -{ - if (gSaveBlock2.playerGender == MALE) - { - LoadSpritePalette(&gUnknown_083ECA5C); - } else - { - LoadSpritePalette(&gUnknown_083ECA64); - } -} - -void sub_81016F4(void) -{ - FreeSpritePaletteByTag(8); -} - -void sub_8101700(u8 taskId) -{ - if (!sub_81341D4()) - { - DisplayItemMessageOnField(taskId, gSecretBaseText_NoDecors, sub_80FE428, 0); - } else - { - gTasks[taskId].data[11] = 1; - gUnknown_020388F6 = 0; - sub_80FE5AC(taskId); - } -} - -void sub_8101750(u8 taskId) -{ - if (!sub_81341D4()) - { - DisplayItemMessageOnField(taskId, gSecretBaseText_NoDecors, sub_80FE428, 0); - } else - { - gTasks[taskId].data[11] = 2; - gUnknown_020388F6 = 0; - sub_80FE5AC(taskId); - } -} - -void sub_81017A0(u8 taskId) -{ - sub_80FEF74(); - sub_80FED1C(); - if (sub_80FEFA4() == TRUE) - { - StringCopy(gStringVar1, gDecorations[gUnknown_020388D0[gUnknown_020388F5]].name); - StringExpandPlaceholders(gStringVar4, gSecretBaseText_WillBeDiscarded); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8101824, 0); - } else - { - DisplayItemMessageOnField(taskId, gSecretBaseText_DecorInUse, sub_80FEFF4, 0); - } -} - -void sub_8101824(u8 taskId) -{ - DisplayYesNoMenu(20, 8, 1); - DoYesNoFuncWithChoice(taskId, &gUnknown_083ECAA0); -} - -void sub_8101848(u8 taskId) -{ - MenuZeroFillWindowRect(20, 8, 26, 14); - sub_8109A30(gUnknown_020388D0[gUnknown_020388F5]); - gUnknown_020388D0[gUnknown_020388F5] = DECOR_NONE; - sub_80FF098(taskId); - DisplayItemMessageOnField(taskId, gSecretBaseText_DecorThrownAway, sub_80FEFF4, 0); -} diff --git a/src/decoration_inventory.c b/src/decoration_inventory.c deleted file mode 100644 index 35ba7e228..000000000 --- a/src/decoration_inventory.c +++ /dev/null @@ -1,169 +0,0 @@ -// -// Created by Scott Norton on 6/5/17. -// - -#include "global.h" -#include "sprite.h" -#include "task.h" -#include "decoration.h" -#include "decoration_inventory.h" - -#define DECOR_INV(ptr) {.items = (u8 *)&ptr, .size = sizeof ptr} - -struct DecorationInventory const gDecorationInventories[] = { - DECOR_INV(gSaveBlock1.decorDesk), - DECOR_INV(gSaveBlock1.decorChair), - DECOR_INV(gSaveBlock1.decorPlant), - DECOR_INV(gSaveBlock1.decorOrnament), - DECOR_INV(gSaveBlock1.decorMat), - DECOR_INV(gSaveBlock1.decorPoster), - DECOR_INV(gSaveBlock1.decorDoll), - DECOR_INV(gSaveBlock1.decorCushion) -}; - -void ClearDecorationInventory(u8 invIdx) -{ - u8 i; - for (i=0; i gDecorationInventories[invIdx].items[j])) - { - tmp = gDecorationInventories[invIdx].items[i]; - gDecorationInventories[invIdx].items[i] = gDecorationInventories[invIdx].items[j]; - gDecorationInventories[invIdx].items[j] = tmp; - } - } - } -} - -u8 sub_8134194(u8 invIdx) -{ - u8 i; - u8 count; - count = 0; - for (i=0; iunk1_6 == 0) - { - if (r5->unk0_0 >= (u16)r2) - { - r5->unk0_0 -= r2; - if (r5->unk0_0 == 0) - r5->unk1_6 = 1; - continue; - } - //_080FA290 - r2 -= r5->unk0_0; - r5->unk0_0 = 0; - r5->unk1_6 = 1; - } - //_080FA2A0 - r4 = r5->unk0_0 + r2; - if ((u16)r4 > r5->unk0_7) - { - u32 sp4 = r4 % r5->unk0_7; - r4 = r4 / r5->unk0_7; - - r5->unk1_6 = r4 ^ 1; - if (r5->unk1_6) - r5->unk0_0 = sp4; - else - //_080FA2FA - r5->unk0_0 = r5->unk0_7 - sp4; - } - else - { - //_080FA310 - r5->unk0_0 = r4; - - if (r5->unk0_0 == r5->unk0_7) - r5->unk1_6 = 0; - } - } - sub_80FA46C(gSaveBlock1.easyChatPairs, 5, 0); - } - //_080FA34E -} - -bool8 sub_80FA364(u16 *a) -{ - struct EasyChatPair s = {0}; - u16 i; - - if (!SB1ContainsWords(a)) - { - if (!FlagGet(SYS_POPWORD_INPUT)) - { - FlagSet(SYS_POPWORD_INPUT); - if (!FlagGet(SYS_MIX_RECORD)) - { - gSaveBlock1.easyChatPairs[0].words[0] = a[0]; - gSaveBlock1.easyChatPairs[0].words[1] = a[1]; - return 1; - } - } - - //_080FA3C8 - s.words[0] = a[0]; - s.words[1] = a[1]; - s.unk1_6 = 1; - sub_80FA740(&s); - - for (i = 0; i < 5; i++) - { - if (sub_80FA670(&s, &gSaveBlock1.easyChatPairs[i], 0)) - { - u16 r3 = 4; - - while (r3 > i) - { - gSaveBlock1.easyChatPairs[r3] = gSaveBlock1.easyChatPairs[r3 - 1]; - r3--; - } - gSaveBlock1.easyChatPairs[i] = s; - return (i == 0); - } - //_080FA450 - } - gSaveBlock1.easyChatPairs[4] = s; - } - return 0; -} - -static void sub_80FA46C(struct EasyChatPair *s, u16 b, u8 c) -{ - u16 h; - - for (h = 0; h < b; h++) - { - u16 i; - - for (i = h + 1; i < b; i++) - { - if (sub_80FA670(&s[i], &s[h], c)) - { - struct EasyChatPair temp; - - temp = s[i]; - s[i] = s[h]; - s[h] = temp; - } - } - } -} - -void sub_80FA4E4(void *a, u32 b, u8 unused) -{ - u16 i; - u16 j; - u16 r7; - struct EasyChatPair *src; - struct EasyChatPair *dst; - u16 players = GetLinkPlayerCount(); - - for (i = 0; i < players; i++) - memcpy(&ARRAY_2007800[i * 5], (u8 *)a + i * b, 40); - src = ARRAY_2007800; - dst = ARRAY_2007900; - r7 = 0; - for (i = 0; i < players; i++) - { - for (j = 0; j < 5; j++) - { - s16 foo = sub_80FA828(src, r7); - if (foo < 0) - { - *(dst++) = *src; - r7++; - } - else - { - if (ARRAY_2007900[foo].unk0_0 < src->unk0_0) - { - ARRAY_2007900[foo] = *src; - } - } - src++; - } - } - sub_80FA46C(ARRAY_2007900, r7, 2); - src = ARRAY_2007900; - dst = gSaveBlock1.easyChatPairs; - for (i = 0; i < 5; i++) - *(dst++) = *(src++); -} - -void sub_80FA5BC(void) -{ - struct EasyChatPair *s = &gSaveBlock1.easyChatPairs[gSpecialVar_0x8004]; - - ConvertEasyChatWordsToString(gStringVar1, s->words, 2, 1); -} - -void sub_80FA5E4(void) -{ - u16 result = 0; - - if (gSaveBlock1.easyChatPairs[0].unk0_0 - gSaveBlock1.easyChatPairs[1].unk0_0 < 2) - { - asm("":::"r2"); //Force the compiler to store address of gSaveBlock1 in r3 instead of r2 - if (!gSaveBlock1.easyChatPairs[0].unk1_6 && gSaveBlock1.easyChatPairs[1].unk1_6) - result = 1; - } - gScriptResult = result; -} - -void sub_80FA648(void) -{ - gScriptResult = (gSaveBlock1.easyChatPairs[0].words[0] + gSaveBlock1.easyChatPairs[0].words[1]) & 7; -} - -static bool8 sub_80FA670(struct EasyChatPair *a, struct EasyChatPair *b, u8 c) -{ - switch (c) - { - case 0: - if (a->unk0_0 > b->unk0_0) - return 1; - if (a->unk0_0 < b->unk0_0) - return 0; - if (a->unk0_7 > b->unk0_7) - return 1; - if (a->unk0_7 < b->unk0_7) - return 0; - break; - case 1: - if (a->unk0_7 > b->unk0_7) - return 1; - if (a->unk0_7 < b->unk0_7) - return 0; - if (a->unk0_0 > b->unk0_0) - return 1; - if (a->unk0_0 < b->unk0_0) - return 0; - break; - case 2: - if (a->unk0_0 > b->unk0_0) - return 1; - if (a->unk0_0 < b->unk0_0) - return 0; - if (a->unk0_7 > b->unk0_7) - return 1; - if (a->unk0_7 < b->unk0_7) - return 0; - if (a->unk2 > b->unk2) - return 1; - if (a->unk2 < b->unk2) - return 0; - if (a->words[0] > b->words[0]) - return 1; - if (a->words[0] < b->words[0]) - return 0; - if (a->words[1] > b->words[1]) - return 1; - if (a->words[1] < b->words[1]) - return 0; - return 1; - } - return Random() & 1; -} - -static void sub_80FA740(struct EasyChatPair *s) -{ - u16 r4; - - r4 = Random() % 98; - if (r4 > 50) - { - r4 = Random() % 98; - if (r4 > 80) - r4 = Random() % 98; - } - s->unk0_7 = r4 + 30; - s->unk0_0 = (Random() % (r4 + 1)) + 30; - s->unk2 = Random(); -} - -static bool8 SB1ContainsWords(u16 *a) -{ - u16 i; - - for (i = 0; i < 5; i++) - { - if (IsEasyChatPairEqual(a, gSaveBlock1.easyChatPairs[i].words) != 0) - return TRUE; - } - return FALSE; -} - -static bool8 IsEasyChatPairEqual(u16 *words1, u16 *words2) -{ - u16 i; - - for (i = 0; i < 2; i++) - { - if (*(words1++) != *(words2++)) - return FALSE; - } - return TRUE; -} - -static s16 sub_80FA828(struct EasyChatPair *a, u16 b) -{ - s16 i; - struct EasyChatPair *s = ARRAY_2007900; - - for (i = 0; i < b; i++) - { - if (IsEasyChatPairEqual(a->words, s->words)) - return i; - s++; - } - return -1; -} diff --git a/src/diploma.c b/src/diploma.c deleted file mode 100644 index ba7de58aa..000000000 --- a/src/diploma.c +++ /dev/null @@ -1,139 +0,0 @@ -#include "global.h" -#include "diploma.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "pokedex.h" -#include "rom4.h" -#include "sprite.h" -#include "string_util.h" -#include "strings2.h" -#include "task.h" -#include "text.h" -#include "unknown_task.h" - -static void VBlankCB(void); -static void MainCB2(void); -static void Task_DiplomaFadeIn(u8); -static void Task_DiplomaWaitForKeyPress(u8); -static void Task_DiplomaFadeOut(u8); -static void DisplayDiplomaText(void); - -static const u16 gDiplomaPalettes[][16] = -{ - INCBIN_U16("graphics/misc/diploma_national.gbapal"), - INCBIN_U16("graphics/misc/diploma_hoenn.gbapal"), -}; - -static const u8 gDiplomaTilemap[] = INCBIN_U8("graphics/misc/diploma_map.bin.lz"); -static const u8 gDiplomaTiles[] = INCBIN_U8("graphics/misc/diploma.4bpp.lz"); - -static void VBlankCB(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -void sub_8145D88(void) -{ - u32 savedIme; - - SetVBlankCallback(NULL); - - REG_DISPCNT = 0; - REG_BG3CNT = 0; - REG_BG2CNT = 0; - REG_BG1CNT = 0; - REG_BG0CNT = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - - DmaFill16(3, 0, VRAM, VRAM_SIZE); - DmaFill32(3, 0, OAM, OAM_SIZE); - DmaFill16(3, 0, PLTT, PLTT_SIZE); - - LZ77UnCompVram(gDiplomaTiles, (void *)VRAM); - LZ77UnCompVram(gDiplomaTilemap, (void *)(VRAM + 0x3000)); - - remove_some_task(); - ResetTasks(); - ResetSpriteData(); - ResetPaletteFade(); - FreeAllSpritePalettes(); - LoadPalette(gDiplomaPalettes, 0, 64); - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow(&gWindowConfig_81E6CE4); - DisplayDiplomaText(); - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - - savedIme = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = savedIme; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - - SetVBlankCallback(VBlankCB); - SetMainCallback2(MainCB2); - - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6) | BGCNT_16COLOR | BGCNT_TXT512x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; - - CreateTask(Task_DiplomaFadeIn, 0); -} - -static void MainCB2(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void Task_DiplomaFadeIn(u8 taskId) -{ - if (!gPaletteFade.active) - gTasks[taskId].func = Task_DiplomaWaitForKeyPress; -} - -static void Task_DiplomaWaitForKeyPress(u8 taskId) -{ - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gTasks[taskId].func = Task_DiplomaFadeOut; - } -} - -static void Task_DiplomaFadeOut(u8 taskId) -{ - if (!gPaletteFade.active) - { - DestroyTask(taskId); - SetMainCallback2(sub_80546F0); - } -} - -static void DisplayDiplomaText(void) -{ - if (sub_8090FF4()) - { - REG_BG3HOFS = 256; - StringCopy(gStringVar1, gOtherText_NationalDex); - } - else - { - REG_BG3HOFS = 0; - StringCopy(gStringVar1, gOtherText_HoennDex); - } - MenuPrint(gOtherText_DiplomaCertificationGameFreak, 6, 2); -} \ No newline at end of file diff --git a/src/easy_chat.c b/src/easy_chat.c deleted file mode 100644 index cca8c1355..000000000 --- a/src/easy_chat.c +++ /dev/null @@ -1,442 +0,0 @@ -#include "global.h" -#include "easy_chat.h" -#include "data2.h" -#include "event_data.h" -#include "field_message_box.h" -#include "pokedex.h" -#include "rng.h" -#include "string_util.h" -#include "strings.h" -#include "strings2.h" -#include "text.h" - -static bool8 sub_80EB680(u16 *, u16, u16, u16); -static u16 sub_80EB9D8(void); -static u16 sub_80EB960(void); - -extern void *gEasyChatGroupWords[]; -extern const u8 gEasyChatGroupSizes[]; - -extern u16 gSpecialVar_0x8004; - - -u8 *sub_80EB3FC(u8 *dst, u16 word) -{ - u16 group; - u16 wordIndex; - u8 *src; - u16 i; - - if (sub_80EB37C(word)) - return StringCopy(dst, gOtherText_ThreeQuestions); - - if (word == 0xFFFF) - { - dst[0] = EOS; - return dst; - } - else - { - group = word >> 9; - wordIndex = word & 0x1FF; - switch (group) - { - case EC_GROUP_POKEMON: // 0 - case EC_GROUP_POKEMON_2: // 21 - dst = StringCopy(dst, gSpeciesNames[wordIndex]); - break; - case EC_GROUP_MOVE_1: // 18 - case EC_GROUP_MOVE_2: // 19 - dst = StringCopy(dst, gMoveNames[wordIndex]); - break; - default: - src = gEasyChatGroupWords[group]; - for (i = wordIndex - 1; i != 0xFFFF; i--) - { - while (*src++ != EOS) - ; - } - dst = StringCopy(dst, src); - break; - } - dst[0] = EOS; - return dst; - } -} - -u8 *ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16 arg2, u16 arg3) -{ - u16 i; - u16 n; - - const u16 i1 = arg2 - 1; - - for (i = 0; i < arg3; i++) - { - u16 word; - - for (n = 0; n < i1; n++) - { - dst = sub_80EB3FC(dst, words[0]); - - if (words[0] != 0xFFFF) - { - dst[0] = CHAR_SPACE; - dst++; - } - - words++; - } - - word = words[0]; - words++; - dst = sub_80EB3FC(dst, word); - - dst[0] = CHAR_NEWLINE; - dst++; - } - - dst--; - dst[0] = EOS; - - return dst; -} - -u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3) -{ - u16 i; - u16 n; - - const u16 i1 = arg2 - 1; - - for (i = 0; i < arg3; i++) - { - u16 word; - - for (n = 0; n < i1; n++) - { - dst = sub_80EB3FC(dst, words[0]); - - if (words[0] != 0xFFFF) - { - dst[0] = CHAR_SPACE; - dst++; - } - - words++; - } - - word = words[0]; - words++; - dst = sub_80EB3FC(dst, word); - - // Only difference with ConvertEasyChatWordsToString - dst[0] = (i == 0) ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; - dst++; - } - - dst--; - dst[0] = EOS; - - return dst; -} - - -u16 unref_sub_80EB5E0(u16 arg0) -{ - u8 *chars; - u16 i; - u16 length; - int group, word; - - - if (arg0 == 0xFFFF) - return 0; - - group = arg0 >> 9; - word = arg0 & 0x1FF; - switch (group) - { - case EC_GROUP_POKEMON: // 0 - case EC_GROUP_POKEMON_2: // 21 - chars = (u8 *) gSpeciesNames[word]; - break; - case EC_GROUP_MOVE_1: // 18 - case EC_GROUP_MOVE_2: // 19 - chars = gMoveNames[word]; - break; - default: - chars = gEasyChatGroupWords[group]; - for (i = word - 1; i != 0xFFFF; i--) - { - while (*chars++ != EOS) - ; - } - break; - } - - length = 0; - while (*chars != EOS) - { - chars++; - length++; - } - - return length; -} - -static bool8 sub_80EB680(u16 *arg0, u16 arg1, u16 arg2, u16 arg3) -{ - return FALSE; -} - -void unref_sub_80EB684(u8 arg0, u16 arg1) -{ - u16 *ptr; - u16 c; - - // FIXME: find actual tv shows used - switch (arg0) - { - case 5: - c = 6; - ptr = (u16*)((void *)&gSaveBlock1.tvShows[arg1] + 0x04); - break; - case 7: - c = 2; - ptr = (u16*)((void *)&gSaveBlock1.tvShows[arg1] + 0x1C); - break; - case 8: - c = 1; - ptr = (u16*)((void *)&gSaveBlock1.tvShows[arg1] + 0x02); - break; - default: - return; - } - - c -= 1; - while (c != 0xFFFF) - { - *ptr = -1; - ptr++; - c -= 1; - } -} - -void sub_80EB6FC(u16 *arg0, u16 arg1) -{ - u16 i; - - for (i = arg1 - 1; i != 0xFFFF; i--) - { - *arg0 = 0xFFFF; - arg0++; - } - -} - -u16 sub_80EB72C(u16 group) -{ - u16 local1 = Random() % gEasyChatGroupSizes[group]; - - if (group == EC_GROUP_POKEMON - || group == EC_GROUP_POKEMON_2 - || group == EC_GROUP_MOVE_1 - || group == EC_GROUP_MOVE_2) - { - local1 = ((u16 *) gEasyChatGroupWords[group])[local1]; - } - - return ((group & 0x7F) << 9) | (local1 & 0x1FF); -} - -u16 sub_80EB784(u16 group) -{ - if (!sub_80EAD7C(group)) - return -1; - - if (group != EC_GROUP_POKEMON) - { - if (group == EC_GROUP_TRENDY_SAYING) - return sub_80EB960(); - } - else - { - return sub_80EB9D8(); - } - - return sub_80EB72C(group); -} - -void sub_80EB7C4(void) -{ - u16 *words; - u16 arg1, arg2; - - switch (gSpecialVar_0x8004) - { - case 0: - words = gSaveBlock1.unk2B1C; - arg1 = 2; - arg2 = 2; - break; - case 1: - words = gSaveBlock1.unk2B28; - if (sub_80EB680(gSaveBlock1.unk2B28, 3, 2, 20)) - { - arg1 = 2; - arg2 = 3; - } - else - { - arg1 = 3; - arg2 = 2; - } - break; - case 2: - words = gSaveBlock1.unk2B34; - arg1 = 3; - arg2 = 2; - break; - case 3: - words = gSaveBlock1.unk2B40; - arg1 = 3; - arg2 = 2; - break; - default: - return; - } - - ConvertEasyChatWordsToString(gStringVar4, words, arg1, arg2); - ShowFieldAutoScrollMessage(gStringVar4); -} - -void sub_80EB83C(void) -{ - u16 group, local2; - - if (Random() & 1) - group = EC_GROUP_HOBBIES; - else - group = EC_GROUP_LIFESTYLE; - - local2 = sub_80EB784(group); - sub_80EB3FC(gStringVar2, local2); -} - -u8 sub_80EB868(u8 arg0) -{ - int offset; - int index; - - index = arg0 / 8; - offset = arg0 % 8; - return (gSaveBlock1.unk2D8C[index] >> offset) & 1; -} - -void sub_80EB890(u8 arg0) -{ - int offset; - int index; - - if (arg0 < 33) - { - index = arg0 / 8; - offset = arg0 % 8; - gSaveBlock1.unk2D8C[index] |= 1 << offset; - } -} - -u8 sub_80EB8C0(void) -{ - u8 i, count; - - for (i = 0, count = 0; i < 33; i++) - { - if (sub_80EB868(i)) - count++; - } - return count; -} - -u16 sub_80EB8EC(void) -{ - u16 i; - u16 local1, local2; - - local1 = sub_80EB8C0(); - if (local1 == 33) - return -1; - - local2 = Random() % (33 - local1); - for (i = 0; i < 33; i++) - { - if (sub_80EB868(i) == 0) - { - if (local2 == 0) - { - sub_80EB890(i); - return (i & 0x1FF) | 0x2800; - } - local2--; - } - } - return -1; -} - -static u16 sub_80EB960(void) -{ - u16 i; - u16 local1; - - local1 = sub_80EB8C0(); - if (local1 == 0) - return -1; - - local1 = Random() % local1; - for (i = 0; i < 33; i++) - { - if (sub_80EB868(i)) - { - if (local1 == 0) - return (i & 0x1FF) | 0x2800; - local1--; - } - } - - return -1; -} - -u8 sub_80EB9C8(void) -{ - return IsNationalPokedexEnabled(); -} - -static u16 sub_80EB9D8(void) -{ - u16 *speciesList; - u16 local1; - u16 i; - - local1 = sub_80EAE88(0); - - if (local1 == 0) - return -1; - - local1 = Random() % local1; - speciesList = (u16 *) gEasyChatGroupWords[EC_GROUP_POKEMON]; - for (i = 0; i < gEasyChatGroupSizes[EC_GROUP_POKEMON]; i++) - { - const u16 dexNum = SpeciesToNationalPokedexNum(*speciesList); - const u8 local2 = GetNationalPokedexFlag(dexNum, 0); - - if (local2) - { - if (local1 == 0) - return *speciesList & 0x1FF; - local1--; - } - speciesList++; - } - return -1; -} diff --git a/src/egg_hatch.c b/src/egg_hatch.c deleted file mode 100644 index 32fbe1547..000000000 --- a/src/egg_hatch.c +++ /dev/null @@ -1,52 +0,0 @@ -#include "global.h" -#include "pokemon.h" - -void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { - u16 species; - u32 personality, pokerus; - u8 i, friendship, language, gameMet, markings; - u16 moves[4]; - u32 ivs[6]; - - - species = GetMonData(egg, MON_DATA_SPECIES); - - for (i = 0; i < 4; i++) - { - moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i); - } - - personality = GetMonData(egg, MON_DATA_PERSONALITY); - - for (i = 0; i < 6; i++) - { - ivs[i] = GetMonData(egg, MON_DATA_HP_IV + i); - } - - gameMet = GetMonData(egg, MON_DATA_MET_GAME); - markings = GetMonData(egg, MON_DATA_MARKINGS); - pokerus = GetMonData(egg, MON_DATA_POKERUS); - - CreateMon(temp, species, 5, 32, TRUE, personality, 0, 0); - - for (i = 0; i < 4; i++) - { - SetMonData(temp, MON_DATA_MOVE1 + i, (const u8 *) &moves[i]); - } - - for (i = 0; i < 6; i++) - { - SetMonData(temp, MON_DATA_HP_IV + i, (const u8 *) &ivs[i]); - } - - language = GAME_LANGUAGE; - SetMonData(temp, MON_DATA_LANGUAGE, &language); - SetMonData(temp, MON_DATA_MET_GAME, &gameMet); - SetMonData(temp, MON_DATA_MARKINGS, &markings); - - friendship = 120; - SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship); - SetMonData(temp, MON_DATA_POKERUS, (const u8 *) &pokerus); - - *egg = *temp; -} diff --git a/src/engine/agb_flash.c b/src/engine/agb_flash.c new file mode 100644 index 000000000..340d469a7 --- /dev/null +++ b/src/engine/agb_flash.c @@ -0,0 +1,295 @@ +#include "gba/gba.h" +#include "gba/flash_internal.h" + +static u8 sTimerNum; +static u16 sTimerCount; +static vu16 *sTimerReg; +static u16 sSavedIme; + +u8 gFlashTimeoutFlag; +u8 (*PollFlashStatus)(u8 *); +u16 (*WaitForFlashWrite)(u8 phase, u8 *addr, u8 lastData); +u16 (*ProgramFlashSector)(u16 sectorNum, u8 *src); +const struct FlashType *gFlash; +u16 (*ProgramFlashByte)(u16 sectorNum, u32 offset, u8 data); +u16 gFlashNumRemainingBytes; +u16 (*EraseFlashChip)(); +u16 (*EraseFlashSector)(u16 sectorNum); +const u16 *gFlashMaxTime; + +void SetReadFlash1(u16 *dest); + +void SwitchFlashBank(u8 bankNum) +{ + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xB0); + FLASH_WRITE(0x0000, bankNum); +} + +#define DELAY() \ +do { \ + vu16 i; \ + for (i = 20000; i != 0; i--) \ + ; \ +} while (0) + +u16 ReadFlashId(void) +{ + u16 flashId; + u16 readFlash1Buffer[0x20]; + u8 (*readFlash1)(u8 *); + + SetReadFlash1(readFlash1Buffer); + readFlash1 = (u8 (*)(u8 *))((s32)readFlash1Buffer + 1); + + // Enter ID mode. + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x90); + DELAY(); + + flashId = readFlash1(FLASH_BASE + 1) << 8; + flashId |= readFlash1(FLASH_BASE); + + // Leave ID mode. + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xF0); + FLASH_WRITE(0x5555, 0xF0); + DELAY(); + + return flashId; +} + +void FlashTimerIntr(void) +{ + if (sTimerCount != 0 && --sTimerCount == 0) + gFlashTimeoutFlag = 1; +} + +u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)) +{ + if (timerNum >= 4) + return 1; + + sTimerNum = timerNum; + sTimerReg = ®_TMCNT(sTimerNum); + *intrFunc = FlashTimerIntr; + return 0; +} + +void StartFlashTimer(u8 phase) +{ + const u16 *maxTime = &gFlashMaxTime[phase * 3]; + sSavedIme = REG_IME; + REG_IME = 0; + sTimerReg[1] = 0; + REG_IE |= (INTR_FLAG_TIMER0 << sTimerNum); + gFlashTimeoutFlag = 0; + sTimerCount = *maxTime++; + *sTimerReg++ = *maxTime++; + *sTimerReg-- = *maxTime++; + REG_IF = (INTR_FLAG_TIMER0 << sTimerNum); + REG_IME = 1; +} + +void StopFlashTimer(void) +{ + REG_IME = 0; + *sTimerReg++ = 0; + *sTimerReg-- = 0; + REG_IE &= ~(INTR_FLAG_TIMER0 << sTimerNum); + REG_IME = sSavedIme; +} + +u8 ReadFlash1(u8 *addr) +{ + return *addr; +} + +void SetReadFlash1(u16 *dest) +{ + u16 *src; + u16 i; + + PollFlashStatus = (u8 (*)(u8 *))((s32)dest + 1); + + src = (u16 *)ReadFlash1; + src = (u16 *)((s32)src ^ 1); + + i = ((s32)SetReadFlash1 - (s32)ReadFlash1) >> 1; + + while (i != 0) + { + *dest++ = *src++; + i--; + } +} + +void ReadFlash_Core(u8 *src, u8 *dest, u32 size) +{ + while (size-- != 0) + { + *dest++ = *src++; + } +} + +void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) +{ + u8 *src; + u16 i; + u16 readFlash_Core_Buffer[0x40]; + u16 *funcSrc; + u16 *funcDest; + void (*readFlash_Core)(u8 *, u8 *, u32); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + if (gFlash->romSize == FLASH_ROM_SIZE_1M) + { + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + } + + funcSrc = (u16 *)ReadFlash_Core; + funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcDest = readFlash_Core_Buffer; + + i = ((s32)ReadFlash - (s32)ReadFlash_Core) >> 1; + + while (i != 0) + { + *funcDest++ = *funcSrc++; + i--; + } + + readFlash_Core = (void (*)(u8 *, u8 *, u32))((s32)readFlash_Core_Buffer + 1); + + src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; + + readFlash_Core(src, dest, size); +} + +u32 VerifyFlashSector_Core(u8 *src, u8 *tgt, u32 size) +{ + while (size-- != 0) + { + if (*tgt++ != *src++) + return (u32)(tgt - 1); + } + + return 0; +} + +u32 VerifyFlashSector(u16 sectorNum, u8 *src) +{ + u16 i; + u16 verifyFlashSector_Core_Buffer[0x80]; + u16 *funcSrc; + u16 *funcDest; + u8 *tgt; + u16 size; + u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + if (gFlash->romSize == FLASH_ROM_SIZE_1M) + { + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + } + + funcSrc = (u16 *)VerifyFlashSector_Core; + funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcDest = verifyFlashSector_Core_Buffer; + + i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; + + while (i != 0) + { + *funcDest++ = *funcSrc++; + i--; + } + + verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); + + tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); + size = gFlash->sector.size; + + return verifyFlashSector_Core(src, tgt, size); // return 0 if verified. +} + +u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) +{ + u16 i; + u16 verifyFlashSector_Core_Buffer[0x80]; + u16 *funcSrc; + u16 *funcDest; + u8 *tgt; + u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32); + + if (gFlash->romSize == FLASH_ROM_SIZE_1M) + { + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + } + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + funcSrc = (u16 *)VerifyFlashSector_Core; + funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcDest = verifyFlashSector_Core_Buffer; + + i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; + + while (i != 0) + { + *funcDest++ = *funcSrc++; + i--; + } + + verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); + + tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); + + return verifyFlashSector_Core(src, tgt, n); +} + +u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src) // 3rd is unused +{ + u8 i; + u32 result; + + for (i = 0; i < 3; i++) // 3 attempts + { + result = ProgramFlashSector(sectorNum, src); + if (result != 0) + continue; + + result = VerifyFlashSector(sectorNum, src); + if (result == 0) + break; + } + + return result; // return 0 if verified and programmed. +} + +u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, u8 *src, u32 n) +{ + u8 i; + u32 result; + + for (i = 0; i < 3; i++) + { + result = ProgramFlashSector(sectorNum, src); + if (result != 0) + continue; + + result = VerifyFlashSectorNBytes(sectorNum, src, n); + if (result == 0) + break; + } + + return result; +} diff --git a/src/engine/agb_flash_1m.c b/src/engine/agb_flash_1m.c new file mode 100644 index 000000000..e249fab9a --- /dev/null +++ b/src/engine/agb_flash_1m.c @@ -0,0 +1,86 @@ +#include "gba/gba.h" +#include "gba/flash_internal.h" + +static const char AgbLibFlashVersion[] = "FLASH1M_V103"; + +const struct FlashSetupInfo * const sSetupInfos[] = +{ + &MX29L010, + &LE26FV10N1TS, + &DefaultFlash +}; + +u16 IdentifyFlash(void) +{ + u16 result; + u16 flashId; + const struct FlashSetupInfo * const *setupInfo; + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + flashId = ReadFlashId(); + + setupInfo = sSetupInfos; + result = 1; + + for (;;) + { + if ((*setupInfo)->type.ids.separate.makerId == 0) + break; + + if (flashId == (*setupInfo)->type.ids.joined) + { + result = 0; + break; + } + + setupInfo++; + } + + ProgramFlashByte = (*setupInfo)->programFlashByte; + ProgramFlashSector = (*setupInfo)->programFlashSector; + EraseFlashChip = (*setupInfo)->eraseFlashChip; + EraseFlashSector = (*setupInfo)->eraseFlashSector; + WaitForFlashWrite = (*setupInfo)->WaitForFlashWrite; + gFlashMaxTime = (*setupInfo)->maxTime; + gFlash = &(*setupInfo)->type; + + return result; +} + +u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData) +{ + u16 result = 0; + u8 status; + + StartFlashTimer(phase); + + while ((status = PollFlashStatus(addr)) != lastData) + { + if (status & 0x20) + { + // The write operation exceeded the flash chip's time limit. + + if (PollFlashStatus(addr) == lastData) + break; + + FLASH_WRITE(0x5555, 0xF0); + result = phase | 0xA000u; + break; + } + + if (gFlashTimeoutFlag) + { + if (PollFlashStatus(addr) == lastData) + break; + + FLASH_WRITE(0x5555, 0xF0); + result = phase | 0xC000u; + break; + } + } + + StopFlashTimer(); + + return result; +} diff --git a/src/engine/agb_flash_le.c b/src/engine/agb_flash_le.c new file mode 100644 index 000000000..39d956e27 --- /dev/null +++ b/src/engine/agb_flash_le.c @@ -0,0 +1,31 @@ +#include "gba/gba.h" +#include "gba/flash_internal.h" + +const u16 leMaxTime[] = +{ + 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, +}; + +const struct FlashSetupInfo LE26FV10N1TS = +{ + ProgramFlashByte_MX, + ProgramFlashSector_MX, + EraseFlashChip_MX, + EraseFlashSector_MX, + WaitForFlashWrite_Common, + leMaxTime, + { + 131072, // ROM size + { + 4096, // sector size + 12, // bit shift to multiply by sector size (4096 == 1 << 12) + 32, // number of sectors + 0 // appears to be unused + }, + { 3, 1 }, // wait state setup data + { { 0x62, 0x13 } } // ID + } +}; diff --git a/src/engine/agb_flash_mx.c b/src/engine/agb_flash_mx.c new file mode 100644 index 000000000..67348901f --- /dev/null +++ b/src/engine/agb_flash_mx.c @@ -0,0 +1,197 @@ +#include "gba/gba.h" +#include "gba/flash_internal.h" + +const u16 mxMaxTime[] = +{ + 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, +}; + +const struct FlashSetupInfo MX29L010 = +{ + ProgramFlashByte_MX, + ProgramFlashSector_MX, + EraseFlashChip_MX, + EraseFlashSector_MX, + WaitForFlashWrite_Common, + mxMaxTime, + { + 131072, // ROM size + { + 4096, // sector size + 12, // bit shift to multiply by sector size (4096 == 1 << 12) + 32, // number of sectors + 0 // appears to be unused + }, + { 3, 1 }, // wait state setup data +#if defined(GERMAN) && defined(SAPPHIRE) + { { 0xBF, 0xD4 } } // ID +#else + { { 0xC2, 0x09 } } // ID +#endif + } +}; + +const struct FlashSetupInfo DefaultFlash = +{ + ProgramFlashByte_MX, + ProgramFlashSector_MX, + EraseFlashChip_MX, + EraseFlashSector_MX, + WaitForFlashWrite_Common, + mxMaxTime, + { + 131072, // ROM size + { + 4096, // sector size + 12, // bit shift to multiply by sector size (4096 == 1 << 12) + 32, // number of sectors + 0 // appears to be unused + }, + { 3, 1 }, // wait state setup data + { { 0x00, 0x00 } } // ID of 0 + } +}; + +u16 EraseFlashChip_MX(void) +{ + u16 result; + u16 readFlash1Buffer[0x20]; + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; + + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x80); + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x10); + + SetReadFlash1(readFlash1Buffer); + + result = WaitForFlashWrite(3, FLASH_BASE, 0xFF); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + return result; +} + +u16 EraseFlashSector_MX(u16 sectorNum) +{ + u16 numTries; + u16 result; + u8 *addr; + u16 readFlash1Buffer[0x20]; + + if (sectorNum >= gFlash->sector.count) + return 0x80FF; + + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + + numTries = 0; + +try_erase: + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; + + addr = FLASH_BASE + (sectorNum << gFlash->sector.shift); + + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x80); + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + *addr = 0x30; + + SetReadFlash1(readFlash1Buffer); + + result = WaitForFlashWrite(2, addr, 0xFF); + + if (!(result & 0xA000) || numTries > 3) + goto done; + + numTries++; + + goto try_erase; + +done: + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + return result; +} + +u16 ProgramFlashByte_MX(u16 sectorNum, u32 offset, u8 data) +{ + u8 *addr; + u16 readFlash1Buffer[0x20]; + + if (offset >= gFlash->sector.size) + return 0x8000; + + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + + addr = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; + + SetReadFlash1(readFlash1Buffer); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; + + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xA0); + *addr = data; + + return WaitForFlashWrite(1, addr, data); +} + +static u16 ProgramByte(u8 *src, u8 *dest) +{ + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xA0); + *dest = *src; + + return WaitForFlashWrite(1, dest, *src); +} + +u16 ProgramFlashSector_MX(u16 sectorNum, u8 *src) +{ + u16 result; + u8 *dest; + u16 readFlash1Buffer[0x20]; + + if (sectorNum >= gFlash->sector.count) + return 0x80FF; + + result = EraseFlashSector_MX(sectorNum); + + if (result != 0) + return result; + + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + + SetReadFlash1(readFlash1Buffer); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; + + gFlashNumRemainingBytes = gFlash->sector.size; + dest = FLASH_BASE + (sectorNum << gFlash->sector.shift); + + while (gFlashNumRemainingBytes > 0) + { + result = ProgramByte(src, dest); + + if (result != 0) + break; + + gFlashNumRemainingBytes--; + src++; + dest++; + } + + return result; +} diff --git a/src/engine/blend_palette.c b/src/engine/blend_palette.c new file mode 100644 index 000000000..843c50ac1 --- /dev/null +++ b/src/engine/blend_palette.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "blend_palette.h" +#include "palette.h" + +void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor) +{ + u16 i; + for (i = 0; i < numEntries; i++) + { + u16 index = i + palOffset; + struct PlttData *data1 = (struct PlttData *)&gPlttBufferUnfaded[index]; + s8 r = data1->r; + s8 g = data1->g; + s8 b = data1->b; + struct PlttData *data2 = (struct PlttData *)&blendColor; + gPlttBufferFaded[index] = ((r + (((data2->r - r) * coeff) >> 4)) << 0) + | ((g + (((data2->g - g) * coeff) >> 4)) << 5) + | ((b + (((data2->b - b) * coeff) >> 4)) << 10); + } +} diff --git a/src/engine/cable_club.c b/src/engine/cable_club.c new file mode 100644 index 000000000..20b087f4e --- /dev/null +++ b/src/engine/cable_club.c @@ -0,0 +1,317 @@ +#include "global.h" +#include "cable_club.h" +#include "field_message_box.h" +#include "link.h" +#include "main.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "string_util.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 const u8 gUnknown_081A4975[]; + +static void sub_80830E4(u8 taskId); +static void sub_8083288(u8 taskId); +static void sub_8083314(u8 taskId); + +void sub_808303C(u8 taskId) { + s32 linkPlayerCount; + s16 *taskData; + + taskData = gTasks[taskId].data; + + linkPlayerCount = GetLinkPlayerCount_2(); + + 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(); + ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); // r5 + ShowFieldAutoScrollMessage((u8 *) gUnknown_081A4975); + gTasks[taskId].func = sub_80830E4; +#elif GERMAN + 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); + gTasks[taskId].func = sub_80830E4; + } +#endif +} + +#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)) + { + 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; + } +} +#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 + +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()) + { + gTasks[taskId].func = sub_8083418; + return; + } + + result = &gScriptResult; + *result = sub_8082D9C(local1, local2); + if (*result) + { + 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) == 1 || + sub_8082DF4(taskId) == 1) + { + return; + } + + result = &gScriptResult; + *result = sub_8082D9C(local1, local2); + if (*result == 0) + { + return; + } + + + if (*result == 3) + { + sub_800832C(); + HideFieldMessageBox(); + gTasks[taskId].func = sub_80833C4; + } + else + { + gFieldLinkPlayerCount = GetLinkPlayerCount_2(); + gUnknown_03004860 = GetMultiplayerId(); + sub_80081C8(gFieldLinkPlayerCount); + sub_8093390((struct TrainerCard *) gBlockSendBuffer); + gTasks[taskId].func = sub_8083314; + } +} + +static void sub_8083288(u8 taskId) { + if (sub_8082DF4(taskId) == 1) + { + return; + } + + if (gScriptResult == 3) + { + sub_800832C(); + HideFieldMessageBox(); + gTasks[taskId].func = sub_80833C4; + } + else + { + gFieldLinkPlayerCount = GetLinkPlayerCount_2(); + gUnknown_03004860 = GetMultiplayerId(); + sub_80081C8(gFieldLinkPlayerCount); + sub_8093390((struct TrainerCard *) gBlockSendBuffer); + gTasks[taskId].func = sub_8083314; + sub_8007E9C(2); + } +} + +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; + for (index = 0; index < GetLinkPlayerCount(); index++) + { + void *src; + src = gBlockRecvBuffer[index]; + memcpy(&trainerCards[index], src, sizeof(struct TrainerCard)); + } + + SetSuppressLinkErrorMessage(FALSE); + ResetBlockReceivedFlags(); + HideFieldMessageBox(); + + if (gScriptResult == 1) + { +#if ENGLISH + u16 linkType; + linkType = gLinkType; + // FIXME: sub_8082D4C doesn't take any arguments + sub_8082D4C(0x00004411, linkType); +#elif GERMAN + if (gLinkType != 0x4411) + { + if (gLinkType == 0x6601) + { + deUnkValue2 = 1; + } + } + sub_8082D4C(); +#endif + EnableBothScriptContexts(); + DestroyTask(taskId); + return; + } + + sub_800832C(); + gTasks[taskId].func = sub_80833C4; +} diff --git a/src/engine/clear_save_data_menu.c b/src/engine/clear_save_data_menu.c new file mode 100644 index 000000000..498562fe0 --- /dev/null +++ b/src/engine/clear_save_data_menu.c @@ -0,0 +1,177 @@ +#include "global.h" +#include "clear_save_data_menu.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "save.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "strings2.h" +#include "task.h" + +static void VBlankCB_ClearSaveDataScreen(void); +static void Task_InitMenu(u8); +static void Task_ProcessMenuInput(u8); +static void Task_ClearSaveData(u8); +static void CB2_ClearSaveDataScreen(void); +static void VBlankCB_InitClearSaveDataScreen(void); +static u8 InitClearSaveDataScreen(void); +static void CB2_SoftReset(void); + +void CB2_InitClearSaveDataScreen(void) +{ + if (InitClearSaveDataScreen()) + { + CreateTask(Task_InitMenu, 0); + } +} + +static void VBlankCB_ClearSaveDataScreen(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void Task_InitMenu(u8 taskId) +{ + ResetSpriteData(); + + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; + + SetVBlankCallback(VBlankCB_ClearSaveDataScreen); + MenuDrawTextWindow(2, 14, 27, 19); + MenuPrint(gSystemText_ClearAllSaveDataPrompt, 3, 15); + + MenuDrawTextWindow(2, 1, 8, 6); + PrintMenuItems(3, 2, 2, gMenuYesNoItems); + InitMenu(0, 3, 2, 2, 1, 5); + + gTasks[taskId].func = Task_ProcessMenuInput; +} + +static void Task_ProcessMenuInput(u8 taskId) +{ + switch (ProcessMenuInputNoWrap_()) + { + case 0: + PlaySE(SE_SELECT); + sub_8071F40(gSystemText_ClearingData); + gTasks[taskId].func = Task_ClearSaveData; + break; + case -1: + case 1: + PlaySE(SE_SELECT); + DestroyTask(taskId); + SetMainCallback2(CB2_SoftReset); + break; + } + AnimateSprites(); + BuildOamBuffer(); +} + +static void Task_ClearSaveData(u8 taskId) +{ + ClearSaveData(); + DestroyTask(taskId); + SetMainCallback2(CB2_SoftReset); +} + +static void CB2_ClearSaveDataScreen(void) +{ + RunTasks(); + UpdatePaletteFade(); +} + +static void VBlankCB_InitClearSaveDataScreen(void) +{ + TransferPlttBuffer(); +} + +static u8 InitClearSaveDataScreen(void) +{ + u16 i; + u16 ime; + + switch (gMain.state) + { + case 0: + default: + SetVBlankCallback(NULL); + + REG_DISPCNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WININ = 0; + REG_WINOUT = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + + DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); + DmaFill32(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2); + + ResetPaletteFade(); + + gPlttBufferUnfaded[0] = 0x7fff; + gPlttBufferFaded[0] = 0x7fff; + gPlttBufferUnfaded[1] = 0x3945; + gPlttBufferFaded[1] = 0x3945; + + for (i = 0; i < 0x10; i++) + ((u16 *)(VRAM + 0x20))[i] = 0x1111; + + for (i = 0; i < 0x500; i++) + ((u16 *)(VRAM + 0x3800))[i] = 0x0001; + + ResetTasks(); + ResetSpriteData(); + + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0xffff); + + ime = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = ime; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + + SetVBlankCallback(VBlankCB_InitClearSaveDataScreen); + + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_BG0_ON | DISPCNT_BG3_ON; + gMain.state = 1; + return 0; + case 1: + UpdatePaletteFade(); + if (gPaletteFade.active) + return 0; + SetMainCallback2(CB2_ClearSaveDataScreen); + return 1; + } +} + +static void CB2_SoftReset(void) +{ + switch (gMain.state) + { + case 0: + default: + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0xffff); + gMain.state = 1; + break; + case 1: + UpdatePaletteFade(); + if (gPaletteFade.active) + return; + DoSoftReset(); + break; + } +} diff --git a/src/engine/clock.c b/src/engine/clock.c new file mode 100644 index 000000000..1f2aac9fd --- /dev/null +++ b/src/engine/clock.c @@ -0,0 +1,90 @@ +#include "global.h" +#include "clock.h" +#include "berry.h" +#include "dewford_trend.h" +#include "event_data.h" +#include "field_specials.h" +#include "field_weather.h" +#include "lottery_corner.h" +#include "main.h" +#include "rom4.h" +#include "rtc.h" +#include "time_events.h" +#include "tv.h" +#include "wallclock.h" + +static void InitTimeBasedEvents(void); +static void UpdatePerDay(struct Time *time); +static void UpdatePerMinute(struct Time *time); +static void ReturnFromStartWallClock(void); + +static void InitTimeBasedEvents(void) +{ + FlagSet(SYS_CLOCK_SET); + RtcCalcLocalTime(); + gSaveBlock2.lastBerryTreeUpdate = gLocalTime; + VarSet(VAR_DAYS, gLocalTime.days); +} + +void DoTimeBasedEvents(void) +{ + if (FlagGet(SYS_CLOCK_SET)) + { + RtcCalcLocalTime(); + UpdatePerDay(&gLocalTime); + UpdatePerMinute(&gLocalTime); + } +} + +static void UpdatePerDay(struct Time *time) +{ + u16 *varPtr = GetVarPointer(VAR_DAYS); + int days = *varPtr; + u16 newDays; + + if (days != time->days && days <= time->days) + { + newDays = time->days - days; + ClearUpperFlags(); + UpdateDewfordTrendPerDay(newDays); + UpdateTVShowsPerDay(newDays); + UpdateWeatherPerDay(newDays); + UpdatePartyPokerusTime(newDays); + UpdateMirageRnd(newDays); + UpdateBirchState(newDays); + SetShoalItemFlag(newDays); + SetRandomLotteryNumber(newDays); + *varPtr = time->days; + } +} + +static void UpdatePerMinute(struct Time *time) +{ + struct Time newTime; + s32 minutes; + + CalcTimeDifference(&newTime, &gSaveBlock2.lastBerryTreeUpdate, time); + minutes = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes; + + // there's no way to get the correct assembly other than with this nested if check. so dumb. + if (minutes != 0) + { + if (minutes >= 0) + { + BerryTreeTimeUpdate(minutes); + gSaveBlock2.lastBerryTreeUpdate = *time; + } + } +} + +static void ReturnFromStartWallClock(void) +{ + InitTimeBasedEvents(); + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void StartWallClock(void) +{ + SetMainCallback2(CB2_StartWallClock); + gMain.savedCallback = ReturnFromStartWallClock; +} diff --git a/src/engine/decompress.c b/src/engine/decompress.c new file mode 100644 index 000000000..d7f7087a7 --- /dev/null +++ b/src/engine/decompress.c @@ -0,0 +1,112 @@ +#include "global.h" +#include "decompress.h" +#include "data2.h" +#include "species.h" +#include "text.h" + +#define WRAM 0x02000000 + +void sub_800D238(const void *src, void *dest) +{ + LZ77UnCompWram(src, dest); +} + +void LZDecompressVram(const void *src, void *dest) +{ + LZ77UnCompVram(src, dest); +} + +void LoadCompressedObjectPic(const struct CompressedSpriteSheet *src) +{ + struct SpriteSheet dest; + + LZ77UnCompWram(src->data, (void *)WRAM); + dest.data = (void *)WRAM; + dest.size = src->size; + dest.tag = src->tag; + LoadSpriteSheet(&dest); +} + +void LoadCompressedObjectPicOverrideBuffer(const struct CompressedSpriteSheet *src, void *buffer) +{ + struct SpriteSheet dest; + + LZ77UnCompWram(src->data, buffer); + dest.data = buffer; + dest.size = src->size; + dest.tag = src->tag; + LoadSpriteSheet(&dest); +} + +void LoadCompressedObjectPalette(const struct CompressedSpritePalette *src) +{ + struct SpritePalette dest; + + LZ77UnCompWram(src->data, (void *)WRAM); + dest.data = (void *)WRAM; + dest.tag = src->tag; + LoadSpritePalette(&dest); +} + +void LoadCompressedObjectPaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer) +{ + struct SpritePalette dest; + + LZ77UnCompWram(a->data, buffer); + dest.data = buffer; + dest.tag = a->tag; + LoadSpritePalette(&dest); +} + +void DecompressPicFromTable_2(const struct CompressedSpriteSheet *src, u8 b, u8 c, void *d, void *buffer, s32 species) +{ + if (species > SPECIES_EGG) + LZ77UnCompWram(gMonFrontPicTable[0].data, buffer); + else + LZ77UnCompWram(src->data, buffer); +} + +void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g) +{ + u32 frontOrBack; + + // gUnknown_081FAF4C appears to be a list of pointers to locations to store poke pics for back and front pic here. the first and third pointers are used for back while the others are used for front. + if (dest == gUnknown_081FAF4C[0] || dest == gUnknown_081FAF4C[2]) + frontOrBack = 0; // backPic + else + frontOrBack = 1; // frontPic + + LoadSpecialPokePic(src, b, c, d, dest, species, g, frontOrBack); +} + +void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 b, u32 c, u32 d, void *dest, s32 species, u32 g, u32 frontOrBack) +{ + u8 frontOrBack8 = frontOrBack; + + if (species == SPECIES_UNOWN) + { + u16 i = (((g & 0x3000000) >> 18) | ((g & 0x30000) >> 12) | ((g & 0x300) >> 6) | (g & 3)) % 0x1C; + + // The other Unowns are separate from Unown A. + if (i == 0) + i = SPECIES_UNOWN; + else + i += SPECIES_UNOWN_B - 1; + + if (frontOrBack8 == 0) + LZ77UnCompWram(gMonBackPicTable[i].data, dest); + else + LZ77UnCompWram(gMonFrontPicTable[i].data, dest); + } + else if (species > SPECIES_EGG) // is species unknown? draw the ? icon + LZ77UnCompWram(gMonFrontPicTable[0].data, dest); + else + LZ77UnCompWram(src->data, dest); + + DrawSpindaSpots(species, g, dest, frontOrBack8); +} + +void Unused_LZDecompressWramIndirect(const void **src, void *dest) +{ + LZ77UnCompWram(*src, dest); +} diff --git a/src/engine/libc.c b/src/engine/libc.c new file mode 100644 index 000000000..920673e3e --- /dev/null +++ b/src/engine/libc.c @@ -0,0 +1,143 @@ +#include "global.h" +#include + +#define LBLOCKSIZE (sizeof(long)) + +// Nonzero if (long)X contains a NULL byte. +#define CONTAINSNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) + +// Nonzero if X is not aligned on a "long" boundary. +#define UNALIGNED(X) ((long)X & (LBLOCKSIZE - 1)) + +void *memcpy(void *dst0, const void *src0, size_t len0) +{ + char *dst = dst0; + const char *src = src0; + long *aligned_dst; + const long *aligned_src; + unsigned int len = len0; + + // If the size is small, or either src or dst is unaligned, + // then go to the byte copy loop. This should be rare. + if (len >= 16 && !(UNALIGNED(src) | UNALIGNED(dst))) + { + aligned_dst = (long *)dst; + aligned_src = (long *)src; + + // Copy 4X long words at a time if possible. + while (len >= 16) + { + *aligned_dst++ = *aligned_src++; + *aligned_dst++ = *aligned_src++; + *aligned_dst++ = *aligned_src++; + *aligned_dst++ = *aligned_src++; + len -= 16; + } + + // Copy one long word at a time if possible + while (len >= 4) + { + *aligned_dst++ = *aligned_src++; + len -= 4; + } + + dst = (char *)aligned_dst; + src = (char *)aligned_src; + } + + // Pick up any remaining bytes with a byte copier. + while (len--) + *dst++ = *src++; + + return dst0; +} + +void *memset(void *m, int c, size_t n) +{ + char *s = (char *)m; + int count, i; + unsigned long buffer; + unsigned long *aligned_addr; + unsigned char *unaligned_addr; + + // If the size is small or m is unaligned, + // then go to the byte copy loop. This should be rare. + if (n >= LBLOCKSIZE && !UNALIGNED(m)) + { + // We know that n is large and m is word-aligned. + aligned_addr = (unsigned long *)m; + + // Store C into each char sized location in buffer so that + // we can set large blocks quickly. + c &= 0xFF; + if (LBLOCKSIZE == 4) + { + buffer = (c << 8) | c; + buffer |= (buffer << 16); + } + else + { + buffer = 0; + for (i = 0; i < LBLOCKSIZE; i++) + buffer = (buffer << 8) | c; + } + + while (n >= LBLOCKSIZE * 4) + { + *aligned_addr++ = buffer; + *aligned_addr++ = buffer; + *aligned_addr++ = buffer; + *aligned_addr++ = buffer; + n -= LBLOCKSIZE * 4; + } + while (n >= LBLOCKSIZE) + { + *aligned_addr++ = buffer; + n -= LBLOCKSIZE; + } + + s = (char *)aligned_addr; + } + + // Pick up the remainder with a bytewise loop. + while (n--) + *s++ = (char)c; + + return m; +} + +int strcmp(const char *s1, const char *s2) +{ + unsigned long *a1; + unsigned long *a2; + + // If s1 or s2 are unaligned, then skip this and compare bytes. + if (!(UNALIGNED(s1) | UNALIGNED(s2))) + { + // Compare them a word at a time. + a1 = (unsigned long *)s1; + a2 = (unsigned long *)s2; + while (*a1 == *a2) + { + // If *a1 == *a2, and we find a null in *a1, + // then the strings must be equal, so return zero. + if (CONTAINSNULL(*a1)) + return 0; + + a1++; + a2++; + } + + s1 = (char *)a1; + s2 = (char *)a2; + } + + // Check the remaining few bytes. + while (*s1 != '\0' && *s1 == *s2) + { + s1++; + s2++; + } + + return (*(unsigned char *) s1) - (*(unsigned char *) s2); +} diff --git a/src/engine/link.c b/src/engine/link.c new file mode 100644 index 000000000..5858ad8bf --- /dev/null +++ b/src/engine/link.c @@ -0,0 +1,1820 @@ +#include "global.h" +#include "link.h" +#include "battle.h" +#include "berry.h" +#include "berry_blender.h" +#include "hall_of_fame.h" +#include "item_use.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "rng.h" +#include "save.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "strings2.h" +#include "task.h" +#include "text.h" + +#define SIO_MULTI_CNT ((struct SioMultiCnt *)REG_ADDR_SIOCNT) + +struct BlockTransfer +{ + u16 pos; + u16 size; + void *src; + bool8 active; + u8 multiplayerId; +}; + +struct LinkTestBGInfo +{ + u32 screenBaseBlock; + u32 paletteNum; + u32 dummy_8; + u32 dummy_C; +}; + +extern u8 unk_2000000[]; +extern u8 unk_2004000[]; +extern u16 gBattleTypeFlags; + +extern u16 word_3004858; + +static void InitLinkTestBG(u8, u8, u8, u8); +void InitLinkTestBG_Unused(u8, u8, u8, u8); +void LinkTestScreen(); +static void InitLocalLinkPlayer(void); +static void VBlankCB_LinkTest(void); +static void InitLink(void); +static void Task_TriggerHandshake(u8); +static void TestBlockTransfer(u32, u32, u32); +static void LinkTestProcessKeyInput(void); +static void CB2_LinkTest(void); +static void HandleReceiveRemoteLinkPlayer(u8); +static void ProcessRecvCmds(u8); +static void BuildSendCmd(u16); +static void sub_8007B44(void); +static void ResetBlockSend(void); +static bool8 InitBlockSend(void *, u32); +static void LinkCB_BlockSendBegin(void); +static void LinkCB_BlockSend(void); +static void LinkCB_BlockSendEnd(void); +static void sub_8007E04(void); +u32 sub_8007E40(void); +static void SetBlockReceivedFlag(u8); +static u16 LinkTestCalcBlockChecksum(void *, u16); +static void PrintHexDigit(u8, u8, u8); +static void PrintHex(u32, u8, u8, u8); +static void LinkCB_RequestPlayerDataExchange(void); +static void Task_PrintTestData(u8); +bool8 sub_8008224(void); +u8 GetDummy2(void); +static void sub_8008350(void); +static void sub_800837C(void); +static void sub_80083E0(void); +static void sub_8008454(void); +static void sub_80084C8(void); +static void sub_80084F4(void); + +static void CheckErrorStatus(void); +static void CB2_PrintErrorMessage(void); +static u8 IsSioMultiMaster(void); +static void DisableSerial(void); +static void EnableSerial(void); +static void CheckMasterOrSlave(void); +static void InitTimer(void); +static void EnqueueSendCmd(u16 *); +static void DequeueRecvCmds(u16[CMD_LENGTH][MAX_LINK_PLAYERS]); +static void StartTransfer(void); +static bool8 DoHandshake(void); +static void DoRecv(void); +static void DoSend(void); +static void StopTimer(void); +static void SendRecvDone(void); +void ResetSendBuffer(void); +void ResetRecvBuffer(void); + +static struct BlockTransfer sBlockSend; +static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS]; +static u32 sBlockSendDelayCounter; +static u32 sDummy1; +static u8 sDummy2; +static u32 sPlayerDataExchangeStatus; +static u32 sErrorLinkStatus; +static u32 sErrorLastRecvQueueCount; +static u32 sErrorLastSendQueueCount; +static u32 sDummy3; +static u8 sLinkTestLastBlockSendPos; +static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS]; +static u8 sNumVBlanksWithoutSerialIntr; +static bool8 sSendBufferEmpty; +static u16 sSendNonzeroCheck; +static u16 sRecvNonzeroCheck; +static u8 sChecksumAvailable; +static u8 sHandshakePlayerCount; + +u16 word_3002910[MAX_LINK_PLAYERS]; +u32 gLinkDebugValue1; +struct LinkPlayerBlock localLinkPlayerBlock; +bool8 gLinkErrorOccurred; +u32 gLinkDebugValue2; +bool8 gLinkPlayerPending[MAX_LINK_PLAYERS]; +struct LinkPlayer gLinkPlayers[MAX_LINK_PLAYERS]; +bool8 gBlockReceived[MAX_LINK_PLAYERS]; +u16 gLinkHeldKeys; +u16 gLinkTimeOutCounter; +struct LinkPlayer localLinkPlayer; +u16 gRecvCmds[CMD_LENGTH][MAX_LINK_PLAYERS]; +u32 gLinkStatus; +bool8 gLinkDummyBool; +u8 byte_3002A68; +u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE]; +bool8 u8_array_3002B70[MAX_LINK_PLAYERS]; +u16 gLinkType; +bool8 u8_array_3002B78[MAX_LINK_PLAYERS]; +u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2]; +bool8 gSuppressLinkErrorMessage; +u8 gSavedLinkPlayerCount; +u16 gSendCmd[CMD_LENGTH]; +u8 gSavedMultiplayerId; +bool8 gReceivedRemoteLinkPlayers; +struct LinkTestBGInfo gLinkTestBGInfo; +void (*gLinkCallback)(void); +struct LinkPlayer gSavedLinkPlayers[MAX_LINK_PLAYERS]; +u8 gShouldAdvanceLinkState; +u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS]; +u8 gBlockRequestType; +u8 gLastSendQueueCount; +struct Link gLink; +u8 gLastRecvQueueCount; +u16 gLinkSavedIme; + +#ifdef GERMAN +u8 deUnkValue1; +u8 deUnkValue2; +#endif + +EWRAM_DATA bool8 gLinkTestDebugValuesEnabled = {0}; +EWRAM_DATA bool8 gLinkTestDummyBool = {0}; +EWRAM_DATA u32 gFiller_20238B8 = {0}; +EWRAM_DATA u32 dword_20238BC = {0}; +EWRAM_DATA bool8 gLinkOpen = {0}; + +static const u16 sLinkTestDigitPalette[] = INCBIN_U16("graphics/interface/link_test_digits.gbapal"); +static const u32 sLinkTestDigitTiles[] = INCBIN_U32("graphics/interface/link_test_digits.4bpp"); + +static const u8 sDebugMessages[7][12] = +{ + _("せつぞく ちゅうです"), + _("せつぞく できません"), + _("かくにん ちゅうです"), + _("かくにん できました"), + _("かくにん できません"), + _("かくにん を かくにん"), + _("かくにん は しっぱい"), +}; + +static const u8 sColorCodes[] = _("{HIGHLIGHT TRANSPARENT}{COLOR WHITE2}"); + +const struct BlockRequest sBlockRequestLookupTable[5] = +{ + {gBlockSendBuffer, 200}, + {gBlockSendBuffer, 200}, + {gBlockSendBuffer, 100}, + {gBlockSendBuffer, 220}, + {gBlockSendBuffer, 40}, +}; + +static const u8 sTestString[] = _("テストな"); + +ALIGNED(4) static const u8 sMagic[] = "GameFreak inc."; + +ALIGNED(4) static const u8 sEmptyString[] = _(""); + +void Task_DestroySelf(u8 taskId) +{ + DestroyTask(taskId); +} + +static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) +{ + LoadPalette(sLinkTestDigitPalette, 16 * paletteNum, 32); + DmaCopy16(3, sLinkTestDigitTiles, BG_CHAR_ADDR(charBaseBlock), 0x220); + + gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; + gLinkTestBGInfo.paletteNum = paletteNum; + + switch (bgNum) + { + case 1: + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock); + break; + case 2: + REG_BG2CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock); + break; + case 3: + REG_BG3CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock); + break; + } +} + +void InitLinkTestBG_Unused(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) +{ + LoadPalette(sLinkTestDigitPalette, 16 * paletteNum, 32); + DmaCopy16(3, sLinkTestDigitTiles, BG_CHAR_ADDR(charBaseBlock), 0x220); + + gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; + gLinkTestBGInfo.paletteNum = paletteNum; + + *gBGControlRegs[bgNum] = (screenBaseBlock << 8) | (charBaseBlock << 2); +} + +void LinkTestScreen(void) +{ + s32 i; + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + SetVBlankCallback(VBlankCB_LinkTest); + SetUpWindowConfig(&gWindowConfig_81E6CE4); + InitMenuWindow((struct WindowConfig *)&gWindowConfig_81E6CE4); + ResetBlockSend(); + gLinkType = 0x1111; + OpenLink(); + SeedRng(gMain.vblankCounter1); + + for (i = 0; i < 4; i++) + { + // Very weird code, but nothing else seems to match. + // The following would have the same effect: + // gSaveBlock2.playerTrainerId[i] = Random(); + u8 *trainerId = gSaveBlock2.playerTrainerId; + s32 r; + s32 mask = 0xFF; + trainerId[i] = (r = Random()) & mask; + } + + InitLinkTestBG(0, 2, 4, 0); + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_1D_MAP; + CreateTask(Task_DestroySelf, 0); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + sDummy3 = 0; + InitLocalLinkPlayer(); + CreateTask(Task_PrintTestData, 0); + SetMainCallback2(CB2_LinkTest); +} + +void sub_8007270(u8 a1) +{ + localLinkPlayer.lp_field_18 = a1; +} + +static void InitLocalLinkPlayer(void) +{ + s32 i; + + localLinkPlayer.trainerId = gSaveBlock2.playerTrainerId[0] + | (gSaveBlock2.playerTrainerId[1] << 8) + | (gSaveBlock2.playerTrainerId[2] << 16) + | (gSaveBlock2.playerTrainerId[3] << 24); + + for (i = 0; i < (s32)sizeof(localLinkPlayer.name); i++) + localLinkPlayer.name[i] = gSaveBlock2.playerName[i]; // UB: reads past the end of "playerName" array + + localLinkPlayer.gender = gSaveBlock2.playerGender; + localLinkPlayer.linkType = gLinkType; + localLinkPlayer.language = gGameLanguage; + localLinkPlayer.version = gGameVersion + 0x4000; + localLinkPlayer.lp_field_2 = 0; +} + +static void VBlankCB_LinkTest(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void InitLink(void) +{ + s32 i; + + for (i = 0; i < CMD_LENGTH; i++) + gSendCmd[i] = 0xEFFF; + + gLinkOpen = TRUE; + EnableSerial(); +} + +static void Task_TriggerHandshake(u8 taskId) +{ + gTasks[taskId].data[0]++; + + if (gTasks[taskId].data[0] == 5) + { + gShouldAdvanceLinkState = 1; + DestroyTask(taskId); + } +} + +void OpenLink(void) +{ + s32 i; + + ResetSerial(); + InitLink(); + + gLinkCallback = LinkCB_RequestPlayerDataExchange; + gLinkVSyncDisabled = FALSE; + gLinkErrorOccurred = FALSE; + gSuppressLinkErrorMessage = FALSE; + + ResetBlockReceivedFlags(); + + sDummy1 = 0; + byte_3002A68 = 0; + gLinkDummyBool = FALSE; + gReceivedRemoteLinkPlayers = FALSE; + + for (i = 0; i < 4; i++) + { + gLinkPlayerPending[i] = TRUE; + u8_array_3002B78[i] = 0; + u8_array_3002B70[i] = 0; + } + + CreateTask(Task_TriggerHandshake, 2); +} + +void CloseLink(void) +{ + gReceivedRemoteLinkPlayers = FALSE; + gLinkOpen = FALSE; + DisableSerial(); +} + +static void TestBlockTransfer(u32 a1, u32 a2, u32 a3) +{ + u8 i; + u8 val; + + if (sLinkTestLastBlockSendPos != sBlockSend.pos) + { + PrintHex(sBlockSend.pos, 2, 3, 2); + sLinkTestLastBlockSendPos = sBlockSend.pos; + } + + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + if (sLinkTestLastBlockRecvPos[i] != sBlockRecv[i].pos) + { + PrintHex(sBlockRecv[i].pos, 2, i + 4, 2); + sLinkTestLastBlockRecvPos[i] = sBlockRecv[i].pos; + } + } + + val = GetBlockReceivedStatus(); + + if (val == 0xF) + { + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + if ((val >> i) & 1) + { + gLinkTestBlockChecksums[i] = LinkTestCalcBlockChecksum(&gBlockRecvBuffer[i], sBlockRecv[i].size); + ResetBlockReceivedFlag(i); + if (gLinkTestBlockChecksums[i] != 834) + { + gLinkTestDebugValuesEnabled = FALSE; + gLinkTestDummyBool = FALSE; + } + } + } + } +} + +static void LinkTestProcessKeyInput(void) +{ + if (gMain.newKeys & A_BUTTON) + gShouldAdvanceLinkState = 1; + if (gMain.heldKeys & B_BUTTON) + InitBlockSend(unk_2004000, 0x2004); + if (gMain.newKeys & L_BUTTON) + BeginNormalPaletteFade(-1, 0, 0x10, 0, 2); + if (gMain.newKeys & START_BUTTON) + SetSuppressLinkErrorMessage(TRUE); + if (gMain.newKeys & R_BUTTON) + TrySavingData(LINK_SAVE); + if (gMain.newKeys & SELECT_BUTTON) + sub_800832C(); + if (gLinkTestDebugValuesEnabled) + { + u32 vblankCounter1 = gMain.vblankCounter1; + u8 val = gLinkVSyncDisabled; + if (!gLinkCallback) + val = gLinkVSyncDisabled | 0x10; + SetLinkDebugValues(vblankCounter1, val); + } +} + +static void CB2_LinkTest(void) +{ + LinkTestProcessKeyInput(); + TestBlockTransfer(1, 1, 0); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +u16 LinkMain2(u16 *heldKeys) +{ + u8 i; + + if (!gLinkOpen) + return 0; + + for (i = 0; i < CMD_LENGTH; i++) + gSendCmd[i] = 0; + + gLinkHeldKeys = *heldKeys; + + if (gLinkStatus & LINK_STAT_CONN_ESTABLISHED) + { + ProcessRecvCmds(SIO_MULTI_CNT->id); + if (gLinkCallback) + gLinkCallback(); + CheckErrorStatus(); + } + + return gLinkStatus; +} + +static void HandleReceiveRemoteLinkPlayer(u8 multiplayerId) +{ + u32 pendingLinkPlayerCount = 0; + s32 i; + + gLinkPlayerPending[multiplayerId] = FALSE; + + for (i = 0; i < GetLinkPlayerCount_2(); i++) + pendingLinkPlayerCount += gLinkPlayerPending[i]; + + if (pendingLinkPlayerCount == 0 && !gReceivedRemoteLinkPlayers) + gReceivedRemoteLinkPlayers = TRUE; +} + +static void ProcessRecvCmds(u8 unusedParam) +{ + u16 i; + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + word_3002910[i] = 0; + if (!gRecvCmds[0][i]) + continue; + switch (gRecvCmds[0][i]) + { + case 0x2222: + InitLocalLinkPlayer(); + localLinkPlayerBlock.linkPlayer = localLinkPlayer; + memcpy(localLinkPlayerBlock.magic1, sMagic, sizeof(localLinkPlayerBlock.magic1) - 1); + memcpy(localLinkPlayerBlock.magic2, sMagic, sizeof(localLinkPlayerBlock.magic2) - 1); + InitBlockSend(&localLinkPlayerBlock, sizeof(localLinkPlayerBlock)); + break; + case 0x4444: + word_3002910[i] = gRecvCmds[1][i]; + break; + case 0x5555: + byte_3002A68 = 1; + break; + case 0x5566: + byte_3002A68 = 1; + break; + case 0xBBBB: + { + struct BlockTransfer *blockRecv = &sBlockRecv[i]; + blockRecv->pos = 0; + blockRecv->size = gRecvCmds[1][i]; + blockRecv->multiplayerId = gRecvCmds[2][i]; + break; + } + case 0x8888: + if (sBlockRecv[i].size > BLOCK_BUFFER_SIZE) + { + u16 *buffer = (u16 *)unk_2000000; + u16 j; + for (j = 0; j < CMD_LENGTH - 1; j++) + buffer[(sBlockRecv[i].pos / 2) + j] = gRecvCmds[j + 1][i]; + } + else + { + u16 j; + for (j = 0; j < CMD_LENGTH - 1; j++) + gBlockRecvBuffer[i][(sBlockRecv[i].pos / 2) + j] = gRecvCmds[j + 1][i]; + } + + sBlockRecv[i].pos += (CMD_LENGTH - 1) * 2; + + if (sBlockRecv[i].pos >= sBlockRecv[i].size) + { + if (gLinkPlayerPending[i] == TRUE) + { + struct LinkPlayerBlock *block = (struct LinkPlayerBlock *)&gBlockRecvBuffer[i]; + struct LinkPlayer *linkPlayer = &gLinkPlayers[i]; + *linkPlayer = block->linkPlayer; + + if (strcmp(block->magic1, sMagic) + || strcmp(block->magic2, sMagic)) + { + SetMainCallback2(CB2_LinkError); + } + else + { + HandleReceiveRemoteLinkPlayer(i); + } + + ConvertInternationalString(gLinkPlayers[i].name, gLinkPlayers[i].language); + } + else + { + SetBlockReceivedFlag(i); + } + } + break; + case 0x5FFF: + u8_array_3002B78[i] = 1; + break; + case 0x2FFE: + u8_array_3002B70[i] = 1; + break; + case 0xAAAA: + sub_8007E24(); + break; + case 0xAAAB: + sub_80516C4(i, gRecvCmds[1][i]); + break; + case 0xCCCC: +#if defined(ENGLISH) + SendBlock(0, sBlockRequestLookupTable[gRecvCmds[1][i]].address, sBlockRequestLookupTable[gRecvCmds[1][i]].size); +#elif defined(GERMAN) + if (deUnkValue2 == 1) + { + deUnkValue2 = 2; + deUnkValue1 = gRecvCmds[1][i]; + } + else if (deUnkValue2 == 2 || deUnkValue2 == 3) + { + SendBlock(0, sBlockRequestLookupTable[gRecvCmds[1][i]].address, sBlockRequestLookupTable[gRecvCmds[1][i]].size); + + if (deUnkValue2 == 2) + deUnkValue2 = 1; + else + deUnkValue2 = 0; + } + else + { + SendBlock(0, sBlockRequestLookupTable[gRecvCmds[1][i]].address, sBlockRequestLookupTable[gRecvCmds[1][i]].size); + } +#endif + break; + case 0xCAFE: + word_3002910[i] = gRecvCmds[1][i]; + break; + } + } +} + +static void BuildSendCmd(u16 code) +{ + switch (code) + { + case 0x2222: + gSendCmd[0] = 0x2222; + gSendCmd[1] = gLinkType; + break; + case 0x2FFE: + gSendCmd[0] = 0x2FFE; + break; + case 0x4444: + gSendCmd[0] = 0x4444; + gSendCmd[1] = gMain.heldKeys; + break; + case 0x5555: + gSendCmd[0] = 0x5555; + break; + case 0x5566: + gSendCmd[0] = 0x5566; + break; + case 0x6666: + gSendCmd[0] = 0x6666; + gSendCmd[1] = 0; + break; + case 0x7777: + { + u8 i; + + gSendCmd[0] = 0x7777; + + for (i = 0; i < 5; i++) + gSendCmd[i + 1] = 0xEE; + + break; + } + case 0xBBBB: + gSendCmd[0] = 0xBBBB; + gSendCmd[1] = sBlockSend.size; + gSendCmd[2] = sBlockSend.multiplayerId + 128; + break; + case 0xAAAA: + gSendCmd[0] = 0xAAAA; + break; + case 0xAAAB: + gSendCmd[0] = 0xAAAB; + gSendCmd[1] = gScriptItemId; + break; + case 0xCCCC: + gSendCmd[0] = 0xCCCC; + gSendCmd[1] = gBlockRequestType; + break; + case 0x5FFF: + gSendCmd[0] = 0x5FFF; + break; + case 0xCAFE: + if (!word_3004858 || gLinkTransferringData) + break; + gSendCmd[0] = 0xCAFE; + gSendCmd[1] = word_3004858; + break; + } +} + +void sub_8007B14(void) +{ + gLinkCallback = sub_8007B44; +} + +bool32 sub_8007B24(void) +{ + if (gLinkCallback == sub_8007B44) + return TRUE; + else + return FALSE; +} + +static void sub_8007B44(void) +{ + if (gReceivedRemoteLinkPlayers == TRUE) + BuildSendCmd(0xCAFE); +} + +void ClearLinkCallback(void) +{ + gLinkCallback = NULL; +} + +void ClearLinkCallback_2(void) +{ + gLinkCallback = NULL; +} + +u8 GetLinkPlayerCount(void) +{ + return EXTRACT_PLAYER_COUNT(gLinkStatus); +} + +void OpenLinkTimed(void) +{ + sPlayerDataExchangeStatus = EXCHANGE_NOT_STARTED; + gLinkTimeOutCounter = 0; +#if defined(GERMAN) + ResetBlockSend(); +#endif + OpenLink(); +} + +u8 GetLinkPlayerDataExchangeStatusTimed(void) +{ + s32 i; + s32 count = 0; + u32 index; + + if (gReceivedRemoteLinkPlayers == TRUE) + { + if (GetLinkPlayerCount() == 0) + { + gLinkErrorOccurred = TRUE; + CloseLink(); + } + + i = 0; + index = 0; + + while (i < GetLinkPlayerCount()) + { + if (gLinkPlayers[index].linkType == gLinkPlayers[0].linkType) + ++count; + ++index; + ++i; + } + + if (count == GetLinkPlayerCount()) + sPlayerDataExchangeStatus = EXCHANGE_COMPLETE; + else + sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS; + } + else + { + gLinkTimeOutCounter++; + if (gLinkTimeOutCounter > 600) + sPlayerDataExchangeStatus = EXCHANGE_TIMED_OUT; + } + + return sPlayerDataExchangeStatus; +} + +bool8 IsLinkPlayerDataExchangeComplete(void) +{ + u8 i; + u8 count = 0; + u8 isComplete; + + for (i = 0; i < GetLinkPlayerCount(); i++) + if (gLinkPlayers[i].linkType == gLinkPlayers[0].linkType) + count++; + + if (count == GetLinkPlayerCount()) + { + isComplete = TRUE; + sPlayerDataExchangeStatus = EXCHANGE_COMPLETE; + } + else + { + isComplete = FALSE; + sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS; + } + + return isComplete; +} + +u32 GetLinkPlayerTrainerId(u8 multiplayerId) +{ + return gLinkPlayers[multiplayerId].trainerId; +} + +void ResetLinkPlayers(void) +{ + s32 i; + for (i = 0; i < 4; i++) + memset(&gLinkPlayers[i], 0, sizeof(struct LinkPlayer)); +} + +static void ResetBlockSend(void) +{ + sBlockSend.active = FALSE; + sBlockSend.pos = 0; + sBlockSend.size = 0; + sBlockSend.src = NULL; +} + +static bool8 InitBlockSend(void *data, u32 size) +{ + if (sBlockSend.active) + { + return FALSE; + } + else + { + sBlockSend.multiplayerId = GetMultiplayerId(); + sBlockSend.active = TRUE; + sBlockSend.size = size; + sBlockSend.pos = 0; + + if (size > BLOCK_BUFFER_SIZE) + { + sBlockSend.src = data; + } + else + { + if (data != gBlockSendBuffer) + memcpy(gBlockSendBuffer, data, size); + sBlockSend.src = gBlockSendBuffer; + } + + BuildSendCmd(0xBBBB); + gLinkCallback = LinkCB_BlockSendBegin; + sBlockSendDelayCounter = 0; + return TRUE; + } +} + +static void LinkCB_BlockSendBegin(void) +{ + sBlockSendDelayCounter++; + if (sBlockSendDelayCounter > 2) + gLinkCallback = LinkCB_BlockSend; +} + +static void LinkCB_BlockSend(void) +{ + s32 i; + u8 *buffer = sBlockSend.src; + + gSendCmd[0] = 0x8888; + + for (i = 0; i < CMD_LENGTH - 1; i++) + { + s32 offset = sBlockSend.pos + 2 * i; + gSendCmd[i + 1] = (buffer[offset + 1] << 8) | buffer[offset]; + } + + sBlockSend.pos += (CMD_LENGTH - 1) * 2; + + if (sBlockSend.size <= sBlockSend.pos) + { + sBlockSend.active = FALSE; + gLinkCallback = LinkCB_BlockSendEnd; + } +} + +static void LinkCB_BlockSendEnd(void) +{ + gLinkCallback = NULL; +} + +static void sub_8007E04(void) +{ + GetMultiplayerId(); // whats the point of calling this if you dont use the multiplayer ID? + BuildSendCmd(0x4444); + dword_20238BC++; +} + +void sub_8007E24(void) +{ + dword_20238BC = 0; + gLinkCallback = sub_8007E04; +} + +u32 sub_8007E40(void) +{ + return dword_20238BC; +} + +void sub_8007E4C(void) +{ + BuildSendCmd(0xAAAA); +} + +u8 GetMultiplayerId(void) +{ + return SIO_MULTI_CNT->id; +} + +u8 bitmask_all_link_players_but_self(void) +{ + return ((1 << GetMultiplayerId()) ^ 0xF); +} + +bool8 SendBlock(u8 a1, void *a2, u16 a3) +{ + return InitBlockSend(a2, a3); +} + +bool8 sub_8007E9C(u8 a1) +{ + if (!gLinkCallback) + { + gBlockRequestType = a1; + BuildSendCmd(0xCCCC); + return TRUE; + } + else + { + return FALSE; + } +} + +bool8 sub_8007ECC(void) +{ + u8 retVal = FALSE; + + if (!gLinkCallback) + retVal = TRUE; + + return retVal; +} + +u8 GetBlockReceivedStatus(void) +{ + return (gBlockReceived[3] << 3) + | (gBlockReceived[2] << 2) + | (gBlockReceived[1] << 1) + | gBlockReceived[0]; +} + +static void SetBlockReceivedFlag(u8 multiplayerId) +{ + gBlockReceived[multiplayerId] = TRUE; +} + +void ResetBlockReceivedFlags(void) +{ + s32 i; + for (i = 0; i < 4; i++) + gBlockReceived[i] = FALSE; +} + +void ResetBlockReceivedFlag(u8 multiplayerId) +{ + if (gBlockReceived[multiplayerId]) + gBlockReceived[multiplayerId] = FALSE; +} + +void sub_8007F4C(void) +{ + if ((gLinkStatus & LINK_STAT_MASTER) && EXTRACT_PLAYER_COUNT(gLinkStatus) > 1) + gShouldAdvanceLinkState = 1; +} + +static u16 LinkTestCalcBlockChecksum(void *data, u16 size) +{ + u16 sum = 0; + u16 i; + + for (i = 0; i < size / 2; i++) + sum += ((u16 *)data)[i]; + + return sum; +} + +static void PrintHexDigit(u8 tileNum, u8 x, u8 y) +{ + u16 *tilemap = (u16 *)BG_SCREEN_ADDR(gLinkTestBGInfo.screenBaseBlock); + tilemap[(32 * y) + x] = (gLinkTestBGInfo.paletteNum << 12) | (tileNum + 1); +} + +static void PrintHex(u32 num, u8 x, u8 y, u8 maxDigits) +{ + u8 buffer[16]; + s32 i; + + for (i = 0; i < maxDigits; i++) + { + buffer[i] = num & 0xF; + num >>= 4; + } + + for (i = maxDigits - 1; i >= 0; i--) + { + PrintHexDigit(buffer[i], x, y); + x++; + } +} + +static void LinkCB_RequestPlayerDataExchange(void) +{ + // Only one request needs to be sent, so only the master sends it. + if (gLinkStatus & LINK_STAT_MASTER) + BuildSendCmd(0x2222); + gLinkCallback = NULL; +} + +void Task_PrintTestData(u8 taskId) +{ + s32 i; + + PrintHex(gShouldAdvanceLinkState, 2, 1, 2); + PrintHex(gLinkStatus, 15, 1, 8); + PrintHex(gLink.state, 2, 10, 2); + PrintHex(EXTRACT_PLAYER_COUNT(gLinkStatus), 15, 10, 2); + PrintHex(GetMultiplayerId(), 15, 12, 2); + PrintHex(gLastSendQueueCount, 25, 1, 2); + PrintHex(gLastRecvQueueCount, 25, 2, 2); + PrintHex(GetBlockReceivedStatus(), 15, 5, 2); + PrintHex(gLinkDebugValue1, 2, 12, 8); + PrintHex(gLinkDebugValue2, 2, 13, 8); + PrintHex(GetSioMultiSI(), 25, 5, 1); + PrintHex(IsSioMultiMaster(), 25, 6, 1); + PrintHex(IsLinkConnectionEstablished(), 25, 7, 1); + PrintHex(HasLinkErrorOccurred(), 25, 8, 1); + + for (i = 0; i < MAX_LINK_PLAYERS; i++) + PrintHex(gLinkTestBlockChecksums[i], 10, 4 + i, 4); +} + +void SetLinkDebugValues(u32 value1, u32 value2) +{ + gLinkDebugValue1 = value1; + gLinkDebugValue2 = value2; +} + +u8 sub_8008198(void) +{ + u8 result = 0; + s32 i; + + for (i = 0; i < gSavedLinkPlayerCount; i++) + result |= (1 << i); + + return result; +} + +void sub_80081C8(u8 playerCount) +{ + s32 i; + + gSavedLinkPlayerCount = playerCount; + gSavedMultiplayerId = GetMultiplayerId(); + + for (i = 0; i < 4; i++) + gSavedLinkPlayers[i] = gLinkPlayers[i]; +} + +u8 sub_800820C(void) +{ + return gSavedLinkPlayerCount; +} + +u8 sub_8008218(void) +{ + return gSavedMultiplayerId; +} + +bool8 sub_8008224(void) +{ + s32 count = 0; + s32 i; + + for (i = 0; i < gSavedLinkPlayerCount; i++) + if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId) + count++; + + if (count == gSavedLinkPlayerCount) + return TRUE; + else + return FALSE; +} + +void sub_800826C(void) +{ + u8 i; + + for (i = 0; i < gSavedLinkPlayerCount; i++) + { + if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId + || StringCompareWithoutExtCtrlCodes(gSavedLinkPlayers[i].name, gLinkPlayers[i].name)) + { + gLinkErrorOccurred = TRUE; + CloseLink(); + SetMainCallback2(CB2_LinkError); + } + } +} + +void sub_80082EC(void) +{ + gSavedLinkPlayerCount = 0; + gSavedMultiplayerId = 0; +} + +u8 GetLinkPlayerCount_2(void) +{ + return EXTRACT_PLAYER_COUNT(gLinkStatus); +} + +bool8 IsLinkMaster(void) +{ + return EXTRACT_MASTER(gLinkStatus); +} + +u8 GetDummy2(void) +{ + return sDummy2; +} + +void sub_800832C(void) +{ + if (!gLinkCallback) + { + gLinkCallback = sub_8008350; + gLinkDummyBool = FALSE; + } +} + +static void sub_8008350(void) +{ + if (gLastRecvQueueCount == 0) + { + BuildSendCmd(0x5FFF); + gLinkCallback = sub_800837C; + } +} + +static void sub_800837C(void) +{ + s32 i; + s32 totalCount = GetLinkPlayerCount(); + s32 count = 0; + + for (i = 0; i < totalCount; i++) + if (u8_array_3002B78[i]) + count++; + + if (count == totalCount) + { + gBattleTypeFlags &= ~BATTLE_TYPE_20; + gLinkVSyncDisabled = TRUE; + CloseLink(); + gLinkCallback = NULL; + gLinkDummyBool = TRUE; + } +} + +static void sub_80083E0(void) +{ + s32 i; + s32 totalCount = GetLinkPlayerCount(); + s32 count = 0; + + for (i = 0; i < totalCount; i++) + { + if (gLinkPlayers[i].language == 1) + count++; + else if (u8_array_3002B78[i]) + count++; + } + + if (count == totalCount) + { + gBattleTypeFlags &= ~BATTLE_TYPE_20; + gLinkVSyncDisabled = TRUE; + CloseLink(); + gLinkCallback = 0; + gLinkDummyBool = TRUE; + } +} + +static void sub_8008454(void) +{ + if (gLastRecvQueueCount == 0) + { + BuildSendCmd(0x5FFF); + gLinkCallback = sub_80083E0; + } +} + +void sub_8008480(void) +{ + if (!gLinkCallback) + { + gLinkCallback = sub_8008454; + gLinkDummyBool = FALSE; + } +} + +void sub_80084A4(void) +{ + if (!gLinkCallback) + gLinkCallback = sub_80084C8; + gLinkDummyBool = FALSE; +} + +static void sub_80084C8(void) +{ + if (gLastRecvQueueCount == 0) + { + BuildSendCmd(0x2FFE); + gLinkCallback = sub_80084F4; + } +} + +static void sub_80084F4(void) +{ + u8 totalCount = GetLinkPlayerCount(); + u8 count = 0; + + while (count < totalCount && u8_array_3002B70[count]) + count++; + + if (count == totalCount) + { + u8 i; + for (i = 0; i < 4; i++) + u8_array_3002B70[i] = 0; + gLinkCallback = NULL; + } +} + +static void CheckErrorStatus(void) +{ + if (gLinkOpen) + { + if (gLinkStatus & LINK_STAT_ERRORS) + { + if (!gSuppressLinkErrorMessage) + { + sErrorLinkStatus = gLinkStatus; + sErrorLastRecvQueueCount = gLastRecvQueueCount; + sErrorLastSendQueueCount = gLastSendQueueCount; + SetMainCallback2(CB2_LinkError); + } + gLinkErrorOccurred = TRUE; + CloseLink(); + } + } +} + +void CB2_LinkError(void) +{ + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetPaletteFadeControl(); + FillPalette(0, 0, 2); + ResetTasks(); + SetVBlankCallback(VBlankCB_LinkTest); + SetUpWindowConfig(&gWindowConfig_81E7198); + InitMenuWindow((struct WindowConfig *)&gWindowConfig_81E7198); + MenuZeroFillScreen(); + REG_BLDALPHA = 0; + REG_BG0VOFS = 0; + REG_BG0HOFS = 0; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON; + gSoftResetDisabled = FALSE; + CreateTask(Task_DestroySelf, 0); + StopMapMusic(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + SetMainCallback2(CB2_PrintErrorMessage); +} + +static void CB2_PrintErrorMessage(void) +{ + u8 array[64] __attribute__((unused)); // unused + + switch (gMain.state) + { + case 0: + MenuPrint_PixelCoords(gMultiText_LinkError, 20, 56, 1); + break; + case 30: + case 60: + PlaySE(SE_BOO); + break; + case 90: + PlaySE(SE_BOO); + break; + } + + if (gMain.state != 200) + gMain.state++; +} + +u8 GetSioMultiSI(void) +{ + return (REG_SIOCNT >> SIO_MULTI_SI_SHIFT) & SIO_MULTI_SI_MASK; +} + +static bool8 IsSioMultiMaster(void) +{ + bool8 isMaster = FALSE; + + if ((REG_SIOCNT & SIO_MULTI_SD) && !(REG_SIOCNT & SIO_MULTI_SI)) + isMaster = TRUE; + + return isMaster; +} + +bool8 IsLinkConnectionEstablished(void) +{ + return EXTRACT_CONN_ESTABLISHED(gLinkStatus); +} + +void SetSuppressLinkErrorMessage(bool8 value) +{ + gSuppressLinkErrorMessage = value; +} + +bool8 HasLinkErrorOccurred(void) +{ + return gLinkErrorOccurred; +} + +static void DisableSerial(void) +{ + gLinkSavedIme = REG_IME; + REG_IME = 0; + REG_IE &= ~(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); + REG_IME = gLinkSavedIme; + + REG_SIOCNT = 0; + REG_TM3CNT_H = 0; + REG_IF = INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL; + + CpuFill32(0, &gLink, sizeof(gLink)); +} + +static void EnableSerial(void) +{ + gLinkSavedIme = REG_IME; + REG_IME = 0; + REG_IE &= ~(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); + REG_IME = gLinkSavedIme; + + REG_RCNT = 0; + + REG_SIOCNT = SIO_MULTI_MODE; + REG_SIOCNT |= SIO_INTR_ENABLE | SIO_115200_BPS; + + gLinkSavedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_SERIAL; + REG_IME = gLinkSavedIme; + + REG_SIOMLT_SEND = 0; + + CpuFill32(0, &gLink, sizeof(gLink)); + + sNumVBlanksWithoutSerialIntr = 0; + sSendNonzeroCheck = 0; + sRecvNonzeroCheck = 0; + sChecksumAvailable = FALSE; + sHandshakePlayerCount = 0; + gLastSendQueueCount = 0; + gLastRecvQueueCount = 0; +} + +void ResetSerial(void) +{ + EnableSerial(); + DisableSerial(); +} + +u32 LinkMain1(u8 *shouldAdvanceLinkState, u16 *sendCmd, u16 recvCmds[CMD_LENGTH][MAX_LINK_PLAYERS]) +{ + u32 retVal; + u32 retVal2; + + switch (gLink.state) + { + case LINK_STATE_START0: + DisableSerial(); + gLink.state = LINK_STATE_START1; + break; + case LINK_STATE_START1: + if (*shouldAdvanceLinkState == 1) + { + EnableSerial(); + gLink.state = LINK_STATE_HANDSHAKE; + } + break; + case LINK_STATE_HANDSHAKE: + switch (*shouldAdvanceLinkState) + { + case 1: + if (gLink.isMaster == 8 && gLink.playerCount > 1) + gLink.handshakeAsMaster = TRUE; + break; + case 2: + gLink.state = LINK_STATE_START0; + REG_SIOMLT_SEND = 0; + break; + default: + CheckMasterOrSlave(); + break; + } + break; + case LINK_STATE_INIT_TIMER: + InitTimer(); + gLink.state = LINK_STATE_CONN_ESTABLISHED; + case LINK_STATE_CONN_ESTABLISHED: + EnqueueSendCmd(sendCmd); + DequeueRecvCmds(recvCmds); + break; + } + + *shouldAdvanceLinkState = 0; + + retVal = gLink.localId; + retVal |= (gLink.playerCount << 2); + + if (gLink.isMaster == 8) + retVal |= 0x20; + + { + u32 receivedNothing = gLink.receivedNothing << 8; + u32 link_field_F = gLink.link_field_F << 9; + u32 hardwareError = gLink.hardwareError << 12; + u32 badChecksum = gLink.badChecksum << 13; + u32 queueFull = gLink.queueFull << 14; + u32 val; + + if (gLink.state == LINK_STATE_CONN_ESTABLISHED) + { + val = 0x40; + val |= receivedNothing; + val |= retVal; + val |= link_field_F; + val |= hardwareError; + val |= badChecksum; + val |= queueFull; + } + else + { + val = retVal; + val |= receivedNothing; + val |= link_field_F; + val |= hardwareError; + val |= badChecksum; + val |= queueFull; + } + + retVal = val; + } + + if (gLink.lag == LAG_MASTER) + retVal |= 0x10000; + + if (gLink.localId > 3) + retVal |= 0x20000; + + retVal2 = retVal; + if (gLink.lag == LAG_SLAVE) + retVal2 |= 0x40000; + + return retVal2; +} + +static void CheckMasterOrSlave(void) +{ + u32 terminals = *(u32 *)REG_ADDR_SIOCNT & (SIO_MULTI_SD | SIO_MULTI_SI); + + if (terminals == SIO_MULTI_SD && !gLink.localId) + gLink.isMaster = 8; + else + gLink.isMaster = 0; +} + +static void InitTimer(void) +{ + if (gLink.isMaster) + { + REG_TM3CNT_L = 65339; + REG_TM3CNT_H = TIMER_INTR_ENABLE | TIMER_64CLK; + + gLinkSavedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_TIMER3; + REG_IME = gLinkSavedIme; + } +} + +static void EnqueueSendCmd(u16 *sendCmd) +{ + gLinkSavedIme = REG_IME; + REG_IME = 0; + + if (gLink.sendQueue.count < QUEUE_CAPACITY) + { + u8 i; + u8 offset = gLink.sendQueue.pos + gLink.sendQueue.count; + + if (offset >= QUEUE_CAPACITY) + offset -= QUEUE_CAPACITY; + + for (i = 0; i < CMD_LENGTH; i++) + { + sSendNonzeroCheck |= *sendCmd; + gLink.sendQueue.data[i][offset] = *sendCmd; + *sendCmd = 0; + sendCmd++; + } + } + else + { + gLink.queueFull = QUEUE_FULL_SEND; + } + + if (sSendNonzeroCheck) + { + gLink.sendQueue.count++; + sSendNonzeroCheck = 0; + } + + REG_IME = gLinkSavedIme; + gLastSendQueueCount = gLink.sendQueue.count; +} + +void DequeueRecvCmds(u16 recvCmds[CMD_LENGTH][MAX_LINK_PLAYERS]) +{ + u8 i; + u8 j; + + gLinkSavedIme = REG_IME; + REG_IME = 0; + + if (gLink.recvQueue.count == 0) + { + for (i = 0; i < CMD_LENGTH; i++) + for (j = 0; j < gLink.playerCount; j++) + recvCmds[i][j] = 0; + + gLink.receivedNothing = TRUE; + } + else + { + for (i = 0; i < CMD_LENGTH; i++) + for (j = 0; j < gLink.playerCount; j++) + recvCmds[i][j] = gLink.recvQueue.data[j][i][gLink.recvQueue.pos]; + + gLink.recvQueue.count--; + gLink.recvQueue.pos++; + + if (gLink.recvQueue.pos >= QUEUE_CAPACITY) + gLink.recvQueue.pos = 0; + + gLink.receivedNothing = FALSE; + } + + REG_IME = gLinkSavedIme; +} + +void LinkVSync(void) +{ + if (gLink.isMaster) + { + switch (gLink.state) + { + case LINK_STATE_HANDSHAKE: + StartTransfer(); + break; + case LINK_STATE_CONN_ESTABLISHED: + if (gLink.serialIntrCounter > 8) + { + if (gLink.lag == LAG_MASTER) + return; + gLink.serialIntrCounter = 0; + } + else if (gLink.hardwareError != TRUE) + { + gLink.lag = LAG_MASTER; + return; + } + StartTransfer(); + break; + } + } + else if (gLink.state == LINK_STATE_CONN_ESTABLISHED + || gLink.state == LINK_STATE_HANDSHAKE) + { + sNumVBlanksWithoutSerialIntr++; + + if (sNumVBlanksWithoutSerialIntr > 10) + { + if (gLink.state == LINK_STATE_CONN_ESTABLISHED) + gLink.lag = LAG_SLAVE; + + if (gLink.state == LINK_STATE_HANDSHAKE) + { + gLink.playerCount = 0; + gLink.link_field_F = 0; + } + } + } +} + +void Timer3Intr(void) +{ + StopTimer(); + StartTransfer(); +} + +void SerialCB(void) +{ + gLink.localId = SIO_MULTI_CNT->id; + + switch (gLink.state) + { + case LINK_STATE_CONN_ESTABLISHED: + gLink.hardwareError = SIO_MULTI_CNT->error; + DoRecv(); + DoSend(); + SendRecvDone(); + break; + case LINK_STATE_HANDSHAKE: + if (DoHandshake()) + { + if (gLink.isMaster) + { + gLink.state = LINK_STATE_INIT_TIMER; + gLink.serialIntrCounter = 8; + } + else + { + gLink.state = LINK_STATE_CONN_ESTABLISHED; + } + } + break; + } + + gLink.serialIntrCounter++; + sNumVBlanksWithoutSerialIntr = 0; + + if (gLink.serialIntrCounter == 8) + gLastRecvQueueCount = gLink.recvQueue.count; +} + +static void StartTransfer(void) +{ + REG_SIOCNT |= SIO_START; +} + +static bool8 DoHandshake(void) +{ + u8 i; + u8 playerCount = 0; + u16 minRecv = 0xFFFF; + + if (gLink.handshakeAsMaster == TRUE) + REG_SIOMLT_SEND = MASTER_HANDSHAKE; + else + REG_SIOMLT_SEND = SLAVE_HANDSHAKE; + + *(u64 *)&gLink.tempRecvBuffer[0] = REG_SIOMLT_RECV; + REG_SIOMLT_RECV = 0; + + gLink.handshakeAsMaster = FALSE; + + for (i = 0; i < 4; i++) + { + if ((gLink.tempRecvBuffer[i] & ~0x3) == SLAVE_HANDSHAKE + || gLink.tempRecvBuffer[i] == MASTER_HANDSHAKE) + { + playerCount++; + + if (minRecv > gLink.tempRecvBuffer[i] && gLink.tempRecvBuffer[i] != 0) + minRecv = gLink.tempRecvBuffer[i]; + } + else + { + if (gLink.tempRecvBuffer[i] != 0xFFFF) + playerCount = 0; + break; + } + } + + gLink.playerCount = playerCount; + + // The handshake is successful when: + // 1. There are multiple players. + // 2. The number of players agrees with the last attempt. + // 3. Player no. 0 is identifying as the master. + if (gLink.playerCount > 1 + && gLink.playerCount == sHandshakePlayerCount + && gLink.tempRecvBuffer[0] == MASTER_HANDSHAKE) + return TRUE; + + if (gLink.playerCount > 1) + gLink.link_field_F = (minRecv & 3) + 1; + else + gLink.link_field_F = 0; + + sHandshakePlayerCount = gLink.playerCount; + + return FALSE; +} + +static void DoRecv(void) +{ + u16 recvBuffer[4]; + u8 i; + + *(u64 *)&recvBuffer[0] = REG_SIOMLT_RECV; + + if (gLink.sendCmdIndex == 0) + { + for (i = 0; i < gLink.playerCount; i++) + if (gLink.checksum != recvBuffer[i] && sChecksumAvailable) + gLink.badChecksum = TRUE; + + gLink.checksum = 0; + sChecksumAvailable = TRUE; + } + else + { + u8 index = gLink.recvQueue.pos + gLink.recvQueue.count; + + if (index >= QUEUE_CAPACITY) + index -= QUEUE_CAPACITY; + + if (gLink.recvQueue.count < QUEUE_CAPACITY) + { + for (i = 0; i < gLink.playerCount; i++) + { + gLink.checksum += recvBuffer[i]; + sRecvNonzeroCheck |= recvBuffer[i]; + gLink.recvQueue.data[i][gLink.recvCmdIndex][index] = recvBuffer[i]; + } + } + else + { + gLink.queueFull = QUEUE_FULL_RECV; + } + + gLink.recvCmdIndex++; + + if (gLink.recvCmdIndex == CMD_LENGTH && sRecvNonzeroCheck) + { + gLink.recvQueue.count++; + sRecvNonzeroCheck = 0; + } + } +} + +static void DoSend(void) +{ + if (gLink.sendCmdIndex == CMD_LENGTH) + { + REG_SIOMLT_SEND = gLink.checksum; + + if (!sSendBufferEmpty) + { + gLink.sendQueue.count--; + gLink.sendQueue.pos++; + + if (gLink.sendQueue.pos >= QUEUE_CAPACITY) + gLink.sendQueue.pos = 0; + } + else + { + sSendBufferEmpty = FALSE; + } + } + else + { + if (!sSendBufferEmpty && gLink.sendQueue.count == 0) + sSendBufferEmpty = TRUE; + + if (sSendBufferEmpty) + REG_SIOMLT_SEND = 0; + else + REG_SIOMLT_SEND = gLink.sendQueue.data[gLink.sendCmdIndex][gLink.sendQueue.pos]; + + gLink.sendCmdIndex++; + } +} + +static void StopTimer(void) +{ + if (gLink.isMaster) + { + REG_TM3CNT_H &= ~TIMER_ENABLE; + REG_TM3CNT_L = 65339; + } +} + +static void SendRecvDone(void) +{ + if (gLink.recvCmdIndex == CMD_LENGTH) + { + gLink.sendCmdIndex = 0; + gLink.recvCmdIndex = 0; + } + else if (gLink.isMaster) + { + REG_TM3CNT_H |= TIMER_ENABLE; + } +} + +void ResetSendBuffer(void) +{ + u8 i; + u8 j; + + gLink.sendQueue.count = 0; + gLink.sendQueue.pos = 0; + + for (i = 0; i < CMD_LENGTH; i++) + for (j = 0; j < QUEUE_CAPACITY; j++) + gLink.sendQueue.data[i][j] = 0xEFFF; +} + +void ResetRecvBuffer(void) +{ + u8 i; + u8 j; + u8 k; + + gLink.recvQueue.count = 0; + gLink.recvQueue.pos = 0; + + for (i = 0; i < 4; i++) + for (j = 0; j < CMD_LENGTH; j++) + for (k = 0; k < QUEUE_CAPACITY; k++) + gLink.recvQueue.data[i][j][k] = 0xEFFF; +} diff --git a/src/engine/load_save.c b/src/engine/load_save.c new file mode 100644 index 000000000..730aea2b8 --- /dev/null +++ b/src/engine/load_save.c @@ -0,0 +1,168 @@ +#include "global.h" +#include "gba/flash_internal.h" +#include "load_save.h" +#include "main.h" +#include "pokemon.h" +#include "rom4.h" + +extern u8 gPlayerPartyCount; + +bool32 gFlashMemoryPresent; + +struct LoadedSaveData +{ + struct ItemSlot items[20]; + struct ItemSlot keyItems[20]; + struct ItemSlot pokeBalls[16]; + struct ItemSlot TMsHMs[64]; + struct ItemSlot berries[46]; + struct MailStruct mail[16]; +}; + +EWRAM_DATA struct SaveBlock2 gSaveBlock2 = {0}; +EWRAM_DATA struct SaveBlock1 gSaveBlock1 = {0}; + +static EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0}; + +void CheckForFlashMemory(void) +{ + if (!IdentifyFlash()) + { + gFlashMemoryPresent = TRUE; + InitFlashTimer(); + } + else + gFlashMemoryPresent = FALSE; +} + +bool32 GetSecretBase2Field_9(void) +{ + return gSaveBlock2.specialSaveWarp; +} + +void ClearSecretBase2Field_9(void) +{ + gSaveBlock2.specialSaveWarp = 0; +} + +void SetSecretBase2Field_9(void) +{ + gSaveBlock2.specialSaveWarp = 1; +} + +void SetSecretBase2Field_9_AndHideBG(void) // note: no other function sets specialSaveWarp to values other than 0 or 1, hence clear and set distinctions. +{ + gpu_sync_bg_hide(0); // the function doesn't use the parameter passed to it, but this is necessary to match. + gSaveBlock2.specialSaveWarp = 1; +} + +void ClearSecretBase2Field_9_2(void) // duplicate function +{ + gSaveBlock2.specialSaveWarp = 0; +} + +void SavePlayerParty(void) +{ + int i; + + gSaveBlock1.playerPartyCount = gPlayerPartyCount; + + for (i = 0; i < 6; i++) + gSaveBlock1.playerParty[i] = gPlayerParty[i]; +} + +void LoadPlayerParty(void) +{ + int i; + + gPlayerPartyCount = gSaveBlock1.playerPartyCount; + + for (i = 0; i < 6; i++) + gPlayerParty[i] = gSaveBlock1.playerParty[i]; +} + +static void SaveMapObjects(void) +{ + int i; + + for (i = 0; i < 16; i++) + gSaveBlock1.mapObjects[i] = gMapObjects[i]; +} + +static void LoadMapObjects(void) +{ + int i; + + for (i = 0; i < 16; i++) + gMapObjects[i] = gSaveBlock1.mapObjects[i]; +} + +void SaveSerializedGame(void) +{ + SavePlayerParty(); + SaveMapObjects(); +} + +void LoadSerializedGame(void) +{ + LoadPlayerParty(); + LoadMapObjects(); +} + +void LoadPlayerBag(void) +{ + int i; + + // load player items. + for (i = 0; i < 20; i++) + gLoadedSaveData.items[i] = gSaveBlock1.bagPocket_Items[i]; + + // load player key items. + for (i = 0; i < 20; i++) + gLoadedSaveData.keyItems[i] = gSaveBlock1.bagPocket_KeyItems[i]; + + // load player pokeballs. + for (i = 0; i < 16; i++) + gLoadedSaveData.pokeBalls[i] = gSaveBlock1.bagPocket_PokeBalls[i]; + + // load player TMs and HMs. + for (i = 0; i < 64; i++) + gLoadedSaveData.TMsHMs[i] = gSaveBlock1.bagPocket_TMHM[i]; + + // load player berries. + for (i = 0; i < 46; i++) + gLoadedSaveData.berries[i] = gSaveBlock1.bagPocket_Berries[i]; + + // load mail. + for (i = 0; i < 16; i++) + gLoadedSaveData.mail[i] = gSaveBlock1.mail[i]; +} + +void SavePlayerBag(void) +{ + int i; + + // save player items. + for (i = 0; i < 20; i++) + gSaveBlock1.bagPocket_Items[i] = gLoadedSaveData.items[i]; + + // save player key items. + for (i = 0; i < 20; i++) + gSaveBlock1.bagPocket_KeyItems[i] = gLoadedSaveData.keyItems[i]; + + // save player pokeballs. + for (i = 0; i < 16; i++) + gSaveBlock1.bagPocket_PokeBalls[i] = gLoadedSaveData.pokeBalls[i]; + + // save player TMs and HMs. + for (i = 0; i < 64; i++) + gSaveBlock1.bagPocket_TMHM[i] = gLoadedSaveData.TMsHMs[i]; + + // save player berries. + for (i = 0; i < 46; i++) + gSaveBlock1.bagPocket_Berries[i] = gLoadedSaveData.berries[i]; + + // save mail. + for (i = 0; i < 16; i++) + gSaveBlock1.mail[i] = gLoadedSaveData.mail[i]; +} diff --git a/src/engine/m4a_2.c b/src/engine/m4a_2.c new file mode 100644 index 000000000..2d3c65848 --- /dev/null +++ b/src/engine/m4a_2.c @@ -0,0 +1,912 @@ +#include "gba/m4a_internal.h" + +#define BSS_CODE __attribute__((section(".bss.code"))) + +BSS_CODE ALIGNED(4) char SoundMainRAM_Buffer[0x800] = {0}; + +struct SoundInfo gSoundInfo; +struct PokemonCrySong gPokemonCrySongs[MAX_POKEMON_CRIES]; +struct MusicPlayerInfo gPokemonCryMusicPlayers[MAX_POKEMON_CRIES]; +void *gMPlayJumpTable[36]; +struct CgbChannel gCgbChans[4]; +struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2]; +struct PokemonCrySong gPokemonCrySong; +struct MusicPlayerInfo gMPlay_BGM; +struct MusicPlayerInfo gMPlay_SE1; +struct MusicPlayerInfo gMPlay_SE2; +struct MusicPlayerInfo gMPlay_SE3; +u8 gMPlayMemAccArea[0x10]; + +u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust) +{ + u32 val1; + u32 val2; + u32 fineAdjustShifted = fineAdjust << 24; + + if (key > 178) + { + key = 178; + fineAdjustShifted = 255 << 24; + } + + val1 = gScaleTable[key]; + val1 = gFreqTable[val1 & 0xF] >> (val1 >> 4); + + val2 = gScaleTable[key + 1]; + val2 = gFreqTable[val2 & 0xF] >> (val2 >> 4); + + return umul3232H32(wav->freq, val1 + umul3232H32(val2 - val1, fineAdjustShifted)); +} + +void UnusedDummyFunc() +{ +} + +void MPlayContinue(struct MusicPlayerInfo *mplayInfo) +{ + if (mplayInfo->ident == ID_NUMBER) + { + mplayInfo->ident++; + mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE; + mplayInfo->ident = ID_NUMBER; + } +} + +void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed) +{ + if (mplayInfo->ident == ID_NUMBER) + { + mplayInfo->ident++; + mplayInfo->fadeOC = speed; + mplayInfo->fadeOI = speed; + mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT); + mplayInfo->ident = ID_NUMBER; + } +} + +void m4aSoundInit(void) +{ + s32 i; + + CpuCopy32((void *)((s32)SoundMainRAM & ~1), SoundMainRAM_Buffer, sizeof(SoundMainRAM_Buffer)); + + SoundInit(&gSoundInfo); + MPlayExtender(gCgbChans); + m4aSoundMode(SOUND_MODE_DA_BIT_8 + | SOUND_MODE_FREQ_13379 + | (12 << SOUND_MODE_MASVOL_SHIFT) + | (5 << SOUND_MODE_MAXCHN_SHIFT)); + + for (i = 0; i < NUM_MUSIC_PLAYERS; i++) + { + struct MusicPlayerInfo *mplayInfo = gMPlayTable[i].info; + MPlayOpen(mplayInfo, gMPlayTable[i].track, gMPlayTable[i].unk_8); + mplayInfo->unk_B = gMPlayTable[i].unk_A; + mplayInfo->memAccArea = gMPlayMemAccArea; + } + + memcpy(&gPokemonCrySong, &gPokemonCrySongTemplate, sizeof(struct PokemonCrySong)); + + for (i = 0; i < MAX_POKEMON_CRIES; i++) + { + struct MusicPlayerInfo *mplayInfo = &gPokemonCryMusicPlayers[i]; + struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2]; + MPlayOpen(mplayInfo, track, 2); + track->chan = 0; + } +} + +void m4aSoundMain(void) +{ + SoundMain(); +} + +void m4aSongNumStart(u16 n) +{ + const struct MusicPlayer *mplayTable = gMPlayTable; + const struct Song *songTable = gSongTable; + const struct Song *song = &songTable[n]; + const struct MusicPlayer *mplay = &mplayTable[song->ms]; + + MPlayStart(mplay->info, song->header); +} + +void m4aSongNumStartOrChange(u16 n) +{ + const struct MusicPlayer *mplayTable = gMPlayTable; + const struct Song *songTable = gSongTable; + const struct Song *song = &songTable[n]; + const struct MusicPlayer *mplay = &mplayTable[song->ms]; + + if (mplay->info->songHeader != song->header) + { + MPlayStart(mplay->info, song->header); + } + else + { + if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0 + || (mplay->info->status & MUSICPLAYER_STATUS_PAUSE)) + { + MPlayStart(mplay->info, song->header); + } + } +} + +void m4aSongNumStartOrContinue(u16 n) +{ + const struct MusicPlayer *mplayTable = gMPlayTable; + const struct Song *songTable = gSongTable; + const struct Song *song = &songTable[n]; + const struct MusicPlayer *mplay = &mplayTable[song->ms]; + + if (mplay->info->songHeader != song->header) + MPlayStart(mplay->info, song->header); + else if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0) + MPlayStart(mplay->info, song->header); + else if (mplay->info->status & MUSICPLAYER_STATUS_PAUSE) + MPlayContinue(mplay->info); +} + +void m4aSongNumStop(u16 n) +{ + const struct MusicPlayer *mplayTable = gMPlayTable; + const struct Song *songTable = gSongTable; + const struct Song *song = &songTable[n]; + const struct MusicPlayer *mplay = &mplayTable[song->ms]; + + if (mplay->info->songHeader == song->header) + m4aMPlayStop(mplay->info); +} + +void m4aSongNumContinue(u16 n) +{ + const struct MusicPlayer *mplayTable = gMPlayTable; + const struct Song *songTable = gSongTable; + const struct Song *song = &songTable[n]; + const struct MusicPlayer *mplay = &mplayTable[song->ms]; + + if (mplay->info->songHeader == song->header) + MPlayContinue(mplay->info); +} + +void m4aMPlayAllStop(void) +{ + s32 i; + + for (i = 0; i < NUM_MUSIC_PLAYERS; i++) + m4aMPlayStop(gMPlayTable[i].info); + + for (i = 0; i < MAX_POKEMON_CRIES; i++) + m4aMPlayStop(&gPokemonCryMusicPlayers[i]); +} + +void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo) +{ + MPlayContinue(mplayInfo); +} + +void m4aMPlayAllContinue(void) +{ + s32 i; + + for (i = 0; i < NUM_MUSIC_PLAYERS; i++) + MPlayContinue(gMPlayTable[i].info); + + for (i = 0; i < MAX_POKEMON_CRIES; i++) + MPlayContinue(&gPokemonCryMusicPlayers[i]); +} + +void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed) +{ + MPlayFadeOut(mplayInfo, speed); +} + +void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed) +{ + if (mplayInfo->ident == ID_NUMBER) + { + mplayInfo->ident++; + mplayInfo->fadeOC = speed; + mplayInfo->fadeOI = speed; + mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT) | TEMPORARY_FADE; + mplayInfo->ident = ID_NUMBER; + } +} + +void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed) +{ + if (mplayInfo->ident == ID_NUMBER) + { + mplayInfo->ident++; + mplayInfo->fadeOC = speed; + mplayInfo->fadeOI = speed; + mplayInfo->fadeOV = (0 << FADE_VOL_SHIFT) | FADE_IN; + mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE; + mplayInfo->ident = ID_NUMBER; + } +} + +void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo) +{ + s32 trackCount = mplayInfo->trackCount; + struct MusicPlayerTrack *track = mplayInfo->tracks; + + while (trackCount > 0) + { + if (track->flags & MPT_FLG_EXIST) + { + if (track->flags & MPT_FLG_START) + { + Clear64byte(track); + track->flags = MPT_FLG_EXIST; + track->bendRange = 2; + track->volX = 64; + track->lfoSpeed = 22; + track->tone.type = 1; + } + } + + trackCount--; + track++; + } +} + +void MPlayExtender(struct CgbChannel *cgbChans) +{ + struct SoundInfo *soundInfo; + u32 ident; + + REG_SOUNDCNT_X = SOUND_MASTER_ENABLE + | SOUND_4_ON + | SOUND_3_ON + | SOUND_2_ON + | SOUND_1_ON; + REG_SOUNDCNT_L = 0; // set master volume to zero + REG_NR12 = 0x8; + REG_NR22 = 0x8; + REG_NR42 = 0x8; + REG_NR14 = 0x80; + REG_NR24 = 0x80; + REG_NR44 = 0x80; + REG_NR30 = 0; + REG_NR50 = 0x77; + + soundInfo = SOUND_INFO_PTR; + + ident = soundInfo->ident; + + if (ident != ID_NUMBER) + return; + + soundInfo->ident++; + + gMPlayJumpTable[8] = ply_memacc; + gMPlayJumpTable[17] = ply_lfos; + gMPlayJumpTable[19] = ply_mod; + gMPlayJumpTable[28] = ply_xcmd; + gMPlayJumpTable[29] = ply_endtie; + gMPlayJumpTable[30] = SampleFreqSet; + gMPlayJumpTable[31] = TrackStop; + gMPlayJumpTable[32] = FadeOutBody; + gMPlayJumpTable[33] = TrkVolPitSet; + + soundInfo->cgbChans = (struct CgbChannel *)cgbChans; + soundInfo->CgbSound = CgbSound; + soundInfo->CgbOscOff = CgbOscOff; + soundInfo->MidiKeyToCgbFreq = MidiKeyToCgbFreq; + soundInfo->maxLines = MAX_LINES; + + CpuFill32(0, cgbChans, sizeof(struct CgbChannel) * 4); + + cgbChans[0].ty = 1; + cgbChans[0].panMask = 0x11; + cgbChans[1].ty = 2; + cgbChans[1].panMask = 0x22; + cgbChans[2].ty = 3; + cgbChans[2].panMask = 0x44; + cgbChans[3].ty = 4; + cgbChans[3].panMask = 0x88; + + soundInfo->ident = ident; +} + +void MusicPlayerJumpTableCopy(void) +{ + asm("swi 0x2A"); +} + +void ClearChain(void *x) +{ + void (*func)(void *) = *(&gMPlayJumpTable[34]); + func(x); +} + +void Clear64byte(void *x) +{ + void (*func)(void *) = *(&gMPlayJumpTable[35]); + func(x); +} + +void SoundInit(struct SoundInfo *soundInfo) +{ + soundInfo->ident = 0; + + if (REG_DMA1CNT & (DMA_REPEAT << 16)) + REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; + + if (REG_DMA2CNT & (DMA_REPEAT << 16)) + REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; + + REG_DMA1CNT_H = DMA_32BIT; + REG_DMA2CNT_H = DMA_32BIT; + REG_SOUNDCNT_X = SOUND_MASTER_ENABLE + | SOUND_4_ON + | SOUND_3_ON + | SOUND_2_ON + | SOUND_1_ON; + REG_SOUNDCNT_H = SOUND_B_FIFO_RESET | SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT + | SOUND_A_FIFO_RESET | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT + | SOUND_ALL_MIX_FULL; + REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40; + + REG_DMA1SAD = (s32)soundInfo->pcmBuffer; + REG_DMA1DAD = (s32)®_FIFO_A; + REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE; + REG_DMA2DAD = (s32)®_FIFO_B; + + SOUND_INFO_PTR = soundInfo; + CpuFill32(0, soundInfo, sizeof(struct SoundInfo)); + + soundInfo->maxChans = 8; + soundInfo->masterVolume = 15; + soundInfo->plynote = (u32)ply_note; + soundInfo->CgbSound = DummyFunc; + soundInfo->CgbOscOff = (void (*)(u8))DummyFunc; + soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc; + soundInfo->ExtVolPit = (u32)DummyFunc; + + MPlayJumpTableCopy(gMPlayJumpTable); + + soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable; + + SampleFreqSet(SOUND_MODE_FREQ_13379); + + soundInfo->ident = ID_NUMBER; +} + +void SampleFreqSet(u32 freq) +{ + struct SoundInfo *soundInfo = SOUND_INFO_PTR; + + freq = (freq & 0xF0000) >> 16; + soundInfo->freq = freq; + soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1]; + soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank; + + // LCD refresh rate 59.7275Hz + soundInfo->pcmFreq = (597275 * soundInfo->pcmSamplesPerVBlank + 5000) / 10000; + + // CPU frequency 16.78Mhz + soundInfo->divFreq = (16777216 / soundInfo->pcmFreq + 1) >> 1; + + // Turn off timer 0. + REG_TM0CNT_H = 0; + + // cycles per LCD fresh 280896 + REG_TM0CNT_L = -(280896 / soundInfo->pcmSamplesPerVBlank); + + m4aSoundVSyncOn(); + + while (*(vu8 *)REG_ADDR_VCOUNT == 159) + ; + + while (*(vu8 *)REG_ADDR_VCOUNT != 159) + ; + + REG_TM0CNT_H = TIMER_ENABLE | TIMER_1CLK; +} + +void m4aSoundMode(u32 mode) +{ + struct SoundInfo *soundInfo = SOUND_INFO_PTR; + u32 temp; + + if (soundInfo->ident != ID_NUMBER) + return; + + soundInfo->ident++; + + temp = mode & (SOUND_MODE_REVERB_SET | SOUND_MODE_REVERB_VAL); + + if (temp) + soundInfo->reverb = temp & SOUND_MODE_REVERB_VAL; + + temp = mode & SOUND_MODE_MAXCHN; + + if (temp) + { + struct SoundChannel *chan; + + soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT; + + temp = MAX_DIRECTSOUND_CHANNELS; + chan = &soundInfo->chans[0]; + + while (temp != 0) + { + chan->status = 0; + temp--; + chan++; + } + } + + temp = mode & SOUND_MODE_MASVOL; + + if (temp) + soundInfo->masterVolume = temp >> SOUND_MODE_MASVOL_SHIFT; + + temp = mode & SOUND_MODE_DA_BIT; + + if (temp) + { + temp = (temp & 0x300000) >> 14; + REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | temp; + } + + temp = mode & SOUND_MODE_FREQ; + + if (temp) + { + m4aSoundVSyncOff(); + SampleFreqSet(temp); + } + + soundInfo->ident = ID_NUMBER; +} + +void SoundClear(void) +{ + struct SoundInfo *soundInfo = SOUND_INFO_PTR; + s32 i; + void *chan; + + if (soundInfo->ident != ID_NUMBER) + return; + + soundInfo->ident++; + + i = MAX_DIRECTSOUND_CHANNELS; + chan = &soundInfo->chans[0]; + + while (i > 0) + { + ((struct SoundChannel *)chan)->status = 0; + i--; + chan = (void *)((s32)chan + sizeof(struct SoundChannel)); + } + + chan = soundInfo->cgbChans; + + if (chan) + { + i = 1; + + while (i <= 4) + { + soundInfo->CgbOscOff(i); + ((struct CgbChannel *)chan)->sf = 0; + i++; + chan = (void *)((s32)chan + sizeof(struct CgbChannel)); + } + } + + soundInfo->ident = ID_NUMBER; +} + +void m4aSoundVSyncOff(void) +{ + struct SoundInfo *soundInfo = SOUND_INFO_PTR; + + if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1) + { + soundInfo->ident += 10; + + if (REG_DMA1CNT & (DMA_REPEAT << 16)) + REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; + + if (REG_DMA2CNT & (DMA_REPEAT << 16)) + REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; + + REG_DMA1CNT_H = DMA_32BIT; + REG_DMA2CNT_H = DMA_32BIT; + + CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer)); + } +} + +void m4aSoundVSyncOn(void) +{ + struct SoundInfo *soundInfo = SOUND_INFO_PTR; + u32 ident = soundInfo->ident; + + if (ident == ID_NUMBER) + return; + + REG_DMA1CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT; + REG_DMA2CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT; + + soundInfo->pcmDmaCounter = 0; + soundInfo->ident = ident - 10; +} + +void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tracks, u8 trackCount) +{ + struct SoundInfo *soundInfo; + + if (trackCount == 0) + return; + + if (trackCount > MAX_MUSICPLAYER_TRACKS) + trackCount = MAX_MUSICPLAYER_TRACKS; + + soundInfo = SOUND_INFO_PTR; + + if (soundInfo->ident != ID_NUMBER) + return; + + soundInfo->ident++; + + Clear64byte(mplayInfo); + + mplayInfo->tracks = tracks; + mplayInfo->trackCount = trackCount; + mplayInfo->status = MUSICPLAYER_STATUS_PAUSE; + + while (trackCount != 0) + { + tracks->flags = 0; + trackCount--; + tracks++; + } + + if (soundInfo->func != 0) + { + mplayInfo->func = soundInfo->func; + mplayInfo->intp = soundInfo->intp; + soundInfo->func = 0; + } + + soundInfo->intp = (u32)mplayInfo; + soundInfo->func = (u32)MPlayMain; + soundInfo->ident = ID_NUMBER; + mplayInfo->ident = ID_NUMBER; +} + +void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader) +{ + s32 i; + u8 unk_B; + struct MusicPlayerTrack *track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + unk_B = mplayInfo->unk_B; + + if (!unk_B + || ((!mplayInfo->songHeader || !(mplayInfo->tracks[0].flags & MPT_FLG_START)) + && ((mplayInfo->status & MUSICPLAYER_STATUS_TRACK) == 0 + || (mplayInfo->status & MUSICPLAYER_STATUS_PAUSE))) + || (mplayInfo->priority <= songHeader->priority)) + { + mplayInfo->ident++; + mplayInfo->status = 0; + mplayInfo->songHeader = songHeader; + mplayInfo->tone = songHeader->tone; + mplayInfo->priority = songHeader->priority; + mplayInfo->clock = 0; + mplayInfo->tempoD = 150; + mplayInfo->tempoI = 150; + mplayInfo->tempoU = 0x100; + mplayInfo->tempoC = 0; + mplayInfo->fadeOI = 0; + + i = 0; + track = mplayInfo->tracks; + + while (i < songHeader->trackCount && i < mplayInfo->trackCount) + { + TrackStop(mplayInfo, track); + track->flags = MPT_FLG_EXIST | MPT_FLG_START; + track->chan = 0; + track->cmdPtr = songHeader->part[i]; + i++; + track++; + } + + while (i < mplayInfo->trackCount) + { + TrackStop(mplayInfo, track); + track->flags = 0; + i++; + track++; + } + + if (songHeader->reverb & 0x80) + m4aSoundMode(songHeader->reverb); + + mplayInfo->ident = ID_NUMBER; + } +} + +void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo) +{ + s32 i; + struct MusicPlayerTrack *track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + mplayInfo->ident++; + mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE; + + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + + while (i > 0) + { + TrackStop(mplayInfo, track); + i--; + track++; + } + + mplayInfo->ident = ID_NUMBER; +} + +void FadeOutBody(struct MusicPlayerInfo *mplayInfo) +{ + s32 i; + struct MusicPlayerTrack *track; + u16 fadeOI = mplayInfo->fadeOI; + register u32 temp asm("r3"); + register u16 mask asm("r2"); + + if (fadeOI == 0) + return; + + mplayInfo->fadeOC--; + + temp = 0xFFFF; + mask = temp; + + if (mplayInfo->fadeOC != 0) + return; + + mplayInfo->fadeOC = fadeOI; + + if (mplayInfo->fadeOV & FADE_IN) + { + mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT); + + if ((u16)(mplayInfo->fadeOV & mask) >= (64 << FADE_VOL_SHIFT)) + { + mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT); + mplayInfo->fadeOI = 0; + } + } + else + { + mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT); + + if ((s16)(mplayInfo->fadeOV & mask) <= 0) + { + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + + while (i > 0) + { + register u32 fadeOV asm("r7"); + u32 val; + + TrackStop(mplayInfo, track); + + val = TEMPORARY_FADE; + fadeOV = mplayInfo->fadeOV; + val &= fadeOV; + + if (!val) + track->flags = 0; + + i--; + track++; + } + + if (mplayInfo->fadeOV & TEMPORARY_FADE) + mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE; + else + mplayInfo->status = MUSICPLAYER_STATUS_PAUSE; + + mplayInfo->fadeOI = 0; + return; + } + } + + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + + while (i > 0) + { + if (track->flags & MPT_FLG_EXIST) + { + track->volX = (mplayInfo->fadeOV >> FADE_VOL_SHIFT); + track->flags |= MPT_FLG_VOLCHG; + } + + i--; + track++; + } +} + +void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + if (track->flags & MPT_FLG_VOLSET) + { + s32 x; + s32 y; + + x = (u32)(track->vol * track->volX) >> 5; + + if (track->modT == 1) + x = (u32)(x * (track->modM + 128)) >> 7; + + y = 2 * track->pan + track->panX; + + if (track->modT == 2) + y += track->modM; + + if (y < -128) + y = -128; + else if (y > 127) + y = 127; + + track->volMR = (u32)((y + 128) * x) >> 8; + track->volML = (u32)((127 - y) * x) >> 8; + } + + if (track->flags & MPT_FLG_PITSET) + { + s32 bend = track->bend * track->bendRange; + register s32 x asm("r1") = track->tune; + x += bend; + x *= 4; + x += (track->keyShift << 8); + x += (track->keyShiftX << 8); + x += track->pitX; + + if (track->modT == 0) + x += 16 * track->modM; + + track->keyM = x >> 8; + track->pitM = x; + } + + track->flags &= ~(MPT_FLG_PITSET | MPT_FLG_VOLSET); +} + +u32 MidiKeyToCgbFreq(u8 chanNum, u8 key, u8 fineAdjust) +{ + if (chanNum == 4) + { + if (key <= 20) + { + key = 0; + } + else + { + key -= 21; + if (key > 59) + key = 59; + } + + return gNoiseTable[key]; + } + else + { + s32 val1; + s32 val2; + + if (key <= 35) + { + fineAdjust = 0; + key = 0; + } + else + { + key -= 36; + if (key > 130) + { + key = 130; + fineAdjust = 255; + } + } + + val1 = gCgbScaleTable[key]; + val1 = gCgbFreqTable[val1 & 0xF] >> (val1 >> 4); + + val2 = gCgbScaleTable[key + 1]; + val2 = gCgbFreqTable[val2 & 0xF] >> (val2 >> 4); + + return val1 + ((fineAdjust * (val2 - val1)) >> 8) + 2048; + } +} + +void CgbOscOff(u8 chanNum) +{ + switch (chanNum) + { + case 1: + REG_NR12 = 8; + REG_NR14 = 0x80; + break; + case 2: + REG_NR22 = 8; + REG_NR24 = 0x80; + break; + case 3: + REG_NR30 = 0; + break; + default: + REG_NR42 = 8; + REG_NR44 = 0x80; + } +} + +static inline int CgbPan(struct CgbChannel *chan) +{ + u32 rightVolume = chan->rightVolume; + u32 leftVolume = chan->leftVolume; + + if ((rightVolume = (u8)rightVolume) >= (leftVolume = (u8)leftVolume)) + { + if (rightVolume / 2 >= leftVolume) + { + chan->pan = 0x0F; + return 1; + } + } + else + { + if (leftVolume / 2 >= rightVolume) + { + chan->pan = 0xF0; + return 1; + } + } + + return 0; +} + +void CgbModVol(struct CgbChannel *chan) +{ + struct SoundInfo *soundInfo = SOUND_INFO_PTR; + + if ((soundInfo->mode & 1) || !CgbPan(chan)) + { + chan->pan = 0xFF; + chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4; + } + else + { + // Force chan->rightVolume and chan->leftVolume to be read from memory again, + // even though there is no reason to do so. + // The command line option "-fno-gcse" achieves the same result as this. + asm("" : : : "memory"); + + chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4; + if (chan->eg > 15) + chan->eg = 15; + } + + chan->sg = (chan->eg * chan->su + 15) >> 4; + chan->pan &= chan->panMask; +} diff --git a/src/engine/m4a_4.c b/src/engine/m4a_4.c new file mode 100644 index 000000000..99195ec00 --- /dev/null +++ b/src/engine/m4a_4.c @@ -0,0 +1,545 @@ +#include "gba/m4a_internal.h" + +void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo) +{ + if (mplayInfo->ident == ID_NUMBER) + { + mplayInfo->ident++; + mplayInfo->tempoU = tempo; + mplayInfo->tempoI = (mplayInfo->tempoD * mplayInfo->tempoU) >> 8; + mplayInfo->ident = ID_NUMBER; + } +} + +void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume) +{ + s32 i; + u32 bit; + struct MusicPlayerTrack *track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + mplayInfo->ident++; + + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + bit = 1; + + while (i > 0) + { + if (trackBits & bit) + { + if (track->flags & MPT_FLG_EXIST) + { + track->volX = volume / 4; + track->flags |= MPT_FLG_VOLCHG; + } + } + + i--; + track++; + bit <<= 1; + } + + mplayInfo->ident = ID_NUMBER; +} + +void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 pitch) +{ + s32 i; + u32 bit; + struct MusicPlayerTrack *track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + mplayInfo->ident++; + + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + bit = 1; + + while (i > 0) + { + if (trackBits & bit) + { + if (track->flags & MPT_FLG_EXIST) + { + track->keyShiftX = (s16)pitch >> 8; + track->pitX = pitch; + track->flags |= MPT_FLG_PITCHG; + } + } + + i--; + track++; + bit <<= 1; + } + + mplayInfo->ident = ID_NUMBER; +} + +void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan) +{ + s32 i; + u32 bit; + struct MusicPlayerTrack *track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + mplayInfo->ident++; + + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + bit = 1; + + while (i > 0) + { + if (trackBits & bit) + { + if (track->flags & MPT_FLG_EXIST) + { + track->panX = pan; + track->flags |= MPT_FLG_VOLCHG; + } + } + + i--; + track++; + bit <<= 1; + } + + mplayInfo->ident = ID_NUMBER; +} + +void ClearModM(struct MusicPlayerTrack *track) +{ + track->lfoSpeedC = 0; + track->modM = 0; + + if (track->modT == 0) + track->flags |= MPT_FLG_PITCHG; + else + track->flags |= MPT_FLG_VOLCHG; +} + +void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth) +{ + s32 i; + u32 bit; + struct MusicPlayerTrack *track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + mplayInfo->ident++; + + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + bit = 1; + + while (i > 0) + { + if (trackBits & bit) + { + if (track->flags & MPT_FLG_EXIST) + { + track->mod = modDepth; + + if (!track->mod) + ClearModM(track); + } + } + + i--; + track++; + bit <<= 1; + } + + mplayInfo->ident = ID_NUMBER; +} + +void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed) +{ + s32 i; + u32 bit; + struct MusicPlayerTrack *track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + mplayInfo->ident++; + + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + bit = 1; + + while (i > 0) + { + if (trackBits & bit) + { + if (track->flags & MPT_FLG_EXIST) + { + track->lfoSpeed = lfoSpeed; + + if (!track->lfoSpeed) + ClearModM(track); + } + } + + i--; + track++; + bit <<= 1; + } + + mplayInfo->ident = ID_NUMBER; +} + +#define MEMACC_COND_JUMP(cond) \ +if (cond) \ + goto cond_true; \ +else \ + goto cond_false; \ + +void ply_memacc(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + u32 op; + u8 *addr; + u8 data; + + op = *track->cmdPtr; + track->cmdPtr++; + + addr = mplayInfo->memAccArea + *track->cmdPtr; + track->cmdPtr++; + + data = *track->cmdPtr; + track->cmdPtr++; + + switch (op) + { + case 0: + *addr = data; + return; + case 1: + *addr += data; + return; + case 2: + *addr -= data; + return; + case 3: + *addr = mplayInfo->memAccArea[data]; + return; + case 4: + *addr += mplayInfo->memAccArea[data]; + return; + case 5: + *addr -= mplayInfo->memAccArea[data]; + return; + case 6: + MEMACC_COND_JUMP(*addr == data) + return; + case 7: + MEMACC_COND_JUMP(*addr != data) + return; + case 8: + MEMACC_COND_JUMP(*addr > data) + return; + case 9: + MEMACC_COND_JUMP(*addr >= data) + return; + case 10: + MEMACC_COND_JUMP(*addr <= data) + return; + case 11: + MEMACC_COND_JUMP(*addr < data) + return; + case 12: + MEMACC_COND_JUMP(*addr == mplayInfo->memAccArea[data]) + return; + case 13: + MEMACC_COND_JUMP(*addr != mplayInfo->memAccArea[data]) + return; + case 14: + MEMACC_COND_JUMP(*addr > mplayInfo->memAccArea[data]) + return; + case 15: + MEMACC_COND_JUMP(*addr >= mplayInfo->memAccArea[data]) + return; + case 16: + MEMACC_COND_JUMP(*addr <= mplayInfo->memAccArea[data]) + return; + case 17: + MEMACC_COND_JUMP(*addr < mplayInfo->memAccArea[data]) + return; + default: + return; + } + +cond_true: + { + void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[1]); + func(mplayInfo, track); + return; + } + +cond_false: + track->cmdPtr += 4; +} + +void ply_xcmd(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + u32 n = *track->cmdPtr; + track->cmdPtr++; + + gXcmdTable[n](mplayInfo, track); +} + +void ply_xxx(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[0]); + func(mplayInfo, track); +} + +#define READ_XCMD_BYTE(var, n) \ +{ \ + u32 byte = track->cmdPtr[(n)]; \ + byte <<= n * 8; \ + (var) &= ~(0xFF << (n * 8)); \ + (var) |= byte; \ +} + +void ply_xwave(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + u32 wav; + + READ_XCMD_BYTE(wav, 0) // UB: uninitialized variable + READ_XCMD_BYTE(wav, 1) + READ_XCMD_BYTE(wav, 2) + READ_XCMD_BYTE(wav, 3) + + track->tone.wav = (struct WaveData *)wav; + track->cmdPtr += 4; +} + +void ply_xtype(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->tone.type = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xatta(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->tone.attack = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xdeca(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->tone.decay = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xsust(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->tone.sustain = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xrele(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->tone.release = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xiecv(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->echoVolume = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xiecl(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->echoLength = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xleng(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->tone.length = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xswee(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->tone.pan_sweep = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + u32 unk; + + READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable + READ_XCMD_BYTE(unk, 1) + + if (track->unk_3A < (u16)unk) + { + track->unk_3A++; + track->cmdPtr -= 2; + track->wait = 1; + } + else + { + track->unk_3A = 0; + track->cmdPtr += 2; + } +} + +void ply_xcmd_0D(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + u32 unk; + + READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable + READ_XCMD_BYTE(unk, 1) + READ_XCMD_BYTE(unk, 2) + READ_XCMD_BYTE(unk, 3) + + track->unk_3C = unk; + track->cmdPtr += 4; +} + +void DummyFunc(void) +{ +} + +struct MusicPlayerInfo *SetPokemonCryTone(struct ToneData *tone) +{ + u32 maxClock = 0; + s32 maxClockIndex = 0; + s32 i; + struct MusicPlayerInfo *mplayInfo; + + for (i = 0; i < MAX_POKEMON_CRIES; i++) + { + struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2]; + + if (!track->flags && (!track->chan || track->chan->track != track)) + goto start_song; + + if (maxClock < gPokemonCryMusicPlayers[i].clock) + { + maxClock = gPokemonCryMusicPlayers[i].clock; + maxClockIndex = i; + } + } + + i = maxClockIndex; + +start_song: + mplayInfo = &gPokemonCryMusicPlayers[i]; + mplayInfo->ident++; + +#define CRY ((s32)&gPokemonCrySongs + i * sizeof(struct PokemonCrySong)) +#define CRY_OFS(field) offsetof(struct PokemonCrySong, field) + + memcpy((void *)CRY, &gPokemonCrySong, sizeof(struct PokemonCrySong)); + + *(u32 *)(CRY + CRY_OFS(tone)) = (u32)tone; + *(u32 *)(CRY + CRY_OFS(part)) = CRY + CRY_OFS(part0); + *(u32 *)(CRY + CRY_OFS(part) + 4) = CRY + CRY_OFS(part1); + *(u32 *)(CRY + CRY_OFS(gotoTarget)) = CRY + CRY_OFS(cont); + +#undef CRY_OFS +#undef CRY + + mplayInfo->ident = ID_NUMBER; + + MPlayStart(mplayInfo, (struct SongHeader *)(&gPokemonCrySongs[i])); + + return mplayInfo; +} + +void SetPokemonCryVolume(u8 val) +{ + gPokemonCrySong.volumeValue = val & 0x7F; +} + +void SetPokemonCryPanpot(s8 val) +{ + gPokemonCrySong.panValue = (val + C_V) & 0x7F; +} + +void SetPokemonCryPitch(s16 val) +{ + s16 b = val + 0x80; + u8 a = gPokemonCrySong.tuneValue2 - gPokemonCrySong.tuneValue; + gPokemonCrySong.tieKeyValue = (b >> 8) & 0x7F; + gPokemonCrySong.tuneValue = (b >> 1) & 0x7F; + gPokemonCrySong.tuneValue2 = (a + ((b >> 1) & 0x7F)) & 0x7F; +} + +void SetPokemonCryLength(u16 val) +{ + gPokemonCrySong.unkCmd0CParam = val; +} + +void SetPokemonCryRelease(u8 val) +{ + gPokemonCrySong.releaseValue = val; +} + +void SetPokemonCryProgress(u32 val) +{ + gPokemonCrySong.unkCmd0DParam = val; +} + +int IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo) +{ + struct MusicPlayerTrack *track = mplayInfo->tracks; + + if (track->chan && track->chan->track == track) + return 1; + else + return 0; +} + +void SetPokemonCryChorus(s8 val) +{ + if (val) + { + gPokemonCrySong.trackCount = 2; + gPokemonCrySong.tuneValue2 = (val + gPokemonCrySong.tuneValue) & 0x7F; + } + else + { + gPokemonCrySong.trackCount = 1; + } +} + +void SetPokemonCryStereo(u32 val) +{ + struct SoundInfo *soundInfo = SOUND_INFO_PTR; + + if (val) + { + REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT + | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT + | SOUND_ALL_MIX_FULL; + soundInfo->mode &= ~1; + } + else + { + REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT | SOUND_B_RIGHT_OUTPUT + | SOUND_A_TIMER_0 | SOUND_A_LEFT_OUTPUT | SOUND_A_RIGHT_OUTPUT + | SOUND_B_MIX_HALF | SOUND_A_MIX_HALF | SOUND_CGB_MIX_FULL; + soundInfo->mode |= 1; + } +} + +void SetPokemonCryPriority(u8 val) +{ + gPokemonCrySong.priority = val; +} diff --git a/src/engine/m4a_tables.c b/src/engine/m4a_tables.c new file mode 100644 index 000000000..91f00a31d --- /dev/null +++ b/src/engine/m4a_tables.c @@ -0,0 +1,307 @@ +#include "gba/m4a_internal.h" + +// Some of these functions have different signatures, so we need to make this +// an array of void pointers or a struct. It's simpler to just make it an array +// for now. +void * const gMPlayJumpTableTemplate[] = +{ + ply_fine, + ply_goto, + ply_patt, + ply_pend, + ply_rept, + ply_fine, + ply_fine, + ply_fine, + ply_fine, + ply_prio, + ply_tempo, + ply_keysh, + ply_voice, + ply_vol, + ply_pan, + ply_bend, + ply_bendr, + ply_lfos, + ply_lfodl, + ply_mod, + ply_modt, + ply_fine, + ply_fine, + ply_tune, + ply_fine, + ply_fine, + ply_fine, + ply_port, + ply_fine, + ply_endtie, + SampleFreqSet, + TrackStop, + FadeOutBody, + TrkVolPitSet, + RealClearChain, + SoundMainBTM, +}; + +// This is a table of deltas between sample values in compressed PCM data. +const s8 gDeltaEncodingTable[] = +{ + 0, + 1, + 4, + 9, + 16, + 25, + 36, + 49, + -64, + -49, + -36, + -25, + -16, + -9, + -4, + -1, +}; + +const u8 gScaleTable[] = +{ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, +}; + +const u32 gFreqTable[] = +{ + 2147483648u, + 2275179671u, + 2410468894u, + 2553802834u, + 2705659852u, + 2866546760u, + 3037000500u, + 3217589947u, + 3408917802u, + 3611622603u, + 3826380858u, + 4053909305u, +}; + +const u16 gPcmSamplesPerVBlankTable[] = +{ + 96, + 132, + 176, + 224, + 264, + 304, + 352, + 448, + 528, + 608, + 672, + 704, +}; + +const u8 gCgbScaleTable[] = +{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, +}; + +const s16 gCgbFreqTable[] = +{ + -2004, + -1891, + -1785, + -1685, + -1591, + -1501, + -1417, + -1337, + -1262, + -1192, + -1125, + -1062, +}; + +const u8 gNoiseTable[] = +{ + 0xD7, 0xD6, 0xD5, 0xD4, + 0xC7, 0xC6, 0xC5, 0xC4, + 0xB7, 0xB6, 0xB5, 0xB4, + 0xA7, 0xA6, 0xA5, 0xA4, + 0x97, 0x96, 0x95, 0x94, + 0x87, 0x86, 0x85, 0x84, + 0x77, 0x76, 0x75, 0x74, + 0x67, 0x66, 0x65, 0x64, + 0x57, 0x56, 0x55, 0x54, + 0x47, 0x46, 0x45, 0x44, + 0x37, 0x36, 0x35, 0x34, + 0x27, 0x26, 0x25, 0x24, + 0x17, 0x16, 0x15, 0x14, + 0x07, 0x06, 0x05, 0x04, + 0x03, 0x02, 0x01, 0x00, +}; + +const u8 gCgb3Vol[] = +{ + 0x00, 0x00, + 0x60, 0x60, 0x60, 0x60, + 0x40, 0x40, 0x40, 0x40, + 0x80, 0x80, 0x80, 0x80, + 0x20, 0x20, +}; + +const u8 gClockTable[] = +{ + 0x00, + 0x01, + 0x02, + 0x03, + 0x04, + 0x05, + 0x06, + 0x07, + 0x08, + 0x09, + 0x0A, + 0x0B, + 0x0C, + 0x0D, + 0x0E, + 0x0F, + 0x10, + 0x11, + 0x12, + 0x13, + 0x14, + 0x15, + 0x16, + 0x17, + 0x18, + 0x1C, + 0x1E, + 0x20, + 0x24, + 0x28, + 0x2A, + 0x2C, + 0x30, + 0x34, + 0x36, + 0x38, + 0x3C, + 0x40, + 0x42, + 0x44, + 0x48, + 0x4C, + 0x4E, + 0x50, + 0x54, + 0x58, + 0x5A, + 0x5C, + 0x60, +}; + +#define FINE 0xb1 +#define GOTO 0xb2 +#define PATT 0xb3 +#define PEND 0xb4 +#define REPT 0xb5 +#define MEMACC 0xb9 +#define PRIO 0xba +#define TEMPO 0xbb +#define KEYSH 0xbc +#define VOICE 0xbd +#define VOL 0xbe +#define PAN 0xbf +#define BEND 0xc0 +#define BENDR 0xc1 +#define LFOS 0xc2 +#define LFODL 0xc3 +#define MOD 0xc4 +#define MODT 0xc5 +#define TUNE 0xc8 + +#define XCMD 0xcd +#define xRELE 0x07 +#define xIECV 0x08 +#define xIECL 0x09 + +#define EOT 0xce +#define TIE 0xcf + +const struct PokemonCrySong gPokemonCrySongTemplate = +{ + 1, // track count + 0, // block count + 255, // priority + 0, // reverb + (struct ToneData *)&voicegroup_pokemon_cry, + NULL, + NULL, + 0, + TUNE, // part 0 + C_V, // TUNE value + GOTO, + 0, // GOTO target address + TUNE, // part 1 + C_V + 16, // TUNE value + {VOICE, 0}, // part 0 jumps here with GOTO + VOL, + 127, // volume + {XCMD, 0x0D}, + 0, // unk value + {XCMD, xRELE}, + 0, // release + PAN, + C_V, // PAN value + TIE, + 60, // TIE key (default is Cn3) + 127, // TIE velocity + {XCMD, 0x0C}, + 60, // unk value + {EOT, FINE} // end +}; + +const XcmdFunc gXcmdTable[] = +{ + ply_xxx, + ply_xwave, + ply_xtype, + ply_xxx, + ply_xatta, + ply_xdeca, + ply_xsust, + ply_xrele, + ply_xiecv, + ply_xiecl, + ply_xleng, + ply_xswee, + ply_xcmd_0C, + ply_xcmd_0D, +}; diff --git a/src/engine/main.c b/src/engine/main.c new file mode 100644 index 000000000..afaa0e77a --- /dev/null +++ b/src/engine/main.c @@ -0,0 +1,363 @@ +#include "global.h" +#include "gba/flash_internal.h" +#include "gba/m4a_internal.h" +#include "main.h" +#include "intro.h" +#include "link.h" +#include "load_save.h" +#include "m4a.h" +#include "play_time.h" +#include "rng.h" +#include "rom3.h" +#include "rom4.h" +#include "rtc.h" +#include "siirtc.h" +#include "sound.h" +#include "unknown_task.h" + +extern struct SoundInfo gSoundInfo; +extern u32 IntrMain[]; + +static void VBlankIntr(void); +static void HBlankIntr(void); +static void VCountIntr(void); +static void SerialIntr(void); +static void IntrDummy(void); + +#ifdef SAPPHIRE +#define GAME_VERSION VERSION_SAPPHIRE +#else +#define GAME_VERSION VERSION_RUBY +#endif + +const u8 gGameVersion = GAME_VERSION; + +const u8 gGameLanguage = GAME_LANGUAGE; + +#if defined(ENGLISH) +const char BuildDateTime[] = "2002 10 15 20:34"; +#elif defined(GERMAN) +const char BuildDateTime[] = "$Name: debug-Euro-2003-05-09-A $"; +#endif + +const IntrFunc gIntrTableTemplate[] = +{ + SerialIntr, // Serial interrupt + Timer3Intr, // Timer 3 interrupt + HBlankIntr, // H-blank interrupt + VBlankIntr, // V-blank interrupt + VCountIntr, // V-count interrupt + IntrDummy, // Timer 0 interrupt + IntrDummy, // Timer 1 interrupt + IntrDummy, // Timer 2 interrupt + IntrDummy, // DMA 0 interrupt + IntrDummy, // DMA 1 interrupt + IntrDummy, // DMA 2 interrupt + IntrDummy, // DMA 3 interrupt + IntrDummy, // Key interrupt + IntrDummy, // Game Pak interrupt +}; + +#define INTR_COUNT ((int)(sizeof(gIntrTableTemplate)/sizeof(IntrFunc))) + +u16 gKeyRepeatStartDelay; +bool8 gLinkTransferringData; +struct Main gMain; +u16 gKeyRepeatContinueDelay; +u8 gSoftResetDisabled; +IntrFunc gIntrTable[INTR_COUNT]; +bool8 gLinkVSyncDisabled; +u32 IntrMain_Buffer[0x200]; +u8 gPcmDmaCounter; + +EWRAM_DATA void (**gFlashTimerIntrFunc)(void) = NULL; + +static void UpdateLinkAndCallCallbacks(void); +static void InitMainCallbacks(void); +static void CallCallbacks(void); +static void SeedRngWithRtc(void); +static void ReadKeys(void); +static void InitIntrHandlers(void); +static void WaitForVBlank(void); + +#define B_START_SELECT (B_BUTTON | START_BUTTON | SELECT_BUTTON) + +void AgbMain() +{ + RegisterRamReset(RESET_ALL); + REG_WAITCNT = WAITCNT_PREFETCH_ENABLE | WAITCNT_WS0_S_1 | WAITCNT_WS0_N_3; + InitKeys(); + InitIntrHandlers(); + m4aSoundInit(); + RtcInit(); + CheckForFlashMemory(); + InitMainCallbacks(); + InitMapMusic(); + SeedRngWithRtc(); + + gSoftResetDisabled = FALSE; + + if (gFlashMemoryPresent != TRUE) + SetMainCallback2(NULL); + + gLinkTransferringData = FALSE; + + for (;;) + { + ReadKeys(); + + if (gSoftResetDisabled == FALSE + && (gMain.heldKeysRaw & A_BUTTON) + && (gMain.heldKeysRaw & B_START_SELECT) == B_START_SELECT) + DoSoftReset(); + + if (gLink.sendQueue.count > 1 && sub_8055910() == 1) + { + gLinkTransferringData = TRUE; + UpdateLinkAndCallCallbacks(); + gLinkTransferringData = FALSE; + } + else + { + gLinkTransferringData = FALSE; + UpdateLinkAndCallCallbacks(); + + if (gLink.recvQueue.count > 1) + { + if (sub_80558AC() == 1) + { + gMain.newKeys = 0; + gLinkTransferringData = TRUE; + UpdateLinkAndCallCallbacks(); + gLinkTransferringData = FALSE; + } + } + } + + PlayTimeCounter_Update(); + MapMusicMain(); + WaitForVBlank(); + } +} + +static void UpdateLinkAndCallCallbacks(void) +{ + gLinkStatus = LinkMain1(&gShouldAdvanceLinkState, gSendCmd, gRecvCmds); + LinkMain2(&gMain.heldKeys); + if (!(gLinkStatus & LINK_STAT_RECEIVED_NOTHING) || sub_8055940() != 1) + CallCallbacks(); +} + +static void InitMainCallbacks(void) +{ + gMain.vblankCounter1 = 0; + gMain.vblankCounter2 = 0; + gMain.callback1 = NULL; + SetMainCallback2(CB2_InitCopyrightScreenAfterBootup); +} + +static void CallCallbacks(void) +{ + if (gMain.callback1) + gMain.callback1(); + + if (gMain.callback2) + gMain.callback2(); +} + +void SetMainCallback2(MainCallback callback) +{ + gMain.callback2 = callback; + gMain.state = 0; +} + +static void SeedRngWithRtc(void) +{ + u32 seed = RtcGetMinuteCount(); + seed = (seed >> 16) ^ (seed & 0xFFFF); + SeedRng(seed); +} + +void InitKeys(void) +{ + gKeyRepeatContinueDelay = 5; + gKeyRepeatStartDelay = 40; + + gMain.heldKeys = 0; + gMain.newKeys = 0; + gMain.newAndRepeatedKeys = 0; + gMain.heldKeysRaw = 0; + gMain.newKeysRaw = 0; +} + +static void ReadKeys(void) +{ + u16 keyInput = REG_KEYINPUT ^ KEYS_MASK; + gMain.newKeysRaw = keyInput & ~gMain.heldKeysRaw; + gMain.newKeys = gMain.newKeysRaw; + gMain.newAndRepeatedKeys = gMain.newKeysRaw; + + // BUG: Key repeat won't work when pressing L using L=A button mode + // because it compares the raw key input with the remapped held keys. + // Note that newAndRepeatedKeys is never remapped either. + + if (keyInput != 0 && gMain.heldKeys == keyInput) + { + gMain.keyRepeatCounter--; + + if (gMain.keyRepeatCounter == 0) + { + gMain.newAndRepeatedKeys = keyInput; + gMain.keyRepeatCounter = gKeyRepeatContinueDelay; + } + } + else + { + // If there is no input or the input has changed, reset the counter. + gMain.keyRepeatCounter = gKeyRepeatStartDelay; + } + + gMain.heldKeysRaw = keyInput; + gMain.heldKeys = gMain.heldKeysRaw; + + // Remap L to A if the L=A option is enabled. + if (gSaveBlock2.optionsButtonMode == 2) + { + if (gMain.newKeys & L_BUTTON) + gMain.newKeys |= A_BUTTON; + + if (gMain.heldKeys & L_BUTTON) + gMain.heldKeys |= A_BUTTON; + } + + if (gMain.newKeys & gMain.watchedKeysMask) + gMain.watchedKeysPressed = TRUE; +} + +static void InitIntrHandlers(void) +{ + int i; + + for (i = 0; i < INTR_COUNT; i++) + gIntrTable[i] = gIntrTableTemplate[i]; + + DmaCopy32(3, IntrMain, IntrMain_Buffer, sizeof(IntrMain_Buffer)); + + INTR_VECTOR = IntrMain_Buffer; + + SetVBlankCallback(NULL); + SetHBlankCallback(NULL); + SetSerialCallback(NULL); + + REG_IME = 1; + REG_IE = INTR_FLAG_VBLANK; + REG_DISPSTAT = DISPSTAT_VBLANK_INTR; + REG_IE |= INTR_FLAG_VBLANK; +} + +void SetVBlankCallback(IntrCallback callback) +{ + gMain.vblankCallback = callback; +} + +void SetHBlankCallback(IntrCallback callback) +{ + gMain.hblankCallback = callback; +} + +void SetVCountCallback(IntrCallback callback) +{ + gMain.vcountCallback = callback; +} + +void SetSerialCallback(IntrCallback callback) +{ + gMain.serialCallback = callback; +} + +static void VBlankIntr(void) +{ + u16 savedIme; + + if (!gLinkVSyncDisabled) + LinkVSync(); + + savedIme = REG_IME; + REG_IME = 0; + m4aSoundVSync(); + REG_IME = savedIme; + + gMain.vblankCounter1++; + + if (gMain.vblankCallback) + gMain.vblankCallback(); + + gMain.vblankCounter2++; + + gPcmDmaCounter = gSoundInfo.pcmDmaCounter; + + m4aSoundMain(); + sub_800C35C(); + Random(); + + INTR_CHECK |= INTR_FLAG_VBLANK; + gMain.intrCheck |= INTR_FLAG_VBLANK; +} + +void InitFlashTimer(void) +{ + SetFlashTimerIntr(2, gFlashTimerIntrFunc); +} + +static void HBlankIntr(void) +{ + if (gMain.hblankCallback) + gMain.hblankCallback(); + + INTR_CHECK |= INTR_FLAG_HBLANK; + gMain.intrCheck |= INTR_FLAG_HBLANK; +} + +static void VCountIntr(void) +{ + if (gMain.vcountCallback) + gMain.vcountCallback(); + + INTR_CHECK |= INTR_FLAG_VCOUNT; + gMain.intrCheck |= INTR_FLAG_VCOUNT; +} + +static void SerialIntr(void) +{ + if (gMain.serialCallback) + gMain.serialCallback(); + + INTR_CHECK |= INTR_FLAG_SERIAL; + gMain.intrCheck |= INTR_FLAG_SERIAL; +} + +static void IntrDummy(void) +{} + +static void WaitForVBlank(void) +{ + gMain.intrCheck &= ~INTR_FLAG_VBLANK; + VBlankIntrWait(); +} + +void DoSoftReset(void) +{ + REG_IME = 0; + m4aSoundVSyncOff(); + remove_some_task(); + DmaStop(1); + DmaStop(2); + DmaStop(3); + SiiRtcProtect(); + SoftReset(RESET_ALL); +} + +void ClearPokemonCrySongs(void) +{ + CpuFill16(0, gPokemonCrySongs, MAX_POKEMON_CRIES * sizeof(struct PokemonCrySong)); +} diff --git a/src/engine/main_menu.c b/src/engine/main_menu.c new file mode 100644 index 000000000..09fd06d9e --- /dev/null +++ b/src/engine/main_menu.c @@ -0,0 +1,1639 @@ +#include "global.h" +#include "main_menu.h" +#include "data2.h" +#include "decompress.h" +#include "event_data.h" +#include "field_effect.h" +#include "menu.h" +#include "mystery_event_menu.h" +#include "naming_screen.h" +#include "option_menu.h" +#include "palette.h" +#include "pokeball.h" +#include "rom4.h" +#include "rtc.h" +#include "save_menu_util.h" +#include "songs.h" +#include "sound.h" +#include "species.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "title_screen.h" +#include "unknown_task.h" + +#define BirchSpeechUpdateWindowText() ((u8)MenuUpdateWindowText_OverrideLineLength(24)) + +extern struct PaletteFadeControl gPaletteFade; + +extern u16 gSaveFileStatus; + +extern u16 gMainMenuPalette[]; + +extern const u8 gBirchSpeech_Welcome[]; +extern const u8 gBirchSpeech_ThisIsPokemon[]; +extern const u8 gBirchSpeech_WorldInhabitedByPokemon[]; +extern const u8 gBirchSpeech_AndYouAre[]; +extern const u8 gBirchSpeech_AreYouBoyOrGirl[]; +extern const u8 gBirchSpeech_WhatsYourName[]; +extern u8 gBirchSpeech_SoItsPlayer[]; +extern u8 gBirchSpeech_AhOkayYouArePlayer[]; +extern u8 gBirchSpeech_AreYouReady[]; + +extern struct SpriteTemplate gUnknown_02024E8C; +extern u16 gUnknown_081E795C[]; +extern const struct MenuAction gUnknown_081E79B0[]; +extern const struct MenuAction gMalePresetNames[]; +extern const struct MenuAction gFemalePresetNames[]; + +extern const u8 gUnknown_081E764C[]; +extern const u8 gBirchIntroShadowGfx[]; +extern const u8 gUnknown_081E7834[]; +extern const u8 gUnknown_081E796C[]; + +extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E79AC[]; + +extern u8 unk_2000000[]; + +//Task data +enum { + TD_MENULAYOUT, + TD_SELECTEDMENUITEM, +}; + +//Menu layouts +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); +static u32 InitMainMenu(bool8 a1); +static void Task_MainMenuCheckSave(u8 taskId); +static void Task_MainMenuWaitForSaveErrorAck(u8 taskId); +static void Task_MainMenuCheckRtc(u8 taskId); +static void Task_MainMenuWaitForRtcErrorAck(u8 taskId); +static void Task_MainMenuDraw(u8 taskId); +static void Task_MainMenuHighlight(u8 taskId); +static bool8 MainMenuProcessKeyInput(u8 taskId); +static void Task_MainMenuProcessKeyInput(u8 taskId); +static void Task_MainMenuPressedA(u8 taskId); +static void Task_MainMenuPressedB(u8 taskId); +static void HighlightCurrentMenuItem(u8 layout, u8 menuItem); +static void PrintMainMenuItem(const u8 *text, u8 left, u8 top); +static void PrintSaveFileInfo(void); +static void PrintPlayerName(void); +static void PrintPlayTime(void); +static void PrintPokedexCount(void); +static void PrintBadgeCount(void); +static void Task_NewGameSpeech1(u8 taskId); +static void Task_NewGameSpeech2(u8 taskId); +static void Task_NewGameSpeech3(u8 taskId); +static void Task_NewGameSpeech4(u8 taskId); +static void Task_NewGameSpeech5(u8 taskId); +static void Task_NewGameSpeech6(u8 taskId); +static void Task_NewGameSpeech7(u8 taskId); +static void Task_NewGameSpeech8(u8 taskId); +static void Task_NewGameSpeech9(u8 taskId); +static void Task_NewGameSpeech10(u8 taskId); +static void Task_NewGameSpeech11(u8 taskId); +static void Task_NewGameSpeech12(u8 taskId); +static void Task_NewGameSpeech13(u8 taskId); +static void Task_NewGameSpeech14(u8 taskId); +static void Task_NewGameSpeech15(u8 taskId); +static void Task_NewGameSpeech16(u8 taskId); +static void Task_NewGameSpeech17(u8 taskId); +static void Task_NewGameSpeech18(u8 taskId); +static void Task_NewGameSpeech19(u8 taskId); +static void Task_NewGameSpeech20(u8 taskId); +static void Task_NewGameSpeech21(u8 taskId); +static void Task_NewGameSpeech22(u8 taskId); +static void Task_NewGameSpeech23(u8 taskId); +static void Task_NewGameSpeech24(u8 taskId); +static void Task_NewGameSpeech25(u8 taskId); +static void Task_NewGameSpeech26(u8 taskId); +static void Task_NewGameSpeech27(u8 taskId); +static void Task_NewGameSpeech28(u8 taskId); +static void Task_NewGameSpeech29(u8 taskId); +static void Task_NewGameSpeech30(u8 taskId); +static void Task_NewGameSpeech31(u8 taskId); +static void Task_NewGameSpeech32(u8 taskId); +static void Task_NewGameSpeech33(u8 taskId); +static void CB_ContinueNewGameSpeechPart2(); +static void nullsub_34(struct Sprite *sprite); +static void ShrinkPlayerSprite(struct Sprite *sprite); +static u8 CreateAzurillSprite(u8 x, u8 y); +static void AddBirchSpeechObjects(u8 taskId); +static void Task_SpriteFadeOut(u8 taskId); +static void StartSpriteFadeOut(u8 taskId, u8 interval); +static void Task_SpriteFadeIn(u8 taskId); +static void StartSpriteFadeIn(u8 taskId, u8 interval); +static void HandleFloorShadowFadeOut(u8 taskId); +static void StartBackgroundFadeOut(u8 taskId, u8 interval); +static void HandleFloorShadowFadeIn(u8 taskId); +static void StartBackgroundFadeIn(u8 taskId, u8 interval); +static void CreateGenderMenu(u8 left, u8 top); +static s8 GenderMenuProcessInput(void); +static void CreateNameMenu(u8 left, u8 top); +static s8 NameMenuProcessInput(void); +static void SetPresetPlayerName(u8 index); + +static void CB2_MainMenu(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void VBlankCB_MainMenu(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void CB2_InitMainMenu(void) +{ + InitMainMenu(FALSE); +} + +static void CB2_InitMainMenuFromOptions(void) +{ + InitMainMenu(TRUE); +} + +u32 InitMainMenu(u8 a1) +{ + u16 savedIme; + u8 taskId; + + SetVBlankCallback(NULL); + + REG_DISPCNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + + DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); + DmaFill32(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2); + + ResetPaletteFade(); + LoadPalette(gMainMenuPalette, 0, 32); + remove_some_task(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow((struct WindowConfig *)&gWindowConfig_81E6CE4); + + if (a1) + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0x0000); // fade to black + else + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0xFFFF); // fade to white + + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WININ = 0; + REG_WINOUT = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + + SetVBlankCallback(VBlankCB_MainMenu); + SetMainCallback2(CB2_MainMenu); + + REG_DISPCNT = DISPCNT_MODE_0 + | DISPCNT_OBJ_1D_MAP + | DISPCNT_BG0_ON + | DISPCNT_OBJ_ON + | DISPCNT_WIN0_ON; + + taskId = CreateTask(Task_MainMenuCheckSave, 0); + gTasks[taskId].data[TD_SELECTEDMENUITEM] = 0; + + return 0; +} + +void Task_MainMenuCheckSave(u8 taskId) +{ + if (gPaletteFade.active) + return; + + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WININ = 0x1111; + REG_WINOUT = 49; + REG_BLDCNT = 241; + REG_BLDALPHA = 0; + REG_BLDY = 7; + + switch (gSaveFileStatus) + { + case 1: + if (IsMysteryGiftEnabled() == TRUE) + gTasks[taskId].data[TD_MENULAYOUT] = HAS_MYSTERY_GIFT; + else + gTasks[taskId].data[TD_MENULAYOUT] = HAS_SAVED_GAME; + + gTasks[taskId].func = Task_MainMenuCheckRtc; + break; + case 2: + MenuDrawTextWindow(2, 14, 27, 19); + 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].func = Task_MainMenuWaitForSaveErrorAck; + break; + case 255: + MenuDrawTextWindow(2, 14, 27, 19); + 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].func = Task_MainMenuWaitForSaveErrorAck; + + if (IsMysteryGiftEnabled() == TRUE) + gTasks[taskId].data[TD_MENULAYOUT] = HAS_MYSTERY_GIFT; + else + gTasks[taskId].data[TD_MENULAYOUT] = HAS_SAVED_GAME; + break; + case 0: + default: + gTasks[taskId].data[TD_MENULAYOUT] = HAS_NO_SAVED_GAME; + gTasks[taskId].func = Task_MainMenuCheckRtc; + break; + case 4: + MenuDrawTextWindow(2, 14, 27, 19); + 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].func = Task_MainMenuWaitForSaveErrorAck; + return; + } +} + +void Task_MainMenuWaitForSaveErrorAck(u8 taskId) +{ + if (MenuUpdateWindowText()) + { + if (gMain.newKeys & A_BUTTON) + { + MenuZeroFillWindowRect(2, 14, 27, 19); + gTasks[taskId].func = Task_MainMenuCheckRtc; + } + } +} + +void Task_MainMenuCheckRtc(u8 taskId) +{ + if (!gPaletteFade.active) + { + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WININ = 0x1111; + REG_WINOUT = 49; + REG_BLDCNT = 241; + REG_BLDALPHA = 0; + REG_BLDY = 7; + + if (!(RtcGetErrorStatus() & RTC_ERR_FLAG_MASK)) + { + gTasks[taskId].func = Task_MainMenuDraw; + } + else + { + MenuDrawTextWindow(2, 14, 27, 19); + MenuPrintMessage(gBatteryDryMessage, 3, 15); + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(113, 159); + gTasks[taskId].func = Task_MainMenuWaitForRtcErrorAck; + } + } +} + +void Task_MainMenuWaitForRtcErrorAck(u8 taskId) +{ + if (MenuUpdateWindowText()) + { + if ( gMain.newKeys & 1 ) + { + MenuZeroFillWindowRect(2, 14, 27, 19); + gTasks[taskId].func = Task_MainMenuDraw; + } + } +} + +void Task_MainMenuDraw(u8 taskId) +{ + u16 palette; + + if (!gPaletteFade.active) + { + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WININ = 0x1111; + REG_WINOUT = 49; + REG_BLDCNT = 241; + REG_BLDALPHA = 0; + REG_BLDY = 7; + + palette = RGB(0, 0, 0); + LoadPalette(&palette, 254, 2); + + if (gSaveBlock2.playerGender == MALE) + { + palette = RGB(4, 16, 31); + LoadPalette(&palette, 241, 2); + } + else + { + palette = RGB(31, 3, 21); + LoadPalette(&palette, 241, 2); + } + + switch (gTasks[taskId].data[TD_MENULAYOUT]) + { + case HAS_NO_SAVED_GAME: + default: + MenuDrawTextWindow(1, 0, 28, 3); + PrintMainMenuItem(gMainMenuString_NewGame, 2, 1); + MenuDrawTextWindow(1, 4, 28, 7); + PrintMainMenuItem(gMainMenuString_Option, 2, 5); + break; + case HAS_SAVED_GAME: + MenuDrawTextWindow(1, 0, 28, 7); + PrintMainMenuItem(gMainMenuString_Continue, 2, 1); + MenuDrawTextWindow(1, 8, 28, 11); + PrintMainMenuItem(gMainMenuString_NewGame, 2, 9); + MenuDrawTextWindow(1, 12, 28, 15); + PrintMainMenuItem(gMainMenuString_Option, 2, 13); + PrintSaveFileInfo(); + break; + case HAS_MYSTERY_GIFT: + MenuDrawTextWindow(1, 0, 28, 7); + PrintMainMenuItem(gMainMenuString_Continue, 2, 1); + MenuDrawTextWindow(1, 8, 28, 11); + PrintMainMenuItem(gMainMenuString_NewGame, 2, 9); + MenuDrawTextWindow(1, 12, 28, 15); + PrintMainMenuItem(gMainMenuString_MysteryEvents, 2, 13); + MenuDrawTextWindow(1, 16, 28, 19); + PrintMainMenuItem(gMainMenuString_Option, 2, 0x11); + PrintSaveFileInfo(); + break; + } + + gTasks[taskId].func = Task_MainMenuHighlight; + } +} + +void Task_MainMenuHighlight(u8 taskId) +{ + HighlightCurrentMenuItem(gTasks[taskId].data[TD_MENULAYOUT], gTasks[taskId].data[TD_SELECTEDMENUITEM]); + gTasks[taskId].func = Task_MainMenuProcessKeyInput; +} + +bool8 MainMenuProcessKeyInput(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0x0000); + gTasks[taskId].func = Task_MainMenuPressedA; + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0xFFFF); + REG_WIN0H = WIN_RANGE(0, 240); + REG_WIN0V = WIN_RANGE(0, 160); + gTasks[taskId].func = Task_MainMenuPressedB; + } + else + { + s32 menuItemCount; + + switch (gTasks[taskId].data[TD_MENULAYOUT]) + { + case HAS_NO_SAVED_GAME: + default: + menuItemCount = 2; + break; + case HAS_SAVED_GAME: + menuItemCount = 3; + break; + case HAS_MYSTERY_GIFT: + menuItemCount = 4; + break; + } + + if (gMain.newKeys & DPAD_UP) + { + if (gTasks[taskId].data[TD_SELECTEDMENUITEM] > 0) + { + gTasks[taskId].data[TD_SELECTEDMENUITEM]--; + return TRUE; + } + } + if (gMain.newKeys & DPAD_DOWN) + { + if (gTasks[taskId].data[TD_SELECTEDMENUITEM] < menuItemCount - 1) + { + gTasks[taskId].data[TD_SELECTEDMENUITEM]++; + return TRUE; + } + } + } + + return FALSE; +} + +void Task_MainMenuProcessKeyInput(u8 taskId) +{ + bool8 currentMenuItemChanged = MainMenuProcessKeyInput(taskId); + if (currentMenuItemChanged) + gTasks[taskId].func = Task_MainMenuHighlight; +} + +void Task_MainMenuPressedA(u8 taskId) +{ + enum + { + NEW_GAME, + CONTINUE, + OPTION, + MYSTERY_EVENTS, + } action; + + if (gPaletteFade.active) + return; + + switch (gTasks[taskId].data[TD_MENULAYOUT]) + { + case HAS_NO_SAVED_GAME: + default: + switch (gTasks[taskId].data[TD_SELECTEDMENUITEM]) + { + case 0: + default: + action = NEW_GAME; + break; + case 1: + action = OPTION; + break; + } + break; + case HAS_SAVED_GAME: + switch (gTasks[taskId].data[TD_SELECTEDMENUITEM]) + { + case 0: + default: + action = CONTINUE; + break; + case 1: + action = NEW_GAME; + break; + case 2: + action = OPTION; + break; + } + break; + case HAS_MYSTERY_GIFT: + switch (gTasks[taskId].data[TD_SELECTEDMENUITEM]) + { + case 0: + default: + action = CONTINUE; + break; + case 1: + action = NEW_GAME; + break; + case 2: + action = MYSTERY_EVENTS; + break; + case 3: + action = OPTION; + break; + } + break; + } + + switch ((int)action) + { + case NEW_GAME: + default: + gPlttBufferUnfaded[0] = 0; + gPlttBufferFaded[0] = 0; + gTasks[taskId].func = Task_NewGameSpeech1; + break; + case CONTINUE: + gPlttBufferUnfaded[0] = 0; + gPlttBufferFaded[0] = 0; + SetMainCallback2(CB2_ContinueSavedGame); + DestroyTask(taskId); + break; + case OPTION: + gMain.savedCallback = CB2_InitMainMenuFromOptions; + SetMainCallback2(CB2_InitOptionMenu); + DestroyTask(taskId); + break; + case MYSTERY_EVENTS: + SetMainCallback2(CB2_InitMysteryEventMenu); + DestroyTask(taskId); + break; + } +} + +void Task_MainMenuPressedB(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_InitTitleScreen); + DestroyTask(taskId); + } +} + +void HighlightCurrentMenuItem(u8 layout, u8 menuItem) +{ + REG_WIN0H = WIN_RANGE(9, 231); + + switch (layout) + { + case HAS_NO_SAVED_GAME: + default: + switch (menuItem) + { + case 0: + default: + REG_WIN0V = WIN_RANGE(1, 31); + break; + case 1: + REG_WIN0V = WIN_RANGE(33, 63); + break; + } + break; + case HAS_SAVED_GAME: + switch (menuItem) + { + case 0: + default: + REG_WIN0V = WIN_RANGE(1, 63); + break; + case 1: + REG_WIN0V = WIN_RANGE(65, 95); + break; + case 2: + REG_WIN0V = WIN_RANGE(97, 127); + break; + } + break; + case HAS_MYSTERY_GIFT: + switch (menuItem) + { + case 0: + default: + REG_WIN0V = WIN_RANGE(1, 63); + break; + case 1: + REG_WIN0V = WIN_RANGE(65, 95); + break; + case 2: + REG_WIN0V = WIN_RANGE(97, 127); + break; + case 3: + REG_WIN0V = WIN_RANGE(129, 159); + break; + } + break; + } +} + +void PrintMainMenuItem(const u8 *text, u8 left, u8 top) +{ + u8 i; + u8 buffer[32]; + + buffer[0] = 0xFC; + buffer[1] = 1; + buffer[2] = 14; + + for (i = 0; i < 26; i++) + buffer[3 + i] = text[i]; + + buffer[29] = EOS; + + MenuPrint(buffer, left, top); +} + +void PrintSaveFileInfo(void) +{ + PrintPlayerName(); + PrintPokedexCount(); + PrintPlayTime(); + PrintBadgeCount(); +} + +void PrintPlayerName(void) +{ + MenuPrint(gMainMenuString_Player, 2, 3); + MenuPrint(gSaveBlock2.playerName, 9, 3); +} + +void PrintPlayTime(void) +{ + u8 playTime[16]; + u8 alignedPlayTime[32]; + +#if defined(ENGLISH) + MenuPrint(gMainMenuString_Time, 16, 3); + FormatPlayTime(playTime, gSaveBlock2.playTimeHours, gSaveBlock2.playTimeMinutes, 1); + sub_8072C74(alignedPlayTime, playTime, 48, 1); + MenuPrint(alignedPlayTime, 22, 3); +#elif defined(GERMAN) + MenuPrint_PixelCoords(gMainMenuString_Time, 124, 24, TRUE); + FormatPlayTime(playTime, gSaveBlock2.playTimeHours, gSaveBlock2.playTimeMinutes, 1); + sub_8072C74(alignedPlayTime, playTime, 40, 1); + MenuPrint(alignedPlayTime, 23, 3); +#endif +} + +void PrintPokedexCount(void) +{ + u8 buffer[16]; + + MenuPrint(gMainMenuString_Pokedex, 2, 5); + sub_8072C14(buffer, GetPokedexSeenCount(), 18, 0); + MenuPrint(buffer, 9, 5); +} + +void PrintBadgeCount(void) +{ + u8 buffer[16]; + +#if defined(ENGLISH) + MenuPrint(gMainMenuString_Badges, 16, 5); +#elif defined(GERMAN) + MenuPrint_PixelCoords(gMainMenuString_Badges, 124, 40, TRUE); +#endif + ConvertIntToDecimalString(buffer, GetBadgeCount()); + MenuPrint_PixelCoords(buffer, 205, 40, 1); +} + +static void Task_NewGameSpeech1(u8 taskId) +{ + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow((struct WindowConfig *)&gWindowConfig_81E6CE4); + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WININ = 0; + REG_WINOUT = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + LZ77UnCompVram(gBirchIntroShadowGfx, (void *)BG_VRAM); + LZ77UnCompVram(gUnknown_081E7834, (void *)(BG_VRAM + 0x3800)); + LoadPalette(gUnknown_081E764C, 0, 0x40); + LoadPalette(gUnknown_081E796C, 1, 0x10); + remove_some_task(); + ResetSpriteData(); + FreeAllSpritePalettes(); + AddBirchSpeechObjects(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].func = Task_NewGameSpeech2; + gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = 0xFF; + gTasks[taskId].data[3] = 0xFF; + gTasks[taskId].data[TD_COUNTER] = 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) + { + gTasks[taskId].data[TD_COUNTER]--; + } + else + { + //Initialize Birch sprite + u8 spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; + + gSprites[spriteId].pos1.x = 136; + gSprites[spriteId].pos1.y = 60; + gSprites[spriteId].invisible = 0; + gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; + StartSpriteFadeIn(taskId, 10); + StartBackgroundFadeIn(taskId, 20); + gTasks[taskId].data[TD_COUNTER] = 80; + gTasks[taskId].func = Task_NewGameSpeech3; + } +} + +static void Task_NewGameSpeech3(u8 taskId) +{ + if (gTasks[taskId].data[TD_SUBTASK_DONE] != FALSE) + { + gSprites[gTasks[taskId].data[TD_BIRCH_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_NORMAL; + if (gTasks[taskId].data[TD_COUNTER]) + { + gTasks[taskId].data[TD_COUNTER]--; + } + else + { + MenuDrawTextWindow(2, 13, 27, 18); + //"Hi! Sorry to keep you waiting... + //...But everyone calls me the POKEMON PROFESSOR." + MenuPrintMessage(gBirchSpeech_Welcome, 3, 14); + gTasks[taskId].func = Task_NewGameSpeech4; + } + } +} + +static void Task_NewGameSpeech4(u8 taskId) +{ + if (!gPaletteFade.active && BirchSpeechUpdateWindowText()) + { + gTasks[taskId].func = Task_NewGameSpeech5; + //"This is what we call a POKEMON." + MenuPrintMessage(gBirchSpeech_ThisIsPokemon, 3, 14); + } +} + +static void Task_NewGameSpeech5(u8 taskId) +{ + if (BirchSpeechUpdateWindowText()) + gTasks[taskId].func = Task_NewGameSpeech6; +} + +static void Task_NewGameSpeech6(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID]; + + gSprites[spriteId].pos1.x = 104; + gSprites[spriteId].pos1.y = 72; + gSprites[spriteId].invisible = 0; + 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; +} + +static void Task_NewGameSpeech7(u8 taskId) +{ + if (IsCryFinished()) + { + //Go on to next sentence after frame 95 + if (gTasks[taskId].data[TD_COUNTER] > 95) + { + MenuSetText(gSystemText_NewPara); + gTasks[taskId].func = Task_NewGameSpeech8; + } + } + + if (gTasks[taskId].data[TD_COUNTER] < 16384) + { + gTasks[taskId].data[TD_COUNTER]++; + //Play Azurill cry at frame 32 + if (gTasks[taskId].data[TD_COUNTER] == 32) + PlayCry1(SPECIES_AZURILL, 0); + } +} + +static void Task_NewGameSpeech8(u8 taskId) +{ + if (BirchSpeechUpdateWindowText()) + { + //"This world is widely inhabited by POKEMON... + //...That's what I do." + MenuPrintMessage(gBirchSpeech_WorldInhabitedByPokemon, 3, 14); + gTasks[taskId].func = Task_NewGameSpeech9; + } +} + +static void Task_NewGameSpeech9(u8 taskId) +{ + if (BirchSpeechUpdateWindowText()) + { + MenuDrawTextWindow(2, 13, 27, 18); + //"And you are?" + MenuPrintMessage(gBirchSpeech_AndYouAre, 3, 14); + gTasks[taskId].func = Task_NewGameSpeech10; + } +} + +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; + StartSpriteFadeOut(taskId, 2); + StartBackgroundFadeOut(taskId, 1); + gTasks[taskId].data[TD_COUNTER] = 64; + gTasks[taskId].func = Task_NewGameSpeech11; + } +} + +//Slide platform away to the right +static void Task_NewGameSpeech11(u8 taskId) +{ + if (gTasks[taskId].data[TD_BGHOFS] != -60) + { + gTasks[taskId].data[TD_BGHOFS] -= 2; + REG_BG1HOFS = gTasks[taskId].data[TD_BGHOFS]; + } + else + { + gTasks[taskId].data[TD_BGHOFS] = -60; + gTasks[taskId].func = Task_NewGameSpeech12; + } +} + +static void Task_NewGameSpeech12(u8 taskId) +{ + if (gTasks[taskId].data[TD_SUBTASK_DONE]) + { + //Hide Birch and Azurill + gSprites[gTasks[taskId].data[TD_BIRCH_SPRITE_ID]].invisible = TRUE; + gSprites[gTasks[taskId].data[TD_AZURILL_SPRITE_ID]].invisible = TRUE; + + if (gTasks[taskId].data[TD_COUNTER]) + { + gTasks[taskId].data[TD_COUNTER]--; + } + else + { + //Initialize Brendan sprite + u8 spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; + + 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; + StartSpriteFadeIn(taskId, 2); + StartBackgroundFadeIn(taskId, 1); + gTasks[taskId].func = Task_NewGameSpeech13; + } + } +} + +static void Task_NewGameSpeech13(u8 taskId) +{ + if (gTasks[taskId].data[TD_SUBTASK_DONE]) + { + gSprites[gTasks[taskId].data[TD_TRAINER_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_NORMAL; + gTasks[taskId].func = Task_NewGameSpeech14; + } +} + +static void Task_NewGameSpeech14(u8 taskId) +{ + MenuDrawTextWindow(2, 13, 27, 18); + //"Are you a boy? Or are you a girl?" + MenuPrintMessage(gBirchSpeech_AreYouBoyOrGirl, 3, 14); + gTasks[taskId].func = Task_NewGameSpeech15; +} + +static void Task_NewGameSpeech15(u8 taskId) +{ + if (BirchSpeechUpdateWindowText()) + { + CreateGenderMenu(2, 4); + gTasks[taskId].func = Task_NewGameSpeech16; + } +} + +//Process gender menu +static void Task_NewGameSpeech16(u8 taskId) +{ + u8 cursorPos; + + switch (GenderMenuProcessInput()) + { + case MALE: + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + gSaveBlock2.playerGender = MALE; + MenuZeroFillWindowRect(2, 4, 8, 9); + gTasks[taskId].func = Task_NewGameSpeech19; + break; + case FEMALE: + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + gSaveBlock2.playerGender = FEMALE; + MenuZeroFillWindowRect(2, 4, 8, 9); + gTasks[taskId].func = Task_NewGameSpeech19; + break; + } + + cursorPos = GetMenuCursorPos(); + + if (cursorPos != gTasks[taskId].data[TD_GENDER_SELECTION]) + { + //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; + StartSpriteFadeOut(taskId, 0); + gTasks[taskId].func = Task_NewGameSpeech17; + } +} + +//Slide old trainer sprite off right of screen +static void Task_NewGameSpeech17(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; + + if (gTasks[taskId].data[TD_SUBTASK_DONE] == FALSE) + { + gSprites[spriteId].pos1.x += 4; //Move sprite right + } + else + { + gSprites[spriteId].invisible = TRUE; + + //Set up new trainer sprite + if (gTasks[taskId].data[TD_GENDER_SELECTION]) + spriteId = gTasks[taskId].data[TD_MAY_SPRITE_ID]; + else + spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; + gSprites[spriteId].pos1.x = 240; + gSprites[spriteId].pos1.y = 60; + gSprites[spriteId].invisible = FALSE; + gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = spriteId; + gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; + StartSpriteFadeIn(taskId, 0); + gTasks[taskId].func = Task_NewGameSpeech18; + } +} + +//Slide new trainer sprite from right of screen +static void Task_NewGameSpeech18(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; + + if (gSprites[spriteId].pos1.x > 180) + { + gSprites[spriteId].pos1.x -= 4; //Move sprite left + } + else + { + gSprites[spriteId].pos1.x = 180; + if (gTasks[taskId].data[TD_SUBTASK_DONE]) + { + gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL; + gTasks[taskId].func = Task_NewGameSpeech16; //Go back to gender menu + } + } +} + +static void Task_NewGameSpeech19(u8 taskId) +{ + MenuDrawTextWindow(2, 13, 27, 18); + //"All right. What's your name?" + MenuPrintMessage(gBirchSpeech_WhatsYourName, 3, 14); + gTasks[taskId].func = Task_NewGameSpeech20; +} + +static void Task_NewGameSpeech20(u8 taskId) +{ + if (BirchSpeechUpdateWindowText()) + { + CreateNameMenu(2, 1); + gTasks[taskId].func = Task_NewGameSpeech21; + } +} + +//Handle name menu selection +static void Task_NewGameSpeech21(u8 taskId) +{ + s8 selection = NameMenuProcessInput(); + + switch (selection) + { + case 1: //preset names + case 2: + case 3: + case 4: + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(2, 1, 22, 12); + SetPresetPlayerName(selection); + gTasks[taskId].func = Task_NewGameSpeech23; + break; + case 0: //NEW NAME + PlaySE(SE_SELECT); + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = Task_NewGameSpeech22; + break; + case -1: //B button + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(2, 1, 22, 12); + gTasks[taskId].func = Task_NewGameSpeech14; //Go back to gender menu + break; + } +} + +//Open naming screen +static void Task_NewGameSpeech22(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetPresetPlayerName(1); + DoNamingScreen(0, gSaveBlock2.playerName, gSaveBlock2.playerGender, 0, 0, CB_ContinueNewGameSpeechPart2); + } +} + +static void Task_NewGameSpeech23(u8 taskId) +{ + MenuDrawTextWindow(2, 13, 27, 18); + //"So it's (PLAYER)?" + StringExpandPlaceholders(gStringVar4, gBirchSpeech_SoItsPlayer); + MenuPrintMessage(gStringVar4, 3, 14); + gTasks[taskId].func = Task_NewGameSpeech24; +} + +static void Task_NewGameSpeech24(u8 taskId) +{ + if (BirchSpeechUpdateWindowText()) + { + DisplayYesNoMenu(2, 1, 1); + gTasks[taskId].func = Task_NewGameSpeech25; + } +} + +//Handle yes/no menu selection +static void Task_NewGameSpeech25(u8 taskId) +{ + switch (ProcessMenuInputNoWrap_()) + { + 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; + StartSpriteFadeOut(taskId, 2); + StartBackgroundFadeOut(taskId, 1); + gTasks[taskId].func = Task_NewGameSpeech26; //Continue + break; + case -1: //B button + case 1: //NO + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(2, 1, 8, 7); + gTasks[taskId].func = Task_NewGameSpeech14; //Go back to gender menu + break; + } +} + +static void Task_NewGameSpeech26(u8 taskId) +{ + if (gTasks[taskId].data[TD_BGHOFS]) + { + gTasks[taskId].data[TD_BGHOFS] += 2; + REG_BG1HOFS = gTasks[taskId].data[TD_BGHOFS]; + } + else + { + gTasks[taskId].func = Task_NewGameSpeech27; + } +} + +static void Task_NewGameSpeech27(u8 taskId) +{ + if (gTasks[taskId].data[TD_SUBTASK_DONE]) + { + s16 spriteId; + + //Hide Brendan and May sprites + spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; + gSprites[spriteId].invisible = TRUE; + spriteId = gTasks[taskId].data[TD_MAY_SPRITE_ID]; + gSprites[spriteId].invisible = TRUE; + + //Fade in Birch and Azurill + spriteId = (u8)gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; + 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]; + gSprites[spriteId].pos1.x = 104; + gSprites[spriteId].pos1.y = 72; + gSprites[spriteId].invisible = FALSE; + gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; + + StartSpriteFadeIn(taskId, 2); + StartBackgroundFadeIn(taskId, 1); + MenuDrawTextWindow(2, 13, 27, 18); + StringExpandPlaceholders(gStringVar4, gBirchSpeech_AhOkayYouArePlayer); + //"Ah, okay! You're (PLAYER) who's moving... + //...I get it now!" + MenuPrintMessage(gStringVar4, 3, 14); + gTasks[taskId].func = Task_NewGameSpeech28; + } +} + +static void Task_NewGameSpeech28(u8 taskId) +{ + if (gTasks[taskId].data[TD_SUBTASK_DONE]) + { + s16 spriteId; + + spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; + gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL; + + spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID]; + gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL; + + if (BirchSpeechUpdateWindowText()) + { + //Fade out Birch and Azurill + spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; + gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; + spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID]; + gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; + + StartSpriteFadeOut(taskId, 2); + StartBackgroundFadeOut(taskId, 1); + gTasks[taskId].data[TD_COUNTER] = 64; + gTasks[taskId].func = Task_NewGameSpeech29; + } + } +} + +static void Task_NewGameSpeech29(u8 taskId) +{ + if (gTasks[taskId].data[TD_SUBTASK_DONE]) + { + s16 spriteId; + + //Hide Birch and Azurill + spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; + gSprites[spriteId].invisible = TRUE; + spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID]; + gSprites[spriteId].invisible = TRUE; + + if (gTasks[taskId].data[TD_COUNTER]) + { + gTasks[taskId].data[TD_COUNTER]--; + } + else + { + u8 spriteId; + + //Fade in trainer and background + if (gSaveBlock2.playerGender) + spriteId = (u8)gTasks[taskId].data[TD_MAY_SPRITE_ID]; + else + spriteId = (u8)gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; + 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; + + StartSpriteFadeIn(taskId, 2); + StartBackgroundFadeIn(taskId, 1); + MenuDrawTextWindow(2, 13, 27, 18); + MenuPrintMessage(gBirchSpeech_AreYouReady, 3, 14); + gTasks[taskId].func = Task_NewGameSpeech30; + } + } +} + +static void Task_NewGameSpeech30(u8 taskId) +{ + if (gTasks[taskId].data[TD_SUBTASK_DONE]) + { + s16 spriteId; + + spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; + gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL; + + if (BirchSpeechUpdateWindowText()) + { + u8 spriteId; + + spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; + gSprites[spriteId].oam.affineMode = 1; + gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E79AC; + InitSpriteAffineAnim(&gSprites[spriteId]); + StartSpriteAffineAnim(&gSprites[spriteId], 0); + gSprites[spriteId].callback = ShrinkPlayerSprite; + BeginNormalPaletteFade(0x0000FFFF, 0, 0, 0x10, 0); + FadeOutBGM(4); + gTasks[taskId].func = Task_NewGameSpeech31; + } + } +} + +static void Task_NewGameSpeech31(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; + + if (gSprites[spriteId].affineAnimEnded) + gTasks[taskId].func = Task_NewGameSpeech32; +} + +static void Task_NewGameSpeech32(u8 taskId) +{ + if (!gPaletteFade.active) + { + u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; + gSprites[spriteId].callback = nullsub_34; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON; + BeginNormalPaletteFade(0xFFFF0000, 0, 0, 0x10, 0xFFFF); + gTasks[taskId].func = Task_NewGameSpeech33; + } +} + +static void Task_NewGameSpeech33(u8 taskId) +{ + if (!gPaletteFade.active) + { + //We're finished setting up. Start the new game! + SetMainCallback2(CB2_NewGame); + DestroyTask(taskId); + } +} + +// Re-initializes graphics state after running the naming screen +// and continues the new game speech +void CB_ContinueNewGameSpeechPart2() +{ + u8 taskId; + u8 spriteId; + u16 savedIme; + + SetVBlankCallback(NULL); + + REG_DISPCNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + + DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); + DmaFill32(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16(3, 0, (void *)PLTT, PLTT_SIZE); + + ResetPaletteFade(); + + LZ77UnCompVram(gBirchIntroShadowGfx, (void *)BG_VRAM); + LZ77UnCompVram(gUnknown_081E7834, (void *)(BG_VRAM + 0x3800)); + + LoadPalette(gUnknown_081E764C, 0, 0x40); + + ResetTasks(); + + taskId = CreateTask(Task_NewGameSpeech23, 0); + + gTasks[taskId].data[TD_BGHOFS] = -60; + + remove_some_task(); + ResetSpriteData(); + FreeAllSpritePalettes(); + AddBirchSpeechObjects(taskId); + + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow((struct WindowConfig *)&gWindowConfig_81E6CE4); + + if (gSaveBlock2.playerGender != MALE) + { + gTasks[taskId].data[TD_GENDER_SELECTION] = FEMALE; + spriteId = gTasks[taskId].data[TD_MAY_SPRITE_ID]; + } + else + { + gTasks[taskId].data[TD_GENDER_SELECTION] = MALE; + spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; + } + + gSprites[spriteId].pos1.x = 180; + gSprites[spriteId].pos1.y = 60; + gSprites[spriteId].invisible = FALSE; + + gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = spriteId; + + REG_BG1HOFS = -60; + + BeginNormalPaletteFade(0xFFFFFFFFu, 0, 0x10, 0, 0); + + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WININ = 0; + REG_WINOUT = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + + SetVBlankCallback(VBlankCB_MainMenu); + SetMainCallback2(CB2_MainMenu); + REG_BG1CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | + DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; +} + +void nullsub_34(struct Sprite *sprite) +{ +} + +void ShrinkPlayerSprite(struct Sprite *sprite) +{ + u32 y = (sprite->pos1.y << 16) + sprite->data0 + 0xC000; + sprite->pos1.y = y >> 16; + sprite->data0 = y; +} + +u8 CreateAzurillSprite(u8 x, u8 y) +{ + DecompressPicFromTable_2( + &gMonFrontPicTable[SPECIES_AZURILL], + gMonFrontPicCoords[SPECIES_AZURILL].coords, + gMonFrontPicCoords[SPECIES_AZURILL].y_offset, + gUnknown_081FAF4C[0], + gUnknown_081FAF4C[1], + SPECIES_AZURILL); + LoadCompressedObjectPalette(&gMonPaletteTable[SPECIES_AZURILL]); + GetMonSpriteTemplate_803C56C(SPECIES_AZURILL, 1); + return CreateSprite(&gUnknown_02024E8C, x, y, 0); +} + +void AddBirchSpeechObjects(u8 taskId) +{ + u8 spriteId; + + spriteId = CreateBirchSprite(136, 60, 1); + gSprites[spriteId].callback = nullsub_34; + gSprites[spriteId].oam.priority = 0; + gSprites[spriteId].invisible = 1; + gTasks[taskId].data[TD_BIRCH_SPRITE_ID] = 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; + + //Create Brendan sprite + spriteId = CreateTrainerSprite_BirchSpeech(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); + gSprites[spriteId].callback = nullsub_34; + gSprites[spriteId].invisible = 1; + gSprites[spriteId].oam.priority = 0; + gTasks[taskId].data[TD_MAY_SPRITE_ID] = spriteId; +} + +enum { + TD_PARENT_TASK_ID, + TD_EVA, //EVA coefficient of REG_BLDALPHA + TD_EVB, //EVB coefficient of REG_BLDALPHA + TD_INTERVAL, + TD_FRAMECOUNTER +}; + +static void Task_SpriteFadeOut(u8 taskId) +{ + if (gTasks[taskId].data[TD_EVA] == 0) + { + gTasks[gTasks[taskId].data[TD_PARENT_TASK_ID]].data[TD_SUBTASK_DONE] = TRUE; + 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_EVA]--; + gTasks[taskId].data[TD_EVB]++; + REG_BLDALPHA = gTasks[taskId].data[TD_EVA] + (gTasks[taskId].data[TD_EVB] * 256); + } + } +} + +//Launches a helper task to fade out sprites +static void StartSpriteFadeOut(u8 taskId, u8 interval) +{ + u8 newTaskId; + + REG_BLDCNT = 592; + REG_BLDALPHA = 16; + REG_BLDY = 0; + gTasks[taskId].data[TD_SUBTASK_DONE] = 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; +} + +static void Task_SpriteFadeIn(u8 taskId) +{ + if (gTasks[taskId].data[TD_EVA] == 16) + { + gTasks[gTasks[taskId].data[TD_PARENT_TASK_ID]].data[TD_SUBTASK_DONE] = TRUE; + 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_EVA]++; + gTasks[taskId].data[TD_EVB]--; + REG_BLDALPHA = gTasks[taskId].data[TD_EVA] + (gTasks[taskId].data[TD_EVB] * 256); + } +} + +//Launches a helper task to fade in sprites +static void StartSpriteFadeIn(u8 taskId, u8 interval) +{ + u8 newTaskId; + + REG_BLDCNT = 592; + REG_BLDALPHA = 4096; + REG_BLDY = 0; + gTasks[taskId].data[TD_SUBTASK_DONE] = 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; +} + +enum { + TD_FADELEVEL = 1, + TD_DELAY, +}; + +static void HandleFloorShadowFadeOut(u8 taskId) +{ + if (gTasks[taskId].data[TD_DELAY]) + gTasks[taskId].data[TD_DELAY]--; + else + { + if (gTasks[taskId].data[TD_FADELEVEL] == 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); + } + } +} + +//Launches a helper task to fade out the background +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; +} + +static void HandleFloorShadowFadeIn(u8 taskId) +{ + if (gTasks[taskId].data[TD_DELAY]) + gTasks[taskId].data[TD_DELAY]--; + else + { + if (gTasks[taskId].data[TD_FADELEVEL] == 0) + 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); + } + } + } +} + +//Launches a helper task to fade in the background +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; +} + +static void CreateGenderMenu(u8 left, u8 top) +{ + u8 menuLeft, menuTop; + MenuDrawTextWindow(left, top, left + 6, top + 5); + menuLeft = left + 1; + menuTop = top + 1; + PrintMenuItems(menuLeft, menuTop, 2, gUnknown_081E79B0); + InitMenu(0, menuLeft, menuTop, 2, 0, 5); +} + +static s8 GenderMenuProcessInput(void) +{ + return ProcessMenuInputNoWrap(); +} + +static void CreateNameMenu(u8 left, u8 top) +{ + MenuDrawTextWindow(left, top, left + 10, top + 11); + + if (gSaveBlock2.playerGender == MALE) + PrintMenuItems(left + 1, top + 1, 5, gMalePresetNames); + else + PrintMenuItems(left + 1, top + 1, 5, gFemalePresetNames); + + InitMenu(0, left + 1, top + 1, 5, 0, 9); +} + +static s8 NameMenuProcessInput(void) +{ + return ProcessMenuInput(); +} + +static void SetPresetPlayerName(u8 index) +{ + u8 i; + u8 *name; + + if (gSaveBlock2.playerGender == MALE) + name = (u8 *) gMalePresetNames[index].text; + else + name = (u8 *) gFemalePresetNames[index].text; + + for (i = 0; i < 7; i++) + gSaveBlock2.playerName[i] = name[i]; + + gSaveBlock2.playerName[i] = EOS; +} diff --git a/src/engine/menu.c b/src/engine/menu.c new file mode 100644 index 000000000..ef458124b --- /dev/null +++ b/src/engine/menu.c @@ -0,0 +1,871 @@ +#include "global.h" +#include "menu.h" +#include "main.h" +#include "map_obj_lock.h" +#include "menu_cursor.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "strings.h" +#include "text.h" +#include "text_window.h" +#include "string_util.h" + +struct Menu +{ + u8 left; + u8 top; + s8 cursorPos; + s8 minCursorPos; + s8 maxCursorPos; + u8 width; + u8 height; + u8 menu_field_7; + u8 columnXCoords[8]; +}; + +static void MultistepInitMenuWindowInternal(const struct WindowConfig *, u16); +static void InitMenuWindowInternal(const struct WindowConfig *, u16); +static bool8 sub_80723D4(void); +static u8 sub_8072484(u8, u8, u8, u8, u8, u8, u32); +static u8 sub_80724F4(u8, u8, u8, const struct MenuAction[], u8); +static void sub_8072620(u8, u8, u8, const struct MenuAction[], u8); +static void sub_8072D18(u8, u8); + +static struct Menu gMenu; + +EWRAM_DATA struct Window gMenuWindow = {0}; +EWRAM_DATA u8 gFiller_202E908[0x90] = {0}; +EWRAM_DATA struct Window *gMenuWindowPtr = NULL; +EWRAM_DATA u8 gMenuMultistepInitState = 0; +EWRAM_DATA u16 gMenuTextTileOffset = 0; +EWRAM_DATA u16 gMenuTextWindowTileOffset = 0; +EWRAM_DATA u16 gMenuTextWindowContentTileOffset = 0; +EWRAM_DATA u16 gMenuMessageBoxContentTileOffset = 0; + +const struct MenuAction gMenuYesNoItems[] = +{ + { OtherText_Yes, NULL }, + { OtherText_No, NULL }, +}; + +void CloseMenu(void) +{ + PlaySE(SE_SELECT); + MenuZeroFillScreen(); + sub_8064E2C(); + ScriptContext2_Disable(); + HandleDestroyMenuCursors(); +} + +void AppendToList(u8 *list, u8 *pindex, u32 value) +{ + list[*pindex] = value; + (*pindex)++; +} + +void InitMenuWindow(const struct WindowConfig *winConfig) +{ + InitMenuWindowInternal(winConfig, 1); +} + +void MultistepInitMenuWindowBegin(const struct WindowConfig *winConfig) +{ + MultistepInitMenuWindowInternal(winConfig, 1); +} + +static void MultistepInitMenuWindowInternal(const struct WindowConfig *winConfig, u16 tileOffset) +{ + gMenuMultistepInitState = 0; + gMenuTextTileOffset = tileOffset; + gMenuWindowPtr = &gMenuWindow; + InitWindowFromConfig(&gMenuWindow, winConfig); +} + +bool32 MultistepInitMenuWindowContinue(void) +{ + switch (gMenuMultistepInitState) + { + case 0: + gMenuMultistepInitState++; + return 0; + case 1: + gMenuTextWindowTileOffset = MultistepInitWindowTileData(gMenuWindowPtr, gMenuTextTileOffset); + goto next; + case 2: + if (!MultistepLoadFont()) + goto fail; + goto next; + case 3: + gMenuTextWindowContentTileOffset = SetTextWindowBaseTileNum(gMenuTextWindowTileOffset); + next: + gMenuMultistepInitState++; + return 0; + case 4: + LoadTextWindowGraphics(gMenuWindowPtr); + gMenuMessageBoxContentTileOffset = SetMessageBoxBaseTileNum(gMenuTextWindowContentTileOffset); + return 1; + default: + fail: + return 0; + } +} + +static void InitMenuWindowInternal(const struct WindowConfig *winConfig, u16 tileOffset) +{ + gMenuWindowPtr = &gMenuWindow; + InitWindowFromConfig(&gMenuWindow, winConfig); + gMenuTextTileOffset = tileOffset; + gMenuTextWindowTileOffset = InitWindowTileData(gMenuWindowPtr, gMenuTextTileOffset); + gMenuTextWindowContentTileOffset = SetTextWindowBaseTileNum(gMenuTextWindowTileOffset); + LoadTextWindowGraphics(gMenuWindowPtr); + gMenuMessageBoxContentTileOffset = SetMessageBoxBaseTileNum(gMenuTextWindowContentTileOffset); +} + +void unref_sub_8071DA4(struct WindowConfig *winConfig, u16 tileOffset) +{ + gMenuWindowPtr = &gMenuWindow; + InitWindowFromConfig(&gMenuWindow, winConfig); + gMenuTextWindowTileOffset = tileOffset; + gMenuTextWindowContentTileOffset = SetTextWindowBaseTileNum(gMenuTextWindowTileOffset); + LoadTextWindowGraphics(gMenuWindowPtr); + gMenuTextTileOffset = SetMessageBoxBaseTileNum(gMenuTextWindowContentTileOffset); + gMenuMessageBoxContentTileOffset = InitWindowTileData(gMenuWindowPtr, gMenuTextTileOffset); +} + +void MenuLoadTextWindowGraphics_OverrideFrameType(u8 frameType) +{ + LoadTextWindowGraphics_OverrideFrameType(gMenuWindowPtr, frameType); +} + +void MenuLoadTextWindowGraphics(void) +{ + LoadTextWindowGraphics(gMenuWindowPtr); +} + +void BasicInitMenuWindow(const struct WindowConfig *winConfig) +{ + InitWindowFromConfig(gMenuWindowPtr, winConfig); + gMenuWindowPtr->tileDataStartOffset = gMenuTextTileOffset; +} + +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) +{ + ZeroFillWindowRect(gMenuWindowPtr, a1, a2, a3, a4); +} + +void MenuFillWindowRectWithBlankTile(u8 left, u8 top, u8 right, u8 bottom) +{ + FillWindowRectWithBlankTile(gMenuWindowPtr, left, top, right, bottom); +} + +void MenuZeroFillScreen(void) +{ + MenuZeroFillWindowRect(0, 0, 29, 19); +} + +void MenuDrawTextWindow(u8 left, u8 top, u8 right, u8 bottom) +{ + DrawTextWindow(gMenuWindowPtr, left, top, right, bottom); +} + +void sub_8071F40(const u8 *str) +{ + MenuDrawTextWindow(2, 14, 28, 19); + MenuPrint(str, 3, 15); +} + +void sub_8071F60(u8 a1, u8 a2, u8 a3) +{ + sub_8003490(gMenuWindowPtr, a1, gMenuTextTileOffset, a2, a3); +} + +u16 unref_sub_8071F98(u8 x, u8 y) +{ + return GetWindowTilemapEntry(gMenuWindowPtr, x, y); +} + +void unref_sub_8071FBC(u16 a1, u8 a2, u8 a3, u8 a4, u8 a5) +{ + DrawWindowRect(gMenuWindowPtr, a1, a2, a3, a4, a5); +} + +void MenuDisplayMessageBox(void) +{ + DisplayMessageBox(gMenuWindowPtr); +} + +void MenuPrintMessage(const u8 *str, u8 left, u8 top) +{ + sub_8002EB0(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); +} + +void sub_8072044(const u8 *str) +{ + sub_8002EB0(gMenuWindowPtr, str, gMenuTextTileOffset, 2, 15); +} + +void MenuSetText(const u8 *str) +{ + sub_8002E90(gMenuWindowPtr, str); +} + +u8 MenuUpdateWindowText(void) +{ + return sub_80035AC(gMenuWindowPtr); +} + +u8 unref_sub_8072098(void) +{ + return sub_8003418(gMenuWindowPtr); +} + +void sub_80720B0(void) +{ + ClearWindowTextLines(gMenuWindowPtr); +} + +u8 MoveMenuCursor(s8 delta) +{ + s32 newPos = gMenu.cursorPos + delta; + + if (newPos < gMenu.minCursorPos) + gMenu.cursorPos = gMenu.maxCursorPos; + else if (newPos > gMenu.maxCursorPos) + gMenu.cursorPos = gMenu.minCursorPos; + else + gMenu.cursorPos += delta; + + RedrawMenuCursor(gMenu.left, 2 * gMenu.cursorPos + gMenu.top); + return gMenu.cursorPos; +} + +u8 MoveMenuCursorNoWrap(s8 delta) +{ + s32 newPos = gMenu.cursorPos + delta; + + if (newPos < gMenu.minCursorPos) + gMenu.cursorPos = gMenu.minCursorPos; + else if (newPos > gMenu.maxCursorPos) + gMenu.cursorPos = gMenu.maxCursorPos; + else + gMenu.cursorPos += delta; + + RedrawMenuCursor(gMenu.left, 2 * gMenu.cursorPos + gMenu.top); + return gMenu.cursorPos; +} + +u8 GetMenuCursorPos(void) +{ + return gMenu.cursorPos; +} + +s8 ProcessMenuInput(void) +{ + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gMenu.menu_field_7) + HandleDestroyMenuCursors(); + return gMenu.cursorPos; + } + + if (gMain.newKeys & B_BUTTON) + { + if (gMenu.menu_field_7) + HandleDestroyMenuCursors(); + return -1; + } + + if (gMain.newKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + return -2; + } + else if (gMain.newKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + MoveMenuCursor(1); + return -2; + } + + return -2; +} + +s8 ProcessMenuInputNoWrap(void) +{ + u8 cursorPos = gMenu.cursorPos; + + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gMenu.menu_field_7) + HandleDestroyMenuCursors(); + return gMenu.cursorPos; + } + + if (gMain.newKeys & B_BUTTON) + { + if (gMenu.menu_field_7) + HandleDestroyMenuCursors(); + return -1; + } + + if (gMain.newKeys & DPAD_UP) + { + if (cursorPos != MoveMenuCursorNoWrap(-1)) + PlaySE(SE_SELECT); + return -2; + } + else if (gMain.newKeys & DPAD_DOWN) + { + if (cursorPos != MoveMenuCursorNoWrap(1)) + PlaySE(SE_SELECT); + return -2; + } + + MoveMenuCursorNoWrap(0); + return -2; +} + +u8 MoveMenuCursor3(s8 delta) +{ + u8 menuHeight = (gMenu.maxCursorPos + 1) >> 1; + s32 newPos = gMenu.cursorPos + delta; + + if (newPos < gMenu.minCursorPos) + gMenu.cursorPos = gMenu.maxCursorPos; + else if (newPos > gMenu.maxCursorPos) + gMenu.cursorPos = gMenu.minCursorPos; + else + gMenu.cursorPos += delta; + + RedrawMenuCursor( + 6 * (gMenu.cursorPos / menuHeight) + gMenu.left, + 2 * (gMenu.cursorPos % menuHeight) + gMenu.top); + + return gMenu.cursorPos; +} + +u8 MoveMenuCursor4(s8 delta) +{ + if (gMenu.cursorPos + delta <= gMenu.maxCursorPos) + { + if (sub_80723D4() == TRUE) + return gMenu.cursorPos; + } + else + { + return gMenu.cursorPos; + } + + gMenu.cursorPos += delta; + + if ((gMenu.maxCursorPos + 1) / gMenu.width == 0) + RedrawMenuCursor( + gMenu.left + gMenu.columnXCoords[gMenu.cursorPos % gMenu.width], + 2 * ((gMenu.cursorPos / gMenu.width) % gMenu.height) + gMenu.top); + else + RedrawMenuCursor( + gMenu.left + gMenu.columnXCoords[gMenu.cursorPos % gMenu.width], + 2 * (gMenu.cursorPos / gMenu.width) + gMenu.top); + + return gMenu.cursorPos; +} + +static bool8 sub_80723D4(void) +{ + if ((gMain.newKeys & DPAD_UP) && gMenu.cursorPos < gMenu.width) + return TRUE; + + if ((gMain.newKeys & DPAD_DOWN) && gMenu.cursorPos >= (gMenu.maxCursorPos + 1) - gMenu.width) + return TRUE; + + if ((gMain.newKeys & DPAD_LEFT) + && ((gMenu.cursorPos - (gMenu.cursorPos % gMenu.width)) % gMenu.width == 1 // always false + || gMenu.cursorPos == 0 + || gMenu.cursorPos % gMenu.width == 0)) + return TRUE; + + if ((gMain.newKeys & DPAD_RIGHT) && gMenu.cursorPos % gMenu.width == gMenu.width - 1) + return TRUE; + + return FALSE; +} + +static u8 sub_8072484(u8 a1, u8 a2, u8 menuItemCount, u8 a4, u8 width, u8 a6, u32 a7) +{ + u8 v7; + + gMenu.width = width; + gMenu.height = menuItemCount / width; + InitMenu(0, a1, a2, menuItemCount, a4, a6); + v7 = 0; + if (a7) + v7 = -1; + gMenu.menu_field_7 = v7; + return a4; +} + +static u8 sub_80724F4(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], u8 columnCount) +{ + u8 i; + u8 maxWidth; + s32 height; + + for (i = 0; i < 7; i++) + gMenu.columnXCoords[i] = 0; + + maxWidth = 0; + for (i = 0; i < menuItemCount; i++) + { + u8 width = (sub_8072CA4(menuItems[i].text) + 7) / 8; + + if (width > maxWidth) + maxWidth = width; + } + + for (i = 1; i <= columnCount; i++) + gMenu.columnXCoords[i] = maxWidth; + + for (i = 1; i <= columnCount; i++) + gMenu.columnXCoords[i] += 1 + gMenu.columnXCoords[i - 1]; + + gMenu.columnXCoords[columnCount]--; + + if (!((menuItemCount / 2) < columnCount || (menuItemCount % 2 != 0)) + || columnCount == 1 + || columnCount == menuItemCount) + { + height = 2 * (menuItemCount / columnCount) + 1; + } + else + { + height = 2 * ((menuItemCount / columnCount) + 1) + 1; + } + + { + // TODO: Make this code less hideous but still match the original asm. + u8 right; + u8 bottom; + u32 totalWidth; + register s32 val asm("r1"); + + val = (s8)top + height; + val = val << 24; + asm("" ::: "r3"); + bottom = val >> 24; + + totalWidth = (gMenu.columnXCoords[columnCount] + 1); + right = left + totalWidth; + + MenuDrawTextWindow(left, top, right, bottom); + } + + return maxWidth; +} + +static void sub_8072620(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], u8 columnCount) +{ + u8 i; + u8 maxWidth; + + for (i = 0; i < 7; i++) + gMenu.columnXCoords[i] = 0; + + maxWidth = 0; + for (i = 0; i < menuItemCount; i++) + { + u8 width = (sub_8072CA4(menuItems[i].text) + 7) / 8; + + if (width > maxWidth) + maxWidth = width; + } + + for (i = 1; i <= columnCount; i++) + gMenu.columnXCoords[i] = maxWidth; + + for (i = 1; i <= columnCount; i++) + gMenu.columnXCoords[i] += 1 + gMenu.columnXCoords[i - 1]; + + gMenu.columnXCoords[columnCount]--; + + for (i = 0; i < columnCount; i++) + { + u8 row = 0; + u8 j; + for (j = 0; i + j < menuItemCount; j += columnCount, row++) + MenuPrint(menuItems[i + j].text, left + gMenu.columnXCoords[i % columnCount], top + 2 * row); + } +} + +void sub_807274C(u8 left, u8 top, u8 menuItemCount, u8 a4, const struct MenuAction menuItems[], u8 columnCount, u32 a7) +{ + u8 maxWidth = sub_80724F4(left, top, menuItemCount, menuItems, columnCount); + + sub_8072484(left + 1, top + 1, menuItemCount, a4, columnCount, maxWidth, a7); + sub_8072620(left + 1, top + 1, menuItemCount, menuItems, columnCount); +} + +s8 sub_80727CC(void) +{ + if (gMain.newKeys & A_BUTTON) + { + if (gMenu.menu_field_7) + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + return GetMenuCursorPos(); + } + + if (gMain.newKeys & B_BUTTON) + { + if (gMenu.menu_field_7) + HandleDestroyMenuCursors(); + return -1; + } + + if (gMain.newKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + MoveMenuCursor4(-gMenu.width); + return -2; + } + else if (gMain.newKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + MoveMenuCursor4(gMenu.width); + return -2; + } + else if (gMain.newKeys & DPAD_LEFT) + { + PlaySE(SE_SELECT); + MoveMenuCursor4(-1); + return -2; + } + else if (gMain.newKeys & DPAD_RIGHT) + { + PlaySE(SE_SELECT); + MoveMenuCursor4(1); + return -2; + } + + return -2; +} + +u8 sub_807288C(u8 column) +{ + return gMenu.columnXCoords[column]; +} + +void PrintMenuItems(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[]) +{ + u8 i; + + for (i = 0; i < menuItemCount; i++) + MenuPrint(menuItems[i].text, left, top + 2 * i); +} + +void PrintMenuItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], const u8 *order) +{ + u8 i; + + for (i = 0; i < menuItemCount; i++) + MenuPrint(menuItems[order[i]].text, left, top + 2 * i); +} + +void InitYesNoMenu(u8 left, u8 top, u8 a3) +{ + PrintMenuItems(left + 1, top + 1, 2, gMenuYesNoItems); + InitMenu(0, left + 1, top + 1, 2, 0, a3); +} + +void DisplayYesNoMenu(u8 left, u8 top, u32 a3) +{ + MenuDrawTextWindow(left, top, left + 6, top + 5); + InitYesNoMenu(left, top, 5); + gMenu.menu_field_7 = a3 ? -1 : 0; +} + +s8 ProcessMenuInputNoWrap_(void) +{ + return ProcessMenuInputNoWrap(); +} + +u8 MenuPrint_PixelCoords(const u8 *text, u8 left, u16 top, u8 a4) +{ + return sub_8004D04(gMenuWindowPtr, text, gMenuTextTileOffset, left, top, a4); +} + +u8 sub_8072A18(const u8 *text, u8 left, u16 top, u8 width, u32 a5) +{ + return sub_8004FD0(gMenuWindowPtr, 0, text, gMenuTextTileOffset, left, top, width, a5); +} + +u8 unref_sub_8072A5C(u8 *dest, u8 *src, u8 left, u16 top, u8 width, u32 a6) +{ + return sub_8004FD0(gMenuWindowPtr, dest, src, gMenuTextTileOffset, left, top, width, a6); +} + +#if ENGLISH +int sub_8072AB0(const u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6) +{ + u8 newlineCount = sub_8004FD0(gMenuWindowPtr, NULL, str, gMenuTextTileOffset, left, top, width, a6); + + left /= 8; + top /= 8; + width = (width + 7) / 8; + height = (height + 7) / 8; + + if (newlineCount < height) + MenuFillWindowRectWithBlankTile(left, top + 2 * newlineCount, left + width - 1, height + top - 1); +} +#elif GERMAN +__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\ +_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\ +_08072B0A:\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\ +_08072B3E:\n\ + add sp, 0x10\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif + +void MenuPrint_RightAligned(const u8 *str, u8 left, u8 top) +{ + sub_8004D38(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); +} + +void sub_8072B80(const u8 *a1, u8 a2, u8 a3, const u8 *a4) +{ + u8 buffer[64]; + u8 width = GetStringWidth(gMenuWindowPtr, a4); + AlignString(gMenuWindowPtr, buffer, a1, width, 1); + sub_8003460(gMenuWindowPtr, buffer, gMenuTextTileOffset, a2, a3); +} + +void sub_8072BD8(const u8 *a1, u8 a2, u8 a3, u16 a4) +{ + sub_8004DB0(gMenuWindowPtr, a1, gMenuTextTileOffset, a2, a3, a4); +} + +u8 *sub_8072C14(u8 *a1, s32 a2, u8 a3, u8 a4) +{ + return AlignInt1(gMenuWindowPtr, a1, a2, a3, a4); +} + +u8 *sub_8072C44(u8 *a1, s32 a2, u8 a3, u8 a4) +{ + return AlignInt2(gMenuWindowPtr, a1, a2, a3, a4); +} + +u8 *sub_8072C74(u8 *a1, const u8 *a2, u8 a3, u8 a4) +{ + return AlignString(gMenuWindowPtr, a1, a2, a3, a4); +} + +u8 sub_8072CA4(const u8 *str) +{ + return GetStringWidth(gMenuWindowPtr, str); +} + +u8 sub_8072CBC() +{ + return sub_8004E24(gMenuWindowPtr); +} + +void sub_8072CD4(u8 *a1, u8 *a2, u8 *a3) +{ + sub_8004E28(gMenuWindowPtr, a1, a2, a3); +} + +u32 MenuUpdateWindowText_OverrideLineLength(u8 lineLength) +{ + return sub_80037C8(gMenuWindowPtr, lineLength); +} + +struct Window *unref_sub_8072D0C(void) +{ + return gMenuWindowPtr; +} + +static void sub_8072D18(u8 a1, u8 a2) +{ + sub_814A5C0(a1, 0xFFFF, 12, 11679, 8 * a2); +} + +u8 InitMenu(u8 cursorSubpriority, u8 left, u8 top, u8 numChoices, u8 cursorPos, u8 cursorWidth) +{ + s32 pos; + + if (cursorWidth) + sub_8072D18(cursorSubpriority, cursorWidth); + + gMenu.left = left - 1; + gMenu.top = top; + gMenu.minCursorPos = 0; + gMenu.maxCursorPos = numChoices - 1; + gMenu.menu_field_7 = 0; + + pos = cursorPos; + + if (pos < 0 || pos > gMenu.maxCursorPos) + pos = 0; + + gMenu.cursorPos = pos; + MoveMenuCursor(0); + + return pos; +} + +void RedrawMenuCursor(u8 a1, u8 a2) +{ + sub_814A880((a1 + 1) * 8, 8 * a2); +} + +void unref_sub_8072DC0() +{ + sub_814A904(); +} + +void sub_8072DCC(u8 a1) +{ + sub_814A958(a1); +} + +void sub_8072DDC(u8 a1) +{ + sub_8072DCC(8 * a1); +} + +void HandleDestroyMenuCursors(void) +{ + DestroyMenuCursor(); +} + +#if GERMAN +void de_sub_8073110(u8 * buffer, u8 * name) { + u8 * ptr, *ptr2, *ptr3; + + ptr2 = buffer; + ptr = &gStringVar1[1 + StringLengthN(gStringVar1, 256)]; + ptr3 = ptr; + + for (;;) + { + if (*ptr2 == EOS) + break; + + if (*ptr2 == 0xFD) + { + + *ptr3 = EOS; + ptr2 += 2; + + StringAppend(ptr, name); + StringAppend(ptr, ptr2); + + buffer[0] = EOS; + StringAppend(buffer, ptr); + break; + } + + *ptr3 = *ptr2; + ptr2 += 1; + ptr3 += 1; + } +} + +u8 *de_sub_8073174(u8 *name, const u8 *format) { + u32 offset; + u8 *ptr; + + offset = StringLengthN(gStringVar2, 0x100); + ptr = &gStringVar2[1 + offset]; + + StringCopy(ptr, format); + + de_sub_8073110(ptr, name); + + return StringCopy(name, ptr); +} +#endif diff --git a/src/engine/menu_cursor.c b/src/engine/menu_cursor.c new file mode 100644 index 000000000..64ab36573 --- /dev/null +++ b/src/engine/menu_cursor.c @@ -0,0 +1,798 @@ +#include "global.h" +#include "menu_cursor.h" +#include "palette.h" +#include "sprite.h" + +extern const struct SpriteSheet gUnknown_0842F140[]; +extern const struct SpriteSheet gUnknown_0842F1C0[]; +extern const struct SpritePalette gUnknown_0842F240; +extern const struct SpritePalette gUnknown_0842F248; +extern const struct SpriteTemplate gSpriteTemplate_842F250[]; +extern const struct SpriteTemplate gSpriteTemplate_842F298[]; + +extern struct Subsprite *const gUnknown_0842F5BC[]; + +extern const struct SubspriteTable gSubspriteTables_842F5C0[]; +extern const struct SubspriteTable gSubspriteTables_842F6C0[]; +extern const struct SubspriteTable gUnknown_0842F758[]; + +extern const struct Subsprite gUnknown_0842F780; +extern const struct Subsprite gUnknown_0842F788; +extern const struct Subsprite gUnknown_0842F790; + +extern u16 gUnknown_0203A360[]; + +EWRAM_DATA struct Subsprite gMenuCursorSubsprites[10] = {0}; +EWRAM_DATA u8 gUnknown_0203A3D0 = 0; +EWRAM_DATA u8 gUnknown_0203A3D1 = 0; +EWRAM_DATA u8 gUnknown_0203A3D2 = 0; +EWRAM_DATA u8 gUnknown_0203A3D3 = 0; +EWRAM_DATA u8 gUnknown_0203A3D4 = 0; + +void sub_814A590(void) +{ + gUnknown_0203A3D0 = 0x40; + gUnknown_0203A3D1 = 0x40; + gUnknown_0203A3D2 = 0x40; + gUnknown_0203A3D3 = 0; + gUnknown_0203A3D4 = 0; +} + +u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5) +{ + int v9; + struct Sprite *v10; + + if (gUnknown_0203A3D0 != 0x40 || gUnknown_0203A3D1 != 0x40) + DestroyMenuCursor(); + + v9 = 1; + if (a2 == 0xFFFF) + { + gUnknown_0203A360[a3 & 0xF] = a4; + if (LoadSpritePalette(&gUnknown_0842F240) != 0xFF) + { + a2 = 0xFFF0; + v9 = 0; + } + } + + LoadSpriteSheetDeferred(&gUnknown_0842F140[a3 & 0xF]); + gUnknown_0203A3D0 = CreateSprite(&gSpriteTemplate_842F250[v9], 0, 0xA0, a1); + gUnknown_0203A3D1 = CreateSprite(&gSpriteTemplate_842F250[2], 0, 0xA0, a1); + if (gUnknown_0203A3D0 != 0x40) + { + v10 = &gSprites[gUnknown_0203A3D0]; + if (a2 == 0xFFFF) + v10->oam.paletteNum = 0; + else + v10->oam.paletteNum = IndexOfSpritePaletteTag(a2); + } + if (gUnknown_0203A3D1 != 0x40) + { + v10 = &gSprites[gUnknown_0203A3D1]; + if (a2 == 0xFFFF) + v10->oam.paletteNum = 0; + else + v10->oam.paletteNum = IndexOfSpritePaletteTag(a2); + + if (!(REG_DISPCNT & (DISPCNT_WIN0_ON | DISPCNT_WIN1_ON))) + *(u8 *)(REG_ADDR_WINOUT) |= 0x1F; + gUnknown_0203A3D3 = REG_DISPCNT >> 0xF; + gUnknown_0203A3D4 = *(u8 *)(REG_BASE + REG_OFFSET_WINOUT + 1); + REG_DISPCNT |= DISPCNT_OBJWIN_ON; + *(u8 *)(REG_ADDR_WINOUT + 1) = 0x10; + } + sub_814A958(a5); + return gUnknown_0203A3D0; +} + +u8 sub_814A758(u8 a1, u8 a2, u8 a3, u8 a4) +{ + u8 result; + struct Sprite *spr; + + result = sub_814A5C0(a1, 0, a3, 0, a4); + if (result != 0x40) + { + spr = &gSprites[gUnknown_0203A3D0]; + spr->oam.paletteNum = a2; + } + return result; +} + +u8 unref_sub_814A7AC(u8 a1, u16 a2, u8 a3) +{ + u16 i; + u8 val1 = 0; + u16 val2 = 0xF; + + for (i = 0; i <= 0xFF; i++) + { + if (gPlttBufferUnfaded[i] == a2) + { + val1 = (u8)(i >> 4); + val2 = i & 0xF; + } + } + + return sub_814A758(a1, val1, val2, a3); +} + +void DestroyMenuCursor(void) +{ + if (gUnknown_0203A3D0 != 0x40) + { + LoadTilesForSpriteSheet(&gUnknown_0842F140[0]); + DestroySpriteAndFreeResources(&gSprites[gUnknown_0203A3D0]); + gUnknown_0203A3D0 = 0x40; + } + + if (gUnknown_0203A3D1 != 0x40) + { + DestroySpriteAndFreeResources(&gSprites[gUnknown_0203A3D1]); + gUnknown_0203A3D1 = 0x40; + if (!gUnknown_0203A3D3) + REG_DISPCNT &= ~DISPCNT_OBJWIN_ON; + *(u8 *)(REG_BASE + REG_OFFSET_WINOUT + 1) = gUnknown_0203A3D4; + } + + return; +} + +void sub_814A880(u8 a1, u8 a2) +{ + struct Sprite *spr; + + if (gUnknown_0203A3D0 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D0]; + spr->invisible = 0; + spr->centerToCornerVecX = 0; + spr->centerToCornerVecY = 0; + spr->pos1.x = a1; + spr->pos1.y = a2; + } + + if (gUnknown_0203A3D1 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D1]; + spr->invisible = 0; + spr->centerToCornerVecX = 0; + spr->centerToCornerVecY = 0; + spr->pos1.x = a1; + spr->pos1.y = a2; + } + + return; +} + +void sub_814A904(void) +{ + struct Sprite *spr; + + if (gUnknown_0203A3D0 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D0]; + spr->invisible = 1; + } + + if (gUnknown_0203A3D1 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D1]; + spr->invisible = 1; + } + + return; +} + +#ifdef NONMATCHING +// Fix pls +void sub_814A958(u8 a1) +{ + 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) + { + do + { + if (v6 > 0x1F) + { + *cursub = gUnknown_0842F780; + cursub->x = v3; + v3 = ((v3 << 16) + 0x200000) >> 16; + v7 = a1 << 16; + } + 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; + } + } + + cursub++; + v2 = v2 + 1; + v6 = ((v7 >> 16) - v3) & 0xFFFF; + } + while (v7 - v3 > 7); + } + *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; +} +#elif ENGLISH +__attribute__((naked)) +void sub_814A958(u8 a1) +{ + 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\ + lsls r0, 24\n\ + ldr r4, _0814A9C4\n\ + ldr r2, _0814A9C8\n\ + lsrs r0, 24\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0\n\ + movs r1, 0x2\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + strh r2, [r4]\n\ + adds r4, 0x8\n\ + movs r7, 0x1\n\ + movs r2, 0x1\n\ + ldr r1, [sp]\n\ + subs r0, r1, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x7\n\ + ble _0814AA3A\n\ + ldr r0, _0814A9CC\n\ + mov r12, r0\n\ + mov r8, r1\n\ + movs r1, 0x8\n\ + negs r1, r1\n\ + mov r10, r1\n\ + ldr r5, _0814A9D0\n\ + mov r9, r5\n\ +_0814A99E:\n\ + lsls r0, r3, 16\n\ + asrs r3, r0, 16\n\ + cmp r3, 0x1F\n\ + ble _0814A9D4\n\ + mov r6, r12\n\ + ldr r0, [r6]\n\ + ldr r1, [r6, 0x4]\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + strh r2, [r4]\n\ + lsls r0, r2, 16\n\ + movs r1, 0x80\n\ + lsls r1, 14\n\ + adds r0, r1\n\ + lsrs r2, r0, 16\n\ + ldr r3, [sp]\n\ + lsls r5, r3, 16\n\ + b _0814AA20\n\ + .align 2, 0\n\ +_0814A9C4: .4byte gMenuCursorSubsprites\n\ +_0814A9C8: .4byte 0x0000ffff\n\ +_0814A9CC: .4byte gUnknown_0842F780\n\ +_0814A9D0: .4byte gUnknown_0842F788\n\ +_0814A9D4:\n\ + ldr r6, [sp]\n\ + lsls r5, r6, 16\n\ + mov r0, r8\n\ + cmp r0, 0x27\n\ + ble _0814AA0A\n\ + cmp r3, 0x8\n\ + ble _0814AA0A\n\ + mov r6, r12\n\ + ldr r0, [r6]\n\ + ldr r1, [r6, 0x4]\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + lsls r1, r2, 16\n\ + asrs r1, 16\n\ + adds r2, r1, 0\n\ + subs r2, 0x20\n\ + adds r0, r3, 0\n\ + mov r6, r10\n\ + ands r0, r6\n\ + adds r2, r0\n\ + strh r2, [r4]\n\ + movs r0, 0x18\n\ + ands r0, r3\n\ + adds r1, r0\n\ + lsls r1, 16\n\ + lsrs r2, r1, 16\n\ + b _0814AA20\n\ +_0814AA0A:\n\ + mov r3, r9\n\ + ldr r0, [r3]\n\ + ldr r1, [r3, 0x4]\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + strh r2, [r4]\n\ + lsls r0, r2, 16\n\ + movs r6, 0x80\n\ + lsls r6, 12\n\ + adds r0, r6\n\ + lsrs r2, r0, 16\n\ +_0814AA20:\n\ + adds r4, 0x8\n\ + adds r0, r7, 0x1\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + asrs r1, r5, 16\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + subs r1, r0\n\ + lsls r1, 16\n\ + lsrs r3, r1, 16\n\ + asrs r1, 16\n\ + cmp r1, 0x7\n\ + bgt _0814A99E\n\ +_0814AA3A:\n\ + ldr r5, _0814AAA8\n\ + ldr r0, [r5]\n\ + ldr r1, [r5, 0x4]\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + lsls r1, r2, 16\n\ + asrs r1, 16\n\ + subs r1, 0x7\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + adds r0, r1\n\ + strh r0, [r4]\n\ + adds r0, r7, 0x1\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + ldr r6, _0814AAAC\n\ + ldrb r0, [r6]\n\ + cmp r0, 0x40\n\ + beq _0814AA78\n\ + adds r1, r0, 0\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r1, _0814AAB0\n\ + adds r2, r0, r1\n\ + lsls r1, r7, 3\n\ + ldr r0, _0814AAB4\n\ + adds r1, r0\n\ + adds r0, r2, 0\n\ + bl SetSubspriteTables\n\ +_0814AA78:\n\ + ldr r1, _0814AAB8\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x40\n\ + beq _0814AA98\n\ + adds r1, r0, 0\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r1, _0814AAB0\n\ + adds r2, r0, r1\n\ + lsls r1, r7, 3\n\ + ldr r0, _0814AAB4\n\ + adds r1, r0\n\ + adds r0, r2, 0\n\ + bl SetSubspriteTables\n\ +_0814AA98:\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\ +_0814AAA8: .4byte gUnknown_0842F790\n\ +_0814AAAC: .4byte gUnknown_0203A3D0\n\ +_0814AAB0: .4byte gSprites\n\ +_0814AAB4: .4byte gSubspriteTables_842F5C0\n\ +_0814AAB8: .4byte gUnknown_0203A3D1\n\ + .syntax divided\n"); +} +#elif GERMAN +__attribute__((naked)) +void sub_814A958(u8 a1) +{ + 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\ + lsls r0, 24\n\ + ldr r4, _0814A9C4 @ =gMenuCursorSubsprites\n\ + ldr r2, _0814A9C8 @ =0x0000ffff\n\ + lsrs r0, 24\n\ + str r0, [sp]\n\ + ldr r0, _0814A9CC @ =gUnknown_0842F780\n\ + ldr r1, [r0, 0x4]\n\ + ldr r0, [r0]\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + strh r2, [r4]\n\ + adds r4, 0x8\n\ + movs r7, 0x1\n\ + movs r2, 0x1\n\ + ldr r1, [sp]\n\ + subs r0, r1, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x7\n\ + ble _0814AA3E\n\ + ldr r0, _0814A9D0 @ =gUnknown_0842F788\n\ + mov r12, r0\n\ + mov r8, r1\n\ + movs r1, 0x8\n\ + negs r1, r1\n\ + mov r10, r1\n\ + ldr r5, _0814A9D4 @ =gUnknown_0842F790\n\ + mov r9, r5\n\ +_0814A99E:\n\ + lsls r0, r3, 16\n\ + asrs r3, r0, 16\n\ + cmp r3, 0x1F\n\ + ble _0814A9D8\n\ + mov r6, r12\n\ + ldr r0, [r6]\n\ + ldr r1, [r6, 0x4]\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + strh r2, [r4]\n\ + lsls r0, r2, 16\n\ + movs r1, 0x80\n\ + lsls r1, 14\n\ + adds r0, r1\n\ + lsrs r2, r0, 16\n\ + ldr r3, [sp]\n\ + lsls r5, r3, 16\n\ + b _0814AA24\n\ + .align 2, 0\n\ +_0814A9C4: .4byte gMenuCursorSubsprites\n\ +_0814A9C8: .4byte 0x0000ffff\n\ +_0814A9CC: .4byte gUnknown_0842F780\n\ +_0814A9D0: .4byte gUnknown_0842F788\n\ +_0814A9D4: .4byte gUnknown_0842F790\n\ +_0814A9D8:\n\ + ldr r6, [sp]\n\ + lsls r5, r6, 16\n\ + mov r0, r8\n\ + cmp r0, 0x27\n\ + ble _0814AA0E\n\ + cmp r3, 0x8\n\ + ble _0814AA0E\n\ + mov r6, r12\n\ + ldr r0, [r6]\n\ + ldr r1, [r6, 0x4]\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + lsls r1, r2, 16\n\ + asrs r1, 16\n\ + adds r2, r1, 0\n\ + subs r2, 0x20\n\ + adds r0, r3, 0\n\ + mov r6, r10\n\ + ands r0, r6\n\ + adds r2, r0\n\ + strh r2, [r4]\n\ + movs r0, 0x18\n\ + ands r0, r3\n\ + adds r1, r0\n\ + lsls r1, 16\n\ + lsrs r2, r1, 16\n\ + b _0814AA24\n\ +_0814AA0E:\n\ + mov r3, r9\n\ + ldr r0, [r3]\n\ + ldr r1, [r3, 0x4]\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + strh r2, [r4]\n\ + lsls r0, r2, 16\n\ + movs r6, 0x80\n\ + lsls r6, 12\n\ + adds r0, r6\n\ + lsrs r2, r0, 16\n\ +_0814AA24:\n\ + adds r4, 0x8\n\ + adds r0, r7, 0x1\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + asrs r1, r5, 16\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + subs r1, r0\n\ + lsls r1, 16\n\ + lsrs r3, r1, 16\n\ + asrs r1, 16\n\ + cmp r1, 0x7\n\ + bgt _0814A99E\n\ +_0814AA3E:\n\ + ldr r5, _0814AAAC @ =gUnknown_0842F798\n\ + ldr r0, [r5]\n\ + ldr r1, [r5, 0x4]\n\ + str r0, [r4]\n\ + str r1, [r4, 0x4]\n\ + lsls r1, r2, 16\n\ + asrs r1, 16\n\ + subs r1, 0x7\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + adds r0, r1\n\ + strh r0, [r4]\n\ + adds r0, r7, 0x1\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + ldr r6, _0814AAB0 @ =gUnknown_0203A3D0\n\ + ldrb r0, [r6]\n\ + cmp r0, 0x40\n\ + beq _0814AA7C\n\ + adds r1, r0, 0\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r1, _0814AAB4 @ =gSprites\n\ + adds r2, r0, r1\n\ + lsls r1, r7, 3\n\ + ldr r0, _0814AAB8 @ =gSubspriteTables_842F5C0\n\ + adds r1, r0\n\ + adds r0, r2, 0\n\ + bl SetSubspriteTables\n\ +_0814AA7C:\n\ + ldr r1, _0814AABC @ =gUnknown_0203A3D1\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x40\n\ + beq _0814AA9C\n\ + adds r1, r0, 0\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r1, _0814AAB4 @ =gSprites\n\ + adds r2, r0, r1\n\ + lsls r1, r7, 3\n\ + ldr r0, _0814AAB8 @ =gSubspriteTables_842F5C0\n\ + adds r1, r0\n\ + adds r0, r2, 0\n\ + bl SetSubspriteTables\n\ +_0814AA9C:\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\ +_0814AAAC: .4byte gUnknown_0842F798\n\ +_0814AAB0: .4byte gUnknown_0203A3D0\n\ +_0814AAB4: .4byte gSprites\n\ +_0814AAB8: .4byte gSubspriteTables_842F5C0\n\ +_0814AABC: .4byte gUnknown_0203A3D1\n\ + .syntax divided\n"); +} +#endif + +void sub_814AABC(void (*callback)(struct Sprite *)) +{ + struct Sprite *spr; + + if (gUnknown_0203A3D0 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D0]; + spr->callback = callback; + } + + if (gUnknown_0203A3D1 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D1]; + spr->callback = callback; + } + + return; +} + +void sub_814AAF8(u16 a1) +{ + struct Sprite *spr; + u8 v2; + u8 v3; + u16 v4; + + if (gUnknown_0203A3D0 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D0]; + if (spr->template->paletteTag == 0xFFFF) + { + for (v2 = 0, v3 = 0xF, v4 = 0; v4 <= 0xFF; v4++) + { + if (gPlttBufferUnfaded[v4] == a1) + { + v2 = v4 >> 4; + v3 = v4 & 0xF; + } + } + spr->oam.paletteNum = v2; + RequestSpriteSheetCopy(&gUnknown_0842F140[v3 & 0xF]); + } + } + return; +} + +void sub_814AB84(void) +{ + struct Sprite *spr; + + if (gUnknown_0203A3D1 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D1]; + FreeSpriteOamMatrix(spr); + DestroySprite(spr); + gUnknown_0203A3D1 = 0x40; + + if (!gUnknown_0203A3D3) + REG_DISPCNT &= ~DISPCNT_OBJWIN_ON; + *(u8 *)(REG_ADDR_WINOUT + 1) = gUnknown_0203A3D4; + } + return; +} + +void unref_sub_814ABE4(int a1) +{ + struct Sprite *spr; + + CpuCopy16(gUnknown_0842F5BC[a1], &gMenuCursorSubsprites, 80); + + if (gUnknown_0203A3D0 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D0]; + SetSubspriteTables(spr, &gUnknown_0842F758[a1]); + } + if (gUnknown_0203A3D1 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D1]; + SetSubspriteTables(spr, &gUnknown_0842F758[a1]); + } + return; +} + +u8 CreateBlendedOutlineCursor(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5) +{ + int v8; + struct Sprite *spr; + u8 var1 = gUnknown_0203A3D2; + + if (var1 != 0x40) + sub_814AD44(); + + v8 = 1; + + if (a2 == 0xFFFF) + { + gUnknown_0203A360[a3 & 0xF] = a4; + if (LoadSpritePalette(&gUnknown_0842F248) != 0xFF ) + { + a2 = 0xFFF1; + v8 = 0; + } + } + + LoadSpriteSheetDeferred(&gUnknown_0842F1C0[a3 & 0xF]); +#if ENGLISH + gUnknown_0203A3D2 = CreateSprite(&gSpriteTemplate_842F298[v8], 0, 160, a1); +#elif GERMAN + gUnknown_0203A3D2 = CreateSprite(&gSpriteTemplate_842F298[v8], 0, 161, a1); +#endif + + if (gUnknown_0203A3D2 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D2]; + + if (a2 == 0xFFFF) + spr->oam.paletteNum = 0; + else + spr->oam.paletteNum = IndexOfSpritePaletteTag(a2); + } + sub_814ADF4(a5); + + return gUnknown_0203A3D2; +} + +void sub_814AD44(void) +{ + if (gUnknown_0203A3D2 != 0x40) + { + LoadTilesForSpriteSheet(&gUnknown_0842F1C0[0]); + DestroySpriteAndFreeResources(&gSprites[gUnknown_0203A3D2]); + gUnknown_0203A3D2 = 0x40; + } + return; +} + +void sub_814AD7C(u8 a1, u8 a2) +{ + struct Sprite *spr; + if (gUnknown_0203A3D2 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D2]; + spr->invisible = 0; + spr->centerToCornerVecX = 0; + spr->centerToCornerVecY = 0; + spr->pos1.x = a1; + spr->pos1.y = a2; + } + return; +} + +void sub_814ADC8() +{ + struct Sprite *spr; + if (gUnknown_0203A3D2 != 0x40) + { + spr = &gSprites[gUnknown_0203A3D2]; + spr->invisible = 1; + } + return; +} + +void sub_814ADF4(u8 a1) +{ + if (a1 > 0x12) + a1 = 0; + + if (gUnknown_0203A3D2 != 0x40) + SetSubspriteTables(&gSprites[gUnknown_0203A3D2], &gSubspriteTables_842F6C0[a1]); + return; +} + +#if GERMAN +void nullsub_814B200(void) +{ +} +#endif diff --git a/src/engine/mystery_event_menu.c b/src/engine/mystery_event_menu.c new file mode 100644 index 000000000..46b76fd88 --- /dev/null +++ b/src/engine/mystery_event_menu.c @@ -0,0 +1,341 @@ +#include "global.h" +#include "mystery_event_menu.h" +#include "link.h" +#include "main.h" +#include "menu.h" +#include "mystery_event_script.h" +#include "palette.h" +#include "save.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings2.h" +#include "task.h" +#include "text.h" + +extern u8 unk_2000000[]; + +static EWRAM_DATA u8 gUnknown_02039338 = 0; + +static void VBlankCB(void); +static bool8 CheckLanguageMatch(void); +static bool8 GetEventLoadMessage(u8 *dest, u32 status); +static void CB2_MysteryEventMenu(void); + +static void VBlankCB(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static bool8 CheckLanguageMatch(void) +{ + bool8 val = FALSE; + + if (gLinkPlayers[0].language == gLinkPlayers[1].language) + val = TRUE; + + return val; +} + +void CB2_InitMysteryEventMenu(void) +{ + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + SetVBlankCallback(VBlankCB); + SetUpWindowConfig(&gWindowConfig_81E6CE4); + InitMenuWindow(&gWindowConfig_81E6CE4); + MenuZeroFillScreen(); + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON; + REG_BLDCNT = 0; + CreateTask(Task_DestroySelf, 0); + StopMapMusic(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + FillPalette(0, 0, 2); + SetMainCallback2(CB2_MysteryEventMenu); +} + +static bool8 GetEventLoadMessage(u8 *dest, u32 status) +{ + bool8 retVal = 1; + + if (status == 0) + { + StringCopy(dest, gSystemText_EventLoadSuccess); + retVal = 0; + } + + if (status == 2) + retVal = 0; + + if (status == 1) + StringCopy(dest, gSystemText_LoadingError); + + return retVal; +} + +static void CB2_MysteryEventMenu(void) +{ + u16 unkVal; + + switch (gMain.state) + { + case 0: + MenuDrawTextWindow(0, 14, 29, 19); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + gMain.state++; + break; + case 1: + if (gPaletteFade.active) + break; + sub_8072044(gSystemText_LinkStandby); + gMain.state++; + break; + case 2: + if (MenuUpdateWindowText()) + { + gMain.state++; + gLinkType = 21761; + OpenLink(); + } + break; + case 3: + if ((gLinkStatus & 0x20) && (gLinkStatus & 0x1C) > 4) + { + PlaySE(SE_PIN); + sub_8072044(gSystemText_LoadEventPressA); + gMain.state++; + } + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + CloseLink(); + gMain.state = 15; + } + break; + case 4: + if (MenuUpdateWindowText()) + gMain.state++; + break; +#ifdef NONMATCHING + case 5: + if (GetLinkPlayerCount_2() != 2) + { + GetEventLoadMessage(gStringVar4, 1); + sub_8072044(gStringVar4); + gMain.state = 13; + break; + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_8007F4C(); + MenuDrawTextWindow(6, 5, 23, 8); + MenuPrint(gSystemText_LoadingEvent, 7, 6); + gMain.state++; + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + CloseLink(); + gMain.state = 15; + } + break; + case 6: + if (IsLinkConnectionEstablished()) + { + if (!gReceivedRemoteLinkPlayers) + break; + + if (GetLinkPlayerDataExchangeStatusTimed() == 3) + { + sub_800832C(); + MenuZeroFillWindowRect(6, 5, 23, 8); + GetEventLoadMessage(gStringVar4, 1); + sub_8072044(gStringVar4); + gMain.state = 13; + break; + } + else if (CheckLanguageMatch()) + { + sub_8072044(gSystemText_DontCutLink); + gMain.state++; + break; + } + else + { + CloseLink(); + MenuZeroFillWindowRect(6, 5, 23, 8); + GetEventLoadMessage(gStringVar4, 1); + sub_8072044(gStringVar4); + gMain.state = 13; + break; + } + } + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + CloseLink(); + gMain.state = 15; + break; + } + break; +#else + case 5: + if (GetLinkPlayerCount_2() != 2) + { + goto label; + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_8007F4C(); + MenuDrawTextWindow(6, 5, 23, 8); + MenuPrint(gSystemText_LoadingEvent, 7, 6); + gMain.state++; + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + CloseLink(); + gMain.state = 15; + } + break; + case 6: + if (IsLinkConnectionEstablished()) + { + register u8 *ptr asm("r0"); + register u32 offset1 asm("r2"); + register u32 offset2 asm("r1"); + + if (!gReceivedRemoteLinkPlayers) + break; + + if (GetLinkPlayerDataExchangeStatusTimed() == 3) + { + sub_800832C(); + MenuZeroFillWindowRect(6, 5, 23, 8); + GetEventLoadMessage(gStringVar4, 1); + sub_8072044(gStringVar4); + ptr = (u8 *)&gMain; + offset1 = offsetof(struct Main, state); + asm("" ::: "r1"); + ptr += offset1; + *ptr = 13; + } + else if (CheckLanguageMatch()) + { + register u8 *ptr2 asm("r1"); + register int offset3 asm("r0"); + register int dummy asm("r2"); + sub_8072044(gSystemText_DontCutLink); + ptr2 = (u8 *)&gMain; + offset3 = offsetof(struct Main, state); + if (dummy) + dummy++; + ptr2 += offset3; + (*ptr2)++; + break; + } + else + { + CloseLink(); + MenuZeroFillWindowRect(6, 5, 23, 8); + label: + GetEventLoadMessage(gStringVar4, 1); + sub_8072044(gStringVar4); + ptr = (u8 *)&gMain; + offset2 = offsetof(struct Main, state); + ptr += offset2; + *ptr = 13; + } + break; + } + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + CloseLink(); + gMain.state = 15; + break; + } + break; +#endif + case 7: + if (MenuUpdateWindowText()) + gMain.state++; + break; + case 8: + if (GetBlockReceivedStatus()) + { + ResetBlockReceivedFlags(); + gMain.state++; + } + break; + case 9: + gMain.state++; + break; + case 10: + sub_800832C(); + gMain.state++; + break; + case 11: + if (gReceivedRemoteLinkPlayers) + break; + unkVal = RunMysteryEventScript(unk_2000000); + CpuFill32(0, unk_2000000, 0x7D4); + if (!GetEventLoadMessage(gStringVar4, unkVal)) + TrySavingData(NORMAL_SAVE); + gMain.state++; + break; + case 12: + sub_8072044(gStringVar4); + gMain.state++; + break; + case 13: + MenuZeroFillWindowRect(6, 5, 23, 8); + if (MenuUpdateWindowText()) + { + gMain.state++; + gUnknown_02039338 = 0; + } + break; + case 14: + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gMain.state++; + } + break; + case 15: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gMain.state++; + break; + case 16: + if (!gPaletteFade.active) + DoSoftReset(); + break; + } + + if (gLinkStatus & 0x40) + { + if (!IsLinkMaster()) + { + CloseLink(); + MenuZeroFillWindowRect(6, 5, 23, 8); + GetEventLoadMessage(gStringVar4, 1); + sub_8072044(gStringVar4); + gMain.state = 13; + } + } + + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} diff --git a/src/engine/mystery_event_script.c b/src/engine/mystery_event_script.c new file mode 100644 index 000000000..f507942a7 --- /dev/null +++ b/src/engine/mystery_event_script.c @@ -0,0 +1,462 @@ +#include "global.h" +#include "berry.h" +#include "easy_chat.h" +#include "event_data.h" +#include "mail_data.h" +#include "mystery_event_script.h" +#include "pokedex.h" +#include "pokemon.h" +#include "pokemon_size_record.h" +#include "script.h" +#include "species.h" +#include "strings.h" +#include "string_util.h" +#include "text.h" +#include "util.h" + +#if ENGLISH +#define LANGUAGE_MASK 0x2 +#elif GERMAN +#define LANGUAGE_MASK 0x4 +#endif + +#ifdef SAPPHIRE +#define VERSION_MASK 0x100 +#else +#define VERSION_MASK 0x80 +#endif + +extern void party_compaction(void); +extern void sub_813601C(void); + +extern ScrCmdFunc gMysteryEventScriptCmdTable[]; +extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[]; + +extern const u8 gOtherText_BerryObtainedDadHasIt[]; +extern const u8 gOtherText_BerryTransformed[]; +extern const u8 gOtherText_BerryAlreadyObtained[]; +extern const u8 gOtherText_SpecialRibbonReceived[]; +extern const u8 gOtherText_DexUpgraded[]; +extern const u8 gOtherText_RareWordAdded[]; +extern const u8 gOtherText_PokeWasSentOver[]; +extern const u8 gOtherText_PartyIsFull[]; +extern const u8 gOtherText_NewTrainerInHoenn[]; +extern const u8 gOtherText_DataCannotUseVersion[]; + +static EWRAM_DATA struct ScriptContext sMysteryEventScriptContext = {0}; + +static bool32 CheckCompatibility(u16 a1, u32 a2, u16 a3, u32 a4) +{ + if (!(a1 & LANGUAGE_MASK)) + return FALSE; + + if (!(a2 & LANGUAGE_MASK)) + return FALSE; + + if (!(a3 & 0x4)) + return FALSE; + + if (!(a4 & VERSION_MASK)) + return FALSE; + + return TRUE; +} + +static void SetIncompatible(void) +{ + StringExpandPlaceholders(gStringVar4, gOtherText_DataCannotUseVersion); + SetMysteryEventScriptStatus(3); +} + +static void InitMysteryEventScript(struct ScriptContext *ctx, u8 *script) +{ + InitScriptContext(ctx, gMysteryEventScriptCmdTable, gMysteryEventScriptCmdTableEnd); + SetupBytecodeScript(ctx, script); + ctx->data[0] = (u32)script; + ctx->data[1] = 0; + ctx->data[2] = 0; + ctx->data[3] = 0; +} + +static bool32 RunMysteryEventScriptCommand(struct ScriptContext *ctx) +{ + if (RunScriptCommand(ctx) && ctx->data[3]) + return TRUE; + else + return FALSE; +} + +u32 RunMysteryEventScript(u8 *script) +{ + struct ScriptContext *ctx = &sMysteryEventScriptContext; + InitMysteryEventScript(ctx, script); + while (RunMysteryEventScriptCommand(ctx)) + ; + return ctx->data[2]; +} + +void SetMysteryEventScriptStatus(u32 val) +{ + sMysteryEventScriptContext.data[2] = val; +} + +static int CalcChecksum(u8 *data, int size) +{ + unsigned int i; + int sum = 0; + + for (i = 0; i < size; i++) + sum += data[i]; + + return sum; +} + +static u32 GetWord(u8 *ptr) +{ + return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); +} + +static void SetWord(u8 *ptr, u32 val) +{ + ptr[0] = val; + ptr[1] = val >> 8; + ptr[2] = val >> 16; + ptr[3] = val >> 24; +} + +bool8 unref_sub_81261B4(u8 *a1, int a2) +{ + if (a1[0x0] == 1 && a1[0x11] == 15 && !GetWord(a1 + 0x12)) + { + int v4 = GetWord(a1 + 0x16) - a2 + (int)a1; + int v5 = GetWord(a1 + 0x1A); + int v6 = CalcChecksum((u8*)v4, v5 - a2 + (int)a1 - v4); + SetWord(a1 + 0x12, v6); + return TRUE; + } + + return FALSE; +} + +bool8 unref_sub_812620C(u8 *a1, int a2) +{ + if (a1[0x0] == 1 && a1[0x11] == 16 && !GetWord(a1 + 0x12)) + { + int v4 = GetWord(a1 + 0x16) - a2 + (int)a1; + int v5 = GetWord(a1 + 0x1A); + int v6 = CalcCRC16((u8*)v4, v5 - a2 + (int)a1 - v4); + SetWord(a1 + 0x12, v6); + return TRUE; + } + + return FALSE; +} + +static u32 CalcRecordMixingGiftChecksum(void) +{ + u32 sum = 0; + int i; + char *data = (char *)&gSaveBlock1.recordMixingGift.data; + + for (i = 0; i < sizeof(gSaveBlock1.recordMixingGift.data); i++) + { + sum += data[i]; + } + + return sum; +} + +static bool32 IsRecordMixingGiftValid(void) +{ + struct RecordMixingGiftData *data = &gSaveBlock1.recordMixingGift.data; + + u32 checksum = CalcRecordMixingGiftChecksum(); + + if (!data->unk0) + return FALSE; + + if (!data->quantity) + return FALSE; + + if (!data->itemId) + return FALSE; + + if (checksum == 0) + return FALSE; + + if (checksum == gSaveBlock1.recordMixingGift.checksum) + return TRUE; + else + return FALSE; +} + +static void ClearRecordMixingGift(void) +{ + CpuFill16(0, &gSaveBlock1.recordMixingGift, sizeof(gSaveBlock1.recordMixingGift)); +} + +static void SetRecordMixingGift(u8 unk, u8 quantity, u16 itemId) +{ + if (!unk || !quantity || !itemId) + { + ClearRecordMixingGift(); + } + else + { + gSaveBlock1.recordMixingGift.data.unk0 = unk; + gSaveBlock1.recordMixingGift.data.quantity = quantity; + gSaveBlock1.recordMixingGift.data.itemId = itemId; + gSaveBlock1.recordMixingGift.checksum = CalcRecordMixingGiftChecksum(); + } +} + +u16 GetRecordMixingGift(void) +{ + struct RecordMixingGiftData *data = &gSaveBlock1.recordMixingGift.data; + + if (!IsRecordMixingGiftValid()) + { + ClearRecordMixingGift(); + return 0; + } + else + { + u16 itemId = data->itemId; + data->quantity--; + if (data->quantity == 0) + ClearRecordMixingGift(); + else + gSaveBlock1.recordMixingGift.checksum = CalcRecordMixingGiftChecksum(); + return itemId; + } +} + +bool8 MEScrCmd_end(struct ScriptContext *ctx) +{ + StopScript(ctx); + return TRUE; +} + +bool8 MEScrCmd_checkcompat(struct ScriptContext *ctx) +{ + u16 v1; + u32 v2; + u16 v3; + u32 v4; + + ctx->data[1] = ScriptReadWord(ctx); + v1 = ScriptReadHalfword(ctx); + v2 = ScriptReadWord(ctx); + v3 = ScriptReadHalfword(ctx); + v4 = ScriptReadWord(ctx); + + if (CheckCompatibility(v1, v2, v3, v4) == TRUE) + ctx->data[3] = 1; + else + SetIncompatible(); + + return TRUE; +} + +bool8 MEScrCmd_nop(struct ScriptContext *ctx) +{ + return FALSE; +} + +bool8 MEScrCmd_setstatus(struct ScriptContext *ctx) +{ + u8 value = ScriptReadByte(ctx); + ctx->data[2] = value; + return FALSE; +} + +bool8 MEScrCmd_setmsg(struct ScriptContext *ctx) +{ + u8 value = ScriptReadByte(ctx); + u8 *str = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + if (value == 255 || value == ctx->data[2]) + StringExpandPlaceholders(gStringVar4, str); + return FALSE; +} + +bool8 MEScrCmd_runscript(struct ScriptContext *ctx) +{ + u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + ScriptContext2_RunNewScript(script); + return FALSE; +} + +bool8 MEScrCmd_setenigmaberry(struct ScriptContext *ctx) +{ + u8 *str; + const u8 *message; + bool32 haveBerry = IsEnigmaBerryValid(); + u8 *berry = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + StringCopyN(gStringVar1, gSaveBlock1.enigmaBerry.berry.name, 7); + SetEnigmaBerry(berry); + StringCopyN(gStringVar2, gSaveBlock1.enigmaBerry.berry.name, 7); + + if (!haveBerry) + { + str = gStringVar4; + message = gOtherText_BerryObtainedDadHasIt; + } + else if (StringCompare(gStringVar1, gStringVar2)) + { + str = gStringVar4; + message = gOtherText_BerryTransformed; + } + else + { + str = gStringVar4; + message = gOtherText_BerryAlreadyObtained; + } + + StringExpandPlaceholders(str, message); + + ctx->data[2] = 2; + + if (IsEnigmaBerryValid() == TRUE) + VarSet(0x402D, 1); + else + ctx->data[2] = 1; + + return FALSE; +} + +bool8 MEScrCmd_giveribbon(struct ScriptContext *ctx) +{ + u8 index = ScriptReadByte(ctx); + u8 ribbonId = ScriptReadByte(ctx); + GiveGiftRibbonToParty(index, ribbonId); + StringExpandPlaceholders(gStringVar4, gOtherText_SpecialRibbonReceived); + ctx->data[2] = 2; + return FALSE; +} + +bool8 MEScrCmd_initramscript(struct ScriptContext *ctx) +{ + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + u8 objectId = ScriptReadByte(ctx); + u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + u8 *scriptEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + InitRamScript(script, scriptEnd - script, mapGroup, mapNum, objectId); + return FALSE; +} + +bool8 MEScrCmd_givenationaldex(struct ScriptContext *ctx) +{ + EnableNationalPokedex(); + StringExpandPlaceholders(gStringVar4, gOtherText_DexUpgraded); + ctx->data[2] = 2; + return FALSE; +} + +bool8 MEScrCmd_addrareword(struct ScriptContext *ctx) +{ + sub_80EB890(ScriptReadByte(ctx)); + StringExpandPlaceholders(gStringVar4, gOtherText_RareWordAdded); + ctx->data[2] = 2; + return FALSE; +} + +bool8 MEScrCmd_setrecordmixinggift(struct ScriptContext *ctx) +{ + u8 unk = ScriptReadByte(ctx); + u8 quantity = ScriptReadByte(ctx); + u16 itemId = ScriptReadHalfword(ctx); + SetRecordMixingGift(unk, quantity, itemId); + return FALSE; +} + +bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) +{ + struct MailStruct mail; + struct Pokemon pokemon; + u16 species; + u16 heldItem; + u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]; + void *pokemonPtr = (void *)data; + void *mailPtr = (void *)(data + sizeof(struct Pokemon)); + + pokemon = *(struct Pokemon *)pokemonPtr; + species = GetMonData(&pokemon, MON_DATA_SPECIES2); + + if (species == SPECIES_EGG) + StringCopyN(gStringVar1, gSystemText_Egg, 11); + else + StringCopyN(gStringVar1, gSystemText_Pokemon2, 11); + + if (gPlayerPartyCount == 6) + { + StringExpandPlaceholders(gStringVar4, gOtherText_PartyIsFull); + ctx->data[2] = 3; + } + else + { + memcpy(&gPlayerParty[5], pokemonPtr, sizeof(struct Pokemon)); + memcpy(&mail, mailPtr, sizeof(struct MailStruct)); + + if (species != SPECIES_EGG) + { + u16 pokedexNum = SpeciesToNationalPokedexNum(species); + GetNationalPokedexFlag(pokedexNum, 2); + GetNationalPokedexFlag(pokedexNum, 3); + } + + heldItem = GetMonData(&gPlayerParty[5], MON_DATA_HELD_ITEM); + if (ItemIsMail(heldItem)) + GiveMailToMon2(&gPlayerParty[5], &mail); + party_compaction(); + CalculatePlayerPartyCount(); + StringExpandPlaceholders(gStringVar4, gOtherText_PokeWasSentOver); + ctx->data[2] = 2; + } + + return FALSE; +} + +bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx) +{ + u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]; + memcpy(gSaveBlock2.filler_A8.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.filler_A8.ereaderTrainer)); + sub_813601C(); + StringExpandPlaceholders(gStringVar4, gOtherText_NewTrainerInHoenn); + ctx->data[2] = 2; + return FALSE; +} + +bool8 MEScrCmd_enableresetrtc(struct ScriptContext *ctx) +{ + EnableResetRTC(); + StringExpandPlaceholders(gStringVar4, gSystemText_ClockAdjustmentUsable); + ctx->data[2] = 2; + return FALSE; +} + +bool8 MEScrCmd_checksum(struct ScriptContext *ctx) +{ + int checksum = ScriptReadWord(ctx); + u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + if (checksum != CalcChecksum(data, dataEnd - data)) + { + ctx->data[3] = 0; + ctx->data[2] = 1; + } + return TRUE; +} + +bool8 MEScrCmd_crc(struct ScriptContext *ctx) +{ + int crc = ScriptReadWord(ctx); + u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + if (crc != CalcCRC16(data, dataEnd - data)) + { + ctx->data[3] = 0; + ctx->data[2] = 1; + } + return TRUE; +} diff --git a/src/engine/name_string_util.c b/src/engine/name_string_util.c new file mode 100644 index 000000000..f1a935453 --- /dev/null +++ b/src/engine/name_string_util.c @@ -0,0 +1,40 @@ +#include "global.h" +#include "name_string_util.h" +#include "string_util.h" +#include "text.h" + +void PadNameString(u8 *a1, u8 a2) +{ + u8 i; + + StripExtCtrlCodes(a1); + i = StringLength(a1); + + if (a2 == 0xFC) + { + while (i < 6) + { + a1[i] = 0xFC; + a1[i + 1] = 7; + i += 2; + } + } + else + { + while (i < 6) + { + a1[i] = a2; + i++; + } + } + + a1[i] = EOS; +} + +void SanitizeNameString(u8 *a1) +{ + if (StringLength(a1) < 6) + ConvertInternationalString(a1, 1); + else + StripExtCtrlCodes(a1); +} diff --git a/src/engine/naming_screen.c b/src/engine/naming_screen.c new file mode 100644 index 000000000..6c107f022 --- /dev/null +++ b/src/engine/naming_screen.c @@ -0,0 +1,2038 @@ +#include "global.h" +#include "naming_screen.h" +#include "data2.h" +#include "field_effect.h" +#include "field_map_obj.h" +#include "field_player_avatar.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "pokemon_icon.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings2.h" +#include "task.h" +#include "text.h" +#include "trig.h" +#include "util.h" + +#ifdef ENGLISH +#define COLUMN_COUNT 9 +#elif GERMAN +#define COLUMN_COUNT 10 +#endif + +extern u16 gKeyRepeatStartDelay; + +extern u8 unk_2000000[]; + +#define namingScreenData (*(struct NamingScreenData *)(unk_2000000)) + +const u32 gSpriteImage_83CE094[] = INCBIN_U32("graphics/naming_screen/pc_icon/0.4bpp"); +const u32 gSpriteImage_83CE154[] = INCBIN_U32("graphics/naming_screen/pc_icon/1.4bpp"); + +//Some unused pointer, perhaps. +asm(".section .rodata\n\ +@ XXX: what is this?\n\ + .align 2\n\ + .4byte 0x2000000\n"); + +extern u16 *const gUnknown_083CE28C[]; +extern const struct SubspriteTable gSubspriteTables_83CE558[]; +extern const struct SubspriteTable gSubspriteTables_83CE560[]; +extern const struct SubspriteTable gSubspriteTables_83CE578[]; +extern const struct SubspriteTable gSubspriteTables_83CE580[]; +extern const struct SpriteTemplate gSpriteTemplate_83CE5C8; +extern const struct SpriteTemplate gSpriteTemplate_83CE5E0; +extern const struct SpriteTemplate gSpriteTemplate_83CE5F8; +extern const struct SpriteTemplate gSpriteTemplate_83CE610; +extern const struct SpriteTemplate gSpriteTemplate_83CE628; +extern const struct SpriteTemplate gSpriteTemplate_83CE640; +extern const struct SpriteTemplate gSpriteTemplate_83CE658; +extern const struct SpriteTemplate gSpriteTemplate_83CE670; +extern const struct SpriteTemplate gSpriteTemplate_83CE688; +extern const struct SpriteSheet gUnknown_083CE6A0[]; +extern const struct SpritePalette gUnknown_083CE708[]; +extern const u8 gNamingScreenMenu_Gfx[]; +extern const u16 gNamingScreenPalettes[]; +extern const u16 gUnknown_083CE748[]; +extern const u16 gUnknown_083CEBF8[]; +extern const u16 gUnknown_083CF0A8[]; +extern const u16 gUnknown_08E86258[]; + +static void C2_NamingScreen(void); +static void sub_80B5AA0(void); +static void StoreNamingScreenParameters(u8, u8 *, u16, u16, u32, MainCallback); +static void NamingScreen_TurnOffScreen(void); +static void NamingScreen_Init(void); +static void NamingScreen_ClearVram(void); +static void NamingScreen_ClearOam(void); +static void NamingScreen_SetUpVideoRegs(void); +static void NamingScreen_SetUpWindow(void); +static void NamingScreen_ResetObjects(void); +static void sub_80B5DFC(void); +static void sub_80B5E20(void); +static void sub_80B5E3C(void); +static void NamingScreen_InitDisplayMode(void); +static void Task_DoNothing(u8); +static void sub_80B7558(void); +static void sub_80B753C(void); +static void sub_80B7680(void); +static void sub_80B75C4(void); +static void sub_80B7794(void); +static void sub_80B78A8(void); +static void sub_80B7960(void); +static void CursorInit(void); +static void sub_80B6A80(void); +static void sub_80B6CA8(void); +static void sub_80B6D04(void); +static void sub_80B6E44(void); +static void InputInit(void); +static void sub_80B6438(void); +static void sub_80B5E50(void); +static void Task_NamingScreenMain(u8); +static void SetInputState(u8); +static void sub_80B68D8(u8); +static bool8 HandleKeyboardEvent(void); +static bool8 IsCursorAnimFinished(void); +static void MoveCursorToOKButton(void); +static void sub_80B6B14(void); +static void StartPageSwapAnim(void); +static void sub_80B6888(u8); +static void sub_80B6460(u8, u8, u8); +static bool8 IsPageSwapAnimNotInProgress(void); +static void sub_80B7614(void); +static void GetCursorPos(s16 *, s16 *); +static void SetCursorPos(s16, s16); +static void sub_80B77F8(void); +static void sub_80B74B0(void); +static void DisplaySentToPCMessage(void); +static u8 GetKeyRoleAtCursorPos(void); +static u8 sub_80B61C8(void); +static void DeleteTextCharacter(void); +static void sub_80B7090(void); +static u8 GetInputEvent(void); +static bool8 sub_80B7004(void); +static void sub_80B6914(void); +static void Task_HandlePageSwapAnim(u8); +static void sub_80B6C48(u8, struct Sprite *, struct Sprite *); +static u8 GetTextCaretPosition(void); +static u8 GetCharAtKeyboardPos(s16, s16); +static bool8 sub_80B7104(void); +static bool8 sub_80B713C(void); +static void AddTextCharacter(u8); +static bool8 sub_80B7198(u8); +static bool8 sub_80B7264(u8); +static void sub_80B7370(u8, u8); +static void sub_80B73CC(u8, u8); +static bool8 sub_80B71E4(u8); +static void sub_80B7474(u8, u8); +static void sub_80B72A4(u8, u8); +static bool8 sub_80B720C(u8); +static void sub_80B7568(void); +static void sub_80B75B0(void); +static void sub_80B7698(u16 *, const u16 *); +static void sub_80B76E0(); +static void nullsub_20(u8, u8); +static void PrintKeyboardCharacters(u8); + +void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 c, u16 d, u32 e, MainCallback returnCallback) +{ + StoreNamingScreenParameters(templateNum, destBuffer, c, d, e, returnCallback); + SetMainCallback2(C2_NamingScreen); +} + +static void C2_NamingScreen(void) +{ + switch (gMain.state) + { + case 0: + NamingScreen_TurnOffScreen(); + NamingScreen_Init(); + gMain.state++; + break; + case 1: + NamingScreen_ClearVram(); + gMain.state++; + break; + case 2: + NamingScreen_ClearOam(); + gMain.state++; + break; + case 3: + NamingScreen_SetUpVideoRegs(); + gMain.state++; + break; + case 4: + NamingScreen_SetUpWindow(); + gMain.state++; + break; + case 5: + NamingScreen_ResetObjects(); + gMain.state++; + break; + case 6: + sub_80B5DFC(); + gMain.state++; + break; + case 7: + sub_80B5E20(); + sub_80B5E3C(); + NamingScreen_InitDisplayMode(); + SetMainCallback2(sub_80B5AA0); + break; + } +} + +static void sub_80B5AA0(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void VBlankCB_NamingScreen(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + REG_BG1VOFS = namingScreenData.bg1vOffset; + REG_BG2VOFS = namingScreenData.bg2vOffset; + REG_BG1CNT &= 0xFFFC; + REG_BG1CNT |= namingScreenData.unk8; + REG_BG2CNT &= 0xFFFC; + REG_BG2CNT |= namingScreenData.unkA; +} + +static void StoreNamingScreenParameters(u8 templateNum, u8 *destBuffer, u16 c, u16 d, u32 e, MainCallback returnCallback) +{ + struct Task *task; + + //Create a task that does nothing, and use it as a temporary space to store parameters + task = &gTasks[CreateTask(Task_DoNothing, 0xFF)]; + task->data[0] = templateNum; + task->data[1] = c; + task->data[2] = d; + task->data[3] = e >> 16; + task->data[4] = e; + StoreWordInTwoHalfwords(&task->data[5], (u32)destBuffer); + StoreWordInTwoHalfwords(&task->data[7], (u32)returnCallback); +} + +static void GetNamingScreenParameters(void) +{ + u8 taskId; + struct Task *task; + + taskId = FindTaskIdByFunc(Task_DoNothing); + task = &gTasks[taskId]; + namingScreenData.templateNum = task->data[0]; + namingScreenData.unk3E = task->data[1]; + namingScreenData.unk40 = task->data[2]; + namingScreenData.unk42 = (task->data[3] << 16) | (u16)task->data[4]; + LoadWordFromTwoHalfwords(&task->data[5], (u32 *)&namingScreenData.destBuffer); + LoadWordFromTwoHalfwords(&task->data[7], (u32 *)&namingScreenData.returnCallback); + DestroyTask(taskId); +} + +static void Task_DoNothing(u8 taskId) +{ +} + +static void NamingScreen_TurnOffScreen(void) +{ + SetVBlankCallback(NULL); + SetHBlankCallback(NULL); + REG_DISPCNT = 0; +} + +static void NamingScreen_InitDisplayMode(void) +{ + u16 savedIme; + + SetVBlankCallback(VBlankCB_NamingScreen); + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; +} + +static void NamingScreen_ClearVram(void) +{ + u8 *addr = (void *)VRAM; + u32 size = 0x10000; + + while (1) + { + DmaFill16(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill16(3, 0, addr, size); + break; + } + } +} + +static void NamingScreen_ClearOam(void) +{ + DmaClear16(3, (void *)OAM, 0x400); +} + +static void NamingScreen_SetUpVideoRegs(void) +{ + REG_BG0CNT = 0; + REG_BG1CNT = 0; + REG_BG2CNT = 0; + REG_BG3CNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(28) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(29) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(30) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BLDCNT = 0x640; + REG_BLDALPHA = 0x80C; +} + +static const struct NamingScreenTemplate *const sNamingScreenTemplates[]; //forward declaration + +static void NamingScreen_Init(void) +{ + GetNamingScreenParameters(); + namingScreenData.state = 0; + namingScreenData.bg1vOffset = 0; + namingScreenData.bg2vOffset = 0; + namingScreenData.unk8 = 1; + namingScreenData.unkA = 2; + namingScreenData.unkC = 0; + namingScreenData.unkD = 1; + namingScreenData.template = sNamingScreenTemplates[namingScreenData.templateNum]; + namingScreenData.currentPage = namingScreenData.template->unk4; + namingScreenData.unk2 = 14 - namingScreenData.template->maxChars / 2; + namingScreenData.unk3C = gKeyRepeatStartDelay; + memset(namingScreenData.textBuffer, 0xFF, sizeof(namingScreenData.textBuffer)); + if (namingScreenData.template->unk0 != 0) + StringCopy(namingScreenData.textBuffer, namingScreenData.destBuffer); + gKeyRepeatStartDelay = 16; +} + +static void NamingScreen_SetUpWindow(void) +{ + SetUpWindowConfig(&gWindowConfig_81E6E88); + InitMenuWindow(&gWindowConfig_81E6E88); +} + +static void NamingScreen_ResetObjects(void) +{ + ResetPaletteFade(); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); +} + +static void sub_80B5DFC(void) +{ + sub_80B7558(); + sub_80B753C(); + sub_80B7680(); + sub_80B75C4(); + sub_80B7794(); + sub_80B78A8(); + sub_80B7960(); +} + +static void sub_80B5E20(void) +{ + CursorInit(); + sub_80B6A80(); + sub_80B6CA8(); + sub_80B6D04(); + sub_80B6E44(); +} + +static void sub_80B5E3C(void) +{ + InputInit(); + sub_80B6438(); + sub_80B5E50(); +} + +//-------------------------------------------------- +// Naming screen main +//-------------------------------------------------- + +static bool8 MainState_BeginFadeIn(struct Task *); +static bool8 MainState_WaitFadeIn(struct Task *); +static bool8 MainState_HandleInput(struct Task *); +static bool8 MainState_MoveToOKButton(struct Task *); +static bool8 MainState_StartPageSwap(struct Task *); +static bool8 MainState_WaitPageSwap(struct Task *); +static bool8 MainState_6(struct Task *); +static bool8 MainState_UpdateSentToPCMessage(struct Task *); +static bool8 MainState_BeginFadeInOut(struct Task *); +static bool8 MainState_WaitFadeOutAndExit(struct Task *); + +static bool8 (*const sMainStateFuncs[])(struct Task *) = +{ + MainState_BeginFadeIn, + MainState_WaitFadeIn, + MainState_HandleInput, + MainState_MoveToOKButton, + MainState_StartPageSwap, + MainState_WaitPageSwap, + MainState_6, + MainState_UpdateSentToPCMessage, + MainState_BeginFadeInOut, + MainState_WaitFadeOutAndExit, +}; + +static void sub_80B5E50(void) +{ + u8 taskId; + + taskId = CreateTask(Task_NamingScreenMain, 2); + Task_NamingScreenMain(taskId); +} + +static void Task_NamingScreenMain(u8 taskId) +{ + while (sMainStateFuncs[namingScreenData.state](&gTasks[taskId]) != 0) + ; +} + +static bool8 MainState_BeginFadeIn(struct Task *task) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + namingScreenData.state++; + return 0; +} + +static bool8 MainState_WaitFadeIn(struct Task *task) +{ + if (!gPaletteFade.active) + { + SetInputState(INPUT_STATE_ENABLED); + sub_80B68D8(1); + namingScreenData.state++; + } + return FALSE; +} + +static bool8 MainState_HandleInput(struct Task *task) +{ + return HandleKeyboardEvent(); +} + +static bool8 MainState_MoveToOKButton(struct Task *task) +{ + if (IsCursorAnimFinished()) + { + SetInputState(INPUT_STATE_ENABLED); + MoveCursorToOKButton(); + namingScreenData.state = MAIN_STATE_HANDLE_INPUT; + } + return FALSE; +} + +static bool8 MainState_StartPageSwap(struct Task *task) +{ + SetInputState(INPUT_STATE_DISABLED); + sub_80B6B14(); + StartPageSwapAnim(); + sub_80B6888(1); + sub_80B6460(0, 0, 1); + PlaySE(SE_WIN_OPEN); + namingScreenData.state = MAIN_STATE_WAIT_PAGE_SWAP; + return FALSE; +} + +static bool8 MainState_WaitPageSwap(struct Task *task) +{ + s16 cursorX; + s16 cursorY; + + if (IsPageSwapAnimNotInProgress()) + { + namingScreenData.state = MAIN_STATE_HANDLE_INPUT; + namingScreenData.currentPage++; + namingScreenData.currentPage %= 3; + sub_80B7614(); + sub_80B77F8(); + SetInputState(INPUT_STATE_ENABLED); + GetCursorPos(&cursorX, &cursorY); +#if ENGLISH + if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7)) + cursorX = 5; +#elif GERMAN + if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 7 || cursorX == 8)) + cursorX = 6; +#endif + SetCursorPos(cursorX, cursorY); + sub_80B6888(0); + } + return FALSE; +} + +static bool8 MainState_6(struct Task *task) +{ + sub_80B74B0(); + SetInputState(INPUT_STATE_DISABLED); + sub_80B68D8(0); + sub_80B6460(3, 0, 1); + gKeyRepeatStartDelay = namingScreenData.unk3C; + if (namingScreenData.templateNum == NAMING_SCREEN_TEMPLATE_MON_NAME + && CalculatePlayerPartyCount() >= 6) + { + DisplaySentToPCMessage(); + namingScreenData.state = MAIN_STATE_UPDATE_SENT_TO_PC_MESSAGE; + return FALSE; + } + else + { + namingScreenData.state = MAIN_STATE_BEGIN_FADE_OUT; + return TRUE; //Exit the naming screen + } +} + +static bool8 MainState_UpdateSentToPCMessage(struct Task *task) +{ + if (MenuUpdateWindowText()) + namingScreenData.state++; + return FALSE; +} + +static bool8 MainState_BeginFadeInOut(struct Task *task) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + namingScreenData.state++; + return FALSE; +} + +static bool8 MainState_WaitFadeOutAndExit(struct Task *task) +{ + if (!gPaletteFade.active) + SetMainCallback2(namingScreenData.returnCallback); + return FALSE; +} + +//-------------------------------------------------- +// Keyboard handling +//-------------------------------------------------- + +enum +{ + KEY_ROLE_CHAR, + KEY_ROLE_PAGE, + KEY_ROLE_BACKSPACE, + KEY_ROLE_OK, +}; + + +static bool8 KeyboardKeyHandler_Character(u8); +static bool8 KeyboardKeyHandler_Page(u8); +static bool8 KeyboardKeyHandler_Backspace(u8); +static bool8 KeyboardKeyHandler_OK(u8); + +static bool8 (*const sKeyboardKeyHandlers[])(u8) = +{ + KeyboardKeyHandler_Character, + KeyboardKeyHandler_Page, + KeyboardKeyHandler_Backspace, + KeyboardKeyHandler_OK, +}; + +static bool8 HandleKeyboardEvent(void) +{ + u8 event = GetInputEvent(); + u8 keyRole = GetKeyRoleAtCursorPos(); + + if (event == KBEVENT_PRESSED_SELECT) + return sub_80B61C8(); + else if (event == KBEVENT_PRESSED_B) + { + DeleteTextCharacter(); + return FALSE; + } + else if (event == 7) + { + sub_80B7090(); + return FALSE; + } + return sKeyboardKeyHandlers[keyRole](event); +} + +static bool8 KeyboardKeyHandler_Character(u8 event) +{ + sub_80B6460(3, 0, 0); + if (event == KBEVENT_PRESSED_A) + { + u8 var = sub_80B7004(); + + sub_80B6914(); + if (var) + { + SetInputState(INPUT_STATE_DISABLED); + namingScreenData.state = MAIN_STATE_MOVE_TO_OK_BUTTON; + } + } + return FALSE; +} + +static bool8 KeyboardKeyHandler_Page(u8 event) +{ + sub_80B6460(0, 1, 0); + if (event == KBEVENT_PRESSED_A) + return sub_80B61C8(); + else + return FALSE; +} + +static bool8 KeyboardKeyHandler_Backspace(u8 event) +{ + sub_80B6460(1, 1, 0); + if (event == KBEVENT_PRESSED_A) + DeleteTextCharacter(); + return FALSE; +} + +static bool8 KeyboardKeyHandler_OK(u8 event) +{ + sub_80B6460(2, 1, 0); + if (event == KBEVENT_PRESSED_A) + { + PlaySE(SE_SELECT); + namingScreenData.state = MAIN_STATE_6; + return TRUE; + } + else + return FALSE; +} + +static bool8 sub_80B61C8(void) +{ + namingScreenData.state = MAIN_STATE_START_PAGE_SWAP; + return TRUE; +} + +//-------------------------------------------------- +// Input handling +//-------------------------------------------------- + +enum +{ + FNKEY_CASE, + FNKEY_BACK, + FNKEY_OK, +}; + +#define tState data[0] +#define tKeyboardEvent data[1] +#define tKbFunctionKey data[2] + +static void InputState_Disabled(struct Task *); +static void InputState_Enabled(struct Task *); + +static void (*const sInputStateFuncs[])(struct Task *) = +{ + InputState_Disabled, + InputState_Enabled, +}; + +static void Task_HandleInput(u8); +static void HandleDpadMovement(struct Task *); + +static void InputInit(void) +{ + CreateTask(Task_HandleInput, 1); +} + +static u8 GetInputEvent(void) +{ + u8 taskId = FindTaskIdByFunc(Task_HandleInput); + + return gTasks[taskId].tKeyboardEvent; +} + +static void SetInputState(u8 state) +{ + u8 taskId = FindTaskIdByFunc(Task_HandleInput); + + gTasks[taskId].tState = state; +} + +static void Task_HandleInput(u8 taskId) +{ + sInputStateFuncs[gTasks[taskId].tState](&gTasks[taskId]); +} + +static void InputState_Disabled(struct Task *task) +{ + task->tKeyboardEvent = 0; +} + +static void InputState_Enabled(struct Task *task) +{ + task->tKeyboardEvent = 0; + if (gMain.newKeys & A_BUTTON) + { + task->tKeyboardEvent = KBEVENT_PRESSED_A; + return; + } + if (gMain.newKeys & B_BUTTON) + { + task->tKeyboardEvent = KBEVENT_PRESSED_B; + return; + } + if (gMain.newKeys & SELECT_BUTTON) + { + task->tKeyboardEvent = KBEVENT_PRESSED_SELECT; + return; + } + if (gMain.newKeys & START_BUTTON) + { + task->tKeyboardEvent = KBEVENT_PRESSED_START; + MoveCursorToOKButton(); + return; + } + HandleDpadMovement(task); +} + +static const s16 sDpadDeltaX[] = +{ + 0, //none + 0, //up + 0, //down + -1, //left + 1 //right +}; + +static const s16 sDpadDeltaY[] = +{ + 0, //none + -1, //up + 1, //down + 0, //left + 0 //right +}; + +static const s16 s4RowTo3RowTableY[] = {0, 1, 1, 2}; +static const s16 gUnknown_083CE274[] = {0, 0, 3, 0}; + +static void HandleDpadMovement(struct Task *task) +{ + s16 cursorX; + s16 cursorY; + u16 dpadDir; + s16 prevCursorX; + + GetCursorPos(&cursorX, &cursorY); + dpadDir = 0; + if (gMain.newAndRepeatedKeys & DPAD_UP) + dpadDir = 1; + if (gMain.newAndRepeatedKeys & DPAD_DOWN) + dpadDir = 2; + if (gMain.newAndRepeatedKeys & DPAD_LEFT) + dpadDir = 3; + if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + dpadDir = 4; + + //Get new cursor position + prevCursorX = cursorX; + cursorX += sDpadDeltaX[dpadDir]; + cursorY += sDpadDeltaY[dpadDir]; + + //Wrap cursor position in the X direction + if (cursorX < 0) + cursorX = COLUMN_COUNT - 1; + if (cursorX > COLUMN_COUNT - 1) + cursorX = 0; + + //Handle cursor movement in X direction + if (sDpadDeltaX[dpadDir] != 0) + { + //The "others" page only has 5 columns +#if ENGLISH + if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7)) +#elif GERMAN + if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7 || cursorX == 8)) +#endif + { + if (sDpadDeltaX[dpadDir] > 0) + cursorX = COLUMN_COUNT - 1; + else + cursorX = 5; + } + + if (cursorX == COLUMN_COUNT - 1) + { + //We are now on the last column + task->tKbFunctionKey = cursorY; + cursorY = s4RowTo3RowTableY[cursorY]; + } + else if (prevCursorX == COLUMN_COUNT - 1) + { + if (cursorY == 1) + cursorY = task->tKbFunctionKey; + else + cursorY = gUnknown_083CE274[cursorY]; + } + } + + if (cursorX == COLUMN_COUNT - 1) + { + //There are only 3 keys on the last column, unlike the others, + //so wrap Y accordingly + if (cursorY < 0) + cursorY = 2; + if (cursorY > 2) + cursorY = 0; + if (cursorY == 0) + task->tKbFunctionKey = FNKEY_BACK; + else if (cursorY == 2) + task->tKbFunctionKey = FNKEY_OK; + } + else + { + if (cursorY < 0) + cursorY = 3; + if (cursorY > 3) + cursorY = 0; + } + SetCursorPos(cursorX, cursorY); +} + +#undef tState +#undef tKeyboardEvent +#undef tKbFunctionKey + +//-------------------------------------------------- +// +//-------------------------------------------------- + +static void Task_80B64D4(u8); +static u16 sub_80B654C(u8); +static void sub_80B65AC(u8); +static void sub_80B65D4(struct Task *, u8, u8); + +static void sub_80B6438(void) +{ + u8 taskId; + + taskId = CreateTask(Task_80B64D4, 3); + gTasks[taskId].data[0] = 3; +} + +static void sub_80B6460(u8 a, u8 b, u8 c) +{ + struct Task *task = &gTasks[FindTaskIdByFunc(Task_80B64D4)]; + + if (a == task->data[0] && c == 0) + { + task->data[1] = b; + task->data[2] = 1; + return; + } + if (a == 3 && task->data[1] == 0 && c == 0) + return; + if (task->data[0] != 3) + sub_80B65AC(task->data[0]); + sub_80B65D4(task, a, b); +} + +static void Task_80B64D4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (task->data[0] == 3 || task->data[2] == 0) + return; + MultiplyInvertedPaletteRGBComponents(sub_80B654C(task->data[0]), task->data[3], task->data[3], task->data[3]); + if (task->data[5] != 0) + { + task->data[5]--; + if (task->data[5] != 0) + return; + } + task->data[5] = 2; + task->data[3] += task->data[4]; + if (task->data[3] == 16) + task->data[4] = -task->data[4]; + else if (task->data[3] == 0) + { + task->data[2] = task->data[1]; + task->data[4] = -task->data[4]; + } +} + +static u16 sub_80B654C(u8 a) +{ + const u16 arr[] = + { + IndexOfSpritePaletteTag(4) * 16 + 0x10E, + IndexOfSpritePaletteTag(6) * 16 + 0x10C, + IndexOfSpritePaletteTag(6) * 16 + 0x10E, + }; + + return arr[a]; +} + +static void sub_80B65AC(u8 a) +{ + u16 index = sub_80B654C(a); + + gPlttBufferFaded[index] = gPlttBufferUnfaded[index]; +} + +static void sub_80B65D4(struct Task *task, u8 b, u8 c) +{ + task->data[0] = b; + task->data[1] = c; + task->data[2] = 1; + task->data[3] = 15; + task->data[4] = 1; + task->data[5] = 0; +} + +//-------------------------------------------------- +// Page Swap +//-------------------------------------------------- + +#define tState data[0] +#define tFrameCount data[1] + +static bool8 PageSwapAnimState_Init(struct Task *); +static bool8 PageSwapAnimState_1(struct Task *); +static bool8 PageSwapAnimState_2(struct Task *); +static bool8 PageSwapAnimState_Done(struct Task *); + +static bool8 (*const sPageSwapAnimStateFuncs[])(struct Task *) = +{ + PageSwapAnimState_Init, + PageSwapAnimState_1, + PageSwapAnimState_2, + PageSwapAnimState_Done, +}; + +static void StartPageSwapAnim(void) +{ + u8 taskId; + + taskId = CreateTask(Task_HandlePageSwapAnim, 0); + Task_HandlePageSwapAnim(taskId); +} + +static bool8 IsPageSwapAnimNotInProgress(void) +{ + if (FindTaskIdByFunc(Task_HandlePageSwapAnim) == 0xFF) + return TRUE; + else + return FALSE; +} + +static void Task_HandlePageSwapAnim(u8 taskId) +{ + while (sPageSwapAnimStateFuncs[gTasks[taskId].tState](&gTasks[taskId]) != 0) + ; +} + +static bool8 PageSwapAnimState_Init(struct Task *task) +{ + namingScreenData.bg1vOffset = 0; + namingScreenData.bg2vOffset = 0; + task->tState++; + return 0; +} + +static bool8 PageSwapAnimState_1(struct Task *task) +{ + u16 *const arr[] = + { + &namingScreenData.bg2vOffset, + &namingScreenData.bg1vOffset + }; + + task->tFrameCount += 4; + *arr[namingScreenData.unkC] = Sin(task->tFrameCount, 40); + *arr[namingScreenData.unkD] = Sin((task->tFrameCount + 128) & 0xFF, 40); + if (task->tFrameCount >= 64) + { + u8 temp = namingScreenData.unk8; //Why u8 and not u16? + + namingScreenData.unk8 = namingScreenData.unkA; + namingScreenData.unkA = temp; + task->tState++; + } + return 0; +} + +static bool8 PageSwapAnimState_2(struct Task *task) +{ + u16 *const arr[] = {&namingScreenData.bg2vOffset, &namingScreenData.bg1vOffset}; + + task->tFrameCount += 4; + *arr[namingScreenData.unkC] = Sin(task->tFrameCount, 40); + *arr[namingScreenData.unkD] = Sin((task->tFrameCount + 128) & 0xFF, 40); + if (task->tFrameCount >= 128) + { + u8 temp = namingScreenData.unkC; + + namingScreenData.unkC = namingScreenData.unkD; + namingScreenData.unkD = temp; + task->tState++; + } + return 0; +} + +static bool8 PageSwapAnimState_Done(struct Task *task) +{ + DestroyTask(FindTaskIdByFunc(Task_HandlePageSwapAnim)); + return 0; +} + +#undef tState +#undef tFrameCount + +//-------------------------------------------------- +// Cursor +//-------------------------------------------------- + +static void CursorInit(void) +{ + namingScreenData.cursorSpriteId = CreateSprite(&gSpriteTemplate_83CE640, 0, 0, 0); + gSprites[namingScreenData.cursorSpriteId].oam.priority = 1; + gSprites[namingScreenData.cursorSpriteId].oam.objMode = 1; + gSprites[namingScreenData.cursorSpriteId].data6 = 1; + gSprites[namingScreenData.cursorSpriteId].data6 = 2; + SetCursorPos(0, 0); +} + +static const u8 sKeyboardSymbolPositions[][COLUMN_COUNT] = { +#if ENGLISH + {1, 3, 5, 8, 10, 12, 14, 17, 19}, //Upper page + {1, 3, 5, 8, 10, 12, 14, 17, 19}, //Lower page + {1, 4, 7, 10, 13, 16, 16, 16, 19}, //Others page +#elif GERMAN + {2, 3, 4, 5, 9, 10, 11, 12, 16, 19}, //Upper page + {2, 3, 4, 5, 9, 10, 11, 12, 16, 19}, //Lower page + {1, 4, 7, 10, 13, 16, 16, 16, 16, 19}, //Others page +#endif +}; + +static u8 CursorColToKeyboardCol(s16 x) +{ + return sKeyboardSymbolPositions[namingScreenData.currentPage][x]; +} + +static void SetCursorPos(s16 x, s16 y) +{ + struct Sprite *cursorSprite = &gSprites[namingScreenData.cursorSpriteId]; + + cursorSprite->pos1.x = CursorColToKeyboardCol(x) * 8 + 27; + cursorSprite->pos1.y = y * 16 + 80; + cursorSprite->data2 = cursorSprite->data0; + cursorSprite->data3 = cursorSprite->data1; + cursorSprite->data0 = x; + cursorSprite->data1 = y; +} + +static void GetCursorPos(s16 *x, s16 *y) +{ + struct Sprite *cursorSprite = &gSprites[namingScreenData.cursorSpriteId]; + + *x = cursorSprite->data0; + *y = cursorSprite->data1; +} + +static void MoveCursorToOKButton(void) +{ + SetCursorPos(COLUMN_COUNT - 1, 2); +} + +static void sub_80B6888(u8 a) +{ + gSprites[namingScreenData.cursorSpriteId].data4 &= -256; + gSprites[namingScreenData.cursorSpriteId].data4 |= a; + StartSpriteAnim(&gSprites[namingScreenData.cursorSpriteId], 0); +} + +static void sub_80B68D8(u8 a) +{ + gSprites[namingScreenData.cursorSpriteId].data4 &= 0xFF; + gSprites[namingScreenData.cursorSpriteId].data4 |= a << 8; +} + +static void sub_80B6914(void) +{ + StartSpriteAnim(&gSprites[namingScreenData.cursorSpriteId], 1); +} + +static bool8 IsCursorAnimFinished(void) +{ + return gSprites[namingScreenData.cursorSpriteId].animEnded; +} + +static u8 GetKeyRoleAtCursorPos(void) +{ + const u8 keyRoles[] = {KEY_ROLE_PAGE, KEY_ROLE_BACKSPACE, KEY_ROLE_OK}; + s16 cursorX; + s16 cursorY; + + GetCursorPos(&cursorX, &cursorY); + if (cursorX < COLUMN_COUNT - 1) + return KEY_ROLE_CHAR; + else + return keyRoles[cursorY]; +} + +void sub_80B6998(struct Sprite *sprite) +{ + if (sprite->animEnded) + StartSpriteAnim(sprite, 0); + sprite->invisible = (sprite->data4 & 0xFF); + if (sprite->data0 == COLUMN_COUNT - 1) + sprite->invisible = TRUE; + if (sprite->invisible || (sprite->data4 & 0xFF00) == 0 + || sprite->data0 != sprite->data2 || sprite->data1 != sprite->data3) + { + sprite->data5 = 0; + sprite->data6 = 1; + sprite->data7 = 2; + } + sprite->data7--; + if (sprite->data7 == 0) + { + sprite->data5 += sprite->data6; + if (sprite->data5 == 16 || sprite->data5 == 0) + sprite->data6 = -sprite->data6; + sprite->data7 = 2; + } + if ((sprite->data4 & 0xFF00) != 0) + { + s8 gb = sprite->data5; + s8 r = sprite->data5 >> 1; + u16 index = IndexOfSpritePaletteTag(5) * 16 + 0x0101; + + MultiplyInvertedPaletteRGBComponents(index, r, gb, gb); + } +} + +static void sub_80B6A80(void) +{ + u8 spriteId1; + u8 spriteId2; + u8 spriteId3; + + spriteId1 = CreateSprite(&gSpriteTemplate_83CE5C8, 0xCC, 0x50, 0); + namingScreenData.unk10 = spriteId1; + SetSubspriteTables(&gSprites[spriteId1], gSubspriteTables_83CE558); + + spriteId2 = CreateSprite(&gSpriteTemplate_83CE5F8, 0xCC, 0x4C, 1); + gSprites[spriteId1].data6 = spriteId2; + SetSubspriteTables(&gSprites[spriteId2], gSubspriteTables_83CE560); + + spriteId3 = CreateSprite(&gSpriteTemplate_83CE5E0, 0xCC, 0x4B, 2); + gSprites[spriteId3].oam.priority = 1; + gSprites[spriteId1].data7 = spriteId3; +} + +static void sub_80B6B14(void) +{ + struct Sprite *sprite = &gSprites[namingScreenData.unk10]; + + sprite->data0 = 2; + sprite->data1 = namingScreenData.currentPage; +} + +static u8 sub_80B6B5C(struct Sprite *); +static u8 sub_80B6B98(struct Sprite *); +static u8 sub_80B6B9C(struct Sprite *); +static u8 sub_80B6C08(struct Sprite *); + +static u8 (*const gUnknown_083CE2B4[])(struct Sprite *) = +{ + sub_80B6B5C, + sub_80B6B98, + sub_80B6B9C, + sub_80B6C08, +}; + +void sub_80B6B34(struct Sprite *sprite) +{ + while (gUnknown_083CE2B4[sprite->data0](sprite) != 0) + ; +} + +static u8 sub_80B6B5C(struct Sprite *sprite) +{ + struct Sprite *sprite1 = &gSprites[sprite->data6]; + struct Sprite *sprite2 = &gSprites[sprite->data7]; + + sub_80B6C48(namingScreenData.currentPage, sprite1, sprite2); + sprite->data0++; + return 0; +} + +static u8 sub_80B6B98(struct Sprite *sprite) +{ + return 0; +} + +static u8 sub_80B6B9C(struct Sprite *sprite) +{ + struct Sprite *r4 = &gSprites[sprite->data6]; + struct Sprite *r5 = &gSprites[sprite->data7]; + + r4->pos2.y++; + if (r4->pos2.y > 7) + { + sprite->data0++; + r4->pos2.y = -4; + r4->invisible = TRUE; + sub_80B6C48(((u8)sprite->data1 + 1) % 3, r4, r5); + } + return 0; +} + +static u8 sub_80B6C08(struct Sprite *sprite) +{ + struct Sprite *r2 = &gSprites[sprite->data6]; + + r2->invisible = FALSE; + r2->pos2.y++; + if (r2->pos2.y >= 0) + { + r2->pos2.y = 0; + sprite->data0 = 1; + } + return 0; +} + +static const u16 gUnknown_083CE2C4[] = {1, 3, 2}; +static const u16 gUnknown_083CE2CA[] = {4, 6, 5}; + +static void sub_80B6C48(u8 a, struct Sprite *b, struct Sprite *c) +{ + c->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083CE2C4[a]); + b->sheetTileStart = GetSpriteTileStartByTag(gUnknown_083CE2CA[a]); + b->subspriteTableNum = a; +} + +// + +static void sub_80B6CA8(void) +{ + u8 spriteId; + + spriteId = CreateSprite(&gSpriteTemplate_83CE610, 0xCC, 0x6C, 0); + SetSubspriteTables(&gSprites[spriteId], gSubspriteTables_83CE578); + + spriteId = CreateSprite(&gSpriteTemplate_83CE628, 0xCC, 0x84, 0); + SetSubspriteTables(&gSprites[spriteId], gSubspriteTables_83CE578); +} + +static void sub_80B6D04(void) +{ + u8 spriteId; + s16 r1; + u8 i; + + r1 = (namingScreenData.unk2 - 1) * 8 + 4; + spriteId = CreateSprite(&gSpriteTemplate_83CE658, r1, 0x28, 0); + gSprites[spriteId].oam.priority = 3; + r1 = namingScreenData.unk2 * 8 + 4; + for (i = 0; i < namingScreenData.template->maxChars; i++, r1 += 8) + { + spriteId = CreateSprite(&gSpriteTemplate_83CE670, r1, 0x2C, 0); + gSprites[spriteId].oam.priority = 3; + gSprites[spriteId].data0 = i; + } +} + +void sub_80B6D9C(struct Sprite *sprite) +{ + const s16 arr[] = {0, -4, -2, -1}; + + if (sprite->data0 == 0 || --sprite->data0 == 0) + { + sprite->data0 = 8; + sprite->data1 = (sprite->data1 + 1) & 3; + } + sprite->pos2.x = arr[sprite->data1]; +} + +void sub_80B6DE8(struct Sprite *sprite) +{ + const s16 arr[] = {2, 3, 2, 1}; + u8 var; + + var = GetTextCaretPosition(); + if (var != (u8)sprite->data0) + { + sprite->pos2.y = 0; + sprite->data1 = 0; + sprite->data2 = 0; + } + else + { + sprite->pos2.y = arr[sprite->data1]; + sprite->data2++; + if (sprite->data2 > 8) + { + sprite->data1 = (sprite->data1 + 1) & 3; + sprite->data2 = 0; + } + } +} + +// + +static void nullsub_40(void); +static void sub_80B6E68(void); +static void sub_80B6EBC(void); +static void sub_80B6EFC(void); + +static void (*const gUnknown_083CE2E0[])(void) = +{ + nullsub_40, + sub_80B6E68, + sub_80B6EBC, + sub_80B6EFC, +}; + +static void sub_80B6E44(void) +{ + gUnknown_083CE2E0[namingScreenData.template->unk2](); +} + +static void nullsub_40(void) +{ +} + +static void sub_80B6E68(void) +{ + u8 rivalGfxId; + u8 spriteId; + + rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, namingScreenData.unk3E); + spriteId = AddPseudoFieldObject(rivalGfxId, SpriteCallbackDummy, 0x38, 0x18, 0); + gSprites[spriteId].oam.priority = 3; + StartSpriteAnim(&gSprites[spriteId], 4); +} + +static void sub_80B6EBC(void) +{ + u8 spriteId; + + spriteId = CreateSprite(&gSpriteTemplate_83CE688, 0x34, 0x18, 0); + SetSubspriteTables(&gSprites[spriteId], gSubspriteTables_83CE580); + gSprites[spriteId].oam.priority = 3; +} + +static void sub_80B6EFC(void) +{ + u8 spriteId; + + sub_809D51C(); + spriteId = CreateMonIcon(namingScreenData.unk3E, SpriteCallbackDummy, 0x34, 0x18, 0, namingScreenData.unk42); + gSprites[spriteId].oam.priority = 3; +} + +static u8 GetTextCaretPosition(void) +{ + u8 i; + + for (i = 0; i < namingScreenData.template->maxChars; i++) + { + if (namingScreenData.textBuffer[i] == EOS) + return i; + } + return namingScreenData.template->maxChars - 1; +} + +static u8 GetPreviousTextCaretPosition(void) +{ + s8 i; + + for (i = namingScreenData.template->maxChars - 1; i > 0; i--) + { + if (namingScreenData.textBuffer[i] != EOS) + return i; + } + return 0; +} + +static void DeleteTextCharacter(void) +{ + u8 index; + u8 var2; + + index = GetPreviousTextCaretPosition(); + namingScreenData.textBuffer[index] = 0; + sub_80B7960(); + namingScreenData.textBuffer[index] = EOS; + var2 = GetKeyRoleAtCursorPos(); + if (var2 == 0 || var2 == 2) + sub_80B6460(1, 0, 1); + PlaySE(SE_BOWA); +} + +static bool8 sub_80B7004(void) +{ + s16 x; + s16 y; + u8 ch; + bool8 r4; + + GetCursorPos(&x, &y); + x = CursorColToKeyboardCol(x); + ch = GetCharAtKeyboardPos(x, y); + r4 = 1; + if (ch == 0xFF) + r4 = sub_80B7104(); + else if (ch == 0xFE) + r4 = sub_80B713C(); + else + AddTextCharacter(ch); + sub_80B7960(); + PlaySE(SE_SELECT); + if (r4) + { + if (GetPreviousTextCaretPosition() == namingScreenData.template->maxChars - 1) + return TRUE; + } + return FALSE; +} + +static void sub_80B7090(void) // DoInput? +{ + u8 r5; + u8 r4; + + r5 = GetPreviousTextCaretPosition(); + r4 = namingScreenData.textBuffer[r5]; + if (sub_80B7198(r4)) + { + if (sub_80B7264(r4)) + sub_80B7370(r4, r5); + else + sub_80B73CC(r4, r5); + } + else + { + if (sub_80B71E4(r4)) + sub_80B7474(r4, r5); + else + sub_80B72A4(r4, r5); + } + sub_80B7960(); + PlaySE(SE_SELECT); +} + +static bool8 sub_80B7104(void) +{ + u8 r5; + u8 r4; + + r5 = GetPreviousTextCaretPosition(); + r4 = namingScreenData.textBuffer[r5]; + if (sub_80B720C(r4)) + { + sub_80B72A4(r4, r5); + return TRUE; + } + return FALSE; +} + +static bool8 sub_80B713C(void) +{ + u8 r5; + u8 r4; + + r5 = GetPreviousTextCaretPosition(); + r4 = namingScreenData.textBuffer[r5]; + if (sub_80B7264(r4)) + { + sub_80B7370(r4, r5); + return TRUE; + } + return FALSE; +} + +static void AddTextCharacter(u8 ch) +{ + u8 index = GetTextCaretPosition(); + + namingScreenData.textBuffer[index] = ch; +} + +static bool8 sub_80B7198(u8 a) +{ + if ((a >= 55 && a <= 74) + || (a >= 135 && a <= 139) + || (a >= 140 && a <= 144) + || (a >= 145 && a <= 149) + || (a >= 150 && a <= 154)) + return TRUE; + else + return FALSE; +} + +static bool8 sub_80B71E4(u8 a) +{ + if ((a >= 75 && a <= 79) + || (a >= 155 && a <= 159)) + return TRUE; + else + return FALSE; +} + +static bool8 sub_80B720C(u8 a) +{ + if ((a >= 6 && a <= 20) + || (a >= 26 && a <= 30) + || (a >= 75 && a <= 79) + || (a >= 86 && a <= 100) + || (a >= 106 && a <= 110) + || (a >= 155 && a <= 159)) + return TRUE; + else + return FALSE; +} + +static bool8 sub_80B7264(u8 a) +{ + if ((a >= 26 && a <= 30) + || (a >= 70 && a <= 74) + || (a >= 106 && a <= 110) + || (a >= 150 && a <= 154)) + return TRUE; + else + return FALSE; +} + +static void sub_80B72A4(u8 a, u8 b) +{ + u8 chr = a; + + if (a >= 6 && a <= 10) + chr = a + 0x31; + else if (a >= 11 && a <= 15) + chr = a + 0x31; + else if (a >= 16 && a <= 20) + chr = a + 0x31; + else if (a >= 26 && a <= 30) + chr = a + 0x2C; + else if (a >= 75 && a <= 79) + chr = a + 0xFB; + else if (a >= 86 && a <= 90) + chr = a + 0x31; + else if (a >= 91 && a <= 95) + chr = a + 0x31; + else if (a >= 96 && a <= 100) + chr = a + 0x31; + else if (a >= 106 && a <= 110) + chr = a + 0x2C; + else if (a >= 155 && a <= 159) + chr = a + 0xFB; + namingScreenData.textBuffer[b] = chr; +} + +static void sub_80B7370(u8 a, u8 b) +{ + u8 chr = a; + + if (a >= 26 && a <= 30) + chr = a + 0x31; + else if (a >= 70 && a <= 74) + chr = a + 5; + else if (a >= 106 && a <= 110) + chr = a + 0x31; + else if (a >= 150 && a <= 154) + chr = a + 5; + namingScreenData.textBuffer[b] = chr; +} + +static void sub_80B73CC(u8 a, u8 b) +{ + u8 chr = a; + + if (a >= 55 && a <= 59) + chr = a + 0xCF; + else if (a >= 60 && a <= 64) + chr = a + 0xCF; + else if (a >= 65 && a <= 69) + chr = a + 0xCF; + else if (a >= 70 && a <= 74) + chr = a + 0xD4; + else if (a >= 135 && a <= 139) + chr = a + 0xCF; + else if (a >= 140 && a <= 144) + chr = a + 0xCF; + else if (a >= 145 && a <= 149) + chr = a + 0xCF; + else if (a >= 150 && a <= 154) + chr = a + 0xD4; + namingScreenData.textBuffer[b] = chr; +} + +static void sub_80B7474(u8 a, u8 b) +{ + u8 chr = a; + + if (a >= 75 && a <= 79) + chr = a + 0xCF; + else if (a >= 155 && a <= 159) + chr = a + 0xCF; + namingScreenData.textBuffer[b] = chr; +} + +static void sub_80B74B0(void) +{ + u8 i; + + for (i = 0; i < namingScreenData.template->maxChars; i++) + { + if (namingScreenData.textBuffer[i] != 0 && namingScreenData.textBuffer[i] != 0xFF) + { + StringCopyN(namingScreenData.destBuffer, namingScreenData.textBuffer, namingScreenData.template->maxChars + 1); + break; + } + } +} + +static void DisplaySentToPCMessage(void) +{ + StringCopy(gStringVar1, namingScreenData.destBuffer); + StringExpandPlaceholders(gStringVar4, gOtherText_SentToPC); + BasicInitMenuWindow(&gWindowConfig_81E6E88); + MenuDisplayMessageBox(); + sub_8072044(gStringVar4); +} + +static void sub_80B753C(void) +{ + LoadSpriteSheets(gUnknown_083CE6A0); + LoadSpritePalettes(gUnknown_083CE708); +} + +static void sub_80B7558(void) +{ + sub_80B7568(); + sub_80B75B0(); +} + +static void sub_80B7568(void) +{ + const void *src; + void *dst; + + src = gNamingScreenMenu_Gfx; + dst = (void *)(VRAM + gMenuMessageBoxContentTileOffset * 32); + DmaCopy16(3, src, dst, 0x800); + + src = gNamingScreenMenu_Gfx; + dst = (void *)(VRAM + 0x8000 + gMenuMessageBoxContentTileOffset * 32); + DmaCopy16(3, src, dst, 0x800); +} + +static void sub_80B75B0(void) +{ + LoadPalette(gNamingScreenPalettes, 0, 0x80); +} + +static void sub_80B7650(u16 *); +static void sub_80B7660(u16 *); +static void sub_80B7670(u16 *); + +static void (*const gUnknown_083CE2F0[][2])(u16 *) = +{ + {sub_80B7660, sub_80B7650}, + {sub_80B7650, sub_80B7670}, + {sub_80B7670, sub_80B7660}, +}; + +static void sub_80B75C4(void) +{ + u16 *const arr[] = + { + (u16 *)(VRAM + 0xE000), + (u16 *)(VRAM + 0xE800), + }; + + gUnknown_083CE2F0[namingScreenData.currentPage][0](arr[namingScreenData.unkC]); + gUnknown_083CE2F0[namingScreenData.currentPage][1](arr[namingScreenData.unkD]); +} + +static void sub_80B7614(void) +{ + u16 *const arr[] = + { + (u16 *)(VRAM + 0xE000), + (u16 *)(VRAM + 0xE800), + }; + + gUnknown_083CE2F0[namingScreenData.currentPage][1](arr[namingScreenData.unkD]); +} + +static void sub_80B7650(u16 *vramBuffer) +{ + sub_80B7698(vramBuffer, gUnknown_083CE748); +} + +static void sub_80B7660(u16 *vramBuffer) +{ + sub_80B7698(vramBuffer, gUnknown_083CEBF8); +} + +static void sub_80B7670(u16 *vramBuffer) +{ + sub_80B7698(vramBuffer, gUnknown_083CF0A8); +} + +static void sub_80B7680(void) +{ + sub_80B76E0(VRAM + 0xF000, gUnknown_08E86258); +} + +static void sub_80B7698(u16 *vramBuffer, const u16 *src) +{ + s16 i; + s16 j; + + for (i = 0; i < 20; i++) + { + for (j = 0; j < 30; j++, src++) + { + vramBuffer[i * 32 + j] = *src + gMenuMessageBoxContentTileOffset; + } + } +} + +static void sub_80B76E0(u16 *vramBuffer, const u16 *src) +{ + s16 i; + s16 j; + + for (i = 0; i < 20; i++) + { + for (j = 0; j < 30; j++, src++) + { + vramBuffer[i * 32 + j] = *src + gMenuMessageBoxContentTileOffset; + } + src += 2; + } +} + +static void sub_80B772C(void) +{ + nullsub_20(namingScreenData.currentPage, namingScreenData.unkC); +} + +static void sub_80B7740(void) +{ + nullsub_20((namingScreenData.currentPage + 1) % 3, namingScreenData.unkD); +} + +static void nullsub_20(u8 a, u8 b) +{ +} + +static void sub_80B7838(void); +static void sub_80B7844(void); +static void sub_80B7850(void); + +static void (*const gUnknown_083CE310[][2])(void) = +{ + sub_80B7844, + sub_80B7838, + sub_80B7838, + sub_80B7850, + sub_80B7850, + sub_80B7844, +}; + +static const struct WindowConfig *const gUnknown_083CE328[][2][2] = +{ + { + {&gWindowConfig_81E6EDC, &gWindowConfig_81E6EF8}, + {&gWindowConfig_81E6EA4, &gWindowConfig_81E6EC0}, + }, + { + {&gWindowConfig_81E6EA4, &gWindowConfig_81E6EC0}, + {&gWindowConfig_81E6F14, &gWindowConfig_81E6F30}, + }, + { + {&gWindowConfig_81E6F14, &gWindowConfig_81E6F30}, + {&gWindowConfig_81E6EDC, &gWindowConfig_81E6EF8}, + }, +}; + +static void nullsub_61(void); +static void sub_80B78F8(void); + +static void (*const gUnknown_083CE358[])(void) = +{ + nullsub_61, + nullsub_61, + sub_80B78F8, + sub_80B78F8, +}; + +static void nullsub_62(void); +static void sub_80B7924(void); + +static void (*const gUnknown_083CE368[])(void) = +{ + nullsub_62, + sub_80B7924, +}; + +static const u8 sKeyboardCharacters[][4][20]; //forward declaration + +static u8 GetCharAtKeyboardPos(s16 a, s16 b) +{ + return sKeyboardCharacters[namingScreenData.currentPage][b][a]; +} + +static void sub_80B7794(void) +{ + BasicInitMenuWindow(gUnknown_083CE328[namingScreenData.currentPage][0][namingScreenData.unkC]); + gUnknown_083CE310[namingScreenData.currentPage][0](); + BasicInitMenuWindow(gUnknown_083CE328[namingScreenData.currentPage][1][namingScreenData.unkD]); + gUnknown_083CE310[namingScreenData.currentPage][1](); + sub_80B772C(); + sub_80B7740(); +} + +static void sub_80B77F8(void) +{ + BasicInitMenuWindow(gUnknown_083CE328[namingScreenData.currentPage][1][namingScreenData.unkD]); + gUnknown_083CE310[namingScreenData.currentPage][1](); + sub_80B7740(); +} + +static void sub_80B7838(void) +{ + PrintKeyboardCharacters(1); +} + +static void sub_80B7844(void) +{ + PrintKeyboardCharacters(0); +} + +static void sub_80B7850(void) +{ + PrintKeyboardCharacters(2); +} + +static void PrintKeyboardCharacters(u8 page) //print letters on page +{ + s16 i; + s16 r5; + + for (i = 0, r5 = 9; i < 4; i++, r5 += 2) + MenuPrint(sKeyboardCharacters[page][i], 3, r5); +} + +static void sub_80B78A8(void) +{ + BasicInitMenuWindow(&gWindowConfig_81E6F4C); + gUnknown_083CE358[namingScreenData.templateNum](); + gUnknown_083CE368[namingScreenData.template->unk3](); + MenuPrint(namingScreenData.template->title, 9, 2); +} + +static void nullsub_61(void) +{ +} + +static void sub_80B78F8(void) +{ + StringCopy(gStringVar1, gSpeciesNames[(s16)namingScreenData.unk3E]); +} + +static void nullsub_62(void) +{ +} + +static void sub_80B7924(void) +{ + u8 genderSymbol[2] = _("♂"); + + if ((s16)namingScreenData.unk40 != MON_GENDERLESS) + { + if ((s16)namingScreenData.unk40 == MON_FEMALE) + genderSymbol[0] = 0xB6; //female symbol + MenuPrint(genderSymbol, 0x14, 4); + } +} + +static void sub_80B7960(void) +{ + u8 *string = gStringVar1; + + string[0] = 0xFC; + string[1] = 0x14; + string[2] = 8; + string[3] = 0xFC; + string[4] = 0x11; + string[5] = 1; + string += 6; + StringCopy(string, namingScreenData.textBuffer); + BasicInitMenuWindow(&gWindowConfig_81E6F4C); + MenuPrint(gStringVar1, namingScreenData.unk2, 4); +} + +//-------------------------------------------------- +// Forward-declared variables +//-------------------------------------------------- + +static const struct NamingScreenTemplate playerNamingScreenTemplate = +{ + .unk0 = 0, + .maxChars = 7, + .unk2 = 1, + .unk3 = 0, + .unk4 = 0, + .unk5 = 0, + .unk6 = 0, + .unk7 = 0, + .title = OtherText_YourName, +}; + +static const struct NamingScreenTemplate pcBoxNamingTemplate = +{ + .unk0 = 0, + .maxChars = 8, + .unk2 = 2, + .unk3 = 0, + .unk4 = 0, + .unk5 = 0, + .unk6 = 0, + .unk7 = 0, + .title = OtherText_BoxName, +}; + +static const struct NamingScreenTemplate monNamingScreenTemplate = +{ + .unk0 = 0, + .maxChars = 10, + .unk2 = 3, + .unk3 = 1, + .unk4 = 0, + .unk5 = 0, + .unk6 = 0, + .unk7 = 0, + .title = OtherText_PokeName, +}; + +static const struct NamingScreenTemplate *const sNamingScreenTemplates[] = +{ + &playerNamingScreenTemplate, + &pcBoxNamingTemplate, + &monNamingScreenTemplate, + &monNamingScreenTemplate, +}; + +static const u8 sKeyboardCharacters[][4][20] = +{ +#if ENGLISH + { + _(" A B C D E F . "), + _(" G H I J K L , "), + _(" M N O P Q R S "), + _(" T U V W X Y Z "), + }, + { + _(" a b c d e f . "), + _(" g h i j k l , "), + _(" m n o p q r s "), + _(" t u v w x y z "), + }, +#elif GERMAN + { + _(" ABCD EFGH . "), + _(" IJKL MNOP , "), + _(" QRST UVWX "), + _(" YZ ÄÖÜ "), + }, + { + _(" abcd efgh . "), + _(" ijkl mnop , "), + _(" qrst uvwx "), + _(" yz äöü "), + }, +#endif + { + _(" 0 1 2 3 4 "), + _(" 5 6 7 8 9 "), + _(" ! ? ♂ ♀ / - "), + _(" … “ ” ‘ ’ "), + }, +}; + +const struct OamData gOamData_83CE498 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_83CE4A0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_83CE4A8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +//TODO: dump sprite data diff --git a/src/engine/option_menu.c b/src/engine/option_menu.c new file mode 100644 index 000000000..7f8d76528 --- /dev/null +++ b/src/engine/option_menu.c @@ -0,0 +1,579 @@ +#include "global.h" +#include "option_menu.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "sprite.h" +#include "strings2.h" +#include "task.h" + +extern void SetPokemonCryStereo(u32 val); +extern void remove_some_task(void); + +//Task data +enum { + TD_MENUSELECTION, + TD_TEXTSPEED, + TD_BATTLESCENE, + TD_BATTLESTYLE, + TD_SOUND, + TD_BUTTONMODE, + TD_FRAMETYPE, +}; + +//Menu items +enum { + MENUITEM_TEXTSPEED, + MENUITEM_BATTLESCENE, + MENUITEM_BATTLESTYLE, + MENUITEM_SOUND, + MENUITEM_BUTTONMODE, + MENUITEM_FRAMETYPE, + MENUITEM_CANCEL, +}; + +const u16 gUnknown_0839F5FC[] = INCBIN_U16("graphics/misc/option_menu_text.gbapal"); +// note: this is only used in the Japanese release +const u8 gUnknown_0839F63C[] = INCBIN_U8("graphics/misc/option_menu_equals_sign.4bpp"); + +static void Task_OptionMenuFadeIn(u8 taskId); +static void Task_OptionMenuProcessInput(u8 taskId); +static void Task_OptionMenuSave(u8 taskId); +static void Task_OptionMenuFadeOut(u8 taskId); +static void HighlightOptionMenuItem(u8 selection); +static u8 TextSpeed_ProcessInput(u8 selection); +static void TextSpeed_DrawChoices(u8 selection); +static u8 BattleScene_ProcessInput(u8 selection); +static void BattleScene_DrawChoices(u8 selection); +static u8 BattleStyle_ProcessInput(u8 selection); +static void BattleStyle_DrawChoices(u8 selection); +static u8 Sound_ProcessInput(u8 selection); +static void Sound_DrawChoices(u8 selection); +static u8 FrameType_ProcessInput(u8 selection); +static void FrameType_DrawChoices(u8 selection); +static u8 ButtonMode_ProcessInput(u8 selection); +static void ButtonMode_DrawChoices(u8 selection); + +static void MainCB(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void VBlankCB(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void CB2_InitOptionMenu(void) +{ + switch (gMain.state) + { + default: + case 0: + { + u8 *addr; + u32 size; + + SetVBlankCallback(NULL); + REG_DISPCNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + addr = (u8 *)VRAM; + size = 0x18000; + while (1) + { + DmaFill16(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill16(3, 0, addr, size); + break; + } + } + DmaClear32(3, OAM, OAM_SIZE); + DmaClear16(3, PLTT, PLTT_SIZE); + gMain.state++; + break; + } + case 1: + ResetPaletteFade(); + remove_some_task(); + ResetTasks(); + ResetSpriteData(); + gMain.state++; + break; + case 2: + SetUpWindowConfig(&gWindowConfig_81E71B4); + gMain.state++; + break; + case 3: + MultistepInitMenuWindowBegin(&gWindowConfig_81E71B4); + gMain.state++; + break; + case 4: + if (!MultistepInitMenuWindowContinue()) + return; + gMain.state++; + break; + case 5: + LoadPalette(gUnknown_0839F5FC, 0x80, 0x40); + CpuCopy16(gUnknown_0839F63C, (void *)0x0600BEE0, 0x40); + gMain.state++; + break; + case 6: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + gMain.state++; + break; + case 7: + { + u16 savedIme; + + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WIN1H = 0; + REG_WIN1V = 0; + REG_WININ = 0x1111; + REG_WINOUT = 0x31; + REG_BLDCNT = 0xE1; + REG_BLDALPHA = 0; + REG_BLDY = 7; + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + SetVBlankCallback(VBlankCB); + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_OBJ_ON | + DISPCNT_WIN0_ON | DISPCNT_WIN1_ON; + gMain.state++; + break; + } + case 8: + { + u8 taskId = CreateTask(Task_OptionMenuFadeIn, 0); + + gTasks[taskId].data[TD_MENUSELECTION] = 0; + gTasks[taskId].data[TD_TEXTSPEED] = gSaveBlock2.optionsTextSpeed; + gTasks[taskId].data[TD_BATTLESCENE] = gSaveBlock2.optionsBattleSceneOff; + gTasks[taskId].data[TD_BATTLESTYLE] = gSaveBlock2.optionsBattleStyle; + gTasks[taskId].data[TD_SOUND] = gSaveBlock2.optionsSound; + gTasks[taskId].data[TD_BUTTONMODE] = gSaveBlock2.optionsButtonMode; + gTasks[taskId].data[TD_FRAMETYPE] = gSaveBlock2.optionsWindowFrameType; + + MenuDrawTextWindow(2, 0, 27, 3); + MenuDrawTextWindow(2, 4, 27, 19); + + MenuPrint(gSystemText_OptionMenu, 4, 1); + MenuPrint(gSystemText_TextSpeed, 4, 5); + MenuPrint(gSystemText_BattleScene, 4, 7); + MenuPrint(gSystemText_BattleStyle, 4, 9); + MenuPrint(gSystemText_Sound, 4, 11); + MenuPrint(gSystemText_ButtonMode, 4, 13); + MenuPrint(gSystemText_Frame, 4, 15); + MenuPrint(gSystemText_Cancel, 4, 17); + + TextSpeed_DrawChoices(gTasks[taskId].data[TD_TEXTSPEED]); + BattleScene_DrawChoices(gTasks[taskId].data[TD_BATTLESCENE]); + BattleStyle_DrawChoices(gTasks[taskId].data[TD_BATTLESTYLE]); + Sound_DrawChoices(gTasks[taskId].data[TD_SOUND]); + ButtonMode_DrawChoices(gTasks[taskId].data[TD_BUTTONMODE]); + FrameType_DrawChoices(gTasks[taskId].data[TD_FRAMETYPE]); + + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(1, 31); + + HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); + gMain.state++; + break; + } + case 9: + SetMainCallback2(MainCB); + return; + } +} + +static void Task_OptionMenuFadeIn(u8 taskId) +{ + if (!gPaletteFade.active) + { + gTasks[taskId].func = Task_OptionMenuProcessInput; + } +} + +static void Task_OptionMenuProcessInput(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON) + { + if (gTasks[taskId].data[TD_MENUSELECTION] == MENUITEM_CANCEL) + gTasks[taskId].func = Task_OptionMenuSave; + } + else if (gMain.newKeys & B_BUTTON) + { + gTasks[taskId].func = Task_OptionMenuSave; + } + else if (gMain.newKeys & DPAD_UP) + { + if (gTasks[taskId].data[TD_MENUSELECTION] > 0) + gTasks[taskId].data[TD_MENUSELECTION]--; + else + gTasks[taskId].data[TD_MENUSELECTION] = 6; + HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); + } + else if (gMain.newKeys & DPAD_DOWN) + { + if (gTasks[taskId].data[TD_MENUSELECTION] <= 5) + gTasks[taskId].data[TD_MENUSELECTION]++; + else + gTasks[taskId].data[TD_MENUSELECTION] = 0; + HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); + } + else + { + switch (gTasks[taskId].data[TD_MENUSELECTION]) + { + case MENUITEM_TEXTSPEED: + gTasks[taskId].data[TD_TEXTSPEED] = TextSpeed_ProcessInput(gTasks[taskId].data[TD_TEXTSPEED]); + TextSpeed_DrawChoices(gTasks[taskId].data[TD_TEXTSPEED]); + break; + case MENUITEM_BATTLESCENE: + gTasks[taskId].data[TD_BATTLESCENE] = BattleScene_ProcessInput(gTasks[taskId].data[TD_BATTLESCENE]); + BattleScene_DrawChoices(gTasks[taskId].data[TD_BATTLESCENE]); + break; + case MENUITEM_BATTLESTYLE: + gTasks[taskId].data[TD_BATTLESTYLE] = BattleStyle_ProcessInput(gTasks[taskId].data[TD_BATTLESTYLE]); + BattleStyle_DrawChoices(gTasks[taskId].data[TD_BATTLESTYLE]); + break; + case MENUITEM_SOUND: + gTasks[taskId].data[TD_SOUND] = Sound_ProcessInput(gTasks[taskId].data[TD_SOUND]); + Sound_DrawChoices(gTasks[taskId].data[TD_SOUND]); + break; + case MENUITEM_BUTTONMODE: + gTasks[taskId].data[TD_BUTTONMODE] = ButtonMode_ProcessInput(gTasks[taskId].data[TD_BUTTONMODE]); + ButtonMode_DrawChoices(gTasks[taskId].data[TD_BUTTONMODE]); + break; + case MENUITEM_FRAMETYPE: + gTasks[taskId].data[TD_FRAMETYPE] = FrameType_ProcessInput(gTasks[taskId].data[TD_FRAMETYPE]); + FrameType_DrawChoices(gTasks[taskId].data[TD_FRAMETYPE]); + break; + } + } +} + +static void Task_OptionMenuSave(u8 taskId) +{ + gSaveBlock2.optionsTextSpeed = gTasks[taskId].data[TD_TEXTSPEED]; + gSaveBlock2.optionsBattleSceneOff = gTasks[taskId].data[TD_BATTLESCENE]; + gSaveBlock2.optionsBattleStyle = gTasks[taskId].data[TD_BATTLESTYLE]; + gSaveBlock2.optionsSound = gTasks[taskId].data[TD_SOUND]; + gSaveBlock2.optionsButtonMode = gTasks[taskId].data[TD_BUTTONMODE]; + gSaveBlock2.optionsWindowFrameType = gTasks[taskId].data[TD_FRAMETYPE]; + + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskId].func = Task_OptionMenuFadeOut; +} + +static void Task_OptionMenuFadeOut(u8 taskId) +{ + if (!gPaletteFade.active) + { + DestroyTask(taskId); + SetMainCallback2(gMain.savedCallback); + } +} + +//This version uses addition '+' instead of OR '|'. +#define WIN_RANGE_(a, b) (((a) << 8) + (b)) + +static void HighlightOptionMenuItem(u8 index) +{ + REG_WIN1H = WIN_RANGE(24, 215); + REG_WIN1V = WIN_RANGE_(index * 16 + 40, index * 16 + 56); +} + +static void DrawOptionMenuChoice(const u8 *text, u8 x, u8 y, u8 style) +{ + u8 dst[16]; + u16 i; + + for (i = 0; *text != EOS && i <= 14; i++) + dst[i] = *(text++); + + dst[2] = style; + dst[i] = EOS; + MenuPrint_PixelCoords(dst, x, y, 1); +} + +static u8 TextSpeed_ProcessInput(u8 selection) +{ + if (gMain.newKeys & DPAD_RIGHT) + { + if (selection <= 1) + selection++; + else + selection = 0; + } + if (gMain.newKeys & DPAD_LEFT) + { + if (selection != 0) + selection--; + else + selection = 2; + } + return selection; +} + +#if ENGLISH +#define TEXTSPEED_SLOW_LEFT (120) +#define TEXTSPEED_MIX_LEFT (155) +#define TEXTSPEED_FAST_LEFT (184) +#endif +#if GERMAN +#define TEXTSPEED_SLOW_LEFT (120) +#define TEXTSPEED_MIX_LEFT (161) +#define TEXTSPEED_FAST_LEFT (202) +#endif + +static void TextSpeed_DrawChoices(u8 selection) +{ + u8 styles[3]; + + styles[0] = 0xF; + styles[1] = 0xF; + styles[2] = 0xF; + styles[selection] = 0x8; + + DrawOptionMenuChoice(gSystemText_Slow, TEXTSPEED_SLOW_LEFT, 40, styles[0]); + DrawOptionMenuChoice(gSystemText_Mid, TEXTSPEED_MIX_LEFT, 40, styles[1]); + DrawOptionMenuChoice(gSystemText_Fast, TEXTSPEED_FAST_LEFT, 40, styles[2]); +} + +static u8 BattleScene_ProcessInput(u8 selection) +{ + if (gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) + selection ^= 1; + return selection; +} + +static void BattleScene_DrawChoices(u8 selection) +{ + u8 styles[2]; + + styles[0] = 0xF; + styles[1] = 0xF; + styles[selection] = 0x8; + + DrawOptionMenuChoice(gSystemText_On, 120, 56, styles[0]); + DrawOptionMenuChoice(gSystemText_Off, 190, 56, styles[1]); +} + +static u8 BattleStyle_ProcessInput(u8 selection) +{ + if (gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) + selection ^= 1; + return selection; +} + +#if ENGLISH +#define BATTLESTYLE_SHIFT (120) +#define BATTLESTYLE_SET (190) +#elif GERMAN +#define BATTLESTYLE_SHIFT (120) +#define BATTLESTYLE_SET (178) +#endif + +static void BattleStyle_DrawChoices(u8 selection) +{ + u8 styles[2]; + + styles[0] = 0xF; + styles[1] = 0xF; + styles[selection] = 0x8; + + DrawOptionMenuChoice(gSystemText_Shift, BATTLESTYLE_SHIFT, 72, styles[0]); + DrawOptionMenuChoice(gSystemText_Set, BATTLESTYLE_SET, 72, styles[1]); +} + +static u8 Sound_ProcessInput(u8 selection) +{ + if (gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) + { + selection ^= 1; + SetPokemonCryStereo(selection); + } + return selection; +} + +static void Sound_DrawChoices(u8 selection) +{ + u8 styles[3]; + + styles[0] = 0xF; + styles[1] = 0xF; + styles[selection] = 0x8; + + DrawOptionMenuChoice(gSystemText_Mono, 120, 88, styles[0]); + DrawOptionMenuChoice(gSystemText_Stereo, 172, 88, styles[1]); +} + +static u8 FrameType_ProcessInput(u8 selection) +{ + if (gMain.newKeys & DPAD_RIGHT) + { + if (selection <= 18) + selection++; + else + selection = 0; + MenuLoadTextWindowGraphics_OverrideFrameType(selection); + } + if (gMain.newKeys & DPAD_LEFT) + { + if (selection != 0) + selection--; + else + selection = 19; + MenuLoadTextWindowGraphics_OverrideFrameType(selection); + } + return selection; +} + +#define CHAR_0 0xA1 //Character code of '0' character + +#if ENGLISH +static void FrameType_DrawChoices(u8 selection) +{ + u8 text[8]; + u8 n = selection + 1; + u16 i; + + for (i = 0; gSystemText_Terminator[i] != EOS && i <= 5; i++) + text[i] = gSystemText_Terminator[i]; + + //Convert number to decimal string + if (n / 10 != 0) + { + text[i] = n / 10 + CHAR_0; + i++; + text[i] = n % 10 + CHAR_0; + i++; + } + else + { + text[i] = n % 10 + CHAR_0; + i++; + text[i] = CHAR_SPACE; + i++; + } + + text[i] = EOS; + MenuPrint(gSystemText_Type, 15, 15); + MenuPrint(text, 18, 15); +} +#elif GERMAN +__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\ +_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\ +_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\ + .syntax divided\n"); +} +#endif + +static u8 ButtonMode_ProcessInput(u8 selection) +{ + if (gMain.newKeys & DPAD_RIGHT) + { + if (selection <= 1) + selection++; + else + selection = 0; + } + if (gMain.newKeys & DPAD_LEFT) + { + if (selection != 0) + selection--; + else + selection = 2; + } + return selection; +} + +static void ButtonMode_DrawChoices(u8 selection) +{ + u8 styles[3]; + + styles[0] = 0xF; + styles[1] = 0xF; + styles[2] = 0xF; + styles[selection] = 0x8; + + DrawOptionMenuChoice(gSystemText_Normal, 120, 104, styles[0]); + DrawOptionMenuChoice(gSystemText_LR, 166, 104, styles[1]); + DrawOptionMenuChoice(gSystemText_LA, 188, 104, styles[2]); +} diff --git a/src/engine/palette.c b/src/engine/palette.c new file mode 100644 index 000000000..94a4f8092 --- /dev/null +++ b/src/engine/palette.c @@ -0,0 +1,834 @@ +#include "global.h" +#include "palette.h" +#include "blend_palette.h" +#include "decompress.h" + +enum +{ + NORMAL_FADE, + FAST_FADE, + HARDWARE_FADE, +}; + +// These are structs for some unused palette system. +// The full functionality of this system is unknown. + +struct PaletteStructTemplate +{ + u16 uid; + u16 *src; + u16 pst_field_8_0:1; + u16 pst_field_8_1:9; + u16 size:5; + u16 pst_field_9_7:1; + u8 pst_field_A; + u8 srcCount:5; + u8 pst_field_B_5:3; + u8 pst_field_C; +}; + +struct PaletteStruct +{ + const struct PaletteStructTemplate *base; + u32 ps_field_4_0:1; + u16 ps_field_4_1:1; + u32 baseDestOffset:9; + u16 destOffset:10; + u16 srcIndex:7; + u8 ps_field_8; + u8 ps_field_9; +}; + +EWRAM_DATA u16 gPlttBufferUnfaded[0x200] = {0}; +EWRAM_DATA u16 gPlttBufferFaded[0x200] = {0}; +EWRAM_DATA static struct PaletteStruct sPaletteStructs[0x10] = {0}; +EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; +EWRAM_DATA u32 gFiller_202F394 = 0; +EWRAM_DATA static u32 sPlttBufferTransferPending = 0; +EWRAM_DATA static u8 sPaletteDecompressionBuffer[0x400] = {0}; + +static const struct PaletteStructTemplate sDummyPaletteStructTemplate = +{ + 0xFFFF, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0 +}; + +static void unused_sub_8073DFC(struct PaletteStruct *, u32 *); +static void unused_sub_8073F60(struct PaletteStruct *, u32 *); +static void unused_sub_8074020(struct PaletteStruct *); +static u8 GetPaletteNumByUid(u16); +static u8 UpdateNormalPaletteFade(void); +static void BeginFastPaletteFadeInternal(u8); +static u8 UpdateFastPaletteFade(void); +static u8 UpdateHardwarePaletteFade(void); +static void UpdateBlendRegisters(void); +static bool8 IsSoftwarePaletteFadeFinishing(void); + +void LoadCompressedPalette(const void *src, u16 offset, u16 size) +{ + sub_800D238(src, sPaletteDecompressionBuffer); + CpuCopy16(sPaletteDecompressionBuffer, gPlttBufferUnfaded + offset, size); + CpuCopy16(sPaletteDecompressionBuffer, gPlttBufferFaded + offset, size); +} + +void LoadPalette(const void *src, u16 offset, u16 size) +{ + CpuCopy16(src, gPlttBufferUnfaded + offset, size); + CpuCopy16(src, gPlttBufferFaded + offset, size); +} + +void FillPalette(u16 value, u16 offset, u16 size) +{ + CpuFill16(value, gPlttBufferUnfaded + offset, size); + CpuFill16(value, gPlttBufferFaded + offset, size); +} + +void TransferPlttBuffer(void) +{ + if (!gPaletteFade.bufferTransferDisabled) + { + void *src = gPlttBufferFaded; + void *dest = (void *)PLTT; + DmaCopy16(3, src, dest, PLTT_SIZE); + sPlttBufferTransferPending = 0; + if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active) + UpdateBlendRegisters(); + } +} + +u8 UpdatePaletteFade(void) +{ + u8 result; + u8 dummy = 0; + + if (sPlttBufferTransferPending) + return -1; + + if (gPaletteFade.mode == NORMAL_FADE) + result = UpdateNormalPaletteFade(); + else if (gPaletteFade.mode == FAST_FADE) + result = UpdateFastPaletteFade(); + else + result = UpdateHardwarePaletteFade(); + + sPlttBufferTransferPending = gPaletteFade.multipurpose1 | dummy; + + return result; +} + +void ResetPaletteFade(void) +{ + u8 i; + + for (i = 0; i < 16; i++) + ResetPaletteStruct(i); + + ResetPaletteFadeControl(); +} + +void ReadPlttIntoBuffers(void) +{ + u16 i; + u16 *pltt = (u16 *)PLTT; + + for (i = 0; i < PLTT_SIZE / 2; i++) + { + gPlttBufferUnfaded[i] = pltt[i]; + gPlttBufferFaded[i] = pltt[i]; + } +} + +bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor) +{ + u8 temp; + register u32 _blendColor asm("r8") = blendColor; + + if (gPaletteFade.active) + { + return FALSE; + } + else + { + gPaletteFade.deltaY = 2; + + if (delay < 0) + { + gPaletteFade.deltaY += (delay * -1); + delay = 0; + } + + gPaletteFade_selectedPalettes = selectedPalettes; + gPaletteFade.delayCounter = delay; + gPaletteFade_delay = delay; + gPaletteFade.y = startY; + gPaletteFade.targetY = targetY; + gPaletteFade.blendColor = _blendColor; + gPaletteFade.active = 1; + gPaletteFade.mode = NORMAL_FADE; + + if (startY < targetY) + gPaletteFade.yDec = 0; + else + gPaletteFade.yDec = 1; + + UpdatePaletteFade(); + + temp = gPaletteFade.bufferTransferDisabled; + gPaletteFade.bufferTransferDisabled = 0; + CpuCopy32(gPlttBufferFaded, (void *)PLTT, PLTT_SIZE); + sPlttBufferTransferPending = 0; + if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active) + UpdateBlendRegisters(); + gPaletteFade.bufferTransferDisabled = temp; + return TRUE; + } +} + +bool8 unref_sub_8073D3C(u32 a1, u8 a2, u8 a3, u8 a4, u16 a5) +{ + ReadPlttIntoBuffers(); + return BeginNormalPaletteFade(a1, a2, a3, a4, a5); +} + +void unref_sub_8073D84(u8 a1, u32 *a2) +{ + u8 i; + + for (i = 0; i < 16; i++) + { + struct PaletteStruct *palstruct = &sPaletteStructs[i]; + if (palstruct->ps_field_4_0) + { + if (palstruct->base->pst_field_8_0 == a1) + { + u8 val1 = palstruct->srcIndex; + u8 val2 = palstruct->base->srcCount; + if (val1 == val2) + { + unused_sub_8074020(palstruct); + if (!palstruct->ps_field_4_0) + continue; + } + if (palstruct->ps_field_8 == 0) + unused_sub_8073DFC(palstruct, a2); + else + palstruct->ps_field_8--; + + unused_sub_8073F60(palstruct, a2); + } + } + } +} + +static void unused_sub_8073DFC(struct PaletteStruct *a1, u32 *a2) +{ + s32 srcIndex; + s32 srcCount; + u8 i = 0; + u16 srcOffset = a1->srcIndex * a1->base->size; + + if (!a1->base->pst_field_8_0) + { + while (i < a1->base->size) + { + gPlttBufferUnfaded[a1->destOffset] = a1->base->src[srcOffset]; + gPlttBufferFaded[a1->destOffset] = a1->base->src[srcOffset]; + i++; + a1->destOffset++; + srcOffset++; + } + } + else + { + while (i < a1->base->size) + { + gPlttBufferFaded[a1->destOffset] = a1->base->src[srcOffset]; + i++; + a1->destOffset++; + srcOffset++; + } + } + + a1->destOffset = a1->baseDestOffset; + a1->ps_field_8 = a1->base->pst_field_A; + a1->srcIndex++; + + srcIndex = a1->srcIndex; + srcCount = a1->base->srcCount; + + if (srcIndex >= srcCount) + { + if (a1->ps_field_9) + a1->ps_field_9--; + a1->srcIndex = 0; + } + + *a2 |= 1 << (a1->baseDestOffset >> 4); +} + +static void unused_sub_8073F60(struct PaletteStruct *a1, u32 *a2) +{ + if (gPaletteFade.active && ((1 << (a1->baseDestOffset >> 4)) & gPaletteFade_selectedPalettes)) + { + if (!a1->base->pst_field_8_0) + { + if (gPaletteFade.delayCounter != gPaletteFade_delay) + { + BlendPalette( + a1->baseDestOffset, + a1->base->size, + gPaletteFade.y, + gPaletteFade.blendColor); + } + } + else + { + if (!gPaletteFade.delayCounter) + { + if (a1->ps_field_8 != a1->base->pst_field_A) + { + u32 srcOffset = a1->srcIndex * a1->base->size; + u8 i; + + for (i = 0; i < a1->base->size; i++) + gPlttBufferFaded[a1->baseDestOffset + i] = a1->base->src[srcOffset + i]; + } + } + } + } +} + +static void unused_sub_8074020(struct PaletteStruct *a1) +{ + if (!a1->ps_field_9) + { + s32 val = a1->base->pst_field_B_5; + + if (!val) + { + a1->srcIndex = 0; + a1->ps_field_8 = a1->base->pst_field_A; + a1->ps_field_9 = a1->base->pst_field_C; + a1->destOffset = a1->baseDestOffset; + } + else + { + if (val < 0) + return; + if (val > 2) + return; + ResetPaletteStructByUid(a1->base->uid); + } + } + else + { + a1->ps_field_9--; + } +} + +void ResetPaletteStructByUid(u16 a1) +{ + u8 paletteNum = GetPaletteNumByUid(a1); + if (paletteNum != 16) + ResetPaletteStruct(paletteNum); +} + +void ResetPaletteStruct(u8 paletteNum) +{ + sPaletteStructs[paletteNum].base = &sDummyPaletteStructTemplate; + sPaletteStructs[paletteNum].ps_field_4_0 = 0; + sPaletteStructs[paletteNum].baseDestOffset = 0; + sPaletteStructs[paletteNum].destOffset = 0; + sPaletteStructs[paletteNum].srcIndex = 0; + sPaletteStructs[paletteNum].ps_field_4_1 = 0; + sPaletteStructs[paletteNum].ps_field_8 = 0; + sPaletteStructs[paletteNum].ps_field_9 = 0; +} + +void ResetPaletteFadeControl() +{ + gPaletteFade.multipurpose1 = 0; + gPaletteFade.multipurpose2 = 0; + gPaletteFade.delayCounter = 0; + gPaletteFade.y = 0; + gPaletteFade.targetY = 0; + gPaletteFade.blendColor = 0; + gPaletteFade.active = 0; + gPaletteFade.multipurpose2 = 0; // assign same value twice + gPaletteFade.yDec = 0; + gPaletteFade.bufferTransferDisabled = 0; + gPaletteFade.shouldResetBlendRegisters = 0; + gPaletteFade.hardwareFadeFinishing = 0; + gPaletteFade.softwareFadeFinishing = 0; + gPaletteFade.softwareFadeFinishingCounter = 0; + gPaletteFade.objPaletteToggle = 0; + gPaletteFade.deltaY = 2; +} + +void unref_sub_8074168(u16 uid) +{ + u8 paletteNum = GetPaletteNumByUid(uid); + if (paletteNum != 16) + sPaletteStructs[paletteNum].ps_field_4_1 = 1; +} + +void unref_sub_8074194(u16 uid) +{ + u8 paletteNum = GetPaletteNumByUid(uid); + if (paletteNum != 16) + sPaletteStructs[paletteNum].ps_field_4_1 = 0; +} + +static u8 GetPaletteNumByUid(u16 uid) +{ + u8 i; + + for (i = 0; i < 16; i++) + if (sPaletteStructs[i].base->uid == uid) + return i; + + return 16; +} + +static u8 UpdateNormalPaletteFade() +{ + u16 paletteOffset; + u16 selectedPalettes; + + if (!gPaletteFade.active) + return 0; + + if (IsSoftwarePaletteFadeFinishing()) + { + return gPaletteFade.active; + } + else + { + if (!gPaletteFade.objPaletteToggle) + { + if (gPaletteFade.delayCounter < gPaletteFade_delay) + { + gPaletteFade.delayCounter++; + return 2; + } + gPaletteFade.delayCounter = 0; + } + + paletteOffset = 0; + + if (!gPaletteFade.objPaletteToggle) + { + selectedPalettes = gPaletteFade_selectedPalettes; + } + else + { + selectedPalettes = gPaletteFade_selectedPalettes >> 16; + paletteOffset = 256; + } + + while (selectedPalettes) + { + if (selectedPalettes & 1) + BlendPalette( + paletteOffset, + 16, + gPaletteFade.y, + gPaletteFade.blendColor); + selectedPalettes >>= 1; + paletteOffset += 16; + } + + gPaletteFade.objPaletteToggle ^= 1; + + if (!gPaletteFade.objPaletteToggle) + { + if (gPaletteFade.y == gPaletteFade.targetY) + { + gPaletteFade_selectedPalettes = 0; + gPaletteFade.softwareFadeFinishing = 1; + } + else + { + s8 val; + + if (!gPaletteFade.yDec) + { + val = gPaletteFade.y; + val += gPaletteFade.deltaY; + if (val > gPaletteFade.targetY) + val = gPaletteFade.targetY; + gPaletteFade.y = val; + } + else + { + val = gPaletteFade.y; + val -= gPaletteFade.deltaY; + if (val < gPaletteFade.targetY) + val = gPaletteFade.targetY; + gPaletteFade.y = val; + } + } + } + + return gPaletteFade.active; + } +} + +void InvertPlttBuffer(u32 selectedPalettes) +{ + u16 paletteOffset = 0; + + while (selectedPalettes) + { + if (selectedPalettes & 1) + { + u8 i; + for (i = 0; i < 16; i++) + gPlttBufferFaded[paletteOffset + i] = ~gPlttBufferFaded[paletteOffset + i]; + } + selectedPalettes >>= 1; + paletteOffset += 16; + } +} + +void TintPlttBuffer(u32 selectedPalettes, s8 r, s8 g, s8 b) +{ + u16 paletteOffset = 0; + + while (selectedPalettes) + { + if (selectedPalettes & 1) + { + u8 i; + for (i = 0; i < 16; i++) + { + struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[paletteOffset + i]; + data->r += r; + data->g += g; + data->b += b; + } + } + selectedPalettes >>= 1; + paletteOffset += 16; + } +} + +void UnfadePlttBuffer(u32 selectedPalettes) +{ + u16 paletteOffset = 0; + + while (selectedPalettes) + { + if (selectedPalettes & 1) + { + u8 i; + for (i = 0; i < 16; i++) + gPlttBufferFaded[paletteOffset + i] = gPlttBufferUnfaded[paletteOffset + i]; + } + selectedPalettes >>= 1; + paletteOffset += 16; + } +} + +void BeginFastPaletteFade(u8 submode) +{ + gPaletteFade.deltaY = 2; + BeginFastPaletteFadeInternal(submode); +} + +static void BeginFastPaletteFadeInternal(u8 submode) +{ + gPaletteFade.y = 31; + gPaletteFade_submode = submode & 0x3F; + gPaletteFade.active = 1; + gPaletteFade.mode = FAST_FADE; + + if (submode == FAST_FADE_IN_FROM_BLACK) + CpuFill16(RGB_BLACK, gPlttBufferFaded, PLTT_SIZE); + + if (submode == FAST_FADE_IN_FROM_WHITE) + CpuFill16(RGB_WHITE, gPlttBufferFaded, PLTT_SIZE); + + UpdatePaletteFade(); +} + +static u8 UpdateFastPaletteFade(void) +{ + u16 i; + u16 paletteOffsetStart; + u16 paletteOffsetEnd; + s8 r0; + s8 g0; + s8 b0; + s8 r; + s8 g; + s8 b; + + if (!gPaletteFade.active) + return 0; + + if (IsSoftwarePaletteFadeFinishing()) + return gPaletteFade.active; + + if (gPaletteFade.objPaletteToggle) + { + paletteOffsetStart = 256; + paletteOffsetEnd = 512; + } + else + { + paletteOffsetStart = 0; + paletteOffsetEnd = 256; + } + + switch (gPaletteFade_submode) + { + case FAST_FADE_IN_FROM_WHITE: + for (i = paletteOffsetStart; i < paletteOffsetEnd; i++) + { + struct PlttData *unfaded; + struct PlttData *faded; + + unfaded = (struct PlttData *)&gPlttBufferUnfaded[i]; + r0 = unfaded->r; + g0 = unfaded->g; + b0 = unfaded->b; + + faded = (struct PlttData *)&gPlttBufferFaded[i]; + r = faded->r - 2; + g = faded->g - 2; + b = faded->b - 2; + + if (r < r0) + r = r0; + if (g < g0) + g = g0; + if (b < b0) + b = b0; + + gPlttBufferFaded[i] = RGB(r, g, b); + } + break; + case FAST_FADE_OUT_TO_WHTIE: + for (i = paletteOffsetStart; i < paletteOffsetEnd; i++) + { + struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[i]; + r = data->r + 2; + g = data->g + 2; + b = data->b + 2; + + if (r > 31) + r = 31; + if (g > 31) + g = 31; + if (b > 31) + b = 31; + + gPlttBufferFaded[i] = RGB(r, g, b); + } + break; + case FAST_FADE_IN_FROM_BLACK: + for (i = paletteOffsetStart; i < paletteOffsetEnd; i++) + { + struct PlttData *unfaded; + struct PlttData *faded; + + unfaded = (struct PlttData *)&gPlttBufferUnfaded[i]; + r0 = unfaded->r; + g0 = unfaded->g; + b0 = unfaded->b; + + faded = (struct PlttData *)&gPlttBufferFaded[i]; + r = faded->r + 2; + g = faded->g + 2; + b = faded->b + 2; + + if (r > r0) + r = r0; + if (g > g0) + g = g0; + if (b > b0) + b = b0; + + gPlttBufferFaded[i] = RGB(r, g, b); + } + break; + case FAST_FADE_OUT_TO_BLACK: + for (i = paletteOffsetStart; i < paletteOffsetEnd; i++) + { + struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[i]; + r = data->r - 2; + g = data->g - 2; + b = data->b - 2; + + if (r < 0) + r = 0; + if (g < 0) + g = 0; + if (b < 0) + b = 0; + + gPlttBufferFaded[i] = RGB(r, g, b); + } + } + + gPaletteFade.objPaletteToggle ^= 1; + + if (gPaletteFade.objPaletteToggle) + return gPaletteFade.active; + + if (gPaletteFade.y - gPaletteFade.deltaY < 0) + gPaletteFade.y = 0; + else + gPaletteFade.y -= gPaletteFade.deltaY; + + if (gPaletteFade.y == 0) + { + switch (gPaletteFade_submode) + { + case FAST_FADE_IN_FROM_WHITE: + case FAST_FADE_IN_FROM_BLACK: + CpuCopy32(gPlttBufferUnfaded, gPlttBufferFaded, PLTT_SIZE); + break; + case FAST_FADE_OUT_TO_WHTIE: + CpuFill32(0xFFFFFFFF, gPlttBufferFaded, PLTT_SIZE); + break; + case FAST_FADE_OUT_TO_BLACK: + CpuFill32(0x00000000, gPlttBufferFaded, PLTT_SIZE); + break; + } + + gPaletteFade.mode = NORMAL_FADE; + gPaletteFade.softwareFadeFinishing = 1; + } + + return gPaletteFade.active; +} + +void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 shouldResetBlendRegisters) +{ + gPaletteFade_blendCnt = blendCnt; + gPaletteFade.delayCounter = delay; + gPaletteFade_delay = delay; + gPaletteFade.y = y; + gPaletteFade.targetY = targetY; + gPaletteFade.active = 1; + gPaletteFade.mode = HARDWARE_FADE; + gPaletteFade.shouldResetBlendRegisters = shouldResetBlendRegisters & 1; + gPaletteFade.hardwareFadeFinishing = 0; + + if (y < targetY) + gPaletteFade.yDec = 0; + else + gPaletteFade.yDec = 1; +} + +static u8 UpdateHardwarePaletteFade(void) +{ + if (!gPaletteFade.active) + return 0; + + if (gPaletteFade.delayCounter < gPaletteFade_delay) + { + gPaletteFade.delayCounter++; + return 2; + } + + gPaletteFade.delayCounter = 0; + + if (!gPaletteFade.yDec) + { + gPaletteFade.y++; + if (gPaletteFade.y > gPaletteFade.targetY) + { + gPaletteFade.hardwareFadeFinishing++; + gPaletteFade.y--; + } + } + else + { + s32 y = gPaletteFade.y--; + if (y - 1 < gPaletteFade.targetY) + { + gPaletteFade.hardwareFadeFinishing++; + gPaletteFade.y++; + } + } + + if (gPaletteFade.hardwareFadeFinishing) + { + if (gPaletteFade.shouldResetBlendRegisters) + { + gPaletteFade_blendCnt = 0; + gPaletteFade.y = 0; + } + gPaletteFade.shouldResetBlendRegisters = 0; + } + + return gPaletteFade.active; +} + +static void UpdateBlendRegisters(void) +{ + REG_BLDCNT = gPaletteFade_blendCnt; + REG_BLDY = gPaletteFade.y; + if (gPaletteFade.hardwareFadeFinishing) + { + gPaletteFade.hardwareFadeFinishing = 0; + gPaletteFade.mode = 0; + gPaletteFade_blendCnt = 0; + gPaletteFade.y = 0; + gPaletteFade.active = 0; + } +} + +static bool8 IsSoftwarePaletteFadeFinishing(void) +{ + if (gPaletteFade.softwareFadeFinishing) + { + if (gPaletteFade.softwareFadeFinishingCounter == 4) + { + gPaletteFade.active = 0; + gPaletteFade.softwareFadeFinishing = 0; + gPaletteFade.softwareFadeFinishingCounter = 0; + } + else + { + gPaletteFade.softwareFadeFinishingCounter++; + } + + return TRUE; + } + else + { + return FALSE; + } +} + +void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color) +{ + u16 paletteOffset; + + for (paletteOffset = 0; selectedPalettes; paletteOffset += 16) + { + if (selectedPalettes & 1) + BlendPalette(paletteOffset, 16, coeff, color); + selectedPalettes >>= 1; + } +} + +void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color) +{ + void *src = gPlttBufferUnfaded; + void *dest = gPlttBufferFaded; + DmaCopy32(3, src, dest, PLTT_SIZE); + BlendPalettes(selectedPalettes, coeff, color); +} diff --git a/src/engine/play_time.c b/src/engine/play_time.c new file mode 100644 index 000000000..9882c9c4b --- /dev/null +++ b/src/engine/play_time.c @@ -0,0 +1,73 @@ +#include "global.h" +#include "play_time.h" + +enum +{ + STOPPED, + RUNNING, + MAXED_OUT +}; + +static u8 sPlayTimeCounterState; + +void PlayTimeCounter_Reset() +{ + sPlayTimeCounterState = STOPPED; + + gSaveBlock2.playTimeHours = 0; + gSaveBlock2.playTimeMinutes = 0; + gSaveBlock2.playTimeSeconds = 0; + gSaveBlock2.playTimeVBlanks = 0; +} + +void PlayTimeCounter_Start() +{ + sPlayTimeCounterState = RUNNING; + + if (gSaveBlock2.playTimeHours > 999) + PlayTimeCounter_SetToMax(); +} + +void PlayTimeCounter_Stop() +{ + sPlayTimeCounterState = STOPPED; +} + +void PlayTimeCounter_Update() +{ + if (sPlayTimeCounterState == RUNNING) + { + gSaveBlock2.playTimeVBlanks++; + + if (gSaveBlock2.playTimeVBlanks > 59) + { + gSaveBlock2.playTimeVBlanks = 0; + gSaveBlock2.playTimeSeconds++; + + if (gSaveBlock2.playTimeSeconds > 59) + { + gSaveBlock2.playTimeSeconds = 0; + gSaveBlock2.playTimeMinutes++; + + if (gSaveBlock2.playTimeMinutes > 59) + { + gSaveBlock2.playTimeMinutes = 0; + gSaveBlock2.playTimeHours++; + + if (gSaveBlock2.playTimeHours > 999) + PlayTimeCounter_SetToMax(); + } + } + } + } +} + +void PlayTimeCounter_SetToMax() +{ + sPlayTimeCounterState = MAXED_OUT; + + gSaveBlock2.playTimeHours = 999; + gSaveBlock2.playTimeMinutes = 59; + gSaveBlock2.playTimeSeconds = 59; + gSaveBlock2.playTimeVBlanks = 59; +} diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c new file mode 100644 index 000000000..d1083910c --- /dev/null +++ b/src/engine/record_mixing.c @@ -0,0 +1,1085 @@ +#include "global.h" +#include "record_mixing.h" +#include "battle_tower.h" +#include "cable_club.h" +#include "daycare.h" +#include "dewford_trend.h" +#include "event_data.h" +#include "fldeff_80C5CD4.h" +#include "item.h" +#include "items.h" +#include "load_save.h" +#include "link.h" +#include "mauville_old_man.h" +#include "menu.h" +#include "mystery_event_script.h" +#include "rng.h" +#include "rom4.h" +#include "save.h" +#include "script.h" +#include "secret_base.h" +#include "songs.h" +#include "sound.h" +#include "string_util.h" +#include "strings2.h" +#include "task.h" +#include "tv.h" + +extern u8 ewram[]; +#define unk_2018000 (*(struct PlayerRecords *)(ewram + 0x18000)) +#define unk_2008000 (*(struct PlayerRecords *)(ewram + 0x08000)) + +extern struct RecordMixing_UnknownStruct gUnknown_02038738; +extern u16 gSpecialVar_0x8005; + +u32 gUnknown_03005D2C; + +static u8 gUnknown_03000718; +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 *recordMixingEasyChatPairs = &gSaveBlock1.easyChatPairs; +struct RecordMixing_UnknownStruct *gUnknown_083D0280 = &gUnknown_02038738; +void *gUnknown_083D0284 = &gSaveBlock2.filler_A8; + +#define BUFFER_CHUNK_SIZE 200 + +void sub_80B929C(void) +{ + sub_8083A84(Task_RecordMixing_Main); +} + +struct PlayerRecords +{ + struct SecretBaseRecord secretBases[20]; + TVShow tvShows[25]; + u8 filler1004[0x40]; + u8 filler1044[0x40]; + struct EasyChatPair easyChatPairs[5]; + struct RecordMixing_UnknownStruct filler10AC; + u8 filler1124[0xA4]; + u16 filler11C8[0x34]; +}; + +void RecordMixing_PrepareExchangePacket(void) +{ + sub_80BC300(); + sub_80C045C(); + + memcpy(unk_2018000.secretBases, recordMixingSecretBases, sizeof(unk_2018000.secretBases)); + memcpy(unk_2018000.tvShows, recordMixingTvShows, sizeof(unk_2018000.tvShows)); + 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)); + memcpy(unk_2018000.filler1124, gUnknown_083D0284, sizeof(unk_2018000.filler1124)); + + if (GetMultiplayerId() == 0) + unk_2018000.filler11C8[0] = GetRecordMixingGift(); +} + +void RecordMixing_ReceiveExchangePacket(u32 a) +{ + sub_80BD674(unk_2008000.secretBases, sizeof(struct PlayerRecords), a); + sub_80BFD44((u8 *)unk_2008000.tvShows, sizeof(struct PlayerRecords), a); + sub_80C0514(unk_2008000.filler1004, sizeof(struct PlayerRecords), a); + sub_80B9B1C(unk_2008000.filler1044, sizeof(struct PlayerRecords), a); + sub_80FA4E4(unk_2008000.easyChatPairs, sizeof(struct PlayerRecords), a); + sub_80B9C6C((u8 *)&unk_2008000.filler10AC, sizeof(struct PlayerRecords), a, unk_2008000.tvShows); + sub_80B9B70(unk_2008000.filler1124, sizeof(struct PlayerRecords), a); + sub_80B9F3C(unk_2008000.filler11C8, a); +} + +#define tCounter data[0] + +void Task_RecordMixing_SoundEffect(u8 taskId) +{ + gTasks[taskId].tCounter++; + if (gTasks[taskId].tCounter == 50) + { + PlaySE(SE_W213); + gTasks[taskId].tCounter = 0; + } +} + +#undef tCounter + + +#define tState data[0] +#define tSndEffTaskId data[15] + +void Task_RecordMixing_Main(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (tState) + { + case 0: // init + sub_8007270(gSpecialVar_0x8005); + VarSet(VAR_0x4000, 1); + gUnknown_03000718 = 0; + RecordMixing_PrepareExchangePacket(); + CreateRecordMixingSprite(); + tState = 1; + data[10] = CreateTask(sub_80B95F0, 0x50); + tSndEffTaskId = CreateTask(Task_RecordMixing_SoundEffect, 0x51); + break; + case 1: // wait for sub_80B95F0 + if (!gTasks[data[10]].isActive) + { + tState = 2; + FlagSet(SYS_MIX_RECORD); + DestroyRecordMixingSprite(); + DestroyTask(tSndEffTaskId); + } + break; + case 2: + data[10] = CreateTask(sub_80BA00C, 10); + tState = 3; + PlaySE(SE_W226); + break; + case 3: // wait for sub_80BA00C + if (!gTasks[data[10]].isActive) + { + tState = 4; + data[10] = sub_8083664(); + sub_80720B0(); + MenuPrint(gOtherText_MixingComplete, 2, 15); + data[8] = 0; + } + break; + case 4: // wait 60 frames + data[8]++; + if (data[8] > 60) + tState = 5; + break; + case 5: + if (!gTasks[data[10]].isActive) + { + sub_8055588(); + MenuZeroFillScreen(); + DestroyTask(taskId); + EnableBothScriptContexts(); + } + break; + } +} + +void sub_80B95F0(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->tState) + { + case 0: + sub_80B9A78(); + MenuDisplayMessageBox(); + MenuPrint(gOtherText_MixingRecordsWithFriend, 2, 15); + task->data[8] = 0x708; + task->tState = 400; + ClearLinkCallback_2(); + break; + case 100: // wait 20 frames + task->data[12]++; + if (task->data[12] > 20) + { + task->data[12] = 0; + task->tState = 101; + } + break; + case 101: + { + u8 players = GetLinkPlayerCount_2(); + + if (IsLinkMaster() == 1) + { + if (players == sub_800820C()) + { + PlaySE(SE_PIN); + task->tState = 201; + task->data[12] = 0; + } + } + else + { + PlaySE(SE_BOO); + task->tState = 301; + } + } + break; + case 201: + if (sub_800820C() == GetLinkPlayerCount_2()) + { + if (++task->data[12] > GetLinkPlayerCount_2() * 30) + { + sub_8007F4C(); + task->tState = 1; + } + } + break; + case 301: + if (sub_800820C() == GetLinkPlayerCount_2()) + task->tState = 1; + break; + case 400: // wait 20 frames + task->data[12]++; + if (task->data[12] > 20) + { + task->tState = 1; + task->data[12] = 0; + } + break; + case 1: // wait for handshake + if (gReceivedRemoteLinkPlayers) + { + ConvertIntToDecimalStringN(gStringVar1, GetMultiplayerId_(), 2, 2); + task->tState = 5; + } + break; + case 2: + { + u8 subTaskId; + + task->data[6] = GetLinkPlayerCount_2(); + task->tState = 0; + task->data[5] = GetMultiplayerId_(); + task->func = Task_RecordMixing_SendPacket; + StorePtrInTaskData(&unk_2018000, &task->data[2]); + subTaskId = CreateTask(Task_RecordMixing_CopyReceiveBuffer, 0x50); + task->data[10] = subTaskId; + gTasks[subTaskId].data[0] = taskId; + StorePtrInTaskData((u8 *)&unk_2008000, &gTasks[subTaskId].data[5]); + } + break; + case 5: // wait 60 frames + task->data[10]++; + if (task->data[10] > 60) + { + task->data[10] = 0; + task->tState = 2; + } + break; + } +} + +void Task_RecordMixing_SendPacket(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + // does this send the data 24 times? + + switch (task->tState) + { + case 0: //Copy record data to send buffer + { + void *recordData = (u8 *)LoadPtrFromTaskData(&task->data[2]) + BUFFER_CHUNK_SIZE * task->data[4]; + + memcpy(gBlockSendBuffer, recordData, BUFFER_CHUNK_SIZE); + task->tState++; + } + break; + case 1: + if (GetMultiplayerId() == 0) + sub_8007E9C(1); + task->tState++; + break; + case 2: + break; + case 3: + task->data[4]++; + if ((u16)task->data[4] == 24) + task->tState++; + else + task->tState = 0; + break; + case 4: + if (!gTasks[task->data[10]].isActive) + task->func = Task_RecordMixing_SendPacket_SwitchToReceive; + } +} + +void Task_RecordMixing_CopyReceiveBuffer(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + s32 recvStatus = GetBlockReceivedStatus(); + u8 handledPlayers = 0; + + if (recvStatus == sub_8008198()) + { + u8 player; + + for (player = 0; player < GetLinkPlayerCount(); player++) + { + void *src; + u8 *dst; + + if ((recvStatus >> player) & 1) + { + dst = LoadPtrFromTaskData(&task->data[5]) + task->data[player + 1] * BUFFER_CHUNK_SIZE + player * sizeof(struct PlayerRecords); + src = GetPlayerRecvBuffer(player); + if ((task->data[player + 1] + 1) * BUFFER_CHUNK_SIZE > sizeof(struct PlayerRecords)) + memcpy(dst, src, sizeof(struct PlayerRecords) - task->data[player + 1] * BUFFER_CHUNK_SIZE); + else + memcpy(dst, src, BUFFER_CHUNK_SIZE); + ResetBlockReceivedFlag(player); + task->data[player + 1]++; + if ((u16)task->data[player + 1] == 0x18) + handledPlayers++; + } + } + gTasks[task->data[0]].data[0]++; + } + if (handledPlayers == GetLinkPlayerCount()) + DestroyTask(taskId); +} + +void sub_80B99B4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (!gTasks[task->data[10]].isActive) + DestroyTask(taskId); +} + +void Task_RecordMixing_ReceivePacket(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->func = sub_80B99B4; + if (gUnknown_03000718 == 1) + RecordMixing_ReceiveExchangePacket(task->data[5]); +} + +void Task_RecordMixing_SendPacket_SwitchToReceive(u8 taskId) +{ + gTasks[taskId].func = Task_RecordMixing_ReceivePacket; + gUnknown_03000718 = 1; +} + +void *LoadPtrFromTaskData(u16 *taskData) +{ + return (void *)(taskData[0] | (taskData[1] << 16)); +} + +void StorePtrInTaskData(void *ptr, u16 *taskData) +{ + taskData[0] = (u32)ptr; + taskData[1] = (u32)ptr >> 16; +} + +u8 GetMultiplayerId_(void) +{ + return GetMultiplayerId(); +} + +u16 *GetPlayerRecvBuffer(u8 player) +{ + return gBlockRecvBuffer[player]; +} + +void sub_80B9A78(void) +{ + gUnknown_03005D2C = sizeof(struct PlayerRecords); +} + +const u8 gUnknown_083D0288[2] = {1, 0}; + +const u8 gUnknown_083D028A[2][3] = +{ + {1, 2, 0}, + {2, 0, 1}, +}; + +const u8 gUnknown_083D0290[9][4] = +{ + {1, 0, 3, 2}, + {3, 0, 1, 2}, + {2, 0, 3, 1}, + {1, 3, 0, 2}, + {2, 3, 0, 1}, + {3, 2, 0, 1}, + {1, 2, 3, 0}, + {2, 3, 1, 0}, + {3, 2, 1, 0}, +}; + +void sub_80B9A88(u8 *a) +{ + u32 i; + u32 id; + u32 players = GetLinkPlayerCount(); + + switch (players) + { + case 2: + for (i = 0; i < 2; i++) + a[i] = gUnknown_083D0288[i]; + break; + case 3: + id = GetLinkPlayerTrainerId(0) % 2; + for (i = 0; i < 3; i++) + a[i] = gUnknown_083D028A[id][i]; + break; + case 4: + id = GetLinkPlayerTrainerId(0) % 9; + for (i = 0; i < 4; i++) + a[i] = gUnknown_083D0290[id][i]; + break; + default: + break; + } +} + +void sub_80B9B1C(u8 *a, size_t size, u8 index) +{ + u8 arr[4]; + u8 *ptr; + + sub_80B9A88(arr); + //Probably not how it was originally written, but this matches. + memcpy(a + index * size, (ptr = gUnknown_083D0278), 0x40); + memcpy(ptr, a + arr[index] * size, 0x40); + sub_80F7F30(); +} + +void sub_80B9B70(u8 *a, size_t size, u8 index) +{ + sub_80B9A88(gUnknown_0300071C); + memcpy(a + size * index, a + size * gUnknown_0300071C[index], 0xA4); + sub_8134AC0(a + size * index); +} + +u8 sub_80B9BBC(u16 *a) +{ + return a[16]; +} + +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]); + + r6 += c[d][1]; + *r6 = *(r8 + c[e][1]); + + r8 += c[e][1]; + *r8 = sp0; +} + +u8 sub_80B9C4C(u8 *a) +{ + int i; + u8 r2 = 0; + + for (i = 0; i < 0x100; i++) + r2 += a[i]; + return r2; +} + +const u8 gUnknown_083D02B4[][2] = +{ + {0, 1}, + {1, 2}, + {2, 0}, +}; + +const u8 gUnknown_083D02BA[3][4] = +{ + {0, 1, 2, 3}, + {0, 2, 1, 3}, + {0, 3, 2, 1}, +}; + +#ifdef NONMATCHING +void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d) +{ + u8 r8; + u8 sp4[4]; + u8 sp8[4]; + void *spC[4]; + u8 sp1C[4][2]; + u8 sp24[4][2]; + u8 sp3C; + u16 sp40 = Random(); + u16 i; // r3 + u16 r7; + u8 r1; + struct RecordMixing_UnknownStruct *r6; + + //asm("":::"r8"); + SeedRng(gLinkPlayers[0].trainerId); + r8 = GetLinkPlayerCount(); + for (i = 0; i < 4; i++) + { + sp4[i] = 0xFF; + sp8[i] = 0; + sp1C[i][0] = 0; + sp1C[i][1] = 0; + } + sp3C = 0; + for (i = 0; i < r8; i++) + { + r6 = (struct RecordMixing_UnknownStruct *)(a + b * i); + if (r6->unk70 != 0) + { + for (r7 = 0; r7 < r6->unk70; r7++) + { + if (r6->unk74[r7] == 0) + sp1C[i][r7] = 1; + } + } + //_080B9D3C + } + //_080B9D46 + for (r7 = 0, i = 0; i < r8; i++) + { + r6 = (struct RecordMixing_UnknownStruct *)(a + b * i); + if (sp1C[i][0] == 1 || sp1C[i][1] == 1) + sp3C++; + if (sp1C[i][0] == 1 && sp1C[i][1] == 0) + { + sp24[r7][0] = i; + sp24[r7][1] = 0; + r7++; + } + else if (sp1C[i][0] == 0 && sp1C[i][1] == 1) + { + sp24[r7][0] = i; + sp24[r7][1] = 0; + r7++; + } + //else if (sp1C[i][0] == 1 + 1 && sp1C[i][1] + 1 == 1 + 1) + else if (sp1C[i][0] == 1 && sp1C[i][1] == 1) + { + u8 r4, r1; + + sp24[r7][0] = i; + r4 = sub_80B9BBC((u16 *)&r6->data[0]); + r1 = sub_80B9BBC((u16 *)&r6->data[1]); + + asm(""); + if (r4 == 0 && r1 != 0) + sp24[r7][1] = 1; + else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0)) + sp24[r7][1] = Random() % 2; + else + sp24[r7][1] = 0; + /* + if (r4 == 0 && r1 != 0) + sp24[r7][1] = 1; + else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0)) + sp24[r7][1] = Random() % 2; + else + sp24[r7][1] = 0; + */ + + /* + if (r4 == 0 && r1 != 0) + sp24[r7][1] = 1; + else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0)) + //sp24[r7][1] = ((Random() << 16) >> 16) % 2; + sp24[r7][1] = Random() % 2; + else + sp24[r7][1] = 0; + */ + //_080B9E2C: + r7++; + } + } + //_080B9E3E + for (i = 0; i < 4; i++) + { + r6 = (struct RecordMixing_UnknownStruct *)a + b * c; + spC[i] = r6; + } + r1 = sub_80B9C4C(d) % 3; + switch (sp3C) + { + case 2: + sub_80B9BC4(a, b, (u8 *)sp24, 0, 1); + break; + case 3: + { + u8 var1 = gUnknown_083D02B4[r1][0]; + u8 var2 = gUnknown_083D02B4[r1][1]; + sub_80B9BC4(a, b, (u8 *)sp24, var1, var2); + } + break; + case 4: + { + u8 *r6 = (u8 *)sp24; + u8 var1 = gUnknown_083D02BA[r1][0]; + u8 var2 = gUnknown_083D02BA[r1][1]; + sub_80B9BC4(a, b, r6, var1, var2); + } + { + u8 *r6 = (u8 *)sp24; + u8 var1 = gUnknown_083D02BA[r1][2]; + u8 var2 = gUnknown_083D02BA[r1][3]; + sub_80B9BC4(a, b, r6, var1, var2); + } + break; + } + //_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); + 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); + //memcpy(&gSaveBlock1.filler_303C.data[1], &r6->data[1], 0x38); + SeedRng(sp40); +} +#else +__attribute__((naked)) +void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d) +{ + 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, 0x58\n\ + str r0, [sp, 0x2C]\n\ + str r1, [sp, 0x30]\n\ + str r3, [sp, 0x38]\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + str r2, [sp, 0x34]\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x40]\n\ + ldr r0, _080B9DA8 @ =gLinkPlayers\n\ + ldrh r0, [r0, 0x4]\n\ + bl SeedRng\n\ + bl GetLinkPlayerCount\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + movs r3, 0\n\ + add r0, sp, 0x1C\n\ + mov r9, r0\n\ + movs r1, 0x1D\n\ + add r1, sp\n\ + mov r10, r1\n\ + mov r2, sp\n\ + adds r2, 0xC\n\ + str r2, [sp, 0x4C]\n\ + movs r7, 0xFF\n\ + add r4, sp, 0x8\n\ + movs r2, 0\n\ + mov r6, r9\n\ + mov r5, r10\n\ +_080B9CBC:\n\ + mov r1, sp\n\ + adds r1, r3\n\ + adds r1, 0x4\n\ + ldrb r0, [r1]\n\ + orrs r0, r7\n\ + strb r0, [r1]\n\ + adds r0, r4, r3\n\ + strb r2, [r0]\n\ + lsls r1, r3, 1\n\ + adds r0, r6, r1\n\ + strb r2, [r0]\n\ + adds r1, r5, r1\n\ + strb r2, [r1]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, 0x3\n\ + bls _080B9CBC\n\ + movs r4, 0\n\ + str r4, [sp, 0x3C]\n\ + movs r3, 0\n\ + mov r1, r8\n\ + lsls r0, r1, 16\n\ + lsrs r1, r0, 16\n\ + str r0, [sp, 0x50]\n\ + ldr r4, [sp, 0x30]\n\ + ldr r0, [sp, 0x34]\n\ + adds r2, r4, 0\n\ + muls r2, r0\n\ + str r2, [sp, 0x48]\n\ + ldr r2, [sp, 0x3C]\n\ + cmp r2, r1\n\ + bcs _080B9D46\n\ + mov r8, r1\n\ +_080B9D00:\n\ + ldr r4, [sp, 0x30]\n\ + adds r0, r4, 0\n\ + muls r0, r3\n\ + ldr r1, [sp, 0x2C]\n\ + adds r6, r1, r0\n\ + ldr r0, [r6, 0x70]\n\ + cmp r0, 0\n\ + beq _080B9D3C\n\ + movs r7, 0\n\ + cmp r7, r0\n\ + bcs _080B9D3C\n\ + adds r4, r6, 0\n\ + adds r4, 0x74\n\ + mov r2, r9\n\ + lsls r1, r3, 1\n\ + movs r5, 0x1\n\ +_080B9D20:\n\ + lsls r0, r7, 1\n\ + adds r0, r4, r0\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + bne _080B9D30\n\ + adds r0, r7, r1\n\ + adds r0, r2, r0\n\ + strb r5, [r0]\n\ +_080B9D30:\n\ + adds r0, r7, 0x1\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + ldr r0, [r6, 0x70]\n\ + cmp r7, r0\n\ + bcc _080B9D20\n\ +_080B9D3C:\n\ + adds r0, r3, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, r8\n\ + bcc _080B9D00\n\ +_080B9D46:\n\ + movs r7, 0\n\ + movs r3, 0\n\ + ldr r2, [sp, 0x50]\n\ + cmp r2, 0\n\ + beq _080B9E3E\n\ + mov r4, sp\n\ + adds r4, 0x24\n\ + str r4, [sp, 0x44]\n\ + movs r0, 0x25\n\ + add r0, sp\n\ + mov r8, r0\n\ +_080B9D5C:\n\ + ldr r1, [sp, 0x30]\n\ + adds r0, r1, 0\n\ + muls r0, r3\n\ + ldr r2, [sp, 0x2C]\n\ + adds r6, r2, r0\n\ + lsls r1, r3, 1\n\ + mov r4, r9\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + beq _080B9D7C\n\ + mov r2, r10\n\ + adds r0, r2, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + bne _080B9D86\n\ +_080B9D7C:\n\ + ldr r0, [sp, 0x3C]\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x3C]\n\ +_080B9D86:\n\ + mov r4, r9\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + bne _080B9DAC\n\ + mov r2, r10\n\ + adds r0, r2, r1\n\ + ldrb r2, [r0]\n\ + cmp r2, 0\n\ + bne _080B9DAC\n\ +_080B9D9A:\n\ + lsls r1, r7, 1\n\ + ldr r4, [sp, 0x44]\n\ + adds r0, r4, r1\n\ + strb r3, [r0]\n\ + add r1, r8\n\ + strb r2, [r1]\n\ + b _080B9E2C\n\ + .align 2, 0\n\ +_080B9DA8: .4byte gLinkPlayers\n\ +_080B9DAC:\n\ + mov r2, r9\n\ + adds r0, r2, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _080B9DC0\n\ + mov r4, r10\n\ + adds r0, r4, r1\n\ + ldrb r2, [r0]\n\ + cmp r2, 0x1\n\ + beq _080B9D9A\n\ +_080B9DC0:\n\ + mov r2, r9\n\ + adds r0, r2, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + bne _080B9E32\n\ + mov r4, r10\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + bne _080B9E32\n\ + lsls r5, r7, 1\n\ + ldr r1, [sp, 0x44]\n\ + adds r0, r1, r5\n\ + strb r3, [r0]\n\ + adds r0, r6, 0\n\ + str r3, [sp, 0x54]\n\ + bl sub_80B9BBC\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r0, r6, 0\n\ + adds r0, 0x38\n\ + bl sub_80B9BBC\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + ldr r3, [sp, 0x54]\n\ + cmp r4, 0\n\ + bne _080B9E0A\n\ + cmp r1, 0\n\ + beq _080B9E0E\n\ + mov r2, r8\n\ + adds r1, r2, r5\n\ + movs r0, 0x1\n\ + strb r0, [r1]\n\ + b _080B9E2C\n\ +_080B9E0A:\n\ + cmp r1, 0\n\ + beq _080B9E26\n\ +_080B9E0E:\n\ + str r3, [sp, 0x54]\n\ + bl Random\n\ + mov r4, r8\n\ + adds r2, r4, r5\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x1\n\ + ands r0, r1\n\ + strb r0, [r2]\n\ + ldr r3, [sp, 0x54]\n\ + b _080B9E2C\n\ +_080B9E26:\n\ + mov r2, r8\n\ + adds r0, r2, r5\n\ + strb r1, [r0]\n\ +_080B9E2C:\n\ + adds r0, r7, 0x1\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ +_080B9E32:\n\ + adds r0, r3, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + ldr r4, [sp, 0x50]\n\ + cmp r0, r4\n\ + bcc _080B9D5C\n\ +_080B9E3E:\n\ + movs r3, 0\n\ + ldr r1, [sp, 0x48]\n\ + lsls r0, r1, 4\n\ + subs r0, r1\n\ + lsls r0, 3\n\ + ldr r2, [sp, 0x2C]\n\ + adds r6, r2, r0\n\ + ldr r1, [sp, 0x4C]\n\ +_080B9E4E:\n\ + lsls r0, r3, 2\n\ + adds r0, r1, r0\n\ + str r6, [r0]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, 0x3\n\ + bls _080B9E4E\n\ + ldr r0, [sp, 0x38]\n\ + bl sub_80B9C4C\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + movs r1, 0x3\n\ + bl __umodsi3\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + ldr r4, [sp, 0x3C]\n\ + cmp r4, 0x3\n\ + beq _080B9E9C\n\ + cmp r4, 0x3\n\ + bgt _080B9E82\n\ + cmp r4, 0x2\n\ + beq _080B9E8A\n\ + b _080B9EF0\n\ +_080B9E82:\n\ + ldr r0, [sp, 0x3C]\n\ + cmp r0, 0x4\n\ + beq _080B9EBC\n\ + b _080B9EF0\n\ +_080B9E8A:\n\ + add r2, sp, 0x24\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + ldr r0, [sp, 0x2C]\n\ + ldr r1, [sp, 0x30]\n\ + movs r3, 0\n\ + bl sub_80B9BC4\n\ + b _080B9EF0\n\ +_080B9E9C:\n\ + ldr r0, _080B9EB8 @ =gUnknown_083D02B4\n\ + lsls r1, 1\n\ + adds r2, r1, r0\n\ + ldrb r3, [r2]\n\ + adds r0, 0x1\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + add r2, sp, 0x24\n\ + str r0, [sp]\n\ + ldr r0, [sp, 0x2C]\n\ + ldr r1, [sp, 0x30]\n\ + bl sub_80B9BC4\n\ + b _080B9EF0\n\ + .align 2, 0\n\ +_080B9EB8: .4byte gUnknown_083D02B4\n\ +_080B9EBC:\n\ + add r6, sp, 0x24\n\ + ldr r4, _080B9F2C @ =gUnknown_083D02BA\n\ + lsls r5, r1, 2\n\ + adds r0, r5, r4\n\ + ldrb r3, [r0]\n\ + adds r0, r4, 0x1\n\ + adds r0, r5, r0\n\ + ldrb r0, [r0]\n\ + str r0, [sp]\n\ + ldr r0, [sp, 0x2C]\n\ + ldr r1, [sp, 0x30]\n\ + adds r2, r6, 0\n\ + bl sub_80B9BC4\n\ + adds r0, r4, 0x2\n\ + adds r0, r5, r0\n\ + ldrb r3, [r0]\n\ + adds r4, 0x3\n\ + adds r5, r4\n\ + ldrb r0, [r5]\n\ + str r0, [sp]\n\ + ldr r0, [sp, 0x2C]\n\ + ldr r1, [sp, 0x30]\n\ + adds r2, r6, 0\n\ + bl sub_80B9BC4\n\ +_080B9EF0:\n\ + ldr r1, [sp, 0x2C]\n\ + ldr r2, [sp, 0x48]\n\ + adds r6, r1, r2\n\ + ldr r4, _080B9F30 @ =gSaveBlock1\n\ + ldr r1, _080B9F34 @ =0x0000303c\n\ + adds r0, r4, r1\n\ + adds r1, r6, 0\n\ + movs r2, 0x38\n\ + bl memcpy\n\ + ldr r2, _080B9F38 @ =0x00003074\n\ + adds r4, r2\n\ + adds r1, r6, 0\n\ + adds r1, 0x38\n\ + adds r0, r4, 0\n\ + movs r2, 0x38\n\ + bl memcpy\n\ + ldr r0, [sp, 0x40]\n\ + bl SeedRng\n\ + add sp, 0x58\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\ +_080B9F2C: .4byte gUnknown_083D02BA\n\ +_080B9F30: .4byte gSaveBlock1\n\ +_080B9F34: .4byte 0x0000303c\n\ +_080B9F38: .4byte 0x00003074\n\ + .syntax divided\n"); +} +#endif + +void sub_80B9F3C(u16 *a, u8 b) +{ + if (b != 0 && *a != 0) + { + if (GetPocketByItemId(*a) == 5) + { + if (!CheckBagHasItem(*a, 1) && !CheckPCHasItem(*a, 1) && AddBagItem(*a, 1)) + { + VarSet(VAR_0x4001, *a); + StringCopy(gStringVar1, gLinkPlayers[0].name); + if (*a == ITEM_EON_TICKET) + FlagSet(SYS_HAS_EON_TICKET); + } + else + { + VarSet(VAR_0x4001, ITEM_NONE); + } + } + else + { + if (AddBagItem(*a, 1) == TRUE) + { + VarSet(VAR_0x4001, *a); + StringCopy(gStringVar1, gLinkPlayers[0].name); + } + else + { + VarSet(VAR_0x4001, ITEM_NONE); + } + } + } +} + +void sub_80BA00C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[0]++; + break; + case 1: + task->data[0]++; + break; + case 2: + SetSecretBase2Field_9_AndHideBG(); + sub_8125E2C(); + task->data[0]++; + break; + case 3: + if (sub_8125E6C() != 0) + { + ClearSecretBase2Field_9_2(); + task->data[0]++; + task->data[1] = 0; + } + break; + case 4: + task->data[1]++; + if (task->data[1] > 10) + { + sub_800832C(); + task->data[0]++; + } + break; + case 5: + if (!gReceivedRemoteLinkPlayers) + DestroyTask(taskId); + break; + } +} diff --git a/src/engine/reset_rtc_screen.c b/src/engine/reset_rtc_screen.c new file mode 100644 index 000000000..d052992ad --- /dev/null +++ b/src/engine/reset_rtc_screen.c @@ -0,0 +1,496 @@ +#include "global.h" +#include "event_data.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "rtc.h" +#include "save.h" +#include "sprite.h" +#include "songs.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "strings2.h" +#include "task.h" +#include "text.h" +#include "unknown_task.h" + +struct ResetRtcStruct +{ + /*0x0*/ u8 dataIndex; + /*0x2*/ u16 minVal; + /*0x4*/ u16 maxVal; + /*0x6*/ u8 left; + /*0x7*/ u8 right; + /*0x8*/ u8 unk8; +}; + +extern u16 gSaveFileStatus; + +extern struct ResetRtcStruct gUnknown_08376420[]; +extern struct SpritePalette gUnknown_083764BC; +extern struct SpriteTemplate gSpriteTemplate_83764E8; +extern u8 gUnknown_08376500[]; + +void CB2_ResetRtcScreen(void); +void VBlankCB_ResetRtcScreen(void); +void Task_ResetRtcScreen(u8); + +void SpriteCB_ResetRtcCusor0(struct Sprite *sprite) +{ + int state = gTasks[sprite->data0].data[2]; + if (state != sprite->data1) + { + sprite->data1 = state; + switch (state) + { + case 1: + sprite->invisible = FALSE; + sprite->animNum = 1; + sprite->animDelayCounter = 0; + sprite->pos1.x = 53; + sprite->pos1.y = 68; + break; + case 2: + sprite->invisible = FALSE; + sprite->animNum = 1; + sprite->animDelayCounter = 0; + sprite->pos1.x = 86; + sprite->pos1.y = 68; + break; + case 3: + sprite->invisible = FALSE; + sprite->animNum = 1; + sprite->animDelayCounter = 0; + sprite->pos1.x = 107; + sprite->pos1.y = 68; + break; + case 4: + sprite->invisible = FALSE; + sprite->animNum = 1; + sprite->animDelayCounter = 0; + sprite->pos1.x = 128; + sprite->pos1.y = 68; + break; + case 5: + sprite->invisible = FALSE; + sprite->animNum = 2; + sprite->animDelayCounter = 0; + sprite->pos1.x = 155; + sprite->pos1.y = 80; + break; + case 6: + DestroySprite(sprite); + break; + } + } +} + +void SpriteCB_ResetRtcCusor1(struct Sprite *sprite) +{ + int state = gTasks[sprite->data0].data[2]; + if (state != sprite->data1) + { + sprite->data1 = state; + switch (state) + { + case 1: + sprite->invisible = FALSE; + sprite->animNum = 0; + sprite->animDelayCounter = 0; + sprite->pos1.x = 53; + sprite->pos1.y = 92; + break; + case 2: + sprite->invisible = FALSE; + sprite->animNum = 0; + sprite->animDelayCounter = 0; + sprite->pos1.x = 86; + sprite->pos1.y = 92; + break; + case 3: + sprite->invisible = FALSE; + sprite->animNum = 0; + sprite->animDelayCounter = 0; + sprite->pos1.x = 107; + sprite->pos1.y = 92; + break; + case 4: + sprite->invisible = FALSE; + sprite->animNum = 0; + sprite->animDelayCounter = 0; + sprite->pos1.x = 128; + sprite->pos1.y = 92; + break; + case 5: + sprite->invisible = TRUE; + break; + case 6: + DestroySprite(sprite); + break; + } + } +} + +void ResetRtcScreen_CreateCursor(u8 taskId) +{ + int spriteId; + + LoadSpritePalette(&gUnknown_083764BC); + + spriteId = CreateSpriteAtEnd(&gSpriteTemplate_83764E8, 53, 68, 0); + gSprites[spriteId].callback = SpriteCB_ResetRtcCusor0; + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = -1; + + spriteId = CreateSpriteAtEnd(&gSpriteTemplate_83764E8, 53, 68, 0); + gSprites[spriteId].callback = SpriteCB_ResetRtcCusor1; + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = -1; +} + +void ResetRtcScreen_FreeCursorPalette(void) +{ + FreeSpritePaletteByTag(gUnknown_083764BC.tag); +} + +void ResetRtcScreen_HideChooseTimeWindow(void) +{ + MenuZeroFillWindowRect(3, 8, 25, 11); +} + +void ResetRtcScreen_PrintTime(u8 x, u8 y, u16 days, u8 hours, u8 minutes, u8 seconds) +{ + u8 *dest = gStringVar4; + days %= 10000; + hours %= 24; + minutes %= 60; + seconds %= 60; + sub_8072C44(gStringVar1, days, 24, 1); + dest = StringCopy(dest, gStringVar1); + dest = StringCopy(dest, gOtherText_Day); + sub_8072C44(gStringVar1, hours, 18, 1); + dest = StringCopy(dest, gStringVar1); + dest = StringCopy(dest, gUnknown_08376500); + dest = ConvertIntToDecimalStringN(dest, minutes, STR_CONV_MODE_LEADING_ZEROS, 2); + dest = StringCopy(dest, gUnknown_08376500); + ConvertIntToDecimalStringN(dest, seconds, STR_CONV_MODE_LEADING_ZEROS, 2); + MenuPrint(gStringVar4, x, y); +} + +void ResetRtcScreen_ShowChooseTimeWindow(u16 days, u8 hours, u8 minutes, u8 seconds) +{ + MenuDrawTextWindow(3, 8, 25, 11); + MenuPrint(gOtherText_OK, 20, 9); + ResetRtcScreen_PrintTime(4, 9, days, hours, minutes, seconds); +} + +bool32 ResetRtcScreen_MoveTimeUpDown(s16 *val, int minVal, int maxVal, u16 keys) +{ + if (keys & DPAD_DOWN) + { + (*val)--; + if (*val < minVal) + *val = maxVal; + } + else if (keys & DPAD_UP) + { + (*val)++; + if (*val > maxVal) + *val = minVal; + } + else if (keys & DPAD_LEFT) + { + *val -= 10; + if (*val < minVal) + *val = maxVal; + } + else if (keys & DPAD_RIGHT) + { + *val += 10; + if (*val > maxVal) + *val = minVal; + } + else + { + return FALSE; + } + + return TRUE; +} + +void Task_ResetRtc_3(u8 taskId) +{ + gTasks[taskId].data[0] = 1; +} + +void Task_ResetRtc_2(u8 taskId) +{ + ResetRtcScreen_HideChooseTimeWindow(); + ResetRtcScreen_FreeCursorPalette(); + gTasks[taskId].func = Task_ResetRtc_3; +} + +void Task_ResetRtc_1(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u8 selection = data[2]; + struct ResetRtcStruct *selectionInfo = &gUnknown_08376420[selection - 1]; + + if (gMain.newKeys & B_BUTTON) + { + gTasks[taskId].func = Task_ResetRtc_2; + data[1] = 0; + data[2] = 6; + PlaySE(SE_SELECT); + return; + } + + if (gMain.newKeys & DPAD_RIGHT) + { + if (selectionInfo->right) + { + data[2] = selectionInfo->right; + PlaySE(SE_SELECT); + return; + } + } + + if (gMain.newKeys & DPAD_LEFT) + { + if (selectionInfo->left) + { + data[2] = selectionInfo->left; + PlaySE(SE_SELECT); + return; + } + } + + if (selection == 5) + { + if (gMain.newKeys & A_BUTTON) + { + gLocalTime.days = data[3]; + gLocalTime.hours = data[4]; + gLocalTime.minutes = data[5]; + gLocalTime.seconds = data[6]; + PlaySE(SE_SELECT); + gTasks[taskId].func = Task_ResetRtc_2; + data[1] = 1; + data[2] = 6; + } + } + else if (ResetRtcScreen_MoveTimeUpDown(&data[selectionInfo->dataIndex], selectionInfo->minVal, selectionInfo->maxVal, gMain.newAndRepeatedKeys & (DPAD_UP | DPAD_DOWN))) + { + PlaySE(SE_SELECT); + ResetRtcScreen_PrintTime(4, 9, data[3], data[4], data[5], data[6]); + } +} + +void Task_ResetRtc_0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + data[0] = 0; + data[3] = gLocalTime.days; + data[4] = gLocalTime.hours; + data[5] = gLocalTime.minutes; + data[6] = gLocalTime.seconds; + ResetRtcScreen_ShowChooseTimeWindow(data[3], data[4], data[5], data[6]); + ResetRtcScreen_CreateCursor(taskId); + data[2] = 2; + gTasks[taskId].func = Task_ResetRtc_1; +} + +void CB2_InitResetRtcScreen(void) +{ + u8 *addr; + u32 size; + + REG_DISPCNT = 0; + SetVBlankCallback(NULL); + + DmaClear16(3, PLTT, PLTT_SIZE); + + addr = (u8 *)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(); + remove_some_task(); + dp12_8087EA4(); + ResetSpriteData(); + ResetTasks(); + ResetPaletteFade(); + SetUpWindowConfig(&gWindowConfig_81E6CE4); + InitMenuWindow(&gWindowConfig_81E6CE4); + REG_DISPCNT = 4352; + SetVBlankCallback(VBlankCB_ResetRtcScreen); + SetMainCallback2(CB2_ResetRtcScreen); + CreateTask(Task_ResetRtcScreen, 80); +} + +void CB2_ResetRtcScreen(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void VBlankCB_ResetRtcScreen(void) +{ + ProcessSpriteCopyRequests(); + LoadOam(); + TransferPlttBuffer(); +} + +void ResetRtcScreen_ShowMessage(const u8 *str) +{ + MenuDisplayMessageBox(); + MenuPrint(str, 2, 15); +} + +void Task_ShowResetRtcPrompt(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + MenuZeroFillScreen(); + MenuDrawTextWindow(0, 0, 20, 10); + MenuPrint(gSystemText_PresentTime, 1, 1); + ResetRtcScreen_PrintTime( + 1, + 3, + gLocalTime.days, + gLocalTime.hours, + gLocalTime.minutes, + gLocalTime.seconds); + MenuPrint(gSystemText_PreviousTime, 1, 5); + ResetRtcScreen_PrintTime( + 1, + 7, + gSaveBlock2.lastBerryTreeUpdate.days, + gSaveBlock2.lastBerryTreeUpdate.hours, + gSaveBlock2.lastBerryTreeUpdate.minutes, + gSaveBlock2.lastBerryTreeUpdate.seconds); + ResetRtcScreen_ShowMessage(gSystemText_ResetRTCPrompt); + data[0]++; + case 1: + if (gMain.newKeys & B_BUTTON) + { + DestroyTask(taskId); + DoSoftReset(); + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + DestroyTask(taskId); + } + break; + } +} + +void Task_ResetRtcScreen(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 1, 0x10, 0, 0xFFFF); + data[0] = 1; + break; + case 1: + if (!gPaletteFade.active) + { + if (gSaveFileStatus == 0 || gSaveFileStatus == 2) + { + ResetRtcScreen_ShowMessage(gSystemText_NoSaveFileNoTime); + data[0] = 5; + } + else + { + RtcCalcLocalTime(); + data[1] = CreateTask(Task_ShowResetRtcPrompt, 80); + data[0] = 2; + } + } + break; + case 2: + if (gTasks[data[1]].isActive != TRUE) + { + MenuZeroFillScreen(); + ResetRtcScreen_ShowMessage(gSystemText_PleaseResetTime); + gLocalTime = gSaveBlock2.lastBerryTreeUpdate; + data[1] = CreateTask(Task_ResetRtc_0, 80); + data[0] = 3; + } + break; + case 3: + if (gTasks[data[1]].data[0]) + { + if (!gTasks[data[1]].data[1]) + { + DestroyTask(data[1]); + data[0] = 2; + } + else + { + DestroyTask(data[1]); + RtcReset(); + RtcCalcLocalTimeOffset( + gLocalTime.days, + gLocalTime.hours, + gLocalTime.minutes, + gLocalTime.seconds); + gSaveBlock2.lastBerryTreeUpdate = gLocalTime; + VarSet(VAR_DAYS, gLocalTime.days); + DisableResetRTC(); + ResetRtcScreen_ShowMessage(gSystemText_ClockResetDataSave); + data[0] = 4; + } + } + break; + case 4: + if (TrySavingData(0) == TRUE) + { + ResetRtcScreen_ShowMessage(gSystemText_SaveCompleted); + PlaySE(SE_PINPON); + } + else + { + ResetRtcScreen_ShowMessage(gSystemText_SaveFailed); + PlaySE(SE_BOO); + } + data[0] = 5; + case 5: + if (gMain.newKeys & A_BUTTON) + { + BeginNormalPaletteFade(0xFFFFFFFF, 1, 0, 0x10, 0xFFFF); + data[0] = 6; + } + else + { + break; + } + case 6: + if (!gPaletteFade.active) + { + DestroyTask(taskId); + DoSoftReset(); + } + } +} diff --git a/src/engine/rng.c b/src/engine/rng.c new file mode 100644 index 000000000..7d4b5600e --- /dev/null +++ b/src/engine/rng.c @@ -0,0 +1,18 @@ +#include "global.h" +#include "rng.h" + +// The number 1103515245 comes from the example implementation of rand and srand +// in the ISO C standard. + +u32 gRngValue; + +u16 Random(void) +{ + gRngValue = 1103515245 * gRngValue + 24691; + return gRngValue >> 16; +} + +void SeedRng(u16 seed) +{ + gRngValue = seed; +} diff --git a/src/engine/rtc.c b/src/engine/rtc.c new file mode 100644 index 000000000..d73f943d2 --- /dev/null +++ b/src/engine/rtc.c @@ -0,0 +1,349 @@ +#include "global.h" +#include "rtc.h" +#include "string_util.h" +#include "text.h" + +static u16 sErrorStatus; +static struct SiiRtcInfo sRtc; +static u8 sProbeResult; +static u16 sSavedIme; + +struct Time gLocalTime; + +static const struct SiiRtcInfo sRtcDummy = {0, MONTH_JAN, 1}; // 2000 Jan 1 + +static const s32 sNumDaysInMonths[12] = +{ + 31, + 28, + 31, + 30, + 31, + 30, + 31, + 31, + 30, + 31, + 30, + 31, +}; + +void RtcDisableInterrupts() +{ + sSavedIme = REG_IME; + REG_IME = 0; +} + +void RtcRestoreInterrupts() +{ + REG_IME = sSavedIme; +} + +u32 ConvertBcdToBinary(u8 bcd) +{ + if (bcd > 0x9F) + return 0xFF; + + if ((bcd & 0xF) <= 9) + return (10 * ((bcd >> 4) & 0xF)) + (bcd & 0xF); + else + return 0xFF; +} + +bool8 IsLeapYear(u8 year) +{ + if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) + return TRUE; + + return FALSE; +} + +u16 ConvertDateToDayCount(u8 year, u8 month, u8 day) +{ + s32 i; + u16 dayCount = 0; + +#ifndef BUGFIX_BERRY + // The berry glitch was caused by not adding days for the year 2000. + for (i = year - 1; i > 0; i--) + { + dayCount += 365; + + if (IsLeapYear(i) == TRUE) + dayCount++; + } +#else + // The fix was to use "i >= 0" as the condition instead of "i > 0". + for (i = year - 1; i >= 0; i--) + { + dayCount += 365; + + if (IsLeapYear(i) == TRUE) + dayCount++; + } +#endif // BUGFIX_BERRY + + for (i = 0; i < month - 1; i++) + dayCount += sNumDaysInMonths[i]; + + if (month > MONTH_FEB && IsLeapYear(year) == TRUE) + dayCount++; + + dayCount += day; + + return dayCount; +} + +u16 RtcGetDayCount(struct SiiRtcInfo *rtc) +{ + u8 year = ConvertBcdToBinary(rtc->year); + u8 month = ConvertBcdToBinary(rtc->month); + u8 day = ConvertBcdToBinary(rtc->day); + return ConvertDateToDayCount(year, month, day); +} + +void RtcInit() +{ + sErrorStatus = 0; + + RtcDisableInterrupts(); + SiiRtcUnprotect(); + sProbeResult = SiiRtcProbe(); + RtcRestoreInterrupts(); + + if (!(sProbeResult & 0xF)) + { + sErrorStatus = RTC_INIT_ERROR; + return; + } + + if (sProbeResult & 0xF0) + sErrorStatus = RTC_INIT_WARNING; + else + sErrorStatus = 0; + + RtcGetRawInfo(&sRtc); + sErrorStatus = RtcCheckInfo(&sRtc); +} + +u16 RtcGetErrorStatus() +{ + return sErrorStatus; +} + +void RtcGetInfo(struct SiiRtcInfo *rtc) +{ + if (sErrorStatus & RTC_ERR_FLAG_MASK) + *rtc = sRtcDummy; + else + RtcGetRawInfo(rtc); +} + +void RtcGetDateTime(struct SiiRtcInfo *rtc) +{ + RtcDisableInterrupts(); + SiiRtcGetDateTime(rtc); + RtcRestoreInterrupts(); +} + +void RtcGetStatus(struct SiiRtcInfo *rtc) +{ + RtcDisableInterrupts(); + SiiRtcGetStatus(rtc); + RtcRestoreInterrupts(); +} + +void RtcGetRawInfo(struct SiiRtcInfo *rtc) +{ + RtcGetStatus(rtc); + RtcGetDateTime(rtc); +} + +u16 RtcCheckInfo(struct SiiRtcInfo *rtc) +{ + u16 errorFlags = 0; + s32 year; + s32 month; + s32 value; + + if (rtc->status & SIIRTCINFO_POWER) + errorFlags |= RTC_ERR_POWER_FAILURE; + + if (!(rtc->status & SIIRTCINFO_24HOUR)) + errorFlags |= RTC_ERR_12HOUR_CLOCK; + + year = ConvertBcdToBinary(rtc->year); + + if (year == 0xFF) + errorFlags |= RTC_ERR_INVALID_YEAR; + + month = ConvertBcdToBinary(rtc->month); + + if (month == 0xFF || month == 0 || month > 12) + errorFlags |= RTC_ERR_INVALID_MONTH; + + value = ConvertBcdToBinary(rtc->day); + + if (value == 0xFF) + errorFlags |= RTC_ERR_INVALID_DAY; + + if (month == MONTH_FEB) + { + if (value > IsLeapYear(year) + sNumDaysInMonths[month - 1]) + errorFlags |= RTC_ERR_INVALID_DAY; + } + else + { + if (value > sNumDaysInMonths[month - 1]) + errorFlags |= RTC_ERR_INVALID_DAY; + } + + value = ConvertBcdToBinary(rtc->hour); + + if (value > 24) + errorFlags |= RTC_ERR_INVALID_HOUR; + + value = ConvertBcdToBinary(rtc->minute); + + if (value > 60) + errorFlags |= RTC_ERR_INVALID_MINUTE; + + value = ConvertBcdToBinary(rtc->second); + + if (value > 60) + errorFlags |= RTC_ERR_INVALID_SECOND; + + return errorFlags; +} + +void RtcReset() +{ + RtcDisableInterrupts(); + SiiRtcReset(); + RtcRestoreInterrupts(); +} + +void FormatDecimalTime(u8 *dest, s32 hour, s32 minute, s32 second) +{ + dest = ConvertIntToDecimalStringN(dest, hour, STR_CONV_MODE_LEADING_ZEROS, 2); + *dest++ = CHAR_COLON; + dest = ConvertIntToDecimalStringN(dest, minute, STR_CONV_MODE_LEADING_ZEROS, 2); + *dest++ = CHAR_COLON; + dest = ConvertIntToDecimalStringN(dest, second, STR_CONV_MODE_LEADING_ZEROS, 2); + *dest = EOS; +} + +void FormatHexTime(u8 *dest, s32 hour, s32 minute, s32 second) +{ + dest = ConvertIntToHexStringN(dest, hour, STR_CONV_MODE_LEADING_ZEROS, 2); + *dest++ = CHAR_COLON; + dest = ConvertIntToHexStringN(dest, minute, STR_CONV_MODE_LEADING_ZEROS, 2); + *dest++ = CHAR_COLON; + dest = ConvertIntToHexStringN(dest, second, STR_CONV_MODE_LEADING_ZEROS, 2); + *dest = EOS; +} + +void FormatHexRtcTime(u8 *dest) +{ + FormatHexTime(dest, sRtc.hour, sRtc.minute, sRtc.second); +} + +void FormatDecimalDate(u8 *dest, s32 year, s32 month, s32 day) +{ + dest = ConvertIntToDecimalStringN(dest, year, STR_CONV_MODE_LEADING_ZEROS, 4); + *dest++ = CHAR_HYPHEN; + dest = ConvertIntToDecimalStringN(dest, month, STR_CONV_MODE_LEADING_ZEROS, 2); + *dest++ = CHAR_HYPHEN; + dest = ConvertIntToDecimalStringN(dest, day, STR_CONV_MODE_LEADING_ZEROS, 2); + *dest = EOS; +} + +void FormatHexDate(u8 *dest, s32 year, s32 month, s32 day) +{ + dest = ConvertIntToHexStringN(dest, year, STR_CONV_MODE_LEADING_ZEROS, 4); + *dest++ = CHAR_HYPHEN; + dest = ConvertIntToHexStringN(dest, month, STR_CONV_MODE_LEADING_ZEROS, 2); + *dest++ = CHAR_HYPHEN; + dest = ConvertIntToHexStringN(dest, day, STR_CONV_MODE_LEADING_ZEROS, 2); + *dest = EOS; +} + +void RtcCalcTimeDifference(struct SiiRtcInfo *rtc, struct Time *result, struct Time *t) +{ + u16 days = RtcGetDayCount(rtc); + result->seconds = ConvertBcdToBinary(rtc->second) - t->seconds; + result->minutes = ConvertBcdToBinary(rtc->minute) - t->minutes; + result->hours = ConvertBcdToBinary(rtc->hour) - t->hours; + result->days = days - t->days; + + if (result->seconds < 0) + { + result->seconds += 60; + --result->minutes; + } + + if (result->minutes < 0) + { + result->minutes += 60; + --result->hours; + } + + if (result->hours < 0) + { + result->hours += 24; + --result->days; + } +} + +void RtcCalcLocalTime() +{ + RtcGetInfo(&sRtc); + RtcCalcTimeDifference(&sRtc, &gLocalTime, &gSaveBlock2.localTimeOffset); +} + +void RtcInitLocalTimeOffset(s32 hour, s32 minute) +{ + RtcCalcLocalTimeOffset(0, hour, minute, 0); +} + +void RtcCalcLocalTimeOffset(s32 days, s32 hours, s32 minutes, s32 seconds) +{ + gLocalTime.days = days; + gLocalTime.hours = hours; + gLocalTime.minutes = minutes; + gLocalTime.seconds = seconds; + RtcGetInfo(&sRtc); + RtcCalcTimeDifference(&sRtc, &gSaveBlock2.localTimeOffset, &gLocalTime); +} + +void CalcTimeDifference(struct Time *result, struct Time *t1, struct Time *t2) +{ + result->seconds = t2->seconds - t1->seconds; + result->minutes = t2->minutes - t1->minutes; + result->hours = t2->hours - t1->hours; + result->days = t2->days - t1->days; + + if (result->seconds < 0) + { + result->seconds += 60; + --result->minutes; + } + + if (result->minutes < 0) + { + result->minutes += 60; + --result->hours; + } + + if (result->hours < 0) + { + result->hours += 24; + --result->days; + } +} + +u32 RtcGetMinuteCount() +{ + RtcGetInfo(&sRtc); + return (24 * 60) * RtcGetDayCount(&sRtc) + 60 * sRtc.hour + sRtc.minute; +} diff --git a/src/engine/save.c b/src/engine/save.c new file mode 100644 index 000000000..adf39268e --- /dev/null +++ b/src/engine/save.c @@ -0,0 +1,797 @@ +#include "global.h" +#include "gba/gba.h" +#include "gba/flash_internal.h" +#include "save.h" +#include "load_save.h" +#include "rom4.h" +#include "save_failed_screen.h" + +#define GETVALIDSTATUSBITFIELD ((1 << ARRAY_COUNT(gSaveSectionLocations)) - 1) +#define GETCHUNKSIZE(chunk, n) ((sizeof(chunk) - (0xF80 * (n - 1))) >= 0xF80 ? 0xF80 : (sizeof(chunk) - (0xF80 * (n - 1)))) +#define GETBLOCKOFFSET(n) (0xF80 * (n - 1)) +#define TOTALNUMSECTORS ((ARRAY_COUNT(gSaveSectionLocations) * 2) + (ARRAY_COUNT(gHallOfFameSaveSectionLocations) * 2)) // there are 2 slots, so double each array count and get the sum. + +extern struct SaveSection unk_2000000; // slow save RAM + +u16 gLastWrittenSector; +u32 gLastSaveCounter; +u16 gLastKnownGoodSector; +u32 gDamagedSaveSectors; +u32 gSaveCounter; +struct SaveSection *gFastSaveSection; // the pointer is in fast IWRAM but may sometimes point to the slower EWRAM. +u16 gUnknown_03005EB4; +u16 gSaveFileStatus; +u32 gGameContinueCallback; + +extern struct PokemonStorage gPokemonStorage; +extern struct HallOfFame gHallOfFame; + +static EWRAM_DATA u32 gLastSaveSectorStatus = 0; // used but in an unferenced function, so unused + +const struct SaveSectionLocation gSaveSectionLocations[] = +{ + {((u8 *) &gSaveBlock2) + GETBLOCKOFFSET(1), GETCHUNKSIZE(gSaveBlock2, 1)}, + {((u8 *) &gSaveBlock1) + GETBLOCKOFFSET(1), GETCHUNKSIZE(gSaveBlock1, 1)}, + {((u8 *) &gSaveBlock1) + GETBLOCKOFFSET(2), GETCHUNKSIZE(gSaveBlock1, 2)}, + {((u8 *) &gSaveBlock1) + GETBLOCKOFFSET(3), GETCHUNKSIZE(gSaveBlock1, 3)}, + {((u8 *) &gSaveBlock1) + GETBLOCKOFFSET(4), GETCHUNKSIZE(gSaveBlock1, 4)}, + {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(1), GETCHUNKSIZE(gPokemonStorage, 1)}, + {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(2), GETCHUNKSIZE(gPokemonStorage, 2)}, + {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(3), GETCHUNKSIZE(gPokemonStorage, 3)}, + {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(4), GETCHUNKSIZE(gPokemonStorage, 4)}, + {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(5), GETCHUNKSIZE(gPokemonStorage, 5)}, + {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(6), GETCHUNKSIZE(gPokemonStorage, 6)}, + {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(7), GETCHUNKSIZE(gPokemonStorage, 7)}, + {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(8), GETCHUNKSIZE(gPokemonStorage, 8)}, + {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(9), GETCHUNKSIZE(gPokemonStorage, 9)} +}; + +const struct SaveSectionLocation gHallOfFameSaveSectionLocations[] = +{ + {((u8 *) &gHallOfFame) + GETBLOCKOFFSET(1), GETCHUNKSIZE(struct HallOfFame, 1)}, // gHallOfFame is not a proper sym, so the struct must be used. + {((u8 *) &gHallOfFame) + GETBLOCKOFFSET(2), GETCHUNKSIZE(struct HallOfFame, 2)} +}; + +const u8 gFlashSectors[] = { 0x1E, 0x1F }; + +void ClearSaveData(void) +{ + u16 i; + + for (i = 0; i < NUM_SECTORS; i++) + EraseFlashSector(i); +} + +void ResetSaveCounters(void) +{ + gSaveCounter = 0; + gLastWrittenSector = 0; + gDamagedSaveSectors = 0; +} + +bool32 SetDamagedSectorBits(u8 op, u8 bit) +{ + bool32 retVal = FALSE; + + switch (op) + { + case ENABLE: + gDamagedSaveSectors |= (1 << bit); + break; + case DISABLE: + gDamagedSaveSectors &= ~(1 << bit); + break; + case CHECK: // unused + if (gDamagedSaveSectors & (1 << bit)) + retVal = TRUE; + break; + } + + return retVal; +} + +u8 save_write_to_flash(u16 a1, const struct SaveSectionLocation *location) +{ + u32 retVal; + u16 i; + + gFastSaveSection = &unk_2000000; + + if (a1 != 0xFFFF) // for link + { + retVal = HandleWriteSector(a1, location); + } + else + { + gLastKnownGoodSector = gLastWrittenSector; // backup the current written sector before attempting to write. + gLastSaveCounter = gSaveCounter; + gLastWrittenSector++; + gLastWrittenSector = gLastWrittenSector % ARRAY_COUNT(gSaveSectionLocations); + gSaveCounter++; + retVal = 1; + + for (i = 0; i < ARRAY_COUNT(gSaveSectionLocations); i++) + HandleWriteSector(i, location); + + if (gDamagedSaveSectors != 0) // skip the damaged sector. + { + retVal = 0xFF; + gLastWrittenSector = gLastKnownGoodSector; + gSaveCounter = gLastSaveCounter; + } + } + + return retVal; +} + +u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location) +{ + u16 i; + u16 sector; + u8 *data; + u16 size; + + sector = a1 + gLastWrittenSector; + sector %= ARRAY_COUNT(gSaveSectionLocations); + sector += ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); + + data = location[a1].data; + size = location[a1].size; + + // clear save section. + for (i = 0; i < sizeof(struct SaveSection); i++) + ((char *)gFastSaveSection)[i] = 0; + + gFastSaveSection->id = a1; + gFastSaveSection->security = UNKNOWN_CHECK_VALUE; + gFastSaveSection->counter = gSaveCounter; + + for (i = 0; i < size; i++) + gFastSaveSection->data[i] = data[i]; + + gFastSaveSection->checksum = CalculateChecksum(data, size); + return TryWriteSector(sector, gFastSaveSection->data); +} + +u8 HandleWriteSectorNBytes(u8 sector, u8 *data, u16 size) +{ + u16 i; + struct SaveSection *section = &unk_2000000; + + for (i = 0; i < sizeof(struct SaveSection); i++) + ((char *)section)[i] = 0; + + section->security = UNKNOWN_CHECK_VALUE; + + for (i = 0; i < size; i++) + section->data[i] = data[i]; + + section->id = CalculateChecksum(data, size); // though this appears to be incorrect, it might be some sector checksum instead of a whole save checksum and only appears to be relevent to HOF data, if used. + return TryWriteSector(sector, section->data); +} + +u8 TryWriteSector(u8 sector, u8 *data) +{ + if (ProgramFlashSectorAndVerify(sector, data) != 0) // is damaged? + { + SetDamagedSectorBits(ENABLE, sector); // set damaged sector bits. + return 0xFF; + } + else + { + SetDamagedSectorBits(DISABLE, sector); // unset damaged sector bits. it's safe now. + return 1; + } +} + +u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectionLocation *location) // location is unused +{ + gFastSaveSection = &unk_2000000; + gLastKnownGoodSector = gLastWrittenSector; + gLastSaveCounter = gSaveCounter; + gLastWrittenSector++; + gLastWrittenSector = gLastWrittenSector % ARRAY_COUNT(gSaveSectionLocations); + gSaveCounter++; + gUnknown_03005EB4 = 0; + gDamagedSaveSectors = 0; + return 0; +} + +u32 RestoreSaveBackupVars(const struct SaveSectionLocation *location) // only ever called once, and gSaveBlock2 is passed to this function. location is unused +{ + gFastSaveSection = &unk_2000000; + gLastKnownGoodSector = gLastWrittenSector; + gLastSaveCounter = gSaveCounter; + gUnknown_03005EB4 = 0; + gDamagedSaveSectors = 0; + return 0; +} + +u8 sub_812550C(u16 a1, const struct SaveSectionLocation *location) +{ + u8 retVal; + + if (gUnknown_03005EB4 < a1 - 1) + { + retVal = 1; + HandleWriteSector(gUnknown_03005EB4, location); + gUnknown_03005EB4++; + if (gDamagedSaveSectors) + { + retVal = 0xFF; + gLastWrittenSector = gLastKnownGoodSector; + gSaveCounter = gLastSaveCounter; + } + } + else + { + retVal = 0xFF; + } + + return retVal; +} + +u8 sub_812556C(u16 a1, const struct SaveSectionLocation *location) +{ + u8 retVal = 1; + + sub_81255B8(a1 - 1, location); + + if (gDamagedSaveSectors) + { + retVal = 0xFF; + gLastWrittenSector = gLastKnownGoodSector; + gSaveCounter = gLastSaveCounter; + } + return retVal; +} + +u8 sub_81255B8(u16 a1, const struct SaveSectionLocation *location) +{ + u16 i; + u16 sector; + u8 *data; + u16 size; + u8 status; + + sector = a1 + gLastWrittenSector; + sector %= ARRAY_COUNT(gSaveSectionLocations); + sector += ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); + + data = location[a1].data; + size = location[a1].size; + + // clear temp save section. + for (i = 0; i < sizeof(struct SaveSection); i++) + ((char *)gFastSaveSection)[i] = 0; + + gFastSaveSection->id = a1; + gFastSaveSection->security = UNKNOWN_CHECK_VALUE; + gFastSaveSection->counter = gSaveCounter; + + // set temp section's data. + for (i = 0; i < size; i++) + gFastSaveSection->data[i] = data[i]; + + // calculate checksum. + gFastSaveSection->checksum = CalculateChecksum(data, size); + + EraseFlashSector(sector); + + status = 1; + + for (i = 0; i < sizeof(struct UnkSaveSection); i++) + { + if (ProgramFlashByte(sector, i, ((u8 *)gFastSaveSection)[i])) + { + status = 0xFF; + break; + } + } + + if (status == 0xFF) + { + SetDamagedSectorBits(ENABLE, sector); + return 0xFF; + } + else + { + status = 1; + + for (i = 0; i < 7; i++) + { + if (ProgramFlashByte(sector, 0xFF9 + i, ((u8 *)gFastSaveSection)[0xFF9 + i])) + { + status = 0xFF; + break; + } + } + + if (status == 0xFF) + { + SetDamagedSectorBits(ENABLE, sector); + return 0xFF; + } + else + { + SetDamagedSectorBits(DISABLE, sector); + return 1; + } + } +} + +u8 sub_8125758(u16 a1, const struct SaveSectionLocation *location) +{ + u16 sector; + + sector = a1 + gLastWrittenSector - 1; + sector %= ARRAY_COUNT(gSaveSectionLocations); + sector += ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); + + if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), ((u8 *)gFastSaveSection)[sizeof(struct UnkSaveSection)])) + { + // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. + SetDamagedSectorBits(ENABLE, sector); + gLastWrittenSector = gLastKnownGoodSector; + gSaveCounter = gLastSaveCounter; + return 0xFF; + } + else + { + SetDamagedSectorBits(DISABLE, sector); + return 1; + } +} + +u8 sub_81257F0(u16 a1, const struct SaveSectionLocation *location) +{ + u16 sector; + + sector = a1 + gLastWrittenSector - 1; + sector %= ARRAY_COUNT(gSaveSectionLocations); + sector += ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); + + if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), 0x25)) + { + // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. + SetDamagedSectorBits(ENABLE, sector); + gLastWrittenSector = gLastKnownGoodSector; + gSaveCounter = gLastSaveCounter; + return 0xFF; + } + else + { + SetDamagedSectorBits(DISABLE, sector); + return 1; + } +} + +u8 sub_812587C(u16 a1, const struct SaveSectionLocation *location) +{ + u8 retVal; + gFastSaveSection = &unk_2000000; + if (a1 != 0xFFFF) + { + retVal = 0xFF; + } + else + { + retVal = GetSaveValidStatus(location); + sub_81258BC(0xFFFF, location); + } + + return retVal; +} + +u8 sub_81258BC(u16 a1, const struct SaveSectionLocation *location) +{ + u16 i; + u16 checksum; + u16 v3 = ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); + u16 id; + + for (i = 0; i < ARRAY_COUNT(gSaveSectionLocations); i++) + { + DoReadFlashWholeSection(i + v3, gFastSaveSection); + id = gFastSaveSection->id; + if (id == 0) + gLastWrittenSector = i; + checksum = CalculateChecksum(gFastSaveSection->data, location[id].size); + if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE + && gFastSaveSection->checksum == checksum) + { + u16 j; + for (j = 0; j < location[id].size; j++) + ((u8 *)location[id].data)[j] = gFastSaveSection->data[j]; + } + } + + return 1; +} + +u8 GetSaveValidStatus(const struct SaveSectionLocation *location) +{ + u16 i; + u16 checksum; + u32 saveSlot1Counter = 0; + u32 saveSlot2Counter = 0; + u32 slotCheckField = 0; + bool8 securityPassed = FALSE; + u8 saveSlot1Status; + u8 saveSlot2Status; + + // check save slot 1. + for (i = 0; i < ARRAY_COUNT(gSaveSectionLocations); i++) + { + DoReadFlashWholeSection(i, gFastSaveSection); + if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE) + { + securityPassed = TRUE; + checksum = CalculateChecksum(gFastSaveSection->data, location[gFastSaveSection->id].size); + if (gFastSaveSection->checksum == checksum) + { + saveSlot1Counter = gFastSaveSection->counter; + slotCheckField |= 1 << gFastSaveSection->id; + } + } + } + + if (securityPassed) + { + if (slotCheckField == GETVALIDSTATUSBITFIELD) + saveSlot1Status = 1; + else + saveSlot1Status = 255; + } + else + { + saveSlot1Status = 0; + } + + slotCheckField = 0; + securityPassed = FALSE; + + // check save slot 2. + for (i = 0; i < ARRAY_COUNT(gSaveSectionLocations); i++) + { + DoReadFlashWholeSection(i + ARRAY_COUNT(gSaveSectionLocations), gFastSaveSection); + if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE) + { + securityPassed = TRUE; + checksum = CalculateChecksum(gFastSaveSection->data, location[gFastSaveSection->id].size); + if (gFastSaveSection->checksum == checksum) + { + saveSlot2Counter = gFastSaveSection->counter; + slotCheckField |= 1 << gFastSaveSection->id; + } + } + } + + if (securityPassed) + { + if (slotCheckField == GETVALIDSTATUSBITFIELD) + saveSlot2Status = 1; + else + saveSlot2Status = 255; + } + else + { + saveSlot2Status = 0; + } + + if (saveSlot1Status == 1 && saveSlot2Status == 1) + { + if ((saveSlot1Counter == -1 && saveSlot2Counter == 0) || (saveSlot1Counter == 0 && saveSlot2Counter == -1)) + { + if ((unsigned)(saveSlot1Counter + 1) < (unsigned)(saveSlot2Counter + 1)) + { + gSaveCounter = saveSlot2Counter; + } + else + { + gSaveCounter = saveSlot1Counter; + } + } + else + { + if (saveSlot1Counter < saveSlot2Counter) + { + gSaveCounter = saveSlot2Counter; + } + else + { + gSaveCounter = saveSlot1Counter; + } + } + return 1; + } + + if (saveSlot1Status == 1) + { + gSaveCounter = saveSlot1Counter; + if (saveSlot2Status == 255) + return 255; + return 1; + } + + if (saveSlot2Status == 1) + { + gSaveCounter = saveSlot2Counter; + if (saveSlot1Status == 255) + return 255; + return 1; + } + + if (saveSlot1Status == 0 && saveSlot2Status == 0) + { + gSaveCounter = 0; + gLastWrittenSector = 0; + return 0; + } + + gSaveCounter = 0; + gLastWrittenSector = 0; + return 2; +} + +u8 sub_8125B88(u8 a1, u8 *data, u16 size) +{ + u16 i; + struct SaveSection *section = &unk_2000000; + DoReadFlashWholeSection(a1, section); + if (section->security == UNKNOWN_CHECK_VALUE) + { + u16 checksum = CalculateChecksum(section->data, size); + if (section->id == checksum) + { + for (i = 0; i < size; i++) + data[i] = section->data[i]; + return 1; + } + else + { + return 2; + } + } + else + { + return 0; + } +} + +u8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section) +{ + ReadFlash(sector, 0, section->data, sizeof(struct SaveSection)); + return 1; +} + +u16 CalculateChecksum(void *data, u16 size) +{ + u16 i; + u32 checksum = 0; + + for (i = 0; i < (size / 4); i++) + checksum += *((u32 *)data)++; + + return ((checksum >> 16) + checksum); +} + +u8 HandleSavingData(u8 saveType) +{ + u8 i; + switch (saveType) + { + case HOF_DELETE_SAVE: // deletes HOF before overwriting HOF completely. unused + for (i = (ARRAY_COUNT(gSaveSectionLocations) * 2 + 0); i < TOTALNUMSECTORS; i++) + EraseFlashSector(i); + case HOF_SAVE: // hall of fame. + if (GetGameStat(10) < 999) + IncrementGameStat(10); + for (i = 0; i < ARRAY_COUNT(gHallOfFameSaveSectionLocations); i++) + HandleWriteSectorNBytes((ARRAY_COUNT(gSaveSectionLocations) * 2 + 0) + i, gHallOfFameSaveSectionLocations[i].data, gHallOfFameSaveSectionLocations[i].size); + SaveSerializedGame(); + save_write_to_flash(0xFFFF, gSaveSectionLocations); + break; + case NORMAL_SAVE: // normal save. also called by overwriting your own save. + default: + SaveSerializedGame(); + save_write_to_flash(0xFFFF, gSaveSectionLocations); + break; + case LINK_SAVE: // link save. updates only gSaveBlock1 and gSaveBlock2. + SaveSerializedGame(); + for (i = 0; i < 5; i++) + save_write_to_flash(i, gSaveSectionLocations); + break; + case EREADER_SAVE: // used in mossdeep "game corner" before/after battling old man e-reader trainer + SaveSerializedGame(); + save_write_to_flash(0, gSaveSectionLocations); + break; + case DIFFERENT_FILE_SAVE: // there is a different file, so erase the file and overwrite it completely. + for (i = (ARRAY_COUNT(gSaveSectionLocations) * 2 + 0); i < TOTALNUMSECTORS; i++) + EraseFlashSector(i); // erase HOF. + SaveSerializedGame(); + save_write_to_flash(0xFFFF, gSaveSectionLocations); + break; + } + return 0; +} + +u8 TrySavingData(u8 saveType) // TrySave +{ + if (gFlashMemoryPresent != TRUE) + return 0xFF; + HandleSavingData(saveType); + if (!gDamagedSaveSectors) + return 1; + DoSaveFailedScreen(saveType); + return 0xFF; +} + +u8 sub_8125D80(void) // trade.s save +{ + if (gFlashMemoryPresent != TRUE) + return 1; + SaveSerializedGame(); + RestoreSaveBackupVarsAndIncrement(gSaveSectionLocations); + return 0; +} + +bool8 sub_8125DA8(void) // trade.s save +{ + u8 retVal = sub_812550C(ARRAY_COUNT(gSaveSectionLocations), gSaveSectionLocations); + if (gDamagedSaveSectors) + DoSaveFailedScreen(0); + if (retVal == 0xFF) + return 1; + else + return 0; +} + +u8 sub_8125DDC(void) // trade.s save +{ + sub_812556C(ARRAY_COUNT(gSaveSectionLocations), gSaveSectionLocations); + if (gDamagedSaveSectors) + DoSaveFailedScreen(0); + return 0; +} + +u8 sub_8125E04(void) // trade.s save +{ + sub_8125758(ARRAY_COUNT(gSaveSectionLocations), gSaveSectionLocations); + if (gDamagedSaveSectors) + DoSaveFailedScreen(0); + return 0; +} + +u8 sub_8125E2C(void) +{ + if (gFlashMemoryPresent != TRUE) + return 1; + + SaveSerializedGame(); + RestoreSaveBackupVars(gSaveSectionLocations); + sub_812556C(gUnknown_03005EB4 + 1, gSaveSectionLocations); + return 0; +} + +bool8 sub_8125E6C(void) +{ + u8 retVal = FALSE; + u16 val = ++gUnknown_03005EB4; + if (val <= 4) + { + sub_812556C(gUnknown_03005EB4 + 1, gSaveSectionLocations); + sub_81257F0(val, gSaveSectionLocations); + } + else + { + sub_81257F0(val, gSaveSectionLocations); + retVal = TRUE; + } + if (gDamagedSaveSectors) + DoSaveFailedScreen(1); + return retVal; +} + +u8 sub_8125EC8(u8 a1) +{ + u8 result; + + if (gFlashMemoryPresent != TRUE) + { + gSaveFileStatus = 4; + return 0xFF; + } + + switch (a1) + { + case 0: + default: + result = sub_812587C(0xFFFF, gSaveSectionLocations); + LoadSerializedGame(); + gSaveFileStatus = result; + gGameContinueCallback = 0; + break; + case 3: + result = sub_8125B88((ARRAY_COUNT(gSaveSectionLocations) * 2 + 0), gHallOfFameSaveSectionLocations[0].data, gHallOfFameSaveSectionLocations[0].size); + if (result == 1) + result = sub_8125B88((ARRAY_COUNT(gSaveSectionLocations) * 2 + 1), gHallOfFameSaveSectionLocations[1].data, gHallOfFameSaveSectionLocations[1].size); + break; + } + + return result; +} + +bool8 unref_sub_8125F4C(struct UnkSaveSection *a1) +{ + u16 i; + char *raw = (char *)a1; + + for (i = 0; i < sizeof(struct SaveSection); i++) + raw[i] = 0; + + ReadFlash(gFlashSectors[0], 0, a1->data, 4096); + + if (a1->security != UNKNOWN_CHECK_VALUE) + return FALSE; + + return TRUE; +} + +u8 unref_sub_8125FA0(void) +{ + u16 i; + u8 v0 = TrySavingData(0); + + for (i = 0; i < 2; i++) + EraseFlashSector(gFlashSectors[i]); + + if (v0 == 255) + { + return 3; + } + else if (v0 == 3) + { + return 2; + } + else + { + sub_8125EC8(0); + return 1; + } +} + +u8 unref_sub_8125FF0(u8 *data, u16 size) +{ + u16 i; + struct UnkSaveSection *section = (struct UnkSaveSection *)&unk_2000000; + + for (i = 0; i < sizeof(struct SaveSection); i++) + ((char *)section)[i] = 0; + + section->security = UNKNOWN_CHECK_VALUE; + + for (i = 0; i < size; i++) + section->data[i] = data[i]; + + gLastSaveSectorStatus = ProgramFlashSectorAndVerifyNBytes(gFlashSectors[0], (u8 *)section, sizeof(struct SaveSection)); + + if (gLastSaveSectorStatus) + return 0xFF; + else + return 1; +} + +u8 unref_sub_8126068(u8 sector, u8 *data, u32 size) +{ + if (ProgramFlashSectorAndVerify(sector, data)) + return 255; + else + return 1; +} + +u8 unref_sub_8126080(u8 sector, u8 *data) +{ + ReadFlash(sector, 0, data, sizeof(struct SaveSection)); + return 1; +} diff --git a/src/engine/save_failed_screen.c b/src/engine/save_failed_screen.c new file mode 100644 index 000000000..b91e8b5bf --- /dev/null +++ b/src/engine/save_failed_screen.c @@ -0,0 +1,310 @@ +#include "global.h" +#include "gba/flash_internal.h" +#include "save_failed_screen.h" +#include "m4a.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "save.h" +#include "sprite.h" +#include "starter_choose.h" +#include "strings.h" +#include "task.h" +#include "text.h" + +// In English 1.0, the text window is too small, causing text to overflow. + +#ifdef BUGFIX_SAVEFAILEDSCREEN1 +#define MSG_WIN_TOP 10 +#else +#define MSG_WIN_TOP 12 +#endif + +#define CLOCK_WIN_TOP (MSG_WIN_TOP - 4) + +extern u8 unk_2000000[]; + +static EWRAM_DATA u16 gSaveFailedType = 0; +static EWRAM_DATA u16 gSaveFailedClockInfo[9] = {0}; + +extern u32 gDamagedSaveSectors; +extern u32 gGameContinueCallback; + +static const struct OamData sClockOamData = +{ + 160, // Y + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 +}; + +static const u8 sClockFrames[8][3] = +{ + { 1, 0, 0 }, + { 5, 0, 0 }, + { 9, 0, 0 }, + { 5, 0, 1 }, + { 1, 0, 1 }, + { 5, 1, 1 }, + { 9, 1, 0 }, + { 5, 1, 0 }, +}; + +static const u8 gSaveFailedClockPal[] = INCBIN_U8("graphics/misc/clock_small.gbapal"); +static const u8 gSaveFailedClockGfx[] = INCBIN_U8("graphics/misc/clock_small.4bpp.lz"); + +static void VBlankCB(void); +static void CB2_SaveFailedScreen(void); +static void CB2_WipeSave(void); +static void CB2_GameplayCannotBeContinued(void); +static void CB2_FadeAndReturnToTitleScreen(void); +static void CB2_ReturnToTitleScreen(void); +static void VBlankCB_UpdateClockGraphics(void); +static bool8 VerifySectorWipe(u16 sector); +static bool8 WipeSector(u16 sector); +static bool8 WipeSectors(u32 sectorBits); + +void DoSaveFailedScreen(u8 saveType) +{ + SetMainCallback2(CB2_SaveFailedScreen); + gSaveFailedType = saveType; + gSaveFailedClockInfo[0] = FALSE; +} + +static void VBlankCB(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void CB2_SaveFailedScreen(void) +{ + u16 ime; + + switch (gMain.state) + { + case 0: + default: + SetVBlankCallback(0); + REG_DISPCNT = 0; + REG_BG3CNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT, PLTT_SIZE); + LZ77UnCompVram(&gBirchHelpGfx, (void *)VRAM); + LZ77UnCompVram(&gBirchBagTilemap, (void *)(VRAM + 0x3000)); + LZ77UnCompVram(&gBirchGrassTilemap, (void *)(VRAM + 0x3800)); + LZ77UnCompVram(&gSaveFailedClockGfx, (void *)(VRAM + 0x10020)); + ResetSpriteData(); + ResetTasks(); + ResetPaletteFade(); + LoadPalette(&gBirchBagGrassPal, 0, sizeof(gBirchBagGrassPal)); + LoadPalette(&gSaveFailedClockPal, 0x100, sizeof(gSaveFailedClockPal)); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + MenuDrawTextWindow(13, CLOCK_WIN_TOP, 16, CLOCK_WIN_TOP + 3); // clock window + MenuDrawTextWindow(1, MSG_WIN_TOP, 28, 19); // message window + MenuPrint(gSystemText_SaveFailedBackupCheck, 2, MSG_WIN_TOP + 1); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + ime = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = ime; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + SetVBlankCallback(VBlankCB); + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG3_ON | DISPCNT_BG2_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_MODE_0; + gMain.state++; + break; + case 1: + if (!UpdatePaletteFade()) + { + SetMainCallback2(CB2_WipeSave); + SetVBlankCallback(VBlankCB_UpdateClockGraphics); + } + break; + } +} + +static void CB2_WipeSave(void) +{ + u8 wipeTries = 0; + + gSaveFailedClockInfo[0] = TRUE; + + while (gDamagedSaveSectors != 0 && wipeTries < 3) // while there are still attempts left, keep trying to fix the save sectors. + { + if (WipeSectors(gDamagedSaveSectors) != FALSE) + { + MenuDrawTextWindow(1, MSG_WIN_TOP, 28, 19); + MenuPrint(gSystemText_BackupDamagedGameContinue, 2, MSG_WIN_TOP + 1); + SetMainCallback2(CB2_GameplayCannotBeContinued); + return; + } + + MenuDrawTextWindow(1, MSG_WIN_TOP, 28, 19); + MenuPrint(gSystemText_CheckCompleteSaveAttempt, 2, MSG_WIN_TOP + 1); + HandleSavingData(gSaveFailedType); + + if (gDamagedSaveSectors != 0) + { +#ifdef BUGFIX_SAVEFAILEDSCREEN2 + MenuDrawTextWindow(1, MSG_WIN_TOP, 28, 19); +#endif + MenuPrint(gSystemText_SaveFailedBackupCheck, 2, MSG_WIN_TOP + 1); + } + + wipeTries++; + } + + if (wipeTries == 3) + { + MenuDrawTextWindow(1, MSG_WIN_TOP, 28, 19); + MenuPrint(gSystemText_BackupDamagedGameContinue, 2, MSG_WIN_TOP + 1); + SetMainCallback2(CB2_FadeAndReturnToTitleScreen); // called again below + } + else + { + MenuDrawTextWindow(1, MSG_WIN_TOP, 28, 19); + + // no callback exists, so the game cannot continue. + if (gGameContinueCallback == 0) + MenuPrint(gSystemText_SaveCompletedGameEnd, 2, MSG_WIN_TOP + 1); + else // callback exists, so continue + MenuPrint(gSystemText_SaveCompletedPressA, 2, MSG_WIN_TOP + 1); + } + + SetMainCallback2(CB2_FadeAndReturnToTitleScreen); +} + +static void CB2_GameplayCannotBeContinued(void) +{ + gSaveFailedClockInfo[0] = FALSE; + + if (gMain.newKeys & A_BUTTON) + { + MenuDrawTextWindow(1, MSG_WIN_TOP, 28, 19); + MenuPrint(gSystemText_GameplayEnded, 2, MSG_WIN_TOP + 1); + SetVBlankCallback(VBlankCB); + SetMainCallback2(CB2_FadeAndReturnToTitleScreen); + } +} + +static void CB2_FadeAndReturnToTitleScreen(void) +{ + gSaveFailedClockInfo[0] = FALSE; + + if (gMain.newKeys & A_BUTTON) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + SetVBlankCallback(VBlankCB); + SetMainCallback2(CB2_ReturnToTitleScreen); + } +} + +static void CB2_ReturnToTitleScreen(void) +{ + if (!UpdatePaletteFade()) + { + if (gGameContinueCallback == 0) // no callback exists, so do a soft reset. + { + DoSoftReset(); + } + else + { + SetMainCallback2((MainCallback)gGameContinueCallback); + gGameContinueCallback = 0; + } + } +} + +static void VBlankCB_UpdateClockGraphics(void) +{ + unsigned int n = (gMain.vblankCounter2 >> 3) & 7; + + gMain.oamBuffer[0] = sClockOamData; + gMain.oamBuffer[0].x = 112; + gMain.oamBuffer[0].y = (CLOCK_WIN_TOP + 1) * 8; + + if (gSaveFailedClockInfo[0] != FALSE) + { + gMain.oamBuffer[0].tileNum = sClockFrames[n][0]; + gMain.oamBuffer[0].matrixNum = (sClockFrames[n][2] << 4) | (sClockFrames[n][1] << 3); + } + else + { + gMain.oamBuffer[0].tileNum = 1; + } + + CpuFastCopy(gMain.oamBuffer, (void *)OAM, 4); + + if (gSaveFailedClockInfo[1]) // maybe was used for debugging? + gSaveFailedClockInfo[1]--; +} + +static bool8 VerifySectorWipe(u16 sector) +{ + u32 *ptr = (u32 *)unk_2000000; + u16 i; + + ReadFlash(sector, 0, (u8 *)ptr, 4096); + + for (i = 0; i < 0x400; i++, ptr++) + if (*ptr) + return TRUE; + + return FALSE; +} + +static bool8 WipeSector(u16 sector) +{ + u16 i, j; + bool8 failed = TRUE; + + for (i = 0; failed && i < 130; i++) + { + for (j = 0; j < 0x1000; j++) + ProgramFlashByte(sector, j, 0); + + failed = VerifySectorWipe(sector); + } + + return failed; +} + +static bool8 WipeSectors(u32 sectorBits) +{ + u16 i; + + for (i = 0; i < 0x20; i++) + if ((sectorBits & (1 << i)) && !WipeSector(i)) + sectorBits &= ~(1 << i); + + if (sectorBits == 0) + return FALSE; + else + return TRUE; +} diff --git a/src/engine/save_menu_util.c b/src/engine/save_menu_util.c new file mode 100644 index 000000000..a2d17bd36 --- /dev/null +++ b/src/engine/save_menu_util.c @@ -0,0 +1,148 @@ +#include "global.h" +#include "save_menu_util.h" +#include "event_data.h" +#include "menu.h" +#include "pokedex.h" +#include "region_map.h" +#include "string_util.h" +#include "strings2.h" + +void HandleDrawSaveWindowInfo(s16 left, s16 top) +{ + u32 width = 12; + + // old handle for setting window width? + if (IsResizeSaveWindowEnabled()) + width = 13; + + if (FlagGet(SYS_POKEDEX_GET)) + { + // print info + dex information. + MenuDrawTextWindow(left, top, left + width, top + 11); + PrintSaveMapName(++left, ++top); // MAP NAME + PrintSavePlayerName(left, top + 2); // PLAYER + PrintSaveBadges(left, top + 4); // BADGES + PrintSavePokedexCount(left, top + 6); // POKEDEX + PrintSavePlayTime(left, top + 8); // PLAY TIME + } + else + { + // print everything besides dex. + MenuDrawTextWindow(left, top, left + width, top + 9); + PrintSaveMapName(++left, ++top); // MAP NAME + PrintSavePlayerName(left, top + 2); // PLAYER + PrintSaveBadges(left, top + 4); // BADGES + PrintSavePlayTime(left, top + 6); // PLAY TIME + } +} + +void HandleCloseSaveWindow(u16 left, u16 top) +{ + u32 width = 12; + + // old handle for setting window width? + if (IsResizeSaveWindowEnabled()) + width = 13; + + if (FlagGet(SYS_POKEDEX_GET)) + MenuZeroFillWindowRect(left, top, left + width, top + 11); + else + MenuZeroFillWindowRect(left, top, left + width, top + 9); +} + +/* +theory: This function was used to handle the save menu window's width being auto sized from +either 12 or 13 in an older source. Whatever was here might have either been optimized out by +GF's compiler or was dummied out to always return a TRUE at some point. +*/ +u8 IsResizeSaveWindowEnabled(void) // i don't know what else to name it.. +{ + return TRUE; +} + +void PrintSavePlayerName(s16 x, s16 y) +{ + MenuPrint(gOtherText_Player, x, y); + MenuPrint_RightAligned(gSaveBlock2.playerName, x + 12, y); +} + +void PrintSaveMapName(s16 x, s16 y) +{ + char name[32]; + + CopyMapName(name, gMapHeader.regionMapSectionId); + MenuPrint(name, x, y); +} + +void PrintSaveBadges(s16 x, s16 y) +{ + char badges[16]; + + MenuPrint(gOtherText_Badges, x, y); + ConvertIntToDecimalString(badges, GetBadgeCount()); + MenuPrint_RightAligned(badges, x + 12, y); +} + +void PrintSavePokedexCount(s16 x, s16 y) +{ + char pokedex[16]; + + MenuPrint(gOtherText_Pokedex, x, y); + ConvertIntToDecimalStringN(pokedex, GetPokedexSeenCount(), 1, 3); + MenuPrint_RightAligned(pokedex, x + 12, y); +} + +void PrintSavePlayTime(s16 x, s16 y) +{ + char playtime[16]; + + MenuPrint(gOtherText_PlayTime, x, y); + FormatPlayTime(playtime, gSaveBlock2.playTimeHours, gSaveBlock2.playTimeMinutes, 1); + MenuPrint_RightAligned(playtime, x + 12, y); +} + +u8 GetBadgeCount(void) +{ + u8 badgeCount = 0; + int badgeFlag; + + for (badgeFlag = BADGE01_GET; badgeFlag <= BADGE08_GET; badgeFlag++) + if (FlagGet(badgeFlag)) + badgeCount++; + + return badgeCount; +} + +u16 GetPokedexSeenCount() +{ + u16 pokedexSeenCount; + + if (IsNationalPokedexEnabled()) + pokedexSeenCount = GetNationalPokedexCount(1); + else + pokedexSeenCount = GetHoennPokedexCount(1); + + return pokedexSeenCount; +} + +void FormatPlayTime(char *playtime, u16 hours, u16 minutes, u16 unk) +{ + s16 colon = unk; + playtime = ConvertIntToDecimalString(playtime, hours); + + // playtime[0] is hours. + // playtime[1] is the character to render between hours and minutes. + // playtime[2] is minutes. + + playtime[0] = 0; + + if (colon) + playtime[1] = 0xF0; // set middle character to ":" + else + playtime[1] = 0; + + playtime[2] = 0; + playtime += 3; + + ConvertIntToDecimalStringN(playtime, minutes, 2, 2); +} diff --git a/src/engine/script.c b/src/engine/script.c new file mode 100644 index 000000000..8f12da437 --- /dev/null +++ b/src/engine/script.c @@ -0,0 +1,368 @@ +#include "global.h" +#include "script.h" +#include "event_data.h" + +#define RAM_SCRIPT_MAGIC 51 + +EWRAM_DATA u8 *gUnknown_0202E8AC = NULL; + +static u8 sScriptContext1Status; +static struct ScriptContext sScriptContext1; +static struct ScriptContext sScriptContext2; +static bool8 sScriptContext2Enabled; + +extern ScrCmdFunc gScriptCmdTable[]; +extern ScrCmdFunc gScriptCmdTableEnd[]; +extern void *gNullScriptPtr; + +void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTableEnd) +{ + s32 i; + + ctx->mode = 0; + ctx->scriptPtr = 0; + ctx->stackDepth = 0; + ctx->nativePtr = 0; + ctx->cmdTable = cmdTable; + ctx->cmdTableEnd = cmdTableEnd; + + for (i = 0; i < 4; i++) + ctx->data[i] = 0; + + for (i = 0; i < 20; i++) + ctx->stack[i] = 0; +} + +u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr) +{ + ctx->scriptPtr = ptr; + ctx->mode = 1; + return 1; +} + +void SetupNativeScript(struct ScriptContext *ctx, void *ptr) +{ + ctx->mode = 2; + ctx->nativePtr = ptr; +} + +void StopScript(struct ScriptContext *ctx) +{ + ctx->mode = 0; + ctx->scriptPtr = 0; +} + +u8 RunScriptCommand(struct ScriptContext *ctx) +{ + if (ctx->mode == 0) + return 0; + + switch (ctx->mode) + { + case 0: + return 0; + case 2: + if (ctx->nativePtr) + { + if (ctx->nativePtr() == 1) + ctx->mode = 1; + return 1; + } + ctx->mode = 1; + case 1: + while (1) + { + u8 cmdCode; + ScrCmdFunc *func; + + if (!ctx->scriptPtr) + { + ctx->mode = 0; + return 0; + } + + if (ctx->scriptPtr == gNullScriptPtr) + { + while (1) + asm("svc 2"); // HALT + } + + cmdCode = *(ctx->scriptPtr); + ctx->scriptPtr++; + func = &ctx->cmdTable[cmdCode]; + + if (func >= ctx->cmdTableEnd) + { + ctx->mode = 0; + return 0; + } + + if ((*func)(ctx) == 1) + return 1; + } + } + + return 1; +} + +u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr) +{ + if (ctx->stackDepth + 1 >= 20) + { + return 1; + } + else + { + ctx->stack[ctx->stackDepth] = ptr; + ctx->stackDepth++; + return 0; + } +} + +const u8 *ScriptPop(struct ScriptContext *ctx) +{ + if (ctx->stackDepth == 0) + return NULL; + + ctx->stackDepth--; + return ctx->stack[ctx->stackDepth]; +} + +void ScriptJump(struct ScriptContext *ctx, u8 *ptr) +{ + ctx->scriptPtr = ptr; +} + +void ScriptCall(struct ScriptContext *ctx, u8 *ptr) +{ + ScriptPush(ctx, ctx->scriptPtr); + ctx->scriptPtr = ptr; +} + +void ScriptReturn(struct ScriptContext *ctx) +{ + ctx->scriptPtr = ScriptPop(ctx); +} + +u16 ScriptReadHalfword(struct ScriptContext *ctx) +{ + u16 value = *(ctx->scriptPtr++); + value |= *(ctx->scriptPtr++) << 8; + return value; +} + +u32 ScriptReadWord(struct ScriptContext *ctx) +{ + u32 value0 = *(ctx->scriptPtr++); + u32 value1 = *(ctx->scriptPtr++); + u32 value2 = *(ctx->scriptPtr++); + u32 value3 = *(ctx->scriptPtr++); + return (((((value3 << 8) + value2) << 8) + value1) << 8) + value0; +} + +void ScriptContext2_Enable(void) +{ + sScriptContext2Enabled = TRUE; +} + +void ScriptContext2_Disable(void) +{ + sScriptContext2Enabled = FALSE; +} + +bool8 ScriptContext2_IsEnabled(void) +{ + return sScriptContext2Enabled; +} + +void ScriptContext1_Init(void) +{ + InitScriptContext(&sScriptContext1, gScriptCmdTable, gScriptCmdTableEnd); + sScriptContext1Status = 2; +} + +bool8 ScriptContext2_RunScript(void) +{ + if (sScriptContext1Status == 2) + return 0; + + if (sScriptContext1Status == 1) + return 0; + + ScriptContext2_Enable(); + + if (!RunScriptCommand(&sScriptContext1)) + { + sScriptContext1Status = 2; + ScriptContext2_Disable(); + return 0; + } + + return 1; +} + +void ScriptContext1_SetupScript(const u8 *ptr) +{ + InitScriptContext(&sScriptContext1, gScriptCmdTable, gScriptCmdTableEnd); + SetupBytecodeScript(&sScriptContext1, ptr); + ScriptContext2_Enable(); + sScriptContext1Status = 0; +} + +void ScriptContext1_Stop(void) +{ + sScriptContext1Status = 1; +} + +void EnableBothScriptContexts() +{ + sScriptContext1Status = 0; + ScriptContext2_Enable(); +} + +void ScriptContext2_RunNewScript(const u8 *ptr) +{ + InitScriptContext(&sScriptContext2, &gScriptCmdTable, &gScriptCmdTableEnd); + SetupBytecodeScript(&sScriptContext2, ptr); + while (RunScriptCommand(&sScriptContext2) == 1) + ; +} + +u8 *mapheader_get_tagged_pointer(u8 tag) +{ + u8 *mapScripts = gMapHeader.mapScripts; + + if (!mapScripts) + return NULL; + + while (1) + { + if (!*mapScripts) + return NULL; + if (*mapScripts == tag) + { + mapScripts++; + return (u8 *)(mapScripts[0] + (mapScripts[1] << 8) + (mapScripts[2] << 16) + (mapScripts[3] << 24)); + } + mapScripts += 5; + } +} + +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) +{ + u8 *ptr = mapheader_get_tagged_pointer(tag); + + if (!ptr) + return NULL; + + while (1) + { + u16 varIndex1; + u16 varIndex2; + varIndex1 = ptr[0] | (ptr[1] << 8); + if (!varIndex1) + return NULL; + ptr += 2; + varIndex2 = ptr[0] | (ptr[1] << 8); + ptr += 2; + if (VarGet(varIndex1) == VarGet(varIndex2)) + return (u8 *)(ptr[0] + (ptr[1] << 8) + (ptr[2] << 16) + (ptr[3] << 24)); + ptr += 4; + } +} + +void mapheader_run_script_with_tag_x1(void) +{ + mapheader_run_script_by_tag(1); +} + +void mapheader_run_script_with_tag_x3(void) +{ + mapheader_run_script_by_tag(3); +} + +void mapheader_run_script_with_tag_x5(void) +{ + mapheader_run_script_by_tag(5); +} + +void mapheader_run_script_with_tag_x6(void) +{ + mapheader_run_script_by_tag(6); +} + +bool8 mapheader_run_first_tag2_script_list_match(void) +{ + u8 *ptr = mapheader_get_first_match_from_tagged_ptr_list(2); + + if (!ptr) + return 0; + + ScriptContext1_SetupScript(ptr); + return 1; +} + +void mapheader_run_first_tag4_script_list_match(void) +{ + u8 *ptr = mapheader_get_first_match_from_tagged_ptr_list(4); + if (ptr) + ScriptContext2_RunNewScript(ptr); +} + +u32 CalculateRamScriptChecksum(void) +{ + u32 i; + u32 sum = 0; + for (i = 0; i < sizeof(struct RamScriptData); i++) + sum += ((u8 *)&gSaveBlock1.ramScript.data)[i]; + return sum; +} + +void ClearRamScript(void) +{ + CpuFill32(0, &gSaveBlock1.ramScript, sizeof(struct RamScript)); +} + +bool8 InitRamScript(u8 *script, u16 scriptSize, u8 mapGroup, u8 mapNum, u8 objectId) +{ + struct RamScriptData *scriptData = &gSaveBlock1.ramScript.data; + + ClearRamScript(); + + if (scriptSize > sizeof(scriptData->script)) + return FALSE; + + scriptData->magic = RAM_SCRIPT_MAGIC; + scriptData->mapGroup = mapGroup; + scriptData->mapNum = mapNum; + scriptData->objectId = objectId; + memcpy(scriptData->script, script, scriptSize); + gSaveBlock1.ramScript.checksum = CalculateRamScriptChecksum(); + return TRUE; +} + +u8 *GetRamScript(u8 objectId, u8 *script) +{ + struct RamScriptData *scriptData = &gSaveBlock1.ramScript.data; + gUnknown_0202E8AC = 0; + if (scriptData->magic == RAM_SCRIPT_MAGIC + && scriptData->mapGroup == gSaveBlock1.location.mapGroup + && scriptData->mapNum == gSaveBlock1.location.mapNum + && scriptData->objectId == objectId) + { + if (CalculateRamScriptChecksum() == gSaveBlock1.ramScript.checksum) + { + gUnknown_0202E8AC = script; + return scriptData->script; + } + ClearRamScript(); + } + return script; +} diff --git a/src/engine/siirtc.c b/src/engine/siirtc.c new file mode 100644 index 000000000..965a068f1 --- /dev/null +++ b/src/engine/siirtc.c @@ -0,0 +1,432 @@ +// Ruby/Sapphire/Emerald cartridges contain a Seiko Instruments Inc. (SII) +// S-3511A real-time clock (RTC). This library ("SIIRTC_V001") is for +// communicating with the RTC. + +#include "gba/gba.h" +#include "siirtc.h" + +#define STATUS_INTFE 0x02 // frequency interrupt enable +#define STATUS_INTME 0x08 // per-minute interrupt enable +#define STATUS_INTAE 0x20 // alarm interrupt enable +#define STATUS_24HOUR 0x40 // 0: 12-hour mode, 1: 24-hour mode +#define STATUS_POWER 0x80 // power on or power failure occurred + +#define TEST_MODE 0x80 // flag in the "second" byte + +#define ALARM_AM 0x00 +#define ALARM_PM 0x80 + +#define OFFSET_YEAR offsetof(struct SiiRtcInfo, year) +#define OFFSET_MONTH offsetof(struct SiiRtcInfo, month) +#define OFFSET_DAY offsetof(struct SiiRtcInfo, day) +#define OFFSET_DAY_OF_WEEK offsetof(struct SiiRtcInfo, dayOfWeek) +#define OFFSET_HOUR offsetof(struct SiiRtcInfo, hour) +#define OFFSET_MINUTE offsetof(struct SiiRtcInfo, minute) +#define OFFSET_SECOND offsetof(struct SiiRtcInfo, second) +#define OFFSET_STATUS offsetof(struct SiiRtcInfo, status) +#define OFFSET_ALARM_HOUR offsetof(struct SiiRtcInfo, alarmHour) +#define OFFSET_ALARM_MINUTE offsetof(struct SiiRtcInfo, alarmMinute) + +#define INFO_BUF(info, index) (*((u8 *)(info) + (index))) + +#define DATETIME_BUF(info, index) INFO_BUF(info, OFFSET_YEAR + index) +#define DATETIME_BUF_LEN (OFFSET_SECOND - OFFSET_YEAR + 1) + +#define TIME_BUF(info, index) INFO_BUF(info, OFFSET_HOUR + index) +#define TIME_BUF_LEN (OFFSET_SECOND - OFFSET_HOUR + 1) + +#define WR 0 // command for writing data +#define RD 1 // command for reading data + +#define CMD(n) (0x60 | (n << 1)) + +#define CMD_RESET CMD(0) +#define CMD_STATUS CMD(1) +#define CMD_DATETIME CMD(2) +#define CMD_TIME CMD(3) +#define CMD_ALARM CMD(4) + +#define GPIO_PORT_DATA (*(vu16 *)0x80000C4) +#define GPIO_PORT_DIRECTION (*(vu16 *)0x80000C6) +#define GPIO_PORT_READ_ENABLE (*(vu16 *)0x80000C8) + +extern vu16 GPIOPortDirection; + +static u16 sDummy; // unused variable +static bool8 sLocked; + +static int WriteCommand(u8 value); +static int WriteData(u8 value); +static u8 ReadData(); +static void EnableGpioPortRead(); +static void DisableGpioPortRead(); + +static const char AgbLibRtcVersion[] = "SIIRTC_V001"; + +void SiiRtcUnprotect() +{ + EnableGpioPortRead(); + sLocked = FALSE; +} + +void SiiRtcProtect() +{ + DisableGpioPortRead(); + sLocked = TRUE; +} + +u8 SiiRtcProbe() +{ + u8 errorCode; + struct SiiRtcInfo rtc; + + if (!SiiRtcGetStatus(&rtc)) + return 0; + + errorCode = 0; + + if ((rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == SIIRTCINFO_POWER + || (rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == 0) + { + // The RTC is in 12-hour mode. Reset it and switch to 24-hour mode. + + // Note that the conditions are redundant and equivalent to simply + // "(rtc.status & SIIRTCINFO_24HOUR) == 0". It's possible that this + // was also intended to handle resetting the clock after power failure + // but a mistake was made. + + if (!SiiRtcReset()) + return 0; + + errorCode++; + } + + SiiRtcGetTime(&rtc); + + if (rtc.second & TEST_MODE) + { + // The RTC is in test mode. Reset it to leave test mode. + + if (!SiiRtcReset()) + return (errorCode << 4) & 0xF0; + + errorCode++; + } + + return (errorCode << 4) | 1; +} + +bool8 SiiRtcReset() +{ + u8 result; + struct SiiRtcInfo rtc; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_RESET | WR); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + rtc.status = SIIRTCINFO_24HOUR; + + result = SiiRtcSetStatus(&rtc); + + return result; +} + +bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc) +{ + u8 statusData; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_STATUS | RD); + + GPIO_PORT_DIRECTION = 5; + + statusData = ReadData(); + + rtc->status = (statusData & (STATUS_POWER | STATUS_24HOUR)) + | ((statusData & STATUS_INTAE) >> 3) + | ((statusData & STATUS_INTME) >> 2) + | ((statusData & STATUS_INTFE) >> 1); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc) +{ + u8 statusData; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + statusData = STATUS_24HOUR + | ((rtc->status & SIIRTCINFO_INTAE) << 3) + | ((rtc->status & SIIRTCINFO_INTME) << 2) + | ((rtc->status & SIIRTCINFO_INTFE) << 1); + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_STATUS | WR); + + WriteData(statusData); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc) +{ + u8 i; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_DATETIME | RD); + + GPIO_PORT_DIRECTION = 5; + + for (i = 0; i < DATETIME_BUF_LEN; i++) + DATETIME_BUF(rtc, i) = ReadData(); + + INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc) +{ + u8 i; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_DATETIME | WR); + + for (i = 0; i < DATETIME_BUF_LEN; i++) + WriteData(DATETIME_BUF(rtc, i)); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc) +{ + u8 i; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_TIME | RD); + + GPIO_PORT_DIRECTION = 5; + + for (i = 0; i < TIME_BUF_LEN; i++) + TIME_BUF(rtc, i) = ReadData(); + + INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc) +{ + u8 i; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_TIME | WR); + + for (i = 0; i < TIME_BUF_LEN; i++) + WriteData(TIME_BUF(rtc, i)); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc) +{ + u8 i; + u8 alarmData[2]; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + // Decode BCD. + alarmData[0] = (rtc->alarmHour & 0xF) + 10 * ((rtc->alarmHour >> 4) & 0xF); + + // The AM/PM flag must be set correctly even in 24-hour mode. + + if (alarmData[0] < 12) + alarmData[0] = rtc->alarmHour | ALARM_AM; + else + alarmData[0] = rtc->alarmHour | ALARM_PM; + + alarmData[1] = rtc->alarmMinute; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIOPortDirection = 7; // Why is this the only instance that uses a symbol? + + WriteCommand(CMD_ALARM | WR); + + for (i = 0; i < 2; i++) + WriteData(alarmData[i]); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +static int WriteCommand(u8 value) +{ + u8 i; + u8 temp; + + for (i = 0; i < 8; i++) + { + temp = ((value >> (7 - i)) & 1); + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 5; + } + + // control reaches end of non-void function +} + +static int WriteData(u8 value) +{ + u8 i; + u8 temp; + + for (i = 0; i < 8; i++) + { + temp = ((value >> i) & 1); + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 5; + } + + // control reaches end of non-void function +} + +static u8 ReadData() +{ + u8 i; + u8 temp; + u8 value; + + for (i = 0; i < 8; i++) + { + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 5; + + temp = ((GPIO_PORT_DATA & 2) >> 1); + value = (value >> 1) | (temp << 7); // UB: accessing uninitialized var + } + + return value; +} + +static void EnableGpioPortRead() +{ + GPIO_PORT_READ_ENABLE = 1; +} + +static void DisableGpioPortRead() +{ + GPIO_PORT_READ_ENABLE = 0; +} diff --git a/src/engine/sound.c b/src/engine/sound.c new file mode 100644 index 000000000..8d23b7d7a --- /dev/null +++ b/src/engine/sound.c @@ -0,0 +1,585 @@ +#include "global.h" +#include "gba/m4a_internal.h" +#include "sound.h" +#include "battle.h" +#include "m4a.h" +#include "main.h" +#include "songs.h" +#include "task.h" + +struct Fanfare +{ + u16 songNum; + u16 duration; +}; + +// FIXME: different prototype than definition +u32 SpeciesToCryId(u32); + +extern u16 gBattleTypeFlags; + +static EWRAM_DATA struct MusicPlayerInfo *gMPlay_PokemonCry = NULL; +static EWRAM_DATA u8 gPokemonCryBGMDuckingCounter = 0; + +static u16 sCurrentMapMusic; +static u16 sNextMapMusic; +static u8 sMapMusicState; +static u8 sMapMusicFadeInSpeed; +static u16 sFanfareCounter; + +bool8 gDisableMusic; + +extern struct MusicPlayerInfo gMPlay_BGM; +extern struct MusicPlayerInfo gMPlay_SE1; +extern struct MusicPlayerInfo gMPlay_SE2; +extern struct MusicPlayerInfo gMPlay_SE3; + +extern struct ToneData voicegroup_8452590[]; +extern struct ToneData voicegroup_8452B90[]; +extern struct ToneData voicegroup_8453190[]; +extern struct ToneData voicegroup_8453790[]; + +extern struct ToneData voicegroup_84537C0[]; +extern struct ToneData voicegroup_8453DC0[]; +extern struct ToneData voicegroup_84543C0[]; +extern struct ToneData voicegroup_84549C0[]; + +static const struct Fanfare sFanfares[] = +{ + { BGM_FANFA1, 80 }, + { BGM_FANFA4, 160 }, + { BGM_FANFA5, 220 }, + { BGM_ME_WAZA, 220 }, + { BGM_ME_ASA, 160 }, + { BGM_ME_BACHI, 340 }, + { BGM_ME_WASURE, 180 }, + { BGM_ME_KINOMI, 120 }, + { BGM_ME_TAMA, 710 }, + { BGM_ME_B_BIG, 250 }, + { BGM_ME_B_SMALL, 150 }, + { BGM_ME_ZANNEN, 160 }, +}; + +static void Task_Fanfare(u8 taskId); +static void CreateFanfareTask(void); +static void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode); +static void Task_DuckBGMForPokemonCry(u8 taskId); +static void RestoreBGMVolumeAfterPokemonCry(void); + +void InitMapMusic(void) +{ + gDisableMusic = FALSE; + ResetMapMusic(); +} + +void MapMusicMain(void) +{ + switch (sMapMusicState) + { + case 0: + break; + case 1: + sMapMusicState = 2; + PlayBGM(sCurrentMapMusic); + break; + case 2: + case 3: + case 4: + break; + case 5: + if (IsBGMStopped()) + { + sNextMapMusic = 0; + sMapMusicState = 0; + } + break; + case 6: + if (IsBGMStopped() && IsFanfareTaskInactive()) + { + sCurrentMapMusic = sNextMapMusic; + sNextMapMusic = 0; + sMapMusicState = 2; + PlayBGM(sCurrentMapMusic); + } + break; + case 7: + if (IsBGMStopped() && IsFanfareTaskInactive()) + { + FadeInNewBGM(sNextMapMusic, sMapMusicFadeInSpeed); + sCurrentMapMusic = sNextMapMusic; + sNextMapMusic = 0; + sMapMusicState = 2; + sMapMusicFadeInSpeed = 0; + } + break; + } +} + +void ResetMapMusic(void) +{ + sCurrentMapMusic = 0; + sNextMapMusic = 0; + sMapMusicState = 0; + sMapMusicFadeInSpeed = 0; +} + +u16 GetCurrentMapMusic(void) +{ + return sCurrentMapMusic; +} + +void PlayNewMapMusic(u16 songNum) +{ + sCurrentMapMusic = songNum; + sNextMapMusic = 0; + sMapMusicState = 1; +} + +void StopMapMusic(void) +{ + sCurrentMapMusic = 0; + sNextMapMusic = 0; + sMapMusicState = 1; +} + +void FadeOutMapMusic(u8 speed) +{ + if (IsNotWaitingForBGMStop()) + FadeOutBGM(speed); + sCurrentMapMusic = 0; + sNextMapMusic = 0; + sMapMusicState = 5; +} + +void FadeOutAndPlayNewMapMusic(u16 songNum, u8 speed) +{ + FadeOutMapMusic(speed); + sCurrentMapMusic = 0; + sNextMapMusic = songNum; + sMapMusicState = 6; +} + +void FadeOutAndFadeInNewMapMusic(u16 songNum, u8 fadeOutSpeed, u8 fadeInSpeed) +{ + FadeOutMapMusic(fadeOutSpeed); + sCurrentMapMusic = 0; + sNextMapMusic = songNum; + sMapMusicState = 7; + sMapMusicFadeInSpeed = fadeInSpeed; +} + +void FadeInNewMapMusic(u16 songNum, u8 speed) +{ + FadeInNewBGM(songNum, speed); + sCurrentMapMusic = songNum; + sNextMapMusic = 0; + sMapMusicState = 2; + sMapMusicFadeInSpeed = 0; +} + +bool8 IsNotWaitingForBGMStop(void) +{ + if (sMapMusicState == 6) + return FALSE; + if (sMapMusicState == 5) + return FALSE; + if (sMapMusicState == 7) + return FALSE; + return TRUE; +} + +void PlayFanfareByFanfareNum(u8 fanfareNum) +{ + u16 songNum; + m4aMPlayStop(&gMPlay_BGM); + songNum = sFanfares[fanfareNum].songNum; + sFanfareCounter = sFanfares[fanfareNum].duration; + m4aSongNumStart(songNum); +} + +bool8 WaitFanfare(bool8 stop) +{ + if (sFanfareCounter) + { + sFanfareCounter--; + return FALSE; + } + else + { + if (!stop) + m4aMPlayContinue(&gMPlay_BGM); + else + m4aSongNumStart(SE_STOP); + + return TRUE; + } +} + +void StopFanfareByFanfareNum(u8 fanfareNum) +{ + m4aSongNumStop(sFanfares[fanfareNum].songNum); +} + +void PlayFanfare(u16 songNum) +{ + s32 i; + for (i = 0; (u32)i < 12; i++) + { + if (sFanfares[i].songNum == songNum) + { + PlayFanfareByFanfareNum(i); + CreateFanfareTask(); + return; + } + } + + PlayFanfareByFanfareNum(0); + CreateFanfareTask(); +} + +bool8 IsFanfareTaskInactive(void) +{ + if (FuncIsActiveTask(Task_Fanfare) == TRUE) + return FALSE; + return TRUE; +} + +static void Task_Fanfare(u8 taskId) +{ + if (sFanfareCounter) + { + sFanfareCounter--; + } + else + { + m4aMPlayContinue(&gMPlay_BGM); + DestroyTask(taskId); + } +} + +static void CreateFanfareTask(void) +{ + if (FuncIsActiveTask(Task_Fanfare) != TRUE) + CreateTask(Task_Fanfare, 80); +} + +void FadeInNewBGM(u16 songNum, u8 speed) +{ + if (gDisableMusic) + songNum = 0; + m4aSongNumStart(songNum); + m4aMPlayImmInit(&gMPlay_BGM); + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0); + m4aSongNumStop(songNum); + m4aMPlayFadeIn(&gMPlay_BGM, speed); +} + +void FadeOutBGMTemporarily(u8 speed) +{ + m4aMPlayFadeOutTemporarily(&gMPlay_BGM, speed); +} + +bool8 IsBGMPausedOrStopped(void) +{ + if (gMPlay_BGM.status & MUSICPLAYER_STATUS_PAUSE) + return TRUE; + if (!(gMPlay_BGM.status & MUSICPLAYER_STATUS_TRACK)) + return TRUE; + return FALSE; +} + +void FadeInBGM(u8 speed) +{ + m4aMPlayFadeIn(&gMPlay_BGM, speed); +} + +void FadeOutBGM(u8 speed) +{ + m4aMPlayFadeOut(&gMPlay_BGM, speed); +} + +bool8 IsBGMStopped(void) +{ + if (!(gMPlay_BGM.status & MUSICPLAYER_STATUS_TRACK)) + return TRUE; + return FALSE; +} + +void PlayCry1(u16 species, s8 pan) +{ + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85); + PlayCryInternal(species, pan, 125, 10, 0); + gPokemonCryBGMDuckingCounter = 2; + RestoreBGMVolumeAfterPokemonCry(); +} + +void PlayCry2(u16 species, s8 pan, s8 volume, u8 priority) +{ + PlayCryInternal(species, pan, volume, priority, 0); +} + +void PlayCry3(u16 species, s8 pan, u8 mode) +{ + if (mode == 1) + { + PlayCryInternal(species, pan, 125, 10, 1); + } + else + { + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85); + PlayCryInternal(species, pan, 125, 10, mode); + gPokemonCryBGMDuckingCounter = 2; + RestoreBGMVolumeAfterPokemonCry(); + } +} + +void PlayCry4(u16 species, s8 pan, u8 mode) +{ + if (mode == 1) + { + PlayCryInternal(species, pan, 125, 10, 1); + } + else + { + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85); + PlayCryInternal(species, pan, 125, 10, mode); + } +} + +void PlayCry5(u16 species, u8 mode) +{ + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85); + PlayCryInternal(species, 0, 125, 10, mode); + gPokemonCryBGMDuckingCounter = 2; + 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; + u32 release; + u32 length; + u32 pitch; + u32 chorus; + u32 index; + u8 table; + + species--; + + cryId = species; + + v0 = 0; + release = 0; + length = 140; + pitch = 15360; + chorus = 0; + + switch (mode) + { + case 0: + break; + case 1: + length = 20; + release = 225; + break; + case 2: + length = 30; + release = 225; + pitch = 15600; + chorus = 20; + volume = 80; + break; + case 3: + length = 50; + release = 200; + pitch = 14800; + break; + case 4: + length = 20; + release = 220; + pitch = 15800; + break; + case 5: + release = 200; + pitch = 14500; + break; + } + + SetPokemonCryVolume(volume); + SetPokemonCryPanpot(pan); + SetPokemonCryPitch(pitch); + SetPokemonCryLength(length); + SetPokemonCryProgress(0); + SetPokemonCryRelease(release); + SetPokemonCryChorus(chorus); + SetPokemonCryPriority(priority); + + asm(""); + asm(""); + asm(""); + asm(""); + asm(""); + asm(""); + asm(""); + + cryId = SpeciesToCryId(cryId); + index = 0x7F; + asm("" ::: "r0"); + index &= cryId; + table = cryId >> 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); + } +} + +bool8 IsCryFinished(void) +{ + if (FuncIsActiveTask(Task_DuckBGMForPokemonCry) == TRUE) + { + return FALSE; + } + else + { + ClearPokemonCrySongs(); + return TRUE; + } +} + +void StopCryAndClearCrySongs(void) +{ + m4aMPlayStop(gMPlay_PokemonCry); + ClearPokemonCrySongs(); +} + +void StopCry(void) +{ + m4aMPlayStop(gMPlay_PokemonCry); +} + +bool8 IsCryPlayingOrClearCrySongs(void) +{ + if (IsPokemonCryPlaying(gMPlay_PokemonCry)) + { + return TRUE; + } + else + { + ClearPokemonCrySongs(); + return FALSE; + } +} + +bool8 IsCryPlaying(void) +{ + if (IsPokemonCryPlaying(gMPlay_PokemonCry)) + return TRUE; + else + return FALSE; +} + +static void Task_DuckBGMForPokemonCry(u8 taskId) +{ + if (gPokemonCryBGMDuckingCounter) + { + gPokemonCryBGMDuckingCounter--; + return; + } + + if (!IsPokemonCryPlaying(gMPlay_PokemonCry)) + { + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); + DestroyTask(taskId); + } +} + +static void RestoreBGMVolumeAfterPokemonCry(void) +{ + if (FuncIsActiveTask(Task_DuckBGMForPokemonCry) != TRUE) + CreateTask(Task_DuckBGMForPokemonCry, 80); +} + +void PlayBGM(u16 songNum) +{ + if (gDisableMusic) + songNum = 0; + m4aSongNumStart(songNum); +} + +void PlaySE(u16 songNum) +{ + m4aSongNumStart(songNum); +} + +void PlaySE12WithPanning(u16 songNum, s8 pan) +{ + m4aSongNumStart(songNum); + m4aMPlayImmInit(&gMPlay_SE1); + m4aMPlayImmInit(&gMPlay_SE2); + m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, pan); + m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan); +} + +void PlaySE1WithPanning(u16 songNum, s8 pan) +{ + m4aSongNumStart(songNum); + m4aMPlayImmInit(&gMPlay_SE1); + m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, pan); +} + +void PlaySE2WithPanning(u16 songNum, s8 pan) +{ + m4aSongNumStart(songNum); + m4aMPlayImmInit(&gMPlay_SE2); + m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan); +} + +void SE12PanpotControl(s8 pan) +{ + m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, pan); + m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan); +} + +bool8 IsSEPlaying(void) +{ + if ((gMPlay_SE1.status & MUSICPLAYER_STATUS_PAUSE) && (gMPlay_SE2.status & MUSICPLAYER_STATUS_PAUSE)) + return FALSE; + if (!(gMPlay_SE1.status & MUSICPLAYER_STATUS_TRACK) && !(gMPlay_SE2.status & MUSICPLAYER_STATUS_TRACK)) + return FALSE; + return TRUE; +} + +bool8 IsBGMPlaying(void) +{ + if (gMPlay_BGM.status & MUSICPLAYER_STATUS_PAUSE) + return FALSE; + if (!(gMPlay_BGM.status & MUSICPLAYER_STATUS_TRACK)) + return FALSE; + return TRUE; +} + +bool8 IsSpecialSEPlaying(void) +{ + if (gMPlay_SE3.status & MUSICPLAYER_STATUS_PAUSE) + return FALSE; + if (!(gMPlay_SE3.status & MUSICPLAYER_STATUS_TRACK)) + return FALSE; + return TRUE; +} diff --git a/src/engine/sound_check_menu.c b/src/engine/sound_check_menu.c new file mode 100644 index 000000000..d97ae6d86 --- /dev/null +++ b/src/engine/sound_check_menu.c @@ -0,0 +1,2199 @@ +#include "global.h" +#include "sprite.h" +#include "palette.h" +#include "task.h" +#include "m4a.h" +#include "main.h" +#include "text.h" +#include "menu.h" +#include "songs.h" +#include "title_screen.h" +#include "sound.h" +#include "pokedex_cry_screen.h" + +// local task defines +#define WINDOW_SELECTED data[0] +#define BGM_INDEX data[1] +#define SE_INDEX data[2] +#define UNK_DATA3 data[3] +#define UNK_DATA4 data[4] +// data 5-7 are not used +// i dont have a define for data 8 yet because its used in a nonmatching and I can't be sure yet its actually used. + +// window selections +enum +{ + BGM_WINDOW, + SE_WINDOW +}; + +// driver test cry enums +enum +{ + CRY_TEST_UNK0, + CRY_TEST_VOLUME, + CRY_TEST_PANPOT, + CRY_TEST_PITCH, + CRY_TEST_LENGTH, + CRY_TEST_RELEASE, + CRY_TEST_PROGRESS, + CRY_TEST_CHORUS, + CRY_TEST_PRIORITY +}; + +// minmax range enums +enum +{ + MIN, + MAX +}; + +extern struct ToneData voicegroup_84537C0[]; +extern struct ToneData voicegroup_8452590[]; +extern struct ToneData voicegroup_8453DC0[]; +extern struct ToneData voicegroup_8452B90[]; +extern struct ToneData voicegroup_84543C0[]; +extern struct ToneData voicegroup_8453190[]; +extern struct ToneData voicegroup_84549C0[]; +extern struct ToneData voicegroup_8453790[]; + +static EWRAM_DATA u8 gUnknown_020387B0 = 0; +static EWRAM_DATA u8 gUnknown_020387B1 = 0; +static EWRAM_DATA u8 gUnknown_020387B2 = 0; +static EWRAM_DATA s8 gUnknown_020387B3 = 0; +static EWRAM_DATA int gUnknown_020387B4[9] = {0}; +static EWRAM_DATA u8 gUnknown_020387D8 = 0; +static EWRAM_DATA u8 gUnknown_020387D9 = 0; + +extern u16 gUnknown_03005D34; +extern u8 gUnknown_03005E98; + +struct MusicPlayerInfo *gUnknown_03005D30; + +extern struct MusicPlayerInfo gMPlay_BGM; + +void sub_80BA258(u8); +void sub_80BA384(u8); +void sub_80BA65C(u8); +void sub_80BA68C(u8); +void sub_80BA6B8(u8); +void sub_80BA700(u16, u16, u16); +void sub_80BA79C(const u8 *const, u16, u16); +void sub_80BA800(u8); +void sub_80BAA48(u8); +void sub_80BACDC(s8); +void sub_80BAD5C(void); +void sub_80BAE10(u8, u8); +void sub_80BAE78(int, u16, u16, u8); +void sub_80BAF84(u8); +void sub_80BB038(u8); +void sub_80BB1D4(void); +void sub_80BB25C(u8); +void sub_80BB3B4(u8); +void sub_80BB494(void); + +static const u8 gDebugText_SoundCheckJap[] = _("サウンドチェック"); +static const u8 gDebugText_BGM[] = _("BGM"); +static const u8 gDebugText_SE[] = _("SE "); +static const u8 gDebugText_ABDesc[] = _("A‥さいせい B‥おわり"); +static const u8 gDebugText_UpDown[] = _("L‥UP R‥DOWN"); +static const u8 gDebugText_DriverTest[] = _("R‥DRIVER-TEST"); + +// ideally this should be a multi Coords8 struct, but it wont match when its treated like a struct. +static const u8 gUnknown_083D0300[] = { 1, 1, 1, 3, 1, 5, 1, 7, 1, 9, 1, 11, 1, 13, 1, 15, 1, 17 }; + +static const u8 gDebugText_BBack[] = _("Bぼたんで もどる"); +static const u8 gDebugText_APlay[] = _("Aぼたんで さいせい"); +static const u8 gDebugText_Voice[] = _("VOICE‥‥‥‥"); +static const u8 gDebugText_Volume[] = _("VOLUME‥‥‥"); +static const u8 gDebugText_Panpot[] = _("PANPOT‥‥‥"); +static const u8 gDebugText_Pitch[] = _("PITCH‥‥‥‥"); +static const u8 gDebugText_Length[] = _("LENGTH‥‥‥"); +static const u8 gDebugText_Release[] = _("RELEASE‥‥"); +static const u8 gDebugText_Progress[] = _("PROGRESS‥"); +static const u8 gDebugText_Chorus[] = _("CHORUS‥‥‥"); +static const u8 gDebugText_Priority[] = _("PRIORITY‥"); +static const u8 gDebugText_Playing[] = _("さいせいちゆう‥"); // 再生中 (playing) +static const u8 gDebugText_Reverse[] = _("はんてん‥‥‥‥"); // 反転 (reverse) +static const u8 gDebugText_Stereo[] = _("すてれお‥‥‥‥"); // stereo + +// also ideally should be a MinMax struct, but any attempt to make this into a struct causes it to not match due to the weird multi dim access. +static const int gUnknown_083D039C[16] = +{ + 0, 387, + 0, 127, + -127, 127, + -128, 32639, + 0, 65535, + 0, 255, + 0, 65535, + -64, 63 +}; + +static const u8 gUnknown_083D03DC[] = _("▶"); +static const u8 gUnknown_083D03DE[] = _(" "); + +// why not just use Powers of ten from string_util? +static const int gUnknown_083D03E0[6] = +{ + 1, + 10, + 100, + 1000, + 10000, + 100000 +}; + +static const s8 gUnknown_083D03F8[5] = { 0x3F, 0x00, 0xC0, 0x7F, 0x80 }; + +static const u8 gOtherText_SE[] = _("SE"); +static const u8 gOtherText_Pan[] = _("PAN"); +static const u8 gOtherText_LR[] = _(" LR"); +static const u8 gOtherText_RL[] = _(" RL"); + +// bgm names +static const u8 BGMName_STOP[] = _("STOP"); +static const u8 BGMName_TETSUJI[] = _("TETSUJI"); +static const u8 BGMName_FIELD13[] = _("FIELD13"); +static const u8 BGMName_KACHI22[] = _("KACHI22"); +static const u8 BGMName_KACHI2[] = _("KACHI2"); +static const u8 BGMName_KACHI3[] = _("KACHI3"); +static const u8 BGMName_KACHI5[] = _("KACHI5"); +static const u8 BGMName_PCC[] = _("PCC"); +static const u8 BGMName_NIBI[] = _("NIBI"); +static const u8 BGMName_SUIKUN[] = _("SUIKUN"); +static const u8 BGMName_DOORO1[] = _("DOORO1"); +static const u8 BGMName_DOORO_X1[] = _("DOORO-X1"); +static const u8 BGMName_DOORO_X3[] = _("DOORO-X3"); +static const u8 BGMName_MACHI_S2[] = _("MACHI-S2"); +static const u8 BGMName_MACHI_S4[] = _("MACHI-S4"); +static const u8 BGMName_GIM[] = _("GIM"); +static const u8 BGMName_NAMINORI[] = _("NAMINORI"); +static const u8 BGMName_DAN01[] = _("DAN01"); +static const u8 BGMName_FANFA1[] = _("FANFA1"); +static const u8 BGMName_ME_ASA[] = _("ME-ASA"); +static const u8 BGMName_ME_BACHI[] = _("ME-BACHI"); +static const u8 BGMName_FANFA4[] = _("FANFA4"); +static const u8 BGMName_FANFA5[] = _("FANFA5"); +static const u8 BGMName_ME_WAZA[] = _("ME-WAZA"); +static const u8 BGMName_BIJYUTU[] = _("BIJYUTU"); +static const u8 BGMName_DOORO_X4[] = _("DOORO-X4"); +static const u8 BGMName_FUNE_KAN[] = _("FUNE-KAN"); +static const u8 BGMName_ME_SHINKA[] = _("ME-SHINKA"); +static const u8 BGMName_SHINKA[] = _("SHINKA"); +static const u8 BGMName_ME_WASURE[] = _("ME-WASURE"); +static const u8 BGMName_SYOUJOEYE[] = _("SYOUJOEYE"); +static const u8 BGMName_BOYEYE[] = _("BOYEYE"); +static const u8 BGMName_DAN02[] = _("DAN02"); +static const u8 BGMName_MACHI_S3[] = _("MACHI-S3"); +static const u8 BGMName_ODAMAKI[] = _("ODAMAKI"); +static const u8 BGMName_B_TOWER[] = _("B-TOWER"); +static const u8 BGMName_SWIMEYE[] = _("SWIMEYE"); +static const u8 BGMName_DAN03[] = _("DAN03"); +static const u8 BGMName_ME_KINOMI[] = _("ME-KINOMI"); +static const u8 BGMName_ME_TAMA[] = _("ME-TAMA"); +static const u8 BGMName_ME_B_BIG[] = _("ME-B-BIG"); +static const u8 BGMName_ME_B_SMALL[] = _("ME-B-SMALL"); +static const u8 BGMName_ME_ZANNEN[] = _("ME-ZANNEN"); +static const u8 BGMName_BD_TIME[] = _("BD-TIME"); +static const u8 BGMName_TEST1[] = _("TEST1"); +static const u8 BGMName_TEST2[] = _("TEST2"); +static const u8 BGMName_TEST3[] = _("TEST3"); +static const u8 BGMName_TEST4[] = _("TEST4"); +static const u8 BGMName_TEST[] = _("TEST"); +static const u8 BGMName_GOMACHI0[] = _("GOMACHI0"); +static const u8 BGMName_GOTOWN[] = _("GOTOWN"); +static const u8 BGMName_POKECEN[] = _("POKECEN"); +static const u8 BGMName_NEXTROAD[] = _("NEXTROAD"); +static const u8 BGMName_GRANROAD[] = _("GRANROAD"); +static const u8 BGMName_CYCLING[] = _("CYCLING"); +static const u8 BGMName_FRIENDLY[] = _("FRIENDLY"); +static const u8 BGMName_MISHIRO[] = _("MISHIRO"); +static const u8 BGMName_TOZAN[] = _("TOZAN"); +static const u8 BGMName_GIRLEYE[] = _("GIRLEYE"); +static const u8 BGMName_MINAMO[] = _("MINAMO"); +static const u8 BGMName_ASHROAD[] = _("ASHROAD"); +static const u8 BGMName_EVENT0[] = _("EVENT0"); +static const u8 BGMName_DEEPDEEP[] = _("DEEPDEEP"); +static const u8 BGMName_KACHI1[] = _("KACHI1"); +static const u8 BGMName_TITLE3[] = _("TITLE3"); +static const u8 BGMName_DEMO1[] = _("DEMO1"); +static const u8 BGMName_GIRL_SUP[] = _("GIRL-SUP"); +static const u8 BGMName_HAGESHII[] = _("HAGESHII"); +static const u8 BGMName_KAKKOII[] = _("KAKKOII"); +static const u8 BGMName_KAZANBAI[] = _("KAZANBAI"); +static const u8 BGMName_AQA_0[] = _("AQA-0"); +static const u8 BGMName_TSURETEK[] = _("TSURETEK"); +static const u8 BGMName_BOY_SUP[] = _("BOY-SUP"); +static const u8 BGMName_RAINBOW[] = _("RAINBOW"); +static const u8 BGMName_AYASII[] = _("AYASII"); +static const u8 BGMName_KACHI4[] = _("KACHI4"); +static const u8 BGMName_ROPEWAY[] = _("ROPEWAY"); +static const u8 BGMName_CASINO[] = _("CASINO"); +static const u8 BGMName_HIGHTOWN[] = _("HIGHTOWN"); +static const u8 BGMName_SAFARI[] = _("SAFARI"); +static const u8 BGMName_C_ROAD[] = _("C-ROAD"); +static const u8 BGMName_AJITO[] = _("AJITO"); +static const u8 BGMName_M_BOAT[] = _("M-BOAT"); +static const u8 BGMName_M_DUNGON[] = _("M-DUNGON"); +static const u8 BGMName_FINECITY[] = _("FINECITY"); +static const u8 BGMName_MACHUPI[] = _("MACHUPI"); +static const u8 BGMName_P_SCHOOL[] = _("P-SCHOOL"); +static const u8 BGMName_DENDOU[] = _("DENDOU"); +static const u8 BGMName_TONEKUSA[] = _("TONEKUSA"); +static const u8 BGMName_MABOROSI[] = _("MABOROSI"); +static const u8 BGMName_CON_FAN[] = _("CON-FAN"); +static const u8 BGMName_CONTEST0[] = _("CONTEST0"); +static const u8 BGMName_MGM0[] = _("MGM0"); +static const u8 BGMName_T_BATTLE[] = _("T-BATTLE"); +static const u8 BGMName_OOAME[] = _("OOAME"); +static const u8 BGMName_HIDERI[] = _("HIDERI"); +static const u8 BGMName_RUNECITY[] = _("RUNECITY"); +static const u8 BGMName_CON_K[] = _("CON-K"); +static const u8 BGMName_EIKOU_R[] = _("EIKOU-R"); +static const u8 BGMName_KARAKURI[] = _("KARAKURI"); +static const u8 BGMName_HUTAGO[] = _("HUTAGO"); +static const u8 BGMName_SITENNOU[] = _("SITENNOU"); +static const u8 BGMName_YAMA_EYE[] = _("YAMA-EYE"); +static const u8 BGMName_CONLOBBY[] = _("CONLOBBY"); +static const u8 BGMName_INTER_V[] = _("INTER-V"); +static const u8 BGMName_DAIGO[] = _("DAIGO"); +static const u8 BGMName_THANKFOR[] = _("THANKFOR"); +static const u8 BGMName_END[] = _("END"); +static const u8 BGMName_BATTLE27[] = _("BATTLE27"); +static const u8 BGMName_BATTLE31[] = _("BATTLE31"); +static const u8 BGMName_BATTLE20[] = _("BATTLE20"); +static const u8 BGMName_BATTLE32[] = _("BATTLE32"); +static const u8 BGMName_BATTLE33[] = _("BATTLE33"); +static const u8 BGMName_BATTLE36[] = _("BATTLE36"); +static const u8 BGMName_BATTLE34[] = _("BATTLE34"); +static const u8 BGMName_BATTLE35[] = _("BATTLE35"); +static const u8 BGMName_BATTLE38[] = _("BATTLE38"); +static const u8 BGMName_BATTLE30[] = _("BATTLE30"); + +static const u8 *const gBGMNames[] = +{ + BGMName_STOP, + BGMName_TETSUJI, + BGMName_FIELD13, + BGMName_KACHI22, + BGMName_KACHI2, + BGMName_KACHI3, + BGMName_KACHI5, + BGMName_PCC, + BGMName_NIBI, + BGMName_SUIKUN, + BGMName_DOORO1, + BGMName_DOORO_X1, + BGMName_DOORO_X3, + BGMName_MACHI_S2, + BGMName_MACHI_S4, + BGMName_GIM, + BGMName_NAMINORI, + BGMName_DAN01, + BGMName_FANFA1, + BGMName_ME_ASA, + BGMName_ME_BACHI, + BGMName_FANFA4, + BGMName_FANFA5, + BGMName_ME_WAZA, + BGMName_BIJYUTU, + BGMName_DOORO_X4, + BGMName_FUNE_KAN, + BGMName_ME_SHINKA, + BGMName_SHINKA, + BGMName_ME_WASURE, + BGMName_SYOUJOEYE, + BGMName_BOYEYE, + BGMName_DAN02, + BGMName_MACHI_S3, + BGMName_ODAMAKI, + BGMName_B_TOWER, + BGMName_SWIMEYE, + BGMName_DAN03, + BGMName_ME_KINOMI, + BGMName_ME_TAMA, + BGMName_ME_B_BIG, + BGMName_ME_B_SMALL, + BGMName_ME_ZANNEN, + BGMName_BD_TIME, + BGMName_TEST1, + BGMName_TEST2, + BGMName_TEST3, + BGMName_TEST4, + BGMName_TEST, + BGMName_GOMACHI0, + BGMName_GOTOWN, + BGMName_POKECEN, + BGMName_NEXTROAD, + BGMName_GRANROAD, + BGMName_CYCLING, + BGMName_FRIENDLY, + BGMName_MISHIRO, + BGMName_TOZAN, + BGMName_GIRLEYE, + BGMName_MINAMO, + BGMName_ASHROAD, + BGMName_EVENT0, + BGMName_DEEPDEEP, + BGMName_KACHI1, + BGMName_TITLE3, + BGMName_DEMO1, + BGMName_GIRL_SUP, + BGMName_HAGESHII, + BGMName_KAKKOII, + BGMName_KAZANBAI, + BGMName_AQA_0, + BGMName_TSURETEK, + BGMName_BOY_SUP, + BGMName_RAINBOW, + BGMName_AYASII, + BGMName_KACHI4, + BGMName_ROPEWAY, + BGMName_CASINO, + BGMName_HIGHTOWN, + BGMName_SAFARI, + BGMName_C_ROAD, + BGMName_AJITO, + BGMName_M_BOAT, + BGMName_M_DUNGON, + BGMName_FINECITY, + BGMName_MACHUPI, + BGMName_P_SCHOOL, + BGMName_DENDOU, + BGMName_TONEKUSA, + BGMName_MABOROSI, + BGMName_CON_FAN, + BGMName_CONTEST0, + BGMName_MGM0, + BGMName_T_BATTLE, + BGMName_OOAME, + BGMName_HIDERI, + BGMName_RUNECITY, + BGMName_CON_K, + BGMName_EIKOU_R, + BGMName_KARAKURI, + BGMName_HUTAGO, + BGMName_SITENNOU, + BGMName_YAMA_EYE, + BGMName_CONLOBBY, + BGMName_INTER_V, + BGMName_DAIGO, + BGMName_THANKFOR, + BGMName_END, + BGMName_BATTLE27, + BGMName_BATTLE31, + BGMName_BATTLE20, + BGMName_BATTLE32, + BGMName_BATTLE33, + BGMName_BATTLE36, + BGMName_BATTLE34, + BGMName_BATTLE35, + BGMName_BATTLE38, + BGMName_BATTLE30 +}; + +// SE names +static const u8 SEName_STOP[] = _("STOP"); +static const u8 SEName_KAIFUKU[] = _("KAIFUKU"); +static const u8 SEName_PC_LOGON[] = _("PC-LOGON"); +static const u8 SEName_PC_OFF[] = _("PC-OFF"); +static const u8 SEName_PC_ON[] = _("PC-ON"); +static const u8 SEName_SELECT[] = _("SELECT"); +static const u8 SEName_WIN_OPEN[] = _("WIN-OPEN"); +static const u8 SEName_WALL_HIT[] = _("WALL-HIT"); +static const u8 SEName_DOOR[] = _("DOOR"); +static const u8 SEName_KAIDAN[] = _("KAIDAN"); +static const u8 SEName_DANSA[] = _("DANSA"); +static const u8 SEName_JITENSYA[] = _("JITENSYA"); +static const u8 SEName_KOUKA_L[] = _("KOUKA-L"); +static const u8 SEName_KOUKA_M[] = _("KOUKA-M"); +static const u8 SEName_KOUKA_H[] = _("KOUKA-H"); +static const u8 SEName_BOWA2[] = _("BOWA2"); +static const u8 SEName_POKE_DEAD[] = _("POKE-DEAD"); +static const u8 SEName_NIGERU[] = _("NIGERU"); +static const u8 SEName_JIDO_DOA[] = _("JIDO-DOA"); +static const u8 SEName_NAMINORI[] = _("NAMINORI"); +static const u8 SEName_BAN[] = _("BAN"); +static const u8 SEName_PIN[] = _("PIN"); +static const u8 SEName_BOO[] = _("BOO"); +static const u8 SEName_BOWA[] = _("BOWA"); +static const u8 SEName_JYUNI[] = _("JYUNI"); +static const u8 SEName_A[] = _("A"); +static const u8 SEName_I[] = _("I"); +static const u8 SEName_U[] = _("U"); +static const u8 SEName_E[] = _("E"); +static const u8 SEName_O[] = _("O"); +static const u8 SEName_N[] = _("N"); +static const u8 SEName_SEIKAI[] = _("SEIKAI"); +static const u8 SEName_HAZURE[] = _("HAZURE"); +static const u8 SEName_EXP[] = _("EXP"); +static const u8 SEName_JITE_PYOKO[] = _("JITE-PYOKO"); +static const u8 SEName_MU_PACHI[] = _("MU-PACHI"); +static const u8 SEName_TK_KASYA[] = _("TK-KASYA"); +static const u8 SEName_FU_ZAKU[] = _("FU-ZAKU"); +static const u8 SEName_FU_ZAKU2[] = _("FU-ZAKU2"); +static const u8 SEName_FU_ZUZUZU[] = _("FU-ZUZUZU"); +static const u8 SEName_RU_GASHIN[] = _("RU-GASHIN"); +static const u8 SEName_RU_GASYAN[] = _("RU-GASYAN"); +static const u8 SEName_RU_BARI[] = _("RU-BARI"); +static const u8 SEName_RU_HYUU[] = _("RU-HYUU"); +static const u8 SEName_KI_GASYAN[] = _("KI-GASYAN"); +static const u8 SEName_TK_WARPIN[] = _("TK-WARPIN"); +static const u8 SEName_TK_WARPOUT[] = _("TK-WARPOUT"); +static const u8 SEName_TU_SAA[] = _("TU-SAA"); +static const u8 SEName_HI_TURUN[] = _("HI-TURUN"); +static const u8 SEName_TRACK_MOVE[] = _("TRACK-MOVE"); +static const u8 SEName_TRACK_STOP[] = _("TRACK-STOP"); +static const u8 SEName_TRACK_HAIK[] = _("TRACK-HAIK"); +static const u8 SEName_TRACK_DOOR[] = _("TRACK-DOOR"); +static const u8 SEName_MOTER[] = _("MOTER"); +static const u8 SEName_CARD[] = _("CARD"); +static const u8 SEName_SAVE[] = _("SAVE"); +static const u8 SEName_KON[] = _("KON"); +static const u8 SEName_KON2[] = _("KON2"); +static const u8 SEName_KON3[] = _("KON3"); +static const u8 SEName_KON4[] = _("KON4"); +static const u8 SEName_SUIKOMU[] = _("SUIKOMU"); +static const u8 SEName_NAGERU[] = _("NAGERU"); +static const u8 SEName_TOY_C[] = _("TOY-C"); +static const u8 SEName_TOY_D[] = _("TOY-D"); +static const u8 SEName_TOY_E[] = _("TOY-E"); +static const u8 SEName_TOY_F[] = _("TOY-F"); +static const u8 SEName_TOY_G[] = _("TOY-G"); +static const u8 SEName_TOY_A[] = _("TOY-A"); +static const u8 SEName_TOY_B[] = _("TOY-B"); +static const u8 SEName_TOY_C1[] = _("TOY-C1"); +static const u8 SEName_MIZU[] = _("MIZU"); +static const u8 SEName_HASHI[] = _("HASHI"); +static const u8 SEName_DAUGI[] = _("DAUGI"); +static const u8 SEName_PINPON[] = _("PINPON"); +static const u8 SEName_FUUSEN1[] = _("FUUSEN1"); +static const u8 SEName_FUUSEN2[] = _("FUUSEN2"); +static const u8 SEName_FUUSEN3[] = _("FUUSEN3"); +static const u8 SEName_TOY_KABE[] = _("TOY-KABE"); +static const u8 SEName_TOY_DANGO[] = _("TOY-DANGO"); +static const u8 SEName_DOKU[] = _("DOKU"); +static const u8 SEName_ESUKA[] = _("ESUKA"); +static const u8 SEName_T_AME[] = _("T-AME"); +static const u8 SEName_T_AME_E[] = _("T-AME-E"); +static const u8 SEName_T_OOAME[] = _("T-OOAME"); +static const u8 SEName_T_OOAME_E[] = _("T-OOAME-E"); +static const u8 SEName_T_KOAME[] = _("T-KOAME"); +static const u8 SEName_T_KOAME_E[] = _("T-KOAME-E"); +static const u8 SEName_T_KAMI[] = _("T-KAMI"); +static const u8 SEName_T_KAMI2[] = _("T-KAMI2"); +static const u8 SEName_ELEBETA[] = _("ELEBETA"); +static const u8 SEName_HINSI[] = _("HINSI"); +static const u8 SEName_EXPMAX[] = _("EXPMAX"); +static const u8 SEName_TAMAKORO[] = _("TAMAKORO"); +static const u8 SEName_TAMAKORO_E[] = _("TAMAKORO-E"); +static const u8 SEName_BASABASA[] = _("BASABASA"); +static const u8 SEName_REGI[] = _("REGI"); +static const u8 SEName_C_GAJI[] = _("C-GAJI"); +static const u8 SEName_C_MAKU_U[] = _("C-MAKU-U"); +static const u8 SEName_C_MAKU_D[] = _("C-MAKU-D"); +static const u8 SEName_C_PASI[] = _("C-PASI"); +static const u8 SEName_C_SYU[] = _("C-SYU"); +static const u8 SEName_C_PIKON[] = _("C-PIKON"); +static const u8 SEName_REAPOKE[] = _("REAPOKE"); +static const u8 SEName_OP_BASYU[] = _("OP-BASYU"); +static const u8 SEName_BT_START[] = _("BT-START"); +static const u8 SEName_DENDOU[] = _("DENDOU"); +static const u8 SEName_JIHANKI[] = _("JIHANKI"); +static const u8 SEName_TAMA[] = _("TAMA"); +static const u8 SEName_Z_SCROLL[] = _("Z-SCROLL"); +static const u8 SEName_Z_PAGE[] = _("Z-PAGE"); +static const u8 SEName_PN_ON[] = _("PN-ON"); +static const u8 SEName_PN_OFF[] = _("PN-OFF"); +static const u8 SEName_Z_SEARCH[] = _("Z-SEARCH"); +static const u8 SEName_TAMAGO[] = _("TAMAGO"); +static const u8 SEName_TB_START[] = _("TB-START"); +static const u8 SEName_TB_KON[] = _("TB-KON"); +static const u8 SEName_TB_KARA[] = _("TB-KARA"); +static const u8 SEName_BIDORO[] = _("BIDORO"); +static const u8 SEName_W085[] = _("W085"); +static const u8 SEName_W085B[] = _("W085B"); +static const u8 SEName_W231[] = _("W231"); +static const u8 SEName_W171[] = _("W171"); +static const u8 SEName_W233[] = _("W233"); +static const u8 SEName_W233B[] = _("W233B"); +static const u8 SEName_W145[] = _("W145"); +static const u8 SEName_W145B[] = _("W145B"); +static const u8 SEName_W145C[] = _("W145C"); +static const u8 SEName_W240[] = _("W240"); +static const u8 SEName_W015[] = _("W015"); +static const u8 SEName_W081[] = _("W081"); +static const u8 SEName_W081B[] = _("W081B"); +static const u8 SEName_W088[] = _("W088"); +static const u8 SEName_W016[] = _("W016"); +static const u8 SEName_W016B[] = _("W016B"); +static const u8 SEName_W003[] = _("W003"); +static const u8 SEName_W104[] = _("W104"); +static const u8 SEName_W013[] = _("W013"); +static const u8 SEName_W196[] = _("W196"); +static const u8 SEName_W086[] = _("W086"); +static const u8 SEName_W004[] = _("W004"); +static const u8 SEName_W025[] = _("W025"); +static const u8 SEName_W025B[] = _("W025B"); +static const u8 SEName_W152[] = _("W152"); +static const u8 SEName_W026[] = _("W026"); +static const u8 SEName_W172[] = _("W172"); +static const u8 SEName_W172B[] = _("W172B"); +static const u8 SEName_W053[] = _("W053"); +static const u8 SEName_W007[] = _("W007"); +static const u8 SEName_W092[] = _("W092"); +static const u8 SEName_W221[] = _("W221"); +static const u8 SEName_W221B[] = _("W221B"); +static const u8 SEName_W052[] = _("W052"); +static const u8 SEName_W036[] = _("W036"); +static const u8 SEName_W059[] = _("W059"); +static const u8 SEName_W059B[] = _("W059B"); +static const u8 SEName_W010[] = _("W010"); +static const u8 SEName_W011[] = _("W011"); +static const u8 SEName_W017[] = _("W017"); +static const u8 SEName_W019[] = _("W019"); +static const u8 SEName_W028[] = _("W028"); +static const u8 SEName_W013B[] = _("W013B"); +static const u8 SEName_W044[] = _("W044"); +static const u8 SEName_W029[] = _("W029"); +static const u8 SEName_W057[] = _("W057"); +static const u8 SEName_W056[] = _("W056"); +static const u8 SEName_W250[] = _("W250"); +static const u8 SEName_W030[] = _("W030"); +static const u8 SEName_W039[] = _("W039"); +static const u8 SEName_W054[] = _("W054"); +static const u8 SEName_W077[] = _("W077"); +static const u8 SEName_W020[] = _("W020"); +static const u8 SEName_W082[] = _("W082"); +static const u8 SEName_W047[] = _("W047"); +static const u8 SEName_W195[] = _("W195"); +static const u8 SEName_W006[] = _("W006"); +static const u8 SEName_W091[] = _("W091"); +static const u8 SEName_W146[] = _("W146"); +static const u8 SEName_W120[] = _("W120"); +static const u8 SEName_W153[] = _("W153"); +static const u8 SEName_W071B[] = _("W071B"); +static const u8 SEName_W071[] = _("W071"); +static const u8 SEName_W103[] = _("W103"); +static const u8 SEName_W062[] = _("W062"); +static const u8 SEName_W062B[] = _("W062B"); +static const u8 SEName_W048[] = _("W048"); +static const u8 SEName_W187[] = _("W187"); +static const u8 SEName_W118[] = _("W118"); +static const u8 SEName_W155[] = _("W155"); +static const u8 SEName_W122[] = _("W122"); +static const u8 SEName_W060[] = _("W060"); +static const u8 SEName_W185[] = _("W185"); +static const u8 SEName_W014[] = _("W014"); +static const u8 SEName_W043[] = _("W043"); +static const u8 SEName_W207[] = _("W207"); +static const u8 SEName_W207B[] = _("W207B"); +static const u8 SEName_W215[] = _("W215"); +static const u8 SEName_W109[] = _("W109"); +static const u8 SEName_W173[] = _("W173"); +static const u8 SEName_W280[] = _("W280"); +static const u8 SEName_W202[] = _("W202"); +static const u8 SEName_W060B[] = _("W060B"); +static const u8 SEName_W076[] = _("W076"); +static const u8 SEName_W080[] = _("W080"); +static const u8 SEName_W100[] = _("W100"); +static const u8 SEName_W107[] = _("W107"); +static const u8 SEName_W166[] = _("W166"); +static const u8 SEName_W129[] = _("W129"); +static const u8 SEName_W115[] = _("W115"); +static const u8 SEName_W112[] = _("W112"); +static const u8 SEName_W197[] = _("W197"); +static const u8 SEName_W199[] = _("W199"); +static const u8 SEName_W236[] = _("W236"); +static const u8 SEName_W204[] = _("W204"); +static const u8 SEName_W268[] = _("W268"); +static const u8 SEName_W070[] = _("W070"); +static const u8 SEName_W063[] = _("W063"); +static const u8 SEName_W127[] = _("W127"); +static const u8 SEName_W179[] = _("W179"); +static const u8 SEName_W151[] = _("W151"); +static const u8 SEName_W201[] = _("W201"); +static const u8 SEName_W161[] = _("W161"); +static const u8 SEName_W161B[] = _("W161B"); +static const u8 SEName_W227[] = _("W227"); +static const u8 SEName_W227B[] = _("W227B"); +static const u8 SEName_W226[] = _("W226"); +static const u8 SEName_W208[] = _("W208"); +static const u8 SEName_W213[] = _("W213"); +static const u8 SEName_W213B[] = _("W213B"); +static const u8 SEName_W234[] = _("W234"); +static const u8 SEName_W260[] = _("W260"); +static const u8 SEName_W328[] = _("W328"); +static const u8 SEName_W320[] = _("W320"); +static const u8 SEName_W255[] = _("W255"); +static const u8 SEName_W291[] = _("W291"); +static const u8 SEName_W089[] = _("W089"); +static const u8 SEName_W239[] = _("W239"); +static const u8 SEName_W230[] = _("W230"); +static const u8 SEName_W281[] = _("W281"); +static const u8 SEName_W327[] = _("W327"); +static const u8 SEName_W287[] = _("W287"); +static const u8 SEName_W257[] = _("W257"); +static const u8 SEName_W253[] = _("W253"); +static const u8 SEName_W258[] = _("W258"); +static const u8 SEName_W322[] = _("W322"); +static const u8 SEName_W298[] = _("W298"); +static const u8 SEName_W287B[] = _("W287B"); +static const u8 SEName_W114[] = _("W114"); +static const u8 SEName_W063B[] = _("W063B"); + +static const u8 *const gSENames[] = +{ + SEName_STOP, + SEName_KAIFUKU, + SEName_PC_LOGON, + SEName_PC_OFF, + SEName_PC_ON, + SEName_SELECT, + SEName_WIN_OPEN, + SEName_WALL_HIT, + SEName_DOOR, + SEName_KAIDAN, + SEName_DANSA, + SEName_JITENSYA, + SEName_KOUKA_L, + SEName_KOUKA_M, + SEName_KOUKA_H, + SEName_BOWA2, + SEName_POKE_DEAD, + SEName_NIGERU, + SEName_JIDO_DOA, + SEName_NAMINORI, + SEName_BAN, + SEName_PIN, + SEName_BOO, + SEName_BOWA, + SEName_JYUNI, + SEName_A, + SEName_I, + SEName_U, + SEName_E, + SEName_O, + SEName_N, + SEName_SEIKAI, + SEName_HAZURE, + SEName_EXP, + SEName_JITE_PYOKO, + SEName_MU_PACHI, + SEName_TK_KASYA, + SEName_FU_ZAKU, + SEName_FU_ZAKU2, + SEName_FU_ZUZUZU, + SEName_RU_GASHIN, + SEName_RU_GASYAN, + SEName_RU_BARI, + SEName_RU_HYUU, + SEName_KI_GASYAN, + SEName_TK_WARPIN, + SEName_TK_WARPOUT, + SEName_TU_SAA, + SEName_HI_TURUN, + SEName_TRACK_MOVE, + SEName_TRACK_STOP, + SEName_TRACK_HAIK, + SEName_TRACK_DOOR, + SEName_MOTER, + SEName_CARD, + SEName_SAVE, + SEName_KON, + SEName_KON2, + SEName_KON3, + SEName_KON4, + SEName_SUIKOMU, + SEName_NAGERU, + SEName_TOY_C, + SEName_TOY_D, + SEName_TOY_E, + SEName_TOY_F, + SEName_TOY_G, + SEName_TOY_A, + SEName_TOY_B, + SEName_TOY_C1, + SEName_MIZU, + SEName_HASHI, + SEName_DAUGI, + SEName_PINPON, + SEName_FUUSEN1, + SEName_FUUSEN2, + SEName_FUUSEN3, + SEName_TOY_KABE, + SEName_TOY_DANGO, + SEName_DOKU, + SEName_ESUKA, + SEName_T_AME, + SEName_T_AME_E, + SEName_T_OOAME, + SEName_T_OOAME_E, + SEName_T_KOAME, + SEName_T_KOAME_E, + SEName_T_KAMI, + SEName_T_KAMI2, + SEName_ELEBETA, + SEName_HINSI, + SEName_EXPMAX, + SEName_TAMAKORO, + SEName_TAMAKORO_E, + SEName_BASABASA, + SEName_REGI, + SEName_C_GAJI, + SEName_C_MAKU_U, + SEName_C_MAKU_D, + SEName_C_PASI, + SEName_C_SYU, + SEName_C_PIKON, + SEName_REAPOKE, + SEName_OP_BASYU, + SEName_BT_START, + SEName_DENDOU, + SEName_JIHANKI, + SEName_TAMA, + SEName_Z_SCROLL, + SEName_Z_PAGE, + SEName_PN_ON, + SEName_PN_OFF, + SEName_Z_SEARCH, + SEName_TAMAGO, + SEName_TB_START, + SEName_TB_KON, + SEName_TB_KARA, + SEName_BIDORO, + SEName_W085, + SEName_W085B, + SEName_W231, + SEName_W171, + SEName_W233, + SEName_W233B, + SEName_W145, + SEName_W145B, + SEName_W145C, + SEName_W240, + SEName_W015, + SEName_W081, + SEName_W081B, + SEName_W088, + SEName_W016, + SEName_W016B, + SEName_W003, + SEName_W104, + SEName_W013, + SEName_W196, + SEName_W086, + SEName_W004, + SEName_W025, + SEName_W025B, + SEName_W152, + SEName_W026, + SEName_W172, + SEName_W172B, + SEName_W053, + SEName_W007, + SEName_W092, + SEName_W221, + SEName_W221B, + SEName_W052, + SEName_W036, + SEName_W059, + SEName_W059B, + SEName_W010, + SEName_W011, + SEName_W017, + SEName_W019, + SEName_W028, + SEName_W013B, + SEName_W044, + SEName_W029, + SEName_W057, + SEName_W056, + SEName_W250, + SEName_W030, + SEName_W039, + SEName_W054, + SEName_W077, + SEName_W020, + SEName_W082, + SEName_W047, + SEName_W195, + SEName_W006, + SEName_W091, + SEName_W146, + SEName_W120, + SEName_W153, + SEName_W071B, + SEName_W071, + SEName_W103, + SEName_W062, + SEName_W062B, + SEName_W048, + SEName_W187, + SEName_W118, + SEName_W155, + SEName_W122, + SEName_W060, + SEName_W185, + SEName_W014, + SEName_W043, + SEName_W207, + SEName_W207B, + SEName_W215, + SEName_W109, + SEName_W173, + SEName_W280, + SEName_W202, + SEName_W060B, + SEName_W076, + SEName_W080, + SEName_W100, + SEName_W107, + SEName_W166, + SEName_W129, + SEName_W115, + SEName_W112, + SEName_W197, + SEName_W199, + SEName_W236, + SEName_W204, + SEName_W268, + SEName_W070, + SEName_W063, + SEName_W127, + SEName_W179, + SEName_W151, + SEName_W201, + SEName_W161, + SEName_W161B, + SEName_W227, + SEName_W227B, + SEName_W226, + SEName_W208, + SEName_W213, + SEName_W213B, + SEName_W234, + SEName_W260, + SEName_W328, + SEName_W320, + SEName_W255, + SEName_W291, + SEName_W089, + SEName_W239, + SEName_W230, + SEName_W281, + SEName_W327, + SEName_W287, + SEName_W257, + SEName_W253, + SEName_W258, + SEName_W322, + SEName_W298, + SEName_W287B, + SEName_W114, + SEName_W063B +}; + +void sub_80BA0A8(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_80BA0C0(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + + if(gUnknown_020387B0 != 0) + { + m4aSoundMain(); + m4aSoundMain(); + m4aSoundMain(); + } +} + +// unused +void CB2_StartSoundCheckMenu(void) +{ + u8 taskId; + + SetVBlankCallback(NULL); + REG_DISPCNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT, PLTT_SIZE); + ResetPaletteFade(); + ResetTasks(); + ResetSpriteData(); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + REG_WIN0H = WIN_RANGE(0, 0); + REG_WIN0V = WIN_RANGE(0, 0); + REG_WIN1H = WIN_RANGE(0, 0); + REG_WIN1V = WIN_RANGE(0, 0); + REG_WININ = 0x1111; + REG_WINOUT = 0x31; + REG_BLDCNT = 0xE1; + REG_BLDALPHA = 0; + REG_BLDY = 7; + REG_IE = 1; // could be a typo of REG_IME + REG_IE |= 1; + REG_DISPSTAT |= 8; + SetVBlankCallback(sub_80BA0C0); + SetMainCallback2(sub_80BA0A8); + REG_DISPCNT = 0x7140; + taskId = CreateTask(sub_80BA258, 0); + TASK.WINDOW_SELECTED = BGM_WINDOW; + TASK.BGM_INDEX = 0; + TASK.SE_INDEX = 0; + TASK.UNK_DATA3 = 0; + gUnknown_020387B0 = 0; + TASK.UNK_DATA3 = 0; // why? + m4aSoundInit(); +} + +// Task_InitSoundCheckMenu +void sub_80BA258(u8 taskId) +{ + u8 soundcheckStr[sizeof(gDebugText_SoundCheckJap)]; + u8 bgmStr[sizeof(gDebugText_BGM)]; + u8 seStr[sizeof(gDebugText_SE)]; + u8 abDescStr[sizeof(gDebugText_ABDesc)]; + u8 upDownStr[sizeof(gDebugText_UpDown)]; + u8 driverStr[sizeof(gDebugText_DriverTest)]; + + memcpy(soundcheckStr, gDebugText_SoundCheckJap, sizeof(gDebugText_SoundCheckJap)); + memcpy(bgmStr, gDebugText_BGM, sizeof(gDebugText_BGM)); + memcpy(seStr, gDebugText_SE, sizeof(gDebugText_SE)); + memcpy(abDescStr, gDebugText_ABDesc, sizeof(gDebugText_ABDesc)); + memcpy(upDownStr, gDebugText_UpDown, sizeof(gDebugText_UpDown)); + memcpy(driverStr, gDebugText_DriverTest, sizeof(gDebugText_DriverTest)); + + if(!gPaletteFade.active) + { + MenuDrawTextWindow(0x2, 0, 0x1B, 0x3); + MenuDrawTextWindow(0x2, 0x5, 0x1B, 0xA); + MenuDrawTextWindow(0x2, 0xC, 0x1B, 0x11); + MenuPrint(soundcheckStr, 4, 1); + MenuPrint(abDescStr, 14, 1); + MenuPrint(bgmStr, 4, 6); + MenuPrint(upDownStr, 14, 6); + MenuPrint(seStr, 4, 13); + MenuPrint(upDownStr, 14, 13); + MenuPrint(driverStr, 14, 18); + TASK.FUNC = sub_80BA384; + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(1, 31); + } +} + +void sub_80BA384(u8 taskId) // Task_HandleDrawingSoundCheckMenuText +{ + sub_80BA6B8(TASK.WINDOW_SELECTED); + sub_80BA700(TASK.BGM_INDEX + BGM_STOP, 7, 8); // print by BGM index + sub_80BA79C(gBGMNames[TASK.BGM_INDEX], 11, 8); + sub_80BA700(TASK.SE_INDEX, 7, 15); + sub_80BA79C(gSENames[TASK.SE_INDEX], 11, 15); + TASK.FUNC = sub_80BA65C; +} + +#ifdef NONMATCHING +bool8 sub_80BA400(u8 taskId) // Task_ProcessSoundCheckMenuInput +{ + if(gMain.newKeys & R_BUTTON) // driver test + { + TASK.FUNC = sub_80BA800; + return FALSE; + } + if(gMain.newKeys & L_BUTTON) + { + TASK.FUNC = sub_80BAF84; + return FALSE; + } + if(gMain.newKeys & START_BUTTON) + { + TASK.FUNC = sub_80BB25C; + return FALSE; + } + if(gMain.newKeys & A_BUTTON) // both these cases insist on non reuses of certain data variables and cause the function to not match. + { + if(TASK.WINDOW_SELECTED != 0) // is playing? + { + if(TASK.UNK_DATA4 != 0) + { + if(TASK.SE_INDEX != 0) // why are you insiting on a non signed halfword? + { + m4aSongNumStop(TASK.UNK_DATA4); + } + else + { + m4aSongNumStop(TASK.SE_INDEX); + TASK.UNK_DATA4 = TASK.SE_INDEX; + return FALSE; + } + } + else if(TASK.SE_INDEX == 0) // _080BA4BA + { + return FALSE; + } + // _080BA4C4 + m4aSongNumStart(TASK.SE_INDEX); + TASK.UNK_DATA4 = TASK.SE_INDEX; + return FALSE; + } + else // _080BA4D0 + { + if(TASK.UNK_DATA3 != 0) + { + if(TASK.BGM_INDEX != 0) + { + m4aSongNumStop(TASK.UNK_DATA3 + BGM_STOP); + } + else // _080BA500 + { + m4aSongNumStop(TASK.UNK_DATA3 + BGM_STOP); + TASK.UNK_DATA3 = TASK.BGM_INDEX; + return FALSE; + } + } + else if(TASK.BGM_INDEX == 0) // _080BA514 + return FALSE; + + m4aSongNumStart(TASK.BGM_INDEX + BGM_STOP); + TASK.UNK_DATA3 = TASK.BGM_INDEX; + } + return FALSE; + } + if(gMain.newKeys & B_BUTTON) + { + m4aSongNumStart(5); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + TASK.FUNC = sub_80BA68C; + return FALSE; + } + if(gMain.newAndRepeatedKeys & DPAD_UP) + { + TASK.data[8] ^= A_BUTTON; // huh? + return TRUE; + } + if(gMain.newAndRepeatedKeys & DPAD_DOWN) + { + TASK.data[8] ^= A_BUTTON; // huh? + return TRUE; + } + else + { + u16 keys = gMain.newAndRepeatedKeys & DPAD_RIGHT; + if(keys) + { + if(TASK.WINDOW_SELECTED != 0) + { + if(TASK.SE_INDEX > 0) + { + TASK.SE_INDEX--; + } + else + { + TASK.SE_INDEX = 0xF7; + } + } + else if(TASK.BGM_INDEX > 0) + { + TASK.BGM_INDEX--; + } + else + { + TASK.BGM_INDEX = 0x75; + } + return TRUE; + } + if(gMain.newAndRepeatedKeys & DPAD_LEFT) + { + if(TASK.WINDOW_SELECTED != 0) + { + if(TASK.SE_INDEX < 0xF7) + { + TASK.SE_INDEX++; + } + else + { + TASK.SE_INDEX = keys; // ?? + } + } + else if(TASK.BGM_INDEX < 0x75) + { + TASK.BGM_INDEX++; + return TRUE; + } + else + { + TASK.BGM_INDEX = TASK.SE_INDEX; + return TRUE; + } + return TRUE; + } + if(gMain.heldKeys & SELECT_BUTTON) + { + gUnknown_020387B0 = A_BUTTON; + return FALSE; + } + else + { + gUnknown_020387B0 = (gMain.heldKeys & SELECT_BUTTON); + return FALSE; + } + } +} +#else +__attribute__((naked)) +bool8 sub_80BA400(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + sub sp, 0x4\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + ldr r2, _080BA428 @ =gMain\n\ + ldrh r1, [r2, 0x2E]\n\ + movs r0, 0x80\n\ + lsls r0, 1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080BA434\n\ + ldr r0, _080BA42C @ =gTasks\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldr r0, _080BA430 @ =sub_80BA800\n\ + str r0, [r1]\n\ + b _080BA64C\n\ + .align 2, 0\n\ +_080BA428: .4byte gMain\n\ +_080BA42C: .4byte gTasks\n\ +_080BA430: .4byte sub_80BA800\n\ +_080BA434:\n\ + movs r0, 0x80\n\ + lsls r0, 2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080BA458\n\ + ldr r0, _080BA450 @ =gTasks\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldr r0, _080BA454 @ =sub_80BAF84\n\ + str r0, [r1]\n\ + b _080BA64C\n\ + .align 2, 0\n\ +_080BA450: .4byte gTasks\n\ +_080BA454: .4byte sub_80BAF84\n\ +_080BA458:\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080BA478\n\ + ldr r0, _080BA470 @ =gTasks\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldr r0, _080BA474 @ =sub_80BB25C\n\ + str r0, [r1]\n\ + b _080BA64C\n\ + .align 2, 0\n\ +_080BA470: .4byte gTasks\n\ +_080BA474: .4byte sub_80BB25C\n\ +_080BA478:\n\ + movs r6, 0x1\n\ + movs r5, 0x1\n\ + ands r5, r1\n\ + cmp r5, 0\n\ + beq _080BA538\n\ + ldr r0, _080BA4AC @ =gTasks\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 3\n\ + adds r5, r1, r0\n\ + movs r1, 0x8\n\ + ldrsh r0, [r5, r1]\n\ + cmp r0, 0\n\ + beq _080BA4D0\n\ + movs r2, 0x10\n\ + ldrsh r0, [r5, r2]\n\ + cmp r0, 0\n\ + beq _080BA4BA\n\ + movs r3, 0xC\n\ + ldrsh r4, [r5, r3]\n\ + cmp r4, 0\n\ + beq _080BA4B0\n\ + ldrh r0, [r5, 0x10]\n\ + bl m4aSongNumStop\n\ + b _080BA4C4\n\ + .align 2, 0\n\ +_080BA4AC: .4byte gTasks\n\ +_080BA4B0:\n\ + ldrh r0, [r5, 0x10]\n\ + bl m4aSongNumStop\n\ + strh r4, [r5, 0x10]\n\ + b _080BA64C\n\ +_080BA4BA:\n\ + movs r4, 0xC\n\ + ldrsh r0, [r5, r4]\n\ + cmp r0, 0\n\ + bne _080BA4C4\n\ + b _080BA64C\n\ +_080BA4C4:\n\ + ldrh r0, [r5, 0xC]\n\ + bl m4aSongNumStart\n\ + ldrh r0, [r5, 0xC]\n\ + strh r0, [r5, 0x10]\n\ + b _080BA64C\n\ +_080BA4D0:\n\ + ldrh r1, [r5, 0xE]\n\ + movs r2, 0xE\n\ + ldrsh r0, [r5, r2]\n\ + cmp r0, 0\n\ + beq _080BA514\n\ + movs r3, 0xA\n\ + ldrsh r4, [r5, r3]\n\ + cmp r4, 0\n\ + beq _080BA500\n\ + ldr r0, _080BA4FC @ =0x0000015d\n\ + adds r4, r0, 0\n\ + adds r0, r1, r4\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + bl m4aSongNumStop\n\ + ldrh r1, [r5, 0xA]\n\ + adds r4, r1\n\ + lsls r4, 16\n\ + lsrs r4, 16\n\ + adds r0, r4, 0\n\ + b _080BA528\n\ + .align 2, 0\n\ +_080BA4FC: .4byte 0x0000015d\n\ +_080BA500:\n\ + ldr r2, _080BA510 @ =0x0000015d\n\ + adds r0, r1, r2\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + bl m4aSongNumStop\n\ + strh r4, [r5, 0xE]\n\ + b _080BA64C\n\ + .align 2, 0\n\ +_080BA510: .4byte 0x0000015d\n\ +_080BA514:\n\ + ldrh r1, [r5, 0xA]\n\ + movs r3, 0xA\n\ + ldrsh r0, [r5, r3]\n\ + cmp r0, 0\n\ + bne _080BA520\n\ + b _080BA64C\n\ +_080BA520:\n\ + ldr r4, _080BA534 @ =0x0000015d\n\ + adds r0, r1, r4\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ +_080BA528:\n\ + bl m4aSongNumStart\n\ + ldrh r0, [r5, 0xA]\n\ + strh r0, [r5, 0xE]\n\ + b _080BA64C\n\ + .align 2, 0\n\ +_080BA534: .4byte 0x0000015d\n\ +_080BA538:\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080BA570\n\ + movs r0, 0x5\n\ + bl m4aSongNumStart\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + str r5, [sp]\n\ + movs r1, 0\n\ + movs r2, 0\n\ + movs r3, 0x10\n\ + bl BeginNormalPaletteFade\n\ + ldr r1, _080BA568 @ =gTasks\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldr r1, _080BA56C @ =sub_80BA68C\n\ + str r1, [r0]\n\ + b _080BA64C\n\ + .align 2, 0\n\ +_080BA568: .4byte gTasks\n\ +_080BA56C: .4byte sub_80BA68C\n\ +_080BA570:\n\ + ldrh r1, [r2, 0x30]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080BA582\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080BA59C\n\ +_080BA582:\n\ + ldr r0, _080BA598 @ =gTasks\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldrh r0, [r1, 0x8]\n\ + eors r0, r6\n\ + strh r0, [r1, 0x8]\n\ +_080BA592:\n\ + movs r0, 0x1\n\ + b _080BA64E\n\ + .align 2, 0\n\ +_080BA598: .4byte gTasks\n\ +_080BA59C:\n\ + movs r0, 0x10\n\ + ands r0, r1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, 0\n\ + beq _080BA5EA\n\ + ldr r0, _080BA5CC @ =gTasks\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + movs r2, 0x8\n\ + ldrsh r0, [r1, r2]\n\ + cmp r0, 0\n\ + beq _080BA5D6\n\ + ldrh r2, [r1, 0xC]\n\ + movs r3, 0xC\n\ + ldrsh r0, [r1, r3]\n\ + cmp r0, 0\n\ + ble _080BA5D0\n\ + subs r0, r2, 0x1\n\ + strh r0, [r1, 0xC]\n\ + b _080BA592\n\ + .align 2, 0\n\ +_080BA5CC: .4byte gTasks\n\ +_080BA5D0:\n\ + movs r0, 0xF7\n\ + strh r0, [r1, 0xC]\n\ + b _080BA592\n\ +_080BA5D6:\n\ + ldrh r2, [r1, 0xA]\n\ + movs r4, 0xA\n\ + ldrsh r0, [r1, r4]\n\ + cmp r0, 0\n\ + ble _080BA5E4\n\ + subs r0, r2, 0x1\n\ + b _080BA5E6\n\ +_080BA5E4:\n\ + movs r0, 0x75\n\ +_080BA5E6:\n\ + strh r0, [r1, 0xA]\n\ + b _080BA592\n\ +_080BA5EA:\n\ + movs r0, 0x20\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080BA630\n\ + ldr r1, _080BA614 @ =gTasks\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + adds r1, r0, r1\n\ + movs r0, 0x8\n\ + ldrsh r2, [r1, r0]\n\ + cmp r2, 0\n\ + beq _080BA61C\n\ + ldrh r2, [r1, 0xC]\n\ + movs r4, 0xC\n\ + ldrsh r0, [r1, r4]\n\ + cmp r0, 0xF6\n\ + bgt _080BA618\n\ + adds r0, r2, 0x1\n\ + strh r0, [r1, 0xC]\n\ + b _080BA592\n\ + .align 2, 0\n\ +_080BA614: .4byte gTasks\n\ +_080BA618:\n\ + strh r3, [r1, 0xC]\n\ + b _080BA592\n\ +_080BA61C:\n\ + ldrh r3, [r1, 0xA]\n\ + movs r4, 0xA\n\ + ldrsh r0, [r1, r4]\n\ + cmp r0, 0x74\n\ + bgt _080BA62C\n\ + adds r0, r3, 0x1\n\ + strh r0, [r1, 0xA]\n\ + b _080BA592\n\ +_080BA62C:\n\ + strh r2, [r1, 0xA]\n\ + b _080BA592\n\ +_080BA630:\n\ + ldrh r1, [r2, 0x2C]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + cmp r1, 0\n\ + beq _080BA648\n\ + ldr r0, _080BA644 @ =gUnknown_020387B0\n\ + strb r6, [r0]\n\ + b _080BA64C\n\ + .align 2, 0\n\ +_080BA644: .4byte gUnknown_020387B0\n\ +_080BA648:\n\ + ldr r0, _080BA658 @ =gUnknown_020387B0\n\ + strb r1, [r0]\n\ +_080BA64C:\n\ + movs r0, 0\n\ +_080BA64E:\n\ + add sp, 0x4\n\ + pop {r4-r6}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_080BA658: .4byte gUnknown_020387B0\n\ + .syntax divided"); +} +#endif + +void sub_80BA65C(u8 taskId) +{ + if(sub_80BA400(taskId) != FALSE) + TASK.FUNC = sub_80BA384; +} + +void sub_80BA68C(u8 taskId) +{ + if(!gPaletteFade.active) + { + DestroyTask(taskId); + SetMainCallback2(CB2_InitTitleScreen); + } +} + +void sub_80BA6B8(u8 windowType) +{ + switch(windowType) + { + case BGM_WINDOW: + default: + REG_WIN1H = WIN_RANGE(17, 223); + REG_WIN1V = WIN_RANGE(41, 87); + break; + case SE_WINDOW: + REG_WIN1H = WIN_RANGE(17, 223); + REG_WIN1V = WIN_RANGE(97, 143); + break; + } +} + +void sub_80BA700(u16 soundIndex, u16 x, u16 y) // PrintSoundNumber ? +{ + u8 i; + u8 str[5]; + bool8 someBool; + u8 divisorValue; + + for(i = 0; i < 3; i++) + str[i] = 0; // initialize array + + str[3] = CHAR_ELLIPSIS; + str[4] = EOS; + someBool = FALSE; + + divisorValue = soundIndex / 100; + if(divisorValue) + { + str[0] = divisorValue + CHAR_0; + someBool = TRUE; + } + + divisorValue = (soundIndex % 100) / 10; + if(divisorValue || someBool != FALSE) + str[1] = divisorValue + CHAR_0; + + str[2] = ((soundIndex % 100) % 10) + CHAR_0; + MenuPrint(str, x, y); +} + +void sub_80BA79C(const u8 *const string, u16 x, u16 y) +{ + u8 i; + u8 str[11]; + + for(i = 0; i < 11; i++) + str[i] = 0; // format string. + + str[10] = EOS; // the above for loop formats the last element of the array unnecessarily. + + for(i = 0; string[i] != EOS && i < 10; i++) + str[i] = string[i]; + + MenuPrint(str, x, y); +} + +void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu +{ + u8 bbackStr[sizeof(gDebugText_BBack)]; + u8 aplayStr[sizeof(gDebugText_APlay)]; + u8 voiceStr[sizeof(gDebugText_Voice)]; + u8 volumeStr[sizeof(gDebugText_Volume)]; + u8 panpotStr[sizeof(gDebugText_Panpot)]; + u8 pitchStr[sizeof(gDebugText_Pitch)]; + u8 lengthStr[sizeof(gDebugText_Length)]; + u8 releaseStr[sizeof(gDebugText_Release)]; + u8 progressStr[sizeof(gDebugText_Progress)]; + u8 chorusStr[sizeof(gDebugText_Chorus)]; + u8 priorityStr[sizeof(gDebugText_Priority)]; + u8 playingStr[sizeof(gDebugText_Playing)]; + u8 reverseStr[sizeof(gDebugText_Reverse)]; + u8 stereoStr[sizeof(gDebugText_Stereo)]; + + memcpy(bbackStr, gDebugText_BBack, sizeof(gDebugText_BBack)); + memcpy(aplayStr, gDebugText_APlay, sizeof(gDebugText_APlay)); + memcpy(voiceStr, gDebugText_Voice, sizeof(gDebugText_Voice)); + memcpy(volumeStr, gDebugText_Volume, sizeof(gDebugText_Volume)); + memcpy(panpotStr, gDebugText_Panpot, sizeof(gDebugText_Panpot)); + memcpy(pitchStr, gDebugText_Pitch, sizeof(gDebugText_Pitch)); + memcpy(lengthStr, gDebugText_Length, sizeof(gDebugText_Length)); + memcpy(releaseStr, gDebugText_Release, sizeof(gDebugText_Release)); + memcpy(progressStr, gDebugText_Progress, sizeof(gDebugText_Progress)); + memcpy(chorusStr, gDebugText_Chorus, sizeof(gDebugText_Chorus)); + memcpy(priorityStr, gDebugText_Priority, sizeof(gDebugText_Priority)); + memcpy(playingStr, gDebugText_Playing, sizeof(gDebugText_Playing)); + memcpy(reverseStr, gDebugText_Reverse, sizeof(gDebugText_Reverse)); + memcpy(stereoStr, gDebugText_Stereo, sizeof(gDebugText_Stereo)); + + REG_DISPCNT = 0x3140; + MenuDrawTextWindow(0, 0, 0x1D, 0x13); + MenuPrint(bbackStr, 0x13, 0x4); + MenuPrint(aplayStr, 0x13, 0x2); + MenuPrint(voiceStr, 0x2, 0x1); + MenuPrint(volumeStr, 0x2, 0x3); + MenuPrint(panpotStr, 0x2, 0x5); + MenuPrint(pitchStr, 0x2, 0x7); + MenuPrint(lengthStr, 0x2, 0x9); + MenuPrint(releaseStr, 0x2, 0xB); + MenuPrint(progressStr, 0x2, 0xD); + MenuPrint(chorusStr, 0x2, 0xF); + MenuPrint(priorityStr, 0x2, 0x11); + MenuPrint(playingStr, 0x13, 0x10); + MenuPrint(reverseStr, 0x13, 0xE); + MenuPrint(stereoStr, 0x13, 0xC); + REG_WIN0H = WIN_RANGE(0, 240); + REG_WIN0V = WIN_RANGE(0, 160); + gUnknown_020387B3 = 0; + gUnknown_020387B1 = 0; + gUnknown_020387B2 = 0; + gUnknown_03005D30 = NULL; + gUnknown_020387D8 = 0; + gUnknown_020387D9 = 1; + gUnknown_020387B4[CRY_TEST_UNK0] = 0; + gUnknown_020387B4[CRY_TEST_VOLUME] = 0x78; + gUnknown_020387B4[CRY_TEST_PANPOT] = 0; + gUnknown_020387B4[CRY_TEST_PITCH] = 0x3C00; + gUnknown_020387B4[CRY_TEST_LENGTH] = 0xB4; + gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; + gUnknown_020387B4[CRY_TEST_RELEASE] = 0; + gUnknown_020387B4[CRY_TEST_CHORUS] = 0; + gUnknown_020387B4[CRY_TEST_PRIORITY] = 2; + sub_80BAD5C(); + sub_80BAE10(0, 0); + TASK.FUNC = sub_80BAA48; +} + +void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput +{ + if(gMain.newKeys & B_BUTTON) + { + REG_DISPCNT = 0x7140; + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(1, 31); + MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); + TASK.FUNC = sub_80BA258; + return; + } + if(gMain.newAndRepeatedKeys & DPAD_UP) // _080BAAA8 + { + u8 backupVar = gUnknown_020387B3; + if(--gUnknown_020387B3 < 0) + gUnknown_020387B3 = 8; + + sub_80BAE10(backupVar, gUnknown_020387B3); + return; + } + if(gMain.newAndRepeatedKeys & DPAD_DOWN) // _080BAAD0 + { + u8 backupVar = gUnknown_020387B3; + if(++gUnknown_020387B3 > 8) + gUnknown_020387B3 = 0; + + sub_80BAE10(backupVar, gUnknown_020387B3); + return; + } + if(gMain.newKeys & START_BUTTON) // _080BAAF8 + { + gUnknown_020387D8 ^= 1; + sub_80BAD5C(); + return; + } + if(gMain.newKeys & SELECT_BUTTON) // _080BAB14 + { + gUnknown_020387D9 ^= 1; + sub_80BAD5C(); + SetPokemonCryStereo(gUnknown_020387D9); + return; + } + if(gMain.newAndRepeatedKeys & R_BUTTON) // _080BAB38 + { + sub_80BACDC(10); + sub_80BAD5C(); + return; + } + if(gMain.newAndRepeatedKeys & L_BUTTON) // _080BAB46 + { + sub_80BACDC(-10); + sub_80BAD5C(); + return; + } + if(gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BAB56 + { + sub_80BACDC(-1); + sub_80BAD5C(); + return; + } + if(gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BAB64 + { + sub_80BACDC(1); + sub_80BAD5C(); + return; + } + if(gMain.newKeys & A_BUTTON) // _080BAB78 + { + u8 divide, remaining; + + SetPokemonCryVolume(gUnknown_020387B4[CRY_TEST_VOLUME]); + SetPokemonCryPanpot(gUnknown_020387B4[CRY_TEST_PANPOT]); + SetPokemonCryPitch(gUnknown_020387B4[CRY_TEST_PITCH]); + SetPokemonCryLength(gUnknown_020387B4[CRY_TEST_LENGTH]); + SetPokemonCryProgress(gUnknown_020387B4[CRY_TEST_PROGRESS]); + SetPokemonCryRelease(gUnknown_020387B4[CRY_TEST_RELEASE]); + SetPokemonCryChorus(gUnknown_020387B4[CRY_TEST_CHORUS]); + SetPokemonCryPriority(gUnknown_020387B4[CRY_TEST_PRIORITY]); + + remaining = gUnknown_020387B4[CRY_TEST_UNK0] % 128; + divide = gUnknown_020387B4[CRY_TEST_UNK0] / 128; + + switch(divide) + { + case 0: + if(gUnknown_020387D8) + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84537C0[remaining]); + else + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452590[remaining]); + break; + case 1: + if(gUnknown_020387D8) + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453DC0[remaining]); + else + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452B90[remaining]); + break; + case 2: + if(gUnknown_020387D8) + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84543C0[remaining]); + else + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453190[remaining]); + break; + case 3: + if(gUnknown_020387D8) + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84549C0[remaining]); + else + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453790[remaining]); + break; + } + } + + // _080BACA2 + if(gUnknown_03005D30 != NULL) + { + gUnknown_020387B1 = IsPokemonCryPlaying(gUnknown_03005D30); + + if(gUnknown_020387B1 != gUnknown_020387B2) + sub_80BAD5C(); + + gUnknown_020387B2 = gUnknown_020387B1; + } +} + +void sub_80BACDC(s8 var) +{ + int minMaxArray[ARRAY_COUNT(gUnknown_083D039C)]; + + memcpy(minMaxArray, gUnknown_083D039C, sizeof(gUnknown_083D039C)); + gUnknown_020387B4[gUnknown_020387B3] += var; + + if(gUnknown_020387B4[gUnknown_020387B3] > minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)]) + gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MIN)]; + + if(gUnknown_020387B4[gUnknown_020387B3] < minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MIN)]) + gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)]; +} + +void sub_80BAD5C(void) +{ + sub_80BAE78(gUnknown_020387B4[CRY_TEST_UNK0] + 1, 0xB, 0x1, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_VOLUME], 0xB, 0x3, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_PANPOT], 0xB, 0x5, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_PITCH], 0xB, 0x7, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_LENGTH], 0xB, 0x9, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_RELEASE], 0xB, 0xB, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_PROGRESS], 0xB, 0xD, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_CHORUS], 0xB, 0xF, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_PRIORITY], 0xB, 0x11, 0x5); + sub_80BAE78(gUnknown_020387B1, 0x1B, 0x10, 0x1); + sub_80BAE78(gUnknown_020387D8, 0x1B, 0xE, 0x1); + sub_80BAE78(gUnknown_020387D9, 0x1B, 0xC, 0x1); +} + +void sub_80BAE10(u8 var1, u8 var2) +{ + u8 str1[sizeof(gUnknown_083D03DC)]; + u8 str2[sizeof(gUnknown_083D03DE)]; + + memcpy(str1, gUnknown_083D03DC, sizeof(gUnknown_083D03DC)); + memcpy(str2, gUnknown_083D03DE, sizeof(gUnknown_083D03DE)); + + MenuPrint(str2, gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 1)]); + MenuPrint(str1, gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 1)]); +} + +/*void sub_80BAE78(int var1, u16 var2, u16 var3, u8 var4) +{ + u32 powers[6]; + u8 str[8]; + u8 i; + u8 someVar, someVar2; + + memcpy(powers, gUnknown_083D03E0, sizeof(powers); + + for(i = 0; i < var4; i++) + str[i] = 0; + + str[var4 + 1] = CHAR_0; + someVar = 0; + + if(var1 < 0) // make absolute value? wtf + { + var1 = -var1; // just use abs? + someVar = 1; + } + + // _080BAED6 + someVar2 = 0; + if(var4 == 1) + someVar2 = 1; + + // _080BAEE2 + for(;;) + { + + } +}*/ + +// no. +__attribute__((naked)) +void sub_80BAE78(int var1, u16 var2, u16 var3, u8 var4) +{ + 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\ + mov r8, r0\n\ + lsls r1, 16\n\ + lsrs r6, r1, 16\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + lsls r3, 24\n\ + lsrs r7, r3, 24\n\ + mov r1, sp\n\ + ldr r0, _080BAF80 @ =gUnknown_083D03E0\n\ + ldm r0!, {r3-r5}\n\ + stm r1!, {r3-r5}\n\ + ldm r0!, {r3-r5}\n\ + stm r1!, {r3-r5}\n\ + movs r5, 0\n\ + add r0, sp, 0x18\n\ + mov r9, r0\n\ + cmp r5, r7\n\ + bgt _080BAEC0\n\ + mov r4, r9\n\ + movs r3, 0\n\ +_080BAEAC:\n\ + lsls r0, r5, 24\n\ + asrs r0, 24\n\ + adds r1, r4, r0\n\ + strb r3, [r1]\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + asrs r0, 24\n\ + cmp r0, r7\n\ + ble _080BAEAC\n\ +_080BAEC0:\n\ + adds r0, r7, 0x1\n\ + add r0, r9\n\ + movs r1, 0xFF\n\ + strb r1, [r0]\n\ + movs r1, 0\n\ + mov r3, r8\n\ + cmp r3, 0\n\ + bge _080BAED6\n\ + negs r3, r3\n\ + mov r8, r3\n\ + movs r1, 0x1\n\ +_080BAED6:\n\ + movs r4, 0\n\ + mov r10, r4\n\ + cmp r7, 0x1\n\ + bne _080BAEE2\n\ + movs r5, 0x1\n\ + mov r10, r5\n\ +_080BAEE2:\n\ + subs r0, r7, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + lsls r0, r5, 24\n\ + lsls r6, 24\n\ + str r6, [sp, 0x24]\n\ + lsls r2, 24\n\ + str r2, [sp, 0x28]\n\ + cmp r0, 0\n\ + blt _080BAF62\n\ + str r1, [sp, 0x20]\n\ +_080BAEF8:\n\ + asrs r6, r0, 24\n\ + lsls r0, r6, 2\n\ + add r0, sp\n\ + ldr r1, [r0]\n\ + mov r0, r8\n\ + bl __divsi3\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + cmp r0, 0\n\ + bne _080BAF1A\n\ + mov r0, r10\n\ + cmp r0, 0\n\ + bne _080BAF1A\n\ + lsls r4, r5, 24\n\ + cmp r6, 0\n\ + bne _080BAF46\n\ +_080BAF1A:\n\ + lsls r4, r5, 24\n\ + ldr r3, [sp, 0x20]\n\ + cmp r3, 0\n\ + beq _080BAF34\n\ + mov r5, r10\n\ + cmp r5, 0\n\ + bne _080BAF34\n\ + asrs r0, r4, 24\n\ + subs r0, r7, r0\n\ + subs r0, 0x1\n\ + add r0, r9\n\ + movs r1, 0xAE\n\ + strb r1, [r0]\n\ +_080BAF34:\n\ + asrs r1, r4, 24\n\ + subs r1, r7, r1\n\ + add r1, r9\n\ + lsls r0, r2, 24\n\ + asrs r0, 24\n\ + subs r0, 0x5F\n\ + strb r0, [r1]\n\ + movs r0, 0x1\n\ + mov r10, r0\n\ +_080BAF46:\n\ + asrs r4, 24\n\ + lsls r0, r4, 2\n\ + add r0, sp\n\ + ldr r1, [r0]\n\ + mov r0, r8\n\ + bl __modsi3\n\ + mov r8, r0\n\ + subs r4, 0x1\n\ + lsls r4, 24\n\ + lsrs r5, r4, 24\n\ + lsls r0, r5, 24\n\ + cmp r0, 0\n\ + bge _080BAEF8\n\ +_080BAF62:\n\ + ldr r3, [sp, 0x24]\n\ + lsrs r1, r3, 24\n\ + ldr r4, [sp, 0x28]\n\ + lsrs r2, r4, 24\n\ + mov r0, r9\n\ + bl MenuPrint\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 {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080BAF80: .4byte gUnknown_083D03E0\n\ + .syntax divided"); +} + +void sub_80BAF84(u8 taskId) +{ + u8 seStr[sizeof(gOtherText_SE)]; + u8 panStr[sizeof(gOtherText_Pan)]; + u8 playingStr[sizeof(gDebugText_Playing)]; + + memcpy(seStr, gOtherText_SE, sizeof(gOtherText_SE)); + memcpy(panStr, gOtherText_Pan, sizeof(gOtherText_Pan)); + memcpy(playingStr, gDebugText_Playing, sizeof(gDebugText_Playing)); + + REG_DISPCNT = 0x3140; + MenuDrawTextWindow(0, 0, 0x1D, 0x13); + MenuPrint(seStr, 3, 2); + MenuPrint(panStr, 3, 4); + MenuPrint(playingStr, 3, 8); + REG_WIN0H = WIN_RANGE(0, 240); + REG_WIN0V = WIN_RANGE(0, 160); + gUnknown_020387B4[CRY_TEST_UNK0] = 1; + gUnknown_020387B4[CRY_TEST_PANPOT] = 0; + gUnknown_020387B4[CRY_TEST_CHORUS] = 0; + gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; + gUnknown_020387B4[CRY_TEST_RELEASE] = 0; + sub_80BB1D4(); + TASK.FUNC = sub_80BB038; +} + +void sub_80BB038(u8 taskId) +{ + sub_80BB1D4(); + if(gUnknown_020387B4[CRY_TEST_PROGRESS]) + { + if(gUnknown_020387B4[CRY_TEST_RELEASE]) + { + gUnknown_020387B4[CRY_TEST_RELEASE]--; + } + else // _080BB05C + { + s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]; + if(panpot != -128) + { + if(panpot == 0x7F) + { + gUnknown_020387B4[CRY_TEST_CHORUS] += 2; + if(gUnknown_020387B4[CRY_TEST_CHORUS] < 0x3F) + SE12PanpotControl(gUnknown_020387B4[CRY_TEST_CHORUS]); + } + } + else // _080BB08C + { + gUnknown_020387B4[CRY_TEST_CHORUS] -= 2; + if(gUnknown_020387B4[CRY_TEST_CHORUS] > -0x40) + SE12PanpotControl(gUnknown_020387B4[CRY_TEST_CHORUS]); + } + } + } + // _080BB0A2 + if(gMain.newKeys & B_BUTTON) + { + REG_DISPCNT = 0x7140; + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(1, 31); + MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); + TASK.FUNC = sub_80BA258; + return; + } + if(gMain.newKeys & A_BUTTON) // _080BB104 + { + s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]; + if(panpot != -128) + { + if(panpot == 0x7F) + { + PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], -0x40); + gUnknown_020387B4[CRY_TEST_CHORUS] = -0x40; + gUnknown_020387B4[CRY_TEST_PROGRESS] = 1; + gUnknown_020387B4[CRY_TEST_RELEASE] = 0x1E; + return; + } + } + else // _080BB140 + { + PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], 0x3F); + gUnknown_020387B4[CRY_TEST_CHORUS] = 0x3F; + gUnknown_020387B4[CRY_TEST_PROGRESS] = 1; + gUnknown_020387B4[CRY_TEST_RELEASE] = 0x1E; + return; + } + // _080BB154 + PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], panpot); + gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; + return; + } + if(gMain.newKeys & L_BUTTON) // _080BB15E + { + gUnknown_020387B4[CRY_TEST_PANPOT]++; + if(gUnknown_020387B4[CRY_TEST_PANPOT] > 4) + gUnknown_020387B4[CRY_TEST_PANPOT] = 0; + } + if(gMain.newKeys & R_BUTTON) // _080BB176 + { + gUnknown_020387B4[CRY_TEST_PANPOT]--; + if(gUnknown_020387B4[CRY_TEST_PANPOT] < 0) + gUnknown_020387B4[CRY_TEST_PANPOT] = 4; + } + if(gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BB192 + { + gUnknown_020387B4[CRY_TEST_UNK0]++; + if(gUnknown_020387B4[CRY_TEST_UNK0] > 0xF7) + gUnknown_020387B4[CRY_TEST_UNK0] = 0; + } + else if(gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BB1B0 + { + gUnknown_020387B4[CRY_TEST_UNK0]--; + if(gUnknown_020387B4[CRY_TEST_UNK0] < 0) + gUnknown_020387B4[CRY_TEST_UNK0] = 0xF7; + } +} + +void sub_80BB1D4(void) +{ + u8 lrStr[sizeof(gOtherText_LR)]; + u8 rlStr[sizeof(gOtherText_RL)]; + + memcpy(lrStr, gOtherText_LR, sizeof(lrStr)); + memcpy(rlStr, gOtherText_RL, sizeof(rlStr)); + + sub_80BAE78(gUnknown_020387B4[CRY_TEST_UNK0], 7, 2, 3); + + switch(gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]) + { + case 0x7F: + MenuPrint(lrStr, 7, 4); + break; + case -0x80: + MenuPrint(rlStr, 7, 4); + break; + default: + sub_80BAE78(gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]], 7, 4, 3); + break; + } + sub_80BAE78(IsSEPlaying(), 12, 8, 1); +} + +void sub_80BB25C(u8 taskId) +{ + struct CryRelatedStruct cryStruct, cryStruct2; + u8 zero; + + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + gUnknown_03005D34 = 1; + ResetSpriteData(); + FreeAllSpritePalettes(); + + cryStruct.unk0 = 0x2000; + cryStruct.unk2 = 29; + cryStruct.paletteNo = 12; + cryStruct.yPos = 30; + cryStruct.xPos = 4; + + zero = 0; // wtf? + gUnknown_03005E98 = 0; + + while(sub_8119E3C(&cryStruct, 3) == FALSE); + + cryStruct2.unk0 = 0; + cryStruct2.unk2 = 15; + cryStruct2.paletteNo = 13; + cryStruct2.xPos = 12; + cryStruct2.yPos = 12; + + zero = 0; // wtf? + gUnknown_03005E98 = 0; + + while(ShowPokedexCryScreen(&cryStruct2, 2) == FALSE); + + MenuDrawTextWindow(0, 16, 5, 19); + sub_80BB494(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG2CNT = 0xF01; + REG_BG3CNT = 0x1D03; + REG_DISPCNT = 0x1d40; + m4aMPlayFadeOutTemporarily(&gMPlay_BGM, 2); + TASK.FUNC = sub_80BB3B4; +} + +void sub_80BB3B4(u8 taskId) +{ + sub_8119F88(3); + + if(gMain.newKeys & A_BUTTON) + { + sub_811A050(gUnknown_03005D34); + } + if(gMain.newKeys & R_BUTTON) + { + StopCryAndClearCrySongs(); + } + if(gMain.newAndRepeatedKeys & DPAD_UP) + { + if(--gUnknown_03005D34 == 0) + gUnknown_03005D34 = 384; // total species + sub_80BB494(); + } + if(gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if(++gUnknown_03005D34 > 384) + gUnknown_03005D34 = 1; + sub_80BB494(); + } + if(gMain.newKeys & B_BUTTON) + { + REG_DISPCNT = 0x7140; + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(1, 31); + MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); + TASK.FUNC = sub_80BA258; + DestroyCryMeterNeedleSprite(); + } +} + +void sub_80BB494(void) +{ + sub_80BAE78(gUnknown_03005D34, 1, 17, 3); +} diff --git a/src/engine/sprite.c b/src/engine/sprite.c new file mode 100644 index 000000000..fb8c2b648 --- /dev/null +++ b/src/engine/sprite.c @@ -0,0 +1,1802 @@ +#include "global.h" +#include "sprite.h" +#include "main.h" +#include "menu_cursor.h" +#include "palette.h" + +#define MAX_SPRITE_COPY_REQUESTS 64 + +#define OAM_MATRIX_COUNT 32 + +#define SET_SPRITE_TILE_RANGE(index, start, count) \ +{ \ + sSpriteTileRanges[index * 2] = start; \ + (sSpriteTileRanges + 1)[index * 2] = count; \ +} + +#define ALLOC_SPRITE_TILE(n) \ +{ \ + gSpriteTileAllocBitmap[(n) / 8] |= (1 << ((n) % 8)); \ +} + +#define FREE_SPRITE_TILE(n) \ +{ \ + gSpriteTileAllocBitmap[(n) / 8] &= ~(1 << ((n) % 8)); \ +} + +#define SPRITE_TILE_IS_ALLOCATED(n) ((gSpriteTileAllocBitmap[(n) / 8] >> ((n) % 8)) & 1) + +struct OamMatrix +{ + s16 a; + s16 b; + s16 c; + s16 d; +}; + +struct SpriteCopyRequest +{ + const u8 *src; + u8 *dest; + u16 size; +}; + +struct OamDimensions +{ + s8 width; + s8 height; +}; + +static void UpdateOamCoords(void); +static void BuildSpritePriorities(void); +static void SortSprites(void); +static void CopyMatricesToOamBuffer(void); +static void AddSpritesToOamBuffer(void); +static u8 CreateSpriteAt(u8 index, const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority); +static void ClearSpriteCopyRequests(void); +static void ResetOamMatrices(void); +static void ResetSprite(struct Sprite *sprite); +static s16 AllocSpriteTiles(u16 tileCount); +static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images); +static void ResetAllSprites(void); +static void BeginAnim(struct Sprite *sprite); +static void ContinueAnim(struct Sprite *sprite); +static void AnimCmd_frame(struct Sprite *sprite); +static void AnimCmd_end(struct Sprite *sprite); +static void AnimCmd_jump(struct Sprite *sprite); +static void AnimCmd_loop(struct Sprite *sprite); +static void BeginAnimLoop(struct Sprite *sprite); +static void ContinueAnimLoop(struct Sprite *sprite); +static void JumpToTopOfAnimLoop(struct Sprite *sprite); +static void BeginAffineAnim(struct Sprite *sprite); +static void ContinueAffineAnim(struct Sprite *sprite); +static void AffineAnimDelay(u8 matrixNum, struct Sprite *sprite); +static void AffineAnimCmd_loop(u8 matrixNum, struct Sprite *sprite); +static void BeginAffineAnimLoop(u8 matrixNum, struct Sprite *sprite); +static void ContinueAffineAnimLoop(u8 matrixNum, struct Sprite *sprite); +static void JumpToTopOfAffineAnimLoop(u8 matrixNum, struct Sprite *sprite); +static void AffineAnimCmd_jump(u8 matrixNum, struct Sprite *sprite); +static void AffineAnimCmd_end(u8 matrixNum, struct Sprite *sprite); +static void AffineAnimCmd_frame(u8 matrixNum, struct Sprite *sprite); +static void CopyOamMatrix(u8 destMatrixIndex, struct OamMatrix *srcMatrix); +static u8 GetSpriteMatrixNum(struct Sprite *sprite); +static void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip); +static void AffineAnimStateRestartAnim(u8 matrixNum); +static void AffineAnimStateStartAnim(u8 matrixNum, u8 animNum); +static void AffineAnimStateReset(u8 matrixNum); +static void ApplyAffineAnimFrameAbsolute(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd); +static void DecrementAnimDelayCounter(struct Sprite *sprite); +static bool8 DecrementAffineAnimDelayCounter(struct Sprite *sprite, u8 matrixNum); +static void ApplyAffineAnimFrameRelativeAndUpdateMatrix(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd); +static s16 ConvertScaleParam(s16 scale); +static void GetAffineAnimFrame(u8 matrixNum, struct Sprite *sprite, struct AffineAnimFrameCmd *frameCmd); +static void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd); +static void ResetAffineAnimData(void); +static u8 IndexOfSpriteTileTag(u16 tag); +static void AllocSpriteTileRange(u16 tag, u16 start, u16 count); +static void DoLoadSpritePalette(const u16 *src, u16 paletteOffset); + +typedef void (*AnimFunc)(struct Sprite *); +typedef void (*AnimCmdFunc)(struct Sprite *); +typedef void (*AffineAnimCmdFunc)(u8 matrixNum, struct Sprite *); + +#define DUMMY_OAM_DATA \ +{ \ + 160, /* Y (off-screen) */ \ + 0, \ + 0, \ + 0, \ + 0, \ + 0, \ + 304, /* X */ \ + 0, \ + 0, \ + 0, \ + 3, /* lowest priority */ \ + 0, \ + 0 \ +} + +#define ANIM_END 0xFFFF +#define AFFINE_ANIM_END 0x7FFF + +// forward declarations +const union AnimCmd * const gDummySpriteAnimTable[]; +const union AffineAnimCmd * const gDummySpriteAffineAnimTable[]; +const struct SpriteTemplate gDummySpriteTemplate; + +// Unreferenced error message. +// It means "The DMA transfer request table has exceeded its limit." +static const u8 sDmaOverErrorMsg[] = + _( + "DMA OVER\n" + "DMAてんそう\n" + "リクエストテーブルが\n" + "オーバーしました" + ); + +// Unreferenced data. +static const u8 sUnknownData[24] = +{ + 0x01, 0x04, 0x10, 0x40, + 0x02, 0x04, 0x08, 0x20, + 0x02, 0x04, 0x08, 0x20, + 0x01, 0x04, 0x10, 0x40, + 0x02, 0x04, 0x08, 0x20, + 0x02, 0x04, 0x08, 0x20, +}; + +static const u8 sCenterToCornerVecTable[3][4][2] = +{ + { // square + { -4, -4 }, + { -8, -8 }, + { -16, -16 }, + { -32, -32 }, + }, + { // horizontal rectangle + { -8, -4 }, + { -16, -4 }, + { -16, -8 }, + { -32, -16 }, + }, + { // vertical rectangle + { -4, -8 }, + { -4, -16 }, + { -8, -16 }, + { -16, -32 }, + }, +}; + +static const struct Sprite sDummySprite = +{ + .oam = DUMMY_OAM_DATA, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .template = &gDummySpriteTemplate, + .subspriteTables = NULL, + .callback = SpriteCallbackDummy, + .pos1 = { 304, 160 }, + .pos2 = { 0, 0 }, + .centerToCornerVecX = 0, + .centerToCornerVecY = 0, + .animNum = 0, + .animCmdIndex = 0, + .animDelayCounter = 0, + .animPaused = 0, + .affineAnimPaused = 0, + .animLoopCounter = 0, + .data0 = 0, + .data1 = 0, + .data2 = 0, + .data3 = 0, + .data4 = 0, + .data5 = 0, + .data6 = 0, + .data7 = 0, + .inUse = 0, + .coordOffsetEnabled = 0, + .invisible = 0, + .flags_3 = 0, + .flags_4 = 0, + .flags_5 = 0, + .flags_6 = 0, + .flags_7 = 0, + .hFlip = 0, + .vFlip = 0, + .animBeginning = 0, + .affineAnimBeginning = 0, + .animEnded = 0, + .affineAnimEnded = 0, + .usingSheet = 0, + .flags_f = 0, + .sheetTileStart = 0, + .subspriteTableNum = 0, + .subspriteMode = 0, + .subpriority = 0xFF +}; + +const struct OamData gDummyOamData = DUMMY_OAM_DATA; + +static const union AnimCmd sDummyAnim = { ANIM_END }; + +const union AnimCmd * const gDummySpriteAnimTable[] = { &sDummyAnim }; + +static const union AffineAnimCmd sDummyAffineAnim = { AFFINE_ANIM_END }; + +const union AffineAnimCmd * const gDummySpriteAffineAnimTable[] = { &sDummyAffineAnim }; + +const struct SpriteTemplate gDummySpriteTemplate = +{ + .tileTag = 0, + .paletteTag = 0xFFFF, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +// TODO: Find out what these are used for. +static const u16 sOamBitmasks[9] = +{ + 0xFF00, 0x00FF, 0x001F, + 0xFE00, 0x01FF, 0x03E0, + 0xFC00, 0x03FF, 0xFC00, +}; + +static const AnimFunc sAnimFuncs[] = +{ + ContinueAnim, + BeginAnim, +}; + +static const AnimFunc sAffineAnimFuncs[] = +{ + ContinueAffineAnim, + BeginAffineAnim, +}; + +static const AnimCmdFunc sAnimCmdFuncs[] = +{ + AnimCmd_loop, + AnimCmd_jump, + AnimCmd_end, + AnimCmd_frame, +}; + +static const AffineAnimCmdFunc sAffineAnimCmdFuncs[] = +{ + AffineAnimCmd_loop, + AffineAnimCmd_jump, + AffineAnimCmd_end, + AffineAnimCmd_frame, +}; + +static const struct OamDimensions sOamDimensions[3][4] = +{ + { // square + { 8, 8 }, + { 16, 16 }, + { 32, 32 }, + { 64, 64 }, + }, + { // horizontal rectangle + { 16, 8 }, + { 32, 8 }, + { 32, 16 }, + { 64, 32 }, + }, + { // vertical rectangle + { 8, 16 }, + { 8, 32 }, + { 16, 32 }, + { 32, 64 }, + }, +}; + +static u16 sSpriteTileRangeTags[MAX_SPRITES]; +static u16 sSpriteTileRanges[MAX_SPRITES * 2]; +static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT]; +static u16 sSpritePaletteTags[16]; + +u8 gSpriteOrder[MAX_SPRITES]; +bool8 gShouldProcessSpriteCopyRequests; +u8 gSpriteCopyRequestCount; +struct SpriteCopyRequest gSpriteCopyRequests[MAX_SPRITE_COPY_REQUESTS]; +u8 gOamLimit; +u16 gReservedSpriteTileCount; +u8 gSpriteTileAllocBitmap[128]; +s16 gSpriteCoordOffsetX; +s16 gSpriteCoordOffsetY; +u32 gOamMatrixAllocBitmap; +struct OamMatrix gOamMatrices[OAM_MATRIX_COUNT]; +u8 gReservedSpritePaletteCount; + +EWRAM_DATA struct Sprite gSprites[MAX_SPRITES + 1] = {0}; +EWRAM_DATA u16 gSpritePriorities[MAX_SPRITES] = {0}; +EWRAM_DATA u8 gAffineAnimsDisabled = {0}; + +void ResetSpriteData(void) +{ + ResetOamRange(0, 128); + ResetAllSprites(); + ClearSpriteCopyRequests(); + ResetAffineAnimData(); + FreeSpriteTileRanges(); + gOamLimit = 64; + gReservedSpriteTileCount = 0; + AllocSpriteTiles(0); + gSpriteCoordOffsetX = 0; + gSpriteCoordOffsetY = 0; +} + +void AnimateSprites(void) +{ + u8 i; + for (i = 0; i < MAX_SPRITES; i++) + { + struct Sprite *sprite = &gSprites[i]; + + if (sprite->inUse) + { + sprite->callback(sprite); + + if (sprite->inUse) + AnimateSprite(sprite); + } + } +} + +void BuildOamBuffer(void) +{ + u8 temp; + UpdateOamCoords(); + BuildSpritePriorities(); + SortSprites(); + temp = gMain.oamLoadDisabled; + gMain.oamLoadDisabled = TRUE; + AddSpritesToOamBuffer(); + CopyMatricesToOamBuffer(); + gMain.oamLoadDisabled = temp; + gShouldProcessSpriteCopyRequests = TRUE; +} + +static void UpdateOamCoords(void) +{ + u8 i; + for (i = 0; i < MAX_SPRITES; i++) + { + struct Sprite *sprite = &gSprites[i]; + if (sprite->inUse && !sprite->invisible) + { + if (sprite->coordOffsetEnabled) + { + sprite->oam.x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; + sprite->oam.y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; + } + else + { + sprite->oam.x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; + sprite->oam.y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; + } + } + } +} + +static void BuildSpritePriorities(void) +{ + u16 i; + for (i = 0; i < MAX_SPRITES; i++) + { + struct Sprite *sprite = &gSprites[i]; + u16 priority = sprite->subpriority | (sprite->oam.priority << 8); + gSpritePriorities[i] = priority; + } +} + +static void SortSprites(void) +{ + u8 i; + for (i = 1; i < MAX_SPRITES; i++) + { + u8 j = i; + struct Sprite *sprite1 = &gSprites[gSpriteOrder[i - 1]]; + struct Sprite *sprite2 = &gSprites[gSpriteOrder[i]]; + u16 sprite1Priority = gSpritePriorities[gSpriteOrder[i - 1]]; + u16 sprite2Priority = gSpritePriorities[gSpriteOrder[i]]; + s16 sprite1Y = sprite1->oam.y; + s16 sprite2Y = sprite2->oam.y; + + if (sprite1Y >= DISPLAY_HEIGHT) + sprite1Y = sprite1Y - 256; + + if (sprite2Y >= DISPLAY_HEIGHT) + sprite2Y = sprite2Y - 256; + + if (sprite1->oam.affineMode == ST_OAM_AFFINE_DOUBLE + && sprite1->oam.size == 3) + { + u32 shape = sprite1->oam.shape; + if (shape == ST_OAM_SQUARE || shape == 2) + { + if (sprite1Y > 128) + sprite1Y = sprite1Y - 256; + } + } + + if (sprite2->oam.affineMode == ST_OAM_AFFINE_DOUBLE + && sprite2->oam.size == 3) + { + u32 shape = sprite2->oam.shape; + if (shape == ST_OAM_SQUARE || shape == ST_OAM_V_RECTANGLE) + { + if (sprite2Y > 128) + sprite2Y = sprite2Y - 256; + } + } + + while (j > 0 + && ((sprite1Priority > sprite2Priority) + || (sprite1Priority == sprite2Priority && sprite1Y < sprite2Y))) + { + u8 temp = gSpriteOrder[j]; + gSpriteOrder[j] = gSpriteOrder[j - 1]; + gSpriteOrder[j - 1] = temp; + + // UB: If j equals 1, then j-- makes j equal 0. + // Then, gSpriteOrder[-1] gets accessed below. + // Although this doesn't result in a bug in the ROM, + // the behavior is undefined. + j--; + + sprite1 = &gSprites[gSpriteOrder[j - 1]]; + sprite2 = &gSprites[gSpriteOrder[j]]; + sprite1Priority = gSpritePriorities[gSpriteOrder[j - 1]]; + sprite2Priority = gSpritePriorities[gSpriteOrder[j]]; + sprite1Y = sprite1->oam.y; + sprite2Y = sprite2->oam.y; + + if (sprite1Y >= DISPLAY_HEIGHT) + sprite1Y = sprite1Y - 256; + + if (sprite2Y >= DISPLAY_HEIGHT) + sprite2Y = sprite2Y - 256; + + if (sprite1->oam.affineMode == ST_OAM_AFFINE_DOUBLE + && sprite1->oam.size == 3) + { + u32 shape = sprite1->oam.shape; + if (shape == ST_OAM_SQUARE || shape == ST_OAM_V_RECTANGLE) + { + if (sprite1Y > 128) + sprite1Y = sprite1Y - 256; + } + } + + if (sprite2->oam.affineMode == ST_OAM_AFFINE_DOUBLE + && sprite2->oam.size == 3) + { + u32 shape = sprite2->oam.shape; + if (shape == ST_OAM_SQUARE || shape == ST_OAM_V_RECTANGLE) + { + if (sprite2Y > 128) + sprite2Y = sprite2Y - 256; + } + } + } + } +} + +static void CopyMatricesToOamBuffer(void) +{ + u8 i; + for (i = 0; i < OAM_MATRIX_COUNT; i++) + { + u32 base = 4 * i; + gMain.oamBuffer[base + 0].affineParam = gOamMatrices[i].a; + gMain.oamBuffer[base + 1].affineParam = gOamMatrices[i].b; + gMain.oamBuffer[base + 2].affineParam = gOamMatrices[i].c; + gMain.oamBuffer[base + 3].affineParam = gOamMatrices[i].d; + } +} + +static void AddSpritesToOamBuffer(void) +{ + u8 i = 0; + u8 oamIndex = 0; + + while (i < MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[gSpriteOrder[i]]; + if (sprite->inUse && !sprite->invisible && AddSpriteToOamBuffer(sprite, &oamIndex)) + break; + i++; + } + + gMain.objCount = oamIndex; + + while (oamIndex < gOamLimit) + { + gMain.oamBuffer[oamIndex] = gDummyOamData; + oamIndex++; + } +} + +u8 CreateSprite(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority) +{ + u8 i; + + for (i = 0; i < MAX_SPRITES; i++) + if (!gSprites[i].inUse) + return CreateSpriteAt(i, template, x, y, subpriority); + + return MAX_SPRITES; +} + +u8 CreateSpriteAtEnd(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority) +{ + s16 i; + + for (i = MAX_SPRITES - 1; i > -1; i--) + if (!gSprites[i].inUse) + return CreateSpriteAt(i, template, x, y, subpriority); + + return MAX_SPRITES; +} + +u8 CreateInvisibleSprite(void (*callback)(struct Sprite *)) +{ + u8 index = CreateSprite(&gDummySpriteTemplate, 0, 0, 31); + + if (index == MAX_SPRITES) + { + return MAX_SPRITES; + } + else + { + gSprites[index].invisible = TRUE; + gSprites[index].callback = callback; + return index; + } +} + +static u8 CreateSpriteAt(u8 index, const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority) +{ + struct Sprite *sprite = &gSprites[index]; + + ResetSprite(sprite); + + sprite->inUse = TRUE; + sprite->animBeginning = TRUE; + sprite->affineAnimBeginning = TRUE; + sprite->usingSheet = TRUE; + + sprite->subpriority = subpriority; + sprite->oam = *template->oam; + sprite->anims = template->anims; + sprite->affineAnims = template->affineAnims; + sprite->template = template; + sprite->callback = template->callback; + sprite->pos1.x = x; + sprite->pos1.y = y; + + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); + + if (template->tileTag == 0xFFFF) + { + s16 tileNum; + sprite->images = template->images; + tileNum = AllocSpriteTiles((u8)(sprite->images->size / TILE_SIZE_4BPP)); + if (tileNum == -1) + { + ResetSprite(sprite); + return MAX_SPRITES; + } + sprite->oam.tileNum = tileNum; + sprite->usingSheet = FALSE; + sprite->sheetTileStart = 0; + } + else + { + sprite->sheetTileStart = GetSpriteTileStartByTag(template->tileTag); + SetSpriteSheetFrameTileNum(sprite); + } + + if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) + InitSpriteAffineAnim(sprite); + + if (template->paletteTag != 0xFFFF) + sprite->oam.paletteNum = IndexOfSpritePaletteTag(template->paletteTag); + + return index; +} + +u8 CreateSpriteAndAnimate(struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority) +{ + u8 i; + + for (i = 0; i < MAX_SPRITES; i++) + { + struct Sprite *sprite = &gSprites[i]; + + if (!gSprites[i].inUse) + { + u8 index = CreateSpriteAt(i, template, x, y, subpriority); + + if (index == MAX_SPRITES) + return MAX_SPRITES; + + gSprites[i].callback(sprite); + + if (gSprites[i].inUse) + AnimateSprite(sprite); + + return index; + } + } + + return MAX_SPRITES; +} + +void DestroySprite(struct Sprite *sprite) +{ + if (sprite->inUse) + { + if (!sprite->usingSheet) + { + u16 i; + u16 tileEnd = (sprite->images->size / TILE_SIZE_4BPP) + sprite->oam.tileNum; + for (i = sprite->oam.tileNum; i < tileEnd; i++) + FREE_SPRITE_TILE(i); + } + ResetSprite(sprite); + } +} + +void ResetOamRange(u8 a, u8 b) +{ + u8 i; + + for (i = a; i < b; i++) + { + struct OamData *oamBuffer = gMain.oamBuffer; + oamBuffer[i] = *(struct OamData *)&gDummyOamData; + } +} + +void LoadOam(void) +{ + if (!gMain.oamLoadDisabled) + CpuCopy32(gMain.oamBuffer, (void *)OAM, sizeof(gMain.oamBuffer)); +} + +static void ClearSpriteCopyRequests(void) +{ + u8 i; + + gShouldProcessSpriteCopyRequests = FALSE; + gSpriteCopyRequestCount = 0; + + for (i = 0; i < MAX_SPRITE_COPY_REQUESTS; i++) + { + gSpriteCopyRequests[i].src = 0; + gSpriteCopyRequests[i].dest = 0; + gSpriteCopyRequests[i].size = 0; + } +} + +static void ResetOamMatrices(void) +{ + u8 i; + for (i = 0; i < OAM_MATRIX_COUNT; i++) + { + // set to identity matrix + gOamMatrices[i].a = 0x0100; + gOamMatrices[i].b = 0x0000; + gOamMatrices[i].c = 0x0000; + gOamMatrices[i].d = 0x0100; + } +} + +void SetOamMatrix(u8 matrixNum, u16 a, u16 b, u16 c, u16 d) +{ + gOamMatrices[matrixNum].a = a; + gOamMatrices[matrixNum].b = b; + gOamMatrices[matrixNum].c = c; + gOamMatrices[matrixNum].d = d; +} + +static void ResetSprite(struct Sprite *sprite) +{ + *sprite = sDummySprite; +} + +void CalcCenterToCornerVec(struct Sprite *sprite, u8 shape, u8 size, u8 affineMode) +{ + u8 x = sCenterToCornerVecTable[shape][size][0]; + u8 y = sCenterToCornerVecTable[shape][size][1]; + + if (affineMode & ST_OAM_AFFINE_DOUBLE_MASK) + { + x *= 2; + y *= 2; + } + + sprite->centerToCornerVecX = x; + sprite->centerToCornerVecY = y; +} + +static s16 AllocSpriteTiles(u16 tileCount) +{ + u16 i; + s16 start; + u16 numTilesFound; + + if (tileCount == 0) + { + // Free all unreserved tiles if the tile count is 0. + for (i = gReservedSpriteTileCount; i < TOTAL_OBJ_TILE_COUNT; i++) + FREE_SPRITE_TILE(i); + + return 0; + } + + i = gReservedSpriteTileCount; + + for (;;) + { + while (SPRITE_TILE_IS_ALLOCATED(i)) + { + i++; + + if (i == TOTAL_OBJ_TILE_COUNT) + return -1; + } + + start = i; + numTilesFound = 1; + + while (numTilesFound != tileCount) + { + i++; + + if (i == TOTAL_OBJ_TILE_COUNT) + return -1; + + if (!SPRITE_TILE_IS_ALLOCATED(i)) + numTilesFound++; + else + break; + } + + if (numTilesFound == tileCount) + break; + } + + for (i = start; i < tileCount + start; i++) + ALLOC_SPRITE_TILE(i); + + return start; +} + +u8 SpriteTileAllocBitmapOp(u16 bit, u8 op) +{ + u8 index = bit / 8; + u8 shift = bit % 8; + u8 val = bit % 8; + u8 retVal = 0; + + if (op == 0) + { + val = ~(1 << val); + gSpriteTileAllocBitmap[index] &= val; + } + else if (op == 1) + { + val = (1 << val); + gSpriteTileAllocBitmap[index] |= val; + } + else + { + retVal = 1 << shift; + retVal &= gSpriteTileAllocBitmap[index]; + } + + return retVal; +} + +void SpriteCallbackDummy(struct Sprite *sprite) +{ +} + +void ProcessSpriteCopyRequests(void) +{ + if (gShouldProcessSpriteCopyRequests) + { + u8 i = 0; + + while (gSpriteCopyRequestCount > 0) + { + CpuCopy16(gSpriteCopyRequests[i].src, gSpriteCopyRequests[i].dest, gSpriteCopyRequests[i].size); + gSpriteCopyRequestCount--; + i++; + } + + gShouldProcessSpriteCopyRequests = FALSE; + } +} + +static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images) +{ + if (gSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) + { + gSpriteCopyRequests[gSpriteCopyRequestCount].src = images[index].data; + gSpriteCopyRequests[gSpriteCopyRequestCount].dest = (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileNum; + gSpriteCopyRequests[gSpriteCopyRequestCount].size = images[index].size; + gSpriteCopyRequestCount++; + } +} + +void RequestSpriteCopy(const u8 *src, u8 *dest, u16 size) +{ + if (gSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) + { + gSpriteCopyRequests[gSpriteCopyRequestCount].src = src; + gSpriteCopyRequests[gSpriteCopyRequestCount].dest = dest; + gSpriteCopyRequests[gSpriteCopyRequestCount].size = size; + gSpriteCopyRequestCount++; + } +} + +void CopyFromSprites(u8 *dest) +{ + u32 i; + u8 *src = (u8 *)gSprites; + for (i = 0; i < sizeof(struct Sprite) * MAX_SPRITES; i++) + { + *dest = *src; + dest++; + src++; + } +} + +void CopyToSprites(u8 *src) +{ + u32 i; + u8 *dest = (u8 *)gSprites; + for (i = 0; i < sizeof(struct Sprite) * MAX_SPRITES; i++) + { + *dest = *src; + src++; + dest++; + } +} + +static void ResetAllSprites(void) +{ + u8 i; + + for (i = 0; i < MAX_SPRITES; i++) + { + ResetSprite(&gSprites[i]); + gSpriteOrder[i] = i; + } + + ResetSprite(&gSprites[i]); + sub_814A590(); +} + +void FreeSpriteTiles(struct Sprite *sprite) +{ + if (sprite->template->tileTag != 0xFFFF) + FreeSpriteTilesByTag(sprite->template->tileTag); +} + +void FreeSpritePalette(struct Sprite *sprite) +{ + FreeSpritePaletteByTag(sprite->template->paletteTag); +} + +void FreeSpriteOamMatrix(struct Sprite *sprite) +{ + if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) + { + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + } +} + +void DestroySpriteAndFreeResources(struct Sprite *sprite) +{ + FreeSpriteTiles(sprite); + FreeSpritePalette(sprite); + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); +} + +void sub_800142C(u32 a1, u32 a2, u16 *a3, u16 a4, u32 a5) +{ + u16 *d = a3; + struct OamData *oam = &gMain.oamBuffer[gMain.objCount]; + while (!(gMain.objCount & 0x80) && (s16)(d[0] + 1) != 0) + { + u16 *x = (u16 *)oam; + x[0] = (d[0] & sOamBitmasks[0]) | ((d[0] + a2) & sOamBitmasks[1]) | ((a4 & sOamBitmasks[2]) << 8); + x[1] = (d[1] & sOamBitmasks[3]) | ((d[1] + a1) & sOamBitmasks[4]) | ((a4 & sOamBitmasks[5]) << 4); + x[2] = (d[2] & sOamBitmasks[6]) | ((d[2] + a5) & sOamBitmasks[7]) | (a4 & sOamBitmasks[8]); + oam++; + gMain.objCount++; + d += 3; + } +} + +void AnimateSprite(struct Sprite *sprite) +{ + sAnimFuncs[sprite->animBeginning](sprite); + + if (!gAffineAnimsDisabled) + sAffineAnimFuncs[sprite->affineAnimBeginning](sprite); +} + +static void BeginAnim(struct Sprite *sprite) +{ + s16 imageValue; + u8 duration; + u8 hFlip; + u8 vFlip; + + sprite->animCmdIndex = 0; + sprite->animEnded = FALSE; + sprite->animLoopCounter = 0; + imageValue = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; + + if (imageValue != -1) + { + sprite->animBeginning = FALSE; + duration = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; + hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip; + vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip; + + if (duration) + duration--; + + sprite->animDelayCounter = duration; + + if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) + SetSpriteOamFlipBits(sprite, hFlip, vFlip); + + if (sprite->usingSheet) + sprite->oam.tileNum = sprite->sheetTileStart + imageValue; + else + RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images); + } +} + +static void ContinueAnim(struct Sprite *sprite) +{ + if (sprite->animDelayCounter) + { + u8 hFlip; + u8 vFlip; + DecrementAnimDelayCounter(sprite); + hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip; + vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip; + if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) + SetSpriteOamFlipBits(sprite, hFlip, vFlip); + } + else if (!sprite->animPaused) + { + s16 type; + s16 funcIndex; + sprite->animCmdIndex++; + type = sprite->anims[sprite->animNum][sprite->animCmdIndex].type; + funcIndex = 3; + if (type < 0) + funcIndex = type + 3; + sAnimCmdFuncs[funcIndex](sprite); + } +} + +static void AnimCmd_frame(struct Sprite *sprite) +{ + s16 imageValue; + u8 duration; + u8 hFlip; + u8 vFlip; + + imageValue = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; + duration = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; + hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip; + vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip; + + if (duration) + duration--; + + sprite->animDelayCounter = duration; + + if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) + SetSpriteOamFlipBits(sprite, hFlip, vFlip); + + if (sprite->usingSheet) + sprite->oam.tileNum = sprite->sheetTileStart + imageValue; + else + RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images); +} + +static void AnimCmd_end(struct Sprite *sprite) +{ + sprite->animCmdIndex--; + sprite->animEnded = TRUE; +} + +static void AnimCmd_jump(struct Sprite *sprite) +{ + s16 imageValue; + u8 duration; + u8 hFlip; + u8 vFlip; + + sprite->animCmdIndex = sprite->anims[sprite->animNum][sprite->animCmdIndex].jump.target; + + imageValue = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; + duration = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; + hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip; + vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip; + + if (duration) + duration--; + + sprite->animDelayCounter = duration; + + if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) + SetSpriteOamFlipBits(sprite, hFlip, vFlip); + + if (sprite->usingSheet) + sprite->oam.tileNum = sprite->sheetTileStart + imageValue; + else + RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images); +} + +static void AnimCmd_loop(struct Sprite *sprite) +{ + if (sprite->animLoopCounter) + ContinueAnimLoop(sprite); + else + BeginAnimLoop(sprite); +} + +static void BeginAnimLoop(struct Sprite *sprite) +{ + sprite->animLoopCounter = sprite->anims[sprite->animNum][sprite->animCmdIndex].loop.count; + JumpToTopOfAnimLoop(sprite); + ContinueAnim(sprite); +} + +static void ContinueAnimLoop(struct Sprite *sprite) +{ + sprite->animLoopCounter--; + JumpToTopOfAnimLoop(sprite); + ContinueAnim(sprite); +} + +static void JumpToTopOfAnimLoop(struct Sprite *sprite) +{ + if (sprite->animLoopCounter) + { + sprite->animCmdIndex--; + + while (sprite->anims[sprite->animNum][sprite->animCmdIndex - 1].type != -3) + { + if (sprite->animCmdIndex == 0) + break; + sprite->animCmdIndex--; + } + + sprite->animCmdIndex--; + } +} + +static void BeginAffineAnim(struct Sprite *sprite) +{ + if ((sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) && sprite->affineAnims[0][0].type != 32767) + { + struct AffineAnimFrameCmd frameCmd; + u8 matrixNum = GetSpriteMatrixNum(sprite); + AffineAnimStateRestartAnim(matrixNum); + GetAffineAnimFrame(matrixNum, sprite, &frameCmd); + sprite->affineAnimBeginning = FALSE; + sprite->affineAnimEnded = FALSE; + ApplyAffineAnimFrame(matrixNum, &frameCmd); + sAffineAnimStates[matrixNum].delayCounter = frameCmd.duration; + } +} + +static void ContinueAffineAnim(struct Sprite *sprite) +{ + if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) + { + u8 matrixNum = GetSpriteMatrixNum(sprite); + + if (sAffineAnimStates[matrixNum].delayCounter) + { + AffineAnimDelay(matrixNum, sprite); + } + else if (!sprite->affineAnimPaused) + { + s16 type; + s16 funcIndex; + sAffineAnimStates[matrixNum].animCmdIndex++; + type = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].type; + funcIndex = 3; + if (type >= 32765) + funcIndex = type - 32765; + sAffineAnimCmdFuncs[funcIndex](matrixNum, sprite); + } + } +} + +static void AffineAnimDelay(u8 matrixNum, struct Sprite *sprite) +{ + if (!DecrementAffineAnimDelayCounter(sprite, matrixNum)) + { + struct AffineAnimFrameCmd frameCmd; + GetAffineAnimFrame(matrixNum, sprite, &frameCmd); + ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, &frameCmd); + } +} + +static void AffineAnimCmd_loop(u8 matrixNum, struct Sprite *sprite) +{ + if (sAffineAnimStates[matrixNum].loopCounter) + ContinueAffineAnimLoop(matrixNum, sprite); + else + BeginAffineAnimLoop(matrixNum, sprite); +} + +static void BeginAffineAnimLoop(u8 matrixNum, struct Sprite *sprite) +{ + sAffineAnimStates[matrixNum].loopCounter = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].loop.count; + JumpToTopOfAffineAnimLoop(matrixNum, sprite); + ContinueAffineAnim(sprite); +} + +static void ContinueAffineAnimLoop(u8 matrixNum, struct Sprite *sprite) +{ + sAffineAnimStates[matrixNum].loopCounter--; + JumpToTopOfAffineAnimLoop(matrixNum, sprite); + ContinueAffineAnim(sprite); +} + +static void JumpToTopOfAffineAnimLoop(u8 matrixNum, struct Sprite *sprite) +{ + if (sAffineAnimStates[matrixNum].loopCounter) + { + sAffineAnimStates[matrixNum].animCmdIndex--; + + while (sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex - 1].type != 32765) + { + if (sAffineAnimStates[matrixNum].animCmdIndex == 0) + break; + sAffineAnimStates[matrixNum].animCmdIndex--; + } + + sAffineAnimStates[matrixNum].animCmdIndex--; + } +} + +static void AffineAnimCmd_jump(u8 matrixNum, struct Sprite *sprite) +{ + struct AffineAnimFrameCmd frameCmd; + sAffineAnimStates[matrixNum].animCmdIndex = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].jump.target; + GetAffineAnimFrame(matrixNum, sprite, &frameCmd); + ApplyAffineAnimFrame(matrixNum, &frameCmd); + sAffineAnimStates[matrixNum].delayCounter = frameCmd.duration; +} + +static void AffineAnimCmd_end(u8 matrixNum, struct Sprite *sprite) +{ + struct AffineAnimFrameCmd dummyFrameCmd = {0}; + sprite->affineAnimEnded = TRUE; + sAffineAnimStates[matrixNum].animCmdIndex--; + ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, &dummyFrameCmd); +} + +static void AffineAnimCmd_frame(u8 matrixNum, struct Sprite *sprite) +{ + struct AffineAnimFrameCmd frameCmd; + GetAffineAnimFrame(matrixNum, sprite, &frameCmd); + ApplyAffineAnimFrame(matrixNum, &frameCmd); + sAffineAnimStates[matrixNum].delayCounter = frameCmd.duration; +} + +static void CopyOamMatrix(u8 destMatrixIndex, struct OamMatrix *srcMatrix) +{ + gOamMatrices[destMatrixIndex].a = srcMatrix->a; + gOamMatrices[destMatrixIndex].b = srcMatrix->b; + gOamMatrices[destMatrixIndex].c = srcMatrix->c; + gOamMatrices[destMatrixIndex].d = srcMatrix->d; +} + +static u8 GetSpriteMatrixNum(struct Sprite *sprite) +{ + u8 matrixNum = 0; + if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) + matrixNum = sprite->oam.matrixNum; + return matrixNum; +} + +static void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip) +{ + sprite->oam.matrixNum &= 0x7; + sprite->oam.matrixNum |= (((hFlip ^ sprite->hFlip) & 1) << 3); + sprite->oam.matrixNum |= (((vFlip ^ sprite->vFlip) & 1) << 4); +} + +static void AffineAnimStateRestartAnim(u8 matrixNum) +{ + sAffineAnimStates[matrixNum].animCmdIndex = 0; + sAffineAnimStates[matrixNum].delayCounter = 0; + sAffineAnimStates[matrixNum].loopCounter = 0; +} + +static void AffineAnimStateStartAnim(u8 matrixNum, u8 animNum) +{ + sAffineAnimStates[matrixNum].animNum = animNum; + sAffineAnimStates[matrixNum].animCmdIndex = 0; + sAffineAnimStates[matrixNum].delayCounter = 0; + sAffineAnimStates[matrixNum].loopCounter = 0; + sAffineAnimStates[matrixNum].xScale = 0x0100; + sAffineAnimStates[matrixNum].yScale = 0x0100; + sAffineAnimStates[matrixNum].rotation = 0; +} + +static void AffineAnimStateReset(u8 matrixNum) +{ + sAffineAnimStates[matrixNum].animNum = 0; + sAffineAnimStates[matrixNum].animCmdIndex = 0; + sAffineAnimStates[matrixNum].delayCounter = 0; + sAffineAnimStates[matrixNum].loopCounter = 0; + sAffineAnimStates[matrixNum].xScale = 0x0100; + sAffineAnimStates[matrixNum].yScale = 0x0100; + sAffineAnimStates[matrixNum].rotation = 0; +} + +static void ApplyAffineAnimFrameAbsolute(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd) +{ + sAffineAnimStates[matrixNum].xScale = frameCmd->xScale; + sAffineAnimStates[matrixNum].yScale = frameCmd->yScale; + sAffineAnimStates[matrixNum].rotation = frameCmd->rotation << 8; +} + +static void DecrementAnimDelayCounter(struct Sprite *sprite) +{ + if (!sprite->animPaused) + sprite->animDelayCounter--; +} + +static bool8 DecrementAffineAnimDelayCounter(struct Sprite *sprite, u8 matrixNum) +{ + if (!sprite->affineAnimPaused) + --sAffineAnimStates[matrixNum].delayCounter; + return sprite->affineAnimPaused; +} + +static void ApplyAffineAnimFrameRelativeAndUpdateMatrix(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd) +{ + struct ObjAffineSrcData srcData; + struct OamMatrix matrix; + sAffineAnimStates[matrixNum].xScale += frameCmd->xScale; + sAffineAnimStates[matrixNum].yScale += frameCmd->yScale; + sAffineAnimStates[matrixNum].rotation = (sAffineAnimStates[matrixNum].rotation + (frameCmd->rotation << 8)) & ~0xFF; + srcData.xScale = ConvertScaleParam(sAffineAnimStates[matrixNum].xScale); + srcData.yScale = ConvertScaleParam(sAffineAnimStates[matrixNum].yScale); + srcData.rotation = sAffineAnimStates[matrixNum].rotation; + ObjAffineSet(&srcData, &matrix, 1, 2); + CopyOamMatrix(matrixNum, &matrix); +} + +static s16 ConvertScaleParam(s16 scale) +{ + s32 val = 0x10000; + return val / scale; +} + +static void GetAffineAnimFrame(u8 matrixNum, struct Sprite *sprite, struct AffineAnimFrameCmd *frameCmd) +{ + frameCmd->xScale = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.xScale; + frameCmd->yScale = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.yScale; + frameCmd->rotation = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.rotation; + frameCmd->duration = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.duration; +} + +static void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd) +{ + struct AffineAnimFrameCmd dummyFrameCmd = {0}; + + if (frameCmd->duration) + { + frameCmd->duration--; + ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, frameCmd); + } + else + { + ApplyAffineAnimFrameAbsolute(matrixNum, frameCmd); + ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, &dummyFrameCmd); + } +} + +void StartSpriteAnim(struct Sprite *sprite, u8 animNum) +{ + sprite->animNum = animNum; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; +} + +void StartSpriteAnimIfDifferent(struct Sprite *sprite, u8 animNum) +{ + if (sprite->animNum != animNum) + StartSpriteAnim(sprite, animNum); +} + +void SeekSpriteAnim(struct Sprite *sprite, u8 animCmdIndex) +{ + u8 temp = sprite->animPaused; + sprite->animCmdIndex = animCmdIndex - 1; + sprite->animDelayCounter = 0; + sprite->animBeginning = FALSE; + sprite->animEnded = FALSE; + sprite->animPaused = FALSE; + ContinueAnim(sprite); + if (sprite->animDelayCounter) + sprite->animDelayCounter++; + sprite->animPaused = temp; +} + +void StartSpriteAffineAnim(struct Sprite *sprite, u8 animNum) +{ + u8 matrixNum = GetSpriteMatrixNum(sprite); + AffineAnimStateStartAnim(matrixNum, animNum); + sprite->affineAnimBeginning = TRUE; + sprite->affineAnimEnded = FALSE; +} + +void StartSpriteAffineAnimIfDifferent(struct Sprite *sprite, u8 animNum) +{ + u8 matrixNum = GetSpriteMatrixNum(sprite); + if (sAffineAnimStates[matrixNum].animNum != animNum) + StartSpriteAffineAnim(sprite, animNum); +} + +void ChangeSpriteAffineAnim(struct Sprite *sprite, u8 animNum) +{ + u8 matrixNum = GetSpriteMatrixNum(sprite); + sAffineAnimStates[matrixNum].animNum = animNum; + sprite->affineAnimBeginning = TRUE; + sprite->affineAnimEnded = FALSE; +} + +void ChangeSpriteAffineAnimIfDifferent(struct Sprite *sprite, u8 animNum) +{ + u8 matrixNum = GetSpriteMatrixNum(sprite); + if (sAffineAnimStates[matrixNum].animNum != animNum) + ChangeSpriteAffineAnim(sprite, animNum); +} + +void SetSpriteSheetFrameTileNum(struct Sprite *sprite) +{ + if (sprite->usingSheet) + { + s16 tileOffset = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; + if (tileOffset < 0) + tileOffset = 0; + sprite->oam.tileNum = sprite->sheetTileStart + tileOffset; + } +} + +static void ResetAffineAnimData(void) +{ + u8 i; + + gAffineAnimsDisabled = 0; + gOamMatrixAllocBitmap = 0; + + ResetOamMatrices(); + + for (i = 0; i < OAM_MATRIX_COUNT; i++) + AffineAnimStateReset(i); +} + +u8 AllocOamMatrix(void) +{ + u8 i = 0; + u32 bit = 1; + u32 bitmap = gOamMatrixAllocBitmap; + + while (i < OAM_MATRIX_COUNT) + { + if (!(bitmap & bit)) + { + gOamMatrixAllocBitmap |= bit; + return i; + } + + i++; + bit <<= 1; + } + + return 0xFF; +} + +void FreeOamMatrix(u8 matrixNum) +{ + u8 i = 0; + u32 bit = 1; + + while (i < matrixNum) + { + i++; + bit <<= 1; + } + + gOamMatrixAllocBitmap &= ~bit; + SetOamMatrix(matrixNum, 0x100, 0, 0, 0x100); +} + +void InitSpriteAffineAnim(struct Sprite *sprite) +{ + u8 matrixNum = AllocOamMatrix(); + if (matrixNum != 0xFF) + { + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); + sprite->oam.matrixNum = matrixNum; + sprite->affineAnimBeginning = TRUE; + AffineAnimStateReset(matrixNum); + } +} + +void SetOamMatrixRotationScaling(u8 matrixNum, s16 xScale, s16 yScale, u16 rotation) +{ + struct ObjAffineSrcData srcData; + struct OamMatrix matrix; + srcData.xScale = ConvertScaleParam(xScale); + srcData.yScale = ConvertScaleParam(yScale); + srcData.rotation = rotation; + ObjAffineSet(&srcData, &matrix, 1, 2); + CopyOamMatrix(matrixNum, &matrix); +} + +u16 LoadSpriteSheet(const struct SpriteSheet *sheet) +{ + s16 tileStart = AllocSpriteTiles(sheet->size / TILE_SIZE_4BPP); + + if (tileStart < 0) + { + return 0; + } + else + { + AllocSpriteTileRange(sheet->tag, (u16)tileStart, sheet->size / TILE_SIZE_4BPP); + CpuCopy16(sheet->data, (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size); + return (u16)tileStart; + } +} + +void LoadSpriteSheets(const struct SpriteSheet *sheets) +{ + u8 i; + for (i = 0; sheets[i].data != NULL; i++) + LoadSpriteSheet(&sheets[i]); +} + +u16 AllocTilesForSpriteSheet(struct SpriteSheet *sheet) +{ + s16 tileStart = AllocSpriteTiles(sheet->size / TILE_SIZE_4BPP); + + if (tileStart < 0) + { + return 0; + } + else + { + AllocSpriteTileRange(sheet->tag, (u16)tileStart, sheet->size / TILE_SIZE_4BPP); + return (u16)tileStart; + } +} + +void AllocTilesForSpriteSheets(struct SpriteSheet *sheets) +{ + u8 i; + for (i = 0; sheets[i].data != NULL; i++) + AllocTilesForSpriteSheet(&sheets[i]); +} + +void LoadTilesForSpriteSheet(const struct SpriteSheet *sheet) +{ + const u8 *data = sheet->data; + u16 tileStart = GetSpriteTileStartByTag(sheet->tag); + CpuCopy16(data, (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size); +} + +void LoadTilesForSpriteSheets(struct SpriteSheet *sheets) +{ + u8 i; + for (i = 0; sheets[i].data != NULL; i++) + LoadTilesForSpriteSheet(&sheets[i]); +} + +void FreeSpriteTilesByTag(u16 tag) +{ + u8 index = IndexOfSpriteTileTag(tag); + if (index != 0xFF) + { + u16 i; + u16 *rangeStarts; + u16 *rangeCounts; + u16 start; + u16 count; + rangeStarts = sSpriteTileRanges; + start = rangeStarts[index * 2]; + rangeCounts = sSpriteTileRanges + 1; + count = rangeCounts[index * 2]; + + for (i = start; i < start + count; i++) + FREE_SPRITE_TILE(i); + + sSpriteTileRangeTags[index] = 0xFFFF; + } +} + +void FreeSpriteTileRanges(void) +{ + u8 i; + + for (i = 0; i < MAX_SPRITES; i++) + { + sSpriteTileRangeTags[i] = 0xFFFF; + SET_SPRITE_TILE_RANGE(i, 0, 0); + } +} + +u16 GetSpriteTileStartByTag(u16 tag) +{ + u8 index = IndexOfSpriteTileTag(tag); + if (index == 0xFF) + return 0xFFFF; + return sSpriteTileRanges[index * 2]; +} + +static u8 IndexOfSpriteTileTag(u16 tag) +{ + u8 i; + + for (i = 0; i < MAX_SPRITES; i++) + if (sSpriteTileRangeTags[i] == tag) + return i; + + return 0xFF; +} + +u16 GetSpriteTileTagByTileStart(u16 start) +{ + u8 i; + + for (i = 0; i < MAX_SPRITES; i++) + { + if (sSpriteTileRangeTags[i] != 0xFFFF && sSpriteTileRanges[i * 2] == start) + return sSpriteTileRangeTags[i]; + } + + return 0xFFFF; +} + +static void AllocSpriteTileRange(u16 tag, u16 start, u16 count) +{ + u8 freeIndex = IndexOfSpriteTileTag(0xFFFF); + sSpriteTileRangeTags[freeIndex] = tag; + SET_SPRITE_TILE_RANGE(freeIndex, start, count); +} + +void RequestSpriteSheetCopy(const struct SpriteSheet *sheet) +{ + const u8 *data = sheet->data; + u16 tileStart = GetSpriteTileStartByTag(sheet->tag); + RequestSpriteCopy(data, (u8 *)OBJ_VRAM0 + tileStart * TILE_SIZE_4BPP, sheet->size); +} + +u16 LoadSpriteSheetDeferred(const struct SpriteSheet *sheet) +{ + s16 tileStart = AllocSpriteTiles(sheet->size / TILE_SIZE_4BPP); + + if (tileStart < 0) + { + return 0; + } + else + { + AllocSpriteTileRange(sheet->tag, (u16)tileStart, sheet->size / TILE_SIZE_4BPP); + RequestSpriteSheetCopy(sheet); + return (u16)tileStart; + } +} + +void FreeAllSpritePalettes(void) +{ + u8 i; + gReservedSpritePaletteCount = 0; + for (i = 0; i < 16; i++) + sSpritePaletteTags[i] = 0xFFFF; +} + +u8 LoadSpritePalette(const struct SpritePalette *palette) +{ + u8 index = IndexOfSpritePaletteTag(palette->tag); + + if (index != 0xFF) + return index; + + index = IndexOfSpritePaletteTag(0xFFFF); + + if (index == 0xFF) + { + return 0xFF; + } + else + { + sSpritePaletteTags[index] = palette->tag; + DoLoadSpritePalette(palette->data, index * 16); + return index; + } +} + +void LoadSpritePalettes(const struct SpritePalette *palettes) +{ + u8 i; + for (i = 0; palettes[i].data != NULL; i++) + if (LoadSpritePalette(&palettes[i]) == 0xFF) + break; +} + +static void DoLoadSpritePalette(const u16 *src, u16 paletteOffset) +{ + LoadPalette(src, paletteOffset + 0x100, 32); +} + +u8 AllocSpritePalette(u16 tag) +{ + u8 index = IndexOfSpritePaletteTag(0xFFFF); + if (index == 0xFF) + { + return 0xFF; + } + else + { + sSpritePaletteTags[index] = tag; + return index; + } +} + +u8 IndexOfSpritePaletteTag(u16 tag) +{ + u8 i; + for (i = gReservedSpritePaletteCount; i < 16; i++) + if (sSpritePaletteTags[i] == tag) + return i; + + return 0xFF; +} + +u16 GetSpritePaletteTagByPaletteNum(u8 paletteNum) +{ + return sSpritePaletteTags[paletteNum]; +} + +void FreeSpritePaletteByTag(u16 tag) +{ + u8 index = IndexOfSpritePaletteTag(tag); + if (index != 0xFF) + sSpritePaletteTags[index] = 0xFFFF; +} + +void SetSubspriteTables(struct Sprite *sprite, const struct SubspriteTable *subspriteTables) +{ + sprite->subspriteTables = subspriteTables; + sprite->subspriteTableNum = 0; + sprite->subspriteMode = SUBSPRITES_ON; +} + +bool8 AddSpriteToOamBuffer(struct Sprite *sprite, u8 *oamIndex) +{ + if (*oamIndex >= gOamLimit) + return 1; + + if (!sprite->subspriteTables || sprite->subspriteMode == SUBSPRITES_OFF) + { + gMain.oamBuffer[*oamIndex] = sprite->oam; + (*oamIndex)++; + return 0; + } + else + { + return AddSubspritesToOamBuffer(sprite, &gMain.oamBuffer[*oamIndex], oamIndex); + } +} + +bool8 AddSubspritesToOamBuffer(struct Sprite *sprite, struct OamData *destOam, u8 *oamIndex) +{ + const struct SubspriteTable *subspriteTable; + struct OamData *oam; + + if (*oamIndex >= gOamLimit) + return 1; + + subspriteTable = &sprite->subspriteTables[sprite->subspriteTableNum]; + oam = &sprite->oam; + + if (!subspriteTable || !subspriteTable->subsprites) + { + *destOam = *oam; + (*oamIndex)++; + return 0; + } + else + { + u16 tileNum; + u16 baseX; + u16 baseY; + u8 subspriteCount; + u8 hFlip; + u8 vFlip; + u8 i; + + tileNum = oam->tileNum; + subspriteCount = subspriteTable->subspriteCount; + hFlip = ((s32)oam->matrixNum >> 3) & 1; + vFlip = ((s32)oam->matrixNum >> 4) & 1; + baseX = oam->x - sprite->centerToCornerVecX; + baseY = oam->y - sprite->centerToCornerVecY; + + for (i = 0; i < subspriteCount; i++, (*oamIndex)++) + { + u16 x; + u16 y; + + if (*oamIndex >= gOamLimit) + return 1; + + x = subspriteTable->subsprites[i].x; + y = subspriteTable->subsprites[i].y; + + if (hFlip) + { + s8 width = sOamDimensions[subspriteTable->subsprites[i].shape][subspriteTable->subsprites[i].size].width; + s16 right = x; + right += width; + x = right; + x = ~x + 1; + } + + if (vFlip) + { + s8 height = sOamDimensions[subspriteTable->subsprites[i].shape][subspriteTable->subsprites[i].size].height; + s16 bottom = y; + bottom += height; + y = bottom; + y = ~y + 1; + } + + destOam[i] = *oam; + destOam[i].shape = subspriteTable->subsprites[i].shape; + destOam[i].size = subspriteTable->subsprites[i].size; + destOam[i].x = (s16)baseX + (s16)x; + destOam[i].y = baseY + y; + destOam[i].tileNum = tileNum + subspriteTable->subsprites[i].tileOffset; + + if (sprite->subspriteMode != SUBSPRITES_IGNORE_PRIORITY) + destOam[i].priority = subspriteTable->subsprites[i].priority; + } + } + + return 0; +} diff --git a/src/engine/string_util.c b/src/engine/string_util.c new file mode 100644 index 000000000..9686256a1 --- /dev/null +++ b/src/engine/string_util.c @@ -0,0 +1,561 @@ +#include "global.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" + +u8 gUnknownStringVar[16]; + +const u8 gEmptyString_81E72B0[] = _(""); +const u8 gRightPointingTriangleString[] = _("▶"); + +static const u8 sDigits[] = __("0123456789ABCDEF"); + +static const s32 sPowersOfTen[] = +{ + 1, + 10, + 100, + 1000, + 10000, + 100000, + 1000000, + 10000000, + 100000000, + 1000000000, +}; + +u8 *StringCopy10(u8 *dest, const u8 *src) +{ + u8 i; + u32 limit = 10; + + for (i = 0; i < limit; i++) + { + dest[i] = src[i]; + + if (dest[i] == EOS) + return &dest[i]; + } + + dest[i] = EOS; + return &dest[i]; +} + +u8 *StringGetEnd10(u8 *str) +{ + u8 i; + u32 limit = 10; + + for (i = 0; i < limit; i++) + if (str[i] == EOS) + return &str[i]; + + str[i] = EOS; + return &str[i]; +} + +u8 *StringCopy8(u8 *dest, const u8 *src) +{ + s32 i; + + for (i = 0; i < 8; i++) + { + dest[i] = src[i]; + + if (dest[i] == EOS) + return &dest[i]; + } + + dest[i] = EOS; + return &dest[i]; +} + +u8 *StringCopy(u8 *dest, const u8 *src) +{ + while (*src != EOS) + { + *dest = *src; + dest++; + src++; + } + + *dest = EOS; + return dest; +} + +u8 *StringAppend(u8 *dest, const u8 *src) +{ + while (*dest != EOS) + dest++; + + return StringCopy(dest, src); +} + +u8 *StringCopyN(u8 *dest, const u8 *src, u8 n) +{ + u16 i; + + for (i = 0; i < n; i++) + dest[i] = src[i]; + + return &dest[n]; +} + +u8 *StringAppendN(u8 *dest, const u8 *src, u8 n) +{ + while (*dest != EOS) + dest++; + + return StringCopyN(dest, src, n); +} + +u16 StringLength(const u8 *str) +{ + u16 length = 0; + + while (str[length] != EOS) + { + u16 temp = length; + length++; + if (str[temp] == EXT_CTRL_CODE_BEGIN) + length += GetExtCtrlCodeLength(str[length]); + } + + return length; +} + +#ifdef GERMAN +s32 StringLengthN(const u8 *str, s32 n) +{ + s32 i; + + for (i = 0; i < n && str[i] != EOS; i++) + ; + + if (i == n) + i = 0; + + return i; +} +#endif + +s32 StringCompare(const u8 *str1, const u8 *str2) +{ + while (*str1 == *str2) + { + if (*str1 == EOS) + return 0; + str1++; + str2++; + } + + return *str1 - *str2; +} + +s32 StringCompareN(const u8 *str1, const u8 *str2, u32 n) +{ + while (*str1 == *str2) + { + if (*str1 == EOS) + return 0; + str1++; + str2++; + if (--n == 0) + return 0; + } + + return *str1 - *str2; +} + +u8 *ConvertIntToDecimalStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n) +{ + enum { WAITING_FOR_NONZERO_DIGIT, WRITING_DIGITS, WRITING_SPACES } state; + s32 powerOfTen; + s32 largestPowerOfTen = sPowersOfTen[n - 1]; + + state = WAITING_FOR_NONZERO_DIGIT; + + if (mode == STR_CONV_MODE_RIGHT_ALIGN) + state = WRITING_SPACES; + + if (mode == STR_CONV_MODE_LEADING_ZEROS) + state = WRITING_DIGITS; + + for (powerOfTen = largestPowerOfTen; powerOfTen > 0; powerOfTen /= 10) + { + char *out; + u8 c; + u16 digit = value / powerOfTen; + s32 temp = value - (powerOfTen * digit); + + if (state == WRITING_DIGITS) + { + out = dest++; + + if (digit <= 9) + c = sDigits[digit]; + else + c = CHAR_QUESTION_MARK; + + *out = c; + } + else if (digit != 0 || powerOfTen == 1) + { + state = WRITING_DIGITS; + out = dest++; + + if (digit <= 9) + c = sDigits[digit]; + else + c = CHAR_QUESTION_MARK; + + *out = c; + } + else if (state == WRITING_SPACES) + { + *dest++ = CHAR_SPACE; + } + + value = temp; + } + + *dest = EOS; + return dest; +} + +u8 *ConvertIntToDecimalStringN_DigitWidth6(u8 *dest, s32 value, enum StringConvertMode mode, u8 n) +{ + enum { WAITING_FOR_NONZERO_DIGIT, WRITING_DIGITS, WRITING_SPACES } state; + s32 powerOfTen; + s32 largestPowerOfTen = sPowersOfTen[n - 1]; + + *dest++ = EXT_CTRL_CODE_BEGIN; + *dest++ = 0x14; + *dest++ = 6; + + state = WAITING_FOR_NONZERO_DIGIT; + + if (mode == STR_CONV_MODE_RIGHT_ALIGN) + state = WRITING_SPACES; + + if (mode == STR_CONV_MODE_LEADING_ZEROS) + state = WRITING_DIGITS; + + for (powerOfTen = largestPowerOfTen; powerOfTen > 0; powerOfTen /= 10) + { + char *out; + u8 c; + u16 digit = value / powerOfTen; + s32 temp = value - (powerOfTen * digit); + + if (state == WRITING_DIGITS) + { + out = dest++; + + if (digit <= 9) + c = sDigits[digit]; + else + c = CHAR_QUESTION_MARK; + + *out = c; + } + else if (digit != 0 || powerOfTen == 1) + { + state = WRITING_DIGITS; + out = dest++; + + if (digit <= 9) + c = sDigits[digit]; + else + c = CHAR_QUESTION_MARK; + + *out = c; + } + else if (state == WRITING_SPACES) + { + *dest++ = CHAR_SPACE; + } + + value = temp; + } + + *dest++ = EXT_CTRL_CODE_BEGIN; + *dest++ = 0x14; + *dest++ = 0x00; + + *dest = EOS; + return dest; +} + +u8 *ConvertIntToHexStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n) +{ + enum { WAITING_FOR_NONZERO_DIGIT, WRITING_DIGITS, WRITING_SPACES } state; + u8 i; + s32 powerOfSixteen; + s32 largestPowerOfSixteen = 1; + + for (i = 1; i < n; i++) + largestPowerOfSixteen *= 16; + + state = WAITING_FOR_NONZERO_DIGIT; + + if (mode == STR_CONV_MODE_RIGHT_ALIGN) + state = WRITING_SPACES; + + if (mode == STR_CONV_MODE_LEADING_ZEROS) + state = WRITING_DIGITS; + + for (powerOfSixteen = largestPowerOfSixteen; powerOfSixteen > 0; powerOfSixteen /= 16) + { + char *out; + u8 c; + u32 digit = value / powerOfSixteen; + s32 temp = value % powerOfSixteen; + + if (state == WRITING_DIGITS) + { + out = dest++; + + if (digit <= 0xF) + c = sDigits[digit]; + else + c = CHAR_QUESTION_MARK; + + *out = c; + } + else if (digit != 0 || powerOfSixteen == 1) + { + state = WRITING_DIGITS; + out = dest++; + + if (digit <= 0xF) + c = sDigits[digit]; + else + c = CHAR_QUESTION_MARK; + + *out = c; + } + else if (state == WRITING_SPACES) + { + *dest++ = CHAR_SPACE; + } + + value = temp; + } + + *dest = EOS; + return dest; +} + +u8 *ConvertIntToDecimalString(u8 *dest, s32 value) +{ + char temp[12]; + s32 length = 0; + + do + { + temp[length++] = sDigits[value % 10]; + value /= 10; + } while (value != 0); + + length--; + + while (length != -1) + { + *dest++ = temp[length]; + length--; + } + + *dest = EOS; + return dest; +} + +u8 *StringExpandPlaceholders(u8 *dest, const u8 *src) +{ + for (;;) + { + u8 c = *src++; + u8 placeholderId; + u8 *expandedString; + u8 length; + + switch (c) + { + case PLACEHOLDER_BEGIN: + placeholderId = *src++; + expandedString = GetExpandedPlaceholder(placeholderId); + dest = StringExpandPlaceholders(dest, expandedString); + break; + case EXT_CTRL_CODE_BEGIN: + *dest++ = c; + length = GetExtCtrlCodeLength(*src); + memcpy(dest, src, length); + dest += length; + src += length; + break; + case EOS: + *dest = EOS; + return dest; + case 0xFA: + case 0xFB: + case 0xFE: + default: + *dest++ = c; + } + } +} + +u8 *StringBraille(u8 *dest, const u8 *src) +{ + u8 setBrailleFont[] = { 0xFC, 0x06, 0x06, 0xFF }; + u8 gotoLine2[] = { 0xFE, 0xFC, 0x0E, 0x02, 0xFF }; + + dest = StringCopy(dest, setBrailleFont); + + for (;;) + { + u8 c = *src++; + + switch (c) + { + case EOS: + *dest = c; + return dest; + case 0xFE: + dest = StringCopy(dest, gotoLine2); + break; + default: + *dest++ = c; + *dest++ = c + 0x40; + break; + } + } +} + +static u8 *ExpandPlaceholder_UnknownStringVar(void) +{ + return gUnknownStringVar; +} + +static u8 *ExpandPlaceholder_PlayerName(void) +{ + return gSaveBlock2.playerName; +} + +static u8 *ExpandPlaceholder_StringVar1(void) +{ + return gStringVar1; +} + +static u8 *ExpandPlaceholder_StringVar2(void) +{ + return gStringVar2; +} + +static u8 *ExpandPlaceholder_StringVar3(void) +{ + return gStringVar3; +} + +static u8 *ExpandPlaceholder_KunChan(void) +{ + if (gSaveBlock2.playerGender == MALE) + return (u8 *) gExpandedPlaceholder_Kun; + else + return (u8 *) gExpandedPlaceholder_Chan; +} + +static u8 *ExpandPlaceholder_RivalName(void) +{ + if (gSaveBlock2.playerGender == MALE) + return (u8 *) gExpandedPlaceholder_May; + else + return (u8 *) gExpandedPlaceholder_Brendan; +} + +#define VERSION_DEPENDENT_PLACEHOLDER_LIST \ + X(Version, Ruby, Sapphire) \ + X(EvilTeam, Magma, Aqua) \ + X(GoodTeam, Aqua, Magma) \ + X(EvilLeader, Maxie, Archie) \ + X(GoodLeader, Archie, Maxie) \ + X(EvilLegendary, Groudon, Kyogre) \ + X(GoodLegendary, Kyogre, Groudon) + +#ifdef SAPPHIRE +#define X(ph, r, s) \ +static u8 *ExpandPlaceholder_##ph(void) { return (u8 *) gExpandedPlaceholder_##s; } +VERSION_DEPENDENT_PLACEHOLDER_LIST +#else +#define X(ph, r, s) \ +static u8 *ExpandPlaceholder_##ph(void) { return (u8 *) gExpandedPlaceholder_##r; } +VERSION_DEPENDENT_PLACEHOLDER_LIST +#endif + +#undef X + +u8 *GetExpandedPlaceholder(u32 id) +{ + typedef u8 *(*ExpandPlaceholderFunc)(void); + + static const ExpandPlaceholderFunc funcs[] = + { + ExpandPlaceholder_UnknownStringVar, + ExpandPlaceholder_PlayerName, + ExpandPlaceholder_StringVar1, + ExpandPlaceholder_StringVar2, + ExpandPlaceholder_StringVar3, + ExpandPlaceholder_KunChan, + ExpandPlaceholder_RivalName, + ExpandPlaceholder_Version, + ExpandPlaceholder_EvilTeam, + ExpandPlaceholder_GoodTeam, + ExpandPlaceholder_EvilLeader, + ExpandPlaceholder_GoodLeader, + ExpandPlaceholder_EvilLegendary, + ExpandPlaceholder_GoodLegendary, + }; + + if (id >= ARRAY_COUNT(funcs)) + return (u8 *) gExpandedPlaceholder_Empty; + else + return funcs[id](); +} + +u8 *StringFill(u8 *dest, u8 c, u16 n) +{ + u16 i; + + for (i = 0; i < n; i++) + *dest++ = c; + + *dest = EOS; + return dest; +} + +u8 *StringCopyPadded(u8 *dest, const u8 *src, u8 c, u16 n) +{ + while (*src != EOS) + { + *dest++ = *src++; + + if (n) + n--; + } + + n--; + + while (n != (u16)-1) + { + *dest++ = c; + n--; + } + + *dest = EOS; + return dest; +} + +u8 *StringFillWithTerminator(u8 *dest, u16 n) +{ + return StringFill(dest, EOS, n); +} diff --git a/src/engine/task.c b/src/engine/task.c new file mode 100644 index 000000000..7bd2b5937 --- /dev/null +++ b/src/engine/task.c @@ -0,0 +1,209 @@ +#include "global.h" +#include "task.h" + +#define ACTIVE_SENTINEL 0x10 +#define HEAD_SENTINEL 0xFE +#define TAIL_SENTINEL 0xFF + +// gTasks is a queue of the active 16 tasks +struct Task gTasks[ACTIVE_SENTINEL]; + +static void InsertTask(u8 newTaskId); +static u8 FindFirstActiveTask(); + +// Unused string +const u8 sTaskOverString[] = _("TASK OVER\nタスクがオーバーしました"); + +void ResetTasks() +{ + u8 taskId; + + for (taskId = 0; taskId < ACTIVE_SENTINEL; taskId++) + { + gTasks[taskId].isActive = FALSE; + gTasks[taskId].func = TaskDummy; + gTasks[taskId].prev = taskId; + gTasks[taskId].next = taskId + 1; + gTasks[taskId].priority = -1; + memset(gTasks[taskId].data, 0, sizeof(gTasks[taskId].data)); + } + + gTasks[0].prev = HEAD_SENTINEL; + gTasks[ACTIVE_SENTINEL - 1].next = TAIL_SENTINEL; +} + +u8 CreateTask(TaskFunc func, u8 priority) +{ + u8 taskId; + + for (taskId = 0; taskId < ACTIVE_SENTINEL; taskId++) + { + if (!gTasks[taskId].isActive) + { + gTasks[taskId].func = func; + gTasks[taskId].priority = priority; + InsertTask(taskId); + memset(gTasks[taskId].data, 0, sizeof(gTasks[taskId].data)); + gTasks[taskId].isActive = TRUE; + return taskId; + } + } + + return 0; +} + +static void InsertTask(u8 newTaskId) +{ + u8 taskId = FindFirstActiveTask(); + + if (taskId == ACTIVE_SENTINEL) + { + // The task system inserts from the top downwards starting from the end (0xFF) to 0. If FindFirstActiveTask returned the value equivalent to ACTIVE_SENTINEL, it means it is the only task because it searched the entire queue. + gTasks[newTaskId].prev = HEAD_SENTINEL; + gTasks[newTaskId].next = TAIL_SENTINEL; + return; + } + + while (1) + { + if (gTasks[newTaskId].priority < gTasks[taskId].priority) + { + // We've found a task with a higher priority value, + // so we insert the new task before it. + gTasks[newTaskId].prev = gTasks[taskId].prev; + gTasks[newTaskId].next = taskId; + + if (gTasks[taskId].prev != HEAD_SENTINEL) + gTasks[gTasks[taskId].prev].next = newTaskId; // as long as we are not at the end, insert the newTask appropriately. + + gTasks[taskId].prev = newTaskId; + return; + } + if (gTasks[taskId].next == TAIL_SENTINEL) // we did not find a space for the task, so overwrite the last task as it is the lowest priority. + { + // We've reached the end. + gTasks[newTaskId].prev = taskId; + gTasks[newTaskId].next = gTasks[taskId].next; + gTasks[taskId].next = newTaskId; + return; + } + taskId = gTasks[taskId].next; // neither the priority was lower, nor the end. check the next task. + } +} + +void DestroyTask(u8 taskId) +{ + if (gTasks[taskId].isActive) + { + gTasks[taskId].isActive = FALSE; + + if (gTasks[taskId].prev == HEAD_SENTINEL) + { + if (gTasks[taskId].next != TAIL_SENTINEL) + gTasks[gTasks[taskId].next].prev = HEAD_SENTINEL; + } + else + { + if (gTasks[taskId].next == TAIL_SENTINEL) + { + gTasks[gTasks[taskId].prev].next = TAIL_SENTINEL; + } + else + { + gTasks[gTasks[taskId].prev].next = gTasks[taskId].next; + gTasks[gTasks[taskId].next].prev = gTasks[taskId].prev; + } + } + } +} + +void RunTasks(void) +{ + u8 taskId = FindFirstActiveTask(); + + if (taskId != ACTIVE_SENTINEL) + { + do + { + gTasks[taskId].func(taskId); + taskId = gTasks[taskId].next; + } while (taskId != TAIL_SENTINEL); + } +} + +static u8 FindFirstActiveTask(void) +{ + u8 taskId; + + for (taskId = 0; taskId < ACTIVE_SENTINEL; taskId++) + if (gTasks[taskId].isActive == TRUE && gTasks[taskId].prev == HEAD_SENTINEL) + break; + + return taskId; +} + +void TaskDummy(u8 taskId) +{ +} + +#define TASK_DATA_OP(taskId, offset, op) \ +{ \ + u32 tasksAddr = (u32)gTasks; \ + u32 addr = taskId * sizeof(struct Task) + offset; \ + u32 dataAddr = tasksAddr + offsetof(struct Task, data); \ + addr += dataAddr; \ + op; \ +} + +void SetTaskFuncWithFollowupFunc(u8 taskId, TaskFunc func, TaskFunc followupFunc) +{ + TASK_DATA_OP(taskId, 28, *((u16 *)addr) = (u32)followupFunc) + TASK_DATA_OP(taskId, 30, *((u16 *)addr) = (u32)followupFunc >> 16) + gTasks[taskId].func = func; +} + +void SwitchTaskToFollowupFunc(u8 taskId) +{ + s32 func; + + gTasks[taskId].func = NULL; + + TASK_DATA_OP(taskId, 28, func = *((u16 *)addr)) + TASK_DATA_OP(taskId, 30, func |= *((s16 *)addr) << 16) + + gTasks[taskId].func = (TaskFunc)func; +} + +bool8 FuncIsActiveTask(TaskFunc func) +{ + u8 i; + + for (i = 0; i < ACTIVE_SENTINEL; i++) + if (gTasks[i].isActive == TRUE && gTasks[i].func == func) + return TRUE; + + return FALSE; +} + +u8 FindTaskIdByFunc(TaskFunc func) +{ + s32 i; + + for (i = 0; i < ACTIVE_SENTINEL; i++) + if (gTasks[i].isActive == TRUE && gTasks[i].func == func) + return (u8)i; + + return -1; +} + +u8 GetTaskCount(void) +{ + u8 i; + u8 count = 0; + + for (i = 0; i < ACTIVE_SENTINEL; i++) + if (gTasks[i].isActive == TRUE) + count++; + + return count; +} diff --git a/src/engine/text.c b/src/engine/text.c new file mode 100644 index 000000000..abde4484a --- /dev/null +++ b/src/engine/text.c @@ -0,0 +1,4324 @@ +#include "global.h" +#include "text.h" +#include "battle.h" +#include "main.h" +#include "palette.h" +#include "songs.h" +#include "sound.h" +#include "string_util.h" + +enum +{ + WIN_STATE_END, + WIN_STATE_BEGIN, + WIN_STATE_NORMAL, + WIN_STATE_INTERRUPTIBLE_PAUSE, + WIN_STATE_PAUSE, + WIN_STATE_WAIT_BUTTON, + WIN_STATE_NEWLINE, + WIN_STATE_PLACEHOLDER, + WIN_STATE_PARAGRAPH, + WIN_STATE_NEWLINE_WAIT, + WIN_STATE_WAIT_SOUND, +}; + +struct Font +{ + u32 type; + u8 *glyphs; + u16 glyphSize; + u16 lowerTileOffset; +}; + +struct GlyphBuffer +{ + // 0-7 left tile + // 8-15 right tile (if it exists) + u32 pixelRows[16]; + + // pixel row filled with BG color + u32 background; + + // table of color indices (not a palette) + u32 colors[16]; +}; + +struct GlyphTileInfo +{ + u8 textMode; + u8 startPixel; + u8 width; + u8 *src; + u32 *dest; + u32 *colors; +}; + +struct ShiftAmount +{ + u32 left; + u32 right; +}; + +static u16 InitVariableWidthFontTileData(struct Window *, u16); +static u16 LoadFixedWidthFont(struct Window *, u16); +static u16 LoadFixedWidthFont_Font1Latin(struct Window *, u16); +static u16 LoadFixedWidthFont_Font4Latin(struct Window *, u16); +static u16 LoadFixedWidthFont_Braille(struct Window *, u16); +static void MultistepLoadFont_LoadGlyph(struct Window *, u16, u8); +static u8 sub_8002FA0(struct Window *, const u8 *); +static u8 InterpretText(struct Window *); +static u8 HandleExtCtrlCode(struct Window *); +static u8 UpdateWindowText(struct Window *); +static u8 DrawGlyph_TextMode0(struct Window *, u32); +static void DrawGlyph_TextMode2(struct Window *, u32); +static void LoadFixedWidthGlyph(struct Window *, u32, u8 *); +static void WriteGlyphTilemap(struct Window *, u16, u16); +static void GetGlyphTilePointers(u8, u8, u16, u8 **, u8 **); +static u16 *GetCursorTilemapPointer(struct Window *); +static void ApplyColors_UnshadowedFont(const u8 *, u32 *, u8, u8); +static void ApplyColors_ShadowedFont(const void *, void *, u8, u8, u8); +static void SetCursorX(struct Window *, u8); +static void AddToCursorX(struct Window *, u8); +static void AddToCursorY(struct Window *, u8); +static void ClipLeft(struct Window *); +static void ClipRight(struct Window *); +static void InitColors(struct Window *); +static void SetBackgroundColor(struct Window *, u8); +static void SetShadowColor(struct Window *, u8); +static void SetForegroundColor(struct Window *, u8); +static u8 GetTextDelay(struct Window *); +static bool8 PlayerCanInterruptWait(struct Window *); +static void ScrollWindowTextLines(struct Window *); +static void ScrollWindowTextLines_TextMode0(struct Window *); +static void DoScroll_TextMode0(struct Window *, u16); +static void ScrollWindowTextLines_TextMode1(struct Window *); +static void DoScroll_TextMode1(struct Window *, u16); +static void ScrollWindowTextLines_TextMode2(struct Window *); +static void DoScroll_TextMode2(struct Window *, u8); +void ClearWindowTextLines(struct Window *); +static void ClearWindowTextLines_TextMode0_TextMode1(struct Window *, u8); +static void ClearWindowTextLines_TextMode2(struct Window *, u8); +static void TryEraseDownArrow(struct Window *); +static u16 GetBlankTileNum(struct Window *); +static u8 WaitWithDownArrow(struct Window *); +static void DrawInitialDownArrow(struct Window *); +static void DrawMovingDownArrow(struct Window *); +static u16 GetCursorTileNum(struct Window *, u32, u32); +static s32 DrawGlyphTiles(struct Window *, u32, u32); +static void UpdateTilemap(struct Window *, u32); +static u8 GetGlyphWidth(struct Window *, u32); +static s32 DrawGlyphTile_ShadowedFont(struct GlyphTileInfo *); + +static void PrintGlyph_TextMode0(struct Window *, u32); +static void PrintGlyph_TextMode1(struct Window *, u32); +static void PrintGlyph_TextMode2(struct Window *, u32); + +static void WriteGlyphTilemap_Font0_Font3(struct Window *, u32); +static void WriteGlyphTilemap_Font1_Font4(struct Window *, u32); +static void WriteGlyphTilemap_Font2_Font5(struct Window *, u32); +static void WriteGlyphTilemap_Font1_Font4(struct Window *, u32); +static void WriteGlyphTilemap_Font2_Font5(struct Window *, u32); +static void WriteGlyphTilemap_Font6(struct Window *, u32); + +static u8 ExtCtrlCode_Nop(struct Window *); +static u8 ExtCtrlCode_ForegroundColor(struct Window *); +static u8 ExtCtrlCode_BackgroundColor(struct Window *); +static u8 ExtCtrlCode_ShadowColor(struct Window *); +static u8 ExtCtrlCode_AllColors(struct Window *); +static u8 ExtCtrlCode_Palette(struct Window *); +static u8 ExtCtrlCode_Font(struct Window *); +static u8 ExtCtrlCode_DefaultFont(struct Window *); +static u8 ExtCtrlCode_Pause(struct Window *); +static u8 ExtCtrlCode_WaitButton(struct Window *); +static u8 ExtCtrlCode_WaitSound(struct Window *); +static u8 ExtCtrlCode_PlayBGM(struct Window *); +static u8 ExtCtrlCode_Escape(struct Window *); +static u8 ExtCtrlCode_Nop2(struct Window *); +static u8 ExtCtrlCode_SetCursorY(struct Window *); +static u8 ExtCtrlCode_ClearWindowTextLines(struct Window *); +static u8 ExtCtrlCode_PlaySE(struct Window *); +static u8 ExtCtrlCode_Skip(struct Window *); +static u8 ExtCtrlCode_SetCursorX(struct Window *); +static u8 ExtCtrlCode_SkipTo(struct Window *); +static u8 ExtCtrlCode_Spacing(struct Window *); +static u8 ExtCtrlCode_Japanese(struct Window *); +static u8 ExtCtrlCode_Latin(struct Window *); + +static void ShiftGlyphTile_UnshadowedFont_Width0(struct GlyphBuffer *, u8 *, u32 *, u8); +static void ShiftGlyphTile_UnshadowedFont_Width1(struct GlyphBuffer *, u8 *, u32 *, u8); +static void ShiftGlyphTile_UnshadowedFont_Width2(struct GlyphBuffer *, u8 *, u32 *, u8); +static void ShiftGlyphTile_UnshadowedFont_Width3(struct GlyphBuffer *, u8 *, u32 *, u8); +static void ShiftGlyphTile_UnshadowedFont_Width4(struct GlyphBuffer *, u8 *, u32 *, u8); +static void ShiftGlyphTile_UnshadowedFont_Width5(struct GlyphBuffer *, u8 *, u32 *, u8); +static void ShiftGlyphTile_UnshadowedFont_Width6(struct GlyphBuffer *, u8 *, u32 *, u8); +static void ShiftGlyphTile_UnshadowedFont_Width7(struct GlyphBuffer *, u8 *, u32 *, u8); +static void ShiftGlyphTile_UnshadowedFont_Width8(struct GlyphBuffer *, u8 *, u32 *, u8); + +static void ShiftGlyphTile_ShadowedFont_Width0(struct GlyphBuffer *, u32 *, u32 *, u8); +static void ShiftGlyphTile_ShadowedFont_Width1(struct GlyphBuffer *, u32 *, u32 *, u8); +static void ShiftGlyphTile_ShadowedFont_Width2(struct GlyphBuffer *, u32 *, u32 *, u8); +static void ShiftGlyphTile_ShadowedFont_Width3(struct GlyphBuffer *, u32 *, u32 *, u8); +static void ShiftGlyphTile_ShadowedFont_Width4(struct GlyphBuffer *, u32 *, u32 *, u8); +static void ShiftGlyphTile_ShadowedFont_Width5(struct GlyphBuffer *, u32 *, u32 *, u8); +static void ShiftGlyphTile_ShadowedFont_Width6(struct GlyphBuffer *, u32 *, u32 *, u8); +static void ShiftGlyphTile_ShadowedFont_Width7(struct GlyphBuffer *, u32 *, u32 *, u8); +static void ShiftGlyphTile_ShadowedFont_Width8(struct GlyphBuffer *, u32 *, u32 *, u8); + +static struct Window *sMultistepLoadFont_Window; +static u16 sMultistepLoadFont_StartOffset; +static u16 sMultistepLoadFont_Index; +static struct Window sTempWindow; +static u8 sWaitType; +static u8 sLineLength; +static struct GlyphBuffer sGlyphBuffer; + +EWRAM_DATA u16 gBGTilemapBuffers[4][0x400] = {0}; + +EWRAM_DATA u8 gStringVar1[0x100] = {0}; +EWRAM_DATA u8 gStringVar2[0x100] = {0}; +EWRAM_DATA u8 gStringVar3[0x100] = {0}; +EWRAM_DATA u8 gStringVar4[0x100] = {0}; + +extern u16 gBattleTypeFlags; +extern u8 gIsLinkContest; +extern u8 gTileBuffer[]; + +vu16 *const gBGControlRegs[] = +{ + ®_BG0CNT, + ®_BG1CNT, + ®_BG2CNT, + ®_BG3CNT, +}; + +vu16 *const gBGHOffsetRegs[] = +{ + ®_BG0HOFS, + ®_BG1HOFS, + ®_BG2HOFS, + ®_BG3HOFS, +}; + +vu16 *const gBGVOffsetRegs[] = +{ + ®_BG0VOFS, + ®_BG1VOFS, + ®_BG2VOFS, + ®_BG3VOFS, +}; + +const u16 gUnknown_081E29D8[] = { 0x100, 0x200, 0x400, 0x800 }; +const u16 gUnknown_081E29E0[] = { 0x100, 0x200, 0x400, 0x800 }; +const u16 gUnknown_081E29E8[] = { 1, 2, 4, 8 }; + +static const u8 sFont0LatinGlyphs[] = INCBIN_U8("graphics/fonts/font0_lat.1bpp"); +static const u8 sFont1LatinGlyphs[] = INCBIN_U8("graphics/fonts/font1_lat.1bpp"); +static const u8 sFont0JapaneseGlyphs[] = INCBIN_U8("graphics/fonts/font0_jpn.1bpp"); +static const u8 sFont1JapaneseGlyphs[] = INCBIN_U8("graphics/fonts/font1_jpn.1bpp"); +static const u8 sBrailleGlyphs[] = INCBIN_U8("graphics/fonts/font6_braille.1bpp"); +static const u32 sDownArrowTiles[] = INCBIN_U32("graphics/fonts/down_arrow.4bpp"); + +// clang-format off +#include "../data/text/type1_map.h" +#include "../data/text/type3_map.h" +#include "../data/text/font1_widths.h" +#include "../data/text/font4_widths.h" +#include "../data/text/font0_widths.h" +#include "../data/text/font3_widths.h" +// clang-format on + +const u16 gUnknownPalette_81E6692[] = INCBIN_U16("graphics/fonts/unknown_81E6692.gbapal"); +const u16 gFontDefaultPalette[] = INCBIN_U16("graphics/fonts/default.gbapal"); + +const u8 sBlankTile[8] = { 0, 0, 0, 0, 0, 0, 0, 0, }; + +static const u32 sGlyphMasks[9][8][3] = +{ + { + { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, + { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, + { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, + { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, + { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, + { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, + { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, + { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, + }, + { + { 0x00000000,0xFFFFFFFF,0xFFFFFFF0, }, + { 0x0000000F,0xFFFFFFFF,0xFFFFFF00, }, + { 0x000000FF,0xFFFFFFFF,0xFFFFF000, }, + { 0x00000FFF,0xFFFFFFFF,0xFFFF0000, }, + { 0x0000FFFF,0xFFFFFFFF,0xFFF00000, }, + { 0x000FFFFF,0xFFFFFFFF,0xFF000000, }, + { 0x00FFFFFF,0xFFFFFFFF,0xF0000000, }, + { 0x0FFFFFFF,0xFFFFFFFF,0x00000000, }, + }, + { + { 0x00000000,0xFFFFFFFF,0xFFFFFF00, }, + { 0x0000000F,0xFFFFFFFF,0xFFFFF000, }, + { 0x000000FF,0xFFFFFFFF,0xFFFF0000, }, + { 0x00000FFF,0xFFFFFFFF,0xFFF00000, }, + { 0x0000FFFF,0xFFFFFFFF,0xFF000000, }, + { 0x000FFFFF,0xFFFFFFFF,0xF0000000, }, + { 0x00FFFFFF,0xFFFFFFFF,0x00000000, }, + { 0x0FFFFFFF,0xFFFFFFF0,0x00000000, }, + }, + { + { 0x00000000,0xFFFFFFFF,0xFFFFF000, }, + { 0x0000000F,0xFFFFFFFF,0xFFFF0000, }, + { 0x000000FF,0xFFFFFFFF,0xFFF00000, }, + { 0x00000FFF,0xFFFFFFFF,0xFF000000, }, + { 0x0000FFFF,0xFFFFFFFF,0xF0000000, }, + { 0x000FFFFF,0xFFFFFFFF,0x00000000, }, + { 0x00FFFFFF,0xFFFFFFF0,0x00000000, }, + { 0x0FFFFFFF,0xFFFFFF00,0x00000000, }, + }, + { + { 0x00000000,0xFFFFFFFF,0xFFFF0000, }, + { 0x0000000F,0xFFFFFFFF,0xFFF00000, }, + { 0x000000FF,0xFFFFFFFF,0xFF000000, }, + { 0x00000FFF,0xFFFFFFFF,0xF0000000, }, + { 0x0000FFFF,0xFFFFFFFF,0x00000000, }, + { 0x000FFFFF,0xFFFFFFF0,0x00000000, }, + { 0x00FFFFFF,0xFFFFFF00,0x00000000, }, + { 0x0FFFFFFF,0xFFFFF000,0x00000000, }, + }, + { + { 0x00000000,0xFFFFFFFF,0xFFF00000, }, + { 0x0000000F,0xFFFFFFFF,0xFF000000, }, + { 0x000000FF,0xFFFFFFFF,0xF0000000, }, + { 0x00000FFF,0xFFFFFFFF,0x00000000, }, + { 0x0000FFFF,0xFFFFFFF0,0x00000000, }, + { 0x000FFFFF,0xFFFFFF00,0x00000000, }, + { 0x00FFFFFF,0xFFFFF000,0x00000000, }, + { 0x0FFFFFFF,0xFFFF0000,0x00000000, }, + }, + { + { 0x00000000,0xFFFFFFFF,0xFF000000, }, + { 0x0000000F,0xFFFFFFFF,0xF0000000, }, + { 0x000000FF,0xFFFFFFFF,0x00000000, }, + { 0x00000FFF,0xFFFFFFF0,0x00000000, }, + { 0x0000FFFF,0xFFFFFF00,0x00000000, }, + { 0x000FFFFF,0xFFFFF000,0x00000000, }, + { 0x00FFFFFF,0xFFFF0000,0x00000000, }, + { 0x0FFFFFFF,0xFFF00000,0x00000000, }, + }, + { + { 0x00000000,0xFFFFFFFF,0xF0000000, }, + { 0x0000000F,0xFFFFFFFF,0x00000000, }, + { 0x000000FF,0xFFFFFFF0,0x00000000, }, + { 0x00000FFF,0xFFFFFF00,0x00000000, }, + { 0x0000FFFF,0xFFFFF000,0x00000000, }, + { 0x000FFFFF,0xFFFF0000,0x00000000, }, + { 0x00FFFFFF,0xFFF00000,0x00000000, }, + { 0x0FFFFFFF,0xFF000000,0x00000000, }, + }, + { + { 0x00000000,0xFFFFFFFF,0x00000000, }, + { 0x0000000F,0xFFFFFFF0,0x00000000, }, + { 0x000000FF,0xFFFFFF00,0x00000000, }, + { 0x00000FFF,0xFFFFF000,0x00000000, }, + { 0x0000FFFF,0xFFFF0000,0x00000000, }, + { 0x000FFFFF,0xFFF00000,0x00000000, }, + { 0x00FFFFFF,0xFF000000,0x00000000, }, + { 0x0FFFFFFF,0xF0000000,0x00000000, }, + }, +}; + +static const struct ShiftAmount sGlyphShiftAmounts[8] = +{ + { 0, 32 }, + { 4, 28 }, + { 8, 24 }, + { 12, 20 }, + { 16, 16 }, + { 20, 12 }, + { 24, 8 }, + { 28, 4 }, +}; + +typedef void (*PrintGlyphFunc)(struct Window *, u32); + +static const PrintGlyphFunc sPrintGlyphFuncs[] = +{ + PrintGlyph_TextMode0, + PrintGlyph_TextMode1, + PrintGlyph_TextMode2, +}; + +typedef void (*WriteGlyphTilemapFunc)(struct Window *, u32); + +static const WriteGlyphTilemapFunc sWriteGlyphTilemapFuncs[] = +{ + WriteGlyphTilemap_Font0_Font3, + WriteGlyphTilemap_Font1_Font4, + WriteGlyphTilemap_Font2_Font5, + WriteGlyphTilemap_Font0_Font3, + WriteGlyphTilemap_Font1_Font4, + WriteGlyphTilemap_Font2_Font5, + WriteGlyphTilemap_Font6, +}; + +static const struct Window sDefaultWindow = { .language = GAME_LANGUAGE }; + +typedef u8 (*ExtCtrlCodeFunc)(struct Window *); + +static const ExtCtrlCodeFunc sExtCtrlCodeFuncs[] = +{ + ExtCtrlCode_Nop, + ExtCtrlCode_ForegroundColor, + ExtCtrlCode_BackgroundColor, + ExtCtrlCode_ShadowColor, + ExtCtrlCode_AllColors, + ExtCtrlCode_Palette, + ExtCtrlCode_Font, + ExtCtrlCode_DefaultFont, + ExtCtrlCode_Pause, + ExtCtrlCode_WaitButton, + ExtCtrlCode_WaitSound, + ExtCtrlCode_PlayBGM, + ExtCtrlCode_Escape, + ExtCtrlCode_Nop2, + ExtCtrlCode_SetCursorY, + ExtCtrlCode_ClearWindowTextLines, + ExtCtrlCode_PlaySE, + ExtCtrlCode_Skip, + ExtCtrlCode_SetCursorX, + ExtCtrlCode_SkipTo, + ExtCtrlCode_Spacing, + ExtCtrlCode_Japanese, + ExtCtrlCode_Latin, +}; + +extern const u32 gFont3LatinGlyphs[]; +extern const u32 gFont4LatinGlyphs[]; +extern const u32 gFont3JapaneseGlyphs[]; +extern const u32 gFont4JapaneseGlyphs[]; + +static const struct Font sFonts[] = +{ + // Japanese fonts + { 0, (u8 *)sFont0JapaneseGlyphs, 16, 8 }, + { 1, (u8 *)sFont1JapaneseGlyphs, 8, 0 }, + { 2, (u8 *)sFont1JapaneseGlyphs, 8, 0 }, + { 4, (u8 *)gFont3JapaneseGlyphs, 64, 512 }, + { 1, (u8 *)gFont4JapaneseGlyphs, 32, 0 }, + { 2, (u8 *)gFont4JapaneseGlyphs, 32, 0 }, + { 3, (u8 *)sBrailleGlyphs, 8, 0 }, + // Latin + { 0, (u8 *)sFont0LatinGlyphs, 16, 8 }, + { 1, (u8 *)sFont1LatinGlyphs, 8, 0 }, + { 2, (u8 *)sFont1LatinGlyphs, 8, 0 }, + { 0, (u8 *)gFont3LatinGlyphs, 64, 32 }, + { 1, (u8 *)gFont4LatinGlyphs, 32, 0 }, + { 2, (u8 *)gFont4LatinGlyphs, 32, 0 }, + { 3, (u8 *)sBrailleGlyphs, 8, 0 }, +}; + +static const u8 sTextSpeedDelays[] = { 6, 3, 1 }; // slow, mid, fast + +static const u8 sExtCtrlCodeLengths[] = +{ + 1, + 2, + 2, + 2, + 4, + 2, + 2, + 1, + 2, + 1, + 1, + 3, + 2, + 2, + 2, + 1, + 3, + 2, + 2, + 2, + 2, + 1, + 1, +}; + +typedef void (*ShiftGlyphTileUnshadowedFunc)(struct GlyphBuffer *, u8 *, u32 *, u8); + +static const ShiftGlyphTileUnshadowedFunc sShiftGlyphTileUnshadowedFuncs[] = +{ + ShiftGlyphTile_UnshadowedFont_Width0, + ShiftGlyphTile_UnshadowedFont_Width1, + ShiftGlyphTile_UnshadowedFont_Width2, + ShiftGlyphTile_UnshadowedFont_Width3, + ShiftGlyphTile_UnshadowedFont_Width4, + ShiftGlyphTile_UnshadowedFont_Width5, + ShiftGlyphTile_UnshadowedFont_Width6, + ShiftGlyphTile_UnshadowedFont_Width7, + ShiftGlyphTile_UnshadowedFont_Width8, +}; + +typedef void (*ShiftGlyphTileShadowedFunc)(struct GlyphBuffer *, u32 *, u32 *, u8); + +static const ShiftGlyphTileShadowedFunc sShiftGlyphTileShadowedFuncs[] = +{ + ShiftGlyphTile_ShadowedFont_Width0, + ShiftGlyphTile_ShadowedFont_Width1, + ShiftGlyphTile_ShadowedFont_Width2, + ShiftGlyphTile_ShadowedFont_Width3, + ShiftGlyphTile_ShadowedFont_Width4, + ShiftGlyphTile_ShadowedFont_Width5, + ShiftGlyphTile_ShadowedFont_Width6, + ShiftGlyphTile_ShadowedFont_Width7, + ShiftGlyphTile_ShadowedFont_Width8, +}; + +const struct WindowConfig gWindowConfig_81E6C3C = +{ + 0, // BG number + 2, // BG character base block + 31, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 0, // font + 0, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6C58 = +{ + 0, // BG number + 0, // BG character base block + 24, // BG screen base block + 0, // BG priority + 0, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 0, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 26, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(24), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6C74 = +{ + 0, // BG number + 0, // BG character base block + 0, // BG screen base block + 0, // BG priority + 0, // palette number + 1, // foreground color + 0, // background color + 3, // shadow color + 4, // font + 0, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)OBJ_VRAM0, // tile data + NULL, // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6C90 = +{ + 0, // BG number + 1, // BG character base block + 30, // BG screen base block + 2, // BG priority + 31, // palette number + 15, // foreground color + 0, // background color + 1, // shadow color + 4, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(1), // tile data + (u16 *)BG_SCREEN_ADDR(30), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6CAC = +{ + 0, // BG number + 0, // BG character base block + 0, // BG screen base block + 0, // BG priority + 0, // palette number + 15, // foreground color + 0, // background color + 1, // shadow color + 4, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 8, // width + 60, // height + gTileBuffer, // tile data + NULL, // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6CC8 = +{ + 2, // BG number + 2, // BG character base block + 15, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(15), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6CE4 = +{ + 0, // BG number + 2, // BG character base block + 31, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6D00 = +{ + 0, // BG number + 0, // BG character base block + 31, // BG screen base block + 0, // BG priority + 15, // palette number + 2, // foreground color + 15, // background color + 3, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6D1C = +{ + 1, // BG number + 0, // BG character base block + 31, // BG screen base block + 1, // BG priority + 15, // palette number + 2, // foreground color + 15, // background color + 3, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6D38 = +{ + 0, // BG number + 0, // BG character base block + 0, // BG screen base block + 0, // BG priority + 0, // palette number + 15, // foreground color + 0, // background color + 14, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 8, // width + 64, // height + gTileBuffer, // tile data + NULL, // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6D54 = +{ + 3, // BG number + 3, // BG character base block + 15, // BG screen base block + 3, // BG priority + 2, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(3), // tile data + (u16 *)BG_SCREEN_ADDR(15), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6D70 = +{ + 3, // BG number + 3, // BG character base block + 15, // BG screen base block + 3, // BG priority + 3, // palette number + 1, // foreground color + 3, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(3), // tile data + (u16 *)BG_SCREEN_ADDR(15), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6D8C = +{ + 1, // BG number + 0, // BG character base block + 14, // BG screen base block + 1, // BG priority + 0, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(14), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6DA8 = +{ + 0, // BG number + 0, // BG character base block + 12, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(11), // tilemap +}; + +const struct WindowConfig WindowConfig_TrainerCard_Back_Values = +{ + 0, // BG number + 2, // BG character base block + 30, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(30), // tilemap +}; + +const struct WindowConfig WindowConfig_TrainerCard_Back_Labels = +{ + 0, // BG number + 2, // BG character base block + 30, // BG screen base block + 0, // BG priority + 14, // palette number + 1, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(30), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6DFC = +{ + 0, // BG number + 2, // BG character base block + 31, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6E18 = +{ + 0, // BG number + 2, // BG character base block + 31, // BG screen base block + 1, // BG priority + 15, // palette number + 1, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6E34 = +{ + 1, // BG number + 0, // BG character base block + 31, // BG screen base block + 1, // BG priority + 15, // palette number + 1, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6E50 = +{ + 0, // BG number + 2, // BG character base block + 28, // BG screen base block + 0, // BG priority + 13, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(28), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6E6C = +{ + 0, // BG number + 2, // BG character base block + 30, // BG screen base block + 0, // BG priority + 13, // palette number + 15, // foreground color + 0, // background color + 10, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(30), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6E88 = +{ + 0, // BG number + 0, // BG character base block + 31, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6EA4 = +{ + 1, // BG number + 0, // BG character base block + 28, // BG screen base block + 1, // BG priority + 1, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 8, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(28), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6EC0 = +{ + 2, // BG number + 2, // BG character base block + 29, // BG screen base block + 2, // BG priority + 1, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 8, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(29), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6EDC = +{ + 1, // BG number + 0, // BG character base block + 28, // BG screen base block + 1, // BG priority + 2, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 8, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(28), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6EF8 = +{ + 2, // BG number + 2, // BG character base block + 29, // BG screen base block + 2, // BG priority + 2, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 8, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(29), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6F14 = +{ + 1, // BG number + 0, // BG character base block + 28, // BG screen base block + 1, // BG priority + 3, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 8, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(28), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6F30 = +{ + 2, // BG number + 2, // BG character base block + 29, // BG screen base block + 2, // BG priority + 3, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 8, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(29), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6F4C = +{ + 3, // BG number + 0, // BG character base block + 30, // BG screen base block + 3, // BG priority + 0, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(30), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6F68 = +{ + 0, // BG number + 2, // BG character base block + 13, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(13), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6F84 = +{ + 0, // BG number + 2, // BG character base block + 31, // BG screen base block + 0, // BG priority + 15, // palette number + 15, // foreground color + 0, // background color + 1, // shadow color + 3, // font + 0, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6FA0 = +{ + 1, // BG number + 0, // BG character base block + 24, // BG screen base block + 3, // BG priority + 15, // palette number + 1, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 0, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(24), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6FBC = +{ + 0, // BG number + 0, // BG character base block + 30, // BG screen base block + 0, // BG priority + 15, // palette number + 15, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 0, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(30), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6FD8 = +{ + 0, // BG number + 0, // BG character base block + 24, // BG screen base block + 0, // BG priority + 15, // palette number + 15, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 0, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(24), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E6FF4 = +{ + 0, // BG number + 0, // BG character base block + 24, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 0, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(24), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E7010 = +{ + 0, // BG number + 0, // BG character base block + 30, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 0, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(30), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E702C = +{ + 3, // BG number + 2, // BG character base block + 15, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(15), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E7048 = +{ + 2, // BG number + 2, // BG character base block + 14, // BG screen base block + 2, // BG priority + 15, // palette number + 1, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 16, // tilemap left coordinate + 0, // tilemap top coordinate + 16, // width + 32, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(14), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E7064 = +{ + 2, // BG number + 2, // BG character base block + 14, // BG screen base block + 2, // BG priority + 15, // palette number + 1, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(14), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E7080 = +{ + 3, // BG number + 0, // BG character base block + 30, // BG screen base block + 3, // BG priority + 11, // palette number + 1, // foreground color + 15, // background color + 5, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(30), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E709C = +{ + 0, // BG number + 0, // BG character base block + 31, // BG screen base block + 1, // BG priority + 15, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E70B8 = +{ + 2, // BG number + 0, // BG character base block + 30, // BG screen base block + 2, // BG priority + 11, // palette number + 1, // foreground color + 0, // background color + 5, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(30), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E70D4 = +{ + 3, // BG number + 0, // BG character base block + 30, // BG screen base block + 3, // BG priority + 11, // palette number + 1, // foreground color + 15, // background color + 5, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(30), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E70F0 = +{ + 0, // BG number + 0, // BG character base block + 0, // BG screen base block + 0, // BG priority + 0, // palette number + 15, // foreground color + 1, // background color + 14, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 32, // width + 32, // height + gTileBuffer, // tile data + NULL, // tilemap +}; + +const struct WindowConfig gWindowConfig_81E710C = +{ + 0, // BG number + 0, // BG character base block + 31, // BG screen base block + 1, // BG priority + 15, // palette number + 1, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E7128 = +{ + 0, // BG number + 2, // BG character base block + 31, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E7144 = +{ + 0, // BG number + 2, // BG character base block + 31, // BG screen base block + 0, // BG priority + 13, // palette number + 1, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E7160 = +{ + 1, // BG number + 1, // BG character base block + 10, // BG screen base block + 1, // BG priority + 14, // palette number + 1, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 0, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(1), // tile data + (u16 *)BG_SCREEN_ADDR(10), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E717C = +{ + 0, // BG number + 3, // BG character base block + 31, // BG screen base block + 0, // BG priority + 15, // palette number + 15, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 0, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(3), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E7198 = +{ + 0, // BG number + 2, // BG character base block + 15, // BG screen base block + 0, // BG priority + 15, // palette number + 15, // foreground color + 0, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(15), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E71B4 = +{ + 0, // BG number + 2, // BG character base block + 15, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(15), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E71D0 = +{ + 1, // BG number + 1, // BG character base block + 28, // BG screen base block + 0, // BG priority + 5, // palette number + 13, // foreground color + 14, // background color + 15, // shadow color + 3, // font + 0, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(1), // tile data + (u16 *)BG_SCREEN_ADDR(28), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E71EC = +{ + 2, // BG number + 1, // BG character base block + 30, // BG screen base block + 0, // BG priority + 5, // palette number + 13, // foreground color + 14, // background color + 15, // shadow color + 3, // font + 0, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(1), // tile data + (u16 *)BG_SCREEN_ADDR(30), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E7208 = +{ + 0, // BG number + 2, // BG character base block + 28, // BG screen base block + 0, // BG priority + 8, // palette number + 1, // foreground color + 0, // background color + 2, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(28), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E7224 = +{ + 0, // BG number + 0, // BG character base block + 31, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(0), // tile data + (u16 *)BG_SCREEN_ADDR(31), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E7240 = +{ + 1, // BG number + 2, // BG character base block + 30, // BG screen base block + 0, // BG priority + 15, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)BG_CHAR_ADDR(2), // tile data + (u16 *)BG_SCREEN_ADDR(30), // tilemap +}; + +const struct WindowConfig gWindowConfig_81E725C = +{ + 0, // BG number + 0, // BG character base block + 0, // BG screen base block + 0, // BG priority + 0, // palette number + 15, // foreground color + 0, // background color + 14, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 30, // width + 20, // height + (u8 *)OBJ_VRAM0, // tile data + NULL, // tilemap +}; + +const struct WindowConfig gWindowConfig_81E7278 = +{ + 0, // BG number + 0, // BG character base block + 0, // BG screen base block + 0, // BG priority + 0, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 3, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 16, // width + 32, // height + gTileBuffer, // tile data + NULL, // tilemap +}; + +const struct WindowConfig gWindowConfig_81E7294 = +{ + 0, // BG number + 0, // BG character base block + 0, // BG screen base block + 0, // BG priority + 0, // palette number + 1, // foreground color + 15, // background color + 8, // shadow color + 4, // font + 2, // text mode + 0, // spacing + 0, // tilemap left coordinate + 0, // tilemap top coordinate + 16, // width + 32, // height + gTileBuffer, // tile data + NULL, // tilemap +}; + +static void UpdateBGRegs(const struct WindowConfig *winConfig) +{ + u8 bgNum = winConfig->bgNum; + *gBGHOffsetRegs[bgNum] = 0; + *gBGVOffsetRegs[bgNum] = 0; + *gBGControlRegs[bgNum] = winConfig->priority | (winConfig->screenBaseBlock << 8) | (winConfig->charBaseBlock << 2); +} + +static void ClearBGMem(const struct WindowConfig *winConfig) +{ + CpuFastFill(0, winConfig->tileData, 32); + + if (winConfig->tilemap) + CpuFastFill(0, winConfig->tilemap, 0x800); +} + +void LoadFontDefaultPalette(const struct WindowConfig *winConfig) +{ + LoadPalette(gFontDefaultPalette, 16 * winConfig->paletteNum, 32); +} + +void SetUpWindowConfig(const struct WindowConfig *winConfig) +{ + UpdateBGRegs(winConfig); + ClearBGMem(winConfig); + LoadFontDefaultPalette(winConfig); +} + +u16 InitWindowTileData(struct Window *win, u16 startOffset) +{ + u16 retVal; + + win->tileDataStartOffset = startOffset; + retVal = 0; + + switch (win->config->textMode) + { + case 2: + retVal = InitVariableWidthFontTileData(win, startOffset); + break; + case 1: + switch (win->config->fontNum) + { + case 0: + case 3: + retVal = LoadFixedWidthFont(win, startOffset); + break; + case 1: + case 2: + retVal = LoadFixedWidthFont_Font1Latin(win, startOffset); + break; + case 4: + case 5: + retVal = LoadFixedWidthFont_Font4Latin(win, startOffset); + break; + case 6: + retVal = LoadFixedWidthFont_Braille(win, startOffset); + break; + } + break; + } + + return retVal; +} + +static u16 InitVariableWidthFontTileData(struct Window *win, u16 startOffset) +{ + u8 *buffer; + + win->tileDataStartOffset = startOffset; + win->tileDataOffset = 2; + buffer = win->tileData + 32 * win->tileDataStartOffset; + CpuFastFill(0, buffer, 32); + ApplyColors_UnshadowedFont(sBlankTile, (u32 *)(buffer + 32), win->config->foregroundColor, win->config->backgroundColor); + return win->tileDataStartOffset + win->tileDataOffset + win->width * win->height; +} + +static u16 LoadFixedWidthFont(struct Window *win, u16 startOffset) +{ + s32 glyph; + u8 *buffer = win->tileData + 32 * startOffset; + for (glyph = 0; glyph < 256; glyph++) + { + LoadFixedWidthGlyph(win, glyph, buffer); + buffer += 64; + } + return 2 * glyph; +} + +static u16 LoadFixedWidthFont_Font1Latin(struct Window *win, u16 startOffset) +{ + s32 i; + u8 *buffer = win->tileData + 32 * startOffset; + for (i = 0; i < 256; i++) + { + ApplyColors_UnshadowedFont(&sFont1LatinGlyphs[8 * i], (u32 *)buffer, win->foregroundColor, win->backgroundColor); + buffer += 32; + } + return i; +} + +static u16 LoadFixedWidthFont_Font4Latin(struct Window *win, u16 startOffset) +{ + s32 i; + u8 *buffer = win->tileData + 32 * startOffset; + for (i = 0; i < 256; i++) + { + ApplyColors_ShadowedFont(&gFont4LatinGlyphs[8 * i], buffer, win->foregroundColor, win->shadowColor, win->backgroundColor); + buffer += 32; + } + return i; +} + +static u16 LoadFixedWidthFont_Braille(struct Window *win, u16 startOffset) +{ + s32 i; + u8 *buffer = win->tileData + 32 * startOffset; + for (i = 0; i < 256; i++) + { + ApplyColors_UnshadowedFont(&sBrailleGlyphs[8 * i], (u32 *)buffer, win->foregroundColor, win->backgroundColor); + buffer += 32; + } + return i; +} + +u32 MultistepInitWindowTileData(struct Window *win, u16 startOffset) +{ + u32 retVal; + sMultistepLoadFont_Window = win; + sMultistepLoadFont_Index = 0; + sMultistepLoadFont_StartOffset = startOffset; + win->tileDataStartOffset = startOffset; + retVal = 0; + + switch (win->config->textMode) + { + case 2: + retVal = InitVariableWidthFontTileData(win, startOffset); + break; + case 1: + retVal = 256; + if (win->config->fontNum == 0 + || win->config->fontNum == 3) + retVal *= 2; + break; + } + + return retVal; +} + +bool32 MultistepLoadFont(void) +{ + bool32 retVal = TRUE; + + if (sMultistepLoadFont_Window->config->textMode == 1) + { + s32 i; + + for (i = sMultistepLoadFont_Index; i < sMultistepLoadFont_Index + 16; i++) + MultistepLoadFont_LoadGlyph(sMultistepLoadFont_Window, sMultistepLoadFont_StartOffset, i); + + sMultistepLoadFont_Index += 16; + + if (sMultistepLoadFont_Index < 256) + retVal = FALSE; + } + + return retVal; +} + +static void MultistepLoadFont_LoadGlyph(struct Window *win, u16 startOffset, u8 glyph) +{ + u8 *buffer; + + switch (win->config->fontNum) + { + case 0: + case 3: + buffer = win->tileData + 32 * startOffset + 64 * glyph; + LoadFixedWidthGlyph(win, glyph, buffer); + break; + case 1: + case 2: + buffer = win->tileData + 32 * (glyph + startOffset); + ApplyColors_UnshadowedFont( + &sFont1LatinGlyphs[8 * glyph], + (u32 *)buffer, + win->foregroundColor, + win->backgroundColor); + break; + case 4: + case 5: + buffer = win->tileData + 32 * (glyph + startOffset); + ApplyColors_ShadowedFont( + &gFont4LatinGlyphs[8 * glyph], + buffer, + win->foregroundColor, + win->shadowColor, + win->backgroundColor); + break; + } +} + +void EmptyFunc(void) +{ +} + +void InitWindowFromConfig(struct Window *win, const struct WindowConfig *winConfig) +{ + *win = sDefaultWindow; + win->config = (struct WindowConfig *)winConfig; + win->textMode = winConfig->textMode; + win->spacing = winConfig->spacing; + win->fontNum = winConfig->fontNum; + win->paletteNum = winConfig->paletteNum; + win->tilemapLeft = winConfig->tilemapLeft; + win->tilemapTop = winConfig->tilemapTop; + win->width = winConfig->width; + win->height = winConfig->height; + win->tileData = winConfig->tileData; + win->tilemap = winConfig->tilemap; + InitColors(win); + SetBackgroundColor(win, winConfig->backgroundColor); + SetShadowColor(win, winConfig->shadowColor); + SetForegroundColor(win, winConfig->foregroundColor); +} + +void InitWindow(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top) +{ + struct WindowConfig *winConfig = win->config; + win->textMode = winConfig->textMode; + win->fontNum = winConfig->fontNum; + win->language = GAME_LANGUAGE; + win->paletteNum = winConfig->paletteNum; + win->win_field_B = 0; + win->win_field_C = 0; + win->delayCounter = 0; + win->spacing = winConfig->spacing; + win->win_field_F = 0; + win->tilemapLeft = winConfig->tilemapLeft; + win->tilemapTop = winConfig->tilemapTop; + win->width = winConfig->width; + win->height = winConfig->height; + win->text = text; + win->textIndex = 0; + win->tileDataStartOffset = tileDataStartOffset; + win->tileDataOffset = 0; + win->left = 8 * left; + win->cursorX = 0; + win->top = 8 * top; + win->cursorY = 0; + win->state = WIN_STATE_BEGIN; + win->downArrowCounter = 0; + win->tileData = winConfig->tileData; + win->tilemap = winConfig->tilemap; + InitColors(win); + SetBackgroundColor(win, winConfig->backgroundColor); + SetShadowColor(win, winConfig->shadowColor); + SetForegroundColor(win, winConfig->foregroundColor); +} + +void sub_8002E4C(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u16 top, u32 a6) +{ + u8 val; + + InitWindow(win, text, tileDataStartOffset, 0, 0); + win->left = left; + win->top = top; + val = 0; + if (a6) + val = 255; + win->win_field_F = val; + if (val) + ClipLeft(win); +} + +void sub_8002E90(struct Window *win, const u8 *text) +{ + win->state = WIN_STATE_NORMAL; + win->text = text; + win->textIndex = 0; + win->downArrowCounter = 0; + win->win_field_B = -1; + win->win_field_C = 0; + win->delayCounter = 0; +} + +void sub_8002EB0(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top) +{ + gMain.watchedKeysMask = A_BUTTON | B_BUTTON; + gMain.watchedKeysPressed = 0; + sWaitType = 0; + sLineLength = 26; + InitWindow(win, text, tileDataStartOffset, left, top); + win->win_field_B = -1; + if (win->textMode == 0) + { + u16 val = GetCursorTileNum(win, 0, 0); + u8 *buffer = win->tileData + 32 * val; + ApplyColors_UnshadowedFont(sBlankTile, (u32 *)buffer, win->backgroundColor, win->backgroundColor); + ApplyColors_UnshadowedFont(&sFont1LatinGlyphs[8 * 0x6E], (u32 *)(buffer + 32), win->foregroundColor, win->backgroundColor); + win->tileDataOffset = 2; + } +} + +u8 sub_8002F44(struct Window *win) +{ + while (win->state) + { + if (win->state == WIN_STATE_NEWLINE) + { + AddToCursorY(win, 16); + win->cursorX = 0; + if (win->win_field_F) + ClipLeft(win); + win->state = WIN_STATE_NORMAL; + } + else if (win->state == WIN_STATE_PLACEHOLDER) + { + sub_8002FA0(win, GetExpandedPlaceholder(win->text[win->textIndex++])); + } + + InterpretText(win); + } + return 1; +} + +static u8 sub_8002FA0(struct Window *win, const u8 *text) +{ + u8 retVal; + u8 savedLanguage = win->language; + const u8 *savedText = win->text; + u16 savedTextIndex = win->textIndex; + win->text = text; + win->textIndex = 0; + win->state = WIN_STATE_NORMAL; + retVal = sub_8002F44(win); + win->text = savedText; + win->textIndex = savedTextIndex; + win->state = WIN_STATE_NORMAL; + win->language = savedLanguage; + return retVal; +} + +static u8 InterpretText(struct Window *win) +{ + u8 c = win->text[win->textIndex++]; + + switch (c) + { + case 0xFF: + ClipRight(win); + win->state = WIN_STATE_END; + return 0; + case 0xFD: + win->state = WIN_STATE_PLACEHOLDER; + return 2; + case 0xFE: + ClipRight(win); + win->state = WIN_STATE_NEWLINE; + return 2; + case 0xFB: + DrawInitialDownArrow(win); + win->state = WIN_STATE_PARAGRAPH; + return 2; + case 0xFA: + DrawInitialDownArrow(win); + win->state = WIN_STATE_NEWLINE_WAIT; + return 2; + case 0xFC: + return HandleExtCtrlCode(win); + } + + sPrintGlyphFuncs[win->textMode](win, c); + return 1; +} + +static u8 HandleExtCtrlCode(struct Window *win) +{ + return sExtCtrlCodeFuncs[win->text[win->textIndex++]](win); +} + +static u8 ExtCtrlCode_Nop(struct Window *win) +{ + return 2; +} + +static u8 ExtCtrlCode_ForegroundColor(struct Window *win) +{ + SetForegroundColor(win, win->text[win->textIndex++]); + return 2; +} + +static u8 ExtCtrlCode_BackgroundColor(struct Window *win) +{ + SetBackgroundColor(win, win->text[win->textIndex++]); + return 2; +} + +static u8 ExtCtrlCode_ShadowColor(struct Window *win) +{ + SetShadowColor(win, win->text[win->textIndex++]); + return 2; +} + +static u8 ExtCtrlCode_AllColors(struct Window *win) +{ + SetForegroundColor(win, win->text[win->textIndex++]); + SetBackgroundColor(win, win->text[win->textIndex++]); + SetShadowColor(win, win->text[win->textIndex++]); + return 2; +} + +static u8 ExtCtrlCode_Palette(struct Window *win) +{ + win->paletteNum = win->text[win->textIndex++]; + return 2; +} + +static u8 ExtCtrlCode_Font(struct Window *win) +{ + win->fontNum = win->text[win->textIndex++]; + return 2; +} + +static u8 ExtCtrlCode_DefaultFont(struct Window *win) +{ + win->fontNum = win->config->fontNum; + return 2; +} + +static u8 ExtCtrlCode_Pause(struct Window *win) +{ + ClipRight(win); + win->state = WIN_STATE_PAUSE; + win->delayCounter = win->text[win->textIndex++]; + return 2; +} + +static u8 ExtCtrlCode_WaitButton(struct Window *win) +{ + ClipRight(win); + win->state = WIN_STATE_WAIT_BUTTON; + return 2; +} + +static u8 ExtCtrlCode_WaitSound(struct Window *win) +{ + ClipRight(win); + win->state = WIN_STATE_WAIT_SOUND; + return 2; +} + +static u8 ExtCtrlCode_PlayBGM(struct Window *win) +{ + u16 loByte = win->text[win->textIndex++]; + u16 hiByte = win->text[win->textIndex++] << 8; + PlayBGM(loByte | hiByte); + return 2; +} + +static u8 ExtCtrlCode_Escape(struct Window *win) +{ + sPrintGlyphFuncs[win->textMode](win, win->text[win->textIndex++]); + return 1; +} + +u8 ExtCtrlCode_Nop2(struct Window *win) +{ + return 1; +} + +static u8 ExtCtrlCode_SetCursorY(struct Window *win) +{ + ClipRight(win); + AddToCursorY(win, 8 * win->text[win->textIndex++]); + return 1; +} + +static u8 ExtCtrlCode_ClearWindowTextLines(struct Window *win) +{ + ClearWindowTextLines(win); + return 2; +} + +static u8 ExtCtrlCode_PlaySE(struct Window *win) +{ + u16 loByte = win->text[win->textIndex++]; + u16 hiByte = win->text[win->textIndex++] << 8; + PlaySE(loByte | hiByte); + return 2; +} + +static void DrawSpace(struct Window *win) +{ + if (win->textMode == 1 || (win->left + win->cursorX) & 7 || win->spacing <= 7) + { + sPrintGlyphFuncs[win->textMode](win, 0); + } + else + { + u32 val = sGlyphBuffer.background; + u16 index = GetCursorTileNum(win, 0, 0); + u32 *buffer = (u32 *)(win->tileData + 32 * index); + buffer[0] = val; + buffer[1] = val; + buffer[2] = val; + buffer[3] = val; + buffer[4] = val; + buffer[5] = val; + buffer[6] = val; + buffer[7] = val; + index = GetCursorTileNum(win, 0, 1); + buffer = (u32 *)(win->tileData + 32 * index); + buffer[0] = val; + buffer[1] = val; + buffer[2] = val; + buffer[3] = val; + buffer[4] = val; + buffer[5] = val; + buffer[6] = val; + buffer[7] = val; + UpdateTilemap(win, 1); + AddToCursorX(win, 8); + } +} + +static void sub_8003344(struct Window *win, u8 newX) +{ + u8 savedSpacing = win->spacing; + + if (newX - win->cursorX <= 8) + win->spacing = newX - win->cursorX; + else + win->spacing = 8 - ((win->left + win->cursorX) & 7); + + while (win->cursorX < newX) + { + s32 spacing; + DrawSpace(win); + spacing = newX - win->cursorX; + if (spacing >= 8) + spacing = 8; + win->spacing = spacing; + } + + win->spacing = savedSpacing; +} + +static u8 ExtCtrlCode_Skip(struct Window *win) +{ + sub_8003344(win, win->cursorX + win->text[win->textIndex++]); + return 1; +} + +static u8 ExtCtrlCode_SetCursorX(struct Window *win) +{ + ClipRight(win); + SetCursorX(win, win->text[win->textIndex++]); + return 1; +} + +static u8 ExtCtrlCode_SkipTo(struct Window *win) +{ + sub_8003344(win, win->text[win->textIndex++]); + return 1; +} + +static u8 ExtCtrlCode_Spacing(struct Window *win) +{ + win->spacing = win->text[win->textIndex++]; + return 2; +} + +static u8 ExtCtrlCode_Japanese(struct Window *win) +{ + win->language = LANGUAGE_JAPANESE; + return 2; +} + +static u8 ExtCtrlCode_Latin(struct Window *win) +{ + win->language = GAME_LANGUAGE; + return 2; +} + +u8 sub_8003418(struct Window *win) +{ + u8 retVal = 1; + while (win->state) + { + if (win->state == WIN_STATE_NEWLINE) + { + AddToCursorY(win, 16); + win->cursorX = 0; + if (win->win_field_F) + ClipLeft(win); + win->state = WIN_STATE_NORMAL; + } + if (InterpretText(win) == 1) + { + retVal = 0; + break; + } + } + return retVal; +} + +u8 sub_8003460(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top) +{ + InitWindow(win, text, tileDataStartOffset, left, top); + return sub_8002F44(win); +} + +u8 sub_8003490(struct Window *win, u8 c, u16 tileDataStartOffset, u8 left, u8 top) +{ + u8 retVal; + u8 text[2]; + text[0] = c; + text[1] = EOS; + InitWindow(win, text, tileDataStartOffset, left, top); + retVal = InterpretText(win); + ClipRight(win); + return retVal; +} + +void sub_80034D4(u8 *tileData, const u8 *text) +{ + sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6C74, tileData, text); +} + +u8 sub_80034EC(u8 *str) +{ + return GetStringWidthGivenWindowConfig((struct WindowConfig *)&gWindowConfig_81E6C74, str); +} + +u8 *sub_8003504(u8 *dest, s32 value, u8 alignAmount, u8 alignType) +{ + sTempWindow.config = (struct WindowConfig *)&gWindowConfig_81E6C74; + InitWindow(&sTempWindow, 0, 0, 0, 0); + return AlignInt2(&sTempWindow, dest, value, alignAmount, alignType); +} + +u8 *sub_8003558(u8 *dest, const u8 *src, u8 alignAmount, u8 alignType) +{ + sTempWindow.config = (struct WindowConfig *)&gWindowConfig_81E6C74; + InitWindow(&sTempWindow, src, 0, 0, 0); + return AlignString(&sTempWindow, dest, src, alignAmount, alignType); +} + +u8 sub_80035AC(struct Window *win) +{ + sWaitType = 0; + return UpdateWindowText(win); +} + +static u8 UpdateWindowText(struct Window *win) +{ + switch (win->state) + { + case WIN_STATE_WAIT_BUTTON: + if (PlayerCanInterruptWait(win)) + { + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + PlaySE(SE_SELECT); + } + else + { + return 0; + } + } + else + { + win->delayCounter--; + if (win->delayCounter) + return 0; + } + win->state = WIN_STATE_NORMAL; + return 0; + case WIN_STATE_INTERRUPTIBLE_PAUSE: + if (PlayerCanInterruptWait(win) && (gMain.heldKeys & (A_BUTTON | B_BUTTON)) && gMain.watchedKeysPressed == TRUE) + { + win->delayCounter = 0; + win->state = WIN_STATE_NORMAL; + break; + } + case WIN_STATE_PAUSE: + if (win->delayCounter) + { + win->delayCounter--; + if (win->delayCounter) + return 0; + } + + win->state = WIN_STATE_NORMAL; + break; + case WIN_STATE_PARAGRAPH: + if (!WaitWithDownArrow(win)) + return 0; + ClearWindowTextLines(win); + win->state = WIN_STATE_NORMAL; + BLOCK_CROSS_JUMP + return 0; + case WIN_STATE_NEWLINE_WAIT: + if (!WaitWithDownArrow(win)) + return 0; + ScrollWindowTextLines(win); + win->state = WIN_STATE_NORMAL; + BLOCK_CROSS_JUMP + return 0; + case WIN_STATE_PLACEHOLDER: + win->textIndex++; + win->state = WIN_STATE_NORMAL; + break; + case WIN_STATE_NEWLINE: + ScrollWindowTextLines(win); + win->state = WIN_STATE_NORMAL; + BLOCK_CROSS_JUMP + return 0; + case WIN_STATE_BEGIN: + ClearWindowTextLines(win); + break; + case WIN_STATE_WAIT_SOUND: + if (IsSEPlaying()) + return 0; + win->state = WIN_STATE_NORMAL; + break; + case WIN_STATE_END: + return 1; + case WIN_STATE_NORMAL: + break; + default: + win->state = WIN_STATE_END; + return 1; + } + + InterpretText(win); + + switch (win->state) + { + case WIN_STATE_END: + return 1; + case WIN_STATE_WAIT_BUTTON: + case WIN_STATE_PARAGRAPH: + case WIN_STATE_NEWLINE_WAIT: + if (PlayerCanInterruptWait(win)) + return 0; + win->delayCounter = 60; + break; + case WIN_STATE_PAUSE: + case WIN_STATE_NEWLINE: + case WIN_STATE_WAIT_SOUND: + break; + default: + win->state = WIN_STATE_INTERRUPTIBLE_PAUSE; + win->delayCounter = GetTextDelay(win); + } + + return 0; +} + +#if defined(ENGLISH) +#define SUB_800374C_LINE_LENGTH 26 +#elif defined(GERMAN) +#define SUB_800374C_LINE_LENGTH 27 +#endif + +u8 sub_800374C(struct Window *win) +{ + u8 retVal; + + sWaitType = 1; + sLineLength = SUB_800374C_LINE_LENGTH; + retVal = UpdateWindowText(win); + sLineLength = 26; + sWaitType = 0; + return retVal; +} + +u8 sub_8003778(struct Window *win) +{ + u8 retVal; + + sWaitType = 2; + sLineLength = 26; + retVal = UpdateWindowText(win); + sWaitType = 0; + return retVal; +} + +u8 sub_80037A0(struct Window *win) +{ + u8 retVal; + + sWaitType = 3; + sLineLength = 17; + retVal = UpdateWindowText(win); + sLineLength = 26; + return retVal; +} + +u32 sub_80037C8(struct Window *win, u8 lineLength) +{ + u8 retVal; + + sWaitType = 0; + sLineLength = lineLength; + retVal = UpdateWindowText(win); + sLineLength = 26; + return retVal; +} + +static void PrintGlyph_TextMode0(struct Window *win, u32 glyph) +{ + AddToCursorX(win, DrawGlyph_TextMode0(win, glyph)); + if (win->win_field_B) + ClipRight(win); +} + +static u8 DrawGlyph_TextMode0(struct Window *win, u32 glyph) +{ + u8 pixelsWidth = GetGlyphWidth(win, glyph); + u32 tilesWidth = DrawGlyphTiles(win, glyph, pixelsWidth); + UpdateTilemap(win, tilesWidth); + return pixelsWidth; +} + +static void PrintGlyph_TextMode1(struct Window *win, u32 glyph) +{ + sWriteGlyphTilemapFuncs[win->fontNum](win, glyph); + win->cursorX += 8; +} + +static void WriteGlyphTilemap_Font0_Font3(struct Window *win, u32 glyph) +{ + s16 val = win->tileDataStartOffset + 2 * glyph; + WriteGlyphTilemap(win, val, val + 1); +} + +static void WriteGlyphTilemap_Font1_Font4(struct Window *win, u32 glyph) +{ + u32 val = glyph * 2; + WriteGlyphTilemap( + win, + win->tileDataStartOffset + sFontType1Map[val], + win->tileDataStartOffset + sFontType1Map[val + 1]); +} + +static void WriteGlyphTilemap_Font2_Font5(struct Window *win, u32 glyph) +{ + WriteGlyphTilemap( + win, + win->tileDataStartOffset + 212, + win->tileDataStartOffset + glyph); +} + +static void WriteGlyphTilemap_Font6(struct Window *win, u32 glyph) +{ + u32 val = glyph * 2; + WriteGlyphTilemap( + win, + win->tileDataStartOffset + sFontType3Map[val], + win->tileDataStartOffset + sFontType3Map[val + 1]); +} + +static void PrintGlyph_TextMode2(struct Window *win, u32 glyph) +{ + u8 width = GetGlyphWidth(win, glyph); + DrawGlyph_TextMode2(win, glyph); + AddToCursorX(win, width); + if (win->win_field_B) + ClipRight(win); +} + +static void DrawGlyph_TextMode2(struct Window *win, u32 glyph) +{ + u8 pixelsWidth = GetGlyphWidth(win, glyph); + u32 tilesWidth = DrawGlyphTiles(win, glyph, pixelsWidth); + UpdateTilemap(win, tilesWidth); +} + +static void LoadFixedWidthGlyph(struct Window *win, u32 glyph, u8 *dest) +{ + u8 *upperTile; + u8 *lowerTile; + + GetGlyphTilePointers(win->fontNum, win->language, glyph, &upperTile, &lowerTile); + + switch (win->fontNum) + { + case 0: + case 1: + case 2: + case 6: + ApplyColors_UnshadowedFont(upperTile, (u32 *)dest, win->foregroundColor, win->backgroundColor); + ApplyColors_UnshadowedFont(lowerTile, (u32 *)(dest + 32), win->foregroundColor, win->backgroundColor); + break; + case 3: + case 4: + case 5: + ApplyColors_ShadowedFont(upperTile, dest, win->foregroundColor, win->shadowColor, win->backgroundColor); + ApplyColors_ShadowedFont(lowerTile, dest + 32, win->foregroundColor, win->shadowColor, win->backgroundColor); + break; + } +} + +static void WriteGlyphTilemap(struct Window *win, u16 upperTileNum, u16 lowerTileNum) +{ + u16 *buffer = GetCursorTilemapPointer(win); + if (buffer) + { + u16 palette = (win->paletteNum << 12); + buffer[0] = upperTileNum | palette; + buffer[32] = lowerTileNum | palette; + } +} + +static void GetGlyphTilePointers(u8 fontNum, u8 language, u16 glyph, u8 **upperTilePtr, u8 **lowerTilePtr) +{ + u16 index; + const struct Font *font; + + if (language == LANGUAGE_JAPANESE) + language = 0; + else + language = 7; + + font = &sFonts[language + fontNum]; + + switch (font->type) + { + case 0: + *upperTilePtr = font->glyphs + glyph * font->glyphSize; + *lowerTilePtr = *upperTilePtr + font->lowerTileOffset; + break; + case 1: + index = 2 * glyph; + *upperTilePtr = font->glyphs + sFontType1Map[index] * font->glyphSize; + *lowerTilePtr = font->glyphs + sFontType1Map[index + 1] * font->glyphSize; + break; + case 2: + *upperTilePtr = font->glyphs + 212 * font->glyphSize; + *lowerTilePtr = font->glyphs + glyph * font->glyphSize; + break; + case 3: + index = 2 * glyph; + *upperTilePtr = font->glyphs + sFontType3Map[index] * font->glyphSize; + *lowerTilePtr = font->glyphs + sFontType3Map[index + 1] * font->glyphSize; + break; + case 4: + *upperTilePtr = font->glyphs + + (glyph & 0xFFF0) * font->glyphSize + + (((glyph &= 0xF) * font->glyphSize) >> 1); + *lowerTilePtr = *upperTilePtr + font->lowerTileOffset; + break; + } +} + +static u16 *GetCursorTilemapPointer(struct Window *win) +{ + u16 *ptr = NULL; + if (win->tilemap) + { + u8 x = ((win->left + win->cursorX) >> 3) + win->tilemapLeft; + u8 y = ((win->top + win->cursorY) >> 3) + win->tilemapTop; + ptr = &win->tilemap[(y * 32) + x]; + } + return ptr; +} + +static void ApplyColors_UnshadowedFont(const u8 *src, u32 *dest, u8 foreground, u8 background) +{ + u32 a[2]; + s32 i; + const u8 *srcRows = src; + + a[0] = background; + a[1] = foreground; + + for (i = 0; i < 8; i++) + { + u32 destRow = a[srcRows[i] & 1] + | (a[(srcRows[i] >> 1) & 1] << 4) + | (a[(srcRows[i] >> 2) & 1] << 8) + | (a[(srcRows[i] >> 3) & 1] << 12) + | (a[(srcRows[i] >> 4) & 1] << 16) + | (a[(srcRows[i] >> 5) & 1] << 20) + | (a[(srcRows[i] >> 6) & 1] << 24) + | (a[(srcRows[i] >> 7) ] << 28); + dest[i] = destRow; + } +} + +static void ApplyColors_ShadowedFont(const void *src, void *dest, u8 foreground, u8 shadow, u8 background) +{ + u32 a[0x10]; + s32 i; + const u32 *curSrc; + u32 *curDest; + u32 colorMask; + + a[0x1] = 0x1; + a[0x2] = 0x2; + a[0x3] = 0x3; + a[0x4] = 0x4; + a[0x5] = 0x5; + a[0x6] = 0x6; + a[0x7] = 0x7; + a[0x8] = 0x8; + a[0x9] = 0x9; + a[0xA] = 0xA; + a[0xB] = 0xB; + a[0xC] = 0xC; + a[0xD] = 0xD; + a[0x0] = background; + a[0xE] = shadow; + a[0xF] = foreground; + + colorMask = 0xF; + + curSrc = src; + curDest = dest; + + for (i = 7; i >= 0; i--) + { + u32 row = *curSrc++; + u32 recoloredRow = a[row & colorMask] + | (a[(row >> 4) & colorMask] << 4) + | (a[(row >> 8) & colorMask] << 8) + | (a[(row >> 12) & colorMask] << 12) + | (a[(row >> 16) & colorMask] << 16) + | (a[(row >> 20) & colorMask] << 20) + | (a[(row >> 24) & colorMask] << 24) + | (a[(row >> 28) ] << 28); + *curDest++ = recoloredRow; + } +} + +static void SetCursorX(struct Window *win, u8 x) +{ + if (win->textMode == 0 && ((win->left + win->cursorX) & 7)) + win->tileDataOffset += 2; + win->cursorX = x; +} + +static void AddToCursorX(struct Window *win, u8 deltaX) +{ + if (win->textMode == 0) + { + u8 x = win->cursorX; + win->cursorX += deltaX; + if (((win->left + win->cursorX) & 0xF8) != ((win->left + x) & 0xF8)) + win->tileDataOffset += 2; + } + else + { + win->cursorX += deltaX; + } +} + +static void AddToCursorY(struct Window *win, u8 deltaY) +{ + if (win->textMode == 0 && ((win->left + win->cursorX) & 7)) + win->tileDataOffset += 2; + win->cursorY += deltaY; +} + +static void EraseAtCursor(struct Window *win) +{ + switch (win->textMode) + { + case 0: + case 2: + DrawGlyphTiles(win, 0, 8); + break; + case 1: + sWriteGlyphTilemapFuncs[win->fontNum](win, 0); + break; + } +} + +static void ClipLeft(struct Window *win) +{ + u32 pixel = win->left & 7; + if (win->textMode != 1 && pixel) + { + const u32 *masks = sGlyphMasks[8][pixel]; + u32 outsideMask = masks[0]; + u32 insideMask = ~outsideMask; + u32 outside = sGlyphBuffer.background & outsideMask; + u16 tileNum = GetCursorTileNum(win, 0, 0); + u32 *buffer = (u32 *)(win->tileData + 32 * tileNum); + buffer[0] = (buffer[0] & insideMask) | outside; + buffer[1] = (buffer[1] & insideMask) | outside; + buffer[2] = (buffer[2] & insideMask) | outside; + buffer[3] = (buffer[3] & insideMask) | outside; + buffer[4] = (buffer[4] & insideMask) | outside; + buffer[5] = (buffer[5] & insideMask) | outside; + buffer[6] = (buffer[6] & insideMask) | outside; + buffer[7] = (buffer[7] & insideMask) | outside; + tileNum = GetCursorTileNum(win, 0, 1); + buffer = (u32 *)(win->tileData + 32 * tileNum); + buffer[0] = (buffer[0] & insideMask) | outside; + buffer[1] = (buffer[1] & insideMask) | outside; + buffer[2] = (buffer[2] & insideMask) | outside; + buffer[3] = (buffer[3] & insideMask) | outside; + buffer[4] = (buffer[4] & insideMask) | outside; + buffer[5] = (buffer[5] & insideMask) | outside; + buffer[6] = (buffer[6] & insideMask) | outside; + buffer[7] = (buffer[7] & insideMask) | outside; + } +} + +static void ClipRight(struct Window *win) +{ + register u8 cursorX asm("r0") = win->cursorX; + u8 left = win->left; + u32 pixel = (cursorX + left) & 7; + if (win->textMode != 1 && pixel) + { + const u32 *masks = sGlyphMasks[8 - pixel][pixel]; + u32 insideMask = masks[0]; + u32 outside = (sGlyphBuffer.background & ~insideMask); + u16 tileNum = GetCursorTileNum(win, 0, 0); + u32 *buffer = (u32 *)(win->tileData + 32 * tileNum); + buffer[0] = (buffer[0] & insideMask) | outside; + buffer[1] = (buffer[1] & insideMask) | outside; + buffer[2] = (buffer[2] & insideMask) | outside; + buffer[3] = (buffer[3] & insideMask) | outside; + buffer[4] = (buffer[4] & insideMask) | outside; + buffer[5] = (buffer[5] & insideMask) | outside; + buffer[6] = (buffer[6] & insideMask) | outside; + buffer[7] = (buffer[7] & insideMask) | outside; + tileNum = GetCursorTileNum(win, 0, 1); + buffer = (u32 *)(win->tileData + 32 * tileNum); + buffer[0] = (buffer[0] & insideMask) | outside; + buffer[1] = (buffer[1] & insideMask) | outside; + buffer[2] = (buffer[2] & insideMask) | outside; + buffer[3] = (buffer[3] & insideMask) | outside; + buffer[4] = (buffer[4] & insideMask) | outside; + buffer[5] = (buffer[5] & insideMask) | outside; + buffer[6] = (buffer[6] & insideMask) | outside; + buffer[7] = (buffer[7] & insideMask) | outside; + UpdateTilemap(win, 1); + } +} + +static void InitColors(struct Window *win) +{ + u32 i; + + win->backgroundColor = 0; + win->shadowColor = 14; + win->foregroundColor = 15; + + for (i = 0; i < 16; i++) + sGlyphBuffer.colors[i] = i; +} + +static void SetBackgroundColor(struct Window *win, u8 color) +{ + u32 val1; + u32 val2; + u32 val3; + win->backgroundColor = color; + sGlyphBuffer.colors[0] = color; + val1 = color | (color << 4); + val2 = val1 | (val1 << 8); + val3 = val2 | (val2 << 16); + sGlyphBuffer.background = val3; +} + +static void SetShadowColor(struct Window *win, u8 color) +{ + win->shadowColor = color; + sGlyphBuffer.colors[14] = color; +} + +static void SetForegroundColor(struct Window *win, u8 color) +{ + win->foregroundColor = color; + sGlyphBuffer.colors[15] = color; +} + +static u8 GetTextDelay(struct Window *win) +{ + if (!PlayerCanInterruptWait(win)) + return 3; + + return sTextSpeedDelays[gSaveBlock2.optionsTextSpeed]; +} + +static bool8 PlayerCanInterruptWait(struct Window *win) +{ + bool8 retVal = TRUE; + + switch (sWaitType) + { + case 2: + retVal = FALSE; + break; + case 3: + retVal = gIsLinkContest ? FALSE : TRUE; + break; + case 1: + retVal = (gBattleTypeFlags & BATTLE_TYPE_LINK) ? FALSE : TRUE; + break; + } + + return retVal; +} + +static void ScrollWindowTextLines(struct Window *win) +{ + switch (win->textMode) + { + case 0: + ScrollWindowTextLines_TextMode0(win); + break; + case 1: + ScrollWindowTextLines_TextMode1(win); + break; + case 2: + ScrollWindowTextLines_TextMode2(win); + break; + } +} + +static void ScrollWindowTextLines_TextMode0(struct Window *win) +{ + if (win->cursorY == 0) + { + win->tileDataOffset = 2 * sLineLength + 2; + win->cursorX = 0; + win->cursorY += 16; + } + else + { + if (win->win_field_C & 2) + win->tileDataOffset = 2 * sLineLength + 2; + else + win->tileDataOffset = 2; + win->win_field_C = win->win_field_C ^ 2; + win->cursorX = 0; + DoScroll_TextMode0(win, sLineLength); + } +} + +static void DoScroll_TextMode0(struct Window *win, u16 lineLength) +{ + u16 *buffer = win->tilemap; + u32 val1 = 32 * (win->top >> 3); + u32 val2 = (win->left >> 3); + u16 fill; + buffer += val1 + val2; + fill = (win->paletteNum << 12) | GetBlankTileNum(win); + CpuCopy16(buffer + 64, buffer, lineLength * 2); + CpuCopy16(buffer + 96, buffer + 32, lineLength * 2); + CpuFill16(fill, buffer + 64, lineLength * 2); + CpuFill16(fill, buffer + 96, lineLength * 2); +} + +static void ScrollWindowTextLines_TextMode1(struct Window *win) +{ + if (win->cursorY == 0) + { + win->cursorX = 0; + win->cursorY += 16; + } + else + { + win->win_field_C ^= 2; + win->cursorX = 0; + DoScroll_TextMode1(win, sLineLength); + } +} + +static void DoScroll_TextMode1(struct Window *win, u16 lineLength) +{ + u16 *buffer = GetCursorTilemapPointer(win); + u16 *dest = buffer - 32; + u16 fill = (win->paletteNum << 12) | GetBlankTileNum(win); + CpuCopy16(buffer + 32, dest, lineLength * 2); + CpuCopy16(buffer + 64, buffer, lineLength * 2); + CpuFill16(fill, buffer + 32, lineLength * 2); + CpuFill16(fill, buffer + 64, lineLength * 2); +} + +static void ScrollWindowTextLines_TextMode2(struct Window *win) +{ + if (win->cursorY == 0) + { + win->cursorX = 0; + win->cursorY += 16; + } + else + { + win->win_field_C ^= 2; + win->cursorX = 0; + DoScroll_TextMode2(win, sLineLength); + } +} + +static void DoScroll_TextMode2(struct Window *win, u8 lineLength) +{ + u8 i; + u8 *buf1 = win->tileData + 32 * GetCursorTileNum(win, 0, -2); + u8 *buf2 = win->tileData + 32 * GetCursorTileNum(win, 0, 0); + u8 *buf4; + u16 *buf3; + u16 a[4]; + + CpuFastCopy(buf2, buf1, 32 * lineLength); + CpuFastFill(sGlyphBuffer.background, buf2, 32 * lineLength); + buf4 = buf2 + 32 * win->width; + CpuFastCopy(buf4, buf1 + 32 * win->width, 32 * lineLength); + CpuFastFill(sGlyphBuffer.background, buf4, 32 * lineLength); + + buf3 = GetCursorTilemapPointer(win) - 64; + + a[0] = (win->tileDataStartOffset + win->tileDataOffset + + ((win->top >> 3) * win->width) + + (win->left >> 3)) + | (win->paletteNum << 12); + a[1] = a[0] + win->width; + a[2] = a[1] + win->width; + a[3] = a[2] + win->width; + + for (i = 0; i < lineLength; i++) + { + buf3[0] = a[0]++; + buf3[32] = a[1]++; + buf3[64] = a[2]++; + buf3[96] = a[3]++; + buf3++; + } +} + +void ClearWindowTextLines(struct Window *win) +{ + switch (win->textMode) + { + case 0: + ClearWindowTextLines_TextMode0_TextMode1(win, sLineLength); + win->tileDataOffset = 2; + break; + case 1: + ClearWindowTextLines_TextMode0_TextMode1(win, sLineLength); + break; + case 2: + ClearWindowTextLines_TextMode2(win, sLineLength); + break; + } +} + +static void ClearWindowTextLines_TextMode0_TextMode1(struct Window *win, u8 lineLength) +{ + u8 i; + u16 *buffer; + u16 fill; + + win->cursorX = 0; + win->cursorY = 0; + win->win_field_C = 0; + + buffer = GetCursorTilemapPointer(win); + fill = GetBlankTileNum(win) | (win->paletteNum << 12); + + for (i = 0; i < 4; i++) + { + u8 j; + for (j = 0; j < lineLength; j++) + buffer[j] = fill; + buffer += 32; + } +} + +static void ClearWindowTextLines_TextMode2(struct Window *win, u8 lineLength) +{ + u8 *buffer; + + win->cursorX = 0; + win->cursorY = 0; + win->win_field_C = 0; + + buffer = win->tileData + 32 * GetCursorTileNum(win, 0, 0); + CpuFastFill(sGlyphBuffer.background, buffer, 32 * lineLength); + buffer += 32 * win->width; + CpuFastFill(sGlyphBuffer.background, buffer, 32 * lineLength); + buffer += 32 * win->width; + CpuFastFill(sGlyphBuffer.background, buffer, 32 * lineLength); + buffer += 32 * win->width; + CpuFastFill(sGlyphBuffer.background, buffer, 32 * lineLength); +} + +static void DrawDownArrow(struct Window *win) +{ + if (PlayerCanInterruptWait(win)) + { + const u32 *downArrowTiles = &sDownArrowTiles[((win->downArrowCounter & 0x0F00) >> 8) * 16]; + + switch (win->textMode) + { + case 1: + { + u8 *buffer; + u16 tileNum = win->tileDataStartOffset + 254; + if (win->fontNum == 0 || win->fontNum == 3) + tileNum *= 2; + buffer = win->tileData + 32 * tileNum; + ApplyColors_ShadowedFont(downArrowTiles, buffer, win->foregroundColor, win->shadowColor, win->backgroundColor); + ApplyColors_ShadowedFont(downArrowTiles + 8, buffer + 32, win->foregroundColor, win->shadowColor, win->backgroundColor); + WriteGlyphTilemap(win, tileNum, tileNum + 1); + break; + } + case 0: + case 2: + { + struct GlyphTileInfo glyphTileInfo; + glyphTileInfo.textMode = win->textMode; + glyphTileInfo.startPixel = (win->left + win->cursorX) & 7; + if (glyphTileInfo.startPixel != 0) + { + u8 *upperTile; + u8 *lowerTile; + GetGlyphTilePointers(win->fontNum, win->language, 0, &upperTile, &lowerTile); + glyphTileInfo.width = 8 - glyphTileInfo.startPixel; + glyphTileInfo.src = upperTile; + glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 1, 0)); + glyphTileInfo.colors = sGlyphBuffer.colors; + DrawGlyphTile_ShadowedFont(&glyphTileInfo); + glyphTileInfo.src = lowerTile; + glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 1, 1)); + DrawGlyphTile_ShadowedFont(&glyphTileInfo); + } + glyphTileInfo.width = 8; + glyphTileInfo.src = (u8 *)downArrowTiles; + glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 0)); + glyphTileInfo.colors = sGlyphBuffer.colors; + DrawGlyphTile_ShadowedFont(&glyphTileInfo); + glyphTileInfo.src += 32; + glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 1)); + DrawGlyphTile_ShadowedFont(&glyphTileInfo); + if (glyphTileInfo.startPixel != 0) + UpdateTilemap(win, 2); + else + UpdateTilemap(win, 1); + break; + } + } + } +} + +static u8 WaitWithDownArrow(struct Window *win) +{ + u8 retVal = 1; + + if (!PlayerCanInterruptWait(win)) + { + win->delayCounter--; + if (!win->delayCounter) + { + TryEraseDownArrow(win); + } + else + { + DrawMovingDownArrow(win); + retVal = 0; + } + } + else + { + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + PlaySE(SE_SELECT); + TryEraseDownArrow(win); + } + else + { + DrawMovingDownArrow(win); + retVal = 0; + } + } + + return retVal; +} + +static void DrawInitialDownArrow(struct Window *win) +{ + win->downArrowCounter = 0; + DrawDownArrow(win); +} + +static void DrawMovingDownArrow(struct Window *win) +{ + u16 downArrowPos = (win->downArrowCounter & 0x0F00) >> 8; + u16 wait = win->downArrowCounter & 0x000F; + u16 newVal; + + wait++; + + if (wait == 6) + { + wait = 0; + downArrowPos++; + if (downArrowPos > 3) + downArrowPos = 0; + win->downArrowCounter = downArrowPos << 8; + DrawDownArrow(win); + } + + newVal = downArrowPos << 8; + newVal |= wait; + + win->downArrowCounter = newVal; +} + +static void TryEraseDownArrow(struct Window *win) +{ + win->downArrowCounter = 0; + if (PlayerCanInterruptWait(win) == TRUE) + EraseAtCursor(win); +} + +u16 GetWindowTilemapEntry(struct Window *win, u8 x, u8 y) +{ + u16 *tilemap = win->tilemap; + return tilemap[32 * y + x]; +} + +void DrawWindowRect(struct Window *win, u16 tilemapEntry, u8 left, u8 top, u8 right, u8 bottom) +{ + u8 i; + u16 *buffer = &win->tilemap[top * 32]; + + for (i = left; i <= right; i++) + buffer[i] = tilemapEntry; + + for (i = top + 1; i < bottom - 1; i++) + { + buffer += 32; + buffer[left] = tilemapEntry; + buffer[right] = tilemapEntry; + } + + if (top != bottom) + { + buffer += 32; + for (i = left; i <= right; i++) + buffer[i] = tilemapEntry; + } +} + +void DrawWindowRect_DefaultPalette(struct Window *win, u16 tileNum, u8 left, u8 top, u8 right, u8 bottom) +{ + DrawWindowRect(win, (win->paletteNum << 12) | tileNum, left, top, right, bottom); +} + +void FillWindowRect(struct Window *win, u16 tilemapEntry, u8 left, u8 top, u8 right, u8 bottom) +{ + u16 *buffer = &win->tilemap[top * 32]; + while (top++ <= bottom) + { + u8 j; + for (j = left; j <= right; j++) + buffer[j] = tilemapEntry; + buffer += 32; + } +} + +void FillWindowRect_DefaultPalette(struct Window *win, u16 tileNum, u8 left, u8 top, u8 right, u8 bottom) +{ + FillWindowRect(win, (win->paletteNum << 12) | tileNum, left, top, right, bottom); +} + +void ZeroFillWindowRect(struct Window *win, u8 left, u8 top, u8 right, u8 bottom) +{ + FillWindowRect_DefaultPalette(win, 0, left, top, right, bottom); +} + +void FillWindowRectWithBlankTile(struct Window *win, u8 left, u8 top, u8 right, u8 bottom) +{ + u16 tileNum = GetBlankTileNum(win); + FillWindowRect_DefaultPalette(win, tileNum, left, top, right, bottom); +} + +static u16 GetBlankTileNum(struct Window *win) +{ + u16 retVal = win->tileDataStartOffset; + + switch (win->textMode) + { + case 0: + break; + case 2: + retVal++; + break; + case 1: + switch (win->fontNum) + { + case 1: + case 2: + case 4: + case 5: + retVal += 212; + case 0: + case 3: + case 6: + break; + default: + retVal = 0; + } + break; + } + + return retVal; +} + +static s32 sub_80048D8(struct Window *win, u8 x, u8 y) +{ + win->cursorX = x; + win->cursorY = y & 0xF8; +} + +static u8 GetGlyphWidth(struct Window *win, u32 glyph) +{ + u8 width = 8; + +#ifdef BUGFIX_GLYPHWIDTH + if (win->language != LANGUAGE_JAPANESE) +#else + if (win->language == LANGUAGE_ENGLISH) +#endif + { + width = win->spacing; + if (!win->spacing) + { + switch (win->fontNum) + { + case 3: + width = sFont3Widths[glyph]; + break; + case 4: + case 5: + width = sFont4Widths[sFontType1Map[2 * glyph + 1]]; + break; + case 0: + width = sFont0Widths[glyph]; + break; + case 1: + case 2: + width = sFont1Widths[sFontType1Map[2 * glyph + 1]]; + break; + case 6: + width = 8; + break; + default: + width = 8; + } + } + } + + return width; +} + +u8 GetExtCtrlCodeLength(u8 code) +{ + u8 length = 0; + if (code <= 0x16) + length = sExtCtrlCodeLengths[code]; + return length; +} + +u8 *AlignInt1(struct Window *win, u8 *dest, s32 value, u8 alignAmount, u8 alignType) +{ + u8 temp[16]; + u8 width; + switch (alignType) + { + case 0: + ConvertIntToDecimalString(temp, value); + dest = StringCopy(dest, temp); + dest[0] = 0xFC; + dest[1] = 19; + dest[2] = alignAmount; + dest += 3; + *dest = 0xFF; + break; + case 1: + ConvertIntToDecimalString(temp, value); + width = GetStringWidth(win, temp); + if (alignAmount > width) + { + dest[0] = 0xFC; + dest[1] = 19; + dest[2] = alignAmount - width; + dest += 3; + } + dest = StringCopy(dest, temp); + break; + case 2: + ConvertIntToDecimalString(temp, value); + width = GetStringWidth(win, temp); + if (alignAmount > width) + { + dest[0] = 0xFC; + dest[1] = 19; + dest[2] = (alignAmount - width) / 2; + dest += 3; + } + dest = StringCopy(dest, temp); + if (alignAmount > width) + { + dest[0] = 0xFC; + dest[1] = 19; + dest[2] = alignAmount; + dest += 3; + *dest = 0xFF; + } + break; + } + return dest; +} + +u8 *AlignInt2(struct Window *win, u8 *dest, s32 value, u8 alignAmount, u8 alignType) +{ + u8 temp[16]; + u8 width; + switch (alignType) + { + case 0: + ConvertIntToDecimalString(temp, value); + width = GetStringWidth(win, temp); + dest = StringCopy(dest, temp); + dest[0] = 0xFC; + dest[1] = 17; + dest[2] = alignAmount - width; + dest += 3; + *dest = 0xFF; + break; + case 1: + ConvertIntToDecimalString(temp, value); + width = GetStringWidth(win, temp); + if (alignAmount > width) + { + dest[0] = 0xFC; + dest[1] = 17; + dest[2] = alignAmount - width; + dest += 3; + } + dest = StringCopy(dest, temp); + break; + case 2: + ConvertIntToDecimalString(temp, value); + width = GetStringWidth(win, temp); + if (alignAmount > width) + { + dest[0] = 0xFC; + dest[1] = 17; + dest[2] = (alignAmount - width) / 2; + dest += 3; + } + dest = StringCopy(dest, temp); + if (alignAmount > width) + { + dest[0] = 0xFC; + dest[1] = 17; + dest[2] = (alignAmount - width) / 2; + dest += 3; + *dest = 0xFF; + } + break; + } + return dest; +} + +u8 *AlignString(struct Window *win, u8 *dest, const u8 *src, u8 alignAmount, u8 alignType) +{ + u8 width; + switch (alignType) + { + case 0: + dest = StringCopy(dest, src); + dest[0] = 0xFC; + dest[1] = 19; + dest[2] = alignAmount; + dest += 3; + *dest = 0xFF; + break; + case 1: + width = GetStringWidth(win, src); + if (alignAmount > width) + { + dest[0] = 0xFC; + dest[1] = 19; + dest[2] = alignAmount - width; + dest += 3; + } + dest = StringCopy(dest, src); + break; + case 2: + width = GetStringWidth(win, src); + if (alignAmount > width) + { + dest[0] = 0xFC; + dest[1] = 19; + dest[2] = (alignAmount - width) / 2; + dest += 3; + } + dest = StringCopy(dest, src); + if (alignAmount > width) + { + dest[0] = 0xFC; + dest[1] = 19; + dest[2] = alignAmount; + dest += 3; + *dest = 0xFF; + } + break; + } + return dest; +} + +u8 GetStringWidth(struct Window *win, const u8 *s) +{ + u8 width = 0; + u8 savedFontNum = win->fontNum; + u8 savedCharset = win->language; + u8 savedSpacing = win->spacing; + s32 i = 0; + + while (s[i] != 0xFF) + { + u8 c = s[i]; + switch (c) + { + case 0xFD: + { + u8 temp; + i++; + temp = win->language; + width += GetStringWidth(win, GetExpandedPlaceholder(s[i])); + win->language = temp; + i++; + break; + } + case 0xFC: + i++; + switch (s[i]) + { + case 6: + win->fontNum = s[i + 1]; + break; + case 7: + win->fontNum = win->config->fontNum; + break; + case 0x11: + width += s[i + 1]; + break; + case 0x12: + case 0x13: + if (width < s[i + 1]) + width = s[i + 1]; + break; + case 0x14: + win->spacing = s[i + 1]; + break; + case 0x15: + win->language = LANGUAGE_JAPANESE; + break; + case 0x16: + win->language = GAME_LANGUAGE; + break; + } + + i += GetExtCtrlCodeLength(s[i]); + break; + default: + i++; + width += GetGlyphWidth(win, c); + } + } + + win->spacing = savedSpacing; + win->language = savedCharset; + win->fontNum = savedFontNum; + + return width; +} + +u8 sub_8004D04(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u16 top, u32 a6) +{ + sub_8002E4C(win, text, tileDataStartOffset, left, top, a6); + return sub_8002F44(win); +} + +u8 sub_8004D38(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top) +{ + u8 width = GetStringWidth(win, text); + InitWindow(win, text, tileDataStartOffset, left - ((u32)(width + 7) >> 3), top); + EraseAtCursor(win); + width &= 7; + if (width) + width = 8 - width; + sub_80048D8(win, width, 0); + return sub_8002F44(win); +} + +u8 sub_8004DB0(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top, u16 a6) +{ + register u32 val asm("r5") = (u8)((a6 >> 1) - (GetStringWidth(win, text) >> 1)); + left += (val >> 3); + InitWindow(win, text, tileDataStartOffset, left, top); + EraseAtCursor(win); + sub_80048D8(win, val & 7, 0); + return sub_8002F44(win); +} + +u8 sub_8004E24(struct Window *win) +{ + return win->paletteNum; +} + +void sub_8004E28(struct Window *win, u8 *foreground, u8 *background, u8 *shadow) +{ + *foreground = win->foregroundColor; + *background = win->backgroundColor; + *shadow = win->shadowColor; +} + +void sub_8004E3C(struct WindowConfig *winConfig, u8 *tileData, const u8 *text) +{ + sTempWindow.config = winConfig; + InitWindow(&sTempWindow, text, 0, 0, 0); + sTempWindow.tileData = tileData; + sub_8002F44(&sTempWindow); +} + +u8 GetStringWidthGivenWindowConfig(struct WindowConfig *winConfig, const u8 *s) +{ + sTempWindow.config = winConfig; + InitWindow(&sTempWindow, s, 0, 0, 0); + return GetStringWidth(&sTempWindow, s); +} + +void ConvertInternationalString(u8 *s, u8 language) +{ + if (language == LANGUAGE_JAPANESE) + { + u8 i; + + StripExtCtrlCodes(s); + i = StringLength(s); + s[i++] = 0xFC; + s[i++] = 22; + s[i++] = 0xFF; + + i--; + + while (i != (u8)-1) + { + s[i + 2] = s[i]; + i--; + } + + s[0] = 0xFC; + s[1] = 21; + } +} + +void StripExtCtrlCodes(u8 *str) +{ + u16 srcIndex = 0; + u16 destIndex = 0; + while (str[srcIndex] != 0xFF) + { + if (str[srcIndex] == 0xFC) + { + srcIndex++; + srcIndex += GetExtCtrlCodeLength(str[srcIndex]); + } + else + { + str[destIndex++] = str[srcIndex++]; + } + } + str[destIndex] = 0xFF; +} + +static const u8 *SkipExtCtrlCode(const u8 *s) +{ + while (*s == 0xFC) + { + s++; + s += GetExtCtrlCodeLength(*s); + } + + return s; +} + +s32 StringCompareWithoutExtCtrlCodes(const u8 *str1, const u8 *str2) +{ + s32 retVal = 0; + + while (1) + { + str1 = SkipExtCtrlCode(str1); + str2 = SkipExtCtrlCode(str2); + + if (*str1 > *str2) + break; + + if (*str1 < *str2) + { + retVal = -1; + if (*str2 == 0xFF) + retVal = 1; + } + + if (*str1 == 0xFF) + return retVal; + + str1++; + str2++; + } + + retVal = 1; + + if (*str1 == 0xFF) + retVal = -1; + + return retVal; +} + +u8 sub_8004FD0(struct Window *win, u8 *dest, const u8 *src, u16 tileDataStartOffset, u8 left, u16 top, u8 width, u32 a8) +{ + u8 newlineCount = 0; + u8 extCtrlCodeLength; + u8 *start; + u32 endsWithoutNewline; + + if (dest == NULL) + dest = gStringVar4; + + start = dest; + endsWithoutNewline = FALSE; + + while (*src != 0xFF) + { + switch (*src) + { + default: + *dest = *src; + dest++; + src++; + endsWithoutNewline = TRUE; + break; + case 0xFC: + extCtrlCodeLength = GetExtCtrlCodeLength(src[1]) + 1; + memcpy(dest, src, extCtrlCodeLength); + dest += extCtrlCodeLength; + src += extCtrlCodeLength; + break; + case 0xFE: + dest[0] = 0xFC; + dest[1] = 19; + dest[2] = width; + dest[3] = 0xFE; + dest += 4; + src++; + newlineCount++; + endsWithoutNewline = FALSE; + break; + } + } + + dest[0] = 0xFC; + dest[1] = 19; + dest[2] = width; + dest[3] = 0xFF; + + if (endsWithoutNewline) + newlineCount++; + + sub_8002E4C(win, start, tileDataStartOffset, left, top, a8); + sub_8002F44(win); + + return newlineCount; +} + +static s32 DrawGlyphTile_UnshadowedFont(struct GlyphTileInfo *glyphTileInfo) +{ + struct GlyphBuffer *glyphBuffer = &sGlyphBuffer; + u32 colors[2]; + u32 *buffer = glyphTileInfo->dest; + const u32 *masks = sGlyphMasks[glyphTileInfo->width][glyphTileInfo->startPixel]; + u32 mask1 = masks[0] | masks[2]; + + glyphBuffer->pixelRows[0] = buffer[0] & mask1; + glyphBuffer->pixelRows[1] = buffer[1] & mask1; + glyphBuffer->pixelRows[2] = buffer[2] & mask1; + glyphBuffer->pixelRows[3] = buffer[3] & mask1; + glyphBuffer->pixelRows[4] = buffer[4] & mask1; + glyphBuffer->pixelRows[5] = buffer[5] & mask1; + glyphBuffer->pixelRows[6] = buffer[6] & mask1; + glyphBuffer->pixelRows[7] = buffer[7] & mask1; + + if (glyphTileInfo->startPixel + glyphTileInfo->width > 8) + { + u32 mask2 = masks[1]; + if (glyphTileInfo->textMode == 2) + { + glyphBuffer->pixelRows[8] = buffer[8] & mask2; + glyphBuffer->pixelRows[9] = buffer[9] & mask2; + glyphBuffer->pixelRows[10] = buffer[10] & mask2; + glyphBuffer->pixelRows[11] = buffer[11] & mask2; + glyphBuffer->pixelRows[12] = buffer[12] & mask2; + glyphBuffer->pixelRows[13] = buffer[13] & mask2; + glyphBuffer->pixelRows[14] = buffer[14] & mask2; + glyphBuffer->pixelRows[15] = buffer[15] & mask2; + } + else + { + glyphBuffer->pixelRows[8] = buffer[16] & mask2; + glyphBuffer->pixelRows[9] = buffer[17] & mask2; + glyphBuffer->pixelRows[10] = buffer[18] & mask2; + glyphBuffer->pixelRows[11] = buffer[19] & mask2; + glyphBuffer->pixelRows[12] = buffer[20] & mask2; + glyphBuffer->pixelRows[13] = buffer[21] & mask2; + glyphBuffer->pixelRows[14] = buffer[22] & mask2; + glyphBuffer->pixelRows[15] = buffer[23] & mask2; + } + } + + colors[0] = glyphTileInfo->colors[0]; + colors[1] = glyphTileInfo->colors[15]; + + sShiftGlyphTileUnshadowedFuncs[glyphTileInfo->width](glyphBuffer, glyphTileInfo->src, colors, glyphTileInfo->startPixel); + + buffer[0] = glyphBuffer->pixelRows[0]; + buffer[1] = glyphBuffer->pixelRows[1]; + buffer[2] = glyphBuffer->pixelRows[2]; + buffer[3] = glyphBuffer->pixelRows[3]; + buffer[4] = glyphBuffer->pixelRows[4]; + buffer[5] = glyphBuffer->pixelRows[5]; + buffer[6] = glyphBuffer->pixelRows[6]; + buffer[7] = glyphBuffer->pixelRows[7]; + + if (glyphTileInfo->startPixel + glyphTileInfo->width > 8) + { + if (glyphTileInfo->textMode != 2) + buffer += 8; + buffer[8] = glyphBuffer->pixelRows[8]; + buffer[9] = glyphBuffer->pixelRows[9]; + buffer[10] = glyphBuffer->pixelRows[10]; + buffer[11] = glyphBuffer->pixelRows[11]; + buffer[12] = glyphBuffer->pixelRows[12]; + buffer[13] = glyphBuffer->pixelRows[13]; + buffer[14] = glyphBuffer->pixelRows[14]; + buffer[15] = glyphBuffer->pixelRows[15]; + } + + return (glyphTileInfo->startPixel + glyphTileInfo->width) / 8; +} + +static void ShiftGlyphTile_UnshadowedFont_Width0(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *a3, u8 startPixel) +{ +} + +static void ShiftGlyphTile_UnshadowedFont_Width1(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u8 i; + for (i = 0; i < 8; i++) + { + u32 val = colors[src[i] >> 7]; + u32 *dest = &glyphBuffer->pixelRows[i]; + dest[0] |= val << shiftAmount->left; + dest[8] |= val >> shiftAmount->right; + } +} + +static void ShiftGlyphTile_UnshadowedFont_Width2(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u8 i; + for (i = 0; i < 8; i++) + { + u32 val = (colors[(src[i] >> 7) & 1] << 0) + | (colors[(src[i] >> 6) & 1] << 4); + u32 *dest = &glyphBuffer->pixelRows[i]; + dest[0] |= val << shiftAmount->left; + dest[8] |= val >> shiftAmount->right; + } +} + +static void ShiftGlyphTile_UnshadowedFont_Width3(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u8 i; + for (i = 0; i < 8; i++) + { + // XXX: why 4? + u32 val = (colors[(src[i] >> 7) & 1] << 0) + | (colors[(src[i] >> 6) & 1] << 4) + | (colors[(src[i] >> 5) & 1] << 8) + | (colors[(src[i] >> 4) & 1] << 12); + u32 *dest = &glyphBuffer->pixelRows[i]; + dest[0] |= val << shiftAmount->left; + dest[8] |= val >> shiftAmount->right; + } +} + +static void ShiftGlyphTile_UnshadowedFont_Width4(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u8 i; + for (i = 0; i < 8; i++) + { + u32 val = (colors[(src[i] >> 7) & 1] << 0) + | (colors[(src[i] >> 6) & 1] << 4) + | (colors[(src[i] >> 5) & 1] << 8) + | (colors[(src[i] >> 4) & 1] << 12); + u32 *dest = &glyphBuffer->pixelRows[i]; + dest[0] |= val << shiftAmount->left; + dest[8] |= val >> shiftAmount->right; + } +} + +static void ShiftGlyphTile_UnshadowedFont_Width5(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u8 i; + for (i = 0; i < 8; i++) + { + u32 val = (colors[(src[i] >> 7) & 1] << 0) + | (colors[(src[i] >> 6) & 1] << 4) + | (colors[(src[i] >> 5) & 1] << 8) + | (colors[(src[i] >> 4) & 1] << 12) + | (colors[(src[i] >> 3) & 1] << 16); + u32 *dest = &glyphBuffer->pixelRows[i]; + dest[0] |= val << shiftAmount->left; + dest[8] |= val >> shiftAmount->right; + } +} + +static void ShiftGlyphTile_UnshadowedFont_Width6(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u8 i; + for (i = 0; i < 8; i++) + { + u32 val = (colors[(src[i] >> 7) & 1] << 0) + | (colors[(src[i] >> 6) & 1] << 4) + | (colors[(src[i] >> 5) & 1] << 8) + | (colors[(src[i] >> 4) & 1] << 12) + | (colors[(src[i] >> 3) & 1] << 16) + | (colors[(src[i] >> 2) & 1] << 20); + u32 *dest = &glyphBuffer->pixelRows[i]; + dest[0] |= val << shiftAmount->left; + dest[8] |= val >> shiftAmount->right; + } +} + +static void ShiftGlyphTile_UnshadowedFont_Width7(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u8 i; + for (i = 0; i < 8; i++) + { + u32 val = (colors[(src[i] >> 7) & 1] << 0) + | (colors[(src[i] >> 6) & 1] << 4) + | (colors[(src[i] >> 5) & 1] << 8) + | (colors[(src[i] >> 4) & 1] << 12) + | (colors[(src[i] >> 3) & 1] << 16) + | (colors[(src[i] >> 2) & 1] << 20) + | (colors[(src[i] >> 1) & 1] << 24); + u32 *dest = &glyphBuffer->pixelRows[i]; + dest[0] |= val << shiftAmount->left; + dest[8] |= val >> shiftAmount->right; + } +} + +static void ShiftGlyphTile_UnshadowedFont_Width8(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u8 i; + for (i = 0; i < 8; i++) + { + u32 val = (colors[(src[i] >> 7) & 1] << 0) + | (colors[(src[i] >> 6) & 1] << 4) + | (colors[(src[i] >> 5) & 1] << 8) + | (colors[(src[i] >> 4) & 1] << 12) + | (colors[(src[i] >> 3) & 1] << 16) + | (colors[(src[i] >> 2) & 1] << 20) + | (colors[(src[i] >> 1) & 1] << 24) + | (colors[(src[i] >> 0) & 1] << 28); + u32 *dest = &glyphBuffer->pixelRows[i]; + dest[0] |= val << shiftAmount->left; + dest[8] |= val >> shiftAmount->right; + } +} + +static s32 DrawGlyphTile_ShadowedFont(struct GlyphTileInfo *glyphTileInfo) +{ + struct GlyphBuffer *glyphBuffer = &sGlyphBuffer; + u32 *buffer = glyphTileInfo->dest; + const u32 *masks = sGlyphMasks[glyphTileInfo->width][glyphTileInfo->startPixel]; + u32 mask1 = masks[0] | masks[2]; + + glyphBuffer->pixelRows[0] = buffer[0] & mask1; + glyphBuffer->pixelRows[1] = buffer[1] & mask1; + glyphBuffer->pixelRows[2] = buffer[2] & mask1; + glyphBuffer->pixelRows[3] = buffer[3] & mask1; + glyphBuffer->pixelRows[4] = buffer[4] & mask1; + glyphBuffer->pixelRows[5] = buffer[5] & mask1; + glyphBuffer->pixelRows[6] = buffer[6] & mask1; + glyphBuffer->pixelRows[7] = buffer[7] & mask1; + + if (glyphTileInfo->startPixel + glyphTileInfo->width > 8) + { + u32 mask2 = masks[1]; + if (glyphTileInfo->textMode == 2) + { + glyphBuffer->pixelRows[8] = buffer[8] & mask2; + glyphBuffer->pixelRows[9] = buffer[9] & mask2; + glyphBuffer->pixelRows[10] = buffer[10] & mask2; + glyphBuffer->pixelRows[11] = buffer[11] & mask2; + glyphBuffer->pixelRows[12] = buffer[12] & mask2; + glyphBuffer->pixelRows[13] = buffer[13] & mask2; + glyphBuffer->pixelRows[14] = buffer[14] & mask2; + glyphBuffer->pixelRows[15] = buffer[15] & mask2; + } + else + { + glyphBuffer->pixelRows[8] = buffer[16] & mask2; + glyphBuffer->pixelRows[9] = buffer[17] & mask2; + glyphBuffer->pixelRows[10] = buffer[18] & mask2; + glyphBuffer->pixelRows[11] = buffer[19] & mask2; + glyphBuffer->pixelRows[12] = buffer[20] & mask2; + glyphBuffer->pixelRows[13] = buffer[21] & mask2; + glyphBuffer->pixelRows[14] = buffer[22] & mask2; + glyphBuffer->pixelRows[15] = buffer[23] & mask2; + } + } + + sShiftGlyphTileShadowedFuncs[glyphTileInfo->width](glyphBuffer, (u32 *)glyphTileInfo->src, glyphTileInfo->colors, glyphTileInfo->startPixel); + + buffer[0] = glyphBuffer->pixelRows[0]; + buffer[1] = glyphBuffer->pixelRows[1]; + buffer[2] = glyphBuffer->pixelRows[2]; + buffer[3] = glyphBuffer->pixelRows[3]; + buffer[4] = glyphBuffer->pixelRows[4]; + buffer[5] = glyphBuffer->pixelRows[5]; + buffer[6] = glyphBuffer->pixelRows[6]; + buffer[7] = glyphBuffer->pixelRows[7]; + + if (glyphTileInfo->startPixel + glyphTileInfo->width > 8) + { + if (glyphTileInfo->textMode != 2) + buffer += 8; + buffer[8] = glyphBuffer->pixelRows[8]; + buffer[9] = glyphBuffer->pixelRows[9]; + buffer[10] = glyphBuffer->pixelRows[10]; + buffer[11] = glyphBuffer->pixelRows[11]; + buffer[12] = glyphBuffer->pixelRows[12]; + buffer[13] = glyphBuffer->pixelRows[13]; + buffer[14] = glyphBuffer->pixelRows[14]; + buffer[15] = glyphBuffer->pixelRows[15]; + } + + return (glyphTileInfo->startPixel + glyphTileInfo->width) / 8; +} + +static void ShiftGlyphTile_ShadowedFont_Width0(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) +{ +} + +static void ShiftGlyphTile_ShadowedFont_Width1(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u8 i; + for (i = 0; i < 8; i++) + { + u32 val = colors[src[i] & 0xF]; + u32 *dest = &glyphBuffer->pixelRows[i]; + dest[0] |= val << shiftAmount->left; + dest[8] |= val >> shiftAmount->right; + } +} + +static void ShiftGlyphTile_ShadowedFont_Width2(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u8 i; + for (i = 0; i < 8; i++) + { + u32 val = (colors[(src[i] >> 0) & 0xF] << 0) + | (colors[(src[i] >> 4) & 0xF] << 4); + u32 *dest = &glyphBuffer->pixelRows[i]; + dest[0] |= val << shiftAmount->left; + dest[8] |= val >> shiftAmount->right; + } +} + +static void ShiftGlyphTile_ShadowedFont_Width3(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u8 i; + for (i = 0; i < 8; i++) + { + u32 val = (colors[(src[i] >> 0) & 0xF] << 0) + | (colors[(src[i] >> 4) & 0xF] << 4) + | (colors[(src[i] >> 8) & 0xF] << 8); + u32 *dest = &glyphBuffer->pixelRows[i]; + dest[0] |= val << shiftAmount->left; + dest[8] |= val >> shiftAmount->right; + } +} + +static void ShiftGlyphTile_ShadowedFont_Width4(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u8 i; + for (i = 0; i < 8; i++) + { + u32 val = (colors[(src[i] >> 0) & 0xF] << 0) + | (colors[(src[i] >> 4) & 0xF] << 4) + | (colors[(src[i] >> 8) & 0xF] << 8) + | (colors[(src[i] >> 12) & 0xF] << 12); + u32 *dest = &glyphBuffer->pixelRows[i]; + dest[0] |= val << shiftAmount->left; + dest[8] |= val >> shiftAmount->right; + } +} + +#define SHIFT_GLYPH_WIDTH5_STEP(i) \ +val = (colors[(src[i] >> 0) & 0xF] << 0) \ + | (colors[(src[i] >> 4) & 0xF] << 4) \ + | (colors[(src[i] >> 8) & 0xF] << 8) \ + | (colors[(src[i] >> 12) & 0xF] << 12) \ + | (colors[(src[i] >> 16) & 0xF] << 16); \ +glyphBuffer->pixelRows[i] |= val << shiftAmount->left; \ +glyphBuffer->pixelRows[i + 8] |= val >> shiftAmount->right; \ + +static void ShiftGlyphTile_ShadowedFont_Width5(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u32 val; + SHIFT_GLYPH_WIDTH5_STEP(0) + SHIFT_GLYPH_WIDTH5_STEP(1) + SHIFT_GLYPH_WIDTH5_STEP(2) + SHIFT_GLYPH_WIDTH5_STEP(3) + SHIFT_GLYPH_WIDTH5_STEP(4) + SHIFT_GLYPH_WIDTH5_STEP(5) + SHIFT_GLYPH_WIDTH5_STEP(6) + SHIFT_GLYPH_WIDTH5_STEP(7) +} + +#define SHIFT_GLYPH_WIDTH6_STEP(i) \ +val = (colors[(src[i] >> 0) & 0xF] << 0) \ + | (colors[(src[i] >> 4) & 0xF] << 4) \ + | (colors[(src[i] >> 8) & 0xF] << 8) \ + | (colors[(src[i] >> 12) & 0xF] << 12) \ + | (colors[(src[i] >> 16) & 0xF] << 16) \ + | (colors[(src[i] >> 20) & 0xF] << 20); \ +glyphBuffer->pixelRows[i] |= val << shiftAmount->left; \ +glyphBuffer->pixelRows[i + 8] |= val >> shiftAmount->right; \ + +static void ShiftGlyphTile_ShadowedFont_Width6(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u32 val; + SHIFT_GLYPH_WIDTH6_STEP(0) + SHIFT_GLYPH_WIDTH6_STEP(1) + SHIFT_GLYPH_WIDTH6_STEP(2) + SHIFT_GLYPH_WIDTH6_STEP(3) + SHIFT_GLYPH_WIDTH6_STEP(4) + SHIFT_GLYPH_WIDTH6_STEP(5) + SHIFT_GLYPH_WIDTH6_STEP(6) + SHIFT_GLYPH_WIDTH6_STEP(7) +} + +#define SHIFT_GLYPH_WIDTH7_STEP(i) \ +val = (colors[(src[i] >> 0) & 0xF] << 0) \ + | (colors[(src[i] >> 4) & 0xF] << 4) \ + | (colors[(src[i] >> 8) & 0xF] << 8) \ + | (colors[(src[i] >> 12) & 0xF] << 12) \ + | (colors[(src[i] >> 16) & 0xF] << 16) \ + | (colors[(src[i] >> 20) & 0xF] << 20) \ + | (colors[(src[i] >> 24) & 0xF] << 24); \ +glyphBuffer->pixelRows[i] |= val << shiftAmount->left; \ +glyphBuffer->pixelRows[i + 8] |= val >> shiftAmount->right; \ + +static void ShiftGlyphTile_ShadowedFont_Width7(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u32 val; + SHIFT_GLYPH_WIDTH7_STEP(0) + SHIFT_GLYPH_WIDTH7_STEP(1) + SHIFT_GLYPH_WIDTH7_STEP(2) + SHIFT_GLYPH_WIDTH7_STEP(3) + SHIFT_GLYPH_WIDTH7_STEP(4) + SHIFT_GLYPH_WIDTH7_STEP(5) + SHIFT_GLYPH_WIDTH7_STEP(6) + SHIFT_GLYPH_WIDTH7_STEP(7) +} + +#define SHIFT_GLYPH_WIDTH8_STEP(i) \ +val = (colors[(src[i] >> 0) & 0xF] << 0) \ + | (colors[(src[i] >> 4) & 0xF] << 4) \ + | (colors[(src[i] >> 8) & 0xF] << 8) \ + | (colors[(src[i] >> 12) & 0xF] << 12) \ + | (colors[(src[i] >> 16) & 0xF] << 16) \ + | (colors[(src[i] >> 20) & 0xF] << 20) \ + | (colors[(src[i] >> 24) & 0xF] << 24) \ + | (colors[(src[i] >> 28) ] << 28); \ +glyphBuffer->pixelRows[i] |= val << shiftAmount->left; \ +glyphBuffer->pixelRows[i + 8] |= val >> shiftAmount->right; \ + +static void ShiftGlyphTile_ShadowedFont_Width8(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) +{ + const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; + u32 val; + SHIFT_GLYPH_WIDTH8_STEP(0) + SHIFT_GLYPH_WIDTH8_STEP(1) + SHIFT_GLYPH_WIDTH8_STEP(2) + SHIFT_GLYPH_WIDTH8_STEP(3) + SHIFT_GLYPH_WIDTH8_STEP(4) + SHIFT_GLYPH_WIDTH8_STEP(5) + SHIFT_GLYPH_WIDTH8_STEP(6) + SHIFT_GLYPH_WIDTH8_STEP(7) +} + +static s32 DrawGlyphTiles(struct Window *win, u32 glyph, u32 glyphWidth) +{ + struct GlyphTileInfo glyphTileInfo; + u8 *upperTile; + u8 *lowerTile; + s32 retVal = 0; + + GetGlyphTilePointers(win->fontNum, win->language, glyph, &upperTile, &lowerTile); + glyphTileInfo.textMode = win->textMode; + glyphTileInfo.startPixel = (win->left + win->cursorX) & 7; + glyphTileInfo.width = glyphWidth; + glyphTileInfo.src = upperTile; + glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 0)); + glyphTileInfo.colors = sGlyphBuffer.colors; + + switch (win->fontNum) + { + case 0: + case 1: + case 2: + case 6: + DrawGlyphTile_UnshadowedFont(&glyphTileInfo); + glyphTileInfo.src = lowerTile; + glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 1)); + retVal = DrawGlyphTile_UnshadowedFont(&glyphTileInfo); + break; + case 3: + case 4: + case 5: + DrawGlyphTile_ShadowedFont(&glyphTileInfo); + glyphTileInfo.src = lowerTile; + glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 1)); + retVal = DrawGlyphTile_ShadowedFont(&glyphTileInfo); + break; + } + + return retVal; +} + +static void UpdateTilemap(struct Window *win, u32 tilesWidth) +{ + u16 *tilemap = GetCursorTilemapPointer(win); + if (tilesWidth && tilemap) + { + u16 paletteNum = (win->paletteNum << 12); + u16 upperLeftTileNum = GetCursorTileNum(win, 0, 0); + u16 lowerLeftTileNum = GetCursorTileNum(win, 0, 1); + tilemap[0] = upperLeftTileNum | paletteNum; + tilemap[32] = lowerLeftTileNum | paletteNum; + if (tilesWidth == 2) + { + u16 upperRightTileNum = GetCursorTileNum(win, 1, 0); + u16 lowerRightTileNum = GetCursorTileNum(win, 1, 1); + tilemap[1] = upperRightTileNum | paletteNum; + tilemap[33] = lowerRightTileNum | paletteNum; + } + } +} + +static u16 GetCursorTileNum(struct Window *win, u32 xOffset, u32 yOffset) +{ + u16 index; + + if (win->textMode == 2) + index = win->tileDataStartOffset + + win->tileDataOffset + + (((win->top + win->cursorY) >> 3) + yOffset) * win->width + + (((win->left + win->cursorX) >> 3) + xOffset); + else + index = win->tileDataStartOffset + win->tileDataOffset + 2 * xOffset + yOffset; + + return index; +} diff --git a/src/engine/text_window.c b/src/engine/text_window.c new file mode 100644 index 000000000..9a88789d1 --- /dev/null +++ b/src/engine/text_window.c @@ -0,0 +1,184 @@ +#include "global.h" +#include "text_window.h" +#include "main.h" +#include "palette.h" +#include "text.h" + +#define STD_MSG_BOX_LEFT 0 +#define STD_MSG_BOX_TOP 14 +#define STD_MSG_BOX_WIDTH 26 +#define STD_MSG_BOX_HEIGHT 4 + +static void LoadTextWindowTiles(u8, void *); +static void LoadTextWindowPalette(u8, u8); +static void DrawTextWindowInternal(u16 *dest, u16 baseTileNum, u8 left, u8 top, u8 right, u8 bottom); +static u16 GetMessageBoxTilemapEntry(u16 tilemapEntry, u8 x, u8 y, u8 width, u8 height); +static void DrawMessageBox(struct Window *win, u8 left, u8 top, u8 width, u8 height); + +static u16 sTextWindowBaseTileNum; +static u16 sMessageBoxBaseTileNum; + +extern const struct FrameGraphics gUnknown_083761F0[20]; + +extern const u16 gMessageBoxTilemap[5][7]; +extern const u8 gMessageBox_Gfx[]; + +u16 SetTextWindowBaseTileNum(u16 baseTileNum) +{ + sTextWindowBaseTileNum = baseTileNum; + return baseTileNum + 9; +} + +void LoadTextWindowGraphics(struct Window *win) +{ + u8 *tileData = win->config->tileData + TILE_SIZE_4BPP * sTextWindowBaseTileNum; + LoadTextWindowTiles(gSaveBlock2.optionsWindowFrameType, tileData); + LoadTextWindowPalette(gSaveBlock2.optionsWindowFrameType, 0xE); +} + +void LoadTextWindowGraphics_OverridePalSlot(struct Window *win, u8 palSlot) +{ + u8 *tileData = win->config->tileData + TILE_SIZE_4BPP * sTextWindowBaseTileNum; + LoadTextWindowTiles(gSaveBlock2.optionsWindowFrameType, tileData); + LoadTextWindowPalette(gSaveBlock2.optionsWindowFrameType, palSlot); +} + +void LoadTextWindowGraphics_OverrideFrameType(struct Window *win, u8 frameType) +{ + u8 *tileData = win->config->tileData + TILE_SIZE_4BPP * sTextWindowBaseTileNum; + LoadTextWindowTiles(frameType, tileData); + LoadTextWindowPalette(frameType, 0xE); +} + +void DrawTextWindow(struct Window *win, u8 left, u8 top, u8 right, u8 bottom) +{ + DrawTextWindowInternal(win->config->tilemap, sTextWindowBaseTileNum, left, top, right, bottom); +} + +const struct FrameGraphics *GetTextWindowFrameGraphics(u8 frameType) +{ + if (frameType > 19) + return &gUnknown_083761F0[0]; + else + return &gUnknown_083761F0[frameType]; +} + +static void LoadTextWindowTiles(u8 frameType, void *dest) +{ + const struct FrameGraphics *frameGraphics = GetTextWindowFrameGraphics(frameType); + CpuFastCopy(frameGraphics->tiles, dest, 9 * TILE_SIZE_4BPP); +} + +static void LoadTextWindowPalette(u8 frameType, u8 palSlot) +{ + const struct FrameGraphics *frameGraphics = GetTextWindowFrameGraphics(frameType); + LoadPalette(frameGraphics->palette, 16 * palSlot, 0x20); +} + +static void DrawTextWindowInternal(u16 *dest, u16 baseTileNum, u8 left, u8 top, u8 right, u8 bottom) +{ + u8 x, y; + u8 startX, endX; + u8 startY, endY; + + startX = (left < right) ? left : right; + endX = (right > left) ? right : left; + + startY = (top < bottom) ? top : bottom; + endY = (bottom > top) ? bottom : top; + + dest[32 * startY + startX] = baseTileNum | 0xE000; + + for (x = startX + 1; x < endX; x++) + dest[32 * startY + x] = (baseTileNum + 1) | 0xE000; + + dest[32 * startY + endX] = (baseTileNum + 2) | 0xE000; + + for (y = startY + 1; y < endY; y++) + { + dest[32 * y + startX] = (baseTileNum + 3) | 0xE000; + + for (x = startX + 1; x < endX; x++) + dest[32 * y + x] = (baseTileNum + 4) | 0xE000; + + dest[32 * y + endX] = (baseTileNum + 5) | 0xE000; + } + + dest[32 * endY + startX] = (baseTileNum + 6) | 0xE000; + + for (x = startX + 1; x < endX; x++) + dest[32 * endY + x] = (baseTileNum + 7) | 0xE000; + + dest[32 * endY + endX] = (baseTileNum + 8) | 0xE000; +} + +u16 SetMessageBoxBaseTileNum(u16 baseTileNum) +{ + sMessageBoxBaseTileNum = baseTileNum; + return baseTileNum + 14; +} + +void unref_sub_80651DC(struct Window *win, u8 *text) +{ + sub_8002EB0(win, text, sMessageBoxBaseTileNum + 14, 2, 15); +} + +void DisplayMessageBox(struct Window *win) +{ + LoadMessageBoxTiles(win); + DrawStandardMessageBox(win); +} + +static u16 GetMessageBoxTilemapEntry(u16 baseTilemapEntry, u8 x, u8 y, u8 width, u8 height) +{ + u16 tilemapEntry = 9; + + if (y >= height) + y = y - height + 3; + else if (y > 1) + y = 2; + + if (x >= width + 2) + x = x - (width + 2) + 4; + else if (x > 2) + x = 3; + + if (x <= 6 && y <= 4) + tilemapEntry = gMessageBoxTilemap[y][x]; + + tilemapEntry += baseTilemapEntry; + + return tilemapEntry; +} + +static void DrawMessageBox(struct Window *win, u8 left, u8 top, u8 width, u8 height) +{ + u8 i, j; + u16 tilemapEntry = (win->paletteNum << 12) | sMessageBoxBaseTileNum; + u16 *tilemap = win->config->tilemap; + + for (i = 0; i < height + 2; i++) + for (j = 0; j < width + 6; j++) + tilemap[(left + j) + 32 * (top + i)] = (win->paletteNum << 12) | GetMessageBoxTilemapEntry(tilemapEntry, j, i, width, height); +} + +void DrawStandardMessageBox(struct Window *win) +{ + DrawMessageBox(win, STD_MSG_BOX_LEFT, STD_MSG_BOX_TOP, STD_MSG_BOX_WIDTH, STD_MSG_BOX_HEIGHT); +} + +void LoadMessageBoxTiles(struct Window *win) +{ + u8 *tileData = win->config->tileData; + CpuFastCopy(gMessageBox_Gfx, tileData + 32 * sMessageBoxBaseTileNum, 14 * TILE_SIZE_4BPP); +} + +void ClearStandardMessageBox(struct Window *win) +{ + u8 i; + u16 *tilemap = win->config->tilemap + (STD_MSG_BOX_TOP * 32); + u16 tilemapEntry = win->paletteNum << 12; + + for (i = 0; i < ((STD_MSG_BOX_HEIGHT + 2) * 32); i++) + tilemap[i] = tilemapEntry; +} diff --git a/src/engine/tileset_anim.c b/src/engine/tileset_anim.c new file mode 100644 index 000000000..34685381d --- /dev/null +++ b/src/engine/tileset_anim.c @@ -0,0 +1,630 @@ +#include "global.h" +#include "tileset_anim.h" + +extern u8 *gTilesetAnimTable_General_0[]; +extern u8 *gTilesetAnimTable_General_1[]; +extern u8 *gTilesetAnimTable_General_2[]; +extern u8 *gTilesetAnimTable_General_3[]; +extern u8 *gTilesetAnimTable_General_4[]; +extern u8 *gTilesetAnimTable_Lavaridge[]; +extern u8 *gTilesetAnimTable_Pacifidlog_0[]; +extern u8 *gTilesetAnimTable_Underwater[]; +extern u8 *gTilesetAnimTable_Pacifidlog_1[]; +extern u8 *gUnknown_0837BAE4[]; +extern u8 *gUnknown_0837BB04[]; +extern u8 *gTilesetAnimTable_Mauville_0A[]; +extern u8 *gTilesetAnimTable_Mauville_1A[]; +extern u8 *gTilesetAnimTable_Mauville_0B[]; +extern u8 *gTilesetAnimTable_Mauville_1B[]; +extern u8 *gUnknown_0837BFA4[]; +extern u8 *gTilesetAnimTable_Rustboro_0[]; +extern u8 *gTilesetAnimTable_Rustboro_1[]; +extern u8 *gTilesetAnimTable_Cave[]; +extern u8 *gUnknown_0837C93C[]; +extern u8 *gTilesetAnimTable_EverGrande[]; +extern u8 *gTilesetAnimTable_Building[]; +extern u8 *gTilesetAnimTable_SootopolisGym_0[]; +extern u8 *gTilesetAnimTable_SootopolisGym_1[]; +extern u8 *gTilesetAnimTable_EliteFour_0[]; +extern u8 *gTilesetAnimTable_EliteFour_1[]; +extern u8 *gTilesetAnimTable_MauvilleGym[]; +extern u8 *gTilesetAnimTable_BikeShop[]; + +struct Dma +{ + u8 *src; + u8 *dest; + u16 size; +}; + +EWRAM_DATA static struct Dma gTilesetAnimDmas[20] = {0}; + +static u8 gNumTilesetAnimDmas; +static u16 gTileset1AnimFrame; +static u16 gTileset1AnimLength; +static u16 gTileset2AnimFrame; +static u16 gTileset2AnimLength; +static void (*gTileset1AnimCallback)(u16); +static void (*gTileset2AnimCallback)(u16); + +static void StartTileset1Animation(void); +static void StartTileset2Animation(void); + +static void sub_8073014(u16); +static void sub_8073058(u16); + +static void sub_8073070(u16); +static void sub_8073098(u16); +static void sub_80730C0(u16); +static void sub_80730E8(u16); +static void sub_807361C(u16); + +static void sub_8073424(u16); +static void sub_80734A0(u16); +static void sub_8073514(u16); +static void sub_8073540(u16); +static void sub_80735B4(u16); +static void sub_80735E4(u16); +static void sub_80738A8(u16); +static void sub_8073600(u16); +static void sub_80738C0(u16); +static void sub_8073890(u16); +static void sub_80738EC(u16); + +static void sub_80737A4(u16, u8); +static void sub_80737E0(u16); +static void sub_8073704(u16, u8); +static void sub_8073644(u8); +static void sub_8073808(u16); +static void sub_8073830(u16, u8); +static void sub_807368C(u8); +static void sub_80736DC(u8); +static void sub_80736B4(u8); +static void sub_8073868(u16); + +static void sub_8073904(u16); +static void sub_80739C4(u16); +static void sub_807392C(u16); +static void sub_807399C(u16); +static void sub_8073974(u16); +static void sub_80739EC(u16); + +static void ClearTilesetAnimDmas(void) +{ + gNumTilesetAnimDmas = 0; + CpuFill32(0, &gTilesetAnimDmas, sizeof(gTilesetAnimDmas)); +} + +static void QueueTilesetAnimDma(u8 *src, u8 *dest, u16 size) +{ + if (gNumTilesetAnimDmas < 20) + { + gTilesetAnimDmas[gNumTilesetAnimDmas].src = src; + gTilesetAnimDmas[gNumTilesetAnimDmas].dest = dest; + gTilesetAnimDmas[gNumTilesetAnimDmas].size = size; + gNumTilesetAnimDmas++; + } +} + +void sub_8072E74(void) +{ + int i; + for (i = 0; i < gNumTilesetAnimDmas; i++) + { + DmaCopy16(3, + gTilesetAnimDmas[i].src, + gTilesetAnimDmas[i].dest, + gTilesetAnimDmas[i].size); + } + gNumTilesetAnimDmas = 0; +} + +void cur_mapheader_run_tileset_funcs_after_some_cpuset(void) +{ + ClearTilesetAnimDmas(); + StartTileset1Animation(); + StartTileset2Animation(); +} + +void sub_8072ED0(void) +{ + StartTileset2Animation(); +} + +void sub_8072EDC(void) +{ + ClearTilesetAnimDmas(); + if (++gTileset1AnimFrame >= gTileset1AnimLength) + { + gTileset1AnimFrame = 0; + } + if (++gTileset2AnimFrame >= gTileset2AnimLength) + { + gTileset2AnimFrame = 0; + } + if (gTileset1AnimCallback) + { + gTileset1AnimCallback(gTileset1AnimFrame); + } + if (gTileset2AnimCallback) + { + gTileset2AnimCallback(gTileset2AnimFrame); + } +} + +static void StartTileset1Animation(void) +{ + gTileset1AnimFrame = 0; + gTileset1AnimLength = 0; + gTileset1AnimCallback = 0; + if (gMapHeader.mapData->primaryTileset) + { + if (gMapHeader.mapData->primaryTileset->callback) + { + gMapHeader.mapData->primaryTileset->callback(); + } + } +} + +static void StartTileset2Animation(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = 0; + gTileset2AnimCallback = 0; + if (gMapHeader.mapData->secondaryTileset) + { + if (gMapHeader.mapData->secondaryTileset->callback) + { + gMapHeader.mapData->secondaryTileset->callback(); + } + } +} + +void TilesetCB_General(void) +{ + gTileset1AnimFrame = 0; + gTileset1AnimLength = 0x100; + gTileset1AnimCallback = sub_8073014; +} + +void TilesetCB_Building(void) +{ + gTileset1AnimFrame = 0; + gTileset1AnimLength = 0x100; + gTileset1AnimCallback = sub_8073058; +} + +static void sub_8073014(u16 a1) +{ + int v1; + v1 = a1 % 0x10; + if (v1 == 0) sub_8073070(a1 / 0x10); + if (v1 == 1) sub_8073098(a1 / 0x10); + if (v1 == 2) sub_80730C0(a1 / 0x10); + if (v1 == 3) sub_80730E8(a1 / 0x10); + if (v1 == 4) sub_807361C(a1 / 0x10); +} + +static void sub_8073058(u16 a1) +{ + if (a1 % 8 == 0) + { + sub_8073904(a1 / 8); + } +} + +static void sub_8073070(u16 a1) +{ + int v1; + v1 = a1 % 4; + QueueTilesetAnimDma(gTilesetAnimTable_General_0[v1], (u8 *)(BG_VRAM + 0x3f80), 0x80); +} + +static void sub_8073098(u16 a1) +{ + u8 v1; + v1 = a1 % 8; + QueueTilesetAnimDma(gTilesetAnimTable_General_1[v1], (u8 *)(BG_VRAM + 0x3600), 0x3c0); +} + +static void sub_80730C0(u16 a1) +{ + int v1; + v1 = a1 % 8; + QueueTilesetAnimDma(gTilesetAnimTable_General_2[v1], (u8 *)(BG_VRAM + 0x3a00), 0x140); +} + +static void sub_80730E8(u16 a1) +{ + int v1; + v1 = a1 % 4; + QueueTilesetAnimDma(gTilesetAnimTable_General_3[v1], (u8 *)(BG_VRAM + 0x3e00), 0xc0); +} + +void TilesetCB_Petalburg(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = 0; +} + +void TilesetCB_Rustboro(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = sub_8073424; +} + +void TilesetCB_Dewford(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = 0; +} + +void TilesetCB_Slateport(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = 0; +} + +void TilesetCB_Mauville(void) +{ + gTileset2AnimFrame = gTileset1AnimFrame; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = sub_80734A0; +} + +void TilesetCB_Lavaridge(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = sub_8073514; +} + +void TilesetCB_Fallarbor(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = 0; +} + +void TilesetCB_Fortree(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = 0; +} + +void TilesetCB_Lilycove(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = 0; +} + +void TilesetCB_Mossdeep(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = 0; +} + +void TilesetCB_EverGrande(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = sub_8073540; +} + +void TilesetCB_Pacifidlog(void) +{ + gTileset2AnimFrame = gTileset1AnimFrame; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = sub_80735B4; +} + +void TilesetCB_Sootopolis(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = 0; +} + +void TilesetCB_Underwater(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = 0x80; + gTileset2AnimCallback = sub_80735E4; +} + +void TilesetCB_SootopolisGym(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = 0xf0; + gTileset2AnimCallback = sub_80738A8; +} + +void TilesetCB_Cave(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = sub_8073600; +} + +void TilesetCB_EliteFour(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = 0x80; + gTileset2AnimCallback = sub_80738C0; +} + +void TilesetCB_MauvilleGym(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = sub_8073890; +} + +void TilesetCB_BikeShop(void) +{ + gTileset2AnimFrame = 0; + gTileset2AnimLength = gTileset1AnimLength; + gTileset2AnimCallback = sub_80738EC; +} + +static void sub_8073424(u16 a1) +{ + int v1; + v1 = a1 % 8; + if (v1 == 0) + { + sub_80737A4(a1 / 8, 0); + sub_80737E0(a1 / 8); + } + if (v1 == 1) sub_80737A4(a1 / 8, 1); + if (v1 == 2) sub_80737A4(a1 / 8, 2); + if (v1 == 3) sub_80737A4(a1 / 8, 3); + if (v1 == 4) sub_80737A4(a1 / 8, 4); + if (v1 == 5) sub_80737A4(a1 / 8, 5); + if (v1 == 6) sub_80737A4(a1 / 8, 6); + if (v1 == 7) sub_80737A4(a1 / 8, 7); +} + +static void sub_80734A0(u16 a1) +{ + int v1; + v1 = a1 % 8; + if (v1 == 0) sub_8073704(a1 / 8, 0); + if (v1 == 1) sub_8073704(a1 / 8, 1); + if (v1 == 2) sub_8073704(a1 / 8, 2); + if (v1 == 3) sub_8073704(a1 / 8, 3); + if (v1 == 4) sub_8073704(a1 / 8, 4); + if (v1 == 5) sub_8073704(a1 / 8, 5); + if (v1 == 6) sub_8073704(a1 / 8, 6); + if (v1 == 7) sub_8073704(a1 / 8, 7); +} + +static void sub_8073514(u16 a1) +{ + int v1; + v1 = a1 % 0x10; + if (v1 == 0) sub_8073644(a1 / 0x10); + if (v1 == 1) sub_8073808(a1 / 0x10); +} + +static void sub_8073540(u16 a1) +{ + int v1; + v1 = a1 % 8; + if (v1 == 0) sub_8073830(a1 / 8, 0); + if (v1 == 1) sub_8073830(a1 / 8, 1); + if (v1 == 2) sub_8073830(a1 / 8, 2); + if (v1 == 3) sub_8073830(a1 / 8, 3); + if (v1 == 4) sub_8073830(a1 / 8, 4); + if (v1 == 5) sub_8073830(a1 / 8, 5); + if (v1 == 6) sub_8073830(a1 / 8, 6); + if (v1 == 7) sub_8073830(a1 / 8, 7); +} + +static void sub_80735B4(u16 a1) +{ + int v1; + v1 = a1 % 0x10; + if (v1 == 0) sub_807368C(a1 / 0x10); + if (v1 == 1) sub_80736DC(a1 / 0x10); +} + +static void sub_80735E4(u16 a1) +{ + int v1; + v1 = a1 % 0x10; + if (v1 == 0) sub_80736B4(a1 / 0x10); +} + +static void sub_8073600(u16 a1) +{ + int v1; + v1 = a1 % 0x10; + if (v1 == 1) sub_8073868(a1 / 0x10); +} + +static void sub_807361C(u16 a1) +{ + int v1; + v1 = a1 % 4; + QueueTilesetAnimDma(gTilesetAnimTable_General_4[v1], (u8 *)(BG_VRAM + 0x3c00), 0x140); +} + +static void sub_8073644(u8 a1) +{ + u8 v1; + v1 = a1 % 4; + QueueTilesetAnimDma(gTilesetAnimTable_Lavaridge[v1], (u8 *)(BG_VRAM + 0x6400), 0x80); + v1 = (a1 + 2) % 4; + QueueTilesetAnimDma(gTilesetAnimTable_Lavaridge[v1], (u8 *)(BG_VRAM + 0x6480), 0x80); +} + +static void sub_807368C(u8 a1) +{ + int v1; + v1 = a1 % 4; + QueueTilesetAnimDma(gTilesetAnimTable_Pacifidlog_0[v1], (u8 *)(BG_VRAM + 0x7a00), 0x3c0); +} + +static void sub_80736B4(u8 a1) +{ + int v1; + v1 = a1 % 4; + QueueTilesetAnimDma(gTilesetAnimTable_Underwater[v1], (u8 *)(BG_VRAM + 0x7e00), 0x80); +} + +static void sub_80736DC(u8 a1) +{ + int v1; + v1 = a1 % 8; + QueueTilesetAnimDma(gTilesetAnimTable_Pacifidlog_1[v1], (u8 *)(BG_VRAM + 0x7e00), 0x100); +} + +static void sub_8073704(u16 a1, u8 a2) +{ + int v1; + a1 -= a2; + if (a1 < 12) + { + v1 = a1 % 12; + QueueTilesetAnimDma(gTilesetAnimTable_Mauville_0A[v1], gUnknown_0837BAE4[a2], 0x80); + QueueTilesetAnimDma(gTilesetAnimTable_Mauville_1A[v1], gUnknown_0837BB04[a2], 0x80); + } + else + { + v1 = a1 % 4; + QueueTilesetAnimDma(gTilesetAnimTable_Mauville_0B[v1], gUnknown_0837BAE4[a2], 0x80); + QueueTilesetAnimDma(gTilesetAnimTable_Mauville_1B[v1], gUnknown_0837BB04[a2], 0x80); + } +} + +static void sub_80737A4(u16 a1, u8 a2) +{ + int v1; + a1 -= a2; + + v1 = a1 % 8; + if (gTilesetAnimTable_Rustboro_0[v1]) + { + QueueTilesetAnimDma(gTilesetAnimTable_Rustboro_0[v1], gUnknown_0837BFA4[a2], 0x80); + } +} + +static void sub_80737E0(u16 a1) +{ + int v1; + v1 = a1 % 2; + QueueTilesetAnimDma(gTilesetAnimTable_Rustboro_1[v1], (u8 *)(BG_VRAM + 0x7800), 0x80); +} + +static void sub_8073808(u16 a1) +{ + int v1; + v1 = a1 % 4; + QueueTilesetAnimDma(gTilesetAnimTable_Cave[v1], (u8 *)(BG_VRAM + 0x5400), 0x80); +} + +static void sub_8073830(u16 a1, u8 a2) +{ + int v1; + a1 -= a2; + v1 = a1 % 8; + QueueTilesetAnimDma(gTilesetAnimTable_EverGrande[v1], gUnknown_0837C93C[a2], 0x80); +} + +static void sub_8073868(u16 a1) +{ + int v1; + v1 = a1 % 4; + QueueTilesetAnimDma(gTilesetAnimTable_Cave[v1], (u8 *)(BG_VRAM + 0x7400), 0x80); +} + +static void sub_8073890(u16 a1) +{ + int v1; + v1 = a1 % 2; + if (!v1) + { + sub_80739C4(a1 / 2); + } +} + +static void sub_80738A8(u16 a1) +{ + int v1; + v1 = a1 % 8; + if (!v1) + { + sub_807392C(a1 / 8); + } +} + +static void sub_80738C0(u16 a1) +{ + if (a1 % 0x40 == 0) + { + sub_807399C(a1 / 0x40); + } + if (a1 % 8 == 1) + { + sub_8073974(a1 / 8); + } +} + +static void sub_80738EC(u16 a1) +{ + if (a1 % 4 == 0) + { + sub_80739EC(a1 / 4); + } +} + +static void sub_8073904(u16 a1) +{ + int v1; + v1 = a1 % 2; + QueueTilesetAnimDma(gTilesetAnimTable_Building[v1], (u8 *)(BG_VRAM + 0x3e00), 0x80); +} + +static void sub_807392C(u16 a1) +{ + int v1; + v1 = a1 % 3; + QueueTilesetAnimDma(gTilesetAnimTable_SootopolisGym_0[v1], (u8 *)(BG_VRAM + 0x7e00), 0x180); + QueueTilesetAnimDma(gTilesetAnimTable_SootopolisGym_1[v1], (u8 *)(BG_VRAM + 0x7a00), 0x280); +} + +static void sub_8073974(u16 a1) +{ + int v1; + v1 = a1 % 4; + QueueTilesetAnimDma(gTilesetAnimTable_EliteFour_0[v1], (u8 *)(BG_VRAM + 0x7f00), 0x20); +} + +static void sub_807399C(u16 a1) +{ + int v1; + v1 = a1 % 2; + QueueTilesetAnimDma(gTilesetAnimTable_EliteFour_1[v1], (u8 *)(BG_VRAM + 0x7c00), 0x80); +} + +static void sub_80739C4(u16 a1) +{ + int v1; + v1 = a1 % 2; + QueueTilesetAnimDma(gTilesetAnimTable_MauvilleGym[v1], (u8 *)(BG_VRAM + 0x5200), 0x200); +} + +static void sub_80739EC(u16 a1) +{ + int v1; + v1 = a1 % 2; + QueueTilesetAnimDma(gTilesetAnimTable_BikeShop[v1], (u8 *)(BG_VRAM + 0x7e00), 0x120); +} diff --git a/src/engine/time_events.c b/src/engine/time_events.c new file mode 100644 index 000000000..e1b9a2e9e --- /dev/null +++ b/src/engine/time_events.c @@ -0,0 +1,118 @@ +#include "global.h" +#include "time_events.h" +#include "event_data.h" +#include "field_weather.h" +#include "pokemon.h" +#include "rng.h" +#include "rom4.h" +#include "rtc.h" +#include "script.h" +#include "task.h" + +static u32 GetMirageRnd(void) +{ + u32 hi = VarGet(VAR_MIRAGE_RND_H); + u32 lo = VarGet(VAR_MIRAGE_RND_L); + return (hi << 16) | lo; +} + +static void SetMirageRnd(u32 rnd) +{ + VarSet(VAR_MIRAGE_RND_H, rnd >> 16); + VarSet(VAR_MIRAGE_RND_L, rnd); +} + +// unused +void InitMirageRnd(void) +{ + SetMirageRnd((Random() << 16) | Random()); +} + +void UpdateMirageRnd(u16 days) +{ + s32 rnd = GetMirageRnd(); + while (days) + { + rnd = 1103515245 * rnd + 12345; + days--; + } + SetMirageRnd(rnd); +} + +bool8 IsMirageIslandPresent(void) +{ + u16 rnd = GetMirageRnd() >> 16; + int i; + + for (i = 0; i < PARTY_SIZE; i++) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && (GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY) & 0xFFFF) == rnd) + return TRUE; + + return FALSE; +} + +void UpdateShoalTideFlag(void) +{ + static const u8 tide[] = + { + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + }; + + if (is_light_level_1_2_3_5_or_6(get_map_light_from_warp0())) + { + RtcCalcLocalTime(); + if (tide[gLocalTime.hours]) + FlagSet(SYS_SHOAL_TIDE); + else + FlagReset(SYS_SHOAL_TIDE); + } +} + +static void Task_WaitWeather(u8 taskId) +{ + if (sub_807DDFC()) + { + EnableBothScriptContexts(); + DestroyTask(taskId); + } +} + +void WaitWeather(void) +{ + CreateTask(Task_WaitWeather, 80); +} + +void InitBirchState(void) +{ + *(u16 *)GetVarPointer(VAR_BIRCH_STATE) = 0; +} + +void UpdateBirchState(u16 days) +{ + u16 *state = GetVarPointer(VAR_BIRCH_STATE); + *state += days; + *state %= 7; +} diff --git a/src/engine/trade.c b/src/engine/trade.c new file mode 100644 index 000000000..cb190d194 --- /dev/null +++ b/src/engine/trade.c @@ -0,0 +1,88 @@ +#include "global.h" +#include "name_string_util.h" +#include "string_util.h" +#include "text.h" + +struct InGameTrade { + /*0x00*/ u8 name[11]; + /*0x0C*/ u16 species; + /*0x0E*/ u8 ivs[6]; + /*0x14*/ bool8 secondAbility; + /*0x18*/ u32 otId; + /*0x1C*/ u8 stats[5]; + /*0x24*/ u32 personality; + /*0x28*/ u16 heldItem; + /*0x2A*/ u8 mailNum; + /*0x2B*/ u8 otName[11]; + /*0x36*/ u8 otGender; + /*0x37*/ u8 sheen; + /*0x38*/ u16 playerSpecies; +}; + +struct UnkStructC { + /*0x00*/ u16 words[9]; + /*0x10*/ u8 string[8]; + /*0x1A*/ u8 otId[4]; + /*0x1E*/ u16 species; + /*0x20*/ u16 heldItem; +}; + +struct UnkStructD { + /*0x00*/ u8 pad00[0x10]; + /*0x10*/ u8 var10; + /*0x11*/ u8 pad11[1]; + /*0x12*/ u16 var12[1]; +}; + +extern const struct InGameTrade gIngameTrades[]; +extern const u16 gIngameTradeMail[][10]; + + +void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { + int y, x; + + for (y = 0; y < height; y++) + { + + for (x = 0; x < width; x++) + { + arg0->var12[(top * 32 + left) + y * 32 + x] = tilemap[width * y + x] | sp8; + } + } + +#if ENGLISH + arg0->var10 = 1; +#endif +} + +#if GERMAN +void sub_804A96C_alt(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { + sub_804A96C(arg0, left, top, tilemap, width, height, sp8); + + arg0->var10 = 1; +} +#endif + +asm(".section .text.sub_804DAD4"); + +void sub_804DAD4(struct UnkStructC *arg0, struct InGameTrade *trade) { + s32 i; + + for (i = 0; i < 9; i++) + { + arg0->words[i] = gIngameTradeMail[trade->mailNum][i]; + } + + StringCopy(arg0->string, trade->otName); + +#if GERMAN + PadNameString(arg0->string, CHAR_SPACE); +#endif + + arg0->otId[0] = trade->otId >> 24; + arg0->otId[1] = trade->otId >> 16; + arg0->otId[2] = trade->otId >> 8; + arg0->otId[3] = trade->otId; + arg0->species = trade->species; + arg0->heldItem = trade->heldItem; +} diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c new file mode 100644 index 000000000..626c5a7bf --- /dev/null +++ b/src/engine/trainer_card.c @@ -0,0 +1,1569 @@ +#include "global.h" +#include "trainer_card.h" +#include "easy_chat.h" +#include "event_data.h" +#include "field_effect.h" +#include "graphics.h" +#include "link.h" +#include "main.h" +#include "menu.h" +#include "money.h" +#include "palette.h" +#include "pokedex.h" +#include "rom4.h" +#include "script_pokemon_80C4.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings2.h" +#include "task.h" +#include "unknown_task.h" +#include "util.h" + +typedef void (*Callback)(void); + +struct Struct2000000 +{ + /*0x00*/ u8 var_0; + /*0x01*/ bool8 var_1; + /*0x02*/ u8 var_2; + /*0x03*/ bool8 var_3; + /*0x04*/ u8 var_4; + /*0x05*/ u8 var_5; + /*0x06*/ u8 var_6; + /*0x07*/ bool8 var_7; + /*0x08*/ bool8 var_8; + /*0x09*/ bool8 var_9; + /*0x0A*/ bool8 var_a; + /*0x0B*/ bool8 var_b; + /*0x0C*/ bool8 var_c; + /*0x0D*/ bool8 var_d; + /*0x0E*/ u8 var_e[8]; + /*0x16*/ u8 filler_16[10]; + /*0x20*/ u8 var_20[4][0x10]; + /*0x60*/ Callback *var_60; + /*0x64*/ struct TrainerCard var_64; + /*0x9C*/ u8 language; // 0x9C +}; + +extern u8 ewram[]; +#define ewram0 (*(struct Struct2000000 *)(ewram)) + +extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; + +EWRAM_DATA struct TrainerCard gTrainerCards[4] = {0}; + +struct UnknownStruct1 +{ + u16 filler0[0x3C0]; + u16 unk780[160]; +}; +extern struct UnknownStruct1 gUnknown_03004DE0; + +extern const u8 gBadgesTiles[]; +extern const u16 gUnknown_083B5F0C[]; +extern const u16 gBadgesPalette[]; +extern const u16 gUnknown_083B5F4C[]; +extern const u16 gUnknown_083B5F6C[]; +extern const u16 gUnknown_083B5F8C[][4]; + +const u8 gBadgesTiles[] = INCBIN_U8("graphics/trainer_card/badges.4bpp"); +// XXX: what is this? +u8 *const ewram_ = ewram; + +bool8 sub_8093864(struct Task *); +bool8 sub_80938A8(struct Task *); +bool8 sub_80938CC(struct Task *); +bool8 sub_8093918(struct Task *); +bool8 sub_8093938(struct Task *); +bool8 sub_8093954(struct Task *); +bool8 sub_8093980(struct Task *); + +bool8 (*const gUnknown_083B5EBC[])(struct Task *) = +{ + sub_8093864, + sub_80938A8, + sub_80938CC, + sub_8093918, + sub_8093938, + sub_8093954, + sub_8093980, +}; + +bool8 sub_8093AA0(struct Task *); +bool8 sub_8093AF0(struct Task *); +bool8 sub_8093C0C(struct Task *); +bool8 sub_8093C38(struct Task *); +bool8 sub_8093D50(struct Task *); + +bool8 (*const gUnknown_083B5ED8[])(struct Task *) = +{ + sub_8093AA0, + sub_8093AF0, + sub_8093C0C, + sub_8093C38, + sub_8093D50, +}; + +// FIXME: Other signature than on save_menu_util.h +void FormatPlayTime(u8 *playtime, u16 hours, u16 minutes, s16 colon); +u16 GetPokedexSeenCount(void); + +enum +{ + TD_0, + TD_1, + TD_CALLBACK, +}; + +static void sub_8093174(void); +static void sub_809323C(void); +static void sub_8093254(void); +static void sub_80932AC(Callback callBack); +static void sub_80932E4(u8 arg1, Callback callBack); +void sub_8093324(void); +static void nullsub_60(u8); +static u32 sav12_xor_get_clamped_above(u8 index, u32 maxVal); +static u8 sub_80934F4(struct TrainerCard *); +static void sub_8093534(void); +static void sub_8093550(void); +static void sub_8093598(void); +static void sub_80935EC(void); +static void sub_8093610(void); +static void sub_8093688(void); +void sub_80936D4(void); +static void sub_80937A4(void); +static void sub_80937BC(void); +static void sub_80937D8(void); +static void sub_80937F0(void); +static void nullsub_15(void); +static void sub_8093800(void); +static void sub_809380C(); +static void sub_809382C(u8 taskId); +static void sub_80939A4(void); +static void sub_80939C0(void); +static void sub_80939DC(u8 taskId); +static void sub_8093A28(void); +static u8 sub_8093A48(void); +static void sub_8093A68(u8 taskId); +void sub_8093D7C(void); +static void sub_8093DAC(void); +static void sub_8093DC8(void); +static void sub_8093DEC(void); +static void sub_8093E04(void); +static void sub_8093E28(void); +void sub_8093EA0(void); +static void sub_8093EF8(void); +static void sub_8093F14(void); +static void sub_8093F48(void); +static void sub_8093F64(void); +static void sub_8093F80(void); +static void sub_8093FD0(void); +static void sub_8094038(void); +static void sub_80940E4(void); +static void sub_8094110(void); +static void sub_8094140(void); +static void sub_8094188(void); +static void TrainerCard_Front_PrintTrainerID(void); +static void TrainerCard_Front_PrintMoney(void); +static void TrainerCard_Front_PrintPokedexCount(void); +static void TrainerCard_Front_PrintPlayTime(u8 *arg1, s16 colon); +static void sub_809429C(void); +static void TrainerCard_Back_PrintName(void); +static void TrainerCard_Back_PrintHallOfFameTime_Label(void); +static void TrainerCard_Back_PrintHallOfFameTime(void); +static void TrainerCard_Back_PrintLinkBattlesLabel(void); +static void TrainerCard_Back_PrintLinkBattles(void); +static void TrainerCard_Back_PrintBattleTower_Label(void); +static void TrainerCard_Back_PrintBattleTower(void); +static void TrainerCard_Back_PrintLinkContests_Label(void); +static void TrainerCard_Back_PrintLinkContests(void); +static void TrainerCard_Back_PrintLinkPokeblocks_Label(void); +static void TrainerCard_Back_PrintLinkPokeblocks(void); +static void TrainerCard_Back_PrintPokemonTrades_Label(void); +static void TrainerCard_Back_PrintPokemonTrades(void); +void unref_sub_8094588(u16 left, u16 top); + +void sub_8093110(Callback arg1) +{ + sub_80932AC(arg1); + SetMainCallback2(sub_8093174); + ewram0.language = GAME_LANGUAGE; +} + +void sub_8093130(u8 playerIndex, Callback arg2) +{ + sub_80932E4(playerIndex, arg2); + SetMainCallback2(sub_8093174); + ewram0.language = gLinkPlayers[gLinkPlayerMapObjects[playerIndex].linkPlayerId].language; +} + +static void sub_8093174(void) +{ + switch (gMain.state) + { + case 0: + sub_8093534(); + sub_8093688(); + gMain.state++; + break; + case 1: + sub_8093598(); + gMain.state++; + break; + case 2: + sub_80935EC(); + gMain.state++; + break; + case 3: + sub_8093610(); + sub_80937A4(); + gMain.state++; + break; + case 4: + sub_80937BC(); + gMain.state++; + case 5: + if (MultistepInitMenuWindowContinue()) + gMain.state++; + break; + case 6: + sub_80937F0(); + gMain.state++; + break; + case 7: + sub_80937D8(); + gMain.state++; + break; + case 8: + nullsub_15(); + sub_8093800(); + sub_8093550(); + SetMainCallback2(sub_809323C); + break; + } +} + +static void sub_809323C(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void sub_8093254(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + ewram0.var_6++; + if (ewram0.var_6 >= 60) + { + ewram0.var_6 = 0; + ewram0.var_5 ^= 1; + } + if (ewram0.var_4) + DmaCopy16(3, gUnknown_03004DE0.filler0, gUnknown_03004DE0.unk780, sizeof(gUnknown_03004DE0.unk780)); +} + +static void sub_80932AC(Callback callBack) +{ + u8 taskId = CreateTask(nullsub_60, 0xFF); + struct Task *task = &gTasks[taskId]; + task->data[TD_0] = FALSE; + StoreWordInTwoHalfwords(&task->data[TD_CALLBACK], (u32)callBack); +} + +static void sub_80932E4(u8 arg1, Callback callBack) +{ + u8 taskId = CreateTask(nullsub_60, 0xFF); + + struct Task *task = &gTasks[taskId]; + task->data[TD_0] = TRUE; + task->data[TD_1] = arg1; + StoreWordInTwoHalfwords(&task->data[TD_CALLBACK], (u32)callBack); +} + +void sub_8093324(void) +{ + u8 taskId = FindTaskIdByFunc(nullsub_60); + struct Task *task = &gTasks[taskId]; + ewram0.var_1 = task->data[TD_0]; + + LoadWordFromTwoHalfwords((u16 *)&task->data[TD_CALLBACK], (u32 *)&ewram0.var_60); + + if (ewram0.var_1) + { + struct TrainerCard(*trainerCards)[4] = &gTrainerCards; + s16 var = task->data[TD_1]; + struct TrainerCard *dest = &(*trainerCards)[var]; + memcpy(&ewram0.var_64, dest, sizeof(struct TrainerCard)); + } + else + { + sub_8093390(&ewram0.var_64); + } +} + +static void nullsub_60(u8 taskid) +{ +} + +void sub_8093390(struct TrainerCard *arg1) +{ + u32 playTime; + bool32 enteredHallOfFame; + bool8 r4; + u8 i; + + arg1->gender = gSaveBlock2.playerGender; + arg1->playTimeHours = gSaveBlock2.playTimeHours; + arg1->playTimeMinutes = gSaveBlock2.playTimeMinutes; + + playTime = GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME); + enteredHallOfFame = GetGameStat(GAME_STAT_ENTERED_HOF); + if (!enteredHallOfFame) + { + playTime = 0; + } + arg1->firstHallOfFameA = playTime >> 16; + arg1->firstHallOfFameB = (playTime >> 8) & 0xFF; + arg1->firstHallOfFameC = playTime & 0xFF; + + arg1->hasPokedex = FlagGet(SYS_POKEDEX_GET); + arg1->var_3 = sub_8090FC0(); + arg1->pokedexSeen = GetPokedexSeenCount(); + + arg1->trainerId = (gSaveBlock2.playerTrainerId[1] << 8) | gSaveBlock2.playerTrainerId[0]; + + // Link Cable Battles + arg1->linkBattleWins = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_WINS, 9999); + arg1->linkBattleLosses = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_LOSSES, 9999); + + // Contests w/ Friends + arg1->contestsWithFriends = sav12_xor_get_clamped_above(GAME_STAT_WON_LINK_CONTEST, 999); + + // Pokéblocks w/ Friends + arg1->pokeblocksWithFriends = sav12_xor_get_clamped_above(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF); + + // Pokémon Trades + arg1->pokemonTrades = sav12_xor_get_clamped_above(GAME_STAT_POKEMON_TRADES, 0xFFFF); + + // Battle tower? + arg1->battleTowerWins = gSaveBlock2.filler_A8.var_4C8; + arg1->battleTowerLosses = gSaveBlock2.filler_A8.var_4CA; + if (arg1->battleTowerWins > 9999) + { + arg1->battleTowerWins = 9999; + } + if (arg1->battleTowerLosses > 9999) + { + arg1->battleTowerLosses = 9999; + } + + r4 = FALSE; + if (sub_80C4D50() > 4) + { + r4 = TRUE; + } + arg1->var_4 = r4; + + arg1->money = gSaveBlock1.money; + + for (i = 0; i < 4; i++) + { + arg1->var_28[i] = gSaveBlock1.unk2B1C[i]; + } + + for (i = 0; i < 8; i++) + { + arg1->playerName[i] = gSaveBlock2.playerName[i]; + } + + arg1->stars = sub_80934F4(arg1); +} + +u8 sub_80934C4(u8 id) +{ + return gTrainerCards[id].stars; +} + +static u32 sav12_xor_get_clamped_above(u8 index, u32 maxVal) +{ + u32 value = GetGameStat(index); + + if (value > maxVal) + { + value = maxVal; + } + + return value; +} + +static u8 sub_80934F4(struct TrainerCard *trainerCard) +{ + u8 value = 0; + + if (trainerCard->firstHallOfFameA != 0 || trainerCard->firstHallOfFameB != 0 || trainerCard->firstHallOfFameC != 0) + { + value++; + } + + if (trainerCard->var_3) + { + value++; + } + + if (trainerCard->battleTowerLosses > 49) + { + value++; + } + + if (trainerCard->var_4) + { + value++; + } + + return value; +} + +static void sub_8093534(void) +{ + SetVBlankCallback(NULL); + SetHBlankCallback(NULL); + REG_DISPCNT = 0; +} + +static void sub_8093550(void) +{ + u16 backup; + + SetVBlankCallback(sub_8093254); + + backup = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK | INTR_FLAG_HBLANK; + REG_IME = backup; + + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR | DISPSTAT_HBLANK_INTR; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; +} + +void sub_8093598(void) +{ + u8 *addr = (void *)VRAM; + u32 size = 0x10000; + + while (1) + { + DmaFill16(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill16(3, 0, addr, size); + break; + } + } +} + +void sub_80935EC(void) +{ + void *addr = (void *)OAM; + + DmaFill16(3, 0, addr, 0x400); +} + +void sub_8093610(void) +{ + REG_BG0CNT = 0; + REG_BG1CNT = 0; + REG_BG2CNT = 0; + REG_BG3CNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(30) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(8) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(9) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(10) | BGCNT_16COLOR | BGCNT_TXT256x256; +} + +static void sub_8093688(void) +{ + u8 i; + + sub_8093324(); + ewram0.var_0 = 0; + ewram0.var_3 = 0; + ewram0.var_4 = FALSE; + ewram0.var_2 = ewram0.var_64.stars; + 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]); + sub_80936D4(); +} + +void sub_80936D4(void) +{ + ewram0.var_7 = 0; + ewram0.var_8 = 0; + ewram0.var_9 = 0; + ewram0.var_a = 0; + ewram0.var_b = 0; + ewram0.var_c = 0; + ewram0.var_d = 0; + memset(ewram0.var_e, 0, sizeof(ewram0.var_e)); + + if (ewram0.var_64.hasPokedex) + ewram0.var_7++; + + if (ewram0.var_64.firstHallOfFameA != 0 + || ewram0.var_64.firstHallOfFameB != 0 + || ewram0.var_64.firstHallOfFameC != 0) + ewram0.var_8++; + + if (ewram0.var_64.linkBattleWins != 0 || ewram0.var_64.linkBattleLosses != 0) + ewram0.var_9++; + + if (ewram0.var_64.battleTowerWins != 0 || ewram0.var_64.battleTowerLosses != 0) + ewram0.var_a++; + + if (ewram0.var_64.contestsWithFriends != 0) + ewram0.var_b++; + + if (ewram0.var_64.pokeblocksWithFriends != 0) + ewram0.var_c++; + + if (ewram0.var_64.pokemonTrades != 0) + ewram0.var_d++; + + if (!ewram0.var_1) + { + u32 badgeFlag; + int i = 0; + + badgeFlag = BADGE01_GET; + while (1) + { + if (FlagGet(badgeFlag)) + ewram0.var_e[i]++; + badgeFlag++; + i++; + if (badgeFlag > BADGE08_GET) + { + break; + } + } + } +} + +void sub_80937A4() +{ + ResetPaletteFade(); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); +} + +void sub_80937BC() +{ + SetUpWindowConfig(&WindowConfig_TrainerCard_Back_Values); + MultistepInitMenuWindowBegin(&WindowConfig_TrainerCard_Back_Values); +} + +static void sub_80937D8() +{ + sub_8093E04(); + sub_8093E28(); + sub_8093F64(); + sub_8093DAC(); +} + +static void sub_80937F0() +{ + sub_8093EF8(); +} + +static void nullsub_15(void) +{ +} + +static void sub_8093800() +{ + sub_809380C(); +} + +static void sub_809380C() +{ + u8 taskId; + + taskId = CreateTask(sub_809382C, 0); + sub_809382C(taskId); +} + +static void sub_809382C(u8 taskId) +{ + while (gUnknown_083B5EBC[ewram0.var_0](&gTasks[taskId]) != 0) + ; +} + +bool8 sub_8093864(struct Task *task) +{ + ewram0.var_5 = gSaveBlock2.playTimeSeconds & 1; + ewram0.var_6 = gSaveBlock2.playTimeVBlanks; + sub_80939A4(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + ewram0.var_0++; + return FALSE; +} + +bool8 sub_80938A8(struct Task *task) +{ + if (!gPaletteFade.active) + ewram0.var_0++; + return FALSE; +} + +bool8 sub_80938CC(struct Task *task) +{ + if (gMain.newKeys & B_BUTTON) + { + ewram0.var_0 = 5; + return TRUE; + } + else if (gMain.newKeys & A_BUTTON) + { + if (ewram0.var_3 != 0) + { + ewram0.var_0 = 5; + } + else + { + ewram0.var_3 ^= 1; + ewram0.var_0 = 3; + } + return TRUE; + } + return FALSE; +} + +bool8 sub_8093918(struct Task *task) +{ + sub_8093A28(); + PlaySE(SE_CARD); + ewram0.var_0++; + return FALSE; +} + +bool8 sub_8093938(struct Task *task) +{ + if (sub_8093A48()) + ewram0.var_0 = 2; + return FALSE; +} + +bool8 sub_8093954(struct Task *task) +{ + sub_80939C0(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + ewram0.var_0++; + return FALSE; +} + +bool8 sub_8093980(struct Task *task) +{ + if (!gPaletteFade.active) + SetMainCallback2((MainCallback)ewram0.var_60); + return FALSE; +} + +static void sub_80939A4(void) +{ + CreateTask(sub_80939DC, 0); + BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Values); +} + +static void sub_80939C0(void) +{ + u8 taskId = FindTaskIdByFunc(sub_80939DC); + + if (taskId != 0xFF) + DestroyTask(taskId); +} + +static void sub_80939DC(u8 taskId) +{ + u8 buffer[32]; + struct Task *task = &gTasks[taskId]; + + if (ewram0.var_5 != task->data[TD_1]) + { + task->data[TD_1] = ewram0.var_5; + task->data[TD_0] ^= TRUE; + } + TrainerCard_Front_PrintPlayTime(buffer, task->data[TD_0]); + MenuPrint(buffer, 10, 12); +} + +static void sub_8093A28(void) +{ + u8 taskId; + + taskId = CreateTask(sub_8093A68, 0); + sub_8093A68(taskId); +} + +static u8 sub_8093A48(void) +{ + if (FindTaskIdByFunc(sub_8093A68) == 0xFF) + return TRUE; + else + return FALSE; +} + +static void sub_8093A68(u8 taskId) +{ + while (gUnknown_083B5ED8[gTasks[taskId].data[0]](&gTasks[taskId]) != 0) + ; +} + +bool8 sub_8093AA0(struct Task *task) +{ + s32 i; + + ewram0.var_4 = FALSE; + dp12_8087EA4(); + for (i = 0; i < ARRAY_COUNT(gUnknown_03004DE0.unk780); i++) + gUnknown_03004DE0.unk780[i] = -4; + SetHBlankCallback(sub_8093D7C); + ewram0.var_4 = TRUE; + task->data[0]++; + return FALSE; +} + +/* +bool8 sub_8093AF0(struct Task *task) +{ + u32 r7; + u16 r9; + u32 r6; + u32 r5; + u32 r4; + u32 r10; + u32 sp0; + s16 i; + + ewram0.var_4 = 0; + task->data[1] += 3; + if (task->data[1] > 79) + task->data[1] = 79; + + r7 = task->data[1]; + r9 = 160 - r7; + r4 = r9 - r7; + r6 = -r7 << 16; + r5 = (160 << 16) / r4; + r5 -= 1 << 16; + r10 = r5 * r4 + r6; + sp0 = r5 / r4; + r5 *= 2; + + for (i = 0; i < r7; i++) + { + gUnknown_03004DE0.filler0[i] = -4 - (u32)i; + } + //_08093B74 + for (; i < r9; i++) + { + u16 var = r6 >> 16; + r6 += r5; + r5 -= sp0; + gUnknown_03004DE0.filler0[i] = -4 + var; + } + for (; i < 160; i++) + gUnknown_03004DE0.filler0[i] = -4 + (u16)(r10 >> 16); + ewram0.var_4 = 1; + if (task->data[1] > 0x4A) + task->data[0]++; + return FALSE; +} +*/ + +__attribute__((naked)) +bool8 sub_8093AF0(struct Task *task) +{ + 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 r8, r0\n\ + ldr r1, _08093BFC @ =0x02000000\n\ + movs r0, 0\n\ + strb r0, [r1, 0x4]\n\ + mov r2, r8\n\ + ldrh r0, [r2, 0xA]\n\ + adds r0, 0x3\n\ + strh r0, [r2, 0xA]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x4F\n\ + ble _08093B18\n\ + movs r0, 0x4F\n\ + strh r0, [r2, 0xA]\n\ +_08093B18:\n\ + mov r4, r8\n\ + movs r0, 0xA\n\ + ldrsh r7, [r4, r0]\n\ + movs r0, 0xA0\n\ + subs r0, r7\n\ + mov r9, r0\n\ + subs r4, r0, r7\n\ + negs r0, r7\n\ + lsls r6, r0, 16\n\ + movs r0, 0xA0\n\ + lsls r0, 16\n\ + adds r1, r4, 0\n\ + bl __udivsi3\n\ + adds r5, r0, 0\n\ + ldr r1, _08093C00 @ =0xffff0000\n\ + adds r5, r1\n\ + adds r0, r5, 0\n\ + muls r0, r4\n\ + adds r0, r6\n\ + mov r10, r0\n\ + adds r0, r5, 0\n\ + adds r1, r4, 0\n\ + bl __udivsi3\n\ + str r0, [sp]\n\ + lsls r5, 1\n\ + movs r3, 0\n\ + cmp r3, r7\n\ + bcs _08093B74\n\ + ldr r2, _08093C04 @ =gUnknown_03004DE0\n\ + mov r12, r2\n\ + ldr r0, _08093C08 @ =0x0000fffc\n\ + adds r4, r0, 0\n\ +_08093B5C:\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + lsls r1, r0, 1\n\ + add r1, r12\n\ + subs r2, r4, r0\n\ + strh r2, [r1]\n\ + adds r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, r7\n\ + bcc _08093B5C\n\ +_08093B74:\n\ + lsls r2, r3, 16\n\ + mov r1, r9\n\ + lsls r0, r1, 16\n\ + asrs r1, r0, 16\n\ + mov r4, r10\n\ + lsrs r7, r4, 16\n\ + cmp r2, r0\n\ + bge _08093BAE\n\ + ldr r0, _08093C04 @ =gUnknown_03004DE0\n\ + mov r9, r0\n\ + ldr r4, _08093C08 @ =0x0000fffc\n\ + mov r12, r4\n\ + adds r4, r1, 0\n\ +_08093B8E:\n\ + lsrs r1, r6, 16\n\ + adds r6, r5\n\ + ldr r0, [sp]\n\ + subs r5, r0\n\ + asrs r2, 16\n\ + lsls r0, r2, 1\n\ + add r0, r9\n\ + add r1, r12\n\ + strh r1, [r0]\n\ + adds r2, 0x1\n\ + lsls r2, 16\n\ + lsrs r3, r2, 16\n\ + lsls r2, r3, 16\n\ + asrs r0, r2, 16\n\ + cmp r0, r4\n\ + blt _08093B8E\n\ +_08093BAE:\n\ + adds r1, r7, 0\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x9F\n\ + bgt _08093BD4\n\ + ldr r4, _08093C04 @ =gUnknown_03004DE0\n\ + ldr r0, _08093C08 @ =0x0000fffc\n\ + adds r2, r1, r0\n\ +_08093BBE:\n\ + lsls r1, r3, 16\n\ + asrs r1, 16\n\ + lsls r0, r1, 1\n\ + adds r0, r4\n\ + strh r2, [r0]\n\ + adds r1, 0x1\n\ + lsls r1, 16\n\ + lsrs r3, r1, 16\n\ + asrs r1, 16\n\ + cmp r1, 0x9F\n\ + ble _08093BBE\n\ +_08093BD4:\n\ + movs r0, 0x1\n\ + ldr r1, _08093BFC @ =0x02000000\n\ + strb r0, [r1, 0x4]\n\ + mov r2, r8\n\ + movs r4, 0xA\n\ + ldrsh r0, [r2, r4]\n\ + cmp r0, 0x4A\n\ + ble _08093BEA\n\ + ldrh r0, [r2, 0x8]\n\ + adds r0, 0x1\n\ + strh r0, [r2, 0x8]\n\ +_08093BEA:\n\ + movs r0, 0\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 {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_08093BFC: .4byte 0x02000000\n\ +_08093C00: .4byte 0xffff0000\n\ +_08093C04: .4byte gUnknown_03004DE0\n\ +_08093C08: .4byte 0x0000fffc\n\ + .syntax divided\n"); +} + +bool8 sub_8093C0C(struct Task *task) +{ + sub_80939C0(); + sub_8093DAC(); + if (!ewram0.var_3) + sub_80939A4(); + task->data[0]++; + return TRUE; +} + +__attribute__((naked)) +bool8 sub_8093C38(struct Task *task) +{ + 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 r8, r0\n\ + ldr r1, _08093D40 @ =0x02000000\n\ + movs r2, 0\n\ + strb r2, [r1, 0x4]\n\ + ldrh r0, [r0, 0xA]\n\ + subs r0, 0x3\n\ + mov r3, r8\n\ + strh r0, [r3, 0xA]\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + bgt _08093C5C\n\ + strh r2, [r3, 0xA]\n\ +_08093C5C:\n\ + mov r4, r8\n\ + movs r0, 0xA\n\ + ldrsh r7, [r4, r0]\n\ + movs r0, 0xA0\n\ + subs r0, r7\n\ + mov r9, r0\n\ + subs r4, r0, r7\n\ + negs r0, r7\n\ + lsls r6, r0, 16\n\ + movs r0, 0xA0\n\ + lsls r0, 16\n\ + adds r1, r4, 0\n\ + bl __udivsi3\n\ + adds r5, r0, 0\n\ + ldr r1, _08093D44 @ =0xffff0000\n\ + adds r5, r1\n\ + adds r0, r5, 0\n\ + muls r0, r4\n\ + adds r0, r6\n\ + mov r10, r0\n\ + adds r0, r5, 0\n\ + adds r1, r4, 0\n\ + bl __udivsi3\n\ + str r0, [sp]\n\ + lsrs r5, 1\n\ + movs r3, 0\n\ + cmp r3, r7\n\ + bcs _08093CB8\n\ + ldr r2, _08093D48 @ =gUnknown_03004DE0\n\ + mov r12, r2\n\ + ldr r0, _08093D4C @ =0x0000fffc\n\ + adds r4, r0, 0\n\ +_08093CA0:\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + lsls r1, r0, 1\n\ + add r1, r12\n\ + subs r2, r4, r0\n\ + strh r2, [r1]\n\ + adds r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, r7\n\ + bcc _08093CA0\n\ +_08093CB8:\n\ + lsls r2, r3, 16\n\ + mov r1, r9\n\ + lsls r0, r1, 16\n\ + asrs r1, r0, 16\n\ + mov r4, r10\n\ + lsrs r7, r4, 16\n\ + cmp r2, r0\n\ + bge _08093CF2\n\ + ldr r0, _08093D48 @ =gUnknown_03004DE0\n\ + mov r9, r0\n\ + ldr r3, _08093D4C @ =0x0000fffc\n\ + mov r12, r3\n\ + adds r4, r1, 0\n\ +_08093CD2:\n\ + lsrs r1, r6, 16\n\ + adds r6, r5\n\ + ldr r0, [sp]\n\ + adds r5, r0\n\ + asrs r2, 16\n\ + lsls r0, r2, 1\n\ + add r0, r9\n\ + add r1, r12\n\ + strh r1, [r0]\n\ + adds r2, 0x1\n\ + lsls r2, 16\n\ + lsrs r3, r2, 16\n\ + lsls r2, r3, 16\n\ + asrs r0, r2, 16\n\ + cmp r0, r4\n\ + blt _08093CD2\n\ +_08093CF2:\n\ + adds r1, r7, 0\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x9F\n\ + bgt _08093D18\n\ + ldr r4, _08093D48 @ =gUnknown_03004DE0\n\ + ldr r0, _08093D4C @ =0x0000fffc\n\ + adds r2, r1, r0\n\ +_08093D02:\n\ + lsls r1, r3, 16\n\ + asrs r1, 16\n\ + lsls r0, r1, 1\n\ + adds r0, r4\n\ + strh r2, [r0]\n\ + adds r1, 0x1\n\ + lsls r1, 16\n\ + lsrs r3, r1, 16\n\ + asrs r1, 16\n\ + cmp r1, 0x9F\n\ + ble _08093D02\n\ +_08093D18:\n\ + movs r0, 0x1\n\ + ldr r1, _08093D40 @ =0x02000000\n\ + strb r0, [r1, 0x4]\n\ + mov r2, r8\n\ + movs r3, 0xA\n\ + ldrsh r0, [r2, r3]\n\ + cmp r0, 0\n\ + bgt _08093D2E\n\ + ldrh r0, [r2, 0x8]\n\ + adds r0, 0x1\n\ + strh r0, [r2, 0x8]\n\ +_08093D2E:\n\ + movs r0, 0\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 {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_08093D40: .4byte 0x02000000\n\ +_08093D44: .4byte 0xffff0000\n\ +_08093D48: .4byte gUnknown_03004DE0\n\ +_08093D4C: .4byte 0x0000fffc\n\ + .syntax divided\n"); +} + +bool8 sub_8093D50(struct Task *task) +{ + u8 taskId; + + ewram0.var_4 = FALSE; + SetHBlankCallback(NULL); + sub_8093E04(); + taskId = FindTaskIdByFunc(sub_8093A68); + DestroyTask(taskId); + return FALSE; +} + +void sub_8093D7C(void) +{ + u16 bgVOffset = gUnknown_03004DE0.unk780[REG_VCOUNT & 0xFF]; + + REG_BG0VOFS = bgVOffset; + REG_BG1VOFS = bgVOffset; + REG_BG2VOFS = bgVOffset; +} + +static void sub_8093DAC(void) +{ + if (ewram0.var_3) + sub_8093DEC(); + else + sub_8093DC8(); +} + +static void sub_8093DC8(void) +{ + MenuZeroFillScreen(); + sub_80940E4(); + sub_8093F14(); + sub_8093F80(); + sub_8093FD0(); + sub_8094038(); + sub_8094140(); +} + +static void sub_8093DEC(void) +{ + MenuZeroFillScreen(); + sub_80940E4(); + sub_8093F48(); + sub_8094188(); +} + +static void sub_8093E04(void) +{ + REG_BG0VOFS = -4; + REG_BG1HOFS = 0; + REG_BG1VOFS = -4; + REG_BG2HOFS = 0; + REG_BG2VOFS = -4; +} + +static void sub_8093E28(void) +{ + const u8 *src; + u8 *dst; + u32 size; + + sub_8093EA0(); + LoadPalette(gUnknown_083B5F6C, 0xE0, 32); + src = gMenuTrainerCard_Gfx; + dst = (void *)VRAM; + size = 0x1480; + while (1) + { + DmaCopy16(3, src, dst, 0x1000); + src += 0x1000; + dst += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaCopy16(3, src, dst, size); + break; + } + } + { + const void *src = gBadgesTiles; + void *dst = (void *)(VRAM + 0x1480); + + DmaCopy16(3, src, dst, 0x400); + } +} + +extern const u16 *const gUnknown_083B5EF8[]; + +void sub_8093EA0(void) +{ + LoadPalette(gUnknown_083B5EF8[ewram0.var_2], 0, 48 * 2); + LoadPalette(gBadgesPalette, 48, 16 * 2); + LoadPalette(gUnknown_083B5F4C, 64, 16 * 2); + if (ewram0.var_64.gender != MALE) + LoadPalette(gUnknown_083B5F0C, 16, 16 * 2); +} + +static void sub_8093EF8(void) +{ + LoadTrainerGfx_TrainerCard(ewram0.var_64.gender, 80, (void *)(VRAM + 0x1880)); +} + +static void sub_8093F14(void) +{ + const void *arr[] = {gUnknown_08E8CAC0, gUnknown_08E8D4C0}; + + CpuFastSet(arr[ewram0.var_1], (void *)(VRAM + 0x4800), 0x140); +} + +// I don't really know where to put the data. It's in such a weird order. + +const u8 gUnknown_083B5EF4[] = _(" : "); + +const u16 *const gUnknown_083B5EF8[] = +{ + gMenuTrainerCard0Star_Pal, + gMenuTrainerCard1Star_Pal, + gMenuTrainerCard2Star_Pal, + gMenuTrainerCard3Star_Pal, + gMenuTrainerCard4Star_Pal, +}; + +const u16 gUnknown_083B5F0C[] = INCBIN_U16("graphics/trainer_card/83B5F0C.gbapal"); +const u16 gBadgesPalette[] = INCBIN_U16("graphics/trainer_card/badges.gbapal"); +const u16 gUnknown_083B5F4C[] = INCBIN_U16("graphics/trainer_card/83B5F4C.gbapal"); +const u16 gUnknown_083B5F6C[] = INCBIN_U16("graphics/trainer_card/83B5F6C.gbapal"); +const u16 gUnknown_083B5F8C[][4] = INCBIN_U16("graphics/trainer_card/83B5F8C_map.bin"); + +static void sub_8093F48(void) +{ + CpuFastSet(gUnknown_08E8CFC0, (void *)(VRAM + 0x4800), 320); +} + +static void sub_8093F64(void) +{ + CpuFastSet(gUnknown_08E8D9C0, (void *)(VRAM + 0x5000), 320); +} + +static void sub_8093F80(void) +{ + u16 r5 = 0xC4; + u16 *ptr = (u16 *)(VRAM + 0x4000); + s16 i; + s16 j; + + for (i = 5; i < 13; i++) + { + for (j = 19; j < 27; j++, r5++) + ptr[i * 32 + j] = r5 | 0x5000; + } +} + +static void sub_8093FD0(void) +{ + u16 *ptr = (u16 *)(VRAM + 0x4000); + s16 i = 15; + s16 var = 15 + ewram0.var_2; + + while (i < var) + { + ptr[6 * 32 + i] = 0x408F; + i++; + } + while (i < 0x13) + { + ptr[6 * 32 + i] = 0; + i++; + } +} + +static void sub_8094038(void) +{ + if (ewram0.var_1 == 0) + { + u16 *ptr = (u16 *)(VRAM + 0x4000); + s16 i; + s16 r2; + + for (i = 0, r2 = 4; i < 8; i++, r2 += 3) + { + if (ewram0.var_e[i] != 0) + { + ptr[15 * 32 + r2 + 0] = gUnknown_083B5F8C[i][0] | 0x3000; + ptr[15 * 32 + r2 + 1] = gUnknown_083B5F8C[i][1] | 0x3000; + ptr[16 * 32 + r2 + 0] = gUnknown_083B5F8C[i][2] | 0x3000; + ptr[16 * 32 + r2 + 1] = gUnknown_083B5F8C[i][3] | 0x3000; + } + } + } +} + +static void sub_80940E4(void) +{ + s16 i; + u16 *ptr; + + for (i = 0, ptr = (u16 *)(VRAM + 0x4000); i < 0x400; i++, ptr++) + *ptr = 0; +} + +static void sub_8094110(void) +{ + u16 *ptr = (u16 *)(VRAM + 0x4800); + u16 i; + + for (i = 3; i < 17; i++) + { + ptr[10 * 32 + i] = 1; + ptr[11 * 32 + i] = 1; + } +} + +static void sub_8094140(void) +{ + u8 *buffer; + + BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Values); + + buffer = gStringVar1; + StringCopy(buffer, ewram0.var_64.playerName); + ConvertInternationalString(buffer, ewram0.language); + MenuPrint(buffer, 7, 5); + + TrainerCard_Front_PrintTrainerID(); + TrainerCard_Front_PrintMoney(); + TrainerCard_Front_PrintPokedexCount(); + sub_809429C(); +} + +static void sub_8094188(void) +{ + BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Values); + TrainerCard_Back_PrintName(); + TrainerCard_Back_PrintHallOfFameTime_Label(); + TrainerCard_Back_PrintLinkBattlesLabel(); + TrainerCard_Back_PrintBattleTower_Label(); + TrainerCard_Back_PrintLinkContests_Label(); + TrainerCard_Back_PrintLinkPokeblocks_Label(); + TrainerCard_Back_PrintPokemonTrades_Label(); + + BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Labels); + TrainerCard_Back_PrintHallOfFameTime(); + TrainerCard_Back_PrintLinkBattles(); + TrainerCard_Back_PrintBattleTower(); + TrainerCard_Back_PrintLinkContests(); + TrainerCard_Back_PrintLinkPokeblocks(); + TrainerCard_Back_PrintPokemonTrades(); +} + +static void TrainerCard_Front_PrintTrainerID(void) +{ + u8 buffer[8]; + + ConvertIntToDecimalStringN(buffer, ewram0.var_64.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); + MenuPrint(buffer, 20, 2); +} + +static void TrainerCard_Front_PrintMoney(void) +{ + sub_80B7AEC(ewram0.var_64.money, 16, 8); +} + +static void TrainerCard_Front_PrintPokedexCount(void) +{ + u8 buffer[16]; + + if (ewram0.var_7 == FALSE) + { + sub_8094110(); + } + else + { + ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokedexSeen, STR_CONV_MODE_LEFT_ALIGN, 3); + MenuPrint_RightAligned(buffer, 16, 10); + } +} + +static void TrainerCard_Front_PrintPlayTime(u8 *arg1, s16 colon) +{ + u8 buffer[16]; + u16 playTimeHours; + u16 playTimeMinutes; + + playTimeHours = gSaveBlock2.playTimeHours; + playTimeMinutes = gSaveBlock2.playTimeMinutes; + if (ewram0.var_1 != 0) + { + playTimeHours = ewram0.var_64.playTimeHours; + playTimeMinutes = ewram0.var_64.playTimeMinutes; + } + FormatPlayTime(buffer, playTimeHours, playTimeMinutes, colon); + sub_8072C74(arg1, buffer, 48, 1); +} + +static void sub_809429C(void) +{ + u8 *str; + + if (ewram0.var_1 != 0) + { + str = gStringVar1; + str = StringCopy(str, ewram0.var_20[0]); + str[0] = 00; + str++; + str = StringCopy(str, ewram0.var_20[1]); + MenuPrint(gStringVar1, 2, 14); + + str = gStringVar1; + str = StringCopy(str, ewram0.var_20[2]); + str[0] = 00; + str++; + str = StringCopy(str, ewram0.var_20[3]); + MenuPrint(gStringVar1, 2, 16); + } +} + +static void TrainerCard_Back_PrintName(void) +{ + u8 *str; + + str = gStringVar1; + StringCopy(str, ewram0.var_64.playerName); + ConvertInternationalString(str, ewram0.language); + +#if ENGLISH + StringAppend(str, gOtherText_TrainersTrainerCard); +#elif GERMAN + de_sub_8073174(str, gOtherText_TrainersTrainerCard); +#endif + + MenuPrint_RightAligned(gStringVar1, 28, 2); +} + +static void TrainerCard_Back_PrintHallOfFameTime_Label(void) +{ + if (ewram0.var_8 != 0) + MenuPrint(gOtherText_FirstHOF, 3, 5); +} + +static void TrainerCard_Back_PrintHallOfFameTime(void) +{ + u8 *str; + + if (ewram0.var_8 != 0) + { + str = gStringVar1; + str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameA, STR_CONV_MODE_RIGHT_ALIGN, 3); + str = StringCopy(str, gUnknown_083B5EF4); + str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameB, STR_CONV_MODE_LEADING_ZEROS, 2); + str = StringCopy(str, gUnknown_083B5EF4); + str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameC, STR_CONV_MODE_LEADING_ZEROS, 2); + MenuPrint_RightAligned(gStringVar1, 28, 5); + } +} + +static void TrainerCard_Back_PrintLinkBattlesLabel(void) +{ + if (ewram0.var_9 != 0) + MenuPrint(gOtherText_LinkCableBattles, 3, 7); +} + +static void TrainerCard_Back_PrintLinkBattles(void) +{ + u8 buffer[16]; + + if (ewram0.var_9 != 0) + { + ConvertIntToDecimalString(buffer, ewram0.var_64.linkBattleWins); + MenuPrint_RightAligned(buffer, 22, 7); + + ConvertIntToDecimalString(buffer, ewram0.var_64.linkBattleLosses); + MenuPrint_RightAligned(buffer, 28, 7); + } +} + +static void TrainerCard_Back_PrintBattleTower_Label(void) +{ + if (ewram0.var_a != 0) + MenuPrint(gOtherText_BattleTowerWinRecord, 3, 15); +} + +static void TrainerCard_Back_PrintBattleTower(void) +{ + u8 buffer[16]; + + if (ewram0.var_a != 0) + { + sub_8072C44(buffer, ewram0.var_64.battleTowerWins, 24, 1); + MenuPrint_PixelCoords(buffer, 112, 120, 0); + + sub_8072C44(buffer, ewram0.var_64.battleTowerLosses, 24, 1); + MenuPrint_PixelCoords(buffer, 149, 120, 0); + } +} + +static void TrainerCard_Back_PrintLinkContests_Label(void) +{ + if (ewram0.var_b != 0) + MenuPrint(gOtherText_ContestRecord, 3, 13); +} + +static void TrainerCard_Back_PrintLinkContests(void) +{ + u8 buffer[8]; + + if (ewram0.var_b != 0) + { + ConvertIntToDecimalStringN(buffer, ewram0.var_64.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 3); + MenuPrint_RightAligned(buffer, 28, 13); + } +} + +static void TrainerCard_Back_PrintLinkPokeblocks_Label(void) +{ + if (ewram0.var_c != 0) + MenuPrint(gOtherText_MixingRecord, 3, 11); +} + +static void TrainerCard_Back_PrintLinkPokeblocks(void) +{ + u8 buffer[8]; + + if (ewram0.var_c != 0) + { + ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokeblocksWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5); + MenuPrint_RightAligned(buffer, 28, 11); + } +} + +static void TrainerCard_Back_PrintPokemonTrades_Label(void) +{ + if (ewram0.var_d != 0) + MenuPrint(gOtherText_TradeRecord, 3, 9); +} + +static void TrainerCard_Back_PrintPokemonTrades(void) +{ + u8 buffer[8]; + + if (ewram0.var_d != 0) + { + ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5); + MenuPrint_RightAligned(buffer, 28, 9); + } +} + +void unref_sub_8094588(u16 left, u16 top) +{ + const u8 *text = gOtherText_Boy; + + if (gSaveBlock2.playerGender == FEMALE) + text = gOtherText_Girl; + MenuPrint(text, left, top); +} diff --git a/src/engine/trig.c b/src/engine/trig.c new file mode 100644 index 000000000..e16a69e63 --- /dev/null +++ b/src/engine/trig.c @@ -0,0 +1,549 @@ +#include "global.h" +#include "trig.h" + +// Converts a number to Q8.8 fixed-point format +#define Q_8_8(n) ((s16)((n) * 256)) + +// Converts a number to Q4.12 fixed-point format +#define Q_4_12(n) ((s16)((n) * 4096)) + +// Values of sin(x*(π/128)) as Q8.8 fixed-point numbers from x = 0 to x = 319 +const s16 gSineTable[] = +{ + Q_8_8(0), // sin(0*(π/128)) + Q_8_8(0.0234375), // sin(1*(π/128)) + Q_8_8(0.046875), // sin(2*(π/128)) + Q_8_8(0.0703125), // sin(3*(π/128)) + Q_8_8(0.09765625), // sin(4*(π/128)) + Q_8_8(0.12109375), // sin(5*(π/128)) + Q_8_8(0.14453125), // sin(6*(π/128)) + Q_8_8(0.16796875), // sin(7*(π/128)) + Q_8_8(0.19140625), // sin(8*(π/128)) + Q_8_8(0.21875), // sin(9*(π/128)) + Q_8_8(0.2421875), // sin(10*(π/128)) + Q_8_8(0.265625), // sin(11*(π/128)) + Q_8_8(0.2890625), // sin(12*(π/128)) + Q_8_8(0.3125), // sin(13*(π/128)) + Q_8_8(0.3359375), // sin(14*(π/128)) + Q_8_8(0.359375), // sin(15*(π/128)) + Q_8_8(0.37890625), // sin(16*(π/128)) + Q_8_8(0.40234375), // sin(17*(π/128)) + Q_8_8(0.42578125), // sin(18*(π/128)) + Q_8_8(0.44921875), // sin(19*(π/128)) + Q_8_8(0.46875), // sin(20*(π/128)) + Q_8_8(0.4921875), // sin(21*(π/128)) + Q_8_8(0.51171875), // sin(22*(π/128)) + Q_8_8(0.53125), // sin(23*(π/128)) + Q_8_8(0.5546875), // sin(24*(π/128)) + Q_8_8(0.57421875), // sin(25*(π/128)) + Q_8_8(0.59375), // sin(26*(π/128)) + Q_8_8(0.61328125), // sin(27*(π/128)) + Q_8_8(0.6328125), // sin(28*(π/128)) + Q_8_8(0.65234375), // sin(29*(π/128)) + Q_8_8(0.66796875), // sin(30*(π/128)) + Q_8_8(0.6875), // sin(31*(π/128)) + Q_8_8(0.70703125), // sin(32*(π/128)) + Q_8_8(0.72265625), // sin(33*(π/128)) + Q_8_8(0.73828125), // sin(34*(π/128)) + Q_8_8(0.75390625), // sin(35*(π/128)) + Q_8_8(0.76953125), // sin(36*(π/128)) + Q_8_8(0.78515625), // sin(37*(π/128)) + Q_8_8(0.80078125), // sin(38*(π/128)) + Q_8_8(0.81640625), // sin(39*(π/128)) + Q_8_8(0.828125), // sin(40*(π/128)) + Q_8_8(0.84375), // sin(41*(π/128)) + Q_8_8(0.85546875), // sin(42*(π/128)) + Q_8_8(0.8671875), // sin(43*(π/128)) + Q_8_8(0.87890625), // sin(44*(π/128)) + Q_8_8(0.890625), // sin(45*(π/128)) + Q_8_8(0.90234375), // sin(46*(π/128)) + Q_8_8(0.9140625), // sin(47*(π/128)) + Q_8_8(0.921875), // sin(48*(π/128)) + Q_8_8(0.9296875), // sin(49*(π/128)) + Q_8_8(0.94140625), // sin(50*(π/128)) + Q_8_8(0.94921875), // sin(51*(π/128)) + Q_8_8(0.953125), // sin(52*(π/128)) + Q_8_8(0.9609375), // sin(53*(π/128)) + Q_8_8(0.96875), // sin(54*(π/128)) + Q_8_8(0.97265625), // sin(55*(π/128)) + Q_8_8(0.98046875), // sin(56*(π/128)) + Q_8_8(0.984375), // sin(57*(π/128)) + Q_8_8(0.98828125), // sin(58*(π/128)) + Q_8_8(0.9921875), // sin(59*(π/128)) + Q_8_8(0.9921875), // sin(60*(π/128)) + Q_8_8(0.99609375), // sin(61*(π/128)) + Q_8_8(0.99609375), // sin(62*(π/128)) + Q_8_8(0.99609375), // sin(63*(π/128)) + Q_8_8(1), // sin(64*(π/128)) + Q_8_8(0.99609375), // sin(65*(π/128)) + Q_8_8(0.99609375), // sin(66*(π/128)) + Q_8_8(0.99609375), // sin(67*(π/128)) + Q_8_8(0.9921875), // sin(68*(π/128)) + Q_8_8(0.9921875), // sin(69*(π/128)) + Q_8_8(0.98828125), // sin(70*(π/128)) + Q_8_8(0.984375), // sin(71*(π/128)) + Q_8_8(0.98046875), // sin(72*(π/128)) + Q_8_8(0.97265625), // sin(73*(π/128)) + Q_8_8(0.96875), // sin(74*(π/128)) + Q_8_8(0.9609375), // sin(75*(π/128)) + Q_8_8(0.953125), // sin(76*(π/128)) + Q_8_8(0.94921875), // sin(77*(π/128)) + Q_8_8(0.94140625), // sin(78*(π/128)) + Q_8_8(0.9296875), // sin(79*(π/128)) + Q_8_8(0.921875), // sin(80*(π/128)) + Q_8_8(0.9140625), // sin(81*(π/128)) + Q_8_8(0.90234375), // sin(82*(π/128)) + Q_8_8(0.890625), // sin(83*(π/128)) + Q_8_8(0.87890625), // sin(84*(π/128)) + Q_8_8(0.8671875), // sin(85*(π/128)) + Q_8_8(0.85546875), // sin(86*(π/128)) + Q_8_8(0.84375), // sin(87*(π/128)) + Q_8_8(0.828125), // sin(88*(π/128)) + Q_8_8(0.81640625), // sin(89*(π/128)) + Q_8_8(0.80078125), // sin(90*(π/128)) + Q_8_8(0.78515625), // sin(91*(π/128)) + Q_8_8(0.76953125), // sin(92*(π/128)) + Q_8_8(0.75390625), // sin(93*(π/128)) + Q_8_8(0.73828125), // sin(94*(π/128)) + Q_8_8(0.72265625), // sin(95*(π/128)) + Q_8_8(0.70703125), // sin(96*(π/128)) + Q_8_8(0.6875), // sin(97*(π/128)) + Q_8_8(0.66796875), // sin(98*(π/128)) + Q_8_8(0.65234375), // sin(99*(π/128)) + Q_8_8(0.6328125), // sin(100*(π/128)) + Q_8_8(0.61328125), // sin(101*(π/128)) + Q_8_8(0.59375), // sin(102*(π/128)) + Q_8_8(0.57421875), // sin(103*(π/128)) + Q_8_8(0.5546875), // sin(104*(π/128)) + Q_8_8(0.53125), // sin(105*(π/128)) + Q_8_8(0.51171875), // sin(106*(π/128)) + Q_8_8(0.4921875), // sin(107*(π/128)) + Q_8_8(0.46875), // sin(108*(π/128)) + Q_8_8(0.44921875), // sin(109*(π/128)) + Q_8_8(0.42578125), // sin(110*(π/128)) + Q_8_8(0.40234375), // sin(111*(π/128)) + Q_8_8(0.37890625), // sin(112*(π/128)) + Q_8_8(0.359375), // sin(113*(π/128)) + Q_8_8(0.3359375), // sin(114*(π/128)) + Q_8_8(0.3125), // sin(115*(π/128)) + Q_8_8(0.2890625), // sin(116*(π/128)) + Q_8_8(0.265625), // sin(117*(π/128)) + Q_8_8(0.2421875), // sin(118*(π/128)) + Q_8_8(0.21875), // sin(119*(π/128)) + Q_8_8(0.19140625), // sin(120*(π/128)) + Q_8_8(0.16796875), // sin(121*(π/128)) + Q_8_8(0.14453125), // sin(122*(π/128)) + Q_8_8(0.12109375), // sin(123*(π/128)) + Q_8_8(0.09765625), // sin(124*(π/128)) + Q_8_8(0.0703125), // sin(125*(π/128)) + Q_8_8(0.046875), // sin(126*(π/128)) + Q_8_8(0.0234375), // sin(127*(π/128)) + Q_8_8(0), // sin(128*(π/128)) + Q_8_8(-0.0234375), // sin(129*(π/128)) + Q_8_8(-0.046875), // sin(130*(π/128)) + Q_8_8(-0.0703125), // sin(131*(π/128)) + Q_8_8(-0.09765625), // sin(132*(π/128)) + Q_8_8(-0.12109375), // sin(133*(π/128)) + Q_8_8(-0.14453125), // sin(134*(π/128)) + Q_8_8(-0.16796875), // sin(135*(π/128)) + Q_8_8(-0.19140625), // sin(136*(π/128)) + Q_8_8(-0.21875), // sin(137*(π/128)) + Q_8_8(-0.2421875), // sin(138*(π/128)) + Q_8_8(-0.265625), // sin(139*(π/128)) + Q_8_8(-0.2890625), // sin(140*(π/128)) + Q_8_8(-0.3125), // sin(141*(π/128)) + Q_8_8(-0.3359375), // sin(142*(π/128)) + Q_8_8(-0.359375), // sin(143*(π/128)) + Q_8_8(-0.37890625), // sin(144*(π/128)) + Q_8_8(-0.40234375), // sin(145*(π/128)) + Q_8_8(-0.42578125), // sin(146*(π/128)) + Q_8_8(-0.44921875), // sin(147*(π/128)) + Q_8_8(-0.46875), // sin(148*(π/128)) + Q_8_8(-0.4921875), // sin(149*(π/128)) + Q_8_8(-0.51171875), // sin(150*(π/128)) + Q_8_8(-0.53125), // sin(151*(π/128)) + Q_8_8(-0.5546875), // sin(152*(π/128)) + Q_8_8(-0.57421875), // sin(153*(π/128)) + Q_8_8(-0.59375), // sin(154*(π/128)) + Q_8_8(-0.61328125), // sin(155*(π/128)) + Q_8_8(-0.6328125), // sin(156*(π/128)) + Q_8_8(-0.65234375), // sin(157*(π/128)) + Q_8_8(-0.66796875), // sin(158*(π/128)) + Q_8_8(-0.6875), // sin(159*(π/128)) + Q_8_8(-0.70703125), // sin(160*(π/128)) + Q_8_8(-0.72265625), // sin(161*(π/128)) + Q_8_8(-0.73828125), // sin(162*(π/128)) + Q_8_8(-0.75390625), // sin(163*(π/128)) + Q_8_8(-0.76953125), // sin(164*(π/128)) + Q_8_8(-0.78515625), // sin(165*(π/128)) + Q_8_8(-0.80078125), // sin(166*(π/128)) + Q_8_8(-0.81640625), // sin(167*(π/128)) + Q_8_8(-0.828125), // sin(168*(π/128)) + Q_8_8(-0.84375), // sin(169*(π/128)) + Q_8_8(-0.85546875), // sin(170*(π/128)) + Q_8_8(-0.8671875), // sin(171*(π/128)) + Q_8_8(-0.87890625), // sin(172*(π/128)) + Q_8_8(-0.890625), // sin(173*(π/128)) + Q_8_8(-0.90234375), // sin(174*(π/128)) + Q_8_8(-0.9140625), // sin(175*(π/128)) + Q_8_8(-0.921875), // sin(176*(π/128)) + Q_8_8(-0.9296875), // sin(177*(π/128)) + Q_8_8(-0.94140625), // sin(178*(π/128)) + Q_8_8(-0.94921875), // sin(179*(π/128)) + Q_8_8(-0.953125), // sin(180*(π/128)) + Q_8_8(-0.9609375), // sin(181*(π/128)) + Q_8_8(-0.96875), // sin(182*(π/128)) + Q_8_8(-0.97265625), // sin(183*(π/128)) + Q_8_8(-0.98046875), // sin(184*(π/128)) + Q_8_8(-0.984375), // sin(185*(π/128)) + Q_8_8(-0.98828125), // sin(186*(π/128)) + Q_8_8(-0.9921875), // sin(187*(π/128)) + Q_8_8(-0.9921875), // sin(188*(π/128)) + Q_8_8(-0.99609375), // sin(189*(π/128)) + Q_8_8(-0.99609375), // sin(190*(π/128)) + Q_8_8(-0.99609375), // sin(191*(π/128)) + Q_8_8(-1), // sin(192*(π/128)) + Q_8_8(-0.99609375), // sin(193*(π/128)) + Q_8_8(-0.99609375), // sin(194*(π/128)) + Q_8_8(-0.99609375), // sin(195*(π/128)) + Q_8_8(-0.9921875), // sin(196*(π/128)) + Q_8_8(-0.9921875), // sin(197*(π/128)) + Q_8_8(-0.98828125), // sin(198*(π/128)) + Q_8_8(-0.984375), // sin(199*(π/128)) + Q_8_8(-0.98046875), // sin(200*(π/128)) + Q_8_8(-0.97265625), // sin(201*(π/128)) + Q_8_8(-0.96875), // sin(202*(π/128)) + Q_8_8(-0.9609375), // sin(203*(π/128)) + Q_8_8(-0.953125), // sin(204*(π/128)) + Q_8_8(-0.94921875), // sin(205*(π/128)) + Q_8_8(-0.94140625), // sin(206*(π/128)) + Q_8_8(-0.9296875), // sin(207*(π/128)) + Q_8_8(-0.921875), // sin(208*(π/128)) + Q_8_8(-0.9140625), // sin(209*(π/128)) + Q_8_8(-0.90234375), // sin(210*(π/128)) + Q_8_8(-0.890625), // sin(211*(π/128)) + Q_8_8(-0.87890625), // sin(212*(π/128)) + Q_8_8(-0.8671875), // sin(213*(π/128)) + Q_8_8(-0.85546875), // sin(214*(π/128)) + Q_8_8(-0.84375), // sin(215*(π/128)) + Q_8_8(-0.828125), // sin(216*(π/128)) + Q_8_8(-0.81640625), // sin(217*(π/128)) + Q_8_8(-0.80078125), // sin(218*(π/128)) + Q_8_8(-0.78515625), // sin(219*(π/128)) + Q_8_8(-0.76953125), // sin(220*(π/128)) + Q_8_8(-0.75390625), // sin(221*(π/128)) + Q_8_8(-0.73828125), // sin(222*(π/128)) + Q_8_8(-0.72265625), // sin(223*(π/128)) + Q_8_8(-0.70703125), // sin(224*(π/128)) + Q_8_8(-0.6875), // sin(225*(π/128)) + Q_8_8(-0.66796875), // sin(226*(π/128)) + Q_8_8(-0.65234375), // sin(227*(π/128)) + Q_8_8(-0.6328125), // sin(228*(π/128)) + Q_8_8(-0.61328125), // sin(229*(π/128)) + Q_8_8(-0.59375), // sin(230*(π/128)) + Q_8_8(-0.57421875), // sin(231*(π/128)) + Q_8_8(-0.5546875), // sin(232*(π/128)) + Q_8_8(-0.53125), // sin(233*(π/128)) + Q_8_8(-0.51171875), // sin(234*(π/128)) + Q_8_8(-0.4921875), // sin(235*(π/128)) + Q_8_8(-0.46875), // sin(236*(π/128)) + Q_8_8(-0.44921875), // sin(237*(π/128)) + Q_8_8(-0.42578125), // sin(238*(π/128)) + Q_8_8(-0.40234375), // sin(239*(π/128)) + Q_8_8(-0.37890625), // sin(240*(π/128)) + Q_8_8(-0.359375), // sin(241*(π/128)) + Q_8_8(-0.3359375), // sin(242*(π/128)) + Q_8_8(-0.3125), // sin(243*(π/128)) + Q_8_8(-0.2890625), // sin(244*(π/128)) + Q_8_8(-0.265625), // sin(245*(π/128)) + Q_8_8(-0.2421875), // sin(246*(π/128)) + Q_8_8(-0.21875), // sin(247*(π/128)) + Q_8_8(-0.19140625), // sin(248*(π/128)) + Q_8_8(-0.16796875), // sin(249*(π/128)) + Q_8_8(-0.14453125), // sin(250*(π/128)) + Q_8_8(-0.12109375), // sin(251*(π/128)) + Q_8_8(-0.09765625), // sin(252*(π/128)) + Q_8_8(-0.0703125), // sin(253*(π/128)) + Q_8_8(-0.046875), // sin(254*(π/128)) + Q_8_8(-0.0234375), // sin(255*(π/128)) + Q_8_8(0), // sin(256*(π/128)) + Q_8_8(0.0234375), // sin(257*(π/128)) + Q_8_8(0.046875), // sin(258*(π/128)) + Q_8_8(0.0703125), // sin(259*(π/128)) + Q_8_8(0.09765625), // sin(260*(π/128)) + Q_8_8(0.12109375), // sin(261*(π/128)) + Q_8_8(0.14453125), // sin(262*(π/128)) + Q_8_8(0.16796875), // sin(263*(π/128)) + Q_8_8(0.19140625), // sin(264*(π/128)) + Q_8_8(0.21875), // sin(265*(π/128)) + Q_8_8(0.2421875), // sin(266*(π/128)) + Q_8_8(0.265625), // sin(267*(π/128)) + Q_8_8(0.2890625), // sin(268*(π/128)) + Q_8_8(0.3125), // sin(269*(π/128)) + Q_8_8(0.3359375), // sin(270*(π/128)) + Q_8_8(0.359375), // sin(271*(π/128)) + Q_8_8(0.37890625), // sin(272*(π/128)) + Q_8_8(0.40234375), // sin(273*(π/128)) + Q_8_8(0.42578125), // sin(274*(π/128)) + Q_8_8(0.44921875), // sin(275*(π/128)) + Q_8_8(0.46875), // sin(276*(π/128)) + Q_8_8(0.4921875), // sin(277*(π/128)) + Q_8_8(0.51171875), // sin(278*(π/128)) + Q_8_8(0.53125), // sin(279*(π/128)) + Q_8_8(0.5546875), // sin(280*(π/128)) + Q_8_8(0.57421875), // sin(281*(π/128)) + Q_8_8(0.59375), // sin(282*(π/128)) + Q_8_8(0.61328125), // sin(283*(π/128)) + Q_8_8(0.6328125), // sin(284*(π/128)) + Q_8_8(0.65234375), // sin(285*(π/128)) + Q_8_8(0.66796875), // sin(286*(π/128)) + Q_8_8(0.6875), // sin(287*(π/128)) + Q_8_8(0.70703125), // sin(288*(π/128)) + Q_8_8(0.72265625), // sin(289*(π/128)) + Q_8_8(0.73828125), // sin(290*(π/128)) + Q_8_8(0.75390625), // sin(291*(π/128)) + Q_8_8(0.76953125), // sin(292*(π/128)) + Q_8_8(0.78515625), // sin(293*(π/128)) + Q_8_8(0.80078125), // sin(294*(π/128)) + Q_8_8(0.81640625), // sin(295*(π/128)) + Q_8_8(0.828125), // sin(296*(π/128)) + Q_8_8(0.84375), // sin(297*(π/128)) + Q_8_8(0.85546875), // sin(298*(π/128)) + Q_8_8(0.8671875), // sin(299*(π/128)) + Q_8_8(0.87890625), // sin(300*(π/128)) + Q_8_8(0.890625), // sin(301*(π/128)) + Q_8_8(0.90234375), // sin(302*(π/128)) + Q_8_8(0.9140625), // sin(303*(π/128)) + Q_8_8(0.921875), // sin(304*(π/128)) + Q_8_8(0.9296875), // sin(305*(π/128)) + Q_8_8(0.94140625), // sin(306*(π/128)) + Q_8_8(0.94921875), // sin(307*(π/128)) + Q_8_8(0.953125), // sin(308*(π/128)) + Q_8_8(0.9609375), // sin(309*(π/128)) + Q_8_8(0.96875), // sin(310*(π/128)) + Q_8_8(0.97265625), // sin(311*(π/128)) + Q_8_8(0.98046875), // sin(312*(π/128)) + Q_8_8(0.984375), // sin(313*(π/128)) + Q_8_8(0.98828125), // sin(314*(π/128)) + Q_8_8(0.9921875), // sin(315*(π/128)) + Q_8_8(0.9921875), // sin(316*(π/128)) + Q_8_8(0.99609375), // sin(317*(π/128)) + Q_8_8(0.99609375), // sin(318*(π/128)) + Q_8_8(0.99609375), // sin(319*(π/128)) +}; + +// values of sin(x) as Q4.12 fixed-point numbers from x = 0° to x = 179° +const s16 gSineDegreeTable[] = +{ + Q_4_12(0), // sin(0°) + Q_4_12(0.017333984375), // sin(1°) + Q_4_12(0.034912109375), // sin(2°) + Q_4_12(0.05224609375), // sin(3°) + Q_4_12(0.06982421875), // sin(4°) + Q_4_12(0.087158203125), // sin(5°) + Q_4_12(0.1044921875), // sin(6°) + Q_4_12(0.121826171875), // sin(7°) + Q_4_12(0.13916015625), // sin(8°) + Q_4_12(0.156494140625), // sin(9°) + Q_4_12(0.173583984375), // sin(10°) + Q_4_12(0.19091796875), // sin(11°) + Q_4_12(0.2080078125), // sin(12°) + Q_4_12(0.224853515625), // sin(13°) + Q_4_12(0.241943359375), // sin(14°) + Q_4_12(0.2587890625), // sin(15°) + Q_4_12(0.275634765625), // sin(16°) + Q_4_12(0.29248046875), // sin(17°) + Q_4_12(0.30908203125), // sin(18°) + Q_4_12(0.32568359375), // sin(19°) + Q_4_12(0.342041015625), // sin(20°) + Q_4_12(0.3583984375), // sin(21°) + Q_4_12(0.37451171875), // sin(22°) + Q_4_12(0.390625), // sin(23°) + Q_4_12(0.40673828125), // sin(24°) + Q_4_12(0.422607421875), // sin(25°) + Q_4_12(0.4384765625), // sin(26°) + Q_4_12(0.4541015625), // sin(27°) + Q_4_12(0.469482421875), // sin(28°) + Q_4_12(0.48486328125), // sin(29°) + Q_4_12(0.5), // sin(30°) + Q_4_12(0.51513671875), // sin(31°) + Q_4_12(0.530029296875), // sin(32°) + Q_4_12(0.544677734375), // sin(33°) + Q_4_12(0.55908203125), // sin(34°) + Q_4_12(0.573486328125), // sin(35°) + Q_4_12(0.587890625), // sin(36°) + Q_4_12(0.601806640625), // sin(37°) + Q_4_12(0.61572265625), // sin(38°) + Q_4_12(0.62939453125), // sin(39°) + Q_4_12(0.642822265625), // sin(40°) + Q_4_12(0.656005859375), // sin(41°) + Q_4_12(0.669189453125), // sin(42°) + Q_4_12(0.681884765625), // sin(43°) + Q_4_12(0.694580078125), // sin(44°) + Q_4_12(0.70703125), // sin(45°) + Q_4_12(0.71923828125), // sin(46°) + Q_4_12(0.7314453125), // sin(47°) + Q_4_12(0.7431640625), // sin(48°) + Q_4_12(0.754638671875), // sin(49°) + Q_4_12(0.76611328125), // sin(50°) + Q_4_12(0.777099609375), // sin(51°) + Q_4_12(0.7880859375), // sin(52°) + Q_4_12(0.798583984375), // sin(53°) + Q_4_12(0.80908203125), // sin(54°) + Q_4_12(0.819091796875), // sin(55°) + Q_4_12(0.8291015625), // sin(56°) + Q_4_12(0.838623046875), // sin(57°) + Q_4_12(0.84814453125), // sin(58°) + Q_4_12(0.857177734375), // sin(59°) + Q_4_12(0.865966796875), // sin(60°) + Q_4_12(0.87451171875), // sin(61°) + Q_4_12(0.883056640625), // sin(62°) + Q_4_12(0.89111328125), // sin(63°) + Q_4_12(0.898681640625), // sin(64°) + Q_4_12(0.90625), // sin(65°) + Q_4_12(0.91357421875), // sin(66°) + Q_4_12(0.92041015625), // sin(67°) + Q_4_12(0.92724609375), // sin(68°) + Q_4_12(0.93359375), // sin(69°) + Q_4_12(0.939697265625), // sin(70°) + Q_4_12(0.945556640625), // sin(71°) + Q_4_12(0.951171875), // sin(72°) + Q_4_12(0.956298828125), // sin(73°) + Q_4_12(0.961181640625), // sin(74°) + Q_4_12(0.9658203125), // sin(75°) + Q_4_12(0.97021484375), // sin(76°) + Q_4_12(0.974365234375), // sin(77°) + Q_4_12(0.97802734375), // sin(78°) + Q_4_12(0.981689453125), // sin(79°) + Q_4_12(0.98486328125), // sin(80°) + Q_4_12(0.98779296875), // sin(81°) + Q_4_12(0.990234375), // sin(82°) + Q_4_12(0.992431640625), // sin(83°) + Q_4_12(0.994384765625), // sin(84°) + Q_4_12(0.99609375), // sin(85°) + Q_4_12(0.99755859375), // sin(86°) + Q_4_12(0.99853515625), // sin(87°) + Q_4_12(0.999267578125), // sin(88°) + Q_4_12(0.999755859375), // sin(89°) + Q_4_12(1), // sin(90°) + Q_4_12(0.999755859375), // sin(91°) + Q_4_12(0.999267578125), // sin(92°) + Q_4_12(0.99853515625), // sin(93°) + Q_4_12(0.99755859375), // sin(94°) + Q_4_12(0.99609375), // sin(95°) + Q_4_12(0.994384765625), // sin(96°) + Q_4_12(0.992431640625), // sin(97°) + Q_4_12(0.990234375), // sin(98°) + Q_4_12(0.98779296875), // sin(99°) + Q_4_12(0.98486328125), // sin(100°) + Q_4_12(0.981689453125), // sin(101°) + Q_4_12(0.97802734375), // sin(102°) + Q_4_12(0.974365234375), // sin(103°) + Q_4_12(0.97021484375), // sin(104°) + Q_4_12(0.9658203125), // sin(105°) + Q_4_12(0.961181640625), // sin(106°) + Q_4_12(0.956298828125), // sin(107°) + Q_4_12(0.951171875), // sin(108°) + Q_4_12(0.945556640625), // sin(109°) + Q_4_12(0.939697265625), // sin(110°) + Q_4_12(0.93359375), // sin(111°) + Q_4_12(0.92724609375), // sin(112°) + Q_4_12(0.92041015625), // sin(113°) + Q_4_12(0.91357421875), // sin(114°) + Q_4_12(0.90625), // sin(115°) + Q_4_12(0.898681640625), // sin(116°) + Q_4_12(0.89111328125), // sin(117°) + Q_4_12(0.883056640625), // sin(118°) + Q_4_12(0.87451171875), // sin(119°) + Q_4_12(0.865966796875), // sin(120°) + Q_4_12(0.857177734375), // sin(121°) + Q_4_12(0.84814453125), // sin(122°) + Q_4_12(0.838623046875), // sin(123°) + Q_4_12(0.8291015625), // sin(124°) + Q_4_12(0.819091796875), // sin(125°) + Q_4_12(0.80908203125), // sin(126°) + Q_4_12(0.798583984375), // sin(127°) + Q_4_12(0.7880859375), // sin(128°) + Q_4_12(0.777099609375), // sin(129°) + Q_4_12(0.76611328125), // sin(130°) + Q_4_12(0.754638671875), // sin(131°) + Q_4_12(0.7431640625), // sin(132°) + Q_4_12(0.7314453125), // sin(133°) + Q_4_12(0.71923828125), // sin(134°) + Q_4_12(0.70703125), // sin(135°) + Q_4_12(0.694580078125), // sin(136°) + Q_4_12(0.681884765625), // sin(137°) + Q_4_12(0.669189453125), // sin(138°) + Q_4_12(0.656005859375), // sin(139°) + Q_4_12(0.642822265625), // sin(140°) + Q_4_12(0.62939453125), // sin(141°) + Q_4_12(0.61572265625), // sin(142°) + Q_4_12(0.601806640625), // sin(143°) + Q_4_12(0.587890625), // sin(144°) + Q_4_12(0.573486328125), // sin(145°) + Q_4_12(0.55908203125), // sin(146°) + Q_4_12(0.544677734375), // sin(147°) + Q_4_12(0.530029296875), // sin(148°) + Q_4_12(0.51513671875), // sin(149°) + Q_4_12(0.5), // sin(150°) + Q_4_12(0.48486328125), // sin(151°) + Q_4_12(0.469482421875), // sin(152°) + Q_4_12(0.4541015625), // sin(153°) + Q_4_12(0.4384765625), // sin(154°) + Q_4_12(0.422607421875), // sin(155°) + Q_4_12(0.40673828125), // sin(156°) + Q_4_12(0.390625), // sin(157°) + Q_4_12(0.37451171875), // sin(158°) + Q_4_12(0.3583984375), // sin(159°) + Q_4_12(0.342041015625), // sin(160°) + Q_4_12(0.32568359375), // sin(161°) + Q_4_12(0.30908203125), // sin(162°) + Q_4_12(0.29248046875), // sin(163°) + Q_4_12(0.275634765625), // sin(164°) + Q_4_12(0.2587890625), // sin(165°) + Q_4_12(0.241943359375), // sin(166°) + Q_4_12(0.224853515625), // sin(167°) + Q_4_12(0.2080078125), // sin(168°) + Q_4_12(0.19091796875), // sin(169°) + Q_4_12(0.173583984375), // sin(170°) + Q_4_12(0.156494140625), // sin(171°) + Q_4_12(0.13916015625), // sin(172°) + Q_4_12(0.121826171875), // sin(173°) + Q_4_12(0.1044921875), // sin(174°) + Q_4_12(0.087158203125), // sin(175°) + Q_4_12(0.06982421875), // sin(176°) + Q_4_12(0.05224609375), // sin(177°) + Q_4_12(0.034912109375), // sin(178°) + Q_4_12(0.017333984375), // sin(179°) +}; + +// amplitude * sin(index*(π/128)) +s16 Sin(s16 index, s16 amplitude) +{ + return (amplitude * gSineTable[index]) >> 8; +} + +// amplitude * cos(index*(π/128)) +s16 Cos(s16 index, s16 amplitude) +{ + return (amplitude * gSineTable[index + 64]) >> 8; +} + +// angle in degrees +s16 Sin2(u16 angle) +{ + s32 angleMod = angle % 180; + s32 negate = ((angle / 180) & 1); + s16 value = gSineDegreeTable[angleMod]; + + if (negate) + return -value; + else + return value; +} + +// angle in degrees +s16 Cos2(u16 angle) +{ + return Sin2(angle + 90); +} diff --git a/src/engine/util.c b/src/engine/util.c new file mode 100644 index 000000000..582b9f806 --- /dev/null +++ b/src/engine/util.c @@ -0,0 +1,525 @@ +#include "global.h" +#include "util.h" + +const u32 gBitTable[] = +{ + 1 << 0, + 1 << 1, + 1 << 2, + 1 << 3, + 1 << 4, + 1 << 5, + 1 << 6, + 1 << 7, + 1 << 8, + 1 << 9, + 1 << 10, + 1 << 11, + 1 << 12, + 1 << 13, + 1 << 14, + 1 << 15, + 1 << 16, + 1 << 17, + 1 << 18, + 1 << 19, + 1 << 20, + 1 << 21, + 1 << 22, + 1 << 23, + 1 << 24, + 1 << 25, + 1 << 26, + 1 << 27, + 1 << 28, + 1 << 29, + 1 << 30, + 1 << 31, +}; + +static const struct SpriteTemplate gInvisibleSpriteTemplate = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const u8 gSpriteDimensions[3][4][2] = +{ + // square + { + {1, 1}, + {2, 2}, + {4, 4}, + {8, 8}, + }, + + // horizontal rectangle + { + {2, 1}, + {4, 1}, + {4, 2}, + {8, 4}, + }, + + // vertical rectangle + { + {1, 2}, + {1, 4}, + {2, 4}, + {4, 8}, + }, +}; + +static const u16 gCrc16Table[] = +{ + 0x0000, 0x1189, 0x2312, 0x329B, 0x4624, 0x57AD, 0x6536, 0x74BF, + 0x8C48, 0x9DC1, 0xAF5A, 0xBED3, 0xCA6C, 0xDBE5, 0xE97E, 0xF8F7, + 0x1081, 0x0108, 0x3393, 0x221A, 0x56A5, 0x472C, 0x75B7, 0x643E, + 0x9CC9, 0x8D40, 0xBFDB, 0xAE52, 0xDAED, 0xCB64, 0xF9FF, 0xE876, + 0x2102, 0x308B, 0x0210, 0x1399, 0x6726, 0x76AF, 0x4434, 0x55BD, + 0xAD4A, 0xBCC3, 0x8E58, 0x9FD1, 0xEB6E, 0xFAE7, 0xC87C, 0xD9F5, + 0x3183, 0x200A, 0x1291, 0x0318, 0x77A7, 0x662E, 0x54B5, 0x453C, + 0xBDCB, 0xAC42, 0x9ED9, 0x8F50, 0xFBEF, 0xEA66, 0xD8FD, 0xC974, + 0x4204, 0x538D, 0x6116, 0x709F, 0x0420, 0x15A9, 0x2732, 0x36BB, + 0xCE4C, 0xDFC5, 0xED5E, 0xFCD7, 0x8868, 0x99E1, 0xAB7A, 0xBAF3, + 0x5285, 0x430C, 0x7197, 0x601E, 0x14A1, 0x0528, 0x37B3, 0x263A, + 0xDECD, 0xCF44, 0xFDDF, 0xEC56, 0x98E9, 0x8960, 0xBBFB, 0xAA72, + 0x6306, 0x728F, 0x4014, 0x519D, 0x2522, 0x34AB, 0x0630, 0x17B9, + 0xEF4E, 0xFEC7, 0xCC5C, 0xDDD5, 0xA96A, 0xB8E3, 0x8A78, 0x9BF1, + 0x7387, 0x620E, 0x5095, 0x411C, 0x35A3, 0x242A, 0x16B1, 0x0738, + 0xFFCF, 0xEE46, 0xDCDD, 0xCD54, 0xB9EB, 0xA862, 0x9AF9, 0x8B70, + 0x8408, 0x9581, 0xA71A, 0xB693, 0xC22C, 0xD3A5, 0xE13E, 0xF0B7, + 0x0840, 0x19C9, 0x2B52, 0x3ADB, 0x4E64, 0x5FED, 0x6D76, 0x7CFF, + 0x9489, 0x8500, 0xB79B, 0xA612, 0xD2AD, 0xC324, 0xF1BF, 0xE036, + 0x18C1, 0x0948, 0x3BD3, 0x2A5A, 0x5EE5, 0x4F6C, 0x7DF7, 0x6C7E, + 0xA50A, 0xB483, 0x8618, 0x9791, 0xE32E, 0xF2A7, 0xC03C, 0xD1B5, + 0x2942, 0x38CB, 0x0A50, 0x1BD9, 0x6F66, 0x7EEF, 0x4C74, 0x5DFD, + 0xB58B, 0xA402, 0x9699, 0x8710, 0xF3AF, 0xE226, 0xD0BD, 0xC134, + 0x39C3, 0x284A, 0x1AD1, 0x0B58, 0x7FE7, 0x6E6E, 0x5CF5, 0x4D7C, + 0xC60C, 0xD785, 0xE51E, 0xF497, 0x8028, 0x91A1, 0xA33A, 0xB2B3, + 0x4A44, 0x5BCD, 0x6956, 0x78DF, 0x0C60, 0x1DE9, 0x2F72, 0x3EFB, + 0xD68D, 0xC704, 0xF59F, 0xE416, 0x90A9, 0x8120, 0xB3BB, 0xA232, + 0x5AC5, 0x4B4C, 0x79D7, 0x685E, 0x1CE1, 0x0D68, 0x3FF3, 0x2E7A, + 0xE70E, 0xF687, 0xC41C, 0xD595, 0xA12A, 0xB0A3, 0x8238, 0x93B1, + 0x6B46, 0x7ACF, 0x4854, 0x59DD, 0x2D62, 0x3CEB, 0x0E70, 0x1FF9, + 0xF78F, 0xE606, 0xD49D, 0xC514, 0xB1AB, 0xA022, 0x92B9, 0x8330, + 0x7BC7, 0x6A4E, 0x58D5, 0x495C, 0x3DE3, 0x2C6A, 0x1EF1, 0x0F78, +}; + +const u8 gMiscBlank_Gfx[] = INCBIN_U8("graphics/interface/blank.4bpp"); + + +u8 CreateInvisibleSpriteWithCallback(void (*callback)(struct Sprite *)) +{ + u8 sprite = CreateSprite(&gInvisibleSpriteTemplate, 248, 168, 14); + gSprites[sprite].invisible = TRUE; + gSprites[sprite].callback = callback; + return sprite; +} + +void StoreWordInTwoHalfwords(u16 *h, u32 w) +{ + h[0] = (u16)(w); + h[1] = (u16)(w >> 16); +} + +void LoadWordFromTwoHalfwords(u16 *h, u32 *w) +{ + *w = h[0] | (s16)h[1] << 16; +} + +void SetBgAffineStruct(struct BgAffineSrcData *src, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha) +{ + src->texX = texX; + src->texY = texY; + src->scrX = scrX; + src->scrY = scrY; + src->sx = sx; + src->sy = sy; + src->alpha = alpha; +} + +void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha) +{ + struct BgAffineSrcData src; + + SetBgAffineStruct(&src, texX, texY, scrX, scrY, sx, sy, alpha); + BgAffineSet(&src, dest, 1); +} + +#ifdef NONMATCHING + +// Functionally equivalent. +// Only the two yflip loops don't match. +void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output) +{ + u8 x, y; + s8 i, j; + u8 xflip[32]; + u8 h = gSpriteDimensions[shape][size][1]; + u8 w = gSpriteDimensions[shape][size][0]; + + for (y = 0; y < h; y++) + { + int filler = 32 - w; + + for (x = 0; x < w; x++) + { + int tile = (*tilemap & 0x3ff) * 32; + int attr = *tilemap & 0xc00; + + if (attr == 0) + { + void *src = tiles + tile; + void *dest = output; + int length = 32; + DmaCopy32(3, src, dest, length); + } + else if (attr == 0x800) // yflip + { + for (i = 0; i < 8; i++) + { + void *src = tiles; + void *dest = output; + int length = 4; + // this is likely wrong, but makes it closer to matching + src += tile + (7 - i) * 4; + dest += i * 4; + DmaCopy32(3, src, dest, length); + } + } + else // xflip + { + for (i = 0; i < 8; i++) + { + for (j = 0; j < 4; j++) + { + u8 i2 = i * 4; + xflip[i2 + (3-j)] = (tiles[tile + i2 + j] & 0xf) << 4; + xflip[i2 + (3-j)] |= tiles[tile + i2 + j] >> 4; + } + } + if (*tilemap & 0x800) // yflip + { + for (i = 0; i < 8; i++) + { + void *src = xflip + (7-i) * 4; + void *dest = output + i*4; + int length = 4; + DmaCopy32(3, src, dest, length); + } + } + else + { + void *src = xflip; + void *dest = output; + int length = 32; + DmaCopy32(3, src, dest, length); + } + } + tilemap++; + output += 32; + } + tilemap += filler; + } +} + +#else + +__attribute__((naked)) void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output) +{ + asm("\n" + " .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 r2, [sp, 0x20]\n" + " adds r4, r3, 0\n" + " ldr r7, [sp, 0x5C]\n" + " lsls r0, 24\n" + " lsls r1, 24\n" + " ldr r2, _08041008 @ =gSpriteDimensions\n" + " lsrs r1, 23\n" + " lsrs r0, 21\n" + " adds r1, r0\n" + " adds r0, r2, 0x1\n" + " adds r0, r1, r0\n" + " ldrb r0, [r0]\n" + " str r0, [sp, 0x24]\n" + " adds r1, r2\n" + " ldrb r1, [r1]\n" + " str r1, [sp, 0x28]\n" + " movs r1, 0\n" + " cmp r1, r0\n" + " bcc _08040FB4\n" + " b _08041136\n" + "_08040FB4:\n" + " movs r0, 0x20\n" + " ldr r2, [sp, 0x28]\n" + " subs r0, r2\n" + " lsls r0, 1\n" + " str r0, [sp, 0x2C]\n" + "_08040FBE:\n" + " movs r2, 0\n" + " adds r1, 0x1\n" + " str r1, [sp, 0x34]\n" + " ldr r3, [sp, 0x28]\n" + " cmp r2, r3\n" + " bcc _08040FCC\n" + " b _08041124\n" + "_08040FCC:\n" + " ldr r0, _0804100C @ =0x040000d4\n" + " mov r8, r0\n" + "_08040FD0:\n" + " ldrh r1, [r4]\n" + " ldr r0, _08041010 @ =0x000003ff\n" + " ands r0, r1\n" + " lsls r0, 5\n" + " mov r12, r0\n" + " movs r0, 0xC0\n" + " lsls r0, 4\n" + " ands r0, r1\n" + " mov r3, sp\n" + " strh r1, [r3, 0x38]\n" + " cmp r0, 0\n" + " bne _08041018\n" + " ldr r0, [sp, 0x20]\n" + " add r0, r12\n" + " mov r1, r8\n" + " str r0, [r1]\n" + " str r7, [r1, 0x4]\n" + " ldr r3, _08041014 @ =0x84000008\n" + " str r3, [r1, 0x8]\n" + " ldr r0, [r1, 0x8]\n" + " adds r4, 0x2\n" + " str r4, [sp, 0x30]\n" + " adds r7, 0x20\n" + " mov r10, r7\n" + " adds r2, 0x1\n" + " mov r9, r2\n" + " b _08041112\n" + " .align 2, 0\n" + "_08041008: .4byte gSpriteDimensions\n" + "_0804100C: .4byte 0x040000d4\n" + "_08041010: .4byte 0x000003ff\n" + "_08041014: .4byte 0x84000008\n" + "_08041018:\n" + " movs r1, 0x80\n" + " lsls r1, 4\n" + " cmp r0, r1\n" + " bne _08041068\n" + " movs r3, 0\n" + " adds r4, 0x2\n" + " str r4, [sp, 0x30]\n" + " movs r0, 0x20\n" + " adds r0, r7\n" + " mov r10, r0\n" + " adds r2, 0x1\n" + " mov r9, r2\n" + " ldr r4, _08041060 @ =0x040000d4\n" + " ldr r6, _08041064 @ =0x84000001\n" + " movs r5, 0x7\n" + "_08041036:\n" + " lsls r2, r3, 24\n" + " asrs r2, 24\n" + " subs r0, r5, r2\n" + " lsls r0, 2\n" + " add r0, r12\n" + " ldr r1, [sp, 0x20]\n" + " adds r0, r1, r0\n" + " lsls r1, r2, 2\n" + " adds r1, r7, r1\n" + " str r0, [r4]\n" + " str r1, [r4, 0x4]\n" + " str r6, [r4, 0x8]\n" + " ldr r0, [r4, 0x8]\n" + " adds r2, 0x1\n" + " lsls r2, 24\n" + " lsrs r3, r2, 24\n" + " asrs r2, 24\n" + " cmp r2, 0x7\n" + " ble _08041036\n" + " b _08041112\n" + " .align 2, 0\n" + "_08041060: .4byte 0x040000d4\n" + "_08041064: .4byte 0x84000001\n" + "_08041068:\n" + " movs r3, 0\n" + " adds r4, 0x2\n" + " str r4, [sp, 0x30]\n" + " movs r0, 0x20\n" + " adds r0, r7\n" + " mov r10, r0\n" + " adds r2, 0x1\n" + " mov r9, r2\n" + "_08041078:\n" + " movs r2, 0\n" + " lsls r4, r3, 24\n" + " lsls r0, r4, 2\n" + " lsrs r0, 24\n" + " adds r6, r0, 0x3\n" + " mov r1, r12\n" + " adds r5, r1, r0\n" + "_08041086:\n" + " lsls r1, r2, 24\n" + " asrs r1, 24\n" + " subs r0, r6, r1\n" + " mov r2, sp\n" + " adds r3, r2, r0\n" + " adds r0, r5, r1\n" + " ldr r2, [sp, 0x20]\n" + " adds r0, r2, r0\n" + " ldrb r2, [r0]\n" + " movs r0, 0xF\n" + " ands r0, r2\n" + " lsls r0, 4\n" + " lsrs r2, 4\n" + " orrs r0, r2\n" + " strb r0, [r3]\n" + " adds r1, 0x1\n" + " lsls r1, 24\n" + " lsrs r2, r1, 24\n" + " asrs r1, 24\n" + " cmp r1, 0x3\n" + " ble _08041086\n" + " movs r3, 0x80\n" + " lsls r3, 17\n" + " adds r0, r4, r3\n" + " lsrs r3, r0, 24\n" + " asrs r0, 24\n" + " cmp r0, 0x7\n" + " ble _08041078\n" + " movs r0, 0x80\n" + " lsls r0, 4\n" + " mov r1, sp\n" + " ldrh r1, [r1, 0x38]\n" + " ands r0, r1\n" + " cmp r0, 0\n" + " beq _08041104\n" + " movs r3, 0\n" + " ldr r4, _080410FC @ =0x040000d4\n" + " ldr r6, _08041100 @ =0x84000001\n" + " movs r5, 0x7\n" + "_080410D4:\n" + " lsls r1, r3, 24\n" + " asrs r1, 24\n" + " subs r0, r5, r1\n" + " lsls r0, 2\n" + " mov r3, sp\n" + " adds r2, r3, r0\n" + " lsls r0, r1, 2\n" + " adds r0, r7, r0\n" + " str r2, [r4]\n" + " str r0, [r4, 0x4]\n" + " str r6, [r4, 0x8]\n" + " ldr r0, [r4, 0x8]\n" + " adds r1, 0x1\n" + " lsls r1, 24\n" + " lsrs r3, r1, 24\n" + " asrs r1, 24\n" + " cmp r1, 0x7\n" + " ble _080410D4\n" + " b _08041112\n" + " .align 2, 0\n" + "_080410FC: .4byte 0x040000d4\n" + "_08041100: .4byte 0x84000001\n" + "_08041104:\n" + " mov r0, sp\n" + " mov r1, r8\n" + " str r0, [r1]\n" + " str r7, [r1, 0x4]\n" + " ldr r2, _08041148 @ =0x84000008\n" + " str r2, [r1, 0x8]\n" + " ldr r0, [r1, 0x8]\n" + "_08041112:\n" + " ldr r4, [sp, 0x30]\n" + " mov r7, r10\n" + " mov r3, r9\n" + " lsls r0, r3, 24\n" + " lsrs r2, r0, 24\n" + " ldr r0, [sp, 0x28]\n" + " cmp r2, r0\n" + " bcs _08041124\n" + " b _08040FD0\n" + "_08041124:\n" + " ldr r1, [sp, 0x2C]\n" + " adds r4, r1\n" + " ldr r2, [sp, 0x34]\n" + " lsls r0, r2, 24\n" + " lsrs r1, r0, 24\n" + " ldr r3, [sp, 0x24]\n" + " cmp r1, r3\n" + " bcs _08041136\n" + " b _08040FBE\n" + "_08041136:\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" + "_08041148: .4byte 0x84000008\n" + " .syntax divided\n" + ); +} + +#endif + +int CountTrailingZeroBits(u32 value) +{ + u8 i; + + for (i = 0; i < 32; i++) + { + if ((value & 1) == 0) + value >>= 1; + else + return i; + } + return 0; +} + +u16 CalcCRC16(u8 *data, int length) +{ + u16 i, j; + u16 crc = 0x1121; + + for (i = 0; i < length; i++) + { + crc ^= data[i]; + for (j = 0; j < 8; j++) + { + if (crc & 1) + crc = (crc >> 1) ^ 0x8408; + else + crc >>= 1; + } + } + return ~crc; +} + +u16 CalcCRC16WithTable(u8 *data, int length) +{ + u16 i; + u16 crc = 0x1121; + u8 byte; + + for (i = 0; i < length; i++) + { + byte = crc >> 8; + crc ^= data[i]; + crc = byte ^ gCrc16Table[(u8)crc]; + } + return ~crc; +} diff --git a/src/event_data.c b/src/event_data.c deleted file mode 100644 index 0484bae02..000000000 --- a/src/event_data.c +++ /dev/null @@ -1,184 +0,0 @@ -#include "global.h" -#include "event_data.h" -#include "pokedex.h" - -#define TEMP_FLAGS_SIZE 0x4 -#define TEMP_UPPER_FLAGS_SIZE 0x8 -#define TEMP_VARS_SIZE 0x20 - -EWRAM_DATA u16 gSpecialVar_0x8000 = 0; -EWRAM_DATA u16 gSpecialVar_0x8001 = 0; -EWRAM_DATA u16 gSpecialVar_0x8002 = 0; -EWRAM_DATA u16 gSpecialVar_0x8003 = 0; -EWRAM_DATA u16 gSpecialVar_0x8004 = 0; -EWRAM_DATA u16 gSpecialVar_0x8005 = 0; -EWRAM_DATA u16 gSpecialVar_0x8006 = 0; -EWRAM_DATA u16 gSpecialVar_0x8007 = 0; -EWRAM_DATA u16 gSpecialVar_0x8008 = 0; -EWRAM_DATA u16 gSpecialVar_0x8009 = 0; -EWRAM_DATA u16 gSpecialVar_0x800A = 0; -EWRAM_DATA u16 gSpecialVar_0x800B = 0; -EWRAM_DATA u16 gScriptResult = 0; -EWRAM_DATA u16 gScriptLastTalked = 0; -EWRAM_DATA u16 gScriptFacing = 0; -EWRAM_DATA u8 gUnknown_0202E8E2[16] = {0}; - -extern u16 *gSpecialVars[]; - -void InitEventData(void) -{ - memset(gSaveBlock1.flags, 0, sizeof(gSaveBlock1.flags)); - memset(gSaveBlock1.vars, 0, sizeof(gSaveBlock1.vars)); - memset(gUnknown_0202E8E2, 0, sizeof(gUnknown_0202E8E2)); -} - -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); -} - -// probably had different flag splits at one point. -void ClearUpperFlags(void) -{ - memset(gSaveBlock1.flags + 0x118, 0, TEMP_UPPER_FLAGS_SIZE); -} - -void DisableNationalPokedex(void) -{ - u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX); - gSaveBlock2.pokedex.nationalMagic = 0; - *nationalDexVar = 0; - FlagReset(SYS_NATIONAL_DEX); -} - -void EnableNationalPokedex(void) -{ - u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX); - gSaveBlock2.pokedex.nationalMagic = 0xDA; - *nationalDexVar = 0x302; - FlagSet(SYS_NATIONAL_DEX); - gSaveBlock2.pokedex.unknown1 = 1; - gSaveBlock2.pokedex.order = 0; - sub_808C0A0(); -} - -bool32 IsNationalPokedexEnabled(void) -{ - if (gSaveBlock2.pokedex.nationalMagic == 0xDA && VarGet(VAR_NATIONAL_DEX) == 0x302 && FlagGet(SYS_NATIONAL_DEX)) - return TRUE; - else - return FALSE; -} - -void DisableMysteryGift(void) -{ - FlagReset(SYS_EXDATA_ENABLE); -} - -void EnableMysteryGift(void) -{ - FlagSet(SYS_EXDATA_ENABLE); -} - -bool32 IsMysteryGiftEnabled(void) -{ - return FlagGet(SYS_EXDATA_ENABLE); -} - -void DisableResetRTC(void) -{ - VarSet(VAR_RESET_RTC_ENABLE, 0); - FlagReset(SYS_RESET_RTC_ENABLE); -} - -void EnableResetRTC(void) -{ - VarSet(VAR_RESET_RTC_ENABLE, 0x920); - FlagSet(SYS_RESET_RTC_ENABLE); -} - -bool32 CanResetRTC(void) -{ - if (FlagGet(SYS_RESET_RTC_ENABLE) && VarGet(VAR_RESET_RTC_ENABLE) == 0x920) - return TRUE; - else - return FALSE; -} - -u16 *GetVarPointer(u16 id) -{ - if (id < 0x4000) - return NULL; - - if ((s16)id >= 0) - return &gSaveBlock1.vars[id - 0x4000]; - - return gSpecialVars[id - 0x8000]; -} - -u16 VarGet(u16 id) -{ - u16 *ptr = GetVarPointer(id); - if (!ptr) - return id; - return *ptr; -} - -bool8 VarSet(u16 id, u16 value) -{ - u16 *ptr = GetVarPointer(id); - if (!ptr) - return FALSE; - *ptr = value; - return TRUE; -} - -u8 VarGetFieldObjectGraphicsId(u8 id) -{ - return VarGet(0x4010 + id); -} - -u8 *GetFlagPointer(u16 id) -{ - if (id == 0) - return 0; - - if (id < 0x4000) - return &gSaveBlock1.flags[id / 8]; - - return &gUnknown_0202E8E2[(id - 0x4000) / 8]; -} - -u8 FlagSet(u16 id) -{ - u8 *ptr = GetFlagPointer(id); - if (ptr) - *ptr |= 1 << (id & 7); - return 0; -} - -u8 FlagReset(u16 id) -{ - u8 *ptr = GetFlagPointer(id); - if (ptr) - *ptr &= ~(1 << (id & 7)); - return 0; -} - -bool8 FlagGet(u16 id) -{ - u8 *ptr = GetFlagPointer(id); - - if (!ptr) - return FALSE; - - if (!(((*ptr) >> (id & 7)) & 1)) - return FALSE; - - return TRUE; -} diff --git a/src/field/bard_music.c b/src/field/bard_music.c new file mode 100644 index 000000000..a31568475 --- /dev/null +++ b/src/field/bard_music.c @@ -0,0 +1,97 @@ +#include "global.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[]; + +static s16 sub_814A2B8(u32 arg0, u32 arg1) +{ + return gUnknown_08417068[arg0][arg1]; +} + +#if ENGLISH +struct BardSound *sub_814A2D0(u16 arg0, u16 arg1) +{ + struct BardSound *sounds = gBardMusicTable[arg0]; + + return &sounds[arg1]; +} +#elif GERMAN +struct BardSound *sub_814A2D0(u16 arg0, u16 arg1) +{ + u32 index; + struct BardSound *sounds; + + sounds = gBardMusicTable[arg0]; + index = de_sub_80EB748(arg0, arg1); + + return &sounds[index]; +} +#endif + +s32 sub_814A2EC(struct UnkBard2 *dest, struct UnkBard *src, u16 arg2) +{ + s32 i; + s32 j; + s32 thirty; + + for (i = 0; i < 6; i++) + { + dest->var18[i].var00 = src[i].var00; + if (src[i].var00 != 0xFF) + { + 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; + } + } + + for (j = 0, thirty = 30; j < i; j++) + dest->var18[j].var04 = sub_814A2B8(thirty + arg2, j); + + dest->var00++; + dest->var01 = 0; + dest->var02 = 0; + dest->var03 = 0; + dest->var0A = 0; + + //warning: no return statement in function returning non-void +} diff --git a/src/field/berry.c b/src/field/berry.c new file mode 100644 index 000000000..fa15672e7 --- /dev/null +++ b/src/field/berry.c @@ -0,0 +1,1380 @@ +#include "global.h" +#include "berry.h" +#include "field_control_avatar.h" +#include "field_map_obj.h" +#include "fieldmap.h" +#include "item.h" +#include "item_menu.h" +#include "item_use.h" +#include "items.h" +#include "main.h" +#include "rng.h" +#include "text.h" + +#define BERRY_NAME_LENGTH 6 + +#define FIRST_BERRY ITEM_CHERI_BERRY +#define LAST_BERRY ITEM_ENIGMA_BERRY + +#ifdef ENGLISH +#define NAME_CHERI_BERRY _("CHERI") +#define NAME_CHESTO_BERRY _("CHESTO") +#define NAME_PECHA_BERRY _("PECHA") +#define NAME_RAWST_BERRY _("RAWST") +#define NAME_ASPEAR_BERRY _("ASPEAR") +#define NAME_LEPPA_BERRY _("LEPPA") +#define NAME_ORAN_BERRY _("ORAN") +#define NAME_PERSIM_BERRY _("PERSIM") +#define NAME_LUM_BERRY _("LUM") +#define NAME_SITRUS_BERRY _("SITRUS") +#define NAME_FIGY_BERRY _("FIGY") +#define NAME_WIKI_BERRY _("WIKI") +#define NAME_MAGO_BERRY _("MAGO") +#define NAME_AGUAV_BERRY _("AGUAV") +#define NAME_IAPAPA_BERRY _("IAPAPA") +#define NAME_RAZZ_BERRY _("RAZZ") +#define NAME_BLUK_BERRY _("BLUK") +#define NAME_NANAB_BERRY _("NANAB") +#define NAME_WEPEAR_BERRY _("WEPEAR") +#define NAME_PINAP_BERRY _("PINAP") +#define NAME_POMEG_BERRY _("POMEG") +#define NAME_KELPSY_BERRY _("KELPSY") +#define NAME_QUALOT_BERRY _("QUALOT") +#define NAME_HONDEW_BERRY _("HONDEW") +#define NAME_GREPA_BERRY _("GREPA") +#define NAME_TAMATO_BERRY _("TAMATO") +#define NAME_CORNN_BERRY _("CORNN") +#define NAME_MAGOST_BERRY _("MAGOST") +#define NAME_RABUTA_BERRY _("RABUTA") +#define NAME_NOMEL_BERRY _("NOMEL") +#define NAME_SPELON_BERRY _("SPELON") +#define NAME_PAMTRE_BERRY _("PAMTRE") +#define NAME_WATMEL_BERRY _("WATMEL") +#define NAME_DURIN_BERRY _("DURIN") +#define NAME_BELUE_BERRY _("BELUE") +#define NAME_LIECHI_BERRY _("LIECHI") +#define NAME_GANLON_BERRY _("GANLON") +#define NAME_SALAC_BERRY _("SALAC") +#define NAME_PETAYA_BERRY _("PETAYA") +#define NAME_APICOT_BERRY _("APICOT") +#define NAME_LANSAT_BERRY _("LANSAT") +#define NAME_STARF_BERRY _("STARF") +#define NAME_ENIGMA_BERRY _("ENIGMA") + +const u8 gBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers."); +const u8 gBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy."); +const u8 gBerryDescriptionPart1_Chesto[] = _("The BERRY’s thick skin and fruit are"); +const u8 gBerryDescriptionPart2_Chesto[] = _("very tough. It is dry-tasting all over."); +const u8 gBerryDescriptionPart1_Pecha[] = _("Very sweet and delicious."); +const u8 gBerryDescriptionPart2_Pecha[] = _("Also very tender - handle with care."); +const u8 gBerryDescriptionPart1_Rawst[] = _("If the leaves grow long and curly,"); +const u8 gBerryDescriptionPart2_Rawst[] = _("the BERRY seems to grow very bitter."); +const u8 gBerryDescriptionPart1_Aspear[] = _("The hard BERRY is dense with a rich"); +const u8 gBerryDescriptionPart2_Aspear[] = _("juice. It is quite sour."); +const u8 gBerryDescriptionPart1_Leppa[] = _("Grows slower than CHERI and others."); +const u8 gBerryDescriptionPart2_Leppa[] = _("The smaller the BERRY, the tastier."); +const u8 gBerryDescriptionPart1_Oran[] = _("A peculiar BERRY with a mix of flavors."); +const u8 gBerryDescriptionPart2_Oran[] = _("BERRIES grow in half a day."); +const u8 gBerryDescriptionPart1_Persim[] = _("Loves sunlight. The BERRY’s color"); +const u8 gBerryDescriptionPart2_Persim[] = _("grows vivid when exposed to the sun."); +const u8 gBerryDescriptionPart1_Lum[] = _("Slow to grow. If raised with loving"); +const u8 gBerryDescriptionPart2_Lum[] = _("care, it may grow two BERRIES."); +const u8 gBerryDescriptionPart1_Sitrus[] = _("Closely related to ORAN. The large"); +const u8 gBerryDescriptionPart2_Sitrus[] = _("BERRY has a well-rounded flavor."); +const u8 gBerryDescriptionPart1_Figy[] = _("The BERRY, which looks chewed up,"); +const u8 gBerryDescriptionPart2_Figy[] = _("brims with spicy substances."); +const u8 gBerryDescriptionPart1_Wiki[] = _("The BERRY is said to have grown lumpy"); +const u8 gBerryDescriptionPart2_Wiki[] = _("to help POKéMON grip it."); +const u8 gBerryDescriptionPart1_Mago[] = _("The BERRY turns curvy as it grows."); +const u8 gBerryDescriptionPart2_Mago[] = _("The curvier, the sweeter and tastier."); +const u8 gBerryDescriptionPart1_Aguav[] = _("The flower is dainty. It is rare in its"); +const u8 gBerryDescriptionPart2_Aguav[] = _("ability to grow without light."); +const u8 gBerryDescriptionPart1_Iapapa[] = _("The BERRY is very big and sour."); +const u8 gBerryDescriptionPart2_Iapapa[] = _("It takes at least a day to grow."); +const u8 gBerryDescriptionPart1_Razz[] = _("The red BERRY tastes slightly spicy."); +const u8 gBerryDescriptionPart2_Razz[] = _("It grows quickly in just four hours."); +const u8 gBerryDescriptionPart1_Bluk[] = _("The BERRY is blue on the outside, but"); +const u8 gBerryDescriptionPart2_Bluk[] = _("it blackens the mouth when eaten."); +const u8 gBerryDescriptionPart1_Nanab[] = _("This BERRY was the seventh"); +const u8 gBerryDescriptionPart2_Nanab[] = _("discovered in the world. It is sweet."); +const u8 gBerryDescriptionPart1_Wepear[] = _("The flower is small and white. It has a"); +const u8 gBerryDescriptionPart2_Wepear[] = _("delicate balance of bitter and sour."); +const u8 gBerryDescriptionPart1_Pinap[] = _("Weak against wind and cold."); +const u8 gBerryDescriptionPart2_Pinap[] = _("The fruit is spicy and the skin, sour."); +const u8 gBerryDescriptionPart1_Pomeg[] = _("However much it is watered,"); +const u8 gBerryDescriptionPart2_Pomeg[] = _("it only grows up to six BERRIES."); +const u8 gBerryDescriptionPart1_Kelpsy[] = _("A rare variety shaped like a root."); +const u8 gBerryDescriptionPart2_Kelpsy[] = _("Grows a very large flower."); +const u8 gBerryDescriptionPart1_Qualot[] = _("Loves water. Grows strong even in"); +const u8 gBerryDescriptionPart2_Qualot[] = _("locations with constant rainfall."); +const u8 gBerryDescriptionPart1_Hondew[] = _("A BERRY that is very valuable and"); +const u8 gBerryDescriptionPart2_Hondew[] = _("rarely seen. It is very delicious."); +const u8 gBerryDescriptionPart1_Grepa[] = _("Despite its tenderness and round"); +const u8 gBerryDescriptionPart2_Grepa[] = _("shape, the BERRY is unimaginably sour."); +const u8 gBerryDescriptionPart1_Tamato[] = _("The BERRY is lip-bendingly spicy."); +const u8 gBerryDescriptionPart2_Tamato[] = _("It takes time to grow."); +const u8 gBerryDescriptionPart1_Cornn[] = _("A BERRY from an ancient era. May not"); +const u8 gBerryDescriptionPart2_Cornn[] = _("grow unless planted in quantity."); +const u8 gBerryDescriptionPart1_Magost[] = _("A BERRY that is widely said to have"); +const u8 gBerryDescriptionPart2_Magost[] = _("a finely balanced flavor."); +const u8 gBerryDescriptionPart1_Rabuta[] = _("A rare variety that is overgrown with"); +const u8 gBerryDescriptionPart2_Rabuta[] = _("hair. It is quite bitter."); +const u8 gBerryDescriptionPart1_Nomel[] = _("Quite sour. Just one bite makes it"); +const u8 gBerryDescriptionPart2_Nomel[] = _("impossible to taste for three days."); +const u8 gBerryDescriptionPart1_Spelon[] = _("The vividly red BERRY is very spicy."); +const u8 gBerryDescriptionPart2_Spelon[] = _("Its warts secrete a spicy substance."); +const u8 gBerryDescriptionPart1_Pamtre[] = _("Drifts on the sea from somewhere."); +const u8 gBerryDescriptionPart2_Pamtre[] = _("It is thought to grow elsewhere."); +const u8 gBerryDescriptionPart1_Watmel[] = _("A huge BERRY, with some over 20"); +const u8 gBerryDescriptionPart2_Watmel[] = _("inches discovered. Exceedingly sweet."); +const u8 gBerryDescriptionPart1_Durin[] = _("Bitter to even look at. It is so"); +const u8 gBerryDescriptionPart2_Durin[] = _("bitter, no one has ever eaten it as is."); +const u8 gBerryDescriptionPart1_Belue[] = _("It is glossy and looks delicious, but"); +const u8 gBerryDescriptionPart2_Belue[] = _("it is awfully sour. Takes time to grow."); +const u8 gBerryDescriptionPart1_Liechi[] = _("A mysterious BERRY. It is rumored to"); +const u8 gBerryDescriptionPart2_Liechi[] = _("contain the power of the sea."); +const u8 gBerryDescriptionPart1_Ganlon[] = _("A mysterious BERRY. It is rumored to"); +const u8 gBerryDescriptionPart2_Ganlon[] = _("contain the power of the land."); +const u8 gBerryDescriptionPart1_Salac[] = _("A mysterious BERRY. It is rumored to"); +const u8 gBerryDescriptionPart2_Salac[] = _("contain the power of the sky."); +const u8 gBerryDescriptionPart1_Petaya[] = _("A mysterious BERRY. It is rumored to"); +const u8 gBerryDescriptionPart2_Petaya[] = _("contain the power of all living things."); +const u8 gBerryDescriptionPart1_Apicot[] = _("A very mystifying BERRY. No telling"); +const u8 gBerryDescriptionPart2_Apicot[] = _("what may happen or how it can be used."); +const u8 gBerryDescriptionPart1_Lansat[] = _("Said to be a legendary BERRY."); +const u8 gBerryDescriptionPart2_Lansat[] = _("Holding it supposedly brings joy."); +const u8 gBerryDescriptionPart1_Starf[] = _("So strong, it was abandoned at the"); +const u8 gBerryDescriptionPart2_Starf[] = _("world’s edge. Considered a mirage."); +const u8 gBerryDescriptionPart1_Enigma[] = _("A completely enigmatic BERRY."); +const u8 gBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars."); +#elif defined(GERMAN) +#define NAME_CHERI_BERRY _("AMRENA") +#define NAME_CHESTO_BERRY _("MARON") +#define NAME_PECHA_BERRY _("PIRSIF") +#define NAME_RAWST_BERRY _("FRAGIA") +#define NAME_ASPEAR_BERRY _("WILBIR") +#define NAME_LEPPA_BERRY _("JONAGO") +#define NAME_ORAN_BERRY _("SINEL") +#define NAME_PERSIM_BERRY _("PERSIM") +#define NAME_LUM_BERRY _("PRUNUS") +#define NAME_SITRUS_BERRY _("TSITRU") +#define NAME_FIGY_BERRY _("GIEFE") +#define NAME_WIKI_BERRY _("WIKI") +#define NAME_MAGO_BERRY _("MAGO") +#define NAME_AGUAV_BERRY _("GAUVE") +#define NAME_IAPAPA_BERRY _("YAPA") +#define NAME_RAZZ_BERRY _("HIMMIH") +#define NAME_BLUK_BERRY _("MORB") +#define NAME_NANAB_BERRY _("NANAB") +#define NAME_WEPEAR_BERRY _("NIRBE") +#define NAME_PINAP_BERRY _("SANANA") +#define NAME_POMEG_BERRY _("GRANA") +#define NAME_KELPSY_BERRY _("SETANG") +#define NAME_QUALOT_BERRY _("QUALOT") +#define NAME_HONDEW_BERRY _("HONMEL") +#define NAME_GREPA_BERRY _("LABRUS") +#define NAME_TAMATO_BERRY _("TAMOT") +#define NAME_CORNN_BERRY _("SAIM") +#define NAME_MAGOST_BERRY _("MAGOST") +#define NAME_RABUTA_BERRY _("RABUTA") +#define NAME_NOMEL_BERRY _("TRONZI") +#define NAME_SPELON_BERRY _("KIWAN") +#define NAME_PAMTRE_BERRY _("PALLM") +#define NAME_WATMEL_BERRY _("WASMEL") +#define NAME_DURIN_BERRY _("DURIN") +#define NAME_BELUE_BERRY _("MYRTIL") +#define NAME_LIECHI_BERRY _("LYDZI") +#define NAME_GANLON_BERRY _("LINGAN") +#define NAME_SALAC_BERRY _("SALKA") +#define NAME_PETAYA_BERRY _("TAHAY") +#define NAME_APICOT_BERRY _("APIKO") +#define NAME_LANSAT_BERRY _("LANSAT") +#define NAME_STARF_BERRY _("KRAMBO") +#define NAME_ENIGMA_BERRY _("ENIGMA") + +const u8 gBerryDescriptionPart1_Cheri[] = _("Erblüht mit hübschen, zarten Blumen."); +const u8 gBerryDescriptionPart2_Cheri[] = _("Diese knallrote BEERE ist sehr scharf."); +const u8 gBerryDescriptionPart1_Chesto[] = _("Diese BEERE hat eine dicke Haut und"); +const u8 gBerryDescriptionPart2_Chesto[] = _("hartes Fruchtfleisch. Trocken!"); +const u8 gBerryDescriptionPart1_Pecha[] = _("Sehr süß und delikat."); +const u8 gBerryDescriptionPart2_Pecha[] = _("Sehr zart. Vorsichtig anfassen!"); +const u8 gBerryDescriptionPart1_Rawst[] = _("Wenn die Blätter lang und wellig sind,"); +const u8 gBerryDescriptionPart2_Rawst[] = _("wird die BEERE sehr bitter."); +const u8 gBerryDescriptionPart1_Aspear[] = _("Diese harte BEERE ist sehr"); +const u8 gBerryDescriptionPart2_Aspear[] = _("saftig und sauer im Geschmack!"); +const u8 gBerryDescriptionPart1_Leppa[] = _("Wächst langsamer als AMRENA und"); +const u8 gBerryDescriptionPart2_Leppa[] = _("andere. Je kleiner, desto delikater."); +const u8 gBerryDescriptionPart1_Oran[] = _("Eine BEERE unterschiedlichsten Ge-"); +const u8 gBerryDescriptionPart2_Oran[] = _("schmacks. Wächst an einem halben Tag."); +const u8 gBerryDescriptionPart1_Persim[] = _("Liebt Sonnenlicht. Die BEERE"); +const u8 gBerryDescriptionPart2_Persim[] = _("wächst im Sonnenlicht sehr schnell."); +const u8 gBerryDescriptionPart1_Lum[] = _("Langsamer Wuchs. Wird sie liebevoll ge-"); +const u8 gBerryDescriptionPart2_Lum[] = _("pflegt, kann sie 2 BEEREN tragen."); +const u8 gBerryDescriptionPart1_Sitrus[] = _("Eng verwandt mit SINEL. Diese große"); +const u8 gBerryDescriptionPart2_Sitrus[] = _("BEERE ist von rundem Geschmack."); +const u8 gBerryDescriptionPart1_Figy[] = _("Die BEERE sieht angekaut aus. Sie ist"); +const u8 gBerryDescriptionPart2_Figy[] = _("voller scharfer Substanzen."); +const u8 gBerryDescriptionPart1_Wiki[] = _("Die BEERE wächst unförmig,"); +const u8 gBerryDescriptionPart2_Wiki[] = _("damit PKMN sie besser greifen können."); +const u8 gBerryDescriptionPart1_Mago[] = _("Die BEERE hat Ausbeulungen. Je mehr"); +const u8 gBerryDescriptionPart2_Mago[] = _("Beulen, desto schmackhafter ist sie."); +const u8 gBerryDescriptionPart1_Aguav[] = _("Die Blume ist zart. Sie ist fähig,"); +const u8 gBerryDescriptionPart2_Aguav[] = _("ohne Licht wachsen zu können."); +const u8 gBerryDescriptionPart1_Iapapa[] = _("Die BEERE ist groß und sauer."); +const u8 gBerryDescriptionPart2_Iapapa[] = _("Sie braucht einen Tag zum Wachsen."); +const u8 gBerryDescriptionPart1_Razz[] = _("Diese rote BEERE schmeckt etwas"); +const u8 gBerryDescriptionPart2_Razz[] = _("scharf. Sie wächst in nur 4 Stunden."); +const u8 gBerryDescriptionPart1_Bluk[] = _("Die BEERE ist außen blau, verfärbt"); +const u8 gBerryDescriptionPart2_Bluk[] = _("sich im Mund aber schwarz."); +const u8 gBerryDescriptionPart1_Nanab[] = _("Diese BEERE war die 7., die auf der"); +const u8 gBerryDescriptionPart2_Nanab[] = _("Welt entdeckt wurde. Sie ist süß."); +const u8 gBerryDescriptionPart1_Wepear[] = _("Die Blume ist klein und weiß. Angenehm"); +const u8 gBerryDescriptionPart2_Wepear[] = _("bitter und sauer zugleich."); +const u8 gBerryDescriptionPart1_Pinap[] = _("Wind und Kälte verträgt sie nicht."); +const u8 gBerryDescriptionPart2_Pinap[] = _("Fruchtfleisch: Scharf. Haut: Sauer."); +const u8 gBerryDescriptionPart1_Pomeg[] = _("Egal wie viel Wasser sie bekommt, sie"); +const u8 gBerryDescriptionPart2_Pomeg[] = _("trägt immer bis zu 6 BEEREN."); +const u8 gBerryDescriptionPart1_Kelpsy[] = _("Eine Seltenheit. Geformt wie eine"); +const u8 gBerryDescriptionPart2_Kelpsy[] = _("Wurzel. Hat eine große Blume."); +const u8 gBerryDescriptionPart1_Qualot[] = _("Liebt das Wasser. Wächst besonders"); +const u8 gBerryDescriptionPart2_Qualot[] = _("gut in regenreichen Gegenden."); +const u8 gBerryDescriptionPart1_Hondew[] = _("Eine wertvolle und seltene BEERE."); +const u8 gBerryDescriptionPart2_Hondew[] = _("Sie ist sehr schmackhaft."); +const u8 gBerryDescriptionPart1_Grepa[] = _("Die BEERE ist zart und von runder"); +const u8 gBerryDescriptionPart2_Grepa[] = _("Form. Aber sie ist unglaublich sauer!"); +const u8 gBerryDescriptionPart1_Tamato[] = _("Die Schärfe der BEERE verbrennt die"); +const u8 gBerryDescriptionPart2_Tamato[] = _("Lippen. Sie braucht Zeit zum Wachsen."); +const u8 gBerryDescriptionPart1_Cornn[] = _("Eine BEERE aus alten Zeiten. Wächst"); +const u8 gBerryDescriptionPart2_Cornn[] = _("nur, wenn in großen Mengen gepflanzt."); +const u8 gBerryDescriptionPart1_Magost[] = _("Eine BEERE, die für ihren feinen, aus-"); +const u8 gBerryDescriptionPart2_Magost[] = _("gewogenen Geschmack bekannt ist."); +const u8 gBerryDescriptionPart1_Rabuta[] = _("Eine Seltenheit, die über und über mit"); +const u8 gBerryDescriptionPart2_Rabuta[] = _("Haaren bewachsen ist. Sehr bitter!"); +const u8 gBerryDescriptionPart1_Nomel[] = _("Sehr sauer. Ein Biss betäubt die"); +const u8 gBerryDescriptionPart2_Nomel[] = _("Geschmacksnerven für 3 Tage!"); +const u8 gBerryDescriptionPart1_Spelon[] = _("Die leuchtend rote BEERE ist sehr"); +const u8 gBerryDescriptionPart2_Spelon[] = _("scharf. Gibt scharfe Substanzen ab!"); +const u8 gBerryDescriptionPart1_Pamtre[] = _("Wird vom Meer angespült. Sie wächst"); +const u8 gBerryDescriptionPart2_Pamtre[] = _("an einem anderen Ort."); +const u8 gBerryDescriptionPart1_Watmel[] = _("Eine große BEERE, 25 cm groß."); +const u8 gBerryDescriptionPart2_Watmel[] = _("Außergewöhnlich süß."); +const u8 gBerryDescriptionPart1_Durin[] = _("Bitter schon ihr Anblick! Sie ist so"); +const u8 gBerryDescriptionPart2_Durin[] = _("bitter, dass niemand sie pur isst."); +const u8 gBerryDescriptionPart1_Belue[] = _("Sie glänzt, sieht zart aus, ist extrem"); +const u8 gBerryDescriptionPart2_Belue[] = _("sauer und braucht Zeit zum Wachsen."); +const u8 gBerryDescriptionPart1_Liechi[] = _("Eine geheimnisvolle BEERE. Man sagt,"); +const u8 gBerryDescriptionPart2_Liechi[] = _("sie enthalte die Kraft des Meeres."); +const u8 gBerryDescriptionPart1_Ganlon[] = _("Eine geheimnisvolle BEERE. Man sagt,"); +const u8 gBerryDescriptionPart2_Ganlon[] = _("sie enthalte die Kraft des Landes."); +const u8 gBerryDescriptionPart1_Salac[] = _("Eine geheimnisvolle BEERE. Man sagt,"); +const u8 gBerryDescriptionPart2_Salac[] = _("sie enthalte die Kraft des Himmels."); +const u8 gBerryDescriptionPart1_Petaya[] = _("Eine geheimnisvolle BEERE. Man sagt,"); +const u8 gBerryDescriptionPart2_Petaya[] = _("sie enthalte die Kraft allen Lebens."); +const u8 gBerryDescriptionPart1_Apicot[] = _("Eine rätselhafte BEERE. Man kann"); +const u8 gBerryDescriptionPart2_Apicot[] = _("nicht sagen, wie und was sie ist."); +const u8 gBerryDescriptionPart1_Lansat[] = _("Eine legendäre BEERE. Sie zu"); +const u8 gBerryDescriptionPart2_Lansat[] = _("tragen bringt Freude."); +const u8 gBerryDescriptionPart1_Starf[] = _("So stark, dass sie an den Rand der"); +const u8 gBerryDescriptionPart2_Starf[] = _("Welt verbannt wurde. Ein Märchen?"); +const u8 gBerryDescriptionPart1_Enigma[] = _("Eine enigmatische BEERE. Sie scheint"); +const u8 gBerryDescriptionPart2_Enigma[] = _("die Macht der Sterne zu besitzen."); +#endif + +const struct Berry gBerries[] = +{ + { + .name = NAME_CHERI_BERRY, + .firmness = BERRY_FIRMNESS_SOFT, + .size = 20, + .maxYield = 3, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Cheri, + .description2 = gBerryDescriptionPart2_Cheri, + .stageDuration = 3, + .spicy = 10, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 25, + }, + { + .name = NAME_CHESTO_BERRY, + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .size = 80, + .maxYield = 3, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Chesto, + .description2 = gBerryDescriptionPart2_Chesto, + .stageDuration = 3, + .spicy = 0, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 25, + }, + { + .name = NAME_PECHA_BERRY, + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .size = 40, + .maxYield = 3, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Pecha, + .description2 = gBerryDescriptionPart2_Pecha, + .stageDuration = 3, + .spicy = 0, + .dry = 0, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 25, + }, + { + .name = NAME_RAWST_BERRY, + .firmness = BERRY_FIRMNESS_HARD, + .size = 32, + .maxYield = 3, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Rawst, + .description2 = gBerryDescriptionPart2_Rawst, + .stageDuration = 3, + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 10, + .sour = 0, + .smoothness = 25, + }, + { + .name = NAME_ASPEAR_BERRY, + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .size = 50, + .maxYield = 3, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Aspear, + .description2 = gBerryDescriptionPart2_Aspear, + .stageDuration = 3, + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 10, + .smoothness = 25, + }, + { + .name = NAME_LEPPA_BERRY, + .firmness = BERRY_FIRMNESS_VERY_HARD, + .size = 28, + .maxYield = 3, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Leppa, + .description2 = gBerryDescriptionPart2_Leppa, + .stageDuration = 4, + .spicy = 10, + .dry = 0, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 20, + }, + { + .name = NAME_ORAN_BERRY, + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .size = 35, + .maxYield = 3, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Oran, + .description2 = gBerryDescriptionPart2_Oran, + .stageDuration = 3, + .spicy = 10, + .dry = 10, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 20, + }, + { + .name = NAME_PERSIM_BERRY, + .firmness = BERRY_FIRMNESS_HARD, + .size = 47, + .maxYield = 3, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Persim, + .description2 = gBerryDescriptionPart2_Persim, + .stageDuration = 3, + .spicy = 10, + .dry = 10, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 20, + }, + { + .name = NAME_LUM_BERRY, + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .size = 34, + .maxYield = 2, + .minYield = 1, + .description1 = gBerryDescriptionPart1_Lum, + .description2 = gBerryDescriptionPart2_Lum, + .stageDuration = 12, + .spicy = 10, + .dry = 10, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 20, + }, + { + .name = NAME_SITRUS_BERRY, + .firmness = BERRY_FIRMNESS_VERY_HARD, + .size = 95, + .maxYield = 3, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Sitrus, + .description2 = gBerryDescriptionPart2_Sitrus, + .stageDuration = 6, + .spicy = 10, + .dry = 10, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 20, + }, + { + .name = NAME_FIGY_BERRY, + .firmness = BERRY_FIRMNESS_SOFT, + .size = 100, + .maxYield = 3, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Figy, + .description2 = gBerryDescriptionPart2_Figy, + .stageDuration = 6, + .spicy = 10, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 25, + }, + { + .name = NAME_WIKI_BERRY, + .firmness = BERRY_FIRMNESS_HARD, + .size = 115, + .maxYield = 3, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Wiki, + .description2 = gBerryDescriptionPart2_Wiki, + .stageDuration = 6, + .spicy = 0, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 25, + }, + { + .name = NAME_MAGO_BERRY, + .firmness = BERRY_FIRMNESS_HARD, + .size = 126, + .maxYield = 3, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Mago, + .description2 = gBerryDescriptionPart2_Mago, + .stageDuration = 6, + .spicy = 0, + .dry = 0, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 25, + }, + { + .name = NAME_AGUAV_BERRY, + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .size = 64, + .maxYield = 3, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Aguav, + .description2 = gBerryDescriptionPart2_Aguav, + .stageDuration = 6, + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 10, + .sour = 0, + .smoothness = 25, + }, + { + .name = NAME_IAPAPA_BERRY, + .firmness = BERRY_FIRMNESS_SOFT, + .size = 223, + .maxYield = 3, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Iapapa, + .description2 = gBerryDescriptionPart2_Iapapa, + .stageDuration = 6, + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 10, + .smoothness = 25, + }, + { + .name = NAME_RAZZ_BERRY, + .firmness = BERRY_FIRMNESS_VERY_HARD, + .size = 120, + .maxYield = 6, + .minYield = 3, + .description1 = gBerryDescriptionPart1_Razz, + .description2 = gBerryDescriptionPart2_Razz, + .stageDuration = 1, + .spicy = 10, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 20, + }, + { + .name = NAME_BLUK_BERRY, + .firmness = BERRY_FIRMNESS_SOFT, + .size = 108, + .maxYield = 6, + .minYield = 3, + .description1 = gBerryDescriptionPart1_Bluk, + .description2 = gBerryDescriptionPart2_Bluk, + .stageDuration = 1, + .spicy = 0, + .dry = 10, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 20, + }, + { + .name = NAME_NANAB_BERRY, + .firmness = BERRY_FIRMNESS_VERY_HARD, + .size = 77, + .maxYield = 6, + .minYield = 3, + .description1 = gBerryDescriptionPart1_Nanab, + .description2 = gBerryDescriptionPart2_Nanab, + .stageDuration = 1, + .spicy = 0, + .dry = 0, + .sweet = 10, + .bitter = 10, + .sour = 0, + .smoothness = 20, + }, + { + .name = NAME_WEPEAR_BERRY, + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .size = 74, + .maxYield = 6, + .minYield = 3, + .description1 = gBerryDescriptionPart1_Wepear, + .description2 = gBerryDescriptionPart2_Wepear, + .stageDuration = 1, + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 10, + .sour = 10, + .smoothness = 20, + }, + { + .name = NAME_PINAP_BERRY, + .firmness = BERRY_FIRMNESS_HARD, + .size = 80, + .maxYield = 6, + .minYield = 3, + .description1 = gBerryDescriptionPart1_Pinap, + .description2 = gBerryDescriptionPart2_Pinap, + .stageDuration = 1, + .spicy = 10, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 10, + .smoothness = 20, + }, + { + .name = NAME_POMEG_BERRY, + .firmness = BERRY_FIRMNESS_VERY_HARD, + .size = 135, + .maxYield = 6, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Pomeg, + .description2 = gBerryDescriptionPart2_Pomeg, + .stageDuration = 3, + .spicy = 10, + .dry = 0, + .sweet = 10, + .bitter = 10, + .sour = 0, + .smoothness = 20, + }, + { + .name = NAME_KELPSY_BERRY, + .firmness = BERRY_FIRMNESS_HARD, + .size = 150, + .maxYield = 6, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Kelpsy, + .description2 = gBerryDescriptionPart2_Kelpsy, + .stageDuration = 3, + .spicy = 0, + .dry = 10, + .sweet = 0, + .bitter = 10, + .sour = 10, + .smoothness = 20, + }, + { + .name = NAME_QUALOT_BERRY, + .firmness = BERRY_FIRMNESS_HARD, + .size = 110, + .maxYield = 6, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Qualot, + .description2 = gBerryDescriptionPart2_Qualot, + .stageDuration = 3, + .spicy = 10, + .dry = 0, + .sweet = 10, + .bitter = 0, + .sour = 10, + .smoothness = 20, + }, + { + .name = NAME_HONDEW_BERRY, + .firmness = BERRY_FIRMNESS_HARD, + .size = 162, + .maxYield = 6, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Hondew, + .description2 = gBerryDescriptionPart2_Hondew, + .stageDuration = 3, + .spicy = 10, + .dry = 10, + .sweet = 0, + .bitter = 10, + .sour = 0, + .smoothness = 20, + }, + { + .name = NAME_GREPA_BERRY, + .firmness = BERRY_FIRMNESS_SOFT, + .size = 149, + .maxYield = 6, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Grepa, + .description2 = gBerryDescriptionPart2_Grepa, + .stageDuration = 3, + .spicy = 0, + .dry = 10, + .sweet = 10, + .bitter = 0, + .sour = 10, + .smoothness = 20, + }, + { + .name = NAME_TAMATO_BERRY, + .firmness = BERRY_FIRMNESS_SOFT, + .size = 200, + .maxYield = 4, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Tamato, + .description2 = gBerryDescriptionPart2_Tamato, + .stageDuration = 6, + .spicy = 20, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 30, + }, + { + .name = NAME_CORNN_BERRY, + .firmness = BERRY_FIRMNESS_HARD, + .size = 75, + .maxYield = 4, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Cornn, + .description2 = gBerryDescriptionPart2_Cornn, + .stageDuration = 6, + .spicy = 0, + .dry = 20, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 30, + }, + { + .name = NAME_MAGOST_BERRY, + .firmness = BERRY_FIRMNESS_HARD, + .size = 140, + .maxYield = 4, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Magost, + .description2 = gBerryDescriptionPart2_Magost, + .stageDuration = 6, + .spicy = 0, + .dry = 0, + .sweet = 20, + .bitter = 10, + .sour = 0, + .smoothness = 30, + }, + { + .name = NAME_RABUTA_BERRY, + .firmness = BERRY_FIRMNESS_SOFT, + .size = 226, + .maxYield = 4, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Rabuta, + .description2 = gBerryDescriptionPart2_Rabuta, + .stageDuration = 6, + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 20, + .sour = 10, + .smoothness = 30, + }, + { + .name = NAME_NOMEL_BERRY, + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .size = 285, + .maxYield = 4, + .minYield = 2, + .description1 = gBerryDescriptionPart1_Nomel, + .description2 = gBerryDescriptionPart2_Nomel, + .stageDuration = 6, + .spicy = 10, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 20, + .smoothness = 30, + }, + { + .name = NAME_SPELON_BERRY, + .firmness = BERRY_FIRMNESS_SOFT, + .size = 133, + .maxYield = 2, + .minYield = 1, + .description1 = gBerryDescriptionPart1_Spelon, + .description2 = gBerryDescriptionPart2_Spelon, + .stageDuration = 18, + .spicy = 40, + .dry = 10, + .sweet = 0, + .bitter = 0, + .sour = 0, + .smoothness = 70, + }, + { + .name = NAME_PAMTRE_BERRY, + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .size = 244, + .maxYield = 2, + .minYield = 1, + .description1 = gBerryDescriptionPart1_Pamtre, + .description2 = gBerryDescriptionPart2_Pamtre, + .stageDuration = 18, + .spicy = 0, + .dry = 40, + .sweet = 10, + .bitter = 0, + .sour = 0, + .smoothness = 70, + }, + { + .name = NAME_WATMEL_BERRY, + .firmness = BERRY_FIRMNESS_SOFT, + .size = 250, + .maxYield = 2, + .minYield = 1, + .description1 = gBerryDescriptionPart1_Watmel, + .description2 = gBerryDescriptionPart2_Watmel, + .stageDuration = 18, + .spicy = 0, + .dry = 0, + .sweet = 40, + .bitter = 10, + .sour = 0, + .smoothness = 70, + }, + { + .name = NAME_DURIN_BERRY, + .firmness = BERRY_FIRMNESS_HARD, + .size = 280, + .maxYield = 2, + .minYield = 1, + .description1 = gBerryDescriptionPart1_Durin, + .description2 = gBerryDescriptionPart2_Durin, + .stageDuration = 18, + .spicy = 0, + .dry = 0, + .sweet = 0, + .bitter = 40, + .sour = 10, + .smoothness = 70, + }, + { + .name = NAME_BELUE_BERRY, + .firmness = BERRY_FIRMNESS_VERY_SOFT, + .size = 300, + .maxYield = 2, + .minYield = 1, + .description1 = gBerryDescriptionPart1_Belue, + .description2 = gBerryDescriptionPart2_Belue, + .stageDuration = 18, + .spicy = 10, + .dry = 0, + .sweet = 0, + .bitter = 0, + .sour = 40, + .smoothness = 70, + }, + { + .name = NAME_LIECHI_BERRY, + .firmness = BERRY_FIRMNESS_VERY_HARD, + .size = 111, + .maxYield = 2, + .minYield = 1, + .description1 = gBerryDescriptionPart1_Liechi, + .description2 = gBerryDescriptionPart2_Liechi, + .stageDuration = 24, + .spicy = 40, + .dry = 0, + .sweet = 40, + .bitter = 0, + .sour = 10, + .smoothness = 80, + }, + { + .name = NAME_GANLON_BERRY, + .firmness = BERRY_FIRMNESS_VERY_HARD, + .size = 33, + .maxYield = 2, + .minYield = 1, + .description1 = gBerryDescriptionPart1_Ganlon, + .description2 = gBerryDescriptionPart2_Ganlon, + .stageDuration = 24, + .spicy = 0, + .dry = 40, + .sweet = 0, + .bitter = 40, + .sour = 0, + .smoothness = 80, + }, + { + .name = NAME_SALAC_BERRY, + .firmness = BERRY_FIRMNESS_VERY_HARD, + .size = 95, + .maxYield = 2, + .minYield = 1, + .description1 = gBerryDescriptionPart1_Salac, + .description2 = gBerryDescriptionPart2_Salac, + .stageDuration = 24, + .spicy = 0, + .dry = 0, + .sweet = 40, + .bitter = 0, + .sour = 40, + .smoothness = 80, + }, + { + .name = NAME_PETAYA_BERRY, + .firmness = BERRY_FIRMNESS_VERY_HARD, + .size = 237, + .maxYield = 2, + .minYield = 1, + .description1 = gBerryDescriptionPart1_Petaya, + .description2 = gBerryDescriptionPart2_Petaya, + .stageDuration = 24, + .spicy = 40, + .dry = 0, + .sweet = 0, + .bitter = 40, + .sour = 0, + .smoothness = 80, + }, + { + .name = NAME_APICOT_BERRY, + .firmness = BERRY_FIRMNESS_HARD, + .size = 75, + .maxYield = 2, + .minYield = 1, + .description1 = gBerryDescriptionPart1_Apicot, + .description2 = gBerryDescriptionPart2_Apicot, + .stageDuration = 24, + .spicy = 0, + .dry = 40, + .sweet = 0, + .bitter = 0, + .sour = 40, + .smoothness = 80, + }, + { + .name = NAME_LANSAT_BERRY, + .firmness = BERRY_FIRMNESS_SOFT, + .size = 97, + .maxYield = 2, + .minYield = 1, + .description1 = gBerryDescriptionPart1_Lansat, + .description2 = gBerryDescriptionPart2_Lansat, + .stageDuration = 24, + .spicy = 10, + .dry = 10, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 30, + }, + { + .name = NAME_STARF_BERRY, + .firmness = BERRY_FIRMNESS_SUPER_HARD, + .size = 153, + .maxYield = 2, + .minYield = 1, + .description1 = gBerryDescriptionPart1_Starf, + .description2 = gBerryDescriptionPart2_Starf, + .stageDuration = 24, + .spicy = 10, + .dry = 10, + .sweet = 10, + .bitter = 10, + .sour = 10, + .smoothness = 30, + }, + { + .name = NAME_ENIGMA_BERRY, + .firmness = BERRY_FIRMNESS_UNKNOWN, + .size = 0, + .maxYield = 2, + .minYield = 1, + .description1 = gBerryDescriptionPart1_Enigma, + .description2 = gBerryDescriptionPart2_Enigma, + .stageDuration = 24, + .spicy = 40, + .dry = 40, + .sweet = 40, + .bitter = 40, + .sour = 40, + .smoothness = 40, + }, +}; + +const struct BerryTree gBlankBerryTree = {0}; + +extern u8 BerryTreeScript; +extern u16 gScriptLastTalked; +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u16 gSpecialVar_0x8006; + +// unused +void ClearEnigmaBerries(void) +{ + CpuFill16(0, &gSaveBlock1.enigmaBerry, sizeof(gSaveBlock1.enigmaBerry)); +} + +void SetEnigmaBerry(u8 *src) +{ + u32 i; + u8 *dest = (u8*)&gSaveBlock1.enigmaBerry; + + for (i = 0; i < sizeof(gSaveBlock1.enigmaBerry); i++) + dest[i] = src[i]; + + gSaveBlock1.enigmaBerry.berry.description1 = gSaveBlock1.enigmaBerry.description1; + gSaveBlock1.enigmaBerry.berry.description2 = gSaveBlock1.enigmaBerry.description2; +} + +u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) +{ + const u8 *description1; + const u8 *description2; + u32 i; + u32 checksum; + u8 *dest; + + description1 = gSaveBlock1.enigmaBerry.berry.description1; + description2 = gSaveBlock1.enigmaBerry.berry.description2; + gSaveBlock1.enigmaBerry.berry.description1 = 0; + gSaveBlock1.enigmaBerry.berry.description2 = 0; + + dest = (u8*)enigmaBerry; + checksum = 0; + for (i = 0; i < ((u32)&gSaveBlock1.enigmaBerry.checksum - (u32)&gSaveBlock1.enigmaBerry); i++) + { + checksum += dest[i]; + } + + gSaveBlock1.enigmaBerry.berry.description1 = description1; + gSaveBlock1.enigmaBerry.berry.description2 = description2; + + return checksum; +} + +bool32 IsEnigmaBerryValid(void) +{ + if (!gSaveBlock1.enigmaBerry.berry.stageDuration) + return FALSE; + if (!gSaveBlock1.enigmaBerry.berry.maxYield) + return FALSE; + if (GetEnigmaBerryChecksum(&gSaveBlock1.enigmaBerry) != gSaveBlock1.enigmaBerry.checksum) + return FALSE; + return TRUE; +} + +const struct Berry *GetBerryInfo(u8 berry) +{ + if (berry == 0x2B && IsEnigmaBerryValid()) + return &gSaveBlock1.enigmaBerry.berry; + else + { + if (berry == 0 || berry > 0x2B) + berry = 1; + return &gBerries[berry - 1]; + } +} + +struct BerryTree *GetBerryTreeInfo(u8 id) +{ + return &gSaveBlock1.berryTrees[id]; +} + +bool32 FieldObjectInteractionWaterBerryTree(void) +{ + struct BerryTree *tree = GetBerryTreeInfo(FieldObjectGetBerryTreeId(gSelectedMapObject)); + + switch (tree->stage) + { + case 1: + tree->watered1 = TRUE; + break; + case 2: + tree->watered2 = TRUE; + break; + case 3: + tree->watered3 = TRUE; + break; + case 4: + tree->watered4 = TRUE; + break; + default: + return FALSE; + } + return TRUE; +} + +bool8 IsPlayerFacingPlantedBerryTree(void) +{ + if (GetFieldObjectScriptPointerForComparison() == &BerryTreeScript + && GetStageByBerryTreeId(FieldObjectGetBerryTreeId(gSelectedMapObject)) == 0) + return TRUE; + else + return FALSE; +} + +bool8 TryToWaterBerryTree(void) +{ + if (GetFieldObjectScriptPointerForComparison() != &BerryTreeScript) + return FALSE; + else + return FieldObjectInteractionWaterBerryTree(); +} + +void ClearBerryTrees(void) +{ + int i; + struct SaveBlock1 *saveBlock1 = &gSaveBlock1; + struct BerryTree berryTree = gBlankBerryTree; + + for (i = 0; i < (u8)ARRAY_COUNT(saveBlock1->berryTrees); i++) // casting to u8 fixes a mismatched signed compare. what + saveBlock1->berryTrees[i] = berryTree; +} + +bool32 BerryTreeGrow(struct BerryTree *tree) +{ + if (tree->growthSparkle) + return FALSE; + switch (tree->stage) + { + case 0: + return FALSE; + case 4: + tree->berryYield = CalcBerryYield(tree); + case 1: + case 2: + case 3: + tree->stage++; + break; + case 5: + tree->watered1 = 0; + tree->watered2 = 0; + tree->watered3 = 0; + tree->watered4 = 0; + tree->berryYield = 0; + tree->stage = 2; + if (++tree->regrowthCount == 10) + *tree = gBlankBerryTree; + break; + } + return TRUE; +} + +void BerryTreeTimeUpdate(s32 minutes) +{ + int i; + struct BerryTree *tree; + + for (i = 0; i < (u8)ARRAY_COUNT(gSaveBlock1.berryTrees); i++) + { + tree = &gSaveBlock1.berryTrees[i]; + + if (tree->berry && tree->stage && !tree->growthSparkle) + { + if (minutes >= GetStageDurationByBerryType(tree->berry) * 71) + { + *tree = gBlankBerryTree; + } + else + { + s32 time = minutes; + + while (time != 0) + { + if (tree->minutesUntilNextStage > time) + { + tree->minutesUntilNextStage -= time; + break; + } + time -= tree->minutesUntilNextStage; + tree->minutesUntilNextStage = GetStageDurationByBerryType(tree->berry); + if (!BerryTreeGrow(tree)) + break; + if (tree->stage == 5) + tree->minutesUntilNextStage *= 4; + } + } + } + } +} + +void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle) +{ + struct BerryTree *tree = GetBerryTreeInfo(id); + + *tree = gBlankBerryTree; + tree->berry = berry; + tree->minutesUntilNextStage = GetStageDurationByBerryType(berry); + tree->stage = stage; + if (stage == 5) + { + tree->berryYield = CalcBerryYield(tree); + tree->minutesUntilNextStage *= 4; + } + if (!sparkle) + { + tree->growthSparkle = TRUE; + } +} + +void RemoveBerryTree(u8 id) +{ + gSaveBlock1.berryTrees[id] = gBlankBerryTree; +} + +u8 GetBerryTypeByBerryTreeId(u8 id) +{ + return gSaveBlock1.berryTrees[id].berry; +} + +u8 GetStageByBerryTreeId(u8 id) +{ + return gSaveBlock1.berryTrees[id].stage; +} + +u8 ItemIdToBerryType(u16 item) +{ + u16 berry = item - FIRST_BERRY; + + if (berry > LAST_BERRY - FIRST_BERRY) + return 1; + else + return item - FIRST_BERRY + 1; +} + +u16 BerryTypeToItemId(u16 berry) +{ + u16 item = berry - 1; + + if (item > LAST_BERRY - FIRST_BERRY) + return FIRST_BERRY; + else + return berry + FIRST_BERRY - 1; +} + +void GetBerryNameByBerryType(u8 berry, u8 *string) +{ + memcpy(string, GetBerryInfo(berry)->name, BERRY_NAME_LENGTH); + string[BERRY_NAME_LENGTH] = EOS; +} + +void ResetBerryTreeSparkleFlag(u8 id) +{ + GetBerryTreeInfo(id)->growthSparkle = 0; +} + +u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree) +{ + u8 count = 0; + + if (tree->watered1) + count++; + if (tree->watered2) + count++; + if (tree->watered3) + count++; + if (tree->watered4) + count++; + return count; +} + +u8 GetNumStagesWateredByBerryTreeId(u8 id) +{ + return BerryTreeGetNumStagesWatered(GetBerryTreeInfo(id)); +} + +u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water) +{ + u32 randMin; + u32 randMax; + u32 rand; + u32 extraYield; + + if (water == 0) + return min; + else + { + randMin = (max - min) * (water - 1); + randMax = (max - min) * (water); + rand = randMin + Random() % (randMax - randMin + 1); + + if ((rand & 3) > 1) + extraYield = rand / 4 + 1; + else + extraYield = rand / 4; + return extraYield + min; + } +} + +u8 CalcBerryYield(struct BerryTree *tree) +{ + const struct Berry *berry = GetBerryInfo(tree->berry); + u8 min = berry->minYield; + u8 max = berry->maxYield; + + return CalcBerryYieldInternal(max, min, BerryTreeGetNumStagesWatered(tree)); +} + +u8 GetBerryCountByBerryTreeId(u8 id) +{ + return gSaveBlock1.berryTrees[id].berryYield; +} + +u16 GetStageDurationByBerryType(u8 berry) +{ + return GetBerryInfo(berry)->stageDuration * 60; +} + +void FieldObjectInteractionGetBerryTreeData(void) +{ + u8 id; + u8 berry; + u8 unk; + u8 group; + u8 num; + + id = FieldObjectGetBerryTreeId(gSelectedMapObject); + berry = GetBerryTypeByBerryTreeId(id); + ResetBerryTreeSparkleFlag(id); + unk = gScriptLastTalked; + num = gSaveBlock1.location.mapNum; + group = gSaveBlock1.location.mapGroup; + if (sub_8060234(unk, num, group)) + gSpecialVar_0x8004 = 0xFF; + else + gSpecialVar_0x8004 = GetStageByBerryTreeId(id); + gSpecialVar_0x8005 = GetNumStagesWateredByBerryTreeId(id); + gSpecialVar_0x8006 = GetBerryCountByBerryTreeId(id); + GetBerryNameByBerryType(berry, gStringVar1); +} + +void sub_80B4EE4(void) +{ + SetMainCallback2(sub_80A68CC); +} + +void FieldObjectInteractionPlantBerryTree(void) +{ + u8 berry = ItemIdToBerryType(gScriptItemId); + + PlantBerryTree(FieldObjectGetBerryTreeId(gSelectedMapObject), berry, 1, TRUE); + FieldObjectInteractionGetBerryTreeData(); +} + +void FieldObjectInteractionPickBerryTree(void) +{ + u8 id = FieldObjectGetBerryTreeId(gSelectedMapObject); + u8 berry = GetBerryTypeByBerryTreeId(id); + + gSpecialVar_0x8004 = AddBagItem(BerryTypeToItemId(berry), GetBerryCountByBerryTreeId(id)); +} + +void FieldObjectInteractionRemoveBerryTree(void) +{ + RemoveBerryTree(FieldObjectGetBerryTreeId(gSelectedMapObject)); + sub_8060288(gScriptLastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); +} + +u8 PlayerHasBerries(void) +{ + return IsBagPocketNonEmpty(BAG_BERRIES); +} + +void ResetBerryTreeSparkleFlags(void) +{ + s16 cam_left; + s16 cam_top; + s16 left; + s16 top; + s16 right; + s16 bottom; + int i; + + GetCameraCoords(&cam_left, &cam_top); + left = cam_left; + top = cam_top + 3; + right = cam_left + 14; + bottom = top + 8; + for (i = 0; i < (u8)ARRAY_COUNT(gSaveBlock1.mapObjects); i++) + { + if (gMapObjects[i].active && gMapObjects[i].animPattern == 12) + { + cam_left = gMapObjects[i].coords2.x; + cam_top = gMapObjects[i].coords2.y; + if (left <= cam_left && cam_left <= right && top <= cam_top && cam_top <= bottom) + ResetBerryTreeSparkleFlag(gMapObjects[i].trainerRange_berryTreeId); + } + } +} diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c new file mode 100644 index 000000000..ff430e7b2 --- /dev/null +++ b/src/field/berry_tag_screen.c @@ -0,0 +1,580 @@ +#include "global.h" +#include "berry_tag_screen.h" +#include "berry.h" +#include "decompress.h" +#include "field_map_obj.h" +#include "item_menu.h" +#include "items.h" +#include "item_use.h" +#include "main.h" +#include "menu.h" +#include "menu_helpers.h" +#include "palette.h" +#include "rom4.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" + +#define OFFSET_7B (123) +#define FIRST_BERRY ITEM_CHERI_BERRY + +struct Struct2000000 +{ + /*0x00*/ u8 filler_0[0x1FFFF]; + /*0x1FFFF*/ u8 var_1FFFF; +}; + +extern struct Struct2000000 unk_2000000; +extern u16 gUnknown_030041B4; + +static EWRAM_DATA u8 gUnknown_0203932C = 0; +static EWRAM_DATA s16 gUnknown_0203932E[5] = {0}; + +extern const struct CompressedSpriteSheet gUnknown_083C1F74; +extern const struct CompressedSpritePalette gUnknown_083C1F7C; + +extern u8 gBerryCheck_Gfx[]; +extern u8 gBerryCheck_Pal[]; +extern u8 gUnknown_08E788E4[]; +extern u8 gUnknown_08E78A84[]; + +static const u8 *const gUnknown_0841192C[] = +{ + ContestStatsText_VerySoft, + ContestStatsText_Soft, + ContestStatsText_Hard, + ContestStatsText_VeryHard, + ContestStatsText_SuperHard, +}; + +static void sub_8146014(void); +static void sub_814602C(void); +static bool8 sub_8146058(void); +static void sub_8146288(void); +static bool8 sub_81462B8(void); +static void sub_814640C(u8 taskId); +static void sub_8146440(u8 taskId); +static void sub_8146480(u8 taskid); +static void sub_81464E4(void); +static void sub_8146600(u8 berry); +// static void sub_81466A0(void); +static void sub_81466E8(u8 taskId, s8 direction); +// static void sub_8146798(u8 berry); +static void sub_8146810(s8 berry); +static void sub_81468BC(void); + +static void sub_8146014(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTasks(); + UpdatePaletteFade(); +} + +static void sub_814602C(void) +{ + REG_BG0VOFS = gUnknown_030041B4; + REG_BG1VOFS = gUnknown_030041B4; + + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static bool8 sub_8146058(void) +{ + u8 berry; + u16 backup; + + switch (gMain.state) + { + case 0: + sub_80F9438(); + sub_80F9368(); + sub_8146288(); + REG_BLDCNT = 0; + gMain.state += 1; + break; + case 1: + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = 1; + gMain.state += 1; + break; + case 2: + ResetSpriteData(); + gMain.state += 1; + break; + case 3: + SetUpWindowConfig(&gWindowConfig_81E6E18); + gMain.state += 1; + break; + case 4: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6E18); + gMain.state += 1; + break; + case 5: + if (!MultistepInitMenuWindowContinue()) + break; + unk_2000000.var_1FFFF = 0; + gMain.state += 1; + break; + case 6: + if (!sub_81462B8()) + break; + unk_2000000.var_1FFFF = 0; + gMain.state += 1; + break; + case 7: + sub_81464E4(); + gMain.state += 1; + break; + case 8: + berry = gScriptItemId + OFFSET_7B; + gUnknown_0203932C = CreateBerrySprite(berry, 56, 64); + gMain.state += 1; + break; + case 9: + sub_8146600(gScriptItemId + OFFSET_7B); + gMain.state += 1; + break; + case 10: + backup = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = backup; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + SetVBlankCallback(sub_814602C); + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP; + gMain.state += 1; + break; + case 11: + if (sub_8055870() == TRUE) + break; + gMain.state += 1; + break; + case 12: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + gPaletteFade.bufferTransferDisabled = 0; + SetMainCallback2(sub_8146014); + return TRUE; + } + + return FALSE; +} + +void BerryTagScreen_814625C(u8 taskId) +{ + do + { + if (sub_8146058() == TRUE) + { + CreateTask(sub_8146480, 0); + return; + } + } while (sub_80F9344() != TRUE); +} + +static void sub_8146288(void) +{ + REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG2CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; + gUnknown_030041B4 = 0; +} + +bool8 sub_81462B8(void) +{ + u16 i; + void *addr; + + switch (unk_2000000.var_1FFFF) + { + case 0: + LZDecompressVram(gBerryCheck_Gfx, (void *)VRAM); + unk_2000000.var_1FFFF += 1; + break; + case 1: + LZDecompressVram(gUnknown_08E788E4, (void *)VRAM + 0x2800); + unk_2000000.var_1FFFF += 1; + break; + case 2: + LZDecompressVram(gUnknown_08E78A84, (void *)VRAM + 0x3000); + unk_2000000.var_1FFFF += 1; + break; + case 3: + for (i = 0; i < 0x400; i++) + { + if (gSaveBlock2.playerGender == MALE) + gBGTilemapBuffers[2][i] = 0x4042; + else + gBGTilemapBuffers[2][i] = 0x5042; + } + addr = (void *)(VRAM + 0x3800); + DmaCopy16(3, gBGTilemapBuffers[2], addr, 0x800); + unk_2000000.var_1FFFF += 1; + break; + case 4: + LoadCompressedPalette(gBerryCheck_Pal, 0, 96 * 2); + unk_2000000.var_1FFFF += 1; + break; + case 5: + LoadCompressedObjectPic(&gUnknown_083C1F74); + unk_2000000.var_1FFFF += 1; + break; + case 6: + LoadCompressedObjectPalette(&gUnknown_083C1F7C); + unk_2000000.var_1FFFF = 0; + return TRUE; + } + + return FALSE; +} + +static void sub_814640C(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(sub_80A5B40); + sub_80A7DD4(); + gpu_pal_allocator_reset__manage_upper_four(); + DestroyTask(taskId); + } +} + +static void sub_8146440(u8 taskId) +{ + PlaySE(SE_SELECT); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskId].func = sub_814640C; +} + +static void sub_8146480(u8 taskid) +{ + if (!gPaletteFade.active) + { + if ((gMain.newAndRepeatedKeys & (DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN)) == DPAD_UP) + sub_81466E8(taskid, -1); + if ((gMain.newAndRepeatedKeys & (DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN)) == DPAD_DOWN) + sub_81466E8(taskid, 1); + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + sub_8146440(taskid); + } +} + +static void sub_81464E4(void) +{ + const struct Berry *berryInfo; +#ifdef UNITS_IMPERIAL + u32 size; + s32 sizeMajor; + s32 sizeMinor; +#endif +#if GERMAN + u8 buffer[16]; +#endif + + berryInfo = GetBerryInfo(gScriptItemId + OFFSET_7B + 1); + + ConvertIntToDecimalStringN(gStringVar1, gScriptItemId - FIRST_BERRY + 1, STR_CONV_MODE_LEADING_ZEROS, 2); + MenuPrint(gStringVar1, 12, 4); + +#if ENGLISH + MenuPrint(berryInfo->name, 14, 4); +#elif GERMAN + StringCopy(buffer, berryInfo->name); + StringAppend(buffer, gOtherText_Berry2); + MenuPrint(buffer, 14, 4); +#endif + + MenuPrint(berryInfo->description1, 4, 14); + MenuPrint(berryInfo->description2, 4, 16); + +#ifdef UNITS_IMPERIAL + size = (berryInfo->size * 1000) / 254; + if (size % 10 >= 5) + size += 10; + sizeMinor = (size % 100) / 10; + sizeMajor = size / 100; +#endif + + MenuPrint(gOtherText_Size, 11, 7); + if (berryInfo->size != 0) + { +#ifdef UNITS_IMPERIAL + ConvertIntToDecimalStringN(gStringVar1, sizeMajor, STR_CONV_MODE_LEFT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar2, sizeMinor, STR_CONV_MODE_LEFT_ALIGN, 2); +#else + ConvertIntToDecimalStringN(gStringVar1, berryInfo->size / 10, STR_CONV_MODE_LEFT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar2, berryInfo->size % 10, STR_CONV_MODE_LEFT_ALIGN, 2); +#endif + MenuPrint(gContestStatsText_Unknown1, 16, 7); + } + else + { + MenuPrint(gOtherText_ThreeQuestions2, 16, 7); + } + + MenuPrint(gOtherText_Firm, 11, 9); + if (berryInfo->firmness != 0) + MenuPrint(gUnknown_0841192C[berryInfo->firmness - 1], 16, 9); + else + MenuPrint(gOtherText_ThreeQuestions2, 16, 9); +} + +static void sub_8146600(u8 berry) +{ + const struct Berry *berryInfo; + u16 i; + + berryInfo = GetBerryInfo(berry + 1); + for (i = 0; i < 5; i++) + gUnknown_0203932E[i] = (u16)gUnknown_0203932E[i] | 0xFFFF; + + // argument is the center of the circle + if (berryInfo->spicy) + gUnknown_0203932E[0] = sub_80A7E5C(48); + if (berryInfo->dry) + gUnknown_0203932E[1] = sub_80A7E5C(88); + if (berryInfo->sweet) + gUnknown_0203932E[2] = sub_80A7E5C(128); + if (berryInfo->bitter) + gUnknown_0203932E[3] = sub_80A7E5C(168); + if (berryInfo->sour) + gUnknown_0203932E[4] = sub_80A7E5C(208); +} + +void sub_81466A0(void) +{ + u16 i; + + for (i = 0; i < 5; i++) + { + if (gUnknown_0203932E[i] != -1) + { + DestroySprite(&gSprites[gUnknown_0203932E[i]]); + gUnknown_0203932E[i] = -1; + } + } +} + +__attribute__((naked)) +static void sub_81466E8(u8 taskId, s8 direction) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + lsls r1, 24\n\ + lsrs r2, r1, 24\n\ + lsls r0, r7, 2\n\ + adds r0, r7\n\ + lsls r0, 3\n\ + ldr r1, _08146748 @ =gTasks + 0x8\n\ + adds r6, r0, r1\n\ + ldr r4, _0814674C @ =gBagPocketScrollStates\n\ + movs r0, 0xC\n\ + adds r0, r4\n\ + mov r8, r0\n\ + ldrb r1, [r0, 0x1]\n\ + ldrb r0, [r4, 0xC]\n\ + adds r1, r0\n\ + cmp r1, 0\n\ + bne _08146718\n\ + lsls r0, r2, 24\n\ + cmp r0, 0\n\ + blt _0814678C\n\ +_08146718:\n\ + adds r0, r1, 0x1\n\ + lsls r5, r2, 24\n\ + mov r1, r8\n\ + ldrb r1, [r1, 0x2]\n\ + cmp r0, r1\n\ + bne _08146728\n\ + cmp r5, 0\n\ + bgt _0814678C\n\ +_08146728:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + mov r2, r8\n\ + ldrb r3, [r2, 0x1]\n\ + ldrb r4, [r4, 0xC]\n\ + mov r12, r4\n\ + adds r0, r3, r4\n\ + asrs r2, r5, 24\n\ + adds r1, r0, r2\n\ + cmp r1, 0\n\ + bge _08146750\n\ + negs r0, r0\n\ + strh r0, [r6, 0x2]\n\ + b _08146766\n\ + .align 2, 0\n\ +_08146748: .4byte gTasks + 0x8\n\ +_0814674C: .4byte gBagPocketScrollStates\n\ +_08146750:\n\ + mov r4, r8\n\ + ldrb r0, [r4, 0x2]\n\ + cmp r1, r0\n\ + blt _08146764\n\ + subs r0, r3\n\ + mov r1, r12\n\ + subs r0, r1\n\ + subs r0, 0x1\n\ + strh r0, [r6, 0x2]\n\ + b _08146766\n\ +_08146764:\n\ + strh r2, [r6, 0x2]\n\ +_08146766:\n\ + ldr r0, _08146780 @ =gTasks\n\ + lsls r1, r7, 2\n\ + adds r1, r7\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldr r0, _08146784 @ =sub_8146798\n\ + str r0, [r1]\n\ + cmp r5, 0\n\ + bge _08146788\n\ + movs r2, 0x10\n\ + negs r2, r2\n\ + adds r0, r2, 0\n\ + b _0814678A\n\ + .align 2, 0\n\ +_08146780: .4byte gTasks\n\ +_08146784: .4byte sub_8146798\n\ +_08146788:\n\ + movs r0, 0x10\n\ +_0814678A:\n\ + strh r0, [r6]\n\ +_0814678C:\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} + +void sub_8146798(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + gUnknown_030041B4 = (gUnknown_030041B4 + taskData[0]) & 0xFF; + if ((taskData[0] > 0 && gUnknown_030041B4 == 144) + || (taskData[0] < 0 && gUnknown_030041B4 == 112)) + { + sub_8146810(gTasks[taskId].data[1]); + sub_81468BC(); + } + if (gUnknown_030041B4 == 0) + { + gTasks[taskId].data[0] = gUnknown_030041B4; + gTasks[taskId].data[1] = gUnknown_030041B4; + gTasks[taskId].func = sub_8146480; + } +} + +__attribute__((naked)) +static void sub_8146810(s8 berry) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + adds r4, r3, 0\n\ + lsls r0, r3, 24\n\ + asrs r1, r0, 24\n\ + cmp r1, 0\n\ + ble _08146848\n\ + ldr r0, _08146840 @ =gBagPocketScrollStates\n\ + adds r4, r0, 0\n\ + adds r4, 0xC\n\ + ldrb r2, [r0, 0xC]\n\ + adds r1, r2, r1\n\ + adds r6, r0, 0\n\ + cmp r1, 0x7\n\ + ble _08146844\n\ + adds r0, r3, 0\n\ + adds r0, 0xF9\n\ + adds r0, r2, r0\n\ + ldrb r1, [r4, 0x1]\n\ + adds r0, r1\n\ + strb r0, [r4, 0x1]\n\ + movs r0, 0x7\n\ + b _0814686E\n\ + .align 2, 0\n\ +_08146840: .4byte gBagPocketScrollStates\n\ +_08146844:\n\ + adds r0, r2, r3\n\ + b _0814686E\n\ +_08146848:\n\ + ldr r0, _08146868 @ =gBagPocketScrollStates\n\ + adds r5, r0, 0\n\ + adds r5, 0xC\n\ + ldrb r2, [r0, 0xC]\n\ + adds r1, r2, r1\n\ + adds r6, r0, 0\n\ + cmp r1, 0\n\ + bge _0814686C\n\ + adds r0, r2, r3\n\ + ldrb r1, [r5, 0x1]\n\ + adds r0, r1\n\ + movs r1, 0\n\ + strb r0, [r5, 0x1]\n\ + strb r1, [r6, 0xC]\n\ + b _08146870\n\ + .align 2, 0\n\ +_08146868: .4byte gBagPocketScrollStates\n\ +_0814686C:\n\ + adds r0, r2, r4\n\ +_0814686E:\n\ + strb r0, [r6, 0xC]\n\ +_08146870:\n\ + ldr r2, _081468AC @ =gScriptItemId\n\ + movs r0, 0x3\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldrb r1, [r0, 0x1]\n\ + ldrb r0, [r0]\n\ + adds r1, r0\n\ + ldr r0, _081468B0 @ =gCurrentBagPocketItemSlots\n\ + ldr r0, [r0]\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldrh r0, [r1]\n\ + strh r0, [r2]\n\ + ldr r0, _081468B4 @ =gUnknown_0203932C\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r1, _081468B8 @ =gSprites\n\ + adds r0, r1\n\ + bl DestroySprite\n\ + bl sub_81466A0\n\ + bl sub_80A7DD4\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081468AC: .4byte gScriptItemId\n\ +_081468B0: .4byte gCurrentBagPocketItemSlots\n\ +_081468B4: .4byte gUnknown_0203932C\n\ +_081468B8: .4byte gSprites\n\ + .syntax divided\n"); +} + +static void sub_81468BC(void) +{ + MenuZeroFillWindowRect(0, 4, 29, 19); + sub_81464E4(); + + // center of berry sprite + gUnknown_0203932C = CreateBerrySprite(gScriptItemId + OFFSET_7B, 56, 64); + + sub_8146600(gScriptItemId + OFFSET_7B); +} diff --git a/src/field/bike.c b/src/field/bike.c new file mode 100644 index 000000000..58a4f38f4 --- /dev/null +++ b/src/field/bike.c @@ -0,0 +1,1013 @@ +#include "global.h" +#include "bike.h" +#include "field_map_obj.h" +#include "field_player_avatar.h" +#include "fieldmap.h" +#include "flags.h" +#include "global.fieldmap.h" +#include "metatile_behavior.h" +#include "rom4.h" +#include "songs.h" +#include "sound.h" + +extern u8 sub_80608A4(u8); + +extern u8 gUnknown_02039250; +extern u8 gUnknown_02039251; +extern u8 gUnknown_0202E854; + +static void MovePlayerOnMachBike(u8, u16, u16); +static u8 GetMachBikeTransition(u8 *); +static void MachBikeTransition_FaceDirection(u8); +static void MachBikeTransition_80E517C(u8); +static void MachBikeTransition_80E51C4(u8); +static void MachBikeTransition_80E5270(u8); +static void MovePlayerOnAcroBike(u8, u16, u16); +static u8 CheckMovementInputAcroBike(u8 *, u16, u16); +static u8 AcroBikeHandleInputNormal(u8 *, u16, u16); +static u8 AcroBikeHandleInputTurning(u8 *, u16, u16); +static u8 AcroBikeHandleInputWheelieStanding(u8 *, u16, u16); +static u8 AcroBikeHandleInputBunnyHop(u8 *, u16, u16); +static u8 AcroBikeHandleInputWheelieMoving(u8 *, u16, u16); +static u8 AcroBikeHandleInputState5(u8 *, u16, u16); +static u8 AcroBikeHandleInputState6(u8 *, u16, u16); +static void AcroBikeTransition_FaceDirection(u8); +static void AcroBikeTransition_80E5708(u8); +static void AcroBikeTransition_80E5744(u8); +static void AcroBikeTransition_NormalToWheelie(u8); +static void AcroBikeTransition_80E57F8(u8); +static void AcroBikeTransition_80E5834(u8); +static void AcroBikeTransition_80E5870(u8); +static void AcroBikeTransition_80E58AC(u8); +static void AcroBikeTransition_80E5920(u8); +static void AcroBikeTransition_80E5990(u8); +static void AcroBikeTransition_80E59A0(u8); +static void AcroBikeTransition_80E5A30(u8); +static void AcroBikeTransition_80E5AC0(u8); +static void sub_80E5B60(u16, u16); +static u8 sub_80E5C2C(void); +static void sub_80E5C7C(u8); +static void sub_80E5CB8(u8); +static u8 sub_80E5CF4(u16); +static u8 get_some_collision(u8); +static u8 sub_80E5DA0(struct MapObject *, s16, s16, u8, u8); +static bool8 IsRunningDisallowedByMetatile(u8); +static void sub_80E5E4C(); +static u8 CanBikeFaceDirOnMetatile(u8, u8); +static bool8 sub_80E5EC0(u8, u8); +static void sub_80E6024(void); + +static void (*const sMachBikeTransitions[])(u8) = +{ + MachBikeTransition_FaceDirection, + MachBikeTransition_80E517C, + MachBikeTransition_80E51C4, + MachBikeTransition_80E5270, +}; + +static void (*const gUnknown_083DB5A4[])(u8) = +{ + PlayerGoSpeed0, + sub_80593C4, + sub_80593F4, +}; + +static void (*const sAcroBikeTransitions[])(u8) = +{ + AcroBikeTransition_FaceDirection, + AcroBikeTransition_80E5708, + AcroBikeTransition_80E5744, + AcroBikeTransition_NormalToWheelie, + AcroBikeTransition_80E57F8, + AcroBikeTransition_80E5834, + AcroBikeTransition_80E5870, + AcroBikeTransition_80E58AC, + AcroBikeTransition_80E5920, + AcroBikeTransition_80E5990, + AcroBikeTransition_80E59A0, + AcroBikeTransition_80E5A30, + AcroBikeTransition_80E5AC0, +}; + +static u8 (*const sAcroBikeInputHandlers[])(u8 *, u16, u16) = +{ + AcroBikeHandleInputNormal, + AcroBikeHandleInputTurning, + AcroBikeHandleInputWheelieStanding, + AcroBikeHandleInputBunnyHop, + AcroBikeHandleInputWheelieMoving, + AcroBikeHandleInputState5, + AcroBikeHandleInputState6, +}; + +const u16 gMachBikeSpeeds[] = {SPEED_NORMAL, SPEED_FAST, SPEED_FASTEST}; +static const u8 Unknown_3DB606[] = {4, 0}; + +static const struct UnknownStruct1 gUnknown_083DB608[] = +{ + {1, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 1}, + {2, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 2}, + {3, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 3}, + {4, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 4}, +}; + +void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys) +{ + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE) + MovePlayerOnMachBike(direction, newKeys, heldKeys); + else + MovePlayerOnAcroBike(direction, newKeys, heldKeys); +} + +static void MovePlayerOnMachBike(u8 direction, u16 newKeys, u16 heldKeys) +{ + sMachBikeTransitions[GetMachBikeTransition(&direction)](direction); +} + +static u8 GetMachBikeTransition(u8 *ptr) +{ + u8 direction = player_get_direction_upper_nybble(); + + if (*ptr == 0) + { + *ptr = direction; + if (gPlayerAvatar.unkB == 0) + { + gPlayerAvatar.running2 = 0; + return 0; + } + gPlayerAvatar.running2 = 2; + return 3; + } + + if (*ptr != direction && gPlayerAvatar.running2 != 2) + { + if (gPlayerAvatar.unkB != 0) + { + *ptr = direction; + gPlayerAvatar.running2 = 2; + return 3; + } + gPlayerAvatar.running2 = 1; + return 1; + } + else + { + gPlayerAvatar.running2 = 2; + return 2; + } +} + +static void MachBikeTransition_FaceDirection(u8 direction) +{ + PlayerFaceDirection(direction); + sub_80E6024(); +} + +static void MachBikeTransition_80E517C(u8 direction) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E)) + { + PlayerTurnInPlace(direction); + sub_80E6024(); + } + else + { + MachBikeTransition_FaceDirection(playerMapObj->mapobj_unk_18); + } +} + +static void MachBikeTransition_80E51C4(u8 direction) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + u8 collision; + + if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) + { + if (gPlayerAvatar.unkB) + MachBikeTransition_80E5270(playerMapObj->placeholder18); + else + MachBikeTransition_FaceDirection(playerMapObj->placeholder18); + } + else + { + collision = get_some_collision(direction); + if (collision > 0 && collision < 12) + { + if (collision == COLLISION_LEDGE_JUMP) + { + PlayerJumpLedge(direction); + } + else + { + sub_80E6024(); + if (collision < 5 || collision > 8) + PlayerOnBikeCollide(direction); + } + } + else + { + gUnknown_083DB5A4[gPlayerAvatar.bikeFrameCounter](direction); + gPlayerAvatar.unkB = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // same as dividing by 2, but compiler is insistent on >> 1 + if (gPlayerAvatar.bikeFrameCounter < 2) // do not go faster than the last element in the mach bike array + gPlayerAvatar.bikeFrameCounter++; + } + } +} + +static void MachBikeTransition_80E5270(u8 var) +{ + u8 collision; + + if (gPlayerAvatar.unkB != 0) + gPlayerAvatar.bikeFrameCounter = --gPlayerAvatar.unkB; + + collision = get_some_collision(var); + + if (collision > 0 && collision < 12) + { + if (collision == COLLISION_LEDGE_JUMP) + { + PlayerJumpLedge(var); + } + else + { + sub_80E6024(); + if (collision < 5 || collision > 8) + PlayerOnBikeCollide(var); + } + } + else + { + gUnknown_083DB5A4[gPlayerAvatar.bikeFrameCounter](var); + } +} + +static void MovePlayerOnAcroBike(u8 newDirection, u16 newKeys, u16 heldKeys) +{ + sAcroBikeTransitions[CheckMovementInputAcroBike(&newDirection, newKeys, heldKeys)](newDirection); +} + +static u8 CheckMovementInputAcroBike(u8 *newDirection, u16 newKeys, u16 heldKeys) +{ + return sAcroBikeInputHandlers[gPlayerAvatar.acroBikeState](newDirection, newKeys, heldKeys); +} + +static u8 AcroBikeHandleInputNormal(u8 *newDirection, u16 newKeys, u16 heldKeys) +{ + u8 direction = player_get_direction_upper_nybble(); + + gPlayerAvatar.bikeFrameCounter = 0; + if (*newDirection == DIR_NONE) + { + if (newKeys & B_BUTTON) + { + //We're standing still with the B button held. + //Do a wheelie. + *newDirection = direction; + gPlayerAvatar.running2 = 0; + gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; + return ACRO_TRANS_NORMAL_TO_WHEELIE; + } + else + { + *newDirection = direction; + gPlayerAvatar.running2 = 0; + return ACRO_TRANS_FACE_DIRECTION; + } + } + if (*newDirection == direction && (heldKeys & B_BUTTON) && gPlayerAvatar.unkB == 0) + { + gPlayerAvatar.unkB++; + gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_MOVING; + return 11; + } + if (*newDirection != direction && gPlayerAvatar.running2 != 2) + { + gPlayerAvatar.acroBikeState = ACRO_STATE_TURNING; + gPlayerAvatar.unk9 = *newDirection; + gPlayerAvatar.running2 = 0; + return CheckMovementInputAcroBike(newDirection, newKeys, heldKeys); + } + gPlayerAvatar.running2 = 2; + return 2; +} + +static u8 AcroBikeHandleInputTurning(u8 *newDirection, u16 newKeys, u16 heldKeys) +{ + u8 direction; + + *newDirection = gPlayerAvatar.unk9; + gPlayerAvatar.bikeFrameCounter++; + + //Wait 6 frames before actually changing direction + if (gPlayerAvatar.bikeFrameCounter > 6) + { + gPlayerAvatar.running2 = 1; + gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; + sub_80E6024(); + return 1; + } + direction = player_get_direction_upper_nybble(); + if (*newDirection == sub_80E5C2C()) + { + sub_80E6024(); + gPlayerAvatar.unkB = 1; + if (*newDirection == GetOppositeDirection(direction)) + { + gPlayerAvatar.acroBikeState = ACRO_STATE_6; + return 9; + } + else + { + gPlayerAvatar.running2 = 2; + gPlayerAvatar.acroBikeState = ACRO_STATE_5; + return 8; + } + } + *newDirection = direction; + return 0; +} + +static u8 AcroBikeHandleInputWheelieStanding(u8 *ptr, u16 newKeys, u16 heldKeys) +{ + u8 direction; + struct MapObject *playerMapObj; + + direction = player_get_direction_upper_nybble(); + playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + gPlayerAvatar.running2 = 0; + + if (heldKeys & B_BUTTON) + gPlayerAvatar.bikeFrameCounter++; + else + { + //B button was released. + gPlayerAvatar.bikeFrameCounter = 0; + if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) + { + //Go back to normal on flat ground + *ptr = direction; + gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; + sub_80E6024(); + return 4; + } + } + if (gPlayerAvatar.bikeFrameCounter >= 40) + { + *ptr = direction; + gPlayerAvatar.acroBikeState = ACRO_STATE_BUNNY_HOP; + sub_80E6024(); + return 6; + } + if (*ptr == direction) + { + gPlayerAvatar.running2 = 2; + gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_MOVING; + sub_80E6024(); + return 10; + } + if (*ptr == 0) + { + *ptr = direction; + return 5; + } + gPlayerAvatar.running2 = 1; + return 5; +} + +static u8 AcroBikeHandleInputBunnyHop(u8 *ptr, u16 newKeys, u16 heldKeys) +{ + u8 direction; + struct MapObject *playerMapObj; + + direction = player_get_direction_upper_nybble(); + playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (!(heldKeys & B_BUTTON)) + { + //B button was released + sub_80E6024(); + if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) + { + //Do a standing wheelie on a bumpy slope + gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; + return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); + } + else + { + //Go back to normal on flat ground + *ptr = direction; + gPlayerAvatar.running2 = 0; + gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; + return 4; + } + } + + //B Button is still held + + if (*ptr == DIR_NONE) + { + *ptr = direction; + gPlayerAvatar.running2 = 0; + return 6; + } + if (*ptr != direction && gPlayerAvatar.running2 != 2) + { + gPlayerAvatar.running2 = 1; + return 6; + } + gPlayerAvatar.running2 = 2; + return 7; +} + +static u8 AcroBikeHandleInputWheelieMoving(u8 *ptr, u16 newKeys, u16 heldKeys) +{ + u8 direction; + struct MapObject *playerMapObj; + + direction = player_get_direction_lower_nybble(); + playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (!(heldKeys & B_BUTTON)) + { + sub_80E6024(); + if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) + { + gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; + if (*ptr == 0) + { + *ptr = direction; + gPlayerAvatar.running2 = 0; + return 4; + } + if (*ptr != direction && gPlayerAvatar.running2 != 2) + { + gPlayerAvatar.running2 = 0; + return 4; + } + gPlayerAvatar.running2 = 2; + return 12; + } + gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; + return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); + } + if (*ptr == 0) + { + *ptr = direction; + gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; + gPlayerAvatar.running2 = 0; + sub_80E6024(); + return 5; + } + if (direction != *ptr && gPlayerAvatar.running2 != 2) + { + gPlayerAvatar.running2 = 0; + return 5; + } + gPlayerAvatar.running2 = 2; + return 10; +} + +static u8 AcroBikeHandleInputState5(u8 *ptr, u16 newKeys, u16 heldKeys) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + playerMapObj->mapobj_bit_9 = 0; + FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18); + gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; + return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); +} + +static u8 AcroBikeHandleInputState6(u8 *ptr, u16 newKeys, u16 heldKeys) +{ + gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; + return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); +} + +static void AcroBikeTransition_FaceDirection(u8 direction) +{ + PlayerFaceDirection(direction); +} + +static void AcroBikeTransition_80E5708(u8 direction) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) + direction = playerMapObj->placeholder18; + PlayerFaceDirection(direction); +} + +static void AcroBikeTransition_80E5744(u8 direction) +{ + u8 collision; + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) + { + AcroBikeTransition_FaceDirection(playerMapObj->placeholder18); + return; + } + collision = get_some_collision(direction); + if (collision > 0 && collision < 12) + { + if (collision == COLLISION_LEDGE_JUMP) + PlayerJumpLedge(direction); + else if (collision < 5 || collision > 8) + PlayerOnBikeCollide(direction); + } + else + { + npc_use_some_d2s(direction); + } +} + +static void AcroBikeTransition_NormalToWheelie(u8 direction) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) + direction = playerMapObj->placeholder18; + PlayerStartWheelie(direction); +} + +static void AcroBikeTransition_80E57F8(u8 direction) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) + direction = playerMapObj->placeholder18; + sub_8059534(direction); +} + +static void AcroBikeTransition_80E5834(u8 direction) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) + direction = playerMapObj->placeholder18; + sub_8059504(direction); +} + +static void AcroBikeTransition_80E5870(u8 direction) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) + direction = playerMapObj->placeholder18; + sub_805954C(direction); +} + +static void AcroBikeTransition_80E58AC(u8 direction) +{ + u8 var; + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) + { + AcroBikeTransition_80E5870(playerMapObj->placeholder18); + return; + } + var = get_some_collision(direction); + //TODO: Try to get rid of this goto + if (var == 0 || var == 9) + { + goto derp; + } + else if (var == 6) + { + sub_8059594(direction); + } + else if (var < 5 || var > 8) + { + if (var <= 11) + { + AcroBikeTransition_80E5870(direction); + } + else + { + derp: + sub_8059570(direction); + } + } +} + +static void AcroBikeTransition_80E5920(u8 direction) +{ + u8 var; + struct MapObject *playerMapObj; + + var = get_some_collision(direction); + if (var != 0) + { + if (var == 7) + return; + if (var < 10) + { + AcroBikeTransition_80E5708(direction); + return; + } + if (sub_80E5EC0(var, direction) == 0) + { + AcroBikeTransition_80E5708(direction); + return; + } + } + playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + PlaySE(SE_JITE_PYOKO); + playerMapObj->mapobj_bit_9 = 1; + PlayerSetAnimId(sub_80608A4(direction), 2); +} + +static void AcroBikeTransition_80E5990(u8 direction) +{ + sub_80595B8(direction); +} + +static void AcroBikeTransition_80E59A0(u8 direction) +{ + u8 var; + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) + { + sub_8059504(playerMapObj->placeholder18); + return; + } + var = get_some_collision(direction); + if (var > 0 && var < 12) + { + if (var == 6) + { + sub_8059594(direction); + } + else if (var == 9) + { + sub_8059504(direction); + } + else if (var <= 4) + { + if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) + sub_8059504(direction); + else + sub_80595DC(direction); //hit wall? + } + return; + } + sub_8059618(direction); + gPlayerAvatar.running2 = 2; +} + +static void AcroBikeTransition_80E5A30(u8 direction) +{ + u8 var; + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) + { + PlayerStartWheelie(playerMapObj->placeholder18); + return; + } + var = get_some_collision(direction); + if (var > 0 && var < 12) + { + if (var == 6) + { + sub_8059594(direction); + } + else if (var == 9) + { + sub_8059504(direction); + } + else if (var <= 4) + { + if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) + sub_8059504(direction); + else + sub_80595DC(direction); //hit wall? + } + return; + } + sub_8059600(direction); + gPlayerAvatar.running2 = 2; +} + +static void AcroBikeTransition_80E5AC0(u8 direction) +{ + u8 var; + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) + { + sub_8059534(playerMapObj->placeholder18); + return; + } + var = get_some_collision(direction); + if (var > 0 && var < 12) + { + if (var == 6) + PlayerJumpLedge(direction); + else if (var < 5 || var > 8) + sub_8059534(direction); + return; + } + sub_8059630(direction); +} + +void sub_80E5B38(u16 a, u16 b) +{ + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE) + sub_80E5B60(a, b); +} + +static void sub_80E5B60(u16 unused, u16 b) +{ + u8 var; + + var = sub_80E5CF4(b); + if (var == (gPlayerAvatar.unkC & 0xF)) + { + if (gPlayerAvatar.unk14[0] < 0xFF) + gPlayerAvatar.unk14[0]++; + } + else + { + sub_80E5C7C(var); + gPlayerAvatar.unkB = 0; + } + + var = b & 0xF; + if (var == (gPlayerAvatar.unk10 & 0xF)) + { + if (gPlayerAvatar.unk1C[0] < 0xFF) + gPlayerAvatar.unk1C[0]++; + } + else + { + sub_80E5CB8(var); + gPlayerAvatar.unkB = 0; + } +} + +static bool8 sub_80E5BC8(const u8 *a, const u8 *b) +{ + u8 i; + + for (i = 0; a[i] != 0; i++) + { + if (gPlayerAvatar.unk14[i] > a[i]) + return FALSE; + } + for (i = 0; b[i] != 0; i++) + { + if (gPlayerAvatar.unk1C[i] > b[i]) + return FALSE; + } + return TRUE; +} + +static u8 sub_80E5C2C(void) +{ + u32 i; + + for (i = 0; i < 4; i++) + { + const struct UnknownStruct1 *s = &gUnknown_083DB608[i]; + u32 r1 = gPlayerAvatar.unkC; + u32 r2 = gPlayerAvatar.unk10; + + r1 &= s->unk8; + r2 &= s->unkC; + if (r1 == s->unk0 && r2 == s->unk4 && sub_80E5BC8(s->unk10, s->unk14)) + return s->unk18; + } + return 0; +} + +static void sub_80E5C7C(u8 a) +{ + u8 i; + + gPlayerAvatar.unkC = (gPlayerAvatar.unkC << 4) | (a & 0xF); + + for (i = 7; i != 0; i--) + gPlayerAvatar.unk14[i] = gPlayerAvatar.unk14[i - 1]; + gPlayerAvatar.unk14[0] = 1; +} + +static void sub_80E5CB8(u8 a) +{ + u8 i; + + gPlayerAvatar.unk10 = (gPlayerAvatar.unk10 << 4) | (a & 0xF); + + for (i = 7; i != 0; i--) + gPlayerAvatar.unk1C[i] = gPlayerAvatar.unk1C[i - 1]; + gPlayerAvatar.unk1C[0] = 1; +} + +static u8 sub_80E5CF4(u16 a) +{ + if (a & 0x40) + return 2; + if (a & 0x80) + return 1; + if (a & 0x20) + return 3; + if (a & 0x10) + return 4; + return 0; +} + +static u8 get_some_collision(u8 direction) +{ + s16 x; + s16 y; + u8 metatitleBehavior; + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + x = playerMapObj->coords2.x; + y = playerMapObj->coords2.y; + MoveCoords(direction, &x, &y); + metatitleBehavior = MapGridGetMetatileBehaviorAt(x, y); + return sub_80E5DA0(playerMapObj, x, y, direction, metatitleBehavior); +} + +static u8 sub_80E5DA0(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior) +{ + u8 collision = CheckForFieldObjectCollision(mapObject, x, y, direction, metatitleBehavior); + + if (collision > 4) + return collision; + + if (collision == 0 && IsRunningDisallowedByMetatile(metatitleBehavior)) + collision = 2; + + if (collision) + sub_80E5E4C(); + + return collision; +} + +bool8 IsRunningDisallowed(u8 tile) +{ + if (IsRunningDisallowedByMetatile(tile) != FALSE || gMapHeader.mapType == MAP_TYPE_INDOOR) + return TRUE; + else + return FALSE; +} + +static bool8 IsRunningDisallowedByMetatile(u8 tile) +{ + if (MetatileBehavior_IsRunningDisallowed(tile)) + return TRUE; + if (MetatileBehavior_IsFortreeBridge(tile) && (PlayerGetZCoord() & 1) == 0) + return TRUE; + return FALSE; +} + +static void sub_80E5E4C(void) +{ + if (gUnknown_02039250 != 0 && gUnknown_02039251 < 100) + gUnknown_02039251++; +} + +static bool8 CanBikeFaceDirOnMetatile(u8 direction, u8 tile) +{ + if (direction == DIR_EAST || direction == DIR_WEST) + { + //Bike cannot face east or west on a vertical rail + if (MetatileBehavior_IsIsolatedVerticalRail(tile) + || MetatileBehavior_IsVerticalRail(tile)) + return FALSE; + } + else + { + //Bike cannot face north or south on a horizontal rail + if (MetatileBehavior_IsIsolatedHorizontalRail(tile) + || MetatileBehavior_IsHorizontalRail(tile)) + return FALSE; + } + return TRUE; +} + +static bool8 sub_80E5EC0(u8 var1, u8 direction) +{ + if (direction == DIR_NORTH || direction == DIR_SOUTH) + { + if (var1 == 10 || var1 == 12) + return FALSE; + } + else if (var1 == 11 || var1 == 13) + { + return FALSE; + } + + return TRUE; +} + +bool8 IsBikingDisallowedByPlayer(void) +{ + s16 x, y; + u8 tileBehavior; + + if (!(gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_4))) + { + PlayerGetDestCoords(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + if (!IsRunningDisallowedByMetatile(tileBehavior)) + return FALSE; + } + return TRUE; +} + +bool8 player_should_look_direction_be_enforced_upon_movement(void) +{ + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE) != FALSE && MetatileBehavior_IsBumpySlope(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E) != FALSE) + return FALSE; + else + return TRUE; +} + +void GetOnOffBike(u8 var) +{ + gUnknown_0202E854 = 0; + + if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) + { + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); + sav1_reset_battle_music_maybe(); + sub_8053E90(); + } + else + { + SetPlayerAvatarTransitionFlags(var); + sav1_set_battle_music_maybe(BGM_CYCLING); + sub_8053FB0(BGM_CYCLING); + } +} + +void BikeClearState(int var1, int var2) +{ + u8 i; + + gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; + gPlayerAvatar.unk9 = 0; + gPlayerAvatar.bikeFrameCounter = 0; + gPlayerAvatar.unkB = 0; + gPlayerAvatar.unkC = var1; + gPlayerAvatar.unk10 = var2; + + for (i = 0; i < 8; i++) + gPlayerAvatar.unk14[i] = 0; + + for (i = 0; i < 8; i++) + gPlayerAvatar.unk1C[i] = 0; +} + +void sub_80E6010(u8 var) +{ + gPlayerAvatar.bikeFrameCounter = var; + gPlayerAvatar.unkB = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // lazy way of multiplying by 1.5. +} + +static void sub_80E6024(void) +{ + gPlayerAvatar.bikeFrameCounter = 0; + gPlayerAvatar.unkB = 0; +} + +s16 GetPlayerSpeed(void) +{ + // because the player pressed a direction, it won't ever return a speed of 0 since this function returns the player's current speed. + s16 machSpeeds[3]; + + memcpy(machSpeeds, gMachBikeSpeeds, sizeof(machSpeeds)); + + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE) + return machSpeeds[gPlayerAvatar.bikeFrameCounter]; + else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE) + return SPEED_FASTER; + else if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_DASH)) + return SPEED_FAST; + else + return SPEED_NORMAL; +} + +void sub_80E6084(void) +{ + s16 x, y; + u8 tileBehavior; + + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE) + { + PlayerGetDestCoords(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + if (MetatileBehavior_IsBumpySlope(tileBehavior)) + { + gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; + sub_8059C94(player_get_direction_upper_nybble()); + } + } +} diff --git a/src/field/birch_pc.c b/src/field/birch_pc.c new file mode 100644 index 000000000..5fb6427c3 --- /dev/null +++ b/src/field/birch_pc.c @@ -0,0 +1,114 @@ +#include "global.h" +#include "event_data.h" +#include "field_message_box.h" +#include "pokedex.h" +#include "species.h" + +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u16 gSpecialVar_0x8006; + +extern const u8 gBirchDexRatingText_LessThan10[]; +extern const u8 gBirchDexRatingText_LessThan20[]; +extern const u8 gBirchDexRatingText_LessThan30[]; +extern const u8 gBirchDexRatingText_LessThan40[]; +extern const u8 gBirchDexRatingText_LessThan50[]; +extern const u8 gBirchDexRatingText_LessThan60[]; +extern const u8 gBirchDexRatingText_LessThan70[]; +extern const u8 gBirchDexRatingText_LessThan80[]; +extern const u8 gBirchDexRatingText_LessThan90[]; +extern const u8 gBirchDexRatingText_LessThan100[]; +extern const u8 gBirchDexRatingText_LessThan110[]; +extern const u8 gBirchDexRatingText_LessThan120[]; +extern const u8 gBirchDexRatingText_LessThan130[]; +extern const u8 gBirchDexRatingText_LessThan140[]; +extern const u8 gBirchDexRatingText_LessThan150[]; +extern const u8 gBirchDexRatingText_LessThan160[]; +extern const u8 gBirchDexRatingText_LessThan170[]; +extern const u8 gBirchDexRatingText_LessThan180[]; +extern const u8 gBirchDexRatingText_LessThan190[]; +extern const u8 gBirchDexRatingText_LessThan200[]; +extern const u8 gBirchDexRatingText_DexCompleted[]; + +bool16 ScriptGetPokedexInfo(void) +{ + if (gSpecialVar_0x8004 == 0) // is national dex not present? + { + gSpecialVar_0x8005 = GetHoennPokedexCount(0); + gSpecialVar_0x8006 = GetHoennPokedexCount(1); + } + else + { + gSpecialVar_0x8005 = GetNationalPokedexCount(0); + gSpecialVar_0x8006 = GetNationalPokedexCount(1); + } + + return IsNationalPokedexEnabled(); +} + +// This shows your Hoenn Pokedex rating and not your National Dex. +const u8 *GetPokedexRatingText(u16 count) +{ + if (count < 10) + return gBirchDexRatingText_LessThan10; + if (count < 20) + return gBirchDexRatingText_LessThan20; + if (count < 30) + return gBirchDexRatingText_LessThan30; + if (count < 40) + return gBirchDexRatingText_LessThan40; + if (count < 50) + return gBirchDexRatingText_LessThan50; + if (count < 60) + return gBirchDexRatingText_LessThan60; + if (count < 70) + return gBirchDexRatingText_LessThan70; + if (count < 80) + return gBirchDexRatingText_LessThan80; + if (count < 90) + return gBirchDexRatingText_LessThan90; + if (count < 100) + return gBirchDexRatingText_LessThan100; + if (count < 110) + return gBirchDexRatingText_LessThan110; + if (count < 120) + return gBirchDexRatingText_LessThan120; + if (count < 130) + return gBirchDexRatingText_LessThan130; + if (count < 140) + return gBirchDexRatingText_LessThan140; + if (count < 150) + return gBirchDexRatingText_LessThan150; + if (count < 160) + return gBirchDexRatingText_LessThan160; + if (count < 170) + return gBirchDexRatingText_LessThan170; + if (count < 180) + return gBirchDexRatingText_LessThan180; + if (count < 190) + return gBirchDexRatingText_LessThan190; + if (count < 200) + return gBirchDexRatingText_LessThan200; + if (count == 200) + { + if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1) + || GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // Jirachi or Deoxys is not counted towards the dex completion. If either of these flags are enabled, it means the actual count is less than 200. + return gBirchDexRatingText_LessThan200; + return gBirchDexRatingText_DexCompleted; + } + if (count == 201) + { + if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1) + && GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // If both of these flags are enabled, it means the actual count is less than 200. + return gBirchDexRatingText_LessThan200; + return gBirchDexRatingText_DexCompleted; + } + if (count == 202) + return gBirchDexRatingText_DexCompleted; // Hoenn dex is considered complete, even though the hoenn dex count is 210. + return gBirchDexRatingText_LessThan10; +} + +void ShowPokedexRatingMessage(void) +{ + ShowFieldMessage(GetPokedexRatingText(gSpecialVar_0x8004)); +} diff --git a/src/field/braille_puzzles.c b/src/field/braille_puzzles.c new file mode 100644 index 000000000..b8d7cd386 --- /dev/null +++ b/src/field/braille_puzzles.c @@ -0,0 +1,258 @@ +#include "global.h" +#include "braille_puzzles.h" +#include "event_data.h" +#include "field_camera.h" +#include "field_effect.h" +#include "fieldmap.h" +#include "flags.h" +#include "main.h" +#include "map_obj_lock.h" +#include "menu.h" +#include "rom6.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "species.h" +#include "task.h" +#include "text.h" + +extern u8 gPlayerPartyCount; +extern u8 gLastFieldPokeMenuOpened; + +extern u8 gIslandCave_EventScript_OpenRegiiceChamber[]; // regiice event script + +bool8 ShouldDoBrailleDigEffect(void) +{ + if (!FlagGet(SYS_BRAILLE_DIG) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x47)) + { + if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 3) + return TRUE; + else if (gSaveBlock1.pos.x == 9 && gSaveBlock1.pos.y == 3) + return TRUE; + else if (gSaveBlock1.pos.x == 11 && gSaveBlock1.pos.y == 3) + return TRUE; + } + + return FALSE; +} + +void DoBrailleDigEffect(void) +{ + MapGridSetMetatileIdAt(16, 8, 554); + MapGridSetMetatileIdAt(17, 8, 555); + MapGridSetMetatileIdAt(18, 8, 556); + MapGridSetMetatileIdAt(16, 9, 3634); + MapGridSetMetatileIdAt(17, 9, 563); + MapGridSetMetatileIdAt(18, 9, 3636); + DrawWholeMapView(); + PlaySE(SE_BAN); + FlagSet(SYS_BRAILLE_DIG); + ScriptContext2_Disable(); +} + +bool8 CheckRelicanthWailord(void) +{ + if (GetMonData(&gPlayerParty, MON_DATA_SPECIES2, 0) == SPECIES_RELICANTH) + { + CalculatePlayerPartyCount(); + + if (GetMonData(&gPlayerParty[gPlayerPartyCount - 1], MON_DATA_SPECIES2, 0) == SPECIES_WAILORD) + return TRUE; + } + return FALSE; +} + +bool8 ShouldDoBrailleStrengthEffect(void) +{ + if (!FlagGet(SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x6)) + { + if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 23) + return TRUE; + else if (gSaveBlock1.pos.x == 9 && gSaveBlock1.pos.y == 23) + return TRUE; + else if (gSaveBlock1.pos.x == 11 && gSaveBlock1.pos.y == 23) + return TRUE; + } + + return FALSE; +} + +void DoBrailleStrengthEffect(void) +{ + FieldEffectActiveListRemove(0x28); + MapGridSetMetatileIdAt(14, 26, 554); + MapGridSetMetatileIdAt(15, 26, 555); + MapGridSetMetatileIdAt(16, 26, 556); + MapGridSetMetatileIdAt(14, 27, 3634); + MapGridSetMetatileIdAt(15, 27, 563); + MapGridSetMetatileIdAt(16, 27, 3636); + DrawWholeMapView(); + PlaySE(SE_BAN); + FlagSet(SYS_BRAILLE_STRENGTH); + ScriptContext2_Disable(); +} + +bool8 ShouldDoBrailleFlyEffect(void) +{ + if (!FlagGet(SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x44)) + { + if (gSaveBlock1.pos.x == 8 && gSaveBlock1.pos.y == 25) + return TRUE; + } + + return FALSE; +} + +void DoBrailleFlyEffect(void) +{ + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + FieldEffectStart(0x3C); +} + +bool8 FldEff_UseFlyAncientTomb(void) +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (u32)UseFlyAncientTomb_Callback >> 16; + gTasks[taskId].data[9] = (u32)UseFlyAncientTomb_Callback; + return FALSE; +} + +void UseFlyAncientTomb_Callback(void) +{ + FieldEffectActiveListRemove(0x3C); + UseFlyAncientTomb_Finish(); +} + +void UseFlyAncientTomb_Finish(void) +{ + MapGridSetMetatileIdAt(14, 26, 554); + MapGridSetMetatileIdAt(15, 26, 555); + MapGridSetMetatileIdAt(16, 26, 556); + MapGridSetMetatileIdAt(14, 27, 3634); + MapGridSetMetatileIdAt(15, 27, 563); + MapGridSetMetatileIdAt(16, 27, 3636); + DrawWholeMapView(); + PlaySE(SE_BAN); + FlagSet(SYS_BRAILLE_FLY); + ScriptContext2_Disable(); +} + +void DoBrailleWait(void) +{ + if (!FlagGet(SYS_BRAILLE_WAIT)) + CreateTask(Task_BrailleWait, 0x50); +} + +void Task_BrailleWait(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + data[1] = 7200; + data[0] = 1; + break; + case 1: + if (BrailleWait_CheckButtonPress() != FALSE) + { + MenuZeroFillScreen(); + PlaySE(5); + data[0] = 2; + } + else + { + data[1] = data[1] - 1; + if (data[1] == 0) + { + MenuZeroFillScreen(); + data[0] = 3; + data[1] = 30; + } + } + break; + case 2: + if (BrailleWait_CheckButtonPress() == FALSE) + { + data[1] = data[1] - 1; + if (data[1] == 0) + data[0] = 4; + break; + } + sub_8064E2C(); + DestroyTask(taskId); + ScriptContext2_Disable(); + break; + case 3: + data[1] = data[1] - 1; + if (data[1] == 0) + data[0] = 4; + break; + case 4: + sub_8064E2C(); + ScriptContext1_SetupScript(gIslandCave_EventScript_OpenRegiiceChamber); + DestroyTask(taskId); + break; + } +} + +bool32 BrailleWait_CheckButtonPress(void) +{ + u16 var = 0xFF; + + if (gSaveBlock2.optionsButtonMode == 1) + var |= 0x300; + if (gSaveBlock2.optionsButtonMode == 2) + var |= 0x200; + + if ((var & gMain.newKeys) != FALSE) + return TRUE; + else + return FALSE; +} + +void DoSealedChamberShakingEffect1(void) +{ + u8 taskId = CreateTask(SealedChamberShakingEffect, 0x9); + + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[4] = 2; + gTasks[taskId].data[5] = 5; + gTasks[taskId].data[6] = 50; + SetCameraPanningCallback(0); +} + +void DoSealedChamberShakingEffect2(void) +{ + u8 taskId = CreateTask(SealedChamberShakingEffect, 0x9); + + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[4] = 3; + gTasks[taskId].data[5] = 5; + gTasks[taskId].data[6] = 2; + SetCameraPanningCallback(0); +} + +void SealedChamberShakingEffect(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[1]++; + + if (!(task->data[1] % task->data[5])) + { + task->data[1] = 0; + task->data[2]++; + task->data[4] = -task->data[4]; + SetCameraPanning(0, task->data[4]); + if (task->data[2] == task->data[6]) + { + DestroyTask(taskId); + EnableBothScriptContexts(); + InstallCameraPanAheadCallback(); + } + } +} diff --git a/src/field/choose_party.c b/src/field/choose_party.c new file mode 100644 index 000000000..d8df44028 --- /dev/null +++ b/src/field/choose_party.c @@ -0,0 +1,1072 @@ +#include "global.h" +#include "decoration.h" +#include "field_fadetransition.h" +#include "main.h" +#include "menu.h" +#include "name_string_util.h" +#include "palette.h" +#include "party_menu.h" +#include "pokemon.h" +#include "pokemon_summary_screen.h" +#include "rom4.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "strings.h" +#include "string_util.h" +#include "task.h" +#include "text.h" + +struct UnknownPokemonStruct2 +{ + /*0x00*/ u16 species; + /*0x02*/ u16 heldItem; + /*0x04*/ u8 nickname[11]; + /*0x0F*/ u8 level; + /*0x10*/ u16 hp; + /*0x12*/ u16 maxhp; + /*0x14*/ u32 status; + /*0x18*/ u32 personality; + /*0x1C*/ u8 gender; + /*0x1D*/ u8 language; +}; + +extern u8 gPlayerPartyCount; +extern u8 gLastFieldPokeMenuOpened; +extern u8 gUnknown_020384F0; +extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; +extern u8 gUnknown_0202E8F6; +extern struct Pokemon gUnknown_030042FC[]; +extern const u16 gBattleTowerBanlist[]; + +EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0}; + +extern void OpenPartyMenu(); +extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *); +extern void LoadHeldItemIconGraphics(void); +extern void CreateHeldItemIcons_806DC34(); +extern u8 sub_806BD58(u8, u8); +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(); +extern void sub_806C658(); +extern void sub_806AEDC(void); +extern void sub_806AF4C(); +extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); +extern void sub_806C890(); +extern void sub_806D5A4(); +extern void sub_806B908(void); +extern void CreateMonIcon_806D99C(int, u8, int, struct UnknownPokemonStruct2 *); +extern void sub_806D50C(int, u8); +extern void CreatePartyMenuMonIcon(); +extern void CreateHeldItemIcon_806DCD4(int, u8, int); +extern u8 GetMonStatusAndPokerus(); +extern void PartyMenuPrintHP(); +extern void PartyMenuPutStatusTilemap(u8, int, u8); +extern void PartyMenuPrintLevel(); +extern void PartyMenuPutNicknameTilemap(); +extern void PrintPartyMenuMonNickname(); +extern void PartyMenuDrawHPBar(); +extern bool8 sub_80F9344(void); +extern void sub_806D4AC(); +extern void sub_806D3B4(); +extern void PartyMenuDoPrintLevel(u8, u8, u8); +extern void PartyMenuDoDrawHPBar(u8, u8, u16, u16); +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 *); +static void sub_812238C(u8); +static void sub_8122450(u8); +static void sub_81224A8(u8); +static void sub_8122728(u8); +static void BattleTowerEntryMenuCallback_Exit(u8); +static void sub_81228E8(u8); +static void sub_8122950(u8); +static void sub_81229B8(void); +static void sub_8122AB8(u8); +static void sub_8122B10(u8); +static void sub_8122C18(u8); +static void Task_DaycareStorageMenu8122EAC(u8); +void sub_8123138(u8); +static void sub_8123170(u8); +static void sub_81231AC(void); + +void sub_8121E10(void) +{ + ClearPartySelection(); + ewram1B000.unk263 = 0; + OpenPartyMenu(4, 0); +} + +void sub_8121E34(void) +{ + ClearPartySelection(); + ewram1B000.unk263 = 1; + OpenPartyMenu(4, 0); +} + +static void ClearPartySelection(void) +{ + u8 i; + + for (i = 0; i < 3; i++) + gSelectedOrderFromParty[i] = 0; +} + +bool8 sub_8121E78(void) +{ + u8 i; + + switch (ewram1B000_alt.unk264) + { + case 0: + if (ewram1B000_alt.unk266 < gPlayerPartyCount) + { + TryCreatePartyMenuMonIcon(ewram1B000_alt.unk260, ewram1B000_alt.unk266, &gPlayerParty[ewram1B000_alt.unk266]); + ewram1B000_alt.unk266++; + } + else + { + ewram1B000_alt.unk266 = 0; + ewram1B000_alt.unk264++; + } + break; + case 1: + LoadHeldItemIconGraphics(); + ewram1B000_alt.unk264++; + break; + case 2: + CreateHeldItemIcons_806DC34(ewram1B000_alt.unk260); + ewram1B000_alt.unk264++; + break; + case 3: + if (sub_806BD58(ewram1B000_alt.unk260, ewram1B000_alt.unk266) == 1) + { + ewram1B000_alt.unk266 = 0; + ewram1B000_alt.unk264++; + } + else + { + ewram1B000_alt.unk266++; + } + break; + case 4: + PartyMenuPrintMonsLevelOrStatus(); + ewram1B000_alt.unk264++; + break; + case 5: + PrintPartyMenuMonNicknames(); + ewram1B000_alt.unk264++; + break; + case 6: + for (i = 0; i < gPlayerPartyCount; i++) + { + u8 j; + + for (j = 0; j < 3; j++) + { + if (gSelectedOrderFromParty[j] == i + 1) + { + sub_806BC3C(i, j * 14 + 0x1C); + break; + } + } + if (j == 3) + { + if (IsMonAllowedInBattleTower(&gPlayerParty[i]) == TRUE) + sub_806BC3C(i, 0x70); + else + sub_806BC3C(i, 0x7E); + } + } + ewram1B000_alt.unk264++; + break; + case 7: + if (sub_806B58C(ewram1B000_alt.unk266) == 1) + { + ewram1B000_alt.unk266 = 0; + ewram1B000_alt.unk264 = 0; + return TRUE; + } + else + { + ewram1B000_alt.unk266++; + } + break; + } + return FALSE; +} + +#ifdef NONMATCHING +static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn) +{ + u16 r3; + s32 i; + + if (GetMonData(pkmn, MON_DATA_IS_EGG)) + return FALSE; + + if (ewram1B000.unk263 == 0) + { + if (GetMonData(pkmn, MON_DATA_HP) == 0) + return FALSE; + else + return TRUE; + } + + if ((gSaveBlock2.filler_A8.var_4AC & 1) == 0 + && GetMonData(pkmn, MON_DATA_LEVEL) > 50) + return FALSE; + + r3 = GetMonData(pkmn, MON_DATA_SPECIES); + // Can't stop the compiler from optimizing out the first index + for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++) + { + if (gBattleTowerBanlist[i] == r3) + return FALSE; + } + return TRUE; +} +#else +__attribute__((naked)) +static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn) +{ + asm_unified( + "push {r4,lr}\n\ + adds r4, r0, 0\n\ + movs r1, 0x2D\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _0812207C\n\ + ldr r0, _08122058 @ =0x0201b000\n\ + ldr r1, _0812205C @ =0x00000263\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _08122060\n\ + adds r0, r4, 0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0812207C\n\ + b _081220B6\n\ + .align 2, 0\n\ +_08122058: .4byte 0x0201b000\n\ +_0812205C: .4byte 0x00000263\n\ +_08122060:\n\ + ldr r0, _08122080 @ =gSaveBlock2\n\ + ldr r1, _08122084 @ =0x00000554\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08122088\n\ + adds r0, r4, 0\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + cmp r0, 0x32\n\ + bls _08122088\n\ +_0812207C:\n\ + movs r0, 0\n\ + b _081220B8\n\ + .align 2, 0\n\ +_08122080: .4byte gSaveBlock2\n\ +_08122084: .4byte 0x00000554\n\ +_08122088:\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + ldr r1, _081220C0 @ =gBattleTowerBanlist\n\ + movs r0, 0\n\ + lsls r0, 1\n\ + adds r2, r0, r1\n\ + ldrh r0, [r2]\n\ + ldr r1, _081220C4 @ =0x0000ffff\n\ + cmp r0, r1\n\ + beq _081220B6\n\ + adds r4, r1, 0\n\ + adds r1, r2, 0\n\ +_081220A8:\n\ + ldrh r0, [r1]\n\ + cmp r0, r3\n\ + beq _0812207C\n\ + adds r1, 0x2\n\ + ldrh r0, [r1]\n\ + cmp r0, r4\n\ + bne _081220A8\n\ +_081220B6:\n\ + movs r0, 0x1\n\ +_081220B8:\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_081220C0: .4byte gBattleTowerBanlist\n\ +_081220C4: .4byte 0x0000ffff\n" + ); +} +#endif + +static u8 sub_81220C8(void) +{ + u8 i; + + if (ewram1B000.unk263 == 0) + return 0xFF; + if (gSelectedOrderFromParty[2] == 0) + return 0x11; + for (i = 0; i < 2; i++) + { + u8 j; + + ewram1B000.unk282 = GetMonData(&gUnknown_030042FC[gSelectedOrderFromParty[i]], MON_DATA_SPECIES); + ewram1B000.unk280 = GetMonData(&gUnknown_030042FC[gSelectedOrderFromParty[i]], MON_DATA_HELD_ITEM); + for (j = i + 1; j < 3; j++) + { + if (ewram1B000.unk282 == GetMonData(&gUnknown_030042FC[gSelectedOrderFromParty[j]], MON_DATA_SPECIES)) + return 0x12; + if (ewram1B000.unk280 != 0 && ewram1B000.unk280 == GetMonData(&gUnknown_030042FC[gSelectedOrderFromParty[j]], MON_DATA_HELD_ITEM)) + return 0x13; + } + } + return 0xFF; +} + +//------------------------------------------------------------------------------ +// Battle Tower Entry Menu +//------------------------------------------------------------------------------ + +static void BattleTowerEntryMenuCallback_Summary(u8); +static void BattleTowerEntryMenuCallback_Enter(u8); +static void BattleTowerEntryMenuCallback_NoEntry(u8); +static void BattleTowerEntryMenuCallback_Exit(u8); + +static const struct PartyMenuItem sBattleTowerEntryMenuItems[] = +{ + {OtherText_Summary, BattleTowerEntryMenuCallback_Summary}, + {OtherText_Enter2, BattleTowerEntryMenuCallback_Enter}, + {OtherText_NoEntry, BattleTowerEntryMenuCallback_NoEntry}, + {gUnknownText_Exit, BattleTowerEntryMenuCallback_Exit}, +}; + +static const u8 gUnknown_084017D0[] = {1, 0, 3}; +static const u8 gUnknown_084017D3[] = {2, 0, 3}; +static const u8 gUnknown_084017D6[] = {0, 3}; + +static const struct PartyPopupMenu sBattleTowerEntryMenu[] = +{ + {ARRAY_COUNT(gUnknown_084017D0), 9, gUnknown_084017D0}, + {ARRAY_COUNT(gUnknown_084017D3), 9, gUnknown_084017D3}, + {ARRAY_COUNT(gUnknown_084017D6), 9, gUnknown_084017D6}, +}; + + +static bool8 IsPartyMemberAlreadySelected(u8 partyMember) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + if (gSelectedOrderFromParty[i] == partyMember) + return TRUE; + } + return FALSE; +} + +static void sub_81221F8(u8 taskId) +{ + sub_806D538(5, 1); + if (IsMonAllowedInBattleTower(&gPlayerParty[gLastFieldPokeMenuOpened]) == TRUE) + { + if (IsPartyMemberAlreadySelected(gLastFieldPokeMenuOpened + 1) == TRUE) + { + gTasks[taskId].data[4] = 1; + sub_806E750(1, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0); + } + else + { + gTasks[taskId].data[4] = 0; + sub_806E750(0, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0); + } + } + else + { + gTasks[taskId].data[4] = 2; + sub_806E750(2, sBattleTowerEntryMenu, sBattleTowerEntryMenuItems, 0); + } +} + +void sub_81222B0(u8 taskId) +{ + if (!gPaletteFade.active) + { + switch (sub_806BE38(taskId)) + { + case 1: + PlaySE(SE_SELECT); + gLastFieldPokeMenuOpened = sub_806CA38(taskId); + if (gLastFieldPokeMenuOpened != 6) + { + GetMonNickname(&gPlayerParty[gLastFieldPokeMenuOpened], gStringVar1); + sub_81221F8(taskId); + gTasks[taskId].func = sub_812238C; + } + else + { + gTasks[taskId].func = sub_81224A8; + } + sub_808B5B4(taskId); + break; + case 2: + PlaySE(SE_SELECT); + ClearPartySelection(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = sub_8122450; + break; + } + } +} + +// Handle input +static void sub_812238C(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gMain.newAndRepeatedKeys & 0x40) + { + if (GetMenuCursorPos() != 0) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + } + return; + } + if (gMain.newAndRepeatedKeys & 0x80) + { + if (GetMenuCursorPos() != 3) + { + PlaySE(SE_SELECT); + MoveMenuCursor(1); + } + return; + } + if (gMain.newKeys & A_BUTTON) + { + TaskFunc popupMenuFunc; + + PlaySE(SE_SELECT); + popupMenuFunc = PartyMenuGetPopupMenuFunc( + gTasks[taskId].data[4], + sBattleTowerEntryMenu, + sBattleTowerEntryMenuItems, + GetMenuCursorPos()); + popupMenuFunc(taskId); + return; + } + if (gMain.newKeys & B_BUTTON) + { + BattleTowerEntryMenuCallback_Exit(taskId); + return; + } + } +} + +// Return from menu? +static void sub_8122450(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(gMain.savedCallback); + DestroyTask(taskId); + } +} + +// Wait for A or B press +static void sub_8122480(u8 taskId) +{ + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + BattleTowerEntryMenuCallback_Exit(taskId); +} + +static void sub_81224A8(u8 taskId) +{ + u8 val = sub_81220C8(); + + if (val != 0xFF) + { + sub_806D538(val, 0); + gTasks[taskId].func = sub_8122480; + } + else + { + if (gSelectedOrderFromParty[0] != 0) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = sub_8122450; + } + else + { + PlaySE(SE_HAZURE); + sub_806D538(14, 0); + gTasks[taskId].func = sub_8122480; + } + } +} + +// CB2 for menu? +static void sub_8122530(void) +{ + while (1) + { + if (sub_806B124() == 1) + { + sub_806C994(ewram1B000.unk260, gUnknown_020384F0); + sub_806C658(ewram1B000.unk260, 0); + GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); + gLastFieldPokeMenuOpened = gUnknown_020384F0; + sub_81221F8(ewram1B000.unk260); + SetMainCallback2(sub_806AEDC); + break; + } + if (sub_80F9344() == 1) + break; + } +} + +static void sub_81225A4(void) +{ + gPaletteFade.bufferTransferDisabled = TRUE; + sub_806AF4C(4, 0xFF, sub_812238C, 5); + SetMainCallback2(sub_8122530); +} + +// Wait for fade, then show summary screen +static void sub_81225D4(u8 taskId) +{ + if (!gPaletteFade.active) + { + u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data0; + + DestroyTask(taskId); + ewram1B000.unk262 = 1; + ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_81225A4, 0); + } +} + +// Summary callback? +static void BattleTowerEntryMenuCallback_Summary(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = sub_81225D4; +} + +static void BattleTowerEntryMenuCallback_Enter(u8 taskId) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + if (gSelectedOrderFromParty[i] == 0) + { + gSelectedOrderFromParty[i] = gLastFieldPokeMenuOpened + 1; + sub_806BC3C(gLastFieldPokeMenuOpened, i * 14 + 0x1C); + if (i == 2) + sub_806C890(taskId); + BattleTowerEntryMenuCallback_Exit(taskId); + return; + } + } + PlaySE(SE_HAZURE); + MenuZeroFillWindowRect(20, 10, 29, 19); + HandleDestroyMenuCursors(); + sub_806D5A4(); + sub_806E834(gOtherText_NoMoreThreePoke, 1); + gTasks[taskId].func = sub_8122728; +} + +static void sub_8122728(u8 taskId) +{ + if (gUnknown_0202E8F6 == 1) + return; + + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + { + MenuZeroFillWindowRect(0, 14, 29, 19); + HandleDestroyMenuCursors(); + BattleTowerEntryMenuCallback_Exit(taskId); + } +} + +static void BattleTowerEntryMenuCallback_NoEntry(u8 taskId) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + if (gSelectedOrderFromParty[i] == gLastFieldPokeMenuOpened + 1) + { + gSelectedOrderFromParty[i] = 0; + switch (i) + { + case 0: + gSelectedOrderFromParty[0] = gSelectedOrderFromParty[1]; + gSelectedOrderFromParty[1] = gSelectedOrderFromParty[2]; + gSelectedOrderFromParty[2] = 0; + break; + case 1: + gSelectedOrderFromParty[1] = gSelectedOrderFromParty[2]; + gSelectedOrderFromParty[2] = 0; + break; + } + break; // exit loop + } + } + sub_806BC3C(gLastFieldPokeMenuOpened, 0x70); + if (gSelectedOrderFromParty[0] != 0) + sub_806BC3C(gSelectedOrderFromParty[0] - 1, 0x1C); + if (gSelectedOrderFromParty[1] != 0) + sub_806BC3C(gSelectedOrderFromParty[1] - 1, 0x2A); + BattleTowerEntryMenuCallback_Exit(taskId); +} + +static void sub_81227FC(u8 taskId) +{ + MenuZeroFillWindowRect(20, 10, 29, 19); + HandleDestroyMenuCursors(); + sub_806D538(0, 0); + gTasks[taskId].func = sub_81222B0; +} + +static void BattleTowerEntryMenuCallback_Exit(u8 taskId) +{ + PlaySE(SE_SELECT); + sub_81227FC(taskId); +} + +bool8 sub_8122854(void) +{ + switch (ewram1B000_alt.unk264) + { + case 0: + sub_81228E8(ewram1B000_alt.unk260); + ewram1B000_alt.unk264++; + break; + case 1: + LoadHeldItemIconGraphics(); + ewram1B000_alt.unk264++; + break; + case 2: + sub_8122950(ewram1B000_alt.unk260); + ewram1B000_alt.unk264++; + break; + case 3: + sub_81229B8(); + ewram1B000_alt.unk264++; + break; + case 4: + sub_806B908(); + return TRUE; + } + return FALSE; +} + +static void sub_81228E8(u8 a) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0) + CreatePartyMenuMonIcon(a, i, 3, &gPlayerParty[i]); + if (gUnknown_02023A00[i].species != 0) + { + CreateMonIcon_806D99C(a, i + 3, 3, &gUnknown_02023A00[i]); + sub_806D50C(a, i + 3); + } + } +} + +static void sub_8122950(u8 a) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0) + { + u16 item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + + CreateHeldItemIcon_806DCD4(a, i, item); + } + if (gUnknown_02023A00[i].species != 0) + CreateHeldItemIcon_806DCD4(a, i + 3, gUnknown_02023A00[i].heldItem); + } +} + +static void sub_81229B8(void) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0) + { + u8 status; + + PartyMenuPrintHP(i, 3, &gPlayerParty[i]); + status = GetMonStatusAndPokerus(&gPlayerParty[i]); + if (status != 0 && status != 6) + PartyMenuPutStatusTilemap(i, 3, status - 1); + else + PartyMenuPrintLevel(i, 3, &gPlayerParty[i]); + PartyMenuPutNicknameTilemap(i, 3, &gPlayerParty[i]); + PrintPartyMenuMonNickname(i, 3, &gPlayerParty[i]); + PartyMenuDrawHPBar(i, 3, &gPlayerParty[i]); + } + } +} + +void sub_8122A48(u8 taskId) +{ + if (!gPaletteFade.active) + { + gTasks[taskId].data[0] = 30; + sub_806D4AC(taskId, gUnknown_02023A00[0].species, 0); + sub_806D4AC(taskId, gUnknown_02023A00[1].species, 1); + sub_806D4AC(taskId, gUnknown_02023A00[2].species, 2); + gTasks[taskId].func = sub_8122AB8; + ewram1B000.unk261 = 1; + } +} + +static void sub_8122AB8(u8 taskId) +{ + sub_806D3B4(taskId, gUnknown_02023A00[1].species, gUnknown_02023A00[2].species); + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].func = sub_8122B10; + ewram1B000.unk261 = 2; + PlaySE(SE_W231); + } +} + +static void sub_8122B10(u8 taskId) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + if (gUnknown_02023A00[i].species != 0) + { + u8 r2; + + PartyMenuDoPrintHP(i + 3, 3, gUnknown_02023A00[i].hp, gUnknown_02023A00[i].maxhp); + if (gUnknown_02023A00[i].hp == 0) + r2 = 7; + else + r2 = pokemon_ailments_get_primary(gUnknown_02023A00[i].status); + if (r2 != 0) + PartyMenuPutStatusTilemap(i + 3, 3, r2 - 1); + else + PartyMenuDoPrintLevel(i + 3, 3, gUnknown_02023A00[i].level); + PartyMenuDoPutNicknameTilemap(gUnknown_02023A00[i].species, gUnknown_02023A00[i].gender, 3, i + 3, gUnknown_02023A00[i].nickname); + StringCopy(gStringVar1, gUnknown_02023A00[i].nickname); + StringGetEnd10(gStringVar1); + SanitizeNameString(gStringVar1); + box_print(i + 3, 3, gStringVar1); + PartyMenuDoDrawHPBar(i + 3, 3, gUnknown_02023A00[i].hp, gUnknown_02023A00[i].maxhp); + } + } + gTasks[taskId].func = sub_8122C18; + gTasks[taskId].data[0] = 0; +} + +static void sub_8122C18(u8 taskId) +{ + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] == 256) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = sub_8122450; + } +} + +// Exactly the same as sub_8121E78 except for case 6 +bool8 unref_sub_8122C60(void) +{ + switch (ewram1B000_alt.unk264) + { + case 0: + if (ewram1B000_alt.unk266 < gPlayerPartyCount) + { + TryCreatePartyMenuMonIcon(ewram1B000_alt.unk260, ewram1B000_alt.unk266, &gPlayerParty[ewram1B000_alt.unk266]); + ewram1B000_alt.unk266++; + } + else + { + ewram1B000_alt.unk266 = 0; + ewram1B000_alt.unk264++; + } + break; + case 1: + LoadHeldItemIconGraphics(); + ewram1B000_alt.unk264++; + break; + case 2: + CreateHeldItemIcons_806DC34(ewram1B000_alt.unk260); + ewram1B000_alt.unk264++; + break; + case 3: + if (sub_806BD58(ewram1B000_alt.unk260, ewram1B000_alt.unk266) == 1) + { + ewram1B000_alt.unk266 = 0; + ewram1B000_alt.unk264++; + } + else + { + ewram1B000_alt.unk266++; + } + break; + case 4: + PartyMenuPrintMonsLevelOrStatus(); + ewram1B000_alt.unk264++; + break; + case 5: + PrintPartyMenuMonNicknames(); + ewram1B000_alt.unk264++; + break; + case 6: + sub_806BCE8(); + ewram1B000_alt.unk264++; + break; + case 7: + if (sub_806B58C(ewram1B000_alt.unk266) == 1) + { + ewram1B000_alt.unk266 = 0; + ewram1B000_alt.unk264 = 0; + return TRUE; + } + else + { + ewram1B000_alt.unk266++; + } + break; + } + return FALSE; +} + +//------------------------------------------------------------------------------ +// Daycare Pokemon Storage Menu +//------------------------------------------------------------------------------ + +static void DaycareStorageMenuCallback_Store(u8); +static void DaycareStorageMenuCallback_Summary(u8); +static void DaycareStorageMenuCallback_Exit(u8); + +static const struct PartyMenuItem sDaycareStorageMenuItems[] = +{ + {OtherText_Store, DaycareStorageMenuCallback_Store}, + {OtherText_Summary, DaycareStorageMenuCallback_Summary}, + {gUnknownText_Exit, DaycareStorageMenuCallback_Exit}, +}; + +static const u8 gUnknown_08401808[] = {0, 1, 2}; +static const u8 gUnknown_0840180B[] = {1, 2}; + +static const struct PartyPopupMenu sDaycareStorageMenus[] = +{ + {ARRAY_COUNT(gUnknown_08401808), 9, gUnknown_08401808}, + {ARRAY_COUNT(gUnknown_0840180B), 9, gUnknown_0840180B}, +}; + +static void sub_8122D94(u8 taskId) +{ + if (!GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_IS_EGG)) + { + gTasks[taskId].data[4] = 0; + sub_806E750(0, sDaycareStorageMenus, sDaycareStorageMenuItems, 0); + } + else + { + gTasks[taskId].data[4] = 1; + sub_806E750(1, sDaycareStorageMenus, sDaycareStorageMenuItems, 0); + } +} + +void sub_8122E0C(u8 taskId) +{ + if (!gPaletteFade.active) + { + switch (sub_806BD80(taskId)) + { + case 1: + PlaySE(SE_SELECT); + gLastFieldPokeMenuOpened = sub_806CA38(taskId); + GetMonNickname(&gPlayerParty[gLastFieldPokeMenuOpened], gStringVar1); + sub_8122D94(taskId); + gTasks[taskId].func = Task_DaycareStorageMenu8122EAC; + break; + case 2: + PlaySE(SE_SELECT); + gLastFieldPokeMenuOpened = 0xFF; + gSpecialVar_0x8004 = 0xFF; + sub_8123138(taskId); + break; + } + } +} + +static void Task_DaycareStorageMenu8122EAC(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gMain.newAndRepeatedKeys & 0x40) + { + if (GetMenuCursorPos() != 0) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + } + return; + } + if (gMain.newAndRepeatedKeys & 0x80) + { + if (GetMenuCursorPos() != 3) + { + PlaySE(SE_SELECT); + MoveMenuCursor(1); + } + return; + } + if (gMain.newKeys & A_BUTTON) + { + TaskFunc popupMenuFunc; + + PlaySE(SE_SELECT); + popupMenuFunc = PartyMenuGetPopupMenuFunc( + gTasks[taskId].data[4], + sDaycareStorageMenus, + sDaycareStorageMenuItems, + GetMenuCursorPos()); + popupMenuFunc(taskId); + return; + } + if (gMain.newKeys & B_BUTTON) + { + DaycareStorageMenuCallback_Exit(taskId); + return; + } + } +} + +static void DaycareStorageMenuCallback_Store(u8 taskId) +{ + gSpecialVar_0x8004 = gLastFieldPokeMenuOpened; + sub_8123138(taskId); +} + +static void sub_8122F90(void) +{ + while (1) + { + if (sub_806B124() == 1) + { + sub_806C994(ewram1B000.unk260, gUnknown_020384F0); + sub_806BF74(ewram1B000.unk260, 0); + GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); + gLastFieldPokeMenuOpened = gUnknown_020384F0; + sub_8122D94(ewram1B000.unk260); + SetMainCallback2(sub_806AEDC); + break; + } + if (sub_80F9344() == 1) + break; + } +} + +static void sub_8123004(void) +{ + gPaletteFade.bufferTransferDisabled = TRUE; + sub_806AF4C(6, 0xFF, Task_DaycareStorageMenu8122EAC, 5); + SetMainCallback2(sub_8122F90); +} + +static void sub_8123034(u8 taskId) +{ + if (!gPaletteFade.active) + { + u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data0; + + DestroyTask(taskId); + ewram1B000.unk262 = 1; + ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_8123004, 0); + } +} + +static void DaycareStorageMenuCallback_Summary(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = sub_8123034; +} + +static void DaycareStorageMenuCallback_Exit(u8 taskId) +{ + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(20, 10, 29, 19); + HandleDestroyMenuCursors(); + sub_806D538(15, 0); + gTasks[taskId].func = sub_8122E0C; +} + +void sub_8123138(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = sub_8123170; +} + +static void sub_8123170(u8 taskId) +{ + if (!gPaletteFade.active) + { + gFieldCallback = sub_81231AC; + SetMainCallback2(c2_exit_to_overworld_2_switch); + DestroyTask(taskId); + } +} + +// Do these last two functions really belong in here? + +static void sub_81231C4(u8); + +void sub_81231AC(void) +{ + pal_fill_black(); + CreateTask(sub_81231C4, 10); +} + +static void sub_81231C4(u8 taskId) +{ + if (sub_807D770() == TRUE) + { + DestroyTask(taskId); + ScriptContext2_Disable(); + EnableBothScriptContexts(); + } +} diff --git a/src/field/coins.c b/src/field/coins.c new file mode 100644 index 000000000..3c6356612 --- /dev/null +++ b/src/field/coins.c @@ -0,0 +1,84 @@ +#include "global.h" +#include "coins.h" +#include "menu.h" +#include "string_util.h" +#include "strings.h" + +#define MAX_COINS 9999 + +void UpdateCoinsWindow(s32 a, u8 b, u8 c) +{ + PrintCoins(a, 4, b + 2, c + 1); +} + +void ShowCoinsWindow(u32 a, u8 b, u8 c) +{ + MenuDrawTextWindow(b, c, b + 9, c + 3); + UpdateCoinsWindow(a, b, c); +} + +void HideCoinsWindow(u8 a, u8 b) +{ + MenuZeroFillWindowRect(a, b, a + 9, b + 3); +} + +void PrintCoins(s32 a, u8 b, u8 c, u8 d) +{ + u8 string[16]; + u8 *ptr; + u8 r1; + u8 foo; + + ConvertIntToDecimalString(string, a); + r1 = (b * 6 + 0x21 - 8 * (b + 2)); + c = c - r1 / 8; + foo = r1 % 8; + ptr = gStringVar1; + if (foo) + { + ptr[0] = 0xFC; + ptr[1] = 0x11; + ptr[2] = 8 - (foo); + ptr += 3; + } + ptr[0] = 0xFC; + ptr[1] = 0x11; + ptr[2] = (b - StringLength(string)) * 6; + ptr += 3; + StringCopy(ptr, string); + MenuPrint(gOtherText_Coins2, c, d); +} + +u16 GetCoins(void) +{ + return gSaveBlock1.coins; +} + +bool8 GiveCoins(u16 coins) +{ + u32 newCoins; + + if (GetCoins() >= MAX_COINS) + return FALSE; + newCoins = coins + gSaveBlock1.coins; + if (gSaveBlock1.coins > (u16)newCoins) + gSaveBlock1.coins = MAX_COINS; + else + { + gSaveBlock1.coins = newCoins; + if ((u16)newCoins > MAX_COINS) + gSaveBlock1.coins = MAX_COINS; + } + return TRUE; +} + +bool8 TakeCoins(u16 coins) +{ + if (GetCoins() >= coins) + { + gSaveBlock1.coins -= coins; + return TRUE; + } + else + return FALSE; +} diff --git a/src/field/coord_event_weather.c b/src/field/coord_event_weather.c new file mode 100644 index 000000000..9c5a1ca4d --- /dev/null +++ b/src/field/coord_event_weather.c @@ -0,0 +1,118 @@ +#include "global.h" +#include "coord_event_weather.h" +#include "field_weather.h" + +struct CoordEventWeather +{ + u8 weather; + void (*func)(void); +}; + +static void CoordEventWeather_Indoor(void); +static void CoordEventWeather_Sunny(void); +static void CoordEventWeather_Rain(void); +static void CoordEventWeather_Snowflakes(void); +static void CoordEventWeather_Thunderstorm(void); +static void CoordEventWeather_Fog(void); +static void CoordEventWeather_DiagonalFog(void); +static void CoordEventWeather_Snow(void); +static void CoordEventWeather_Sandstorm(void); +static void CoordEventWeather_Cloudy(void); +static void CoordEventWeather_Drought(void); +static void CoordEventWeather_UnderwaterFog(void); +static void CoordEventWeather_UnderwaterBubbles(void); + +static const struct CoordEventWeather sCoordEventWeatherFuncs[] = +{ + { 0x1, CoordEventWeather_Indoor }, + { 0x2, CoordEventWeather_Sunny }, + { 0x3, CoordEventWeather_Rain }, + { 0x4, CoordEventWeather_Snowflakes }, + { 0x5, CoordEventWeather_Thunderstorm }, + { 0x6, CoordEventWeather_Fog }, + { 0x7, CoordEventWeather_DiagonalFog }, + { 0x8, CoordEventWeather_Snow }, + { 0x9, CoordEventWeather_Sandstorm }, + { 0xa, CoordEventWeather_Cloudy }, + { 0xb, CoordEventWeather_Drought }, + { 0x14, CoordEventWeather_UnderwaterFog }, + { 0x15, CoordEventWeather_UnderwaterBubbles }, +}; + +static void CoordEventWeather_Indoor(void) +{ + SetWeather(1); +} + +static void CoordEventWeather_Sunny(void) +{ + SetWeather(2); +} + +static void CoordEventWeather_Rain(void) +{ + SetWeather(3); +} + +static void CoordEventWeather_Snowflakes(void) +{ + SetWeather(4); +} + +static void CoordEventWeather_Thunderstorm(void) +{ + SetWeather(5); +} + +static void CoordEventWeather_Fog(void) +{ + SetWeather(6); +} + +static void CoordEventWeather_DiagonalFog(void) +{ + SetWeather(9); +} + +static void CoordEventWeather_Snow(void) +{ + SetWeather(7); +} + +static void CoordEventWeather_Sandstorm(void) +{ + SetWeather(8); +} + +static void CoordEventWeather_Cloudy(void) +{ + SetWeather(11); +} + +static void CoordEventWeather_Drought(void) +{ + SetWeather(12); +} + +static void CoordEventWeather_UnderwaterFog(void) +{ + SetWeather(20); +} + +static void CoordEventWeather_UnderwaterBubbles(void) +{ + SetWeather(21); +} + +void DoCoordEventWeather(u8 n) +{ + u8 i; + for (i = 0; i < ARRAY_COUNT(sCoordEventWeatherFuncs); i++) + { + if (sCoordEventWeatherFuncs[i].weather == n) + { + sCoordEventWeatherFuncs[i].func(); + return; + } + } +} diff --git a/src/field/daycare.c b/src/field/daycare.c new file mode 100644 index 000000000..cded18207 --- /dev/null +++ b/src/field/daycare.c @@ -0,0 +1,350 @@ +#include "global.h" +#include "daycare.h" +#include "pokemon.h" +#include "species.h" +#include "items.h" +#include "string_util.h" + +extern u8 gLastFieldPokeMenuOpened; + +u8 *GetMonNick(struct Pokemon *mon, u8 *dest) +{ + s8 nickname[POKEMON_NAME_LENGTH * 2]; + + GetMonData(mon, MON_DATA_NICKNAME, nickname); + return StringCopy10(dest, nickname); +} + +u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest) +{ + s8 nickname[POKEMON_NAME_LENGTH * 2]; + + GetBoxMonData(mon, MON_DATA_NICKNAME, nickname); + return StringCopy10(dest, nickname); +} + +u8 Daycare_CountPokemon(struct BoxPokemon *daycare_data) +{ + u8 i, count; + count = 0; + + for(i = 0;i <= 1;i++) + if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) != 0) + count++; + + return count; +} + +void sub_8041324(struct BoxPokemon * box_pokemon, struct RecordMixing_UnknownStruct * void_pointer) +{ + u8 i; + u8 specCount; + specCount = 0; + for (i=0; i<2; i++) + { + if (GetBoxMonData(&box_pokemon[i], MON_DATA_SPECIES) != SPECIES_NONE) + { + specCount ++; + if (GetBoxMonData(&box_pokemon[i], MON_DATA_HELD_ITEM) == ITEM_NONE) + { + void_pointer->unk74[i] = 0; + } else + { + void_pointer->unk74[i] = 1; + } + } else + { + void_pointer->unk74[i] = 1; + } + } + void_pointer->unk70 = specCount; +} + +s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data) +{ + u8 i; + + for(i = 0;i <= 1;i++) + if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) == 0) + return i; + + return -1; +} + +/*void Daycare_SendPokemon(struct Pokemon * mon, struct BoxPokemon * daycare_data){ // unfinished + s8 empty_slot; + + 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"); +} + +void Daycare_SendPokemon_Special() +{ + Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, gSaveBlock1.daycareData); +} + +void sub_80417F4(u8 *); + +void sub_80414C0(struct BoxPokemon * 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); + } +} + +u8 TryIncrementMonLevel(struct Pokemon *); +extern u16 word_2024E82; + +void sub_804151C(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); + } + } + } + + end: + + CalculateMonStats(mon); +} + +__attribute__((naked)) +u16 sub_8041570(struct BoxPokemon * 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"); +} + +extern u8 gSpecialVar_0x8004; + +u16 sub_8041648() +{ + return sub_8041570(gSaveBlock1.daycareData, gSpecialVar_0x8004); +} + +u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){ + struct BoxPokemon temp = *mon; + u32 new_exp = GetBoxMonData(mon, MON_DATA_EXP) + steps; + SetBoxMonData(&temp, MON_DATA_EXP, (u8 *) &new_exp); + return GetLevelFromBoxMonExp(&temp); +} diff --git a/src/field/decoration.c b/src/field/decoration.c new file mode 100644 index 000000000..da33b3ab7 --- /dev/null +++ b/src/field/decoration.c @@ -0,0 +1,4280 @@ +#include "global.h" +#include "main.h" +#include "map_object_constants.h" +#include "rom4.h" +#include "sound.h" +#include "songs.h" +#include "string_util.h" +#include "menu.h" +#include "menu_helpers.h" +#include "strings.h" +#include "script.h" +#include "palette.h" +#include "field_player_avatar.h" +#include "field_camera.h" +#include "field_fadetransition.h" +#include "fieldmap.h" +#include "metatile_behavior.h" +#include "event_data.h" +#include "field_weather.h" +#include "decoration.h" + +EWRAM_DATA u8 *gUnknown_020388D0 = NULL; +EWRAM_DATA u8 gUnknown_020388D4 = 0; +EWRAM_DATA u8 gUnknown_020388D5 = 0; +EWRAM_DATA u8 gUnknown_020388D6[16] = {0}; +EWRAM_DATA u8 gUnknown_020388E6[12] = {0}; +EWRAM_DATA u8 gUnknown_020388F2 = 0; +EWRAM_DATA u8 gUnknown_020388F3 = 0; +EWRAM_DATA u8 gUnknown_020388F4 = 0; +EWRAM_DATA u8 gUnknown_020388F5 = 0; +EWRAM_DATA u8 gUnknown_020388F6 = 0; +EWRAM_DATA u8 gUnknown_020388F7[8] = {0}; +EWRAM_DATA struct UnkStruct_02038900 gUnknown_02038900 = {0}; +EWRAM_DATA u16 gUnknown_020391A4 = 0; +EWRAM_DATA u16 gUnknown_020391A6 = 0; +EWRAM_DATA u8 gUnknown_020391A8 = 0; +EWRAM_DATA u8 gUnknown_020391A9 = 0; +EWRAM_DATA u8 gUnknown_020391AA = 0; +EWRAM_DATA struct OamData gUnknown_020391AC = {0}; +EWRAM_DATA struct UnkStruct_020391B4 gUnknown_020391B4[16] = {0}; +EWRAM_DATA u8 gUnknown_02039234 = 0; + +#if ENGLISH +const u8 DecorDesc_SMALL_DESK[] = _( + "A small desk built\n" + "for one."); + +const u8 DecorDesc_POKEMON_DESK[] = _( + "A small desk built in\n" + "the shape of a POKé\n" + "BALL."); + +const u8 DecorDesc_HEAVY_DESK[] = _( + "A large desk made\n" + "of steel. Put some\n" + "decorations on it."); + +const u8 DecorDesc_RAGGED_DESK[] = _( + "A large desk made\n" + "of wood. Put some\n" + "decorations on it."); + +const u8 DecorDesc_COMFORT_DESK[] = _( + "A large desk made\n" + "of leaves. Put some\n" + "decorations on it."); + +const u8 DecorDesc_PRETTY_DESK[] = _( + "A huge desk made\n" + "of glass. Holds lots\n" + "of decorations."); + +const u8 DecorDesc_BRICK_DESK[] = _( + "A huge desk made\n" + "of brick. Holds lots\n" + "of decorations."); + +const u8 DecorDesc_CAMP_DESK[] = _( + "A huge desk made\n" + "of logs. Put lots of\n" + "decorations on it."); + +const u8 DecorDesc_HARD_DESK[] = _( + "A huge desk made\n" + "of rocks. Holds\n" + "many decorations."); + +const u8 DecorDesc_SMALL_CHAIR[] = _( + "A small chair made\n" + "for one."); + +const u8 DecorDesc_POKEMON_CHAIR[] = _( + "A small chair built\n" + "in the shape of a\n" + "POKé BALL."); + +const u8 DecorDesc_HEAVY_CHAIR[] = _( + "A small chair made\n" + "of steel."); + +const u8 DecorDesc_PRETTY_CHAIR[] = _( + "A small chair made\n" + "of glass."); + +const u8 DecorDesc_COMFORT_CHAIR[] = _( + "A small chair made\n" + "of leaves."); + +const u8 DecorDesc_RAGGED_CHAIR[] = _( + "A small chair made\n" + "of wood."); + +const u8 DecorDesc_BRICK_CHAIR[] = _( + "A small chair made\n" + "of brick."); + +const u8 DecorDesc_CAMP_CHAIR[] = _( + "A small chair made\n" + "of logs."); + +const u8 DecorDesc_HARD_CHAIR[] = _( + "A small chair made\n" + "of rock."); + +const u8 DecorDesc_RED_PLANT[] = _( + "A vivid red potted\n" + "plant."); + +const u8 DecorDesc_TROPICAL_PLANT[] = _( + "A flowering tropical\n" + "plant in a pot."); + +const u8 DecorDesc_PRETTY_FLOWERS[] = _( + "A pot of cute\n" + "flowers."); + +const u8 DecorDesc_COLORFUL_PLANT[] = _( + "A large pot with\n" + "many colorful\n" + "flowers."); + +const u8 DecorDesc_BIG_PLANT[] = _( + "A large, umbrella-\n" + "shaped plant in a\n" + "big pot."); + +const u8 DecorDesc_GORGEOUS_PLANT[] = _( + "A large, impressive\n" + "plant in a big pot."); + +const u8 DecorDesc_RED_BRICK[] = _( + "A red-colored brick.\n" + "Decorations can be\n" + "placed on top."); + +const u8 DecorDesc_YELLOW_BRICK[] = _( + "A yellow-colored\n" + "brick. Put some\n" + "decorations on top."); + +const u8 DecorDesc_BLUE_BRICK[] = _( + "A blue-colored\n" + "brick. Put some\n" + "decorations on top."); + +const u8 DecorDesc_RED_BALLOON[] = _( + "A red balloon filled\n" + "with water. Bursts\n" + "if stepped on."); + +const u8 DecorDesc_BLUE_BALLOON[] = _( + "A blue balloon filled\n" + "with water. Bursts\n" + "if stepped on."); + +const u8 DecorDesc_YELLOW_BALLOON[] = _( + "A yellow balloon\n" + "filled with water.\n" + "Pops if stepped on."); + +const u8 DecorDesc_RED_TENT[] = _( + "A large red tent.\n" + "You can hide inside\n" + "it."); + +const u8 DecorDesc_BLUE_TENT[] = _( + "A large blue tent.\n" + "You can hide inside\n" + "it."); + +const u8 DecorDesc_SOLID_BOARD[] = _( + "Place over a hole to\n" + "cross to the other\n" + "side."); + +const u8 DecorDesc_SLIDE[] = _( + "Use to slide down\n" + "from the platform."); + +const u8 DecorDesc_FENCE_LENGTH[] = _( + "A small fence that\n" + "blocks passage."); + +const u8 DecorDesc_FENCE_WIDTH[] = _( + "A small fence that\n" + "blocks passage."); + +const u8 DecorDesc_TIRE[] = _( + "An old large tire.\n" + "Decorations can be\n" + "placed on top."); + +const u8 DecorDesc_STAND[] = _( + "A large pedestal\n" + "with steps."); + +const u8 DecorDesc_MUD_BALL[] = _( + "A large ball of mud.\n" + "Crumbles if stepped\n" + "on."); + +const u8 DecorDesc_BREAKABLE_DOOR[] = _( + "A weird door that\n" + "people can walk\n" + "right through."); + +const u8 DecorDesc_SAND_ORNAMENT[] = _( + "An ornament made\n" + "of sand. Crumbles if\n" + "touched."); + +const u8 DecorDesc_SILVER_SHIELD[] = _( + "Awarded for 50\n" + "straight wins at\n" + "the BATTLE TOWER."); + +const u8 DecorDesc_GOLD_SHIELD[] = _( + "Awarded for 100\n" + "straight wins at\n" + "the BATTLE TOWER."); + +const u8 DecorDesc_GLASS_ORNAMENT[] = _( + "A glass replica of\n" + "a famous sculpture\n" + "at the ART MUSEUM."); + +const u8 DecorDesc_TV[] = _( + "A small, gray-\n" + "colored toy TV."); + +const u8 DecorDesc_ROUND_TV[] = _( + "A toy TV modeled\n" + "in the image of a\n" + "SEEDOT."); + +const u8 DecorDesc_CUTE_TV[] = _( + "A toy TV modeled\n" + "in the image of a\n" + "SKITTY."); + +const u8 DecorDesc_GLITTER_MAT[] = _( + "An odd mat that\n" + "glitters if stepped\n" + "on."); + +const u8 DecorDesc_JUMP_MAT[] = _( + "A trick mat that\n" + "jumps when it is\n" + "stepped on."); + +const u8 DecorDesc_SPIN_MAT[] = _( + "A trick mat that\n" + "spins around when\n" + "stepped on."); + +const u8 DecorDesc_C_LOW_NOTE_MAT[] = _( + "A mat that plays\n" + "a low C note when\n" + "stepped on."); + +const u8 DecorDesc_D_NOTE_MAT[] = _( + "A mat that plays\n" + "a D note when\n" + "stepped on."); + +const u8 DecorDesc_E_NOTE_MAT[] = _( + "A mat that plays\n" + "an E note when\n" + "stepped on."); + +const u8 DecorDesc_F_NOTE_MAT[] = _( + "A mat that plays\n" + "an F note when\n" + "stepped on."); + +const u8 DecorDesc_G_NOTE_MAT[] = _( + "A mat that plays\n" + "a G note when\n" + "stepped on."); + +const u8 DecorDesc_A_NOTE_MAT[] = _( + "A mat that plays\n" + "an A note when\n" + "stepped on."); + +const u8 DecorDesc_B_NOTE_MAT[] = _( + "A mat that plays\n" + "a B note when\n" + "stepped on."); + +const u8 DecorDesc_C_HIGH_NOTE_MAT[] = _( + "A mat that plays\n" + "a high C note when\n" + "stepped on."); + +const u8 DecorDesc_SURF_MAT[] = _( + "A mat designed with\n" + "a SURF image.\n" + "Put items on top."); + +const u8 DecorDesc_THUNDER_MAT[] = _( + "A mat designed with\n" + "a THUNDER image.\n" + "Put items on top."); + +const u8 DecorDesc_FIRE_BLAST_MAT[] = _( + "A mat designed with\n" + "a FIRE BLAST image.\n" + "Put items on top."); + +const u8 DecorDesc_POWDER_SNOW_MAT[] = _( + "A mat with a POWDER\n" + "SNOW image design.\n" + "Put items on top."); + +const u8 DecorDesc_ATTRACT_MAT[] = _( + "A mat designed with\n" + "an ATTRACT image.\n" + "Put items on top."); + +const u8 DecorDesc_FISSURE_MAT[] = _( + "A mat designed with\n" + "a FISSURE image.\n" + "Put items on top."); + +const u8 DecorDesc_SPIKES_MAT[] = _( + "A mat designed with\n" + "a SPIKES image.\n" + "Put items on top."); + +const u8 DecorDesc_BALL_POSTER[] = _( + "A small poster\n" + "printed with POKé\n" + "BALLS."); + +const u8 DecorDesc_GREEN_POSTER[] = _( + "A small poster with\n" + "a TREECKO print."); + +const u8 DecorDesc_RED_POSTER[] = _( + "A small poster with\n" + "a TORCHIC print."); + +const u8 DecorDesc_BLUE_POSTER[] = _( + "A small poster with\n" + "a MUDKIP print."); + +const u8 DecorDesc_CUTE_POSTER[] = _( + "A small poster with\n" + "an AZURILL print."); + +const u8 DecorDesc_PIKA_POSTER[] = _( + "A large poster with\n" + "a PIKACHU and\n" + "PICHU print."); + +const u8 DecorDesc_LONG_POSTER[] = _( + "A large poster with\n" + "a SEVIPER print."); + +const u8 DecorDesc_SEA_POSTER[] = _( + "A large poster with\n" + "a RELICANTH print."); + +const u8 DecorDesc_SKY_POSTER[] = _( + "A large poster with\n" + "a WINGULL print."); + +const u8 DecorDesc_KISS_POSTER[] = _( + "A large poster with\n" + "a SMOOCHUM print."); + +const u8 DecorDesc_PICHU_DOLL[] = _( + "A PICHU doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_PIKACHU_DOLL[] = _( + "A PIKACHU doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_MARILL_DOLL[] = _( + "A MARILL doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_TOGEPI_DOLL[] = _( +#if REVISION >= 1 + "A TOGEPI doll.\n" +#else + "A TOPGEPI doll.\n" +#endif + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_CYNDAQUIL_DOLL[] = _( + "A CYNDAQUIL doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_CHIKORITA_DOLL[] = _( + "A CHIKORITA doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_TOTODILE_DOLL[] = _( + "A TOTODILE doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_JIGGLYPUFF_DOLL[] = _( + "A JIGGLYPUFF doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_MEOWTH_DOLL[] = _( + "A MEOWTH doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_CLEFAIRY_DOLL[] = _( + "A CLEFAIRY doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_DITTO_DOLL[] = _( + "A DITTO doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_SMOOCHUM_DOLL[] = _( + "A SMOOCHUM doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_TREECKO_DOLL[] = _( + "A TREECKO doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_TORCHIC_DOLL[] = _( + "A TORCHIC doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_MUDKIP_DOLL[] = _( + "A MUDKIP doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_DUSKULL_DOLL[] = _( + "A DUSKULL doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_WYNAUT_DOLL[] = _( + "A WYNAUT doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_BALTOY_DOLL[] = _( + "A BALTOY doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_KECLEON_DOLL[] = _( + "A KECLEON doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_AZURILL_DOLL[] = _( + "An AZURILL doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_SKITTY_DOLL[] = _( + "A SKITTY doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_SWABLU_DOLL[] = _( + "A SWABLU doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_GULPIN_DOLL[] = _( + "A GULPIN doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_LOTAD_DOLL[] = _( + "A LOTAD doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_SEEDOT_DOLL[] = _( + "A SEEDOT doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_PIKA_CUSHION[] = _( + "A PIKACHU cushion.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_ROUND_CUSHION[] = _( + "A MARILL cushion.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_KISS_CUSHION[] = _( + "A SMOOCHUM\n" + "cushion. Place it on\n" + "a mat or a desk."); + +const u8 DecorDesc_ZIGZAG_CUSHION[] = _( + "A ZIGZAGOON\n" + "cushion. Place it on\n" + "a mat or a desk."); + +const u8 DecorDesc_SPIN_CUSHION[] = _( + "A SPINDA cushion.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_DIAMOND_CUSHION[] = _( + "A SABLEYE cushion.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_BALL_CUSHION[] = _( + "A BALL cushion.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_GRASS_CUSHION[] = _( + "A grass-mark\n" + "cushion. Place it on\n" + "a mat or a desk."); + +const u8 DecorDesc_FIRE_CUSHION[] = _( + "A fire-mark\n" + "cushion. Place it on\n" + "a mat or a desk."); + +const u8 DecorDesc_WATER_CUSHION[] = _( + "A water-mark\n" + "cushion. Place it on\n" + "a mat or a desk."); + +const u8 DecorDesc_SNORLAX_DOLL[] = _( + "A large doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_RHYDON_DOLL[] = _( + "A large doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_LAPRAS_DOLL[] = _( + "A large doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_VENUSAUR_DOLL[] = _( + "A large doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_CHARIZARD_DOLL[] = _( + "A large doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_BLASTOISE_DOLL[] = _( + "A large doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_WAILMER_DOLL[] = _( + "A large doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_REGIROCK_DOLL[] = _( + "A large doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_REGICE_DOLL[] = _( + "A large doll.\n" + "Place it on a mat\n" + "or a desk."); + +const u8 DecorDesc_REGISTEEL_DOLL[] = _( + "A large doll.\n" + "Place it on a mat\n" + "or a desk."); +#elif GERMAN +#include "data/decoration/descriptions_de.h" +#endif + +const u16 DecorGfx_SMALL_DESK[] = { + 0x87 +}; + +const u16 DecorGfx_POKEMON_DESK[] = { + 0x8F +}; + +const u16 DecorGfx_HEAVY_DESK[] = { + 0x90, + 0x91, + 0x92, + 0x98, + 0x99, + 0x9A +}; + +const u16 DecorGfx_RAGGED_DESK[] = { + 0x93, + 0x94, + 0x95, + 0x9B, + 0x9C, + 0x9D +}; + +const u16 DecorGfx_COMFORT_DESK[] = { + 0x96, + 0x97, + 0xA3, + 0x9E, + 0x9F, + 0xAB +}; + +const u16 DecorGfx_PRETTY_DESK[] = { + 0xBD, + 0xBE, + 0xBF, + 0xC5, + 0xC6, + 0xC7, + 0xCD, + 0xCE, + 0xCF +}; + +const u16 DecorGfx_BRICK_DESK[] = { + 0xA0, + 0xA1, + 0xA2, + 0xA8, + 0xA9, + 0xAA, + 0xB0, + 0xB1, + 0xB2 +}; + +const u16 DecorGfx_CAMP_DESK[] = { + 0xA4, + 0xA5, + 0xA6, + 0xAC, + 0xAD, + 0xAE, + 0xB4, + 0xB5, + 0xB6 +}; + +const u16 DecorGfx_HARD_DESK[] = { + 0xA7, + 0xBB, + 0xBC, + 0xAF, + 0xC3, + 0xC4, + 0xB7, + 0xCB, + 0xCC +}; + +const u16 DecorGfx_SMALL_CHAIR[] = { + 0xB8 +}; + +const u16 DecorGfx_POKEMON_CHAIR[] = { + 0xB9 +}; + +const u16 DecorGfx_HEAVY_CHAIR[] = { + 0xBA +}; + +const u16 DecorGfx_PRETTY_CHAIR[] = { + 0xC0 +}; + +const u16 DecorGfx_COMFORT_CHAIR[] = { + 0xC1 +}; + +const u16 DecorGfx_RAGGED_CHAIR[] = { + 0xC2 +}; + +const u16 DecorGfx_BRICK_CHAIR[] = { + 0xC8 +}; + +const u16 DecorGfx_CAMP_CHAIR[] = { + 0xC9 +}; + +const u16 DecorGfx_HARD_CHAIR[] = { + 0xCA +}; + +const u16 DecorGfx_RED_PLANT[] = { + 0xD0, + 0xD8 +}; + +const u16 DecorGfx_TROPICAL_PLANT[] = { + 0xD2, + 0xDA +}; + +const u16 DecorGfx_PRETTY_FLOWERS[] = { + 0xD4, + 0xDC +}; + +const u16 DecorGfx_COLORFUL_PLANT[] = { + 0xE0, + 0xE2, + 0xE8, + 0xE9 +}; + +const u16 DecorGfx_BIG_PLANT[] = { + 0xE4, + 0xE6, + 0xEC, + 0xED +}; + +const u16 DecorGfx_GORGEOUS_PLANT[] = { + 0xF0, + 0xF2, + 0xF8, + 0xF9 +}; + +const u16 DecorGfx_RED_BRICK[] = { + 0x25, + 0x2D +}; + +const u16 DecorGfx_YELLOW_BRICK[] = { + 0x26, + 0x2E +}; + +const u16 DecorGfx_BLUE_BRICK[] = { + 0x27, + 0x2F +}; + +const u16 DecorGfx_RED_BALLOON[] = { + 0x138 +}; + +const u16 DecorGfx_BLUE_BALLOON[] = { + 0x13C +}; + +const u16 DecorGfx_YELLOW_BALLOON[] = { + 0x140 +}; + +const u16 DecorGfx_RED_TENT[] = { + 0x30, + 0x31, + 0x32, + 0x38, + 0x39, + 0x3A, + 0x40, + 0x41, + 0x3B +}; + +const u16 DecorGfx_BLUE_TENT[] = { + 0x48, + 0x49, + 0x68, + 0x50, + 0x51, + 0x70, + 0x58, + 0x59, + 0x69 +}; + +const u16 DecorGfx_SOLID_BOARD[] = { + 0x34, + 0x3C +}; + +const u16 DecorGfx_SLIDE[] = { + 0x35, + 0x36, + 0x3D, + 0x3E, + 0x63, + 0x64, + 0x6F, + 0x77 +}; + +const u16 DecorGfx_FENCE_LENGTH[] = { + 0x33 +}; + +const u16 DecorGfx_FENCE_WIDTH[] = { + 0x2C +}; + +const u16 DecorGfx_TIRE[] = { + 0x80, + 0x81, + 0x88, + 0x89 +}; + +const u16 DecorGfx_STAND[] = { + 0x6A, + 0x6B, + 0x6C, + 0x6D, + 0x72, + 0x73, + 0x74, + 0x75 +}; + +const u16 DecorGfx_MUD_BALL[] = { + 0x28 +}; + +const u16 DecorGfx_BREAKABLE_DOOR[] = { + 0x37, + 0x3F +}; + +const u16 DecorGfx_SAND_ORNAMENT[] = { + 0x85, + 0x8D +}; + +const u16 DecorGfx_SILVER_SHIELD[] = { + 0xD6, + 0xDE +}; + +const u16 DecorGfx_GOLD_SHIELD[] = { + 0x12E, + 0x136 +}; + +const u16 DecorGfx_GLASS_ORNAMENT[] = { + 0x82, + 0x8A +}; + +const u16 DecorGfx_TV[] = { + 0xF4 +}; + +const u16 DecorGfx_ROUND_TV[] = { + 0xF5 +}; + +const u16 DecorGfx_CUTE_TV[] = { + 0xF6 +}; + +const u16 DecorGfx_GLITTER_MAT[] = { + 0x60 +}; + +const u16 DecorGfx_JUMP_MAT[] = { + 0x61 +}; + +const u16 DecorGfx_SPIN_MAT[] = { + 0x62 +}; + +const u16 DecorGfx_C_LOW_NOTE_MAT[] = { + 0x78 +}; + +const u16 DecorGfx_D_NOTE_MAT[] = { + 0x79 +}; + +const u16 DecorGfx_E_NOTE_MAT[] = { + 0x7A +}; + +const u16 DecorGfx_F_NOTE_MAT[] = { + 0x7B +}; + +const u16 DecorGfx_G_NOTE_MAT[] = { + 0x7C +}; + +const u16 DecorGfx_A_NOTE_MAT[] = { + 0x7D +}; + +const u16 DecorGfx_B_NOTE_MAT[] = { + 0x7E +}; + +const u16 DecorGfx_C_HIGH_NOTE_MAT[] = { + 0xB3 +}; + +const u16 DecorGfx_SURF_MAT[] = { + 0x42, + 0x43, + 0x44, + 0x4A, + 0x4B, + 0x4C, + 0x52, + 0x53, + 0x54 +}; + +const u16 DecorGfx_THUNDER_MAT[] = { + 0x45, + 0x46, + 0x47, + 0x4D, + 0x4E, + 0x4F, + 0x55, + 0x56, + 0x57 +}; + +const u16 DecorGfx_FIRE_BLAST_MAT[] = { + 0x5A, + 0x5B, + 0x5C, + 0x5D, + 0x5E, + 0x5F, + 0x65, + 0x66, + 0x67 +}; + +const u16 DecorGfx_POWDER_SNOW_MAT[] = { + 0x100, + 0x101, + 0x102, + 0x108, + 0x109, + 0x10A, + 0x110, + 0x111, + 0x112 +}; + +const u16 DecorGfx_ATTRACT_MAT[] = { + 0x103, + 0x104, + 0x105, + 0x10B, + 0x10C, + 0x10D, + 0x113, + 0x114, + 0x115 +}; + +const u16 DecorGfx_FISSURE_MAT[] = { + 0x106, + 0x107, + 0x118, + 0x10E, + 0x10F, + 0x120, + 0x116, + 0x117, + 0x128 +}; + +const u16 DecorGfx_SPIKES_MAT[] = { + 0x119, + 0x11A, + 0x11B, + 0x121, + 0x122, + 0x123, + 0x129, + 0x12A, + 0x12B +}; + +const u16 DecorGfx_BALL_POSTER[] = { + 0x130 +}; + +const u16 DecorGfx_GREEN_POSTER[] = { + 0x131 +}; + +const u16 DecorGfx_RED_POSTER[] = { + 0x132 +}; + +const u16 DecorGfx_BLUE_POSTER[] = { + 0x133 +}; + +const u16 DecorGfx_CUTE_POSTER[] = { + 0x134 +}; + +const u16 DecorGfx_PIKA_POSTER[] = { + 0x11C, + 0x11D +}; + +const u16 DecorGfx_LONG_POSTER[] = { + 0x11E, + 0x11F +}; + +const u16 DecorGfx_SEA_POSTER[] = { + 0x124, + 0x125 +}; + +const u16 DecorGfx_SKY_POSTER[] = { + 0x126, + 0x127 +}; + +const u16 DecorGfx_KISS_POSTER[] = { + 0x12C, + 0x12D +}; + +const u16 DecorGfx_PICHU_DOLL[] = { + MAP_OBJ_GFX_PICHU_DOLL +}; + +const u16 DecorGfx_PIKACHU_DOLL[] = { + MAP_OBJ_GFX_PIKACHU_DOLL +}; + +const u16 DecorGfx_MARILL_DOLL[] = { + MAP_OBJ_GFX_MARILL_DOLL +}; + +const u16 DecorGfx_TOGEPI_DOLL[] = { + MAP_OBJ_GFX_TOGEPI_DOLL +}; + +const u16 DecorGfx_CYNDAQUIL_DOLL[] = { + MAP_OBJ_GFX_CYNDAQUIL_DOLL +}; + +const u16 DecorGfx_CHIKORITA_DOLL[] = { + MAP_OBJ_GFX_CHIKORITA_DOLL +}; + +const u16 DecorGfx_TOTODILE_DOLL[] = { + MAP_OBJ_GFX_TOTODILE_DOLL +}; + +const u16 DecorGfx_JIGGLYPUFF_DOLL[] = { + MAP_OBJ_GFX_JIGGLYPUFF_DOLL +}; + +const u16 DecorGfx_MEOWTH_DOLL[] = { + MAP_OBJ_GFX_MEOWTH_DOLL +}; + +const u16 DecorGfx_CLEFAIRY_DOLL[] = { + MAP_OBJ_GFX_CLEFAIRY_DOLL +}; + +const u16 DecorGfx_DITTO_DOLL[] = { + MAP_OBJ_GFX_DITTO_DOLL +}; + +const u16 DecorGfx_SMOOCHUM_DOLL[] = { + MAP_OBJ_GFX_SMOOCHUM_DOLL +}; + +const u16 DecorGfx_TREECKO_DOLL[] = { + MAP_OBJ_GFX_TREECKO_DOLL +}; + +const u16 DecorGfx_TORCHIC_DOLL[] = { + MAP_OBJ_GFX_TORCHIC_DOLL +}; + +const u16 DecorGfx_MUDKIP_DOLL[] = { + MAP_OBJ_GFX_MUDKIP_DOLL +}; + +const u16 DecorGfx_DUSKULL_DOLL[] = { + MAP_OBJ_GFX_DUSKULL_DOLL +}; + +const u16 DecorGfx_WYNAUT_DOLL[] = { + MAP_OBJ_GFX_WYNAUT_DOLL +}; + +const u16 DecorGfx_BALTOY_DOLL[] = { + MAP_OBJ_GFX_BALTOY_DOLL +}; + +const u16 DecorGfx_KECLEON_DOLL[] = { + MAP_OBJ_GFX_KECLEON_DOLL +}; + +const u16 DecorGfx_AZURILL_DOLL[] = { + MAP_OBJ_GFX_AZURILL_DOLL +}; + +const u16 DecorGfx_SKITTY_DOLL[] = { + MAP_OBJ_GFX_SKITTY_DOLL +}; + +const u16 DecorGfx_SWABLU_DOLL[] = { + MAP_OBJ_GFX_SWABLU_DOLL +}; + +const u16 DecorGfx_GULPIN_DOLL[] = { + MAP_OBJ_GFX_GULPIN_DOLL +}; + +const u16 DecorGfx_LOTAD_DOLL[] = { + MAP_OBJ_GFX_LOTAD_DOLL +}; + +const u16 DecorGfx_SEEDOT_DOLL[] = { + MAP_OBJ_GFX_SEEDOT_DOLL +}; + +const u16 DecorGfx_PIKA_CUSHION[] = { + MAP_OBJ_GFX_PIKA_CUSHION +}; + +const u16 DecorGfx_ROUND_CUSHION[] = { + MAP_OBJ_GFX_ROUND_CUSHION +}; + +const u16 DecorGfx_KISS_CUSHION[] = { + MAP_OBJ_GFX_KISS_CUSHION +}; + +const u16 DecorGfx_ZIGZAG_CUSHION[] = { + MAP_OBJ_GFX_ZIGZAG_CUSHION +}; + +const u16 DecorGfx_SPIN_CUSHION[] = { + MAP_OBJ_GFX_SPIN_CUSHION +}; + +const u16 DecorGfx_DIAMOND_CUSHION[] = { + MAP_OBJ_GFX_DIAMOND_CUSHION +}; + +const u16 DecorGfx_BALL_CUSHION[] = { + MAP_OBJ_GFX_BALL_CUSHION +}; + +const u16 DecorGfx_GRASS_CUSHION[] = { + MAP_OBJ_GFX_GRASS_CUSHION +}; + +const u16 DecorGfx_FIRE_CUSHION[] = { + MAP_OBJ_GFX_FIRE_CUSHION +}; + +const u16 DecorGfx_WATER_CUSHION[] = { + MAP_OBJ_GFX_WATER_CUSHION +}; + +const u16 DecorGfx_SNORLAX_DOLL[] = { + MAP_OBJ_GFX_BIG_SNORLAX_DOLL +}; + +const u16 DecorGfx_RHYDON_DOLL[] = { + MAP_OBJ_GFX_BIG_RHYDON_DOLL +}; + +const u16 DecorGfx_LAPRAS_DOLL[] = { + MAP_OBJ_GFX_BIG_LAPRAS_DOLL +}; + +const u16 DecorGfx_VENUSAUR_DOLL[] = { + MAP_OBJ_GFX_BIG_VENUSAUR_DOLL +}; + +const u16 DecorGfx_CHARIZARD_DOLL[] = { + MAP_OBJ_GFX_BIG_CHARIZARD_DOLL +}; + +const u16 DecorGfx_BLASTOISE_DOLL[] = { + MAP_OBJ_GFX_BIG_BLASTOISE_DOLL +}; + +const u16 DecorGfx_WAILMER_DOLL[] = { + MAP_OBJ_GFX_BIG_WAILMER_DOLL +}; + +const u16 DecorGfx_REGIROCK_DOLL[] = { + MAP_OBJ_GFX_BIG_REGIROCK_DOLL +}; + +const u16 DecorGfx_REGICE_DOLL[] = { + MAP_OBJ_GFX_BIG_REGICE_DOLL +}; + +const u16 DecorGfx_REGISTEEL_DOLL[] = { + MAP_OBJ_GFX_BIG_REGISTEEL_DOLL +}; + +#if ENGLISH +const struct Decoration gDecorations[] = { + {DECOR_NONE, _("SMALL DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_DESK, 0, DecorDesc_SMALL_DESK, DecorGfx_SMALL_DESK}, + {DECOR_SMALL_DESK, _("SMALL DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_DESK, 3000, DecorDesc_SMALL_DESK, DecorGfx_SMALL_DESK}, + {DECOR_POKEMON_DESK, _("POKéMON DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_DESK, 3000, DecorDesc_POKEMON_DESK, DecorGfx_POKEMON_DESK}, + {DECOR_HEAVY_DESK, _("HEAVY DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_3x2, DECORCAT_DESK, 6000, DecorDesc_HEAVY_DESK, DecorGfx_HEAVY_DESK}, + {DECOR_RAGGED_DESK, _("RAGGED DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_3x2, DECORCAT_DESK, 6000, DecorDesc_RAGGED_DESK, DecorGfx_RAGGED_DESK}, + {DECOR_COMFORT_DESK, _("COMFORT DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_3x2, DECORCAT_DESK, 6000, DecorDesc_COMFORT_DESK, DecorGfx_COMFORT_DESK}, + {DECOR_PRETTY_DESK, _("PRETTY DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_3x3, DECORCAT_DESK, 9000, DecorDesc_PRETTY_DESK, DecorGfx_PRETTY_DESK}, + {DECOR_BRICK_DESK, _("BRICK DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_3x3, DECORCAT_DESK, 9000, DecorDesc_BRICK_DESK, DecorGfx_BRICK_DESK}, + {DECOR_CAMP_DESK, _("CAMP DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_3x3, DECORCAT_DESK, 9000, DecorDesc_CAMP_DESK, DecorGfx_CAMP_DESK}, + {DECOR_HARD_DESK, _("HARD DESK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_3x3, DECORCAT_DESK, 9000, DecorDesc_HARD_DESK, DecorGfx_HARD_DESK}, + {DECOR_SMALL_CHAIR, _("SMALL CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_SMALL_CHAIR, DecorGfx_SMALL_CHAIR}, + {DECOR_POKEMON_CHAIR, _("POKéMON CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_POKEMON_CHAIR, DecorGfx_POKEMON_CHAIR}, + {DECOR_HEAVY_CHAIR, _("HEAVY CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_HEAVY_CHAIR, DecorGfx_HEAVY_CHAIR}, + {DECOR_PRETTY_CHAIR, _("PRETTY CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_PRETTY_CHAIR, DecorGfx_PRETTY_CHAIR}, + {DECOR_COMFORT_CHAIR, _("COMFORT CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_COMFORT_CHAIR, DecorGfx_COMFORT_CHAIR}, + {DECOR_RAGGED_CHAIR, _("RAGGED CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_RAGGED_CHAIR, DecorGfx_RAGGED_CHAIR}, + {DECOR_BRICK_CHAIR, _("BRICK CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_BRICK_CHAIR, DecorGfx_BRICK_CHAIR}, + {DECOR_CAMP_CHAIR, _("CAMP CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_CAMP_CHAIR, DecorGfx_CAMP_CHAIR}, + {DECOR_HARD_CHAIR, _("HARD CHAIR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_CHAIR, 2000, DecorDesc_HARD_CHAIR, DecorGfx_HARD_CHAIR}, + {DECOR_RED_PLANT, _("RED PLANT"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_1x2, DECORCAT_PLANT, 3000, DecorDesc_RED_PLANT, DecorGfx_RED_PLANT}, + {DECOR_TROPICAL_PLANT, _("TROPICAL PLANT"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_1x2, DECORCAT_PLANT, 3000, DecorDesc_TROPICAL_PLANT, DecorGfx_TROPICAL_PLANT}, + {DECOR_PRETTY_FLOWERS, _("PRETTY FLOWERS"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_1x2, DECORCAT_PLANT, 3000, DecorDesc_PRETTY_FLOWERS, DecorGfx_PRETTY_FLOWERS}, + {DECOR_COLORFUL_PLANT, _("COLORFUL PLANT"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_2x2, DECORCAT_PLANT, 5000, DecorDesc_COLORFUL_PLANT, DecorGfx_COLORFUL_PLANT}, + {DECOR_BIG_PLANT, _("BIG PLANT"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_2x2, DECORCAT_PLANT, 5000, DecorDesc_BIG_PLANT, DecorGfx_BIG_PLANT}, + {DECOR_GORGEOUS_PLANT, _("GORGEOUS PLANT"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_2x2, DECORCAT_PLANT, 5000, DecorDesc_GORGEOUS_PLANT, DecorGfx_GORGEOUS_PLANT}, + {DECOR_RED_BRICK, _("RED BRICK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 500, DecorDesc_RED_BRICK, DecorGfx_RED_BRICK}, + {DECOR_YELLOW_BRICK, _("YELLOW BRICK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 500, DecorDesc_YELLOW_BRICK, DecorGfx_YELLOW_BRICK}, + {DECOR_BLUE_BRICK, _("BLUE BRICK"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 500, DecorDesc_BLUE_BRICK, DecorGfx_BLUE_BRICK}, + {DECOR_RED_BALLOON, _("RED BALLOON"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 500, DecorDesc_RED_BALLOON, DecorGfx_RED_BALLOON}, + {DECOR_BLUE_BALLOON, _("BLUE BALLOON"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 500, DecorDesc_BLUE_BALLOON, DecorGfx_BLUE_BALLOON}, + {DECOR_YELLOW_BALLOON, _("YELLOW BALLOON"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 500, DecorDesc_YELLOW_BALLOON, DecorGfx_YELLOW_BALLOON}, + {DECOR_RED_TENT, _("RED TENT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_ORNAMENT, 10000, DecorDesc_RED_TENT, DecorGfx_RED_TENT}, + {DECOR_BLUE_TENT, _("BLUE TENT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_ORNAMENT, 10000, DecorDesc_BLUE_TENT, DecorGfx_BLUE_TENT}, + {DECOR_SOLID_BOARD, _("SOLID BOARD"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 3000, DecorDesc_SOLID_BOARD, DecorGfx_SOLID_BOARD}, + {DECOR_SLIDE, _("SLIDE"), DECORPERM_PASS_FLOOR, DECORSHAPE_2x4, DECORCAT_ORNAMENT, 8000, DecorDesc_SLIDE, DecorGfx_SLIDE}, + {DECOR_FENCE_LENGTH, _("FENCE LENGTH"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 500, DecorDesc_FENCE_LENGTH, DecorGfx_FENCE_LENGTH}, + {DECOR_FENCE_WIDTH, _("FENCE WIDTH"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 500, DecorDesc_FENCE_WIDTH, DecorGfx_FENCE_WIDTH}, + {DECOR_TIRE, _("TIRE"), DECORPERM_SOLID_FLOOR, DECORSHAPE_2x2, DECORCAT_ORNAMENT, 800, DecorDesc_TIRE, DecorGfx_TIRE}, + {DECOR_STAND, _("STAND"), DECORPERM_PASS_FLOOR, DECORSHAPE_4x2, DECORCAT_ORNAMENT, 7000, DecorDesc_STAND, DecorGfx_STAND}, + {DECOR_MUD_BALL, _("MUD BALL"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 200, DecorDesc_MUD_BALL, DecorGfx_MUD_BALL}, + {DECOR_BREAKABLE_DOOR, _("BREAKABLE DOOR"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 3000, DecorDesc_BREAKABLE_DOOR, DecorGfx_BREAKABLE_DOOR}, + {DECOR_SAND_ORNAMENT, _("SAND ORNAMENT"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 3000, DecorDesc_SAND_ORNAMENT, DecorGfx_SAND_ORNAMENT}, + {DECOR_SILVER_SHIELD, _("SILVER SHIELD"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 0, DecorDesc_SILVER_SHIELD, DecorGfx_SILVER_SHIELD}, + {DECOR_GOLD_SHIELD, _("GOLD SHIELD"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 0, DecorDesc_GOLD_SHIELD, DecorGfx_GOLD_SHIELD}, + {DECOR_GLASS_ORNAMENT, _("GLASS ORNAMENT"), DECORPERM_BEHIND_FLOOR, DECORSHAPE_1x2, DECORCAT_ORNAMENT, 0, DecorDesc_GLASS_ORNAMENT, DecorGfx_GLASS_ORNAMENT}, + {DECOR_TV, _("TV"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 3000, DecorDesc_TV, DecorGfx_TV}, + {DECOR_ROUND_TV, _("ROUND TV"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 4000, DecorDesc_ROUND_TV, DecorGfx_ROUND_TV}, + {DECOR_CUTE_TV, _("CUTE TV"), DECORPERM_SOLID_FLOOR, DECORSHAPE_1x1, DECORCAT_ORNAMENT, 4000, DecorDesc_CUTE_TV, DecorGfx_CUTE_TV}, + {DECOR_GLITTER_MAT, _("GLITTER MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 2000, DecorDesc_GLITTER_MAT, DecorGfx_GLITTER_MAT}, + {DECOR_JUMP_MAT, _("JUMP MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 2000, DecorDesc_JUMP_MAT, DecorGfx_JUMP_MAT}, + {DECOR_SPIN_MAT, _("SPIN MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 2000, DecorDesc_SPIN_MAT, DecorGfx_SPIN_MAT}, + {DECOR_C_LOW_NOTE_MAT, _("C Low NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_C_LOW_NOTE_MAT, DecorGfx_C_LOW_NOTE_MAT}, + {DECOR_D_NOTE_MAT, _("D NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_D_NOTE_MAT, DecorGfx_D_NOTE_MAT}, + {DECOR_E_NOTE_MAT, _("E NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_E_NOTE_MAT, DecorGfx_E_NOTE_MAT}, + {DECOR_F_NOTE_MAT, _("F NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_F_NOTE_MAT, DecorGfx_F_NOTE_MAT}, + {DECOR_G_NOTE_MAT, _("G NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_G_NOTE_MAT, DecorGfx_G_NOTE_MAT}, + {DECOR_A_NOTE_MAT, _("A NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_A_NOTE_MAT, DecorGfx_A_NOTE_MAT}, + {DECOR_B_NOTE_MAT, _("B NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_B_NOTE_MAT, DecorGfx_B_NOTE_MAT}, + {DECOR_C_HIGH_NOTE_MAT, _("C High NOTE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_1x1, DECORCAT_MAT, 500, DecorDesc_C_HIGH_NOTE_MAT, DecorGfx_C_HIGH_NOTE_MAT}, + {DECOR_SURF_MAT, _("SURF MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_MAT, 4000, DecorDesc_SURF_MAT, DecorGfx_SURF_MAT}, + {DECOR_THUNDER_MAT, _("THUNDER MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_MAT, 4000, DecorDesc_THUNDER_MAT, DecorGfx_THUNDER_MAT}, + {DECOR_FIRE_BLAST_MAT, _("FIRE BLAST MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_MAT, 4000, DecorDesc_FIRE_BLAST_MAT, DecorGfx_FIRE_BLAST_MAT}, + {DECOR_POWDER_SNOW_MAT, _("POWDER SNOW MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_MAT, 4000, DecorDesc_POWDER_SNOW_MAT, DecorGfx_POWDER_SNOW_MAT}, + {DECOR_ATTRACT_MAT, _("ATTRACT MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_MAT, 4000, DecorDesc_ATTRACT_MAT, DecorGfx_ATTRACT_MAT}, + {DECOR_FISSURE_MAT, _("FISSURE MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_MAT, 4000, DecorDesc_FISSURE_MAT, DecorGfx_FISSURE_MAT}, + {DECOR_SPIKES_MAT, _("SPIKES MAT"), DECORPERM_PASS_FLOOR, DECORSHAPE_3x3, DECORCAT_MAT, 4000, DecorDesc_SPIKES_MAT, DecorGfx_SPIKES_MAT}, + {DECOR_BALL_POSTER, _("BALL POSTER"), DECORPERM_NA_WALL, DECORSHAPE_1x1, DECORCAT_POSTER, 1000, DecorDesc_BALL_POSTER, DecorGfx_BALL_POSTER}, + {DECOR_GREEN_POSTER, _("GREEN POSTER"), DECORPERM_NA_WALL, DECORSHAPE_1x1, DECORCAT_POSTER, 1000, DecorDesc_GREEN_POSTER, DecorGfx_GREEN_POSTER}, + {DECOR_RED_POSTER, _("RED POSTER"), DECORPERM_NA_WALL, DECORSHAPE_1x1, DECORCAT_POSTER, 1000, DecorDesc_RED_POSTER, DecorGfx_RED_POSTER}, + {DECOR_BLUE_POSTER, _("BLUE POSTER"), DECORPERM_NA_WALL, DECORSHAPE_1x1, DECORCAT_POSTER, 1000, DecorDesc_BLUE_POSTER, DecorGfx_BLUE_POSTER}, + {DECOR_CUTE_POSTER, _("CUTE POSTER"), DECORPERM_NA_WALL, DECORSHAPE_1x1, DECORCAT_POSTER, 1000, DecorDesc_CUTE_POSTER, DecorGfx_CUTE_POSTER}, + {DECOR_PIKA_POSTER, _("PIKA POSTER"), DECORPERM_NA_WALL, DECORSHAPE_2x1, DECORCAT_POSTER, 1500, DecorDesc_PIKA_POSTER, DecorGfx_PIKA_POSTER}, + {DECOR_LONG_POSTER, _("LONG POSTER"), DECORPERM_NA_WALL, DECORSHAPE_2x1, DECORCAT_POSTER, 1500, DecorDesc_LONG_POSTER, DecorGfx_LONG_POSTER}, + {DECOR_SEA_POSTER, _("SEA POSTER"), DECORPERM_NA_WALL, DECORSHAPE_2x1, DECORCAT_POSTER, 1500, DecorDesc_SEA_POSTER, DecorGfx_SEA_POSTER}, + {DECOR_SKY_POSTER, _("SKY POSTER"), DECORPERM_NA_WALL, DECORSHAPE_2x1, DECORCAT_POSTER, 1500, DecorDesc_SKY_POSTER, DecorGfx_SKY_POSTER}, + {DECOR_KISS_POSTER, _("KISS POSTER"), DECORPERM_NA_WALL, DECORSHAPE_2x1, DECORCAT_POSTER, 1500, DecorDesc_KISS_POSTER, DecorGfx_KISS_POSTER}, + {DECOR_PICHU_DOLL, _("PICHU DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_PICHU_DOLL, DecorGfx_PICHU_DOLL}, + {DECOR_PIKACHU_DOLL, _("PIKACHU DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_PIKACHU_DOLL, DecorGfx_PIKACHU_DOLL}, + {DECOR_MARILL_DOLL, _("MARILL DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_MARILL_DOLL, DecorGfx_MARILL_DOLL}, + {DECOR_TOGEPI_DOLL, _("TOGEPI DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_TOGEPI_DOLL, DecorGfx_TOGEPI_DOLL}, + {DECOR_CYNDAQUIL_DOLL, _("CYNDAQUIL DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_CYNDAQUIL_DOLL, DecorGfx_CYNDAQUIL_DOLL}, + {DECOR_CHIKORITA_DOLL, _("CHIKORITA DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_CHIKORITA_DOLL, DecorGfx_CHIKORITA_DOLL}, + {DECOR_TOTODILE_DOLL, _("TOTODILE DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_TOTODILE_DOLL, DecorGfx_TOTODILE_DOLL}, + {DECOR_JIGGLYPUFF_DOLL, _("JIGGLYPUFF DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_JIGGLYPUFF_DOLL, DecorGfx_JIGGLYPUFF_DOLL}, + {DECOR_MEOWTH_DOLL, _("MEOWTH DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_MEOWTH_DOLL, DecorGfx_MEOWTH_DOLL}, + {DECOR_CLEFAIRY_DOLL, _("CLEFAIRY DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_CLEFAIRY_DOLL, DecorGfx_CLEFAIRY_DOLL}, + {DECOR_DITTO_DOLL, _("DITTO DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_DITTO_DOLL, DecorGfx_DITTO_DOLL}, + {DECOR_SMOOCHUM_DOLL, _("SMOOCHUM DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_SMOOCHUM_DOLL, DecorGfx_SMOOCHUM_DOLL}, + {DECOR_TREECKO_DOLL, _("TREECKO DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_TREECKO_DOLL, DecorGfx_TREECKO_DOLL}, + {DECOR_TORCHIC_DOLL, _("TORCHIC DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_TORCHIC_DOLL, DecorGfx_TORCHIC_DOLL}, + {DECOR_MUDKIP_DOLL, _("MUDKIP DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_MUDKIP_DOLL, DecorGfx_MUDKIP_DOLL}, + {DECOR_DUSKULL_DOLL, _("DUSKULL DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_DUSKULL_DOLL, DecorGfx_DUSKULL_DOLL}, + {DECOR_WYNAUT_DOLL, _("WYNAUT DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_WYNAUT_DOLL, DecorGfx_WYNAUT_DOLL}, + {DECOR_BALTOY_DOLL, _("BALTOY DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_BALTOY_DOLL, DecorGfx_BALTOY_DOLL}, + {DECOR_KECLEON_DOLL, _("KECLEON DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_KECLEON_DOLL, DecorGfx_KECLEON_DOLL}, + {DECOR_AZURILL_DOLL, _("AZURILL DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_AZURILL_DOLL, DecorGfx_AZURILL_DOLL}, + {DECOR_SKITTY_DOLL, _("SKITTY DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_SKITTY_DOLL, DecorGfx_SKITTY_DOLL}, + {DECOR_SWABLU_DOLL, _("SWABLU DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_SWABLU_DOLL, DecorGfx_SWABLU_DOLL}, + {DECOR_GULPIN_DOLL, _("GULPIN DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_GULPIN_DOLL, DecorGfx_GULPIN_DOLL}, + {DECOR_LOTAD_DOLL, _("LOTAD DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_LOTAD_DOLL, DecorGfx_LOTAD_DOLL}, + {DECOR_SEEDOT_DOLL, _("SEEDOT DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_DOLL, 3000, DecorDesc_SEEDOT_DOLL, DecorGfx_SEEDOT_DOLL}, + {DECOR_PIKA_CUSHION, _("PIKA CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_PIKA_CUSHION, DecorGfx_PIKA_CUSHION}, + {DECOR_ROUND_CUSHION, _("ROUND CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_ROUND_CUSHION, DecorGfx_ROUND_CUSHION}, + {DECOR_KISS_CUSHION, _("KISS CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_KISS_CUSHION, DecorGfx_KISS_CUSHION}, + {DECOR_ZIGZAG_CUSHION, _("ZIGZAG CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_ZIGZAG_CUSHION, DecorGfx_ZIGZAG_CUSHION}, + {DECOR_SPIN_CUSHION, _("SPIN CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_SPIN_CUSHION, DecorGfx_SPIN_CUSHION}, + {DECOR_DIAMOND_CUSHION, _("DIAMOND CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_DIAMOND_CUSHION, DecorGfx_DIAMOND_CUSHION}, + {DECOR_BALL_CUSHION, _("BALL CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_BALL_CUSHION, DecorGfx_BALL_CUSHION}, + {DECOR_GRASS_CUSHION, _("GRASS CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_GRASS_CUSHION, DecorGfx_GRASS_CUSHION}, + {DECOR_FIRE_CUSHION, _("FIRE CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_FIRE_CUSHION, DecorGfx_FIRE_CUSHION}, + {DECOR_WATER_CUSHION, _("WATER CUSHION"), DECORPERM_SOLID_MAT, DECORSHAPE_1x1, DECORCAT_CUSHION, 2000, DecorDesc_WATER_CUSHION, DecorGfx_WATER_CUSHION}, + {DECOR_SNORLAX_DOLL, _("SNORLAX DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_SNORLAX_DOLL, DecorGfx_SNORLAX_DOLL}, + {DECOR_RHYDON_DOLL, _("RHYDON DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_RHYDON_DOLL, DecorGfx_RHYDON_DOLL}, + {DECOR_LAPRAS_DOLL, _("LAPRAS DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_LAPRAS_DOLL, DecorGfx_LAPRAS_DOLL}, + {DECOR_VENUSAUR_DOLL, _("VENUSAUR DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_VENUSAUR_DOLL, DecorGfx_VENUSAUR_DOLL}, + {DECOR_CHARIZARD_DOLL, _("CHARIZARD DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_CHARIZARD_DOLL, DecorGfx_CHARIZARD_DOLL}, + {DECOR_BLASTOISE_DOLL, _("BLASTOISE DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_BLASTOISE_DOLL, DecorGfx_BLASTOISE_DOLL}, + {DECOR_WAILMER_DOLL, _("WAILMER DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_WAILMER_DOLL, DecorGfx_WAILMER_DOLL}, + {DECOR_REGIROCK_DOLL, _("REGIROCK DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_REGIROCK_DOLL, DecorGfx_REGIROCK_DOLL}, + {DECOR_REGICE_DOLL, _("REGICE DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_REGICE_DOLL, DecorGfx_REGICE_DOLL}, + {DECOR_REGISTEEL_DOLL, _("REGISTEEL DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_REGISTEEL_DOLL, DecorGfx_REGISTEEL_DOLL} +}; +#elif GERMAN +#include "data/decoration/decorations.h" +#endif + +const u8 *const gUnknown_083EC5E4[] = { + SecretBaseText_Desk, + SecretBaseText_Chair, + SecretBaseText_Plant, + SecretBaseText_Ornament, + SecretBaseText_Mat, + SecretBaseText_Poster, + SecretBaseText_Doll, + SecretBaseText_Cushion +}; + +const struct MenuAction2 gUnknown_083EC604[] = { + {SecretBaseText_Decorate, sub_80FF160}, + {SecretBaseText_PutAway, sub_8100A0C}, + {SecretBaseText_Toss, sub_8101700}, + {gUnknownText_Exit, gpu_pal_decompress_alloc_tag_and_upload} +}; + +const u8 *const gUnknown_083EC624[] = { + SecretBaseText_PutOutDecor, + SecretBaseText_StoreChosenDecor, + SecretBaseText_ThrowAwayDecor, + gMenuText_GoBackToPrev +}; + +const struct YesNoFuncTable gUnknown_083EC634[] = { + {sub_80FF5BC, sub_80FF058}, + {sub_81017A0, sub_80FF058}, + {sub_81017A0, sub_80FF058}, + {sub_8109D04, sub_80FF058} +}; + +const u16 gUnknown_083EC654[] = {0x6318, 0x739C, 0x7FFF}; +const u8 gUnknown_083EC65A[] = _("{PALETTE 13}{STR_VAR_1}"); + +const u8 Unknown_3EC660[] = {0, 1, 2, 3}; +const u8 Unknown_3EC664[] = {0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13}; +const u8 Unknown_3EC670[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; +const u8 Unknown_3EC680[] = {0, 1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21}; +const u8 Unknown_3EC68C[] = {0, 1, 2, 3, 4, 5, 6, 7}; +const u8 Unknown_3EC694[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}; +const u8 Unknown_3EC6B4[] = {0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29, 32, 33, 34, 35, 36, 37, 40, 41, 42, 43, 44, 45}; +const u8 Unknown_3EC6D8[] = {0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29}; + +const u8 Unknown_3EC6F0[] = {0, 0, 0, 0}; +const u8 Unknown_3EC6F4[] = {0, 0, 1, 1, 0, 0, 1, 1}; +const u8 Unknown_3EC6FC[] = {0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2}; +const u8 Unknown_3EC708[] = {0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 4, 4, 5, 5, 6, 6, 7, 7}; +const u8 Unknown_3EC728[] = {0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3}; +const u8 Unknown_3EC738[] = {0, 0, 0, 0, 1, 1, 1, 1}; +const u8 Unknown_3EC740[] = {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2}; +const u8 Unknown_3EC74C[] = {0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3, 4, 4, 5, 5, 4, 4, 5, 5, 6, 6, 7, 7, 6, 6, 7, 7}; +const u8 Unknown_3EC76C[] = {0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 6, 6, 7, 7, 8, 8}; +const u8 Unknown_3EC790[] = {0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 3, 3, 4, 4, 5, 5}; + +const u8 Unknown_3EC7A8[] = {4, 5, 6, 7}; +const u8 Unknown_3EC7AC[] = {4, 5, 4, 5, 6, 7, 6, 7}; +const u8 Unknown_3EC7B4[] = {4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7}; +const u8 Unknown_3EC7C0[] = {4, 5, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 6, 7}; +const u8 Unknown_3EC7E0[] = {4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7}; +const u8 Unknown_3EC7F0[] = {4, 5, 6, 7, 4, 5, 6, 7}; +const u8 Unknown_3EC7F8[] = {4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7}; +const u8 Unknown_3EC804[] = {4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7, 4, 5, 4, 5, 6, 7, 6, 7}; +const u8 Unknown_3EC824[] = {4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7}; +const u8 Unknown_3EC848[] = {4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7, 4, 5, 4, 5, 4, 5, 6, 7, 6, 7, 6, 7}; + +const struct UnkStruct_803EC860 gUnknown_083EC860[] = { + {Unknown_3EC660, Unknown_3EC6F0, Unknown_3EC7A8, 0x4}, + {Unknown_3EC68C, Unknown_3EC6F4, Unknown_3EC7AC, 0x8}, + {Unknown_3EC664, Unknown_3EC6FC, Unknown_3EC7B4, 0xc}, + {Unknown_3EC694, Unknown_3EC708, Unknown_3EC7C0, 0x20}, + {Unknown_3EC670, Unknown_3EC728, Unknown_3EC7E0, 0x10}, + {Unknown_3EC68C, Unknown_3EC738, Unknown_3EC7F0, 0x8}, + {Unknown_3EC680, Unknown_3EC740, Unknown_3EC7F8, 0xc}, + {Unknown_3EC694, Unknown_3EC74C, Unknown_3EC804, 0x20}, + {Unknown_3EC6B4, Unknown_3EC76C, Unknown_3EC824, 0x24}, + {Unknown_3EC6D8, Unknown_3EC790, Unknown_3EC848, 0x18} +}; + +const struct UnkStruct_083EC900 gUnknown_083EC900[] = { + {0, 1, 0x78, 0x4e}, + {1, 2, 0x80, 0x4e}, + {1, 3, 0x90, 0x56}, + {1, 3, 0x90, 0x46}, + {0, 2, 0x80, 0x46}, + {2, 2, 0x78, 0x46}, + {2, 3, 0x80, 0x56}, + {2, 3, 0x80, 0x36}, + {0, 3, 0x90, 0x46}, + {1, 3, 0x90, 0x46} +}; + +const union AnimCmd gSpriteAnim_83EC928[] = { + ANIMCMD_FRAME(.imageValue = 0, .duration = 0), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83EC930[] = { + gSpriteAnim_83EC928 +}; + +const struct SpriteFrameImage gSpriteImageTable_83EC934[] = { + {.data = (u8 *)&gUnknown_02038900.image, .size = sizeof gUnknown_02038900.image} +}; + +const struct SpriteTemplate gSpriteTemplate_83EC93C = { + .tileTag = 0xffff, + .paletteTag = 3000, + .oam = &gUnknown_020391AC, + .anims = gSpriteAnimTable_83EC930, + .images = gSpriteImageTable_83EC934, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81009A8 +}; + +const struct SpritePalette gUnknown_083EC954 = {.data = (u16 *)&gUnknown_02038900.palette, .tag = 3000}; + +const struct YesNoFuncTable gUnknown_083EC95C = {.yesFunc = sub_81000C4, .noFunc = sub_810065C}; +const struct YesNoFuncTable gUnknown_083EC964 = {.yesFunc = sub_810026C, .noFunc = sub_810065C}; +const struct YesNoFuncTable gUnknown_083EC96C[] = { + {.yesFunc = sub_80FFAB0, .noFunc = sub_80FFB08}, + {.yesFunc = sub_8100F88, .noFunc = sub_8100FB4} +}; + +const u8 gUnknown_083EC97C[] = {4, 4, 4, 4, 0, 3, 3, 0}; +const u8 gUnknown_083EC984[] = {4, 4, 4, 4, 0, 4, 3, 0}; + +const u16 gUnknown_083EC98C[] = INCBIN_U16("graphics/unknown/83EC98C.gbapal"); +const u16 Unknown_3EC9AC[] = INCBIN_U16("graphics/unknown/83EC9AC.gbapal"); +const struct YesNoFuncTable gUnknown_083EC9CC = {.yesFunc = sub_810153C, .noFunc = sub_8100EEC}; +const struct YesNoFuncTable gUnknown_083EC9D4 = {.yesFunc = sub_8101590, .noFunc = sub_8100EEC}; +const u32 gSpriteImage_83EC9DC[] = INCBIN_U32("graphics/unknown_sprites/83EC9DC.4bpp"); +const struct SpritePalette gUnknown_083ECA5C = {.data = gUnknown_083EC98C, .tag = 8}; +const struct SpritePalette gUnknown_083ECA64 = {.data = Unknown_3EC9AC, .tag = 8}; +const struct OamData gOamData_83ECA6C = { + .size = 1, .priority = 1 +}; + +const union AnimCmd gSpriteAnim_83ECA74[] = { + ANIMCMD_FRAME(.imageValue = 0, .duration = 0), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83ECA7C[] = { + gSpriteAnim_83ECA74 +}; + +const struct SpriteFrameImage gSpriteImageTable_83ECA80[] = { + obj_frame_tiles(gSpriteImage_83EC9DC) +}; + +const struct SpriteTemplate gSpriteTemplate_83ECA88 = { + .tileTag = 0xffff, + .paletteTag = 8, + .oam = &gOamData_83ECA6C, + .anims = gSpriteAnimTable_83ECA7C, + .images = gSpriteImageTable_83ECA80, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8101698 +}; + +const struct YesNoFuncTable gUnknown_083ECAA0 = {.yesFunc = sub_8101848, .noFunc = sub_80FED3C}; + +u8 *const unref_label_083ECAA8[] = {ewram}; + +// text + +extern u8 gUnknown_0815F399[]; + +void sub_80FE1DC(void) +{ + sub_80FE2B4(); + MenuDrawTextWindow(0, 0, 10, 9); + PrintMenuItems(1, 1, 4, (const struct MenuAction *)gUnknown_083EC604); + InitMenu(0, 1, 1, 4, gUnknown_020388D4, 9); +} + +void sub_80FE220(void) +{ + gUnknown_020388D4 = 0; + ScriptContext2_Enable(); + sub_80FE1DC(); + sub_80FE394(); +} + +void DecorationPC(u8 taskId) +{ + sub_80FE220(); + gTasks[taskId].func = Task_DecorationPCProcessMenuInput; +} + +void Task_SecretBasePC_Decoration(u8 taskId) +{ + DecorationPC(taskId); + ewram_1f000.items = gSaveBlock1.secretBases[0].decorations; + ewram_1f000.pos = gSaveBlock1.secretBases[0].decorationPos; + ewram_1f000.size = sizeof gSaveBlock1.secretBases[0].decorations; + ewram_1f000.isPlayerRoom = 0; +} + +void DoPlayerPCDecoration(u8 taskId) +{ + DecorationPC(taskId); + ewram_1f000.items = gSaveBlock1.playerRoomDecor; + ewram_1f000.pos = gSaveBlock1.playerRoomDecorPos; + ewram_1f000.size = sizeof gSaveBlock1.playerRoomDecor; + ewram_1f000.isPlayerRoom = 1; +} + +void sub_80FE2B4(void) +{ + u16 palettes[3]; + memcpy(palettes, gUnknown_083EC654, sizeof gUnknown_083EC654); + LoadPalette(&palettes[2], 0xdf, 2); + LoadPalette(&palettes[1], 0xd1, 2); + LoadPalette(&palettes[0], 0xd8, 2); +} + +void Task_DecorationPCProcessMenuInput(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gMain.newKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + gUnknown_020388D4 = MoveMenuCursor(-1); + sub_80FE394(); + } + if (gMain.newKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + gUnknown_020388D4 = MoveMenuCursor(1); + sub_80FE394(); + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_083EC604[gUnknown_020388D4].func(taskId); + } else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gpu_pal_decompress_alloc_tag_and_upload(taskId); + } + } +} + +void sub_80FE394(void) +{ + MenuFillWindowRectWithBlankTile(2, 15, 27, 18); + MenuPrint(gUnknown_083EC624[gUnknown_020388D4], 2, 15); +} + +void gpu_pal_decompress_alloc_tag_and_upload(u8 taskId) +{ + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 10, 9); + MenuFillWindowRectWithBlankTile(2, 15, 27, 18); + FreeSpritePaletteByTag(6); + if (ewram_1f000.isPlayerRoom == 0) + { + ScriptContext1_SetupScript(gUnknown_0815F399); + DestroyTask(taskId); + } else + { + ReshowPlayerPC(taskId); + } +} + +void sub_80FE418(u8 taskId) +{ + sub_80FE5AC(taskId); +} + +void sub_80FE428(u8 taskId) +{ + InitMenu(0, 1, 1, 4, gUnknown_020388D4, 9); + sub_80FE394(); + gTasks[taskId].func = Task_DecorationPCProcessMenuInput; +} + +void sub_80FE470(u8 decoCat, u8 left, u8 top, u8 palIdx) // PrintDecorationCategorySelectionMenuString +{ + u8 *strptr; + u8 v0; + v0 = sub_8072CBC(); + // PALETTE {palIdx} + strptr = gStringVar4; + strptr[0] = EXT_CTRL_CODE_BEGIN; + strptr[1] = 5; + strptr[2] = palIdx; + strptr += 3; + strptr = StringCopy(strptr, gUnknown_083EC5E4[decoCat]); + strptr = sub_8072C14(strptr, sub_8134194(decoCat), 0x56, 1); + *strptr++ = 0xba; + strptr = sub_8072C14(strptr, gDecorationInventories[decoCat].size, 0x68, 1); + strptr[0] = EXT_CTRL_CODE_BEGIN; + strptr[1] = 5; + strptr[2] = v0; + strptr[3] = EOS; + MenuPrint(gStringVar4, left, top); +} + +void sub_80FE528(u8 taskId) // PrintDecorationCategorySelectionMenuStrings +{ + u8 decoCat; + MenuDrawTextWindow(0, 0, 14, 19); + for (decoCat=0; decoCat<8; decoCat++) + { + if (ewram_1f000.isPlayerRoom == 1 && gTasks[taskId].data[11] == 0 && decoCat != DECORCAT_DOLL && decoCat != DECORCAT_CUSHION) + { + sub_80FE470(decoCat, 1, 2 * decoCat + 1, 13); // Selectable + } else + { + sub_80FE470(decoCat, 1, 2 * decoCat + 1, 255); // Unselectable + } + } + MenuPrint(gUnknownText_Exit, 1, 17); +} + +void sub_80FE5AC(u8 taskId) +{ + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80FE528(taskId); + InitMenu(0, 1, 1, 9, gUnknown_020388F6, 13); + gTasks[taskId].func = sub_80FE604; +} + +void sub_80FE604(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + } else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + MoveMenuCursor(1); + } else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_020388F6 = GetMenuCursorPos(); + if (gUnknown_020388F6 != 8) + { + gUnknown_020388D5 = sub_8134194(gUnknown_020388F6); + if (gUnknown_020388D5) + { + sub_8134104(gUnknown_020388F6); + gUnknown_020388D0 = gDecorationInventories[gUnknown_020388F6].items; + sub_80FEF50(taskId); + sub_80F944C(); + sub_80F9480(gUnknown_020388F7, 8); + LoadScrollIndicatorPalette(); + gTasks[taskId].func = sub_80FE868; + } else + { + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 14, 19); + DisplayItemMessageOnField(taskId, gSecretBaseText_NoDecors, sub_80FE418, 0); + } + } else + { + sub_80FE728(taskId); + } + } else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_80FE728(taskId); + } + } +} + +void sub_80FE728(u8 taskId) +{ + if (gTasks[taskId].data[11] != 3) + { + sub_80FE758(taskId); + } else + { + sub_8109DAC(taskId); + } +} + +void sub_80FE758(u8 taskId) +{ + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 14, 19); + if (gTasks[taskId].data[11] != 2) + { + sub_80FE1DC(); + MenuDisplayMessageBox(); + sub_80FE394(); + gTasks[taskId].func = Task_DecorationPCProcessMenuInput; + } else + { + sub_80B3068(taskId); + } +} + +void sub_80FE7A8(u8 taskId) +{ + gTasks[taskId].data[11] = 3; + gUnknown_020388F6 = 0; + sub_80FE5AC(taskId); +} + +void sub_80FE7D4(u8 *dest, u8 decClass) +{ + StringCopy(dest, gUnknown_083EC5E4[decClass]); +} + +void sub_80FE7EC(u8 taskId) +{ + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + + sub_80FEC94(taskId); + sub_80FECB8(gUnknown_020388F6); + +#if ENGLISH + MenuDrawTextWindow(15, 12, 29, 19); +#elif GERMAN + if ((gUnknown_020388F2 + gUnknown_020388F4) != gUnknown_020388D5) + { + MenuDrawTextWindow(15, 12, 29, 19); + } +#endif + + sub_80FECE0(gUnknown_020388F2 + gUnknown_020388F4); + InitMenu(0, 1, 2, gUnknown_020388F3 + 1, gUnknown_020388F2, 13); +} + +void sub_80FE868(u8 taskId) +{ + sub_80FE7EC(taskId); + gTasks[taskId].func = sub_80FE948; +} + +void sub_80FE894(u8 taskId /*r8*/, s8 cursorVector /*r5*/, s8 bgVector /*r7*/) +{ + int v0 /*r10*/; + u8 v1; + v0 = gUnknown_020388F2 + gUnknown_020388F4 == gUnknown_020388D5; + PlaySE(SE_SELECT); + if (cursorVector != 0) + { + gUnknown_020388F2 = MoveMenuCursor(cursorVector); + } + if (bgVector != 0) + { + v1 = gUnknown_020388F4; + gUnknown_020388F4 = v1 + bgVector; + sub_80FEABC(taskId, 1); + } + if (gUnknown_020388F2 + gUnknown_020388F4 != gUnknown_020388D5) + { + if (v0) + { + MenuDrawTextWindow(15, 12, 29, 19); + } + sub_80FECE0(gUnknown_020388F2 + gUnknown_020388F4); + } else + { + MenuZeroFillWindowRect(15, 12, 29, 19); + } +} + +void sub_80FE948(u8 taskId) +{ + if (!gPaletteFade.active) + { + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) + { + if (gUnknown_020388F2 != 0) + { + sub_80FE894(taskId, -1, 0); + } else if (gUnknown_020388F4 != 0) + { + sub_80FE894(taskId, 0, -1); + } + } + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) + { + if (gUnknown_020388F2 != gUnknown_020388F3) + { + sub_80FE894(taskId, 1, 0); + } else if (gUnknown_020388F4 + gUnknown_020388F2 != gUnknown_020388D5) + { + sub_80FE894(taskId, 0, 1); + } + } + if (gMain.newKeys & A_BUTTON) + { + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + gUnknown_020388F5 = gUnknown_020388F2 + gUnknown_020388F4; + if (gUnknown_020388F5 == gUnknown_020388D5) + { + gUnknown_083EC634[gTasks[taskId].data[11]].noFunc(taskId); + } else + { + gUnknown_083EC634[gTasks[taskId].data[11]].yesFunc(taskId); + } + } else if (gMain.newKeys & B_BUTTON) + { + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + gUnknown_083EC634[gTasks[taskId].data[11]].noFunc(taskId); + } + } +} + +void sub_80FEABC(u8 taskId, u8 dummy1) +{ + u16 i; + u16 j; + u8 ni; + if (gUnknown_020388F4 != 0 || (DestroyVerticalScrollIndicator(0), gUnknown_020388F4 != 0)) + { + CreateVerticalScrollIndicators(0, 0x3c, 0x08); + } + if (gUnknown_020388F4 + 7 == gUnknown_020388D5) + { + DestroyVerticalScrollIndicator(1); + } + if (gUnknown_020388F4 + 7 < gUnknown_020388D5) + { + CreateVerticalScrollIndicators(1, 0x3c, 0x98); + } + for (i=gUnknown_020388F4; i gUnknown_020388D5 && gUnknown_020388F4 != 0) + { + gUnknown_020388F4--; + } + sub_8134104(gUnknown_020388F6); + sub_80FED90(taskId); + sub_80FEF28(); +} + +void sub_80FF0E0(u8 taskId) +{ + gTasks[taskId].data[3] = gSaveBlock1.pos.x; + gTasks[taskId].data[4] = gSaveBlock1.pos.y; + PlayerGetDestCoords(&gTasks[taskId].data[0], &gTasks[taskId].data[1]); +} + +void sub_80FF114(u8 taskId) +{ + DrawWholeMapView(); + warp1_set(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, gTasks[taskId].data[3], gTasks[taskId].data[4]); + warp_in(); +} +void sub_80FF160(u8 taskId) +{ + if (!sub_81341D4()) + { + DisplayItemMessageOnField(taskId, gSecretBaseText_NoDecors, sub_80FE428, 0); + } else + { + gTasks[taskId].data[11] = 0; + gUnknown_020388F6 = 0; + sub_80FE5AC(taskId); + } +} + +u16 sub_80FF1B0(u8 decoId, u8 a1) +{ + u16 retval; + retval = 0xffff; + + switch (decoId) + { + case DECOR_STAND: + retval = gUnknown_083EC97C[a1] << 12; + return retval; + case DECOR_SLIDE: + retval = gUnknown_083EC984[a1] << 12; + return retval; + default: + return retval; + } +} + +void sub_80FF1EC(u16 mapX, u16 mapY, u8 decWidth, u8 decHeight, u16 decIdx) +{ + u16 i; + u16 j; // r10 + u16 behavior; + u16 flags; // r8 + u16 v0; + u16 v1; + s16 x; + s16 decBottom; + + for (i=0; i> 12))) + { + flags = 0xc00; + } else + { + flags = 0x000; + } + if (gDecorations[decIdx].permission != DECORPERM_NA_WALL && sub_80572B0(MapGridGetMetatileBehaviorAt(x, decBottom)) == 1) + { + v0 = 1; + } else + { + v0 = 0; + } + v1 = sub_80FF1B0(gDecorations[decIdx].id, i * decWidth + j); + if (v1 != 0xffff) + { + MapGridSetMetatileEntryAt(x, decBottom, (gDecorations[decIdx].tiles[i * decWidth + j] + (0x200 | v0)) | flags | v1); + } else + { + MapGridSetMetatileIdAt(x, decBottom, (gDecorations[decIdx].tiles[i * decWidth + j] + (0x200 | v0)) | flags); + } + } + } +} + +void sub_80FF394(u16 mapX, u16 mapY, u16 decIdx) +{ + switch (gDecorations[decIdx].shape) + { + case DECORSHAPE_1x1: + sub_80FF1EC(mapX, mapY, 1, 1, decIdx); + break; + case DECORSHAPE_2x1: + sub_80FF1EC(mapX, mapY, 2, 1, decIdx); + break; + case DECORSHAPE_3x1: // unused + sub_80FF1EC(mapX, mapY, 3, 1, decIdx); + break; + case DECORSHAPE_4x2: + sub_80FF1EC(mapX, mapY, 4, 2, decIdx); + break; + case DECORSHAPE_2x2: + sub_80FF1EC(mapX, mapY, 2, 2, decIdx); + break; + case DECORSHAPE_1x2: + sub_80FF1EC(mapX, mapY, 1, 2, decIdx); + break; + case DECORSHAPE_1x3: // unused + sub_80FF1EC(mapX, mapY, 1, 3, decIdx); + break; + case DECORSHAPE_2x4: + sub_80FF1EC(mapX, mapY, 2, 4, decIdx); + break; + case DECORSHAPE_3x3: + sub_80FF1EC(mapX, mapY, 3, 3, decIdx); + break; + case DECORSHAPE_3x2: + sub_80FF1EC(mapX, mapY, 3, 2, decIdx); + break; + } +} + +void sub_80FF474(void) +{ + u8 i; + u8 j; + for (i=0; i<14; i++) + { + if (FlagGet(i + 0xae) == 1) + { + FlagReset(i + 0xae); + for (j=0; jmapObjectCount; j++) + { + if (gMapHeader.events->mapObjects[j].flagId == i + 0xae) + { + break; + } + } + VarSet(0x3f20 + gMapHeader.events->mapObjects[j].graphicsId, gUnknown_02038900.decoration->tiles[0]); + gSpecialVar_0x8005 = gMapHeader.events->mapObjects[j].localId; + gSpecialVar_0x8006 = gUnknown_020391A4; + gSpecialVar_0x8007 = gUnknown_020391A6; + show_sprite(gSpecialVar_0x8005, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + sub_805C0F8(gSpecialVar_0x8005, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007); + sub_805C78C(gSpecialVar_0x8005, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + break; + } + } +} + +bool8 sub_80FF58C/*IsThereRoomForMoreDecorations*/(void) +{ + u16 i; + for (i=0; idecoration = &gDecorations[decoIdx]; + if (gDecorations[decoIdx].permission != DECORPERM_SOLID_MAT) + { + sub_81008BC(unk_02038900); + sub_8100930(unk_02038900->decoration->shape); + sub_8100874(unk_02038900); + sub_810070C(unk_02038900->palette, ((u16 *)gMapHeader.mapData->secondaryTileset->metatiles + 8 * unk_02038900->decoration->tiles[0])[7] >> 12); + LoadSpritePalette(&gUnknown_083EC954); + gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data0; + gUnknown_03004880.unk4 = CreateSprite(&gSpriteTemplate_83EC93C, gUnknown_083EC900[unk_02038900->decoration->shape].x, gUnknown_083EC900[unk_02038900->decoration->shape].y, 0); + } else + { + gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data0; + gUnknown_03004880.unk4 = AddPseudoFieldObject(unk_02038900->decoration->tiles[0], sub_81009A8, gUnknown_083EC900[unk_02038900->decoration->shape].x, gUnknown_083EC900[unk_02038900->decoration->shape].y, 1); + gSprites[gUnknown_03004880.unk4].oam.priority = 1; + } +} + +void SetUpPlacingDecorationPlayerAvatar(u8 taskId, struct UnkStruct_02038900 *unk_02038900) +{ + u8 v0; + v0 = 16 * (u8)gTasks[taskId].data[5] + gUnknown_083EC900[unk_02038900->decoration->shape].x - 8 * ((u8)gTasks[taskId].data[5] - 1); + if (unk_02038900->decoration->shape == DECORSHAPE_3x1 || unk_02038900->decoration->shape == DECORSHAPE_3x3 || unk_02038900->decoration->shape == DECORSHAPE_3x2) + { + v0 -= 8; + } + if (gSaveBlock2.playerGender == MALE) + { + gUnknown_020391A9 = AddPseudoFieldObject(0xc1, SpriteCallbackDummy, v0, 0x48, 0); + } else + { + gUnknown_020391A9 = AddPseudoFieldObject(0xc2, SpriteCallbackDummy, v0, 0x48, 0); + } + gSprites[gUnknown_020391A9].oam.priority = 1; + DestroySprite(&gSprites[gUnknown_020391A8]); + gUnknown_020391A8 = gUnknown_03004880.unk4; +} + +void sub_80FF960(u8 taskId) +{ + switch (gDecorations[gUnknown_020388D0[gUnknown_020388F5]].shape) + { + case DECORSHAPE_1x1: + gTasks[taskId].data[5] = 1; + gTasks[taskId].data[6] = 1; + break; + case DECORSHAPE_2x1: + gTasks[taskId].data[5] = 2; + gTasks[taskId].data[6] = 1; + break; + case DECORSHAPE_3x1: + gTasks[taskId].data[5] = 3; + gTasks[taskId].data[6] = 1; + break; + case DECORSHAPE_4x2: + gTasks[taskId].data[5] = 4; + gTasks[taskId].data[6] = 2; + break; + case DECORSHAPE_2x2: + gTasks[taskId].data[5] = 2; + gTasks[taskId].data[6] = 2; + break; + case DECORSHAPE_1x2: + gTasks[taskId].data[5] = 1; + gTasks[taskId].data[6] = 2; + break; + case DECORSHAPE_1x3: + gTasks[taskId].data[5] = 1; + gTasks[taskId].data[6] = 3; + gTasks[taskId].data[1]++; + break; + case DECORSHAPE_2x4: + gTasks[taskId].data[5] = 2; + gTasks[taskId].data[6] = 4; + break; + case DECORSHAPE_3x3: + gTasks[taskId].data[5] = 3; + gTasks[taskId].data[6] = 3; + break; + case DECORSHAPE_3x2: + gTasks[taskId].data[5] = 3; + gTasks[taskId].data[6] = 2; + break; + } +} + +void sub_80FFAB0(u8 taskId) +{ + gTasks[taskId].data[10] = 0; + gSprites[gUnknown_020391A8].data7 = 1; + gSprites[gUnknown_020391A9].data7 = 1; + sub_810045C(); + sub_8100038(taskId); +} + +void sub_80FFB08(u8 taskId) +{ + gTasks[taskId].data[10] = 0; + gSprites[gUnknown_020391A8].data7 = 1; + gSprites[gUnknown_020391A9].data7 = 1; + sub_810045C(); + DisplayItemMessageOnField(taskId, gSecretBaseText_CancelDecorating, sub_8100248, 0); +} + +bool8 sub_80FFB6C(u8 a0, u16 a1) +{ + if (sub_8057274(a0) != 1 || a1 != 0) + { + return FALSE; + } + return TRUE; +} + +bool8 sub_80FFB94(u8 taskId, s16 x, s16 y, u16 decoId) +{ + if (x == gTasks[taskId].data[3] + 7 && y == gTasks[taskId].data[4] + 7 && decoId != 0) + { + return FALSE; + } + return TRUE; +} + +bool8 sub_80FFBDC(u16 a0, const struct Decoration *decoration) +{ + if (sub_8057274(a0) != 1) + { + if (decoration->id == DECOR_SOLID_BOARD && sub_8057300(a0) == 1) + { + return TRUE; + } + if (sub_805729C(a0)) + { + return TRUE; + } + } + return FALSE; +} + +// When behaviorBy is set, it is masked by 0xf000. This is the step that fails to match when built. +#ifdef NONMATCHING +bool8 sub_80FFC24(u8 taskId, const struct Decoration *decoration) +{ + u8 i; + u8 j; + u8 behaviorAt; + u16 behaviorBy; + u8 mapY; + u8 mapX; + s16 curY; + s16 curX; + mapY = gTasks[taskId].data[6]; + mapX = gTasks[taskId].data[5]; + switch (decoration->permission) + { + case DECORPERM_SOLID_FLOOR: + case DECORPERM_PASS_FLOOR: + for (i=0; itiles[(mapY - 1 - i) * mapX + j]) & 0xf000; + if (!sub_80FFBDC(behaviorAt, decoration)) + { + return FALSE; + } + if (!sub_80FFB94(taskId, curX, curY, behaviorBy)) + { + return FALSE; + } + behaviorAt = GetFieldObjectIdByXYZ(curX, curY, 0); + if (behaviorAt != 0 && behaviorAt != 16) + { + return FALSE; + } + } + } + break; + case DECORPERM_BEHIND_FLOOR: + for (i=0; itiles[(mapY - 1 - i) * mapX + j]) & 0xf000; + if (!sub_805729C(behaviorAt) && !sub_80FFB6C(behaviorAt, behaviorBy)) + { + return FALSE; + } + if (!sub_80FFB94(taskId, curX, curY, behaviorBy)) + { + return FALSE; + } + if (GetFieldObjectIdByXYZ(curX, curY, 0) != 16) + { + return FALSE; + } + } + } + curY = gTasks[taskId].data[1] - mapY + 1; + for (j=0; jtiles[j]) & 0xf000; + if (!sub_805729C(behaviorAt) && !sub_80572B0(behaviorAt)) + { + return FALSE; + } + if (!sub_80FFB94(taskId, curX, curY, behaviorBy)) + { + return FALSE; + } + behaviorAt = GetFieldObjectIdByXYZ(curX, curY, 0); + if (behaviorAt != 0 && behaviorAt != 16) + { + return FALSE; + } + } + break; + case DECORPERM_NA_WALL: + for (i=0; ishape == DECORSHAPE_1x2) + { + if (!sub_80572EC(behaviorAt)) + { + return FALSE; + } + } + else if (!sub_80572D8(behaviorAt)) + { + if (!sub_80572EC(behaviorAt)) + { + return FALSE; + } + } + if (GetFieldObjectIdByXYZ(curX, curY, 0) != 16) + { + return FALSE; + } + } + break; + } + return TRUE; +} +#else +__attribute__((naked)) +bool8 sub_80FFC24(u8 taskId, const struct Decoration *decoration) +{ + asm(".syntax unified\n" + "\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x24\n" + "\tstr r1, [sp]\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r10, r0\n" + "\tldr r1, _080FFC60 @ =gTasks\n" + "\tlsls r0, 2\n" + "\tadd r0, r10\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tldrb r2, [r0, 0x14]\n" + "\tstr r2, [sp, 0x4]\n" + "\tldrb r0, [r0, 0x12]\n" + "\tstr r0, [sp, 0x8]\n" + "\tldr r3, [sp]\n" + "\tldrb r0, [r3, 0x11]\n" + "\tadds r2, r1, 0\n" + "\tcmp r0, 0x4\n" + "\tbls _080FFC56\n" + "\tb _08100024\n" + "_080FFC56:\n" + "\tlsls r0, 2\n" + "\tldr r1, _080FFC64 @ =_080FFC68\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_080FFC60: .4byte gTasks\n" + "_080FFC64: .4byte _080FFC68\n" + "\t.align 2, 0\n" + "_080FFC68:\n" + "\t.4byte _080FFC7C\n" + "\t.4byte _080FFC7C\n" + "\t.4byte _080FFD68\n" + "\t.4byte _080FFF1C\n" + "\t.4byte _080FFFA0\n" + "_080FFC7C:\n" + "\tmovs r6, 0\n" + "\tldr r0, [sp, 0x4]\n" + "\tcmp r6, r0\n" + "\tbcc _080FFC86\n" + "\tb _08100024\n" + "_080FFC86:\n" + "\tmov r1, r10\n" + "\tlsls r1, 2\n" + "\tstr r1, [sp, 0x1C]\n" + "_080FFC8C:\n" + "\tmov r2, r10\n" + "\tlsls r0, r2, 2\n" + "\tadd r0, r10\n" + "\tlsls r0, 3\n" + "\tldr r3, _080FFD64 @ =gTasks\n" + "\tadds r0, r3\n" + "\tldrh r0, [r0, 0xA]\n" + "\tsubs r0, r6\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmov r9, r0\n" + "\tmovs r7, 0\n" + "\tadds r6, 0x1\n" + "\tstr r6, [sp, 0x14]\n" + "\tldr r0, [sp, 0x8]\n" + "\tcmp r7, r0\n" + "\tbcs _080FFD56\n" + "\tmov r1, r9\n" + "\tlsls r1, 16\n" + "\tstr r1, [sp, 0xC]\n" + "\tasrs r1, 16\n" + "\tmov r9, r1\n" + "_080FFCB8:\n" + "\tldr r0, [sp, 0x1C]\n" + "\tadd r0, r10\n" + "\tlsls r0, 3\n" + "\tldr r2, _080FFD64 @ =gTasks\n" + "\tadds r0, r2\n" + "\tldrh r0, [r0, 0x8]\n" + "\tadds r0, r7\n" + "\tlsls r0, 16\n" + "\tmov r8, r0\n" + "\tasrs r6, r0, 16\n" + "\tadds r0, r6, 0\n" + "\tmov r1, r9\n" + "\tbl MapGridGetMetatileBehaviorAt\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tldr r3, [sp, 0x4]\n" + "\tldr r1, [sp, 0x14]\n" + "\tsubs r0, r3, r1\n" + "\tldr r2, [sp, 0x8]\n" + "\tadds r1, r0, 0\n" + "\tmuls r1, r2\n" + "\tadds r1, r7\n" + "\tldr r3, [sp]\n" + "\tldr r0, [r3, 0x1C]\n" + "\tlsls r1, 1\n" + "\tadds r1, r0\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 2\n" + "\tadds r0, r2, 0\n" + "\tldrh r1, [r1]\n" + "\tadds r0, r1\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tbl GetBehaviorByMetatileId\n" + "\tmovs r3, 0xF0\n" + "\tlsls r3, 8\n" + "\tadds r1, r3, 0\n" + "\tadds r5, r1, 0\n" + "\tands r5, r0\n" + "\tadds r0, r4, 0\n" + "\tldr r1, [sp]\n" + "\tbl sub_80FFBDC\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _080FFD1A\n" + "\tb _080FFFF4\n" + "_080FFD1A:\n" + "\tmov r0, r10\n" + "\tadds r1, r6, 0\n" + "\tmov r2, r9\n" + "\tadds r3, r5, 0\n" + "\tbl sub_80FFB94\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _080FFD2E\n" + "\tb _080FFFF4\n" + "_080FFD2E:\n" + "\tmov r1, r8\n" + "\tlsrs r0, r1, 16\n" + "\tldr r2, [sp, 0xC]\n" + "\tlsrs r1, r2, 16\n" + "\tmovs r2, 0\n" + "\tbl GetFieldObjectIdByXYZ\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tcmp r4, 0\n" + "\tbeq _080FFD4A\n" + "\tcmp r4, 0x10\n" + "\tbeq _080FFD4A\n" + "\tb _080FFFF4\n" + "_080FFD4A:\n" + "\tadds r0, r7, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tldr r3, [sp, 0x8]\n" + "\tcmp r7, r3\n" + "\tbcc _080FFCB8\n" + "_080FFD56:\n" + "\tldr r1, [sp, 0x14]\n" + "\tlsls r0, r1, 24\n" + "\tlsrs r6, r0, 24\n" + "\tldr r2, [sp, 0x4]\n" + "\tcmp r6, r2\n" + "\tbcc _080FFC8C\n" + "\tb _08100024\n" + "\t.align 2, 0\n" + "_080FFD64: .4byte gTasks\n" + "_080FFD68:\n" + "\tmovs r6, 0\n" + "\tmov r3, r10\n" + "\tlsls r3, 2\n" + "\tstr r3, [sp, 0x1C]\n" + "\tldr r0, [sp, 0x4]\n" + "\tsubs r0, 0x1\n" + "\tstr r0, [sp, 0x18]\n" + "\tcmp r6, r0\n" + "\tbge _080FFE54\n" + "\tadds r0, r3, 0\n" + "\tadd r0, r10\n" + "\tlsls r0, 3\n" + "\tstr r0, [sp, 0x10]\n" + "_080FFD82:\n" + "\tldr r1, [sp, 0x10]\n" + "\tadds r0, r1, r2\n" + "\tldrh r0, [r0, 0xA]\n" + "\tsubs r0, r6\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmov r9, r0\n" + "\tmovs r7, 0\n" + "\tadds r6, 0x1\n" + "\tstr r6, [sp, 0x14]\n" + "\tldr r3, [sp, 0x8]\n" + "\tcmp r7, r3\n" + "\tbcs _080FFE48\n" + "\tlsls r0, 16\n" + "\tstr r0, [sp, 0x20]\n" + "_080FFDA0:\n" + "\tldr r1, [sp, 0x10]\n" + "\tadds r0, r1, r2\n" + "\tldrh r0, [r0, 0x8]\n" + "\tadds r0, r7\n" + "\tlsls r0, 16\n" + "\tmov r8, r0\n" + "\tasrs r6, r0, 16\n" + "\tmov r2, r9\n" + "\tlsls r1, r2, 16\n" + "\tadds r0, r6, 0\n" + "\tasrs r1, 16\n" + "\tbl MapGridGetMetatileBehaviorAt\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tldr r3, [sp, 0x4]\n" + "\tldr r1, [sp, 0x14]\n" + "\tsubs r0, r3, r1\n" + "\tldr r2, [sp, 0x8]\n" + "\tadds r1, r0, 0\n" + "\tmuls r1, r2\n" + "\tadds r1, r7\n" + "\tldr r3, [sp]\n" + "\tldr r0, [r3, 0x1C]\n" + "\tlsls r1, 1\n" + "\tadds r1, r0\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 2\n" + "\tadds r0, r2, 0\n" + "\tldrh r1, [r1]\n" + "\tadds r0, r1\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tbl GetBehaviorByMetatileId\n" + "\tmovs r3, 0xF0\n" + "\tlsls r3, 8\n" + "\tadds r1, r3, 0\n" + "\tadds r5, r1, 0\n" + "\tands r5, r0\n" + "\tadds r0, r4, 0\n" + "\tbl sub_805729C\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _080FFE0C\n" + "\tadds r0, r4, 0\n" + "\tadds r1, r5, 0\n" + "\tbl sub_80FFB6C\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _080FFE0C\n" + "\tb _080FFFF4\n" + "_080FFE0C:\n" + "\tmov r0, r10\n" + "\tadds r1, r6, 0\n" + "\tldr r3, [sp, 0x20]\n" + "\tasrs r2, r3, 16\n" + "\tadds r3, r5, 0\n" + "\tbl sub_80FFB94\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _080FFE22\n" + "\tb _080FFFF4\n" + "_080FFE22:\n" + "\tmov r1, r8\n" + "\tlsrs r0, r1, 16\n" + "\tldr r2, [sp, 0x20]\n" + "\tlsrs r1, r2, 16\n" + "\tmovs r2, 0\n" + "\tbl GetFieldObjectIdByXYZ\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x10\n" + "\tbeq _080FFE3A\n" + "\tb _080FFFF4\n" + "_080FFE3A:\n" + "\tadds r0, r7, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tldr r2, _080FFF18 @ =gTasks\n" + "\tldr r3, [sp, 0x8]\n" + "\tcmp r7, r3\n" + "\tbcc _080FFDA0\n" + "_080FFE48:\n" + "\tldr r1, [sp, 0x14]\n" + "\tlsls r0, r1, 24\n" + "\tlsrs r6, r0, 24\n" + "\tldr r3, [sp, 0x18]\n" + "\tcmp r6, r3\n" + "\tblt _080FFD82\n" + "_080FFE54:\n" + "\tldr r0, [sp, 0x1C]\n" + "\tadd r0, r10\n" + "\tlsls r0, 3\n" + "\tadds r0, r2\n" + "\tldrh r0, [r0, 0xA]\n" + "\tldr r1, [sp, 0x4]\n" + "\tsubs r0, r1\n" + "\tadds r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmov r9, r0\n" + "\tmovs r7, 0\n" + "\tldr r3, [sp, 0x8]\n" + "\tcmp r7, r3\n" + "\tbcc _080FFE74\n" + "\tb _08100024\n" + "_080FFE74:\n" + "\tlsls r0, 16\n" + "\tstr r0, [sp, 0x20]\n" + "_080FFE78:\n" + "\tldr r0, [sp, 0x1C]\n" + "\tadd r0, r10\n" + "\tlsls r0, 3\n" + "\tldr r1, _080FFF18 @ =gTasks\n" + "\tadds r0, r1\n" + "\tldrh r0, [r0, 0x8]\n" + "\tadds r0, r7\n" + "\tlsls r0, 16\n" + "\tmov r8, r0\n" + "\tasrs r6, r0, 16\n" + "\tmov r2, r9\n" + "\tlsls r1, r2, 16\n" + "\tadds r0, r6, 0\n" + "\tasrs r1, 16\n" + "\tbl MapGridGetMetatileBehaviorAt\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tldr r3, [sp]\n" + "\tldr r0, [r3, 0x1C]\n" + "\tlsls r1, r7, 1\n" + "\tadds r1, r0\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 2\n" + "\tadds r0, r2, 0\n" + "\tldrh r1, [r1]\n" + "\tadds r0, r1\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tbl GetBehaviorByMetatileId\n" + "\tmovs r3, 0xF0\n" + "\tlsls r3, 8\n" + "\tadds r1, r3, 0\n" + "\tadds r5, r1, 0\n" + "\tands r5, r0\n" + "\tadds r0, r4, 0\n" + "\tbl sub_805729C\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _080FFEDA\n" + "\tadds r0, r4, 0\n" + "\tbl sub_80572B0\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _080FFEDA\n" + "\tb _080FFFF4\n" + "_080FFEDA:\n" + "\tmov r0, r10\n" + "\tadds r1, r6, 0\n" + "\tldr r3, [sp, 0x20]\n" + "\tasrs r2, r3, 16\n" + "\tadds r3, r5, 0\n" + "\tbl sub_80FFB94\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _080FFEF0\n" + "\tb _080FFFF4\n" + "_080FFEF0:\n" + "\tmov r1, r8\n" + "\tlsrs r0, r1, 16\n" + "\tldr r2, [sp, 0x20]\n" + "\tlsrs r1, r2, 16\n" + "\tmovs r2, 0\n" + "\tbl GetFieldObjectIdByXYZ\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tcmp r4, 0\n" + "\tbeq _080FFF0A\n" + "\tcmp r4, 0x10\n" + "\tbne _080FFFF4\n" + "_080FFF0A:\n" + "\tadds r0, r7, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tldr r3, [sp, 0x8]\n" + "\tcmp r7, r3\n" + "\tbcc _080FFE78\n" + "\tb _08100024\n" + "\t.align 2, 0\n" + "_080FFF18: .4byte gTasks\n" + "_080FFF1C:\n" + "\tmovs r6, 0\n" + "\tldr r0, [sp, 0x4]\n" + "\tcmp r6, r0\n" + "\tbcc _080FFF26\n" + "\tb _08100024\n" + "_080FFF26:\n" + "\tmov r1, r10\n" + "\tlsls r0, r1, 2\n" + "\tadd r0, r10\n" + "\tlsls r1, r0, 3\n" + "\tldr r2, _080FFF9C @ =gTasks\n" + "\tadds r0, r1, r2\n" + "\tldrh r0, [r0, 0xA]\n" + "\tsubs r0, r6\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmov r9, r0\n" + "\tmovs r7, 0\n" + "\tldr r3, [sp, 0x8]\n" + "\tcmp r7, r3\n" + "\tbcs _080FFF8C\n" + "\tadds r0, r2, 0\n" + "\tadds r1, r0\n" + "\tmov r8, r1\n" + "\tmov r1, r9\n" + "\tlsls r0, r1, 16\n" + "\tasrs r5, r0, 16\n" + "_080FFF50:\n" + "\tmov r2, r8\n" + "\tldrh r0, [r2, 0x8]\n" + "\tadds r0, r7\n" + "\tlsls r0, 16\n" + "\tasrs r4, r0, 16\n" + "\tadds r0, r4, 0\n" + "\tadds r1, r5, 0\n" + "\tbl MapGridGetMetatileBehaviorAt\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tbl sub_80572B0\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _080FFFF4\n" + "\tadds r0, r4, 0\n" + "\tadds r1, r5, 0x1\n" + "\tbl MapGridGetMetatileIdAt\n" + "\tmovs r1, 0xA3\n" + "\tlsls r1, 2\n" + "\tcmp r0, r1\n" + "\tbeq _080FFFF4\n" + "\tadds r0, r7, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tldr r3, [sp, 0x8]\n" + "\tcmp r7, r3\n" + "\tbcc _080FFF50\n" + "_080FFF8C:\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tldr r0, [sp, 0x4]\n" + "\tcmp r6, r0\n" + "\tbcc _080FFF26\n" + "\tb _08100024\n" + "\t.align 2, 0\n" + "_080FFF9C: .4byte gTasks\n" + "_080FFFA0:\n" + "\tmov r3, r10\n" + "\tlsls r1, r3, 2\n" + "\tadds r0, r1, r3\n" + "\tlsls r0, 3\n" + "\tadds r0, r2\n" + "\tldrh r0, [r0, 0xA]\n" + "\tmov r9, r0\n" + "\tmovs r7, 0\n" + "\tstr r1, [sp, 0x1C]\n" + "\tldr r0, [sp, 0x8]\n" + "\tcmp r7, r0\n" + "\tbcs _08100024\n" + "\tadds r6, r2, 0\n" + "\tmov r1, r9\n" + "\tlsls r1, 16\n" + "\tstr r1, [sp, 0x20]\n" + "_080FFFC0:\n" + "\tldr r0, [sp, 0x1C]\n" + "\tadd r0, r10\n" + "\tlsls r0, 3\n" + "\tadds r0, r6\n" + "\tldrh r0, [r0, 0x8]\n" + "\tadds r0, r7\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tasrs r0, 16\n" + "\tmov r2, r9\n" + "\tlsls r1, r2, 16\n" + "\tasrs r1, 16\n" + "\tbl MapGridGetMetatileBehaviorAt\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tldr r3, [sp]\n" + "\tldrb r0, [r3, 0x12]\n" + "\tcmp r0, 0x5\n" + "\tbne _080FFFF8\n" + "_080FFFE8:\n" + "\tadds r0, r4, 0\n" + "\tbl sub_80572EC\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _08100004\n" + "_080FFFF4:\n" + "\tmovs r0, 0\n" + "\tb _08100026\n" + "_080FFFF8:\n" + "\tadds r0, r4, 0\n" + "\tbl sub_80572D8\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _080FFFE8\n" + "_08100004:\n" + "\tadds r0, r5, 0\n" + "\tldr r2, [sp, 0x20]\n" + "\tlsrs r1, r2, 16\n" + "\tmovs r2, 0\n" + "\tbl GetFieldObjectIdByXYZ\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x10\n" + "\tbne _080FFFF4\n" + "\tadds r0, r7, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tldr r3, [sp, 0x8]\n" + "\tcmp r7, r3\n" + "\tbcc _080FFFC0\n" + "_08100024:\n" + "\tmovs r0, 0x1\n" + "_08100026:\n" + "\tadd sp, 0x24\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\n" + ".syntax divided\n"); +} +#endif + +void sub_8100038(u8 taskId) +{ + if (sub_80FFC24(taskId, &gDecorations[gUnknown_020388D0[gUnknown_020388F5]]) == 1) + { + DisplayItemMessageOnField(taskId, gSecretBaseText_PlaceItHere, sub_81000A0, 0); + } else + { + PlaySE(SE_HAZURE); + DisplayItemMessageOnField(taskId, gSecretBaseText_CantBePlacedHere, sub_81006A8, 0); + } +} + +void sub_81000A0(u8 taskId) +{ + DisplayYesNoMenu(20, 8, 1); + DoYesNoFuncWithChoice(taskId, &gUnknown_083EC95C); +} + +void sub_81000C4(u8 taskId) +{ + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_8100174(taskId); + if (gDecorations[gUnknown_020388D0[gUnknown_020388F5]].permission != DECORPERM_SOLID_MAT) + { + sub_80FF394(gTasks[taskId].data[0], gTasks[taskId].data[1], gUnknown_020388D0[gUnknown_020388F5]); + } else + { + gUnknown_020391A4 = gTasks[taskId].data[0] - 7; + gUnknown_020391A6 = gTasks[taskId].data[1] - 7; + ScriptContext1_SetupScript(gUnknown_081A2F7B); + } + gSprites[gUnknown_020391A8].pos1.y += 2; + sub_810028C(taskId); +} + +void sub_8100174(u8 taskId) +{ + u16 i; + for (i=0; i= gMapHeader.mapData->height) + { + data[1]--; + return FALSE; + } else if (gUnknown_020391AA == DIR_WEST && data[0] - 7 < 0) + { + data[0]++; + return FALSE; + } else if (gUnknown_020391AA == DIR_EAST && data[0] + data[5] - 8 >= gMapHeader.mapData->width) + { + data[0]--; + return FALSE; + } + return TRUE; +} + +bool8 sub_8100430(void) +{ + if ((gMain.heldKeys & DPAD_ANY) != DPAD_UP && (gMain.heldKeys & DPAD_ANY) != DPAD_DOWN && (gMain.heldKeys & DPAD_ANY) != DPAD_LEFT && (gMain.heldKeys & DPAD_ANY) != DPAD_RIGHT) + { + return FALSE; + } + return TRUE; +} + +void sub_810045C(void) +{ + gUnknown_020391AA = 0; + gSprites[gUnknown_020391A8].data2 = 0; + gSprites[gUnknown_020391A8].data3 = 0; +} + +void sub_8100494(u8 taskId) +{ + if (!gSprites[gUnknown_020391A8].data4) + { + if (gTasks[taskId].data[10] == 1) + { + gUnknown_083EC96C[gTasks[taskId].data[12]].yesFunc(taskId); + return; + } else if (gTasks[taskId].data[10] == 2) + { + gUnknown_083EC96C[gTasks[taskId].data[12]].noFunc(taskId); + return; + } + if ((gMain.heldKeys & DPAD_ANY) == DPAD_UP) + { + gUnknown_020391AA = DIR_SOUTH; + gSprites[gUnknown_020391A8].data2 = 0; + gSprites[gUnknown_020391A8].data3 = -2; + gTasks[taskId].data[1]--; + } + if ((gMain.heldKeys & DPAD_ANY) == DPAD_DOWN) + { + gUnknown_020391AA = DIR_NORTH; + gSprites[gUnknown_020391A8].data2 = 0; + gSprites[gUnknown_020391A8].data3 = 2; + gTasks[taskId].data[1]++; + } + if ((gMain.heldKeys & DPAD_ANY) == DPAD_LEFT) + { + gUnknown_020391AA = DIR_WEST; + gSprites[gUnknown_020391A8].data2 = -2; + gSprites[gUnknown_020391A8].data3 = 0; + gTasks[taskId].data[0]--; + } + if ((gMain.heldKeys & DPAD_ANY) == DPAD_RIGHT) + { + gUnknown_020391AA = DIR_EAST; + gSprites[gUnknown_020391A8].data2 = 2; + gSprites[gUnknown_020391A8].data3 = 0; + gTasks[taskId].data[0]++; + } + if (!sub_8100430() || !sub_810038C(taskId)) + { + sub_810045C(); + } + } + if (gUnknown_020391AA) + { + gSprites[gUnknown_020391A8].data4++; + gSprites[gUnknown_020391A8].data4 &= 7; + } + if (!gTasks[taskId].data[10]) + { + if (gMain.newKeys & A_BUTTON) + { + gTasks[taskId].data[10] = A_BUTTON; + } + if (gMain.newKeys & B_BUTTON) + { + gTasks[taskId].data[10] = B_BUTTON; + } + } +} + +void sub_810065C(u8 taskId) +{ + MenuZeroFillWindowRect(0, 0, 29, 19); + gSprites[gUnknown_020391A8].data7 = 0; + gTasks[taskId].data[10] = 0; + gTasks[taskId].func = sub_8100494; +} + +void sub_81006A8(u8 taskId) +{ + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + { + sub_810065C(taskId); + } +} + +void sub_81006D0(struct UnkStruct_02038900 *unk_02038900) +{ + u16 i; + for (i=0; i<0x800; i++) + { + unk_02038900->image[i] = 0; + } + for (i=0; i<0x40; i++) + { + unk_02038900->tiles[i] = 0; + } +} + +void sub_810070C(u16 *a0, u16 a1) +{ + u16 i; + for (i=0; i<16; i++) + { + a0[i] = ((u16 *)gMapHeader.mapData->primaryTileset->palettes)[16 * a1 + i]; + } +} + +void sub_8100740(u8 *dest, u16 flags) +{ + u8 buffer[32]; + u16 mode; + u16 i; + mode = flags >> 10; + if (flags != 0) + { + flags &= 0x3ff; + } + for (i=0; i<32; i++) + { + buffer[i] = ((u8 *)gMapHeader.mapData->primaryTileset->tiles)[flags * 32 + i]; + } + switch (mode) + { + case 0: + for (i=0; i<32; i++) + { + dest[i] = buffer[i]; + } + break; + case 1: + for (i=0; i<8; i++) + { + dest[4*i] = (buffer[4*(i+1) - 1] >> 4) + ((buffer[4*(i+1) - 1] & 0xf) << 4); + dest[4*i + 1] = (buffer[4*(i+1) - 2] >> 4) + ((buffer[4*(i+1) - 2] & 0xf) << 4); + dest[4*i + 2] = (buffer[4*(i+1) - 3] >> 4) + ((buffer[4*(i+1) - 3] & 0xf) << 4); + dest[4*i + 3] = (buffer[4*(i+1) - 4] >> 4) + ((buffer[4*(i+1) - 4] & 0xf) << 4); + } + break; + case 2: + for (i=0; i<8; i++) + { + dest[4*i] = buffer[4*(7-i)]; + dest[4*i + 1] = buffer[4*(7-i) + 1]; + dest[4*i + 2] = buffer[4*(7-i) + 2]; + dest[4*i + 3] = buffer[4*(7-i) + 3]; + } + break; + case 3: + for (i=0; i<32; i++) + { + dest[i] = (buffer[31-i] >> 4) + ((buffer[31-i] & 0xf) << 4); + } + break; + } +} + +void sub_8100874(struct UnkStruct_02038900 *unk_02038900) +{ + u16 i; + for (i=0; i<0x40; i++) + sub_8100740(&unk_02038900->image[i * 32], unk_02038900->tiles[i]); +} + +u16 sub_810089C(u16 a0) +{ + return ((u16 *)gMapHeader.mapData->secondaryTileset->metatiles)[a0] & 0xfff; +} + +void sub_81008BC(struct UnkStruct_02038900 *unk_02038900) +{ + u8 i; + u8 shape; + shape = unk_02038900->decoration->shape; + for (i=0; itiles[gUnknown_083EC860[shape].tiles[i]] = sub_810089C(unk_02038900->decoration->tiles[gUnknown_083EC860[shape].y[i]] * 8 + gUnknown_083EC860[shape].x[i]); + } +} + +void sub_8100930(u8 decoShape) +{ + gUnknown_020391AC.y = 0; + gUnknown_020391AC.affineMode = 0; + gUnknown_020391AC.objMode = 0; + gUnknown_020391AC.mosaic = 0; + gUnknown_020391AC.bpp = 0; + gUnknown_020391AC.shape = gUnknown_083EC900[decoShape].shape; + gUnknown_020391AC.x = 0; + gUnknown_020391AC.matrixNum = 0; + gUnknown_020391AC.size = gUnknown_083EC900[decoShape].size; + gUnknown_020391AC.tileNum = 0; + gUnknown_020391AC.priority = 1; + gUnknown_020391AC.paletteNum = 0; +} + +void sub_81009A8(struct Sprite *sprite) +{ + sprite->data2 = 0; + sprite->data3 = 0; + sprite->data4 = 0; + sprite->data5 = 0; + sprite->data6 = 0; + sprite->data7 = 0; + sprite->callback = sub_81009C0; +} + +void sub_81009C0(struct Sprite *sprite) +{ + if (sprite->data7 == 0) + { + if (sprite->data6 < 15) + { + sprite->invisible = 0; + } else + { + sprite->invisible = 1; + } + sprite->data6 = (sprite->data6 + 1) & 0x1f; + } else + { + sprite->invisible = 0; + } +} + +void sub_8100A0C(u8 taskId) +{ + if (sub_8100D38(taskId) == 1) + { + fade_screen(1, 0); + gTasks[taskId].data[2] = 0; + gTasks[taskId].func = sub_8100E70; + } else + { + DisplayItemMessageOnField(taskId, gSecretBaseText_NoDecorInUse, sub_80FE428, 0); + } +} + +void sub_8100A60(u8 a0) +{ + ewram_1f000.items[a0] = 0; + ewram_1f000.pos[a0] = 0; +} + +void sub_8100A7C(void) +{ + u16 i; + gSpecialVar_0x8005 = 0; + gScriptResult = 0; + if (gSpecialVar_0x8004 == gUnknown_02039234) + { + gScriptResult = 1; + } else if (gDecorations[ewram_1f000.items[gUnknown_020391B4[gSpecialVar_0x8004].decorId]].permission == DECORPERM_SOLID_MAT) + { + gSpecialVar_0x8005 = gUnknown_020391B4[gSpecialVar_0x8004].flagId; + sub_8100A60(gUnknown_020391B4[gSpecialVar_0x8004].decorId); + for (i=0; imapObjectCount; i++) + { + if (gMapHeader.events->mapObjects[i].flagId == gSpecialVar_0x8005) + { + gSpecialVar_0x8006 = gMapHeader.events->mapObjects[i].localId; + break; + } + } + } +} + +void sub_8100B20(void) +{ + u8 i; + for (i=0; imapObjectCount; i++) + { + if (gMapHeader.events->mapObjects[i].flagId == gSpecialVar_0x8004) + { + gSpecialVar_0x8005 = gMapHeader.events->mapObjects[i].localId; + break; + } + } +} + +void sub_8100B6C(void) +{ + u8 i; + u8 j; + u8 k; + u8 x; + u8 y; + u8 permission; + for (i=0; i> 4; + y = ewram_1f000.pos[gUnknown_020391B4[i].decorId] & 0xf; + if (permission != DECORPERM_SOLID_MAT) + { + if (ewram_1f000.items[gUnknown_020391B4[i].decorId] == DECOR_SAND_ORNAMENT && MapGridGetMetatileIdAt(x + 7, y + 7) == 0x28c) + { + gUnknown_020391B4[i].height++; + } + for (j=0; jmap)[(x + k) + gMapHeader.mapData->width * (y - j)] | 0x3000); + } + } + sub_8100A60(gUnknown_020391B4[i].decorId); + } + } +} + +void sub_8100C88(u8 taskId) +{ + switch (gTasks[taskId].data[2]) + { + case 0: + sub_8100B6C(); + gTasks[taskId].data[2] = 1; + break; + case 1: + if (!gPaletteFade.active) + { + DrawWholeMapView(); + ScriptContext1_SetupScript(gUnknown_081A2F8A); + MenuZeroFillWindowRect(0, 0, 29, 19); + gTasks[taskId].data[2] = 2; + } + break; + case 2: + ScriptContext2_Enable(); + sub_80FED90(taskId); + pal_fill_black(); + gTasks[taskId].data[2] = 3; + break; + case 3: + if (sub_807D770() == 1) + { + gTasks[taskId].data[13] = -1; + DisplayItemMessageOnField(taskId, gSecretBaseText_DecorReturned, sub_81010F0, 0); + } + break; + } +} + +bool8 sub_8100D38(u8 taskId) +{ + u16 i; + for (i=0; iwidth = 1; + unk_020391B4->height = 1; + } else if (gDecorations[decorIdx].shape == DECORSHAPE_2x1) + { + unk_020391B4->width = 2; + unk_020391B4->height = 1; + } else if (gDecorations[decorIdx].shape == DECORSHAPE_3x1) + { + unk_020391B4->width = 3; + unk_020391B4->height = 1; + } else if (gDecorations[decorIdx].shape == DECORSHAPE_4x2) + { + unk_020391B4->width = 4; + unk_020391B4->height = 2; + } else if (gDecorations[decorIdx].shape == DECORSHAPE_2x2) + { + unk_020391B4->width = 2; + unk_020391B4->height = 2; + } else if (gDecorations[decorIdx].shape == DECORSHAPE_1x2) + { + unk_020391B4->width = 1; + unk_020391B4->height = 2; + } else if (gDecorations[decorIdx].shape == DECORSHAPE_1x3) + { + unk_020391B4->width = 1; + unk_020391B4->height = 3; + } else if (gDecorations[decorIdx].shape == DECORSHAPE_2x4) + { + unk_020391B4->width = 2; + unk_020391B4->height = 4; + } else if (gDecorations[decorIdx].shape == DECORSHAPE_3x3) + { + unk_020391B4->width = 3; + unk_020391B4->height = 3; + } else if (gDecorations[decorIdx].shape == DECORSHAPE_3x2) + { + unk_020391B4->width = 3; + unk_020391B4->height = 2; + } +} + +void sub_8101198(u8 x, u8 y) +{ + gSprites[gUnknown_020391A8].invisible = 1; + gSprites[gUnknown_020391A8].callback = SpriteCallbackDummy; + gSprites[gUnknown_020391A9].pos1.x = 0x88 + x * 16; + gSprites[gUnknown_020391A9].pos1.y = 0x48 + y * 16; +} + +bool8 sub_8101200(u8 taskId, u8 decorIdx, struct UnkStruct_020391B4 *unk_020391B4) +{ + u8 x; + u8 y; + u8 xOff; + u8 yOff; + x = gTasks[taskId].data[0] - 7; + y = gTasks[taskId].data[1] - 7; + xOff = ewram_1f000.pos[decorIdx] >> 4; + yOff = ewram_1f000.pos[decorIdx] & 0xf; + if (ewram_1f000.items[decorIdx] == DECOR_SAND_ORNAMENT && MapGridGetMetatileIdAt(xOff + 7, yOff + 7) == 0x28c) + { + unk_020391B4->height--; + } + if (x >= xOff && x < xOff + unk_020391B4->width && y > yOff - unk_020391B4->height && y <= yOff) + { + sub_8101198(unk_020391B4->width - (x - xOff + 1), yOff - y); + return TRUE; + } + return FALSE; +} + +void sub_81012A0(void) +{ + u8 xOff; + u8 yOff; + u16 i; + xOff = ewram_1f000.pos[gUnknown_020391B4[gUnknown_02039234].decorId] >> 4; + yOff = ewram_1f000.pos[gUnknown_020391B4[gUnknown_02039234].decorId] & 0xf; + for (i=0; i<0x40; i++) + { + if (gSaveBlock1.mapObjectTemplates[i].x == xOff && gSaveBlock1.mapObjectTemplates[i].y == yOff && !FlagGet(gSaveBlock1.mapObjectTemplates[i].flagId)) + { + gUnknown_020391B4[gUnknown_02039234].flagId = gSaveBlock1.mapObjectTemplates[i].flagId; + break; + } + } +} + +bool8 sub_8101340(u8 taskId) +{ + u16 i; + for (i=0; idecorId = i; + sub_81012A0(); + gUnknown_02039234 = 1; + return TRUE; + } + } + } + } + return FALSE; +} + +void sub_81013B8(u8 a0, u8 a1, u8 a2, u8 a3) +{ + u8 i; + u8 xOff; + u8 yOff; + u8 decorIdx; + for (i=0; i> 4; + yOff = ewram_1f000.pos[i] & 0xf; + if (decorIdx != 0 && gDecorations[decorIdx].permission == DECORPERM_SOLID_MAT && a0 <= xOff && a1 <= yOff && a2 >= xOff && a3 >= yOff) + { + gUnknown_020391B4[gUnknown_02039234].decorId = i; + sub_81012A0(); + gUnknown_02039234++; + } + } +} + +#ifdef NONMATCHING +void sub_8101460(u8 taskId) +{ + u8 i; + u8 xOff; + u8 yOff; + gUnknown_02039234 = 0; + if (sub_8101340(taskId) != TRUE) + { + for (i=0; i> 4; + yOff = ewram_1f000.pos[gUnknown_020391B4[0].decorId] & 0xf; + sub_81013B8(xOff, yOff - gUnknown_020391B4[0].height + 1, xOff + gUnknown_020391B4[0].width - 1, yOff); + } + } +} +#else +__attribute__((naked)) +void sub_8101460(u8 taskId) +{ + asm(".syntax unified\n" + "\tpush {r4-r7,lr}\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tldr r4, _081014B8 @ =gUnknown_02039234\n" + "\tmovs r0, 0\n" + "\tstrb r0, [r4]\n" + "\tadds r0, r6, 0\n" + "\tbl sub_8101340\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x1\n" + "\tbeq _08101504\n" + "\tmovs r5, 0\n" + "\tldr r0, _081014BC @ =ewram_1f000\n" + "\tldrb r1, [r0, 0x8]\n" + "\tcmp r5, r1\n" + "\tbcs _081014D2\n" + "\tadds r7, r4, 0\n" + "_08101486:\n" + "\tldr r0, [r0]\n" + "\tadds r0, r5\n" + "\tldrb r1, [r0] @ compiler incorrectly uses r0 for this and the next instruction\n" + "\tcmp r1, 0\n" + "\tbeq _081014C4\n" + "\tldr r4, _081014C0 @ =gUnknown_020391B4\n" + "\tadds r0, r1, 0\n" + "\tadds r1, r4, 0\n" + "\tbl sub_8101118\n" + "\tadds r0, r6, 0\n" + "\tadds r1, r5, 0\n" + "\tadds r2, r4, 0\n" + "\tbl sub_8101200\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x1\n" + "\tbne _081014C4\n" + "\tstrb r5, [r4]\n" + "\tldrb r0, [r7]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r7]\n" + "\tb _081014D2\n" + "\t.align 2, 0\n" + "_081014B8: .4byte gUnknown_02039234\n" + "_081014BC: .4byte 0x201f000\n" + "_081014C0: .4byte gUnknown_020391B4\n" + "_081014C4:\n" + "\tadds r0, r5, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tldr r0, _0810150C @ =ewram_1f000\n" + "\tldrb r1, [r0, 0x8]\n" + "\tcmp r5, r1\n" + "\tbcc _08101486\n" + "_081014D2:\n" + "\tldr r0, _08101510 @ =gUnknown_02039234\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbeq _08101504\n" + "\tldr r0, _0810150C @ =ewram_1f000\n" + "\tldr r2, _08101514 @ =gUnknown_020391B4\n" + "\tldrb r1, [r2]\n" + "\tldr r0, [r0, 0x4]\n" + "\tadds r0, r1\n" + "\tldrb r1, [r0]\n" + "\tlsrs r0, r1, 4\n" + "\tmovs r3, 0xF\n" + "\tands r3, r1\n" + "\tldrb r1, [r2, 0x2]\n" + "\tsubs r1, r3, r1\n" + "\tadds r1, 0x1\n" + "\tlsls r1, 24\n" + "\tlsrs r1, 24\n" + "\tldrb r2, [r2, 0x1]\n" + "\tadds r2, r0\n" + "\tsubs r2, 0x1\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tbl sub_81013B8\n" + "_08101504:\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0810150C: .4byte 0x201f000\n" + "_08101510: .4byte gUnknown_02039234\n" + "_08101514: .4byte gUnknown_020391B4\n" + ".syntax divided\n"); +} +#endif + +void sub_8101518(u8 taskId) +{ + DisplayYesNoMenu(20, 8, 1); + DoYesNoFuncWithChoice(taskId, &gUnknown_083EC9CC); +} + +void sub_810153C(u8 taskId) +{ + fade_screen(1, 0); + gTasks[taskId].data[2] = 0; + gTasks[taskId].func = sub_8100C88; +} + +void sub_810156C(u8 taskId) +{ + DisplayYesNoMenu(20, 8, 1); + DoYesNoFuncWithChoice(taskId, &gUnknown_083EC9D4); +} + +void sub_8101590(u8 taskId) +{ + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_81015B0(taskId); +} + +void sub_81015B0(u8 taskId) +{ + fade_screen(1, 0); + gTasks[taskId].data[2] = 0; + gTasks[taskId].func = sub_81015E0; +} + +void sub_81015E0(u8 taskId) +{ + switch (gTasks[taskId].data[2]) + { + case 0: + if (!gPaletteFade.active) + { + sub_80FF114(taskId); + gTasks[taskId].data[2] = 1; + } + break; + case 1: + sub_81016F4(); + gFieldCallback = sub_8101678; + SetMainCallback2(c2_exit_to_overworld_2_switch); + DestroyTask(taskId); + break; + } +} + +void sub_8101648(u8 taskId) +{ + if (sub_807D770() == TRUE) + { + gTasks[taskId].func = Task_DecorationPCProcessMenuInput; + } +} + +void sub_8101678(void) +{ + pal_fill_black(); + MenuDisplayMessageBox(); + sub_80FE220(); + CreateTask(sub_8101648, 8); +} + +void sub_8101698(struct Sprite *sprite) +{ + sprite->data0 = (sprite->data0 + 1) & 0x1f; + if (sprite->data0 >= 16) + { + sprite->invisible = TRUE; + } else + { + sprite->invisible = FALSE; + } +} + +void sub_81016C8(void) +{ + if (gSaveBlock2.playerGender == MALE) + { + LoadSpritePalette(&gUnknown_083ECA5C); + } else + { + LoadSpritePalette(&gUnknown_083ECA64); + } +} + +void sub_81016F4(void) +{ + FreeSpritePaletteByTag(8); +} + +void sub_8101700(u8 taskId) +{ + if (!sub_81341D4()) + { + DisplayItemMessageOnField(taskId, gSecretBaseText_NoDecors, sub_80FE428, 0); + } else + { + gTasks[taskId].data[11] = 1; + gUnknown_020388F6 = 0; + sub_80FE5AC(taskId); + } +} + +void sub_8101750(u8 taskId) +{ + if (!sub_81341D4()) + { + DisplayItemMessageOnField(taskId, gSecretBaseText_NoDecors, sub_80FE428, 0); + } else + { + gTasks[taskId].data[11] = 2; + gUnknown_020388F6 = 0; + sub_80FE5AC(taskId); + } +} + +void sub_81017A0(u8 taskId) +{ + sub_80FEF74(); + sub_80FED1C(); + if (sub_80FEFA4() == TRUE) + { + StringCopy(gStringVar1, gDecorations[gUnknown_020388D0[gUnknown_020388F5]].name); + StringExpandPlaceholders(gStringVar4, gSecretBaseText_WillBeDiscarded); + DisplayItemMessageOnField(taskId, gStringVar4, sub_8101824, 0); + } else + { + DisplayItemMessageOnField(taskId, gSecretBaseText_DecorInUse, sub_80FEFF4, 0); + } +} + +void sub_8101824(u8 taskId) +{ + DisplayYesNoMenu(20, 8, 1); + DoYesNoFuncWithChoice(taskId, &gUnknown_083ECAA0); +} + +void sub_8101848(u8 taskId) +{ + MenuZeroFillWindowRect(20, 8, 26, 14); + sub_8109A30(gUnknown_020388D0[gUnknown_020388F5]); + gUnknown_020388D0[gUnknown_020388F5] = DECOR_NONE; + sub_80FF098(taskId); + DisplayItemMessageOnField(taskId, gSecretBaseText_DecorThrownAway, sub_80FEFF4, 0); +} diff --git a/src/field/decoration_inventory.c b/src/field/decoration_inventory.c new file mode 100644 index 000000000..35ba7e228 --- /dev/null +++ b/src/field/decoration_inventory.c @@ -0,0 +1,169 @@ +// +// Created by Scott Norton on 6/5/17. +// + +#include "global.h" +#include "sprite.h" +#include "task.h" +#include "decoration.h" +#include "decoration_inventory.h" + +#define DECOR_INV(ptr) {.items = (u8 *)&ptr, .size = sizeof ptr} + +struct DecorationInventory const gDecorationInventories[] = { + DECOR_INV(gSaveBlock1.decorDesk), + DECOR_INV(gSaveBlock1.decorChair), + DECOR_INV(gSaveBlock1.decorPlant), + DECOR_INV(gSaveBlock1.decorOrnament), + DECOR_INV(gSaveBlock1.decorMat), + DECOR_INV(gSaveBlock1.decorPoster), + DECOR_INV(gSaveBlock1.decorDoll), + DECOR_INV(gSaveBlock1.decorCushion) +}; + +void ClearDecorationInventory(u8 invIdx) +{ + u8 i; + for (i=0; i gDecorationInventories[invIdx].items[j])) + { + tmp = gDecorationInventories[invIdx].items[i]; + gDecorationInventories[invIdx].items[i] = gDecorationInventories[invIdx].items[j]; + gDecorationInventories[invIdx].items[j] = tmp; + } + } + } +} + +u8 sub_8134194(u8 invIdx) +{ + u8 i; + u8 count; + count = 0; + for (i=0; iunk1_6 == 0) + { + if (r5->unk0_0 >= (u16)r2) + { + r5->unk0_0 -= r2; + if (r5->unk0_0 == 0) + r5->unk1_6 = 1; + continue; + } + //_080FA290 + r2 -= r5->unk0_0; + r5->unk0_0 = 0; + r5->unk1_6 = 1; + } + //_080FA2A0 + r4 = r5->unk0_0 + r2; + if ((u16)r4 > r5->unk0_7) + { + u32 sp4 = r4 % r5->unk0_7; + r4 = r4 / r5->unk0_7; + + r5->unk1_6 = r4 ^ 1; + if (r5->unk1_6) + r5->unk0_0 = sp4; + else + //_080FA2FA + r5->unk0_0 = r5->unk0_7 - sp4; + } + else + { + //_080FA310 + r5->unk0_0 = r4; + + if (r5->unk0_0 == r5->unk0_7) + r5->unk1_6 = 0; + } + } + sub_80FA46C(gSaveBlock1.easyChatPairs, 5, 0); + } + //_080FA34E +} + +bool8 sub_80FA364(u16 *a) +{ + struct EasyChatPair s = {0}; + u16 i; + + if (!SB1ContainsWords(a)) + { + if (!FlagGet(SYS_POPWORD_INPUT)) + { + FlagSet(SYS_POPWORD_INPUT); + if (!FlagGet(SYS_MIX_RECORD)) + { + gSaveBlock1.easyChatPairs[0].words[0] = a[0]; + gSaveBlock1.easyChatPairs[0].words[1] = a[1]; + return 1; + } + } + + //_080FA3C8 + s.words[0] = a[0]; + s.words[1] = a[1]; + s.unk1_6 = 1; + sub_80FA740(&s); + + for (i = 0; i < 5; i++) + { + if (sub_80FA670(&s, &gSaveBlock1.easyChatPairs[i], 0)) + { + u16 r3 = 4; + + while (r3 > i) + { + gSaveBlock1.easyChatPairs[r3] = gSaveBlock1.easyChatPairs[r3 - 1]; + r3--; + } + gSaveBlock1.easyChatPairs[i] = s; + return (i == 0); + } + //_080FA450 + } + gSaveBlock1.easyChatPairs[4] = s; + } + return 0; +} + +static void sub_80FA46C(struct EasyChatPair *s, u16 b, u8 c) +{ + u16 h; + + for (h = 0; h < b; h++) + { + u16 i; + + for (i = h + 1; i < b; i++) + { + if (sub_80FA670(&s[i], &s[h], c)) + { + struct EasyChatPair temp; + + temp = s[i]; + s[i] = s[h]; + s[h] = temp; + } + } + } +} + +void sub_80FA4E4(void *a, u32 b, u8 unused) +{ + u16 i; + u16 j; + u16 r7; + struct EasyChatPair *src; + struct EasyChatPair *dst; + u16 players = GetLinkPlayerCount(); + + for (i = 0; i < players; i++) + memcpy(&ARRAY_2007800[i * 5], (u8 *)a + i * b, 40); + src = ARRAY_2007800; + dst = ARRAY_2007900; + r7 = 0; + for (i = 0; i < players; i++) + { + for (j = 0; j < 5; j++) + { + s16 foo = sub_80FA828(src, r7); + if (foo < 0) + { + *(dst++) = *src; + r7++; + } + else + { + if (ARRAY_2007900[foo].unk0_0 < src->unk0_0) + { + ARRAY_2007900[foo] = *src; + } + } + src++; + } + } + sub_80FA46C(ARRAY_2007900, r7, 2); + src = ARRAY_2007900; + dst = gSaveBlock1.easyChatPairs; + for (i = 0; i < 5; i++) + *(dst++) = *(src++); +} + +void sub_80FA5BC(void) +{ + struct EasyChatPair *s = &gSaveBlock1.easyChatPairs[gSpecialVar_0x8004]; + + ConvertEasyChatWordsToString(gStringVar1, s->words, 2, 1); +} + +void sub_80FA5E4(void) +{ + u16 result = 0; + + if (gSaveBlock1.easyChatPairs[0].unk0_0 - gSaveBlock1.easyChatPairs[1].unk0_0 < 2) + { + asm("":::"r2"); //Force the compiler to store address of gSaveBlock1 in r3 instead of r2 + if (!gSaveBlock1.easyChatPairs[0].unk1_6 && gSaveBlock1.easyChatPairs[1].unk1_6) + result = 1; + } + gScriptResult = result; +} + +void sub_80FA648(void) +{ + gScriptResult = (gSaveBlock1.easyChatPairs[0].words[0] + gSaveBlock1.easyChatPairs[0].words[1]) & 7; +} + +static bool8 sub_80FA670(struct EasyChatPair *a, struct EasyChatPair *b, u8 c) +{ + switch (c) + { + case 0: + if (a->unk0_0 > b->unk0_0) + return 1; + if (a->unk0_0 < b->unk0_0) + return 0; + if (a->unk0_7 > b->unk0_7) + return 1; + if (a->unk0_7 < b->unk0_7) + return 0; + break; + case 1: + if (a->unk0_7 > b->unk0_7) + return 1; + if (a->unk0_7 < b->unk0_7) + return 0; + if (a->unk0_0 > b->unk0_0) + return 1; + if (a->unk0_0 < b->unk0_0) + return 0; + break; + case 2: + if (a->unk0_0 > b->unk0_0) + return 1; + if (a->unk0_0 < b->unk0_0) + return 0; + if (a->unk0_7 > b->unk0_7) + return 1; + if (a->unk0_7 < b->unk0_7) + return 0; + if (a->unk2 > b->unk2) + return 1; + if (a->unk2 < b->unk2) + return 0; + if (a->words[0] > b->words[0]) + return 1; + if (a->words[0] < b->words[0]) + return 0; + if (a->words[1] > b->words[1]) + return 1; + if (a->words[1] < b->words[1]) + return 0; + return 1; + } + return Random() & 1; +} + +static void sub_80FA740(struct EasyChatPair *s) +{ + u16 r4; + + r4 = Random() % 98; + if (r4 > 50) + { + r4 = Random() % 98; + if (r4 > 80) + r4 = Random() % 98; + } + s->unk0_7 = r4 + 30; + s->unk0_0 = (Random() % (r4 + 1)) + 30; + s->unk2 = Random(); +} + +static bool8 SB1ContainsWords(u16 *a) +{ + u16 i; + + for (i = 0; i < 5; i++) + { + if (IsEasyChatPairEqual(a, gSaveBlock1.easyChatPairs[i].words) != 0) + return TRUE; + } + return FALSE; +} + +static bool8 IsEasyChatPairEqual(u16 *words1, u16 *words2) +{ + u16 i; + + for (i = 0; i < 2; i++) + { + if (*(words1++) != *(words2++)) + return FALSE; + } + return TRUE; +} + +static s16 sub_80FA828(struct EasyChatPair *a, u16 b) +{ + s16 i; + struct EasyChatPair *s = ARRAY_2007900; + + for (i = 0; i < b; i++) + { + if (IsEasyChatPairEqual(a->words, s->words)) + return i; + s++; + } + return -1; +} diff --git a/src/field/diploma.c b/src/field/diploma.c new file mode 100644 index 000000000..ba7de58aa --- /dev/null +++ b/src/field/diploma.c @@ -0,0 +1,139 @@ +#include "global.h" +#include "diploma.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "pokedex.h" +#include "rom4.h" +#include "sprite.h" +#include "string_util.h" +#include "strings2.h" +#include "task.h" +#include "text.h" +#include "unknown_task.h" + +static void VBlankCB(void); +static void MainCB2(void); +static void Task_DiplomaFadeIn(u8); +static void Task_DiplomaWaitForKeyPress(u8); +static void Task_DiplomaFadeOut(u8); +static void DisplayDiplomaText(void); + +static const u16 gDiplomaPalettes[][16] = +{ + INCBIN_U16("graphics/misc/diploma_national.gbapal"), + INCBIN_U16("graphics/misc/diploma_hoenn.gbapal"), +}; + +static const u8 gDiplomaTilemap[] = INCBIN_U8("graphics/misc/diploma_map.bin.lz"); +static const u8 gDiplomaTiles[] = INCBIN_U8("graphics/misc/diploma.4bpp.lz"); + +static void VBlankCB(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_8145D88(void) +{ + u32 savedIme; + + SetVBlankCallback(NULL); + + REG_DISPCNT = 0; + REG_BG3CNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT, PLTT_SIZE); + + LZ77UnCompVram(gDiplomaTiles, (void *)VRAM); + LZ77UnCompVram(gDiplomaTilemap, (void *)(VRAM + 0x3000)); + + remove_some_task(); + ResetTasks(); + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + LoadPalette(gDiplomaPalettes, 0, 64); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + DisplayDiplomaText(); + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + + SetVBlankCallback(VBlankCB); + SetMainCallback2(MainCB2); + + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6) | BGCNT_16COLOR | BGCNT_TXT512x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; + + CreateTask(Task_DiplomaFadeIn, 0); +} + +static void MainCB2(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void Task_DiplomaFadeIn(u8 taskId) +{ + if (!gPaletteFade.active) + gTasks[taskId].func = Task_DiplomaWaitForKeyPress; +} + +static void Task_DiplomaWaitForKeyPress(u8 taskId) +{ + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskId].func = Task_DiplomaFadeOut; + } +} + +static void Task_DiplomaFadeOut(u8 taskId) +{ + if (!gPaletteFade.active) + { + DestroyTask(taskId); + SetMainCallback2(sub_80546F0); + } +} + +static void DisplayDiplomaText(void) +{ + if (sub_8090FF4()) + { + REG_BG3HOFS = 256; + StringCopy(gStringVar1, gOtherText_NationalDex); + } + else + { + REG_BG3HOFS = 0; + StringCopy(gStringVar1, gOtherText_HoennDex); + } + MenuPrint(gOtherText_DiplomaCertificationGameFreak, 6, 2); +} \ No newline at end of file diff --git a/src/field/easy_chat.c b/src/field/easy_chat.c new file mode 100644 index 000000000..cca8c1355 --- /dev/null +++ b/src/field/easy_chat.c @@ -0,0 +1,442 @@ +#include "global.h" +#include "easy_chat.h" +#include "data2.h" +#include "event_data.h" +#include "field_message_box.h" +#include "pokedex.h" +#include "rng.h" +#include "string_util.h" +#include "strings.h" +#include "strings2.h" +#include "text.h" + +static bool8 sub_80EB680(u16 *, u16, u16, u16); +static u16 sub_80EB9D8(void); +static u16 sub_80EB960(void); + +extern void *gEasyChatGroupWords[]; +extern const u8 gEasyChatGroupSizes[]; + +extern u16 gSpecialVar_0x8004; + + +u8 *sub_80EB3FC(u8 *dst, u16 word) +{ + u16 group; + u16 wordIndex; + u8 *src; + u16 i; + + if (sub_80EB37C(word)) + return StringCopy(dst, gOtherText_ThreeQuestions); + + if (word == 0xFFFF) + { + dst[0] = EOS; + return dst; + } + else + { + group = word >> 9; + wordIndex = word & 0x1FF; + switch (group) + { + case EC_GROUP_POKEMON: // 0 + case EC_GROUP_POKEMON_2: // 21 + dst = StringCopy(dst, gSpeciesNames[wordIndex]); + break; + case EC_GROUP_MOVE_1: // 18 + case EC_GROUP_MOVE_2: // 19 + dst = StringCopy(dst, gMoveNames[wordIndex]); + break; + default: + src = gEasyChatGroupWords[group]; + for (i = wordIndex - 1; i != 0xFFFF; i--) + { + while (*src++ != EOS) + ; + } + dst = StringCopy(dst, src); + break; + } + dst[0] = EOS; + return dst; + } +} + +u8 *ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16 arg2, u16 arg3) +{ + u16 i; + u16 n; + + const u16 i1 = arg2 - 1; + + for (i = 0; i < arg3; i++) + { + u16 word; + + for (n = 0; n < i1; n++) + { + dst = sub_80EB3FC(dst, words[0]); + + if (words[0] != 0xFFFF) + { + dst[0] = CHAR_SPACE; + dst++; + } + + words++; + } + + word = words[0]; + words++; + dst = sub_80EB3FC(dst, word); + + dst[0] = CHAR_NEWLINE; + dst++; + } + + dst--; + dst[0] = EOS; + + return dst; +} + +u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3) +{ + u16 i; + u16 n; + + const u16 i1 = arg2 - 1; + + for (i = 0; i < arg3; i++) + { + u16 word; + + for (n = 0; n < i1; n++) + { + dst = sub_80EB3FC(dst, words[0]); + + if (words[0] != 0xFFFF) + { + dst[0] = CHAR_SPACE; + dst++; + } + + words++; + } + + word = words[0]; + words++; + dst = sub_80EB3FC(dst, word); + + // Only difference with ConvertEasyChatWordsToString + dst[0] = (i == 0) ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; + dst++; + } + + dst--; + dst[0] = EOS; + + return dst; +} + + +u16 unref_sub_80EB5E0(u16 arg0) +{ + u8 *chars; + u16 i; + u16 length; + int group, word; + + + if (arg0 == 0xFFFF) + return 0; + + group = arg0 >> 9; + word = arg0 & 0x1FF; + switch (group) + { + case EC_GROUP_POKEMON: // 0 + case EC_GROUP_POKEMON_2: // 21 + chars = (u8 *) gSpeciesNames[word]; + break; + case EC_GROUP_MOVE_1: // 18 + case EC_GROUP_MOVE_2: // 19 + chars = gMoveNames[word]; + break; + default: + chars = gEasyChatGroupWords[group]; + for (i = word - 1; i != 0xFFFF; i--) + { + while (*chars++ != EOS) + ; + } + break; + } + + length = 0; + while (*chars != EOS) + { + chars++; + length++; + } + + return length; +} + +static bool8 sub_80EB680(u16 *arg0, u16 arg1, u16 arg2, u16 arg3) +{ + return FALSE; +} + +void unref_sub_80EB684(u8 arg0, u16 arg1) +{ + u16 *ptr; + u16 c; + + // FIXME: find actual tv shows used + switch (arg0) + { + case 5: + c = 6; + ptr = (u16*)((void *)&gSaveBlock1.tvShows[arg1] + 0x04); + break; + case 7: + c = 2; + ptr = (u16*)((void *)&gSaveBlock1.tvShows[arg1] + 0x1C); + break; + case 8: + c = 1; + ptr = (u16*)((void *)&gSaveBlock1.tvShows[arg1] + 0x02); + break; + default: + return; + } + + c -= 1; + while (c != 0xFFFF) + { + *ptr = -1; + ptr++; + c -= 1; + } +} + +void sub_80EB6FC(u16 *arg0, u16 arg1) +{ + u16 i; + + for (i = arg1 - 1; i != 0xFFFF; i--) + { + *arg0 = 0xFFFF; + arg0++; + } + +} + +u16 sub_80EB72C(u16 group) +{ + u16 local1 = Random() % gEasyChatGroupSizes[group]; + + if (group == EC_GROUP_POKEMON + || group == EC_GROUP_POKEMON_2 + || group == EC_GROUP_MOVE_1 + || group == EC_GROUP_MOVE_2) + { + local1 = ((u16 *) gEasyChatGroupWords[group])[local1]; + } + + return ((group & 0x7F) << 9) | (local1 & 0x1FF); +} + +u16 sub_80EB784(u16 group) +{ + if (!sub_80EAD7C(group)) + return -1; + + if (group != EC_GROUP_POKEMON) + { + if (group == EC_GROUP_TRENDY_SAYING) + return sub_80EB960(); + } + else + { + return sub_80EB9D8(); + } + + return sub_80EB72C(group); +} + +void sub_80EB7C4(void) +{ + u16 *words; + u16 arg1, arg2; + + switch (gSpecialVar_0x8004) + { + case 0: + words = gSaveBlock1.unk2B1C; + arg1 = 2; + arg2 = 2; + break; + case 1: + words = gSaveBlock1.unk2B28; + if (sub_80EB680(gSaveBlock1.unk2B28, 3, 2, 20)) + { + arg1 = 2; + arg2 = 3; + } + else + { + arg1 = 3; + arg2 = 2; + } + break; + case 2: + words = gSaveBlock1.unk2B34; + arg1 = 3; + arg2 = 2; + break; + case 3: + words = gSaveBlock1.unk2B40; + arg1 = 3; + arg2 = 2; + break; + default: + return; + } + + ConvertEasyChatWordsToString(gStringVar4, words, arg1, arg2); + ShowFieldAutoScrollMessage(gStringVar4); +} + +void sub_80EB83C(void) +{ + u16 group, local2; + + if (Random() & 1) + group = EC_GROUP_HOBBIES; + else + group = EC_GROUP_LIFESTYLE; + + local2 = sub_80EB784(group); + sub_80EB3FC(gStringVar2, local2); +} + +u8 sub_80EB868(u8 arg0) +{ + int offset; + int index; + + index = arg0 / 8; + offset = arg0 % 8; + return (gSaveBlock1.unk2D8C[index] >> offset) & 1; +} + +void sub_80EB890(u8 arg0) +{ + int offset; + int index; + + if (arg0 < 33) + { + index = arg0 / 8; + offset = arg0 % 8; + gSaveBlock1.unk2D8C[index] |= 1 << offset; + } +} + +u8 sub_80EB8C0(void) +{ + u8 i, count; + + for (i = 0, count = 0; i < 33; i++) + { + if (sub_80EB868(i)) + count++; + } + return count; +} + +u16 sub_80EB8EC(void) +{ + u16 i; + u16 local1, local2; + + local1 = sub_80EB8C0(); + if (local1 == 33) + return -1; + + local2 = Random() % (33 - local1); + for (i = 0; i < 33; i++) + { + if (sub_80EB868(i) == 0) + { + if (local2 == 0) + { + sub_80EB890(i); + return (i & 0x1FF) | 0x2800; + } + local2--; + } + } + return -1; +} + +static u16 sub_80EB960(void) +{ + u16 i; + u16 local1; + + local1 = sub_80EB8C0(); + if (local1 == 0) + return -1; + + local1 = Random() % local1; + for (i = 0; i < 33; i++) + { + if (sub_80EB868(i)) + { + if (local1 == 0) + return (i & 0x1FF) | 0x2800; + local1--; + } + } + + return -1; +} + +u8 sub_80EB9C8(void) +{ + return IsNationalPokedexEnabled(); +} + +static u16 sub_80EB9D8(void) +{ + u16 *speciesList; + u16 local1; + u16 i; + + local1 = sub_80EAE88(0); + + if (local1 == 0) + return -1; + + local1 = Random() % local1; + speciesList = (u16 *) gEasyChatGroupWords[EC_GROUP_POKEMON]; + for (i = 0; i < gEasyChatGroupSizes[EC_GROUP_POKEMON]; i++) + { + const u16 dexNum = SpeciesToNationalPokedexNum(*speciesList); + const u8 local2 = GetNationalPokedexFlag(dexNum, 0); + + if (local2) + { + if (local1 == 0) + return *speciesList & 0x1FF; + local1--; + } + speciesList++; + } + return -1; +} diff --git a/src/field/event_data.c b/src/field/event_data.c new file mode 100644 index 000000000..0484bae02 --- /dev/null +++ b/src/field/event_data.c @@ -0,0 +1,184 @@ +#include "global.h" +#include "event_data.h" +#include "pokedex.h" + +#define TEMP_FLAGS_SIZE 0x4 +#define TEMP_UPPER_FLAGS_SIZE 0x8 +#define TEMP_VARS_SIZE 0x20 + +EWRAM_DATA u16 gSpecialVar_0x8000 = 0; +EWRAM_DATA u16 gSpecialVar_0x8001 = 0; +EWRAM_DATA u16 gSpecialVar_0x8002 = 0; +EWRAM_DATA u16 gSpecialVar_0x8003 = 0; +EWRAM_DATA u16 gSpecialVar_0x8004 = 0; +EWRAM_DATA u16 gSpecialVar_0x8005 = 0; +EWRAM_DATA u16 gSpecialVar_0x8006 = 0; +EWRAM_DATA u16 gSpecialVar_0x8007 = 0; +EWRAM_DATA u16 gSpecialVar_0x8008 = 0; +EWRAM_DATA u16 gSpecialVar_0x8009 = 0; +EWRAM_DATA u16 gSpecialVar_0x800A = 0; +EWRAM_DATA u16 gSpecialVar_0x800B = 0; +EWRAM_DATA u16 gScriptResult = 0; +EWRAM_DATA u16 gScriptLastTalked = 0; +EWRAM_DATA u16 gScriptFacing = 0; +EWRAM_DATA u8 gUnknown_0202E8E2[16] = {0}; + +extern u16 *gSpecialVars[]; + +void InitEventData(void) +{ + memset(gSaveBlock1.flags, 0, sizeof(gSaveBlock1.flags)); + memset(gSaveBlock1.vars, 0, sizeof(gSaveBlock1.vars)); + memset(gUnknown_0202E8E2, 0, sizeof(gUnknown_0202E8E2)); +} + +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); +} + +// probably had different flag splits at one point. +void ClearUpperFlags(void) +{ + memset(gSaveBlock1.flags + 0x118, 0, TEMP_UPPER_FLAGS_SIZE); +} + +void DisableNationalPokedex(void) +{ + u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX); + gSaveBlock2.pokedex.nationalMagic = 0; + *nationalDexVar = 0; + FlagReset(SYS_NATIONAL_DEX); +} + +void EnableNationalPokedex(void) +{ + u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX); + gSaveBlock2.pokedex.nationalMagic = 0xDA; + *nationalDexVar = 0x302; + FlagSet(SYS_NATIONAL_DEX); + gSaveBlock2.pokedex.unknown1 = 1; + gSaveBlock2.pokedex.order = 0; + sub_808C0A0(); +} + +bool32 IsNationalPokedexEnabled(void) +{ + if (gSaveBlock2.pokedex.nationalMagic == 0xDA && VarGet(VAR_NATIONAL_DEX) == 0x302 && FlagGet(SYS_NATIONAL_DEX)) + return TRUE; + else + return FALSE; +} + +void DisableMysteryGift(void) +{ + FlagReset(SYS_EXDATA_ENABLE); +} + +void EnableMysteryGift(void) +{ + FlagSet(SYS_EXDATA_ENABLE); +} + +bool32 IsMysteryGiftEnabled(void) +{ + return FlagGet(SYS_EXDATA_ENABLE); +} + +void DisableResetRTC(void) +{ + VarSet(VAR_RESET_RTC_ENABLE, 0); + FlagReset(SYS_RESET_RTC_ENABLE); +} + +void EnableResetRTC(void) +{ + VarSet(VAR_RESET_RTC_ENABLE, 0x920); + FlagSet(SYS_RESET_RTC_ENABLE); +} + +bool32 CanResetRTC(void) +{ + if (FlagGet(SYS_RESET_RTC_ENABLE) && VarGet(VAR_RESET_RTC_ENABLE) == 0x920) + return TRUE; + else + return FALSE; +} + +u16 *GetVarPointer(u16 id) +{ + if (id < 0x4000) + return NULL; + + if ((s16)id >= 0) + return &gSaveBlock1.vars[id - 0x4000]; + + return gSpecialVars[id - 0x8000]; +} + +u16 VarGet(u16 id) +{ + u16 *ptr = GetVarPointer(id); + if (!ptr) + return id; + return *ptr; +} + +bool8 VarSet(u16 id, u16 value) +{ + u16 *ptr = GetVarPointer(id); + if (!ptr) + return FALSE; + *ptr = value; + return TRUE; +} + +u8 VarGetFieldObjectGraphicsId(u8 id) +{ + return VarGet(0x4010 + id); +} + +u8 *GetFlagPointer(u16 id) +{ + if (id == 0) + return 0; + + if (id < 0x4000) + return &gSaveBlock1.flags[id / 8]; + + return &gUnknown_0202E8E2[(id - 0x4000) / 8]; +} + +u8 FlagSet(u16 id) +{ + u8 *ptr = GetFlagPointer(id); + if (ptr) + *ptr |= 1 << (id & 7); + return 0; +} + +u8 FlagReset(u16 id) +{ + u8 *ptr = GetFlagPointer(id); + if (ptr) + *ptr &= ~(1 << (id & 7)); + return 0; +} + +bool8 FlagGet(u16 id) +{ + u8 *ptr = GetFlagPointer(id); + + if (!ptr) + return FALSE; + + if (!(((*ptr) >> (id & 7)) & 1)) + return FALSE; + + return TRUE; +} diff --git a/src/field/field_camera.c b/src/field/field_camera.c new file mode 100644 index 000000000..db51cf054 --- /dev/null +++ b/src/field/field_camera.c @@ -0,0 +1,495 @@ +#include "global.h" +#include "field_camera.h" +#include "berry.h" +#include "field_player_avatar.h" +#include "fieldmap.h" +#include "rotating_gate.h" +#include "sprite.h" +#include "text.h" + +EWRAM_DATA u8 gUnknown_0202E854 = 0; + +struct UnknownStruct +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + bool8 unk4; +}; + +static struct UnknownStruct gUnknown_03000590; +static u16 gUnknown_03000598; +static s16 gUnknown_0300059A; +static u8 gUnknown_0300059C; +static void (*gUnknown_030005A0)(void); + +struct CameraSomething gUnknown_03004880; +u16 gUnknown_03004898; +u16 gUnknown_0300489C; + +static void RedrawMapSliceNorth(struct UnknownStruct *a, struct MapData *mapData); +static void RedrawMapSliceSouth(struct UnknownStruct *a, struct MapData *mapData); +static void RedrawMapSliceEast(struct UnknownStruct *a, struct MapData *mapData); +static void RedrawMapSliceWest(struct UnknownStruct *a, struct MapData *mapData); +static s32 MapPosToBgTilemapOffset(struct UnknownStruct *a, s32 x, s32 y); + +static void DrawWholeMapViewInternal(int x, int y, struct MapData *mapData); +static void DrawMetatileAt(struct MapData *mapData, u16, int, int); +static void DrawMetatile(s32 a, u16 *b, u16 c); +static void CameraPanningCB_PanAhead(void); + +static void move_tilemap_camera_to_upper_left_corner_(struct UnknownStruct *a) +{ + a->unk2 = 0; + a->unk3 = 0; + a->unk0 = 0; + a->unk1 = 0; + a->unk4 = TRUE; +} + +static void tilemap_move_something(struct UnknownStruct *a, u32 b, u32 c) +{ + a->unk2 += b; + a->unk2 %= 32; + a->unk3 += c; + a->unk3 %= 32; +} + +static void coords8_add(struct UnknownStruct *a, u32 b, u32 c) +{ + a->unk0 += b; + a->unk1 += c; +} + +void move_tilemap_camera_to_upper_left_corner(void) +{ + move_tilemap_camera_to_upper_left_corner_(&gUnknown_03000590); + CpuFill16(0, gBGTilemapBuffers[2], 0x800); + CpuFill16(0, gBGTilemapBuffers[1], 0x800); + CpuFill16(0x3014, gBGTilemapBuffers[3], 0x800); +} + +void sub_8057A58(void) +{ + *gBGHOffsetRegs[1] = gUnknown_03000590.unk0 + gUnknown_03000598; + *gBGVOffsetRegs[1] = gUnknown_03000590.unk1 + gUnknown_0300059A + 8; + *gBGHOffsetRegs[2] = gUnknown_03000590.unk0 + gUnknown_03000598; + *gBGVOffsetRegs[2] = gUnknown_03000590.unk1 + gUnknown_0300059A + 8; + *gBGHOffsetRegs[3] = gUnknown_03000590.unk0 + gUnknown_03000598; + *gBGVOffsetRegs[3] = gUnknown_03000590.unk1 + gUnknown_0300059A + 8; + + if (gUnknown_03000590.unk4) + { + DmaCopy16(3, gBGTilemapBuffers[1], (void *)(VRAM + 0xE800), 0x800); + DmaCopy16(3, gBGTilemapBuffers[2], (void *)(VRAM + 0xE000), 0x800); + DmaCopy16(3, gBGTilemapBuffers[3], (void *)(VRAM + 0xF000), 0x800); + gUnknown_03000590.unk4 = FALSE; + } +} + +void sub_8057B14(u16 *a, u16 *b) +{ + *a = gUnknown_03000590.unk0 + gUnknown_03000598; + *b = gUnknown_03000590.unk1 + gUnknown_0300059A + 8; +} + +void DrawWholeMapView(void) +{ + DrawWholeMapViewInternal(gSaveBlock1.pos.x, gSaveBlock1.pos.y, gMapHeader.mapData); + gUnknown_03000590.unk4 = TRUE; +} + +static void DrawWholeMapViewInternal(int x, int y, struct MapData *mapData) +{ + u8 i; + u8 j; + u32 r6; + u8 temp; + + for (i = 0; i < 32; i += 2) + { + temp = gUnknown_03000590.unk3 + i; + if (temp >= 32) + temp -= 32; + r6 = temp * 32; + for (j = 0; j < 32; j += 2) + { + temp = gUnknown_03000590.unk2 + j; + if (temp >= 32) + temp -= 32; + DrawMetatileAt(mapData, r6 + temp, x + j / 2, y + i / 2); + } + } +} + +static void RedrawMapSlicesForCameraUpdate(struct UnknownStruct *a, int x, int y) +{ + struct MapData *mapData = gMapHeader.mapData; + + if (x > 0) + RedrawMapSliceWest(a, mapData); + if (x < 0) + RedrawMapSliceEast(a, mapData); + if (y > 0) + RedrawMapSliceNorth(a, mapData); + if (y < 0) + RedrawMapSliceSouth(a, mapData); + a->unk4 = TRUE; +} + +static void RedrawMapSliceNorth(struct UnknownStruct *a, struct MapData *mapData) +{ + u8 i; + u8 temp; + u32 r7; + + temp = a->unk3 + 28; + if (temp >= 32) + temp -= 32; + r7 = temp * 32; + for (i = 0; i < 32; i += 2) + { + temp = a->unk2 + i; + if (temp >= 32) + temp -= 32; + DrawMetatileAt(mapData, r7 + temp, gSaveBlock1.pos.x + i / 2, gSaveBlock1.pos.y + 14); + } +} + +static void RedrawMapSliceSouth(struct UnknownStruct *a, struct MapData *mapData) +{ + u8 i; + u8 temp; + u32 r7 = a->unk3 * 32; + + for (i = 0; i < 32; i += 2) + { + temp = a->unk2 + i; + if (temp >= 32) + temp -= 32; + DrawMetatileAt(mapData, r7 + temp, gSaveBlock1.pos.x + i / 2, gSaveBlock1.pos.y); + } +} + +static void RedrawMapSliceEast(struct UnknownStruct *a, struct MapData *mapData) +{ + u8 i; + u8 temp; + u32 r6 = a->unk2; + + for (i = 0; i < 32; i += 2) + { + temp = a->unk3 + i; + if (temp >= 32) + temp -= 32; + DrawMetatileAt(mapData, temp * 32 + r6, gSaveBlock1.pos.x, gSaveBlock1.pos.y + i / 2); + } +} + +static void RedrawMapSliceWest(struct UnknownStruct *a, struct MapData *mapData) +{ + u8 i; + u8 temp; + u8 r5 = a->unk2 + 28; + + if (r5 >= 32) + r5 -= 32; + for (i = 0; i < 32; i += 2) + { + temp = a->unk3 + i; + if (temp >= 32) + temp -= 32; + DrawMetatileAt(mapData, temp * 32 + r5, gSaveBlock1.pos.x + 14, gSaveBlock1.pos.y + i / 2); + } +} + +void CurrentMapDrawMetatileAt(int a, int b) +{ + int offset = MapPosToBgTilemapOffset(&gUnknown_03000590, a, b); + + if (offset >= 0) + { + DrawMetatileAt(gMapHeader.mapData, offset, a, b); + gUnknown_03000590.unk4 = TRUE; + } +} + +void DrawDoorMetatileAt(int x, int y, u16 *arr) +{ + int offset = MapPosToBgTilemapOffset(&gUnknown_03000590, x, y); + + if (offset >= 0) + { + DrawMetatile(1, arr, offset); + gUnknown_03000590.unk4 = TRUE; + } +} + +static void DrawMetatileAt(struct MapData *mapData, u16 b, int c, int d) +{ + u16 metatileId = MapGridGetMetatileIdAt(c, d); + u16 *metatiles; + + if (metatileId > 1024) + metatileId = 0; + if (metatileId < 512) + metatiles = mapData->primaryTileset->metatiles; + else + { + metatiles = mapData->secondaryTileset->metatiles; + metatileId -= 512; + } + DrawMetatile(MapGridGetMetatileLayerTypeAt(c, d), metatiles + metatileId * 8, b); +} + +static void DrawMetatile(s32 a, u16 *b, u16 c) +{ + switch (a) + { + case 2: + gBGTilemapBuffers[3][c] = b[0]; + gBGTilemapBuffers[3][c + 1] = b[1]; + gBGTilemapBuffers[3][c + 0x20] = b[2]; + gBGTilemapBuffers[3][c + 0x21] = b[3]; + + gBGTilemapBuffers[2][c] = 0; + gBGTilemapBuffers[2][c + 1] = 0; + gBGTilemapBuffers[2][c + 0x20] = 0; + gBGTilemapBuffers[2][c + 0x21] = 0; + + gBGTilemapBuffers[1][c] = b[4]; + gBGTilemapBuffers[1][c + 1] = b[5]; + gBGTilemapBuffers[1][c + 0x20] = b[6]; + gBGTilemapBuffers[1][c + 0x21] = b[7]; + break; + case 1: + gBGTilemapBuffers[3][c] = b[0]; + gBGTilemapBuffers[3][c + 1] = b[1]; + gBGTilemapBuffers[3][c + 0x20] = b[2]; + gBGTilemapBuffers[3][c + 0x21] = b[3]; + + gBGTilemapBuffers[2][c] = b[4]; + gBGTilemapBuffers[2][c + 1] = b[5]; + gBGTilemapBuffers[2][c + 0x20] = b[6]; + gBGTilemapBuffers[2][c + 0x21] = b[7]; + + gBGTilemapBuffers[1][c] = 0; + gBGTilemapBuffers[1][c + 1] = 0; + gBGTilemapBuffers[1][c + 0x20] = 0; + gBGTilemapBuffers[1][c + 0x21] = 0; + break; + case 0: + gBGTilemapBuffers[3][c] = 0x3014; + gBGTilemapBuffers[3][c + 1] = 0x3014; + gBGTilemapBuffers[3][c + 0x20] = 0x3014; + gBGTilemapBuffers[3][c + 0x21] = 0x3014; + + gBGTilemapBuffers[2][c] = b[0]; + gBGTilemapBuffers[2][c + 1] = b[1]; + gBGTilemapBuffers[2][c + 0x20] = b[2]; + gBGTilemapBuffers[2][c + 0x21] = b[3]; + + gBGTilemapBuffers[1][c] = b[4]; + gBGTilemapBuffers[1][c + 1] = b[5]; + gBGTilemapBuffers[1][c + 0x20] = b[6]; + gBGTilemapBuffers[1][c + 0x21] = b[7]; + break; + } +} + +static s32 MapPosToBgTilemapOffset(struct UnknownStruct *a, s32 x, s32 y) +{ + x -= gSaveBlock1.pos.x; + x *= 2; + if (x >= 32 || x < 0) + return -1; + x = x + a->unk2; + if (x >= 32) + x -= 32; + + y = (y - gSaveBlock1.pos.y) * 2; + if (y >= 32 || y < 0) + return -1; + y = y + a->unk3; + if (y >= 32) + y -= 32; + + return y * 32 + x; +} + +static void CameraUpdateCallback(struct CameraSomething *a) +{ + if (a->unk4 != 0) + { + a->unk8 = gSprites[a->unk4].data2; + a->unkC = gSprites[a->unk4].data3; + } +} + +void ResetCameraUpdateInfo(void) +{ + gUnknown_03004880.unk8 = 0; + gUnknown_03004880.unkC = 0; + gUnknown_03004880.unk10 = 0; + gUnknown_03004880.unk14 = 0; + gUnknown_03004880.unk4 = 0; + gUnknown_03004880.callback = NULL; +} + +u32 InitCameraUpdateCallback(u8 a) +{ + if (gUnknown_03004880.unk4 != 0) + DestroySprite(&gSprites[gUnknown_03004880.unk4]); + gUnknown_03004880.unk4 = AddCameraObject(a); + gUnknown_03004880.callback = CameraUpdateCallback; + return 0; +} + +void CameraUpdate(void) +{ + int deltaX; + int deltaY; + int r0; + int r1; + int r7; + int r8; + + if (gUnknown_03004880.callback != NULL) + gUnknown_03004880.callback(&gUnknown_03004880); + r7 = gUnknown_03004880.unk8; + r8 = gUnknown_03004880.unkC; + deltaX = 0; + deltaY = 0; + r1 = gUnknown_03004880.unk10; + r0 = gUnknown_03004880.unk14; + + + if (r1 == 0 && r7 != 0) + { + if (r7 > 0) + deltaX = 1; + else + deltaX = -1; + } + if (r0 == 0 && r8 != 0) + { + if (r8 > 0) + deltaY = 1; + else + deltaY = -1; + } + if (r1 != 0 && r1 == -r7) + { + if (r7 > 0) + deltaX = 1; + else + deltaX = -1; + } + if (r0 != 0 && r0 == -r8) + { + if (r8 > 0) + deltaX = 1; + else + deltaX = -1; + } + + gUnknown_03004880.unk10 += r7; + gUnknown_03004880.unk10 = gUnknown_03004880.unk10 - 16 * (gUnknown_03004880.unk10 / 16); + gUnknown_03004880.unk14 += r8; + gUnknown_03004880.unk14 = gUnknown_03004880.unk14 - 16 * (gUnknown_03004880.unk14 / 16); + + if (deltaX != 0 || deltaY != 0) + { + CameraMove(deltaX, deltaY); + UpdateFieldObjectsForCameraUpdate(deltaX, deltaY); + RotatingGatePuzzleCameraUpdate(deltaX, deltaY); + ResetBerryTreeSparkleFlags(); + tilemap_move_something(&gUnknown_03000590, deltaX * 2, deltaY * 2); + RedrawMapSlicesForCameraUpdate(&gUnknown_03000590, deltaX * 2, deltaY * 2); + } + + coords8_add(&gUnknown_03000590, r7, r8); + gUnknown_0300489C -= r7; + gUnknown_03004898 -= r8; +} + +void camera_move_and_redraw(int a, int b) +{ + CameraMove(a, b); + UpdateFieldObjectsForCameraUpdate(a, b); + DrawWholeMapView(); + gUnknown_0300489C -= a * 16; + gUnknown_03004898 -= b * 16; +} + +void SetCameraPanningCallback(void (*a)(void)) +{ + gUnknown_030005A0 = a; +} + +void SetCameraPanning(s16 a, s16 b) +{ + gUnknown_03000598 = a; + gUnknown_0300059A = b + 32; +} + +void InstallCameraPanAheadCallback(void) +{ + gUnknown_030005A0 = CameraPanningCB_PanAhead; + gUnknown_0300059C = 0; + gUnknown_03000598 = 0; + gUnknown_0300059A = 32; +} + +void UpdateCameraPanning(void) +{ + if (gUnknown_030005A0 != NULL) + gUnknown_030005A0(); + //Update sprite offset of overworld objects + gSpriteCoordOffsetX = gUnknown_0300489C - gUnknown_03000598; + gSpriteCoordOffsetY = gUnknown_03004898 - gUnknown_0300059A - 8; +} + +static void CameraPanningCB_PanAhead(void) +{ + u8 var; + + if (gUnknown_0202E854 == 0) + { + InstallCameraPanAheadCallback(); + } + else + { + if (gPlayerAvatar.running1 == 1) + { + gUnknown_0300059C ^= 1; + if (gUnknown_0300059C == 0) + return; + } + else + { + gUnknown_0300059C = 0; + } + + var = player_get_direction_upper_nybble(); + if (var == 2) + { + if (gUnknown_0300059A > -8) + gUnknown_0300059A -= 2; + } + else if (var == 1) + { + if (gUnknown_0300059A < 72) + gUnknown_0300059A += 2; + } + else if (gUnknown_0300059A < 32) + { + gUnknown_0300059A += 2; + } + else if (gUnknown_0300059A > 32) + { + gUnknown_0300059A -= 2; + } + } +} diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c new file mode 100644 index 000000000..a8f6b6b9b --- /dev/null +++ b/src/field/field_control_avatar.c @@ -0,0 +1,878 @@ +#include "global.h" +#include "field_control_avatar.h" +#include "battle_setup.h" +#include "bike.h" +#include "coord_event_weather.h" +#include "daycare.h" +#include "event_data.h" +#include "field_fadetransition.h" +#include "field_player_avatar.h" +#include "field_poison.h" +#include "field_specials.h" +#include "fieldmap.h" +#include "flags.h" +#include "item_menu.h" +#include "metatile_behavior.h" +#include "rom4.h" +#include "safari_zone.h" +#include "script.h" +#include "secret_base.h" +#include "songs.h" +#include "sound.h" +#include "start_menu.h" +#include "trainer_see.h" +#include "vars.h" +#include "wild_encounter.h" + +struct Coords32 +{ + s32 x; + s32 y; +}; + +extern u16 gScriptLastTalked; +extern u16 gScriptFacing; +extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; + +static EWRAM_DATA u8 gUnknown_0202E8C0 = 0; +static EWRAM_DATA u16 gUnknown_0202E8C2 = 0; + +u8 gSelectedMapObject; + +//scripts +extern u8 gUnknown_081A2C51[]; +extern u8 gUnknown_0815281E[]; +extern u8 gUnknown_08152C39[]; +extern u8 gUnknown_0815F36C[]; +extern u8 gUnknown_0815F43A[]; +extern u8 gUnknown_081A0009[]; +extern u8 gUnknown_081C6C02[]; +extern u8 HiddenItemScript[]; +extern u8 Event_TV[]; +extern u8 gUnknown_081A0009[]; +extern u8 ClosedSootopolisGymDoorScript[]; +extern u8 gUnknown_081A4363[]; +extern u8 gUnknown_081C346A[]; +extern u8 gUnknown_081616E1[]; +extern u8 Event_WorldMap[]; +extern u8 Event_RunningShoesManual[]; +extern u8 PictureBookShelfScript[]; +extern u8 BookshelfScript[]; +extern u8 PokemonCenterBookshelfScript[]; +extern u8 VaseScript[]; +extern u8 TrashCanScript[]; +extern u8 ShopShelfScript[]; +extern u8 BlueprintScript[]; +extern u8 gUnknown_0815F36C[]; +extern u8 gUnknown_0815F43A[]; +extern u8 gUnknown_0815F523[]; +extern u8 gUnknown_0815F528[]; +extern u8 UseSurfScript[]; +extern u8 UseWaterfallScript[]; +extern u8 CannotUseWaterfallScript[]; +extern u8 UseDiveScript[]; +extern u8 UnderwaterUseDiveScript[]; +extern u8 GraniteCave_B1F_EventScript_1C6BC5[]; +extern u8 gUnknown_081A14B8[]; +extern u8 Event_EggHatch[]; +extern u8 gUnknown_0815FD0D[]; +extern u8 gUnknown_081C6BDE[]; + +static void player_get_pos_to_and_height(struct MapPosition *); +static void player_get_next_pos_and_height(struct MapPosition *); +static u16 cur_mapdata_block_role_at_player_pos(int); +static bool8 sub_80681F0(struct MapPosition *position, u16 b, u8 c); +static u8 *TryGetScriptOnPressingA(struct MapPosition *position, u8 b, u8 c); +static u8 *sub_8068364(struct MapPosition *, u8, u8); +static u8 *TryGetInvisibleMapObjectScript(struct MapPosition *, u8, u8 c); +static u8 *sub_8068500(struct MapPosition *, u8, u8); +static u8 *TryGetFieldMoveScript(struct MapPosition *, u8, u8); +static bool32 sub_8068770(void); +static bool32 sub_80687A4(void); +static bool8 sub_80687E4(struct MapPosition *, u16, u16); +static void happiness_algorithm_step(void); +static bool8 overworld_poison_step(void); +static bool8 is_it_battle_time_3(u16); +static bool8 mapheader_run_first_tag2_script_list_match_conditionally(struct MapPosition *, u16, u8); +static bool8 sub_8068B30(u16); +static bool8 is_non_stair_warp_tile(u16, u8); +static s8 map_warp_check_packed(struct MapHeader *, struct MapPosition *); +static void sub_8068C30(struct MapHeader *, s8, struct MapPosition *); +static bool8 map_warp_consider_2_to_inside(struct MapPosition *, u16, u8); +static s8 map_warp_check(struct MapHeader *, u16, u16, u8); +static u8 *mapheader_trigger_activate_at(struct MapHeader *, u16, u16, u8); +static struct BgEvent *FindInvisibleMapObjectByPosition(struct MapHeader *, u16, u16, u8); + +void FieldClearPlayerInput(struct FieldInput *input) +{ + input->pressedAButton = 0; + input->input_field_0_1 = 0; + input->pressedStartButton = 0; + input->pressedSelectButton = 0; + input->input_field_0_4 = 0; + input->input_field_0_5 = 0; + input->input_field_0_6 = 0; + input->pressedBButton = 0; + input->input_field_1_0 = 0; + input->input_field_1_1 = 0; + input->input_field_1_2 = 0; + input->input_field_1_3 = 0; + input->dpadDirection = 0; +} + +void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) +{ + u8 r6 = gPlayerAvatar.running1; + u8 r9 = gPlayerAvatar.running2; + bool8 forcedMove = MetatileBehavior_IsMoveTile(cur_mapdata_block_role_at_player_pos(r9)); + + if ((r6 == 2 && forcedMove == FALSE) || r6 == 0) + { + if (GetPlayerSpeed() != 4) + { + if (newKeys & START_BUTTON) + input->pressedStartButton = TRUE; + if (newKeys & SELECT_BUTTON) + input->pressedSelectButton = TRUE; + if (newKeys & A_BUTTON) + input->pressedAButton = TRUE; + if (newKeys & B_BUTTON) + input->pressedBButton = TRUE; + } + if (heldKeys & (DPAD_UP | DPAD_DOWN | DPAD_LEFT | DPAD_RIGHT)) + { + input->input_field_0_4 = TRUE; + input->input_field_0_5 = TRUE; + } + } + if (forcedMove == FALSE) + { + if (r6 == 2 && r9 == 2) + input->input_field_0_6 = TRUE; + if (forcedMove == FALSE && r6 == 2) + input->input_field_0_1 = TRUE; + } + if (heldKeys & DPAD_UP) + input->dpadDirection = DIR_NORTH; + else if (heldKeys & DPAD_DOWN) + input->dpadDirection = DIR_SOUTH; + else if (heldKeys & DPAD_LEFT) + input->dpadDirection = DIR_WEST; + else if (heldKeys & DPAD_RIGHT) + input->dpadDirection = DIR_EAST; +} + +int sub_8068024(struct FieldInput *input) +{ + struct MapPosition position; + u8 r6; + u16 r4; + + r6 = player_get_direction_lower_nybble(); + player_get_pos_to_and_height(&position); + r4 = MapGridGetMetatileBehaviorAt(position.x, position.y); + if (CheckTrainers() == TRUE) + return TRUE; + if (mapheader_run_first_tag2_script_list_match() == 1) + return TRUE; + if (input->pressedBButton && sub_80687A4() == 1) + return TRUE; + if (input->input_field_0_6) + { + IncrementGameStat(5); + if (sub_80687E4(&position, r4, r6) == 1) + return TRUE; + } + if (input->input_field_0_1 && is_it_battle_time_3(r4) == 1) + return TRUE; + if (input->input_field_0_4 && input->dpadDirection == r6) + { + if (mapheader_run_first_tag2_script_list_match_conditionally(&position, r4, r6) == 1) + return TRUE; + } + player_get_next_pos_and_height(&position); + r4 = MapGridGetMetatileBehaviorAt(position.x, position.y); + if (input->pressedAButton && sub_80681F0(&position, r4, r6) == 1) + return TRUE; + if (input->input_field_0_5 && input->dpadDirection == r6) + { + if (map_warp_consider_2_to_inside(&position, r4, r6) == 1) + return TRUE; + } + if (input->pressedAButton && sub_8068770() == 1) + return TRUE; + if (input->pressedStartButton) + { + PlaySE(SE_WIN_OPEN); + sub_8071310(); + return TRUE; + } + if (input->pressedSelectButton && sub_80A6D1C() == TRUE) + return TRUE; + return FALSE; +} + +static void player_get_pos_to_and_height(struct MapPosition *position) +{ + PlayerGetDestCoords(&position->x, &position->y); + position->height = PlayerGetZCoord(); +} + +static void player_get_next_pos_and_height(struct MapPosition *position) +{ + s16 x, y; + + GetXYCoordsOneStepInFrontOfPlayer(&position->x, &position->y); + PlayerGetDestCoords(&x, &y); + if (MapGridGetZCoordAt(x, y) != 0) + position->height = PlayerGetZCoord(); + else + position->height = 0; +} + +static u16 cur_mapdata_block_role_at_player_pos(int unused) +{ + s16 x, y; + + PlayerGetDestCoords(&x, &y); + return MapGridGetMetatileBehaviorAt(x, y); +} + +static bool8 sub_80681F0(struct MapPosition *position, u16 b, u8 c) +{ + u8 *script = TryGetScriptOnPressingA(position, b, c); + + if (script == NULL) + return FALSE; + + if (script != gUnknown_0815281E + && script != gUnknown_08152C39 + && script != gUnknown_0815F36C + && script != gUnknown_0815F43A + && script != gUnknown_081A0009) + PlaySE(5); + + ScriptContext1_SetupScript(script); + return TRUE; +} + +static u8 *TryGetScriptOnPressingA(struct MapPosition *position, u8 b, u8 c) +{ + u8 *script; + + script = sub_8068364(position, b, c); + if (script != NULL) + return script; + script = TryGetInvisibleMapObjectScript(position, b, c); + if (script != NULL) + return script; + script = sub_8068500(position, b, c); + if (script != NULL) + return script; + script = TryGetFieldMoveScript(position, b, c); + if (script != NULL) + return script; + + return NULL; +} + +u8 *sub_80682A8(struct MapPosition *position, u8 unused, u8 c) +{ + u8 r3; + s32 i; + + if (!MetatileBehavior_IsCounter(MapGridGetMetatileBehaviorAt(position->x, position->y))) + r3 = GetFieldObjectIdByXYZ(position->x, position->y, position->height); + else + r3 = GetFieldObjectIdByXYZ(position->x + gUnknown_0821664C[c].x, position->y + gUnknown_0821664C[c].y, position->height); + if (r3 == 16 || gMapObjects[r3].localId == 0xFF) + return NULL; + for (i = 0; i < 4; i++) + { + if (gLinkPlayerMapObjects[i].active == TRUE && gLinkPlayerMapObjects[i].mapObjId == r3) + return NULL; + } + gSelectedMapObject = r3; + gScriptLastTalked = gMapObjects[r3].localId; + gScriptFacing = c; + return GetFieldObjectScriptPointerByFieldObjectId(r3); +} + +static u8 *sub_8068364(struct MapPosition *position, u8 b, u8 c) +{ + u8 r3; + u8 *script; + + r3 = GetFieldObjectIdByXYZ(position->x, position->y, position->height); + if (r3 == 16 || gMapObjects[r3].localId == 0xFF) + { + if (MetatileBehavior_IsCounter(b) != TRUE) + return NULL; + r3 = GetFieldObjectIdByXYZ(position->x + gUnknown_0821664C[c].x, position->y + gUnknown_0821664C[c].y, position->height); + if (r3 == 16 || gMapObjects[r3].localId == 0xFF) + return NULL; + } + //_080683E8 + gSelectedMapObject = r3; + gScriptLastTalked = gMapObjects[r3].localId; + gScriptFacing = c; + script = GetFieldObjectScriptPointerByFieldObjectId(r3); + script = GetRamScript(gScriptLastTalked, script); + return script; +} + +static u8 *TryGetInvisibleMapObjectScript(struct MapPosition *position, u8 unused, u8 c) +{ + struct BgEvent *bgEvent = FindInvisibleMapObjectByPosition(&gMapHeader, position->x - 7, position->y - 7, position->height); + + if (bgEvent == NULL) + return NULL; + if (bgEvent->bgUnion.script == NULL) + return gUnknown_081C6C02; + switch (bgEvent->kind) + { + case 0: + default: + return bgEvent->bgUnion.script; + case 1: + if (c != 2) + return NULL; + break; + case 2: + if (c != 1) + return NULL; + break; + case 3: + if (c != 4) + return NULL; + break; + case 4: + if (c != 3) + return NULL; + break; + case 5: + case 6: + case 7: + gSpecialVar_0x8004 = ((u32)bgEvent->bgUnion.script >> 16) + 0x258; + gSpecialVar_0x8005 = (u32)bgEvent->bgUnion.script; + if (FlagGet(gSpecialVar_0x8004) == TRUE) + return NULL; + return HiddenItemScript; + case 8: + if (c == 2) + { + gSpecialVar_0x8004 = (u32)bgEvent->bgUnion.script; + if (sub_80BC050()) + return gUnknown_081A2C51; + } + return NULL; + } + return bgEvent->bgUnion.script; +} + +static u8 *sub_8068500(struct MapPosition *position, u8 b, u8 c) +{ + s8 height; + + if (MetatileBehavior_IsPlayerFacingTVScreen(b, c) == TRUE) + return Event_TV; + if (MetatileBehavior_IsPC(b) == TRUE) + return gUnknown_081A0009; + if (MetatileBehavior_IsClosedSootopolisGymDoor(b) == TRUE) + return ClosedSootopolisGymDoorScript; + if (is_tile_x84(b) == TRUE) + return gUnknown_081A4363; + if (MetatileBehavior_IsPokeblockFeeder(b) == TRUE) + return gUnknown_081C346A; + if (MetatileBehavior_IsTrickHousePuzzleDoor(b) == TRUE) + return gUnknown_081616E1; + if (MetatileBehavior_IsRegionMap(b) == TRUE) + return Event_WorldMap; + if (sub_805791C(b) == TRUE) + return Event_RunningShoesManual; + if (MetatileBehavior_IsPictureBookShelf(b) == TRUE) + return PictureBookShelfScript; + if (MetatileBehavior_IsBookShelf(b) == TRUE) + return BookshelfScript; + if (MetatileBehavior_IsPokeCenterBookShelf(b) == TRUE) + return PokemonCenterBookshelfScript; + if (MetatileBehavior_IsVase(b) == TRUE) + return VaseScript; + if (MetatileBehavior_IsTrashCan(b) == TRUE) + return TrashCanScript; + if (MetatileBehavior_IsShopShelf(b) == TRUE) + return ShopShelfScript; + if (MetatileBehavior_IsBlueprint(b) == TRUE) + return BlueprintScript; + height = position->height; + if (height == MapGridGetZCoordAt(position->x, position->y)) + { + if (MetatileBehavior_IsSecretBasePC(b) == TRUE) + return gUnknown_0815F36C; + if (sub_805724C(b) == TRUE) + return gUnknown_0815F43A; + if (sub_8057364(b) == TRUE) + return gUnknown_0815F523; + if (sub_8057378(b) == TRUE) + return gUnknown_0815F528; + } + return NULL; +} + +static u8 *TryGetFieldMoveScript(struct MapPosition *unused1, u8 b, u8 unused2) +{ + if (FlagGet(BADGE05_GET) == TRUE && PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE) + return UseSurfScript; + if (MetatileBehavior_IsWaterfall(b) == TRUE) + { + if (FlagGet(BADGE08_GET) == TRUE && IsPlayerSurfingNorth() == TRUE) + return UseWaterfallScript; + else + return CannotUseWaterfallScript; + } + return NULL; +} + +static bool32 sub_8068770(void) +{ + if (FlagGet(BADGE07_GET) && sub_8068F18() == 2) + { + ScriptContext1_SetupScript(UseDiveScript); + return TRUE; + } + return FALSE; +} + +static bool32 sub_80687A4(void) +{ + if (FlagGet(BADGE07_GET) && gMapHeader.mapType == 5 && sub_8068F18() == 1) + { + ScriptContext1_SetupScript(UnderwaterUseDiveScript); + return TRUE; + } + return FALSE; +} + +static bool8 sub_80687E4(struct MapPosition *position, u16 b, u16 unused) +{ + if (mapheader_trigger_activate_at__run_now(position) == TRUE) + return TRUE; + if (sub_8068A64(position, b) == TRUE) + return TRUE; + if (sub_8068870(b) == TRUE) + return TRUE; + if (sub_8068894() == TRUE) + return TRUE; + if (UpdateRepelCounter() == TRUE) + return TRUE; + return FALSE; +} + +bool8 mapheader_trigger_activate_at__run_now(struct MapPosition *position) +{ + u8 *script = mapheader_trigger_activate_at(&gMapHeader, position->x - 7, position->y - 7, position->height); + + if (script == NULL) + return FALSE; + ScriptContext1_SetupScript(script); + return TRUE; +} + +//can be u8, u16, or u32 +bool8 sub_8068870(u16 a) +{ + if (MetatileBehavior_IsCrackedFloorHole(a)) + { + ScriptContext1_SetupScript(GraniteCave_B1F_EventScript_1C6BC5); + return TRUE; + } + return FALSE; +} + +bool8 sub_8068894(void) +{ + sub_8082B78(); + happiness_algorithm_step(); + if (overworld_poison_step() == TRUE) + { + ScriptContext1_SetupScript(gUnknown_081A14B8); + return TRUE; + } + if (sub_80422A0()) + { + IncrementGameStat(13); + ScriptContext1_SetupScript(Event_EggHatch); + return TRUE; + } + if (SafariZoneTakeStep() == TRUE) + return TRUE; + if (CountSSTidalStep(1) == TRUE) + { + ScriptContext1_SetupScript(gUnknown_0815FD0D); + return TRUE; + } + return FALSE; +} + +void unref_sub_80688F8(void) +{ + VarSet(VAR_HAPPINESS_STEP_COUNTER, 0); +} + +static void happiness_algorithm_step(void) +{ + u16 *ptr = GetVarPointer(VAR_HAPPINESS_STEP_COUNTER); + int i; + + (*ptr)++; + (*ptr) %= 128; + if (*ptr == 0) + { + struct Pokemon *pkmn = gPlayerParty; + + for (i = 5; i >= 0; i--) + { + AdjustFriendship(pkmn, 5); + pkmn++; + } + } +} + +void overworld_poison_timer_set(void) +{ + VarSet(VAR_POISON_STEP_COUNTER, 0); +} + +static bool8 overworld_poison_step(void) +{ + u16 *ptr; + + if (gMapHeader.mapType != 9) + { + ptr = GetVarPointer(VAR_POISON_STEP_COUNTER); + (*ptr)++; + (*ptr) %= 4; + if (*ptr == 0) + { + switch (overworld_poison()) + { + case 0: + return FALSE; + case 1: + return FALSE; + case 2: + return TRUE; + } + } + } + return FALSE; +} + +void prev_quest_postbuffer_cursor_backup_reset(void) +{ + gUnknown_0202E8C0 = 0; +} + +static bool8 is_it_battle_time_3(u16 a) +{ + if (gUnknown_0202E8C0 < 4) + { + gUnknown_0202E8C0++; + gUnknown_0202E8C2 = a; + return FALSE; + } + if (StandardWildEncounter(a, gUnknown_0202E8C2) == TRUE) + { + gUnknown_0202E8C0 = 0; + gUnknown_0202E8C2 = a; + return TRUE; + } + else + { + gUnknown_0202E8C2 = a; + return FALSE; + } +} + +static bool8 mapheader_run_first_tag2_script_list_match_conditionally(struct MapPosition *position, u16 b, u8 c) +{ + s8 r6 = map_warp_check_packed(&gMapHeader, position); + + if (is_non_stair_warp_tile(b, c) == TRUE && r6 != -1) + { + walkrun_find_lowest_active_bit_in_bitfield(); + sub_8068C30(&gMapHeader, r6, position); + sub_8080E88(); + return TRUE; + } + return FALSE; +} + +bool8 sub_8068A64(struct MapPosition *position, u16 b) +{ + s8 r4 = map_warp_check_packed(&gMapHeader, position); + + if (r4 != -1 && sub_8068B30(b) == TRUE) + { + walkrun_find_lowest_active_bit_in_bitfield(); + sub_8068C30(&gMapHeader, r4, position); + if (MetatileBehavior_IsEscalator(b) == TRUE) + { + sub_8080F2C(b); + return TRUE; + } + if (MetatileBehavior_IsLavaridgeB1FWarp(b) == TRUE) + { + sub_8080F48(); + return TRUE; + } + if (MetatileBehavior_IsLavaridge1FWarp(b) == TRUE) + { + sub_8080F58(); + return TRUE; + } + if (MetatileBehavior_IsAquaHideoutWarp(b) == TRUE) + { + sub_8080F68(); + return TRUE; + } + if (MetatileBehavior_IsMtPyreHole(b) == TRUE) + { + ScriptContext1_SetupScript(gUnknown_081C6BDE); + return TRUE; + } + sub_8080E88(); + return TRUE; + } + return FALSE; +} + +static bool8 sub_8068B30(u16 a) +{ + if (MetatileBehavior_IsWarpDoor(a) != TRUE + && MetatileBehavior_IsLadder(a) != TRUE + && MetatileBehavior_IsEscalator(a) != TRUE + && MetatileBehavior_IsNonAnimDoor(a) != TRUE + && MetatileBehavior_IsLavaridgeB1FWarp(a) != TRUE + && MetatileBehavior_IsLavaridge1FWarp(a) != TRUE + && MetatileBehavior_IsAquaHideoutWarp(a) != TRUE + && MetatileBehavior_IsMtPyreHole(a) != TRUE) + return FALSE; + return TRUE; +} + +static bool8 is_non_stair_warp_tile(u16 a, u8 b) +{ + switch (b) + { + case 2: + return MetatileBehavior_IsNorthArrowWarp(a); + case 1: + return MetatileBehavior_IsSouthArrowWarp(a); + case 3: + return MetatileBehavior_IsWestArrowWarp(a); + case 4: + return MetatileBehavior_IsEastArrowWarp(a); + } + return FALSE; +} + +static s8 map_warp_check_packed(struct MapHeader *mapHeader, struct MapPosition *position) +{ + return map_warp_check(mapHeader, position->x - 7, position->y - 7, position->height); +} + +static void sub_8068C30(struct MapHeader *unused, s8 b, struct MapPosition *position) +{ + struct WarpEvent *warpEvent = &gMapHeader.events->warps[b]; + + if (warpEvent->mapNum == 0x7F) + { + copy_saved_warp2_bank_and_enter_x_to_warp1(warpEvent->mapGroup); + } + else + { + struct MapHeader *mapHeader; + + 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); + if (mapHeader->events->warps[warpEvent->mapGroup].mapNum == 0x7F) + saved_warp2_set(mapHeader->events->warps[b].mapGroup, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, b); + } +} + +static bool8 map_warp_consider_2_to_inside(struct MapPosition *position, u16 b, u8 c) +{ + s8 r4; + + if (c == 2) + { + if (sub_80571C0(b) == TRUE) + { + sub_80BC038(position, gMapHeader.events); + return TRUE; + } + if (MetatileBehavior_IsWarpDoor(b) == TRUE) + { + r4 = map_warp_check_packed(&gMapHeader, position); + if (r4 != -1 && sub_8068B30(b) == TRUE) + { + walkrun_find_lowest_active_bit_in_bitfield(); + sub_8068C30(&gMapHeader, r4, position); + sub_8080EF0(); + return TRUE; + } + } + } + return FALSE; +} + +static s8 map_warp_check(struct MapHeader *mapHeader, u16 b, u16 c, u8 d) +{ + s32 i; + struct WarpEvent *warpEvent = mapHeader->events->warps; + u8 warpCount = mapHeader->events->warpCount; + + for (i = 0; i < warpCount; i++, warpEvent++) + { + if ((u16)warpEvent->x == b && (u16)warpEvent->y == c) + { + if ((u8)warpEvent->warpId == d || (u8)warpEvent->warpId == 0) + return i; + } + } + return -1; +} + +static u8 *trigger_activate(struct CoordEvent *coordEvent) +{ + if (coordEvent != NULL) + { + if (coordEvent->script == NULL) + { + DoCoordEventWeather(coordEvent->trigger); + return NULL; + } + if (coordEvent->trigger == 0) + { + ScriptContext2_RunNewScript(coordEvent->script); + return NULL; + } + if (VarGet(coordEvent->trigger) == (u8)coordEvent->index) + return coordEvent->script; + } + return NULL; +} + +static u8 *mapheader_trigger_activate_at(struct MapHeader *mapHeader, u16 b, u16 c, u8 d) +{ + s32 i; + struct CoordEvent *coordEvents = mapHeader->events->coordEvents; + u8 coordEventCount = mapHeader->events->coordEventCount; + u8 *script; + + for (i = 0; i < coordEventCount; i++) + { + if ((u16)coordEvents[i].x == b && (u16)coordEvents[i].y == c) + { + if (coordEvents[i].unk4 == d || coordEvents[i].unk4 == 0) + { + script = trigger_activate(&coordEvents[i]); + if (script != NULL) + return script; + } + } + } + return NULL; +} + +u8 *sub_8068E24(struct MapPosition *position) +{ + return mapheader_trigger_activate_at(&gMapHeader, position->x - 7, position->y - 7, position->height); +} + +static struct BgEvent *FindInvisibleMapObjectByPosition(struct MapHeader *mapHeader, u16 b, u16 c, u8 d) +{ + u8 i; + struct BgEvent *bgEvents = mapHeader->events->bgEvents; + u8 bgEventCount = mapHeader->events->bgEventCount; + + for (i = 0; i < bgEventCount; i++) + { + if ((u16)bgEvents[i].x == b && (u16)bgEvents[i].y == c) + { + if (bgEvents[i].unk4 == d || bgEvents[i].unk4 == 0) + return &bgEvents[i]; + } + } + return NULL; +} + +int dive_warp(struct MapPosition *position, u16 b) +{ + if (gMapHeader.mapType == 5 && sub_805750C(b) == 0) + { + if (sub_80538B0(position->x - 7, position->y - 7)) + { + walkrun_find_lowest_active_bit_in_bitfield(); + sp13E_warp_to_last_warp(); + PlaySE(SE_W291); + return TRUE; + } + } + else if (sub_80574EC(b) == TRUE) + { + if (sub_80538D0(position->x - 7, position->y - 7)) + { + walkrun_find_lowest_active_bit_in_bitfield(); + sp13E_warp_to_last_warp(); + PlaySE(SE_W291); + return TRUE; + } + } + return FALSE; +} + +u8 sub_8068F18(void) +{ + s16 x, y; + u8 r5; + + PlayerGetDestCoords(&x, &y); + r5 = MapGridGetMetatileBehaviorAt(x, y); + if (gMapHeader.mapType == 5 && sub_805750C(r5) == 0) + { + if (sub_80538B0(x - 7, y - 7) == TRUE) + return 1; + } + else if (sub_80574EC(r5) == TRUE) + { + if (sub_80538D0(x - 7, y - 7) == TRUE) + return 2; + } + return 0; +} + +u8 *GetFieldObjectScriptPointerForComparison(void) +{ + u8 r4; + struct MapPosition position; + + r4 = player_get_direction_upper_nybble(); + player_get_next_pos_and_height(&position); + return sub_8068364(&position, MapGridGetMetatileBehaviorAt(position.x, position.y), r4); +} + +int SetCableClubWarp(void) +{ + struct MapPosition position; + + player_get_direction_upper_nybble(); //unnecessary + player_get_pos_to_and_height(&position); + MapGridGetMetatileBehaviorAt(position.x, position.y); //unnecessary + sub_8068C30(&gMapHeader, map_warp_check_packed(&gMapHeader, &position), &position); + return 0; +} diff --git a/src/field/field_door.c b/src/field/field_door.c new file mode 100644 index 000000000..791ed4c94 --- /dev/null +++ b/src/field/field_door.c @@ -0,0 +1,221 @@ +#include "global.h" +#include "field_door.h" +#include "field_camera.h" +#include "fieldmap.h" +#include "metatile_behavior.h" +#include "task.h" + +extern struct DoorAnimFrame gDoorOpenAnimFrames[]; +extern struct DoorAnimFrame gDoorCloseAnimFrames[]; +extern struct DoorGraphics gDoorAnimGraphicsTable[]; + +static void CopyDoorTilesToVram(void *src) +{ + CpuFastSet(src, (void *)(VRAM + 0x7F00), 0x40); +} + +static void door_build_blockdef(u16 *a, u16 b, u8 *c) +{ + int i; + u16 unk; + + for (i = 0; i < 4; i++) + { + unk = *(c++) << 12; + a[i] = unk | (b + i); + } + for (; i < 8; i++) + { + unk = *(c++) << 12; + a[i] = unk; + } +} + +static void DrawCurrentDoorAnimFrame(u32 x, u32 y, u8 *c) +{ + u16 arr[8]; + + door_build_blockdef(arr, 0x3F8, c); + DrawDoorMetatileAt(x, y - 1, arr); + door_build_blockdef(arr, 0x3FC, c + 4); + DrawDoorMetatileAt(x, y, arr); +} + +static void DrawClosedDoorTiles(u32 x, u32 y) +{ + CurrentMapDrawMetatileAt(x, y - 1); + CurrentMapDrawMetatileAt(x, y); +} + +static void DrawDoor(struct DoorGraphics *gfx, struct DoorAnimFrame *frame, u32 x, u32 y) +{ + if (frame->offset == 0xFFFF) + DrawClosedDoorTiles(x, y); + else + { + CopyDoorTilesToVram(gfx->tiles + frame->offset); + DrawCurrentDoorAnimFrame(x, y, gfx->palette); + } +} + +enum +{ + TD_FRAMELIST = 0, + TD_GFX = 2, + TD_FRAME = 4, + TD_COUNTER, + TD_X, + TD_Y +}; + +static bool32 sub_8058464(struct DoorGraphics *gfx, struct DoorAnimFrame *frames, s16 *taskData) +{ + if (taskData[TD_COUNTER] == 0) + DrawDoor(gfx, &frames[taskData[TD_FRAME]], taskData[TD_X], taskData[TD_Y]); + if (taskData[TD_COUNTER] == frames[taskData[TD_FRAME]].time) + { + taskData[TD_COUNTER] = 0; + taskData[TD_FRAME]++; + if (frames[taskData[TD_FRAME]].time == 0) + return FALSE; + else + return TRUE; + } + taskData[TD_COUNTER]++; + return TRUE; +} + +static void Task_AnimateDoor(u8 taskId) +{ + u16 *taskData = gTasks[taskId].data; + struct DoorAnimFrame *frames = (struct DoorAnimFrame *)(taskData[TD_FRAMELIST] << 16 | taskData[TD_FRAMELIST + 1]); + struct DoorGraphics *gfx = (struct DoorGraphics *)(taskData[TD_GFX] << 16 | taskData[TD_GFX + 1]); + + if (sub_8058464(gfx, frames, taskData) == FALSE) + DestroyTask(taskId); +} + +static struct DoorAnimFrame *GetLastDoorFrame(struct DoorAnimFrame *frame, void *unused) +{ + while (frame->time != 0) + frame++; + return frame - 1; +} + +static struct DoorGraphics *GetDoorGraphics(struct DoorGraphics *gfx, u16 metatileNum) +{ + while (gfx->tiles != NULL) + { + if (gfx->metatileNum == metatileNum) + return gfx; + gfx++; + } + return NULL; +} + +static s8 StartDoorAnimationTask(struct DoorGraphics *gfx, struct DoorAnimFrame *frames, u32 x, u32 y) +{ + if (FuncIsActiveTask(Task_AnimateDoor) == TRUE) + return -1; + else + { + u8 taskId = CreateTask(Task_AnimateDoor, 0x50); + s16 *taskData = gTasks[taskId].data; + + taskData[TD_X] = x; + taskData[TD_Y] = y; + + taskData[TD_FRAMELIST + 1] = (u32)frames; + taskData[TD_FRAMELIST] = (u32)frames >> 16; + + taskData[TD_GFX + 1] = (u32)gfx; + taskData[TD_GFX] = (u32)gfx >> 16; + + return taskId; + } +} + +static void DrawClosedDoor(struct DoorGraphics *unused, u32 x, u32 y) +{ + DrawClosedDoorTiles(x, y); +} + +static void DrawOpenedDoor(struct DoorGraphics *gfx, u32 x, u32 y) +{ + gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y)); + if (gfx != NULL) + DrawDoor(gfx, GetLastDoorFrame(gDoorOpenAnimFrames, gDoorOpenAnimFrames), x, y); +} + +static s8 StartDoorOpenAnimation(struct DoorGraphics *gfx, u32 x, u32 y) +{ + gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y)); + if (gfx == NULL) + return -1; + else + return StartDoorAnimationTask(gfx, gDoorOpenAnimFrames, x, y); +} + +static s8 StartDoorCloseAnimation(struct DoorGraphics *gfx, u32 x, u32 y) +{ + gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y)); + if (gfx == NULL) + return -1; + else + return StartDoorAnimationTask(gfx, gDoorCloseAnimFrames, x, y); +} + +static s8 cur_mapdata_get_door_x2_at(struct DoorGraphics *gfx, u32 x, u32 y) +{ + gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y)); + if (gfx == NULL) + return -1; + else + return gfx->unk2; +} + +void unref_sub_805869C(u32 x, u32 y) +{ + StartDoorOpenAnimation(gDoorAnimGraphicsTable, x, y); +} + +void FieldSetDoorOpened(u32 x, u32 y) +{ + if (MetatileBehavior_IsDoor(MapGridGetMetatileBehaviorAt(x, y))) + DrawOpenedDoor(gDoorAnimGraphicsTable, x, y); +} + +void FieldSetDoorClosed(u32 x, u32 y) +{ + if (MetatileBehavior_IsDoor(MapGridGetMetatileBehaviorAt(x, y))) + DrawClosedDoor(gDoorAnimGraphicsTable, x, y); +} + +s8 FieldAnimateDoorClose(u32 x, u32 y) +{ + if (!MetatileBehavior_IsDoor(MapGridGetMetatileBehaviorAt(x, y))) + return -1; + else + return StartDoorCloseAnimation(gDoorAnimGraphicsTable, x, y); +} + +s8 FieldAnimateDoorOpen(u32 x, u32 y) +{ + if (!MetatileBehavior_IsDoor(MapGridGetMetatileBehaviorAt(x, y))) + return -1; + else + return StartDoorOpenAnimation(gDoorAnimGraphicsTable, x, y); +} + +bool8 FieldIsDoorAnimationRunning(void) +{ + return FuncIsActiveTask(Task_AnimateDoor); +} + +u32 sub_8058790(u32 x, u32 y) +{ + if (cur_mapdata_get_door_x2_at(gDoorAnimGraphicsTable, x, y) == 0) + return 8; + else + return 18; +} diff --git a/src/field/field_effect.c b/src/field/field_effect.c new file mode 100644 index 000000000..3632d7053 --- /dev/null +++ b/src/field/field_effect.c @@ -0,0 +1,3406 @@ +#include "global.h" +#include "data2.h" +#include "script.h" +#include "trig.h" +#include "main.h" +#include "field_weather.h" +#include "decompress.h" +#include "sprite.h" +#include "menu.h" +#include "palette.h" +#include "text.h" +#include "rom4.h" +#include "task.h" +#include "sound.h" +#include "songs.h" +#include "decoration.h" +#include "field_player_avatar.h" +#include "field_map_obj_helpers.h" +#include "field_map_obj.h" +#include "metatile_behavior.h" +#include "field_camera.h" +#include "field_effect.h" +#include "field_fadetransition.h" +#include "fieldmap.h" +#include "field_map_obj.h" +#include "util.h" +#include "field_effect_helpers.h" + +#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))} + +EWRAM_DATA u32 gUnknown_0202FF84[8] = {0}; + +const u32 gSpriteImage_839DC14[] = INCBIN_U32("graphics/birch_speech/birch.4bpp"); +const u16 gBirchPalette[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal"); +const u32 gSpriteImage_839E434[] = INCBIN_U32("graphics/misc/pokeball_glow.4bpp"); +const u16 gFieldEffectObjectPalette4[16] = INCBIN_U16("graphics/field_effect_objects/palettes/04.gbapal"); +const u32 gSpriteImage_839E474[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp"); +const u32 gSpriteImage_839E534[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp"); +const u32 gSpriteImage_839E5F4[] = INCBIN_U32("graphics/misc/big_hof_monitor.4bpp"); +const u32 gSpriteImage_839E7F4[] = INCBIN_U32("graphics/misc/small_hof_monitor.4bpp"); +const u16 gFieldEffectObjectPalette5[16] = INCBIN_U16("graphics/field_effect_objects/palettes/05.gbapal"); + +// Graphics for the lights streaking past your Pokemon when it uses a field move. +const u32 gFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/field_move_streaks.4bpp"); +const u16 gFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/field_move_streaks.gbapal"); +const u16 gFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/field_move_streaks_map.bin"); + +// The following light streaks effect is used when the map is dark (e.g. a cave). +const u32 gDarknessFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/darkness_field_move_streaks.4bpp"); +const u16 gDarknessFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/darkness_field_move_streaks.gbapal"); +const u16 gDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/darkness_field_move_streaks_map.bin"); + +bool8 (*const gFieldEffectScriptFuncs[])(u8 **, u32 *) = { + FieldEffectCmd_loadtiles, + FieldEffectCmd_loadfadedpal, + FieldEffectCmd_loadpal, + FieldEffectCmd_callnative, + FieldEffectCmd_end, + FieldEffectCmd_loadgfx_callnative, + FieldEffectCmd_loadtiles_callnative, + FieldEffectCmd_loadfadedpal_callnative, +}; + +const struct OamData gOamData_839F0F4 = {.size = 3}; +const struct OamData gOamData_839F0FC = {.size = 0}; +const struct OamData gOamData_839F104 = {.size = 1}; + +const struct SpriteFrameImage gSpriteImageTable_839F10C[] = { + obj_frame_tiles(gSpriteImage_839DC14) +}; +const struct SpritePalette gUnknown_0839F114 = {.data = gBirchPalette, .tag = 0x1006}; + +const union AnimCmd gSpriteAnim_839F11C[] = { + ANIMCMD_FRAME(.imageValue = 0, .duration = 1), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_839F124[] = { + gSpriteAnim_839F11C +}; + +const struct SpriteTemplate gSpriteTemplate_839F128 = { + .tileTag = 0xffff, + .paletteTag = 4102, + .oam = &gOamData_839F0F4, + .anims = (const union AnimCmd *const *)&gSpriteAnimTable_839F124, + .images = gSpriteImageTable_839F10C, + .affineAnims = (const union AffineAnimCmd *const *)&gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct SpritePalette gFieldEffectObjectPaletteInfo4 = {.data = gFieldEffectObjectPalette4, .tag = 0x1007}; +const struct SpritePalette gFieldEffectObjectPaletteInfo5 = {.data = gFieldEffectObjectPalette5, .tag = 0x1010}; +const struct OamData gOamData_839F150 = { + .shape = 1, + .size = 2 +}; + +const struct SpriteFrameImage gSpriteImageTable_839F158[] = { + obj_frame_tiles(gSpriteImage_839E434) +}; + +const struct SpriteFrameImage gSpriteImageTable_839F160[] = { + obj_frame_tiles(gSpriteImage_839E474), + obj_frame_tiles(gSpriteImage_839E534) +}; + +const struct SpriteFrameImage gSpriteImageTable_839F170[] = { + obj_frame_tiles(gSpriteImage_839E5F4) +}; + +const struct SpriteFrameImage gSpriteImageTable_839F178[] = { + {.data = (u8 *)gSpriteImage_839E7F4, .size = 0x200} // the macro breaks down here +}; + +const struct Subsprite Unknown_39F180[] = { + {.x = -12, .y = -8, .priority = 2, .tileOffset = 0, .shape = 1, .size = 0}, + {.x = 4, .y = -8, .priority = 2, .tileOffset = 2, .shape = 0, .size = 0}, + {.x = -12, .y = 0, .priority = 2, .tileOffset = 3, .shape = 1, .size = 0}, + {.x = 4, .y = 0, .priority = 2, .tileOffset = 5, .shape = 0, .size = 0} +}; + +const struct SubspriteTable gUnknown_0839F1A0 = subsprite_table(Unknown_39F180); + +const struct Subsprite Unknown_39F1A8[] = { + {.x = -32, .y = -8, .priority = 2, .tileOffset = 0, .shape = 1, .size = 1}, + {.x = 0, .y = -8, .priority = 2, .tileOffset = 4, .shape = 1, .size = 1}, + {.x = -32, .y = 0, .priority = 2, .tileOffset = 8, .shape = 1, .size = 1}, + {.x = 0, .y = 0, .priority = 2, .tileOffset = 12, .shape = 1, .size = 1} +}; + +const struct SubspriteTable gUnknown_0839F1C8 = subsprite_table(Unknown_39F1A8); + +const union AnimCmd gSpriteAnim_839F1D0[] = { + ANIMCMD_FRAME(.imageValue = 0, .duration = 1), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gSpriteAnim_839F1D8[] = { + ANIMCMD_FRAME(.imageValue = 0, .duration = 16), + ANIMCMD_FRAME(.imageValue = 1, .duration = 16), + ANIMCMD_FRAME(.imageValue = 0, .duration = 16), + ANIMCMD_FRAME(.imageValue = 1, .duration = 16), + ANIMCMD_FRAME(.imageValue = 0, .duration = 16), + ANIMCMD_FRAME(.imageValue = 1, .duration = 16), + ANIMCMD_FRAME(.imageValue = 0, .duration = 16), + ANIMCMD_FRAME(.imageValue = 1, .duration = 16), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_839F1FC[] = { + gSpriteAnim_839F1D0, + gSpriteAnim_839F1D8 +}; + +const union AnimCmd *const gSpriteAnimTable_839F204[] = { + gSpriteAnim_839F1D0 +}; + +const struct SpriteTemplate gSpriteTemplate_839F208 = { + .tileTag = 0xffff, + .paletteTag = 4103, + .oam = &gOamData_839F0FC, + .anims = gSpriteAnimTable_839F1FC, + .images = gSpriteImageTable_839F158, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_PokeballGlow +}; + + +const struct SpriteTemplate gSpriteTemplate_839F220 = { + .tileTag = 0xffff, + .paletteTag = 4100, + .oam = &gOamData_839F104, + .anims = gSpriteAnimTable_839F1FC, + .images = gSpriteImageTable_839F160, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_PokecenterMonitor +}; + + +const struct SpriteTemplate gSpriteTemplate_839F238 = { + .tileTag = 0xffff, + .paletteTag = 4112, + .oam = &gOamData_839F104, + .anims = gSpriteAnimTable_839F204, + .images = gSpriteImageTable_839F170, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HallOfFameMonitor +}; + + +const struct SpriteTemplate gSpriteTemplate_839F250 = { + .tileTag = 0xffff, + .paletteTag = 4112, + .oam = &gOamData_839F150, + .anims = gSpriteAnimTable_839F204, + .images = gSpriteImageTable_839F178, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HallOfFameMonitor +}; + +void (*const gUnknown_0839F268[])(struct Task *) = { + PokecenterHealEffect_0, + PokecenterHealEffect_1, + PokecenterHealEffect_2, + PokecenterHealEffect_3 +}; + +void (*const gUnknown_0839F278[])(struct Task *) = { + HallOfFameRecordEffect_0, + HallOfFameRecordEffect_1, + HallOfFameRecordEffect_2, + HallOfFameRecordEffect_3 +}; + +void (*const gUnknown_0839F288[])(struct Sprite *) = { + PokeballGlowEffect_0, + PokeballGlowEffect_1, + PokeballGlowEffect_2, + PokeballGlowEffect_3, + PokeballGlowEffect_4, + PokeballGlowEffect_5, + PokeballGlowEffect_6, + PokeballGlowEffect_7 +}; + +const struct Coords16 gUnknown_0839F2A8[] = { + {.x = 0, .y = 0}, + {.x = 6, .y = 0}, + {.x = 0, .y = 4}, + {.x = 6, .y = 4}, + {.x = 0, .y = 8}, + {.x = 6, .y = 8} +}; + +const u8 gUnknown_0839F2C0[] = {16, 12, 8, 0}; +const u8 gUnknown_0839F2C4[] = {16, 12, 8, 0}; +const u8 gUnknown_0839F2C8[] = { 0, 0, 0, 0}; + +bool8 (*const gUnknown_0839F2CC[])(struct Task *) = { + sub_80867AC, + sub_8086854, + sub_8086870, + sub_80868E4, + sub_808699C, + sub_80869B8, + sub_80869F8 +}; + +bool8 (*const gUnknown_0839F2E8[])(struct Task *) = { + sub_8086AA0, + sub_8086AC0, + sub_8086B30, + sub_8086B54, + sub_8086B64, + sub_8086B88 +}; + +bool8 (*const gUnknown_0839F300[])(struct Task *) = { + sub_8086CF4, + sub_8086D70, + sub_8086DB0, + sub_8086E10, + sub_8086E50, + sub_8086EB0, + sub_8086ED4 +}; + +bool8 (*const gUnknown_0839F31C[])(struct Task *, struct MapObject *) = { + sub_8086FB0, + waterfall_1_do_anim_probably, + waterfall_2_wait_anim_finish_probably, + sub_8087030, + sub_8087058 +}; + +bool8 (*const gUnknown_0839F330[])(struct Task *) = { + sub_8087124, + dive_2_unknown, + dive_3_unknown +}; + +bool8 (*const gUnknown_0839F33C[])(struct Task *, struct MapObject *, struct Sprite *) = { + sub_808722C, + sub_8087264, + sub_8087298, + sub_80872E4, + sub_80873D8, + sub_80873F4 +}; + +bool8 (*const gUnknown_0839F354[])(struct Task *, struct MapObject *, struct Sprite *) = { + sub_80874CC, + sub_80874FC, + sub_8087548, + sub_808759C +}; + +bool8 (*const gUnknown_0839F364[])(struct Task *, struct MapObject *, struct Sprite *) = { + sub_80876C8, + sub_80876F8, + sub_8087774, + sub_80877AC, + sub_80877D4 +}; + +void (*const gUnknown_0839F378[])(struct Task *) = { + sub_80878F4, + sub_8087914 +}; + +const u8 gUnknown_0839F380[] = {1, 3, 4, 2, 1}; + +void (*const gUnknown_0839F388[])(struct Task *) = { + sub_8087AA4, + sub_8087AC8 +}; + +void (*const gUnknown_0839F390[])(struct Task *) = { + sub_8087BEC, + sub_8087C14, + sub_8087CA4, + sub_8087D78 +}; + +void (*const gUnknown_0839F3A0[])(struct Task *) = { + sub_8087E4C, + sub_8087ED8, + sub_8087FDC +}; + +void (*const gUnknown_0839F3AC[])(struct Task *) = { + sub_8088150, + sub_80881C0, + sub_8088228, + sub_80882B4, + sub_80882E4, + sub_8088338, + sub_8088380 +}; + +void (*const gUnknown_0839F3C8[])(struct Task *) = { + sub_80884AC, + sub_80884E8, + sub_8088554, + sub_80885A8, + sub_80885D8, + sub_808860C, + sub_808862C +}; + +void (*const gUnknown_0839F3E4[])(struct Task *) = { + sub_8088984, + sub_80889E4, + sub_8088A30, + sub_8088A78, + sub_8088AF4 +}; + +void (*const gUnknown_0839F3F8[])(struct Task *) = { + sub_8088CA0, + sub_8088CF8, + sub_8088D3C, + sub_8088D94, + sub_8088DD8, + sub_8088E2C, + sub_8088EB4, + sub_8088F10, + sub_8088F30 +}; + +const union AffineAnimCmd SpriteAffineAnim_839F41C[] = { + AFFINEANIMCMD_FRAME(8, 8, -30, 0), + AFFINEANIMCMD_FRAME(28, 28, 0, 30), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd SpriteAffineAnim_839F434[] = { + AFFINEANIMCMD_FRAME(256, 256, 64, 0), + AFFINEANIMCMD_FRAME(-10, -10, 0, 22), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_0839F44C[] = { + SpriteAffineAnim_839F41C, + SpriteAffineAnim_839F434 +}; + +void (*const gUnknown_0839F454[])(struct Task *) = { + sub_80892A0, + sub_8089354, + sub_80893C0, + sub_8089414, + sub_808948C, + sub_80894C4, + fishE +}; + +const s16 gUnknown_0839F470[] = { + -2, + -4, + -5, + -6, + -7, + -8, + -8, + -8, + -7, + -7, + -6, + -5, + -3, + -2, + 0, + 2, + 4, + 8 +}; + +static u8 sActiveList[32]; + +extern u8 *gFieldEffectScriptPointers[]; + +u32 FieldEffectStart(u8 id) +{ + u8 *script; + u32 val; + + FieldEffectActiveListAdd(id); + + script = gFieldEffectScriptPointers[id]; + + while (gFieldEffectScriptFuncs[*script](&script, &val)) + ; + + return val; +} + +bool8 FieldEffectCmd_loadtiles(u8 **script, u32 *val) +{ + (*script)++; + FieldEffectScript_LoadTiles(script); + return TRUE; +} + +bool8 FieldEffectCmd_loadfadedpal(u8 **script, u32 *val) +{ + (*script)++; + FieldEffectScript_LoadFadedPalette(script); + return TRUE; +} + +bool8 FieldEffectCmd_loadpal(u8 **script, u32 *val) +{ + (*script)++; + FieldEffectScript_LoadPalette(script); + return TRUE; +} + +bool8 FieldEffectCmd_callnative(u8 **script, u32 *val) +{ + (*script)++; + FieldEffectScript_CallNative(script, val); + return TRUE; +} + +bool8 FieldEffectCmd_end(u8 **script, u32 *val) +{ + return FALSE; +} + +bool8 FieldEffectCmd_loadgfx_callnative(u8 **script, u32 *val) +{ + (*script)++; + FieldEffectScript_LoadTiles(script); + FieldEffectScript_LoadFadedPalette(script); + FieldEffectScript_CallNative(script, val); + return TRUE; +} + +bool8 FieldEffectCmd_loadtiles_callnative(u8 **script, u32 *val) +{ + (*script)++; + FieldEffectScript_LoadTiles(script); + FieldEffectScript_CallNative(script, val); + return TRUE; +} + +bool8 FieldEffectCmd_loadfadedpal_callnative(u8 **script, u32 *val) +{ + (*script)++; + FieldEffectScript_LoadFadedPalette(script); + FieldEffectScript_CallNative(script, val); + return TRUE; +} + +u32 FieldEffectScript_ReadWord(u8 **script) +{ + return (*script)[0] + + ((*script)[1] << 8) + + ((*script)[2] << 16) + + ((*script)[3] << 24); +} + +void FieldEffectScript_LoadTiles(u8 **script) +{ + struct SpriteSheet *sheet = (struct SpriteSheet *)FieldEffectScript_ReadWord(script); + if (GetSpriteTileStartByTag(sheet->tag) == 0xFFFF) + LoadSpriteSheet(sheet); + (*script) += 4; +} + +void FieldEffectScript_LoadFadedPalette(u8 **script) +{ + struct SpritePalette *palette = (struct SpritePalette *)FieldEffectScript_ReadWord(script); + LoadSpritePalette(palette); + sub_807D78C(IndexOfSpritePaletteTag(palette->tag)); + (*script) += 4; +} + +void FieldEffectScript_LoadPalette(u8 **script) +{ + struct SpritePalette *palette = (struct SpritePalette *)FieldEffectScript_ReadWord(script); + LoadSpritePalette(palette); + (*script) += 4; +} + +void FieldEffectScript_CallNative(u8 **script, u32 *val) +{ + u32 (*func)(void) = (u32 (*)(void))FieldEffectScript_ReadWord(script); + *val = func(); + (*script) += 4; +} + +void FieldEffectFreeGraphicsResources(struct Sprite *sprite) +{ + u16 sheetTileStart = sprite->sheetTileStart; + u32 paletteNum = sprite->oam.paletteNum; + DestroySprite(sprite); + FieldEffectFreeTilesIfUnused(sheetTileStart); + FieldEffectFreePaletteIfUnused(paletteNum); +} + +void FieldEffectStop(struct Sprite *sprite, u8 id) +{ + FieldEffectFreeGraphicsResources(sprite); + FieldEffectActiveListRemove(id); +} + +void FieldEffectFreeTilesIfUnused(u16 tileStart) +{ + u8 i; + u16 tag = GetSpriteTileTagByTileStart(tileStart); + + if (tag != 0xFFFF) + { + for (i = 0; i < MAX_SPRITES; i++) + if (gSprites[i].inUse && gSprites[i].usingSheet && tileStart == gSprites[i].sheetTileStart) + return; + FreeSpriteTilesByTag(tag); + } +} + +void FieldEffectFreePaletteIfUnused(u8 paletteNum) +{ + u8 i; + u16 tag = GetSpritePaletteTagByPaletteNum(paletteNum); + + if (tag != 0xFFFF) + { + for (i = 0; i < MAX_SPRITES; i++) + if (gSprites[i].inUse && gSprites[i].oam.paletteNum == paletteNum) + return; + FreeSpritePaletteByTag(tag); + } +} + +void FieldEffectActiveListClear(void) +{ + u8 i; + for (i = 0; i < ARRAY_COUNT(sActiveList); i++) + sActiveList[i] = 0xFF; +} + +void FieldEffectActiveListAdd(u8 id) +{ + u8 i; + for (i = 0; i < ARRAY_COUNT(sActiveList); i++) + { + if (sActiveList[i] == 0xFF) + { + sActiveList[i] = id; + return; + } + } +} + +void FieldEffectActiveListRemove(u8 id) +{ + u8 i; + for (i = 0; i < ARRAY_COUNT(sActiveList); i++) + { + if (sActiveList[i] == id) + { + sActiveList[i] = 0xFF; + return; + } + } +} + +bool8 FieldEffectActiveListContains(u8 id) +{ + u8 i; + for (i = 0; i < ARRAY_COUNT(sActiveList); i++) + if (sActiveList[i] == id) + return TRUE; + return FALSE; +} + +u8 CreateTrainerSprite_BirchSpeech(u8 gender, 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; + spriteTemplate.oam = &gOamData_839F0F4; + spriteTemplate.anims = gDummySpriteAnimTable; + spriteTemplate.images = NULL; + spriteTemplate.affineAnims = gDummySpriteAffineAnimTable; + spriteTemplate.callback = SpriteCallbackDummy; + return CreateSprite(&spriteTemplate, x, y, subpriority); +} + +void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) +{ + LZDecompressVram(gTrainerFrontPicTable[gender].data, dest); + LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, 0x20); +} + +u8 CreateBirchSprite(s16 x, s16 y, u8 subpriority) +{ + LoadSpritePalette(&gUnknown_0839F114); + return CreateSprite(&gSpriteTemplate_839F128, x, y, subpriority); +} + +u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) +{ + DecompressPicFromTable_2(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gUnknown_081FAF4C[3], gUnknown_081FAF4C[3], species); + LoadCompressedObjectPalette(&gMonPaletteTable[species]); + GetMonSpriteTemplate_803C56C(species, 3); + gUnknown_02024E8C.paletteTag = gMonPaletteTable[0].tag; + sub_807DE38(IndexOfSpritePaletteTag(gMonPaletteTable[0].tag) + 0x10); + return CreateSprite(&gUnknown_02024E8C, x, y, subpriority); +} + +u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority) +{ + const struct CompressedSpritePalette *spritePalette; + + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)gUnknown_081FAF4C[3] /* this is actually u8* or something, pointing to ewram */, gUnknown_081FAF4C[3], species, g); + spritePalette = sub_80409C8(species, d, g); + LoadCompressedObjectPalette(spritePalette); + GetMonSpriteTemplate_803C56C(species, 3); + gUnknown_02024E8C.paletteTag = spritePalette->tag; + sub_807DE38(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10); + return CreateSprite(&gUnknown_02024E8C, x, y, subpriority); +} + +void FreeResourcesAndDestroySprite(struct Sprite *sprite) +{ + sub_807DE68(); + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); + if (sprite->oam.affineMode != 0) + { + FreeOamMatrix(sprite->oam.matrixNum); + } + DestroySprite(sprite); +} + +#ifdef NONMATCHING +void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) +{ + int curRed; + int curGreen; + int curBlue; + + curRed = gPlttBufferUnfaded[i] & 0x1f; + curGreen = (gPlttBufferUnfaded[i] & (0x1f << 5)) >> 5; + curBlue = (gPlttBufferUnfaded[i] & (0x1f << 10)) >> 10; + curRed += (((0x1f - curRed) * r) >> 4); + curGreen += (((0x1f - curGreen) * g) >> 4); + curBlue += (((0x1f - curBlue) * b) >> 4); + gPlttBufferFaded[i] = RGB(curRed, curGreen, curBlue); +} + +void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) +{ + int curRed; + int curGreen; + int curBlue; + + curRed = gPlttBufferUnfaded[i] & 0x1f; + curGreen = (gPlttBufferUnfaded[i] & (0x1f << 5)) >> 5; + curBlue = (gPlttBufferUnfaded[i] & (0x1f << 10)) >> 10; + curRed -= ((curRed * r) >> 4); + curGreen -= ((curGreen * g) >> 4); + curBlue -= ((curBlue * b) >> 4); + gPlttBufferFaded[i] = RGB(curRed, curGreen, curBlue); +} +#else +__attribute__((naked)) +void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) +{ + asm(".syntax unified\n" + "\tpush {r4-r7,lr}\n" + "\tmov r7, r9\n" + "\tmov r6, r8\n" + "\tpush {r6,r7}\n" + "\tlsls r0, 16\n" + "\tlsls r1, 24\n" + "\tlsrs r1, 24\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tlsls r3, 24\n" + "\tlsrs r3, 24\n" + "\tldr r4, _08085D00 @ =gPlttBufferUnfaded\n" + "\tlsrs r0, 15\n" + "\tadds r4, r0, r4\n" + "\tldrh r4, [r4]\n" + "\tmovs r5, 0x1F\n" + "\tmov r9, r5\n" + "\tmov r8, r4\n" + "\tmov r6, r8\n" + "\tands r6, r5\n" + "\tmov r8, r6\n" + "\tmovs r6, 0xF8\n" + "\tlsls r6, 2\n" + "\tands r6, r4\n" + "\tlsrs r6, 5\n" + "\tmovs r5, 0xF8\n" + "\tlsls r5, 7\n" + "\tands r4, r5\n" + "\tlsrs r4, 10\n" + "\tmov r7, r9\n" + "\tmov r5, r8\n" + "\tsubs r7, r5\n" + "\tmov r12, r7\n" + "\tmov r7, r12\n" + "\tmuls r7, r1\n" + "\tadds r1, r7, 0\n" + "\tasrs r1, 4\n" + "\tadd r8, r1\n" + "\tmov r5, r9\n" + "\tsubs r1, r5, r6\n" + "\tmuls r1, r2\n" + "\tasrs r1, 4\n" + "\tadds r6, r1\n" + "\tsubs r5, r4\n" + "\tmov r9, r5\n" + "\tmov r1, r9\n" + "\tmuls r1, r3\n" + "\tasrs r1, 4\n" + "\tadds r4, r1\n" + "\tmov r7, r8\n" + "\tlsls r7, 16\n" + "\tlsls r6, 21\n" + "\torrs r6, r7\n" + "\tlsls r4, 26\n" + "\torrs r4, r6\n" + "\tlsrs r4, 16\n" + "\tldr r1, _08085D04 @ =gPlttBufferFaded\n" + "\tadds r0, r1\n" + "\tstrh r4, [r0]\n" + "\tpop {r3,r4}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08085D00: .4byte gPlttBufferUnfaded\n" + "_08085D04: .4byte gPlttBufferFaded\n" + ".syntax divided"); +} + +__attribute__((naked)) +void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) +{ + asm(".syntax unified\n" + "\tpush {r4-r6,lr}\n" + "\tmov r6, r8\n" + "\tpush {r6}\n" + "\tlsls r0, 16\n" + "\tlsls r1, 24\n" + "\tlsrs r1, 24\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tlsls r3, 24\n" + "\tlsrs r3, 24\n" + "\tldr r4, _08085D78 @ =gPlttBufferUnfaded\n" + "\tlsrs r0, 15\n" + "\tadds r4, r0, r4\n" + "\tldrh r4, [r4]\n" + "\tmovs r5, 0x1F\n" + "\tmov r8, r5\n" + "\tmov r6, r8\n" + "\tands r6, r4\n" + "\tmov r8, r6\n" + "\tmovs r5, 0xF8\n" + "\tlsls r5, 2\n" + "\tands r5, r4\n" + "\tlsrs r5, 5\n" + "\tmovs r6, 0xF8\n" + "\tlsls r6, 7\n" + "\tands r4, r6\n" + "\tlsrs r4, 10\n" + "\tmov r6, r8\n" + "\tmuls r6, r1\n" + "\tadds r1, r6, 0\n" + "\tasrs r1, 4\n" + "\tmov r6, r8\n" + "\tsubs r6, r1\n" + "\tadds r1, r5, 0\n" + "\tmuls r1, r2\n" + "\tasrs r1, 4\n" + "\tsubs r5, r1\n" + "\tadds r1, r4, 0\n" + "\tmuls r1, r3\n" + "\tasrs r1, 4\n" + "\tsubs r4, r1\n" + "\tlsls r6, 16\n" + "\tlsls r5, 21\n" + "\torrs r5, r6\n" + "\tlsls r4, 26\n" + "\torrs r4, r5\n" + "\tlsrs r4, 16\n" + "\tldr r1, _08085D7C @ =gPlttBufferFaded\n" + "\tadds r0, r1\n" + "\tstrh r4, [r0]\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08085D78: .4byte gPlttBufferUnfaded\n" + "_08085D7C: .4byte gPlttBufferFaded\n" + ".syntax divided"); +} +#endif + +void Task_PokecenterHeal(u8 taskId); +u8 CreatePokeballGlowSprite(s16, s16, s16, u16); +u8 PokecenterHealEffectHelper(s16, s16); + +bool8 FldEff_PokecenterHeal(void) +{ + u8 nPokemon; + struct Task *task; + + nPokemon = CalculatePlayerPartyCount(); + task = &gTasks[CreateTask(Task_PokecenterHeal, 0xff)]; + task->data[1] = nPokemon; + task->data[2] = 0x5d; + task->data[3] = 0x24; + task->data[4] = 0x7c; + task->data[5] = 0x18; + return FALSE; +} + +void Task_PokecenterHeal(u8 taskId) +{ + struct Task *task; + task = &gTasks[taskId]; + gUnknown_0839F268[task->data[0]](task); +} + +void PokecenterHealEffect_0(struct Task *task) +{ + task->data[0]++; + task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 1); + task->data[7] = PokecenterHealEffectHelper(task->data[4], task->data[5]); +} + +void PokecenterHealEffect_1(struct Task *task) +{ + if (gSprites[task->data[6]].data0 > 1) + { + gSprites[task->data[7]].data0++; + task->data[0]++; + } +} + +void PokecenterHealEffect_2(struct Task *task) +{ + if (gSprites[task->data[6]].data0 > 4) + { + task->data[0]++; + } +} + +void PokecenterHealEffect_3(struct Task *task) +{ + if (gSprites[task->data[6]].data0 > 6) + { + DestroySprite(&gSprites[task->data[6]]); + FieldEffectActiveListRemove(FLDEFF_POKECENTER_HEAL); + DestroyTask(FindTaskIdByFunc(Task_PokecenterHeal)); + } +} + +void Task_HallOfFameRecord(u8 taskId); +void HallOfFameRecordEffectHelper(s16, s16, s16, u8); + +bool8 FldEff_HallOfFameRecord(void) +{ + u8 nPokemon; + struct Task *task; + + nPokemon = CalculatePlayerPartyCount(); + task = &gTasks[CreateTask(Task_HallOfFameRecord, 0xff)]; + task->data[1] = nPokemon; + task->data[2] = 0x75; + task->data[3] = 0x34; + return FALSE; +} + +void Task_HallOfFameRecord(u8 taskId) +{ + struct Task *task; + task = &gTasks[taskId]; + gUnknown_0839F278[task->data[0]](task); +} + +void HallOfFameRecordEffect_0(struct Task *task) +{ + u8 taskId; + task->data[0]++; + task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 0); + taskId = FindTaskIdByFunc(Task_HallOfFameRecord); + HallOfFameRecordEffectHelper(taskId, 0x78, 0x18, 0); + HallOfFameRecordEffectHelper(taskId, 0x28, 0x08, 1); + HallOfFameRecordEffectHelper(taskId, 0x48, 0x08, 1); + HallOfFameRecordEffectHelper(taskId, 0xa8, 0x08, 1); + HallOfFameRecordEffectHelper(taskId, 0xc8, 0x08, 1); +} + +void HallOfFameRecordEffect_1(struct Task *task) +{ + if (gSprites[task->data[6]].data0 > 1) + { + task->data[15]++; // was this ever initialized? is this ever used? + task->data[0]++; + } +} + +void HallOfFameRecordEffect_2(struct Task *task) +{ + if (gSprites[task->data[6]].data0 > 4) + { + task->data[0]++; + } +} + +void HallOfFameRecordEffect_3(struct Task *task) +{ + if (gSprites[task->data[6]].data0 > 6) + { + DestroySprite(&gSprites[task->data[6]]); + FieldEffectActiveListRemove(FLDEFF_HALL_OF_FAME_RECORD); + DestroyTask(FindTaskIdByFunc(Task_HallOfFameRecord)); + } +} + +void SpriteCB_PokeballGlowEffect(struct Sprite *); + +u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5) +{ + u8 spriteId; + struct Sprite *sprite; + spriteId = CreateInvisibleSprite(SpriteCB_PokeballGlowEffect); + sprite = &gSprites[spriteId]; + sprite->pos2.x = x; + sprite->pos2.y = y; + sprite->data5 = data5; + sprite->data6 = data6; + sprite->data7 = spriteId; + return spriteId; +} + +void SpriteCB_PokeballGlowEffect(struct Sprite *sprite) +{ + gUnknown_0839F288[sprite->data0](sprite); +} + +void PokeballGlowEffect_0(struct Sprite *sprite) +{ + u8 endSpriteId; + if (sprite->data1 == 0 || (--sprite->data1) == 0) + { + sprite->data1 = 25; + endSpriteId = CreateSpriteAtEnd(&gSpriteTemplate_839F208, gUnknown_0839F2A8[sprite->data2].x + sprite->pos2.x, gUnknown_0839F2A8[sprite->data2].y + sprite->pos2.y, 0); + gSprites[endSpriteId].oam.priority = 2; + gSprites[endSpriteId].data0 = sprite->data7; + sprite->data2++; + sprite->data6--; + PlaySE(SE_BOWA); + } + if (sprite->data6 == 0) + { + sprite->data1 = 32; + sprite->data0++; + } +} + +void PokeballGlowEffect_1(struct Sprite *sprite) +{ + if ((--sprite->data1) == 0) + { + sprite->data0++; + sprite->data1 = 8; + sprite->data2 = 0; + sprite->data3 = 0; + if (sprite->data5) + { + PlayFanfare(BGM_ME_ASA); + } + } +} + +void PokeballGlowEffect_2(struct Sprite *sprite) +{ + u8 phase; + if ((--sprite->data1) == 0) + { + sprite->data1 = 8; + sprite->data2++; + sprite->data2 &= 3; + if (sprite->data2 == 0) + { + sprite->data3++; + } + } + phase = (sprite->data2 + 3) & 3; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); + phase = (sprite->data2 + 2) & 3; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); + phase = (sprite->data2 + 1) & 3; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); + phase = sprite->data2; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); + if (sprite->data3 > 2) + { + sprite->data0++; + sprite->data1 = 8; + sprite->data2 = 0; + } +} + +void PokeballGlowEffect_3(struct Sprite *sprite) +{ + u8 phase; + if ((--sprite->data1) == 0) + { + sprite->data1 = 8; + sprite->data2++; + sprite->data2 &= 3; + if (sprite->data2 == 3) + { + sprite->data0++; + sprite->data1 = 30; + } + } + phase = sprite->data2; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); +} + +void PokeballGlowEffect_4(struct Sprite *sprite) +{ + if ((--sprite->data1) == 0) + { + sprite->data0++; + } +} + +void PokeballGlowEffect_5(struct Sprite *sprite) +{ + sprite->data0++; +} + +void PokeballGlowEffect_6(struct Sprite *sprite) +{ + if (sprite->data5 == 0 || IsFanfareTaskInactive()) + { + sprite->data0++; + } +} + +void PokeballGlowEffect_7(struct Sprite *sprite) +{ +} + +void SpriteCB_PokeballGlow(struct Sprite *sprite) +{ + if (gSprites[sprite->data0].data0 > 4) + { + FieldEffectFreeGraphicsResources(sprite); + } +} + +u8 PokecenterHealEffectHelper(s16 x, s16 y) +{ + u8 spriteIdAtEnd; + struct Sprite *sprite; + spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_839F220, x, y, 0); + sprite = &gSprites[spriteIdAtEnd]; + sprite->oam.priority = 2; + sprite->invisible = 1; + SetSubspriteTables(sprite, &gUnknown_0839F1A0); + return spriteIdAtEnd; +} + +void SpriteCB_PokecenterMonitor(struct Sprite *sprite) +{ + if (sprite->data0 != 0) + { + sprite->data0 = 0; + sprite->invisible = 0; + StartSpriteAnim(sprite, 1); + } + if (sprite->animEnded) + { + FieldEffectFreeGraphicsResources(sprite); + } +} + +void HallOfFameRecordEffectHelper(s16 a0, s16 a1, s16 a2, u8 a3) +{ + u8 spriteIdAtEnd; + if (!a3) + { + spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_839F238, a1, a2, 0); + SetSubspriteTables(&gSprites[spriteIdAtEnd], &gUnknown_0839F1C8); + } else + { + spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_839F250, a1, a2, 0); + } + gSprites[spriteIdAtEnd].invisible = 1; + gSprites[spriteIdAtEnd].data0 = a0; +} + +void SpriteCB_HallOfFameMonitor(struct Sprite *sprite) +{ + if (gTasks[sprite->data0].data[15]) + { + if (sprite->data1 == 0 || (--sprite->data1) == 0) + { + sprite->data1 = 16; + sprite->invisible ^= 1; + } + sprite->data2++; + } + if (sprite->data2 > 127) + { + FieldEffectFreeGraphicsResources(sprite); + } +} + +void mapldr_080842E8(void); +void mapldr_08084390(void); +void task00_8084310(u8); +void c3_080843F8(u8); + +void sub_80865BC(void) +{ + SetMainCallback2(c2_exit_to_overworld_2_switch); + gFieldCallback = mapldr_080842E8; +} + +void mapldr_080842E8(void) +{ + pal_fill_black(); + CreateTask(task00_8084310, 0); + ScriptContext2_Enable(); + FreezeMapObjects(); + gFieldCallback = NULL; +} + +void task00_8084310(u8 taskId) +{ + struct Task *task; + task = &gTasks[taskId]; + if (!task->data[0]) + { + if (!sub_807D770()) + { + return; + } + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + if ((int)gUnknown_0202FF84[0] > 5) + { + gUnknown_0202FF84[0] = 0; + } + FieldEffectStart(FLDEFF_USE_FLY); + task->data[0]++; + } + if (!FieldEffectActiveListContains(FLDEFF_USE_FLY)) + { + flag_var_implications_of_teleport_(); + warp_in(); + SetMainCallback2(CB2_LoadMap); + gFieldCallback = mapldr_08084390; + DestroyTask(taskId); + } +} + +void mapldr_08084390(void) +{ + sub_8053E90(); + pal_fill_black(); + CreateTask(c3_080843F8, 0); + gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; + if (gPlayerAvatar.flags & 0x08) + { + FieldObjectTurn(&gMapObjects[gPlayerAvatar.mapObjectId], DIR_WEST); + } + ScriptContext2_Enable(); + FreezeMapObjects(); + gFieldCallback = NULL; +} + +void c3_080843F8(u8 taskId) +{ + struct Task *task; + task = &gTasks[taskId]; + if (task->data[0] == 0) + { + if (gPaletteFade.active) + { + return; + } + FieldEffectStart(FLDEFF_FLY_IN); + task->data[0]++; + } + if (!FieldEffectActiveListContains(FLDEFF_FLY_IN)) + { + ScriptContext2_Disable(); + UnfreezeMapObjects(); + DestroyTask(taskId); + } +} + +extern void pal_fill_for_map_transition(void); +void sub_8086774(u8); +extern void CameraObjectReset2(void); +extern void CameraObjectReset1(void); + +void sub_8086748(void) +{ + sub_8053E90(); + pal_fill_for_map_transition(); + ScriptContext2_Enable(); + FreezeMapObjects(); + CreateTask(sub_8086774, 0); + gFieldCallback = NULL; +} + +void sub_8086774(u8 taskId) +{ + struct Task *task; + task = &gTasks[taskId]; + while (gUnknown_0839F2CC[task->data[0]](task)); // return code signifies whether to continue blocking here +} + +bool8 sub_80867AC(struct Task *task) // gUnknown_0839F2CC[0] +{ + struct MapObject *playerObject; + struct Sprite *playerSprite; + playerObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + playerSprite = &gSprites[gPlayerAvatar.spriteId]; + CameraObjectReset2(); + gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; + gPlayerAvatar.unk6 = 1; + FieldObjectSetSpecialAnim(playerObject, GetFaceDirectionAnimId(player_get_direction_lower_nybble())); + task->data[4] = playerSprite->subspriteMode; + playerObject->mapobj_bit_26 = 1; + playerSprite->oam.priority = 1; + playerSprite->subspriteMode = 2; + task->data[0]++; + return TRUE; +} + +bool8 sub_8086854(struct Task *task) // gUnknown_0839F2CC[1] +{ + if (sub_807D770()) + { + task->data[0]++; + } + return FALSE; +} + +bool8 sub_8086870(struct Task *task) // gUnknown_0839F2CC[2] +{ + struct Sprite *sprite; + s16 centerToCornerVecY; + sprite = &gSprites[gPlayerAvatar.spriteId]; + centerToCornerVecY = -(sprite->centerToCornerVecY << 1); + sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY); + task->data[1] = 1; + task->data[2] = 0; + gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 0; + PlaySE(SE_RU_HYUU); + task->data[0]++; + return FALSE; +} + +bool8 sub_80868E4(struct Task *task) +{ + struct MapObject *mapObject; + struct Sprite *sprite; + + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.y += task->data[1]; + if (task->data[1] < 8) + { + task->data[2] += task->data[1]; + if (task->data[2] & 0xf) + { + task->data[1] <<= 1; + } + } + if (task->data[3] == 0 && sprite->pos2.y >= -16) + { + task->data[3]++; + mapObject->mapobj_bit_26 = 0; + sprite->subspriteMode = task->data[4]; + mapObject->mapobj_bit_2 = 1; + } + if (sprite->pos2.y >= 0) + { + PlaySE(SE_W070); + mapObject->mapobj_bit_3 = 1; + mapObject->mapobj_bit_5 = 1; + sprite->pos2.y = 0; + task->data[0]++; + } + return FALSE; +} + +bool8 sub_808699C(struct Task *task) +{ + task->data[0]++; + task->data[1] = 4; + task->data[2] = 0; + SetCameraPanningCallback(NULL); + return TRUE; +} + +bool8 sub_80869B8(struct Task *task) +{ + SetCameraPanning(0, task->data[1]); + task->data[1] = -task->data[1]; + task->data[2]++; + if ((task->data[2] & 3) == 0) + { + task->data[1] >>= 1; + } + if (task->data[1] == 0) + { + task->data[0]++; + } + return FALSE; +} + +bool8 sub_80869F8(struct Task *task) +{ + gPlayerAvatar.unk6 = 0; + ScriptContext2_Disable(); + CameraObjectReset1(); + UnfreezeMapObjects(); + InstallCameraPanAheadCallback(); + DestroyTask(FindTaskIdByFunc(sub_8086774)); + return FALSE; +} + +void sub_8086A68(u8); +extern void sub_80B4824(u8); +extern void sub_8053FF8(void); +extern void fade_8080918(void); + +void sub_8086B98(struct Task *); +void sub_8086BE4(struct Task *); +void sub_8086C30(void); +void sub_8086C40(void); +bool8 sub_8054034(void); +void sub_8086C94(void); +void sub_80B483C(void); +void sub_8086CBC(u8); + +void sub_8086A2C(u8 a0, u8 priority) +{ + u8 taskId; + taskId = CreateTask(sub_8086A68, priority); + gTasks[taskId].data[1] = 0; + if (a0 == 0x6a) + { + gTasks[taskId].data[1] = 1; + } +} + +void sub_8086A68(u8 taskId) +{ + struct Task *task; + task = &gTasks[taskId]; + while (gUnknown_0839F2E8[task->data[0]](task)); +} + +bool8 sub_8086AA0(struct Task *task) +{ + FreezeMapObjects(); + CameraObjectReset2(); + sub_80B4824(task->data[1]); + task->data[0]++; + return FALSE; +} + +bool8 sub_8086AC0(struct Task *task) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(player_get_direction_lower_nybble())); + task->data[0]++; + task->data[2] = 0; + task->data[3] = 0; + if ((u8)task->data[1] == 0) + { + task->data[0] = 4; + } + PlaySE(SE_ESUKA); + } + return FALSE; +} + +bool8 sub_8086B30(struct Task *task) +{ + sub_8086B98(task); + if (task->data[2] > 3) + { + sub_8086C30(); + task->data[0]++; + } + return FALSE; +} + +bool8 sub_8086B54(struct Task *task) +{ + sub_8086B98(task); + sub_8086C40(); + return FALSE; +} + +bool8 sub_8086B64(struct Task *task) +{ + sub_8086BE4(task); + if (task->data[2] > 3) + { + sub_8086C30(); + task->data[0]++; + } + return FALSE; +} + +bool8 sub_8086B88(struct Task *task) +{ + sub_8086BE4(task); + sub_8086C40(); + return FALSE; +} + +void sub_8086B98(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x84, task->data[2]); + sprite->pos2.y = Sin(0x94, task->data[2]); + task->data[3]++; + if (task->data[3] & 1) + { + task->data[2]++; + } +} + +void sub_8086BE4(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x7c, task->data[2]); + sprite->pos2.y = Sin(0x76, task->data[2]); + task->data[3]++; + if (task->data[3] & 1) + { + task->data[2]++; + } +} + +void sub_8086C30(void) +{ + sub_8053FF8(); + fade_8080918(); +} + +void sub_8086C40(void) +{ + if (!gPaletteFade.active && sub_8054034() == TRUE) + { + sub_80B483C(); + warp_in(); + gFieldCallback = sub_8086C94; + SetMainCallback2(CB2_LoadMap); + DestroyTask(FindTaskIdByFunc(sub_8086A68)); + } +} + +void sub_8086C94(void) +{ + sub_8053E90(); + pal_fill_for_map_transition(); + ScriptContext2_Enable(); + CreateTask(sub_8086CBC, 0); + gFieldCallback = NULL; +} + +void sub_8086CBC(u8 taskId) +{ + struct Task *task; + task = &gTasks[taskId]; + while (gUnknown_0839F300[task->data[0]](task)); +} + +bool8 sub_8086CF4(struct Task *task) +{ + struct MapObject *mapObject; + s16 x; + s16 y; + u8 behavior; + CameraObjectReset2(); + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(DIR_EAST)); + PlayerGetDestCoords(&x, &y); + behavior = MapGridGetMetatileBehaviorAt(x, y); + task->data[0]++; + task->data[1] = 16; + if (behavior == 0x6b) + { + behavior = 1; + task->data[0] = 3; + } else + { + behavior = 0; + } + sub_80B4824(behavior); + return TRUE; +} + +bool8 sub_8086D70(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x84, task->data[1]); + sprite->pos2.y = Sin(0x94, task->data[1]); + task->data[0]++; + return FALSE; +} + +bool8 sub_8086DB0(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x84, task->data[1]); + sprite->pos2.y = Sin(0x94, task->data[1]); + task->data[2]++; + if (task->data[2] & 1) + { + task->data[1]--; + } + if (task->data[1] == 0) + { + sprite->pos2.x = 0; + sprite->pos2.y = 0; + task->data[0] = 5; + } + return FALSE; +} + +bool8 sub_8086E10(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x7c, task->data[1]); + sprite->pos2.y = Sin(0x76, task->data[1]); + task->data[0]++; + return FALSE; +} + +bool8 sub_8086E50(struct Task *task) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = Cos(0x7c, task->data[1]); + sprite->pos2.y = Sin(0x76, task->data[1]); + task->data[2]++; + if (task->data[2] & 1) + { + task->data[1]--; + } + if (task->data[1] == 0) + { + sprite->pos2.x = 0; + sprite->pos2.y = 0; + task->data[0]++; + } + return FALSE; +} + +extern bool8 sub_80B4850(void); + +bool8 sub_8086EB0(struct Task *task) +{ + if (sub_80B4850()) + { + return FALSE; + } + sub_80B483C(); + task->data[0]++; + return TRUE; +} + +bool8 sub_8086ED4(struct Task *task) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + CameraObjectReset1(); + ScriptContext2_Disable(); + FieldObjectSetSpecialAnim(mapObject, GetGoSpeed0AnimId(DIR_EAST)); + DestroyTask(FindTaskIdByFunc(sub_8086CBC)); + } + return FALSE; +} + +void sub_8086F64(u8); + +bool8 FldEff_UseWaterfall(void) +{ + u8 taskId; + taskId = CreateTask(sub_8086F64, 0xff); + gTasks[taskId].data[1] = gUnknown_0202FF84[0]; + sub_8086F64(taskId); + return FALSE; +} + +void sub_8086F64(u8 taskId) +{ + while (gUnknown_0839F31C[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId])); +} + +bool8 sub_8086FB0(struct Task *task, struct MapObject *mapObject) +{ + ScriptContext2_Enable(); + gPlayerAvatar.unk6 = 1; + task->data[0]++; + return FALSE; +} + +bool8 waterfall_1_do_anim_probably(struct Task *task, struct MapObject *mapObject) +{ + ScriptContext2_Enable(); + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject)) + { + FieldObjectClearAnimIfSpecialAnimFinished(mapObject); + gUnknown_0202FF84[0] = task->data[1]; + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + task->data[0]++; + } + return FALSE; +} + +bool8 waterfall_2_wait_anim_finish_probably(struct Task *task, struct MapObject *mapObject) +{ + if (FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) + { + return FALSE; + } + task->data[0]++; + return TRUE; +} + +bool8 sub_8087030(struct Task *task, struct MapObject *mapObject) +{ + FieldObjectSetSpecialAnim(mapObject, GetSimpleGoAnimId(DIR_NORTH)); + task->data[0]++; + return FALSE; +} + +bool8 sub_8087058(struct Task *task, struct MapObject *mapObject) +{ + if (!FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + return FALSE; + } + if (MetatileBehavior_IsWaterfall(mapObject->mapobj_unk_1E)) + { + task->data[0] = 3; + return TRUE; + } + ScriptContext2_Disable(); + gPlayerAvatar.unk6 = 0; + DestroyTask(FindTaskIdByFunc(sub_8086F64)); + FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL); + return FALSE; +} + +void Task_Dive(u8); +extern int dive_warp(struct MapPosition *, u16); + +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]; + Task_Dive(taskId); + return FALSE; +} + +void Task_Dive(u8 taskId) +{ + while (gUnknown_0839F330[gTasks[taskId].data[0]](&gTasks[taskId])); +} + +bool8 sub_8087124(struct Task *task) +{ + gPlayerAvatar.unk6 = 1; + task->data[0]++; + return FALSE; +} + +bool8 dive_2_unknown(struct Task *task) +{ + ScriptContext2_Enable(); + gUnknown_0202FF84[0] = task->data[15]; + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + task->data[0]++; + return FALSE; +} + +bool8 dive_3_unknown(struct Task *task) +{ + struct MapPosition mapPosition; + PlayerGetDestCoords(&mapPosition.x, &mapPosition.y); + if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) + { + dive_warp(&mapPosition, gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E); + DestroyTask(FindTaskIdByFunc(Task_Dive)); + FieldEffectActiveListRemove(FLDEFF_USE_DIVE); + } + return FALSE; +} + +void sub_80871D0(u8); +void mapldr_080851BC(void); + +void sub_80871B8(u8 priority) +{ + CreateTask(sub_80871D0, priority); +} + +void sub_80871D0(u8 taskId) +{ + while (gUnknown_0839F33C[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId])); +} + +bool8 sub_808722C(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + FreezeMapObjects(); + CameraObjectReset2(); + SetCameraPanningCallback(NULL); + gPlayerAvatar.unk6 = 1; + mapObject->mapobj_bit_26 = 1; + task->data[1] = 1; + task->data[0]++; + return TRUE; +} + +bool8 sub_8087264(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + SetCameraPanning(0, task->data[1]); + task->data[1] = -task->data[1]; + task->data[2]++; + if (task->data[2] > 7) + { + task->data[2] = 0; + task->data[0]++; + } + return FALSE; +} + +bool8 sub_8087298(struct Task *task, struct MapObject *mapObject, struct Sprite *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; + FieldEffectStart(FLDEFF_LAVARIDGE_GYM_WARP); + PlaySE(SE_W153); + task->data[0]++; + return TRUE; +} + +bool8 sub_80872E4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + s16 centerToCornerVecY; + SetCameraPanning(0, task->data[1]); + if (task->data[1] = -task->data[1], ++task->data[2] <= 17) + { + if (!(task->data[2] & 1) && (task->data[1] <= 3)) + { + task->data[1] <<= 1; + } + } else if (!(task->data[2] & 4) && (task->data[1] > 0)) + { + task->data[1] >>= 1; + } + if (task->data[2] > 6) + { + centerToCornerVecY = -(sprite->centerToCornerVecY << 1); + if (sprite->pos2.y > -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY)) + { + sprite->pos2.y -= task->data[3]; + if (task->data[3] <= 7) + { + task->data[3]++; + } + } else + { + task->data[4] = 1; + } + } + if (task->data[5] == 0 && sprite->pos2.y < -0x10) + { + task->data[5]++; + mapObject->mapobj_bit_26 = 1; + sprite->oam.priority = 1; + sprite->subspriteMode = 2; + } + if (task->data[1] == 0 && task->data[4] != 0) + { + task->data[0]++; + } + return FALSE; +} + +bool8 sub_80873D8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8053FF8(); + fade_8080918(); + task->data[0]++; + return FALSE; +} + +bool8 sub_80873F4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + if (!gPaletteFade.active && sub_8054034() == TRUE) + { + warp_in(); + gFieldCallback = mapldr_080851BC; + SetMainCallback2(CB2_LoadMap); + DestroyTask(FindTaskIdByFunc(sub_80871D0)); + } + return FALSE; +} + +void sub_8087470(u8); +extern u8 sub_80608A4(u8); + +void mapldr_080851BC(void) +{ + sub_8053E90(); + pal_fill_for_map_transition(); + ScriptContext2_Enable(); + gFieldCallback = NULL; + CreateTask(sub_8087470, 0); +} + +void sub_8087470(u8 taskId) +{ + while (gUnknown_0839F354[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId])); +} + +bool8 sub_80874CC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + CameraObjectReset2(); + FreezeMapObjects(); + gPlayerAvatar.unk6 = 1; + mapObject->mapobj_bit_13 = 1; + task->data[0]++; + return FALSE; +} + +bool8 sub_80874FC(struct Task *task, struct MapObject *mapObject, struct Sprite *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; + task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); + task->data[0]++; + } + return FALSE; +} + +bool8 sub_8087548(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite = &gSprites[task->data[1]]; + if (sprite->animCmdIndex > 1) + { + task->data[0]++; + mapObject->mapobj_bit_13 = 0; + CameraObjectReset1(); + PlaySE(SE_W091); + FieldObjectSetSpecialAnim(mapObject, sub_80608A4(DIR_EAST)); + } + return FALSE; +} + +bool8 sub_808759C(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + gPlayerAvatar.unk6 = 0; + ScriptContext2_Disable(); + UnfreezeMapObjects(); + DestroyTask(FindTaskIdByFunc(sub_8087470)); + } + return FALSE; +} + +extern void sub_8060470(s16 *x, s16 *y, s16 dx, s16 dy); +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]; + gSprites[spriteId].coordOffsetEnabled = 1; + return spriteId; +} + +void sub_8087638(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + FieldEffectStop(sprite, FLDEFF_LAVARIDGE_GYM_WARP); + } +} + +void sub_808766C(u8); + +void sub_8087654(u8 priority) +{ + CreateTask(sub_808766C, priority); +} + +void sub_808766C(u8 taskId) +{ + while(gUnknown_0839F364[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId])); +} + +bool8 sub_80876C8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + FreezeMapObjects(); + CameraObjectReset2(); + gPlayerAvatar.unk6 = 1; + mapObject->mapobj_bit_26 = 1; + task->data[0]++; + return FALSE; +} + +bool8 sub_80876F8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + 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; + task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); + task->data[0]++; + } else + { + task->data[1]++; + FieldObjectSetSpecialAnim(mapObject, GetStepInPlaceDelay4AnimId(mapObject->mapobj_unk_18)); + PlaySE(SE_FU_ZUZUZU); + } + } + return FALSE; +} + +bool8 sub_8087774(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gSprites[task->data[1]].animCmdIndex == 2) + { + mapObject->mapobj_bit_13 = 1; + task->data[0]++; + } + return FALSE; +} + +bool8 sub_80877AC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH)) + { + sub_8053FF8(); + fade_8080918(); + task->data[0]++; + } + return FALSE; +} + +void sub_80878C4(u8); +void mapldr_080859D4(void); + +bool8 sub_80877D4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) +{ + if (!gPaletteFade.active && sub_8054034() == TRUE) + { + warp_in(); + gFieldCallback = sub_8086748; + SetMainCallback2(CB2_LoadMap); + DestroyTask(FindTaskIdByFunc(sub_808766C)); + } + return FALSE; +} + +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]; + gSprites[spriteId].coordOffsetEnabled = 1; + return spriteId; +} + +void sub_808788C(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + FieldEffectStop(sprite, FLDEFF_POP_OUT_OF_ASH); + } +} + +void sub_80878A8(void) +{ + ScriptContext2_Enable(); + FreezeMapObjects(); + CreateTask(sub_80878C4, 0x50); +} + +void sub_80878C4(u8 taskId) +{ + gUnknown_0839F378[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void sub_80878F4(struct Task *task) +{ + task->data[0]++; + task->data[14] = 64; + task->data[15] = player_get_direction_lower_nybble(); +} + +void sub_8087914(struct Task *task) +{ + struct MapObject *mapObject; + u8 unknown_0839F380[5]; + memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); + if (task->data[14] != 0 && (--task->data[14]) == 0) + { + sub_8053FF8(); + fade_8080918(); + } + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + if (task->data[14] == 0 && !gPaletteFade.active && sub_8054034() == TRUE) + { + FieldObjectSetDirection(mapObject, task->data[15]); + sub_8053678(); + warp_in(); + gFieldCallback = mapldr_080859D4; + SetMainCallback2(CB2_LoadMap); + DestroyTask(FindTaskIdByFunc(sub_80878C4)); + } else if (task->data[1] == 0 || (--task->data[1]) == 0) + { + FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(unknown_0839F380[mapObject->mapobj_unk_18])); + if (task->data[2] < 12) + { + task->data[2]++; + } + task->data[1] = 8 >> (task->data[2] >> 2); + } + } +} + +void sub_8087A74(u8); + +void mapldr_080859D4(void) +{ + sub_8053E90(); + pal_fill_for_map_transition(); + ScriptContext2_Enable(); + FreezeMapObjects(); + gFieldCallback = NULL; + gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; + CreateTask(sub_8087A74, 0); +} + +void sub_8087A74(u8 taskId) +{ + gUnknown_0839F388[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void sub_8087AA4(struct Task *task) +{ + if (sub_807D770()) + { + task->data[0]++; + task->data[15] = player_get_direction_lower_nybble(); + } +} + +void sub_8087AC8(struct Task *task) +{ + struct MapObject *mapObject; + u8 unknown_0839F380[5]; + memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (task->data[1] == 0 || (--task->data[1]) == 0) + { + if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) && !FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + return; + } + if (task->data[2] >= 32 && task->data[15] == player_get_direction_lower_nybble()) + { + mapObject->mapobj_bit_13 = 0; + ScriptContext2_Disable(); + UnfreezeMapObjects(); + DestroyTask(FindTaskIdByFunc(sub_8087A74)); + return; + } + FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(unknown_0839F380[mapObject->mapobj_unk_18])); + if (task->data[2] < 32) + { + task->data[2]++; + } + task->data[1] = task->data[2] >> 2; + } + mapObject->mapobj_bit_13 ^= 1; +} + +void sub_8087BBC(u8); +void mapldr_08085D88(void); + +void sub_8087BA8(void) +{ + CreateTask(sub_8087BBC, 0); +} + +void sub_8087BBC(u8 taskId) +{ + gUnknown_0839F390[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void sub_8087BEC(struct Task *task) +{ + ScriptContext2_Enable(); + FreezeMapObjects(); + CameraObjectReset2(); + task->data[15] = player_get_direction_lower_nybble(); + task->data[0]++; +} + +void sub_8087C14(struct Task *task) +{ + struct MapObject *mapObject; + u8 unknown_0839F380[5]; + memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (task->data[1] == 0 || (--task->data[1]) == 0) + { + FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]); + task->data[1] = 8; + task->data[2]++; + } + if (task->data[2] > 7 && task->data[15] == mapObject->mapobj_unk_18) + { + task->data[0]++; + task->data[1] = 4; + task->data[2] = 8; + task->data[3] = 1; + PlaySE(SE_TK_WARPIN); + } +} + +void sub_8087CA4(struct Task *task) +{ + struct MapObject *mapObject; + struct Sprite *sprite; + u8 unknown_0839F380[5]; + memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + sprite = &gSprites[gPlayerAvatar.spriteId]; + if ((--task->data[1]) <= 0) + { + task->data[1] = 4; + FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]); + } + sprite->pos1.y -= task->data[3]; + task->data[4] += task->data[3]; + if ((--task->data[2]) <= 0 && (task->data[2] = 4, task->data[3] < 8)) + { + task->data[3] <<= 1; + } + if (task->data[4] > 8 && (sprite->oam.priority = 1, sprite->subspriteMode != 0)) + { + sprite->subspriteMode = 2; + } + if (task->data[4] >= 0xa8) + { + task->data[0]++; + sub_8053FF8(); + fade_8080918(); + } +} + +void sub_8087D78(struct Task *task) +{ + if (!gPaletteFade.active && sub_8054034() == TRUE) + { + sub_8053570(); + warp_in(); + SetMainCallback2(CB2_LoadMap); + gFieldCallback = mapldr_08085D88; + DestroyTask(FindTaskIdByFunc(sub_8087BBC)); + } +} + +void sub_8087E1C(u8); + +void mapldr_08085D88(void) +{ + sub_8053E90(); + pal_fill_for_map_transition(); + ScriptContext2_Enable(); + FreezeMapObjects(); + gFieldCallback = NULL; + gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; + CameraObjectReset2(); + CreateTask(sub_8087E1C, 0); +} + +void sub_8087E1C(u8 taskId) +{ + gUnknown_0839F3A0[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void sub_8087E4C(struct Task *task) +{ + struct Sprite *sprite; + s16 centerToCornerVecY; + if (sub_807D770()) + { + sprite = &gSprites[gPlayerAvatar.spriteId]; + centerToCornerVecY = -(sprite->centerToCornerVecY << 1); + sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY); + gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 0; + task->data[0]++; + task->data[1] = 8; + task->data[2] = 1; + task->data[14] = sprite->subspriteMode; + task->data[15] = player_get_direction_lower_nybble(); + PlaySE(SE_TK_WARPIN); + } +} + +void sub_8087ED8(struct Task *task) +{ + u8 unknown_0839F380[5]; + struct MapObject *mapObject; + struct Sprite *sprite; + memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + sprite = &gSprites[gPlayerAvatar.spriteId]; + if ((sprite->pos2.y += task->data[1]) >= -8) + { + if (task->data[13] == 0) + { + task->data[13]++; + mapObject->mapobj_bit_2 = 1; + sprite->subspriteMode = task->data[14]; + } + } else + { + sprite->oam.priority = 1; + if (sprite->subspriteMode != 0) + { + sprite->subspriteMode = 2; + } + } + if (sprite->pos2.y >= -0x30 && task->data[1] > 1 && !(sprite->pos2.y & 1)) + { + task->data[1]--; + } + if ((--task->data[2]) == 0) + { + task->data[2] = 4; + FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]); + } + if (sprite->pos2.y >= 0) + { + sprite->pos2.y = 0; + task->data[0]++; + task->data[1] = 1; + task->data[2] = 0; + } +} + +void sub_8087FDC(struct Task *task) +{ + u8 unknown_0839F380[5]; + struct MapObject *mapObject; + memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if ((--task->data[1]) == 0) + { + FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]); + task->data[1] = 8; + if ((++task->data[2]) > 4 && task->data[14] == mapObject->mapobj_unk_18) + { + ScriptContext2_Disable(); + CameraObjectReset1(); + UnfreezeMapObjects(); + DestroyTask(FindTaskIdByFunc(sub_8087E1C)); + } + } +} + +void sub_8088120(u8); +void sub_808847C(u8); +u8 sub_8088830(u32, u32, u32); +void sub_80883DC(void); +void sub_808843C(u16); +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) + { + taskId = CreateTask(sub_8088120, 0xff); + } else + { + taskId = CreateTask(sub_808847C, 0xff); + } + gTasks[taskId].data[15] = sub_8088830(gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[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; + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON); + FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + return FALSE; +} + +void sub_8088120(u8 taskId) +{ + gUnknown_0839F3AC[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void sub_8088150(struct Task *task) +{ + task->data[11] = REG_WININ; + task->data[12] = REG_WINOUT; + StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback); + task->data[1] = 0xf0f1; + task->data[2] = 0x5051; + task->data[3] = 0x3f; + task->data[4] = 0x3e; + REG_WIN0H = task->data[1]; + REG_WIN0V = task->data[2]; + REG_WININ = task->data[3]; + REG_WINOUT = task->data[4]; + SetVBlankCallback(sub_80883DC); + task->data[0]++; +} + +void sub_80881C0(struct Task *task) +{ + u16 offset; + u16 delta; + offset = ((REG_BG0CNT >> 2) << 14); + delta = ((REG_BG0CNT >> 8) << 11); + CpuCopy16(gFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x200); + CpuFill32(0, (void *)(VRAM + delta), 0x800); + LoadPalette(gFieldMoveStreaksPalette, 0xf0, 0x20); + sub_808843C(delta); + task->data[0]++; +} + +void sub_8088228(struct Task *task) +{ + s16 v0; + s16 v2; + s16 v3; + task->data[5] -= 16; + v0 = ((u16)task->data[1] >> 8); + v2 = ((u16)task->data[2] >> 8); + v3 = ((u16)task->data[2] & 0xff); + v0 -= 16; + v2 -= 2; + v3 += 2; + if (v0 < 0) + { + v0 = 0; + } + if (v2 < 0x28) + { + v2 = 0x28; + } + if (v3 > 0x78) + { + v3 = 0x78; + } + task->data[1] = (v0 << 8) | (task->data[1] & 0xff); + task->data[2] = (v2 << 8) | v3; + if (v0 == 0 && v2 == 0x28 && v3 == 0x78) + { + gSprites[task->data[15]].callback = sub_8088890; + task->data[0]++; + } +} + +void sub_80882B4(struct Task *task) +{ + task->data[5] -= 16; + if (gSprites[task->data[15]].data7) + { + task->data[0]++; + } +} + +void sub_80882E4(struct Task *task) +{ + s16 v2; + s16 v3; + task->data[5] -= 16; + v2 = (task->data[2] >> 8); + v3 = (task->data[2] & 0xff); + v2 += 6; + v3 -= 6; + if (v2 > 0x50) + { + v2 = 0x50; + } + if (v3 < 0x51) + { + v3 = 0x51; + } + task->data[2] = (v2 << 8) | v3; + if (v2 == 0x50 && v3 == 0x51) + { + task->data[0]++; + } +} + +void sub_8088338(struct Task *task) +{ + u16 bg0cnt; + bg0cnt = (REG_BG0CNT >> 8) << 11; + CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); + task->data[1] = 0xf1; + task->data[2] = 0xa1; + task->data[3] = task->data[11]; + task->data[4] = task->data[12]; + task->data[0]++; +} + +void sub_8088380(struct Task *task) +{ + IntrCallback callback; + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); + SetVBlankCallback(callback); + SetUpWindowConfig(&gWindowConfig_81E6CE4); + InitMenuWindow(&gWindowConfig_81E6CE4); + FreeResourcesAndDestroySprite(&gSprites[task->data[15]]); + FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); + DestroyTask(FindTaskIdByFunc(sub_8088120)); +} + +void sub_80883DC(void) +{ + struct Task *task; + IntrCallback callback; + task = &gTasks[FindTaskIdByFunc(sub_8088120)]; + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); + callback(); + REG_WIN0H = task->data[1]; + REG_WIN0V = task->data[2]; + REG_WININ = task->data[3]; + REG_WINOUT = task->data[4]; + REG_BG0HOFS = task->data[5]; + REG_BG0VOFS = task->data[6]; +} + +void sub_808843C(u16 offs) +{ + u16 i; + u16 *dest; + dest = (u16 *)(VRAM + 0x140 + offs); + for (i=0; i<0x140; i++, dest++) + { + *dest = gFieldMoveStreaksTilemap[i] | 0xf000; + } +} + +void sub_80886B0(void); +bool8 sub_8088708(struct Task *); +void sub_80886F8(struct Task *); +bool8 sub_80887C0(struct Task *); + +void sub_808847C(u8 taskId) +{ + gUnknown_0839F3C8[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void sub_80884AC(struct Task *task) +{ + REG_BG0HOFS = task->data[1]; + REG_BG0VOFS = task->data[2]; + StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback); + SetVBlankCallback(sub_80886B0); + task->data[0]++; +} + +void sub_80884E8(struct Task *task) +{ + u16 offset; + u16 delta; + offset = ((REG_BG0CNT >> 2) << 14); + delta = ((REG_BG0CNT >> 8) << 11); + task->data[12] = delta; + CpuCopy16(gDarknessFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x80); + CpuFill32(0, (void *)(VRAM + delta), 0x800); + LoadPalette(gDarknessFieldMoveStreaksPalette, 0xf0, 0x20); + task->data[0]++; +} + +void sub_8088554(struct Task *task) +{ + if (sub_8088708(task)) + { + REG_WIN1H = 0x00f0; + REG_WIN1V = 0x2878; + gSprites[task->data[15]].callback = sub_8088890; + task->data[0]++; + } + sub_80886F8(task); +} + +void sub_80885A8(struct Task *task) +{ + sub_80886F8(task); + if (gSprites[task->data[15]].data7) + { + task->data[0]++; + } +} + +void sub_80885D8(struct Task *task) +{ + sub_80886F8(task); + task->data[3] = task->data[1] & 7; + task->data[4] = 0; + REG_WIN1H = 0xffff; + REG_WIN1V = 0xffff; + task->data[0]++; +} + +void sub_808860C(struct Task *task) +{ + sub_80886F8(task); + if (sub_80887C0(task)) + { + task->data[0]++; + } +} + +void sub_808862C(struct Task *task) +{ + IntrCallback intrCallback; + u16 bg0cnt; + bg0cnt = (REG_BG0CNT >> 8) << 11; + CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); + SetVBlankCallback(intrCallback); + SetUpWindowConfig(&gWindowConfig_81E6CE4); + InitMenuWindow(&gWindowConfig_81E6CE4); + FreeResourcesAndDestroySprite(&gSprites[task->data[15]]); + FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); + DestroyTask(FindTaskIdByFunc(sub_808847C)); +} + +void sub_80886B0(void) +{ + IntrCallback intrCallback; + struct Task *task; + task = &gTasks[FindTaskIdByFunc(sub_808847C)]; + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); + intrCallback(); + REG_BG0HOFS = task->data[1]; + REG_BG0VOFS = task->data[2]; +} + +void sub_80886F8(struct Task *task) +{ + task->data[1] -= 16; + task->data[3] += 16; +} + +#ifdef NONMATCHING +bool8 sub_8088708(struct Task *task) +{ + u16 i; + u16 srcOffs; + u16 dstOffs; + u16 *dest; + if (task->data[4] >= 32) + { + return TRUE; + } + dstOffs = (task->data[3] >> 3) & 0x1f; + if (dstOffs >= task->data[4]) + { + dstOffs = (32 - dstOffs) & 0x1f; + srcOffs = (32 - task->data[4]) & 0x1f; + dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]); + for (i=0; i<10; i++) + { + dest[dstOffs + i * 32] = gDarknessFieldMoveStreaksTilemap[srcOffs + i * 32] | 0xf000; + dest[((dstOffs + 1) & 0x1f) + i * 32] = gDarknessFieldMoveStreaksTilemap[((srcOffs + 1) & 0x1f) + i * 32] | 0xf000; + } + task->data[4] += 2; + } + return FALSE; +} +#else +__attribute__((naked)) +bool8 sub_8088708(struct Task *task) +{ + 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, 0x4\n" + "\tadds r5, r0, 0\n" + "\tldrh r2, [r5, 0x10]\n" + "\tmovs r1, 0x10\n" + "\tldrsh r0, [r5, r1]\n" + "\tcmp r0, 0x1F\n" + "\tble _08088724\n" + "\tmovs r0, 0x1\n" + "\tb _080887A8\n" + "_08088724:\n" + "\tldrh r0, [r5, 0xE]\n" + "\tlsls r0, 16\n" + "\tasrs r3, r0, 19\n" + "\tmovs r1, 0x1F\n" + "\tands r3, r1\n" + "\tmovs r4, 0x10\n" + "\tldrsh r0, [r5, r4]\n" + "\tcmp r3, r0\n" + "\tblt _080887A6\n" + "\tmovs r0, 0x20\n" + "\tsubs r3, r0, r3\n" + "\tands r3, r1\n" + "\tsubs r0, r2\n" + "\tmov r12, r0\n" + "\tmov r7, r12\n" + "\tands r7, r1\n" + "\tmov r12, r7\n" + "\tldrh r0, [r5, 0x20]\n" + "\tldr r1, _080887B8 @ =0x06000140\n" + "\tadds r1, r0\n" + "\tmov r8, r1\n" + "\tmovs r4, 0\n" + "\tldr r7, _080887BC @ =gDarknessFieldMoveStreaksTilemap\n" + "\tmov r10, r7\n" + "\tmovs r0, 0xF0\n" + "\tlsls r0, 8\n" + "\tmov r9, r0\n" + "\tadds r1, r3, 0x1\n" + "\tmovs r0, 0x1F\n" + "\tands r1, r0\n" + "\tstr r1, [sp]\n" + "\tmov r6, r12\n" + "\tadds r6, 0x1\n" + "\tands r6, r0\n" + "_08088768:\n" + "\tlsls r1, r4, 5\n" + "\tadds r2, r1, r3\n" + "\tlsls r2, 1\n" + "\tadd r2, r8\n" + "\tmov r7, r12\n" + "\tadds r0, r7, r1\n" + "\tlsls r0, 1\n" + "\tadd r0, r10\n" + "\tldrh r0, [r0]\n" + "\tmov r7, r9\n" + "\torrs r0, r7\n" + "\tstrh r0, [r2]\n" + "\tldr r0, [sp]\n" + "\tadds r2, r1, r0\n" + "\tlsls r2, 1\n" + "\tadd r2, r8\n" + "\tadds r1, r6, r1\n" + "\tlsls r1, 1\n" + "\tadd r1, r10\n" + "\tldrh r0, [r1]\n" + "\tmov r1, r9\n" + "\torrs r0, r1\n" + "\tstrh r0, [r2]\n" + "\tadds r0, r4, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r4, r0, 16\n" + "\tcmp r4, 0x9\n" + "\tbls _08088768\n" + "\tldrh r0, [r5, 0x10]\n" + "\tadds r0, 0x2\n" + "\tstrh r0, [r5, 0x10]\n" + "_080887A6:\n" + "\tmovs r0, 0\n" + "_080887A8:\n" + "\tadd sp, 0x4\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\n" + "\t.align 2, 0\n" + "_080887B8: .4byte 0x06000140\n" + "_080887BC: .4byte gDarknessFieldMoveStreaksTilemap"); +} +#endif + +bool8 sub_80887C0(struct Task *task) +{ + u16 i; + u16 dstOffs; + u16 *dest; + if (task->data[4] >= 32) + { + return TRUE; + } + dstOffs = task->data[3] >> 3; + if (dstOffs >= task->data[4]) + { + dstOffs = (task->data[1] >> 3) & 0x1f; + dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]); + for (i=0; i<10; i++) + { + dest[dstOffs + i * 32] = 0xf000; + dest[((dstOffs + 1) & 0x1f) + i * 32] = 0xf000; + } + task->data[4] += 2; + } + return FALSE; +} + +u8 sub_8088830(u32 a0, u32 a1, u32 a2) +{ + u16 v0; + u8 monSprite; + struct Sprite *sprite; + v0 = (a0 & 0x80000000) >> 16; + a0 &= 0x7fffffff; + monSprite = CreateMonSprite_FieldMove(a0, a1, a2, 0x140, 0x50, 0); + sprite = &gSprites[monSprite]; + sprite->callback = SpriteCallbackDummy; + sprite->oam.priority = 0; + sprite->data0 = a0; + sprite->data6 = v0; + return monSprite; +} + +void sub_80888D4(struct Sprite *); + +void sub_8088890(struct Sprite *sprite) +{ + if ((sprite->pos1.x -= 20) <= 0x78) + { + sprite->pos1.x = 0x78; + sprite->data1 = 30; + sprite->callback = sub_80888D4; + if (sprite->data6) + { + PlayCry2(sprite->data0, 0, 0x7d, 0xa); + } else + { + PlayCry1(sprite->data0, 0); + } + } +} + +void sub_80888F0(struct Sprite *); + +void sub_80888D4(struct Sprite *sprite) +{ + if ((--sprite->data1) == 0) + { + sprite->callback = sub_80888F0; + } +} + +void sub_80888F0(struct Sprite *sprite) +{ + if (sprite->pos1.x < -0x40) + { + sprite->data7 = 1; + } else + { + sprite->pos1.x -= 20; + } +} + +void sub_8088954(u8); + +u8 FldEff_UseSurf(void) +{ + u8 taskId; + taskId = CreateTask(sub_8088954, 0xff); + gTasks[taskId].data[15] = gUnknown_0202FF84[0]; + sav1_reset_battle_music_maybe(); + sub_8053FB0(0x016d); + return FALSE; +} + +void sub_8088954(u8 taskId) +{ + gUnknown_0839F3E4[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void sub_8088984(struct Task *task) +{ + ScriptContext2_Enable(); + FreezeMapObjects(); + gPlayerAvatar.unk6 = 1; + SetPlayerAvatarStateMask(8); + PlayerGetDestCoords(&task->data[1], &task->data[2]); + MoveCoords(gMapObjects[gPlayerAvatar.mapObjectId].placeholder18, &task->data[1], &task->data[2]); + task->data[0]++; +} + +void sub_80889E4(struct Task *task) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + sub_8059BF4(); + FieldObjectSetSpecialAnim(mapObject, 0x39); + task->data[0]++; + } +} + +void sub_8088A30(struct Task *task) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(mapObject)) + { + gUnknown_0202FF84[0] = task->data[15] | 0x80000000; + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + task->data[0]++; + } +} + +void sub_8088A78(struct Task *task) +{ + struct MapObject *mapObject; + if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) + { + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + 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; + mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_SURF_BLOB); + task->data[0]++; + } +} + +void sub_8088AF4(struct Task *task) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + gPlayerAvatar.unk6 = 0; + gPlayerAvatar.flags &= 0xdf; + FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(mapObject->placeholder18)); + sub_8127ED0(mapObject->mapobj_unk_1A, 1); + UnfreezeMapObjects(); + ScriptContext2_Disable(); + FieldEffectActiveListRemove(FLDEFF_USE_SURF); + DestroyTask(FindTaskIdByFunc(sub_8088954)); + } +} + +void sub_8088BC4(struct Sprite *); + +u8 FldEff_NPCFlyOut(void) +{ + u8 spriteId; + struct Sprite *sprite; + spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0x78, 0, 1); + sprite = &gSprites[spriteId]; + sprite->oam.paletteNum = 0; + sprite->oam.priority = 1; + sprite->callback = sub_8088BC4; + sprite->data1 = gUnknown_0202FF84[0]; + PlaySE(SE_W019); + return spriteId; +} + +void sub_8088BC4(struct Sprite *sprite) +{ + struct Sprite *npcSprite; + sprite->pos2.x = Cos(sprite->data2, 0x8c); + sprite->pos2.y = Sin(sprite->data2, 0x48); + sprite->data2 = (sprite->data2 + 4) & 0xff; + if (sprite->data0) + { + npcSprite = &gSprites[sprite->data1]; + npcSprite->coordOffsetEnabled = 0; + npcSprite->pos1.x = sprite->pos1.x + sprite->pos2.x; + npcSprite->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; + npcSprite->pos2.x = 0; + npcSprite->pos2.y = 0; + } + if (sprite->data2 >= 0x80) + { + FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT); + } +} + +void sub_8088C70(u8); +extern void sub_8127EFC(u8, u8); +u8 sub_8088F60(void); +bool8 sub_8088FA4(u8); +void sub_8088FC0(u8); +void sub_8088FFC(u8, u8); +void sub_8089018(struct Sprite *); +void sub_80890D8(struct Sprite *); + +u8 FldEff_UseFly(void) +{ + u8 taskId; + taskId = CreateTask(sub_8088C70, 0xfe); + gTasks[taskId].data[1] = gUnknown_0202FF84[0]; + return 0; +} + +void sub_8088C70(u8 taskId) +{ + gUnknown_0839F3F8[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void sub_8088CA0(struct Task *task) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + task->data[15] = gPlayerAvatar.flags; + gPlayerAvatar.unk6 = 0x01; + SetPlayerAvatarStateMask(1); + sub_8059BF4(); + FieldObjectSetSpecialAnim(mapObject, 0x39); + task->data[0]++; + } +} + +void sub_8088CF8(struct Task *task) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + task->data[0]++; + gUnknown_0202FF84[0] = task->data[1]; + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + } +} + +void sub_8088D3C(struct Task *task) +{ + struct MapObject *mapObject; + if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) + { + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (task->data[15] & 0x08) + { + sub_8127ED0(mapObject->mapobj_unk_1A, 2); + sub_8127EFC(mapObject->mapobj_unk_1A, 0); + } + task->data[1] = sub_8088F60(); + task->data[0]++; + } +} + +void sub_8088D94(struct Task *task) +{ + if (sub_8088FA4(task->data[1])) + { + task->data[0]++; + task->data[2] = 16; + SetPlayerAvatarTransitionFlags(0x01); + FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], 0x02); + } +} + +void sub_8088DD8(struct Task *task) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if ((task->data[2] == 0 || (--task->data[2]) == 0) && FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + task->data[0]++; + PlaySE(SE_W019); + sub_8088FC0(task->data[1]); + } +} + +void sub_8088E2C(struct Task *task) +{ + struct MapObject *mapObject; + if ((++task->data[2]) >= 8) + { + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(0x03)); + StartSpriteAnim(&gSprites[mapObject->spriteId], 0x16); + mapObject->mapobj_bit_12 = 1; + FieldObjectSetSpecialAnim(mapObject, 0x48); + if (task->data[15] & 0x08) + { + DestroySprite(&gSprites[mapObject->mapobj_unk_1A]); + } + task->data[0]++; + task->data[2] = 0; + } +} + +void sub_8088EB4(struct Task *task) +{ + struct MapObject *mapObject; + if ((++task->data[2]) >= 10) + { + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + FieldObjectClearAnimIfSpecialAnimActive(mapObject); + mapObject->mapobj_bit_12 = 0; + mapObject->mapobj_bit_22 = 0; + sub_8088FFC(task->data[1], mapObject->spriteId); + CameraObjectReset2(); + task->data[0]++; + } +} + +void sub_8088F10(struct Task *task) +{ + if (sub_8088FA4(task->data[1])) + { + fade_8080918(); + task->data[0]++; + } +} + +void sub_8088F30(struct Task *task) +{ + if (!gPaletteFade.active) + { + FieldEffectActiveListRemove(FLDEFF_USE_FLY); + DestroyTask(FindTaskIdByFunc(sub_8088C70)); + } +} + +u8 sub_8088F60(void) +{ + u8 spriteId; + struct Sprite *sprite; + spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0xff, 0xb4, 0x1); + sprite = &gSprites[spriteId]; + sprite->oam.paletteNum = 0; + sprite->oam.priority = 1; + sprite->callback = sub_8089018; + return spriteId; +} + +u8 sub_8088FA4(u8 spriteId) +{ + return gSprites[spriteId].data7; +} + +void sub_8088FC0(u8 spriteId) +{ + struct Sprite *sprite; + sprite = &gSprites[spriteId]; + sprite->callback = sub_80890D8; + sprite->pos1.x = 0x78; + sprite->pos1.y = 0x00; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + memset(&sprite->data0, 0, 8 * sizeof(u16) /* zero all data cells */); + sprite->data6 = 0x40; +} + +void sub_8088FFC(u8 a0, u8 a1) +{ + gSprites[a0].data6 = a1; +} + +void sub_8089018(struct Sprite *sprite) +{ + if (sprite->data7 == 0) + { + if (sprite->data0 == 0) + { + sprite->oam.affineMode = 3; + sprite->affineAnims = gSpriteAffineAnimTable_0839F44C; + InitSpriteAffineAnim(sprite); + StartSpriteAffineAnim(sprite, 0); + sprite->pos1.x = 0x76; + sprite->pos1.y = -0x30; + sprite->data0++; + sprite->data1 = 0x40; + sprite->data2 = 0x100; + } + sprite->data1 += (sprite->data2 >> 8); + sprite->pos2.x = Cos(sprite->data1, 0x78); + sprite->pos2.y = Sin(sprite->data1, 0x78); + if (sprite->data2 < 0x800) + { + sprite->data2 += 0x60; + } + if (sprite->data1 > 0x81) + { + sprite->data7++; + sprite->oam.affineMode = 0; + FreeOamMatrix(sprite->oam.matrixNum); + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, 0); + } + } +} + +void sub_80890D8(struct Sprite *sprite) +{ + struct Sprite *sprite1; + sprite->pos2.x = Cos(sprite->data2, 0x8c); + sprite->pos2.y = Sin(sprite->data2, 0x48); + sprite->data2 = (sprite->data2 + 4) & 0xff; + if (sprite->data6 != 0x40) + { + sprite1 = &gSprites[sprite->data6]; + sprite1->coordOffsetEnabled = 0; + sprite1->pos1.x = sprite->pos1.x + sprite->pos2.x; + sprite1->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; + sprite1->pos2.x = 0; + sprite1->pos2.y = 0; + } + if (sprite->data2 >= 0x80) + { + sprite->data7 = 1; + } +} + +void sub_808914C(struct Sprite *sprite) +{ + if (sprite->data7 == 0) + { + if (sprite->data0 == 0) + { + sprite->oam.affineMode = 3; + sprite->affineAnims = gSpriteAffineAnimTable_0839F44C; + InitSpriteAffineAnim(sprite); + StartSpriteAffineAnim(sprite, 1); + sprite->pos1.x = 0x5e; + sprite->pos1.y = -0x20; + sprite->data0++; + sprite->data1 = 0xf0; + sprite->data2 = 0x800; + sprite->data4 = 0x80; + } + sprite->data1 += sprite->data2 >> 8; + sprite->data3 += sprite->data2 >> 8; + sprite->data1 &= 0xff; + sprite->pos2.x = Cos(sprite->data1, 0x20); + sprite->pos2.y = Sin(sprite->data1, 0x78); + if (sprite->data2 > 0x100) + { + sprite->data2 -= sprite->data4; + } + if (sprite->data4 < 0x100) + { + sprite->data4 += 24; + } + if (sprite->data2 < 0x100) + { + sprite->data2 = 0x100; + } + if (sprite->data3 >= 60) + { + sprite->data7++; + sprite->oam.affineMode = 0; + FreeOamMatrix(sprite->oam.matrixNum); + sprite->invisible = 1; + } + } +} + +void sub_8089230(u8 spriteId) +{ + sub_8088FC0(spriteId); + gSprites[spriteId].callback = sub_808914C; +} + +void sub_8089270(u8); + +u8 FldEff_FlyIn(void) +{ + CreateTask(sub_8089270, 0xfe); + return 0; +} + +void sub_8089270(u8 taskId) +{ + gUnknown_0839F454[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void sub_80892A0(struct Task *task) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + task->data[0]++; + task->data[2] = 17; + task->data[15] = gPlayerAvatar.flags; + gPlayerAvatar.unk6 = 1; + SetPlayerAvatarStateMask(0x01); + if (task->data[15] & 0x08) + { + sub_8127ED0(mapObject->mapobj_unk_1A, 0); + } + sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(0x3)); + CameraObjectReset2(); + FieldObjectTurn(mapObject, DIR_WEST); + StartSpriteAnim(&gSprites[mapObject->spriteId], 0x16); + mapObject->mapobj_bit_13 = 0; + task->data[1] = sub_8088F60(); + sub_8088FC0(task->data[1]); + sub_8088FFC(task->data[1], mapObject->spriteId); + } +} + +void sub_8089354(struct Task *task) +{ + struct MapObject *mapObject; + struct Sprite *sprite; + if (task->data[2] == 0 || (--task->data[2]) == 0) + { + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + sprite = &gSprites[mapObject->spriteId]; + sub_8088FFC(task->data[1], 0x40); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + task->data[0]++; + task->data[2] = 0; + } +} + +void sub_80893C0(struct Task *task) +{ + s16 unknown_0839F470[18]; + struct Sprite *sprite; + memcpy(unknown_0839F470, gUnknown_0839F470, sizeof gUnknown_0839F470); + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.y = unknown_0839F470[task->data[2]]; + if ((++task->data[2]) >= 18) + { + task->data[0]++; + } +} + +void sub_8089414(struct Task *task) +{ + struct MapObject *mapObject; + struct Sprite *sprite; + if (sub_8088FA4(task->data[1])) + { + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + sprite = &gSprites[mapObject->spriteId]; + mapObject->mapobj_bit_12 = 0; + sub_805C058(mapObject, mapObject->coords2.x, mapObject->coords2.y); + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->coordOffsetEnabled = 1; + sub_8059BF4(); + FieldObjectSetSpecialAnim(mapObject, 0x39); + task->data[0]++; + } +} + +void sub_808948C(struct Task *task) +{ + if (FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gPlayerAvatar.mapObjectId])) + { + task->data[0]++; + sub_8089230(task->data[1]); + } +} + +void sub_80894C4(struct Task *task) +{ + if (sub_8088FA4(task->data[1])) + { + DestroySprite(&gSprites[task->data[1]]); + task->data[0]++; + task->data[1] = 0x10; + } +} + +void fishE(struct Task *task) +{ + u8 state; + struct MapObject *mapObject; + if ((--task->data[1]) == 0) + { + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + state = 0; + if (task->data[15] & 0x08) + { + state = 3; + sub_8127ED0(mapObject->mapobj_unk_1A, 1); + } + sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(state)); + FieldObjectTurn(mapObject, DIR_SOUTH); + gPlayerAvatar.flags = task->data[15]; + gPlayerAvatar.unk6 = 0; + FieldEffectActiveListRemove(FLDEFF_FLY_IN); + DestroyTask(FindTaskIdByFunc(sub_8089270)); + } +} diff --git a/src/field/field_fadetransition.c b/src/field/field_fadetransition.c new file mode 100644 index 000000000..e614d899a --- /dev/null +++ b/src/field/field_fadetransition.c @@ -0,0 +1,626 @@ +#include "global.h" +#include "cable_club.h" +#include "fieldmap.h" +#include "field_door.h" +#include "field_effect.h" +#include "field_fadetransition.h" +#include "field_map_obj.h" +#include "field_map_obj_helpers.h" +#include "field_player_avatar.h" +#include "field_special_scene.h" +#include "field_weather.h" +#include "fldeff_flash.h" +#include "link.h" +#include "main.h" +#include "map_obj_lock.h" +#include "metatile_behavior.h" +#include "palette.h" +#include "rom4.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "start_menu.h" +#include "task.h" + +void sub_8080B9C(u8); +void task_map_chg_seq_0807E20C(u8); +void task_map_chg_seq_0807E2CC(u8); +void task0A_fade_n_map_maybe(u8); +void sub_808115C(u8); + +void palette_bg_fill_white(void) +{ + CpuFastFill16(RGB_WHITE, gPlttBufferFaded, PLTT_SIZE); +} + +void palette_bg_fill_black(void) +{ + CpuFastFill16(RGB_BLACK, gPlttBufferFaded, PLTT_SIZE); +} + +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())) + { + case 0: + fade_screen(0, 0); + palette_bg_fill_black(); + break; + case 1: + fade_screen(2, 0); + palette_bg_fill_white(); + } +} + +void pal_fill_black(void) +{ + fade_screen(0, 0); + palette_bg_fill_black(); +} + +void fade_8080918(void) +{ + u8 light_level = sav1_map_get_light_level(); + switch (sub_810CDB8(light_level, warp1_get_mapheader()->mapType)) + { + case 0: + fade_screen(1, 0); + break; + case 1: + fade_screen(3, 0); + } +} + +void sub_8080958(u8 arg) +{ + sub_8059B88(!arg); +} + +void task0A_asap_script_env_2_enable_and_set_ctx_running(u8 taskID) +{ + if (sub_8080E70() == TRUE) + { + DestroyTask(taskID); + EnableBothScriptContexts(); + } +} + +void sub_8080990(void) +{ + ScriptContext2_Enable(); + sub_8053E90(); + pal_fill_black(); + CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10); +} + +void sub_80809B0(void) +{ + ScriptContext2_Enable(); + pal_fill_black(); + CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10); +} + +void task_mpl_807DD60(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[1] = sub_8083664(); + task->data[0]++; + break; + case 1: + if (gTasks[task->data[1]].isActive != TRUE) + { + pal_fill_for_map_transition(); + task->data[0]++; + } + break; + case 2: + if (sub_8080E70() == TRUE) + { + ScriptContext2_Disable(); + DestroyTask(taskId); + } + } +} + +void sub_8080A3C(void) +{ + ScriptContext2_Enable(); + sub_8053E90(); + palette_bg_fill_black(); + CreateTask(task_mpl_807DD60, 10); +} + +void sub_8080A5C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + sub_80084A4(); + task->data[0]++; + break; + case 1: + if (sub_8007ECC()) + { + pal_fill_for_map_transition(); + task->data[0]++; + } + break; + case 2: + if (sub_8080E70() == TRUE) + { + sub_8007B14(); + ScriptContext2_Disable(); + DestroyTask(taskId); + } + } +} + +void sub_8080AC4(void) +{ + ScriptContext2_Enable(); + sub_8053E90(); + palette_bg_fill_black(); + CreateTask(sub_8080A5C, 10); +} + +void sub_8080AE4(void) +{ + s16 x, y; + u8 behavior; + TaskFunc func; + PlayerGetDestCoords(&x, &y); + behavior = MapGridGetMetatileBehaviorAt(x, y); + if (MetatileBehavior_IsDoor(behavior) == TRUE) + func = sub_8080B9C; + else if (MetatileBehavior_IsNonAnimDoor(behavior) == TRUE) + func = task_map_chg_seq_0807E20C; + else + func = task_map_chg_seq_0807E2CC; + CreateTask(func, 10); +} + +void mapldr_default(void) +{ + sub_8053E90(); + pal_fill_for_map_transition(); + sub_8080AE4(); + ScriptContext2_Enable(); +} + +void sub_8080B60(void) +{ + sub_8053E90(); + pal_fill_black(); + sub_8080AE4(); + ScriptContext2_Enable(); +} + +void sub_8080B78(void) +{ + sub_8053E90(); + pal_fill_for_map_transition(); + PlaySE(SE_TK_WARPOUT); + CreateTask(task_map_chg_seq_0807E2CC, 10); + ScriptContext2_Enable(); +} + +void sub_8080B9C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + s16 *x = &task->data[2]; + s16 *y = &task->data[3]; + + switch (task->data[0]) + { + case 0: + sub_8080958(0); + FreezeMapObjects(); + PlayerGetDestCoords(x, y); + FieldSetDoorOpened(*x, *y); + task->data[0] = 1; + break; + case 1: + if (sub_8080E70()) + { + u8 mapObjId; + sub_8080958(1); + mapObjId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); + FieldObjectSetSpecialAnim(&gMapObjects[mapObjId], 8); + task->data[0] = 2; + } + break; + case 2: + if (walkrun_is_standing_still()) + { + u8 mapObjId; + task->data[1] = FieldAnimateDoorClose(*x, *y); + mapObjId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); + FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId]); + task->data[0] = 3; + } + break; + case 3: + if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) + { + UnfreezeMapObjects(); + task->data[0] = 4; + } + break; + case 4: + ScriptContext2_Disable(); + DestroyTask(taskId); + break; + } +} + +void task_map_chg_seq_0807E20C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + s16 *x = &task->data[2]; + s16 *y = &task->data[3]; + + switch (task->data[0]) + { + case 0: + sub_8080958(0); + FreezeMapObjects(); + PlayerGetDestCoords(x, y); + task->data[0] = 1; + break; + case 1: + if (sub_8080E70()) + { + u8 mapObjId; + sub_8080958(1); + mapObjId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); + FieldObjectSetSpecialAnim(&gMapObjects[mapObjId], GetGoSpeed0AnimId(player_get_direction_lower_nybble())); + task->data[0] = 2; + } + break; + case 2: + if (walkrun_is_standing_still()) + { + UnfreezeMapObjects(); + task->data[0] = 3; + } + break; + case 3: + ScriptContext2_Disable(); + DestroyTask(taskId); + break; + } +} + +void task_map_chg_seq_0807E2CC(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + FreezeMapObjects(); + ScriptContext2_Enable(); + gTasks[taskId].data[0]++; + break; + case 1: + if (sub_8080E70()) + { + UnfreezeMapObjects(); + ScriptContext2_Disable(); + DestroyTask(taskId); + } + break; + } +} + +void sub_8080DC4(u8 taskId) +{ + if (sub_8080E70() == TRUE) + { + DestroyTask(taskId); + CreateTask(sub_80712B4, 80); + } +} + +void atk17_seteffectuser(void) +{ + pal_fill_black(); + CreateStartMenuTask(sub_8080DC4); + ScriptContext2_Enable(); +} + +void task_mpl_807E3C8(u8 taskId) +{ + if (sub_8080E70() == 1) + { + ScriptContext2_Disable(); + DestroyTask(taskId); + sub_8064E2C(); + } +} + +void sub_8080E28(void) +{ + ScriptContext2_Enable(); + pal_fill_black(); + CreateTask(task_mpl_807E3C8, 10); +} + +void sub_8080E44(void) +{ + ScriptContext2_Enable(); + sub_8053E90(); + pal_fill_black(); + CreateTask(task_mpl_807E3C8, 10); +} + +bool32 sub_8080E64(void) +{ + return gPaletteFade.active; +} + +bool32 sub_8080E70(void) +{ + if (sub_807D770() == TRUE) + return TRUE; + else + return FALSE; +} + +void sub_8080E88(void) +{ + ScriptContext2_Enable(); + sub_8053FF8(); + fade_8080918(); + PlayRainSoundEffect(); + PlaySE(SE_KAIDAN); + gFieldCallback = mapldr_default; + CreateTask(task0A_fade_n_map_maybe, 10); +} + +void sp13E_warp_to_last_warp(void) +{ + ScriptContext2_Enable(); + sub_8053FF8(); + fade_8080918(); + PlayRainSoundEffect(); + gFieldCallback = mapldr_default; + CreateTask(task0A_fade_n_map_maybe, 10); +} + +void sub_8080EF0(void) +{ + ScriptContext2_Enable(); + gFieldCallback = mapldr_default; + CreateTask(sub_808115C, 10); +} + +void sp13F_fall_to_last_warp(void) +{ + sp13E_warp_to_last_warp(); + gFieldCallback = sub_8086748; +} + +void sub_8080F2C(u8 metatileBehavior) +{ + ScriptContext2_Enable(); + sub_8086A2C(metatileBehavior, 10); +} + +void sub_8080F48(void) +{ + ScriptContext2_Enable(); + sub_80871B8(10); +} + +void sub_8080F58(void) +{ + ScriptContext2_Enable(); + sub_8087654(10); +} + +void sub_8080F68(void) +{ + ScriptContext2_Enable(); + sub_8053FF8(); + fade_8080918(); + PlaySE(SE_TK_WARPIN); + CreateTask(task0A_fade_n_map_maybe, 10); + gFieldCallback = sub_8080B78; +} + +void sub_8080F9C(void) +{ + ScriptContext2_Enable(); + fade_8080918(); + CreateTask(task0A_fade_n_map_maybe, 10); + gFieldCallback = sub_80C791C; +} + +void sub_8080FC4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + ScriptContext2_Enable(); + task->data[0]++; + break; + case 1: + if (!sub_8080E64() && sub_8054034()) + { + task->data[0]++; + } + break; + case 2: + warp_in(); + SetMainCallback2(sub_8054588); + DestroyTask(taskId); + break; + } +} + +void DoCableClubWarp(void) +{ + ScriptContext2_Enable(); + sub_8053FF8(); + fade_8080918(); + PlaySE(SE_KAIDAN); + CreateTask(sub_8080FC4, 10); +} + +void sub_8081050(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + ClearLinkCallback_2(); + fade_screen(1, 0); + sub_8053FF8(); + PlaySE(SE_KAIDAN); + data[0]++; + break; + case 1: + if (!sub_8080E64() && sub_8054034()) + { + sub_800832C(); + data[0]++; + } + break; + case 2: + if (!gReceivedRemoteLinkPlayers) + { + warp_in(); + SetMainCallback2(CB2_LoadMap); + DestroyTask(taskId); + } + break; + } +} + +void sub_80810DC(void) +{ + CreateTask(sub_8081050, 10); +} + +void task0A_fade_n_map_maybe(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + FreezeMapObjects(); + ScriptContext2_Enable(); + task->data[0]++; + break; + case 1: + if (!sub_8080E64() && sub_8054034()) + { + task->data[0]++; + } + break; + case 2: + warp_in(); + SetMainCallback2(CB2_LoadMap); + DestroyTask(taskId); + break; + } +} + +void sub_808115C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + s16 *x = &task->data[2]; + s16 *y = &task->data[3]; + + switch (task->data[0]) + { + case 0: + FreezeMapObjects(); + PlayerGetDestCoords(x, y); + PlaySE(sub_8058790(*x, *y - 1)); + task->data[1] = FieldAnimateDoorOpen(*x, *y - 1); + task->data[0] = 1; + break; + case 1: + if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) + { + u8 mapObjId; + mapObjId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); + FieldObjectClearAnimIfSpecialAnimActive(&gMapObjects[mapObjId]); + mapObjId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); + FieldObjectSetSpecialAnim(&gMapObjects[mapObjId], 9); + task->data[0] = 2; + } + break; + case 2: + if (walkrun_is_standing_still()) + { + u8 mapObjId; + task->data[1] = FieldAnimateDoorClose(*x, *y - 1); + mapObjId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); + FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId]); + sub_8080958(0); + task->data[0] = 3; + } + break; + case 3: + if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) + { + task->data[0] = 4; + } + break; + case 4: + sub_8053FF8(); + fade_8080918(); + PlayRainSoundEffect(); + task->data[0] = 0; + task->func = task0A_fade_n_map_maybe; + break; + } +} + +void sub_80812C8(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + FreezeMapObjects(); + ScriptContext2_Enable(); + task->data[0]++; + break; + case 1: + if (!sub_8080E64() && sub_8054034()) + { + task->data[0]++; + } + break; + case 2: + warp_in(); + SetMainCallback2(sub_8054534); + DestroyTask(taskId); + break; + } +} + +void sub_8081334(void) +{ + ScriptContext2_Enable(); + sub_8053FF8(); + fade_8080918(); + PlayRainSoundEffect(); + PlaySE(SE_KAIDAN); + gFieldCallback = sub_8080B60; + CreateTask(sub_80812C8, 10); +} diff --git a/src/field/field_ground_effect.c b/src/field/field_ground_effect.c new file mode 100644 index 000000000..42862d0ff --- /dev/null +++ b/src/field/field_ground_effect.c @@ -0,0 +1,240 @@ +#include "global.h" +#include "field_ground_effect.h" +#include "fieldmap.h" +#include "metatile_behavior.h" + +extern u32 gUnknown_08376008[]; + +void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags) +{ + FieldObjectUpdateMetatileBehaviors(mapObj); + GetGroundEffectFlags_Reflection(mapObj, flags); + GetGroundEffectFlags_TallGrassOnSpawn(mapObj, flags); + GetGroundEffectFlags_LongGrassOnSpawn(mapObj, flags); + GetGroundEffectFlags_SandPile(mapObj, flags); + GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); + GetGroundEffectFlags_ShortGrass(mapObj, flags); + GetGroundEffectFlags_HotSprings(mapObj, flags); +} + +void GetAllGroundEffectFlags_OnBeginStep(struct MapObject *mapObj, u32 *flags) +{ + FieldObjectUpdateMetatileBehaviors(mapObj); + GetGroundEffectFlags_Reflection(mapObj, flags); + GetGroundEffectFlags_TallGrassOnBeginStep(mapObj, flags); + GetGroundEffectFlags_LongGrassOnBeginStep(mapObj, flags); + GetGroundEffectFlags_Tracks(mapObj, flags); + GetGroundEffectFlags_SandPile(mapObj, flags); + GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); + GetGroundEffectFlags_Puddle(mapObj, flags); + GetGroundEffectFlags_ShortGrass(mapObj, flags); + GetGroundEffectFlags_HotSprings(mapObj, flags); +} + +void GetAllGroundEffectFlags_OnFinishStep(struct MapObject *mapObj, u32 *flags) +{ + FieldObjectUpdateMetatileBehaviors(mapObj); + GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); + GetGroundEffectFlags_SandPile(mapObj, flags); + GetGroundEffectFlags_Puddle(mapObj, flags); + GetGroundEffectFlags_Ripple(mapObj, flags); + GetGroundEffectFlags_ShortGrass(mapObj, flags); + GetGroundEffectFlags_HotSprings(mapObj, flags); + GetGroundEffectFlags_Seaweed(mapObj, flags); + GetGroundEffectFlags_JumpLanding(mapObj, flags); +} + +void FieldObjectUpdateMetatileBehaviors(struct MapObject *mapObj) +{ + mapObj->mapobj_unk_1F = MapGridGetMetatileBehaviorAt(mapObj->coords3.x, mapObj->coords3.y); + mapObj->mapobj_unk_1E = MapGridGetMetatileBehaviorAt(mapObj->coords2.x, mapObj->coords2.y); +} + +void GetGroundEffectFlags_Reflection(struct MapObject *mapObj, u32 *flags) +{ + u32 reflectionFlags[2] = { 0x00000020, 0x00000010 }; + u8 type = FieldObjectCheckForReflectiveSurface(mapObj); + + if (type) + { + if (!mapObj->mapobj_bit_17) + { + mapObj->mapobj_bit_17 = 0; + mapObj->mapobj_bit_17 = 1; + *flags |= reflectionFlags[type - 1]; + } + } + else + { + mapObj->mapobj_bit_17 = 0; + } +} + +void GetGroundEffectFlags_TallGrassOnSpawn(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsTallGrass(mapObj->mapobj_unk_1E)) + *flags |= 0x1; +} + +void GetGroundEffectFlags_TallGrassOnBeginStep(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsTallGrass(mapObj->mapobj_unk_1E)) + *flags |= 0x2; +} + +void GetGroundEffectFlags_LongGrassOnSpawn(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1E)) + *flags |= 0x4; +} + +void GetGroundEffectFlags_LongGrassOnBeginStep(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1E)) + *flags |= 0x8; +} + +void GetGroundEffectFlags_Tracks(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F)) + { + *flags |= 0x100; + } + else if (MetatileBehavior_IsSandOrDeepSand(mapObj->mapobj_unk_1F) + || MetatileBehavior_IsUnusedFootprintMetatile(mapObj->mapobj_unk_1F)) + { + *flags |= 0x80; + } +} + +void GetGroundEffectFlags_SandPile(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F)) + { + if (!mapObj->mapobj_bit_20) + { + mapObj->mapobj_bit_20 = 0; + mapObj->mapobj_bit_20 = 1; + *flags |= 0x800; + } + } + else + { + mapObj->mapobj_bit_20 = 0; + } +} + +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 (!mapObj->mapobj_bit_19) + { + mapObj->mapobj_bit_19 = 0; + mapObj->mapobj_bit_19 = 1; + *flags |= 0x40; + } + } + else + { + mapObj->mapobj_bit_19 = 0; + } +} + +void GetGroundEffectFlags_Puddle(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1F)) + { + *flags |= 0x400; + } +} + +void GetGroundEffectFlags_Ripple(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_HasRipples(mapObj->mapobj_unk_1E)) + *flags |= 0x200; +} + +void GetGroundEffectFlags_ShortGrass(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1F)) + { + if (!mapObj->mapobj_bit_18) + { + mapObj->mapobj_bit_18 = 0; + mapObj->mapobj_bit_18 = 1; + *flags |= 0x20000; + } + } + else + { + mapObj->mapobj_bit_18 = 0; + } +} + +void GetGroundEffectFlags_HotSprings(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1E) + && MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1F)) + { + if (!mapObj->mapobj_bit_21) + { + mapObj->mapobj_bit_21 = 0; + mapObj->mapobj_bit_21 = 1; + *flags |= 0x40000; + } + } + else + { + mapObj->mapobj_bit_21 = 0; + } +} + +void GetGroundEffectFlags_Seaweed(struct MapObject *mapObj, u32 *flags) +{ + if (MetatileBehavior_IsSeaweed(mapObj->mapobj_unk_1E)) + *flags |= 0x80000; +} + +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) + { + u8 i; + + for (i = 0; i < 6; i++) + { + if (metatileFuncs[i](mapObj->mapobj_unk_1E)) + { + *flags |= jumpLandingFlags[i]; + return; + } + } + } +} diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c new file mode 100644 index 000000000..f60b1b233 --- /dev/null +++ b/src/field/field_map_obj.c @@ -0,0 +1,8474 @@ +#include "global.h" +#include "field_map_obj.h" +#include "berry.h" +#include "event_data.h" +#include "field_camera.h" +#include "field_effect.h" +#include "field_effect_helpers.h" +#include "field_ground_effect.h" +#include "field_map_obj_helpers.h" +#include "field_player_avatar.h" +#include "fieldmap.h" +#include "palette.h" +#include "rng.h" +#include "rom4.h" +#include "sprite.h" +#include "metatile_behavior.h" +#include "map_constants.h" +#include "map_object_constants.h" +#include "trainer_see.h" + +// rodata + +const u8 gUnknown_0830FD14[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0}; + +void ObjectCB_CameraObject(struct Sprite *sprite); +const struct SpriteTemplate gSpriteTemplate_830FD24 = {0, 0xFFFF, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, ObjectCB_CameraObject}; + +void CameraObject_0(struct Sprite *); +void CameraObject_1(struct Sprite *); +void CameraObject_2(struct Sprite *); +void (*const gCameraObjectFuncs[])(struct Sprite *) = { + CameraObject_0, + CameraObject_1, + CameraObject_2, +}; + +const u32 gMapObjectPic_BrendanNormal_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/00.4bpp"); +const u32 gMapObjectPic_BrendanNormal_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/01.4bpp"); +const u32 gMapObjectPic_BrendanNormal_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/02.4bpp"); +const u32 gMapObjectPic_BrendanNormal_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/03.4bpp"); +const u32 gMapObjectPic_BrendanNormal_4[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/04.4bpp"); +const u32 gMapObjectPic_BrendanNormal_5[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/05.4bpp"); +const u32 gMapObjectPic_BrendanNormal_6[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/06.4bpp"); +const u32 gMapObjectPic_BrendanNormal_7[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/07.4bpp"); +const u32 gMapObjectPic_BrendanNormal_8[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/08.4bpp"); +const u32 gMapObjectPic_BrendanNormal_9[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/09.4bpp"); +const u32 gMapObjectPic_BrendanNormal_10[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/10.4bpp"); +const u32 gMapObjectPic_BrendanNormal_11[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/11.4bpp"); +const u32 gMapObjectPic_BrendanNormal_12[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/12.4bpp"); +const u32 gMapObjectPic_BrendanNormal_13[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/13.4bpp"); +const u32 gMapObjectPic_BrendanNormal_14[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/14.4bpp"); +const u32 gMapObjectPic_BrendanNormal_15[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/15.4bpp"); +const u32 gMapObjectPic_BrendanNormal_16[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/16.4bpp"); +const u32 gMapObjectPic_BrendanNormal_17[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/17.4bpp"); +const u16 gMapObjectPalette8[] = INCBIN_U16("graphics/map_objects/palettes/08.gbapal"); +const u16 NullPalette_8310F68[16] = {}; +const u16 NullPalette_8310F88[16] = {}; +const u16 NullPalette_8310FA8[16] = {}; +const u16 NullPalette_8310FC8[16] = {}; +const u16 NullPalette_8310FE8[16] = {}; +const u16 NullPalette_8311008[16] = {}; +const u16 NullPalette_8311028[16] = {}; +const u16 NullPalette_8311048[16] = {}; +const u16 NullPalette_8311068[16] = {}; +const u16 NullPalette_8311088[16] = {}; +const u16 NullPalette_83110A8[16] = {}; +const u16 NullPalette_83110C8[16] = {}; +const u16 NullPalette_83110E8[16] = {}; +const u16 NullPalette_8311108[16] = {}; +const u16 NullPalette_8311128[16] = {}; +const u16 gMapObjectPalette9[] = INCBIN_U16("graphics/map_objects/palettes/09.gbapal"); +const u16 gMapObjectPalette10[] = INCBIN_U16("graphics/map_objects/palettes/10.gbapal"); +const u32 gMapObjectPic_BrendanFieldMove_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/field_move/0.4bpp"); +const u32 gMapObjectPic_BrendanFieldMove_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/field_move/1.4bpp"); +const u32 gMapObjectPic_BrendanFieldMove_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/field_move/2.4bpp"); +const u32 gMapObjectPic_BrendanFieldMove_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/field_move/3.4bpp"); +const u32 gMapObjectPic_BrendanFieldMove_4[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/field_move/4.4bpp"); +const u32 gMapObjectPic_BrendanSurfing_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/surfing/0.4bpp"); +const u32 gMapObjectPic_BrendanSurfing_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/surfing/3.4bpp"); +const u32 gMapObjectPic_BrendanSurfing_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/surfing/1.4bpp"); +const u32 gMapObjectPic_BrendanSurfing_4[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/surfing/4.4bpp"); +const u32 gMapObjectPic_BrendanSurfing_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/surfing/2.4bpp"); +const u32 gMapObjectPic_BrendanSurfing_5[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/surfing/5.4bpp"); +const u32 gMapObjectPic_BrendanMachBike_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/0.4bpp"); +const u32 gMapObjectPic_BrendanMachBike_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/1.4bpp"); +const u32 gMapObjectPic_BrendanMachBike_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/2.4bpp"); +const u32 gMapObjectPic_BrendanMachBike_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/3.4bpp"); +const u32 gMapObjectPic_BrendanMachBike_4[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/4.4bpp"); +const u32 gMapObjectPic_BrendanMachBike_5[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/5.4bpp"); +const u32 gMapObjectPic_BrendanMachBike_6[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/6.4bpp"); +const u32 gMapObjectPic_BrendanMachBike_7[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/7.4bpp"); +const u32 gMapObjectPic_BrendanMachBike_8[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/8.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/00.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/01.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/02.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/03.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_4[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/04.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_5[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/05.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_6[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/06.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_7[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/07.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_8[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/08.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_9[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/09.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_10[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/10.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_11[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/11.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_12[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/12.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_13[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/13.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_14[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/14.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_15[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/15.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_16[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/16.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_17[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/17.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_18[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/18.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_19[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/19.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_20[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/20.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_21[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/21.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_22[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/22.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_23[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/23.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_24[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/24.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_25[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/25.4bpp"); +const u32 gMapObjectPic_BrendanAcroBike_26[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/26.4bpp"); +const u32 gMapObjectPic_BrendanFishing_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/00.4bpp"); +const u32 gMapObjectPic_BrendanFishing_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/01.4bpp"); +const u32 gMapObjectPic_BrendanFishing_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/02.4bpp"); +const u32 gMapObjectPic_BrendanFishing_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/03.4bpp"); +const u32 gMapObjectPic_BrendanFishing_4[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/04.4bpp"); +const u32 gMapObjectPic_BrendanFishing_5[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/05.4bpp"); +const u32 gMapObjectPic_BrendanFishing_6[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/06.4bpp"); +const u32 gMapObjectPic_BrendanFishing_7[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/07.4bpp"); +const u32 gMapObjectPic_BrendanFishing_8[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/08.4bpp"); +const u32 gMapObjectPic_BrendanFishing_9[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/09.4bpp"); +const u32 gMapObjectPic_BrendanFishing_10[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/10.4bpp"); +const u32 gMapObjectPic_BrendanFishing_11[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/11.4bpp"); +const u32 gMapObjectPic_BrendanWatering_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/watering/0.4bpp"); +const u32 gMapObjectPic_BrendanWatering_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/watering/3.4bpp"); +const u32 gMapObjectPic_BrendanWatering_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/watering/1.4bpp"); +const u32 gMapObjectPic_BrendanWatering_4[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/watering/4.4bpp"); +const u32 gMapObjectPic_BrendanWatering_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/watering/2.4bpp"); +const u32 gMapObjectPic_BrendanWatering_5[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/watering/5.4bpp"); +const u32 gMapObjectPic_BrendanDecorating[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/decorating.4bpp"); +const u32 gMapObjectPic_MayDecorating[] = INCBIN_U32("graphics/map_objects/pics/people/may/decorating.4bpp"); +const u32 gMapObjectPic_BrendanUnderwater_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/underwater/0.4bpp"); +const u32 gMapObjectPic_BrendanUnderwater_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/underwater/1.4bpp"); +const u32 gMapObjectPic_BrendanUnderwater_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/underwater/2.4bpp"); +const u32 gMapObjectPic_BrendanUnderwater_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/underwater/3.4bpp"); +const u32 gMapObjectPic_MayUnderwater_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/underwater/0.4bpp"); +const u32 gMapObjectPic_MayUnderwater_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/underwater/1.4bpp"); +const u32 gMapObjectPic_MayUnderwater_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/underwater/2.4bpp"); +const u32 gMapObjectPic_MayUnderwater_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/underwater/3.4bpp"); +const u16 gMapObjectPalette11[] = INCBIN_U16("graphics/map_objects/palettes/11.gbapal"); +const u32 gMapObjectPic_MayNormal_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/00.4bpp"); +const u32 gMapObjectPic_MayNormal_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/01.4bpp"); +const u32 gMapObjectPic_MayNormal_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/02.4bpp"); +const u32 gMapObjectPic_MayNormal_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/03.4bpp"); +const u32 gMapObjectPic_MayNormal_4[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/04.4bpp"); +const u32 gMapObjectPic_MayNormal_5[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/05.4bpp"); +const u32 gMapObjectPic_MayNormal_6[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/06.4bpp"); +const u32 gMapObjectPic_MayNormal_7[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/07.4bpp"); +const u32 gMapObjectPic_MayNormal_8[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/08.4bpp"); +const u32 gMapObjectPic_MayNormal_9[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/09.4bpp"); +const u32 gMapObjectPic_MayNormal_10[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/10.4bpp"); +const u32 gMapObjectPic_MayNormal_11[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/11.4bpp"); +const u32 gMapObjectPic_MayNormal_12[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/12.4bpp"); +const u32 gMapObjectPic_MayNormal_13[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/13.4bpp"); +const u32 gMapObjectPic_MayNormal_14[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/14.4bpp"); +const u32 gMapObjectPic_MayNormal_15[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/15.4bpp"); +const u32 gMapObjectPic_MayNormal_16[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/16.4bpp"); +const u32 gMapObjectPic_MayNormal_17[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/17.4bpp"); +const u16 gMapObjectPalette17[] = INCBIN_U16("graphics/map_objects/palettes/17.gbapal"); +const u16 gMapObjectPalette18[] = INCBIN_U16("graphics/map_objects/palettes/18.gbapal"); +const u16 NullPalette_831B7E8[16] = {}; +const u16 NullPalette_831B808[16] = {}; +const u16 NullPalette_831B828[16] = {}; +const u16 NullPalette_831B848[16] = {}; +const u16 NullPalette_831B868[16] = {}; +const u16 NullPalette_831B888[16] = {}; +const u16 NullPalette_831B8A8[16] = {}; +const u16 NullPalette_831B8C8[16] = {}; +const u16 NullPalette_831B8E8[16] = {}; +const u16 NullPalette_831B908[16] = {}; +const u16 NullPalette_831B928[16] = {}; +const u16 NullPalette_831B948[16] = {}; +const u16 NullPalette_831B968[16] = {}; +const u16 NullPalette_831B988[16] = {}; +const u32 gMapObjectPic_MayMachBike_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/0.4bpp"); +const u32 gMapObjectPic_MayMachBike_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/1.4bpp"); +const u32 gMapObjectPic_MayMachBike_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/2.4bpp"); +const u32 gMapObjectPic_MayMachBike_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/3.4bpp"); +const u32 gMapObjectPic_MayMachBike_4[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/4.4bpp"); +const u32 gMapObjectPic_MayMachBike_5[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/5.4bpp"); +const u32 gMapObjectPic_MayMachBike_6[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/6.4bpp"); +const u32 gMapObjectPic_MayMachBike_7[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/7.4bpp"); +const u32 gMapObjectPic_MayMachBike_8[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/8.4bpp"); +const u32 gMapObjectPic_MayAcroBike_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/00.4bpp"); +const u32 gMapObjectPic_MayAcroBike_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/01.4bpp"); +const u32 gMapObjectPic_MayAcroBike_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/02.4bpp"); +const u32 gMapObjectPic_MayAcroBike_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/03.4bpp"); +const u32 gMapObjectPic_MayAcroBike_4[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/04.4bpp"); +const u32 gMapObjectPic_MayAcroBike_5[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/05.4bpp"); +const u32 gMapObjectPic_MayAcroBike_6[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/06.4bpp"); +const u32 gMapObjectPic_MayAcroBike_7[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/07.4bpp"); +const u32 gMapObjectPic_MayAcroBike_8[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/08.4bpp"); +const u32 gMapObjectPic_MayAcroBike_9[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/09.4bpp"); +const u32 gMapObjectPic_MayAcroBike_10[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/10.4bpp"); +const u32 gMapObjectPic_MayAcroBike_11[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/11.4bpp"); +const u32 gMapObjectPic_MayAcroBike_12[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/12.4bpp"); +const u32 gMapObjectPic_MayAcroBike_13[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/13.4bpp"); +const u32 gMapObjectPic_MayAcroBike_14[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/14.4bpp"); +const u32 gMapObjectPic_MayAcroBike_15[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/15.4bpp"); +const u32 gMapObjectPic_MayAcroBike_16[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/16.4bpp"); +const u32 gMapObjectPic_MayAcroBike_17[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/17.4bpp"); +const u32 gMapObjectPic_MayAcroBike_18[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/18.4bpp"); +const u32 gMapObjectPic_MayAcroBike_19[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/19.4bpp"); +const u32 gMapObjectPic_MayAcroBike_20[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/20.4bpp"); +const u32 gMapObjectPic_MayAcroBike_21[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/21.4bpp"); +const u32 gMapObjectPic_MayAcroBike_22[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/22.4bpp"); +const u32 gMapObjectPic_MayAcroBike_23[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/23.4bpp"); +const u32 gMapObjectPic_MayAcroBike_24[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/24.4bpp"); +const u32 gMapObjectPic_MayAcroBike_25[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/25.4bpp"); +const u32 gMapObjectPic_MayAcroBike_26[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/26.4bpp"); +const u32 gMapObjectPic_MaySurfing_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/surfing/0.4bpp"); +const u32 gMapObjectPic_MaySurfing_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/surfing/3.4bpp"); +const u32 gMapObjectPic_MaySurfing_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/surfing/1.4bpp"); +const u32 gMapObjectPic_MaySurfing_4[] = INCBIN_U32("graphics/map_objects/pics/people/may/surfing/4.4bpp"); +const u32 gMapObjectPic_MaySurfing_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/surfing/2.4bpp"); +const u32 gMapObjectPic_MaySurfing_5[] = INCBIN_U32("graphics/map_objects/pics/people/may/surfing/5.4bpp"); +const u32 gMapObjectPic_MayFieldMove_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/field_move/0.4bpp"); +const u32 gMapObjectPic_MayFieldMove_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/field_move/1.4bpp"); +const u32 gMapObjectPic_MayFieldMove_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/field_move/2.4bpp"); +const u32 gMapObjectPic_MayFieldMove_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/field_move/3.4bpp"); +const u32 gMapObjectPic_MayFieldMove_4[] = INCBIN_U32("graphics/map_objects/pics/people/may/field_move/4.4bpp"); +const u32 gMapObjectPic_MayFishing_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/00.4bpp"); +const u32 gMapObjectPic_MayFishing_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/01.4bpp"); +const u32 gMapObjectPic_MayFishing_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/02.4bpp"); +const u32 gMapObjectPic_MayFishing_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/03.4bpp"); +const u32 gMapObjectPic_MayFishing_4[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/04.4bpp"); +const u32 gMapObjectPic_MayFishing_5[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/05.4bpp"); +const u32 gMapObjectPic_MayFishing_6[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/06.4bpp"); +const u32 gMapObjectPic_MayFishing_7[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/07.4bpp"); +const u32 gMapObjectPic_MayFishing_8[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/08.4bpp"); +const u32 gMapObjectPic_MayFishing_9[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/09.4bpp"); +const u32 gMapObjectPic_MayFishing_10[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/10.4bpp"); +const u32 gMapObjectPic_MayFishing_11[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/11.4bpp"); +const u32 gMapObjectPic_MayWatering_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/watering/0.4bpp"); +const u32 gMapObjectPic_MayWatering_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/watering/3.4bpp"); +const u32 gMapObjectPic_MayWatering_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/watering/1.4bpp"); +const u32 gMapObjectPic_MayWatering_4[] = INCBIN_U32("graphics/map_objects/pics/people/may/watering/4.4bpp"); +const u32 gMapObjectPic_MayWatering_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/watering/2.4bpp"); +const u32 gMapObjectPic_MayWatering_5[] = INCBIN_U32("graphics/map_objects/pics/people/may/watering/5.4bpp"); +const u16 gMapObjectPalette0[] = INCBIN_U16("graphics/map_objects/palettes/00.gbapal"); +const u16 gMapObjectPalette1[] = INCBIN_U16("graphics/map_objects/palettes/01.gbapal"); +const u16 gMapObjectPalette2[] = INCBIN_U16("graphics/map_objects/palettes/02.gbapal"); +const u16 gMapObjectPalette3[] = INCBIN_U16("graphics/map_objects/palettes/03.gbapal"); +const u16 gMapObjectPalette4[] = INCBIN_U16("graphics/map_objects/palettes/04.gbapal"); +const u16 gMapObjectPalette5[] = INCBIN_U16("graphics/map_objects/palettes/05.gbapal"); +const u16 gMapObjectPalette6[] = INCBIN_U16("graphics/map_objects/palettes/06.gbapal"); +const u16 gMapObjectPalette7[] = INCBIN_U16("graphics/map_objects/palettes/07.gbapal"); +const u32 gMapObjectPic_LittleBoy1_0[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/0.4bpp"); +const u32 gMapObjectPic_LittleBoy1_1[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/1.4bpp"); +const u32 gMapObjectPic_LittleBoy1_2[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/2.4bpp"); +const u32 gMapObjectPic_LittleBoy1_3[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/3.4bpp"); +const u32 gMapObjectPic_LittleBoy1_4[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/4.4bpp"); +const u32 gMapObjectPic_LittleBoy1_5[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/5.4bpp"); +const u32 gMapObjectPic_LittleBoy1_6[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/6.4bpp"); +const u32 gMapObjectPic_LittleBoy1_7[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/7.4bpp"); +const u32 gMapObjectPic_LittleBoy1_8[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/8.4bpp"); +const u32 gMapObjectPic_LittleGirl1_0[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/0.4bpp"); +const u32 gMapObjectPic_LittleGirl1_1[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/1.4bpp"); +const u32 gMapObjectPic_LittleGirl1_2[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/2.4bpp"); +const u32 gMapObjectPic_LittleGirl1_3[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/3.4bpp"); +const u32 gMapObjectPic_LittleGirl1_4[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/4.4bpp"); +const u32 gMapObjectPic_LittleGirl1_5[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/5.4bpp"); +const u32 gMapObjectPic_LittleGirl1_6[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/6.4bpp"); +const u32 gMapObjectPic_LittleGirl1_7[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/7.4bpp"); +const u32 gMapObjectPic_LittleGirl1_8[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/8.4bpp"); +const u32 gMapObjectPic_Boy1_0[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/0.4bpp"); +const u32 gMapObjectPic_Boy1_1[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/1.4bpp"); +const u32 gMapObjectPic_Boy1_2[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/2.4bpp"); +const u32 gMapObjectPic_Boy1_3[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/3.4bpp"); +const u32 gMapObjectPic_Boy1_4[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/4.4bpp"); +const u32 gMapObjectPic_Boy1_5[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/5.4bpp"); +const u32 gMapObjectPic_Boy1_6[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/6.4bpp"); +const u32 gMapObjectPic_Boy1_7[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/7.4bpp"); +const u32 gMapObjectPic_Boy1_8[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/8.4bpp"); +const u32 gMapObjectPic_Girl1_0[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/0.4bpp"); +const u32 gMapObjectPic_Girl1_1[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/1.4bpp"); +const u32 gMapObjectPic_Girl1_2[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/2.4bpp"); +const u32 gMapObjectPic_Girl1_3[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/3.4bpp"); +const u32 gMapObjectPic_Girl1_4[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/4.4bpp"); +const u32 gMapObjectPic_Girl1_5[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/5.4bpp"); +const u32 gMapObjectPic_Girl1_6[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/6.4bpp"); +const u32 gMapObjectPic_Girl1_7[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/7.4bpp"); +const u32 gMapObjectPic_Girl1_8[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/8.4bpp"); +const u32 gMapObjectPic_Boy2_0[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/0.4bpp"); +const u32 gMapObjectPic_Boy2_1[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/1.4bpp"); +const u32 gMapObjectPic_Boy2_2[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/2.4bpp"); +const u32 gMapObjectPic_Boy2_3[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/3.4bpp"); +const u32 gMapObjectPic_Boy2_4[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/4.4bpp"); +const u32 gMapObjectPic_Boy2_5[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/5.4bpp"); +const u32 gMapObjectPic_Boy2_6[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/6.4bpp"); +const u32 gMapObjectPic_Boy2_7[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/7.4bpp"); +const u32 gMapObjectPic_Boy2_8[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/8.4bpp"); +const u32 gMapObjectPic_Girl2_0[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/0.4bpp"); +const u32 gMapObjectPic_Girl2_1[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/1.4bpp"); +const u32 gMapObjectPic_Girl2_2[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/2.4bpp"); +const u32 gMapObjectPic_Girl2_3[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/3.4bpp"); +const u32 gMapObjectPic_Girl2_4[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/4.4bpp"); +const u32 gMapObjectPic_Girl2_5[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/5.4bpp"); +const u32 gMapObjectPic_Girl2_6[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/6.4bpp"); +const u32 gMapObjectPic_Girl2_7[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/7.4bpp"); +const u32 gMapObjectPic_Girl2_8[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/8.4bpp"); +const u32 gMapObjectPic_LittleBoy2_0[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/0.4bpp"); +const u32 gMapObjectPic_LittleBoy2_1[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/1.4bpp"); +const u32 gMapObjectPic_LittleBoy2_2[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/2.4bpp"); +const u32 gMapObjectPic_LittleBoy2_3[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/3.4bpp"); +const u32 gMapObjectPic_LittleBoy2_4[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/4.4bpp"); +const u32 gMapObjectPic_LittleBoy2_5[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/5.4bpp"); +const u32 gMapObjectPic_LittleBoy2_6[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/6.4bpp"); +const u32 gMapObjectPic_LittleBoy2_7[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/7.4bpp"); +const u32 gMapObjectPic_LittleBoy2_8[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/8.4bpp"); +const u32 gMapObjectPic_LittleGirl2_0[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/0.4bpp"); +const u32 gMapObjectPic_LittleGirl2_1[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/1.4bpp"); +const u32 gMapObjectPic_LittleGirl2_2[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/2.4bpp"); +const u32 gMapObjectPic_LittleGirl2_3[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/3.4bpp"); +const u32 gMapObjectPic_LittleGirl2_4[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/4.4bpp"); +const u32 gMapObjectPic_LittleGirl2_5[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/5.4bpp"); +const u32 gMapObjectPic_LittleGirl2_6[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/6.4bpp"); +const u32 gMapObjectPic_LittleGirl2_7[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/7.4bpp"); +const u32 gMapObjectPic_LittleGirl2_8[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/8.4bpp"); +const u32 gMapObjectPic_Boy3_0[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/0.4bpp"); +const u32 gMapObjectPic_Boy3_1[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/1.4bpp"); +const u32 gMapObjectPic_Boy3_2[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/2.4bpp"); +const u32 gMapObjectPic_Boy3_3[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/3.4bpp"); +const u32 gMapObjectPic_Boy3_4[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/4.4bpp"); +const u32 gMapObjectPic_Boy3_5[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/5.4bpp"); +const u32 gMapObjectPic_Boy3_6[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/6.4bpp"); +const u32 gMapObjectPic_Boy3_7[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/7.4bpp"); +const u32 gMapObjectPic_Boy3_8[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/8.4bpp"); +const u32 gMapObjectPic_Girl3_0[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/0.4bpp"); +const u32 gMapObjectPic_Girl3_1[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/1.4bpp"); +const u32 gMapObjectPic_Girl3_2[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/2.4bpp"); +const u32 gMapObjectPic_Girl3_3[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/3.4bpp"); +const u32 gMapObjectPic_Girl3_4[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/4.4bpp"); +const u32 gMapObjectPic_Girl3_5[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/5.4bpp"); +const u32 gMapObjectPic_Girl3_6[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/6.4bpp"); +const u32 gMapObjectPic_Girl3_7[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/7.4bpp"); +const u32 gMapObjectPic_Girl3_8[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/8.4bpp"); +const u32 gMapObjectPic_Boy4_0[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/0.4bpp"); +const u32 gMapObjectPic_Boy4_1[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/1.4bpp"); +const u32 gMapObjectPic_Boy4_2[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/2.4bpp"); +const u32 gMapObjectPic_Boy4_3[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/3.4bpp"); +const u32 gMapObjectPic_Boy4_4[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/4.4bpp"); +const u32 gMapObjectPic_Boy4_5[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/5.4bpp"); +const u32 gMapObjectPic_Boy4_6[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/6.4bpp"); +const u32 gMapObjectPic_Boy4_7[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/7.4bpp"); +const u32 gMapObjectPic_Boy4_8[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/8.4bpp"); +const u32 gMapObjectPic_Woman1_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/0.4bpp"); +const u32 gMapObjectPic_Woman1_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/1.4bpp"); +const u32 gMapObjectPic_Woman1_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/2.4bpp"); +const u32 gMapObjectPic_Woman1_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/3.4bpp"); +const u32 gMapObjectPic_Woman1_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/4.4bpp"); +const u32 gMapObjectPic_Woman1_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/5.4bpp"); +const u32 gMapObjectPic_Woman1_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/6.4bpp"); +const u32 gMapObjectPic_Woman1_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/7.4bpp"); +const u32 gMapObjectPic_Woman1_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/8.4bpp"); +const u32 gMapObjectPic_FatMan_0[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/0.4bpp"); +const u32 gMapObjectPic_FatMan_1[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/1.4bpp"); +const u32 gMapObjectPic_FatMan_2[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/2.4bpp"); +const u32 gMapObjectPic_FatMan_3[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/3.4bpp"); +const u32 gMapObjectPic_FatMan_4[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/4.4bpp"); +const u32 gMapObjectPic_FatMan_5[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/5.4bpp"); +const u32 gMapObjectPic_FatMan_6[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/6.4bpp"); +const u32 gMapObjectPic_FatMan_7[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/7.4bpp"); +const u32 gMapObjectPic_FatMan_8[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/8.4bpp"); +const u32 gMapObjectPic_Woman2_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/0.4bpp"); +const u32 gMapObjectPic_Woman2_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/1.4bpp"); +const u32 gMapObjectPic_Woman2_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/2.4bpp"); +const u32 gMapObjectPic_Woman2_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/3.4bpp"); +const u32 gMapObjectPic_Woman2_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/4.4bpp"); +const u32 gMapObjectPic_Woman2_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/5.4bpp"); +const u32 gMapObjectPic_Woman2_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/6.4bpp"); +const u32 gMapObjectPic_Woman2_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/7.4bpp"); +const u32 gMapObjectPic_Woman2_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/8.4bpp"); +const u32 gMapObjectPic_Man1_0[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/0.4bpp"); +const u32 gMapObjectPic_Man1_1[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/1.4bpp"); +const u32 gMapObjectPic_Man1_2[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/2.4bpp"); +const u32 gMapObjectPic_Man1_3[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/3.4bpp"); +const u32 gMapObjectPic_Man1_4[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/4.4bpp"); +const u32 gMapObjectPic_Man1_5[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/5.4bpp"); +const u32 gMapObjectPic_Man1_6[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/6.4bpp"); +const u32 gMapObjectPic_Man1_7[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/7.4bpp"); +const u32 gMapObjectPic_Man1_8[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/8.4bpp"); +const u32 gMapObjectPic_Woman3_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/0.4bpp"); +const u32 gMapObjectPic_Woman3_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/1.4bpp"); +const u32 gMapObjectPic_Woman3_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/2.4bpp"); +const u32 gMapObjectPic_Woman3_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/3.4bpp"); +const u32 gMapObjectPic_Woman3_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/4.4bpp"); +const u32 gMapObjectPic_Woman3_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/5.4bpp"); +const u32 gMapObjectPic_Woman3_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/6.4bpp"); +const u32 gMapObjectPic_Woman3_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/7.4bpp"); +const u32 gMapObjectPic_Woman3_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/8.4bpp"); +const u32 gMapObjectPic_OldMan1_0[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/0.4bpp"); +const u32 gMapObjectPic_OldMan1_1[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/1.4bpp"); +const u32 gMapObjectPic_OldMan1_2[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/2.4bpp"); +const u32 gMapObjectPic_OldMan1_3[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/3.4bpp"); +const u32 gMapObjectPic_OldMan1_4[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/4.4bpp"); +const u32 gMapObjectPic_OldMan1_5[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/5.4bpp"); +const u32 gMapObjectPic_OldMan1_6[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/6.4bpp"); +const u32 gMapObjectPic_OldMan1_7[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/7.4bpp"); +const u32 gMapObjectPic_OldMan1_8[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/8.4bpp"); +const u32 gMapObjectPic_OldWoman1_0[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/0.4bpp"); +const u32 gMapObjectPic_OldWoman1_1[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/1.4bpp"); +const u32 gMapObjectPic_OldWoman1_2[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/2.4bpp"); +const u32 gMapObjectPic_OldWoman1_3[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/3.4bpp"); +const u32 gMapObjectPic_OldWoman1_4[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/4.4bpp"); +const u32 gMapObjectPic_OldWoman1_5[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/5.4bpp"); +const u32 gMapObjectPic_OldWoman1_6[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/6.4bpp"); +const u32 gMapObjectPic_OldWoman1_7[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/7.4bpp"); +const u32 gMapObjectPic_OldWoman1_8[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/8.4bpp"); +const u32 gMapObjectPic_Man2_0[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/0.4bpp"); +const u32 gMapObjectPic_Man2_1[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/1.4bpp"); +const u32 gMapObjectPic_Man2_2[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/2.4bpp"); +const u32 gMapObjectPic_Man2_3[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/3.4bpp"); +const u32 gMapObjectPic_Man2_4[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/4.4bpp"); +const u32 gMapObjectPic_Man2_5[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/5.4bpp"); +const u32 gMapObjectPic_Man2_6[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/6.4bpp"); +const u32 gMapObjectPic_Man2_7[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/7.4bpp"); +const u32 gMapObjectPic_Man2_8[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/8.4bpp"); +const u32 gMapObjectPic_Woman4_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/0.4bpp"); +const u32 gMapObjectPic_Woman4_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/1.4bpp"); +const u32 gMapObjectPic_Woman4_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/2.4bpp"); +const u32 gMapObjectPic_Woman4_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/3.4bpp"); +const u32 gMapObjectPic_Woman4_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/4.4bpp"); +const u32 gMapObjectPic_Woman4_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/5.4bpp"); +const u32 gMapObjectPic_Woman4_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/6.4bpp"); +const u32 gMapObjectPic_Woman4_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/7.4bpp"); +const u32 gMapObjectPic_Woman4_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/8.4bpp"); +const u32 gMapObjectPic_Man3_0[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/0.4bpp"); +const u32 gMapObjectPic_Man3_1[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/1.4bpp"); +const u32 gMapObjectPic_Man3_2[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/2.4bpp"); +const u32 gMapObjectPic_Man3_3[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/3.4bpp"); +const u32 gMapObjectPic_Man3_4[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/4.4bpp"); +const u32 gMapObjectPic_Man3_5[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/5.4bpp"); +const u32 gMapObjectPic_Man3_6[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/6.4bpp"); +const u32 gMapObjectPic_Man3_7[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/7.4bpp"); +const u32 gMapObjectPic_Man3_8[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/8.4bpp"); +const u32 gMapObjectPic_Woman5_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/0.4bpp"); +const u32 gMapObjectPic_Woman5_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/1.4bpp"); +const u32 gMapObjectPic_Woman5_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/2.4bpp"); +const u32 gMapObjectPic_Woman5_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/3.4bpp"); +const u32 gMapObjectPic_Woman5_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/4.4bpp"); +const u32 gMapObjectPic_Woman5_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/5.4bpp"); +const u32 gMapObjectPic_Woman5_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/6.4bpp"); +const u32 gMapObjectPic_Woman5_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/7.4bpp"); +const u32 gMapObjectPic_Woman5_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/8.4bpp"); +const u32 gMapObjectPic_Cook_0[] = INCBIN_U32("graphics/map_objects/pics/people/cook/0.4bpp"); +const u32 gMapObjectPic_Cook_1[] = INCBIN_U32("graphics/map_objects/pics/people/cook/1.4bpp"); +const u32 gMapObjectPic_Cook_2[] = INCBIN_U32("graphics/map_objects/pics/people/cook/2.4bpp"); +const u32 gMapObjectPic_Woman6_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/0.4bpp"); +const u32 gMapObjectPic_Woman6_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/1.4bpp"); +const u32 gMapObjectPic_Woman6_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/2.4bpp"); +const u32 gMapObjectPic_Woman6_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/3.4bpp"); +const u32 gMapObjectPic_Woman6_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/4.4bpp"); +const u32 gMapObjectPic_Woman6_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/5.4bpp"); +const u32 gMapObjectPic_Woman6_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/6.4bpp"); +const u32 gMapObjectPic_Woman6_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/7.4bpp"); +const u32 gMapObjectPic_Woman6_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/8.4bpp"); +const u32 gMapObjectPic_OldMan2_0[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_2/0.4bpp"); +const u32 gMapObjectPic_OldMan2_1[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_2/1.4bpp"); +const u32 gMapObjectPic_OldMan2_2[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_2/2.4bpp"); +const u32 gMapObjectPic_OldWoman2_0[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_2/0.4bpp"); +const u32 gMapObjectPic_OldWoman2_1[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_2/1.4bpp"); +const u32 gMapObjectPic_OldWoman2_2[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_2/2.4bpp"); +const u32 gMapObjectPic_Camper_0[] = INCBIN_U32("graphics/map_objects/pics/people/camper/0.4bpp"); +const u32 gMapObjectPic_Camper_1[] = INCBIN_U32("graphics/map_objects/pics/people/camper/1.4bpp"); +const u32 gMapObjectPic_Camper_2[] = INCBIN_U32("graphics/map_objects/pics/people/camper/2.4bpp"); +const u32 gMapObjectPic_Camper_3[] = INCBIN_U32("graphics/map_objects/pics/people/camper/3.4bpp"); +const u32 gMapObjectPic_Camper_4[] = INCBIN_U32("graphics/map_objects/pics/people/camper/4.4bpp"); +const u32 gMapObjectPic_Camper_5[] = INCBIN_U32("graphics/map_objects/pics/people/camper/5.4bpp"); +const u32 gMapObjectPic_Camper_6[] = INCBIN_U32("graphics/map_objects/pics/people/camper/6.4bpp"); +const u32 gMapObjectPic_Camper_7[] = INCBIN_U32("graphics/map_objects/pics/people/camper/7.4bpp"); +const u32 gMapObjectPic_Camper_8[] = INCBIN_U32("graphics/map_objects/pics/people/camper/8.4bpp"); +const u32 gMapObjectPic_Picnicker_0[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/0.4bpp"); +const u32 gMapObjectPic_Picnicker_1[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/1.4bpp"); +const u32 gMapObjectPic_Picnicker_2[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/2.4bpp"); +const u32 gMapObjectPic_Picnicker_3[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/3.4bpp"); +const u32 gMapObjectPic_Picnicker_4[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/4.4bpp"); +const u32 gMapObjectPic_Picnicker_5[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/5.4bpp"); +const u32 gMapObjectPic_Picnicker_6[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/6.4bpp"); +const u32 gMapObjectPic_Picnicker_7[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/7.4bpp"); +const u32 gMapObjectPic_Picnicker_8[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/8.4bpp"); +const u32 gMapObjectPic_Man4_0[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/0.4bpp"); +const u32 gMapObjectPic_Man4_1[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/1.4bpp"); +const u32 gMapObjectPic_Man4_2[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/2.4bpp"); +const u32 gMapObjectPic_Man4_3[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/3.4bpp"); +const u32 gMapObjectPic_Man4_4[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/4.4bpp"); +const u32 gMapObjectPic_Man4_5[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/5.4bpp"); +const u32 gMapObjectPic_Man4_6[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/6.4bpp"); +const u32 gMapObjectPic_Man4_7[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/7.4bpp"); +const u32 gMapObjectPic_Man4_8[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/8.4bpp"); +const u32 gMapObjectPic_Woman7_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/0.4bpp"); +const u32 gMapObjectPic_Woman7_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/1.4bpp"); +const u32 gMapObjectPic_Woman7_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/2.4bpp"); +const u32 gMapObjectPic_Woman7_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/3.4bpp"); +const u32 gMapObjectPic_Woman7_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/4.4bpp"); +const u32 gMapObjectPic_Woman7_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/5.4bpp"); +const u32 gMapObjectPic_Woman7_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/6.4bpp"); +const u32 gMapObjectPic_Woman7_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/7.4bpp"); +const u32 gMapObjectPic_Woman7_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/8.4bpp"); +const u32 gMapObjectPic_Youngster_0[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/0.4bpp"); +const u32 gMapObjectPic_Youngster_1[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/1.4bpp"); +const u32 gMapObjectPic_Youngster_2[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/2.4bpp"); +const u32 gMapObjectPic_Youngster_3[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/3.4bpp"); +const u32 gMapObjectPic_Youngster_4[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/4.4bpp"); +const u32 gMapObjectPic_Youngster_5[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/5.4bpp"); +const u32 gMapObjectPic_Youngster_6[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/6.4bpp"); +const u32 gMapObjectPic_Youngster_7[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/7.4bpp"); +const u32 gMapObjectPic_Youngster_8[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/8.4bpp"); +const u32 gMapObjectPic_BugCatcher_0[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/0.4bpp"); +const u32 gMapObjectPic_BugCatcher_1[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/1.4bpp"); +const u32 gMapObjectPic_BugCatcher_2[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/2.4bpp"); +const u32 gMapObjectPic_BugCatcher_3[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/3.4bpp"); +const u32 gMapObjectPic_BugCatcher_4[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/4.4bpp"); +const u32 gMapObjectPic_BugCatcher_5[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/5.4bpp"); +const u32 gMapObjectPic_BugCatcher_6[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/6.4bpp"); +const u32 gMapObjectPic_BugCatcher_7[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/7.4bpp"); +const u32 gMapObjectPic_BugCatcher_8[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/8.4bpp"); +const u32 gMapObjectPic_PsychicM_0[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/0.4bpp"); +const u32 gMapObjectPic_PsychicM_1[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/1.4bpp"); +const u32 gMapObjectPic_PsychicM_2[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/2.4bpp"); +const u32 gMapObjectPic_PsychicM_3[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/3.4bpp"); +const u32 gMapObjectPic_PsychicM_4[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/4.4bpp"); +const u32 gMapObjectPic_PsychicM_5[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/5.4bpp"); +const u32 gMapObjectPic_PsychicM_6[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/6.4bpp"); +const u32 gMapObjectPic_PsychicM_7[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/7.4bpp"); +const u32 gMapObjectPic_PsychicM_8[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/8.4bpp"); +const u32 gMapObjectPic_SchoolKidM_0[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/0.4bpp"); +const u32 gMapObjectPic_SchoolKidM_1[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/1.4bpp"); +const u32 gMapObjectPic_SchoolKidM_2[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/2.4bpp"); +const u32 gMapObjectPic_SchoolKidM_3[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/3.4bpp"); +const u32 gMapObjectPic_SchoolKidM_4[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/4.4bpp"); +const u32 gMapObjectPic_SchoolKidM_5[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/5.4bpp"); +const u32 gMapObjectPic_SchoolKidM_6[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/6.4bpp"); +const u32 gMapObjectPic_SchoolKidM_7[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/7.4bpp"); +const u32 gMapObjectPic_SchoolKidM_8[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/8.4bpp"); +const u32 gMapObjectPic_Maniac_0[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/0.4bpp"); +const u32 gMapObjectPic_Maniac_1[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/1.4bpp"); +const u32 gMapObjectPic_Maniac_2[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/2.4bpp"); +const u32 gMapObjectPic_Maniac_3[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/3.4bpp"); +const u32 gMapObjectPic_Maniac_4[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/4.4bpp"); +const u32 gMapObjectPic_Maniac_5[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/5.4bpp"); +const u32 gMapObjectPic_Maniac_6[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/6.4bpp"); +const u32 gMapObjectPic_Maniac_7[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/7.4bpp"); +const u32 gMapObjectPic_Maniac_8[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/8.4bpp"); +const u32 gMapObjectPic_HexManiac_0[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/0.4bpp"); +const u32 gMapObjectPic_HexManiac_1[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/1.4bpp"); +const u32 gMapObjectPic_HexManiac_2[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/2.4bpp"); +const u32 gMapObjectPic_HexManiac_3[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/3.4bpp"); +const u32 gMapObjectPic_HexManiac_4[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/4.4bpp"); +const u32 gMapObjectPic_HexManiac_5[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/5.4bpp"); +const u32 gMapObjectPic_HexManiac_6[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/6.4bpp"); +const u32 gMapObjectPic_HexManiac_7[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/7.4bpp"); +const u32 gMapObjectPic_HexManiac_8[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/8.4bpp"); +const u32 gMapObjectPic_Woman8_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/0.4bpp"); +const u32 gMapObjectPic_Woman8_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/1.4bpp"); +const u32 gMapObjectPic_Woman8_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/2.4bpp"); +const u32 gMapObjectPic_Woman8_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/3.4bpp"); +const u32 gMapObjectPic_Woman8_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/4.4bpp"); +const u32 gMapObjectPic_Woman8_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/5.4bpp"); +const u32 gMapObjectPic_Woman8_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/6.4bpp"); +const u32 gMapObjectPic_Woman8_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/7.4bpp"); +const u32 gMapObjectPic_Woman8_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/8.4bpp"); +const u32 gMapObjectPic_SwimmerM_0[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/0.4bpp"); +const u32 gMapObjectPic_SwimmerM_1[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/1.4bpp"); +const u32 gMapObjectPic_SwimmerM_2[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/2.4bpp"); +const u32 gMapObjectPic_SwimmerM_3[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/3.4bpp"); +const u32 gMapObjectPic_SwimmerM_4[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/4.4bpp"); +const u32 gMapObjectPic_SwimmerM_5[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/5.4bpp"); +const u32 gMapObjectPic_SwimmerM_6[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/6.4bpp"); +const u32 gMapObjectPic_SwimmerM_7[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/7.4bpp"); +const u32 gMapObjectPic_SwimmerM_8[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/8.4bpp"); +const u32 gMapObjectPic_SwimmerF_0[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/0.4bpp"); +const u32 gMapObjectPic_SwimmerF_1[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/1.4bpp"); +const u32 gMapObjectPic_SwimmerF_2[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/2.4bpp"); +const u32 gMapObjectPic_SwimmerF_3[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/3.4bpp"); +const u32 gMapObjectPic_SwimmerF_4[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/4.4bpp"); +const u32 gMapObjectPic_SwimmerF_5[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/5.4bpp"); +const u32 gMapObjectPic_SwimmerF_6[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/6.4bpp"); +const u32 gMapObjectPic_SwimmerF_7[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/7.4bpp"); +const u32 gMapObjectPic_SwimmerF_8[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/8.4bpp"); +const u32 gMapObjectPic_BlackBelt_0[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/0.4bpp"); +const u32 gMapObjectPic_BlackBelt_1[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/1.4bpp"); +const u32 gMapObjectPic_BlackBelt_2[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/2.4bpp"); +const u32 gMapObjectPic_BlackBelt_3[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/3.4bpp"); +const u32 gMapObjectPic_BlackBelt_4[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/4.4bpp"); +const u32 gMapObjectPic_BlackBelt_5[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/5.4bpp"); +const u32 gMapObjectPic_BlackBelt_6[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/6.4bpp"); +const u32 gMapObjectPic_BlackBelt_7[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/7.4bpp"); +const u32 gMapObjectPic_BlackBelt_8[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/8.4bpp"); +const u32 gMapObjectPic_Beauty_0[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/0.4bpp"); +const u32 gMapObjectPic_Beauty_1[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/1.4bpp"); +const u32 gMapObjectPic_Beauty_2[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/2.4bpp"); +const u32 gMapObjectPic_Beauty_3[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/3.4bpp"); +const u32 gMapObjectPic_Beauty_4[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/4.4bpp"); +const u32 gMapObjectPic_Beauty_5[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/5.4bpp"); +const u32 gMapObjectPic_Beauty_6[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/6.4bpp"); +const u32 gMapObjectPic_Beauty_7[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/7.4bpp"); +const u32 gMapObjectPic_Beauty_8[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/8.4bpp"); +const u32 gMapObjectPic_Scientist1_0[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/0.4bpp"); +const u32 gMapObjectPic_Scientist1_1[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/1.4bpp"); +const u32 gMapObjectPic_Scientist1_2[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/2.4bpp"); +const u32 gMapObjectPic_Scientist1_3[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/3.4bpp"); +const u32 gMapObjectPic_Scientist1_4[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/4.4bpp"); +const u32 gMapObjectPic_Scientist1_5[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/5.4bpp"); +const u32 gMapObjectPic_Scientist1_6[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/6.4bpp"); +const u32 gMapObjectPic_Scientist1_7[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/7.4bpp"); +const u32 gMapObjectPic_Scientist1_8[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/8.4bpp"); +const u32 gMapObjectPic_Lass_0[] = INCBIN_U32("graphics/map_objects/pics/people/lass/0.4bpp"); +const u32 gMapObjectPic_Lass_1[] = INCBIN_U32("graphics/map_objects/pics/people/lass/1.4bpp"); +const u32 gMapObjectPic_Lass_2[] = INCBIN_U32("graphics/map_objects/pics/people/lass/2.4bpp"); +const u32 gMapObjectPic_Lass_3[] = INCBIN_U32("graphics/map_objects/pics/people/lass/3.4bpp"); +const u32 gMapObjectPic_Lass_4[] = INCBIN_U32("graphics/map_objects/pics/people/lass/4.4bpp"); +const u32 gMapObjectPic_Lass_5[] = INCBIN_U32("graphics/map_objects/pics/people/lass/5.4bpp"); +const u32 gMapObjectPic_Lass_6[] = INCBIN_U32("graphics/map_objects/pics/people/lass/6.4bpp"); +const u32 gMapObjectPic_Lass_7[] = INCBIN_U32("graphics/map_objects/pics/people/lass/7.4bpp"); +const u32 gMapObjectPic_Lass_8[] = INCBIN_U32("graphics/map_objects/pics/people/lass/8.4bpp"); +const u32 gMapObjectPic_Gentleman_0[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/0.4bpp"); +const u32 gMapObjectPic_Gentleman_1[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/1.4bpp"); +const u32 gMapObjectPic_Gentleman_2[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/2.4bpp"); +const u32 gMapObjectPic_Gentleman_3[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/3.4bpp"); +const u32 gMapObjectPic_Gentleman_4[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/4.4bpp"); +const u32 gMapObjectPic_Gentleman_5[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/5.4bpp"); +const u32 gMapObjectPic_Gentleman_6[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/6.4bpp"); +const u32 gMapObjectPic_Gentleman_7[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/7.4bpp"); +const u32 gMapObjectPic_Gentleman_8[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/8.4bpp"); +const u32 gMapObjectPic_Sailor_0[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/0.4bpp"); +const u32 gMapObjectPic_Sailor_1[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/1.4bpp"); +const u32 gMapObjectPic_Sailor_2[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/2.4bpp"); +const u32 gMapObjectPic_Sailor_3[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/3.4bpp"); +const u32 gMapObjectPic_Sailor_4[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/4.4bpp"); +const u32 gMapObjectPic_Sailor_5[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/5.4bpp"); +const u32 gMapObjectPic_Sailor_6[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/6.4bpp"); +const u32 gMapObjectPic_Sailor_7[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/7.4bpp"); +const u32 gMapObjectPic_Sailor_8[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/8.4bpp"); +const u32 gMapObjectPic_Fisherman_0[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/0.4bpp"); +const u32 gMapObjectPic_Fisherman_1[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/1.4bpp"); +const u32 gMapObjectPic_Fisherman_2[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/2.4bpp"); +const u32 gMapObjectPic_Fisherman_3[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/3.4bpp"); +const u32 gMapObjectPic_Fisherman_4[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/4.4bpp"); +const u32 gMapObjectPic_Fisherman_5[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/5.4bpp"); +const u32 gMapObjectPic_Fisherman_6[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/6.4bpp"); +const u32 gMapObjectPic_Fisherman_7[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/7.4bpp"); +const u32 gMapObjectPic_Fisherman_8[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/8.4bpp"); +const u32 gMapObjectPic_RunningTriathleteM_0[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/0.4bpp"); +const u32 gMapObjectPic_RunningTriathleteM_1[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/1.4bpp"); +const u32 gMapObjectPic_RunningTriathleteM_2[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/2.4bpp"); +const u32 gMapObjectPic_RunningTriathleteM_3[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/3.4bpp"); +const u32 gMapObjectPic_RunningTriathleteM_4[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/4.4bpp"); +const u32 gMapObjectPic_RunningTriathleteM_5[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/5.4bpp"); +const u32 gMapObjectPic_RunningTriathleteM_6[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/6.4bpp"); +const u32 gMapObjectPic_RunningTriathleteM_7[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/7.4bpp"); +const u32 gMapObjectPic_RunningTriathleteM_8[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/8.4bpp"); +const u32 gMapObjectPic_RunningTriathleteF_0[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/0.4bpp"); +const u32 gMapObjectPic_RunningTriathleteF_1[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/1.4bpp"); +const u32 gMapObjectPic_RunningTriathleteF_2[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/2.4bpp"); +const u32 gMapObjectPic_RunningTriathleteF_3[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/3.4bpp"); +const u32 gMapObjectPic_RunningTriathleteF_4[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/4.4bpp"); +const u32 gMapObjectPic_RunningTriathleteF_5[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/5.4bpp"); +const u32 gMapObjectPic_RunningTriathleteF_6[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/6.4bpp"); +const u32 gMapObjectPic_RunningTriathleteF_7[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/7.4bpp"); +const u32 gMapObjectPic_RunningTriathleteF_8[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/8.4bpp"); +const u32 gMapObjectPic_TuberF_0[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/0.4bpp"); +const u32 gMapObjectPic_TuberF_1[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/1.4bpp"); +const u32 gMapObjectPic_TuberF_2[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/2.4bpp"); +const u32 gMapObjectPic_TuberF_3[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/3.4bpp"); +const u32 gMapObjectPic_TuberF_4[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/4.4bpp"); +const u32 gMapObjectPic_TuberF_5[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/5.4bpp"); +const u32 gMapObjectPic_TuberF_6[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/6.4bpp"); +const u32 gMapObjectPic_TuberF_7[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/7.4bpp"); +const u32 gMapObjectPic_TuberF_8[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/8.4bpp"); +const u32 gMapObjectPic_TuberM_0[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/0.4bpp"); +const u32 gMapObjectPic_TuberM_1[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/1.4bpp"); +const u32 gMapObjectPic_TuberM_2[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/2.4bpp"); +const u32 gMapObjectPic_TuberM_3[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/3.4bpp"); +const u32 gMapObjectPic_TuberM_4[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/4.4bpp"); +const u32 gMapObjectPic_TuberM_5[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/5.4bpp"); +const u32 gMapObjectPic_TuberM_6[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/6.4bpp"); +const u32 gMapObjectPic_TuberM_7[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/7.4bpp"); +const u32 gMapObjectPic_TuberM_8[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/8.4bpp"); +const u32 gMapObjectPic_Hiker_0[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/0.4bpp"); +const u32 gMapObjectPic_Hiker_1[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/1.4bpp"); +const u32 gMapObjectPic_Hiker_2[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/2.4bpp"); +const u32 gMapObjectPic_Hiker_3[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/3.4bpp"); +const u32 gMapObjectPic_Hiker_4[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/4.4bpp"); +const u32 gMapObjectPic_Hiker_5[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/5.4bpp"); +const u32 gMapObjectPic_Hiker_6[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/6.4bpp"); +const u32 gMapObjectPic_Hiker_7[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/7.4bpp"); +const u32 gMapObjectPic_Hiker_8[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/8.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteM_0[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/0.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteM_1[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/1.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteM_2[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/2.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteM_3[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/3.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteM_4[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/4.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteM_5[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/5.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteM_6[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/6.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteM_7[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/7.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteM_8[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/8.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteF_0[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/0.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteF_1[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/1.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteF_2[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/2.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteF_3[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/3.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteF_4[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/4.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteF_5[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/5.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteF_6[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/6.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteF_7[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/7.4bpp"); +const u32 gMapObjectPic_CyclingTriathleteF_8[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/8.4bpp"); +const u32 gMapObjectPic_Man5_0[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/0.4bpp"); +const u32 gMapObjectPic_Man5_1[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/1.4bpp"); +const u32 gMapObjectPic_Man5_2[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/2.4bpp"); +const u32 gMapObjectPic_Man5_3[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/3.4bpp"); +const u32 gMapObjectPic_Man5_4[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/4.4bpp"); +const u32 gMapObjectPic_Man5_5[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/5.4bpp"); +const u32 gMapObjectPic_Man5_6[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/6.4bpp"); +const u32 gMapObjectPic_Man5_7[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/7.4bpp"); +const u32 gMapObjectPic_Man5_8[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/8.4bpp"); +const u32 gMapObjectPic_Man6_0[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/0.4bpp"); +const u32 gMapObjectPic_Man6_1[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/1.4bpp"); +const u32 gMapObjectPic_Man6_2[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/2.4bpp"); +const u32 gMapObjectPic_Man6_3[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/3.4bpp"); +const u32 gMapObjectPic_Man6_4[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/4.4bpp"); +const u32 gMapObjectPic_Man6_5[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/5.4bpp"); +const u32 gMapObjectPic_Man6_6[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/6.4bpp"); +const u32 gMapObjectPic_Man6_7[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/7.4bpp"); +const u32 gMapObjectPic_Man6_8[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/8.4bpp"); +const u32 gMapObjectPic_Nurse_0[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/0.4bpp"); +const u32 gMapObjectPic_Nurse_1[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/1.4bpp"); +const u32 gMapObjectPic_Nurse_2[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/2.4bpp"); +const u32 gMapObjectPic_Nurse_3[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/3.4bpp"); +const u32 gMapObjectPic_Nurse_4[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/4.4bpp"); +const u32 gMapObjectPic_Nurse_5[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/5.4bpp"); +const u32 gMapObjectPic_Nurse_6[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/6.4bpp"); +const u32 gMapObjectPic_Nurse_7[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/7.4bpp"); +const u32 gMapObjectPic_Nurse_8[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/8.4bpp"); +const u32 gMapObjectPic_Nurse_9[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/9.4bpp"); +const u32 gMapObjectPic_ItemBall[] = INCBIN_U32("graphics/map_objects/pics/misc/item_ball.4bpp"); +const u32 gMapObjectPic_ProfBirch_0[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/0.4bpp"); +const u32 gMapObjectPic_ProfBirch_1[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/1.4bpp"); +const u32 gMapObjectPic_ProfBirch_2[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/2.4bpp"); +const u32 gMapObjectPic_ProfBirch_3[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/3.4bpp"); +const u32 gMapObjectPic_ProfBirch_4[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/4.4bpp"); +const u32 gMapObjectPic_ProfBirch_5[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/5.4bpp"); +const u32 gMapObjectPic_ProfBirch_6[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/6.4bpp"); +const u32 gMapObjectPic_ProfBirch_7[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/7.4bpp"); +const u32 gMapObjectPic_ProfBirch_8[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/8.4bpp"); +const u32 gMapObjectPic_ReporterM_0[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/0.4bpp"); +const u32 gMapObjectPic_ReporterM_1[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/1.4bpp"); +const u32 gMapObjectPic_ReporterM_2[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/2.4bpp"); +const u32 gMapObjectPic_ReporterM_3[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/3.4bpp"); +const u32 gMapObjectPic_ReporterM_4[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/4.4bpp"); +const u32 gMapObjectPic_ReporterM_5[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/5.4bpp"); +const u32 gMapObjectPic_ReporterM_6[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/6.4bpp"); +const u32 gMapObjectPic_ReporterM_7[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/7.4bpp"); +const u32 gMapObjectPic_ReporterM_8[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/8.4bpp"); +const u32 gMapObjectPic_ReporterF_0[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/0.4bpp"); +const u32 gMapObjectPic_ReporterF_1[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/1.4bpp"); +const u32 gMapObjectPic_ReporterF_2[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/2.4bpp"); +const u32 gMapObjectPic_ReporterF_3[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/3.4bpp"); +const u32 gMapObjectPic_ReporterF_4[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/4.4bpp"); +const u32 gMapObjectPic_ReporterF_5[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/5.4bpp"); +const u32 gMapObjectPic_ReporterF_6[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/6.4bpp"); +const u32 gMapObjectPic_ReporterF_7[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/7.4bpp"); +const u32 gMapObjectPic_ReporterF_8[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/8.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan1_0[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/0.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan1_1[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/1.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan1_2[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/2.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan1_3[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/3.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan1_4[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/4.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan1_5[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/5.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan1_6[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/6.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan1_7[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/7.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan1_8[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/8.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan2_0[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/0.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan2_1[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/1.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan2_2[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/2.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan2_3[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/3.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan2_4[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/4.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan2_5[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/5.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan2_6[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/6.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan2_7[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/7.4bpp"); +const u32 gMapObjectPic_MauvilleOldMan2_8[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/8.4bpp"); +const u32 gMapObjectPic_MartEmployee_0[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/0.4bpp"); +const u32 gMapObjectPic_MartEmployee_1[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/1.4bpp"); +const u32 gMapObjectPic_MartEmployee_2[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/2.4bpp"); +const u32 gMapObjectPic_MartEmployee_3[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/3.4bpp"); +const u32 gMapObjectPic_MartEmployee_4[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/4.4bpp"); +const u32 gMapObjectPic_MartEmployee_5[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/5.4bpp"); +const u32 gMapObjectPic_MartEmployee_6[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/6.4bpp"); +const u32 gMapObjectPic_MartEmployee_7[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/7.4bpp"); +const u32 gMapObjectPic_MartEmployee_8[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/8.4bpp"); +const u32 gMapObjectPic_RooftopSaleWoman_0[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/0.4bpp"); +const u32 gMapObjectPic_RooftopSaleWoman_1[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/1.4bpp"); +const u32 gMapObjectPic_RooftopSaleWoman_2[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/2.4bpp"); +const u32 gMapObjectPic_RooftopSaleWoman_3[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/3.4bpp"); +const u32 gMapObjectPic_RooftopSaleWoman_4[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/4.4bpp"); +const u32 gMapObjectPic_RooftopSaleWoman_5[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/5.4bpp"); +const u32 gMapObjectPic_RooftopSaleWoman_6[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/6.4bpp"); +const u32 gMapObjectPic_RooftopSaleWoman_7[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/7.4bpp"); +const u32 gMapObjectPic_RooftopSaleWoman_8[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/8.4bpp"); +const u32 gMapObjectPic_Teala_0[] = INCBIN_U32("graphics/map_objects/pics/people/teala/0.4bpp"); +const u32 gMapObjectPic_Teala_1[] = INCBIN_U32("graphics/map_objects/pics/people/teala/1.4bpp"); +const u32 gMapObjectPic_Teala_2[] = INCBIN_U32("graphics/map_objects/pics/people/teala/2.4bpp"); +const u32 gMapObjectPic_Teala_3[] = INCBIN_U32("graphics/map_objects/pics/people/teala/3.4bpp"); +const u32 gMapObjectPic_Teala_4[] = INCBIN_U32("graphics/map_objects/pics/people/teala/4.4bpp"); +const u32 gMapObjectPic_Teala_5[] = INCBIN_U32("graphics/map_objects/pics/people/teala/5.4bpp"); +const u32 gMapObjectPic_Teala_6[] = INCBIN_U32("graphics/map_objects/pics/people/teala/6.4bpp"); +const u32 gMapObjectPic_Teala_7[] = INCBIN_U32("graphics/map_objects/pics/people/teala/7.4bpp"); +const u32 gMapObjectPic_Teala_8[] = INCBIN_U32("graphics/map_objects/pics/people/teala/8.4bpp"); +const u32 gMapObjectPic_Artist_0[] = INCBIN_U32("graphics/map_objects/pics/people/artist/0.4bpp"); +const u32 gMapObjectPic_Artist_1[] = INCBIN_U32("graphics/map_objects/pics/people/artist/1.4bpp"); +const u32 gMapObjectPic_Artist_2[] = INCBIN_U32("graphics/map_objects/pics/people/artist/2.4bpp"); +const u32 gMapObjectPic_Artist_3[] = INCBIN_U32("graphics/map_objects/pics/people/artist/3.4bpp"); +const u32 gMapObjectPic_Artist_4[] = INCBIN_U32("graphics/map_objects/pics/people/artist/4.4bpp"); +const u32 gMapObjectPic_Artist_5[] = INCBIN_U32("graphics/map_objects/pics/people/artist/5.4bpp"); +const u32 gMapObjectPic_Artist_6[] = INCBIN_U32("graphics/map_objects/pics/people/artist/6.4bpp"); +const u32 gMapObjectPic_Artist_7[] = INCBIN_U32("graphics/map_objects/pics/people/artist/7.4bpp"); +const u32 gMapObjectPic_Artist_8[] = INCBIN_U32("graphics/map_objects/pics/people/artist/8.4bpp"); +const u32 gMapObjectPic_Cameraman_0[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/0.4bpp"); +const u32 gMapObjectPic_Cameraman_1[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/1.4bpp"); +const u32 gMapObjectPic_Cameraman_2[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/2.4bpp"); +const u32 gMapObjectPic_Cameraman_3[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/3.4bpp"); +const u32 gMapObjectPic_Cameraman_4[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/4.4bpp"); +const u32 gMapObjectPic_Cameraman_5[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/5.4bpp"); +const u32 gMapObjectPic_Cameraman_6[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/6.4bpp"); +const u32 gMapObjectPic_Cameraman_7[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/7.4bpp"); +const u32 gMapObjectPic_Cameraman_8[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/8.4bpp"); +const u32 gMapObjectPic_Scientist2_0[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/0.4bpp"); +const u32 gMapObjectPic_Scientist2_1[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/1.4bpp"); +const u32 gMapObjectPic_Scientist2_2[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/2.4bpp"); +const u32 gMapObjectPic_Scientist2_3[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/3.4bpp"); +const u32 gMapObjectPic_Scientist2_4[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/4.4bpp"); +const u32 gMapObjectPic_Scientist2_5[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/5.4bpp"); +const u32 gMapObjectPic_Scientist2_6[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/6.4bpp"); +const u32 gMapObjectPic_Scientist2_7[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/7.4bpp"); +const u32 gMapObjectPic_Scientist2_8[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/8.4bpp"); +const u32 gMapObjectPic_Man7_0[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/0.4bpp"); +const u32 gMapObjectPic_Man7_1[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/1.4bpp"); +const u32 gMapObjectPic_Man7_2[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/2.4bpp"); +const u32 gMapObjectPic_Man7_3[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/3.4bpp"); +const u32 gMapObjectPic_Man7_4[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/4.4bpp"); +const u32 gMapObjectPic_Man7_5[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/5.4bpp"); +const u32 gMapObjectPic_Man7_6[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/6.4bpp"); +const u32 gMapObjectPic_Man7_7[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/7.4bpp"); +const u32 gMapObjectPic_Man7_8[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/8.4bpp"); +const u32 gMapObjectPic_AquaMemberM_0[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/0.4bpp"); +const u32 gMapObjectPic_AquaMemberM_1[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/1.4bpp"); +const u32 gMapObjectPic_AquaMemberM_2[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/2.4bpp"); +const u32 gMapObjectPic_AquaMemberM_3[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/3.4bpp"); +const u32 gMapObjectPic_AquaMemberM_4[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/4.4bpp"); +const u32 gMapObjectPic_AquaMemberM_5[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/5.4bpp"); +const u32 gMapObjectPic_AquaMemberM_6[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/6.4bpp"); +const u32 gMapObjectPic_AquaMemberM_7[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/7.4bpp"); +const u32 gMapObjectPic_AquaMemberM_8[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/8.4bpp"); +const u32 gMapObjectPic_AquaMemberF_0[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/0.4bpp"); +const u32 gMapObjectPic_AquaMemberF_1[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/1.4bpp"); +const u32 gMapObjectPic_AquaMemberF_2[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/2.4bpp"); +const u32 gMapObjectPic_AquaMemberF_3[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/3.4bpp"); +const u32 gMapObjectPic_AquaMemberF_4[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/4.4bpp"); +const u32 gMapObjectPic_AquaMemberF_5[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/5.4bpp"); +const u32 gMapObjectPic_AquaMemberF_6[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/6.4bpp"); +const u32 gMapObjectPic_AquaMemberF_7[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/7.4bpp"); +const u32 gMapObjectPic_AquaMemberF_8[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/8.4bpp"); +const u32 gMapObjectPic_MagmaMemberM_0[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/0.4bpp"); +const u32 gMapObjectPic_MagmaMemberM_1[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/1.4bpp"); +const u32 gMapObjectPic_MagmaMemberM_2[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/2.4bpp"); +const u32 gMapObjectPic_MagmaMemberM_3[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/3.4bpp"); +const u32 gMapObjectPic_MagmaMemberM_4[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/4.4bpp"); +const u32 gMapObjectPic_MagmaMemberM_5[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/5.4bpp"); +const u32 gMapObjectPic_MagmaMemberM_6[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/6.4bpp"); +const u32 gMapObjectPic_MagmaMemberM_7[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/7.4bpp"); +const u32 gMapObjectPic_MagmaMemberM_8[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/8.4bpp"); +const u32 gMapObjectPic_MagmaMemberF_0[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/0.4bpp"); +const u32 gMapObjectPic_MagmaMemberF_1[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/1.4bpp"); +const u32 gMapObjectPic_MagmaMemberF_2[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/2.4bpp"); +const u32 gMapObjectPic_MagmaMemberF_3[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/3.4bpp"); +const u32 gMapObjectPic_MagmaMemberF_4[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/4.4bpp"); +const u32 gMapObjectPic_MagmaMemberF_5[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/5.4bpp"); +const u32 gMapObjectPic_MagmaMemberF_6[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/6.4bpp"); +const u32 gMapObjectPic_MagmaMemberF_7[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/7.4bpp"); +const u32 gMapObjectPic_MagmaMemberF_8[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/8.4bpp"); +const u32 gMapObjectPic_Sidney_0[] = INCBIN_U32("graphics/map_objects/pics/people/sidney/0.4bpp"); +const u32 gMapObjectPic_Sidney_1[] = INCBIN_U32("graphics/map_objects/pics/people/sidney/1.4bpp"); +const u32 gMapObjectPic_Sidney_2[] = INCBIN_U32("graphics/map_objects/pics/people/sidney/2.4bpp"); +const u32 gMapObjectPic_Phoebe_0[] = INCBIN_U32("graphics/map_objects/pics/people/phoebe/0.4bpp"); +const u32 gMapObjectPic_Phoebe_1[] = INCBIN_U32("graphics/map_objects/pics/people/phoebe/1.4bpp"); +const u32 gMapObjectPic_Phoebe_2[] = INCBIN_U32("graphics/map_objects/pics/people/phoebe/2.4bpp"); +const u32 gMapObjectPic_Glacia_0[] = INCBIN_U32("graphics/map_objects/pics/people/glacia/0.4bpp"); +const u32 gMapObjectPic_Glacia_1[] = INCBIN_U32("graphics/map_objects/pics/people/glacia/1.4bpp"); +const u32 gMapObjectPic_Glacia_2[] = INCBIN_U32("graphics/map_objects/pics/people/glacia/2.4bpp"); +const u32 gMapObjectPic_Drake_0[] = INCBIN_U32("graphics/map_objects/pics/people/drake/0.4bpp"); +const u32 gMapObjectPic_Drake_1[] = INCBIN_U32("graphics/map_objects/pics/people/drake/1.4bpp"); +const u32 gMapObjectPic_Drake_2[] = INCBIN_U32("graphics/map_objects/pics/people/drake/2.4bpp"); +const u32 gMapObjectPic_Roxanne_0[] = INCBIN_U32("graphics/map_objects/pics/people/roxanne/0.4bpp"); +const u32 gMapObjectPic_Roxanne_1[] = INCBIN_U32("graphics/map_objects/pics/people/roxanne/1.4bpp"); +const u32 gMapObjectPic_Roxanne_2[] = INCBIN_U32("graphics/map_objects/pics/people/roxanne/2.4bpp"); +const u32 gMapObjectPic_Brawly_0[] = INCBIN_U32("graphics/map_objects/pics/people/brawly/0.4bpp"); +const u32 gMapObjectPic_Brawly_1[] = INCBIN_U32("graphics/map_objects/pics/people/brawly/1.4bpp"); +const u32 gMapObjectPic_Brawly_2[] = INCBIN_U32("graphics/map_objects/pics/people/brawly/2.4bpp"); +const u32 gMapObjectPic_Wattson_0[] = INCBIN_U32("graphics/map_objects/pics/people/wattson/0.4bpp"); +const u32 gMapObjectPic_Wattson_1[] = INCBIN_U32("graphics/map_objects/pics/people/wattson/1.4bpp"); +const u32 gMapObjectPic_Wattson_2[] = INCBIN_U32("graphics/map_objects/pics/people/wattson/2.4bpp"); +const u32 gMapObjectPic_Flannery_0[] = INCBIN_U32("graphics/map_objects/pics/people/flannery/0.4bpp"); +const u32 gMapObjectPic_Flannery_1[] = INCBIN_U32("graphics/map_objects/pics/people/flannery/1.4bpp"); +const u32 gMapObjectPic_Flannery_2[] = INCBIN_U32("graphics/map_objects/pics/people/flannery/2.4bpp"); +const u32 gMapObjectPic_Norman_0[] = INCBIN_U32("graphics/map_objects/pics/people/norman/0.4bpp"); +const u32 gMapObjectPic_Norman_1[] = INCBIN_U32("graphics/map_objects/pics/people/norman/1.4bpp"); +const u32 gMapObjectPic_Norman_2[] = INCBIN_U32("graphics/map_objects/pics/people/norman/2.4bpp"); +const u32 gMapObjectPic_Norman_3[] = INCBIN_U32("graphics/map_objects/pics/people/norman/3.4bpp"); +const u32 gMapObjectPic_Norman_4[] = INCBIN_U32("graphics/map_objects/pics/people/norman/4.4bpp"); +const u32 gMapObjectPic_Norman_5[] = INCBIN_U32("graphics/map_objects/pics/people/norman/5.4bpp"); +const u32 gMapObjectPic_Norman_6[] = INCBIN_U32("graphics/map_objects/pics/people/norman/6.4bpp"); +const u32 gMapObjectPic_Norman_7[] = INCBIN_U32("graphics/map_objects/pics/people/norman/7.4bpp"); +const u32 gMapObjectPic_Norman_8[] = INCBIN_U32("graphics/map_objects/pics/people/norman/8.4bpp"); +const u32 gMapObjectPic_Winona_0[] = INCBIN_U32("graphics/map_objects/pics/people/winona/0.4bpp"); +const u32 gMapObjectPic_Winona_1[] = INCBIN_U32("graphics/map_objects/pics/people/winona/1.4bpp"); +const u32 gMapObjectPic_Winona_2[] = INCBIN_U32("graphics/map_objects/pics/people/winona/2.4bpp"); +const u32 gMapObjectPic_Liza_0[] = INCBIN_U32("graphics/map_objects/pics/people/liza/0.4bpp"); +const u32 gMapObjectPic_Liza_1[] = INCBIN_U32("graphics/map_objects/pics/people/liza/1.4bpp"); +const u32 gMapObjectPic_Liza_2[] = INCBIN_U32("graphics/map_objects/pics/people/liza/2.4bpp"); +const u32 gMapObjectPic_Tate_0[] = INCBIN_U32("graphics/map_objects/pics/people/tate/0.4bpp"); +const u32 gMapObjectPic_Tate_1[] = INCBIN_U32("graphics/map_objects/pics/people/tate/1.4bpp"); +const u32 gMapObjectPic_Tate_2[] = INCBIN_U32("graphics/map_objects/pics/people/tate/2.4bpp"); +const u32 gMapObjectPic_Wallace_0[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/0.4bpp"); +const u32 gMapObjectPic_Wallace_1[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/1.4bpp"); +const u32 gMapObjectPic_Wallace_2[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/2.4bpp"); +const u32 gMapObjectPic_Wallace_3[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/3.4bpp"); +const u32 gMapObjectPic_Wallace_4[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/4.4bpp"); +const u32 gMapObjectPic_Wallace_5[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/5.4bpp"); +const u32 gMapObjectPic_Wallace_6[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/6.4bpp"); +const u32 gMapObjectPic_Wallace_7[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/7.4bpp"); +const u32 gMapObjectPic_Wallace_8[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/8.4bpp"); +const u32 gMapObjectPic_Steven_0[] = INCBIN_U32("graphics/map_objects/pics/people/steven/0.4bpp"); +const u32 gMapObjectPic_Steven_1[] = INCBIN_U32("graphics/map_objects/pics/people/steven/1.4bpp"); +const u32 gMapObjectPic_Steven_2[] = INCBIN_U32("graphics/map_objects/pics/people/steven/2.4bpp"); +const u32 gMapObjectPic_Steven_3[] = INCBIN_U32("graphics/map_objects/pics/people/steven/3.4bpp"); +const u32 gMapObjectPic_Steven_4[] = INCBIN_U32("graphics/map_objects/pics/people/steven/4.4bpp"); +const u32 gMapObjectPic_Steven_5[] = INCBIN_U32("graphics/map_objects/pics/people/steven/5.4bpp"); +const u32 gMapObjectPic_Steven_6[] = INCBIN_U32("graphics/map_objects/pics/people/steven/6.4bpp"); +const u32 gMapObjectPic_Steven_7[] = INCBIN_U32("graphics/map_objects/pics/people/steven/7.4bpp"); +const u32 gMapObjectPic_Steven_8[] = INCBIN_U32("graphics/map_objects/pics/people/steven/8.4bpp"); +const u32 gMapObjectPic_Wally_0[] = INCBIN_U32("graphics/map_objects/pics/people/wally/0.4bpp"); +const u32 gMapObjectPic_Wally_1[] = INCBIN_U32("graphics/map_objects/pics/people/wally/1.4bpp"); +const u32 gMapObjectPic_Wally_2[] = INCBIN_U32("graphics/map_objects/pics/people/wally/2.4bpp"); +const u32 gMapObjectPic_Wally_3[] = INCBIN_U32("graphics/map_objects/pics/people/wally/3.4bpp"); +const u32 gMapObjectPic_Wally_4[] = INCBIN_U32("graphics/map_objects/pics/people/wally/4.4bpp"); +const u32 gMapObjectPic_Wally_5[] = INCBIN_U32("graphics/map_objects/pics/people/wally/5.4bpp"); +const u32 gMapObjectPic_Wally_6[] = INCBIN_U32("graphics/map_objects/pics/people/wally/6.4bpp"); +const u32 gMapObjectPic_Wally_7[] = INCBIN_U32("graphics/map_objects/pics/people/wally/7.4bpp"); +const u32 gMapObjectPic_Wally_8[] = INCBIN_U32("graphics/map_objects/pics/people/wally/8.4bpp"); +const u32 gMapObjectPic_LittleBoy3_0[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/0.4bpp"); +const u32 gMapObjectPic_LittleBoy3_1[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/1.4bpp"); +const u32 gMapObjectPic_LittleBoy3_2[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/2.4bpp"); +const u32 gMapObjectPic_LittleBoy3_3[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/3.4bpp"); +const u32 gMapObjectPic_LittleBoy3_4[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/4.4bpp"); +const u32 gMapObjectPic_LittleBoy3_5[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/5.4bpp"); +const u32 gMapObjectPic_LittleBoy3_6[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/6.4bpp"); +const u32 gMapObjectPic_LittleBoy3_7[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/7.4bpp"); +const u32 gMapObjectPic_LittleBoy3_8[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/8.4bpp"); +const u32 gMapObjectPic_HotSpringsOldWoman_0[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/0.4bpp"); +const u32 gMapObjectPic_HotSpringsOldWoman_1[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/1.4bpp"); +const u32 gMapObjectPic_HotSpringsOldWoman_2[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/2.4bpp"); +const u32 gMapObjectPic_HotSpringsOldWoman_3[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/3.4bpp"); +const u32 gMapObjectPic_HotSpringsOldWoman_4[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/4.4bpp"); +const u32 gMapObjectPic_HotSpringsOldWoman_5[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/5.4bpp"); +const u32 gMapObjectPic_HotSpringsOldWoman_6[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/6.4bpp"); +const u32 gMapObjectPic_HotSpringsOldWoman_7[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/7.4bpp"); +const u32 gMapObjectPic_HotSpringsOldWoman_8[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/8.4bpp"); +const u32 gMapObjectPic_LatiasLatios_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/latias_latios/0.4bpp"); +const u32 gMapObjectPic_LatiasLatios_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/latias_latios/1.4bpp"); +const u32 gMapObjectPic_LatiasLatios_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/latias_latios/2.4bpp"); +const u32 gMapObjectPic_Boy5_0[] = INCBIN_U32("graphics/map_objects/pics/people/boy_5/0.4bpp"); +const u32 gMapObjectPic_Boy5_1[] = INCBIN_U32("graphics/map_objects/pics/people/boy_5/1.4bpp"); +const u32 gMapObjectPic_Boy5_2[] = INCBIN_U32("graphics/map_objects/pics/people/boy_5/2.4bpp"); +const u32 gMapObjectPic_ContestJudge_0[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/0.4bpp"); +const u32 gMapObjectPic_ContestJudge_1[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/1.4bpp"); +const u32 gMapObjectPic_ContestJudge_2[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/2.4bpp"); +const u32 gMapObjectPic_ContestJudge_3[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/3.4bpp"); +const u32 gMapObjectPic_ContestJudge_4[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/4.4bpp"); +const u32 gMapObjectPic_ContestJudge_5[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/5.4bpp"); +const u32 gMapObjectPic_ContestJudge_6[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/6.4bpp"); +const u32 gMapObjectPic_ContestJudge_7[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/7.4bpp"); +const u32 gMapObjectPic_ContestJudge_8[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/8.4bpp"); +const u32 gMapObjectPic_Archie_0[] = INCBIN_U32("graphics/map_objects/pics/people/archie/0.4bpp"); +const u32 gMapObjectPic_Archie_1[] = INCBIN_U32("graphics/map_objects/pics/people/archie/1.4bpp"); +const u32 gMapObjectPic_Archie_2[] = INCBIN_U32("graphics/map_objects/pics/people/archie/2.4bpp"); +const u32 gMapObjectPic_Archie_3[] = INCBIN_U32("graphics/map_objects/pics/people/archie/3.4bpp"); +const u32 gMapObjectPic_Archie_4[] = INCBIN_U32("graphics/map_objects/pics/people/archie/4.4bpp"); +const u32 gMapObjectPic_Archie_5[] = INCBIN_U32("graphics/map_objects/pics/people/archie/5.4bpp"); +const u32 gMapObjectPic_Archie_6[] = INCBIN_U32("graphics/map_objects/pics/people/archie/6.4bpp"); +const u32 gMapObjectPic_Archie_7[] = INCBIN_U32("graphics/map_objects/pics/people/archie/7.4bpp"); +const u32 gMapObjectPic_Archie_8[] = INCBIN_U32("graphics/map_objects/pics/people/archie/8.4bpp"); +const u32 gMapObjectPic_Maxie_0[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/0.4bpp"); +const u32 gMapObjectPic_Maxie_1[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/1.4bpp"); +const u32 gMapObjectPic_Maxie_2[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/2.4bpp"); +const u32 gMapObjectPic_Maxie_3[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/3.4bpp"); +const u32 gMapObjectPic_Maxie_4[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/4.4bpp"); +const u32 gMapObjectPic_Maxie_5[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/5.4bpp"); +const u32 gMapObjectPic_Maxie_6[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/6.4bpp"); +const u32 gMapObjectPic_Maxie_7[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/7.4bpp"); +const u32 gMapObjectPic_Maxie_8[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/8.4bpp"); +const u32 gMapObjectPic_Kyogre_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/kyogre/0.4bpp"); +const u32 gMapObjectPic_Kyogre_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/kyogre/1.4bpp"); +const u32 gMapObjectPic_Groudon_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/groudon/0.4bpp"); +const u32 gMapObjectPic_Groudon_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/groudon/1.4bpp"); +const u32 gMapObjectPic_Regi[] = INCBIN_U32("graphics/map_objects/pics/pokemon/regi.4bpp"); +const u32 gMapObjectPic_Skitty_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/skitty/0.4bpp"); +const u32 gMapObjectPic_Skitty_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/skitty/1.4bpp"); +const u32 gMapObjectPic_Skitty_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/skitty/2.4bpp"); +const u32 gMapObjectPic_Kecleon_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/kecleon/0.4bpp"); +const u32 gMapObjectPic_Kecleon_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/kecleon/1.4bpp"); +const u32 gMapObjectPic_Kecleon_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/kecleon/2.4bpp"); +const u32 gMapObjectPic_Rayquaza_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/rayquaza/0.4bpp"); +const u32 gMapObjectPic_Rayquaza_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/rayquaza/1.4bpp"); +const u32 gMapObjectPic_Zigzagoon_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/zigzagoon/0.4bpp"); +const u32 gMapObjectPic_Zigzagoon_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/zigzagoon/1.4bpp"); +const u32 gMapObjectPic_Zigzagoon_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/zigzagoon/2.4bpp"); +const u32 gMapObjectPic_Pikachu_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/pikachu/0.4bpp"); +const u32 gMapObjectPic_Pikachu_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/pikachu/1.4bpp"); +const u32 gMapObjectPic_Pikachu_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/pikachu/2.4bpp"); +const u32 gMapObjectPic_Azumarill_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/azumarill/0.4bpp"); +const u32 gMapObjectPic_Azumarill_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/azumarill/1.4bpp"); +const u32 gMapObjectPic_Azumarill_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/azumarill/2.4bpp"); +const u32 gMapObjectPic_Wingull_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/wingull/0.4bpp"); +const u32 gMapObjectPic_Wingull_3[] = INCBIN_U32("graphics/map_objects/pics/pokemon/wingull/3.4bpp"); +const u32 gMapObjectPic_Wingull_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/wingull/1.4bpp"); +const u32 gMapObjectPic_Wingull_4[] = INCBIN_U32("graphics/map_objects/pics/pokemon/wingull/4.4bpp"); +const u32 gMapObjectPic_Wingull_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/wingull/2.4bpp"); +const u32 gMapObjectPic_Wingull_5[] = INCBIN_U32("graphics/map_objects/pics/pokemon/wingull/5.4bpp"); +const u32 gMapObjectPic_TuberMSwimming_0[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/0.4bpp"); +const u32 gMapObjectPic_TuberMSwimming_1[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/1.4bpp"); +const u32 gMapObjectPic_TuberMSwimming_2[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/2.4bpp"); +const u32 gMapObjectPic_TuberMSwimming_3[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/3.4bpp"); +const u32 gMapObjectPic_TuberMSwimming_4[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/4.4bpp"); +const u32 gMapObjectPic_TuberMSwimming_5[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/5.4bpp"); +const u32 gMapObjectPic_TuberMSwimming_6[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/6.4bpp"); +const u32 gMapObjectPic_TuberMSwimming_7[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/7.4bpp"); +const u32 gMapObjectPic_TuberMSwimming_8[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/8.4bpp"); +const u32 gMapObjectPic_Azurill_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/azurill/0.4bpp"); +const u32 gMapObjectPic_Azurill_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/azurill/1.4bpp"); +const u32 gMapObjectPic_Azurill_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/azurill/2.4bpp"); +const u32 gMapObjectPic_Mom_0[] = INCBIN_U32("graphics/map_objects/pics/people/mom/0.4bpp"); +const u32 gMapObjectPic_Mom_1[] = INCBIN_U32("graphics/map_objects/pics/people/mom/1.4bpp"); +const u32 gMapObjectPic_Mom_2[] = INCBIN_U32("graphics/map_objects/pics/people/mom/2.4bpp"); +const u32 gMapObjectPic_Mom_3[] = INCBIN_U32("graphics/map_objects/pics/people/mom/3.4bpp"); +const u32 gMapObjectPic_Mom_4[] = INCBIN_U32("graphics/map_objects/pics/people/mom/4.4bpp"); +const u32 gMapObjectPic_Mom_5[] = INCBIN_U32("graphics/map_objects/pics/people/mom/5.4bpp"); +const u32 gMapObjectPic_Mom_6[] = INCBIN_U32("graphics/map_objects/pics/people/mom/6.4bpp"); +const u32 gMapObjectPic_Mom_7[] = INCBIN_U32("graphics/map_objects/pics/people/mom/7.4bpp"); +const u32 gMapObjectPic_Mom_8[] = INCBIN_U32("graphics/map_objects/pics/people/mom/8.4bpp"); +const u16 gMapObjectPalette22[] = INCBIN_U16("graphics/map_objects/palettes/22.gbapal"); +const u16 gMapObjectPalette23[] = INCBIN_U16("graphics/map_objects/palettes/23.gbapal"); +const u16 gMapObjectPalette24[] = INCBIN_U16("graphics/map_objects/palettes/24.gbapal"); +const u16 gMapObjectPalette25[] = INCBIN_U16("graphics/map_objects/palettes/25.gbapal"); +const u32 gMapObjectPic_UnusedNatuDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/unused_natu_doll.4bpp"); +const u32 gMapObjectPic_UnusedMagnemiteDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/unused_magnemite_doll.4bpp"); +const u32 gMapObjectPic_UnusedSquirtleDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/unused_squirtle_doll.4bpp"); +const u32 gMapObjectPic_UnusedWooperDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/unused_wooper_doll.4bpp"); +const u32 gMapObjectPic_UnusedPikachuDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/unused_pikachu_doll.4bpp"); +const u32 gMapObjectPic_UnusedPorygon2Doll[] = INCBIN_U32("graphics/map_objects/pics/dolls/unused_porygon2_doll.4bpp"); +const u32 gMapObjectPic_PichuDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/pichu_doll.4bpp"); +const u32 gMapObjectPic_PikachuDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/pikachu_doll.4bpp"); +const u32 gMapObjectPic_MarillDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/marill_doll.4bpp"); +const u32 gMapObjectPic_TogepiDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/togepi_doll.4bpp"); +const u32 gMapObjectPic_CyndaquilDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/cyndaquil_doll.4bpp"); +const u32 gMapObjectPic_ChikoritaDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/chikorita_doll.4bpp"); +const u32 gMapObjectPic_TotodileDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/totodile_doll.4bpp"); +const u32 gMapObjectPic_JigglypuffDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/jigglypuff_doll.4bpp"); +const u32 gMapObjectPic_MeowthDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/meowth_doll.4bpp"); +const u32 gMapObjectPic_ClefairyDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/clefairy_doll.4bpp"); +const u32 gMapObjectPic_DittoDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/ditto_doll.4bpp"); +const u32 gMapObjectPic_SmoochumDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/smoochum_doll.4bpp"); +const u32 gMapObjectPic_TreeckoDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/treecko_doll.4bpp"); +const u32 gMapObjectPic_TorchicDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/torchic_doll.4bpp"); +const u32 gMapObjectPic_MudkipDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/mudkip_doll.4bpp"); +const u32 gMapObjectPic_DuskullDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/duskull_doll.4bpp"); +const u32 gMapObjectPic_WynautDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/wynaut_doll.4bpp"); +const u32 gMapObjectPic_BaltoyDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/baltoy_doll.4bpp"); +const u32 gMapObjectPic_KecleonDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/kecleon_doll.4bpp"); +const u32 gMapObjectPic_AzurillDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/azurill_doll.4bpp"); +const u32 gMapObjectPic_SkittyDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/skitty_doll.4bpp"); +const u32 gMapObjectPic_SwabluDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/swablu_doll.4bpp"); +const u32 gMapObjectPic_GulpinDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/gulpin_doll.4bpp"); +const u32 gMapObjectPic_LotadDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/lotad_doll.4bpp"); +const u32 gMapObjectPic_SeedotDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/seedot_doll.4bpp"); +const u32 gMapObjectPic_PikaCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/pika_cushion.4bpp"); +const u32 gMapObjectPic_RoundCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/round_cushion.4bpp"); +const u32 gMapObjectPic_KissCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/kiss_cushion.4bpp"); +const u32 gMapObjectPic_ZigzagCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/zigzag_cushion.4bpp"); +const u32 gMapObjectPic_SpinCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/spin_cushion.4bpp"); +const u32 gMapObjectPic_DiamondCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/diamond_cushion.4bpp"); +const u32 gMapObjectPic_BallCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/ball_cushion.4bpp"); +const u32 gMapObjectPic_GrassCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/grass_cushion.4bpp"); +const u32 gMapObjectPic_FireCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/fire_cushion.4bpp"); +const u32 gMapObjectPic_WaterCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/water_cushion.4bpp"); +const u32 gMapObjectPic_BigSnorlaxDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_snorlax_doll.4bpp"); +const u32 gMapObjectPic_BigRhydonDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_rhydon_doll.4bpp"); +const u32 gMapObjectPic_BigLaprasDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_lapras_doll.4bpp"); +const u32 gMapObjectPic_BigVenusaurDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_venusaur_doll.4bpp"); +const u32 gMapObjectPic_BigCharizardDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_charizard_doll.4bpp"); +const u32 gMapObjectPic_BigBlastoiseDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_blastoise_doll.4bpp"); +const u32 gMapObjectPic_BigWailmerDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_wailmer_doll.4bpp"); +const u32 gMapObjectPic_BigRegirockDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_regirock_doll.4bpp"); +const u32 gMapObjectPic_BigRegiceDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_regice_doll.4bpp"); +const u32 gMapObjectPic_BigRegisteelDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_registeel_doll.4bpp"); +const u32 gMapObjectPic_CuttableTree_0[] = INCBIN_U32("graphics/map_objects/pics/misc/cuttable_tree/0.4bpp"); +const u32 gMapObjectPic_CuttableTree_1[] = INCBIN_U32("graphics/map_objects/pics/misc/cuttable_tree/1.4bpp"); +const u32 gMapObjectPic_CuttableTree_2[] = INCBIN_U32("graphics/map_objects/pics/misc/cuttable_tree/2.4bpp"); +const u32 gMapObjectPic_CuttableTree_3[] = INCBIN_U32("graphics/map_objects/pics/misc/cuttable_tree/3.4bpp"); +const u32 gMapObjectPic_BreakableRock_0[] = INCBIN_U32("graphics/map_objects/pics/misc/breakable_rock/0.4bpp"); +const u32 gMapObjectPic_BreakableRock_1[] = INCBIN_U32("graphics/map_objects/pics/misc/breakable_rock/1.4bpp"); +const u32 gMapObjectPic_BreakableRock_2[] = INCBIN_U32("graphics/map_objects/pics/misc/breakable_rock/2.4bpp"); +const u32 gMapObjectPic_BreakableRock_3[] = INCBIN_U32("graphics/map_objects/pics/misc/breakable_rock/3.4bpp"); +const u32 gMapObjectPic_PushableBoulder[] = INCBIN_U32("graphics/map_objects/pics/misc/pushable_boulder.4bpp"); +const u32 gMapObjectPic_MrBrineysBoat_0[] = INCBIN_U32("graphics/map_objects/pics/misc/mr_brineys_boat/0.4bpp"); +const u32 gMapObjectPic_MrBrineysBoat_1[] = INCBIN_U32("graphics/map_objects/pics/misc/mr_brineys_boat/1.4bpp"); +const u32 gMapObjectPic_MrBrineysBoat_2[] = INCBIN_U32("graphics/map_objects/pics/misc/mr_brineys_boat/2.4bpp"); +const u32 gMapObjectPic_Fossil[] = INCBIN_U32("graphics/map_objects/pics/misc/fossil.4bpp"); +const u32 gMapObjectPic_SubmarineShadow[] = INCBIN_U32("graphics/map_objects/pics/misc/submarine_shadow.4bpp"); +const u16 gMapObjectPalette26[] = INCBIN_U16("graphics/map_objects/palettes/26.gbapal"); +const u32 gMapObjectPic_Truck[] = INCBIN_U32("graphics/map_objects/pics/misc/truck.4bpp"); +const u16 gMapObjectPalette14[] = INCBIN_U16("graphics/map_objects/palettes/14.gbapal"); +const u32 gMapObjectPic_MachokeCarryingBox_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/machoke_carrying_box/0.4bpp"); +const u32 gMapObjectPic_MachokeCarryingBox_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/machoke_carrying_box/1.4bpp"); +const u32 gMapObjectPic_MachokeCarryingBox_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/machoke_carrying_box/2.4bpp"); +const u32 gMapObjectPic_MachokeFacingAway_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/machoke_facing_away/0.4bpp"); +const u32 gMapObjectPic_MachokeFacingAway_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/machoke_facing_away/1.4bpp"); +const u16 gMapObjectPalette15[] = INCBIN_U16("graphics/map_objects/palettes/15.gbapal"); +const u32 gMapObjectPic_BirchsBag[] = INCBIN_U32("graphics/map_objects/pics/misc/birchs_bag.4bpp"); +const u32 gMapObjectPic_Poochyena_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/0.4bpp"); +const u32 gMapObjectPic_Poochyena_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/1.4bpp"); +const u32 gMapObjectPic_Poochyena_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/2.4bpp"); +const u32 gMapObjectPic_Poochyena_3[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/3.4bpp"); +const u32 gMapObjectPic_Poochyena_4[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/4.4bpp"); +const u32 gMapObjectPic_Poochyena_5[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/5.4bpp"); +const u32 gMapObjectPic_Poochyena_6[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/6.4bpp"); +const u32 gMapObjectPic_Poochyena_7[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/7.4bpp"); +const u32 gMapObjectPic_Poochyena_8[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/8.4bpp"); +const u16 gMapObjectPalette16[] = INCBIN_U16("graphics/map_objects/palettes/16.gbapal"); +const u32 gMapObjectPic_CableCar[] = INCBIN_U32("graphics/map_objects/pics/misc/cable_car.4bpp"); +const u16 gMapObjectPalette20[] = INCBIN_U16("graphics/map_objects/palettes/20.gbapal"); +const u32 gMapObjectPic_SSTidal[] = INCBIN_U32("graphics/map_objects/pics/misc/ss_tidal.4bpp"); +const u16 gMapObjectPalette21[] = INCBIN_U16("graphics/map_objects/palettes/21.gbapal"); +const u32 gFieldEffectPic_BerryTreeGrowthSparkle_0[] = INCBIN_U32("graphics/field_effect_objects/pics/berry_tree_growth_sparkle/0.4bpp"); +const u32 gFieldEffectPic_BerryTreeGrowthSparkle_1[] = INCBIN_U32("graphics/field_effect_objects/pics/berry_tree_growth_sparkle/1.4bpp"); +const u32 gFieldEffectPic_BerryTreeGrowthSparkle_2[] = INCBIN_U32("graphics/field_effect_objects/pics/berry_tree_growth_sparkle/2.4bpp"); +const u32 gFieldEffectPic_BerryTreeGrowthSparkle_3[] = INCBIN_U32("graphics/field_effect_objects/pics/berry_tree_growth_sparkle/3.4bpp"); +const u32 gFieldEffectPic_BerryTreeGrowthSparkle_4[] = INCBIN_U32("graphics/field_effect_objects/pics/berry_tree_growth_sparkle/4.4bpp"); +const u32 gFieldEffectPic_BerryTreeGrowthSparkle_5[] = INCBIN_U32("graphics/field_effect_objects/pics/berry_tree_growth_sparkle/5.4bpp"); +const u32 gMapObjectPic_BerryTreeDirtPile[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/dirt_pile.4bpp"); +const u32 gMapObjectPic_BerryTreeSprout_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sprout/0.4bpp"); +const u32 gMapObjectPic_BerryTreeSprout_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sprout/1.4bpp"); +const u32 gMapObjectPic_PechaBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pecha/0.4bpp"); +const u32 gMapObjectPic_PechaBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pecha/1.4bpp"); +const u32 gMapObjectPic_PechaBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pecha/2.4bpp"); +const u32 gMapObjectPic_PechaBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pecha/3.4bpp"); +const u32 gMapObjectPic_PechaBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pecha/4.4bpp"); +const u32 gMapObjectPic_PechaBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pecha/5.4bpp"); +const u32 gMapObjectPic_KelpsyBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/kelpsy/0.4bpp"); +const u32 gMapObjectPic_KelpsyBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/kelpsy/1.4bpp"); +const u32 gMapObjectPic_KelpsyBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/kelpsy/2.4bpp"); +const u32 gMapObjectPic_KelpsyBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/kelpsy/3.4bpp"); +const u32 gMapObjectPic_KelpsyBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/kelpsy/4.4bpp"); +const u32 gMapObjectPic_KelpsyBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/kelpsy/5.4bpp"); +const u32 gMapObjectPic_WepearBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wepear/0.4bpp"); +const u32 gMapObjectPic_WepearBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wepear/1.4bpp"); +const u32 gMapObjectPic_WepearBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wepear/2.4bpp"); +const u32 gMapObjectPic_WepearBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wepear/3.4bpp"); +const u32 gMapObjectPic_WepearBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wepear/4.4bpp"); +const u32 gMapObjectPic_WepearBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wepear/5.4bpp"); +const u32 gMapObjectPic_IapapaBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/iapapa/0.4bpp"); +const u32 gMapObjectPic_IapapaBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/iapapa/1.4bpp"); +const u32 gMapObjectPic_IapapaBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/iapapa/2.4bpp"); +const u32 gMapObjectPic_IapapaBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/iapapa/3.4bpp"); +const u32 gMapObjectPic_IapapaBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/iapapa/4.4bpp"); +const u32 gMapObjectPic_IapapaBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/iapapa/5.4bpp"); +const u32 gMapObjectPic_CheriBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cheri/0.4bpp"); +const u32 gMapObjectPic_CheriBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cheri/1.4bpp"); +const u32 gMapObjectPic_CheriBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cheri/2.4bpp"); +const u32 gMapObjectPic_CheriBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cheri/3.4bpp"); +const u32 gMapObjectPic_CheriBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cheri/4.4bpp"); +const u32 gMapObjectPic_CheriBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cheri/5.4bpp"); +const u32 gMapObjectPic_FigyBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/figy/0.4bpp"); +const u32 gMapObjectPic_FigyBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/figy/1.4bpp"); +const u32 gMapObjectPic_FigyBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/figy/2.4bpp"); +const u32 gMapObjectPic_FigyBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/figy/3.4bpp"); +const u32 gMapObjectPic_FigyBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/figy/4.4bpp"); +const u32 gMapObjectPic_FigyBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/figy/5.4bpp"); +const u32 gMapObjectPic_MagoBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/mago/0.4bpp"); +const u32 gMapObjectPic_MagoBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/mago/1.4bpp"); +const u32 gMapObjectPic_MagoBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/mago/2.4bpp"); +const u32 gMapObjectPic_MagoBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/mago/3.4bpp"); +const u32 gMapObjectPic_MagoBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/mago/4.4bpp"); +const u32 gMapObjectPic_MagoBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/mago/5.4bpp"); +const u32 gMapObjectPic_LumBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lum/0.4bpp"); +const u32 gMapObjectPic_LumBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lum/1.4bpp"); +const u32 gMapObjectPic_LumBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lum/2.4bpp"); +const u32 gMapObjectPic_LumBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lum/3.4bpp"); +const u32 gMapObjectPic_LumBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lum/4.4bpp"); +const u32 gMapObjectPic_LumBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lum/5.4bpp"); +const u32 gMapObjectPic_RazzBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/razz/0.4bpp"); +const u32 gMapObjectPic_RazzBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/razz/1.4bpp"); +const u32 gMapObjectPic_RazzBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/razz/2.4bpp"); +const u32 gMapObjectPic_RazzBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/razz/3.4bpp"); +const u32 gMapObjectPic_RazzBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/razz/4.4bpp"); +const u32 gMapObjectPic_RazzBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/razz/5.4bpp"); +const u32 gMapObjectPic_GrepaBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/grepa/0.4bpp"); +const u32 gMapObjectPic_GrepaBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/grepa/1.4bpp"); +const u32 gMapObjectPic_GrepaBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/grepa/2.4bpp"); +const u32 gMapObjectPic_GrepaBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/grepa/3.4bpp"); +const u32 gMapObjectPic_GrepaBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/grepa/4.4bpp"); +const u32 gMapObjectPic_GrepaBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/grepa/5.4bpp"); +const u32 gMapObjectPic_RabutaBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rabuta/0.4bpp"); +const u32 gMapObjectPic_RabutaBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rabuta/1.4bpp"); +const u32 gMapObjectPic_RabutaBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rabuta/2.4bpp"); +const u32 gMapObjectPic_RabutaBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rabuta/3.4bpp"); +const u32 gMapObjectPic_RabutaBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rabuta/4.4bpp"); +const u32 gMapObjectPic_RabutaBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rabuta/5.4bpp"); +const u32 gMapObjectPic_NomelBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/nomel/0.4bpp"); +const u32 gMapObjectPic_NomelBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/nomel/1.4bpp"); +const u32 gMapObjectPic_NomelBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/nomel/2.4bpp"); +const u32 gMapObjectPic_NomelBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/nomel/3.4bpp"); +const u32 gMapObjectPic_NomelBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/nomel/4.4bpp"); +const u32 gMapObjectPic_NomelBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/nomel/5.4bpp"); +const u32 gMapObjectPic_LeppaBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/leppa/0.4bpp"); +const u32 gMapObjectPic_LeppaBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/leppa/1.4bpp"); +const u32 gMapObjectPic_LeppaBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/leppa/2.4bpp"); +const u32 gMapObjectPic_LeppaBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/leppa/3.4bpp"); +const u32 gMapObjectPic_LeppaBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/leppa/4.4bpp"); +const u32 gMapObjectPic_LeppaBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/leppa/5.4bpp"); +const u32 gMapObjectPic_LiechiBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/liechi/0.4bpp"); +const u32 gMapObjectPic_LiechiBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/liechi/1.4bpp"); +const u32 gMapObjectPic_LiechiBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/liechi/2.4bpp"); +const u32 gMapObjectPic_LiechiBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/liechi/3.4bpp"); +const u32 gMapObjectPic_LiechiBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/liechi/4.4bpp"); +const u32 gMapObjectPic_LiechiBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/liechi/5.4bpp"); +const u32 gMapObjectPic_HondewBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/hondew/0.4bpp"); +const u32 gMapObjectPic_HondewBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/hondew/1.4bpp"); +const u32 gMapObjectPic_HondewBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/hondew/2.4bpp"); +const u32 gMapObjectPic_HondewBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/hondew/3.4bpp"); +const u32 gMapObjectPic_HondewBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/hondew/4.4bpp"); +const u32 gMapObjectPic_HondewBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/hondew/5.4bpp"); +const u32 gMapObjectPic_AguavBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aguav/0.4bpp"); +const u32 gMapObjectPic_AguavBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aguav/1.4bpp"); +const u32 gMapObjectPic_AguavBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aguav/2.4bpp"); +const u32 gMapObjectPic_AguavBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aguav/3.4bpp"); +const u32 gMapObjectPic_AguavBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aguav/4.4bpp"); +const u32 gMapObjectPic_AguavBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aguav/5.4bpp"); +const u32 gMapObjectPic_WikiBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wiki/0.4bpp"); +const u32 gMapObjectPic_WikiBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wiki/1.4bpp"); +const u32 gMapObjectPic_WikiBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wiki/2.4bpp"); +const u32 gMapObjectPic_WikiBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wiki/3.4bpp"); +const u32 gMapObjectPic_WikiBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wiki/4.4bpp"); +const u32 gMapObjectPic_WikiBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wiki/5.4bpp"); +const u32 gMapObjectPic_PomegBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pomeg/0.4bpp"); +const u32 gMapObjectPic_PomegBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pomeg/1.4bpp"); +const u32 gMapObjectPic_PomegBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pomeg/2.4bpp"); +const u32 gMapObjectPic_PomegBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pomeg/3.4bpp"); +const u32 gMapObjectPic_PomegBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pomeg/4.4bpp"); +const u32 gMapObjectPic_PomegBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pomeg/5.4bpp"); +const u32 gMapObjectPic_RawstBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rawst/0.4bpp"); +const u32 gMapObjectPic_RawstBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rawst/1.4bpp"); +const u32 gMapObjectPic_RawstBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rawst/2.4bpp"); +const u32 gMapObjectPic_RawstBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rawst/3.4bpp"); +const u32 gMapObjectPic_RawstBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rawst/4.4bpp"); +const u32 gMapObjectPic_RawstBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rawst/5.4bpp"); +const u32 gMapObjectPic_SpelonBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/spelon/0.4bpp"); +const u32 gMapObjectPic_SpelonBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/spelon/1.4bpp"); +const u32 gMapObjectPic_SpelonBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/spelon/2.4bpp"); +const u32 gMapObjectPic_SpelonBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/spelon/3.4bpp"); +const u32 gMapObjectPic_SpelonBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/spelon/4.4bpp"); +const u32 gMapObjectPic_SpelonBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/spelon/5.4bpp"); +const u32 gMapObjectPic_ChestoBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/chesto/0.4bpp"); +const u32 gMapObjectPic_ChestoBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/chesto/1.4bpp"); +const u32 gMapObjectPic_ChestoBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/chesto/2.4bpp"); +const u32 gMapObjectPic_ChestoBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/chesto/3.4bpp"); +const u32 gMapObjectPic_ChestoBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/chesto/4.4bpp"); +const u32 gMapObjectPic_ChestoBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/chesto/5.4bpp"); +const u32 gMapObjectPic_OranBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/oran/0.4bpp"); +const u32 gMapObjectPic_OranBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/oran/1.4bpp"); +const u32 gMapObjectPic_OranBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/oran/2.4bpp"); +const u32 gMapObjectPic_OranBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/oran/3.4bpp"); +const u32 gMapObjectPic_OranBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/oran/4.4bpp"); +const u32 gMapObjectPic_OranBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/oran/5.4bpp"); +const u32 gMapObjectPic_PersimBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/persim/0.4bpp"); +const u32 gMapObjectPic_PersimBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/persim/1.4bpp"); +const u32 gMapObjectPic_PersimBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/persim/2.4bpp"); +const u32 gMapObjectPic_PersimBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/persim/3.4bpp"); +const u32 gMapObjectPic_PersimBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/persim/4.4bpp"); +const u32 gMapObjectPic_PersimBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/persim/5.4bpp"); +const u32 gMapObjectPic_SitrusBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sitrus/0.4bpp"); +const u32 gMapObjectPic_SitrusBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sitrus/1.4bpp"); +const u32 gMapObjectPic_SitrusBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sitrus/2.4bpp"); +const u32 gMapObjectPic_SitrusBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sitrus/3.4bpp"); +const u32 gMapObjectPic_SitrusBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sitrus/4.4bpp"); +const u32 gMapObjectPic_SitrusBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sitrus/5.4bpp"); +const u32 gMapObjectPic_AspearBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aspear/0.4bpp"); +const u32 gMapObjectPic_AspearBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aspear/1.4bpp"); +const u32 gMapObjectPic_AspearBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aspear/2.4bpp"); +const u32 gMapObjectPic_AspearBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aspear/3.4bpp"); +const u32 gMapObjectPic_AspearBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aspear/4.4bpp"); +const u32 gMapObjectPic_AspearBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aspear/5.4bpp"); +const u32 gMapObjectPic_PamtreBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pamtre/0.4bpp"); +const u32 gMapObjectPic_PamtreBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pamtre/1.4bpp"); +const u32 gMapObjectPic_PamtreBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pamtre/2.4bpp"); +const u32 gMapObjectPic_PamtreBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pamtre/3.4bpp"); +const u32 gMapObjectPic_PamtreBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pamtre/4.4bpp"); +const u32 gMapObjectPic_PamtreBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pamtre/5.4bpp"); +const u32 gMapObjectPic_CornnBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cornn/0.4bpp"); +const u32 gMapObjectPic_CornnBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cornn/1.4bpp"); +const u32 gMapObjectPic_CornnBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cornn/2.4bpp"); +const u32 gMapObjectPic_CornnBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cornn/3.4bpp"); +const u32 gMapObjectPic_CornnBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cornn/4.4bpp"); +const u32 gMapObjectPic_CornnBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cornn/5.4bpp"); +const u32 gMapObjectPic_LansatBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lansat/0.4bpp"); +const u32 gMapObjectPic_LansatBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lansat/1.4bpp"); +const u32 gMapObjectPic_LansatBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lansat/2.4bpp"); +const u32 gMapObjectPic_LansatBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lansat/3.4bpp"); +const u32 gMapObjectPic_LansatBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lansat/4.4bpp"); +const u32 gMapObjectPic_LansatBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lansat/5.4bpp"); +const u32 gMapObjectPic_DurinBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/durin/0.4bpp"); +const u32 gMapObjectPic_DurinBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/durin/1.4bpp"); +const u32 gMapObjectPic_DurinBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/durin/2.4bpp"); +const u32 gMapObjectPic_DurinBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/durin/3.4bpp"); +const u32 gMapObjectPic_DurinBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/durin/4.4bpp"); +const u32 gMapObjectPic_DurinBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/durin/5.4bpp"); +const u32 gMapObjectPic_TamatoBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/tamato/0.4bpp"); +const u32 gMapObjectPic_TamatoBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/tamato/1.4bpp"); +const u32 gMapObjectPic_TamatoBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/tamato/2.4bpp"); +const u32 gMapObjectPic_TamatoBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/tamato/3.4bpp"); +const u32 gMapObjectPic_TamatoBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/tamato/4.4bpp"); +const u32 gMapObjectPic_TamatoBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/tamato/5.4bpp"); +const u32 gFieldEffectPic_SurfBlob_0[] = INCBIN_U32("graphics/field_effect_objects/pics/surf_blob/0.4bpp"); +const u32 gFieldEffectPic_SurfBlob_1[] = INCBIN_U32("graphics/field_effect_objects/pics/surf_blob/1.4bpp"); +const u32 gFieldEffectPic_SurfBlob_2[] = INCBIN_U32("graphics/field_effect_objects/pics/surf_blob/2.4bpp"); +const u32 gMapObjectPic_QuintyPlump_0[] = INCBIN_U32("graphics/map_objects/pics/people/quinty_plump/0.4bpp"); +const u32 gMapObjectPic_QuintyPlump_1[] = INCBIN_U32("graphics/map_objects/pics/people/quinty_plump/1.4bpp"); +const u32 gMapObjectPic_QuintyPlump_2[] = INCBIN_U32("graphics/map_objects/pics/people/quinty_plump/2.4bpp"); +const u32 gMapObjectPic_QuintyPlump_3[] = INCBIN_U32("graphics/map_objects/pics/people/quinty_plump/3.4bpp"); +const u32 gMapObjectPic_QuintyPlump_4[] = INCBIN_U32("graphics/map_objects/pics/people/quinty_plump/4.4bpp"); +const u32 gMapObjectPic_QuintyPlump_5[] = INCBIN_U32("graphics/map_objects/pics/people/quinty_plump/5.4bpp"); +const u32 gMapObjectPic_QuintyPlump_6[] = INCBIN_U32("graphics/map_objects/pics/people/quinty_plump/6.4bpp"); +const u16 gMapObjectPalette12[] = INCBIN_U16("graphics/map_objects/palettes/12.gbapal"); +const u16 gMapObjectPalette13[] = INCBIN_U16("graphics/map_objects/palettes/13.gbapal"); + +const u32 gFieldEffectPic_ShadowSmall[] = INCBIN_U32("graphics/field_effect_objects/pics/shadow_small.4bpp"); +const u32 gFieldEffectPic_ShadowMedium[] = INCBIN_U32("graphics/field_effect_objects/pics/shadow_medium.4bpp"); +const u32 gFieldEffectPic_ShadowLarge[] = INCBIN_U32("graphics/field_effect_objects/pics/shadow_large.4bpp"); +const u32 gFieldEffectPic_ShadowExtraLarge[] = INCBIN_U32("graphics/field_effect_objects/pics/shadow_extra_large.4bpp"); +const u32 filler_8368A08[0x48] = {}; +const u32 gFieldEffectPic_CutGrass[] = INCBIN_U32("graphics/field_effect_objects/pics/cut_grass.4bpp"); +const u32 FieldEffectPic_CutGrass_Copy[] = INCBIN_U32("graphics/field_effect_objects/pics/cut_grass.4bpp"); +const u16 gFieldEffectObjectPalette6[] = INCBIN_U16("graphics/field_effect_objects/palettes/06.gbapal"); +const u32 gFieldEffectPic_Ripple_0[] = INCBIN_U32("graphics/field_effect_objects/pics/ripple/0.4bpp"); +const u32 gFieldEffectPic_Ripple_1[] = INCBIN_U32("graphics/field_effect_objects/pics/ripple/1.4bpp"); +const u32 gFieldEffectPic_Ripple_2[] = INCBIN_U32("graphics/field_effect_objects/pics/ripple/2.4bpp"); +const u32 gFieldEffectPic_Ripple_3[] = INCBIN_U32("graphics/field_effect_objects/pics/ripple/3.4bpp"); +const u32 gFieldEffectPic_Ripple_4[] = INCBIN_U32("graphics/field_effect_objects/pics/ripple/4.4bpp"); +const u32 gFieldEffectPic_Ash_0[] = INCBIN_U32("graphics/field_effect_objects/pics/ash/0.4bpp"); +const u32 gFieldEffectPic_Ash_1[] = INCBIN_U32("graphics/field_effect_objects/pics/ash/1.4bpp"); +const u32 gFieldEffectPic_Ash_2[] = INCBIN_U32("graphics/field_effect_objects/pics/ash/2.4bpp"); +const u32 gFieldEffectPic_Ash_3[] = INCBIN_U32("graphics/field_effect_objects/pics/ash/3.4bpp"); +const u32 gFieldEffectPic_Ash_4[] = INCBIN_U32("graphics/field_effect_objects/pics/ash/4.4bpp"); +const u32 gFieldEffectPic_Arrow_0[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/0.4bpp"); +const u32 gFieldEffectPic_Arrow_1[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/1.4bpp"); +const u32 gFieldEffectPic_Arrow_2[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/2.4bpp"); +const u32 gFieldEffectPic_Arrow_3[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/3.4bpp"); +const u32 gFieldEffectPic_Arrow_4[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/4.4bpp"); +const u32 gFieldEffectPic_Arrow_5[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/5.4bpp"); +const u32 gFieldEffectPic_Arrow_6[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/6.4bpp"); +const u32 gFieldEffectPic_Arrow_7[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/7.4bpp"); +const u16 gFieldEffectObjectPalette0[] = INCBIN_U16("graphics/field_effect_objects/palettes/00.gbapal"); +const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effect_objects/palettes/01.gbapal"); +const u32 gFieldEffectPic_Dust_0[] = INCBIN_U32("graphics/field_effect_objects/pics/dust/0.4bpp"); +const u32 gFieldEffectPic_Dust_1[] = INCBIN_U32("graphics/field_effect_objects/pics/dust/1.4bpp"); +const u32 gFieldEffectPic_Dust_2[] = INCBIN_U32("graphics/field_effect_objects/pics/dust/2.4bpp"); +const u32 unknown_8369588[] = INCBIN_U32("graphics/field_effect_objects/unknown.bin"); +const u32 gFieldEffectPic_JumpTallGrass_0[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_tall_grass/0.4bpp"); +const u32 gFieldEffectPic_JumpTallGrass_1[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_tall_grass/1.4bpp"); +const u32 gFieldEffectPic_JumpTallGrass_2[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_tall_grass/2.4bpp"); +const u32 gFieldEffectPic_JumpTallGrass_3[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_tall_grass/3.4bpp"); +const u32 UnusedGrass0[] = INCBIN_U32("graphics/field_effect_objects/pics/unused_grass/0.4bpp"); +const u32 UnusedGrass1[] = INCBIN_U32("graphics/field_effect_objects/pics/unused_grass/1.4bpp"); +const u32 UnusedGrass2[] = INCBIN_U32("graphics/field_effect_objects/pics/unused_grass/2.4bpp"); +const u32 UnusedGrass3[] = INCBIN_U32("graphics/field_effect_objects/pics/unused_grass/3.4bpp"); +const u32 gFieldEffectPic_JumpLongGrass_0[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_long_grass/0.4bpp"); +const u32 gFieldEffectPic_JumpLongGrass_1[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_long_grass/1.4bpp"); +const u32 gFieldEffectPic_JumpLongGrass_2[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_long_grass/2.4bpp"); +const u32 gFieldEffectPic_JumpLongGrass_3[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_long_grass/3.4bpp"); +const u32 gFieldEffectPic_JumpLongGrass_4[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_long_grass/4.4bpp"); +const u32 UnusedGrassLong[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_long_grass/unused.4bpp"); +const u32 gFieldEffectPic_JumpLongGrass_5[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_long_grass/5.4bpp"); +const u32 gFieldEffectPic_Unknown17_0[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/0.4bpp"); +const u32 gFieldEffectPic_Unknown17_1[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/1.4bpp"); +const u32 gFieldEffectPic_Unknown17_2[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/2.4bpp"); +const u32 gFieldEffectPic_Unknown17_3[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/3.4bpp"); +const u32 gFieldEffectPic_Unknown17_4[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/4.4bpp"); +const u32 gFieldEffectPic_Unknown17_5[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/5.4bpp"); +const u32 gFieldEffectPic_Unknown17_6[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/6.4bpp"); +const u32 gFieldEffectPic_Unknown17_7[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/7.4bpp"); +const u32 gFieldEffectPic_Unknown18_0[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_18/0.4bpp"); +const u32 gFieldEffectPic_Unknown18_1[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_18/1.4bpp"); +const u32 gFieldEffectPic_Unknown18_2[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_18/2.4bpp"); +const u32 gFieldEffectPic_Unknown18_3[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_18/3.4bpp"); +const u32 gFieldEffectPic_LongGrass_0[] = INCBIN_U32("graphics/field_effect_objects/pics/long_grass/0.4bpp"); +const u32 gFieldEffectPic_LongGrass_1[] = INCBIN_U32("graphics/field_effect_objects/pics/long_grass/1.4bpp"); +const u32 gFieldEffectPic_LongGrass_2[] = INCBIN_U32("graphics/field_effect_objects/pics/long_grass/2.4bpp"); +const u32 gFieldEffectPic_LongGrass_3[] = INCBIN_U32("graphics/field_effect_objects/pics/long_grass/3.4bpp"); +const u32 gFieldEffectPic_TallGrass_0[] = INCBIN_U32("graphics/field_effect_objects/pics/tall_grass/0.4bpp"); +const u32 gFieldEffectPic_TallGrass_1[] = INCBIN_U32("graphics/field_effect_objects/pics/tall_grass/1.4bpp"); +const u32 gFieldEffectPic_TallGrass_2[] = INCBIN_U32("graphics/field_effect_objects/pics/tall_grass/2.4bpp"); +const u32 gFieldEffectPic_TallGrass_3[] = INCBIN_U32("graphics/field_effect_objects/pics/tall_grass/3.4bpp"); +const u32 gFieldEffectPic_TallGrass_4[] = INCBIN_U32("graphics/field_effect_objects/pics/tall_grass/4.4bpp"); +const u32 gFieldEffectPic_ShortGrass_0[] = INCBIN_U32("graphics/field_effect_objects/pics/short_grass/0.4bpp"); +const u32 gFieldEffectPic_ShortGrass_1[] = INCBIN_U32("graphics/field_effect_objects/pics/short_grass/1.4bpp"); +const u32 gFieldEffectPic_SandFootprints_0[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_footprints/0.4bpp"); +const u32 gFieldEffectPic_SandFootprints_1[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_footprints/1.4bpp"); +const u32 gFieldEffectPic_DeepSandFootprints_0[] = INCBIN_U32("graphics/field_effect_objects/pics/deep_sand_footprints/0.4bpp"); +const u32 gFieldEffectPic_DeepSandFootprints_1[] = INCBIN_U32("graphics/field_effect_objects/pics/deep_sand_footprints/1.4bpp"); +const u32 gFieldEffectPic_BikeTireTracks_0[] = INCBIN_U32("graphics/field_effect_objects/pics/bike_tire_tracks/0.4bpp"); +const u32 gFieldEffectPic_BikeTireTracks_1[] = INCBIN_U32("graphics/field_effect_objects/pics/bike_tire_tracks/1.4bpp"); +const u32 gFieldEffectPic_BikeTireTracks_2[] = INCBIN_U32("graphics/field_effect_objects/pics/bike_tire_tracks/2.4bpp"); +const u32 gFieldEffectPic_BikeTireTracks_3[] = INCBIN_U32("graphics/field_effect_objects/pics/bike_tire_tracks/3.4bpp"); +const u32 gFieldEffectPic_Unknown19_0[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_19/0.4bpp"); +const u32 gFieldEffectPic_Unknown19_1[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_19/1.4bpp"); +const u32 gFieldEffectPic_Unknown19_2[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_19/2.4bpp"); +const u32 gFieldEffectPic_Unknown19_3[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_19/3.4bpp"); +const u32 gFieldEffectPic_SandPile_0[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_pile/0.4bpp"); +const u32 gFieldEffectPic_SandPile_1[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_pile/1.4bpp"); +const u32 gFieldEffectPic_SandPile_2[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_pile/2.4bpp"); +const u32 gFieldEffectPic_JumpBigSplash_0[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_big_splash/0.4bpp"); +const u32 gFieldEffectPic_JumpBigSplash_1[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_big_splash/1.4bpp"); +const u32 gFieldEffectPic_JumpBigSplash_2[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_big_splash/2.4bpp"); +const u32 gFieldEffectPic_JumpBigSplash_3[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_big_splash/3.4bpp"); +const u32 gFieldEffectPic_Splash_0[] = INCBIN_U32("graphics/field_effect_objects/pics/splash/0.4bpp"); +const u32 gFieldEffectPic_Splash_1[] = INCBIN_U32("graphics/field_effect_objects/pics/splash/1.4bpp"); +const u32 gFieldEffectPic_JumpSmallSplash_0[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_small_splash/0.4bpp"); +const u32 gFieldEffectPic_JumpSmallSplash_1[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_small_splash/1.4bpp"); +const u32 gFieldEffectPic_JumpSmallSplash_2[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_small_splash/2.4bpp"); +const u32 gFieldEffectPic_Unknown20_0[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_20/0.4bpp"); +const u32 gFieldEffectPic_Unknown20_1[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_20/1.4bpp"); +const u32 gFieldEffectPic_Unknown20_2[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_20/2.4bpp"); +const u32 gFieldEffectPic_Unknown20_3[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_20/3.4bpp"); +const u32 gFieldEffectPic_Unknown20_4[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_20/4.4bpp"); +const u32 gFieldEffectPic_TreeDisguise_0[] = INCBIN_U32("graphics/field_effect_objects/pics/tree_disguise/0.4bpp"); +const u32 gFieldEffectPic_TreeDisguise_1[] = INCBIN_U32("graphics/field_effect_objects/pics/tree_disguise/1.4bpp"); +const u32 gFieldEffectPic_TreeDisguise_2[] = INCBIN_U32("graphics/field_effect_objects/pics/tree_disguise/2.4bpp"); +const u32 gFieldEffectPic_TreeDisguise_3[] = INCBIN_U32("graphics/field_effect_objects/pics/tree_disguise/3.4bpp"); +const u32 gFieldEffectPic_TreeDisguise_4[] = INCBIN_U32("graphics/field_effect_objects/pics/tree_disguise/4.4bpp"); +const u32 gFieldEffectPic_TreeDisguise_5[] = INCBIN_U32("graphics/field_effect_objects/pics/tree_disguise/5.4bpp"); +const u32 gFieldEffectPic_TreeDisguise_6[] = INCBIN_U32("graphics/field_effect_objects/pics/tree_disguise/6.4bpp"); +const u32 gFieldEffectPic_MountainDisguise_0[] = INCBIN_U32("graphics/field_effect_objects/pics/mountain_disguise/0.4bpp"); +const u32 gFieldEffectPic_MountainDisguise_1[] = INCBIN_U32("graphics/field_effect_objects/pics/mountain_disguise/1.4bpp"); +const u32 gFieldEffectPic_MountainDisguise_2[] = INCBIN_U32("graphics/field_effect_objects/pics/mountain_disguise/2.4bpp"); +const u32 gFieldEffectPic_MountainDisguise_3[] = INCBIN_U32("graphics/field_effect_objects/pics/mountain_disguise/3.4bpp"); +const u32 gFieldEffectPic_MountainDisguise_4[] = INCBIN_U32("graphics/field_effect_objects/pics/mountain_disguise/4.4bpp"); +const u32 gFieldEffectPic_MountainDisguise_5[] = INCBIN_U32("graphics/field_effect_objects/pics/mountain_disguise/5.4bpp"); +const u32 gFieldEffectPic_MountainDisguise_6[] = INCBIN_U32("graphics/field_effect_objects/pics/mountain_disguise/6.4bpp"); +const u32 gFieldEffectPic_SandDisguise_0[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_disguise/0.4bpp"); +const u32 gFieldEffectPic_SandDisguise_1[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_disguise/1.4bpp"); +const u32 gFieldEffectPic_SandDisguise_2[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_disguise/2.4bpp"); +const u32 gFieldEffectPic_SandDisguise_3[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_disguise/3.4bpp"); +const u32 gFieldEffectPic_SandDisguise_4[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_disguise/4.4bpp"); +const u32 gFieldEffectPic_SandDisguise_5[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_disguise/5.4bpp"); +const u32 gFieldEffectPic_SandDisguise_6[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_disguise/6.4bpp"); +const u32 gFieldEffectPic_HotSpringsWater[] = INCBIN_U32("graphics/field_effect_objects/pics/hot_springs_water.4bpp"); +const u16 gFieldEffectObjectPalette2[] = INCBIN_U16("graphics/field_effect_objects/palettes/02.gbapal"); +const u32 gFieldEffectPic_PopOutOfAsh_0[] = INCBIN_U32("graphics/field_effect_objects/pics/pop_out_of_ash/0.4bpp"); +const u32 gFieldEffectPic_PopOutOfAsh_1[] = INCBIN_U32("graphics/field_effect_objects/pics/pop_out_of_ash/1.4bpp"); +const u32 gFieldEffectPic_PopOutOfAsh_2[] = INCBIN_U32("graphics/field_effect_objects/pics/pop_out_of_ash/2.4bpp"); +const u32 gFieldEffectPic_PopOutOfAsh_3[] = INCBIN_U32("graphics/field_effect_objects/pics/pop_out_of_ash/3.4bpp"); +const u32 gFieldEffectPic_PopOutOfAsh_4[] = INCBIN_U32("graphics/field_effect_objects/pics/pop_out_of_ash/4.4bpp"); +const u32 gFieldEffectPic_LavaridgeGymWarp_0[] = INCBIN_U32("graphics/field_effect_objects/pics/lavaridge_gym_warp/0.4bpp"); +const u32 gFieldEffectPic_LavaridgeGymWarp_1[] = INCBIN_U32("graphics/field_effect_objects/pics/lavaridge_gym_warp/1.4bpp"); +const u32 gFieldEffectPic_LavaridgeGymWarp_2[] = INCBIN_U32("graphics/field_effect_objects/pics/lavaridge_gym_warp/2.4bpp"); +const u32 gFieldEffectPic_LavaridgeGymWarp_3[] = INCBIN_U32("graphics/field_effect_objects/pics/lavaridge_gym_warp/3.4bpp"); +const u32 gFieldEffectPic_LavaridgeGymWarp_4[] = INCBIN_U32("graphics/field_effect_objects/pics/lavaridge_gym_warp/4.4bpp"); +const u32 gFieldEffectPic_Bubbles_0[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/0.4bpp"); +const u32 gFieldEffectPic_Bubbles_1[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/1.4bpp"); +const u32 gFieldEffectPic_Bubbles_2[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/2.4bpp"); +const u32 gFieldEffectPic_Bubbles_3[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/3.4bpp"); +const u32 gFieldEffectPic_Bubbles_4[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/4.4bpp"); +const u32 gFieldEffectPic_Bubbles_5[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/5.4bpp"); +const u32 gFieldEffectPic_Bubbles_6[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/6.4bpp"); +const u32 gFieldEffectPic_Bubbles_7[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/7.4bpp"); +const u32 gFieldEffectPic_Sparkle_0[] = INCBIN_U32("graphics/field_effect_objects/pics/sparkle/0.4bpp"); +const u32 gFieldEffectPic_Sparkle_1[] = INCBIN_U32("graphics/field_effect_objects/pics/sparkle/1.4bpp"); +const u16 gFieldEffectObjectPalette3[] = INCBIN_U16("graphics/field_effect_objects/palettes/03.gbapal"); +const u32 gFieldEffectPic_Bird[] = INCBIN_U32("graphics/field_effect_objects/pics/bird.4bpp"); + +void (*const gUnknown_0836DA88[])(struct Sprite *) = +{ + sub_805C884, + sub_805CDE8, + sub_805C8AC, + sub_805CF28, + sub_805CF28, + sub_805D0AC, + sub_805D0AC, + sub_805D230, + sub_805D230, + sub_805D230, + sub_805D230, + sub_80587B4, + FieldObjectCB_BerryTree, + sub_805D4F4, + sub_805D634, + sub_805D774, + sub_805D8B4, + sub_805D9F4, + sub_805DB34, + sub_805DC74, + sub_805DDB4, + sub_805DEF4, + sub_805E034, + sub_805E174, + sub_805E278, + sub_805E37C, + sub_805E37C, + sub_805E37C, + sub_805E37C, + sub_805E5DC, + sub_805E668, + sub_805E6F4, + sub_805E780, + sub_805E80C, + sub_805E898, + sub_805E924, + sub_805E9B0, + sub_805EA3C, + sub_805EAC8, + sub_805EB54, + sub_805EBE0, + sub_805EC6C, + sub_805ECF8, + sub_805ED84, + sub_805EE10, + sub_805EE9C, + sub_805EF28, + sub_805EFB4, + sub_805F040, + sub_805F0CC, + sub_805F158, + sub_805F1E4, + sub_805F270, + sub_805F2FC, + sub_805F2FC, + sub_805F2FC, + sub_805F2FC, + FieldObjectCB_TreeDisguise, + FieldObjectCB_MountainDisguise, + sub_805F8E0, + sub_805F8E0, + sub_805F8E0, + sub_805F8E0, + FieldObjectCB_Hidden1, + sub_805FB20, + sub_805FB20, + sub_805FB20, + sub_805FB20, + sub_805FB90, + sub_805FB90, + sub_805FB90, + sub_805FB90, + sub_805FC00, + sub_805FC00, + sub_805FC00, + sub_805FC00, + sub_805FC70 +}; + +const u8 gUnknown_0836DBBC[] = {0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +const u8 gUnknown_0836DC09[] = {DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_WEST, DIR_NORTH, DIR_NORTH, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST, DIR_NORTH, DIR_WEST, DIR_SOUTH, DIR_EAST, DIR_WEST, DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_EAST, DIR_NORTH, DIR_WEST, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_NORTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_NORTH, DIR_WEST, DIR_EAST, DIR_SOUTH}; + +#include "data/field_map_obj/map_object_graphics_info_pointers.h" +#include "data/field_map_obj/field_effect_object_template_pointers.h" +#include "data/field_map_obj/map_object_pic_tables.h" +#include "data/field_map_obj/map_object_anims.h" +#include "data/field_map_obj/base_oam.h" +#include "data/field_map_obj/map_object_subsprites.h" +#include "data/field_map_obj/map_object_graphics_info.h" + +const struct SpritePalette gUnknown_0837377C[] = { + {gMapObjectPalette0, 0x1103}, + {gMapObjectPalette1, 0x1104}, + {gMapObjectPalette2, 0x1105}, + {gMapObjectPalette3, 0x1106}, + {gMapObjectPalette4, 0x1107}, + {gMapObjectPalette5, 0x1108}, + {gMapObjectPalette6, 0x1109}, + {gMapObjectPalette7, 0x110A}, + {gMapObjectPalette8, 0x1100}, + {gMapObjectPalette9, 0x1101}, + {gMapObjectPalette10, 0x1102}, + {gMapObjectPalette11, 0x1115}, + {gMapObjectPalette12, 0x110B}, + {gMapObjectPalette13, 0x110C}, + {gMapObjectPalette14, 0x110D}, + {gMapObjectPalette15, 0x110E}, + {gMapObjectPalette16, 0x110F}, + {gMapObjectPalette17, 0x1110}, + {gMapObjectPalette18, 0x1111}, + {gMapObjectPalette19, 0x1112}, + {gMapObjectPalette20, 0x1113}, + {gMapObjectPalette21, 0x1114}, + {gMapObjectPalette22, 0x1116}, + {gMapObjectPalette23, 0x1117}, + {gMapObjectPalette24, 0x1118}, + {gMapObjectPalette25, 0x1119}, + {gMapObjectPalette26, 0x111A}, + {NULL, 0x0000} +}; + +const u16 Palettes_837385C[] = { + 0x1101, + 0x1101, + 0x1101, + 0x1101 +}; + +const u16 Palettes_8373864[] = { + 0x1111, + 0x1111, + 0x1111, + 0x1111 +}; + +const u16 Palettes_837386C[] = { + 0x1115, + 0x1115, + 0x1115, + 0x1115 +}; + +const struct PairedPalettes gUnknown_08373874[] = { + {0x1100, Palettes_837385C}, + {0x1110, Palettes_837385C}, + {0x1115, Palettes_837386C}, + {0x11FF, NULL} +}; + +const u16 Palettes_8373894[] = { + 0x110C, + 0x110C, + 0x110C, + 0x110C +}; + +const u16 Palettes_837389C[] = { + 0x110D, + 0x110D, + 0x110D, + 0x110D +}; + +const u16 Palettes_83738A4[] = { + 0x110E, + 0x110E, + 0x110E, + 0x110E +}; + +const u16 Palettes_83738AC[] = { + 0x1112, + 0x1112, + 0x1112, + 0x1112 +}; + +const u16 Palettes_83738B4[] = { + 0x1113, + 0x1113, + 0x1113, + 0x1113 +}; + +const u16 Palettes_83738BC[] = { + 0x1114, + 0x1114, + 0x1114, + 0x1114 +}; + +const u16 Palettes_83738C4[] = { + 0x111A, + 0x111A, + 0x111A, + 0x111A +}; + +const u16 Palettes_83738CC[] = { + 0x1117, + 0x1117, + 0x1117, + 0x1117 +}; + +const u16 Palettes_83738D4[] = { + 0x1119, + 0x1119, + 0x1119, + 0x1119 +}; + +const u16 Palettes_83738DC[] = { + 0x1109, + 0x1109, + 0x1109, + 0x1109 +}; + +const struct PairedPalettes gUnknown_083738E4[] = { + {0x1100, Palettes_837385C}, + {0x1110, Palettes_837385C}, + {0x110B, Palettes_8373894}, + {0x110D, Palettes_837389C}, + {0x110E, Palettes_83738A4}, + {0x1112, Palettes_83738AC}, + {0x1113, Palettes_83738B4}, + {0x1114, Palettes_83738BC}, + {0x1116, Palettes_83738CC}, + {0x1118, Palettes_83738D4}, + {0x1105, Palettes_83738DC}, + {0x111A, Palettes_83738C4}, + {0x11FF, NULL} +}; + +const u16 Unknown_837394C[] = { + 0x1100, + 0x1101, + 0x1103, + 0x1104, + 0x1105, + 0x1106, + 0x1107, + 0x1108, + 0x1109, + 0x110A +}; + +const u16 Unknown_8373960[] = { + 0x1100, + 0x1101, + 0x1103, + 0x1104, + 0x1105, + 0x1106, + 0x1107, + 0x1108, + 0x1109, + 0x110A +}; + +const u16 Unknown_8373974[] = { + 0x1100, + 0x1101, + 0x1103, + 0x1104, + 0x1105, + 0x1106, + 0x1107, + 0x1108, + 0x1109, + 0x110A +}; + +const u16 Unknown_8373988[] = { + 0x1100, + 0x1101, + 0x1103, + 0x1104, + 0x1105, + 0x1106, + 0x1107, + 0x1108, + 0x1109, + 0x110A +}; + +const u16 *const gUnknown_0837399C[] = { + Unknown_837394C, + Unknown_8373960, + Unknown_8373974, + Unknown_8373988 +}; + +#include "data/field_map_obj/berry_tree_graphics_tables.h" +#include "data/field_map_obj/field_effect_objects.h" + +const s16 gUnknown_0837520C[] = {0x20, 0x40, 0x60, 0x80}; +const s16 gUnknown_08375204[] = {0x20, 0x40, 0x80, 0xc0}; +const s16 gUnknown_0837521C[] = {0x20, 0x30, 0x40, 0x50}; + +#include "data/field_map_obj/callback_subroutine_pointers.h" + +const u8 gUnknown_083755F4[] = {0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0x00, 0x01, 0x01}; +const u8 gUnknown_083755FD[] = {0x04, 0x04, 0x05, 0x06, 0x07, 0x04, 0x04, 0x05, 0x05}; +const u8 gUnknown_08375606[] = {0x08, 0x08, 0x09, 0x0A, 0x0B, 0x08, 0x08, 0x09, 0x09}; +const u8 gUnknown_0837560F[] = {0x0C, 0x0C, 0x0D, 0x0E, 0x0F, 0x0C, 0x0C, 0x0D, 0x0D}; +const u8 gUnknown_08375618[] = {0x10, 0x10, 0x11, 0x12, 0x13, 0x10, 0x10, 0x11, 0x11}; +const u8 gUnknown_08375621[] = {0x14, 0x14, 0x15, 0x16, 0x17, 0x14, 0x14, 0x15, 0x15}; +const u8 gUnknown_0837562A[] = {0x14, 0x14, 0x15, 0x16, 0x17, 0x14, 0x14, 0x15, 0x15}; +const u8 gUnknown_08375633[] = {0x18, 0x18, 0x19, 0x1A, 0x1B, 0x18, 0x18, 0x19, 0x19}; +const u8 gUnknown_0837563C[] = {0x1C, 0x1C, 0x1D, 0x1E, 0x1F, 0x1C, 0x1C, 0x1D, 0x1D}; +const u8 gUnknown_08375645[] = {0x20, 0x20, 0x21, 0x22, 0x23, 0x20, 0x20, 0x21, 0x21}; +const u8 gUnknown_0837564E[] = {0x24, 0x24, 0x25, 0x26, 0x27, 0x24, 0x24, 0x25, 0x25}; +const u8 gUnknown_08375657[] = {0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0x00, 0x01, 0x01}; +const u8 gUnknown_08375660[] = {0x04, 0x04, 0x05, 0x06, 0x07, 0x04, 0x04, 0x05, 0x05}; +const u8 gUnknown_08375669[] = {0x08, 0x08, 0x09, 0x0A, 0x0B, 0x08, 0x08, 0x09, 0x09}; +const u8 gUnknown_08375672[] = {0x14, 0x14, 0x15, 0x16, 0x17, 0x14, 0x14, 0x15, 0x15}; +const u8 gUnknown_0837567B[] = {0x08, 0x08, 0x07, 0x09, 0x0A, 0x08, 0x08, 0x07, 0x07}; + +bool8 (*const gUnknown_08375684[])(u8) = { + MetatileBehavior_IsSouthBlocked, + MetatileBehavior_IsNorthBlocked, + MetatileBehavior_IsWestBlocked, + MetatileBehavior_IsEastBlocked +}; + +bool8 (*const gUnknown_08375694[])(u8) = { + MetatileBehavior_IsNorthBlocked, + MetatileBehavior_IsSouthBlocked, + MetatileBehavior_IsEastBlocked, + MetatileBehavior_IsWestBlocked +}; + +const struct Coords16 gDirectionToVector[] = { + { 0, 0}, + { 0, 1}, + { 0, -1}, + {-1, 0}, + { 1, 0}, + {-1, 1}, + { 1, 1}, + {-1, -1}, + { 1, -1} +}; + +const u8 gUnknown_083756C8[] = {0x00, 0x00, 0x01, 0x02, 0x03}; +const u8 gUnknown_083756CD[] = {0x04, 0x04, 0x05, 0x06, 0x07}; +const u8 gUnknown_083756D2[] = {0x08, 0x08, 0x09, 0x0A, 0x0B}; +const u8 gUnknown_083756D7[] = {0x15, 0x15, 0x16, 0x17, 0x18}; +const u8 gUnknown_083756DC[] = {0x29, 0x29, 0x2A, 0x2B, 0x2C}; +const u8 gUnknown_083756E1[] = {0x2D, 0x2D, 0x2E, 0x2F, 0x30}; +const u8 gUnknown_083756E6[] = {0x31, 0x31, 0x32, 0x33, 0x34}; +const u8 gUnknown_083756EB[] = {0x35, 0x35, 0x36, 0x37, 0x38}; +const u8 gUnknown_083756F0[] = {0x0C, 0x0C, 0x0D, 0x0E, 0x0F}; +const u8 gUnknown_083756F5[] = {0x46, 0x46, 0x47, 0x48, 0x49}; +const u8 gUnknown_083756FA[] = {0x4B, 0x4B, 0x4A, 0x4D, 0x4C}; +const u8 gUnknown_083756FF[] = {0x42, 0x42, 0x43, 0x44, 0x45}; +const u8 gUnknown_08375704[] = {0x3A, 0x3A, 0x3B, 0x3C, 0x3D}; +const u8 gUnknown_08375709[] = {0x19, 0x19, 0x1A, 0x1B, 0x1C}; +const u8 gUnknown_0837570E[] = {0x1D, 0x1D, 0x1E, 0x1F, 0x20}; +const u8 gUnknown_08375713[] = {0x21, 0x21, 0x22, 0x23, 0x24}; +const u8 gUnknown_08375718[] = {0x25, 0x25, 0x26, 0x27, 0x28}; +const u8 gUnknown_0837571D[] = {0x62, 0x62, 0x63, 0x64, 0x65}; +const u8 gUnknown_08375722[] = {0x66, 0x66, 0x67, 0x68, 0x69}; +const u8 gUnknown_08375727[] = {0x6A, 0x6A, 0x6B, 0x6C, 0x6D}; +const u8 gUnknown_0837572C[] = {0x6E, 0x6E, 0x6F, 0x70, 0x71}; +const u8 gUnknown_08375731[] = {0x72, 0x72, 0x73, 0x74, 0x75}; +const u8 gUnknown_08375736[] = {0x76, 0x76, 0x77, 0x78, 0x79}; +const u8 gUnknown_0837573B[] = {0x7A, 0x7A, 0x7B, 0x7C, 0x7D}; +const u8 gUnknown_08375740[] = {0x7E, 0x7E, 0x7F, 0x80, 0x81}; +const u8 gUnknown_08375745[] = {0x82, 0x82, 0x83, 0x84, 0x85}; +const u8 gUnknown_0837574A[] = {0x86, 0x86, 0x87, 0x88, 0x89}; + +const u8 gUnknown_0837574F[] = {2, 1, 4, 3, 8, 7, 6, 5}; + +const u8 gUnknown_08375757[][4] = { + {2, 1, 4, 3}, + {1, 2, 3, 4}, + {3, 4, 2, 1}, + {4, 3, 1, 2} +}; + +const u8 gUnknown_08375767[][4] = { + {2, 1, 4, 3}, + {1, 2, 3, 4}, + {4, 3, 1, 2}, + {3, 4, 2, 1} +}; + +#include "data/field_map_obj/anim_func_ptrs.h" + +// text + +extern void strange_npc_table_clear(void); +extern void ClearPlayerAvatarInfo(void); +extern void npc_load_two_palettes__no_record(u16, u8); +extern void npc_load_two_palettes__and_record(u16, u8); +extern void sub_8060388(s16, s16, s16 *, s16 *); +void sub_80634D0(struct MapObject *, struct Sprite *); +extern void pal_patch_for_npc(u16, u16); +extern void CameraObjectReset1(void); + +extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; +extern u8 gReservedSpritePaletteCount; +extern struct Camera gUnknown_0202E844; + +static u8 gUnknown_030005A4; +static u16 gUnknown_030005A6; + +struct MapObject gMapObjects[16]; + +void npc_clear_ids_and_state(struct MapObject *mapObj) +{ + memset(mapObj, 0, sizeof(struct MapObject)); + mapObj->localId = 0xFF; + mapObj->mapNum = 0xFF; + mapObj->mapGroup = 0xFF; + mapObj->mapobj_unk_1C = 0xFF; +} + +void npcs_clear_ids_and_state(void) +{ + u8 i; + + for (i = 0; i < 16; i++) + npc_clear_ids_and_state(&gMapObjects[i]); +} + +void sub_805AA98(void) +{ + strange_npc_table_clear(); + npcs_clear_ids_and_state(); + ClearPlayerAvatarInfo(); + sub_805AAB0(); +} + +void sub_805AAB0(void) +{ + u8 spriteId; + + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 0x1F); + + gSprites[spriteId].oam.affineMode = 1; + InitSpriteAffineAnim(&gSprites[spriteId]); + StartSpriteAffineAnim(&gSprites[spriteId], 0); + gSprites[spriteId].invisible = 1; + + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 0x1F); + + gSprites[spriteId].oam.affineMode = 1; + InitSpriteAffineAnim(&gSprites[spriteId]); + StartSpriteAffineAnim(&gSprites[spriteId], 1); + gSprites[spriteId].invisible = 1; +} + +u8 sub_805AB54(void) +{ + u8 i; + + for (i = 0; i < 16; i++) + { + if (!gMapObjects[i].active) + break; + } + return i; +} + +u8 GetFieldObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +{ + if (localId <= 0xFE) + return GetFieldObjectIdByLocalIdAndMapInternal(localId, mapNum, mapGroup); + else + return GetFieldObjectIdByLocalId(localId); +} + +bool8 TryGetFieldObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 *mapObjectId) +{ + *mapObjectId = GetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup); + if (*mapObjectId == 16) + return TRUE; + else + return FALSE; +} + +u8 GetFieldObjectIdByXY(s16 x, s16 y) +{ + u8 i; + + for (i = 0; i < 16; i++) + { + if (gMapObjects[i].active && gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y) + break; + } + return i; +} + +u8 GetFieldObjectIdByLocalIdAndMapInternal(u8 localId, u8 mapNum, u8 mapGroup) +{ + u8 i; + + for (i = 0; i < 16; i++) + { + if (gMapObjects[i].active && gMapObjects[i].localId == localId && gMapObjects[i].mapNum == mapNum && gMapObjects[i].mapGroup == mapGroup) + return i; + } + return 16; +} + +u8 GetFieldObjectIdByLocalId(u8 localId) +{ + u8 i; + + for (i = 0; i < 16; i++) + { + if (gMapObjects[i].active && gMapObjects[i].localId == localId) + return i; + } + return 16; +} + +#ifdef NONMATCHING +u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c) +{ + struct MapObject2 *mapObj; //TODO: resolve the mapobj_unk_19b weirdness + u8 var; + u16 r3; + u16 r2; + + //asm("nop"::"r"(b)); + if (GetAvailableFieldObjectSlot(template->localId, b, c, &var) != 0) + return 16; + //_0805ACCE + mapObj = (struct MapObject2 *)&gMapObjects[var]; + npc_clear_ids_and_state((struct MapObject *)mapObj); + r3 = template->x + 7; + r2 = template->y + 7; + mapObj->active = TRUE; + mapObj->mapobj_bit_2 = TRUE; + mapObj->graphicsId = template->graphicsId; + mapObj->animPattern = template->movementType; + mapObj->localId = template->localId; + mapObj->mapNum = b; + mapObj->mapGroup = c; + mapObj->coords1.x = r3; + mapObj->coords1.y = r2; + mapObj->coords2.x = r3; + mapObj->coords2.y = r2; + mapObj->coords3.x = r3; + mapObj->coords3.y = r2; + mapObj->mapobj_unk_0B_0 = template->elevation; + mapObj->elevation = template->elevation; + mapObj->mapobj_unk_19 = template->unkA_0; + mapObj->mapobj_unk_19b = template->unkA_4; + mapObj->trainerType = template->unkC; + mapObj->trainerRange_berryTreeId = template->unkE; + mapObj->mapobj_unk_20 = gUnknown_0836DC09[template->movementType]; + FieldObjectSetDirection((struct MapObject *)mapObj, mapObj->mapobj_unk_20); + FieldObjectHandleDynamicGraphicsId(mapObj); + //asm("":::"r5","r6"); + if (gUnknown_0836DBBC[mapObj->animPattern] != 0) + { + if (mapObj->mapobj_unk_19 == 0) + mapObj->mapobj_unk_19++; + if (mapObj->mapobj_unk_19b == 0) + mapObj->mapobj_unk_19b++; + } + return var; +} +#else +__attribute__((naked)) +u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + sub sp, 0x4\n\ + adds r5, r0, 0\n\ + lsls r1, 24\n\ + lsrs r6, r1, 24\n\ + lsls r2, 24\n\ + lsrs r7, r2, 24\n\ + ldrb r0, [r5]\n\ + adds r1, r6, 0\n\ + adds r2, r7, 0\n\ + mov r3, sp\n\ + bl GetAvailableFieldObjectSlot\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _0805ACCE\n\ + movs r0, 0x10\n\ + b _0805ADC2\n\ +_0805ACCE:\n\ + mov r0, sp\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 3\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r1, _0805ADD0 @ =gMapObjects\n\ + adds r4, r0, r1\n\ + adds r0, r4, 0\n\ + bl npc_clear_ids_and_state\n\ + ldrh r3, [r5, 0x4]\n\ + adds r3, 0x7\n\ + lsls r3, 16\n\ + lsrs r3, 16\n\ + ldrh r2, [r5, 0x6]\n\ + adds r2, 0x7\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + ldrb r0, [r4]\n\ + movs r1, 0x1\n\ + orrs r0, r1\n\ + movs r1, 0x4\n\ + orrs r0, r1\n\ + strb r0, [r4]\n\ + ldrb r0, [r5, 0x1]\n\ + strb r0, [r4, 0x5]\n\ + ldrb r0, [r5, 0x9]\n\ + strb r0, [r4, 0x6]\n\ + ldrb r0, [r5]\n\ + strb r0, [r4, 0x8]\n\ + strb r6, [r4, 0x9]\n\ + strb r7, [r4, 0xA]\n\ + strh r3, [r4, 0xC]\n\ + strh r2, [r4, 0xE]\n\ + strh r3, [r4, 0x10]\n\ + strh r2, [r4, 0x12]\n\ + strh r3, [r4, 0x14]\n\ + strh r2, [r4, 0x16]\n\ + ldrb r0, [r5, 0x8]\n\ + movs r7, 0xF\n\ + adds r1, r7, 0\n\ + ands r1, r0\n\ + ldrb r2, [r4, 0xB]\n\ + movs r0, 0x10\n\ + negs r0, r0\n\ + mov r8, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r4, 0xB]\n\ + ldrb r1, [r5, 0x8]\n\ + lsls r1, 4\n\ + ands r0, r7\n\ + orrs r0, r1\n\ + strb r0, [r4, 0xB]\n\ + ldrb r1, [r5, 0xA]\n\ + lsls r1, 28\n\ + movs r0, 0xF\n\ + mov r9, r0\n\ + lsrs r1, 28\n\ + ldrb r2, [r4, 0x19]\n\ + mov r0, r8\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x19]\n\ + ldrb r1, [r5, 0xA]\n\ + lsrs r1, 4\n\ + lsls r1, 4\n\ + ands r0, r7\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x19]\n\ + ldrh r0, [r5, 0xC]\n\ + strb r0, [r4, 0x7]\n\ + ldrh r0, [r5, 0xE]\n\ + strb r0, [r4, 0x1D]\n\ + ldr r1, _0805ADD4 @ =gUnknown_0836DC09\n\ + ldrb r0, [r5, 0x9]\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + adds r0, r4, 0\n\ + adds r0, 0x20\n\ + strb r1, [r0]\n\ + ldrb r1, [r0]\n\ + adds r0, r4, 0\n\ + bl FieldObjectSetDirection\n\ + adds r0, r4, 0\n\ + bl FieldObjectHandleDynamicGraphicsId\n\ + ldr r1, _0805ADD8 @ =gUnknown_0836DBBC\n\ + ldrb r0, [r4, 0x6]\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _0805ADBE\n\ + ldrb r2, [r4, 0x19]\n\ + adds r0, r7, 0\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + bne _0805ADA6\n\ + lsls r0, r2, 28\n\ + lsrs r0, 28\n\ + adds r0, 0x1\n\ + mov r1, r9\n\ + ands r0, r1\n\ + mov r1, r8\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + strb r1, [r4, 0x19]\n\ +_0805ADA6:\n\ + ldrb r2, [r4, 0x19]\n\ + movs r0, 0xF0\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + bne _0805ADBE\n\ + lsrs r1, r2, 4\n\ + adds r1, 0x1\n\ + lsls r1, 4\n\ + adds r0, r7, 0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x19]\n\ +_0805ADBE:\n\ + mov r0, sp\n\ + ldrb r0, [r0]\n\ +_0805ADC2:\n\ + add sp, 0x4\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\ +_0805ADD0: .4byte gMapObjects\n\ +_0805ADD4: .4byte gUnknown_0836DC09\n\ +_0805ADD8: .4byte gUnknown_0836DBBC\n\ + .syntax divided\n"); +} +#endif + +u8 sub_805ADDC(u8 localId) +{ + u8 objectCount; + u8 i; + + if (gMapHeader.events == NULL) + return 16; + objectCount = gMapHeader.events->mapObjectCount; + for (i = 0; i < objectCount; i++) + { + struct MapObjectTemplate *template = &gSaveBlock1.mapObjectTemplates[i]; + + if (template->localId == localId && !FlagGet(template->flagId)) + return InitFieldObjectStateFromTemplate(template, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + } + return 16; +} + +u8 GetAvailableFieldObjectSlot(u16 a, u8 b, u8 c, u8 *d) +{ + u8 i = 0; + + for (i = 0; i < 16 && gMapObjects[i].active; i++) + { + if (gMapObjects[i].localId == a && gMapObjects[i].mapNum == b && gMapObjects[i].mapGroup == c) + return 1; + } + if (i >= 16) + return 1; + *d = i; + for (; i < 16; i++) + { + if (gMapObjects[i].active && gMapObjects[i].localId == a && gMapObjects[i].mapNum == b && gMapObjects[i].mapGroup == c) + return 1; + } + return 0; +} + +void RemoveFieldObject(struct MapObject *mapObject) +{ + mapObject->active = FALSE; + RemoveFieldObjectInternal(mapObject); +} + +void RemoveFieldObjectByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +{ + u8 mapObjectId; + + if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + return; + FlagSet(GetFieldObjectFlagIdByFieldObjectId(mapObjectId)); + RemoveFieldObject(&gMapObjects[mapObjectId]); +} + +void RemoveFieldObjectInternal(struct MapObject *mapObject) +{ + struct SpriteFrameImage image; + const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + + image.size = gfxInfo->size; + gSprites[mapObject->spriteId].images = ℑ + DestroySprite(&gSprites[mapObject->spriteId]); +} + +void npc_hide_all_but_player(void) +{ + u8 i; + + for (i = 0; i < 16; i++) + { + if (i != gPlayerAvatar.mapObjectId) + RemoveFieldObject(&gMapObjects[i]); + } +} + +u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, u8 c, u8 d, s16 e, s16 f) +{ + u8 mapObjectId; + u8 spriteId; + const struct MapObjectGraphicsInfo *gfxInfo; + struct MapObject *mapObject; + struct Sprite *sprite; + + mapObjectId = InitFieldObjectStateFromTemplate(mapObjTemplate, c, d); + if (mapObjectId == 16) + return 16; + + mapObject = &gMapObjects[mapObjectId]; + gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + if (gfxInfo->paletteSlot == 0) + npc_load_two_palettes__no_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + else if (gfxInfo->paletteSlot == 10) + npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + if (mapObject->animPattern == 0x4C) + mapObject->mapobj_bit_13 = TRUE; + +#ifdef NONMATCHING + sprTemplate->paletteTag = 0xFFFF; +#else + *(u16 *)&sprTemplate->paletteTag = 0xFFFF; +#endif + spriteId = CreateSprite(sprTemplate, 0, 0, 0); + if (spriteId == 64) + { + gMapObjects[mapObjectId].active = FALSE; + return 16; + } + sprite = &gSprites[spriteId]; + sub_8060388(e + mapObject->coords2.x, f + mapObject->coords2.y, &sprite->pos1.x, &sprite->pos1.y); + sprite->centerToCornerVecX = -(gfxInfo->width >> 1); + sprite->centerToCornerVecY = -(gfxInfo->height >> 1); + sprite->pos1.x += 8; + sprite->pos1.y += 16 + sprite->centerToCornerVecY; + sprite->oam.paletteNum = gfxInfo->paletteSlot; + sprite->coordOffsetEnabled = TRUE; + sprite->data0 = mapObjectId; + mapObject->spriteId = spriteId; + mapObject->mapobj_bit_12 = gfxInfo->inanimate; + if (!mapObject->mapobj_bit_12) + StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObject->mapobj_unk_18)); + SetObjectSubpriorityByZCoord(mapObject->elevation, sprite, 1); + sub_80634D0(mapObject, sprite); + return mapObjectId; +} + +u8 SpawnFieldObject(struct MapObjectTemplate *mapObjTemplate, u8 b, u8 c, s16 d, s16 e) +{ + struct SpriteTemplate spriteTemplate; + const struct SubspriteTable *subspriteTables = NULL; + struct SpriteFrameImage spriteFrameImage; + const struct MapObjectGraphicsInfo *gfxInfo; + u8 mapObjectId; + + gfxInfo = GetFieldObjectGraphicsInfo(mapObjTemplate->graphicsId); + MakeObjectTemplateFromFieldObjectTemplate(mapObjTemplate, &spriteTemplate, &subspriteTables); + spriteFrameImage.size = gfxInfo->size; + spriteTemplate.images = &spriteFrameImage; + mapObjectId = sub_805AFCC(mapObjTemplate, &spriteTemplate, b, c, d, e); + if (mapObjectId == 16) + return 16; + gSprites[gMapObjects[mapObjectId].spriteId].images = gfxInfo->images; + if (subspriteTables != NULL) + SetSubspriteTables(&gSprites[gMapObjects[mapObjectId].spriteId], subspriteTables); + return mapObjectId; +} + +u8 SpawnSpecialFieldObject(struct MapObjectTemplate *mapObjTemplate) +{ + s16 x; + s16 y; + + GetFieldObjectMovingCameraOffset(&x, &y); + return SpawnFieldObject(mapObjTemplate, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, x, y); +} + +u8 SpawnSpecialFieldObjectParametrized(u8 a, u8 b, u8 c, s16 d, s16 e, u8 f) +{ + struct MapObjectTemplate mapObjTemplate; + + d -= 7; + e -= 7; + mapObjTemplate.localId = c; + mapObjTemplate.graphicsId = a; + mapObjTemplate.unk2 = 0; + mapObjTemplate.x = d; + mapObjTemplate.y = e; + mapObjTemplate.elevation = f; + mapObjTemplate.movementType = b; + mapObjTemplate.unkA_0 = 0; + mapObjTemplate.unkA_4 = 0; + mapObjTemplate.unkC = 0; + mapObjTemplate.unkE = 0; + return SpawnSpecialFieldObject(&mapObjTemplate); +} + +u8 show_sprite(u8 a, u8 b, u8 c) +{ + struct MapObjectTemplate *r5; + s16 x; + s16 y; + + r5 = GetFieldObjectTemplateByLocalIdAndMap(a, b, c); + if (r5 == NULL) + return 16; + GetFieldObjectMovingCameraOffset(&x, &y); + return SpawnFieldObject(r5, b, c, x, y); +} + +void MakeObjectTemplateFromFieldObjectGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables) +{ + const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(graphicsId); + + sprTemplate->tileTag = gfxInfo->tileTag; + sprTemplate->paletteTag = gfxInfo->paletteTag1; + sprTemplate->oam = gfxInfo->oam; + sprTemplate->anims = gfxInfo->anims; + sprTemplate->images = gfxInfo->images; + sprTemplate->affineAnims = gfxInfo->affineAnims; + sprTemplate->callback = callback; + *subspriteTables = gfxInfo->subspriteTables; +} + +void MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(u16 graphicsId, u16 callbackIndex, struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables) +{ + MakeObjectTemplateFromFieldObjectGraphicsInfo(graphicsId, gUnknown_0836DA88[callbackIndex], sprTemplate, subspriteTables); +} + +void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables) +{ + MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(mapObjTemplate->graphicsId, mapObjTemplate->movementType, sprTemplate, subspriteTables); +} + +u8 AddPseudoFieldObject(u16 graphicsId, void (*callback)(struct Sprite *), s16 c, s16 d, u8 subpriority) +{ + struct SpriteTemplate spriteTemplate; + const struct SubspriteTable *subspriteTables; + u8 spriteId; + + MakeObjectTemplateFromFieldObjectGraphicsInfo(graphicsId, callback, &spriteTemplate, &subspriteTables); + if (spriteTemplate.paletteTag != 0xFFFF) + sub_805BDF8(spriteTemplate.paletteTag); + spriteId = CreateSprite(&spriteTemplate, c, d, subpriority); + if (spriteId != 64 && subspriteTables != NULL) + { + SetSubspriteTables(&gSprites[spriteId], subspriteTables); + gSprites[spriteId].subspriteMode = 2; + } + return spriteId; +} + +extern void sub_8064970(struct Sprite *); +extern void sub_8060470(s16 *, s16 *, s16, s16); +extern void InitObjectPriorityByZCoord(); + +u8 sub_805B410(u8 a, u8 b, s16 c, s16 d, u8 e, u8 f) +{ + const struct MapObjectGraphicsInfo *gfxInfo; + struct SpriteTemplate spriteTemplate; + const struct SubspriteTable *subspriteTables; + u8 spriteId; + + gfxInfo = GetFieldObjectGraphicsInfo(a); + MakeObjectTemplateFromFieldObjectGraphicsInfo(a, sub_8064970, &spriteTemplate, &subspriteTables); +#ifdef NONMATCHING + spriteTemplate.paletteTag = 0xFFFF; +#else + *(u16 *)&spriteTemplate.paletteTag = 0xFFFF; +#endif + c += 7; + d += 7; + sub_8060470(&c, &d, 8, 16); + spriteId = CreateSpriteAtEnd(&spriteTemplate, c, d, 0); + if (spriteId != 64) + { + struct Sprite *sprite = &gSprites[spriteId]; + + sprite->centerToCornerVecX = -(gfxInfo->width >> 1); + sprite->centerToCornerVecY = -(gfxInfo->height >> 1); + sprite->pos1.y += sprite->centerToCornerVecY; + sprite->oam.paletteNum = gfxInfo->paletteSlot; + sprite->coordOffsetEnabled = TRUE; + sprite->data0 = b; + sprite->data1 = e; + if (gfxInfo->paletteSlot == 10) + npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + if (subspriteTables != NULL) + { + SetSubspriteTables(sprite, subspriteTables); + sprite->subspriteMode = 2; + } + InitObjectPriorityByZCoord(sprite, e); + SetObjectSubpriorityByZCoord(e, sprite, 1); + StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(f)); + } + return spriteId; +} + +void sub_805B55C(s16 a, s16 b) +{ + u8 i; + + if (gMapHeader.events != NULL) + { + s16 r9 = gSaveBlock1.pos.x - 2; + s16 sp8 = gSaveBlock1.pos.x + 17; + s16 r10 = gSaveBlock1.pos.y; + s16 spC = gSaveBlock1.pos.y + 16; + u8 objectCount = gMapHeader.events->mapObjectCount; + + for (i = 0; i < objectCount; i++) + { + struct MapObjectTemplate *template = &gSaveBlock1.mapObjectTemplates[i]; + s16 foo = template->x + 7; + s16 bar = template->y + 7; + + if (r10 <= bar && spC >= bar && r9 <= foo && sp8 >= foo + && !FlagGet(template->flagId)) + SpawnFieldObject(template, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, a, b); + } + } +} + +void RemoveFieldObjectIfOutsideView(struct MapObject *mapObject); + +void RemoveFieldObjectsOutsideView(void) +{ + u8 i; + u8 j; + + for (i = 0; i < 16; i++) + { + bool8 isActiveLinkPlayer; + + for (j = 0, isActiveLinkPlayer = 0; j < 4; j++) + { + if (gLinkPlayerMapObjects[j].active && i == gLinkPlayerMapObjects[j].mapObjId) + isActiveLinkPlayer = TRUE; + } + if (!isActiveLinkPlayer) + { + struct MapObject *mapObject = &gMapObjects[i]; + + if (mapObject->active && !mapObject->mapobj_bit_16) + RemoveFieldObjectIfOutsideView(mapObject); + } + } +} + +void RemoveFieldObjectIfOutsideView(struct MapObject *mapObject) +{ + s16 r7 = gSaveBlock1.pos.x - 2; + s16 r5 = gSaveBlock1.pos.x + 17; + s16 r4 = gSaveBlock1.pos.y; + s16 r6 = gSaveBlock1.pos.y + 16; + + if (mapObject->coords2.x >= r7 && mapObject->coords2.x <= r5 + && mapObject->coords2.y >= r4 && mapObject->coords2.y <= r6) + return; + if (mapObject->coords1.x >= r7 && mapObject->coords1.x <= r5 + && mapObject->coords1.y >= r4 && mapObject->coords1.y <= r6) + return; + RemoveFieldObject(mapObject); +} + +void sub_805B75C(u8, s16, s16); + +void sub_805B710(u16 a, u16 b) +{ + u8 i; + + ClearPlayerAvatarInfo(); + for (i = 0; i < 16; i++) + { + if (gMapObjects[i].active) + sub_805B75C(i, a, b); + } + sub_805AAB0(); +} + +extern void SetPlayerAvatarFieldObjectIdAndObjectId(u8, u8); +extern void sub_805B914(struct MapObject *); + +void sub_805B75C(u8 a, s16 b, s16 c) +{ + struct SpriteTemplate sp0; + struct SpriteFrameImage sp18; + const struct SubspriteTable *subspriteTables; + const struct MapObjectGraphicsInfo *gfxInfo; + struct MapObject *mapObject; + u8 spriteId; + + #define i spriteId + for (i = 0; i < 4; i++) + { + if (gLinkPlayerMapObjects[i].active && a == gLinkPlayerMapObjects[i].mapObjId) + return; + } + #undef i + + mapObject = &gMapObjects[a]; + asm("":::"r5"); + subspriteTables = NULL; + gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + sp18.size = gfxInfo->size; + MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(mapObject->graphicsId, mapObject->animPattern, &sp0, &subspriteTables); + sp0.images = &sp18; + *(u16 *)&sp0.paletteTag = 0xFFFF; + if (gfxInfo->paletteSlot == 0) + npc_load_two_palettes__no_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + if (gfxInfo->paletteSlot > 9) + npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + *(u16 *)&sp0.paletteTag = 0xFFFF; + spriteId = CreateSprite(&sp0, 0, 0, 0); + if (spriteId != 64) + { + struct Sprite *sprite = &gSprites[spriteId]; + + sub_8060388(b + mapObject->coords2.x, c + mapObject->coords2.y, &sprite->pos1.x, &sprite->pos1.y); + sprite->centerToCornerVecX = -(gfxInfo->width >> 1); + sprite->centerToCornerVecY = -(gfxInfo->height >> 1); + sprite->pos1.x += 8; + sprite->pos1.y += 16 + sprite->centerToCornerVecY; + sprite->images = gfxInfo->images; + if (mapObject->animPattern == 11) + { + SetPlayerAvatarFieldObjectIdAndObjectId(a, spriteId); + mapObject->mapobj_unk_1B = sub_8126B54(); + } + if (subspriteTables != NULL) + SetSubspriteTables(sprite, subspriteTables); + sprite->oam.paletteNum = gfxInfo->paletteSlot; + sprite->coordOffsetEnabled = TRUE; + sprite->data0 = a; + mapObject->spriteId = spriteId; + if (!mapObject->mapobj_bit_12 && mapObject->animPattern != 11) + StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObject->mapobj_unk_18)); + sub_805B914(mapObject); + SetObjectSubpriorityByZCoord(mapObject->elevation, sprite, 1); + } +} + +void sub_805B914(struct MapObject *mapObject) +{ + mapObject->mapobj_bit_1 = FALSE; + mapObject->mapobj_bit_2 = TRUE; + mapObject->mapobj_bit_22 = FALSE; + mapObject->mapobj_bit_17 = FALSE; + mapObject->mapobj_bit_18 = FALSE; + mapObject->mapobj_bit_19 = FALSE; + mapObject->mapobj_bit_20 = FALSE; + mapObject->mapobj_bit_21 = FALSE; + FieldObjectClearAnim(mapObject); +} + +void SetPlayerAvatarFieldObjectIdAndObjectId(u8 mapObjectId, u8 spriteId) +{ + gPlayerAvatar.mapObjectId = mapObjectId; + gPlayerAvatar.spriteId = spriteId; + gPlayerAvatar.gender = GetPlayerAvatarGenderByGraphicsId(gMapObjects[mapObjectId].graphicsId); + SetPlayerAvatarExtraStateTransition(gMapObjects[mapObjectId].graphicsId, 0x20); +} + +void sub_805B980(struct MapObject *mapObject, u8 graphicsId) +{ + const struct MapObjectGraphicsInfo *gfxInfo; + struct Sprite *sprite; + + gfxInfo = GetFieldObjectGraphicsInfo(graphicsId); + sprite = &gSprites[mapObject->spriteId]; + if (gfxInfo->paletteSlot == 0) + pal_patch_for_npc(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + if (gfxInfo->paletteSlot == 10) + npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + sprite->oam.shape = gfxInfo->oam->shape; + sprite->oam.size = gfxInfo->oam->size; + sprite->images = gfxInfo->images; + sprite->anims = gfxInfo->anims; + sprite->subspriteTables = gfxInfo->subspriteTables; + sprite->oam.paletteNum = gfxInfo->paletteSlot; + mapObject->mapobj_bit_12 = gfxInfo->inanimate; + mapObject->graphicsId = graphicsId; + sub_80603CC(mapObject->coords2.x, mapObject->coords2.y, &sprite->pos1.x, &sprite->pos1.y); + sprite->centerToCornerVecX = -(gfxInfo->width >> 1); + sprite->centerToCornerVecY = -(gfxInfo->height >> 1); + sprite->pos1.x += 8; + sprite->pos1.y += 16 + sprite->centerToCornerVecY; + if (mapObject->mapobj_bit_15) + CameraObjectReset1(); +} + +void unref_sub_805BA80(u8 localId, u8 mapNum, u8 mapGroup, u8 graphicsId) +{ + u8 mapObjectId; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + sub_805B980(&gMapObjects[mapObjectId], graphicsId); +} + +void FieldObjectTurn(struct MapObject *mapObject, u8 direction) +{ + FieldObjectSetDirection(mapObject, direction); + if (!mapObject->mapobj_bit_12) + { + StartSpriteAnim(&gSprites[mapObject->spriteId], FieldObjectDirectionToImageAnimId(mapObject->mapobj_unk_18)); + SeekSpriteAnim(&gSprites[mapObject->spriteId], 0); + } +} + +void FieldObjectTurnByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 direction) +{ + u8 mapObjectId; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + FieldObjectTurn(&gMapObjects[mapObjectId], direction); +} + +void unref_TurnPlayer(struct PlayerAvatar *player, u8 direction) +{ + FieldObjectTurn(&gMapObjects[player->mapObjectId], direction); +} + +void get_berry_tree_graphics(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 treeStage; + u8 treeId; + + mapObject->mapobj_bit_13 = TRUE; + sprite->invisible = TRUE; + treeStage = GetStageByBerryTreeId(mapObject->trainerRange_berryTreeId); + if (treeStage != 0) + { + mapObject->mapobj_bit_13 = FALSE; + sprite->invisible = FALSE; + treeId = GetBerryTypeByBerryTreeId(mapObject->trainerRange_berryTreeId) - 1; + treeStage--; + if (treeId > 0x2B) + treeId = 0; + sub_805B980(mapObject, gBerryTreeGraphicsIdTablePointers[treeId][treeStage]); + sprite->images = gBerryTreePicTablePointers[treeId]; + sprite->oam.paletteNum = gBerryTreePaletteSlotTablePointers[treeId][treeStage]; + StartSpriteAnim(sprite, treeStage); + } +} + +const struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8 graphicsId) +{ + if (graphicsId > 0xEF) + graphicsId = VarGetFieldObjectGraphicsId(graphicsId + 16); + if (graphicsId > 0xD9) + graphicsId = 5; + return gMapObjectGraphicsInfoPointers[graphicsId]; +} + +void FieldObjectHandleDynamicGraphicsId(struct MapObject *mapObject) +{ + if (mapObject->graphicsId > 0xEF) + mapObject->graphicsId = VarGetFieldObjectGraphicsId(mapObject->graphicsId + 16); +} + +void npc_by_local_id_and_map_set_field_1_bit_x20(u8 localId, u8 mapNum, u8 mapGroup, u8 d) +{ + u8 mapObjectId; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + gMapObjects[mapObjectId].mapobj_bit_13 = d; +} + +void FieldObjectGetLocalIdAndMap(struct MapObject *mapObject, u8 *localId, u8 *mapNum, u8 *mapGroup) +{ + *localId = mapObject->localId; + *mapNum = mapObject->mapNum; + *mapGroup = mapObject->mapGroup; +} + +void sub_805BCC0(s16 x, s16 y) +{ + u8 mapObjectId; + struct MapObject *mapObject; + + mapObjectId = GetFieldObjectIdByXY(x, y); + if (mapObjectId != 16) + { + mapObject = &gMapObjects[mapObjectId]; + mapObject->mapobj_bit_2 = TRUE; + } +} + +void sub_805BCF0(u8 localId, u8 mapNum, u8 mapGroup, u8 subpriority) +{ + u8 mapObjectId; + struct MapObject *mapObject; + struct Sprite *sprite; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + { + mapObject = &gMapObjects[mapObjectId]; + sprite = &gSprites[mapObject->spriteId]; + mapObject->mapobj_bit_26 = TRUE; + sprite->subpriority = subpriority; + } +} + +void sub_805BD48(u8 localId, u8 mapNum, u8 mapGroup) +{ + u8 mapObjectId; + struct MapObject *mapObject; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + { + mapObject = &gMapObjects[mapObjectId]; + mapObject->mapobj_bit_26 = FALSE; + mapObject->mapobj_bit_2 = TRUE; + } +} + +void sub_805BD90(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) +{ + u8 mapObjectId; + struct Sprite *sprite; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + { + sprite = &gSprites[gMapObjects[mapObjectId].spriteId]; + sprite->pos2.x = x; + sprite->pos2.y = y; + } +} + +void gpu_pal_allocator_reset__manage_upper_four(void) +{ + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 12; +} + +void sub_805BDF8(u16 tag) +{ + u16 paletteIndex = FindFieldObjectPaletteIndexByTag(tag); + + if (paletteIndex != 0x11FF) //always happens. FindFieldObjectPaletteIndexByTag returns u8 + sub_805BE58(&gUnknown_0837377C[paletteIndex]); +} + +void unref_sub_805BE24(u16 *arr) +{ + u8 i; + + for (i = 0; arr[i] != 0x11FF; i++) + sub_805BDF8(arr[i]); +} + +u8 sub_805BE58(const struct SpritePalette *palette) +{ + if (IndexOfSpritePaletteTag(palette->tag) != 0xFF) + return 0xFF; + else + return LoadSpritePalette(palette); +} + +void pal_patch_for_npc(u16 a, u16 b) +{ + u8 var = b; + u8 paletteIndex = FindFieldObjectPaletteIndexByTag(a); + + LoadPalette(gUnknown_0837377C[paletteIndex].data, var * 16 + 0x100, 0x20); +} + +void pal_patch_for_npc_range(const u16 *arr, u8 b, u8 c) +{ + for (; b < c; arr++, b++) + pal_patch_for_npc(*arr, b); +} + +u8 FindFieldObjectPaletteIndexByTag(u16 tag) +{ + u8 i; + + for (i = 0; gUnknown_0837377C[i].tag != 0x11FF; i++) + { + if (gUnknown_0837377C[i].tag == tag) + return i; + } + return 0xFF; +} + +void npc_load_two_palettes__no_record(u16 a, u8 b) +{ + u8 i; + + pal_patch_for_npc(a, b); + for (i = 0; gUnknown_08373874[i].tag != 0x11FF; i++) + { + if (gUnknown_08373874[i].tag == a) + { + pal_patch_for_npc(gUnknown_08373874[i].data[gUnknown_030005A4], gUnknown_0830FD14[b]); + break; + } + } +} + +void npc_load_two_palettes__and_record(u16 a, u8 b) +{ + u8 i; + + gUnknown_030005A6 = a; + pal_patch_for_npc(a, b); + for (i = 0; gUnknown_083738E4[i].tag != 0x11FF; i++) + { + if (gUnknown_083738E4[i].tag == a) + { + pal_patch_for_npc(gUnknown_083738E4[i].data[gUnknown_030005A4], gUnknown_0830FD14[b]); + break; + } + } +} + +void unref_sub_805C014(struct MapObject *mapObject, s16 x, s16 y) +{ + mapObject->coords3.x = mapObject->coords2.x; + mapObject->coords3.y = mapObject->coords2.y; + mapObject->coords2.x += x; + mapObject->coords2.y += y; +} + +void npc_coords_shift(struct MapObject *mapObject, s16 x, s16 y) +{ + mapObject->coords3.x = mapObject->coords2.x; + mapObject->coords3.y = mapObject->coords2.y; + mapObject->coords2.x = x; + mapObject->coords2.y = y; +} + +void npc_coords_set(struct MapObject *mapObject, s16 x, s16 y) +{ + mapObject->coords3.x = x; + mapObject->coords3.y = y; + mapObject->coords2.x = x; + mapObject->coords2.y = y; +} + +void sub_805C058(struct MapObject *mapObject, s16 x, s16 y) +{ + struct Sprite *sprite = &gSprites[mapObject->spriteId]; + const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + + npc_coords_set(mapObject, x, y); + sub_80603CC(mapObject->coords2.x, mapObject->coords2.y, &sprite->pos1.x, &sprite->pos1.y); + sprite->centerToCornerVecX = -(gfxInfo->width >> 1); + sprite->centerToCornerVecY = -(gfxInfo->height >> 1); + sprite->pos1.x += 8; + sprite->pos1.y += 16 + sprite->centerToCornerVecY; + sub_805B914(mapObject); + if (mapObject->mapobj_bit_15) + CameraObjectReset1(); +} + +void sub_805C0F8(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) +{ + u8 mapObjectId; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + { + x += 7; + y += 7; + sub_805C058(&gMapObjects[mapObjectId], x, y); + } +} + +void npc_coords_shift_still(struct MapObject *mapObject) +{ + npc_coords_shift(mapObject, mapObject->coords2.x, mapObject->coords2.y); +} + +void UpdateFieldObjectCoordsForCameraUpdate(void) +{ + u8 i; + s16 deltaX; + s16 deltaY; + +#ifndef NONMATCHING + asm(""::"r"(i)); //makes the compiler store i in r3 +#endif + + if (gUnknown_0202E844.field_0) + { + for (i = 0, deltaX = gUnknown_0202E844.x, deltaY = gUnknown_0202E844.y; i < 16; i++) + { + struct MapObject *mapObject = &gMapObjects[i]; + + if (mapObject->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; + } + } + } +} + +bool8 FieldObjectDoesZCoordMatch(struct MapObject *, u8); + +u8 GetFieldObjectIdByXYZ(u16 x, u16 y, u8 z) +{ + u8 i; + + for (i = 0; i < 16; i++) + { + if (gMapObjects[i].active && gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y + && FieldObjectDoesZCoordMatch(&gMapObjects[i], z)) + return i; + } + return 16; +} + +bool8 FieldObjectDoesZCoordMatch(struct MapObject *mapObject, u8 z) +{ + if (mapObject->mapobj_unk_0B_0 != 0 && z != 0 + && mapObject->mapobj_unk_0B_0 != z) + return FALSE; + else + return TRUE; +} + +void UpdateFieldObjectsForCameraUpdate(s16 x, s16 y) +{ + UpdateFieldObjectCoordsForCameraUpdate(); + sub_805B55C(x, y); + RemoveFieldObjectsOutsideView(); +} + +u8 AddCameraObject(u8 a) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_830FD24, 0, 0, 4); + + gSprites[spriteId].invisible = TRUE; + gSprites[spriteId].data0 = a; + return spriteId; +} + +void ObjectCB_CameraObject(struct Sprite *sprite) +{ + void (*cameraObjectFuncs[3])(struct Sprite *); + memcpy(cameraObjectFuncs, gCameraObjectFuncs, sizeof gCameraObjectFuncs); + cameraObjectFuncs[sprite->data1](sprite); +} + +void CameraObject_0(struct Sprite *sprite) +{ + sprite->pos1.x = gSprites[sprite->data0].pos1.x; + sprite->pos1.y = gSprites[sprite->data0].pos1.y; + sprite->invisible = TRUE; + sprite->data1 = 1; + CameraObject_1(sprite); +} + +void CameraObject_1(struct Sprite *sprite) +{ + s16 x = gSprites[sprite->data0].pos1.x; + s16 y = gSprites[sprite->data0].pos1.y; + + sprite->data2 = x - sprite->pos1.x; + sprite->data3 = y - sprite->pos1.y; + sprite->pos1.x = x; + sprite->pos1.y = y; +} + +void CameraObject_2(struct Sprite *sprite) +{ + sprite->pos1.x = gSprites[sprite->data0].pos1.x; + sprite->pos1.y = gSprites[sprite->data0].pos1.y; + sprite->data2 = 0; + sprite->data3 = 0; +} + +struct Sprite *FindCameraObject(void) +{ + u8 i; + + for (i = 0; i < 64; i++) + { + if (gSprites[i].inUse && gSprites[i].callback == ObjectCB_CameraObject) + return &gSprites[i]; + } + return NULL; +} + +void CameraObjectReset1(void) +{ + struct Sprite *cameraSprite = FindCameraObject(); + + if (cameraSprite != NULL) + { + cameraSprite->data1 = 0; + cameraSprite->callback(cameraSprite); + } +} + +void CameraObjectSetFollowedObjectId(u8 spriteId) +{ + struct Sprite *cameraSprite = FindCameraObject(); + + if (cameraSprite != NULL) + { + cameraSprite->data0 = spriteId; + CameraObjectReset1(); + } +} + +u8 CameraObjectGetFollowedObjectId(void) +{ + struct Sprite *cameraSprite = FindCameraObject(); + + if (cameraSprite == NULL) + return 64; + else + return cameraSprite->data0; +} + +void CameraObjectReset2(void) +{ + struct Sprite *cameraSprite = FindCameraObject(); + + cameraSprite->data1 = 2; +} + +u8 unref_sub_805C43C(struct Sprite *src, s16 x, s16 y, u8 subpriority) +{ + u8 i; + + for (i = 0; i < 64; i++) + { + if (!gSprites[i].inUse) + { + gSprites[i] = *src; + gSprites[i].pos1.x = x; + gSprites[i].pos1.y = y; + gSprites[i].subpriority = subpriority; + break; + } + } + return i; +} + +u8 obj_unfreeze(struct Sprite *src, s16 x, s16 y, u8 subpriority) +{ + s16 i; + + for (i = 63; i > -1; i--) + { + if (!gSprites[i].inUse) + { + gSprites[i] = *src; + gSprites[i].pos1.x = x; + gSprites[i].pos1.y = y; + gSprites[i].subpriority = subpriority; + return i; + } + } + return 64; +} + +void FieldObjectSetDirection(struct MapObject *mapObject, u8 direction) +{ + mapObject->mapobj_unk_20 = mapObject->mapobj_unk_18; + if (!mapObject->mapobj_bit_9) + { + s8 _direction = direction; //needed for the asm to match + mapObject->mapobj_unk_18 = _direction; + } + mapObject->placeholder18 = direction; +} + +u8 *GetFieldObjectScriptPointerByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +{ + struct MapObjectTemplate *template = GetFieldObjectTemplateByLocalIdAndMap(localId, mapNum, mapGroup); + + return template->script; +} + +u8 *GetFieldObjectScriptPointerByFieldObjectId(u8 mapObjectId) +{ + return GetFieldObjectScriptPointerByLocalIdAndMap(gMapObjects[mapObjectId].localId, gMapObjects[mapObjectId].mapNum, gMapObjects[mapObjectId].mapGroup); +} + +u16 GetFieldObjectFlagIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +{ + struct MapObjectTemplate *template = GetFieldObjectTemplateByLocalIdAndMap(localId, mapNum, mapGroup); + + return template->flagId; +} + +u16 GetFieldObjectFlagIdByFieldObjectId(u8 mapObjectId) +{ + return GetFieldObjectFlagIdByLocalIdAndMap(gMapObjects[mapObjectId].localId, gMapObjects[mapObjectId].mapNum, gMapObjects[mapObjectId].mapGroup); +} + +u8 unref_sub_805C5D0(u8 localId, u8 mapNum, u8 mapGroup) +{ + u8 mapObjectId; + + if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + return 0xFF; + else + return gMapObjects[mapObjectId].trainerType; +} + +u8 unref_sub_805C60C(u8 mapObjectId) +{ + return gMapObjects[mapObjectId].trainerType; +} + +u8 unref_sub_805C624(u8 localId, u8 mapNum, u8 mapGroup) +{ + u8 mapObjectId; + + if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + return 0xFF; + else + return gMapObjects[mapObjectId].trainerRange_berryTreeId; +} + +u8 FieldObjectGetBerryTreeId(u8 mapObjectId) +{ + return gMapObjects[mapObjectId].trainerRange_berryTreeId; +} + +struct MapObjectTemplate *FindFieldObjectTemplateInArrayByLocalId(u8, struct MapObjectTemplate *, u8); + +struct MapObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +{ + if (gSaveBlock1.location.mapNum == mapNum && gSaveBlock1.location.mapGroup == mapGroup) + return FindFieldObjectTemplateInArrayByLocalId(localId, gSaveBlock1.mapObjectTemplates, gMapHeader.events->mapObjectCount); + else + { + struct MapHeader *mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum); + + return FindFieldObjectTemplateInArrayByLocalId(localId, mapHeader->events->mapObjects, mapHeader->events->mapObjectCount); + } +} + +struct MapObjectTemplate *FindFieldObjectTemplateInArrayByLocalId(u8 localId, struct MapObjectTemplate *templates, u8 count) +{ + u8 i; + + for (i = 0; i < count; i++) + { + if (templates[i].localId == localId) + return &templates[i]; + } + return NULL; +} + +struct MapObjectTemplate *sub_805C700(struct MapObject *mapObject) +{ + s32 i; + + if (mapObject->mapNum != gSaveBlock1.location.mapNum + || mapObject->mapGroup != gSaveBlock1.location.mapGroup) + return NULL; + + for (i = 0; i < 64; i++) + { + if (mapObject->localId == gSaveBlock1.mapObjectTemplates[i].localId) + return &gSaveBlock1.mapObjectTemplates[i]; + } + return NULL; +} + +void sub_805C754(struct MapObject *mapObject) +{ + struct MapObjectTemplate *template = sub_805C700(mapObject); + + if (template != NULL) + { + template->x = mapObject->coords2.x - 7; + template->y = mapObject->coords2.y - 7; + } +} + +void sub_805C774(struct MapObject *mapObject, u8 movementType) +{ + struct MapObjectTemplate *template = sub_805C700(mapObject); + + if (template != NULL) + template->movementType = movementType; +} + +void sub_805C78C(u8 localId, u8 mapNum, u8 mapGroup) +{ + u8 mapObjectId; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + sub_805C754(&gMapObjects[mapObjectId]); +} + +void sub_805C7C4(u8 a) +{ + gpu_pal_allocator_reset__manage_upper_four(); + gUnknown_030005A6 = 0x11FF; + gUnknown_030005A4 = a; + pal_patch_for_npc_range(gUnknown_0837399C[gUnknown_030005A4], 0, 10); +} + +u16 npc_paltag_by_palslot(u8 a) +{ + u8 i; + + if (a < 10) + return gUnknown_0837399C[gUnknown_030005A4][a]; + + for (i = 0; gUnknown_083738E4[i].tag != 0x11FF; i++) + { + if (gUnknown_083738E4[i].tag == gUnknown_030005A6) + { + return gUnknown_083738E4[i].data[gUnknown_030005A4]; + } + } + return 0x11FF; +} + +fieldmap_object_null_cb(sub_805C884, sub_805C8A8); +fieldmap_object_cb(sub_805C8AC, sub_805C8D0, gUnknown_08375224); + +u8 sub_805C8F0(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +extern void FieldObjectSetRegularAnim(struct MapObject *, struct Sprite *, u8); + +u8 sub_805C904(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +extern u8 FieldObjectExecRegularAnim(struct MapObject *, struct Sprite *); +extern void sub_8064820(struct Sprite *, s16); + +u8 sub_805C930(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) == 0) + { + return 0; + } + sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); + sprite->data1 = 3; + return 1; +} + +extern u8 sub_8064824(struct Sprite *); + +u8 sub_805C96C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) != 0) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +extern u8 sub_805FF20(struct MapObject *, u8); + +u8 sub_805C98C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[4]; + memcpy(directions, gUnknown_08375240, 4); + direction = directions[Random() & 3]; + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 5; + if (sub_805FF20(mapObject, direction) != 0) + { + sprite->data1 = 1; + } + return 1; +} + +u8 sub_805C9D8(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18)); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 6; + return 1; +} + +u8 sub_805CA08(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} + +u8 FieldObjectIsTrainerAndCloseToPlayer(struct MapObject *mapObject) +{ + s16 x; + s16 y; + s16 objx; + s16 objy; + s16 minx; + s16 maxx; + s16 miny; + s16 maxy; + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH) == 0) + { + return 0; + } + if (mapObject->trainerType != 1 && mapObject->trainerType != 3) + { + return 0; + } + PlayerGetDestCoords(&x, &y); + objx = mapObject->coords2.x; + objy = mapObject->coords2.y; + minx = objx - mapObject->trainerRange_berryTreeId; + miny = objy - mapObject->trainerRange_berryTreeId; + maxx = objx + mapObject->trainerRange_berryTreeId; + maxy = objy + mapObject->trainerRange_berryTreeId; + if (minx > x || maxx < x || miny > y || maxy < y) + { + return 0; + } + return 1; +} + +u8 sub_805CAAC(s16 a0, s16 a1, s16 a2, s16 a3) +{ + u8 dirn; + if (a2 > a3) + { + dirn = DIR_EAST; + if (a0 < 0) + { + dirn = DIR_WEST; + } + } + else + { + dirn = DIR_SOUTH; + if (a1 < 0) + { + dirn = DIR_NORTH; + } + } + return dirn; +} + +u8 sub_805CADC(s16 a0, s16 a1, s16 a2, s16 a3) +{ + u8 dirn; + dirn = DIR_SOUTH; + if (a1 < 0) + { + dirn = DIR_NORTH; + } + return dirn; +} + +u8 sub_805CAEC(s16 a0, s16 a1, s16 a2, s16 a3) +{ + u8 dirn; + dirn = DIR_EAST; + if (a0 < 0) + { + dirn = DIR_WEST; + } + return dirn; +} + +u8 sub_805CB00(s16 a0, s16 a1, s16 a2, s16 a3) +{ + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_SOUTH) + { + dirn = sub_805CAEC(a0, a1, a2, a3); + if (dirn == DIR_EAST) + { + dirn = DIR_NORTH; + } + } + else if (dirn == DIR_EAST) + { + dirn = sub_805CADC(a0, a1, a2, a3); + if (dirn == DIR_SOUTH) + { + dirn = DIR_NORTH; + } + } + return dirn; +} + +u8 sub_805CB5C(s16 a0, s16 a1, s16 a2, s16 a3) +{ + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_SOUTH) + { + dirn = sub_805CAEC(a0, a1, a2, a3); + if (dirn == DIR_WEST) + { + dirn = DIR_NORTH; + } + } + else if (dirn == DIR_WEST) + { + dirn = sub_805CADC(a0, a1, a2, a3); + if (dirn == DIR_SOUTH) + { + dirn = DIR_NORTH; + } + } + return dirn; +} + +u8 sub_805CBB8(s16 a0, s16 a1, s16 a2, s16 a3) +{ + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_NORTH) + { + dirn = sub_805CAEC(a0, a1, a2, a3); + if (dirn == DIR_EAST) + { + dirn = DIR_SOUTH; + } + } + else if (dirn == DIR_EAST) + { + dirn = sub_805CADC(a0, a1, a2, a3); + if (dirn == DIR_NORTH) + { + dirn = DIR_SOUTH; + } + } + return dirn; +} + +u8 sub_805CC14(s16 a0, s16 a1, s16 a2, s16 a3) { + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_NORTH) + { + dirn = sub_805CAEC(a0, a1, a2, a3); + if (dirn == DIR_WEST) + { + dirn = DIR_SOUTH; + } + } + else if (dirn == DIR_WEST) + { + dirn = sub_805CADC(a0, a1, a2, a3); + if (dirn == DIR_NORTH) + { + dirn = DIR_SOUTH; + } + } + return dirn; +} + +u8 sub_805CC70(s16 a0, s16 a1, s16 a2, s16 a3) +{ + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_EAST) + { + dirn = sub_805CADC(a0, a1, a2, a3); + } + return dirn; +} + +u8 sub_805CCAC(s16 a0, s16 a1, s16 a2, s16 a3) +{ + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_WEST) + { + dirn = sub_805CADC(a0, a1, a2, a3); + } + return dirn; +} + +u8 sub_805CCE8(s16 a0, s16 a1, s16 a2, s16 a3) +{ + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_SOUTH) + { + dirn = sub_805CAEC(a0, a1, a2, a3); + } + return dirn; +} + +u8 sub_805CD24(s16 a0, s16 a1, s16 a2, s16 a3) +{ + u8 dirn; + dirn = sub_805CAAC(a0, a1, a2, a3); + if (dirn == DIR_NORTH) + { + dirn = sub_805CAEC(a0, a1, a2, a3); + } + return dirn; +} + +u8 sub_805CD60(struct MapObject *mapObject, u8 a1) +{ + s16 x; + s16 y; + s16 x2; + s16 y2; + if (!FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + return 0; + } + PlayerGetDestCoords(&x, &y); + x -= mapObject->coords2.x; + y -= mapObject->coords2.y; + x2 = x; + y2 = y; + if (x2 < 0) + { + x2 = -x2; + } + if (y2 < 0) + { + y2 = -y2; + } + return gUnknown_08375244[a1](x, y, x2, y2); +} + +fieldmap_object_cb(sub_805CDE8, sub_805CE0c, gUnknown_08375270); + +u8 sub_805CE2C(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805CE40(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805CE6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) + { + sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805CEB0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805CEE0(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[4]; + memcpy(directions, gUnknown_08375240, 4); + direction = sub_805CD60(mapObject, 0); + if (direction == 0) + { + direction = directions[Random() & 3]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805CF28, sub_805CF4C, gUnknown_08375284); + +u8 sub_805CF6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805CF80(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805CFAC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) == 0) + { + return 0; + } + sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); + sprite->data1 = 3; + return 1; +} + +u8 sub_805CFE8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) != 0) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805D008(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_083752A0, 2); + direction = directions[Random() & 1]; + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 5; + if (sub_805FF20(mapObject, direction) != 0) + { + sprite->data1 = 1; + } + return 1; +} + +u8 sub_805D054(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18)); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 6; + return 1; +} + +u8 sub_805D084(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} + +fieldmap_object_cb(sub_805D0AC, sub_805D0D0, gUnknown_083752A4); + +u8 sub_805D0F0(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805D104(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805D130(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) == 0) + { + return 0; + } + sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); + sprite->data1 = 3; + return 1; +} + +u8 sub_805D16C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) != 0) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805D18C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_083752C0, 2); + direction = directions[Random() & 1]; + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 5; + if (sub_805FF20(mapObject, direction) != 0) + { + sprite->data1 = 1; + } + return 1; +} + +u8 sub_805D1D8(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18)); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 6; + return 1; +} + +u8 sub_805D208(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} + +fieldmap_object_cb(sub_805D230, sub_805D254, gUnknown_083752C4); + +u8 sub_805D274(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} + +u8 sub_805D2A0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) + { + sprite->data1 = 2; + return 1; + } + return 0; +} + +u8 sub_805D2C0(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_1 = 0; + return 0; +} + +u8 sub_805D314(struct MapObject *mapObject, struct Sprite *sprite); + +void FieldObjectCB_BerryTree(struct Sprite *sprite) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[sprite->data0]; + if (!(sprite->data7 & 1)) + { + get_berry_tree_graphics(mapObject, sprite); + sprite->data7 |= 1; + } + meta_step(mapObject, sprite, sub_805D314); +} + +u8 sub_805D314(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_083752D0[sprite->data1](mapObject, sprite); +} + +u8 do_berry_tree_growth_sparkle_1(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 berryTreeStage; + npc_reset(mapObject, sprite); + mapObject->mapobj_bit_13 = 1; + sprite->invisible = 1; + berryTreeStage = GetStageByBerryTreeId(mapObject->trainerRange_berryTreeId); + if (!berryTreeStage) + { + 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; + FieldEffectStart(0x17); + sprite->animNum = 0; + } + return 0; + } + mapObject->mapobj_bit_13 = 0; + sprite->invisible = 0; + berryTreeStage--; + if (sprite->animNum != berryTreeStage) + { + sprite->data1 = 2; + return 1; + } + get_berry_tree_graphics(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, 0x39); + sprite->data1 = 1; + return 1; +} + +u8 sub_805D3EC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sprite->data1 = 0; + return 1; + } + return 0; +} + +u8 do_berry_tree_growth_sparkle_2(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_1 = 1; + 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; + FieldEffectStart(0x17); + return 1; +} + +u8 sub_805D458(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->data2++; + mapObject->mapobj_bit_13 = ((sprite->data2 & 0x2) >> 1); + sprite->animPaused = 1; + if (sprite->data2 > 64) + { + get_berry_tree_graphics(mapObject, sprite); + sprite->data1 = 4; + sprite->data2 = 0; + return 1; + } + return 0; +} + +u8 sub_805D4A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->data2++; + mapObject->mapobj_bit_13 = ((sprite->data2 & 0x2) >> 1); + sprite->animPaused = 1; + if (sprite->data2 > 64) + { + sprite->data1 = 0; + sprite->data7 &= (-3); + return 1; + } + return 0; +} + +fieldmap_object_cb(sub_805D4F4, sub_805D518, gUnknown_083752E4); + +u8 sub_805D538(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805D54C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805D578(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805D5BC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805D5EC(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_083752A0, 2); + direction = sub_805CD60(mapObject, 1); + if (direction == 0) + { + direction = directions[Random() & 1]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805D634, sub_805D658, gUnknown_083752F8); + +u8 sub_805D678(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805D68C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805D6B8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805D6FC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805D72C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_083752C0, 2); + direction = sub_805CD60(mapObject, 2); + if (direction == 0) + { + direction = directions[Random() & 1]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805D774, sub_805D798, gUnknown_0837530C); + +u8 sub_805D7B8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805D7CC(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805D7F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805D83C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805D86C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_08375320, 2); + direction = sub_805CD60(mapObject, 3); + if (direction == 0) + { + direction = directions[Random() & 1]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805D8B4, sub_805D8D8, gUnknown_08375324); + +u8 sub_805D8F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805D90C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805D938(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805D97C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805D9AC(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_08375338, 2); + direction = sub_805CD60(mapObject, 4); + if (direction == 0) + { + direction = directions[Random() & 1]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805D9F4, sub_805DA18, gUnknown_0837533C); + +u8 sub_805DA38(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805DA4C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805DA78(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805DABC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805DAEC(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_08375350, 2); + direction = sub_805CD60(mapObject, 5); + if (direction == 0) + { + direction = directions[Random() & 1]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805DB34, sub_805DB58, gUnknown_08375354); + +u8 sub_805DB78(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805DB8C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805DBB8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805DBFC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805DC2C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_08375368, 2); + direction = sub_805CD60(mapObject, 6); + if (direction == 0) + { + direction = directions[Random() & 1]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805DC74, sub_805DC98, gUnknown_0837536C); + +u8 sub_805DCB8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805DCCC(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805DCF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805DD3C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805DD6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[4]; + memcpy(directions, gUnknown_08375380, 4); + direction = sub_805CD60(mapObject, 7); + if (direction == 0) + { + direction = directions[Random() & 3]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805DDB4, sub_805DDD8, gUnknown_08375384); + +u8 sub_805DDF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805DE0C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805DE38(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805DE7C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805DEAC(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[4]; + memcpy(directions, gUnknown_08375398, 4); + direction = sub_805CD60(mapObject, 8); + if (direction == 0) + { + direction = directions[Random() & 3]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805DEF4, sub_805DF18, gUnknown_0837539C); + +u8 sub_805DF38(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805DF4C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805DF78(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805DFBC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805DFEC(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[4]; + memcpy(directions, gUnknown_083753B0, 4); + direction = sub_805CD60(mapObject, 9); + if (direction == 0) + { + direction = directions[Random() & 3]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805E034, sub_805E058, gUnknown_083753B4); + +u8 sub_805E078(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805E08C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805E0B8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805E0FC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805E12C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[4]; + memcpy(directions, gUnknown_083753C8, 4); + direction = sub_805CD60(mapObject, 10); + if (direction == 0) + { + direction = directions[Random() & 3]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805E174, sub_805E198, gUnknown_083753CC); + +u8 sub_805E1B8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} + +u8 sub_805E1E4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, 0x30); + sprite->data1 = 2; + } + return 0; +} + +u8 sub_805E208(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805E234(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[5]; + memcpy(directions, gUnknown_083753DC, 5); + direction = sub_805CD60(mapObject, 0); + if (direction == 0) + { + direction = directions[mapObject->mapobj_unk_18]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 0; + return 1; +} + +fieldmap_object_cb(sub_805E278, sub_803E29C, gUnknown_083753E4); + +u8 sub_805E2BC(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} + +u8 sub_805E2E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sub_8064820(sprite, 0x30); + sprite->data1 = 2; + } + return 0; +} + +u8 sub_805E30C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 3; + } + return 0; +} + +u8 sub_805E338(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[5]; + memcpy(directions, gUnknown_083753F4, 5); + direction = sub_805CD60(mapObject, 0); + if (direction == 0) + { + direction = directions[mapObject->mapobj_unk_18]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 0; + return 1; +} + +fieldmap_object_cb(sub_805E37C, sub_805E3A0, gUnknown_083753FC); + +u8 sub_805E3C0(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805E3D4(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + direction = gUnknown_0836DC09[mapObject->animPattern]; + if (mapObject->mapobj_unk_21 != 0) + { + direction = GetOppositeDirection(direction); + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 2; + return 1; +} + +u8 sub_805E40C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 v0; + u8 goSpeed0AnimId; + if (mapObject->mapobj_unk_21 && mapObject->coords1.x == mapObject->coords2.x && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 0; + FieldObjectSetDirection(mapObject, GetOppositeDirection(mapObject->placeholder18)); + } + v0 = sub_805FF20(mapObject, mapObject->placeholder18); + goSpeed0AnimId = GetGoSpeed0AnimId(mapObject->placeholder18); + if (v0 == 1) + { + mapObject->mapobj_unk_21 ++; + FieldObjectSetDirection(mapObject, GetOppositeDirection(mapObject->placeholder18)); + goSpeed0AnimId = GetGoSpeed0AnimId(mapObject->placeholder18); + v0 = sub_805FF20(mapObject, mapObject->placeholder18); + } + if (v0 != 0) + { + goSpeed0AnimId = GetStepInPlaceDelay16AnimId(mapObject->mapobj_unk_18); + } + FieldObjectSetRegularAnim(mapObject, sprite, goSpeed0AnimId); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 3; + return 1; +} + +u8 sub_805E4C4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} + +u8 sub_805E4EC(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 MoveFieldObjectInNextDirectionInSequence(struct MapObject *mapObject, struct Sprite *sprite, u8 *directionSequence) +{ + u8 v0; + u8 goSpeed0AnimId; + if (mapObject->mapobj_unk_21 == 3 && mapObject->coords1.x == mapObject->coords2.x && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 0; + } + FieldObjectSetDirection(mapObject, directionSequence[mapObject->mapobj_unk_21]); + goSpeed0AnimId = GetGoSpeed0AnimId(mapObject->placeholder18); + v0 = sub_805FF20(mapObject, mapObject->placeholder18); + if (v0 == 1) + { + mapObject->mapobj_unk_21 ++; + FieldObjectSetDirection(mapObject, directionSequence[mapObject->mapobj_unk_21]); + goSpeed0AnimId = GetGoSpeed0AnimId(mapObject->placeholder18); + v0 = sub_805FF20(mapObject, mapObject->placeholder18); + } + if (v0 != 0) + { + goSpeed0AnimId = GetStepInPlaceDelay16AnimId(mapObject->mapobj_unk_18); + } + FieldObjectSetRegularAnim(mapObject, sprite, goSpeed0AnimId); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 2; + return 1; +} + +u8 sub_805E5B4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} + +fieldmap_object_cb(sub_805E5DC, sub_805E600, gUnknown_0837540C); + +u8 sub_805E620(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375418, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805E668, sub_805E68C, gUnknown_0837541C); + +u8 sub_805E6AC(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375428, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805E6F4, sub_805E718, gUnknown_0837542C); + +u8 sub_805E738(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375438, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805E780, sub_805E7A4, gUnknown_0837543C); + +u8 sub_805E7C4(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375448, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + + + +fieldmap_object_cb(sub_805E80C, sub_805E830, gUnknown_0837544C); + +u8 sub_805E850(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375458, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805E898, sub_805E8BC, gUnknown_0837545C); + +u8 sub_805E8DC(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375468, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805E924, sub_805E948, gUnknown_0837546C); + +u8 sub_805E968(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375240, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805E9B0, sub_805E9D4, gUnknown_08375478); + +u8 sub_805E9F4(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375484, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EA3C, sub_805EA60, gUnknown_08375488); + +u8 sub_805EA80(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375494, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EAC8, sub_805EAEC, gUnknown_08375498); + +u8 sub_805EB0C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_083754A4, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EB54, sub_805EB78, gUnknown_083754A8); + +u8 sub_805EB98(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_083754B4, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EBE0, sub_805EC04, gUnknown_083754B8); + +u8 sub_805EC24(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_083754C4, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EC6C, sub_805EC90, gUnknown_083754C8); + +u8 sub_805ECB0(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_083754D4, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805ECF8, sub_805ED1C, gUnknown_083754D8); + +u8 sub_805ED3C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_083754E4, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805ED84, sub_805EDA8, gUnknown_083754E8); + +u8 sub_805EDC8(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_083754F4, 4); + if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 2; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EE10, sub_805EE34, gUnknown_083754F8); + +u8 sub_805EE54(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375504, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EE9C, sub_805EEC0, gUnknown_08375508); + +u8 sub_805EEE0(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375514, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EF28, sub_805EF4C, gUnknown_08375518); + +u8 sub_805EF6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375524, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805EFB4, sub_805EFD8, gUnknown_08375528); + +u8 sub_805EFF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375534, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805F040, sub_805F064, gUnknown_08375538); + +u8 sub_805F084(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375544, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805F0CC, sub_805F0F0, gUnknown_08375548); + +u8 sub_805F110(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375554, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805F158, sub_805F17C, gUnknown_08375558); + +u8 sub_805F19C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375564, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805F1E4, sub_805F208, gUnknown_08375568); + +u8 sub_805F228(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375574, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +} + +fieldmap_object_cb(sub_805F270, sub_805F294, gUnknown_08375578); + +u8 sub_805F2B4(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 directions[4]; + memcpy(directions, gUnknown_08375584, 4); + if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) + { + mapObject->mapobj_unk_21 = 3; + } + return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); +}; + +fieldmap_object_cb(sub_805F2FC, sub_805F320, gUnknown_08375588); + +u8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + if (mapObject->mapobj_unk_21 == 0) + { + mapObject->mapobj_unk_21 = player_get_direction_lower_nybble(); + } + sprite->data1 = 1; + return 1; +} + +u8 sub_805F364(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2) + { + return 0; + } + return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), NULL); +} + +u8 sub_805F3C4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} + +#ifdef NONMATCHING + +u8 sub_805F3EC(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + return 0; +} + +u8 sub_805F3F0(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + int direction; + direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2); + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 2; + return 1; +} + +u8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + s16 x; + s16 y; + int direction; + direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2); + FieldObjectMoveDestCoords(mapObject, direction, &x, &y); + FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(direction)); + if (!npc_block_way(mapObject, x, y, direction) || (a3 != NULL && !a3(MapGridGetMetatileBehaviorAt(x, y)))) + { + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); + } + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 2; + return 1; +} +#endif + +asm(".section .text_fmocb2_c\n"); + +fieldmap_object_cb(sub_805F8E0, sub_805F904, gUnknown_083755C0); + +u8 mss_08062EA4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2) + { + return 0; + } + return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), MetatileBehavior_IsPokeGrass); +} + +u8 sub_805F9F8(struct MapObject *, struct Sprite *); + +void FieldObjectCB_TreeDisguise(struct Sprite *sprite) +{ + struct MapObject *mapObject; + 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]); + mapObject->mapobj_unk_1A = FieldEffectStart(0x1c); + mapObject->mapobj_unk_21 = 1; + sprite->data7 ++; + } + meta_step(&gMapObjects[sprite->data0], sprite, sub_805F9F8); +} + +u8 sub_805F9F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + return 0; +} + +void FieldObjectCB_MountainDisguise(struct Sprite *sprite) +{ + struct MapObject *mapObject; + 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]); + mapObject->mapobj_unk_1A = FieldEffectStart(0x1d); + mapObject->mapobj_unk_21 = 1; + sprite->data7 ++; + } + meta_step(&gMapObjects[sprite->data0], sprite, sub_805F9F8); +} + +u8 sub_805FAD8(struct MapObject *mapObject, struct Sprite *sprite); + +void FieldObjectCB_Hidden1(struct Sprite *sprite) +{ + if (sprite->data7 == 0) + { + gMapObjects[sprite->data0].mapobj_bit_26 = 1; + sprite->subspriteMode = 2; + sprite->oam.priority = 3; + sprite->data7 ++; + } + meta_step(&gMapObjects[sprite->data0], sprite, sub_805FAD8); +} + +u8 sub_805FAD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_083755CC[sprite->data1](mapObject, sprite); +} + +u8 sub_805FAF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + return 0; +} + +u8 sub_805FB04(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sprite->data1 = 0; + } + return 0; +} + +fieldmap_object_cb(sub_805FB20, sub_805FB44, gUnknown_083755D0); + +u8 sub_805FB64(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay16AnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805FB90, sub_805FBB4, gUnknown_083755D8); + +u8 sub_805FBD4(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay8AnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805FC00, sub_805FC24, gUnknown_083755E0); + +u8 sub_805FC44(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay4AnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 1; + return 1; +} + +fieldmap_object_cb(sub_805FC70, sub_805FC94, gUnknown_083755E8); + +u8 sub_805FCB4(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + mapObject->mapobj_bit_13 = 1; + sprite->data1 = 1; + return 1; +} + +u8 sub_805FCE8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + sprite->data1 = 2; + return 1; + } + return 0; +} + +u8 sub_805FD08(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_1 = 0; + return 0; +} + +void sub_805FC70(struct Sprite *sprite); + +void npc_reset(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_1 = 0; + mapObject->mapobj_bit_6 = 0; + mapObject->mapobj_bit_7 = 0; + mapObject->mapobj_unk_1C = 0xff; + sprite->data1 = 0; +} + +u8 FieldObjectDirectionToImageAnimId(u8 direction) +{ + return gUnknown_083755F4[direction]; +} + +u8 get_go_image_anim_num(u8 direction) +{ + return gUnknown_083755FD[direction]; +} + +u8 get_go_fast_image_anim_num(u8 direction) +{ + return gUnknown_08375606[direction]; +} + +u8 get_go_faster_image_anim_num(u8 direction) +{ + return gUnknown_0837560F[direction]; +} + +u8 sub_805FD78(u8 direction) +{ + return gUnknown_08375618[direction]; +} + +u8 sub_805FD88(u8 direction) +{ + return gUnknown_08375621[direction]; +} + +u8 sub_805FD98(u8 direction) +{ + return gUnknown_0837562A[direction]; +} + +u8 unref_sub_805FDA8(u8 direction) +{ + return gUnknown_08375633[direction]; +} + +u8 sub_805FDB8(u8 direction) +{ + return gUnknown_0837563C[direction]; +} + +u8 sub_805FDC8(u8 direction) +{ + return gUnknown_08375645[direction]; +} + +u8 sub_805FDD8(u8 direction) +{ + return gUnknown_0837564E[direction]; +} + +u8 sub_805FDE8(u8 direction) +{ + return gUnknown_08375657[direction]; +} + +u8 sub_805FDF8(u8 direction) +{ + return gUnknown_08375660[direction]; +} + +u8 sub_805FE08(u8 direction) +{ + return gUnknown_08375669[direction]; +} + +u8 get_run_image_anim_num(u8 direction) +{ + return gUnknown_08375672[direction]; +} + +void sub_805FE28(struct MapObject *mapObject, struct Sprite *sprite, u8 animNum) +{ + if (!mapObject->mapobj_bit_12) + { + sprite->animNum = animNum; + if (sprite->animCmdIndex == 1) + { + sprite->animCmdIndex = 2; + } else if (sprite->animCmdIndex == 3) + { + sprite->animCmdIndex = 0; + } + SeekSpriteAnim(sprite, sprite->animCmdIndex); + } +} + +void sub_805FE64(struct MapObject *mapObject, struct Sprite *sprite, u8 animNum) +{ + u8 animCmdIndex; + if (!mapObject->mapobj_bit_12) + { + sprite->animNum = animNum; + animCmdIndex = 3; + if (sprite->animCmdIndex < 2) + { + animCmdIndex = 1; + } + SeekSpriteAnim(sprite, animCmdIndex); + } +} + +u8 sub_805FE90(s16 a0, s16 a1, s16 a2, s16 a3) +{ + if (a0 > a2) + { + return DIR_WEST; + } else if (a0 < a2) + { + return DIR_EAST; + } else if (a1 > a3) + { + return DIR_NORTH; + } else + { + return DIR_SOUTH; + } +} + +void npc_set_running_behaviour_etc(struct MapObject *mapObject, u8 animPattern) +{ + mapObject->animPattern = animPattern; + mapObject->mapobj_unk_21 = 0; + mapObject->animId = 0; + gSprites[mapObject->spriteId].callback = gUnknown_0836DA88[animPattern]; + gSprites[mapObject->spriteId].data1 = 0; +} + +u8 npc_running_behaviour_by_direction(u8 direction) +{ + return gUnknown_0837567B[direction]; +} + +u8 sub_805FF20(struct MapObject *mapObject, u8 direction) +{ + s16 x; + s16 y; + x = mapObject->coords2.x; + y = mapObject->coords2.y; + MoveCoords(direction, &x, &y); + return npc_block_way(mapObject, x, y, direction); +} + +bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, s16 y); +bool8 CheckForCollisionBetweenFieldObjects(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)) + { + return 2; + } else if (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction)) + { + return 2; + } + if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y)) + { + return 3; + } + if (CheckForCollisionBetweenFieldObjects(mapObject, x, y)) + { + return 4; + } + return 0; +} + +u8 sub_8060024(struct MapObject *mapObject, s16 x, s16 y, u8 direction) +{ + u8 flags; + 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)) + { + flags |= 8; + } + return flags; +} + +bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, s16 y) +{ + 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; + } + } + 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 0; +} + +bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction) +{ + if (gUnknown_08375684[direction - 1](mapObject->mapobj_unk_1E) || gUnknown_08375694[direction - 1](MapGridGetMetatileBehaviorAt(x, y))) + { + return 1; + } + return 0; +} + +bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *mapObject, s16 x, s16 y) +{ + struct MapObject *mapObject2; + u8 i; + for (i=0; i<16; i++) + { + 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; + } + } + } + return 0; +} + +bool8 sub_8060234(u8 localId, u8 mapNum, u8 mapGroup) +{ + u8 mapObjectId; + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + { + if (gSprites[gMapObjects[mapObjectId].spriteId].data7 & 2) + { + return 1; + } + } + return 0; +} + +void sub_8060288(u8 localId, u8 mapNum, u8 mapGroup) +{ + u8 mapObjectId; + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + { + gSprites[gMapObjects[mapObjectId].spriteId].data7 |= 4; + } +} + +void MoveCoords(u8 direction, s16 *x, s16 *y) +{ + *x += gDirectionToVector[direction].x; + *y += gDirectionToVector[direction].y; +} + +void unref_sub_80602F8(u8 direction, s16 *x, s16 *y) +{ + *x += gDirectionToVector[direction].x << 4; + *y += gDirectionToVector[direction].y << 4; +} + +void sub_8060320(u8 direction, s16 *x, s16 *y, s16 deltaX, s16 deltaY) +{ + if (gDirectionToVector[direction].x > 0) + { + *x += deltaX; + } + if (gDirectionToVector[direction].x < 0) + { + *x -= deltaX; + } + if (gDirectionToVector[direction].y > 0) + { + *y += deltaY; + } + if (gDirectionToVector[direction].y < 0) + { + *y -= deltaY; + } +} + +void sub_8060388(s16 x1, s16 y1, s16 *x2, s16 *y2) +{ + *x2 = (x1 - gSaveBlock1.pos.x) << 4; + *y2 = (y1 - gSaveBlock1.pos.y) << 4; + *x2 -= gUnknown_0300489C; + *y2 -= gUnknown_03004898; +} + +void sub_80603CC(s16 x1, s16 y1, s16 *x2, s16 *y2) +{ + s16 x3; + s16 y3; + x3 = -gUnknown_0300489C - gUnknown_03004880.unk10; + y3 = -gUnknown_03004898 - gUnknown_03004880.unk14; + if (gUnknown_03004880.unk10 > 0) + { + x3 += 0x10; + } + if (gUnknown_03004880.unk10 < 0) + { + x3 -= 0x10; + } + if (gUnknown_03004880.unk14 > 0) + { + y3 += 0x10; + } + if (gUnknown_03004880.unk14 < 0) + { + y3 -= 0x10; + } + *x2 = ((x1 - gSaveBlock1.pos.x) << 4) + x3; + *y2 = ((y1 - gSaveBlock1.pos.y) << 4) + y3; +} + +void sub_8060470(s16 *x, s16 *y, s16 dx, s16 dy) +{ + sub_80603CC(*x, *y, x, y); + *x += dx; + *y += dy; +} + +void GetFieldObjectMovingCameraOffset(s16 *x, s16 *y) +{ + *x = 0; + *y = 0; + if (gUnknown_03004880.unk10 > 0) + { + (*x)++; + } + if (gUnknown_03004880.unk10 < 0) + { + (*x)--; + } + if (gUnknown_03004880.unk14 > 0) + { + (*y)++; + } + if (gUnknown_03004880.unk14 < 0) + { + (*y)--; + } +} + +void FieldObjectMoveDestCoords(struct MapObject *mapObject, u8 direction, s16 *x, s16 *y) +{ + *x = mapObject->coords2.x; + *y = mapObject->coords2.y; + MoveCoords(direction, x, y); +} + +bool8 FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(struct MapObject *mapObject) +{ + if (mapObject->mapobj_bit_1 || mapObject->mapobj_bit_6) + { + return TRUE; + } + return FALSE; +} + +bool8 FieldObjectIsSpecialAnimActive(struct MapObject *mapObject) +{ + if (mapObject->mapobj_bit_6 && mapObject->mapobj_unk_1C != 0xff) + { + return TRUE; + } + return FALSE; +} + +bool8 FieldObjectSetSpecialAnim(struct MapObject *mapObject, u8 specialAnimId) +{ + if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject)) + { + return TRUE; + } + UnfreezeMapObject(mapObject); + mapObject->mapobj_unk_1C = specialAnimId; + mapObject->mapobj_bit_6 = 1; + mapObject->mapobj_bit_7 = 0; + gSprites[mapObject->spriteId].data2 = 0; + return FALSE; +} + +void FieldObjectForceSetSpecialAnim(struct MapObject *mapObject, u8 specialAnimId) +{ + FieldObjectClearAnimIfSpecialAnimActive(mapObject); + FieldObjectSetSpecialAnim(mapObject, specialAnimId); +} + +void FieldObjectClearAnimIfSpecialAnimActive(struct MapObject *mapObject) +{ + if (mapObject->mapobj_bit_6) + { + FieldObjectClearAnim(mapObject); + } +} + +void FieldObjectClearAnim(struct MapObject *mapObject) +{ + mapObject->mapobj_unk_1C = 0xFF; + mapObject->mapobj_bit_6 = 0; + mapObject->mapobj_bit_7 = 0; + gSprites[mapObject->spriteId].data1 = 0; + gSprites[mapObject->spriteId].data2 = 0; +} + +bool8 FieldObjectCheckIfSpecialAnimFinishedOrInactive(struct MapObject *mapObject) +{ + if (mapObject->mapobj_bit_6) + return mapObject->mapobj_bit_7; + return 0x10; +} + +bool8 FieldObjectClearAnimIfSpecialAnimFinished(struct MapObject *mapObject) +{ + u8 specialAnimStatus; + specialAnimStatus = FieldObjectCheckIfSpecialAnimFinishedOrInactive(mapObject); + if (specialAnimStatus != 0 && specialAnimStatus != 0x10) + { + FieldObjectClearAnimIfSpecialAnimActive(mapObject); + } + return specialAnimStatus; +} + +u8 FieldObjectGetSpecialAnim(struct MapObject *mapObject) +{ + if (mapObject->mapobj_bit_6) + { + return mapObject->mapobj_unk_1C; + } + return 0xFF; +} + +extern void DoGroundEffects_OnSpawn(struct MapObject *mapObject, struct Sprite *sprite); +extern void DoGroundEffects_OnBeginStep(struct MapObject *mapObject, struct Sprite *sprite); +extern void DoGroundEffects_OnFinishStep(struct MapObject *mapObject, struct Sprite *sprite); +void npc_obj_transfer_image_anim_pause_flag(struct MapObject *mapObject, struct Sprite *sprite); +void sub_80634A0(struct MapObject *mapObject, struct Sprite *sprite); +void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *sprite); +void FieldObjectUpdateSubpriority(struct MapObject *mapObject, struct Sprite *sprite); + +void meta_step(struct MapObject *mapObject, struct Sprite *sprite, u8 (*callback)(struct MapObject *, struct Sprite *)) +{ + DoGroundEffects_OnSpawn(mapObject, sprite); + sub_80634A0(mapObject, sprite); + if (FieldObjectIsSpecialAnimActive(mapObject)) + { + FieldObjectExecSpecialAnim(mapObject, sprite); + } else + { + if (!mapObject->mapobj_bit_8) + { + while (callback(mapObject, sprite)); + } + } + DoGroundEffects_OnBeginStep(mapObject, sprite); + DoGroundEffects_OnFinishStep(mapObject, sprite); + npc_obj_transfer_image_anim_pause_flag(mapObject, sprite); + sub_80634D0(mapObject, sprite); + FieldObjectUpdateSubpriority(mapObject, sprite); +} + + +u8 GetFaceDirectionAnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756C8, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 GetSimpleGoAnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756CD, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 GetGoSpeed0AnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756D2, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_8060744(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756D7, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 d2s_08064034(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756DC, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_806079C(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756E1, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_80607C8(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756E6, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_80607F4(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756EB, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 GetJumpLedgeAnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756F0, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_806084C(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756F5, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_8060878(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756FA, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_80608A4(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_083756FF, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_80608D0(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375704, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 GetStepInPlaceDelay32AnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375709, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 GetStepInPlaceDelay16AnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_0837570E, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 GetStepInPlaceDelay8AnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375713, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 GetStepInPlaceDelay4AnimId(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375718, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 FieldObjectFaceOppositeDirection(struct MapObject *mapObject, u8 direction) +{ + return FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(GetOppositeDirection(direction))); +} + +u8 sub_80609D8(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_0837571D, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_8060A04(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375722, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_8060A30(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375727, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_8060A5C(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_0837572C, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_8060A88(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375731, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_8060AB4(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375736, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_8060AE0(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_0837573B, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_8060B0C(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375740, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_8060B38(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_08375745, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 sub_8060B64(u8 index) +{ + u8 directions[5]; + memcpy(directions, gUnknown_0837574A, 5); + if (index >= 5) + { + index = 0; + } + return directions[index]; +} + +u8 GetOppositeDirection(u8 direction) +{ + u8 directions[8]; + memcpy(directions, gUnknown_0837574F, 8); + if (direction == 0 || direction > 8) + { + return direction; + } + return directions[direction - 1]; +} + +int zffu_offset_calc(u8 a0, u8 a1) +{ + return gUnknown_08375757[a0 - 1][a1 - 1]; +} + +#ifdef NONMATCHING +int state_to_direction(u8 a0, u8 a1, u8 a2) +{ + int zffuOffset; + asm_comment("For some reason, r2 is being backed up to r3 and restored ahead of the zffu call."); + if (a1 == 0 || a2 == 0 || a1 > 4 || a2 > 4) + { + return 0; + } + zffuOffset = zffu_offset_calc(a1, a2); + return gUnknown_08375767[a0 - 1][zffuOffset - 1]; +} +#else +__attribute__((naked)) +int state_to_direction(u8 a0, u8 a1, u8 a2) +{ + asm(".syntax unified\n\ + push {r4,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r0, r1, 0\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + cmp r1, 0\n\ + beq _08060BFC\n\ + cmp r2, 0\n\ + beq _08060BFC\n\ + cmp r1, 0x4\n\ + bhi _08060BFC\n\ + cmp r2, 0x4\n\ + bls _08060C00\n\ +_08060BFC:\n\ + movs r0, 0\n\ + b _08060C12\n\ +_08060C00:\n\ + adds r1, r2, 0\n\ + bl zffu_offset_calc\n\ + ldr r2, _08060C18 @ =gUnknown_08375767\n\ + lsls r1, r4, 2\n\ + subs r1, 0x5\n\ + adds r0, r1\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ +_08060C12:\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_08060C18: .4byte gUnknown_08375767\n\ +.syntax divided\n"); +} +#endif + +void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gUnknown_08375778[mapObject->mapobj_unk_1C][sprite->data2](mapObject, sprite)) + { + mapObject->mapobj_bit_7 = 1; + } +} + +bool8 FieldObjectExecRegularAnim(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gUnknown_08375778[mapObject->mapobj_unk_1C][sprite->data2](mapObject, sprite)) + { + mapObject->mapobj_unk_1C = 0xFF; + sprite->data2 = 0; + return 1; + } + return 0; +} + +void FieldObjectSetRegularAnim(struct MapObject *mapObject, struct Sprite *sprite, u8 animId) +{ + mapObject->mapobj_unk_1C = animId; + sprite->data2 = 0; +} + +void an_look_any(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ + FieldObjectSetDirection(mapObject, direction); + npc_coords_shift_still(mapObject); + sub_805FE64(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); + sprite->animPaused = 1; + sprite->data2 = 1; +} + +u8 sub_8060CE0(struct MapObject *mapObject, struct Sprite *sprite) +{ + an_look_any(mapObject, sprite, DIR_SOUTH); + return 1; +} + +u8 sub_8060CF0(struct MapObject *mapObject, struct Sprite *sprite) +{ + an_look_any(mapObject, sprite, DIR_NORTH); + return 1; +} + +u8 sub_8060D00(struct MapObject *mapObject, struct Sprite *sprite) +{ + an_look_any(mapObject, sprite, DIR_WEST); + return 1; +} + +u8 sub_8060D10(struct MapObject *mapObject, struct Sprite *sprite) +{ + an_look_any(mapObject, sprite, DIR_EAST); + return 1; +} + +void sub_8060D20(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) +{ + s16 x; + s16 y; + x = mapObject->coords2.x; + y = mapObject->coords2.y; + FieldObjectSetDirection(mapObject, direction); + MoveCoords(direction, &x, &y); + npc_coords_shift(mapObject, x, y); + oamt_npc_ministep_reset(sprite, direction, a3); + sprite->animPaused = 0; + mapObject->mapobj_bit_2 = 1; + sprite->data2 = 1; +} + +extern u8 (*const gUnknown_083759C0[5])(u8); + +void do_go_anim(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) +{ + u8 (*const functions[5])(u8); + memcpy((void *)functions, gUnknown_083759C0, sizeof(gUnknown_083759C0)); + sub_8060D20(mapObject, sprite, direction, a3); + sub_805FE28(mapObject, sprite, functions[a3](mapObject->mapobj_unk_18)); +} + +void do_run_anim(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ + sub_8060D20(mapObject, sprite, direction, 1); + sub_805FE28(mapObject, sprite, get_run_image_anim_num(mapObject->mapobj_unk_18)); +} + +bool8 obj_npc_ministep(struct Sprite *); + +bool8 npc_obj_ministep_stop_on_arrival(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (obj_npc_ministep(sprite)) + { + npc_coords_shift_still(mapObject); + mapObject->mapobj_bit_3 = 1; + sprite->animPaused = 1; + return 1; + } + return 0; +} + +void sub_8060E68(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ + s16 x; + s16 y; + x = mapObject->coords2.x; + y = mapObject->coords2.y; + FieldObjectSetDirection(mapObject, direction); + MoveCoords(direction, &x, &y); + npc_coords_shift(mapObject, x, y); + sub_806467C(sprite, direction); + sprite->animPaused = 0; + mapObject->mapobj_bit_2 = 1; + sprite->data2 = 1; +} + +void sub_8060ED8(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ + sub_8060E68(mapObject, sprite, direction); + sub_805FE28(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); +} + +bool8 an_walk_any_2(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_806468C(sprite)) + { + npc_coords_shift_still(mapObject); + mapObject->mapobj_bit_3 = 1; + sprite->animPaused = 1; + return TRUE; + } + return FALSE; +} + +bool8 sub_8060F5C(struct MapObject *, struct Sprite *); + +bool8 sub_8060F3C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8060ED8(mapObject, sprite, DIR_SOUTH); + return sub_8060F5C(mapObject, sprite); +} + +bool8 sub_8060F5C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (an_walk_any_2(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8060F9C(struct MapObject *, struct Sprite *); + +bool8 sub_8060F7C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8060ED8(mapObject, sprite, DIR_NORTH); + return sub_8060F9C(mapObject, sprite); +} + +bool8 sub_8060F9C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (an_walk_any_2(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8060FDC(struct MapObject *, struct Sprite *); + +bool8 sub_8060FBC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8060ED8(mapObject, sprite, DIR_WEST); + return sub_8060FDC(mapObject, sprite); +} + +bool8 sub_8060FDC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (an_walk_any_2(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806101C(struct MapObject *, struct Sprite *); + +bool8 sub_8060FFC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8060ED8(mapObject, sprite, DIR_EAST); + return sub_806101C(mapObject, sprite); +} + +bool8 sub_806101C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (an_walk_any_2(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806105C(struct MapObject *, struct Sprite *); + +bool8 sub_806103C(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_SOUTH, 0); + return sub_806105C(mapObject, sprite); +} + +bool8 sub_806105C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806109C(struct MapObject *, struct Sprite *); + +bool8 sub_806107C(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_NORTH, 0); + return sub_806109C(mapObject, sprite); +} + +bool8 sub_806109C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80610DC(struct MapObject *, struct Sprite *); + +bool8 sub_80610BC(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_WEST, 0); + return sub_80610DC(mapObject, sprite); +} + +bool8 sub_80610DC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806111C(struct MapObject *, struct Sprite *); + +bool8 sub_80610FC(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_EAST, 0); + return sub_806111C(mapObject, sprite); +} + +bool8 sub_806111C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_806113C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a4, u8 a5) +{ + s16 vSPp4[3]; + s16 x; + s16 y; + memcpy(vSPp4, gUnknown_08375A34, sizeof gUnknown_08375A34); + x = 0; + y = 0; + FieldObjectSetDirection(mapObject, direction); + sub_8060320(direction, &x, &y, vSPp4[a4], vSPp4[a4]); + npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y); + sub_80646E4(sprite, direction, a4, a5); + sprite->data2 = 1; + sprite->animPaused = 0; + mapObject->mapobj_bit_2 = 1; + mapObject->mapobj_bit_4 = 1; +} + +void maybe_shadow_1(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a4, u8 a5) +{ + sub_806113C(mapObject, sprite, direction, a4, a5); + sub_805FE28(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); + DoShadowFieldEffect(mapObject); +} + +u8 sub_806123C(struct MapObject *mapObject, struct Sprite *sprite, u8 (*const callback)(struct Sprite *)) +{ + s16 vSPp4[3]; + s16 x; + s16 y; + u8 retval; + memcpy(vSPp4, gUnknown_08375A3A, sizeof gUnknown_08375A3A); + retval = callback(sprite); + if (retval == 1 && vSPp4[sprite->data4] != 0) + { + x = 0; + y = 0; + sub_8060320(mapObject->placeholder18, &x, &y, vSPp4[sprite->data4], vSPp4[sprite->data4]); + npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y); + mapObject->mapobj_bit_2 = 1; + mapObject->mapobj_bit_4 = 1; + } else if (retval == 0xff) + { + npc_coords_shift_still(mapObject); + mapObject->mapobj_bit_3 = 1; + mapObject->mapobj_bit_5 = 1; + sprite->animPaused = 1; + } + return retval; +} + +u8 sub_8061300(struct MapObject *mapObject, struct Sprite *sprite) +{ + return sub_806123C(mapObject, sprite, sub_8064704); +} + +u8 sub_8061314(struct MapObject *mapObject, struct Sprite *sprite) +{ + return sub_806123C(mapObject, sprite, sub_806478C); +} + +bool8 sub_8061328(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061300(mapObject, sprite) == 0xFF) + { + return TRUE; + } + return FALSE; +} + +bool8 sub_8061340(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061314(mapObject, sprite) == 0xFF) + { + return TRUE; + } + return FALSE; +} + +bool8 sub_8061358(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 retval; + + retval = sub_8061300(mapObject, sprite); + if (retval != 1) + { + if (retval == 0xFF) + { + return TRUE; + } + return FALSE; + } + FieldObjectSetDirection(mapObject, GetOppositeDirection(mapObject->placeholder18)); + sub_805FE64(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); + return FALSE; +} + +bool8 sub_80613D4(struct MapObject *, struct Sprite *); +bool8 sub_806142C(struct MapObject *, struct Sprite *); +bool8 sub_8061484(struct MapObject *, struct Sprite *); +bool8 sub_80614DC(struct MapObject *, struct Sprite *); + +bool8 sub_80613A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 2, 0); + return sub_80613D4(mapObject, sprite); +} + +bool8 sub_80613D4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061400(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_NORTH, 2, 0); + return sub_806142C(mapObject, sprite); +} + +bool8 sub_806142C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061458(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_WEST, 2, 0); + return sub_8061484(mapObject, sprite); +} + +bool8 sub_8061484(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80614B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_EAST, 2, 0); + return sub_80614DC(mapObject, sprite); +} + +bool8 sub_80614DC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_8061508(struct Sprite *sprite, u16 duration) +{ + sprite->data2 = 1; + sprite->data3 = duration; +} + +bool8 sub_8061510(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->data3--; + if (!sprite->data3) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806152C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 1); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_806154C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 2); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_806156C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 4); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_806158C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 8); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_80615AC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 16); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_80615EC(struct MapObject *mapObject, struct Sprite *sprite); +bool8 sub_806162C(struct MapObject *mapObject, struct Sprite *sprite); +bool8 sub_806166C(struct MapObject *mapObject, struct Sprite *sprite); +bool8 sub_80616AC(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80615CC(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_SOUTH, 1); + return sub_80615EC(mapObject, sprite); +} + +bool8 sub_80615EC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} +bool8 sub_806160C(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_NORTH, 1); + return sub_806162C(mapObject, sprite); +} + +bool8 sub_806162C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} +bool8 sub_806164C(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_WEST, 1); + return sub_806166C(mapObject, sprite); +} + +bool8 sub_806166C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} +bool8 sub_806168C(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_EAST, 1); + return sub_80616AC(mapObject, sprite); +} + +bool8 sub_80616AC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_80616CC(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 animId, u16 duration) +{ + FieldObjectSetDirection(mapObject, direction); + sub_805FE28(mapObject, sprite, animId); + sprite->animPaused = 0; + sprite->data2 = 1; + sprite->data3 = duration; +} + +bool8 sub_8061714(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->data3--; + if (sprite->data3 == 0) + { + sprite->data2 = 2; + sprite->animPaused = 1; + return TRUE; + } + return FALSE; +} + +bool8 sub_806173C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sprite->data3 & 1) + { + sprite->animDelayCounter++; + } + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061778(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_image_anim_num(DIR_SOUTH), 32); + return sub_806173C(mapObject, sprite); +} + +bool8 sub_80617B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_image_anim_num(DIR_NORTH), 32); + return sub_806173C(mapObject, sprite); +} + +bool8 sub_80617E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, get_go_image_anim_num(DIR_WEST), 32); + return sub_806173C(mapObject, sprite); +} + +bool8 sub_8061820(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, get_go_image_anim_num(DIR_EAST), 32); + return sub_806173C(mapObject, sprite); +} + +bool8 sub_8061858(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_image_anim_num(DIR_SOUTH), 16); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061890(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_image_anim_num(DIR_NORTH), 16); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_80618C8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, get_go_image_anim_num(DIR_WEST), 16); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061900(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, get_go_image_anim_num(DIR_EAST), 16); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061938(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_fast_image_anim_num(DIR_SOUTH), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061970(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_fast_image_anim_num(DIR_NORTH), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_80619A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, get_go_fast_image_anim_num(DIR_WEST), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_80619E0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, get_go_fast_image_anim_num(DIR_EAST), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061A18(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_faster_image_anim_num(DIR_SOUTH), 4); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061A50(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_faster_image_anim_num(DIR_NORTH), 4); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061A88(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, get_go_faster_image_anim_num(DIR_WEST), 4); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061AC0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, get_go_faster_image_anim_num(DIR_EAST), 4); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8061B18(struct MapObject *, struct Sprite *); + +bool8 sub_8061AF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_SOUTH, 2); + return sub_8061B18(mapObject, sprite); +} + +bool8 sub_8061B18(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061B58(struct MapObject *, struct Sprite *); + +bool8 sub_8061B38(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_NORTH, 2); + return sub_8061B58(mapObject, sprite); +} + +bool8 sub_8061B58(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061B98(struct MapObject *, struct Sprite *); + +bool8 sub_8061B78(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_WEST, 2); + return sub_8061B98(mapObject, sprite); +} + +bool8 sub_8061B98(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061BD8(struct MapObject *, struct Sprite *); + +bool8 sub_8061BB8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_EAST, 2); + return sub_8061BD8(mapObject, sprite); +} + +bool8 sub_8061BD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061C18(struct MapObject *, struct Sprite *); + +bool8 sub_8061BF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_SOUTH, 3); + return sub_8061C18(mapObject, sprite); +} + +bool8 sub_8061C18(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061C58(struct MapObject *, struct Sprite *); + +bool8 sub_8061C38(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_NORTH, 3); + return sub_8061C58(mapObject, sprite); +} + +bool8 sub_8061C58(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061C98(struct MapObject *, struct Sprite *); + +bool8 sub_8061C78(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_WEST, 3); + return sub_8061C98(mapObject, sprite); +} + +bool8 sub_8061C98(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061CD8(struct MapObject *, struct Sprite *); + +bool8 sub_8061CB8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_EAST, 3); + return sub_8061CD8(mapObject, sprite); +} + +bool8 sub_8061CD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061D18(struct MapObject *, struct Sprite *); + +bool8 sub_8061CF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_SOUTH, 4); + return sub_8061D18(mapObject, sprite); +} + +bool8 sub_8061D18(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061D58(struct MapObject *, struct Sprite *); + +bool8 sub_8061D38(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_NORTH, 4); + return sub_8061D58(mapObject, sprite); +} + +bool8 sub_8061D58(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061D98(struct MapObject *, struct Sprite *); + +bool8 sub_8061D78(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_WEST, 4); + return sub_8061D98(mapObject, sprite); +} + +bool8 sub_8061D98(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + + +bool8 sub_8061DD8(struct MapObject *, struct Sprite *); + +bool8 sub_8061DB8(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_go_anim(mapObject, sprite, DIR_EAST, 4); + return sub_8061DD8(mapObject, sprite); +} + +bool8 sub_8061DD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061E18(struct MapObject *, struct Sprite *); + +bool8 do_run_south_anim(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_run_anim(mapObject, sprite, DIR_SOUTH); + return sub_8061E18(mapObject, sprite); +} + +bool8 sub_8061E18(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061E58(struct MapObject *, struct Sprite *); + +bool8 do_run_north_anim(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_run_anim(mapObject, sprite, DIR_NORTH); + return sub_8061E58(mapObject, sprite); +} + +bool8 sub_8061E58(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061E98(struct MapObject *, struct Sprite *); + +bool8 do_run_west_anim(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_run_anim(mapObject, sprite, DIR_WEST); + return sub_8061E98(mapObject, sprite); +} + +bool8 sub_8061E98(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061ED8(struct MapObject *, struct Sprite *); + +bool8 do_run_east_anim(struct MapObject *mapObject, struct Sprite *sprite) +{ + do_run_anim(mapObject, sprite, DIR_EAST); + return sub_8061ED8(mapObject, sprite); +} + +bool8 sub_8061ED8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void npc_set_direction_and_anim__an_proceed(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 animNum) +{ + obj_anim_image_set_and_seek(sprite, animNum, 0); + FieldObjectSetDirection(mapObject, direction); + sprite->data2 = 1; +} + +bool8 sub_8061F24(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, mapObject->placeholder18, sprite->animNum); + return FALSE; +} + +bool8 sub_8064864(struct Sprite *); + +bool8 sub_8061F3C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064864(sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_8061F5C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ + sub_806113C(mapObject, sprite, direction, 1, 0); + StartSpriteAnim(sprite, sub_805FD88(direction)); +} + +bool8 sub_8061FB0(struct MapObject *, struct Sprite *); + +bool8 sub_8061F90(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061F5C(mapObject, sprite, DIR_SOUTH); + return sub_8061FB0(mapObject, sprite); +} + +bool8 sub_8061FB0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061340(mapObject, sprite)) + { + sprite->data2 = 2; + mapObject->mapobj_bit_5 = 0; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061FF8(struct MapObject *, struct Sprite *); + +bool8 sub_8061FD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061F5C(mapObject, sprite, DIR_NORTH); + return sub_8061FF8(mapObject, sprite); +} + +bool8 sub_8061FF8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061340(mapObject, sprite)) + { + sprite->data2 = 2; + mapObject->mapobj_bit_5 = 0; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062040(struct MapObject *, struct Sprite *); + +bool8 sub_8062020(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061F5C(mapObject, sprite, DIR_WEST); + return sub_8062040(mapObject, sprite); +} + +bool8 sub_8062040(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061340(mapObject, sprite)) + { + sprite->data2 = 2; + mapObject->mapobj_bit_5 = 0; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062088(struct MapObject *, struct Sprite *); + +bool8 sub_8062068(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061F5C(mapObject, sprite, DIR_EAST); + return sub_8062088(mapObject, sprite); +} + +bool8 sub_8062088(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061340(mapObject, sprite)) + { + sprite->data2 = 2; + mapObject->mapobj_bit_5 = 0; + return TRUE; + } + return FALSE; +} + +bool8 sub_80620B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 objectId; + if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, &objectId)) + { + an_look_any(mapObject, sprite, sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y)); + } + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_806210C(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 objectId; + if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, &objectId)) + { + an_look_any(mapObject, sprite, GetOppositeDirection(sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y))); + } + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062170(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_9 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062180(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_9 = 0; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_80621BC(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062190(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 1, 2); + return sub_80621BC(mapObject, sprite); +} + +bool8 sub_80621BC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062214(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80621E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_NORTH, 1, 2); + return sub_8062214(mapObject, sprite); +} + +bool8 sub_8062214(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806226C(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062240(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_WEST, 1, 2); + return sub_806226C(mapObject, sprite); +} + +bool8 sub_806226C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80622C4(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062298(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_EAST, 1, 2); + return sub_80622C4(mapObject, sprite); +} + +bool8 sub_80622C4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806231C(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80622F0(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 0, 0); + return sub_806231C(mapObject, sprite); +} + +bool8 sub_806231C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062374(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062348(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_NORTH, 0, 0); + return sub_8062374(mapObject, sprite); +} + +bool8 sub_8062374(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80623CC(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80623A0(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_WEST, 0, 0); + return sub_80623CC(mapObject, sprite); +} + +bool8 sub_80623CC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062424(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80623F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_EAST, 0, 0); + return sub_8062424(mapObject, sprite); +} + +bool8 sub_8062424(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806247C(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062450(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 0, 2); + return sub_806247C(mapObject, sprite); +} + +bool8 sub_806247C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061358(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80624D4(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_80624A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_NORTH, 0, 2); + return sub_80624D4(mapObject, sprite); +} + +bool8 sub_80624D4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061358(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806252C(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062500(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_WEST, 0, 2); + return sub_806252C(mapObject, sprite); +} + +bool8 sub_806252C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061358(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062584(struct MapObject *mapObject, struct Sprite *sprite); + +bool8 sub_8062558(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_EAST, 0, 2); + return sub_8062584(mapObject, sprite); +} + +bool8 sub_8062584(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061358(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80625B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + an_look_any(mapObject, sprite, gUnknown_0836DC09[mapObject->animPattern]); + return TRUE; +} + +bool8 sub_80625C8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, 0x14); + return FALSE; +} + +bool8 sub_80625D8(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_25 = 0; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_80625E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_25 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_80625F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_12 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062608(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_12 = GetFieldObjectGraphicsInfo(mapObject->graphicsId)->inanimate; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062634(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_13 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062644(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_13 = 0; + sprite->data2 = 1; + return TRUE; +} + +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]); + FieldEffectStart(0x0); + sprite->data2 = 1; + return TRUE; +} + +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]); + FieldEffectStart(0x21); + sprite->data2 = 1; + return TRUE; +} + +bool8 do_heart_bubble(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); + FieldEffectStart(0x2e); + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_8062704(struct MapObject *, struct Sprite *); + +bool8 sub_80626C0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (mapObject->animPattern == 0x3F) + { + sub_8084794(mapObject); + return FALSE; + } + else if (mapObject->animPattern != 0x39 && mapObject->animPattern != 0x3A) + { + sprite->data2 = 2; + return TRUE; + } + else + { + sub_812869C(mapObject); + sprite->data2 = 1; + return sub_8062704(mapObject, sprite); + } +} + +bool8 sub_8062704(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_81286C4(mapObject)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062724(struct MapObject *mapObject, struct Sprite *sprite) +{ + obj_anim_image_set_and_seek(sprite, 1, 0); + sprite->data2 = 1; + return FALSE; +} + +bool8 sub_8062740(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064864(sprite)) + { + sub_8064820(sprite, 0x20); + sprite->data2 = 2; + } + return FALSE; +} + +bool8 sub_8062764(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_13 ^= 1; + if (sub_8064824(sprite)) + { + mapObject->mapobj_bit_13 = 1; + sprite->data2 = 3; + } + return FALSE; +} + +bool8 sub_80627A0(struct MapObject *mapObject, struct Sprite *sprite) +{ + obj_anim_image_set_and_seek(sprite, 1, 0); + sprite->data2 = 1; + return FALSE; +} + +bool8 sub_80627BC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064864(sprite)) + { + sub_8064820(sprite, 0x20); + sprite->data2 = 2; + } + return FALSE; +} + +bool8 sub_80627E0(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_13 ^= 1; + if (sub_8064824(sprite)) + { + mapObject->mapobj_bit_13 = 1; + sprite->data2 = 3; + } + return FALSE; +} + +bool8 sub_806281C(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_26 = 1; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_806282C(struct MapObject *mapObject, struct Sprite *sprite) +{ + mapObject->mapobj_bit_26 = 0; + sprite->data2 = 1; + return TRUE; +} + +bool8 sub_806283C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->oam.affineMode = 3; + InitSpriteAffineAnim(sprite); + sprite->affineAnimPaused = 1; + sprite->subspriteMode = 0; + return TRUE; +} + +bool8 sub_806286C(struct MapObject *mapObject, struct Sprite *sprite) +{ + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = 0; + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); + return TRUE; +} + +bool8 sub_80628D0(struct MapObject *, struct Sprite *); + +bool8 sub_806289C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8060ED8(mapObject, sprite, DIR_SOUTH); + sprite->affineAnimPaused = 0; + StartSpriteAffineAnimIfDifferent(sprite, 0); + return sub_80628D0(mapObject, sprite); +} + +bool8 sub_80628D0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (an_walk_any_2(mapObject, sprite)) + { + sprite->affineAnimPaused = 1; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062930(struct MapObject *, struct Sprite *); + +bool8 sub_80628FC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8060ED8(mapObject, sprite, DIR_SOUTH); + sprite->affineAnimPaused = 0; + ChangeSpriteAffineAnimIfDifferent(sprite, 1); + return sub_8062930(mapObject, sprite); +} + +bool8 sub_8062930(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (an_walk_any_2(mapObject, sprite)) + { + sprite->affineAnimPaused = 1; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_806295C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ + FieldObjectSetDirection(mapObject, direction); + npc_coords_shift_still(mapObject); + sub_805FE64(mapObject, sprite, sub_805FDD8(direction)); + sprite->animPaused = 1; + sprite->data2 = 1; +} + +bool8 sub_806299C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_806295C(mapObject, sprite, DIR_SOUTH); + return TRUE; +} + +bool8 sub_80629AC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_806295C(mapObject, sprite, DIR_NORTH); + return TRUE; +} + +bool8 sub_80629BC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_806295C(mapObject, sprite, DIR_WEST); + return TRUE; +} + +bool8 sub_80629CC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_806295C(mapObject, sprite, DIR_EAST); + return TRUE; +} + +bool8 sub_80629DC(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, sub_805FD98(DIR_SOUTH)); + return FALSE; +} + +bool8 sub_8062A00(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_NORTH, sub_805FD98(DIR_NORTH)); + return FALSE; +} + +bool8 sub_8062A24(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_WEST, sub_805FD98(DIR_WEST)); + return FALSE; +} + +bool8 sub_8062A48(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_EAST, sub_805FD98(DIR_EAST)); + return FALSE; +} + +bool8 sub_8062A6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, sub_805FDB8(DIR_SOUTH)); + return FALSE; +} + +bool8 sub_8062A90(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_NORTH, sub_805FDB8(DIR_NORTH)); + return FALSE; +} + +bool8 sub_8062AB4(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_WEST, sub_805FDB8(DIR_WEST)); + return FALSE; +} + +bool8 sub_8062AD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_EAST, sub_805FDB8(DIR_EAST)); + return FALSE; +} + +bool8 sub_8062AFC(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, sub_805FDC8(DIR_SOUTH)); + return FALSE; +} + +bool8 sub_8062B20(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_NORTH, sub_805FDC8(DIR_NORTH)); + return FALSE; +} + +bool8 sub_8062B44(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_WEST, sub_805FDC8(DIR_WEST)); + return FALSE; +} + +bool8 sub_8062B68(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_EAST, sub_805FDC8(DIR_EAST)); + return FALSE; +} + +void sub_8062B8C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3, u8 a4) +{ + sub_806113C(mapObject, sprite, direction, a3, a4); + StartSpriteAnimIfDifferent(sprite, sub_805FD98(direction)); + DoShadowFieldEffect(mapObject); +} + +bool8 sub_8062BFC(struct MapObject *, struct Sprite *); + +bool8 sub_8062BD0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_SOUTH, 0, 1); + return sub_8062BFC(mapObject, sprite); +} + +bool8 sub_8062BFC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062C54(struct MapObject *, struct Sprite *); + +bool8 sub_8062C28(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_NORTH, 0, 1); + return sub_8062C54(mapObject, sprite); +} + +bool8 sub_8062C54(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062CAC(struct MapObject *, struct Sprite *); + +bool8 sub_8062C80(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_WEST, 0, 1); + return sub_8062CAC(mapObject, sprite); +} + +bool8 sub_8062CAC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062D04(struct MapObject *, struct Sprite *); + +bool8 sub_8062CD8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_EAST, 0, 1); + return sub_8062D04(mapObject, sprite); +} + +bool8 sub_8062D04(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062D5C(struct MapObject *, struct Sprite *); + +bool8 sub_8062D30(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_SOUTH, 1, 1); + return sub_8062D5C(mapObject, sprite); +} + +bool8 sub_8062D5C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062DB4(struct MapObject *, struct Sprite *); + +bool8 sub_8062D88(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_NORTH, 1, 1); + return sub_8062DB4(mapObject, sprite); +} + +bool8 sub_8062DB4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062E0C(struct MapObject *, struct Sprite *); + +bool8 sub_8062DE0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_WEST, 1, 1); + return sub_8062E0C(mapObject, sprite); +} + +bool8 sub_8062E0C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062E64(struct MapObject *, struct Sprite *); + +bool8 sub_8062E38(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_EAST, 1, 1); + return sub_8062E64(mapObject, sprite); +} + +bool8 sub_8062E64(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062EBC(struct MapObject *, struct Sprite *); + +bool8 sub_8062E90(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_SOUTH, 2, 0); + return sub_8062EBC(mapObject, sprite); +} + +bool8 sub_8062EBC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062F14(struct MapObject *, struct Sprite *); + +bool8 sub_8062EE8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_NORTH, 2, 0); + return sub_8062F14(mapObject, sprite); +} + +bool8 sub_8062F14(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062F6C(struct MapObject *, struct Sprite *); + +bool8 sub_8062F40(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_WEST, 2, 0); + return sub_8062F6C(mapObject, sprite); +} + +bool8 sub_8062F6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062FC4(struct MapObject *, struct Sprite *); + +bool8 sub_8062F98(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8062B8C(mapObject, sprite, DIR_EAST, 2, 0); + return sub_8062FC4(mapObject, sprite); +} + +bool8 sub_8062FC4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8062FF0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_SOUTH, sub_805FDD8(DIR_SOUTH), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8063028(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_NORTH, sub_805FDD8(DIR_NORTH), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8063060(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_WEST, sub_805FDD8(DIR_WEST), 8); + return sub_8061714(mapObject, sprite); +} + +bool8 sub_8063098(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80616CC(mapObject, sprite, DIR_EAST, sub_805FDD8(DIR_EAST), 8); + return sub_8061714(mapObject, sprite); +} + +void sub_80630D0(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) +{ + sub_8060D20(mapObject, sprite, direction, a3); + StartSpriteAnim(sprite, sub_805FD98(mapObject->mapobj_unk_18)); + SeekSpriteAnim(sprite, 0); +} + +bool8 sub_8063128(struct MapObject *, struct Sprite *); + +bool8 sub_8063108(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80630D0(mapObject, sprite, DIR_SOUTH, 1); + return sub_8063128(mapObject, sprite); +} + +bool8 sub_8063128(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063168(struct MapObject *, struct Sprite *); + +bool8 sub_8063148(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80630D0(mapObject, sprite, DIR_NORTH, 1); + return sub_8063168(mapObject, sprite); +} + +bool8 sub_8063168(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80631A8(struct MapObject *, struct Sprite *); + +bool8 sub_8063188(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80630D0(mapObject, sprite, DIR_WEST, 1); + return sub_80631A8(mapObject, sprite); +} + +bool8 sub_80631A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80631E8(struct MapObject *, struct Sprite *); + +bool8 sub_80631C8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80630D0(mapObject, sprite, DIR_EAST, 1); + return sub_80631E8(mapObject, sprite); +} + +bool8 sub_80631E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_8063208(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) +{ + sub_8060D20(mapObject, sprite, direction, a3); + sub_805FE28(mapObject, sprite, sub_805FDD8(mapObject->mapobj_unk_18)); +} + +bool8 sub_8063258(struct MapObject *, struct Sprite *); + +bool8 sub_8063238(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063208(mapObject, sprite, DIR_SOUTH, 1); + return sub_8063258(mapObject, sprite); +} + +bool8 sub_8063258(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063298(struct MapObject *, struct Sprite *); + +bool8 sub_8063278(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063208(mapObject, sprite, DIR_NORTH, 1); + return sub_8063298(mapObject, sprite); +} + +bool8 sub_8063298(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80632D8(struct MapObject *, struct Sprite *); + +bool8 sub_80632B8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063208(mapObject, sprite, DIR_WEST, 1); + return sub_80632D8(mapObject, sprite); +} + +bool8 sub_80632D8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063318(struct MapObject *, struct Sprite *); + +bool8 sub_80632F8(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063208(mapObject, sprite, DIR_EAST, 1); + return sub_8063318(mapObject, sprite); +} + +bool8 sub_8063318(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_8063338(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) +{ + sub_8060D20(mapObject, sprite, direction, a3); + StartSpriteAnim(sprite, sub_805FDB8(mapObject->mapobj_unk_18)); + SeekSpriteAnim(sprite, 0); +} + +bool8 sub_8063390(struct MapObject *, struct Sprite *); + +bool8 sub_8063370(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063338(mapObject, sprite, DIR_SOUTH, 1); + return sub_8063390(mapObject, sprite); +} + +bool8 sub_8063390(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80633D0(struct MapObject *, struct Sprite *); + +bool8 sub_80633B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063338(mapObject, sprite, DIR_NORTH, 1); + return sub_80633D0(mapObject, sprite); +} + +bool8 sub_80633D0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063410(struct MapObject *, struct Sprite *); + +bool8 sub_80633F0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063338(mapObject, sprite, DIR_WEST, 1); + return sub_8063410(mapObject, sprite); +} + +bool8 sub_8063410(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063450(struct MapObject *, struct Sprite *); + +bool8 sub_8063430(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8063338(mapObject, sprite, DIR_EAST, 1); + return sub_8063450(mapObject, sprite); +} + +bool8 sub_8063450(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8063470(struct MapObject *mapObject, struct Sprite *sprite) +{ + return TRUE; +} + +bool8 sub_8063474(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->animPaused = 1; + return TRUE; +} + +void npc_obj_transfer_image_anim_pause_flag(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (mapObject->mapobj_bit_10) + { + sprite->animPaused = 1; + } +} + +void sub_80634A0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (mapObject->mapobj_bit_11) + { + sprite->animPaused = 0; + mapObject->mapobj_bit_10 = 0; + mapObject->mapobj_bit_11 = 0; + } +} + +void sub_80634E8(struct MapObject *, struct Sprite *); +void npc_update_obj_anim_flag(struct MapObject *, struct Sprite *); + +void sub_80634D0(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_80634E8(mapObject, sprite); + npc_update_obj_anim_flag(mapObject, sprite); +} + +#ifdef NONMATCHING +void sub_80634E8(struct MapObject *mapObject, struct Sprite *sprite) +{ + u16 x; + u16 y; + s16 x2; + s16 y2; + const struct MapObjectGraphicsInfo *graphicsInfo; + mapObject->mapobj_bit_14 = 0; + graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + if (sprite->coordOffsetEnabled) + { + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; + } else + { + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; + } + x2 = graphicsInfo->width + x; // offending line + y2 = graphicsInfo->height + y; // similarly offending line + if ((s16)x >= 0x100 || x2 < -0x10) + { + mapObject->mapobj_bit_14 = 1; + } + if ((s16)y >= 0xB0 || y2 < -0x10) + { + mapObject->mapobj_bit_14 = 1; + } +} +#else +__attribute__((naked)) +void sub_80634E8(struct MapObject *mapObject, struct Sprite *sprite) { + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + adds r5, r0, 0\n\ + adds r4, r1, 0\n\ + ldrb r1, [r5, 0x1]\n\ + movs r0, 0x41\n\ + negs r0, r0\n\ + ands r0, r1\n\ + strb r0, [r5, 0x1]\n\ + ldrb r0, [r5, 0x5]\n\ + bl GetFieldObjectGraphicsInfo\n\ + adds r6, r0, 0\n\ + adds r0, r4, 0\n\ + adds r0, 0x3E\n\ + ldrb r1, [r0]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0806354C\n\ + ldrh r1, [r4, 0x24]\n\ + ldrh r0, [r4, 0x20]\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + adds r0, 0x28\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + ldr r2, _08063544 @ =gSpriteCoordOffsetX\n\ + adds r0, r1\n\ + ldrh r2, [r2]\n\ + adds r0, r2\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + ldrh r1, [r4, 0x26]\n\ + ldrh r0, [r4, 0x22]\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + adds r0, 0x29\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + ldr r2, _08063548 @ =gSpriteCoordOffsetY\n\ + adds r0, r1\n\ + ldrh r2, [r2]\n\ + adds r0, r2\n\ + b _08063574\n\ + .align 2, 0\n\ +_08063544: .4byte gSpriteCoordOffsetX\n\ +_08063548: .4byte gSpriteCoordOffsetY\n\ +_0806354C:\n\ + ldrh r1, [r4, 0x24]\n\ + ldrh r0, [r4, 0x20]\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + adds r0, 0x28\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + adds r0, r1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + ldrh r1, [r4, 0x26]\n\ + ldrh r0, [r4, 0x22]\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + adds r0, 0x29\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + adds r0, r1\n\ +_08063574:\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + ldrh r0, [r6, 0x8]\n\ + adds r0, r3\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + ldrh r0, [r6, 0xA]\n\ + adds r0, r2\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + cmp r0, 0xFF\n\ + bgt _0806359C\n\ + lsls r0, r1, 16\n\ + asrs r0, 16\n\ + movs r1, 0x10\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + bge _080635A4\n\ +_0806359C:\n\ + ldrb r0, [r5, 0x1]\n\ + movs r1, 0x40\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x1]\n\ +_080635A4:\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + cmp r0, 0xAF\n\ + bgt _080635B8\n\ + lsls r0, r4, 16\n\ + asrs r0, 16\n\ + movs r1, 0x10\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + bge _080635C0\n\ +_080635B8:\n\ + ldrb r0, [r5, 0x1]\n\ + movs r1, 0x40\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x1]\n\ +_080635C0:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ +.syntax divided\n"); +} +#endif + +void npc_update_obj_anim_flag(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->invisible = 0; + if (mapObject->mapobj_bit_13 || mapObject->mapobj_bit_14) + { + sprite->invisible = 1; + } +} diff --git a/src/field/field_map_obj_helpers.c b/src/field/field_map_obj_helpers.c new file mode 100644 index 000000000..87be8e011 --- /dev/null +++ b/src/field/field_map_obj_helpers.c @@ -0,0 +1,318 @@ +#include "global.h" +#include "field_map_obj_helpers.h" +#include "field_effect.h" +#include "field_ground_effect.h" +#include "field_map_obj.h" +#include "sprite.h" + +typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 dir); + +extern s16 gUnknown_08376194[]; +extern SpriteStepFunc *gUnknown_08376180[]; +extern s8 *gUnknown_083761D0[]; +extern s16 gUnknown_083761DC[]; +extern u8 gUnknown_083761E2[]; +extern s16 gUnknown_083761E6[]; +extern u8 gUnknown_083761EC[]; + +bool8 FreezeMapObject(struct MapObject *mapObject) +{ + if (mapObject->mapobj_bit_6 || mapObject->mapobj_bit_8) + { + return TRUE; + } + else + { + mapObject->mapobj_bit_8 = 1; + mapObject->mapobj_bit_23 = gSprites[mapObject->spriteId].animPaused; + mapObject->mapobj_bit_24 = gSprites[mapObject->spriteId].affineAnimPaused; + gSprites[mapObject->spriteId].animPaused = 1; + gSprites[mapObject->spriteId].affineAnimPaused = 1; + return FALSE; + } +} + +void FreezeMapObjects(void) +{ + u8 i; + for (i = 0; i < 16; i++) + if (gMapObjects[i].active && i != gPlayerAvatar.mapObjectId) + FreezeMapObject(&gMapObjects[i]); +} + +void FreezeMapObjectsExceptOne(u8 a1) +{ + u8 i; + for (i = 0; i < 16; i++) + if (i != a1 && gMapObjects[i].active && i != gPlayerAvatar.mapObjectId) + FreezeMapObject(&gMapObjects[i]); +} + +void UnfreezeMapObject(struct MapObject *mapObject) +{ + if (mapObject->active && mapObject->mapobj_bit_8) + { + mapObject->mapobj_bit_8 = 0; + gSprites[mapObject->spriteId].animPaused = mapObject->mapobj_bit_23; + gSprites[mapObject->spriteId].affineAnimPaused = mapObject->mapobj_bit_24; + } +} + +void UnfreezeMapObjects(void) +{ + u8 i; + for (i = 0; i < 16; i++) + if (gMapObjects[i].active) + UnfreezeMapObject(&gMapObjects[i]); +} + +void Step1(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += gDirectionToVector[dir].x; + sprite->pos1.y += gDirectionToVector[dir].y; +} + +void Step2(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += 2 * (u16) gDirectionToVector[dir].x; + sprite->pos1.y += 2 * (u16) gDirectionToVector[dir].y; +} + +void Step3(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += 2 * (u16) gDirectionToVector[dir].x + (u16) gDirectionToVector[dir].x; + sprite->pos1.y += 2 * (u16) gDirectionToVector[dir].y + (u16) gDirectionToVector[dir].y; +} + +void Step4(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += 4 * (u16) gDirectionToVector[dir].x; + sprite->pos1.y += 4 * (u16) gDirectionToVector[dir].y; +} + +void Step8(struct Sprite *sprite, u8 dir) +{ + sprite->pos1.x += 8 * (u16) gDirectionToVector[dir].x; + sprite->pos1.y += 8 * (u16) gDirectionToVector[dir].y; +} + +void oamt_npc_ministep_reset(struct Sprite *sprite, u8 a2, u8 a3) +{ + sprite->data3 = a2; + sprite->data4 = a3; + sprite->data5 = 0; +} + +bool8 obj_npc_ministep(struct Sprite *sprite) +{ + if (sprite->data5 >= gUnknown_08376194[sprite->data4]) + return FALSE; + + gUnknown_08376180[sprite->data4][sprite->data5](sprite, sprite->data3); + + sprite->data5++; + + if (sprite->data5 < gUnknown_08376194[sprite->data4]) + return FALSE; + + return TRUE; +} + +void sub_806467C(struct Sprite *sprite, u8 a2) +{ + sprite->data3 = a2; + sprite->data4 = 0; + sprite->data5 = 0; +} + +bool8 sub_806468C(struct Sprite *sprite) +{ + if (!(sprite->data4 & 1)) + { + Step1(sprite, sprite->data3); + sprite->data5++; + } + + sprite->data4++; + + if (sprite->data5 > 15) + return TRUE; + else + return FALSE; +} + +s16 sub_80646C8(s16 a1, u8 a2) +{ + return gUnknown_083761D0[a2][a1]; +} + +void sub_80646E4(struct Sprite *sprite, u8 a2, u8 a3, u8 a4) +{ + sprite->data3 = a2; + sprite->data4 = a3; + sprite->data5 = a4; + sprite->data6 = 0; +} + +u8 sub_8064704(struct Sprite *sprite) +{ + u8 v2; + s16 v5[3]; + u8 v6[3]; + + memcpy(v5, gUnknown_083761DC, 6); + memcpy(v6, gUnknown_083761E2, 3); + + v2 = 0; + + if (sprite->data4) + Step1(sprite, sprite->data3); + + sprite->pos2.y = sub_80646C8(sprite->data6 >> v6[sprite->data4], sprite->data5); + + sprite->data6++; + + if (sprite->data6 == (v5[sprite->data4] >> 1)) + v2 = 1; + + if (sprite->data6 >= v5[sprite->data4]) + { + sprite->pos2.y = 0; + v2 = -1; + } + + return v2; +} + +u8 sub_806478C(struct Sprite *sprite) +{ + u8 v2; + s16 v5[3]; + u8 v6[3]; + + memcpy(v5, gUnknown_083761E6, 6); + memcpy(v6, gUnknown_083761EC, 3); + + v2 = 0; + + if (sprite->data4 && !(sprite->data6 & 1)) + Step1(sprite, sprite->data3); + + sprite->pos2.y = sub_80646C8(sprite->data6 >> v6[sprite->data4], sprite->data5); + + sprite->data6++; + + if (sprite->data6 == (v5[sprite->data4] >> 1)) + v2 = 1; + + if (sprite->data6 >= v5[sprite->data4]) + { + sprite->pos2.y = 0; + v2 = -1; + } + + return v2; +} + +void sub_8064820(struct Sprite *sprite, u16 a2) +{ + sprite->data3 = a2; +} + +bool8 sub_8064824(struct Sprite *sprite) +{ + sprite->data3--; + + if (sprite->data3 == 0) + return TRUE; + else + return FALSE; +} + +void obj_anim_image_set_and_seek(struct Sprite *sprite, u8 a2, u8 a3) +{ + sprite->animNum = a2; + sprite->animPaused = 0 ; + SeekSpriteAnim(sprite, a3); +} + +bool8 sub_8064864(struct Sprite *sprite) +{ + if (sprite->animEnded) + return TRUE; + else + return FALSE; +} + +void sub_806487C(struct Sprite *sprite, bool8 invisible) +{ + u16 x, y; + s16 x2, y2; + + sprite->invisible = invisible; + + if (sprite->coordOffsetEnabled) + { + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; + } + else + { + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; + } + + x2 = x - (sprite->centerToCornerVecX >> 1); + y2 = y - (sprite->centerToCornerVecY >> 1); + + if ((s16)x > 255 || x2 < -16) + sprite->invisible = 1; + if ((s16)y > 175 || y2 < -16) + sprite->invisible = 1; +} + +void sub_8064970(struct Sprite *sprite) +{ + SetObjectSubpriorityByZCoord(sprite->data1, sprite, 1); + sub_806487C(sprite, 0); +} + +void sub_8064990(u8 a1, u8 dir) +{ + u8 i; + for (i = 0; i < MAX_SPRITES; i++) + { + struct Sprite *sprite = &gSprites[i]; + if (sprite->inUse && sprite->callback == sub_8064970 && (u8)sprite->data0 == a1) + { + u8 animNum = FieldObjectDirectionToImageAnimId(dir); + StartSpriteAnim(sprite, animNum); + break; + } + } +} + +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]); + return FieldEffectStart(fieldEffectId); +} + +void DoShadowFieldEffect(struct MapObject *mapObject) +{ + if (!mapObject->mapobj_bit_22) + { + mapObject->mapobj_bit_22 = 1; + oe_exec_and_other_stuff(3, 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; + FieldEffectStart(5); +} diff --git a/src/field/field_message_box.c b/src/field/field_message_box.c new file mode 100644 index 000000000..35aac7ac9 --- /dev/null +++ b/src/field/field_message_box.c @@ -0,0 +1,155 @@ +#include "global.h" +#include "field_message_box.h" +#include "menu.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "text_window.h" + +static EWRAM_DATA struct Window gFieldMessageBoxWindow = {0}; + +static u8 sMessageBoxMode; + +static void Task_FieldMessageBox(u8 taskId); +static void CreateFieldMessageBoxTask(void); +static void DestroyFieldMessageBoxTask(void); +static void PrintFieldMessage(const u8 *message); +static void PrintFieldMessageFromStringVar4(void); + +void InitFieldMessageBox(void) +{ + sMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN; + SetMessageBoxBaseTileNum(gMenuTextWindowContentTileOffset); + InitWindowFromConfig(&gFieldMessageBoxWindow, &gWindowConfig_81E6CE4); +} + +static void Task_FieldMessageBox(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + LoadMessageBoxTiles(&gFieldMessageBoxWindow); + task->data[0]++; + break; + case 1: + DrawStandardMessageBox(&gFieldMessageBoxWindow); + task->data[0]++; + break; + case 2: + switch (sMessageBoxMode) + { + case FIELD_MESSAGE_BOX_NORMAL: + if (!sub_80035AC(&gFieldMessageBoxWindow)) + return; + break; + case FIELD_MESSAGE_BOX_AUTO_SCROLL: + if (!sub_8003778(&gFieldMessageBoxWindow)) + return; + break; + } + sMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN; + DestroyTask(taskId); + } +} + +static void CreateFieldMessageBoxTask(void) +{ + CreateTask(Task_FieldMessageBox, 80); +} + +static void DestroyFieldMessageBoxTask(void) +{ + u8 taskId = FindTaskIdByFunc(Task_FieldMessageBox); + if (taskId != 0xFF) + DestroyTask(taskId); +} + +bool8 ShowFieldMessage(const u8 *message) +{ + if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN) + { + return FALSE; + } + else + { + PrintFieldMessage(message); + sMessageBoxMode = FIELD_MESSAGE_BOX_NORMAL; + return TRUE; + } +} + +bool8 ShowFieldAutoScrollMessage(const u8 *message) +{ + if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN) + { + return FALSE; + } + else + { + sMessageBoxMode = FIELD_MESSAGE_BOX_AUTO_SCROLL; + PrintFieldMessage(message); + return TRUE; + } +} + +bool8 unref_sub_8064BB8(const u8 *message) +{ + sMessageBoxMode = FIELD_MESSAGE_BOX_AUTO_SCROLL; + PrintFieldMessage(message); + return TRUE; +} + +bool8 unref_sub_8064BD0(const u8 *message) +{ + if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN) + { + return FALSE; + } + else + { + sMessageBoxMode = FIELD_MESSAGE_BOX_NORMAL; + PrintFieldMessageFromStringVar4(); + return TRUE; + } +} + +static void PrintFieldMessage(const u8 *message) +{ + StringExpandPlaceholders(gStringVar4, message); + sub_8002EB0(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15); + CreateFieldMessageBoxTask(); +} + +static void PrintFieldMessageFromStringVar4(void) +{ + sub_8002EB0(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15); + CreateFieldMessageBoxTask(); +} + +void HideFieldMessageBox(void) +{ + DestroyFieldMessageBoxTask(); + ClearStandardMessageBox(&gFieldMessageBoxWindow); + sMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN; +} + +u8 GetFieldMessageBoxMode(void) +{ + return sMessageBoxMode; +} + +bool8 IsFieldMessageBoxHidden(void) +{ + if (sMessageBoxMode == FIELD_MESSAGE_BOX_HIDDEN) + return TRUE; + else + return FALSE; +} + +void unref_sub_8064CA0(void) +{ + DestroyFieldMessageBoxTask(); + DrawStandardMessageBox(&gFieldMessageBoxWindow); + sMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN; +} diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c new file mode 100644 index 000000000..2a7b2f3e0 --- /dev/null +++ b/src/field/field_player_avatar.c @@ -0,0 +1,1728 @@ +#include "global.h" +#include "field_player_avatar.h" +#include "bike.h" +#include "event_data.h" +#include "field_effect.h" +#include "field_effect_helpers.h" +#include "field_ground_effect.h" +#include "field_map_obj.h" +#include "field_map_obj_helpers.h" +#include "fieldmap.h" +#include "main.h" +#include "map_object_constants.h" +#include "menu.h" +#include "metatile_behavior.h" +#include "party_menu.h" +#include "rng.h" +#include "rom4.h" +#include "rotating_gate.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "strings2.h" +#include "task.h" +#include "tv.h" +#include "wild_encounter.h" + +EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {0}; + +//Functions +static bool8 sub_8058854(struct MapObject *, u8); +static void npc_clear_strange_bits(struct MapObject *a); +static void MovePlayerAvatarUsingKeypadInput(u8 a, u16 b, u16 c); +static void PlayerAllowForcedMovementIfMovingSameDirection(void); +static u8 TryDoMetatileBehaviorForcedMovement(void); +static u8 GetForcedMovementByMetatileBehavior(void); +static void MovePlayerNotOnBike(u8 a, u16 b); +static u8 CheckMovementInputNotOnBike(u8 a); +static u8 CheckForPlayerAvatarCollision(u8 a); +static u8 sub_8058EF0(s16 a, s16 b, u8 c); +static bool8 ShouldJumpLedge(s16 a, s16 b, u8 c); +static u8 sub_8058F6C(s16 a, s16 b, u8 c); +static void check_acro_bike_metatile(int unused1, int unused2, u8 c, u8 *d); +static void DoPlayerAvatarTransition(void); +static bool8 player_is_anim_in_certain_ranges(void); +static bool8 sub_80592A4(void); +static bool8 PlayerIsAnimActive(void); +static bool8 PlayerCheckIfAnimFinishedOrInactive(void); +static void PlayerNotOnBikeCollide(u8 a); +static void PlayCollisionSoundIfNotFacingWarp(u8 a); +static void sub_8059D60(struct MapObject *a); +static void StartStrengthAnim(u8 a, u8 b); +static void sub_8059F94(void); +static void sub_805A06C(void); + +static bool8 (*const gUnknown_0830FB58[])(u8) = +{ + MetatileBehavior_IsTrickHouseSlipperyFloor, + MetatileBehavior_IsIce_2, + MetatileBehavior_IsWalkSouth, + MetatileBehavior_IsWalkNorth, + MetatileBehavior_IsWalkWest, + MetatileBehavior_IsWalkEast, + MetatileBehavior_IsSouthwardCurrent, + MetatileBehavior_IsNorthwardCurrent, + MetatileBehavior_IsWestwardCurrent, + MetatileBehavior_IsEastwardCurrent, + MetatileBehavior_IsSlideSouth, + MetatileBehavior_IsSlideNorth, + MetatileBehavior_IsSlideWest, + MetatileBehavior_IsSlideEast, + MetatileBehavior_IsWaterfall, + MetatileBehavior_0xBB, + MetatileBehavior_0xBC, + MetatileBehavior_IsMuddySlope, +}; +static u8 (*const gUnknown_0830FBA0[])(void) = +{ + ForcedMovement_None, + ForcedMovement_Slip, + ForcedMovement_Slip, + sub_8058AAC, + sub_8058AC4, + sub_8058ADC, + sub_8058AF4, + sub_8058B0C, + sub_8058B24, + sub_8058B3C, + sub_8058B54, + ForcedMovement_SlideSouth, + ForcedMovement_SlideNorth, + ForcedMovement_SlideWest, + ForcedMovement_SlideEast, + sub_8058B0C, + sub_8058C04, + sub_8058C10, + ForcedMovement_MuddySlope, +}; +static void (*const gUnknown_0830FBEC[])(u8, u16) = +{ + PlayerNotOnBikeNotMoving, + PlayerNotOnBikeTurningInPlace, + sub_8058D0C, +}; +static bool8 (*const gUnknown_0830FBF8[])(u8) = +{ + MetatileBehavior_IsBumpySlope, + MetatileBehavior_IsIsolatedVerticalRail, + MetatileBehavior_IsIsolatedHorizontalRail, + MetatileBehavior_IsVerticalRail, + MetatileBehavior_IsHorizontalRail, +}; +static const u8 gUnknown_0830FC0C[] = {9, 10, 11, 12, 13}; +static void (*const gUnknown_0830FC14[])(struct MapObject *) = +{ + PlayerAvatarTransition_Normal, + PlayerAvatarTransition_MachBike, + PlayerAvatarTransition_AcroBike, + PlayerAvatarTransition_Surfing, + PlayerAvatarTransition_Underwater, + sub_80591F4, + nullsub_49, + nullsub_49, +}; +static bool8 (*const gUnknown_0830FC34[])(u8) = +{ + MetatileBehavior_IsSouthArrowWarp, + MetatileBehavior_IsNorthArrowWarp, + MetatileBehavior_IsWestArrowWarp, + MetatileBehavior_IsEastArrowWarp, +}; +static const u8 sRivalAvatarGfxIds[][2] = +{ + {MAP_OBJ_GFX_RIVAL_BRENDAN_NORMAL, MAP_OBJ_GFX_RIVAL_MAY_NORMAL}, + {MAP_OBJ_GFX_RIVAL_BRENDAN_MACH_BIKE, MAP_OBJ_GFX_RIVAL_MAY_MACH_BIKE}, + {MAP_OBJ_GFX_RIVAL_BRENDAN_ACRO_BIKE, MAP_OBJ_GFX_RIVAL_MAY_ACRO_BIKE}, + {MAP_OBJ_GFX_RIVAL_BRENDAN_SURFING, MAP_OBJ_GFX_RIVAL_MAY_SURFING}, + {MAP_OBJ_GFX_BRENDAN_UNDERWATER, MAP_OBJ_GFX_MAY_UNDERWATER}, + {MAP_OBJ_GFX_RIVAL_BRENDAN_FIELD_MOVE, MAP_OBJ_GFX_RIVAL_MAY_FIELD_MOVE}, + {MAP_OBJ_GFX_BRENDAN_FISHING, MAP_OBJ_GFX_MAY_FISHING}, + {MAP_OBJ_GFX_BRENDAN_WATERING, MAP_OBJ_GFX_MAY_WATERING}, +}; +static const u8 sPlayerAvatarGfxIds[][2] = +{ + {MAP_OBJ_GFX_BRENDAN_NORMAL, MAP_OBJ_GFX_MAY_NORMAL}, + {MAP_OBJ_GFX_BRENDAN_MACH_BIKE, MAP_OBJ_GFX_MAY_MACH_BIKE}, + {MAP_OBJ_GFX_BRENDAN_ACRO_BIKE, MAP_OBJ_GFX_MAY_ACRO_BIKE}, + {MAP_OBJ_GFX_BRENDAN_SURFING, MAP_OBJ_GFX_MAY_SURFING}, + {MAP_OBJ_GFX_BRENDAN_UNDERWATER, MAP_OBJ_GFX_MAY_UNDERWATER}, + {MAP_OBJ_GFX_BRENDAN_FIELD_MOVE, MAP_OBJ_GFX_MAY_FIELD_MOVE}, + {MAP_OBJ_GFX_BRENDAN_FISHING, MAP_OBJ_GFX_MAY_FISHING}, + {MAP_OBJ_GFX_BRENDAN_WATERING, MAP_OBJ_GFX_MAY_WATERING}, +}; +static const u8 gUnknown_0830FC64[2][5][2] = +{ + //male + { + {MAP_OBJ_GFX_BRENDAN_NORMAL, 1}, + {MAP_OBJ_GFX_BRENDAN_MACH_BIKE, 2}, + {MAP_OBJ_GFX_BRENDAN_ACRO_BIKE, 4}, + {MAP_OBJ_GFX_BRENDAN_SURFING, 8}, + {MAP_OBJ_GFX_BRENDAN_UNDERWATER, 16}, + }, + //female + { + {MAP_OBJ_GFX_MAY_NORMAL, 1}, + {MAP_OBJ_GFX_MAY_MACH_BIKE, 2}, + {MAP_OBJ_GFX_MAY_ACRO_BIKE, 4}, + {MAP_OBJ_GFX_MAY_SURFING, 8}, + {MAP_OBJ_GFX_MAY_UNDERWATER, 16}, + } +}; +static bool8 (*const gUnknown_0830FC78[])(u8) = //Duplicate of gUnknown_0830FC34 +{ + MetatileBehavior_IsSouthArrowWarp, + MetatileBehavior_IsNorthArrowWarp, + MetatileBehavior_IsWestArrowWarp, + MetatileBehavior_IsEastArrowWarp, +}; +static u8 (*const gUnknown_0830FC88[])(struct Task *, struct MapObject *, struct MapObject *) = +{ + sub_8059E84, + sub_8059EA4, + sub_8059F40, +}; +static u8 (*const gUnknown_0830FC94[])(struct Task *, struct MapObject *) = +{ + sub_805A000, +}; +static u8 (*const gUnknown_0830FC98[])(struct Task *, struct MapObject *) = +{ + sub_805A0D8, + sub_805A100, + sub_805A178, + sub_805A1B8, +}; + +fieldmap_object_null_cb(sub_80587B4, sub_80587D8); + +void player_step(u8 direction, u16 newKeys, u16 heldKeys) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + sub_8059D60(playerMapObj); + if (gPlayerAvatar.unk6 == 0) + { + sub_80E5B38(newKeys, heldKeys); + if (!sub_8058854(playerMapObj, direction)) + { + npc_clear_strange_bits(playerMapObj); + DoPlayerAvatarTransition(); + if (TryDoMetatileBehaviorForcedMovement() == 0) + { + MovePlayerAvatarUsingKeypadInput(direction, newKeys, heldKeys); + PlayerAllowForcedMovementIfMovingSameDirection(); + } + } + } +} + +static bool8 sub_8058854(struct MapObject *playerMapObj, u8 direction) +{ + if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerMapObj) + && !FieldObjectClearAnimIfSpecialAnimFinished(playerMapObj)) + { + u8 specialAnim = FieldObjectGetSpecialAnim(playerMapObj); + + if (specialAnim > 24 && specialAnim < 29 && direction != DIR_NONE && playerMapObj->placeholder18 != direction) + { + FieldObjectClearAnim(playerMapObj); + return FALSE; + } + else + { + return TRUE; + } + } + return FALSE; +} + +static void npc_clear_strange_bits(struct MapObject *a) +{ + a->mapobj_bit_12 = 0; + a->mapobj_bit_10 = 0; + a->mapobj_bit_9 = 0; + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_DASH; +} + +static void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys) +{ + if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE) + || (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE)) + MovePlayerOnBike(direction, newKeys, heldKeys); + else + MovePlayerNotOnBike(direction, heldKeys); +} + +static void PlayerAllowForcedMovementIfMovingSameDirection(void) +{ + if (gPlayerAvatar.running2 == 2) + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; +} + +static u8 TryDoMetatileBehaviorForcedMovement(void) +{ + return gUnknown_0830FBA0[GetForcedMovementByMetatileBehavior()](); +} + +static u8 GetForcedMovementByMetatileBehavior(void) +{ + u8 i; + + if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_5)) + { + u8 r5 = gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E; + + for (i = 0; i < 18; i++) + { + if (gUnknown_0830FB58[i](r5)) + return i + 1; + } + } + return 0; +} + +u8 ForcedMovement_None(void) +{ + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_6) + { + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + playerMapObj->mapobj_bit_9 = 0; + playerMapObj->mapobj_bit_11 = 1; + FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18); + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_6; + } + return 0; +} + +static u8 DoForcedMovement(u8 direction, void (*b)(u8)) +{ + struct PlayerAvatar *playerAvatar = &gPlayerAvatar; + u8 collisionType = CheckForPlayerAvatarCollision(direction); + + playerAvatar->flags |= PLAYER_AVATAR_FLAG_6; + if (collisionType != 0) + { + ForcedMovement_None(); + if (collisionType <= 4) + { + return 0; + } + else + { + if (collisionType == COLLISION_LEDGE_JUMP) + PlayerJumpLedge(direction); + playerAvatar->flags |= PLAYER_AVATAR_FLAG_6; + playerAvatar->running2 = 2; + return 1; + } + } + else + { + playerAvatar->running2 = 2; + b(direction); + return 1; + } +} + +static u8 DoForcedMovementInCurrentDirection(void (*a)(u8)) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + playerMapObj->mapobj_bit_10 = 1; + return DoForcedMovement(playerMapObj->placeholder18, a); +} + +u8 ForcedMovement_Slip(void) +{ + return DoForcedMovementInCurrentDirection(sub_80593C4); +} + +u8 sub_8058AAC(void) +{ + return DoForcedMovement(1, PlayerGoSpeed0); +} + +u8 sub_8058AC4(void) +{ + return DoForcedMovement(2, PlayerGoSpeed0); +} + +u8 sub_8058ADC(void) +{ + return DoForcedMovement(3, PlayerGoSpeed0); +} + +u8 sub_8058AF4(void) +{ + return DoForcedMovement(4, PlayerGoSpeed0); +} + +u8 sub_8058B0C(void) +{ + return DoForcedMovement(1, npc_use_some_d2s); +} + +u8 sub_8058B24(void) +{ + return DoForcedMovement(2, npc_use_some_d2s); +} + +u8 sub_8058B3C(void) +{ + return DoForcedMovement(3, npc_use_some_d2s); +} + +u8 sub_8058B54(void) +{ + return DoForcedMovement(4, npc_use_some_d2s); +} + +static u8 ForcedMovement_Slide(u8 direction, void (*b)(u8)) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + playerMapObj->mapobj_bit_10 = 1; + playerMapObj->mapobj_bit_9 = 1; + return DoForcedMovement(direction, b); +} + +u8 ForcedMovement_SlideSouth(void) +{ + return ForcedMovement_Slide(1, sub_80593C4); +} + +u8 ForcedMovement_SlideNorth(void) +{ + return ForcedMovement_Slide(2, sub_80593C4); +} + +u8 ForcedMovement_SlideWest(void) +{ + return ForcedMovement_Slide(3, sub_80593C4); +} + +u8 ForcedMovement_SlideEast(void) +{ + return ForcedMovement_Slide(4, sub_80593C4); +} + +u8 sub_8058C04(void) +{ + sub_8059F94(); + return 1; +} + +u8 sub_8058C10(void) +{ + sub_805A06C(); + return 1; +} + +u8 ForcedMovement_MuddySlope(void) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (playerMapObj->placeholder18 != 2 || GetPlayerSpeed() <= 3) + { + sub_80E6010(0); + playerMapObj->mapobj_bit_9 = 1; + return DoForcedMovement(1, sub_80593C4); + } + else + { + return 0; + } +} + +static void MovePlayerNotOnBike(u8 direction, u16 heldKeys) +{ + gUnknown_0830FBEC[CheckMovementInputNotOnBike(direction)](direction, heldKeys); +} + +static u8 CheckMovementInputNotOnBike(u8 direction) +{ + if (direction == DIR_NONE) + { + gPlayerAvatar.running2 = 0; + return 0; + } + else if (direction != player_get_direction_upper_nybble() && gPlayerAvatar.running2 != 2) + { + gPlayerAvatar.running2 = 1; + return 1; + } + else + { + gPlayerAvatar.running2 = 2; + return 2; + } +} + +void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys) +{ + PlayerFaceDirection(player_get_direction_lower_nybble()); +} + +void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys) +{ + PlayerTurnInPlace(direction); +} + +void sub_8058D0C(u8 direction, u16 heldKeys) +{ + u8 r1 = CheckForPlayerAvatarCollision(direction); + + switch (r1) + { + case 6: + PlayerJumpLedge(direction); + return; + default: + if (r1 > 8 || r1 < 5) + PlayerNotOnBikeCollide(direction); + return; + case 0: + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) + { + sub_80593C4(direction); + return; + } + if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_4) && (heldKeys & B_BUTTON) && FlagGet(SYS_B_DASH) + && IsRunningDisallowed(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E) == 0) + { + sub_805940C(direction); + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_DASH; + } + else + { + PlayerGoSpeed0(direction); + } + } +} + +static u8 CheckForPlayerAvatarCollision(u8 direction) +{ + s16 x, y; + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + x = playerMapObj->coords2.x; + y = playerMapObj->coords2.y; + MoveCoords(direction, &x, &y); + return CheckForFieldObjectCollision(playerMapObj, x, y, direction, MapGridGetMetatileBehaviorAt(x, y)); +} + +u8 CheckForFieldObjectCollision(struct MapObject *a, s16 x, s16 y, u8 direction, u8 e) +{ + u8 collision; + + collision = npc_block_way(a, x, y, direction); + if (collision == 3 && sub_8058EF0(x, y, direction)) + return 5; + if (ShouldJumpLedge(x, y, direction)) + { + IncrementGameStat(0x2B); + return COLLISION_LEDGE_JUMP; + } + if (collision == 4 && sub_8058F6C(x, y, direction)) + return 7; + + if (collision == 0) + { + if (CheckForRotatingGatePuzzleCollision(direction, x, y)) + return 8; + check_acro_bike_metatile(x, y, e, &collision); + } + return collision; +} + +static u8 sub_8058EF0(s16 a, s16 b, u8 c) +{ + if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) + && MapGridGetZCoordAt(a, b) == 3 + && GetFieldObjectIdByXYZ(a, b, 3) == 16) + { + sub_805A20C(c); + return 1; + } + else + { + return 0; + } +} + +static bool8 ShouldJumpLedge(s16 a, s16 b, u8 c) +{ + if (GetLedgeJumpDirection(a, b, c) != 0) + return 1; + else + return 0; +} + +static u8 sub_8058F6C(s16 a, s16 b, u8 c) +{ + if (FlagGet(SYS_USE_STRENGTH)) + { + u8 mapObjectId = GetFieldObjectIdByXY(a, b); + + if (mapObjectId != 16) + { + if (gMapObjects[mapObjectId].graphicsId == 0x57) + { + a = gMapObjects[mapObjectId].coords2.x; + b = gMapObjects[mapObjectId].coords2.y; + MoveCoords(c, &a, &b); + if (npc_block_way(&gMapObjects[mapObjectId], a, b, c) == 0 + && MetatileBehavior_IsNonAnimDoor(MapGridGetMetatileBehaviorAt(a, b)) == 0) + { + StartStrengthAnim(mapObjectId, c); + return 1; + } + } + } + } + return 0; +} + +static void check_acro_bike_metatile(int unused1, int unused2, u8 c, u8 *d) +{ + u8 i; + + for (i = 0; i < 5; i++) + { + if (gUnknown_0830FBF8[i](c)) + { + *d = gUnknown_0830FC0C[i]; + return; + } + } +} + +void SetPlayerAvatarTransitionFlags(u16 a) +{ + gPlayerAvatar.bike |= a; + DoPlayerAvatarTransition(); +} + +static void DoPlayerAvatarTransition(void) +{ + u8 i; + u32 flags = gPlayerAvatar.bike; + + if (flags != 0) + { + for (i = 0; i < 8; i++, flags >>= 1) + { +#ifdef NONMATCHING + if (flags & 1) + { + gUnknown_0830FC14[i](&gMapObjects[gPlayerAvatar.mapObjectId]); + } +#else + if (flags & 1) + { + register void (*const *funcs)(struct MapObject *) asm("r0") = gUnknown_0830FC14; + funcs[i](&gMapObjects[gPlayerAvatar.mapObjectId]); + } +#endif + } + gPlayerAvatar.bike = 0; + } +} + +void nullsub_49(struct MapObject *a) +{ +} + +void PlayerAvatarTransition_Normal(struct MapObject *a) +{ + sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(0)); + FieldObjectTurn(a, a->placeholder18); + SetPlayerAvatarStateMask(1); +} + +void PlayerAvatarTransition_MachBike(struct MapObject *a) +{ + sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(1)); + FieldObjectTurn(a, a->placeholder18); + SetPlayerAvatarStateMask(2); + BikeClearState(0, 0); +} + +void PlayerAvatarTransition_AcroBike(struct MapObject *a) +{ + sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(2)); + FieldObjectTurn(a, a->placeholder18); + SetPlayerAvatarStateMask(4); + BikeClearState(0, 0); + sub_80E6084(); +} + +void PlayerAvatarTransition_Surfing(struct MapObject *a) +{ + u8 unk; + + 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; + unk = FieldEffectStart(8); + a->mapobj_unk_1A = unk; + sub_8127ED0(unk, 1); +} + +void PlayerAvatarTransition_Underwater(struct MapObject *a) +{ + sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(4)); + FieldObjectTurn(a, a->placeholder18); + SetPlayerAvatarStateMask(16); + a->mapobj_unk_1A = sub_8128124(a->spriteId); +} + +void sub_80591F4(struct MapObject *a) +{ + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_5; +} + +void sub_8059204(void) +{ + gPlayerAvatar.running1 = 0; + if (PlayerIsAnimActive()) + { + if (!PlayerCheckIfAnimFinishedOrInactive()) + { + if (!player_is_anim_in_certain_ranges()) + gPlayerAvatar.running1 = 1; + } + else + { + if (!sub_80592A4()) + gPlayerAvatar.running1 = 2; + } + } +} + +static bool8 player_is_anim_in_certain_ranges(void) +{ + u8 unk = gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C; + + if (unk < 4 + || (unk >= 16 && unk < 0x15) + || (unk >= 25 && unk < 41) + || (unk >= 98 && unk < 110) + || (unk >= 122 && unk < 126)) + return TRUE; + else + return FALSE; +} + +static bool8 sub_80592A4(void) +{ + if (player_is_anim_in_certain_ranges() && gPlayerAvatar.running2 != 1) + return TRUE; + else + return FALSE; +} + +static bool8 PlayerIsAnimActive(void) +{ + return FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(&gMapObjects[gPlayerAvatar.mapObjectId]); +} + +static bool8 PlayerCheckIfAnimFinishedOrInactive(void) +{ + return FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[gPlayerAvatar.mapObjectId]); +} + +static void player_set_x22(u8 a) +{ + gMapObjects[gPlayerAvatar.mapObjectId].animId = a; +} + +u8 player_get_x22(void) +{ + return gMapObjects[gPlayerAvatar.mapObjectId].animId; +} + +static void sub_8059348(u8 a) +{ + FieldObjectForceSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], a); +} + +void PlayerSetAnimId(u8 animId, u8 b) +{ + if (!PlayerIsAnimActive()) + { + player_set_x22(b); + FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], animId); + } +} + +void PlayerGoSpeed0(u8 a) +{ + PlayerSetAnimId(GetGoSpeed0AnimId(a), 2); +} + +void sub_80593C4(u8 a) +{ + PlayerSetAnimId(sub_8060744(a), 2); +} + +void npc_use_some_d2s(u8 a) +{ + PlayerSetAnimId(d2s_08064034(a), 2); +} + +void sub_80593F4(u8 a) +{ + PlayerSetAnimId(sub_806079C(a), 2); +} + +void sub_805940C(u8 a) +{ + PlayerSetAnimId(sub_80607F4(a), 2); +} + +void PlayerOnBikeCollide(u8 a) +{ + PlayCollisionSoundIfNotFacingWarp(a); + PlayerSetAnimId(GetStepInPlaceDelay16AnimId(a), 2); +} + +static void PlayerNotOnBikeCollide(u8 a) +{ + PlayCollisionSoundIfNotFacingWarp(a); + PlayerSetAnimId(GetStepInPlaceDelay32AnimId(a), 2); +} + +void PlayerFaceDirection(u8 direction) +{ + PlayerSetAnimId(GetFaceDirectionAnimId(direction), 1); +} + +void PlayerTurnInPlace(u8 direction) +{ + PlayerSetAnimId(GetStepInPlaceDelay8AnimId(direction), 1); +} + +void PlayerJumpLedge(u8 direction) +{ + PlaySE(SE_DANSA); + PlayerSetAnimId(GetJumpLedgeAnimId(direction), 8); +} + +void sub_80594C0(void) +{ + if (gPlayerAvatar.running1 == 2 || gPlayerAvatar.running1 == 0) + { + if (player_should_look_direction_be_enforced_upon_movement()) + sub_8059348(GetFaceDirectionAnimId(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_18)); + } +} + +void sub_8059504(u8 a) +{ + PlayerSetAnimId(sub_80609D8(a), 1); +} + +//normal to wheelie +void PlayerStartWheelie(u8 a) +{ + PlayerSetAnimId(sub_8060A04(a), 1); +} + +void sub_8059534(u8 a) +{ + PlayerSetAnimId(sub_8060A30(a), 1); +} + +void sub_805954C(u8 a) +{ + PlaySE(SE_JITE_PYOKO); + PlayerSetAnimId(sub_8060A5C(a), 1); +} + +void sub_8059570(u8 a) +{ + PlaySE(SE_JITE_PYOKO); + PlayerSetAnimId(sub_8060A88(a), 2); +} + +void sub_8059594(u8 a) +{ + PlaySE(SE_JITE_PYOKO); + PlayerSetAnimId(sub_8060AB4(a), 8); +} + +void sub_80595B8(u8 direction) +{ + PlaySE(SE_JITE_PYOKO); + PlayerSetAnimId(sub_8060878(direction), 1); +} + +void sub_80595DC(u8 direction) +{ + PlaySE(SE_WALL_HIT); + PlayerSetAnimId(sub_8060AE0(direction), 2); +} + +void sub_8059600(u8 a) +{ + PlayerSetAnimId(sub_8060B0C(a), 2); +} + +void sub_8059618(u8 a) +{ + PlayerSetAnimId(sub_8060B38(a), 2); +} + +void sub_8059630(u8 a) +{ + PlayerSetAnimId(sub_8060B64(a), 2); +} + +static void PlayCollisionSoundIfNotFacingWarp(u8 a) +{ + s16 x, y; + u8 unk = gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E; + + if (!gUnknown_0830FC34[a - 1](unk)) + { + if (a == 2) + { + PlayerGetDestCoords(&x, &y); + MoveCoords(2, &x, &y); + if (MetatileBehavior_IsWarpDoor(MapGridGetMetatileBehaviorAt(x, y))) + return; + } + PlaySE(SE_WALL_HIT); + } +} + +void GetXYCoordsOneStepInFrontOfPlayer(s16 *x, s16 *y) +{ + *x = gMapObjects[gPlayerAvatar.mapObjectId].coords2.x; + *y = gMapObjects[gPlayerAvatar.mapObjectId].coords2.y; + MoveCoords(player_get_direction_lower_nybble(), x, y); +} + +void PlayerGetDestCoords(s16 *x, s16 *y) +{ + *x = gMapObjects[gPlayerAvatar.mapObjectId].coords2.x; + *y = gMapObjects[gPlayerAvatar.mapObjectId].coords2.y; +} + +u8 player_get_direction_lower_nybble(void) +{ + return gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_18; +} + +u8 player_get_direction_upper_nybble(void) +{ + return gMapObjects[gPlayerAvatar.mapObjectId].placeholder18; +} + +u8 PlayerGetZCoord(void) +{ + return gMapObjects[gPlayerAvatar.mapObjectId].elevation; +} + +void unref_sub_8059790(s16 a, s16 b) +{ + sub_805C058(&gMapObjects[gPlayerAvatar.mapObjectId], a, b); +} + +u8 TestPlayerAvatarFlags(u8 a) +{ + return gPlayerAvatar.flags & a; +} + +u8 sub_80597D0(void) +{ + return gPlayerAvatar.flags; +} + +u8 GetPlayerAvatarObjectId(void) +{ + return gPlayerAvatar.spriteId; +} + +void sub_80597E8(void) +{ + ForcedMovement_None(); +} + +void sub_80597F4(void) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + npc_clear_strange_bits(playerMapObj); + FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18); + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) + { + sub_80E6084(); + sub_80E6010(0); + } +} + +u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender) +{ + return sRivalAvatarGfxIds[state][gender]; +} + +static u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender) +{ + return sPlayerAvatarGfxIds[state][gender]; +} + +u8 GetPlayerAvatarGraphicsIdByStateId(u8 state) +{ + return GetPlayerAvatarGraphicsIdByStateIdAndGender(state, gPlayerAvatar.gender); +} + +u8 unref_GetRivalAvatarGenderByGraphcsId(u8 gfxId) +{ + switch (gfxId) + { + case MAP_OBJ_GFX_RIVAL_MAY_NORMAL: + case MAP_OBJ_GFX_RIVAL_MAY_MACH_BIKE: + case MAP_OBJ_GFX_RIVAL_MAY_ACRO_BIKE: + case MAP_OBJ_GFX_RIVAL_MAY_SURFING: + case MAP_OBJ_GFX_RIVAL_MAY_FIELD_MOVE: + case MAP_OBJ_GFX_MAY_UNDERWATER: + case MAP_OBJ_GFX_MAY_FISHING: + case MAP_OBJ_GFX_MAY_WATERING: + return FEMALE; + default: + return MALE; + } +} + +u8 GetPlayerAvatarGenderByGraphicsId(u8 gfxId) +{ + switch (gfxId) + { + case MAP_OBJ_GFX_MAY_NORMAL: + case MAP_OBJ_GFX_MAY_MACH_BIKE: + case MAP_OBJ_GFX_MAY_ACRO_BIKE: + case MAP_OBJ_GFX_MAY_SURFING: + case MAP_OBJ_GFX_MAY_FIELD_MOVE: + case MAP_OBJ_GFX_MAY_UNDERWATER: + case MAP_OBJ_GFX_MAY_FISHING: + case MAP_OBJ_GFX_MAY_WATERING: + return FEMALE; + default: + return MALE; + } +} + +bool8 PartyHasMonWithSurf(void) +{ + u8 i; + + if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + { + for (i = 0; i < 6; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == 0) + break; + if (pokemon_has_move(&gPlayerParty[i], 0x39)) + return TRUE; + } + } + return FALSE; +} + +bool8 IsPlayerSurfingNorth(void) +{ + if (player_get_direction_upper_nybble() == DIR_NORTH && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + return TRUE; + else + return FALSE; +} + +bool8 IsPlayerFacingSurfableFishableWater(void) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + s16 x = playerMapObj->coords2.x; + s16 y = playerMapObj->coords2.y; + + MoveCoords(playerMapObj->mapobj_unk_18, &x, &y); + if (npc_block_way(playerMapObj, x, y, playerMapObj->mapobj_unk_18) == 3 && PlayerGetZCoord() == 3 + && MetatileBehavior_IsSurfableFishableWater(MapGridGetMetatileBehaviorAt(x, y))) + return TRUE; + else + return FALSE; +} + +void ClearPlayerAvatarInfo(void) +{ + //TODO: 0x24 should be the size of gPlayerAvatar + memset(&gPlayerAvatar, 0, sizeof(struct PlayerAvatar)); +} + +void SetPlayerAvatarStateMask(u8 a) +{ + gPlayerAvatar.flags &= 0xE0; + gPlayerAvatar.flags |= a; +} + +static u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 a, u8 gender) +{ + u8 i; + + for (i = 0; i < 5; i++) + { + if (gUnknown_0830FC64[gender][i][0] == a) + return gUnknown_0830FC64[gender][i][1]; + } + return 1; +} + +u8 GetPlayerAvatarGraphicsIdByCurrentState(void) +{ + u8 i; + u8 r5 = gPlayerAvatar.flags; + + for (i = 0; i < 5; i++) + { + if (gUnknown_0830FC64[gPlayerAvatar.gender][i][1] & r5) + return gUnknown_0830FC64[gPlayerAvatar.gender][i][0]; + } + return 0; +} + +void SetPlayerAvatarExtraStateTransition(u8 a, u8 b) +{ + u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(a, gPlayerAvatar.gender); + + gPlayerAvatar.bike |= unk | b; + DoPlayerAvatarTransition(); +} + +void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) +{ + struct MapObjectTemplate playerMapObjTemplate; + u8 mapObjectId; + struct MapObject *mapObject; + + playerMapObjTemplate.localId = 0xFF; + playerMapObjTemplate.graphicsId = GetPlayerAvatarGraphicsIdByStateIdAndGender(0, gender); + playerMapObjTemplate.x = x - 7; + playerMapObjTemplate.y = y - 7; + playerMapObjTemplate.elevation = 0; + playerMapObjTemplate.movementType = 11; + playerMapObjTemplate.unkA_0 = 0; + playerMapObjTemplate.unkA_4 = 0; + playerMapObjTemplate.unkC = 0; + playerMapObjTemplate.unkE = 0; + playerMapObjTemplate.script = NULL; + playerMapObjTemplate.flagId = 0; + mapObjectId = SpawnSpecialFieldObject(&playerMapObjTemplate); + mapObject = &gMapObjects[mapObjectId]; + mapObject->mapobj_bit_16 = 1; + mapObject->mapobj_unk_1B = sub_8126B54(); + FieldObjectTurn(mapObject, direction); + ClearPlayerAvatarInfo(); + gPlayerAvatar.running2 = 0; + gPlayerAvatar.running1 = 0; + gPlayerAvatar.mapObjectId = mapObjectId; + gPlayerAvatar.spriteId = mapObject->spriteId; + gPlayerAvatar.gender = gender; + SetPlayerAvatarStateMask(0x21); +} + +void sub_8059B88(u8 a) +{ + gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = a; + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + gSprites[gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A].invisible = a; +} + +void sub_8059BF4(void) +{ + sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByStateId(5)); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0); +} + +void sub_8059C3C(u8 a) +{ + sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByStateId(6)); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FDE8(a)); +} + +void sub_8059C94(u8 a) +{ + sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByStateId(2)); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FD98(a)); + SeekSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 1); +} + +void sub_8059D08(u8 a) +{ + sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByStateId(7)); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], FieldObjectDirectionToImageAnimId(a)); +} + +static void sub_8059D60(struct MapObject *a) +{ + s16 x; + s16 y; + u8 r6; + u8 r8 = a->mapobj_unk_1E; + + for (x = 0, r6 = 1; x < 4; x++, r6++) + { + if (gUnknown_0830FC78[x](r8) && r6 == a->placeholder18) + { + x = a->coords2.x; + y = a->coords2.y; + MoveCoords(r6, &x, &y); + sub_8126BC4(a->mapobj_unk_1B, r6, x, y); + return; + } + } + objid_set_invisible(a->mapobj_unk_1B); +} + +/* Strength */ + +static void sub_8059E2C(u8 taskId); + +static void StartStrengthAnim(u8 a, u8 b) +{ + u8 taskId = CreateTask(sub_8059E2C, 0xFF); + + gTasks[taskId].data[1] = a; + gTasks[taskId].data[2] = b; + sub_8059E2C(taskId); +} + +static void sub_8059E2C(u8 taskId) +{ + while (gUnknown_0830FC88[gTasks[taskId].data[0]](&gTasks[taskId], + &gMapObjects[gPlayerAvatar.mapObjectId], + &gMapObjects[gTasks[taskId].data[1]])) + ; +} + +u8 sub_8059E84(struct Task *task, struct MapObject *b, struct MapObject *c) +{ + ScriptContext2_Enable(); + gPlayerAvatar.unk6 = 1; + task->data[0]++; + return 0; +} + +u8 sub_8059EA4(struct Task *task, struct MapObject *b, struct MapObject *c) +{ + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(b) + && !FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(c)) + { + FieldObjectClearAnimIfSpecialAnimFinished(b); + 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; + FieldEffectStart(10); + PlaySE(SE_W070); + task->data[0]++; + } + return 0; +} + +u8 sub_8059F40(struct Task *task, struct MapObject *b, struct MapObject *c) +{ + if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(b) + && FieldObjectCheckIfSpecialAnimFinishedOrInactive(c)) + { + FieldObjectClearAnimIfSpecialAnimFinished(b); + FieldObjectClearAnimIfSpecialAnimFinished(c); + gPlayerAvatar.unk6 = 0; + ScriptContext2_Disable(); + DestroyTask(FindTaskIdByFunc(sub_8059E2C)); + } + return 0; +} + +/* Some field effect */ + +static void sub_8059FB4(u8 taskId); + +static void sub_8059F94(void) +{ + u8 taskId = CreateTask(sub_8059FB4, 0xFF); + + sub_8059FB4(taskId); +} + +static void sub_8059FB4(u8 taskId) +{ + while (gUnknown_0830FC94[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId])) + ; +} + +u8 sub_805A000(struct Task *task, struct MapObject *mapObject) +{ + gPlayerAvatar.unk6 = 1; + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + PlaySE(SE_DANSA); + FieldObjectSetSpecialAnim(mapObject, sub_806084C(mapObject->mapobj_unk_18)); + task->data[1]++; + if (task->data[1] > 1) + { + gPlayerAvatar.unk6 = 0; + gPlayerAvatar.bike |= 0x20; + DestroyTask(FindTaskIdByFunc(sub_8059FB4)); + } + } + return 0; +} + +/* Some field effect */ + +static void sub_805A08C(u8 taskId); + +static void sub_805A06C(void) +{ + u8 taskId = CreateTask(sub_805A08C, 0xFF); + + sub_805A08C(taskId); +} + +static void sub_805A08C(u8 taskId) +{ + while (gUnknown_0830FC98[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId])) + ; +} + +u8 sub_805A0D8(struct Task *task, struct MapObject *mapObject) +{ + task->data[0]++; + task->data[1] = mapObject->placeholder18; + gPlayerAvatar.unk6 = 1; + ScriptContext2_Enable(); + PlaySE(SE_TK_WARPIN); + return 1; +} + +u8 sub_805A100(struct Task *task, struct MapObject *mapObject) +{ + u8 directions[] = {DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; + + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + u8 direction; + + FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(direction = directions[mapObject->placeholder18 - 1])); + if (direction == (u8)task->data[1]) + task->data[2]++; + task->data[0]++; + if (task->data[2] > 3 && direction == GetOppositeDirection(task->data[1])) + task->data[0]++; + } + return 0; +} + +u8 sub_805A178(struct Task *task, struct MapObject *mapObject) +{ + const u8 arr[] = {16, 16, 17, 18, 19}; + + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + FieldObjectSetSpecialAnim(mapObject, arr[task->data[2]]); + task->data[0] = 1; + } + return 0; +} + +u8 sub_805A1B8(struct Task *task, struct MapObject *mapObject) +{ + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + FieldObjectSetSpecialAnim(mapObject, GetSimpleGoAnimId(GetOppositeDirection(task->data[1]))); + ScriptContext2_Disable(); + gPlayerAvatar.unk6 = 0; + DestroyTask(FindTaskIdByFunc(sub_805A08C)); + } + return 0; +} + +/* Some Field effect */ + +static void taskFF_0805D1D4(u8 taskId); +static void sub_805A2D0(u8 taskId); + +void sub_805A20C(u8 a) +{ + u8 taskId; + + ScriptContext2_Enable(); + sav1_reset_battle_music_maybe(); + sub_8053F84(); + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING; + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT; + gPlayerAvatar.unk6 = 1; + taskId = CreateTask(taskFF_0805D1D4, 0xFF); + gTasks[taskId].data[0] = a; + taskFF_0805D1D4(taskId); +} + +static void taskFF_0805D1D4(u8 taskId) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerMapObj)) + { + if (!FieldObjectClearAnimIfSpecialAnimFinished(playerMapObj)) + return; + } + sub_8127ED0(playerMapObj->mapobj_unk_1A, 2); + FieldObjectSetSpecialAnim(playerMapObj, sub_80608D0(gTasks[taskId].data[0])); + gTasks[taskId].func = sub_805A2D0; +} + +static void sub_805A2D0(u8 taskId) +{ + struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if (FieldObjectClearAnimIfSpecialAnimFinished(playerMapObj)) + { + sub_805B980(playerMapObj, GetPlayerAvatarGraphicsIdByStateId(0)); + FieldObjectSetSpecialAnim(playerMapObj, GetFaceDirectionAnimId(playerMapObj->mapobj_unk_18)); + gPlayerAvatar.unk6 = 0; + ScriptContext2_Disable(); + DestroySprite(&gSprites[playerMapObj->mapobj_unk_1A]); + DestroyTask(taskId); + } +} + +/* Fishing */ + +static u8 (*const gUnknown_0830FCB4[])(struct Task *) = +{ + Fishing1, + Fishing2, + Fishing3, + Fishing4, + Fishing5, + Fishing6, + Fishing7, + Fishing8, + Fishing9, + Fishing10, + Fishing11, + Fishing12, + Fishing13, + Fishing14, + Fishing15, + Fishing16, +}; + +static void Task_Fishing(u8 taskId); +static void sub_805A954(void); + +void StartFishing(u8 a) +{ + u8 taskId = CreateTask(Task_Fishing, 0xFF); + + gTasks[taskId].data[15] = a; + Task_Fishing(taskId); +} + +static void Task_Fishing(u8 taskId) +{ + while (gUnknown_0830FCB4[gTasks[taskId].data[0]](&gTasks[taskId])) + ; +} + +u8 Fishing1(struct Task *task) +{ + ScriptContext2_Enable(); + gPlayerAvatar.unk6 = 1; + task->data[0]++; + return 0; +} + +u8 Fishing2(struct Task *task) +{ + struct MapObject *playerMapObj; + 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; + playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + FieldObjectClearAnimIfSpecialAnimActive(playerMapObj); + playerMapObj->mapobj_bit_11 = 1; + sub_8059C3C(playerMapObj->mapobj_unk_18); + task->data[0]++; + return 0; +} + +u8 Fishing3(struct Task *task) +{ + sub_805A954(); + task->data[1]++; + if (task->data[1] > 0x3B) + task->data[0]++; + return 0; +} + +u8 Fishing4(struct Task *task) +{ + u32 randVal; + + MenuDisplayMessageBox(); + task->data[0]++; + task->data[1] = 0; + task->data[2] = 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; + return 1; +} + +u8 Fishing5(struct Task *task) +{ + const u8 dot[] = _("·"); + + sub_805A954(); + task->data[1]++; + if (gMain.newKeys & A_BUTTON) + { + task->data[0] = 11; + if (task->data[12] != 0) + task->data[0] = 12; + return 1; + } + else + { + if (task->data[1] > 0x13) + { + task->data[1] = 0; + if (task->data[2] >= task->data[3]) + { + task->data[0]++; + if (task->data[12] != 0) + task->data[0]++; + task->data[12]++; + } + else + { + MenuPrint(dot, task->data[2] + 4, 15); + task->data[2]++; + } + } + return 0; + } +} + +u8 Fishing6(struct Task *task) +{ + sub_805A954(); + task->data[0]++; + if (!GetFishingWildMonListHeader() || (Random() & 1)) + task->data[0] = 11; + else + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FE08(player_get_direction_lower_nybble())); + return 1; +} + +u8 Fishing7(struct Task *task) +{ + sub_805A954(); + MenuPrint(gOtherText_OhABite, 4, 17); + task->data[0]++; + task->data[1] = 0; + return 0; +} + +u8 Fishing8(struct Task *task) +{ + const s16 arr[3] = {36, 33, 30}; + + sub_805A954(); + task->data[1]++; + if (task->data[1] >= arr[task->data[15]]) + task->data[0] = 12; + else if (gMain.newKeys & A_BUTTON) + task->data[0]++; + return 0; +} + +u8 Fishing9(struct Task *task) +{ + const s16 arr[][2] = + { + {0, 0}, + {40, 10}, + {70, 30} + }; + + sub_805A954(); + task->data[0]++; + if (task->data[12] < task->data[13]) + { + task->data[0] = 3; + } + else if (task->data[12] < 2) + { + s16 randVal = Random() % 100; + + if (arr[task->data[15]][task->data[12]] > randVal) + task->data[0] = 3; + } + return 0; +} + +u8 Fishing10(struct Task *task) +{ + sub_805A954(); + sub_8072044(gOtherText_PokeOnHook); + MenuDisplayMessageBox(); + task->data[0]++; + task->data[1] = 0; + return 0; +} + +u8 Fishing11(struct Task *task) +{ + if (task->data[1] == 0) + { + sub_805A954(); + if (task->data[1] == 0) + { + 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; + } + } + } + gPlayerAvatar.unk6 = 0; + ScriptContext2_Disable(); + FishingWildEncounter(task->data[15]); + sub_80BE97C(1); + DestroyTask(FindTaskIdByFunc(Task_Fishing)); + return 0; +} + +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; + return 1; +} + +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]++; + return 1; +} + +u8 Fishing14(struct Task *task) +{ + sub_805A954(); + MenuDisplayMessageBox(); + task->data[0]++; + return 0; +} + +u8 Fishing15(struct Task *task) +{ + sub_805A954(); + if (gSprites[gPlayerAvatar.spriteId].animEnded) + { + 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; + task->data[0]++; + } + return 0; +} + +u8 Fishing16(struct Task *task) +{ + if (MenuUpdateWindowText()) + { + gPlayerAvatar.unk6 = 0; + ScriptContext2_Disable(); + UnfreezeMapObjects(); + MenuZeroFillScreen(); + sub_80BE97C(0); + DestroyTask(FindTaskIdByFunc(Task_Fishing)); + } + return 0; +} + +static void sub_805A954(void) +{ + struct Sprite *playerSprite = &gSprites[gPlayerAvatar.spriteId]; + u8 animCmdIndex; + u8 animType; + + AnimateSprite(playerSprite); + playerSprite->pos2.x = 0; + playerSprite->pos2.y = 0; + animCmdIndex = playerSprite->animCmdIndex; + if (playerSprite->anims[playerSprite->animNum][animCmdIndex].type == -1) + { + animCmdIndex--; + } + else + { + playerSprite->animDelayCounter++; + if (playerSprite->anims[playerSprite->animNum][animCmdIndex].type == -1) + animCmdIndex--; + } + animType = playerSprite->anims[playerSprite->animNum][animCmdIndex].type; + if (animType == 1 || animType == 2 || animType == 3) + { + playerSprite->pos2.x = 8; + if (player_get_direction_lower_nybble() == 3) + playerSprite->pos2.x = -8; + } + if (animType == 5) + playerSprite->pos2.y = -8; + if (animType == 10 || animType == 11) + playerSprite->pos2.y = 8; + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) + sub_8127F28(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A, 1, playerSprite->pos2.y); +} diff --git a/src/field/field_poison.c b/src/field/field_poison.c new file mode 100644 index 000000000..8c9e029e1 --- /dev/null +++ b/src/field/field_poison.c @@ -0,0 +1,143 @@ +#include "global.h" +#include "field_poison.h" +#include "field_message_box.h" +#include "fldeff_80C5CD4.h" +#include "pokemon.h" +#include "pokemon_summary_screen.h" +#include "script.h" +#include "string_util.h" +#include "task.h" +#include "text.h" + +extern u16 gScriptResult; +extern u8 fieldPoisonText_PokemonFainted[]; + +bool32 CheckMonIsValid(struct Pokemon *pkmn) +{ + // UB: Too few arguments for function 'GetMonData' + u16 species2 = GetMonData(pkmn, MON_DATA_SPECIES2); + + if (species2 == 0 || species2 == 0x19C) + return FALSE; + else + return TRUE; +} + +bool32 AllMonsFainted(void) +{ + struct Pokemon *pkmn = &gPlayerParty[0]; + int i; + + for (i = 0; i < 6; i++, pkmn++) + { + // UB: Too few arguments for function 'GetMonData' + if (CheckMonIsValid(pkmn) && GetMonData(pkmn, MON_DATA_HP) != 0) + return FALSE; + } + return TRUE; +} + +void MonFaintFromPoisonOnField(u8 partyMember) +{ + struct Pokemon *pkmn = &gPlayerParty[partyMember]; + u32 val = 0; + + AdjustFriendship(pkmn, 7); + SetMonData(pkmn, MON_DATA_STATUS, (u8*)&val); + GetMonData(pkmn, MON_DATA_NICKNAME, gStringVar1); + StringGetEnd10(gStringVar1); +} + +bool32 CheckMonFaintedFromPoison(u8 partyMember) +{ + struct Pokemon *pkmn = &gPlayerParty[partyMember]; + + // UB: Too few arguments for function 'GetMonData' + if (CheckMonIsValid(pkmn) && GetMonData(pkmn, MON_DATA_HP) == 0 + && pokemon_ailments_get_primary(GetMonData(pkmn, MON_DATA_STATUS)) == 1) + return TRUE; + else + return FALSE; +} + +//Task data +enum +{ + TD_STATE, + TD_PARTY_MEMBER, +}; + +void Task_WhiteOut(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + switch (taskData[TD_STATE]) + { + case 0: //Check if Pokemon have fainted due to poison + while (taskData[TD_PARTY_MEMBER] < 6) + { + if (CheckMonFaintedFromPoison(taskData[TD_PARTY_MEMBER])) + { + MonFaintFromPoisonOnField(taskData[TD_PARTY_MEMBER]); + ShowFieldMessage(fieldPoisonText_PokemonFainted); + taskData[TD_STATE]++; + return; + } + taskData[TD_PARTY_MEMBER]++; + } + taskData[TD_STATE] = 2; + break; + case 1: //Wait for message box to disappear + if (IsFieldMessageBoxHidden()) + taskData[TD_STATE]--; //Check next party member + break; + case 2: //Done checking Pokemon + if (AllMonsFainted()) + gScriptResult = 1; + else + gScriptResult = 0; + EnableBothScriptContexts(); + DestroyTask(taskId); + break; + } +} + +void ExecuteWhiteOut(void) +{ + CreateTask(Task_WhiteOut, 0x50); + ScriptContext1_Stop(); +} + +s32 overworld_poison(void) +{ + struct Pokemon *pkmn = &gPlayerParty[0]; + u32 numPoisoned = 0; + u32 numFainting = 0; + int i; + + for (i = 0; i < 6; i++) + { + u32 hp; + + // UB: Too few arguments for function 'GetMonData' + if (GetMonData(pkmn, MON_DATA_SANITY_BIT2) != 0 + && pokemon_ailments_get_primary(GetMonData(pkmn, MON_DATA_STATUS)) == 1) + { + hp = GetMonData(pkmn, MON_DATA_HP); + if (hp != 0) + hp--; + if (hp == 0) + numFainting++; //Pokemon will now faint due to poison + SetMonData(pkmn, MON_DATA_HP, (u8 *)&hp); + numPoisoned++; + } + pkmn++; + } + if (numFainting != 0 || numPoisoned != 0) + DoFieldPoisonEffect(); + if (numFainting != 0) + return 2; + if (numPoisoned != 0) + return 1; + return 0; +} diff --git a/src/field/field_region_map.c b/src/field/field_region_map.c new file mode 100644 index 000000000..7cb22e5df --- /dev/null +++ b/src/field/field_region_map.c @@ -0,0 +1,125 @@ +#include "global.h" +#include "field_region_map.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "region_map.h" +#include "sprite.h" +#include "strings2.h" +#include "text.h" + +struct RegionMapStruct +{ + u8 str[0x16]; + u8 unk16; + u8 filler[0x869]; +}; + +struct UnkStruct +{ + MainCallback callback; + u8 filler[4]; + // This should be RegionMap, but I can't do that because it overlaps unk888. + struct RegionMapStruct unk8; + u16 unk888; +}; + +extern u8 ewram[]; +#define unk_2000000 (*(struct UnkStruct *)(ewram)) + +void FieldInitRegionMap(MainCallback callback) +{ + SetVBlankCallback(NULL); + unk_2000000.unk888 = 0; + unk_2000000.callback = callback; + SetMainCallback2(CB2_FieldInitRegionMap); +} + +void CB2_FieldInitRegionMap(void) +{ + REG_DISPCNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + ResetSpriteData(); + FreeAllSpritePalettes(); + // TODO: remove this cast + InitRegionMap((void *)&unk_2000000.unk8, 0); + CreateRegionMapPlayerIcon(0, 0); + CreateRegionMapCursor(1, 1); + SetUpWindowConfig(&gWindowConfig_81E709C); + InitMenuWindow(&gWindowConfig_81E709C); + MenuZeroFillScreen(); + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; + MenuDrawTextWindow(21, 0, 29, 3); + sub_8072BD8(gOtherText_Hoenn, 0x16, 1, 0x38); + MenuDrawTextWindow(16, 16, 29, 19); + sub_813F0C8(); + SetMainCallback2(CB2_FieldRegionMap); + SetVBlankCallback(VBlankCB_FieldRegionMap); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); +} + +void VBlankCB_FieldRegionMap(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void CB2_FieldRegionMap(void) +{ + sub_813EFDC(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_813EFDC(void) +{ + switch (unk_2000000.unk888) + { + case 0: + REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + unk_2000000.unk888++; + break; + case 1: + if (!gPaletteFade.active) + unk_2000000.unk888++; + break; + case 2: + switch (sub_80FAB60()) + { + case 3: + sub_813F0C8(); + break; + case 4: + case 5: + unk_2000000.unk888++; + } + break; + case 3: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + unk_2000000.unk888++; + break; + case 4: + if (!gPaletteFade.active) + { + FreeRegionMapIconResources(); + SetMainCallback2(unk_2000000.callback); + } + break; + } +} + +void sub_813F0C8(void) +{ + MenuFillWindowRectWithBlankTile(17, 17, 28, 18); + if (unk_2000000.unk8.unk16) + MenuPrint(unk_2000000.unk8.str, 17, 17); +} diff --git a/src/field/field_screen_effect.c b/src/field/field_screen_effect.c new file mode 100644 index 000000000..79913e1c5 --- /dev/null +++ b/src/field/field_screen_effect.c @@ -0,0 +1,340 @@ +#include "global.h" +#include "event_data.h" +#include "field_camera.h" +#include "menu.h" +#include "palette.h" +#include "rom4.h" +#include "script.h" +#include "task.h" +#include "text.h" +#include "unknown_task.h" + +struct UnknownStruct1 +{ + u8 filler0[0x14]; + u8 unk14; + u8 filler15[0xB]; +}; +extern struct UnknownStruct1 gUnknown_03004DC0; + +extern u16 gUnknown_03004DE0[][0x3C0]; + +const static u16 gUnknown_0839ACDC[] = { 0xC8, 0x48, 0x38, 0x28, 0x18, 0x0 }; + +const s32 gUnknown_0839ACE8 = 4; + +const static u32 gUnknown_0839ACEC[3] = +{ + REG_ADDR_WIN0H, + ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, + 1 +}; + +static void sub_808136C(u16 *dest, u32 a2, s32 a3, s32 a4) +{ + if (a2 <= 0xA0) + { + if (a3 < 0) + a3 = 0; + if (a3 > 255) + a3 = 255; + if (a4 < 0) + a4 = 0; + if (a4 > 255) + a4 = 255; + dest[a2] = (a3 << 8) | a4; + } +} + +static void sub_8081398(u16 *dest, s32 a2, s32 a3, s32 a4) +{ + s32 v1 = a4; + s32 v2 = a4; + s32 v3 = 0; + while (v1 >= v3) + { + sub_808136C(dest, a3 - v3, a2 - v1, a2 + v1); + sub_808136C(dest, a3 + v3, a2 - v1, a2 + v1); + sub_808136C(dest, a3 - v1, a2 - v3, a2 + v3); + sub_808136C(dest, a3 + v1, a2 - v3, a2 + v3); + v2 -= (v3 * 2) - 1; + v3++; + if (v2 < 0) + { + v2 += 2 * (v1 - 1); + v1--; + } + } +} + +static void sub_8081424(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + sub_8081398(&gUnknown_03004DE0[gUnknown_03004DC0.unk14][0], data[1], data[2], data[3]); + data[0] = 1; + break; + case 1: + sub_8081398(&gUnknown_03004DE0[gUnknown_03004DC0.unk14][0], data[1], data[2], data[3]); + data[0] = 0; + data[3] += data[5]; + if (data[3] > data[4]) + { + if (data[6] == 1) + { + remove_some_task(); + data[0] = 2; + } + else + { + DestroyTask(taskId); + } + } + break; + case 2: + dp12_8087EA4(); + DestroyTask(taskId); + break; + } +} + +static void sub_80814E8(u8 taskId) +{ + if (!FuncIsActiveTask(sub_8081424)) + { + EnableBothScriptContexts(); + DestroyTask(taskId); + } +} + +static void sub_8081510(void) +{ + if (!FuncIsActiveTask(sub_80814E8)) + CreateTask(sub_80814E8, 80); +} + +static u8 sub_8081534(s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, u8 a6) +{ + u8 taskId = CreateTask(sub_8081424, 80); + s16 *data = gTasks[taskId].data; + + data[3] = a3; + data[4] = a4; + data[1] = a1; + data[2] = a2; + data[6] = a5; + + if (a3 < a4) + data[5] = a6; + else + data[5] = -a6; + + return taskId; +} + +void sub_8081594(u8 a1) +{ + u8 index = sav1_get_flash_used_on_map(); + u8 value = 0; + if (!a1) + value = 1; + sub_8081534(120, 80, gUnknown_0839ACDC[index], gUnknown_0839ACDC[a1], value, 1); + sub_8081510(); + ScriptContext2_Enable(); +} + +void sub_80815E0(u8 a1) +{ + if (a1) + { + sub_8081398(&gUnknown_03004DE0[0][0], 120, 80, gUnknown_0839ACDC[a1]); + CpuFastSet(&gUnknown_03004DE0[0], &gUnknown_03004DE0[1], 480); + } +} + +static void sub_808161C(u8 a1) +{ + int i; + u16 color[1]; + + if (!a1) + color[0] = 0x1F; + else + color[0] = 0x7C00; + + for (i = 0; i < 16; i++) + { + LoadPalette(color, 0xF0 + i, 2); + } +} + +static bool8 sub_8081658(u16 a1) +{ + u8 lo = REG_BLDALPHA & 0xFF; + u8 hi = REG_BLDALPHA >> 8; + + if (a1) + { + if (lo) + { + lo--; + } + } + else + { + if (hi < 0x10) + { + hi++; + } + } + + REG_BLDALPHA = (hi << 8) | lo; + + if (lo == 0 && hi == 0x10) + { + return TRUE; + } + + return FALSE; +} + +static void sub_80816A8(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + data[6] = REG_DISPCNT; + data[7] = REG_BLDCNT; + data[8] = REG_BLDALPHA; + data[9] = REG_WININ; + data[10] = REG_WINOUT; + REG_DISPCNT &= 0xBFFF; + REG_BLDCNT |= gUnknown_081E29E8[0]; + REG_BLDALPHA = 1804; + REG_WININ = 63; + 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]); + data[0] = 1; + break; + case 1: + MenuFillWindowRectWithBlankTile(0, 0, 29, 19); + sub_808161C(data[1]); + sub_8081534(data[2], data[3], 1, 160, 1, 2); + data[0] = 2; + break; + case 2: + if (!FuncIsActiveTask(sub_8081424)) + { + EnableBothScriptContexts(); + data[0] = 3; + } + break; + case 3: + InstallCameraPanAheadCallback(); + SetCameraPanningCallback(NULL); + data[5] = 0; + data[4] = 4; + data[0] = 4; + break; + case 4: + data[4]--; + if (!data[4]) + { + s32 panning; + data[4] = 4; + data[5] ^= 1; + if (data[5]) + panning = 4; + else + panning = -4; + SetCameraPanning(0, panning); + } + break; + case 6: + InstallCameraPanAheadCallback(); + data[4] = 8; + data[0] = 7; + break; + case 7: + data[4]--; + if (!data[4]) + { + data[4] = 8; + data[5] ^= 1; + if (sub_8081658(data[5]) == TRUE) + data[0] = 5; + } + break; + case 5: + MenuZeroFillWindowRect(0, 0, 29, 19); + LoadFontDefaultPalette(&gWindowConfig_81E6CE4); + REG_WIN0H = 255; + REG_DISPCNT = data[6]; + REG_BLDCNT = data[7]; + REG_BLDALPHA = data[8]; + REG_WININ = data[9]; + REG_WINOUT = data[10]; + EnableBothScriptContexts(); + DestroyTask(taskId); + break; + } +} + +void sub_80818A4(void) +{ + u8 taskId = CreateTask(sub_80816A8, 80); + s16 *data = gTasks[taskId].data; + + if (gScriptResult == 0) + { + data[1] = 0; + data[2] = 104; + } + else if (gScriptResult == 1) + { + data[1] = 1; + data[2] = 104; + } + else if (gScriptResult == 2) + { + data[1] = 0; + data[2] = 120; + } + else + { + data[1] = 1; + data[2] = 120; + } + + data[3] = 80; +} + +void sub_80818FC(void) +{ + u8 taskId = FindTaskIdByFunc(sub_80816A8); + gTasks[taskId].data[0] = 6; +} + +static void task50_0807F0C8(u8); + +void sub_8081924(void) +{ + sub_8054044(); + CreateTask(task50_0807F0C8, 80); +} + +static void task50_0807F0C8(u8 taskId) +{ + if (sub_8054034() == TRUE) + { + DestroyTask(taskId); + EnableBothScriptContexts(); + } +} diff --git a/src/field/field_special_scene.c b/src/field/field_special_scene.c new file mode 100644 index 000000000..82a7a13e3 --- /dev/null +++ b/src/field/field_special_scene.c @@ -0,0 +1,349 @@ +#include "global.h" +#include "field_special_scene.h" +#include "event_data.h" +#include "field_camera.h" +#include "field_fadetransition.h" +#include "field_map_obj.h" +#include "field_specials.h" +#include "fieldmap.h" +#include "main.h" +#include "palette.h" +#include "rom4.h" +#include "script.h" +#include "script_movement.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" + +#define SECONDS(value) ((signed) (60.0 * value + 0.5)) + +// porthole states +enum +{ + INIT_PORTHOLE, + IDLE_CHECK, + EXECUTE_MOVEMENT, + EXIT_PORTHOLE, +}; + +extern s8 gTruckCamera_HorizontalTable[]; + +extern u8 gUnknown_083D295F[]; +extern u8 gUnknown_083D2961[]; + +s32 GetTruckCameraBobbingY(int a1) +{ + if (!(a1 % 120)) + return -1; + else if ((a1 % 10) <= 4) + return 1; + + return 0; +} + +s32 GetTruckBoxMovement(int a1) // for the box movement? +{ + if (!((a1 + 120) % 180)) + return -1; + + return 0; +} + +void Task_Truck1(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s16 cameraYpan; + s16 box1 = 0; + s16 box2 = 0; + s16 box3 = 0; + u8 mapNum, mapGroup; + register s16 zero asm("r4"); + + box1 = GetTruckBoxMovement(data[0] + 30) * 4; // top box. + sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3, box1 + 3); + box2 = GetTruckBoxMovement(data[0]) * 2; // bottom left box. + sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 0, box2 - 3); + box3 = GetTruckBoxMovement(data[0]) * 4; // bottom right box. + mapNum = gSaveBlock1.location.mapNum; + mapGroup = gSaveBlock1.location.mapGroup; + zero = 0; + sub_805BD90(3, mapNum, mapGroup, -3, box3); + + if (++data[0] == SECONDS(500)) // this will never run + data[0] = zero; // reset the timer if it gets stuck. + + cameraYpan = GetTruckCameraBobbingY(data[0]); + SetCameraPanning(0, cameraYpan); +} + +void Task_Truck2(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s16 cameraYpan; + s16 cameraXpan; + s16 box1; + s16 box2; + s16 box3; + + data[0]++; + data[2]++; + + if (data[0] > 5) + { + data[0] = 0; + data[1]++; + } + if ((u16)data[1] == 19) + { + DestroyTask(taskId); + } + else + { + if (gTruckCamera_HorizontalTable[data[1]] == 2) + gTasks[taskId].func = Task_Truck3; + + cameraXpan = gTruckCamera_HorizontalTable[data[1]]; + cameraYpan = GetTruckCameraBobbingY(data[2]); + SetCameraPanning(cameraXpan, cameraYpan); + box1 = GetTruckBoxMovement(data[2] + 30) * 4; + sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3 - cameraXpan, box1 + 3); + box2 = GetTruckBoxMovement(data[2]) * 2; + sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -cameraXpan, box2 - 3); + box3 = GetTruckBoxMovement(data[2]) * 4; + sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3 - cameraXpan, box3); + } +} + +void Task_Truck3(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s16 cameraXpan; + s16 cameraYpan; + + data[0]++; + + if (data[0] > 5) + { + data[0] = 0; + data[1]++; + } + + if ((u16)data[1] == 19) + { + DestroyTask(taskId); + } + else + { + cameraXpan = gTruckCamera_HorizontalTable[data[1]]; + cameraYpan = 0; + SetCameraPanning(cameraXpan, 0); + sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3 - cameraXpan, cameraYpan + 3); + sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -cameraXpan, cameraYpan - 3); + sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3 - cameraXpan, cameraYpan); + } +} + +void Task_HandleTruckSequence(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + /* + Each case has a timer which is handled with data[1], incrementing + until it reaches the if function's condition, which sets the next task up. + */ + case 0: + data[1]++; + if (data[1] == SECONDS(1.5)) + { + SetCameraPanningCallback(0); + data[1] = 0; // reset the timer. + data[2] = CreateTask(Task_Truck1, 0xA); + data[0] = 1; // run the next case. + PlaySE(SE_TRACK_MOVE); + } + break; + case 1: + data[1]++; + if (data[1] == SECONDS(2.5)) + { + pal_fill_black(); + data[1] = 0; + data[0] = 2; + } + break; + case 2: + data[1]++; + if (!gPaletteFade.active && data[1] > SECONDS(5)) + { + data[1] = 0; + DestroyTask(data[2]); + data[3] = CreateTask(Task_Truck2, 0xA); + data[0] = 3; + PlaySE(SE_TRACK_STOP); + } + break; + case 3: + if (!gTasks[data[3]].isActive) // is Truck2 no longer active (is Truck3 active?) + { + InstallCameraPanAheadCallback(); + data[1] = 0; + data[0] = 4; + } + break; + case 4: + data[1]++; + if (data[1] == 90) + { + PlaySE(SE_TRACK_HAIK); + data[1] = 0; + data[0] = 5; + } + break; + case 5: + data[1]++; + if (data[1] == 120) + { + MapGridSetMetatileIdAt(11, 8, 520); + MapGridSetMetatileIdAt(11, 9, 528); + MapGridSetMetatileIdAt(11, 10, 536); + DrawWholeMapView(); + PlaySE(SE_TRACK_DOOR); + DestroyTask(taskId); + ScriptContext2_Disable(); + } + break; + } +} + +void ExecuteTruckSequence(void) +{ + MapGridSetMetatileIdAt(11, 8, 525); + MapGridSetMetatileIdAt(11, 9, 533); + MapGridSetMetatileIdAt(11, 10, 541); + DrawWholeMapView(); + ScriptContext2_Enable(); + CpuFastFill(0, gPlttBufferFaded, 0x400); + CreateTask(Task_HandleTruckSequence, 0xA); +} + +void EndTruckSequence(u8 taskId) +{ + if (!FuncIsActiveTask(Task_HandleTruckSequence)) + { + sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3, 3); + sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 0, -3); + sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3, 0); + } +} + +bool8 sub_80C7754(void) +{ + s8 mapGroup, mapNum; + s16 x, y; + + if (GetSSTidalLocation(&mapGroup, &mapNum, &x, &y)) + { + return FALSE; + } + else + { + warp1_set(mapGroup, mapNum, -1, x, y); + return TRUE; + } +} + +void Task_HandlePorthole(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 *var = GetVarPointer(VAR_PORTHOLE); + struct WarpData *location = &gSaveBlock1.location; + + switch (data[0]) + { + case INIT_PORTHOLE: // finish fading before making porthole finish. + if (!gPaletteFade.active) + { + data[1] = 0; + data[0] = EXECUTE_MOVEMENT; // execute movement before checking if should be exited. strange? + } + break; + case IDLE_CHECK: // idle and move. + if (gMain.newKeys & A_BUTTON) + data[1] = 1; + if (!sub_80A212C(0xFF, location->mapNum, location->mapGroup)) + return; + if (CountSSTidalStep(1) == TRUE) + { + if (*var == 2) + *var = 9; + else + *var = 10; + data[0] = 3; + return; + } + data[0] = 2; + case EXECUTE_MOVEMENT: // execute movement. + if (data[1]) + { + data[0] = EXIT_PORTHOLE; // exit porthole. + return; + } + // run this once. + if (*var == 2) // which direction? + { + exec_movement(0xFF, location->mapNum, location->mapGroup, gUnknown_083D295F); + data[0] = IDLE_CHECK; // run case 1. + } + else + { + exec_movement(0xFF, location->mapNum, location->mapGroup, gUnknown_083D2961); + data[0] = IDLE_CHECK; // run case 1. + } + break; + case EXIT_PORTHOLE: // exit porthole. + FlagReset(0x4001); + FlagReset(0x4000); + copy_saved_warp2_bank_and_enter_x_to_warp1(0); + sp13E_warp_to_last_warp(); + DestroyTask(taskId); + break; + } +} + +void sub_80C78A0(void) +{ + u8 spriteId = AddPseudoFieldObject(0x8C, SpriteCallbackDummy, 112, 80, 0); + + gSprites[spriteId].coordOffsetEnabled = FALSE; + + if (VarGet(0x40B4) == 2) + { + StartSpriteAnim(&gSprites[spriteId], FieldObjectDirectionToImageAnimId(4)); + } + else + { + StartSpriteAnim(&gSprites[spriteId], FieldObjectDirectionToImageAnimId(3)); + } +} + +void sub_80C791C(void) +{ + sub_80C78A0(); + gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = TRUE; + pal_fill_black(); + CreateTask(Task_HandlePorthole, 80); + ScriptContext2_Enable(); +} + +void sub_80C7958(void) +{ + FlagSet(SYS_CRUISE_MODE); + FlagSet(0x4001); + FlagSet(0x4000); + saved_warp2_set(0, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1); + sub_80C7754(); + sub_8080F9C(); +} diff --git a/src/field/field_specials.c b/src/field/field_specials.c new file mode 100644 index 000000000..454bd8d96 --- /dev/null +++ b/src/field/field_specials.c @@ -0,0 +1,2383 @@ +#include "global.h" +#include "field_specials.h" +#include "diploma.h" +#include "fieldmap.h" +#include "event_data.h" +#include "battle_tower.h" +#include "field_map_obj.h" +#include "region_map.h" +#include "field_region_map.h" +#include "field_message_box.h" +#include "field_camera.h" +#include "field_player_avatar.h" +#include "main.h" +#include "map_constants.h" +#include "rom4.h" +#include "script.h" +#include "songs.h" +#include "string_util.h" +#include "strings.h" +#include "pokeblock.h" +#include "species.h" +#include "abilities.h" +#include "moves.h" +#include "text.h" +#include "wallclock.h" +#include "tv.h" +#include "rtc.h" +#include "link.h" +#include "songs.h" +#include "sound.h" +#include "menu.h" +#include "starter_choose.h" +#include "menu_helpers.h" +#include "battle_tower.h" +#include "field_weather.h" +#include "pokemon_summary_screen.h" +#include "rng.h" + +#if ENGLISH +#define CHAR_DECIMAL_SEPARATOR CHAR_PERIOD +#elif GERMAN +#define CHAR_DECIMAL_SEPARATOR CHAR_COMMA +#endif + +extern struct WarpData gUnknown_020297F0; +extern u8 gBattleOutcome; +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u16 gScriptResult; + +EWRAM_DATA u8 gUnknown_02039250 = 0; +EWRAM_DATA u8 gUnknown_02039251 = 0; +EWRAM_DATA u32 gUnknown_02039254 = 0; +EWRAM_DATA u8 gUnknown_02039258 = 0; +EWRAM_DATA u8 gUnknown_02039259 = 0; +EWRAM_DATA u8 gUnknown_0203925A = 0; +EWRAM_DATA u8 gUnknown_0203925B = 0; +EWRAM_DATA u8 gUnknown_0203925C = 0; + +static void RecordCyclingRoadResults(u32, u8); + +static struct ElevatorMenu gUnknown_03000760[20]; + +void sub_810D6A4(void) { + SetMainCallback2(sub_8145D88); + ScriptContext2_Enable(); +} + +void sub_810D6B8(void) { + gMain.savedCallback = c2_exit_to_overworld_2_switch; + SetMainCallback2(CB2_ViewWallClock); + ScriptContext2_Enable(); +} + +void ResetCyclingRoadChallengeData(void) { + gUnknown_02039250 = 0; + gUnknown_02039251 = 0; + gUnknown_02039254 = 0; +} + +void BeginCyclingRoadChallenge(void) { + gUnknown_02039250 = 1; + gUnknown_02039251 = 0; + gUnknown_02039254 = gMain.vblankCounter1; +} + +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) { + u8 result; + + if (arg1 <= 99) + { + ConvertIntToDecimalStringN(gStringVar1, arg1, STR_CONV_MODE_LEFT_ALIGN, 2); + StringAppend(gStringVar1, gOtherText_Times); + } + else + { + StringCopy(gStringVar1, gOtherText_99Times); + } + + if (arg0 < 3600) + { + ConvertIntToDecimalStringN(gStringVar2, arg0 / 60, STR_CONV_MODE_RIGHT_ALIGN, 2); + gStringVar2[2] = CHAR_DECIMAL_SEPARATOR; + ConvertIntToDecimalStringN(&gStringVar2[3], ((arg0 % 60) * 100) / 60, STR_CONV_MODE_LEADING_ZEROS, 2); + StringAppend(gStringVar2, gOtherText_Seconds); + } + else + { + StringCopy(gStringVar2, gOtherText_1Minute); + } + + result = 0; + if (arg1 == 0) + { + result = 5; + } + else if (arg1 < 4) + { + result = 4; + } + else if (arg1 < 10) + { + result = 3; + } + else if (arg1 < 20) + { + result = 2; + } + else if (arg1 < 100) + { + result = 1; + } + + if (arg0 / 60 <= 10) + { + result += 5; + } + else if (arg0 / 60 <= 15) + { + result += 4; + } + else if (arg0 / 60 <= 20) + { + result += 3; + } + else if (arg0 / 60 <= 40) + { + result += 2; + } + else if (arg0 / 60 < 60) + { + result += 1; + } + + + gScriptResult = result; +} + +void FinishCyclingRoadChallenge(void) { + const u32 time = gMain.vblankCounter1 - gUnknown_02039254; + + DetermineCyclingRoadResults(time, gUnknown_02039251); + RecordCyclingRoadResults(time, gUnknown_02039251); +} + +static void RecordCyclingRoadResults(u32 arg0, u8 arg1) { + u16 high = VarGet(0x4028); + u16 low = VarGet(0x4029); + u32 record = high + (low << 16); + + if (record > arg0 || record == 0) + { + VarSet(0x4028, arg0); + VarSet(0x4029, arg0 >> 16); + VarSet(0x4027, arg1); + } +} + +u16 GetRecordedCyclingRoadResults(void) { + u16 high = VarGet(0x4028); + u16 low = VarGet(0x4029); + u32 record = high + (low << 16); + + if (record == 0) + { + return FALSE; + } + + DetermineCyclingRoadResults(record, VarGet(0x4027)); + return TRUE; +} + +void UpdateCyclingRoadState(void) { + if (gUnknown_020297F0.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE && gUnknown_020297F0.mapGroup == MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE) + { + return; + } + + if (VarGet(0x40a9) == 2 || VarGet(0x40a9) == 3) + { + VarSet(0x40a9, 0); + sav1_set_battle_music_maybe(SE_STOP); + } +} + +void SetSSTidalFlag(void) +{ + FlagSet(SYS_CRUISE_MODE); + *GetVarPointer(VAR_CRUISE_STEP_COUNT) = 0; +} + +void ResetSSTidalFlag(void) +{ + FlagReset(SYS_CRUISE_MODE); +} + +bool32 CountSSTidalStep(u16 delta) +{ + if (!FlagGet(SYS_CRUISE_MODE) || (*GetVarPointer(VAR_CRUISE_STEP_COUNT) += delta) <= 0xcc) + { + return FALSE; + } + return TRUE; +} + +u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y) +{ + u16 *varCruiseStepCount = GetVarPointer(VAR_CRUISE_STEP_COUNT); + switch (*GetVarPointer(VAR_PORTHOLE)) + { + case 1: + case 8: + return 1; + case 3: + case 9: + return 4; + case 4: + case 5: + return 2; + case 6: + case 10: + return 3; + case 2: + if (*varCruiseStepCount < 60) + { + *mapNum = MAP_ID_ROUTE134; + *x = *varCruiseStepCount + 19; + } + else if (*varCruiseStepCount < 140) + { + *mapNum = MAP_ID_ROUTE133; + *x = *varCruiseStepCount - 60; + } + else + { + *mapNum = MAP_ID_ROUTE132; + *x = *varCruiseStepCount - 140; + } + break; + case 7: + if (*varCruiseStepCount < 66) + { + *mapNum = MAP_ID_ROUTE132; + *x = 65 - *varCruiseStepCount; + } + else if (*varCruiseStepCount < 146) { + *mapNum = MAP_ID_ROUTE133; + *x = 145 - *varCruiseStepCount; + } + else + { + *mapNum = MAP_ID_ROUTE134; + *x = 224 - *varCruiseStepCount; + } + break; + } + *mapGroup = MAP_GROUP_ROUTE132; + *y = 20; + return 0; +} + +u8 GetLinkPartnerNames(void) +{ + u8 i; + u8 j = 0; + u8 myLinkPlayerNumber = sub_8008218(); + u8 nLinkPlayers = sub_800820C(); + for (i=0; i=0; i--) + { + MapGridSetMetatileIdAt(switchCoords->x, switchCoords->y, 0x206); + switchCoords++; + } + for (y=12; y<24; y++) + { + for (x=7; x<16; x++) + { + switch (MapGridGetMetatileIdAt(x, y)) + { + case 0x220: + MapGridSetMetatileIdAt(x, y, 0x230); + break; + case 0x221: + MapGridSetMetatileIdAt(x, y, 0x231); + break; + case 0x228: + MapGridSetMetatileIdAt(x, y, 0x238); + break; + case 0x229: + MapGridSetMetatileIdAt(x, y, 0x239); + break; + case 0x222: + MapGridSetMetatileIdAt(x, y, 0x232); + break; + case 0x223: + MapGridSetMetatileIdAt(x, y, 0x233); + break; + case 0x22a: + MapGridSetMetatileIdAt(x, y, 0x23a); + break; + case 0x22b: + MapGridSetMetatileIdAt(x, y, 0x23b); + break; + case 0x240: + MapGridSetMetatileIdAt(x, y, 0xe42); + break; + case 0x241: + MapGridSetMetatileIdAt(x, y, 0xe43); + break; + case 0x248: + case 0x249: + MapGridSetMetatileIdAt(x, y, 0x21a); + break; + case 0x250: + MapGridSetMetatileIdAt(x, y, 0x251); + break; + } + } + } +} + +static void Task_PetalburgGym(u8); +static void PetalburgGymFunc(u8, u16); +const u8 gUnknown_083F8370[] = {0, 1, 1, 1, 1}; +const u16 gUnknown_083F8376[] = {0x218, 0x219, 0x21a, 0x21b, 0x21c}; + +void PetalburgGymSpecial1(void) +{ + gUnknown_02039258 = 0; + gUnknown_02039259 = 0; + PlaySE(SE_KI_GASYAN); + CreateTask(Task_PetalburgGym, 8); +} + +static void Task_PetalburgGym(u8 taskId) +{ + if (gUnknown_083F8370[gUnknown_02039259] == gUnknown_02039258) + { + PetalburgGymFunc(gSpecialVar_0x8004, gUnknown_083F8376[gUnknown_02039259]); + gUnknown_02039258 = 0; + if ((++gUnknown_02039259) == 5) + { + DestroyTask(taskId); + EnableBothScriptContexts(); + } + } + else + { + gUnknown_02039258++; + } +} + +static void PetalburgGymFunc(u8 a0, u16 a1) +{ + u16 x[4]; + u16 y[4]; + u8 i; + u8 nDoors = 0; + switch (a0) + { + case 1: + nDoors = 2; + x[0] = 1; + x[1] = 7; + y[0] = 0x68; + y[1] = 0x68; + break; + case 2: + nDoors = 2; + x[0] = 1; + x[1] = 7; + y[0] = 0x4e; + y[1] = 0x4e; + break; + case 3: + nDoors = 2; + x[0] = 1; + x[1] = 7; + y[0] = 0x5b; + y[1] = 0x5b; + break; + case 4: + nDoors = 1; + x[0] = 7; + y[0] = 0x27; + break; + case 5: + nDoors = 2; + x[0] = 1; + x[1] = 7; + y[0] = 0x34; + y[1] = 0x34; + break; + case 6: + nDoors = 1; + x[0] = 1; + y[0] = 0x41; + break; + case 7: + nDoors = 1; + x[0] = 7; + y[0] = 0xd; + break; + case 8: + nDoors = 1; + x[0] = 1; + y[0] = 0x1a; + break; + } + for (i=0; i 9999) + { + weekCount = 9999; + } + return weekCount; +} + +u8 GetLeadMonFriendshipScore(void) +{ + struct Pokemon *pokemon = &gPlayerParty[GetLeadMonIndex()]; + if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) == 255) + { + return 6; + } + if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 200) + { + return 5; + } + if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 150) + { + return 4; + } + if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 100) + { + return 3; + } + if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 50) + { + return 2; + } + if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 1) + { + return 1; + } + return 0; +} + +void CB2_FieldShowRegionMap(void) +{ + FieldInitRegionMap(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void FieldShowRegionMap(void) +{ + SetMainCallback2(CB2_FieldShowRegionMap); +} + +static void Task_PCTurnOnEffect(u8); +static void PCTurnOffEffect_0(struct Task *); +static void PCTurnOffEffect_1(s16, s8, s8); +static void PCTurnOffEffect(void); + +void DoPCTurnOnEffect(void) +{ + if (FuncIsActiveTask(Task_PCTurnOnEffect) != TRUE) + { + u8 taskId = CreateTask(Task_PCTurnOnEffect, 8); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = taskId; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = 0; + } +} + +static void Task_PCTurnOnEffect(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + if (task->data[0] == 0) + { + PCTurnOffEffect_0(task); + } +} + +static void PCTurnOffEffect_0(struct Task *task) +{ + u8 playerDirectionLowerNybble; + s8 dx = 0; + s8 dy = 0; + if (task->data[3] == 6) + { + task->data[3] = 0; + playerDirectionLowerNybble = player_get_direction_lower_nybble(); + switch (playerDirectionLowerNybble) + { + case DIR_NORTH: + dx = 0; + dy = -1; + break; + case DIR_WEST: + dx = -1; + dy = -1; + break; + case DIR_EAST: + dx = 1; + dy = -1; + break; + } + PCTurnOffEffect_1(task->data[4], dx, dy); + DrawWholeMapView(); + task->data[4] ^= 1; + if ((++task->data[2]) == 5) + { + DestroyTask(task->data[1]); + } + } + task->data[3]++; +} + +static void PCTurnOffEffect_1(s16 flag, s8 dx, s8 dy) +{ + u16 tileId = 0; + if (flag != 0) + { + if (gSpecialVar_0x8004 == 0) + { + tileId = 0x4; + } + else if (gSpecialVar_0x8004 == 1) + { + tileId = 0x25a; + } + else if (gSpecialVar_0x8004 == 2) + { + tileId = 0x259; + } + } + else + { + if (gSpecialVar_0x8004 == 0) + { + tileId = 0x5; + } + else if (gSpecialVar_0x8004 == 1) + { + tileId = 0x27f; + } + else if (gSpecialVar_0x8004 == 2) + { + tileId = 0x27e; + } + } + MapGridSetMetatileIdAt(gSaveBlock1.pos.x + dx + 7, gSaveBlock1.pos.y + dy + 7, tileId | 0xc00); +} + +void DoPCTurnOffEffect(void) +{ + PCTurnOffEffect(); +} + +static void PCTurnOffEffect(void) +{ + s8 dx = 0; + s8 dy = 0; + u16 tileId = 0; + u8 playerDirectionLowerNybble = player_get_direction_lower_nybble(); + switch (playerDirectionLowerNybble) + { + case DIR_NORTH: + dx = 0; + dy = -1; + break; + case DIR_WEST: + dx = -1; + dy = -1; + break; + case DIR_EAST: + dx = 1; + dy = -1; + break; + } + if (gSpecialVar_0x8004 == 0) + { + tileId = 0x4; + } + else if (gSpecialVar_0x8004 == 1) + { + tileId = 0x25a; + } + else if (gSpecialVar_0x8004 == 2) + { + tileId = 0x259; + } + MapGridSetMetatileIdAt(gSaveBlock1.pos.x + dx + 7, gSaveBlock1.pos.y + dy + 7, tileId | 0xc00); + DrawWholeMapView(); +} + +static void Task_LotteryCornerComputerEffect(u8); +static void LotteryCornerComputerEffect(struct Task *); + +void DoLotteryCornerComputerEffect(void) +{ + if (FuncIsActiveTask(Task_LotteryCornerComputerEffect) != TRUE) + { + u8 taskId = CreateTask(Task_LotteryCornerComputerEffect, 8); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = taskId; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = 0; + } +} + +static void Task_LotteryCornerComputerEffect(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + if (task->data[0] == 0) + { + LotteryCornerComputerEffect(task); + } +} + +static void LotteryCornerComputerEffect(struct Task *task) +{ + if (task->data[3] == 6) + { + task->data[3] = 0; + if (task->data[4] != 0) + { + MapGridSetMetatileIdAt(18, 8, 0xe9d); + MapGridSetMetatileIdAt(18, 9, 0xea5); + } + else + { + MapGridSetMetatileIdAt(18, 8, 0xe58); + MapGridSetMetatileIdAt(18, 9, 0xe60); + } + DrawWholeMapView(); + task->data[4] ^= 1; + if ((++task->data[2]) == 5) + { + DestroyTask(task->data[1]); + } + } + task->data[3]++; +} + +void EndLotteryCornerComputerEffect(void) +{ + MapGridSetMetatileIdAt(18, 8, 0xe9d); + MapGridSetMetatileIdAt(18, 9, 0xea5); + DrawWholeMapView(); +} + +static void sub_810E874(void); +void sub_810E944(void); +void sub_810E984(u8); +bool8 sub_810EAC8(u8, u8); +void sub_810EB90(u8, u8); +void sub_810EBEC(void); +void sub_810EC34(u8); +void sub_810EC9C(u8); +void sub_810ECB0(void); +void sub_810ECD4(void); +void sub_810ECFC(void); +void sub_810ED40(u8); +void sub_810ED60(struct Task *); +void sub_810EEDC(void); + +const u8 *const gUnknown_083F8380[] = { + OtherText_1F, + OtherText_2F, + OtherText_3F, + OtherText_4F, + OtherText_5F, + OtherText_6F, + OtherText_7F, + OtherText_8F, + OtherText_9F, + OtherText_10F, + OtherText_11F, + OtherText_B1F, + OtherText_B2F, + OtherText_B3F, + OtherText_B4F, + OtherText_Rooftop +}; + +void SetDepartmentStoreFloorVar(void) +{ + u8 deptStoreFloor; + switch (gSaveBlock1.warp2.mapNum) + { + case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_1F: + deptStoreFloor = 0; + break; + case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_2F: + deptStoreFloor = 1; + break; + case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_3F: + deptStoreFloor = 2; + break; + case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_4F: + deptStoreFloor = 3; + break; + case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_5F: + deptStoreFloor = 4; + break; + case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP: + deptStoreFloor = 15; + break; + default: + deptStoreFloor = 0; + break; + } + VarSet(VAR_DEPT_STORE_FLOOR, deptStoreFloor); +} + +void ScriptAddElevatorMenuItem(u8 a0, u8 a1, u8 a2, u8 a3) +{ + u8 i; + if (gSpecialVar_0x8004 == 0) + { + for (i=0; i<20; i++) + { + gUnknown_03000760[i].var0 = 16; + } + } + gUnknown_03000760[gSpecialVar_0x8004].var0 = a0; + gUnknown_03000760[gSpecialVar_0x8004].var1 = a1; + gUnknown_03000760[gSpecialVar_0x8004].var2 = a2; + gUnknown_03000760[gSpecialVar_0x8004].var3 = a3; + gSpecialVar_0x8004++; +} + +void ScriptShowElevatorMenu(void) +{ + u8 i = 0; + gUnknown_0203925A = 0; + gUnknown_0203925B = 0; + ScriptAddElevatorMenuItem(16, 0, 0, 0); + while (gUnknown_03000760[i].var0 != 16) + { + gUnknown_0203925A++; + i++; + } + sub_810E874(); +} + +static void sub_810E874(void) +{ + u8 i; + ScriptContext2_Enable(); + if (gUnknown_0203925A > 5) + { + MenuDrawTextWindow(0, 0, 8, 11); + InitMenu(0, 1, 1, 5, 0, 7); + gUnknown_0203925C = 0; + sub_80F944C(); + LoadScrollIndicatorPalette(); + sub_810ECD4(); + } + else + { + MenuDrawTextWindow(0, 0, 8, 2 * gUnknown_0203925A + 1); + InitMenu(0, 1, 1, gUnknown_0203925A, 0, 7); + } + for (i = 0; i < 5 && gUnknown_03000760[i].var0 != 16; i ++) + { + MenuPrint(gUnknown_083F8380[gUnknown_03000760[i].var0], 1, 2 * i + 1); + } + sub_810E944(); + CreateTask(sub_810E984, 8); +} + +void sub_810E944(void) +{ + MenuDrawTextWindow(20, 0, 29, 5); + sub_8072BD8(gOtherText_NowOn, 21, 1, 64); + sub_8072BD8(gUnknown_083F8380[gSpecialVar_0x8005], 21, 3, 64); +} + +void sub_810E984(u8 taskId) +{ + u8 curMenuPos; + if (gMain.newKeys == DPAD_UP && gUnknown_0203925B != 0) + { + gUnknown_0203925B--; + curMenuPos = GetMenuCursorPos(); + MoveMenuCursorNoWrap(-1); + sub_810EAC8(curMenuPos, DPAD_UP); + } + if (gMain.newKeys == DPAD_DOWN && gUnknown_0203925B != gUnknown_0203925A - 1) + { + gUnknown_0203925B++; + curMenuPos = GetMenuCursorPos(); + MoveMenuCursorNoWrap(+1); + sub_810EAC8(curMenuPos, DPAD_DOWN); + } + if (gMain.newKeys & A_BUTTON) + { + saved_warp2_set_2(0, gUnknown_03000760[gUnknown_0203925B].var1, gUnknown_03000760[gUnknown_0203925B].var2, -1, 2, 1); + if (gSpecialVar_0x8005 == gUnknown_0203925B) + { + gScriptResult = 0; + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(0, 0, 29, 12); + sub_810EC9C(taskId); + } + else + { + gScriptResult = 1; + gSpecialVar_0x8005 = gUnknown_0203925B; + sub_810EBEC(); + FieldObjectTurnByLocalIdAndMap(gScriptLastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, DIR_SOUTH); + sub_810EEDC(); + MenuZeroFillScreen(); + DestroyTask(taskId); + } + } + else if (gMain.newKeys & B_BUTTON) + { + gScriptResult = 0; + PlaySE(SE_SELECT); + sub_810EEDC(); + MenuZeroFillWindowRect(0, 0, 29, 12); + sub_810EC9C(taskId); + } +} + +// This function, as written, swaps the roles of r4 and r5 throughout. +#ifdef NONMATCHING +bool8 sub_810EAC8(u8 prevMenuPos, u8 dpadInput) +{ + u8 i; + bool8 flag = 0; + u8 newPos = 0; + if (gUnknown_0203925A < 5) + { + return FALSE; + } + if (dpadInput == DPAD_UP) + { + if (prevMenuPos == 0) + { + newPos = gUnknown_0203925B; + flag = 1; + } + } + else if (dpadInput == DPAD_DOWN) + { + if (prevMenuPos == 4) + { + newPos = gUnknown_0203925B - 4; + flag = 1; + } + } + if (flag) + { + sub_810EB90(newPos, 5); + MenuFillWindowRectWithBlankTile(2, 1, 7, 10); + for (i=0; i<5 && gUnknown_03000760[newPos].var0 != 16; newPos++, i++) + { + MenuPrint(gUnknown_083F8380[gUnknown_03000760[newPos].var0], 1, i * 2 + 1); + } + } + return flag; +} +#else +__attribute__((naked)) +bool8 sub_810EAC8(u8 prevMenuPos, u8 dpadInput) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tlsls r0, 24\n" + "\tlsrs r2, r0, 24\n" + "\tadds r5, r2, 0\n" + "\tlsls r1, 24\n" + "\tlsrs r1, 24\n" + "\tadds r3, r1, 0\n" + "\tmovs r7, 0\n" + "\tmovs r4, 0\n" + "\tldr r0, _0810EAEC @ =gUnknown_0203925A\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x4\n" + "\tbhi _0810EAF0\n" + "\tmovs r0, 0\n" + "\tb _0810EB78\n" + "\t.align 2, 0\n" + "_0810EAEC: .4byte gUnknown_0203925A\n" + "_0810EAF0:\n" + "\tcmp r1, 0x40\n" + "\tbne _0810EB04\n" + "\tcmp r2, 0\n" + "\tbne _0810EB18\n" + "\tldr r0, _0810EB00 @ =gUnknown_0203925B\n" + "\tldrb r4, [r0]\n" + "\tmovs r7, 0x1\n" + "\tb _0810EB1C\n" + "\t.align 2, 0\n" + "_0810EB00: .4byte gUnknown_0203925B\n" + "_0810EB04:\n" + "\tcmp r3, 0x80\n" + "\tbne _0810EB18\n" + "\tcmp r5, 0x4\n" + "\tbne _0810EB18\n" + "\tldr r0, _0810EB84 @ =gUnknown_0203925B\n" + "\tldrb r0, [r0]\n" + "\tsubs r0, 0x4\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tmovs r7, 0x1\n" + "_0810EB18:\n" + "\tcmp r7, 0\n" + "\tbeq _0810EB76\n" + "_0810EB1C:\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x5\n" + "\tbl sub_810EB90\n" + "\tmovs r0, 0x2\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x7\n" + "\tmovs r3, 0xA\n" + "\tbl MenuFillWindowRectWithBlankTile\n" + "\tmovs r5, 0\n" + "\tldr r2, _0810EB88 @ =gUnknown_03000760\n" + "\tlsls r1, r4, 2\n" + "\tadds r0, r1, r2\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x10\n" + "\tbeq _0810EB76\n" + "\tldr r0, _0810EB8C @ =gUnknown_083F8380\n" + "\tmov r8, r0\n" + "\tadds r6, r2, 0\n" + "_0810EB44:\n" + "\tadds r0, r1, r6\n" + "\tldrb r0, [r0]\n" + "\tlsls r0, 2\n" + "\tadd r0, r8\n" + "\tldr r0, [r0]\n" + "\tlsls r2, r5, 1\n" + "\tadds r2, 0x1\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tmovs r1, 0x1\n" + "\tbl MenuPrint\n" + "\tadds r0, r4, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tadds r0, r5, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, 0x4\n" + "\tbhi _0810EB76\n" + "\tlsls r1, r4, 2\n" + "\tadds r0, r1, r6\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x10\n" + "\tbne _0810EB44\n" + "_0810EB76:\n" + "\tadds r0, r7, 0\n" + "_0810EB78:\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1\n" + "\t.align 2, 0\n" + "_0810EB84: .4byte gUnknown_0203925B\n" + "_0810EB88: .4byte gUnknown_03000760\n" + "_0810EB8C: .4byte gUnknown_083F8380"); +} +#endif + +void sub_810EB90(u8 newPos, u8 maxItems) +{ + if (newPos == 0) + { + gUnknown_0203925C ^= 0x02; + DestroyVerticalScrollIndicator(0); + } + else + { + sub_810ECB0(); + } + if (newPos + maxItems < gUnknown_0203925A) + { + sub_810ECD4(); + } + else if (newPos + maxItems == gUnknown_0203925A) + { + gUnknown_0203925C ^= 0x01; + DestroyVerticalScrollIndicator(1); + } +} + +void sub_810EBEC(void) +{ + u8 taskId = CreateTask(sub_810EC34, 9); + gTasks[taskId].data[0] = 1; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = 1; + gTasks[taskId].data[5] = 3; + SetCameraPanningCallback(NULL); + sub_810ECFC(); + PlaySE(SE_ELEBETA); +} + +void sub_810EC34(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + task->data[1] ++; + if (task->data[1] % task->data[5] == 0) + { + task->data[1] = 0; + task->data[2] ++; + if (task->data[3] == 0) + { + task->data[4] = -task->data[4]; + SetCameraPanning(0, task->data[4]); + if (task->data[2] == 23) + { + PlaySE(SE_PINPON); + sub_810EC9C(taskId); + InstallCameraPanAheadCallback(); + } + } + } +} + +void sub_810EC9C(u8 taskId) +{ + DestroyTask(taskId); + EnableBothScriptContexts(); +} + +void sub_810ECB0(void) +{ + if (gUnknown_0203925C >> 1 != 1) + { + gUnknown_0203925C |= 0x2; + CreateVerticalScrollIndicators(0, 0x24, 0x08); + } +} + +void sub_810ECD4(void) +{ + if ((gUnknown_0203925C & 1) == 0) + { + gUnknown_0203925C |= 0x1; + CreateVerticalScrollIndicators(1, 0x24, 0x48); + } +} + +void sub_810ECFC(void) +{ + if (FuncIsActiveTask(sub_810ED40) != TRUE) + { + u8 taskId = CreateTask(sub_810ED40, 8); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = taskId; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = 0; + } +} + +void sub_810ED40(u8 taskId) +{ + sub_810ED60(&gTasks[taskId]); +} + +void sub_810ED60(struct Task *task) +{ + if (task->data[3] == 8) + { + task->data[3] = 0; + if (task->data[4] != 0) + { + MapGridSetMetatileIdAt( 7, 7, 0xe68); + MapGridSetMetatileIdAt( 8, 7, 0xe69); + MapGridSetMetatileIdAt( 9, 7, 0xe69); + MapGridSetMetatileIdAt(10, 7, 0xe6a); + MapGridSetMetatileIdAt( 7, 8, 0xe70); + MapGridSetMetatileIdAt( 8, 8, 0xe71); + MapGridSetMetatileIdAt( 9, 8, 0xe71); + MapGridSetMetatileIdAt(10, 8, 0xe72); + MapGridSetMetatileIdAt( 7, 9, 0xe78); + MapGridSetMetatileIdAt( 8, 9, 0xe79); + MapGridSetMetatileIdAt( 9, 9, 0xe79); + MapGridSetMetatileIdAt(10, 9, 0xe7a); + } + else + { + MapGridSetMetatileIdAt( 7, 7, 0xe6b); + MapGridSetMetatileIdAt( 8, 7, 0xe6c); + MapGridSetMetatileIdAt( 9, 7, 0xe6c); + MapGridSetMetatileIdAt(10, 7, 0xe6d); + MapGridSetMetatileIdAt( 7, 8, 0xe73); + MapGridSetMetatileIdAt( 8, 8, 0xe74); + MapGridSetMetatileIdAt( 9, 8, 0xe74); + MapGridSetMetatileIdAt(10, 8, 0xe75); + MapGridSetMetatileIdAt( 7, 9, 0xe7b); + MapGridSetMetatileIdAt( 8, 9, 0xe7c); + MapGridSetMetatileIdAt( 9, 9, 0xe7c); + MapGridSetMetatileIdAt(10, 9, 0xe7d); + } + DrawWholeMapView(); + task->data[4] ^= 1; + task->data[2]++; + if (task->data[2] == 8) + { + DestroyTask(task->data[1]); + } + } + task->data[3]++; +} + +void sub_810EEDC(void) +{ + if ((gUnknown_0203925C & 1) != 0) + { + DestroyVerticalScrollIndicator(1); + } + if ((gUnknown_0203925C >> 1) == 1) + { + DestroyVerticalScrollIndicator(0); + } + BuyMenuFreeMemory(); +} + +void SetTrickHouseEndRoomFlag(void) +{ + u16 *specVar = &gSpecialVar_0x8004; + u16 flag = 0x259; + *specVar = flag; + FlagSet(flag); +} + +void ResetTrickHouseEndRoomFlag(void) +{ + u16 *specVar = &gSpecialVar_0x8004; + u16 flag = 0x259; + *specVar = flag; + FlagReset(flag); +} + +bool8 CheckLeadMonCool(void) +{ + if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_COOL) < 200) + { + return FALSE; + } + return TRUE; +} + +bool8 CheckLeadMonBeauty(void) +{ + if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_BEAUTY) < 200) + { + return FALSE; + } + return TRUE; +} + +bool8 CheckLeadMonCute(void) +{ + if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_CUTE) < 200) + { + return FALSE; + } + return TRUE; +} + +bool8 CheckLeadMonSmart(void) +{ + if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SMART) < 200) + { + return FALSE; + } + return TRUE; +} + +bool8 CheckLeadMonTough(void) +{ + if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_TOUGH) < 200) + { + return FALSE; + } + return TRUE; +} + +void IsGrassTypeInParty(void) +{ + u8 i; + u16 species; + struct Pokemon *pokemon; + for (i=0; i> 1 != 1) + { + gUnknown_0203925C |= 0x02; + CreateVerticalScrollIndicators(0, 0x2c, 0x08); + } +} + +void sub_810F2B4(void) +{ + if (!(gUnknown_0203925C & 0x01)) + { + gUnknown_0203925C |= 0x01; + CreateVerticalScrollIndicators(1, 0x2c, 0x58); + } +} + +void GlassWorkshopUpdateScrollIndicators(u8 newPos, u8 maxItems) +{ + if (newPos == 0) + { + gUnknown_0203925C ^= 0x02; + DestroyVerticalScrollIndicator(0); + } + else + { + sub_810F290(); + } + if (newPos + maxItems < gUnknown_0203925A) + { + sub_810F2B4(); + } + else if (newPos + maxItems == gUnknown_0203925A) + { + gUnknown_0203925C ^= 0x01; + DestroyVerticalScrollIndicator(1); + } +} + +void SpawnCameraDummy(void) +{ + u8 mapObjectId = SpawnSpecialFieldObjectParametrized(7, 8, 0x7f, gSaveBlock1.pos.x + 7, gSaveBlock1.pos.y + 7, 3); + gMapObjects[mapObjectId].mapobj_bit_13 = 1; + CameraObjectSetFollowedObjectId(gMapObjects[mapObjectId].spriteId); +} + +void RemoveCameraDummy(void) +{ + CameraObjectSetFollowedObjectId(GetPlayerAvatarObjectId()); + RemoveFieldObjectByLocalIdAndMap(0x7f, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); +} + +u8 GetPokeblockNameByMonNature(void) +{ + return sub_810CB68(GetNature(&gPlayerParty[GetLeadMonIndex()]), gStringVar1); +} + +void GetSecretBaseNearbyMapName(void) +{ + GetMapSectionName(gStringVar1, VarGet(VAR_SECRET_BASE_MAP), 0); +} + +u16 sub_810F404(void) +{ + return GetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK); +} + +void sub_810F414(void) +{ + sub_8135FF4(gStringVar1); +} + +const u8 gUnknown_083F83E0[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6}; +const u8 gUnknown_083F83EC[] = {0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5}; +const u8 gUnknown_083F83F8[] = {3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5}; + +u8 sub_810F424(void) +{ + u32 v0 = gSaveBlock1.easyChatPairs[0].unk0_0 + gSaveBlock1.easyChatPairs[0].unk2 + gUnknown_083F83E0[gSpecialVar_0x8004]; + if (GetPriceReduction(2)) + { + return gUnknown_083F83F8[v0 % 12]; + } + return gUnknown_083F83EC[v0 % 12]; +} + +bool8 sub_810F488(void) +{ + u16 *specVar = &gSpecialVar_0x8004; + u16 flag = 0x277; + *specVar = flag; + if (!FlagGet(flag)) + { + return FALSE; + } + return TRUE; +} + +bool8 sub_810F4B0(void) +{ + u16 *specVar = &gSpecialVar_0x8004; + u16 flag = 0x278; + *specVar = flag; + if (!FlagGet(flag)) + { + return FALSE; + } + return TRUE; +} + +bool8 sub_810F4D4(void) +{ + u16 *specVar = &gSpecialVar_0x8004; + u16 flag = 0x279; + *specVar = flag; + if (!FlagGet(flag)) + { + return FALSE; + } + return TRUE; +} + +bool8 sub_810F4FC(void) +{ + u16 *specVar = &gSpecialVar_0x8004; + u16 flag = 0x27a; + *specVar = flag; + if (!FlagGet(flag)) + { + return FALSE; + } + return TRUE; +} + +bool8 LeadMonHasEffortRibbon(void) +{ + return GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_EFFORT_RIBBON, NULL); +} + +void GivLeadMonEffortRibbon(void) +{ + bool8 ribbonSet; + IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); + FlagSet(SYS_RIBBON_GET); + ribbonSet = TRUE; + SetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_EFFORT_RIBBON, &ribbonSet); +} + +bool8 GetLeadMonEVCount(void) +{ + if (GetMonEVCount(&gPlayerParty[GetLeadMonIndex()]) >= 510) + { + return TRUE; + } + return FALSE; +} + +u8 sub_810F5BC(void) +{ + if (!FlagGet(0xc7) && gSaveBlock1.location.mapGroup == MAP_GROUP_RUSTURF_TUNNEL && gSaveBlock1.location.mapNum == MAP_ID_RUSTURF_TUNNEL) + { + if (FlagGet(0x3a3)) + { + VarSet(VAR_0x409a, 4); + return TRUE; + } + else if (FlagGet(0x3a4)) + { + VarSet(VAR_0x409a, 5); + return TRUE; + } + } + return FALSE; +} + +void SetShoalItemFlag(u16 v0) +{ + FlagSet(0x85f); +} + +void PutZigzagoonInPlayerParty(void) +{ + u16 monData; + CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, 0x20, FALSE, 0, FALSE, 0); + monData = TRUE; + SetMonData(&gPlayerParty[0], MON_DATA_ALT_ABILITY, (u8 *)&monData); + monData = MOVE_TACKLE; + SetMonData(&gPlayerParty[0], MON_DATA_MOVE1, (u8 *)&monData); + monData = MOVE_NONE; + SetMonData(&gPlayerParty[0], MON_DATA_MOVE2, (u8 *)&monData); + SetMonData(&gPlayerParty[0], MON_DATA_MOVE3, (u8 *)&monData); + SetMonData(&gPlayerParty[0], MON_DATA_MOVE4, (u8 *)&monData); +} + +bool8 IsStarterInParty(void) +{ + u8 i; + u16 starter = GetStarterPokemon(VarGet(VAR_FIRST_POKE)); + u8 partyCount = CalculatePlayerPartyCount(); + for (i=0; idata[1]++; + if ((task->data[1] % task->data[5]) == 0) + { + task->data[1] = 0; + task->data[2]++; + if (task->data[3] == 0) + { + task->data[0] = -task->data[0]; + task->data[4] = -task->data[4]; + SetCameraPanning(task->data[0], task->data[4]); + if (task->data[2] == 8) + { + sub_810F814(taskId); + InstallCameraPanAheadCallback(); + } + } + } +} + +static void sub_810F814(u8 taskId) +{ + DestroyTask(taskId); + EnableBothScriptContexts(); +} + +bool8 sub_810F828(void) +{ + return FlagGet(0x2b8); +} + +void SetRoute119Weather(void) +{ + if (is_light_level_1_2_3_5_or_6(get_map_light_from_warp0()) != TRUE) + { + SetSav1Weather(0x14); + } +} + +void SetRoute123Weather(void) +{ + if (is_light_level_1_2_3_5_or_6(get_map_light_from_warp0()) != TRUE) + { + SetSav1Weather(0x15); + } +} + +u8 GetLeadMonIndex(void) +{ + u8 i; + u8 partyCount = CalculatePlayerPartyCount(); + for (i=0; i= 7) + { + return 0; + } + else if (gLocalTime.days < 0) + { + return 8; + } + return 7 - (gLocalTime.days - var40c2); +} + +u16 sub_810F950(void) +{ + VarSet(VAR_0x40C2, gLocalTime.days); + return gLocalTime.days; +} + +bool8 sub_810F96C(void) +{ + GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_OT_NAME, gStringVar1); + if (!StringCompareWithoutExtCtrlCodes(gSaveBlock2.playerName, gStringVar1)) + { + return FALSE; + } + return TRUE; +} + +void sub_810F9AC(void) +{ + if (gScriptResult >= 10000) + { + sub_80BF088(0, gScriptResult); + } + else if (gScriptResult >= 1000) + { + gStringVar1[0] = CHAR_0; + ConvertIntToDecimalStringN(gStringVar1 + 1, gScriptResult, 0, sub_80BF0B8(gScriptResult)); + } + else if (gScriptResult >= 100) + { + gStringVar1[0] = CHAR_0; + gStringVar1[1] = CHAR_0; + ConvertIntToDecimalStringN(gStringVar1 + 2, gScriptResult, 0, sub_80BF0B8(gScriptResult)); + } + else if (gScriptResult >= 10) + { + gStringVar1[0] = CHAR_0; + gStringVar1[1] = CHAR_0; + gStringVar1[2] = CHAR_0; + ConvertIntToDecimalStringN(gStringVar1 + 3, gScriptResult, 0, sub_80BF0B8(gScriptResult)); + } + else + { + gStringVar1[0] = CHAR_0; + gStringVar1[1] = CHAR_0; + gStringVar1[2] = CHAR_0; + gStringVar1[3] = CHAR_0; + ConvertIntToDecimalStringN(gStringVar1 + 4, gScriptResult, 0, sub_80BF0B8(gScriptResult)); + } +} + +const u8 gUnknown_083F8404[] = {2, 1, 2, 1}; +const u8 gUnknown_083F8408[] = {8, 9, 10, 11, 12, 13, 14, 15}; +const u8 gUnknown_083F8410[] = {8, 13, 14, 11, 10, 12, 15, 9}; + +bool8 sub_810FF30(void); +void sub_810FCE8(void); +void sub_810FF48(void); +void sub_810FD80(void); +u16 sub_810FCB0(void); +int sub_810FB9C(void); + +void ResetFanClub(void) +{ + gSaveBlock1.vars[0x41] = 0; + gSaveBlock1.vars[0x42] = 0; +} + +void sub_810FA74(void) +{ + if (sub_810FF30()) + { + sub_810FCE8(); + gSaveBlock1.vars[0x42] = gSaveBlock2.playTimeHours; + } +} + +void sub_810FAA0(void) +{ + if (!((gSaveBlock1.vars[0x41] >> 7) & 1)) + { + sub_810FF48(); + sub_810FD80(); + gSaveBlock1.vars[0x42] = gSaveBlock2.playTimeHours; + FlagReset(0x315); + FlagReset(0x316); + FlagReset(0x317); + FlagReset(0x318); + VarSet(VAR_0x4095, 1); + } +} + +u8 sub_810FB10(u8 a0) +{ + if (VarGet(VAR_0x4095) == 2) + { + if ((gSaveBlock1.vars[0x41] & 0x7f) + gUnknown_083F8404[a0] >= 20) + { + if (sub_810FCB0() < 3) + { + sub_810FB9C(); + gSaveBlock1.vars[0x41] &= 0xff80; + } + else + { + gSaveBlock1.vars[0x41] = (gSaveBlock1.vars[0x41] & 0xff80) | 20; + } + } + else + { + gSaveBlock1.vars[0x41] += gUnknown_083F8404[a0]; + } + } + return gSaveBlock1.vars[0x41] & 0x7f; +} + +int sub_810FB9C(void) +{ + u8 i; + int retval = 0; + for (i=0; i<8; i++) + { + if (!((gSaveBlock1.vars[0x41] >> gUnknown_083F8408[i]) & 0x01)) + { + retval = i; + if (Random() & 1) + { + gSaveBlock1.vars[0x41] |= (1 << gUnknown_083F8408[i]); + return retval; + } + } + } + gSaveBlock1.vars[0x41] |= (1 << gUnknown_083F8408[retval]); + return retval; +} + +int sub_810FC18(void) +{ + u8 i; + int retval = 0; + if (sub_810FCB0() == TRUE) + { + return 0; + } + for (i=0; i<8; i++) + { + if ((gSaveBlock1.vars[0x41] >> gUnknown_083F8410[i]) & 1) + { + retval = i; + if (Random() & 1) + { + gSaveBlock1.vars[0x41] ^= (1 << gUnknown_083F8410[i]); + return retval; + } + } + } + if ((gSaveBlock1.vars[0x41] >> gUnknown_083F8410[retval]) & 1) + { + gSaveBlock1.vars[0x41] ^= (1 << gUnknown_083F8410[retval]); + } + return retval; +} + +u16 sub_810FCB0(void) +{ + u8 i; + u8 retval = 0; + for (i=0; i<8; i++) + { + if ((gSaveBlock1.vars[0x41] >> (i + 8)) & 1) + { + retval ++; + } + } + return retval; +} + +void sub_810FCE8(void) +{ + u8 i = 0; + if (gSaveBlock2.playTimeHours < 999) + { + while (1) + { + if (sub_810FCB0() < 5) + { + gSaveBlock1.vars[0x42] = gSaveBlock2.playTimeHours; + break; + } + else if (i == 8) + { + break; + } + else if (gSaveBlock2.playTimeHours - gSaveBlock1.vars[0x42] < 12) + { + return; + } + sub_810FC18(); + gSaveBlock1.vars[0x42] += 12; + i++; + } + } +} + +bool8 sub_810FD60(void) +{ + return (gSaveBlock1.vars[0x41] >> gSpecialVar_0x8004) & 0x01; +} + +void sub_810FD80(void) +{ + gSaveBlock1.vars[0x41] |= 0x2000; + gSaveBlock1.vars[0x41] |= 0x100; + gSaveBlock1.vars[0x41] |= 0x400; +} + +void sub_810FE1C(void *, u8, u8); + +void sub_810FDAC(void) +{ + u8 a = 0; + u8 b = 0; + switch (gSpecialVar_0x8004) + { + case 8: + break; + case 9: + break; + case 10: + a = 0; + b = 3; + break; + case 11: + a = 0; + b = 1; + break; + case 12: + a = 1; + b = 0; + break; + case 13: + a = 0; + b = 4; + break; + case 14: + a = 1; + b = 5; + break; + case 15: + break; + } + sub_810FE1C(gSaveBlock1.linkBattleRecords, a, b); +} + +void sub_810FE1C(void *linkRecords, u8 a, u8 b) +{ + u8 *curRecord = (linkRecords + 16 * a); + if (*curRecord == EOS) + { + switch (b) + { + case 0: + StringCopy(gStringVar1, gOtherText_Wallace); + break; + case 1: + StringCopy(gStringVar1, gOtherText_Steven); + break; + case 2: + StringCopy(gStringVar1, gOtherText_Brawly); + break; + case 3: + StringCopy(gStringVar1, gOtherText_Winona); + break; + case 4: + StringCopy(gStringVar1, gOtherText_Phoebe); + break; + case 5: + StringCopy(gStringVar1, gOtherText_Glacia); + break; + default: + StringCopy(gStringVar1, gOtherText_Wallace); + break; + } + } + else + { + StringCopyN(gStringVar1, curRecord, 7); + gStringVar1[7] = EOS; + if (gStringVar1[0] == 0xfc && gStringVar1[1] == 0x15) + { + ConvertInternationalString(gStringVar1, 1); + } + } +} + +void sub_810FEFC(void) +{ + if (VarGet(VAR_0x4095) == 2) + { + sub_810FA74(); + if (gBattleOutcome == 1) + { + sub_810FB9C(); + } + else + { + sub_810FC18(); + } + } +} + +bool8 sub_810FF30(void) +{ + return (gSaveBlock1.vars[0x41] >> 7) & 0x01; +} + +void sub_810FF48(void) +{ + gSaveBlock1.vars[0x41] |= 0x80; +} + +u8 sub_810FF60(void) +{ + return sub_810FB10(gSpecialVar_0x8004); +} diff --git a/src/field/field_tasks.c b/src/field/field_tasks.c new file mode 100644 index 000000000..caf2ce6b9 --- /dev/null +++ b/src/field/field_tasks.c @@ -0,0 +1,859 @@ +// +// Created by scott on 6/22/2017. +// + +#include "global.h" +#include "task.h" +#include "main.h" +#include "vars.h" +#include "bike.h" +#include "item.h" +#include "items.h" +#include "event_data.h" +#include "rom4.h" +#include "clock.h" +#include "script.h" +#include "field_special_scene.h" +#include "field_effect_helpers.h" +#include "secret_base.h" +#include "metatile_behavior.h" +#include "fieldmap.h" +#include "field_player_avatar.h" +#include "field_camera.h" +#include "songs.h" +#include "sound.h" +#include "field_tasks.h" + +void DummyPerStepCallback(u8); +void PerStepCallback_8069F64(u8); +void PerStepCallback_8069AA0(u8); +void PerStepCallback_8069864(u8); +void PerStepCallback_8069DD4(u8); +void PerStepCallback_806A07C(u8); + +void (*const gUnknown_08376364[])(u8) = { + DummyPerStepCallback, + PerStepCallback_8069F64, + PerStepCallback_8069AA0, + PerStepCallback_8069864, + PerStepCallback_8069DD4, + EndTruckSequence, + sub_80BCF1C, + PerStepCallback_806A07C +}; + +void Task_RunPerStepCallback(u8 taskId) +{ + int idx = gTasks[taskId].data[0]; + gUnknown_08376364[idx](taskId); +} + +static void RunTimeBasedEvents(s16 *taskData) +{ + switch (*taskData) + { + case 0: + if (gMain.vblankCounter1 & 0x1000) + { + DoTimeBasedEvents(); + (*taskData)++; + } + break; + case 1: + if (!(gMain.vblankCounter1 & 0x1000)) + { + (*taskData)--; + } + break; + } +} + +void Task_RunTimeBasedEvents(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + if (!ScriptContext2_IsEnabled()) + { + RunTimeBasedEvents(taskData); + sub_80540D0(taskData + 1, taskData + 2); + } +} + +void Task_MuddySlope(u8); + +void SetUpFieldTasks(void) +{ + if (!FuncIsActiveTask(Task_RunPerStepCallback)) + { + u8 taskId = CreateTask(Task_RunPerStepCallback, 0x50); + gTasks[taskId].data[0] = 0; + } + if (!FuncIsActiveTask(Task_MuddySlope)) + { + CreateTask(Task_MuddySlope, 0x50); + } + if (!FuncIsActiveTask(Task_RunTimeBasedEvents)) + { + CreateTask(Task_RunTimeBasedEvents, 0x50); + } +} + +void ActivatePerStepCallback(u8 callback) +{ + s16 *dataPointer; + s16 *dataStart; + s16 zero; + u8 taskId = FindTaskIdByFunc(Task_RunPerStepCallback); + if (taskId != 0xff) + { + dataStart = gTasks[taskId].data; + zero = 0; + dataPointer = &dataStart[15]; + do + { + *dataPointer-- = zero; + } while ((int)dataPointer >= (int)dataStart); + if (callback >= ARRAY_COUNT(gUnknown_08376364)) + { + *dataStart = 0; + } + else + { + *dataStart = callback; + } + } +} + +void ResetFieldTasksArgs(void) +{ + u8 taskId; + s16 *taskData; + taskId = FindTaskIdByFunc(Task_RunPerStepCallback); + if (taskId != 0xff) + { + taskData = gTasks[taskId].data; + } + taskId = FindTaskIdByFunc(Task_RunTimeBasedEvents); + if (taskId != 0xff) + { + taskData = gTasks[taskId].data; + taskData[1] = 0; + taskData[2] = 0; + } +} + +const struct MetatileOffset gUnknown_08376384[][2] = { + {{ 0, 0,0x259}, { 0, 1,0x261}}, + {{ 0, -1,0x259}, { 0, 0,0x261}}, + {{ 0, 0,0x252}, { 1, 0,0x253}}, + {{ -1, 0,0x252}, { 0, 0,0x253}} +}; + +const struct MetatileOffset gUnknown_083763A4[][2] = { + {{ 0, 0,0x25A}, { 0, 1,0x262}}, + {{ 0, -1,0x25A}, { 0, 0,0x262}}, + {{ 0, 0,0x254}, { 1, 0,0x255}}, + {{ -1, 0,0x254}, { 0, 0,0x255}} +}; + +const struct MetatileOffset gUnknown_083763C4[][2] = { + {{ 0, 0,0x258}, { 0, 1,0x260}}, + {{ 0, -1,0x258}, { 0, 0,0x260}}, + {{ 0, 0,0x250}, { 1, 0,0x251}}, + {{ -1, 0,0x250}, { 0, 0,0x251}} +}; + +void DummyPerStepCallback(u8 taskId) {} + +const struct MetatileOffset *sub_80695E0(const struct MetatileOffset a0[][2], s8 a1) +{ + if (sub_80576A0(a1)) + { + return a0[0]; + } + else if (sub_80576B4(a1)) + { + return a0[1]; + } + else if (sub_80576C8(a1)) + { + return a0[2]; + } + else if (sub_80576DC(a1)) + { + return a0[3]; + } + else + { + return NULL; + } +} + +#ifdef NONMATCHING +void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 flag) +{ + const struct MetatileOffset *offsetData = sub_80695E0(offsets, MapGridGetMetatileBehaviorAt(x, y)); + const struct MetatileOffset *offsetData2 = offsetData; + if (offsetData != NULL) + { + MapGridSetMetatileIdAt(x + offsetData[0].x, y + offsetData[0].y, offsetData[0].tileId); + if (flag) + { + CurrentMapDrawMetatileAt(x + offsetData[0].x, y + offsetData[0].y); + } + MapGridSetMetatileIdAt(x + offsetData2[1].x, y + offsetData2[1].y, offsetData2[1].tileId); + if (flag) + { + CurrentMapDrawMetatileAt(x + offsetData2[1].x, y + offsetData2[1].y); + } + } +} +#else +__attribute__((naked)) +void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 flag) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tadds r5, r0, 0\n" + "\tmov r8, r3\n" + "\tlsls r1, 16\n" + "\tasrs r6, r1, 16\n" + "\tlsls r2, 16\n" + "\tasrs r7, r2, 16\n" + "\tadds r0, r6, 0\n" + "\tadds r1, r7, 0\n" + "\tbl MapGridGetMetatileBehaviorAt\n" + "\tadds r1, r0, 0\n" + "\tlsls r1, 16\n" + "\tlsrs r1, 16\n" + "\tadds r0, r5, 0\n" + "\tbl sub_80695E0\n" + "\tadds r4, r0, 0\n" + "\tadds r5, r4, 0\n" + "\tcmp r4, 0\n" + "\tbeq _080696B6\n" + "\tmovs r0, 0\n" + "\tldrsb r0, [r4, r0]\n" + "\tadds r0, r6, r0\n" + "\tmovs r1, 0x1\n" + "\tldrsb r1, [r4, r1]\n" + "\tadds r1, r7, r1\n" + "\tldrh r2, [r4, 0x2]\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tmov r0, r8\n" + "\tcmp r0, 0\n" + "\tbeq _0806968E\n" + "\tmovs r0, 0\n" + "\tldrsb r0, [r4, r0]\n" + "\tadds r0, r6, r0\n" + "\tmovs r1, 0x1\n" + "\tldrsb r1, [r4, r1]\n" + "\tadds r1, r7, r1\n" + "\tbl CurrentMapDrawMetatileAt\n" + "_0806968E:\n" + "\tmovs r0, 0x4\n" + "\tldrsb r0, [r5, r0]\n" + "\tadds r0, r6, r0\n" + "\tmovs r1, 0x5\n" + "\tldrsb r1, [r5, r1]\n" + "\tadds r1, r7, r1\n" + "\tldrh r2, [r5, 0x6]\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tmov r0, r8\n" + "\tcmp r0, 0\n" + "\tbeq _080696B6\n" + "\tmovs r0, 0x4\n" + "\tldrsb r0, [r5, r0]\n" + "\tadds r0, r6, r0\n" + "\tmovs r1, 0x5\n" + "\tldrsb r1, [r5, r1]\n" + "\tadds r1, r7, r1\n" + "\tbl CurrentMapDrawMetatileAt\n" + "_080696B6:\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0"); +} +#endif + +void sub_80696C0(s16 x, s16 y, bool32 flag) +{ + sub_8069638(gUnknown_08376384, x, y, flag); +} + +void sub_80696E4(s16 x, s16 y, bool32 flag) +{ + sub_8069638(gUnknown_083763A4, x, y, flag); +} + +void sub_8069708(s16 x, s16 y, bool32 flag) +{ + sub_8069638(gUnknown_083763C4, x, y, flag); +} + +bool32 sub_806972C(s16 x1, s16 y1, s16 x2, s16 y2) +{ + s8 metatileBehavior = MapGridGetMetatileBehaviorAt(x2, y2); + if (sub_80576A0(metatileBehavior)) + { + if (y1 > y2) + { + return FALSE; + } + } + else if (sub_80576B4(metatileBehavior)) + { + if (y1 < y2) + { + return FALSE; + } + } + else if (sub_80576C8(metatileBehavior)) + { + if (x1 > x2) + { + return FALSE; + } + } + else if (sub_80576DC(metatileBehavior)) + { + if (x1 < x2) + { + return FALSE; + } + } + return TRUE; +} + +bool32 sub_80697C8(s16 x1, s16 y1, s16 x2, s16 y2) +{ + s8 metatileBehavior = MapGridGetMetatileBehaviorAt(x1, y1); + if (sub_80576A0(metatileBehavior)) + { + if (y1 < y2) + { + return FALSE; + } + } + else if (sub_80576B4(metatileBehavior)) + { + if (y1 > y2) + { + return FALSE; + } + } + else if (sub_80576C8(metatileBehavior)) + { + if (x1 < x2) + { + return FALSE; + } + } + else if (sub_80576DC(metatileBehavior)) + { + if (x1 > x2) + { + return FALSE; + } + } + return TRUE; +} + +void PerStepCallback_8069864(u8 taskId) +{ + s16 *data; + s16 x, y; + data = gTasks[taskId].data; + PlayerGetDestCoords(&x, &y); + switch (data[1]) + { + case 0: + data[2] = x; + data[3] = y; + sub_80696E4(x, y, TRUE); + data[1] = 1; + break; + case 1: + if (x != data[2] || y != data[3]) + { + if (sub_806972C(x, y, data[2], data[3])) + { + sub_80696C0(data[2], data[3], TRUE); + sub_8069708(data[2], data[3], FALSE); + data[4] = data[2]; + data[5] = data[3]; + data[1] = 2; + data[6] = 8; + } + else + { + data[4] = -1; + data[5] = -1; + } + if (sub_80697C8(x, y, data[2], data[3])) + { + sub_80696C0(x, y, TRUE); + data[1] = 2; + data[6] = 8; + } + data[2] = x; + data[3] = y; + if (MetatileBehavior_IsPacifidlogLog(MapGridGetMetatileBehaviorAt(x, y))) + { + PlaySE(SE_MIZU); + } + } + break; + case 2: + if ((--data[6]) == 0) + { + sub_80696E4(x, y, TRUE); + if (data[4] != -1 && data[5] != -1) + { + sub_8069708(data[4], data[5], TRUE); + } + data[1] = 1; + } + break; + } +} + +void sub_80699D8(s16 x, s16 y) +{ + u8 z = PlayerGetZCoord(); + if (!(z & 0x01)) + { + switch (MapGridGetMetatileIdAt(x, y)) + { + case 0x24e: + MapGridSetMetatileIdAt(x, y, 0x24f); + break; + case 0x256: + MapGridSetMetatileIdAt(x, y, 0x257); + break; + } + } +} + +void sub_8069A3C(s16 x, s16 y) +{ + u8 z = PlayerGetZCoord(); + if (!(z & 0x01)) + { + switch (MapGridGetMetatileIdAt(x, y)) + { + case 0x24f: + MapGridSetMetatileIdAt(x, y, 0x24e); + break; + case 0x257: + MapGridSetMetatileIdAt(x, y, 0x256); + break; + } + } +} + +void PerStepCallback_8069AA0(u8 taskId) +{ + bool8 isFortreeBridgeCur; + bool8 isFortreeBridgePrev; + u8 z, flag; + s16 x, y, x2, y2; + s16 *data = gTasks[taskId].data; + PlayerGetDestCoords(&x, &y); + switch (data[1]) + { + default: + break; + case 0: + data[2] = x; + data[3] = y; + if (MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y))) + { + sub_80699D8(x, y); + CurrentMapDrawMetatileAt(x, y); + } + data[1] = 1; + break; + case 1: + x2 = data[2]; + y2 = data[3]; + if (x == x2 && y == y2) + { + break; + } + isFortreeBridgeCur = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y)); + isFortreeBridgePrev = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x2, y2)); + z = PlayerGetZCoord(); + flag = 0; + if ((u8)(z & 1) == 0) + { + flag = 1; + } + if (flag && (isFortreeBridgeCur == 1 || isFortreeBridgePrev == 1)) + { + PlaySE(SE_HASHI); + } + if (isFortreeBridgePrev) + { + sub_8069A3C(x2, y2); + CurrentMapDrawMetatileAt(x2, y2); + sub_80699D8(x, y); + CurrentMapDrawMetatileAt(x, y); + } + data[4] = x2; + data[5] = y2; + data[2] = x; + data[3] = y; + if (!isFortreeBridgePrev) + { + break; + } + data[6] = 16; + data[1] = 2; + // fallthrough + case 2: + data[6]--; + x2 = data[4]; + y2 = data[5]; + switch (data[6] % 7) + { + case 0: + CurrentMapDrawMetatileAt(x2, y2); + case 1: + case 2: + case 3: + break; + case 4: + sub_80699D8(x2, y2); + CurrentMapDrawMetatileAt(x2, y2); + sub_8069A3C(x2, y2); + case 5: + case 6: + case 7: + break; + } + if (data[6] == 0) + { + data[1] = 1; + } + break; + } +} + +const u16 gUnknown_083763E4[] = { + 0, + 0, + 0, + 0, + 0, + 0, + VAR_0x4001, + VAR_0x4002, + VAR_0x4003, + VAR_0x4004, + 0, + 0, + VAR_0x4005, + VAR_0x4006, + VAR_0x4007, + 0, + 0, + VAR_0x4008, + VAR_0x4009, + VAR_0x400A, + 0, + 0, + 0, + 0, + 0, + 0 +}; + +bool32 sub_8069CB8(s16 x, s16 y) +{ + if ((u16)(x - 3) < 11 && (u16)(y - 6) < 14 && gUnknown_083763E4[y]) + { + return TRUE; + } + return FALSE; +} + +void sub_8069CFC(s16 x, s16 y) +{ + if (sub_8069CB8(x, y)) + { + *GetVarPointer(gUnknown_083763E4[y]) |= (1 << (x - 3)); + } +} + +bool32 sub_8069D34(s16 x, s16 y) +{ + u32 var; + if (!sub_8069CB8(x, y)) + { + return FALSE; + } + var = VarGet(gUnknown_083763E4[y]) << 16; + if (((1 << 16) << (x - 3)) & var) + { + return TRUE; + } + return FALSE; +} + +void sub_8069D78(void) +{ + s32 x, y; + s32 width = gMapHeader.mapData->width; + s32 height = gMapHeader.mapData->height; + for (x=0; x> 8; + } + v9 = v4; + v10 = 0x1f00 - v4; + if ((0x1f00 - v4) < 0) + { + v10 += 0xf; + } + v11 = v10 >> 4; + if (v2 <= 0xb) + { + for (; v6 <= 0x12; v6++) + { + v4 += v11; + dunno = v4 - v9; + if (dunno > 0) + { + v4 -= (dunno + ((u16)dunno >> 15)) >> 1; + } + v1[v6][v2] = v4 >> 8; + if (v1[v6][v2] > 0x1f) + { + v1[v6][v2] = 0x1f; + } + } + } + else + { + for (; v6 <= 0x12; v6++) + { + v4 += v11; + v1[v6][v2] = v4 >> 8; + if (v1[v6][v2] > 0x1f) + { + v1[v6][v2] = 0x1f; + } + } + } + } + } +} + +void sub_807CC24(void) +{ + if (gWeather.unknown_6C0 == gWeather.unknown_6C1) + { + gWeather.unknown_6C6 = 3; + } + else + { + if (++gWeather.unknown_6C3 >= gWeather.unknown_6C2) + { + gWeather.unknown_6C3 = 0; + if (gWeather.unknown_6C0 < gWeather.unknown_6C1) + { + gWeather.unknown_6C0++; + } + else + { + gWeather.unknown_6C0--; + } + sub_807CEBC(0, 0x20, gWeather.unknown_6C0); + } + } +} + +void sub_807CCAC(void) +{ + if (++gWeather.unknown_6CB > 1) + { + gWeather.unknown_6CA = 0; + } + switch (gWeather.unknown_6D0) + { + case 3: + case 4: + case 5: + case 11: + case 13: + if (sub_807CDC4() == 0) + { + gWeather.unknown_6C0 = 3; + gWeather.unknown_6C6 = 3; + } + break; + case 12: + if (sub_807CE24() == 0) + { + gWeather.unknown_6C0 = -6; + gWeather.unknown_6C6 = 3; + } + break; + case 6: + if (sub_807CE7C() == 0) + { + gWeather.unknown_6C0 = 0; + gWeather.unknown_6C6 = 3; + } + break; + case 7: + case 8: + case 9: + case 10: + default: + if (!gPaletteFade.active) + { + gWeather.unknown_6C0 = gWeather.unknown_6C1; + gWeather.unknown_6C6 = 3; + } + break; + } +} + +u8 sub_807CDC4(void) +{ + if (gWeather.unknown_6C7 == 0x10) + { + return 0; + } + if (++gWeather.unknown_6C7 >= 0x10) + { + sub_807CEBC(0, 0x20, 3); + gWeather.unknown_6C7 = 0x10; + return 0; + } + sub_807D1BC(0, 0x20, 3, 0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4); + return 1; +} + +u8 sub_807CE24(void) +{ + if (gWeather.unknown_6C7 == 0x10) + { + return 0; + } + if (++gWeather.unknown_6C7 >= 0x10) + { + sub_807CEBC(0, 0x20, -6); + gWeather.unknown_6C7 = 0x10; + return 0; + } + sub_807D304(-6, 0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4); + return 1; +} + +u8 sub_807CE7C(void) +{ + if (gWeather.unknown_6C7 == 0x10) + { + return 0; + } + ++gWeather.unknown_6C7; + sub_807D424(0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4); + return 1; +} + +void nullsub_39(void) +{ +} diff --git a/src/field/fieldmap.c b/src/field/fieldmap.c new file mode 100644 index 000000000..0e0ec246c --- /dev/null +++ b/src/field/fieldmap.c @@ -0,0 +1,955 @@ +#include "global.h" +#include "fieldmap.h" +#include "palette.h" +#include "rom4.h" +#include "script.h" +#include "secret_base.h" +#include "tv.h" + +struct ConnectionFlags +{ + u8 south:1; + u8 north:1; + u8 west:1; + u8 east:1; +}; + +struct Coords32 +{ + s32 x; + s32 y; +}; + +EWRAM_DATA static u16 gUnknown_02029828[0x2800] = {0}; +EWRAM_DATA struct MapHeader gMapHeader = {0}; +EWRAM_DATA struct Camera gUnknown_0202E844 = {0}; +EWRAM_DATA static struct ConnectionFlags gUnknown_0202E850 = {0}; + +struct BackupMapData gUnknown_03004870; + +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); +} + +void not_trainer_hill_battle_pyramid(void) +{ + mapheader_copy_mapdata_with_padding(&gMapHeader); + sub_80BB970(gMapHeader.events); + mapheader_run_script_with_tag_x1(); +} + +void sub_8055FC0(void) +{ + mapheader_copy_mapdata_with_padding(&gMapHeader); + sub_80BBCCC(0); + sub_80BB970(gMapHeader.events); + sub_8056670(); + mapheader_run_script_with_tag_x1(); + UpdateTVScreensOnMap(gUnknown_03004870.width, gUnknown_03004870.height); +} + +void mapheader_copy_mapdata_with_padding(struct MapHeader *mapHeader) +{ + struct MapData *mapData; + int width; + int height; + mapData = mapHeader->mapData; + CpuFastFill16(0x03ff, gUnknown_02029828, sizeof(gUnknown_02029828)); + gUnknown_03004870.map = gUnknown_02029828; + width = mapData->width + 15; + gUnknown_03004870.width = width; + height = mapData->height + 14; + gUnknown_03004870.height = height; + if (width * height <= 0x2800) + { + map_copy_with_padding(mapData->map, mapData->width, mapData->height); + sub_80560AC(mapHeader); + } +} + +void map_copy_with_padding(u16 *map, u16 width, u16 height) +{ + u16 *dest; + int y; + dest = gUnknown_03004870.map; + dest += gUnknown_03004870.width * 7 + 7; + for (y = 0; y < height; y++) + { + CpuCopy16(map, dest, width * 2); + dest += width + 0xf; + map += width; + } +} + +void sub_80560AC(struct MapHeader *mapHeader) +{ + int i; + struct MapConnection *connection; + struct MapHeader *cMap; + u32 offset; + int count; + count = mapHeader->connections->count; + connection = mapHeader->connections->connections; + gUnknown_0202E850 = sDummyConnectionFlags; + for (i = 0; i < count; i++, connection++) + { + cMap = mapconnection_get_mapheader(connection); + offset = connection->offset; + switch (connection->direction) + { + case CONNECTION_SOUTH: + fillSouthConnection(mapHeader, cMap, offset); + gUnknown_0202E850.south = 1; + break; + case CONNECTION_NORTH: + fillNorthConnection(mapHeader, cMap, offset); + gUnknown_0202E850.north = 1; + break; + case CONNECTION_WEST: + fillWestConnection(mapHeader, cMap, offset); + gUnknown_0202E850.west = 1; + break; + case CONNECTION_EAST: + fillEastConnection(mapHeader, cMap, offset); + gUnknown_0202E850.east = 1; + break; + } + } +} + +void sub_8056134(int x, int y, struct MapHeader *mapHeader, int x2, int y2, int width, int height) +{ + int i; + u16 *src; + u16 *dest; + int mapWidth; + + mapWidth = mapHeader->mapData->width; + src = &mapHeader->mapData->map[mapWidth * y2 + x2]; + dest = &gUnknown_03004870.map[gUnknown_03004870.width * y + x]; + + for (i = 0; i < height; i++) + { + CpuCopy16(src, dest, width * 2); + dest += gUnknown_03004870.width; + src += mapWidth; + } +} + +void fillSouthConnection(struct MapHeader *mapHeader, struct MapHeader *connectedMapHeader, s32 offset) +{ + int x, y; + int x2; + int width; + int cWidth; + + if (connectedMapHeader) + { + cWidth = connectedMapHeader->mapData->width; + x = offset + 7; + y = mapHeader->mapData->height + 7; + if (x < 0) + { + x2 = -x; + x += cWidth; + if (x < gUnknown_03004870.width) + { + width = x; + } + else + { + width = gUnknown_03004870.width; + } + x = 0; + } + else + { + x2 = 0; + if (x + cWidth < gUnknown_03004870.width) + { + width = cWidth; + } + else + { + width = gUnknown_03004870.width - x; + } + } + sub_8056134( + x, y, + connectedMapHeader, + x2, /*y2*/ 0, + width, /*height*/ 7); + } +} + +void fillNorthConnection(struct MapHeader *mapHeader, struct MapHeader *connectedMapHeader, s32 offset) +{ + int x; + int x2, y2; + int width; + int cWidth, cHeight; + + if (connectedMapHeader) + { + cWidth = connectedMapHeader->mapData->width; + cHeight = connectedMapHeader->mapData->height; + x = offset + 7; + y2 = cHeight - 7; + if (x < 0) + { + x2 = -x; + x += cWidth; + if (x < gUnknown_03004870.width) + { + width = x; + } + else + { + width = gUnknown_03004870.width; + } + x = 0; + } + else + { + x2 = 0; + if (x + cWidth < gUnknown_03004870.width) + { + width = cWidth; + } + else + { + width = gUnknown_03004870.width - x; + } + } + + sub_8056134( + x, /*y*/ 0, + connectedMapHeader, + x2, y2, + width, /*height*/ 7); + + } +} + + +void fillWestConnection(struct MapHeader *mapHeader, struct MapHeader *connectedMapHeader, s32 offset) +{ + int y; + int x2, y2; + int height; + int cWidth, cHeight; + if (connectedMapHeader) + { + cWidth = connectedMapHeader->mapData->width; + cHeight = connectedMapHeader->mapData->height; + y = offset + 7; + x2 = cWidth - 7; + if (y < 0) + { + y2 = -y; + if (y + cHeight < gUnknown_03004870.height) + { + height = y + cHeight; + } + else + { + height = gUnknown_03004870.height; + } + y = 0; + } + else + { + y2 = 0; + if (y + cHeight < gUnknown_03004870.height) + { + height = cHeight; + } + else + { + height = gUnknown_03004870.height - y; + } + } + + sub_8056134( + /*x*/ 0, y, + connectedMapHeader, + x2, y2, + /*width*/ 7, height); + } +} + +void fillEastConnection(struct MapHeader *mapHeader, struct MapHeader *connectedMapHeader, s32 offset) +{ + int x, y; + int y2; + int height; + int cHeight; + if (connectedMapHeader) + { + cHeight = connectedMapHeader->mapData->height; + x = mapHeader->mapData->width + 7; + y = offset + 7; + if (y < 0) + { + y2 = -y; + if (y + cHeight < gUnknown_03004870.height) + { + height = y + cHeight; + } + else + { + height = gUnknown_03004870.height; + } + y = 0; + } + else + { + y2 = 0; + if (y + cHeight < gUnknown_03004870.height) + { + height = cHeight; + } + else + { + height = gUnknown_03004870.height - y; + } + } + + sub_8056134( + x, y, + connectedMapHeader, + /*x2*/ 0, y2, + /*width*/ 8, height); + } +} + +union Block +{ + struct + { + u16 block:10; + u16 collision:2; + u16 elevation:4; + } block; + u16 value; +}; + +u8 MapGridGetZCoordAt(int x, int y) +{ + u16 block; + int i; + u16 *border; + + if (x >= 0 && x < gUnknown_03004870.width + && y >= 0 && y < gUnknown_03004870.height) + { + block = gUnknown_03004870.map[x + gUnknown_03004870.width * y]; + } + else + { + border = gMapHeader.mapData->border; + i = (x + 1) & 1; + i += ((y + 1) & 1) * 2; + block = gMapHeader.mapData->border[i]; + block |= 0xc00; + } + if (block == 0x3ff) + { + return 0; + } + return block >> 12; +} + +u8 MapGridIsImpassableAt(int x, int y) +{ + u16 block; + int i; + u16 *border; + + if (x >= 0 && x < gUnknown_03004870.width + && y >= 0 && y < gUnknown_03004870.height) + { + block = gUnknown_03004870.map[x + gUnknown_03004870.width * y]; + } + else + { + border = gMapHeader.mapData->border; + i = (x + 1) & 1; + i += ((y + 1) & 1) * 2; + block = gMapHeader.mapData->border[i]; + block |= 0xc00; + } + if (block == 0x3ff) + { + return 1; + } + return (block & 0xc00) >> 10; +} + +u32 MapGridGetMetatileIdAt(int x, int y) +{ + u16 block; + int i; + int j; + struct MapData *mapData; + u16 *border; + u16 block2; + + if (x >= 0 && x < gUnknown_03004870.width + && y >= 0 && y < gUnknown_03004870.height) + { + block = gUnknown_03004870.map[x + gUnknown_03004870.width * y]; + } + else + { + mapData = gMapHeader.mapData; + i = (x + 1) & 1; + i += ((y + 1) & 1) * 2; + block = mapData->border[i] | 0xc00; + } + if (block == 0x3ff) + { + border = gMapHeader.mapData->border; + j = (x + 1) & 1; + j += ((y + 1) & 1) * 2; + block2 = gMapHeader.mapData->border[j]; + block2 |= 0xc00; + return block2 & block; + } + return block & 0x3ff; +} + +u32 MapGridGetMetatileBehaviorAt(int x, int y) +{ + u16 metatile; + metatile = MapGridGetMetatileIdAt(x, y); + return GetBehaviorByMetatileId(metatile) & 0xff; +} + +u8 MapGridGetMetatileLayerTypeAt(int x, int y) +{ + u16 metatile; + metatile = MapGridGetMetatileIdAt(x, y); + return (GetBehaviorByMetatileId(metatile) & 0xf000) >> 12; +} + +void MapGridSetMetatileIdAt(int x, int y, u16 metatile) +{ + int i; + if (x >= 0 && x < gUnknown_03004870.width + && y >= 0 && y < gUnknown_03004870.height) + { + i = x + y * gUnknown_03004870.width; + gUnknown_03004870.map[i] = (gUnknown_03004870.map[i] & 0xf000) | (metatile & 0xfff); + } +} + +void MapGridSetMetatileEntryAt(int x, int y, u16 metatile) +{ + int i; + if (x >= 0 && x < gUnknown_03004870.width + && y >= 0 && y < gUnknown_03004870.height) + { + i = x + gUnknown_03004870.width * y; + gUnknown_03004870.map[i] = metatile; + } +} + +u32 GetBehaviorByMetatileId(u16 metatile) +{ + u16 *attributes; + if (metatile <= 0x1ff) + { + attributes = gMapHeader.mapData->primaryTileset->metatileAttributes; + return attributes[metatile]; + } + else if (metatile <= 0x3ff) + { + attributes = gMapHeader.mapData->secondaryTileset->metatileAttributes; + return attributes[metatile - 0x200]; + } + else + { + return 0xff; + } +} + +void save_serialize_map(void) +{ + int i, j; + int x, y; + u16 *mapView; + int width; + mapView = gSaveBlock1.mapView; + width = gUnknown_03004870.width; + x = gSaveBlock1.pos.x; + y = gSaveBlock1.pos.y; + for (i = y; i < y + 14; i++) + { + for (j = x; j < x + 15; j++) + { + *mapView++ = gUnknown_02029828[width * i + j]; + } + } +} + +int sub_8056618(void) +{ + u16 i; + u32 r2; + r2 = 0; + for (i = 0; i < 0x200; i++) + { + r2 |= gSaveBlock1.mapView[i]; + } + if (r2 == 0) + { + return 1; + } + return 0; +} + +void sav2_mapdata_clear(void) +{ + CpuFill16(0, gSaveBlock1.mapView, sizeof(gSaveBlock1.mapView)); +} + +void sub_8056670(void) +{ + int i, j; + int x, y; + u16 *mapView; + int width; + mapView = gSaveBlock1.mapView; + if (!sub_8056618()) + { + width = gUnknown_03004870.width; + x = gSaveBlock1.pos.x; + y = gSaveBlock1.pos.y; + for (i = y; i < y + 14; i++) + { + for (j = x; j < x + 15; j++) + { + gUnknown_02029828[width * i + j] = *mapView++; + } + } + sav2_mapdata_clear(); + } +} + +void sub_80566F0(u8 a1) +{ + u16 *mapView; + int width; + int x0, y0; + int x2, y2; + u16 *src, *dest; + int srci, desti; + int r9, r8; + int x, y; + int i, j; + mapView = gSaveBlock1.mapView; + width = gUnknown_03004870.width; + r9 = 0; + r8 = 0; + x0 = gSaveBlock1.pos.x; + y0 = gSaveBlock1.pos.y; + x2 = 15; + y2 = 14; + switch (a1) + { + case CONNECTION_NORTH: + y0 += 1; + y2 = 13; + break; + case CONNECTION_SOUTH: + r8 = 1; + y2 = 13; + break; + case CONNECTION_WEST: + x0 += 1; + x2 = 14; + break; + case CONNECTION_EAST: + r9 = 1; + x2 = 14; + break; + } + for (y = 0; y < y2; y++) + { + i = 0; + j = 0; + for (x = 0; x < x2; x++) + { + desti = width * (y + y0); + srci = (y + r8) * 15 + r9; + src = &mapView[srci + i]; + dest = &gUnknown_02029828[x0 + desti + j]; + *dest = *src; + i++; + j++; + } + } + sav2_mapdata_clear(); +} + +int GetMapBorderIdAt(int x, int y) +{ + struct MapData *mapData; + u16 block, block2; + int i, j; + if (x >= 0 && x < gUnknown_03004870.width + && y >= 0 && y < gUnknown_03004870.height) + { + i = gUnknown_03004870.width; + i *= y; + block = gUnknown_03004870.map[x + i]; + if (block == 0x3ff) + { + goto fail; + } + } + else + { + mapData = gMapHeader.mapData; + j = (x + 1) & 1; + j += ((y + 1) & 1) * 2; + block2 = 0xc00 | mapData->border[j]; + if (block2 == 0x3ff) + { + goto fail; + } + } + goto success; +fail: + return -1; +success: + + if (x >= (gUnknown_03004870.width - 8)) + { + if (!gUnknown_0202E850.east) + { + return -1; + } + return CONNECTION_EAST; + } + else if (x < 7) + { + if (!gUnknown_0202E850.west) + { + return -1; + } + return CONNECTION_WEST; + } + else if (y >= (gUnknown_03004870.height - 7)) + { + if (!gUnknown_0202E850.south) + { + return -1; + } + return CONNECTION_SOUTH; + } + else if (y < 7) + { + if (!gUnknown_0202E850.north) + { + return -1; + } + return CONNECTION_NORTH; + } + else + { + return 0; + } +} + +int GetPostCameraMoveMapBorderId(int x, int y) +{ + return GetMapBorderIdAt(gSaveBlock1.pos.x + 7 + x, gSaveBlock1.pos.y + 7 + y); +} + +int CanCameraMoveInDirection(int direction) +{ + int x, y; + x = gSaveBlock1.pos.x + 7 + gUnknown_0821664C[direction].x; + y = gSaveBlock1.pos.y + 7 + gUnknown_0821664C[direction].y; + if (GetMapBorderIdAt(x, y) == -1) + { + return 0; + } + return 1; +} + +void sub_8056918(struct MapConnection *connection, int direction, int x, int y) +{ + struct MapHeader *mapHeader; + mapHeader = mapconnection_get_mapheader(connection); + switch (direction) + { + case CONNECTION_EAST: + gSaveBlock1.pos.x = -x; + gSaveBlock1.pos.y -= connection->offset; + break; + case CONNECTION_WEST: + gSaveBlock1.pos.x = mapHeader->mapData->width; + gSaveBlock1.pos.y -= connection->offset; + break; + case CONNECTION_SOUTH: + gSaveBlock1.pos.x -= connection->offset; + gSaveBlock1.pos.y = -y; + break; + case CONNECTION_NORTH: + gSaveBlock1.pos.x -= connection->offset; + gSaveBlock1.pos.y = mapHeader->mapData->height; + break; + } +} + +bool8 CameraMove(int x, int y) +{ + unsigned int direction; + struct MapConnection *connection; + int old_x, old_y; + gUnknown_0202E844.field_0 = FALSE; + direction = GetPostCameraMoveMapBorderId(x, y); + if (direction + 1 <= 1) + { + gSaveBlock1.pos.x += x; + gSaveBlock1.pos.y += y; + } + else + { + save_serialize_map(); + old_x = gSaveBlock1.pos.x; + old_y = gSaveBlock1.pos.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; + gSaveBlock1.pos.x += x; + gSaveBlock1.pos.y += y; + sub_80566F0(direction); + } + return gUnknown_0202E844.field_0; +} + +struct MapConnection *sub_8056A64(u8 direction, int x, int y) +{ + int count; + struct MapConnection *connection; + int i; + count = gMapHeader.connections->count; + connection = gMapHeader.connections->connections; + for (i = 0; i < count; i++, connection++) + { + if (connection->direction == direction) + { + if (sub_8056ABC(direction, x, y, connection) == TRUE) + { + return connection; + } + } + } + return NULL; +} + +bool8 sub_8056ABC(u8 direction, int x, int y, struct MapConnection *connection) +{ + struct MapHeader *mapHeader; + mapHeader = mapconnection_get_mapheader(connection); + switch (direction) + { + case CONNECTION_SOUTH: + case CONNECTION_NORTH: + return sub_8056B20(x, gMapHeader.mapData->width, mapHeader->mapData->width, connection->offset); + case CONNECTION_WEST: + case CONNECTION_EAST: + return sub_8056B20(y, gMapHeader.mapData->height, mapHeader->mapData->height, connection->offset); + } + return FALSE; +} + +bool8 sub_8056B20(int x, int src_width, int dest_width, int offset) +{ + int offset2; + offset2 = offset; + if (offset2 < 0) + { + offset2 = 0; + } + if (dest_width + offset < src_width) + { + src_width = dest_width + offset; + } + if (offset2 <= x && x <= src_width) + { + return TRUE; + } + return FALSE; +} + +int sub_8056B4C(int x, int width) +{ + if (x >= 0 && x < width) + { + return TRUE; + } + return FALSE; +} + +int sub_8056B60(struct MapConnection *connection, int x, int y) +{ + struct MapHeader *mapHeader; + mapHeader = mapconnection_get_mapheader(connection); + switch (connection->direction) + { + case CONNECTION_SOUTH: + case CONNECTION_NORTH: + return sub_8056B4C(x - connection->offset, mapHeader->mapData->width); + case CONNECTION_WEST: + case CONNECTION_EAST: + return sub_8056B4C(y - connection->offset, mapHeader->mapData->height); + } + return FALSE; +} + +struct MapConnection *sub_8056BA0(s16 x, s16 y) +{ + int count; + struct MapConnection *connection; + int i; + u8 direction; + if (!gMapHeader.connections) + { + return NULL; + } + else + { + count = gMapHeader.connections->count; + connection = gMapHeader.connections->connections; + for (i = 0; i < count; i++, connection++) + { + direction = connection->direction; + if ((direction == CONNECTION_DIVE || direction == CONNECTION_EMERGE) + || (direction == CONNECTION_NORTH && y > 6) + || (direction == CONNECTION_SOUTH && y < gMapHeader.mapData->height + 7) + || (direction == CONNECTION_WEST && x > 6) + || (direction == CONNECTION_EAST && x < gMapHeader.mapData->width + 7)) + { + continue; + } + if (sub_8056B60(connection, x - 7, y - 7) == TRUE) + { + return connection; + } + } + } + return NULL; +} + +void sub_8056C50(u16 x, u16 y) +{ + gSaveBlock1.pos.x = x - 7; + gSaveBlock1.pos.y = y - 7; +} + +void sav1_camera_get_focus_coords(u16 *x, u16 *y) +{ + *x = gSaveBlock1.pos.x + 7; + *y = gSaveBlock1.pos.y + 7; +} + +void unref_sub_8056C7C(u16 x, u16 y) +{ + gSaveBlock1.pos.x = x; + gSaveBlock1.pos.y = y; +} + +void GetCameraCoords(u16 *x, u16 *y) +{ + *x = gSaveBlock1.pos.x; + *y = gSaveBlock1.pos.y; +} + +void sub_8056C98(struct Tileset *tileset, void *src) +{ + if (tileset) + { + if (!tileset->isCompressed) + { + CpuFastSet(tileset->tiles, src, 0x1000); + } + else + { + LZ77UnCompVram(tileset->tiles, src); + } + } +} + +void sub_8056CBC(struct Tileset *tileset, int offset, int size) +{ + u16 black; + if (tileset) + { + if (tileset->isSecondary == FALSE) + { + black = 0; + LoadPalette(&black, offset, 2); + LoadPalette(tileset->palettes + 2, offset + 1, size - 2); + } + else if (tileset->isSecondary == TRUE) + { + LoadPalette(tileset->palettes + 0xc0, offset, size); + } + else + { + LZ77UnCompVram(tileset->palettes, (void*)0x2000000); + LoadPalette((void*)0x2000000, offset, size); + } + } +} + +void sub_8056D28(struct MapData *mapData) +{ + void *src = (void*)(BG_VRAM); + sub_8056C98(mapData->primaryTileset, src); +} + +void sub_8056D38(struct MapData *mapData) +{ + void *src = (void*)(BG_VRAM + 0x4000); + sub_8056C98(mapData->secondaryTileset, src); +} + +void apply_map_tileset1_palette(struct MapData *mapData) +{ + sub_8056CBC(mapData->primaryTileset, 0, 0xc0); +} + +void apply_map_tileset2_palette(struct MapData *mapData) +{ + sub_8056CBC(mapData->secondaryTileset, 0x60, 0xc0); +} + +void copy_map_tileset1_tileset2_to_vram(struct MapData *mapData) +{ + if (mapData) + { + sub_8056D28(mapData); + sub_8056D38(mapData); + } +} + +void apply_map_tileset1_tileset2_palette(struct MapData *mapData) +{ + if (mapData) + { + apply_map_tileset1_palette(mapData); + apply_map_tileset2_palette(mapData); + } +} diff --git a/src/field/fldeff_cut.c b/src/field/fldeff_cut.c new file mode 100644 index 000000000..b394d1e4c --- /dev/null +++ b/src/field/fldeff_cut.c @@ -0,0 +1,290 @@ +#include "global.h" +#include "fldeff_cut.h" +#include "field_camera.h" +#include "field_effect.h" +#include "field_player_avatar.h" +#include "fieldmap.h" +#include "map_obj_lock.h" +#include "metatile_behavior.h" +#include "metatile_behaviors.h" +#include "pokemon_menu.h" +#include "rom4.h" +#include "rom6.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" + +extern u8 gCutGrassSpriteArray[8]; // seems to be an array of 8 sprite IDs + +extern void (*gFieldCallback)(void); +extern void (*gUnknown_03005CE4)(void); + +extern struct SpriteTemplate gSpriteTemplate_CutGrass; + +extern struct MapPosition gUnknown_0203923C; + +extern u8 gLastFieldPokeMenuOpened; + +extern u8 UseCutScript; + +bool8 SetUpFieldMove_Cut(void) +{ + s16 x, y; + u8 i, j; + u8 tileBehavior; + + if(npc_before_player_of_type(0x52) == TRUE) // is in front of tree? + { + gFieldCallback = sub_808AB90; + gUnknown_03005CE4 = sub_80A2634; + return TRUE; + } + else // is in ash or grass to cut? + { + PlayerGetDestCoords(&gUnknown_0203923C.x, &gUnknown_0203923C.y); + for(i = 0; i < 3; i++) + { + y = i - 1 + gUnknown_0203923C.y; + for(j = 0; j < 3; j++) + { + x = j - 1 + gUnknown_0203923C.x; + if(MapGridGetZCoordAt(x, y) == (s8)gUnknown_0203923C.height) + { + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + if(MetatileBehavior_IsPokeGrass(tileBehavior) == TRUE + || MetatileBehavior_IsAshGrass(tileBehavior) == TRUE) + { + gFieldCallback = sub_808AB90; + gUnknown_03005CE4 = sub_80A25E8; + return TRUE; + } + } + } + } + return FALSE; // do not use cut + } +} + +void sub_80A25E8(void) +{ + FieldEffectStart(1); + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; +} + +bool8 FldEff_UseCutOnGrass(void) +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (u32)sub_80A2684 >> 16; + gTasks[taskId].data[9] = (u32)sub_80A2684; + IncrementGameStat(0x12); + return FALSE; +} + +void sub_80A2634(void) +{ + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + ScriptContext1_SetupScript(&UseCutScript); +} + +bool8 FldEff_UseCutOnTree(void) +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (u32)sub_80A2B00 >> 16; + gTasks[taskId].data[9] = (u32)sub_80A2B00; + IncrementGameStat(0x12); + return FALSE; +} + +void sub_80A2684(void) +{ + FieldEffectActiveListRemove(1); + FieldEffectStart(0x3A); +} + +bool8 FldEff_CutGrass(void) +{ + s16 x, y; + u8 tileBehavior; + u8 i, j; // not in for loop? + + for(i = 0, PlaySE(SE_W015), PlayerGetDestCoords(&gUnknown_0203923C.x, &gUnknown_0203923C.y); i < 3; i++) + { + y = i - 1 + gUnknown_0203923C.y; + for(j = 0; j < 3; j++) + { + x = j - 1 + gUnknown_0203923C.x; + if(MapGridGetZCoordAt(x, y) == (s8)gUnknown_0203923C.height) + { + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + if(MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE) + { + sub_80A27A8(x, y); + sub_805BCC0(x, y); + } + } + } + } + sub_80A28F4(gUnknown_0203923C.x - 1, gUnknown_0203923C.y - 2); + DrawWholeMapView(); + + // populate sprite ID array + for(i = 0; i < 8; i++) + { + gCutGrassSpriteArray[i] = CreateSprite((struct SpriteTemplate *)&gSpriteTemplate_CutGrass, + gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 20, 0); + gSprites[gCutGrassSpriteArray[i]].data2 = 32 * i; + } + return 0; +} + +// set map grid metatile depending on x, y +// TODO: enum for metatile IDs +void sub_80A27A8(s16 x, s16 y) +{ + int metatileId = MapGridGetMetatileIdAt(x, y); + + switch(metatileId) + { + case 0x208: + case 0x15: + case 0xD: + MapGridSetMetatileIdAt(x, y, 0x1); + break; + case 0x1C6: + MapGridSetMetatileIdAt(x, y, 0x1CE); + break; + case 0x1C7: + MapGridSetMetatileIdAt(x, y, 0x1CF); + break; + case 0x281: + MapGridSetMetatileIdAt(x, y, 0x279); + break; + case 0x282: + MapGridSetMetatileIdAt(x, y, 0x27A); + break; + case 0x283: + MapGridSetMetatileIdAt(x, y, 0x27B); + break; + case 0x206: + case 0x207: + MapGridSetMetatileIdAt(x, y, 0x271); + break; + case 0x212: + case 0x20A: + MapGridSetMetatileIdAt(x, y, 0x218); + break; + case 0x25: + MapGridSetMetatileIdAt(x, y, 0xE); + break; + } +} + +s32 sub_80A28A0(s16 x, s16 y) +{ + u16 metatileId = MapGridGetMetatileIdAt(x, y); + + if(metatileId == 1) + return 1; + else if(metatileId == 633) + return 2; + else if(metatileId == 634) + return 3; + else if(metatileId == 635) + return 4; + else + return 0; +} + +void sub_80A28F4(s16 x, s16 y) +{ + s16 i; + u16 lowerY = y + 3; + + for(i = 0; i < 3; i++) + { + u16 currentX = x + i; + s16 currentXsigned = x + i; + if(MapGridGetMetatileIdAt(currentXsigned, y) == 21) + { + switch((u8)sub_80A28A0(currentXsigned, y + 1)) + { + case 1: + MapGridSetMetatileIdAt(currentXsigned, y + 1, 0x208); + break; + case 2: + MapGridSetMetatileIdAt(currentXsigned, y + 1, 0x281); + break; + case 3: + MapGridSetMetatileIdAt(currentXsigned, y + 1, 0x282); + break; + case 4: + MapGridSetMetatileIdAt(currentXsigned, y + 1, 0x283); + break; + } + } + if(MapGridGetMetatileIdAt((s16)currentX, (s16)lowerY) == 1) + { + if(MapGridGetMetatileIdAt((s16)currentX, (s16)lowerY + 1) == 0x208) + MapGridSetMetatileIdAt((s16)currentX, (s16)lowerY + 1, 0x1); + if(MapGridGetMetatileIdAt((s16)currentX, (s16)lowerY + 1) == 0x281) + MapGridSetMetatileIdAt((s16)currentX, (s16)lowerY + 1, 0x279); + if(MapGridGetMetatileIdAt((s16)currentX, (s16)lowerY + 1) == 0x282) + MapGridSetMetatileIdAt((s16)currentX, (s16)lowerY + 1, 0x27A); + if(MapGridGetMetatileIdAt((s16)currentX, (s16)lowerY + 1) == 0x283) + MapGridSetMetatileIdAt((s16)currentX, (s16)lowerY + 1, 0x27B); + } + } +} + +void sub_80A2A48(struct Sprite *sprite) +{ + sprite->data0 = 8; + sprite->data1 = 0; + sprite->data3 = 0; + sprite->callback = (void *)objc_8097BBC; +} + +void objc_8097BBC(struct Sprite *sprite) +{ + u16 tempdata; + u16 tempdata2; + + sprite->pos2.x = Sin(sprite->data2, sprite->data0); + sprite->pos2.y = Cos(sprite->data2, sprite->data0); + + sprite->data2 = (sprite->data2 + 8) & 0xFF; + sprite->data0 += ((tempdata2 = sprite->data3) << 16 >> 18) + 1; // what? + sprite->data3 = tempdata2 + 1; + + tempdata = sprite->data1; + if((s16)tempdata != 28) // done rotating the grass, execute clean up function + sprite->data1++; + else + sprite->callback = (void *)sub_80A2AB8; +} + +void sub_80A2AB8(void) +{ + u8 i; + + for(i = 1; i < 8; i++) + { + DestroySprite(&gSprites[gCutGrassSpriteArray[i]]); + } + + FieldEffectStop(&gSprites[gCutGrassSpriteArray[0]], 0x3A); + sub_8064E2C(); + ScriptContext2_Disable(); +} + +void sub_80A2B00(void) +{ + PlaySE(0x80); + FieldEffectActiveListRemove(2); + EnableBothScriptContexts(); +} diff --git a/src/field/fldeff_flash.c b/src/field/fldeff_flash.c new file mode 100644 index 000000000..6c2633567 --- /dev/null +++ b/src/field/fldeff_flash.c @@ -0,0 +1,306 @@ +#include "global.h" +#include "event_data.h" +#include "field_effect.h" +#include "main.h" +#include "palette.h" +#include "pokemon_menu.h" +#include "rom4.h" +#include "rom6.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" + +struct FlashStruct +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + void (*func)(void); +}; + +extern struct FlashStruct gUnknown_083F7FC4[]; +extern u16 gCaveTransitionPalette_White[]; +extern u16 gCaveTransitionPalette_Black[]; +extern u16 gUnknown_083F808C[]; +extern u16 gUnknown_083F809C[]; +extern u16 gCaveTransitionTilemap[]; +extern u8 gCaveTransitionTiles[]; + +extern u8 gLastFieldPokeMenuOpened; +extern void (*gUnknown_03005CE4)(void); + +extern u8 gUnknown_081B694A[]; + +void sub_810CBFC(void); +void sub_810CC34(void); +bool8 sub_810CD5C(void); +void sub_810CE5C(u8); +void sub_810CE78(u8); +void sub_810CF18(u8); +void sub_810CF5C(u8); +void sub_810CFC4(u8); +void sub_810D00C(u8); +void sub_810D028(u8); +void sub_810D0C4(u8); +void sub_810D128(u8); + +bool8 SetUpFieldMove_Flash(void) +{ + if (gMapHeader.cave == TRUE && !FlagGet(SYS_USE_FLASH)) + { + gFieldCallback = sub_808AB90; + gUnknown_03005CE4 = sub_810CBFC; + return TRUE; + } + + return FALSE; +} + +void sub_810CBFC(void) +{ + u8 taskId = oei_task_add(); + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + gTasks[taskId].data[8] = (uintptr_t)sub_810CC34 >> 16; + gTasks[taskId].data[9] = (uintptr_t)sub_810CC34; +} + +void sub_810CC34(void) +{ + PlaySE(SE_W115); + FlagSet(SYS_USE_FLASH); + ScriptContext1_SetupScript(gUnknown_081B694A); +} + +void sub_810CC54(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void VBlankCB(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_810CC80(void) +{ + u16 ime; + + SetVBlankCallback(NULL); + REG_DISPCNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); + DmaFill32(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2); + ResetPaletteFade(); + ResetTasks(); + ResetSpriteData(); + ime = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = ime; + SetVBlankCallback(VBlankCB); + SetMainCallback2(sub_810CC54); + if (!sub_810CD5C()) + SetMainCallback2(gMain.savedCallback); +} + +bool8 sub_810CD5C(void) +{ + u8 i; + u8 v0 = get_map_light_from_warp0(); + u8 v1 = sav1_map_get_light_level(); + + for (i = 0; gUnknown_083F7FC4[i].unk0; i++) + { + if (gUnknown_083F7FC4[i].unk0 == v0 && gUnknown_083F7FC4[i].unk1 == v1) + { + gUnknown_083F7FC4[i].func(); + return TRUE; + } + } + + return FALSE; +} + +u8 sub_810CDB8(u8 a1, u8 a2) +{ + u8 i; + u8 v0 = a1; + u8 v1 = a2; + + for (i = 0; gUnknown_083F7FC4[i].unk0; i++) + { + if (gUnknown_083F7FC4[i].unk0 == v0 && gUnknown_083F7FC4[i].unk1 == v1) + { + return gUnknown_083F7FC4[i].unk2; + } + } + + return FALSE; +} + +u8 fade_type_for_given_maplight_pair(u8 a1, u8 a2) +{ + u8 i; + u8 v0 = a1; + u8 v1 = a2; + + for (i = 0; gUnknown_083F7FC4[i].unk0; i++) + { + if (gUnknown_083F7FC4[i].unk0 == v0 && gUnknown_083F7FC4[i].unk1 == v1) + { + return gUnknown_083F7FC4[i].unk3; + } + } + + return FALSE; +} + +void sub_810CE48(void) +{ + CreateTask(sub_810CE5C, 0); +} + +void sub_810CE5C(u8 taskId) +{ + gTasks[taskId].func = sub_810CE78; +} + +void sub_810CE78(u8 taskId) +{ + REG_DISPCNT = 0; + LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000); + LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800); + LoadPalette(gCaveTransitionPalette_White, 0xE0, 0x20); + LoadPalette(gUnknown_083F809C, 0xE0, 0x10); + REG_BLDCNT = 15937; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG0CNT = 7948; + REG_DISPCNT = 4416; + gTasks[taskId].func = sub_810CF18; + gTasks[taskId].data[0] = 16; + gTasks[taskId].data[1] = 0; +} + +void sub_810CF18(u8 taskId) +{ + u16 count = gTasks[taskId].data[1]; + u16 blend = count + 0x1000; + REG_BLDALPHA = blend; + if (count <= 0x10) + { + gTasks[taskId].data[1]++; + } + else + { + gTasks[taskId].data[2] = 0; + gTasks[taskId].func = sub_810CF5C; + } +} + +void sub_810CF5C(u8 taskId) +{ + u16 count; + + REG_BLDALPHA = 4112; + + count = gTasks[taskId].data[2]; + + if (count < 8) + { + gTasks[taskId].data[2]++; + LoadPalette(&gUnknown_083F809C[count], 0xE0, 16 - 2 * count); + } + else + { + LoadPalette(gCaveTransitionPalette_White, 0, 0x20); + gTasks[taskId].func = sub_810CFC4; + gTasks[taskId].data[2] = 8; + } +} + +void sub_810CFC4(u8 taskId) +{ + if (gTasks[taskId].data[2]) + gTasks[taskId].data[2]--; + else + SetMainCallback2(gMain.savedCallback); +} + +void sub_810CFF8(void) +{ + CreateTask(sub_810D00C, 0); +} + +void sub_810D00C(u8 taskId) +{ + gTasks[taskId].func = sub_810D028; +} + +void sub_810D028(u8 taskId) +{ + REG_DISPCNT = 0; + LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000); + LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800); + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG0CNT = 7948; + REG_DISPCNT = 4416; + LoadPalette(gCaveTransitionPalette_White, 0xE0, 0x20); + LoadPalette(gCaveTransitionPalette_Black, 0, 0x20); + gTasks[taskId].func = sub_810D0C4; + gTasks[taskId].data[0] = 16; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; +} + +void sub_810D0C4(u8 taskId) +{ + u16 count = gTasks[taskId].data[2]; + if (count < 16) + { + gTasks[taskId].data[2]++; + gTasks[taskId].data[2]++; + LoadPalette(&gUnknown_083F808C[15 - count], 0xE0, 2 * (count + 1)); + } + else + { + REG_BLDALPHA = 4112; + REG_BLDCNT = 15937; + gTasks[taskId].func = sub_810D128; + } +} + +void sub_810D128(u8 taskId) +{ + u16 count = 16 - gTasks[taskId].data[1]; + u16 blend = count + 0x1000; + REG_BLDALPHA = blend; + if (count) + { + gTasks[taskId].data[1]++; + } + else + { + LoadPalette(gCaveTransitionPalette_Black, 0, 0x20); + SetMainCallback2(gMain.savedCallback); + } +} diff --git a/src/field/fldeff_softboiled.c b/src/field/fldeff_softboiled.c new file mode 100644 index 000000000..cb26d9966 --- /dev/null +++ b/src/field/fldeff_softboiled.c @@ -0,0 +1,153 @@ +#include "global.h" +#include "fldeff_softboiled.h" +#include "menu.h" +#include "party_menu.h" +#include "pokemon.h" +#include "pokemon_menu.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "strings.h" +#include "task.h" + +struct Struct2001000 { + u8 unk0; + u8 unk1; + u8 unk2; + u8 filler3[9]; + void *unkC; +}; + +struct Struct201C000 { + struct Pokemon *unk0; + u8 filler4[1]; + u8 unk5; + u16 unk6; + u8 filler8[4]; + s32 unkC; + void* unk10; + u8 filler14[26]; + s16 unk2E; +}; + +#if ENGLISH +#define WINDOW_LEFT 3 +#define WINDOW_RIGHT 26 +#elif GERMAN +#define WINDOW_LEFT 0 +#define WINDOW_RIGHT 29 +#endif + +#define EWRAM_1000 (*(struct Struct2001000 *)(unk_2000000 + 0x1000)) +#define EWRAM_1B000_2 (*(struct Struct201B000 *)(unk_2000000 + 0x1B000)) +#define EWRAM_1C000 (*(struct Struct201C000 *)(unk_2000000 + 0x1C000)) + +// extern +extern u8 gUnknown_0202E8F6; +extern u8 gLastFieldPokeMenuOpened; + +extern u8 unk_2000000[]; +extern u8 gUnknown_0202E8F4; + +// Static +static void sub_8133D50(u8 taskId); +static void sub_8133E74(u8 taskId); +static void sub_8133EB8(u8 taskId); +static void sub_8133EF8(void); + +bool8 SetUpFieldMove_SoftBoiled(void) { + u16 maxHp; + u16 hp; + u16 minHp; + + maxHp = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_MAX_HP); + hp = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HP); + + minHp = (maxHp / 5); + if (hp >= minHp) + { + return TRUE; + } + + return FALSE; +} + +void sub_8133D28(u8 taskid) { + EWRAM_1000.unkC = sub_8133D50; + EWRAM_1B000_2.unk272 = 3; + sub_808A004(taskid); +} + +static void sub_8133D50(u8 taskId) { + u8 unk1, unk2; + u16 hp; + struct Pokemon *pokemon; + //struct Task *task; + + struct Sprite *sprites = gSprites; + + + unk1 = sprites[EWRAM_1000.unk1].data0; + unk2 = sprites[EWRAM_1000.unk2].data0; + + if (unk1 > 5 || unk2 > 5) + { + sub_806CD44(taskId); + return; + } + + EWRAM_1C000.unk0 = &gPlayerParty[sprites[EWRAM_1000.unk2].data0]; + hp = GetMonData(EWRAM_1C000.unk0, MON_DATA_HP); + + if (hp == 0 || unk1 == unk2 || GetMonData(EWRAM_1C000.unk0, MON_DATA_MAX_HP) == hp) + { + sub_8133EB8(taskId); + return; + } + + PlaySE(SE_KAIFUKU); + + EWRAM_1C000.unk5 = gSprites[EWRAM_1000.unk1].data0; + + pokemon = &gPlayerParty[EWRAM_1C000.unk5]; + EWRAM_1C000.unk0 = pokemon; + EWRAM_1C000.unk6 = 0; + EWRAM_1C000.unkC = -0x8000; + EWRAM_1C000.unk10 = sub_8133EF8; + + + gTasks[taskId].data[10] = GetMonData(EWRAM_1C000.unk0, MON_DATA_MAX_HP); + gTasks[taskId].data[11] = GetMonData(EWRAM_1C000.unk0, MON_DATA_HP); + gTasks[taskId].data[12] = gTasks[taskId].data[10] / 5; + + sub_806D5A4(); + gTasks[taskId].func = sub_806FA18; + EWRAM_1B000_2.unk282 = gTasks[taskId].data[11]; +} + +static void sub_8133E74(u8 taskId) { + if (gUnknown_0202E8F6) + { + return; + } + + MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); + sub_806D538(3, 0); + gTasks[taskId].func = sub_806CB74; +} + +static void sub_8133EB8(u8 taskId) { + gUnknown_0202E8F4 = 0; + sub_806D5A4(); + sub_806E834(gOtherText_CantUseOnPoke, 1); + gTasks[taskId].func = sub_8133E74; +} + +static void sub_8133EF8(void) { + sub_806CCE4(); + EWRAM_1B000_2.unk261 = 2; + DestroySprite(&gSprites[EWRAM_1000.unk1]); + MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); + sub_806D538(0, 0); + SwitchTaskToFollowupFunc(EWRAM_1000.unk0); +} diff --git a/src/field/fldeff_strength.c b/src/field/fldeff_strength.c new file mode 100644 index 000000000..81f4f63c6 --- /dev/null +++ b/src/field/fldeff_strength.c @@ -0,0 +1,76 @@ +#include "global.h" +#include "braille_puzzles.h" +#include "field_effect.h" +#include "party_menu.h" +#include "pokemon.h" +#include "pokemon_menu.h" +#include "rom6.h" +#include "script.h" +#include "task.h" +#include "text.h" + +static void sub_811AA18(void); +static void sub_811AA38(void); +static void sub_811AA9C(void); + +extern u8 gLastFieldPokeMenuOpened; +extern u16 gScriptResult; +extern void (*gFieldCallback)(void); +extern void (*gUnknown_03005CE4)(void); + +extern u8 UseStrengthScript[]; + +bool8 SetUpFieldMove_Strength(void) +{ + if (ShouldDoBrailleStrengthEffect()) + { + gScriptResult = gLastFieldPokeMenuOpened; + gFieldCallback = sub_808AB90; + gUnknown_03005CE4 = sub_811AA38; + } + else + { + if (npc_before_player_of_type(87) != TRUE) + return 0; + gScriptResult = gLastFieldPokeMenuOpened; + gFieldCallback = sub_808AB90; + gUnknown_03005CE4 = sub_811AA18; + } + + return TRUE; +} + +static void sub_811AA18(void) +{ + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + ScriptContext1_SetupScript(UseStrengthScript); +} + +static void sub_811AA38(void) +{ + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + FieldEffectStart(40); +} + +bool8 FldEff_UseStrength(void) +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (u32)sub_811AA9C >> 16; + gTasks[taskId].data[9] = (u32)sub_811AA9C; + GetMonNickname(&gPlayerParty[gUnknown_0202FF84[0]], gStringVar1); + return FALSE; +} + +static void sub_811AA9C(void) +{ + if (ShouldDoBrailleStrengthEffect()) + { + DoBrailleStrengthEffect(); + } + else + { + FieldEffectActiveListRemove(40); + EnableBothScriptContexts(); + } +} diff --git a/src/field/fldeff_sweetscent.c b/src/field/fldeff_sweetscent.c new file mode 100644 index 000000000..4c3e6bf4a --- /dev/null +++ b/src/field/fldeff_sweetscent.c @@ -0,0 +1,88 @@ +#include "global.h" +#include "field_effect.h" +#include "field_player_avatar.h" +#include "palette.h" +#include "pokemon_menu.h" +#include "rom6.h" +#include "script.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "wild_encounter.h" + +static void sub_812BFD4(void); +static void sub_812C01C(void); +static void sub_812C084(u8); +static void sub_812C118(u8); + +extern u8 gLastFieldPokeMenuOpened; +extern void (*gFieldCallback)(void); +extern void (*gUnknown_03005CE4)(void); + +extern u8 SweetScentNothingHereScript[]; + +bool8 SetUpFieldMove_SweetScent(void) +{ + gFieldCallback = sub_808AB90; + gUnknown_03005CE4 = sub_812BFD4; + return TRUE; +} + +static void sub_812BFD4(void) +{ + FieldEffectStart(51); + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; +} + +bool8 FldEff_SweetScent() +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (u32)sub_812C01C >> 16; + gTasks[taskId].data[9] = (u32)sub_812C01C; + return FALSE; +} + +static void sub_812C01C(void) +{ + u8 taskId; + + PlaySE(0xEC); + BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 0, 8, 0x1F); + taskId = CreateTask(sub_812C084, 0); + gTasks[taskId].data[0] = 0; + FieldEffectActiveListRemove(51); +} + +static void sub_812C084(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gTasks[taskId].data[0] == 64) + { + gTasks[taskId].data[0] = 0; + if (SweetScentWildEncounter() == TRUE) + { + DestroyTask(taskId); + } + else + { + gTasks[taskId].func = sub_812C118; + BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 8, 0, 0x1F); + } + } + else + { + gTasks[taskId].data[0]++; + } + } +} + +static void sub_812C118(u8 taskId) +{ + if (!gPaletteFade.active) + { + ScriptContext1_SetupScript(SweetScentNothingHereScript); + DestroyTask(taskId); + } +} diff --git a/src/field/fldeff_teleport.c b/src/field/fldeff_teleport.c new file mode 100644 index 000000000..74e68df06 --- /dev/null +++ b/src/field/fldeff_teleport.c @@ -0,0 +1,46 @@ +#include "global.h" +#include "fldeff_teleport.h" +#include "field_effect.h" +#include "field_player_avatar.h" +#include "pokemon_menu.h" +#include "rom4.h" +#include "rom6.h" +#include "task.h" + +extern void (*gFieldCallback)(void); +extern u8 gLastFieldPokeMenuOpened; +extern void (*gUnknown_03005CE4)(void); + +bool8 SetUpFieldMove_Teleport(void) +{ + if (is_light_level_1_2_3_or_6(gMapHeader.mapType) == TRUE) + { + gFieldCallback = sub_808AB90; + gUnknown_03005CE4 = hm_teleport_run_dp02scr; + return TRUE; + } + + return FALSE; +} + +void hm_teleport_run_dp02scr(void) +{ + new_game(); + FieldEffectStart(63); + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; +} + +bool8 FldEff_UseTeleport(void) +{ + u8 taskId = oei_task_add(); + gTasks[taskId].data[8] = (u32)sub_814A404 >> 16; + gTasks[taskId].data[9] = (u32)sub_814A404; + SetPlayerAvatarTransitionFlags(1); + return 0; +} + +void sub_814A404(void) +{ + FieldEffectActiveListRemove(63); + sub_8087BA8(); +} diff --git a/src/field/heal_location.c b/src/field/heal_location.c new file mode 100644 index 000000000..42bc18567 --- /dev/null +++ b/src/field/heal_location.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "heal_location.h" +#include "map_constants.h" + +#define NUM_HEAL_LOCATIONS 22 + +static const struct HealLocation sHealLocations[] = +{ + {MAP_GROUP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F, MAP_ID_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F, 4, 2}, + {MAP_GROUP_LITTLEROOT_TOWN_MAYS_HOUSE_2F, MAP_ID_LITTLEROOT_TOWN_MAYS_HOUSE_2F, 4, 2}, + {MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, 20, 17}, + {MAP_GROUP_SLATEPORT_CITY, MAP_ID_SLATEPORT_CITY, 19, 20}, + {MAP_GROUP_MAUVILLE_CITY, MAP_ID_MAUVILLE_CITY, 22, 6}, + {MAP_GROUP_RUSTBORO_CITY, MAP_ID_RUSTBORO_CITY, 16, 39}, + {MAP_GROUP_FORTREE_CITY, MAP_ID_FORTREE_CITY, 5, 7}, + {MAP_GROUP_LILYCOVE_CITY, MAP_ID_LILYCOVE_CITY, 24, 15}, + {MAP_GROUP_MOSSDEEP_CITY, MAP_ID_MOSSDEEP_CITY, 28, 17}, + {MAP_GROUP_SOOTOPOLIS_CITY, MAP_ID_SOOTOPOLIS_CITY, 43, 32}, + {MAP_GROUP_EVER_GRANDE_CITY, MAP_ID_EVER_GRANDE_CITY, 27, 49}, + {MAP_GROUP_LITTLEROOT_TOWN, MAP_ID_LITTLEROOT_TOWN, 5, 9}, + {MAP_GROUP_LITTLEROOT_TOWN, MAP_ID_LITTLEROOT_TOWN, 14, 9}, + {MAP_GROUP_OLDALE_TOWN, MAP_ID_OLDALE_TOWN, 6, 17}, + {MAP_GROUP_DEWFORD_TOWN, MAP_ID_DEWFORD_TOWN, 2, 11}, + {MAP_GROUP_LAVARIDGE_TOWN, MAP_ID_LAVARIDGE_TOWN, 9, 7}, + {MAP_GROUP_FALLARBOR_TOWN, MAP_ID_FALLARBOR_TOWN, 14, 8}, + {MAP_GROUP_VERDANTURF_TOWN, MAP_ID_VERDANTURF_TOWN, 16, 4}, + {MAP_GROUP_PACIFIDLOG_TOWN, MAP_ID_PACIFIDLOG_TOWN, 8, 16}, + {MAP_GROUP_EVER_GRANDE_CITY, MAP_ID_EVER_GRANDE_CITY, 18, 6}, + {MAP_GROUP_BATTLE_TOWER_OUTSIDE, MAP_ID_BATTLE_TOWER_OUTSIDE, 14, 9}, + {MAP_GROUP_SOUTHERN_ISLAND_EXTERIOR, MAP_ID_SOUTHERN_ISLAND_EXTERIOR, 15, 20}, +}; + +u32 GetHealLocationIndexByMap(u16 mapGroup, u16 mapNum) +{ + u32 i; + + for (i = 0; i < NUM_HEAL_LOCATIONS; i++) + { + if (sHealLocations[i].group == mapGroup && sHealLocations[i].map == mapNum) + return i + 1; + } + return 0; +} + +const struct HealLocation *GetHealLocationByMap(u16 mapGroup, u16 mapNum) +{ + u32 index = GetHealLocationIndexByMap(mapGroup, mapNum); + + if (index == 0) + return NULL; + else + return &sHealLocations[index - 1]; +} + +const struct HealLocation *GetHealLocation(u32 index) +{ + if (index == 0) + return NULL; + else if (index > NUM_HEAL_LOCATIONS) + return NULL; + else + return &sHealLocations[index - 1]; +} diff --git a/src/field/hof_pc.c b/src/field/hof_pc.c new file mode 100644 index 000000000..4646d171c --- /dev/null +++ b/src/field/hof_pc.c @@ -0,0 +1,42 @@ +#include "global.h" +#include "hall_of_fame.h" +#include "main.h" +#include "palette.h" +#include "rom4.h" +#include "script.h" +#include "script_menu.h" +#include "task.h" + +extern void (*gFieldCallback)(void); +extern void (*gUnknown_0300485C)(void); + +static void ReshowPCMenuAfterHallOfFamePC(void); +static void Task_WaitForPaletteFade(u8); + +void AccessHallOfFamePC(void) +{ + SetMainCallback2(sub_81428CC); + ScriptContext2_Enable(); +} + +void ReturnFromHallOfFamePC(void) +{ + SetMainCallback2(c2_exit_to_overworld_2_switch); + gFieldCallback = ReshowPCMenuAfterHallOfFamePC; +} + +static void ReshowPCMenuAfterHallOfFamePC(void) +{ + ScriptContext2_Enable(); + sub_8053E90(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + TryCreatePCMenu(); + sub_80B5838(); + CreateTask(Task_WaitForPaletteFade, 10); +} + +static void Task_WaitForPaletteFade(u8 taskId) +{ + if (!gPaletteFade.active) + DestroyTask(taskId); +} diff --git a/src/field/item.c b/src/field/item.c new file mode 100644 index 000000000..fd49f5c39 --- /dev/null +++ b/src/field/item.c @@ -0,0 +1,674 @@ +#include "global.h" +#include "hold_effects.h" +#include "item.h" +#include "items.h" +#include "item_use.h" +#include "berry.h" +#include "string_util.h" +#include "strings.h" + +extern u8 gUnknown_02038560; + +// These constants are used in gItems +enum +{ + POCKET_NONE, + POCKET_ITEMS, + POCKET_POKE_BALLS, + POCKET_TM_HM, + POCKET_BERRIES, + POCKET_KEY_ITEMS, +}; + +enum +{ + ITEMS_POCKET, + BALLS_POCKET, + TMHM_POCKET, + BERRIES_POCKET, + KEYITEMS_POCKET +}; + +#if ENGLISH +#include "../data/item_descriptions_en.h" +#include "../data/items_en.h" +#elif GERMAN +#include "../data/item_descriptions_de.h" +#include "../data/items_de.h" +#endif + +static void CompactPCItems(void); + +void CopyItemName(u16 itemId, u8 *string) +{ + if (itemId == ITEM_ENIGMA_BERRY) + { + StringCopy(string, GetBerryInfo(0x2B)->name); // berry 0x2b = enigma berry + StringAppend(string, gOtherText_Berry2); + } + else + StringCopy(string, ItemId_GetItem(itemId)->name); +} + +//Unreferenced +s8 CountUsedBagPocketSlots(u8 pocket) +{ + u8 i; + + for (i = 0; i < gBagPockets[pocket].capacity; i++) + { + if (gBagPockets[pocket].itemSlots[i].itemId == 0) + return i; + } + return -1; +} + +bool8 IsBagPocketNonEmpty(u8 pocket) +{ + u8 i; + + for (i = 0; i < gBagPockets[pocket - 1].capacity; i++) + { + if (gBagPockets[pocket - 1].itemSlots[i].itemId != 0) + return TRUE; + } + return FALSE; +} + +bool8 CheckBagHasItem(u16 itemId, u16 count) +{ + u8 i; + u8 pocket; + + if (ItemId_GetPocket(itemId) == 0) + return FALSE; + pocket = ItemId_GetPocket(itemId) - 1; + //Check for item slots that contain the item + for (i = 0; i < gBagPockets[pocket].capacity; i++) + { + if (gBagPockets[pocket].itemSlots[i].itemId == itemId) + { + //Does this item slot contain enough of the item? + if (gBagPockets[pocket].itemSlots[i].quantity >= count) + return TRUE; + count -= gBagPockets[pocket].itemSlots[i].quantity; + //Does this item slot and all previous slots contain enough of the item? + if (count == 0) + return TRUE; + } + } + return FALSE; +} + +bool8 CheckBagHasSpace(u16 itemId, u16 count) +{ + u8 i; + u8 pocket; + u16 slotCapacity; + + if (ItemId_GetPocket(itemId) == 0) + return FALSE; + pocket = ItemId_GetPocket(itemId) - 1; + if (pocket != BERRIES_POCKET) + slotCapacity = 99; + else + slotCapacity = 999; + + //Check space in any existing item slots that already contain this item + for (i = 0; i < gBagPockets[pocket].capacity; i++) + { + if (gBagPockets[pocket].itemSlots[i].itemId == itemId) + { + if (gBagPockets[pocket].itemSlots[i].quantity + count <= slotCapacity) + return TRUE; + if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET) + return FALSE; + count -= slotCapacity - gBagPockets[pocket].itemSlots[i].quantity; + if (count == 0) + return TRUE; + } + } + + //Check space in empty item slots + if (count > 0) + { + for (i = 0; i < gBagPockets[pocket].capacity; i++) + { + if (gBagPockets[pocket].itemSlots[i].itemId == 0) + { + if (count <= slotCapacity) + return TRUE; + else + count -= slotCapacity; + } + } + if (count > 0) + return FALSE; //No more item slots. The bag is full + } + + return TRUE; +} + +// This function matches if gBagPockets is declared non-const, +// but it should be fixed anyway. +#ifdef NONMATCHING +bool8 AddBagItem(u16 itemId, u16 count) +{ + u8 i; + u8 pocket; + u16 slotCapacity; + struct ItemSlot newItems[64]; + + if (ItemId_GetPocket(itemId) == 0) + return FALSE; + pocket = ItemId_GetPocket(itemId) - 1; + //Copy the bag pocket + memcpy(newItems, gBagPockets[pocket].itemSlots, gBagPockets[pocket].capacity * sizeof(struct ItemSlot)); + if (pocket != BERRIES_POCKET) + slotCapacity = 99; + else + slotCapacity = 999; + + //Use any item slots that already contain this item + for (i = 0; i < gBagPockets[pocket].capacity; i++) + { + if (newItems[i].itemId == itemId) + { + if (newItems[i].quantity + count <= slotCapacity) + { + newItems[i].quantity += count; + //Copy pocket back into the bag. + memcpy(gBagPockets[pocket].itemSlots, newItems, gBagPockets[pocket].capacity * sizeof(struct ItemSlot)); + return TRUE; + } + if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET) + return FALSE; + count -= slotCapacity - newItems[i].quantity; + newItems[i].quantity = slotCapacity; + if (count == 0) + goto copy_items; + } + } + + //Put any remaining items into new item slots. + if (count > 0) + { + for (i = 0; i < gBagPockets[pocket].capacity; i++) + { + if (newItems[i].itemId == 0) + { + newItems[i].itemId = itemId; + if (count <= slotCapacity) + { + newItems[i].quantity = count; + goto copy_items; + } + count -= slotCapacity; + newItems[i].quantity = slotCapacity; + } + } + if (count > 0) + return FALSE; //No more empty item slots. The bag is full. + } + + copy_items: + //Copy pocket back into the bag. + memcpy(gBagPockets[pocket].itemSlots, newItems, gBagPockets[pocket].capacity * sizeof(struct ItemSlot)); + return TRUE; +} +#else +__attribute__((naked)) +bool8 AddBagItem(u16 itemId, u16 count) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + sub sp, 0x100\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + lsls r1, 16\n\ + lsrs r4, r1, 16\n\ + bl ItemId_GetPocket\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080A9510\n\ + mov r0, r8\n\ + bl ItemId_GetPocket\n\ + subs r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + ldr r1, _080A94F8 @ =gBagPockets\n\ + lsls r0, r6, 3\n\ + adds r5, r0, r1\n\ + ldr r1, [r5]\n\ + ldrb r2, [r5, 0x4]\n\ + lsls r2, 2\n\ + mov r0, sp\n\ + bl memcpy\n\ + ldr r7, _080A94FC @ =0x000003e7\n\ + cmp r6, 0x3\n\ + beq _080A9468\n\ + movs r7, 0x63\n\ +_080A9468:\n\ + movs r1, 0\n\ + ldrb r0, [r5, 0x4]\n\ + cmp r1, r0\n\ + bcs _080A94B2\n\ + subs r0, r6, 0x2\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r12, r0\n\ +_080A9478:\n\ + lsls r0, r1, 2\n\ + mov r2, sp\n\ + adds r3, r2, r0\n\ + ldrh r0, [r3]\n\ + cmp r0, r8\n\ + bne _080A94A6\n\ + ldrh r2, [r3, 0x2]\n\ + adds r0, r2, r4\n\ + cmp r0, r7\n\ + ble _080A9500\n\ + mov r0, r12\n\ + cmp r0, 0x1\n\ + bls _080A9510\n\ + subs r0, r7, r2\n\ + subs r0, r4, r0\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + strh r7, [r3, 0x2]\n\ + ldr r2, _080A94F8 @ =gBagPockets\n\ + mov r9, r2\n\ + lsls r3, r6, 3\n\ + cmp r4, 0\n\ + beq _080A9516\n\ +_080A94A6:\n\ + adds r0, r1, 0x1\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + ldrb r0, [r5, 0x4]\n\ + cmp r1, r0\n\ + bcc _080A9478\n\ +_080A94B2:\n\ + ldr r2, _080A94F8 @ =gBagPockets\n\ + mov r9, r2\n\ + lsls r3, r6, 3\n\ + cmp r4, 0\n\ + beq _080A9516\n\ + movs r1, 0\n\ + adds r0, r3, r2\n\ + ldrb r0, [r0, 0x4]\n\ + cmp r1, r0\n\ + bcs _080A94F2\n\ + mov r6, r9\n\ + adds r5, r3, r6\n\ +_080A94CA:\n\ + lsls r0, r1, 2\n\ + mov r6, sp\n\ + adds r2, r6, r0\n\ + ldrh r0, [r2]\n\ + cmp r0, 0\n\ + bne _080A94E6\n\ + mov r0, r8\n\ + strh r0, [r2]\n\ + cmp r4, r7\n\ + bls _080A9514\n\ + subs r0, r4, r7\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + strh r7, [r2, 0x2]\n\ +_080A94E6:\n\ + adds r0, r1, 0x1\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + ldrb r2, [r5, 0x4]\n\ + cmp r1, r2\n\ + bcc _080A94CA\n\ +_080A94F2:\n\ + cmp r4, 0\n\ + beq _080A9516\n\ + b _080A9510\n\ + .align 2, 0\n\ +_080A94F8: .4byte gBagPockets\n\ +_080A94FC: .4byte 0x000003e7\n\ +_080A9500:\n\ + strh r0, [r3, 0x2]\n\ + ldr r0, _080A950C @ =gBagPockets\n\ + lsls r1, r6, 3\n\ + adds r1, r0\n\ + b _080A951A\n\ + .align 2, 0\n\ +_080A950C: .4byte gBagPockets\n\ +_080A9510:\n\ + movs r0, 0\n\ + b _080A9528\n\ +_080A9514:\n\ + strh r4, [r2, 0x2]\n\ +_080A9516:\n\ + mov r6, r9\n\ + adds r1, r3, r6\n\ +_080A951A:\n\ + ldr r0, [r1]\n\ + ldrb r2, [r1, 0x4]\n\ + lsls r2, 2\n\ + mov r1, sp\n\ + bl memcpy\n\ + movs r0, 0x1\n\ +_080A9528:\n\ + add sp, 0x100\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif + +bool8 RemoveBagItem(u16 itemId, u16 count) +{ + u8 i; + u8 pocket; + u16 totalQuantity = 0; + + if (ItemId_GetPocket(itemId) == 0 || itemId == 0) + return FALSE; + pocket = ItemId_GetPocket(itemId) - 1; + + for (i = 0; i < gBagPockets[pocket].capacity; i++) + { + if (gBagPockets[pocket].itemSlots[i].itemId == itemId) + totalQuantity += gBagPockets[pocket].itemSlots[i].quantity; + } + if (totalQuantity < count) + return FALSE; //We don't have enough of the item + + if (gBagPockets[pocket].capacity > gUnknown_02038560 + && gBagPockets[pocket].itemSlots[gUnknown_02038560].itemId == itemId) + { + if (gBagPockets[pocket].itemSlots[gUnknown_02038560].quantity >= count) + { + gBagPockets[pocket].itemSlots[gUnknown_02038560].quantity -= count; + count = 0; + } + else + { + count -= gBagPockets[pocket].itemSlots[gUnknown_02038560].quantity; + gBagPockets[pocket].itemSlots[gUnknown_02038560].quantity = 0; + } + if (gBagPockets[pocket].itemSlots[gUnknown_02038560].quantity == 0) + gBagPockets[pocket].itemSlots[gUnknown_02038560].itemId = 0; + if (count == 0) + return TRUE; + } + + for (i = 0; i < gBagPockets[pocket].capacity; i++) + { + if (gBagPockets[pocket].itemSlots[i].itemId == itemId) + { + if (gBagPockets[pocket].itemSlots[i].quantity >= count) + { + gBagPockets[pocket].itemSlots[i].quantity -= count; + count = 0; + } + else + { + count -= gBagPockets[pocket].itemSlots[i].quantity; + gBagPockets[pocket].itemSlots[i].quantity = 0; + } + if (gBagPockets[pocket].itemSlots[i].quantity == 0) + gBagPockets[pocket].itemSlots[i].itemId = 0; + if (count == 0) + return TRUE; + } + } + return TRUE; +} + +u8 GetPocketByItemId(u16 itemId) +{ + return ItemId_GetPocket(itemId); +} + +void ClearItemSlots(struct ItemSlot *itemSlots, u8 b) +{ + u16 i; + + for (i = 0; i < b; i++) + { + itemSlots[i].itemId = 0; + itemSlots[i].quantity = 0; + } +} + +static s32 FindFreePCItemSlot(void) +{ + s8 i; + + for (i = 0; i < 50; i++) + { + if (gSaveBlock1.pcItems[i].itemId == 0) + return i; + } + return -1; +} + +u8 CountUsedPCItemSlots(void) +{ + u8 usedSlots = 0; + u8 i; + + for (i = 0; i < 50; i++) + { + if (gSaveBlock1.pcItems[i].itemId != 0) + usedSlots++; + } + return usedSlots; +} + +bool8 CheckPCHasItem(u16 itemId, u16 count) +{ + u8 i; + + for (i = 0; i < 50; i++) + { + if (gSaveBlock1.pcItems[i].itemId == itemId && gSaveBlock1.pcItems[i].quantity >= count) + return TRUE; + } + return FALSE; +} + +bool8 AddPCItem(u16 itemId, u16 count) +{ + u8 i; + s8 freeSlot; + struct ItemSlot newItems[50]; + + //Copy PC items + memcpy(newItems, gSaveBlock1.pcItems, sizeof(newItems)); + + //Use any item slots that already contain this item + for (i = 0; i < 50; i++) + { + if (newItems[i].itemId == itemId) + { + if (newItems[i].quantity + count <= 999) + { + newItems[i].quantity += count; + memcpy(gSaveBlock1.pcItems, newItems, sizeof(gSaveBlock1.pcItems)); + return TRUE; + } + count += newItems[i].quantity - 999; + newItems[i].quantity = 999; + if (count == 0) + { + memcpy(gSaveBlock1.pcItems, newItems, sizeof(gSaveBlock1.pcItems)); + return TRUE; + } + } + } + + //Put any remaining items into a new item slot. + if (count > 0) + { + freeSlot = FindFreePCItemSlot(); + if (freeSlot == -1) + return FALSE; + newItems[freeSlot].itemId = itemId; + newItems[freeSlot].quantity = count; + } + + //Copy items back to the PC + memcpy(gSaveBlock1.pcItems, newItems, sizeof(gSaveBlock1.pcItems)); + return TRUE; +} + +void RemovePCItem(u8 index, u16 count) +{ + gSaveBlock1.pcItems[index].quantity -= count; + if (gSaveBlock1.pcItems[index].quantity == 0) + { + gSaveBlock1.pcItems[index].itemId = 0; + CompactPCItems(); + } +} + +static void CompactPCItems(void) +{ + u16 i; + u16 j; + + for (i = 0; i < 49; i++) + { + for (j = i + 1; j <= 49; j++) + { + if (gSaveBlock1.pcItems[i].itemId == 0) + { + struct ItemSlot temp = gSaveBlock1.pcItems[i]; + gSaveBlock1.pcItems[i] = gSaveBlock1.pcItems[j]; + gSaveBlock1.pcItems[j] = temp; + } + } + } +} + +void SwapRegisteredBike(void) +{ + switch (gSaveBlock1.registeredItem) + { + case 0x103: + gSaveBlock1.registeredItem = 0x110; + break; + case 0x110: + gSaveBlock1.registeredItem = 0x103; + break; + } +} + +static u16 SanitizeItemId(u16 itemId) +{ + if (itemId > 0x15C) + return 0; + else + return itemId; +} + +const struct Item *ItemId_GetItem(u16 itemId) +{ + return &gItems[SanitizeItemId(itemId)]; +} + +u16 ItemId_GetId(u16 itemId) +{ + return gItems[SanitizeItemId(itemId)].itemId; +} + +u16 ItemId_GetPrice(u16 itemId) +{ + return gItems[SanitizeItemId(itemId)].price; +} + +u8 ItemId_GetHoldEffect(u16 itemId) +{ + return gItems[SanitizeItemId(itemId)].holdEffect; +} + +u8 ItemId_GetHoldEffectParam(u16 itemId) +{ + return gItems[SanitizeItemId(itemId)].holdEffectParam; +} + +const u8 *ItemId_GetDescription(u16 itemId) +{ + return gItems[SanitizeItemId(itemId)].description; +} + +bool32 ItemId_CopyDescription(u8 *a, u32 itemId, u32 c) +{ + u32 r5 = c + 1; + const u8 *description = gItems[SanitizeItemId(itemId)].description; + u8 *str = a; + + for (;;) + { + if (*description == 0xFF || *description == 0xFE) + { + r5--; + if (r5 == 0) + { + *str = 0xFF; + return TRUE; + } + if (*description == 0xFF) + return FALSE; + str = a; + description++; + } + else + *(str++) = *(description++); + } +} + +u8 ItemId_GetImportance(u16 itemId) +{ + return gItems[SanitizeItemId(itemId)].importance; +} + +u8 ItemId_GetUnknownValue(u16 itemId) +{ + return gItems[SanitizeItemId(itemId)].unk19; +} + +u8 ItemId_GetPocket(u16 itemId) +{ + return gItems[SanitizeItemId(itemId)].pocket; +} + +u8 ItemId_GetType(u16 itemId) +{ + return gItems[SanitizeItemId(itemId)].type; +} + +ItemUseFunc ItemId_GetFieldFunc(u16 itemId) +{ + return gItems[SanitizeItemId(itemId)].fieldUseFunc; +} + +u8 ItemId_GetBattleUsage(u16 itemId) +{ + return gItems[SanitizeItemId(itemId)].battleUsage; +} + +ItemUseFunc ItemId_GetBattleFunc(u16 itemId) +{ + return gItems[SanitizeItemId(itemId)].battleUseFunc; +} + +u8 ItemId_GetSecondaryId(u16 itemId) +{ + return gItems[SanitizeItemId(itemId)].secondaryId; +} diff --git a/src/field/item_menu.c b/src/field/item_menu.c new file mode 100644 index 000000000..350ba3db4 --- /dev/null +++ b/src/field/item_menu.c @@ -0,0 +1,4583 @@ +#include "global.h" +#include "berry.h" +#include "berry_tag_screen.h" +#include "data2.h" +#include "decompress.h" +#include "field_effect.h" +#include "field_map_obj_helpers.h" +#include "field_player_avatar.h" +#include "graphics.h" +#include "item.h" +#include "items.h" +#include "item_menu.h" +#include "item_use.h" +#include "link.h" +#include "mail_data.h" +#include "main.h" +#include "map_name_popup.h" +#include "menu.h" +#include "menu_cursor.h" +#include "menu_helpers.h" +#include "money.h" +#include "palette.h" +#include "party_menu.h" +#include "player_pc.h" +#include "pokemon_menu.h" +#include "rom4.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "strings.h" +#include "strings2.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "unknown_task.h" + +// External stuff +extern u8 ewram[]; +extern void gpu_pal_allocator_reset__manage_upper_four(void); +extern void sub_80F9020(void); +extern void sub_80F9988(); +extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16); +extern void PauseVerticalScrollIndicator(); +extern u8 sub_80F9284(void); +extern void sub_808B5B4(); +extern u8 sub_80F92F4(); +extern void sub_80C9C7C(u8); +extern void pal_fill_black(void); +extern bool8 sub_807D770(void); +extern u8 sub_80F931C(); +extern void sub_808A3F8(u8); +extern void sub_80B3050(void); +extern void sub_80546B8(u8); +extern void sub_804E990(u8); +extern void sub_802E424(u8); +extern void sub_8064E2C(void); + +struct PocketScrollState +{ + u8 cursorPos; + u8 scrollTop; + u8 numSlots; + u8 cursorMax; +}; + +struct UnknownStruct2 +{ + u8 unk0; + u8 textLine; + u8 unk2; +}; + +struct UnknownStruct3 +{ + u8 unk0; + u8 unk1; + u8 unk2; +}; + +struct UnknownStruct4 +{ + u8 unk0; + u8 unk1; + u16 unk2; + const u8 *unk4; + TaskFunc unk8; +}; + +struct UnknownStruct5 +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; +}; + +struct UnknownStruct6 +{ + u8 unk0; +}; + +enum +{ + BAG_POCKET_ITEMS, // 0 + BAG_POCKET_POKE_BALLS, // 1 + BAG_POCKET_TMs_HMs, // 2 + BAG_POCKET_BERRIES, // 3 + BAG_POCKET_KEY_ITEMS, // 4 +}; + +enum +{ + RETURN_TO_FIELD_0, + RETURN_TO_BATTLE, + RETURN_TO_PKMN_LIST, + RETURN_TO_SHOP, + RETURN_TO_FIELD_4, + RETURN_TO_FIELD_5, + RETURN_TO_PC, + RETURN_TO_WALLY_BATTLE, +}; + +enum +{ + ITEM_ACTION_USE_0, // 0 + ITEM_ACTION_TOSS, // 1 + ITEM_ACTION_CANCEL_2, // 2 + ITEM_ACTION_REGISTER, // 3 + ITEM_ACTION_USE_4, // 4 + ITEM_ACTION_CANCEL_5, // 5 + ITEM_ACTION_GIVE, // 6 + ITEM_ACTION_CHECK_TAG, // 7 + ITEM_ACTION_NONE, // 8 + ITEM_ACTION_CONFIRM, // 9 +}; + +// ewram +EWRAM_DATA static struct UnknownStruct2 gUnknown_0203853C = {0}; +EWRAM_DATA static struct UnknownStruct3 gUnknown_02038540 = {0}; +EWRAM_DATA static struct UnknownStruct4 gUnknown_02038544 = {0}; +EWRAM_DATA static struct UnknownStruct5 gUnknown_02038550 = {0}; +EWRAM_DATA static struct UnknownStruct6 gUnknown_02038554 = {0}; // There are 3 bytes of padding after this, so I assume it's a struct +EWRAM_DATA static u8 gUnknown_02038558 = 0; +EWRAM_DATA static s8 sCurrentBagPocket = 0; +EWRAM_DATA static u8 gUnknown_0203855A = 0; +EWRAM_DATA static s8 gUnknown_0203855B = 0; +EWRAM_DATA static s8 gUnknown_0203855C = 0; +EWRAM_DATA u16 gScriptItemId = 0; +EWRAM_DATA u8 gUnknown_02038560 = 0; +EWRAM_DATA u8 gUnknown_02038561 = 0; +EWRAM_DATA static u8 gUnknown_02038562 = 0; +EWRAM_DATA static u8 gUnknown_02038563 = 0; +EWRAM_DATA static u8 gUnknown_02038564 = 0; +EWRAM_DATA static u8 sPokeballSpriteId ALIGNED(4) = 0; // HACK: why is there a space before this variable? + +// bss +static u8 sPopupMenuSelection; +static u8 sReturnLocation; +static const u8 *sPopupMenuActionList; + +// common +void (*gUnknown_03005D00)(u8) = NULL; +extern u16 gUnknown_030041B4; +extern struct PocketScrollState gBagPocketScrollStates[]; +extern struct ItemSlot *gCurrentBagPocketItemSlots; // selected pocket item slots +extern const u8 Event_NoRegisteredItem[]; + +#define ewramBerryPic (ewram + 0) +#define ewramBerryPicTemp (ewram + 0x1000) +#define ewramSavedItemsPocket ((struct ItemSlot *)(ewram + 0x1E000)) // saved items pocket (for Wally battle) +#define ewramSavedPokeballsPocket ((struct ItemSlot *)(ewram + 0x1F000)) // saved Pokeballs pocket (for Wally battle) +#define ewramBagSetupStep (ewram[0x1FFFF]) + +extern const struct CompressedSpriteSheet sMaleBagSpriteSheet; +extern const struct CompressedSpriteSheet sFemaleBagSpriteSheet; +extern const struct CompressedSpritePalette sBagSpritePalette; + +const struct BagPocket gBagPockets[NUM_BAG_POCKETS] = +{ + {gSaveBlock1.bagPocket_Items, 20}, + {gSaveBlock1.bagPocket_PokeBalls, 16}, + {gSaveBlock1.bagPocket_TMHM, 64}, + {gSaveBlock1.bagPocket_Berries, 46}, + {gSaveBlock1.bagPocket_KeyItems, 20}, +}; + +static void HandlePopupMenuAction_UseOnField(u8); +static void HandlePopupMenuAction_Toss(u8); +static void sub_80A5F80(u8); +static void HandlePopupMenuAction_Register(u8); +static void HandlePopupMenuAction_UseInBattle(u8); +static void sub_80A7124(u8); +static void HandlePopupMenuAction_Give(u8); +static void HandlePopupMenuAction_CheckTag(u8); +static void HandlePopupMenuAction_Confirm(u8); + +static const struct MenuAction2 sItemPopupMenuActions[] = +{ + {OtherText_Use, HandlePopupMenuAction_UseOnField}, + {OtherText_Toss, HandlePopupMenuAction_Toss}, + {gOtherText_CancelNoTerminator, sub_80A5F80}, + {OtherText_Register, HandlePopupMenuAction_Register}, + {OtherText_Use, HandlePopupMenuAction_UseInBattle}, + {gOtherText_CancelNoTerminator, sub_80A7124}, + {OtherText_Give2, HandlePopupMenuAction_Give}, + {OtherText_CheckTag, HandlePopupMenuAction_CheckTag}, + {gOtherText_CancelWithTerminator, NULL}, + {OtherText_Confirm, HandlePopupMenuAction_Confirm}, +}; + +static const u8 sItemPopupMenuChoicesTable[][6] = +{ + [BAG_POCKET_ITEMS] = + { + ITEM_ACTION_USE_0, + ITEM_ACTION_TOSS, + ITEM_ACTION_GIVE, + ITEM_ACTION_CANCEL_2, + }, + + [BAG_POCKET_POKE_BALLS] = + { + ITEM_ACTION_GIVE, + ITEM_ACTION_TOSS, + ITEM_ACTION_NONE, + ITEM_ACTION_CANCEL_2, + }, + + [BAG_POCKET_TMs_HMs] = + { + ITEM_ACTION_USE_0, + ITEM_ACTION_NONE, + ITEM_ACTION_GIVE, + ITEM_ACTION_CANCEL_2, + }, + + [BAG_POCKET_BERRIES] = + { + ITEM_ACTION_CHECK_TAG, + ITEM_ACTION_USE_0, + ITEM_ACTION_TOSS, + ITEM_ACTION_NONE, + ITEM_ACTION_GIVE, + ITEM_ACTION_CANCEL_2 + }, + + [BAG_POCKET_KEY_ITEMS] = + { + ITEM_ACTION_USE_0, + ITEM_ACTION_NONE, + ITEM_ACTION_REGISTER, + ITEM_ACTION_CANCEL_2, + }, +}; + +const u8 gUnknown_083C16AE[][2] = +{ + {6, 2}, + {6, 2}, + {6, 2}, + {6, 2}, + {2, 0}, +}; + +const u8 gUnknown_083C16B8[] = {7, 9, 8, 2}; + +static void OnItemSelect_Field05(u8); +static void OnBagClose_Field0(u8); +static void OnBagClose_PkmnList(u8); +static void OnItemSelect_PkmnList(u8); +static void OnBagClose_Shop(u8); +static void OnItemSelect_Shop(u8); +static void OnBagClose_Field4(u8); +static void OnItemSelect_Field4(u8); +static void OnBagClose_Field5(u8); +static void OnBagClose_PC(u8); +static void OnItemSelect_PC(u8); +static void OnItemSelect_Battle(u8); +static void OnBagClose_Battle(u8); + +static const struct {TaskFunc onItemSelect; TaskFunc onBagClose;} gUnknown_083C16BC[] = +{ + [RETURN_TO_FIELD_0] = {OnItemSelect_Field05, OnBagClose_Field0}, + [RETURN_TO_BATTLE] = {OnItemSelect_Battle, OnBagClose_Battle}, + [RETURN_TO_PKMN_LIST] = {OnItemSelect_PkmnList, OnBagClose_PkmnList}, + [RETURN_TO_SHOP] = {OnItemSelect_Shop, OnBagClose_Shop}, + [RETURN_TO_FIELD_4] = {OnItemSelect_Field4, OnBagClose_Field4}, + [RETURN_TO_FIELD_5] = {OnItemSelect_Field05, OnBagClose_Field5}, + [RETURN_TO_PC] = {OnItemSelect_PC, OnBagClose_PC}, +}; + +static void sub_80A5E60(u8); +static void sub_80A5E90(u8); + +static const struct YesNoFuncTable gUnknown_083C16F4 = {sub_80A5E60, sub_80A5E90}; + +static void sub_80A65AC(u8); +static void sub_80A6618(u8); + +const struct YesNoFuncTable gUnknown_083C16FC = {sub_80A65AC, sub_80A6618}; + +void sub_80A34E8(void); +static bool8 LoadBagGraphicsMultistep(void); +static void sub_80A362C(void); +static void sub_80A3740(void); +static void sub_80A396C(u16 *, u8, u8, u8); +static void sub_80A39B8(u16 *, u8); +static void sub_80A39E4(u16 *, u8, u8, s8); +static void DrawPocketIndicatorDots(u16 *, u8); +static void SortItemSlots(struct BagPocket); +static void UpdateAllBagPockets(void); +static void sub_80A3D24(u8); +static void sub_80A3D40(void); +static void RemoveSelectIconFromRegisteredItem(void); +static void sub_80A48E8(u16, int, int); +static void ItemListMenu_InitDescription(s16); +static void ItemListMenu_ChangeDescription(s16, int); +static void sub_80A4F68(u8); +static void sub_80A50C8(u8); +static void sub_80A5AE4(u8); +static void sub_80A5BF8(u8); +static void Task_CallItemUseOnFieldCallback(u8); +static void sub_80A6444(u8); +static void sub_80A648C(u8); +static void Task_BuyHowManyDialogueHandleInput(u8); +static void BuyMenuPrintItemQuantityAndPrice(u8); +static void BuyMenuDisplayMessage(u16, u16); +static void sub_80A683C(void); +static void sub_80A6870(u16, u8); +static void sub_80A699C(void); +static void sub_80A7230(u8); +static void ItemListMenu_InitMenu(void); +static void sub_80A73C0(void); +static void sub_80A73F0(void); +static void sub_80A73FC(void); +static void sub_80A740C(void); +static void sub_80A7420(void); +static void sub_80A751C(void); +static void sub_80A7528(u8); +static void sub_80A7590(void); +static void sub_80A75E4(void); +static void sub_80A7630(void); +static void sub_80A763C(void); +static void sub_80A76A0(void); +static void sub_80A770C(void); +static void DisplayCannotUseItemMessage(int, const u8 *, TaskFunc, int); +static void sub_80A7768(void); +static void sub_80A7828(void); +static void sub_80A7834(int, int); +static bool32 sub_80A78A0(void); +static void sub_80A78B8(void); +static bool32 sub_80A78C4(void); +static void sub_80A78E8(void); +static int sub_80A78F4(void); +static void sub_80A7918(void); +static int sub_80A7924(void); +static int sub_80A7958(void); +static void sub_80A7970(void); +static void sub_80A797C(void); +static int sub_80A7988(void); +static void sub_80A79B4(struct Sprite *); +static void sub_80A79EC(struct Sprite *); +static void sub_80A7A94(struct Sprite *); +static void sub_80A7AE4(struct Sprite *); +static void CreateBagSprite(void); +static void sub_80A7B6C(struct Sprite *); +static void CreateBagPokeballSprite(u8); +static void sub_80A7C64(void); + +static void sub_80A3118(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTasks(); + sub_80A740C(); + UpdatePaletteFade(); +} + +static void sub_80A3134(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + + { + const void *src = gBGTilemapBuffers[1]; + void *dst = (void *)(VRAM + 0x2000); + + DmaCopy16(3, src, dst, 0x800); + } + + { + const void *src = gBGTilemapBuffers[2]; + void *dst = (void *)(VRAM + 0x6000); + + DmaCopy16(3, src, dst, 0x800); + } +} + +static bool8 SetupBagMultistep(void) +{ + u32 index; + u16 savedIme; + + switch (gMain.state) + { + case 0: + sub_80F9438(); + sub_80A34E8(); + gMain.state++; + break; + case 1: + remove_some_task(); + gMain.state++; + break; + case 2: + gpu_pal_allocator_reset__manage_upper_four(); + gMain.state++; + break; + case 3: + sub_80F9020(); + ewramBagSetupStep = 0; + gMain.state++; + break; + case 4: + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = TRUE; + gMain.state++; + break; + case 5: + ResetSpriteData(); + gMain.state++; + break; + case 6: + if (LoadBagGraphicsMultistep() == FALSE) + break; + gMain.state++; + break; + case 7: + SetUpWindowConfig(&gWindowConfig_81E6DFC); + gMain.state++; + break; + case 8: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6DFC); + gMain.state++; + break; + case 9: + if (!MultistepInitMenuWindowContinue()) + break; + gMain.state++; + break; + case 10: + sub_80F944C(); + LoadScrollIndicatorPalette(); + CreateVerticalScrollIndicators(0, 172, 12); + CreateVerticalScrollIndicators(1, 172, 148); + CreateVerticalScrollIndicators(2, 28, 88); + CreateVerticalScrollIndicators(3, 100, 88); + sub_80F9988(0, 2); + sub_80F9988(1, 2); + sub_80F9988(2, 2); + sub_80F9988(3, 2); + if (sReturnLocation == RETURN_TO_FIELD_4 || sReturnLocation == RETURN_TO_FIELD_5) + { + sub_80F979C(2, 1); + sub_80F979C(3, 1); + } + gMain.state++; + break; + case 11: + gUnknown_0203855A = 16; + sub_80A39B8(gBGTilemapBuffers[2], sCurrentBagPocket + 1); + DrawPocketIndicatorDots(gBGTilemapBuffers[2], sCurrentBagPocket); + UpdateAllBagPockets(); + SortItemSlots(gBagPockets[2]); + SortItemSlots(gBagPockets[3]); + sub_80A3D40(); + gCurrentBagPocketItemSlots = gBagPockets[sCurrentBagPocket].itemSlots; + sub_80A362C(); + gMain.state++; + break; + case 12: + sub_80A48E8(0xFFFF, 0, 7); + index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; + ItemListMenu_InitDescription(gCurrentBagPocketItemSlots[index].itemId); + ItemListMenu_InitMenu(); + gUnknown_0203855B = sCurrentBagPocket + 1; + gUnknown_0203855C = 0; + gMain.state++; + break; + case 13: + CreateBagSprite(); + CreateBagPokeballSprite(0); + sub_80A3740(); + gMain.state++; + break; + case 14: + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + gPaletteFade.bufferTransferDisabled = FALSE; + gMain.state++; + break; + case 15: + if (sub_8055870() == TRUE) + break; + gMain.state++; + break; + case 16: + SetVBlankCallback(sub_80A3134); + SetMainCallback2(sub_80A3118); + sub_80A751C(); + sub_80A7630(); + sub_80A770C(); + sub_80A7828(); + sub_80A78B8(); + return TRUE; + } + return FALSE; +} + +static bool8 sub_80A34B4(void) +{ + while (1) + { + if (SetupBagMultistep() == TRUE) + { + sPopupMenuSelection = 0; + ResetTasks(); + return TRUE; + } + if (sub_80F9344() == TRUE) + break; + } + return FALSE; +} + + +void sub_80A34E8(void) +{ + sub_80F9368(); + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(12) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(4) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + REG_BLDCNT = 0; +} + +static bool8 LoadBagGraphicsMultistep(void) +{ + switch (ewramBagSetupStep) + { + case 0: + LZDecompressVram(gBagScreen_Gfx, (void *)(VRAM + 0x4000)); + ewramBagSetupStep++; + break; + case 1: + CpuCopy16(gUnknown_08E77004, gBGTilemapBuffers[2], 0x800); + ewramBagSetupStep++; + break; + case 2: + if (gSaveBlock2.playerGender == MALE || sReturnLocation == RETURN_TO_WALLY_BATTLE) + LoadCompressedPalette(gBagScreenMale_Pal, 0, 64); + else + LoadCompressedPalette(gBagScreenFemale_Pal, 0, 64); + ewramBagSetupStep++; + break; + case 3: + if (gSaveBlock2.playerGender == MALE || sReturnLocation == RETURN_TO_WALLY_BATTLE) + LoadCompressedObjectPic(&sMaleBagSpriteSheet); + else + LoadCompressedObjectPic(&sFemaleBagSpriteSheet); + ewramBagSetupStep++; + break; + case 4: + LoadCompressedObjectPalette(&sBagSpritePalette); + ewramBagSetupStep = 0; + return TRUE; + } + return FALSE; +} + +static void sub_80A362C(void) +{ + u8 i; + + for (i = 0; i < 5; i++) + { + u8 r3; + + if (sReturnLocation == RETURN_TO_FIELD_5) + r3 = gBagPocketScrollStates[i].numSlots - 1; + else + r3 = gBagPocketScrollStates[i].numSlots; + + if (gBagPocketScrollStates[i].scrollTop != 0) + { + if (gBagPocketScrollStates[i].scrollTop + gBagPocketScrollStates[i].cursorMax > r3) + gBagPocketScrollStates[i].scrollTop = r3 - gBagPocketScrollStates[i].cursorMax; + } + else + { + if (gBagPocketScrollStates[i].cursorPos > r3) + gBagPocketScrollStates[i].cursorPos = r3; + } + } +} + +void ResetBagScrollPositions(void) +{ + u16 i; + + for (i = 0; i < NUM_BAG_POCKETS; i++) + { + gBagPocketScrollStates[i].cursorPos = 0; + gBagPocketScrollStates[i].scrollTop = 0; + gBagPocketScrollStates[i].numSlots = 0; + gBagPocketScrollStates[i].cursorMax = 0; + } + sCurrentBagPocket = 0; +} + +static void sub_80A36B8(u16 *a, u8 b, u8 c, u8 d, u8 e) +{ + u16 i; + u16 j; + + for (i = c; i <= c + e; i++) + { + for (j = b; j <= b + d; j++) + { + u32 index = j + i * 32; + + a[index] = 0; + } + } +} + +void ClearBag(void) +{ + u16 i; + + for (i = 0; i < NUM_BAG_POCKETS; i++) + ClearItemSlots(gBagPockets[i].itemSlots, gBagPockets[i].capacity); + ResetBagScrollPositions(); +} + +static void sub_80A3740(void) +{ + const u16 colors[2] = {RGB(14, 15, 16), RGB_WHITE}; + + LoadPalette(&colors[1], 0xD1, sizeof(colors[1])); + LoadPalette(&colors[0], 0xD8, sizeof(colors[0])); +} + +static void sub_80A3770(void) +{ + if (sReturnLocation == RETURN_TO_FIELD_0) + { + sPopupMenuActionList = sItemPopupMenuChoicesTable[sCurrentBagPocket]; + if (sCurrentBagPocket != BAG_POCKET_BERRIES) + gUnknown_02038564 = 4; + else + gUnknown_02038564 = 6; + } +} + +static void sub_80A37C0(u8 taskId) +{ + gTasks[taskId].func = sub_80A50C8; + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + StartVerticalScrollIndicators(2); + StartVerticalScrollIndicators(3); +} + +static void sub_80A37F8(u8 taskId) +{ + u8 r5 = gUnknown_0203855A; + + if (r5 < 16) + { + gUnknown_0203855A++; + sub_80A396C(gBGTilemapBuffers[2], r5, gUnknown_0203855A, 0x4F); + sub_80A39E4(gBGTilemapBuffers[2], sCurrentBagPocket + 1, gUnknown_0203855A / 2, gTasks[taskId].data[5]); + gUnknown_02038558 = 1; + sub_80A48E8(taskId, r5 / 2, gUnknown_0203855A / 2 - 1); + gUnknown_02038558 = 0; + return; + } + + if (gLinkOpen == TRUE) + { + u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; + + ItemListMenu_ChangeDescription(gCurrentBagPocketItemSlots[index].itemId, gUnknown_02038562); + gUnknown_02038562++; + } + else + { + while (gUnknown_02038562 < 3) + { + u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; + + ItemListMenu_ChangeDescription(gCurrentBagPocketItemSlots[index].itemId, gUnknown_02038562); + gUnknown_02038562++; + } + } + if (gUnknown_02038562 == 3) + { + gUnknown_0203855A = 16; + gUnknown_0203855B = sCurrentBagPocket + 1; + sub_80A37C0(FindTaskIdByFunc(sub_80A4F68)); + DestroyTask(taskId); + ItemListMenu_InitMenu(); + sub_80F979C(2, 0); + sub_80F979C(3, 0); + } +} + +static void sub_80A3954(u16 *a) +{ + CpuCopy16(gUnknown_08E77004, a, 0x800); +} + +static void sub_80A396C(u16 *a, u8 b, u8 c, u8 d) +{ + u16 *dst = a + 14 + (b + 2) * 32; + u16 i; + + while (c > b++) + { + for (i = 0; i < 15; i++) + dst[i] = d; + dst += 32; + } +} + +static void sub_80A39B8(u16 *a, u8 b) +{ + u8 var = b * 2; + + sub_809D104(a, 4, 10, gUnknown_08E96EC8, 0, var, 8, 2); +} + +static void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d) +{ + u16 r2 = b * 2; + u16 r7; + + if (d == -1) + { + r7 = (b + 1) * 2; + if (b == 5) + r7 = 2; + + sub_809D104(a, 4, 10, gUnknown_08E96EC8, 8 - c, r2, c, 2); + sub_809D104(a, c + 4, 10, gUnknown_08E96EC8, 0, r7, 8 - c, 2); + } + else if (d == 1) + { + r7 = (b - 1) * 2; + if (b == 1) + r7 = 10; + + sub_809D104(a, 4, 10, gUnknown_08E96EC8, c, r7, 8 - c, 2); + sub_809D104(a, 12 - c, 10, gUnknown_08E96EC8, 0, r2, c, 2); + } +} + +// Draws dots under the bag sprite, showing which pocket is selected +static void DrawPocketIndicatorDots(u16 *tileMapBuffer, u8 selectedPocket) +{ + u8 i; + + for (i = 0; i < NUM_BAG_POCKETS; i++) + { + if (i == selectedPocket) + tileMapBuffer[0x125 + i] = 0x107D; + else + tileMapBuffer[0x125 + i] = 0x107C; + } +} + +static void ChangePocket(u16 *tileMapBuffer, s8 delta) +{ + u8 taskId; + + sCurrentBagPocket += delta; + // Wrap around + if (sCurrentBagPocket >= NUM_BAG_POCKETS) + sCurrentBagPocket = 0; + if (sCurrentBagPocket < 0) + sCurrentBagPocket = NUM_BAG_POCKETS - 1; + + sub_80A76A0(); + sub_80A7590(); + gCurrentBagPocketItemSlots = gBagPockets[sCurrentBagPocket].itemSlots; + sub_80A3D24(sCurrentBagPocket); + gUnknown_0203855A = 0; + sub_80A3954(tileMapBuffer); + sub_80A396C(tileMapBuffer, 0, 16, 3); + sub_80A39B8(tileMapBuffer, 0); + gUnknown_0203855B = 6; + gUnknown_02038562 = 0; + taskId = FindTaskIdByFunc(sub_80A37F8); + if (taskId == 0xFF) + taskId = CreateTask(sub_80A37F8, 8); + gTasks[taskId].data[5] = delta; +} + +static void SwapItemSlots(struct ItemSlot *a, struct ItemSlot *b) +{ + struct ItemSlot temp = *a; + + *a = *b; + *b = temp; +} + +static void RemoveEmptyItemSlots(struct BagPocket pocket) +{ + u16 i; + u16 j; + + for (i = 0; i < pocket.capacity - 1; i++) + { + for (j = i + 1; j < pocket.capacity; j++) + { + if (pocket.itemSlots[i].quantity == 0) + SwapItemSlots(&pocket.itemSlots[i], &pocket.itemSlots[j]); + } + } +} + +static void SortItemSlots(struct BagPocket pocket) +{ + u16 i; + u16 j; + + for (i = 0; i < pocket.capacity; i++) + { + for (j = i + 1; j < pocket.capacity; j++) + { + if (pocket.itemSlots[i].quantity != 0 && pocket.itemSlots[j].quantity != 0 + && pocket.itemSlots[i].itemId > pocket.itemSlots[j].itemId) + SwapItemSlots(&pocket.itemSlots[i], &pocket.itemSlots[j]); + } + } +} + +static void UpdateBagPocket(u8 pocketNum) +{ + u16 i; + + gBagPocketScrollStates[pocketNum].numSlots = 0; + for (i = 0; i < gBagPockets[pocketNum].capacity; i++) + { + if (gBagPockets[pocketNum].itemSlots[i].quantity != 0) + gBagPocketScrollStates[pocketNum].numSlots++; + } + RemoveEmptyItemSlots(gBagPockets[pocketNum]); +} + +static void UpdateAllBagPockets(void) +{ + u8 i; + + for (i = 0; i < NUM_BAG_POCKETS; i++) + UpdateBagPocket(i); +} + +static void sub_80A3D24(u8 pocketNum) +{ + if (gBagPocketScrollStates[pocketNum].numSlots >= 7) + gBagPocketScrollStates[pocketNum].cursorMax = 7; + else + gBagPocketScrollStates[pocketNum].cursorMax = gBagPocketScrollStates[pocketNum].numSlots; +} + +static void sub_80A3D40(void) +{ + u8 i; + + for (i = 0; i < NUM_BAG_POCKETS; i++) + sub_80A3D24(i); +} + +static void sub_80A3D5C(u8 taskId) +{ + u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; + + gCurrentBagPocketItemSlots[index].quantity -= gTasks[taskId].data[1]; + if (gCurrentBagPocketItemSlots[index].quantity == 0) // item slot will be removed if the quantity is zero + { + // Un-register the item if registered + if (gSaveBlock1.registeredItem == gCurrentBagPocketItemSlots[index].itemId) + { + RemoveSelectIconFromRegisteredItem(); + gSaveBlock1.registeredItem = ITEM_NONE; + } + + gCurrentBagPocketItemSlots[index].itemId = ITEM_NONE; + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 7 == gBagPocketScrollStates[sCurrentBagPocket].numSlots + && gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) + gBagPocketScrollStates[sCurrentBagPocket].scrollTop--; + UpdateBagPocket(sCurrentBagPocket); + } + sub_80A3D24(sCurrentBagPocket); +} + +void sub_80A3E0C(void) +{ + u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; + + if (gCurrentBagPocketItemSlots[index].quantity == 0) + { + gCurrentBagPocketItemSlots[index].itemId = 0; + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 7 == gBagPocketScrollStates[sCurrentBagPocket].numSlots + && gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) + gBagPocketScrollStates[sCurrentBagPocket].scrollTop--; + UpdateBagPocket(sCurrentBagPocket); + } + sub_80A3D24(sCurrentBagPocket); +} + +static void nullsub_16(void) +{ +} + +static void sub_80A3E70(u8 a, u8 b) +{ + struct ItemSlot temp = gCurrentBagPocketItemSlots[a]; + + gCurrentBagPocketItemSlots[a] = gCurrentBagPocketItemSlots[b]; + gCurrentBagPocketItemSlots[b] = temp; +} + +static void sub_80A3E90(u8 taskId) +{ + PlaySE(SE_SELECT); + nullsub_16(); + sub_80A3E70( + gTasks[taskId].data[10] - 1, + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + gBagPocketScrollStates[sCurrentBagPocket].scrollTop); + gTasks[taskId].data[10] = 0; + sub_80A763C(); + sub_80A7528(0); + ItemListMenu_InitMenu(); +} + +static void sub_80A3EF4(u8 taskId) +{ + u8 r2; + + PlaySE(SE_SELECT); + nullsub_16(); + r2 = gTasks[taskId].data[10] - gBagPocketScrollStates[sCurrentBagPocket].scrollTop - 1; + gTasks[taskId].data[10] = 0; + if (r2 < 8) + sub_80A48E8(taskId, r2, r2); + sub_80A7528(0); +} + +static void sub_80A3F50(u8 taskId) +{ + gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); + sub_80A7528(1); +} + +void sub_80A3FA0(u16 *a, u8 b, u8 c, u8 d, u8 e, u16 f) +{ + s16 i; + s16 j; + + for (i = c; i < c + e; i++) + { + for (j = b; j < b + d; j++) + { + u32 index = j + i * 32; + + a[index] = f; + } + } +} + +static void sub_80A4008(u16 *a, u8 b, u8 c, u8 d, u8 e) +{ + sub_80A3FA0(a, b, c, d, e, 1); +} + +static void DrawSelectIcon(u32 itemPos) +{ + u16 *ptr1 = gBGTilemapBuffers[2] + 0x5A; + + ptr1 += itemPos * 64; + ptr1[0] = 0x5A; + ptr1[1] = 0x5B; + ptr1[2] = 0x5C; + ptr1[32] = 0x6A; + ptr1[33] = 0x6B; + ptr1[34] = 0x6C; +} + +static void MoveSelectIcon(u8 itemPos) +{ + u16 i; + u16 *ptr; + + ptr = gBGTilemapBuffers[2] + 0x5A; + for (i = 0; i < 16; i++) + { + ptr[0] = 0x4F; + ptr[1] = 0x4F; + ptr[2] = 0x4F; + ptr += 32; + } + + ptr = gBGTilemapBuffers[2] + 0x5A + itemPos * 64; + ptr[0] = 0x5A; + ptr[1] = 0x5B; + ptr[2] = 0x5C; + ptr[32] = 0x6A; + ptr[33] = 0x6B; + ptr[34] = 0x6C; +} + +static void EraseSelectIcon(u8 itemPos) +{ + u16 *ptr = gBGTilemapBuffers[2] + 0x5A; + + ptr += itemPos * 64; + ptr[0] = 0x4F; + ptr[1] = 0x4F; + ptr[2] = 0x4F; + ptr[32] = 0x4F; + ptr[33] = 0x4F; + ptr[34] = 0x4F; +} + +static void RemoveSelectIconFromRegisteredItem(void) +{ + u8 i; + + for (i = 0; i < 8; i++) + { + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i == gBagPocketScrollStates[sCurrentBagPocket].numSlots) + break; + if (gCurrentBagPocketItemSlots[gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i].itemId == gSaveBlock1.registeredItem) + { + EraseSelectIcon(i); + break; + } + } +} + +static void AddSelectIconToRegisteredItem(void) +{ + RemoveSelectIconFromRegisteredItem(); + MoveSelectIcon(gBagPocketScrollStates[sCurrentBagPocket].cursorPos); +} + +void sub_80A4164(u8 *dest, u16 value, enum StringConvertMode mode, u8 digits) +{ + *dest++ = CHAR_MULT_SIGN; + dest[0] = EXT_CTRL_CODE_BEGIN; + dest[1] = 0x14; + dest[2] = 6; + dest += 3; + ConvertIntToDecimalStringN(dest, value, mode, digits); +} + +void sub_80A418C(u16 value, enum StringConvertMode mode, u8 c, u8 d, u8 digits) +{ + sub_80A4164(gStringVar1, value, mode, digits); + MenuPrint(gStringVar1, c, d); +} + +static void sub_80A41D4(u8 taskId) +{ + sub_80A763C(); +} + +static void sub_80A41E0(u8 *a, u16 b, const u8 *c, u16 d, u8 e) +{ + a[0] = EXT_CTRL_CODE_BEGIN; + a[1] = 0x13; + a[2] = 8; + a += 3; + a = ConvertIntToDecimalStringN(a, b, STR_CONV_MODE_LEADING_ZEROS, 2); + a[0] = EXT_CTRL_CODE_BEGIN; + a[1] = 0x13; + a[2] = 0x18; + a += 3; + a = sub_8072C74(a, c, 0x78 - (e + 1) * 6, 0); + *a++ = CHAR_MULT_SIGN; + sub_8072C14(a, d, 0x78, 1); +} + +static u8 *sub_80A425C(u8 taskId, u8 *text, u8 c) +{ + if (gTasks[taskId].data[10] - gBagPocketScrollStates[sCurrentBagPocket].scrollTop - 1 == c) + { + text[0] = EXT_CTRL_CODE_BEGIN; + text[1] = 1; + text[2] = 2; + text += 3; + } + return text; +} + +static bool8 sub_80A42B0(u8 itemPos, int b) +{ + u8 r5; + u16 *ptr; + struct UnknownStruct3 *r8 = &gUnknown_02038540; + + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + itemPos > gBagPocketScrollStates[sCurrentBagPocket].numSlots) + return TRUE; + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + itemPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) + { + if (sReturnLocation == RETURN_TO_FIELD_5) + return TRUE; + r5 = itemPos * 2 + 2; + sub_8072C74(gStringVar1, gOtherText_CloseBag, 0x78, 0); + MenuPrint(gStringVar1, 14, r5); + ptr = gBGTilemapBuffers[2] + 14 + r5 * 32; + ptr[0] = 0x4F; + ptr[1] = 0x4F; + ptr[32] = 0x4F; + ptr[33] = 0x4F; + if (itemPos == 7) + return TRUE; + if ((b == 1 && r8->unk2 != 0) || b == 2) + MenuFillWindowRectWithBlankTile(14, r5 + 2, 29, 13); + else + MenuFillWindowRectWithBlankTile(14, r5 + 2, 29, 17); + return TRUE; + } + return FALSE; +} + +static void sub_80A4380(u16 a, int b, int c, int d) +{ + u8 i; + + for (i = b; i <= c; i++) + { + u8 r4; + u8 r5; + u8 *text; + + if (sub_80A42B0(i, d) == TRUE) + break; + r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; + r5 = i * 2 + 2; + text = gStringVar1; + text = sub_80A425C(a, text, i); + text = sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x66, 0); + *text++ = CHAR_MULT_SIGN; + sub_8072C14(text, gCurrentBagPocketItemSlots[r4].quantity, 0x78, 1); + MenuPrint(gStringVar1, 14, r5); + } +} + +static void sub_80A444C(u16 a, int b, int c, int d) +{ + u8 i; + + for (i = b; i <= c; i++) + { + u8 r4; + u8 r5; + u8 *text; + + if (sub_80A42B0(i, d) == TRUE) + break; + r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; + r5 = i * 2 + 2; + text = gStringVar1; + text = sub_80A425C(a, text, i); +#if ENGLISH + sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x60, 0); +#else + sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x63, 0); +#endif + MenuPrint(gStringVar1, 14, r5); + if (gUnknown_02038558 != 0) + { + if (gCurrentBagPocketItemSlots[r4].itemId == gSaveBlock1.registeredItem) + DrawSelectIcon(i); + } + else + { + if (gCurrentBagPocketItemSlots[r4].itemId == gSaveBlock1.registeredItem) + MoveSelectIcon(i); + else + EraseSelectIcon(i); + } + } +} + +// more gBGTilemapBuffers shenanigans +#ifdef NONMATCHING +static void sub_80A4548(u16 a, int b, int c, int d) +{ + u8 i; + + for (i = b; i <= c; i++) + { + u8 r4; + u8 sp10; + u32 r5; + u8 *text; + + if (sub_80A42B0(i, d) == TRUE) + break; + r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; + sp10 = i * 2 + 2; + r5 = sp10 * 32 + 14; + text = gStringVar1; + text = sub_80A425C(a, text, i); + if (gCurrentBagPocketItemSlots[r4].itemId < 0x153) + { + const u8 *r2; + + gBGTilemapBuffers[2][r5 + 0] = 0x59; + gBGTilemapBuffers[2][r5 + 1] = 0x4F; + gBGTilemapBuffers[2][r5 + 32] = 0x69; + gBGTilemapBuffers[2][r5 + 33] = 0x4F; + r2 = gMoveNames[ItemIdToBattleMoveId(gCurrentBagPocketItemSlots[r4].itemId)]; + sub_80A41E0(text, gCurrentBagPocketItemSlots[r4].itemId - 288, r2, gCurrentBagPocketItemSlots[r4].quantity, 2); + } + else + { + const u8 *moveName; + + gBGTilemapBuffers[2][r5 + 0] = 0x105D; + gBGTilemapBuffers[2][r5 + 1] = 0x105E; + gBGTilemapBuffers[2][r5 + 32] = 0x106D; + gBGTilemapBuffers[2][r5 + 33] = 0x106E; + text[0] = EXT_CTRL_CODE_BEGIN; + text[1] = 0x13; + text[2] = 0x11; + text += 3; + text = ConvertIntToDecimalString(text, gCurrentBagPocketItemSlots[r4].itemId); + text[0] = EXT_CTRL_CODE_BEGIN; + text[1] = 0x13; + text[2] = 0x18; + text += 3; + moveName = gMoveNames[ItemIdToBattleMoveId(gCurrentBagPocketItemSlots[r4].itemId)]; + sub_8072C74(text, moveName, 0x78, 0); + } + MenuPrint(gStringVar1, 14, sp10); + } +} +#else +__attribute__((naked)) +static void sub_80A4548(u16 a, int b, int c, int d) +{ + 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\ + str r2, [sp, 0x8]\n\ + str r3, [sp, 0xC]\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x4]\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r8, r1\n\ + ldr r0, _080A456C @ =gBGTilemapBuffers + 0x1000\n\ + mov r9, r0\n\ + b _080A46C2\n\ + .align 2, 0\n\ +_080A456C: .4byte gBGTilemapBuffers + 0x1000\n\ +_080A4570:\n\ + ldr r1, _080A461C @ =gBagPocketScrollStates\n\ + ldr r0, _080A4620 @ =sCurrentBagPocket\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r4, [r0, 0x1]\n\ + add r4, r8\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + mov r1, r8\n\ + lsls r0, r1, 25\n\ + movs r3, 0x80\n\ + lsls r3, 18\n\ + adds r0, r3\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x10]\n\ + lsls r0, 5\n\ + adds r0, 0xE\n\ + adds r5, r0, 0\n\ + ldr r6, _080A4624 @ =gStringVar1\n\ + ldr r1, [sp, 0x4]\n\ + lsls r0, r1, 24\n\ + lsrs r0, 24\n\ + adds r1, r6, 0\n\ + mov r2, r8\n\ + bl sub_80A425C\n\ + adds r6, r0, 0\n\ + ldr r3, _080A4628 @ =gCurrentBagPocketItemSlots\n\ + mov r10, r3\n\ + ldr r0, [r3]\n\ + lsls r7, r4, 2\n\ + adds r3, r7, r0\n\ + ldrh r1, [r3]\n\ + movs r0, 0xA9\n\ + lsls r0, 1\n\ + cmp r1, r0\n\ + bhi _080A4634\n\ + lsls r0, r5, 1\n\ + add r0, r9\n\ + movs r1, 0x59\n\ + strh r1, [r0]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 1\n\ + add r0, r9\n\ + movs r2, 0x4F\n\ + strh r2, [r0]\n\ + adds r0, r5, 0\n\ + adds r0, 0x20\n\ + lsls r0, 1\n\ + add r0, r9\n\ + movs r1, 0x69\n\ + strh r1, [r0]\n\ + adds r0, r5, 0\n\ + adds r0, 0x21\n\ + lsls r0, 1\n\ + add r0, r9\n\ + strh r2, [r0]\n\ + ldrh r0, [r3]\n\ + bl ItemIdToBattleMoveId\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0xD\n\ + adds r2, r0, 0\n\ + muls r2, r1\n\ + ldr r0, _080A462C @ =gMoveNames\n\ + adds r2, r0\n\ + mov r1, r10\n\ + ldr r0, [r1]\n\ + adds r0, r7, r0\n\ + ldr r3, _080A4630 @ =0xfffffee0\n\ + adds r1, r3, 0\n\ + ldrh r3, [r0]\n\ + adds r1, r3\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + ldrh r3, [r0, 0x2]\n\ + movs r0, 0x2\n\ + str r0, [sp]\n\ + adds r0, r6, 0\n\ + bl sub_80A41E0\n\ + b _080A46AE\n\ + .align 2, 0\n\ +_080A461C: .4byte gBagPocketScrollStates\n\ +_080A4620: .4byte sCurrentBagPocket\n\ +_080A4624: .4byte gStringVar1\n\ +_080A4628: .4byte gCurrentBagPocketItemSlots\n\ +_080A462C: .4byte gMoveNames\n\ +_080A4630: .4byte 0xfffffee0\n\ +_080A4634:\n\ + lsls r0, r5, 1\n\ + add r0, r9\n\ + ldr r1, _080A46EC @ =0x0000105d\n\ + strh r1, [r0]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 1\n\ + add r0, r9\n\ + adds r1, 0x1\n\ + strh r1, [r0]\n\ + adds r0, r5, 0\n\ + adds r0, 0x20\n\ + lsls r0, 1\n\ + add r0, r9\n\ + adds r1, 0xF\n\ + strh r1, [r0]\n\ + adds r0, r5, 0\n\ + adds r0, 0x21\n\ + lsls r0, 1\n\ + add r0, r9\n\ + adds r1, 0x1\n\ + strh r1, [r0]\n\ + movs r0, 0xFC\n\ + strb r0, [r6]\n\ + movs r4, 0x13\n\ + strb r4, [r6, 0x1]\n\ + movs r0, 0x11\n\ + strb r0, [r6, 0x2]\n\ + adds r6, 0x3\n\ + mov r1, r10\n\ + ldr r0, [r1]\n\ + adds r0, r7, r0\n\ + ldrh r1, [r0]\n\ + ldr r3, _080A46F0 @ =0xfffffeae\n\ + adds r1, r3\n\ + adds r0, r6, 0\n\ + bl ConvertIntToDecimalString\n\ + adds r6, r0, 0\n\ + movs r0, 0xFC\n\ + strb r0, [r6]\n\ + strb r4, [r6, 0x1]\n\ + movs r0, 0x18\n\ + strb r0, [r6, 0x2]\n\ + adds r6, 0x3\n\ + mov r1, r10\n\ + ldr r0, [r1]\n\ + adds r0, r7, r0\n\ + ldrh r0, [r0]\n\ + bl ItemIdToBattleMoveId\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0xD\n\ + muls r1, r0\n\ + ldr r0, _080A46F4 @ =gMoveNames\n\ + adds r1, r0\n\ + adds r0, r6, 0\n\ + movs r2, 0x78\n\ + movs r3, 0\n\ + bl sub_8072C74\n\ +_080A46AE:\n\ + ldr r0, _080A46F8 @ =gStringVar1\n\ + movs r1, 0xE\n\ + ldr r2, [sp, 0x10]\n\ + bl MenuPrint\n\ + mov r0, r8\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ +_080A46C2:\n\ + ldr r3, [sp, 0x8]\n\ + cmp r8, r3\n\ + bgt _080A46DA\n\ + mov r0, r8\n\ + ldr r1, [sp, 0xC]\n\ + bl sub_80A42B0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + beq _080A46DA\n\ + b _080A4570\n\ +_080A46DA:\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 {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A46EC: .4byte 0x0000105d\n\ +_080A46F0: .4byte 0xfffffeae\n\ +_080A46F4: .4byte gMoveNames\n\ +_080A46F8: .4byte gStringVar1\n\ + .syntax divided\n"); +} +#endif + +static void sub_80A46FC(u16 a, int b, int c, int d) +{ + u8 i; + + for (i = b; i <= c; i++) + { + u8 r4; + u8 r5; + u8 *text; + register int var asm("r0"); + + if (sub_80A42B0(i, d) == TRUE) + break; + r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; + r5 = i * 2 + 2; + + var = 14 + r5 * 32; + gBGTilemapBuffers[2][var] = 0x59; + var += 32; + gBGTilemapBuffers[2][var] = 0x69; + + text = gStringVar1; + text = sub_80A425C(a, text, i); + CopyItemName(gCurrentBagPocketItemSlots[r4].itemId, gStringVar2); + sub_80A41E0(text, gCurrentBagPocketItemSlots[r4].itemId - 0x84, gStringVar2, gCurrentBagPocketItemSlots[r4].quantity, 3); + MenuPrint(gStringVar1, 14, r5); + } +} + +static void sub_80A47E8(u16 a, int b, int c, int d) +{ + switch (sCurrentBagPocket) + { + case BAG_POCKET_ITEMS: + case BAG_POCKET_POKE_BALLS: + sub_80A4380(a, b, c, d); + break; + case BAG_POCKET_KEY_ITEMS: + sub_80A444C(a, b, c, d); + break; + case BAG_POCKET_TMs_HMs: + sub_80A4548(a, b, c, d); + break; + case BAG_POCKET_BERRIES: + sub_80A46FC(a, b, c, d); + break; + } + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) + sub_80F979C(0, 0); + else + sub_80F979C(0, 1); + if ((sReturnLocation != RETURN_TO_FIELD_5 && gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 8 < gBagPocketScrollStates[sCurrentBagPocket].numSlots + 1) + || (sReturnLocation == RETURN_TO_FIELD_5 && gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 8 < gBagPocketScrollStates[sCurrentBagPocket].numSlots)) + sub_80F979C(1, 0); + else + sub_80F979C(1, 1); +} + +static void sub_80A48E8(u16 taskId, int b, int c) +{ + sub_80A47E8(taskId, b, c, 0); +} + +static void sub_80A48F8(u16 taskId) +{ + sub_80A47E8(taskId, 0, 5, 2); +} + +static void ItemListMenu_InitDescription(s16 itemId) +{ + u8 r5; + + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) + { + r5 = sub_8072A18(gOtherText_ReturnTo, 4, 0x68, 0x68, 1); + r5 += sub_8072A18(gUnknown_0840E740[sReturnLocation], 4, 0x78, 0x68, 1); + } + else + { + r5 = sub_8072A18(ItemId_GetDescription(itemId), 4, 0x68, 0x68, 1); + } + + if (r5 < 3) + MenuZeroFillWindowRect(0, 13 + r5 * 2, 13, 20); +} + +static void ItemListMenu_ChangeDescription(s16 itemId, int b) +{ + u8 description[100]; + + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) + { + if (b == 0) + { + MenuZeroFillWindowRect(0, 13, 13, 20); + MenuPrint_PixelCoords(gOtherText_ReturnTo, 4, 0x68, 0); + } + else if (b == 1) + { + MenuPrint_PixelCoords(gUnknown_0840E740[sReturnLocation], 4, 0x78, 0); + } + } + else + { + if (b == 0) + MenuZeroFillWindowRect(0, 13, 13, 20); + if (ItemId_CopyDescription(description, itemId, b)) + MenuPrint_PixelCoords(description, 4, 104 + b * 16, 0); + } +} + +static bool32 CopyTextLine(u8 *destination, const u8 *source, u32 c) +{ + u32 r4 = c + 1; + const u8 *src = source; + u8 *dst = destination; + + while (1) + { + if (*src == CHAR_NEWLINE || *src == EOS) + { + r4--; + if (r4 == 0) + { + *dst = EOS; + return TRUE; + } + if (*src == EOS) + return FALSE; + // got a new line - reset dst pointer + dst = destination; + src++; + } + else + { + *dst++ = *src++; + } + } +} + +static void sub_80A4A98(const u8 *text, u32 line) +{ + u8 buffer[100]; + + if (line == 0) + MenuZeroFillWindowRect(0, 13, 13, 20); + if (CopyTextLine(buffer, text, line)) + MenuPrint_PixelCoords(buffer, 4, 104 + line * 16, 0); +} + +static void sub_80A4ADC(u8 taskId) +{ + if (gTasks[taskId].data[10] == 0) + sub_80A7528(0); + PlaySE(SE_SELECT); + gUnknown_0203855C = 1; +} + +static void sub_80A4B14(s8 a, u8 b) +{ + gBagPocketScrollStates[sCurrentBagPocket].scrollTop += a; + MoveMenuCursor(0); + sub_80A73C0(); + sub_80A763C(); + sub_80A4ADC(b); +} + +static void sub_80A4B58(s8 delta, u8 b) +{ + gBagPocketScrollStates[sCurrentBagPocket].cursorPos = MoveMenuCursor(delta); + sub_80A73C0(); + sub_80A4ADC(b); +} + +static const u8 *sub_80A4B90(u16 itemId) +{ + if (TestPlayerAvatarFlags(6)) + { + if (itemId == ITEM_MACH_BIKE || itemId == ITEM_ACRO_BIKE) + return gOtherText_Walk; + } + if (ItemIsMail(itemId) == TRUE) + return gOtherText_Check; + return sItemPopupMenuActions[sPopupMenuActionList[0]].text; +} + +static void sub_80A4BF0(u16 *a) +{ + u8 i; + + if (gUnknown_02038564 == 4) + { + MenuDrawTextWindow(0, 7, 13, 12); + sub_80A4008(a, 1, 8, 12, 4); + if (sub_80F9344() == TRUE && sReturnLocation == RETURN_TO_FIELD_5) + { + sub_80A7834(1, 0); + } + else + { + for (i = 0; i < gUnknown_02038564; i++) + { + const u8 *text; + + if (i == 0) + text = sub_80A4B90(gScriptItemId); + else + text = sItemPopupMenuActions[sPopupMenuActionList[i]].text; + MenuPrint(text, 1 + (i / 2) * 6, 8 + (i % 2) * 2); + } + } + if (sReturnLocation == RETURN_TO_FIELD_5) + InitMenu(0, 1, 8, gUnknown_02038564, sPopupMenuSelection, 1); + else + InitMenu(0, 1, 8, gUnknown_02038564, 0, 1); + sub_8072DCC(0x2F); + } + else + { + MenuDrawTextWindow(0, 5, 13, 12); + sub_80A4008(a, 1, 6, 12, 6); + for (i = 0; i < gUnknown_02038564; i++) + MenuPrint(sItemPopupMenuActions[sPopupMenuActionList[i]].text, 1 + (i / 3) * 6, 6 + (i % 3) * 2); + InitMenu(0, 1, 6, gUnknown_02038564, 0, 1); + sub_8072DCC(0x2F); + } + sub_80A7528(2); +} + +static void sub_80A4DA4(u16 *a) +{ + sub_80A73FC(); + sub_80A36B8(a, 0, 6, 13, 6); + MenuZeroFillWindowRect(0, 5, 13, 12); + sub_80A7590(); +} + +static void sub_80A4DD8(u8 taskId, u8 b, u8 c, u8 d, u8 e, u8 digits) +{ + gTasks[taskId].data[1] = 1; + gTasks[taskId].data[2] = b + 2; + gTasks[taskId].data[3] = c + 1; + MenuDrawTextWindow(b, c, b + d, c + e); + sub_80A4008(gBGTilemapBuffers[1], b + 1, c + 1, d - 1, e - 1); + sub_80A418C(1, 1, b + 2, c + 1, digits); +} + +static void sub_80A4E8C(s8 delta, u8 b) +{ + PlaySE(SE_SELECT); + sub_80F979C(0, 1); + sub_80F979C(1, 1); + sub_80F979C(2, 1); + sub_80F979C(3, 1); + PauseVerticalScrollIndicator(0); + PauseVerticalScrollIndicator(1); + PauseVerticalScrollIndicator(2); + PauseVerticalScrollIndicator(3); + ChangePocket(gBGTilemapBuffers[2], delta); + DrawPocketIndicatorDots(gBGTilemapBuffers[2], sCurrentBagPocket); + sub_80A3770(); + sub_80A7C64(); + CreateBagPokeballSprite(b); +} + +static bool8 sub_80A4F0C(void) +{ + if (sReturnLocation == RETURN_TO_FIELD_5 || sReturnLocation == RETURN_TO_FIELD_4) + return FALSE; + if (gMain.newKeys == DPAD_RIGHT || sub_80F9284() == 2) + { + sub_80A4E8C(1, 2); + return TRUE; + } + if (gMain.newKeys == DPAD_LEFT || sub_80F9284() == 1) + { + sub_80A4E8C(-1, 1); + return TRUE; + } + return FALSE; +} + +static void sub_80A4F68(u8 taskId) +{ + sub_80A4F0C(); +} + +static bool8 sub_80A4F74(u8 a) +{ + bool8 retVal = FALSE; + + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) + { + if (gBagPocketScrollStates[sCurrentBagPocket].cursorPos != 0) + sub_80A4B58(-1, a); + else if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) + sub_80A4B14(-1, a); + if (gLinkOpen == TRUE && gMain.keyRepeatCounter == 5) + gMain.keyRepeatCounter = 11; + retVal = TRUE; + } + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) + { + if (sReturnLocation != RETURN_TO_FIELD_5) + { + if (gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].cursorMax) + { + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots) + sub_80A4B14(1, a); + } + else + { + sub_80A4B58(1, a); + } + } + else + { + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots - 1) + { + if (gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].cursorMax) + sub_80A4B58(1, a); + else + sub_80A4B14(1, a); + } + } + retVal = TRUE; + if (gLinkOpen == TRUE && gMain.keyRepeatCounter == 5) + gMain.keyRepeatCounter = 11; + } + else + { + if (gTasks[a].data[10] == 0 && sub_80A4F0C() == TRUE) + { + sub_80A73F0(); + gTasks[a].func = sub_80A4F68; + retVal = TRUE; + } + else + { + sub_80A73C0(); + } + } + return retVal; +} + +static void sub_80A50C8(u8 taskId) +{ + s16 *r5 = gTasks[taskId].data; + + if (!gPaletteFade.active) + { + if (sub_80A4F74(taskId) == TRUE) + { + sub_808B5B4(taskId); + return; + } + + if ((gMain.newKeys & SELECT_BUTTON) + && !(sCurrentBagPocket == BAG_POCKET_BERRIES || sCurrentBagPocket == BAG_POCKET_TMs_HMs) + && (sReturnLocation == RETURN_TO_FIELD_0 || sReturnLocation == RETURN_TO_BATTLE)) + { + if (r5[10] == 0) + { + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots) + { + PlaySE(SE_SELECT); + sub_80A3F50(taskId); + } + sub_808B5B4(taskId); + } + else + { + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots) + { + PlaySE(SE_SELECT); + sub_80A3E90(taskId); + } + else + { + sub_80A3EF4(taskId); + } + sub_808B5B4(taskId); + } + return; + } + + if (gMain.newKeys & A_BUTTON) + { + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) + { + if (r5[10] == 0) + { + gScriptItemId = 0; + gUnknown_083C16BC[sReturnLocation].onBagClose(taskId); + } + else + { + sub_80A3EF4(taskId); + } + sub_808B5B4(taskId); + } + else + { + if (r5[10] == 0) + { + PlaySE(SE_SELECT); + gUnknown_02038560 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; + gScriptItemId = gCurrentBagPocketItemSlots[gUnknown_02038560].itemId; + gUnknown_083C16BC[sReturnLocation].onItemSelect(taskId); + sub_80F98A4(0); + sub_80F98A4(1); + sub_80F98A4(2); + sub_80F98A4(3); + sub_80A797C(); + } + else + { + sub_80A3E90(taskId); + } + sub_808B5B4(taskId); + } + return; + } + + if (gMain.newKeys & B_BUTTON) + { + if (r5[10] == 0) + { + if (sReturnLocation != RETURN_TO_FIELD_5) + { + gScriptItemId = 0; + gUnknown_083C16BC[sReturnLocation].onBagClose(taskId); + } + } + else + { + sub_80A3EF4(taskId); + } + sub_808B5B4(taskId); + return; + } + } +} + +bool8 sub_80A52C4(u8 taskId, u16 b) +{ + s16 *taskData = gTasks[taskId].data; + + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) + { + if (taskData[1] != b) + taskData[1]++; + else + taskData[1] = 1; + return TRUE; + } + + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) + { + if (taskData[1] != 1) + taskData[1]--; + else + taskData[1] = b; + return TRUE; + } + + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT) + { + if (taskData[1] + 10 < b) + taskData[1] += 10; + else + taskData[1] = b; + return TRUE; + } + + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT) + { + if (taskData[1] > 10) + taskData[1] -= 10; + else + taskData[1] = 1; + return TRUE; + } + + return FALSE; +} + +static bool8 sub_80A5350(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + if (sub_80A52C4(taskId, gCurrentBagPocketItemSlots[gUnknown_02038560].quantity) == TRUE) + { + // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way + if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) + sub_80A418C(taskData[1], 1, taskData[2], taskData[3], 3); + else + sub_80A418C(taskData[1], 1, taskData[2], taskData[3], 2); + return TRUE; + } + return FALSE; +} + +static void sub_80A53CC(void) +{ + if (sub_80A34B4() == TRUE) + { + sub_80A3770(); + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); + } +} + +void sub_80A53F8(void) +{ + sReturnLocation = RETURN_TO_FIELD_0; + SetMainCallback2(sub_80A53CC); +} + +#ifdef NONMATCHING +static void sub_80A5414(u8 taskId) +{ + TaskFunc r5 = NULL; + + if (sub_80A78A0() != 0) + { + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x40) + { + if ((sPopupMenuSelection & 1) && sPopupMenuActionList[sPopupMenuSelection - 1] == 8) + { + PlaySE(SE_SELECT); + sPopupMenuSelection = MoveMenuCursor3(-1); + } + } + //_080A546C + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x80) + { + if (!(sPopupMenuSelection & 1) && sPopupMenuActionList[sPopupMenuSelection + 1] != 8) + { + PlaySE(SE_SELECT); + sPopupMenuSelection = MoveMenuCursor3(1); + } + } + //_080A549C + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x20) + { + if (sPopupMenuSelection > 1 && sPopupMenuActionList[sPopupMenuSelection - 2] != 8) + { + PlaySE(SE_SELECT); + sPopupMenuSelection = MoveMenuCursor3(-2); + } + } + //_080A54CC + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x10) + { + if (sPopupMenuSelection <= 1 && sPopupMenuActionList[sPopupMenuSelection + 2] != 8) + { + PlaySE(SE_SELECT); + sPopupMenuSelection = MoveMenuCursor3(2); + } + } + //_080A5500 + else if (!(gMain.newKeys & A_BUTTON)) + { + if (gMain.newKeys & B_BUTTON) + { + gTasks[taskId].data[10] = 0; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); + sub_80A4DA4(gBGTilemapBuffers[1]); + r5 = sItemPopupMenuActions[sPopupMenuActionList[3]].func; + r5(taskId); + } + } + else + { + //_080A5590 + gTasks[taskId].data[10] = 0; + sub_80A4DA4(gBGTilemapBuffers[1]); + r5 = sItemPopupMenuActions[sPopupMenuActionList[sPopupMenuSelection]].func; + r5(taskId); + } + } + //_080A5552 + if (r5 == NULL) + { + if (sReturnLocation == RETURN_TO_FIELD_5) + { + if (sPopupMenuSelection == 0) + { + sub_8072DDC(12); + return; + } + //_080A55D4 + //else + //{ + if (sPopupMenuSelection == 0 || sPopupMenuSelection == 1) + sub_8072DCC(0x2F); + else + sub_8072DCC(0x30); + //} + } + //_080A55E0 + else + { + if (sPopupMenuSelection == 0 || sPopupMenuSelection == 1) + sub_8072DCC(0x2F); + else + sub_8072DCC(0x30); + } + } +} +#else +__attribute__((naked)) +static void sub_80A5414(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + movs r5, 0\n\ + bl sub_80A78A0\n\ + cmp r0, 0\n\ + bne _080A5426\n\ + b _080A5552\n\ +_080A5426:\n\ + ldr r2, _080A5460 @ =gMain\n\ + ldrh r0, [r2, 0x30]\n\ + movs r1, 0xF0\n\ + ands r1, r0\n\ + cmp r1, 0x40\n\ + bne _080A546C\n\ + ldr r4, _080A5464 @ =sPopupMenuSelection\n\ + ldrb r1, [r4]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080A5440\n\ + b _080A5552\n\ +_080A5440:\n\ + ldrb r1, [r4]\n\ + ldr r0, _080A5468 @ =sPopupMenuActionList\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + subs r1, 0x1\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x8\n\ + bne _080A5452\n\ + b _080A5552\n\ +_080A5452:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + b _080A54EE\n\ + .align 2, 0\n\ +_080A5460: .4byte gMain\n\ +_080A5464: .4byte sPopupMenuSelection\n\ +_080A5468: .4byte sPopupMenuActionList\n\ +_080A546C:\n\ + cmp r1, 0x80\n\ + bne _080A549C\n\ + ldr r4, _080A5494 @ =sPopupMenuSelection\n\ + ldrb r1, [r4]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080A5552\n\ + ldrb r1, [r4]\n\ + ldr r0, _080A5498 @ =sPopupMenuActionList\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + cmp r0, 0x8\n\ + beq _080A5552\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x1\n\ + b _080A54EE\n\ + .align 2, 0\n\ +_080A5494: .4byte sPopupMenuSelection\n\ +_080A5498: .4byte sPopupMenuActionList\n\ +_080A549C:\n\ + cmp r1, 0x20\n\ + bne _080A54CC\n\ + ldr r4, _080A54C4 @ =sPopupMenuSelection\n\ + ldrb r0, [r4]\n\ + cmp r0, 0x1\n\ + bls _080A5552\n\ + adds r1, r0, 0\n\ + ldr r0, _080A54C8 @ =sPopupMenuActionList\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + subs r1, 0x2\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x8\n\ + beq _080A5552\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + b _080A54EE\n\ + .align 2, 0\n\ +_080A54C4: .4byte sPopupMenuSelection\n\ +_080A54C8: .4byte sPopupMenuActionList\n\ +_080A54CC:\n\ + cmp r1, 0x10\n\ + bne _080A5500\n\ + ldr r4, _080A54F8 @ =sPopupMenuSelection\n\ + ldrb r0, [r4]\n\ + cmp r0, 0x1\n\ + bhi _080A5552\n\ + adds r1, r0, 0\n\ + ldr r0, _080A54FC @ =sPopupMenuActionList\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x2]\n\ + cmp r0, 0x8\n\ + beq _080A5552\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x2\n\ +_080A54EE:\n\ + bl MoveMenuCursor3\n\ + strb r0, [r4]\n\ + b _080A5552\n\ + .align 2, 0\n\ +_080A54F8: .4byte sPopupMenuSelection\n\ +_080A54FC: .4byte sPopupMenuActionList\n\ +_080A5500:\n\ + ldrh r1, [r2, 0x2E]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080A5590\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080A5552\n\ + ldr r1, _080A5570 @ =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, _080A5574 @ =gBagPocketScrollStates\n\ + ldr r0, _080A5578 @ =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, _080A557C @ =gBGTilemapBuffers + 0x800\n\ + bl sub_80A4DA4\n\ + ldr r1, _080A5580 @ =sItemPopupMenuActions\n\ + ldr r0, _080A5584 @ =sPopupMenuActionList\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x3]\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\ +_080A5552:\n\ + cmp r5, 0\n\ + bne _080A55FA\n\ + ldr r0, _080A5588 @ =sReturnLocation\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x5\n\ + bne _080A55E0\n\ + ldr r0, _080A558C @ =sPopupMenuSelection\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _080A55D4\n\ + movs r0, 0xC\n\ + bl sub_8072DDC\n\ + b _080A55FA\n\ + .align 2, 0\n\ +_080A5570: .4byte gTasks\n\ +_080A5574: .4byte gBagPocketScrollStates\n\ +_080A5578: .4byte sCurrentBagPocket\n\ +_080A557C: .4byte gBGTilemapBuffers + 0x800\n\ +_080A5580: .4byte sItemPopupMenuActions\n\ +_080A5584: .4byte sPopupMenuActionList\n\ +_080A5588: .4byte sReturnLocation\n\ +_080A558C: .4byte sPopupMenuSelection\n\ +_080A5590:\n\ + ldr r1, _080A55C0 @ =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, _080A55C4 @ =gBGTilemapBuffers + 0x800\n\ + bl sub_80A4DA4\n\ + ldr r1, _080A55C8 @ =sItemPopupMenuActions\n\ + ldr r0, _080A55CC @ =sPopupMenuSelection\n\ + ldrb r2, [r0]\n\ + ldr r0, _080A55D0 @ =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 _080A5552\n\ + .align 2, 0\n\ +_080A55C0: .4byte gTasks\n\ +_080A55C4: .4byte gBGTilemapBuffers + 0x800\n\ +_080A55C8: .4byte sItemPopupMenuActions\n\ +_080A55CC: .4byte sPopupMenuSelection\n\ +_080A55D0: .4byte sPopupMenuActionList\n\ +_080A55D4:\n\ + cmp r0, 0x1\n\ + bls _080A55E8\n\ + movs r0, 0x30\n\ + bl sub_8072DCC\n\ + b _080A55FA\n\ +_080A55E0:\n\ + ldr r0, _080A55F0 @ =sPopupMenuSelection\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + bhi _080A55F4\n\ +_080A55E8:\n\ + movs r0, 0x2F\n\ + bl sub_8072DCC\n\ + b _080A55FA\n\ + .align 2, 0\n\ +_080A55F0: .4byte sPopupMenuSelection\n\ +_080A55F4:\n\ + movs r0, 0x30\n\ + bl sub_8072DCC\n\ +_080A55FA:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif + +__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\ +_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\ +_080A5630:\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\ +_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\ +_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\ +_080A56D2:\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\ +_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\ +_080A574C: .4byte gTasks\n\ +_080A5750: .4byte gBagPocketScrollStates\n\ +_080A5754: .4byte sCurrentBagPocket\n\ +_080A5758: .4byte gBGTilemapBuffers + 0x800\n\ +_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\ +_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\ +_080A57B8:\n\ + movs r0, 0x30\n\ + bl sub_8072DCC\n\ +_080A57BE:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} + +static void sub_80A57C4(void) +{ + u8 r5; + + sPopupMenuActionList = gUnknown_083C16AE[sCurrentBagPocket]; + if (sCurrentBagPocket == BAG_POCKET_KEY_ITEMS) + { + gUnknown_02038564 = 1; + r5 = 9; + } + else if (sub_80F92F4(gScriptItemId) == 0) + { + sPopupMenuActionList = gUnknown_083C16AE[4]; + gUnknown_02038564 = 1; + r5 = 9; + } + else + { + gUnknown_02038564 = 2; + r5 = 7; + } + sub_80A4008(gBGTilemapBuffers[1], 7, r5 + 1, 6, gUnknown_02038564 * 2); + MenuDrawTextWindow(6, r5, 13, gUnknown_02038564 * 2 + 1 + r5); + sub_80A7834(0, r5); + InitMenu(0, 7, r5 + 1, gUnknown_02038564, 0, 6); +} + +static void sub_80A5888(u8 taskId) +{ + if (sub_80A78A0() != 0) + { + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (sPopupMenuSelection != 0) + { + PlaySE(SE_SELECT); + sPopupMenuSelection = MoveMenuCursor(-1); + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (sPopupMenuSelection != gUnknown_02038564 - 1) + { + PlaySE(SE_SELECT); + sPopupMenuSelection = MoveMenuCursor(1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + gTasks[taskId].data[10] = 0; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); + sub_80A4DA4(gBGTilemapBuffers[1]); + sItemPopupMenuActions[sPopupMenuActionList[sPopupMenuSelection]].func(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + gTasks[taskId].data[10] = 0; + sub_80A4DA4(gBGTilemapBuffers[1]); + sItemPopupMenuActions[2].func(taskId); + } + } +} + +static void OnBagClose_Field0(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_805469C >> 16; + gTasks[taskId].data[9] = (u32)sub_805469C; + gLastFieldPokeMenuOpened = 0; + sub_80A5AE4(taskId); +} + +static void OnItemSelect_Field05(u8 taskId) +{ + sPopupMenuSelection = 0; + if (sReturnLocation == RETURN_TO_FIELD_5) + sPopupMenuSelection = 1; + gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); + sub_80A73FC(); + if (sub_80F9344() == TRUE && sReturnLocation != RETURN_TO_FIELD_5) + { + sub_80A57C4(); + gTasks[taskId].func = sub_80A5888; + } + else + { + sub_80A4BF0(gBGTilemapBuffers[1]); + if (sCurrentBagPocket != BAG_POCKET_BERRIES || sReturnLocation == RETURN_TO_FIELD_5) + gTasks[taskId].func = sub_80A5414; + else + gTasks[taskId].func = sub_80A5600; + } +} + +static void sub_80A5AAC(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = HandleItemMenuPaletteFade; +} + +static void sub_80A5AE4(u8 taskId) +{ + PlaySE(SE_SELECT); + sub_80A5AAC(taskId); +} + +void HandleItemMenuPaletteFade(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + if (!gPaletteFade.active) + { + MainCallback cb = (MainCallback)((u16)taskData[8] << 16 | (u16)taskData[9]); + + SetMainCallback2(cb); + gpu_pal_allocator_reset__manage_upper_four(); + DestroyTask(taskId); + } +} + +void sub_80A5B40(void) +{ + while (1) + { + if (SetupBagMultistep() == TRUE) + { + ResetTasks(); + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +static void HandlePopupMenuAction_UseOnField(u8 taskId) +{ + if (ItemId_GetFieldFunc(gScriptItemId) != NULL) + { + PlaySE(SE_SELECT); + if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gScriptItemId) == 1) + { + sub_80A5BF8(taskId); + } + else + { + gTasks[taskId].data[2] = 0; + if (sCurrentBagPocket != BAG_POCKET_BERRIES) + ItemId_GetFieldFunc(gScriptItemId)(taskId); + else + sub_80C9C7C(taskId); + } + } +} + +static void sub_80A5BF8(u8 taskId) +{ + sub_80A73FC(); + sub_80A7590(); + DisplayCannotUseItemMessage(taskId, gOtherText_NoPokemon, CleanUpItemMenuMessage, 1); +} + +static void sub_80A5C24(u8 taskId) +{ + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +void CleanUpItemMenuMessage(u8 taskId) +{ + sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); + MenuZeroFillWindowRect(7, 7, 13, 12); + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskId].func = sub_80A5C24; +} + +void CleanUpOverworldMessage(u8 taskId) +{ + MenuZeroFillWindowRect(0, 13, 29, 19); + DestroyTask(taskId); + sub_8064E2C(); + ScriptContext2_Disable(); +} + +void ExecuteItemUseFromBlackPalette(void) +{ + pal_fill_black(); + CreateTask(Task_CallItemUseOnFieldCallback, 8); +} + +static void Task_CallItemUseOnFieldCallback(u8 taskId) +{ + if (sub_807D770() == TRUE) + gUnknown_03005D00(taskId); +} + +void sub_80A5D04(void) +{ + while (1) + { + if (SetupBagMultistep() == TRUE) + { + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +static void sub_80A5D38(u8 taskId) +{ + gTasks[taskId].data[1] = 0; + sub_80A4DA4(gBGTilemapBuffers[1]); + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +static void sub_80A5D78(void) +{ + sub_80A4008(gBGTilemapBuffers[1], 8, 8, 5, 4); + DisplayYesNoMenu(7, 7, 1); +} + +static void sub_80A5DA0(u16 itemId, u16 quantity) +{ + CopyItemName(itemId, gStringVar1); + if (quantity >= 100) + ConvertIntToDecimalStringN(gStringVar2, quantity, STR_CONV_MODE_LEFT_ALIGN, 3); + else + ConvertIntToDecimalStringN(gStringVar2, quantity, STR_CONV_MODE_LEFT_ALIGN, 2); + sub_80A4DA4(gBGTilemapBuffers[1]); + sub_80A7528(5); + sub_80A5D78(); +} + +static void sub_80A5DF8(void) +{ + sub_80A4DA4(gBGTilemapBuffers[1]); + MenuZeroFillWindowRect(7, 6, 11, 13); + sub_80A7528(4); +} + +static void sub_80A5E1C(u8 taskId) +{ + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + { + gTasks[taskId].data[10] = 0; + sub_80A41D4(taskId); + sub_80A5D38(taskId); + } +} + +static void sub_80A5E60(u8 taskId) +{ + sub_80A5DF8(); + sub_80A3D5C(taskId); + gTasks[taskId].func = sub_80A5E1C; +} + +static void sub_80A5E90(u8 taskId) +{ + sub_80A5D38(taskId); +} + +static void sub_80A5EA0(u8 taskId) +{ + if (sub_80A5350(taskId) == TRUE) + return; + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_80A5DA0(gScriptItemId, gTasks[taskId].data[1]); + DoYesNoFuncWithChoice(taskId, &gUnknown_083C16F4); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_80A5D38(taskId); + } +} + +static void HandlePopupMenuAction_Toss(u8 taskId) +{ + PlaySE(SE_SELECT); + gTasks[taskId].func = sub_80A5EA0; + sub_80A7528(3); + // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way + if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) + sub_80A4DD8(taskId, 6, 9, 7, 3, 3); + else + sub_80A4DD8(taskId, 7, 9, 6, 3, 2); +} + +static void sub_80A5F80(u8 taskId) +{ + PlaySE(SE_SELECT); + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +static void HandlePopupMenuAction_Register(u8 taskId) +{ + PlaySE(SE_SELECT); + if (gSaveBlock1.registeredItem == gScriptItemId) + { + // Un-register the registered item + RemoveSelectIconFromRegisteredItem(); + gSaveBlock1.registeredItem = 0; + } + else + { + AddSelectIconToRegisteredItem(); + gSaveBlock1.registeredItem = gScriptItemId; + } + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +static void sub_80A6000(u8 taskId) +{ + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +static void sub_80A6024(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON) + { + sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskId].func = sub_80A6000; + } +} + +static void DisplayCannotBeHeldMessage(u8 taskId) +{ + sub_80A73FC(); + CopyItemName(gScriptItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeld); + sub_80A7590(); + DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1); +} + +static void HandlePopupMenuAction_Give(u8 taskId) +{ + PlaySE(SE_SELECT); + if (sub_80F931C(gScriptItemId) == 0) + { + sub_80A73FC(); + sub_80A7590(); + DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1); + } + else if (ItemId_GetImportance(gScriptItemId) == 0) + { + if (CalculatePlayerPartyCount() == 0) + { + sub_80A5BF8(taskId); + } + else + { + gTasks[taskId].data[8] = (u32)sub_808B020 >> 16; + gTasks[taskId].data[9] = (u32)sub_808B020; + gTasks[taskId].func = HandleItemMenuPaletteFade; + gUnknown_02038561 = 1; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + } + } + else + { + DisplayCannotBeHeldMessage(taskId); + } +} + +static void HandlePopupMenuAction_CheckTag(u8 taskId) +{ + sub_80A5AE4(taskId); + gTasks[taskId].data[8] = (u32)BerryTagScreen_814625C >> 16; + gTasks[taskId].data[9] = (u32)BerryTagScreen_814625C; +} + +static void sub_80A61A8(void) +{ + if (sub_80A34B4() == TRUE) + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); +} + +void sub_80A61D0(void) +{ + sReturnLocation = RETURN_TO_PKMN_LIST; + SetMainCallback2(sub_80A61A8); +} + +static void OnBagClose_PkmnList(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_808A3F8 >> 16; + gTasks[taskId].data[9] = (u32)sub_808A3F8; + sub_80A5AE4(taskId); +} + +static void OnItemSelect_PkmnList(u8 taskId) +{ + u8 r6 = sCurrentBagPocket + 1; + + if (sub_80F931C(gScriptItemId) == 0) + { + sub_80A73FC(); + sub_80A7590(); + DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1); + } + else if (sub_80F92F4(gScriptItemId) == 0) + { + sub_80A73FC(); + CopyItemName(gScriptItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeldHere); + sub_80A7590(); + DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1); + } + else if (r6 != 5 && ItemId_GetImportance(gScriptItemId) == 0) + { + gTasks[taskId].data[8] = (u32)sub_808A3F8 >> 16; + gTasks[taskId].data[9] = (u32)sub_808A3F8; + sub_80A5AAC(taskId); + } + else + { + DisplayCannotBeHeldMessage(taskId); + } +} + +static void sub_80A62D8(void) +{ + if (sub_80A34B4() == TRUE) + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); +} + +void sub_80A6300(void) +{ + sReturnLocation = RETURN_TO_SHOP; + SetMainCallback2(sub_80A62D8); +} + +static void OnBagClose_Shop(u8 taskId) +{ + gFieldCallback = sub_80B3050; + gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; + gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch; + sub_80A5AE4(taskId); +} + +static void OnItemSelect_Shop(u8 taskId) +{ + sub_80A7590(); + gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); + sub_80A73FC(); + CopyItemName(gScriptItemId, gStringVar2); + if (ItemId_GetPrice(gScriptItemId) == 0) + { + StringExpandPlaceholders(gStringVar4, gOtherText_CantBuyThat); + DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6444, 1); + } + else + { + StringExpandPlaceholders(gStringVar4, gOtherText_HowManyToSell); + DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A648C, 1); + } +} + +static void sub_80A640C(u8 taskId) +{ + gTasks[taskId].data[10] = 0; + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +static void sub_80A6444(u8 taskId) +{ + sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskId].func = sub_80A640C; +} + +static void sub_80A648C(u8 taskId) +{ + gTasks[taskId].func = Task_BuyHowManyDialogueHandleInput; + sub_80A4008(gBGTilemapBuffers[1], 1, 11, 12, 2); + MenuDrawTextWindow(0, 10, 13, 13); + gTasks[taskId].data[1] = 1; + gTasks[taskId].data[2] = 1; + gTasks[taskId].data[3] = 11; + // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way + if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) + sub_80A418C(1, 1, 1, 11, 3); + else + sub_80A418C(1, 1, 1, 11, 2); + BuyMenuDisplayMessage(gScriptItemId, 1); + sub_80A683C(); +} + +static void sub_80A6520(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + BuyMenuPrintItemQuantityAndPrice(taskId); + } +} + +static void sub_80A6548(u8 taskId) +{ + sub_80A48F8(taskId); + gTasks[taskId].func = sub_80A6520; +} + +static void sub_80A6574(u8 taskId) +{ + PlaySE(SE_REGI); + sub_80A6870(gScriptItemId, gTasks[taskId].data[1]); + gTasks[taskId].func = sub_80A6548; +} + +static void sub_80A65AC(u8 taskId) +{ + MenuZeroFillWindowRect(7, 6, 13, 12); + sub_80A36B8(gBGTilemapBuffers[1], 7, 6, 6, 6); + CopyItemName(gScriptItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, gOtherText_SoldItem); + DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6574, 1); + sub_80A3D5C(taskId); +} + +static void sub_80A6618(u8 taskId) +{ + MenuZeroFillWindowRect(7, 6, 13, 12); + sub_80A36B8(gBGTilemapBuffers[1], 7, 6, 6, 6); + BuyMenuPrintItemQuantityAndPrice(taskId); +} + +static void sub_80A6650(u8 taskId) +{ + sub_80A5D78(); + DoYesNoFuncWithChoice(taskId, &gUnknown_083C16FC); +} + +static void Task_BuyHowManyDialogueHandleInput(u8 taskId) +{ + if (sub_80A5350(taskId) == TRUE) + { + MenuZeroFillWindowRect(6, 11, 12, 11); + BuyMenuDisplayMessage(gScriptItemId, gTasks[taskId].data[1]); + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(0, 10, 13, 13); + sub_80A36B8(gBGTilemapBuffers[1], 0, 10, 13, 3); + ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(gScriptItemId) / 2 * gTasks[taskId].data[1], STR_CONV_MODE_LEFT_ALIGN, 6); + StringExpandPlaceholders(gStringVar4, gOtherText_CanPay); + DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6650, 1); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + BuyMenuPrintItemQuantityAndPrice(taskId); + } +} + +static void sub_80A6760(u8 taskId) +{ + gTasks[taskId].data[10] = 0; + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) +{ + sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); + RemoveMoneyLabelObject(0, 0); + MenuZeroFillWindowRect(0, 4, 13, 13); + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskId].func = sub_80A6760; +} + +static void BuyMenuDisplayMessage(u16 itemId, u16 quantity) +{ + sub_80B7A94(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); + 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); +} + +static void sub_80A68A4(void) +{ + if (sub_80A34B4() == TRUE) + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); +} + +void sub_80A68CC(void) +{ + sCurrentBagPocket = BAG_POCKET_BERRIES; + sReturnLocation = RETURN_TO_FIELD_4; + SetMainCallback2(sub_80A68A4); +} + +static void OnBagClose_Field4(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_80546B8 >> 16; + gTasks[taskId].data[9] = (u32)sub_80546B8; + sub_80A5AE4(taskId); +} + +static void OnItemSelect_Field4(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_80546B8 >> 16; + gTasks[taskId].data[9] = (u32)sub_80546B8; + sub_80A5AAC(taskId); +} + +static void sub_80A6940(void) +{ + while (1) + { + if (SetupBagMultistep() == TRUE) + { + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); + sub_80A699C(); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +void sub_80A6978(void) +{ + sCurrentBagPocket = BAG_POCKET_BERRIES; + sReturnLocation = RETURN_TO_FIELD_5; + SetMainCallback2(sub_80A6940); +} + +static void sub_80A699C(void) +{ + sPopupMenuActionList = gUnknown_083C16B8; + gUnknown_02038564 = 4; +} + +static void OnBagClose_Field5(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_804E990 >> 16; + gTasks[taskId].data[9] = (u32)sub_804E990; + sub_80A5AE4(taskId); +} + +static void HandlePopupMenuAction_Confirm(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_804E990 >> 16; + gTasks[taskId].data[9] = (u32)sub_804E990; + sub_80A5AAC(taskId); +} + +static void sub_80A6A08(void) +{ + if (sub_80A34B4() == TRUE) + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); +} + +void sub_80A6A30(void) +{ + sReturnLocation = RETURN_TO_PC; + SetMainCallback2(sub_80A6A08); +} + +static void OnBagClose_PC(u8 taskId) +{ + gFieldCallback = ItemStorage_ReturnToMenuAfterDeposit; + gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; + gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch; + sub_80A5AE4(taskId); +} + +static void sub_80A6A84(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + sub_80A4DA4(gBGTilemapBuffers[1]); + CopyItemName(gScriptItemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, taskData[1], STR_CONV_MODE_LEFT_ALIGN, 3); + MenuZeroFillWindowRect(7, 6, 11, 13); + sub_80A7528(7); + sub_80A3D5C(taskId); + gTasks[taskId].func = sub_80A5E1C; +} + +static void sub_80A6B00(u8 taskId) +{ + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + { + gTasks[taskId].data[10] = 0; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); + PlaySE(SE_SELECT); + sub_80A5D38(taskId); + } +} + +static void sub_80A6B64(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + if (ItemId_GetImportance(gScriptItemId) == 2) + { + gTasks[taskId].func = sub_80A6B00; + sub_80A7528(9); + } + else + { + if (AddPCItem(gScriptItemId, taskData[1]) == TRUE) + { + sub_80A6A84(taskId); + } + else + { + gTasks[taskId].func = sub_80A6B00; + sub_80A7528(8); + } + } +} + +static void sub_80A6BE0(u8 taskId) +{ + if (sub_80A5350(taskId) == TRUE) + return; + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_80A4DA4(gBGTilemapBuffers[1]); + sub_80A6B64(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + gTasks[taskId].data[10] = 0; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); + PlaySE(SE_SELECT); + sub_80A5D38(taskId); + } +} + +static void OnItemSelect_PC(u8 taskId) +{ + gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); + sub_80A73FC(); + PlaySE(SE_SELECT); + sub_80A7590(); + if (sCurrentBagPocket != BAG_POCKET_KEY_ITEMS) + { + gTasks[taskId].func = sub_80A6BE0; + sub_80A7528(6); + // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way + if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) + sub_80A4DD8(taskId, 6, 9, 7, 3, 3); + else + sub_80A4DD8(taskId, 7, 9, 6, 3, 2); + } + else + { + gTasks[taskId].data[1] = 1; + sub_80A6B64(taskId); + } +} + +bool32 sub_80A6D1C(void) +{ + HideMapNamePopup(); + if (gSaveBlock1.registeredItem != 0) + { + if (CheckBagHasItem(gSaveBlock1.registeredItem, 1) == TRUE) + { + u8 taskId; + + ScriptContext2_Enable(); + FreezeMapObjects(); + sub_80594C0(); + sub_80597F4(); + gScriptItemId = gSaveBlock1.registeredItem; + taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1.registeredItem), 8); + gTasks[taskId].data[2] = 1; + return TRUE; + } + gSaveBlock1.registeredItem = 0; + } + ScriptContext1_SetupScript(Event_NoRegisteredItem); + return TRUE; +} + +static void sub_80A6D98(void) +{ + while (1) + { + if (SetupBagMultistep() == TRUE) + { + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +void sub_80A6DCC(void) +{ + sPopupMenuSelection = 0; + sReturnLocation = RETURN_TO_BATTLE; + SetMainCallback2(sub_80A6D98); +} + +static void sub_80A6DF0(u16 *a) +{ + u8 r6 = (gUnknown_02038564 - 1) * 2; + + MenuDrawTextWindow(7, 9 - r6, 13, 12); + sub_80A4008(a, 8, 10 - r6, 5, r6 + 2); + if (gUnknown_02038564 == 1) + { + MenuPrint(sItemPopupMenuActions[sPopupMenuActionList[0]].text, 8, 10); + } + else + { + MenuPrint(sItemPopupMenuActions[sPopupMenuActionList[0]].text, 8, 8); + MenuPrint(sItemPopupMenuActions[sPopupMenuActionList[1]].text, 8, 10); + } + InitMenu(0, 8, 10 - r6, gUnknown_02038564, 0, 5); + sub_80A7528(2); +} + +static void sub_80A6EB8(u8 taskId) +{ + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) + { + if (sPopupMenuSelection == 1) + { + PlaySE(SE_SELECT); + sPopupMenuSelection = MoveMenuCursor(-1); + } + } + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) + { + if (sPopupMenuSelection + 1 < gUnknown_02038564) + { + PlaySE(SE_SELECT); + sPopupMenuSelection = MoveMenuCursor(1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + gTasks[taskId].data[10] = 0; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); + sub_80A4DA4(gBGTilemapBuffers[1]); + sItemPopupMenuActions[sPopupMenuActionList[sPopupMenuSelection]].func(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + gTasks[taskId].data[10] = 0; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); + sub_80A4DA4(gBGTilemapBuffers[1]); + sItemPopupMenuActions[5].func(taskId); + } +} + +static const u8 gUnknown_083C1708[] = {4, 5}; +static const u8 gUnknown_083C170A[] = {5, 0}; + +static void sub_80A6FDC(void) +{ + if (ItemId_GetBattleUsage(gScriptItemId) != 0) + { + sPopupMenuActionList = gUnknown_083C1708; + gUnknown_02038564 = 2; + } + else + { + sPopupMenuActionList = gUnknown_083C170A; + gUnknown_02038564 = 1; + } +} + +static void OnItemSelect_Battle(u8 taskId) +{ + sPopupMenuSelection = 0; + sub_80A6FDC(); + gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); + sub_80A73FC(); + sub_80A6DF0(gBGTilemapBuffers[1]); + gTasks[taskId].func = sub_80A6EB8; +} + +void sub_80A7094(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_802E424 >> 16; + gTasks[taskId].data[9] = (u32)sub_802E424; + gTasks[taskId].func = HandleItemMenuPaletteFade; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); +} + +static void OnBagClose_Battle(u8 taskId) +{ + PlaySE(SE_SELECT); + sub_80A7094(taskId); +} + +static void HandlePopupMenuAction_UseInBattle(u8 taskId) +{ + if (ItemId_GetBattleFunc(gScriptItemId) != NULL) + { + PlaySE(SE_SELECT); + ItemId_GetBattleFunc(gScriptItemId)(taskId); + } +} + +static void sub_80A7124(u8 taskId) +{ + PlaySE(SE_SELECT); + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +static void sub_80A7150(void) +{ + while (1) + { + if (SetupBagMultistep() == TRUE) + { + gUnknown_02038563 = CreateTask(sub_80A7230, 0); + gTasks[gUnknown_02038563].data[15] = 0; + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +void PrepareBagForWallyTutorial(void) +{ + u8 i; + + sPopupMenuSelection = 0; + sCurrentBagPocket = BAG_POCKET_ITEMS; + for (i = 0; i < 5; i++) + { + gBagPocketScrollStates[i].cursorPos = 0; + gBagPocketScrollStates[i].scrollTop = 0; + } + + // Save player's items + memcpy(ewramSavedItemsPocket, gSaveBlock1.bagPocket_Items, sizeof(gSaveBlock1.bagPocket_Items)); + memcpy(ewramSavedPokeballsPocket, gSaveBlock1.bagPocket_PokeBalls, sizeof(gSaveBlock1.bagPocket_PokeBalls)); + + // Add Wally's items to the bag + ClearItemSlots(gSaveBlock1.bagPocket_Items, ARRAY_COUNT(gSaveBlock1.bagPocket_Items)); + ClearItemSlots(gSaveBlock1.bagPocket_PokeBalls, ARRAY_COUNT(gSaveBlock1.bagPocket_PokeBalls)); + AddBagItem(ITEM_POTION, 1); + AddBagItem(ITEM_POKE_BALL, 1); + + sReturnLocation = RETURN_TO_WALLY_BATTLE; + SetMainCallback2(sub_80A7150); +} + +static void sub_80A7230(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + switch (taskData[15]) + { + case 102: + PlaySE(SE_SELECT); + sub_80A4E8C(1, 2); + break; + case 204: + PlaySE(SE_SELECT); + sub_80F98A4(2); + sub_80F98A4(3); + gScriptItemId = ITEM_POKE_BALL; + sPopupMenuActionList = gUnknown_083C1708; + gUnknown_02038564 = 2; + gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); + sub_80A73FC(); + sub_80A6DF0(gBGTilemapBuffers[1]); + break; + case 306: + PlaySE(SE_SELECT); + sub_80A4DA4(gBGTilemapBuffers[1]); + + // Restore player's items + memcpy(gSaveBlock1.bagPocket_Items, ewramSavedItemsPocket, sizeof(gSaveBlock1.bagPocket_Items)); + memcpy(gSaveBlock1.bagPocket_PokeBalls, ewramSavedPokeballsPocket, sizeof(gSaveBlock1.bagPocket_PokeBalls)); + + taskData[8] = (u32)sub_802E424 >> 16; + taskData[9] = (u32)sub_802E424; + gTasks[taskId].func = HandleItemMenuPaletteFade; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + return; + } + taskData[15]++; +} + +static void ItemListMenu_InitMenu(void) +{ + InitMenu(0, 14, 2, gBagPocketScrollStates[sCurrentBagPocket].cursorMax + 1, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, 0); + CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 15); + sub_80A73C0(); +} + +static void sub_80A73C0(void) +{ + sub_814AD7C(0x70, gBagPocketScrollStates[sCurrentBagPocket].cursorPos * 16 + 16); +} + +static void sub_80A73F0(void) +{ + sub_814ADC8(); +} + +static void sub_80A73FC(void) +{ + HandleDestroyMenuCursors(); + sub_814AD44(); +} + +static void sub_80A740C(void) +{ + sub_80A75E4(); + sub_80A7768(); + sub_80A7420(); +} + +static void sub_80A7420(void) +{ + struct UnknownStruct2 *unkStruct = &gUnknown_0203853C; + int index; + + switch (unkStruct->unk0) + { + case 3: + unkStruct->unk0 = 2; + break; + case 2: + switch (unkStruct->unk2) + { + case 0: + index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; + ItemListMenu_ChangeDescription(gCurrentBagPocketItemSlots[index].itemId, unkStruct->textLine); + break; + case 1: + sub_80A4A98(gOtherText_SwitchWhichItem, unkStruct->textLine); + break; + case 2: + sub_80A4A98(gOtherText_WhatWillYouDo2, unkStruct->textLine); + break; + case 3: + sub_80A4A98(gOtherText_HowManyToToss, unkStruct->textLine); + break; + case 4: + sub_80A4A98(gOtherText_ThrewAwayItem, unkStruct->textLine); + break; + case 5: + sub_80A4A98(gOtherText_OkayToThrowAwayPrompt, unkStruct->textLine); + break; + case 6: + sub_80A4A98(gOtherText_HowManyToDeposit, unkStruct->textLine); + break; + case 7: + sub_80A4A98(gOtherText_DepositedItems, unkStruct->textLine); + break; + case 8: + sub_80A4A98(gOtherText_NoRoomForItems, unkStruct->textLine); + break; + case 9: + sub_80A4A98(gOtherText_CantStoreSomeoneItem, unkStruct->textLine); + break; + } + unkStruct->textLine++; + if (unkStruct->textLine == 3) + { + unkStruct->unk0 = 0; + sub_80A7918(); + } + break; + } +} + +static void sub_80A751C(void) +{ + gUnknown_0203853C.unk0 = 0; +} + +static void sub_80A7528(u8 a) +{ + gUnknown_0203853C.textLine = 0; + gUnknown_0203853C.unk2 = a; + switch (sub_80A78F4()) + { + case 0: + gUnknown_0203853C.unk0 = 2; + while (gUnknown_0203853C.unk0 != 0) + sub_80A7420(); + break; + case 1: + gUnknown_0203853C.unk0 = 3; + break; + case 2: + gUnknown_0203853C.unk0 = 1; + break; + } +} + +static void sub_80A756C(void) +{ + if (gUnknown_0203853C.unk0 == 2 || gUnknown_0203853C.unk0 == 3) + sub_80A7918(); + gUnknown_0203853C.unk0 = 0; +} + +static void sub_80A7590(void) +{ + MenuZeroFillWindowRect(0, 13, 13, 20); + sub_80A756C(); +} + +static void sub_80A75A8(void) +{ + if (gUnknown_0203853C.unk0 == 2 || gUnknown_0203853C.unk0 == 3) + gUnknown_0203853C.unk0 = 1; +} + +static void sub_80A75C4(void) +{ + switch (gUnknown_0203853C.unk0) + { + case 1: + gUnknown_0203853C.unk0 = 3; + break; + case 0: + sub_80A7918(); + break; + } +} + +static void sub_80A75E4(void) +{ + if (gUnknown_02038540.unk0 == 1 && sub_80A7988() == 0) + { + int r1; + + sub_80A47E8(gUnknown_02038563, gUnknown_02038540.unk1, gUnknown_02038540.unk1, 1); + gUnknown_02038540.unk1++; + if (gUnknown_02038540.unk2 != 0) + r1 = 5; + else + r1 = 7; + if (r1 < gUnknown_02038540.unk1) + { + gUnknown_02038540.unk0 = 0; + sub_80A78E8(); + } + } +} + +static void sub_80A7630(void) +{ + gUnknown_02038540.unk0 = 0; +} + +static void sub_80A763C(void) +{ + struct UnknownStruct3 *r4 = &gUnknown_02038540; + + switch (sub_80A78C4()) + { + case FALSE: + sub_80A48E8(gUnknown_02038563, 0, 7); + break; + case TRUE: + r4->unk0 = 1; + r4->unk1 = 0; + r4->unk2 = 0; + break; + } +} + +static void sub_80A7678(void) +{ + if (gUnknown_02038540.unk0 == 1) + sub_80A78E8(); + gUnknown_02038540.unk0 = 0; +} + +static void sub_80A7694(void) +{ + gUnknown_02038540.unk2 = 1; +} + +static void sub_80A76A0(void) +{ + MenuZeroFillWindowRect(14, 2, 29, 18); + sub_80A7678(); +} + +static bool32 sub_80A76B8(void) +{ + struct UnknownStruct3 *s = &gUnknown_02038540; + + return (s->unk0 == 0); +} + +static bool32 sub_80A76D0(void) +{ + struct UnknownStruct3 *s = &gUnknown_02038540; + + return (s->unk1 > 5); +} + +static void sub_80A76E8(void) +{ + if (gUnknown_02038544.unk0 == 1) + { + DisplayItemMessageOnField( + gUnknown_02038544.unk1, + gUnknown_02038544.unk4, + gUnknown_02038544.unk8, + gUnknown_02038544.unk2); + gUnknown_02038544.unk0 = 0; + } +} + +static void sub_80A770C(void) +{ + gUnknown_02038544.unk0 = 0; +} + +static void DisplayCannotUseItemMessage(int a, const u8 *b, TaskFunc func, int d) +{ + struct UnknownStruct4 *r4 = &gUnknown_02038544; + + switch (sub_80A7924()) + { + case 0: + DisplayItemMessageOnField(a, b, func, d); + break; + case 2: + r4->unk0 = 1; + r4->unk1 = a; + r4->unk4 = b; + r4->unk8 = func; + r4->unk2 = d; + break; + } +} + +static void sub_80A7768(void) +{ + struct UnknownStruct5 *r4 = &gUnknown_02038550; + + if (r4->unk0 == 2) + { + if (r4->unk1 != 0) + { + if (r4->unk2 != 1) + { + const u8 *text = sItemPopupMenuActions[sPopupMenuActionList[r4->unk1 - 1]].text; + int var = r4->unk1 - 1; + + MenuPrint(text, 7, var * 2 + 1 + r4->unk3); + } + else + { + const u8 *text; + int var; + + if (r4->unk1 == 1) + text = sub_80A4B90(gScriptItemId); + else + text = sItemPopupMenuActions[sPopupMenuActionList[r4->unk1 - 1]].text; + var = r4->unk1 - 1; + MenuPrint(text, (var >> 1) * 6 + 1, (var & 1) * 2 + 8); + } + if (r4->unk1 == gUnknown_02038564) + { + r4->unk0 = 0; + sub_80A7970(); + } + } + r4->unk1++; + } +} + +static void sub_80A7828(void) +{ + gUnknown_02038550.unk0 = 0; +} + +static void sub_80A7834(int a, int b) +{ + struct UnknownStruct5 *r4 = &gUnknown_02038550; + + switch (sub_80A7958()) + { + case 1: + r4->unk0 = 2; + r4->unk1 = 0; + r4->unk2 = a; + r4->unk3 = b; + break; + case 2: + r4->unk0 = 1; + r4->unk1 = 0; + r4->unk2 = a; + r4->unk3 = b; + break; + } +} + +static void sub_80A7868(void) +{ + if (gUnknown_02038550.unk0 == 2) + gUnknown_02038550.unk0 = 1; +} + +static void sub_80A7880(void) +{ + switch (gUnknown_02038550.unk0) + { + case 1: + gUnknown_02038550.unk0 = 2; + break; + case 0: + sub_80A7970(); + break; + } +} + +static bool32 sub_80A78A0(void) +{ + struct UnknownStruct5 *r0 = &gUnknown_02038550; + + return (r0->unk0 == 0); +} + +static void sub_80A78B8(void) +{ + gUnknown_02038554.unk0 = 0; +} + +static bool32 sub_80A78C4(void) +{ + bool32 retVal; + + if (gLinkOpen == TRUE) + { + sub_80A7868(); + sub_80A75A8(); + retVal = TRUE; + } + else + { + retVal = FALSE; + } + return retVal; +} + +static void sub_80A78E8(void) +{ + sub_80A7880(); +} + +static int sub_80A78F4(void) +{ + int retVal; + + if (gLinkOpen == TRUE) + { + if (sub_80A76B8() != 0) + retVal = 1; + else + retVal = 2; + } + else + { + retVal = 0; + } + return retVal; +} + +static void sub_80A7918(void) +{ + sub_80A76E8(); +} + +static int sub_80A7924(void) +{ + if (gLinkOpen == TRUE && sub_80A76B8() == 0) + { + if (sub_80A76D0() != 0) + { + sub_80A7678(); + return 0; + } + } + else + { + return 0; + } + sub_80A7694(); + return 2; +} + +static int sub_80A7958(void) +{ + if (sub_80A76B8() == 0) + return 2; + sub_80A75A8(); + return 1; +} + +static void sub_80A7970(void) +{ + sub_80A75C4(); +} + +static void sub_80A797C(void) +{ + gUnknown_02038554.unk0 = 1; +} + +static int sub_80A7988(void) +{ + int val = gUnknown_02038554.unk0; + + gUnknown_02038554.unk0 = 0; + return val; +} + +static const u16 gPalette_83C170C[] = INCBIN_U16("graphics/unknown/83C170C.gbapal"); +static const u8 gSpriteImage_83C172C[] = INCBIN_U8("graphics/unknown_sprites/83C172C.4bpp"); + +const u8 gSpriteImage_UnusedCherry[] = INCBIN_U8("graphics/unused/cherry.4bpp"); +const u16 gSpritePalette_UnusedCherry[] = INCBIN_U16("graphics/unused/cherry.gbapal"); + +//------------------------------------------------------------------------------ +// Bag Sprite +//------------------------------------------------------------------------------ + +static const struct OamData sBagSpriteOamData = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 7, + .affineParam = 0, +}; + +static const union AnimCmd sBagSpriteAnimSeq0[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_END, +}; + +static const union AnimCmd sBagSpriteAnimSeq1[] = +{ + ANIMCMD_FRAME(64, 4), + ANIMCMD_END, +}; + +static const union AnimCmd sBagSpriteAnimSeq5[] = +{ + ANIMCMD_FRAME(128, 4), + ANIMCMD_END, +}; + +static const union AnimCmd sBagSpriteAnimSeq2[] = +{ + ANIMCMD_FRAME(192, 4), + ANIMCMD_END, +}; + +static const union AnimCmd sBagSpriteAnimSeq3[] = +{ + ANIMCMD_FRAME(256, 4), + ANIMCMD_END, +}; + +static const union AnimCmd sBagSpriteAnimSeq4[] = +{ + ANIMCMD_FRAME(320, 4), + ANIMCMD_END, +}; + +static const union AnimCmd *const sBagSpriteAnimTable[] = +{ + sBagSpriteAnimSeq0, + sBagSpriteAnimSeq1, + sBagSpriteAnimSeq2, + sBagSpriteAnimSeq3, + sBagSpriteAnimSeq4, + sBagSpriteAnimSeq5, +}; + +static const union AffineAnimCmd sBagSpriteAffineAnimSeq[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -2, 2), + AFFINEANIMCMD_FRAME(0, 0, 2, 4), + AFFINEANIMCMD_FRAME(0, 0, -2, 4), + AFFINEANIMCMD_FRAME(0, 0, 2, 2), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const sBagSpriteAffineAnimTable[] = +{ + sBagSpriteAffineAnimSeq, +}; + +static const struct CompressedSpriteSheet sMaleBagSpriteSheet = {gBagMaleTiles, 0x3000, 30000}; +static const struct CompressedSpriteSheet sFemaleBagSpriteSheet = {gBagFemaleTiles, 0x3000, 30000}; +static const struct CompressedSpritePalette sBagSpritePalette = {gBagPalette, 30000}; + +static void sub_80A7998(struct Sprite *sprite) +{ + sprite->animNum = 0; + sprite->data0 = 0; + sprite->data1 = 0; + sprite->data2 = 0; + sprite->data3 = 0; + sprite->data4 = 0; + sprite->callback = sub_80A79B4; +} + +static void sub_80A79B4(struct Sprite *sprite) +{ + if (gUnknown_0203855B != -1) + sub_80A79EC(sprite); + if (gUnknown_0203855C != 0) + sub_80A7A94(sprite); +} + +static void sub_80A79EC(struct Sprite *sprite) +{ + switch (sprite->data3) + { + case 0: + if (gUnknown_0203855B != 6) + { + sprite->animBeginning = TRUE; + sprite->animNum = gUnknown_0203855B; + gUnknown_0203855B = -1; + } + else + { + sprite->animBeginning = TRUE; + sprite->animNum = 0; + sprite->pos1.y -= 4; + sprite->data0 = 4; + sprite->data3 = 1; + sub_80A7AE4(sprite); + } + break; + case 1: + if (sprite->data0 != 0) + { + if (sprite->data1 != 0) + { + sprite->pos1.y++; + sprite->data0--; + } + sprite->data1 = (sprite->data1 + 1) & 1; + } + else + { + gUnknown_0203855B = -1; + sprite->data1 = 0; + sprite->data3 = 0; + } + break; + } +} + +static void sub_80A7A94(struct Sprite *sprite) +{ + switch (sprite->data4) + { + case 0: + sprite->oam.affineMode = 1; + sprite->affineAnims = sBagSpriteAffineAnimTable; + InitSpriteAffineAnim(sprite); + sprite->data4 = 1; + break; + case 1: + sprite->data2++; + if (sprite->data2 == 12) + sub_80A7AE4(sprite); + break; + } +} + +static void sub_80A7AE4(struct Sprite *sprite) +{ + gUnknown_0203855C = 0; + sprite->oam.affineMode = 0; + sprite->data2 = 0; + sprite->data4 = 0; + FreeOamMatrix(sprite->oam.matrixNum); +} + +static const struct SpriteTemplate sBagSpriteTemplate = +{ + .tileTag = 30000, + .paletteTag = 30000, + .oam = &sBagSpriteOamData, + .anims = sBagSpriteAnimTable, + .images = NULL, + .affineAnims = sBagSpriteAffineAnimTable, + .callback = sub_80A7998, +}; + +static void CreateBagSprite(void) +{ + CreateSprite(&sBagSpriteTemplate, 58, 40, 0); +} + +//------------------------------------------------------------------------------ +// Pokeball Sprite +//------------------------------------------------------------------------------ + +static const struct OamData gOamData_83C1CF8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 4, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 8, + .affineParam = 0, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83C1D00[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 8, 32), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83C1D10[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -8, 32), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1D20[] = +{ + gSpriteAffineAnim_83C1D00, + gSpriteAffineAnim_83C1D10, +}; + +static const struct SpriteFrameImage gSpriteImageTable_83C1D28[] = +{ + {gSpriteImage_83C172C, sizeof(gSpriteImage_83C172C)}, +}; + +static const struct SpritePalette sPokeballSpritePalette = {gPalette_83C170C, 8}; + +static void sub_80A7B28(struct Sprite *sprite) +{ + sprite->data3 = 0; + sprite->data0 = 0; + sub_80A7B6C(sprite); + sprite->callback = sub_80A7B6C; +} + +static void sub_80A7B48(struct Sprite *sprite) +{ + sprite->centerToCornerVecX = sprite->data5 - ((sprite->data0 + 1) & 1); + sprite->centerToCornerVecY = sprite->data6 - ((sprite->data0 + 1) & 1); +} + +static void sub_80A7B6C(struct Sprite *sprite) +{ + if (sprite->data7 != 0) + { + switch (sprite->data3) + { + case 0: + sprite->oam.affineMode = 1; + if (sprite->data7 == 1) + sprite->affineAnims = gSpriteAffineAnimTable_83C1D20; + else + sprite->affineAnims = gSpriteAffineAnimTable_83C1D20 + 1; + InitSpriteAffineAnim(sprite); + sprite->data3 = 1; + sprite->data5 = sprite->centerToCornerVecX; + sprite->data6 = sprite->centerToCornerVecY; + sub_80A7B48(sprite); + break; + case 1: + sprite->data0++; + sub_80A7B48(sprite); + if (sprite->data0 == 32) + { + sprite->data0 = 0; + sprite->data3 = 0; + sprite->centerToCornerVecX = sprite->data5; + sprite->centerToCornerVecY = sprite->data6; + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = 0; + sprite->callback = SpriteCallbackDummy; + } + break; + } + } +} + +static const struct SpriteTemplate sPokeballSpriteTemplate = +{ + .tileTag = 0xFFFF, + .paletteTag = 8, + .oam = &gOamData_83C1CF8, + .anims = sBagSpriteAnimTable, + .images = gSpriteImageTable_83C1D28, + .affineAnims = gSpriteAffineAnimTable_83C1D20, + .callback = sub_80A7B28, +}; + +static void CreateBagPokeballSprite(u8 a) +{ + LoadSpritePalette(&sPokeballSpritePalette); + sPokeballSpriteId = CreateSprite(&sPokeballSpriteTemplate, 16, 88, 0); + gSprites[sPokeballSpriteId].data7 = a; +} + +static void sub_80A7C64(void) +{ + FreeSpritePaletteByTag(8); + FreeOamMatrix(gSprites[sPokeballSpriteId].oam.matrixNum); + DestroySprite(&gSprites[sPokeballSpriteId]); +} + +static const struct OamData sBerrySpriteOamData = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 7, + .affineParam = 0, +}; + +static const struct OamData gOamData_83C1D58 = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + .affineParam = 0, +}; + +static const union AnimCmd sBerrySpriteAnimSeq[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd *const sBerrySpriteAnimTable[] = +{ + sBerrySpriteAnimSeq, +}; + +static const struct SpriteFrameImage sBerrySpriteImageTable[] = +{ + {ewramBerryPic, 0x800}, +}; + +static void SpriteCB_BerrySprite(struct Sprite *); +static const struct SpriteTemplate sBerrySpriteTemplate = +{ + .tileTag = 0xFFFF, + .paletteTag = 30020, + .oam = &sBerrySpriteOamData, + .anims = sBerrySpriteAnimTable, + .images = sBerrySpriteImageTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_BerrySprite, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83C1D8C[] = +{ + AFFINEANIMCMD_FRAME(-1, -1, -3, 96), + AFFINEANIMCMD_FRAME(0, 0, 0, 16), + AFFINEANIMCMD_FRAME(-2, -2, -1, 64), + AFFINEANIMCMD_FRAME(-8, 0, 0, 16), + AFFINEANIMCMD_FRAME(0, -8, 0, 16), + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83C1DC4[] = +{ + AFFINEANIMCMD_FRAME(-1, -1, 3, 96), + AFFINEANIMCMD_FRAME(0, 0, 0, 16), + AFFINEANIMCMD_FRAME(-2, -2, 1, 64), + AFFINEANIMCMD_FRAME(-8, 0, 0, 16), + AFFINEANIMCMD_FRAME(0, -8, 0, 16), + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1DFC[] = +{ + gSpriteAffineAnim_83C1D8C, + gSpriteAffineAnim_83C1DC4, +}; + +static const struct SpriteTemplate gSpriteTemplate_83C1E04 = +{ + .tileTag = 0xFFFF, + .paletteTag = 30020, + .oam = &gOamData_83C1D58, + .anims = sBerrySpriteAnimTable, + .images = sBerrySpriteImageTable, + .affineAnims = gSpriteAffineAnimTable_83C1DFC, + .callback = SpriteCallbackDummy, +}; + +static const struct {const u8 *lzPic; const u8 *lzPalette;} sBerryGraphicsTable[] = +{ + {gBerryPic_Cheri, gBerryPalette_Cheri}, + {gBerryPic_Chesto, gBerryPalette_Chesto}, + {gBerryPic_Pecha, gBerryPalette_Pecha}, + {gBerryPic_Rawst, gBerryPalette_Rawst}, + {gBerryPic_Aspear, gBerryPalette_Aspear}, + {gBerryPic_Leppa, gBerryPalette_Leppa}, + {gBerryPic_Oran, gBerryPalette_Oran}, + {gBerryPic_Persim, gBerryPalette_Persim}, + {gBerryPic_Lum, gBerryPalette_Lum}, + {gBerryPic_Sitrus, gBerryPalette_Sitrus}, + {gBerryPic_Figy, gBerryPalette_Figy}, + {gBerryPic_Wiki, gBerryPalette_Wiki}, + {gBerryPic_Mago, gBerryPalette_Mago}, + {gBerryPic_Aguav, gBerryPalette_Aguav}, + {gBerryPic_Iapapa, gBerryPalette_Iapapa}, + {gBerryPic_Razz, gBerryPalette_Razz}, + {gBerryPic_Bluk, gBerryPalette_Bluk}, + {gBerryPic_Nanab, gBerryPalette_Nanab}, + {gBerryPic_Wepear, gBerryPalette_Wepear}, + {gBerryPic_Pinap, gBerryPalette_Pinap}, + {gBerryPic_Pomeg, gBerryPalette_Pomeg}, + {gBerryPic_Kelpsy, gBerryPalette_Kelpsy}, + {gBerryPic_Qualot, gBerryPalette_Qualot}, + {gBerryPic_Hondew, gBerryPalette_Hondew}, + {gBerryPic_Grepa, gBerryPalette_Grepa}, + {gBerryPic_Tamato, gBerryPalette_Tamato}, + {gBerryPic_Cornn, gBerryPalette_Cornn}, + {gBerryPic_Magost, gBerryPalette_Magost}, + {gBerryPic_Rabuta, gBerryPalette_Rabuta}, + {gBerryPic_Nomel, gBerryPalette_Nomel}, + {gBerryPic_Spelon, gBerryPalette_Spelon}, + {gBerryPic_Pamtre, gBerryPalette_Pamtre}, + {gBerryPic_Watmel, gBerryPalette_Watmel}, + {gBerryPic_Durin, gBerryPalette_Durin}, + {gBerryPic_Belue, gBerryPalette_Belue}, + {gBerryPic_Liechi, gBerryPalette_Liechi}, + {gBerryPic_Ganlon, gBerryPalette_Ganlon}, + {gBerryPic_Salac, gBerryPalette_Salac}, + {gBerryPic_Petaya, gBerryPalette_Petaya}, + {gBerryPic_Apicot, gBerryPalette_Apicot}, + {gBerryPic_Lansat, gBerryPalette_Lansat}, + {gBerryPic_Starf, gBerryPalette_Starf}, + {gBerryPic_Enigma, gBerryPalette_Enigma}, +}; + +static void DrawBerryPic(const u8 *src, u8 *dst) +{ + u8 i; + u8 j; + + memset(dst, 0, 0x800); + dst += 0x100; + for (i = 0; i < 6; i++) + { + dst += 32; + for (j = 0; j < 6; j++) + { + memcpy(dst, src, 32); + dst += 32; + src += 32; + } + if (i != 5) + dst += 32; + } +} + +static void LoadBerryPic(u8 berryId) +{ + struct SpritePalette spritePal; + + if (berryId == 0x2A && IsEnigmaBerryValid() == TRUE) + { + DrawBerryPic(gSaveBlock1.enigmaBerry.pic, ewramBerryPic); + spritePal.data = gSaveBlock1.enigmaBerry.palette; + spritePal.tag = 0x7544; + LoadSpritePalette(&spritePal); + } + else + { + spritePal.data = (u16 *)sBerryGraphicsTable[berryId].lzPalette; + spritePal.tag = 0x7544; + LoadCompressedObjectPalette((struct CompressedSpritePalette *)&spritePal); + sub_800D238(sBerryGraphicsTable[berryId].lzPic, ewramBerryPicTemp); + DrawBerryPic(ewramBerryPicTemp, ewramBerryPic); + } +} + +u8 CreateBerrySprite(u8 berryId, s16 x, s16 y) +{ + LoadBerryPic(berryId); + return CreateSprite(&sBerrySpriteTemplate, x, y, 0); +} + +static void SpriteCB_BerrySprite(struct Sprite *sprite) +{ + sprite->pos2.y = -gUnknown_030041B4; +} + +void sub_80A7DD4(void) +{ + FreeSpritePaletteByTag(0x7544); + FreeSpritePaletteByTag(8); +} + +u8 sub_80A7DEC(u8 berryId, u8 x, u8 y, bool8 animate) +{ + u8 spriteId; + + FreeSpritePaletteByTag(0x7544); + LoadBerryPic(berryId); + spriteId = CreateSprite(&gSpriteTemplate_83C1E04, x, y, 0); + if (animate == TRUE) + StartSpriteAffineAnim(&gSprites[spriteId], 1); + return spriteId; +} + +const struct CompressedSpriteSheet gUnknown_083C1F74 = {gBerryCheckCircle_Gfx, 2048, 0x2710}; + +const struct CompressedSpritePalette gUnknown_083C1F7C = {gBerryCheck_Pal, 0x2710}; + +static const struct OamData gOamData_83C1F84 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd gSpriteAnim_83C1F8C[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd *const gSpriteAnimTable_83C1F94[] = +{ + gSpriteAnim_83C1F8C, +}; + +static const struct SpriteTemplate gSpriteTemplate_83C1F98 = +{ + .tileTag = 10000, + .paletteTag = 10000, + .oam = &gOamData_83C1F84, + .anims = gSpriteAnimTable_83C1F94, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_BerrySprite, +}; + +u8 sub_80A7E5C(s16 x) +{ + return CreateSprite(&gSpriteTemplate_83C1F98, x, 99, 0); +} diff --git a/src/field/item_use.c b/src/field/item_use.c new file mode 100644 index 000000000..1750c1584 --- /dev/null +++ b/src/field/item_use.c @@ -0,0 +1,1198 @@ +#include "global.h" +#include "item_use.h" +#include "battle.h" +#include "berry.h" +#include "bike.h" +#include "coins.h" +#include "data2.h" +#include "event_data.h" +#include "field_effect.h" +#include "field_fadetransition.h" +#include "field_map_obj_helpers.h" +#include "field_player_avatar.h" +#include "field_weather.h" +#include "fieldmap.h" +#include "item.h" +#include "item_menu.h" +#include "items.h" +#include "mail.h" +#include "main.h" +#include "map_obj_lock.h" +#include "menu.h" +#include "menu_helpers.h" +#include "metatile_behavior.h" +#include "palette.h" +#include "party_menu.h" +#include "pokeblock.h" +#include "pokemon_item_effect.h" +#include "pokemon_menu.h" +#include "rom4.h" +#include "rom_8094928.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "vars.h" + +extern void (* gUnknown_03005D00)(u8); +extern void (* gFieldCallback)(void); +extern void (* gUnknown_0300485C)(void); +extern void (* gUnknown_03004AE4)(u8, u16, TaskFunc); + +extern u8 gUnknown_02038561; +extern u8 gLastFieldPokeMenuOpened; +extern u8 gBankInMenu; + +extern u8 gUnknown_081A1654[]; +extern u8 gUnknown_081A168F[]; + +extern u16 gBattlePartyID[]; + +extern u16 gBattleTypeFlags; + +static const u8 gSSTidalBetaString[] = _("この チケットで ふねに のりほうだい\nはやく のってみたいな"); +static const u8 gSSTidalBetaString2[] = _("この チケットで ふねに のりほうだい\nはやく のってみたいな"); + +static const u8 *const gUnknown_083D61DC[2] = +{ + gSSTidalBetaString, + gSSTidalBetaString2, +}; + +static const MainCallback gExitToOverworldFuncList[] = +{ + sub_808B020, + c2_exit_to_overworld_2_switch, + sub_810B96C, +}; + +static const u8 gItemFinderDirections[] = { DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST }; + +static const struct YesNoFuncTable gUnknown_083D61F4 = +{ + .yesFunc = sub_80C9FC0, + .noFunc = CleanUpItemMenuMessage, +}; + +void ExecuteSwitchToOverworldFromItemUse(u8 taskId) +{ + u8 taskData; + + if (gScriptItemId == 0xAF) + taskData = gTasks[taskId].data[15] - 1; + else + taskData = ItemId_GetType(gScriptItemId) - 1; + + gTasks[taskId].data[8] = (u32)gExitToOverworldFuncList[taskData] >> 16; + gTasks[taskId].data[9] = (u32)gExitToOverworldFuncList[taskData]; + gTasks[taskId].func = HandleItemMenuPaletteFade; +} + +void ItemMenu_ConfirmNormalFade(u8 var) +{ + ExecuteSwitchToOverworldFromItemUse(var); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); +} + +void ItemMenu_ConfirmComplexFade(u8 var) +{ + ExecuteSwitchToOverworldFromItemUse(var); + fade_screen(1, 0); +} + +void SetUpItemUseOnFieldCallback(u8 taskId) +{ + if (gTasks[taskId].data[2] != 1) + { + gFieldCallback = (void *)ExecuteItemUseFromBlackPalette; + ItemMenu_ConfirmNormalFade(taskId); + } + else + gUnknown_03005D00(taskId); +} + +void HandleDeniedItemUseMessage(u8 var1, u8 playerMenuStatus, const u8 *text) +{ + StringExpandPlaceholders(gStringVar4, text); + + switch (playerMenuStatus) + { + case 0: // Item Menu + MenuZeroFillWindowRect(0, 13, 13, 20); + DisplayItemMessageOnField(var1, gStringVar4, CleanUpItemMenuMessage, 1); + break; + default: // Field + DisplayItemMessageOnField(var1, gStringVar4, CleanUpOverworldMessage, 0); + break; + } +} + +void DisplayDadsAdviceCannotUseItemMessage(u8 var1, u8 playerMenuStatus) +{ + HandleDeniedItemUseMessage(var1, playerMenuStatus, gOtherText_DadsAdvice); +} + +void DisplayCantGetOffBikeItemMessage(u8 var1, u8 playerMenuStatus) +{ + HandleDeniedItemUseMessage(var1, playerMenuStatus, gOtherText_CantGetOffBike); +} + +u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId) +{ + if (ItemId_GetFieldFunc(itemId) == ItemUseOutOfBattle_TMHM) + return 1; + else if (ItemId_GetFieldFunc(itemId) == ItemUseOutOfBattle_EvolutionStone) + return 2; + else + return 0; +} + +void ItemMenu_ReadMail(u8 taskId) +{ + struct MailStruct mailStruct; + + if (!gPaletteFade.active) + { + mailStruct.itemId = gScriptItemId; + HandleReadMail(&mailStruct, sub_80A5D04, 0); + DestroyTask(taskId); + } +} + +void ItemUseOutOfBattle_Mail(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = ItemMenu_ReadMail; +} + +void ItemUseOutOfBattle_Bike(u8 taskId) +{ + s16 x, y; + u8 tileBehavior; + + PlayerGetDestCoords(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + + if (FlagGet(SYS_CYCLING_ROAD) == TRUE // on cycling road? + || MetatileBehavior_IsVerticalRail(tileBehavior) == TRUE + || MetatileBehavior_IsHorizontalRail(tileBehavior) == TRUE + || MetatileBehavior_IsIsolatedVerticalRail(tileBehavior) == TRUE + || MetatileBehavior_IsIsolatedHorizontalRail(tileBehavior) == TRUE) + { + DisplayCantGetOffBikeItemMessage(taskId, gTasks[taskId].data[2]); + } + else + { + if (IsBikingAllowedByMap() == TRUE && IsBikingDisallowedByPlayer() == FALSE) + { + gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Bike; + SetUpItemUseOnFieldCallback(taskId); + } + else + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]); + } +} + +void ItemUseOnFieldCB_Bike(u8 taskId) +{ + if (ItemId_GetSecondaryId(gScriptItemId) == 0) + GetOnOffBike(2); + if (ItemId_GetSecondaryId(gScriptItemId) == 1) + GetOnOffBike(4); + + sub_8064E2C(); + ScriptContext2_Disable(); + DestroyTask(taskId); +} + +bool32 CanFish(void) +{ + s16 x, y; + u16 tileBehavior; + + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + + if (MetatileBehavior_IsWaterfall(tileBehavior)) + return FALSE; + + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_4)) + return FALSE; + + if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) + { + if (IsPlayerFacingSurfableFishableWater()) + return TRUE; + } + else + { + if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior) && !MapGridIsImpassableAt(x, y)) + return TRUE; + if (MetatileBehavior_IsBridge(tileBehavior) == TRUE) + return TRUE; + } + + return FALSE; +} + +void ItemUseOutOfBattle_Rod(u8 taskId) +{ + if (CanFish() == TRUE) + { + gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Rod; + SetUpItemUseOnFieldCallback(taskId); + } + else + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]); +} + +void ItemUseOnFieldCB_Rod(u8 taskId) +{ + StartFishing(ItemId_GetSecondaryId(gScriptItemId)); + DestroyTask(taskId); +} + +void ItemUseOutOfBattle_Itemfinder(u8 var) +{ + IncrementGameStat(0x27); + gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Itemfinder; + SetUpItemUseOnFieldCallback(var); +} + +void ItemUseOnFieldCB_Itemfinder(u8 taskId) +{ + if (ItemfinderCheckForHiddenItems(gMapHeader.events, taskId) == TRUE) + gTasks[taskId].func = RunItemfinderResults; + else + DisplayItemMessageOnField(taskId, gOtherText_NoResponse, ExitItemfinder, 0); +} + +void RunItemfinderResults(u8 taskId) +{ + u8 playerDir; + u8 playerDirToItem; + u8 i; + s16 *data = gTasks[taskId].data; + + if (!data[3]) + { + if (data[4] == 4) + { + playerDirToItem = GetPlayerDirectionTowardsHiddenItem(data[0], data[1]); + if (playerDirToItem) + { + SetPlayerDirectionTowardsItem(gItemFinderDirections[playerDirToItem - 1]); + gTasks[taskId].func = DisplayItemRespondingMessageAndExitItemfinder; + } + else // player is above hidden item. + { + playerDir = player_get_direction_lower_nybble(); + + // rotate player clockwise depending on current direction. + for (i = 0; i < 4; i++) + if (playerDir == gItemFinderDirections[i]) + data[5] = (i + 1) & 3; + + gTasks[taskId].func = RotatePlayerAndExitItemfinder; + data[3] = 0; + data[2] = 0; + } + return; + } + PlaySE(SE_DAUGI); // play the itemfinder jingle 4 times before executing the itemfinder. + data[4]++; + } + data[3] = (data[3] + 1) & 0x1F; +} + +void ExitItemfinder(u8 taskId) +{ + MenuZeroFillWindowRect(0, 14, 29, 19); + sub_8064E2C(); + ScriptContext2_Disable(); + DestroyTask(taskId); +} + +bool8 ItemfinderCheckForHiddenItems(struct MapEvents *events, u8 taskId) +{ + int distanceX, distanceY; + u16 x, y; + s16 newDistanceX, newDistanceY, i; + + PlayerGetDestCoords(&x, &y); + gTasks[taskId].data[2] = FALSE; + + for (i = 0; i < events->bgEventCount; i++) + { + if ((events -> bgEvents[i].kind == 7) && !FlagGet(events -> bgEvents[i].bgUnion.hiddenItem.hiddenItemId + 600)) + { + // do a distance lookup of each item so long as the index remains less than the objects on the current map. + distanceX = (u16)events -> bgEvents[i].x + 7; + newDistanceX = distanceX - x; + distanceY = (u16)events -> bgEvents[i].y + 7; + newDistanceY = distanceY - y; + + // is item in range? + if ((u16)(newDistanceX + 7) < 15 && (newDistanceY >= -5) && (newDistanceY < 6)) + sub_80C9838(taskId, newDistanceX, newDistanceY); // send coordinates of the item relative to the player + } + } + sub_80C9720(taskId); + + // hidden item detected? + if(gTasks[taskId].data[2] == TRUE) + return TRUE; + else + return FALSE; +} + +bool8 HiddenItemAtPos(struct MapEvents *events, s16 x, s16 y) +{ + u8 bgEventCount = events->bgEventCount; + struct BgEvent *bgEvent = events->bgEvents; + int i; + + for(i = 0; i < bgEventCount; i++) + { + if(bgEvent[i].kind == 7 && x == (u16)bgEvent[i].x && y == (u16)bgEvent[i].y) // hidden item and coordinates matches x and y passed? + { + if(!FlagGet(bgEvent[i].bgUnion.hiddenItem.hiddenItemId + 600)) + return TRUE; + else + return FALSE; + } + } + return FALSE; +} + +bool8 sub_80C9688(struct MapConnection *connection, int x, int y) +{ + struct MapHeader *mapHeader; + u16 localX, localY; + u32 localOffset; + s32 localLength; + + mapHeader = mapconnection_get_mapheader(connection); + + switch(connection->direction) + { + // same weird temp variable behavior seen in HiddenItemAtPos + case 2: + localOffset = connection->offset + 7; + localX = x - localOffset; + localLength = mapHeader->mapData->height - 7; + localY = localLength + y; // additions are reversed for some reason + break; + case 1: + localOffset = connection->offset + 7; + localX = x - localOffset; + localLength = gMapHeader.mapData->height + 7; + localY = y - localLength; + break; + case 3: + localLength = mapHeader->mapData->width - 7; + localX = localLength + x; // additions are reversed for some reason + localOffset = connection->offset + 7; + localY = y - localOffset; + break; + case 4: + localLength = gMapHeader.mapData->width + 7; + localX = x - localLength; + localOffset = connection->offset + 7; + localY = y - localOffset; + break; + default: + return FALSE; + } + return HiddenItemAtPos(mapHeader->events, localX, localY); +} + +// weird math +#ifdef NONMATCHING +void sub_80C9720(u8 taskId) +{ + s16 x, y; + s16 curX, curY; + s16 width = gMapHeader.mapData->width + 7; + s16 height = gMapHeader.mapData->height + 7; + + PlayerGetDestCoords(&x, &y); + + for (curX = x - 7; curX <= x + 7; curX++) + { + for (curY = y - 5; curY <= y + 5; curY++) + { + if (7 > curX + || curX >= width + || 7 > curY + || curY >= height) + { + struct MapConnection *conn = sub_8056BA0(curX, curY); + if (conn && sub_80C9688(conn, curX, curY) == TRUE) + sub_80C9838(taskId, curX - x, curY - y); + } + } + } +} +#else +__attribute__((naked)) +void sub_80C9720(u8 taskId) +{ + 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, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x4]\n\ + ldr r0, _080C9834 @ =gMapHeader\n\ + ldr r1, [r0]\n\ + ldr r0, [r1]\n\ + adds r0, 0x7\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x8]\n\ + ldr r0, [r1, 0x4]\n\ + adds r0, 0x7\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0xC]\n\ + mov r4, sp\n\ + adds r4, 0x2\n\ + mov r0, sp\n\ + adds r1, r4, 0\n\ + bl PlayerGetDestCoords\n\ + mov r0, sp\n\ + ldrh r0, [r0]\n\ + subs r0, 0x7\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + asrs r0, 16\n\ + mov r1, sp\n\ + movs r2, 0\n\ + ldrsh r1, [r1, r2]\n\ + adds r1, 0x7\n\ + cmp r0, r1\n\ + bgt _080C9824\n\ +_080C976E:\n\ + mov r5, sp\n\ + ldrh r0, [r5, 0x2]\n\ + subs r0, 0x5\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + lsls r2, r4, 16\n\ + asrs r1, r2, 16\n\ + movs r6, 0x2\n\ + ldrsh r0, [r5, r6]\n\ + adds r0, 0x5\n\ + lsls r3, 16\n\ + mov r8, r3\n\ + cmp r1, r0\n\ + bgt _080C980E\n\ + movs r0, 0x7\n\ + str r0, [sp, 0x10]\n\ + mov r1, r8\n\ + asrs r1, 16\n\ + mov r9, r1\n\ + mov r10, r0\n\ +_080C9796:\n\ + ldr r3, [sp, 0x10]\n\ + cmp r3, r9\n\ + bgt _080C97B8\n\ + ldr r5, [sp, 0x8]\n\ + lsls r0, r5, 16\n\ + asrs r0, 16\n\ + cmp r9, r0\n\ + bge _080C97B8\n\ + asrs r1, r2, 16\n\ + cmp r10, r1\n\ + bgt _080C97B8\n\ + ldr r6, [sp, 0xC]\n\ + lsls r0, r6, 16\n\ + asrs r0, 16\n\ + lsls r7, r4, 16\n\ + cmp r1, r0\n\ + blt _080C97F6\n\ +_080C97B8:\n\ + mov r0, r8\n\ + asrs r5, r0, 16\n\ + lsls r4, 16\n\ + asrs r6, r4, 16\n\ + adds r0, r5, 0\n\ + adds r1, r6, 0\n\ + bl sub_8056BA0\n\ + adds r7, r4, 0\n\ + cmp r0, 0\n\ + beq _080C97F6\n\ + adds r1, r5, 0\n\ + adds r2, r6, 0\n\ + bl sub_80C9688\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _080C97F6\n\ + mov r0, sp\n\ + ldrh r1, [r0]\n\ + subs r1, r5, r1\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + ldrh r2, [r0, 0x2]\n\ + subs r2, r6, r2\n\ + lsls r2, 16\n\ + asrs r2, 16\n\ + ldr r0, [sp, 0x4]\n\ + bl sub_80C9838\n\ +_080C97F6:\n\ + movs r1, 0x80\n\ + lsls r1, 9\n\ + adds r0, r7, r1\n\ + lsrs r4, r0, 16\n\ + lsls r2, r4, 16\n\ + asrs r1, r2, 16\n\ + mov r3, sp\n\ + movs r5, 0x2\n\ + ldrsh r0, [r3, r5]\n\ + adds r0, 0x5\n\ + cmp r1, r0\n\ + ble _080C9796\n\ +_080C980E:\n\ + movs r1, 0x80\n\ + lsls r1, 9\n\ + add r1, r8\n\ + lsrs r3, r1, 16\n\ + asrs r1, 16\n\ + mov r0, sp\n\ + movs r6, 0\n\ + ldrsh r0, [r0, r6]\n\ + adds r0, 0x7\n\ + cmp r1, r0\n\ + ble _080C976E\n\ +_080C9824:\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 {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080C9834: .4byte gMapHeader\n\ + .syntax divided"); +} +#endif + +void sub_80C9838(u8 taskId, s16 x, s16 y) +{ + s16 *data = gTasks[taskId].data; + s16 var1, var2, var3, var4; + + if(data[2] == FALSE) + { + data[0] = x; + data[1] = y; + data[2] = TRUE; + } + else + { + // data[0] and data[1] contain the player's coordinates. + // x and y contain the item's coordinates. + if(data[0] < 0) + var1 = data[0] * -1; // item is to the left + else + var1 = data[0]; // item is to the right + + if(data[1] < 0) + var2 = data[1] * -1; // item is to the north + else + var2 = data[1]; // item is to the south + + if(x < 0) + var3 = x * -1; + else + var3 = x; + + if(y < 0) + var4 = y * -1; + else + var4 = y; + + if(var1 + var2 > var3 + var4) + { + data[0] = x; + data[1] = y; + } + else + { + if(var1 + var2 == var3 + var4 && (var2 > var4 || (var2 == var4 && data[1] < y))) + { + data[0] = x; + data[1] = y; + } + } + } +} + +u8 GetPlayerDirectionTowardsHiddenItem(s16 itemX, s16 itemY) +{ + s16 abX, abY; + + if(itemX == 0 && itemY == 0) + return DIR_NONE; // player is standing on the item. + + // get absolute X distance. + if(itemX < 0) + abX = itemX * -1; + else + abX = itemX; + + // get absolute Y distance. + if(itemY < 0) + abY = itemY * -1; + else + abY = itemY; + + if(abX > abY) + { + if(itemX < 0) + return DIR_EAST; + else + return DIR_NORTH; + } + else + { + if(abX < abY) + { + if(itemY < 0) + return DIR_SOUTH; + else + return DIR_WEST; + } + if(abX == abY) + { + if(itemY < 0) + return DIR_SOUTH; + else + return DIR_WEST; + } + return DIR_NONE; // should never get here. return something so it doesnt crash. + } +} + +void SetPlayerDirectionTowardsItem(u8 direction) +{ + FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]); + FieldObjectClearAnim(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]); + UnfreezeMapObject(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]); + PlayerTurnInPlace(direction); +} + +void DisplayItemRespondingMessageAndExitItemfinder(u8 taskId) +{ + if(FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE) + DisplayItemMessageOnField(taskId, gOtherText_ItemfinderResponding, ExitItemfinder, 0); +} + +void RotatePlayerAndExitItemfinder(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if(FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE + || data[2] == FALSE) + { + SetPlayerDirectionTowardsItem(gItemFinderDirections[data[5]]); + data[2] = 1; + data[5] = (data[5] + 1) & 3; + data[3]++; + + if(data[3] == 4) + DisplayItemMessageOnField(taskId, gOtherText_ItemfinderItemUnderfoot, ExitItemfinder, 0); + } +} + +void ItemUseOutOfBattle_PokeblockCase(u8 taskId) +{ + if(sub_80F9344() == TRUE) + { + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]); + } + else if(gTasks[taskId].data[2] != TRUE) + { + sub_810BA7C(0); + ItemMenu_ConfirmNormalFade(taskId); + } + else + { + gFieldCallback = (void *)sub_8080E28; + sub_810BA7C(1); + ItemMenu_ConfirmComplexFade(taskId); + } +} + +void ItemUseOutOfBattle_CoinCase(u8 taskId) +{ + ConvertIntToDecimalStringN(gStringVar1, GetCoins(), 0, 4); + StringExpandPlaceholders(gStringVar4, gOtherText_Coins3); + + if(!gTasks[taskId].data[2]) + { + MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); + DisplayItemMessageOnField(taskId, gStringVar4, CleanUpItemMenuMessage, 1); + } + else + { + DisplayItemMessageOnField(taskId, gStringVar4, CleanUpOverworldMessage, 0); + } +} + +void sub_80C9BB8(u8 var) +{ + if(gMain.newKeys & A_BUTTON) + CleanUpItemMenuMessage(var); +} + +void sub_80C9BD8(u8 var) +{ + if(gMain.newKeys & A_BUTTON) + CleanUpOverworldMessage(var); +} + +// unused +void ItemUseOutOfBattle_SSTicket(u8 taskId) +{ + if(gTasks[taskId].data[2] == 0) + { + MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); + DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BB8, 1); + } + else + { + DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BD8, 0); + } +} + +void sub_80C9C7C(u8 taskId) +{ + if(IsPlayerFacingPlantedBerryTree() == TRUE) + { + gUnknown_03005D00 = sub_80C9D00; + gFieldCallback = ExecuteItemUseFromBlackPalette; + gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; + gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch; + gTasks[taskId].func = HandleItemMenuPaletteFade; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + } + else + { + ItemId_GetFieldFunc(gScriptItemId)(taskId); + } +} + +void sub_80C9D00(u8 taskId) +{ + RemoveBagItem(gScriptItemId, 1); + ScriptContext2_Enable(); + ScriptContext1_SetupScript(gUnknown_081A1654); + DestroyTask(taskId); +} + +void ItemUseOutOfBattle_WailmerPail(u8 taskId) +{ + if(TryToWaterBerryTree() == TRUE) + { + gUnknown_03005D00 = sub_80C9D74; + SetUpItemUseOnFieldCallback(taskId); + } + else + { + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]); + } +} + +void sub_80C9D74(u8 taskId) +{ + ScriptContext2_Enable(); + ScriptContext1_SetupScript(gUnknown_081A168F); + DestroyTask(taskId); +} + +void sub_80C9D98(u8 taskId) +{ + gUnknown_02038561 = 0; + ItemMenu_ConfirmNormalFade(taskId); +} + +void ItemUseOutOfBattle_Medicine(u8 taskId) +{ + gUnknown_03004AE4 = UseMedicine; + sub_80C9D98(taskId); +} + +void ItemUseOutOfBattle_SacredAsh(u8 taskId) +{ + u8 i; + + gLastFieldPokeMenuOpened = 0; + + for(i = 0; i < 6; i++) + { + if(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0 && GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) + { + gLastFieldPokeMenuOpened = i; + break; + } + } + gUnknown_03004AE4 = sub_8070048; + gUnknown_02038561 = 4; + ItemMenu_ConfirmNormalFade(taskId); +} + +void ItemUseOutOfBattle_PPRecovery(u8 taskId) +{ + gUnknown_03004AE4 = DoPPRecoveryItemEffect; + sub_80C9D98(taskId); +} + +void ItemUseOutOfBattle_PPUp(u8 taskId) +{ + gUnknown_03004AE4 = DoPPUpItemEffect; + sub_80C9D98(taskId); +} + +void ItemUseOutOfBattle_RareCandy(u8 taskId) +{ + gUnknown_03004AE4 = DoRareCandyItemEffect; + sub_80C9D98(taskId); +} + +void ItemUseOutOfBattle_TMHM(u8 taskId) +{ + MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); + + if(gScriptItemId >= ITEM_HM01) + DisplayItemMessageOnField(taskId, gOtherText_BootedHM, sub_80C9EE4, 1); // HM + else + DisplayItemMessageOnField(taskId, gOtherText_BootedTM, sub_80C9EE4, 1); // TM +} + +void sub_80C9EE4(u8 taskId) +{ + PlaySE(2); + gTasks[taskId].func = sub_80C9F10; +} + +void sub_80C9F10(u8 taskId) +{ + if(gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + { + StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gScriptItemId)]); + StringExpandPlaceholders(gStringVar4, gOtherText_ContainsMove); + DisplayItemMessageOnField(taskId, gStringVar4, sub_80C9F80, 1); + } +} + +void sub_80C9F80(u8 var) +{ + DisplayYesNoMenu(7, 7, 1); + sub_80A3FA0(gBGTilemapBuffers[1], 8, 8, 5, 4, 1); + DoYesNoFuncWithChoice(var, &gUnknown_083D61F4); +} + +void sub_80C9FC0(u8 var) +{ + gUnknown_03004AE4 = TeachMonTMMove; + sub_80C9D98(var); +} + +void sub_80C9FDC(void) +{ + RemoveBagItem(gScriptItemId, 1); + sub_80A3E0C(); + CopyItemName(gScriptItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, gOtherText_UsedItem); +} + +void ItemUseOutOfBattle_Repel(u8 var) +{ + if(VarGet(VAR_REPEL_STEP_COUNT) == FALSE) + { + VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gScriptItemId)); + sub_80C9FDC(); + DisplayItemMessageOnField(var, gStringVar4, CleanUpItemMenuMessage, 1); + } + else + { + DisplayItemMessageOnField(var, gOtherText_RepelLingers, CleanUpItemMenuMessage, 1); + } +} + +void sub_80CA07C(void) +{ + sub_80A3E0C(); + CopyItemName(gScriptItemId, gStringVar2); +} + +void sub_80CA098(u8 taskId) +{ + if(++gTasks[taskId].data[15] > 7) + { + PlaySE(0x75); + DisplayItemMessageOnField(taskId, gStringVar4, CleanUpItemMenuMessage, 1); + } +} + +void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId) +{ + if(gScriptItemId == 43) + { + FlagSet(SYS_ENC_UP_ITEM); + FlagReset(SYS_ENC_DOWN_ITEM); + sub_80CA07C(); + StringExpandPlaceholders(gStringVar4, gOtherText_UsedFlute); + gTasks[taskId].func = sub_80CA098; + gTasks[taskId].data[15] = 0; + } + else if(gScriptItemId == 42) + { + FlagSet(SYS_ENC_DOWN_ITEM); + FlagReset(SYS_ENC_UP_ITEM); + sub_80CA07C(); + StringExpandPlaceholders(gStringVar4, gOtherText_UsedRepel); + gTasks[taskId].func = sub_80CA098; + gTasks[taskId].data[15] = 0; + } +} + +void task08_080A1C44(u8 taskId) +{ + player_avatar_init_params_reset(); + sub_80878A8(); + DestroyTask(taskId); +} + +void sub_80CA18C(u8 taskId) +{ + sub_8053014(); + sub_80C9FDC(); + gTasks[taskId].data[0] = 0; + DisplayItemMessageOnField(taskId, gStringVar4, task08_080A1C44, 0); +} + +bool8 sub_80CA1C8(void) +{ + if(gMapHeader.mapType == MAP_TYPE_UNDERGROUND) + return TRUE; + else + return FALSE; +} + +void ItemUseOutOfBattle_EscapeRope(u8 taskId) +{ + if(sub_80CA1C8() == TRUE) // is map type an area you can use escape rope? + { + gUnknown_03005D00 = sub_80CA18C; + SetUpItemUseOnFieldCallback(taskId); + } + else + { + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]); + } +} + +void ItemUseOutOfBattle_EvolutionStone(u8 var) +{ + gUnknown_03004AE4 = DoEvolutionStoneItemEffect; + sub_80C9D98(var); +} + +void ItemUseInBattle_PokeBall(u8 var) +{ + if(PlayerPartyAndPokemonStorageFull() == FALSE) // have room for mon? + { + RemoveBagItem(gScriptItemId, 1); + sub_80A7094(var); + } + else + { + MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); + DisplayItemMessageOnField(var, gOtherText_BoxIsFull, CleanUpItemMenuMessage, 1); + } +} + +void sub_80CA294(u8 var) +{ + if(gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + sub_80A7094(var); +} + +void sub_80CA2BC(u8 taskId) +{ + if(++gTasks[taskId].data[15] > 7) + { + PlaySE(1); + RemoveBagItem(gScriptItemId, 1); + DisplayItemMessageOnField(taskId, sub_803F378(gScriptItemId), sub_80CA294, 1); + } +} + +void ItemUseInBattle_StatIncrease(u8 taskId) +{ + u16 partyId = gBattlePartyID[gBankInMenu]; + + MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); + + if(ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gScriptItemId, partyId, 0) != FALSE) + { + DisplayItemMessageOnField(taskId, gOtherText_WontHaveAnyEffect, CleanUpItemMenuMessage, 1); + } + else + { + gTasks[taskId].func = sub_80CA2BC; + gTasks[taskId].data[15] = 0; + } +} + +void sub_80CA394(u8 taskId) +{ + if(!gPaletteFade.active) + { + sub_8094E4C(); + gpu_pal_allocator_reset__manage_upper_four(); + DestroyTask(taskId); + } +} + +void sub_80CA3C0(u8 taskId) +{ + gTasks[taskId].func = sub_80CA394; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); +} + +void ItemUseInBattle_Medicine(u8 var) +{ + gUnknown_03004AE4 = UseMedicine; + sub_80CA3C0(var); +} + +void unref_sub_80CA410(u8 var) +{ + gUnknown_03004AE4 = sub_8070048; + sub_80CA3C0(var); +} + +void ItemUseInBattle_PPRecovery(u8 var) +{ + gUnknown_03004AE4 = DoPPRecoveryItemEffect; + sub_80CA3C0(var); +} + +void unref_sub_80CA448(u8 var) +{ + MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); + + if(ExecuteTableBasedItemEffect__(0, gScriptItemId, 0) == FALSE) + { + RemoveBagItem(gScriptItemId, 1); + GetMonNickname(&gPlayerParty[0], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_SnapConfusion); + DisplayItemMessageOnField(var, gStringVar4, sub_80A7094, 1); + } + else + { + DisplayItemMessageOnField(var, gOtherText_WontHaveAnyEffect, CleanUpItemMenuMessage, 1); + } +} + +void ItemUseInBattle_Escape(u8 taskId) +{ + MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); + + if((gBattleTypeFlags & BATTLE_TYPE_TRAINER) == FALSE) + { + sub_80C9FDC(); + DisplayItemMessageOnField(taskId, gStringVar4, sub_80A7094, 1); + } + else + { + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]); + } +} + +void ItemUseOutOfBattle_EnigmaBerry(u8 taskId) +{ + switch(GetItemEffectType(gScriptItemId) - 1) + { + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + gTasks[taskId].data[15] = 1; + ItemUseOutOfBattle_Medicine(taskId); + break; + case 9: + gTasks[taskId].data[15] = 1; + ItemUseOutOfBattle_SacredAsh(taskId); + break; + case 0: + gTasks[taskId].data[15] = 1; + ItemUseOutOfBattle_RareCandy(taskId); + break; + case 18: + case 19: + gTasks[taskId].data[15] = 1; + ItemUseOutOfBattle_PPUp(taskId); + break; + case 20: + gTasks[taskId].data[15] = 1; + ItemUseOutOfBattle_PPRecovery(taskId); + break; + default: + gTasks[taskId].data[15] = 4; + ItemUseOutOfBattle_CannotUse(taskId); + } +} + +void ItemUseInBattle_EnigmaBerry(u8 taskId) +{ + switch(GetItemEffectType(gScriptItemId)) + { + case 0: + ItemUseInBattle_StatIncrease(taskId); + break; + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 11: + ItemUseInBattle_Medicine(taskId); + break; + case 21: + ItemUseInBattle_PPRecovery(taskId); + break; + default: + ItemUseOutOfBattle_CannotUse(taskId); + } +} + +void ItemUseOutOfBattle_CannotUse(u8 taskId) +{ + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]); +} diff --git a/src/field/landmark.c b/src/field/landmark.c new file mode 100644 index 000000000..6a53716bb --- /dev/null +++ b/src/field/landmark.c @@ -0,0 +1,73 @@ +#include "global.h" +#include "landmark.h" +#include "event_data.h" + +#define MAPSEC_NONE 0x58 + +struct Landmark +{ + u8 *name; + u16 flag; +}; + +struct LandmarkList +{ + u8 mapSection; + u8 id; + const struct Landmark **landmarks; +}; + +extern const struct LandmarkList gLandmarkLists[]; + +static const struct Landmark **GetLandmarks(u8 mapSection, u8 id); + +u8 *GetLandmarkName(u8 mapSection, u8 id, u8 count) +{ + const struct Landmark **landmarks = GetLandmarks(mapSection, id); + + if (!landmarks) + return NULL; + + while (1) + { + const struct Landmark *landmark = *landmarks; + + if (landmark->flag == 0xFFFF || FlagGet(landmark->flag) == TRUE) + { + if (count == 0) + break; + else + count--; + } + + landmarks++; + if (!*landmarks) + return NULL; + } + + return (*landmarks)->name; +} + +static const struct Landmark **GetLandmarks(u8 mapSection, u8 id) +{ + u16 i = 0; + + for (; gLandmarkLists[i].mapSection != MAPSEC_NONE; i++) + { + if (gLandmarkLists[i].mapSection > mapSection) + return NULL; + if (gLandmarkLists[i].mapSection == mapSection) + break; + } + + if (gLandmarkLists[i].mapSection == MAPSEC_NONE) + return NULL; + + for (; gLandmarkLists[i].mapSection == mapSection; i++) + { + if (gLandmarkLists[i].id == id) + return gLandmarkLists[i].landmarks; + } + + return NULL; +} diff --git a/src/field/lottery_corner.c b/src/field/lottery_corner.c new file mode 100644 index 000000000..c2c25b9ac --- /dev/null +++ b/src/field/lottery_corner.c @@ -0,0 +1,174 @@ +#include "global.h" +#include "lottery_corner.h" +#include "event_data.h" +#include "items.h" +#include "rng.h" +#include "species.h" +#include "string_util.h" +#include "text.h" + +extern u16 gScriptResult; +extern u16 gSpecialVar_0x8004; +extern struct PokemonStorage gPokemonStorage; +extern u16 gSpecialVar_0x8005; +extern u16 gSpecialVar_0x8006; +static EWRAM_DATA u16 sWinNumberDigit = 0; +static EWRAM_DATA u16 sOtIdDigit = 0; + +static const u16 sLotteryPrizes[] = +{ + ITEM_PP_UP, + ITEM_EXP_SHARE, + ITEM_MAX_REVIVE, + ITEM_MASTER_BALL, +}; + +static u8 GetMatchingDigits(u16, u16); + +void ResetLotteryCorner(void) +{ + u16 rand = Random(); + + SetLotteryNumber((Random() << 16) | rand); + VarSet(VAR_POKELOT_PRIZE, 0); +} + +void SetRandomLotteryNumber(u16 i) +{ + u32 var = Random(); + + while (--i != 0xFFFF) + var = var * 1103515245 + 12345; + + SetLotteryNumber(var); +} + +void RetrieveLotteryNumber(void) +{ + u16 lottoNumber = GetLotteryNumber(); + gScriptResult = lottoNumber; +} + +void PickLotteryCornerTicket(void) +{ + u16 i; + u16 j; + u32 box; + u32 slot; + + gSpecialVar_0x8004 = 0; + slot = 0; + box = 0; + for (i = 0; i < 6; i++) + { + struct Pokemon *pkmn = &gPlayerParty[i]; + + // UB: Too few arguments for function GetMonData + if (GetMonData(pkmn, MON_DATA_SPECIES) != SPECIES_NONE) + { + // do not calculate ticket values for eggs. + if (!GetMonData(pkmn, MON_DATA_IS_EGG)) + { + u32 otId = GetMonData(pkmn, MON_DATA_OT_ID); + u8 numMatchingDigits = GetMatchingDigits(gScriptResult, otId); + + if (numMatchingDigits > gSpecialVar_0x8004 && numMatchingDigits > 1) + { + gSpecialVar_0x8004 = numMatchingDigits - 1; + box = 14; + slot = i; + } + } + } + else // pokemon are always arranged from populated spots first to unpopulated, so the moment a NONE species is found, that's the end of the list. + break; + } + + // player has 14 boxes. + for (i = 0; i < 14; i++) + { + // player has 30 slots per box. + for (j = 0; j < 30; j++) + { + struct BoxPokemon *pkmn = &gPokemonStorage.boxes[i][j]; + + // UB: Too few arguments for function GetMonData + if (GetBoxMonData(pkmn, MON_DATA_SPECIES) != SPECIES_NONE && + !GetBoxMonData(pkmn, MON_DATA_IS_EGG)) + { + u32 otId = GetBoxMonData(pkmn, MON_DATA_OT_ID); + u8 numMatchingDigits = GetMatchingDigits(gScriptResult, otId); + + if (numMatchingDigits > gSpecialVar_0x8004 && numMatchingDigits > 1) + { + gSpecialVar_0x8004 = numMatchingDigits - 1; + box = i; + slot = j; + } + } + } + } + + if (gSpecialVar_0x8004 != 0) + { + gSpecialVar_0x8005 = sLotteryPrizes[gSpecialVar_0x8004 - 1]; + + if (box == 14) + { + gSpecialVar_0x8006 = 0; + GetMonData(&gPlayerParty[slot], MON_DATA_NICKNAME, gStringVar1); + } + else + { + gSpecialVar_0x8006 = 1; + GetBoxMonData(&gPokemonStorage.boxes[box][slot], MON_DATA_NICKNAME, gStringVar1); + } + StringGetEnd10(gStringVar1); + } +} + +static u8 GetMatchingDigits(u16 winNumber, u16 otId) +{ + u8 i; + u8 matchingDigits = 0; + + for (i = 0; i < 5; i++) + { + sWinNumberDigit = winNumber % 10; + sOtIdDigit = otId % 10; + + if (sWinNumberDigit == sOtIdDigit) + { + winNumber = winNumber / 10; + otId = otId / 10; + matchingDigits++; + } + else + break; + } + return matchingDigits; +} + +// lottery numbers go from 0 to 99999, not 65535 (0xFFFF). interestingly enough, the function that calls GetLotteryNumber shifts to u16, so it cant be anything above 65535 anyway. +void SetLotteryNumber(u32 lotteryNum) +{ + u16 lowNum = lotteryNum >> 16; + u16 highNum = lotteryNum; + + VarSet(VAR_POKELOT_RND1, highNum); + VarSet(VAR_POKELOT_RND2, lowNum); +} + +u32 GetLotteryNumber(void) +{ + u16 highNum = VarGet(VAR_POKELOT_RND1); + u16 lowNum = VarGet(VAR_POKELOT_RND2); + + return (lowNum << 16) | highNum; +} + +// interestingly, this may have been the original lottery number set function, but GF tried to change it to 32-bit later but didnt finish changing all calls as one GetLotteryNumber still shifts to u16. +void SetLotteryNumber16_Unused(u16 lotteryNum) +{ + SetLotteryNumber(lotteryNum); +} diff --git a/src/field/map_name_popup.c b/src/field/map_name_popup.c new file mode 100644 index 000000000..01105d0db --- /dev/null +++ b/src/field/map_name_popup.c @@ -0,0 +1,107 @@ +#include "global.h" +#include "map_name_popup.h" +#include "event_data.h" +#include "menu.h" +#include "region_map.h" +#include "task.h" + +EWRAM_DATA static u8 sTaskId = 0; + +static void Task_MapNamePopup(u8); +static void DrawMapNamePopup(void); + +bool8 unref_sub_80A2F44(void) +{ + CloseMenu(); + ShowMapNamePopup(); + return 1; +} + +void ShowMapNamePopup(void) +{ + if (FlagGet(0x4000) != TRUE) + { + if (!FuncIsActiveTask(Task_MapNamePopup)) + { + sTaskId = CreateTask(Task_MapNamePopup, 90); + REG_BG0VOFS = 32; + DrawMapNamePopup(); + gTasks[sTaskId].data[0] = 0; + gTasks[sTaskId].data[2] = 32; + } + else + { + if (gTasks[sTaskId].data[0] != 2) + gTasks[sTaskId].data[0] = 2; + gTasks[sTaskId].data[3] = 1; + } + } +} + +void Task_MapNamePopup(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[2] -= 2; + if (task->data[2] <= 0 ) + { + task->data[0] = 1; + gTasks[sTaskId].data[1] = 0; + } + break; + case 1: + task->data[1]++; + if (task->data[1] > 120 ) + { + task->data[1] = 0; + task->data[0] = 2; + } + break; + case 2: + task->data[2] += 2; + if (task->data[2] > 31) + { + if (task->data[3]) + { + DrawMapNamePopup(); + task->data[0] = 0; + task->data[3] = 0; + } + else + { + task->data[0] = 4; + return; + } + } + break; + case 4: + HideMapNamePopup(); + return; + } + + REG_BG0VOFS = task->data[2]; +} + +void HideMapNamePopup(void) +{ + if (FuncIsActiveTask(Task_MapNamePopup)) + { + MenuLoadTextWindowGraphics(); + MenuZeroFillWindowRect(0, 0, 13, 3); + REG_BG0VOFS = 0; + DestroyTask(sTaskId); + } +} + +void DrawMapNamePopup(void) +{ + u8 name[20]; + + MenuLoadTextWindowGraphics_OverrideFrameType(0); + GetMapSectionName(name, gMapHeader.regionMapSectionId, 0); + MenuDrawTextWindow(0, 0, 13, 3); + sub_8072BD8(name, 1, 1, 0x60); +} diff --git a/src/field/map_obj_lock.c b/src/field/map_obj_lock.c new file mode 100644 index 000000000..bd40bcacc --- /dev/null +++ b/src/field/map_obj_lock.c @@ -0,0 +1,118 @@ +#include "global.h" +#include "map_obj_lock.h" +#include "field_map_obj.h" +#include "field_map_obj_helpers.h" +#include "field_player_avatar.h" +#include "script_movement.h" +#include "task.h" + +extern u16 gScriptFacing; + +bool8 walkrun_is_standing_still(void) +{ + if (gPlayerAvatar.running1 == 1) + return FALSE; + else + return TRUE; +} + +void sub_8064CDC(u8 taskId) +{ + if (walkrun_is_standing_still()) + { + sub_80594C0(); + DestroyTask(taskId); + } +} + +bool8 sub_8064CFC(void) +{ + if (FuncIsActiveTask(sub_8064CDC)) + { + return FALSE; + } + else + { + sub_80597F4(); + return TRUE; + } +} + +void ScriptFreezeMapObjects(void) +{ + FreezeMapObjects(); + CreateTask(sub_8064CDC, 80); +} + +void sub_8064D38(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (!task->data[0] && walkrun_is_standing_still() == TRUE) + { + sub_80594C0(); + task->data[0] = 1; + } + if (!task->data[1] && !gMapObjects[gSelectedMapObject].mapobj_bit_1) + { + FreezeMapObject(&gMapObjects[gSelectedMapObject]); + task->data[1] = 1; + } + if (task->data[0] && task->data[1]) + DestroyTask(taskId); +} + +bool8 sub_8064DB4(void) +{ + if (FuncIsActiveTask(sub_8064D38)) + { + return FALSE; + } + else + { + sub_80597F4(); + return TRUE; + } +} + +void sub_8064DD8(void) +{ + u8 taskId; + FreezeMapObjectsExceptOne(gSelectedMapObject); + taskId = CreateTask(sub_8064D38, 80); + if (!gMapObjects[gSelectedMapObject].mapobj_bit_1) + { + FreezeMapObject(&gMapObjects[gSelectedMapObject]); + gTasks[taskId].data[1] = 1; + } +} + +void sub_8064E2C(void) +{ + u8 objectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); + FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[objectId]); + sub_80A2178(); + UnfreezeMapObjects(); +} + +void unref_sub_8064E5C(void) +{ + u8 objectId; + + if (gMapObjects[gSelectedMapObject].active) + FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gSelectedMapObject]); + objectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); + FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[objectId]); + sub_80A2178(); + UnfreezeMapObjects(); +} + +void sub_8064EAC(void) +{ + FieldObjectFaceOppositeDirection(&gMapObjects[gSelectedMapObject], gScriptFacing); +} + +void sub_8064ED4(void) +{ + FieldObjectClearAnimIfSpecialAnimActive(&gMapObjects[gSelectedMapObject]); +} diff --git a/src/field/mauville_old_man.c b/src/field/mauville_old_man.c new file mode 100644 index 000000000..93684fc60 --- /dev/null +++ b/src/field/mauville_old_man.c @@ -0,0 +1,247 @@ +#include "global.h" +#include "mauville_old_man.h" +#include "easy_chat.h" +#include "menu.h" +#include "rng.h" +#include "script.h" +#include "string_util.h" +#include "strings.h" +#include "trader.h" + +extern u16 gScriptResult; +extern u16 gSpecialVar_0x8004; + +extern u32 gUnknown_083E5388[]; +extern u32 gUnknown_083E53A8[]; + +extern u16 gUnknown_083E537C[]; + +void sub_80F7A34(void) +{ + u16 i; + OldMan *oldMan = &gSaveBlock1.oldMan; + + oldMan->oldMan1.unk_2D94 = 0; + oldMan->oldMan1.unk_2DBD = 0; + + for(i = 0; i < 6; i++) + oldMan->oldMan1.mauvilleOldMan_ecArray[i] = gUnknown_083E537C[i]; +} + +void sub_80F7A6C(void) +{ + struct UnkMauvilleOldManStruct *bard = &gSaveBlock1.oldMan.oldMan1; + + bard->unk_2D94 = 1; + bard->unk_2D95 = 0; +} + +void sub_80F7A7C(void) +{ + sub_80F83F8(); +} + +void sub_80F7A88(void) +{ + OldMan *oldMan = &gSaveBlock1.oldMan; + + oldMan->oldMan1.unk_2D94 = 4; + oldMan->oldMan1.unk_2D95 = 0; +} + +void sub_80F7A98(void) +{ + sub_81099CC(); +} + +void SetMauvilleOldMan(void) +{ + u32 var = ((u16)((gSaveBlock2.playerTrainerId[1] << 8 | gSaveBlock2.playerTrainerId[0])) % 10) / 2; + + switch(var) + { + case 0: + sub_80F7A34(); + break; + case 1: + sub_80F7A6C(); + break; + case 2: + sub_80F7A98(); + break; + case 3: + sub_80F7A7C(); + break; + case 4: + sub_80F7A88(); + break; + } + sub_80F83D0(); +} + +u8 GetCurrentMauvilleOldMan(void) +{ + OldMan *oldMan = &gSaveBlock1.oldMan; + + return oldMan->oldMan1.unk_2D94; +} + +void sub_80F7B14(void) +{ + gScriptResult = GetCurrentMauvilleOldMan(); +} + +void sub_80F7B2C(void) +{ + u16 *scriptPtr = &gScriptResult; // why?? + OldMan *oldMan = &gSaveBlock1.oldMan; + + *scriptPtr = oldMan->oldMan1.unk_2DBD; +} + +void sub_80F7B40(void) +{ + u16 i; + OldMan *oldMan = &gSaveBlock1.oldMan; + //struct UnkMauvilleOldManStruct *oldManStruct = &gSaveBlock1.oldManStruct; + + StringCopy(oldMan->oldMan1.playerName, gSaveBlock2.playerName); + + for(i = 0; i < 4; i++) + oldMan->oldMan1.playerTrainerId[i] = gSaveBlock2.playerTrainerId[i]; + + for(i = 0; i < 6; i++) + oldMan->oldMan1.mauvilleOldMan_ecArray[i] = oldMan->oldMan1.mauvilleOldMan_ecArray2[i]; + + oldMan->oldMan1.unk_2DBD = 1; +} + +void sub_80F7BA0(void) +{ + struct UnkMauvilleOldManStruct *oldMan = &gSaveBlock1.oldMan.oldMan1; + 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; + if (specialVar == 0) + r5 = oldMan->mauvilleOldMan_ecArray; + ptr = gStringVar4; + r4 = ptr; + for (i = 0; i < 2; i++) + { + ptr = sub_80EB3FC(ptr, *(r5++)); + while (ptr != r4) + { + if (*r4 == 0) + *r4 = 0x37; + r4++; + } + r4++; + *(ptr++) = 0; + ptr = sub_80EB3FC(ptr, *(r5++)); + while (ptr != r4) + { + if (*r4 == 0) + *r4 = 0x37; + r4++; + } + r4++; + *(ptr++) = 0xFE; + ptr = sub_80EB3FC(ptr, *(r5++)); + while (ptr != r4) + { + if (*r4 == 0) + *r4 = 0x37; + r4++; + } + //_080F7C2A + if (i == 0) + { + *(ptr++) = EXT_CTRL_CODE_BEGIN; + *(ptr++) = 0xF; + } + } +} + +void sub_80F7C54(void) +{ + sub_80F7F80(gSpecialVar_0x8004); + MenuDisplayMessageBox(); + ScriptContext1_Stop(); +} + +void sub_80F7C70(void) +{ + u16 *scriptPtr = &gScriptResult; // again?? + OldMan *oldMan = &gSaveBlock1.oldMan; + + *scriptPtr = oldMan->oldMan1.unk_2D95; +} + +void sub_80F7C84(void) +{ + OldMan *oldMan = &gSaveBlock1.oldMan; + + oldMan->oldMan1.unk_2D95 = 1; +} + +void sub_80F7C90(void) +{ + u16 var = sub_80EB8EC(); + + if(var == 0xFFFF) + { + gScriptResult = FALSE; + } + else + { + sub_80EB3FC(gStringVar1, var); + gScriptResult = TRUE; + } +} + +void sub_80F7CC8(void) +{ + OldMan *oldMan = &gSaveBlock1.oldMan; + + if(oldMan->oldMan1.unk_2D95 == 10) + { + gScriptResult = FALSE; + oldMan->oldMan1.unk_2D95 = 0; + } + else + gScriptResult = TRUE; +} + +void sub_80F7CF4(void) +{ + struct UnkMauvilleOldManStruct2 *oldMan = &gSaveBlock1.oldMan.oldMan2; + + if(oldMan->unk1 == 0) + sub_80F7DC0(); + + if(oldMan->mauvilleOldMan_ecArray[oldMan->unk1] != 0xFFFF) // is not the last element of the array? + { + u8 *stringPtr; + u32 random = Random(); + + random %= 8; + stringPtr = sub_80EB3FC(gStringVar4, oldMan->mauvilleOldMan_ecArray[oldMan->unk1]); + stringPtr = StringCopy(stringPtr, gOtherText_Is); + stringPtr = StringCopy(stringPtr, (u8 *)gUnknown_083E5388[random]); + StringCopy(stringPtr, gOtherText_DontYouAgree); + } + else + { + StringCopy(gStringVar4, (u8 *)gUnknown_083E53A8[oldMan->mauvilleOldMan_ecArray2[oldMan->unk2++]]); + } + if(!(Random() % 10)) + oldMan->unk1 = 10; + else + oldMan->unk1++; + + gScriptResult = TRUE; +} diff --git a/src/field/menu_helpers.c b/src/field/menu_helpers.c new file mode 100644 index 000000000..9915d67ac --- /dev/null +++ b/src/field/menu_helpers.c @@ -0,0 +1,572 @@ +#include "global.h" +#include "item_menu.h" +#include "items.h" +#include "link.h" +#include "mail_data.h" +#include "main.h" +#include "map_constants.h" +#include "menu.h" +#include "menu_helpers.h" +#include "rom4.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "text.h" + +#define SCROLL_INDICATOR_PAL_TAG 6 + +static void sub_80F9834(struct Sprite *sprite); + +static EWRAM_DATA u8 gUnknown_020388C0[4] = {0}; +static EWRAM_DATA struct YesNoFuncTable gUnknown_020388C4 = {0}; + +static TaskFunc gUnknown_0300074C; + +static const u8 gSpriteImage_83E5808[] = INCBIN_U8("graphics/unknown_sprites/83E59A0/0.4bpp"); + +static const u8 gSpriteImage_83E5848[] = INCBIN_U8("graphics/unknown_sprites/83E59A0/1.4bpp"); + +static const u8 gSpriteImage_83E5888[] = INCBIN_U8("graphics/unknown_sprites/83E59B0/0.4bpp"); + +static const u8 gSpriteImage_83E58C8[] = INCBIN_U8("graphics/unknown_sprites/83E59B0/1.4bpp"); + +static const u8 gSpriteImage_83E5908[] = INCBIN_U8("graphics/unknown_sprites/83E59C0/0.4bpp"); + +static const u8 gSpriteImage_83E5928[] = INCBIN_U8("graphics/unknown_sprites/83E59C0/1.4bpp"); + +static const u16 Palette_3E5948[] = INCBIN_U16("graphics/interface/83E5948.gbapal"); + +static const struct SpritePalette gUnknown_083E5968 = { Palette_3E5948, SCROLL_INDICATOR_PAL_TAG }; + +static const struct OamData gOamData_83E5970 = +{ + .tileNum = 1 +}; + +static const struct OamData gOamData_83E5978 = +{ + .shape = ST_OAM_H_RECTANGLE, + .tileNum = 1 +}; + +static const struct OamData gOamData_83E5980 = +{ + .shape = ST_OAM_V_RECTANGLE, + .tileNum = 1 +}; + +static const union AnimCmd gSpriteAnim_83E5988[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_83E5990[] = +{ + ANIMCMD_FRAME(1, 0), + ANIMCMD_END, +}; + +static const union AnimCmd *const gSpriteAnimTable_83E5998[] = +{ + gSpriteAnim_83E5988, + gSpriteAnim_83E5990, +}; + +static const struct SpriteFrameImage gSpriteImageTable_83E59A0[] = +{ + { gSpriteImage_83E5808, 0x40 }, + { gSpriteImage_83E5848, 0x40 }, +}; + +static const struct SpriteFrameImage gSpriteImageTable_83E59B0[] = +{ + { gSpriteImage_83E5888, 0x40 }, + { gSpriteImage_83E58C8, 0x40 }, +}; + +static const struct SpriteFrameImage gSpriteImageTable_83E59C0[] = +{ + { gSpriteImage_83E5908, 0x20 }, + { gSpriteImage_83E5928, 0x20 }, +}; + +static const struct SpriteTemplate gSpriteTemplate_83E59D0 = +{ + .tileTag = 0xFFFF, + .paletteTag = SCROLL_INDICATOR_PAL_TAG, + .oam = &gOamData_83E5978, + .anims = gSpriteAnimTable_83E5998, + .images = gSpriteImageTable_83E59A0, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80F9834, +}; + +static const struct SpriteTemplate gSpriteTemplate_83E59E8 = +{ + .tileTag = 0xFFFF, + .paletteTag = SCROLL_INDICATOR_PAL_TAG, + .oam = &gOamData_83E5980, + .anims = gSpriteAnimTable_83E5998, + .images = gSpriteImageTable_83E59B0, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80F9834, +}; + +static const struct SpriteTemplate gSpriteTemplate_83E5A00 = +{ + .tileTag = 0xFFFF, + .paletteTag = SCROLL_INDICATOR_PAL_TAG, + .oam = &gOamData_83E5970, + .anims = gSpriteAnimTable_83E5998, + .images = gSpriteImageTable_83E59C0, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +void sub_80F9020(void) +{ + memset(&gBGTilemapBuffers[1], 0, 0x800); + memset(&gBGTilemapBuffers[2], 0, 0x800); + memset(&gBGTilemapBuffers[3], 0, 0x800); +} + +// display message box, fill box with tile if tile is not zero, print string +static void PrintMessage(const u8 *str, u16 tile) +{ + MenuDisplayMessageBox(); + if (tile) + { + sub_80A3FA0(&gBGTilemapBuffers[1][0], 2, 15, 26, 4, tile); + } + sub_8072044(str); +} + +static void sub_80F9090(u8 taskId) +{ + if (MenuUpdateWindowText() == TRUE) + { + gUnknown_0300074C(taskId); + } +} + +void DisplayItemMessageOnField(u8 taskId, const u8 *str, TaskFunc callback, u16 tile) +{ + PrintMessage(str, tile); + gUnknown_0300074C = callback; + gTasks[taskId].func = sub_80F9090; +} + +static void Task_CallYesOrNoCallback(u8 taskId) +{ + switch (ProcessMenuInputNoWrap_()) + { + case 0: + PlaySE(SE_SELECT); + gUnknown_020388C4.yesFunc(taskId); + break; + case 1: + case -1: + PlaySE(SE_SELECT); + gUnknown_020388C4.noFunc(taskId); + } +} + +void DoYesNoFuncWithChoice(u8 taskId, const struct YesNoFuncTable *funcTable) +{ + gUnknown_020388C4 = *funcTable; + gTasks[taskId].func = Task_CallYesOrNoCallback; +} + +static void PrintStringWithPalette(const u8 *str, u8 paletteNum, u8 left, u8 top) +{ + u8 paletteStr[] = _("{PALETTE 0}"); + + if (paletteNum != 0xFF) + { + paletteStr[2] = paletteNum; + StringCopy(gStringVar4, paletteStr); + StringAppend(gStringVar4, str); + paletteStr[2] = gMenuWindowPtr->paletteNum; + StringAppend(gStringVar4, paletteStr); + } + else + { + StringCopy(gStringVar4, str); + } + + MenuPrint(gStringVar4, left, top); +} + +// unused +void PrintNumberWithPalette(s32 value, u8 paletteNum, u8 n, u8 mode, u8 left, u8 top) +{ + ConvertIntToDecimalStringN(gStringVar1, value, mode, n); + if (paletteNum != 0xFF) + { + PrintStringWithPalette(gStringVar1, paletteNum, left, top); + } + else + { + MenuPrint(gStringVar1, left, top); + } +} + +// unused +void PrintTriangleCursorWithPalette(u8 left, u8 top, u8 paletteNum) +{ + u8 cursorStr[] = _("▶"); + PrintStringWithPalette(cursorStr, paletteNum, left, top); +} + +u8 sub_80F9284(void) +{ + if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR) + { + if (gMain.newKeys & L_BUTTON) + { + return 1; + } + if (gMain.newKeys & R_BUTTON) + { + return 2; + } + } + + return 0; +} + +u8 sub_80F92BC(void) +{ + if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR) + { + if (gMain.newAndRepeatedKeys & L_BUTTON) + { + return 1; + } + if (gMain.newAndRepeatedKeys & R_BUTTON) + { + return 2; + } + } + + return 0; +} + +bool8 sub_80F92F4(u16 itemId) +{ + if (itemId != ITEM_ENIGMA_BERRY) + { + return TRUE; + } + + if (!(gSaveBlock1.location.mapGroup == MAP_GROUP_TRADE_CENTER && gSaveBlock1.location.mapNum == MAP_ID_TRADE_CENTER)) + { + return TRUE; + } + + return FALSE; +} + +bool8 sub_80F931C(u16 itemId) +{ + if (is_c1_link_related_active() != TRUE) + { + return TRUE; + } + + if (ItemIsMail(itemId) != TRUE) + { + return TRUE; + } + + return FALSE; +} + +bool8 sub_80F9344(void) +{ + if (is_c1_link_related_active() == TRUE || gReceivedRemoteLinkPlayers == 1) + { + return TRUE; + } + + return FALSE; +} + +void sub_80F9368(void) +{ + u8 *addr; + u32 size; + + REG_DISPCNT = 0; + REG_BG3CNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + + addr = (u8 *)VRAM; + size = 0x18000; + while (1) + { + DmaFill16(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill16(3, 0, addr, size); + break; + } + } + + DmaClear32(3, OAM, OAM_SIZE); + DmaClear16(3, PLTT, PLTT_SIZE); +} + +void sub_80F9438(void) +{ + SetVBlankCallback(NULL); + SetHBlankCallback(NULL); +} + +void sub_80F944C(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + gUnknown_020388C0[i] = 0xFF; + } + + FreeSpritePaletteByTag(SCROLL_INDICATOR_PAL_TAG); + LoadSpritePalette(&gUnknown_083E5968); +} + +void sub_80F9480(u8 *data, u8 n) +{ + u8 i; + + for (i = 0; i < n; i++) + { + data[i] = 0xFF; + } +} + +void sub_80F94A4(u8 animNum, u8 *spriteId, s16 x, s16 y) +{ + if (animNum <= 5) + { + if (*spriteId == 0xFF) + { + *spriteId = CreateSprite(&gSpriteTemplate_83E5A00, x, y, 0); + } + animNum -= 4; + StartSpriteAnim(&gSprites[*spriteId], animNum); + } +} + +void sub_80F94F8(u8 *spriteId) +{ + if (*spriteId != 0xFF) + { + DestroySprite(&gSprites[*spriteId]); + *spriteId = 0xFF; + } +} + +void sub_80F9520(u8 *data, u8 n) +{ + u8 i; + + for (i = 0; i < 8; i++) + { + sub_80F94F8(&data[i]); + } +} + +void CreateVerticalScrollIndicators(u8 id, u16 x, u16 y) +{ + if (id >= 4) + { + return; + } + + switch (id) + { + case 0: + if (gUnknown_020388C0[0] == 0xFF) + { + gUnknown_020388C0[0] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0); + gSprites[gUnknown_020388C0[0]].data2 = -1; + if (gUnknown_020388C0[1] != 0xFF) + { + gSprites[gUnknown_020388C0[0]].pos2.y = gSprites[gUnknown_020388C0[1]].pos2.y * -1; + gSprites[gUnknown_020388C0[0]].data3 = gSprites[gUnknown_020388C0[1]].data3; + } + else + { + gSprites[gUnknown_020388C0[0]].data3 = 0; + } + } + break; + + case 1: + if (gUnknown_020388C0[1] == 0xFF) + { + gUnknown_020388C0[1] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0); + gSprites[gUnknown_020388C0[1]].data2 = 1; + if (gUnknown_020388C0[0] != 0xFF) + { + gSprites[gUnknown_020388C0[1]].pos2.y = gSprites[gUnknown_020388C0[0]].pos2.y * -1; + gSprites[gUnknown_020388C0[1]].data3 = gSprites[gUnknown_020388C0[0]].data3; + } + else + { + gSprites[gUnknown_020388C0[1]].data3 = 0; + } + } + break; + + case 2: + if (gUnknown_020388C0[2] == 0xFF) + { + gUnknown_020388C0[2] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0); + gSprites[gUnknown_020388C0[2]].data0 = -1; + if (gUnknown_020388C0[3] != 0xFF) + { + gSprites[gUnknown_020388C0[2]].pos2.x = gSprites[gUnknown_020388C0[3]].pos2.x * -1; + gSprites[gUnknown_020388C0[2]].data1 = gSprites[gUnknown_020388C0[3]].data1; + } + else + { + gSprites[gUnknown_020388C0[2]].data1 = 0; + } + } + break; + + case 3: + if (gUnknown_020388C0[3] == 0xFF) + { + gUnknown_020388C0[3] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0); + gSprites[gUnknown_020388C0[3]].data0 = 1; + if (gUnknown_020388C0[2] != 0xFF) + { + gSprites[gUnknown_020388C0[3]].pos2.x = gSprites[gUnknown_020388C0[2]].pos2.x * -1; + gSprites[gUnknown_020388C0[3]].data1 = gSprites[gUnknown_020388C0[2]].data1; + } + else + { + gSprites[gUnknown_020388C0[3]].data1 = 0; + } + } + break; + } + + StartSpriteAnim(&gSprites[gUnknown_020388C0[id]], id & 1); +} + +void sub_80F979C(u8 id, bool8 invisible) +{ + if (id < 4 && gUnknown_020388C0[id] != 0xFF) + { + gSprites[gUnknown_020388C0[id]].invisible = invisible; + } +} + +void DestroyVerticalScrollIndicator(u8 id) +{ + if (id < 4 && gUnknown_020388C0[id] != 0xFF) + { + DestroySprite(&gSprites[gUnknown_020388C0[id]]); + gUnknown_020388C0[id] = 0xFF; + } +} + +void LoadScrollIndicatorPalette(void) +{ + LoadSpritePalette(&gUnknown_083E5968); +} + +void BuyMenuFreeMemory(void) +{ + FreeSpritePaletteByTag(SCROLL_INDICATOR_PAL_TAG); +} + +static void sub_80F9834(struct Sprite *sprite) +{ + if (sprite->data1 == 0) + { + sprite->pos2.x += sprite->data0; + } + if (sprite->data3 == 0) + { + sprite->pos2.y += sprite->data2; + } + sprite->data1++; + sprite->data3++; + if (sprite->data1 > 2) + { + sprite->data1 = 0; + } + if (sprite->data3 > 2) + { + sprite->data3 = 0; + } + if (sprite->pos2.x == 8 || sprite->pos2.x == -8) + { + sprite->pos2.x = 0; + } + if (sprite->pos2.y == 8 || sprite->pos2.y == -8) + { + sprite->pos2.y = 0; + } +} + +void sub_80F98A4(u8 id) +{ + if (gUnknown_020388C0[id] != 0xFF && id < 4) + { + gSprites[gUnknown_020388C0[id]].callback = SpriteCallbackDummy; + } +} + +void StartVerticalScrollIndicators(u8 id) +{ + if (gUnknown_020388C0[id] != 0xFF && id < 4) + { + gSprites[gUnknown_020388C0[id]].callback = sub_80F9834; + } +} + +static void sub_80F9914(u8 id) +{ + if (gUnknown_020388C0[id] != 0xFF && id < 4) + { + gSprites[gUnknown_020388C0[id]].pos2.x = 0; + gSprites[gUnknown_020388C0[id]].pos2.y = 0; + gSprites[gUnknown_020388C0[id]].data1 = 0; + gSprites[gUnknown_020388C0[id]].data3 = 0; + } +} + +void PauseVerticalScrollIndicator(u8 id) +{ + sub_80F98A4(id); + sub_80F9914(id); +} + +void sub_80F9988(u8 id, u8 priority) +{ + if (gUnknown_020388C0[id] != 0xFF && id < 4) + { + gSprites[gUnknown_020388C0[id]].oam.priority = priority; + } +} diff --git a/src/field/metatile_behavior.c b/src/field/metatile_behavior.c new file mode 100644 index 000000000..d05ba0b89 --- /dev/null +++ b/src/field/metatile_behavior.c @@ -0,0 +1,1308 @@ +#include "global.h" +#include "metatile_behavior.h" +#include "metatile_behaviors.h" + +#define TILE_ATTRIBUTES(three, two, one) (((one) ? 1 : 0) | ((two) ? 2 : 0) | ((three) ? 4 : 0)) + +static const u8 sTileBitAttributes[] = +{ + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, TRUE), + TILE_ATTRIBUTES(TRUE, FALSE, TRUE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, TRUE), + TILE_ATTRIBUTES(TRUE, FALSE, TRUE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, TRUE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, TRUE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, TRUE, TRUE), + TILE_ATTRIBUTES(TRUE, TRUE, TRUE), + TILE_ATTRIBUTES(TRUE, TRUE, TRUE), + TILE_ATTRIBUTES(TRUE, TRUE, FALSE), + TILE_ATTRIBUTES(TRUE, TRUE, FALSE), + TILE_ATTRIBUTES(TRUE, TRUE, TRUE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, TRUE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, TRUE, TRUE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, TRUE), + TILE_ATTRIBUTES(TRUE, FALSE, TRUE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, TRUE, TRUE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, TRUE, FALSE), + TILE_ATTRIBUTES(TRUE, TRUE, FALSE), + TILE_ATTRIBUTES(TRUE, TRUE, FALSE), + TILE_ATTRIBUTES(TRUE, TRUE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, TRUE, FALSE), + TILE_ATTRIBUTES(TRUE, TRUE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, TRUE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(TRUE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + TILE_ATTRIBUTES(FALSE, FALSE, FALSE) +}; + +// only used as default case for checking jump landing in field_ground_effect. +bool8 MetatileBehavior_IsATile(u8 var) +{ + return TRUE; +} + +bool8 MetatileBehavior_IsEncounterTile(u8 var) +{ + if ((sTileBitAttributes[var] & 1) != 0) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsJumpEast(u8 var) +{ + if (var == MB_JUMP_EAST) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsJumpWest(u8 var) +{ + if (var == MB_JUMP_WEST) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsJumpNorth(u8 var) +{ + if (var == MB_JUMP_NORTH) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsJumpSouth(u8 var) +{ + if (var == MB_JUMP_SOUTH) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsPokeGrass(u8 var) +{ + if (var == MB_TALL_GRASS || var == MB_LONG_GRASS) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSandOrDeepSand(u8 var) +{ + if (var == MB_SAND || var == MB_DEEP_SAND) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsDeepSand(u8 var) +{ + if (var == MB_DEEP_SAND) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsReflective(u8 var) +{ + if (var == MB_POND_WATER || var == MB_PUDDLE || var == MB_1A || var == MB_ICE || var == MB_SOOTOPOLIS_DEEP_WATER || var == MB_REFLECTION_UNDER_BRIDGE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsIce(u8 var) +{ + if (var == MB_ICE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsWarpDoor(u8 var) +{ + if (var == MB_ANIMATED_DOOR) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsDoor(u8 var) +{ + if (var == MB_8D || var == MB_ANIMATED_DOOR) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsEscalator(u8 var) +{ + if (var == MB_UP_ESCALATOR || var == MB_DOWN_ESCALATOR) + return TRUE; + else + return FALSE; +} + +bool8 unref_sub_8056EE0(u8 var) +{ + if (var == MB_04) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsLadder(u8 var) +{ + if (var == MB_LADDER) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsNonAnimDoor(u8 var) +{ + if (var == MB_NON_ANIMATED_DOOR || var == MB_WATER_DOOR || var == MB_DEEP_SOUTH_WARP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsDeepSouthWarp(u8 var) +{ + if (var == MB_DEEP_SOUTH_WARP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSurfableWaterOrUnderwater(u8 var) +{ + if ((sTileBitAttributes[var] & 2) != 0) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsEastArrowWarp(u8 var) +{ + if (var == MB_EAST_ARROW_WARP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsWestArrowWarp(u8 var) +{ + if (var == MB_WEST_ARROW_WARP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsNorthArrowWarp(u8 var) +{ + if (var == MB_NORTH_ARROW_WARP || var == MB_STAIRS_OUTSIDE_ABANDONED_SHIP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSouthArrowWarp(u8 var) +{ + if (var == MB_SOUTH_ARROW_WARP || var == MB_WATER_SOUTH_ARROW_WARP || var == MB_SHOAL_CAVE_ENTRANCE) + return TRUE; + else + return FALSE; +} + +// unused +bool8 MetatileBehavior_IsArrowWarp(u8 var) +{ + u8 var2 = 0; + + if (MetatileBehavior_IsEastArrowWarp(var) + || MetatileBehavior_IsWestArrowWarp(var) + || MetatileBehavior_IsNorthArrowWarp(var) + || MetatileBehavior_IsSouthArrowWarp(var)) + { + var2 = 1; + } + return var2; +} + +bool8 MetatileBehavior_IsMoveTile(u8 var) +{ + if ((var >= MB_WALK_EAST && var <= MB_TRICK_HOUSE_PUZZLE_8_FLOOR) || (var >= MB_EASTWARD_CURRENT && var <= MB_SOUTHWARD_CURRENT) + || var == MB_MUDDY_SLOPE || var == MB_CRACKED_FLOOR || var == MB_WATERFALL || var == MB_ICE || var == MB_BB || var == MB_BC) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsIce_2(u8 var) +{ + if (var == MB_ICE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsTrickHouseSlipperyFloor(u8 var) +{ + if (var == MB_TRICK_HOUSE_PUZZLE_8_FLOOR) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_0x05(u8 var) +{ + if (var == MB_05) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsWalkNorth(u8 var) +{ + if (var == MB_WALK_NORTH) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsWalkSouth(u8 var) +{ + if (var == MB_WALK_SOUTH) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsWalkWest(u8 var) +{ + if (var == MB_WALK_WEST) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsWalkEast(u8 var) +{ + if (var == MB_WALK_EAST) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsNorthwardCurrent(u8 var) +{ + if (var == MB_NORTHWARD_CURRENT) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSouthwardCurrent(u8 var) +{ + if (var == MB_SOUTHWARD_CURRENT) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsWestwardCurrent(u8 var) +{ + if (var == MB_WESTWARD_CURRENT) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsEastwardCurrent(u8 var) +{ + if (var == MB_EASTWARD_CURRENT) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSlideNorth(u8 var) +{ + if (var == MB_SLIDE_NORTH) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSlideSouth(u8 var) +{ + if (var == MB_SLIDE_SOUTH) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSlideWest(u8 var) +{ + if (var == MB_SLIDE_WEST) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSlideEast(u8 var) +{ + if (var == MB_SLIDE_EAST) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsCounter(u8 var) +{ + if (var == MB_COUNTER) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsPlayerFacingTVScreen(u8 tile, u8 playerDir) +{ + if (playerDir != CONNECTION_NORTH) // if the player isn't facing north, forget about it. + return FALSE; + else if (tile == MB_TELEVISION) // is the player's north tile a TV? + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsPC(u8 var) +{ + if (var == MB_PC) + return TRUE; + else + return FALSE; +} + +bool8 is_tile_x84(u8 var) +{ + if (var == MB_84) + return TRUE; + else + return FALSE; +} + +bool8 sub_80571C0(u8 var) +{ + if (var == MB_91 || var == MB_93 || var == MB_95 || var == MB_97 + || var == MB_99 || var == MB_9B || var == MB_9D) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSecretBaseCave(u8 var) +{ + if (var == MB_SECRET_BASE_SPOT_RED_CAVE || var == MB_SECRET_BASE_SPOT_BROWN_CAVE || var == MB_SECRET_BASE_SPOT_YELLOW_CAVE || var == MB_SECRET_BASE_SPOT_BLUE_CAVE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSecretBaseTree(u8 var) +{ + if (var == MB_SECRET_BASE_SPOT_TREE_1 || var == MB_SECRET_BASE_SPOT_TREE_2) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSecretBaseShrub(u8 var) +{ + if (var == MB_SECRET_BASE_SPOT_SHRUB) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSecretBasePC(u8 var) +{ + if (var == MB_SECRET_BASE_PC) + return TRUE; + else + return FALSE; +} + +bool8 sub_805724C(u8 var) +{ + if (var == MB_B1) + return TRUE; + else + return FALSE; +} + +bool8 unref_sub_8057260(u8 var) +{ + if (var == MB_B2) + return TRUE; + else + return FALSE; +} + +bool8 sub_8057274(u8 var) +{ + if (var == MB_B3) + return TRUE; + else + return FALSE; +} + +bool8 sub_8057288(u8 var) +{ + if (var == MB_B9) + return TRUE; + else + return FALSE; +} + +bool8 sub_805729C(u8 var) +{ + if (var == MB_NORMAL) + return TRUE; + else + return FALSE; +} + +bool8 sub_80572B0(u8 var) +{ + if (var == MB_B7) + return TRUE; + else + return FALSE; +} + +bool8 unref_sub_80572C4(u8 var) +{ + if (var == MB_B2) + return TRUE; + else + return FALSE; +} + +bool8 sub_80572D8(u8 var) +{ + if (var == MB_B5) + return TRUE; + else + return FALSE; +} + +bool8 sub_80572EC(u8 var) +{ + if (var == MB_C3) + return TRUE; + else + return FALSE; +} + +bool8 sub_8057300(u8 var) +{ + if (var == MB_C2) + return TRUE; + else + return FALSE; +} + +bool8 sub_8057314(u8 var) +{ + if (var == MB_B8) + return TRUE; + else + return FALSE; +} + +bool8 sub_8057328(u8 var) +{ + if (var == MB_BE) + return TRUE; + else + return FALSE; +} + +bool8 sub_805733C(u8 var) +{ + if (var == MB_BD) + return TRUE; + else + return FALSE; +} + +bool8 sub_8057350(u8 var) +{ + if (var == MB_BA) + return TRUE; + else + return FALSE; +} + +bool8 sub_8057364(u8 var) +{ + if (var == MB_BF) + return TRUE; + else + return FALSE; +} + +bool8 sub_8057378(u8 var) +{ + if (var == MB_C4) + return TRUE; + else + return FALSE; +} + +bool8 sub_805738C(u8 var) +{ + if (var == MB_C5) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_HasRipples(u8 var) +{ + if (var == MB_POND_WATER || var == MB_PUDDLE || var == MB_SOOTOPOLIS_DEEP_WATER) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsPuddle(u8 var) +{ + if (var == MB_PUDDLE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsTallGrass(u8 var) +{ + if (var == MB_TALL_GRASS) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsLongGrass(u8 var) +{ + if (var == MB_LONG_GRASS) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsBerryTreeSoil(u8 var) +{ + if (var == MB_BERRY_TREE_SOIL) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsAshGrass(u8 var) +{ + if (var == MB_ASHGRASS) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsUnusedFootprintMetatile(u8 var) +{ + if (var == MB_25) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsBridge(u8 var) +{ + if (var >= MB_WARP_OR_BRIDGE && var <= MB_ROUTE120_NORTH_BRIDGE_2) + return TRUE; + else + return FALSE; +} + +u8 sub_8057450(u8 var) +{ + u8 result = var - MB_WARP_OR_BRIDGE; + + if (result > 3) + result = 0; + + return result; +} + +bool8 MetatileBehavior_IsLandWildEncounter(u8 var) +{ + if (MetatileBehavior_IsSurfableWaterOrUnderwater(var) == FALSE && MetatileBehavior_IsEncounterTile(var) == TRUE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsWaterWildEncounter(u8 var) +{ + if (MetatileBehavior_IsSurfableWaterOrUnderwater(var) == TRUE && MetatileBehavior_IsEncounterTile(var) == TRUE) + return TRUE; + else + return FALSE; +} + +bool8 sub_80574C4(u8 var) +{ + if (var == MB_0B) + return TRUE; + else + return FALSE; +} + +bool8 sub_80574D8(u8 var) +{ + if (var == MB_MOUNTAIN_TOP) + return TRUE; + else + return FALSE; +} + +bool8 sub_80574EC(u8 var) +{ + if (var == MB_SEMI_DEEP_WATER || var == MB_DEEP_WATER || var == MB_SOOTOPOLIS_DEEP_WATER) + return TRUE; + else + return FALSE; +} + +bool8 sub_805750C(u8 var) +{ + if (var == MB_NO_SURFACING || var == MB_SEAWEED_NO_SURFACING) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsShallowFlowingWater(u8 var) +{ + if (var == MB_SHALLOW_WATER || var == MB_STAIRS_OUTSIDE_ABANDONED_SHIP || var == MB_SHOAL_CAVE_ENTRANCE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsThinIce(u8 var) +{ + if (var == MB_THIN_ICE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsCrackedIce(u8 var) +{ + if (var == MB_CRACKED_ICE) + return TRUE; + else + return FALSE; +} + +bool8 sub_8057568(u8 var) +{ + if (var == MB_OCEAN_WATER || var == MB_SEMI_DEEP_WATER || var == MB_DEEP_WATER) + return TRUE; + else + return FALSE; +} + +bool8 unref_sub_8057584(u8 var) +{ + if (var == MB_18 || var == MB_1A) + return TRUE; + else + return FALSE; +} + +bool8 sub_805759C(u8 var) +{ + if (MetatileBehavior_IsSurfableWaterOrUnderwater(var) && MetatileBehavior_IsWaterfall(var) == FALSE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsEastBlocked(u8 var) +{ + if (var == MB_IMPASSABLE_EAST || var == MB_IMPASSABLE_NORTHEAST || var == MB_IMPASSABLE_SOUTHEAST || var == MB_C1 || var == MB_BE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsWestBlocked(u8 var) +{ + if (var == MB_IMPASSABLE_WEST || var == MB_IMPASSABLE_NORTHWEST || var == MB_IMPASSABLE_SOUTHWEST || var == MB_C1 || var == MB_BE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsNorthBlocked(u8 var) +{ + if (var == MB_IMPASSABLE_NORTH || var == MB_IMPASSABLE_NORTHEAST || var == MB_IMPASSABLE_NORTHWEST || var == MB_BED) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSouthBlocked(u8 var) +{ + if (var == MB_IMPASSABLE_SOUTH || var == MB_IMPASSABLE_SOUTHEAST || var == MB_IMPASSABLE_SOUTHWEST || var == MB_BED) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsShortGrass(u8 var) +{ + if (var == MB_SHORT_GRASS) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsHotSprings(u8 var) +{ + if (var == MB_HOT_SPRINGS) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsWaterfall(u8 var) +{ + if (var == MB_WATERFALL) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsFortreeBridge(u8 var) +{ + if (var == MB_FORTREE_BRIDGE) + return TRUE; + else + return FALSE; +} + +bool8 sub_80576A0(u8 var) +{ + if (var == MB_PACIFIDLOG_VERTICAL_LOG_1) + return TRUE; + else + return FALSE; +} + +bool8 sub_80576B4(u8 var) +{ + if (var == MB_PACIFIDLOG_VERTICAL_LOG_2) + return TRUE; + else + return FALSE; +} + +bool8 sub_80576C8(u8 var) +{ + if (var == MB_PACIFIDLOG_HORIZONTAL_LOG_1) + return TRUE; + else + return FALSE; +} + +bool8 sub_80576DC(u8 var) +{ + if (var == MB_PACIFIDLOG_HORIZONTAL_LOG_2) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsPacifidlogLog(u8 var) +{ + if (var >= MB_PACIFIDLOG_VERTICAL_LOG_1 && var <= MB_PACIFIDLOG_HORIZONTAL_LOG_2) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsTrickHousePuzzleDoor(u8 var) +{ + if (var == MB_TRICK_HOUSE_PUZZLE_DOOR) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsRegionMap(u8 var) +{ + if (var == MB_REGION_MAP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsClosedSootopolisGymDoor(u8 var) +{ + if (var == MB_CLOSED_SOOTOPOLIS_GYM_DOOR) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsRoulette(u8 var) +{ + if (var == MB_ROULETTE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsPokeblockFeeder(u8 var) +{ + if (var == MB_POKEBLOCK_FEEDER) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_0xBB(u8 var) +{ + if (var == MB_BB) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_0xBC(u8 var) +{ + if (var == MB_BC) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsLavaridgeB1FWarp(u8 var) +{ + if (var == MB_LAVARIDGE_GYM_B1F_WARP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsLavaridge1FWarp(u8 var) +{ + if (var == MB_LAVARIDGE_GYM_1F_WARP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsAquaHideoutWarp(u8 var) +{ + if (var == MB_AQUA_HIDEOUT_WARP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSurfableFishableWater(u8 var) +{ + if (var == MB_POND_WATER || var == MB_OCEAN_WATER || var == MB_SEMI_DEEP_WATER || var == MB_DEEP_WATER || var == MB_SOOTOPOLIS_DEEP_WATER || (var >= MB_EASTWARD_CURRENT && var <= MB_SOUTHWARD_CURRENT)) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsMtPyreHole(u8 var) +{ + if (var == MB_MT_PYRE_HOLE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsCrackedFloorHole(u8 var) +{ + if (var == MB_CRACKED_FLOOR_HOLE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsCrackedFloor(u8 var) +{ + if (var == MB_CRACKED_FLOOR) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsMuddySlope(u8 var) +{ + if (var == MB_MUDDY_SLOPE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsBumpySlope(u8 var) +{ + if (var == MB_BUMPY_SLOPE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsIsolatedVerticalRail(u8 var) +{ + if (var == MB_ISOLATED_VERTICAL_RAIL) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsIsolatedHorizontalRail(u8 var) +{ + if (var == MB_ISOLATED_HORIZONTAL_RAIL) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsVerticalRail(u8 var) +{ + if (var == MB_VERTICAL_RAIL) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsHorizontalRail(u8 var) +{ + if (var == MB_HORIZONTAL_RAIL) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSeaweed(u8 var) +{ + if (var == MB_SEAWEED || var == MB_SEAWEED_NO_SURFACING) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsRunningDisallowed(u8 var) +{ + if (var == MB_NO_RUNNING || var == MB_LONG_GRASS || var == MB_HOT_SPRINGS || MetatileBehavior_IsPacifidlogLog(var) != FALSE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsCuttableGrass(u8 var) +{ + if (var == MB_TALL_GRASS || var == MB_LONG_GRASS || var == MB_ASHGRASS || var == MB_LONG_GRASS_SOUTH_EDGE) + return TRUE; + else + return FALSE; +} + +bool8 sub_805791C(u8 var) +{ + if (var == MB_8E) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsPictureBookShelf(u8 var) +{ + if (var == MB_PICTURE_BOOK_SHELF) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsBookShelf(u8 var) +{ + if (var == MB_BOOKSHELF) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsPokeCenterBookShelf(u8 var) +{ + if (var == MB_POKEMON_CENTER_BOOKSHELF) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsVase(u8 var) +{ + if (var == MB_VASE) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsTrashCan(u8 var) +{ + if (var == MB_TRASH_CAN) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsShopShelf(u8 var) +{ + if (var == MB_SHOP_SHELF) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsBlueprint(u8 var) +{ + if (var == MB_BLUEPRINT) + return TRUE; + else + return FALSE; +} diff --git a/src/field/money.c b/src/field/money.c new file mode 100644 index 000000000..5d9d0b689 --- /dev/null +++ b/src/field/money.c @@ -0,0 +1,275 @@ +#include "global.h" +#include "money.h" +#include "decompress.h" +#include "menu.h" +#include "sprite.h" +#include "string_util.h" + +#define SPRITE_TAG_MONEY (0x2722) + +extern u16 gSpecialVar_0x8005; + +static EWRAM_DATA u8 gUnknown_02038734 = 0; + +extern const struct CompressedSpriteSheet gUnknown_083CF584; +extern const struct CompressedSpritePalette gUnknown_083CF58C; +extern const struct SpriteTemplate gSpriteTemplate_83CF56C; + +bool8 IsEnoughMoney(u32 budget, u32 cost) +{ + if (budget >= cost) + { + return TRUE; + } + + return FALSE; +} + +void sub_80B79B8(u32 *arg0, u32 arg1) +{ + if (*arg0 > *arg0 + arg1) + { + *arg0 = 999999; + return; + } + + *arg0 = *arg0 + arg1; + if (*arg0 > 999999) + { + *arg0 = 999999; + } +} + +void sub_80B79E0(u32 *arg0, u32 arg1) +{ + if (*arg0 < arg1) + { + *arg0 = 0; + } + else + { + *arg0 = *arg0 - arg1; + } +} + +void sub_80B79F8(u8 *buffer, u32 arg1, u8 arg2) +{ + u8 width; + u8 i; + + if (arg1 > 999999) + { + width = 7; + } + else if (arg1 > 99999) + { + width = 6; + } + else if (arg1 > 10000) + { + width = 5; + } + else if (arg1 > 999) + { + width = 4; + } + else if (arg1 > 99) + { + width = 3; + } + else if (arg1 > 9) + { + width = 2; + } + else + { + width = 1; + } + + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x14; + buffer[2] = 0x06; + buffer += 3; + + for (i = 0; i < arg2 - width; i++) + { + buffer[0] = CHAR_SPACE; + buffer += 1; + } + + buffer[0] = CHAR_CURRENCY; + buffer += 1; + + buffer = ConvertIntToDecimalString(buffer, arg1); + + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x14; + buffer[2] = 0x00; + buffer[3] = EOS; +} + +void sub_80B7A94(u32 arg0, u8 size, u8 x, u8 y) +{ + u8 buffer[16]; + u8 stringWidth; + + sub_80B79F8(buffer, arg0, size); + stringWidth = sub_8072CA4(buffer); + + if (stringWidth >= (size + 1) * 8) + MenuPrint(buffer, x, y); + else + { + int xPlusOne = x + 1; + MenuPrint_PixelCoords(buffer, (xPlusOne + size) * 8 - stringWidth, y * 8, 1); + } +} + +void sub_80B7AEC(u32 arg0, u8 left, u8 top) +{ + u8 buffer[32]; + u8 *ptr; + + ptr = &buffer[0]; + + ptr[0] = CHAR_CURRENCY; + ptr++; + + ptr = ConvertIntToDecimalString(ptr, arg0); + + MenuPrint_RightAligned(buffer, left, top); + +#ifdef ENGLISH + ptr[0] = 0xFC; + ptr[1] = 0x14; + ptr[2] = 0x00; + ptr[3] = 0xFF; +#endif +} + +__attribute__((naked)) +void sub_80B7B34(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + sub sp, 0x4\n\ + mov r8, r0\n\ + adds r5, r1, 0\n\ + mov r9, r2\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + lsls r5, 24\n\ + lsrs r5, 24\n\ + mov r1, r9\n\ + lsls r1, 8\n\ + mov r9, r1\n\ + ldr r4, _080B7BD8 @ =gDecoration10000_Gfx\n\ + adds r0, r1, r4\n\ + lsls r6, r5, 4\n\ + subs r6, r5\n\ + lsls r1, r6, 6\n\ + mov r3, r8\n\ + adds r3, 0x1\n\ + lsls r3, 5\n\ + ldr r2, _080B7BDC @ =0x06008000\n\ + adds r3, r2\n\ + adds r1, r3\n\ + movs r2, 0x20\n\ + str r3, [sp]\n\ + bl CpuFastSet\n\ + adds r4, 0x80\n\ + add r9, r4\n\ + adds r0, r5, 0x1\n\ + lsls r4, r0, 4\n\ + subs r4, r0\n\ + lsls r1, r4, 6\n\ + ldr r3, [sp]\n\ + adds r1, r3\n\ + mov r0, r9\n\ + movs r2, 0x20\n\ + bl CpuFastSet\n\ + movs r3, 0\n\ + lsls r5, 5\n\ + mov r0, r8\n\ + adds r7, r5, r0\n\ + lsls r6, 1\n\ + adds r6, 0x1\n\ + add r6, r8\n\ + ldr r1, _080B7BE0 @ =0xfffff000\n\ + adds r5, r1, 0\n\ + ldr r0, _080B7BE4 @ =0x0600f800\n\ + mov r12, r0\n\ + ldr r1, _080B7BE8 @ =0x0600f840\n\ + mov r9, r1\n\ + lsls r4, 1\n\ + adds r4, 0x1\n\ + add r4, r8\n\ +_080B7BAA:\n\ + adds r1, r7, r3\n\ + lsls r1, 1\n\ + mov r0, r12\n\ + adds r2, r1, r0\n\ + adds r0, r3, r6\n\ + adds r0, r5\n\ + strh r0, [r2]\n\ + add r1, r9\n\ + adds r0, r3, r4\n\ + adds r0, r5\n\ + strh r0, [r1]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, 0x3\n\ + bls _080B7BAA\n\ + add sp, 0x4\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\ +_080B7BD8: .4byte gDecoration10000_Gfx\n\ +_080B7BDC: .4byte 0x06008000\n\ +_080B7BE0: .4byte 0xfffff000\n\ +_080B7BE4: .4byte 0x0600f800\n\ +_080B7BE8: .4byte 0x0600f840\n\ + .syntax divided\n"); +} + +void sub_80B7BEC(u32 arg0, u8 x, u8 y) +{ + sub_80B7A94(arg0, 6, x + 6, y + 1); +} + +void sub_80B7C14(u32 arg0, u8 x, u8 y) +{ + MenuDrawTextWindow(x, y, x + 13, y + 3); + sub_80B7BEC(arg0, x, y); + + LoadCompressedObjectPic(&gUnknown_083CF584); + LoadCompressedObjectPalette(&gUnknown_083CF58C); + + gUnknown_02038734 = CreateSprite(&gSpriteTemplate_83CF56C, x * 8 + 19, y * 8 + 11, 0); +} + +void RemoveMoneyLabelObject(u8 x, u8 y) +{ + DestroySpriteAndFreeResources(&gSprites[gUnknown_02038734]); + FreeSpritePaletteByTag(SPRITE_TAG_MONEY); + MenuZeroFillWindowRect(x, y, x + 13, y + 3); +} + +bool8 sub_80B7CE8(void) +{ + return IsEnoughMoney(gSaveBlock1.money, gSpecialVar_0x8005); +} + +void sub_80B7D0C(void) +{ + sub_80B79E0(&gSaveBlock1.money, gSpecialVar_0x8005); +} diff --git a/src/field/party_menu.c b/src/field/party_menu.c new file mode 100644 index 000000000..1fcd2cdda --- /dev/null +++ b/src/field/party_menu.c @@ -0,0 +1,1505 @@ +#include "global.h" +#include "party_menu.h" +#include "battle.h" +#include "battle_interface.h" +#include "battle_party_menu.h" +#include "data2.h" +#include "event_data.h" +#include "item.h" +#include "item_use.h" +#include "mail_data.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "pokemon.h" +#include "pokemon_item_effect.h" +#include "pokemon_menu.h" +#include "pokemon_summary_screen.h" +#include "rom_8077ABC.h" +#include "rom_8094928.h" +#include "songs.h" +#include "sound.h" +#include "species.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "sprite.h" +#include "palette.h" +#include "event_data.h" +#include "main.h" +#include "item.h" +#include "battle_interface.h" +#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; + /*0x04*/ u8 unk4; + /*0x05*/ u8 unk5; + /*0x06*/ u16 unk6; + /*0x08*/ u16 unk8; + /*0x0A*/ u8 pad_0A[2]; + /*0x0C*/ s32 unkC; + /*0x10*/ TaskFunc unk10; + /*0x14*/ TaskFunc unk14; +}; + +struct Unk201F000 +{ + u8 filler0[0xE00]; + u8 unkE00[3]; // not sure if this is an array or struct, or how big it is +}; + +struct UnknownStruct5 +{ + u8 unk0; + u8 unk1; + u16 *unk4; +}; + +extern u8 ewram[]; +#define ewram01000 (*(struct Unk2001000 *)(ewram + 0x01000)) +#define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000)) +#define ewram1F000 (*(struct Unk201F000 *)(ewram + 0x1F000)) + +extern u8 gUnknown_0202E8F4; +extern u8 gUnknown_0202E8F6; +extern u16 gUnknown_0202E8F8; +extern u8 gUnknown_0202E8FA; +extern u8 gLastFieldPokeMenuOpened; +extern u8 gPlayerPartyCount; +extern s32 gBattleMoveDamage; + +//extern const u16 gUnknown_083769A8[][6]; +//extern const u8 gUnknown_083769A8[][12]; +extern void *const gUnknown_08376858[][6]; +extern const u8 gUnknown_083769A8[]; +extern const u8 gUnknown_08376D1C[DATA_COUNT]; +extern const u16 gUnknown_08376504[]; +extern void (*const gUnknown_08376B54[])(u8); +extern const u8 *const gUnknown_08376D04[DATA_COUNT]; +extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; + +static void sub_806E884(u8 taskId); + +/* +void sub_806AEDC(void) +{ + const struct UnknownStruct5 *r5; + s32 i; + + AnimateSprites(); + BuildOamBuffer(); + r5 = gUnknown_08376BB4[gUnknown_0202E8FA]; + for (i = 0; i < 6; i++) + sub_800142C(r5[i].unk0 * 8, r5[i].unk1 * 8, r5[i].unk4, 0, (i << 5) | 0x200); + RunTasks(); + UpdatePaletteFade(); +} +*/ + +#if ENGLISH +#define WINDOW_LEFT (3) +#define WINDOW_RIGHT (26) +#elif GERMAN +#define WINDOW_LEFT (0) +#define WINDOW_RIGHT (29) +#endif + +u8 sub_806E834(const u8 *message, u8 arg1) +{ + u8 taskId; + + gUnknown_0202E8F6 = 1; + + MenuDrawTextWindow(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); + MenuPrintMessage(message, WINDOW_LEFT + 1, 15); + + taskId = CreateTask(sub_806E884, 1); + gTasks[taskId].data[0] = arg1; + + return taskId; +} + +static void sub_806E884(u8 taskId) +{ + if (MenuUpdateWindowText()) + { + gUnknown_0202E8F6 = 0; + if (gTasks[taskId].data[0] == 0) + MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); + DestroyTask(taskId); + } +} + +void sub_806E8D0(u8 taskId, u16 b, TaskFunc c) +{ + ewram1C000.unk10 = c; + ewram1C000.unk4 = taskId; + ewram1C000.unk5 = sub_806CA38(taskId); + ewram1C000.unk6 = b; + ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5]; +} + +bool8 PartyMenuUpdateMonHeldItem(struct Pokemon *pkmn, u16 item) +{ + u8 itemData[2]; + + if (ItemIsMail(item) == TRUE) + { + if (GiveMailToMon(pkmn, item) == 0xFF) + return TRUE; + gUnknown_0202E8F4 = 2; + } + else + { + gUnknown_0202E8F4 = 1; + } + + itemData[0] = item; + itemData[1] = item >> 8; + SetMonData(pkmn, MON_DATA_HELD_ITEM, itemData); + return FALSE; +} + +void PartyMenuTryGiveMonHeldItem(u8 taskId, u16 newItem, TaskFunc c) +{ + u16 currentItem; + + gTasks[taskId].func = TaskDummy; + sub_806E8D0(taskId, newItem, c); + currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM); + gUnknown_0202E8F4 = 0; + gUnknown_0202E8F8 = 0; + if (currentItem != 0) + { + if (ItemIsMail(currentItem) == TRUE) + { + sub_806E834(gOtherText_MailMustBeRemoved, 1); + CreateTask(party_menu_link_mon_held_item_object, 5); + } + else + { + GetMonNickname(ewram1C000.pokemon, gStringVar1); + CopyItemName(currentItem, gStringVar2); + StringExpandPlaceholders(gStringVar4, gOtherText_AlreadyHolding); + sub_806E834(gStringVar4, 1); + CreateTask(Task_ConfirmGiveHeldItem, 5); + if (ItemIsMail(newItem) == TRUE) + gUnknown_0202E8F8 = currentItem; + } + } + else + { + PartyMenuUpdateMonHeldItem(ewram1C000.pokemon, newItem); + RemoveBagItem(newItem, 1); + if (ItemIsMail(newItem)) + { + gTasks[taskId].func = c; + } + else + { + DisplayGiveHeldItemMessage(ewram1C000.unk5, newItem, 1); + CreateTask(party_menu_link_mon_held_item_object, 5); + } + } +} + +void party_menu_link_mon_held_item_object(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + { + SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5); + gTasks[ewram1C000.unk4].func = ewram1C000.unk10; + DestroyTask(taskId); + } +} + +void PartyMenuTryGiveMonHeldItem_806EACC(u8 taskId) +{ + s8 selection = ProcessMenuInputNoWrap_(); + + if (selection == 0) + { + u16 currentItem; + + MenuZeroFillWindowRect(23, 8, 29, 13); + currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM); + RemoveBagItem(ewram1C000.unk6, 1); + if (AddBagItem(currentItem, 1) == TRUE) + { + PartyMenuUpdateMonHeldItem(ewram1C000.pokemon, ewram1C000.unk6); + if (ItemIsMail(ewram1C000.unk6)) + { + DisplayTakeHeldItemMessage(ewram1C000.unk5, currentItem, 1); + } + else + { + CopyItemName(ewram1C000.unk6, gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_TakenAndReplaced); + sub_806E834(gStringVar4, 1); + } + } + else + { + sub_806E834(gOtherText_BagFullCannotRemoveItem, 0); + AddBagItem(ewram1C000.unk6, 1); + } + } + else + { + if (selection != 1 && selection != -1) + return; + if (selection == -1) + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(23, 8, 29, 13); + } + gTasks[taskId].func = party_menu_link_mon_held_item_object; +} + +void Task_ConfirmGiveHeldItem(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + { + DisplayYesNoMenu(23, 8, 1); + gTasks[taskId].func = PartyMenuTryGiveMonHeldItem_806EACC; + } +} + +void DisplayGiveHeldItemMessage(u8 a, u16 b, u8 c) +{ + GetMonNickname(&gPlayerParty[a], gStringVar1); + CopyItemName(b, gStringVar2); + StringExpandPlaceholders(gStringVar4, gOtherText_WasGivenToHold); + sub_806E834(gStringVar4, c); +} + + +// Not sure about this one for now. +/* +void PartyMenuTryGiveMonMail(u8 taskId, TaskFunc func) +{ + u16 currentItem; + struct MailStruct *r4; + + gTasks[taskId].func = TaskDummy; + sub_806E8D0(taskId, 0, func); + currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM); + gUnknown_0202E8F4 = 0; + r4 = &gSaveBlock1.mail[ewram1F000.unkE00[0] + ewram1F000.unkE00[2]]; + if (currentItem != 0) + { + sub_806E834(gOtherText_PokeHoldingItemCantMail, 1); + CreateTask(party_menu_link_mon_held_item_object, 5); + } + else + { + GiveMailToMon2(ewram1C000.pokemon, r4); + ClearMailStruct(r4); + sub_806E834(gOtherText_MailTransferredMailbox, 1); + CreateTask(party_menu_link_mon_held_item_object, 5); + } +} +*/ +__attribute__((naked)) +void PartyMenuTryGiveMonMail(u8 taskId, TaskFunc func) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + adds r2, r1, 0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldr r3, _0806ECA0 @ =gTasks\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 3\n\ + adds r1, r3\n\ + ldr r3, _0806ECA4 @ =TaskDummy\n\ + str r3, [r1]\n\ + movs r1, 0\n\ + bl sub_806E8D0\n\ + ldr r5, _0806ECA8 @ =0x0201c000\n\ + ldr r0, [r5]\n\ + movs r1, 0xC\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + ldr r2, _0806ECAC @ =gUnknown_0202E8F4\n\ + movs r1, 0\n\ + strb r1, [r2]\n\ + movs r1, 0xF8\n\ + lsls r1, 6\n\ + adds r2, r5, r1\n\ + ldrb r1, [r2]\n\ + adds r1, 0x6\n\ + ldrb r2, [r2, 0x2]\n\ + adds r1, r2\n\ + lsls r2, r1, 3\n\ + adds r2, r1\n\ + lsls r2, 2\n\ + ldr r1, _0806ECB0 @ =gSaveBlock1 + 0x2B4C\n\ + adds r4, r2, r1\n\ + cmp r0, 0\n\ + beq _0806ECBC\n\ + ldr r0, _0806ECB4 @ =gOtherText_PokeHoldingItemCantMail\n\ + movs r1, 0x1\n\ + bl sub_806E834\n\ + ldr r0, _0806ECB8 @ =party_menu_link_mon_held_item_object\n\ + movs r1, 0x5\n\ + bl CreateTask\n\ + b _0806ECDA\n\ + .align 2, 0\n\ +_0806ECA0: .4byte gTasks\n\ +_0806ECA4: .4byte TaskDummy\n\ +_0806ECA8: .4byte 0x0201c000\n\ +_0806ECAC: .4byte gUnknown_0202E8F4\n\ +_0806ECB0: .4byte gSaveBlock1 + 0x2B4C\n\ +_0806ECB4: .4byte gOtherText_PokeHoldingItemCantMail\n\ +_0806ECB8: .4byte party_menu_link_mon_held_item_object\n\ +_0806ECBC:\n\ + ldr r0, [r5]\n\ + adds r1, r4, 0\n\ + bl GiveMailToMon2\n\ + adds r0, r4, 0\n\ + bl ClearMailStruct\n\ + ldr r0, _0806ECE0 @ =gOtherText_MailTransferredMailbox\n\ + movs r1, 0x1\n\ + bl sub_806E834\n\ + ldr r0, _0806ECE4 @ =party_menu_link_mon_held_item_object\n\ + movs r1, 0x5\n\ + bl CreateTask\n\ +_0806ECDA:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0806ECE0: .4byte gOtherText_MailTransferredMailbox\n\ +_0806ECE4: .4byte party_menu_link_mon_held_item_object\n\ + .syntax divided\n"); +} + +void PartyMenuTryGiveMonHeldItem_806ECE8(u8 taskId, TaskFunc func) +{ + u16 currentItem; + + gTasks[taskId].func = TaskDummy; + sub_806E8D0(taskId, 0, func); + currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM); + if (currentItem == 0) + { + StringExpandPlaceholders(gStringVar4, gOtherText_NotHoldingAnything); + sub_806E834(gStringVar4, 0); + CreateTask(party_menu_link_mon_held_item_object, 5); + } + else + { + u8 itemData[2]; + + itemData[0] = 0; + itemData[1] = 0; + if (AddBagItem(currentItem, 1) == TRUE) + { + if (ItemIsMail(currentItem) == TRUE) + TakeMailFromMon(ewram1C000.pokemon); + DisplayTakeHeldItemMessage(ewram1C000.unk5, currentItem, 0); + SetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM, itemData); + } + else + { + sub_806E834(gOtherText_BagFullCannotRemoveItem, 0); + } + CreateTask(party_menu_link_mon_held_item_object, 5); + } +} + +void DisplayTakeHeldItemMessage(u8 a, u16 b, u8 c) +{ + GetMonNickname(&gPlayerParty[a], gStringVar1); + CopyItemName(b, gStringVar2); + StringExpandPlaceholders(gStringVar4, gOtherText_ReceivedTheThingFrom); + sub_806E834(gStringVar4, c); +} + +void DoTakeMail(u8 taskId, TaskFunc func) +{ + gTasks[taskId].func = TaskDummy; + sub_806E8D0(taskId, 0, func); + ewram1C000.unk6 = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM); + sub_806E834(gOtherText_SendRemovedMailPrompt, 1); + CreateTask(Task_ConfirmTakeHeldMail, 5); +} + +void Task_LoseMailMessage(u8 taskId) +{ + s8 selection = ProcessMenuInputNoWrap_(); + + if (selection == 0) + { + if (AddBagItem(ewram1C000.unk6, 1) == TRUE) + { + TakeMailFromMon(ewram1C000.pokemon); + sub_806E834(gOtherText_MailTaken, 0); + } + else + { + sub_806E834(gOtherText_BagFullCannotRemoveItem, 0); + } + MenuZeroFillWindowRect(23, 8, 29, 13); + gTasks[taskId].func = party_menu_link_mon_held_item_object; + } + else + { + if (selection != 1 && selection != -1) + return; + if (selection == -1) + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(23, 8, 29, 13); + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskId].func = party_menu_link_mon_held_item_object; + } +} + +void Task_ConfirmLoseMailMessage(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + { + DisplayYesNoMenu(23, 8, 1); + gTasks[taskId].func = Task_LoseMailMessage; + } +} + +void Task_TakeHeldMail(u8 taskId) +{ + s8 selection = ProcessMenuInputNoWrap_(); + + if (selection == 0) + { + MenuZeroFillWindowRect(23, 8, 29, 13); + if (TakeMailFromMon2(ewram1C000.pokemon) != 0xFF) + sub_806E834(gOtherText_MailWasSent, 0); + else + sub_806E834(gOtherText_MailboxIsFull, 0); + gTasks[taskId].func = party_menu_link_mon_held_item_object; + } + else + { + if (selection != 1 && selection != -1) + return; + if (selection == -1) + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(23, 8, 29, 13); + sub_806E834(gOtherText_MailRemovedMessageLost, 1); + gTasks[taskId].func = Task_ConfirmLoseMailMessage; + } +} + +void Task_ConfirmTakeHeldMail(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + { + DisplayYesNoMenu(23, 8, 1); + gTasks[taskId].func = Task_TakeHeldMail; + } +} + +u16 ItemIdToBattleMoveId(u16 item) +{ + u16 moveId = item - 289; + + return gUnknown_08376504[moveId]; +} + +bool8 pokemon_has_move(struct Pokemon *pkmn, u16 move) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + if (GetMonData(pkmn, MON_DATA_MOVE1 + i) == move) + return TRUE; + } + return FALSE; +} + +void TeachMonTMMove(u8 taskId, u16 move, TaskFunc func) +{ + PlaySE(SE_SELECT); + gTasks[taskId].func = TaskDummy; + sub_806E8D0(taskId, move, func); + CreateTask(Task_TeamMonTMMove, 5); +} + +void Task_TeamMonTMMove(u8 taskId) +{ + GetMonNickname(ewram1C000.pokemon, gStringVar1); + ewram1C000.unk8 = ItemIdToBattleMoveId(ewram1C000.unk6); + StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); + ewram1B000.unk282 = 0; + if (pokemon_has_move(ewram1C000.pokemon, ewram1C000.unk8)) + { + StringExpandPlaceholders(gStringVar4, gOtherText_AlreadyKnows); + sub_806E834(gStringVar4, 1); + gTasks[taskId].func = party_menu_link_mon_held_item_object; + } + else + { + if (!CanMonLearnTMHM(ewram1C000.pokemon, ewram1C000.unk6 - 33)) + { + StringExpandPlaceholders(gStringVar4, gOtherText_NotCompatible); + sub_806E834(gStringVar4, 1); + gTasks[taskId].func = party_menu_link_mon_held_item_object; + } + else + { + if (GiveMoveToMon(ewram1C000.pokemon, ewram1C000.unk8) != 0xFFFF) + { + Task_TeamMonTMMove2(taskId); + } + else + { + StringExpandPlaceholders(gStringVar4, gOtherText_WantsToLearn); + sub_806E834(gStringVar4, 1); + gTasks[taskId].func = sub_806F358; + } + } + } +} + +void Task_TeamMonTMMove2(u8 taskId) +{ + StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); + StringExpandPlaceholders(gStringVar4, gOtherText_LearnedMove); + sub_806E834(gStringVar4, 1); + AdjustFriendship(ewram1C000.pokemon, 4); + if (ewram1B000.unk282 == 0 && ewram1C000.unk6 <= 0x152) + RemoveBagItem(ewram1C000.unk6, 1); + gTasks[taskId].func = Task_TeamMonTMMove3; +} + +void Task_TeamMonTMMove3(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + { + PlayFanfare(BGM_FANFA1); + gTasks[taskId].func = Task_TeamMonTMMove4; + } +} + +void Task_TeamMonTMMove4(u8 taskId) +{ + if (IsFanfareTaskInactive()) + { + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + { + SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5); + if (ewram1B000.unk282 == 1) + { + sub_8070C54(taskId); + } + else + { + gTasks[ewram1C000.unk4].func = ewram1C000.unk10; + DestroyTask(taskId); + } + } + } +} + +void sub_806F2FC(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + { + SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5); + if (ewram1B000.unk282 == 1) + { + sub_8070C54(taskId); + } + else + { + gTasks[ewram1C000.unk4].func = ewram1C000.unk10; + DestroyTask(taskId); + } + } +} + +void sub_806F358(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + { + DisplayYesNoMenu(23, 8, 1); + gTasks[taskId].func = sub_806F390; + } +} + +void sub_806F390(u8 taskId) +{ + s8 selection = ProcessMenuInputNoWrap_(); + + if (selection == 0) + { + MenuZeroFillWindowRect(23, 8, 29, 13); + sub_806E834(gOtherText_WhichMoveToForget2, 1); + gTasks[taskId].func = sub_806F44C; + } + else + { + if (selection != 1 && selection != -1) + return; + if (selection == -1) + PlaySE(SE_SELECT); + StopTryingToTeachMove_806F614(taskId); + } +} + +void sub_806F3FC(u8 taskId) +{ + if (!gPaletteFade.active) + { + sub_809D9F0(gPlayerParty, ewram1C000.unk5, gPlayerPartyCount - 1, sub_808B564, ewram1C000.unk8); + DestroyTask(taskId); + } +} + +void sub_806F44C(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = sub_806F3FC; + } +} + +void TaughtMove(u8 taskId) +{ + if (!gPaletteFade.active) + { + u8 moveIndex; + u16 r4; + + gTasks[taskId].func = TaskDummy; + sub_806E8D0(taskId, gScriptItemId, sub_808B508); + moveIndex = sub_809FA30(); + r4 = GetMonData(ewram1C000.pokemon, MON_DATA_MOVE1 + moveIndex); + GetMonNickname(ewram1C000.pokemon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[r4]); + StringExpandPlaceholders(gStringVar4, gOtherText_ForgetMove123_2); + sub_806E834(gStringVar4, 1); + CreateTask(TMMoveUpdateMoveSlot, 5); + } +} + +void TMMoveUpdateMoveSlot(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + { + RemoveMonPPBonus(ewram1C000.pokemon, sub_809FA30()); + SetMonMoveSlot(ewram1C000.pokemon, ewram1C000.unk8, sub_809FA30()); + Task_TeamMonTMMove2(taskId); + } +} + +void StopTryingToTeachMove_806F588(u8 taskId) +{ + if (!gPaletteFade.active) + { + gTasks[taskId].func = TaskDummy; + sub_806E8D0(taskId, gScriptItemId, sub_808B508); + StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); + StringExpandPlaceholders(gStringVar4, gOtherText_StopTryingTo); + sub_806E834(gStringVar4, 1); + CreateTask(StopTryingToTeachMove_806F67C, 5); + } +} + +void StopTryingToTeachMove_806F614(u8 taskId) +{ + MenuZeroFillWindowRect(23, 8, 29, 13); + StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); + StringExpandPlaceholders(gStringVar4, gOtherText_StopTryingTo); + sub_806E834(gStringVar4, 1); + gTasks[taskId].func = StopTryingToTeachMove_806F67C; +} + +void StopTryingToTeachMove_806F67C(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + { + DisplayYesNoMenu(23, 8, 1); + gTasks[taskId].func = StopTryingToTeachMove_806F6B4; + } +} + +void StopTryingToTeachMove_806F6B4(u8 taskId) +{ + s8 selection = ProcessMenuInputNoWrap_(); + + if (selection == 0) + { + MenuZeroFillWindowRect(23, 8, 29, 13); + GetMonNickname(ewram1C000.pokemon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); + StringExpandPlaceholders(gStringVar4, gOtherText_DidNotLearnMove2); + sub_806E834(gStringVar4, 1); + gTasks[taskId].func = sub_806F2FC; + } + else + { + if (selection != 1 && selection != -1) + return; + if (selection == -1) + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(23, 8, 29, 13); + GetMonNickname(ewram1C000.pokemon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); + StringExpandPlaceholders(gStringVar4, gOtherText_WantsToLearn); + sub_806E834(gStringVar4, 1); + gTasks[taskId].func = sub_806F358; + } +} + +bool8 IsHMMove(u16 move) +{ + u8 i; + + for (i = 0; i < 8; i++) + { + if (gUnknown_08376504[50 + i] == move) + return TRUE; + } + return FALSE; +} + +s16 sub_806F7E8(u8 taskId, struct BattleInterfaceStruct1 *b, s8 c) +{ + s16 *taskData; + u8 hpBarLevel; + void *vramPtr; + + taskData = gTasks[taskId].data; + + b->unk0 = taskData[10]; + b->unk4 = taskData[11]; + b->unk8 = taskData[12] * c; + b->unk10 = 0x100; + hpBarLevel = GetHPBarLevel(ewram1B000.unk282, b->unk0); + if (hpBarLevel > 2) + b->unkC_0 = 4; + if (hpBarLevel == 2) + b->unkC_0 = 5; + if (hpBarLevel < 2) + b->unkC_0 = 6; + vramPtr = gUnknown_08376858[IsDoubleBattle()][ewram1C000.unk5]; + return sub_80460C8(b, &ewram1C000.unkC, vramPtr, 0); +} + +void sub_806F8AC(u8 taskId) +{ + struct BattleInterfaceStruct1 sp0; + u16 sp14; + + ewram1B000.unk282 = sub_806F7E8(taskId, &sp0, -1); + if (ewram1B000.unk282 == -1) + { + ewram1C000.unkC = 0; + if (-sp0.unk8 + sp0.unk4 > sp0.unk0) + sp14 = sp0.unk0 - sp0.unk4; + else + sp14 = -sp0.unk8; + gBattleMoveDamage = -sp14; + GetMonNickname(ewram1C000.pokemon, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, sp14, 0, 3); + if (gTasks[taskId].data[14] == 0) + StringExpandPlaceholders(gStringVar4, gOtherText_HPRestoredBy); + else + StringExpandPlaceholders(gStringVar4, gOtherText_RegainedHealth); + SetMonIconAnim(GetMonIconSpriteId_maybe(ewram1C000.unk4, ewram1C000.unk5), ewram1C000.pokemon); + task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 7); + ewram1B000.unk261 = 2; + sub_806E834(gStringVar4, 1); + sp14 += sp0.unk4; + SetMonData(ewram1C000.pokemon, MON_DATA_HP, (u8 *)&sp14); + RemoveBagItem(ewram1C000.unk6, 1); + sub_8032638(); + gTasks[taskId].func = sub_806FB44; + } + else + { + PartyMenuDoPrintHP(ewram1C000.unk5, IsDoubleBattle(), ewram1B000.unk282, sp0.unk0); + } +} + +void sub_806FA18(u8 taskId) +{ + struct BattleInterfaceStruct1 sp0; + + ewram1B000.unk282 = sub_806F7E8(taskId, &sp0, 1); + if (ewram1B000.unk282 == -1) + { + PlaySE(SE_KAIFUKU); + ewram1C000.unkC = 0; + gTasks[taskId].data[11] -= gTasks[taskId].data[12]; + SetMonData(ewram1C000.pokemon, MON_DATA_HP, (u8 *)&gTasks[taskId].data[11]); + SetMonIconAnim(GetMonIconSpriteId_maybe(ewram1C000.unk4, ewram01000.unk1), ewram1C000.pokemon); + ewram1C000.unk5 = gSprites[ewram01000.unk2].data0; + ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5]; + gTasks[taskId].data[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP); + gTasks[taskId].data[11] = GetMonData(ewram1C000.pokemon, MON_DATA_HP); + ewram1C000.unkC = -32768; + ewram1C000.unk14 = ewram1C000.unk10; + gTasks[taskId].func = sub_806F8AC; + ewram1B000.unk282 = gTasks[taskId].data[11]; + } + else + { + PartyMenuDoPrintHP(ewram1C000.unk5, IsDoubleBattle(), ewram1B000.unk282, sp0.unk0); + } +} + +void sub_806FB0C(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + { + gTasks[ewram1C000.unk4].func = ewram1C000.unk10; + DestroyTask(taskId); + } +} + +void sub_806FB44(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + { + gTasks[ewram1C000.unk4].func = ewram1C000.unk14; + DestroyTask(taskId); + } +} + +bool8 IsHPRecoveryItem(u16 item) +{ + const u8 *itemEffect; + + if (item == 0xAF) + itemEffect = gSaveBlock1.enigmaBerry.itemEffect; + else + itemEffect = gItemEffectTable[item - 13]; + + if (itemEffect[4] & 4) + return TRUE; + else + return FALSE; +} + +void PartyMenuUpdateLevelOrStatus(struct Pokemon *pkmn, u8 b) +{ + PartyMenuClearLevelStatusTilemap(b); + PartyMenuPrintMonLevelOrStatus(b, pkmn); +} + +void GetMedicineItemEffectMessage(u16 item) +{ + switch (GetItemEffectType(item)) + { + case 3: + StringExpandPlaceholders(gStringVar4, gOtherText_CuredPoisoning); + break; + case 4: + StringExpandPlaceholders(gStringVar4, gOtherText_WokeUp); + break; + case 5: + StringExpandPlaceholders(gStringVar4, gOtherText_BurnHealed); + break; + case 6: + StringExpandPlaceholders(gStringVar4, gOtherText_ThawedOut); + break; + case 7: + StringExpandPlaceholders(gStringVar4, gOtherText_CuredParalysis); + break; + case 8: + StringExpandPlaceholders(gStringVar4, gOtherText_SnapConfusion); + break; + case 9: + StringExpandPlaceholders(gStringVar4, gOtherText_GotOverLove); + break; + case 11: + StringExpandPlaceholders(gStringVar4, gOtherText_BecameHealthy); + break; + case 13: + StringCopy(gStringVar2, gOtherText_Hp2); + StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); + break; + case 12: + StringCopy(gStringVar2, gOtherText_Attack); + StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); + break; + case 17: + StringCopy(gStringVar2, gOtherText_Defense); + StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); + break; + case 16: + StringCopy(gStringVar2, gOtherText_Speed); + StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); + break; + case 14: + StringCopy(gStringVar2, gOtherText_SpAtk2); + StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); + break; + case 15: + StringCopy(gStringVar2, gOtherText_SpDef2); + StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); + break; + case 19: + case 20: + StringExpandPlaceholders(gStringVar4, gOtherText_PPIncreased); + break; + case 21: + StringExpandPlaceholders(gStringVar4, gOtherText_PPRestored); + break; + default: + StringExpandPlaceholders(gStringVar4, gOtherText_WontHaveAnyEffect); + break; + } +} + +bool8 IsMedicineIneffective(struct Pokemon *pkmn, u16 item) +{ + if (GetItemEffectType(item) == 13 + && GetMonData(pkmn, MON_DATA_SPECIES) == SPECIES_SHEDINJA) + return TRUE; + else + return FALSE; +} + +bool8 ExecuteTableBasedItemEffect__(u8 a, u16 b, u8 c) +{ + if (gMain.inBattle) + return ExecuteTableBasedItemEffect_(&gPlayerParty[a], b, sub_8094C20(a), c); + else + return ExecuteTableBasedItemEffect_(&gPlayerParty[a], b, a, c); +} + +void UseMedicine(u8 taskId, u16 item, TaskFunc func) +{ + u8 r7; + bool8 r9 = FALSE; + bool8 r0; + + gTasks[taskId].func = TaskDummy; + r7 = CreateTask(TaskDummy, 5); + sub_806E8D0(taskId, item, func); + if (!IsMedicineIneffective(ewram1C000.pokemon, item)) + { + r9 = IsHPRecoveryItem(item); + if (r9 == TRUE) + { + gTasks[r7].data[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP); + gTasks[r7].data[11] = GetMonData(ewram1C000.pokemon, MON_DATA_HP); + if (gTasks[r7].data[10] == gTasks[r7].data[11]) + { + r9 = FALSE; + gTasks[r7].data[10] = 0; + gTasks[r7].data[11] = 0; + } + } + r0 = ExecuteTableBasedItemEffect__(ewram1C000.unk5, item, 0); + } + else + { + r0 = TRUE; + } + + if (r0) + { + gUnknown_0202E8F4 = 0; + PlaySE(SE_SELECT); + sub_806E834(gOtherText_WontHaveAnyEffect, 1); + gTasks[r7].func = sub_806FB0C; + } + else + { + u8 statusAndPkrs; + + gUnknown_0202E8F4 = 1; + if (!IsBlueYellowRedFlute(item)) + PlaySE(SE_KAIFUKU); + else + PlaySE(SE_BIDORO); + statusAndPkrs = GetMonStatusAndPokerus(ewram1C000.pokemon); + if (statusAndPkrs == 6 || statusAndPkrs == 0) + PartyMenuUpdateLevelOrStatus(ewram1C000.pokemon, ewram1C000.unk5); + if (r9 == TRUE) + { + gTasks[r7].data[12] = GetMonData(ewram1C000.pokemon, MON_DATA_HP) - gTasks[r7].data[11]; + ewram1C000.unkC = -32768; + if (gTasks[r7].data[11] == 0) + gTasks[r7].data[14] = 1; + else + gTasks[r7].data[14] = 0; + ewram1C000.unk14 = ewram1C000.unk10; + gTasks[r7].func = sub_806F8AC; + ewram1B000.unk282 = gTasks[r7].data[11]; + } + else + { + GetMonNickname(ewram1C000.pokemon, gStringVar1); + if (!IsBlueYellowRedFlute(item)) + RemoveBagItem(item, 1); + GetMedicineItemEffectMessage(item); + TryPrintPartyMenuMonNickname(ewram1C000.unk5, ewram1C000.pokemon); + sub_806E834(gStringVar4, 1); + gTasks[r7].func = sub_806FB0C; + } + } +} + +bool8 IsBlueYellowRedFlute(u16 item) +{ + if (item == 0x27 + || item == 0x29 + || item == 0x28) + return TRUE; + else + return FALSE; +} + +void sub_8070048(u8 taskId, u16 item, TaskFunc func) +{ + ewram1C000.unk10 = func; + ewram1C000.unk4 = taskId; + ewram1C000.unk6 = item; + ewram1C000.unk5 = 0; + ewram1C000.unk14 = sub_80701DC; + ewram1B000.unk27E = 0; + ewram1B000.unk280 = 0; + sub_8070088(taskId); +} + +void sub_8070088(u8 taskId) +{ + u8 taskId2; + + gTasks[taskId].func = TaskDummy; + if (GetMonData(&gPlayerParty[ewram1C000.unk5], MON_DATA_SPECIES) == 0) + { + gTasks[taskId].func = sub_80701DC; + } + else + { + s16 *taskData; + + taskId2 = CreateTask(TaskDummy, 5); + taskData = gTasks[taskId2].data; + ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5]; + taskData[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP); + taskData[11] = GetMonData(ewram1C000.pokemon, MON_DATA_HP); + if (ExecuteTableBasedItemEffect__(ewram1C000.unk5, ewram1C000.unk6, 0)) + { + DestroyTask(taskId2); + gTasks[taskId].func = sub_80701DC; + } + else + { + gUnknown_0202E8F4 = 1; + MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); + PlaySE(SE_KAIFUKU); + PartyMenuUpdateLevelOrStatus(ewram1C000.pokemon, ewram1C000.unk5); + task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 9); + ewram1B000.unk261 = 2; + taskData[12] = GetMonData(ewram1C000.pokemon, MON_DATA_HP) - taskData[11]; + taskData[14] = 1; + ewram1B000.unk27E = 1; + ewram1B000.unk280 = 1; + ewram1B000.unk282 = taskData[11]; + ewram1C000.unkC = -32768; + gTasks[taskId2].func = sub_806F8AC; + } + } +} + +void sub_80701DC(u8 taskId) +{ + if (ewram1B000.unk27E == 1) + { + AddBagItem(ewram1C000.unk6, 1); + if (GetMonData(&gPlayerParty[ewram1C000.unk5], MON_DATA_SPECIES) != 0) + { + task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 3); + ewram1B000.unk261 = 2; + } + ewram1B000.unk27E = 0; + } + ewram1C000.unk5++; + if (ewram1C000.unk5 == 6) + { + gUnknown_0202E8F4 = 0; + if (ewram1B000.unk280 == 0) + { + gTasks[taskId].func = TaskDummy; + sub_806E834(gOtherText_WontHaveAnyEffect, 1); + CreateTask(sub_806FB0C, 8); + } + else + { + RemoveBagItem(ewram1C000.unk6, 1); + gTasks[taskId].func = ewram1C000.unk10; + } + gLastFieldPokeMenuOpened = 0; + } + else + { + sub_8070088(taskId); + } +} + +void CreateItemUseMoveMenu(u8 partyMonIndex) +{ + u8 r6; + u8 i; + + r6 = 0; + MenuDrawTextWindow(19, 10, 29, 19); + for (i = 0; i < 4; i++) + { + u16 move = GetMonData(&gPlayerParty[partyMonIndex], MON_DATA_MOVE1 + i); + + MenuPrint(gMoveNames[move], 20, i * 2 + 11); + if (move != 0) + r6++; + } + InitMenu(0, 20, 11, r6, 0, 9); +} + +void Task_HandleItemUseMoveMenuInput(u8 taskId) +{ + if (gMain.newKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + } + else if (gMain.newKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + MoveMenuCursor(1); + } + else if (gMain.newKeys & A_BUTTON) + { + gUnknown_08376B54[0](taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_08376B54[1](taskId); + } +} + +void DoPPRecoveryItemEffect(u8 taskId, u16 b, TaskFunc c) +{ + const u8 *itemEffect; + u8 taskId2; + + if (b == 0xAF) + itemEffect = gSaveBlock1.enigmaBerry.itemEffect; + else + itemEffect = gItemEffectTable[b - 13]; + gTasks[taskId].func = TaskDummy; + taskId2 = CreateTask(TaskDummy, 5); + sub_806E8D0(taskId, b, c); + if (!(itemEffect[4] & 0x10)) + { + gTasks[taskId2].data[11] = 0; + DoRecoverPP(taskId2); + } + else + { + PlaySE(SE_SELECT); + sub_806D538(10, 3); + CreateItemUseMoveMenu(ewram1C000.unk5); + gTasks[taskId2].func = Task_HandleItemUseMoveMenuInput; + gMain.newKeys = 0; + } +} + +void ItemUseMoveMenu_HandleMoveSelection(u8 taskId) +{ + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(19, 10, 29, 19); + sub_806D5A4(); + gTasks[taskId].data[11] = GetMenuCursorPos(); + DoRecoverPP(taskId); +} + +void ItemUseMoveMenu_HandleCancel(u8 taskId) +{ + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(19, 10, 29, 19); + if (gMain.inBattle) + gTasks[ewram1C000.unk4].func = SetUpBattlePokemonMenu; + else + gTasks[ewram1C000.unk4].func = sub_808B0C0; + sub_806D538(3, 0); + DestroyTask(taskId); +} + +void DoRecoverPP(u8 taskId) +{ + u16 r5 = 0; + + if (ExecuteTableBasedItemEffect__(ewram1C000.unk5, ewram1C000.unk6, gTasks[taskId].data[11])) + { + gUnknown_0202E8F4 = r5; + PlaySE(SE_SELECT); + sub_806E834(gOtherText_WontHaveAnyEffect, 1); + } + else + { + gUnknown_0202E8F4 = 1; + PlaySE(SE_KAIFUKU); + RemoveBagItem(ewram1C000.unk6, 1); + r5 = GetMonData(ewram1C000.pokemon, MON_DATA_MOVE1 + gTasks[taskId].data[11]); + StringCopy(gStringVar1, gMoveNames[r5]); + GetMedicineItemEffectMessage(ewram1C000.unk6); + sub_806E834(gStringVar4, 1); + } + gTasks[taskId].func = sub_806FB0C; +} + +void DoPPUpItemEffect(u8 taskId, u16 b, TaskFunc c) +{ + gTasks[taskId].func = TaskDummy; + sub_806E8D0(taskId, b, c); + PlaySE(SE_SELECT); + sub_806D538(11, 3); + CreateItemUseMoveMenu(ewram1C000.unk5); + CreateTask(Task_HandleItemUseMoveMenuInput, 5); + gMain.newKeys = 0; +} + +void DoRareCandyItemEffect(u8 taskId, u16 b, TaskFunc c) +{ + u8 i; + bool8 r0; + + gTasks[taskId].func = TaskDummy; + sub_806E8D0(taskId, b, c); + + if (GetMonData(ewram1C000.pokemon, MON_DATA_LEVEL) != 100) + { + for (i = 0; i < 6; i++) + ewram1B000.unk264[i] = GetMonData(ewram1C000.pokemon, gUnknown_08376D1C[i]); + r0 = ExecuteTableBasedItemEffect__(ewram1C000.unk5, b, 0); + } + else + r0 = TRUE; + + if (r0) + { + gUnknown_0202E8F4 = 0; + PlaySE(SE_SELECT); + sub_806E834(gOtherText_WontHaveAnyEffect, 1); + CreateTask(sub_806FB0C, 5); + } + else + { + u8 level; + + gUnknown_0202E8F4 = 1; + PlayFanfareByFanfareNum(0); + sub_8070A20(ewram1C000.unk5, ewram1C000.pokemon); + RemoveBagItem(b, 1); + GetMonNickname(ewram1C000.pokemon, gStringVar1); + level = GetMonData(ewram1C000.pokemon, MON_DATA_LEVEL); + ConvertIntToDecimalStringN(gStringVar2, level, 0, 3); + StringExpandPlaceholders(gStringVar4, gOtherText_ElevatedTo); + sub_806E834(gStringVar4, 1); + CreateTask(Task_RareCandy1, 5); + } +} + +void Task_RareCandy1(u8 taskId) +{ + if (WaitFanfare(0) && gUnknown_0202E8F6 == 0) + { + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_8070848(taskId); + gTasks[taskId].func = Task_RareCandy2; + } + } +} + +void Task_RareCandy2(u8 taskId) +{ + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_8070968(taskId); + gTasks[taskId].func = Task_RareCandy3; + } +} + +#if ENGLISH +void sub_8070848(u8 taskId) +{ + u8 i; + + MenuDrawTextWindow(11, 0, 29, 7); + + for (i = 0; i < DATA_COUNT; i++) + { + u8 x; + u8 y; + u32 stat; + + stat = GetMonData(ewram1C000.pokemon, gUnknown_08376D1C[i]); + + ewram1B000.unk264[i + DATA_COUNT] = stat; + ewram1B000.unk264[i] = stat - ewram1B000.unk264[i]; + + x = (i / 3) * 9 + 11; + y = ((i % 3) << 1) + 1; + + MenuPrint_PixelCoords(gUnknown_08376D04[i], (x + 1) * 8, y * 8, 1); + + if (i == 2) + MenuPrint_PixelCoords(gOtherText_TallPlusAndRightArrow, (x + 6) * 8 + 6, y * 8, 0); + else + MenuPrint_PixelCoords(gOtherText_TallPlusAndRightArrow, (x + 6) * 8 + 6, y * 8, 1); + + gStringVar1[0] = EXT_CTRL_CODE_BEGIN; + gStringVar1[1] = 0x14; + gStringVar1[2] = 0x06; + + ConvertIntToDecimalStringN(gStringVar1 + 3, ewram1B000.unk264[i], 1, 2); + + MenuPrint_PixelCoords(gStringVar1, (x + 6) * 8 + 12, y * 8, 0); + } +} +#elif GERMAN +__attribute__((naked)) +void sub_8070848(u8 taskId) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + movs r0, 0xB\n\ + movs r1, 0\n\ + movs r2, 0x1D\n\ + movs r3, 0x7\n\ + bl MenuDrawTextWindow\n\ + movs r7, 0\n\ + ldr r0, _0807092C @ =gStringVar1\n\ + mov r10, r0\n\ + movs r1, 0xFC\n\ + mov r9, r1\n\ + movs r2, 0x13\n\ + mov r8, r2\n\ +_0807086C:\n\ + ldr r1, _08070930 @ =0x0201c000\n\ + ldr r0, [r1]\n\ + ldr r1, _08070934 @ =gUnknown_08376D1C\n\ + adds r1, r7, r1\n\ + ldrb r1, [r1]\n\ + bl GetMonData\n\ + adds r1, r7, 0x6\n\ + lsls r1, 1\n\ + ldr r2, _08070938 @ =0x0201b264\n\ + adds r1, r2, r1\n\ + strh r0, [r1]\n\ + lsls r6, r7, 1\n\ + adds r6, r2, r6\n\ + ldrh r1, [r6]\n\ + subs r0, r1\n\ + strh r0, [r6]\n\ + adds r0, r7, 0\n\ + movs r1, 0x3\n\ + bl __udivsi3\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r4, r0, 3\n\ + adds r4, r0\n\ + adds r4, 0xB\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r0, r7, 0\n\ + movs r1, 0x3\n\ + bl __umodsi3\n\ + adds r5, r0, 0\n\ + lsls r5, 1\n\ + adds r5, 0x1\n\ + lsls r5, 24\n\ + lsrs r5, 24\n\ + ldr r1, _0807093C @ =gUnknown_08376D04\n\ + lsls r0, r7, 2\n\ + adds r0, r1\n\ + ldr r1, [r0]\n\ + mov r0, r10\n\ + bl StringCopy\n\ + adds r2, r0, 0\n\ + mov r0, r9\n\ + strb r0, [r2]\n\ + adds r2, 0x1\n\ + mov r1, r8\n\ + strb r1, [r2]\n\ + adds r2, 0x1\n\ + movs r0, 0x2E\n\ + strb r0, [r2]\n\ + adds r2, 0x1\n\ + adds r0, r2, 0\n\ + ldr r1, _08070940 @ =gOtherText_TallPlusAndRightArrow\n\ + bl StringCopy\n\ + adds r2, r0, 0\n\ + mov r0, r9\n\ + strb r0, [r2]\n\ + adds r2, 0x1\n\ + mov r1, r8\n\ + strb r1, [r2]\n\ + adds r2, 0x1\n\ + movs r0, 0x34\n\ + strb r0, [r2]\n\ + adds r2, 0x1\n\ + movs r0, 0\n\ + ldrsh r1, [r6, r0]\n\ + adds r0, r2, 0\n\ + movs r2, 0x1\n\ + movs r3, 0x2\n\ + bl ConvertIntToDecimalStringN\n\ + adds r4, 0x1\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + mov r0, r10\n\ + adds r1, r4, 0\n\ + adds r2, r5, 0\n\ + bl MenuPrint\n\ + adds r0, r7, 0x1\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + cmp r7, 0x5\n\ + bls _0807086C\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\ +_0807092C: .4byte gStringVar1\n\ +_08070930: .4byte 0x0201c000\n\ +_08070934: .4byte gUnknown_08376D1C\n\ +_08070938: .4byte 0x0201b264\n\ +_0807093C: .4byte gUnknown_08376D04\n\ +_08070940: .4byte gOtherText_TallPlusAndRightArrow\n\ + .syntax divided\n"); +} +#endif diff --git a/src/field/player_pc.c b/src/field/player_pc.c new file mode 100644 index 000000000..6d52c560a --- /dev/null +++ b/src/field/player_pc.c @@ -0,0 +1,1368 @@ +#include "global.h" +#include "player_pc.h" +#include "decoration.h" +#include "field_fadetransition.h" +#include "field_weather.h" +#include "item.h" +#include "item_menu.h" +#include "items.h" +#include "main.h" +#include "menu.h" +#include "menu_helpers.h" +#include "palette.h" +#include "script.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "songs.h" +#include "name_string_util.h" +#include "mail.h" +#include "rom4.h" +#include "player_pc.h" + +extern void DisplayItemMessageOnField(u8, const u8*, TaskFunc, u16); +extern void DoPlayerPCDecoration(u8); +extern void BuyMenuFreeMemory(void); +extern void DestroyVerticalScrollIndicator(u8); +extern void PauseVerticalScrollIndicator(u8); +extern void LoadScrollIndicatorPalette(void); +extern void ClearMailStruct(struct MailStruct *); +extern u8 sub_807D770(void); +extern void sub_808B020(void); +extern void sub_80F944C(void); + +static EWRAM_DATA u8 *gPcItemMenuOptionOrder = NULL; + +static u8 gPcItemMenuOptionsNum; + +extern u8 gUnknown_02038561; + +// event scripts +extern u8 gBrendanHouse_TurnPCOff[]; +extern u8 gMayHouse_TurnPCOff[]; + +extern void (*gFieldCallback)(void); + +static void InitPlayerPCMenu(u8 taskId); +static void PlayerPCProcessMenuInput(u8 taskId); +static void InitItemStorageMenu(u8); +static void ItemStorageMenuPrint(const u8 *); +static void ItemStorageMenuProcessInput(u8); +static void ItemStorage_ProcessInput(u8); +static void ItemStorage_SetItemAndMailCount(u8); +static void ItemStorage_DoItemAction(u8); +static void ItemStorage_GoBackToPlayerPCMenu(u8); +static void ItemStorage_HandleQuantityRolling(u8); +static void ItemStorage_DoItemWithdraw(u8); +static void ItemStorage_DoItemToss(u8); +static void ItemStorage_HandleRemoveItem(u8); +static void ItemStorage_WaitPressHandleResumeProcessInput(u8); +static void ItemStorage_HandleResumeProcessInput(u8); +static void ItemStorage_DoItemSwap(u8, bool8); +static void ItemStorage_DrawItemList(u8); +static void ItemStorage_PrintItemPcResponse(u16); +static void ItemStorage_DrawBothListAndDescription(u8); +static void ItemStorage_GoBackToItemPCMenu(u8, u8); +static void ItemStorage_LoadPalette(void); +static u8 GetMailboxMailCount(void); +static void Mailbox_UpdateMailList(void); +static void Mailbox_DrawMailboxMenu(u8); +static void Mailbox_ProcessInput(u8); +static void Mailbox_CloseScrollIndicators(void); +static void Mailbox_PrintWhatToDoWithPlayerMailText(u8); +static void Mailbox_TurnOff(u8); +static void Mailbox_PrintMailOptions(u8); +static void Mailbox_MailOptionsProcessInput(u8); +static void Mailbox_FadeAndReadMail(u8); +static void Mailbox_ReturnToFieldFromReadMail(void); +static void Mailbox_DrawYesNoBeforeMove(u8); +static void Mailbox_DoGiveMailPokeMenu(u8); +static void Mailbox_NoPokemonForMail(u8); +static void Mailbox_Cancel(u8); +static void Mailbox_DrawMailMenuAndDoProcessInput(u8); +static void PlayerPC_ItemStorage(u8 taskId); +static void PlayerPC_Mailbox(u8 taskId); +static void PlayerPC_Decoration(u8 var); +static void PlayerPC_TurnOff(u8 taskId); +static void ItemStorage_Withdraw(u8); +static void ItemStorage_Deposit(u8); +static void ItemStorage_Toss(u8); +static void ItemStorage_Exit(u8); +static void ItemStorage_ResumeInputFromYesToss(u8); +static void ItemStorage_ResumeInputFromNoToss(u8); +static void Mailbox_DoMailMoveToBag(u8); +static void Mailbox_ReturnToInputAfterNo(u8); +static void Mailbox_DoMailRead(u8); +static void Mailbox_MoveToBag(u8); +static void Mailbox_Give(u8); +static void Mailbox_Cancel(u8); + +static const u8 *const gPCText_OptionDescList[] = +{ + PCText_TakeOutItems, + PCText_StoreItems, + PCText_ThrowAwayItems, + gMenuText_GoBackToPrev +}; + +static const struct MenuAction2 gPCText_PlayerPCOptionsText[] = +{ + { SecretBaseText_ItemStorage, PlayerPC_ItemStorage }, + { gPCText_Mailbox, PlayerPC_Mailbox }, + { SecretBaseText_Decoration, PlayerPC_Decoration }, + { SecretBaseText_TurnOff, PlayerPC_TurnOff } +}; + +static const u8 gBedroomPC_OptionOrder[] = +{ + PLAYERPC_MENU_ITEMSTORAGE, + PLAYERPC_MENU_MAILBOX, + PLAYERPC_MENU_DECORATION, + PLAYERPC_MENU_TURNOFF +}; + +static const u8 gPlayerPC_OptionOrder[] = +{ + PLAYERPC_MENU_ITEMSTORAGE, + PLAYERPC_MENU_MAILBOX, + PLAYERPC_MENU_TURNOFF +}; + +static const struct MenuAction2 gPCText_ItemPCOptionsText[] = +{ + { PCText_WithdrawItem, ItemStorage_Withdraw }, + { PCText_DepositItem, ItemStorage_Deposit }, + { PCText_TossItem, ItemStorage_Toss }, + { gUnknownText_Exit, ItemStorage_Exit } +}; + +static const struct YesNoFuncTable ResumeFromTossYesNoFuncList[] = // ResumeFromTossYesNoFuncList +{ + ItemStorage_ResumeInputFromYesToss, + ItemStorage_ResumeInputFromNoToss +}; + +static const struct YesNoFuncTable ResumeFromWithdrawYesNoFuncList[] = // ResumeFromWithdrawYesNoFuncList +{ + Mailbox_DoMailMoveToBag, + Mailbox_ReturnToInputAfterNo +}; + +// the use of this struct is meant to be an ItemSlot struct, but NewGameInitPCItems refuses to match without a weird pointer access. +static const struct ItemSlot gNewGamePCItems[] = +{ + { ITEM_POTION, 1 }, + { ITEM_NONE, 0 } +}; + +static const struct MenuAction2 gMailboxMailOptions[] = +{ + { OtherText_Read, Mailbox_DoMailRead }, + { gOtherText_MoveToBag, Mailbox_MoveToBag }, + { OtherText_Give, Mailbox_Give }, + { gOtherText_CancelNoTerminator, Mailbox_Cancel } +}; + +static const u8 gNonSelectedItemFormattedText[] = _("{STR_VAR_1}{CLEAR_TO 80}"); +static const u8 gSelectedItemFormattedText[] = _("{COLOR RED}{STR_VAR_1}{CLEAR_TO 80}"); +static const u8 gNonSelectedItemQuantityFormatText[] = _("{STR_VAR_1}"); +static const u8 gSelectedItemQuantityFormatText[] = _("{COLOR RED}{STR_VAR_1}"); +static const u8 gUnknown_08406330[] = _("{CLEAR_TO 32}"); + +static const u16 gUnknown_08406334[3] = +{ + 0x5294, + 0x6B5A, + 0x7FFF +}; + +static const u8 gHighlightedMoveToBagFormatText[] = _("{COLOR RED}{STR_VAR_1}"); + +extern u8 *gUnknown_02039314; +extern struct MenuAction gUnknown_08406298[]; + +extern u8 gUnknown_084062B8[]; +extern u8 gUnknown_084062BC[]; +extern u8 gUnknown_0840632A[]; +extern u8 gUnknown_08406327[]; +extern u8 gUnknown_0840631E[]; +extern u8 gUnknown_08406318[]; + +extern u8 gUnknown_030007B4; +extern u8 unk_201FE00[]; + +extern u8 gUnknown_08152850; +extern u8 gUnknown_08152C75; + +extern u32 gUnknown_08406288[]; +extern const struct MenuAction gUnknown_084062C0[]; +extern const struct YesNoFuncTable gUnknown_084062E0; + +void NewGameInitPCItems(void) +{ + u8 i; + + // because Game Freak don't know how to use a struct or a 2d array + for(i = 0, ClearItemSlots(gSaveBlock1.pcItems, ARRAY_COUNT(gSaveBlock1.pcItems)); NEW_GAME_PC_ITEMS(i, ITEM_ID) && NEW_GAME_PC_ITEMS(i, QUANTITY) && + AddPCItem(NEW_GAME_PC_ITEMS(i, ITEM_ID), NEW_GAME_PC_ITEMS(i, QUANTITY)) == TRUE; i++) + ; +} + +void BedroomPC(void) +{ + gPcItemMenuOptionOrder = (u8 *)gBedroomPC_OptionOrder; + gPcItemMenuOptionsNum = 4; + DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gOtherText_WhatWillYouDo, InitPlayerPCMenu, 0); +} + +void PlayerPC(void) +{ + gPcItemMenuOptionOrder = (u8 *)gPlayerPC_OptionOrder; + gPcItemMenuOptionsNum = 3; + DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gOtherText_WhatWillYouDo, InitPlayerPCMenu, 0); +} + +static void InitPlayerPCMenu(u8 taskId) +{ + MenuDrawTextWindow(0, 0, 10, gPcItemMenuOptionsNum * 2 + 1); + PrintMenuItemsReordered(1, 1, gPcItemMenuOptionsNum, (struct MenuAction *)gPCText_PlayerPCOptionsText, gPcItemMenuOptionOrder); + InitMenu(0, 1, 1, gPcItemMenuOptionsNum, 0, 9); + TASK.FUNC = PlayerPCProcessMenuInput; +} + +static void PlayerPCProcessMenuInput(u8 taskId) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + MoveMenuCursor(1); + } + else if (gMain.newKeys & A_BUTTON) + { + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + gPCText_PlayerPCOptionsText[gPcItemMenuOptionOrder[GetMenuCursorPos()]].func(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + gPCText_PlayerPCOptionsText[gPcItemMenuOptionsNum[gPcItemMenuOptionOrder - 1]].func(taskId); // run EXIT. + } +} + +void ReshowPlayerPC(u8 var) +{ + DisplayItemMessageOnField(var, gOtherText_WhatWillYouDo, InitPlayerPCMenu, 0); +} + +static void PlayerPC_ItemStorage(u8 taskId) +{ + InitItemStorageMenu(ITEMPC_MENU_WITHDRAW); + TASK.FUNC = ItemStorageMenuProcessInput; +} + +static void PlayerPC_Mailbox(u8 taskId) +{ + MenuZeroFillWindowRect(0, 0, 10, 9); + gMailboxInfo.count = GetMailboxMailCount(); + + if (gMailboxInfo.count == 0) + DisplayItemMessageOnField(taskId, gOtherText_NoMailHere, ReshowPlayerPC, 0); + else + { + gMailboxInfo.cursorPos = 0; + gMailboxInfo.itemsAbove = 0; + Mailbox_UpdateMailList(); + ItemStorage_SetItemAndMailCount(taskId); + Mailbox_DrawMailboxMenu(taskId); + TASK.FUNC = Mailbox_ProcessInput; + } +} + +static void PlayerPC_Decoration(u8 var) +{ + MenuZeroFillWindowRect(0, 0, 10, 9); + DoPlayerPCDecoration(var); +} + +static void PlayerPC_TurnOff(u8 taskId) +{ + if (gPcItemMenuOptionsNum == 4) // if the option count is 4, we are at the bedroom PC and not player PC, so do gender specific handling. + { + MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); + + if (gSaveBlock2.playerGender == MALE) + ScriptContext1_SetupScript(gBrendanHouse_TurnPCOff); + else + ScriptContext1_SetupScript(gMayHouse_TurnPCOff); + } + else + { + MenuZeroFillWindowRect(0, 0, 10, 9); + EnableBothScriptContexts(); + } + DestroyTask(taskId); +} + +static void InitItemStorageMenu(u8 var) +{ + MenuZeroFillWindowRect(0, 0, 10, 9); + MenuDrawTextWindow(0, 0, 11, 9); + PrintMenuItems(1, 1, 4, (struct MenuAction *)gPCText_ItemPCOptionsText); + InitMenu(0, 1, 1, 4, var, 10); + ItemStorageMenuPrint(gPCText_OptionDescList[var]); +} + +static void ItemStorageMenuPrint(const u8 *textPtr) +{ + MenuFillWindowRectWithBlankTile(2, 15, 27, 18); + MenuPrint(textPtr, 2, 15); +} + +static void ItemStorageMenuProcessInput(u8 var) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + ItemStorageMenuPrint(gPCText_OptionDescList[GetMenuCursorPos()]); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + MoveMenuCursor(1); + ItemStorageMenuPrint(gPCText_OptionDescList[GetMenuCursorPos()]); + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gPCText_ItemPCOptionsText[GetMenuCursorPos()].func(var); + } + else if (gMain.newKeys & B_BUTTON) + { + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + gPCText_ItemPCOptionsText[ITEMPC_MENU_EXIT].func(var); + } +} + +static void Task_ItemStorage_Deposit(u8 taskId) +{ + if (!gPaletteFade.active) + { + sub_80A6A30(); + DestroyTask(taskId); + } +} + +static void ItemStorage_Deposit(u8 taskId) +{ + TASK.FUNC = Task_ItemStorage_Deposit; + fade_screen(1, 0); +} + +static void ItemStorage_HandleReturnToProcessInput(u8 taskId) +{ + if (sub_807D770() == TRUE) + TASK.FUNC = ItemStorageMenuProcessInput; +} + +void ItemStorage_ReturnToMenuAfterDeposit(void) +{ + MenuDisplayMessageBox(); + InitItemStorageMenu(ITEMPC_MENU_DEPOSIT); + CreateTask(ItemStorage_HandleReturnToProcessInput, 0); + pal_fill_black(); +} + +static void ItemStorage_Withdraw(u8 taskId) +{ + s16 *data = TASK.data; + + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 11, 9); + NUM_ITEMS = CountUsedPCItemSlots(); + + if (NUM_ITEMS != 0) + { + MenuZeroFillWindowRect(0, 14, 29, 19); + CURRENT_ITEM_STORAGE_MENU = ITEMPC_MENU_WITHDRAW; + PAGE_INDEX = 0; + ITEMS_ABOVE_TOP = 0; + ItemStorage_SetItemAndMailCount(taskId); + ItemStorage_GoBackToItemPCMenu(taskId, 0); + TASK.FUNC = ItemStorage_ProcessInput; + } + else + DisplayItemMessageOnField(taskId, gOtherText_NoItems, PlayerPC_ItemStorage, 0); +} + +static void ItemStorage_Toss(u8 taskId) +{ + s16 *data = TASK.data; + + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 11, 9); + NUM_ITEMS = CountUsedPCItemSlots(); + + if (NUM_ITEMS) + { + MenuZeroFillWindowRect(0, 14, 29, 19); + CURRENT_ITEM_STORAGE_MENU = ITEMPC_MENU_TOSS; + PAGE_INDEX = 0; + ITEMS_ABOVE_TOP = 0; + ItemStorage_SetItemAndMailCount(taskId); + ItemStorage_GoBackToItemPCMenu(taskId, 2); + TASK.FUNC = ItemStorage_ProcessInput; + } + else + DisplayItemMessageOnField(taskId, gOtherText_NoItems, PlayerPC_ItemStorage, 0); +} + +static void ItemStorage_Exit(u8 var) +{ + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 11, 9); + ReshowPlayerPC(var); +} + +static void ItemStorage_SetItemAndMailCount(u8 taskId) +{ + s16 *data = TASK.data; + + if (NUM_ITEMS > 7) // we have a full page, so set the num of page items appropriately. + NUM_PAGE_ITEMS = 8; + else + NUM_PAGE_ITEMS = NUM_ITEMS + 1; // there are not enough items to fill a full page; take the # of items and add 1 for the cancel button. + + if (gMailboxInfo.count > 7) + gMailboxInfo.pageItems = 8; + else + gMailboxInfo.pageItems = gMailboxInfo.count + 1; +} + +static void ItemStorage_ProcessInput(u8 taskId) +{ + s16 *data = TASK.data; + s16 trueIndex; + + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if(PAGE_INDEX != 0) // did the cursor move physically upwards? + { + PlaySE(SE_SELECT); + PAGE_INDEX = MoveMenuCursor(-1); + trueIndex = ITEMS_ABOVE_TOP + PAGE_INDEX; + if (SWITCH_MODE_ACTIVE == FALSE) // are we not currently switching items? + { + if (trueIndex == NUM_ITEMS) // if the cursor is on top of cancel, print the go back to prev description. + { + ItemStorage_PrintItemPcResponse(ITEMPC_GO_BACK_TO_PREV); + } + else + { + ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[trueIndex].itemId); + } + } + } + else // the page cursor is at the top. but we may not be at the top of the true index list, so do another check. + { + if (ITEMS_ABOVE_TOP == 0) // did the cursor not move due to being at the top of the list? + return; + + PlaySE(SE_SELECT); + ITEMS_ABOVE_TOP--; + ItemStorage_DrawBothListAndDescription(taskId); + + if (SWITCH_MODE_ACTIVE != FALSE) + MoveMenuCursor(0); // don't move the cursor. it's at the top of the page index, but not the true index. + } + } + else if(gMain.newAndRepeatedKeys & DPAD_DOWN) // _0813A306 + { + if(PAGE_INDEX != NUM_PAGE_ITEMS - 1) + { + PlaySE(SE_SELECT); + PAGE_INDEX = MoveMenuCursor(1); + trueIndex = ITEMS_ABOVE_TOP + PAGE_INDEX; + + if(SWITCH_MODE_ACTIVE != FALSE) + return; + + if (trueIndex == NUM_ITEMS) + ItemStorage_PrintItemPcResponse(ITEMPC_GO_BACK_TO_PREV); // probably further down + else + ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[trueIndex].itemId); + } + else if(ITEMS_ABOVE_TOP + PAGE_INDEX != NUM_ITEMS) + { + PlaySE(SE_SELECT); + ITEMS_ABOVE_TOP++; + ItemStorage_DrawBothListAndDescription(taskId); + + if (SWITCH_MODE_ACTIVE != FALSE) + MoveMenuCursor(0); + } + } + else if(gMain.newKeys & SELECT_BUTTON) // _0813A3A0 + { + if (SWITCH_MODE_ACTIVE == FALSE) + { + if (PAGE_INDEX + ITEMS_ABOVE_TOP != NUM_ITEMS) // you cannot swap the Cancel button. + { + PlaySE(SE_SELECT); + SWITCH_MODE_ACTIVE = TRUE; + SWAP_ITEM_INDEX = ITEMS_ABOVE_TOP + PAGE_INDEX; + ItemStorage_PrintItemPcResponse(ITEMPC_SWITCH_WHICH_ITEM); + } + // _0813A3DC + ItemStorage_DrawItemList(taskId); + } + else // _0813A3E8 + { + PlaySE(SE_SELECT); + ItemStorage_DoItemSwap(taskId, FALSE); + ItemStorage_DrawBothListAndDescription(taskId); + } + } + else if(gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if(SWITCH_MODE_ACTIVE == FALSE) + { + if(ITEMS_ABOVE_TOP + PAGE_INDEX != NUM_ITEMS) + { + ItemStorage_DoItemAction(taskId); + } + else + { + ItemStorage_GoBackToPlayerPCMenu(taskId); + } + } + else + { + ItemStorage_DoItemSwap(taskId, FALSE); + ItemStorage_DrawBothListAndDescription(taskId); + } + } + else if(gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + if(SWITCH_MODE_ACTIVE == FALSE) + { + HandleDestroyMenuCursors(); + ItemStorage_GoBackToPlayerPCMenu(taskId); + } + else + { + ItemStorage_DoItemSwap(taskId, TRUE); + ItemStorage_DrawBothListAndDescription(taskId); + } + } +} + +static void ItemStorage_GoBackToPlayerPCMenu(u8 taskId) +{ + BuyMenuFreeMemory(); + DestroyVerticalScrollIndicator(0); + DestroyVerticalScrollIndicator(1); + MenuZeroFillWindowRect(0, 0, 29, 19); + MenuDisplayMessageBox(); + InitItemStorageMenu(TASK.CURRENT_ITEM_STORAGE_MENU); + TASK.FUNC = ItemStorageMenuProcessInput; +} + +static void ItemStorage_DoItemAction(u8 taskId) +{ + s16 *data = TASK.data; + u8 trueIndex = PAGE_INDEX + ITEMS_ABOVE_TOP; + + PauseVerticalScrollIndicator(0); + PauseVerticalScrollIndicator(1); // PauseVerticalScrollIndicator + + if(CURRENT_ITEM_STORAGE_MENU == ITEMPC_MENU_WITHDRAW) + { + if(gSaveBlock1.pcItems[trueIndex].quantity == 1) + { + NUM_QUANTITY_ROLLER = 1; + ItemStorage_DoItemWithdraw(taskId); + return; + } + else // _0813A50C + { + ItemStorage_PrintItemPcResponse(ITEMPC_HOW_MANY_TO_WITHDRAW); + } + } + else if(gSaveBlock1.pcItems[trueIndex].quantity == 1) // _0813A518 + { + NUM_QUANTITY_ROLLER = 1; + ItemStorage_DoItemToss(taskId); + return; + } + else + { + ItemStorage_PrintItemPcResponse(ITEMPC_HOW_MANY_TO_TOSS); + } + NUM_QUANTITY_ROLLER = 1; + MenuDrawTextWindow(6, 8, 13, 11); + sub_80A418C(NUM_QUANTITY_ROLLER, STR_CONV_MODE_RIGHT_ALIGN, 8, 9, 3); + TASK.FUNC = ItemStorage_HandleQuantityRolling; +} + +static void ItemStorage_HandleQuantityRolling(u8 taskId) +{ + s16 *data = TASK.data; + u8 trueIndex = PAGE_INDEX + ITEMS_ABOVE_TOP; + + if(gMain.newAndRepeatedKeys & DPAD_UP) + { + if(NUM_QUANTITY_ROLLER != gSaveBlock1.pcItems[trueIndex].quantity) + NUM_QUANTITY_ROLLER++; + else + NUM_QUANTITY_ROLLER = 1; // you are at the max amount of items you have when you press Up, set your quantity back to 1. + + sub_80A418C(NUM_QUANTITY_ROLLER, STR_CONV_MODE_RIGHT_ALIGN, 8, 9, 3); // print quantity? + } + else if(gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if(NUM_QUANTITY_ROLLER != 1) + NUM_QUANTITY_ROLLER--; + else + NUM_QUANTITY_ROLLER = gSaveBlock1.pcItems[trueIndex].quantity; // you are at 0 when you press down, set your quantity to the amount you have. + + sub_80A418C(NUM_QUANTITY_ROLLER, STR_CONV_MODE_RIGHT_ALIGN, 8, 9, 3); // print quantity? + } + else if(gMain.newAndRepeatedKeys & DPAD_LEFT) // reduce by 10. + { + NUM_QUANTITY_ROLLER -= 10; + + if(NUM_QUANTITY_ROLLER <= 0) + NUM_QUANTITY_ROLLER = 1; // dont underflow or allow 0! + + sub_80A418C(NUM_QUANTITY_ROLLER, STR_CONV_MODE_RIGHT_ALIGN, 8, 9, 3); // print quantity? + } + else if(gMain.newAndRepeatedKeys & DPAD_RIGHT) // add 10. + { + NUM_QUANTITY_ROLLER += 10; + + if(NUM_QUANTITY_ROLLER > gSaveBlock1.pcItems[trueIndex].quantity) + NUM_QUANTITY_ROLLER = gSaveBlock1.pcItems[trueIndex].quantity; // dont overflow! + + sub_80A418C(NUM_QUANTITY_ROLLER, STR_CONV_MODE_RIGHT_ALIGN, 8, 9, 3); // print quantity? + } + else if(gMain.newKeys & A_BUTTON) // confirm quantity. + { + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(6, 6, 0xD, 0xB); + + if(CURRENT_ITEM_STORAGE_MENU == ITEMPC_MENU_WITHDRAW) + ItemStorage_DoItemWithdraw(taskId); + else + ItemStorage_DoItemToss(taskId); + } + else if(gMain.newKeys & B_BUTTON) // cancel quantity. + { + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(6, 6, 0xD, 0xB); + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[ITEMS_ABOVE_TOP + PAGE_INDEX].itemId); // why not use trueIndex? + TASK.FUNC = ItemStorage_ProcessInput; + } +} + +static void ItemStorage_DoItemWithdraw(u8 taskId) +{ + s16 *data = TASK.data; + u8 trueIndex = PAGE_INDEX + ITEMS_ABOVE_TOP; + + if(AddBagItem(gSaveBlock1.pcItems[trueIndex].itemId, NUM_QUANTITY_ROLLER) == TRUE) // add item works. + { + CopyItemName(gSaveBlock1.pcItems[trueIndex].itemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, NUM_QUANTITY_ROLLER, 0, 3); + ItemStorage_PrintItemPcResponse(ITEMPC_WITHDREW_THING); + TASK.FUNC = ItemStorage_HandleRemoveItem; + } + else + { + NUM_QUANTITY_ROLLER = 0; + ItemStorage_PrintItemPcResponse(ITEMPC_NO_MORE_ROOM); + TASK.FUNC = ItemStorage_WaitPressHandleResumeProcessInput; + } +} + +static void ItemStorage_DoItemToss(u8 taskId) +{ + s16 *data = TASK.data; + u8 var = PAGE_INDEX + ITEMS_ABOVE_TOP; + + if(ItemId_GetImportance(gSaveBlock1.pcItems[var].itemId) == FALSE) + { + CopyItemName(gSaveBlock1.pcItems[var].itemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, NUM_QUANTITY_ROLLER, 0, 3); + ItemStorage_PrintItemPcResponse(ITEMPC_OKAY_TO_THROW_AWAY); + DisplayYesNoMenu(7, 6, 1); + DoYesNoFuncWithChoice(taskId, (struct YesNoFuncTable *)&ResumeFromTossYesNoFuncList); + } + else + { + NUM_QUANTITY_ROLLER = 0; + ItemStorage_PrintItemPcResponse(ITEMPC_TOO_IMPORTANT); + TASK.FUNC = ItemStorage_HandleRemoveItem; + } +} + +static void ItemStorage_ResumeInputFromYesToss(u8 taskId) +{ + MenuZeroFillWindowRect(0x6, 0x6, 0xD, 0xB); + ItemStorage_PrintItemPcResponse(ITEMPC_THREW_AWAY_ITEM); + TASK.FUNC = ItemStorage_HandleRemoveItem; +} + +static void ItemStorage_ResumeInputFromNoToss(u8 taskId) +{ + s16 *data = TASK.data; + + MenuZeroFillWindowRect(0x6, 0x6, 0xD, 0xB); + InitMenu(0, 16, 2, NUM_PAGE_ITEMS, PAGE_INDEX, 0xD); + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[ITEMS_ABOVE_TOP + PAGE_INDEX].itemId); + TASK.FUNC = ItemStorage_ProcessInput; +} + +static void ItemStorage_HandleRemoveItem(u8 taskId) +{ + s16 *data = TASK.data; + s16 oldNumItems; + + if(gMain.newKeys & A_BUTTON || gMain.newKeys == B_BUTTON) + { + RemovePCItem(PAGE_INDEX + ITEMS_ABOVE_TOP, NUM_QUANTITY_ROLLER); + oldNumItems = NUM_ITEMS; + NUM_ITEMS = CountUsedPCItemSlots(); + + if(oldNumItems != NUM_ITEMS && oldNumItems < NUM_PAGE_ITEMS + ITEMS_ABOVE_TOP && ITEMS_ABOVE_TOP != 0) + ITEMS_ABOVE_TOP--; + + ItemStorage_SetItemAndMailCount(taskId); + ItemStorage_HandleResumeProcessInput(taskId); + InitMenu(0, 16, 2, NUM_PAGE_ITEMS, PAGE_INDEX, 0xD); + } +} + +static void ItemStorage_WaitPressHandleResumeProcessInput(u8 taskId) +{ + s16 *data = TASK.data; + + if(gMain.newKeys & A_BUTTON || gMain.newKeys == B_BUTTON) + { + ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[ITEMS_ABOVE_TOP + PAGE_INDEX].itemId); + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + TASK.FUNC = ItemStorage_ProcessInput; + } +} + +static void ItemStorage_HandleResumeProcessInput(u8 taskId) +{ + MenuZeroFillWindowRect(0x6, 0x6, 0xD, 0xB); + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + ItemStorage_DrawBothListAndDescription(taskId); + TASK.FUNC = ItemStorage_ProcessInput; +} + +static void ItemStorage_DoItemSwap(u8 taskId, bool8 switchModeDisabled) +{ + s16 *data = TASK.data; + u8 trueIndex = ITEMS_ABOVE_TOP + PAGE_INDEX; + + SWITCH_MODE_ACTIVE = FALSE; + + if((u8)NUM_ITEMS > trueIndex && (u8)SWAP_ITEM_INDEX != trueIndex && switchModeDisabled == FALSE) + { + struct ItemSlot itemSlot = gSaveBlock1.pcItems[SWAP_ITEM_INDEX]; // backup the itemSlot before swapping the two. + + gSaveBlock1.pcItems[SWAP_ITEM_INDEX] = gSaveBlock1.pcItems[trueIndex]; + gSaveBlock1.pcItems[trueIndex] = itemSlot; + return; + } + else if(trueIndex == NUM_ITEMS) + { + ItemStorage_PrintItemPcResponse(ITEMPC_GO_BACK_TO_PREV); + } + else + { + ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[trueIndex].itemId); + } + + /* + THEORY: This check produces essentially dead code, but it might have been working in an earlier build + in which case it allows a programmer to easily duplicate items without the use of a debug menu. + This gets the page index of the swap index for some reason. It is currently unknown what it would have been used + for, but perhaps it was used to increase the quantity of the item without a debug menu. + With the removal of a lot of the debug menus close to release, a programmer may have added this to + help test things with a low key (such as planting a lot of duplicated berries, which requires this lazy "cheat") + without bringing the relevent debug menus back. The commented out line is intentionally left in below to show + what it may have looked like. + */ + if(SWAP_ITEM_INDEX - ITEMS_ABOVE_TOP <= 0) { // this check is arbitrary and used to generate the correct assembly using the subtraction, which is what matters. the 0 check doesn't. + //gSaveBlock1.pcItems[SWAP_ITEM_INDEX].quantity += 100; + gSaveBlock1.pcItems[SWAP_ITEM_INDEX].quantity += 0; // do not enforce item cap. + } +} + +static void ItemStorage_DrawItemQuantity(u16 arg1, enum StringConvertMode arg2, u8 arg3, u8 arg4, int isSwapSelected) +{ + sub_80A4164(gStringVar1, arg1, arg2, arg4); + + if(isSwapSelected != FALSE) + MenuPrint(gSelectedItemQuantityFormatText, 0x1A, arg3); + else + MenuPrint(gNonSelectedItemQuantityFormatText, 0x1A, arg3); +} + +static void ItemStorage_DrawItemVoidQuantity(u8 var) +{ + MenuPrint(gUnknown_08406330, 0x19, var); +} + +static void ItemStorage_DrawItemName(struct ItemSlot *itemSlot, u8 var, int isSwapSelected) +{ + CopyItemName(itemSlot->itemId, gStringVar1); + + if(isSwapSelected != FALSE) + MenuPrint(gSelectedItemFormattedText, 16, var); + else + MenuPrint(gNonSelectedItemFormattedText, 16, var); +} + +static void ItemStorage_DrawNormalItemEntry(struct ItemSlot *itemSlot, u8 var, int var2) +{ + ItemStorage_DrawItemName(itemSlot, var, var2); + ItemStorage_DrawItemQuantity(itemSlot->quantity, STR_CONV_MODE_RIGHT_ALIGN, var, 3, var2); +} + +static void ItemStorage_DrawKeyItemEntry(struct ItemSlot *itemSlot, u8 var, int var2) +{ + ItemStorage_DrawItemName(itemSlot, var, var2); + ItemStorage_DrawItemVoidQuantity(var); +} + +static void ItemStorage_DrawTMHMEntry(struct ItemSlot *itemSlot, u8 var, int var2) +{ + ItemStorage_DrawItemName(itemSlot, var, var2); + + if(itemSlot->itemId < ITEM_HM01) + ItemStorage_DrawItemQuantity(itemSlot->quantity, STR_CONV_MODE_RIGHT_ALIGN, var, 3, var2); + else + ItemStorage_DrawItemVoidQuantity(var); // HMs do not have a quantity. +} + +static void ItemStorage_DrawItemList(u8 taskId) +{ + s16 *data = TASK.data; + int tempArg; + u16 i; + u16 yCoord = 0; + + // r5 is i and is unsigned 16-bit. + + for(i = ITEMS_ABOVE_TOP; i < ITEMS_ABOVE_TOP + NUM_PAGE_ITEMS; i++) + { + yCoord = (i - ITEMS_ABOVE_TOP) * 2; + + if(i != NUM_ITEMS) + { + tempArg = 0; + + if(SWITCH_MODE_ACTIVE != FALSE && i == SWAP_ITEM_INDEX) + tempArg = 1; + + switch(GetPocketByItemId(gSaveBlock1.pcItems[i].itemId) - 1) + { + case 0: + case 1: + case 3: + ItemStorage_DrawNormalItemEntry((struct ItemSlot *)&gSaveBlock1.pcItems[i], yCoord + 2, tempArg); + break; + case 4: + ItemStorage_DrawKeyItemEntry((struct ItemSlot *)&gSaveBlock1.pcItems[i], yCoord + 2, tempArg); + break; + case 2: + ItemStorage_DrawTMHMEntry((struct ItemSlot *)&gSaveBlock1.pcItems[i], yCoord + 2, tempArg); + break; + } + } + else + { + goto weirdCase; // what??? + } + } + +beforeLabel: + if(i - ITEMS_ABOVE_TOP < 8) + MenuFillWindowRectWithBlankTile(16, yCoord + 4, 0x1C, 0x12); + + switch(ITEMS_ABOVE_TOP) + { + default: + CreateVerticalScrollIndicators(0, 0xB8, 8); + break; +weirdCase: + sub_8072A18(gOtherText_CancelNoTerminator, 0x80, (yCoord + 2) * 8, 0x68, 1); + goto beforeLabel; + case 0: + DestroyVerticalScrollIndicator(0); + break; + } + + if(ITEMS_ABOVE_TOP + NUM_PAGE_ITEMS <= NUM_ITEMS) + CreateVerticalScrollIndicators(1, 0xB8, 0x98); + else + DestroyVerticalScrollIndicator(1); +} + +static void ItemStorage_PrintItemPcResponse(u16 itemId) +{ + const u8 *string; + + switch(itemId) + { + case ITEMPC_GO_BACK_TO_PREV: + string = gMenuText_GoBackToPrev; + break; + case ITEMPC_HOW_MANY_TO_WITHDRAW: + string = gOtherText_HowManyToWithdraw; + break; + case ITEMPC_WITHDREW_THING: + string = gOtherText_WithdrewThing; + break; + case ITEMPC_HOW_MANY_TO_TOSS: + string = gOtherText_HowManyToToss; + break; + case ITEMPC_THREW_AWAY_ITEM: + string = gOtherText_ThrewAwayItem; + break; + case ITEMPC_NO_MORE_ROOM: + string = gOtherText_NoMoreRoom; + break; + case ITEMPC_TOO_IMPORTANT: + string = gOtherText_TooImportant; + break; + case ITEMPC_OKAY_TO_THROW_AWAY: + string = gOtherText_OkayToThrowAwayPrompt; + break; + case ITEMPC_SWITCH_WHICH_ITEM: + string = gOtherText_SwitchWhichItem; + break; + default: + string = ItemId_GetDescription(itemId); + break; + } + + sub_8072AB0(string, 8, 0x68, 0x68, 0x30, 1); +} + +static void ItemStorage_DrawBothListAndDescription(u8 taskId) +{ + s16 *data = TASK.data; + s16 trueIndex = ITEMS_ABOVE_TOP + PAGE_INDEX; + + ItemStorage_DrawItemList(taskId); + + if(SWITCH_MODE_ACTIVE == FALSE) + { + if(trueIndex == NUM_ITEMS) + ItemStorage_PrintItemPcResponse(ITEMPC_GO_BACK_TO_PREV); + else + ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[trueIndex].itemId); + } +} + +static void ItemStorage_GoBackToItemPCMenu(u8 taskId, u8 var) +{ + s16 *data = TASK.data; + + sub_80F944C(); + LoadScrollIndicatorPalette(); + ItemStorage_LoadPalette(); + MenuDrawTextWindow(0xF, 0, 0x1D, 0x13); + MenuDrawTextWindow(0, 0xC, 0xE, 0x13); + MenuDrawTextWindow(0, 0, 0xB, 3); + ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[0].itemId); + MenuPrint(gPCText_ItemPCOptionsText[var].text, 1, 1); + ItemStorage_DrawItemList(taskId); + InitMenu(0, 0x10, 2, NUM_PAGE_ITEMS, PAGE_INDEX, 0xD); +} + +static void ItemStorage_LoadPalette(void) +{ + u16 arr[3]; + + memcpy(arr, gUnknown_08406334, sizeof(arr)); + LoadPalette(&arr[2], 0xDF, 2); + LoadPalette(&arr[1], 0xD1, 2); + LoadPalette(&arr[0], 0xD8, 2); +} + +static u8 GetMailboxMailCount(void) +{ + u8 i, j; + + for(i = 0, j = 6; j < 16; j++) + if(gSaveBlock1.mail[j].itemId != 0) + i++; + + return i; +} + +static void Mailbox_UpdateMailList(void) +{ + struct MailStruct mailBuffer; + u8 i, j; + + for (i=6; i<15; i++) + { + for (j=i+1; j<16; j++) + { + if (gSaveBlock1.mail[i].itemId == 0) + { + mailBuffer = gSaveBlock1.mail[i]; + gSaveBlock1.mail[i] = gSaveBlock1.mail[j]; + gSaveBlock1.mail[j] = mailBuffer; + } + } + } +} + +// WWHHHHHYYYYYYYY SOMEBODY PLEASE FIX THIS +static void Mailbox_DrawMailList(u8 taskId) // taskId is unused +{ + u16 yCoord = 0; + u16 i = gMailboxInfo.itemsAbove; + register struct MailboxStruct *tempMailbox asm("r1") = &gMailboxInfo; + register struct MailboxStruct *mailbox asm("r6"); + + if(i < i + tempMailbox->pageItems) + { + mailbox = tempMailbox; + goto forJump; + for(; i < mailbox->itemsAbove + mailbox->pageItems; i++) + { + forJump: + yCoord = (i - mailbox->itemsAbove) * 2; + MenuFillWindowRectWithBlankTile(0x15, yCoord + 2, 0x1C, yCoord + 3); + + if(i != mailbox->count) + { + StringCopy(gStringVar1, (u8 *)gSaveBlock1.mail[i + 6].playerName); + SanitizeNameString(gStringVar1); + MenuPrint(gStringVar1, 0x15, yCoord + 2); + } + else + { + goto weirdCase; // again, what??? + } + } + } + +beforeLabel: + if(i - gMailboxInfo.itemsAbove != 8) + MenuFillWindowRectWithBlankTile(0x15, yCoord + 4, 0x1C, 0x12); + + switch(gMailboxInfo.itemsAbove) + { + default: + CreateVerticalScrollIndicators(0, 0xC8, 8); + break; +weirdCase: + MenuPrint(gOtherText_CancelNoTerminator, 0x15, yCoord + 2); + goto beforeLabel; + case 0: + DestroyVerticalScrollIndicator(0); + break; + } + + if(gMailboxInfo.itemsAbove + gMailboxInfo.pageItems <= gMailboxInfo.count) + CreateVerticalScrollIndicators(1, 0xC8, 0x98); + else + DestroyVerticalScrollIndicator(1); +} + +static void Mailbox_DrawMailboxMenu(u8 taskId) +{ + sub_80F944C(); + LoadScrollIndicatorPalette(); + MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); + MenuDrawTextWindow(0, 0, 0x8, 0x3); + MenuPrint(gPCText_Mailbox, 1, 1); + MenuDrawTextWindow(0x14, 0, 0x1D, 0x13); + Mailbox_DrawMailList(taskId); + InitMenu(0, 0x15, 2, gMailboxInfo.pageItems, gMailboxInfo.cursorPos, 8); +} + +// Mailbox_ProcessInput +static void Mailbox_ProcessInput(u8 taskId) +{ + if(!gPaletteFade.active) + { + if(gMain.newAndRepeatedKeys & DPAD_UP) + { + if(gMailboxInfo.cursorPos != 0) + { + PlaySE(SE_SELECT); + gMailboxInfo.cursorPos = MoveMenuCursor(-1); + } + else if(gMailboxInfo.itemsAbove != 0) + { + PlaySE(SE_SELECT); + gMailboxInfo.itemsAbove--; + Mailbox_DrawMailList(taskId); + } + } + else if(gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if(gMailboxInfo.cursorPos != gMailboxInfo.pageItems - 1) + { + PlaySE(SE_SELECT); + gMailboxInfo.cursorPos = MoveMenuCursor(1); + } + else if(gMailboxInfo.itemsAbove + gMailboxInfo.cursorPos != gMailboxInfo.count) + { + PlaySE(SE_SELECT); + gMailboxInfo.itemsAbove++; + Mailbox_DrawMailList(taskId); + } + } + else if(gMain.newKeys & A_BUTTON) + { + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + + if(gMailboxInfo.itemsAbove + gMailboxInfo.cursorPos == gMailboxInfo.count) + { + Mailbox_TurnOff(taskId); + } + else + { + Mailbox_CloseScrollIndicators(); + TASK.FUNC = Mailbox_PrintWhatToDoWithPlayerMailText; + } + } + else if(gMain.newKeys & B_BUTTON) + { + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + Mailbox_TurnOff(taskId); + } + } +} + +static void Mailbox_CloseScrollIndicators(void) +{ + BuyMenuFreeMemory(); + DestroyVerticalScrollIndicator(0); + DestroyVerticalScrollIndicator(1); +} + +static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId) +{ + MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); + StringCopy(gStringVar1, gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos].playerName); + SanitizeNameString(gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_WhatWillYouDoMail); + DisplayItemMessageOnField(taskId, gStringVar4, Mailbox_PrintMailOptions, 0); +} + +static void Mailbox_ReturnToPlayerPC(u8 taskId) +{ + MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); + ReshowPlayerPC(taskId); +} + +static void Mailbox_TurnOff(u8 taskId) +{ + Mailbox_CloseScrollIndicators(); + TASK.FUNC = Mailbox_ReturnToPlayerPC; +} + +static void Mailbox_PrintMailOptions(u8 taskId) // Mailbox_PrintMailOptions +{ + MenuDrawTextWindow(0, 0, 0xC, 0x9); + PrintMenuItems(1, 1, 4, (struct MenuAction *)gMailboxMailOptions); + InitMenu(0, 1, 1, 4, 0, 0xB); + TASK.FUNC = Mailbox_MailOptionsProcessInput; +} + +static void Mailbox_MailOptionsProcessInput(u8 taskId) +{ + if(gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + } + else if(gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + MoveMenuCursor(1); + } + else if(gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gMailboxMailOptions[GetMenuCursorPos()].func(taskId); + } + else if(gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + Mailbox_Cancel(taskId); + } +} + +static void Mailbox_DoMailRead(u8 taskId) +{ + fade_screen(1, 0); + TASK.FUNC = Mailbox_FadeAndReadMail; +} + +static void Mailbox_FadeAndReadMail(u8 taskId) +{ + if(!gPaletteFade.active) + { + HandleReadMail(&gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos], Mailbox_ReturnToFieldFromReadMail, 1); + DestroyTask(taskId); + } +} + +static void Mailbox_HandleReturnToProcessInput(u8 taskId) // Mailbox_HandleReturnToProcessInput +{ + if(sub_807D770() == TRUE) // is black fade finished? why not gPaletteFade.active? + TASK.FUNC = Mailbox_ProcessInput; +} + +static void Mailbox_DoRedrawMailboxMenuAfterReturn(void) +{ + Mailbox_DrawMailboxMenu(CreateTask(Mailbox_HandleReturnToProcessInput, 0)); + pal_fill_black(); +} + +static void Mailbox_ReturnToFieldFromReadMail(void) +{ + gFieldCallback = Mailbox_DoRedrawMailboxMenuAfterReturn; + SetMainCallback2(c2_exit_to_overworld_2_switch); +} + +static void Mailbox_MoveToBag(u8 taskId) +{ + HandleDestroyMenuCursors(); + StringCopy(gStringVar1, gOtherText_MoveToBag); + MenuPrint(gHighlightedMoveToBagFormatText, 1, 3); // gHighlightedMoveToBagFormatText + DisplayItemMessageOnField(taskId, gOtherText_MessageWillBeLost, Mailbox_DrawYesNoBeforeMove, 0); +} + +static void Mailbox_DrawYesNoBeforeMove(u8 taskId) +{ + DisplayYesNoMenu(0x14, 0x8, 0x1); + DoYesNoFuncWithChoice(taskId, (struct YesNoFuncTable *)&ResumeFromWithdrawYesNoFuncList); +} + +static void Mailbox_DoMailMoveToBag(u8 taskId) +{ + struct MailStruct *mail = &gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos]; + + MenuZeroFillWindowRect(0x14, 8, 0x1A, 0xD); + + if(AddBagItem(mail->itemId, 1) == FALSE) + { + DisplayItemMessageOnField(taskId, gOtherText_BagIsFull, Mailbox_DrawMailMenuAndDoProcessInput, 0); + } + else + { + DisplayItemMessageOnField(taskId, gOtherText_MailWasReturned, Mailbox_DrawMailMenuAndDoProcessInput, 0); + ClearMailStruct(mail); + Mailbox_UpdateMailList(); + + gMailboxInfo.count--; + + if(gMailboxInfo.count < gMailboxInfo.pageItems + gMailboxInfo.itemsAbove && gMailboxInfo.itemsAbove != 0) + gMailboxInfo.itemsAbove--; + + ItemStorage_SetItemAndMailCount(taskId); + } +} + +static void Mailbox_ReturnToInputAfterNo(u8 taskId) // Mailbox_ReturnToInputAfterNo +{ + MenuZeroFillWindowRect(0x14, 0x8, 0x1A, 0xD); + Mailbox_DrawMailMenuAndDoProcessInput(taskId); +} + +static void Mailbox_Give(u8 taskId) +{ + if(CalculatePlayerPartyCount() == 0) + Mailbox_NoPokemonForMail(taskId); // cannot be reached normally + else + { + fade_screen(1, 0); + TASK.FUNC = Mailbox_DoGiveMailPokeMenu; + } +} + +static void Mailbox_DoGiveMailPokeMenu(u8 taskId) // Mailbox_DoGiveMailPokeMenu +{ + if(!gPaletteFade.active) + { + SetMainCallback2(sub_808B020); + gUnknown_02038561 = 3; + DestroyTask(taskId); + } +} + +static void Mailbox_UpdateMailListAfterDeposit(void) +{ + u8 taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0); + u8 oldCount = gMailboxInfo.count; + + gMailboxInfo.count = GetMailboxMailCount(); + Mailbox_UpdateMailList(); + + if(oldCount != gMailboxInfo.count && gMailboxInfo.count < gMailboxInfo.pageItems + gMailboxInfo.itemsAbove && gMailboxInfo.itemsAbove != 0) // did the count update? + gMailboxInfo.itemsAbove--; + + ItemStorage_SetItemAndMailCount(taskId); + Mailbox_DrawMailboxMenu(taskId); + pal_fill_black(); +} + +void Mailbox_ReturnToMailListAfterDeposit(void) +{ + gFieldCallback = Mailbox_UpdateMailListAfterDeposit; + SetMainCallback2(c2_exit_to_overworld_2_switch); +} + +// you always have at least 1 POKeMON and you cannot receive mail before you leave Littleroot: therefore this function cannot be reached normally. +static void Mailbox_NoPokemonForMail(u8 taskId) +{ + DisplayItemMessageOnField(taskId, gOtherText_NoPokemon, Mailbox_DrawMailMenuAndDoProcessInput, 0); +} + +static void Mailbox_Cancel(u8 taskId) +{ + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 0xC, 0x9); + Mailbox_DrawMailMenuAndDoProcessInput(taskId); +} + +static void Mailbox_DrawMailMenuAndDoProcessInput(u8 taskId) +{ + Mailbox_DrawMailboxMenu(taskId); + TASK.FUNC = Mailbox_ProcessInput; +} diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c new file mode 100644 index 000000000..775280f6e --- /dev/null +++ b/src/field/pokeblock.c @@ -0,0 +1,1134 @@ +// +// Created by scott on 6/27/2017. +// + +#include "global.h" +#include "rom4.h" +#include "sprite.h" +#include "script.h" +#include "strings.h" +#include "task.h" +#include "unknown_task.h" +#include "text.h" +#include "main.h" +#include "menu.h" +#include "field_fadetransition.h" +#include "palette.h" +#include "graphics.h" +#include "decompress.h" +#include "menu_helpers.h" +#include "battle.h" +#include "item_menu.h" +#include "item_use.h" +#include "item.h" +#include "items.h" +#include "sound.h" +#include "songs.h" +#include "safari_zone.h" +#include "use_pokeblock.h" +#include "event_data.h" +#include "pokeblock.h" + +struct UnkPokeblockStruct +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; +}; + +extern u8 ewram[]; + + +static EWRAM_DATA u8 gUnknown_02039244 = 0; +static EWRAM_DATA struct UnkPokeblockStruct gUnknown_02039248 = {0}; +static EWRAM_DATA u8 gUnknown_0203924C = 0; + +// function declarations + +// gUnknown_083F7EF4 +static void sub_810C508(u8); +static void sub_810C5C0(u8); +static void sub_810C748(u8); +static void sub_810C788(u8); +static void sub_810C854(u8); + +// gUnknown_083F7F24 +static void sub_810C610(u8); +static void sub_810C668(u8); + +// sub_810B6C0 +static bool8 sub_810B998(void); +static void sub_810BC98(void); +static void sub_810BD08(void); +static void sub_810BB0C(void); +static void sub_810BB30(void); +static void sub_810BC84(u8); + +// sub_810B96C +static void sub_810BF7C(u8); + +// sub_810BC84 +static void sub_810BDAC(bool8); + +// sub_810BF38 +static void sub_810C8D4(struct Sprite *); + +// sub_810BF7C +static void sub_810C0C8(u8); +static void sub_810C31C(u8); +static void sub_810C368(u8); + +// sub_810C0C8 +static void sub_810C1C8(u8, u8); +static void sub_810C23C(u8); + +// sub_810C368 +static void sub_810C40C(u8); + +// sub_810C540 +static void sub_810C5EC(u8); + +// sub_810C610 +static void sub_810C704(u8); + +static const u8 *gUnknown_03000758; + +// rodata + +#define GFX_TAG_POKEBLOCK_CASE 14800 + +const s8 gPokeblockFlavorCompatibilityTable[] = { + // Cool, Beauty, Cute, Smart, Tough + 0, 0, 0, 0, 0, // Hardy + 1, 0, 0, 0, -1, // Lonely + 1, 0, -1, 0, 0, // Brave + 1, -1, 0, 0, 0, // Adamant + 1, 0, 0, -1, 0, // Naughty + -1, 0, 0, 0, 1, // Bold + 0, 0, 0, 0, 0, // Docile + 0, 0, -1, 0, 1, // Relaxed + 0, -1, 0, 0, 1, // Impish + 0, 0, 0, -1, 1, // Lax + -1, 0, 1, 0, 0, // Timid + 0, 0, 1, 0, -1, // Hasty + 0, 0, 0, 0, 0, // Serious + 0, -1, 1, 0, 0, // Jolly + 0, 0, 1, -1, 0, // Naive + -1, 1, 0, 0, 0, // Modest + 0, 1, 0, 0, -1, // Mild + 0, 1, -1, 0, 0, // Quiet + 0, 0, 0, 0, 0, // Bashful + 0, 1, 0, -1, 0, // Rash + -1, 0, 0, 1, 0, // Calm + 0, 0, 0, 1, -1, // Gentle + 0, 0, -1, 1, 0, // Sassy + 0, -1, 0, 1, 0, // Careful + 0, 0, 0, 0, 0 // Quirky +}; + +void (*const gUnknown_083F7EA8[])(void) = { + sub_80A5B40, + c2_exit_to_overworld_2_switch, + sub_802E424, + c2_exit_to_overworld_2_switch +}; + +const u8 *const gPokeblockNames[] = { + NULL, + ContestStatsText_RedPokeBlock, + ContestStatsText_BluePokeBlock, + ContestStatsText_PinkPokeBlock, + ContestStatsText_GreenPokeBlock, + ContestStatsText_YellowPokeBlock, + ContestStatsText_PurplePokeBlock, + ContestStatsText_IndigoPokeBlock, + ContestStatsText_BrownPokeBlock, + ContestStatsText_LiteBluePokeBlock, + ContestStatsText_OlivePokeBlock, + ContestStatsText_GrayPokeBlock, + ContestStatsText_BlackPokeBlock, + ContestStatsText_WhitePokeBlock, + ContestStatsText_GoldPokeBlock +}; + +const struct MenuAction2 gUnknown_083F7EF4[] = { + {OtherText_Use, sub_810C508}, + {OtherText_Toss, sub_810C5C0}, + {gOtherText_CancelNoTerminator, sub_810C748}, + {OtherText_Use, sub_810C788}, + {OtherText_Use, sub_810C854}, +}; + +const u8 gUnknown_083F7F1C[] = {0, 1, 2}; +const u8 gUnknown_083F7F1F[] = {3, 2}; +const u8 gUnknown_083F7F21[] = {4, 2}; + +const struct YesNoFuncTable gUnknown_083F7F24 = {sub_810C610, sub_810C668}; + +const u8 UnreferencedData_083F7F2C[] = {0x16, 0x17, 0x18, 0x21, 0x2f}; + +const struct OamData gOamData_83F7F34 = { + .size = 3, + .priority = 2 +}; + +const union AnimCmd gSpriteAnim_83F7F3C[] = { + ANIMCMD_FRAME(.imageValue = 0, .duration = 0), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83F7F44[] = { + gSpriteAnim_83F7F3C +}; + +const union AffineAnimCmd gSpriteAffineAnim_83F7F48[] = { + AFFINEANIMCMD_FRAME(0, 0, -2, 2), + AFFINEANIMCMD_FRAME(0, 0, 2, 4), + AFFINEANIMCMD_FRAME(0, 0, -2, 4), + AFFINEANIMCMD_FRAME(0, 0, 2, 2), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83F7F70[] = { + gSpriteAffineAnim_83F7F48 +}; + +const struct CompressedSpriteSheet gUnknown_083F7F74 = { + gMenuPokeblockDevice_Gfx, + 0x800, + GFX_TAG_POKEBLOCK_CASE +}; + +const struct CompressedSpritePalette gUnknown_083F7F7C = { + gMenuPokeblockDevice_Pal, + GFX_TAG_POKEBLOCK_CASE +}; + +const struct SpriteTemplate gSpriteTemplate_83F7F84 = { + GFX_TAG_POKEBLOCK_CASE, + GFX_TAG_POKEBLOCK_CASE, + &gOamData_83F7F34, + gSpriteAnimTable_83F7F44, + NULL, + gDummySpriteAffineAnimTable, + SpriteCallbackDummy +}; + +const struct Pokeblock gUnknown_083F7F9C[] = { + { PBLOCK_CLR_RED, 20, 0, 0, 0, 0, 20}, + { PBLOCK_CLR_BLUE, 0, 20, 0, 0, 0, 20}, + { PBLOCK_CLR_PINK, 0, 0, 20, 0, 0, 20}, + { PBLOCK_CLR_GREEN, 0, 0, 0, 20, 0, 20}, + { PBLOCK_CLR_YELLOW, 0, 0, 0, 0, 20, 20} +}; + +// text + +static void sub_810B674(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTasks(); + UpdatePaletteFade(); +} + +static void sub_810B68C(void) +{ + u16 *src; + vu16 *dest; + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + src = gBGTilemapBuffers[2]; + dest = (vu16 *)(VRAM + 0x7800); + DmaCopy16(3, src, dest, sizeof gBGTilemapBuffers[2]); +} + +static bool8 sub_810B6C0(void) +{ + u16 ime; + switch (gMain.state) + { + case 0: + sub_80F9438(); + sub_80F9368(); + REG_BG2CNT = BGCNT_SCREENBASE(15) | BGCNT_CHARBASE(2) | BGCNT_PRIORITY(2); + REG_BLDCNT = 0; + gMain.state++; + break; + case 1: + remove_some_task(); + gMain.state++; + break; + case 2: + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = TRUE; + gMain.state++; + break; + case 3: + ResetSpriteData(); + gMain.state++; + break; + case 4: + if (gUnknown_02039244 != 2) + { + ResetTasks(); + } + gMain.state++; + break; + case 5: + SetUpWindowConfig(&gWindowConfig_81E6E34); + gMain.state++; + break; + case 6: + SetUpWindowConfig(&gWindowConfig_81E6E50); + gMain.state++; + break; + case 7: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6E34); + gMain.state++; + break; + case 8: + if (MultistepInitMenuWindowContinue()) + { + gMain.state++; + } + break; + case 9: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6E50); + gMain.state++; + break; + case 10: + if (MultistepInitMenuWindowContinue()) + { + ewram[0x1ffff] = 0; + gMain.state++; + } + break; + case 11: + if (sub_810B998()) + { + gMain.state++; + } + break; + case 12: + sub_80F944C(); + LoadScrollIndicatorPalette(); + CreateVerticalScrollIndicators(0, 0xb0, 0x08); + CreateVerticalScrollIndicators(1, 0xb0, 0x98); + gMain.state++; + break; + case 13: + ewram[0x1fffe] = sub_810BA50(0x38, 0x40, 0); + gMain.state++; + break; + case 14: + sub_810BC98(); + sub_810BD08(); + gMain.state++; + break; + case 15: + sub_810BB0C(); + sub_810BB30(); + sub_810BC84(gUnknown_02039248.unk1); + gMain.state++; + break; + case 16: + ime = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = ime; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + SetVBlankCallback(sub_810B68C); + REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG2_ON | DISPCNT_BG1_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP; + gMain.state++; + break; + case 17: + if (sub_8055870() != TRUE) + { + gMain.state++; + } + break; + case 18: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + gPaletteFade.bufferTransferDisabled = FALSE; + SetMainCallback2(sub_810B674); + return TRUE; + } + return FALSE; +} + +void sub_810B96C(void) +{ + do { + if (sub_810B6C0() == TRUE) + { + CreateTask(sub_810BF7C, 0); + break; + } + } while (sub_80F9344() != TRUE); +} + +static bool8 sub_810B998(void) +{ + switch (ewram[0x1ffff]) + { + case 0: + LZDecompressVram(gMenuPokeblock_Gfx, (u8 *)BG_CHAR_ADDR(2)); + ewram[0x1ffff]++; + break; + case 1: + sub_800D238(gMenuPokeblock_Tilemap, gBGTilemapBuffers[2]); + ewram[0x1ffff]++; + break; + case 2: + LoadCompressedPalette(gMenuPokeblock_Pal, 0, 0xc0); + ewram[0x1ffff]++; + break; + case 3: + LoadCompressedObjectPic(&gUnknown_083F7F74); + ewram[0x1ffff]++; + break; + case 4: + LoadCompressedObjectPalette(&gUnknown_083F7F7C); + ewram[0x1ffff] = 0; + return TRUE; + } + return FALSE; +} + +u8 sub_810BA50(s16 x, s16 y, u8 subpriority) +{ + return CreateSprite(&gSpriteTemplate_83F7F84, x, y, subpriority); +} + +void sub_810BA7C(u8 a0) +{ + gUnknown_02039244 = a0; + switch (gUnknown_02039244) + { + default: + gUnknown_03000758 = gUnknown_083F7F1C; + gUnknown_0203924C = sizeof gUnknown_083F7F1C; + break; + case 2: + gUnknown_03000758 = gUnknown_083F7F1F; + gUnknown_0203924C = sizeof gUnknown_083F7F1F; + break; + case 3: + gUnknown_03000758 = gUnknown_083F7F21; + gUnknown_0203924C = sizeof gUnknown_083F7F21; + break; + } +} + +void sub_810BADC(void) +{ + sub_810BA7C(2); + SetMainCallback2(sub_810B96C); +} + +void sub_810BAF4(void) +{ + sub_810BA7C(3); + SetMainCallback2(sub_810B96C); +} + +#ifdef DEBUG +void debug_sub_8120F98(void) +{ + u8 i; + for (i=0; i<40 && gUnknown_083F7F9C[i].color != 0; i++) + { + gSaveBlock1.pokeblocks[i] = gUnknown_083F7F9C[i]; + } +} +#endif + +static void sub_810BB0C(void) +{ + BasicInitMenuWindow(&gWindowConfig_81E6E34); + sub_8072BD8(ItemId_GetItem(ITEM_POKEBLOCK_CASE)->name, 2, 1, 0x48); +} + +static void sub_810BB30(void) +{ + BasicInitMenuWindow(&gWindowConfig_81E6E34); + MenuPrint(gContestStatsText_Spicy, 2, 13); + MenuPrint(gContestStatsText_Dry, 2, 15); + MenuPrint(gContestStatsText_Sweet, 2, 17); + MenuPrint(gContestStatsText_Bitter, 8, 13); + MenuPrint(gContestStatsText_Sour, 8, 15); +} + +static void sub_810BB88(u8 a0) +{ + u8 i; + u8 y; + u8 *buf; + BasicInitMenuWindow(&gWindowConfig_81E6E34); + for (i=a0; i<=a0+8; i++) + { + y = (i - a0) << 1; + if (i == gUnknown_02039248.unk2) + { + buf = sub_8072C74(gStringVar1, gContestStatsText_StowCase, 0x78, 0); + MenuPrint(gStringVar1, 15, y + 1); + if (i != a0 + 8) + { + MenuZeroFillWindowRect(15, y + 3, 29, 18); + } + break; + } + buf = sub_8072C74(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[i].color], 0x5e, 0); + buf[0] = EXT_CTRL_CODE_BEGIN; + buf[1] = 0x14; + buf[2] = 0x06; + buf += 3; + ConvertIntToDecimalStringN(buf, sub_810C9B0(&gSaveBlock1.pokeblocks[i]), STR_CONV_MODE_RIGHT_ALIGN, 3); + MenuPrint(gStringVar1, 15, y + 1); + } +} + +static void sub_810BC84(u8 a0) +{ + sub_810BB88(a0); + sub_810BDAC(FALSE); +} + +static void sub_810BC98(void) +{ + u16 i, j; + struct Pokeblock buf; + for (i=0; i<39; i++) + { + for (j=i+1; j<40; j++) + { + if (gSaveBlock1.pokeblocks[i].color == 0) + { + buf = gSaveBlock1.pokeblocks[i]; + gSaveBlock1.pokeblocks[i] = gSaveBlock1.pokeblocks[j]; + gSaveBlock1.pokeblocks[j] = buf; + } + } + } +} + +static void sub_810BD08(void) +{ + u8 i; + gUnknown_02039248.unk2 = 0; + for (i=0; i<40; i++) + { + if (gSaveBlock1.pokeblocks[i].color != 0) + gUnknown_02039248.unk2++; + } + if (gUnknown_02039248.unk2 < 8) + { + gUnknown_02039248.unk3 = gUnknown_02039248.unk2; + } + else + { + gUnknown_02039248.unk3 = 8; + } + if (gUnknown_02039248.unk1 + 8 > gUnknown_02039248.unk2 && gUnknown_02039248.unk1 != 0) + { + gUnknown_02039248.unk1--; + } +} + +static void sub_810BD64(u16 a0, u16 a1) +{ + u8 i; + int y; + for (i=0; i<14; i++) + { + gBGTilemapBuffers[2][(2 * gUnknown_02039248.unk0 + 1) * 32 + (y = i + 15)] = a0; + gBGTilemapBuffers[2][(2 * gUnknown_02039248.unk0 + 2) * 32 + y] = a0; + } +} + +static void sub_810BDAC(bool8 flag) +{ + u8 i; + u16 v0; + if (!flag) + { + sub_810BD64(0x1005, 0x1014); + } + else + { + sub_810BD64(0x2005, 0x2014); + } + if (gUnknown_02039248.unk1) + { + sub_80F979C(0, 0); + } + else + { + sub_80F979C(0, 1); + } + if (gUnknown_02039248.unk2 > gUnknown_02039248.unk3 && gUnknown_02039248.unk1 + gUnknown_02039248.unk3 != gUnknown_02039248.unk2) + { + sub_80F979C(1, 0); + } + else + { + sub_80F979C(1, 1); + } + for (i=0; i<5; i++) + { + 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) + { + gBGTilemapBuffers[2][v0] = (i << 12) + 23; + gBGTilemapBuffers[2][v0 + 32] = (i << 12) + 24; + } + else + { + gBGTilemapBuffers[2][v0] = 15; + gBGTilemapBuffers[2][v0 + 32] = 15; + } + } + else + { + gBGTilemapBuffers[2][v0] = 15; + gBGTilemapBuffers[2][v0 + 32] = 15; + } + } + BasicInitMenuWindow(&gWindowConfig_81E6E34); + if (gUnknown_02039248.unk0 + gUnknown_02039248.unk1 != gUnknown_02039248.unk2) + { + sub_8072C14(gStringVar1, sub_810C9E8(&gSaveBlock1.pokeblocks[gUnknown_02039248.unk0 + gUnknown_02039248.unk1]), 16, 1); + MenuPrint(gStringVar1, 11, 17); + } + else + { + MenuZeroFillWindowRect(11, 17, 12, 18); + } +} + +static void sub_810BF38(bool8 flag) +{ + PlaySE(SE_SELECT); + gSprites[ewram[0x1fffe]].callback = sub_810C8D4; + sub_810BDAC(flag); +} + +static void sub_810BF7C(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (gUnknown_02039248.unk0 != 0) + { + sub_810BD64(5, 20); + gUnknown_02039248.unk0--; + sub_810BF38(FALSE); + } + else if (gUnknown_02039248.unk1 != 0) + { + gUnknown_02039248.unk1--; + sub_810BB88(gUnknown_02039248.unk1); + sub_810BF38(FALSE); + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (gUnknown_02039248.unk0 != gUnknown_02039248.unk3) + { + sub_810BD64(5, 20); + gUnknown_02039248.unk0++; + sub_810BF38(FALSE); + } + else if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 != gUnknown_02039248.unk2) + { + gUnknown_02039248.unk1++; + sub_810BB88(gUnknown_02039248.unk1); + sub_810BF38(FALSE); + } + } + else if (gMain.newKeys & SELECT_BUTTON) + { + if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 != gUnknown_02039248.unk2) + { + PlaySE(SE_SELECT); + sub_810BDAC(TRUE); + gTasks[taskId].data[0] = gUnknown_02039248.unk1 + gUnknown_02039248.unk0; + gTasks[taskId].func = sub_810C0C8; + } + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 == gUnknown_02039248.unk2) + { + gScriptResult = 0xffff; + sub_810C31C(taskId); + } + else + { + sub_810C368(taskId); + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gScriptResult = 0xffff; + sub_810C31C(taskId); + } + } +} + +static void sub_810C0C8(u8 taskId) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (gUnknown_02039248.unk0 != 0) + { + sub_810BD64(5, 20); + gUnknown_02039248.unk0--; + sub_810BF38(TRUE); + sub_810C1C8(taskId, 1); + } + else if (gUnknown_02039248.unk1 != 0) + { + sub_810C1C8(taskId, 0); + gUnknown_02039248.unk1--; + sub_810BB88(gUnknown_02039248.unk1); + sub_810BF38(TRUE); + sub_810C1C8(taskId, 1); + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (gUnknown_02039248.unk0 != gUnknown_02039248.unk3) + { + sub_810BD64(5, 20); + gUnknown_02039248.unk0++; + sub_810BF38(TRUE); + sub_810C1C8(taskId, 1); + } + else if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 != gUnknown_02039248.unk2) + { + sub_810C1C8(taskId, 0); + gUnknown_02039248.unk1++; + sub_810BB88(gUnknown_02039248.unk1); + sub_810BF38(TRUE); + sub_810C1C8(taskId, 1); + } + } + else if (gMain.newKeys & A_BUTTON || gMain.newKeys & SELECT_BUTTON) + { + PlaySE(SE_SELECT); + sub_810C1C8(taskId, 0); + sub_810C23C(taskId); + gTasks[taskId].func = sub_810BF7C; + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_810C1C8(taskId, 0); + sub_810BDAC(0); + gTasks[taskId].func = sub_810BF7C; + } +} + +static void sub_810C1C8(u8 taskId, u8 flag) +{ + u8 i; + u32 x; + s16 y; + u16 v0 = 0x1005; + if (!flag) + { + v0 = 0x0005; + } + y = gTasks[taskId].data[0] - gUnknown_02039248.unk1; + if ((u16)y <= 8 && y != gUnknown_02039248.unk0) + { + for (i=0; i<14; i++) + { + gBGTilemapBuffers[2][(2 * y + 1) * 32 + (x = i + 15)] = v0; + gBGTilemapBuffers[2][(2 * y + 2) * 32 + x] = v0; + } + } +} + +static void sub_810C23C(u8 taskId) +{ + struct Pokeblock buf; + u8 selidx = gUnknown_02039248.unk1 + gUnknown_02039248.unk0; + if (selidx == gUnknown_02039248.unk2) + { + sub_810BDAC(FALSE); + } + else + { + buf = gSaveBlock1.pokeblocks[selidx]; + gSaveBlock1.pokeblocks[selidx] = gSaveBlock1.pokeblocks[gTasks[taskId].data[0]]; + gSaveBlock1.pokeblocks[gTasks[taskId].data[0]] = buf; + sub_810BB88(gUnknown_02039248.unk1); + sub_810BDAC(FALSE); + } +} + +static void sub_810C2B0(void) +{ + DestroyVerticalScrollIndicator(0); + DestroyVerticalScrollIndicator(1); + BuyMenuFreeMemory(); +} + +static void sub_810C2C8(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gUnknown_02039244 == 3) + { + gFieldCallback = sub_8080990; + } + sub_810C2B0(); + SetMainCallback2(gUnknown_083F7EA8[gUnknown_02039244]); + DestroyTask(taskId); + } +} + +static void sub_810C31C(u8 taskId) +{ + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + if (gUnknown_02039244 > 1) + { + gScriptItemId = ITEM_NONE; + } + gTasks[taskId].func = sub_810C2C8; +} + +static void sub_810C368(u8 taskId) +{ + int v0 = 0; + if (gUnknown_02039244 > 1) + v0 = 2; + sub_80F98A4(0); + 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); + InitMenu(0, 8, v0 + 5, gUnknown_0203924C, 0, 5); + gScriptItemId = gUnknown_02039248.unk0 + gUnknown_02039248.unk1; + gTasks[taskId].func = sub_810C40C; +} + +static void sub_810C40C(u8 taskId) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (GetMenuCursorPos()) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (GetMenuCursorPos() != gUnknown_0203924C - 1) + { + PlaySE(SE_SELECT); + MoveMenuCursor(+1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_083F7EF4[gUnknown_03000758[GetMenuCursorPos()]].func(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_810C748(taskId); + } +} + +static void sub_810C4C4(u8 taskId) +{ + if (!gPaletteFade.active) + { + sub_810C2B0(); + sub_8136130(&gSaveBlock1.pokeblocks[gScriptItemId], sub_810B96C); + DestroyTask(taskId); + } +} + +static void sub_810C508(u8 taskId) +{ + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = sub_810C4C4; +} + +static void sub_810C540(u8 taskId) +{ + BasicInitMenuWindow(&gWindowConfig_81E6E50); + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(7, 4, 13, 11); + StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gUnknown_02039248.unk0 + gUnknown_02039248.unk1].color]); + StringExpandPlaceholders(gStringVar4, gContestStatsText_ThrowAwayPrompt); + DisplayItemMessageOnField(taskId, gStringVar4, sub_810C5EC, 0); +} + +static void sub_810C5C0(u8 taskId) +{ + sub_80F979C(1, 1); + gTasks[taskId].func = sub_810C540; +} + +static void sub_810C5EC(u8 taskId) +{ + DisplayYesNoMenu(7, 6, 1); + DoYesNoFuncWithChoice(taskId, &gUnknown_083F7F24); +} + +static void sub_810C610(u8 taskId) +{ + MenuZeroFillWindowRect(7, 6, 13, 11); + sub_810CA6C((gUnknown_02039248.unk0 + gUnknown_02039248.unk1)); + StringExpandPlaceholders(gStringVar4, gContestStatsText_WasThrownAway); + DisplayItemMessageOnField(taskId, gStringVar4, sub_810C704, 0); + sub_810BC98(); + sub_810BD08(); +} + +static void sub_810C668(u8 taskId) +{ + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + if (gUnknown_02039248.unk2 > gUnknown_02039248.unk3 && gUnknown_02039248.unk1 + gUnknown_02039248.unk3 != gUnknown_02039248.unk2) + { + sub_80F979C(1, 0); + } + BasicInitMenuWindow(&gWindowConfig_81E6E50); + MenuZeroFillWindowRect(7, 6, 13, 11); + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskId].func = sub_810BF7C; +} + +static void sub_810C6DC(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + { + sub_810C668(taskId); + } +} + +static void sub_810C704(u8 taskId) +{ + BasicInitMenuWindow(&gWindowConfig_81E6E34); + sub_810BC84(gUnknown_02039248.unk1); + sub_80F979C(1, 1); + gTasks[taskId].func = sub_810C6DC; +} + +static void sub_810C748(u8 taskId) +{ + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(7, 4, 13, 11); + gTasks[taskId].func = sub_810BF7C; +} + +static void sub_810C788(u8 taskId) +{ + s16 v0 = sub_810CAE4(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gScriptItemId]); + StringCopy(gBattleTextBuff1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]); + sub_810CA6C(gScriptItemId); + gScriptItemId = gSaveBlock1.pokeblocks[gScriptItemId].color << 8; + if (v0 == 0) + { + gScriptItemId += 1; + } + if (v0 > 0) + { + gScriptItemId += 2; + } + if (v0 < 0) + { + gScriptItemId += 3; + } + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = sub_810C2C8; +} + +static void sub_810C854(u8 taskId) +{ + SafariZoneActivatePokeblockFeeder(gScriptItemId); + StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]); + gScriptResult = gScriptItemId; + sub_810CA6C(gScriptItemId); + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = sub_810C2C8; +} + +static void sub_810C8D4(struct Sprite *sprite) +{ + if (sprite->data0 > 1) + { + sprite->data0 = 0; + } + switch (sprite->data0) + { + case 0: + sprite->oam.affineMode = 1; + sprite->affineAnims = gSpriteAffineAnimTable_83F7F70; + InitSpriteAffineAnim(sprite); + sprite->data0 = 1; + sprite->data1 = 0; + break; + case 1: + if (++sprite->data1 > 11) + { + sprite->oam.affineMode = 0; + sprite->data0 = 0; + sprite->data1 = 0; + FreeOamMatrix(sprite->oam.matrixNum); + sprite->callback = SpriteCallbackDummy; + } + break; + } +} + +static void ClearPokeblock(u8 pokeblockIdx) +{ + gSaveBlock1.pokeblocks[pokeblockIdx].color = 0; + gSaveBlock1.pokeblocks[pokeblockIdx].spicy = 0; + gSaveBlock1.pokeblocks[pokeblockIdx].dry = 0; + gSaveBlock1.pokeblocks[pokeblockIdx].sweet = 0; + gSaveBlock1.pokeblocks[pokeblockIdx].bitter = 0; + gSaveBlock1.pokeblocks[pokeblockIdx].sour = 0; + gSaveBlock1.pokeblocks[pokeblockIdx].feel = 0; +} + +void ClearPokeblocks(void) +{ + u8 pokeblockIdx; + for (pokeblockIdx=0; pokeblockIdx 99) + feel = 99; + return feel; +} + +s8 sub_810CA00(void) +{ + u8 i; + for (i=0; icolor; + if (field == 1) + return pokeblock->spicy; + if (field == 2) + return pokeblock->dry; + if (field == 3) + return pokeblock->sweet; + if (field == 4) + return pokeblock->bitter; + if (field == 5) + return pokeblock->sour; + if (field == 6) + return pokeblock->feel; + return 0; +} + +s16 sub_810CAE4(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); + if (curGain > 0) + { + totalGain += curGain * gPokeblockFlavorCompatibilityTable[5 * nature + flavor]; + } + } + return totalGain; +} + +void sub_810CB44(struct Pokeblock *pokeblock, u8 *dest) +{ + u8 color = sub_810CA9C(pokeblock, 0); + StringCopy(dest, gPokeblockNames[color]); +} + +bool8 sub_810CB68(u8 nature, u8 *dest) +{ + u8 flavor; + for (flavor=0; flavor<5; flavor++) + { + if (sub_810CAE4(nature, &gUnknown_083F7F9C[flavor]) > 0) + { + StringCopy(dest, gPokeblockNames[flavor + 1]); + return TRUE; + } + } + return FALSE; +} diff --git a/src/field/pokenav.c b/src/field/pokenav.c new file mode 100644 index 000000000..84ed7b14b --- /dev/null +++ b/src/field/pokenav.c @@ -0,0 +1,40 @@ +#include "global.h" +#include "main.h" +#include "pokenav.h" +#include "battle.h" +#include "data2.h" +#include "de_rom_8040FE0.h" +#include "string_util.h" + +void sub_80F700C(u8 *arg0, u16 arg1) { + struct Trainer *trainer; + u8 *ptr; + +#if ENGLISH + trainer = (struct Trainer *) &gTrainers[gUnknown_083DFEC4->unkCEE8[arg1].unk0]; +#elif GERMAN + const u16 trainerIndex = gUnknown_083DFEC4->unkCEE8[arg1].unk0; + trainer = (struct Trainer *) &gTrainers[trainerIndex]; +#endif + + ptr = arg0; + if (arg1 < gUnknown_083DFEC4->unkD158) + { +#if ENGLISH + ptr = StringCopy(ptr, gTrainerClassNames[trainer->trainerClass]); +#elif GERMAN + ptr = StringCopy(ptr, de_sub_8041024(0, trainerIndex)); +#endif + + ptr[0] = 0xFC; + ptr[1] = 0x13; + ptr[2] = 0x4B; + ptr += 3; + ptr = StringCopy(ptr, trainer->trainerName); + } + + ptr[0] = 0xFC; + ptr[1] = 0x13; + ptr[2] = 0x80; + ptr[3] = 0xFF; +} diff --git a/src/field/region_map.c b/src/field/region_map.c new file mode 100644 index 000000000..7ca7e809f --- /dev/null +++ b/src/field/region_map.c @@ -0,0 +1,1847 @@ +#include "global.h" +#include "event_data.h" +#include "field_effect.h" +#include "field_specials.h" +#include "m4a.h" +#include "main.h" +#include "map_constants.h" +#include "menu.h" +#include "palette.h" +#include "pokemon_menu.h" +#include "region_map.h" +#include "rom4.h" +#include "secret_base.h" +#include "songs.h" +#include "sprite.h" +#include "strings.h" +#include "string_util.h" +#include "text.h" +#include "trig.h" + +// Map Section IDs +#define MAPSEC_LITTLEROOT_TOWN 0 +#define MAPSEC_OLDALE_TOWN 1 +#define MAPSEC_DEWFORD_TOWN 2 +#define MAPSEC_LAVARIDGE_TOWN 3 +#define MAPSEC_FALLARBOR_TOWN 4 +#define MAPSEC_VERDANTURF_TOWN 5 +#define MAPSEC_PACIFIDLOG_TOWN 6 +#define MAPSEC_PETALBURG_CITY 7 +#define MAPSEC_SLATEPORT_CITY 8 +#define MAPSEC_MAUVILLE_CITY 9 +#define MAPSEC_RUSTBORO_CITY 10 +#define MAPSEC_FORTREE_CITY 11 +#define MAPSEC_LILYCOVE_CITY 12 +#define MAPSEC_MOSSDEEP_CITY 13 +#define MAPSEC_SOOTOPOLIS_CITY 14 +#define MAPSEC_EVER_GRANDE_CITY 15 +#define MAPSEC_ROUTE_101 0x10 +#define MAPSEC_ROUTE_102 0x11 +#define MAPSEC_ROUTE_103 0x12 +#define MAPSEC_ROUTE_104 0x13 +#define MAPSEC_ROUTE_105 0x14 +#define MAPSEC_ROUTE_106 0x15 +#define MAPSEC_ROUTE_107 0x16 +#define MAPSEC_ROUTE_108 0x17 +#define MAPSEC_ROUTE_109 0x18 +#define MAPSEC_ROUTE_110 0x19 +#define MAPSEC_ROUTE_111 0x1A +#define MAPSEC_ROUTE_112 0x1B +#define MAPSEC_ROUTE_113 0x1C +#define MAPSEC_ROUTE_114 0x1D +#define MAPSEC_ROUTE_115 0x1E +#define MAPSEC_ROUTE_116 0x1F +#define MAPSEC_ROUTE_117 0x20 +#define MAPSEC_ROUTE_118 0x21 +#define MAPSEC_ROUTE_119 0x22 +#define MAPSEC_ROUTE_120 0x23 +#define MAPSEC_ROUTE_121 0x24 +#define MAPSEC_ROUTE_122 0x25 +#define MAPSEC_ROUTE_123 0x26 +#define MAPSEC_ROUTE_124 0x27 +#define MAPSEC_ROUTE_125 0x28 +#define MAPSEC_ROUTE_126 0x29 +#define MAPSEC_ROUTE_127 0x2A +#define MAPSEC_ROUTE_128 0x2B +#define MAPSEC_ROUTE_129 0x2C +#define MAPSEC_ROUTE_130 0x2D +#define MAPSEC_ROUTE_131 0x2E +#define MAPSEC_ROUTE_132 0x2F +#define MAPSEC_ROUTE_133 0x30 +#define MAPSEC_ROUTE_134 0x31 +#define MAPSEC_UNDERWATER1 0x32 +#define MAPSEC_UNDERWATER2 0x33 +#define MAPSEC_UNDERWATER3 0x34 +#define MAPSEC_UNDERWATER4 0x35 +#define MAPSEC_UNDERWATER5 0x36 +#define MAPSEC_GRANITE_CAVE 0x37 +#define MAPSEC_MT_CHIMNEY 0x38 +#define MAPSEC_SAFARI_ZONE 0x39 +#define MAPSEC_BATTLE_TOWER 0x3A +#define MAPSEC_PETALBURG_WOODS 0x3B +#define MAPSEC_RUSTURF_TUNNEL 0x3C +#define MAPSEC_ABANDONED_SHIP 0x3D +#define MAPSEC_NEW_MAUVILLE 0x3E +#define MAPSEC_METEOR_FALLS_1 0x3F +#define MAPSEC_METEOR_FALLS_2 0x40 +#define MAPSEC_MT_PYRE 0x41 +#define MAPSEC_EVIL_TEAM_HIDEOUT 0x42 +#define MAPSEC_SHOAL_CAVE 0x43 +#define MAPSEC_SEAFLOOR_CAVERN 0x44 +#define MAPSEC_UNDERWATER6 0x45 +#define MAPSEC_VICTORY_ROAD 0x46 +#define MAPSEC_MIRAGE_ISLAND 0x47 +#define MAPSEC_CAVE_OF_ORIGIN 0x48 +#define MAPSEC_SOUTHERN_ISLAND 0x49 +#define MAPSEC_FIERY_PATH_1 0x4A +#define MAPSEC_FIERY_PATH_2 0x4B +#define MAPSEC_JAGGED_PASS_1 0x4C +#define MAPSEC_JAGGED_PASS_2 0x4D +#define MAPSEC_SEALED_CHAMBER 0x4E +#define MAPSEC_UNDERWATER7 0x4F +#define MAPSEC_SCORCHED_SLAB 0x50 +#define MAPSEC_ISLAND_CAVE 0x51 +#define MAPSEC_DESERT_RUINS 0x52 +#define MAPSEC_ANCIENT_TOMB 0x53 +#define MAPSEC_INSIDE_OF_TRUCK 0x54 +#define MAPSEC_SKY_PILLAR 0x55 +#define MAPSEC_SECRET_BASE 0x56 +#define MAPSEC_UNK_0x57 0x57 +#define MAPSEC_NONE 0x58 + +#define MAP_WIDTH 28 +#define MAP_HEIGHT 15 +#define MAPCURSOR_X_MIN 1 +#define MAPCURSOR_Y_MIN 2 +#define MAPCURSOR_X_MAX (MAPCURSOR_X_MIN + MAP_WIDTH - 1) +#define MAPCURSOR_Y_MAX (MAPCURSOR_Y_MIN + MAP_HEIGHT - 1) + +// Input events +enum +{ + INPUT_EVENT_NONE, + INPUT_EVENT_DPAD, + INPUT_EVENT_2, + INPUT_EVENT_3, + INPUT_EVENT_A_BUTTON, + INPUT_EVENT_B_BUTTON, +}; + +static EWRAM_DATA struct RegionMap *gRegionMap = NULL; + +static const u16 sRegionMapCursor_Pal[] = INCBIN_U16("graphics/pokenav/cursor.gbapal"); +static const u8 sRegionMapCursorSmall_ImageLZ[] = INCBIN_U8("graphics/pokenav/cursor_small.4bpp.lz"); +static const u8 sRegionMapCursorLarge_ImageLZ[] = INCBIN_U8("graphics/pokenav/cursor_large.4bpp.lz"); +static const u16 sRegionMapBrendanIcon_Pal[] = INCBIN_U16("graphics/pokenav/brendan_icon.gbapal"); +static const u8 sRegionMapBrendanIcon_Image[] = INCBIN_U8("graphics/pokenav/brendan_icon.4bpp"); +static const u16 sRegionMapMayIcon_Pal[] = INCBIN_U16("graphics/pokenav/may_icon.gbapal"); +static const u8 sRegionMapMayIcon_Image[] = INCBIN_U8("graphics/pokenav/may_icon.4bpp"); +static const u16 sRegionMapBkgnd_Pal[] = INCBIN_U16("graphics/pokenav/region_map.gbapal"); +static const u8 sRegionMapBkgnd_ImageLZ[] = INCBIN_U8("graphics/pokenav/region_map.8bpp.lz"); +static const u8 sRegionMapBkgnd_TilemapLZ[] = INCBIN_U8("graphics/pokenav/region_map_map.bin.lz"); + +#include "../data/region_map_layout.h" + +#if ENGLISH +#include "../data/region_map_names_en.h" +#elif GERMAN +#include "../data/region_map_names_de.h" +#endif + +struct RegionMapLocation +{ + u8 x, y; + u8 width, height; + const u8 *regionMapSectionId; +}; + +const struct RegionMapLocation gRegionMapLocations[] = +{ + { 4, 11, 1, 1, gMapName_LittlerootTown}, + { 4, 9, 1, 1, gMapName_OldaleTown}, + { 2, 14, 1, 1, gMapName_DewfordTown}, + { 5, 3, 1, 1, gMapName_LavaridgeTown}, + { 3, 0, 1, 1, gMapName_FallarborTown}, + { 4, 6, 1, 1, gMapName_VerdanturfTown}, + {17, 10, 1, 1, gMapName_PacifidlogTown}, + { 1, 9, 1, 1, gMapName_PetalburgCity}, + { 8, 10, 1, 2, gMapName_SlateportCity}, + { 8, 6, 2, 1, gMapName_MauvilleCity}, + { 0, 5, 1, 2, gMapName_RustboroCity}, + {12, 0, 1, 1, gMapName_FortreeCity}, + {18, 3, 2, 1, gMapName_LilycoveCity}, + {24, 5, 2, 1, gMapName_MossdeepCity}, + {21, 7, 1, 1, gMapName_SootopolisCity}, + {27, 8, 1, 2, gMapName_EverGrandeCity}, + { 4, 10, 1, 1, gMapName_Route101}, + { 2, 9, 2, 1, gMapName_Route102}, + { 4, 8, 4, 1, gMapName_Route103}, + { 0, 7, 1, 3, gMapName_Route104}, + { 0, 10, 1, 3, gMapName_Route105}, + { 0, 13, 2, 1, gMapName_Route106}, + { 3, 14, 3, 1, gMapName_Route107}, + { 6, 14, 2, 1, gMapName_Route108}, + { 8, 12, 1, 3, gMapName_Route109}, + { 8, 7, 1, 3, gMapName_Route110}, + { 8, 0, 1, 6, gMapName_Route111}, + { 6, 3, 2, 1, gMapName_Route112}, + { 4, 0, 4, 1, gMapName_Route113}, + { 1, 0, 2, 3, gMapName_Route114}, + { 0, 2, 1, 3, gMapName_Route115}, + { 1, 5, 4, 1, gMapName_Route116}, + { 5, 6, 3, 1, gMapName_Route117}, + {10, 6, 2, 1, gMapName_Route118}, + {11, 0, 1, 6, gMapName_Route119}, + {13, 0, 1, 4, gMapName_Route120}, + {14, 3, 4, 1, gMapName_Route121}, + {16, 4, 1, 2, gMapName_Route122}, + {12, 6, 5, 1, gMapName_Route123}, + {20, 3, 4, 3, gMapName_Route124}, + {24, 3, 2, 2, gMapName_Route125}, + {20, 6, 3, 3, gMapName_Route126}, + {23, 6, 3, 3, gMapName_Route127}, + {23, 9, 4, 1, gMapName_Route128}, + {24, 10, 2, 1, gMapName_Route129}, + {21, 10, 3, 1, gMapName_Route130}, + {18, 10, 3, 1, gMapName_Route131}, + {15, 10, 2, 1, gMapName_Route132}, + {12, 10, 3, 1, gMapName_Route133}, + { 9, 10, 3, 1, gMapName_Route134}, + {20, 3, 4, 3, gMapName_Underwater}, + {20, 6, 3, 3, gMapName_Underwater}, + {23, 6, 3, 3, gMapName_Underwater}, + {23, 9, 4, 1, gMapName_Underwater}, + {21, 7, 1, 1, gMapName_Underwater}, + { 1, 13, 1, 1, gMapName_GraniteCave}, + { 6, 2, 1, 1, gMapName_MtChimney}, + {16, 2, 1, 1, gMapName_SafariZone}, + {22, 12, 1, 1, gMapName_BattleTower}, + { 0, 8, 1, 1, gMapName_PetalburgWoods}, + { 2, 5, 1, 1, gMapName_RusturfTunnel}, + { 6, 14, 1, 1, gMapName_AbandonedShip}, + { 8, 7, 1, 1, gMapName_NewMauville}, + { 0, 3, 1, 1, gMapName_MeteorFalls}, + { 1, 2, 1, 1, gMapName_MeteorFalls}, + {16, 4, 1, 1, gMapName_MtPyre}, + {19, 3, 1, 1, gMapName_EvilTeamHideout}, + {24, 4, 1, 1, gMapName_ShoalCave}, + {24, 9, 1, 1, gMapName_SeafloorCavern}, + {24, 9, 1, 1, gMapName_Underwater}, + {27, 9, 1, 1, gMapName_VictoryRoad}, + {17, 10, 1, 1, gMapName_MirageIsland}, + {21, 7, 1, 1, gMapName_CaveOfOrigin}, + {12, 14, 1, 1, gMapName_SouthernIsland}, + { 6, 3, 1, 1, gMapName_FieryPath}, + { 7, 3, 1, 1, gMapName_FieryPath}, + { 6, 3, 1, 1, gMapName_JaggedPass}, + { 7, 2, 1, 1, gMapName_JaggedPass}, + {11, 10, 1, 1, gMapName_SealedChamber}, + {11, 10, 1, 1, gMapName_Underwater}, + {13, 0, 1, 1, gMapName_ScorchedSlab}, + {0, 10, 1, 1, gMapName_IslandCave}, + { 8, 3, 1, 1, gMapName_DesertRuins}, + {13, 2, 1, 1, gMapName_AncientTomb}, + { 0, 0, 1, 1, gMapName_InsideOfTruck}, + {19, 10, 1, 1, gMapName_SkyPillar}, + { 0, 0, 1, 1, gMapName_SecretBase}, + { 0, 0, 1, 1, gMapName_None}, +}; + +static const u16 gUnknown_083E7684[][2] = +{ + {MAPSEC_UNDERWATER1, MAPSEC_ROUTE_124}, + {MAPSEC_UNDERWATER2, MAPSEC_ROUTE_126}, + {MAPSEC_UNDERWATER3, MAPSEC_ROUTE_127}, + {MAPSEC_UNDERWATER4, MAPSEC_ROUTE_128}, + {MAPSEC_UNDERWATER5, MAPSEC_SOOTOPOLIS_CITY}, + {MAPSEC_UNDERWATER6, MAPSEC_ROUTE_128}, + {MAPSEC_EVIL_TEAM_HIDEOUT, MAPSEC_LILYCOVE_CITY}, + {MAPSEC_UNDERWATER7, MAPSEC_ROUTE_134}, + {MAPSEC_PETALBURG_WOODS, MAPSEC_ROUTE_104}, + {MAPSEC_JAGGED_PASS_1, MAPSEC_ROUTE_112}, + {MAPSEC_MT_PYRE, MAPSEC_ROUTE_122}, + {MAPSEC_SKY_PILLAR, MAPSEC_ROUTE_131}, + {MAPSEC_NONE, MAPSEC_NONE}, +}; + +static u8 sub_80FAB78(void); +static u8 _swiopen(void); +static u8 sub_80FAD04(void); +static u8 sub_80FADE4(void); +static void CalcZoomScrollParams(s16, s16, s16, s16, u16, u16, u8); +static void sub_80FB238(s16, s16); +void UpdateRegionMapVideoRegs(void); +static u16 GetRegionMapSectionAt(u16, u16); +static void InitializeCursorPosition(void); +static void sub_80FB600(void); +static u16 sub_80FB758(u16); +static u16 sub_80FB9C0(u16); +static void sub_80FBA18(void); +static bool8 sub_80FBAA0(u16); +void CreateRegionMapCursor(u16, u16); +static void sub_80FBCA0(void); +static void sub_80FBDF8(void); +static void sub_80FBE24(void); +static void SpriteCB_PlayerIconZoomedOut(struct Sprite *); +static void UpdateIconBlink(struct Sprite *); +static void SpriteCB_PlayerIconZoomedIn(struct Sprite *); +const u8 *GetMapSectionName(u8 *, u16, u16); +static void VBlankCB_FlyRegionMap(void); +static void CB2_FlyRegionMap(void); +static void sub_80FC244(void (*func)(void)); +static void PrintFlyTargetName(void); +static void CreateFlyTargetGraphics(void); +static void CreateCityTownFlyTargetIcons(void); +static void CreateSpecialAreaFlyTargetIcons(void); +static void SpriteCB_FlyTargetIcons(struct Sprite *); +static void sub_80FC5B4(void); +static void sub_80FC600(void); +static void sub_80FC69C(void); + +void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed) +{ + sub_80FA904(regionMap, zoomed); + while (sub_80FA940()) + ; +} + +void sub_80FA904(struct RegionMap *regionMap, bool8 zoomed) +{ + gRegionMap = regionMap; + gRegionMap->initStep = 0; + gRegionMap->zoomed = zoomed; + gRegionMap->inputCallback = (zoomed == 0) ? sub_80FAB78 : sub_80FAD04; +} + +bool8 sub_80FA940(void) +{ + switch (gRegionMap->initStep) + { + case 0: + LZ77UnCompVram(sRegionMapBkgnd_ImageLZ, (void *)(VRAM + 0x8000)); + break; + case 1: + LZ77UnCompVram(sRegionMapBkgnd_TilemapLZ, (void *)(VRAM + 0xE000)); + break; + case 2: + LoadPalette(sRegionMapBkgnd_Pal, 0x70, 0x60); // Why isn't this the right size? + break; + case 3: + LZ77UnCompWram(sRegionMapCursorSmall_ImageLZ, gRegionMap->cursorSmallImage); + break; + case 4: + LZ77UnCompWram(sRegionMapCursorLarge_ImageLZ, gRegionMap->cursorLargeImage); + break; + case 5: + InitializeCursorPosition(); + gRegionMap->unk74 = gRegionMap->cursorPosX; + gRegionMap->unk76 = gRegionMap->cursorPosY; + gRegionMap->unk16 = sub_80FB758(gRegionMap->mapSecId); + gRegionMap->mapSecId = sub_80FB9C0(gRegionMap->mapSecId); + GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16); + break; + case 6: + if (gRegionMap->zoomed == FALSE) + { + CalcZoomScrollParams(0, 0, 0, 0, 0x100, 0x100, 0); + } + else + { + gRegionMap->scrollX = gRegionMap->cursorPosX * 8 - 52; + gRegionMap->scrollY = gRegionMap->cursorPosY * 8 - 68; + gRegionMap->unk64 = gRegionMap->cursorPosX; + gRegionMap->unk66 = gRegionMap->cursorPosY; + CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, 0x80, 0x80, 0); + } + break; + case 7: + sub_80FBA18(); + UpdateRegionMapVideoRegs(); + gRegionMap->cursorSprite = NULL; + gRegionMap->playerIconSprite = NULL; + gRegionMap->unk7A = 0; + gRegionMap->blinkPlayerIcon = FALSE; + REG_BG2CNT = 0xBC8A; + gRegionMap->initStep++; + default: + return FALSE; + } + gRegionMap->initStep++; + return TRUE; +} + +void FreeRegionMapIconResources(void) +{ + if (gRegionMap->cursorSprite != NULL) + { + DestroySprite(gRegionMap->cursorSprite); + FreeSpriteTilesByTag(gRegionMap->cursorTileTag); + FreeSpritePaletteByTag(gRegionMap->cursorPaletteTag); + } + if (gRegionMap->playerIconSprite != NULL) + { + DestroySprite(gRegionMap->playerIconSprite); + FreeSpriteTilesByTag(gRegionMap->playerIconTileTag); + FreeSpritePaletteByTag(gRegionMap->playerIconPaletteTag); + } +} + +u8 sub_80FAB60(void) +{ + return gRegionMap->inputCallback(); +} + +static u8 sub_80FAB78(void) +{ + u8 event = INPUT_EVENT_NONE; + + gRegionMap->cursorDeltaX = 0; + gRegionMap->cursorDeltaY = 0; + if ((gMain.heldKeys & DPAD_UP) && gRegionMap->cursorPosY > MAPCURSOR_Y_MIN) + { + gRegionMap->cursorDeltaY = -1; + event = INPUT_EVENT_DPAD; + } + if ((gMain.heldKeys & DPAD_DOWN) && gRegionMap->cursorPosY < MAPCURSOR_Y_MAX) + { + gRegionMap->cursorDeltaY = 1; + event = INPUT_EVENT_DPAD; + } + if ((gMain.heldKeys & DPAD_LEFT) && gRegionMap->cursorPosX > MAPCURSOR_X_MIN) + { + gRegionMap->cursorDeltaX = -1; + event = INPUT_EVENT_DPAD; + } + if ((gMain.heldKeys & DPAD_RIGHT) && gRegionMap->cursorPosX < MAPCURSOR_X_MAX) + { + gRegionMap->cursorDeltaX = 1; + event = INPUT_EVENT_DPAD; + } + + if (gMain.newKeys & A_BUTTON) + event = INPUT_EVENT_A_BUTTON; + else if (gMain.newKeys & B_BUTTON) + event = INPUT_EVENT_B_BUTTON; + + if (event == INPUT_EVENT_DPAD) + { + gRegionMap->unk7A = 4; + gRegionMap->inputCallback = _swiopen; + } + return event; +} + +static u8 _swiopen(void) +{ + u16 mapSecId; + + if (gRegionMap->unk7A != 0) + return INPUT_EVENT_2; + + if (gRegionMap->cursorDeltaX > 0) + gRegionMap->cursorPosX++; + + if (gRegionMap->cursorDeltaX < 0) + gRegionMap->cursorPosX--; + + if (gRegionMap->cursorDeltaY > 0) + gRegionMap->cursorPosY++; + + if (gRegionMap->cursorDeltaY < 0) + gRegionMap->cursorPosY--; + + mapSecId = GetRegionMapSectionAt(gRegionMap->cursorPosX, gRegionMap->cursorPosY); + gRegionMap->unk16 = sub_80FB758(mapSecId); + if (mapSecId != gRegionMap->mapSecId) + { + gRegionMap->mapSecId = mapSecId; + GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16); + } + sub_80FBA18(); + gRegionMap->inputCallback = sub_80FAB78; + return INPUT_EVENT_3; +} + +static u8 sub_80FAD04(void) +{ + u8 event = INPUT_EVENT_NONE; + + gRegionMap->unk6A = 0; + gRegionMap->unk68 = 0; + if ((gMain.heldKeys & DPAD_UP) && gRegionMap->scrollY > -52) + { + gRegionMap->unk68 = -1; + event = INPUT_EVENT_DPAD; + } + if ((gMain.heldKeys & DPAD_DOWN) && gRegionMap->scrollY < 60) + { + gRegionMap->unk68 = 1; + event = INPUT_EVENT_DPAD; + } + if ((gMain.heldKeys & DPAD_LEFT) && gRegionMap->scrollX > -44) + { + gRegionMap->unk6A = -1; + event = INPUT_EVENT_DPAD; + } + if ((gMain.heldKeys & DPAD_RIGHT) && gRegionMap->scrollX < 172) + { + gRegionMap->unk6A = 1; + event = INPUT_EVENT_DPAD; + } + + if (gMain.newKeys & A_BUTTON) + event = INPUT_EVENT_A_BUTTON; + if (gMain.newKeys & B_BUTTON) + event = INPUT_EVENT_B_BUTTON; + + if (event == INPUT_EVENT_DPAD) + { + gRegionMap->inputCallback = sub_80FADE4; + gRegionMap->unk6C = 0; + } + return event; +} + +static u8 sub_80FADE4(void) +{ + gRegionMap->scrollY += gRegionMap->unk68; + gRegionMap->scrollX += gRegionMap->unk6A; + sub_80FB238(gRegionMap->scrollX, gRegionMap->scrollY); + gRegionMap->unk6C++; + if (gRegionMap->unk6C == 8) + { + u16 r3 = (gRegionMap->scrollX + 44) / 8 + 1; + u16 r1 = (gRegionMap->scrollY + 52) / 8 + 2; + + if (r3 != gRegionMap->unk64 || r1 != gRegionMap->unk66) + { + u16 mapSecId; + + gRegionMap->unk64 = r3; + gRegionMap->unk66 = r1; + mapSecId = GetRegionMapSectionAt(r3, r1); + gRegionMap->unk16 = sub_80FB758(mapSecId); + if (mapSecId != gRegionMap->mapSecId) + { + gRegionMap->mapSecId = mapSecId; + GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16); + } + sub_80FBA18(); + } + gRegionMap->unk6C = 0; + gRegionMap->inputCallback = sub_80FAD04; + return INPUT_EVENT_3; + } + return INPUT_EVENT_2; +} + +void sub_80FAEC4(void) +{ + if (gRegionMap->zoomed == FALSE) + { + gRegionMap->scrollY = 0; + gRegionMap->scrollX = 0; + gRegionMap->unk40 = 0; + gRegionMap->unk3C = 0; + gRegionMap->unk60 = gRegionMap->cursorPosX * 8 - 52; + gRegionMap->unk62 = gRegionMap->cursorPosY * 8 - 68; + gRegionMap->unk44 = (gRegionMap->unk60 << 8) / 16; + gRegionMap->unk48 = (gRegionMap->unk62 << 8) / 16; + gRegionMap->unk64 = gRegionMap->cursorPosX; + gRegionMap->unk66 = gRegionMap->cursorPosY; + gRegionMap->unk4C = (256 << 8); + gRegionMap->unk50 = -0x800; + } + else + { + gRegionMap->unk3C = gRegionMap->scrollX * 256; + gRegionMap->unk40 = gRegionMap->scrollY * 256; + gRegionMap->unk60 = 0; + gRegionMap->unk62 = 0; + gRegionMap->unk44 = -(gRegionMap->unk3C / 16); + gRegionMap->unk48 = -(gRegionMap->unk40 / 16); + gRegionMap->cursorPosX = gRegionMap->unk64; + gRegionMap->cursorPosY = gRegionMap->unk66; + gRegionMap->unk4C = (128 << 8); + gRegionMap->unk50 = 0x800; + } + gRegionMap->unk6E = 0; + sub_80FBCA0(); + sub_80FBDF8(); +} + +u8 sub_80FAFC0(void) +{ + u8 r4; + + if (gRegionMap->unk6E >= 16) + return 0; + gRegionMap->unk6E++; + if (gRegionMap->unk6E == 16) + { + gRegionMap->unk44 = 0; + gRegionMap->unk48 = 0; + gRegionMap->scrollX = gRegionMap->unk60; + gRegionMap->scrollY = gRegionMap->unk62; + gRegionMap->unk4C = (gRegionMap->zoomed == FALSE) ? (128 << 8) : (256 << 8); + gRegionMap->zoomed = !gRegionMap->zoomed; + gRegionMap->inputCallback = (gRegionMap->zoomed == FALSE) ? sub_80FAB78 : sub_80FAD04; + CreateRegionMapCursor(gRegionMap->cursorTileTag, gRegionMap->cursorPaletteTag); + sub_80FBE24(); + r4 = 0; + } + else + { + gRegionMap->unk3C += gRegionMap->unk44; + gRegionMap->unk40 += gRegionMap->unk48; + gRegionMap->scrollX = gRegionMap->unk3C >> 8; + gRegionMap->scrollY = gRegionMap->unk40 >> 8; + gRegionMap->unk4C += gRegionMap->unk50; + if ((gRegionMap->unk44 < 0 && gRegionMap->scrollX < gRegionMap->unk60) + || (gRegionMap->unk44 > 0 && gRegionMap->scrollX > gRegionMap->unk60)) + { + gRegionMap->scrollX = gRegionMap->unk60; + gRegionMap->unk44 = 0; + } + if ((gRegionMap->unk48 < 0 && gRegionMap->scrollY < gRegionMap->unk62) + || (gRegionMap->unk48 > 0 && gRegionMap->scrollY > gRegionMap->unk62)) + { + gRegionMap->scrollY = gRegionMap->unk62; + gRegionMap->unk48 = 0; + } + if (gRegionMap->zoomed == FALSE) + { + if (gRegionMap->unk4C < (128 << 8)) + { + gRegionMap->unk4C = (128 << 8); + gRegionMap->unk50 = 0; + } + } + else + { + if (gRegionMap->unk4C > (256 << 8)) + { + gRegionMap->unk4C = (256 << 8); + gRegionMap->unk50 = 0; + } + } + r4 = 1; + } + CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, gRegionMap->unk4C >> 8, gRegionMap->unk4C >> 8, 0); + return r4; +} + +static void CalcZoomScrollParams(s16 a, s16 b, s16 c, s16 d, u16 e, u16 f, u8 rotation) +{ + s32 var1; + s32 var2; + s32 var3; + s32 var4; + + gRegionMap->unk2C = e * gSineTable[rotation + 64] >> 8; + gRegionMap->unk30 = e * -gSineTable[rotation] >> 8; + gRegionMap->unk34 = f * gSineTable[rotation] >> 8; + gRegionMap->unk38 = f * gSineTable[rotation + 64] >> 8; + + var1 = (a << 8) + (c << 8); + var2 = d * gRegionMap->unk34 + gRegionMap->unk2C * c; + gRegionMap->bg2x = var1 - var2; + + var3 = (b << 8) + (d << 8); + var4 = gRegionMap->unk38 * d + gRegionMap->unk30 * c; + gRegionMap->bg2y = var3 - var4; + + gRegionMap->needUpdateVideoRegs = TRUE; +} + +static void sub_80FB238(s16 x, s16 y) +{ + gRegionMap->bg2x = (0x1C << 8) + (x << 8); + gRegionMap->bg2y = (0x24 << 8) + (y << 8); + gRegionMap->needUpdateVideoRegs = TRUE; +} + +void UpdateRegionMapVideoRegs(void) +{ + if (gRegionMap->needUpdateVideoRegs) + { + REG_BG2PA = gRegionMap->unk2C; + REG_BG2PB = gRegionMap->unk34; + REG_BG2PC = gRegionMap->unk30; + REG_BG2PD = gRegionMap->unk38; + REG_BG2X = gRegionMap->bg2x; + REG_BG2Y = gRegionMap->bg2y; + gRegionMap->needUpdateVideoRegs = FALSE; + } +} + +void sub_80FB2A4(s16 a, s16 b) +{ + CalcZoomScrollParams(a, b, 0x38, 0x48, 0x100, 0x100, 0); + UpdateRegionMapVideoRegs(); + if (gRegionMap->playerIconSprite != NULL) + { + gRegionMap->playerIconSprite->pos2.x = -a; + gRegionMap->playerIconSprite->pos2.y = -b; + } +} + +static u16 GetRegionMapSectionAt(u16 x, u16 y) +{ + if (y < MAPCURSOR_Y_MIN || y > MAPCURSOR_Y_MAX || x < MAPCURSOR_X_MIN || x > MAPCURSOR_X_MAX) + return MAPSEC_NONE; + y -= MAPCURSOR_Y_MIN; + x -= MAPCURSOR_X_MIN; + return sRegionMapLayout[x + y * 28]; +} + +static void InitializeCursorPosition(void) +{ + struct MapHeader *mapHeader; + u16 mapWidth; + u16 mapHeight; + u16 x; + u16 y; + u16 r1; + u16 r9; + + if (gSaveBlock1.location.mapGroup == 25 + && (gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_CORRIDOR + || gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_LOWER_DECK + || gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_ROOMS)) + { + sub_80FB600(); + return; + } + + switch (get_map_light_level_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) - 1) + { + default: + case 0: + case 1: + case 2: + case 4: + case 5: + gRegionMap->mapSecId = gMapHeader.regionMapSectionId; + gRegionMap->playerIsInCave = FALSE; + mapWidth = gMapHeader.mapData->width; + mapHeight = gMapHeader.mapData->height; + x = gSaveBlock1.pos.x; + y = gSaveBlock1.pos.y; + if (gRegionMap->mapSecId == MAPSEC_UNDERWATER6) + gRegionMap->playerIsInCave = TRUE; + break; + case 3: + case 6: + mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1.warp4.mapGroup, gSaveBlock1.warp4.mapNum); + gRegionMap->mapSecId = mapHeader->regionMapSectionId; + gRegionMap->playerIsInCave = TRUE; + mapWidth = mapHeader->mapData->width; + mapHeight = mapHeader->mapData->height; + x = gSaveBlock1.warp4.x; + y = gSaveBlock1.warp4.y; + break; + case 8: + mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum); + gRegionMap->mapSecId = mapHeader->regionMapSectionId; + gRegionMap->playerIsInCave = TRUE; + mapWidth = mapHeader->mapData->width; + mapHeight = mapHeader->mapData->height; + x = gSaveBlock1.warp2.x; + y = gSaveBlock1.warp2.y; + break; + case 7: + { + struct WarpData *r4; + + gRegionMap->mapSecId = gMapHeader.regionMapSectionId; + if (gRegionMap->mapSecId != MAPSEC_UNK_0x57) + { + r4 = &gSaveBlock1.warp4; + mapHeader = get_mapheader_by_bank_and_number(r4->mapGroup, r4->mapNum); + } + else + { + r4 = &gSaveBlock1.warp2; + mapHeader = get_mapheader_by_bank_and_number(r4->mapGroup, r4->mapNum); + gRegionMap->mapSecId = mapHeader->regionMapSectionId; + } + gRegionMap->playerIsInCave = FALSE; + mapWidth = mapHeader->mapData->width; + mapHeight = mapHeader->mapData->height; + x = r4->x; + y = r4->y; + } + break; + } + + r9 = x; + + r1 = mapWidth / gRegionMapLocations[gRegionMap->mapSecId].width; + if (r1 == 0) + r1 = 1; + x /= r1; + if (x >= gRegionMapLocations[gRegionMap->mapSecId].width) + x = gRegionMapLocations[gRegionMap->mapSecId].width - 1; + + r1 = mapHeight / gRegionMapLocations[gRegionMap->mapSecId].height; + if (r1 == 0) + r1 = 1; + y /= r1; + if (y >= gRegionMapLocations[gRegionMap->mapSecId].height) + y = gRegionMapLocations[gRegionMap->mapSecId].height - 1; + + switch (gRegionMap->mapSecId) + { + case MAPSEC_ROUTE_114: + if (y != 0) + x = 0; + break; + case MAPSEC_ROUTE_126: + case MAPSEC_UNDERWATER2: + x = 0; + if (gSaveBlock1.pos.x > 32) + x = 1; + if (gSaveBlock1.pos.x > 0x33) + x++; + y = 0; + if (gSaveBlock1.pos.y > 0x25) + y = 1; + if (gSaveBlock1.pos.y > 0x38) + y++; + break; + case MAPSEC_ROUTE_121: + x = 0; + if (r9 > 14) + x = 1; + if (r9 > 0x1C) + x++; + if (r9 > 0x36) + x++; + break; + } + gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; + gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; +} + +static void sub_80FB600(void) +{ + u16 y = 0; + u16 x = 0; + u8 mapGroup; + u8 mapNum; + s16 sp2; + s16 sp4; + + switch (GetSSTidalLocation(&mapGroup, &mapNum, &sp2, &sp4)) + { + case 1: + gRegionMap->mapSecId = MAPSEC_SLATEPORT_CITY; + break; + case 2: + gRegionMap->mapSecId = MAPSEC_LILYCOVE_CITY; + break; + case 3: + gRegionMap->mapSecId = MAPSEC_ROUTE_124; + break; + case 4: + gRegionMap->mapSecId = MAPSEC_ROUTE_131; + break; + default: + case 0: + { + struct MapHeader *mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum); + u16 r1; + + gRegionMap->mapSecId = mapHeader->regionMapSectionId; + r1 = mapHeader->mapData->width / gRegionMapLocations[gRegionMap->mapSecId].width; + if (r1 == 0) + r1 = 1; + x = sp2 / r1; + if (x >= gRegionMapLocations[gRegionMap->mapSecId].width) + x = gRegionMapLocations[gRegionMap->mapSecId].width - 1; + + r1 = mapHeader->mapData->height / gRegionMapLocations[gRegionMap->mapSecId].height; + if (r1 == 0) + r1 = 1; + y = sp4 / r1; + if (y >= gRegionMapLocations[gRegionMap->mapSecId].height) + y = gRegionMapLocations[gRegionMap->mapSecId].height - 1; + } + break; + } + gRegionMap->playerIsInCave = FALSE; + gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; + gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; +} + +static u16 sub_80FB758(u16 mapSecId) +{ + switch (mapSecId) + { + case MAPSEC_NONE: + return 0; + case MAPSEC_LITTLEROOT_TOWN: + return FlagGet(FLAG_VISITED_LITTLEROOT_TOWN) ? 2 : 3; + case MAPSEC_OLDALE_TOWN: + return FlagGet(FLAG_VISITED_OLDALE_TOWN) ? 2 : 3; + case MAPSEC_DEWFORD_TOWN: + return FlagGet(FLAG_VISITED_DEWFORD_TOWN) ? 2 : 3; + case MAPSEC_LAVARIDGE_TOWN: + return FlagGet(FLAG_VISITED_LAVARIDGE_TOWN) ? 2 : 3; + case MAPSEC_FALLARBOR_TOWN: + return FlagGet(FLAG_VISITED_FALLARBOR_TOWN) ? 2 : 3; + case MAPSEC_VERDANTURF_TOWN: + return FlagGet(FLAG_VISITED_VERDANTURF_TOWN) ? 2 : 3; + case MAPSEC_PACIFIDLOG_TOWN: + return FlagGet(FLAG_VISITED_PACIFIDLOG_TOWN) ? 2 : 3; + case MAPSEC_PETALBURG_CITY: + return FlagGet(FLAG_VISITED_PETALBURG_CITY) ? 2 : 3; + case MAPSEC_SLATEPORT_CITY: + return FlagGet(FLAG_VISITED_SLATEPORT_CITY) ? 2 : 3; + case MAPSEC_MAUVILLE_CITY: + return FlagGet(FLAG_VISITED_MAUVILLE_CITY) ? 2 : 3; + case MAPSEC_RUSTBORO_CITY: + return FlagGet(FLAG_VISITED_RUSTBORO_CITY) ? 2 : 3; + case MAPSEC_FORTREE_CITY: + return FlagGet(FLAG_VISITED_FORTREE_CITY) ? 2 : 3; + case MAPSEC_LILYCOVE_CITY: + return FlagGet(FLAG_VISITED_LILYCOVE_CITY) ? 2 : 3; + case MAPSEC_MOSSDEEP_CITY: + return FlagGet(FLAG_VISITED_MOSSDEEP_CITY) ? 2 : 3; + case MAPSEC_SOOTOPOLIS_CITY: + return FlagGet(FLAG_VISITED_SOOTOPOLIS_CITY) ? 2 : 3; + case MAPSEC_EVER_GRANDE_CITY: + return FlagGet(FLAG_VISITED_EVER_GRANDE_CITY) ? 2 : 3; + + case MAPSEC_BATTLE_TOWER: + return FlagGet(FLAG_UNLOCK_BATTLE_TOWER) ? 4 : 0; + case MAPSEC_SOUTHERN_ISLAND: + return FlagGet(FLAG_UNLOCK_SOUTHERN_ISLAND) ? 1 : 0; + default: + return 1; + } +} + +u16 GetRegionMapSectionAt_(u16 x, u16 y) +{ + return GetRegionMapSectionAt(x, y); +} + +static u16 sub_80FB9C0(u16 mapSecId) +{ + u16 i; + + for (i = 0; gUnknown_083E7684[i][0] != MAPSEC_NONE; i++) + { + if (gUnknown_083E7684[i][0] == mapSecId) + return gUnknown_083E7684[i][1]; + } + return mapSecId; +} + +u16 sub_80FBA04(u16 mapSecId) +{ + return sub_80FB9C0(mapSecId); +} + +static void sub_80FBA18(void) +{ + u16 x; + u16 y; + u16 i; + + if (gRegionMap->mapSecId == MAPSEC_NONE) + { + gRegionMap->everGrandeCityArea = 0; + return; + } + + if (gRegionMap->zoomed == FALSE) + { + x = gRegionMap->cursorPosX; + y = gRegionMap->cursorPosY; + } + else + { + x = gRegionMap->unk64; + y = gRegionMap->unk66; + } + + i = 0; + while (1) + { + if (x <= 1) + { + if (sub_80FBAA0(y)) + { + y--; + x = 0x1D; + } + else + { + break; + } + } + else + { + x--; + if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSecId) + i++; + } + } + + gRegionMap->everGrandeCityArea = i; +} + +static bool8 sub_80FBAA0(u16 a) +{ + u16 x; + u16 y; + + y = a - 1; + if (y == 0xFFFF) + return FALSE; + + for (x = MAPCURSOR_X_MIN; x <= MAPCURSOR_X_MAX; x++) + { + if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSecId) + return TRUE; + } + return FALSE; +} + +static const struct OamData sCursorOamData = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sCursorAnimSeq0[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(4, 20), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sCursorAnimSeq1[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(16, 10), + ANIMCMD_FRAME(32, 10), + ANIMCMD_FRAME(16, 10), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const sCursorAnimTable[] = +{ + sCursorAnimSeq0, + sCursorAnimSeq1, +}; + +static void SpriteCB_Cursor(struct Sprite *sprite) +{ + if (gRegionMap->unk7A != 0) + { + sprite->pos1.x += gRegionMap->cursorDeltaX * 2; + sprite->pos1.y += gRegionMap->cursorDeltaY * 2; + gRegionMap->unk7A--; + } +} + +static void nullsub_66(struct Sprite *sprite) +{ +} + +void CreateRegionMapCursor(u16 tileTag, u16 paletteTag) +{ + u8 spriteId; + struct SpriteSheet spriteSheet; + struct SpritePalette spritePalette = + { + .data = sRegionMapCursor_Pal, + }; + struct SpriteTemplate spriteTemplate = + { + .oam = &sCursorOamData, + .anims = sCursorAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_Cursor, + }; + + spriteSheet.tag = tileTag; + spriteTemplate.tileTag = tileTag; + gRegionMap->cursorTileTag = tileTag; + + spritePalette.tag = paletteTag; + spriteTemplate.paletteTag = paletteTag; + gRegionMap->cursorPaletteTag = paletteTag; + + if (gRegionMap->zoomed == FALSE) + { + spriteSheet.data = gRegionMap->cursorSmallImage; + spriteSheet.size = 0x100; + spriteTemplate.callback = SpriteCB_Cursor; + } + else + { + spriteSheet.data = gRegionMap->cursorLargeImage; + spriteSheet.size = 0x600; + spriteTemplate.callback = nullsub_66; + } + LoadSpriteSheet(&spriteSheet); + LoadSpritePalette(&spritePalette); + spriteId = CreateSprite(&spriteTemplate, 0x38, 0x48, 0); + if (spriteId != 64) + { + gRegionMap->cursorSprite = &gSprites[spriteId]; + if (gRegionMap->zoomed == TRUE) + { + gRegionMap->cursorSprite->oam.size = 2; + gRegionMap->cursorSprite->pos1.x -= 8; + gRegionMap->cursorSprite->pos1.y -= 8; + StartSpriteAnim(gRegionMap->cursorSprite, 1); + } + else + { + gRegionMap->cursorSprite->oam.size = 1; + gRegionMap->cursorSprite->pos1.x = gRegionMap->cursorPosX * 8 + 4; + gRegionMap->cursorSprite->pos1.y = gRegionMap->cursorPosY * 8 + 4; + } + gRegionMap->cursorSprite->data1 = 2; + gRegionMap->cursorSprite->data2 = IndexOfSpritePaletteTag(paletteTag) * 16 + 0x0101; + gRegionMap->cursorSprite->data3 = 1; + } +} + +static void sub_80FBCA0(void) +{ + if (gRegionMap->cursorSprite != NULL) + { + DestroySprite(gRegionMap->cursorSprite); + FreeSpriteTilesByTag(gRegionMap->cursorTileTag); + FreeSpritePaletteByTag(gRegionMap->cursorPaletteTag); + } +} + +void unref_sub_80FBCD0(void) +{ + gRegionMap->cursorSprite->data3 = 1; +} + +void unref_sub_80FBCE0(void) +{ + gRegionMap->cursorSprite->data3 = 0; +} + +static const struct OamData sPlayerIconOamData = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sPlayerIconAnimSeq0[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +static const union AnimCmd *const sPlayerIconAnimTable[] = +{ + sPlayerIconAnimSeq0, +}; + +void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag) +{ + u8 spriteId; + struct SpriteSheet playerIconSpriteSheet = + { + .data = sRegionMapBrendanIcon_Image, + .size = 128, + .tag = tileTag, + }; + struct SpritePalette playerIconSpritePalette = + { + .data = sRegionMapBrendanIcon_Pal, + .tag = paletteTag, + }; + struct SpriteTemplate playerIconSpriteTemplate = + { + .tileTag = tileTag, + .paletteTag = paletteTag, + .oam = &sPlayerIconOamData, + .anims = sPlayerIconAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + + if (gSaveBlock2.playerGender == FEMALE) + { + playerIconSpriteSheet.data = sRegionMapMayIcon_Image; + playerIconSpritePalette.data = sRegionMapMayIcon_Pal; + } + LoadSpriteSheet(&playerIconSpriteSheet); + LoadSpritePalette(&playerIconSpritePalette); + spriteId = CreateSprite(&playerIconSpriteTemplate, 0, 0, 1); + gRegionMap->playerIconSprite = &gSprites[spriteId]; + if (gRegionMap->zoomed == FALSE) + { + gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 8 + 4; + gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 8 + 4; + gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedOut; + } + else + { + gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 16 - 48; + gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 16 - 66; + gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedIn; + } +} + +static void sub_80FBDF8(void) +{ + if (gRegionMap->playerIconSprite != NULL) + { + gRegionMap->playerIconSprite->invisible = TRUE; + gRegionMap->playerIconSprite->callback = SpriteCallbackDummy; + } +} + +static void sub_80FBE24(void) +{ + if (gRegionMap->playerIconSprite != NULL) + { + if (gRegionMap->zoomed == TRUE) + { + gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 16 - 48; + gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 16 - 66; + gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedIn; + gRegionMap->playerIconSprite->invisible = FALSE; + } + else + { + gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 8 + 4; + gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 8 + 4; + gRegionMap->playerIconSprite->pos2.x = 0; + gRegionMap->playerIconSprite->pos2.y = 0; + gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedOut; + gRegionMap->playerIconSprite->invisible = FALSE; + } + } +} + +static void SpriteCB_PlayerIconZoomedIn(struct Sprite *sprite) +{ + sprite->pos2.x = -(gRegionMap->scrollX * 2); + sprite->pos2.y = -(gRegionMap->scrollY * 2); + sprite->data0 = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; + sprite->data1 = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; + + // Determine if sprite is on screen + if (sprite->data0 < -8 || sprite->data0 > 0xA8 || sprite->data1 < -8 || sprite->data1 > 0xF8) + sprite->data2 = FALSE; + else + sprite->data2 = TRUE; + + if (sprite->data2 == TRUE) + UpdateIconBlink(sprite); + else + sprite->invisible = TRUE; +} + +static void SpriteCB_PlayerIconZoomedOut(struct Sprite *sprite) +{ + UpdateIconBlink(sprite); +} + +static void UpdateIconBlink(struct Sprite *sprite) +{ + if (gRegionMap->blinkPlayerIcon) + { + // Toggle visibility every 16 frames + sprite->data7++; + if (sprite->data7 > 16) + { + sprite->data7 = 0; + sprite->invisible = !sprite->invisible; + } + } + else + { + sprite->invisible = FALSE; + } +} + +void sub_80FBF94(void) +{ + if (gRegionMap->playerIsInCave) + gRegionMap->blinkPlayerIcon = TRUE; +} + +const u8 *GetMapSectionName(u8 *dest, u16 mapSecId, u16 length) +{ + if (mapSecId == MAPSEC_SECRET_BASE) + return GetSecretBaseMapName(dest); + if (mapSecId < MAPSEC_NONE) + return StringCopy(dest, gRegionMapLocations[mapSecId].regionMapSectionId); + if (length == 0) + length = 18; + return StringFill(dest, CHAR_SPACE, length); +} + +const u8 *CopyMapName(u8 *dest, u16 mapSecId) +{ + switch (mapSecId) + { + case MAPSEC_UNK_0x57: + return StringCopy(dest, gOtherText_Ferry); + case MAPSEC_SECRET_BASE: + return StringCopy(dest, gOtherText_SecretBase); + default: + return GetMapSectionName(dest, mapSecId, 0); + } +} + +const u8 *CopyLocationName(u8 *dest, u16 mapSecId) +{ + if (mapSecId == MAPSEC_EVIL_TEAM_HIDEOUT) + return StringCopy(dest, gOtherText_Hideout); + else + return CopyMapName(dest, mapSecId); +} + +static void GetRegionMapLocationPosition(u16 mapSecId, u16 *x, u16 *y, u16 *width, u16 *height) +{ + *x = gRegionMapLocations[mapSecId].x; + *y = gRegionMapLocations[mapSecId].y; + *width = gRegionMapLocations[mapSecId].width; + *height = gRegionMapLocations[mapSecId].height; +} + +struct UnknownStruct3 +{ + void (*unk0)(void); + u16 unk4; + u16 unk6; + struct RegionMap regionMap; +}; + +extern u8 ewram[]; +#define ewram0 (*(struct UnknownStruct3 *)(ewram + 0)) +#define ewram888 (ewram + 0x888) +#define ewramA6E (ewram[0xA6E]) +#define ewramBlankMapName (ewram + 0xA48) + +static const u16 sFlyRegionMapFrame_Pal[] = INCBIN_U16("graphics/pokenav/map_frame.gbapal"); +static const u8 sFlyRegionMapFrame_ImageLZ[] = INCBIN_U8("graphics/pokenav/map_frame.4bpp.lz"); +static const u8 sFlyRegionMapFrame_TilemapLZ[] = INCBIN_U8("graphics/pokenav/map_frame.bin.lz"); +static const u16 sFlyTargetIcons_Pal[] = INCBIN_U16("graphics/pokenav/fly_target_icons.gbapal"); +static const u8 sFlyTargetIcons_ImageLZ[] = INCBIN_U8("graphics/pokenav/fly_target_icons.4bpp.lz"); + +static const u8 sUnknown_083E7920[][3] = +{ + {0, 9, 1}, + {0, 10, 14}, + {0, 11, 15}, + {0, 12, 16}, + {0, 13, 17}, + {0, 14, 18}, + {0, 15, 19}, + {0, 0, 3}, + {0, 1, 4}, + {0, 2, 5}, + {0, 3, 6}, + {0, 4, 7}, + {0, 5, 8}, + {0, 6, 9}, + {0, 7, 10}, + {0, 8, 11}, + {0, 16, 0}, + {0, 17, 0}, + {0, 18, 0}, + {0, 19, 0}, + {0, 20, 0}, + {0, 21, 0}, + {0, 22, 0}, + {0, 23, 0}, + {0, 24, 0}, + {0, 25, 0}, + {0, 26, 0}, + {0, 27, 0}, + {0, 28, 0}, + {0, 29, 0}, + {0, 30, 0}, + {0, 31, 0}, + {0, 32, 0}, + {0, 33, 0}, + {0, 34, 0}, + {0, 35, 0}, + {0, 36, 0}, + {0, 37, 0}, + {0, 38, 0}, + {0, 39, 0}, + {0, 40, 0}, + {0, 41, 0}, + {0, 42, 0}, + {0, 43, 0}, + {0, 44, 0}, + {0, 45, 0}, + {0, 46, 0}, + {0, 47, 0}, + {0, 48, 0}, + {0, 49, 0}, +}; + +struct UnknownStruct4 +{ + const u8 *const *unk0; + u16 mapSecId; + u16 flag; +}; + +static const u8 *const sEverGrandeCityAreaNames[] = {OtherText_PokeLeague, OtherText_PokeCenter}; + +static const struct UnknownStruct4 sUnknown_083E79C0[1] = +{ + {sEverGrandeCityAreaNames, MAPSEC_EVER_GRANDE_CITY, SYS_POKEMON_LEAGUE_FLY}, +}; + +// XXX: what is this? +static u8 *const ewram_ = ewram; + +static const struct SpritePalette sFlyTargetIconSpritePalette = {sFlyTargetIcons_Pal, 2}; + +// Fly targets that are not cities or towns +static const u16 sSpecialFlyAreas[][2] = +{ + // flag, mapSecId + {0x848, MAPSEC_BATTLE_TOWER}, + {0xFFFF, MAPSEC_NONE}, +}; + +static const struct OamData sFlyTargetOamData = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sFlyTargetAnimSeq0[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +static const union AnimCmd sFlyTargetAnimSeq1[] = +{ + ANIMCMD_FRAME(1, 5), + ANIMCMD_END, +}; + +static const union AnimCmd sFlyTargetAnimSeq2[] = +{ + ANIMCMD_FRAME(3, 5), + ANIMCMD_END, +}; + +static const union AnimCmd sFlyTargetAnimSeq3[] = +{ + ANIMCMD_FRAME(5, 5), + ANIMCMD_END, +}; + +static const union AnimCmd sFlyTargetAnimSeq4[] = +{ + ANIMCMD_FRAME(6, 5), + ANIMCMD_END, +}; + +static const union AnimCmd sFlyTargetAnimSeq5[] = +{ + ANIMCMD_FRAME(8, 5), + ANIMCMD_END, +}; + +static const union AnimCmd sFlyTargetAnimSeq6[] = +{ + ANIMCMD_FRAME(10, 5), + ANIMCMD_END, +}; + +static const union AnimCmd *const sFlyTargetAnimTable[] = +{ + sFlyTargetAnimSeq0, + sFlyTargetAnimSeq1, + sFlyTargetAnimSeq2, + sFlyTargetAnimSeq3, + sFlyTargetAnimSeq4, + sFlyTargetAnimSeq5, + sFlyTargetAnimSeq6, +}; + +static const struct SpriteTemplate gFlyTargetSpriteTemplate = +{ + .tileTag = 2, + .paletteTag = 2, + .oam = &sFlyTargetOamData, + .anims = sFlyTargetAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +void CB2_InitFlyRegionMap(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + REG_DISPCNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2VOFS = 0; + REG_BG2HOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + ResetPaletteFade(); + ResetSpriteData(); + FreeSpriteTileRanges(); + FreeAllSpritePalettes(); + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E7224); + break; + case 2: + InitMenuWindow(&gWindowConfig_81E7224); + MenuZeroFillScreen(); + break; + case 3: + InitRegionMap(&ewram0.regionMap, 0); + CreateRegionMapCursor(0, 0); + CreateRegionMapPlayerIcon(1, 1); + ewram0.unk6 = ewram0.regionMap.mapSecId; + StringFill(ewramBlankMapName, CHAR_SPACE, 12); + PrintFlyTargetName(); + break; + case 4: + LZ77UnCompVram(sFlyRegionMapFrame_ImageLZ, (void *)(VRAM + 0xC000)); + break; + case 5: + LZ77UnCompVram(sFlyRegionMapFrame_TilemapLZ, (void *)(VRAM + 0xF000)); + break; + case 6: + LoadPalette(sFlyRegionMapFrame_Pal, 16, 32); + MenuPrint_PixelCoords(gOtherText_FlyToWhere, 1, 0x90, 1); + break; + case 7: + CreateFlyTargetGraphics(); + break; + case 8: + BlendPalettes(0xFFFFFFFF, 16, 0); + SetVBlankCallback(VBlankCB_FlyRegionMap); + break; + case 9: + REG_BLDCNT = 0; + REG_BG1CNT = 0x1E0D; + REG_DISPCNT = 0x1741; + sub_80FC244(sub_80FC5B4); + SetMainCallback2(CB2_FlyRegionMap); + break; + default: + return; + } + gMain.state++; +} + +static void VBlankCB_FlyRegionMap(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void CB2_FlyRegionMap(void) +{ + ewram0.unk0(); + AnimateSprites(); + BuildOamBuffer(); +} + +static void sub_80FC244(void (*func)(void)) +{ + ewram0.unk0 = func; + ewram0.unk4 = 0; +} + +static void PrintFlyTargetName(void) +{ + if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4) + { + u16 i = 0; + int zero; + + for (i = 0; i < ARRAY_COUNT(sUnknown_083E79C0); i++) + { + const struct UnknownStruct4 *r4 = &sUnknown_083E79C0[i]; + + if (ewram0.regionMap.mapSecId == r4->mapSecId) + { + if (FlagGet(r4->flag)) + { + MenuDrawTextWindow(16, 14, 29, 19); + MenuPrint(ewram0.regionMap.mapSecName, 17, 15); + MenuPrint_RightAligned(r4->unk0[ewram0.regionMap.everGrandeCityArea], 29, 17); + return; + } + break; + } + } + // This check is always true, but somehow the compiler still performed it. + asm("mov %0, #0\n":"=r"(zero)); // zero = 0 + if (zero == 0) + { + MenuDrawTextWindow(16, 16, 29, 19); + MenuPrint(ewram0.regionMap.mapSecName, 17, 17); + MenuZeroFillWindowRect(16, 14, 29, 15); + } + } + else + { + MenuDrawTextWindow(16, 16, 29, 19); + MenuPrint(ewramBlankMapName, 17, 17); + MenuZeroFillWindowRect(16, 14, 29, 15); + } +} + +static void CreateFlyTargetGraphics(void) +{ + struct SpriteSheet spriteSheet; + + LZ77UnCompWram(sFlyTargetIcons_ImageLZ, ewram888); + spriteSheet.data = ewram888; + spriteSheet.size = 0x1C0; + spriteSheet.tag = 2; + LoadSpriteSheet(&spriteSheet); + LoadSpritePalette(&sFlyTargetIconSpritePalette); + CreateCityTownFlyTargetIcons(); + CreateSpecialAreaFlyTargetIcons(); +} + +// Draws a light overlay on cities and towns that the player can fly to +static void CreateCityTownFlyTargetIcons(void) +{ + u16 canFlyFlag = 0x80F; + u16 i; + + for (i = 0; i < 16; i++) + { + u16 x; + u16 y; + u16 width; + u16 height; + u16 r7; + u8 spriteId; + + GetRegionMapLocationPosition(i, &x, &y, &width, &height); + x = (x + 1) * 8 + 4; + y = (y + 2) * 8 + 4; + if (width == 2) + r7 = 1; + else if (height == 2) + r7 = 2; + else + r7 = 0; + spriteId = CreateSprite(&gFlyTargetSpriteTemplate, x, y, 10); + if (spriteId != 64) + { + gSprites[spriteId].oam.shape = r7; + if (FlagGet(canFlyFlag)) + gSprites[spriteId].callback = SpriteCB_FlyTargetIcons; + else + r7 += 3; + StartSpriteAnim(&gSprites[spriteId], r7); + gSprites[spriteId].data0 = i; + } + canFlyFlag++; + } +} + +// Draws a red box on other fly targets +// The Battle Tower is the only one of these +static void CreateSpecialAreaFlyTargetIcons(void) +{ + u16 i; + + for (i = 0; sSpecialFlyAreas[i][1] != MAPSEC_NONE; i++) + { + u16 x; + u16 y; + u16 width; + u16 height; + + if (FlagGet(sSpecialFlyAreas[i][0])) + { + u16 mapSecId = sSpecialFlyAreas[i][1]; + u8 spriteId; + + GetRegionMapLocationPosition(mapSecId, &x, &y, &width, &height); + x = (x + 1) * 8; + y = (y + 2) * 8; + spriteId = CreateSprite(&gFlyTargetSpriteTemplate, x, y, 10); + if (spriteId != 64) + { + gSprites[spriteId].oam.size = 1; + gSprites[spriteId].callback = SpriteCB_FlyTargetIcons; + StartSpriteAnim(&gSprites[spriteId], 6); + gSprites[spriteId].data0 = mapSecId; + } + } + } +} + +static void SpriteCB_FlyTargetIcons(struct Sprite *sprite) +{ + // Blink if our mapSecId is the one selected on the map + if (ewram0.regionMap.mapSecId == sprite->data0) + { + // Toggle visibility every 16 frames + sprite->data1++; + if (sprite->data1 > 16) + { + sprite->data1 = 0; + sprite->invisible = !sprite->invisible; + } + } + else + { + sprite->data1 = 16; + sprite->invisible = FALSE; + } +} + +static void sub_80FC5B4(void) +{ + switch (ewram0.unk4) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + ewram0.unk4++; + break; + case 1: + if (UpdatePaletteFade() != 0) + break; + sub_80FC244(sub_80FC600); + break; + } +} + +static void sub_80FC600(void) +{ + if (ewram0.unk4 == 0) + { + switch (sub_80FAB60()) + { + case INPUT_EVENT_NONE: + case INPUT_EVENT_DPAD: + case INPUT_EVENT_2: + break; + case INPUT_EVENT_3: + PrintFlyTargetName(); + break; + case INPUT_EVENT_A_BUTTON: + if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4) + { + m4aSongNumStart(SE_SELECT); + ewramA6E = 1; + sub_80FC244(sub_80FC69C); + } + break; + case INPUT_EVENT_B_BUTTON: + m4aSongNumStart(SE_SELECT); + ewramA6E = 0; + sub_80FC244(sub_80FC69C); + break; + } + } +} + +static void sub_80FC69C(void) +{ + switch (ewram0.unk4) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + ewram0.unk4++; + break; + case 1: + if (UpdatePaletteFade() != 0) + break; + FreeRegionMapIconResources(); + if (ewramA6E != 0) + { + switch (ewram0.regionMap.mapSecId) + { + case MAPSEC_SOUTHERN_ISLAND: + sub_8053538(22); + break; + case MAPSEC_BATTLE_TOWER: + sub_8053538(21); + break; + case MAPSEC_LITTLEROOT_TOWN: + sub_8053538((gSaveBlock2.playerGender == MALE) ? 12 : 13); + break; + case MAPSEC_EVER_GRANDE_CITY: + sub_8053538((FlagGet(0x854) && ewram0.regionMap.everGrandeCityArea == 0) ? 20 : 11); + break; + default: + if (sUnknown_083E7920[ewram0.regionMap.mapSecId][2] != 0) + sub_8053538(sUnknown_083E7920[ewram0.regionMap.mapSecId][2]); + else + warp1_set_2(sUnknown_083E7920[ewram0.regionMap.mapSecId][0], sUnknown_083E7920[ewram0.regionMap.mapSecId][1], -1); + break; + } + sub_80865BC(); + } + else + { + SetMainCallback2(sub_808AD58); + } + break; + } +} diff --git a/src/field/roamer.c b/src/field/roamer.c new file mode 100644 index 000000000..948828d5e --- /dev/null +++ b/src/field/roamer.c @@ -0,0 +1,226 @@ +#include "global.h" +#include "roamer.h" +#include "pokemon.h" +#include "rng.h" +#include "species.h" + +#ifdef SAPPHIRE +#define ROAMER_SPECIES SPECIES_LATIAS +#else +#define ROAMER_SPECIES SPECIES_LATIOS +#endif + +enum +{ + MAP_GRP = 0, // map group + MAP_NUM = 1, // map number +}; + +EWRAM_DATA static u8 sLocationHistory[3][2] = {0}; +EWRAM_DATA static u8 sRoamerLocation[2] = {0}; + +static const u8 sRoamerLocations[][6] = +{ + { 0x19, 0x1A, 0x20, 0x21, 0x31, 0xFF }, + { 0x1A, 0x19, 0x20, 0x21, 0xFF, 0xFF }, + { 0x20, 0x1A, 0x19, 0x21, 0xFF, 0xFF }, + { 0x21, 0x20, 0x19, 0x1A, 0x22, 0x26 }, + { 0x22, 0x21, 0x23, 0xFF, 0xFF, 0xFF }, + { 0x23, 0x22, 0x24, 0xFF, 0xFF, 0xFF }, + { 0x24, 0x23, 0x25, 0x26, 0xFF, 0xFF }, + { 0x25, 0x24, 0x26, 0xFF, 0xFF, 0xFF }, + { 0x26, 0x25, 0x21, 0xFF, 0xFF, 0xFF }, + { 0x27, 0x24, 0x28, 0x29, 0xFF, 0xFF }, + { 0x28, 0x27, 0x2A, 0xFF, 0xFF, 0xFF }, + { 0x29, 0x27, 0x2A, 0xFF, 0xFF, 0xFF }, + { 0x2A, 0x28, 0x29, 0x2B, 0xFF, 0xFF }, + { 0x2B, 0x2A, 0x2C, 0xFF, 0xFF, 0xFF }, + { 0x2C, 0x2B, 0x2D, 0xFF, 0xFF, 0xFF }, + { 0x2D, 0x2C, 0x2E, 0xFF, 0xFF, 0xFF }, + { 0x2E, 0x2D, 0x2F, 0xFF, 0xFF, 0xFF }, + { 0x2F, 0x2E, 0x30, 0xFF, 0xFF, 0xFF }, + { 0x30, 0x2F, 0x31, 0xFF, 0xFF, 0xFF }, + { 0x31, 0x30, 0x19, 0xFF, 0xFF, 0xFF }, + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, +}; + +void ClearRoamerData(void) +{ + memset(&gSaveBlock1.roamer, 0, sizeof(gSaveBlock1.roamer)); +} + +void ClearRoamerLocationData(void) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + sLocationHistory[i][MAP_GRP] = 0; + sLocationHistory[i][MAP_NUM] = 0; + } + + sRoamerLocation[MAP_GRP] = 0; + sRoamerLocation[MAP_NUM] = 0; +} + +void CreateInitialRoamerMon(void) +{ + struct Roamer *roamer; + CreateMon(&gEnemyParty[0], ROAMER_SPECIES, 40, 0x20, 0, 0, 0, 0); + roamer = &gSaveBlock1.roamer; + roamer->species = ROAMER_SPECIES; + roamer->level = 40; + roamer->status = 0; + roamer->active = TRUE; + roamer->ivs = GetMonData(&gEnemyParty[0], MON_DATA_IVS); + roamer->personality = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY); + roamer->hp = GetMonData(&gEnemyParty[0], MON_DATA_MAX_HP); + roamer->cool = GetMonData(&gEnemyParty[0], MON_DATA_COOL); + roamer->beauty = GetMonData(&gEnemyParty[0], MON_DATA_BEAUTY); + roamer->cute = GetMonData(&gEnemyParty[0], MON_DATA_CUTE); + roamer->smart = GetMonData(&gEnemyParty[0], MON_DATA_SMART); + roamer->tough = GetMonData(&gEnemyParty[0], MON_DATA_TOUGH); + sRoamerLocation[MAP_GRP] = 0; + sRoamerLocation[MAP_NUM] = sRoamerLocations[Random() % 20][0]; +} + +void InitRoamer(void) +{ + ClearRoamerData(); + ClearRoamerLocationData(); + CreateInitialRoamerMon(); +} + +void UpdateLocationHistoryForRoamer(void) +{ + sLocationHistory[2][MAP_GRP] = sLocationHistory[1][MAP_GRP]; + sLocationHistory[2][MAP_NUM] = sLocationHistory[1][MAP_NUM]; + + sLocationHistory[1][MAP_GRP] = sLocationHistory[0][MAP_GRP]; + sLocationHistory[1][MAP_NUM] = sLocationHistory[0][MAP_NUM]; + + sLocationHistory[0][MAP_GRP] = gSaveBlock1.location.mapGroup; + sLocationHistory[0][MAP_NUM] = gSaveBlock1.location.mapNum; +} + +void RoamerMoveToOtherLocationSet(void) +{ + u8 val = 0; + struct Roamer *roamer = &gSaveBlock1.roamer; + + if (!roamer->active) + return; + + sRoamerLocation[MAP_GRP] = val; + + while (1) + { + val = sRoamerLocations[Random() % 20][0]; + if (sRoamerLocation[MAP_NUM] != val) + { + sRoamerLocation[MAP_NUM] = val; + return; + } + } +} + +void RoamerMove(void) +{ + u8 locSet = 0; + + if ((Random() % 16) == 0) + { + RoamerMoveToOtherLocationSet(); + } + else + { + struct Roamer *roamer = &gSaveBlock1.roamer; + + if (!roamer->active) + return; + + while (locSet < 20) + { + if (sRoamerLocation[MAP_NUM] == sRoamerLocations[locSet][0]) + { + u8 mapNum; + while (1) + { + mapNum = sRoamerLocations[locSet][(Random() % 5) + 1]; + if (!(sLocationHistory[2][MAP_GRP] == 0 && sLocationHistory[2][MAP_NUM] == mapNum) && mapNum != 0xFF) + break; + } + sRoamerLocation[MAP_NUM] = mapNum; + return; + } + locSet++; + } + } +} + +bool8 IsRoamerAt(u8 mapGroup, u8 mapNum) +{ + struct Roamer *roamer = &gSaveBlock1.roamer; + + if (roamer->active && mapGroup == sRoamerLocation[MAP_GRP] && mapNum == sRoamerLocation[MAP_NUM]) + return TRUE; + else + return FALSE; +} + +void CreateRoamerMonInstance(void) +{ + struct Pokemon *mon = &gEnemyParty[0]; + struct Roamer *roamer = &gSaveBlock1.roamer; + CreateMonWithIVsPersonality(mon, roamer->species, roamer->level, roamer->ivs, roamer->personality); + SetMonData(mon, MON_DATA_STATUS, (u8 *)&roamer->status); + SetMonData(mon, MON_DATA_HP, (u8 *)&roamer->hp); + SetMonData(mon, MON_DATA_COOL, (u8 *)&roamer->cool); + SetMonData(mon, MON_DATA_BEAUTY, (u8 *)&roamer->beauty); + SetMonData(mon, MON_DATA_CUTE, (u8 *)&roamer->cute); + SetMonData(mon, MON_DATA_SMART, (u8 *)&roamer->smart); + SetMonData(mon, MON_DATA_TOUGH, (u8 *)&roamer->tough); +} + +bool8 TryStartRoamerEncounter(void) +{ + if (IsRoamerAt(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) == TRUE && (Random() % 4) == 0) + { + CreateRoamerMonInstance(); + return TRUE; + } + else + { + return FALSE; + } +} + +void UpdateRoamerHPStatus(struct Pokemon *mon) +{ + struct Roamer *roamer; + u16 hp; + u8 status; + + hp = GetMonData(mon, MON_DATA_HP); + + roamer = &gSaveBlock1.roamer; + roamer->hp = hp; + + status = GetMonData(mon, MON_DATA_STATUS); + + roamer->status = status; + + RoamerMoveToOtherLocationSet(); +} + +void SetRoamerInactive(void) +{ + struct Roamer *roamer = &gSaveBlock1.roamer; + roamer->active = FALSE; +} + +void GetRoamerLocation(u8 *mapGroup, u8 *mapNum) +{ + *mapGroup = sRoamerLocation[MAP_GRP]; + *mapNum = sRoamerLocation[MAP_NUM]; +} diff --git a/src/field/rotating_gate.c b/src/field/rotating_gate.c new file mode 100644 index 000000000..bb3c31dfc --- /dev/null +++ b/src/field/rotating_gate.c @@ -0,0 +1,1228 @@ +#include "global.h" +#include "bike.h" +#include "event_data.h" +#include "field_map_obj.h" +#include "fieldmap.h" +#include "map_constants.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" + +#define ROTATING_GATE_TILE_TAG 0x1300 +#define ROTATING_GATE_PUZZLE_MAX 14 +#define GATE_ARM_MAX_LENGTH 2 + +#define GATE_ROTATION(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 + +static void SpriteCallback_RotatingGate(struct Sprite *sprite); +static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY); +static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite); + +enum +{ + /* + * | + * +-- + */ + GATE_SHAPE_L1, + + /* + * | + * | + * +-- + */ + GATE_SHAPE_L2, + + /* + * | + * +---- + */ + GATE_SHAPE_L3, + + /* + * | + * | + * +---- + */ + GATE_SHAPE_L4, + + /* + * | + * +-- + * | + */ + GATE_SHAPE_T1, + + /* + * | + * | + * +-- + * | + */ + GATE_SHAPE_T2, + + /* + * | + * +---- + * | + */ + GATE_SHAPE_T3, + + /* + * An unused T-shape gate + * | + * +-- + * | + * | + */ + GATE_SHAPE_T4, + + /* + * An unused T-shape gate + * | + * | + * +---- + * | + */ + GATE_SHAPE_UNUSED_T1, + + /* + * An unused T-shape gate + * | + * | + * +-- + * | + * | + */ + GATE_SHAPE_UNUSED_T2, + + /* + * An unused T-shape gate + * | + * +---- + * | + * | + */ + GATE_SHAPE_UNUSED_T3, + + /* + * An unused T-shape gate + * | + * | + * +---- + * | + * | + */ + GATE_SHAPE_UNUSED_T4, +}; + +enum +{ + /* + * 0 degrees (clockwise) + * | + * +-- + * | + */ + GATE_ORIENTATION_0, + + /* + * 90 degress (clockwise) + * --+-- + * | + */ + GATE_ORIENTATION_90, + + /* + * 180 degrees (clockwise) + * | + * --+ + * | + */ + GATE_ORIENTATION_180, + + /* + * 270 degrees (clockwise) + * | + * --+-- + */ + GATE_ORIENTATION_270, + + GATE_ORIENTATION_MAX, +}; + +// Describes the location of the gates "arms" when the gate has not +// been rotated (i.e. rotated 0 degrees) +enum +{ + GATE_ARM_NORTH, + GATE_ARM_EAST, + GATE_ARM_SOUTH, + GATE_ARM_WEST, +}; + +enum +{ + ROTATE_NONE, + ROTATE_ANTICLOCKWISE, + ROTATE_CLOCKWISE, +}; + +enum +{ + PUZZLE_NONE, + PUZZLE_FORTREE_CITY_GYM, + PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6, +}; + +struct RotatingGatePuzzle +{ + struct Coords16 pos; + u8 shape; + u8 orientation; +}; + +struct Coords8 +{ + s8 deltaX; + s8 deltaY; +}; + +// 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 }, +}; + +// 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 u8 sRotatingGateTiles_1[] = INCBIN_U8("graphics/rotating_gates/1.4bpp"); +static const u8 sRotatingGateTiles_2[] = INCBIN_U8("graphics/rotating_gates/2.4bpp"); +static const u8 sRotatingGateTiles_3[] = INCBIN_U8("graphics/rotating_gates/3.4bpp"); +static const u8 sRotatingGateTiles_5[] = INCBIN_U8("graphics/rotating_gates/5.4bpp"); +static const u8 sRotatingGateTiles_6[] = INCBIN_U8("graphics/rotating_gates/6.4bpp"); +static const u8 sRotatingGateTiles_7[] = INCBIN_U8("graphics/rotating_gates/7.4bpp"); +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 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = 0, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_SQUARE, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 5, + .affineParam = 0, +}; + +static const struct OamData sOamData_RotatingGateRegular = { + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = 0, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_SQUARE, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 5, + .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 union AnimCmd sSpriteAnim_RotatingGateLarge[] = { + ANIMCMD_FRAME(0, 0), ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_RotatingGateRegular[] = { + ANIMCMD_FRAME(0, 0), ANIMCMD_END, +}; + +static const union AnimCmd *const sSpriteAnimTable_RotatingGateLarge[] = { + sSpriteAnim_RotatingGateLarge, +}; + +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_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_Rotated270[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), AFFINEANIMCMD_JUMP(0), +}; + +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[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), + AFFINEANIMCMD_END, +}; + +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[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), + AFFINEANIMCMD_END, +}; + +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[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), + AFFINEANIMCMD_END, +}; + +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[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), + AFFINEANIMCMD_END, +}; + +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[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8), + AFFINEANIMCMD_END, +}; + +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[] = { + 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_RotatingAnticlockwise270to180Faster[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), + AFFINEANIMCMD_END, +}; + +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[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_RotatingGate[] = { + sSpriteAffineAnim_Rotated0, + sSpriteAffineAnim_Rotated90, + sSpriteAffineAnim_Rotated180, + sSpriteAffineAnim_Rotated270, + sSpriteAffineAnim_RotatingAnticlockwise360to270, + sSpriteAffineAnim_RotatingAnticlockwise90to0, + sSpriteAffineAnim_RotatingAnticlockwise180to90, + sSpriteAffineAnim_RotatingAnticlockwise270to180, + sSpriteAffineAnim_RotatingClockwise0to90, + sSpriteAffineAnim_RotatingClockwise90to180, + sSpriteAffineAnim_RotatingClockwise180to270, + sSpriteAffineAnim_RotatingClockwise270to360, + sSpriteAffineAnim_RotatingAnticlockwise360to270Faster, + sSpriteAffineAnim_RotatingAnticlockwise90to0Faster, + sSpriteAffineAnim_RotatingAnticlockwise180to90Faster, + sSpriteAffineAnim_RotatingAnticlockwise270to180Faster, + sSpriteAffineAnim_RotatingClockwise0to90Faster, + sSpriteAffineAnim_RotatingClockwise90to180Faster, + sSpriteAffineAnim_RotatingClockwise180to270Faster, + sSpriteAffineAnim_RotatingClockwise270to360Faster, +}; + +static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge = { + .tileTag = ROTATING_GATE_TILE_TAG, + .paletteTag = 0xFFFF, + .oam = &sOamData_RotatingGateLarge, + .anims = sSpriteAnimTable_RotatingGateLarge, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_RotatingGate, + .callback = SpriteCallback_RotatingGate, +}; + +static const struct SpriteTemplate sSpriteTemplate_RotatingGateRegular = { + .tileTag = ROTATING_GATE_TILE_TAG, + .paletteTag = 0xFFFF, + .oam = &sOamData_RotatingGateRegular, + .anims = sSpriteAnimTable_RotatingGateRegular, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_RotatingGate, + .callback = SpriteCallback_RotatingGate, +}; + +// These structures describe what happens to the gate if you hit it at +// a given coordinate in a 4x4 grid when walking in the specified +// direction. Either the gate does not rotate, or it rotates in the +// 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_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_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_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 }, +}; + +// These tables describe the relative coordinate positions the arms +// must move through in order to be rotated. +static const struct Coords8 sRotatingGate_ArmPositionsClockwiseRotation[] = { + { 0, -1 }, { 1, -2 }, { 0, 0 }, { 1, 0 }, { -1, 0 }, { -1, 1 }, { -1, -1 }, { -2, -1 }, +}; + +static const struct Coords8 sRotatingGate_ArmPositionsAntiClockwiseRotation[] = { + { -1, -1 }, { -1, -2 }, { 0, -1 }, { 1, -1 }, { 0, 0 }, { 0, 1 }, { -1, 0 }, { -2, 0 }, +}; + +// 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] = { + // L-shape gates + { + { 1, 0 }, { 1, 0 }, { 0, 0 }, { 0, 0 }, + }, + { + { 1, 1 }, { 1, 0 }, { 0, 0 }, { 0, 0 }, + }, + { + { 1, 0 }, { 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, 1 }, { 1, 0 }, { 1, 0 }, { 0, 0 }, + }, + { + { 1, 0 }, { 1, 1 }, { 1, 0 }, { 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, 0 }, { 1, 1 }, { 0, 0 }, + }, + { + { 1, 0 }, { 1, 1 }, { 1, 1 }, { 0, 0 }, + }, + { + { 1, 1 }, { 1, 1 }, { 1, 1 }, { 0, 0 }, + }, +}; + +static EWRAM_DATA u8 gRotatingGate_GateSpriteIds[ROTATING_GATE_PUZZLE_MAX] = {0}; +static EWRAM_DATA const struct RotatingGatePuzzle *gRotatingGate_PuzzleConfig = NULL; +static EWRAM_DATA u8 gRotatingGate_PuzzleCount = 0; + +static int GetCurrentMapRotatingGatePuzzleType(void) +{ + if (gSaveBlock1.location.mapGroup == MAP_GROUP_FORTREE_CITY_GYM && + gSaveBlock1.location.mapNum == MAP_ID_FORTREE_CITY_GYM) + { + return PUZZLE_FORTREE_CITY_GYM; + } + + if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE110_TRICK_HOUSE_PUZZLE6 && + gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_TRICK_HOUSE_PUZZLE6) + { + return PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6; + } + + return PUZZLE_NONE; +} + +static void RotatingGate_ResetAllGateOrientations(void) +{ + int i; + u8 *ptr; + + ptr = (u8 *)GetVarPointer(0x4000); + + for (i = 0; i < gRotatingGate_PuzzleCount; i++) + { + ptr[i] = gRotatingGate_PuzzleConfig[i].orientation; + } +} + +static int RotatingGate_GetGateOrientation(u8 gateId) +{ + return ((u8 *)GetVarPointer(0x4000))[gateId]; +} + +static void RotatingGate_SetGateOrientation(u8 gateId, u8 orientation) +{ + ((u8 *)GetVarPointer(0x4000))[gateId] = orientation; +} + +static void RotatingGate_RotateInDirection(u8 gateId, u32 rotationDirection) +{ + u8 orientation = RotatingGate_GetGateOrientation(gateId); + + if (rotationDirection == ROTATE_ANTICLOCKWISE) + { + if (orientation) + { + orientation--; + } + else + { + orientation = GATE_ORIENTATION_270; + } + } + else + { + orientation = ++orientation % GATE_ORIENTATION_MAX; + } + + RotatingGate_SetGateOrientation(gateId, orientation); +} + +static void RotatingGate_LoadPuzzleConfig(void) +{ + int puzzleType = GetCurrentMapRotatingGatePuzzleType(); + u32 i; + + switch (puzzleType) + { + case PUZZLE_FORTREE_CITY_GYM: + gRotatingGate_PuzzleConfig = sRotatingGate_FortreePuzzleConfig; + gRotatingGate_PuzzleCount = + sizeof(sRotatingGate_FortreePuzzleConfig) / sizeof(struct RotatingGatePuzzle); + break; + case PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6: + gRotatingGate_PuzzleConfig = sRotatingGate_TrickHousePuzzleConfig; + gRotatingGate_PuzzleCount = + sizeof(sRotatingGate_TrickHousePuzzleConfig) / sizeof(struct RotatingGatePuzzle); + break; + case PUZZLE_NONE: + default: + return; + } + + for (i = 0; i < ROTATING_GATE_PUZZLE_MAX; i++) + { + gRotatingGate_GateSpriteIds[i] = MAX_SPRITES; + } +} + +static void RotatingGate_CreateGatesWithinViewport(s16 deltaX, s16 deltaY) +{ + u8 i; + + // Calculate the bounding box of the camera + // Same as RotatingGate_DestroyGatesOutsideViewport + s16 x = gSaveBlock1.pos.x - 2; + s16 x2 = gSaveBlock1.pos.x + 0x11; + s16 y = gSaveBlock1.pos.y - 2; + s16 y2 = gSaveBlock1.pos.y + 0xe; + + s16 x3, y3; + + for (i = 0; i < gRotatingGate_PuzzleCount; i++) + { + x3 = gRotatingGate_PuzzleConfig[i].pos.x + 7; + y3 = gRotatingGate_PuzzleConfig[i].pos.y + 7; + + if (y <= y3 && y2 >= y3 && x <= x3 && x2 >= x3 && + gRotatingGate_GateSpriteIds[i] == MAX_SPRITES) + { + gRotatingGate_GateSpriteIds[i] = RotatingGate_CreateGate(i, deltaX, deltaY); + } + } +} + +static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY) +{ + struct Sprite *sprite; + struct SpriteTemplate template; + const struct RotatingGatePuzzle *gate; + u8 spriteId; + s16 x, y; + + 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; + + sprite = &gSprites[spriteId]; + sprite->data0 = gateId; + sprite->coordOffsetEnabled = 1; + + sub_8060388(x + deltaX, y + deltaY, &sprite->pos1.x, &sprite->pos1.y); + RotatingGate_HideGatesOutsideViewport(sprite); + StartSpriteAffineAnim(sprite, RotatingGate_GetGateOrientation(gateId)); + + return spriteId; +} + +static void SpriteCallback_RotatingGate(struct Sprite *sprite) +{ + u8 rotationDirection; + u8 orientation; + u8 affineAnimation; + + rotationDirection = sprite->data1; + orientation = sprite->data2; + + RotatingGate_HideGatesOutsideViewport(sprite); + + if (rotationDirection == ROTATE_ANTICLOCKWISE) + { + affineAnimation = orientation + 4; + + if (GetPlayerSpeed() != 1) + affineAnimation += 8; + + PlaySE(SE_HI_TURUN); + StartSpriteAffineAnim(sprite, affineAnimation); + } + else if (rotationDirection == ROTATE_CLOCKWISE) + { + affineAnimation = orientation + 8; + + if (GetPlayerSpeed() != 1) + affineAnimation += 8; + + PlaySE(SE_HI_TURUN); + StartSpriteAffineAnim(sprite, affineAnimation); + } + + sprite->data1 = ROTATE_NONE; +} + +static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite) +{ + u16 x; + s16 x2; + u16 y; + s16 y2; + + sprite->invisible = 0; + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; + + x2 = x + 0x40; // Dimensions of the rotating gate + y2 = y + 0x40; + + if ((s16)x > DISPLAY_WIDTH + 0x10 - 1 || x2 < -0x10) + { + sprite->invisible = 1; + } + + if ((s16)y > DISPLAY_HEIGHT + 0x10 - 1 || y2 < -0x10) + { + sprite->invisible = 1; + } +} + +static void LoadRotatingGatePics(void) +{ + LoadSpriteSheets(sRotatingGatesGraphicsTable); +} + +static void RotatingGate_DestroyGatesOutsideViewport(void) +{ + s16 x; + s16 x2; + s16 y; + s16 y2; + s16 xGate; + s16 yGate; + int i; + struct Sprite *sprite; + + // Same as RotatingGate_CreateGatesWithinViewport + x = gSaveBlock1.pos.x - 2; + x2 = gSaveBlock1.pos.x + 0x11; + y = gSaveBlock1.pos.y - 2; + y2 = gSaveBlock1.pos.y + 0xe; + + for (i = 0; i < gRotatingGate_PuzzleCount; i++) + { + xGate = gRotatingGate_PuzzleConfig[i].pos.x + 7; + yGate = gRotatingGate_PuzzleConfig[i].pos.y + 7; + + if (gRotatingGate_GateSpriteIds[i] == MAX_SPRITES) + continue; + + if (xGate < x || xGate > x2 || yGate < y || yGate > y2) + { + sprite = &gSprites[gRotatingGate_GateSpriteIds[i]]; + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + gRotatingGate_GateSpriteIds[i] = MAX_SPRITES; + } + } +} + +#ifdef NONMATCHING +static int RotatingGate_CanRotate(u8 gateId, int rotationDirection) +{ + const struct Coords8 *armPos; + u8 orientation; + s16 x; + s16 y; + int shape; + int i; + int j; + int armOrientation; + const u8 *gateArmCollisionData; + u8 armIndex; + + if (rotationDirection == ROTATE_ANTICLOCKWISE) + armPos = sRotatingGate_ArmPositionsAntiClockwiseRotation; + else if (rotationDirection == ROTATE_CLOCKWISE) + armPos = sRotatingGate_ArmPositionsClockwiseRotation; + else + return 0; + + orientation = RotatingGate_GetGateOrientation(gateId); + + shape = gRotatingGate_PuzzleConfig[gateId].shape; + x = gRotatingGate_PuzzleConfig[gateId].pos.x + 7; + y = gRotatingGate_PuzzleConfig[gateId].pos.y + 7; + + // Loop through the gate's "arms" clockwise (north, south, east, west) + for (i = GATE_ARM_NORTH; i <= GATE_ARM_WEST; i++) + { + armOrientation = orientation + i; + gateArmCollisionData = sRotatingGate_ArmLayout[shape][i]; + + // Ensure that no part of the arm collides with the map + for (j = 0; j < GATE_ARM_MAX_LENGTH; j++) + { + armIndex = 2 * (armOrientation % 4) + j; + + if (*gateArmCollisionData) + { + if (MapGridIsImpassableAt( + armPos[armIndex].deltaX + x, armPos[armIndex].deltaY + y) == 1) + return 0; + } + gateArmCollisionData++; + } + } + + return 1; +} +#else +__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\ +_080C7EA8: .4byte sRotatingGate_ArmPositionsAntiClockwiseRotation\n\ +_080C7EAC:\n\ + cmp r1, 0x2\n\ + beq _080C7EB4\n\ +_080C7EB0:\n\ + movs r0, 0\n\ + b _080C7F48\n\ +_080C7EB4:\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\ +_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\ +_080C7EFA:\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\ +_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\ +_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\ +_080C7F58: .4byte sRotatingGate_ArmPositionsClockwiseRotation\n\ +_080C7F5C: .4byte gRotatingGate_PuzzleConfig\n\ +_080C7F60: .4byte sRotatingGate_ArmLayout\n\ +.syntax divided\n"); +} +#endif + +#ifdef NONMATCHING +static int RotatingGate_HasArm(u8 gateId, u8 armInfo) +{ + int isLongArm; + s8 armOrientation; + int arm; + int shape; + + arm = armInfo >> 1; + isLongArm = armInfo & 1; + + armOrientation = (arm - RotatingGate_GetGateOrientation(gateId) + 4) % 4; + shape = gRotatingGate_PuzzleConfig[gateId].shape; + return sRotatingGate_ArmLayout[shape][armOrientation][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) +{ + struct Sprite *sprite; + + if (gRotatingGate_GateSpriteIds[gateId] != MAX_SPRITES) + { + sprite = &gSprites[gRotatingGate_GateSpriteIds[gateId]]; + sprite->data1 = rotationDirection; + sprite->data2 = RotatingGate_GetGateOrientation(gateId); + } +} + +#ifdef NONMATCHING +static u8 RotatingGate_GetRotationInfo(u8 direction, s16 x, s16 y) +{ + register const u8(*ptr)[][4] asm("r3"); + + if (direction == DIR_NORTH) + ptr = &sRotatingGate_RotationInfoNorth; + else if (direction == DIR_SOUTH) + ptr = &sRotatingGate_RotationInfoSouth; + else if (direction == DIR_WEST) + ptr = &sRotatingGate_RotationInfoWest; + else if (direction == DIR_EAST) + ptr = &sRotatingGate_RotationInfoEast; + else + return GATE_ROTATION_NONE; + + return (*ptr)[y][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) +{ + if (GetCurrentMapRotatingGatePuzzleType()) + { + RotatingGate_LoadPuzzleConfig(); + RotatingGate_ResetAllGateOrientations(); + } +} + +void RotatingGatePuzzleCameraUpdate(u16 deltaX, u16 deltaY) +{ + if (GetCurrentMapRotatingGatePuzzleType()) + { + RotatingGate_CreateGatesWithinViewport(deltaX, deltaY); + RotatingGate_DestroyGatesOutsideViewport(); + } +} + +void RotatingGate_InitPuzzleAndGraphics(void) +{ + if (GetCurrentMapRotatingGatePuzzleType()) + { + LoadRotatingGatePics(); + RotatingGate_LoadPuzzleConfig(); + RotatingGate_CreateGatesWithinViewport(0, 0); + } +} + +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; + } + + for (i = 0; i < gRotatingGate_PuzzleCount; i++) + { + gateX = gRotatingGate_PuzzleConfig[i].pos.x + 7; + gateY = gRotatingGate_PuzzleConfig[i].pos.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); + + if (rotationInfo != GATE_ROTATION_NONE) + { + rotationDirection = rotationInfo >> 4; + armInfo = rotationInfo & 0xF; + + asm("" ::"r"(armInfo)); + + if (RotatingGate_HasArm(i, armInfo)) + { + if (RotatingGate_CanRotate(i, rotationDirection)) + { + RotatingGate_TriggerRotationAnimation(i, rotationDirection); + RotatingGate_RotateInDirection(i, rotationDirection); + return 0; + } + + return 1; + } + } + } + } + + return 0; +} diff --git a/src/field/safari_zone.c b/src/field/safari_zone.c new file mode 100644 index 000000000..a47c8e951 --- /dev/null +++ b/src/field/safari_zone.c @@ -0,0 +1,253 @@ +#include "global.h" +#include "safari_zone.h" +#include "event_data.h" +#include "field_fadetransition.h" +#include "field_player_avatar.h" +#include "main.h" +#include "rom4.h" +#include "script.h" +#include "string_util.h" +#include "text.h" + +struct PokeblockFeeder +{ + /*0x00*/ s16 x; + /*0x02*/ s16 y; + /*0x04*/ s8 mapNum; + /*0x05*/ u8 stepCounter; + /*0x08*/ struct Pokeblock pokeblock; +}; + +#define NUM_POKEBLOCK_FEEDERS 10 + +static void ClearAllPokeblockFeeders(void); +static void DecrementFeederStepCounters(void); + +extern u8 gBattleOutcome; + +EWRAM_DATA u8 gNumSafariBalls = 0; +EWRAM_DATA static u16 gSafariZoneStepCounter = 0; +EWRAM_DATA static struct PokeblockFeeder gPokeblockFeeders[NUM_POKEBLOCK_FEEDERS] = {0}; + +extern void (*gFieldCallback)(void); + +extern u8 gUnknown_081C340A; +extern u8 gUnknown_081C342D; +extern u8 gUnknown_081C3448; +extern u8 gUnknown_081C3459; +extern u8 *gPokeblockNames[]; + +extern u16 gScriptResult; + +bool32 GetSafariZoneFlag(void) +{ + return FlagGet(SYS_SAFARI_MODE); +} + +void SetSafariZoneFlag(void) +{ + FlagSet(SYS_SAFARI_MODE); +} + +void ResetSafariZoneFlag(void) +{ + FlagReset(SYS_SAFARI_MODE); +} + +void EnterSafariMode(void) +{ + IncrementGameStat(0x11); + SetSafariZoneFlag(); + ClearAllPokeblockFeeders(); + gNumSafariBalls = 30; + gSafariZoneStepCounter = 500; +} + +void ExitSafariMode(void) +{ + ResetSafariZoneFlag(); + ClearAllPokeblockFeeders(); + gNumSafariBalls = 0; + gSafariZoneStepCounter = 0; +} + +bool8 SafariZoneTakeStep(void) +{ + if (GetSafariZoneFlag() == FALSE) + { + return FALSE; + } + + DecrementFeederStepCounters(); + gSafariZoneStepCounter--; + if (gSafariZoneStepCounter == 0) + { + ScriptContext1_SetupScript(&gUnknown_081C3448); + return TRUE; + } + return FALSE; +} + +void SafariZoneRetirePrompt(void) +{ + ScriptContext1_SetupScript(&gUnknown_081C342D); +} + +void sub_80C824C(void) +{ + if (gNumSafariBalls != 0) + { + SetMainCallback2(c2_exit_to_overworld_2_switch); + } + else if (gBattleOutcome == 8) + { + ScriptContext2_RunNewScript(&gUnknown_081C340A); + warp_in(); + gFieldCallback = sub_8080E44; + SetMainCallback2(CB2_LoadMap); + } + else if (gBattleOutcome == 7) + { + ScriptContext1_SetupScript(&gUnknown_081C3459); + ScriptContext1_Stop(); + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); + } +} + +static void ClearPokeblockFeeder(u8 index) +{ + memset(&gPokeblockFeeders[index], 0, sizeof(struct PokeblockFeeder)); +} + +static void ClearAllPokeblockFeeders(void) +{ + memset(gPokeblockFeeders, 0, sizeof(gPokeblockFeeders)); +} + +void SafariZoneGetPokeblockNameInFeeder(void) +{ + s16 x, y; + u16 i; + + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + + for (i = 0; i < NUM_POKEBLOCK_FEEDERS; i++) + { + if (gSaveBlock1.location.mapNum == gPokeblockFeeders[i].mapNum + && gPokeblockFeeders[i].x == x + && gPokeblockFeeders[i].y == y) + { + gScriptResult = i; + StringCopy(gStringVar1, gPokeblockNames[gPokeblockFeeders[i].pokeblock.color]); + return; + } + } + + gScriptResult = -1; +} + +static void GetPokeblockFeederWithinRange(void) +{ + s16 x, y; + u16 i; + + PlayerGetDestCoords(&x, &y); + + for (i = 0; i < NUM_POKEBLOCK_FEEDERS; i++) + { + if (gSaveBlock1.location.mapNum == gPokeblockFeeders[i].mapNum) + { + //Get absolute value of x and y distance from Pokeblock feeder on current map + x -= gPokeblockFeeders[i].x; + y -= gPokeblockFeeders[i].y; + if (x < 0) + x *= -1; + if (y < 0) + y *= -1; + if ((x + y) <= 5) + { + gScriptResult = i; + return; + } + } + } + + gScriptResult = -1; +} + +struct Pokeblock *unref_sub_80C8418(void) +{ + SafariZoneGetPokeblockNameInFeeder(); + + if (gScriptResult == 0xFFFF) + return NULL; + else + return &gPokeblockFeeders[gScriptResult].pokeblock; +} + + +struct Pokeblock *SafariZoneGetActivePokeblock(void) +{ + GetPokeblockFeederWithinRange(); + + if (gScriptResult == 0xFFFF) + return NULL; + else + return &gPokeblockFeeders[gScriptResult].pokeblock; +} + + +void SafariZoneActivatePokeblockFeeder(u8 pokeblock_index) +{ + s16 x, y; + u8 i; + + for (i = 0; i < NUM_POKEBLOCK_FEEDERS; i++) + { + //Find free entry in gPokeblockFeeders + if (gPokeblockFeeders[i].mapNum == 0 + && gPokeblockFeeders[i].x == 0 + && gPokeblockFeeders[i].y == 0) + { + //Initialize Pokeblock feeder + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + gPokeblockFeeders[i].mapNum = gSaveBlock1.location.mapNum; + gPokeblockFeeders[i].pokeblock = gSaveBlock1.pokeblocks[pokeblock_index]; + gPokeblockFeeders[i].stepCounter = 100; + gPokeblockFeeders[i].x = x; + gPokeblockFeeders[i].y = y; + break; + } + } +} + +static void DecrementFeederStepCounters(void) +{ + u8 i; + + for (i = 0; i < NUM_POKEBLOCK_FEEDERS; i++) + { + if (gPokeblockFeeders[i].stepCounter != 0) + { + gPokeblockFeeders[i].stepCounter--; + if (gPokeblockFeeders[i].stepCounter == 0) + ClearPokeblockFeeder(i); + } + } +} + +bool8 unref_sub_80C853C(void) +{ + SafariZoneGetPokeblockNameInFeeder(); + + if (gScriptResult == 0xFFFF) + { + return FALSE; + } + + ConvertIntToDecimalStringN(gStringVar2, + gPokeblockFeeders[gScriptResult].stepCounter, + STR_CONV_MODE_LEADING_ZEROS, 3); + + return TRUE; +} diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c new file mode 100644 index 000000000..66578f350 --- /dev/null +++ b/src/field/scrcmd.c @@ -0,0 +1,1887 @@ +#include "global.h" +#include "battle_setup.h" +#include "berry.h" +#include "clock.h" +#include "coins.h" +#include "contest_link_80C2020.h" +#include "contest_painting.h" +#include "data2.h" +#include "decoration.h" +#include "decoration_inventory.h" +#include "event_data.h" +#include "field_door.h" +#include "field_effect.h" +#include "field_fadetransition.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_specials.h" +#include "field_tasks.h" +#include "field_weather.h" +#include "fieldmap.h" +#include "item.h" +#include "main.h" +#include "map_obj_lock.h" +#include "menu.h" +#include "money.h" +#include "mystery_event_script.h" +#include "palette.h" +#include "party_menu.h" +#include "pokemon.h" +#include "rng.h" +#include "rom4.h" +#include "rtc.h" +#include "script.h" +#include "script_menu.h" +#include "script_movement.h" +#include "script_pokemon_80C4.h" +#include "script_pokemon_80F9.h" +#include "shop.h" +#include "slot_machine.h" +#include "sound.h" +#include "string_util.h" +#include "tv.h" + +typedef u16 (*SpecialFunc)(void); +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; + +extern u16 gSpecialVar_0x8000; +extern u16 gSpecialVar_0x8001; +extern u16 gSpecialVar_0x8002; +extern u16 gSpecialVar_0x8004; + +extern u16 gScriptResult; + +extern u16 gScriptContestCategory; + +extern SpecialFunc gSpecials[]; +extern u8 *gStdScripts[]; +extern u8 *gStdScripts_End[]; + +// This is defined in here so the optimizer can't see its value when compiling +// script.c. +void * const gNullScriptPtr = NULL; + +static const u8 sScriptConditionTable[6][3] = +{ +// < = > + 1, 0, 0, // < + 0, 1, 0, // = + 0, 0, 1, // > + 1, 1, 0, // <= + 0, 1, 1, // >= + 1, 0, 1, // != +}; + +static u8 * const sScriptStringVars[] = +{ + gStringVar1, + gStringVar2, + gStringVar3, +}; + +bool8 ScrCmd_snop(struct ScriptContext *ctx) +{ + return FALSE; +} + +bool8 ScrCmd_snop1(struct ScriptContext *ctx) +{ + return FALSE; +} + +bool8 ScrCmd_end(struct ScriptContext *ctx) +{ + StopScript(ctx); + return FALSE; +} + +bool8 ScrCmd_jumpasm(struct ScriptContext *ctx) +{ + u32 addr = ScriptReadWord(ctx); + SetupNativeScript(ctx, (void *)addr); + return TRUE; +} + +bool8 ScrCmd_special(struct ScriptContext *ctx) +{ + u16 index = ScriptReadHalfword(ctx); + gSpecials[index](); + return FALSE; +} + +bool8 ScrCmd_specialval(struct ScriptContext *ctx) +{ + u16 *var = GetVarPointer(ScriptReadHalfword(ctx)); + *var = gSpecials[ScriptReadHalfword(ctx)](); + return FALSE; +} + +bool8 ScrCmd_callasm(struct ScriptContext *ctx) +{ + NativeFunc func = (NativeFunc)ScriptReadWord(ctx); + func(); + return FALSE; +} + +bool8 ScrCmd_waitstate(struct ScriptContext *ctx) +{ + ScriptContext1_Stop(); + return TRUE; +} + +bool8 ScrCmd_jump(struct ScriptContext *ctx) +{ + u8 *ptr = (u8 *)ScriptReadWord(ctx); + ScriptJump(ctx, ptr); + return FALSE; +} + +bool8 ScrCmd_return(struct ScriptContext *ctx) +{ + ScriptReturn(ctx); + return FALSE; +} + +bool8 ScrCmd_call(struct ScriptContext *ctx) +{ + + u8 *ptr = (u8 *)ScriptReadWord(ctx); + ScriptCall(ctx, ptr); + return FALSE; +} + +bool8 ScrCmd_jumpif(struct ScriptContext *ctx) +{ + u8 condition = ScriptReadByte(ctx); + u8 *ptr = (u8 *)ScriptReadWord(ctx); + if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) + ScriptJump(ctx, ptr); + return FALSE; +} + +bool8 ScrCmd_callif(struct ScriptContext *ctx) +{ + u8 condition = ScriptReadByte(ctx); + u8 *ptr = (u8 *)ScriptReadWord(ctx); + if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) + ScriptCall(ctx, ptr); + return FALSE; +} + +bool8 ScrCmd_setvaddress(struct ScriptContext *ctx) +{ + u32 addr1 = (u32)ctx->scriptPtr - 1; + u32 addr2 = ScriptReadWord(ctx); + gUnknown_0202E8B0 = addr2 - addr1; + return FALSE; +} + +bool8 ScrCmd_vjump(struct ScriptContext *ctx) +{ + u32 addr = ScriptReadWord(ctx); + ScriptJump(ctx, (u8 *)(addr - gUnknown_0202E8B0)); + return FALSE; +} + +bool8 ScrCmd_vcall(struct ScriptContext *ctx) +{ + u32 addr = ScriptReadWord(ctx); + ScriptCall(ctx, (u8 *)(addr - gUnknown_0202E8B0)); + return FALSE; +} + +bool8 ScrCmd_if5(struct ScriptContext *ctx) +{ + u8 condition = ScriptReadByte(ctx); + u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0); + if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) + ScriptJump(ctx, ptr); + return FALSE; +} + +bool8 ScrCmd_if6(struct ScriptContext *ctx) +{ + u8 condition = ScriptReadByte(ctx); + u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0); + if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) + ScriptCall(ctx, ptr); + return FALSE; +} + +bool8 ScrCmd_jumpstd(struct ScriptContext *ctx) +{ + u8 index = ScriptReadByte(ctx); + u8 **ptr = &gStdScripts[index]; + if (ptr < gStdScripts_End) + ScriptJump(ctx, *ptr); + return FALSE; +} + +bool8 ScrCmd_callstd(struct ScriptContext *ctx) +{ + u8 index = ScriptReadByte(ctx); + u8 **ptr = &gStdScripts[index]; + if (ptr < gStdScripts_End) + ScriptCall(ctx, *ptr); + return FALSE; +} + +bool8 ScrCmd_jumpstdif(struct ScriptContext *ctx) +{ + u8 condition = ScriptReadByte(ctx); + u8 index = ScriptReadByte(ctx); + if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) + { + u8 **ptr = &gStdScripts[index]; + if (ptr < gStdScripts_End) + ScriptJump(ctx, *ptr); + } + return FALSE; +} + +bool8 ScrCmd_callstdif(struct ScriptContext *ctx) +{ + u8 condition = ScriptReadByte(ctx); + u8 index = ScriptReadByte(ctx); + if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) + { + u8 **ptr = &gStdScripts[index]; + if (ptr < gStdScripts_End) + ScriptCall(ctx, *ptr); + } + return FALSE; +} + +bool8 ScrCmd_jumpram(struct ScriptContext *ctx) +{ + ScriptJump(ctx, (u8 *)gUnknown_0202E8AC); + return FALSE; +} + +bool8 ScrCmd_die(struct ScriptContext *ctx) +{ + ClearRamScript(); + StopScript(ctx); + return TRUE; +} + +bool8 ScrCmd_setbyte(struct ScriptContext *ctx) +{ + u8 value = ScriptReadByte(ctx); + SetMysteryEventScriptStatus(value); + return FALSE; +} + +bool8 ScrCmd_loadptr(struct ScriptContext *ctx) +{ + u8 index = ScriptReadByte(ctx); + ctx->data[index] = ScriptReadWord(ctx); + return FALSE; +} + +bool8 ScrCmd_loadbytefrompointer(struct ScriptContext *ctx) +{ + u8 index = ScriptReadByte(ctx); + ctx->data[index] = *(u8 *)ScriptReadWord(ctx); + return FALSE; +} + +bool8 ScrCmd_writebytetooffset(struct ScriptContext *ctx) +{ + u8 value = ScriptReadByte(ctx); + *(u8 *)ScriptReadWord(ctx) = value; + return FALSE; +} + +bool8 ScrCmd_setbufferbyte(struct ScriptContext *ctx) +{ + u8 index = ScriptReadByte(ctx); + ctx->data[index] = ScriptReadByte(ctx); + return FALSE; +} + +bool8 ScrCmd_setptrbyte(struct ScriptContext *ctx) +{ + u8 index = ScriptReadByte(ctx); + *(u8 *)ScriptReadWord(ctx) = ctx->data[index]; + return FALSE; +} + +bool8 ScrCmd_copybuffers(struct ScriptContext *ctx) +{ + u8 destIndex = ScriptReadByte(ctx); + u8 srcIndex = ScriptReadByte(ctx); + ctx->data[destIndex] = ctx->data[srcIndex]; + return FALSE; +} + +bool8 ScrCmd_copybyte(struct ScriptContext *ctx) +{ + u8 *ptr = (u8 *)ScriptReadWord(ctx); + *ptr = *(u8 *)ScriptReadWord(ctx); + return FALSE; +} + +bool8 ScrCmd_setvar(struct ScriptContext *ctx) +{ + u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx)); + *ptr = ScriptReadHalfword(ctx); + return FALSE; +} + +bool8 ScrCmd_copyvar(struct ScriptContext *ctx) +{ + u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx)); + *ptr = *GetVarPointer(ScriptReadHalfword(ctx)); + return FALSE; +} + +bool8 ScrCmd_setorcopyvar(struct ScriptContext *ctx) +{ + u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx)); + *ptr = VarGet(ScriptReadHalfword(ctx)); + return FALSE; +} + +u8 compare_012(u16 a1, u16 a2) +{ + if (a1 < a2) + return 0; + + if (a1 == a2) + return 1; + + return 2; +} + +bool8 ScrCmd_comparebuffers(struct ScriptContext *ctx) +{ + u8 value1 = ctx->data[ScriptReadByte(ctx)]; + u8 value2 = ctx->data[ScriptReadByte(ctx)]; + ctx->comparisonResult = compare_012(value1, value2); + return FALSE; +} + +bool8 ScrCmd_comparebuffertobyte(struct ScriptContext *ctx) +{ + u8 value1 = ctx->data[ScriptReadByte(ctx)]; + u8 value2 = ScriptReadByte(ctx); + ctx->comparisonResult = compare_012(value1, value2); + return FALSE; +} + +bool8 ScrCmd_comparebuffertoptrbyte(struct ScriptContext *ctx) +{ + u8 value1 = ctx->data[ScriptReadByte(ctx)]; + u8 value2 = *(u8 *)ScriptReadWord(ctx); + ctx->comparisonResult = compare_012(value1, value2); + return FALSE; +} + +bool8 ScrCmd_compareptrbytetobuffer(struct ScriptContext *ctx) +{ + u8 value1 = *(u8 *)ScriptReadWord(ctx); + u8 value2 = ctx->data[ScriptReadByte(ctx)]; + ctx->comparisonResult = compare_012(value1, value2); + return FALSE; +} + +bool8 ScrCmd_compareptrbytetobyte(struct ScriptContext *ctx) +{ + u8 value1 = *(u8 *)ScriptReadWord(ctx); + u8 value2 = ScriptReadByte(ctx); + ctx->comparisonResult = compare_012(value1, value2); + return FALSE; +} + +bool8 ScrCmd_compareptrbytes(struct ScriptContext *ctx) +{ + u8 value1 = *(u8 *)ScriptReadWord(ctx); + u8 value2 = *(u8 *)ScriptReadWord(ctx); + ctx->comparisonResult = compare_012(value1, value2); + return FALSE; +} + +bool8 ScrCmd_compare(struct ScriptContext *ctx) +{ + u16 value1 = *GetVarPointer(ScriptReadHalfword(ctx)); + u16 value2 = ScriptReadHalfword(ctx); + ctx->comparisonResult = compare_012(value1, value2); + return FALSE; +} + +bool8 ScrCmd_comparevars(struct ScriptContext *ctx) +{ + u16 *ptr1 = GetVarPointer(ScriptReadHalfword(ctx)); + u16 *ptr2 = GetVarPointer(ScriptReadHalfword(ctx)); + ctx->comparisonResult = compare_012(*ptr1, *ptr2); + return FALSE; +} + +bool8 ScrCmd_addvar(struct ScriptContext *ctx) +{ + u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx)); + *ptr += ScriptReadHalfword(ctx); + return FALSE; +} + +bool8 ScrCmd_subvar(struct ScriptContext *ctx) +{ + u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx)); + *ptr -= VarGet(ScriptReadHalfword(ctx)); + return FALSE; +} + +bool8 ScrCmd_random(struct ScriptContext *ctx) +{ + u16 max = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = Random() % max; + return FALSE; +} + +bool8 ScrCmd_additem(struct ScriptContext *ctx) +{ + u16 itemId = VarGet(ScriptReadHalfword(ctx)); + u32 quantity = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = AddBagItem(itemId, (u8)quantity); + return FALSE; +} + +bool8 ScrCmd_removeitem(struct ScriptContext *ctx) +{ + u16 itemId = VarGet(ScriptReadHalfword(ctx)); + u32 quantity = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = RemoveBagItem(itemId, (u8)quantity); + return FALSE; +} + +bool8 ScrCmd_checkitemspace(struct ScriptContext *ctx) +{ + u16 itemId = VarGet(ScriptReadHalfword(ctx)); + u32 quantity = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = CheckBagHasSpace(itemId, (u8)quantity); + return FALSE; +} + +bool8 ScrCmd_checkitem(struct ScriptContext *ctx) +{ + u16 itemId = VarGet(ScriptReadHalfword(ctx)); + u32 quantity = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = CheckBagHasItem(itemId, (u8)quantity); + return FALSE; +} + +bool8 ScrCmd_checkitemtype(struct ScriptContext *ctx) +{ + u16 itemId = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = GetPocketByItemId(itemId); + return FALSE; +} + +bool8 ScrCmd_addpcitem(struct ScriptContext *ctx) +{ + u16 itemId = VarGet(ScriptReadHalfword(ctx)); + u16 quantity = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = AddPCItem(itemId, quantity); + return FALSE; +} + +bool8 ScrCmd_checkpcitem(struct ScriptContext *ctx) +{ + u16 itemId = VarGet(ScriptReadHalfword(ctx)); + u16 quantity = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = CheckPCHasItem(itemId, quantity); + return FALSE; +} + +bool8 ScrCmd_adddecor(struct ScriptContext *ctx) +{ + u32 decorId = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = IsThereStorageSpaceForDecoration(decorId); + return FALSE; +} + +bool8 ScrCmd_removedecor(struct ScriptContext *ctx) +{ + u32 decorId = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = sub_81340A8(decorId); + return FALSE; +} + +bool8 ScrCmd_checkdecor(struct ScriptContext *ctx) +{ + u32 decorId = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = sub_8134074(decorId); + return FALSE; +} + +bool8 ScrCmd_testdecor(struct ScriptContext *ctx) +{ + u32 decorId = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = sub_8133FE4(decorId); + return FALSE; +} + +bool8 ScrCmd_setflag(struct ScriptContext *ctx) +{ + FlagSet(ScriptReadHalfword(ctx)); + return FALSE; +} + +bool8 ScrCmd_clearflag(struct ScriptContext *ctx) +{ + FlagReset(ScriptReadHalfword(ctx)); + return FALSE; +} + +bool8 ScrCmd_checkflag(struct ScriptContext *ctx) +{ + ctx->comparisonResult = FlagGet(ScriptReadHalfword(ctx)); + return FALSE; +} + +bool8 ScrCmd_inccounter(struct ScriptContext *ctx) +{ + IncrementGameStat(ScriptReadByte(ctx)); + return FALSE; +} + +bool8 ScrCmd_lighten(struct ScriptContext *ctx) +{ + sub_8081594(ScriptReadByte(ctx)); + ScriptContext1_Stop(); + return TRUE; +} + +bool8 ScrCmd_darken(struct ScriptContext *ctx) +{ + u16 value = VarGet(ScriptReadHalfword(ctx)); + sub_8053CE4(value); + return FALSE; +} + +bool8 IsPaletteNotActive(void) +{ + if (!gPaletteFade.active) + return TRUE; + else + return FALSE; +} + +bool8 ScrCmd_fadescreen(struct ScriptContext *ctx) +{ + fade_screen(ScriptReadByte(ctx), 0); + SetupNativeScript(ctx, IsPaletteNotActive); + return TRUE; +} + +bool8 ScrCmd_fadescreendelay(struct ScriptContext *ctx) +{ + u8 duration = ScriptReadByte(ctx); + u8 delay = ScriptReadByte(ctx); + fade_screen(duration, delay); + SetupNativeScript(ctx, IsPaletteNotActive); + return TRUE; +} + +bool8 s28_pause_asm() +{ + gUnknown_0202E8B4--; + + if (gUnknown_0202E8B4 == 0) + return TRUE; + else + return FALSE; +} + +bool8 ScrCmd_pause(struct ScriptContext *ctx) +{ + gUnknown_0202E8B4 = ScriptReadHalfword(ctx); + SetupNativeScript(ctx, s28_pause_asm); + return TRUE; +} + +bool8 ScrCmd_compareflags(struct ScriptContext *ctx) +{ + u8 hour = VarGet(ScriptReadHalfword(ctx)); + u8 minute = VarGet(ScriptReadHalfword(ctx)); + RtcInitLocalTimeOffset(hour, minute); + return FALSE; +} + +bool8 ScrCmd_checkdailyflags(struct ScriptContext *ctx) +{ + DoTimeBasedEvents(); + return FALSE; +} + +bool8 ScrCmd_resetvars(struct ScriptContext *ctx) +{ + RtcCalcLocalTime(); + gSpecialVar_0x8000 = gLocalTime.hours; + gSpecialVar_0x8001 = gLocalTime.minutes; + gSpecialVar_0x8002 = gLocalTime.seconds; + return FALSE; +} + +bool8 ScrCmd_setweather(struct ScriptContext *ctx) +{ + u16 value = VarGet(ScriptReadHalfword(ctx)); + SetSav1Weather(value); + return FALSE; +} + +bool8 ScrCmd_resetweather(struct ScriptContext *ctx) +{ + sub_80806E4(); + return FALSE; +} + +bool8 ScrCmd_doweather(struct ScriptContext *ctx) +{ + DoCurrentWeather(); + return FALSE; +} + +bool8 ScrCmd_tileeffect(struct ScriptContext *ctx) +{ + ActivatePerStepCallback(ScriptReadByte(ctx)); + return FALSE; +} + +bool8 ScrCmd_setmapfooter(struct ScriptContext *ctx) +{ + u16 value = VarGet(ScriptReadHalfword(ctx)); + sub_8053D14(value); + return FALSE; +} + +bool8 ScrCmd_warp(struct ScriptContext *ctx) +{ + u8 v1 = ScriptReadByte(ctx); + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + u16 v4 = VarGet(ScriptReadHalfword(ctx)); + s8 v5 = VarGet(ScriptReadHalfword(ctx)); + warp1_set(v1, v2, v3, v4, v5); + sub_8080E88(); + player_avatar_init_params_reset(); + return TRUE; +} + +bool8 ScrCmd_warpmuted(struct ScriptContext *ctx) +{ + u8 v1 = ScriptReadByte(ctx); + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + u16 v4 = VarGet(ScriptReadHalfword(ctx)); + s8 v5 = VarGet(ScriptReadHalfword(ctx)); + warp1_set(v1, v2, v3, v4, v5); + sp13E_warp_to_last_warp(); + player_avatar_init_params_reset(); + return TRUE; +} + +bool8 ScrCmd_warpwalk(struct ScriptContext *ctx) +{ + u8 v1 = ScriptReadByte(ctx); + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + u16 v4 = VarGet(ScriptReadHalfword(ctx)); + s8 v5 = VarGet(ScriptReadHalfword(ctx)); + warp1_set(v1, v2, v3, v4, v5); + sub_8080EF0(); + player_avatar_init_params_reset(); + return TRUE; +} + +bool8 ScrCmd_warphole(struct ScriptContext *ctx) +{ + u8 v1 = ScriptReadByte(ctx); + u8 v2 = ScriptReadByte(ctx); + u16 x; + u16 y; + + PlayerGetDestCoords(&x, &y); + + if (v1 == 0xFF && v2 == 0xFF) + sub_8053720(x - 7, y - 7); + else + warp1_set(v1, v2, -1, x - 7, y - 7); + + sp13F_fall_to_last_warp(); + player_avatar_init_params_reset(); + return TRUE; +} + +bool8 ScrCmd_warpteleport(struct ScriptContext *ctx) +{ + u8 v1 = ScriptReadByte(ctx); + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + u16 v4 = VarGet(ScriptReadHalfword(ctx)); + s8 v5 = VarGet(ScriptReadHalfword(ctx)); + warp1_set(v1, v2, v3, v4, v5); + sub_8080F68(); + player_avatar_init_params_reset(); + return TRUE; +} + +bool8 ScrCmd_warp3(struct ScriptContext *ctx) +{ + u8 v1 = ScriptReadByte(ctx); + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + u16 v4 = VarGet(ScriptReadHalfword(ctx)); + s8 v5 = VarGet(ScriptReadHalfword(ctx)); + warp1_set(v1, v2, v3, v4, v5); + return FALSE; +} + +bool8 ScrCmd_warpplace(struct ScriptContext *ctx) +{ + u8 v1 = ScriptReadByte(ctx); + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + u16 v4 = VarGet(ScriptReadHalfword(ctx)); + s8 v5 = VarGet(ScriptReadHalfword(ctx)); + saved_warp2_set_2(0, v1, v2, v3, v4, v5); + return FALSE; +} + +bool8 ScrCmd_warp4(struct ScriptContext *ctx) +{ + u8 v1 = ScriptReadByte(ctx); + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + u16 v4 = VarGet(ScriptReadHalfword(ctx)); + s8 v5 = VarGet(ScriptReadHalfword(ctx)); + sub_8053690(v1, v2, v3, v4, v5); + return FALSE; +} + +bool8 ScrCmd_warp5(struct ScriptContext *ctx) +{ + u8 v1 = ScriptReadByte(ctx); + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + u16 v4 = VarGet(ScriptReadHalfword(ctx)); + s8 v5 = VarGet(ScriptReadHalfword(ctx)); + sub_80536E4(v1, v2, v3, v4, v5); + return FALSE; +} + +bool8 ScrCmd_warp6(struct ScriptContext *ctx) +{ + u8 v1 = ScriptReadByte(ctx); + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + u16 v4 = VarGet(ScriptReadHalfword(ctx)); + s8 v5 = VarGet(ScriptReadHalfword(ctx)); + sub_805363C(v1, v2, v3, v4, v5); + return FALSE; +} + +bool8 ScrCmd_getplayerxy(struct ScriptContext *ctx) +{ + u16 *ptr1 = GetVarPointer(ScriptReadHalfword(ctx)); + u16 *ptr2 = GetVarPointer(ScriptReadHalfword(ctx)); + *ptr1 = gSaveBlock1.pos.x; + *ptr2 = gSaveBlock1.pos.y; + return FALSE; +} + +bool8 ScrCmd_countpokemon(struct ScriptContext *ctx) +{ + gScriptResult = CalculatePlayerPartyCount(); + return FALSE; +} + +bool8 ScrCmd_playsfx(struct ScriptContext *ctx) +{ + PlaySE(ScriptReadHalfword(ctx)); + return FALSE; +} + +bool8 s30_music_check_asm() +{ + if (!IsSEPlaying()) + return TRUE; + else + return FALSE; +} + +bool8 ScrCmd_checksound(struct ScriptContext *ctx) +{ + SetupNativeScript(ctx, s30_music_check_asm); + return TRUE; +} + +bool8 ScrCmd_fanfare(struct ScriptContext *ctx) +{ + PlayFanfare(ScriptReadHalfword(ctx)); + return FALSE; +} + +bool8 s32_fanfare_wait_asm() +{ + return IsFanfareTaskInactive(); +} + +bool8 ScrCmd_waitfanfare(struct ScriptContext *ctx) +{ + SetupNativeScript(ctx, s32_fanfare_wait_asm); + return TRUE; +} + +bool8 ScrCmd_playmusic(struct ScriptContext *ctx) +{ + u16 songId = ScriptReadHalfword(ctx); + bool8 val = ScriptReadByte(ctx); + if (val == TRUE) + sav1_set_battle_music_maybe(songId); + PlayNewMapMusic(songId); + return FALSE; +} + +bool8 ScrCmd_playmusicbattle(struct ScriptContext *ctx) +{ + sav1_set_battle_music_maybe(ScriptReadHalfword(ctx)); + return FALSE; +} + +bool8 ScrCmd_fadedefault(struct ScriptContext *ctx) +{ + sub_8053F84(); + return FALSE; +} + +bool8 ScrCmd_fademusic(struct ScriptContext *ctx) +{ + sub_8053FB0(ScriptReadHalfword(ctx)); + return FALSE; +} + +bool8 ScrCmd_fadeout(struct ScriptContext *ctx) +{ + u8 val = ScriptReadByte(ctx); + if (val) + FadeOutBGMTemporarily(4 * val); + else + FadeOutBGMTemporarily(4); + SetupNativeScript(ctx, IsBGMPausedOrStopped); + return TRUE; +} + +bool8 ScrCmd_fadein(struct ScriptContext *ctx) +{ + u8 val = ScriptReadByte(ctx); + if (val) + FadeInBGM(4 * val); + else + FadeInBGM(4); + return FALSE; +} + +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; + 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); + gUnknown_0202E8B6 = v1; + return FALSE; +} + +bool8 s51a_0806B288(void) +{ + return sub_80A212C(gUnknown_0202E8B6, gUnknown_0202E8BA, gUnknown_0202E8B8); +} + +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; + SetupNativeScript(ctx, s51a_0806B288); + return TRUE; +} + +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; + SetupNativeScript(ctx, s51a_0806B288); + return TRUE; +} + +bool8 ScrCmd_disappear(struct ScriptContext *ctx) +{ + u16 objectId = VarGet(ScriptReadHalfword(ctx)); + RemoveFieldObjectByLocalIdAndMap(objectId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + return FALSE; +} + +bool8 ScrCmd_disappearxy(struct ScriptContext *ctx) +{ + u16 objectId = VarGet(ScriptReadHalfword(ctx)); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + RemoveFieldObjectByLocalIdAndMap(objectId, mapNum, mapGroup); + return FALSE; +} + +bool8 ScrCmd_reappear(struct ScriptContext *ctx) +{ + u16 objectId = VarGet(ScriptReadHalfword(ctx)); + show_sprite(objectId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + return FALSE; +} + +bool8 ScrCmd_reappearxy(struct ScriptContext *ctx) +{ + u16 objectId = VarGet(ScriptReadHalfword(ctx)); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + show_sprite(objectId, mapNum, mapGroup); + return FALSE; +} + +bool8 ScrCmd_movesprite(struct ScriptContext *ctx) +{ + u16 v1 = VarGet(ScriptReadHalfword(ctx)); + u16 v2 = VarGet(ScriptReadHalfword(ctx)); + u32 v3 = VarGet(ScriptReadHalfword(ctx)); + sub_805C0F8(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, v2, v3); + return FALSE; +} + +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); + return FALSE; +} + +bool8 ScrCmd_moveoffscreen(struct ScriptContext *ctx) +{ + u16 v1 = VarGet(ScriptReadHalfword(ctx)); + sub_805C78C(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + return FALSE; +} + +bool8 ScrCmd_spritevisible(struct ScriptContext *ctx) +{ + u16 v1 = VarGet(ScriptReadHalfword(ctx)); + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + npc_by_local_id_and_map_set_field_1_bit_x20(v1, v3, v2, 0); + return FALSE; +} + +bool8 ScrCmd_spriteinvisible(struct ScriptContext *ctx) +{ + u16 v1 = VarGet(ScriptReadHalfword(ctx)); + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + npc_by_local_id_and_map_set_field_1_bit_x20(v1, v3, v2, 1); + return FALSE; +} + +bool8 ScrCmd_spritelevelup(struct ScriptContext *ctx) +{ + u16 v1 = VarGet(ScriptReadHalfword(ctx)); + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + u8 v4 = ScriptReadByte(ctx); + sub_805BCF0(v1, v3, v2, v4 + 83); + return FALSE; +} + +bool8 ScrCmd_restorespritelevel(struct ScriptContext *ctx) +{ + u16 v1 = VarGet(ScriptReadHalfword(ctx)); + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + sub_805BD48(v1, v3, v2); + return FALSE; +} + +bool8 ScrCmd_faceplayer(struct ScriptContext *ctx) +{ + if (gMapObjects[gSelectedMapObject].active) + { + FieldObjectFaceOppositeDirection(&gMapObjects[gSelectedMapObject], + player_get_direction_lower_nybble()); + } + return FALSE; +} + +bool8 ScrCmd_spriteface(struct ScriptContext *ctx) +{ + u16 v1 = VarGet(ScriptReadHalfword(ctx)); + u8 v2 = ScriptReadByte(ctx); + FieldObjectTurnByLocalIdAndMap(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, v2); + return FALSE; +} + +bool8 ScrCmd_spritebehave(struct ScriptContext *ctx) +{ + u16 v1 = VarGet(ScriptReadHalfword(ctx)); + u8 v2 = ScriptReadByte(ctx); + update_saveblock1_field_object_movement_behavior(v1, v2); + return FALSE; +} + +bool8 ScrCmd_createvsprite(struct ScriptContext *ctx) +{ + u8 v1 = ScriptReadByte(ctx); + u8 v2 = ScriptReadByte(ctx); + u16 v3 = VarGet(ScriptReadHalfword(ctx)); + u32 v4 = VarGet(ScriptReadHalfword(ctx)); + u8 v5 = ScriptReadByte(ctx); + u8 v6 = ScriptReadByte(ctx); + sub_805B410(v1, v2, v3, v4, v5, v6); + return FALSE; +} + +bool8 ScrCmd_vspriteface(struct ScriptContext *ctx) +{ + u8 v1 = ScriptReadByte(ctx); + u8 v2 = ScriptReadByte(ctx); + sub_8064990(v1, v2); + return FALSE; +} + +bool8 ScrCmd_lockall(struct ScriptContext *ctx) +{ + if (is_c1_link_related_active()) + { + return FALSE; + } + else + { + ScriptFreezeMapObjects(); + SetupNativeScript(ctx, sub_8064CFC); + return TRUE; + } +} + +bool8 ScrCmd_lock(struct ScriptContext *ctx) +{ + if (is_c1_link_related_active()) + { + return FALSE; + } + else + { + if (gMapObjects[gSelectedMapObject].active) + { + sub_8064DD8(); + SetupNativeScript(ctx, sub_8064DB4); + } + else + { + ScriptFreezeMapObjects(); + SetupNativeScript(ctx, sub_8064CFC); + } + + return TRUE; + } +} + +bool8 ScrCmd_releaseall(struct ScriptContext *ctx) +{ + u8 objectId; + + HideFieldMessageBox(); + objectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); + FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[objectId]); + sub_80A2178(); + UnfreezeMapObjects(); + return FALSE; +} + +bool8 ScrCmd_release(struct ScriptContext *ctx) +{ + u8 objectId; + + HideFieldMessageBox(); + if (gMapObjects[gSelectedMapObject].active) + FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gSelectedMapObject]); + objectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); + FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[objectId]); + sub_80A2178(); + UnfreezeMapObjects(); + return FALSE; +} + +bool8 ScrCmd_message(struct ScriptContext *ctx) +{ + u8 *msg = (u8 *)ScriptReadWord(ctx); + if (!msg) + msg = (u8 *)ctx->data[0]; + ShowFieldMessage(msg); + return FALSE; +} + +bool8 ScrCmd_message2(struct ScriptContext *ctx) +{ + u8 *msg = (u8 *)ScriptReadWord(ctx); + if (!msg) + msg = (u8 *)ctx->data[0]; + ShowFieldAutoScrollMessage(msg); + return FALSE; +} + +bool8 ScrCmd_waittext(struct ScriptContext *ctx) +{ + SetupNativeScript(ctx, IsFieldMessageBoxHidden); + return TRUE; +} + +bool8 ScrCmd_closebutton(struct ScriptContext *ctx) +{ + HideFieldMessageBox(); + return FALSE; +} + +bool8 WaitForAorBPress(void) +{ + if (gMain.newKeys & A_BUTTON) + return TRUE; + if (gMain.newKeys & B_BUTTON) + return TRUE; + return FALSE; +} + +bool8 ScrCmd_waitbutton(struct ScriptContext *ctx) +{ + SetupNativeScript(ctx, WaitForAorBPress); + return TRUE; +} + +bool8 ScrCmd_yesnobox(struct ScriptContext *ctx) +{ + u8 v1 = ScriptReadByte(ctx); + u8 v2 = ScriptReadByte(ctx); + if (yes_no_box(v1, v2) == 1) + { + ScriptContext1_Stop(); + return TRUE; + } + else + { + return FALSE; + } +} + +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) + { + ScriptContext1_Stop(); + return TRUE; + } + else + { + return FALSE; + } +} + +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) + { + ScriptContext1_Stop(); + return TRUE; + } + else + { + return FALSE; + } +} + +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); + 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) == 1) + { + ScriptContext1_Stop(); + return TRUE; + } + else + { + return FALSE; + } +} + +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); + return FALSE; +} + +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) + { + ScriptContext1_Stop(); + return TRUE; + } + else + { + return FALSE; + } +} + +bool8 ScrCmd_showpokepic(struct ScriptContext *ctx) +{ + u16 v1 = VarGet(ScriptReadHalfword(ctx)); + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + sub_80B58C4(v1, v2, v3); + return FALSE; +} + +bool8 ScrCmd_hidepokepic(struct ScriptContext *ctx) +{ + void *func = picbox_close(); + if (!func) + return FALSE; + + SetupNativeScript(ctx, func); + return TRUE; +} + +bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx) +{ + u8 v1 = ScriptReadByte(ctx); + if (v1) + sub_8106630(v1); + ShowContestWinner(); + ScriptContext1_Stop(); + return TRUE; +} + +bool8 ScrCmd_braillemsg(struct ScriptContext *ctx) +{ + u8 *ptr = (u8 *)ScriptReadWord(ctx); + u8 v2 = ptr[0]; + u8 v3 = ptr[1]; + u8 v4 = ptr[2]; + u8 v5 = ptr[3]; + u8 v6 = ptr[4]; + u8 v7 = ptr[5]; + StringBraille(gStringVar4, ptr + 6); + MenuDrawTextWindow(v2, v3, v4, v5); + MenuPrint(gStringVar4, v6, v7); + return FALSE; +} + +bool8 ScrCmd_vtext(struct ScriptContext *ctx) +{ + u32 v1 = ScriptReadWord(ctx); + ShowFieldMessage((u8 *)(v1 - gUnknown_0202E8B0)); + return FALSE; +} + +bool8 ScrCmd_bufferpoke(struct ScriptContext *ctx) +{ + u8 stringVarIndex = ScriptReadByte(ctx); + u16 species = VarGet(ScriptReadHalfword(ctx)); + StringCopy(sScriptStringVars[stringVarIndex], gSpeciesNames[species]); + return FALSE; +} + +bool8 ScrCmd_bufferfirstpoke(struct ScriptContext *ctx) +{ + u8 stringVarIndex = ScriptReadByte(ctx); + u8 *dest = sScriptStringVars[stringVarIndex]; + u8 partyIndex = GetLeadMonIndex(); + u32 species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL); + StringCopy(dest, gSpeciesNames[species]); + return FALSE; +} + +bool8 ScrCmd_bufferpartypoke(struct ScriptContext *ctx) +{ + u8 stringVarIndex = ScriptReadByte(ctx); + u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); + GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, sScriptStringVars[stringVarIndex]); + StringGetEnd10(sScriptStringVars[stringVarIndex]); + return FALSE; +} + +bool8 ScrCmd_bufferitem(struct ScriptContext *ctx) +{ + u8 stringVarIndex = ScriptReadByte(ctx); + u16 itemId = VarGet(ScriptReadHalfword(ctx)); + CopyItemName(itemId, sScriptStringVars[stringVarIndex]); + return FALSE; +} + +bool8 ScrCmd_bufferdecor(struct ScriptContext *ctx) +{ + u8 stringVarIndex = ScriptReadByte(ctx); + u16 decorId = VarGet(ScriptReadHalfword(ctx)); + StringCopy(sScriptStringVars[stringVarIndex], gDecorations[decorId].name); + return FALSE; +} + +bool8 ScrCmd_bufferattack(struct ScriptContext *ctx) +{ + u8 stringVarIndex = ScriptReadByte(ctx); + u16 moveId = VarGet(ScriptReadHalfword(ctx)); + StringCopy(sScriptStringVars[stringVarIndex], gMoveNames[moveId]); + return FALSE; +} + +bool8 ScrCmd_buffernum(struct ScriptContext *ctx) +{ + u8 stringVarIndex = ScriptReadByte(ctx); + u16 v1 = VarGet(ScriptReadHalfword(ctx)); + u8 v2 = sub_80BF0B8(v1); + ConvertIntToDecimalStringN(sScriptStringVars[stringVarIndex], v1, 0, v2); + return FALSE; +} + +bool8 ScrCmd_bufferstd(struct ScriptContext *ctx) +{ + u8 stringVarIndex = ScriptReadByte(ctx); + u16 index = VarGet(ScriptReadHalfword(ctx)); + StringCopy(sScriptStringVars[stringVarIndex], gUnknown_083CE048[index]); + return FALSE; +} + +bool8 ScrCmd_buffertext(struct ScriptContext *ctx) +{ + u8 stringVarIndex = ScriptReadByte(ctx); + u8 *text = (u8 *)ScriptReadWord(ctx); + StringCopy(sScriptStringVars[stringVarIndex], text); + return FALSE; +} + +bool8 ScrCmd_vloadptr(struct ScriptContext *ctx) +{ + u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0); + StringExpandPlaceholders(gStringVar4, ptr); + return FALSE; +} + +bool8 ScrCmd_vbuffer(struct ScriptContext *ctx) +{ + u8 stringVarIndex = ScriptReadByte(ctx); + u32 addr = ScriptReadWord(ctx); + u8 *src = (u8 *)(addr - gUnknown_0202E8B0); + u8 *dest = sScriptStringVars[stringVarIndex]; + StringCopy(dest, src); + return FALSE; +} + +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); + return FALSE; +} + +bool8 ScrCmd_giveegg(struct ScriptContext *ctx) +{ + u16 value = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = ScriptGiveEgg(value); + return FALSE; +} + +bool8 ScrCmd_setpokemove(struct ScriptContext *ctx) +{ + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + u16 v4 = ScriptReadHalfword(ctx); + ScriptSetMonMoveSlot(v2, v4, v3); + return FALSE; +} + +bool8 ScrCmd_checkattack(struct ScriptContext *ctx) +{ + u8 i; + u16 moveId = ScriptReadHalfword(ctx); + gScriptResult = 6; + for (i = 0; i < 6; i++) + { + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL); + if (!species) + break; + // UB: GetMonData() arguments don't match function definition + if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) && pokemon_has_move(&gPlayerParty[i], moveId) == TRUE) + { + gScriptResult = i; + gSpecialVar_0x8004 = species; + break; + } + } + return FALSE; +} + +bool8 ScrCmd_givemoney(struct ScriptContext *ctx) +{ + u32 amount = ScriptReadWord(ctx); + u8 ignore = ScriptReadByte(ctx); + if (!ignore) + sub_80B79B8(&gSaveBlock1.money, amount); + return FALSE; +} + +bool8 ScrCmd_paymoney(struct ScriptContext *ctx) +{ + u32 amount = ScriptReadWord(ctx); + u8 ignore = ScriptReadByte(ctx); + if (!ignore) + sub_80B79E0(&gSaveBlock1.money, amount); + return FALSE; +} + +bool8 ScrCmd_checkmoney(struct ScriptContext *ctx) +{ + u32 amount = ScriptReadWord(ctx); + u8 ignore = ScriptReadByte(ctx); + if (!ignore) + gScriptResult = IsEnoughMoney(gSaveBlock1.money, amount); + return FALSE; +} + +bool8 ScrCmd_showmoney(struct ScriptContext *ctx) +{ + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + u8 ignore = ScriptReadByte(ctx); + if (!ignore) + sub_80B7C14(gSaveBlock1.money, v2, v3); + return FALSE; +} + +bool8 ScrCmd_hidemoney(struct ScriptContext *ctx) +{ + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + RemoveMoneyLabelObject(v2, v3); + return FALSE; +} + +bool8 ScrCmd_updatemoney(struct ScriptContext *ctx) +{ + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + u8 ignore = ScriptReadByte(ctx); + if (!ignore) + sub_80B7BEC(gSaveBlock1.money, v2, v3); + return FALSE; +} + +bool8 ScrCmd_showcoins(struct ScriptContext *ctx) +{ + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + ShowCoinsWindow(gSaveBlock1.coins, v2, v3); + return FALSE; +} + +bool8 ScrCmd_hidecoins(struct ScriptContext *ctx) +{ + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + HideCoinsWindow(v2, v3); + return FALSE; +} + +bool8 ScrCmd_updatecoins(struct ScriptContext *ctx) +{ + u8 v2 = ScriptReadByte(ctx); + u8 v3 = ScriptReadByte(ctx); + UpdateCoinsWindow(gSaveBlock1.coins, v2, v3); + return FALSE; +} + +bool8 ScrCmd_trainerbattle(struct ScriptContext *ctx) +{ + ctx->scriptPtr = TrainerBattleConfigure(ctx->scriptPtr); + return FALSE; +} + +bool8 ScrCmd_reptrainerbattle(struct ScriptContext *ctx) +{ + sub_80825E4(); + return TRUE; +} + +bool8 ScrCmd_endtrainerbattle(struct ScriptContext *ctx) +{ + ctx->scriptPtr = sub_80826E8(); + return FALSE; +} + +bool8 ScrCmd_endtrainerbattle2(struct ScriptContext *ctx) +{ + ctx->scriptPtr = sub_8082700(); + return FALSE; +} + +bool8 ScrCmd_checktrainerflag(struct ScriptContext *ctx) +{ + u16 index = VarGet(ScriptReadHalfword(ctx)); + ctx->comparisonResult = trainer_flag_check(index); + return FALSE; +} + +bool8 ScrCmd_cleartrainerflag(struct ScriptContext *ctx) +{ + u16 index = VarGet(ScriptReadHalfword(ctx)); + trainer_flag_set(index); + return FALSE; +} + +bool8 ScrCmd_settrainerflag(struct ScriptContext *ctx) +{ + u16 index = VarGet(ScriptReadHalfword(ctx)); + trainer_flag_clear(index); + return FALSE; +} + +bool8 ScrCmd_setwildbattle(struct ScriptContext *ctx) +{ + u16 v2 = ScriptReadHalfword(ctx); + u8 v4 = ScriptReadByte(ctx); + u16 v5 = ScriptReadHalfword(ctx); + ScriptWildBattle(v2, v4, v5); + return FALSE; +} + +bool8 ScrCmd_dowildbattle(struct ScriptContext *ctx) +{ + StartBattle_ScriptedWild(); + ScriptContext1_Stop(); + return TRUE; +} + +bool8 ScrCmd_pokemart(struct ScriptContext *ctx) +{ + void *ptr = (void *)ScriptReadWord(ctx); + CreatePokemartMenu(ptr); + ScriptContext1_Stop(); + return TRUE; +} + +bool8 ScrCmd_pokemartdecor(struct ScriptContext *ctx) +{ + void *ptr = (void *)ScriptReadWord(ctx); + CreateDecorationShop1Menu(ptr); + ScriptContext1_Stop(); + return TRUE; +} + +bool8 ScrCmd_pokemartbp(struct ScriptContext *ctx) +{ + void *ptr = (void *)ScriptReadWord(ctx); + CreateDecorationShop2Menu(ptr); + ScriptContext1_Stop(); + return TRUE; +} + +bool8 ScrCmd_pokecasino(struct ScriptContext *ctx) +{ + u8 v2 = VarGet(ScriptReadHalfword(ctx)); + PlaySlotMachine(v2, c2_exit_to_overworld_1_continue_scripts_restart_music); + ScriptContext1_Stop(); + return TRUE; +} + +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); + else + PlantBerryTree(v2, v3, v4, FALSE); + return FALSE; +} + +bool8 ScrCmd_event_96(struct ScriptContext *ctx) +{ + u16 value = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = GetPriceReduction(value); + return FALSE; +} + +bool8 ScrCmd_choosecontestpkmn(struct ScriptContext *ctx) +{ + sub_80F99CC(); + ScriptContext1_Stop(); + return TRUE; +} + +bool8 ScrCmd_startcontest(struct ScriptContext *ctx) +{ + sub_80C48C8(); + ScriptContext1_Stop(); + return TRUE; +} + +bool8 ScrCmd_showcontestresults(struct ScriptContext *ctx) +{ + sub_80C4940(); + ScriptContext1_Stop(); + return TRUE; +} + +bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx) +{ + sub_80C4980(gScriptContestCategory); + ScriptContext1_Stop(); + return TRUE; +} + +bool8 ScrCmd_doanimation(struct ScriptContext *ctx) +{ + u16 effectId = VarGet(ScriptReadHalfword(ctx)); + gUnknown_0202E8BC = effectId; + FieldEffectStart(gUnknown_0202E8BC); + return FALSE; +} + +bool8 ScrCmd_setanimation(struct ScriptContext *ctx) +{ + u8 v2 = ScriptReadByte(ctx); + gUnknown_0202FF84[v2] = (s16)VarGet(ScriptReadHalfword(ctx)); + return FALSE; +} + +static bool8 sub_8067B48() +{ + if (!FieldEffectActiveListContains(gUnknown_0202E8BC)) + return TRUE; + else + return FALSE; +} + +bool8 ScrCmd_checkanimation(struct ScriptContext *ctx) +{ + gUnknown_0202E8BC = VarGet(ScriptReadHalfword(ctx)); + SetupNativeScript(ctx, sub_8067B48); + return TRUE; +} + +bool8 ScrCmd_sethealplace(struct ScriptContext *ctx) +{ + u16 v2 = VarGet(ScriptReadHalfword(ctx)); + sub_8053588(v2); + return FALSE; +} + +bool8 ScrCmd_checkgender(struct ScriptContext *ctx) +{ + gScriptResult = gSaveBlock2.playerGender; + return FALSE; +} + +bool8 ScrCmd_pokecry(struct ScriptContext *ctx) +{ + u16 v3 = VarGet(ScriptReadHalfword(ctx)); + u16 v5 = VarGet(ScriptReadHalfword(ctx)); + PlayCry5(v3, v5); + return FALSE; +} + +bool8 ScrCmd_waitpokecry(struct ScriptContext *ctx) +{ + SetupNativeScript(ctx, IsCryFinished); + return TRUE; +} + +bool8 ScrCmd_setmaptile(struct ScriptContext *ctx) +{ + u16 v3 = VarGet(ScriptReadHalfword(ctx)); + u16 v5 = VarGet(ScriptReadHalfword(ctx)); + u16 v7 = VarGet(ScriptReadHalfword(ctx)); + u16 v8 = VarGet(ScriptReadHalfword(ctx)); + v3 += 7; + v5 += 7; + if (!v8) + MapGridSetMetatileIdAt(v3, v5, v7); + else + MapGridSetMetatileIdAt(v3, v5, v7 | 0xC00); + return FALSE; +} + +bool8 ScrCmd_setdooropened(struct ScriptContext *ctx) +{ + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + x += 7; + y += 7; + PlaySE(sub_8058790(x, y)); + FieldAnimateDoorOpen(x, y); + return FALSE; +} + +bool8 ScrCmd_setdoorclosed(struct ScriptContext *ctx) +{ + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + x += 7; + y += 7; + FieldAnimateDoorClose(x, y); + return FALSE; +} + +static bool8 IsDoorAnimationStopped() +{ + if (!FieldIsDoorAnimationRunning()) + return TRUE; + else + return FALSE; +} + +bool8 ScrCmd_doorchange(struct ScriptContext *ctx) +{ + SetupNativeScript(ctx, IsDoorAnimationStopped); + return TRUE; +} + +bool8 ScrCmd_setdooropened2(struct ScriptContext *ctx) +{ + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + x += 7; + y += 7; + FieldSetDoorOpened(x, y); + return FALSE; +} + +bool8 ScrCmd_setdoorclosed2(struct ScriptContext *ctx) +{ + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + x += 7; + y += 7; + FieldSetDoorClosed(x, y); + return FALSE; +} + +bool8 ScrCmd_event_b1(struct ScriptContext *ctx) +{ + u8 v3 = ScriptReadByte(ctx); + u16 v5 = VarGet(ScriptReadHalfword(ctx)); + u16 v7 = VarGet(ScriptReadHalfword(ctx)); + u16 v9 = VarGet(ScriptReadHalfword(ctx)); + ScriptAddElevatorMenuItem(v3, v5, v7, v9); + return FALSE; +} + +bool8 ScrCmd_event_b2(struct ScriptContext *ctx) +{ + ScriptShowElevatorMenu(); + ScriptContext1_Stop(); + return TRUE; +} + +bool8 ScrCmd_checkcoins(struct ScriptContext *ctx) +{ + u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx)); + *ptr = GetCoins(); + return FALSE; +} + +bool8 ScrCmd_givecoins(struct ScriptContext *ctx) +{ + u16 coins = VarGet(ScriptReadHalfword(ctx)); + if (GiveCoins(coins) == TRUE) + gScriptResult = 0; + else + gScriptResult = 1; + + return FALSE; +} + +bool8 ScrCmd_removecoins(struct ScriptContext *ctx) +{ + u16 coins = VarGet(ScriptReadHalfword(ctx)); + if (TakeCoins(coins) == TRUE) + gScriptResult = 0; + else + gScriptResult = 1; + + return FALSE; +} diff --git a/src/field/script_menu.c b/src/field/script_menu.c new file mode 100644 index 000000000..f4ac55fb9 --- /dev/null +++ b/src/field/script_menu.c @@ -0,0 +1,1134 @@ +#include "global.h" +#include "script_menu.h" +#include "event_data.h" +#include "field_effect.h" +#include "menu.h" +#include "palette.h" +#include "script.h" +#include "sound.h" +#include "sprite.h" +#include "strings.h" +#include "task.h" + +// multichoice lists +const struct MenuAction MultichoiceList_00[] = +{ + {(u8 *)OtherText_Petalburg, 0}, + {(u8 *)OtherText_Slateport, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_02[] = +{ + {(u8 *)OtherText_Enter, 0}, + {(u8 *)OtherText_Info3, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_03[] = +{ + {(u8 *)OtherText_WhatsAContest, 0}, + {(u8 *)OtherText_TypesOfContest, 0}, + {(u8 *)OtherText_Ranks, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +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}, +}; + +const struct MenuAction MultichoiceList_06[] = +{ + {(u8 *)OtherText_Decoration, 0}, + {(u8 *)OtherText_PackUp, 0}, + {(u8 *)OtherText_Registry, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_05[] = +{ + {(u8 *)OtherText_Decoration, 0}, + {(u8 *)OtherText_PackUp, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_07[] = +{ + {(u8 *)OtherText_Register, 0}, + {(u8 *)OtherText_Registry, 0}, + {(u8 *)OtherText_Information, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_12[] = +{ + {(u8 *)OtherText_Mach, 0}, + {(u8 *)OtherText_Acro, 0}, +}; + +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}, +}; + +const struct MenuAction MultichoiceList_14[] = +{ + {(u8 *)OtherText_Dewford, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_16[] = +{ + {(u8 *)OtherText_SawIt, 0}, + {(u8 *)OtherText_NotYet, 0}, +}; + +const struct MenuAction MultichoiceList_17[] = +{ + {(u8 *)OtherText_Yes, 0}, + {(u8 *)OtherText_No, 0}, + {(u8 *)OtherText_Info3, 0}, +}; + +const struct MenuAction MultichoiceList_18[] = +{ + {(u8 *)OtherText_SingleBattle, 0}, + {(u8 *)OtherText_DoubleBattle, 0}, + {(u8 *)OtherText_MultiBattle, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_19[] = +{ + {(u8 *)OtherText_Littleroot, 0}, + {(u8 *)OtherText_Slateport, 0}, + {(u8 *)OtherText_Lilycove, 0}, +}; + +const struct MenuAction MultichoiceList_20[] = +{ + {(u8 *)OtherText_Yes, 0}, + {(u8 *)OtherText_No, 0}, + {(u8 *)OtherText_Info3, 0}, +}; + +const struct MenuAction MultichoiceList_23[] = +{ + {(u8 *)OtherText_MakeAChallenge, 0}, + {(u8 *)OtherText_ObtainInformation, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_24[] = +{ + {(u8 *)OtherText_Lv50_2, 0}, + {(u8 *)OtherText_Lv100_2, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_25[] = +{ + {(u8 *)OtherText_Zigzagoon, 0}, + {(u8 *)OtherText_Nincada, 0}, + {(u8 *)OtherText_Poochyena, 0}, +}; + +const struct MenuAction MultichoiceList_26[] = +{ + {(u8 *)OtherText_Nincada2, 0}, + {(u8 *)OtherText_Lotad, 0}, + {(u8 *)OtherText_Roselia, 0}, +}; + +const struct MenuAction MultichoiceList_27[] = +{ + {(u8 *)OtherText_Shroomish, 0}, + {(u8 *)OtherText_Nincada3, 0}, + {(u8 *)OtherText_Surskit, 0}, +}; + +const struct MenuAction MultichoiceList_28[] = +{ + {(u8 *)OtherText_Treecko, 0}, + {(u8 *)OtherText_Torchic, 0}, + {(u8 *)OtherText_Mudkip, 0}, +}; + +const struct MenuAction MultichoiceList_29[] = +{ + {(u8 *)OtherText_Seedot, 0}, + {(u8 *)OtherText_Shroomish2, 0}, + {(u8 *)OtherText_Spinda, 0}, +}; + +const struct MenuAction MultichoiceList_30[] = +{ + {(u8 *)OtherText_Shroomish3, 0}, + {(u8 *)OtherText_Zigzagoon2, 0}, + {(u8 *)OtherText_Wurmple, 0}, +}; + +const struct MenuAction MultichoiceList_31[] = +{ + {(u8 *)OtherText_PokeBall, 0}, + {(u8 *)OtherText_SuperPotion, 0}, + {(u8 *)OtherText_SamePrice, 0}, +}; + +const struct MenuAction MultichoiceList_32[] = +{ + {(u8 *)OtherText_Yen135, 0}, + {(u8 *)OtherText_Yen155, 0}, + {(u8 *)OtherText_Yen175, 0}, +}; + +const struct MenuAction MultichoiceList_33[] = +{ + {(u8 *)OtherText_CostMore, 0}, + {(u8 *)OtherText_CostLess, 0}, + {(u8 *)OtherText_SamePrice2, 0}, +}; + +const struct MenuAction MultichoiceList_34[] = +{ + {(u8 *)OtherText_MaleSymbol, 0}, + {(u8 *)OtherText_FemaleSymbol, 0}, + {(u8 *)OtherText_Neither, 0}, +}; + +const struct MenuAction MultichoiceList_35[] = +{ + {(u8 *)OtherText_Males, 0}, + {(u8 *)OtherText_Females, 0}, + {(u8 *)OtherText_SameNumber, 0}, +}; + +const struct MenuAction MultichoiceList_36[] = +{ + {(u8 *)OtherText_Male, 0}, + {(u8 *)OtherText_Female, 0}, + {(u8 *)OtherText_ItDepends, 0}, +}; + +const struct MenuAction MultichoiceList_37[] = +{ + {(u8 *)OtherText_Six2, 0}, + {(u8 *)OtherText_Eight2, 0}, + {(u8 *)OtherText_Ten, 0}, +}; + +const struct MenuAction MultichoiceList_38[] = +{ + {(u8 *)OtherText_One, 0}, + {(u8 *)OtherText_Two, 0}, + {(u8 *)OtherText_Three, 0}, +}; + +const struct MenuAction MultichoiceList_39[] = +{ + {(u8 *)OtherText_Six, 0}, + {(u8 *)OtherText_Seven, 0}, + {(u8 *)OtherText_Eight, 0}, +}; + +const struct MenuAction MultichoiceList_42[] = +{ + {(u8 *)OtherText_FreshWater, 0}, + {(u8 *)OtherText_SodaPop, 0}, + {(u8 *)OtherText_Lemonade, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_43[] = +{ + {(u8 *)OtherText_HowToRide, 0}, + {(u8 *)OtherText_HowToTurn, 0}, + {(u8 *)OtherText_SandySlopes, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_44[] = +{ + {(u8 *)OtherText_Wheelies, 0}, + {(u8 *)OtherText_BunnyHops, 0}, + {(u8 *)OtherText_Jumping, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_45[] = +{ + {(u8 *)OtherText_Satisfied, 0}, + {(u8 *)OtherText_Dissatisfied, 0}, +}; + +const struct MenuAction MultichoiceList_46[] = +{ + {(u8 *)OtherText_Deepseatooth, 0}, + {(u8 *)OtherText_Deepseascale, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +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}, +}; + +const struct MenuAction MultichoiceList_48[] = +{ + {(u8 *)OtherText_TreeckoDoll, 0}, + {(u8 *)OtherText_TorchicDoll, 0}, + {(u8 *)OtherText_MudkipDoll, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +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}, +}; + +const struct MenuAction MultichoiceList_49[] = +{ + {(u8 *)OtherText_50Coins, 0}, + {(u8 *)OtherText_500Coins, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_50[] = +{ + {(u8 *)OtherText_Excellent, 0}, + {(u8 *)OtherText_NotSoHot, 0}, +}; + +const struct MenuAction MultichoiceList_52[] = +{ + {(u8 *)OtherText_Lilycove, 0}, + {(u8 *)OtherText_BattleTower, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_53[] = +{ + {(u8 *)OtherText_Slateport, 0}, + {(u8 *)OtherText_Lilycove, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_54[] = +{ + {(u8 *)OtherText_Right, 0}, + {(u8 *)OtherText_Left, 0}, +}; + +const struct MenuAction MultichoiceList_56[] = +{ + {(u8 *)OtherText_Slateport, 0}, + {(u8 *)OtherText_BattleTower, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +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}, +}; + +const struct MenuAction MultichoiceList_58[] = +{ + {(u8 *)OtherText_RedShard, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_59[] = +{ + {(u8 *)OtherText_YellowShard, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_60[] = +{ + {(u8 *)OtherText_RedShard, 0}, + {(u8 *)OtherText_YellowShard, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_61[] = +{ + {(u8 *)OtherText_BlueShard, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_62[] = +{ + {(u8 *)OtherText_RedShard, 0}, + {(u8 *)OtherText_BlueShard, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_63[] = +{ + {(u8 *)OtherText_YellowShard, 0}, + {(u8 *)OtherText_BlueShard, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_64[] = +{ + {(u8 *)OtherText_RedShard, 0}, + {(u8 *)OtherText_YellowShard, 0}, + {(u8 *)OtherText_BlueShard, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_65[] = +{ + {(u8 *)OtherText_GreenShard, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_66[] = +{ + {(u8 *)OtherText_RedShard, 0}, + {(u8 *)OtherText_GreenShard, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_67[] = +{ + {(u8 *)OtherText_YellowShard, 0}, + {(u8 *)OtherText_GreenShard, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_68[] = +{ + {(u8 *)OtherText_RedShard, 0}, + {(u8 *)OtherText_YellowShard, 0}, + {(u8 *)OtherText_GreenShard, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_69[] = +{ + {(u8 *)OtherText_BlueShard, 0}, + {(u8 *)OtherText_GreenShard, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_70[] = +{ + {(u8 *)OtherText_RedShard, 0}, + {(u8 *)OtherText_BlueShard, 0}, + {(u8 *)OtherText_GreenShard, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +const struct MenuAction MultichoiceList_71[] = +{ + {(u8 *)OtherText_YellowShard, 0}, + {(u8 *)OtherText_BlueShard, 0}, + {(u8 *)OtherText_GreenShard, 0}, + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +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}, +}; + +const struct MenuAction MultichoiceList_01[] = +{ + {(u8 *)gOtherText_CancelNoTerminator, 0}, +}; + +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} +}; + +const u8 *const gUnknown_083CE048[] = +{ + OtherText_Cool2, + OtherText_Beauty3, + OtherText_Cute2, + OtherText_Smart2, + OtherText_Tough2, + OtherText_Normal, + OtherText_Super, + OtherText_Hyper, + OtherText_Master, + OtherText_Cool3, + OtherText_Beauty4, + OtherText_Cute3, + OtherText_Smart3, + OtherText_Tough3, + OtherText_Items, + OtherText_KeyItems, + OtherText_Balls, + OtherText_TMsHMs, + OtherText_Berries, +}; + +extern u8 gPCText_WhichPCShouldBeAccessed[]; + +extern u16 gScriptResult; + +bool8 sub_80B5054(u8 left, u8 top, u8 var3, u8 var4) +{ + if (FuncIsActiveTask(sub_80B52B4) == 1) + return FALSE; + else + { + gScriptResult = 0xFF; + DrawMultichoiceMenu(left, top, gMultichoiceLists[var3].count, gMultichoiceLists[var3].list, var4, 0); + return TRUE; + } +} + +bool8 sub_80B50B0(u8 left, u8 top, u8 var3, u8 var4, u8 var5) +{ + if (FuncIsActiveTask(sub_80B52B4) == 1) + return FALSE; + else + { + gScriptResult = 0xFF; + DrawMultichoiceMenu(left, top, gMultichoiceLists[var3].count, gMultichoiceLists[var3].list, var4, var5); + return TRUE; + } +} + +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, struct MenuAction *list, u8 var4, u8 cursorPos) +{ + u16 width = GetStringWidthInTilesForScriptMenu(list[0].text); + u16 newWidth; + u8 i; + u8 right; + u8 bottom; + + for (i = 1; i < count; i++) + { + newWidth = GetStringWidthInTilesForScriptMenu(list[i].text); + if (width < newWidth) + width = newWidth; + } + + right = width; + right = (right + left) + 1; + + if (right > 29) + { + left = left + (29 - right); + right = 29; + } + + bottom = top + (2 * count + 1); + + 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); +} + +void sub_80B5230(u8 left, u8 top, u8 right, u8 bottom, u8 unkVar, u8 count) +{ + u8 taskId = CreateTask(sub_80B52B4, 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; + + if (count > 3) + gTasks[taskId].data[5] = TRUE; + else + gTasks[taskId].data[5] = FALSE; +} + +void sub_80B52B4(u8 taskId) +{ + s8 var; + + if (!gPaletteFade.active) + { + if (!gTasks[taskId].data[5]) + var = ProcessMenuInputNoWrap(); + else + var = ProcessMenuInput(); + + if (var != -2) + { + if (var == -1) + { + if (!gTasks[taskId].data[4]) + { + PlaySE(5); + gScriptResult = 127; + } + else + { + return; + } + } + else + { + gScriptResult = var; + } + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(gTasks[taskId].data[0], gTasks[taskId].data[1], gTasks[taskId].data[2], gTasks[taskId].data[3]); + DestroyTask(taskId); + EnableBothScriptContexts(); + } + } +} + +bool8 Multichoice(u8 var1, u8 var2, u8 var3, u8 var4) +{ + if (FuncIsActiveTask(sub_80B52B4) == 1) + return FALSE; + else + { + gScriptResult = 0xFF; + sub_80B53B4(var1, var2, gMultichoiceLists[var3].count, gMultichoiceLists[var3].list, var4); + return TRUE; + } +} + +void sub_80B53B4(u8 left, u8 top, u8 count, struct MenuAction *list, u8 var4) +{ + u16 width = GetStringWidthInTilesForScriptMenu(list[0].text); + u16 newWidth; + u8 i; + u8 right; + u8 bottom; + + for (i = 1; i < count; i++) + { + newWidth = GetStringWidthInTilesForScriptMenu(list[i].text); + if (width < newWidth) + width = newWidth; + } + + right = width; + right = (right + left) + 2; + bottom = top + (2 * count + 1); + + PrintMenuItems(left, top, count, list); + InitMenu(0, left, top, count, 0, right - left - 1); + sub_80B5230(left, top, right, bottom, var4, count); +} + +bool8 yes_no_box(u8 var1, u8 var2) +{ + u8 taskId; + + if (FuncIsActiveTask(task_yes_no_maybe) == 1) + 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; + return TRUE; + } +} + +// unused +bool8 IsScriptActive(void) +{ + if (gScriptResult == 0xFF) + return FALSE; + else + return TRUE; +} + +void task_yes_no_maybe(u8 taskId) +{ + u8 left, top; + + if (gTasks[taskId].data[2] < 5) + { + gTasks[taskId].data[2]++; + return; + } + + switch (ProcessMenuInputNoWrap()) + { + case -2: + return; + case -1: + case 1: + PlaySE(5); + gScriptResult = 0; + break; + case 0: + gScriptResult = 1; + break; + } + + left = gTasks[taskId].data[0]; + top = gTasks[taskId].data[1]; + + MenuZeroFillWindowRect(left, top, left + 6, top + 5); + DestroyTask(taskId); + EnableBothScriptContexts(); +} + +bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount) +{ + u8 bottom = 0; + + if (FuncIsActiveTask(sub_80B5684) == TRUE) + { + return FALSE; + } + else + { + u8 taskId; + u8 width; + + gScriptResult = 0xFF; + + sub_807274C(left, top, gMultichoiceLists[multichoiceId].count, 0, gMultichoiceLists[multichoiceId].list, columnCount, 0); + + taskId = CreateTask(sub_80B5684, 80); + + if (!((gMultichoiceLists[multichoiceId].count >> 1) < columnCount || (gMultichoiceLists[multichoiceId].count & 1)) + || columnCount == 1 || gMultichoiceLists[multichoiceId].count == columnCount) + { + bottom = (2 * (gMultichoiceLists[multichoiceId].count / columnCount)) + 1 + top; + } + else + { + bottom = (2 * (gMultichoiceLists[multichoiceId].count / columnCount)) + 3 + top; + } + + 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; + return TRUE; + } +} + +void sub_80B5684(u8 taskId) +{ + s8 var = sub_80727CC(); + + if (var != -2) + { + if (var == -1) + { + if (!gTasks[taskId].data[4]) + { + PlaySE(5); + gScriptResult = 127; + } + else + { + return; + } + } + else + { + gScriptResult = var; + } + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(gTasks[taskId].data[0], gTasks[taskId].data[1], gTasks[taskId].data[2], gTasks[taskId].data[3]); + DestroyTask(taskId); + EnableBothScriptContexts(); + } +} + +bool8 TryCreatePCMenu(void) +{ + if (FuncIsActiveTask(sub_80B52B4) == 1) + return FALSE; + else + { + gScriptResult = 0xFF; + CreatePCMenu(); + return TRUE; + } +} + +#if ENGLISH +void CreatePCMenu(void) +{ + u16 playersPCWidth = GetStringWidthInTilesForScriptMenu(gPCText_PlayersPC); + u8 width; + u8 numChoices; + + if (playersPCWidth > GetStringWidthInTilesForScriptMenu(gPCText_SomeonesPC)) + width = playersPCWidth; + else + width = 8; + + if (FlagGet(SYS_GAME_CLEAR)) // player has cleared game? + { + numChoices = 4; + MenuDrawTextWindow(0, 0, width + 2, 9); + MenuPrint(gPCText_HallOfFame, 1, 5); + MenuPrint(gPCText_LogOff, 1, 7); + } + else + { + numChoices = 3; + MenuDrawTextWindow(0, 0, width + 2, 7); + MenuPrint(gPCText_LogOff, 1, 5); + } + + if (FlagGet(SYS_PC_LANETTE)) // player met lanette? + MenuPrint(gPCText_LanettesPC, 1, 1); + else + MenuPrint(gPCText_SomeonesPC, 1, 1); + + MenuPrint(gPCText_PlayersPC, 1, 3); + InitMenu(0, 1, 1, numChoices, 0, width + 1); + sub_80B5230(0, 0, width + 2, 2 * numChoices + 1, 0, numChoices); +} +#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\ +_080B5748: .4byte 0x0000084b\n\ +_080B574C: .4byte gPCText_LanettesPC\n\ +_080B5750:\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\ +_080B5798:\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\ +_080B57AC:\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\ +_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\ +_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\ +_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\ +_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\ +_080B5888: .4byte gPCText_SomeonesPC\n\ +_080B588C: .4byte gPCText_PlayersPC\n\ + .syntax divided\n"); +} +#endif + +void sub_80B5838(void) +{ + MenuDisplayMessageBox(); + MenuPrint(gPCText_WhichPCShouldBeAccessed, 2, 15); +} + +void task_picbox(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[0]++; + break; + case 1: + break; + case 2: + FreeResourcesAndDestroySprite(&gSprites[task->data[2]]); + task->data[0]++; + break; + case 3: + MenuZeroFillWindowRect(task->data[3], task->data[4], task->data[3] + 9, task->data[4] + 10); + DestroyTask(taskId); + break; + } +} + +bool8 sub_80B58C4(u16 var1, u8 var2, u8 var3) +{ + u8 taskId; + u8 var; + + if (FindTaskIdByFunc(task_picbox) != 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; + return TRUE; + } +} + +void *picbox_close(void) +{ + u8 taskId = FindTaskIdByFunc(task_picbox); + + if (taskId == 0xFF) + return NULL; + + gTasks[taskId].data[0]++; + return (void *)sub_80B59AC; +} + +bool8 sub_80B59AC(void) +{ + if (FindTaskIdByFunc(task_picbox) == 0xFF) + return TRUE; + else + return FALSE; +} diff --git a/src/field/script_movement.c b/src/field/script_movement.c new file mode 100644 index 000000000..e25b60a3c --- /dev/null +++ b/src/field/script_movement.c @@ -0,0 +1,224 @@ +#include "global.h" +#include "script_movement.h" +#include "field_map_obj.h" +#include "field_map_obj_helpers.h" +#include "task.h" +#include "util.h" + +static EWRAM_DATA u8 *gUnknown_020384F8[16] = {0}; + +static void sub_80A2198(u8); +static u8 sub_80A21E0(void); +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 Task_80A244C(u8); +static void sub_80A2490(u8, u8, u8, u8 *); + +bool8 exec_movement(u8 a, u8 b, u8 c, u8 *d) +{ + u8 mapObjId; + + if (TryGetFieldObjectIdByLocalIdAndMap(a, b, c, &mapObjId)) + return TRUE; + if (!FuncIsActiveTask(Task_80A244C)) + sub_80A2198(50); + return sub_80A21F4(sub_80A21E0(), mapObjId, d); +} + +bool8 sub_80A212C(u8 a, u8 b, u8 c) +{ + u8 mapObjId; + u8 r4; + u8 r1; + + if (TryGetFieldObjectIdByLocalIdAndMap(a, b, c, &mapObjId)) + return 1; + r4 = sub_80A21E0(); + r1 = sub_80A2260(r4, mapObjId); + if (r1 == 16) + return 1; + return sub_80A2370(r4, r1); +} + +void sub_80A2178(void) +{ + u8 taskId; + + taskId = sub_80A21E0(); + if (taskId != 0xFF) + { + sub_80A2408(taskId); + DestroyTask(taskId); + } +} + +static void sub_80A2198(u8 priority) +{ + u8 taskId; + u8 i; + + taskId = CreateTask(Task_80A244C, priority); + for (i = 1; i < 16; i++) + gTasks[taskId].data[i] = 0xFFFF; +} + +static u8 sub_80A21E0(void) +{ + return FindTaskIdByFunc(Task_80A244C); +} + +static bool8 sub_80A21F4(u8 taskId, u8 b, u8 *c) +{ + u8 r4; + + r4 = sub_80A2260(taskId, b); + if (r4 != 16) + { + if (sub_80A2370(taskId, r4) == 0) + return TRUE; + else + { + sub_80A23C8(taskId, r4, b, c); + return FALSE; + } + } + r4 = sub_80A2260(taskId, 0xFF); + if (r4 == 16) + return TRUE; + else + { + sub_80A23C8(taskId, r4, b, c); + return FALSE; + } +} + +static u8 sub_80A2260(u8 taskId, u8 b) +{ + u8 *ptr; + u8 i; + + ptr = (u8 *)&gTasks[taskId].data[1]; + for (i = 0; i < 16; i++, ptr++) + { + if (*ptr == b) + return i; + } + return 16; +} + +static void sub_80A229C(u8 taskId, u8 b, u8 **c) +{ + u8 i; + + *c = (u8 *)&gTasks[taskId].data[1]; + for (i = 0; i < b; i++, (*c)++) + ; +} + +static void sub_80A22D0(u8 taskId, u8 b, u8 c) +{ + u8 *ptr; + + sub_80A229C(taskId, b, &ptr); + *ptr = c; //what is this supposed to do? +} + +static void sub_80A22F4(u8 taskId, u8 b, u8 *c) +{ + u8 *ptr; + + sub_80A229C(taskId, b, &ptr); + *c = *ptr; +} + +static void sub_80A2318(u8 a, u8 b) +{ + u16 var = ~gBitTable[b]; + + gTasks[a].data[0] &= var; +} + +static void sub_80A2348(u8 taskId, u8 b) +{ + gTasks[taskId].data[0] |= gBitTable[b]; +} + +static bool8 sub_80A2370(u8 taskId, u8 b) +{ + u16 var = (u16)gTasks[taskId].data[0] & gBitTable[b]; + + if (var != 0) + return TRUE; + else + return FALSE; +} + +static void npc_obj_offscreen_culling_and_flag_update(u8 a, u8 *b) +{ + gUnknown_020384F8[a] = b; +} + +static u8 *sub_80A23B8(u8 a) +{ + return gUnknown_020384F8[a]; +} + +static void sub_80A23C8(u8 taskId, u8 b, u8 c, u8 *d) +{ + sub_80A2318(taskId, b); + npc_obj_offscreen_culling_and_flag_update(b, d); + sub_80A22D0(taskId, b, c); +} + +static void sub_80A2408(u8 a) +{ + u8 *ptr; + u8 i; + + ptr = (u8 *)&gTasks[a].data[1]; + for (i = 0; i < 16; i++, ptr++) + { + if (*ptr != 0xFF) + UnfreezeMapObject(&gMapObjects[*ptr]); + } +} + +static void Task_80A244C(u8 taskId) +{ + u8 i; + u8 var; + + for (i = 0; i < 16; i++) + { + sub_80A22F4(taskId, i, &var); + if (var != 0xFF) + sub_80A2490(taskId, i, var, sub_80A23B8(i)); + } +} + +static void sub_80A2490(u8 taskId, u8 b, u8 c, u8 *d) +{ + u8 var; + + if (FieldObjectIsSpecialAnimActive(&gMapObjects[c]) + && !FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[c])) + return; + + var = *d; + if (var == 0xFE) + { + sub_80A2348(taskId, b); + FreezeMapObject(&gMapObjects[c]); + } + else + { + if (!FieldObjectSetSpecialAnim(&gMapObjects[c], var)) + { + d++; + npc_obj_offscreen_culling_and_flag_update(b, d); + } + } +} diff --git a/src/field/secret_base.c b/src/field/secret_base.c new file mode 100644 index 000000000..4e8331f5c --- /dev/null +++ b/src/field/secret_base.c @@ -0,0 +1,1075 @@ +#include "global.h" +#include "secret_base.h" +#include "decoration.h" +#include "event_data.h" +#include "field_camera.h" +#include "field_fadetransition.h" +#include "field_player_avatar.h" +#include "field_weather.h" +#include "fieldmap.h" +#include "main.h" +#include "map_constants.h" +#include "map_name_popup.h" +#include "menu.h" +#include "metatile_behavior.h" +#include "palette.h" +#include "pokemon.h" +#include "rom4.h" +#include "script.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "vars.h" + +extern u8 gUnknown_020387DC; +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u16 gSpecialVar_0x8006; +extern u16 gSpecialVar_0x8007; +extern u16 gScriptResult; +extern const struct +{ + u16 unk_083D1358_0; + u16 unk_083D1358_1; +} gUnknown_083D1358[7]; +extern const u8 gUnknown_083D1374[4 * 16]; +extern void *gUnknown_0300485C; +extern const u8 gUnknown_083D13EC[12]; +extern u8 gUnknown_081A2E14[]; + + +void sub_80BB4AC(struct SecretBaseRecord *record) // 080bb4ac +{ + u16 i; + u16 j; + record->sbr_field_0 = 0; + for (i=0; i<7; i++) + record->sbr_field_2[i] = 0xff; + for (i=0; i<4; i++) + record->trainerId[i] = 0x00; + record->sbr_field_e = 0; + record->sbr_field_10 = 0; + record->sbr_field_11 = 0; + record->sbr_field_1_0 = 0; + record->gender = 0; + record->sbr_field_1_5 = 0; + record->sbr_field_1_6 = 0; + for (i=0; i<16; i++) { + record->decorations[i] = 0; + record->decorationPos[i] = 0; + } + for (i=0; i<6; i++) { + for (j=0; j<4; j++) { + record->partyMoves[i * 4 + j] = 0; + } + record->partyPersonality[i] = 0; + record->partyEVs[i] = 0; + record->partySpecies[i] = 0; + record->partyHeldItems[i] = 0; + record->partyLevels[i] = 0; + } +} + +void ResetSecretBase(u8 idx) // 80bb594 +{ + sub_80BB4AC(&(gSaveBlock1.secretBases[idx])); +} + +void ResetSecretBases(void) // 080bb5b4 +{ + u16 i; + for (i=0; i<20; i++) + ResetSecretBase(i); +} + +void sub_80BB5D0(void) // 080bb5d0 +{ + gUnknown_020387DC = gSpecialVar_0x8004; +} + +void sub_80BB5E4(void) // 80bb5e4 +{ + u16 idx; + gScriptResult = 0; + for (idx=0; idx<20; idx++) { + if (gUnknown_020387DC != gSaveBlock1.secretBases[idx].sbr_field_0) + continue; + gScriptResult = 1; + VarSet(VAR_0x4054, idx); + break; + } +} + +void sub_80BB63C(void) // 80bb63c +{ + if (gSaveBlock1.secretBases[0].sbr_field_0) + gScriptResult = 1; + else + gScriptResult = 0; +} + +u8 sub_80BB66C(void) // 80bb66c +{ + s16 x, y; + s16 v0; + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + v0 = MapGridGetMetatileBehaviorAt(x, y) & 0xFFF; + if (v0 == 0x90 || v0 == 0x91) + return 1; + else if (v0 == 0x92 || v0 == 0x93) + return 2; + else if (v0 == 0x9a || v0 == 0x9b) + return 3; + else if (v0 == 0x94 || v0 == 0x95) + return 4; + else if (v0 == 0x96 || v0 == 0x97 || v0 == 0x9c || v0 == 0x9d) + return 5; + else if (v0 == 0x98 || v0 == 0x99) + return 6; + return 0; +} + +void sub_80BB70C(void) // 80bb70c +{ + gSpecialVar_0x8007 = sub_80BB66C(); +} + +s16 unref_sub_80BB724(u16 *a0, u8 a1) +{ + u16 v2; + for (v2=0; v2<0x200; v2++) { + if ((a0[v2] & 0xFFF) == a1) + return (s16)v2; + } + return -1; +} + +void sub_80BB764(s16 *arg1, s16 *arg2, u16 arg3) +{ + s16 x, y; + for (y=0; yheight; y++) { + for (x=0; xwidth; x++) { + if ((gMapHeader.mapData->map[y * gMapHeader.mapData->width + x] & 0x3ff) == arg3) { + *arg1 = x; + *arg2 = y; + return; + } + } + } +} + +void sub_80BB800(void) +{ + s16 x, y; + s16 tile_id; + u16 idx; + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + tile_id = MapGridGetMetatileIdAt(x, y); + for (idx=0; idx<7; idx++) { + if (gUnknown_083D1358[idx].unk_083D1358_0 == tile_id) { + MapGridSetMetatileIdAt(x, y, gUnknown_083D1358[idx].unk_083D1358_1 | 0xc00); + CurrentMapDrawMetatileAt(x, y); + return; + } + } + for (idx=0; idx<7; idx++) { + if (gUnknown_083D1358[idx].unk_083D1358_1 == tile_id) { + MapGridSetMetatileIdAt(x, y, gUnknown_083D1358[idx].unk_083D1358_0 | 0xc00); + CurrentMapDrawMetatileAt(x, y); + return; + } + } +} + +u8 sub_80BB8A8(u8 *arg1) +{ + u8 idx; + for (idx=0; idx<7; idx++) { + if (arg1[idx] == EOS) + return idx; + } + return 7; +} + +void sub_80BB8CC(void) +{ + u8 nameLength; + u16 idx; + gSaveBlock1.secretBases[0].sbr_field_0 = gUnknown_020387DC; + for (idx=0; idx<4; idx++) { + gSaveBlock1.secretBases[0].trainerId[idx] = gSaveBlock2.playerTrainerId[idx]; + } + VarSet(VAR_0x4054, 0); + nameLength = sub_80BB8A8(gSaveBlock2.playerName); + memset(gSaveBlock1.secretBases[0].sbr_field_2, 0xFF, 7); + StringCopyN(gSaveBlock1.secretBases[0].sbr_field_2, gSaveBlock2.playerName, nameLength); + gSaveBlock1.secretBases[0].gender = gSaveBlock2.playerGender; + VarSet(VAR_SECRET_BASE_MAP, gMapHeader.regionMapSectionId); +} + +void sub_80BB970(struct MapEvents *events) +{ + u16 bgevidx, idx, jdx; + s16 tile_id; + for (bgevidx=0; bgevidxbgEventCount; bgevidx++) { + if (events->bgEvents[bgevidx].kind == 8) { + for (jdx=0; jdx<20; jdx++) { + if (gSaveBlock1.secretBases[jdx].sbr_field_0 == events->bgEvents[bgevidx].bgUnion.secretBaseId) { + tile_id = MapGridGetMetatileIdAt(events->bgEvents[bgevidx].x + 7, events->bgEvents[bgevidx].y + 7); + for (idx=0; idx<7; idx++) { + if (gUnknown_083D1358[idx].unk_083D1358_0 == tile_id) { + MapGridSetMetatileIdAt(events->bgEvents[bgevidx].x + 7, events->bgEvents[bgevidx].y + 7, gUnknown_083D1358[idx].unk_083D1358_1 | 0xc00); + break; + } + } + break; + } + } + } + } +} + +void sub_80BBA14(void) +{ + s8 idx = 4 * (gUnknown_020387DC / 10); + warp1_set_2(MAP_GROUP_SECRET_BASE_RED_CAVE1, gUnknown_083D1374[idx], gUnknown_083D1374[idx + 1]); +} + +void sub_80BBA48(u8 taskid) +{ + u16 curbaseid; + switch (gTasks[taskid].data[0]) { + case 0: + gTasks[taskid].data[0] = 1; + break; + case 1: + if (!gPaletteFade.active) { + gTasks[taskid].data[0] = 2; + } + break; + case 2: + curbaseid = VarGet(VAR_0x4054); + if (gSaveBlock1.secretBases[curbaseid].sbr_field_10 < 0xff) + gSaveBlock1.secretBases[curbaseid].sbr_field_10 ++; + sub_80BBA14(); + warp_in(); + gFieldCallback = sub_8080990; + SetMainCallback2(CB2_LoadMap); + DestroyTask(taskid); + break; + } +} + +void sub_80BBAF0(void) +{ + CreateTask(sub_80BBA48, 0); + fade_screen(1, 0); + saved_warp2_set(0, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1); +} + +bool8 sub_80BBB24(void) +{ + if (gMapHeader.mapType == 9 && VarGet(VAR_0x4097) == 0) + return FALSE; + return TRUE; +} + +void sub_80BBB50(u8 taskid) +{ + FieldObjectTurn(&(gMapObjects[gPlayerAvatar.mapObjectId]), 2); + if (sub_807D770() == 1) { + EnableBothScriptContexts(); + DestroyTask(taskid); + } +} + +void sub_80BBB90(void) +{ + s16 x, y; + ScriptContext2_Enable(); + HideMapNamePopup(); + sub_80BB764(&x, &y, 0x220); + MapGridSetMetatileIdAt(x + 7, y + 7, 0xe20); + CurrentMapDrawMetatileAt(x + 7, y + 7); + pal_fill_black(); + CreateTask(sub_80BBB50, 0); +} + +void sub_80BBBEC(u8 taskid) +{ + s8 idx; + if (!gPaletteFade.active) { + idx = 4 * (gUnknown_020387DC / 10); + warp1_set(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, gUnknown_083D1374[idx + 2], gUnknown_083D1374[idx + 3]); + warp_in(); + gFieldCallback = sub_80BBB90; + SetMainCallback2(CB2_LoadMap); + DestroyTask(taskid); + } +} + +void sub_80BBC78(void) +{ + u8 taskid = CreateTask(sub_80BBBEC, 0); + gTasks[taskid].data[0] = 0; + fade_screen(1, 0); +} + +bool8 CurrentMapIsSecretBase(void) +{ + if (gSaveBlock1.location.mapGroup == MAP_GROUP_SECRET_BASE_SHRUB4 && (u8)(gSaveBlock1.location.mapNum) <= MAP_ID_SECRET_BASE_SHRUB4) + return TRUE; + return FALSE; +} + +#ifdef NONMATCHING +void sub_80BBCCC(u8 flagIn) +{ + u16 curBaseId; + u16 x, y; + if (CurrentMapIsSecretBase()) { + curBaseId = VarGet(VAR_0x4054); + for (x=0; x<16; x++) { + if ((u8)(gSaveBlock1.secretBases[curBaseId].decorations[x] - 1) <= 0x77 && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].decor_field_11 != 4) { + sub_80FF394((gSaveBlock1.secretBases[0].decorationPos[x] >> 4) + 7, (gSaveBlock1.secretBases[0].decorationPos[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[x]); + } + } + if (curBaseId != 0) { + sub_80BB764(&x, &y, 0x220); + MapGridSetMetatileIdAt(x + 7, y + 7, 0xe21); + } else if (flagIn == 1 && VarGet(VAR_0x4089) == 1) { + sub_80BB764(&x, &y, 0x220); + MapGridSetMetatileIdAt(x + 7, y + 7, 0xe0a); + } + } +} + +void sub_80BBDD0(void) +{ + u8 *roomdecor; + u8 *roomdecorpos; + u8 ndecor; + u8 decidx; + u8 objid = 0; + u8 metatile; + u16 curBase = VarGet(VAR_0x4054); + if (!CurrentMapIsSecretBase()) { + roomdecor = gSaveBlock1.playerRoomDecor; + roomdecorpos = gSaveBlock1.playerRoomDecorPos; + ndecor = 12; + } else { + roomdecor = gSaveBlock1.secretBases[curBase].decorations; + roomdecorpos = gSaveBlock1.secretBases[curBase].decorationPos; + ndecor = 16; + } + for (decidx=0; decidxmapObjectCount; objid++) { + if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE) + break; + } + if (objid != gMapHeader.events->mapObjectCount) { + gSpecialVar_0x8006 = roomdecorpos[decidx] >> 4; + gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF; + metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7); + if (sub_80572D8(metatile) == 1 || sub_80572EC(metatile) == 1) { + gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + 0x3f20; + VarSet(gScriptResult, gDecorations[roomdecor[decidx]].tiles[0]); + gScriptResult = gMapHeader.events->mapObjects[objid].localId; + FlagReset(gSpecialVar_0x8004 + 0xAE); + show_sprite(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + sub_805C0F8(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007); + sub_805C78C(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + gSpecialVar_0x8004 ++; + } + } + } +} + +#else +__attribute__((naked)) +void sub_80BBCCC(u8 flagIn) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0x4\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + bl CurrentMapIsSecretBase\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080BBDBC\n\ + ldr r0, _080BBD70 @ =0x00004054\n\ + bl VarGet\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + movs r1, 0\n\ + mov r0, sp\n\ + strh r1, [r0]\n\ + ldr r6, _080BBD74 @ =gSaveBlock1\n\ + mov r4, sp\n\ + ldr r0, _080BBD78 @ =0x00001a2a\n\ + adds r7, r6, r0\n\ +_080BBCFC:\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 5\n\ + ldrh r1, [r4]\n\ + adds r2, r0, r1\n\ + ldr r1, _080BBD7C @ =0x00001a1a\n\ + adds r0, r6, r1\n\ + adds r1, r2, r0\n\ + ldrb r0, [r1]\n\ + subs r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x77\n\ + bhi _080BBD3A\n\ + ldr r0, _080BBD80 @ =gDecorations\n\ + ldrb r3, [r1]\n\ + lsls r1, r3, 5\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x11]\n\ + cmp r0, 0x4\n\ + beq _080BBD3A\n\ + adds r0, r2, r7\n\ + ldrb r2, [r0]\n\ + lsrs r0, r2, 4\n\ + adds r0, 0x7\n\ + movs r1, 0xF\n\ + ands r1, r2\n\ + adds r1, 0x7\n\ + adds r2, r3, 0\n\ + bl sub_80FF394\n\ +_080BBD3A:\n\ + ldrh r0, [r4]\n\ + adds r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + strh r0, [r4]\n\ + cmp r0, 0xF\n\ + bls _080BBCFC\n\ + cmp r5, 0\n\ + beq _080BBD88\n\ + mov r4, sp\n\ + adds r4, 0x2\n\ + movs r2, 0x88\n\ + lsls r2, 2\n\ + mov r0, sp\n\ + adds r1, r4, 0\n\ + bl sub_80BB764\n\ + mov r0, sp\n\ + ldrh r0, [r0]\n\ + adds r0, 0x7\n\ + ldrh r1, [r4]\n\ + adds r1, 0x7\n\ + ldr r2, _080BBD84 @ =0x00000e21\n\ + bl MapGridSetMetatileIdAt\n\ + b _080BBDBC\n\ + .align 2, 0\n\ +_080BBD70: .4byte 0x00004054\n\ +_080BBD74: .4byte gSaveBlock1\n\ +_080BBD78: .4byte 0x00001a2a\n\ +_080BBD7C: .4byte 0x00001a1a\n\ +_080BBD80: .4byte gDecorations\n\ +_080BBD84: .4byte 0x00000e21\n\ +_080BBD88:\n\ + mov r0, r8\n\ + cmp r0, 0x1\n\ + bne _080BBDBC\n\ + ldr r0, _080BBDC8 @ =0x00004089\n\ + bl VarGet\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0x1\n\ + bne _080BBDBC\n\ + mov r4, sp\n\ + adds r4, 0x2\n\ + movs r2, 0x88\n\ + lsls r2, 2\n\ + mov r0, sp\n\ + adds r1, r4, 0\n\ + bl sub_80BB764\n\ + mov r0, sp\n\ + ldrh r0, [r0]\n\ + adds r0, 0x7\n\ + ldrh r1, [r4]\n\ + adds r1, 0x7\n\ + ldr r2, _080BBDCC @ =0x00000e0a\n\ + bl MapGridSetMetatileIdAt\n\ +_080BBDBC:\n\ + add sp, 0x4\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080BBDC8: .4byte 0x00004089\n\ +_080BBDCC: .4byte 0x00000e0a\n\ +.syntax divided\n"); +} + +__attribute__((naked)) +void sub_80BBDD0(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, 0x14\n\ + ldr r0, _080BBE00 @ =0x00004054\n\ + bl VarGet\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + bl CurrentMapIsSecretBase\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _080BBE08\n\ + ldr r0, _080BBE04 @ =gSaveBlock1 + 0x2688\n\ + str r0, [sp, 0x4]\n\ + adds r0, 0xC\n\ + str r0, [sp, 0x8]\n\ + movs r1, 0xC\n\ + str r1, [sp, 0xC]\n\ + b _080BBE1E\n\ + .align 2, 0\n\ +_080BBE00: .4byte 0x00004054\n\ +_080BBE04: .4byte gSaveBlock1 + 0x2688\n\ +_080BBE08:\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 5\n\ + ldr r0, _080BBF7C @ =gSaveBlock1 + 0x1A1A\n\ + adds r2, r1, r0\n\ + str r2, [sp, 0x4]\n\ + adds r0, 0x10\n\ + adds r1, r0\n\ + str r1, [sp, 0x8]\n\ + movs r3, 0x10\n\ + str r3, [sp, 0xC]\n\ +_080BBE1E:\n\ + movs r6, 0\n\ + ldr r4, [sp, 0xC]\n\ + cmp r6, r4\n\ + bcc _080BBE28\n\ + b _080BBF6C\n\ +_080BBE28:\n\ + ldr r5, _080BBF80 @ =gSaveBlock1\n\ + mov r10, r5\n\ +_080BBE2C:\n\ + ldr r1, [sp, 0x4]\n\ + adds r0, r1, r6\n\ + ldrb r1, [r0]\n\ + mov r9, r0\n\ + adds r2, r6, 0x1\n\ + str r2, [sp, 0x10]\n\ + cmp r1, 0\n\ + bne _080BBE3E\n\ + b _080BBF5E\n\ +_080BBE3E:\n\ + ldrb r0, [r0]\n\ + lsls r0, 5\n\ + ldr r3, _080BBF84 @ =gDecorations\n\ + adds r0, r3\n\ + ldrb r0, [r0, 0x11]\n\ + cmp r0, 0x4\n\ + beq _080BBE4E\n\ + b _080BBF5E\n\ +_080BBE4E:\n\ + movs r5, 0\n\ + ldr r0, _080BBF88 @ =gMapHeader\n\ + ldr r2, [r0, 0x4]\n\ + ldrb r3, [r2]\n\ + mov r8, r0\n\ + cmp r5, r3\n\ + bcs _080BBE8E\n\ + ldr r0, [r2, 0x4]\n\ + ldrh r1, [r0, 0x14]\n\ + ldr r4, _080BBF8C @ =gSpecialVar_0x8004\n\ + ldrh r0, [r4]\n\ + adds r0, 0xAE\n\ + adds r7, r4, 0\n\ + cmp r1, r0\n\ + beq _080BBE8E\n\ + adds r4, r2, 0\n\ + adds r2, r3, 0\n\ +_080BBE70:\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, r2\n\ + bcs _080BBE8E\n\ + ldr r1, [r4, 0x4]\n\ + lsls r0, r5, 1\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldrh r1, [r0, 0x14]\n\ + ldrh r0, [r7]\n\ + adds r0, 0xAE\n\ + cmp r1, r0\n\ + bne _080BBE70\n\ +_080BBE8E:\n\ + mov r1, r8\n\ + ldr r0, [r1, 0x4]\n\ + ldrb r0, [r0]\n\ + cmp r5, r0\n\ + beq _080BBF5E\n\ + ldr r7, _080BBF90 @ =gSpecialVar_0x8006\n\ + ldr r2, [sp, 0x8]\n\ + adds r1, r2, r6\n\ + ldrb r0, [r1]\n\ + lsrs r0, 4\n\ + strh r0, [r7]\n\ + ldr r6, _080BBF94 @ =gSpecialVar_0x8007\n\ + ldrb r1, [r1]\n\ + movs r0, 0xF\n\ + ands r0, r1\n\ + strh r0, [r6]\n\ + ldrh r0, [r7]\n\ + adds r0, 0x7\n\ + ldrh r1, [r6]\n\ + adds r1, 0x7\n\ + bl MapGridGetMetatileBehaviorAt\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + adds r0, r4, 0\n\ + bl sub_80572D8\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + beq _080BBEDA\n\ + adds r0, r4, 0\n\ + bl sub_80572EC\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _080BBF5E\n\ +_080BBEDA:\n\ + mov r3, r8\n\ + ldr r0, [r3, 0x4]\n\ + ldr r1, [r0, 0x4]\n\ + lsls r4, r5, 1\n\ + adds r4, r5\n\ + lsls r4, 3\n\ + adds r1, r4, r1\n\ + ldr r5, _080BBF98 @ =0x00003f20\n\ + adds r0, r5, 0\n\ + ldrb r1, [r1, 0x1]\n\ + adds r0, r1\n\ + ldr r1, _080BBF9C @ =gScriptResult\n\ + strh r0, [r1]\n\ + ldrh r0, [r1]\n\ + mov r2, r9\n\ + ldrb r1, [r2]\n\ + lsls r1, 5\n\ + ldr r3, _080BBFA0 @ =gDecorations + 0x1C\n\ + adds r1, r3\n\ + ldr r1, [r1]\n\ + ldrh r1, [r1]\n\ + bl VarSet\n\ + mov r5, r8\n\ + ldr r0, [r5, 0x4]\n\ + ldr r0, [r0, 0x4]\n\ + adds r4, r0\n\ + ldrb r0, [r4]\n\ + ldr r1, _080BBF9C @ =gScriptResult\n\ + strh r0, [r1]\n\ + ldr r2, _080BBF8C @ =gSpecialVar_0x8004\n\ + ldrh r0, [r2]\n\ + adds r0, 0xAE\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + bl FlagReset\n\ + ldr r3, _080BBF9C @ =gScriptResult\n\ + ldrb r0, [r3]\n\ + mov r4, r10\n\ + ldrb r1, [r4, 0x5]\n\ + ldrb r2, [r4, 0x4]\n\ + bl show_sprite\n\ + ldr r5, _080BBF9C @ =gScriptResult\n\ + ldrb r0, [r5]\n\ + ldrb r1, [r4, 0x5]\n\ + ldrb r2, [r4, 0x4]\n\ + movs r4, 0\n\ + ldrsh r3, [r7, r4]\n\ + movs r5, 0\n\ + ldrsh r4, [r6, r5]\n\ + str r4, [sp]\n\ + bl sub_805C0F8\n\ + ldr r1, _080BBF9C @ =gScriptResult\n\ + ldrb r0, [r1]\n\ + mov r2, r10\n\ + ldrb r1, [r2, 0x5]\n\ + ldrb r2, [r2, 0x4]\n\ + bl sub_805C78C\n\ + ldr r3, _080BBF8C @ =gSpecialVar_0x8004\n\ + ldrh r0, [r3]\n\ + adds r0, 0x1\n\ + strh r0, [r3]\n\ +_080BBF5E:\n\ + ldr r4, [sp, 0x10]\n\ + lsls r0, r4, 24\n\ + lsrs r6, r0, 24\n\ + ldr r5, [sp, 0xC]\n\ + cmp r6, r5\n\ + bcs _080BBF6C\n\ + b _080BBE2C\n\ +_080BBF6C:\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 {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080BBF7C: .4byte gSaveBlock1 + 0x1A1A\n\ +_080BBF80: .4byte gSaveBlock1\n\ +_080BBF84: .4byte gDecorations\n\ +_080BBF88: .4byte gMapHeader\n\ +_080BBF8C: .4byte gSpecialVar_0x8004\n\ +_080BBF90: .4byte gSpecialVar_0x8006\n\ +_080BBF94: .4byte gSpecialVar_0x8007\n\ +_080BBF98: .4byte 0x00003f20\n\ +_080BBF9C: .4byte gScriptResult\n\ +_080BBFA0: .4byte gDecorations + 0x1C\n\ +.syntax divided\n"); +} +#endif + +void sub_80BBFA4(void) +{ + int curBase = VarGet(VAR_0x4054); + VarSet(VAR_0x401F, gUnknown_083D13EC[sub_80BCCA4(curBase)]); +} + +void sub_80BBFD8(s16 *position, struct MapEvents *events) +{ + s16 bgevtidx; + for (bgevtidx=0; bgevtidxbgEventCount; bgevtidx++) { + if (events->bgEvents[bgevtidx].kind == 8 && position[0] == events->bgEvents[bgevtidx].x + 7 && position[1] == events->bgEvents[bgevtidx].y + 7) { + gUnknown_020387DC = events->bgEvents[bgevtidx].bgUnion.secretBaseId; + break; + } + } +} + +void sub_80BC038(s16 *position, struct MapEvents *events) +{ + sub_80BBFD8(position, events); + sub_80BB5E4(); + ScriptContext1_SetupScript(gUnknown_081A2E14); +} + +bool8 sub_80BC050(void) +{ + sub_80BB5D0(); + sub_80BB5E4(); + if (gScriptResult == 1) + return FALSE; + return TRUE; +} + +void sub_80BC074(u8 taskid) +{ + switch (gTasks[taskid].data[0]) { + case 0: + ScriptContext2_Enable(); + gTasks[taskid].data[0] = 1; + break; + case 1: + if (!gPaletteFade.active) { + gTasks[taskid].data[0] = 2; + } + break; + case 2: + copy_saved_warp2_bank_and_enter_x_to_warp1(0x7E); + warp_in(); + gFieldCallback = mapldr_default; + SetMainCallback2(CB2_LoadMap); + ScriptContext2_Disable(); + DestroyTask(taskid); + break; + } +} + +void sub_80BC0F8(void) { + CreateTask(sub_80BC074, 0); + fade_screen(1, 0); +} + +void sub_80BC114(void) { + if (gSaveBlock1.secretBases[0].sbr_field_0 != gUnknown_020387DC) + gScriptResult = 1; + else + gScriptResult = 0; +} + +u8 sub_80BC14C(u8 sbid) +{ + s16 idx; + for (idx=0; idx<20; idx++) { + if (gSaveBlock1.secretBases[idx].sbr_field_0 == sbid) + return idx; + } + return 0; +} + +u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190 + u8 local1; + u8 *str; + + local1 = sub_80BB8A8(gSaveBlock1.secretBases[arg1].sbr_field_2); + + str = StringCopyN(dest, gSaveBlock1.secretBases[arg1].sbr_field_2, local1); + str[0] = EOS; + +#if ENGLISH + return StringAppend(dest, gOtherText_PlayersBase); +#elif GERMAN + return de_sub_8073174(dest, gOtherText_PlayersBase); +#endif +} + +u8 *GetSecretBaseMapName(u8 *dest) { + gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_0; + return sub_80BC190(dest, VarGet(VAR_0x4054)); +} + +void sub_80BC224(void) { + u8 *var0 = gSaveBlock1.secretBases[(u8)VarGet(VAR_0x4054)].sbr_field_2; + u8 *var1 = gStringVar1; + u8 var2 = sub_80BB8A8(var0); + u8 *var3 = StringCopyN(var1, var0, var2); + *var3 = EOS; +} + +u8 sub_80BC268(u8 foo) { // 80bc268 + if (gSaveBlock1.secretBases[foo].sbr_field_1_6) + return 1; + return 0; +} + +u8 sub_80BC298(struct Pokemon *mon) { // 80bc298 + u16 evsum = GetMonData(mon, MON_DATA_HP_EV); + evsum += GetMonData(mon, MON_DATA_ATK_EV); + evsum += GetMonData(mon, MON_DATA_DEF_EV); + evsum += GetMonData(mon, MON_DATA_SPD_EV); + evsum += GetMonData(mon, MON_DATA_SPATK_EV); + evsum += GetMonData(mon, MON_DATA_SPDEF_EV); + return (u8)(evsum / 6); +} + +#ifdef NONMATCHING +void sub_80BC300(void) +{ + u16 moveidx; + u16 sbpartyidx = 0; + int resetVal = 0; + u16 partyidx = 0; + while (partyidx < 6) { + partyidx ++; + for (moveidx=0; moveidx<4; moveidx++) { + gSaveBlock1.secretBases[0].partyMoves[(partyidx - 1) * 6 + moveidx] = resetVal; + } + gSaveBlock1.secretBases[0].partySpecies[partyidx - 1] = resetVal; + gSaveBlock1.secretBases[0].partyHeldItems[partyidx - 1] = resetVal; + gSaveBlock1.secretBases[0].partyLevels[partyidx - 1] = resetVal; + gSaveBlock1.secretBases[0].partyPersonality[partyidx - 1] = resetVal; + gSaveBlock1.secretBases[0].partyEVs[partyidx - 1] = resetVal; + if (GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_SPECIES) != 0 && !GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_IS_EGG)) { + sbpartyidx ++; + for (moveidx=0; moveidx<4; moveidx++) { + gSaveBlock1.secretBases[0].partyMoves[(sbpartyidx - 1) * 6 + moveidx] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_MOVE1 + moveidx); + } + gSaveBlock1.secretBases[0].partySpecies[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_SPECIES); + gSaveBlock1.secretBases[0].partyHeldItems[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_HELD_ITEM); + gSaveBlock1.secretBases[0].partyLevels[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_LEVEL); + gSaveBlock1.secretBases[0].partyPersonality[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_PERSONALITY); + gSaveBlock1.secretBases[0].partyEVs[sbpartyidx - 1] = sub_80BC298(&(gPlayerParty[partyidx - 1])); + } + } +} +#else +__attribute__((naked)) +void sub_80BC300(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, 0xC\n\ + movs r0, 0\n\ + mov r10, r0\n\ + movs r6, 0\n\ + mov r9, r6\n\ +_080BC314:\n\ + movs r4, 0\n\ + lsls r3, r6, 2\n\ + lsls r2, r6, 1\n\ + ldr r7, _080BC424 @ =gPlayerParty\n\ + adds r1, r6, 0x1\n\ + str r1, [sp]\n\ + adds r1, r3, 0\n\ +_080BC322:\n\ + adds r0, r1, r4\n\ + lsls r0, 1\n\ + ldr r5, _080BC428 @ =gSaveBlock1 + 0x1A54\n\ + adds r0, r5, r0\n\ + mov r5, r9\n\ + strh r5, [r0]\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + cmp r4, 0x3\n\ + bls _080BC322\n\ + ldr r1, _080BC42C @ =gSaveBlock1 + 0x1A84\n\ + adds r0, r1, r2\n\ + strh r5, [r0]\n\ + ldr r5, _080BC430 @ =gSaveBlock1 + 0x1A90\n\ + adds r0, r5, r2\n\ + mov r1, r9\n\ + strh r1, [r0]\n\ + ldr r2, _080BC434 @ =gSaveBlock1 + 0x1A9C\n\ + adds r0, r2, r6\n\ + mov r5, r9\n\ + strb r5, [r0]\n\ + ldr r1, _080BC438 @ =gSaveBlock1 + 0x1A3C\n\ + adds r0, r1, r3\n\ + mov r2, r9\n\ + str r2, [r0]\n\ + ldr r3, _080BC43C @ =gSaveBlock1 + 0x1AA2\n\ + adds r0, r3, r6\n\ + strb r2, [r0]\n\ + movs r0, 0x64\n\ + adds r5, r6, 0\n\ + muls r5, r0\n\ + adds r4, r5, r7\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _080BC408\n\ + adds r0, r4, 0\n\ + movs r1, 0x2D\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _080BC408\n\ + movs r4, 0\n\ + mov r0, r10\n\ + lsls r0, 2\n\ + mov r8, r0\n\ + mov r1, r10\n\ + lsls r7, r1, 1\n\ + adds r1, 0x1\n\ + str r1, [sp, 0x4]\n\ + ldr r2, _080BC424 @ =gPlayerParty\n\ +_080BC38E:\n\ + adds r1, r4, 0\n\ + adds r1, 0xD\n\ + adds r0, r5, r2\n\ + str r2, [sp, 0x8]\n\ + bl GetMonData\n\ + mov r3, r8\n\ + adds r1, r3, r4\n\ + lsls r1, 1\n\ + ldr r3, _080BC428 @ =gSaveBlock1 + 0x1A54\n\ + adds r1, r3, r1\n\ + strh r0, [r1]\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + ldr r2, [sp, 0x8]\n\ + cmp r4, 0x3\n\ + bls _080BC38E\n\ + movs r0, 0x64\n\ + adds r4, r6, 0\n\ + muls r4, r0\n\ + ldr r0, _080BC424 @ =gPlayerParty\n\ + adds r4, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + ldr r5, _080BC42C @ =gSaveBlock1 + 0x1A84\n\ + adds r1, r5, r7\n\ + strh r0, [r1]\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + bl GetMonData\n\ + ldr r2, _080BC430 @ =gSaveBlock1 + 0x1A90\n\ + adds r1, r2, r7\n\ + strh r0, [r1]\n\ + adds r0, r4, 0\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + ldr r1, _080BC434 @ =gSaveBlock1 + 0x1A9C\n\ + add r1, r10\n\ + strb r0, [r1]\n\ + adds r0, r4, 0\n\ + movs r1, 0\n\ + bl GetMonData\n\ + ldr r1, _080BC438 @ =gSaveBlock1 + 0x1A3C\n\ + add r1, r8\n\ + str r0, [r1]\n\ + adds r0, r4, 0\n\ + bl sub_80BC298\n\ + ldr r1, _080BC43C @ =gSaveBlock1 + 0x1AA2\n\ + add r1, r10\n\ + strb r0, [r1]\n\ + ldr r3, [sp, 0x4]\n\ + lsls r0, r3, 16\n\ + lsrs r0, 16\n\ + mov r10, r0\n\ +_080BC408:\n\ + ldr r5, [sp]\n\ + lsls r0, r5, 16\n\ + lsrs r6, r0, 16\n\ + cmp r6, 0x5\n\ + bls _080BC314\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 {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080BC424: .4byte gPlayerParty\n\ +_080BC428: .4byte gSaveBlock1 + 0x1A54\n\ +_080BC42C: .4byte gSaveBlock1 + 0x1A84\n\ +_080BC430: .4byte gSaveBlock1 + 0x1A90\n\ +_080BC434: .4byte gSaveBlock1 + 0x1A9C\n\ +_080BC438: .4byte gSaveBlock1 + 0x1A3C\n\ +_080BC43C: .4byte gSaveBlock1 + 0x1AA2\n\ +.syntax divided\n"); +} +#endif + +void sub_80BC440(void) +{ + u16 backupValue = gSaveBlock1.secretBases[0].sbr_field_e; + ResetSecretBase(0); + gSaveBlock1.secretBases[0].sbr_field_e = backupValue; + sub_80BC0F8(); +} + +void SecretBasePC_PackUp(void) +{ + IncrementGameStat(20); + sub_80BC440(); +} diff --git a/src/field/shop.c b/src/field/shop.c new file mode 100644 index 000000000..d53646a88 --- /dev/null +++ b/src/field/shop.c @@ -0,0 +1,342 @@ +#include "global.h" +#include "shop.h" +#include "decompress.h" +#include "field_fadetransition.h" +#include "field_weather.h" +#include "item_menu.h" +#include "main.h" +#include "menu.h" +#include "menu_helpers.h" +#include "money.h" +#include "palette.h" +#include "script.h" +#include "sound.h" +#include "sprite.h" +#include "strings.h" +#include "task.h" +#include "tv.h" +#include "unknown_task.h" + +struct UnknownShopStruct +{ + /* 0x0 */ void (* callback) (void); + /* 0x4 */ u16 *itemList; + /* 0x8 */ u8 itemCount; + /* 0x9 */ u8 unk9; + /* 0xA */ u8 unkA; + /* 0xB */ u8 unkB; + /* 0xC */ bool8 unkC; + // unknown size +}; + +extern struct UnknownShopStruct gUnknown_03000708; +extern struct MenuAction gUnknown_083CC6D0[]; + +extern u8 gUnknown_083CC6E8[]; +extern u8 gUnknown_083CC6EB[]; +extern u8 gBuyMenuFrame_Gfx[]; + +extern u16 gBuyMenuFrame_Tilemap[]; +extern u16 gMenuMoneyPal[16]; +extern u16 gUnknown_083CC710[2]; + +u8 CreateShopMenu(bool8 var) +{ + ScriptContext2_Enable(); + gUnknown_03000708.unkC = var; + gUnknown_03000708.unk9 = 0; + + if(var == FALSE) + { + gUnknown_03000708.unkA = 2; + MenuDrawTextWindow(0, 0, 10, 7); + PrintMenuItemsReordered(1, 1, 3, gUnknown_083CC6D0, (u8 *)gUnknown_083CC6E8); + } + else + { + gUnknown_03000708.unkA = 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); + + return CreateTask(sub_80B2E38, 8); +} + +void SetShopMenuCallback(void *callbackPtr) +{ + gUnknown_03000708.callback = callbackPtr; +} + +void SetShopItemsForSale(u16 *items) +{ + u16 i = 0; + + gUnknown_03000708.itemList = items; + gUnknown_03000708.itemCount = 0; + + while (gUnknown_03000708.itemList[i]) + { + gUnknown_03000708.itemCount++; + i++; + } +} + +void sub_80B2E38(u8 var) +{ + const u8 local = var; + + if(gMain.newAndRepeatedKeys & 0x40) + { + if(gUnknown_03000708.unk9) + { + PlaySE(0x5); + gUnknown_03000708.unk9 = MoveMenuCursor(-1); + } + } + else if(gMain.newAndRepeatedKeys & 0x80) + { + if(gUnknown_03000708.unk9 != gUnknown_03000708.unkA) + { + PlaySE(0x5); + gUnknown_03000708.unk9 = MoveMenuCursor(1); + } + } + else if (gMain.newKeys & 1) + { + PlaySE(0x5); + if(!gUnknown_03000708.unkC) + { + gUnknown_083CC6D0[gUnknown_083CC6E8[gUnknown_03000708.unk9]].func(local); + } + else + { + gUnknown_083CC6D0[gUnknown_083CC6EB[gUnknown_03000708.unk9]].func(local); + } + } + else if(gMain.newKeys & 2) + { + PlaySE(0x5); + HandleShopMenuQuit(local); + } +} + +void sub_80B2EFC(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)BuyMenuDrawGraphics >> 16; + gTasks[taskId].data[9] = (u32)BuyMenuDrawGraphics; + gTasks[taskId].func = sub_80B2FA0; + fade_screen(1, 0); +} + +void sub_80B2F30(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_80A6300 >> 16; + gTasks[taskId].data[9] = (u32)sub_80A6300; + gTasks[taskId].func = sub_80B2FA0; + fade_screen(1, 0); +} + +void HandleShopMenuQuit(u8 taskId) +{ + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 11, 8); + sub_80BE3BC(); // in tv.s? + ScriptContext2_Disable(); + DestroyTask(taskId); + + if(gUnknown_03000708.callback) + gUnknown_03000708.callback(); // run the callback if it exists. +} + +void sub_80B2FA0(u8 taskId) +{ + if(!gPaletteFade.active) + { + SetMainCallback2((void *)((u16)gTasks[taskId].data[8] << 16 | (u16)gTasks[taskId].data[9])); + DestroyTask(taskId); + } +} + +void ReturnToShopMenuAfterExitingSellMenu(u8 taskId) +{ + CreateShopMenu(gUnknown_03000708.unkC); + DestroyTask(taskId); +} + +void Task_ExitSellMenu(u8 taskId) +{ + if(sub_807D770() == 1) + { + if(gUnknown_03000708.unkC == 2) + DisplayItemMessageOnField(taskId, gOtherText_CanIHelpYou, ReturnToShopMenuAfterExitingSellMenu, 0); + else + DisplayItemMessageOnField(taskId, gOtherText_AnythingElse, ReturnToShopMenuAfterExitingSellMenu, 0); + } +} + +void sub_80B3050(void) +{ + pal_fill_black(); + CreateTask(Task_ExitSellMenu, 0x8); +} + +void sub_80B3068(u8 taskId) +{ + Task_ExitSellMenu(taskId); +} + +void unref_sub_80B3078(u8 taskId) +{ + gTasks[taskId].func = Task_ExitSellMenu; +} + +void sub_80B3094(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTasks(); + UpdatePaletteFade(); +} + +void sub_80B30AC(void) +{ + void *addr; + void *addr2; + void *addr3; + u16 *tempArr; + u16 *tempArr2; + u16 *tempArr3; + + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + + // temp vars needed to match for some dumb reason + tempArr = gBGTilemapBuffers[1]; + addr = (void *)(VRAM + 0xE800); + DmaCopy16(3, tempArr, addr, 0x800); + tempArr2 = gBGTilemapBuffers[2]; + addr2 = (void *)(VRAM + 0xE000); + DmaCopy16(3, tempArr2, addr2, 0x800); + tempArr3 = gBGTilemapBuffers[3]; + addr3 = (void *)(VRAM + 0xF000); + DmaCopy16(3, tempArr3, addr3, 0x800); +} + +// this function is fugly. pls fix +void BuyMenuDrawGraphics(void) +{ + void *addr; + register u16 zero2 asm("r5"); + + sub_80F9438(); + remove_some_task(); + REG_BG1HOFS = (zero2 = 0); + REG_BG1VOFS = zero2; + REG_BG2HOFS = zero2; + REG_BG2VOFS = zero2; + REG_BG3HOFS = zero2; + REG_BG3VOFS = zero2; + gPaletteFade.bufferTransferDisabled = 1; + addr = (void*)OAM; + { + register const u32 zero asm("r6") = 0; + DmaFill32(3, zero, addr, OAM_SIZE); + LZDecompressVram(gBuyMenuFrame_Gfx, (void*)(VRAM + 0x7C00)); + sub_800D238(gBuyMenuFrame_Tilemap, (void *)0x02018000); + LoadCompressedPalette(gMenuMoneyPal, 0xC0, sizeof(gMenuMoneyPal)); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + SetUpWindowConfig(&gWindowConfig_81E6DFC); + InitMenuWindow(&gWindowConfig_81E6DFC); + BuyMenuDrawMapGraphics(); + gUnknown_03000708.unk9 = zero; + gUnknown_03000708.unkB = zero2; + MenuZeroFillWindowRect(0, 0, 0x20, 0x20); + sub_80B7C14(gSaveBlock1.money, 0, 0); + sub_80B3764(0, 7); + sub_80B37EC(); + sub_80B3270(); + CreateTask(sub_80B40E8, 0x8); + sub_80B3240(); + asm("":::"r4"); // what?? + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, zero); + gPaletteFade.bufferTransferDisabled = 0; + SetVBlankCallback(sub_80B30AC); + SetMainCallback2(sub_80B3094); + } +} + +void sub_80B3240(void) +{ + u16 tempArr[2]; + + memcpy(tempArr, gUnknown_083CC710, sizeof(tempArr)); + LoadPalette(&tempArr[1], 0xD1, 2); + LoadPalette(&tempArr[0], 0xD8, 2); +} + +void sub_80B3270(void) +{ + sub_80F944C(); + + if(gUnknown_03000708.itemCount > 7) + { + CreateVerticalScrollIndicators(0, 172, 12); + CreateVerticalScrollIndicators(1, 172, 148); + sub_80F979C(0, 1); + } +} + +void sub_80B32A4(void) +{ + if(gUnknown_03000708.unkB == 0) + sub_80F979C(0, 1); + else + sub_80F979C(0, 0); + + if(gUnknown_03000708.unkB + 7 >= gUnknown_03000708.itemCount) + sub_80F979C(1, 1); + else + sub_80F979C(1, 0); +} + +void sub_80B32EC(u16 *array, s16 offset1, s16 offset2) +{ + array[offset1 + offset2] = 0xC3E1; + array[offset1 + offset2 + 1] = 0xC3E1; +} + +void BuyMenuDrawMapMetatileLayer(u16 *array, s16 offset1, s16 offset2, u16 *array2) +{ + array[offset1 + offset2] = array2[0]; + array[offset1 + offset2 + 1] = array2[1]; + array[offset1 + offset2 + 32] = array2[2]; + array[offset1 + offset2 + 33] = array2[3]; +} + +void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s8 var4) +{ + u8 tempVar4 = var4; + s16 offset1 = var1 * 2; + s16 offset2 = (var2 * 0x40) + 0x40; + + switch(tempVar4) + { + case 0: // _080B335C + BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3); + BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[1], offset1, offset2, var3 + 4); + break; + case 1: // _080B3364 + BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[3], offset1, offset2, var3); + BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3 + 4); + break; + case 2: // _080B3398 + BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[3], offset1, offset2, var3); + BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[1], offset1, offset2, var3 + 4); + break; + } +} diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c new file mode 100644 index 000000000..c9a06a758 --- /dev/null +++ b/src/field/slot_machine.c @@ -0,0 +1,150 @@ +#include "global.h" +#include "slot_machine.h" +#include "decompress.h" +#include "palette.h" +#include "task.h" + +struct UnkStruct2000000 { + /*0x00*/ u8 filler00[61]; + /*0x3D*/ u8 unk3D; +}; + +struct UnkStruct1 { + /*0x00*/ u8 unk00; + /*0x01*/ u8 unk01; + /*0x02*/ s16 unk02; +}; + +extern struct UnkStruct2000000 unk_2000000; + +extern struct UnkStruct1 *gUnknown_083ED048[]; +extern const u16 gPalette_83EDE24[]; + +extern const u8 gSlotMachine_Gfx[]; +#if ENGLISH +#define SLOTMACHINE_GFX_TILES 233 +#elif GERMAN +#define SLOTMACHINE_GFX_TILES 236 +#endif + +extern const u16 gUnknown_08E95A18[]; + +extern u16 gUnknown_08E95AB8[]; +extern u16 gUnknown_08E95FB8[]; + +static void LoadSlotMachineWheelOverlay(void); + +void sub_8104CAC(u8 arg0) { + u8 i; + struct Task *task; + + sub_8104DA4(); + + task = &gTasks[unk_2000000.unk3D]; + task->data[1] = arg0; + + i = 0; + while (gUnknown_083ED048[arg0][i].unk00 != 0xFF) + { + u8 spriteId; + spriteId = sub_8105BB4( + gUnknown_083ED048[arg0][i].unk00, + gUnknown_083ED048[arg0][i].unk01, + gUnknown_083ED048[arg0][i].unk02 + ); + task->data[4 + i] = spriteId; + +#ifdef GERMAN + if (arg0 == 5 && i <= 2) + { + gSprites[spriteId].invisible = TRUE; + } +#endif + + i += 1; + } +} + +asm(".section .text_b"); + +void sub_8106448(void) { + u32 offsetRead, offsetWrite; + u32 size; + + sub_800D238(gSlotMachine_Gfx, (void *) 0x02010000); + + offsetRead = 0x02010000; + offsetWrite = BG_VRAM; + size = SLOTMACHINE_GFX_TILES * 32; + while (TRUE) + { + DmaCopy16(3, offsetRead, (void *) (offsetWrite), 0x1000); + offsetRead += 0x1000; + offsetWrite += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaCopy16(3, offsetRead, (void *) (offsetWrite), size); + break; + } + } + + LoadPalette(gUnknown_08E95A18, 0, 160); + LoadPalette(gPalette_83EDE24, 208, 32); +} + +void sub_81064B8(void) { + CpuCopy16(gUnknown_08E95AB8, (void *) BG_SCREEN_ADDR(29), 20 * 32 * 2); + LoadSlotMachineWheelOverlay(); +} + +static void LoadSlotMachineWheelOverlay(void) { + s16 x, y, dx; + u16 *screen; + + screen = (u16 *) BG_SCREEN_ADDR(30); + + for (x = 4; x < 18; x += 5) + { + for (dx = 0; dx < 4; dx++) + { + screen[5 * 32 + dx + x] = 0x2051; + screen[13 * 32 + dx + x] = 0x2851; + screen[6 * 32 + dx + x] = 0x2061; + screen[12 * 32 + dx + x] = 0x2861; + } + + screen[6 * 32 + x] = 0x20BE; + screen[12 * 32 + x] = 0x28BE; + + for (y = 7; y <= 11; y++) + { + screen[y * 32 + x] = 0x20BF; + } + } +} + +void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) { + u16 *vram = (u16 *) BG_SCREEN_ADDR(29); + + vram[15 * 32 + arg0] = arg1; + vram[15 * 32 + 1 + arg0] = arg2; + vram[16 * 32 + arg0] = arg3; + vram[16 * 32 + 1 + arg0] = arg4; +} + +void sub_81065DC(void) { + s16 y, x; + u16 *screen; + + CpuCopy16(gUnknown_08E95FB8, (void *) BG_SCREEN_ADDR(29), 20 * 32 * 2); + + screen = (u16 *) BG_SCREEN_ADDR(30); + for (y = 0; y < 20; y++) + { + for (x = 0; x < 30; x++) + { + screen[x + y * 32] = 0; + } + } +} diff --git a/src/field/start_menu.c b/src/field/start_menu.c new file mode 100644 index 000000000..411690aff --- /dev/null +++ b/src/field/start_menu.c @@ -0,0 +1,850 @@ +#include "global.h" +#include "start_menu.h" +#include "event_data.h" +#include "field_map_obj_helpers.h" +#include "field_player_avatar.h" +#include "field_weather.h" +#include "fieldmap.h" +#include "item_menu.h" +#include "load_save.h" +#include "main.h" +#include "map_obj_lock.h" +#include "menu.h" +#include "option_menu.h" +#include "palette.h" +#include "pokedex.h" +#include "pokemon_menu.h" +#include "pokenav.h" +#include "rom4.h" +#include "safari_zone.h" +#include "save.h" +#include "save_menu_util.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "strings2.h" +#include "task.h" +#include "trainer_card.h" +#include "unknown_task.h" + +//Menu actions +enum { + MENU_ACTION_POKEDEX, + MENU_ACTION_POKEMON, + MENU_ACTION_BAG, + MENU_ACTION_POKENAV, + MENU_ACTION_PLAYER, + MENU_ACTION_SAVE, + MENU_ACTION_OPTION, + MENU_ACTION_EXIT, + MENU_ACTION_RETIRE, + MENU_ACTION_PLAYER_LINK +}; + +static u8 (*saveDialogCallback)(void); +static u8 saveDialogTimer; //Number of frames to keep the window on screen after save was completed +static bool8 savingComplete; + +extern bool8 gDifferentSaveFile; +extern u16 gSaveFileStatus; +extern u16 gScriptResult; + +extern u8 gUnknown_03004860; + +u8 (*gCallback_03004AE8)(void); + +EWRAM_DATA static u8 sStartMenuCursorPos = 0; +EWRAM_DATA static u8 sNumStartMenuActions = 0; +EWRAM_DATA static u8 sCurrentStartMenuActions[10] = {0}; + +//Text strings +extern u8 gSaveText_PlayerSavedTheGame[]; +extern u8 gSaveText_DontTurnOff[]; +extern u8 gSaveText_ThereIsAlreadyAFile[]; +extern u8 gSaveText_ThereIsADifferentFile[]; +extern u8 gSaveText_WouldYouLikeToSave[]; + +static u8 StartMenu_PokedexCallback(void); +static u8 StartMenu_PokemonCallback(void); +static u8 StartMenu_BagCallback(void); +static u8 StartMenu_PokenavCallback(void); +static u8 StartMenu_PlayerCallback(void); +static u8 StartMenu_SaveCallback(void); +static u8 StartMenu_OptionCallback(void); +static u8 StartMenu_ExitCallback(void); +static u8 StartMenu_RetireCallback(void); +static u8 StartMenu_PlayerLinkCallback(void); + +static const struct MenuAction sStartMenuItems[] = +{ + { SystemText_Pokedex, StartMenu_PokedexCallback }, + { SystemText_Pokemon, StartMenu_PokemonCallback }, + { SystemText_BAG, StartMenu_BagCallback }, + { SystemText_Pokenav, StartMenu_PokenavCallback }, + { SystemText_Player, StartMenu_PlayerCallback }, + { SystemText_Save, StartMenu_SaveCallback }, + { SystemText_Option, StartMenu_OptionCallback }, + { SystemText_Exit, StartMenu_ExitCallback }, + { SystemText_Retire, StartMenu_RetireCallback }, + { SystemText_Player, StartMenu_PlayerLinkCallback }, +}; + +//Private functions +static void BuildStartMenuActions(void); +static void AddStartMenuAction(u8 action); +static void BuildStartMenuActions_Normal(void); +static void BuildStartMenuActions_SafariZone(void); +static void BuildStartMenuActions_Link(void); +static void DisplaySafariBallsWindow(void); +static bool32 PrintStartMenuItemsMultistep(s16 *a, u32 b); +static bool32 InitStartMenuMultistep(s16 *a, s16 *b); +static void Task_StartMenu(u8 taskId); +static u8 StartMenu_InputProcessCallback(void); +static u8 SaveCallback1(void); +static u8 SaveCallback2(void); +static void sub_807160C(void); +static u8 RunSaveDialogCallback(void); +static void DisplaySaveMessageWithCallback(const u8 *ptr, u8 (*func)(void)); +static void Task_SaveDialog(u8 taskId); +static void sub_8071700(void); +static void HideSaveDialog(void); +static void SaveDialogStartTimeout(void); +static u8 SaveDialogCheckForTimeoutOrKeypress(void); +static u8 SaveDialogCheckForTimeoutAndKeypress(void); +static u8 SaveDialogCheckForTimeoutAndKeypress(void); +static u8 SaveDialogCB_DisplayConfirmMessage(void); +static u8 SaveDialogCB_DisplayConfirmYesNoMenu(void); +static u8 SaveDialogCB_ProcessConfirmYesNoMenu(void); +static u8 SaveDialogCB_SaveFileExists(void); +static u8 SaveDialogCB_DisplayOverwriteYesNoMenu(void); +static u8 SaveDialogCB_ProcessOverwriteYesNoMenu(void); +static u8 SaveDialogCB_DisplaySavingMessage(void); +static u8 SaveDialogCB_DoSave(void); +static u8 SaveDialogCB_SaveSuccess(void); +static u8 SaveDialogCB_ReturnSuccess(void); +static u8 SaveDialogCB_SaveError(void); +static u8 SaveDialogCB_ReturnError(void); +static void sub_80719F0(void); +static bool32 sub_80719FC(u8 *ptr); +static void sub_8071B54(void); +static void Task_8071B64(u8 taskId); + + +static void BuildStartMenuActions(void) +{ + sNumStartMenuActions = 0; + if (is_c1_link_related_active() == TRUE) + BuildStartMenuActions_Link(); + else + { + if (GetSafariZoneFlag() == TRUE) + BuildStartMenuActions_SafariZone(); + else + BuildStartMenuActions_Normal(); + } +} + +static void AddStartMenuAction(u8 action) +{ + AppendToList(sCurrentStartMenuActions, &sNumStartMenuActions, action); +} + +static void BuildStartMenuActions_Normal(void) +{ + if (FlagGet(SYS_POKEDEX_GET) == TRUE) + AddStartMenuAction(MENU_ACTION_POKEDEX); + if (FlagGet(SYS_POKEMON_GET) == TRUE) + AddStartMenuAction(MENU_ACTION_POKEMON); + AddStartMenuAction(MENU_ACTION_BAG); + if (FlagGet(SYS_POKENAV_GET) == TRUE) + AddStartMenuAction(MENU_ACTION_POKENAV); + AddStartMenuAction(MENU_ACTION_PLAYER); + AddStartMenuAction(MENU_ACTION_SAVE); + AddStartMenuAction(MENU_ACTION_OPTION); + AddStartMenuAction(MENU_ACTION_EXIT); +} + +static void BuildStartMenuActions_SafariZone(void) +{ + AddStartMenuAction(MENU_ACTION_RETIRE); + AddStartMenuAction(MENU_ACTION_POKEDEX); + AddStartMenuAction(MENU_ACTION_POKEMON); + AddStartMenuAction(MENU_ACTION_BAG); + AddStartMenuAction(MENU_ACTION_PLAYER); + AddStartMenuAction(MENU_ACTION_OPTION); + AddStartMenuAction(MENU_ACTION_EXIT); +} + +static void BuildStartMenuActions_Link(void) +{ + AddStartMenuAction(MENU_ACTION_POKEMON); + AddStartMenuAction(MENU_ACTION_BAG); + if (FlagGet(SYS_POKENAV_GET) == TRUE) + AddStartMenuAction(MENU_ACTION_POKENAV); + AddStartMenuAction(MENU_ACTION_PLAYER_LINK); + AddStartMenuAction(MENU_ACTION_OPTION); + AddStartMenuAction(MENU_ACTION_EXIT); +} + +//Show number of safari balls left +static void DisplaySafariBallsWindow(void) +{ + sub_8072C44(gStringVar1, gNumSafariBalls, 12, 1); + MenuDrawTextWindow(0, 0, 10, 5); + MenuPrint(gOtherText_SafariStock, 1, 1); +} + +//Prints n menu items starting at *index +static bool32 PrintStartMenuItemsMultistep(s16 *index, u32 n) +{ + int _index = *index; + + do + { + MenuPrint(sStartMenuItems[sCurrentStartMenuActions[_index]].text, 23, 2 + _index * 2); + _index++; + if (_index >= sNumStartMenuActions) + { + *index = _index; + return TRUE; + } + } + while (--n != 0); + *index = _index; + return FALSE; +} + +static bool32 InitStartMenuMultistep(s16 *step, s16 *index) +{ + switch (*step) + { + case 1: + BuildStartMenuActions(); + (*step)++; + break; + case 2: + MenuDrawTextWindow(22, 0, 29, sNumStartMenuActions * 2 + 3); + *index = 0; + (*step)++; + break; + case 3: + if (GetSafariZoneFlag()) + DisplaySafariBallsWindow(); + (*step)++; + break; + case 4: + if (PrintStartMenuItemsMultistep(index, 2)) + (*step)++; + break; + case 0: + (*step)++; + break; + case 5: + sStartMenuCursorPos = InitMenu(0, 0x17, 2, sNumStartMenuActions, sStartMenuCursorPos, 6); + return TRUE; + } + return FALSE; +} + +static void InitStartMenu(void) +{ + s16 step = 0; + s16 index = 0; + + while (InitStartMenuMultistep(&step, &index) == FALSE) + ; +} + +static void Task_StartMenu(u8 taskId) +{ + if (InitStartMenuMultistep(gTasks[taskId].data, gTasks[taskId].data + 1) == TRUE) + { + *gTasks[taskId].data = 0; + SwitchTaskToFollowupFunc(taskId); + } +} + +void CreateStartMenuTask(void (*func)(u8)) +{ + u8 taskId; + + InitMenuWindow(&gWindowConfig_81E6CE4); + taskId = CreateTask(Task_StartMenu, 0x50); + SetTaskFuncWithFollowupFunc(taskId, Task_StartMenu, func); +} + +void sub_80712B4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + gCallback_03004AE8 = StartMenu_InputProcessCallback; + task->data[0]++; + break; + case 1: + if (gCallback_03004AE8() == 1) + DestroyTask(taskId); + break; + } +} + +void sub_8071310(void) +{ + if (!is_c1_link_related_active()) + { + FreezeMapObjects(); + sub_80594C0(); + sub_80597F4(); + } + CreateStartMenuTask(sub_80712B4); + ScriptContext2_Enable(); +} + +static u8 StartMenu_InputProcessCallback(void) +{ + if (gMain.newKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + sStartMenuCursorPos = MoveMenuCursor(-1); + } + if (gMain.newKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + sStartMenuCursorPos = MoveMenuCursor(1); + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func == StartMenu_PokedexCallback) + { + if (GetNationalPokedexCount(0) == 0) + return 0; + } + gCallback_03004AE8 = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func; + if (gCallback_03004AE8 != StartMenu_SaveCallback && + gCallback_03004AE8 != StartMenu_ExitCallback && + gCallback_03004AE8 != StartMenu_RetireCallback) + fade_screen(1, 0); + return 0; + } + if (gMain.newKeys & (START_BUTTON | B_BUTTON)) + { + CloseMenu(); + return 1; + } + return 0; +} + +//When player selects POKEDEX +static u8 StartMenu_PokedexCallback(void) +{ + if (!gPaletteFade.active) + { + IncrementGameStat(0x29); + PlayRainSoundEffect(); + SetMainCallback2(CB2_InitPokedex); + return 1; + } + return 0; +} + +//When player selects POKEMON +static u8 StartMenu_PokemonCallback(void) +{ + if (!gPaletteFade.active) + { + PlayRainSoundEffect(); + SetMainCallback2(sub_8089A70); + return 1; + } + return 0; +} + +//When player selects BAG +static u8 StartMenu_BagCallback(void) +{ + if (!gPaletteFade.active) + { + PlayRainSoundEffect(); + SetMainCallback2(sub_80A53F8); + return 1; + } + return 0; +} + +//When player selects POKENAV +static u8 StartMenu_PokenavCallback(void) +{ + if (!gPaletteFade.active) + { + PlayRainSoundEffect(); + SetMainCallback2(sub_80EBA5C); + return 1; + } + return 0; +} + +//When player selects his/her name +static u8 StartMenu_PlayerCallback(void) +{ + if (!gPaletteFade.active) + { + PlayRainSoundEffect(); + sub_8093110(sub_805469C); + return 1; + } + return 0; +} + +//When player selects SAVE +static u8 StartMenu_SaveCallback(void) +{ + HandleDestroyMenuCursors(); + gCallback_03004AE8 = SaveCallback1; + return 0; +} + +//When player selects OPTION +static u8 StartMenu_OptionCallback(void) +{ + if (!gPaletteFade.active) + { + PlayRainSoundEffect(); + SetMainCallback2(CB2_InitOptionMenu); + gMain.savedCallback = sub_805469C; + return 1; + } + return 0; +} + +//When player selects EXIT +static u8 StartMenu_ExitCallback(void) +{ + CloseMenu(); + return 1; +} + +//When player selects RETIRE +static u8 StartMenu_RetireCallback(void) +{ + CloseMenu(); + SafariZoneRetirePrompt(); + return 1; +} + +//When player selects their name in multiplayer mode +static u8 StartMenu_PlayerLinkCallback(void) +{ + if (!gPaletteFade.active) + { + PlayRainSoundEffect(); + sub_8093130(gUnknown_03004860, sub_805469C); + return 1; + } + return 0; +} + +//Save dialog status +enum +{ + SAVE_IN_PROGRESS, + SAVE_SUCCESS, + SAVE_CANCELED, + SAVE_ERROR, +}; + +static u8 SaveCallback1(void) +{ + sub_807160C(); + gCallback_03004AE8 = SaveCallback2; + return FALSE; +} + +static u8 SaveCallback2(void) +{ + switch (RunSaveDialogCallback()) + { + case SAVE_IN_PROGRESS: + return FALSE; + case SAVE_CANCELED: + //Go back to start menu + MenuZeroFillScreen(); + InitStartMenu(); + gCallback_03004AE8 = StartMenu_InputProcessCallback; + return FALSE; + case SAVE_SUCCESS: + case SAVE_ERROR: + MenuZeroFillScreen(); + sub_8064E2C(); + ScriptContext2_Disable(); + return TRUE; + } + return FALSE; +} + +static void sub_807160C(void) +{ + save_serialize_map(); + saveDialogCallback = SaveDialogCB_DisplayConfirmMessage; + savingComplete = FALSE; +} + +static u8 RunSaveDialogCallback(void) +{ + if (savingComplete) + { + if (!MenuUpdateWindowText()) + return 0; + } + savingComplete = FALSE; + return saveDialogCallback(); +} + +void InitSaveDialog(void) +{ + sub_807160C(); + CreateTask(Task_SaveDialog, 0x50); +} + +static void DisplaySaveMessageWithCallback(const u8 *ptr, u8 (*func)(void)) +{ + StringExpandPlaceholders(gStringVar4, ptr); + MenuDisplayMessageBox(); + sub_8072044(gStringVar4); + savingComplete = TRUE; + saveDialogCallback = func; +} + +static void Task_SaveDialog(u8 taskId) +{ + u8 status = RunSaveDialogCallback(); + + switch (status) + { + case SAVE_CANCELED: + case SAVE_ERROR: + gScriptResult = 0; + break; + case SAVE_SUCCESS: + gScriptResult = status; + break; + case SAVE_IN_PROGRESS: + return; + } + DestroyTask(taskId); + EnableBothScriptContexts(); +} + +static void sub_8071700(void) +{ + HandleCloseSaveWindow(0, 0); +} + +static void HideSaveDialog(void) +{ + MenuZeroFillWindowRect(20, 8, 26, 13); +} + +static void SaveDialogStartTimeout(void) +{ + saveDialogTimer = 60; +} + +static bool8 SaveDialogCheckForTimeoutOrKeypress(void) +{ + saveDialogTimer--; + if (gMain.heldKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + return TRUE; + } + else if (saveDialogTimer == 0) + return TRUE; + return FALSE; +} + +static bool8 SaveDialogCheckForTimeoutAndKeypress(void) +{ + if (saveDialogTimer != 0) + saveDialogTimer--; + else if (gMain.heldKeys & A_BUTTON) + return TRUE; + return FALSE; +} + +static u8 SaveDialogCB_DisplayConfirmMessage(void) +{ + MenuZeroFillScreen(); + HandleDrawSaveWindowInfo(0, 0); + DisplaySaveMessageWithCallback(gSaveText_WouldYouLikeToSave, SaveDialogCB_DisplayConfirmYesNoMenu); + return SAVE_IN_PROGRESS; +} + +static u8 SaveDialogCB_DisplayConfirmYesNoMenu(void) +{ + DisplayYesNoMenu(20, 8, 1); + saveDialogCallback = SaveDialogCB_ProcessConfirmYesNoMenu; + return SAVE_IN_PROGRESS; +} + +static u8 SaveDialogCB_ProcessConfirmYesNoMenu(void) +{ + switch (ProcessMenuInputNoWrap_()) + { + case 0: //YES + HideSaveDialog(); + switch (gSaveFileStatus) + { + case 0: + case 2: + if (gDifferentSaveFile == FALSE) + { + saveDialogCallback = SaveDialogCB_SaveFileExists; + return SAVE_IN_PROGRESS; + } + saveDialogCallback = SaveDialogCB_DisplaySavingMessage; + return SAVE_IN_PROGRESS; + default: + saveDialogCallback = SaveDialogCB_SaveFileExists; + return SAVE_IN_PROGRESS; + } + break; + case -1: //B button + case 1: //NO + HideSaveDialog(); + sub_8071700(); + return SAVE_CANCELED; + } + return SAVE_IN_PROGRESS; +} + +static u8 SaveDialogCB_SaveFileExists(void) +{ + DisplaySaveMessageWithCallback( + gDifferentSaveFile == TRUE ? gSaveText_ThereIsADifferentFile : gSaveText_ThereIsAlreadyAFile, + SaveDialogCB_DisplayOverwriteYesNoMenu); + return SAVE_IN_PROGRESS; +} + +static u8 SaveDialogCB_DisplayOverwriteYesNoMenu(void) +{ + DisplayYesNoMenu(20, 8, 1); + saveDialogCallback = SaveDialogCB_ProcessOverwriteYesNoMenu; + return SAVE_IN_PROGRESS; +} + +static u8 SaveDialogCB_ProcessOverwriteYesNoMenu(void) +{ + switch (ProcessMenuInputNoWrap_()) + { + case 0: //YES + HideSaveDialog(); + saveDialogCallback = SaveDialogCB_DisplaySavingMessage; + break; + case -1: //B button + case 1: //NO + HideSaveDialog(); + sub_8071700(); + return SAVE_CANCELED; + } + return SAVE_IN_PROGRESS; +} + +static u8 SaveDialogCB_DisplaySavingMessage(void) +{ + //"SAVING... DON'T TURN OFF THE POWER." + DisplaySaveMessageWithCallback(gSaveText_DontTurnOff, SaveDialogCB_DoSave); + return SAVE_IN_PROGRESS; +} + +static u8 SaveDialogCB_DoSave(void) +{ + bool8 saveSucceeded; + + IncrementGameStat(0); + if (gDifferentSaveFile == TRUE) + { + saveSucceeded = TrySavingData(DIFFERENT_FILE_SAVE); + gDifferentSaveFile = FALSE; + } + else + { + saveSucceeded = TrySavingData(NORMAL_SAVE); + } + + if (saveSucceeded == TRUE) + { + //"(Player) saved the game." + DisplaySaveMessageWithCallback(gSaveText_PlayerSavedTheGame, SaveDialogCB_SaveSuccess); + } + else + { + //"Save error. Please exchange the backup memory." + DisplaySaveMessageWithCallback(gSystemText_SaveErrorExchangeBackup, SaveDialogCB_SaveError); + } + + SaveDialogStartTimeout(); + return SAVE_IN_PROGRESS; +} + +static u8 SaveDialogCB_SaveSuccess(void) +{ + if (MenuUpdateWindowText()) + { + PlaySE(SE_SAVE); + saveDialogCallback = SaveDialogCB_ReturnSuccess; + } + return SAVE_IN_PROGRESS; +} + +static u8 SaveDialogCB_ReturnSuccess(void) +{ + if (!IsSEPlaying() && SaveDialogCheckForTimeoutOrKeypress()) + { + sub_8071700(); + return SAVE_SUCCESS; + } + else + return SAVE_IN_PROGRESS; +} + +static u8 SaveDialogCB_SaveError(void) +{ + if (MenuUpdateWindowText()) + { + PlaySE(SE_BOO); + saveDialogCallback = SaveDialogCB_ReturnError; + } + return SAVE_IN_PROGRESS; +} + +static u8 SaveDialogCB_ReturnError(void) +{ + if (!SaveDialogCheckForTimeoutAndKeypress()) + return SAVE_IN_PROGRESS; + else + { + sub_8071700(); + return SAVE_ERROR; + } +} + +static void sub_80719F0(void) +{ + TransferPlttBuffer(); +} + +static bool32 sub_80719FC(u8 *step) +{ + switch (*step) + { + case 0: + { + u8 *addr; + u32 size; + + REG_DISPCNT = 0; + SetVBlankCallback(NULL); + remove_some_task(); + DmaClear16(3, PLTT, PLTT_SIZE); + 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; + } + } + break; + } + case 1: + ResetSpriteData(); + ResetTasks(); + ResetPaletteFade(); + dp12_8087EA4(); + break; + case 2: + SetUpWindowConfig(&gWindowConfig_81E6CE4); + InitMenuWindow(&gWindowConfig_81E6CE4); + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_BG0_ON; + break; + case 3: + { + u32 savedIme; + + BlendPalettes(-1, 0x10, 0); + SetVBlankCallback(sub_80719F0); + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= 1; + REG_IME = savedIme; + break; + } + case 4: + return TRUE; + } + (*step)++; + return FALSE; +} + +void sub_8071B28(void) +{ + if (sub_80719FC(&gMain.state)) + { + CreateTask(Task_8071B64, 0x50); + SetMainCallback2(sub_8071B54); + } +} + +static void sub_8071B54(void) +{ + RunTasks(); + UpdatePaletteFade(); +} + +static void Task_8071B64(u8 taskId) +{ + s16 *step = gTasks[taskId].data; + + if (!gPaletteFade.active) + { + switch (*step) + { + case 0: + MenuDisplayMessageBox(); + MenuPrint(gSystemText_Saving, 2, 15); + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + (*step)++; + break; + case 1: + SetSecretBase2Field_9_AndHideBG(); + sub_8125E2C(); + (*step)++; + break; + case 2: + if (!sub_8125E6C()) + break; + ClearSecretBase2Field_9_2(); + (*step)++; + break; + case 3: + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + (*step)++; + break; + case 4: + SetMainCallback2(gMain.savedCallback); + DestroyTask(taskId); + break; + } + } +} diff --git a/src/field/starter_choose.c b/src/field/starter_choose.c new file mode 100644 index 000000000..2b28df4f0 --- /dev/null +++ b/src/field/starter_choose.c @@ -0,0 +1,757 @@ +#include "global.h" +#include "starter_choose.h" +#include "data2.h" +#include "decompress.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "pokedex.h" +#include "songs.h" +#include "sound.h" +#include "species.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "trig.h" +#include "unknown_task.h" + +extern u16 gScriptResult; +extern struct SpriteTemplate gUnknown_02024E8C; + +//-------------------------------------------------- +// Graphics Data +//-------------------------------------------------- + +const u16 gBirchBagGrassPal[2][16] = +{ + INCBIN_U16("graphics/misc/birch_bag.gbapal"), + INCBIN_U16("graphics/misc/birch_grass.gbapal"), +}; +static const u16 gBirchBallarrow_Pal[] = INCBIN_U16("graphics/misc/birch_ballarrow.gbapal"); +static const u16 gBirchCircle_Pal[] = INCBIN_U16("graphics/misc/birch_circle.gbapal"); +const u8 gBirchBagTilemap[] = INCBIN_U8("graphics/misc/birch_bag_map.bin.lz"); +const u8 gBirchGrassTilemap[] = INCBIN_U8("graphics/misc/birch_grass_map.bin.lz"); +const u8 gBirchHelpGfx[] = INCBIN_U8("graphics/misc/birch_help.4bpp.lz"); +static const u8 gBirchBallarrow_Gfx[] = INCBIN_U8("graphics/misc/birch_ballarrow.4bpp.lz"); +static const u8 gBirchCircle_Gfx[] = INCBIN_U8("graphics/misc/birch_circle.4bpp.lz"); +static const u8 gStarterChoose_PokeballCoords[][2] = +{ + {60, 64}, + {120, 88}, + {180, 64}, +}; +static const u8 gStarterChoose_LabelCoords[][2] = +{ + {0, 9}, + {16, 10}, + {8, 4}, +}; +static const u16 sStarterMons[] = {SPECIES_TREECKO, SPECIES_TORCHIC, SPECIES_MUDKIP}; +static const struct OamData gOamData_83F76CC = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; +static const struct OamData gOamData_83F76D4 = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; +static const struct OamData gOamData_83F76DC = +{ + .y = 160, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; +static const u8 gUnknown_083F76E4[][2] = +{ + {60, 32}, + {120, 56}, + {180, 32}, + {0, 0}, +}; +static const union AnimCmd gSpriteAnim_83F76EC[] = +{ + ANIMCMD_FRAME(48, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83F76F4[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83F76FC[] = +{ + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(0, 32), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_JUMP(0), +}; +static const union AnimCmd gSpriteAnim_83F7744[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_END, +}; +static const union AnimCmd *const gSpriteAnimTable_83F774C[] = +{ + gSpriteAnim_83F76EC, +}; +static const union AnimCmd *const gSpriteAnimTable_83F7750[] = +{ + gSpriteAnim_83F76F4, + gSpriteAnim_83F76FC, +}; +static const union AnimCmd *const gSpriteAnimTable_83F7758[] = +{ + gSpriteAnim_83F7744, +}; +static const union AffineAnimCmd gSpriteAffineAnim_83F775C[] = +{ + AFFINEANIMCMD_FRAME(16, 16, 0, 0), + AFFINEANIMCMD_FRAME(16, 16, 0, 15), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd gSpriteAffineAnim_83F7774[] = +{ + AFFINEANIMCMD_FRAME(20, 20, 0, 0), + AFFINEANIMCMD_FRAME(20, 20, 0, 15), + AFFINEANIMCMD_END, +}; +static const union AffineAnimCmd *const gSpriteAffineAnimTable_83F778C[] = +{ + gSpriteAffineAnim_83F775C, +}; +static const union AffineAnimCmd *const gSpriteAffineAnimTable_83F7790[] = +{ + gSpriteAffineAnim_83F7774, +}; +static const struct CompressedSpriteSheet gUnknown_083F7794[] = +{ + {gBirchBallarrow_Gfx, 0x0800, 0x1000}, + {NULL}, +}; +static const struct CompressedSpriteSheet gUnknown_083F77A4[] = +{ + {gBirchCircle_Gfx, 0x0800, 0x1001}, + {NULL}, +}; +const struct SpritePalette gUnknown_083F77B4[] = +{ + {gBirchBallarrow_Pal, 0x1000}, + {gBirchCircle_Pal, 0x1001}, + {NULL}, +}; +static void sub_810A62C(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_83F77CC = +{ + .tileTag = 4096, + .paletteTag = 4096, + .oam = &gOamData_83F76CC, + .anims = gSpriteAnimTable_83F774C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_810A62C, +}; +static void sub_810A68C(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_83F77E4 = +{ + .tileTag = 4096, + .paletteTag = 4096, + .oam = &gOamData_83F76D4, + .anims = gSpriteAnimTable_83F7750, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_810A68C, +}; +static void StarterPokemonSpriteAnimCallback(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_83F77FC = +{ + .tileTag = 4097, + .paletteTag = 4097, + .oam = &gOamData_83F76DC, + .anims = gSpriteAnimTable_83F7758, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83F7790, + .callback = StarterPokemonSpriteAnimCallback, +}; + +static void MainCallback2(void); +static void Task_StarterChoose1(u8 taskId); +static void Task_StarterChoose2(u8 taskId); +static void Task_StarterChoose3(u8 taskId); +static void Task_StarterChoose4(u8 taskId); +static void Task_StarterChoose5(u8 taskId); +static void Task_StarterChoose6(u8 taskId); + +static void CreateStarterPokemonLabel(u8, u8); +static u8 CreatePokemonFrontSprite(u16, u8, u8); + +//Position of the sprite of the selected starter Pokemon +#define STARTER_PKMN_POS_X 120 +#define STARTER_PKMN_POS_Y 64 + +//Retrieves one of the available starter Pokemon +u16 GetStarterPokemon(u16 n) +{ + if (n > 3) + n = 0; + return sStarterMons[n]; +} + +static void VblankCallback(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +#define tStarterSelection data[0] +#define tPkmnSpriteId data[1] +#define tCircleSpriteId data[2] + +void CB2_ChooseStarter(void) +{ + u16 savedIme; + u8 taskId; + u8 spriteId; + + SetVBlankCallback(NULL); + + REG_DISPCNT = 0; + REG_BG3CNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT, PLTT_SIZE); + + LZ77UnCompVram(&gBirchHelpGfx, (void *)VRAM); + LZ77UnCompVram(&gBirchBagTilemap, (void *)(VRAM + 0x3000)); + LZ77UnCompVram(&gBirchGrassTilemap, (void *)(VRAM + 0x3800)); + remove_some_task(); + ResetTasks(); + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + LoadPalette(gBirchBagGrassPal, 0, sizeof(gBirchBagGrassPal)); + LoadCompressedObjectPic(&gUnknown_083F7794[0]); + LoadCompressedObjectPic(&gUnknown_083F77A4[0]); + LoadSpritePalettes(gUnknown_083F77B4); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + + SetVBlankCallback(VblankCallback); + SetMainCallback2(MainCallback2); + + REG_WININ = 0x3F; + REG_WINOUT = 0x1F; + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_BLDCNT = 0xFE; + REG_BLDALPHA = 0; + REG_BLDY = 0x7; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; + + taskId = CreateTask(Task_StarterChoose1, 0); + gTasks[taskId].tStarterSelection = 1; + + //Create hand sprite + spriteId = CreateSprite(&gSpriteTemplate_83F77CC, 120, 56, 2); + gSprites[spriteId].data0 = taskId; + + //Create three Pokeball sprites + spriteId = CreateSprite( + &gSpriteTemplate_83F77E4, + gStarterChoose_PokeballCoords[0][0], gStarterChoose_PokeballCoords[0][1], 2); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 0; + spriteId = CreateSprite( + &gSpriteTemplate_83F77E4, + gStarterChoose_PokeballCoords[1][0], gStarterChoose_PokeballCoords[1][1], 2); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 1; + spriteId = CreateSprite( + &gSpriteTemplate_83F77E4, + gStarterChoose_PokeballCoords[2][0], gStarterChoose_PokeballCoords[2][1], 2); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 2; +} + +static void MainCallback2(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void Task_StarterChoose1(u8 taskId) +{ + CreateStarterPokemonLabel(0xFF, gTasks[taskId].tStarterSelection); + MenuDrawTextWindow(2, 14, 27, 19); + MenuPrint(gOtherText_BirchInTrouble, 3, 15); + gTasks[taskId].func = Task_StarterChoose2; +} + +static void Task_StarterChoose2(u8 taskId) +{ + u8 selection = gTasks[taskId].tStarterSelection; + + if (gMain.newKeys & A_BUTTON) + { + u8 spriteId; + + MenuZeroFillWindowRect( + gStarterChoose_LabelCoords[selection][0], + gStarterChoose_LabelCoords[selection][1], + gStarterChoose_LabelCoords[selection][0] + 13, + gStarterChoose_LabelCoords[selection][1] + 3); + + REG_WIN0H = 0; + REG_WIN0V = 0; + + //Create white circle background + spriteId = CreateSprite( + &gSpriteTemplate_83F77FC, + gStarterChoose_PokeballCoords[selection][0], + gStarterChoose_PokeballCoords[selection][1], + 1); + gTasks[taskId].tCircleSpriteId = spriteId; + + //Create Pokemon sprite + spriteId = CreatePokemonFrontSprite( + GetStarterPokemon(gTasks[taskId].tStarterSelection), + gStarterChoose_PokeballCoords[selection][0], + gStarterChoose_PokeballCoords[selection][1]); + gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_83F778C; + gSprites[spriteId].callback = StarterPokemonSpriteAnimCallback; + gTasks[taskId].tPkmnSpriteId = spriteId; + + gTasks[taskId].func = Task_StarterChoose3; + } + else + { + if ((gMain.newKeys & DPAD_LEFT) && selection > 0) + { + gTasks[taskId].tStarterSelection--; + CreateStarterPokemonLabel(selection, gTasks[taskId].tStarterSelection); + } + else if ((gMain.newKeys & DPAD_RIGHT) && selection < 2) + { + gTasks[taskId].tStarterSelection++; + CreateStarterPokemonLabel(selection, gTasks[taskId].tStarterSelection); + } + } +} + +static void Task_StarterChoose3(u8 taskId) +{ + if (gSprites[gTasks[taskId].tCircleSpriteId].affineAnimEnded && + gSprites[gTasks[taskId].tCircleSpriteId].pos1.x == STARTER_PKMN_POS_X && + gSprites[gTasks[taskId].tCircleSpriteId].pos1.y == STARTER_PKMN_POS_Y) + { + gTasks[taskId].func = Task_StarterChoose4; + } +} + +static void Task_StarterChoose4(u8 taskId) +{ + PlayCry1(GetStarterPokemon(gTasks[taskId].tStarterSelection), 0); + MenuDrawTextWindow(2, 14, 27, 19); + //"Do you choose this POKEMON?" + MenuPrint(gOtherText_DoYouChoosePoke, 3, 15); + DisplayYesNoMenu(21, 7, 1); + gTasks[taskId].func = Task_StarterChoose5; +} + +static void Task_StarterChoose5(u8 taskId) +{ + u8 spriteId; + + switch (ProcessMenuInputNoWrap_()) + { + case 0: // YES + //Return the starter choice and exit. + gScriptResult = gTasks[taskId].tStarterSelection; + SetMainCallback2(gMain.savedCallback); + break; + case 1: // NO + case -1: // B button + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(21, 7, 27, 12); + + spriteId = gTasks[taskId].tPkmnSpriteId; + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[spriteId].oam.paletteNum)); + FreeOamMatrix(gSprites[spriteId].oam.matrixNum); + DestroySprite(&gSprites[spriteId]); + + spriteId = gTasks[taskId].tCircleSpriteId; + FreeOamMatrix(gSprites[spriteId].oam.matrixNum); + DestroySprite(&gSprites[spriteId]); + gTasks[taskId].func = Task_StarterChoose6; + break; + } +} + +static void Task_StarterChoose6(u8 taskId) +{ + gTasks[taskId].func = Task_StarterChoose1; +} + +void AddTextColorCtrlCode(u8 *string, u8 bgColor, u8 textColor, u8 shadowColor) +{ + *(string++) = EXT_CTRL_CODE_BEGIN; + *(string++) = 4; + *(string++) = textColor; + *(string++) = bgColor; + *(string++) = shadowColor; +} + +#define SET_CHAR(str, index, c) \ +{ \ + u8 *p = str + index; \ + *p = c; \ +} + + +#if ENGLISH +static void CreateStarterPokemonLabel(u8 prevSelection, u8 selection) +{ + u8 labelText[72]; + const u8 *category; + u8 srcIndex; + u8 dstIndex; + u16 species; + + u8 labelLeft; + u8 labelRight; + u8 labelTop; + u8 labelBottom; + + if (prevSelection != 0xFF) + { + //Remove the old Pokemon label + MenuZeroFillWindowRect( + gStarterChoose_LabelCoords[prevSelection][0], + gStarterChoose_LabelCoords[prevSelection][1], + gStarterChoose_LabelCoords[prevSelection][0] + 13, + gStarterChoose_LabelCoords[prevSelection][1] + 3); + REG_WIN0H = 0; + REG_WIN0V = 0; + } + species = GetStarterPokemon(selection); + category = GetPokemonCategory(SpeciesToNationalPokedexNum(species)); + AddTextColorCtrlCode(labelText, 0, 15, 8); + dstIndex = 5; + SET_CHAR(labelText, 5, EXT_CTRL_CODE_BEGIN); + SET_CHAR(labelText, 6, 0x11); + SET_CHAR(labelText, 7, dstIndex); + + //Copy category string to label + dstIndex = 8; + srcIndex = 0; + while (category[srcIndex] != EOS && srcIndex <= 10) + { + labelText[dstIndex] = category[srcIndex]; + srcIndex++; + dstIndex++; + } + labelText[dstIndex++] = CHAR_SPACE; + + //Copy POKEMON string to label + StringCopy(labelText + dstIndex, gOtherText_Poke); + MenuPrint( + labelText, + gStarterChoose_LabelCoords[selection][0], + gStarterChoose_LabelCoords[selection][1]); + AddTextColorCtrlCode(labelText, 0, 15, 8); + + //Copy Pokemon name to label + sub_8072C74(labelText + 5, gSpeciesNames[species], 0x6B, 1); + MenuPrint( + labelText, + gStarterChoose_LabelCoords[selection][0], + gStarterChoose_LabelCoords[selection][1] + 2); + + labelLeft = gStarterChoose_LabelCoords[selection][0] * 8 + 4; + labelRight = (gStarterChoose_LabelCoords[selection][0] + 13) * 8 + 4; + labelTop = gStarterChoose_LabelCoords[selection][1] * 8; + labelBottom = (gStarterChoose_LabelCoords[selection][1] + 4) * 8; + REG_WIN0H = WIN_RANGE(labelLeft, labelRight); + REG_WIN0V = WIN_RANGE(labelTop, labelBottom); +} +#elif GERMAN +__attribute__((naked)) +static void CreateStarterPokemonLabel(u8 prevSelection, u8 selection) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + sub sp, 0x48\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, 24\n\ + lsrs r5, r1, 24\n\ + cmp r0, 0xFF\n\ + beq _0810A872\n\ + ldr r1, _0810A960 @ =gStarterChoose_LabelCoords\n\ + lsls r2, r0, 1\n\ + adds r0, r2, r1\n\ + ldrb r0, [r0]\n\ + adds r1, 0x1\n\ + adds r2, r1\n\ + ldrb r1, [r2]\n\ + adds r2, r0, 0\n\ + adds r2, 0xD\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + adds r3, r1, 0x3\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + bl MenuZeroFillWindowRect\n\ + ldr r0, _0810A964 @ =0x04000040\n\ + movs r1, 0\n\ + strh r1, [r0]\n\ + adds r0, 0x4\n\ + strh r1, [r0]\n\ +_0810A872:\n\ + adds r0, r5, 0\n\ + bl GetStarterPokemon\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + adds r0, r6, 0\n\ + bl SpeciesToNationalPokedexNum\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + bl GetPokemonCategory\n\ + adds r4, r0, 0\n\ + mov r0, sp\n\ + movs r1, 0\n\ + movs r2, 0xF\n\ + movs r3, 0x8\n\ + bl AddTextColorCtrlCode\n\ + movs r2, 0x8\n\ + movs r3, 0\n\ + ldrb r0, [r4]\n\ + lsls r5, 1\n\ + mov r7, sp\n\ + adds r7, 0x5\n\ + cmp r0, 0xFF\n\ + beq _0810A8CA\n\ +_0810A8A8:\n\ + mov r0, sp\n\ + adds r1, r0, r2\n\ + adds r0, r4, r3\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + adds r0, r2, 0x1\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + adds r0, r4, r3\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xFF\n\ + beq _0810A8CA\n\ + cmp r3, 0xA\n\ + bls _0810A8A8\n\ +_0810A8CA:\n\ + mov r0, sp\n\ + adds r1, r0, r2\n\ + movs r0, 0xFF\n\ + strb r0, [r1]\n\ + mov r1, sp\n\ + movs r0, 0xFC\n\ + strb r0, [r1, 0x5]\n\ + movs r0, 0x11\n\ + strb r0, [r1, 0x6]\n\ + mov r2, sp\n\ + lsls r1, r3, 1\n\ + adds r1, r3\n\ + lsls r1, 1\n\ + movs r0, 0x70\n\ + subs r0, r1\n\ + asrs r0, 1\n\ + strb r0, [r2, 0x7]\n\ + ldr r0, _0810A960 @ =gStarterChoose_LabelCoords\n\ + adds r1, r5, r0\n\ + ldrb r4, [r1]\n\ + adds r0, 0x1\n\ + adds r0, r5, r0\n\ + ldrb r5, [r0]\n\ + mov r0, sp\n\ + adds r1, r4, 0\n\ + adds r2, r5, 0\n\ + bl MenuPrint\n\ + mov r0, sp\n\ + movs r1, 0\n\ + movs r2, 0xF\n\ + movs r3, 0x8\n\ + bl AddTextColorCtrlCode\n\ + movs r0, 0xB\n\ + adds r1, r6, 0\n\ + muls r1, r0\n\ + ldr r0, _0810A968 @ =gSpeciesNames\n\ + adds r1, r0\n\ + adds r0, r7, 0\n\ + movs r2, 0x70\n\ + movs r3, 0x2\n\ + bl sub_8072C74\n\ + adds r2, r5, 0x2\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r0, sp\n\ + adds r1, r4, 0\n\ + bl MenuPrint\n\ + lsls r0, r4, 3\n\ + adds r0, 0x4\n\ + lsls r0, 24\n\ + adds r4, 0xD\n\ + lsls r4, 3\n\ + adds r4, 0x4\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + lsls r1, r5, 27\n\ + adds r5, 0x4\n\ + lsls r5, 27\n\ + lsrs r5, 24\n\ + ldr r2, _0810A964 @ =0x04000040\n\ + lsrs r0, 16\n\ + orrs r0, r4\n\ + strh r0, [r2]\n\ + ldr r0, _0810A96C @ =0x04000044\n\ + lsrs r1, 16\n\ + orrs r1, r5\n\ + strh r1, [r0]\n\ + add sp, 0x48\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0810A960: .4byte gStarterChoose_LabelCoords\n\ +_0810A964: .4byte 0x04000040\n\ +_0810A968: .4byte gSpeciesNames\n\ +_0810A96C: .4byte 0x04000044\n\ + .syntax divided\n"); +} +#endif + +static void nullsub_72(struct Sprite *sprite) +{ +} + +static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y) +{ + u8 spriteId; + + DecompressPicFromTable_2( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, + gUnknown_081FAF4C[0], gUnknown_081FAF4C[1], + species); + LoadCompressedObjectPalette(&gMonPaletteTable[species]); + GetMonSpriteTemplate_803C56C(species, 1); + spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); + gSprites[spriteId].callback = nullsub_72; + gSprites[spriteId].oam.priority = 0; + return spriteId; +} + +//Sprite callback +static void sub_810A62C(struct Sprite *sprite) +{ + sprite->pos1.x = gUnknown_083F76E4[gTasks[sprite->data0].tStarterSelection][0]; + sprite->pos1.y = gUnknown_083F76E4[gTasks[sprite->data0].tStarterSelection][1]; + sprite->pos2.y = Sin(sprite->data1, 8); + sprite->data1 = (u8)sprite->data1 + 4; +} + +//Sprite callback +static void sub_810A68C(struct Sprite *sprite) +{ + if (gTasks[sprite->data0].tStarterSelection == sprite->data1) + StartSpriteAnimIfDifferent(sprite, 1); + else + StartSpriteAnimIfDifferent(sprite, 0); +} + +//Sprite callback +static void StarterPokemonSpriteAnimCallback(struct Sprite *sprite) +{ + //Move sprite to upper center of screen + if (sprite->pos1.x > STARTER_PKMN_POS_X) + sprite->pos1.x -= 4; + if (sprite->pos1.x < STARTER_PKMN_POS_X) + sprite->pos1.x += 4; + if (sprite->pos1.y > STARTER_PKMN_POS_Y) + sprite->pos1.y -= 2; + if (sprite->pos1.y < STARTER_PKMN_POS_Y) + sprite->pos1.y += 2; +} diff --git a/src/field/trader.c b/src/field/trader.c new file mode 100644 index 000000000..ea06058e9 --- /dev/null +++ b/src/field/trader.c @@ -0,0 +1,261 @@ +#include "global.h" +#include "decoration.h" +#include "decoration_inventory.h" +#include "event_data.h" +#include "main.h" +#include "menu.h" +#include "menu_helpers.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" + +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u16 gSpecialVar_0x8006; + +static const u8 * const gUnknown_083F62D8[] = +{ + SecretBaseText_Tristan, + SecretBaseText_Philip, + SecretBaseText_Dennis, + SecretBaseText_Roberto, +}; + +static const u8 gTraderDecorations[] = +{ + DECOR_DUSKULL_DOLL, + DECOR_BALL_CUSHION, + DECOR_TIRE, + DECOR_PRETTY_FLOWERS, +}; + +void sub_810993C(void) +{ + u8 i, j; + u8 buffer[12]; + struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; + + for (i = 0; i < 3; i++) + { + for (j = i + 1; j < 4; j++) + { + if (trader->unk1[i] == 0) + { + u8 temp = trader->unk1[i]; + trader->unk1[i] = trader->unk1[j]; + trader->unk1[j] = temp; + StringCopy(buffer, trader->unk5[i]); + StringCopy(trader->unk5[i], trader->unk5[j]); + StringCopy(trader->unk5[j], buffer); + } + } + } +} + +void sub_81099CC(void) +{ + u8 i; + struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; + + trader->unk0 = 2; + trader->unk31 = 0; + + for (i = 0; i < 4; i++) + { + StringCopy(trader->unk5[i], gUnknown_083F62D8[i]); + trader->unk1[i] = gTraderDecorations[i]; + } + + sub_810993C(); +} + +void sub_8109A20(void) +{ + struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; + trader->unk31 = 0; +} + +void sub_8109A30(u8 value) +{ + VarSet(VAR_RECYCLE_GOODS, value); +} + +void sub_8109A48(u8 taskId) +{ + u8 i; + u8 numChoices = 1; + u8 numDecorations = 0; + struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; + + for (i = 0; i < 4; i++) + { + if (trader->unk1[i]) + { + numChoices++; + } + } + + MenuDrawTextWindow(0, 1, 12, numChoices * 2 + 2); + + for (i = 0; i < 4; i++) + { + if (trader->unk1[i]) + { + if (trader->unk1[i] > DECOR_REGISTEEL_DOLL) + { + MenuPrint(gOtherText_FiveQuestionsAndSlash, 1, numDecorations * 2 + 2); + } + else + { + MenuPrint(gDecorations[trader->unk1[i]].name, 1, numDecorations * 2 + 2); + } + + numDecorations++; + } + } + + MenuPrint(gOtherText_CancelNoTerminator, 1, numDecorations * 2 + 2); + InitMenu(0, 1, 2, numChoices, 0, 11); + gTasks[taskId].data[1] = numDecorations; +} + +void sub_8109B34(u8 taskId, u8 decorationId) +{ + if (decorationId > DECOR_REGISTEEL_DOLL) + { + gSpecialVar_0x8004 = 0xFFFF; + } + else + { + gSpecialVar_0x8004 = decorationId; + } + + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 1, 12, 12); + DestroyTask(taskId); + EnableBothScriptContexts(); +} + +void sub_8109B7C(u8 taskId) +{ + struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; + + if (gMain.newKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + } + else if (gMain.newKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + MoveMenuCursor(1); + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gSpecialVar_0x8005 = GetMenuCursorPos(); + if (gTasks[taskId].data[1] == gSpecialVar_0x8005) + { + sub_8109B34(taskId, 0); + } + else + { + StringCopy(gStringVar1, trader->unk5[gSpecialVar_0x8005]); + sub_8109B34(taskId, trader->unk1[gSpecialVar_0x8005]); + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_8109B34(taskId, 0); + } +} + +void sub_8109C44(void) +{ + struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; + gScriptResult = trader->unk31; +} + +void sub_8109C58(void) +{ + u8 i; + + for (i = 0; i < 8; i++) + { + if (sub_8134194(i)) + { + gScriptResult = FALSE; + return; + } + } + gScriptResult = TRUE; +} + +void sub_8109C90(void) +{ + gScriptResult = FALSE; + if (gDecorations[gSpecialVar_0x8004].category != gDecorations[gSpecialVar_0x8006].category + && sub_8133F9C(gDecorations[gSpecialVar_0x8004].category) == -1) + { + sub_80FE7D4(gStringVar2, gDecorations[gSpecialVar_0x8004].category); + gScriptResult = TRUE; + } +} + +void sub_8109CF0(void) +{ + CreateTask(sub_80FE7A8, 0); +} + +void sub_8109D04(u8 taskId) +{ + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + DestroyVerticalScrollIndicator(0); + DestroyVerticalScrollIndicator(1); + sub_80F9520(gUnknown_020388F7, 8); + BuyMenuFreeMemory(); + if (sub_80FEFA4() == TRUE) + { + gSpecialVar_0x8006 = gUnknown_020388D0[gUnknown_020388F5]; + StringCopy(gStringVar3, gDecorations[gSpecialVar_0x8004].name); + StringCopy(gStringVar2, gDecorations[gSpecialVar_0x8006].name); + } + else + { + gSpecialVar_0x8006 = 0xFFFF; + } + DestroyTask(taskId); + EnableBothScriptContexts(); +} + +void sub_8109DAC(u8 taskId) +{ + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + gSpecialVar_0x8006 = 0; + DestroyTask(taskId); + EnableBothScriptContexts(); +} + +void sub_8109DE0(void) +{ + struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; + + sub_81340A8(gSpecialVar_0x8006); + IsThereStorageSpaceForDecoration(gSpecialVar_0x8004); + StringCopy(trader->unk5[gSpecialVar_0x8005], gSaveBlock2.playerName); + trader->unk1[gSpecialVar_0x8005] = gSpecialVar_0x8006; + sub_810993C(); + trader->unk31 = 1; +} + +void sub_8109E34(void) +{ + u8 taskId = CreateTask(sub_8109B7C, 0); + sub_8109A48(taskId); +} diff --git a/src/field/trainer_see.c b/src/field/trainer_see.c new file mode 100644 index 000000000..feb35c67c --- /dev/null +++ b/src/field/trainer_see.c @@ -0,0 +1,455 @@ +#include "global.h" +#include "trainer_see.h" +#include "battle_setup.h" +#include "field_effect.h" +#include "field_map_obj.h" +#include "field_player_avatar.h" +#include "script.h" +#include "sprite.h" +#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 *); + +extern struct SpriteTemplate gSpriteTemplate_839B510; +extern struct SpriteTemplate gSpriteTemplate_839B528; + +bool8 CheckTrainers(void) +{ + u8 i; + + for (i = 0; i < 16; i++) + { + if ( gMapObjects[i].active ) + if ( gMapObjects[i].trainerType == 1 || gMapObjects[i].trainerType == 3 ) + if ( CheckTrainer(i) ) + return TRUE; + } + return FALSE; +} + +bool8 CheckTrainer(u8 trainer) +{ + u8 *scriptPtr = GetFieldObjectScriptPointerByFieldObjectId(trainer); + + if (GetTrainerFlagFromScriptPointer(scriptPtr)) + return FALSE; + else + { + struct MapObject *trainerObj = &gMapObjects[trainer]; + u8 canApproach = TrainerCanApproachPlayer(trainerObj); + + if (canApproach != 0) + { + TrainerWantsBattle(trainer, scriptPtr); + sub_80842C8(trainerObj, (canApproach - 1)); + return TRUE; + } + else + { + return FALSE; + } + } +} + +bool8 TrainerCanApproachPlayer(struct MapObject *trainerObj) +{ + s16 x, y; + u8 i; + u8 playerCoord; + + PlayerGetDestCoords(&x, &y); + if ( trainerObj->trainerType == 1 ) // trainers that don't spin + { + playerCoord = gIsTrainerInRange[trainerObj->mapobj_unk_18 - 1](trainerObj, trainerObj->trainerRange_berryTreeId, x, y); + return CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, playerCoord, trainerObj->mapobj_unk_18); + } + else // spinners + { + 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; + } + return FALSE; + } +} + +bool8 IsTrainerInRangeSouth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) +{ + if ( trainerObj->coords2.x == x + && y > trainerObj->coords2.y + && y <= trainerObj->coords2.y + vision ) + return (y - trainerObj->coords2.y); + else + return FALSE; +} + +bool8 IsTrainerInRangeNorth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) +{ + if ( trainerObj->coords2.x == x + && y < trainerObj->coords2.y + && y >= trainerObj->coords2.y - vision ) + return (trainerObj->coords2.y - y); + else + return FALSE; +} + +bool8 IsTrainerInRangeWest(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) +{ + if ( trainerObj->coords2.y == y + && x < trainerObj->coords2.x + && x >= trainerObj->coords2.x - vision ) + return (trainerObj->coords2.x - x); + else + return FALSE; +} + +bool8 IsTrainerInRangeEast(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) +{ + if ( trainerObj->coords2.y == y + && x > trainerObj->coords2.x + && x <= trainerObj->coords2.x + vision ) + return (x - trainerObj->coords2.x); + else + return FALSE; +} + +#ifdef BUGFIX_TRAINERAPPROACH +#define COLLISION_MASK ~1 +#else +#define COLLISION_MASK 1 +#endif + +bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *trainerObj, u8 playerCoord, u8 direction) +{ + s16 x, y; + u8 unk19_temp; + u8 unk19b_temp; + u8 i; + u8 var; + + if (!playerCoord) + return FALSE; + + x = trainerObj->coords2.x; + y = trainerObj->coords2.y; + + for (i = 0; i <= playerCoord - 1; i++, MoveCoords(direction, &x, &y)) + { + var = sub_8060024((struct MapObject *)trainerObj, x, y, direction); + + if (var && (var & COLLISION_MASK)) + return FALSE; + } + + // preserve mapobj_unk_19 before clearing. + unk19_temp = trainerObj->mapobj_unk_19; + unk19b_temp = trainerObj->mapobj_unk_19b; + trainerObj->mapobj_unk_19 = 0; + trainerObj->mapobj_unk_19b = 0; + + var = 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; + + return FALSE; +} + +void sub_80842C8(struct MapObject *trainerObj, u8 taskId) +{ + struct Task *task = &gTasks[CreateTask(RunTrainerSeeFuncList, 0x50)]; + + task->data[1] = (u32)(trainerObj) >> 16; + task->data[2] = (u32)(trainerObj); + task->data[3] = taskId; +} + +void sub_80842FC(TaskFunc func) +{ + TaskFunc func2 = RunTrainerSeeFuncList; + u8 taskId = FindTaskIdByFunc(func2); + + SetTaskFuncWithFollowupFunc(taskId, RunTrainerSeeFuncList, func); + gTasks[taskId].data[0] = 1; + func2(taskId); +} + +void RunTrainerSeeFuncList(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + struct MapObject *trainerObj = (struct MapObject *)((task->data[1] << 16) | (task->data[2])); + + if (!trainerObj->active) + SwitchTaskToFollowupFunc(taskId); + else + while (gTrainerSeeFuncList[task->data[0]](taskId, task, trainerObj)); +} + +u8 sub_8084394() // cant be void because it is called with RunTrainerSeeFuncList with arguments. +{ + return 0; +} + +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]); + FieldEffectStart(0); + + direction = GetFaceDirectionAnimId(trainerObj->mapobj_unk_18); + + FieldObjectSetSpecialAnim(trainerObj, direction); + task->data[0]++; + return 1; +} + +s8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + if (FieldEffectActiveListContains(0)) + return 0; + else + { + task->data[0]++; + if ((u8)(trainerObj->animPattern - 57) <= 1) + task->data[0] = 6; + if (trainerObj->animPattern == 63) + task->data[0] = 8; + return 1; + } +} + +s8 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]++; + } + } + return 0; +} + +s8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + struct MapObject *playerObj; + + if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) && !FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) + return 0; + + 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; + + sub_80597E8(); + FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], GetFaceDirectionAnimId(GetOppositeDirection(trainerObj->mapobj_unk_18))); + task->data[0]++; + return 0; +} + +s8 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; +} + +s8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) + || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) + { + FieldObjectSetSpecialAnim(trainerObj, 0x59); + task->data[0]++; + } + return 0; +} + +s8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + if ( FieldObjectClearAnimIfSpecialAnimFinished(trainerObj) ) + task->data[0] = 3; + + return 0; +} + +s8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) + || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) + { + FieldObjectSetSpecialAnim(trainerObj, 0x3E); + task->data[0]++; + } + return 0; +} + +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; + task->data[4] = FieldEffectStart(49); + task->data[0]++; + } + return 0; +} + +s8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + struct Sprite *sprite; + + if (gSprites[task->data[4]].animCmdIndex == 2) + { + trainerObj->mapobj_bit_26 = 0; + trainerObj->mapobj_bit_2 = 1; + + sprite = &gSprites[trainerObj->spriteId]; + sprite->oam.priority = 2; + FieldObjectClearAnimIfSpecialAnimFinished(trainerObj); + FieldObjectSetSpecialAnim(trainerObj, sub_806084C(trainerObj->mapobj_unk_18)); + task->data[0]++; + } + return 0; +} + +s8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + if (!FieldEffectActiveListContains(49)) + task->data[0] = 3; + + return 0; +} + +void sub_80846E4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + struct MapObject *mapObj; + + // another mapObj loaded into by loadword? + LoadWordFromTwoHalfwords(&task->data[1], (u32 *)&mapObj); + if (!task->data[7]) + { + FieldObjectClearAnim(mapObj); + task->data[7]++; + } + gTrainerSeeFuncList2[task->data[0]](taskId, task, mapObj); + if (task->data[0] == 3 && !FieldEffectActiveListContains(49)) + { + npc_set_running_behaviour_etc(mapObj, npc_running_behaviour_by_direction(mapObj->mapobj_unk_18)); + sub_805C774(mapObj, npc_running_behaviour_by_direction(mapObj->mapobj_unk_18)); + DestroyTask(taskId); + } + else + mapObj->mapobj_bit_7 = 0; +} + +void sub_8084794(struct MapObject *var) +{ + StoreWordInTwoHalfwords(&gTasks[CreateTask(sub_80846E4, 0)].data[1], (u32)var); +} + +void sub_80847C8(void) +{ + sub_80842FC(sub_80847D8); +} + +void sub_80847D8(u8 taskId) +{ + DestroyTask(taskId); + EnableBothScriptContexts(); +} + +u8 FldEff_ExclamationMarkIcon1(void) +{ + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B510, 0, 0, 0x53); + + if (spriteId != 64) + sub_8084894(&gSprites[spriteId], 0, 0); + + return 0; +} + +u8 FldEff_ExclamationMarkIcon2(void) +{ + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B510, 0, 0, 0x52); + + if (spriteId != 64) + sub_8084894(&gSprites[spriteId], 33, 1); + + return 0; +} + +u8 FldEff_HeartIcon(void) +{ + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B528, 0, 0, 0x52); + + if (spriteId != 64) + sub_8084894(&gSprites[spriteId], 46, 0); + + return 0; +} + +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->data3 = -5; + sprite->data7 = a2; + + StartSpriteAnim(sprite, a3); +} + +void objc_exclamation_mark_probably(struct Sprite *sprite) +{ + u8 mapObjId; + + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjId) + || sprite->animEnded) + { + FieldEffectStop(sprite, (u8)sprite->data7); + } + else + { + struct Sprite *mapObjSprite = &gSprites[gMapObjects[mapObjId].spriteId]; + sprite->data4 += sprite->data3; + sprite->pos1.x = mapObjSprite->pos1.x; + sprite->pos1.y = mapObjSprite->pos1.y - 16; + sprite->pos2.x = mapObjSprite->pos2.x; + sprite->pos2.y = mapObjSprite->pos2.y + sprite->data4; + if (sprite->data4) + sprite->data3++; + else + sprite->data3 = 0; + } +} diff --git a/src/field/tv.c b/src/field/tv.c new file mode 100644 index 000000000..a254bcd5f --- /dev/null +++ b/src/field/tv.c @@ -0,0 +1,3260 @@ +#include "global.h" +#include "tv.h" +#include "battle_tower.h" +#include "contest_painting.h" +#include "data2.h" +#include "easy_chat.h" +#include "event_data.h" +#include "fieldmap.h" +#include "field_message_box.h" +#include "field_camera.h" +#include "flags.h" +#include "rng.h" +#include "string_util.h" +#include "text.h" +#include "species.h" +#include "pokedex.h" +#include "naming_screen.h" +#include "rom4.h" +#include "map_constants.h" +#include "strings.h" +#include "battle.h" +#include "link.h" +#include "easy_chat.h" +#include "field_map_obj.h" +#include "field_specials.h" +#include "item.h" +#include "items.h" +#include "link.h" +#include "map_constants.h" +#include "naming_screen.h" +#include "pokedex.h" +#include "region_map.h" +#include "rng.h" +#include "rom4.h" +#include "rtc.h" +#include "script_menu.h" +#include "species.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" + +struct UnkTvStruct +{ + s8 var0; +}; + +extern u8 gUnknown_0300430A[11]; + +struct OutbreakPokemon +{ + /*0x00*/ u16 species; + /*0x02*/ u16 moves[4]; + /*0x0A*/ u8 level; + /*0x0B*/ u8 location; +}; + +struct TVSaleItem { + u16 item_id; + u16 item_amount; +}; + +extern u8 gUnknown_02038694; + +extern struct TVSaleItem gUnknown_02038724[3]; + +struct UnkTvStruct gUnknown_03005D38; + +extern u8 *gTVBravoTrainerTextGroup[]; +extern u8 *gTVBravoTrainerBattleTowerTextGroup[]; +extern u8 *gTVSmartShopperTextGroup[]; +extern u8 *gTVNameRaterTextGroup[]; +extern u8 *gTVPokemonTodayTextGroup[]; +extern u8 *gTVPokemonTodayFailedCaptureTextGroup[]; +extern u8 *gTVFanClubTextGroup[]; +extern u8 *gTVRecentHappeningsTextGroup[]; +extern u8 *gTVFanClubOpinionsTextGroup[]; +extern u8 *gTVPokemonOutbreakTextGroup[]; +extern u8 *gTVGabbyAndTyTextGroup[]; +extern u8 *gTVFishingGuruAdviceTextGroup[]; +extern u8 *gTVWorldOfMastersTextGroup[]; +extern struct OutbreakPokemon gPokeOutbreakSpeciesList[5]; + + + +extern const u8 *gTVNewsTextGroup1[]; +extern const u8 *gTVNewsTextGroup2[]; +extern const u8 *gTVNewsTextGroup3[]; + +extern u16 gScriptLastTalked; + +extern u8 gScriptContestCategory; +extern u8 gScriptContestRank; +extern u8 gUnknown_03004316[11]; +extern u8 gBattleOutcome; + +extern u16 gLastUsedItem; + +extern u8 ewram[]; +#define gUnknown_02007000 (*(ewramStruct_02007000 *)(ewram + 0x7000)) + +static EWRAM_DATA u16 gUnknown_020387E0 = 0; +static EWRAM_DATA u16 gUnknown_020387E2 = 0; +static EWRAM_DATA u8 gUnknown_020387E4 = 0; +static EWRAM_DATA ALIGNED(4) u8 gUnknown_020387E8 = 0; // why is this aligned to a 4-byte boundary? + +static u8 gUnknown_03000720; +static u8 gUnknown_03000721; +static s8 gUnknown_03000722; + +void ClearTVShowData(void) +{ + u8 showidx; + u8 extradataidx; + for (showidx=0; showidx<25; showidx++) { + gSaveBlock1.tvShows[showidx].common.var00 = 0; + gSaveBlock1.tvShows[showidx].common.var01 = 0; + for (extradataidx=0; extradataidx<34; extradataidx++) { + gSaveBlock1.tvShows[showidx].common.pad02[extradataidx] = 0; + } + } + sub_80BEBF4(); +} + +bool8 sub_80BF1B4(u8); +void sub_80BF20C(void); +extern u16 sub_8135D3C(u8); +extern u8 gScriptContestCategory; +extern u8 gScriptContestRank; +extern u8 gUnknown_03004316[11]; +extern u8 gBattleOutcome; + +void sub_80BF334(void); +void sub_80BF3A4(void); +void sub_80BF3DC(void); +void sub_80BF46C(void); +void sub_80BF478(void); +void sub_80BF484(void); +void sub_80BF4BC(void); + +void sub_80BE028(void); +void sub_80BE074(void); +void sub_80BE778(void); +void sub_80BEB20(void); + +u8 sub_80BFB54(u8); + +s8 sub_80BF74C(TVShow tvShow[]); + +void sub_80BF55C(TVShow tvShow[], u8 showidx); +void sub_80BEA88(void); + +void sub_80BE138(TVShow *show); +void sub_80BE160(TVShow *show); +extern u16 gLastUsedItem; + +void sub_80BE5FC(void); +void sub_80BE65C(void); +void sub_80BE6A0(void); +void nullsub_21(void); +void sub_80BE188(void); +void sub_80BE320(void); + +u8 special_0x44(void) +{ + u8 i; + u8 j; + +#ifndef NONMATCHING + asm("":::"r5"); +#endif + + for (i = 5; i < 24; i++) + { + if (gSaveBlock1.tvShows[i].common.var00 == 0) + break; + } + i = Random() % i; + j = i; + do + { + if (sub_80BFB54(gSaveBlock1.tvShows[i].common.var00) != 4) + { + if (gSaveBlock1.tvShows[i].common.var01 == 1) + return i; + } + else + { + struct TVShowMassOutbreak *massOutbreak = &gSaveBlock1.tvShows[i].massOutbreak; + + if (massOutbreak->var16 == 0 && massOutbreak->var01 == 1) + return i; + } + + if (i == 0) + i = 23; + else + i--; + } while (i != j); + return 0xFF; +} + +u8 sub_80BDA30(void); + +u8 sub_80BD8B8(void) +{ + u8 retval = special_0x44(); + + if (retval == 0xff) + return 0xff; + if (gSaveBlock1.outbreakPokemonSpecies != 0 && gSaveBlock1.tvShows[retval].common.var00 == TVSHOW_MASS_OUTBREAK) + return sub_80BDA30(); + return retval; +} + +u8 CheckForBigMovieOrEmergencyNewsOnTV(void); +void SetTVMetatilesOnMap(int, int, u16); +bool8 sub_80BECA0(void); +bool8 IsTVShowInSearchOfTrainersAiring(void); + +void UpdateTVScreensOnMap(int width, int height) +{ + FlagSet(SYS_TV_WATCH); + switch (CheckForBigMovieOrEmergencyNewsOnTV()) + { + case 1: + SetTVMetatilesOnMap(width, height, 0x3); + break; + case 2: + break; + default: + if (gSaveBlock1.location.mapGroup == MAP_GROUP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F + && gSaveBlock1.location.mapNum == MAP_ID_LILYCOVE_CITY_COVE_LILY_MOTEL_1F) + { + SetTVMetatilesOnMap(width, height, 0x3); + } + else if (FlagGet(SYS_TV_START) && (sub_80BD8B8() != 0xff || sub_80BECA0() != 0xff || IsTVShowInSearchOfTrainersAiring())) + { + FlagReset(SYS_TV_WATCH); + SetTVMetatilesOnMap(width, height, 0x3); + } + break; + } +} + +void SetTVMetatilesOnMap(int width, int height, u16 tileId) +{ + int x; + int y; + + for (y=0; ycommon.var00 == TVSHOW_MASS_OUTBREAK && gSaveBlock1.outbreakPokemonSpecies) + return sub_80BDA30(); + return gSpecialVar_0x8004; +} + +void ResetGabbyAndTy(void) +{ + gSaveBlock1.gabbyAndTyData.mon1 = 0; + gSaveBlock1.gabbyAndTyData.mon2 = 0; + gSaveBlock1.gabbyAndTyData.lastMove = 0; + gSaveBlock1.gabbyAndTyData.quote = 0xffff; + gSaveBlock1.gabbyAndTyData.valA_0 = 0; + gSaveBlock1.gabbyAndTyData.valA_1 = 0; + gSaveBlock1.gabbyAndTyData.valA_2 = 0; + gSaveBlock1.gabbyAndTyData.valA_3 = 0; + gSaveBlock1.gabbyAndTyData.valA_4 = 0; + gSaveBlock1.gabbyAndTyData.valA_5 = 0; + gSaveBlock1.gabbyAndTyData.valB_0 = 0; + gSaveBlock1.gabbyAndTyData.valB_1 = 0; + gSaveBlock1.gabbyAndTyData.valB_2 = 0; + gSaveBlock1.gabbyAndTyData.valB_3 = 0; + gSaveBlock1.gabbyAndTyData.valB_4 = 0; + gSaveBlock1.gabbyAndTyData.valB_5 = 0; + gSaveBlock1.gabbyAndTyData.mapnum = 0; + gSaveBlock1.gabbyAndTyData.battleNum = 0; +} + +void TakeTVShowInSearchOfTrainersOffTheAir(void); + +void GabbyAndTyBeforeInterview(void) +{ + u8 i; + + gSaveBlock1.gabbyAndTyData.mon1 = gBattleResults.poke1Species; + gSaveBlock1.gabbyAndTyData.mon2 = gBattleResults.opponentSpecies; + gSaveBlock1.gabbyAndTyData.lastMove = gBattleResults.lastUsedMove; + if (gSaveBlock1.gabbyAndTyData.battleNum != 0xff) + gSaveBlock1.gabbyAndTyData.battleNum ++; + gSaveBlock1.gabbyAndTyData.valA_0 = gBattleResults.unk5_0; + + if (gBattleResults.playerFaintCounter) + gSaveBlock1.gabbyAndTyData.valA_1 = 1; + else + gSaveBlock1.gabbyAndTyData.valA_1 = 0; + + if (gBattleResults.unk3) + gSaveBlock1.gabbyAndTyData.valA_2 = 1; + else + gSaveBlock1.gabbyAndTyData.valA_2 = 0; + + if (!gBattleResults.unk5_1) + { + for (i=0; i<11; i++) + { + if (gBattleResults.unk36[i] != 0) + { + gSaveBlock1.gabbyAndTyData.valA_3 = 1; + break; + } + } + } + else + { + gSaveBlock1.gabbyAndTyData.valA_3 = 1; + } + + TakeTVShowInSearchOfTrainersOffTheAir(); + if (gSaveBlock1.gabbyAndTyData.lastMove == 0) + FlagSet(1); +} + +void sub_80BDC14(void) +{ + gSaveBlock1.gabbyAndTyData.valB_0 = gSaveBlock1.gabbyAndTyData.valA_0; + gSaveBlock1.gabbyAndTyData.valB_1 = gSaveBlock1.gabbyAndTyData.valA_1; + gSaveBlock1.gabbyAndTyData.valB_2 = gSaveBlock1.gabbyAndTyData.valA_2; + gSaveBlock1.gabbyAndTyData.valB_3 = gSaveBlock1.gabbyAndTyData.valA_3; + gSaveBlock1.gabbyAndTyData.valA_4 = 1; + gSaveBlock1.gabbyAndTyData.mapnum = gMapHeader.regionMapSectionId; + IncrementGameStat(GAME_STAT_GOT_INTERVIEWED); +} + +void TakeTVShowInSearchOfTrainersOffTheAir(void) +{ + gSaveBlock1.gabbyAndTyData.valA_4 = 0; +} + +u8 GabbyAndTyGetBattleNum(void) +{ + if (gSaveBlock1.gabbyAndTyData.battleNum >= 6) + return (gSaveBlock1.gabbyAndTyData.battleNum % 3) + 6; + else + return gSaveBlock1.gabbyAndTyData.battleNum; +} + +bool8 IsTVShowInSearchOfTrainersAiring(void) +{ + return gSaveBlock1.gabbyAndTyData.valA_4; +} + +bool8 GabbyAndTyGetLastQuote(void) +{ + if (gSaveBlock1.gabbyAndTyData.quote == 0xffff) + return FALSE; + + sub_80EB3FC(gStringVar1, gSaveBlock1.gabbyAndTyData.quote); + gSaveBlock1.gabbyAndTyData.quote |= 0xffff; + return TRUE; +} + +u8 sub_80BDD18(void) +{ + if (!gSaveBlock1.gabbyAndTyData.valB_0) + return 1; + if (gSaveBlock1.gabbyAndTyData.valB_3) + return 2; + if (gSaveBlock1.gabbyAndTyData.valB_2) + return 3; + if (gSaveBlock1.gabbyAndTyData.valB_1) + return 4; + return 0; +} + +void GabbyAndTySetScriptVarsToFieldObjectLocalIds(void) +{ + switch (GabbyAndTyGetBattleNum()) + { + case 1: + gSpecialVar_0x8004 = 0xE; + gSpecialVar_0x8005 = 0xD; + break; + case 2: + gSpecialVar_0x8004 = 0x5; + gSpecialVar_0x8005 = 0x6; + break; + case 3: + gSpecialVar_0x8004 = 0x12; + gSpecialVar_0x8005 = 0x11; + break; + case 4: + gSpecialVar_0x8004 = 0x15; + gSpecialVar_0x8005 = 0x16; + break; + case 5: + gSpecialVar_0x8004 = 0x8; + gSpecialVar_0x8005 = 0x9; + break; + case 6: + gSpecialVar_0x8004 = 0x13; + gSpecialVar_0x8005 = 0x14; + break; + case 7: + gSpecialVar_0x8004 = 0x17; + gSpecialVar_0x8005 = 0x18; + break; + case 8: + gSpecialVar_0x8004 = 0xA; + gSpecialVar_0x8005 = 0xB; + break; + } +} + +void sub_80BDE48(void) +{ + switch (gSpecialVar_0x8005) + { + case TVSHOW_FAN_CLUB_LETTER: + sub_80BE5FC(); + break; + case TVSHOW_RECENT_HAPPENINGS: + sub_80BE65C(); + break; + case TVSHOW_PKMN_FAN_CLUB_OPINIONS: + sub_80BE6A0(); + break; + case TVSHOW_UNKN_SHOWTYPE_04: + nullsub_21(); + break; + case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: + sub_80BE188(); + break; + case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: + sub_80BE320(); + break; + } +} + +u8 sub_80BDEAC(u8 *a0) +{ + u8 lang = GAME_LANGUAGE; + + if (a0[0] == EXT_CTRL_CODE_BEGIN && a0[1] == 0x15) + lang = LANGUAGE_JAPANESE; + return lang; +} + +void sub_80BDEC8(void) +{ + u8 i; + u16 total; + u16 item; + + total = 0; + sub_80BEB20(); + sub_80BE778(); + + if (gBattleResults.caughtPoke == 0) + { + sub_80BE074(); + } + else + { + sub_80BE028(); + if (sub_80BF77C(0xffff) == 0 && StringCompareWithoutExtCtrlCodes(gSpeciesNames[gBattleResults.caughtPoke], gBattleResults.caughtNick) != 0) + { + gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows); + if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_POKEMON_TODAY_CAUGHT) != 1) + { + for (i = 0; i < 11; i++) + total += gBattleResults.unk36[i]; + if (total != 0 || gBattleResults.unk5_1 != 0) + { + struct TVShowPokemonToday *pokemonToday; + + total = 0; + pokemonToday = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].pokemonToday; + pokemonToday->var00 = TVSHOW_POKEMON_TODAY_CAUGHT; + pokemonToday->var01 = total; + if (gBattleResults.unk5_1 != 0) + { + total = 1; + item = ITEM_MASTER_BALL; + } + else + { + for (i = 0; i < 11; i++) + total += gBattleResults.unk36[i]; + if (total > 0xff) + total = 0xff; + item = gLastUsedItem; + } + pokemonToday->var12 = total; + pokemonToday->ball = item; + StringCopy(pokemonToday->playerName, gSaveBlock2.playerName); + StringCopy(pokemonToday->nickname, gBattleResults.caughtNick); + pokemonToday->species = gBattleResults.caughtPoke; + sub_80BE138((TVShow *)pokemonToday); + pokemonToday->language = GAME_LANGUAGE; + pokemonToday->language2 = sub_80BDEAC(pokemonToday->nickname); + StripExtCtrlCodes(pokemonToday->nickname); + } + } + } + } +} + +void sub_80BE028(void) +{ + struct TVShowWorldOfMasters *worldOfMasters = &gSaveBlock1.tvShows[24].worldOfMasters; + + if (worldOfMasters->var00 != TVSHOW_WORLD_OF_MASTERS) + { + sub_80BF55C(gSaveBlock1.tvShows, 24); + worldOfMasters->var06 = GetGameStat(GAME_STAT_STEPS); + worldOfMasters->var00 = TVSHOW_WORLD_OF_MASTERS; + } + worldOfMasters->var02++; + worldOfMasters->var04 = gBattleResults.caughtPoke; + worldOfMasters->var08 = gBattleResults.poke1Species; + worldOfMasters->var0a = gMapHeader.regionMapSectionId; +} + +void sub_80BE074(void) +{ + u8 i; + u16 total; + u8 zero = 0; + + if (sub_80BF77C(0xffff) == 0) + { + for (i = 0, total = 0; i < ARRAY_COUNT(gUnknown_03004316); i++) + total += gUnknown_03004316[i]; + if (total > 0xff) + total = 0xff; + if (total > 2 && gBattleOutcome == 1) + { + gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows); + if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_POKEMON_TODAY_FAILED) != 1) + { + struct TVShowPokemonTodayFailed *pokemonTodayFailed = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].pokemonTodayFailed; + + zero = 0; + pokemonTodayFailed->var00 = TVSHOW_POKEMON_TODAY_FAILED; + pokemonTodayFailed->var01 = zero; + pokemonTodayFailed->species = gBattleResults.poke1Species; + pokemonTodayFailed->species2 = gBattleResults.lastOpponentSpecies; + pokemonTodayFailed->var10 = total; + pokemonTodayFailed->var11 = gBattleOutcome; + pokemonTodayFailed->var12 = gMapHeader.regionMapSectionId; + StringCopy(pokemonTodayFailed->playerName, gSaveBlock2.playerName); + sub_80BE138((TVShow *)pokemonTodayFailed); + pokemonTodayFailed->language = GAME_LANGUAGE; + } + } + } +} + + +void sub_80BE138(TVShow *show) +{ + u32 playerId = GetPlayerTrainerId(); + + show->common.srcTrainerId2Lo = playerId & 0xFF; + show->common.srcTrainerId2Hi = playerId >> 8; + show->common.srcTrainerIdLo = playerId & 0xFF; + show->common.srcTrainerIdHi = playerId >> 8; + show->common.trainerIdLo = playerId & 0xFF; + show->common.trainerIdHi = playerId >> 8; +} + +void sub_80BE160(TVShow *show) +{ + u32 playerId = GetPlayerTrainerId(); + + show->common.srcTrainerIdLo = playerId & 0xFF; + show->common.srcTrainerIdHi = playerId >> 8; + show->common.trainerIdLo = playerId & 0xFF; + show->common.trainerIdHi = playerId >> 8; +} + +void sub_80BE188(void) +{ + struct TVShowBravoTrainerPokemonProfiles *bravoTrainerSrc = &gSaveBlock1.tvShows[24].bravoTrainer; + + if (bravoTrainerSrc->var00 == TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE) + { + struct TVShowBravoTrainerPokemonProfiles *bravoTrainerNew = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainer; + + bravoTrainerNew->var00 = TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE; + bravoTrainerNew->var01 = 1; + bravoTrainerNew->species = bravoTrainerSrc->species; + StringCopy(bravoTrainerNew->playerName, gSaveBlock2.playerName); + StringCopy(bravoTrainerNew->pokemonNickname, bravoTrainerSrc->pokemonNickname); + bravoTrainerNew->contestCategory = bravoTrainerSrc->contestCategory; + bravoTrainerNew->contestRank = bravoTrainerSrc->contestRank; + bravoTrainerNew->var14 = bravoTrainerSrc->var14; + bravoTrainerNew->contestResult = bravoTrainerSrc->contestResult; + bravoTrainerNew->contestCategory = bravoTrainerSrc->contestCategory; + sub_80BE160((TVShow *)bravoTrainerNew); + bravoTrainerNew->language = GAME_LANGUAGE; + bravoTrainerNew->var1f = sub_80BDEAC(bravoTrainerNew->pokemonNickname); + StripExtCtrlCodes(bravoTrainerNew->pokemonNickname); + } +} + +void sub_80BE23C(u16 a0) +{ + struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[24].bravoTrainer; + + sub_80BF484(); + gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows); + if (gUnknown_03005D38.var0 != -1) + { + sub_80BF55C(gSaveBlock1.tvShows, 24); + bravoTrainer->var14 = a0; + bravoTrainer->var00 = TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE; + } +} + +void sub_80BE284(u8 a0) +{ + struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[24].bravoTrainer; + + gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows); + if (gUnknown_03005D38.var0 != -1) + { + bravoTrainer->contestResult = a0; + bravoTrainer->contestCategory = gScriptContestCategory; + bravoTrainer->contestRank = gScriptContestRank; + bravoTrainer->species = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_SPECIES, NULL); + GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_NICKNAME, bravoTrainer->pokemonNickname); + } +} + +void sub_80BE320(void) +{ + struct TVShowBravoTrainerBattleTowerSpotlight *bravoTrainerTower = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainerTower; + + bravoTrainerTower->var00 = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE; + bravoTrainerTower->var01 = 1; + StringCopy(bravoTrainerTower->trainerName, gSaveBlock2.playerName); + StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.filler_A8.filler_3DC); + bravoTrainerTower->species = gSaveBlock2.filler_A8.var_480; + bravoTrainerTower->defeatedSpecies = gSaveBlock2.filler_A8.var_482; + bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.filler_A8.var_4D0); + bravoTrainerTower->var1c = gSaveBlock2.filler_A8.var_4AD; + if (gSaveBlock2.filler_A8.var_4D0 == 0) + bravoTrainerTower->btLevel = 50; + else + bravoTrainerTower->btLevel = 100; + bravoTrainerTower->var1b = gSpecialVar_0x8004; + sub_80BE160((TVShow *)bravoTrainerTower); + bravoTrainerTower->language = GAME_LANGUAGE; +} + +void sub_80BE3BC(void) +{ + u8 rval; + u8 i; + + rval = sub_80BF77C(0x5555); + if (rval == 0) + { + gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows); + if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_SMART_SHOPPER) != 1) + { + sub_80BF20C(); + if (gUnknown_02038724[0].item_amount >= 20) + { + struct TVShowSmartShopper *smartShopper = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].smartshopperShow; + + smartShopper->var00 = TVSHOW_SMART_SHOPPER; + smartShopper->var01 = rval; + smartShopper->shopLocation = gMapHeader.regionMapSectionId; + for (i=0; i<3; i++) + { + smartShopper->itemIds[i] = gUnknown_02038724[i].item_id; + smartShopper->itemAmounts[i] = gUnknown_02038724[i].item_amount; + } + smartShopper->priceReduced = GetPriceReduction(1); + StringCopy(smartShopper->playerName, gSaveBlock2.playerName); + sub_80BE138((TVShow *)smartShopper); + smartShopper->language = GAME_LANGUAGE; + } + } + } +} + +void sub_80BE478(void) +{ + sub_80BF478(); + if (gScriptResult == 1) + return; + + GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar1); + if (StringLength(gSaveBlock2.playerName) > 1 && StringLength(gStringVar1) > 1) + { + struct TVShowNameRaterShow *nameRaterShow = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].nameRaterShow; + + nameRaterShow->var00 = TVSHOW_NAME_RATER_SHOW; + nameRaterShow->var01 = 1; + nameRaterShow->species = GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES, NULL); + nameRaterShow->random = Random() % 3; + nameRaterShow->random2 = Random() % 2; + nameRaterShow->var1C = sub_80BF674(nameRaterShow->species); + StringCopy(nameRaterShow->trainerName, gSaveBlock2.playerName); + GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, nameRaterShow->pokemonName); + sub_80BE160((TVShow *)nameRaterShow); + nameRaterShow->language = GAME_LANGUAGE; + nameRaterShow->pokemonNameLanguage = sub_80BDEAC(nameRaterShow->pokemonName); + StripExtCtrlCodes(nameRaterShow->pokemonName); + } +} + +void StartMassOutbreak(void) +{ + struct TVShowMassOutbreak *massOutbreak = &gSaveBlock1.tvShows[gSpecialVar_0x8004].massOutbreak; + + gSaveBlock1.outbreakPokemonSpecies = massOutbreak->species; + gSaveBlock1.outbreakLocationMapNum = massOutbreak->locationMapNum; + gSaveBlock1.outbreakLocationMapGroup = massOutbreak->locationMapGroup; + gSaveBlock1.outbreakPokemonLevel = massOutbreak->level; + gSaveBlock1.outbreakUnk1 = massOutbreak->var02; + gSaveBlock1.outbreakUnk2 = massOutbreak->var0E; + gSaveBlock1.outbreakPokemonMoves[0] = massOutbreak->moves[0]; + gSaveBlock1.outbreakPokemonMoves[1] = massOutbreak->moves[1]; + gSaveBlock1.outbreakPokemonMoves[2] = massOutbreak->moves[2]; + gSaveBlock1.outbreakPokemonMoves[3] = massOutbreak->moves[3]; + gSaveBlock1.outbreakUnk4 = massOutbreak->var03; + gSaveBlock1.outbreakPokemonProbability = massOutbreak->probability; + gSaveBlock1.outbreakUnk5 = 2; +} + +void sub_80BE5FC(void) +{ + struct TVShowFanClubLetter *fanclubLetter = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].fanclubLetter; + + fanclubLetter->var00 = TVSHOW_FAN_CLUB_LETTER; + fanclubLetter->var01 = 1; + StringCopy(fanclubLetter->playerName, gSaveBlock2.playerName); + fanclubLetter->species = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL); + sub_80BE160((TVShow *)fanclubLetter); + fanclubLetter->language = GAME_LANGUAGE; +} + +void sub_80BE65C(void) +{ + struct TVShowRecentHappenings *recentHappenings = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].recentHappenings; + + recentHappenings->var00 = TVSHOW_RECENT_HAPPENINGS; + recentHappenings->var01 = 1; + StringCopy(recentHappenings->playerName, gSaveBlock2.playerName); + recentHappenings->var02 = 0; + sub_80BE160((TVShow *)recentHappenings); + recentHappenings->language = GAME_LANGUAGE; +} + +void sub_80BE6A0(void) +{ + u8 monIndex; + struct TVShowFanclubOpinions *fanclubOpinions = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].fanclubOpinions; + + fanclubOpinions->var00 = TVSHOW_PKMN_FAN_CLUB_OPINIONS; + fanclubOpinions->var01 = 1; + monIndex = GetLeadMonIndex(); + fanclubOpinions->var04A = GetMonData(&gPlayerParty[monIndex], MON_DATA_FRIENDSHIP, NULL) / 16; + fanclubOpinions->var04B = gSpecialVar_0x8007; + StringCopy(fanclubOpinions->playerName, gSaveBlock2.playerName); + GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_NICKNAME, fanclubOpinions->var10); + fanclubOpinions->var02 = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL); + sub_80BE160((TVShow *)fanclubOpinions); + fanclubOpinions->language = GAME_LANGUAGE; + fanclubOpinions->var0E = sub_80BDEAC(fanclubOpinions->var10); + StripExtCtrlCodes(fanclubOpinions->var10); +} + +void nullsub_21(void) +{ +} + +void sub_80BE778(void) +{ + if (FlagGet(SYS_GAME_CLEAR)) + { + u8 i; + + for (i = 0; i < 24; i++) + { + if (gSaveBlock1.tvShows[i].massOutbreak.var00 == TVSHOW_MASS_OUTBREAK) + return; + } + if (sub_80BF77C(0x147)) + return; + + gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows); + if (gUnknown_03005D38.var0 != -1) + { + u16 rand = Random(); + u16 val = rand % 5; + s32 val2 = gUnknown_03005D38.var0; + struct TVShowMassOutbreak *massOutbreak = &gSaveBlock1.tvShows[val2].massOutbreak; + + massOutbreak->var00 = TVSHOW_MASS_OUTBREAK; + massOutbreak->var01 = 1; + massOutbreak->level = gPokeOutbreakSpeciesList[val].level; + massOutbreak->var02 = 0; + massOutbreak->var03 = 0; + massOutbreak->species = gPokeOutbreakSpeciesList[val].species; + massOutbreak->var0E = 0; + massOutbreak->moves[0] = gPokeOutbreakSpeciesList[val].moves[0]; + massOutbreak->moves[1] = gPokeOutbreakSpeciesList[val].moves[1]; + massOutbreak->moves[2] = gPokeOutbreakSpeciesList[val].moves[2]; + massOutbreak->moves[3] = gPokeOutbreakSpeciesList[val].moves[3]; + massOutbreak->locationMapNum = gPokeOutbreakSpeciesList[val].location; + massOutbreak->locationMapGroup = 0; + massOutbreak->var12 = 0; + massOutbreak->probability = 0x32; + massOutbreak->var15 = 0; + massOutbreak->var16 = 0x01; + sub_80BE160((TVShow *)massOutbreak); + massOutbreak->language = GAME_LANGUAGE; + } + } +} + +void EndMassOutbreak(void) +{ + gSaveBlock1.outbreakPokemonSpecies = 0; + gSaveBlock1.outbreakLocationMapNum = 0; + gSaveBlock1.outbreakLocationMapGroup = 0; + gSaveBlock1.outbreakPokemonLevel = 0; + gSaveBlock1.outbreakUnk1 = 0; + gSaveBlock1.outbreakUnk2 = 0; + gSaveBlock1.outbreakPokemonMoves[0] = 0; + gSaveBlock1.outbreakPokemonMoves[1] = 0; + gSaveBlock1.outbreakPokemonMoves[2] = 0; + gSaveBlock1.outbreakPokemonMoves[3] = 0; + gSaveBlock1.outbreakUnk4 = 0; + gSaveBlock1.outbreakPokemonProbability = 0; + gSaveBlock1.outbreakUnk5 = 0; +} + +void UpdateTVShowsPerDay(u16 arg0) +{ + sub_80BE8EC(arg0); + UpdateMassOutbreakTimeLeft(arg0); + sub_80BEE84(arg0); + sub_80BEA5C(arg0); +} + +void sub_80BE8EC(u16 arg0) +{ + u8 showidx; + + if (gSaveBlock1.outbreakPokemonSpecies == 0) + { + for (showidx=0; showidx<24; showidx++) + { + if (gSaveBlock1.tvShows[showidx].massOutbreak.var00 == TVSHOW_MASS_OUTBREAK + && gSaveBlock1.tvShows[showidx].massOutbreak.var01 == 0x01) + { + struct TVShowMassOutbreak *massOutbreak = &gSaveBlock1.tvShows[showidx].massOutbreak; + + if (massOutbreak->var16 < arg0) + massOutbreak->var16 = 0; + else + massOutbreak->var16 -= arg0; + break; + } + } + } +} + +void UpdateMassOutbreakTimeLeft(u16 arg0) +{ + if (gSaveBlock1.outbreakUnk5 <= arg0) + EndMassOutbreak(); + else + gSaveBlock1.outbreakUnk5 -= arg0; +} + +void sub_80BE97C(bool8 flag) +{ + u8 var0, var1; + + if (flag) + { + var0 = gUnknown_020387E2 >> 8; + if (var0 > 4) + sub_80BE9D4(); + gUnknown_020387E2 &= 0xFF; + var1 = gUnknown_020387E2 & 0xFF; + if (var1 != 0xFF) + gUnknown_020387E2++; + } + else + { + var0 = gUnknown_020387E2 & 0xFF; + if (var0 > 4) + sub_80BE9D4(); + gUnknown_020387E2 &= 0xFF00; + var1 = gUnknown_020387E2 >> 8; + if (var1 != 0xFF) + gUnknown_020387E2 += 0x100; + } +} + +void sub_80BE9D4(void) +{ + //TVShow *show; + gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows); + if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_FISHING_ADVICE) != 1) + { + struct TVShowPokemonAngler *pokemonAngler = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].pokemonAngler; + register u8 zero asm("r1") = 0; + + asm(""::"r"(zero)); + pokemonAngler->var00 = TVSHOW_FISHING_ADVICE; + pokemonAngler->var01 = zero; + pokemonAngler->var02 = gUnknown_020387E2 & 0xFF; + pokemonAngler->var03 = gUnknown_020387E2 >> 8; + pokemonAngler->var04 = gUnknown_020387E0; + StringCopy(pokemonAngler->playerName, gSaveBlock2.playerName); + sub_80BE138((TVShow *)pokemonAngler); + pokemonAngler->language = GAME_LANGUAGE; + } +} + +void sub_80BEA50(u16 var) +{ + gUnknown_020387E0 = var; +} + +void sub_80BEA88(void); + +void sub_80BEA5C(u16 arg0) +{ + struct TVShowWorldOfMasters *worldOfMasters = &gSaveBlock1.tvShows[24].worldOfMasters; + + if (worldOfMasters->var00 == TVSHOW_WORLD_OF_MASTERS) + { + if (worldOfMasters->var02 < 20) + sub_80BF55C(gSaveBlock1.tvShows, 0x18); + else + sub_80BEA88(); + } +} +void sub_80BEA88(void) +{ + struct TVShowWorldOfMasters *worldOfMastersSrc = &gSaveBlock1.tvShows[24].worldOfMasters; + + if (sub_80BF77C(0xFFFF) == 0) + { + gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows); + if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_WORLD_OF_MASTERS) != 1) + { + struct TVShowWorldOfMasters *worldOfMastersDst = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].worldOfMasters; + + worldOfMastersDst->var00 = TVSHOW_WORLD_OF_MASTERS; + worldOfMastersDst->var01 = 0; + worldOfMastersDst->var02 = worldOfMastersSrc->var02; + worldOfMastersDst->var06 = GetGameStat(GAME_STAT_STEPS) - worldOfMastersSrc->var06; + worldOfMastersDst->var04 = worldOfMastersSrc->var04; + worldOfMastersDst->var08 = worldOfMastersSrc->var08; + worldOfMastersDst->var0a = worldOfMastersSrc->var0a; + StringCopy(worldOfMastersDst->playerName, gSaveBlock2.playerName); + sub_80BE138((TVShow *)worldOfMastersDst); + worldOfMastersDst->language = GAME_LANGUAGE; + } + } +} + +void sub_80BEB20(void) +{ + u16 rval; + + if (FlagGet(SYS_GAME_CLEAR) != 0) + { + gUnknown_03005D38.var0 = sub_80BEBC8(gSaveBlock1.unknown_2ABC); + if (gUnknown_03005D38.var0 != -1 && sub_80BF77C(0x28f) != 1) + { + rval = (Random() % 3) + 1; + if (sub_80BEE48(rval) != 1) + { + gSaveBlock1.unknown_2ABC[gUnknown_03005D38.var0].val0 = rval; + gSaveBlock1.unknown_2ABC[gUnknown_03005D38.var0].val2 = 4; + gSaveBlock1.unknown_2ABC[gUnknown_03005D38.var0].val1 = 1; + } + } + } +} + +int sub_80BEBC8(struct UnknownSaveStruct2ABC *arg0) +{ + s8 i; + + for (i = 0; i < 16; i++) + { + if (arg0[i].val0 == 0) + return i; + } + return -1; +} + +void sub_80BEBF4(void) +{ + u8 i; + + for (i = 0; i < 16; i++) + sub_80BEC10(i); +} + +void sub_80BEC10(u8 arg0) +{ + gSaveBlock1.unknown_2ABC[arg0].val0 = 0; + gSaveBlock1.unknown_2ABC[arg0].val1 = 0; + gSaveBlock1.unknown_2ABC[arg0].val2 = 0; +} + +void sub_80BEC40(void) +{ + u8 i, j; + + for (i = 0; i < 15; i++) + { + if (gSaveBlock1.unknown_2ABC[i].val0 == 0) + { + for (j = i + 1; j < 16; j++) + { + if (gSaveBlock1.unknown_2ABC[j].val0 != 0) + { + gSaveBlock1.unknown_2ABC[i] = gSaveBlock1.unknown_2ABC[j]; + sub_80BEC10(j); + break; + } + } + } + } +} + +u8 sub_80BECA0(void) +{ + u8 i; + for (i = 0; i < 16; i++) + { + if (gSaveBlock1.unknown_2ABC[i].val0 != 0 + && gSaveBlock1.unknown_2ABC[i].val1 == 1 + && gSaveBlock1.unknown_2ABC[i].val2 < 3) + return i; + } + return 0xFF; +} + +void sub_80BECE8(void) +{ + u8 arg0; + arg0 = sub_80BECA0(); + if (arg0 == 0xff) + { + gScriptResult = 0; + return; + } + if (gSaveBlock1.unknown_2ABC[arg0].val2 == 0) + { + gSaveBlock1.unknown_2ABC[arg0].val1 = 2; + if (gLocalTime.hours < 20) + ShowFieldMessage(gTVNewsTextGroup2[gSaveBlock1.unknown_2ABC[arg0].val0]); + else + ShowFieldMessage(gTVNewsTextGroup3[gSaveBlock1.unknown_2ABC[arg0].val0]); + } + else + { + u16 value = gSaveBlock1.unknown_2ABC[arg0].val2; + + ConvertIntToDecimalStringN(gStringVar1, value, 0, 1); + gSaveBlock1.unknown_2ABC[arg0].val1 = 0; + ShowFieldMessage(gTVNewsTextGroup1[gSaveBlock1.unknown_2ABC[arg0].val0]); + } + gScriptResult = 1; +} + +bool8 GetPriceReduction(u8 arg0) +{ + u8 i; + + if (arg0 == 0) + return FALSE; + for (i=0; i<16; i++) + { + if (gSaveBlock1.unknown_2ABC[i].val0 == arg0) + { + if (gSaveBlock1.unknown_2ABC[i].val1 == 2 && IsPriceDiscounted(arg0) != 0) + return TRUE; + else + return FALSE; + } + } + return FALSE; +} + +bool8 IsPriceDiscounted(u8 arg0) +{ + switch (arg0) + { + case 1: + if (gSaveBlock1.location.mapGroup == MAP_GROUP_SLATEPORT_CITY + && gSaveBlock1.location.mapNum == MAP_ID_SLATEPORT_CITY + && gScriptLastTalked == 0x1a) + return TRUE; + else + return FALSE; + break; + case 3: + if (gSaveBlock1.location.mapGroup == MAP_GROUP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP + && gSaveBlock1.location.mapNum == MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP) + return TRUE; + else + return FALSE; + break; + default: + return TRUE; + } +} + +bool8 sub_80BEE48(u8 arg0) +{ + u8 i; + + if (arg0 == 0) + return TRUE; + for (i=0; i<16; i++) + { + if (gSaveBlock1.unknown_2ABC[i].val0 == arg0) + return TRUE; + } + return FALSE; +} + +void sub_80BEE84(u16 var0) +{ + u8 i; + + for (i=0; i<16; i++) + { + if (gSaveBlock1.unknown_2ABC[i].val0) + { + if (gSaveBlock1.unknown_2ABC[i].val2 < var0) + { + sub_80BEC10(i); + } + else + { + if (!gSaveBlock1.unknown_2ABC[i].val1 && FlagGet(SYS_GAME_CLEAR) == 1) + gSaveBlock1.unknown_2ABC[i].val1 = 1; + gSaveBlock1.unknown_2ABC[i].val2 -= var0; + } + } + } + sub_80BEC40(); +} + +void sub_80BEF10(u8 strvaridx, u8 rank) +{ + switch (rank) + { + case NORMAL_RANK: + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[NORMAL_RANK + 5]); + break; + case SUPER_RANK: + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[SUPER_RANK + 5]); + break; + case HYPER_RANK: + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[HYPER_RANK + 5]); + break; + case MASTER_RANK: + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[MASTER_RANK + 5]); + break; + } +} + +void CopyContestCategoryToStringVar(u8 strvaridx, u8 category) +{ + switch (category) + { + case CONTEST_COOL: + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_COOL]); + break; + case CONTEST_BEAUTY: + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_BEAUTY]); + break; + case CONTEST_CUTE: + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_CUTE]); + break; + case CONTEST_SMART: + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_SMART]); + break; + case CONTEST_TOUGH: + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_TOUGH]); + break; + } +} + +void SetContestCategoryStringVarForInterview(void) +{ + struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[gSpecialVar_0x8004].bravoTrainer; + + CopyContestCategoryToStringVar(1, bravoTrainer->contestCategory); +} + +void sub_80BF088(u8 arg0, s32 price) +{ + size_t log10val = sub_80BF0B8(price); + + ConvertIntToDecimalStringN(gUnknown_083D1464[arg0], price, 0, log10val); +} + +size_t sub_80BF0B8(int value) +{ + if (value / 10 == 0) + return 1; + else if (value / 100 == 0) + return 2; + else if (value / 1000 == 0) + return 3; + else if (value / 10000 == 0) + return 4; + else if (value / 100000 == 0) + return 5; + else if (value / 1000000 == 0) + return 6; + else if (value / 10000000 == 0) + return 7; + else if (value / 100000000 == 0) + return 8; + else + return 1; +} + +void sub_80BF154(u8 arg0, struct TVShowSmartShopper *arg1) +{ + u8 i; + s32 price; + price = 0; + + for (i = 0; i < 3; i++) + { + if (arg1->itemIds[i]) + price += ItemId_GetPrice(arg1->itemIds[i]) * arg1->itemAmounts[i]; + } + if (arg1->priceReduced == 1) + sub_80BF088(arg0, price >> 1); + else + sub_80BF088(arg0, price); +} + +bool8 sub_80BF1B4(u8 showIdx) +{ + u8 i; + //TVShow *tvShows; + TVShow *tvShows = gSaveBlock1.tvShows; + u32 trainerId = GetPlayerTrainerId(); + + for (i = 5; i < 24; i++) + { + if (tvShows[i].common.var00 == showIdx) + { + if ((trainerId & 0xFF) == tvShows[i].common.trainerIdLo && ((trainerId >> 8) & 0xFF) == tvShows[i].common.trainerIdHi) + return TRUE; + } + } + return FALSE; +} + +void sub_80BF20C(void) +{ + u8 i, j; + u16 tmpId, tmpAmount; + + for (i = 0; i < 2; i++) + { + for (j = i + 1; j < 3; j++) + { + if (gUnknown_02038724[i].item_amount < gUnknown_02038724[j].item_amount) + { + tmpId = gUnknown_02038724[i].item_id; + tmpAmount = gUnknown_02038724[i].item_amount; + gUnknown_02038724[i].item_id = gUnknown_02038724[j].item_id; + gUnknown_02038724[i].item_amount = gUnknown_02038724[j].item_amount; + gUnknown_02038724[j].item_id = tmpId; + gUnknown_02038724[j].item_amount = tmpAmount; + } + } + } +} + +void sub_80BF25C(u8 showType) +{ + u8 i; + + for (i = 0; i < 5; i++) + { + if (gSaveBlock1.tvShows[i].common.var00 == showType) + { + if(gSaveBlock1.tvShows[i].common.var01 == 1) + { + gScriptResult = 1; + } + else + { + sub_80BF55C(gSaveBlock1.tvShows, i); + sub_80BF588(gSaveBlock1.tvShows); + sub_80BF6D8(); + } + return; + } + } + sub_80BF6D8(); +} + +void sub_80BF2C4(void) +{ + gScriptResult = 0; + switch (gSpecialVar_0x8005) + { + case TVSHOW_FAN_CLUB_LETTER: + sub_80BF334(); + break; + case TVSHOW_RECENT_HAPPENINGS: + sub_80BF3A4(); + break; + case TVSHOW_PKMN_FAN_CLUB_OPINIONS: + sub_80BF3DC(); + break; + case TVSHOW_UNKN_SHOWTYPE_04: + sub_80BF46C(); + break; + case TVSHOW_NAME_RATER_SHOW: + sub_80BF478(); + break; + case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: + sub_80BF484(); + break; + case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: + sub_80BF4BC(); + break; + } +} + +void sub_80BF334(void) +{ + struct TVShowFanClubLetter *fanclubLetter; + + sub_80BF25C(TVSHOW_FAN_CLUB_LETTER); + if (gScriptResult == 0) + { + StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, 0)]); + fanclubLetter = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].fanclubLetter; + sub_80EB6FC(fanclubLetter->pad04, 6); + } +} + +void sub_80BF3A4(void) +{ + struct TVShowRecentHappenings *recentHappenings; + + sub_80BF25C(TVSHOW_RECENT_HAPPENINGS); + if (gScriptResult == 0) + { + recentHappenings = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].recentHappenings; + sub_80EB6FC(recentHappenings->var04, 6); + } +} + +void sub_80BF3DC(void) +{ + struct TVShowFanclubOpinions *fanclubOpinions; + + sub_80BF25C(TVSHOW_PKMN_FAN_CLUB_OPINIONS); + if (gScriptResult == 0) + { + StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, 0)]); + GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_NICKNAME, gStringVar2); + StringGetEnd10(gStringVar2); + fanclubOpinions = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].fanclubOpinions; + sub_80EB6FC(fanclubOpinions->var1C, 2); + } +} + +void sub_80BF46C(void) +{ + gScriptResult = 1; +} + +void sub_80BF478(void) +{ + sub_80BF25C(TVSHOW_NAME_RATER_SHOW); +} + +void sub_80BF484(void) +{ + struct TVShowBravoTrainerPokemonProfiles *bravoTrainer; + + sub_80BF25C(TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE); + if (gScriptResult == 0) + { + bravoTrainer = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainer; + sub_80EB6FC(bravoTrainer->var04, 2); + } +} + +void sub_80BF4BC(void) +{ + struct TVShowBravoTrainerBattleTowerSpotlight *bravoTrainerTower; + + sub_80BF25C(TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE); + if (gScriptResult == 0) + { + bravoTrainerTower = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainerTower; + sub_80EB6FC(bravoTrainerTower->var18, 1); // wrong struct ident, fix later + } +} + +#if ENGLISH +u8 sub_80BF4F4(u8 arg0) +{ + u32 species; + + GetMonData(&gPlayerParty[arg0], MON_DATA_NICKNAME, &gStringVar1); + species = GetMonData(&gPlayerParty[arg0], MON_DATA_SPECIES, NULL); + if (StringCompareWithoutExtCtrlCodes(gSpeciesNames[species], gStringVar1) == FALSE) + return FALSE; + + return TRUE; +} +#elif GERMAN +u8 sub_80BF4F4(u8 arg0) +{ + u8 langData[4]; + u32 species; + u8 *tmp; + + GetMonData(&gPlayerParty[arg0], MON_DATA_NICKNAME, &gStringVar1); + + tmp = langData; + tmp[0] = GetMonData(&gPlayerParty[arg0], MON_DATA_LANGUAGE, &langData); + if (tmp[0] != GAME_LANGUAGE) + return TRUE; + + species = GetMonData(&gPlayerParty[arg0], MON_DATA_SPECIES, NULL); + if (StringCompareWithoutExtCtrlCodes(gSpeciesNames[species], gStringVar1)) + return TRUE; + + return FALSE; +} +#endif + +u8 sub_80BF544(void) +{ + return sub_80BF4F4(GetLeadMonIndex()); +} + +void sub_80BF55C(TVShow tvShow[], u8 showidx) +{ + u8 idx; + + tvShow[showidx].common.var00 = 0; + tvShow[showidx].common.var01 = 0; + for (idx = 0; idx < 34; idx++) + tvShow[showidx].common.pad02[idx] = 0; +} + +void sub_80BF588(TVShow tvShow[]) +{ + u8 showidx; + u8 showidx2; + + for (showidx = 0; showidx < 4; showidx++) + { + if (tvShow[showidx].common.var00 == 0) + { + for (showidx2 = showidx + 1; showidx2 < 5; showidx2++) + { + if (tvShow[showidx2].common.var00 != 0) + { + tvShow[showidx] = tvShow[showidx2]; + sub_80BF55C(tvShow, showidx2); + break; + } + } + } + } + for (showidx = 5; showidx < 24; showidx++) + { + if (tvShow[showidx].common.var00 == 0) + { + for (showidx2 = showidx + 1; showidx2 < 24; showidx2++) + { + if (tvShow[showidx2].common.var00 != 0) + { + tvShow[showidx] = tvShow[showidx2]; + sub_80BF55C(gSaveBlock1.tvShows, showidx2); + break; + } + } + } + } +} + +u16 sub_80BF638(u8 arg0, u16 arg1) +{ + u16 retval = sub_80BF674(arg1); + + StringCopy(gUnknown_083D1464[arg0], gSpeciesNames[retval]); + return retval; +} + +u16 sub_80BF674(u16 species) +{ + u16 rspecies; + u16 cspecies; + + rspecies = (Random() % (NUM_SPECIES - 1)) + 1; + cspecies = rspecies; + while (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(cspecies), 0) != 1 || cspecies == species) + { + if (cspecies == SPECIES_BULBASAUR) + cspecies = NUM_SPECIES - 1; + else + cspecies --; + if (cspecies == rspecies) + { + cspecies = species; + return cspecies; + } + } + return cspecies; +} + +void sub_80BF6D8(void) +{ + gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows); + gSpecialVar_0x8006 = gUnknown_03005D38.var0; + if (gUnknown_03005D38.var0 == -1) + gScriptResult = 1; + else + gScriptResult = 0; +} + +s8 sub_80BF720(TVShow tvShow[]) +{ + u8 idx; + + for (idx = 0; idx < 5; idx++) + { + if (tvShow[idx].common.var00 == 0) + return idx; + } + return -1; +} + +s8 sub_80BF74C(TVShow tvShow[]) +{ + s8 idx; + + for (idx = 5; idx < 24; idx++) + { + if (tvShow[idx].common.var00 == 0) + return idx; + } + return -1; +} + +bool8 sub_80BF77C(u16 value) +{ + if (Random() <= value) + return FALSE; + return TRUE; +} + +void sub_80BF79C(TVShow *arg0) +{ + u8 i = Random() % 6; + + while (1) + { + if (i == 6) + i = 0; + if (arg0->recentHappenings.var04[i] != 0xFFFF) + break; + i++; + } + sub_80EB3FC(gStringVar3, arg0->recentHappenings.var04[i]); +} + +u8 sub_80BF7E8(struct TVShowNameRaterShow *arg0) +{ + u16 flagsum = 0; + u8 i = 0; + + if (arg0->pokemonName[0] != 0xFF) + { + while (i < 11 && arg0->pokemonName[i] != 0xFF) + { + flagsum += arg0->pokemonName[i]; + i++; + } + } + return flagsum & 0x7; +} + + +void sub_80BF820(u8 arg0, u8 arg1, u8 arg2, u16 arg3, u16 arg4, struct TVShowNameRaterShow *tvShow) +{ + u8 flags[3]; + u16 nameLength; + u8 i; + + for (i = 0; i < 3; i++) + flags[i] = EOS; + + if (arg3 == 0) + { + nameLength = StringLength(tvShow->trainerName); + if (arg2 == 0) + { + flags[0] = tvShow->trainerName[arg1]; + } + else if (arg2 == 1) + { + flags[0] = tvShow->trainerName[nameLength - arg1]; + } + else if (arg2 == 2) { + flags[0] = tvShow->trainerName[arg1]; + flags[1] = tvShow->trainerName[arg1 + 1]; + } + else + { + flags[0] = tvShow->trainerName[nameLength - (arg1 + 2)]; + flags[1] = tvShow->trainerName[nameLength - (arg1 + 1)]; + } + } + else if (arg3 == 1) + { + nameLength = StringLength(tvShow->pokemonName); + if (arg2 == 0) + { + flags[0] = tvShow->pokemonName[arg1]; + } + else if (arg2 == 1) + { + flags[0] = tvShow->pokemonName[nameLength - arg1]; + } + else if (arg2 == 2) + { + flags[0] = tvShow->pokemonName[arg1]; + flags[1] = tvShow->pokemonName[arg1 + 1]; + } + else + { + flags[0] = tvShow->pokemonName[nameLength - (arg1 + 2)]; + flags[1] = tvShow->pokemonName[nameLength - (arg1 + 1)]; + } + } + else + { + nameLength = StringLength(gSpeciesNames[arg4]); + if (arg2 == 0) + { + flags[0] = gSpeciesNames[arg4][arg1]; + } + else if (arg2 == 1) + { + flags[0] = gSpeciesNames[arg4][nameLength - arg1]; + } + else if (arg2 == 2) + { + flags[0] = gSpeciesNames[arg4][arg1]; + flags[1] = gSpeciesNames[arg4][arg1 + 1]; + } + else + { + flags[0] = gSpeciesNames[arg4][nameLength - (arg1 + 2)]; + flags[1] = gSpeciesNames[arg4][nameLength - (arg1 + 1)]; + } + } + StringCopy(gUnknown_083D1464[arg0], flags); +} + +bool8 sub_80BF974(void) +{ + u8 i; + + for (i = 0; i < 5; i++) + { + if (gSaveBlock1.tvShows[i].common.var00 == gSpecialVar_0x8004) + return TRUE; + } + return FALSE; +} + +bool8 sub_80BF9B4(void) +{ + GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_NICKNAME, &gStringVar1); + if (!StringCompareWithoutExtCtrlCodes(gStringVar3, gStringVar1)) + return FALSE; + sub_80BE478(); + return TRUE; +} + +void c2_080CC144(void); + +void sub_80BF9F8(void) +{ + u16 spec; + u16 gender; + u32 pval; + + GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_NICKNAME, &gStringVar3); + GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_NICKNAME, &gStringVar2); + spec = GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_SPECIES, 0); + gender = GetMonGender(&(gPlayerParty[gSpecialVar_0x8004])); + pval = GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_PERSONALITY, 0); + DoNamingScreen(3, gStringVar2, spec, gender, pval, c2_080CC144); +} + +void c2_080CC144(void) +{ + SetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_NICKNAME, gStringVar2); + c2_exit_to_overworld_1_continue_scripts_restart_music(); +} + +void sub_80BFAE0(void) +{ + GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_NICKNAME, &gStringVar1); + StringGetEnd10(gStringVar1); +} + +void sub_80BFB10(void) +{ + if (GetPlayerTrainerId() == GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_OT_ID, 0)) + gScriptResult = 0; + else + gScriptResult = 1; +} + +u8 sub_80BFB54(u8 arg0) +{ + if (arg0 == 0) + return 0; + else if (arg0 > 0 && arg0 <= 20) + return 2; + else if (arg0 > 20 && arg0 <= 40) + return 3; + else if (arg0 > 40 && arg0 <= 60) + return 4; + else + return 0; +} + +u32 GetPlayerTrainerId(void) +{ + return (gSaveBlock2.playerTrainerId[3] << 24) | (gSaveBlock2.playerTrainerId[2] << 16) | (gSaveBlock2.playerTrainerId[1] << 8) | (gSaveBlock2.playerTrainerId[0]); +} + +u8 CheckForBigMovieOrEmergencyNewsOnTV(void) +{ + if (gSaveBlock1.location.mapGroup != MAP_GROUP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F) + return 0; + if (gSaveBlock2.playerGender == MALE) + { + if (gSaveBlock1.location.mapNum != MAP_ID_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F) + return 0; + } + else + { + if (gSaveBlock1.location.mapNum != MAP_ID_LITTLEROOT_TOWN_MAYS_HOUSE_1F) + return 0; + } + if (FlagGet(SYS_TV_LATI) == 1) + return 1; + if (FlagGet(SYS_TV_HOME) == 1) + return 2; + return 1; +} + +void GetMomOrDadStringForTVMessage(void) +{ + if (gSaveBlock1.location.mapGroup == MAP_GROUP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F) + { + if (gSaveBlock2.playerGender == MALE) + { + if (gSaveBlock1.location.mapNum == MAP_ID_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F) + { + StringCopy(gStringVar1, gOtherText_Mom); + VarSet(VAR_0x4003, 1); + } + } + else + { + if (gSaveBlock1.location.mapNum == MAP_ID_LITTLEROOT_TOWN_MAYS_HOUSE_1F) + { + StringCopy(gStringVar1, gOtherText_Mom); + VarSet(VAR_0x4003, 1); + } + } + } + if (VarGet(VAR_0x4003) == 1) + { + StringCopy(gStringVar1, gOtherText_Mom); + } + else if (VarGet(VAR_0x4003) == 2) + { + StringCopy(gStringVar1, gOtherText_Dad); + } + else if (VarGet(VAR_0x4003) > 2) + { + if (VarGet(VAR_0x4003) % 2 == 0) + StringCopy(gStringVar1, gOtherText_Mom); + else + StringCopy(gStringVar1, gOtherText_Dad); + } + else + { + if (Random() % 2 != 0) + { + StringCopy(gStringVar1, gOtherText_Mom); + VarSet(VAR_0x4003, 1); + } + else + { + StringCopy(gStringVar1, gOtherText_Dad); + VarSet(VAR_0x4003, 2); + } + } +} + +void sub_80BFD20(void) +{ + VarSet(VAR_0x40BC, 0); + RemoveFieldObjectByLocalIdAndMap(5, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); +} + +typedef union ewramStruct_02007000 +{ + TVShow tvshows[4][25]; + struct UnknownSaveStruct2ABC unknown_2abc[4][16]; +} ewramStruct_02007000; + +void sub_80BFE24(TVShow arg0[25], TVShow arg1[25], TVShow arg2[25], TVShow arg3[25]); + +void sub_80C04A0(void); +void sub_80C01D4(void); +void sub_80C0408(void); + +void sub_80BFD44(u8 *arg0, u32 arg1, u8 arg2) +{ + u8 i; + ewramStruct_02007000 *ewramTVShows; + + for (i = 0; i < 4; i++) + memcpy(&gUnknown_02007000.tvshows[i], &arg0[i * arg1], 25 * sizeof(TVShow)); + ewramTVShows = &gUnknown_02007000; + switch (arg2) + { + case 0: + sub_80BFE24(gSaveBlock1.tvShows, ewramTVShows->tvshows[1], ewramTVShows->tvshows[2], ewramTVShows->tvshows[3]); + break; + case 1: + sub_80BFE24(ewramTVShows->tvshows[0], gSaveBlock1.tvShows, ewramTVShows->tvshows[2], ewramTVShows->tvshows[3]); + break; + case 2: + sub_80BFE24(ewramTVShows->tvshows[0], ewramTVShows->tvshows[1], gSaveBlock1.tvShows, ewramTVShows->tvshows[3]); + break; + case 3: + sub_80BFE24(ewramTVShows->tvshows[0], ewramTVShows->tvshows[1], ewramTVShows->tvshows[2], gSaveBlock1.tvShows); + break; + } + sub_80BF588(gSaveBlock1.tvShows); + sub_80C04A0(); + sub_80BF588(gSaveBlock1.tvShows); + sub_80C01D4(); + sub_80C0408(); +} + +s8 sub_80C019C(TVShow tvShows[]); +bool8 sub_80BFF68(TVShow * tv1[25], TVShow * tv2[25], u8 idx); +u8 sub_80C004C(TVShow *tv1, TVShow *tv2, u8 idx); +u8 sub_80C00B4(TVShow *tv1, TVShow *tv2, u8 idx); +u8 sub_80C0134(TVShow *tv1, TVShow *tv2, u8 idx); + +void sub_80BFE24(TVShow arg0[25], TVShow arg1[25], TVShow arg2[25], TVShow arg3[25]) +{ + u8 i, j; + TVShow **argslist[4]; + + argslist[0] = &arg0; + argslist[1] = &arg1; + argslist[2] = &arg2; + argslist[3] = &arg3; + gUnknown_03000720 = GetLinkPlayerCount(); + while (1) + { + for (i=0; icommon.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.trainerIdHi) + return FALSE; + tv2->common.trainerIdLo = tv2->common.srcTrainerIdLo; + tv2->common.trainerIdHi = tv2->common.srcTrainerIdHi; + tv2->common.srcTrainerIdLo = linkTrainerId & 0xFF; + tv2->common.srcTrainerIdHi = linkTrainerId >> 8; + *tv1 = *tv2; + tv1->common.var01 = 1; + return TRUE; +} + +u8 sub_80C00B4(TVShow *tv1, TVShow *tv2, u8 idx) +{ + u32 linkTrainerId = GetLinkPlayerTrainerId(idx); + if ((linkTrainerId & 0xFF) == tv2->common.srcTrainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.srcTrainerIdHi) + return FALSE; + if ((linkTrainerId & 0xFF) == tv2->common.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.trainerIdHi) + return FALSE; + tv2->common.srcTrainerIdLo = tv2->common.srcTrainerId2Lo; + tv2->common.srcTrainerIdHi = tv2->common.srcTrainerId2Hi; + tv2->common.srcTrainerId2Lo = linkTrainerId & 0xFF; + tv2->common.srcTrainerId2Hi = linkTrainerId >> 8; + *tv1 = *tv2; + tv1->common.var01 = 1; + return TRUE; +} + +u8 sub_80C0134(TVShow *tv1, TVShow *tv2, u8 idx) +{ + u32 linkTrainerId = GetLinkPlayerTrainerId(idx); + if ((linkTrainerId & 0xFF) == tv2->common.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.trainerIdHi) + return FALSE; + tv2->common.trainerIdLo = tv2->common.srcTrainerIdLo; + tv2->common.trainerIdHi = tv2->common.srcTrainerIdHi; + tv2->common.srcTrainerIdLo = linkTrainerId & 0xFF; + tv2->common.srcTrainerIdHi = linkTrainerId >> 8; + *tv1 = *tv2; + tv1->common.var01 = 1; + tv1->common.var16[0] = 1; + return TRUE; +} + +s8 sub_80C019C(TVShow tvShows[]) +{ + u8 i; + for (i = 0; i < 24; i++) + { + if (tvShows[i].common.var01 == 0 && (u8)(tvShows[i].common.var00 - 1) < 60) + return i; + } + return -1; +} + +#ifdef NONMATCHING +void sub_80C01D4(void) +{ + u16 i; + for (i=0; i<24; i++) + { + switch (gSaveBlock1.tvShows[i].common.var00) + { + case 0: + case TVSHOW_RECENT_HAPPENINGS: + case TVSHOW_SMART_SHOPPER: + case TVSHOW_MASS_OUTBREAK: + break; + case TVSHOW_FAN_CLUB_LETTER: + sub_80C03C8((&gSaveBlock1.tvShows[i])->fanclubLetter.species, i); + break; + case TVSHOW_PKMN_FAN_CLUB_OPINIONS: + sub_80C03C8((&gSaveBlock1.tvShows[i])->fanclubOpinions.var02, i); + break; + case TVSHOW_UNKN_SHOWTYPE_04: + sub_80C03C8((&gSaveBlock1.tvShows[i])->unkShow04.var06, i); + break; + case TVSHOW_NAME_RATER_SHOW: + sub_80C03C8((&gSaveBlock1.tvShows[i])->nameRaterShow.species, i); + sub_80C03C8((&gSaveBlock1.tvShows[i])->nameRaterShow.var1C, i); + break; + case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: + sub_80C03C8((&gSaveBlock1.tvShows[i])->bravoTrainer.species, i); + break; + case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: + sub_80C03C8((&gSaveBlock1.tvShows[i])->bravoTrainerTower.species, i); + sub_80C03C8((&gSaveBlock1.tvShows[i])->bravoTrainerTower.defeatedSpecies, i); + break; + case TVSHOW_POKEMON_TODAY_CAUGHT: + sub_80C03C8((&gSaveBlock1.tvShows[i])->pokemonToday.species, i); + break; + case TVSHOW_POKEMON_TODAY_FAILED: + sub_80C03C8((&gSaveBlock1.tvShows[i])->pokemonTodayFailed.species, i); + sub_80C03C8((&gSaveBlock1.tvShows[i])->pokemonTodayFailed.species2, i); + break; + case TVSHOW_FISHING_ADVICE: + sub_80C03C8((&gSaveBlock1.tvShows[i])->pokemonAngler.var04, i); + break; + case TVSHOW_WORLD_OF_MASTERS: + sub_80C03C8((&gSaveBlock1.tvShows[i])->worldOfMasters.var08, i); + sub_80C03C8((&gSaveBlock1.tvShows[i])->worldOfMasters.var04, i); + break; + default: + sub_80C03A8(i); + } + } +} +#else +__attribute__((naked)) +void sub_80C01D4(void) { + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + movs r6, 0\n\ +_080C01D8:\n\ + ldr r0, _080C01F8 @ =gSaveBlock1\n\ + lsls r2, r6, 3\n\ + adds r1, r2, r6\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldr r0, _080C01FC @ =0x00002738\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x29\n\ + bls _080C01EE\n\ + b _default\n\ +_080C01EE:\n\ + lsls r0, 2\n\ + ldr r1, _080C0200 @ =_080C0204\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_080C01F8: .4byte gSaveBlock1\n\ +_080C01FC: .4byte 0x00002738\n\ +_080C0200: .4byte _080C0204\n\ + .align 2, 0\n\ +_080C0204:\n\ + .4byte _break\n\ + .4byte _fanclubLetter @ TVSHOW_FAN_CLUB_LETTER\n\ + .4byte _break @ TVSHOW_RECENT_HAPPENINGS\n\ + .4byte _fanclubOpinions @ TVSHOW_PKMN_FAN_CLUB_OPINIONS\n\ + .4byte _showtype4 @ TVSHOW_UNKN_SHOWTYPE_04\n\ + .4byte _nameRater @ TVSHOW_NAME_RATER_SHOW\n\ + .4byte _bravoTrainerContest @ TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE\n\ + .4byte _bravoTrainerTower @ TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _pokemonTodayS @ TVSHOW_POKEMON_TODAY_CAUGHT\n\ + .4byte _break @ TVSHOW_SMART_SHOPPER\n\ + .4byte _pokemonTodayF @ TVSHOW_POKEMON_TODAY_FAILED\n\ + .4byte _fishing @ TVSHOW_FISHING_ADVICE\n\ + .4byte _worldOfMasters @ TVSHOW_WORLD_OF_MASTERS\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _default\n\ + .4byte _break @ TVSHOW_MASS_OUTBREAK\n\ +_fanclubLetter:\n\ + adds r0, r2, r6\n\ + lsls r0, 2\n\ + ldr r1, _080C02B8 @ =gSaveBlock1 + 0x2738\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x2]\n\ + b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C02B8: .4byte gSaveBlock1 + 0x2738\n\ +_fanclubOpinions:\n\ + adds r0, r2, r6\n\ + lsls r0, 2\n\ + ldr r1, _080C02C8 @ =gSaveBlock1 + 0x2738\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x2]\n\ + b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C02C8: .4byte gSaveBlock1 + 0x2738\n\ +_showtype4:\n\ + adds r0, r2, r6\n\ + lsls r0, 2\n\ + ldr r1, _080C02D8 @ =gSaveBlock1 + 0x2738\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x6]\n\ + b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C02D8: .4byte gSaveBlock1 + 0x2738\n\ +_nameRater:\n\ + adds r4, r2, r6\n\ + lsls r4, 2\n\ + ldr r0, _080C02F4 @ =gSaveBlock1 + 0x2738\n\ + adds r4, r0\n\ + ldrh r0, [r4, 0x2]\n\ + lsls r5, r6, 24\n\ + lsrs r5, 24\n\ + adds r1, r5, 0\n\ + bl sub_80C03C8\n\ + ldrh r0, [r4, 0x1C]\n\ + b _checkSpecies2 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C02F4: .4byte gSaveBlock1 + 0x2738\n\ +_bravoTrainerContest:\n\ + adds r0, r2, r6\n\ + lsls r0, 2\n\ + ldr r1, _080C0304 @ =gSaveBlock1 + 0x2738\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x2]\n\ + b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C0304: .4byte gSaveBlock1 + 0x2738\n\ +_bravoTrainerTower:\n\ + adds r4, r2, r6\n\ + lsls r4, 2\n\ + ldr r0, _080C0320 @ =gSaveBlock1 + 0x2738\n\ + adds r4, r0\n\ + ldrh r0, [r4, 0xA]\n\ + lsls r5, r6, 24\n\ + lsrs r5, 24\n\ + adds r1, r5, 0\n\ + bl sub_80C03C8\n\ + ldrh r0, [r4, 0x14]\n\ + b _checkSpecies2 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C0320: .4byte gSaveBlock1 + 0x2738\n\ +_pokemonTodayS:\n\ + adds r0, r2, r6\n\ + lsls r0, 2\n\ + ldr r1, _080C0330 @ =gSaveBlock1 + 0x2738\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x10]\n\ + b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C0330: .4byte gSaveBlock1 + 0x2738\n\ +_pokemonTodayF:\n\ + adds r4, r2, r6\n\ + lsls r4, 2\n\ + ldr r0, _080C034C @ =gSaveBlock1 + 0x2738\n\ + adds r4, r0\n\ + ldrh r0, [r4, 0xC]\n\ + lsls r5, r6, 24\n\ + lsrs r5, 24\n\ + adds r1, r5, 0\n\ + bl sub_80C03C8\n\ + ldrh r0, [r4, 0xE]\n\ + b _checkSpecies2 @ sub_80C03C8(r0, i)\n\ + .align 2, 0\n\ +_080C034C: .4byte gSaveBlock1 + 0x2738\n\ +_fishing:\n\ + adds r0, r2, r6\n\ + lsls r0, 2\n\ + ldr r1, _080C0364 @ =gSaveBlock1 + 0x2738\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x4]\n\ +_checkSpecies1:\n\ + lsls r1, r6, 24\n\ + lsrs r1, 24\n\ + bl sub_80C03C8\n\ + b _break\n\ + .align 2, 0\n\ +_080C0364: .4byte gSaveBlock1 + 0x2738\n\ +_worldOfMasters:\n\ + adds r4, r2, r6\n\ + lsls r4, 2\n\ + ldr r0, _080C0388 @ =gSaveBlock1 + 0x2738\n\ + adds r4, r0\n\ + ldrh r0, [r4, 0x8]\n\ + lsls r5, r6, 24\n\ + lsrs r5, 24\n\ + adds r1, r5, 0\n\ + bl sub_80C03C8\n\ + ldrh r0, [r4, 0x4]\n\ +_checkSpecies2:\n\ + adds r1, r5, 0\n\ + bl sub_80C03C8\n\ + b _break\n\ + .align 2, 0\n\ +_080C0388: .4byte gSaveBlock1 + 0x2738\n\ +_default:\n\ + lsls r0, r6, 24\n\ + lsrs r0, 24\n\ + bl sub_80C03A8\n\ +_break:\n\ + adds r0, r6, 0x1\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + cmp r6, 0x17\n\ + bhi _080C03A0\n\ + b _080C01D8\n\ +_080C03A0:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ +.syntax divided\n"); +} +#endif + +void sub_80C03A8(u8 showidx) +{ + gSaveBlock1.tvShows[showidx].common.var01 = 0; +} + +void sub_80C03C8(u16 species, u8 showidx) +{ + if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(species), 0) == 0) + gSaveBlock1.tvShows[showidx].common.var01 = 0; +} + +void sub_80C0408(void) +{ + u16 i; + + if (FlagGet(SYS_GAME_CLEAR) == TRUE) + return; + for (i = 0; i < 24; i++) + { + if (gSaveBlock1.tvShows[i].common.var00 == TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE) + gSaveBlock1.tvShows[i].common.var01 = 0; + else if (gSaveBlock1.tvShows[i].common.var00 == TVSHOW_MASS_OUTBREAK) + gSaveBlock1.tvShows[i].common.var01 = 0; + } +} + +void sub_80C045C(void) +{ + u8 i; + + for (i = 0; i < 5; i++) + { + if (sub_80BFB54(gSaveBlock1.tvShows[i].common.var00) == 2) + gSaveBlock1.tvShows[i].common.var01 = 0; + } +} + +void sub_80C04A0(void) +{ + s8 showIdx; + s8 count; + count = 0; + + for (showIdx = 5; showIdx < 24; showIdx++) + { + if (gSaveBlock1.tvShows[showIdx].common.var00 == 0) + count++; + } + for (showIdx = 0; showIdx < 5 - count; showIdx++) + sub_80BF55C(gSaveBlock1.tvShows, showIdx+5); +} + +void sub_80C05C4(struct UnknownSaveStruct2ABC[16], struct UnknownSaveStruct2ABC[16], struct UnknownSaveStruct2ABC[16], struct UnknownSaveStruct2ABC[16]); +void sub_80C0750(void); +void sub_80C0788(void); +s8 sub_80C0730(struct UnknownSaveStruct2ABC[16], u8); +void sub_80C06BC(struct UnknownSaveStruct2ABC *[16], struct UnknownSaveStruct2ABC *[16]); + +void sub_80C0514(void *a0, u32 a1, u8 a2) +{ + ewramStruct_02007000 *struct02007000; + u8 i; + + for (i = 0; i < 4; i++) + memcpy(gUnknown_02007000.unknown_2abc[i], a0 + i * a1, 64); + struct02007000 = &gUnknown_02007000; + switch (a2) + { + case 0: + sub_80C05C4(gSaveBlock1.unknown_2ABC, struct02007000->unknown_2abc[1], struct02007000->unknown_2abc[2], struct02007000->unknown_2abc[3]); + break; + case 1: + sub_80C05C4(struct02007000->unknown_2abc[0], gSaveBlock1.unknown_2ABC, struct02007000->unknown_2abc[2], struct02007000->unknown_2abc[3]); + break; + case 2: + sub_80C05C4(struct02007000->unknown_2abc[0], struct02007000->unknown_2abc[1], gSaveBlock1.unknown_2ABC, struct02007000->unknown_2abc[3]); + break; + case 3: + sub_80C05C4(struct02007000->unknown_2abc[0], struct02007000->unknown_2abc[1], struct02007000->unknown_2abc[2], gSaveBlock1.unknown_2ABC); + break; + } + sub_80C0750(); + sub_80C0788(); +} + +void sub_80C05C4(struct UnknownSaveStruct2ABC a0[16], struct UnknownSaveStruct2ABC a1[16], struct UnknownSaveStruct2ABC a2[16], struct UnknownSaveStruct2ABC a3[16]) +{ + u8 i; + u8 j; + u8 k; + struct UnknownSaveStruct2ABC ** arglist[4]; + + arglist[0] = &a0; + arglist[1] = &a1; + arglist[2] = &a2; + arglist[3] = &a3; + gUnknown_03000721 = GetLinkPlayerCount(); + for (i = 0; i < 16; i++) + { + for (j = 0; j < gUnknown_03000721; j++) + { + gUnknown_03000722 = sub_80C0730(*arglist[j], i); + if (gUnknown_03000722 != -1) + { + for (k = 0; k < gUnknown_03000721-1; k++) + { + gUnknown_03005D38.var0 = sub_80BEBC8(*arglist[(j + k + 1) % gUnknown_03000721]); + if (gUnknown_03005D38.var0 != -1) + sub_80C06BC(arglist[(j + k + 1) % gUnknown_03000721], arglist[j]); + } + } + } + } +} + +void sub_80C06BC(struct UnknownSaveStruct2ABC *arg0[16], struct UnknownSaveStruct2ABC *arg1[16]) +{ + struct UnknownSaveStruct2ABC *str0; + struct UnknownSaveStruct2ABC *str1; + + str0 = arg0[0]; + str1 = arg1[0]; + str1 += gUnknown_03000722; + sub_80C06E8(str0, str1, gUnknown_03005D38.var0); +} + +bool8 sub_80C06E8(struct UnknownSaveStruct2ABC *arg0, struct UnknownSaveStruct2ABC *arg1, s8 arg2) +{ + u8 i; + + if (arg1->val0 == 0) + return FALSE; + for (i = 0; i < 16; i++) + { + if (arg0[i].val0 == arg1->val0) + return FALSE; + } + arg0[arg2].val0 = arg1->val0; + arg0[arg2].val1 = 1; + arg0[arg2].val2 = arg1->val2; + return TRUE; +} + +s8 sub_80C0730(struct UnknownSaveStruct2ABC *arg0, u8 arg1) +{ + if (arg0[arg1].val0 == 0) + return -1; + return arg1; +} + +void sub_80C0750(void) +{ + u8 i; + + for (i = 0; i < 16; i++) + { + if (gSaveBlock1.unknown_2ABC[i].val0 > 3) + sub_80BEC10(i); + } + sub_80BEC40(); +} + +void sub_80C0788(void) +{ + u8 i; + + if (FlagGet(SYS_GAME_CLEAR) != 1) + { + for (i = 0; i < 16; i++) + gSaveBlock1.unknown_2ABC[i].val1 = 0; + } +} + +void DoTVShow(void) +{ + if (gSaveBlock1.tvShows[gSpecialVar_0x8004].common.var01 != 0) + { + switch (gSaveBlock1.tvShows[gSpecialVar_0x8004].common.var00) + { + case TVSHOW_FAN_CLUB_LETTER: + DoTVShowPokemonFanClubLetter(); + break; + case TVSHOW_RECENT_HAPPENINGS: + DoTVShowRecentHappenings(); + break; + case TVSHOW_PKMN_FAN_CLUB_OPINIONS: + DoTVShowPokemonFanClubOpinions(); + break; + case TVSHOW_UNKN_SHOWTYPE_04: + nullsub_22(); + break; + case TVSHOW_MASS_OUTBREAK: + DoTVShowPokemonNewsMassOutbreak(); + break; + case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: + DoTVShowBravoTrainerPokemonProfile(); + break; + case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: + DoTVShowBravoTrainerBattleTowerProfile(); + break; + case TVSHOW_POKEMON_TODAY_CAUGHT: + DoTVShowPokemonTodaySuccessfulCapture(); + break; + case TVSHOW_SMART_SHOPPER: + DoTVShowTodaysSmartShopper(); + break; + case TVSHOW_NAME_RATER_SHOW: + DoTVShowTheNameRaterShow(); + break; + case TVSHOW_POKEMON_TODAY_FAILED: + DoTVShowPokemonTodayFailedCapture(); + break; + case TVSHOW_FISHING_ADVICE: + DoTVShowPokemonAngler(); + break; + case TVSHOW_WORLD_OF_MASTERS: + DoTVShowTheWorldOfMasters(); + break; + } + } +} + +void TVShowConvertInternationalString(u8 *dest, u8 *src, u8 language) +{ + StringCopy(dest, src); + if (language < LANGUAGE_ENGLISH) + ConvertInternationalString(dest, LANGUAGE_JAPANESE); +} + +void DoTVShowBravoTrainerPokemonProfile(void) +{ + struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[gSpecialVar_0x8004].bravoTrainer; + u8 state; + + gScriptResult = 0; + state = gUnknown_020387E8; + switch(state) + { + case 0: + TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); + CopyContestCategoryToStringVar(1, bravoTrainer->contestCategory); + sub_80BEF10(2, bravoTrainer->contestRank); + if (!StringCompareWithoutExtCtrlCodes(gSpeciesNames[bravoTrainer->species], bravoTrainer->pokemonNickname)) + gUnknown_020387E8 = 8; + else + gUnknown_020387E8 = 1; + break; + case 1: + StringCopy(gStringVar1, gSpeciesNames[bravoTrainer->species]); + TVShowConvertInternationalString(gStringVar2, bravoTrainer->pokemonNickname, bravoTrainer->var1f); + CopyContestCategoryToStringVar(2, bravoTrainer->contestCategory); + gUnknown_020387E8 = 2; + break; + case 2: + TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); + if (bravoTrainer->contestResult == 0) // placed first + gUnknown_020387E8 = 3; + else + gUnknown_020387E8 = 4; + break; + case 3: + TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); + sub_80EB3FC(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]); + 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]); + if (bravoTrainer->var14) + gUnknown_020387E8 = 6; + else + gUnknown_020387E8 = 7; + break; + case 6: + StringCopy(gStringVar1, gSpeciesNames[bravoTrainer->species]); + StringCopy(gStringVar2, gMoveNames[bravoTrainer->var14]); + sub_80EB3FC(gStringVar3, bravoTrainer->var04[1]); + gUnknown_020387E8 = 7; + break; + case 7: + TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); + StringCopy(gStringVar2, gSpeciesNames[bravoTrainer->species]); + TVShowDone(); + break; + case 8: + StringCopy(gStringVar1, gSpeciesNames[bravoTrainer->species]); + gUnknown_020387E8 = 2; + break; + } + ShowFieldMessage(gTVBravoTrainerTextGroup[state]); +} + +void DoTVShowBravoTrainerBattleTowerProfile(void) +{ + struct TVShowBravoTrainerBattleTowerSpotlight *bravoTrainerTower = &gSaveBlock1.tvShows[gSpecialVar_0x8004].bravoTrainerTower; + u8 state; + + gScriptResult = 0; + state = gUnknown_020387E8; + switch(state) + { + case 0: + TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->trainerName, bravoTrainerTower->language); + StringCopy(gStringVar2, gSpeciesNames[bravoTrainerTower->species]); + if (bravoTrainerTower->var16 >= 7) + gUnknown_020387E8 = 1; + else + gUnknown_020387E8 = 2; + break; + case 1: + sub_80BF088(0, bravoTrainerTower->btLevel); + sub_80BF088(1, bravoTrainerTower->var16); + if (bravoTrainerTower->var1c == 1) + gUnknown_020387E8 = 3; + else + gUnknown_020387E8 = 4; + break; + case 2: + TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); + sub_80BF088(1, bravoTrainerTower->var16 + 1); + if (bravoTrainerTower->var1b == 0) + gUnknown_020387E8 = 5; + else + gUnknown_020387E8 = 6; + break; + case 3: + TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); + StringCopy(gStringVar2, gSpeciesNames[bravoTrainerTower->defeatedSpecies]); + if (bravoTrainerTower->var1b == 0) + gUnknown_020387E8 = 5; + else + gUnknown_020387E8 = 6; + break; + case 4: + TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); + StringCopy(gStringVar2, gSpeciesNames[bravoTrainerTower->defeatedSpecies]); + if (bravoTrainerTower->var1b == 0) + gUnknown_020387E8 = 5; + else + gUnknown_020387E8 = 6; + break; + case 5: + TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); + gUnknown_020387E8 = 11; + break; + case 6: + TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); + gUnknown_020387E8 = 11; + break; + case 7: + gUnknown_020387E8 = 11; + break; + case 8: + case 9: + case 10: + TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->trainerName, bravoTrainerTower->language); + gUnknown_020387E8 = 11; + break; + case 11: + sub_80EB3FC(gStringVar1, bravoTrainerTower->var18[0]); + if (bravoTrainerTower->var1b == 0) + gUnknown_020387E8 = 12; + else + gUnknown_020387E8 = 13; + break; + case 12: + case 13: + sub_80EB3FC(gStringVar1, bravoTrainerTower->var18[0]); + TVShowConvertInternationalString(gStringVar2, bravoTrainerTower->trainerName, bravoTrainerTower->language); + TVShowConvertInternationalString(gStringVar3, bravoTrainerTower->pokemonName, bravoTrainerTower->language); + gUnknown_020387E8 = 14; + break; + case 14: + TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->trainerName, bravoTrainerTower->language); + StringCopy(gStringVar2, gSpeciesNames[bravoTrainerTower->species]); + TVShowDone(); + break; + } + ShowFieldMessage(gTVBravoTrainerBattleTowerTextGroup[state]); +} + +void DoTVShowTodaysSmartShopper(void) +{ + struct TVShowSmartShopper *smartShopper = &gSaveBlock1.tvShows[gSpecialVar_0x8004].smartshopperShow; + u8 state; + + gScriptResult = 0; + state = gUnknown_020387E8; + switch(state) + { + case 0: + TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language); + GetMapSectionName(gStringVar2, smartShopper->shopLocation, 0); + if (smartShopper->itemAmounts[0] >= 0xff) + gUnknown_020387E8 = 11; + else + gUnknown_020387E8 = 1; + break; + case 1: + TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language); + StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[0])->name); + sub_80BF088(2, smartShopper->itemAmounts[0]); + gUnknown_020387E8 += (Random() % 4) + 1; + break; + case 2: + case 4: + case 5: + if (smartShopper->itemIds[1] != 0) + gUnknown_020387E8 = 6; + else + gUnknown_020387E8 = 10; + break; + case 3: + sub_80BF088(2, smartShopper->itemAmounts[0] + 1); + if (smartShopper->itemIds[1] != 0) + gUnknown_020387E8 = 6; + else + gUnknown_020387E8 = 10; + break; + case 6: + StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[1])->name); + sub_80BF088(2, smartShopper->itemAmounts[1]); + if (smartShopper->itemIds[2] != 0) + gUnknown_020387E8 = 7; + else if (smartShopper->priceReduced == 1) + gUnknown_020387E8 = 8; + else + gUnknown_020387E8 = 9; + break; + case 7: + StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[2])->name); + sub_80BF088(2, smartShopper->itemAmounts[2]); + if (smartShopper->priceReduced == 1) + gUnknown_020387E8 = 8; + else + gUnknown_020387E8 = 9; + break; + case 8: + if (smartShopper->itemAmounts[0] < 0xff) + gUnknown_020387E8 = 9; + else + gUnknown_020387E8 = 12; + break; + case 9: + sub_80BF154(1, smartShopper); + TVShowDone(); + break; + case 10: + if (smartShopper->priceReduced == 1) + gUnknown_020387E8 = 8; + else + gUnknown_020387E8 = 9; + break; + case 11: + TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language); + StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[0])->name); + if (smartShopper->priceReduced == 1) + gUnknown_020387E8 = 8; + else + gUnknown_020387E8 = 12; + break; + case 12: + TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language); + TVShowDone(); + break; + } + ShowFieldMessage(gTVSmartShopperTextGroup[state]); +} + +void DoTVShowTheNameRaterShow(void) +{ + struct TVShowNameRaterShow *nameRaterShow = &gSaveBlock1.tvShows[gSpecialVar_0x8004].nameRaterShow; + u8 state; + + gScriptResult = 0; + state = gUnknown_020387E8; + switch (state) + { + case 0: + TVShowConvertInternationalString(gStringVar1, nameRaterShow->trainerName, nameRaterShow->language); + StringCopy(gStringVar2, gSpeciesNames[nameRaterShow->species]); + TVShowConvertInternationalString(gStringVar3, nameRaterShow->pokemonName, nameRaterShow->pokemonNameLanguage); + gUnknown_020387E8 = sub_80BF7E8(nameRaterShow) + 1; + break; + case 1: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + if (nameRaterShow->random == 0) + gUnknown_020387E8 = 9; + else if (nameRaterShow->random == 1) + gUnknown_020387E8 = 10; + else if (nameRaterShow->random == 2) + gUnknown_020387E8 = 11; + break; + case 2: + TVShowConvertInternationalString(gStringVar1, nameRaterShow->trainerName, nameRaterShow->language); + if (nameRaterShow->random == 0) + gUnknown_020387E8 = 9; + else if (nameRaterShow->random == 1) + gUnknown_020387E8 = 10; + else if (nameRaterShow->random == 2) + gUnknown_020387E8 = 11; + break; + case 9: + case 10: + case 11: + sub_80BF820(0, 1, 0, 1, 0, nameRaterShow); + TVShowConvertInternationalString(gStringVar3, gStringVar1, nameRaterShow->pokemonNameLanguage); + sub_80BF820(0, 0, 0, 1, 0, nameRaterShow); + TVShowConvertInternationalString(gStringVar2, gStringVar1, nameRaterShow->pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar1, nameRaterShow->pokemonName, nameRaterShow->pokemonNameLanguage); + gUnknown_020387E8 = 12; + break; + case 13: + sub_80BF820(0, 0, 3, 1, 0, nameRaterShow); + TVShowConvertInternationalString(gStringVar3, gStringVar1, nameRaterShow->pokemonNameLanguage); + sub_80BF820(0, 0, 2, 0, 0, nameRaterShow); + TVShowConvertInternationalString(gStringVar2, gStringVar1, nameRaterShow->language); + TVShowConvertInternationalString(gStringVar1, nameRaterShow->trainerName, nameRaterShow->language); + gUnknown_020387E8 = 14; + break; + case 14: + sub_80BF820(0, 0, 3, 0, 0, nameRaterShow); + TVShowConvertInternationalString(gStringVar3, gStringVar1, nameRaterShow->language); + sub_80BF820(0, 0, 2, 1, 0, nameRaterShow); + TVShowConvertInternationalString(gStringVar2, gStringVar1, nameRaterShow->pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar1, nameRaterShow->trainerName, nameRaterShow->language); + gUnknown_020387E8 = 18; + break; + case 15: + sub_80BF820(1, 0, 2, 1, 0, nameRaterShow); + TVShowConvertInternationalString(gStringVar1, gStringVar2, nameRaterShow->pokemonNameLanguage); + StringCopy(gStringVar2, gSpeciesNames[nameRaterShow->species]); + sub_80BF820(2, 0, 3, 2, nameRaterShow->species, nameRaterShow); + gUnknown_020387E8 = 16; + break; + case 16: + sub_80BF820(0, 0, 3, 1, 0, nameRaterShow); + TVShowConvertInternationalString(gStringVar3, gStringVar1, nameRaterShow->pokemonNameLanguage); + sub_80BF820(0, 0, 2, 2, nameRaterShow->species, nameRaterShow); + gUnknown_020387E8 = 17; + break; + case 17: + sub_80BF820(1, 0, 2, 1, 0, nameRaterShow); + TVShowConvertInternationalString(gStringVar1, gStringVar2, nameRaterShow->pokemonNameLanguage); + sub_80BF820(2, 0, 3, 2, nameRaterShow->var1C, nameRaterShow); + StringCopy(gStringVar2, gSpeciesNames[nameRaterShow->var1C]); + gUnknown_020387E8 = 18; + break; + case 12: + state = 18; + gUnknown_020387E8 = 18; + case 18: + TVShowConvertInternationalString(gStringVar1, nameRaterShow->pokemonName, nameRaterShow->pokemonNameLanguage); + TVShowConvertInternationalString(gStringVar2, nameRaterShow->trainerName, nameRaterShow->language); + TVShowDone(); + break; + } + ShowFieldMessage(gTVNameRaterTextGroup[state]); +} + +void DoTVShowPokemonTodaySuccessfulCapture(void) +{ + struct TVShowPokemonToday *pokemonToday = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonToday; + u8 state; + + gScriptResult = 0; + state = gUnknown_020387E8; + switch (state) + { + case 0: + TVShowConvertInternationalString(gStringVar1, pokemonToday->playerName, pokemonToday->language); + StringCopy(gStringVar2, gSpeciesNames[pokemonToday->species]); + TVShowConvertInternationalString(gStringVar3, pokemonToday->nickname, pokemonToday->language2); + if (pokemonToday->ball == ITEM_MASTER_BALL) + gUnknown_020387E8 = 5; + else + gUnknown_020387E8 = 1; + break; + case 1: + gUnknown_020387E8 = 2; + break; + case 2: + StringCopy(gStringVar2, ItemId_GetItem(pokemonToday->ball)->name); + sub_80BF088(2, pokemonToday->var12); + if (pokemonToday->var12 < 4) + gUnknown_020387E8 = 3; + else + gUnknown_020387E8 = 4; + break; + case 3: + TVShowConvertInternationalString(gStringVar1, pokemonToday->playerName, pokemonToday->language); + StringCopy(gStringVar2, gSpeciesNames[pokemonToday->species]); + TVShowConvertInternationalString(gStringVar3, pokemonToday->nickname, pokemonToday->language2); + gUnknown_020387E8 = 6; + break; + case 4: + gUnknown_020387E8 = 6; + break; + case 5: + TVShowConvertInternationalString(gStringVar1, pokemonToday->playerName, pokemonToday->language); + StringCopy(gStringVar2, gSpeciesNames[pokemonToday->species]); + gUnknown_020387E8 = 6; + break; + case 6: + TVShowConvertInternationalString(gStringVar1, pokemonToday->playerName, pokemonToday->language); + StringCopy(gStringVar2, gSpeciesNames[pokemonToday->species]); + TVShowConvertInternationalString(gStringVar3, pokemonToday->nickname, pokemonToday->language2); + gUnknown_020387E8 += (Random() % 4) + 1; + break; + case 7: + case 8: + StringCopy(gStringVar1, gSpeciesNames[pokemonToday->species]); + TVShowConvertInternationalString(gStringVar2, pokemonToday->nickname, pokemonToday->language2); + sub_80BF638(2, pokemonToday->species); + gUnknown_020387E8 = 11; + break; + case 9: + case 10: + StringCopy(gStringVar1, gSpeciesNames[pokemonToday->species]); + TVShowConvertInternationalString(gStringVar2, pokemonToday->nickname, pokemonToday->language2); + gUnknown_020387E8 = 11; + break; + case 11: + TVShowDone(); + break; + } + ShowFieldMessage(gTVPokemonTodayTextGroup[state]); +} + +void DoTVShowPokemonTodayFailedCapture(void) +{ + struct TVShowPokemonTodayFailed *pokemonTodayFailed = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonTodayFailed; + u8 state; + + gScriptResult = 0; + state = gUnknown_020387E8; + switch (state) + { + case 0: + TVShowConvertInternationalString(gStringVar1, pokemonTodayFailed->playerName, pokemonTodayFailed->language); + StringCopy(gStringVar2, gSpeciesNames[pokemonTodayFailed->species]); + gUnknown_020387E8 = 1; + break; + case 1: + TVShowConvertInternationalString(gStringVar1, pokemonTodayFailed->playerName, pokemonTodayFailed->language); + GetMapSectionName(gStringVar2, pokemonTodayFailed->var12, 0); + StringCopy(gStringVar3, gSpeciesNames[pokemonTodayFailed->species2]); + if (pokemonTodayFailed->var11 == 1) + gUnknown_020387E8 = 3; + else + gUnknown_020387E8 = 2; + break; + case 2: + case 3: + TVShowConvertInternationalString(gStringVar1, pokemonTodayFailed->playerName, pokemonTodayFailed->language); + sub_80BF088(1, pokemonTodayFailed->var10); + if ((Random() % 3) == 0) + gUnknown_020387E8 = 5; + else + gUnknown_020387E8 = 4; + break; + case 4: + case 5: + TVShowConvertInternationalString(gStringVar1, pokemonTodayFailed->playerName, pokemonTodayFailed->language); + gUnknown_020387E8 = 6; + break; + case 6: + TVShowDone(); + break; + } + ShowFieldMessage(gTVPokemonTodayFailedCaptureTextGroup[state]); +} + +void DoTVShowPokemonFanClubLetter(void) +{ + struct TVShowFanClubLetter *fanclubLetter = &gSaveBlock1.tvShows[gSpecialVar_0x8004].fanclubLetter; + u8 state; + u16 rval; + + gScriptResult = 0; + state = gUnknown_020387E8; + switch (state) + { + case 0: + TVShowConvertInternationalString(gStringVar1, fanclubLetter->playerName, fanclubLetter->language); + StringCopy(gStringVar2, gSpeciesNames[fanclubLetter->species]); + gUnknown_020387E8 = 50; + break; + case 1: + rval = (Random() % 4) + 1; + if (rval == 1) + gUnknown_020387E8 = 2; + else + gUnknown_020387E8 = rval + 2; + break; + case 2: + gUnknown_020387E8 = 51; + break; + case 3: + gUnknown_020387E8 += (Random() % 3) + 1; + break; + case 4: + case 5: + case 6: + sub_80BF79C((TVShow *)fanclubLetter); + gUnknown_020387E8 = 7; + break; + case 7: + rval = (Random() % 0x1f) + 0x46; + sub_80BF088(2, rval); + TVShowDone(); + break; + case 50: + ConvertEasyChatWordsToString(gStringVar4, fanclubLetter->pad04, 2, 2); + ShowFieldMessage(gStringVar4); + gUnknown_020387E8 = 1; + return; + case 51: + ConvertEasyChatWordsToString(gStringVar4, fanclubLetter->pad04, 2, 2); + ShowFieldMessage(gStringVar4); + gUnknown_020387E8 = 3; + return; + } + ShowFieldMessage(gTVFanClubTextGroup[state]); +} + +void DoTVShowRecentHappenings(void) +{ + struct TVShowRecentHappenings *recentHappenings = &gSaveBlock1.tvShows[gSpecialVar_0x8004].recentHappenings; + u8 state; + + gScriptResult = 0; + state = gUnknown_020387E8; + switch (state) + { + case 0: + TVShowConvertInternationalString(gStringVar1, recentHappenings->playerName, recentHappenings->language); + sub_80BF79C((TVShow *)recentHappenings); + gUnknown_020387E8 = 50; + break; + case 1: + gUnknown_020387E8 += 1 + (Random() % 3); + break; + case 2: + case 3: + case 4: + gUnknown_020387E8 = 5; + break; + case 5: + TVShowDone(); + break; + case 50: + ConvertEasyChatWordsToString(gStringVar4, recentHappenings->var04, 2, 2); + ShowFieldMessage(gStringVar4); + gUnknown_020387E8 = 1; + return; + } + ShowFieldMessage(gTVRecentHappeningsTextGroup[state]); +} + +void DoTVShowPokemonFanClubOpinions(void) +{ + struct TVShowFanclubOpinions *fanclubOpinions = &gSaveBlock1.tvShows[gSpecialVar_0x8004].fanclubOpinions; + u8 state; + + gScriptResult = 0; + state = gUnknown_020387E8; + switch (state) + { + case 0: + TVShowConvertInternationalString(gStringVar1, fanclubOpinions->playerName, fanclubOpinions->language); + StringCopy(gStringVar2, gSpeciesNames[fanclubOpinions->var02]); + TVShowConvertInternationalString(gStringVar3, fanclubOpinions->var10, fanclubOpinions->var0E); + gUnknown_020387E8 = fanclubOpinions->var04B + 1; + break; + case 1: + case 2: + case 3: + TVShowConvertInternationalString(gStringVar1, fanclubOpinions->playerName, fanclubOpinions->language); + StringCopy(gStringVar2, gSpeciesNames[fanclubOpinions->var02]); + sub_80EB3FC(gStringVar3, fanclubOpinions->var1C[0]); + gUnknown_020387E8 = 4; + break; + case 4: + TVShowConvertInternationalString(gStringVar1, fanclubOpinions->playerName, fanclubOpinions->language); + sub_80EB3FC(gStringVar3, fanclubOpinions->var1C[1]); + TVShowDone(); + break; + } + ShowFieldMessage(gTVFanClubOpinionsTextGroup[state]); +} + +void nullsub_22(void) +{ +} + +void DoTVShowPokemonNewsMassOutbreak(void) +{ + struct TVShowMassOutbreak *massOutbreak = &gSaveBlock1.tvShows[gSpecialVar_0x8004].massOutbreak; + + GetMapSectionName(gStringVar1, massOutbreak->locationMapNum, 0); + StringCopy(gStringVar2, gSpeciesNames[massOutbreak->species]); + TVShowDone(); + StartMassOutbreak(); + ShowFieldMessage(gTVPokemonOutbreakTextGroup[gUnknown_020387E8]); +} + +void DoTVShowInSearchOfTrainers(void) +{ + u8 state; + + gScriptResult = 0; + state = gUnknown_020387E8; + switch (state) + { + case 0: + GetMapSectionName(gStringVar1, gSaveBlock1.gabbyAndTyData.mapnum, 0); + if (gSaveBlock1.gabbyAndTyData.battleNum > 1) + gUnknown_020387E8 = 1; + else + gUnknown_020387E8 = 2; + break; + case 1: + gUnknown_020387E8 = 2; + break; + case 2: + if (gSaveBlock1.gabbyAndTyData.valA_0 == 0) + gUnknown_020387E8 = 4; + else if (gSaveBlock1.gabbyAndTyData.valA_3 != 0) + gUnknown_020387E8 = 5; + else if (gSaveBlock1.gabbyAndTyData.valA_2 != 0) + gUnknown_020387E8 = 6; + else if (gSaveBlock1.gabbyAndTyData.valA_1 != 0) + gUnknown_020387E8 = 7; + else + gUnknown_020387E8 = 3; + break; + case 3: + StringCopy(gStringVar1, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon1]); + StringCopy(gStringVar2, gMoveNames[gSaveBlock1.gabbyAndTyData.lastMove]); + StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon2]); + gUnknown_020387E8 = 8; + break; + case 4: + case 5: + case 6: + case 7: + gUnknown_020387E8 = 8; + break; + case 8: + sub_80EB3FC(gStringVar1, gSaveBlock1.gabbyAndTyData.quote); + StringCopy(gStringVar2, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon1]); + StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon2]); + gScriptResult = 1; + gUnknown_020387E8 = 0;; + TakeTVShowInSearchOfTrainersOffTheAir(); + break; + } + ShowFieldMessage(gTVGabbyAndTyTextGroup[state]); +} + +void DoTVShowPokemonAngler(void) +{ + struct TVShowPokemonAngler *pokemonAngler = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonAngler; + u8 state; + + gScriptResult = 0; + if (pokemonAngler->var02 < pokemonAngler->var03) + gUnknown_020387E8 = 0; + else + gUnknown_020387E8 = 1; + state = gUnknown_020387E8; + switch (state) + { + case 0: + TVShowConvertInternationalString(gStringVar1, pokemonAngler->playerName, pokemonAngler->language); + StringCopy(gStringVar2, gSpeciesNames[pokemonAngler->var04]); + sub_80BF088(2, pokemonAngler->var03); + TVShowDone(); + break; + case 1: + TVShowConvertInternationalString(gStringVar1, pokemonAngler->playerName, pokemonAngler->language); + StringCopy(gStringVar2, gSpeciesNames[pokemonAngler->var04]); + sub_80BF088(2, pokemonAngler->var02); + TVShowDone(); + break; + } + ShowFieldMessage(gTVFishingGuruAdviceTextGroup[state]); +} + +void DoTVShowTheWorldOfMasters(void) +{ + struct TVShowWorldOfMasters *worldOfMasters = &gSaveBlock1.tvShows[gSpecialVar_0x8004].worldOfMasters; + u8 state; + + gScriptResult = 0; + state = gUnknown_020387E8; + switch (state) + { + case 0: + TVShowConvertInternationalString(gStringVar1, worldOfMasters->playerName, + worldOfMasters->language); + sub_80BF088(1, worldOfMasters->var06); + sub_80BF088(2, worldOfMasters->var02); + gUnknown_020387E8 = 1; + break; + case 1: + StringCopy(gStringVar1, gSpeciesNames[worldOfMasters->var08]); + gUnknown_020387E8 = 2; + break; + case 2: + TVShowConvertInternationalString(gStringVar1, worldOfMasters->playerName, + worldOfMasters->language); + GetMapSectionName(gStringVar2, worldOfMasters->var0a, 0); + StringCopy(gStringVar3, gSpeciesNames[worldOfMasters->var04]); + TVShowDone(); + break; + } + ShowFieldMessage(gTVWorldOfMastersTextGroup[state]); +} + +void TVShowDone(void) +{ + gScriptResult = 1; + gUnknown_020387E8 = 0; + gSaveBlock1.tvShows[gSpecialVar_0x8004].common.var01 = 0; +} + +void sub_80C2014(void) +{ + gUnknown_020387E8 = 0; +} diff --git a/src/field/use_pokeblock.c b/src/field/use_pokeblock.c new file mode 100644 index 000000000..3aa2f1fa5 --- /dev/null +++ b/src/field/use_pokeblock.c @@ -0,0 +1,965 @@ +// +// Created by Scott Norton on 5/31/17. +// + +#include "global.h" +#include "main.h" +#include "rom4.h" +#include "string_util.h" +#include "strings.h" +#include "sprite.h" +#include "pokemon.h" +#include "pokenav.h" +#include "palette.h" +#include "text.h" +#include "menu.h" +#include "sound.h" +#include "songs.h" +#include "pokeblock.h" +#include "pokeblock_feed.h" +#include "use_pokeblock.h" + +#define GFX_TAG_CONDITIONUPDOWN 0 + +#ifdef GERMAN +extern const u16 ConditionUpDownPalette[16]; +extern const u32 ConditionUpDownTiles[0x80]; +#else +const u16 ConditionUpDownPalette[] = INCBIN_U16("graphics/misc/condition_up_down.gbapal"); +const u32 ConditionUpDownTiles[] = INCBIN_U32("graphics/misc/condition_up_down.4bpp"); +#endif + +const u32 gUnknown_08406118[] = { + MON_DATA_COOL, + MON_DATA_TOUGH, + MON_DATA_SMART, + MON_DATA_CUTE, + MON_DATA_BEAUTY +}; + +const u8 gUnknown_0840612C[] = { + 0, 4, 3, 2, 1 +}; + +const u8 *const gUnknown_08406134[] = { + OtherText_Coolness, + OtherText_Toughness, + OtherText_Smartness, + OtherText_Cuteness, + OtherText_Beauty +}; + +const struct SpriteSheet gSpriteSheet_ConditionUpDown = { + (u8 *)ConditionUpDownTiles, + sizeof ConditionUpDownTiles, + GFX_TAG_CONDITIONUPDOWN +}; + +const struct SpritePalette gSpritePalette_ConditionUpDown = { + ConditionUpDownPalette, + GFX_TAG_CONDITIONUPDOWN +}; + +const s16 gUnknown_08406158[][2] = { + {0x9c, 0x1e}, + {0x75, 0x35}, + {0x75, 0x70}, + {0xc5, 0x70}, + {0xc5, 0x35} +}; + +const struct OamData gOamData_840616C = { + .shape = 1, + .size = 2, + .priority = 1 +}; + +const union AnimCmd gSpriteAnim_8406174[] = { + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_840617C[] = { + ANIMCMD_FRAME(8, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_8406184[] = { + gSpriteAnim_8406174, + gSpriteAnim_840617C +}; + +const struct SpriteTemplate gSpriteTemplate_840618C = { + GFX_TAG_CONDITIONUPDOWN, + GFX_TAG_CONDITIONUPDOWN, + &gOamData_840616C, + gSpriteAnimTable_8406184, + NULL, + gDummySpriteAffineAnimTable, + 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; +EWRAM_DATA u8 gUnknown_02039310 = 0; +EWRAM_DATA s16 gUnknown_02039312 = 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); +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 *); + +void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback) +{ + gUnknown_02039304 = &gUnknown_083DFEC4->unkD164; + gUnknown_02039304->pokeblock = pokeblock; + gUnknown_02039304->callback = callback; + gUnknown_083DFEC4->unkD162[0] = 2; + launch_c3_walk_stairs_and_run_once(sub_8136294); + SetMainCallback2(sub_8136244); +} + +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; + gUnknown_083DFEC4->unkD162[0] = 2; + launch_c3_walk_stairs_and_run_once(sub_8136294); + SetMainCallback2(sub_81361E4); +} + +void sub_81361E4(void) +{ + gUnknown_02039304->unk0(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + if (gUnknown_02039304->unk0 == sub_81365C8) + { + REG_DISPCNT = 0; + gUnknown_02039304->unk50 = 0; + SetMainCallback2(sub_813622C); + } +} + +void sub_813622C(void) +{ + sub_81368A4(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_8136244(void) +{ + gUnknown_02039304->unk0(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_8136264(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_80F5CDC(6); + sub_8089668(); +} + +void launch_c3_walk_stairs_and_run_once(void (*const func)(void)) +{ + gUnknown_02039304->unk0 = func; + gUnknown_02039304->unk50 = 0; +} + +void sub_8136294(void) +{ + bool32 c1LinkRelatedActive; + switch (gUnknown_02039304->unk50) + { + case 0: + c1LinkRelatedActive = is_c1_link_related_active(); + gUnknown_083DFEC4->unk6DAC = c1LinkRelatedActive; + if ((bool8)c1LinkRelatedActive == FALSE) + { + gUnknown_02039304->unk55 = 0; + launch_c3_walk_stairs_and_run_once(sub_81365A0); + gUnknown_02039304->unk50++; + } + break; + case 1: + ResetSpriteData(); + FreeAllSpritePalettes(); + gUnknown_02039304->unk50++; + break; + case 2: + SetVBlankCallback(NULL); + gUnknown_02039304->unk50++; + break; + case 3: + SetUpWindowConfig(&gWindowConfig_81E7080); + gUnknown_02039304->unk50++; + break; + case 4: + MultistepInitMenuWindowBegin(&gWindowConfig_81E7080); + gUnknown_02039304->unk50++; + break; + case 5: + if (MultistepInitMenuWindowContinue()) + { + gUnknown_02039304->unk50++; + } + break; + case 6: + gUnknown_083DFEC4->unk76AA = 0; + gUnknown_083DFEC4->unk87E0 = NULL; + gUnknown_083DFEC4->unk030C = 0x20; + gUnknown_02039304->unk50++; + break; + case 7: + sub_80F2688(); + gUnknown_02039304->unk50++; + // fallthrough + case 8: + if (!sub_80F26BC()) + { + gUnknown_02039304->unk50++; + } + break; + case 9: + sub_80F2C80(1); + gUnknown_02039304->unk50++; + // fallthrough + case 10: + if (!sub_80F2CBC(1)) + { + gUnknown_02039304->unk50++; + } + break; + case 11: + gKeyRepeatStartDelay = 20; + gUnknown_083DFEC4->unk8828 = CalculatePlayerPartyCount(); + gUnknown_083DFEC4->unk9344 = 0; + gUnknown_083DFEC4->unk8768 = NULL; + sub_80F4BD0(); + gUnknown_083DFEC4->unkD160 = 0; + gUnknown_02039304->unk50++; + break; + case 12: + if (!sub_80F1778()) + { + REG_BG2VOFS = 6; + REG_BG3VOFS = 6; + gUnknown_02039304->unk50++; + } + break; + case 13: + sub_80F2E18(0); + gUnknown_083DFEC4->unk8768->unk26 = 0xffd8; + gUnknown_02039304->unk50++; + break; + case 14: + if (!sub_80F170C()) + { + gUnknown_02039304->unk50++; + } + break; + case 15: + sub_80F33A8(); + gUnknown_02039304->unk50++; + break; + case 16: + DmaClear32(3, BG_SCREEN_ADDR(31), 0x800); + REG_BG1VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1CNT = BGCNT_SCREENBASE(31); + gUnknown_02039304->unk50++; + break; + case 17: + sub_80F567C(&gUnknown_083DFEC4->unk8ff0, gUnknown_083DFEC4->unk9004); + sub_80F5B38(); + gUnknown_02039304->unk50++; + break; + case 18: + if (!sub_80F5B50()) + { + gUnknown_02039304->unk50++; + } + break; + case 19: + sub_80F556C(gUnknown_083DFEC4->unk9004); + gUnknown_02039304->unk50++; + break; + case 20: + sub_80F1934(); + gUnknown_02039304->unk50++; + break; + case 21: + REG_WIN0H = 0xf0; + REG_WIN1H = 0x9b; + REG_WIN0V = 0x3273; + REG_WIN1V = 0x3273; + REG_WININ = 0x3f3f; + REG_WINOUT = 0x1b; + REG_BG0VOFS = 0x28; + REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON; + // fallthrough + case 22: + gUnknown_02039304->unk55 = 1; + launch_c3_walk_stairs_and_run_once(sub_81365C8); + break; + } +} + +void sub_81365A0(void) +{ + while (!gUnknown_02039304->unk55) + { + sub_8136294(); + } +} + +void sub_81365C8(void) +{ + switch (gUnknown_02039304->unk50) + { + case 0: + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + SetVBlankCallback(sub_8136264); + gUnknown_02039304->unk50++; + break; + case 1: + if (!gPaletteFade.active) + { + sub_80F3C94(); + sub_80F3D00(); + launch_c3_walk_stairs_and_run_once(sub_8136638); + } + break; + } +} + +void sub_8136638(void) +{ + switch (gUnknown_02039304->unk50) + { + case 0: + if (gMain.heldKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + sub_80F5060(TRUE); + move_anim_execute(); + gUnknown_02039304->unk50 = 1; + } + else if (gMain.heldKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + sub_80F5060(FALSE); + move_anim_execute(); + gUnknown_02039304->unk50 = 1; + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_02039304->unk50 = 3; + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gUnknown_083DFEC4->unk87DC == gUnknown_083DFEC4->unk87DA - 1) + { + gUnknown_02039304->unk50 = 3; + } + else + { + gUnknown_02039304->unk50 = 5; + } + } + break; + case 1: + if (!gpu_sync_bg_show()) + { + gUnknown_02039304->unk50++; + } + break; + case 2: + if (!sub_8055870()) + { + sub_80F1934(); + sub_80F3D00(); + gUnknown_02039304->unk50 = 0; + } + break; + case 3: + launch_c3_walk_stairs_and_run_once(sub_8136B44); + break; + case 4: + break; + case 5: + sub_8136BB8(); + gUnknown_02039304->unk50++; + break; + case 6: + switch (sub_8136C40()) + { + case 1: + case -1: + gUnknown_02039304->unk50 = 0; + break; + case 0: + if (sub_8137058()) + { + sub_8136D60(); + gUnknown_02039304->unk50 = 7; + } + else + { + launch_c3_walk_stairs_and_run_once(sub_8136808); + } + break; + } + break; + case 7: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + sub_8136D8C(); + gUnknown_02039304->unk50 = 0; + } + break; + } +} + +void sub_8136808(void) +{ + switch (gUnknown_02039304->unk50) + { + case 0: + gUnknown_02039310 = sub_81370A4(gUnknown_083DFEC4->unk87DC); + gUnknown_02039308 = gUnknown_02039304->callback; + gUnknown_0203930C = gUnknown_02039304->pokeblock; + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gUnknown_02039304->unk50++; + break; + case 1: + if (!gPaletteFade.active) + { + gMain.savedCallback = sub_8136174; + SetMainCallback2(sub_8147ADC); + } + break; + } +} + +void sub_81368A4(void) +{ + switch (gUnknown_02039304->unk50) + { + case 0: + if (gUnknown_083DFEC4->unk87DC != gUnknown_02039310) + { + sub_80F5060(gUnknown_02039304->unk56); + gUnknown_02039304->unk50++; + } + else + { + gUnknown_02039304->unk50 = 3; + } + break; + case 1: + if (!gpu_sync_bg_show()) + { + gUnknown_02039304->unk50++; + } + break; + case 2: + if (!sub_8055870()) + { + sub_80F1934(); + gUnknown_02039304->unk50 = 0; + } + break; + case 3: + BlendPalettes(-1, 16, 0); + gUnknown_02039304->unk50++; + break; + case 4: + REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON; + gUnknown_02039304->unk50++; + break; + case 5: + SetVBlankCallback(sub_8136264); + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + gUnknown_02039304->unk50++; + break; + case 6: + if (!gPaletteFade.active) + { + sub_80F3C94(); + sub_80F3D00(); + launch_c3_walk_stairs_and_run_once(sub_81369CC); + SetMainCallback2(sub_8136244); + } + break; + } +} + +void sub_81369CC(void) +{ + switch (gUnknown_02039304->unk50) + { + case 0: + gUnknown_02039304->pokemon = &gPlayerParty[0]; + gUnknown_02039304->pokemon = &gPlayerParty[gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx]; + move_anim_execute(); + gUnknown_02039304->unk50++; + break; + case 1: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + gUnknown_02039304->unk50++; + break; + case 2: + sub_8136EF0(); + sub_80F567C(gUnknown_02039304->unk5c, gUnknown_083DFEC4->unk9040); + sub_80F5550(gUnknown_083DFEC4->unk9004[gUnknown_083DFEC4->unk8fe9], gUnknown_083DFEC4->unk9040); + sub_8137138(); + gUnknown_02039304->unk50++; + break; + case 3: + if (!sub_80F555C()) + { + sub_80F7224(sub_81370A4(gUnknown_083DFEC4->unk87DC)); + sub_80F3D00(); + gUnknown_02039304->unk52 = 0; + gUnknown_02039304->unk50++; + } + break; + case 4: + if ((++gUnknown_02039304->unk52) > 16) + { + sub_8136C6C(); + gUnknown_02039304->unk50++; + } + break; + case 5: + if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8136D00()) + { + sub_810CA6C((u8)gScriptItemId); + launch_c3_walk_stairs_and_run_once(sub_8136B44); + } + break; + } +} + +void sub_8136B44(void) +{ + switch (gUnknown_02039304->unk50) + { + case 0: + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gUnknown_02039304->unk50++; + break; + case 1: + if (!gPaletteFade.active) + { + gUnknown_02039304->unk50 = 2; + } + break; + case 2: + sub_80F5BDC(); + gUnknown_02039304->unk50++; + break; + case 3: + SetMainCallback2(gUnknown_02039304->callback); + break; + } +} + +void sub_8136BB8(void) +{ + GetMonData(&gPlayerParty[sub_81370A4(gUnknown_083DFEC4->unk87DC)], MON_DATA_NICKNAME, gUnknown_02039304->stringBuffer); + StringGetEnd10(gUnknown_02039304->stringBuffer); + StringAppend(gUnknown_02039304->stringBuffer, gOtherText_GetsAPokeBlock); + BasicInitMenuWindow(&gWindowConfig_81E709C); + MenuDrawTextWindow(0, 16, 29, 19); + MenuPrint(gUnknown_02039304->stringBuffer, 1, 17); + DisplayYesNoMenu(23, 10, 1); + MoveMenuCursor(0); +} + +s8 sub_8136C40(void) +{ + s8 retval = ProcessMenuInputNoWrap(); + if ((u8)(retval + 1) < 3) + { + MenuZeroFillScreen(); + BasicInitMenuWindow(&gWindowConfig_81E7080); + } + return retval; +} + +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]); + } + else + { + sub_8136DC0(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, 0); + } + sub_8136DA0(gUnknown_02039304->stringBuffer); +} + +#ifdef NONMATCHING +bool8 sub_8136D00(void) +{ + while (1) + { + if (++gUnknown_02039304->unk53 >= 5) + { + break; + } + if (gUnknown_02039304->unk61[gUnknown_02039304->unk53] != 0) + { + 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; +} +#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) +{ + BasicInitMenuWindow(&gWindowConfig_81E709C); + MenuDrawTextWindow(0, 16, 29, 19); + MenuPrint(gOtherText_WontEat, 1, 17); +} + +void sub_8136D8C(void) +{ + MenuZeroFillScreen(); + BasicInitMenuWindow(&gWindowConfig_81E7080); +} + +void sub_8136DA0(const u8 *message) +{ + MenuDrawTextWindow(0, 16, 29, 19); + MenuPrint(message, 1, 17); +} + +#ifdef NONMATCHING +void sub_8136DC0(u8 *dest, u8 a1, s16 a2) +{ + u16 v0 = a2; + if (a2 != 0) + { + if ((v0 = max(a2, 0)) == 0); + StringCopy(dest, gUnknown_08406134[a1]); + StringAppend(dest, gOtherText_WasEnhanced); + } + else + { + StringCopy(dest, gOtherText_NothingChanged); + } +} +#else +__attribute__((naked)) +void sub_8136DC0(u8 *dest, u8 a1, s16 a2) +{ + asm_unified("\tpush {r4,lr}\n" + "\tadds r4, r0, 0\n" + "\tlsls r1, 24\n" + "\tlsrs r3, r1, 24\n" + "\tlsls r2, 16\n" + "\tlsrs r0, r2, 16\n" + "\tasrs r2, 16\n" + "\tcmp r2, 0\n" + "\tbeq _08136DFC\n" + "\tcmp r2, 0\n" + "\tble _08136DD8\n" + "\tmovs r0, 0\n" + "_08136DD8:\n" + "\tlsls r0, 16\n" + "\tldr r1, _08136DF4 @ =gUnknown_08406134\n" + "\tlsls r0, r3, 2\n" + "\tadds r0, r1\n" + "\tldr r1, [r0]\n" + "\tadds r0, r4, 0\n" + "\tbl StringCopy\n" + "\tldr r1, _08136DF8 @ =gOtherText_WasEnhanced\n" + "\tadds r0, r4, 0\n" + "\tbl StringAppend\n" + "\tb _08136E04\n" + "\t.align 2, 0\n" + "_08136DF4: .4byte gUnknown_08406134\n" + "_08136DF8: .4byte gOtherText_WasEnhanced\n" + "_08136DFC:\n" + "\tldr r1, _08136E0C @ =gOtherText_NothingChanged\n" + "\tadds r0, r4, 0\n" + "\tbl StringCopy\n" + "_08136E04:\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08136E0C: .4byte gOtherText_NothingChanged"); +} +#endif + +void sub_8136E10(struct Pokemon *pokemon, u8 *data) +{ + u16 i; + for (i=0; i<5; i++) + { + data[i] = GetMonData(pokemon, gUnknown_08406118[i]); + } +} + +void sub_8136E40(struct Pokeblock *pokeblock, struct Pokemon *pokemon) +{ + u16 i; + s16 cstat; + u8 data; + if (GetMonData(pokemon, MON_DATA_SHEEN) != 255) + { + sub_8136F74(pokeblock, pokemon); + for (i=0; i<5; i++) + { + data = GetMonData(pokemon, gUnknown_08406118[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); + } + cstat = (u8)GetMonData(pokemon, MON_DATA_SHEEN); + cstat = cstat + pokeblock->feel; + if (cstat > 255) + cstat = 255; + data = cstat; + SetMonData(pokemon, MON_DATA_SHEEN, &data); + } +} + +void sub_8136EF0(void) +{ + u16 i; + struct Pokemon *pokemon = gPlayerParty; + pokemon += gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx; + sub_8136E10(pokemon, gUnknown_02039304->unk57); + sub_8136E40(gUnknown_02039304->pokeblock, pokemon); + sub_8136E10(pokemon, gUnknown_02039304->unk5c); + for (i=0; i<5; i++) + { + gUnknown_02039304->unk61[i] = gUnknown_02039304->unk5c[i] - gUnknown_02039304->unk57[i]; + } +} + +void sub_8136F74(struct Pokeblock *pokeblock, struct Pokemon *pokemon) +{ + s8 direction; + s8 i; + s16 amount; + s8 boost; + s8 taste; + gUnknown_02039304->unk66[0] = pokeblock->spicy; + gUnknown_02039304->unk66[1] = pokeblock->sour; + gUnknown_02039304->unk66[2] = pokeblock->bitter; + gUnknown_02039304->unk66[3] = pokeblock->sweet; + gUnknown_02039304->unk66[4] = pokeblock->dry; + if (gUnknown_02039312 > 0) + direction = 1; + else if (gUnknown_02039312 < 0) + direction = -1; + else + return; + for (i=0; i<5; i++) + { + amount = gUnknown_02039304->unk66[i]; + boost = amount / 10; + if (amount % 10 >= 5) // round to the nearest + boost++; + taste = sub_8040A54(pokemon, gUnknown_0840612C[i]); + if (taste == direction) + { + gUnknown_02039304->unk66[i] += boost * taste; + } + } +} + +bool8 sub_8137058(void) +{ + struct Pokemon *pokemon = gPlayerParty; + pokemon += gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx; + if (GetMonData(pokemon, MON_DATA_SHEEN) == 255) + return TRUE; + return FALSE; +} + +u8 sub_81370A4(u8 a0) +{ + u8 i; + for (i=0; iunk54 = 0; + for (flavor=0; flavor<5; flavor++) + { + if (gUnknown_02039304->unk61[flavor] != 0) + { + spriteidx = CreateSprite(&gSpriteTemplate_840618C, gUnknown_08406158[flavor][0], gUnknown_08406158[flavor][1], 0); + if (spriteidx != MAX_SPRITES) + { + if (gUnknown_02039304->unk61[flavor] != 0) + { + gSprites[spriteidx].callback = sub_81371DC; + } + gUnknown_02039304->unk54++; + } + } + } +} + +void sub_81371DC(struct Sprite *sprite) +{ + if (sprite->data0 <= 5) + sprite->pos2.y -= 2; + else if (sprite->data0 <= 11) + sprite->pos2.y += 2; + if ((++sprite->data0) > 60) + { + DestroySprite(sprite); + gUnknown_02039304->unk54--; + } +} diff --git a/src/field/wallclock.c b/src/field/wallclock.c new file mode 100644 index 000000000..8db13dc2d --- /dev/null +++ b/src/field/wallclock.c @@ -0,0 +1,1061 @@ +#include "global.h" +#include "wallclock.h" +#include "decompress.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "rtc.h" +#include "songs.h" +#include "sound.h" +#include "strings2.h" +#include "task.h" +#include "trig.h" +#include "unknown_task.h" + +extern u16 gSpecialVar_0x8004; +extern u8 gMiscClock_Gfx[]; +extern u8 gUnknown_08E95774[]; +extern u8 gUnknown_08E954B0[]; +extern u16 gMiscClockMale_Pal[]; +extern u16 gMiscClockFemale_Pal[]; + +//-------------------------------------------------- +// Graphics Data +//-------------------------------------------------- + +static const u8 ClockGfx_Misc[] = INCBIN_U8("graphics/misc/clock_misc.4bpp.lz"); +static const struct CompressedSpriteSheet gUnknown_083F7A90[] = +{ + {ClockGfx_Misc, 0x2000, 0x1000}, + {NULL}, +}; +static const struct SpritePalette gUnknown_083F7AA0[] = +{ + {gMiscClockMale_Pal, 0x1000}, + {gMiscClockFemale_Pal, 0x1001}, + {NULL}, +}; +static const struct OamData gOamData_83F7AB8 = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_83F7AC0[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83F7AC8[] = +{ + ANIMCMD_FRAME(64, 30), + ANIMCMD_END, +}; +static const union AnimCmd *const gSpriteAnimTable_83F7AD0[] = +{ + gSpriteAnim_83F7AC0, +}; +static const union AnimCmd *const gSpriteAnimTable_83F7AD4[] = +{ + gSpriteAnim_83F7AC8, +}; +static void sub_810B05C(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_83F7AD8 = +{ + .tileTag = 0x1000, + .paletteTag = 0x1000, + .oam = &gOamData_83F7AB8, + .anims = gSpriteAnimTable_83F7AD0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_810B05C, +}; +static void sub_810B0F4(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_83F7AF0 = +{ + .tileTag = 0x1000, + .paletteTag = 0x1000, + .oam = &gOamData_83F7AB8, + .anims = gSpriteAnimTable_83F7AD4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_810B0F4, +}; +static const struct OamData gOamData_83F7B08 = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_83F7B10[] = +{ + ANIMCMD_FRAME(132, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83F7B18[] = +{ + ANIMCMD_FRAME(128, 30), + ANIMCMD_END, +}; +static const union AnimCmd *const gSpriteAnimTable_83F7B20[] = +{ + gSpriteAnim_83F7B10, +}; +static const union AnimCmd *const gSpriteAnimTable_83F7B24[] = +{ + gSpriteAnim_83F7B18, +}; +static void sub_810B18C(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_83F7B28 = +{ + .tileTag = 0x1000, + .paletteTag = 0x1000, + .oam = &gOamData_83F7B08, + .anims = gSpriteAnimTable_83F7B20, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_810B18C, +}; +static void sub_810B230(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_83F7B40 = +{ + .tileTag = 0x1000, + .paletteTag = 0x1000, + .oam = &gOamData_83F7B08, + .anims = gSpriteAnimTable_83F7B24, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_810B230, +}; + +static void WallClockVblankCallback(void); +static void LoadWallClockGraphics(void); +static void WallClockMainCallback(void); +static void WallClockInit(void); +static void Task_SetClock1(u8 taskId); +static void Task_SetClock2(u8 taskId); +static void Task_SetClock3(u8 taskId); +static void Task_SetClock4(u8 taskId); +static void Task_SetClock5(u8 taskId); +static void Task_SetClock6(u8 taskId); +static void Task_ViewClock1(u8 taskId); +static void Task_ViewClock2(u8 taskId); +static void Task_ViewClock3(u8 taskId); +static void Task_ViewClock4(u8 taskId); +static u8 CalcMinHandDelta(u16 speed); +static u16 CalcNewMinHandAngle(u16 angle, u8 direction, u8 speed); +static u8 AdvanceClock(u8 taskId, u8 direction); +static void UpdateClockPeriod(u8 taskId, u8 direction); +static void InitClockWithRtc(u8 taskId); + +enum +{ + PERIOD_AM, + PERIOD_PM, +}; + +enum +{ + MVMT_NONE, + MVMT_BACKWARD, + MVMT_FORWARD, +}; + +static void WallClockVblankCallback(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void LoadWallClockGraphics(void) +{ + u8 *addr; + u32 size; + + SetVBlankCallback(0); + REG_DISPCNT = 0; + REG_BG3CNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + + 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; + } + } + DmaClear32(3, OAM, OAM_SIZE); + DmaClear16(3, PLTT, PLTT_SIZE); + + LZ77UnCompVram(gMiscClock_Gfx, (void *)VRAM); + if (gSpecialVar_0x8004 == MALE) + LoadPalette(gMiscClockMale_Pal, 0, 32); + else + LoadPalette(gMiscClockFemale_Pal, 0, 32); + remove_some_task(); + ResetTasks(); + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + LoadCompressedObjectPic(&gUnknown_083F7A90[0]); + LoadSpritePalettes(gUnknown_083F7AA0); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); +} + +static void WallClockInit(void) +{ + u16 ime; + + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + ime = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = ime; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + SetVBlankCallback(WallClockVblankCallback); + SetMainCallback2(WallClockMainCallback); + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG3CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | + DISPCNT_BG3_ON | DISPCNT_OBJ_ON; +} + +#define tMinuteHandAngle data[0] +#define tHourHandAngle data[1] +#define tHours data[2] +#define tMinutes data[3] +#define tMvmtDir data[4] +#define tPeriod data[5] +#define tMvmtSpeed data[6] + +//Allow player to set the clock +void CB2_StartWallClock(void) +{ + u8 taskId; + u8 spriteId; + + LoadWallClockGraphics(); + LZ77UnCompVram(&gUnknown_08E954B0, (void *)(VRAM + 0x3800)); + + taskId = CreateTask(Task_SetClock1, 0); + gTasks[taskId].tHours = 10; + gTasks[taskId].tMinutes = 0; + gTasks[taskId].tMvmtDir = MVMT_NONE; + gTasks[taskId].tPeriod = PERIOD_AM; + gTasks[taskId].tMvmtSpeed = 0; + gTasks[taskId].tMinuteHandAngle = 0; + gTasks[taskId].tHourHandAngle = 300; + + spriteId = CreateSprite(&gSpriteTemplate_83F7AD8, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 1); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteId].oam.matrixNum = 0; + + spriteId = CreateSprite(&gSpriteTemplate_83F7AF0, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 0); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteId].oam.matrixNum = 1; + + spriteId = CreateSprite(&gSpriteTemplate_83F7B28, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 2); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 45; + + spriteId = CreateSprite(&gSpriteTemplate_83F7B40, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 2); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 90; + + WallClockInit(); +} + +//View, but don't set, the clock +void CB2_ViewWallClock(void) +{ + u8 taskId; + s16 angle1; + s16 angle2; + u8 spriteId; + + LoadWallClockGraphics(); + LZ77UnCompVram(gUnknown_08E95774, (void *)(VRAM + 0x3800)); + + taskId = CreateTask(Task_ViewClock1, 0); + InitClockWithRtc(taskId); + if (gTasks[taskId].tPeriod == PERIOD_AM) + { + angle1 = 45; + angle2 = 90; + } + else + { + angle1 = 90; + angle2 = 135; + } + + spriteId = CreateSprite(&gSpriteTemplate_83F7AD8, 120, 80, 1); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteId].oam.matrixNum = 0; + + spriteId = CreateSprite(&gSpriteTemplate_83F7AF0, 120, 80, 0); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteId].oam.matrixNum = 1; + + spriteId = CreateSprite(&gSpriteTemplate_83F7B28, 120, 80, 2); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = angle1; + + spriteId = CreateSprite(&gSpriteTemplate_83F7B40, 120, 80, 2); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = angle2; + + WallClockInit(); +} + +static void WallClockMainCallback(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void Task_SetClock1(u8 taskId) +{ + if (!gPaletteFade.active) + gTasks[taskId].func = Task_SetClock2; +} + +//Handle keypresses when setting clock +static void Task_SetClock2(u8 taskId) +{ + if (gTasks[taskId].tMinuteHandAngle % 6) + { + gTasks[taskId].tMinuteHandAngle = CalcNewMinHandAngle( + gTasks[taskId].tMinuteHandAngle, + gTasks[taskId].tMvmtDir, + gTasks[taskId].tMvmtSpeed); + } + else + { + gTasks[taskId].tMinuteHandAngle = gTasks[taskId].tMinutes * 6; + gTasks[taskId].tHourHandAngle = (gTasks[taskId].tHours % 12) * 30 + (gTasks[taskId].tMinutes / 10) * 5; + if (gMain.newKeys & A_BUTTON) + { + gTasks[taskId].func = Task_SetClock3; + return; + } + else + { + gTasks[taskId].tMvmtDir = gMain.newKeys & A_BUTTON; + if (gMain.heldKeys & DPAD_LEFT) + gTasks[taskId].tMvmtDir = MVMT_BACKWARD; + if (gMain.heldKeys & DPAD_RIGHT) + gTasks[taskId].tMvmtDir = MVMT_FORWARD; + if (gTasks[taskId].tMvmtDir) + { + if (gTasks[taskId].tMvmtSpeed < 0xFF) + gTasks[taskId].tMvmtSpeed++; + gTasks[taskId].tMinuteHandAngle = CalcNewMinHandAngle( + gTasks[taskId].tMinuteHandAngle, + gTasks[taskId].tMvmtDir, + gTasks[taskId].tMvmtSpeed); + AdvanceClock(taskId, gTasks[taskId].tMvmtDir); + } + else + { + gTasks[taskId].tMvmtSpeed = 0; + } + } + } +} + +//Ask player "Is this the correct time?" +static void Task_SetClock3(u8 taskId) +{ + MenuDrawTextWindow(2, 16, 27, 19); + MenuPrint(gOtherText_CorrectTimePrompt, 3, 17); + MenuDrawTextWindow(23, 8, 29, 13); + PrintMenuItems(24, 9, 2, gMenuYesNoItems); + InitMenu(0, 24, 9, 2, 1, 5); + gTasks[taskId].func = Task_SetClock4; +} + +//Get menu selection +static void Task_SetClock4(u8 taskId) +{ + switch (ProcessMenuInputNoWrap_()) + { + case 0: //YES + PlaySE(SE_SELECT); + gTasks[taskId].func = Task_SetClock5; //Move on + return; + case -1: //B button + case 1: //NO + HandleDestroyMenuCursors(); + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(23, 8, 29, 13); + MenuZeroFillWindowRect(2, 16, 27, 19); + gTasks[taskId].func = Task_SetClock2; //Go back and let player adjust clock + } +} + +//Set the time offset based on the wall clock's time +static void Task_SetClock5(u8 taskId) +{ + RtcInitLocalTimeOffset(gTasks[taskId].tHours, gTasks[taskId].tMinutes); + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = Task_SetClock6; +} + +static void Task_SetClock6(u8 taskId) +{ + if (!gPaletteFade.active) + SetMainCallback2((MainCallback)gMain.savedCallback); +} + +static void Task_ViewClock1(u8 taskId) +{ + if (!gPaletteFade.active) + gTasks[taskId].func = Task_ViewClock2; +} + +//Wait for A or B press +static void Task_ViewClock2(u8 taskId) +{ + InitClockWithRtc(taskId); + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + gTasks[taskId].func = Task_ViewClock3; +} + +static void Task_ViewClock3(u8 taskId) +{ + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = Task_ViewClock4; +} + +static void Task_ViewClock4(u8 taskId) +{ + if (!gPaletteFade.active) + SetMainCallback2((MainCallback)gMain.savedCallback); +} + +static u8 CalcMinHandDelta(u16 speed) +{ + if (speed > 60) + return 6; + else if (speed > 30) + return 3; + else if (speed > 10) + return 2; + else + return 1; +} + +//Calculates the new angle of the minute hand when setting the clock +static u16 CalcNewMinHandAngle(u16 angle, u8 direction, u8 speed) +{ + u8 delta = CalcMinHandDelta(speed); + + switch (direction) + { + case MVMT_BACKWARD: + if (angle) + angle = angle - delta; + else + angle = 360 - delta; + break; + case MVMT_FORWARD: + if (angle < 360 - delta) + angle = angle + delta; + else + angle = 0; + break; + } + return angle; +} + +//Advances clock forward or backward by 1 minute +static u8 AdvanceClock(u8 taskId, u8 direction) +{ + switch (direction) + { + case MVMT_BACKWARD: + if (gTasks[taskId].tMinutes > 0) + gTasks[taskId].tMinutes--; + else + { + gTasks[taskId].tMinutes = 59; + if (gTasks[taskId].tHours > 0) + gTasks[taskId].tHours--; + else + gTasks[taskId].tHours = 23; + UpdateClockPeriod(taskId, direction); + } + break; + case MVMT_FORWARD: + if (gTasks[taskId].tMinutes < 59) + gTasks[taskId].tMinutes++; + else + { + gTasks[taskId].tMinutes = 0; + if (gTasks[taskId].tHours < 23) + gTasks[taskId].tHours++; + else + gTasks[taskId].tHours = 0; + UpdateClockPeriod(taskId, direction); + } + break; + } + return 0; +} + +//Updates the clock period (AM/PM) if it needs to change +static void UpdateClockPeriod(u8 taskId, u8 direction) +{ + u8 hours = gTasks[taskId].tHours; + + switch (direction) + { + case MVMT_BACKWARD: + switch (hours) + { + case 11: + gTasks[taskId].tPeriod = PERIOD_AM; + break; + case 23: + gTasks[taskId].tPeriod = PERIOD_PM; + break; + } + break; + case MVMT_FORWARD: + switch (hours) + { + case 0: + gTasks[taskId].tPeriod = PERIOD_AM; + break; + case 12: + gTasks[taskId].tPeriod = PERIOD_PM; + break; + } + break; + } +} + +static void InitClockWithRtc(u8 taskId) +{ + RtcCalcLocalTime(); + gTasks[taskId].tHours = gLocalTime.hours; + gTasks[taskId].tMinutes = gLocalTime.minutes; + gTasks[taskId].tMinuteHandAngle = gTasks[taskId].tMinutes * 6; + gTasks[taskId].tHourHandAngle = (gTasks[taskId].tHours % 12) * 30 + (gTasks[taskId].tMinutes / 10) * 5; + if (gLocalTime.hours <= 11) + gTasks[taskId].tPeriod = PERIOD_AM; + else + gTasks[taskId].tPeriod = PERIOD_PM; +} + +static const s8 gClockHandCoords[][2] = +{ + { 0, -24}, + { 1, -25}, + { 1, -25}, + { 2, -25}, + { 2, -25}, + { 2, -25}, + { 3, -24}, + { 3, -25}, + { 4, -25}, + { 4, -25}, + { 4, -25}, + { 5, -25}, + { 5, -25}, + { 6, -24}, + { 6, -24}, + { 6, -24}, + { 7, -24}, + { 7, -24}, + { 7, -24}, + { 8, -24}, + { 8, -24}, + { 9, -24}, + { 9, -24}, + { 10, -23}, + { 10, -23}, + { 11, -22}, + { 11, -22}, + { 11, -22}, + { 12, -22}, + { 12, -21}, + { 13, -21}, + { 13, -21}, + { 13, -21}, + { 14, -21}, + { 14, -21}, + { 14, -20}, + { 14, -20}, + { 15, -20}, + { 15, -19}, + { 16, -19}, + { 16, -19}, + { 16, -19}, + { 16, -18}, + { 16, -18}, + { 17, -18}, + { 17, -17}, + { 17, -17}, + { 18, -17}, + { 18, -17}, + { 18, -16}, + { 18, -16}, + { 19, -16}, + { 19, -15}, + { 19, -15}, + { 20, -15}, + { 20, -14}, + { 20, -14}, + { 20, -13}, + { 20, -13}, + { 21, -13}, + { 21, -13}, + { 21, -12}, + { 22, -12}, + { 22, -12}, + { 22, -11}, + { 22, -11}, + { 22, -10}, + { 23, -10}, + { 23, -9}, + { 23, -9}, + { 23, -9}, + { 23, -9}, + { 23, -8}, + { 23, -8}, + { 23, -7}, + { 23, -7}, + { 23, -6}, + { 24, -6}, + { 24, -6}, + { 25, -5}, + { 25, -5}, + { 24, -4}, + { 25, -4}, + { 24, -3}, + { 25, -3}, + { 25, -3}, + { 25, -2}, + { 25, -2}, + { 24, -1}, + { 25, -1}, + { 24, 0}, + { 24, 0}, + { 24, 0}, + { 24, 1}, + { 24, 1}, + { 25, 2}, + { 24, 2}, + { 25, 2}, + { 24, 3}, + { 24, 3}, + { 25, 4}, + { 24, 4}, + { 24, 5}, + { 24, 5}, + { 24, 5}, + { 24, 6}, + { 23, 6}, + { 23, 6}, + { 23, 7}, + { 23, 8}, + { 23, 8}, + { 23, 8}, + { 23, 9}, + { 23, 9}, + { 23, 10}, + { 22, 10}, + { 22, 10}, + { 22, 11}, + { 22, 11}, + { 22, 11}, + { 22, 12}, + { 21, 12}, + { 21, 12}, + { 21, 13}, + { 20, 13}, + { 20, 13}, + { 19, 13}, + { 19, 13}, + { 19, 14}, + { 19, 14}, + { 19, 15}, + { 19, 15}, + { 18, 15}, + { 18, 16}, + { 17, 16}, + { 17, 16}, + { 17, 17}, + { 17, 17}, + { 16, 17}, + { 16, 18}, + { 16, 18}, + { 15, 18}, + { 14, 18}, + { 15, 19}, + { 14, 19}, + { 14, 19}, + { 13, 19}, + { 13, 20}, + { 13, 20}, + { 13, 20}, + { 12, 20}, + { 12, 20}, + { 12, 21}, + { 11, 21}, + { 11, 21}, + { 11, 21}, + { 10, 21}, + { 10, 22}, + { 10, 22}, + { 9, 22}, + { 9, 22}, + { 8, 22}, + { 7, 22}, + { 7, 23}, + { 7, 23}, + { 6, 23}, + { 6, 23}, + { 5, 23}, + { 5, 23}, + { 5, 24}, + { 4, 24}, + { 4, 24}, + { 4, 24}, + { 3, 24}, + { 2, 24}, + { 2, 24}, + { 1, 24}, + { 1, 24}, + { 0, 24}, + { 0, 24}, + { -1, 23}, + { 0, 24}, + { 0, 24}, + { -1, 24}, + { -1, 24}, + { -2, 24}, + { -2, 24}, + { -3, 24}, + { -3, 24}, + { -4, 24}, + { -4, 24}, + { -5, 24}, + { -5, 23}, + { -5, 23}, + { -6, 23}, + { -6, 23}, + { -7, 23}, + { -7, 23}, + { -7, 23}, + { -8, 23}, + { -8, 22}, + { -9, 22}, + { -9, 22}, + {-10, 22}, + {-10, 22}, + {-10, 21}, + {-11, 21}, + {-11, 21}, + {-11, 21}, + {-11, 20}, + {-12, 20}, + {-12, 20}, + {-13, 20}, + {-13, 20}, + {-13, 19}, + {-14, 19}, + {-14, 19}, + {-14, 19}, + {-14, 18}, + {-15, 18}, + {-15, 18}, + {-15, 17}, + {-16, 17}, + {-16, 17}, + {-17, 17}, + {-17, 16}, + {-17, 16}, + {-18, 16}, + {-17, 15}, + {-18, 15}, + {-18, 15}, + {-19, 15}, + {-19, 14}, + {-19, 14}, + {-19, 13}, + {-19, 13}, + {-20, 13}, + {-20, 12}, + {-20, 12}, + {-21, 12}, + {-21, 12}, + {-21, 11}, + {-21, 11}, + {-21, 10}, + {-21, 10}, + {-21, 9}, + {-22, 9}, + {-22, 9}, + {-22, 8}, + {-22, 8}, + {-22, 7}, + {-23, 7}, + {-23, 7}, + {-23, 6}, + {-23, 6}, + {-23, 5}, + {-24, 5}, + {-23, 4}, + {-23, 4}, + {-24, 4}, + {-24, 4}, + {-24, 3}, + {-24, 3}, + {-24, 2}, + {-24, 2}, + {-24, 1}, + {-24, 1}, + {-24, 1}, + {-24, 0}, + {-25, 0}, + {-24, -1}, + {-25, -1}, + {-24, -1}, + {-24, -2}, + {-24, -2}, + {-24, -3}, + {-24, -3}, + {-24, -4}, + {-24, -4}, + {-24, -4}, + {-24, -5}, + {-24, -5}, + {-24, -6}, + {-24, -6}, + {-23, -6}, + {-23, -7}, + {-23, -7}, + {-23, -8}, + {-23, -8}, + {-23, -9}, + {-23, -9}, + {-22, -9}, + {-22, -9}, + {-22, -10}, + {-22, -10}, + {-21, -10}, + {-21, -11}, + {-22, -11}, + {-22, -12}, + {-21, -12}, + {-21, -13}, + {-21, -13}, + {-20, -13}, + {-21, -14}, + {-20, -14}, + {-20, -14}, + {-19, -14}, + {-19, -15}, + {-19, -15}, + {-18, -16}, + {-18, -16}, + {-18, -16}, + {-18, -17}, + {-18, -17}, + {-17, -17}, + {-17, -18}, + {-17, -18}, + {-16, -18}, + {-16, -18}, + {-16, -19}, + {-16, -19}, + {-15, -19}, + {-15, -19}, + {-15, -20}, + {-14, -20}, + {-14, -20}, + {-14, -21}, + {-13, -21}, + {-13, -21}, + {-13, -21}, + {-12, -21}, + {-12, -22}, + {-11, -22}, + {-11, -22}, + {-11, -22}, + {-10, -22}, + {-10, -22}, + { -9, -22}, + { -9, -23}, + { -9, -23}, + { -8, -23}, + { -8, -23}, + { -7, -23}, + { -7, -23}, + { -7, -24}, + { -6, -24}, + { -6, -24}, + { -5, -24}, + { -5, -24}, + { -4, -24}, + { -4, -24}, + { -4, -24}, + { -4, -25}, + { -3, -25}, + { -2, -25}, + { -2, -24}, + { -2, -24}, + { -1, -25}, + { -1, -25}, + { 0, -25}, +}; + +static void sub_810B05C(struct Sprite *sprite) +{ + u16 angle; + s16 sin; + s16 cos; + u16 x; + u16 y; + + angle = gTasks[sprite->data0].tMinuteHandAngle; + sin = Sin2(angle) / 16; + cos = Cos2(angle) / 16; + SetOamMatrix(0, cos, sin, -sin, cos); + x = gClockHandCoords[angle][0]; + y = gClockHandCoords[angle][1]; + + //Manual sign extension + if (x > 0x80) + x |= 0xFF00; + if (y > 0x80) + y |= 0xFF00; + + sprite->pos2.x = x; + sprite->pos2.y = y; +} + +static void sub_810B0F4(struct Sprite *sprite) +{ + u16 angle; + s16 sin; + s16 cos; + u16 x; + u16 y; + + angle = gTasks[sprite->data0].tHourHandAngle; + sin = Sin2(angle) / 16; + cos = Cos2(angle) / 16; + SetOamMatrix(1, cos, sin, -sin, cos); + x = gClockHandCoords[angle][0]; + y = gClockHandCoords[angle][1]; + + //Manual sign extension + if (x > 0x80) + x |= 0xFF00; + if (y > 0x80) + y |= 0xFF00; + + sprite->pos2.x = x; + sprite->pos2.y = y; +} + +static void sub_810B18C(struct Sprite *sprite) +{ + s16 sin; + s16 cos; + + if (gTasks[sprite->data0].tPeriod != PERIOD_AM) + { + if (sprite->data1 >= 60 && sprite->data1 < 90) + sprite->data1 += 5; + if (sprite->data1 < 60) + sprite->data1++; + } + else + { + if (sprite->data1 > 45 && sprite->data1 <= 75) + sprite->data1 -= 5; + if (sprite->data1 > 75) + sprite->data1--; + } + cos = Cos2((u16)sprite->data1); + sprite->pos2.x = cos * 30 / 4096; + sin = Sin2((u16)sprite->data1); + sprite->pos2.y = sin * 30 / 4096; +} + +static void sub_810B230(struct Sprite *sprite) +{ + s16 sin; + s16 cos; + + if (gTasks[sprite->data0].tPeriod != PERIOD_AM) + { + if (sprite->data1 >= 105 && sprite->data1 < 135) + sprite->data1 += 5; + if (sprite->data1 < 105) + sprite->data1++; + } + else + { + if (sprite->data1 > 90 && sprite->data1 <= 120) + sprite->data1 -= 5; + if (sprite->data1 > 120) + sprite->data1--; + } + cos = Cos2((u16)sprite->data1); + sprite->pos2.x = cos * 30 / 4096; + sin = Sin2((u16)sprite->data1); + sprite->pos2.y = sin * 30 / 4096; +} diff --git a/src/field/wild_encounter.c b/src/field/wild_encounter.c new file mode 100644 index 000000000..96f47c067 --- /dev/null +++ b/src/field/wild_encounter.c @@ -0,0 +1,3568 @@ +#include "global.h" +#include "wild_encounter.h" +#include "abilities.h" +#include "battle_setup.h" +#include "event_data.h" +#include "field_player_avatar.h" +#include "fieldmap.h" +#include "metatile_behavior.h" +#include "pokeblock.h" +#include "rng.h" +#include "roamer.h" +#include "rom4.h" +#include "safari_zone.h" +#include "script.h" +#include "species.h" +#include "tv.h" + +const struct WildPokemon PetalburgCity_WaterMons [] = +{ + {20, 30, SPECIES_MARILL}, + {10, 20, SPECIES_MARILL}, + {30, 35, SPECIES_MARILL}, + {5, 10, SPECIES_MARILL}, + {5, 10, SPECIES_MARILL}, +}; +const struct WildPokemonInfo PetalburgCity_WaterMonsInfo = {1, PetalburgCity_WaterMons}; + +const struct WildPokemon PetalburgCity_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_GOLDEEN}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_GOLDEEN}, + {10, 30, SPECIES_CORPHISH}, + {25, 30, SPECIES_CORPHISH}, + {30, 35, SPECIES_CORPHISH}, + {20, 25, SPECIES_CORPHISH}, + {35, 40, SPECIES_CORPHISH}, + {40, 45, SPECIES_CORPHISH}, +}; +const struct WildPokemonInfo PetalburgCity_FishingMonsInfo = {10, PetalburgCity_FishingMons}; + +const struct WildPokemon SlateportCity_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo SlateportCity_WaterMonsInfo = {4, SlateportCity_WaterMons}; + +const struct WildPokemon SlateportCity_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo SlateportCity_FishingMonsInfo = {10, SlateportCity_FishingMons}; + +const struct WildPokemon LilycoveCity_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo LilycoveCity_WaterMonsInfo = {4, LilycoveCity_WaterMons}; + +const struct WildPokemon LilycoveCity_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_STARYU}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo LilycoveCity_FishingMonsInfo = {10, LilycoveCity_FishingMons}; + +const struct WildPokemon MossdeepCity_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo MossdeepCity_WaterMonsInfo = {4, MossdeepCity_WaterMons}; + +const struct WildPokemon MossdeepCity_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo MossdeepCity_FishingMonsInfo = {10, MossdeepCity_FishingMons}; + +const struct WildPokemon SootopolisCity_WaterMons [] = +{ + {5, 35, SPECIES_MAGIKARP}, + {10, 30, SPECIES_MAGIKARP}, + {15, 25, SPECIES_MAGIKARP}, + {25, 30, SPECIES_MAGIKARP}, + {25, 30, SPECIES_MAGIKARP}, +}; +const struct WildPokemonInfo SootopolisCity_WaterMonsInfo = {1, SootopolisCity_WaterMons}; + +const struct WildPokemon SootopolisCity_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, +#ifdef SAPPHIRE + {5, 10, SPECIES_TENTACOOL}, +#else + {10, 15, SPECIES_MAGIKARP}, +#endif + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_MAGIKARP}, + {30, 35, SPECIES_MAGIKARP}, + {30, 35, SPECIES_MAGIKARP}, + {35, 40, SPECIES_GYARADOS}, + {35, 45, SPECIES_GYARADOS}, + {5, 45, SPECIES_GYARADOS}, +}; +const struct WildPokemonInfo SootopolisCity_FishingMonsInfo = {10, SootopolisCity_FishingMons}; + +const struct WildPokemon EverGrandeCity_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo EverGrandeCity_WaterMonsInfo = {4, EverGrandeCity_WaterMons}; + +const struct WildPokemon EverGrandeCity_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_LUVDISC}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_LUVDISC}, + {30, 35, SPECIES_WAILMER}, + {30, 35, SPECIES_CORSOLA}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo EverGrandeCity_FishingMonsInfo = {10, EverGrandeCity_FishingMons}; + +const struct WildPokemon MeteorFalls_1F_1R_LandMons [] = +{ + {16, 16, SPECIES_ZUBAT}, + {17, 17, SPECIES_ZUBAT}, + {18, 18, SPECIES_ZUBAT}, + {15, 15, SPECIES_ZUBAT}, + {14, 14, SPECIES_ZUBAT}, +#ifdef SAPPHIRE + {16, 16, SPECIES_LUNATONE}, + {18, 18, SPECIES_LUNATONE}, + {14, 14, SPECIES_LUNATONE}, +#else + {16, 16, SPECIES_SOLROCK}, + {18, 18, SPECIES_SOLROCK}, + {14, 14, SPECIES_SOLROCK}, +#endif + {19, 19, SPECIES_ZUBAT}, + {20, 20, SPECIES_ZUBAT}, + {19, 19, SPECIES_ZUBAT}, + {20, 20, SPECIES_ZUBAT}, +}; +const struct WildPokemonInfo MeteorFalls_1F_1R_LandMonsInfo = {10, MeteorFalls_1F_1R_LandMons}; + +const struct WildPokemon MeteorFalls_1F_1R_WaterMons [] = +{ + {5, 35, SPECIES_ZUBAT}, + {30, 35, SPECIES_ZUBAT}, +#ifdef SAPPHIRE + {25, 35, SPECIES_LUNATONE}, + {15, 25, SPECIES_LUNATONE}, + {5, 15, SPECIES_LUNATONE}, +#else + {25, 35, SPECIES_SOLROCK}, + {15, 25, SPECIES_SOLROCK}, + {5, 15, SPECIES_SOLROCK}, +#endif +}; +const struct WildPokemonInfo MeteorFalls_1F_1R_WaterMonsInfo = {4, MeteorFalls_1F_1R_WaterMons}; + +const struct WildPokemon MeteorFalls_1F_1R_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_GOLDEEN}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_GOLDEEN}, + {10, 30, SPECIES_BARBOACH}, + {25, 30, SPECIES_BARBOACH}, + {30, 35, SPECIES_BARBOACH}, + {20, 25, SPECIES_BARBOACH}, + {35, 40, SPECIES_BARBOACH}, + {40, 45, SPECIES_BARBOACH}, +}; +const struct WildPokemonInfo MeteorFalls_1F_1R_FishingMonsInfo = {30, MeteorFalls_1F_1R_FishingMons}; + +const struct WildPokemon MeteorFalls_1F_2R_LandMons [] = +{ + {33, 33, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, +#ifdef SAPPHIRE + {35, 35, SPECIES_LUNATONE}, + {33, 33, SPECIES_LUNATONE}, + {37, 37, SPECIES_LUNATONE}, +#else + {35, 35, SPECIES_SOLROCK}, + {33, 33, SPECIES_SOLROCK}, + {37, 37, SPECIES_SOLROCK}, +#endif + {35, 35, SPECIES_GOLBAT}, +#ifdef SAPPHIRE + {39, 39, SPECIES_LUNATONE}, +#else + {39, 39, SPECIES_SOLROCK}, +#endif + {38, 38, SPECIES_GOLBAT}, + {40, 40, SPECIES_GOLBAT}, + {38, 38, SPECIES_GOLBAT}, + {40, 40, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo MeteorFalls_1F_2R_LandMonsInfo = {10, MeteorFalls_1F_2R_LandMons}; + +const struct WildPokemon MeteorFalls_1F_2R_WaterMons [] = +{ + {30, 35, SPECIES_GOLBAT}, + {30, 35, SPECIES_GOLBAT}, +#ifdef SAPPHIRE + {25, 35, SPECIES_LUNATONE}, + {15, 25, SPECIES_LUNATONE}, + {5, 15, SPECIES_LUNATONE}, +#else + {25, 35, SPECIES_SOLROCK}, + {15, 25, SPECIES_SOLROCK}, + {5, 15, SPECIES_SOLROCK}, +#endif +}; +const struct WildPokemonInfo MeteorFalls_1F_2R_WaterMonsInfo = {4, MeteorFalls_1F_2R_WaterMons}; + +const struct WildPokemon MeteorFalls_1F_2R_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_GOLDEEN}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_GOLDEEN}, + {10, 30, SPECIES_BARBOACH}, + {25, 30, SPECIES_BARBOACH}, + {30, 35, SPECIES_BARBOACH}, + {30, 35, SPECIES_WHISCASH}, + {35, 40, SPECIES_WHISCASH}, + {40, 45, SPECIES_WHISCASH}, +}; +const struct WildPokemonInfo MeteorFalls_1F_2R_FishingMonsInfo = {30, MeteorFalls_1F_2R_FishingMons}; + +const struct WildPokemon MeteorFalls_B1F_1R_LandMons [] = +{ + {33, 33, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, +#ifdef SAPPHIRE + {35, 35, SPECIES_LUNATONE}, + {33, 33, SPECIES_LUNATONE}, + {37, 37, SPECIES_LUNATONE}, +#else + {35, 35, SPECIES_SOLROCK}, + {33, 33, SPECIES_SOLROCK}, + {37, 37, SPECIES_SOLROCK}, +#endif + {35, 35, SPECIES_GOLBAT}, +#ifdef SAPPHIRE + {39, 39, SPECIES_LUNATONE}, +#else + {39, 39, SPECIES_SOLROCK}, +#endif + {38, 38, SPECIES_GOLBAT}, + {40, 40, SPECIES_GOLBAT}, + {38, 38, SPECIES_GOLBAT}, + {40, 40, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo MeteorFalls_B1F_1R_LandMonsInfo = {10, MeteorFalls_B1F_1R_LandMons}; + +const struct WildPokemon MeteorFalls_B1F_1R_WaterMons [] = +{ + {30, 35, SPECIES_GOLBAT}, + {30, 35, SPECIES_GOLBAT}, +#ifdef SAPPHIRE + {25, 35, SPECIES_LUNATONE}, + {15, 25, SPECIES_LUNATONE}, + {5, 15, SPECIES_LUNATONE}, +#else + {25, 35, SPECIES_SOLROCK}, + {15, 25, SPECIES_SOLROCK}, + {5, 15, SPECIES_SOLROCK}, +#endif +}; +const struct WildPokemonInfo MeteorFalls_B1F_1R_WaterMonsInfo = {4, MeteorFalls_B1F_1R_WaterMons}; + +const struct WildPokemon MeteorFalls_B1F_1R_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_GOLDEEN}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_GOLDEEN}, + {10, 30, SPECIES_BARBOACH}, + {25, 30, SPECIES_BARBOACH}, + {30, 35, SPECIES_BARBOACH}, + {30, 35, SPECIES_WHISCASH}, + {35, 40, SPECIES_WHISCASH}, + {40, 45, SPECIES_WHISCASH}, +}; +const struct WildPokemonInfo MeteorFalls_B1F_1R_FishingMonsInfo = {30, MeteorFalls_B1F_1R_FishingMons}; + +const struct WildPokemon MeteorFalls_B1F_2R_LandMons [] = +{ + {33, 33, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {30, 30, SPECIES_BAGON}, +#ifdef SAPPHIRE + {35, 35, SPECIES_LUNATONE}, +#else + {35, 35, SPECIES_SOLROCK}, +#endif + {35, 35, SPECIES_BAGON}, +#ifdef SAPPHIRE + {37, 37, SPECIES_LUNATONE}, +#else + {37, 37, SPECIES_SOLROCK}, +#endif + {25, 25, SPECIES_BAGON}, +#ifdef SAPPHIRE + {39, 39, SPECIES_LUNATONE}, +#else + {39, 39, SPECIES_SOLROCK}, +#endif + {38, 38, SPECIES_GOLBAT}, + {40, 40, SPECIES_GOLBAT}, + {38, 38, SPECIES_GOLBAT}, + {40, 40, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo MeteorFalls_B1F_2R_LandMonsInfo = {10, MeteorFalls_B1F_2R_LandMons}; + +const struct WildPokemon MeteorFalls_B1F_2R_WaterMons [] = +{ + {30, 35, SPECIES_GOLBAT}, + {30, 35, SPECIES_GOLBAT}, +#ifdef SAPPHIRE + {25, 35, SPECIES_LUNATONE}, + {15, 25, SPECIES_LUNATONE}, + {5, 15, SPECIES_LUNATONE}, +#else + {25, 35, SPECIES_SOLROCK}, + {15, 25, SPECIES_SOLROCK}, + {5, 15, SPECIES_SOLROCK}, +#endif +}; +const struct WildPokemonInfo MeteorFalls_B1F_2R_WaterMonsInfo = {4, MeteorFalls_B1F_2R_WaterMons}; + +const struct WildPokemon MeteorFalls_B1F_2R_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_GOLDEEN}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_GOLDEEN}, + {10, 30, SPECIES_BARBOACH}, + {25, 30, SPECIES_BARBOACH}, + {30, 35, SPECIES_BARBOACH}, + {30, 35, SPECIES_WHISCASH}, + {35, 40, SPECIES_WHISCASH}, + {40, 45, SPECIES_WHISCASH}, +}; +const struct WildPokemonInfo MeteorFalls_B1F_2R_FishingMonsInfo = {30, MeteorFalls_B1F_2R_FishingMons}; + +const struct WildPokemon RusturfTunnel_LandMons [] = +{ + {6, 6, SPECIES_WHISMUR}, + {7, 7, SPECIES_WHISMUR}, + {6, 6, SPECIES_WHISMUR}, + {6, 6, SPECIES_WHISMUR}, + {7, 7, SPECIES_WHISMUR}, + {7, 7, SPECIES_WHISMUR}, + {5, 5, SPECIES_WHISMUR}, + {8, 8, SPECIES_WHISMUR}, + {5, 5, SPECIES_WHISMUR}, + {8, 8, SPECIES_WHISMUR}, + {5, 5, SPECIES_WHISMUR}, + {8, 8, SPECIES_WHISMUR}, +}; +const struct WildPokemonInfo RusturfTunnel_LandMonsInfo = {10, RusturfTunnel_LandMons}; + +const struct WildPokemon GraniteCave_1F_LandMons [] = +{ + {7, 7, SPECIES_ZUBAT}, + {8, 8, SPECIES_MAKUHITA}, + {7, 7, SPECIES_MAKUHITA}, + {8, 8, SPECIES_ZUBAT}, + {9, 9, SPECIES_MAKUHITA}, + {8, 8, SPECIES_ABRA}, + {10, 10, SPECIES_MAKUHITA}, + {6, 6, SPECIES_MAKUHITA}, + {7, 7, SPECIES_GEODUDE}, + {8, 8, SPECIES_GEODUDE}, + {6, 6, SPECIES_GEODUDE}, + {9, 9, SPECIES_GEODUDE}, +}; +const struct WildPokemonInfo GraniteCave_1F_LandMonsInfo = {10, GraniteCave_1F_LandMons}; + +const struct WildPokemon GraniteCave_B1F_LandMons [] = +{ + {9, 9, SPECIES_ZUBAT}, + {10, 10, SPECIES_ARON}, + {9, 9, SPECIES_ARON}, + {11, 11, SPECIES_ARON}, + {10, 10, SPECIES_ZUBAT}, + {9, 9, SPECIES_ABRA}, + {10, 10, SPECIES_MAKUHITA}, + {11, 11, SPECIES_MAKUHITA}, +#ifdef SAPPHIRE + {10, 10, SPECIES_SABLEYE}, + {10, 10, SPECIES_SABLEYE}, + {9, 9, SPECIES_SABLEYE}, + {11, 11, SPECIES_SABLEYE}, +#else + {10, 10, SPECIES_MAWILE}, + {10, 10, SPECIES_MAWILE}, + {9, 9, SPECIES_MAWILE}, + {11, 11, SPECIES_MAWILE}, +#endif +}; +const struct WildPokemonInfo GraniteCave_B1F_LandMonsInfo = {10, GraniteCave_B1F_LandMons}; + +const struct WildPokemon GraniteCave_B2F_LandMons [] = +{ + {10, 10, SPECIES_ZUBAT}, + {11, 11, SPECIES_ARON}, + {10, 10, SPECIES_ARON}, + {11, 11, SPECIES_ZUBAT}, + {12, 12, SPECIES_ARON}, + {10, 10, SPECIES_ABRA}, +#ifdef SAPPHIRE + {10, 10, SPECIES_SABLEYE}, + {11, 11, SPECIES_SABLEYE}, + {12, 12, SPECIES_SABLEYE}, + {10, 10, SPECIES_SABLEYE}, + {12, 12, SPECIES_SABLEYE}, + {10, 10, SPECIES_SABLEYE}, +#else + {10, 10, SPECIES_MAWILE}, + {11, 11, SPECIES_MAWILE}, + {12, 12, SPECIES_MAWILE}, + {10, 10, SPECIES_MAWILE}, + {12, 12, SPECIES_MAWILE}, + {10, 10, SPECIES_MAWILE}, +#endif +}; +const struct WildPokemonInfo GraniteCave_B2F_LandMonsInfo = {10, GraniteCave_B2F_LandMons}; + +const struct WildPokemon GraniteCave_B2F_RockSmashMons [] = +{ + {10, 15, SPECIES_GEODUDE}, + {10, 20, SPECIES_NOSEPASS}, + {5, 10, SPECIES_GEODUDE}, + {15, 20, SPECIES_GEODUDE}, + {15, 20, SPECIES_GEODUDE}, +}; +const struct WildPokemonInfo GraniteCave_B2F_RockSmashMonsInfo = {20, GraniteCave_B2F_RockSmashMons}; + +const struct WildPokemon GraniteCave_StevensRoom_LandMons [] = +{ + {7, 7, SPECIES_ZUBAT}, + {8, 8, SPECIES_MAKUHITA}, + {7, 7, SPECIES_MAKUHITA}, + {8, 8, SPECIES_ZUBAT}, + {9, 9, SPECIES_MAKUHITA}, + {8, 8, SPECIES_ABRA}, + {10, 10, SPECIES_MAKUHITA}, + {6, 6, SPECIES_MAKUHITA}, + {7, 7, SPECIES_ARON}, + {8, 8, SPECIES_ARON}, + {7, 7, SPECIES_ARON}, + {8, 8, SPECIES_ARON}, +}; +const struct WildPokemonInfo GraniteCave_StevensRoom_LandMonsInfo = {10, GraniteCave_StevensRoom_LandMons}; + +const struct WildPokemon PetalburgWoods_LandMons [] = +{ + {5, 5, SPECIES_ZIGZAGOON}, + {5, 5, SPECIES_WURMPLE}, + {5, 5, SPECIES_SHROOMISH}, + {6, 6, SPECIES_ZIGZAGOON}, + {5, 5, SPECIES_SILCOON}, + {5, 5, SPECIES_CASCOON}, + {6, 6, SPECIES_WURMPLE}, + {6, 6, SPECIES_SHROOMISH}, + {5, 5, SPECIES_TAILLOW}, + {5, 5, SPECIES_SLAKOTH}, + {6, 6, SPECIES_TAILLOW}, + {6, 6, SPECIES_SLAKOTH}, +}; +const struct WildPokemonInfo PetalburgWoods_LandMonsInfo = {20, PetalburgWoods_LandMons}; + +//Jagged Pass Pokemon are 2 levels higher on Sapphire +#ifdef SAPPHIRE +#define JAGGED_PASS_LEVEL_DIFF 2 +#else +#define JAGGED_PASS_LEVEL_DIFF 0 +#endif + +const struct WildPokemon JaggedPass_LandMons [] = +{ + {19 + JAGGED_PASS_LEVEL_DIFF, 19 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, + {19 + JAGGED_PASS_LEVEL_DIFF, 19 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, + {19 + JAGGED_PASS_LEVEL_DIFF, 19 + JAGGED_PASS_LEVEL_DIFF, SPECIES_MACHOP}, + {18 + JAGGED_PASS_LEVEL_DIFF, 18 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, + {18 + JAGGED_PASS_LEVEL_DIFF, 18 + JAGGED_PASS_LEVEL_DIFF, SPECIES_SPOINK}, + {18 + JAGGED_PASS_LEVEL_DIFF, 18 + JAGGED_PASS_LEVEL_DIFF, SPECIES_MACHOP}, + {19 + JAGGED_PASS_LEVEL_DIFF, 19 + JAGGED_PASS_LEVEL_DIFF, SPECIES_SPOINK}, + {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_MACHOP}, + {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, + {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_SPOINK}, + {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, + {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_SPOINK}, +}; +const struct WildPokemonInfo JaggedPass_LandMonsInfo = {20, JaggedPass_LandMons}; + +const struct WildPokemon FieryPath_LandMons [] = +{ + {15, 15, SPECIES_NUMEL}, +#ifdef SAPPHIRE + {15, 15, SPECIES_GRIMER}, +#else + {15, 15, SPECIES_KOFFING}, +#endif + {16, 16, SPECIES_NUMEL}, + {15, 15, SPECIES_MACHOP}, + {15, 15, SPECIES_TORKOAL}, + {15, 15, SPECIES_SLUGMA}, +#ifdef SAPPHIRE + {16, 16, SPECIES_GRIMER}, +#else + {16, 16, SPECIES_KOFFING}, +#endif + {16, 16, SPECIES_MACHOP}, + {14, 14, SPECIES_TORKOAL}, + {16, 16, SPECIES_TORKOAL}, +#ifdef SAPPHIRE + {14, 14, SPECIES_KOFFING}, + {14, 14, SPECIES_KOFFING}, +#else + {14, 14, SPECIES_GRIMER}, + {14, 14, SPECIES_GRIMER}, +#endif +}; +const struct WildPokemonInfo FieryPath_LandMonsInfo = {10, FieryPath_LandMons}; + +const struct WildPokemon MtPyre_1F_LandMons [] = +{ +#ifdef SAPPHIRE + {27, 27, SPECIES_SHUPPET}, + {28, 28, SPECIES_SHUPPET}, + {26, 26, SPECIES_SHUPPET}, + {25, 25, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, + {24, 24, SPECIES_SHUPPET}, + {23, 23, SPECIES_SHUPPET}, + {22, 22, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, + {24, 24, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, + {24, 24, SPECIES_SHUPPET}, +#else + {27, 27, SPECIES_DUSKULL}, + {28, 28, SPECIES_DUSKULL}, + {26, 26, SPECIES_DUSKULL}, + {25, 25, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, + {24, 24, SPECIES_DUSKULL}, + {23, 23, SPECIES_DUSKULL}, + {22, 22, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, + {24, 24, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, + {24, 24, SPECIES_DUSKULL}, +#endif +}; +const struct WildPokemonInfo MtPyre_1F_LandMonsInfo = {10, MtPyre_1F_LandMons}; + +const struct WildPokemon MtPyre_2F_LandMons [] = +{ +#ifdef SAPPHIRE + {27, 27, SPECIES_SHUPPET}, + {28, 28, SPECIES_SHUPPET}, + {26, 26, SPECIES_SHUPPET}, + {25, 25, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, + {24, 24, SPECIES_SHUPPET}, + {23, 23, SPECIES_SHUPPET}, + {22, 22, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, + {24, 24, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, + {24, 24, SPECIES_SHUPPET}, +#else + {27, 27, SPECIES_DUSKULL}, + {28, 28, SPECIES_DUSKULL}, + {26, 26, SPECIES_DUSKULL}, + {25, 25, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, + {24, 24, SPECIES_DUSKULL}, + {23, 23, SPECIES_DUSKULL}, + {22, 22, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, + {24, 24, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, + {24, 24, SPECIES_DUSKULL}, +#endif +}; +const struct WildPokemonInfo MtPyre_2F_LandMonsInfo = {10, MtPyre_2F_LandMons}; + +const struct WildPokemon MtPyre_3F_LandMons [] = +{ +#ifdef SAPPHIRE + {27, 27, SPECIES_SHUPPET}, + {28, 28, SPECIES_SHUPPET}, + {26, 26, SPECIES_SHUPPET}, + {25, 25, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, + {24, 24, SPECIES_SHUPPET}, + {23, 23, SPECIES_SHUPPET}, + {22, 22, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, + {24, 24, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, + {24, 24, SPECIES_SHUPPET}, +#else + {27, 27, SPECIES_DUSKULL}, + {28, 28, SPECIES_DUSKULL}, + {26, 26, SPECIES_DUSKULL}, + {25, 25, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, + {24, 24, SPECIES_DUSKULL}, + {23, 23, SPECIES_DUSKULL}, + {22, 22, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, + {24, 24, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, + {24, 24, SPECIES_DUSKULL}, +#endif +}; +const struct WildPokemonInfo MtPyre_3F_LandMonsInfo = {10, MtPyre_3F_LandMons}; + +const struct WildPokemon MtPyre_4F_LandMons [] = +{ +#ifdef SAPPHIRE + {27, 27, SPECIES_SHUPPET}, + {28, 28, SPECIES_SHUPPET}, + {26, 26, SPECIES_SHUPPET}, + {25, 25, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, + {24, 24, SPECIES_SHUPPET}, + {23, 23, SPECIES_SHUPPET}, + {22, 22, SPECIES_SHUPPET}, + {27, 27, SPECIES_DUSKULL}, + {27, 27, SPECIES_DUSKULL}, + {25, 25, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, +#else + {27, 27, SPECIES_DUSKULL}, + {28, 28, SPECIES_DUSKULL}, + {26, 26, SPECIES_DUSKULL}, + {25, 25, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, + {24, 24, SPECIES_DUSKULL}, + {23, 23, SPECIES_DUSKULL}, + {22, 22, SPECIES_DUSKULL}, + {27, 27, SPECIES_SHUPPET}, + {27, 27, SPECIES_SHUPPET}, + {25, 25, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, +#endif +}; +const struct WildPokemonInfo MtPyre_4F_LandMonsInfo = {10, MtPyre_4F_LandMons}; + +const struct WildPokemon MtPyre_5F_LandMons [] = +{ +#ifdef SAPPHIRE + {27, 27, SPECIES_SHUPPET}, + {28, 28, SPECIES_SHUPPET}, + {26, 26, SPECIES_SHUPPET}, + {25, 25, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, + {24, 24, SPECIES_SHUPPET}, + {23, 23, SPECIES_SHUPPET}, + {22, 22, SPECIES_SHUPPET}, + {27, 27, SPECIES_DUSKULL}, + {27, 27, SPECIES_DUSKULL}, + {25, 25, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, +#else + {27, 27, SPECIES_DUSKULL}, + {28, 28, SPECIES_DUSKULL}, + {26, 26, SPECIES_DUSKULL}, + {25, 25, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, + {24, 24, SPECIES_DUSKULL}, + {23, 23, SPECIES_DUSKULL}, + {22, 22, SPECIES_DUSKULL}, + {27, 27, SPECIES_SHUPPET}, + {27, 27, SPECIES_SHUPPET}, + {25, 25, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, +#endif +}; +const struct WildPokemonInfo MtPyre_5F_LandMonsInfo = {10, MtPyre_5F_LandMons}; + +const struct WildPokemon MtPyre_6F_LandMons [] = +{ +#ifdef SAPPHIRE + {27, 27, SPECIES_SHUPPET}, + {28, 28, SPECIES_SHUPPET}, + {26, 26, SPECIES_SHUPPET}, + {25, 25, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, + {24, 24, SPECIES_SHUPPET}, + {23, 23, SPECIES_SHUPPET}, + {22, 22, SPECIES_SHUPPET}, + {27, 27, SPECIES_DUSKULL}, + {27, 27, SPECIES_DUSKULL}, + {25, 25, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, +#else + {27, 27, SPECIES_DUSKULL}, + {28, 28, SPECIES_DUSKULL}, + {26, 26, SPECIES_DUSKULL}, + {25, 25, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, + {24, 24, SPECIES_DUSKULL}, + {23, 23, SPECIES_DUSKULL}, + {22, 22, SPECIES_DUSKULL}, + {27, 27, SPECIES_SHUPPET}, + {27, 27, SPECIES_SHUPPET}, + {25, 25, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, +#endif +}; +const struct WildPokemonInfo MtPyre_6F_LandMonsInfo = {10, MtPyre_6F_LandMons}; + +const struct WildPokemon MtPyre_Exterior_LandMons [] = +{ +#ifdef SAPPHIRE + {27, 27, SPECIES_SHUPPET}, +#else + {27, 27, SPECIES_DUSKULL}, +#endif + {27, 27, SPECIES_MEDITITE}, +#ifdef SAPPHIRE + {28, 28, SPECIES_SHUPPET}, +#else + {28, 28, SPECIES_DUSKULL}, +#endif + {29, 29, SPECIES_MEDITITE}, +#ifdef SAPPHIRE + {29, 29, SPECIES_SHUPPET}, +#else + {29, 29, SPECIES_DUSKULL}, +#endif + {27, 27, SPECIES_VULPIX}, + {29, 29, SPECIES_VULPIX}, + {25, 25, SPECIES_VULPIX}, + {27, 27, SPECIES_WINGULL}, + {27, 27, SPECIES_WINGULL}, + {26, 26, SPECIES_WINGULL}, + {28, 28, SPECIES_WINGULL}, +}; +const struct WildPokemonInfo MtPyre_Exterior_LandMonsInfo = {10, MtPyre_Exterior_LandMons}; + +const struct WildPokemon MtPyre_Summit_LandMons [] = +{ +#ifdef SAPPHIRE + {28, 28, SPECIES_SHUPPET}, + {29, 29, SPECIES_SHUPPET}, + {27, 27, SPECIES_SHUPPET}, + {26, 26, SPECIES_SHUPPET}, + {30, 30, SPECIES_SHUPPET}, + {25, 25, SPECIES_SHUPPET}, + {24, 24, SPECIES_SHUPPET}, + {28, 28, SPECIES_DUSKULL}, + {26, 26, SPECIES_DUSKULL}, + {30, 30, SPECIES_DUSKULL}, +#else + {28, 28, SPECIES_DUSKULL}, + {29, 29, SPECIES_DUSKULL}, + {27, 27, SPECIES_DUSKULL}, + {26, 26, SPECIES_DUSKULL}, + {30, 30, SPECIES_DUSKULL}, + {25, 25, SPECIES_DUSKULL}, + {24, 24, SPECIES_DUSKULL}, + {28, 28, SPECIES_SHUPPET}, + {26, 26, SPECIES_SHUPPET}, + {30, 30, SPECIES_SHUPPET}, +#endif + {28, 28, SPECIES_CHIMECHO}, + {28, 28, SPECIES_CHIMECHO}, +}; +const struct WildPokemonInfo MtPyre_Summit_LandMonsInfo = {10, MtPyre_Summit_LandMons}; + +const struct WildPokemon SeafloorCavern_Entrance_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {5, 35, SPECIES_ZUBAT}, + {30, 35, SPECIES_ZUBAT}, + {30, 35, SPECIES_GOLBAT}, + {30, 35, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo SeafloorCavern_Entrance_WaterMonsInfo = {4, SeafloorCavern_Entrance_WaterMons}; + +const struct WildPokemon SeafloorCavern_Entrance_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo SeafloorCavern_Entrance_FishingMonsInfo = {10, SeafloorCavern_Entrance_FishingMons}; + +const struct WildPokemon SeafloorCavern_Room1_LandMons [] = +{ + {30, 30, SPECIES_ZUBAT}, + {31, 31, SPECIES_ZUBAT}, + {32, 32, SPECIES_ZUBAT}, + {33, 33, SPECIES_ZUBAT}, + {28, 28, SPECIES_ZUBAT}, + {29, 29, SPECIES_ZUBAT}, + {34, 34, SPECIES_ZUBAT}, + {35, 35, SPECIES_ZUBAT}, + {34, 34, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, + {36, 36, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo SeafloorCavern_Room1_LandMonsInfo = {4, SeafloorCavern_Room1_LandMons}; + +const struct WildPokemon SeafloorCavern_Room2_LandMons [] = +{ + {30, 30, SPECIES_ZUBAT}, + {31, 31, SPECIES_ZUBAT}, + {32, 32, SPECIES_ZUBAT}, + {33, 33, SPECIES_ZUBAT}, + {28, 28, SPECIES_ZUBAT}, + {29, 29, SPECIES_ZUBAT}, + {34, 34, SPECIES_ZUBAT}, + {35, 35, SPECIES_ZUBAT}, + {34, 34, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, + {36, 36, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo SeafloorCavern_Room2_LandMonsInfo = {4, SeafloorCavern_Room2_LandMons}; + +const struct WildPokemon SeafloorCavern_Room3_LandMons [] = +{ + {30, 30, SPECIES_ZUBAT}, + {31, 31, SPECIES_ZUBAT}, + {32, 32, SPECIES_ZUBAT}, + {33, 33, SPECIES_ZUBAT}, + {28, 28, SPECIES_ZUBAT}, + {29, 29, SPECIES_ZUBAT}, + {34, 34, SPECIES_ZUBAT}, + {35, 35, SPECIES_ZUBAT}, + {34, 34, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, + {36, 36, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo SeafloorCavern_Room3_LandMonsInfo = {4, SeafloorCavern_Room3_LandMons}; + +const struct WildPokemon SeafloorCavern_Room4_LandMons [] = +{ + {30, 30, SPECIES_ZUBAT}, + {31, 31, SPECIES_ZUBAT}, + {32, 32, SPECIES_ZUBAT}, + {33, 33, SPECIES_ZUBAT}, + {28, 28, SPECIES_ZUBAT}, + {29, 29, SPECIES_ZUBAT}, + {34, 34, SPECIES_ZUBAT}, + {35, 35, SPECIES_ZUBAT}, + {34, 34, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, + {36, 36, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo SeafloorCavern_Room4_LandMonsInfo = {4, SeafloorCavern_Room4_LandMons}; + +const struct WildPokemon SeafloorCavern_Room5_LandMons [] = +{ + {30, 30, SPECIES_ZUBAT}, + {31, 31, SPECIES_ZUBAT}, + {32, 32, SPECIES_ZUBAT}, + {33, 33, SPECIES_ZUBAT}, + {28, 28, SPECIES_ZUBAT}, + {29, 29, SPECIES_ZUBAT}, + {34, 34, SPECIES_ZUBAT}, + {35, 35, SPECIES_ZUBAT}, + {34, 34, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, + {36, 36, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo SeafloorCavern_Room5_LandMonsInfo = {4, SeafloorCavern_Room5_LandMons}; + +const struct WildPokemon SeafloorCavern_Room6_LandMons [] = +{ + {30, 30, SPECIES_ZUBAT}, + {31, 31, SPECIES_ZUBAT}, + {32, 32, SPECIES_ZUBAT}, + {33, 33, SPECIES_ZUBAT}, + {28, 28, SPECIES_ZUBAT}, + {29, 29, SPECIES_ZUBAT}, + {34, 34, SPECIES_ZUBAT}, + {35, 35, SPECIES_ZUBAT}, + {34, 34, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, + {36, 36, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo SeafloorCavern_Room6_LandMonsInfo = {4, SeafloorCavern_Room6_LandMons}; + +const struct WildPokemon SeafloorCavern_Room6_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {5, 35, SPECIES_ZUBAT}, + {30, 35, SPECIES_ZUBAT}, + {30, 35, SPECIES_GOLBAT}, + {30, 35, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo SeafloorCavern_Room6_WaterMonsInfo = {4, SeafloorCavern_Room6_WaterMons}; + +const struct WildPokemon SeafloorCavern_Room6_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo SeafloorCavern_Room6_FishingMonsInfo = {10, SeafloorCavern_Room6_FishingMons}; + +const struct WildPokemon SeafloorCavern_Room7_LandMons [] = +{ + {30, 30, SPECIES_ZUBAT}, + {31, 31, SPECIES_ZUBAT}, + {32, 32, SPECIES_ZUBAT}, + {33, 33, SPECIES_ZUBAT}, + {28, 28, SPECIES_ZUBAT}, + {29, 29, SPECIES_ZUBAT}, + {34, 34, SPECIES_ZUBAT}, + {35, 35, SPECIES_ZUBAT}, + {34, 34, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, + {36, 36, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo SeafloorCavern_Room7_LandMonsInfo = {4, SeafloorCavern_Room7_LandMons}; + +const struct WildPokemon SeafloorCavern_Room7_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {5, 35, SPECIES_ZUBAT}, + {30, 35, SPECIES_ZUBAT}, + {30, 35, SPECIES_GOLBAT}, + {30, 35, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo SeafloorCavern_Room7_WaterMonsInfo = {4, SeafloorCavern_Room7_WaterMons}; + +const struct WildPokemon SeafloorCavern_Room7_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo SeafloorCavern_Room7_FishingMonsInfo = {10, SeafloorCavern_Room7_FishingMons}; + +const struct WildPokemon SeafloorCavern_Room8_LandMons [] = +{ + {30, 30, SPECIES_ZUBAT}, + {31, 31, SPECIES_ZUBAT}, + {32, 32, SPECIES_ZUBAT}, + {33, 33, SPECIES_ZUBAT}, + {28, 28, SPECIES_ZUBAT}, + {29, 29, SPECIES_ZUBAT}, + {34, 34, SPECIES_ZUBAT}, + {35, 35, SPECIES_ZUBAT}, + {34, 34, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, + {36, 36, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo SeafloorCavern_Room8_LandMonsInfo = {4, SeafloorCavern_Room8_LandMons}; + +const struct WildPokemon CaveOfOrigin_Entrance_LandMons [] = +{ + {30, 30, SPECIES_ZUBAT}, + {31, 31, SPECIES_ZUBAT}, + {32, 32, SPECIES_ZUBAT}, + {33, 33, SPECIES_ZUBAT}, + {28, 28, SPECIES_ZUBAT}, + {29, 29, SPECIES_ZUBAT}, + {34, 34, SPECIES_ZUBAT}, + {35, 35, SPECIES_ZUBAT}, + {34, 34, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, + {36, 36, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo CaveOfOrigin_Entrance_LandMonsInfo = {4, CaveOfOrigin_Entrance_LandMons}; + +const struct WildPokemon CaveOfOrigin_1F_LandMons [] = +{ + {30, 30, SPECIES_ZUBAT}, + {31, 31, SPECIES_ZUBAT}, + {32, 32, SPECIES_ZUBAT}, +#ifdef SAPPHIRE + {30, 30, SPECIES_SABLEYE}, + {32, 32, SPECIES_SABLEYE}, + {34, 34, SPECIES_SABLEYE}, +#else + {30, 30, SPECIES_MAWILE}, + {32, 32, SPECIES_MAWILE}, + {34, 34, SPECIES_MAWILE}, +#endif + {33, 33, SPECIES_ZUBAT}, + {34, 34, SPECIES_ZUBAT}, + {34, 34, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, + {36, 36, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo CaveOfOrigin_1F_LandMonsInfo = {4, CaveOfOrigin_1F_LandMons}; + +const struct WildPokemon CaveOfOrigin_B1F_LandMons [] = +{ + {30, 30, SPECIES_ZUBAT}, + {31, 31, SPECIES_ZUBAT}, + {32, 32, SPECIES_ZUBAT}, +#ifdef SAPPHIRE + {30, 30, SPECIES_SABLEYE}, + {32, 32, SPECIES_SABLEYE}, + {34, 34, SPECIES_SABLEYE}, +#else + {30, 30, SPECIES_MAWILE}, + {32, 32, SPECIES_MAWILE}, + {34, 34, SPECIES_MAWILE}, +#endif + {33, 33, SPECIES_ZUBAT}, + {34, 34, SPECIES_ZUBAT}, + {34, 34, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, + {36, 36, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo CaveOfOrigin_B1F_LandMonsInfo = {4, CaveOfOrigin_B1F_LandMons}; + +const struct WildPokemon CaveOfOrigin_B2F_LandMons [] = +{ + {30, 30, SPECIES_ZUBAT}, + {31, 31, SPECIES_ZUBAT}, + {32, 32, SPECIES_ZUBAT}, +#ifdef SAPPHIRE + {30, 30, SPECIES_SABLEYE}, + {32, 32, SPECIES_SABLEYE}, + {34, 34, SPECIES_SABLEYE}, +#else + {30, 30, SPECIES_MAWILE}, + {32, 32, SPECIES_MAWILE}, + {34, 34, SPECIES_MAWILE}, +#endif + {33, 33, SPECIES_ZUBAT}, + {34, 34, SPECIES_ZUBAT}, + {34, 34, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, + {36, 36, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo CaveOfOrigin_B2F_LandMonsInfo = {4, CaveOfOrigin_B2F_LandMons}; + +const struct WildPokemon CaveOfOrigin_B3F_LandMons [] = +{ + {30, 30, SPECIES_ZUBAT}, + {31, 31, SPECIES_ZUBAT}, + {32, 32, SPECIES_ZUBAT}, +#ifdef SAPPHIRE + {30, 30, SPECIES_SABLEYE}, + {32, 32, SPECIES_SABLEYE}, + {34, 34, SPECIES_SABLEYE}, +#else + {30, 30, SPECIES_MAWILE}, + {32, 32, SPECIES_MAWILE}, + {34, 34, SPECIES_MAWILE}, +#endif + {33, 33, SPECIES_ZUBAT}, + {34, 34, SPECIES_ZUBAT}, + {34, 34, SPECIES_GOLBAT}, + {35, 35, SPECIES_GOLBAT}, + {33, 33, SPECIES_GOLBAT}, + {36, 36, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo CaveOfOrigin_B3F_LandMonsInfo = {4, CaveOfOrigin_B3F_LandMons}; + +const struct WildPokemon VictoryRoad_1F_LandMons [] = +{ + {40, 40, SPECIES_GOLBAT}, + {40, 40, SPECIES_HARIYAMA}, + {40, 40, SPECIES_LAIRON}, + {40, 40, SPECIES_LOUDRED}, + {36, 36, SPECIES_ZUBAT}, + {36, 36, SPECIES_MAKUHITA}, + {38, 38, SPECIES_GOLBAT}, + {38, 38, SPECIES_HARIYAMA}, + {36, 36, SPECIES_ARON}, + {36, 36, SPECIES_WHISMUR}, + {36, 36, SPECIES_ARON}, + {36, 36, SPECIES_WHISMUR}, +}; +const struct WildPokemonInfo VictoryRoad_1F_LandMonsInfo = {10, VictoryRoad_1F_LandMons}; + +const struct WildPokemon VictoryRoad_B1F_LandMons [] = +{ + {40, 40, SPECIES_GOLBAT}, + {40, 40, SPECIES_HARIYAMA}, + {40, 40, SPECIES_LAIRON}, + {40, 40, SPECIES_MEDICHAM}, + {38, 38, SPECIES_GOLBAT}, + {38, 38, SPECIES_HARIYAMA}, + {42, 42, SPECIES_GOLBAT}, + {42, 42, SPECIES_HARIYAMA}, + {42, 42, SPECIES_LAIRON}, + {38, 38, SPECIES_MEDITITE}, + {42, 42, SPECIES_LAIRON}, + {38, 38, SPECIES_MEDITITE}, +}; +const struct WildPokemonInfo VictoryRoad_B1F_LandMonsInfo = {10, VictoryRoad_B1F_LandMons}; + +const struct WildPokemon VictoryRoad_B1F_RockSmashMons [] = +{ + {30, 40, SPECIES_GRAVELER}, + {30, 40, SPECIES_GEODUDE}, + {35, 40, SPECIES_GRAVELER}, + {35, 40, SPECIES_GRAVELER}, + {35, 40, SPECIES_GRAVELER}, +}; +const struct WildPokemonInfo VictoryRoad_B1F_RockSmashMonsInfo = {20, VictoryRoad_B1F_RockSmashMons}; + +const struct WildPokemon VictoryRoad_B2F_LandMons [] = +{ + {40, 40, SPECIES_GOLBAT}, +#ifdef SAPPHIRE + {40, 40, SPECIES_SABLEYE}, +#else + {40, 40, SPECIES_MAWILE}, +#endif + {40, 40, SPECIES_LAIRON}, + {40, 40, SPECIES_MEDICHAM}, + {42, 42, SPECIES_GOLBAT}, +#ifdef SAPPHIRE + {42, 42, SPECIES_SABLEYE}, +#else + {42, 42, SPECIES_MAWILE}, +#endif + {44, 44, SPECIES_GOLBAT}, +#ifdef SAPPHIRE + {44, 44, SPECIES_SABLEYE}, +#else + {44, 44, SPECIES_MAWILE}, +#endif + {42, 42, SPECIES_LAIRON}, + {42, 42, SPECIES_MEDICHAM}, + {44, 44, SPECIES_LAIRON}, + {44, 44, SPECIES_MEDICHAM}, +}; +const struct WildPokemonInfo VictoryRoad_B2F_LandMonsInfo = {10, VictoryRoad_B2F_LandMons}; + +const struct WildPokemon VictoryRoad_B2F_WaterMons [] = +{ + {30, 35, SPECIES_GOLBAT}, + {25, 30, SPECIES_GOLBAT}, + {35, 40, SPECIES_GOLBAT}, + {35, 40, SPECIES_GOLBAT}, + {35, 40, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo VictoryRoad_B2F_WaterMonsInfo = {4, VictoryRoad_B2F_WaterMons}; + +const struct WildPokemon VictoryRoad_B2F_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_GOLDEEN}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_GOLDEEN}, + {10, 30, SPECIES_BARBOACH}, + {25, 30, SPECIES_BARBOACH}, + {30, 35, SPECIES_BARBOACH}, + {30, 35, SPECIES_WHISCASH}, + {35, 40, SPECIES_WHISCASH}, + {40, 45, SPECIES_WHISCASH}, +}; +const struct WildPokemonInfo VictoryRoad_B2F_FishingMonsInfo = {30, VictoryRoad_B2F_FishingMons}; + +const struct WildPokemon ShoalCave_LowTideEntranceRoom_LandMons [] = +{ + {26, 26, SPECIES_ZUBAT}, + {26, 26, SPECIES_SPHEAL}, + {28, 28, SPECIES_ZUBAT}, + {28, 28, SPECIES_SPHEAL}, + {30, 30, SPECIES_ZUBAT}, + {30, 30, SPECIES_SPHEAL}, + {32, 32, SPECIES_ZUBAT}, + {32, 32, SPECIES_SPHEAL}, + {32, 32, SPECIES_GOLBAT}, + {32, 32, SPECIES_SPHEAL}, + {32, 32, SPECIES_GOLBAT}, + {32, 32, SPECIES_SPHEAL}, +}; +const struct WildPokemonInfo ShoalCave_LowTideEntranceRoom_LandMonsInfo = {10, ShoalCave_LowTideEntranceRoom_LandMons}; + +const struct WildPokemon ShoalCave_LowTideEntranceRoom_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {5, 35, SPECIES_ZUBAT}, + {25, 30, SPECIES_SPHEAL}, + {25, 30, SPECIES_SPHEAL}, + {25, 35, SPECIES_SPHEAL}, +}; +const struct WildPokemonInfo ShoalCave_LowTideEntranceRoom_WaterMonsInfo = {4, ShoalCave_LowTideEntranceRoom_WaterMons}; + +const struct WildPokemon ShoalCave_LowTideEntranceRoom_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo ShoalCave_LowTideEntranceRoom_FishingMonsInfo = {10, ShoalCave_LowTideEntranceRoom_FishingMons}; + +const struct WildPokemon ShoalCave_LowTideInnerRoom_LandMons [] = +{ + {26, 26, SPECIES_ZUBAT}, + {26, 26, SPECIES_SPHEAL}, + {28, 28, SPECIES_ZUBAT}, + {28, 28, SPECIES_SPHEAL}, + {30, 30, SPECIES_ZUBAT}, + {30, 30, SPECIES_SPHEAL}, + {32, 32, SPECIES_ZUBAT}, + {32, 32, SPECIES_SPHEAL}, + {32, 32, SPECIES_GOLBAT}, + {32, 32, SPECIES_SPHEAL}, + {32, 32, SPECIES_GOLBAT}, + {32, 32, SPECIES_SPHEAL}, +}; +const struct WildPokemonInfo ShoalCave_LowTideInnerRoom_LandMonsInfo = {10, ShoalCave_LowTideInnerRoom_LandMons}; + +const struct WildPokemon ShoalCave_LowTideInnerRoom_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {5, 35, SPECIES_ZUBAT}, + {25, 30, SPECIES_SPHEAL}, + {25, 30, SPECIES_SPHEAL}, + {25, 35, SPECIES_SPHEAL}, +}; +const struct WildPokemonInfo ShoalCave_LowTideInnerRoom_WaterMonsInfo = {4, ShoalCave_LowTideInnerRoom_WaterMons}; + +const struct WildPokemon ShoalCave_LowTideInnerRoom_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo ShoalCave_LowTideInnerRoom_FishingMonsInfo = {10, ShoalCave_LowTideInnerRoom_FishingMons}; + +const struct WildPokemon ShoalCave_LowTideStairsRoom_LandMons [] = +{ + {26, 26, SPECIES_ZUBAT}, + {26, 26, SPECIES_SPHEAL}, + {28, 28, SPECIES_ZUBAT}, + {28, 28, SPECIES_SPHEAL}, + {30, 30, SPECIES_ZUBAT}, + {30, 30, SPECIES_SPHEAL}, + {32, 32, SPECIES_ZUBAT}, + {32, 32, SPECIES_SPHEAL}, + {32, 32, SPECIES_GOLBAT}, + {32, 32, SPECIES_SPHEAL}, + {32, 32, SPECIES_GOLBAT}, + {32, 32, SPECIES_SPHEAL}, +}; +const struct WildPokemonInfo ShoalCave_LowTideStairsRoom_LandMonsInfo = {10, ShoalCave_LowTideStairsRoom_LandMons}; + +const struct WildPokemon ShoalCave_LowTideLowerRoom_LandMons [] = +{ + {26, 26, SPECIES_ZUBAT}, + {26, 26, SPECIES_SPHEAL}, + {28, 28, SPECIES_ZUBAT}, + {28, 28, SPECIES_SPHEAL}, + {30, 30, SPECIES_ZUBAT}, + {30, 30, SPECIES_SPHEAL}, + {32, 32, SPECIES_ZUBAT}, + {32, 32, SPECIES_SPHEAL}, + {32, 32, SPECIES_GOLBAT}, + {32, 32, SPECIES_SPHEAL}, + {32, 32, SPECIES_GOLBAT}, + {32, 32, SPECIES_SPHEAL}, +}; +const struct WildPokemonInfo ShoalCave_LowTideLowerRoom_LandMonsInfo = {10, ShoalCave_LowTideLowerRoom_LandMons}; + +const struct WildPokemon ShoalCave_LowTideIceRoom_LandMons [] = +{ + {26, 26, SPECIES_ZUBAT}, + {26, 26, SPECIES_SPHEAL}, + {28, 28, SPECIES_ZUBAT}, + {28, 28, SPECIES_SPHEAL}, + {30, 30, SPECIES_ZUBAT}, + {30, 30, SPECIES_SPHEAL}, + {26, 26, SPECIES_SNORUNT}, + {32, 32, SPECIES_SPHEAL}, + {30, 30, SPECIES_GOLBAT}, + {28, 28, SPECIES_SNORUNT}, + {32, 32, SPECIES_GOLBAT}, + {30, 30, SPECIES_SNORUNT}, +}; +const struct WildPokemonInfo ShoalCave_LowTideIceRoom_LandMonsInfo = {10, ShoalCave_LowTideIceRoom_LandMons}; + +const struct WildPokemon NewMauville_Entrance_LandMons [] = +{ + {24, 24, SPECIES_VOLTORB}, + {24, 24, SPECIES_MAGNEMITE}, + {25, 25, SPECIES_VOLTORB}, + {25, 25, SPECIES_MAGNEMITE}, + {23, 23, SPECIES_VOLTORB}, + {23, 23, SPECIES_MAGNEMITE}, + {26, 26, SPECIES_VOLTORB}, + {26, 26, SPECIES_MAGNEMITE}, + {22, 22, SPECIES_VOLTORB}, + {22, 22, SPECIES_MAGNEMITE}, + {22, 22, SPECIES_VOLTORB}, + {22, 22, SPECIES_MAGNEMITE}, +}; +const struct WildPokemonInfo NewMauville_Entrance_LandMonsInfo = {10, NewMauville_Entrance_LandMons}; + +const struct WildPokemon NewMauville_Inside_LandMons [] = +{ + {24, 24, SPECIES_VOLTORB}, + {24, 24, SPECIES_MAGNEMITE}, + {25, 25, SPECIES_VOLTORB}, + {25, 25, SPECIES_MAGNEMITE}, + {23, 23, SPECIES_VOLTORB}, + {23, 23, SPECIES_MAGNEMITE}, + {26, 26, SPECIES_VOLTORB}, + {26, 26, SPECIES_MAGNEMITE}, + {22, 22, SPECIES_VOLTORB}, + {22, 22, SPECIES_MAGNEMITE}, + {26, 26, SPECIES_ELECTRODE}, + {26, 26, SPECIES_MAGNETON}, +}; +const struct WildPokemonInfo NewMauville_Inside_LandMonsInfo = {10, NewMauville_Inside_LandMons}; + +const struct WildPokemon AbandonedShip_Rooms_B1F_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {5, 35, SPECIES_TENTACOOL}, + {5, 35, SPECIES_TENTACOOL}, + {5, 35, SPECIES_TENTACOOL}, + {30, 35, SPECIES_TENTACRUEL}, +}; +const struct WildPokemonInfo AbandonedShip_Rooms_B1F_WaterMonsInfo = {4, AbandonedShip_Rooms_B1F_WaterMons}; + +const struct WildPokemon AbandonedShip_Rooms_B1F_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_TENTACOOL}, + {25, 30, SPECIES_TENTACOOL}, + {30, 35, SPECIES_TENTACOOL}, + {30, 35, SPECIES_TENTACRUEL}, + {25, 30, SPECIES_TENTACRUEL}, + {20, 25, SPECIES_TENTACRUEL}, +}; +const struct WildPokemonInfo AbandonedShip_Rooms_B1F_FishingMonsInfo = {20, AbandonedShip_Rooms_B1F_FishingMons}; + +const struct WildPokemon AbandonedShip_HiddenFloorCorridors_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {5, 35, SPECIES_TENTACOOL}, + {5, 35, SPECIES_TENTACOOL}, + {5, 35, SPECIES_TENTACOOL}, + {30, 35, SPECIES_TENTACRUEL}, +}; +const struct WildPokemonInfo AbandonedShip_HiddenFloorCorridors_WaterMonsInfo = {4, AbandonedShip_HiddenFloorCorridors_WaterMons}; + +const struct WildPokemon AbandonedShip_HiddenFloorCorridors_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_TENTACOOL}, + {25, 30, SPECIES_TENTACOOL}, + {30, 35, SPECIES_TENTACOOL}, + {30, 35, SPECIES_TENTACRUEL}, + {25, 30, SPECIES_TENTACRUEL}, + {20, 25, SPECIES_TENTACRUEL}, +}; +const struct WildPokemonInfo AbandonedShip_HiddenFloorCorridors_FishingMonsInfo = {20, AbandonedShip_HiddenFloorCorridors_FishingMons}; + +const struct WildPokemon SkyPillar_1F_LandMons [] = +{ +#ifdef SAPPHIRE + {48, 48, SPECIES_SABLEYE}, +#else + {48, 48, SPECIES_MAWILE}, +#endif + {48, 48, SPECIES_GOLBAT}, + {50, 50, SPECIES_GOLBAT}, +#ifdef SAPPHIRE + {50, 50, SPECIES_SABLEYE}, +#else + {50, 50, SPECIES_MAWILE}, +#endif + {48, 48, SPECIES_CLAYDOL}, +#ifdef SAPPHIRE + {48, 48, SPECIES_BANETTE}, + {50, 50, SPECIES_BANETTE}, +#else + {48, 48, SPECIES_DUSCLOPS}, + {50, 50, SPECIES_DUSCLOPS}, +#endif + {49, 49, SPECIES_CLAYDOL}, + {47, 47, SPECIES_CLAYDOL}, + {50, 50, SPECIES_CLAYDOL}, + {47, 47, SPECIES_CLAYDOL}, + {50, 50, SPECIES_CLAYDOL}, +}; +const struct WildPokemonInfo SkyPillar_1F_LandMonsInfo = {10, SkyPillar_1F_LandMons}; + +const struct WildPokemon SkyPillar_3F_LandMons [] = +{ +#ifdef SAPPHIRE + {51, 51, SPECIES_SABLEYE}, +#else + {51, 51, SPECIES_MAWILE}, +#endif + {51, 51, SPECIES_GOLBAT}, + {53, 53, SPECIES_GOLBAT}, +#ifdef SAPPHIRE + {53, 53, SPECIES_SABLEYE}, +#else + {53, 53, SPECIES_MAWILE}, +#endif + {51, 51, SPECIES_CLAYDOL}, +#ifdef SAPPHIRE + {51, 51, SPECIES_BANETTE}, + {53, 53, SPECIES_BANETTE}, +#else + {51, 51, SPECIES_DUSCLOPS}, + {53, 53, SPECIES_DUSCLOPS}, +#endif + {52, 52, SPECIES_CLAYDOL}, + {50, 50, SPECIES_CLAYDOL}, + {53, 53, SPECIES_CLAYDOL}, + {50, 50, SPECIES_CLAYDOL}, + {53, 53, SPECIES_CLAYDOL}, +}; +const struct WildPokemonInfo SkyPillar_3F_LandMonsInfo = {10, SkyPillar_3F_LandMons}; + +const struct WildPokemon SkyPillar_5F_LandMons [] = +{ +#ifdef SAPPHIRE + {54, 54, SPECIES_SABLEYE}, +#else + {54, 54, SPECIES_MAWILE}, +#endif + {54, 54, SPECIES_GOLBAT}, + {56, 56, SPECIES_GOLBAT}, +#ifdef SAPPHIRE + {56, 56, SPECIES_SABLEYE}, +#else + {56, 56, SPECIES_MAWILE}, +#endif + {54, 54, SPECIES_CLAYDOL}, +#ifdef SAPPHIRE + {54, 54, SPECIES_BANETTE}, + {56, 56, SPECIES_BANETTE}, +#else + {54, 54, SPECIES_DUSCLOPS}, + {56, 56, SPECIES_DUSCLOPS}, +#endif + {55, 55, SPECIES_CLAYDOL}, + {56, 56, SPECIES_CLAYDOL}, + {57, 57, SPECIES_ALTARIA}, + {54, 54, SPECIES_ALTARIA}, + {60, 60, SPECIES_ALTARIA}, +}; +const struct WildPokemonInfo SkyPillar_5F_LandMonsInfo = {10, SkyPillar_5F_LandMons}; + +const struct WildPokemon Route101_LandMons [] = +{ + {2, 2, SPECIES_WURMPLE}, + {2, 2, SPECIES_ZIGZAGOON}, + {2, 2, SPECIES_WURMPLE}, + {3, 3, SPECIES_WURMPLE}, + {3, 3, SPECIES_ZIGZAGOON}, + {3, 3, SPECIES_ZIGZAGOON}, + {3, 3, SPECIES_WURMPLE}, + {3, 3, SPECIES_ZIGZAGOON}, + {2, 2, SPECIES_POOCHYENA}, + {2, 2, SPECIES_POOCHYENA}, + {3, 3, SPECIES_POOCHYENA}, + {3, 3, SPECIES_POOCHYENA}, +}; +const struct WildPokemonInfo Route101_LandMonsInfo = {20, Route101_LandMons}; + +const struct WildPokemon Route102_LandMons [] = +{ + {3, 3, SPECIES_ZIGZAGOON}, + {3, 3, SPECIES_WURMPLE}, + {4, 4, SPECIES_ZIGZAGOON}, + {4, 4, SPECIES_WURMPLE}, +#ifdef SAPPHIRE + {3, 3, SPECIES_LOTAD}, + {4, 4, SPECIES_LOTAD}, +#else + {3, 3, SPECIES_SEEDOT}, + {4, 4, SPECIES_SEEDOT}, +#endif + {3, 3, SPECIES_POOCHYENA}, + {3, 3, SPECIES_POOCHYENA}, + {4, 4, SPECIES_POOCHYENA}, + {4, 4, SPECIES_RALTS}, + {4, 4, SPECIES_POOCHYENA}, + {3, 3, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route102_LandMonsInfo = {20, Route102_LandMons}; + +const struct WildPokemon Route102_WaterMons [] = +{ + {20, 30, SPECIES_MARILL}, + {10, 20, SPECIES_MARILL}, + {30, 35, SPECIES_MARILL}, + {5, 10, SPECIES_MARILL}, + {20, 30, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route102_WaterMonsInfo = {4, Route102_WaterMons}; + +const struct WildPokemon Route102_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_GOLDEEN}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_GOLDEEN}, + {10, 30, SPECIES_CORPHISH}, + {25, 30, SPECIES_CORPHISH}, + {30, 35, SPECIES_CORPHISH}, + {20, 25, SPECIES_CORPHISH}, + {35, 40, SPECIES_CORPHISH}, + {40, 45, SPECIES_CORPHISH}, +}; +const struct WildPokemonInfo Route102_FishingMonsInfo = {30, Route102_FishingMons}; + +const struct WildPokemon Route103_LandMons [] = +{ + {2, 2, SPECIES_ZIGZAGOON}, + {3, 3, SPECIES_ZIGZAGOON}, + {3, 3, SPECIES_ZIGZAGOON}, + {4, 4, SPECIES_ZIGZAGOON}, + {2, 2, SPECIES_POOCHYENA}, + {3, 3, SPECIES_POOCHYENA}, + {3, 3, SPECIES_POOCHYENA}, + {4, 4, SPECIES_POOCHYENA}, + {3, 3, SPECIES_WINGULL}, + {3, 3, SPECIES_WINGULL}, + {2, 2, SPECIES_WINGULL}, + {4, 4, SPECIES_WINGULL}, +}; +const struct WildPokemonInfo Route103_LandMonsInfo = {20, Route103_LandMons}; + +const struct WildPokemon Route103_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route103_WaterMonsInfo = {4, Route103_WaterMons}; + +const struct WildPokemon Route103_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route103_FishingMonsInfo = {30, Route103_FishingMons}; + +const struct WildPokemon Route104_LandMons [] = +{ + {4, 4, SPECIES_ZIGZAGOON}, + {4, 4, SPECIES_WURMPLE}, + {5, 5, SPECIES_ZIGZAGOON}, + {5, 5, SPECIES_WURMPLE}, + {4, 4, SPECIES_ZIGZAGOON}, + {5, 5, SPECIES_ZIGZAGOON}, + {4, 4, SPECIES_TAILLOW}, + {5, 5, SPECIES_TAILLOW}, + {4, 4, SPECIES_WINGULL}, + {4, 4, SPECIES_WINGULL}, + {3, 3, SPECIES_WINGULL}, + {5, 5, SPECIES_WINGULL}, +}; +const struct WildPokemonInfo Route104_LandMonsInfo = {20, Route104_LandMons}; + +const struct WildPokemon Route104_WaterMons [] = +{ + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route104_WaterMonsInfo = {4, Route104_WaterMons}; + +const struct WildPokemon Route104_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_MAGIKARP}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_MAGIKARP}, + {25, 30, SPECIES_MAGIKARP}, + {30, 35, SPECIES_MAGIKARP}, + {20, 25, SPECIES_MAGIKARP}, + {35, 40, SPECIES_MAGIKARP}, + {40, 45, SPECIES_MAGIKARP}, +}; +const struct WildPokemonInfo Route104_FishingMonsInfo = {30, Route104_FishingMons}; + +const struct WildPokemon Route105_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route105_WaterMonsInfo = {4, Route105_WaterMons}; + +const struct WildPokemon Route105_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route105_FishingMonsInfo = {30, Route105_FishingMons}; + +const struct WildPokemon Route106_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route106_WaterMonsInfo = {4, Route106_WaterMons}; + +const struct WildPokemon Route106_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route106_FishingMonsInfo = {30, Route106_FishingMons}; + +const struct WildPokemon Route107_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route107_WaterMonsInfo = {4, Route107_WaterMons}; + +const struct WildPokemon Route107_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route107_FishingMonsInfo = {30, Route107_FishingMons}; + +const struct WildPokemon Route108_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route108_WaterMonsInfo = {4, Route108_WaterMons}; + +const struct WildPokemon Route108_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route108_FishingMonsInfo = {30, Route108_FishingMons}; + +const struct WildPokemon Route109_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route109_WaterMonsInfo = {4, Route109_WaterMons}; + +const struct WildPokemon Route109_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route109_FishingMonsInfo = {30, Route109_FishingMons}; + +const struct WildPokemon Route110_LandMons [] = +{ + {12, 12, SPECIES_ZIGZAGOON}, + {12, 12, SPECIES_ELECTRIKE}, + {12, 12, SPECIES_GULPIN}, + {13, 13, SPECIES_ELECTRIKE}, +#ifdef SAPPHIRE + {13, 13, SPECIES_PLUSLE}, +#else + {13, 13, SPECIES_MINUN}, +#endif + {13, 13, SPECIES_ODDISH}, +#ifdef SAPPHIRE + {13, 13, SPECIES_PLUSLE}, +#else + {13, 13, SPECIES_MINUN}, +#endif + {13, 13, SPECIES_GULPIN}, + {12, 12, SPECIES_WINGULL}, + {12, 12, SPECIES_WINGULL}, +#ifdef SAPPHIRE + {12, 12, SPECIES_MINUN}, + {13, 13, SPECIES_MINUN}, +#else + {12, 12, SPECIES_PLUSLE}, + {13, 13, SPECIES_PLUSLE}, +#endif +}; +const struct WildPokemonInfo Route110_LandMonsInfo = {20, Route110_LandMons}; + +const struct WildPokemon Route110_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route110_WaterMonsInfo = {4, Route110_WaterMons}; + +const struct WildPokemon Route110_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route110_FishingMonsInfo = {30, Route110_FishingMons}; + +const struct WildPokemon Route111_LandMons [] = +{ + {20, 20, SPECIES_SANDSHREW}, + {20, 20, SPECIES_TRAPINCH}, + {21, 21, SPECIES_SANDSHREW}, + {21, 21, SPECIES_TRAPINCH}, + {19, 19, SPECIES_CACNEA}, + {21, 21, SPECIES_CACNEA}, + {19, 19, SPECIES_SANDSHREW}, + {19, 19, SPECIES_TRAPINCH}, + {20, 20, SPECIES_BALTOY}, + {20, 20, SPECIES_BALTOY}, + {22, 22, SPECIES_BALTOY}, + {22, 22, SPECIES_BALTOY}, +}; +const struct WildPokemonInfo Route111_LandMonsInfo = {10, Route111_LandMons}; + +const struct WildPokemon Route111_WaterMons [] = +{ + {20, 30, SPECIES_MARILL}, + {10, 20, SPECIES_MARILL}, + {30, 35, SPECIES_MARILL}, + {5, 10, SPECIES_MARILL}, + {20, 30, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route111_WaterMonsInfo = {4, Route111_WaterMons}; + +const struct WildPokemon Route111_RockSmashMons [] = +{ + {10, 15, SPECIES_GEODUDE}, + {5, 10, SPECIES_GEODUDE}, + {15, 20, SPECIES_GEODUDE}, + {15, 20, SPECIES_GEODUDE}, + {15, 20, SPECIES_GEODUDE}, +}; +const struct WildPokemonInfo Route111_RockSmashMonsInfo = {20, Route111_RockSmashMons}; + +const struct WildPokemon Route111_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_GOLDEEN}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_GOLDEEN}, + {10, 30, SPECIES_BARBOACH}, + {25, 30, SPECIES_BARBOACH}, + {30, 35, SPECIES_BARBOACH}, + {20, 25, SPECIES_BARBOACH}, + {35, 40, SPECIES_BARBOACH}, + {40, 45, SPECIES_BARBOACH}, +}; +const struct WildPokemonInfo Route111_FishingMonsInfo = {30, Route111_FishingMons}; + +const struct WildPokemon Route112_LandMons [] = +{ + {15, 15, SPECIES_NUMEL}, + {15, 15, SPECIES_NUMEL}, + {15, 15, SPECIES_MACHOP}, + {14, 14, SPECIES_NUMEL}, + {14, 14, SPECIES_NUMEL}, + {14, 14, SPECIES_MACHOP}, + {16, 16, SPECIES_NUMEL}, + {16, 16, SPECIES_MACHOP}, + {16, 16, SPECIES_NUMEL}, + {16, 16, SPECIES_NUMEL}, + {16, 16, SPECIES_NUMEL}, + {16, 16, SPECIES_NUMEL}, +}; +const struct WildPokemonInfo Route112_LandMonsInfo = {20, Route112_LandMons}; + +const struct WildPokemon Route113_LandMons [] = +{ + {15, 15, SPECIES_SPINDA}, + {15, 15, SPECIES_SPINDA}, + {15, 15, SPECIES_SANDSHREW}, + {14, 14, SPECIES_SPINDA}, + {14, 14, SPECIES_SPINDA}, + {14, 14, SPECIES_SANDSHREW}, + {16, 16, SPECIES_SPINDA}, + {16, 16, SPECIES_SANDSHREW}, + {16, 16, SPECIES_SPINDA}, + {16, 16, SPECIES_SKARMORY}, + {16, 16, SPECIES_SPINDA}, + {16, 16, SPECIES_SKARMORY}, +}; +const struct WildPokemonInfo Route113_LandMonsInfo = {20, Route113_LandMons}; + +const struct WildPokemon Route114_LandMons [] = +{ + {16, 16, SPECIES_SWABLU}, +#ifdef SAPPHIRE + {16, 16, SPECIES_LOTAD}, +#else + {16, 16, SPECIES_SEEDOT}, +#endif + {17, 17, SPECIES_SWABLU}, + {15, 15, SPECIES_SWABLU}, +#ifdef SAPPHIRE + {15, 15, SPECIES_LOTAD}, + {16, 16, SPECIES_SEVIPER}, + {16, 16, SPECIES_LOMBRE}, + {18, 18, SPECIES_LOMBRE}, + {17, 17, SPECIES_SEVIPER}, + {15, 15, SPECIES_SEVIPER}, + {17, 17, SPECIES_SEVIPER}, +#else + {15, 15, SPECIES_SEEDOT}, + {16, 16, SPECIES_ZANGOOSE}, + {16, 16, SPECIES_NUZLEAF}, + {18, 18, SPECIES_NUZLEAF}, + {17, 17, SPECIES_ZANGOOSE}, + {15, 15, SPECIES_ZANGOOSE}, + {17, 17, SPECIES_ZANGOOSE}, +#endif + {15, 15, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route114_LandMonsInfo = {20, Route114_LandMons}; + +const struct WildPokemon Route114_WaterMons [] = +{ + {20, 30, SPECIES_MARILL}, + {10, 20, SPECIES_MARILL}, + {30, 35, SPECIES_MARILL}, + {5, 10, SPECIES_MARILL}, + {20, 30, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route114_WaterMonsInfo = {4, Route114_WaterMons}; + +const struct WildPokemon Route114_RockSmashMons [] = +{ + {10, 15, SPECIES_GEODUDE}, + {5, 10, SPECIES_GEODUDE}, + {15, 20, SPECIES_GEODUDE}, + {15, 20, SPECIES_GEODUDE}, + {15, 20, SPECIES_GEODUDE}, +}; +const struct WildPokemonInfo Route114_RockSmashMonsInfo = {20, Route114_RockSmashMons}; + +const struct WildPokemon Route114_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_GOLDEEN}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_GOLDEEN}, + {10, 30, SPECIES_BARBOACH}, + {25, 30, SPECIES_BARBOACH}, + {30, 35, SPECIES_BARBOACH}, + {20, 25, SPECIES_BARBOACH}, + {35, 40, SPECIES_BARBOACH}, + {40, 45, SPECIES_BARBOACH}, +}; +const struct WildPokemonInfo Route114_FishingMonsInfo = {30, Route114_FishingMons}; + +const struct WildPokemon Route115_LandMons [] = +{ + {23, 23, SPECIES_SWABLU}, + {23, 23, SPECIES_TAILLOW}, + {25, 25, SPECIES_SWABLU}, + {24, 24, SPECIES_TAILLOW}, + {25, 25, SPECIES_TAILLOW}, + {25, 25, SPECIES_SWELLOW}, + {24, 24, SPECIES_JIGGLYPUFF}, + {25, 25, SPECIES_JIGGLYPUFF}, + {24, 24, SPECIES_WINGULL}, + {24, 24, SPECIES_WINGULL}, + {26, 26, SPECIES_WINGULL}, + {25, 25, SPECIES_WINGULL}, +}; +const struct WildPokemonInfo Route115_LandMonsInfo = {20, Route115_LandMons}; + +const struct WildPokemon Route115_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route115_WaterMonsInfo = {4, Route115_WaterMons}; + +const struct WildPokemon Route115_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route115_FishingMonsInfo = {30, Route115_FishingMons}; + +const struct WildPokemon Route116_LandMons [] = +{ + {6, 6, SPECIES_ZIGZAGOON}, + {6, 6, SPECIES_WHISMUR}, + {6, 6, SPECIES_NINCADA}, + {7, 7, SPECIES_WHISMUR}, + {7, 7, SPECIES_NINCADA}, + {6, 6, SPECIES_TAILLOW}, + {7, 7, SPECIES_TAILLOW}, + {8, 8, SPECIES_TAILLOW}, + {7, 7, SPECIES_ZIGZAGOON}, + {8, 8, SPECIES_ZIGZAGOON}, + {7, 7, SPECIES_SKITTY}, + {8, 8, SPECIES_SKITTY}, +}; +const struct WildPokemonInfo Route116_LandMonsInfo = {20, Route116_LandMons}; + +const struct WildPokemon Route117_LandMons [] = +{ + {13, 13, SPECIES_ZIGZAGOON}, + {13, 13, SPECIES_ROSELIA}, + {14, 14, SPECIES_ZIGZAGOON}, + {14, 14, SPECIES_ROSELIA}, + {13, 13, SPECIES_MARILL}, + {13, 13, SPECIES_ODDISH}, +#ifdef SAPPHIRE + {13, 13, SPECIES_VOLBEAT}, + {13, 13, SPECIES_VOLBEAT}, + {14, 14, SPECIES_VOLBEAT}, + {14, 14, SPECIES_VOLBEAT}, + {13, 13, SPECIES_ILLUMISE}, +#else + {13, 13, SPECIES_ILLUMISE}, + {13, 13, SPECIES_ILLUMISE}, + {14, 14, SPECIES_ILLUMISE}, + {14, 14, SPECIES_ILLUMISE}, + {13, 13, SPECIES_VOLBEAT}, +#endif + {13, 13, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route117_LandMonsInfo = {20, Route117_LandMons}; + +const struct WildPokemon Route117_WaterMons [] = +{ + {20, 30, SPECIES_MARILL}, + {10, 20, SPECIES_MARILL}, + {30, 35, SPECIES_MARILL}, + {5, 10, SPECIES_MARILL}, + {20, 30, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route117_WaterMonsInfo = {4, Route117_WaterMons}; + +const struct WildPokemon Route117_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_GOLDEEN}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_GOLDEEN}, + {10, 30, SPECIES_CORPHISH}, + {25, 30, SPECIES_CORPHISH}, + {30, 35, SPECIES_CORPHISH}, + {20, 25, SPECIES_CORPHISH}, + {35, 40, SPECIES_CORPHISH}, + {40, 45, SPECIES_CORPHISH}, +}; +const struct WildPokemonInfo Route117_FishingMonsInfo = {30, Route117_FishingMons}; + +const struct WildPokemon Route118_LandMons [] = +{ + {24, 24, SPECIES_ZIGZAGOON}, + {24, 24, SPECIES_ELECTRIKE}, + {26, 26, SPECIES_ZIGZAGOON}, + {26, 26, SPECIES_ELECTRIKE}, + {26, 26, SPECIES_LINOONE}, + {26, 26, SPECIES_MANECTRIC}, + {25, 25, SPECIES_WINGULL}, + {25, 25, SPECIES_WINGULL}, + {26, 26, SPECIES_WINGULL}, + {26, 26, SPECIES_WINGULL}, + {27, 27, SPECIES_WINGULL}, + {25, 25, SPECIES_KECLEON}, +}; +const struct WildPokemonInfo Route118_LandMonsInfo = {20, Route118_LandMons}; + +const struct WildPokemon Route118_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route118_WaterMonsInfo = {4, Route118_WaterMons}; + +const struct WildPokemon Route118_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_CARVANHA}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_CARVANHA}, + {20, 25, SPECIES_CARVANHA}, + {35, 40, SPECIES_CARVANHA}, + {40, 45, SPECIES_CARVANHA}, +}; +const struct WildPokemonInfo Route118_FishingMonsInfo = {30, Route118_FishingMons}; + +const struct WildPokemon Route119_LandMons [] = +{ + {25, 25, SPECIES_ZIGZAGOON}, + {25, 25, SPECIES_LINOONE}, + {27, 27, SPECIES_ZIGZAGOON}, + {25, 25, SPECIES_ODDISH}, + {27, 27, SPECIES_LINOONE}, + {26, 26, SPECIES_ODDISH}, + {27, 27, SPECIES_ODDISH}, + {24, 24, SPECIES_ODDISH}, + {25, 25, SPECIES_TROPIUS}, + {26, 26, SPECIES_TROPIUS}, + {27, 27, SPECIES_TROPIUS}, + {25, 25, SPECIES_KECLEON}, +}; +const struct WildPokemonInfo Route119_LandMonsInfo = {15, Route119_LandMons}; + +const struct WildPokemon Route119_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route119_WaterMonsInfo = {4, Route119_WaterMons}; + +const struct WildPokemon Route119_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_CARVANHA}, + {25, 30, SPECIES_CARVANHA}, + {30, 35, SPECIES_CARVANHA}, + {20, 25, SPECIES_CARVANHA}, + {35, 40, SPECIES_CARVANHA}, + {40, 45, SPECIES_CARVANHA}, +}; +const struct WildPokemonInfo Route119_FishingMonsInfo = {30, Route119_FishingMons}; + +const struct WildPokemon Route120_LandMons [] = +{ + {25, 25, SPECIES_ZIGZAGOON}, + {25, 25, SPECIES_LINOONE}, + {27, 27, SPECIES_LINOONE}, + {25, 25, SPECIES_ODDISH}, + {25, 25, SPECIES_MARILL}, + {26, 26, SPECIES_ODDISH}, + {27, 27, SPECIES_ODDISH}, + {27, 27, SPECIES_MARILL}, + {25, 25, SPECIES_ABSOL}, + {27, 27, SPECIES_ABSOL}, + {25, 25, SPECIES_KECLEON}, + {25, 25, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route120_LandMonsInfo = {20, Route120_LandMons}; + +const struct WildPokemon Route120_WaterMons [] = +{ + {20, 30, SPECIES_MARILL}, + {10, 20, SPECIES_MARILL}, + {30, 35, SPECIES_MARILL}, + {5, 10, SPECIES_MARILL}, + {20, 30, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route120_WaterMonsInfo = {4, Route120_WaterMons}; + +const struct WildPokemon Route120_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_GOLDEEN}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_GOLDEEN}, + {10, 30, SPECIES_BARBOACH}, + {25, 30, SPECIES_BARBOACH}, + {30, 35, SPECIES_BARBOACH}, + {20, 25, SPECIES_BARBOACH}, + {35, 40, SPECIES_BARBOACH}, + {40, 45, SPECIES_BARBOACH}, +}; +const struct WildPokemonInfo Route120_FishingMonsInfo = {30, Route120_FishingMons}; + +const struct WildPokemon Route121_LandMons [] = +{ + {26, 26, SPECIES_ZIGZAGOON}, +#ifdef SAPPHIRE + {26, 26, SPECIES_SHUPPET}, +#else + {26, 26, SPECIES_DUSKULL}, +#endif + {26, 26, SPECIES_LINOONE}, +#ifdef SAPPHIRE + {28, 28, SPECIES_SHUPPET}, +#else + {28, 28, SPECIES_DUSKULL}, +#endif + {28, 28, SPECIES_LINOONE}, + {26, 26, SPECIES_ODDISH}, + {28, 28, SPECIES_ODDISH}, + {28, 28, SPECIES_GLOOM}, + {26, 26, SPECIES_WINGULL}, + {27, 27, SPECIES_WINGULL}, + {28, 28, SPECIES_WINGULL}, + {25, 25, SPECIES_KECLEON}, +}; +const struct WildPokemonInfo Route121_LandMonsInfo = {20, Route121_LandMons}; + +const struct WildPokemon Route121_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route121_WaterMonsInfo = {4, Route121_WaterMons}; + +const struct WildPokemon Route121_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route121_FishingMonsInfo = {30, Route121_FishingMons}; + +const struct WildPokemon Route122_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route122_WaterMonsInfo = {4, Route122_WaterMons}; + +const struct WildPokemon Route122_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route122_FishingMonsInfo = {30, Route122_FishingMons}; + +const struct WildPokemon Route123_LandMons [] = +{ + {26, 26, SPECIES_ZIGZAGOON}, +#ifdef SAPPHIRE + {26, 26, SPECIES_SHUPPET}, +#else + {26, 26, SPECIES_DUSKULL}, +#endif + {26, 26, SPECIES_LINOONE}, +#ifdef SAPPHIRE + {28, 28, SPECIES_SHUPPET}, +#else + {28, 28, SPECIES_DUSKULL}, +#endif + {28, 28, SPECIES_LINOONE}, + {26, 26, SPECIES_ODDISH}, + {28, 28, SPECIES_ODDISH}, + {28, 28, SPECIES_GLOOM}, + {26, 26, SPECIES_WINGULL}, + {27, 27, SPECIES_WINGULL}, + {28, 28, SPECIES_WINGULL}, + {25, 25, SPECIES_KECLEON}, +}; +const struct WildPokemonInfo Route123_LandMonsInfo = {20, Route123_LandMons}; + +const struct WildPokemon Route123_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route123_WaterMonsInfo = {4, Route123_WaterMons}; + +const struct WildPokemon Route123_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route123_FishingMonsInfo = {30, Route123_FishingMons}; + +const struct WildPokemon Route124_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route124_WaterMonsInfo = {4, Route124_WaterMons}; + +const struct WildPokemon Route124_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route124_FishingMonsInfo = {30, Route124_FishingMons}; + +const struct WildPokemon Route125_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route125_WaterMonsInfo = {4, Route125_WaterMons}; + +const struct WildPokemon Route125_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route125_FishingMonsInfo = {30, Route125_FishingMons}; + +const struct WildPokemon Route126_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route126_WaterMonsInfo = {4, Route126_WaterMons}; + +const struct WildPokemon Route126_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route126_FishingMonsInfo = {30, Route126_FishingMons}; + +const struct WildPokemon Route127_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route127_WaterMonsInfo = {4, Route127_WaterMons}; + +const struct WildPokemon Route127_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route127_FishingMonsInfo = {30, Route127_FishingMons}; + +const struct WildPokemon Route128_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route128_WaterMonsInfo = {4, Route128_WaterMons}; + +const struct WildPokemon Route128_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_LUVDISC}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_LUVDISC}, + {30, 35, SPECIES_WAILMER}, + {30, 35, SPECIES_CORSOLA}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route128_FishingMonsInfo = {30, Route128_FishingMons}; + +const struct WildPokemon Route129_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, +#ifdef SAPPHIRE + {25, 30, SPECIES_WAILORD}, +#else + {35, 40, SPECIES_WAILORD}, +#endif +}; +const struct WildPokemonInfo Route129_WaterMonsInfo = {4, Route129_WaterMons}; + +const struct WildPokemon Route129_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route129_FishingMonsInfo = {30, Route129_FishingMons}; + +const struct WildPokemon Route130_LandMons [] = +{ + {30, 30, SPECIES_WYNAUT}, + {35, 35, SPECIES_WYNAUT}, + {25, 25, SPECIES_WYNAUT}, + {40, 40, SPECIES_WYNAUT}, + {20, 20, SPECIES_WYNAUT}, + {45, 45, SPECIES_WYNAUT}, + {15, 15, SPECIES_WYNAUT}, + {50, 50, SPECIES_WYNAUT}, + {10, 10, SPECIES_WYNAUT}, + {5, 5, SPECIES_WYNAUT}, + {10, 10, SPECIES_WYNAUT}, + {5, 5, SPECIES_WYNAUT}, +}; +const struct WildPokemonInfo Route130_LandMonsInfo = {20, Route130_LandMons}; + +const struct WildPokemon Route130_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route130_WaterMonsInfo = {4, Route130_WaterMons}; + +const struct WildPokemon Route130_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route130_FishingMonsInfo = {30, Route130_FishingMons}; + +const struct WildPokemon Route131_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route131_WaterMonsInfo = {4, Route131_WaterMons}; + +const struct WildPokemon Route131_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route131_FishingMonsInfo = {30, Route131_FishingMons}; + +const struct WildPokemon Route132_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route132_WaterMonsInfo = {4, Route132_WaterMons}; + +const struct WildPokemon Route132_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_HORSEA}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route132_FishingMonsInfo = {30, Route132_FishingMons}; + +const struct WildPokemon Route133_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route133_WaterMonsInfo = {4, Route133_WaterMons}; + +const struct WildPokemon Route133_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_HORSEA}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route133_FishingMonsInfo = {30, Route133_FishingMons}; + +const struct WildPokemon Route134_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route134_WaterMonsInfo = {4, Route134_WaterMons}; + +const struct WildPokemon Route134_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_HORSEA}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo Route134_FishingMonsInfo = {30, Route134_FishingMons}; + +const struct WildPokemon SafariZone_Northwest_LandMons [] = +{ + {27, 27, SPECIES_RHYHORN}, + {27, 27, SPECIES_ODDISH}, + {29, 29, SPECIES_RHYHORN}, + {29, 29, SPECIES_ODDISH}, + {27, 27, SPECIES_DODUO}, + {29, 29, SPECIES_GLOOM}, + {31, 31, SPECIES_GLOOM}, + {29, 29, SPECIES_DODUO}, + {29, 29, SPECIES_DODRIO}, + {27, 27, SPECIES_PINSIR}, + {31, 31, SPECIES_DODRIO}, + {29, 29, SPECIES_PINSIR}, +}; +const struct WildPokemonInfo SafariZone_Northwest_LandMonsInfo = {25, SafariZone_Northwest_LandMons}; + +const struct WildPokemon SafariZone_Northwest_WaterMons [] = +{ + {20, 30, SPECIES_PSYDUCK}, + {20, 30, SPECIES_PSYDUCK}, + {30, 35, SPECIES_PSYDUCK}, + {30, 35, SPECIES_GOLDUCK}, + {25, 40, SPECIES_GOLDUCK}, +}; +const struct WildPokemonInfo SafariZone_Northwest_WaterMonsInfo = {9, SafariZone_Northwest_WaterMons}; + +const struct WildPokemon SafariZone_Northwest_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_GOLDEEN}, + {10, 30, SPECIES_MAGIKARP}, + {10, 25, SPECIES_GOLDEEN}, + {10, 30, SPECIES_GOLDEEN}, + {25, 30, SPECIES_GOLDEEN}, + {30, 35, SPECIES_GOLDEEN}, + {30, 35, SPECIES_SEAKING}, + {35, 40, SPECIES_SEAKING}, + {25, 30, SPECIES_SEAKING}, +}; +const struct WildPokemonInfo SafariZone_Northwest_FishingMonsInfo = {35, SafariZone_Northwest_FishingMons}; + +const struct WildPokemon SafariZone_Northeast_LandMons [] = +{ + {27, 27, SPECIES_PHANPY}, + {27, 27, SPECIES_ODDISH}, + {29, 29, SPECIES_PHANPY}, + {29, 29, SPECIES_ODDISH}, + {27, 27, SPECIES_NATU}, + {29, 29, SPECIES_GLOOM}, + {31, 31, SPECIES_GLOOM}, + {29, 29, SPECIES_NATU}, + {29, 29, SPECIES_XATU}, + {27, 27, SPECIES_HERACROSS}, + {31, 31, SPECIES_XATU}, + {29, 29, SPECIES_HERACROSS}, +}; +const struct WildPokemonInfo SafariZone_Northeast_LandMonsInfo = {25, SafariZone_Northeast_LandMons}; + +const struct WildPokemon SafariZone_Northeast_RockSmashMons [] = +{ + {10, 15, SPECIES_GEODUDE}, + {5, 10, SPECIES_GEODUDE}, + {15, 20, SPECIES_GEODUDE}, + {20, 25, SPECIES_GEODUDE}, + {25, 30, SPECIES_GEODUDE}, +}; +const struct WildPokemonInfo SafariZone_Northeast_RockSmashMonsInfo = {25, SafariZone_Northeast_RockSmashMons}; + +const struct WildPokemon SafariZone_Southwest_LandMons [] = +{ + {25, 25, SPECIES_ODDISH}, + {27, 27, SPECIES_ODDISH}, + {25, 25, SPECIES_GIRAFARIG}, + {27, 27, SPECIES_GIRAFARIG}, + {25, 25, SPECIES_NATU}, +#ifdef SAPPHIRE + {27, 27, SPECIES_DODUO}, +#else + {25, 25, SPECIES_DODUO}, +#endif + {25, 25, SPECIES_GLOOM}, + {27, 27, SPECIES_WOBBUFFET}, + {25, 25, SPECIES_PIKACHU}, + {27, 27, SPECIES_WOBBUFFET}, + {27, 27, SPECIES_PIKACHU}, + {29, 29, SPECIES_WOBBUFFET}, +}; +const struct WildPokemonInfo SafariZone_Southwest_LandMonsInfo = {25, SafariZone_Southwest_LandMons}; + +const struct WildPokemon SafariZone_Southwest_WaterMons [] = +{ + {20, 30, SPECIES_PSYDUCK}, + {20, 30, SPECIES_PSYDUCK}, + {30, 35, SPECIES_PSYDUCK}, + {30, 35, SPECIES_PSYDUCK}, + {30, 35, SPECIES_PSYDUCK}, +}; +const struct WildPokemonInfo SafariZone_Southwest_WaterMonsInfo = {9, SafariZone_Southwest_WaterMons}; + +const struct WildPokemon SafariZone_Southwest_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_GOLDEEN}, + {10, 30, SPECIES_MAGIKARP}, + {10, 25, SPECIES_GOLDEEN}, + {10, 30, SPECIES_GOLDEEN}, + {25, 30, SPECIES_GOLDEEN}, + {30, 35, SPECIES_GOLDEEN}, + {30, 35, SPECIES_SEAKING}, + {35, 40, SPECIES_SEAKING}, + {25, 30, SPECIES_SEAKING}, +}; +const struct WildPokemonInfo SafariZone_Southwest_FishingMonsInfo = {35, SafariZone_Southwest_FishingMons}; + +const struct WildPokemon SafariZone_Southeast_LandMons [] = +{ + {25, 25, SPECIES_ODDISH}, + {27, 27, SPECIES_ODDISH}, + {25, 25, SPECIES_GIRAFARIG}, + {27, 27, SPECIES_GIRAFARIG}, + {25, 25, SPECIES_NATU}, + {25, 25, SPECIES_DODUO}, + {25, 25, SPECIES_GLOOM}, + {27, 27, SPECIES_WOBBUFFET}, + {25, 25, SPECIES_PIKACHU}, + {27, 27, SPECIES_WOBBUFFET}, + {27, 27, SPECIES_PIKACHU}, + {29, 29, SPECIES_WOBBUFFET}, +}; +const struct WildPokemonInfo SafariZone_Southeast_LandMonsInfo = {25, SafariZone_Southeast_LandMons}; + +const struct WildPokemon DewfordTown_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo DewfordTown_WaterMonsInfo = {4, DewfordTown_WaterMons}; + +const struct WildPokemon DewfordTown_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_WAILMER}, + {20, 25, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo DewfordTown_FishingMonsInfo = {10, DewfordTown_FishingMons}; + +const struct WildPokemon PacifidlogTown_WaterMons [] = +{ + {5, 35, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WINGULL}, + {15, 25, SPECIES_WINGULL}, + {25, 30, SPECIES_PELIPPER}, + {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo PacifidlogTown_WaterMonsInfo = {4, PacifidlogTown_WaterMons}; + +const struct WildPokemon PacifidlogTown_FishingMons [] = +{ + {5, 10, SPECIES_MAGIKARP}, + {5, 10, SPECIES_TENTACOOL}, + {10, 30, SPECIES_MAGIKARP}, + {10, 30, SPECIES_TENTACOOL}, + {10, 30, SPECIES_WAILMER}, + {30, 35, SPECIES_SHARPEDO}, + {30, 35, SPECIES_WAILMER}, + {25, 30, SPECIES_WAILMER}, + {35, 40, SPECIES_WAILMER}, + {40, 45, SPECIES_WAILMER}, +}; +const struct WildPokemonInfo PacifidlogTown_FishingMonsInfo = {10, PacifidlogTown_FishingMons}; + +const struct WildPokemon Underwater1_WaterMons [] = +{ + {20, 30, SPECIES_CLAMPERL}, + {20, 30, SPECIES_CHINCHOU}, + {30, 35, SPECIES_CLAMPERL}, + {30, 35, SPECIES_RELICANTH}, + {30, 35, SPECIES_RELICANTH}, +}; +const struct WildPokemonInfo Underwater1_WaterMonsInfo = {4, Underwater1_WaterMons}; + +const struct WildPokemon Underwater2_WaterMons [] = +{ + {20, 30, SPECIES_CLAMPERL}, + {20, 30, SPECIES_CHINCHOU}, + {30, 35, SPECIES_CLAMPERL}, + {30, 35, SPECIES_RELICANTH}, + {30, 35, SPECIES_RELICANTH}, +}; +const struct WildPokemonInfo Underwater2_WaterMonsInfo = {4, Underwater2_WaterMons}; + + +extern u16 gRoute119WaterTileData[]; +extern u16 gScriptResult; +extern struct WildPokemon gWildFeebasRoute119Data; +extern u8 Event_RepelWoreOff[]; + +EWRAM_DATA static u8 sWildEncountersDisabled = 0; +EWRAM_DATA static u32 sFeebasRngValue = 0; + +#define NUM_FEEBAS_SPOTS 6 + +static u16 FeebasRandom(void); +static void FeebasSeedRng(u16 seed); + +static bool8 RepelCheck(u8 level); +static void ApplyFluteEncounterRateMod(u32 *encRate); +static void ApplyCleanseTagEncounterRateMod(u32 *encRate); + +void DisableWildEncounters(bool8 disabled) +{ + sWildEncountersDisabled = disabled; +} + +static u16 GetRoute119WaterTileNum(s16 x, s16 y, u8 section) +{ + u16 xCur; + u16 yCur; + u16 yMin = gRoute119WaterTileData[section * 3 + 0]; + u16 yMax = gRoute119WaterTileData[section * 3 + 1]; + u16 tileNum = gRoute119WaterTileData[section * 3 + 2]; + + for (yCur = yMin; yCur <= yMax; yCur++) + { + for (xCur = 0; xCur < gMapHeader.mapData->width; xCur++) + { + if (sub_805759C(MapGridGetMetatileBehaviorAt(xCur + 7, yCur + 7)) == TRUE) + { + tileNum++; + if (x == xCur && y == yCur) + return tileNum; + } + } + } + return tileNum + 1; +} + +static bool8 CheckFeebas(void) +{ + u8 i; + u16 feebasSpots[6]; + s16 x; + s16 y; + u8 route119section = 0; + u16 waterTileNum; + + if (gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 0x22) + { + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + x -= 7; + y -= 7; + +#ifdef NONMATCHING + if (y >= gRoute119WaterTileData[3 * 1 + 0] && y <= gRoute119WaterTileData[3 * 1 + 1]) + route119section = 1; + if (y >= gRoute119WaterTileData[3 * 2 + 0] && y <= gRoute119WaterTileData[3 * 2 + 1]) + route119section = 2; +#else + { + register u16 *arr asm("r0"); + if (y >= (arr = gRoute119WaterTileData)[3 * 1 + 0] && y <= arr[3 * 1 + 1]) + route119section = 1; + if (y >= arr[3 * 2 + 0] && y <= arr[3 * 2 + 1]) + route119section = 2; + } +#endif + + if (Random() % 100 > 49) //50% chance of encountering Feebas + return FALSE; + + FeebasSeedRng(gSaveBlock1.easyChatPairs[0].unk2); + for (i = 0; i != NUM_FEEBAS_SPOTS;) + { + feebasSpots[i] = FeebasRandom() % 447; + if (feebasSpots[i] == 0) + feebasSpots[i] = 447; + if (feebasSpots[i] < 1 || feebasSpots[i] >= 4) + i++; + } + waterTileNum = GetRoute119WaterTileNum(x, y, route119section); + for (i = 0; i < NUM_FEEBAS_SPOTS; i++) + { + if (waterTileNum == feebasSpots[i]) + return TRUE; + } + } + return FALSE; +} + +static u16 FeebasRandom(void) +{ + sFeebasRngValue = 12345 + 0x41C64E6D * sFeebasRngValue; + return sFeebasRngValue >> 16; +} + +static void FeebasSeedRng(u16 seed) +{ + sFeebasRngValue = seed; +} + +static u8 ChooseWildMonIndex_Land(void) +{ + u8 rand = Random() % 100; + + if (rand < 20) //20% chance + return 0; + if (rand >= 20 && rand < 40) //20% chance + return 1; + if (rand >= 40 && rand < 50) //10% chance + return 2; + if (rand >= 50 && rand < 60) //10% chance + return 3; + if (rand >= 60 && rand < 70) //10% chance + return 4; + if (rand >= 70 && rand < 80) //10% chance + return 5; + if (rand >= 80 && rand < 85) //5% chance + return 6; + if (rand >= 85 && rand < 90) //5% chance + return 7; + if (rand >= 90 && rand < 94) //4% chance + return 8; + if (rand >= 94 && rand < 98) //4% chance + return 9; + if (rand == 98) //1% chance + return 10; + else //1% chance + return 11; +} + +static u8 ChooseWildMonIndex_Water(void) +{ + u8 rand = Random() % 100; + + if (rand < 60) //60% chance + return 0; + if (rand >= 60 && rand < 90) //30% chance + return 1; + if (rand >= 90 && rand < 95) //5% chance + return 2; + if (rand >= 95 && rand < 99) //4% chance + return 3; + else //1% chance + return 4; +} + +enum +{ + OLD_ROD, + GOOD_ROD, + SUPER_ROD +}; + +static u8 ChooseWildMonIndex_Fishing(u8 rod) +{ + u8 wildMonIndex = 0; + u8 rand = Random() % 100; + + switch (rod) + { + case OLD_ROD: + if (rand < 70) //70% chance + wildMonIndex = 0; + else //30% chance + wildMonIndex = 1; + break; + case GOOD_ROD: + if (rand < 60) //60% chance + wildMonIndex = 2; + if (rand >= 60 && rand < 80) //20% chance + wildMonIndex = 3; + if (rand >= 80 && rand < 100) //20% chance + wildMonIndex = 4; + break; + case SUPER_ROD: + if (rand < 40) //40% chance + wildMonIndex = 5; + if (rand >= 40 && rand < 80) //40% chance + wildMonIndex = 6; + if (rand >= 80 && rand < 95) //15% chance + wildMonIndex = 7; + if (rand >= 95 && rand < 99) //4% chance + wildMonIndex = 8; + if (rand == 99) //1% chance + wildMonIndex = 9; + break; + } + return wildMonIndex; +} + +static u8 ChooseWildMonLevel(const struct WildPokemon *wildPokemon) +{ + u8 min; + u8 max; + u8 range; + u8 rand; + + //Make sure minimum level is less than maximum level + if (wildPokemon->maxLevel >= wildPokemon->minLevel) + { + min = wildPokemon->minLevel; + max = wildPokemon->maxLevel; + } + else + { + min = wildPokemon->maxLevel; + max = wildPokemon->minLevel; + } + range = max - min + 1; + rand = Random() % range; + return min + rand; +} + +static u16 GetCurrentMapWildMonHeader(void) +{ + u16 i; + + for (i = 0; gWildMonHeaders[i].mapGroup != 0xFF; i++) + { + if (gWildMonHeaders[i].mapGroup == gSaveBlock1.location.mapGroup && + gWildMonHeaders[i].mapNum == gSaveBlock1.location.mapNum) + return i; + } + return -1; +} + +static u8 PickWildMonNature(void) +{ + u8 i; + u8 j; + struct Pokeblock *safariPokeblock; + u8 natures[25]; + + if (GetSafariZoneFlag() == TRUE && Random() % 100 < 80) + { + safariPokeblock = SafariZoneGetActivePokeblock(); + if (safariPokeblock != NULL) + { + for (i = 0; i < 25; i++) + natures[i] = i; + for (i = 0; i < 24; i++) + { + for (j = i + 1; j < 25; j++) + { + if (Random() & 1) + { + u8 temp = natures[i]; + + natures[i] = natures[j]; + natures[j] = temp; + } + } + } + for (i = 0; i < 25; i++) + { + if (sub_810CAE4(natures[i], safariPokeblock) > 0) + return natures[i]; + } + } + } + return Random() % 25; +} + +static void CreateWildMon(u16 species, u8 b) +{ + ZeroEnemyPartyMons(); + CreateMonWithNature(&gEnemyParty[0], species, b, 0x20, PickWildMonNature()); +} + +static bool8 GenerateWildMon(struct WildPokemonInfo *wildMonInfo, u8 area, bool8 checkRepel) +{ + u8 wildMonIndex = 0; + u8 level; + + switch (area) + { + case 0: + wildMonIndex = ChooseWildMonIndex_Land(); + break; + case 1: + wildMonIndex = ChooseWildMonIndex_Water(); + break; + case 2: + wildMonIndex = ChooseWildMonIndex_Water(); + break; + } + level = ChooseWildMonLevel(&wildMonInfo->wildPokemon[wildMonIndex]); + if (checkRepel == TRUE && RepelCheck(level) == FALSE) + return FALSE; + else + { + CreateWildMon(wildMonInfo->wildPokemon[wildMonIndex].species, level); + return TRUE; + } +} + +static u16 GenerateFishingWildMon(struct WildPokemonInfo *wildMonInfo, u8 rod) +{ + u8 wildMonIndex = ChooseWildMonIndex_Fishing(rod); + u8 level = ChooseWildMonLevel(&wildMonInfo->wildPokemon[wildMonIndex]); + + CreateWildMon(wildMonInfo->wildPokemon[wildMonIndex].species, level); + return wildMonInfo->wildPokemon[wildMonIndex].species; +} + +static bool8 SetUpMassOutbreakEncounter(bool8 checkRepel) +{ + u16 i; + + if (checkRepel == TRUE && RepelCheck(gSaveBlock1.outbreakPokemonLevel) == 0) + return FALSE; + else + { + CreateWildMon(gSaveBlock1.outbreakPokemonSpecies, gSaveBlock1.outbreakPokemonLevel); + for (i = 0; i < 4; i++) + SetMonMoveSlot(&gEnemyParty[0], gSaveBlock1.outbreakPokemonMoves[i], i); + return TRUE; + } +} + +static bool8 DoMassOutbreakEncounterTest(void) +{ + if (gSaveBlock1.outbreakPokemonSpecies != 0 + && gSaveBlock1.location.mapNum == gSaveBlock1.outbreakLocationMapNum + && gSaveBlock1.location.mapGroup == gSaveBlock1.outbreakLocationMapGroup) + { + if (Random() % 100 < gSaveBlock1.outbreakPokemonProbability) + return TRUE; + } + return FALSE; +} + +static bool8 DoWildEncounterRateDiceRoll(u16 encounterRate) +{ + if (Random() % 2880 < encounterRate) + return TRUE; + else + return FALSE; +} + +static bool8 DoWildEncounterTest(u32 encounterRate, bool8 ignoreAbility) +{ + encounterRate *= 16; + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) + encounterRate = encounterRate * 80 / 100; + ApplyFluteEncounterRateMod(&encounterRate); + ApplyCleanseTagEncounterRateMod(&encounterRate); + if (!ignoreAbility) + { + // UB: Too few arguments for function 'GetMonData' + if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)) + { + u32 ability = GetMonAbility(&gPlayerParty[0]); + if (ability == ABILITY_STENCH) + encounterRate /= 2; + if (ability == ABILITY_ILLUMINATE) + encounterRate *= 2; + } + } + if (encounterRate > 2880) + encounterRate = 2880; + return DoWildEncounterRateDiceRoll(encounterRate); +} + +static bool8 DoGlobalWildEncounterDiceRoll(void) +{ + if (Random() % 100 >= 60) + return FALSE; + else + return TRUE; +} + +bool8 StandardWildEncounter(u16 a, u16 b) +{ + u16 headerNum; + struct Roamer *roamer; + + if (sWildEncountersDisabled == TRUE) + return 0; + else + { + headerNum = GetCurrentMapWildMonHeader(); + if (headerNum != 0xFFFF) + { + if (MetatileBehavior_IsLandWildEncounter(a) == TRUE) + { + if (gWildMonHeaders[headerNum].landMonsInfo) + { + if (b != a && !DoGlobalWildEncounterDiceRoll()) + return 0; + + if (DoWildEncounterTest(gWildMonHeaders[headerNum].landMonsInfo->encounterRate, 0) == TRUE) + { + if (TryStartRoamerEncounter() == TRUE) + { + roamer = &gSaveBlock1.roamer; + if (RepelCheck(roamer->level)) + { + StartBattle_Roamer(); + return 1; + } + } + else + { + if (DoMassOutbreakEncounterTest() == TRUE && SetUpMassOutbreakEncounter(1) == TRUE) + { + CheckForSafariZoneAndProceed(); + return 1; + } + if (GenerateWildMon(gWildMonHeaders[headerNum].landMonsInfo, 0, TRUE) == TRUE) + { + goto label; + } + } + } + } + } + else if (MetatileBehavior_IsWaterWildEncounter(a) == TRUE + || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridge(a) == TRUE)) + { + if (gWildMonHeaders[headerNum].waterMonsInfo) + { + if (b != a && !DoGlobalWildEncounterDiceRoll()) + return 0; + + if (DoWildEncounterTest(gWildMonHeaders[headerNum].waterMonsInfo->encounterRate, 0) == TRUE) + { + if (TryStartRoamerEncounter() == TRUE) + { + roamer = &gSaveBlock1.roamer; + if (RepelCheck(roamer->level)) + { + StartBattle_Roamer(); + return 1; + } + } + else + { + //_08085268 + if (GenerateWildMon(gWildMonHeaders[headerNum].waterMonsInfo, 1, TRUE) == TRUE) + { + label: + //_0808527A + CheckForSafariZoneAndProceed(); + return 1; + } + } + } + } + } + } + } + return 0; +} + +void RockSmashWildEncounter(void) +{ + u16 headerNum = GetCurrentMapWildMonHeader(); + + if (headerNum != 0xFFFF) + { + struct WildPokemonInfo *wildPokemonInfo = gWildMonHeaders[headerNum].rockSmashMonsInfo; + + if (wildPokemonInfo == NULL) + { + gScriptResult = 0; + return; + } + else if (DoWildEncounterTest(wildPokemonInfo->encounterRate, 1) == TRUE + && GenerateWildMon(wildPokemonInfo, 2, TRUE) == TRUE) + { + CheckForSafariZoneAndProceed(); + gScriptResult = 1; + return; + } + } + gScriptResult = 0; + return; +} + +bool8 SweetScentWildEncounter(void) +{ + s16 x; + s16 y; + u16 headerNum; + struct WildPokemonInfo *wildPokemonInfo; + + PlayerGetDestCoords(&x, &y); + if ((headerNum = GetCurrentMapWildMonHeader()) != 0xFFFF) + { + if (MetatileBehavior_IsLandWildEncounter(MapGridGetMetatileBehaviorAt(x, y)) == 1) + { + wildPokemonInfo = gWildMonHeaders[headerNum].landMonsInfo; + if (wildPokemonInfo == NULL) + return FALSE; + if (TryStartRoamerEncounter() == TRUE) + { + StartBattle_Roamer(); + return TRUE; + } + if (DoMassOutbreakEncounterTest() == TRUE) + SetUpMassOutbreakEncounter(0); + else + GenerateWildMon(wildPokemonInfo, 0, FALSE); + CheckForSafariZoneAndProceed(); + return TRUE; + } + else if (MetatileBehavior_IsWaterWildEncounter(MapGridGetMetatileBehaviorAt(x, y)) == 1) + { + wildPokemonInfo = gWildMonHeaders[headerNum].waterMonsInfo; + if (wildPokemonInfo == NULL) + return FALSE; + if (TryStartRoamerEncounter() == TRUE) + { + StartBattle_Roamer(); + return TRUE; + } + GenerateWildMon(wildPokemonInfo, 1, FALSE); + CheckForSafariZoneAndProceed(); + return TRUE; + } + } + return FALSE; +} + +bool8 GetFishingWildMonListHeader(void) +{ + u16 headerNum = GetCurrentMapWildMonHeader(); + + if (headerNum != 0xFFFF && gWildMonHeaders[headerNum].fishingMonsInfo != NULL) + return TRUE; + else + return FALSE; +} + +void FishingWildEncounter(u8 rod) +{ + u16 species; + + if (CheckFeebas() == TRUE) + { + u8 level = ChooseWildMonLevel(&gWildFeebasRoute119Data); + + species = gWildFeebasRoute119Data.species; + CreateWildMon(species, level); + } + else + { + species = GenerateFishingWildMon( + gWildMonHeaders[GetCurrentMapWildMonHeader()].fishingMonsInfo, + rod); + } + IncrementGameStat(12); + sub_80BEA50(species); + CheckForSafariZoneAndProceed(); +} + +u16 GetLocalWildMon(bool8 *isWaterMon) +{ + u16 headerNum; + struct WildPokemonInfo *landMonsInfo; + struct WildPokemonInfo *waterMonsInfo; + + *isWaterMon = FALSE; + headerNum = GetCurrentMapWildMonHeader(); + if (headerNum == 0xFFFF) + return 0; + landMonsInfo = gWildMonHeaders[headerNum].landMonsInfo; + waterMonsInfo = gWildMonHeaders[headerNum].waterMonsInfo; + //Neither + if (landMonsInfo == NULL && waterMonsInfo == NULL) + return 0; + //Land Pokemon + if (landMonsInfo != NULL && waterMonsInfo == NULL) + return landMonsInfo->wildPokemon[ChooseWildMonIndex_Land()].species; + //Water Pokemon + if (landMonsInfo == NULL && waterMonsInfo != NULL) + { + *isWaterMon = TRUE; + return waterMonsInfo->wildPokemon[ChooseWildMonIndex_Water()].species; + } + //Either land or water Pokemon + if ((Random() % 100) < 80) + return landMonsInfo->wildPokemon[ChooseWildMonIndex_Land()].species; + else + { + *isWaterMon = TRUE; + return waterMonsInfo->wildPokemon[ChooseWildMonIndex_Water()].species; + } +} + +u16 GetMirageIslandMon(void) +{ + u16 headerNum = GetCurrentMapWildMonHeader(); + + if (headerNum != 0xFFFF) + { + struct WildPokemonInfo *waterMonsInfo = gWildMonHeaders[headerNum].waterMonsInfo; + + if (waterMonsInfo) + return waterMonsInfo->wildPokemon[ChooseWildMonIndex_Water()].species; + } + return 0; +} + +bool8 UpdateRepelCounter(void) +{ + u16 steps = VarGet(VAR_REPEL_STEP_COUNT); + + if (steps != 0) + { + steps--; + VarSet(VAR_REPEL_STEP_COUNT, steps); + if (steps == 0) + { + ScriptContext1_SetupScript(Event_RepelWoreOff); + return TRUE; + } + } + return FALSE; +} + +//Returns FALSE if Repel prevents wild Pokemon at the specified level from appearing +static bool8 RepelCheck(u8 level) +{ + u8 i; + + if (!VarGet(VAR_REPEL_STEP_COUNT)) + return TRUE; + else + { + for (i = 0; i < 6; i++) + { + // UB: Too few arguments for function 'GetMonData' + if (GetMonData(&gPlayerParty[i], MON_DATA_HP) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + { + if (level < (u8)GetMonData(&gPlayerParty[i], MON_DATA_LEVEL)) + return FALSE; + else + return TRUE; + } + } + return FALSE; + } +} + +static void ApplyFluteEncounterRateMod(u32 *encRate) +{ + if (FlagGet(SYS_ENC_UP_ITEM) == TRUE) + *encRate += *encRate / 2; + else if (FlagGet(SYS_ENC_DOWN_ITEM) == TRUE) + *encRate = *encRate / 2; +} + +static void ApplyCleanseTagEncounterRateMod(u32 *encRate) +{ + // UB: Too few arguments for function 'GetMonData' + if (GetMonData(&gPlayerParty[0], MON_DATA_HELD_ITEM) == 0xBE) + *encRate = *encRate * 2 / 3; +} diff --git a/src/field_camera.c b/src/field_camera.c deleted file mode 100644 index db51cf054..000000000 --- a/src/field_camera.c +++ /dev/null @@ -1,495 +0,0 @@ -#include "global.h" -#include "field_camera.h" -#include "berry.h" -#include "field_player_avatar.h" -#include "fieldmap.h" -#include "rotating_gate.h" -#include "sprite.h" -#include "text.h" - -EWRAM_DATA u8 gUnknown_0202E854 = 0; - -struct UnknownStruct -{ - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; - bool8 unk4; -}; - -static struct UnknownStruct gUnknown_03000590; -static u16 gUnknown_03000598; -static s16 gUnknown_0300059A; -static u8 gUnknown_0300059C; -static void (*gUnknown_030005A0)(void); - -struct CameraSomething gUnknown_03004880; -u16 gUnknown_03004898; -u16 gUnknown_0300489C; - -static void RedrawMapSliceNorth(struct UnknownStruct *a, struct MapData *mapData); -static void RedrawMapSliceSouth(struct UnknownStruct *a, struct MapData *mapData); -static void RedrawMapSliceEast(struct UnknownStruct *a, struct MapData *mapData); -static void RedrawMapSliceWest(struct UnknownStruct *a, struct MapData *mapData); -static s32 MapPosToBgTilemapOffset(struct UnknownStruct *a, s32 x, s32 y); - -static void DrawWholeMapViewInternal(int x, int y, struct MapData *mapData); -static void DrawMetatileAt(struct MapData *mapData, u16, int, int); -static void DrawMetatile(s32 a, u16 *b, u16 c); -static void CameraPanningCB_PanAhead(void); - -static void move_tilemap_camera_to_upper_left_corner_(struct UnknownStruct *a) -{ - a->unk2 = 0; - a->unk3 = 0; - a->unk0 = 0; - a->unk1 = 0; - a->unk4 = TRUE; -} - -static void tilemap_move_something(struct UnknownStruct *a, u32 b, u32 c) -{ - a->unk2 += b; - a->unk2 %= 32; - a->unk3 += c; - a->unk3 %= 32; -} - -static void coords8_add(struct UnknownStruct *a, u32 b, u32 c) -{ - a->unk0 += b; - a->unk1 += c; -} - -void move_tilemap_camera_to_upper_left_corner(void) -{ - move_tilemap_camera_to_upper_left_corner_(&gUnknown_03000590); - CpuFill16(0, gBGTilemapBuffers[2], 0x800); - CpuFill16(0, gBGTilemapBuffers[1], 0x800); - CpuFill16(0x3014, gBGTilemapBuffers[3], 0x800); -} - -void sub_8057A58(void) -{ - *gBGHOffsetRegs[1] = gUnknown_03000590.unk0 + gUnknown_03000598; - *gBGVOffsetRegs[1] = gUnknown_03000590.unk1 + gUnknown_0300059A + 8; - *gBGHOffsetRegs[2] = gUnknown_03000590.unk0 + gUnknown_03000598; - *gBGVOffsetRegs[2] = gUnknown_03000590.unk1 + gUnknown_0300059A + 8; - *gBGHOffsetRegs[3] = gUnknown_03000590.unk0 + gUnknown_03000598; - *gBGVOffsetRegs[3] = gUnknown_03000590.unk1 + gUnknown_0300059A + 8; - - if (gUnknown_03000590.unk4) - { - DmaCopy16(3, gBGTilemapBuffers[1], (void *)(VRAM + 0xE800), 0x800); - DmaCopy16(3, gBGTilemapBuffers[2], (void *)(VRAM + 0xE000), 0x800); - DmaCopy16(3, gBGTilemapBuffers[3], (void *)(VRAM + 0xF000), 0x800); - gUnknown_03000590.unk4 = FALSE; - } -} - -void sub_8057B14(u16 *a, u16 *b) -{ - *a = gUnknown_03000590.unk0 + gUnknown_03000598; - *b = gUnknown_03000590.unk1 + gUnknown_0300059A + 8; -} - -void DrawWholeMapView(void) -{ - DrawWholeMapViewInternal(gSaveBlock1.pos.x, gSaveBlock1.pos.y, gMapHeader.mapData); - gUnknown_03000590.unk4 = TRUE; -} - -static void DrawWholeMapViewInternal(int x, int y, struct MapData *mapData) -{ - u8 i; - u8 j; - u32 r6; - u8 temp; - - for (i = 0; i < 32; i += 2) - { - temp = gUnknown_03000590.unk3 + i; - if (temp >= 32) - temp -= 32; - r6 = temp * 32; - for (j = 0; j < 32; j += 2) - { - temp = gUnknown_03000590.unk2 + j; - if (temp >= 32) - temp -= 32; - DrawMetatileAt(mapData, r6 + temp, x + j / 2, y + i / 2); - } - } -} - -static void RedrawMapSlicesForCameraUpdate(struct UnknownStruct *a, int x, int y) -{ - struct MapData *mapData = gMapHeader.mapData; - - if (x > 0) - RedrawMapSliceWest(a, mapData); - if (x < 0) - RedrawMapSliceEast(a, mapData); - if (y > 0) - RedrawMapSliceNorth(a, mapData); - if (y < 0) - RedrawMapSliceSouth(a, mapData); - a->unk4 = TRUE; -} - -static void RedrawMapSliceNorth(struct UnknownStruct *a, struct MapData *mapData) -{ - u8 i; - u8 temp; - u32 r7; - - temp = a->unk3 + 28; - if (temp >= 32) - temp -= 32; - r7 = temp * 32; - for (i = 0; i < 32; i += 2) - { - temp = a->unk2 + i; - if (temp >= 32) - temp -= 32; - DrawMetatileAt(mapData, r7 + temp, gSaveBlock1.pos.x + i / 2, gSaveBlock1.pos.y + 14); - } -} - -static void RedrawMapSliceSouth(struct UnknownStruct *a, struct MapData *mapData) -{ - u8 i; - u8 temp; - u32 r7 = a->unk3 * 32; - - for (i = 0; i < 32; i += 2) - { - temp = a->unk2 + i; - if (temp >= 32) - temp -= 32; - DrawMetatileAt(mapData, r7 + temp, gSaveBlock1.pos.x + i / 2, gSaveBlock1.pos.y); - } -} - -static void RedrawMapSliceEast(struct UnknownStruct *a, struct MapData *mapData) -{ - u8 i; - u8 temp; - u32 r6 = a->unk2; - - for (i = 0; i < 32; i += 2) - { - temp = a->unk3 + i; - if (temp >= 32) - temp -= 32; - DrawMetatileAt(mapData, temp * 32 + r6, gSaveBlock1.pos.x, gSaveBlock1.pos.y + i / 2); - } -} - -static void RedrawMapSliceWest(struct UnknownStruct *a, struct MapData *mapData) -{ - u8 i; - u8 temp; - u8 r5 = a->unk2 + 28; - - if (r5 >= 32) - r5 -= 32; - for (i = 0; i < 32; i += 2) - { - temp = a->unk3 + i; - if (temp >= 32) - temp -= 32; - DrawMetatileAt(mapData, temp * 32 + r5, gSaveBlock1.pos.x + 14, gSaveBlock1.pos.y + i / 2); - } -} - -void CurrentMapDrawMetatileAt(int a, int b) -{ - int offset = MapPosToBgTilemapOffset(&gUnknown_03000590, a, b); - - if (offset >= 0) - { - DrawMetatileAt(gMapHeader.mapData, offset, a, b); - gUnknown_03000590.unk4 = TRUE; - } -} - -void DrawDoorMetatileAt(int x, int y, u16 *arr) -{ - int offset = MapPosToBgTilemapOffset(&gUnknown_03000590, x, y); - - if (offset >= 0) - { - DrawMetatile(1, arr, offset); - gUnknown_03000590.unk4 = TRUE; - } -} - -static void DrawMetatileAt(struct MapData *mapData, u16 b, int c, int d) -{ - u16 metatileId = MapGridGetMetatileIdAt(c, d); - u16 *metatiles; - - if (metatileId > 1024) - metatileId = 0; - if (metatileId < 512) - metatiles = mapData->primaryTileset->metatiles; - else - { - metatiles = mapData->secondaryTileset->metatiles; - metatileId -= 512; - } - DrawMetatile(MapGridGetMetatileLayerTypeAt(c, d), metatiles + metatileId * 8, b); -} - -static void DrawMetatile(s32 a, u16 *b, u16 c) -{ - switch (a) - { - case 2: - gBGTilemapBuffers[3][c] = b[0]; - gBGTilemapBuffers[3][c + 1] = b[1]; - gBGTilemapBuffers[3][c + 0x20] = b[2]; - gBGTilemapBuffers[3][c + 0x21] = b[3]; - - gBGTilemapBuffers[2][c] = 0; - gBGTilemapBuffers[2][c + 1] = 0; - gBGTilemapBuffers[2][c + 0x20] = 0; - gBGTilemapBuffers[2][c + 0x21] = 0; - - gBGTilemapBuffers[1][c] = b[4]; - gBGTilemapBuffers[1][c + 1] = b[5]; - gBGTilemapBuffers[1][c + 0x20] = b[6]; - gBGTilemapBuffers[1][c + 0x21] = b[7]; - break; - case 1: - gBGTilemapBuffers[3][c] = b[0]; - gBGTilemapBuffers[3][c + 1] = b[1]; - gBGTilemapBuffers[3][c + 0x20] = b[2]; - gBGTilemapBuffers[3][c + 0x21] = b[3]; - - gBGTilemapBuffers[2][c] = b[4]; - gBGTilemapBuffers[2][c + 1] = b[5]; - gBGTilemapBuffers[2][c + 0x20] = b[6]; - gBGTilemapBuffers[2][c + 0x21] = b[7]; - - gBGTilemapBuffers[1][c] = 0; - gBGTilemapBuffers[1][c + 1] = 0; - gBGTilemapBuffers[1][c + 0x20] = 0; - gBGTilemapBuffers[1][c + 0x21] = 0; - break; - case 0: - gBGTilemapBuffers[3][c] = 0x3014; - gBGTilemapBuffers[3][c + 1] = 0x3014; - gBGTilemapBuffers[3][c + 0x20] = 0x3014; - gBGTilemapBuffers[3][c + 0x21] = 0x3014; - - gBGTilemapBuffers[2][c] = b[0]; - gBGTilemapBuffers[2][c + 1] = b[1]; - gBGTilemapBuffers[2][c + 0x20] = b[2]; - gBGTilemapBuffers[2][c + 0x21] = b[3]; - - gBGTilemapBuffers[1][c] = b[4]; - gBGTilemapBuffers[1][c + 1] = b[5]; - gBGTilemapBuffers[1][c + 0x20] = b[6]; - gBGTilemapBuffers[1][c + 0x21] = b[7]; - break; - } -} - -static s32 MapPosToBgTilemapOffset(struct UnknownStruct *a, s32 x, s32 y) -{ - x -= gSaveBlock1.pos.x; - x *= 2; - if (x >= 32 || x < 0) - return -1; - x = x + a->unk2; - if (x >= 32) - x -= 32; - - y = (y - gSaveBlock1.pos.y) * 2; - if (y >= 32 || y < 0) - return -1; - y = y + a->unk3; - if (y >= 32) - y -= 32; - - return y * 32 + x; -} - -static void CameraUpdateCallback(struct CameraSomething *a) -{ - if (a->unk4 != 0) - { - a->unk8 = gSprites[a->unk4].data2; - a->unkC = gSprites[a->unk4].data3; - } -} - -void ResetCameraUpdateInfo(void) -{ - gUnknown_03004880.unk8 = 0; - gUnknown_03004880.unkC = 0; - gUnknown_03004880.unk10 = 0; - gUnknown_03004880.unk14 = 0; - gUnknown_03004880.unk4 = 0; - gUnknown_03004880.callback = NULL; -} - -u32 InitCameraUpdateCallback(u8 a) -{ - if (gUnknown_03004880.unk4 != 0) - DestroySprite(&gSprites[gUnknown_03004880.unk4]); - gUnknown_03004880.unk4 = AddCameraObject(a); - gUnknown_03004880.callback = CameraUpdateCallback; - return 0; -} - -void CameraUpdate(void) -{ - int deltaX; - int deltaY; - int r0; - int r1; - int r7; - int r8; - - if (gUnknown_03004880.callback != NULL) - gUnknown_03004880.callback(&gUnknown_03004880); - r7 = gUnknown_03004880.unk8; - r8 = gUnknown_03004880.unkC; - deltaX = 0; - deltaY = 0; - r1 = gUnknown_03004880.unk10; - r0 = gUnknown_03004880.unk14; - - - if (r1 == 0 && r7 != 0) - { - if (r7 > 0) - deltaX = 1; - else - deltaX = -1; - } - if (r0 == 0 && r8 != 0) - { - if (r8 > 0) - deltaY = 1; - else - deltaY = -1; - } - if (r1 != 0 && r1 == -r7) - { - if (r7 > 0) - deltaX = 1; - else - deltaX = -1; - } - if (r0 != 0 && r0 == -r8) - { - if (r8 > 0) - deltaX = 1; - else - deltaX = -1; - } - - gUnknown_03004880.unk10 += r7; - gUnknown_03004880.unk10 = gUnknown_03004880.unk10 - 16 * (gUnknown_03004880.unk10 / 16); - gUnknown_03004880.unk14 += r8; - gUnknown_03004880.unk14 = gUnknown_03004880.unk14 - 16 * (gUnknown_03004880.unk14 / 16); - - if (deltaX != 0 || deltaY != 0) - { - CameraMove(deltaX, deltaY); - UpdateFieldObjectsForCameraUpdate(deltaX, deltaY); - RotatingGatePuzzleCameraUpdate(deltaX, deltaY); - ResetBerryTreeSparkleFlags(); - tilemap_move_something(&gUnknown_03000590, deltaX * 2, deltaY * 2); - RedrawMapSlicesForCameraUpdate(&gUnknown_03000590, deltaX * 2, deltaY * 2); - } - - coords8_add(&gUnknown_03000590, r7, r8); - gUnknown_0300489C -= r7; - gUnknown_03004898 -= r8; -} - -void camera_move_and_redraw(int a, int b) -{ - CameraMove(a, b); - UpdateFieldObjectsForCameraUpdate(a, b); - DrawWholeMapView(); - gUnknown_0300489C -= a * 16; - gUnknown_03004898 -= b * 16; -} - -void SetCameraPanningCallback(void (*a)(void)) -{ - gUnknown_030005A0 = a; -} - -void SetCameraPanning(s16 a, s16 b) -{ - gUnknown_03000598 = a; - gUnknown_0300059A = b + 32; -} - -void InstallCameraPanAheadCallback(void) -{ - gUnknown_030005A0 = CameraPanningCB_PanAhead; - gUnknown_0300059C = 0; - gUnknown_03000598 = 0; - gUnknown_0300059A = 32; -} - -void UpdateCameraPanning(void) -{ - if (gUnknown_030005A0 != NULL) - gUnknown_030005A0(); - //Update sprite offset of overworld objects - gSpriteCoordOffsetX = gUnknown_0300489C - gUnknown_03000598; - gSpriteCoordOffsetY = gUnknown_03004898 - gUnknown_0300059A - 8; -} - -static void CameraPanningCB_PanAhead(void) -{ - u8 var; - - if (gUnknown_0202E854 == 0) - { - InstallCameraPanAheadCallback(); - } - else - { - if (gPlayerAvatar.running1 == 1) - { - gUnknown_0300059C ^= 1; - if (gUnknown_0300059C == 0) - return; - } - else - { - gUnknown_0300059C = 0; - } - - var = player_get_direction_upper_nybble(); - if (var == 2) - { - if (gUnknown_0300059A > -8) - gUnknown_0300059A -= 2; - } - else if (var == 1) - { - if (gUnknown_0300059A < 72) - gUnknown_0300059A += 2; - } - else if (gUnknown_0300059A < 32) - { - gUnknown_0300059A += 2; - } - else if (gUnknown_0300059A > 32) - { - gUnknown_0300059A -= 2; - } - } -} diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c deleted file mode 100644 index a8f6b6b9b..000000000 --- a/src/field_control_avatar.c +++ /dev/null @@ -1,878 +0,0 @@ -#include "global.h" -#include "field_control_avatar.h" -#include "battle_setup.h" -#include "bike.h" -#include "coord_event_weather.h" -#include "daycare.h" -#include "event_data.h" -#include "field_fadetransition.h" -#include "field_player_avatar.h" -#include "field_poison.h" -#include "field_specials.h" -#include "fieldmap.h" -#include "flags.h" -#include "item_menu.h" -#include "metatile_behavior.h" -#include "rom4.h" -#include "safari_zone.h" -#include "script.h" -#include "secret_base.h" -#include "songs.h" -#include "sound.h" -#include "start_menu.h" -#include "trainer_see.h" -#include "vars.h" -#include "wild_encounter.h" - -struct Coords32 -{ - s32 x; - s32 y; -}; - -extern u16 gScriptLastTalked; -extern u16 gScriptFacing; -extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; - -static EWRAM_DATA u8 gUnknown_0202E8C0 = 0; -static EWRAM_DATA u16 gUnknown_0202E8C2 = 0; - -u8 gSelectedMapObject; - -//scripts -extern u8 gUnknown_081A2C51[]; -extern u8 gUnknown_0815281E[]; -extern u8 gUnknown_08152C39[]; -extern u8 gUnknown_0815F36C[]; -extern u8 gUnknown_0815F43A[]; -extern u8 gUnknown_081A0009[]; -extern u8 gUnknown_081C6C02[]; -extern u8 HiddenItemScript[]; -extern u8 Event_TV[]; -extern u8 gUnknown_081A0009[]; -extern u8 ClosedSootopolisGymDoorScript[]; -extern u8 gUnknown_081A4363[]; -extern u8 gUnknown_081C346A[]; -extern u8 gUnknown_081616E1[]; -extern u8 Event_WorldMap[]; -extern u8 Event_RunningShoesManual[]; -extern u8 PictureBookShelfScript[]; -extern u8 BookshelfScript[]; -extern u8 PokemonCenterBookshelfScript[]; -extern u8 VaseScript[]; -extern u8 TrashCanScript[]; -extern u8 ShopShelfScript[]; -extern u8 BlueprintScript[]; -extern u8 gUnknown_0815F36C[]; -extern u8 gUnknown_0815F43A[]; -extern u8 gUnknown_0815F523[]; -extern u8 gUnknown_0815F528[]; -extern u8 UseSurfScript[]; -extern u8 UseWaterfallScript[]; -extern u8 CannotUseWaterfallScript[]; -extern u8 UseDiveScript[]; -extern u8 UnderwaterUseDiveScript[]; -extern u8 GraniteCave_B1F_EventScript_1C6BC5[]; -extern u8 gUnknown_081A14B8[]; -extern u8 Event_EggHatch[]; -extern u8 gUnknown_0815FD0D[]; -extern u8 gUnknown_081C6BDE[]; - -static void player_get_pos_to_and_height(struct MapPosition *); -static void player_get_next_pos_and_height(struct MapPosition *); -static u16 cur_mapdata_block_role_at_player_pos(int); -static bool8 sub_80681F0(struct MapPosition *position, u16 b, u8 c); -static u8 *TryGetScriptOnPressingA(struct MapPosition *position, u8 b, u8 c); -static u8 *sub_8068364(struct MapPosition *, u8, u8); -static u8 *TryGetInvisibleMapObjectScript(struct MapPosition *, u8, u8 c); -static u8 *sub_8068500(struct MapPosition *, u8, u8); -static u8 *TryGetFieldMoveScript(struct MapPosition *, u8, u8); -static bool32 sub_8068770(void); -static bool32 sub_80687A4(void); -static bool8 sub_80687E4(struct MapPosition *, u16, u16); -static void happiness_algorithm_step(void); -static bool8 overworld_poison_step(void); -static bool8 is_it_battle_time_3(u16); -static bool8 mapheader_run_first_tag2_script_list_match_conditionally(struct MapPosition *, u16, u8); -static bool8 sub_8068B30(u16); -static bool8 is_non_stair_warp_tile(u16, u8); -static s8 map_warp_check_packed(struct MapHeader *, struct MapPosition *); -static void sub_8068C30(struct MapHeader *, s8, struct MapPosition *); -static bool8 map_warp_consider_2_to_inside(struct MapPosition *, u16, u8); -static s8 map_warp_check(struct MapHeader *, u16, u16, u8); -static u8 *mapheader_trigger_activate_at(struct MapHeader *, u16, u16, u8); -static struct BgEvent *FindInvisibleMapObjectByPosition(struct MapHeader *, u16, u16, u8); - -void FieldClearPlayerInput(struct FieldInput *input) -{ - input->pressedAButton = 0; - input->input_field_0_1 = 0; - input->pressedStartButton = 0; - input->pressedSelectButton = 0; - input->input_field_0_4 = 0; - input->input_field_0_5 = 0; - input->input_field_0_6 = 0; - input->pressedBButton = 0; - input->input_field_1_0 = 0; - input->input_field_1_1 = 0; - input->input_field_1_2 = 0; - input->input_field_1_3 = 0; - input->dpadDirection = 0; -} - -void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) -{ - u8 r6 = gPlayerAvatar.running1; - u8 r9 = gPlayerAvatar.running2; - bool8 forcedMove = MetatileBehavior_IsMoveTile(cur_mapdata_block_role_at_player_pos(r9)); - - if ((r6 == 2 && forcedMove == FALSE) || r6 == 0) - { - if (GetPlayerSpeed() != 4) - { - if (newKeys & START_BUTTON) - input->pressedStartButton = TRUE; - if (newKeys & SELECT_BUTTON) - input->pressedSelectButton = TRUE; - if (newKeys & A_BUTTON) - input->pressedAButton = TRUE; - if (newKeys & B_BUTTON) - input->pressedBButton = TRUE; - } - if (heldKeys & (DPAD_UP | DPAD_DOWN | DPAD_LEFT | DPAD_RIGHT)) - { - input->input_field_0_4 = TRUE; - input->input_field_0_5 = TRUE; - } - } - if (forcedMove == FALSE) - { - if (r6 == 2 && r9 == 2) - input->input_field_0_6 = TRUE; - if (forcedMove == FALSE && r6 == 2) - input->input_field_0_1 = TRUE; - } - if (heldKeys & DPAD_UP) - input->dpadDirection = DIR_NORTH; - else if (heldKeys & DPAD_DOWN) - input->dpadDirection = DIR_SOUTH; - else if (heldKeys & DPAD_LEFT) - input->dpadDirection = DIR_WEST; - else if (heldKeys & DPAD_RIGHT) - input->dpadDirection = DIR_EAST; -} - -int sub_8068024(struct FieldInput *input) -{ - struct MapPosition position; - u8 r6; - u16 r4; - - r6 = player_get_direction_lower_nybble(); - player_get_pos_to_and_height(&position); - r4 = MapGridGetMetatileBehaviorAt(position.x, position.y); - if (CheckTrainers() == TRUE) - return TRUE; - if (mapheader_run_first_tag2_script_list_match() == 1) - return TRUE; - if (input->pressedBButton && sub_80687A4() == 1) - return TRUE; - if (input->input_field_0_6) - { - IncrementGameStat(5); - if (sub_80687E4(&position, r4, r6) == 1) - return TRUE; - } - if (input->input_field_0_1 && is_it_battle_time_3(r4) == 1) - return TRUE; - if (input->input_field_0_4 && input->dpadDirection == r6) - { - if (mapheader_run_first_tag2_script_list_match_conditionally(&position, r4, r6) == 1) - return TRUE; - } - player_get_next_pos_and_height(&position); - r4 = MapGridGetMetatileBehaviorAt(position.x, position.y); - if (input->pressedAButton && sub_80681F0(&position, r4, r6) == 1) - return TRUE; - if (input->input_field_0_5 && input->dpadDirection == r6) - { - if (map_warp_consider_2_to_inside(&position, r4, r6) == 1) - return TRUE; - } - if (input->pressedAButton && sub_8068770() == 1) - return TRUE; - if (input->pressedStartButton) - { - PlaySE(SE_WIN_OPEN); - sub_8071310(); - return TRUE; - } - if (input->pressedSelectButton && sub_80A6D1C() == TRUE) - return TRUE; - return FALSE; -} - -static void player_get_pos_to_and_height(struct MapPosition *position) -{ - PlayerGetDestCoords(&position->x, &position->y); - position->height = PlayerGetZCoord(); -} - -static void player_get_next_pos_and_height(struct MapPosition *position) -{ - s16 x, y; - - GetXYCoordsOneStepInFrontOfPlayer(&position->x, &position->y); - PlayerGetDestCoords(&x, &y); - if (MapGridGetZCoordAt(x, y) != 0) - position->height = PlayerGetZCoord(); - else - position->height = 0; -} - -static u16 cur_mapdata_block_role_at_player_pos(int unused) -{ - s16 x, y; - - PlayerGetDestCoords(&x, &y); - return MapGridGetMetatileBehaviorAt(x, y); -} - -static bool8 sub_80681F0(struct MapPosition *position, u16 b, u8 c) -{ - u8 *script = TryGetScriptOnPressingA(position, b, c); - - if (script == NULL) - return FALSE; - - if (script != gUnknown_0815281E - && script != gUnknown_08152C39 - && script != gUnknown_0815F36C - && script != gUnknown_0815F43A - && script != gUnknown_081A0009) - PlaySE(5); - - ScriptContext1_SetupScript(script); - return TRUE; -} - -static u8 *TryGetScriptOnPressingA(struct MapPosition *position, u8 b, u8 c) -{ - u8 *script; - - script = sub_8068364(position, b, c); - if (script != NULL) - return script; - script = TryGetInvisibleMapObjectScript(position, b, c); - if (script != NULL) - return script; - script = sub_8068500(position, b, c); - if (script != NULL) - return script; - script = TryGetFieldMoveScript(position, b, c); - if (script != NULL) - return script; - - return NULL; -} - -u8 *sub_80682A8(struct MapPosition *position, u8 unused, u8 c) -{ - u8 r3; - s32 i; - - if (!MetatileBehavior_IsCounter(MapGridGetMetatileBehaviorAt(position->x, position->y))) - r3 = GetFieldObjectIdByXYZ(position->x, position->y, position->height); - else - r3 = GetFieldObjectIdByXYZ(position->x + gUnknown_0821664C[c].x, position->y + gUnknown_0821664C[c].y, position->height); - if (r3 == 16 || gMapObjects[r3].localId == 0xFF) - return NULL; - for (i = 0; i < 4; i++) - { - if (gLinkPlayerMapObjects[i].active == TRUE && gLinkPlayerMapObjects[i].mapObjId == r3) - return NULL; - } - gSelectedMapObject = r3; - gScriptLastTalked = gMapObjects[r3].localId; - gScriptFacing = c; - return GetFieldObjectScriptPointerByFieldObjectId(r3); -} - -static u8 *sub_8068364(struct MapPosition *position, u8 b, u8 c) -{ - u8 r3; - u8 *script; - - r3 = GetFieldObjectIdByXYZ(position->x, position->y, position->height); - if (r3 == 16 || gMapObjects[r3].localId == 0xFF) - { - if (MetatileBehavior_IsCounter(b) != TRUE) - return NULL; - r3 = GetFieldObjectIdByXYZ(position->x + gUnknown_0821664C[c].x, position->y + gUnknown_0821664C[c].y, position->height); - if (r3 == 16 || gMapObjects[r3].localId == 0xFF) - return NULL; - } - //_080683E8 - gSelectedMapObject = r3; - gScriptLastTalked = gMapObjects[r3].localId; - gScriptFacing = c; - script = GetFieldObjectScriptPointerByFieldObjectId(r3); - script = GetRamScript(gScriptLastTalked, script); - return script; -} - -static u8 *TryGetInvisibleMapObjectScript(struct MapPosition *position, u8 unused, u8 c) -{ - struct BgEvent *bgEvent = FindInvisibleMapObjectByPosition(&gMapHeader, position->x - 7, position->y - 7, position->height); - - if (bgEvent == NULL) - return NULL; - if (bgEvent->bgUnion.script == NULL) - return gUnknown_081C6C02; - switch (bgEvent->kind) - { - case 0: - default: - return bgEvent->bgUnion.script; - case 1: - if (c != 2) - return NULL; - break; - case 2: - if (c != 1) - return NULL; - break; - case 3: - if (c != 4) - return NULL; - break; - case 4: - if (c != 3) - return NULL; - break; - case 5: - case 6: - case 7: - gSpecialVar_0x8004 = ((u32)bgEvent->bgUnion.script >> 16) + 0x258; - gSpecialVar_0x8005 = (u32)bgEvent->bgUnion.script; - if (FlagGet(gSpecialVar_0x8004) == TRUE) - return NULL; - return HiddenItemScript; - case 8: - if (c == 2) - { - gSpecialVar_0x8004 = (u32)bgEvent->bgUnion.script; - if (sub_80BC050()) - return gUnknown_081A2C51; - } - return NULL; - } - return bgEvent->bgUnion.script; -} - -static u8 *sub_8068500(struct MapPosition *position, u8 b, u8 c) -{ - s8 height; - - if (MetatileBehavior_IsPlayerFacingTVScreen(b, c) == TRUE) - return Event_TV; - if (MetatileBehavior_IsPC(b) == TRUE) - return gUnknown_081A0009; - if (MetatileBehavior_IsClosedSootopolisGymDoor(b) == TRUE) - return ClosedSootopolisGymDoorScript; - if (is_tile_x84(b) == TRUE) - return gUnknown_081A4363; - if (MetatileBehavior_IsPokeblockFeeder(b) == TRUE) - return gUnknown_081C346A; - if (MetatileBehavior_IsTrickHousePuzzleDoor(b) == TRUE) - return gUnknown_081616E1; - if (MetatileBehavior_IsRegionMap(b) == TRUE) - return Event_WorldMap; - if (sub_805791C(b) == TRUE) - return Event_RunningShoesManual; - if (MetatileBehavior_IsPictureBookShelf(b) == TRUE) - return PictureBookShelfScript; - if (MetatileBehavior_IsBookShelf(b) == TRUE) - return BookshelfScript; - if (MetatileBehavior_IsPokeCenterBookShelf(b) == TRUE) - return PokemonCenterBookshelfScript; - if (MetatileBehavior_IsVase(b) == TRUE) - return VaseScript; - if (MetatileBehavior_IsTrashCan(b) == TRUE) - return TrashCanScript; - if (MetatileBehavior_IsShopShelf(b) == TRUE) - return ShopShelfScript; - if (MetatileBehavior_IsBlueprint(b) == TRUE) - return BlueprintScript; - height = position->height; - if (height == MapGridGetZCoordAt(position->x, position->y)) - { - if (MetatileBehavior_IsSecretBasePC(b) == TRUE) - return gUnknown_0815F36C; - if (sub_805724C(b) == TRUE) - return gUnknown_0815F43A; - if (sub_8057364(b) == TRUE) - return gUnknown_0815F523; - if (sub_8057378(b) == TRUE) - return gUnknown_0815F528; - } - return NULL; -} - -static u8 *TryGetFieldMoveScript(struct MapPosition *unused1, u8 b, u8 unused2) -{ - if (FlagGet(BADGE05_GET) == TRUE && PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE) - return UseSurfScript; - if (MetatileBehavior_IsWaterfall(b) == TRUE) - { - if (FlagGet(BADGE08_GET) == TRUE && IsPlayerSurfingNorth() == TRUE) - return UseWaterfallScript; - else - return CannotUseWaterfallScript; - } - return NULL; -} - -static bool32 sub_8068770(void) -{ - if (FlagGet(BADGE07_GET) && sub_8068F18() == 2) - { - ScriptContext1_SetupScript(UseDiveScript); - return TRUE; - } - return FALSE; -} - -static bool32 sub_80687A4(void) -{ - if (FlagGet(BADGE07_GET) && gMapHeader.mapType == 5 && sub_8068F18() == 1) - { - ScriptContext1_SetupScript(UnderwaterUseDiveScript); - return TRUE; - } - return FALSE; -} - -static bool8 sub_80687E4(struct MapPosition *position, u16 b, u16 unused) -{ - if (mapheader_trigger_activate_at__run_now(position) == TRUE) - return TRUE; - if (sub_8068A64(position, b) == TRUE) - return TRUE; - if (sub_8068870(b) == TRUE) - return TRUE; - if (sub_8068894() == TRUE) - return TRUE; - if (UpdateRepelCounter() == TRUE) - return TRUE; - return FALSE; -} - -bool8 mapheader_trigger_activate_at__run_now(struct MapPosition *position) -{ - u8 *script = mapheader_trigger_activate_at(&gMapHeader, position->x - 7, position->y - 7, position->height); - - if (script == NULL) - return FALSE; - ScriptContext1_SetupScript(script); - return TRUE; -} - -//can be u8, u16, or u32 -bool8 sub_8068870(u16 a) -{ - if (MetatileBehavior_IsCrackedFloorHole(a)) - { - ScriptContext1_SetupScript(GraniteCave_B1F_EventScript_1C6BC5); - return TRUE; - } - return FALSE; -} - -bool8 sub_8068894(void) -{ - sub_8082B78(); - happiness_algorithm_step(); - if (overworld_poison_step() == TRUE) - { - ScriptContext1_SetupScript(gUnknown_081A14B8); - return TRUE; - } - if (sub_80422A0()) - { - IncrementGameStat(13); - ScriptContext1_SetupScript(Event_EggHatch); - return TRUE; - } - if (SafariZoneTakeStep() == TRUE) - return TRUE; - if (CountSSTidalStep(1) == TRUE) - { - ScriptContext1_SetupScript(gUnknown_0815FD0D); - return TRUE; - } - return FALSE; -} - -void unref_sub_80688F8(void) -{ - VarSet(VAR_HAPPINESS_STEP_COUNTER, 0); -} - -static void happiness_algorithm_step(void) -{ - u16 *ptr = GetVarPointer(VAR_HAPPINESS_STEP_COUNTER); - int i; - - (*ptr)++; - (*ptr) %= 128; - if (*ptr == 0) - { - struct Pokemon *pkmn = gPlayerParty; - - for (i = 5; i >= 0; i--) - { - AdjustFriendship(pkmn, 5); - pkmn++; - } - } -} - -void overworld_poison_timer_set(void) -{ - VarSet(VAR_POISON_STEP_COUNTER, 0); -} - -static bool8 overworld_poison_step(void) -{ - u16 *ptr; - - if (gMapHeader.mapType != 9) - { - ptr = GetVarPointer(VAR_POISON_STEP_COUNTER); - (*ptr)++; - (*ptr) %= 4; - if (*ptr == 0) - { - switch (overworld_poison()) - { - case 0: - return FALSE; - case 1: - return FALSE; - case 2: - return TRUE; - } - } - } - return FALSE; -} - -void prev_quest_postbuffer_cursor_backup_reset(void) -{ - gUnknown_0202E8C0 = 0; -} - -static bool8 is_it_battle_time_3(u16 a) -{ - if (gUnknown_0202E8C0 < 4) - { - gUnknown_0202E8C0++; - gUnknown_0202E8C2 = a; - return FALSE; - } - if (StandardWildEncounter(a, gUnknown_0202E8C2) == TRUE) - { - gUnknown_0202E8C0 = 0; - gUnknown_0202E8C2 = a; - return TRUE; - } - else - { - gUnknown_0202E8C2 = a; - return FALSE; - } -} - -static bool8 mapheader_run_first_tag2_script_list_match_conditionally(struct MapPosition *position, u16 b, u8 c) -{ - s8 r6 = map_warp_check_packed(&gMapHeader, position); - - if (is_non_stair_warp_tile(b, c) == TRUE && r6 != -1) - { - walkrun_find_lowest_active_bit_in_bitfield(); - sub_8068C30(&gMapHeader, r6, position); - sub_8080E88(); - return TRUE; - } - return FALSE; -} - -bool8 sub_8068A64(struct MapPosition *position, u16 b) -{ - s8 r4 = map_warp_check_packed(&gMapHeader, position); - - if (r4 != -1 && sub_8068B30(b) == TRUE) - { - walkrun_find_lowest_active_bit_in_bitfield(); - sub_8068C30(&gMapHeader, r4, position); - if (MetatileBehavior_IsEscalator(b) == TRUE) - { - sub_8080F2C(b); - return TRUE; - } - if (MetatileBehavior_IsLavaridgeB1FWarp(b) == TRUE) - { - sub_8080F48(); - return TRUE; - } - if (MetatileBehavior_IsLavaridge1FWarp(b) == TRUE) - { - sub_8080F58(); - return TRUE; - } - if (MetatileBehavior_IsAquaHideoutWarp(b) == TRUE) - { - sub_8080F68(); - return TRUE; - } - if (MetatileBehavior_IsMtPyreHole(b) == TRUE) - { - ScriptContext1_SetupScript(gUnknown_081C6BDE); - return TRUE; - } - sub_8080E88(); - return TRUE; - } - return FALSE; -} - -static bool8 sub_8068B30(u16 a) -{ - if (MetatileBehavior_IsWarpDoor(a) != TRUE - && MetatileBehavior_IsLadder(a) != TRUE - && MetatileBehavior_IsEscalator(a) != TRUE - && MetatileBehavior_IsNonAnimDoor(a) != TRUE - && MetatileBehavior_IsLavaridgeB1FWarp(a) != TRUE - && MetatileBehavior_IsLavaridge1FWarp(a) != TRUE - && MetatileBehavior_IsAquaHideoutWarp(a) != TRUE - && MetatileBehavior_IsMtPyreHole(a) != TRUE) - return FALSE; - return TRUE; -} - -static bool8 is_non_stair_warp_tile(u16 a, u8 b) -{ - switch (b) - { - case 2: - return MetatileBehavior_IsNorthArrowWarp(a); - case 1: - return MetatileBehavior_IsSouthArrowWarp(a); - case 3: - return MetatileBehavior_IsWestArrowWarp(a); - case 4: - return MetatileBehavior_IsEastArrowWarp(a); - } - return FALSE; -} - -static s8 map_warp_check_packed(struct MapHeader *mapHeader, struct MapPosition *position) -{ - return map_warp_check(mapHeader, position->x - 7, position->y - 7, position->height); -} - -static void sub_8068C30(struct MapHeader *unused, s8 b, struct MapPosition *position) -{ - struct WarpEvent *warpEvent = &gMapHeader.events->warps[b]; - - if (warpEvent->mapNum == 0x7F) - { - copy_saved_warp2_bank_and_enter_x_to_warp1(warpEvent->mapGroup); - } - else - { - struct MapHeader *mapHeader; - - 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); - if (mapHeader->events->warps[warpEvent->mapGroup].mapNum == 0x7F) - saved_warp2_set(mapHeader->events->warps[b].mapGroup, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, b); - } -} - -static bool8 map_warp_consider_2_to_inside(struct MapPosition *position, u16 b, u8 c) -{ - s8 r4; - - if (c == 2) - { - if (sub_80571C0(b) == TRUE) - { - sub_80BC038(position, gMapHeader.events); - return TRUE; - } - if (MetatileBehavior_IsWarpDoor(b) == TRUE) - { - r4 = map_warp_check_packed(&gMapHeader, position); - if (r4 != -1 && sub_8068B30(b) == TRUE) - { - walkrun_find_lowest_active_bit_in_bitfield(); - sub_8068C30(&gMapHeader, r4, position); - sub_8080EF0(); - return TRUE; - } - } - } - return FALSE; -} - -static s8 map_warp_check(struct MapHeader *mapHeader, u16 b, u16 c, u8 d) -{ - s32 i; - struct WarpEvent *warpEvent = mapHeader->events->warps; - u8 warpCount = mapHeader->events->warpCount; - - for (i = 0; i < warpCount; i++, warpEvent++) - { - if ((u16)warpEvent->x == b && (u16)warpEvent->y == c) - { - if ((u8)warpEvent->warpId == d || (u8)warpEvent->warpId == 0) - return i; - } - } - return -1; -} - -static u8 *trigger_activate(struct CoordEvent *coordEvent) -{ - if (coordEvent != NULL) - { - if (coordEvent->script == NULL) - { - DoCoordEventWeather(coordEvent->trigger); - return NULL; - } - if (coordEvent->trigger == 0) - { - ScriptContext2_RunNewScript(coordEvent->script); - return NULL; - } - if (VarGet(coordEvent->trigger) == (u8)coordEvent->index) - return coordEvent->script; - } - return NULL; -} - -static u8 *mapheader_trigger_activate_at(struct MapHeader *mapHeader, u16 b, u16 c, u8 d) -{ - s32 i; - struct CoordEvent *coordEvents = mapHeader->events->coordEvents; - u8 coordEventCount = mapHeader->events->coordEventCount; - u8 *script; - - for (i = 0; i < coordEventCount; i++) - { - if ((u16)coordEvents[i].x == b && (u16)coordEvents[i].y == c) - { - if (coordEvents[i].unk4 == d || coordEvents[i].unk4 == 0) - { - script = trigger_activate(&coordEvents[i]); - if (script != NULL) - return script; - } - } - } - return NULL; -} - -u8 *sub_8068E24(struct MapPosition *position) -{ - return mapheader_trigger_activate_at(&gMapHeader, position->x - 7, position->y - 7, position->height); -} - -static struct BgEvent *FindInvisibleMapObjectByPosition(struct MapHeader *mapHeader, u16 b, u16 c, u8 d) -{ - u8 i; - struct BgEvent *bgEvents = mapHeader->events->bgEvents; - u8 bgEventCount = mapHeader->events->bgEventCount; - - for (i = 0; i < bgEventCount; i++) - { - if ((u16)bgEvents[i].x == b && (u16)bgEvents[i].y == c) - { - if (bgEvents[i].unk4 == d || bgEvents[i].unk4 == 0) - return &bgEvents[i]; - } - } - return NULL; -} - -int dive_warp(struct MapPosition *position, u16 b) -{ - if (gMapHeader.mapType == 5 && sub_805750C(b) == 0) - { - if (sub_80538B0(position->x - 7, position->y - 7)) - { - walkrun_find_lowest_active_bit_in_bitfield(); - sp13E_warp_to_last_warp(); - PlaySE(SE_W291); - return TRUE; - } - } - else if (sub_80574EC(b) == TRUE) - { - if (sub_80538D0(position->x - 7, position->y - 7)) - { - walkrun_find_lowest_active_bit_in_bitfield(); - sp13E_warp_to_last_warp(); - PlaySE(SE_W291); - return TRUE; - } - } - return FALSE; -} - -u8 sub_8068F18(void) -{ - s16 x, y; - u8 r5; - - PlayerGetDestCoords(&x, &y); - r5 = MapGridGetMetatileBehaviorAt(x, y); - if (gMapHeader.mapType == 5 && sub_805750C(r5) == 0) - { - if (sub_80538B0(x - 7, y - 7) == TRUE) - return 1; - } - else if (sub_80574EC(r5) == TRUE) - { - if (sub_80538D0(x - 7, y - 7) == TRUE) - return 2; - } - return 0; -} - -u8 *GetFieldObjectScriptPointerForComparison(void) -{ - u8 r4; - struct MapPosition position; - - r4 = player_get_direction_upper_nybble(); - player_get_next_pos_and_height(&position); - return sub_8068364(&position, MapGridGetMetatileBehaviorAt(position.x, position.y), r4); -} - -int SetCableClubWarp(void) -{ - struct MapPosition position; - - player_get_direction_upper_nybble(); //unnecessary - player_get_pos_to_and_height(&position); - MapGridGetMetatileBehaviorAt(position.x, position.y); //unnecessary - sub_8068C30(&gMapHeader, map_warp_check_packed(&gMapHeader, &position), &position); - return 0; -} diff --git a/src/field_door.c b/src/field_door.c deleted file mode 100644 index 791ed4c94..000000000 --- a/src/field_door.c +++ /dev/null @@ -1,221 +0,0 @@ -#include "global.h" -#include "field_door.h" -#include "field_camera.h" -#include "fieldmap.h" -#include "metatile_behavior.h" -#include "task.h" - -extern struct DoorAnimFrame gDoorOpenAnimFrames[]; -extern struct DoorAnimFrame gDoorCloseAnimFrames[]; -extern struct DoorGraphics gDoorAnimGraphicsTable[]; - -static void CopyDoorTilesToVram(void *src) -{ - CpuFastSet(src, (void *)(VRAM + 0x7F00), 0x40); -} - -static void door_build_blockdef(u16 *a, u16 b, u8 *c) -{ - int i; - u16 unk; - - for (i = 0; i < 4; i++) - { - unk = *(c++) << 12; - a[i] = unk | (b + i); - } - for (; i < 8; i++) - { - unk = *(c++) << 12; - a[i] = unk; - } -} - -static void DrawCurrentDoorAnimFrame(u32 x, u32 y, u8 *c) -{ - u16 arr[8]; - - door_build_blockdef(arr, 0x3F8, c); - DrawDoorMetatileAt(x, y - 1, arr); - door_build_blockdef(arr, 0x3FC, c + 4); - DrawDoorMetatileAt(x, y, arr); -} - -static void DrawClosedDoorTiles(u32 x, u32 y) -{ - CurrentMapDrawMetatileAt(x, y - 1); - CurrentMapDrawMetatileAt(x, y); -} - -static void DrawDoor(struct DoorGraphics *gfx, struct DoorAnimFrame *frame, u32 x, u32 y) -{ - if (frame->offset == 0xFFFF) - DrawClosedDoorTiles(x, y); - else - { - CopyDoorTilesToVram(gfx->tiles + frame->offset); - DrawCurrentDoorAnimFrame(x, y, gfx->palette); - } -} - -enum -{ - TD_FRAMELIST = 0, - TD_GFX = 2, - TD_FRAME = 4, - TD_COUNTER, - TD_X, - TD_Y -}; - -static bool32 sub_8058464(struct DoorGraphics *gfx, struct DoorAnimFrame *frames, s16 *taskData) -{ - if (taskData[TD_COUNTER] == 0) - DrawDoor(gfx, &frames[taskData[TD_FRAME]], taskData[TD_X], taskData[TD_Y]); - if (taskData[TD_COUNTER] == frames[taskData[TD_FRAME]].time) - { - taskData[TD_COUNTER] = 0; - taskData[TD_FRAME]++; - if (frames[taskData[TD_FRAME]].time == 0) - return FALSE; - else - return TRUE; - } - taskData[TD_COUNTER]++; - return TRUE; -} - -static void Task_AnimateDoor(u8 taskId) -{ - u16 *taskData = gTasks[taskId].data; - struct DoorAnimFrame *frames = (struct DoorAnimFrame *)(taskData[TD_FRAMELIST] << 16 | taskData[TD_FRAMELIST + 1]); - struct DoorGraphics *gfx = (struct DoorGraphics *)(taskData[TD_GFX] << 16 | taskData[TD_GFX + 1]); - - if (sub_8058464(gfx, frames, taskData) == FALSE) - DestroyTask(taskId); -} - -static struct DoorAnimFrame *GetLastDoorFrame(struct DoorAnimFrame *frame, void *unused) -{ - while (frame->time != 0) - frame++; - return frame - 1; -} - -static struct DoorGraphics *GetDoorGraphics(struct DoorGraphics *gfx, u16 metatileNum) -{ - while (gfx->tiles != NULL) - { - if (gfx->metatileNum == metatileNum) - return gfx; - gfx++; - } - return NULL; -} - -static s8 StartDoorAnimationTask(struct DoorGraphics *gfx, struct DoorAnimFrame *frames, u32 x, u32 y) -{ - if (FuncIsActiveTask(Task_AnimateDoor) == TRUE) - return -1; - else - { - u8 taskId = CreateTask(Task_AnimateDoor, 0x50); - s16 *taskData = gTasks[taskId].data; - - taskData[TD_X] = x; - taskData[TD_Y] = y; - - taskData[TD_FRAMELIST + 1] = (u32)frames; - taskData[TD_FRAMELIST] = (u32)frames >> 16; - - taskData[TD_GFX + 1] = (u32)gfx; - taskData[TD_GFX] = (u32)gfx >> 16; - - return taskId; - } -} - -static void DrawClosedDoor(struct DoorGraphics *unused, u32 x, u32 y) -{ - DrawClosedDoorTiles(x, y); -} - -static void DrawOpenedDoor(struct DoorGraphics *gfx, u32 x, u32 y) -{ - gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y)); - if (gfx != NULL) - DrawDoor(gfx, GetLastDoorFrame(gDoorOpenAnimFrames, gDoorOpenAnimFrames), x, y); -} - -static s8 StartDoorOpenAnimation(struct DoorGraphics *gfx, u32 x, u32 y) -{ - gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y)); - if (gfx == NULL) - return -1; - else - return StartDoorAnimationTask(gfx, gDoorOpenAnimFrames, x, y); -} - -static s8 StartDoorCloseAnimation(struct DoorGraphics *gfx, u32 x, u32 y) -{ - gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y)); - if (gfx == NULL) - return -1; - else - return StartDoorAnimationTask(gfx, gDoorCloseAnimFrames, x, y); -} - -static s8 cur_mapdata_get_door_x2_at(struct DoorGraphics *gfx, u32 x, u32 y) -{ - gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y)); - if (gfx == NULL) - return -1; - else - return gfx->unk2; -} - -void unref_sub_805869C(u32 x, u32 y) -{ - StartDoorOpenAnimation(gDoorAnimGraphicsTable, x, y); -} - -void FieldSetDoorOpened(u32 x, u32 y) -{ - if (MetatileBehavior_IsDoor(MapGridGetMetatileBehaviorAt(x, y))) - DrawOpenedDoor(gDoorAnimGraphicsTable, x, y); -} - -void FieldSetDoorClosed(u32 x, u32 y) -{ - if (MetatileBehavior_IsDoor(MapGridGetMetatileBehaviorAt(x, y))) - DrawClosedDoor(gDoorAnimGraphicsTable, x, y); -} - -s8 FieldAnimateDoorClose(u32 x, u32 y) -{ - if (!MetatileBehavior_IsDoor(MapGridGetMetatileBehaviorAt(x, y))) - return -1; - else - return StartDoorCloseAnimation(gDoorAnimGraphicsTable, x, y); -} - -s8 FieldAnimateDoorOpen(u32 x, u32 y) -{ - if (!MetatileBehavior_IsDoor(MapGridGetMetatileBehaviorAt(x, y))) - return -1; - else - return StartDoorOpenAnimation(gDoorAnimGraphicsTable, x, y); -} - -bool8 FieldIsDoorAnimationRunning(void) -{ - return FuncIsActiveTask(Task_AnimateDoor); -} - -u32 sub_8058790(u32 x, u32 y) -{ - if (cur_mapdata_get_door_x2_at(gDoorAnimGraphicsTable, x, y) == 0) - return 8; - else - return 18; -} diff --git a/src/field_effect.c b/src/field_effect.c deleted file mode 100644 index 3632d7053..000000000 --- a/src/field_effect.c +++ /dev/null @@ -1,3406 +0,0 @@ -#include "global.h" -#include "data2.h" -#include "script.h" -#include "trig.h" -#include "main.h" -#include "field_weather.h" -#include "decompress.h" -#include "sprite.h" -#include "menu.h" -#include "palette.h" -#include "text.h" -#include "rom4.h" -#include "task.h" -#include "sound.h" -#include "songs.h" -#include "decoration.h" -#include "field_player_avatar.h" -#include "field_map_obj_helpers.h" -#include "field_map_obj.h" -#include "metatile_behavior.h" -#include "field_camera.h" -#include "field_effect.h" -#include "field_fadetransition.h" -#include "fieldmap.h" -#include "field_map_obj.h" -#include "util.h" -#include "field_effect_helpers.h" - -#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))} - -EWRAM_DATA u32 gUnknown_0202FF84[8] = {0}; - -const u32 gSpriteImage_839DC14[] = INCBIN_U32("graphics/birch_speech/birch.4bpp"); -const u16 gBirchPalette[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal"); -const u32 gSpriteImage_839E434[] = INCBIN_U32("graphics/misc/pokeball_glow.4bpp"); -const u16 gFieldEffectObjectPalette4[16] = INCBIN_U16("graphics/field_effect_objects/palettes/04.gbapal"); -const u32 gSpriteImage_839E474[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp"); -const u32 gSpriteImage_839E534[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp"); -const u32 gSpriteImage_839E5F4[] = INCBIN_U32("graphics/misc/big_hof_monitor.4bpp"); -const u32 gSpriteImage_839E7F4[] = INCBIN_U32("graphics/misc/small_hof_monitor.4bpp"); -const u16 gFieldEffectObjectPalette5[16] = INCBIN_U16("graphics/field_effect_objects/palettes/05.gbapal"); - -// Graphics for the lights streaking past your Pokemon when it uses a field move. -const u32 gFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/field_move_streaks.4bpp"); -const u16 gFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/field_move_streaks.gbapal"); -const u16 gFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/field_move_streaks_map.bin"); - -// The following light streaks effect is used when the map is dark (e.g. a cave). -const u32 gDarknessFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/darkness_field_move_streaks.4bpp"); -const u16 gDarknessFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/darkness_field_move_streaks.gbapal"); -const u16 gDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/darkness_field_move_streaks_map.bin"); - -bool8 (*const gFieldEffectScriptFuncs[])(u8 **, u32 *) = { - FieldEffectCmd_loadtiles, - FieldEffectCmd_loadfadedpal, - FieldEffectCmd_loadpal, - FieldEffectCmd_callnative, - FieldEffectCmd_end, - FieldEffectCmd_loadgfx_callnative, - FieldEffectCmd_loadtiles_callnative, - FieldEffectCmd_loadfadedpal_callnative, -}; - -const struct OamData gOamData_839F0F4 = {.size = 3}; -const struct OamData gOamData_839F0FC = {.size = 0}; -const struct OamData gOamData_839F104 = {.size = 1}; - -const struct SpriteFrameImage gSpriteImageTable_839F10C[] = { - obj_frame_tiles(gSpriteImage_839DC14) -}; -const struct SpritePalette gUnknown_0839F114 = {.data = gBirchPalette, .tag = 0x1006}; - -const union AnimCmd gSpriteAnim_839F11C[] = { - ANIMCMD_FRAME(.imageValue = 0, .duration = 1), - ANIMCMD_END -}; - -const union AnimCmd *const gSpriteAnimTable_839F124[] = { - gSpriteAnim_839F11C -}; - -const struct SpriteTemplate gSpriteTemplate_839F128 = { - .tileTag = 0xffff, - .paletteTag = 4102, - .oam = &gOamData_839F0F4, - .anims = (const union AnimCmd *const *)&gSpriteAnimTable_839F124, - .images = gSpriteImageTable_839F10C, - .affineAnims = (const union AffineAnimCmd *const *)&gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - -const struct SpritePalette gFieldEffectObjectPaletteInfo4 = {.data = gFieldEffectObjectPalette4, .tag = 0x1007}; -const struct SpritePalette gFieldEffectObjectPaletteInfo5 = {.data = gFieldEffectObjectPalette5, .tag = 0x1010}; -const struct OamData gOamData_839F150 = { - .shape = 1, - .size = 2 -}; - -const struct SpriteFrameImage gSpriteImageTable_839F158[] = { - obj_frame_tiles(gSpriteImage_839E434) -}; - -const struct SpriteFrameImage gSpriteImageTable_839F160[] = { - obj_frame_tiles(gSpriteImage_839E474), - obj_frame_tiles(gSpriteImage_839E534) -}; - -const struct SpriteFrameImage gSpriteImageTable_839F170[] = { - obj_frame_tiles(gSpriteImage_839E5F4) -}; - -const struct SpriteFrameImage gSpriteImageTable_839F178[] = { - {.data = (u8 *)gSpriteImage_839E7F4, .size = 0x200} // the macro breaks down here -}; - -const struct Subsprite Unknown_39F180[] = { - {.x = -12, .y = -8, .priority = 2, .tileOffset = 0, .shape = 1, .size = 0}, - {.x = 4, .y = -8, .priority = 2, .tileOffset = 2, .shape = 0, .size = 0}, - {.x = -12, .y = 0, .priority = 2, .tileOffset = 3, .shape = 1, .size = 0}, - {.x = 4, .y = 0, .priority = 2, .tileOffset = 5, .shape = 0, .size = 0} -}; - -const struct SubspriteTable gUnknown_0839F1A0 = subsprite_table(Unknown_39F180); - -const struct Subsprite Unknown_39F1A8[] = { - {.x = -32, .y = -8, .priority = 2, .tileOffset = 0, .shape = 1, .size = 1}, - {.x = 0, .y = -8, .priority = 2, .tileOffset = 4, .shape = 1, .size = 1}, - {.x = -32, .y = 0, .priority = 2, .tileOffset = 8, .shape = 1, .size = 1}, - {.x = 0, .y = 0, .priority = 2, .tileOffset = 12, .shape = 1, .size = 1} -}; - -const struct SubspriteTable gUnknown_0839F1C8 = subsprite_table(Unknown_39F1A8); - -const union AnimCmd gSpriteAnim_839F1D0[] = { - ANIMCMD_FRAME(.imageValue = 0, .duration = 1), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd gSpriteAnim_839F1D8[] = { - ANIMCMD_FRAME(.imageValue = 0, .duration = 16), - ANIMCMD_FRAME(.imageValue = 1, .duration = 16), - ANIMCMD_FRAME(.imageValue = 0, .duration = 16), - ANIMCMD_FRAME(.imageValue = 1, .duration = 16), - ANIMCMD_FRAME(.imageValue = 0, .duration = 16), - ANIMCMD_FRAME(.imageValue = 1, .duration = 16), - ANIMCMD_FRAME(.imageValue = 0, .duration = 16), - ANIMCMD_FRAME(.imageValue = 1, .duration = 16), - ANIMCMD_END -}; - -const union AnimCmd *const gSpriteAnimTable_839F1FC[] = { - gSpriteAnim_839F1D0, - gSpriteAnim_839F1D8 -}; - -const union AnimCmd *const gSpriteAnimTable_839F204[] = { - gSpriteAnim_839F1D0 -}; - -const struct SpriteTemplate gSpriteTemplate_839F208 = { - .tileTag = 0xffff, - .paletteTag = 4103, - .oam = &gOamData_839F0FC, - .anims = gSpriteAnimTable_839F1FC, - .images = gSpriteImageTable_839F158, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_PokeballGlow -}; - - -const struct SpriteTemplate gSpriteTemplate_839F220 = { - .tileTag = 0xffff, - .paletteTag = 4100, - .oam = &gOamData_839F104, - .anims = gSpriteAnimTable_839F1FC, - .images = gSpriteImageTable_839F160, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_PokecenterMonitor -}; - - -const struct SpriteTemplate gSpriteTemplate_839F238 = { - .tileTag = 0xffff, - .paletteTag = 4112, - .oam = &gOamData_839F104, - .anims = gSpriteAnimTable_839F204, - .images = gSpriteImageTable_839F170, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_HallOfFameMonitor -}; - - -const struct SpriteTemplate gSpriteTemplate_839F250 = { - .tileTag = 0xffff, - .paletteTag = 4112, - .oam = &gOamData_839F150, - .anims = gSpriteAnimTable_839F204, - .images = gSpriteImageTable_839F178, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_HallOfFameMonitor -}; - -void (*const gUnknown_0839F268[])(struct Task *) = { - PokecenterHealEffect_0, - PokecenterHealEffect_1, - PokecenterHealEffect_2, - PokecenterHealEffect_3 -}; - -void (*const gUnknown_0839F278[])(struct Task *) = { - HallOfFameRecordEffect_0, - HallOfFameRecordEffect_1, - HallOfFameRecordEffect_2, - HallOfFameRecordEffect_3 -}; - -void (*const gUnknown_0839F288[])(struct Sprite *) = { - PokeballGlowEffect_0, - PokeballGlowEffect_1, - PokeballGlowEffect_2, - PokeballGlowEffect_3, - PokeballGlowEffect_4, - PokeballGlowEffect_5, - PokeballGlowEffect_6, - PokeballGlowEffect_7 -}; - -const struct Coords16 gUnknown_0839F2A8[] = { - {.x = 0, .y = 0}, - {.x = 6, .y = 0}, - {.x = 0, .y = 4}, - {.x = 6, .y = 4}, - {.x = 0, .y = 8}, - {.x = 6, .y = 8} -}; - -const u8 gUnknown_0839F2C0[] = {16, 12, 8, 0}; -const u8 gUnknown_0839F2C4[] = {16, 12, 8, 0}; -const u8 gUnknown_0839F2C8[] = { 0, 0, 0, 0}; - -bool8 (*const gUnknown_0839F2CC[])(struct Task *) = { - sub_80867AC, - sub_8086854, - sub_8086870, - sub_80868E4, - sub_808699C, - sub_80869B8, - sub_80869F8 -}; - -bool8 (*const gUnknown_0839F2E8[])(struct Task *) = { - sub_8086AA0, - sub_8086AC0, - sub_8086B30, - sub_8086B54, - sub_8086B64, - sub_8086B88 -}; - -bool8 (*const gUnknown_0839F300[])(struct Task *) = { - sub_8086CF4, - sub_8086D70, - sub_8086DB0, - sub_8086E10, - sub_8086E50, - sub_8086EB0, - sub_8086ED4 -}; - -bool8 (*const gUnknown_0839F31C[])(struct Task *, struct MapObject *) = { - sub_8086FB0, - waterfall_1_do_anim_probably, - waterfall_2_wait_anim_finish_probably, - sub_8087030, - sub_8087058 -}; - -bool8 (*const gUnknown_0839F330[])(struct Task *) = { - sub_8087124, - dive_2_unknown, - dive_3_unknown -}; - -bool8 (*const gUnknown_0839F33C[])(struct Task *, struct MapObject *, struct Sprite *) = { - sub_808722C, - sub_8087264, - sub_8087298, - sub_80872E4, - sub_80873D8, - sub_80873F4 -}; - -bool8 (*const gUnknown_0839F354[])(struct Task *, struct MapObject *, struct Sprite *) = { - sub_80874CC, - sub_80874FC, - sub_8087548, - sub_808759C -}; - -bool8 (*const gUnknown_0839F364[])(struct Task *, struct MapObject *, struct Sprite *) = { - sub_80876C8, - sub_80876F8, - sub_8087774, - sub_80877AC, - sub_80877D4 -}; - -void (*const gUnknown_0839F378[])(struct Task *) = { - sub_80878F4, - sub_8087914 -}; - -const u8 gUnknown_0839F380[] = {1, 3, 4, 2, 1}; - -void (*const gUnknown_0839F388[])(struct Task *) = { - sub_8087AA4, - sub_8087AC8 -}; - -void (*const gUnknown_0839F390[])(struct Task *) = { - sub_8087BEC, - sub_8087C14, - sub_8087CA4, - sub_8087D78 -}; - -void (*const gUnknown_0839F3A0[])(struct Task *) = { - sub_8087E4C, - sub_8087ED8, - sub_8087FDC -}; - -void (*const gUnknown_0839F3AC[])(struct Task *) = { - sub_8088150, - sub_80881C0, - sub_8088228, - sub_80882B4, - sub_80882E4, - sub_8088338, - sub_8088380 -}; - -void (*const gUnknown_0839F3C8[])(struct Task *) = { - sub_80884AC, - sub_80884E8, - sub_8088554, - sub_80885A8, - sub_80885D8, - sub_808860C, - sub_808862C -}; - -void (*const gUnknown_0839F3E4[])(struct Task *) = { - sub_8088984, - sub_80889E4, - sub_8088A30, - sub_8088A78, - sub_8088AF4 -}; - -void (*const gUnknown_0839F3F8[])(struct Task *) = { - sub_8088CA0, - sub_8088CF8, - sub_8088D3C, - sub_8088D94, - sub_8088DD8, - sub_8088E2C, - sub_8088EB4, - sub_8088F10, - sub_8088F30 -}; - -const union AffineAnimCmd SpriteAffineAnim_839F41C[] = { - AFFINEANIMCMD_FRAME(8, 8, -30, 0), - AFFINEANIMCMD_FRAME(28, 28, 0, 30), - AFFINEANIMCMD_END -}; - -const union AffineAnimCmd SpriteAffineAnim_839F434[] = { - AFFINEANIMCMD_FRAME(256, 256, 64, 0), - AFFINEANIMCMD_FRAME(-10, -10, 0, 22), - AFFINEANIMCMD_END -}; - -const union AffineAnimCmd *const gSpriteAffineAnimTable_0839F44C[] = { - SpriteAffineAnim_839F41C, - SpriteAffineAnim_839F434 -}; - -void (*const gUnknown_0839F454[])(struct Task *) = { - sub_80892A0, - sub_8089354, - sub_80893C0, - sub_8089414, - sub_808948C, - sub_80894C4, - fishE -}; - -const s16 gUnknown_0839F470[] = { - -2, - -4, - -5, - -6, - -7, - -8, - -8, - -8, - -7, - -7, - -6, - -5, - -3, - -2, - 0, - 2, - 4, - 8 -}; - -static u8 sActiveList[32]; - -extern u8 *gFieldEffectScriptPointers[]; - -u32 FieldEffectStart(u8 id) -{ - u8 *script; - u32 val; - - FieldEffectActiveListAdd(id); - - script = gFieldEffectScriptPointers[id]; - - while (gFieldEffectScriptFuncs[*script](&script, &val)) - ; - - return val; -} - -bool8 FieldEffectCmd_loadtiles(u8 **script, u32 *val) -{ - (*script)++; - FieldEffectScript_LoadTiles(script); - return TRUE; -} - -bool8 FieldEffectCmd_loadfadedpal(u8 **script, u32 *val) -{ - (*script)++; - FieldEffectScript_LoadFadedPalette(script); - return TRUE; -} - -bool8 FieldEffectCmd_loadpal(u8 **script, u32 *val) -{ - (*script)++; - FieldEffectScript_LoadPalette(script); - return TRUE; -} - -bool8 FieldEffectCmd_callnative(u8 **script, u32 *val) -{ - (*script)++; - FieldEffectScript_CallNative(script, val); - return TRUE; -} - -bool8 FieldEffectCmd_end(u8 **script, u32 *val) -{ - return FALSE; -} - -bool8 FieldEffectCmd_loadgfx_callnative(u8 **script, u32 *val) -{ - (*script)++; - FieldEffectScript_LoadTiles(script); - FieldEffectScript_LoadFadedPalette(script); - FieldEffectScript_CallNative(script, val); - return TRUE; -} - -bool8 FieldEffectCmd_loadtiles_callnative(u8 **script, u32 *val) -{ - (*script)++; - FieldEffectScript_LoadTiles(script); - FieldEffectScript_CallNative(script, val); - return TRUE; -} - -bool8 FieldEffectCmd_loadfadedpal_callnative(u8 **script, u32 *val) -{ - (*script)++; - FieldEffectScript_LoadFadedPalette(script); - FieldEffectScript_CallNative(script, val); - return TRUE; -} - -u32 FieldEffectScript_ReadWord(u8 **script) -{ - return (*script)[0] - + ((*script)[1] << 8) - + ((*script)[2] << 16) - + ((*script)[3] << 24); -} - -void FieldEffectScript_LoadTiles(u8 **script) -{ - struct SpriteSheet *sheet = (struct SpriteSheet *)FieldEffectScript_ReadWord(script); - if (GetSpriteTileStartByTag(sheet->tag) == 0xFFFF) - LoadSpriteSheet(sheet); - (*script) += 4; -} - -void FieldEffectScript_LoadFadedPalette(u8 **script) -{ - struct SpritePalette *palette = (struct SpritePalette *)FieldEffectScript_ReadWord(script); - LoadSpritePalette(palette); - sub_807D78C(IndexOfSpritePaletteTag(palette->tag)); - (*script) += 4; -} - -void FieldEffectScript_LoadPalette(u8 **script) -{ - struct SpritePalette *palette = (struct SpritePalette *)FieldEffectScript_ReadWord(script); - LoadSpritePalette(palette); - (*script) += 4; -} - -void FieldEffectScript_CallNative(u8 **script, u32 *val) -{ - u32 (*func)(void) = (u32 (*)(void))FieldEffectScript_ReadWord(script); - *val = func(); - (*script) += 4; -} - -void FieldEffectFreeGraphicsResources(struct Sprite *sprite) -{ - u16 sheetTileStart = sprite->sheetTileStart; - u32 paletteNum = sprite->oam.paletteNum; - DestroySprite(sprite); - FieldEffectFreeTilesIfUnused(sheetTileStart); - FieldEffectFreePaletteIfUnused(paletteNum); -} - -void FieldEffectStop(struct Sprite *sprite, u8 id) -{ - FieldEffectFreeGraphicsResources(sprite); - FieldEffectActiveListRemove(id); -} - -void FieldEffectFreeTilesIfUnused(u16 tileStart) -{ - u8 i; - u16 tag = GetSpriteTileTagByTileStart(tileStart); - - if (tag != 0xFFFF) - { - for (i = 0; i < MAX_SPRITES; i++) - if (gSprites[i].inUse && gSprites[i].usingSheet && tileStart == gSprites[i].sheetTileStart) - return; - FreeSpriteTilesByTag(tag); - } -} - -void FieldEffectFreePaletteIfUnused(u8 paletteNum) -{ - u8 i; - u16 tag = GetSpritePaletteTagByPaletteNum(paletteNum); - - if (tag != 0xFFFF) - { - for (i = 0; i < MAX_SPRITES; i++) - if (gSprites[i].inUse && gSprites[i].oam.paletteNum == paletteNum) - return; - FreeSpritePaletteByTag(tag); - } -} - -void FieldEffectActiveListClear(void) -{ - u8 i; - for (i = 0; i < ARRAY_COUNT(sActiveList); i++) - sActiveList[i] = 0xFF; -} - -void FieldEffectActiveListAdd(u8 id) -{ - u8 i; - for (i = 0; i < ARRAY_COUNT(sActiveList); i++) - { - if (sActiveList[i] == 0xFF) - { - sActiveList[i] = id; - return; - } - } -} - -void FieldEffectActiveListRemove(u8 id) -{ - u8 i; - for (i = 0; i < ARRAY_COUNT(sActiveList); i++) - { - if (sActiveList[i] == id) - { - sActiveList[i] = 0xFF; - return; - } - } -} - -bool8 FieldEffectActiveListContains(u8 id) -{ - u8 i; - for (i = 0; i < ARRAY_COUNT(sActiveList); i++) - if (sActiveList[i] == id) - return TRUE; - return FALSE; -} - -u8 CreateTrainerSprite_BirchSpeech(u8 gender, 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; - spriteTemplate.oam = &gOamData_839F0F4; - spriteTemplate.anims = gDummySpriteAnimTable; - spriteTemplate.images = NULL; - spriteTemplate.affineAnims = gDummySpriteAffineAnimTable; - spriteTemplate.callback = SpriteCallbackDummy; - return CreateSprite(&spriteTemplate, x, y, subpriority); -} - -void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest) -{ - LZDecompressVram(gTrainerFrontPicTable[gender].data, dest); - LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, 0x20); -} - -u8 CreateBirchSprite(s16 x, s16 y, u8 subpriority) -{ - LoadSpritePalette(&gUnknown_0839F114); - return CreateSprite(&gSpriteTemplate_839F128, x, y, subpriority); -} - -u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) -{ - DecompressPicFromTable_2(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gUnknown_081FAF4C[3], gUnknown_081FAF4C[3], species); - LoadCompressedObjectPalette(&gMonPaletteTable[species]); - GetMonSpriteTemplate_803C56C(species, 3); - gUnknown_02024E8C.paletteTag = gMonPaletteTable[0].tag; - sub_807DE38(IndexOfSpritePaletteTag(gMonPaletteTable[0].tag) + 0x10); - return CreateSprite(&gUnknown_02024E8C, x, y, subpriority); -} - -u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority) -{ - const struct CompressedSpritePalette *spritePalette; - - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)gUnknown_081FAF4C[3] /* this is actually u8* or something, pointing to ewram */, gUnknown_081FAF4C[3], species, g); - spritePalette = sub_80409C8(species, d, g); - LoadCompressedObjectPalette(spritePalette); - GetMonSpriteTemplate_803C56C(species, 3); - gUnknown_02024E8C.paletteTag = spritePalette->tag; - sub_807DE38(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10); - return CreateSprite(&gUnknown_02024E8C, x, y, subpriority); -} - -void FreeResourcesAndDestroySprite(struct Sprite *sprite) -{ - sub_807DE68(); - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); - if (sprite->oam.affineMode != 0) - { - FreeOamMatrix(sprite->oam.matrixNum); - } - DestroySprite(sprite); -} - -#ifdef NONMATCHING -void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) -{ - int curRed; - int curGreen; - int curBlue; - - curRed = gPlttBufferUnfaded[i] & 0x1f; - curGreen = (gPlttBufferUnfaded[i] & (0x1f << 5)) >> 5; - curBlue = (gPlttBufferUnfaded[i] & (0x1f << 10)) >> 10; - curRed += (((0x1f - curRed) * r) >> 4); - curGreen += (((0x1f - curGreen) * g) >> 4); - curBlue += (((0x1f - curBlue) * b) >> 4); - gPlttBufferFaded[i] = RGB(curRed, curGreen, curBlue); -} - -void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) -{ - int curRed; - int curGreen; - int curBlue; - - curRed = gPlttBufferUnfaded[i] & 0x1f; - curGreen = (gPlttBufferUnfaded[i] & (0x1f << 5)) >> 5; - curBlue = (gPlttBufferUnfaded[i] & (0x1f << 10)) >> 10; - curRed -= ((curRed * r) >> 4); - curGreen -= ((curGreen * g) >> 4); - curBlue -= ((curBlue * b) >> 4); - gPlttBufferFaded[i] = RGB(curRed, curGreen, curBlue); -} -#else -__attribute__((naked)) -void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) -{ - asm(".syntax unified\n" - "\tpush {r4-r7,lr}\n" - "\tmov r7, r9\n" - "\tmov r6, r8\n" - "\tpush {r6,r7}\n" - "\tlsls r0, 16\n" - "\tlsls r1, 24\n" - "\tlsrs r1, 24\n" - "\tlsls r2, 24\n" - "\tlsrs r2, 24\n" - "\tlsls r3, 24\n" - "\tlsrs r3, 24\n" - "\tldr r4, _08085D00 @ =gPlttBufferUnfaded\n" - "\tlsrs r0, 15\n" - "\tadds r4, r0, r4\n" - "\tldrh r4, [r4]\n" - "\tmovs r5, 0x1F\n" - "\tmov r9, r5\n" - "\tmov r8, r4\n" - "\tmov r6, r8\n" - "\tands r6, r5\n" - "\tmov r8, r6\n" - "\tmovs r6, 0xF8\n" - "\tlsls r6, 2\n" - "\tands r6, r4\n" - "\tlsrs r6, 5\n" - "\tmovs r5, 0xF8\n" - "\tlsls r5, 7\n" - "\tands r4, r5\n" - "\tlsrs r4, 10\n" - "\tmov r7, r9\n" - "\tmov r5, r8\n" - "\tsubs r7, r5\n" - "\tmov r12, r7\n" - "\tmov r7, r12\n" - "\tmuls r7, r1\n" - "\tadds r1, r7, 0\n" - "\tasrs r1, 4\n" - "\tadd r8, r1\n" - "\tmov r5, r9\n" - "\tsubs r1, r5, r6\n" - "\tmuls r1, r2\n" - "\tasrs r1, 4\n" - "\tadds r6, r1\n" - "\tsubs r5, r4\n" - "\tmov r9, r5\n" - "\tmov r1, r9\n" - "\tmuls r1, r3\n" - "\tasrs r1, 4\n" - "\tadds r4, r1\n" - "\tmov r7, r8\n" - "\tlsls r7, 16\n" - "\tlsls r6, 21\n" - "\torrs r6, r7\n" - "\tlsls r4, 26\n" - "\torrs r4, r6\n" - "\tlsrs r4, 16\n" - "\tldr r1, _08085D04 @ =gPlttBufferFaded\n" - "\tadds r0, r1\n" - "\tstrh r4, [r0]\n" - "\tpop {r3,r4}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_08085D00: .4byte gPlttBufferUnfaded\n" - "_08085D04: .4byte gPlttBufferFaded\n" - ".syntax divided"); -} - -__attribute__((naked)) -void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) -{ - asm(".syntax unified\n" - "\tpush {r4-r6,lr}\n" - "\tmov r6, r8\n" - "\tpush {r6}\n" - "\tlsls r0, 16\n" - "\tlsls r1, 24\n" - "\tlsrs r1, 24\n" - "\tlsls r2, 24\n" - "\tlsrs r2, 24\n" - "\tlsls r3, 24\n" - "\tlsrs r3, 24\n" - "\tldr r4, _08085D78 @ =gPlttBufferUnfaded\n" - "\tlsrs r0, 15\n" - "\tadds r4, r0, r4\n" - "\tldrh r4, [r4]\n" - "\tmovs r5, 0x1F\n" - "\tmov r8, r5\n" - "\tmov r6, r8\n" - "\tands r6, r4\n" - "\tmov r8, r6\n" - "\tmovs r5, 0xF8\n" - "\tlsls r5, 2\n" - "\tands r5, r4\n" - "\tlsrs r5, 5\n" - "\tmovs r6, 0xF8\n" - "\tlsls r6, 7\n" - "\tands r4, r6\n" - "\tlsrs r4, 10\n" - "\tmov r6, r8\n" - "\tmuls r6, r1\n" - "\tadds r1, r6, 0\n" - "\tasrs r1, 4\n" - "\tmov r6, r8\n" - "\tsubs r6, r1\n" - "\tadds r1, r5, 0\n" - "\tmuls r1, r2\n" - "\tasrs r1, 4\n" - "\tsubs r5, r1\n" - "\tadds r1, r4, 0\n" - "\tmuls r1, r3\n" - "\tasrs r1, 4\n" - "\tsubs r4, r1\n" - "\tlsls r6, 16\n" - "\tlsls r5, 21\n" - "\torrs r5, r6\n" - "\tlsls r4, 26\n" - "\torrs r4, r5\n" - "\tlsrs r4, 16\n" - "\tldr r1, _08085D7C @ =gPlttBufferFaded\n" - "\tadds r0, r1\n" - "\tstrh r4, [r0]\n" - "\tpop {r3}\n" - "\tmov r8, r3\n" - "\tpop {r4-r6}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_08085D78: .4byte gPlttBufferUnfaded\n" - "_08085D7C: .4byte gPlttBufferFaded\n" - ".syntax divided"); -} -#endif - -void Task_PokecenterHeal(u8 taskId); -u8 CreatePokeballGlowSprite(s16, s16, s16, u16); -u8 PokecenterHealEffectHelper(s16, s16); - -bool8 FldEff_PokecenterHeal(void) -{ - u8 nPokemon; - struct Task *task; - - nPokemon = CalculatePlayerPartyCount(); - task = &gTasks[CreateTask(Task_PokecenterHeal, 0xff)]; - task->data[1] = nPokemon; - task->data[2] = 0x5d; - task->data[3] = 0x24; - task->data[4] = 0x7c; - task->data[5] = 0x18; - return FALSE; -} - -void Task_PokecenterHeal(u8 taskId) -{ - struct Task *task; - task = &gTasks[taskId]; - gUnknown_0839F268[task->data[0]](task); -} - -void PokecenterHealEffect_0(struct Task *task) -{ - task->data[0]++; - task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 1); - task->data[7] = PokecenterHealEffectHelper(task->data[4], task->data[5]); -} - -void PokecenterHealEffect_1(struct Task *task) -{ - if (gSprites[task->data[6]].data0 > 1) - { - gSprites[task->data[7]].data0++; - task->data[0]++; - } -} - -void PokecenterHealEffect_2(struct Task *task) -{ - if (gSprites[task->data[6]].data0 > 4) - { - task->data[0]++; - } -} - -void PokecenterHealEffect_3(struct Task *task) -{ - if (gSprites[task->data[6]].data0 > 6) - { - DestroySprite(&gSprites[task->data[6]]); - FieldEffectActiveListRemove(FLDEFF_POKECENTER_HEAL); - DestroyTask(FindTaskIdByFunc(Task_PokecenterHeal)); - } -} - -void Task_HallOfFameRecord(u8 taskId); -void HallOfFameRecordEffectHelper(s16, s16, s16, u8); - -bool8 FldEff_HallOfFameRecord(void) -{ - u8 nPokemon; - struct Task *task; - - nPokemon = CalculatePlayerPartyCount(); - task = &gTasks[CreateTask(Task_HallOfFameRecord, 0xff)]; - task->data[1] = nPokemon; - task->data[2] = 0x75; - task->data[3] = 0x34; - return FALSE; -} - -void Task_HallOfFameRecord(u8 taskId) -{ - struct Task *task; - task = &gTasks[taskId]; - gUnknown_0839F278[task->data[0]](task); -} - -void HallOfFameRecordEffect_0(struct Task *task) -{ - u8 taskId; - task->data[0]++; - task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 0); - taskId = FindTaskIdByFunc(Task_HallOfFameRecord); - HallOfFameRecordEffectHelper(taskId, 0x78, 0x18, 0); - HallOfFameRecordEffectHelper(taskId, 0x28, 0x08, 1); - HallOfFameRecordEffectHelper(taskId, 0x48, 0x08, 1); - HallOfFameRecordEffectHelper(taskId, 0xa8, 0x08, 1); - HallOfFameRecordEffectHelper(taskId, 0xc8, 0x08, 1); -} - -void HallOfFameRecordEffect_1(struct Task *task) -{ - if (gSprites[task->data[6]].data0 > 1) - { - task->data[15]++; // was this ever initialized? is this ever used? - task->data[0]++; - } -} - -void HallOfFameRecordEffect_2(struct Task *task) -{ - if (gSprites[task->data[6]].data0 > 4) - { - task->data[0]++; - } -} - -void HallOfFameRecordEffect_3(struct Task *task) -{ - if (gSprites[task->data[6]].data0 > 6) - { - DestroySprite(&gSprites[task->data[6]]); - FieldEffectActiveListRemove(FLDEFF_HALL_OF_FAME_RECORD); - DestroyTask(FindTaskIdByFunc(Task_HallOfFameRecord)); - } -} - -void SpriteCB_PokeballGlowEffect(struct Sprite *); - -u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5) -{ - u8 spriteId; - struct Sprite *sprite; - spriteId = CreateInvisibleSprite(SpriteCB_PokeballGlowEffect); - sprite = &gSprites[spriteId]; - sprite->pos2.x = x; - sprite->pos2.y = y; - sprite->data5 = data5; - sprite->data6 = data6; - sprite->data7 = spriteId; - return spriteId; -} - -void SpriteCB_PokeballGlowEffect(struct Sprite *sprite) -{ - gUnknown_0839F288[sprite->data0](sprite); -} - -void PokeballGlowEffect_0(struct Sprite *sprite) -{ - u8 endSpriteId; - if (sprite->data1 == 0 || (--sprite->data1) == 0) - { - sprite->data1 = 25; - endSpriteId = CreateSpriteAtEnd(&gSpriteTemplate_839F208, gUnknown_0839F2A8[sprite->data2].x + sprite->pos2.x, gUnknown_0839F2A8[sprite->data2].y + sprite->pos2.y, 0); - gSprites[endSpriteId].oam.priority = 2; - gSprites[endSpriteId].data0 = sprite->data7; - sprite->data2++; - sprite->data6--; - PlaySE(SE_BOWA); - } - if (sprite->data6 == 0) - { - sprite->data1 = 32; - sprite->data0++; - } -} - -void PokeballGlowEffect_1(struct Sprite *sprite) -{ - if ((--sprite->data1) == 0) - { - sprite->data0++; - sprite->data1 = 8; - sprite->data2 = 0; - sprite->data3 = 0; - if (sprite->data5) - { - PlayFanfare(BGM_ME_ASA); - } - } -} - -void PokeballGlowEffect_2(struct Sprite *sprite) -{ - u8 phase; - if ((--sprite->data1) == 0) - { - sprite->data1 = 8; - sprite->data2++; - sprite->data2 &= 3; - if (sprite->data2 == 0) - { - sprite->data3++; - } - } - phase = (sprite->data2 + 3) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - phase = (sprite->data2 + 2) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - phase = (sprite->data2 + 1) & 3; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - phase = sprite->data2; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - if (sprite->data3 > 2) - { - sprite->data0++; - sprite->data1 = 8; - sprite->data2 = 0; - } -} - -void PokeballGlowEffect_3(struct Sprite *sprite) -{ - u8 phase; - if ((--sprite->data1) == 0) - { - sprite->data1 = 8; - sprite->data2++; - sprite->data2 &= 3; - if (sprite->data2 == 3) - { - sprite->data0++; - sprite->data1 = 30; - } - } - phase = sprite->data2; - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); -} - -void PokeballGlowEffect_4(struct Sprite *sprite) -{ - if ((--sprite->data1) == 0) - { - sprite->data0++; - } -} - -void PokeballGlowEffect_5(struct Sprite *sprite) -{ - sprite->data0++; -} - -void PokeballGlowEffect_6(struct Sprite *sprite) -{ - if (sprite->data5 == 0 || IsFanfareTaskInactive()) - { - sprite->data0++; - } -} - -void PokeballGlowEffect_7(struct Sprite *sprite) -{ -} - -void SpriteCB_PokeballGlow(struct Sprite *sprite) -{ - if (gSprites[sprite->data0].data0 > 4) - { - FieldEffectFreeGraphicsResources(sprite); - } -} - -u8 PokecenterHealEffectHelper(s16 x, s16 y) -{ - u8 spriteIdAtEnd; - struct Sprite *sprite; - spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_839F220, x, y, 0); - sprite = &gSprites[spriteIdAtEnd]; - sprite->oam.priority = 2; - sprite->invisible = 1; - SetSubspriteTables(sprite, &gUnknown_0839F1A0); - return spriteIdAtEnd; -} - -void SpriteCB_PokecenterMonitor(struct Sprite *sprite) -{ - if (sprite->data0 != 0) - { - sprite->data0 = 0; - sprite->invisible = 0; - StartSpriteAnim(sprite, 1); - } - if (sprite->animEnded) - { - FieldEffectFreeGraphicsResources(sprite); - } -} - -void HallOfFameRecordEffectHelper(s16 a0, s16 a1, s16 a2, u8 a3) -{ - u8 spriteIdAtEnd; - if (!a3) - { - spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_839F238, a1, a2, 0); - SetSubspriteTables(&gSprites[spriteIdAtEnd], &gUnknown_0839F1C8); - } else - { - spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_839F250, a1, a2, 0); - } - gSprites[spriteIdAtEnd].invisible = 1; - gSprites[spriteIdAtEnd].data0 = a0; -} - -void SpriteCB_HallOfFameMonitor(struct Sprite *sprite) -{ - if (gTasks[sprite->data0].data[15]) - { - if (sprite->data1 == 0 || (--sprite->data1) == 0) - { - sprite->data1 = 16; - sprite->invisible ^= 1; - } - sprite->data2++; - } - if (sprite->data2 > 127) - { - FieldEffectFreeGraphicsResources(sprite); - } -} - -void mapldr_080842E8(void); -void mapldr_08084390(void); -void task00_8084310(u8); -void c3_080843F8(u8); - -void sub_80865BC(void) -{ - SetMainCallback2(c2_exit_to_overworld_2_switch); - gFieldCallback = mapldr_080842E8; -} - -void mapldr_080842E8(void) -{ - pal_fill_black(); - CreateTask(task00_8084310, 0); - ScriptContext2_Enable(); - FreezeMapObjects(); - gFieldCallback = NULL; -} - -void task00_8084310(u8 taskId) -{ - struct Task *task; - task = &gTasks[taskId]; - if (!task->data[0]) - { - if (!sub_807D770()) - { - return; - } - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; - if ((int)gUnknown_0202FF84[0] > 5) - { - gUnknown_0202FF84[0] = 0; - } - FieldEffectStart(FLDEFF_USE_FLY); - task->data[0]++; - } - if (!FieldEffectActiveListContains(FLDEFF_USE_FLY)) - { - flag_var_implications_of_teleport_(); - warp_in(); - SetMainCallback2(CB2_LoadMap); - gFieldCallback = mapldr_08084390; - DestroyTask(taskId); - } -} - -void mapldr_08084390(void) -{ - sub_8053E90(); - pal_fill_black(); - CreateTask(c3_080843F8, 0); - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; - if (gPlayerAvatar.flags & 0x08) - { - FieldObjectTurn(&gMapObjects[gPlayerAvatar.mapObjectId], DIR_WEST); - } - ScriptContext2_Enable(); - FreezeMapObjects(); - gFieldCallback = NULL; -} - -void c3_080843F8(u8 taskId) -{ - struct Task *task; - task = &gTasks[taskId]; - if (task->data[0] == 0) - { - if (gPaletteFade.active) - { - return; - } - FieldEffectStart(FLDEFF_FLY_IN); - task->data[0]++; - } - if (!FieldEffectActiveListContains(FLDEFF_FLY_IN)) - { - ScriptContext2_Disable(); - UnfreezeMapObjects(); - DestroyTask(taskId); - } -} - -extern void pal_fill_for_map_transition(void); -void sub_8086774(u8); -extern void CameraObjectReset2(void); -extern void CameraObjectReset1(void); - -void sub_8086748(void) -{ - sub_8053E90(); - pal_fill_for_map_transition(); - ScriptContext2_Enable(); - FreezeMapObjects(); - CreateTask(sub_8086774, 0); - gFieldCallback = NULL; -} - -void sub_8086774(u8 taskId) -{ - struct Task *task; - task = &gTasks[taskId]; - while (gUnknown_0839F2CC[task->data[0]](task)); // return code signifies whether to continue blocking here -} - -bool8 sub_80867AC(struct Task *task) // gUnknown_0839F2CC[0] -{ - struct MapObject *playerObject; - struct Sprite *playerSprite; - playerObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - playerSprite = &gSprites[gPlayerAvatar.spriteId]; - CameraObjectReset2(); - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; - gPlayerAvatar.unk6 = 1; - FieldObjectSetSpecialAnim(playerObject, GetFaceDirectionAnimId(player_get_direction_lower_nybble())); - task->data[4] = playerSprite->subspriteMode; - playerObject->mapobj_bit_26 = 1; - playerSprite->oam.priority = 1; - playerSprite->subspriteMode = 2; - task->data[0]++; - return TRUE; -} - -bool8 sub_8086854(struct Task *task) // gUnknown_0839F2CC[1] -{ - if (sub_807D770()) - { - task->data[0]++; - } - return FALSE; -} - -bool8 sub_8086870(struct Task *task) // gUnknown_0839F2CC[2] -{ - struct Sprite *sprite; - s16 centerToCornerVecY; - sprite = &gSprites[gPlayerAvatar.spriteId]; - centerToCornerVecY = -(sprite->centerToCornerVecY << 1); - sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY); - task->data[1] = 1; - task->data[2] = 0; - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 0; - PlaySE(SE_RU_HYUU); - task->data[0]++; - return FALSE; -} - -bool8 sub_80868E4(struct Task *task) -{ - struct MapObject *mapObject; - struct Sprite *sprite; - - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.y += task->data[1]; - if (task->data[1] < 8) - { - task->data[2] += task->data[1]; - if (task->data[2] & 0xf) - { - task->data[1] <<= 1; - } - } - if (task->data[3] == 0 && sprite->pos2.y >= -16) - { - task->data[3]++; - mapObject->mapobj_bit_26 = 0; - sprite->subspriteMode = task->data[4]; - mapObject->mapobj_bit_2 = 1; - } - if (sprite->pos2.y >= 0) - { - PlaySE(SE_W070); - mapObject->mapobj_bit_3 = 1; - mapObject->mapobj_bit_5 = 1; - sprite->pos2.y = 0; - task->data[0]++; - } - return FALSE; -} - -bool8 sub_808699C(struct Task *task) -{ - task->data[0]++; - task->data[1] = 4; - task->data[2] = 0; - SetCameraPanningCallback(NULL); - return TRUE; -} - -bool8 sub_80869B8(struct Task *task) -{ - SetCameraPanning(0, task->data[1]); - task->data[1] = -task->data[1]; - task->data[2]++; - if ((task->data[2] & 3) == 0) - { - task->data[1] >>= 1; - } - if (task->data[1] == 0) - { - task->data[0]++; - } - return FALSE; -} - -bool8 sub_80869F8(struct Task *task) -{ - gPlayerAvatar.unk6 = 0; - ScriptContext2_Disable(); - CameraObjectReset1(); - UnfreezeMapObjects(); - InstallCameraPanAheadCallback(); - DestroyTask(FindTaskIdByFunc(sub_8086774)); - return FALSE; -} - -void sub_8086A68(u8); -extern void sub_80B4824(u8); -extern void sub_8053FF8(void); -extern void fade_8080918(void); - -void sub_8086B98(struct Task *); -void sub_8086BE4(struct Task *); -void sub_8086C30(void); -void sub_8086C40(void); -bool8 sub_8054034(void); -void sub_8086C94(void); -void sub_80B483C(void); -void sub_8086CBC(u8); - -void sub_8086A2C(u8 a0, u8 priority) -{ - u8 taskId; - taskId = CreateTask(sub_8086A68, priority); - gTasks[taskId].data[1] = 0; - if (a0 == 0x6a) - { - gTasks[taskId].data[1] = 1; - } -} - -void sub_8086A68(u8 taskId) -{ - struct Task *task; - task = &gTasks[taskId]; - while (gUnknown_0839F2E8[task->data[0]](task)); -} - -bool8 sub_8086AA0(struct Task *task) -{ - FreezeMapObjects(); - CameraObjectReset2(); - sub_80B4824(task->data[1]); - task->data[0]++; - return FALSE; -} - -bool8 sub_8086AC0(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(player_get_direction_lower_nybble())); - task->data[0]++; - task->data[2] = 0; - task->data[3] = 0; - if ((u8)task->data[1] == 0) - { - task->data[0] = 4; - } - PlaySE(SE_ESUKA); - } - return FALSE; -} - -bool8 sub_8086B30(struct Task *task) -{ - sub_8086B98(task); - if (task->data[2] > 3) - { - sub_8086C30(); - task->data[0]++; - } - return FALSE; -} - -bool8 sub_8086B54(struct Task *task) -{ - sub_8086B98(task); - sub_8086C40(); - return FALSE; -} - -bool8 sub_8086B64(struct Task *task) -{ - sub_8086BE4(task); - if (task->data[2] > 3) - { - sub_8086C30(); - task->data[0]++; - } - return FALSE; -} - -bool8 sub_8086B88(struct Task *task) -{ - sub_8086BE4(task); - sub_8086C40(); - return FALSE; -} - -void sub_8086B98(struct Task *task) -{ - struct Sprite *sprite; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.x = Cos(0x84, task->data[2]); - sprite->pos2.y = Sin(0x94, task->data[2]); - task->data[3]++; - if (task->data[3] & 1) - { - task->data[2]++; - } -} - -void sub_8086BE4(struct Task *task) -{ - struct Sprite *sprite; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.x = Cos(0x7c, task->data[2]); - sprite->pos2.y = Sin(0x76, task->data[2]); - task->data[3]++; - if (task->data[3] & 1) - { - task->data[2]++; - } -} - -void sub_8086C30(void) -{ - sub_8053FF8(); - fade_8080918(); -} - -void sub_8086C40(void) -{ - if (!gPaletteFade.active && sub_8054034() == TRUE) - { - sub_80B483C(); - warp_in(); - gFieldCallback = sub_8086C94; - SetMainCallback2(CB2_LoadMap); - DestroyTask(FindTaskIdByFunc(sub_8086A68)); - } -} - -void sub_8086C94(void) -{ - sub_8053E90(); - pal_fill_for_map_transition(); - ScriptContext2_Enable(); - CreateTask(sub_8086CBC, 0); - gFieldCallback = NULL; -} - -void sub_8086CBC(u8 taskId) -{ - struct Task *task; - task = &gTasks[taskId]; - while (gUnknown_0839F300[task->data[0]](task)); -} - -bool8 sub_8086CF4(struct Task *task) -{ - struct MapObject *mapObject; - s16 x; - s16 y; - u8 behavior; - CameraObjectReset2(); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(DIR_EAST)); - PlayerGetDestCoords(&x, &y); - behavior = MapGridGetMetatileBehaviorAt(x, y); - task->data[0]++; - task->data[1] = 16; - if (behavior == 0x6b) - { - behavior = 1; - task->data[0] = 3; - } else - { - behavior = 0; - } - sub_80B4824(behavior); - return TRUE; -} - -bool8 sub_8086D70(struct Task *task) -{ - struct Sprite *sprite; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.x = Cos(0x84, task->data[1]); - sprite->pos2.y = Sin(0x94, task->data[1]); - task->data[0]++; - return FALSE; -} - -bool8 sub_8086DB0(struct Task *task) -{ - struct Sprite *sprite; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.x = Cos(0x84, task->data[1]); - sprite->pos2.y = Sin(0x94, task->data[1]); - task->data[2]++; - if (task->data[2] & 1) - { - task->data[1]--; - } - if (task->data[1] == 0) - { - sprite->pos2.x = 0; - sprite->pos2.y = 0; - task->data[0] = 5; - } - return FALSE; -} - -bool8 sub_8086E10(struct Task *task) -{ - struct Sprite *sprite; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.x = Cos(0x7c, task->data[1]); - sprite->pos2.y = Sin(0x76, task->data[1]); - task->data[0]++; - return FALSE; -} - -bool8 sub_8086E50(struct Task *task) -{ - struct Sprite *sprite; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.x = Cos(0x7c, task->data[1]); - sprite->pos2.y = Sin(0x76, task->data[1]); - task->data[2]++; - if (task->data[2] & 1) - { - task->data[1]--; - } - if (task->data[1] == 0) - { - sprite->pos2.x = 0; - sprite->pos2.y = 0; - task->data[0]++; - } - return FALSE; -} - -extern bool8 sub_80B4850(void); - -bool8 sub_8086EB0(struct Task *task) -{ - if (sub_80B4850()) - { - return FALSE; - } - sub_80B483C(); - task->data[0]++; - return TRUE; -} - -bool8 sub_8086ED4(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - CameraObjectReset1(); - ScriptContext2_Disable(); - FieldObjectSetSpecialAnim(mapObject, GetGoSpeed0AnimId(DIR_EAST)); - DestroyTask(FindTaskIdByFunc(sub_8086CBC)); - } - return FALSE; -} - -void sub_8086F64(u8); - -bool8 FldEff_UseWaterfall(void) -{ - u8 taskId; - taskId = CreateTask(sub_8086F64, 0xff); - gTasks[taskId].data[1] = gUnknown_0202FF84[0]; - sub_8086F64(taskId); - return FALSE; -} - -void sub_8086F64(u8 taskId) -{ - while (gUnknown_0839F31C[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId])); -} - -bool8 sub_8086FB0(struct Task *task, struct MapObject *mapObject) -{ - ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; - task->data[0]++; - return FALSE; -} - -bool8 waterfall_1_do_anim_probably(struct Task *task, struct MapObject *mapObject) -{ - ScriptContext2_Enable(); - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject)) - { - FieldObjectClearAnimIfSpecialAnimFinished(mapObject); - gUnknown_0202FF84[0] = task->data[1]; - FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - task->data[0]++; - } - return FALSE; -} - -bool8 waterfall_2_wait_anim_finish_probably(struct Task *task, struct MapObject *mapObject) -{ - if (FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) - { - return FALSE; - } - task->data[0]++; - return TRUE; -} - -bool8 sub_8087030(struct Task *task, struct MapObject *mapObject) -{ - FieldObjectSetSpecialAnim(mapObject, GetSimpleGoAnimId(DIR_NORTH)); - task->data[0]++; - return FALSE; -} - -bool8 sub_8087058(struct Task *task, struct MapObject *mapObject) -{ - if (!FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - return FALSE; - } - if (MetatileBehavior_IsWaterfall(mapObject->mapobj_unk_1E)) - { - task->data[0] = 3; - return TRUE; - } - ScriptContext2_Disable(); - gPlayerAvatar.unk6 = 0; - DestroyTask(FindTaskIdByFunc(sub_8086F64)); - FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL); - return FALSE; -} - -void Task_Dive(u8); -extern int dive_warp(struct MapPosition *, u16); - -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]; - Task_Dive(taskId); - return FALSE; -} - -void Task_Dive(u8 taskId) -{ - while (gUnknown_0839F330[gTasks[taskId].data[0]](&gTasks[taskId])); -} - -bool8 sub_8087124(struct Task *task) -{ - gPlayerAvatar.unk6 = 1; - task->data[0]++; - return FALSE; -} - -bool8 dive_2_unknown(struct Task *task) -{ - ScriptContext2_Enable(); - gUnknown_0202FF84[0] = task->data[15]; - FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - task->data[0]++; - return FALSE; -} - -bool8 dive_3_unknown(struct Task *task) -{ - struct MapPosition mapPosition; - PlayerGetDestCoords(&mapPosition.x, &mapPosition.y); - if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) - { - dive_warp(&mapPosition, gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E); - DestroyTask(FindTaskIdByFunc(Task_Dive)); - FieldEffectActiveListRemove(FLDEFF_USE_DIVE); - } - return FALSE; -} - -void sub_80871D0(u8); -void mapldr_080851BC(void); - -void sub_80871B8(u8 priority) -{ - CreateTask(sub_80871D0, priority); -} - -void sub_80871D0(u8 taskId) -{ - while (gUnknown_0839F33C[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId])); -} - -bool8 sub_808722C(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - FreezeMapObjects(); - CameraObjectReset2(); - SetCameraPanningCallback(NULL); - gPlayerAvatar.unk6 = 1; - mapObject->mapobj_bit_26 = 1; - task->data[1] = 1; - task->data[0]++; - return TRUE; -} - -bool8 sub_8087264(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - SetCameraPanning(0, task->data[1]); - task->data[1] = -task->data[1]; - task->data[2]++; - if (task->data[2] > 7) - { - task->data[2] = 0; - task->data[0]++; - } - return FALSE; -} - -bool8 sub_8087298(struct Task *task, struct MapObject *mapObject, struct Sprite *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; - FieldEffectStart(FLDEFF_LAVARIDGE_GYM_WARP); - PlaySE(SE_W153); - task->data[0]++; - return TRUE; -} - -bool8 sub_80872E4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - s16 centerToCornerVecY; - SetCameraPanning(0, task->data[1]); - if (task->data[1] = -task->data[1], ++task->data[2] <= 17) - { - if (!(task->data[2] & 1) && (task->data[1] <= 3)) - { - task->data[1] <<= 1; - } - } else if (!(task->data[2] & 4) && (task->data[1] > 0)) - { - task->data[1] >>= 1; - } - if (task->data[2] > 6) - { - centerToCornerVecY = -(sprite->centerToCornerVecY << 1); - if (sprite->pos2.y > -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY)) - { - sprite->pos2.y -= task->data[3]; - if (task->data[3] <= 7) - { - task->data[3]++; - } - } else - { - task->data[4] = 1; - } - } - if (task->data[5] == 0 && sprite->pos2.y < -0x10) - { - task->data[5]++; - mapObject->mapobj_bit_26 = 1; - sprite->oam.priority = 1; - sprite->subspriteMode = 2; - } - if (task->data[1] == 0 && task->data[4] != 0) - { - task->data[0]++; - } - return FALSE; -} - -bool8 sub_80873D8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8053FF8(); - fade_8080918(); - task->data[0]++; - return FALSE; -} - -bool8 sub_80873F4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - if (!gPaletteFade.active && sub_8054034() == TRUE) - { - warp_in(); - gFieldCallback = mapldr_080851BC; - SetMainCallback2(CB2_LoadMap); - DestroyTask(FindTaskIdByFunc(sub_80871D0)); - } - return FALSE; -} - -void sub_8087470(u8); -extern u8 sub_80608A4(u8); - -void mapldr_080851BC(void) -{ - sub_8053E90(); - pal_fill_for_map_transition(); - ScriptContext2_Enable(); - gFieldCallback = NULL; - CreateTask(sub_8087470, 0); -} - -void sub_8087470(u8 taskId) -{ - while (gUnknown_0839F354[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId])); -} - -bool8 sub_80874CC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - CameraObjectReset2(); - FreezeMapObjects(); - gPlayerAvatar.unk6 = 1; - mapObject->mapobj_bit_13 = 1; - task->data[0]++; - return FALSE; -} - -bool8 sub_80874FC(struct Task *task, struct MapObject *mapObject, struct Sprite *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; - task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); - task->data[0]++; - } - return FALSE; -} - -bool8 sub_8087548(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - sprite = &gSprites[task->data[1]]; - if (sprite->animCmdIndex > 1) - { - task->data[0]++; - mapObject->mapobj_bit_13 = 0; - CameraObjectReset1(); - PlaySE(SE_W091); - FieldObjectSetSpecialAnim(mapObject, sub_80608A4(DIR_EAST)); - } - return FALSE; -} - -bool8 sub_808759C(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - gPlayerAvatar.unk6 = 0; - ScriptContext2_Disable(); - UnfreezeMapObjects(); - DestroyTask(FindTaskIdByFunc(sub_8087470)); - } - return FALSE; -} - -extern void sub_8060470(s16 *x, s16 *y, s16 dx, s16 dy); -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]; - gSprites[spriteId].coordOffsetEnabled = 1; - return spriteId; -} - -void sub_8087638(struct Sprite *sprite) -{ - if (sprite->animEnded) - { - FieldEffectStop(sprite, FLDEFF_LAVARIDGE_GYM_WARP); - } -} - -void sub_808766C(u8); - -void sub_8087654(u8 priority) -{ - CreateTask(sub_808766C, priority); -} - -void sub_808766C(u8 taskId) -{ - while(gUnknown_0839F364[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId])); -} - -bool8 sub_80876C8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - FreezeMapObjects(); - CameraObjectReset2(); - gPlayerAvatar.unk6 = 1; - mapObject->mapobj_bit_26 = 1; - task->data[0]++; - return FALSE; -} - -bool8 sub_80876F8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - 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; - task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); - task->data[0]++; - } else - { - task->data[1]++; - FieldObjectSetSpecialAnim(mapObject, GetStepInPlaceDelay4AnimId(mapObject->mapobj_unk_18)); - PlaySE(SE_FU_ZUZUZU); - } - } - return FALSE; -} - -bool8 sub_8087774(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - if (gSprites[task->data[1]].animCmdIndex == 2) - { - mapObject->mapobj_bit_13 = 1; - task->data[0]++; - } - return FALSE; -} - -bool8 sub_80877AC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH)) - { - sub_8053FF8(); - fade_8080918(); - task->data[0]++; - } - return FALSE; -} - -void sub_80878C4(u8); -void mapldr_080859D4(void); - -bool8 sub_80877D4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) -{ - if (!gPaletteFade.active && sub_8054034() == TRUE) - { - warp_in(); - gFieldCallback = sub_8086748; - SetMainCallback2(CB2_LoadMap); - DestroyTask(FindTaskIdByFunc(sub_808766C)); - } - return FALSE; -} - -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]; - gSprites[spriteId].coordOffsetEnabled = 1; - return spriteId; -} - -void sub_808788C(struct Sprite *sprite) -{ - if (sprite->animEnded) - { - FieldEffectStop(sprite, FLDEFF_POP_OUT_OF_ASH); - } -} - -void sub_80878A8(void) -{ - ScriptContext2_Enable(); - FreezeMapObjects(); - CreateTask(sub_80878C4, 0x50); -} - -void sub_80878C4(u8 taskId) -{ - gUnknown_0839F378[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_80878F4(struct Task *task) -{ - task->data[0]++; - task->data[14] = 64; - task->data[15] = player_get_direction_lower_nybble(); -} - -void sub_8087914(struct Task *task) -{ - struct MapObject *mapObject; - u8 unknown_0839F380[5]; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - if (task->data[14] != 0 && (--task->data[14]) == 0) - { - sub_8053FF8(); - fade_8080918(); - } - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - if (task->data[14] == 0 && !gPaletteFade.active && sub_8054034() == TRUE) - { - FieldObjectSetDirection(mapObject, task->data[15]); - sub_8053678(); - warp_in(); - gFieldCallback = mapldr_080859D4; - SetMainCallback2(CB2_LoadMap); - DestroyTask(FindTaskIdByFunc(sub_80878C4)); - } else if (task->data[1] == 0 || (--task->data[1]) == 0) - { - FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(unknown_0839F380[mapObject->mapobj_unk_18])); - if (task->data[2] < 12) - { - task->data[2]++; - } - task->data[1] = 8 >> (task->data[2] >> 2); - } - } -} - -void sub_8087A74(u8); - -void mapldr_080859D4(void) -{ - sub_8053E90(); - pal_fill_for_map_transition(); - ScriptContext2_Enable(); - FreezeMapObjects(); - gFieldCallback = NULL; - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; - CreateTask(sub_8087A74, 0); -} - -void sub_8087A74(u8 taskId) -{ - gUnknown_0839F388[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_8087AA4(struct Task *task) -{ - if (sub_807D770()) - { - task->data[0]++; - task->data[15] = player_get_direction_lower_nybble(); - } -} - -void sub_8087AC8(struct Task *task) -{ - struct MapObject *mapObject; - u8 unknown_0839F380[5]; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (task->data[1] == 0 || (--task->data[1]) == 0) - { - if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) && !FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - return; - } - if (task->data[2] >= 32 && task->data[15] == player_get_direction_lower_nybble()) - { - mapObject->mapobj_bit_13 = 0; - ScriptContext2_Disable(); - UnfreezeMapObjects(); - DestroyTask(FindTaskIdByFunc(sub_8087A74)); - return; - } - FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(unknown_0839F380[mapObject->mapobj_unk_18])); - if (task->data[2] < 32) - { - task->data[2]++; - } - task->data[1] = task->data[2] >> 2; - } - mapObject->mapobj_bit_13 ^= 1; -} - -void sub_8087BBC(u8); -void mapldr_08085D88(void); - -void sub_8087BA8(void) -{ - CreateTask(sub_8087BBC, 0); -} - -void sub_8087BBC(u8 taskId) -{ - gUnknown_0839F390[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_8087BEC(struct Task *task) -{ - ScriptContext2_Enable(); - FreezeMapObjects(); - CameraObjectReset2(); - task->data[15] = player_get_direction_lower_nybble(); - task->data[0]++; -} - -void sub_8087C14(struct Task *task) -{ - struct MapObject *mapObject; - u8 unknown_0839F380[5]; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (task->data[1] == 0 || (--task->data[1]) == 0) - { - FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]); - task->data[1] = 8; - task->data[2]++; - } - if (task->data[2] > 7 && task->data[15] == mapObject->mapobj_unk_18) - { - task->data[0]++; - task->data[1] = 4; - task->data[2] = 8; - task->data[3] = 1; - PlaySE(SE_TK_WARPIN); - } -} - -void sub_8087CA4(struct Task *task) -{ - struct MapObject *mapObject; - struct Sprite *sprite; - u8 unknown_0839F380[5]; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sprite = &gSprites[gPlayerAvatar.spriteId]; - if ((--task->data[1]) <= 0) - { - task->data[1] = 4; - FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]); - } - sprite->pos1.y -= task->data[3]; - task->data[4] += task->data[3]; - if ((--task->data[2]) <= 0 && (task->data[2] = 4, task->data[3] < 8)) - { - task->data[3] <<= 1; - } - if (task->data[4] > 8 && (sprite->oam.priority = 1, sprite->subspriteMode != 0)) - { - sprite->subspriteMode = 2; - } - if (task->data[4] >= 0xa8) - { - task->data[0]++; - sub_8053FF8(); - fade_8080918(); - } -} - -void sub_8087D78(struct Task *task) -{ - if (!gPaletteFade.active && sub_8054034() == TRUE) - { - sub_8053570(); - warp_in(); - SetMainCallback2(CB2_LoadMap); - gFieldCallback = mapldr_08085D88; - DestroyTask(FindTaskIdByFunc(sub_8087BBC)); - } -} - -void sub_8087E1C(u8); - -void mapldr_08085D88(void) -{ - sub_8053E90(); - pal_fill_for_map_transition(); - ScriptContext2_Enable(); - FreezeMapObjects(); - gFieldCallback = NULL; - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; - CameraObjectReset2(); - CreateTask(sub_8087E1C, 0); -} - -void sub_8087E1C(u8 taskId) -{ - gUnknown_0839F3A0[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_8087E4C(struct Task *task) -{ - struct Sprite *sprite; - s16 centerToCornerVecY; - if (sub_807D770()) - { - sprite = &gSprites[gPlayerAvatar.spriteId]; - centerToCornerVecY = -(sprite->centerToCornerVecY << 1); - sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY); - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 0; - task->data[0]++; - task->data[1] = 8; - task->data[2] = 1; - task->data[14] = sprite->subspriteMode; - task->data[15] = player_get_direction_lower_nybble(); - PlaySE(SE_TK_WARPIN); - } -} - -void sub_8087ED8(struct Task *task) -{ - u8 unknown_0839F380[5]; - struct MapObject *mapObject; - struct Sprite *sprite; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sprite = &gSprites[gPlayerAvatar.spriteId]; - if ((sprite->pos2.y += task->data[1]) >= -8) - { - if (task->data[13] == 0) - { - task->data[13]++; - mapObject->mapobj_bit_2 = 1; - sprite->subspriteMode = task->data[14]; - } - } else - { - sprite->oam.priority = 1; - if (sprite->subspriteMode != 0) - { - sprite->subspriteMode = 2; - } - } - if (sprite->pos2.y >= -0x30 && task->data[1] > 1 && !(sprite->pos2.y & 1)) - { - task->data[1]--; - } - if ((--task->data[2]) == 0) - { - task->data[2] = 4; - FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]); - } - if (sprite->pos2.y >= 0) - { - sprite->pos2.y = 0; - task->data[0]++; - task->data[1] = 1; - task->data[2] = 0; - } -} - -void sub_8087FDC(struct Task *task) -{ - u8 unknown_0839F380[5]; - struct MapObject *mapObject; - memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if ((--task->data[1]) == 0) - { - FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]); - task->data[1] = 8; - if ((++task->data[2]) > 4 && task->data[14] == mapObject->mapobj_unk_18) - { - ScriptContext2_Disable(); - CameraObjectReset1(); - UnfreezeMapObjects(); - DestroyTask(FindTaskIdByFunc(sub_8087E1C)); - } - } -} - -void sub_8088120(u8); -void sub_808847C(u8); -u8 sub_8088830(u32, u32, u32); -void sub_80883DC(void); -void sub_808843C(u16); -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) - { - taskId = CreateTask(sub_8088120, 0xff); - } else - { - taskId = CreateTask(sub_808847C, 0xff); - } - gTasks[taskId].data[15] = sub_8088830(gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[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; - FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON); - FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - return FALSE; -} - -void sub_8088120(u8 taskId) -{ - gUnknown_0839F3AC[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_8088150(struct Task *task) -{ - task->data[11] = REG_WININ; - task->data[12] = REG_WINOUT; - StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback); - task->data[1] = 0xf0f1; - task->data[2] = 0x5051; - task->data[3] = 0x3f; - task->data[4] = 0x3e; - REG_WIN0H = task->data[1]; - REG_WIN0V = task->data[2]; - REG_WININ = task->data[3]; - REG_WINOUT = task->data[4]; - SetVBlankCallback(sub_80883DC); - task->data[0]++; -} - -void sub_80881C0(struct Task *task) -{ - u16 offset; - u16 delta; - offset = ((REG_BG0CNT >> 2) << 14); - delta = ((REG_BG0CNT >> 8) << 11); - CpuCopy16(gFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x200); - CpuFill32(0, (void *)(VRAM + delta), 0x800); - LoadPalette(gFieldMoveStreaksPalette, 0xf0, 0x20); - sub_808843C(delta); - task->data[0]++; -} - -void sub_8088228(struct Task *task) -{ - s16 v0; - s16 v2; - s16 v3; - task->data[5] -= 16; - v0 = ((u16)task->data[1] >> 8); - v2 = ((u16)task->data[2] >> 8); - v3 = ((u16)task->data[2] & 0xff); - v0 -= 16; - v2 -= 2; - v3 += 2; - if (v0 < 0) - { - v0 = 0; - } - if (v2 < 0x28) - { - v2 = 0x28; - } - if (v3 > 0x78) - { - v3 = 0x78; - } - task->data[1] = (v0 << 8) | (task->data[1] & 0xff); - task->data[2] = (v2 << 8) | v3; - if (v0 == 0 && v2 == 0x28 && v3 == 0x78) - { - gSprites[task->data[15]].callback = sub_8088890; - task->data[0]++; - } -} - -void sub_80882B4(struct Task *task) -{ - task->data[5] -= 16; - if (gSprites[task->data[15]].data7) - { - task->data[0]++; - } -} - -void sub_80882E4(struct Task *task) -{ - s16 v2; - s16 v3; - task->data[5] -= 16; - v2 = (task->data[2] >> 8); - v3 = (task->data[2] & 0xff); - v2 += 6; - v3 -= 6; - if (v2 > 0x50) - { - v2 = 0x50; - } - if (v3 < 0x51) - { - v3 = 0x51; - } - task->data[2] = (v2 << 8) | v3; - if (v2 == 0x50 && v3 == 0x51) - { - task->data[0]++; - } -} - -void sub_8088338(struct Task *task) -{ - u16 bg0cnt; - bg0cnt = (REG_BG0CNT >> 8) << 11; - CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); - task->data[1] = 0xf1; - task->data[2] = 0xa1; - task->data[3] = task->data[11]; - task->data[4] = task->data[12]; - task->data[0]++; -} - -void sub_8088380(struct Task *task) -{ - IntrCallback callback; - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); - SetVBlankCallback(callback); - SetUpWindowConfig(&gWindowConfig_81E6CE4); - InitMenuWindow(&gWindowConfig_81E6CE4); - FreeResourcesAndDestroySprite(&gSprites[task->data[15]]); - FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); - DestroyTask(FindTaskIdByFunc(sub_8088120)); -} - -void sub_80883DC(void) -{ - struct Task *task; - IntrCallback callback; - task = &gTasks[FindTaskIdByFunc(sub_8088120)]; - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); - callback(); - REG_WIN0H = task->data[1]; - REG_WIN0V = task->data[2]; - REG_WININ = task->data[3]; - REG_WINOUT = task->data[4]; - REG_BG0HOFS = task->data[5]; - REG_BG0VOFS = task->data[6]; -} - -void sub_808843C(u16 offs) -{ - u16 i; - u16 *dest; - dest = (u16 *)(VRAM + 0x140 + offs); - for (i=0; i<0x140; i++, dest++) - { - *dest = gFieldMoveStreaksTilemap[i] | 0xf000; - } -} - -void sub_80886B0(void); -bool8 sub_8088708(struct Task *); -void sub_80886F8(struct Task *); -bool8 sub_80887C0(struct Task *); - -void sub_808847C(u8 taskId) -{ - gUnknown_0839F3C8[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_80884AC(struct Task *task) -{ - REG_BG0HOFS = task->data[1]; - REG_BG0VOFS = task->data[2]; - StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback); - SetVBlankCallback(sub_80886B0); - task->data[0]++; -} - -void sub_80884E8(struct Task *task) -{ - u16 offset; - u16 delta; - offset = ((REG_BG0CNT >> 2) << 14); - delta = ((REG_BG0CNT >> 8) << 11); - task->data[12] = delta; - CpuCopy16(gDarknessFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x80); - CpuFill32(0, (void *)(VRAM + delta), 0x800); - LoadPalette(gDarknessFieldMoveStreaksPalette, 0xf0, 0x20); - task->data[0]++; -} - -void sub_8088554(struct Task *task) -{ - if (sub_8088708(task)) - { - REG_WIN1H = 0x00f0; - REG_WIN1V = 0x2878; - gSprites[task->data[15]].callback = sub_8088890; - task->data[0]++; - } - sub_80886F8(task); -} - -void sub_80885A8(struct Task *task) -{ - sub_80886F8(task); - if (gSprites[task->data[15]].data7) - { - task->data[0]++; - } -} - -void sub_80885D8(struct Task *task) -{ - sub_80886F8(task); - task->data[3] = task->data[1] & 7; - task->data[4] = 0; - REG_WIN1H = 0xffff; - REG_WIN1V = 0xffff; - task->data[0]++; -} - -void sub_808860C(struct Task *task) -{ - sub_80886F8(task); - if (sub_80887C0(task)) - { - task->data[0]++; - } -} - -void sub_808862C(struct Task *task) -{ - IntrCallback intrCallback; - u16 bg0cnt; - bg0cnt = (REG_BG0CNT >> 8) << 11; - CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); - SetVBlankCallback(intrCallback); - SetUpWindowConfig(&gWindowConfig_81E6CE4); - InitMenuWindow(&gWindowConfig_81E6CE4); - FreeResourcesAndDestroySprite(&gSprites[task->data[15]]); - FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); - DestroyTask(FindTaskIdByFunc(sub_808847C)); -} - -void sub_80886B0(void) -{ - IntrCallback intrCallback; - struct Task *task; - task = &gTasks[FindTaskIdByFunc(sub_808847C)]; - LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); - intrCallback(); - REG_BG0HOFS = task->data[1]; - REG_BG0VOFS = task->data[2]; -} - -void sub_80886F8(struct Task *task) -{ - task->data[1] -= 16; - task->data[3] += 16; -} - -#ifdef NONMATCHING -bool8 sub_8088708(struct Task *task) -{ - u16 i; - u16 srcOffs; - u16 dstOffs; - u16 *dest; - if (task->data[4] >= 32) - { - return TRUE; - } - dstOffs = (task->data[3] >> 3) & 0x1f; - if (dstOffs >= task->data[4]) - { - dstOffs = (32 - dstOffs) & 0x1f; - srcOffs = (32 - task->data[4]) & 0x1f; - dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]); - for (i=0; i<10; i++) - { - dest[dstOffs + i * 32] = gDarknessFieldMoveStreaksTilemap[srcOffs + i * 32] | 0xf000; - dest[((dstOffs + 1) & 0x1f) + i * 32] = gDarknessFieldMoveStreaksTilemap[((srcOffs + 1) & 0x1f) + i * 32] | 0xf000; - } - task->data[4] += 2; - } - return FALSE; -} -#else -__attribute__((naked)) -bool8 sub_8088708(struct Task *task) -{ - 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, 0x4\n" - "\tadds r5, r0, 0\n" - "\tldrh r2, [r5, 0x10]\n" - "\tmovs r1, 0x10\n" - "\tldrsh r0, [r5, r1]\n" - "\tcmp r0, 0x1F\n" - "\tble _08088724\n" - "\tmovs r0, 0x1\n" - "\tb _080887A8\n" - "_08088724:\n" - "\tldrh r0, [r5, 0xE]\n" - "\tlsls r0, 16\n" - "\tasrs r3, r0, 19\n" - "\tmovs r1, 0x1F\n" - "\tands r3, r1\n" - "\tmovs r4, 0x10\n" - "\tldrsh r0, [r5, r4]\n" - "\tcmp r3, r0\n" - "\tblt _080887A6\n" - "\tmovs r0, 0x20\n" - "\tsubs r3, r0, r3\n" - "\tands r3, r1\n" - "\tsubs r0, r2\n" - "\tmov r12, r0\n" - "\tmov r7, r12\n" - "\tands r7, r1\n" - "\tmov r12, r7\n" - "\tldrh r0, [r5, 0x20]\n" - "\tldr r1, _080887B8 @ =0x06000140\n" - "\tadds r1, r0\n" - "\tmov r8, r1\n" - "\tmovs r4, 0\n" - "\tldr r7, _080887BC @ =gDarknessFieldMoveStreaksTilemap\n" - "\tmov r10, r7\n" - "\tmovs r0, 0xF0\n" - "\tlsls r0, 8\n" - "\tmov r9, r0\n" - "\tadds r1, r3, 0x1\n" - "\tmovs r0, 0x1F\n" - "\tands r1, r0\n" - "\tstr r1, [sp]\n" - "\tmov r6, r12\n" - "\tadds r6, 0x1\n" - "\tands r6, r0\n" - "_08088768:\n" - "\tlsls r1, r4, 5\n" - "\tadds r2, r1, r3\n" - "\tlsls r2, 1\n" - "\tadd r2, r8\n" - "\tmov r7, r12\n" - "\tadds r0, r7, r1\n" - "\tlsls r0, 1\n" - "\tadd r0, r10\n" - "\tldrh r0, [r0]\n" - "\tmov r7, r9\n" - "\torrs r0, r7\n" - "\tstrh r0, [r2]\n" - "\tldr r0, [sp]\n" - "\tadds r2, r1, r0\n" - "\tlsls r2, 1\n" - "\tadd r2, r8\n" - "\tadds r1, r6, r1\n" - "\tlsls r1, 1\n" - "\tadd r1, r10\n" - "\tldrh r0, [r1]\n" - "\tmov r1, r9\n" - "\torrs r0, r1\n" - "\tstrh r0, [r2]\n" - "\tadds r0, r4, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r4, r0, 16\n" - "\tcmp r4, 0x9\n" - "\tbls _08088768\n" - "\tldrh r0, [r5, 0x10]\n" - "\tadds r0, 0x2\n" - "\tstrh r0, [r5, 0x10]\n" - "_080887A6:\n" - "\tmovs r0, 0\n" - "_080887A8:\n" - "\tadd sp, 0x4\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\n" - "\t.align 2, 0\n" - "_080887B8: .4byte 0x06000140\n" - "_080887BC: .4byte gDarknessFieldMoveStreaksTilemap"); -} -#endif - -bool8 sub_80887C0(struct Task *task) -{ - u16 i; - u16 dstOffs; - u16 *dest; - if (task->data[4] >= 32) - { - return TRUE; - } - dstOffs = task->data[3] >> 3; - if (dstOffs >= task->data[4]) - { - dstOffs = (task->data[1] >> 3) & 0x1f; - dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]); - for (i=0; i<10; i++) - { - dest[dstOffs + i * 32] = 0xf000; - dest[((dstOffs + 1) & 0x1f) + i * 32] = 0xf000; - } - task->data[4] += 2; - } - return FALSE; -} - -u8 sub_8088830(u32 a0, u32 a1, u32 a2) -{ - u16 v0; - u8 monSprite; - struct Sprite *sprite; - v0 = (a0 & 0x80000000) >> 16; - a0 &= 0x7fffffff; - monSprite = CreateMonSprite_FieldMove(a0, a1, a2, 0x140, 0x50, 0); - sprite = &gSprites[monSprite]; - sprite->callback = SpriteCallbackDummy; - sprite->oam.priority = 0; - sprite->data0 = a0; - sprite->data6 = v0; - return monSprite; -} - -void sub_80888D4(struct Sprite *); - -void sub_8088890(struct Sprite *sprite) -{ - if ((sprite->pos1.x -= 20) <= 0x78) - { - sprite->pos1.x = 0x78; - sprite->data1 = 30; - sprite->callback = sub_80888D4; - if (sprite->data6) - { - PlayCry2(sprite->data0, 0, 0x7d, 0xa); - } else - { - PlayCry1(sprite->data0, 0); - } - } -} - -void sub_80888F0(struct Sprite *); - -void sub_80888D4(struct Sprite *sprite) -{ - if ((--sprite->data1) == 0) - { - sprite->callback = sub_80888F0; - } -} - -void sub_80888F0(struct Sprite *sprite) -{ - if (sprite->pos1.x < -0x40) - { - sprite->data7 = 1; - } else - { - sprite->pos1.x -= 20; - } -} - -void sub_8088954(u8); - -u8 FldEff_UseSurf(void) -{ - u8 taskId; - taskId = CreateTask(sub_8088954, 0xff); - gTasks[taskId].data[15] = gUnknown_0202FF84[0]; - sav1_reset_battle_music_maybe(); - sub_8053FB0(0x016d); - return FALSE; -} - -void sub_8088954(u8 taskId) -{ - gUnknown_0839F3E4[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_8088984(struct Task *task) -{ - ScriptContext2_Enable(); - FreezeMapObjects(); - gPlayerAvatar.unk6 = 1; - SetPlayerAvatarStateMask(8); - PlayerGetDestCoords(&task->data[1], &task->data[2]); - MoveCoords(gMapObjects[gPlayerAvatar.mapObjectId].placeholder18, &task->data[1], &task->data[2]); - task->data[0]++; -} - -void sub_80889E4(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - sub_8059BF4(); - FieldObjectSetSpecialAnim(mapObject, 0x39); - task->data[0]++; - } -} - -void sub_8088A30(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(mapObject)) - { - gUnknown_0202FF84[0] = task->data[15] | 0x80000000; - FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - task->data[0]++; - } -} - -void sub_8088A78(struct Task *task) -{ - struct MapObject *mapObject; - if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) - { - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - 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; - mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_SURF_BLOB); - task->data[0]++; - } -} - -void sub_8088AF4(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - gPlayerAvatar.unk6 = 0; - gPlayerAvatar.flags &= 0xdf; - FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(mapObject->placeholder18)); - sub_8127ED0(mapObject->mapobj_unk_1A, 1); - UnfreezeMapObjects(); - ScriptContext2_Disable(); - FieldEffectActiveListRemove(FLDEFF_USE_SURF); - DestroyTask(FindTaskIdByFunc(sub_8088954)); - } -} - -void sub_8088BC4(struct Sprite *); - -u8 FldEff_NPCFlyOut(void) -{ - u8 spriteId; - struct Sprite *sprite; - spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0x78, 0, 1); - sprite = &gSprites[spriteId]; - sprite->oam.paletteNum = 0; - sprite->oam.priority = 1; - sprite->callback = sub_8088BC4; - sprite->data1 = gUnknown_0202FF84[0]; - PlaySE(SE_W019); - return spriteId; -} - -void sub_8088BC4(struct Sprite *sprite) -{ - struct Sprite *npcSprite; - sprite->pos2.x = Cos(sprite->data2, 0x8c); - sprite->pos2.y = Sin(sprite->data2, 0x48); - sprite->data2 = (sprite->data2 + 4) & 0xff; - if (sprite->data0) - { - npcSprite = &gSprites[sprite->data1]; - npcSprite->coordOffsetEnabled = 0; - npcSprite->pos1.x = sprite->pos1.x + sprite->pos2.x; - npcSprite->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; - npcSprite->pos2.x = 0; - npcSprite->pos2.y = 0; - } - if (sprite->data2 >= 0x80) - { - FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT); - } -} - -void sub_8088C70(u8); -extern void sub_8127EFC(u8, u8); -u8 sub_8088F60(void); -bool8 sub_8088FA4(u8); -void sub_8088FC0(u8); -void sub_8088FFC(u8, u8); -void sub_8089018(struct Sprite *); -void sub_80890D8(struct Sprite *); - -u8 FldEff_UseFly(void) -{ - u8 taskId; - taskId = CreateTask(sub_8088C70, 0xfe); - gTasks[taskId].data[1] = gUnknown_0202FF84[0]; - return 0; -} - -void sub_8088C70(u8 taskId) -{ - gUnknown_0839F3F8[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_8088CA0(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - task->data[15] = gPlayerAvatar.flags; - gPlayerAvatar.unk6 = 0x01; - SetPlayerAvatarStateMask(1); - sub_8059BF4(); - FieldObjectSetSpecialAnim(mapObject, 0x39); - task->data[0]++; - } -} - -void sub_8088CF8(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - task->data[0]++; - gUnknown_0202FF84[0] = task->data[1]; - FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - } -} - -void sub_8088D3C(struct Task *task) -{ - struct MapObject *mapObject; - if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) - { - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (task->data[15] & 0x08) - { - sub_8127ED0(mapObject->mapobj_unk_1A, 2); - sub_8127EFC(mapObject->mapobj_unk_1A, 0); - } - task->data[1] = sub_8088F60(); - task->data[0]++; - } -} - -void sub_8088D94(struct Task *task) -{ - if (sub_8088FA4(task->data[1])) - { - task->data[0]++; - task->data[2] = 16; - SetPlayerAvatarTransitionFlags(0x01); - FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], 0x02); - } -} - -void sub_8088DD8(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if ((task->data[2] == 0 || (--task->data[2]) == 0) && FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - task->data[0]++; - PlaySE(SE_W019); - sub_8088FC0(task->data[1]); - } -} - -void sub_8088E2C(struct Task *task) -{ - struct MapObject *mapObject; - if ((++task->data[2]) >= 8) - { - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(0x03)); - StartSpriteAnim(&gSprites[mapObject->spriteId], 0x16); - mapObject->mapobj_bit_12 = 1; - FieldObjectSetSpecialAnim(mapObject, 0x48); - if (task->data[15] & 0x08) - { - DestroySprite(&gSprites[mapObject->mapobj_unk_1A]); - } - task->data[0]++; - task->data[2] = 0; - } -} - -void sub_8088EB4(struct Task *task) -{ - struct MapObject *mapObject; - if ((++task->data[2]) >= 10) - { - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - FieldObjectClearAnimIfSpecialAnimActive(mapObject); - mapObject->mapobj_bit_12 = 0; - mapObject->mapobj_bit_22 = 0; - sub_8088FFC(task->data[1], mapObject->spriteId); - CameraObjectReset2(); - task->data[0]++; - } -} - -void sub_8088F10(struct Task *task) -{ - if (sub_8088FA4(task->data[1])) - { - fade_8080918(); - task->data[0]++; - } -} - -void sub_8088F30(struct Task *task) -{ - if (!gPaletteFade.active) - { - FieldEffectActiveListRemove(FLDEFF_USE_FLY); - DestroyTask(FindTaskIdByFunc(sub_8088C70)); - } -} - -u8 sub_8088F60(void) -{ - u8 spriteId; - struct Sprite *sprite; - spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0xff, 0xb4, 0x1); - sprite = &gSprites[spriteId]; - sprite->oam.paletteNum = 0; - sprite->oam.priority = 1; - sprite->callback = sub_8089018; - return spriteId; -} - -u8 sub_8088FA4(u8 spriteId) -{ - return gSprites[spriteId].data7; -} - -void sub_8088FC0(u8 spriteId) -{ - struct Sprite *sprite; - sprite = &gSprites[spriteId]; - sprite->callback = sub_80890D8; - sprite->pos1.x = 0x78; - sprite->pos1.y = 0x00; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - memset(&sprite->data0, 0, 8 * sizeof(u16) /* zero all data cells */); - sprite->data6 = 0x40; -} - -void sub_8088FFC(u8 a0, u8 a1) -{ - gSprites[a0].data6 = a1; -} - -void sub_8089018(struct Sprite *sprite) -{ - if (sprite->data7 == 0) - { - if (sprite->data0 == 0) - { - sprite->oam.affineMode = 3; - sprite->affineAnims = gSpriteAffineAnimTable_0839F44C; - InitSpriteAffineAnim(sprite); - StartSpriteAffineAnim(sprite, 0); - sprite->pos1.x = 0x76; - sprite->pos1.y = -0x30; - sprite->data0++; - sprite->data1 = 0x40; - sprite->data2 = 0x100; - } - sprite->data1 += (sprite->data2 >> 8); - sprite->pos2.x = Cos(sprite->data1, 0x78); - sprite->pos2.y = Sin(sprite->data1, 0x78); - if (sprite->data2 < 0x800) - { - sprite->data2 += 0x60; - } - if (sprite->data1 > 0x81) - { - sprite->data7++; - sprite->oam.affineMode = 0; - FreeOamMatrix(sprite->oam.matrixNum); - CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, 0); - } - } -} - -void sub_80890D8(struct Sprite *sprite) -{ - struct Sprite *sprite1; - sprite->pos2.x = Cos(sprite->data2, 0x8c); - sprite->pos2.y = Sin(sprite->data2, 0x48); - sprite->data2 = (sprite->data2 + 4) & 0xff; - if (sprite->data6 != 0x40) - { - sprite1 = &gSprites[sprite->data6]; - sprite1->coordOffsetEnabled = 0; - sprite1->pos1.x = sprite->pos1.x + sprite->pos2.x; - sprite1->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; - sprite1->pos2.x = 0; - sprite1->pos2.y = 0; - } - if (sprite->data2 >= 0x80) - { - sprite->data7 = 1; - } -} - -void sub_808914C(struct Sprite *sprite) -{ - if (sprite->data7 == 0) - { - if (sprite->data0 == 0) - { - sprite->oam.affineMode = 3; - sprite->affineAnims = gSpriteAffineAnimTable_0839F44C; - InitSpriteAffineAnim(sprite); - StartSpriteAffineAnim(sprite, 1); - sprite->pos1.x = 0x5e; - sprite->pos1.y = -0x20; - sprite->data0++; - sprite->data1 = 0xf0; - sprite->data2 = 0x800; - sprite->data4 = 0x80; - } - sprite->data1 += sprite->data2 >> 8; - sprite->data3 += sprite->data2 >> 8; - sprite->data1 &= 0xff; - sprite->pos2.x = Cos(sprite->data1, 0x20); - sprite->pos2.y = Sin(sprite->data1, 0x78); - if (sprite->data2 > 0x100) - { - sprite->data2 -= sprite->data4; - } - if (sprite->data4 < 0x100) - { - sprite->data4 += 24; - } - if (sprite->data2 < 0x100) - { - sprite->data2 = 0x100; - } - if (sprite->data3 >= 60) - { - sprite->data7++; - sprite->oam.affineMode = 0; - FreeOamMatrix(sprite->oam.matrixNum); - sprite->invisible = 1; - } - } -} - -void sub_8089230(u8 spriteId) -{ - sub_8088FC0(spriteId); - gSprites[spriteId].callback = sub_808914C; -} - -void sub_8089270(u8); - -u8 FldEff_FlyIn(void) -{ - CreateTask(sub_8089270, 0xfe); - return 0; -} - -void sub_8089270(u8 taskId) -{ - gUnknown_0839F454[gTasks[taskId].data[0]](&gTasks[taskId]); -} - -void sub_80892A0(struct Task *task) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - task->data[0]++; - task->data[2] = 17; - task->data[15] = gPlayerAvatar.flags; - gPlayerAvatar.unk6 = 1; - SetPlayerAvatarStateMask(0x01); - if (task->data[15] & 0x08) - { - sub_8127ED0(mapObject->mapobj_unk_1A, 0); - } - sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(0x3)); - CameraObjectReset2(); - FieldObjectTurn(mapObject, DIR_WEST); - StartSpriteAnim(&gSprites[mapObject->spriteId], 0x16); - mapObject->mapobj_bit_13 = 0; - task->data[1] = sub_8088F60(); - sub_8088FC0(task->data[1]); - sub_8088FFC(task->data[1], mapObject->spriteId); - } -} - -void sub_8089354(struct Task *task) -{ - struct MapObject *mapObject; - struct Sprite *sprite; - if (task->data[2] == 0 || (--task->data[2]) == 0) - { - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sprite = &gSprites[mapObject->spriteId]; - sub_8088FFC(task->data[1], 0x40); - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - task->data[0]++; - task->data[2] = 0; - } -} - -void sub_80893C0(struct Task *task) -{ - s16 unknown_0839F470[18]; - struct Sprite *sprite; - memcpy(unknown_0839F470, gUnknown_0839F470, sizeof gUnknown_0839F470); - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.y = unknown_0839F470[task->data[2]]; - if ((++task->data[2]) >= 18) - { - task->data[0]++; - } -} - -void sub_8089414(struct Task *task) -{ - struct MapObject *mapObject; - struct Sprite *sprite; - if (sub_8088FA4(task->data[1])) - { - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - sprite = &gSprites[mapObject->spriteId]; - mapObject->mapobj_bit_12 = 0; - sub_805C058(mapObject, mapObject->coords2.x, mapObject->coords2.y); - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->coordOffsetEnabled = 1; - sub_8059BF4(); - FieldObjectSetSpecialAnim(mapObject, 0x39); - task->data[0]++; - } -} - -void sub_808948C(struct Task *task) -{ - if (FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gPlayerAvatar.mapObjectId])) - { - task->data[0]++; - sub_8089230(task->data[1]); - } -} - -void sub_80894C4(struct Task *task) -{ - if (sub_8088FA4(task->data[1])) - { - DestroySprite(&gSprites[task->data[1]]); - task->data[0]++; - task->data[1] = 0x10; - } -} - -void fishE(struct Task *task) -{ - u8 state; - struct MapObject *mapObject; - if ((--task->data[1]) == 0) - { - mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; - state = 0; - if (task->data[15] & 0x08) - { - state = 3; - sub_8127ED0(mapObject->mapobj_unk_1A, 1); - } - sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(state)); - FieldObjectTurn(mapObject, DIR_SOUTH); - gPlayerAvatar.flags = task->data[15]; - gPlayerAvatar.unk6 = 0; - FieldEffectActiveListRemove(FLDEFF_FLY_IN); - DestroyTask(FindTaskIdByFunc(sub_8089270)); - } -} diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c deleted file mode 100644 index e614d899a..000000000 --- a/src/field_fadetransition.c +++ /dev/null @@ -1,626 +0,0 @@ -#include "global.h" -#include "cable_club.h" -#include "fieldmap.h" -#include "field_door.h" -#include "field_effect.h" -#include "field_fadetransition.h" -#include "field_map_obj.h" -#include "field_map_obj_helpers.h" -#include "field_player_avatar.h" -#include "field_special_scene.h" -#include "field_weather.h" -#include "fldeff_flash.h" -#include "link.h" -#include "main.h" -#include "map_obj_lock.h" -#include "metatile_behavior.h" -#include "palette.h" -#include "rom4.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "start_menu.h" -#include "task.h" - -void sub_8080B9C(u8); -void task_map_chg_seq_0807E20C(u8); -void task_map_chg_seq_0807E2CC(u8); -void task0A_fade_n_map_maybe(u8); -void sub_808115C(u8); - -void palette_bg_fill_white(void) -{ - CpuFastFill16(RGB_WHITE, gPlttBufferFaded, PLTT_SIZE); -} - -void palette_bg_fill_black(void) -{ - CpuFastFill16(RGB_BLACK, gPlttBufferFaded, PLTT_SIZE); -} - -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())) - { - case 0: - fade_screen(0, 0); - palette_bg_fill_black(); - break; - case 1: - fade_screen(2, 0); - palette_bg_fill_white(); - } -} - -void pal_fill_black(void) -{ - fade_screen(0, 0); - palette_bg_fill_black(); -} - -void fade_8080918(void) -{ - u8 light_level = sav1_map_get_light_level(); - switch (sub_810CDB8(light_level, warp1_get_mapheader()->mapType)) - { - case 0: - fade_screen(1, 0); - break; - case 1: - fade_screen(3, 0); - } -} - -void sub_8080958(u8 arg) -{ - sub_8059B88(!arg); -} - -void task0A_asap_script_env_2_enable_and_set_ctx_running(u8 taskID) -{ - if (sub_8080E70() == TRUE) - { - DestroyTask(taskID); - EnableBothScriptContexts(); - } -} - -void sub_8080990(void) -{ - ScriptContext2_Enable(); - sub_8053E90(); - pal_fill_black(); - CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10); -} - -void sub_80809B0(void) -{ - ScriptContext2_Enable(); - pal_fill_black(); - CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10); -} - -void task_mpl_807DD60(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - switch (task->data[0]) - { - case 0: - task->data[1] = sub_8083664(); - task->data[0]++; - break; - case 1: - if (gTasks[task->data[1]].isActive != TRUE) - { - pal_fill_for_map_transition(); - task->data[0]++; - } - break; - case 2: - if (sub_8080E70() == TRUE) - { - ScriptContext2_Disable(); - DestroyTask(taskId); - } - } -} - -void sub_8080A3C(void) -{ - ScriptContext2_Enable(); - sub_8053E90(); - palette_bg_fill_black(); - CreateTask(task_mpl_807DD60, 10); -} - -void sub_8080A5C(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - switch (task->data[0]) - { - case 0: - sub_80084A4(); - task->data[0]++; - break; - case 1: - if (sub_8007ECC()) - { - pal_fill_for_map_transition(); - task->data[0]++; - } - break; - case 2: - if (sub_8080E70() == TRUE) - { - sub_8007B14(); - ScriptContext2_Disable(); - DestroyTask(taskId); - } - } -} - -void sub_8080AC4(void) -{ - ScriptContext2_Enable(); - sub_8053E90(); - palette_bg_fill_black(); - CreateTask(sub_8080A5C, 10); -} - -void sub_8080AE4(void) -{ - s16 x, y; - u8 behavior; - TaskFunc func; - PlayerGetDestCoords(&x, &y); - behavior = MapGridGetMetatileBehaviorAt(x, y); - if (MetatileBehavior_IsDoor(behavior) == TRUE) - func = sub_8080B9C; - else if (MetatileBehavior_IsNonAnimDoor(behavior) == TRUE) - func = task_map_chg_seq_0807E20C; - else - func = task_map_chg_seq_0807E2CC; - CreateTask(func, 10); -} - -void mapldr_default(void) -{ - sub_8053E90(); - pal_fill_for_map_transition(); - sub_8080AE4(); - ScriptContext2_Enable(); -} - -void sub_8080B60(void) -{ - sub_8053E90(); - pal_fill_black(); - sub_8080AE4(); - ScriptContext2_Enable(); -} - -void sub_8080B78(void) -{ - sub_8053E90(); - pal_fill_for_map_transition(); - PlaySE(SE_TK_WARPOUT); - CreateTask(task_map_chg_seq_0807E2CC, 10); - ScriptContext2_Enable(); -} - -void sub_8080B9C(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - s16 *x = &task->data[2]; - s16 *y = &task->data[3]; - - switch (task->data[0]) - { - case 0: - sub_8080958(0); - FreezeMapObjects(); - PlayerGetDestCoords(x, y); - FieldSetDoorOpened(*x, *y); - task->data[0] = 1; - break; - case 1: - if (sub_8080E70()) - { - u8 mapObjId; - sub_8080958(1); - mapObjId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); - FieldObjectSetSpecialAnim(&gMapObjects[mapObjId], 8); - task->data[0] = 2; - } - break; - case 2: - if (walkrun_is_standing_still()) - { - u8 mapObjId; - task->data[1] = FieldAnimateDoorClose(*x, *y); - mapObjId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId]); - task->data[0] = 3; - } - break; - case 3: - if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) - { - UnfreezeMapObjects(); - task->data[0] = 4; - } - break; - case 4: - ScriptContext2_Disable(); - DestroyTask(taskId); - break; - } -} - -void task_map_chg_seq_0807E20C(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - s16 *x = &task->data[2]; - s16 *y = &task->data[3]; - - switch (task->data[0]) - { - case 0: - sub_8080958(0); - FreezeMapObjects(); - PlayerGetDestCoords(x, y); - task->data[0] = 1; - break; - case 1: - if (sub_8080E70()) - { - u8 mapObjId; - sub_8080958(1); - mapObjId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); - FieldObjectSetSpecialAnim(&gMapObjects[mapObjId], GetGoSpeed0AnimId(player_get_direction_lower_nybble())); - task->data[0] = 2; - } - break; - case 2: - if (walkrun_is_standing_still()) - { - UnfreezeMapObjects(); - task->data[0] = 3; - } - break; - case 3: - ScriptContext2_Disable(); - DestroyTask(taskId); - break; - } -} - -void task_map_chg_seq_0807E2CC(u8 taskId) -{ - switch (gTasks[taskId].data[0]) - { - case 0: - FreezeMapObjects(); - ScriptContext2_Enable(); - gTasks[taskId].data[0]++; - break; - case 1: - if (sub_8080E70()) - { - UnfreezeMapObjects(); - ScriptContext2_Disable(); - DestroyTask(taskId); - } - break; - } -} - -void sub_8080DC4(u8 taskId) -{ - if (sub_8080E70() == TRUE) - { - DestroyTask(taskId); - CreateTask(sub_80712B4, 80); - } -} - -void atk17_seteffectuser(void) -{ - pal_fill_black(); - CreateStartMenuTask(sub_8080DC4); - ScriptContext2_Enable(); -} - -void task_mpl_807E3C8(u8 taskId) -{ - if (sub_8080E70() == 1) - { - ScriptContext2_Disable(); - DestroyTask(taskId); - sub_8064E2C(); - } -} - -void sub_8080E28(void) -{ - ScriptContext2_Enable(); - pal_fill_black(); - CreateTask(task_mpl_807E3C8, 10); -} - -void sub_8080E44(void) -{ - ScriptContext2_Enable(); - sub_8053E90(); - pal_fill_black(); - CreateTask(task_mpl_807E3C8, 10); -} - -bool32 sub_8080E64(void) -{ - return gPaletteFade.active; -} - -bool32 sub_8080E70(void) -{ - if (sub_807D770() == TRUE) - return TRUE; - else - return FALSE; -} - -void sub_8080E88(void) -{ - ScriptContext2_Enable(); - sub_8053FF8(); - fade_8080918(); - PlayRainSoundEffect(); - PlaySE(SE_KAIDAN); - gFieldCallback = mapldr_default; - CreateTask(task0A_fade_n_map_maybe, 10); -} - -void sp13E_warp_to_last_warp(void) -{ - ScriptContext2_Enable(); - sub_8053FF8(); - fade_8080918(); - PlayRainSoundEffect(); - gFieldCallback = mapldr_default; - CreateTask(task0A_fade_n_map_maybe, 10); -} - -void sub_8080EF0(void) -{ - ScriptContext2_Enable(); - gFieldCallback = mapldr_default; - CreateTask(sub_808115C, 10); -} - -void sp13F_fall_to_last_warp(void) -{ - sp13E_warp_to_last_warp(); - gFieldCallback = sub_8086748; -} - -void sub_8080F2C(u8 metatileBehavior) -{ - ScriptContext2_Enable(); - sub_8086A2C(metatileBehavior, 10); -} - -void sub_8080F48(void) -{ - ScriptContext2_Enable(); - sub_80871B8(10); -} - -void sub_8080F58(void) -{ - ScriptContext2_Enable(); - sub_8087654(10); -} - -void sub_8080F68(void) -{ - ScriptContext2_Enable(); - sub_8053FF8(); - fade_8080918(); - PlaySE(SE_TK_WARPIN); - CreateTask(task0A_fade_n_map_maybe, 10); - gFieldCallback = sub_8080B78; -} - -void sub_8080F9C(void) -{ - ScriptContext2_Enable(); - fade_8080918(); - CreateTask(task0A_fade_n_map_maybe, 10); - gFieldCallback = sub_80C791C; -} - -void sub_8080FC4(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - switch (task->data[0]) - { - case 0: - ScriptContext2_Enable(); - task->data[0]++; - break; - case 1: - if (!sub_8080E64() && sub_8054034()) - { - task->data[0]++; - } - break; - case 2: - warp_in(); - SetMainCallback2(sub_8054588); - DestroyTask(taskId); - break; - } -} - -void DoCableClubWarp(void) -{ - ScriptContext2_Enable(); - sub_8053FF8(); - fade_8080918(); - PlaySE(SE_KAIDAN); - CreateTask(sub_8080FC4, 10); -} - -void sub_8081050(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - switch (data[0]) - { - case 0: - ClearLinkCallback_2(); - fade_screen(1, 0); - sub_8053FF8(); - PlaySE(SE_KAIDAN); - data[0]++; - break; - case 1: - if (!sub_8080E64() && sub_8054034()) - { - sub_800832C(); - data[0]++; - } - break; - case 2: - if (!gReceivedRemoteLinkPlayers) - { - warp_in(); - SetMainCallback2(CB2_LoadMap); - DestroyTask(taskId); - } - break; - } -} - -void sub_80810DC(void) -{ - CreateTask(sub_8081050, 10); -} - -void task0A_fade_n_map_maybe(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - switch (task->data[0]) - { - case 0: - FreezeMapObjects(); - ScriptContext2_Enable(); - task->data[0]++; - break; - case 1: - if (!sub_8080E64() && sub_8054034()) - { - task->data[0]++; - } - break; - case 2: - warp_in(); - SetMainCallback2(CB2_LoadMap); - DestroyTask(taskId); - break; - } -} - -void sub_808115C(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - s16 *x = &task->data[2]; - s16 *y = &task->data[3]; - - switch (task->data[0]) - { - case 0: - FreezeMapObjects(); - PlayerGetDestCoords(x, y); - PlaySE(sub_8058790(*x, *y - 1)); - task->data[1] = FieldAnimateDoorOpen(*x, *y - 1); - task->data[0] = 1; - break; - case 1: - if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) - { - u8 mapObjId; - mapObjId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); - FieldObjectClearAnimIfSpecialAnimActive(&gMapObjects[mapObjId]); - mapObjId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); - FieldObjectSetSpecialAnim(&gMapObjects[mapObjId], 9); - task->data[0] = 2; - } - break; - case 2: - if (walkrun_is_standing_still()) - { - u8 mapObjId; - task->data[1] = FieldAnimateDoorClose(*x, *y - 1); - mapObjId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId]); - sub_8080958(0); - task->data[0] = 3; - } - break; - case 3: - if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) - { - task->data[0] = 4; - } - break; - case 4: - sub_8053FF8(); - fade_8080918(); - PlayRainSoundEffect(); - task->data[0] = 0; - task->func = task0A_fade_n_map_maybe; - break; - } -} - -void sub_80812C8(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - switch (task->data[0]) - { - case 0: - FreezeMapObjects(); - ScriptContext2_Enable(); - task->data[0]++; - break; - case 1: - if (!sub_8080E64() && sub_8054034()) - { - task->data[0]++; - } - break; - case 2: - warp_in(); - SetMainCallback2(sub_8054534); - DestroyTask(taskId); - break; - } -} - -void sub_8081334(void) -{ - ScriptContext2_Enable(); - sub_8053FF8(); - fade_8080918(); - PlayRainSoundEffect(); - PlaySE(SE_KAIDAN); - gFieldCallback = sub_8080B60; - CreateTask(sub_80812C8, 10); -} diff --git a/src/field_ground_effect.c b/src/field_ground_effect.c deleted file mode 100644 index 42862d0ff..000000000 --- a/src/field_ground_effect.c +++ /dev/null @@ -1,240 +0,0 @@ -#include "global.h" -#include "field_ground_effect.h" -#include "fieldmap.h" -#include "metatile_behavior.h" - -extern u32 gUnknown_08376008[]; - -void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags) -{ - FieldObjectUpdateMetatileBehaviors(mapObj); - GetGroundEffectFlags_Reflection(mapObj, flags); - GetGroundEffectFlags_TallGrassOnSpawn(mapObj, flags); - GetGroundEffectFlags_LongGrassOnSpawn(mapObj, flags); - GetGroundEffectFlags_SandPile(mapObj, flags); - GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); - GetGroundEffectFlags_ShortGrass(mapObj, flags); - GetGroundEffectFlags_HotSprings(mapObj, flags); -} - -void GetAllGroundEffectFlags_OnBeginStep(struct MapObject *mapObj, u32 *flags) -{ - FieldObjectUpdateMetatileBehaviors(mapObj); - GetGroundEffectFlags_Reflection(mapObj, flags); - GetGroundEffectFlags_TallGrassOnBeginStep(mapObj, flags); - GetGroundEffectFlags_LongGrassOnBeginStep(mapObj, flags); - GetGroundEffectFlags_Tracks(mapObj, flags); - GetGroundEffectFlags_SandPile(mapObj, flags); - GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); - GetGroundEffectFlags_Puddle(mapObj, flags); - GetGroundEffectFlags_ShortGrass(mapObj, flags); - GetGroundEffectFlags_HotSprings(mapObj, flags); -} - -void GetAllGroundEffectFlags_OnFinishStep(struct MapObject *mapObj, u32 *flags) -{ - FieldObjectUpdateMetatileBehaviors(mapObj); - GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags); - GetGroundEffectFlags_SandPile(mapObj, flags); - GetGroundEffectFlags_Puddle(mapObj, flags); - GetGroundEffectFlags_Ripple(mapObj, flags); - GetGroundEffectFlags_ShortGrass(mapObj, flags); - GetGroundEffectFlags_HotSprings(mapObj, flags); - GetGroundEffectFlags_Seaweed(mapObj, flags); - GetGroundEffectFlags_JumpLanding(mapObj, flags); -} - -void FieldObjectUpdateMetatileBehaviors(struct MapObject *mapObj) -{ - mapObj->mapobj_unk_1F = MapGridGetMetatileBehaviorAt(mapObj->coords3.x, mapObj->coords3.y); - mapObj->mapobj_unk_1E = MapGridGetMetatileBehaviorAt(mapObj->coords2.x, mapObj->coords2.y); -} - -void GetGroundEffectFlags_Reflection(struct MapObject *mapObj, u32 *flags) -{ - u32 reflectionFlags[2] = { 0x00000020, 0x00000010 }; - u8 type = FieldObjectCheckForReflectiveSurface(mapObj); - - if (type) - { - if (!mapObj->mapobj_bit_17) - { - mapObj->mapobj_bit_17 = 0; - mapObj->mapobj_bit_17 = 1; - *flags |= reflectionFlags[type - 1]; - } - } - else - { - mapObj->mapobj_bit_17 = 0; - } -} - -void GetGroundEffectFlags_TallGrassOnSpawn(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsTallGrass(mapObj->mapobj_unk_1E)) - *flags |= 0x1; -} - -void GetGroundEffectFlags_TallGrassOnBeginStep(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsTallGrass(mapObj->mapobj_unk_1E)) - *flags |= 0x2; -} - -void GetGroundEffectFlags_LongGrassOnSpawn(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1E)) - *flags |= 0x4; -} - -void GetGroundEffectFlags_LongGrassOnBeginStep(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1E)) - *flags |= 0x8; -} - -void GetGroundEffectFlags_Tracks(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F)) - { - *flags |= 0x100; - } - else if (MetatileBehavior_IsSandOrDeepSand(mapObj->mapobj_unk_1F) - || MetatileBehavior_IsUnusedFootprintMetatile(mapObj->mapobj_unk_1F)) - { - *flags |= 0x80; - } -} - -void GetGroundEffectFlags_SandPile(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1E) - && MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F)) - { - if (!mapObj->mapobj_bit_20) - { - mapObj->mapobj_bit_20 = 0; - mapObj->mapobj_bit_20 = 1; - *flags |= 0x800; - } - } - else - { - mapObj->mapobj_bit_20 = 0; - } -} - -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 (!mapObj->mapobj_bit_19) - { - mapObj->mapobj_bit_19 = 0; - mapObj->mapobj_bit_19 = 1; - *flags |= 0x40; - } - } - else - { - mapObj->mapobj_bit_19 = 0; - } -} - -void GetGroundEffectFlags_Puddle(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1E) - && MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1F)) - { - *flags |= 0x400; - } -} - -void GetGroundEffectFlags_Ripple(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_HasRipples(mapObj->mapobj_unk_1E)) - *flags |= 0x200; -} - -void GetGroundEffectFlags_ShortGrass(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1E) - && MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1F)) - { - if (!mapObj->mapobj_bit_18) - { - mapObj->mapobj_bit_18 = 0; - mapObj->mapobj_bit_18 = 1; - *flags |= 0x20000; - } - } - else - { - mapObj->mapobj_bit_18 = 0; - } -} - -void GetGroundEffectFlags_HotSprings(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1E) - && MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1F)) - { - if (!mapObj->mapobj_bit_21) - { - mapObj->mapobj_bit_21 = 0; - mapObj->mapobj_bit_21 = 1; - *flags |= 0x40000; - } - } - else - { - mapObj->mapobj_bit_21 = 0; - } -} - -void GetGroundEffectFlags_Seaweed(struct MapObject *mapObj, u32 *flags) -{ - if (MetatileBehavior_IsSeaweed(mapObj->mapobj_unk_1E)) - *flags |= 0x80000; -} - -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) - { - u8 i; - - for (i = 0; i < 6; i++) - { - if (metatileFuncs[i](mapObj->mapobj_unk_1E)) - { - *flags |= jumpLandingFlags[i]; - return; - } - } - } -} diff --git a/src/field_map_obj.c b/src/field_map_obj.c deleted file mode 100644 index f60b1b233..000000000 --- a/src/field_map_obj.c +++ /dev/null @@ -1,8474 +0,0 @@ -#include "global.h" -#include "field_map_obj.h" -#include "berry.h" -#include "event_data.h" -#include "field_camera.h" -#include "field_effect.h" -#include "field_effect_helpers.h" -#include "field_ground_effect.h" -#include "field_map_obj_helpers.h" -#include "field_player_avatar.h" -#include "fieldmap.h" -#include "palette.h" -#include "rng.h" -#include "rom4.h" -#include "sprite.h" -#include "metatile_behavior.h" -#include "map_constants.h" -#include "map_object_constants.h" -#include "trainer_see.h" - -// rodata - -const u8 gUnknown_0830FD14[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0}; - -void ObjectCB_CameraObject(struct Sprite *sprite); -const struct SpriteTemplate gSpriteTemplate_830FD24 = {0, 0xFFFF, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, ObjectCB_CameraObject}; - -void CameraObject_0(struct Sprite *); -void CameraObject_1(struct Sprite *); -void CameraObject_2(struct Sprite *); -void (*const gCameraObjectFuncs[])(struct Sprite *) = { - CameraObject_0, - CameraObject_1, - CameraObject_2, -}; - -const u32 gMapObjectPic_BrendanNormal_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/00.4bpp"); -const u32 gMapObjectPic_BrendanNormal_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/01.4bpp"); -const u32 gMapObjectPic_BrendanNormal_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/02.4bpp"); -const u32 gMapObjectPic_BrendanNormal_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/03.4bpp"); -const u32 gMapObjectPic_BrendanNormal_4[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/04.4bpp"); -const u32 gMapObjectPic_BrendanNormal_5[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/05.4bpp"); -const u32 gMapObjectPic_BrendanNormal_6[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/06.4bpp"); -const u32 gMapObjectPic_BrendanNormal_7[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/07.4bpp"); -const u32 gMapObjectPic_BrendanNormal_8[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/08.4bpp"); -const u32 gMapObjectPic_BrendanNormal_9[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/09.4bpp"); -const u32 gMapObjectPic_BrendanNormal_10[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/10.4bpp"); -const u32 gMapObjectPic_BrendanNormal_11[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/11.4bpp"); -const u32 gMapObjectPic_BrendanNormal_12[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/12.4bpp"); -const u32 gMapObjectPic_BrendanNormal_13[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/13.4bpp"); -const u32 gMapObjectPic_BrendanNormal_14[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/14.4bpp"); -const u32 gMapObjectPic_BrendanNormal_15[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/15.4bpp"); -const u32 gMapObjectPic_BrendanNormal_16[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/16.4bpp"); -const u32 gMapObjectPic_BrendanNormal_17[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/normal/17.4bpp"); -const u16 gMapObjectPalette8[] = INCBIN_U16("graphics/map_objects/palettes/08.gbapal"); -const u16 NullPalette_8310F68[16] = {}; -const u16 NullPalette_8310F88[16] = {}; -const u16 NullPalette_8310FA8[16] = {}; -const u16 NullPalette_8310FC8[16] = {}; -const u16 NullPalette_8310FE8[16] = {}; -const u16 NullPalette_8311008[16] = {}; -const u16 NullPalette_8311028[16] = {}; -const u16 NullPalette_8311048[16] = {}; -const u16 NullPalette_8311068[16] = {}; -const u16 NullPalette_8311088[16] = {}; -const u16 NullPalette_83110A8[16] = {}; -const u16 NullPalette_83110C8[16] = {}; -const u16 NullPalette_83110E8[16] = {}; -const u16 NullPalette_8311108[16] = {}; -const u16 NullPalette_8311128[16] = {}; -const u16 gMapObjectPalette9[] = INCBIN_U16("graphics/map_objects/palettes/09.gbapal"); -const u16 gMapObjectPalette10[] = INCBIN_U16("graphics/map_objects/palettes/10.gbapal"); -const u32 gMapObjectPic_BrendanFieldMove_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/field_move/0.4bpp"); -const u32 gMapObjectPic_BrendanFieldMove_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/field_move/1.4bpp"); -const u32 gMapObjectPic_BrendanFieldMove_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/field_move/2.4bpp"); -const u32 gMapObjectPic_BrendanFieldMove_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/field_move/3.4bpp"); -const u32 gMapObjectPic_BrendanFieldMove_4[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/field_move/4.4bpp"); -const u32 gMapObjectPic_BrendanSurfing_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/surfing/0.4bpp"); -const u32 gMapObjectPic_BrendanSurfing_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/surfing/3.4bpp"); -const u32 gMapObjectPic_BrendanSurfing_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/surfing/1.4bpp"); -const u32 gMapObjectPic_BrendanSurfing_4[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/surfing/4.4bpp"); -const u32 gMapObjectPic_BrendanSurfing_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/surfing/2.4bpp"); -const u32 gMapObjectPic_BrendanSurfing_5[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/surfing/5.4bpp"); -const u32 gMapObjectPic_BrendanMachBike_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/0.4bpp"); -const u32 gMapObjectPic_BrendanMachBike_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/1.4bpp"); -const u32 gMapObjectPic_BrendanMachBike_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/2.4bpp"); -const u32 gMapObjectPic_BrendanMachBike_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/3.4bpp"); -const u32 gMapObjectPic_BrendanMachBike_4[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/4.4bpp"); -const u32 gMapObjectPic_BrendanMachBike_5[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/5.4bpp"); -const u32 gMapObjectPic_BrendanMachBike_6[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/6.4bpp"); -const u32 gMapObjectPic_BrendanMachBike_7[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/7.4bpp"); -const u32 gMapObjectPic_BrendanMachBike_8[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/mach_bike/8.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/00.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/01.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/02.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/03.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_4[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/04.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_5[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/05.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_6[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/06.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_7[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/07.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_8[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/08.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_9[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/09.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_10[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/10.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_11[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/11.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_12[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/12.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_13[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/13.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_14[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/14.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_15[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/15.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_16[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/16.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_17[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/17.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_18[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/18.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_19[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/19.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_20[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/20.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_21[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/21.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_22[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/22.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_23[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/23.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_24[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/24.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_25[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/25.4bpp"); -const u32 gMapObjectPic_BrendanAcroBike_26[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/acro_bike/26.4bpp"); -const u32 gMapObjectPic_BrendanFishing_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/00.4bpp"); -const u32 gMapObjectPic_BrendanFishing_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/01.4bpp"); -const u32 gMapObjectPic_BrendanFishing_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/02.4bpp"); -const u32 gMapObjectPic_BrendanFishing_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/03.4bpp"); -const u32 gMapObjectPic_BrendanFishing_4[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/04.4bpp"); -const u32 gMapObjectPic_BrendanFishing_5[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/05.4bpp"); -const u32 gMapObjectPic_BrendanFishing_6[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/06.4bpp"); -const u32 gMapObjectPic_BrendanFishing_7[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/07.4bpp"); -const u32 gMapObjectPic_BrendanFishing_8[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/08.4bpp"); -const u32 gMapObjectPic_BrendanFishing_9[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/09.4bpp"); -const u32 gMapObjectPic_BrendanFishing_10[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/10.4bpp"); -const u32 gMapObjectPic_BrendanFishing_11[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/fishing/11.4bpp"); -const u32 gMapObjectPic_BrendanWatering_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/watering/0.4bpp"); -const u32 gMapObjectPic_BrendanWatering_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/watering/3.4bpp"); -const u32 gMapObjectPic_BrendanWatering_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/watering/1.4bpp"); -const u32 gMapObjectPic_BrendanWatering_4[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/watering/4.4bpp"); -const u32 gMapObjectPic_BrendanWatering_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/watering/2.4bpp"); -const u32 gMapObjectPic_BrendanWatering_5[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/watering/5.4bpp"); -const u32 gMapObjectPic_BrendanDecorating[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/decorating.4bpp"); -const u32 gMapObjectPic_MayDecorating[] = INCBIN_U32("graphics/map_objects/pics/people/may/decorating.4bpp"); -const u32 gMapObjectPic_BrendanUnderwater_0[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/underwater/0.4bpp"); -const u32 gMapObjectPic_BrendanUnderwater_1[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/underwater/1.4bpp"); -const u32 gMapObjectPic_BrendanUnderwater_2[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/underwater/2.4bpp"); -const u32 gMapObjectPic_BrendanUnderwater_3[] = INCBIN_U32("graphics/map_objects/pics/people/brendan/underwater/3.4bpp"); -const u32 gMapObjectPic_MayUnderwater_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/underwater/0.4bpp"); -const u32 gMapObjectPic_MayUnderwater_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/underwater/1.4bpp"); -const u32 gMapObjectPic_MayUnderwater_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/underwater/2.4bpp"); -const u32 gMapObjectPic_MayUnderwater_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/underwater/3.4bpp"); -const u16 gMapObjectPalette11[] = INCBIN_U16("graphics/map_objects/palettes/11.gbapal"); -const u32 gMapObjectPic_MayNormal_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/00.4bpp"); -const u32 gMapObjectPic_MayNormal_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/01.4bpp"); -const u32 gMapObjectPic_MayNormal_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/02.4bpp"); -const u32 gMapObjectPic_MayNormal_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/03.4bpp"); -const u32 gMapObjectPic_MayNormal_4[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/04.4bpp"); -const u32 gMapObjectPic_MayNormal_5[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/05.4bpp"); -const u32 gMapObjectPic_MayNormal_6[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/06.4bpp"); -const u32 gMapObjectPic_MayNormal_7[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/07.4bpp"); -const u32 gMapObjectPic_MayNormal_8[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/08.4bpp"); -const u32 gMapObjectPic_MayNormal_9[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/09.4bpp"); -const u32 gMapObjectPic_MayNormal_10[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/10.4bpp"); -const u32 gMapObjectPic_MayNormal_11[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/11.4bpp"); -const u32 gMapObjectPic_MayNormal_12[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/12.4bpp"); -const u32 gMapObjectPic_MayNormal_13[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/13.4bpp"); -const u32 gMapObjectPic_MayNormal_14[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/14.4bpp"); -const u32 gMapObjectPic_MayNormal_15[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/15.4bpp"); -const u32 gMapObjectPic_MayNormal_16[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/16.4bpp"); -const u32 gMapObjectPic_MayNormal_17[] = INCBIN_U32("graphics/map_objects/pics/people/may/normal/17.4bpp"); -const u16 gMapObjectPalette17[] = INCBIN_U16("graphics/map_objects/palettes/17.gbapal"); -const u16 gMapObjectPalette18[] = INCBIN_U16("graphics/map_objects/palettes/18.gbapal"); -const u16 NullPalette_831B7E8[16] = {}; -const u16 NullPalette_831B808[16] = {}; -const u16 NullPalette_831B828[16] = {}; -const u16 NullPalette_831B848[16] = {}; -const u16 NullPalette_831B868[16] = {}; -const u16 NullPalette_831B888[16] = {}; -const u16 NullPalette_831B8A8[16] = {}; -const u16 NullPalette_831B8C8[16] = {}; -const u16 NullPalette_831B8E8[16] = {}; -const u16 NullPalette_831B908[16] = {}; -const u16 NullPalette_831B928[16] = {}; -const u16 NullPalette_831B948[16] = {}; -const u16 NullPalette_831B968[16] = {}; -const u16 NullPalette_831B988[16] = {}; -const u32 gMapObjectPic_MayMachBike_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/0.4bpp"); -const u32 gMapObjectPic_MayMachBike_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/1.4bpp"); -const u32 gMapObjectPic_MayMachBike_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/2.4bpp"); -const u32 gMapObjectPic_MayMachBike_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/3.4bpp"); -const u32 gMapObjectPic_MayMachBike_4[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/4.4bpp"); -const u32 gMapObjectPic_MayMachBike_5[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/5.4bpp"); -const u32 gMapObjectPic_MayMachBike_6[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/6.4bpp"); -const u32 gMapObjectPic_MayMachBike_7[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/7.4bpp"); -const u32 gMapObjectPic_MayMachBike_8[] = INCBIN_U32("graphics/map_objects/pics/people/may/mach_bike/8.4bpp"); -const u32 gMapObjectPic_MayAcroBike_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/00.4bpp"); -const u32 gMapObjectPic_MayAcroBike_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/01.4bpp"); -const u32 gMapObjectPic_MayAcroBike_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/02.4bpp"); -const u32 gMapObjectPic_MayAcroBike_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/03.4bpp"); -const u32 gMapObjectPic_MayAcroBike_4[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/04.4bpp"); -const u32 gMapObjectPic_MayAcroBike_5[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/05.4bpp"); -const u32 gMapObjectPic_MayAcroBike_6[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/06.4bpp"); -const u32 gMapObjectPic_MayAcroBike_7[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/07.4bpp"); -const u32 gMapObjectPic_MayAcroBike_8[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/08.4bpp"); -const u32 gMapObjectPic_MayAcroBike_9[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/09.4bpp"); -const u32 gMapObjectPic_MayAcroBike_10[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/10.4bpp"); -const u32 gMapObjectPic_MayAcroBike_11[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/11.4bpp"); -const u32 gMapObjectPic_MayAcroBike_12[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/12.4bpp"); -const u32 gMapObjectPic_MayAcroBike_13[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/13.4bpp"); -const u32 gMapObjectPic_MayAcroBike_14[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/14.4bpp"); -const u32 gMapObjectPic_MayAcroBike_15[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/15.4bpp"); -const u32 gMapObjectPic_MayAcroBike_16[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/16.4bpp"); -const u32 gMapObjectPic_MayAcroBike_17[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/17.4bpp"); -const u32 gMapObjectPic_MayAcroBike_18[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/18.4bpp"); -const u32 gMapObjectPic_MayAcroBike_19[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/19.4bpp"); -const u32 gMapObjectPic_MayAcroBike_20[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/20.4bpp"); -const u32 gMapObjectPic_MayAcroBike_21[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/21.4bpp"); -const u32 gMapObjectPic_MayAcroBike_22[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/22.4bpp"); -const u32 gMapObjectPic_MayAcroBike_23[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/23.4bpp"); -const u32 gMapObjectPic_MayAcroBike_24[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/24.4bpp"); -const u32 gMapObjectPic_MayAcroBike_25[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/25.4bpp"); -const u32 gMapObjectPic_MayAcroBike_26[] = INCBIN_U32("graphics/map_objects/pics/people/may/acro_bike/26.4bpp"); -const u32 gMapObjectPic_MaySurfing_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/surfing/0.4bpp"); -const u32 gMapObjectPic_MaySurfing_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/surfing/3.4bpp"); -const u32 gMapObjectPic_MaySurfing_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/surfing/1.4bpp"); -const u32 gMapObjectPic_MaySurfing_4[] = INCBIN_U32("graphics/map_objects/pics/people/may/surfing/4.4bpp"); -const u32 gMapObjectPic_MaySurfing_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/surfing/2.4bpp"); -const u32 gMapObjectPic_MaySurfing_5[] = INCBIN_U32("graphics/map_objects/pics/people/may/surfing/5.4bpp"); -const u32 gMapObjectPic_MayFieldMove_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/field_move/0.4bpp"); -const u32 gMapObjectPic_MayFieldMove_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/field_move/1.4bpp"); -const u32 gMapObjectPic_MayFieldMove_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/field_move/2.4bpp"); -const u32 gMapObjectPic_MayFieldMove_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/field_move/3.4bpp"); -const u32 gMapObjectPic_MayFieldMove_4[] = INCBIN_U32("graphics/map_objects/pics/people/may/field_move/4.4bpp"); -const u32 gMapObjectPic_MayFishing_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/00.4bpp"); -const u32 gMapObjectPic_MayFishing_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/01.4bpp"); -const u32 gMapObjectPic_MayFishing_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/02.4bpp"); -const u32 gMapObjectPic_MayFishing_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/03.4bpp"); -const u32 gMapObjectPic_MayFishing_4[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/04.4bpp"); -const u32 gMapObjectPic_MayFishing_5[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/05.4bpp"); -const u32 gMapObjectPic_MayFishing_6[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/06.4bpp"); -const u32 gMapObjectPic_MayFishing_7[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/07.4bpp"); -const u32 gMapObjectPic_MayFishing_8[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/08.4bpp"); -const u32 gMapObjectPic_MayFishing_9[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/09.4bpp"); -const u32 gMapObjectPic_MayFishing_10[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/10.4bpp"); -const u32 gMapObjectPic_MayFishing_11[] = INCBIN_U32("graphics/map_objects/pics/people/may/fishing/11.4bpp"); -const u32 gMapObjectPic_MayWatering_0[] = INCBIN_U32("graphics/map_objects/pics/people/may/watering/0.4bpp"); -const u32 gMapObjectPic_MayWatering_3[] = INCBIN_U32("graphics/map_objects/pics/people/may/watering/3.4bpp"); -const u32 gMapObjectPic_MayWatering_1[] = INCBIN_U32("graphics/map_objects/pics/people/may/watering/1.4bpp"); -const u32 gMapObjectPic_MayWatering_4[] = INCBIN_U32("graphics/map_objects/pics/people/may/watering/4.4bpp"); -const u32 gMapObjectPic_MayWatering_2[] = INCBIN_U32("graphics/map_objects/pics/people/may/watering/2.4bpp"); -const u32 gMapObjectPic_MayWatering_5[] = INCBIN_U32("graphics/map_objects/pics/people/may/watering/5.4bpp"); -const u16 gMapObjectPalette0[] = INCBIN_U16("graphics/map_objects/palettes/00.gbapal"); -const u16 gMapObjectPalette1[] = INCBIN_U16("graphics/map_objects/palettes/01.gbapal"); -const u16 gMapObjectPalette2[] = INCBIN_U16("graphics/map_objects/palettes/02.gbapal"); -const u16 gMapObjectPalette3[] = INCBIN_U16("graphics/map_objects/palettes/03.gbapal"); -const u16 gMapObjectPalette4[] = INCBIN_U16("graphics/map_objects/palettes/04.gbapal"); -const u16 gMapObjectPalette5[] = INCBIN_U16("graphics/map_objects/palettes/05.gbapal"); -const u16 gMapObjectPalette6[] = INCBIN_U16("graphics/map_objects/palettes/06.gbapal"); -const u16 gMapObjectPalette7[] = INCBIN_U16("graphics/map_objects/palettes/07.gbapal"); -const u32 gMapObjectPic_LittleBoy1_0[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/0.4bpp"); -const u32 gMapObjectPic_LittleBoy1_1[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/1.4bpp"); -const u32 gMapObjectPic_LittleBoy1_2[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/2.4bpp"); -const u32 gMapObjectPic_LittleBoy1_3[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/3.4bpp"); -const u32 gMapObjectPic_LittleBoy1_4[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/4.4bpp"); -const u32 gMapObjectPic_LittleBoy1_5[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/5.4bpp"); -const u32 gMapObjectPic_LittleBoy1_6[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/6.4bpp"); -const u32 gMapObjectPic_LittleBoy1_7[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/7.4bpp"); -const u32 gMapObjectPic_LittleBoy1_8[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_1/8.4bpp"); -const u32 gMapObjectPic_LittleGirl1_0[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/0.4bpp"); -const u32 gMapObjectPic_LittleGirl1_1[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/1.4bpp"); -const u32 gMapObjectPic_LittleGirl1_2[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/2.4bpp"); -const u32 gMapObjectPic_LittleGirl1_3[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/3.4bpp"); -const u32 gMapObjectPic_LittleGirl1_4[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/4.4bpp"); -const u32 gMapObjectPic_LittleGirl1_5[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/5.4bpp"); -const u32 gMapObjectPic_LittleGirl1_6[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/6.4bpp"); -const u32 gMapObjectPic_LittleGirl1_7[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/7.4bpp"); -const u32 gMapObjectPic_LittleGirl1_8[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_1/8.4bpp"); -const u32 gMapObjectPic_Boy1_0[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/0.4bpp"); -const u32 gMapObjectPic_Boy1_1[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/1.4bpp"); -const u32 gMapObjectPic_Boy1_2[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/2.4bpp"); -const u32 gMapObjectPic_Boy1_3[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/3.4bpp"); -const u32 gMapObjectPic_Boy1_4[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/4.4bpp"); -const u32 gMapObjectPic_Boy1_5[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/5.4bpp"); -const u32 gMapObjectPic_Boy1_6[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/6.4bpp"); -const u32 gMapObjectPic_Boy1_7[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/7.4bpp"); -const u32 gMapObjectPic_Boy1_8[] = INCBIN_U32("graphics/map_objects/pics/people/boy_1/8.4bpp"); -const u32 gMapObjectPic_Girl1_0[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/0.4bpp"); -const u32 gMapObjectPic_Girl1_1[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/1.4bpp"); -const u32 gMapObjectPic_Girl1_2[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/2.4bpp"); -const u32 gMapObjectPic_Girl1_3[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/3.4bpp"); -const u32 gMapObjectPic_Girl1_4[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/4.4bpp"); -const u32 gMapObjectPic_Girl1_5[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/5.4bpp"); -const u32 gMapObjectPic_Girl1_6[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/6.4bpp"); -const u32 gMapObjectPic_Girl1_7[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/7.4bpp"); -const u32 gMapObjectPic_Girl1_8[] = INCBIN_U32("graphics/map_objects/pics/people/girl_1/8.4bpp"); -const u32 gMapObjectPic_Boy2_0[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/0.4bpp"); -const u32 gMapObjectPic_Boy2_1[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/1.4bpp"); -const u32 gMapObjectPic_Boy2_2[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/2.4bpp"); -const u32 gMapObjectPic_Boy2_3[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/3.4bpp"); -const u32 gMapObjectPic_Boy2_4[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/4.4bpp"); -const u32 gMapObjectPic_Boy2_5[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/5.4bpp"); -const u32 gMapObjectPic_Boy2_6[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/6.4bpp"); -const u32 gMapObjectPic_Boy2_7[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/7.4bpp"); -const u32 gMapObjectPic_Boy2_8[] = INCBIN_U32("graphics/map_objects/pics/people/boy_2/8.4bpp"); -const u32 gMapObjectPic_Girl2_0[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/0.4bpp"); -const u32 gMapObjectPic_Girl2_1[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/1.4bpp"); -const u32 gMapObjectPic_Girl2_2[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/2.4bpp"); -const u32 gMapObjectPic_Girl2_3[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/3.4bpp"); -const u32 gMapObjectPic_Girl2_4[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/4.4bpp"); -const u32 gMapObjectPic_Girl2_5[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/5.4bpp"); -const u32 gMapObjectPic_Girl2_6[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/6.4bpp"); -const u32 gMapObjectPic_Girl2_7[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/7.4bpp"); -const u32 gMapObjectPic_Girl2_8[] = INCBIN_U32("graphics/map_objects/pics/people/girl_2/8.4bpp"); -const u32 gMapObjectPic_LittleBoy2_0[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/0.4bpp"); -const u32 gMapObjectPic_LittleBoy2_1[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/1.4bpp"); -const u32 gMapObjectPic_LittleBoy2_2[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/2.4bpp"); -const u32 gMapObjectPic_LittleBoy2_3[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/3.4bpp"); -const u32 gMapObjectPic_LittleBoy2_4[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/4.4bpp"); -const u32 gMapObjectPic_LittleBoy2_5[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/5.4bpp"); -const u32 gMapObjectPic_LittleBoy2_6[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/6.4bpp"); -const u32 gMapObjectPic_LittleBoy2_7[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/7.4bpp"); -const u32 gMapObjectPic_LittleBoy2_8[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_2/8.4bpp"); -const u32 gMapObjectPic_LittleGirl2_0[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/0.4bpp"); -const u32 gMapObjectPic_LittleGirl2_1[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/1.4bpp"); -const u32 gMapObjectPic_LittleGirl2_2[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/2.4bpp"); -const u32 gMapObjectPic_LittleGirl2_3[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/3.4bpp"); -const u32 gMapObjectPic_LittleGirl2_4[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/4.4bpp"); -const u32 gMapObjectPic_LittleGirl2_5[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/5.4bpp"); -const u32 gMapObjectPic_LittleGirl2_6[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/6.4bpp"); -const u32 gMapObjectPic_LittleGirl2_7[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/7.4bpp"); -const u32 gMapObjectPic_LittleGirl2_8[] = INCBIN_U32("graphics/map_objects/pics/people/little_girl_2/8.4bpp"); -const u32 gMapObjectPic_Boy3_0[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/0.4bpp"); -const u32 gMapObjectPic_Boy3_1[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/1.4bpp"); -const u32 gMapObjectPic_Boy3_2[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/2.4bpp"); -const u32 gMapObjectPic_Boy3_3[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/3.4bpp"); -const u32 gMapObjectPic_Boy3_4[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/4.4bpp"); -const u32 gMapObjectPic_Boy3_5[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/5.4bpp"); -const u32 gMapObjectPic_Boy3_6[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/6.4bpp"); -const u32 gMapObjectPic_Boy3_7[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/7.4bpp"); -const u32 gMapObjectPic_Boy3_8[] = INCBIN_U32("graphics/map_objects/pics/people/boy_3/8.4bpp"); -const u32 gMapObjectPic_Girl3_0[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/0.4bpp"); -const u32 gMapObjectPic_Girl3_1[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/1.4bpp"); -const u32 gMapObjectPic_Girl3_2[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/2.4bpp"); -const u32 gMapObjectPic_Girl3_3[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/3.4bpp"); -const u32 gMapObjectPic_Girl3_4[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/4.4bpp"); -const u32 gMapObjectPic_Girl3_5[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/5.4bpp"); -const u32 gMapObjectPic_Girl3_6[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/6.4bpp"); -const u32 gMapObjectPic_Girl3_7[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/7.4bpp"); -const u32 gMapObjectPic_Girl3_8[] = INCBIN_U32("graphics/map_objects/pics/people/girl_3/8.4bpp"); -const u32 gMapObjectPic_Boy4_0[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/0.4bpp"); -const u32 gMapObjectPic_Boy4_1[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/1.4bpp"); -const u32 gMapObjectPic_Boy4_2[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/2.4bpp"); -const u32 gMapObjectPic_Boy4_3[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/3.4bpp"); -const u32 gMapObjectPic_Boy4_4[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/4.4bpp"); -const u32 gMapObjectPic_Boy4_5[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/5.4bpp"); -const u32 gMapObjectPic_Boy4_6[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/6.4bpp"); -const u32 gMapObjectPic_Boy4_7[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/7.4bpp"); -const u32 gMapObjectPic_Boy4_8[] = INCBIN_U32("graphics/map_objects/pics/people/boy_4/8.4bpp"); -const u32 gMapObjectPic_Woman1_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/0.4bpp"); -const u32 gMapObjectPic_Woman1_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/1.4bpp"); -const u32 gMapObjectPic_Woman1_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/2.4bpp"); -const u32 gMapObjectPic_Woman1_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/3.4bpp"); -const u32 gMapObjectPic_Woman1_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/4.4bpp"); -const u32 gMapObjectPic_Woman1_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/5.4bpp"); -const u32 gMapObjectPic_Woman1_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/6.4bpp"); -const u32 gMapObjectPic_Woman1_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/7.4bpp"); -const u32 gMapObjectPic_Woman1_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_1/8.4bpp"); -const u32 gMapObjectPic_FatMan_0[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/0.4bpp"); -const u32 gMapObjectPic_FatMan_1[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/1.4bpp"); -const u32 gMapObjectPic_FatMan_2[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/2.4bpp"); -const u32 gMapObjectPic_FatMan_3[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/3.4bpp"); -const u32 gMapObjectPic_FatMan_4[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/4.4bpp"); -const u32 gMapObjectPic_FatMan_5[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/5.4bpp"); -const u32 gMapObjectPic_FatMan_6[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/6.4bpp"); -const u32 gMapObjectPic_FatMan_7[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/7.4bpp"); -const u32 gMapObjectPic_FatMan_8[] = INCBIN_U32("graphics/map_objects/pics/people/fat_man/8.4bpp"); -const u32 gMapObjectPic_Woman2_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/0.4bpp"); -const u32 gMapObjectPic_Woman2_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/1.4bpp"); -const u32 gMapObjectPic_Woman2_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/2.4bpp"); -const u32 gMapObjectPic_Woman2_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/3.4bpp"); -const u32 gMapObjectPic_Woman2_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/4.4bpp"); -const u32 gMapObjectPic_Woman2_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/5.4bpp"); -const u32 gMapObjectPic_Woman2_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/6.4bpp"); -const u32 gMapObjectPic_Woman2_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/7.4bpp"); -const u32 gMapObjectPic_Woman2_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_2/8.4bpp"); -const u32 gMapObjectPic_Man1_0[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/0.4bpp"); -const u32 gMapObjectPic_Man1_1[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/1.4bpp"); -const u32 gMapObjectPic_Man1_2[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/2.4bpp"); -const u32 gMapObjectPic_Man1_3[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/3.4bpp"); -const u32 gMapObjectPic_Man1_4[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/4.4bpp"); -const u32 gMapObjectPic_Man1_5[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/5.4bpp"); -const u32 gMapObjectPic_Man1_6[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/6.4bpp"); -const u32 gMapObjectPic_Man1_7[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/7.4bpp"); -const u32 gMapObjectPic_Man1_8[] = INCBIN_U32("graphics/map_objects/pics/people/man_1/8.4bpp"); -const u32 gMapObjectPic_Woman3_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/0.4bpp"); -const u32 gMapObjectPic_Woman3_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/1.4bpp"); -const u32 gMapObjectPic_Woman3_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/2.4bpp"); -const u32 gMapObjectPic_Woman3_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/3.4bpp"); -const u32 gMapObjectPic_Woman3_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/4.4bpp"); -const u32 gMapObjectPic_Woman3_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/5.4bpp"); -const u32 gMapObjectPic_Woman3_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/6.4bpp"); -const u32 gMapObjectPic_Woman3_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/7.4bpp"); -const u32 gMapObjectPic_Woman3_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_3/8.4bpp"); -const u32 gMapObjectPic_OldMan1_0[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/0.4bpp"); -const u32 gMapObjectPic_OldMan1_1[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/1.4bpp"); -const u32 gMapObjectPic_OldMan1_2[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/2.4bpp"); -const u32 gMapObjectPic_OldMan1_3[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/3.4bpp"); -const u32 gMapObjectPic_OldMan1_4[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/4.4bpp"); -const u32 gMapObjectPic_OldMan1_5[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/5.4bpp"); -const u32 gMapObjectPic_OldMan1_6[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/6.4bpp"); -const u32 gMapObjectPic_OldMan1_7[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/7.4bpp"); -const u32 gMapObjectPic_OldMan1_8[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_1/8.4bpp"); -const u32 gMapObjectPic_OldWoman1_0[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/0.4bpp"); -const u32 gMapObjectPic_OldWoman1_1[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/1.4bpp"); -const u32 gMapObjectPic_OldWoman1_2[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/2.4bpp"); -const u32 gMapObjectPic_OldWoman1_3[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/3.4bpp"); -const u32 gMapObjectPic_OldWoman1_4[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/4.4bpp"); -const u32 gMapObjectPic_OldWoman1_5[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/5.4bpp"); -const u32 gMapObjectPic_OldWoman1_6[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/6.4bpp"); -const u32 gMapObjectPic_OldWoman1_7[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/7.4bpp"); -const u32 gMapObjectPic_OldWoman1_8[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_1/8.4bpp"); -const u32 gMapObjectPic_Man2_0[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/0.4bpp"); -const u32 gMapObjectPic_Man2_1[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/1.4bpp"); -const u32 gMapObjectPic_Man2_2[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/2.4bpp"); -const u32 gMapObjectPic_Man2_3[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/3.4bpp"); -const u32 gMapObjectPic_Man2_4[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/4.4bpp"); -const u32 gMapObjectPic_Man2_5[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/5.4bpp"); -const u32 gMapObjectPic_Man2_6[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/6.4bpp"); -const u32 gMapObjectPic_Man2_7[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/7.4bpp"); -const u32 gMapObjectPic_Man2_8[] = INCBIN_U32("graphics/map_objects/pics/people/man_2/8.4bpp"); -const u32 gMapObjectPic_Woman4_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/0.4bpp"); -const u32 gMapObjectPic_Woman4_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/1.4bpp"); -const u32 gMapObjectPic_Woman4_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/2.4bpp"); -const u32 gMapObjectPic_Woman4_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/3.4bpp"); -const u32 gMapObjectPic_Woman4_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/4.4bpp"); -const u32 gMapObjectPic_Woman4_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/5.4bpp"); -const u32 gMapObjectPic_Woman4_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/6.4bpp"); -const u32 gMapObjectPic_Woman4_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/7.4bpp"); -const u32 gMapObjectPic_Woman4_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_4/8.4bpp"); -const u32 gMapObjectPic_Man3_0[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/0.4bpp"); -const u32 gMapObjectPic_Man3_1[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/1.4bpp"); -const u32 gMapObjectPic_Man3_2[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/2.4bpp"); -const u32 gMapObjectPic_Man3_3[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/3.4bpp"); -const u32 gMapObjectPic_Man3_4[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/4.4bpp"); -const u32 gMapObjectPic_Man3_5[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/5.4bpp"); -const u32 gMapObjectPic_Man3_6[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/6.4bpp"); -const u32 gMapObjectPic_Man3_7[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/7.4bpp"); -const u32 gMapObjectPic_Man3_8[] = INCBIN_U32("graphics/map_objects/pics/people/man_3/8.4bpp"); -const u32 gMapObjectPic_Woman5_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/0.4bpp"); -const u32 gMapObjectPic_Woman5_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/1.4bpp"); -const u32 gMapObjectPic_Woman5_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/2.4bpp"); -const u32 gMapObjectPic_Woman5_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/3.4bpp"); -const u32 gMapObjectPic_Woman5_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/4.4bpp"); -const u32 gMapObjectPic_Woman5_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/5.4bpp"); -const u32 gMapObjectPic_Woman5_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/6.4bpp"); -const u32 gMapObjectPic_Woman5_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/7.4bpp"); -const u32 gMapObjectPic_Woman5_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_5/8.4bpp"); -const u32 gMapObjectPic_Cook_0[] = INCBIN_U32("graphics/map_objects/pics/people/cook/0.4bpp"); -const u32 gMapObjectPic_Cook_1[] = INCBIN_U32("graphics/map_objects/pics/people/cook/1.4bpp"); -const u32 gMapObjectPic_Cook_2[] = INCBIN_U32("graphics/map_objects/pics/people/cook/2.4bpp"); -const u32 gMapObjectPic_Woman6_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/0.4bpp"); -const u32 gMapObjectPic_Woman6_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/1.4bpp"); -const u32 gMapObjectPic_Woman6_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/2.4bpp"); -const u32 gMapObjectPic_Woman6_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/3.4bpp"); -const u32 gMapObjectPic_Woman6_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/4.4bpp"); -const u32 gMapObjectPic_Woman6_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/5.4bpp"); -const u32 gMapObjectPic_Woman6_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/6.4bpp"); -const u32 gMapObjectPic_Woman6_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/7.4bpp"); -const u32 gMapObjectPic_Woman6_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_6/8.4bpp"); -const u32 gMapObjectPic_OldMan2_0[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_2/0.4bpp"); -const u32 gMapObjectPic_OldMan2_1[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_2/1.4bpp"); -const u32 gMapObjectPic_OldMan2_2[] = INCBIN_U32("graphics/map_objects/pics/people/old_man_2/2.4bpp"); -const u32 gMapObjectPic_OldWoman2_0[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_2/0.4bpp"); -const u32 gMapObjectPic_OldWoman2_1[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_2/1.4bpp"); -const u32 gMapObjectPic_OldWoman2_2[] = INCBIN_U32("graphics/map_objects/pics/people/old_woman_2/2.4bpp"); -const u32 gMapObjectPic_Camper_0[] = INCBIN_U32("graphics/map_objects/pics/people/camper/0.4bpp"); -const u32 gMapObjectPic_Camper_1[] = INCBIN_U32("graphics/map_objects/pics/people/camper/1.4bpp"); -const u32 gMapObjectPic_Camper_2[] = INCBIN_U32("graphics/map_objects/pics/people/camper/2.4bpp"); -const u32 gMapObjectPic_Camper_3[] = INCBIN_U32("graphics/map_objects/pics/people/camper/3.4bpp"); -const u32 gMapObjectPic_Camper_4[] = INCBIN_U32("graphics/map_objects/pics/people/camper/4.4bpp"); -const u32 gMapObjectPic_Camper_5[] = INCBIN_U32("graphics/map_objects/pics/people/camper/5.4bpp"); -const u32 gMapObjectPic_Camper_6[] = INCBIN_U32("graphics/map_objects/pics/people/camper/6.4bpp"); -const u32 gMapObjectPic_Camper_7[] = INCBIN_U32("graphics/map_objects/pics/people/camper/7.4bpp"); -const u32 gMapObjectPic_Camper_8[] = INCBIN_U32("graphics/map_objects/pics/people/camper/8.4bpp"); -const u32 gMapObjectPic_Picnicker_0[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/0.4bpp"); -const u32 gMapObjectPic_Picnicker_1[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/1.4bpp"); -const u32 gMapObjectPic_Picnicker_2[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/2.4bpp"); -const u32 gMapObjectPic_Picnicker_3[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/3.4bpp"); -const u32 gMapObjectPic_Picnicker_4[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/4.4bpp"); -const u32 gMapObjectPic_Picnicker_5[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/5.4bpp"); -const u32 gMapObjectPic_Picnicker_6[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/6.4bpp"); -const u32 gMapObjectPic_Picnicker_7[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/7.4bpp"); -const u32 gMapObjectPic_Picnicker_8[] = INCBIN_U32("graphics/map_objects/pics/people/picnicker/8.4bpp"); -const u32 gMapObjectPic_Man4_0[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/0.4bpp"); -const u32 gMapObjectPic_Man4_1[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/1.4bpp"); -const u32 gMapObjectPic_Man4_2[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/2.4bpp"); -const u32 gMapObjectPic_Man4_3[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/3.4bpp"); -const u32 gMapObjectPic_Man4_4[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/4.4bpp"); -const u32 gMapObjectPic_Man4_5[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/5.4bpp"); -const u32 gMapObjectPic_Man4_6[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/6.4bpp"); -const u32 gMapObjectPic_Man4_7[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/7.4bpp"); -const u32 gMapObjectPic_Man4_8[] = INCBIN_U32("graphics/map_objects/pics/people/man_4/8.4bpp"); -const u32 gMapObjectPic_Woman7_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/0.4bpp"); -const u32 gMapObjectPic_Woman7_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/1.4bpp"); -const u32 gMapObjectPic_Woman7_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/2.4bpp"); -const u32 gMapObjectPic_Woman7_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/3.4bpp"); -const u32 gMapObjectPic_Woman7_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/4.4bpp"); -const u32 gMapObjectPic_Woman7_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/5.4bpp"); -const u32 gMapObjectPic_Woman7_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/6.4bpp"); -const u32 gMapObjectPic_Woman7_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/7.4bpp"); -const u32 gMapObjectPic_Woman7_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_7/8.4bpp"); -const u32 gMapObjectPic_Youngster_0[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/0.4bpp"); -const u32 gMapObjectPic_Youngster_1[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/1.4bpp"); -const u32 gMapObjectPic_Youngster_2[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/2.4bpp"); -const u32 gMapObjectPic_Youngster_3[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/3.4bpp"); -const u32 gMapObjectPic_Youngster_4[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/4.4bpp"); -const u32 gMapObjectPic_Youngster_5[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/5.4bpp"); -const u32 gMapObjectPic_Youngster_6[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/6.4bpp"); -const u32 gMapObjectPic_Youngster_7[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/7.4bpp"); -const u32 gMapObjectPic_Youngster_8[] = INCBIN_U32("graphics/map_objects/pics/people/youngster/8.4bpp"); -const u32 gMapObjectPic_BugCatcher_0[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/0.4bpp"); -const u32 gMapObjectPic_BugCatcher_1[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/1.4bpp"); -const u32 gMapObjectPic_BugCatcher_2[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/2.4bpp"); -const u32 gMapObjectPic_BugCatcher_3[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/3.4bpp"); -const u32 gMapObjectPic_BugCatcher_4[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/4.4bpp"); -const u32 gMapObjectPic_BugCatcher_5[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/5.4bpp"); -const u32 gMapObjectPic_BugCatcher_6[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/6.4bpp"); -const u32 gMapObjectPic_BugCatcher_7[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/7.4bpp"); -const u32 gMapObjectPic_BugCatcher_8[] = INCBIN_U32("graphics/map_objects/pics/people/bug_catcher/8.4bpp"); -const u32 gMapObjectPic_PsychicM_0[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/0.4bpp"); -const u32 gMapObjectPic_PsychicM_1[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/1.4bpp"); -const u32 gMapObjectPic_PsychicM_2[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/2.4bpp"); -const u32 gMapObjectPic_PsychicM_3[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/3.4bpp"); -const u32 gMapObjectPic_PsychicM_4[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/4.4bpp"); -const u32 gMapObjectPic_PsychicM_5[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/5.4bpp"); -const u32 gMapObjectPic_PsychicM_6[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/6.4bpp"); -const u32 gMapObjectPic_PsychicM_7[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/7.4bpp"); -const u32 gMapObjectPic_PsychicM_8[] = INCBIN_U32("graphics/map_objects/pics/people/psychic_m/8.4bpp"); -const u32 gMapObjectPic_SchoolKidM_0[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/0.4bpp"); -const u32 gMapObjectPic_SchoolKidM_1[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/1.4bpp"); -const u32 gMapObjectPic_SchoolKidM_2[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/2.4bpp"); -const u32 gMapObjectPic_SchoolKidM_3[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/3.4bpp"); -const u32 gMapObjectPic_SchoolKidM_4[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/4.4bpp"); -const u32 gMapObjectPic_SchoolKidM_5[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/5.4bpp"); -const u32 gMapObjectPic_SchoolKidM_6[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/6.4bpp"); -const u32 gMapObjectPic_SchoolKidM_7[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/7.4bpp"); -const u32 gMapObjectPic_SchoolKidM_8[] = INCBIN_U32("graphics/map_objects/pics/people/school_kid_m/8.4bpp"); -const u32 gMapObjectPic_Maniac_0[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/0.4bpp"); -const u32 gMapObjectPic_Maniac_1[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/1.4bpp"); -const u32 gMapObjectPic_Maniac_2[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/2.4bpp"); -const u32 gMapObjectPic_Maniac_3[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/3.4bpp"); -const u32 gMapObjectPic_Maniac_4[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/4.4bpp"); -const u32 gMapObjectPic_Maniac_5[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/5.4bpp"); -const u32 gMapObjectPic_Maniac_6[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/6.4bpp"); -const u32 gMapObjectPic_Maniac_7[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/7.4bpp"); -const u32 gMapObjectPic_Maniac_8[] = INCBIN_U32("graphics/map_objects/pics/people/maniac/8.4bpp"); -const u32 gMapObjectPic_HexManiac_0[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/0.4bpp"); -const u32 gMapObjectPic_HexManiac_1[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/1.4bpp"); -const u32 gMapObjectPic_HexManiac_2[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/2.4bpp"); -const u32 gMapObjectPic_HexManiac_3[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/3.4bpp"); -const u32 gMapObjectPic_HexManiac_4[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/4.4bpp"); -const u32 gMapObjectPic_HexManiac_5[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/5.4bpp"); -const u32 gMapObjectPic_HexManiac_6[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/6.4bpp"); -const u32 gMapObjectPic_HexManiac_7[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/7.4bpp"); -const u32 gMapObjectPic_HexManiac_8[] = INCBIN_U32("graphics/map_objects/pics/people/hex_maniac/8.4bpp"); -const u32 gMapObjectPic_Woman8_0[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/0.4bpp"); -const u32 gMapObjectPic_Woman8_1[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/1.4bpp"); -const u32 gMapObjectPic_Woman8_2[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/2.4bpp"); -const u32 gMapObjectPic_Woman8_3[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/3.4bpp"); -const u32 gMapObjectPic_Woman8_4[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/4.4bpp"); -const u32 gMapObjectPic_Woman8_5[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/5.4bpp"); -const u32 gMapObjectPic_Woman8_6[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/6.4bpp"); -const u32 gMapObjectPic_Woman8_7[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/7.4bpp"); -const u32 gMapObjectPic_Woman8_8[] = INCBIN_U32("graphics/map_objects/pics/people/woman_8/8.4bpp"); -const u32 gMapObjectPic_SwimmerM_0[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/0.4bpp"); -const u32 gMapObjectPic_SwimmerM_1[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/1.4bpp"); -const u32 gMapObjectPic_SwimmerM_2[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/2.4bpp"); -const u32 gMapObjectPic_SwimmerM_3[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/3.4bpp"); -const u32 gMapObjectPic_SwimmerM_4[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/4.4bpp"); -const u32 gMapObjectPic_SwimmerM_5[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/5.4bpp"); -const u32 gMapObjectPic_SwimmerM_6[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/6.4bpp"); -const u32 gMapObjectPic_SwimmerM_7[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/7.4bpp"); -const u32 gMapObjectPic_SwimmerM_8[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_m/8.4bpp"); -const u32 gMapObjectPic_SwimmerF_0[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/0.4bpp"); -const u32 gMapObjectPic_SwimmerF_1[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/1.4bpp"); -const u32 gMapObjectPic_SwimmerF_2[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/2.4bpp"); -const u32 gMapObjectPic_SwimmerF_3[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/3.4bpp"); -const u32 gMapObjectPic_SwimmerF_4[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/4.4bpp"); -const u32 gMapObjectPic_SwimmerF_5[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/5.4bpp"); -const u32 gMapObjectPic_SwimmerF_6[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/6.4bpp"); -const u32 gMapObjectPic_SwimmerF_7[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/7.4bpp"); -const u32 gMapObjectPic_SwimmerF_8[] = INCBIN_U32("graphics/map_objects/pics/people/swimmer_f/8.4bpp"); -const u32 gMapObjectPic_BlackBelt_0[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/0.4bpp"); -const u32 gMapObjectPic_BlackBelt_1[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/1.4bpp"); -const u32 gMapObjectPic_BlackBelt_2[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/2.4bpp"); -const u32 gMapObjectPic_BlackBelt_3[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/3.4bpp"); -const u32 gMapObjectPic_BlackBelt_4[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/4.4bpp"); -const u32 gMapObjectPic_BlackBelt_5[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/5.4bpp"); -const u32 gMapObjectPic_BlackBelt_6[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/6.4bpp"); -const u32 gMapObjectPic_BlackBelt_7[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/7.4bpp"); -const u32 gMapObjectPic_BlackBelt_8[] = INCBIN_U32("graphics/map_objects/pics/people/black_belt/8.4bpp"); -const u32 gMapObjectPic_Beauty_0[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/0.4bpp"); -const u32 gMapObjectPic_Beauty_1[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/1.4bpp"); -const u32 gMapObjectPic_Beauty_2[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/2.4bpp"); -const u32 gMapObjectPic_Beauty_3[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/3.4bpp"); -const u32 gMapObjectPic_Beauty_4[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/4.4bpp"); -const u32 gMapObjectPic_Beauty_5[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/5.4bpp"); -const u32 gMapObjectPic_Beauty_6[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/6.4bpp"); -const u32 gMapObjectPic_Beauty_7[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/7.4bpp"); -const u32 gMapObjectPic_Beauty_8[] = INCBIN_U32("graphics/map_objects/pics/people/beauty/8.4bpp"); -const u32 gMapObjectPic_Scientist1_0[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/0.4bpp"); -const u32 gMapObjectPic_Scientist1_1[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/1.4bpp"); -const u32 gMapObjectPic_Scientist1_2[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/2.4bpp"); -const u32 gMapObjectPic_Scientist1_3[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/3.4bpp"); -const u32 gMapObjectPic_Scientist1_4[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/4.4bpp"); -const u32 gMapObjectPic_Scientist1_5[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/5.4bpp"); -const u32 gMapObjectPic_Scientist1_6[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/6.4bpp"); -const u32 gMapObjectPic_Scientist1_7[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/7.4bpp"); -const u32 gMapObjectPic_Scientist1_8[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_1/8.4bpp"); -const u32 gMapObjectPic_Lass_0[] = INCBIN_U32("graphics/map_objects/pics/people/lass/0.4bpp"); -const u32 gMapObjectPic_Lass_1[] = INCBIN_U32("graphics/map_objects/pics/people/lass/1.4bpp"); -const u32 gMapObjectPic_Lass_2[] = INCBIN_U32("graphics/map_objects/pics/people/lass/2.4bpp"); -const u32 gMapObjectPic_Lass_3[] = INCBIN_U32("graphics/map_objects/pics/people/lass/3.4bpp"); -const u32 gMapObjectPic_Lass_4[] = INCBIN_U32("graphics/map_objects/pics/people/lass/4.4bpp"); -const u32 gMapObjectPic_Lass_5[] = INCBIN_U32("graphics/map_objects/pics/people/lass/5.4bpp"); -const u32 gMapObjectPic_Lass_6[] = INCBIN_U32("graphics/map_objects/pics/people/lass/6.4bpp"); -const u32 gMapObjectPic_Lass_7[] = INCBIN_U32("graphics/map_objects/pics/people/lass/7.4bpp"); -const u32 gMapObjectPic_Lass_8[] = INCBIN_U32("graphics/map_objects/pics/people/lass/8.4bpp"); -const u32 gMapObjectPic_Gentleman_0[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/0.4bpp"); -const u32 gMapObjectPic_Gentleman_1[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/1.4bpp"); -const u32 gMapObjectPic_Gentleman_2[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/2.4bpp"); -const u32 gMapObjectPic_Gentleman_3[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/3.4bpp"); -const u32 gMapObjectPic_Gentleman_4[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/4.4bpp"); -const u32 gMapObjectPic_Gentleman_5[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/5.4bpp"); -const u32 gMapObjectPic_Gentleman_6[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/6.4bpp"); -const u32 gMapObjectPic_Gentleman_7[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/7.4bpp"); -const u32 gMapObjectPic_Gentleman_8[] = INCBIN_U32("graphics/map_objects/pics/people/gentleman/8.4bpp"); -const u32 gMapObjectPic_Sailor_0[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/0.4bpp"); -const u32 gMapObjectPic_Sailor_1[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/1.4bpp"); -const u32 gMapObjectPic_Sailor_2[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/2.4bpp"); -const u32 gMapObjectPic_Sailor_3[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/3.4bpp"); -const u32 gMapObjectPic_Sailor_4[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/4.4bpp"); -const u32 gMapObjectPic_Sailor_5[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/5.4bpp"); -const u32 gMapObjectPic_Sailor_6[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/6.4bpp"); -const u32 gMapObjectPic_Sailor_7[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/7.4bpp"); -const u32 gMapObjectPic_Sailor_8[] = INCBIN_U32("graphics/map_objects/pics/people/sailor/8.4bpp"); -const u32 gMapObjectPic_Fisherman_0[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/0.4bpp"); -const u32 gMapObjectPic_Fisherman_1[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/1.4bpp"); -const u32 gMapObjectPic_Fisherman_2[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/2.4bpp"); -const u32 gMapObjectPic_Fisherman_3[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/3.4bpp"); -const u32 gMapObjectPic_Fisherman_4[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/4.4bpp"); -const u32 gMapObjectPic_Fisherman_5[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/5.4bpp"); -const u32 gMapObjectPic_Fisherman_6[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/6.4bpp"); -const u32 gMapObjectPic_Fisherman_7[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/7.4bpp"); -const u32 gMapObjectPic_Fisherman_8[] = INCBIN_U32("graphics/map_objects/pics/people/fisherman/8.4bpp"); -const u32 gMapObjectPic_RunningTriathleteM_0[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/0.4bpp"); -const u32 gMapObjectPic_RunningTriathleteM_1[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/1.4bpp"); -const u32 gMapObjectPic_RunningTriathleteM_2[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/2.4bpp"); -const u32 gMapObjectPic_RunningTriathleteM_3[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/3.4bpp"); -const u32 gMapObjectPic_RunningTriathleteM_4[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/4.4bpp"); -const u32 gMapObjectPic_RunningTriathleteM_5[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/5.4bpp"); -const u32 gMapObjectPic_RunningTriathleteM_6[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/6.4bpp"); -const u32 gMapObjectPic_RunningTriathleteM_7[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/7.4bpp"); -const u32 gMapObjectPic_RunningTriathleteM_8[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_m/8.4bpp"); -const u32 gMapObjectPic_RunningTriathleteF_0[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/0.4bpp"); -const u32 gMapObjectPic_RunningTriathleteF_1[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/1.4bpp"); -const u32 gMapObjectPic_RunningTriathleteF_2[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/2.4bpp"); -const u32 gMapObjectPic_RunningTriathleteF_3[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/3.4bpp"); -const u32 gMapObjectPic_RunningTriathleteF_4[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/4.4bpp"); -const u32 gMapObjectPic_RunningTriathleteF_5[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/5.4bpp"); -const u32 gMapObjectPic_RunningTriathleteF_6[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/6.4bpp"); -const u32 gMapObjectPic_RunningTriathleteF_7[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/7.4bpp"); -const u32 gMapObjectPic_RunningTriathleteF_8[] = INCBIN_U32("graphics/map_objects/pics/people/running_triathlete_f/8.4bpp"); -const u32 gMapObjectPic_TuberF_0[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/0.4bpp"); -const u32 gMapObjectPic_TuberF_1[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/1.4bpp"); -const u32 gMapObjectPic_TuberF_2[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/2.4bpp"); -const u32 gMapObjectPic_TuberF_3[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/3.4bpp"); -const u32 gMapObjectPic_TuberF_4[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/4.4bpp"); -const u32 gMapObjectPic_TuberF_5[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/5.4bpp"); -const u32 gMapObjectPic_TuberF_6[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/6.4bpp"); -const u32 gMapObjectPic_TuberF_7[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/7.4bpp"); -const u32 gMapObjectPic_TuberF_8[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_f/8.4bpp"); -const u32 gMapObjectPic_TuberM_0[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/0.4bpp"); -const u32 gMapObjectPic_TuberM_1[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/1.4bpp"); -const u32 gMapObjectPic_TuberM_2[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/2.4bpp"); -const u32 gMapObjectPic_TuberM_3[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/3.4bpp"); -const u32 gMapObjectPic_TuberM_4[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/4.4bpp"); -const u32 gMapObjectPic_TuberM_5[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/5.4bpp"); -const u32 gMapObjectPic_TuberM_6[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/6.4bpp"); -const u32 gMapObjectPic_TuberM_7[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/7.4bpp"); -const u32 gMapObjectPic_TuberM_8[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m/8.4bpp"); -const u32 gMapObjectPic_Hiker_0[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/0.4bpp"); -const u32 gMapObjectPic_Hiker_1[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/1.4bpp"); -const u32 gMapObjectPic_Hiker_2[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/2.4bpp"); -const u32 gMapObjectPic_Hiker_3[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/3.4bpp"); -const u32 gMapObjectPic_Hiker_4[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/4.4bpp"); -const u32 gMapObjectPic_Hiker_5[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/5.4bpp"); -const u32 gMapObjectPic_Hiker_6[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/6.4bpp"); -const u32 gMapObjectPic_Hiker_7[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/7.4bpp"); -const u32 gMapObjectPic_Hiker_8[] = INCBIN_U32("graphics/map_objects/pics/people/hiker/8.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteM_0[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/0.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteM_1[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/1.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteM_2[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/2.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteM_3[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/3.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteM_4[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/4.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteM_5[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/5.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteM_6[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/6.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteM_7[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/7.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteM_8[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_m/8.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteF_0[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/0.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteF_1[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/1.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteF_2[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/2.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteF_3[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/3.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteF_4[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/4.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteF_5[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/5.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteF_6[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/6.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteF_7[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/7.4bpp"); -const u32 gMapObjectPic_CyclingTriathleteF_8[] = INCBIN_U32("graphics/map_objects/pics/people/cycling_triathlete_f/8.4bpp"); -const u32 gMapObjectPic_Man5_0[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/0.4bpp"); -const u32 gMapObjectPic_Man5_1[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/1.4bpp"); -const u32 gMapObjectPic_Man5_2[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/2.4bpp"); -const u32 gMapObjectPic_Man5_3[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/3.4bpp"); -const u32 gMapObjectPic_Man5_4[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/4.4bpp"); -const u32 gMapObjectPic_Man5_5[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/5.4bpp"); -const u32 gMapObjectPic_Man5_6[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/6.4bpp"); -const u32 gMapObjectPic_Man5_7[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/7.4bpp"); -const u32 gMapObjectPic_Man5_8[] = INCBIN_U32("graphics/map_objects/pics/people/man_5/8.4bpp"); -const u32 gMapObjectPic_Man6_0[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/0.4bpp"); -const u32 gMapObjectPic_Man6_1[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/1.4bpp"); -const u32 gMapObjectPic_Man6_2[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/2.4bpp"); -const u32 gMapObjectPic_Man6_3[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/3.4bpp"); -const u32 gMapObjectPic_Man6_4[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/4.4bpp"); -const u32 gMapObjectPic_Man6_5[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/5.4bpp"); -const u32 gMapObjectPic_Man6_6[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/6.4bpp"); -const u32 gMapObjectPic_Man6_7[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/7.4bpp"); -const u32 gMapObjectPic_Man6_8[] = INCBIN_U32("graphics/map_objects/pics/people/man_6/8.4bpp"); -const u32 gMapObjectPic_Nurse_0[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/0.4bpp"); -const u32 gMapObjectPic_Nurse_1[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/1.4bpp"); -const u32 gMapObjectPic_Nurse_2[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/2.4bpp"); -const u32 gMapObjectPic_Nurse_3[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/3.4bpp"); -const u32 gMapObjectPic_Nurse_4[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/4.4bpp"); -const u32 gMapObjectPic_Nurse_5[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/5.4bpp"); -const u32 gMapObjectPic_Nurse_6[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/6.4bpp"); -const u32 gMapObjectPic_Nurse_7[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/7.4bpp"); -const u32 gMapObjectPic_Nurse_8[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/8.4bpp"); -const u32 gMapObjectPic_Nurse_9[] = INCBIN_U32("graphics/map_objects/pics/people/nurse/9.4bpp"); -const u32 gMapObjectPic_ItemBall[] = INCBIN_U32("graphics/map_objects/pics/misc/item_ball.4bpp"); -const u32 gMapObjectPic_ProfBirch_0[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/0.4bpp"); -const u32 gMapObjectPic_ProfBirch_1[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/1.4bpp"); -const u32 gMapObjectPic_ProfBirch_2[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/2.4bpp"); -const u32 gMapObjectPic_ProfBirch_3[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/3.4bpp"); -const u32 gMapObjectPic_ProfBirch_4[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/4.4bpp"); -const u32 gMapObjectPic_ProfBirch_5[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/5.4bpp"); -const u32 gMapObjectPic_ProfBirch_6[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/6.4bpp"); -const u32 gMapObjectPic_ProfBirch_7[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/7.4bpp"); -const u32 gMapObjectPic_ProfBirch_8[] = INCBIN_U32("graphics/map_objects/pics/people/prof_birch/8.4bpp"); -const u32 gMapObjectPic_ReporterM_0[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/0.4bpp"); -const u32 gMapObjectPic_ReporterM_1[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/1.4bpp"); -const u32 gMapObjectPic_ReporterM_2[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/2.4bpp"); -const u32 gMapObjectPic_ReporterM_3[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/3.4bpp"); -const u32 gMapObjectPic_ReporterM_4[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/4.4bpp"); -const u32 gMapObjectPic_ReporterM_5[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/5.4bpp"); -const u32 gMapObjectPic_ReporterM_6[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/6.4bpp"); -const u32 gMapObjectPic_ReporterM_7[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/7.4bpp"); -const u32 gMapObjectPic_ReporterM_8[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_m/8.4bpp"); -const u32 gMapObjectPic_ReporterF_0[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/0.4bpp"); -const u32 gMapObjectPic_ReporterF_1[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/1.4bpp"); -const u32 gMapObjectPic_ReporterF_2[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/2.4bpp"); -const u32 gMapObjectPic_ReporterF_3[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/3.4bpp"); -const u32 gMapObjectPic_ReporterF_4[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/4.4bpp"); -const u32 gMapObjectPic_ReporterF_5[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/5.4bpp"); -const u32 gMapObjectPic_ReporterF_6[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/6.4bpp"); -const u32 gMapObjectPic_ReporterF_7[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/7.4bpp"); -const u32 gMapObjectPic_ReporterF_8[] = INCBIN_U32("graphics/map_objects/pics/people/reporter_f/8.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan1_0[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/0.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan1_1[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/1.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan1_2[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/2.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan1_3[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/3.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan1_4[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/4.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan1_5[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/5.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan1_6[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/6.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan1_7[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/7.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan1_8[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_1/8.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan2_0[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/0.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan2_1[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/1.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan2_2[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/2.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan2_3[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/3.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan2_4[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/4.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan2_5[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/5.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan2_6[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/6.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan2_7[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/7.4bpp"); -const u32 gMapObjectPic_MauvilleOldMan2_8[] = INCBIN_U32("graphics/map_objects/pics/people/mauville_old_man_2/8.4bpp"); -const u32 gMapObjectPic_MartEmployee_0[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/0.4bpp"); -const u32 gMapObjectPic_MartEmployee_1[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/1.4bpp"); -const u32 gMapObjectPic_MartEmployee_2[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/2.4bpp"); -const u32 gMapObjectPic_MartEmployee_3[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/3.4bpp"); -const u32 gMapObjectPic_MartEmployee_4[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/4.4bpp"); -const u32 gMapObjectPic_MartEmployee_5[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/5.4bpp"); -const u32 gMapObjectPic_MartEmployee_6[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/6.4bpp"); -const u32 gMapObjectPic_MartEmployee_7[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/7.4bpp"); -const u32 gMapObjectPic_MartEmployee_8[] = INCBIN_U32("graphics/map_objects/pics/people/mart_employee/8.4bpp"); -const u32 gMapObjectPic_RooftopSaleWoman_0[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/0.4bpp"); -const u32 gMapObjectPic_RooftopSaleWoman_1[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/1.4bpp"); -const u32 gMapObjectPic_RooftopSaleWoman_2[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/2.4bpp"); -const u32 gMapObjectPic_RooftopSaleWoman_3[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/3.4bpp"); -const u32 gMapObjectPic_RooftopSaleWoman_4[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/4.4bpp"); -const u32 gMapObjectPic_RooftopSaleWoman_5[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/5.4bpp"); -const u32 gMapObjectPic_RooftopSaleWoman_6[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/6.4bpp"); -const u32 gMapObjectPic_RooftopSaleWoman_7[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/7.4bpp"); -const u32 gMapObjectPic_RooftopSaleWoman_8[] = INCBIN_U32("graphics/map_objects/pics/people/rooftop_sale_woman/8.4bpp"); -const u32 gMapObjectPic_Teala_0[] = INCBIN_U32("graphics/map_objects/pics/people/teala/0.4bpp"); -const u32 gMapObjectPic_Teala_1[] = INCBIN_U32("graphics/map_objects/pics/people/teala/1.4bpp"); -const u32 gMapObjectPic_Teala_2[] = INCBIN_U32("graphics/map_objects/pics/people/teala/2.4bpp"); -const u32 gMapObjectPic_Teala_3[] = INCBIN_U32("graphics/map_objects/pics/people/teala/3.4bpp"); -const u32 gMapObjectPic_Teala_4[] = INCBIN_U32("graphics/map_objects/pics/people/teala/4.4bpp"); -const u32 gMapObjectPic_Teala_5[] = INCBIN_U32("graphics/map_objects/pics/people/teala/5.4bpp"); -const u32 gMapObjectPic_Teala_6[] = INCBIN_U32("graphics/map_objects/pics/people/teala/6.4bpp"); -const u32 gMapObjectPic_Teala_7[] = INCBIN_U32("graphics/map_objects/pics/people/teala/7.4bpp"); -const u32 gMapObjectPic_Teala_8[] = INCBIN_U32("graphics/map_objects/pics/people/teala/8.4bpp"); -const u32 gMapObjectPic_Artist_0[] = INCBIN_U32("graphics/map_objects/pics/people/artist/0.4bpp"); -const u32 gMapObjectPic_Artist_1[] = INCBIN_U32("graphics/map_objects/pics/people/artist/1.4bpp"); -const u32 gMapObjectPic_Artist_2[] = INCBIN_U32("graphics/map_objects/pics/people/artist/2.4bpp"); -const u32 gMapObjectPic_Artist_3[] = INCBIN_U32("graphics/map_objects/pics/people/artist/3.4bpp"); -const u32 gMapObjectPic_Artist_4[] = INCBIN_U32("graphics/map_objects/pics/people/artist/4.4bpp"); -const u32 gMapObjectPic_Artist_5[] = INCBIN_U32("graphics/map_objects/pics/people/artist/5.4bpp"); -const u32 gMapObjectPic_Artist_6[] = INCBIN_U32("graphics/map_objects/pics/people/artist/6.4bpp"); -const u32 gMapObjectPic_Artist_7[] = INCBIN_U32("graphics/map_objects/pics/people/artist/7.4bpp"); -const u32 gMapObjectPic_Artist_8[] = INCBIN_U32("graphics/map_objects/pics/people/artist/8.4bpp"); -const u32 gMapObjectPic_Cameraman_0[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/0.4bpp"); -const u32 gMapObjectPic_Cameraman_1[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/1.4bpp"); -const u32 gMapObjectPic_Cameraman_2[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/2.4bpp"); -const u32 gMapObjectPic_Cameraman_3[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/3.4bpp"); -const u32 gMapObjectPic_Cameraman_4[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/4.4bpp"); -const u32 gMapObjectPic_Cameraman_5[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/5.4bpp"); -const u32 gMapObjectPic_Cameraman_6[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/6.4bpp"); -const u32 gMapObjectPic_Cameraman_7[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/7.4bpp"); -const u32 gMapObjectPic_Cameraman_8[] = INCBIN_U32("graphics/map_objects/pics/people/cameraman/8.4bpp"); -const u32 gMapObjectPic_Scientist2_0[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/0.4bpp"); -const u32 gMapObjectPic_Scientist2_1[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/1.4bpp"); -const u32 gMapObjectPic_Scientist2_2[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/2.4bpp"); -const u32 gMapObjectPic_Scientist2_3[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/3.4bpp"); -const u32 gMapObjectPic_Scientist2_4[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/4.4bpp"); -const u32 gMapObjectPic_Scientist2_5[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/5.4bpp"); -const u32 gMapObjectPic_Scientist2_6[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/6.4bpp"); -const u32 gMapObjectPic_Scientist2_7[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/7.4bpp"); -const u32 gMapObjectPic_Scientist2_8[] = INCBIN_U32("graphics/map_objects/pics/people/scientist_2/8.4bpp"); -const u32 gMapObjectPic_Man7_0[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/0.4bpp"); -const u32 gMapObjectPic_Man7_1[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/1.4bpp"); -const u32 gMapObjectPic_Man7_2[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/2.4bpp"); -const u32 gMapObjectPic_Man7_3[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/3.4bpp"); -const u32 gMapObjectPic_Man7_4[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/4.4bpp"); -const u32 gMapObjectPic_Man7_5[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/5.4bpp"); -const u32 gMapObjectPic_Man7_6[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/6.4bpp"); -const u32 gMapObjectPic_Man7_7[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/7.4bpp"); -const u32 gMapObjectPic_Man7_8[] = INCBIN_U32("graphics/map_objects/pics/people/man_7/8.4bpp"); -const u32 gMapObjectPic_AquaMemberM_0[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/0.4bpp"); -const u32 gMapObjectPic_AquaMemberM_1[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/1.4bpp"); -const u32 gMapObjectPic_AquaMemberM_2[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/2.4bpp"); -const u32 gMapObjectPic_AquaMemberM_3[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/3.4bpp"); -const u32 gMapObjectPic_AquaMemberM_4[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/4.4bpp"); -const u32 gMapObjectPic_AquaMemberM_5[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/5.4bpp"); -const u32 gMapObjectPic_AquaMemberM_6[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/6.4bpp"); -const u32 gMapObjectPic_AquaMemberM_7[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/7.4bpp"); -const u32 gMapObjectPic_AquaMemberM_8[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_m/8.4bpp"); -const u32 gMapObjectPic_AquaMemberF_0[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/0.4bpp"); -const u32 gMapObjectPic_AquaMemberF_1[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/1.4bpp"); -const u32 gMapObjectPic_AquaMemberF_2[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/2.4bpp"); -const u32 gMapObjectPic_AquaMemberF_3[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/3.4bpp"); -const u32 gMapObjectPic_AquaMemberF_4[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/4.4bpp"); -const u32 gMapObjectPic_AquaMemberF_5[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/5.4bpp"); -const u32 gMapObjectPic_AquaMemberF_6[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/6.4bpp"); -const u32 gMapObjectPic_AquaMemberF_7[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/7.4bpp"); -const u32 gMapObjectPic_AquaMemberF_8[] = INCBIN_U32("graphics/map_objects/pics/people/aqua_member_f/8.4bpp"); -const u32 gMapObjectPic_MagmaMemberM_0[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/0.4bpp"); -const u32 gMapObjectPic_MagmaMemberM_1[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/1.4bpp"); -const u32 gMapObjectPic_MagmaMemberM_2[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/2.4bpp"); -const u32 gMapObjectPic_MagmaMemberM_3[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/3.4bpp"); -const u32 gMapObjectPic_MagmaMemberM_4[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/4.4bpp"); -const u32 gMapObjectPic_MagmaMemberM_5[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/5.4bpp"); -const u32 gMapObjectPic_MagmaMemberM_6[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/6.4bpp"); -const u32 gMapObjectPic_MagmaMemberM_7[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/7.4bpp"); -const u32 gMapObjectPic_MagmaMemberM_8[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_m/8.4bpp"); -const u32 gMapObjectPic_MagmaMemberF_0[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/0.4bpp"); -const u32 gMapObjectPic_MagmaMemberF_1[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/1.4bpp"); -const u32 gMapObjectPic_MagmaMemberF_2[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/2.4bpp"); -const u32 gMapObjectPic_MagmaMemberF_3[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/3.4bpp"); -const u32 gMapObjectPic_MagmaMemberF_4[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/4.4bpp"); -const u32 gMapObjectPic_MagmaMemberF_5[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/5.4bpp"); -const u32 gMapObjectPic_MagmaMemberF_6[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/6.4bpp"); -const u32 gMapObjectPic_MagmaMemberF_7[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/7.4bpp"); -const u32 gMapObjectPic_MagmaMemberF_8[] = INCBIN_U32("graphics/map_objects/pics/people/magma_member_f/8.4bpp"); -const u32 gMapObjectPic_Sidney_0[] = INCBIN_U32("graphics/map_objects/pics/people/sidney/0.4bpp"); -const u32 gMapObjectPic_Sidney_1[] = INCBIN_U32("graphics/map_objects/pics/people/sidney/1.4bpp"); -const u32 gMapObjectPic_Sidney_2[] = INCBIN_U32("graphics/map_objects/pics/people/sidney/2.4bpp"); -const u32 gMapObjectPic_Phoebe_0[] = INCBIN_U32("graphics/map_objects/pics/people/phoebe/0.4bpp"); -const u32 gMapObjectPic_Phoebe_1[] = INCBIN_U32("graphics/map_objects/pics/people/phoebe/1.4bpp"); -const u32 gMapObjectPic_Phoebe_2[] = INCBIN_U32("graphics/map_objects/pics/people/phoebe/2.4bpp"); -const u32 gMapObjectPic_Glacia_0[] = INCBIN_U32("graphics/map_objects/pics/people/glacia/0.4bpp"); -const u32 gMapObjectPic_Glacia_1[] = INCBIN_U32("graphics/map_objects/pics/people/glacia/1.4bpp"); -const u32 gMapObjectPic_Glacia_2[] = INCBIN_U32("graphics/map_objects/pics/people/glacia/2.4bpp"); -const u32 gMapObjectPic_Drake_0[] = INCBIN_U32("graphics/map_objects/pics/people/drake/0.4bpp"); -const u32 gMapObjectPic_Drake_1[] = INCBIN_U32("graphics/map_objects/pics/people/drake/1.4bpp"); -const u32 gMapObjectPic_Drake_2[] = INCBIN_U32("graphics/map_objects/pics/people/drake/2.4bpp"); -const u32 gMapObjectPic_Roxanne_0[] = INCBIN_U32("graphics/map_objects/pics/people/roxanne/0.4bpp"); -const u32 gMapObjectPic_Roxanne_1[] = INCBIN_U32("graphics/map_objects/pics/people/roxanne/1.4bpp"); -const u32 gMapObjectPic_Roxanne_2[] = INCBIN_U32("graphics/map_objects/pics/people/roxanne/2.4bpp"); -const u32 gMapObjectPic_Brawly_0[] = INCBIN_U32("graphics/map_objects/pics/people/brawly/0.4bpp"); -const u32 gMapObjectPic_Brawly_1[] = INCBIN_U32("graphics/map_objects/pics/people/brawly/1.4bpp"); -const u32 gMapObjectPic_Brawly_2[] = INCBIN_U32("graphics/map_objects/pics/people/brawly/2.4bpp"); -const u32 gMapObjectPic_Wattson_0[] = INCBIN_U32("graphics/map_objects/pics/people/wattson/0.4bpp"); -const u32 gMapObjectPic_Wattson_1[] = INCBIN_U32("graphics/map_objects/pics/people/wattson/1.4bpp"); -const u32 gMapObjectPic_Wattson_2[] = INCBIN_U32("graphics/map_objects/pics/people/wattson/2.4bpp"); -const u32 gMapObjectPic_Flannery_0[] = INCBIN_U32("graphics/map_objects/pics/people/flannery/0.4bpp"); -const u32 gMapObjectPic_Flannery_1[] = INCBIN_U32("graphics/map_objects/pics/people/flannery/1.4bpp"); -const u32 gMapObjectPic_Flannery_2[] = INCBIN_U32("graphics/map_objects/pics/people/flannery/2.4bpp"); -const u32 gMapObjectPic_Norman_0[] = INCBIN_U32("graphics/map_objects/pics/people/norman/0.4bpp"); -const u32 gMapObjectPic_Norman_1[] = INCBIN_U32("graphics/map_objects/pics/people/norman/1.4bpp"); -const u32 gMapObjectPic_Norman_2[] = INCBIN_U32("graphics/map_objects/pics/people/norman/2.4bpp"); -const u32 gMapObjectPic_Norman_3[] = INCBIN_U32("graphics/map_objects/pics/people/norman/3.4bpp"); -const u32 gMapObjectPic_Norman_4[] = INCBIN_U32("graphics/map_objects/pics/people/norman/4.4bpp"); -const u32 gMapObjectPic_Norman_5[] = INCBIN_U32("graphics/map_objects/pics/people/norman/5.4bpp"); -const u32 gMapObjectPic_Norman_6[] = INCBIN_U32("graphics/map_objects/pics/people/norman/6.4bpp"); -const u32 gMapObjectPic_Norman_7[] = INCBIN_U32("graphics/map_objects/pics/people/norman/7.4bpp"); -const u32 gMapObjectPic_Norman_8[] = INCBIN_U32("graphics/map_objects/pics/people/norman/8.4bpp"); -const u32 gMapObjectPic_Winona_0[] = INCBIN_U32("graphics/map_objects/pics/people/winona/0.4bpp"); -const u32 gMapObjectPic_Winona_1[] = INCBIN_U32("graphics/map_objects/pics/people/winona/1.4bpp"); -const u32 gMapObjectPic_Winona_2[] = INCBIN_U32("graphics/map_objects/pics/people/winona/2.4bpp"); -const u32 gMapObjectPic_Liza_0[] = INCBIN_U32("graphics/map_objects/pics/people/liza/0.4bpp"); -const u32 gMapObjectPic_Liza_1[] = INCBIN_U32("graphics/map_objects/pics/people/liza/1.4bpp"); -const u32 gMapObjectPic_Liza_2[] = INCBIN_U32("graphics/map_objects/pics/people/liza/2.4bpp"); -const u32 gMapObjectPic_Tate_0[] = INCBIN_U32("graphics/map_objects/pics/people/tate/0.4bpp"); -const u32 gMapObjectPic_Tate_1[] = INCBIN_U32("graphics/map_objects/pics/people/tate/1.4bpp"); -const u32 gMapObjectPic_Tate_2[] = INCBIN_U32("graphics/map_objects/pics/people/tate/2.4bpp"); -const u32 gMapObjectPic_Wallace_0[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/0.4bpp"); -const u32 gMapObjectPic_Wallace_1[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/1.4bpp"); -const u32 gMapObjectPic_Wallace_2[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/2.4bpp"); -const u32 gMapObjectPic_Wallace_3[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/3.4bpp"); -const u32 gMapObjectPic_Wallace_4[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/4.4bpp"); -const u32 gMapObjectPic_Wallace_5[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/5.4bpp"); -const u32 gMapObjectPic_Wallace_6[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/6.4bpp"); -const u32 gMapObjectPic_Wallace_7[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/7.4bpp"); -const u32 gMapObjectPic_Wallace_8[] = INCBIN_U32("graphics/map_objects/pics/people/wallace/8.4bpp"); -const u32 gMapObjectPic_Steven_0[] = INCBIN_U32("graphics/map_objects/pics/people/steven/0.4bpp"); -const u32 gMapObjectPic_Steven_1[] = INCBIN_U32("graphics/map_objects/pics/people/steven/1.4bpp"); -const u32 gMapObjectPic_Steven_2[] = INCBIN_U32("graphics/map_objects/pics/people/steven/2.4bpp"); -const u32 gMapObjectPic_Steven_3[] = INCBIN_U32("graphics/map_objects/pics/people/steven/3.4bpp"); -const u32 gMapObjectPic_Steven_4[] = INCBIN_U32("graphics/map_objects/pics/people/steven/4.4bpp"); -const u32 gMapObjectPic_Steven_5[] = INCBIN_U32("graphics/map_objects/pics/people/steven/5.4bpp"); -const u32 gMapObjectPic_Steven_6[] = INCBIN_U32("graphics/map_objects/pics/people/steven/6.4bpp"); -const u32 gMapObjectPic_Steven_7[] = INCBIN_U32("graphics/map_objects/pics/people/steven/7.4bpp"); -const u32 gMapObjectPic_Steven_8[] = INCBIN_U32("graphics/map_objects/pics/people/steven/8.4bpp"); -const u32 gMapObjectPic_Wally_0[] = INCBIN_U32("graphics/map_objects/pics/people/wally/0.4bpp"); -const u32 gMapObjectPic_Wally_1[] = INCBIN_U32("graphics/map_objects/pics/people/wally/1.4bpp"); -const u32 gMapObjectPic_Wally_2[] = INCBIN_U32("graphics/map_objects/pics/people/wally/2.4bpp"); -const u32 gMapObjectPic_Wally_3[] = INCBIN_U32("graphics/map_objects/pics/people/wally/3.4bpp"); -const u32 gMapObjectPic_Wally_4[] = INCBIN_U32("graphics/map_objects/pics/people/wally/4.4bpp"); -const u32 gMapObjectPic_Wally_5[] = INCBIN_U32("graphics/map_objects/pics/people/wally/5.4bpp"); -const u32 gMapObjectPic_Wally_6[] = INCBIN_U32("graphics/map_objects/pics/people/wally/6.4bpp"); -const u32 gMapObjectPic_Wally_7[] = INCBIN_U32("graphics/map_objects/pics/people/wally/7.4bpp"); -const u32 gMapObjectPic_Wally_8[] = INCBIN_U32("graphics/map_objects/pics/people/wally/8.4bpp"); -const u32 gMapObjectPic_LittleBoy3_0[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/0.4bpp"); -const u32 gMapObjectPic_LittleBoy3_1[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/1.4bpp"); -const u32 gMapObjectPic_LittleBoy3_2[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/2.4bpp"); -const u32 gMapObjectPic_LittleBoy3_3[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/3.4bpp"); -const u32 gMapObjectPic_LittleBoy3_4[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/4.4bpp"); -const u32 gMapObjectPic_LittleBoy3_5[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/5.4bpp"); -const u32 gMapObjectPic_LittleBoy3_6[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/6.4bpp"); -const u32 gMapObjectPic_LittleBoy3_7[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/7.4bpp"); -const u32 gMapObjectPic_LittleBoy3_8[] = INCBIN_U32("graphics/map_objects/pics/people/little_boy_3/8.4bpp"); -const u32 gMapObjectPic_HotSpringsOldWoman_0[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/0.4bpp"); -const u32 gMapObjectPic_HotSpringsOldWoman_1[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/1.4bpp"); -const u32 gMapObjectPic_HotSpringsOldWoman_2[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/2.4bpp"); -const u32 gMapObjectPic_HotSpringsOldWoman_3[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/3.4bpp"); -const u32 gMapObjectPic_HotSpringsOldWoman_4[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/4.4bpp"); -const u32 gMapObjectPic_HotSpringsOldWoman_5[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/5.4bpp"); -const u32 gMapObjectPic_HotSpringsOldWoman_6[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/6.4bpp"); -const u32 gMapObjectPic_HotSpringsOldWoman_7[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/7.4bpp"); -const u32 gMapObjectPic_HotSpringsOldWoman_8[] = INCBIN_U32("graphics/map_objects/pics/people/hot_springs_old_woman/8.4bpp"); -const u32 gMapObjectPic_LatiasLatios_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/latias_latios/0.4bpp"); -const u32 gMapObjectPic_LatiasLatios_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/latias_latios/1.4bpp"); -const u32 gMapObjectPic_LatiasLatios_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/latias_latios/2.4bpp"); -const u32 gMapObjectPic_Boy5_0[] = INCBIN_U32("graphics/map_objects/pics/people/boy_5/0.4bpp"); -const u32 gMapObjectPic_Boy5_1[] = INCBIN_U32("graphics/map_objects/pics/people/boy_5/1.4bpp"); -const u32 gMapObjectPic_Boy5_2[] = INCBIN_U32("graphics/map_objects/pics/people/boy_5/2.4bpp"); -const u32 gMapObjectPic_ContestJudge_0[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/0.4bpp"); -const u32 gMapObjectPic_ContestJudge_1[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/1.4bpp"); -const u32 gMapObjectPic_ContestJudge_2[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/2.4bpp"); -const u32 gMapObjectPic_ContestJudge_3[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/3.4bpp"); -const u32 gMapObjectPic_ContestJudge_4[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/4.4bpp"); -const u32 gMapObjectPic_ContestJudge_5[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/5.4bpp"); -const u32 gMapObjectPic_ContestJudge_6[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/6.4bpp"); -const u32 gMapObjectPic_ContestJudge_7[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/7.4bpp"); -const u32 gMapObjectPic_ContestJudge_8[] = INCBIN_U32("graphics/map_objects/pics/people/contest_judge/8.4bpp"); -const u32 gMapObjectPic_Archie_0[] = INCBIN_U32("graphics/map_objects/pics/people/archie/0.4bpp"); -const u32 gMapObjectPic_Archie_1[] = INCBIN_U32("graphics/map_objects/pics/people/archie/1.4bpp"); -const u32 gMapObjectPic_Archie_2[] = INCBIN_U32("graphics/map_objects/pics/people/archie/2.4bpp"); -const u32 gMapObjectPic_Archie_3[] = INCBIN_U32("graphics/map_objects/pics/people/archie/3.4bpp"); -const u32 gMapObjectPic_Archie_4[] = INCBIN_U32("graphics/map_objects/pics/people/archie/4.4bpp"); -const u32 gMapObjectPic_Archie_5[] = INCBIN_U32("graphics/map_objects/pics/people/archie/5.4bpp"); -const u32 gMapObjectPic_Archie_6[] = INCBIN_U32("graphics/map_objects/pics/people/archie/6.4bpp"); -const u32 gMapObjectPic_Archie_7[] = INCBIN_U32("graphics/map_objects/pics/people/archie/7.4bpp"); -const u32 gMapObjectPic_Archie_8[] = INCBIN_U32("graphics/map_objects/pics/people/archie/8.4bpp"); -const u32 gMapObjectPic_Maxie_0[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/0.4bpp"); -const u32 gMapObjectPic_Maxie_1[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/1.4bpp"); -const u32 gMapObjectPic_Maxie_2[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/2.4bpp"); -const u32 gMapObjectPic_Maxie_3[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/3.4bpp"); -const u32 gMapObjectPic_Maxie_4[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/4.4bpp"); -const u32 gMapObjectPic_Maxie_5[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/5.4bpp"); -const u32 gMapObjectPic_Maxie_6[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/6.4bpp"); -const u32 gMapObjectPic_Maxie_7[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/7.4bpp"); -const u32 gMapObjectPic_Maxie_8[] = INCBIN_U32("graphics/map_objects/pics/people/maxie/8.4bpp"); -const u32 gMapObjectPic_Kyogre_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/kyogre/0.4bpp"); -const u32 gMapObjectPic_Kyogre_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/kyogre/1.4bpp"); -const u32 gMapObjectPic_Groudon_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/groudon/0.4bpp"); -const u32 gMapObjectPic_Groudon_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/groudon/1.4bpp"); -const u32 gMapObjectPic_Regi[] = INCBIN_U32("graphics/map_objects/pics/pokemon/regi.4bpp"); -const u32 gMapObjectPic_Skitty_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/skitty/0.4bpp"); -const u32 gMapObjectPic_Skitty_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/skitty/1.4bpp"); -const u32 gMapObjectPic_Skitty_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/skitty/2.4bpp"); -const u32 gMapObjectPic_Kecleon_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/kecleon/0.4bpp"); -const u32 gMapObjectPic_Kecleon_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/kecleon/1.4bpp"); -const u32 gMapObjectPic_Kecleon_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/kecleon/2.4bpp"); -const u32 gMapObjectPic_Rayquaza_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/rayquaza/0.4bpp"); -const u32 gMapObjectPic_Rayquaza_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/rayquaza/1.4bpp"); -const u32 gMapObjectPic_Zigzagoon_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/zigzagoon/0.4bpp"); -const u32 gMapObjectPic_Zigzagoon_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/zigzagoon/1.4bpp"); -const u32 gMapObjectPic_Zigzagoon_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/zigzagoon/2.4bpp"); -const u32 gMapObjectPic_Pikachu_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/pikachu/0.4bpp"); -const u32 gMapObjectPic_Pikachu_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/pikachu/1.4bpp"); -const u32 gMapObjectPic_Pikachu_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/pikachu/2.4bpp"); -const u32 gMapObjectPic_Azumarill_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/azumarill/0.4bpp"); -const u32 gMapObjectPic_Azumarill_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/azumarill/1.4bpp"); -const u32 gMapObjectPic_Azumarill_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/azumarill/2.4bpp"); -const u32 gMapObjectPic_Wingull_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/wingull/0.4bpp"); -const u32 gMapObjectPic_Wingull_3[] = INCBIN_U32("graphics/map_objects/pics/pokemon/wingull/3.4bpp"); -const u32 gMapObjectPic_Wingull_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/wingull/1.4bpp"); -const u32 gMapObjectPic_Wingull_4[] = INCBIN_U32("graphics/map_objects/pics/pokemon/wingull/4.4bpp"); -const u32 gMapObjectPic_Wingull_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/wingull/2.4bpp"); -const u32 gMapObjectPic_Wingull_5[] = INCBIN_U32("graphics/map_objects/pics/pokemon/wingull/5.4bpp"); -const u32 gMapObjectPic_TuberMSwimming_0[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/0.4bpp"); -const u32 gMapObjectPic_TuberMSwimming_1[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/1.4bpp"); -const u32 gMapObjectPic_TuberMSwimming_2[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/2.4bpp"); -const u32 gMapObjectPic_TuberMSwimming_3[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/3.4bpp"); -const u32 gMapObjectPic_TuberMSwimming_4[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/4.4bpp"); -const u32 gMapObjectPic_TuberMSwimming_5[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/5.4bpp"); -const u32 gMapObjectPic_TuberMSwimming_6[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/6.4bpp"); -const u32 gMapObjectPic_TuberMSwimming_7[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/7.4bpp"); -const u32 gMapObjectPic_TuberMSwimming_8[] = INCBIN_U32("graphics/map_objects/pics/people/tuber_m_swimming/8.4bpp"); -const u32 gMapObjectPic_Azurill_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/azurill/0.4bpp"); -const u32 gMapObjectPic_Azurill_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/azurill/1.4bpp"); -const u32 gMapObjectPic_Azurill_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/azurill/2.4bpp"); -const u32 gMapObjectPic_Mom_0[] = INCBIN_U32("graphics/map_objects/pics/people/mom/0.4bpp"); -const u32 gMapObjectPic_Mom_1[] = INCBIN_U32("graphics/map_objects/pics/people/mom/1.4bpp"); -const u32 gMapObjectPic_Mom_2[] = INCBIN_U32("graphics/map_objects/pics/people/mom/2.4bpp"); -const u32 gMapObjectPic_Mom_3[] = INCBIN_U32("graphics/map_objects/pics/people/mom/3.4bpp"); -const u32 gMapObjectPic_Mom_4[] = INCBIN_U32("graphics/map_objects/pics/people/mom/4.4bpp"); -const u32 gMapObjectPic_Mom_5[] = INCBIN_U32("graphics/map_objects/pics/people/mom/5.4bpp"); -const u32 gMapObjectPic_Mom_6[] = INCBIN_U32("graphics/map_objects/pics/people/mom/6.4bpp"); -const u32 gMapObjectPic_Mom_7[] = INCBIN_U32("graphics/map_objects/pics/people/mom/7.4bpp"); -const u32 gMapObjectPic_Mom_8[] = INCBIN_U32("graphics/map_objects/pics/people/mom/8.4bpp"); -const u16 gMapObjectPalette22[] = INCBIN_U16("graphics/map_objects/palettes/22.gbapal"); -const u16 gMapObjectPalette23[] = INCBIN_U16("graphics/map_objects/palettes/23.gbapal"); -const u16 gMapObjectPalette24[] = INCBIN_U16("graphics/map_objects/palettes/24.gbapal"); -const u16 gMapObjectPalette25[] = INCBIN_U16("graphics/map_objects/palettes/25.gbapal"); -const u32 gMapObjectPic_UnusedNatuDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/unused_natu_doll.4bpp"); -const u32 gMapObjectPic_UnusedMagnemiteDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/unused_magnemite_doll.4bpp"); -const u32 gMapObjectPic_UnusedSquirtleDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/unused_squirtle_doll.4bpp"); -const u32 gMapObjectPic_UnusedWooperDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/unused_wooper_doll.4bpp"); -const u32 gMapObjectPic_UnusedPikachuDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/unused_pikachu_doll.4bpp"); -const u32 gMapObjectPic_UnusedPorygon2Doll[] = INCBIN_U32("graphics/map_objects/pics/dolls/unused_porygon2_doll.4bpp"); -const u32 gMapObjectPic_PichuDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/pichu_doll.4bpp"); -const u32 gMapObjectPic_PikachuDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/pikachu_doll.4bpp"); -const u32 gMapObjectPic_MarillDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/marill_doll.4bpp"); -const u32 gMapObjectPic_TogepiDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/togepi_doll.4bpp"); -const u32 gMapObjectPic_CyndaquilDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/cyndaquil_doll.4bpp"); -const u32 gMapObjectPic_ChikoritaDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/chikorita_doll.4bpp"); -const u32 gMapObjectPic_TotodileDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/totodile_doll.4bpp"); -const u32 gMapObjectPic_JigglypuffDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/jigglypuff_doll.4bpp"); -const u32 gMapObjectPic_MeowthDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/meowth_doll.4bpp"); -const u32 gMapObjectPic_ClefairyDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/clefairy_doll.4bpp"); -const u32 gMapObjectPic_DittoDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/ditto_doll.4bpp"); -const u32 gMapObjectPic_SmoochumDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/smoochum_doll.4bpp"); -const u32 gMapObjectPic_TreeckoDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/treecko_doll.4bpp"); -const u32 gMapObjectPic_TorchicDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/torchic_doll.4bpp"); -const u32 gMapObjectPic_MudkipDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/mudkip_doll.4bpp"); -const u32 gMapObjectPic_DuskullDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/duskull_doll.4bpp"); -const u32 gMapObjectPic_WynautDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/wynaut_doll.4bpp"); -const u32 gMapObjectPic_BaltoyDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/baltoy_doll.4bpp"); -const u32 gMapObjectPic_KecleonDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/kecleon_doll.4bpp"); -const u32 gMapObjectPic_AzurillDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/azurill_doll.4bpp"); -const u32 gMapObjectPic_SkittyDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/skitty_doll.4bpp"); -const u32 gMapObjectPic_SwabluDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/swablu_doll.4bpp"); -const u32 gMapObjectPic_GulpinDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/gulpin_doll.4bpp"); -const u32 gMapObjectPic_LotadDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/lotad_doll.4bpp"); -const u32 gMapObjectPic_SeedotDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/seedot_doll.4bpp"); -const u32 gMapObjectPic_PikaCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/pika_cushion.4bpp"); -const u32 gMapObjectPic_RoundCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/round_cushion.4bpp"); -const u32 gMapObjectPic_KissCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/kiss_cushion.4bpp"); -const u32 gMapObjectPic_ZigzagCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/zigzag_cushion.4bpp"); -const u32 gMapObjectPic_SpinCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/spin_cushion.4bpp"); -const u32 gMapObjectPic_DiamondCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/diamond_cushion.4bpp"); -const u32 gMapObjectPic_BallCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/ball_cushion.4bpp"); -const u32 gMapObjectPic_GrassCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/grass_cushion.4bpp"); -const u32 gMapObjectPic_FireCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/fire_cushion.4bpp"); -const u32 gMapObjectPic_WaterCushion[] = INCBIN_U32("graphics/map_objects/pics/cushions/water_cushion.4bpp"); -const u32 gMapObjectPic_BigSnorlaxDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_snorlax_doll.4bpp"); -const u32 gMapObjectPic_BigRhydonDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_rhydon_doll.4bpp"); -const u32 gMapObjectPic_BigLaprasDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_lapras_doll.4bpp"); -const u32 gMapObjectPic_BigVenusaurDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_venusaur_doll.4bpp"); -const u32 gMapObjectPic_BigCharizardDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_charizard_doll.4bpp"); -const u32 gMapObjectPic_BigBlastoiseDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_blastoise_doll.4bpp"); -const u32 gMapObjectPic_BigWailmerDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_wailmer_doll.4bpp"); -const u32 gMapObjectPic_BigRegirockDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_regirock_doll.4bpp"); -const u32 gMapObjectPic_BigRegiceDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_regice_doll.4bpp"); -const u32 gMapObjectPic_BigRegisteelDoll[] = INCBIN_U32("graphics/map_objects/pics/dolls/big_registeel_doll.4bpp"); -const u32 gMapObjectPic_CuttableTree_0[] = INCBIN_U32("graphics/map_objects/pics/misc/cuttable_tree/0.4bpp"); -const u32 gMapObjectPic_CuttableTree_1[] = INCBIN_U32("graphics/map_objects/pics/misc/cuttable_tree/1.4bpp"); -const u32 gMapObjectPic_CuttableTree_2[] = INCBIN_U32("graphics/map_objects/pics/misc/cuttable_tree/2.4bpp"); -const u32 gMapObjectPic_CuttableTree_3[] = INCBIN_U32("graphics/map_objects/pics/misc/cuttable_tree/3.4bpp"); -const u32 gMapObjectPic_BreakableRock_0[] = INCBIN_U32("graphics/map_objects/pics/misc/breakable_rock/0.4bpp"); -const u32 gMapObjectPic_BreakableRock_1[] = INCBIN_U32("graphics/map_objects/pics/misc/breakable_rock/1.4bpp"); -const u32 gMapObjectPic_BreakableRock_2[] = INCBIN_U32("graphics/map_objects/pics/misc/breakable_rock/2.4bpp"); -const u32 gMapObjectPic_BreakableRock_3[] = INCBIN_U32("graphics/map_objects/pics/misc/breakable_rock/3.4bpp"); -const u32 gMapObjectPic_PushableBoulder[] = INCBIN_U32("graphics/map_objects/pics/misc/pushable_boulder.4bpp"); -const u32 gMapObjectPic_MrBrineysBoat_0[] = INCBIN_U32("graphics/map_objects/pics/misc/mr_brineys_boat/0.4bpp"); -const u32 gMapObjectPic_MrBrineysBoat_1[] = INCBIN_U32("graphics/map_objects/pics/misc/mr_brineys_boat/1.4bpp"); -const u32 gMapObjectPic_MrBrineysBoat_2[] = INCBIN_U32("graphics/map_objects/pics/misc/mr_brineys_boat/2.4bpp"); -const u32 gMapObjectPic_Fossil[] = INCBIN_U32("graphics/map_objects/pics/misc/fossil.4bpp"); -const u32 gMapObjectPic_SubmarineShadow[] = INCBIN_U32("graphics/map_objects/pics/misc/submarine_shadow.4bpp"); -const u16 gMapObjectPalette26[] = INCBIN_U16("graphics/map_objects/palettes/26.gbapal"); -const u32 gMapObjectPic_Truck[] = INCBIN_U32("graphics/map_objects/pics/misc/truck.4bpp"); -const u16 gMapObjectPalette14[] = INCBIN_U16("graphics/map_objects/palettes/14.gbapal"); -const u32 gMapObjectPic_MachokeCarryingBox_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/machoke_carrying_box/0.4bpp"); -const u32 gMapObjectPic_MachokeCarryingBox_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/machoke_carrying_box/1.4bpp"); -const u32 gMapObjectPic_MachokeCarryingBox_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/machoke_carrying_box/2.4bpp"); -const u32 gMapObjectPic_MachokeFacingAway_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/machoke_facing_away/0.4bpp"); -const u32 gMapObjectPic_MachokeFacingAway_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/machoke_facing_away/1.4bpp"); -const u16 gMapObjectPalette15[] = INCBIN_U16("graphics/map_objects/palettes/15.gbapal"); -const u32 gMapObjectPic_BirchsBag[] = INCBIN_U32("graphics/map_objects/pics/misc/birchs_bag.4bpp"); -const u32 gMapObjectPic_Poochyena_0[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/0.4bpp"); -const u32 gMapObjectPic_Poochyena_1[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/1.4bpp"); -const u32 gMapObjectPic_Poochyena_2[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/2.4bpp"); -const u32 gMapObjectPic_Poochyena_3[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/3.4bpp"); -const u32 gMapObjectPic_Poochyena_4[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/4.4bpp"); -const u32 gMapObjectPic_Poochyena_5[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/5.4bpp"); -const u32 gMapObjectPic_Poochyena_6[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/6.4bpp"); -const u32 gMapObjectPic_Poochyena_7[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/7.4bpp"); -const u32 gMapObjectPic_Poochyena_8[] = INCBIN_U32("graphics/map_objects/pics/pokemon/poochyena/8.4bpp"); -const u16 gMapObjectPalette16[] = INCBIN_U16("graphics/map_objects/palettes/16.gbapal"); -const u32 gMapObjectPic_CableCar[] = INCBIN_U32("graphics/map_objects/pics/misc/cable_car.4bpp"); -const u16 gMapObjectPalette20[] = INCBIN_U16("graphics/map_objects/palettes/20.gbapal"); -const u32 gMapObjectPic_SSTidal[] = INCBIN_U32("graphics/map_objects/pics/misc/ss_tidal.4bpp"); -const u16 gMapObjectPalette21[] = INCBIN_U16("graphics/map_objects/palettes/21.gbapal"); -const u32 gFieldEffectPic_BerryTreeGrowthSparkle_0[] = INCBIN_U32("graphics/field_effect_objects/pics/berry_tree_growth_sparkle/0.4bpp"); -const u32 gFieldEffectPic_BerryTreeGrowthSparkle_1[] = INCBIN_U32("graphics/field_effect_objects/pics/berry_tree_growth_sparkle/1.4bpp"); -const u32 gFieldEffectPic_BerryTreeGrowthSparkle_2[] = INCBIN_U32("graphics/field_effect_objects/pics/berry_tree_growth_sparkle/2.4bpp"); -const u32 gFieldEffectPic_BerryTreeGrowthSparkle_3[] = INCBIN_U32("graphics/field_effect_objects/pics/berry_tree_growth_sparkle/3.4bpp"); -const u32 gFieldEffectPic_BerryTreeGrowthSparkle_4[] = INCBIN_U32("graphics/field_effect_objects/pics/berry_tree_growth_sparkle/4.4bpp"); -const u32 gFieldEffectPic_BerryTreeGrowthSparkle_5[] = INCBIN_U32("graphics/field_effect_objects/pics/berry_tree_growth_sparkle/5.4bpp"); -const u32 gMapObjectPic_BerryTreeDirtPile[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/dirt_pile.4bpp"); -const u32 gMapObjectPic_BerryTreeSprout_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sprout/0.4bpp"); -const u32 gMapObjectPic_BerryTreeSprout_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sprout/1.4bpp"); -const u32 gMapObjectPic_PechaBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pecha/0.4bpp"); -const u32 gMapObjectPic_PechaBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pecha/1.4bpp"); -const u32 gMapObjectPic_PechaBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pecha/2.4bpp"); -const u32 gMapObjectPic_PechaBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pecha/3.4bpp"); -const u32 gMapObjectPic_PechaBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pecha/4.4bpp"); -const u32 gMapObjectPic_PechaBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pecha/5.4bpp"); -const u32 gMapObjectPic_KelpsyBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/kelpsy/0.4bpp"); -const u32 gMapObjectPic_KelpsyBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/kelpsy/1.4bpp"); -const u32 gMapObjectPic_KelpsyBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/kelpsy/2.4bpp"); -const u32 gMapObjectPic_KelpsyBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/kelpsy/3.4bpp"); -const u32 gMapObjectPic_KelpsyBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/kelpsy/4.4bpp"); -const u32 gMapObjectPic_KelpsyBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/kelpsy/5.4bpp"); -const u32 gMapObjectPic_WepearBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wepear/0.4bpp"); -const u32 gMapObjectPic_WepearBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wepear/1.4bpp"); -const u32 gMapObjectPic_WepearBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wepear/2.4bpp"); -const u32 gMapObjectPic_WepearBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wepear/3.4bpp"); -const u32 gMapObjectPic_WepearBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wepear/4.4bpp"); -const u32 gMapObjectPic_WepearBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wepear/5.4bpp"); -const u32 gMapObjectPic_IapapaBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/iapapa/0.4bpp"); -const u32 gMapObjectPic_IapapaBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/iapapa/1.4bpp"); -const u32 gMapObjectPic_IapapaBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/iapapa/2.4bpp"); -const u32 gMapObjectPic_IapapaBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/iapapa/3.4bpp"); -const u32 gMapObjectPic_IapapaBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/iapapa/4.4bpp"); -const u32 gMapObjectPic_IapapaBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/iapapa/5.4bpp"); -const u32 gMapObjectPic_CheriBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cheri/0.4bpp"); -const u32 gMapObjectPic_CheriBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cheri/1.4bpp"); -const u32 gMapObjectPic_CheriBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cheri/2.4bpp"); -const u32 gMapObjectPic_CheriBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cheri/3.4bpp"); -const u32 gMapObjectPic_CheriBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cheri/4.4bpp"); -const u32 gMapObjectPic_CheriBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cheri/5.4bpp"); -const u32 gMapObjectPic_FigyBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/figy/0.4bpp"); -const u32 gMapObjectPic_FigyBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/figy/1.4bpp"); -const u32 gMapObjectPic_FigyBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/figy/2.4bpp"); -const u32 gMapObjectPic_FigyBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/figy/3.4bpp"); -const u32 gMapObjectPic_FigyBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/figy/4.4bpp"); -const u32 gMapObjectPic_FigyBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/figy/5.4bpp"); -const u32 gMapObjectPic_MagoBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/mago/0.4bpp"); -const u32 gMapObjectPic_MagoBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/mago/1.4bpp"); -const u32 gMapObjectPic_MagoBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/mago/2.4bpp"); -const u32 gMapObjectPic_MagoBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/mago/3.4bpp"); -const u32 gMapObjectPic_MagoBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/mago/4.4bpp"); -const u32 gMapObjectPic_MagoBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/mago/5.4bpp"); -const u32 gMapObjectPic_LumBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lum/0.4bpp"); -const u32 gMapObjectPic_LumBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lum/1.4bpp"); -const u32 gMapObjectPic_LumBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lum/2.4bpp"); -const u32 gMapObjectPic_LumBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lum/3.4bpp"); -const u32 gMapObjectPic_LumBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lum/4.4bpp"); -const u32 gMapObjectPic_LumBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lum/5.4bpp"); -const u32 gMapObjectPic_RazzBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/razz/0.4bpp"); -const u32 gMapObjectPic_RazzBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/razz/1.4bpp"); -const u32 gMapObjectPic_RazzBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/razz/2.4bpp"); -const u32 gMapObjectPic_RazzBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/razz/3.4bpp"); -const u32 gMapObjectPic_RazzBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/razz/4.4bpp"); -const u32 gMapObjectPic_RazzBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/razz/5.4bpp"); -const u32 gMapObjectPic_GrepaBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/grepa/0.4bpp"); -const u32 gMapObjectPic_GrepaBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/grepa/1.4bpp"); -const u32 gMapObjectPic_GrepaBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/grepa/2.4bpp"); -const u32 gMapObjectPic_GrepaBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/grepa/3.4bpp"); -const u32 gMapObjectPic_GrepaBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/grepa/4.4bpp"); -const u32 gMapObjectPic_GrepaBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/grepa/5.4bpp"); -const u32 gMapObjectPic_RabutaBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rabuta/0.4bpp"); -const u32 gMapObjectPic_RabutaBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rabuta/1.4bpp"); -const u32 gMapObjectPic_RabutaBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rabuta/2.4bpp"); -const u32 gMapObjectPic_RabutaBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rabuta/3.4bpp"); -const u32 gMapObjectPic_RabutaBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rabuta/4.4bpp"); -const u32 gMapObjectPic_RabutaBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rabuta/5.4bpp"); -const u32 gMapObjectPic_NomelBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/nomel/0.4bpp"); -const u32 gMapObjectPic_NomelBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/nomel/1.4bpp"); -const u32 gMapObjectPic_NomelBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/nomel/2.4bpp"); -const u32 gMapObjectPic_NomelBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/nomel/3.4bpp"); -const u32 gMapObjectPic_NomelBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/nomel/4.4bpp"); -const u32 gMapObjectPic_NomelBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/nomel/5.4bpp"); -const u32 gMapObjectPic_LeppaBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/leppa/0.4bpp"); -const u32 gMapObjectPic_LeppaBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/leppa/1.4bpp"); -const u32 gMapObjectPic_LeppaBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/leppa/2.4bpp"); -const u32 gMapObjectPic_LeppaBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/leppa/3.4bpp"); -const u32 gMapObjectPic_LeppaBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/leppa/4.4bpp"); -const u32 gMapObjectPic_LeppaBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/leppa/5.4bpp"); -const u32 gMapObjectPic_LiechiBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/liechi/0.4bpp"); -const u32 gMapObjectPic_LiechiBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/liechi/1.4bpp"); -const u32 gMapObjectPic_LiechiBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/liechi/2.4bpp"); -const u32 gMapObjectPic_LiechiBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/liechi/3.4bpp"); -const u32 gMapObjectPic_LiechiBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/liechi/4.4bpp"); -const u32 gMapObjectPic_LiechiBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/liechi/5.4bpp"); -const u32 gMapObjectPic_HondewBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/hondew/0.4bpp"); -const u32 gMapObjectPic_HondewBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/hondew/1.4bpp"); -const u32 gMapObjectPic_HondewBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/hondew/2.4bpp"); -const u32 gMapObjectPic_HondewBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/hondew/3.4bpp"); -const u32 gMapObjectPic_HondewBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/hondew/4.4bpp"); -const u32 gMapObjectPic_HondewBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/hondew/5.4bpp"); -const u32 gMapObjectPic_AguavBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aguav/0.4bpp"); -const u32 gMapObjectPic_AguavBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aguav/1.4bpp"); -const u32 gMapObjectPic_AguavBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aguav/2.4bpp"); -const u32 gMapObjectPic_AguavBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aguav/3.4bpp"); -const u32 gMapObjectPic_AguavBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aguav/4.4bpp"); -const u32 gMapObjectPic_AguavBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aguav/5.4bpp"); -const u32 gMapObjectPic_WikiBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wiki/0.4bpp"); -const u32 gMapObjectPic_WikiBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wiki/1.4bpp"); -const u32 gMapObjectPic_WikiBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wiki/2.4bpp"); -const u32 gMapObjectPic_WikiBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wiki/3.4bpp"); -const u32 gMapObjectPic_WikiBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wiki/4.4bpp"); -const u32 gMapObjectPic_WikiBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/wiki/5.4bpp"); -const u32 gMapObjectPic_PomegBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pomeg/0.4bpp"); -const u32 gMapObjectPic_PomegBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pomeg/1.4bpp"); -const u32 gMapObjectPic_PomegBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pomeg/2.4bpp"); -const u32 gMapObjectPic_PomegBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pomeg/3.4bpp"); -const u32 gMapObjectPic_PomegBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pomeg/4.4bpp"); -const u32 gMapObjectPic_PomegBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pomeg/5.4bpp"); -const u32 gMapObjectPic_RawstBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rawst/0.4bpp"); -const u32 gMapObjectPic_RawstBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rawst/1.4bpp"); -const u32 gMapObjectPic_RawstBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rawst/2.4bpp"); -const u32 gMapObjectPic_RawstBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rawst/3.4bpp"); -const u32 gMapObjectPic_RawstBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rawst/4.4bpp"); -const u32 gMapObjectPic_RawstBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/rawst/5.4bpp"); -const u32 gMapObjectPic_SpelonBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/spelon/0.4bpp"); -const u32 gMapObjectPic_SpelonBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/spelon/1.4bpp"); -const u32 gMapObjectPic_SpelonBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/spelon/2.4bpp"); -const u32 gMapObjectPic_SpelonBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/spelon/3.4bpp"); -const u32 gMapObjectPic_SpelonBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/spelon/4.4bpp"); -const u32 gMapObjectPic_SpelonBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/spelon/5.4bpp"); -const u32 gMapObjectPic_ChestoBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/chesto/0.4bpp"); -const u32 gMapObjectPic_ChestoBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/chesto/1.4bpp"); -const u32 gMapObjectPic_ChestoBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/chesto/2.4bpp"); -const u32 gMapObjectPic_ChestoBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/chesto/3.4bpp"); -const u32 gMapObjectPic_ChestoBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/chesto/4.4bpp"); -const u32 gMapObjectPic_ChestoBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/chesto/5.4bpp"); -const u32 gMapObjectPic_OranBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/oran/0.4bpp"); -const u32 gMapObjectPic_OranBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/oran/1.4bpp"); -const u32 gMapObjectPic_OranBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/oran/2.4bpp"); -const u32 gMapObjectPic_OranBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/oran/3.4bpp"); -const u32 gMapObjectPic_OranBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/oran/4.4bpp"); -const u32 gMapObjectPic_OranBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/oran/5.4bpp"); -const u32 gMapObjectPic_PersimBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/persim/0.4bpp"); -const u32 gMapObjectPic_PersimBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/persim/1.4bpp"); -const u32 gMapObjectPic_PersimBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/persim/2.4bpp"); -const u32 gMapObjectPic_PersimBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/persim/3.4bpp"); -const u32 gMapObjectPic_PersimBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/persim/4.4bpp"); -const u32 gMapObjectPic_PersimBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/persim/5.4bpp"); -const u32 gMapObjectPic_SitrusBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sitrus/0.4bpp"); -const u32 gMapObjectPic_SitrusBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sitrus/1.4bpp"); -const u32 gMapObjectPic_SitrusBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sitrus/2.4bpp"); -const u32 gMapObjectPic_SitrusBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sitrus/3.4bpp"); -const u32 gMapObjectPic_SitrusBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sitrus/4.4bpp"); -const u32 gMapObjectPic_SitrusBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/sitrus/5.4bpp"); -const u32 gMapObjectPic_AspearBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aspear/0.4bpp"); -const u32 gMapObjectPic_AspearBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aspear/1.4bpp"); -const u32 gMapObjectPic_AspearBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aspear/2.4bpp"); -const u32 gMapObjectPic_AspearBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aspear/3.4bpp"); -const u32 gMapObjectPic_AspearBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aspear/4.4bpp"); -const u32 gMapObjectPic_AspearBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/aspear/5.4bpp"); -const u32 gMapObjectPic_PamtreBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pamtre/0.4bpp"); -const u32 gMapObjectPic_PamtreBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pamtre/1.4bpp"); -const u32 gMapObjectPic_PamtreBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pamtre/2.4bpp"); -const u32 gMapObjectPic_PamtreBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pamtre/3.4bpp"); -const u32 gMapObjectPic_PamtreBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pamtre/4.4bpp"); -const u32 gMapObjectPic_PamtreBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/pamtre/5.4bpp"); -const u32 gMapObjectPic_CornnBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cornn/0.4bpp"); -const u32 gMapObjectPic_CornnBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cornn/1.4bpp"); -const u32 gMapObjectPic_CornnBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cornn/2.4bpp"); -const u32 gMapObjectPic_CornnBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cornn/3.4bpp"); -const u32 gMapObjectPic_CornnBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cornn/4.4bpp"); -const u32 gMapObjectPic_CornnBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/cornn/5.4bpp"); -const u32 gMapObjectPic_LansatBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lansat/0.4bpp"); -const u32 gMapObjectPic_LansatBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lansat/1.4bpp"); -const u32 gMapObjectPic_LansatBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lansat/2.4bpp"); -const u32 gMapObjectPic_LansatBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lansat/3.4bpp"); -const u32 gMapObjectPic_LansatBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lansat/4.4bpp"); -const u32 gMapObjectPic_LansatBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/lansat/5.4bpp"); -const u32 gMapObjectPic_DurinBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/durin/0.4bpp"); -const u32 gMapObjectPic_DurinBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/durin/1.4bpp"); -const u32 gMapObjectPic_DurinBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/durin/2.4bpp"); -const u32 gMapObjectPic_DurinBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/durin/3.4bpp"); -const u32 gMapObjectPic_DurinBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/durin/4.4bpp"); -const u32 gMapObjectPic_DurinBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/durin/5.4bpp"); -const u32 gMapObjectPic_TamatoBerryTree_0[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/tamato/0.4bpp"); -const u32 gMapObjectPic_TamatoBerryTree_1[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/tamato/1.4bpp"); -const u32 gMapObjectPic_TamatoBerryTree_2[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/tamato/2.4bpp"); -const u32 gMapObjectPic_TamatoBerryTree_3[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/tamato/3.4bpp"); -const u32 gMapObjectPic_TamatoBerryTree_4[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/tamato/4.4bpp"); -const u32 gMapObjectPic_TamatoBerryTree_5[] = INCBIN_U32("graphics/map_objects/pics/berry_trees/tamato/5.4bpp"); -const u32 gFieldEffectPic_SurfBlob_0[] = INCBIN_U32("graphics/field_effect_objects/pics/surf_blob/0.4bpp"); -const u32 gFieldEffectPic_SurfBlob_1[] = INCBIN_U32("graphics/field_effect_objects/pics/surf_blob/1.4bpp"); -const u32 gFieldEffectPic_SurfBlob_2[] = INCBIN_U32("graphics/field_effect_objects/pics/surf_blob/2.4bpp"); -const u32 gMapObjectPic_QuintyPlump_0[] = INCBIN_U32("graphics/map_objects/pics/people/quinty_plump/0.4bpp"); -const u32 gMapObjectPic_QuintyPlump_1[] = INCBIN_U32("graphics/map_objects/pics/people/quinty_plump/1.4bpp"); -const u32 gMapObjectPic_QuintyPlump_2[] = INCBIN_U32("graphics/map_objects/pics/people/quinty_plump/2.4bpp"); -const u32 gMapObjectPic_QuintyPlump_3[] = INCBIN_U32("graphics/map_objects/pics/people/quinty_plump/3.4bpp"); -const u32 gMapObjectPic_QuintyPlump_4[] = INCBIN_U32("graphics/map_objects/pics/people/quinty_plump/4.4bpp"); -const u32 gMapObjectPic_QuintyPlump_5[] = INCBIN_U32("graphics/map_objects/pics/people/quinty_plump/5.4bpp"); -const u32 gMapObjectPic_QuintyPlump_6[] = INCBIN_U32("graphics/map_objects/pics/people/quinty_plump/6.4bpp"); -const u16 gMapObjectPalette12[] = INCBIN_U16("graphics/map_objects/palettes/12.gbapal"); -const u16 gMapObjectPalette13[] = INCBIN_U16("graphics/map_objects/palettes/13.gbapal"); - -const u32 gFieldEffectPic_ShadowSmall[] = INCBIN_U32("graphics/field_effect_objects/pics/shadow_small.4bpp"); -const u32 gFieldEffectPic_ShadowMedium[] = INCBIN_U32("graphics/field_effect_objects/pics/shadow_medium.4bpp"); -const u32 gFieldEffectPic_ShadowLarge[] = INCBIN_U32("graphics/field_effect_objects/pics/shadow_large.4bpp"); -const u32 gFieldEffectPic_ShadowExtraLarge[] = INCBIN_U32("graphics/field_effect_objects/pics/shadow_extra_large.4bpp"); -const u32 filler_8368A08[0x48] = {}; -const u32 gFieldEffectPic_CutGrass[] = INCBIN_U32("graphics/field_effect_objects/pics/cut_grass.4bpp"); -const u32 FieldEffectPic_CutGrass_Copy[] = INCBIN_U32("graphics/field_effect_objects/pics/cut_grass.4bpp"); -const u16 gFieldEffectObjectPalette6[] = INCBIN_U16("graphics/field_effect_objects/palettes/06.gbapal"); -const u32 gFieldEffectPic_Ripple_0[] = INCBIN_U32("graphics/field_effect_objects/pics/ripple/0.4bpp"); -const u32 gFieldEffectPic_Ripple_1[] = INCBIN_U32("graphics/field_effect_objects/pics/ripple/1.4bpp"); -const u32 gFieldEffectPic_Ripple_2[] = INCBIN_U32("graphics/field_effect_objects/pics/ripple/2.4bpp"); -const u32 gFieldEffectPic_Ripple_3[] = INCBIN_U32("graphics/field_effect_objects/pics/ripple/3.4bpp"); -const u32 gFieldEffectPic_Ripple_4[] = INCBIN_U32("graphics/field_effect_objects/pics/ripple/4.4bpp"); -const u32 gFieldEffectPic_Ash_0[] = INCBIN_U32("graphics/field_effect_objects/pics/ash/0.4bpp"); -const u32 gFieldEffectPic_Ash_1[] = INCBIN_U32("graphics/field_effect_objects/pics/ash/1.4bpp"); -const u32 gFieldEffectPic_Ash_2[] = INCBIN_U32("graphics/field_effect_objects/pics/ash/2.4bpp"); -const u32 gFieldEffectPic_Ash_3[] = INCBIN_U32("graphics/field_effect_objects/pics/ash/3.4bpp"); -const u32 gFieldEffectPic_Ash_4[] = INCBIN_U32("graphics/field_effect_objects/pics/ash/4.4bpp"); -const u32 gFieldEffectPic_Arrow_0[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/0.4bpp"); -const u32 gFieldEffectPic_Arrow_1[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/1.4bpp"); -const u32 gFieldEffectPic_Arrow_2[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/2.4bpp"); -const u32 gFieldEffectPic_Arrow_3[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/3.4bpp"); -const u32 gFieldEffectPic_Arrow_4[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/4.4bpp"); -const u32 gFieldEffectPic_Arrow_5[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/5.4bpp"); -const u32 gFieldEffectPic_Arrow_6[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/6.4bpp"); -const u32 gFieldEffectPic_Arrow_7[] = INCBIN_U32("graphics/field_effect_objects/pics/arrow/7.4bpp"); -const u16 gFieldEffectObjectPalette0[] = INCBIN_U16("graphics/field_effect_objects/palettes/00.gbapal"); -const u16 gFieldEffectObjectPalette1[] = INCBIN_U16("graphics/field_effect_objects/palettes/01.gbapal"); -const u32 gFieldEffectPic_Dust_0[] = INCBIN_U32("graphics/field_effect_objects/pics/dust/0.4bpp"); -const u32 gFieldEffectPic_Dust_1[] = INCBIN_U32("graphics/field_effect_objects/pics/dust/1.4bpp"); -const u32 gFieldEffectPic_Dust_2[] = INCBIN_U32("graphics/field_effect_objects/pics/dust/2.4bpp"); -const u32 unknown_8369588[] = INCBIN_U32("graphics/field_effect_objects/unknown.bin"); -const u32 gFieldEffectPic_JumpTallGrass_0[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_tall_grass/0.4bpp"); -const u32 gFieldEffectPic_JumpTallGrass_1[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_tall_grass/1.4bpp"); -const u32 gFieldEffectPic_JumpTallGrass_2[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_tall_grass/2.4bpp"); -const u32 gFieldEffectPic_JumpTallGrass_3[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_tall_grass/3.4bpp"); -const u32 UnusedGrass0[] = INCBIN_U32("graphics/field_effect_objects/pics/unused_grass/0.4bpp"); -const u32 UnusedGrass1[] = INCBIN_U32("graphics/field_effect_objects/pics/unused_grass/1.4bpp"); -const u32 UnusedGrass2[] = INCBIN_U32("graphics/field_effect_objects/pics/unused_grass/2.4bpp"); -const u32 UnusedGrass3[] = INCBIN_U32("graphics/field_effect_objects/pics/unused_grass/3.4bpp"); -const u32 gFieldEffectPic_JumpLongGrass_0[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_long_grass/0.4bpp"); -const u32 gFieldEffectPic_JumpLongGrass_1[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_long_grass/1.4bpp"); -const u32 gFieldEffectPic_JumpLongGrass_2[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_long_grass/2.4bpp"); -const u32 gFieldEffectPic_JumpLongGrass_3[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_long_grass/3.4bpp"); -const u32 gFieldEffectPic_JumpLongGrass_4[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_long_grass/4.4bpp"); -const u32 UnusedGrassLong[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_long_grass/unused.4bpp"); -const u32 gFieldEffectPic_JumpLongGrass_5[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_long_grass/5.4bpp"); -const u32 gFieldEffectPic_Unknown17_0[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/0.4bpp"); -const u32 gFieldEffectPic_Unknown17_1[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/1.4bpp"); -const u32 gFieldEffectPic_Unknown17_2[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/2.4bpp"); -const u32 gFieldEffectPic_Unknown17_3[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/3.4bpp"); -const u32 gFieldEffectPic_Unknown17_4[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/4.4bpp"); -const u32 gFieldEffectPic_Unknown17_5[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/5.4bpp"); -const u32 gFieldEffectPic_Unknown17_6[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/6.4bpp"); -const u32 gFieldEffectPic_Unknown17_7[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_17/7.4bpp"); -const u32 gFieldEffectPic_Unknown18_0[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_18/0.4bpp"); -const u32 gFieldEffectPic_Unknown18_1[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_18/1.4bpp"); -const u32 gFieldEffectPic_Unknown18_2[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_18/2.4bpp"); -const u32 gFieldEffectPic_Unknown18_3[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_18/3.4bpp"); -const u32 gFieldEffectPic_LongGrass_0[] = INCBIN_U32("graphics/field_effect_objects/pics/long_grass/0.4bpp"); -const u32 gFieldEffectPic_LongGrass_1[] = INCBIN_U32("graphics/field_effect_objects/pics/long_grass/1.4bpp"); -const u32 gFieldEffectPic_LongGrass_2[] = INCBIN_U32("graphics/field_effect_objects/pics/long_grass/2.4bpp"); -const u32 gFieldEffectPic_LongGrass_3[] = INCBIN_U32("graphics/field_effect_objects/pics/long_grass/3.4bpp"); -const u32 gFieldEffectPic_TallGrass_0[] = INCBIN_U32("graphics/field_effect_objects/pics/tall_grass/0.4bpp"); -const u32 gFieldEffectPic_TallGrass_1[] = INCBIN_U32("graphics/field_effect_objects/pics/tall_grass/1.4bpp"); -const u32 gFieldEffectPic_TallGrass_2[] = INCBIN_U32("graphics/field_effect_objects/pics/tall_grass/2.4bpp"); -const u32 gFieldEffectPic_TallGrass_3[] = INCBIN_U32("graphics/field_effect_objects/pics/tall_grass/3.4bpp"); -const u32 gFieldEffectPic_TallGrass_4[] = INCBIN_U32("graphics/field_effect_objects/pics/tall_grass/4.4bpp"); -const u32 gFieldEffectPic_ShortGrass_0[] = INCBIN_U32("graphics/field_effect_objects/pics/short_grass/0.4bpp"); -const u32 gFieldEffectPic_ShortGrass_1[] = INCBIN_U32("graphics/field_effect_objects/pics/short_grass/1.4bpp"); -const u32 gFieldEffectPic_SandFootprints_0[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_footprints/0.4bpp"); -const u32 gFieldEffectPic_SandFootprints_1[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_footprints/1.4bpp"); -const u32 gFieldEffectPic_DeepSandFootprints_0[] = INCBIN_U32("graphics/field_effect_objects/pics/deep_sand_footprints/0.4bpp"); -const u32 gFieldEffectPic_DeepSandFootprints_1[] = INCBIN_U32("graphics/field_effect_objects/pics/deep_sand_footprints/1.4bpp"); -const u32 gFieldEffectPic_BikeTireTracks_0[] = INCBIN_U32("graphics/field_effect_objects/pics/bike_tire_tracks/0.4bpp"); -const u32 gFieldEffectPic_BikeTireTracks_1[] = INCBIN_U32("graphics/field_effect_objects/pics/bike_tire_tracks/1.4bpp"); -const u32 gFieldEffectPic_BikeTireTracks_2[] = INCBIN_U32("graphics/field_effect_objects/pics/bike_tire_tracks/2.4bpp"); -const u32 gFieldEffectPic_BikeTireTracks_3[] = INCBIN_U32("graphics/field_effect_objects/pics/bike_tire_tracks/3.4bpp"); -const u32 gFieldEffectPic_Unknown19_0[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_19/0.4bpp"); -const u32 gFieldEffectPic_Unknown19_1[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_19/1.4bpp"); -const u32 gFieldEffectPic_Unknown19_2[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_19/2.4bpp"); -const u32 gFieldEffectPic_Unknown19_3[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_19/3.4bpp"); -const u32 gFieldEffectPic_SandPile_0[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_pile/0.4bpp"); -const u32 gFieldEffectPic_SandPile_1[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_pile/1.4bpp"); -const u32 gFieldEffectPic_SandPile_2[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_pile/2.4bpp"); -const u32 gFieldEffectPic_JumpBigSplash_0[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_big_splash/0.4bpp"); -const u32 gFieldEffectPic_JumpBigSplash_1[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_big_splash/1.4bpp"); -const u32 gFieldEffectPic_JumpBigSplash_2[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_big_splash/2.4bpp"); -const u32 gFieldEffectPic_JumpBigSplash_3[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_big_splash/3.4bpp"); -const u32 gFieldEffectPic_Splash_0[] = INCBIN_U32("graphics/field_effect_objects/pics/splash/0.4bpp"); -const u32 gFieldEffectPic_Splash_1[] = INCBIN_U32("graphics/field_effect_objects/pics/splash/1.4bpp"); -const u32 gFieldEffectPic_JumpSmallSplash_0[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_small_splash/0.4bpp"); -const u32 gFieldEffectPic_JumpSmallSplash_1[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_small_splash/1.4bpp"); -const u32 gFieldEffectPic_JumpSmallSplash_2[] = INCBIN_U32("graphics/field_effect_objects/pics/jump_small_splash/2.4bpp"); -const u32 gFieldEffectPic_Unknown20_0[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_20/0.4bpp"); -const u32 gFieldEffectPic_Unknown20_1[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_20/1.4bpp"); -const u32 gFieldEffectPic_Unknown20_2[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_20/2.4bpp"); -const u32 gFieldEffectPic_Unknown20_3[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_20/3.4bpp"); -const u32 gFieldEffectPic_Unknown20_4[] = INCBIN_U32("graphics/field_effect_objects/pics/unknown_20/4.4bpp"); -const u32 gFieldEffectPic_TreeDisguise_0[] = INCBIN_U32("graphics/field_effect_objects/pics/tree_disguise/0.4bpp"); -const u32 gFieldEffectPic_TreeDisguise_1[] = INCBIN_U32("graphics/field_effect_objects/pics/tree_disguise/1.4bpp"); -const u32 gFieldEffectPic_TreeDisguise_2[] = INCBIN_U32("graphics/field_effect_objects/pics/tree_disguise/2.4bpp"); -const u32 gFieldEffectPic_TreeDisguise_3[] = INCBIN_U32("graphics/field_effect_objects/pics/tree_disguise/3.4bpp"); -const u32 gFieldEffectPic_TreeDisguise_4[] = INCBIN_U32("graphics/field_effect_objects/pics/tree_disguise/4.4bpp"); -const u32 gFieldEffectPic_TreeDisguise_5[] = INCBIN_U32("graphics/field_effect_objects/pics/tree_disguise/5.4bpp"); -const u32 gFieldEffectPic_TreeDisguise_6[] = INCBIN_U32("graphics/field_effect_objects/pics/tree_disguise/6.4bpp"); -const u32 gFieldEffectPic_MountainDisguise_0[] = INCBIN_U32("graphics/field_effect_objects/pics/mountain_disguise/0.4bpp"); -const u32 gFieldEffectPic_MountainDisguise_1[] = INCBIN_U32("graphics/field_effect_objects/pics/mountain_disguise/1.4bpp"); -const u32 gFieldEffectPic_MountainDisguise_2[] = INCBIN_U32("graphics/field_effect_objects/pics/mountain_disguise/2.4bpp"); -const u32 gFieldEffectPic_MountainDisguise_3[] = INCBIN_U32("graphics/field_effect_objects/pics/mountain_disguise/3.4bpp"); -const u32 gFieldEffectPic_MountainDisguise_4[] = INCBIN_U32("graphics/field_effect_objects/pics/mountain_disguise/4.4bpp"); -const u32 gFieldEffectPic_MountainDisguise_5[] = INCBIN_U32("graphics/field_effect_objects/pics/mountain_disguise/5.4bpp"); -const u32 gFieldEffectPic_MountainDisguise_6[] = INCBIN_U32("graphics/field_effect_objects/pics/mountain_disguise/6.4bpp"); -const u32 gFieldEffectPic_SandDisguise_0[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_disguise/0.4bpp"); -const u32 gFieldEffectPic_SandDisguise_1[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_disguise/1.4bpp"); -const u32 gFieldEffectPic_SandDisguise_2[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_disguise/2.4bpp"); -const u32 gFieldEffectPic_SandDisguise_3[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_disguise/3.4bpp"); -const u32 gFieldEffectPic_SandDisguise_4[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_disguise/4.4bpp"); -const u32 gFieldEffectPic_SandDisguise_5[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_disguise/5.4bpp"); -const u32 gFieldEffectPic_SandDisguise_6[] = INCBIN_U32("graphics/field_effect_objects/pics/sand_disguise/6.4bpp"); -const u32 gFieldEffectPic_HotSpringsWater[] = INCBIN_U32("graphics/field_effect_objects/pics/hot_springs_water.4bpp"); -const u16 gFieldEffectObjectPalette2[] = INCBIN_U16("graphics/field_effect_objects/palettes/02.gbapal"); -const u32 gFieldEffectPic_PopOutOfAsh_0[] = INCBIN_U32("graphics/field_effect_objects/pics/pop_out_of_ash/0.4bpp"); -const u32 gFieldEffectPic_PopOutOfAsh_1[] = INCBIN_U32("graphics/field_effect_objects/pics/pop_out_of_ash/1.4bpp"); -const u32 gFieldEffectPic_PopOutOfAsh_2[] = INCBIN_U32("graphics/field_effect_objects/pics/pop_out_of_ash/2.4bpp"); -const u32 gFieldEffectPic_PopOutOfAsh_3[] = INCBIN_U32("graphics/field_effect_objects/pics/pop_out_of_ash/3.4bpp"); -const u32 gFieldEffectPic_PopOutOfAsh_4[] = INCBIN_U32("graphics/field_effect_objects/pics/pop_out_of_ash/4.4bpp"); -const u32 gFieldEffectPic_LavaridgeGymWarp_0[] = INCBIN_U32("graphics/field_effect_objects/pics/lavaridge_gym_warp/0.4bpp"); -const u32 gFieldEffectPic_LavaridgeGymWarp_1[] = INCBIN_U32("graphics/field_effect_objects/pics/lavaridge_gym_warp/1.4bpp"); -const u32 gFieldEffectPic_LavaridgeGymWarp_2[] = INCBIN_U32("graphics/field_effect_objects/pics/lavaridge_gym_warp/2.4bpp"); -const u32 gFieldEffectPic_LavaridgeGymWarp_3[] = INCBIN_U32("graphics/field_effect_objects/pics/lavaridge_gym_warp/3.4bpp"); -const u32 gFieldEffectPic_LavaridgeGymWarp_4[] = INCBIN_U32("graphics/field_effect_objects/pics/lavaridge_gym_warp/4.4bpp"); -const u32 gFieldEffectPic_Bubbles_0[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/0.4bpp"); -const u32 gFieldEffectPic_Bubbles_1[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/1.4bpp"); -const u32 gFieldEffectPic_Bubbles_2[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/2.4bpp"); -const u32 gFieldEffectPic_Bubbles_3[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/3.4bpp"); -const u32 gFieldEffectPic_Bubbles_4[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/4.4bpp"); -const u32 gFieldEffectPic_Bubbles_5[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/5.4bpp"); -const u32 gFieldEffectPic_Bubbles_6[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/6.4bpp"); -const u32 gFieldEffectPic_Bubbles_7[] = INCBIN_U32("graphics/field_effect_objects/pics/bubbles/7.4bpp"); -const u32 gFieldEffectPic_Sparkle_0[] = INCBIN_U32("graphics/field_effect_objects/pics/sparkle/0.4bpp"); -const u32 gFieldEffectPic_Sparkle_1[] = INCBIN_U32("graphics/field_effect_objects/pics/sparkle/1.4bpp"); -const u16 gFieldEffectObjectPalette3[] = INCBIN_U16("graphics/field_effect_objects/palettes/03.gbapal"); -const u32 gFieldEffectPic_Bird[] = INCBIN_U32("graphics/field_effect_objects/pics/bird.4bpp"); - -void (*const gUnknown_0836DA88[])(struct Sprite *) = -{ - sub_805C884, - sub_805CDE8, - sub_805C8AC, - sub_805CF28, - sub_805CF28, - sub_805D0AC, - sub_805D0AC, - sub_805D230, - sub_805D230, - sub_805D230, - sub_805D230, - sub_80587B4, - FieldObjectCB_BerryTree, - sub_805D4F4, - sub_805D634, - sub_805D774, - sub_805D8B4, - sub_805D9F4, - sub_805DB34, - sub_805DC74, - sub_805DDB4, - sub_805DEF4, - sub_805E034, - sub_805E174, - sub_805E278, - sub_805E37C, - sub_805E37C, - sub_805E37C, - sub_805E37C, - sub_805E5DC, - sub_805E668, - sub_805E6F4, - sub_805E780, - sub_805E80C, - sub_805E898, - sub_805E924, - sub_805E9B0, - sub_805EA3C, - sub_805EAC8, - sub_805EB54, - sub_805EBE0, - sub_805EC6C, - sub_805ECF8, - sub_805ED84, - sub_805EE10, - sub_805EE9C, - sub_805EF28, - sub_805EFB4, - sub_805F040, - sub_805F0CC, - sub_805F158, - sub_805F1E4, - sub_805F270, - sub_805F2FC, - sub_805F2FC, - sub_805F2FC, - sub_805F2FC, - FieldObjectCB_TreeDisguise, - FieldObjectCB_MountainDisguise, - sub_805F8E0, - sub_805F8E0, - sub_805F8E0, - sub_805F8E0, - FieldObjectCB_Hidden1, - sub_805FB20, - sub_805FB20, - sub_805FB20, - sub_805FB20, - sub_805FB90, - sub_805FB90, - sub_805FB90, - sub_805FB90, - sub_805FC00, - sub_805FC00, - sub_805FC00, - sub_805FC00, - sub_805FC70 -}; - -const u8 gUnknown_0836DBBC[] = {0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -const u8 gUnknown_0836DC09[] = {DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_WEST, DIR_NORTH, DIR_NORTH, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST, DIR_NORTH, DIR_WEST, DIR_SOUTH, DIR_EAST, DIR_WEST, DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_EAST, DIR_NORTH, DIR_WEST, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_NORTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_NORTH, DIR_WEST, DIR_EAST, DIR_SOUTH}; - -#include "data/field_map_obj/map_object_graphics_info_pointers.h" -#include "data/field_map_obj/field_effect_object_template_pointers.h" -#include "data/field_map_obj/map_object_pic_tables.h" -#include "data/field_map_obj/map_object_anims.h" -#include "data/field_map_obj/base_oam.h" -#include "data/field_map_obj/map_object_subsprites.h" -#include "data/field_map_obj/map_object_graphics_info.h" - -const struct SpritePalette gUnknown_0837377C[] = { - {gMapObjectPalette0, 0x1103}, - {gMapObjectPalette1, 0x1104}, - {gMapObjectPalette2, 0x1105}, - {gMapObjectPalette3, 0x1106}, - {gMapObjectPalette4, 0x1107}, - {gMapObjectPalette5, 0x1108}, - {gMapObjectPalette6, 0x1109}, - {gMapObjectPalette7, 0x110A}, - {gMapObjectPalette8, 0x1100}, - {gMapObjectPalette9, 0x1101}, - {gMapObjectPalette10, 0x1102}, - {gMapObjectPalette11, 0x1115}, - {gMapObjectPalette12, 0x110B}, - {gMapObjectPalette13, 0x110C}, - {gMapObjectPalette14, 0x110D}, - {gMapObjectPalette15, 0x110E}, - {gMapObjectPalette16, 0x110F}, - {gMapObjectPalette17, 0x1110}, - {gMapObjectPalette18, 0x1111}, - {gMapObjectPalette19, 0x1112}, - {gMapObjectPalette20, 0x1113}, - {gMapObjectPalette21, 0x1114}, - {gMapObjectPalette22, 0x1116}, - {gMapObjectPalette23, 0x1117}, - {gMapObjectPalette24, 0x1118}, - {gMapObjectPalette25, 0x1119}, - {gMapObjectPalette26, 0x111A}, - {NULL, 0x0000} -}; - -const u16 Palettes_837385C[] = { - 0x1101, - 0x1101, - 0x1101, - 0x1101 -}; - -const u16 Palettes_8373864[] = { - 0x1111, - 0x1111, - 0x1111, - 0x1111 -}; - -const u16 Palettes_837386C[] = { - 0x1115, - 0x1115, - 0x1115, - 0x1115 -}; - -const struct PairedPalettes gUnknown_08373874[] = { - {0x1100, Palettes_837385C}, - {0x1110, Palettes_837385C}, - {0x1115, Palettes_837386C}, - {0x11FF, NULL} -}; - -const u16 Palettes_8373894[] = { - 0x110C, - 0x110C, - 0x110C, - 0x110C -}; - -const u16 Palettes_837389C[] = { - 0x110D, - 0x110D, - 0x110D, - 0x110D -}; - -const u16 Palettes_83738A4[] = { - 0x110E, - 0x110E, - 0x110E, - 0x110E -}; - -const u16 Palettes_83738AC[] = { - 0x1112, - 0x1112, - 0x1112, - 0x1112 -}; - -const u16 Palettes_83738B4[] = { - 0x1113, - 0x1113, - 0x1113, - 0x1113 -}; - -const u16 Palettes_83738BC[] = { - 0x1114, - 0x1114, - 0x1114, - 0x1114 -}; - -const u16 Palettes_83738C4[] = { - 0x111A, - 0x111A, - 0x111A, - 0x111A -}; - -const u16 Palettes_83738CC[] = { - 0x1117, - 0x1117, - 0x1117, - 0x1117 -}; - -const u16 Palettes_83738D4[] = { - 0x1119, - 0x1119, - 0x1119, - 0x1119 -}; - -const u16 Palettes_83738DC[] = { - 0x1109, - 0x1109, - 0x1109, - 0x1109 -}; - -const struct PairedPalettes gUnknown_083738E4[] = { - {0x1100, Palettes_837385C}, - {0x1110, Palettes_837385C}, - {0x110B, Palettes_8373894}, - {0x110D, Palettes_837389C}, - {0x110E, Palettes_83738A4}, - {0x1112, Palettes_83738AC}, - {0x1113, Palettes_83738B4}, - {0x1114, Palettes_83738BC}, - {0x1116, Palettes_83738CC}, - {0x1118, Palettes_83738D4}, - {0x1105, Palettes_83738DC}, - {0x111A, Palettes_83738C4}, - {0x11FF, NULL} -}; - -const u16 Unknown_837394C[] = { - 0x1100, - 0x1101, - 0x1103, - 0x1104, - 0x1105, - 0x1106, - 0x1107, - 0x1108, - 0x1109, - 0x110A -}; - -const u16 Unknown_8373960[] = { - 0x1100, - 0x1101, - 0x1103, - 0x1104, - 0x1105, - 0x1106, - 0x1107, - 0x1108, - 0x1109, - 0x110A -}; - -const u16 Unknown_8373974[] = { - 0x1100, - 0x1101, - 0x1103, - 0x1104, - 0x1105, - 0x1106, - 0x1107, - 0x1108, - 0x1109, - 0x110A -}; - -const u16 Unknown_8373988[] = { - 0x1100, - 0x1101, - 0x1103, - 0x1104, - 0x1105, - 0x1106, - 0x1107, - 0x1108, - 0x1109, - 0x110A -}; - -const u16 *const gUnknown_0837399C[] = { - Unknown_837394C, - Unknown_8373960, - Unknown_8373974, - Unknown_8373988 -}; - -#include "data/field_map_obj/berry_tree_graphics_tables.h" -#include "data/field_map_obj/field_effect_objects.h" - -const s16 gUnknown_0837520C[] = {0x20, 0x40, 0x60, 0x80}; -const s16 gUnknown_08375204[] = {0x20, 0x40, 0x80, 0xc0}; -const s16 gUnknown_0837521C[] = {0x20, 0x30, 0x40, 0x50}; - -#include "data/field_map_obj/callback_subroutine_pointers.h" - -const u8 gUnknown_083755F4[] = {0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0x00, 0x01, 0x01}; -const u8 gUnknown_083755FD[] = {0x04, 0x04, 0x05, 0x06, 0x07, 0x04, 0x04, 0x05, 0x05}; -const u8 gUnknown_08375606[] = {0x08, 0x08, 0x09, 0x0A, 0x0B, 0x08, 0x08, 0x09, 0x09}; -const u8 gUnknown_0837560F[] = {0x0C, 0x0C, 0x0D, 0x0E, 0x0F, 0x0C, 0x0C, 0x0D, 0x0D}; -const u8 gUnknown_08375618[] = {0x10, 0x10, 0x11, 0x12, 0x13, 0x10, 0x10, 0x11, 0x11}; -const u8 gUnknown_08375621[] = {0x14, 0x14, 0x15, 0x16, 0x17, 0x14, 0x14, 0x15, 0x15}; -const u8 gUnknown_0837562A[] = {0x14, 0x14, 0x15, 0x16, 0x17, 0x14, 0x14, 0x15, 0x15}; -const u8 gUnknown_08375633[] = {0x18, 0x18, 0x19, 0x1A, 0x1B, 0x18, 0x18, 0x19, 0x19}; -const u8 gUnknown_0837563C[] = {0x1C, 0x1C, 0x1D, 0x1E, 0x1F, 0x1C, 0x1C, 0x1D, 0x1D}; -const u8 gUnknown_08375645[] = {0x20, 0x20, 0x21, 0x22, 0x23, 0x20, 0x20, 0x21, 0x21}; -const u8 gUnknown_0837564E[] = {0x24, 0x24, 0x25, 0x26, 0x27, 0x24, 0x24, 0x25, 0x25}; -const u8 gUnknown_08375657[] = {0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0x00, 0x01, 0x01}; -const u8 gUnknown_08375660[] = {0x04, 0x04, 0x05, 0x06, 0x07, 0x04, 0x04, 0x05, 0x05}; -const u8 gUnknown_08375669[] = {0x08, 0x08, 0x09, 0x0A, 0x0B, 0x08, 0x08, 0x09, 0x09}; -const u8 gUnknown_08375672[] = {0x14, 0x14, 0x15, 0x16, 0x17, 0x14, 0x14, 0x15, 0x15}; -const u8 gUnknown_0837567B[] = {0x08, 0x08, 0x07, 0x09, 0x0A, 0x08, 0x08, 0x07, 0x07}; - -bool8 (*const gUnknown_08375684[])(u8) = { - MetatileBehavior_IsSouthBlocked, - MetatileBehavior_IsNorthBlocked, - MetatileBehavior_IsWestBlocked, - MetatileBehavior_IsEastBlocked -}; - -bool8 (*const gUnknown_08375694[])(u8) = { - MetatileBehavior_IsNorthBlocked, - MetatileBehavior_IsSouthBlocked, - MetatileBehavior_IsEastBlocked, - MetatileBehavior_IsWestBlocked -}; - -const struct Coords16 gDirectionToVector[] = { - { 0, 0}, - { 0, 1}, - { 0, -1}, - {-1, 0}, - { 1, 0}, - {-1, 1}, - { 1, 1}, - {-1, -1}, - { 1, -1} -}; - -const u8 gUnknown_083756C8[] = {0x00, 0x00, 0x01, 0x02, 0x03}; -const u8 gUnknown_083756CD[] = {0x04, 0x04, 0x05, 0x06, 0x07}; -const u8 gUnknown_083756D2[] = {0x08, 0x08, 0x09, 0x0A, 0x0B}; -const u8 gUnknown_083756D7[] = {0x15, 0x15, 0x16, 0x17, 0x18}; -const u8 gUnknown_083756DC[] = {0x29, 0x29, 0x2A, 0x2B, 0x2C}; -const u8 gUnknown_083756E1[] = {0x2D, 0x2D, 0x2E, 0x2F, 0x30}; -const u8 gUnknown_083756E6[] = {0x31, 0x31, 0x32, 0x33, 0x34}; -const u8 gUnknown_083756EB[] = {0x35, 0x35, 0x36, 0x37, 0x38}; -const u8 gUnknown_083756F0[] = {0x0C, 0x0C, 0x0D, 0x0E, 0x0F}; -const u8 gUnknown_083756F5[] = {0x46, 0x46, 0x47, 0x48, 0x49}; -const u8 gUnknown_083756FA[] = {0x4B, 0x4B, 0x4A, 0x4D, 0x4C}; -const u8 gUnknown_083756FF[] = {0x42, 0x42, 0x43, 0x44, 0x45}; -const u8 gUnknown_08375704[] = {0x3A, 0x3A, 0x3B, 0x3C, 0x3D}; -const u8 gUnknown_08375709[] = {0x19, 0x19, 0x1A, 0x1B, 0x1C}; -const u8 gUnknown_0837570E[] = {0x1D, 0x1D, 0x1E, 0x1F, 0x20}; -const u8 gUnknown_08375713[] = {0x21, 0x21, 0x22, 0x23, 0x24}; -const u8 gUnknown_08375718[] = {0x25, 0x25, 0x26, 0x27, 0x28}; -const u8 gUnknown_0837571D[] = {0x62, 0x62, 0x63, 0x64, 0x65}; -const u8 gUnknown_08375722[] = {0x66, 0x66, 0x67, 0x68, 0x69}; -const u8 gUnknown_08375727[] = {0x6A, 0x6A, 0x6B, 0x6C, 0x6D}; -const u8 gUnknown_0837572C[] = {0x6E, 0x6E, 0x6F, 0x70, 0x71}; -const u8 gUnknown_08375731[] = {0x72, 0x72, 0x73, 0x74, 0x75}; -const u8 gUnknown_08375736[] = {0x76, 0x76, 0x77, 0x78, 0x79}; -const u8 gUnknown_0837573B[] = {0x7A, 0x7A, 0x7B, 0x7C, 0x7D}; -const u8 gUnknown_08375740[] = {0x7E, 0x7E, 0x7F, 0x80, 0x81}; -const u8 gUnknown_08375745[] = {0x82, 0x82, 0x83, 0x84, 0x85}; -const u8 gUnknown_0837574A[] = {0x86, 0x86, 0x87, 0x88, 0x89}; - -const u8 gUnknown_0837574F[] = {2, 1, 4, 3, 8, 7, 6, 5}; - -const u8 gUnknown_08375757[][4] = { - {2, 1, 4, 3}, - {1, 2, 3, 4}, - {3, 4, 2, 1}, - {4, 3, 1, 2} -}; - -const u8 gUnknown_08375767[][4] = { - {2, 1, 4, 3}, - {1, 2, 3, 4}, - {4, 3, 1, 2}, - {3, 4, 2, 1} -}; - -#include "data/field_map_obj/anim_func_ptrs.h" - -// text - -extern void strange_npc_table_clear(void); -extern void ClearPlayerAvatarInfo(void); -extern void npc_load_two_palettes__no_record(u16, u8); -extern void npc_load_two_palettes__and_record(u16, u8); -extern void sub_8060388(s16, s16, s16 *, s16 *); -void sub_80634D0(struct MapObject *, struct Sprite *); -extern void pal_patch_for_npc(u16, u16); -extern void CameraObjectReset1(void); - -extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; -extern u8 gReservedSpritePaletteCount; -extern struct Camera gUnknown_0202E844; - -static u8 gUnknown_030005A4; -static u16 gUnknown_030005A6; - -struct MapObject gMapObjects[16]; - -void npc_clear_ids_and_state(struct MapObject *mapObj) -{ - memset(mapObj, 0, sizeof(struct MapObject)); - mapObj->localId = 0xFF; - mapObj->mapNum = 0xFF; - mapObj->mapGroup = 0xFF; - mapObj->mapobj_unk_1C = 0xFF; -} - -void npcs_clear_ids_and_state(void) -{ - u8 i; - - for (i = 0; i < 16; i++) - npc_clear_ids_and_state(&gMapObjects[i]); -} - -void sub_805AA98(void) -{ - strange_npc_table_clear(); - npcs_clear_ids_and_state(); - ClearPlayerAvatarInfo(); - sub_805AAB0(); -} - -void sub_805AAB0(void) -{ - u8 spriteId; - - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 0x1F); - - gSprites[spriteId].oam.affineMode = 1; - InitSpriteAffineAnim(&gSprites[spriteId]); - StartSpriteAffineAnim(&gSprites[spriteId], 0); - gSprites[spriteId].invisible = 1; - - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 0x1F); - - gSprites[spriteId].oam.affineMode = 1; - InitSpriteAffineAnim(&gSprites[spriteId]); - StartSpriteAffineAnim(&gSprites[spriteId], 1); - gSprites[spriteId].invisible = 1; -} - -u8 sub_805AB54(void) -{ - u8 i; - - for (i = 0; i < 16; i++) - { - if (!gMapObjects[i].active) - break; - } - return i; -} - -u8 GetFieldObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) -{ - if (localId <= 0xFE) - return GetFieldObjectIdByLocalIdAndMapInternal(localId, mapNum, mapGroup); - else - return GetFieldObjectIdByLocalId(localId); -} - -bool8 TryGetFieldObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 *mapObjectId) -{ - *mapObjectId = GetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup); - if (*mapObjectId == 16) - return TRUE; - else - return FALSE; -} - -u8 GetFieldObjectIdByXY(s16 x, s16 y) -{ - u8 i; - - for (i = 0; i < 16; i++) - { - if (gMapObjects[i].active && gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y) - break; - } - return i; -} - -u8 GetFieldObjectIdByLocalIdAndMapInternal(u8 localId, u8 mapNum, u8 mapGroup) -{ - u8 i; - - for (i = 0; i < 16; i++) - { - if (gMapObjects[i].active && gMapObjects[i].localId == localId && gMapObjects[i].mapNum == mapNum && gMapObjects[i].mapGroup == mapGroup) - return i; - } - return 16; -} - -u8 GetFieldObjectIdByLocalId(u8 localId) -{ - u8 i; - - for (i = 0; i < 16; i++) - { - if (gMapObjects[i].active && gMapObjects[i].localId == localId) - return i; - } - return 16; -} - -#ifdef NONMATCHING -u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c) -{ - struct MapObject2 *mapObj; //TODO: resolve the mapobj_unk_19b weirdness - u8 var; - u16 r3; - u16 r2; - - //asm("nop"::"r"(b)); - if (GetAvailableFieldObjectSlot(template->localId, b, c, &var) != 0) - return 16; - //_0805ACCE - mapObj = (struct MapObject2 *)&gMapObjects[var]; - npc_clear_ids_and_state((struct MapObject *)mapObj); - r3 = template->x + 7; - r2 = template->y + 7; - mapObj->active = TRUE; - mapObj->mapobj_bit_2 = TRUE; - mapObj->graphicsId = template->graphicsId; - mapObj->animPattern = template->movementType; - mapObj->localId = template->localId; - mapObj->mapNum = b; - mapObj->mapGroup = c; - mapObj->coords1.x = r3; - mapObj->coords1.y = r2; - mapObj->coords2.x = r3; - mapObj->coords2.y = r2; - mapObj->coords3.x = r3; - mapObj->coords3.y = r2; - mapObj->mapobj_unk_0B_0 = template->elevation; - mapObj->elevation = template->elevation; - mapObj->mapobj_unk_19 = template->unkA_0; - mapObj->mapobj_unk_19b = template->unkA_4; - mapObj->trainerType = template->unkC; - mapObj->trainerRange_berryTreeId = template->unkE; - mapObj->mapobj_unk_20 = gUnknown_0836DC09[template->movementType]; - FieldObjectSetDirection((struct MapObject *)mapObj, mapObj->mapobj_unk_20); - FieldObjectHandleDynamicGraphicsId(mapObj); - //asm("":::"r5","r6"); - if (gUnknown_0836DBBC[mapObj->animPattern] != 0) - { - if (mapObj->mapobj_unk_19 == 0) - mapObj->mapobj_unk_19++; - if (mapObj->mapobj_unk_19b == 0) - mapObj->mapobj_unk_19b++; - } - return var; -} -#else -__attribute__((naked)) -u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - sub sp, 0x4\n\ - adds r5, r0, 0\n\ - lsls r1, 24\n\ - lsrs r6, r1, 24\n\ - lsls r2, 24\n\ - lsrs r7, r2, 24\n\ - ldrb r0, [r5]\n\ - adds r1, r6, 0\n\ - adds r2, r7, 0\n\ - mov r3, sp\n\ - bl GetAvailableFieldObjectSlot\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0805ACCE\n\ - movs r0, 0x10\n\ - b _0805ADC2\n\ -_0805ACCE:\n\ - mov r0, sp\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 3\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r1, _0805ADD0 @ =gMapObjects\n\ - adds r4, r0, r1\n\ - adds r0, r4, 0\n\ - bl npc_clear_ids_and_state\n\ - ldrh r3, [r5, 0x4]\n\ - adds r3, 0x7\n\ - lsls r3, 16\n\ - lsrs r3, 16\n\ - ldrh r2, [r5, 0x6]\n\ - adds r2, 0x7\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - ldrb r0, [r4]\n\ - movs r1, 0x1\n\ - orrs r0, r1\n\ - movs r1, 0x4\n\ - orrs r0, r1\n\ - strb r0, [r4]\n\ - ldrb r0, [r5, 0x1]\n\ - strb r0, [r4, 0x5]\n\ - ldrb r0, [r5, 0x9]\n\ - strb r0, [r4, 0x6]\n\ - ldrb r0, [r5]\n\ - strb r0, [r4, 0x8]\n\ - strb r6, [r4, 0x9]\n\ - strb r7, [r4, 0xA]\n\ - strh r3, [r4, 0xC]\n\ - strh r2, [r4, 0xE]\n\ - strh r3, [r4, 0x10]\n\ - strh r2, [r4, 0x12]\n\ - strh r3, [r4, 0x14]\n\ - strh r2, [r4, 0x16]\n\ - ldrb r0, [r5, 0x8]\n\ - movs r7, 0xF\n\ - adds r1, r7, 0\n\ - ands r1, r0\n\ - ldrb r2, [r4, 0xB]\n\ - movs r0, 0x10\n\ - negs r0, r0\n\ - mov r8, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r4, 0xB]\n\ - ldrb r1, [r5, 0x8]\n\ - lsls r1, 4\n\ - ands r0, r7\n\ - orrs r0, r1\n\ - strb r0, [r4, 0xB]\n\ - ldrb r1, [r5, 0xA]\n\ - lsls r1, 28\n\ - movs r0, 0xF\n\ - mov r9, r0\n\ - lsrs r1, 28\n\ - ldrb r2, [r4, 0x19]\n\ - mov r0, r8\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x19]\n\ - ldrb r1, [r5, 0xA]\n\ - lsrs r1, 4\n\ - lsls r1, 4\n\ - ands r0, r7\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x19]\n\ - ldrh r0, [r5, 0xC]\n\ - strb r0, [r4, 0x7]\n\ - ldrh r0, [r5, 0xE]\n\ - strb r0, [r4, 0x1D]\n\ - ldr r1, _0805ADD4 @ =gUnknown_0836DC09\n\ - ldrb r0, [r5, 0x9]\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - adds r0, r4, 0\n\ - adds r0, 0x20\n\ - strb r1, [r0]\n\ - ldrb r1, [r0]\n\ - adds r0, r4, 0\n\ - bl FieldObjectSetDirection\n\ - adds r0, r4, 0\n\ - bl FieldObjectHandleDynamicGraphicsId\n\ - ldr r1, _0805ADD8 @ =gUnknown_0836DBBC\n\ - ldrb r0, [r4, 0x6]\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _0805ADBE\n\ - ldrb r2, [r4, 0x19]\n\ - adds r0, r7, 0\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - bne _0805ADA6\n\ - lsls r0, r2, 28\n\ - lsrs r0, 28\n\ - adds r0, 0x1\n\ - mov r1, r9\n\ - ands r0, r1\n\ - mov r1, r8\n\ - ands r1, r2\n\ - orrs r1, r0\n\ - strb r1, [r4, 0x19]\n\ -_0805ADA6:\n\ - ldrb r2, [r4, 0x19]\n\ - movs r0, 0xF0\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - bne _0805ADBE\n\ - lsrs r1, r2, 4\n\ - adds r1, 0x1\n\ - lsls r1, 4\n\ - adds r0, r7, 0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x19]\n\ -_0805ADBE:\n\ - mov r0, sp\n\ - ldrb r0, [r0]\n\ -_0805ADC2:\n\ - add sp, 0x4\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\ -_0805ADD0: .4byte gMapObjects\n\ -_0805ADD4: .4byte gUnknown_0836DC09\n\ -_0805ADD8: .4byte gUnknown_0836DBBC\n\ - .syntax divided\n"); -} -#endif - -u8 sub_805ADDC(u8 localId) -{ - u8 objectCount; - u8 i; - - if (gMapHeader.events == NULL) - return 16; - objectCount = gMapHeader.events->mapObjectCount; - for (i = 0; i < objectCount; i++) - { - struct MapObjectTemplate *template = &gSaveBlock1.mapObjectTemplates[i]; - - if (template->localId == localId && !FlagGet(template->flagId)) - return InitFieldObjectStateFromTemplate(template, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - } - return 16; -} - -u8 GetAvailableFieldObjectSlot(u16 a, u8 b, u8 c, u8 *d) -{ - u8 i = 0; - - for (i = 0; i < 16 && gMapObjects[i].active; i++) - { - if (gMapObjects[i].localId == a && gMapObjects[i].mapNum == b && gMapObjects[i].mapGroup == c) - return 1; - } - if (i >= 16) - return 1; - *d = i; - for (; i < 16; i++) - { - if (gMapObjects[i].active && gMapObjects[i].localId == a && gMapObjects[i].mapNum == b && gMapObjects[i].mapGroup == c) - return 1; - } - return 0; -} - -void RemoveFieldObject(struct MapObject *mapObject) -{ - mapObject->active = FALSE; - RemoveFieldObjectInternal(mapObject); -} - -void RemoveFieldObjectByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) -{ - u8 mapObjectId; - - if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - return; - FlagSet(GetFieldObjectFlagIdByFieldObjectId(mapObjectId)); - RemoveFieldObject(&gMapObjects[mapObjectId]); -} - -void RemoveFieldObjectInternal(struct MapObject *mapObject) -{ - struct SpriteFrameImage image; - const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); - - image.size = gfxInfo->size; - gSprites[mapObject->spriteId].images = ℑ - DestroySprite(&gSprites[mapObject->spriteId]); -} - -void npc_hide_all_but_player(void) -{ - u8 i; - - for (i = 0; i < 16; i++) - { - if (i != gPlayerAvatar.mapObjectId) - RemoveFieldObject(&gMapObjects[i]); - } -} - -u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, u8 c, u8 d, s16 e, s16 f) -{ - u8 mapObjectId; - u8 spriteId; - const struct MapObjectGraphicsInfo *gfxInfo; - struct MapObject *mapObject; - struct Sprite *sprite; - - mapObjectId = InitFieldObjectStateFromTemplate(mapObjTemplate, c, d); - if (mapObjectId == 16) - return 16; - - mapObject = &gMapObjects[mapObjectId]; - gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); - if (gfxInfo->paletteSlot == 0) - npc_load_two_palettes__no_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); - else if (gfxInfo->paletteSlot == 10) - npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); - if (mapObject->animPattern == 0x4C) - mapObject->mapobj_bit_13 = TRUE; - -#ifdef NONMATCHING - sprTemplate->paletteTag = 0xFFFF; -#else - *(u16 *)&sprTemplate->paletteTag = 0xFFFF; -#endif - spriteId = CreateSprite(sprTemplate, 0, 0, 0); - if (spriteId == 64) - { - gMapObjects[mapObjectId].active = FALSE; - return 16; - } - sprite = &gSprites[spriteId]; - sub_8060388(e + mapObject->coords2.x, f + mapObject->coords2.y, &sprite->pos1.x, &sprite->pos1.y); - sprite->centerToCornerVecX = -(gfxInfo->width >> 1); - sprite->centerToCornerVecY = -(gfxInfo->height >> 1); - sprite->pos1.x += 8; - sprite->pos1.y += 16 + sprite->centerToCornerVecY; - sprite->oam.paletteNum = gfxInfo->paletteSlot; - sprite->coordOffsetEnabled = TRUE; - sprite->data0 = mapObjectId; - mapObject->spriteId = spriteId; - mapObject->mapobj_bit_12 = gfxInfo->inanimate; - if (!mapObject->mapobj_bit_12) - StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObject->mapobj_unk_18)); - SetObjectSubpriorityByZCoord(mapObject->elevation, sprite, 1); - sub_80634D0(mapObject, sprite); - return mapObjectId; -} - -u8 SpawnFieldObject(struct MapObjectTemplate *mapObjTemplate, u8 b, u8 c, s16 d, s16 e) -{ - struct SpriteTemplate spriteTemplate; - const struct SubspriteTable *subspriteTables = NULL; - struct SpriteFrameImage spriteFrameImage; - const struct MapObjectGraphicsInfo *gfxInfo; - u8 mapObjectId; - - gfxInfo = GetFieldObjectGraphicsInfo(mapObjTemplate->graphicsId); - MakeObjectTemplateFromFieldObjectTemplate(mapObjTemplate, &spriteTemplate, &subspriteTables); - spriteFrameImage.size = gfxInfo->size; - spriteTemplate.images = &spriteFrameImage; - mapObjectId = sub_805AFCC(mapObjTemplate, &spriteTemplate, b, c, d, e); - if (mapObjectId == 16) - return 16; - gSprites[gMapObjects[mapObjectId].spriteId].images = gfxInfo->images; - if (subspriteTables != NULL) - SetSubspriteTables(&gSprites[gMapObjects[mapObjectId].spriteId], subspriteTables); - return mapObjectId; -} - -u8 SpawnSpecialFieldObject(struct MapObjectTemplate *mapObjTemplate) -{ - s16 x; - s16 y; - - GetFieldObjectMovingCameraOffset(&x, &y); - return SpawnFieldObject(mapObjTemplate, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, x, y); -} - -u8 SpawnSpecialFieldObjectParametrized(u8 a, u8 b, u8 c, s16 d, s16 e, u8 f) -{ - struct MapObjectTemplate mapObjTemplate; - - d -= 7; - e -= 7; - mapObjTemplate.localId = c; - mapObjTemplate.graphicsId = a; - mapObjTemplate.unk2 = 0; - mapObjTemplate.x = d; - mapObjTemplate.y = e; - mapObjTemplate.elevation = f; - mapObjTemplate.movementType = b; - mapObjTemplate.unkA_0 = 0; - mapObjTemplate.unkA_4 = 0; - mapObjTemplate.unkC = 0; - mapObjTemplate.unkE = 0; - return SpawnSpecialFieldObject(&mapObjTemplate); -} - -u8 show_sprite(u8 a, u8 b, u8 c) -{ - struct MapObjectTemplate *r5; - s16 x; - s16 y; - - r5 = GetFieldObjectTemplateByLocalIdAndMap(a, b, c); - if (r5 == NULL) - return 16; - GetFieldObjectMovingCameraOffset(&x, &y); - return SpawnFieldObject(r5, b, c, x, y); -} - -void MakeObjectTemplateFromFieldObjectGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables) -{ - const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(graphicsId); - - sprTemplate->tileTag = gfxInfo->tileTag; - sprTemplate->paletteTag = gfxInfo->paletteTag1; - sprTemplate->oam = gfxInfo->oam; - sprTemplate->anims = gfxInfo->anims; - sprTemplate->images = gfxInfo->images; - sprTemplate->affineAnims = gfxInfo->affineAnims; - sprTemplate->callback = callback; - *subspriteTables = gfxInfo->subspriteTables; -} - -void MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(u16 graphicsId, u16 callbackIndex, struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables) -{ - MakeObjectTemplateFromFieldObjectGraphicsInfo(graphicsId, gUnknown_0836DA88[callbackIndex], sprTemplate, subspriteTables); -} - -void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables) -{ - MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(mapObjTemplate->graphicsId, mapObjTemplate->movementType, sprTemplate, subspriteTables); -} - -u8 AddPseudoFieldObject(u16 graphicsId, void (*callback)(struct Sprite *), s16 c, s16 d, u8 subpriority) -{ - struct SpriteTemplate spriteTemplate; - const struct SubspriteTable *subspriteTables; - u8 spriteId; - - MakeObjectTemplateFromFieldObjectGraphicsInfo(graphicsId, callback, &spriteTemplate, &subspriteTables); - if (spriteTemplate.paletteTag != 0xFFFF) - sub_805BDF8(spriteTemplate.paletteTag); - spriteId = CreateSprite(&spriteTemplate, c, d, subpriority); - if (spriteId != 64 && subspriteTables != NULL) - { - SetSubspriteTables(&gSprites[spriteId], subspriteTables); - gSprites[spriteId].subspriteMode = 2; - } - return spriteId; -} - -extern void sub_8064970(struct Sprite *); -extern void sub_8060470(s16 *, s16 *, s16, s16); -extern void InitObjectPriorityByZCoord(); - -u8 sub_805B410(u8 a, u8 b, s16 c, s16 d, u8 e, u8 f) -{ - const struct MapObjectGraphicsInfo *gfxInfo; - struct SpriteTemplate spriteTemplate; - const struct SubspriteTable *subspriteTables; - u8 spriteId; - - gfxInfo = GetFieldObjectGraphicsInfo(a); - MakeObjectTemplateFromFieldObjectGraphicsInfo(a, sub_8064970, &spriteTemplate, &subspriteTables); -#ifdef NONMATCHING - spriteTemplate.paletteTag = 0xFFFF; -#else - *(u16 *)&spriteTemplate.paletteTag = 0xFFFF; -#endif - c += 7; - d += 7; - sub_8060470(&c, &d, 8, 16); - spriteId = CreateSpriteAtEnd(&spriteTemplate, c, d, 0); - if (spriteId != 64) - { - struct Sprite *sprite = &gSprites[spriteId]; - - sprite->centerToCornerVecX = -(gfxInfo->width >> 1); - sprite->centerToCornerVecY = -(gfxInfo->height >> 1); - sprite->pos1.y += sprite->centerToCornerVecY; - sprite->oam.paletteNum = gfxInfo->paletteSlot; - sprite->coordOffsetEnabled = TRUE; - sprite->data0 = b; - sprite->data1 = e; - if (gfxInfo->paletteSlot == 10) - npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); - if (subspriteTables != NULL) - { - SetSubspriteTables(sprite, subspriteTables); - sprite->subspriteMode = 2; - } - InitObjectPriorityByZCoord(sprite, e); - SetObjectSubpriorityByZCoord(e, sprite, 1); - StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(f)); - } - return spriteId; -} - -void sub_805B55C(s16 a, s16 b) -{ - u8 i; - - if (gMapHeader.events != NULL) - { - s16 r9 = gSaveBlock1.pos.x - 2; - s16 sp8 = gSaveBlock1.pos.x + 17; - s16 r10 = gSaveBlock1.pos.y; - s16 spC = gSaveBlock1.pos.y + 16; - u8 objectCount = gMapHeader.events->mapObjectCount; - - for (i = 0; i < objectCount; i++) - { - struct MapObjectTemplate *template = &gSaveBlock1.mapObjectTemplates[i]; - s16 foo = template->x + 7; - s16 bar = template->y + 7; - - if (r10 <= bar && spC >= bar && r9 <= foo && sp8 >= foo - && !FlagGet(template->flagId)) - SpawnFieldObject(template, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, a, b); - } - } -} - -void RemoveFieldObjectIfOutsideView(struct MapObject *mapObject); - -void RemoveFieldObjectsOutsideView(void) -{ - u8 i; - u8 j; - - for (i = 0; i < 16; i++) - { - bool8 isActiveLinkPlayer; - - for (j = 0, isActiveLinkPlayer = 0; j < 4; j++) - { - if (gLinkPlayerMapObjects[j].active && i == gLinkPlayerMapObjects[j].mapObjId) - isActiveLinkPlayer = TRUE; - } - if (!isActiveLinkPlayer) - { - struct MapObject *mapObject = &gMapObjects[i]; - - if (mapObject->active && !mapObject->mapobj_bit_16) - RemoveFieldObjectIfOutsideView(mapObject); - } - } -} - -void RemoveFieldObjectIfOutsideView(struct MapObject *mapObject) -{ - s16 r7 = gSaveBlock1.pos.x - 2; - s16 r5 = gSaveBlock1.pos.x + 17; - s16 r4 = gSaveBlock1.pos.y; - s16 r6 = gSaveBlock1.pos.y + 16; - - if (mapObject->coords2.x >= r7 && mapObject->coords2.x <= r5 - && mapObject->coords2.y >= r4 && mapObject->coords2.y <= r6) - return; - if (mapObject->coords1.x >= r7 && mapObject->coords1.x <= r5 - && mapObject->coords1.y >= r4 && mapObject->coords1.y <= r6) - return; - RemoveFieldObject(mapObject); -} - -void sub_805B75C(u8, s16, s16); - -void sub_805B710(u16 a, u16 b) -{ - u8 i; - - ClearPlayerAvatarInfo(); - for (i = 0; i < 16; i++) - { - if (gMapObjects[i].active) - sub_805B75C(i, a, b); - } - sub_805AAB0(); -} - -extern void SetPlayerAvatarFieldObjectIdAndObjectId(u8, u8); -extern void sub_805B914(struct MapObject *); - -void sub_805B75C(u8 a, s16 b, s16 c) -{ - struct SpriteTemplate sp0; - struct SpriteFrameImage sp18; - const struct SubspriteTable *subspriteTables; - const struct MapObjectGraphicsInfo *gfxInfo; - struct MapObject *mapObject; - u8 spriteId; - - #define i spriteId - for (i = 0; i < 4; i++) - { - if (gLinkPlayerMapObjects[i].active && a == gLinkPlayerMapObjects[i].mapObjId) - return; - } - #undef i - - mapObject = &gMapObjects[a]; - asm("":::"r5"); - subspriteTables = NULL; - gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); - sp18.size = gfxInfo->size; - MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(mapObject->graphicsId, mapObject->animPattern, &sp0, &subspriteTables); - sp0.images = &sp18; - *(u16 *)&sp0.paletteTag = 0xFFFF; - if (gfxInfo->paletteSlot == 0) - npc_load_two_palettes__no_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); - if (gfxInfo->paletteSlot > 9) - npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); - *(u16 *)&sp0.paletteTag = 0xFFFF; - spriteId = CreateSprite(&sp0, 0, 0, 0); - if (spriteId != 64) - { - struct Sprite *sprite = &gSprites[spriteId]; - - sub_8060388(b + mapObject->coords2.x, c + mapObject->coords2.y, &sprite->pos1.x, &sprite->pos1.y); - sprite->centerToCornerVecX = -(gfxInfo->width >> 1); - sprite->centerToCornerVecY = -(gfxInfo->height >> 1); - sprite->pos1.x += 8; - sprite->pos1.y += 16 + sprite->centerToCornerVecY; - sprite->images = gfxInfo->images; - if (mapObject->animPattern == 11) - { - SetPlayerAvatarFieldObjectIdAndObjectId(a, spriteId); - mapObject->mapobj_unk_1B = sub_8126B54(); - } - if (subspriteTables != NULL) - SetSubspriteTables(sprite, subspriteTables); - sprite->oam.paletteNum = gfxInfo->paletteSlot; - sprite->coordOffsetEnabled = TRUE; - sprite->data0 = a; - mapObject->spriteId = spriteId; - if (!mapObject->mapobj_bit_12 && mapObject->animPattern != 11) - StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObject->mapobj_unk_18)); - sub_805B914(mapObject); - SetObjectSubpriorityByZCoord(mapObject->elevation, sprite, 1); - } -} - -void sub_805B914(struct MapObject *mapObject) -{ - mapObject->mapobj_bit_1 = FALSE; - mapObject->mapobj_bit_2 = TRUE; - mapObject->mapobj_bit_22 = FALSE; - mapObject->mapobj_bit_17 = FALSE; - mapObject->mapobj_bit_18 = FALSE; - mapObject->mapobj_bit_19 = FALSE; - mapObject->mapobj_bit_20 = FALSE; - mapObject->mapobj_bit_21 = FALSE; - FieldObjectClearAnim(mapObject); -} - -void SetPlayerAvatarFieldObjectIdAndObjectId(u8 mapObjectId, u8 spriteId) -{ - gPlayerAvatar.mapObjectId = mapObjectId; - gPlayerAvatar.spriteId = spriteId; - gPlayerAvatar.gender = GetPlayerAvatarGenderByGraphicsId(gMapObjects[mapObjectId].graphicsId); - SetPlayerAvatarExtraStateTransition(gMapObjects[mapObjectId].graphicsId, 0x20); -} - -void sub_805B980(struct MapObject *mapObject, u8 graphicsId) -{ - const struct MapObjectGraphicsInfo *gfxInfo; - struct Sprite *sprite; - - gfxInfo = GetFieldObjectGraphicsInfo(graphicsId); - sprite = &gSprites[mapObject->spriteId]; - if (gfxInfo->paletteSlot == 0) - pal_patch_for_npc(gfxInfo->paletteTag1, gfxInfo->paletteSlot); - if (gfxInfo->paletteSlot == 10) - npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); - sprite->oam.shape = gfxInfo->oam->shape; - sprite->oam.size = gfxInfo->oam->size; - sprite->images = gfxInfo->images; - sprite->anims = gfxInfo->anims; - sprite->subspriteTables = gfxInfo->subspriteTables; - sprite->oam.paletteNum = gfxInfo->paletteSlot; - mapObject->mapobj_bit_12 = gfxInfo->inanimate; - mapObject->graphicsId = graphicsId; - sub_80603CC(mapObject->coords2.x, mapObject->coords2.y, &sprite->pos1.x, &sprite->pos1.y); - sprite->centerToCornerVecX = -(gfxInfo->width >> 1); - sprite->centerToCornerVecY = -(gfxInfo->height >> 1); - sprite->pos1.x += 8; - sprite->pos1.y += 16 + sprite->centerToCornerVecY; - if (mapObject->mapobj_bit_15) - CameraObjectReset1(); -} - -void unref_sub_805BA80(u8 localId, u8 mapNum, u8 mapGroup, u8 graphicsId) -{ - u8 mapObjectId; - - if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - sub_805B980(&gMapObjects[mapObjectId], graphicsId); -} - -void FieldObjectTurn(struct MapObject *mapObject, u8 direction) -{ - FieldObjectSetDirection(mapObject, direction); - if (!mapObject->mapobj_bit_12) - { - StartSpriteAnim(&gSprites[mapObject->spriteId], FieldObjectDirectionToImageAnimId(mapObject->mapobj_unk_18)); - SeekSpriteAnim(&gSprites[mapObject->spriteId], 0); - } -} - -void FieldObjectTurnByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 direction) -{ - u8 mapObjectId; - - if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - FieldObjectTurn(&gMapObjects[mapObjectId], direction); -} - -void unref_TurnPlayer(struct PlayerAvatar *player, u8 direction) -{ - FieldObjectTurn(&gMapObjects[player->mapObjectId], direction); -} - -void get_berry_tree_graphics(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 treeStage; - u8 treeId; - - mapObject->mapobj_bit_13 = TRUE; - sprite->invisible = TRUE; - treeStage = GetStageByBerryTreeId(mapObject->trainerRange_berryTreeId); - if (treeStage != 0) - { - mapObject->mapobj_bit_13 = FALSE; - sprite->invisible = FALSE; - treeId = GetBerryTypeByBerryTreeId(mapObject->trainerRange_berryTreeId) - 1; - treeStage--; - if (treeId > 0x2B) - treeId = 0; - sub_805B980(mapObject, gBerryTreeGraphicsIdTablePointers[treeId][treeStage]); - sprite->images = gBerryTreePicTablePointers[treeId]; - sprite->oam.paletteNum = gBerryTreePaletteSlotTablePointers[treeId][treeStage]; - StartSpriteAnim(sprite, treeStage); - } -} - -const struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8 graphicsId) -{ - if (graphicsId > 0xEF) - graphicsId = VarGetFieldObjectGraphicsId(graphicsId + 16); - if (graphicsId > 0xD9) - graphicsId = 5; - return gMapObjectGraphicsInfoPointers[graphicsId]; -} - -void FieldObjectHandleDynamicGraphicsId(struct MapObject *mapObject) -{ - if (mapObject->graphicsId > 0xEF) - mapObject->graphicsId = VarGetFieldObjectGraphicsId(mapObject->graphicsId + 16); -} - -void npc_by_local_id_and_map_set_field_1_bit_x20(u8 localId, u8 mapNum, u8 mapGroup, u8 d) -{ - u8 mapObjectId; - - if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - gMapObjects[mapObjectId].mapobj_bit_13 = d; -} - -void FieldObjectGetLocalIdAndMap(struct MapObject *mapObject, u8 *localId, u8 *mapNum, u8 *mapGroup) -{ - *localId = mapObject->localId; - *mapNum = mapObject->mapNum; - *mapGroup = mapObject->mapGroup; -} - -void sub_805BCC0(s16 x, s16 y) -{ - u8 mapObjectId; - struct MapObject *mapObject; - - mapObjectId = GetFieldObjectIdByXY(x, y); - if (mapObjectId != 16) - { - mapObject = &gMapObjects[mapObjectId]; - mapObject->mapobj_bit_2 = TRUE; - } -} - -void sub_805BCF0(u8 localId, u8 mapNum, u8 mapGroup, u8 subpriority) -{ - u8 mapObjectId; - struct MapObject *mapObject; - struct Sprite *sprite; - - if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - { - mapObject = &gMapObjects[mapObjectId]; - sprite = &gSprites[mapObject->spriteId]; - mapObject->mapobj_bit_26 = TRUE; - sprite->subpriority = subpriority; - } -} - -void sub_805BD48(u8 localId, u8 mapNum, u8 mapGroup) -{ - u8 mapObjectId; - struct MapObject *mapObject; - - if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - { - mapObject = &gMapObjects[mapObjectId]; - mapObject->mapobj_bit_26 = FALSE; - mapObject->mapobj_bit_2 = TRUE; - } -} - -void sub_805BD90(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) -{ - u8 mapObjectId; - struct Sprite *sprite; - - if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - { - sprite = &gSprites[gMapObjects[mapObjectId].spriteId]; - sprite->pos2.x = x; - sprite->pos2.y = y; - } -} - -void gpu_pal_allocator_reset__manage_upper_four(void) -{ - FreeAllSpritePalettes(); - gReservedSpritePaletteCount = 12; -} - -void sub_805BDF8(u16 tag) -{ - u16 paletteIndex = FindFieldObjectPaletteIndexByTag(tag); - - if (paletteIndex != 0x11FF) //always happens. FindFieldObjectPaletteIndexByTag returns u8 - sub_805BE58(&gUnknown_0837377C[paletteIndex]); -} - -void unref_sub_805BE24(u16 *arr) -{ - u8 i; - - for (i = 0; arr[i] != 0x11FF; i++) - sub_805BDF8(arr[i]); -} - -u8 sub_805BE58(const struct SpritePalette *palette) -{ - if (IndexOfSpritePaletteTag(palette->tag) != 0xFF) - return 0xFF; - else - return LoadSpritePalette(palette); -} - -void pal_patch_for_npc(u16 a, u16 b) -{ - u8 var = b; - u8 paletteIndex = FindFieldObjectPaletteIndexByTag(a); - - LoadPalette(gUnknown_0837377C[paletteIndex].data, var * 16 + 0x100, 0x20); -} - -void pal_patch_for_npc_range(const u16 *arr, u8 b, u8 c) -{ - for (; b < c; arr++, b++) - pal_patch_for_npc(*arr, b); -} - -u8 FindFieldObjectPaletteIndexByTag(u16 tag) -{ - u8 i; - - for (i = 0; gUnknown_0837377C[i].tag != 0x11FF; i++) - { - if (gUnknown_0837377C[i].tag == tag) - return i; - } - return 0xFF; -} - -void npc_load_two_palettes__no_record(u16 a, u8 b) -{ - u8 i; - - pal_patch_for_npc(a, b); - for (i = 0; gUnknown_08373874[i].tag != 0x11FF; i++) - { - if (gUnknown_08373874[i].tag == a) - { - pal_patch_for_npc(gUnknown_08373874[i].data[gUnknown_030005A4], gUnknown_0830FD14[b]); - break; - } - } -} - -void npc_load_two_palettes__and_record(u16 a, u8 b) -{ - u8 i; - - gUnknown_030005A6 = a; - pal_patch_for_npc(a, b); - for (i = 0; gUnknown_083738E4[i].tag != 0x11FF; i++) - { - if (gUnknown_083738E4[i].tag == a) - { - pal_patch_for_npc(gUnknown_083738E4[i].data[gUnknown_030005A4], gUnknown_0830FD14[b]); - break; - } - } -} - -void unref_sub_805C014(struct MapObject *mapObject, s16 x, s16 y) -{ - mapObject->coords3.x = mapObject->coords2.x; - mapObject->coords3.y = mapObject->coords2.y; - mapObject->coords2.x += x; - mapObject->coords2.y += y; -} - -void npc_coords_shift(struct MapObject *mapObject, s16 x, s16 y) -{ - mapObject->coords3.x = mapObject->coords2.x; - mapObject->coords3.y = mapObject->coords2.y; - mapObject->coords2.x = x; - mapObject->coords2.y = y; -} - -void npc_coords_set(struct MapObject *mapObject, s16 x, s16 y) -{ - mapObject->coords3.x = x; - mapObject->coords3.y = y; - mapObject->coords2.x = x; - mapObject->coords2.y = y; -} - -void sub_805C058(struct MapObject *mapObject, s16 x, s16 y) -{ - struct Sprite *sprite = &gSprites[mapObject->spriteId]; - const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); - - npc_coords_set(mapObject, x, y); - sub_80603CC(mapObject->coords2.x, mapObject->coords2.y, &sprite->pos1.x, &sprite->pos1.y); - sprite->centerToCornerVecX = -(gfxInfo->width >> 1); - sprite->centerToCornerVecY = -(gfxInfo->height >> 1); - sprite->pos1.x += 8; - sprite->pos1.y += 16 + sprite->centerToCornerVecY; - sub_805B914(mapObject); - if (mapObject->mapobj_bit_15) - CameraObjectReset1(); -} - -void sub_805C0F8(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) -{ - u8 mapObjectId; - - if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - { - x += 7; - y += 7; - sub_805C058(&gMapObjects[mapObjectId], x, y); - } -} - -void npc_coords_shift_still(struct MapObject *mapObject) -{ - npc_coords_shift(mapObject, mapObject->coords2.x, mapObject->coords2.y); -} - -void UpdateFieldObjectCoordsForCameraUpdate(void) -{ - u8 i; - s16 deltaX; - s16 deltaY; - -#ifndef NONMATCHING - asm(""::"r"(i)); //makes the compiler store i in r3 -#endif - - if (gUnknown_0202E844.field_0) - { - for (i = 0, deltaX = gUnknown_0202E844.x, deltaY = gUnknown_0202E844.y; i < 16; i++) - { - struct MapObject *mapObject = &gMapObjects[i]; - - if (mapObject->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; - } - } - } -} - -bool8 FieldObjectDoesZCoordMatch(struct MapObject *, u8); - -u8 GetFieldObjectIdByXYZ(u16 x, u16 y, u8 z) -{ - u8 i; - - for (i = 0; i < 16; i++) - { - if (gMapObjects[i].active && gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y - && FieldObjectDoesZCoordMatch(&gMapObjects[i], z)) - return i; - } - return 16; -} - -bool8 FieldObjectDoesZCoordMatch(struct MapObject *mapObject, u8 z) -{ - if (mapObject->mapobj_unk_0B_0 != 0 && z != 0 - && mapObject->mapobj_unk_0B_0 != z) - return FALSE; - else - return TRUE; -} - -void UpdateFieldObjectsForCameraUpdate(s16 x, s16 y) -{ - UpdateFieldObjectCoordsForCameraUpdate(); - sub_805B55C(x, y); - RemoveFieldObjectsOutsideView(); -} - -u8 AddCameraObject(u8 a) -{ - u8 spriteId = CreateSprite(&gSpriteTemplate_830FD24, 0, 0, 4); - - gSprites[spriteId].invisible = TRUE; - gSprites[spriteId].data0 = a; - return spriteId; -} - -void ObjectCB_CameraObject(struct Sprite *sprite) -{ - void (*cameraObjectFuncs[3])(struct Sprite *); - memcpy(cameraObjectFuncs, gCameraObjectFuncs, sizeof gCameraObjectFuncs); - cameraObjectFuncs[sprite->data1](sprite); -} - -void CameraObject_0(struct Sprite *sprite) -{ - sprite->pos1.x = gSprites[sprite->data0].pos1.x; - sprite->pos1.y = gSprites[sprite->data0].pos1.y; - sprite->invisible = TRUE; - sprite->data1 = 1; - CameraObject_1(sprite); -} - -void CameraObject_1(struct Sprite *sprite) -{ - s16 x = gSprites[sprite->data0].pos1.x; - s16 y = gSprites[sprite->data0].pos1.y; - - sprite->data2 = x - sprite->pos1.x; - sprite->data3 = y - sprite->pos1.y; - sprite->pos1.x = x; - sprite->pos1.y = y; -} - -void CameraObject_2(struct Sprite *sprite) -{ - sprite->pos1.x = gSprites[sprite->data0].pos1.x; - sprite->pos1.y = gSprites[sprite->data0].pos1.y; - sprite->data2 = 0; - sprite->data3 = 0; -} - -struct Sprite *FindCameraObject(void) -{ - u8 i; - - for (i = 0; i < 64; i++) - { - if (gSprites[i].inUse && gSprites[i].callback == ObjectCB_CameraObject) - return &gSprites[i]; - } - return NULL; -} - -void CameraObjectReset1(void) -{ - struct Sprite *cameraSprite = FindCameraObject(); - - if (cameraSprite != NULL) - { - cameraSprite->data1 = 0; - cameraSprite->callback(cameraSprite); - } -} - -void CameraObjectSetFollowedObjectId(u8 spriteId) -{ - struct Sprite *cameraSprite = FindCameraObject(); - - if (cameraSprite != NULL) - { - cameraSprite->data0 = spriteId; - CameraObjectReset1(); - } -} - -u8 CameraObjectGetFollowedObjectId(void) -{ - struct Sprite *cameraSprite = FindCameraObject(); - - if (cameraSprite == NULL) - return 64; - else - return cameraSprite->data0; -} - -void CameraObjectReset2(void) -{ - struct Sprite *cameraSprite = FindCameraObject(); - - cameraSprite->data1 = 2; -} - -u8 unref_sub_805C43C(struct Sprite *src, s16 x, s16 y, u8 subpriority) -{ - u8 i; - - for (i = 0; i < 64; i++) - { - if (!gSprites[i].inUse) - { - gSprites[i] = *src; - gSprites[i].pos1.x = x; - gSprites[i].pos1.y = y; - gSprites[i].subpriority = subpriority; - break; - } - } - return i; -} - -u8 obj_unfreeze(struct Sprite *src, s16 x, s16 y, u8 subpriority) -{ - s16 i; - - for (i = 63; i > -1; i--) - { - if (!gSprites[i].inUse) - { - gSprites[i] = *src; - gSprites[i].pos1.x = x; - gSprites[i].pos1.y = y; - gSprites[i].subpriority = subpriority; - return i; - } - } - return 64; -} - -void FieldObjectSetDirection(struct MapObject *mapObject, u8 direction) -{ - mapObject->mapobj_unk_20 = mapObject->mapobj_unk_18; - if (!mapObject->mapobj_bit_9) - { - s8 _direction = direction; //needed for the asm to match - mapObject->mapobj_unk_18 = _direction; - } - mapObject->placeholder18 = direction; -} - -u8 *GetFieldObjectScriptPointerByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) -{ - struct MapObjectTemplate *template = GetFieldObjectTemplateByLocalIdAndMap(localId, mapNum, mapGroup); - - return template->script; -} - -u8 *GetFieldObjectScriptPointerByFieldObjectId(u8 mapObjectId) -{ - return GetFieldObjectScriptPointerByLocalIdAndMap(gMapObjects[mapObjectId].localId, gMapObjects[mapObjectId].mapNum, gMapObjects[mapObjectId].mapGroup); -} - -u16 GetFieldObjectFlagIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) -{ - struct MapObjectTemplate *template = GetFieldObjectTemplateByLocalIdAndMap(localId, mapNum, mapGroup); - - return template->flagId; -} - -u16 GetFieldObjectFlagIdByFieldObjectId(u8 mapObjectId) -{ - return GetFieldObjectFlagIdByLocalIdAndMap(gMapObjects[mapObjectId].localId, gMapObjects[mapObjectId].mapNum, gMapObjects[mapObjectId].mapGroup); -} - -u8 unref_sub_805C5D0(u8 localId, u8 mapNum, u8 mapGroup) -{ - u8 mapObjectId; - - if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - return 0xFF; - else - return gMapObjects[mapObjectId].trainerType; -} - -u8 unref_sub_805C60C(u8 mapObjectId) -{ - return gMapObjects[mapObjectId].trainerType; -} - -u8 unref_sub_805C624(u8 localId, u8 mapNum, u8 mapGroup) -{ - u8 mapObjectId; - - if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - return 0xFF; - else - return gMapObjects[mapObjectId].trainerRange_berryTreeId; -} - -u8 FieldObjectGetBerryTreeId(u8 mapObjectId) -{ - return gMapObjects[mapObjectId].trainerRange_berryTreeId; -} - -struct MapObjectTemplate *FindFieldObjectTemplateInArrayByLocalId(u8, struct MapObjectTemplate *, u8); - -struct MapObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) -{ - if (gSaveBlock1.location.mapNum == mapNum && gSaveBlock1.location.mapGroup == mapGroup) - return FindFieldObjectTemplateInArrayByLocalId(localId, gSaveBlock1.mapObjectTemplates, gMapHeader.events->mapObjectCount); - else - { - struct MapHeader *mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum); - - return FindFieldObjectTemplateInArrayByLocalId(localId, mapHeader->events->mapObjects, mapHeader->events->mapObjectCount); - } -} - -struct MapObjectTemplate *FindFieldObjectTemplateInArrayByLocalId(u8 localId, struct MapObjectTemplate *templates, u8 count) -{ - u8 i; - - for (i = 0; i < count; i++) - { - if (templates[i].localId == localId) - return &templates[i]; - } - return NULL; -} - -struct MapObjectTemplate *sub_805C700(struct MapObject *mapObject) -{ - s32 i; - - if (mapObject->mapNum != gSaveBlock1.location.mapNum - || mapObject->mapGroup != gSaveBlock1.location.mapGroup) - return NULL; - - for (i = 0; i < 64; i++) - { - if (mapObject->localId == gSaveBlock1.mapObjectTemplates[i].localId) - return &gSaveBlock1.mapObjectTemplates[i]; - } - return NULL; -} - -void sub_805C754(struct MapObject *mapObject) -{ - struct MapObjectTemplate *template = sub_805C700(mapObject); - - if (template != NULL) - { - template->x = mapObject->coords2.x - 7; - template->y = mapObject->coords2.y - 7; - } -} - -void sub_805C774(struct MapObject *mapObject, u8 movementType) -{ - struct MapObjectTemplate *template = sub_805C700(mapObject); - - if (template != NULL) - template->movementType = movementType; -} - -void sub_805C78C(u8 localId, u8 mapNum, u8 mapGroup) -{ - u8 mapObjectId; - - if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - sub_805C754(&gMapObjects[mapObjectId]); -} - -void sub_805C7C4(u8 a) -{ - gpu_pal_allocator_reset__manage_upper_four(); - gUnknown_030005A6 = 0x11FF; - gUnknown_030005A4 = a; - pal_patch_for_npc_range(gUnknown_0837399C[gUnknown_030005A4], 0, 10); -} - -u16 npc_paltag_by_palslot(u8 a) -{ - u8 i; - - if (a < 10) - return gUnknown_0837399C[gUnknown_030005A4][a]; - - for (i = 0; gUnknown_083738E4[i].tag != 0x11FF; i++) - { - if (gUnknown_083738E4[i].tag == gUnknown_030005A6) - { - return gUnknown_083738E4[i].data[gUnknown_030005A4]; - } - } - return 0x11FF; -} - -fieldmap_object_null_cb(sub_805C884, sub_805C8A8); -fieldmap_object_cb(sub_805C8AC, sub_805C8D0, gUnknown_08375224); - -u8 sub_805C8F0(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -extern void FieldObjectSetRegularAnim(struct MapObject *, struct Sprite *, u8); - -u8 sub_805C904(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; - return 1; -} - -extern u8 FieldObjectExecRegularAnim(struct MapObject *, struct Sprite *); -extern void sub_8064820(struct Sprite *, s16); - -u8 sub_805C930(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite) == 0) - { - return 0; - } - sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); - sprite->data1 = 3; - return 1; -} - -extern u8 sub_8064824(struct Sprite *); - -u8 sub_805C96C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) != 0) - { - sprite->data1 = 4; - return 1; - } - return 0; -} - -extern u8 sub_805FF20(struct MapObject *, u8); - -u8 sub_805C98C(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[4]; - memcpy(directions, gUnknown_08375240, 4); - direction = directions[Random() & 3]; - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 5; - if (sub_805FF20(mapObject, direction) != 0) - { - sprite->data1 = 1; - } - return 1; -} - -u8 sub_805C9D8(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18)); - mapObject->mapobj_bit_1 = 1; - sprite->data1 = 6; - return 1; -} - -u8 sub_805CA08(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) - { - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 1; - } - return 0; -} - -u8 FieldObjectIsTrainerAndCloseToPlayer(struct MapObject *mapObject) -{ - s16 x; - s16 y; - s16 objx; - s16 objy; - s16 minx; - s16 maxx; - s16 miny; - s16 maxy; - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH) == 0) - { - return 0; - } - if (mapObject->trainerType != 1 && mapObject->trainerType != 3) - { - return 0; - } - PlayerGetDestCoords(&x, &y); - objx = mapObject->coords2.x; - objy = mapObject->coords2.y; - minx = objx - mapObject->trainerRange_berryTreeId; - miny = objy - mapObject->trainerRange_berryTreeId; - maxx = objx + mapObject->trainerRange_berryTreeId; - maxy = objy + mapObject->trainerRange_berryTreeId; - if (minx > x || maxx < x || miny > y || maxy < y) - { - return 0; - } - return 1; -} - -u8 sub_805CAAC(s16 a0, s16 a1, s16 a2, s16 a3) -{ - u8 dirn; - if (a2 > a3) - { - dirn = DIR_EAST; - if (a0 < 0) - { - dirn = DIR_WEST; - } - } - else - { - dirn = DIR_SOUTH; - if (a1 < 0) - { - dirn = DIR_NORTH; - } - } - return dirn; -} - -u8 sub_805CADC(s16 a0, s16 a1, s16 a2, s16 a3) -{ - u8 dirn; - dirn = DIR_SOUTH; - if (a1 < 0) - { - dirn = DIR_NORTH; - } - return dirn; -} - -u8 sub_805CAEC(s16 a0, s16 a1, s16 a2, s16 a3) -{ - u8 dirn; - dirn = DIR_EAST; - if (a0 < 0) - { - dirn = DIR_WEST; - } - return dirn; -} - -u8 sub_805CB00(s16 a0, s16 a1, s16 a2, s16 a3) -{ - u8 dirn; - dirn = sub_805CAAC(a0, a1, a2, a3); - if (dirn == DIR_SOUTH) - { - dirn = sub_805CAEC(a0, a1, a2, a3); - if (dirn == DIR_EAST) - { - dirn = DIR_NORTH; - } - } - else if (dirn == DIR_EAST) - { - dirn = sub_805CADC(a0, a1, a2, a3); - if (dirn == DIR_SOUTH) - { - dirn = DIR_NORTH; - } - } - return dirn; -} - -u8 sub_805CB5C(s16 a0, s16 a1, s16 a2, s16 a3) -{ - u8 dirn; - dirn = sub_805CAAC(a0, a1, a2, a3); - if (dirn == DIR_SOUTH) - { - dirn = sub_805CAEC(a0, a1, a2, a3); - if (dirn == DIR_WEST) - { - dirn = DIR_NORTH; - } - } - else if (dirn == DIR_WEST) - { - dirn = sub_805CADC(a0, a1, a2, a3); - if (dirn == DIR_SOUTH) - { - dirn = DIR_NORTH; - } - } - return dirn; -} - -u8 sub_805CBB8(s16 a0, s16 a1, s16 a2, s16 a3) -{ - u8 dirn; - dirn = sub_805CAAC(a0, a1, a2, a3); - if (dirn == DIR_NORTH) - { - dirn = sub_805CAEC(a0, a1, a2, a3); - if (dirn == DIR_EAST) - { - dirn = DIR_SOUTH; - } - } - else if (dirn == DIR_EAST) - { - dirn = sub_805CADC(a0, a1, a2, a3); - if (dirn == DIR_NORTH) - { - dirn = DIR_SOUTH; - } - } - return dirn; -} - -u8 sub_805CC14(s16 a0, s16 a1, s16 a2, s16 a3) { - u8 dirn; - dirn = sub_805CAAC(a0, a1, a2, a3); - if (dirn == DIR_NORTH) - { - dirn = sub_805CAEC(a0, a1, a2, a3); - if (dirn == DIR_WEST) - { - dirn = DIR_SOUTH; - } - } - else if (dirn == DIR_WEST) - { - dirn = sub_805CADC(a0, a1, a2, a3); - if (dirn == DIR_NORTH) - { - dirn = DIR_SOUTH; - } - } - return dirn; -} - -u8 sub_805CC70(s16 a0, s16 a1, s16 a2, s16 a3) -{ - u8 dirn; - dirn = sub_805CAAC(a0, a1, a2, a3); - if (dirn == DIR_EAST) - { - dirn = sub_805CADC(a0, a1, a2, a3); - } - return dirn; -} - -u8 sub_805CCAC(s16 a0, s16 a1, s16 a2, s16 a3) -{ - u8 dirn; - dirn = sub_805CAAC(a0, a1, a2, a3); - if (dirn == DIR_WEST) - { - dirn = sub_805CADC(a0, a1, a2, a3); - } - return dirn; -} - -u8 sub_805CCE8(s16 a0, s16 a1, s16 a2, s16 a3) -{ - u8 dirn; - dirn = sub_805CAAC(a0, a1, a2, a3); - if (dirn == DIR_SOUTH) - { - dirn = sub_805CAEC(a0, a1, a2, a3); - } - return dirn; -} - -u8 sub_805CD24(s16 a0, s16 a1, s16 a2, s16 a3) -{ - u8 dirn; - dirn = sub_805CAAC(a0, a1, a2, a3); - if (dirn == DIR_NORTH) - { - dirn = sub_805CAEC(a0, a1, a2, a3); - } - return dirn; -} - -u8 sub_805CD60(struct MapObject *mapObject, u8 a1) -{ - s16 x; - s16 y; - s16 x2; - s16 y2; - if (!FieldObjectIsTrainerAndCloseToPlayer(mapObject)) - { - return 0; - } - PlayerGetDestCoords(&x, &y); - x -= mapObject->coords2.x; - y -= mapObject->coords2.y; - x2 = x; - y2 = y; - if (x2 < 0) - { - x2 = -x2; - } - if (y2 < 0) - { - y2 = -y2; - } - return gUnknown_08375244[a1](x, y, x2, y2); -} - -fieldmap_object_cb(sub_805CDE8, sub_805CE0c, gUnknown_08375270); - -u8 sub_805CE2C(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 sub_805CE40(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; - return 1; -} - -u8 sub_805CE6C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) - { - sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; - } - return 0; -} - -u8 sub_805CEB0(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) - { - sprite->data1 = 4; - return 1; - } - return 0; -} - -u8 sub_805CEE0(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[4]; - memcpy(directions, gUnknown_08375240, 4); - direction = sub_805CD60(mapObject, 0); - if (direction == 0) - { - direction = directions[Random() & 3]; - } - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; - return 1; -} - -fieldmap_object_cb(sub_805CF28, sub_805CF4C, gUnknown_08375284); - -u8 sub_805CF6C(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 sub_805CF80(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; - return 1; -} - -u8 sub_805CFAC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite) == 0) - { - return 0; - } - sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); - sprite->data1 = 3; - return 1; -} - -u8 sub_805CFE8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) != 0) - { - sprite->data1 = 4; - return 1; - } - return 0; -} - -u8 sub_805D008(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[2]; - memcpy(directions, gUnknown_083752A0, 2); - direction = directions[Random() & 1]; - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 5; - if (sub_805FF20(mapObject, direction) != 0) - { - sprite->data1 = 1; - } - return 1; -} - -u8 sub_805D054(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18)); - mapObject->mapobj_bit_1 = 1; - sprite->data1 = 6; - return 1; -} - -u8 sub_805D084(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) - { - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 1; - } - return 0; -} - -fieldmap_object_cb(sub_805D0AC, sub_805D0D0, gUnknown_083752A4); - -u8 sub_805D0F0(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 sub_805D104(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; - return 1; -} - -u8 sub_805D130(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite) == 0) - { - return 0; - } - sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); - sprite->data1 = 3; - return 1; -} - -u8 sub_805D16C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) != 0) - { - sprite->data1 = 4; - return 1; - } - return 0; -} - -u8 sub_805D18C(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[2]; - memcpy(directions, gUnknown_083752C0, 2); - direction = directions[Random() & 1]; - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 5; - if (sub_805FF20(mapObject, direction) != 0) - { - sprite->data1 = 1; - } - return 1; -} - -u8 sub_805D1D8(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18)); - mapObject->mapobj_bit_1 = 1; - sprite->data1 = 6; - return 1; -} - -u8 sub_805D208(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) - { - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 1; - } - return 0; -} - -fieldmap_object_cb(sub_805D230, sub_805D254, gUnknown_083752C4); - -u8 sub_805D274(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 1; - return 1; -} - -u8 sub_805D2A0(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) - { - sprite->data1 = 2; - return 1; - } - return 0; -} - -u8 sub_805D2C0(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_1 = 0; - return 0; -} - -u8 sub_805D314(struct MapObject *mapObject, struct Sprite *sprite); - -void FieldObjectCB_BerryTree(struct Sprite *sprite) -{ - struct MapObject *mapObject; - mapObject = &gMapObjects[sprite->data0]; - if (!(sprite->data7 & 1)) - { - get_berry_tree_graphics(mapObject, sprite); - sprite->data7 |= 1; - } - meta_step(mapObject, sprite, sub_805D314); -} - -u8 sub_805D314(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_083752D0[sprite->data1](mapObject, sprite); -} - -u8 do_berry_tree_growth_sparkle_1(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 berryTreeStage; - npc_reset(mapObject, sprite); - mapObject->mapobj_bit_13 = 1; - sprite->invisible = 1; - berryTreeStage = GetStageByBerryTreeId(mapObject->trainerRange_berryTreeId); - if (!berryTreeStage) - { - 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; - FieldEffectStart(0x17); - sprite->animNum = 0; - } - return 0; - } - mapObject->mapobj_bit_13 = 0; - sprite->invisible = 0; - berryTreeStage--; - if (sprite->animNum != berryTreeStage) - { - sprite->data1 = 2; - return 1; - } - get_berry_tree_graphics(mapObject, sprite); - FieldObjectSetRegularAnim(mapObject, sprite, 0x39); - sprite->data1 = 1; - return 1; -} - -u8 sub_805D3EC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sprite->data1 = 0; - return 1; - } - return 0; -} - -u8 do_berry_tree_growth_sparkle_2(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_1 = 1; - 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; - FieldEffectStart(0x17); - return 1; -} - -u8 sub_805D458(struct MapObject *mapObject, struct Sprite *sprite) -{ - sprite->data2++; - mapObject->mapobj_bit_13 = ((sprite->data2 & 0x2) >> 1); - sprite->animPaused = 1; - if (sprite->data2 > 64) - { - get_berry_tree_graphics(mapObject, sprite); - sprite->data1 = 4; - sprite->data2 = 0; - return 1; - } - return 0; -} - -u8 sub_805D4A8(struct MapObject *mapObject, struct Sprite *sprite) -{ - sprite->data2++; - mapObject->mapobj_bit_13 = ((sprite->data2 & 0x2) >> 1); - sprite->animPaused = 1; - if (sprite->data2 > 64) - { - sprite->data1 = 0; - sprite->data7 &= (-3); - return 1; - } - return 0; -} - -fieldmap_object_cb(sub_805D4F4, sub_805D518, gUnknown_083752E4); - -u8 sub_805D538(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 sub_805D54C(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; - return 1; -} - -u8 sub_805D578(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; - } - return 0; -} - -u8 sub_805D5BC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) - { - sprite->data1 = 4; - return 1; - } - return 0; -} - -u8 sub_805D5EC(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[2]; - memcpy(directions, gUnknown_083752A0, 2); - direction = sub_805CD60(mapObject, 1); - if (direction == 0) - { - direction = directions[Random() & 1]; - } - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; - return 1; -} - -fieldmap_object_cb(sub_805D634, sub_805D658, gUnknown_083752F8); - -u8 sub_805D678(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 sub_805D68C(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; - return 1; -} - -u8 sub_805D6B8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; - } - return 0; -} - -u8 sub_805D6FC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) - { - sprite->data1 = 4; - return 1; - } - return 0; -} - -u8 sub_805D72C(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[2]; - memcpy(directions, gUnknown_083752C0, 2); - direction = sub_805CD60(mapObject, 2); - if (direction == 0) - { - direction = directions[Random() & 1]; - } - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; - return 1; -} - -fieldmap_object_cb(sub_805D774, sub_805D798, gUnknown_0837530C); - -u8 sub_805D7B8(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 sub_805D7CC(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; - return 1; -} - -u8 sub_805D7F8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; - } - return 0; -} - -u8 sub_805D83C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) - { - sprite->data1 = 4; - return 1; - } - return 0; -} - -u8 sub_805D86C(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[2]; - memcpy(directions, gUnknown_08375320, 2); - direction = sub_805CD60(mapObject, 3); - if (direction == 0) - { - direction = directions[Random() & 1]; - } - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; - return 1; -} - -fieldmap_object_cb(sub_805D8B4, sub_805D8D8, gUnknown_08375324); - -u8 sub_805D8F8(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 sub_805D90C(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; - return 1; -} - -u8 sub_805D938(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; - } - return 0; -} - -u8 sub_805D97C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) - { - sprite->data1 = 4; - return 1; - } - return 0; -} - -u8 sub_805D9AC(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[2]; - memcpy(directions, gUnknown_08375338, 2); - direction = sub_805CD60(mapObject, 4); - if (direction == 0) - { - direction = directions[Random() & 1]; - } - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; - return 1; -} - -fieldmap_object_cb(sub_805D9F4, sub_805DA18, gUnknown_0837533C); - -u8 sub_805DA38(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 sub_805DA4C(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; - return 1; -} - -u8 sub_805DA78(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; - } - return 0; -} - -u8 sub_805DABC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) - { - sprite->data1 = 4; - return 1; - } - return 0; -} - -u8 sub_805DAEC(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[2]; - memcpy(directions, gUnknown_08375350, 2); - direction = sub_805CD60(mapObject, 5); - if (direction == 0) - { - direction = directions[Random() & 1]; - } - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; - return 1; -} - -fieldmap_object_cb(sub_805DB34, sub_805DB58, gUnknown_08375354); - -u8 sub_805DB78(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 sub_805DB8C(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; - return 1; -} - -u8 sub_805DBB8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; - } - return 0; -} - -u8 sub_805DBFC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) - { - sprite->data1 = 4; - return 1; - } - return 0; -} - -u8 sub_805DC2C(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[2]; - memcpy(directions, gUnknown_08375368, 2); - direction = sub_805CD60(mapObject, 6); - if (direction == 0) - { - direction = directions[Random() & 1]; - } - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; - return 1; -} - -fieldmap_object_cb(sub_805DC74, sub_805DC98, gUnknown_0837536C); - -u8 sub_805DCB8(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 sub_805DCCC(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; - return 1; -} - -u8 sub_805DCF8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; - } - return 0; -} - -u8 sub_805DD3C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) - { - sprite->data1 = 4; - return 1; - } - return 0; -} - -u8 sub_805DD6C(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[4]; - memcpy(directions, gUnknown_08375380, 4); - direction = sub_805CD60(mapObject, 7); - if (direction == 0) - { - direction = directions[Random() & 3]; - } - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; - return 1; -} - -fieldmap_object_cb(sub_805DDB4, sub_805DDD8, gUnknown_08375384); - -u8 sub_805DDF8(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 sub_805DE0C(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; - return 1; -} - -u8 sub_805DE38(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; - } - return 0; -} - -u8 sub_805DE7C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) - { - sprite->data1 = 4; - return 1; - } - return 0; -} - -u8 sub_805DEAC(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[4]; - memcpy(directions, gUnknown_08375398, 4); - direction = sub_805CD60(mapObject, 8); - if (direction == 0) - { - direction = directions[Random() & 3]; - } - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; - return 1; -} - -fieldmap_object_cb(sub_805DEF4, sub_805DF18, gUnknown_0837539C); - -u8 sub_805DF38(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 sub_805DF4C(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; - return 1; -} - -u8 sub_805DF78(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; - } - return 0; -} - -u8 sub_805DFBC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) - { - sprite->data1 = 4; - return 1; - } - return 0; -} - -u8 sub_805DFEC(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[4]; - memcpy(directions, gUnknown_083753B0, 4); - direction = sub_805CD60(mapObject, 9); - if (direction == 0) - { - direction = directions[Random() & 3]; - } - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; - return 1; -} - -fieldmap_object_cb(sub_805E034, sub_805E058, gUnknown_083753B4); - -u8 sub_805E078(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 sub_805E08C(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; - return 1; -} - -u8 sub_805E0B8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; - } - return 0; -} - -u8 sub_805E0FC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) - { - sprite->data1 = 4; - return 1; - } - return 0; -} - -u8 sub_805E12C(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[4]; - memcpy(directions, gUnknown_083753C8, 4); - direction = sub_805CD60(mapObject, 10); - if (direction == 0) - { - direction = directions[Random() & 3]; - } - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; - return 1; -} - -fieldmap_object_cb(sub_805E174, sub_805E198, gUnknown_083753CC); - -u8 sub_805E1B8(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 1; - return 1; -} - -u8 sub_805E1E4(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sub_8064820(sprite, 0x30); - sprite->data1 = 2; - } - return 0; -} - -u8 sub_805E208(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) - { - sprite->data1 = 3; - } - return 0; -} - -u8 sub_805E234(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[5]; - memcpy(directions, gUnknown_083753DC, 5); - direction = sub_805CD60(mapObject, 0); - if (direction == 0) - { - direction = directions[mapObject->mapobj_unk_18]; - } - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 0; - return 1; -} - -fieldmap_object_cb(sub_805E278, sub_803E29C, gUnknown_083753E4); - -u8 sub_805E2BC(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 1; - return 1; -} - -u8 sub_805E2E8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sub_8064820(sprite, 0x30); - sprite->data1 = 2; - } - return 0; -} - -u8 sub_805E30C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) - { - sprite->data1 = 3; - } - return 0; -} - -u8 sub_805E338(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - u8 directions[5]; - memcpy(directions, gUnknown_083753F4, 5); - direction = sub_805CD60(mapObject, 0); - if (direction == 0) - { - direction = directions[mapObject->mapobj_unk_18]; - } - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 0; - return 1; -} - -fieldmap_object_cb(sub_805E37C, sub_805E3A0, gUnknown_083753FC); - -u8 sub_805E3C0(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 sub_805E3D4(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 direction; - direction = gUnknown_0836DC09[mapObject->animPattern]; - if (mapObject->mapobj_unk_21 != 0) - { - direction = GetOppositeDirection(direction); - } - FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 2; - return 1; -} - -u8 sub_805E40C(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 v0; - u8 goSpeed0AnimId; - if (mapObject->mapobj_unk_21 && mapObject->coords1.x == mapObject->coords2.x && mapObject->coords1.y == mapObject->coords2.y) - { - mapObject->mapobj_unk_21 = 0; - FieldObjectSetDirection(mapObject, GetOppositeDirection(mapObject->placeholder18)); - } - v0 = sub_805FF20(mapObject, mapObject->placeholder18); - goSpeed0AnimId = GetGoSpeed0AnimId(mapObject->placeholder18); - if (v0 == 1) - { - mapObject->mapobj_unk_21 ++; - FieldObjectSetDirection(mapObject, GetOppositeDirection(mapObject->placeholder18)); - goSpeed0AnimId = GetGoSpeed0AnimId(mapObject->placeholder18); - v0 = sub_805FF20(mapObject, mapObject->placeholder18); - } - if (v0 != 0) - { - goSpeed0AnimId = GetStepInPlaceDelay16AnimId(mapObject->mapobj_unk_18); - } - FieldObjectSetRegularAnim(mapObject, sprite, goSpeed0AnimId); - mapObject->mapobj_bit_1 = 1; - sprite->data1 = 3; - return 1; -} - -u8 sub_805E4C4(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 1; - } - return 0; -} - -u8 sub_805E4EC(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - sprite->data1 = 1; - return 1; -} - -u8 MoveFieldObjectInNextDirectionInSequence(struct MapObject *mapObject, struct Sprite *sprite, u8 *directionSequence) -{ - u8 v0; - u8 goSpeed0AnimId; - if (mapObject->mapobj_unk_21 == 3 && mapObject->coords1.x == mapObject->coords2.x && mapObject->coords1.y == mapObject->coords2.y) - { - mapObject->mapobj_unk_21 = 0; - } - FieldObjectSetDirection(mapObject, directionSequence[mapObject->mapobj_unk_21]); - goSpeed0AnimId = GetGoSpeed0AnimId(mapObject->placeholder18); - v0 = sub_805FF20(mapObject, mapObject->placeholder18); - if (v0 == 1) - { - mapObject->mapobj_unk_21 ++; - FieldObjectSetDirection(mapObject, directionSequence[mapObject->mapobj_unk_21]); - goSpeed0AnimId = GetGoSpeed0AnimId(mapObject->placeholder18); - v0 = sub_805FF20(mapObject, mapObject->placeholder18); - } - if (v0 != 0) - { - goSpeed0AnimId = GetStepInPlaceDelay16AnimId(mapObject->mapobj_unk_18); - } - FieldObjectSetRegularAnim(mapObject, sprite, goSpeed0AnimId); - mapObject->mapobj_bit_1 = 1; - sprite->data1 = 2; - return 1; -} - -u8 sub_805E5B4(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 1; - } - return 0; -} - -fieldmap_object_cb(sub_805E5DC, sub_805E600, gUnknown_0837540C); - -u8 sub_805E620(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375418, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805E668, sub_805E68C, gUnknown_0837541C); - -u8 sub_805E6AC(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375428, 4); - if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.x == mapObject->coords2.x) - { - mapObject->mapobj_unk_21 = 2; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805E6F4, sub_805E718, gUnknown_0837542C); - -u8 sub_805E738(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375438, 4); - if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.y == mapObject->coords2.y) - { - mapObject->mapobj_unk_21 = 2; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805E780, sub_805E7A4, gUnknown_0837543C); - -u8 sub_805E7C4(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375448, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - - - -fieldmap_object_cb(sub_805E80C, sub_805E830, gUnknown_0837544C); - -u8 sub_805E850(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375458, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805E898, sub_805E8BC, gUnknown_0837545C); - -u8 sub_805E8DC(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375468, 4); - if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.x == mapObject->coords2.x) - { - mapObject->mapobj_unk_21 = 2; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805E924, sub_805E948, gUnknown_0837546C); - -u8 sub_805E968(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375240, 4); - if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.y == mapObject->coords2.y) - { - mapObject->mapobj_unk_21 = 2; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805E9B0, sub_805E9D4, gUnknown_08375478); - -u8 sub_805E9F4(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375484, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805EA3C, sub_805EA60, gUnknown_08375488); - -u8 sub_805EA80(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375494, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805EAC8, sub_805EAEC, gUnknown_08375498); - -u8 sub_805EB0C(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_083754A4, 4); - if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.y == mapObject->coords2.y) - { - mapObject->mapobj_unk_21 = 2; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805EB54, sub_805EB78, gUnknown_083754A8); - -u8 sub_805EB98(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_083754B4, 4); - if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.x == mapObject->coords2.x) - { - mapObject->mapobj_unk_21 = 2; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805EBE0, sub_805EC04, gUnknown_083754B8); - -u8 sub_805EC24(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_083754C4, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805EC6C, sub_805EC90, gUnknown_083754C8); - -u8 sub_805ECB0(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_083754D4, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805ECF8, sub_805ED1C, gUnknown_083754D8); - -u8 sub_805ED3C(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_083754E4, 4); - if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.y == mapObject->coords2.y) - { - mapObject->mapobj_unk_21 = 2; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805ED84, sub_805EDA8, gUnknown_083754E8); - -u8 sub_805EDC8(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_083754F4, 4); - if (mapObject->mapobj_unk_21 == 1 && mapObject->coords1.x == mapObject->coords2.x) - { - mapObject->mapobj_unk_21 = 2; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805EE10, sub_805EE34, gUnknown_083754F8); - -u8 sub_805EE54(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375504, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805EE9C, sub_805EEC0, gUnknown_08375508); - -u8 sub_805EEE0(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375514, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805EF28, sub_805EF4C, gUnknown_08375518); - -u8 sub_805EF6C(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375524, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805EFB4, sub_805EFD8, gUnknown_08375528); - -u8 sub_805EFF8(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375534, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805F040, sub_805F064, gUnknown_08375538); - -u8 sub_805F084(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375544, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805F0CC, sub_805F0F0, gUnknown_08375548); - -u8 sub_805F110(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375554, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805F158, sub_805F17C, gUnknown_08375558); - -u8 sub_805F19C(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375564, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.y == mapObject->coords2.y) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805F1E4, sub_805F208, gUnknown_08375568); - -u8 sub_805F228(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375574, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -} - -fieldmap_object_cb(sub_805F270, sub_805F294, gUnknown_08375578); - -u8 sub_805F2B4(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 directions[4]; - memcpy(directions, gUnknown_08375584, 4); - if (mapObject->mapobj_unk_21 == 2 && mapObject->coords1.x == mapObject->coords2.x) - { - mapObject->mapobj_unk_21 = 3; - } - return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); -}; - -fieldmap_object_cb(sub_805F2FC, sub_805F320, gUnknown_08375588); - -u8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - if (mapObject->mapobj_unk_21 == 0) - { - mapObject->mapobj_unk_21 = player_get_direction_lower_nybble(); - } - sprite->data1 = 1; - return 1; -} - -u8 sub_805F364(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2) - { - return 0; - } - return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), NULL); -} - -u8 sub_805F3C4(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - mapObject->mapobj_bit_1 = 0; - sprite->data1 = 1; - } - return 0; -} - -#ifdef NONMATCHING - -u8 sub_805F3EC(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) -{ - return 0; -} - -u8 sub_805F3F0(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) -{ - int direction; - direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2); - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); - mapObject->mapobj_bit_1 = 1; - sprite->data1 = 2; - return 1; -} - -u8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) -{ - s16 x; - s16 y; - int direction; - direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2); - FieldObjectMoveDestCoords(mapObject, direction, &x, &y); - FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(direction)); - if (!npc_block_way(mapObject, x, y, direction) || (a3 != NULL && !a3(MapGridGetMetatileBehaviorAt(x, y)))) - { - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); - } - mapObject->mapobj_bit_1 = 1; - sprite->data1 = 2; - return 1; -} -#endif - -asm(".section .text_fmocb2_c\n"); - -fieldmap_object_cb(sub_805F8E0, sub_805F904, gUnknown_083755C0); - -u8 mss_08062EA4(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2) - { - return 0; - } - return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), MetatileBehavior_IsPokeGrass); -} - -u8 sub_805F9F8(struct MapObject *, struct Sprite *); - -void FieldObjectCB_TreeDisguise(struct Sprite *sprite) -{ - struct MapObject *mapObject; - 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]); - mapObject->mapobj_unk_1A = FieldEffectStart(0x1c); - mapObject->mapobj_unk_21 = 1; - sprite->data7 ++; - } - meta_step(&gMapObjects[sprite->data0], sprite, sub_805F9F8); -} - -u8 sub_805F9F8(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - return 0; -} - -void FieldObjectCB_MountainDisguise(struct Sprite *sprite) -{ - struct MapObject *mapObject; - 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]); - mapObject->mapobj_unk_1A = FieldEffectStart(0x1d); - mapObject->mapobj_unk_21 = 1; - sprite->data7 ++; - } - meta_step(&gMapObjects[sprite->data0], sprite, sub_805F9F8); -} - -u8 sub_805FAD8(struct MapObject *mapObject, struct Sprite *sprite); - -void FieldObjectCB_Hidden1(struct Sprite *sprite) -{ - if (sprite->data7 == 0) - { - gMapObjects[sprite->data0].mapobj_bit_26 = 1; - sprite->subspriteMode = 2; - sprite->oam.priority = 3; - sprite->data7 ++; - } - meta_step(&gMapObjects[sprite->data0], sprite, sub_805FAD8); -} - -u8 sub_805FAD8(struct MapObject *mapObject, struct Sprite *sprite) -{ - return gUnknown_083755CC[sprite->data1](mapObject, sprite); -} - -u8 sub_805FAF8(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - return 0; -} - -u8 sub_805FB04(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sprite->data1 = 0; - } - return 0; -} - -fieldmap_object_cb(sub_805FB20, sub_805FB44, gUnknown_083755D0); - -u8 sub_805FB64(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay16AnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 1; - return 1; -} - -fieldmap_object_cb(sub_805FB90, sub_805FBB4, gUnknown_083755D8); - -u8 sub_805FBD4(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay8AnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 1; - return 1; -} - -fieldmap_object_cb(sub_805FC00, sub_805FC24, gUnknown_083755E0); - -u8 sub_805FC44(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay4AnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 1; - return 1; -} - -fieldmap_object_cb(sub_805FC70, sub_805FC94, gUnknown_083755E8); - -u8 sub_805FCB4(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_reset(mapObject, sprite); - FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - mapObject->mapobj_bit_13 = 1; - sprite->data1 = 1; - return 1; -} - -u8 sub_805FCE8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (FieldObjectExecRegularAnim(mapObject, sprite)) - { - sprite->data1 = 2; - return 1; - } - return 0; -} - -u8 sub_805FD08(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_1 = 0; - return 0; -} - -void sub_805FC70(struct Sprite *sprite); - -void npc_reset(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_1 = 0; - mapObject->mapobj_bit_6 = 0; - mapObject->mapobj_bit_7 = 0; - mapObject->mapobj_unk_1C = 0xff; - sprite->data1 = 0; -} - -u8 FieldObjectDirectionToImageAnimId(u8 direction) -{ - return gUnknown_083755F4[direction]; -} - -u8 get_go_image_anim_num(u8 direction) -{ - return gUnknown_083755FD[direction]; -} - -u8 get_go_fast_image_anim_num(u8 direction) -{ - return gUnknown_08375606[direction]; -} - -u8 get_go_faster_image_anim_num(u8 direction) -{ - return gUnknown_0837560F[direction]; -} - -u8 sub_805FD78(u8 direction) -{ - return gUnknown_08375618[direction]; -} - -u8 sub_805FD88(u8 direction) -{ - return gUnknown_08375621[direction]; -} - -u8 sub_805FD98(u8 direction) -{ - return gUnknown_0837562A[direction]; -} - -u8 unref_sub_805FDA8(u8 direction) -{ - return gUnknown_08375633[direction]; -} - -u8 sub_805FDB8(u8 direction) -{ - return gUnknown_0837563C[direction]; -} - -u8 sub_805FDC8(u8 direction) -{ - return gUnknown_08375645[direction]; -} - -u8 sub_805FDD8(u8 direction) -{ - return gUnknown_0837564E[direction]; -} - -u8 sub_805FDE8(u8 direction) -{ - return gUnknown_08375657[direction]; -} - -u8 sub_805FDF8(u8 direction) -{ - return gUnknown_08375660[direction]; -} - -u8 sub_805FE08(u8 direction) -{ - return gUnknown_08375669[direction]; -} - -u8 get_run_image_anim_num(u8 direction) -{ - return gUnknown_08375672[direction]; -} - -void sub_805FE28(struct MapObject *mapObject, struct Sprite *sprite, u8 animNum) -{ - if (!mapObject->mapobj_bit_12) - { - sprite->animNum = animNum; - if (sprite->animCmdIndex == 1) - { - sprite->animCmdIndex = 2; - } else if (sprite->animCmdIndex == 3) - { - sprite->animCmdIndex = 0; - } - SeekSpriteAnim(sprite, sprite->animCmdIndex); - } -} - -void sub_805FE64(struct MapObject *mapObject, struct Sprite *sprite, u8 animNum) -{ - u8 animCmdIndex; - if (!mapObject->mapobj_bit_12) - { - sprite->animNum = animNum; - animCmdIndex = 3; - if (sprite->animCmdIndex < 2) - { - animCmdIndex = 1; - } - SeekSpriteAnim(sprite, animCmdIndex); - } -} - -u8 sub_805FE90(s16 a0, s16 a1, s16 a2, s16 a3) -{ - if (a0 > a2) - { - return DIR_WEST; - } else if (a0 < a2) - { - return DIR_EAST; - } else if (a1 > a3) - { - return DIR_NORTH; - } else - { - return DIR_SOUTH; - } -} - -void npc_set_running_behaviour_etc(struct MapObject *mapObject, u8 animPattern) -{ - mapObject->animPattern = animPattern; - mapObject->mapobj_unk_21 = 0; - mapObject->animId = 0; - gSprites[mapObject->spriteId].callback = gUnknown_0836DA88[animPattern]; - gSprites[mapObject->spriteId].data1 = 0; -} - -u8 npc_running_behaviour_by_direction(u8 direction) -{ - return gUnknown_0837567B[direction]; -} - -u8 sub_805FF20(struct MapObject *mapObject, u8 direction) -{ - s16 x; - s16 y; - x = mapObject->coords2.x; - y = mapObject->coords2.y; - MoveCoords(direction, &x, &y); - return npc_block_way(mapObject, x, y, direction); -} - -bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, s16 y); -bool8 CheckForCollisionBetweenFieldObjects(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)) - { - return 2; - } else if (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction)) - { - return 2; - } - if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y)) - { - return 3; - } - if (CheckForCollisionBetweenFieldObjects(mapObject, x, y)) - { - return 4; - } - return 0; -} - -u8 sub_8060024(struct MapObject *mapObject, s16 x, s16 y, u8 direction) -{ - u8 flags; - 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)) - { - flags |= 8; - } - return flags; -} - -bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, s16 y) -{ - 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; - } - } - 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 0; -} - -bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction) -{ - if (gUnknown_08375684[direction - 1](mapObject->mapobj_unk_1E) || gUnknown_08375694[direction - 1](MapGridGetMetatileBehaviorAt(x, y))) - { - return 1; - } - return 0; -} - -bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *mapObject, s16 x, s16 y) -{ - struct MapObject *mapObject2; - u8 i; - for (i=0; i<16; i++) - { - 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; - } - } - } - return 0; -} - -bool8 sub_8060234(u8 localId, u8 mapNum, u8 mapGroup) -{ - u8 mapObjectId; - if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - { - if (gSprites[gMapObjects[mapObjectId].spriteId].data7 & 2) - { - return 1; - } - } - return 0; -} - -void sub_8060288(u8 localId, u8 mapNum, u8 mapGroup) -{ - u8 mapObjectId; - if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - { - gSprites[gMapObjects[mapObjectId].spriteId].data7 |= 4; - } -} - -void MoveCoords(u8 direction, s16 *x, s16 *y) -{ - *x += gDirectionToVector[direction].x; - *y += gDirectionToVector[direction].y; -} - -void unref_sub_80602F8(u8 direction, s16 *x, s16 *y) -{ - *x += gDirectionToVector[direction].x << 4; - *y += gDirectionToVector[direction].y << 4; -} - -void sub_8060320(u8 direction, s16 *x, s16 *y, s16 deltaX, s16 deltaY) -{ - if (gDirectionToVector[direction].x > 0) - { - *x += deltaX; - } - if (gDirectionToVector[direction].x < 0) - { - *x -= deltaX; - } - if (gDirectionToVector[direction].y > 0) - { - *y += deltaY; - } - if (gDirectionToVector[direction].y < 0) - { - *y -= deltaY; - } -} - -void sub_8060388(s16 x1, s16 y1, s16 *x2, s16 *y2) -{ - *x2 = (x1 - gSaveBlock1.pos.x) << 4; - *y2 = (y1 - gSaveBlock1.pos.y) << 4; - *x2 -= gUnknown_0300489C; - *y2 -= gUnknown_03004898; -} - -void sub_80603CC(s16 x1, s16 y1, s16 *x2, s16 *y2) -{ - s16 x3; - s16 y3; - x3 = -gUnknown_0300489C - gUnknown_03004880.unk10; - y3 = -gUnknown_03004898 - gUnknown_03004880.unk14; - if (gUnknown_03004880.unk10 > 0) - { - x3 += 0x10; - } - if (gUnknown_03004880.unk10 < 0) - { - x3 -= 0x10; - } - if (gUnknown_03004880.unk14 > 0) - { - y3 += 0x10; - } - if (gUnknown_03004880.unk14 < 0) - { - y3 -= 0x10; - } - *x2 = ((x1 - gSaveBlock1.pos.x) << 4) + x3; - *y2 = ((y1 - gSaveBlock1.pos.y) << 4) + y3; -} - -void sub_8060470(s16 *x, s16 *y, s16 dx, s16 dy) -{ - sub_80603CC(*x, *y, x, y); - *x += dx; - *y += dy; -} - -void GetFieldObjectMovingCameraOffset(s16 *x, s16 *y) -{ - *x = 0; - *y = 0; - if (gUnknown_03004880.unk10 > 0) - { - (*x)++; - } - if (gUnknown_03004880.unk10 < 0) - { - (*x)--; - } - if (gUnknown_03004880.unk14 > 0) - { - (*y)++; - } - if (gUnknown_03004880.unk14 < 0) - { - (*y)--; - } -} - -void FieldObjectMoveDestCoords(struct MapObject *mapObject, u8 direction, s16 *x, s16 *y) -{ - *x = mapObject->coords2.x; - *y = mapObject->coords2.y; - MoveCoords(direction, x, y); -} - -bool8 FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(struct MapObject *mapObject) -{ - if (mapObject->mapobj_bit_1 || mapObject->mapobj_bit_6) - { - return TRUE; - } - return FALSE; -} - -bool8 FieldObjectIsSpecialAnimActive(struct MapObject *mapObject) -{ - if (mapObject->mapobj_bit_6 && mapObject->mapobj_unk_1C != 0xff) - { - return TRUE; - } - return FALSE; -} - -bool8 FieldObjectSetSpecialAnim(struct MapObject *mapObject, u8 specialAnimId) -{ - if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject)) - { - return TRUE; - } - UnfreezeMapObject(mapObject); - mapObject->mapobj_unk_1C = specialAnimId; - mapObject->mapobj_bit_6 = 1; - mapObject->mapobj_bit_7 = 0; - gSprites[mapObject->spriteId].data2 = 0; - return FALSE; -} - -void FieldObjectForceSetSpecialAnim(struct MapObject *mapObject, u8 specialAnimId) -{ - FieldObjectClearAnimIfSpecialAnimActive(mapObject); - FieldObjectSetSpecialAnim(mapObject, specialAnimId); -} - -void FieldObjectClearAnimIfSpecialAnimActive(struct MapObject *mapObject) -{ - if (mapObject->mapobj_bit_6) - { - FieldObjectClearAnim(mapObject); - } -} - -void FieldObjectClearAnim(struct MapObject *mapObject) -{ - mapObject->mapobj_unk_1C = 0xFF; - mapObject->mapobj_bit_6 = 0; - mapObject->mapobj_bit_7 = 0; - gSprites[mapObject->spriteId].data1 = 0; - gSprites[mapObject->spriteId].data2 = 0; -} - -bool8 FieldObjectCheckIfSpecialAnimFinishedOrInactive(struct MapObject *mapObject) -{ - if (mapObject->mapobj_bit_6) - return mapObject->mapobj_bit_7; - return 0x10; -} - -bool8 FieldObjectClearAnimIfSpecialAnimFinished(struct MapObject *mapObject) -{ - u8 specialAnimStatus; - specialAnimStatus = FieldObjectCheckIfSpecialAnimFinishedOrInactive(mapObject); - if (specialAnimStatus != 0 && specialAnimStatus != 0x10) - { - FieldObjectClearAnimIfSpecialAnimActive(mapObject); - } - return specialAnimStatus; -} - -u8 FieldObjectGetSpecialAnim(struct MapObject *mapObject) -{ - if (mapObject->mapobj_bit_6) - { - return mapObject->mapobj_unk_1C; - } - return 0xFF; -} - -extern void DoGroundEffects_OnSpawn(struct MapObject *mapObject, struct Sprite *sprite); -extern void DoGroundEffects_OnBeginStep(struct MapObject *mapObject, struct Sprite *sprite); -extern void DoGroundEffects_OnFinishStep(struct MapObject *mapObject, struct Sprite *sprite); -void npc_obj_transfer_image_anim_pause_flag(struct MapObject *mapObject, struct Sprite *sprite); -void sub_80634A0(struct MapObject *mapObject, struct Sprite *sprite); -void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *sprite); -void FieldObjectUpdateSubpriority(struct MapObject *mapObject, struct Sprite *sprite); - -void meta_step(struct MapObject *mapObject, struct Sprite *sprite, u8 (*callback)(struct MapObject *, struct Sprite *)) -{ - DoGroundEffects_OnSpawn(mapObject, sprite); - sub_80634A0(mapObject, sprite); - if (FieldObjectIsSpecialAnimActive(mapObject)) - { - FieldObjectExecSpecialAnim(mapObject, sprite); - } else - { - if (!mapObject->mapobj_bit_8) - { - while (callback(mapObject, sprite)); - } - } - DoGroundEffects_OnBeginStep(mapObject, sprite); - DoGroundEffects_OnFinishStep(mapObject, sprite); - npc_obj_transfer_image_anim_pause_flag(mapObject, sprite); - sub_80634D0(mapObject, sprite); - FieldObjectUpdateSubpriority(mapObject, sprite); -} - - -u8 GetFaceDirectionAnimId(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_083756C8, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 GetSimpleGoAnimId(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_083756CD, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 GetGoSpeed0AnimId(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_083756D2, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_8060744(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_083756D7, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 d2s_08064034(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_083756DC, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_806079C(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_083756E1, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_80607C8(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_083756E6, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_80607F4(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_083756EB, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 GetJumpLedgeAnimId(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_083756F0, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_806084C(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_083756F5, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_8060878(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_083756FA, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_80608A4(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_083756FF, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_80608D0(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_08375704, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 GetStepInPlaceDelay32AnimId(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_08375709, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 GetStepInPlaceDelay16AnimId(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_0837570E, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 GetStepInPlaceDelay8AnimId(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_08375713, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 GetStepInPlaceDelay4AnimId(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_08375718, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 FieldObjectFaceOppositeDirection(struct MapObject *mapObject, u8 direction) -{ - return FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(GetOppositeDirection(direction))); -} - -u8 sub_80609D8(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_0837571D, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_8060A04(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_08375722, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_8060A30(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_08375727, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_8060A5C(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_0837572C, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_8060A88(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_08375731, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_8060AB4(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_08375736, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_8060AE0(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_0837573B, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_8060B0C(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_08375740, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_8060B38(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_08375745, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 sub_8060B64(u8 index) -{ - u8 directions[5]; - memcpy(directions, gUnknown_0837574A, 5); - if (index >= 5) - { - index = 0; - } - return directions[index]; -} - -u8 GetOppositeDirection(u8 direction) -{ - u8 directions[8]; - memcpy(directions, gUnknown_0837574F, 8); - if (direction == 0 || direction > 8) - { - return direction; - } - return directions[direction - 1]; -} - -int zffu_offset_calc(u8 a0, u8 a1) -{ - return gUnknown_08375757[a0 - 1][a1 - 1]; -} - -#ifdef NONMATCHING -int state_to_direction(u8 a0, u8 a1, u8 a2) -{ - int zffuOffset; - asm_comment("For some reason, r2 is being backed up to r3 and restored ahead of the zffu call."); - if (a1 == 0 || a2 == 0 || a1 > 4 || a2 > 4) - { - return 0; - } - zffuOffset = zffu_offset_calc(a1, a2); - return gUnknown_08375767[a0 - 1][zffuOffset - 1]; -} -#else -__attribute__((naked)) -int state_to_direction(u8 a0, u8 a1, u8 a2) -{ - asm(".syntax unified\n\ - push {r4,lr}\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - adds r0, r1, 0\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - cmp r1, 0\n\ - beq _08060BFC\n\ - cmp r2, 0\n\ - beq _08060BFC\n\ - cmp r1, 0x4\n\ - bhi _08060BFC\n\ - cmp r2, 0x4\n\ - bls _08060C00\n\ -_08060BFC:\n\ - movs r0, 0\n\ - b _08060C12\n\ -_08060C00:\n\ - adds r1, r2, 0\n\ - bl zffu_offset_calc\n\ - ldr r2, _08060C18 @ =gUnknown_08375767\n\ - lsls r1, r4, 2\n\ - subs r1, 0x5\n\ - adds r0, r1\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ -_08060C12:\n\ - pop {r4}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_08060C18: .4byte gUnknown_08375767\n\ -.syntax divided\n"); -} -#endif - -void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (gUnknown_08375778[mapObject->mapobj_unk_1C][sprite->data2](mapObject, sprite)) - { - mapObject->mapobj_bit_7 = 1; - } -} - -bool8 FieldObjectExecRegularAnim(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (gUnknown_08375778[mapObject->mapobj_unk_1C][sprite->data2](mapObject, sprite)) - { - mapObject->mapobj_unk_1C = 0xFF; - sprite->data2 = 0; - return 1; - } - return 0; -} - -void FieldObjectSetRegularAnim(struct MapObject *mapObject, struct Sprite *sprite, u8 animId) -{ - mapObject->mapobj_unk_1C = animId; - sprite->data2 = 0; -} - -void an_look_any(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) -{ - FieldObjectSetDirection(mapObject, direction); - npc_coords_shift_still(mapObject); - sub_805FE64(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); - sprite->animPaused = 1; - sprite->data2 = 1; -} - -u8 sub_8060CE0(struct MapObject *mapObject, struct Sprite *sprite) -{ - an_look_any(mapObject, sprite, DIR_SOUTH); - return 1; -} - -u8 sub_8060CF0(struct MapObject *mapObject, struct Sprite *sprite) -{ - an_look_any(mapObject, sprite, DIR_NORTH); - return 1; -} - -u8 sub_8060D00(struct MapObject *mapObject, struct Sprite *sprite) -{ - an_look_any(mapObject, sprite, DIR_WEST); - return 1; -} - -u8 sub_8060D10(struct MapObject *mapObject, struct Sprite *sprite) -{ - an_look_any(mapObject, sprite, DIR_EAST); - return 1; -} - -void sub_8060D20(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) -{ - s16 x; - s16 y; - x = mapObject->coords2.x; - y = mapObject->coords2.y; - FieldObjectSetDirection(mapObject, direction); - MoveCoords(direction, &x, &y); - npc_coords_shift(mapObject, x, y); - oamt_npc_ministep_reset(sprite, direction, a3); - sprite->animPaused = 0; - mapObject->mapobj_bit_2 = 1; - sprite->data2 = 1; -} - -extern u8 (*const gUnknown_083759C0[5])(u8); - -void do_go_anim(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) -{ - u8 (*const functions[5])(u8); - memcpy((void *)functions, gUnknown_083759C0, sizeof(gUnknown_083759C0)); - sub_8060D20(mapObject, sprite, direction, a3); - sub_805FE28(mapObject, sprite, functions[a3](mapObject->mapobj_unk_18)); -} - -void do_run_anim(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) -{ - sub_8060D20(mapObject, sprite, direction, 1); - sub_805FE28(mapObject, sprite, get_run_image_anim_num(mapObject->mapobj_unk_18)); -} - -bool8 obj_npc_ministep(struct Sprite *); - -bool8 npc_obj_ministep_stop_on_arrival(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (obj_npc_ministep(sprite)) - { - npc_coords_shift_still(mapObject); - mapObject->mapobj_bit_3 = 1; - sprite->animPaused = 1; - return 1; - } - return 0; -} - -void sub_8060E68(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) -{ - s16 x; - s16 y; - x = mapObject->coords2.x; - y = mapObject->coords2.y; - FieldObjectSetDirection(mapObject, direction); - MoveCoords(direction, &x, &y); - npc_coords_shift(mapObject, x, y); - sub_806467C(sprite, direction); - sprite->animPaused = 0; - mapObject->mapobj_bit_2 = 1; - sprite->data2 = 1; -} - -void sub_8060ED8(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) -{ - sub_8060E68(mapObject, sprite, direction); - sub_805FE28(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); -} - -bool8 an_walk_any_2(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_806468C(sprite)) - { - npc_coords_shift_still(mapObject); - mapObject->mapobj_bit_3 = 1; - sprite->animPaused = 1; - return TRUE; - } - return FALSE; -} - -bool8 sub_8060F5C(struct MapObject *, struct Sprite *); - -bool8 sub_8060F3C(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8060ED8(mapObject, sprite, DIR_SOUTH); - return sub_8060F5C(mapObject, sprite); -} - -bool8 sub_8060F5C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (an_walk_any_2(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8060F9C(struct MapObject *, struct Sprite *); - -bool8 sub_8060F7C(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8060ED8(mapObject, sprite, DIR_NORTH); - return sub_8060F9C(mapObject, sprite); -} - -bool8 sub_8060F9C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (an_walk_any_2(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8060FDC(struct MapObject *, struct Sprite *); - -bool8 sub_8060FBC(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8060ED8(mapObject, sprite, DIR_WEST); - return sub_8060FDC(mapObject, sprite); -} - -bool8 sub_8060FDC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (an_walk_any_2(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_806101C(struct MapObject *, struct Sprite *); - -bool8 sub_8060FFC(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8060ED8(mapObject, sprite, DIR_EAST); - return sub_806101C(mapObject, sprite); -} - -bool8 sub_806101C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (an_walk_any_2(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_806105C(struct MapObject *, struct Sprite *); - -bool8 sub_806103C(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_SOUTH, 0); - return sub_806105C(mapObject, sprite); -} - -bool8 sub_806105C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_806109C(struct MapObject *, struct Sprite *); - -bool8 sub_806107C(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_NORTH, 0); - return sub_806109C(mapObject, sprite); -} - -bool8 sub_806109C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_80610DC(struct MapObject *, struct Sprite *); - -bool8 sub_80610BC(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_WEST, 0); - return sub_80610DC(mapObject, sprite); -} - -bool8 sub_80610DC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_806111C(struct MapObject *, struct Sprite *); - -bool8 sub_80610FC(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_EAST, 0); - return sub_806111C(mapObject, sprite); -} - -bool8 sub_806111C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -void sub_806113C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a4, u8 a5) -{ - s16 vSPp4[3]; - s16 x; - s16 y; - memcpy(vSPp4, gUnknown_08375A34, sizeof gUnknown_08375A34); - x = 0; - y = 0; - FieldObjectSetDirection(mapObject, direction); - sub_8060320(direction, &x, &y, vSPp4[a4], vSPp4[a4]); - npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y); - sub_80646E4(sprite, direction, a4, a5); - sprite->data2 = 1; - sprite->animPaused = 0; - mapObject->mapobj_bit_2 = 1; - mapObject->mapobj_bit_4 = 1; -} - -void maybe_shadow_1(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a4, u8 a5) -{ - sub_806113C(mapObject, sprite, direction, a4, a5); - sub_805FE28(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); - DoShadowFieldEffect(mapObject); -} - -u8 sub_806123C(struct MapObject *mapObject, struct Sprite *sprite, u8 (*const callback)(struct Sprite *)) -{ - s16 vSPp4[3]; - s16 x; - s16 y; - u8 retval; - memcpy(vSPp4, gUnknown_08375A3A, sizeof gUnknown_08375A3A); - retval = callback(sprite); - if (retval == 1 && vSPp4[sprite->data4] != 0) - { - x = 0; - y = 0; - sub_8060320(mapObject->placeholder18, &x, &y, vSPp4[sprite->data4], vSPp4[sprite->data4]); - npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y); - mapObject->mapobj_bit_2 = 1; - mapObject->mapobj_bit_4 = 1; - } else if (retval == 0xff) - { - npc_coords_shift_still(mapObject); - mapObject->mapobj_bit_3 = 1; - mapObject->mapobj_bit_5 = 1; - sprite->animPaused = 1; - } - return retval; -} - -u8 sub_8061300(struct MapObject *mapObject, struct Sprite *sprite) -{ - return sub_806123C(mapObject, sprite, sub_8064704); -} - -u8 sub_8061314(struct MapObject *mapObject, struct Sprite *sprite) -{ - return sub_806123C(mapObject, sprite, sub_806478C); -} - -bool8 sub_8061328(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061300(mapObject, sprite) == 0xFF) - { - return TRUE; - } - return FALSE; -} - -bool8 sub_8061340(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061314(mapObject, sprite) == 0xFF) - { - return TRUE; - } - return FALSE; -} - -bool8 sub_8061358(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 retval; - - retval = sub_8061300(mapObject, sprite); - if (retval != 1) - { - if (retval == 0xFF) - { - return TRUE; - } - return FALSE; - } - FieldObjectSetDirection(mapObject, GetOppositeDirection(mapObject->placeholder18)); - sub_805FE64(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); - return FALSE; -} - -bool8 sub_80613D4(struct MapObject *, struct Sprite *); -bool8 sub_806142C(struct MapObject *, struct Sprite *); -bool8 sub_8061484(struct MapObject *, struct Sprite *); -bool8 sub_80614DC(struct MapObject *, struct Sprite *); - -bool8 sub_80613A8(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 2, 0); - return sub_80613D4(mapObject, sprite); -} - -bool8 sub_80613D4(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8061400(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_NORTH, 2, 0); - return sub_806142C(mapObject, sprite); -} - -bool8 sub_806142C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8061458(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_WEST, 2, 0); - return sub_8061484(mapObject, sprite); -} - -bool8 sub_8061484(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_80614B0(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_EAST, 2, 0); - return sub_80614DC(mapObject, sprite); -} - -bool8 sub_80614DC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -void sub_8061508(struct Sprite *sprite, u16 duration) -{ - sprite->data2 = 1; - sprite->data3 = duration; -} - -bool8 sub_8061510(struct MapObject *mapObject, struct Sprite *sprite) -{ - sprite->data3--; - if (!sprite->data3) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_806152C(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8061508(sprite, 1); - return sub_8061510(mapObject, sprite); -} - -bool8 sub_806154C(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8061508(sprite, 2); - return sub_8061510(mapObject, sprite); -} - -bool8 sub_806156C(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8061508(sprite, 4); - return sub_8061510(mapObject, sprite); -} - -bool8 sub_806158C(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8061508(sprite, 8); - return sub_8061510(mapObject, sprite); -} - -bool8 sub_80615AC(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8061508(sprite, 16); - return sub_8061510(mapObject, sprite); -} - -bool8 sub_80615EC(struct MapObject *mapObject, struct Sprite *sprite); -bool8 sub_806162C(struct MapObject *mapObject, struct Sprite *sprite); -bool8 sub_806166C(struct MapObject *mapObject, struct Sprite *sprite); -bool8 sub_80616AC(struct MapObject *mapObject, struct Sprite *sprite); - -bool8 sub_80615CC(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_SOUTH, 1); - return sub_80615EC(mapObject, sprite); -} - -bool8 sub_80615EC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} -bool8 sub_806160C(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_NORTH, 1); - return sub_806162C(mapObject, sprite); -} - -bool8 sub_806162C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} -bool8 sub_806164C(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_WEST, 1); - return sub_806166C(mapObject, sprite); -} - -bool8 sub_806166C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} -bool8 sub_806168C(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_EAST, 1); - return sub_80616AC(mapObject, sprite); -} - -bool8 sub_80616AC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -void sub_80616CC(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 animId, u16 duration) -{ - FieldObjectSetDirection(mapObject, direction); - sub_805FE28(mapObject, sprite, animId); - sprite->animPaused = 0; - sprite->data2 = 1; - sprite->data3 = duration; -} - -bool8 sub_8061714(struct MapObject *mapObject, struct Sprite *sprite) -{ - sprite->data3--; - if (sprite->data3 == 0) - { - sprite->data2 = 2; - sprite->animPaused = 1; - return TRUE; - } - return FALSE; -} - -bool8 sub_806173C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sprite->data3 & 1) - { - sprite->animDelayCounter++; - } - return sub_8061714(mapObject, sprite); -} - -bool8 sub_8061778(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_image_anim_num(DIR_SOUTH), 32); - return sub_806173C(mapObject, sprite); -} - -bool8 sub_80617B0(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_image_anim_num(DIR_NORTH), 32); - return sub_806173C(mapObject, sprite); -} - -bool8 sub_80617E8(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_WEST, get_go_image_anim_num(DIR_WEST), 32); - return sub_806173C(mapObject, sprite); -} - -bool8 sub_8061820(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_EAST, get_go_image_anim_num(DIR_EAST), 32); - return sub_806173C(mapObject, sprite); -} - -bool8 sub_8061858(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_image_anim_num(DIR_SOUTH), 16); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_8061890(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_image_anim_num(DIR_NORTH), 16); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_80618C8(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_WEST, get_go_image_anim_num(DIR_WEST), 16); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_8061900(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_EAST, get_go_image_anim_num(DIR_EAST), 16); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_8061938(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_fast_image_anim_num(DIR_SOUTH), 8); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_8061970(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_fast_image_anim_num(DIR_NORTH), 8); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_80619A8(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_WEST, get_go_fast_image_anim_num(DIR_WEST), 8); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_80619E0(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_EAST, get_go_fast_image_anim_num(DIR_EAST), 8); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_8061A18(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_SOUTH, get_go_faster_image_anim_num(DIR_SOUTH), 4); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_8061A50(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_NORTH, get_go_faster_image_anim_num(DIR_NORTH), 4); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_8061A88(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_WEST, get_go_faster_image_anim_num(DIR_WEST), 4); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_8061AC0(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_EAST, get_go_faster_image_anim_num(DIR_EAST), 4); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_8061B18(struct MapObject *, struct Sprite *); - -bool8 sub_8061AF8(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_SOUTH, 2); - return sub_8061B18(mapObject, sprite); -} - -bool8 sub_8061B18(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - - -bool8 sub_8061B58(struct MapObject *, struct Sprite *); - -bool8 sub_8061B38(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_NORTH, 2); - return sub_8061B58(mapObject, sprite); -} - -bool8 sub_8061B58(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - - -bool8 sub_8061B98(struct MapObject *, struct Sprite *); - -bool8 sub_8061B78(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_WEST, 2); - return sub_8061B98(mapObject, sprite); -} - -bool8 sub_8061B98(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - - -bool8 sub_8061BD8(struct MapObject *, struct Sprite *); - -bool8 sub_8061BB8(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_EAST, 2); - return sub_8061BD8(mapObject, sprite); -} - -bool8 sub_8061BD8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8061C18(struct MapObject *, struct Sprite *); - -bool8 sub_8061BF8(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_SOUTH, 3); - return sub_8061C18(mapObject, sprite); -} - -bool8 sub_8061C18(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8061C58(struct MapObject *, struct Sprite *); - -bool8 sub_8061C38(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_NORTH, 3); - return sub_8061C58(mapObject, sprite); -} - -bool8 sub_8061C58(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - - -bool8 sub_8061C98(struct MapObject *, struct Sprite *); - -bool8 sub_8061C78(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_WEST, 3); - return sub_8061C98(mapObject, sprite); -} - -bool8 sub_8061C98(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - - -bool8 sub_8061CD8(struct MapObject *, struct Sprite *); - -bool8 sub_8061CB8(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_EAST, 3); - return sub_8061CD8(mapObject, sprite); -} - -bool8 sub_8061CD8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8061D18(struct MapObject *, struct Sprite *); - -bool8 sub_8061CF8(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_SOUTH, 4); - return sub_8061D18(mapObject, sprite); -} - -bool8 sub_8061D18(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8061D58(struct MapObject *, struct Sprite *); - -bool8 sub_8061D38(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_NORTH, 4); - return sub_8061D58(mapObject, sprite); -} - -bool8 sub_8061D58(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - - -bool8 sub_8061D98(struct MapObject *, struct Sprite *); - -bool8 sub_8061D78(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_WEST, 4); - return sub_8061D98(mapObject, sprite); -} - -bool8 sub_8061D98(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - - -bool8 sub_8061DD8(struct MapObject *, struct Sprite *); - -bool8 sub_8061DB8(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_go_anim(mapObject, sprite, DIR_EAST, 4); - return sub_8061DD8(mapObject, sprite); -} - -bool8 sub_8061DD8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8061E18(struct MapObject *, struct Sprite *); - -bool8 do_run_south_anim(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_run_anim(mapObject, sprite, DIR_SOUTH); - return sub_8061E18(mapObject, sprite); -} - -bool8 sub_8061E18(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8061E58(struct MapObject *, struct Sprite *); - -bool8 do_run_north_anim(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_run_anim(mapObject, sprite, DIR_NORTH); - return sub_8061E58(mapObject, sprite); -} - -bool8 sub_8061E58(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8061E98(struct MapObject *, struct Sprite *); - -bool8 do_run_west_anim(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_run_anim(mapObject, sprite, DIR_WEST); - return sub_8061E98(mapObject, sprite); -} - -bool8 sub_8061E98(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8061ED8(struct MapObject *, struct Sprite *); - -bool8 do_run_east_anim(struct MapObject *mapObject, struct Sprite *sprite) -{ - do_run_anim(mapObject, sprite, DIR_EAST); - return sub_8061ED8(mapObject, sprite); -} - -bool8 sub_8061ED8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -void npc_set_direction_and_anim__an_proceed(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 animNum) -{ - obj_anim_image_set_and_seek(sprite, animNum, 0); - FieldObjectSetDirection(mapObject, direction); - sprite->data2 = 1; -} - -bool8 sub_8061F24(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_set_direction_and_anim__an_proceed(mapObject, sprite, mapObject->placeholder18, sprite->animNum); - return FALSE; -} - -bool8 sub_8064864(struct Sprite *); - -bool8 sub_8061F3C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064864(sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -void sub_8061F5C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) -{ - sub_806113C(mapObject, sprite, direction, 1, 0); - StartSpriteAnim(sprite, sub_805FD88(direction)); -} - -bool8 sub_8061FB0(struct MapObject *, struct Sprite *); - -bool8 sub_8061F90(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8061F5C(mapObject, sprite, DIR_SOUTH); - return sub_8061FB0(mapObject, sprite); -} - -bool8 sub_8061FB0(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061340(mapObject, sprite)) - { - sprite->data2 = 2; - mapObject->mapobj_bit_5 = 0; - return TRUE; - } - return FALSE; -} - -bool8 sub_8061FF8(struct MapObject *, struct Sprite *); - -bool8 sub_8061FD8(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8061F5C(mapObject, sprite, DIR_NORTH); - return sub_8061FF8(mapObject, sprite); -} - -bool8 sub_8061FF8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061340(mapObject, sprite)) - { - sprite->data2 = 2; - mapObject->mapobj_bit_5 = 0; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062040(struct MapObject *, struct Sprite *); - -bool8 sub_8062020(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8061F5C(mapObject, sprite, DIR_WEST); - return sub_8062040(mapObject, sprite); -} - -bool8 sub_8062040(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061340(mapObject, sprite)) - { - sprite->data2 = 2; - mapObject->mapobj_bit_5 = 0; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062088(struct MapObject *, struct Sprite *); - -bool8 sub_8062068(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8061F5C(mapObject, sprite, DIR_EAST); - return sub_8062088(mapObject, sprite); -} - -bool8 sub_8062088(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061340(mapObject, sprite)) - { - sprite->data2 = 2; - mapObject->mapobj_bit_5 = 0; - return TRUE; - } - return FALSE; -} - -bool8 sub_80620B0(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 objectId; - if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, &objectId)) - { - an_look_any(mapObject, sprite, sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y)); - } - sprite->data2 = 1; - return TRUE; -} - -bool8 sub_806210C(struct MapObject *mapObject, struct Sprite *sprite) -{ - u8 objectId; - if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, &objectId)) - { - an_look_any(mapObject, sprite, GetOppositeDirection(sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y))); - } - sprite->data2 = 1; - return TRUE; -} - -bool8 sub_8062170(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_9 = 1; - sprite->data2 = 1; - return TRUE; -} - -bool8 sub_8062180(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_9 = 0; - sprite->data2 = 1; - return TRUE; -} - -bool8 sub_80621BC(struct MapObject *mapObject, struct Sprite *sprite); - -bool8 sub_8062190(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 1, 2); - return sub_80621BC(mapObject, sprite); -} - -bool8 sub_80621BC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062214(struct MapObject *mapObject, struct Sprite *sprite); - -bool8 sub_80621E8(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_NORTH, 1, 2); - return sub_8062214(mapObject, sprite); -} - -bool8 sub_8062214(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_806226C(struct MapObject *mapObject, struct Sprite *sprite); - -bool8 sub_8062240(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_WEST, 1, 2); - return sub_806226C(mapObject, sprite); -} - -bool8 sub_806226C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_80622C4(struct MapObject *mapObject, struct Sprite *sprite); - -bool8 sub_8062298(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_EAST, 1, 2); - return sub_80622C4(mapObject, sprite); -} - -bool8 sub_80622C4(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_806231C(struct MapObject *mapObject, struct Sprite *sprite); - -bool8 sub_80622F0(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 0, 0); - return sub_806231C(mapObject, sprite); -} - -bool8 sub_806231C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062374(struct MapObject *mapObject, struct Sprite *sprite); - -bool8 sub_8062348(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_NORTH, 0, 0); - return sub_8062374(mapObject, sprite); -} - -bool8 sub_8062374(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_80623CC(struct MapObject *mapObject, struct Sprite *sprite); - -bool8 sub_80623A0(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_WEST, 0, 0); - return sub_80623CC(mapObject, sprite); -} - -bool8 sub_80623CC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062424(struct MapObject *mapObject, struct Sprite *sprite); - -bool8 sub_80623F8(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_EAST, 0, 0); - return sub_8062424(mapObject, sprite); -} - -bool8 sub_8062424(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_806247C(struct MapObject *mapObject, struct Sprite *sprite); - -bool8 sub_8062450(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 0, 2); - return sub_806247C(mapObject, sprite); -} - -bool8 sub_806247C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061358(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_80624D4(struct MapObject *mapObject, struct Sprite *sprite); - -bool8 sub_80624A8(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_NORTH, 0, 2); - return sub_80624D4(mapObject, sprite); -} - -bool8 sub_80624D4(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061358(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_806252C(struct MapObject *mapObject, struct Sprite *sprite); - -bool8 sub_8062500(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_WEST, 0, 2); - return sub_806252C(mapObject, sprite); -} - -bool8 sub_806252C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061358(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062584(struct MapObject *mapObject, struct Sprite *sprite); - -bool8 sub_8062558(struct MapObject *mapObject, struct Sprite *sprite) -{ - maybe_shadow_1(mapObject, sprite, DIR_EAST, 0, 2); - return sub_8062584(mapObject, sprite); -} - -bool8 sub_8062584(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061358(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_80625B0(struct MapObject *mapObject, struct Sprite *sprite) -{ - an_look_any(mapObject, sprite, gUnknown_0836DC09[mapObject->animPattern]); - return TRUE; -} - -bool8 sub_80625C8(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, 0x14); - return FALSE; -} - -bool8 sub_80625D8(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_25 = 0; - sprite->data2 = 1; - return TRUE; -} - -bool8 sub_80625E8(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_25 = 1; - sprite->data2 = 1; - return TRUE; -} - -bool8 sub_80625F8(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_12 = 1; - sprite->data2 = 1; - return TRUE; -} - -bool8 sub_8062608(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_12 = GetFieldObjectGraphicsInfo(mapObject->graphicsId)->inanimate; - sprite->data2 = 1; - return TRUE; -} - -bool8 sub_8062634(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_13 = 1; - sprite->data2 = 1; - return TRUE; -} - -bool8 sub_8062644(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_13 = 0; - sprite->data2 = 1; - return TRUE; -} - -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]); - FieldEffectStart(0x0); - sprite->data2 = 1; - return TRUE; -} - -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]); - FieldEffectStart(0x21); - sprite->data2 = 1; - return TRUE; -} - -bool8 do_heart_bubble(struct MapObject *mapObject, struct Sprite *sprite) -{ - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]); - FieldEffectStart(0x2e); - sprite->data2 = 1; - return TRUE; -} - -bool8 sub_8062704(struct MapObject *, struct Sprite *); - -bool8 sub_80626C0(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (mapObject->animPattern == 0x3F) - { - sub_8084794(mapObject); - return FALSE; - } - else if (mapObject->animPattern != 0x39 && mapObject->animPattern != 0x3A) - { - sprite->data2 = 2; - return TRUE; - } - else - { - sub_812869C(mapObject); - sprite->data2 = 1; - return sub_8062704(mapObject, sprite); - } -} - -bool8 sub_8062704(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_81286C4(mapObject)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062724(struct MapObject *mapObject, struct Sprite *sprite) -{ - obj_anim_image_set_and_seek(sprite, 1, 0); - sprite->data2 = 1; - return FALSE; -} - -bool8 sub_8062740(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064864(sprite)) - { - sub_8064820(sprite, 0x20); - sprite->data2 = 2; - } - return FALSE; -} - -bool8 sub_8062764(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_13 ^= 1; - if (sub_8064824(sprite)) - { - mapObject->mapobj_bit_13 = 1; - sprite->data2 = 3; - } - return FALSE; -} - -bool8 sub_80627A0(struct MapObject *mapObject, struct Sprite *sprite) -{ - obj_anim_image_set_and_seek(sprite, 1, 0); - sprite->data2 = 1; - return FALSE; -} - -bool8 sub_80627BC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8064864(sprite)) - { - sub_8064820(sprite, 0x20); - sprite->data2 = 2; - } - return FALSE; -} - -bool8 sub_80627E0(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_13 ^= 1; - if (sub_8064824(sprite)) - { - mapObject->mapobj_bit_13 = 1; - sprite->data2 = 3; - } - return FALSE; -} - -bool8 sub_806281C(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_26 = 1; - sprite->data2 = 1; - return TRUE; -} - -bool8 sub_806282C(struct MapObject *mapObject, struct Sprite *sprite) -{ - mapObject->mapobj_bit_26 = 0; - sprite->data2 = 1; - return TRUE; -} - -bool8 sub_806283C(struct MapObject *mapObject, struct Sprite *sprite) -{ - sprite->oam.affineMode = 3; - InitSpriteAffineAnim(sprite); - sprite->affineAnimPaused = 1; - sprite->subspriteMode = 0; - return TRUE; -} - -bool8 sub_806286C(struct MapObject *mapObject, struct Sprite *sprite) -{ - FreeOamMatrix(sprite->oam.matrixNum); - sprite->oam.affineMode = 0; - CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); - return TRUE; -} - -bool8 sub_80628D0(struct MapObject *, struct Sprite *); - -bool8 sub_806289C(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8060ED8(mapObject, sprite, DIR_SOUTH); - sprite->affineAnimPaused = 0; - StartSpriteAffineAnimIfDifferent(sprite, 0); - return sub_80628D0(mapObject, sprite); -} - -bool8 sub_80628D0(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (an_walk_any_2(mapObject, sprite)) - { - sprite->affineAnimPaused = 1; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062930(struct MapObject *, struct Sprite *); - -bool8 sub_80628FC(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8060ED8(mapObject, sprite, DIR_SOUTH); - sprite->affineAnimPaused = 0; - ChangeSpriteAffineAnimIfDifferent(sprite, 1); - return sub_8062930(mapObject, sprite); -} - -bool8 sub_8062930(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (an_walk_any_2(mapObject, sprite)) - { - sprite->affineAnimPaused = 1; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -void sub_806295C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) -{ - FieldObjectSetDirection(mapObject, direction); - npc_coords_shift_still(mapObject); - sub_805FE64(mapObject, sprite, sub_805FDD8(direction)); - sprite->animPaused = 1; - sprite->data2 = 1; -} - -bool8 sub_806299C(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_806295C(mapObject, sprite, DIR_SOUTH); - return TRUE; -} - -bool8 sub_80629AC(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_806295C(mapObject, sprite, DIR_NORTH); - return TRUE; -} - -bool8 sub_80629BC(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_806295C(mapObject, sprite, DIR_WEST); - return TRUE; -} - -bool8 sub_80629CC(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_806295C(mapObject, sprite, DIR_EAST); - return TRUE; -} - -bool8 sub_80629DC(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, sub_805FD98(DIR_SOUTH)); - return FALSE; -} - -bool8 sub_8062A00(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_NORTH, sub_805FD98(DIR_NORTH)); - return FALSE; -} - -bool8 sub_8062A24(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_WEST, sub_805FD98(DIR_WEST)); - return FALSE; -} - -bool8 sub_8062A48(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_EAST, sub_805FD98(DIR_EAST)); - return FALSE; -} - -bool8 sub_8062A6C(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, sub_805FDB8(DIR_SOUTH)); - return FALSE; -} - -bool8 sub_8062A90(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_NORTH, sub_805FDB8(DIR_NORTH)); - return FALSE; -} - -bool8 sub_8062AB4(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_WEST, sub_805FDB8(DIR_WEST)); - return FALSE; -} - -bool8 sub_8062AD8(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_EAST, sub_805FDB8(DIR_EAST)); - return FALSE; -} - -bool8 sub_8062AFC(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_SOUTH, sub_805FDC8(DIR_SOUTH)); - return FALSE; -} - -bool8 sub_8062B20(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_NORTH, sub_805FDC8(DIR_NORTH)); - return FALSE; -} - -bool8 sub_8062B44(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_WEST, sub_805FDC8(DIR_WEST)); - return FALSE; -} - -bool8 sub_8062B68(struct MapObject *mapObject, struct Sprite *sprite) -{ - npc_set_direction_and_anim__an_proceed(mapObject, sprite, DIR_EAST, sub_805FDC8(DIR_EAST)); - return FALSE; -} - -void sub_8062B8C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3, u8 a4) -{ - sub_806113C(mapObject, sprite, direction, a3, a4); - StartSpriteAnimIfDifferent(sprite, sub_805FD98(direction)); - DoShadowFieldEffect(mapObject); -} - -bool8 sub_8062BFC(struct MapObject *, struct Sprite *); - -bool8 sub_8062BD0(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8062B8C(mapObject, sprite, DIR_SOUTH, 0, 1); - return sub_8062BFC(mapObject, sprite); -} - -bool8 sub_8062BFC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062C54(struct MapObject *, struct Sprite *); - -bool8 sub_8062C28(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8062B8C(mapObject, sprite, DIR_NORTH, 0, 1); - return sub_8062C54(mapObject, sprite); -} - -bool8 sub_8062C54(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062CAC(struct MapObject *, struct Sprite *); - -bool8 sub_8062C80(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8062B8C(mapObject, sprite, DIR_WEST, 0, 1); - return sub_8062CAC(mapObject, sprite); -} - -bool8 sub_8062CAC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062D04(struct MapObject *, struct Sprite *); - -bool8 sub_8062CD8(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8062B8C(mapObject, sprite, DIR_EAST, 0, 1); - return sub_8062D04(mapObject, sprite); -} - -bool8 sub_8062D04(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062D5C(struct MapObject *, struct Sprite *); - -bool8 sub_8062D30(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8062B8C(mapObject, sprite, DIR_SOUTH, 1, 1); - return sub_8062D5C(mapObject, sprite); -} - -bool8 sub_8062D5C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062DB4(struct MapObject *, struct Sprite *); - -bool8 sub_8062D88(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8062B8C(mapObject, sprite, DIR_NORTH, 1, 1); - return sub_8062DB4(mapObject, sprite); -} - -bool8 sub_8062DB4(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062E0C(struct MapObject *, struct Sprite *); - -bool8 sub_8062DE0(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8062B8C(mapObject, sprite, DIR_WEST, 1, 1); - return sub_8062E0C(mapObject, sprite); -} - -bool8 sub_8062E0C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062E64(struct MapObject *, struct Sprite *); - -bool8 sub_8062E38(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8062B8C(mapObject, sprite, DIR_EAST, 1, 1); - return sub_8062E64(mapObject, sprite); -} - -bool8 sub_8062E64(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062EBC(struct MapObject *, struct Sprite *); - -bool8 sub_8062E90(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8062B8C(mapObject, sprite, DIR_SOUTH, 2, 0); - return sub_8062EBC(mapObject, sprite); -} - -bool8 sub_8062EBC(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062F14(struct MapObject *, struct Sprite *); - -bool8 sub_8062EE8(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8062B8C(mapObject, sprite, DIR_NORTH, 2, 0); - return sub_8062F14(mapObject, sprite); -} - -bool8 sub_8062F14(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062F6C(struct MapObject *, struct Sprite *); - -bool8 sub_8062F40(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8062B8C(mapObject, sprite, DIR_WEST, 2, 0); - return sub_8062F6C(mapObject, sprite); -} - -bool8 sub_8062F6C(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062FC4(struct MapObject *, struct Sprite *); - -bool8 sub_8062F98(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8062B8C(mapObject, sprite, DIR_EAST, 2, 0); - return sub_8062FC4(mapObject, sprite); -} - -bool8 sub_8062FC4(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (sub_8061328(mapObject, sprite)) - { - mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8062FF0(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_SOUTH, sub_805FDD8(DIR_SOUTH), 8); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_8063028(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_NORTH, sub_805FDD8(DIR_NORTH), 8); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_8063060(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_WEST, sub_805FDD8(DIR_WEST), 8); - return sub_8061714(mapObject, sprite); -} - -bool8 sub_8063098(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80616CC(mapObject, sprite, DIR_EAST, sub_805FDD8(DIR_EAST), 8); - return sub_8061714(mapObject, sprite); -} - -void sub_80630D0(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) -{ - sub_8060D20(mapObject, sprite, direction, a3); - StartSpriteAnim(sprite, sub_805FD98(mapObject->mapobj_unk_18)); - SeekSpriteAnim(sprite, 0); -} - -bool8 sub_8063128(struct MapObject *, struct Sprite *); - -bool8 sub_8063108(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80630D0(mapObject, sprite, DIR_SOUTH, 1); - return sub_8063128(mapObject, sprite); -} - -bool8 sub_8063128(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8063168(struct MapObject *, struct Sprite *); - -bool8 sub_8063148(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80630D0(mapObject, sprite, DIR_NORTH, 1); - return sub_8063168(mapObject, sprite); -} - -bool8 sub_8063168(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_80631A8(struct MapObject *, struct Sprite *); - -bool8 sub_8063188(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80630D0(mapObject, sprite, DIR_WEST, 1); - return sub_80631A8(mapObject, sprite); -} - -bool8 sub_80631A8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_80631E8(struct MapObject *, struct Sprite *); - -bool8 sub_80631C8(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80630D0(mapObject, sprite, DIR_EAST, 1); - return sub_80631E8(mapObject, sprite); -} - -bool8 sub_80631E8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -void sub_8063208(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) -{ - sub_8060D20(mapObject, sprite, direction, a3); - sub_805FE28(mapObject, sprite, sub_805FDD8(mapObject->mapobj_unk_18)); -} - -bool8 sub_8063258(struct MapObject *, struct Sprite *); - -bool8 sub_8063238(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8063208(mapObject, sprite, DIR_SOUTH, 1); - return sub_8063258(mapObject, sprite); -} - -bool8 sub_8063258(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8063298(struct MapObject *, struct Sprite *); - -bool8 sub_8063278(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8063208(mapObject, sprite, DIR_NORTH, 1); - return sub_8063298(mapObject, sprite); -} - -bool8 sub_8063298(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_80632D8(struct MapObject *, struct Sprite *); - -bool8 sub_80632B8(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8063208(mapObject, sprite, DIR_WEST, 1); - return sub_80632D8(mapObject, sprite); -} - -bool8 sub_80632D8(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8063318(struct MapObject *, struct Sprite *); - -bool8 sub_80632F8(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8063208(mapObject, sprite, DIR_EAST, 1); - return sub_8063318(mapObject, sprite); -} - -bool8 sub_8063318(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -void sub_8063338(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a3) -{ - sub_8060D20(mapObject, sprite, direction, a3); - StartSpriteAnim(sprite, sub_805FDB8(mapObject->mapobj_unk_18)); - SeekSpriteAnim(sprite, 0); -} - -bool8 sub_8063390(struct MapObject *, struct Sprite *); - -bool8 sub_8063370(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8063338(mapObject, sprite, DIR_SOUTH, 1); - return sub_8063390(mapObject, sprite); -} - -bool8 sub_8063390(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_80633D0(struct MapObject *, struct Sprite *); - -bool8 sub_80633B0(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8063338(mapObject, sprite, DIR_NORTH, 1); - return sub_80633D0(mapObject, sprite); -} - -bool8 sub_80633D0(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8063410(struct MapObject *, struct Sprite *); - -bool8 sub_80633F0(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8063338(mapObject, sprite, DIR_WEST, 1); - return sub_8063410(mapObject, sprite); -} - -bool8 sub_8063410(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8063450(struct MapObject *, struct Sprite *); - -bool8 sub_8063430(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_8063338(mapObject, sprite, DIR_EAST, 1); - return sub_8063450(mapObject, sprite); -} - -bool8 sub_8063450(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) - { - sprite->data2 = 2; - return TRUE; - } - return FALSE; -} - -bool8 sub_8063470(struct MapObject *mapObject, struct Sprite *sprite) -{ - return TRUE; -} - -bool8 sub_8063474(struct MapObject *mapObject, struct Sprite *sprite) -{ - sprite->animPaused = 1; - return TRUE; -} - -void npc_obj_transfer_image_anim_pause_flag(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (mapObject->mapobj_bit_10) - { - sprite->animPaused = 1; - } -} - -void sub_80634A0(struct MapObject *mapObject, struct Sprite *sprite) -{ - if (mapObject->mapobj_bit_11) - { - sprite->animPaused = 0; - mapObject->mapobj_bit_10 = 0; - mapObject->mapobj_bit_11 = 0; - } -} - -void sub_80634E8(struct MapObject *, struct Sprite *); -void npc_update_obj_anim_flag(struct MapObject *, struct Sprite *); - -void sub_80634D0(struct MapObject *mapObject, struct Sprite *sprite) -{ - sub_80634E8(mapObject, sprite); - npc_update_obj_anim_flag(mapObject, sprite); -} - -#ifdef NONMATCHING -void sub_80634E8(struct MapObject *mapObject, struct Sprite *sprite) -{ - u16 x; - u16 y; - s16 x2; - s16 y2; - const struct MapObjectGraphicsInfo *graphicsInfo; - mapObject->mapobj_bit_14 = 0; - graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); - if (sprite->coordOffsetEnabled) - { - x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; - y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; - } else - { - x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; - y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; - } - x2 = graphicsInfo->width + x; // offending line - y2 = graphicsInfo->height + y; // similarly offending line - if ((s16)x >= 0x100 || x2 < -0x10) - { - mapObject->mapobj_bit_14 = 1; - } - if ((s16)y >= 0xB0 || y2 < -0x10) - { - mapObject->mapobj_bit_14 = 1; - } -} -#else -__attribute__((naked)) -void sub_80634E8(struct MapObject *mapObject, struct Sprite *sprite) { - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - adds r5, r0, 0\n\ - adds r4, r1, 0\n\ - ldrb r1, [r5, 0x1]\n\ - movs r0, 0x41\n\ - negs r0, r0\n\ - ands r0, r1\n\ - strb r0, [r5, 0x1]\n\ - ldrb r0, [r5, 0x5]\n\ - bl GetFieldObjectGraphicsInfo\n\ - adds r6, r0, 0\n\ - adds r0, r4, 0\n\ - adds r0, 0x3E\n\ - ldrb r1, [r0]\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0806354C\n\ - ldrh r1, [r4, 0x24]\n\ - ldrh r0, [r4, 0x20]\n\ - adds r1, r0\n\ - adds r0, r4, 0\n\ - adds r0, 0x28\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - ldr r2, _08063544 @ =gSpriteCoordOffsetX\n\ - adds r0, r1\n\ - ldrh r2, [r2]\n\ - adds r0, r2\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - ldrh r1, [r4, 0x26]\n\ - ldrh r0, [r4, 0x22]\n\ - adds r1, r0\n\ - adds r0, r4, 0\n\ - adds r0, 0x29\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - ldr r2, _08063548 @ =gSpriteCoordOffsetY\n\ - adds r0, r1\n\ - ldrh r2, [r2]\n\ - adds r0, r2\n\ - b _08063574\n\ - .align 2, 0\n\ -_08063544: .4byte gSpriteCoordOffsetX\n\ -_08063548: .4byte gSpriteCoordOffsetY\n\ -_0806354C:\n\ - ldrh r1, [r4, 0x24]\n\ - ldrh r0, [r4, 0x20]\n\ - adds r1, r0\n\ - adds r0, r4, 0\n\ - adds r0, 0x28\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - adds r0, r1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - ldrh r1, [r4, 0x26]\n\ - ldrh r0, [r4, 0x22]\n\ - adds r1, r0\n\ - adds r0, r4, 0\n\ - adds r0, 0x29\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - adds r0, r1\n\ -_08063574:\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - ldrh r0, [r6, 0x8]\n\ - adds r0, r3\n\ - lsls r0, 16\n\ - lsrs r1, r0, 16\n\ - ldrh r0, [r6, 0xA]\n\ - adds r0, r2\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - lsls r0, r3, 16\n\ - asrs r0, 16\n\ - cmp r0, 0xFF\n\ - bgt _0806359C\n\ - lsls r0, r1, 16\n\ - asrs r0, 16\n\ - movs r1, 0x10\n\ - negs r1, r1\n\ - cmp r0, r1\n\ - bge _080635A4\n\ -_0806359C:\n\ - ldrb r0, [r5, 0x1]\n\ - movs r1, 0x40\n\ - orrs r0, r1\n\ - strb r0, [r5, 0x1]\n\ -_080635A4:\n\ - lsls r0, r2, 16\n\ - asrs r0, 16\n\ - cmp r0, 0xAF\n\ - bgt _080635B8\n\ - lsls r0, r4, 16\n\ - asrs r0, 16\n\ - movs r1, 0x10\n\ - negs r1, r1\n\ - cmp r0, r1\n\ - bge _080635C0\n\ -_080635B8:\n\ - ldrb r0, [r5, 0x1]\n\ - movs r1, 0x40\n\ - orrs r0, r1\n\ - strb r0, [r5, 0x1]\n\ -_080635C0:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ -.syntax divided\n"); -} -#endif - -void npc_update_obj_anim_flag(struct MapObject *mapObject, struct Sprite *sprite) -{ - sprite->invisible = 0; - if (mapObject->mapobj_bit_13 || mapObject->mapobj_bit_14) - { - sprite->invisible = 1; - } -} diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c deleted file mode 100644 index 87be8e011..000000000 --- a/src/field_map_obj_helpers.c +++ /dev/null @@ -1,318 +0,0 @@ -#include "global.h" -#include "field_map_obj_helpers.h" -#include "field_effect.h" -#include "field_ground_effect.h" -#include "field_map_obj.h" -#include "sprite.h" - -typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 dir); - -extern s16 gUnknown_08376194[]; -extern SpriteStepFunc *gUnknown_08376180[]; -extern s8 *gUnknown_083761D0[]; -extern s16 gUnknown_083761DC[]; -extern u8 gUnknown_083761E2[]; -extern s16 gUnknown_083761E6[]; -extern u8 gUnknown_083761EC[]; - -bool8 FreezeMapObject(struct MapObject *mapObject) -{ - if (mapObject->mapobj_bit_6 || mapObject->mapobj_bit_8) - { - return TRUE; - } - else - { - mapObject->mapobj_bit_8 = 1; - mapObject->mapobj_bit_23 = gSprites[mapObject->spriteId].animPaused; - mapObject->mapobj_bit_24 = gSprites[mapObject->spriteId].affineAnimPaused; - gSprites[mapObject->spriteId].animPaused = 1; - gSprites[mapObject->spriteId].affineAnimPaused = 1; - return FALSE; - } -} - -void FreezeMapObjects(void) -{ - u8 i; - for (i = 0; i < 16; i++) - if (gMapObjects[i].active && i != gPlayerAvatar.mapObjectId) - FreezeMapObject(&gMapObjects[i]); -} - -void FreezeMapObjectsExceptOne(u8 a1) -{ - u8 i; - for (i = 0; i < 16; i++) - if (i != a1 && gMapObjects[i].active && i != gPlayerAvatar.mapObjectId) - FreezeMapObject(&gMapObjects[i]); -} - -void UnfreezeMapObject(struct MapObject *mapObject) -{ - if (mapObject->active && mapObject->mapobj_bit_8) - { - mapObject->mapobj_bit_8 = 0; - gSprites[mapObject->spriteId].animPaused = mapObject->mapobj_bit_23; - gSprites[mapObject->spriteId].affineAnimPaused = mapObject->mapobj_bit_24; - } -} - -void UnfreezeMapObjects(void) -{ - u8 i; - for (i = 0; i < 16; i++) - if (gMapObjects[i].active) - UnfreezeMapObject(&gMapObjects[i]); -} - -void Step1(struct Sprite *sprite, u8 dir) -{ - sprite->pos1.x += gDirectionToVector[dir].x; - sprite->pos1.y += gDirectionToVector[dir].y; -} - -void Step2(struct Sprite *sprite, u8 dir) -{ - sprite->pos1.x += 2 * (u16) gDirectionToVector[dir].x; - sprite->pos1.y += 2 * (u16) gDirectionToVector[dir].y; -} - -void Step3(struct Sprite *sprite, u8 dir) -{ - sprite->pos1.x += 2 * (u16) gDirectionToVector[dir].x + (u16) gDirectionToVector[dir].x; - sprite->pos1.y += 2 * (u16) gDirectionToVector[dir].y + (u16) gDirectionToVector[dir].y; -} - -void Step4(struct Sprite *sprite, u8 dir) -{ - sprite->pos1.x += 4 * (u16) gDirectionToVector[dir].x; - sprite->pos1.y += 4 * (u16) gDirectionToVector[dir].y; -} - -void Step8(struct Sprite *sprite, u8 dir) -{ - sprite->pos1.x += 8 * (u16) gDirectionToVector[dir].x; - sprite->pos1.y += 8 * (u16) gDirectionToVector[dir].y; -} - -void oamt_npc_ministep_reset(struct Sprite *sprite, u8 a2, u8 a3) -{ - sprite->data3 = a2; - sprite->data4 = a3; - sprite->data5 = 0; -} - -bool8 obj_npc_ministep(struct Sprite *sprite) -{ - if (sprite->data5 >= gUnknown_08376194[sprite->data4]) - return FALSE; - - gUnknown_08376180[sprite->data4][sprite->data5](sprite, sprite->data3); - - sprite->data5++; - - if (sprite->data5 < gUnknown_08376194[sprite->data4]) - return FALSE; - - return TRUE; -} - -void sub_806467C(struct Sprite *sprite, u8 a2) -{ - sprite->data3 = a2; - sprite->data4 = 0; - sprite->data5 = 0; -} - -bool8 sub_806468C(struct Sprite *sprite) -{ - if (!(sprite->data4 & 1)) - { - Step1(sprite, sprite->data3); - sprite->data5++; - } - - sprite->data4++; - - if (sprite->data5 > 15) - return TRUE; - else - return FALSE; -} - -s16 sub_80646C8(s16 a1, u8 a2) -{ - return gUnknown_083761D0[a2][a1]; -} - -void sub_80646E4(struct Sprite *sprite, u8 a2, u8 a3, u8 a4) -{ - sprite->data3 = a2; - sprite->data4 = a3; - sprite->data5 = a4; - sprite->data6 = 0; -} - -u8 sub_8064704(struct Sprite *sprite) -{ - u8 v2; - s16 v5[3]; - u8 v6[3]; - - memcpy(v5, gUnknown_083761DC, 6); - memcpy(v6, gUnknown_083761E2, 3); - - v2 = 0; - - if (sprite->data4) - Step1(sprite, sprite->data3); - - sprite->pos2.y = sub_80646C8(sprite->data6 >> v6[sprite->data4], sprite->data5); - - sprite->data6++; - - if (sprite->data6 == (v5[sprite->data4] >> 1)) - v2 = 1; - - if (sprite->data6 >= v5[sprite->data4]) - { - sprite->pos2.y = 0; - v2 = -1; - } - - return v2; -} - -u8 sub_806478C(struct Sprite *sprite) -{ - u8 v2; - s16 v5[3]; - u8 v6[3]; - - memcpy(v5, gUnknown_083761E6, 6); - memcpy(v6, gUnknown_083761EC, 3); - - v2 = 0; - - if (sprite->data4 && !(sprite->data6 & 1)) - Step1(sprite, sprite->data3); - - sprite->pos2.y = sub_80646C8(sprite->data6 >> v6[sprite->data4], sprite->data5); - - sprite->data6++; - - if (sprite->data6 == (v5[sprite->data4] >> 1)) - v2 = 1; - - if (sprite->data6 >= v5[sprite->data4]) - { - sprite->pos2.y = 0; - v2 = -1; - } - - return v2; -} - -void sub_8064820(struct Sprite *sprite, u16 a2) -{ - sprite->data3 = a2; -} - -bool8 sub_8064824(struct Sprite *sprite) -{ - sprite->data3--; - - if (sprite->data3 == 0) - return TRUE; - else - return FALSE; -} - -void obj_anim_image_set_and_seek(struct Sprite *sprite, u8 a2, u8 a3) -{ - sprite->animNum = a2; - sprite->animPaused = 0 ; - SeekSpriteAnim(sprite, a3); -} - -bool8 sub_8064864(struct Sprite *sprite) -{ - if (sprite->animEnded) - return TRUE; - else - return FALSE; -} - -void sub_806487C(struct Sprite *sprite, bool8 invisible) -{ - u16 x, y; - s16 x2, y2; - - sprite->invisible = invisible; - - if (sprite->coordOffsetEnabled) - { - x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; - y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; - } - else - { - x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; - y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; - } - - x2 = x - (sprite->centerToCornerVecX >> 1); - y2 = y - (sprite->centerToCornerVecY >> 1); - - if ((s16)x > 255 || x2 < -16) - sprite->invisible = 1; - if ((s16)y > 175 || y2 < -16) - sprite->invisible = 1; -} - -void sub_8064970(struct Sprite *sprite) -{ - SetObjectSubpriorityByZCoord(sprite->data1, sprite, 1); - sub_806487C(sprite, 0); -} - -void sub_8064990(u8 a1, u8 dir) -{ - u8 i; - for (i = 0; i < MAX_SPRITES; i++) - { - struct Sprite *sprite = &gSprites[i]; - if (sprite->inUse && sprite->callback == sub_8064970 && (u8)sprite->data0 == a1) - { - u8 animNum = FieldObjectDirectionToImageAnimId(dir); - StartSpriteAnim(sprite, animNum); - break; - } - } -} - -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]); - return FieldEffectStart(fieldEffectId); -} - -void DoShadowFieldEffect(struct MapObject *mapObject) -{ - if (!mapObject->mapobj_bit_22) - { - mapObject->mapobj_bit_22 = 1; - oe_exec_and_other_stuff(3, 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; - FieldEffectStart(5); -} diff --git a/src/field_message_box.c b/src/field_message_box.c deleted file mode 100644 index 35aac7ac9..000000000 --- a/src/field_message_box.c +++ /dev/null @@ -1,155 +0,0 @@ -#include "global.h" -#include "field_message_box.h" -#include "menu.h" -#include "string_util.h" -#include "task.h" -#include "text.h" -#include "text_window.h" - -static EWRAM_DATA struct Window gFieldMessageBoxWindow = {0}; - -static u8 sMessageBoxMode; - -static void Task_FieldMessageBox(u8 taskId); -static void CreateFieldMessageBoxTask(void); -static void DestroyFieldMessageBoxTask(void); -static void PrintFieldMessage(const u8 *message); -static void PrintFieldMessageFromStringVar4(void); - -void InitFieldMessageBox(void) -{ - sMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN; - SetMessageBoxBaseTileNum(gMenuTextWindowContentTileOffset); - InitWindowFromConfig(&gFieldMessageBoxWindow, &gWindowConfig_81E6CE4); -} - -static void Task_FieldMessageBox(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - switch (task->data[0]) - { - case 0: - LoadMessageBoxTiles(&gFieldMessageBoxWindow); - task->data[0]++; - break; - case 1: - DrawStandardMessageBox(&gFieldMessageBoxWindow); - task->data[0]++; - break; - case 2: - switch (sMessageBoxMode) - { - case FIELD_MESSAGE_BOX_NORMAL: - if (!sub_80035AC(&gFieldMessageBoxWindow)) - return; - break; - case FIELD_MESSAGE_BOX_AUTO_SCROLL: - if (!sub_8003778(&gFieldMessageBoxWindow)) - return; - break; - } - sMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN; - DestroyTask(taskId); - } -} - -static void CreateFieldMessageBoxTask(void) -{ - CreateTask(Task_FieldMessageBox, 80); -} - -static void DestroyFieldMessageBoxTask(void) -{ - u8 taskId = FindTaskIdByFunc(Task_FieldMessageBox); - if (taskId != 0xFF) - DestroyTask(taskId); -} - -bool8 ShowFieldMessage(const u8 *message) -{ - if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN) - { - return FALSE; - } - else - { - PrintFieldMessage(message); - sMessageBoxMode = FIELD_MESSAGE_BOX_NORMAL; - return TRUE; - } -} - -bool8 ShowFieldAutoScrollMessage(const u8 *message) -{ - if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN) - { - return FALSE; - } - else - { - sMessageBoxMode = FIELD_MESSAGE_BOX_AUTO_SCROLL; - PrintFieldMessage(message); - return TRUE; - } -} - -bool8 unref_sub_8064BB8(const u8 *message) -{ - sMessageBoxMode = FIELD_MESSAGE_BOX_AUTO_SCROLL; - PrintFieldMessage(message); - return TRUE; -} - -bool8 unref_sub_8064BD0(const u8 *message) -{ - if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN) - { - return FALSE; - } - else - { - sMessageBoxMode = FIELD_MESSAGE_BOX_NORMAL; - PrintFieldMessageFromStringVar4(); - return TRUE; - } -} - -static void PrintFieldMessage(const u8 *message) -{ - StringExpandPlaceholders(gStringVar4, message); - sub_8002EB0(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15); - CreateFieldMessageBoxTask(); -} - -static void PrintFieldMessageFromStringVar4(void) -{ - sub_8002EB0(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15); - CreateFieldMessageBoxTask(); -} - -void HideFieldMessageBox(void) -{ - DestroyFieldMessageBoxTask(); - ClearStandardMessageBox(&gFieldMessageBoxWindow); - sMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN; -} - -u8 GetFieldMessageBoxMode(void) -{ - return sMessageBoxMode; -} - -bool8 IsFieldMessageBoxHidden(void) -{ - if (sMessageBoxMode == FIELD_MESSAGE_BOX_HIDDEN) - return TRUE; - else - return FALSE; -} - -void unref_sub_8064CA0(void) -{ - DestroyFieldMessageBoxTask(); - DrawStandardMessageBox(&gFieldMessageBoxWindow); - sMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN; -} diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c deleted file mode 100644 index 2a7b2f3e0..000000000 --- a/src/field_player_avatar.c +++ /dev/null @@ -1,1728 +0,0 @@ -#include "global.h" -#include "field_player_avatar.h" -#include "bike.h" -#include "event_data.h" -#include "field_effect.h" -#include "field_effect_helpers.h" -#include "field_ground_effect.h" -#include "field_map_obj.h" -#include "field_map_obj_helpers.h" -#include "fieldmap.h" -#include "main.h" -#include "map_object_constants.h" -#include "menu.h" -#include "metatile_behavior.h" -#include "party_menu.h" -#include "rng.h" -#include "rom4.h" -#include "rotating_gate.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "strings2.h" -#include "task.h" -#include "tv.h" -#include "wild_encounter.h" - -EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {0}; - -//Functions -static bool8 sub_8058854(struct MapObject *, u8); -static void npc_clear_strange_bits(struct MapObject *a); -static void MovePlayerAvatarUsingKeypadInput(u8 a, u16 b, u16 c); -static void PlayerAllowForcedMovementIfMovingSameDirection(void); -static u8 TryDoMetatileBehaviorForcedMovement(void); -static u8 GetForcedMovementByMetatileBehavior(void); -static void MovePlayerNotOnBike(u8 a, u16 b); -static u8 CheckMovementInputNotOnBike(u8 a); -static u8 CheckForPlayerAvatarCollision(u8 a); -static u8 sub_8058EF0(s16 a, s16 b, u8 c); -static bool8 ShouldJumpLedge(s16 a, s16 b, u8 c); -static u8 sub_8058F6C(s16 a, s16 b, u8 c); -static void check_acro_bike_metatile(int unused1, int unused2, u8 c, u8 *d); -static void DoPlayerAvatarTransition(void); -static bool8 player_is_anim_in_certain_ranges(void); -static bool8 sub_80592A4(void); -static bool8 PlayerIsAnimActive(void); -static bool8 PlayerCheckIfAnimFinishedOrInactive(void); -static void PlayerNotOnBikeCollide(u8 a); -static void PlayCollisionSoundIfNotFacingWarp(u8 a); -static void sub_8059D60(struct MapObject *a); -static void StartStrengthAnim(u8 a, u8 b); -static void sub_8059F94(void); -static void sub_805A06C(void); - -static bool8 (*const gUnknown_0830FB58[])(u8) = -{ - MetatileBehavior_IsTrickHouseSlipperyFloor, - MetatileBehavior_IsIce_2, - MetatileBehavior_IsWalkSouth, - MetatileBehavior_IsWalkNorth, - MetatileBehavior_IsWalkWest, - MetatileBehavior_IsWalkEast, - MetatileBehavior_IsSouthwardCurrent, - MetatileBehavior_IsNorthwardCurrent, - MetatileBehavior_IsWestwardCurrent, - MetatileBehavior_IsEastwardCurrent, - MetatileBehavior_IsSlideSouth, - MetatileBehavior_IsSlideNorth, - MetatileBehavior_IsSlideWest, - MetatileBehavior_IsSlideEast, - MetatileBehavior_IsWaterfall, - MetatileBehavior_0xBB, - MetatileBehavior_0xBC, - MetatileBehavior_IsMuddySlope, -}; -static u8 (*const gUnknown_0830FBA0[])(void) = -{ - ForcedMovement_None, - ForcedMovement_Slip, - ForcedMovement_Slip, - sub_8058AAC, - sub_8058AC4, - sub_8058ADC, - sub_8058AF4, - sub_8058B0C, - sub_8058B24, - sub_8058B3C, - sub_8058B54, - ForcedMovement_SlideSouth, - ForcedMovement_SlideNorth, - ForcedMovement_SlideWest, - ForcedMovement_SlideEast, - sub_8058B0C, - sub_8058C04, - sub_8058C10, - ForcedMovement_MuddySlope, -}; -static void (*const gUnknown_0830FBEC[])(u8, u16) = -{ - PlayerNotOnBikeNotMoving, - PlayerNotOnBikeTurningInPlace, - sub_8058D0C, -}; -static bool8 (*const gUnknown_0830FBF8[])(u8) = -{ - MetatileBehavior_IsBumpySlope, - MetatileBehavior_IsIsolatedVerticalRail, - MetatileBehavior_IsIsolatedHorizontalRail, - MetatileBehavior_IsVerticalRail, - MetatileBehavior_IsHorizontalRail, -}; -static const u8 gUnknown_0830FC0C[] = {9, 10, 11, 12, 13}; -static void (*const gUnknown_0830FC14[])(struct MapObject *) = -{ - PlayerAvatarTransition_Normal, - PlayerAvatarTransition_MachBike, - PlayerAvatarTransition_AcroBike, - PlayerAvatarTransition_Surfing, - PlayerAvatarTransition_Underwater, - sub_80591F4, - nullsub_49, - nullsub_49, -}; -static bool8 (*const gUnknown_0830FC34[])(u8) = -{ - MetatileBehavior_IsSouthArrowWarp, - MetatileBehavior_IsNorthArrowWarp, - MetatileBehavior_IsWestArrowWarp, - MetatileBehavior_IsEastArrowWarp, -}; -static const u8 sRivalAvatarGfxIds[][2] = -{ - {MAP_OBJ_GFX_RIVAL_BRENDAN_NORMAL, MAP_OBJ_GFX_RIVAL_MAY_NORMAL}, - {MAP_OBJ_GFX_RIVAL_BRENDAN_MACH_BIKE, MAP_OBJ_GFX_RIVAL_MAY_MACH_BIKE}, - {MAP_OBJ_GFX_RIVAL_BRENDAN_ACRO_BIKE, MAP_OBJ_GFX_RIVAL_MAY_ACRO_BIKE}, - {MAP_OBJ_GFX_RIVAL_BRENDAN_SURFING, MAP_OBJ_GFX_RIVAL_MAY_SURFING}, - {MAP_OBJ_GFX_BRENDAN_UNDERWATER, MAP_OBJ_GFX_MAY_UNDERWATER}, - {MAP_OBJ_GFX_RIVAL_BRENDAN_FIELD_MOVE, MAP_OBJ_GFX_RIVAL_MAY_FIELD_MOVE}, - {MAP_OBJ_GFX_BRENDAN_FISHING, MAP_OBJ_GFX_MAY_FISHING}, - {MAP_OBJ_GFX_BRENDAN_WATERING, MAP_OBJ_GFX_MAY_WATERING}, -}; -static const u8 sPlayerAvatarGfxIds[][2] = -{ - {MAP_OBJ_GFX_BRENDAN_NORMAL, MAP_OBJ_GFX_MAY_NORMAL}, - {MAP_OBJ_GFX_BRENDAN_MACH_BIKE, MAP_OBJ_GFX_MAY_MACH_BIKE}, - {MAP_OBJ_GFX_BRENDAN_ACRO_BIKE, MAP_OBJ_GFX_MAY_ACRO_BIKE}, - {MAP_OBJ_GFX_BRENDAN_SURFING, MAP_OBJ_GFX_MAY_SURFING}, - {MAP_OBJ_GFX_BRENDAN_UNDERWATER, MAP_OBJ_GFX_MAY_UNDERWATER}, - {MAP_OBJ_GFX_BRENDAN_FIELD_MOVE, MAP_OBJ_GFX_MAY_FIELD_MOVE}, - {MAP_OBJ_GFX_BRENDAN_FISHING, MAP_OBJ_GFX_MAY_FISHING}, - {MAP_OBJ_GFX_BRENDAN_WATERING, MAP_OBJ_GFX_MAY_WATERING}, -}; -static const u8 gUnknown_0830FC64[2][5][2] = -{ - //male - { - {MAP_OBJ_GFX_BRENDAN_NORMAL, 1}, - {MAP_OBJ_GFX_BRENDAN_MACH_BIKE, 2}, - {MAP_OBJ_GFX_BRENDAN_ACRO_BIKE, 4}, - {MAP_OBJ_GFX_BRENDAN_SURFING, 8}, - {MAP_OBJ_GFX_BRENDAN_UNDERWATER, 16}, - }, - //female - { - {MAP_OBJ_GFX_MAY_NORMAL, 1}, - {MAP_OBJ_GFX_MAY_MACH_BIKE, 2}, - {MAP_OBJ_GFX_MAY_ACRO_BIKE, 4}, - {MAP_OBJ_GFX_MAY_SURFING, 8}, - {MAP_OBJ_GFX_MAY_UNDERWATER, 16}, - } -}; -static bool8 (*const gUnknown_0830FC78[])(u8) = //Duplicate of gUnknown_0830FC34 -{ - MetatileBehavior_IsSouthArrowWarp, - MetatileBehavior_IsNorthArrowWarp, - MetatileBehavior_IsWestArrowWarp, - MetatileBehavior_IsEastArrowWarp, -}; -static u8 (*const gUnknown_0830FC88[])(struct Task *, struct MapObject *, struct MapObject *) = -{ - sub_8059E84, - sub_8059EA4, - sub_8059F40, -}; -static u8 (*const gUnknown_0830FC94[])(struct Task *, struct MapObject *) = -{ - sub_805A000, -}; -static u8 (*const gUnknown_0830FC98[])(struct Task *, struct MapObject *) = -{ - sub_805A0D8, - sub_805A100, - sub_805A178, - sub_805A1B8, -}; - -fieldmap_object_null_cb(sub_80587B4, sub_80587D8); - -void player_step(u8 direction, u16 newKeys, u16 heldKeys) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - sub_8059D60(playerMapObj); - if (gPlayerAvatar.unk6 == 0) - { - sub_80E5B38(newKeys, heldKeys); - if (!sub_8058854(playerMapObj, direction)) - { - npc_clear_strange_bits(playerMapObj); - DoPlayerAvatarTransition(); - if (TryDoMetatileBehaviorForcedMovement() == 0) - { - MovePlayerAvatarUsingKeypadInput(direction, newKeys, heldKeys); - PlayerAllowForcedMovementIfMovingSameDirection(); - } - } - } -} - -static bool8 sub_8058854(struct MapObject *playerMapObj, u8 direction) -{ - if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerMapObj) - && !FieldObjectClearAnimIfSpecialAnimFinished(playerMapObj)) - { - u8 specialAnim = FieldObjectGetSpecialAnim(playerMapObj); - - if (specialAnim > 24 && specialAnim < 29 && direction != DIR_NONE && playerMapObj->placeholder18 != direction) - { - FieldObjectClearAnim(playerMapObj); - return FALSE; - } - else - { - return TRUE; - } - } - return FALSE; -} - -static void npc_clear_strange_bits(struct MapObject *a) -{ - a->mapobj_bit_12 = 0; - a->mapobj_bit_10 = 0; - a->mapobj_bit_9 = 0; - gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_DASH; -} - -static void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys) -{ - if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE) - || (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE)) - MovePlayerOnBike(direction, newKeys, heldKeys); - else - MovePlayerNotOnBike(direction, heldKeys); -} - -static void PlayerAllowForcedMovementIfMovingSameDirection(void) -{ - if (gPlayerAvatar.running2 == 2) - gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; -} - -static u8 TryDoMetatileBehaviorForcedMovement(void) -{ - return gUnknown_0830FBA0[GetForcedMovementByMetatileBehavior()](); -} - -static u8 GetForcedMovementByMetatileBehavior(void) -{ - u8 i; - - if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_5)) - { - u8 r5 = gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E; - - for (i = 0; i < 18; i++) - { - if (gUnknown_0830FB58[i](r5)) - return i + 1; - } - } - return 0; -} - -u8 ForcedMovement_None(void) -{ - if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_6) - { - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - playerMapObj->mapobj_bit_9 = 0; - playerMapObj->mapobj_bit_11 = 1; - FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18); - gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_6; - } - return 0; -} - -static u8 DoForcedMovement(u8 direction, void (*b)(u8)) -{ - struct PlayerAvatar *playerAvatar = &gPlayerAvatar; - u8 collisionType = CheckForPlayerAvatarCollision(direction); - - playerAvatar->flags |= PLAYER_AVATAR_FLAG_6; - if (collisionType != 0) - { - ForcedMovement_None(); - if (collisionType <= 4) - { - return 0; - } - else - { - if (collisionType == COLLISION_LEDGE_JUMP) - PlayerJumpLedge(direction); - playerAvatar->flags |= PLAYER_AVATAR_FLAG_6; - playerAvatar->running2 = 2; - return 1; - } - } - else - { - playerAvatar->running2 = 2; - b(direction); - return 1; - } -} - -static u8 DoForcedMovementInCurrentDirection(void (*a)(u8)) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - playerMapObj->mapobj_bit_10 = 1; - return DoForcedMovement(playerMapObj->placeholder18, a); -} - -u8 ForcedMovement_Slip(void) -{ - return DoForcedMovementInCurrentDirection(sub_80593C4); -} - -u8 sub_8058AAC(void) -{ - return DoForcedMovement(1, PlayerGoSpeed0); -} - -u8 sub_8058AC4(void) -{ - return DoForcedMovement(2, PlayerGoSpeed0); -} - -u8 sub_8058ADC(void) -{ - return DoForcedMovement(3, PlayerGoSpeed0); -} - -u8 sub_8058AF4(void) -{ - return DoForcedMovement(4, PlayerGoSpeed0); -} - -u8 sub_8058B0C(void) -{ - return DoForcedMovement(1, npc_use_some_d2s); -} - -u8 sub_8058B24(void) -{ - return DoForcedMovement(2, npc_use_some_d2s); -} - -u8 sub_8058B3C(void) -{ - return DoForcedMovement(3, npc_use_some_d2s); -} - -u8 sub_8058B54(void) -{ - return DoForcedMovement(4, npc_use_some_d2s); -} - -static u8 ForcedMovement_Slide(u8 direction, void (*b)(u8)) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - playerMapObj->mapobj_bit_10 = 1; - playerMapObj->mapobj_bit_9 = 1; - return DoForcedMovement(direction, b); -} - -u8 ForcedMovement_SlideSouth(void) -{ - return ForcedMovement_Slide(1, sub_80593C4); -} - -u8 ForcedMovement_SlideNorth(void) -{ - return ForcedMovement_Slide(2, sub_80593C4); -} - -u8 ForcedMovement_SlideWest(void) -{ - return ForcedMovement_Slide(3, sub_80593C4); -} - -u8 ForcedMovement_SlideEast(void) -{ - return ForcedMovement_Slide(4, sub_80593C4); -} - -u8 sub_8058C04(void) -{ - sub_8059F94(); - return 1; -} - -u8 sub_8058C10(void) -{ - sub_805A06C(); - return 1; -} - -u8 ForcedMovement_MuddySlope(void) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - if (playerMapObj->placeholder18 != 2 || GetPlayerSpeed() <= 3) - { - sub_80E6010(0); - playerMapObj->mapobj_bit_9 = 1; - return DoForcedMovement(1, sub_80593C4); - } - else - { - return 0; - } -} - -static void MovePlayerNotOnBike(u8 direction, u16 heldKeys) -{ - gUnknown_0830FBEC[CheckMovementInputNotOnBike(direction)](direction, heldKeys); -} - -static u8 CheckMovementInputNotOnBike(u8 direction) -{ - if (direction == DIR_NONE) - { - gPlayerAvatar.running2 = 0; - return 0; - } - else if (direction != player_get_direction_upper_nybble() && gPlayerAvatar.running2 != 2) - { - gPlayerAvatar.running2 = 1; - return 1; - } - else - { - gPlayerAvatar.running2 = 2; - return 2; - } -} - -void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys) -{ - PlayerFaceDirection(player_get_direction_lower_nybble()); -} - -void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys) -{ - PlayerTurnInPlace(direction); -} - -void sub_8058D0C(u8 direction, u16 heldKeys) -{ - u8 r1 = CheckForPlayerAvatarCollision(direction); - - switch (r1) - { - case 6: - PlayerJumpLedge(direction); - return; - default: - if (r1 > 8 || r1 < 5) - PlayerNotOnBikeCollide(direction); - return; - case 0: - if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) - { - sub_80593C4(direction); - return; - } - if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_4) && (heldKeys & B_BUTTON) && FlagGet(SYS_B_DASH) - && IsRunningDisallowed(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E) == 0) - { - sub_805940C(direction); - gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_DASH; - } - else - { - PlayerGoSpeed0(direction); - } - } -} - -static u8 CheckForPlayerAvatarCollision(u8 direction) -{ - s16 x, y; - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - x = playerMapObj->coords2.x; - y = playerMapObj->coords2.y; - MoveCoords(direction, &x, &y); - return CheckForFieldObjectCollision(playerMapObj, x, y, direction, MapGridGetMetatileBehaviorAt(x, y)); -} - -u8 CheckForFieldObjectCollision(struct MapObject *a, s16 x, s16 y, u8 direction, u8 e) -{ - u8 collision; - - collision = npc_block_way(a, x, y, direction); - if (collision == 3 && sub_8058EF0(x, y, direction)) - return 5; - if (ShouldJumpLedge(x, y, direction)) - { - IncrementGameStat(0x2B); - return COLLISION_LEDGE_JUMP; - } - if (collision == 4 && sub_8058F6C(x, y, direction)) - return 7; - - if (collision == 0) - { - if (CheckForRotatingGatePuzzleCollision(direction, x, y)) - return 8; - check_acro_bike_metatile(x, y, e, &collision); - } - return collision; -} - -static u8 sub_8058EF0(s16 a, s16 b, u8 c) -{ - if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) - && MapGridGetZCoordAt(a, b) == 3 - && GetFieldObjectIdByXYZ(a, b, 3) == 16) - { - sub_805A20C(c); - return 1; - } - else - { - return 0; - } -} - -static bool8 ShouldJumpLedge(s16 a, s16 b, u8 c) -{ - if (GetLedgeJumpDirection(a, b, c) != 0) - return 1; - else - return 0; -} - -static u8 sub_8058F6C(s16 a, s16 b, u8 c) -{ - if (FlagGet(SYS_USE_STRENGTH)) - { - u8 mapObjectId = GetFieldObjectIdByXY(a, b); - - if (mapObjectId != 16) - { - if (gMapObjects[mapObjectId].graphicsId == 0x57) - { - a = gMapObjects[mapObjectId].coords2.x; - b = gMapObjects[mapObjectId].coords2.y; - MoveCoords(c, &a, &b); - if (npc_block_way(&gMapObjects[mapObjectId], a, b, c) == 0 - && MetatileBehavior_IsNonAnimDoor(MapGridGetMetatileBehaviorAt(a, b)) == 0) - { - StartStrengthAnim(mapObjectId, c); - return 1; - } - } - } - } - return 0; -} - -static void check_acro_bike_metatile(int unused1, int unused2, u8 c, u8 *d) -{ - u8 i; - - for (i = 0; i < 5; i++) - { - if (gUnknown_0830FBF8[i](c)) - { - *d = gUnknown_0830FC0C[i]; - return; - } - } -} - -void SetPlayerAvatarTransitionFlags(u16 a) -{ - gPlayerAvatar.bike |= a; - DoPlayerAvatarTransition(); -} - -static void DoPlayerAvatarTransition(void) -{ - u8 i; - u32 flags = gPlayerAvatar.bike; - - if (flags != 0) - { - for (i = 0; i < 8; i++, flags >>= 1) - { -#ifdef NONMATCHING - if (flags & 1) - { - gUnknown_0830FC14[i](&gMapObjects[gPlayerAvatar.mapObjectId]); - } -#else - if (flags & 1) - { - register void (*const *funcs)(struct MapObject *) asm("r0") = gUnknown_0830FC14; - funcs[i](&gMapObjects[gPlayerAvatar.mapObjectId]); - } -#endif - } - gPlayerAvatar.bike = 0; - } -} - -void nullsub_49(struct MapObject *a) -{ -} - -void PlayerAvatarTransition_Normal(struct MapObject *a) -{ - sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(0)); - FieldObjectTurn(a, a->placeholder18); - SetPlayerAvatarStateMask(1); -} - -void PlayerAvatarTransition_MachBike(struct MapObject *a) -{ - sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(1)); - FieldObjectTurn(a, a->placeholder18); - SetPlayerAvatarStateMask(2); - BikeClearState(0, 0); -} - -void PlayerAvatarTransition_AcroBike(struct MapObject *a) -{ - sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(2)); - FieldObjectTurn(a, a->placeholder18); - SetPlayerAvatarStateMask(4); - BikeClearState(0, 0); - sub_80E6084(); -} - -void PlayerAvatarTransition_Surfing(struct MapObject *a) -{ - u8 unk; - - 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; - unk = FieldEffectStart(8); - a->mapobj_unk_1A = unk; - sub_8127ED0(unk, 1); -} - -void PlayerAvatarTransition_Underwater(struct MapObject *a) -{ - sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(4)); - FieldObjectTurn(a, a->placeholder18); - SetPlayerAvatarStateMask(16); - a->mapobj_unk_1A = sub_8128124(a->spriteId); -} - -void sub_80591F4(struct MapObject *a) -{ - gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_5; -} - -void sub_8059204(void) -{ - gPlayerAvatar.running1 = 0; - if (PlayerIsAnimActive()) - { - if (!PlayerCheckIfAnimFinishedOrInactive()) - { - if (!player_is_anim_in_certain_ranges()) - gPlayerAvatar.running1 = 1; - } - else - { - if (!sub_80592A4()) - gPlayerAvatar.running1 = 2; - } - } -} - -static bool8 player_is_anim_in_certain_ranges(void) -{ - u8 unk = gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C; - - if (unk < 4 - || (unk >= 16 && unk < 0x15) - || (unk >= 25 && unk < 41) - || (unk >= 98 && unk < 110) - || (unk >= 122 && unk < 126)) - return TRUE; - else - return FALSE; -} - -static bool8 sub_80592A4(void) -{ - if (player_is_anim_in_certain_ranges() && gPlayerAvatar.running2 != 1) - return TRUE; - else - return FALSE; -} - -static bool8 PlayerIsAnimActive(void) -{ - return FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(&gMapObjects[gPlayerAvatar.mapObjectId]); -} - -static bool8 PlayerCheckIfAnimFinishedOrInactive(void) -{ - return FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[gPlayerAvatar.mapObjectId]); -} - -static void player_set_x22(u8 a) -{ - gMapObjects[gPlayerAvatar.mapObjectId].animId = a; -} - -u8 player_get_x22(void) -{ - return gMapObjects[gPlayerAvatar.mapObjectId].animId; -} - -static void sub_8059348(u8 a) -{ - FieldObjectForceSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], a); -} - -void PlayerSetAnimId(u8 animId, u8 b) -{ - if (!PlayerIsAnimActive()) - { - player_set_x22(b); - FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], animId); - } -} - -void PlayerGoSpeed0(u8 a) -{ - PlayerSetAnimId(GetGoSpeed0AnimId(a), 2); -} - -void sub_80593C4(u8 a) -{ - PlayerSetAnimId(sub_8060744(a), 2); -} - -void npc_use_some_d2s(u8 a) -{ - PlayerSetAnimId(d2s_08064034(a), 2); -} - -void sub_80593F4(u8 a) -{ - PlayerSetAnimId(sub_806079C(a), 2); -} - -void sub_805940C(u8 a) -{ - PlayerSetAnimId(sub_80607F4(a), 2); -} - -void PlayerOnBikeCollide(u8 a) -{ - PlayCollisionSoundIfNotFacingWarp(a); - PlayerSetAnimId(GetStepInPlaceDelay16AnimId(a), 2); -} - -static void PlayerNotOnBikeCollide(u8 a) -{ - PlayCollisionSoundIfNotFacingWarp(a); - PlayerSetAnimId(GetStepInPlaceDelay32AnimId(a), 2); -} - -void PlayerFaceDirection(u8 direction) -{ - PlayerSetAnimId(GetFaceDirectionAnimId(direction), 1); -} - -void PlayerTurnInPlace(u8 direction) -{ - PlayerSetAnimId(GetStepInPlaceDelay8AnimId(direction), 1); -} - -void PlayerJumpLedge(u8 direction) -{ - PlaySE(SE_DANSA); - PlayerSetAnimId(GetJumpLedgeAnimId(direction), 8); -} - -void sub_80594C0(void) -{ - if (gPlayerAvatar.running1 == 2 || gPlayerAvatar.running1 == 0) - { - if (player_should_look_direction_be_enforced_upon_movement()) - sub_8059348(GetFaceDirectionAnimId(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_18)); - } -} - -void sub_8059504(u8 a) -{ - PlayerSetAnimId(sub_80609D8(a), 1); -} - -//normal to wheelie -void PlayerStartWheelie(u8 a) -{ - PlayerSetAnimId(sub_8060A04(a), 1); -} - -void sub_8059534(u8 a) -{ - PlayerSetAnimId(sub_8060A30(a), 1); -} - -void sub_805954C(u8 a) -{ - PlaySE(SE_JITE_PYOKO); - PlayerSetAnimId(sub_8060A5C(a), 1); -} - -void sub_8059570(u8 a) -{ - PlaySE(SE_JITE_PYOKO); - PlayerSetAnimId(sub_8060A88(a), 2); -} - -void sub_8059594(u8 a) -{ - PlaySE(SE_JITE_PYOKO); - PlayerSetAnimId(sub_8060AB4(a), 8); -} - -void sub_80595B8(u8 direction) -{ - PlaySE(SE_JITE_PYOKO); - PlayerSetAnimId(sub_8060878(direction), 1); -} - -void sub_80595DC(u8 direction) -{ - PlaySE(SE_WALL_HIT); - PlayerSetAnimId(sub_8060AE0(direction), 2); -} - -void sub_8059600(u8 a) -{ - PlayerSetAnimId(sub_8060B0C(a), 2); -} - -void sub_8059618(u8 a) -{ - PlayerSetAnimId(sub_8060B38(a), 2); -} - -void sub_8059630(u8 a) -{ - PlayerSetAnimId(sub_8060B64(a), 2); -} - -static void PlayCollisionSoundIfNotFacingWarp(u8 a) -{ - s16 x, y; - u8 unk = gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E; - - if (!gUnknown_0830FC34[a - 1](unk)) - { - if (a == 2) - { - PlayerGetDestCoords(&x, &y); - MoveCoords(2, &x, &y); - if (MetatileBehavior_IsWarpDoor(MapGridGetMetatileBehaviorAt(x, y))) - return; - } - PlaySE(SE_WALL_HIT); - } -} - -void GetXYCoordsOneStepInFrontOfPlayer(s16 *x, s16 *y) -{ - *x = gMapObjects[gPlayerAvatar.mapObjectId].coords2.x; - *y = gMapObjects[gPlayerAvatar.mapObjectId].coords2.y; - MoveCoords(player_get_direction_lower_nybble(), x, y); -} - -void PlayerGetDestCoords(s16 *x, s16 *y) -{ - *x = gMapObjects[gPlayerAvatar.mapObjectId].coords2.x; - *y = gMapObjects[gPlayerAvatar.mapObjectId].coords2.y; -} - -u8 player_get_direction_lower_nybble(void) -{ - return gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_18; -} - -u8 player_get_direction_upper_nybble(void) -{ - return gMapObjects[gPlayerAvatar.mapObjectId].placeholder18; -} - -u8 PlayerGetZCoord(void) -{ - return gMapObjects[gPlayerAvatar.mapObjectId].elevation; -} - -void unref_sub_8059790(s16 a, s16 b) -{ - sub_805C058(&gMapObjects[gPlayerAvatar.mapObjectId], a, b); -} - -u8 TestPlayerAvatarFlags(u8 a) -{ - return gPlayerAvatar.flags & a; -} - -u8 sub_80597D0(void) -{ - return gPlayerAvatar.flags; -} - -u8 GetPlayerAvatarObjectId(void) -{ - return gPlayerAvatar.spriteId; -} - -void sub_80597E8(void) -{ - ForcedMovement_None(); -} - -void sub_80597F4(void) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - npc_clear_strange_bits(playerMapObj); - FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18); - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) - { - sub_80E6084(); - sub_80E6010(0); - } -} - -u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender) -{ - return sRivalAvatarGfxIds[state][gender]; -} - -static u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender) -{ - return sPlayerAvatarGfxIds[state][gender]; -} - -u8 GetPlayerAvatarGraphicsIdByStateId(u8 state) -{ - return GetPlayerAvatarGraphicsIdByStateIdAndGender(state, gPlayerAvatar.gender); -} - -u8 unref_GetRivalAvatarGenderByGraphcsId(u8 gfxId) -{ - switch (gfxId) - { - case MAP_OBJ_GFX_RIVAL_MAY_NORMAL: - case MAP_OBJ_GFX_RIVAL_MAY_MACH_BIKE: - case MAP_OBJ_GFX_RIVAL_MAY_ACRO_BIKE: - case MAP_OBJ_GFX_RIVAL_MAY_SURFING: - case MAP_OBJ_GFX_RIVAL_MAY_FIELD_MOVE: - case MAP_OBJ_GFX_MAY_UNDERWATER: - case MAP_OBJ_GFX_MAY_FISHING: - case MAP_OBJ_GFX_MAY_WATERING: - return FEMALE; - default: - return MALE; - } -} - -u8 GetPlayerAvatarGenderByGraphicsId(u8 gfxId) -{ - switch (gfxId) - { - case MAP_OBJ_GFX_MAY_NORMAL: - case MAP_OBJ_GFX_MAY_MACH_BIKE: - case MAP_OBJ_GFX_MAY_ACRO_BIKE: - case MAP_OBJ_GFX_MAY_SURFING: - case MAP_OBJ_GFX_MAY_FIELD_MOVE: - case MAP_OBJ_GFX_MAY_UNDERWATER: - case MAP_OBJ_GFX_MAY_FISHING: - case MAP_OBJ_GFX_MAY_WATERING: - return FEMALE; - default: - return MALE; - } -} - -bool8 PartyHasMonWithSurf(void) -{ - u8 i; - - if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) - { - for (i = 0; i < 6; i++) - { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == 0) - break; - if (pokemon_has_move(&gPlayerParty[i], 0x39)) - return TRUE; - } - } - return FALSE; -} - -bool8 IsPlayerSurfingNorth(void) -{ - if (player_get_direction_upper_nybble() == DIR_NORTH && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) - return TRUE; - else - return FALSE; -} - -bool8 IsPlayerFacingSurfableFishableWater(void) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - s16 x = playerMapObj->coords2.x; - s16 y = playerMapObj->coords2.y; - - MoveCoords(playerMapObj->mapobj_unk_18, &x, &y); - if (npc_block_way(playerMapObj, x, y, playerMapObj->mapobj_unk_18) == 3 && PlayerGetZCoord() == 3 - && MetatileBehavior_IsSurfableFishableWater(MapGridGetMetatileBehaviorAt(x, y))) - return TRUE; - else - return FALSE; -} - -void ClearPlayerAvatarInfo(void) -{ - //TODO: 0x24 should be the size of gPlayerAvatar - memset(&gPlayerAvatar, 0, sizeof(struct PlayerAvatar)); -} - -void SetPlayerAvatarStateMask(u8 a) -{ - gPlayerAvatar.flags &= 0xE0; - gPlayerAvatar.flags |= a; -} - -static u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 a, u8 gender) -{ - u8 i; - - for (i = 0; i < 5; i++) - { - if (gUnknown_0830FC64[gender][i][0] == a) - return gUnknown_0830FC64[gender][i][1]; - } - return 1; -} - -u8 GetPlayerAvatarGraphicsIdByCurrentState(void) -{ - u8 i; - u8 r5 = gPlayerAvatar.flags; - - for (i = 0; i < 5; i++) - { - if (gUnknown_0830FC64[gPlayerAvatar.gender][i][1] & r5) - return gUnknown_0830FC64[gPlayerAvatar.gender][i][0]; - } - return 0; -} - -void SetPlayerAvatarExtraStateTransition(u8 a, u8 b) -{ - u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(a, gPlayerAvatar.gender); - - gPlayerAvatar.bike |= unk | b; - DoPlayerAvatarTransition(); -} - -void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) -{ - struct MapObjectTemplate playerMapObjTemplate; - u8 mapObjectId; - struct MapObject *mapObject; - - playerMapObjTemplate.localId = 0xFF; - playerMapObjTemplate.graphicsId = GetPlayerAvatarGraphicsIdByStateIdAndGender(0, gender); - playerMapObjTemplate.x = x - 7; - playerMapObjTemplate.y = y - 7; - playerMapObjTemplate.elevation = 0; - playerMapObjTemplate.movementType = 11; - playerMapObjTemplate.unkA_0 = 0; - playerMapObjTemplate.unkA_4 = 0; - playerMapObjTemplate.unkC = 0; - playerMapObjTemplate.unkE = 0; - playerMapObjTemplate.script = NULL; - playerMapObjTemplate.flagId = 0; - mapObjectId = SpawnSpecialFieldObject(&playerMapObjTemplate); - mapObject = &gMapObjects[mapObjectId]; - mapObject->mapobj_bit_16 = 1; - mapObject->mapobj_unk_1B = sub_8126B54(); - FieldObjectTurn(mapObject, direction); - ClearPlayerAvatarInfo(); - gPlayerAvatar.running2 = 0; - gPlayerAvatar.running1 = 0; - gPlayerAvatar.mapObjectId = mapObjectId; - gPlayerAvatar.spriteId = mapObject->spriteId; - gPlayerAvatar.gender = gender; - SetPlayerAvatarStateMask(0x21); -} - -void sub_8059B88(u8 a) -{ - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = a; - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) - gSprites[gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A].invisible = a; -} - -void sub_8059BF4(void) -{ - sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByStateId(5)); - StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0); -} - -void sub_8059C3C(u8 a) -{ - sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByStateId(6)); - StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FDE8(a)); -} - -void sub_8059C94(u8 a) -{ - sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByStateId(2)); - StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FD98(a)); - SeekSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 1); -} - -void sub_8059D08(u8 a) -{ - sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByStateId(7)); - StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], FieldObjectDirectionToImageAnimId(a)); -} - -static void sub_8059D60(struct MapObject *a) -{ - s16 x; - s16 y; - u8 r6; - u8 r8 = a->mapobj_unk_1E; - - for (x = 0, r6 = 1; x < 4; x++, r6++) - { - if (gUnknown_0830FC78[x](r8) && r6 == a->placeholder18) - { - x = a->coords2.x; - y = a->coords2.y; - MoveCoords(r6, &x, &y); - sub_8126BC4(a->mapobj_unk_1B, r6, x, y); - return; - } - } - objid_set_invisible(a->mapobj_unk_1B); -} - -/* Strength */ - -static void sub_8059E2C(u8 taskId); - -static void StartStrengthAnim(u8 a, u8 b) -{ - u8 taskId = CreateTask(sub_8059E2C, 0xFF); - - gTasks[taskId].data[1] = a; - gTasks[taskId].data[2] = b; - sub_8059E2C(taskId); -} - -static void sub_8059E2C(u8 taskId) -{ - while (gUnknown_0830FC88[gTasks[taskId].data[0]](&gTasks[taskId], - &gMapObjects[gPlayerAvatar.mapObjectId], - &gMapObjects[gTasks[taskId].data[1]])) - ; -} - -u8 sub_8059E84(struct Task *task, struct MapObject *b, struct MapObject *c) -{ - ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; - task->data[0]++; - return 0; -} - -u8 sub_8059EA4(struct Task *task, struct MapObject *b, struct MapObject *c) -{ - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(b) - && !FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(c)) - { - FieldObjectClearAnimIfSpecialAnimFinished(b); - 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; - FieldEffectStart(10); - PlaySE(SE_W070); - task->data[0]++; - } - return 0; -} - -u8 sub_8059F40(struct Task *task, struct MapObject *b, struct MapObject *c) -{ - if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(b) - && FieldObjectCheckIfSpecialAnimFinishedOrInactive(c)) - { - FieldObjectClearAnimIfSpecialAnimFinished(b); - FieldObjectClearAnimIfSpecialAnimFinished(c); - gPlayerAvatar.unk6 = 0; - ScriptContext2_Disable(); - DestroyTask(FindTaskIdByFunc(sub_8059E2C)); - } - return 0; -} - -/* Some field effect */ - -static void sub_8059FB4(u8 taskId); - -static void sub_8059F94(void) -{ - u8 taskId = CreateTask(sub_8059FB4, 0xFF); - - sub_8059FB4(taskId); -} - -static void sub_8059FB4(u8 taskId) -{ - while (gUnknown_0830FC94[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId])) - ; -} - -u8 sub_805A000(struct Task *task, struct MapObject *mapObject) -{ - gPlayerAvatar.unk6 = 1; - if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - PlaySE(SE_DANSA); - FieldObjectSetSpecialAnim(mapObject, sub_806084C(mapObject->mapobj_unk_18)); - task->data[1]++; - if (task->data[1] > 1) - { - gPlayerAvatar.unk6 = 0; - gPlayerAvatar.bike |= 0x20; - DestroyTask(FindTaskIdByFunc(sub_8059FB4)); - } - } - return 0; -} - -/* Some field effect */ - -static void sub_805A08C(u8 taskId); - -static void sub_805A06C(void) -{ - u8 taskId = CreateTask(sub_805A08C, 0xFF); - - sub_805A08C(taskId); -} - -static void sub_805A08C(u8 taskId) -{ - while (gUnknown_0830FC98[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId])) - ; -} - -u8 sub_805A0D8(struct Task *task, struct MapObject *mapObject) -{ - task->data[0]++; - task->data[1] = mapObject->placeholder18; - gPlayerAvatar.unk6 = 1; - ScriptContext2_Enable(); - PlaySE(SE_TK_WARPIN); - return 1; -} - -u8 sub_805A100(struct Task *task, struct MapObject *mapObject) -{ - u8 directions[] = {DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; - - if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - u8 direction; - - FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(direction = directions[mapObject->placeholder18 - 1])); - if (direction == (u8)task->data[1]) - task->data[2]++; - task->data[0]++; - if (task->data[2] > 3 && direction == GetOppositeDirection(task->data[1])) - task->data[0]++; - } - return 0; -} - -u8 sub_805A178(struct Task *task, struct MapObject *mapObject) -{ - const u8 arr[] = {16, 16, 17, 18, 19}; - - if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - FieldObjectSetSpecialAnim(mapObject, arr[task->data[2]]); - task->data[0] = 1; - } - return 0; -} - -u8 sub_805A1B8(struct Task *task, struct MapObject *mapObject) -{ - if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) - { - FieldObjectSetSpecialAnim(mapObject, GetSimpleGoAnimId(GetOppositeDirection(task->data[1]))); - ScriptContext2_Disable(); - gPlayerAvatar.unk6 = 0; - DestroyTask(FindTaskIdByFunc(sub_805A08C)); - } - return 0; -} - -/* Some Field effect */ - -static void taskFF_0805D1D4(u8 taskId); -static void sub_805A2D0(u8 taskId); - -void sub_805A20C(u8 a) -{ - u8 taskId; - - ScriptContext2_Enable(); - sav1_reset_battle_music_maybe(); - sub_8053F84(); - gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING; - gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT; - gPlayerAvatar.unk6 = 1; - taskId = CreateTask(taskFF_0805D1D4, 0xFF); - gTasks[taskId].data[0] = a; - taskFF_0805D1D4(taskId); -} - -static void taskFF_0805D1D4(u8 taskId) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerMapObj)) - { - if (!FieldObjectClearAnimIfSpecialAnimFinished(playerMapObj)) - return; - } - sub_8127ED0(playerMapObj->mapobj_unk_1A, 2); - FieldObjectSetSpecialAnim(playerMapObj, sub_80608D0(gTasks[taskId].data[0])); - gTasks[taskId].func = sub_805A2D0; -} - -static void sub_805A2D0(u8 taskId) -{ - struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - - if (FieldObjectClearAnimIfSpecialAnimFinished(playerMapObj)) - { - sub_805B980(playerMapObj, GetPlayerAvatarGraphicsIdByStateId(0)); - FieldObjectSetSpecialAnim(playerMapObj, GetFaceDirectionAnimId(playerMapObj->mapobj_unk_18)); - gPlayerAvatar.unk6 = 0; - ScriptContext2_Disable(); - DestroySprite(&gSprites[playerMapObj->mapobj_unk_1A]); - DestroyTask(taskId); - } -} - -/* Fishing */ - -static u8 (*const gUnknown_0830FCB4[])(struct Task *) = -{ - Fishing1, - Fishing2, - Fishing3, - Fishing4, - Fishing5, - Fishing6, - Fishing7, - Fishing8, - Fishing9, - Fishing10, - Fishing11, - Fishing12, - Fishing13, - Fishing14, - Fishing15, - Fishing16, -}; - -static void Task_Fishing(u8 taskId); -static void sub_805A954(void); - -void StartFishing(u8 a) -{ - u8 taskId = CreateTask(Task_Fishing, 0xFF); - - gTasks[taskId].data[15] = a; - Task_Fishing(taskId); -} - -static void Task_Fishing(u8 taskId) -{ - while (gUnknown_0830FCB4[gTasks[taskId].data[0]](&gTasks[taskId])) - ; -} - -u8 Fishing1(struct Task *task) -{ - ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; - task->data[0]++; - return 0; -} - -u8 Fishing2(struct Task *task) -{ - struct MapObject *playerMapObj; - 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; - playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - FieldObjectClearAnimIfSpecialAnimActive(playerMapObj); - playerMapObj->mapobj_bit_11 = 1; - sub_8059C3C(playerMapObj->mapobj_unk_18); - task->data[0]++; - return 0; -} - -u8 Fishing3(struct Task *task) -{ - sub_805A954(); - task->data[1]++; - if (task->data[1] > 0x3B) - task->data[0]++; - return 0; -} - -u8 Fishing4(struct Task *task) -{ - u32 randVal; - - MenuDisplayMessageBox(); - task->data[0]++; - task->data[1] = 0; - task->data[2] = 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; - return 1; -} - -u8 Fishing5(struct Task *task) -{ - const u8 dot[] = _("·"); - - sub_805A954(); - task->data[1]++; - if (gMain.newKeys & A_BUTTON) - { - task->data[0] = 11; - if (task->data[12] != 0) - task->data[0] = 12; - return 1; - } - else - { - if (task->data[1] > 0x13) - { - task->data[1] = 0; - if (task->data[2] >= task->data[3]) - { - task->data[0]++; - if (task->data[12] != 0) - task->data[0]++; - task->data[12]++; - } - else - { - MenuPrint(dot, task->data[2] + 4, 15); - task->data[2]++; - } - } - return 0; - } -} - -u8 Fishing6(struct Task *task) -{ - sub_805A954(); - task->data[0]++; - if (!GetFishingWildMonListHeader() || (Random() & 1)) - task->data[0] = 11; - else - StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FE08(player_get_direction_lower_nybble())); - return 1; -} - -u8 Fishing7(struct Task *task) -{ - sub_805A954(); - MenuPrint(gOtherText_OhABite, 4, 17); - task->data[0]++; - task->data[1] = 0; - return 0; -} - -u8 Fishing8(struct Task *task) -{ - const s16 arr[3] = {36, 33, 30}; - - sub_805A954(); - task->data[1]++; - if (task->data[1] >= arr[task->data[15]]) - task->data[0] = 12; - else if (gMain.newKeys & A_BUTTON) - task->data[0]++; - return 0; -} - -u8 Fishing9(struct Task *task) -{ - const s16 arr[][2] = - { - {0, 0}, - {40, 10}, - {70, 30} - }; - - sub_805A954(); - task->data[0]++; - if (task->data[12] < task->data[13]) - { - task->data[0] = 3; - } - else if (task->data[12] < 2) - { - s16 randVal = Random() % 100; - - if (arr[task->data[15]][task->data[12]] > randVal) - task->data[0] = 3; - } - return 0; -} - -u8 Fishing10(struct Task *task) -{ - sub_805A954(); - sub_8072044(gOtherText_PokeOnHook); - MenuDisplayMessageBox(); - task->data[0]++; - task->data[1] = 0; - return 0; -} - -u8 Fishing11(struct Task *task) -{ - if (task->data[1] == 0) - { - sub_805A954(); - if (task->data[1] == 0) - { - 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; - } - } - } - gPlayerAvatar.unk6 = 0; - ScriptContext2_Disable(); - FishingWildEncounter(task->data[15]); - sub_80BE97C(1); - DestroyTask(FindTaskIdByFunc(Task_Fishing)); - return 0; -} - -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; - return 1; -} - -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]++; - return 1; -} - -u8 Fishing14(struct Task *task) -{ - sub_805A954(); - MenuDisplayMessageBox(); - task->data[0]++; - return 0; -} - -u8 Fishing15(struct Task *task) -{ - sub_805A954(); - if (gSprites[gPlayerAvatar.spriteId].animEnded) - { - 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; - task->data[0]++; - } - return 0; -} - -u8 Fishing16(struct Task *task) -{ - if (MenuUpdateWindowText()) - { - gPlayerAvatar.unk6 = 0; - ScriptContext2_Disable(); - UnfreezeMapObjects(); - MenuZeroFillScreen(); - sub_80BE97C(0); - DestroyTask(FindTaskIdByFunc(Task_Fishing)); - } - return 0; -} - -static void sub_805A954(void) -{ - struct Sprite *playerSprite = &gSprites[gPlayerAvatar.spriteId]; - u8 animCmdIndex; - u8 animType; - - AnimateSprite(playerSprite); - playerSprite->pos2.x = 0; - playerSprite->pos2.y = 0; - animCmdIndex = playerSprite->animCmdIndex; - if (playerSprite->anims[playerSprite->animNum][animCmdIndex].type == -1) - { - animCmdIndex--; - } - else - { - playerSprite->animDelayCounter++; - if (playerSprite->anims[playerSprite->animNum][animCmdIndex].type == -1) - animCmdIndex--; - } - animType = playerSprite->anims[playerSprite->animNum][animCmdIndex].type; - if (animType == 1 || animType == 2 || animType == 3) - { - playerSprite->pos2.x = 8; - if (player_get_direction_lower_nybble() == 3) - playerSprite->pos2.x = -8; - } - if (animType == 5) - playerSprite->pos2.y = -8; - if (animType == 10 || animType == 11) - playerSprite->pos2.y = 8; - if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) - sub_8127F28(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A, 1, playerSprite->pos2.y); -} diff --git a/src/field_poison.c b/src/field_poison.c deleted file mode 100644 index 8c9e029e1..000000000 --- a/src/field_poison.c +++ /dev/null @@ -1,143 +0,0 @@ -#include "global.h" -#include "field_poison.h" -#include "field_message_box.h" -#include "fldeff_80C5CD4.h" -#include "pokemon.h" -#include "pokemon_summary_screen.h" -#include "script.h" -#include "string_util.h" -#include "task.h" -#include "text.h" - -extern u16 gScriptResult; -extern u8 fieldPoisonText_PokemonFainted[]; - -bool32 CheckMonIsValid(struct Pokemon *pkmn) -{ - // UB: Too few arguments for function 'GetMonData' - u16 species2 = GetMonData(pkmn, MON_DATA_SPECIES2); - - if (species2 == 0 || species2 == 0x19C) - return FALSE; - else - return TRUE; -} - -bool32 AllMonsFainted(void) -{ - struct Pokemon *pkmn = &gPlayerParty[0]; - int i; - - for (i = 0; i < 6; i++, pkmn++) - { - // UB: Too few arguments for function 'GetMonData' - if (CheckMonIsValid(pkmn) && GetMonData(pkmn, MON_DATA_HP) != 0) - return FALSE; - } - return TRUE; -} - -void MonFaintFromPoisonOnField(u8 partyMember) -{ - struct Pokemon *pkmn = &gPlayerParty[partyMember]; - u32 val = 0; - - AdjustFriendship(pkmn, 7); - SetMonData(pkmn, MON_DATA_STATUS, (u8*)&val); - GetMonData(pkmn, MON_DATA_NICKNAME, gStringVar1); - StringGetEnd10(gStringVar1); -} - -bool32 CheckMonFaintedFromPoison(u8 partyMember) -{ - struct Pokemon *pkmn = &gPlayerParty[partyMember]; - - // UB: Too few arguments for function 'GetMonData' - if (CheckMonIsValid(pkmn) && GetMonData(pkmn, MON_DATA_HP) == 0 - && pokemon_ailments_get_primary(GetMonData(pkmn, MON_DATA_STATUS)) == 1) - return TRUE; - else - return FALSE; -} - -//Task data -enum -{ - TD_STATE, - TD_PARTY_MEMBER, -}; - -void Task_WhiteOut(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - switch (taskData[TD_STATE]) - { - case 0: //Check if Pokemon have fainted due to poison - while (taskData[TD_PARTY_MEMBER] < 6) - { - if (CheckMonFaintedFromPoison(taskData[TD_PARTY_MEMBER])) - { - MonFaintFromPoisonOnField(taskData[TD_PARTY_MEMBER]); - ShowFieldMessage(fieldPoisonText_PokemonFainted); - taskData[TD_STATE]++; - return; - } - taskData[TD_PARTY_MEMBER]++; - } - taskData[TD_STATE] = 2; - break; - case 1: //Wait for message box to disappear - if (IsFieldMessageBoxHidden()) - taskData[TD_STATE]--; //Check next party member - break; - case 2: //Done checking Pokemon - if (AllMonsFainted()) - gScriptResult = 1; - else - gScriptResult = 0; - EnableBothScriptContexts(); - DestroyTask(taskId); - break; - } -} - -void ExecuteWhiteOut(void) -{ - CreateTask(Task_WhiteOut, 0x50); - ScriptContext1_Stop(); -} - -s32 overworld_poison(void) -{ - struct Pokemon *pkmn = &gPlayerParty[0]; - u32 numPoisoned = 0; - u32 numFainting = 0; - int i; - - for (i = 0; i < 6; i++) - { - u32 hp; - - // UB: Too few arguments for function 'GetMonData' - if (GetMonData(pkmn, MON_DATA_SANITY_BIT2) != 0 - && pokemon_ailments_get_primary(GetMonData(pkmn, MON_DATA_STATUS)) == 1) - { - hp = GetMonData(pkmn, MON_DATA_HP); - if (hp != 0) - hp--; - if (hp == 0) - numFainting++; //Pokemon will now faint due to poison - SetMonData(pkmn, MON_DATA_HP, (u8 *)&hp); - numPoisoned++; - } - pkmn++; - } - if (numFainting != 0 || numPoisoned != 0) - DoFieldPoisonEffect(); - if (numFainting != 0) - return 2; - if (numPoisoned != 0) - return 1; - return 0; -} diff --git a/src/field_region_map.c b/src/field_region_map.c deleted file mode 100644 index 7cb22e5df..000000000 --- a/src/field_region_map.c +++ /dev/null @@ -1,125 +0,0 @@ -#include "global.h" -#include "field_region_map.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "region_map.h" -#include "sprite.h" -#include "strings2.h" -#include "text.h" - -struct RegionMapStruct -{ - u8 str[0x16]; - u8 unk16; - u8 filler[0x869]; -}; - -struct UnkStruct -{ - MainCallback callback; - u8 filler[4]; - // This should be RegionMap, but I can't do that because it overlaps unk888. - struct RegionMapStruct unk8; - u16 unk888; -}; - -extern u8 ewram[]; -#define unk_2000000 (*(struct UnkStruct *)(ewram)) - -void FieldInitRegionMap(MainCallback callback) -{ - SetVBlankCallback(NULL); - unk_2000000.unk888 = 0; - unk_2000000.callback = callback; - SetMainCallback2(CB2_FieldInitRegionMap); -} - -void CB2_FieldInitRegionMap(void) -{ - REG_DISPCNT = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - ResetSpriteData(); - FreeAllSpritePalettes(); - // TODO: remove this cast - InitRegionMap((void *)&unk_2000000.unk8, 0); - CreateRegionMapPlayerIcon(0, 0); - CreateRegionMapCursor(1, 1); - SetUpWindowConfig(&gWindowConfig_81E709C); - InitMenuWindow(&gWindowConfig_81E709C); - MenuZeroFillScreen(); - REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; - MenuDrawTextWindow(21, 0, 29, 3); - sub_8072BD8(gOtherText_Hoenn, 0x16, 1, 0x38); - MenuDrawTextWindow(16, 16, 29, 19); - sub_813F0C8(); - SetMainCallback2(CB2_FieldRegionMap); - SetVBlankCallback(VBlankCB_FieldRegionMap); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); -} - -void VBlankCB_FieldRegionMap(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -void CB2_FieldRegionMap(void) -{ - sub_813EFDC(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_813EFDC(void) -{ - switch (unk_2000000.unk888) - { - case 0: - REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; - unk_2000000.unk888++; - break; - case 1: - if (!gPaletteFade.active) - unk_2000000.unk888++; - break; - case 2: - switch (sub_80FAB60()) - { - case 3: - sub_813F0C8(); - break; - case 4: - case 5: - unk_2000000.unk888++; - } - break; - case 3: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - unk_2000000.unk888++; - break; - case 4: - if (!gPaletteFade.active) - { - FreeRegionMapIconResources(); - SetMainCallback2(unk_2000000.callback); - } - break; - } -} - -void sub_813F0C8(void) -{ - MenuFillWindowRectWithBlankTile(17, 17, 28, 18); - if (unk_2000000.unk8.unk16) - MenuPrint(unk_2000000.unk8.str, 17, 17); -} diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c deleted file mode 100644 index 79913e1c5..000000000 --- a/src/field_screen_effect.c +++ /dev/null @@ -1,340 +0,0 @@ -#include "global.h" -#include "event_data.h" -#include "field_camera.h" -#include "menu.h" -#include "palette.h" -#include "rom4.h" -#include "script.h" -#include "task.h" -#include "text.h" -#include "unknown_task.h" - -struct UnknownStruct1 -{ - u8 filler0[0x14]; - u8 unk14; - u8 filler15[0xB]; -}; -extern struct UnknownStruct1 gUnknown_03004DC0; - -extern u16 gUnknown_03004DE0[][0x3C0]; - -const static u16 gUnknown_0839ACDC[] = { 0xC8, 0x48, 0x38, 0x28, 0x18, 0x0 }; - -const s32 gUnknown_0839ACE8 = 4; - -const static u32 gUnknown_0839ACEC[3] = -{ - REG_ADDR_WIN0H, - ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, - 1 -}; - -static void sub_808136C(u16 *dest, u32 a2, s32 a3, s32 a4) -{ - if (a2 <= 0xA0) - { - if (a3 < 0) - a3 = 0; - if (a3 > 255) - a3 = 255; - if (a4 < 0) - a4 = 0; - if (a4 > 255) - a4 = 255; - dest[a2] = (a3 << 8) | a4; - } -} - -static void sub_8081398(u16 *dest, s32 a2, s32 a3, s32 a4) -{ - s32 v1 = a4; - s32 v2 = a4; - s32 v3 = 0; - while (v1 >= v3) - { - sub_808136C(dest, a3 - v3, a2 - v1, a2 + v1); - sub_808136C(dest, a3 + v3, a2 - v1, a2 + v1); - sub_808136C(dest, a3 - v1, a2 - v3, a2 + v3); - sub_808136C(dest, a3 + v1, a2 - v3, a2 + v3); - v2 -= (v3 * 2) - 1; - v3++; - if (v2 < 0) - { - v2 += 2 * (v1 - 1); - v1--; - } - } -} - -static void sub_8081424(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - switch (data[0]) - { - case 0: - sub_8081398(&gUnknown_03004DE0[gUnknown_03004DC0.unk14][0], data[1], data[2], data[3]); - data[0] = 1; - break; - case 1: - sub_8081398(&gUnknown_03004DE0[gUnknown_03004DC0.unk14][0], data[1], data[2], data[3]); - data[0] = 0; - data[3] += data[5]; - if (data[3] > data[4]) - { - if (data[6] == 1) - { - remove_some_task(); - data[0] = 2; - } - else - { - DestroyTask(taskId); - } - } - break; - case 2: - dp12_8087EA4(); - DestroyTask(taskId); - break; - } -} - -static void sub_80814E8(u8 taskId) -{ - if (!FuncIsActiveTask(sub_8081424)) - { - EnableBothScriptContexts(); - DestroyTask(taskId); - } -} - -static void sub_8081510(void) -{ - if (!FuncIsActiveTask(sub_80814E8)) - CreateTask(sub_80814E8, 80); -} - -static u8 sub_8081534(s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, u8 a6) -{ - u8 taskId = CreateTask(sub_8081424, 80); - s16 *data = gTasks[taskId].data; - - data[3] = a3; - data[4] = a4; - data[1] = a1; - data[2] = a2; - data[6] = a5; - - if (a3 < a4) - data[5] = a6; - else - data[5] = -a6; - - return taskId; -} - -void sub_8081594(u8 a1) -{ - u8 index = sav1_get_flash_used_on_map(); - u8 value = 0; - if (!a1) - value = 1; - sub_8081534(120, 80, gUnknown_0839ACDC[index], gUnknown_0839ACDC[a1], value, 1); - sub_8081510(); - ScriptContext2_Enable(); -} - -void sub_80815E0(u8 a1) -{ - if (a1) - { - sub_8081398(&gUnknown_03004DE0[0][0], 120, 80, gUnknown_0839ACDC[a1]); - CpuFastSet(&gUnknown_03004DE0[0], &gUnknown_03004DE0[1], 480); - } -} - -static void sub_808161C(u8 a1) -{ - int i; - u16 color[1]; - - if (!a1) - color[0] = 0x1F; - else - color[0] = 0x7C00; - - for (i = 0; i < 16; i++) - { - LoadPalette(color, 0xF0 + i, 2); - } -} - -static bool8 sub_8081658(u16 a1) -{ - u8 lo = REG_BLDALPHA & 0xFF; - u8 hi = REG_BLDALPHA >> 8; - - if (a1) - { - if (lo) - { - lo--; - } - } - else - { - if (hi < 0x10) - { - hi++; - } - } - - REG_BLDALPHA = (hi << 8) | lo; - - if (lo == 0 && hi == 0x10) - { - return TRUE; - } - - return FALSE; -} - -static void sub_80816A8(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - switch (data[0]) - { - case 0: - data[6] = REG_DISPCNT; - data[7] = REG_BLDCNT; - data[8] = REG_BLDALPHA; - data[9] = REG_WININ; - data[10] = REG_WINOUT; - REG_DISPCNT &= 0xBFFF; - REG_BLDCNT |= gUnknown_081E29E8[0]; - REG_BLDALPHA = 1804; - REG_WININ = 63; - 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]); - data[0] = 1; - break; - case 1: - MenuFillWindowRectWithBlankTile(0, 0, 29, 19); - sub_808161C(data[1]); - sub_8081534(data[2], data[3], 1, 160, 1, 2); - data[0] = 2; - break; - case 2: - if (!FuncIsActiveTask(sub_8081424)) - { - EnableBothScriptContexts(); - data[0] = 3; - } - break; - case 3: - InstallCameraPanAheadCallback(); - SetCameraPanningCallback(NULL); - data[5] = 0; - data[4] = 4; - data[0] = 4; - break; - case 4: - data[4]--; - if (!data[4]) - { - s32 panning; - data[4] = 4; - data[5] ^= 1; - if (data[5]) - panning = 4; - else - panning = -4; - SetCameraPanning(0, panning); - } - break; - case 6: - InstallCameraPanAheadCallback(); - data[4] = 8; - data[0] = 7; - break; - case 7: - data[4]--; - if (!data[4]) - { - data[4] = 8; - data[5] ^= 1; - if (sub_8081658(data[5]) == TRUE) - data[0] = 5; - } - break; - case 5: - MenuZeroFillWindowRect(0, 0, 29, 19); - LoadFontDefaultPalette(&gWindowConfig_81E6CE4); - REG_WIN0H = 255; - REG_DISPCNT = data[6]; - REG_BLDCNT = data[7]; - REG_BLDALPHA = data[8]; - REG_WININ = data[9]; - REG_WINOUT = data[10]; - EnableBothScriptContexts(); - DestroyTask(taskId); - break; - } -} - -void sub_80818A4(void) -{ - u8 taskId = CreateTask(sub_80816A8, 80); - s16 *data = gTasks[taskId].data; - - if (gScriptResult == 0) - { - data[1] = 0; - data[2] = 104; - } - else if (gScriptResult == 1) - { - data[1] = 1; - data[2] = 104; - } - else if (gScriptResult == 2) - { - data[1] = 0; - data[2] = 120; - } - else - { - data[1] = 1; - data[2] = 120; - } - - data[3] = 80; -} - -void sub_80818FC(void) -{ - u8 taskId = FindTaskIdByFunc(sub_80816A8); - gTasks[taskId].data[0] = 6; -} - -static void task50_0807F0C8(u8); - -void sub_8081924(void) -{ - sub_8054044(); - CreateTask(task50_0807F0C8, 80); -} - -static void task50_0807F0C8(u8 taskId) -{ - if (sub_8054034() == TRUE) - { - DestroyTask(taskId); - EnableBothScriptContexts(); - } -} diff --git a/src/field_special_scene.c b/src/field_special_scene.c deleted file mode 100644 index 82a7a13e3..000000000 --- a/src/field_special_scene.c +++ /dev/null @@ -1,349 +0,0 @@ -#include "global.h" -#include "field_special_scene.h" -#include "event_data.h" -#include "field_camera.h" -#include "field_fadetransition.h" -#include "field_map_obj.h" -#include "field_specials.h" -#include "fieldmap.h" -#include "main.h" -#include "palette.h" -#include "rom4.h" -#include "script.h" -#include "script_movement.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "task.h" - -#define SECONDS(value) ((signed) (60.0 * value + 0.5)) - -// porthole states -enum -{ - INIT_PORTHOLE, - IDLE_CHECK, - EXECUTE_MOVEMENT, - EXIT_PORTHOLE, -}; - -extern s8 gTruckCamera_HorizontalTable[]; - -extern u8 gUnknown_083D295F[]; -extern u8 gUnknown_083D2961[]; - -s32 GetTruckCameraBobbingY(int a1) -{ - if (!(a1 % 120)) - return -1; - else if ((a1 % 10) <= 4) - return 1; - - return 0; -} - -s32 GetTruckBoxMovement(int a1) // for the box movement? -{ - if (!((a1 + 120) % 180)) - return -1; - - return 0; -} - -void Task_Truck1(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - s16 cameraYpan; - s16 box1 = 0; - s16 box2 = 0; - s16 box3 = 0; - u8 mapNum, mapGroup; - register s16 zero asm("r4"); - - box1 = GetTruckBoxMovement(data[0] + 30) * 4; // top box. - sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3, box1 + 3); - box2 = GetTruckBoxMovement(data[0]) * 2; // bottom left box. - sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 0, box2 - 3); - box3 = GetTruckBoxMovement(data[0]) * 4; // bottom right box. - mapNum = gSaveBlock1.location.mapNum; - mapGroup = gSaveBlock1.location.mapGroup; - zero = 0; - sub_805BD90(3, mapNum, mapGroup, -3, box3); - - if (++data[0] == SECONDS(500)) // this will never run - data[0] = zero; // reset the timer if it gets stuck. - - cameraYpan = GetTruckCameraBobbingY(data[0]); - SetCameraPanning(0, cameraYpan); -} - -void Task_Truck2(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - s16 cameraYpan; - s16 cameraXpan; - s16 box1; - s16 box2; - s16 box3; - - data[0]++; - data[2]++; - - if (data[0] > 5) - { - data[0] = 0; - data[1]++; - } - if ((u16)data[1] == 19) - { - DestroyTask(taskId); - } - else - { - if (gTruckCamera_HorizontalTable[data[1]] == 2) - gTasks[taskId].func = Task_Truck3; - - cameraXpan = gTruckCamera_HorizontalTable[data[1]]; - cameraYpan = GetTruckCameraBobbingY(data[2]); - SetCameraPanning(cameraXpan, cameraYpan); - box1 = GetTruckBoxMovement(data[2] + 30) * 4; - sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3 - cameraXpan, box1 + 3); - box2 = GetTruckBoxMovement(data[2]) * 2; - sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -cameraXpan, box2 - 3); - box3 = GetTruckBoxMovement(data[2]) * 4; - sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3 - cameraXpan, box3); - } -} - -void Task_Truck3(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - s16 cameraXpan; - s16 cameraYpan; - - data[0]++; - - if (data[0] > 5) - { - data[0] = 0; - data[1]++; - } - - if ((u16)data[1] == 19) - { - DestroyTask(taskId); - } - else - { - cameraXpan = gTruckCamera_HorizontalTable[data[1]]; - cameraYpan = 0; - SetCameraPanning(cameraXpan, 0); - sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3 - cameraXpan, cameraYpan + 3); - sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -cameraXpan, cameraYpan - 3); - sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3 - cameraXpan, cameraYpan); - } -} - -void Task_HandleTruckSequence(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - switch (data[0]) - { - /* - Each case has a timer which is handled with data[1], incrementing - until it reaches the if function's condition, which sets the next task up. - */ - case 0: - data[1]++; - if (data[1] == SECONDS(1.5)) - { - SetCameraPanningCallback(0); - data[1] = 0; // reset the timer. - data[2] = CreateTask(Task_Truck1, 0xA); - data[0] = 1; // run the next case. - PlaySE(SE_TRACK_MOVE); - } - break; - case 1: - data[1]++; - if (data[1] == SECONDS(2.5)) - { - pal_fill_black(); - data[1] = 0; - data[0] = 2; - } - break; - case 2: - data[1]++; - if (!gPaletteFade.active && data[1] > SECONDS(5)) - { - data[1] = 0; - DestroyTask(data[2]); - data[3] = CreateTask(Task_Truck2, 0xA); - data[0] = 3; - PlaySE(SE_TRACK_STOP); - } - break; - case 3: - if (!gTasks[data[3]].isActive) // is Truck2 no longer active (is Truck3 active?) - { - InstallCameraPanAheadCallback(); - data[1] = 0; - data[0] = 4; - } - break; - case 4: - data[1]++; - if (data[1] == 90) - { - PlaySE(SE_TRACK_HAIK); - data[1] = 0; - data[0] = 5; - } - break; - case 5: - data[1]++; - if (data[1] == 120) - { - MapGridSetMetatileIdAt(11, 8, 520); - MapGridSetMetatileIdAt(11, 9, 528); - MapGridSetMetatileIdAt(11, 10, 536); - DrawWholeMapView(); - PlaySE(SE_TRACK_DOOR); - DestroyTask(taskId); - ScriptContext2_Disable(); - } - break; - } -} - -void ExecuteTruckSequence(void) -{ - MapGridSetMetatileIdAt(11, 8, 525); - MapGridSetMetatileIdAt(11, 9, 533); - MapGridSetMetatileIdAt(11, 10, 541); - DrawWholeMapView(); - ScriptContext2_Enable(); - CpuFastFill(0, gPlttBufferFaded, 0x400); - CreateTask(Task_HandleTruckSequence, 0xA); -} - -void EndTruckSequence(u8 taskId) -{ - if (!FuncIsActiveTask(Task_HandleTruckSequence)) - { - sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3, 3); - sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 0, -3); - sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3, 0); - } -} - -bool8 sub_80C7754(void) -{ - s8 mapGroup, mapNum; - s16 x, y; - - if (GetSSTidalLocation(&mapGroup, &mapNum, &x, &y)) - { - return FALSE; - } - else - { - warp1_set(mapGroup, mapNum, -1, x, y); - return TRUE; - } -} - -void Task_HandlePorthole(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - u16 *var = GetVarPointer(VAR_PORTHOLE); - struct WarpData *location = &gSaveBlock1.location; - - switch (data[0]) - { - case INIT_PORTHOLE: // finish fading before making porthole finish. - if (!gPaletteFade.active) - { - data[1] = 0; - data[0] = EXECUTE_MOVEMENT; // execute movement before checking if should be exited. strange? - } - break; - case IDLE_CHECK: // idle and move. - if (gMain.newKeys & A_BUTTON) - data[1] = 1; - if (!sub_80A212C(0xFF, location->mapNum, location->mapGroup)) - return; - if (CountSSTidalStep(1) == TRUE) - { - if (*var == 2) - *var = 9; - else - *var = 10; - data[0] = 3; - return; - } - data[0] = 2; - case EXECUTE_MOVEMENT: // execute movement. - if (data[1]) - { - data[0] = EXIT_PORTHOLE; // exit porthole. - return; - } - // run this once. - if (*var == 2) // which direction? - { - exec_movement(0xFF, location->mapNum, location->mapGroup, gUnknown_083D295F); - data[0] = IDLE_CHECK; // run case 1. - } - else - { - exec_movement(0xFF, location->mapNum, location->mapGroup, gUnknown_083D2961); - data[0] = IDLE_CHECK; // run case 1. - } - break; - case EXIT_PORTHOLE: // exit porthole. - FlagReset(0x4001); - FlagReset(0x4000); - copy_saved_warp2_bank_and_enter_x_to_warp1(0); - sp13E_warp_to_last_warp(); - DestroyTask(taskId); - break; - } -} - -void sub_80C78A0(void) -{ - u8 spriteId = AddPseudoFieldObject(0x8C, SpriteCallbackDummy, 112, 80, 0); - - gSprites[spriteId].coordOffsetEnabled = FALSE; - - if (VarGet(0x40B4) == 2) - { - StartSpriteAnim(&gSprites[spriteId], FieldObjectDirectionToImageAnimId(4)); - } - else - { - StartSpriteAnim(&gSprites[spriteId], FieldObjectDirectionToImageAnimId(3)); - } -} - -void sub_80C791C(void) -{ - sub_80C78A0(); - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = TRUE; - pal_fill_black(); - CreateTask(Task_HandlePorthole, 80); - ScriptContext2_Enable(); -} - -void sub_80C7958(void) -{ - FlagSet(SYS_CRUISE_MODE); - FlagSet(0x4001); - FlagSet(0x4000); - saved_warp2_set(0, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1); - sub_80C7754(); - sub_8080F9C(); -} diff --git a/src/field_specials.c b/src/field_specials.c deleted file mode 100644 index 454bd8d96..000000000 --- a/src/field_specials.c +++ /dev/null @@ -1,2383 +0,0 @@ -#include "global.h" -#include "field_specials.h" -#include "diploma.h" -#include "fieldmap.h" -#include "event_data.h" -#include "battle_tower.h" -#include "field_map_obj.h" -#include "region_map.h" -#include "field_region_map.h" -#include "field_message_box.h" -#include "field_camera.h" -#include "field_player_avatar.h" -#include "main.h" -#include "map_constants.h" -#include "rom4.h" -#include "script.h" -#include "songs.h" -#include "string_util.h" -#include "strings.h" -#include "pokeblock.h" -#include "species.h" -#include "abilities.h" -#include "moves.h" -#include "text.h" -#include "wallclock.h" -#include "tv.h" -#include "rtc.h" -#include "link.h" -#include "songs.h" -#include "sound.h" -#include "menu.h" -#include "starter_choose.h" -#include "menu_helpers.h" -#include "battle_tower.h" -#include "field_weather.h" -#include "pokemon_summary_screen.h" -#include "rng.h" - -#if ENGLISH -#define CHAR_DECIMAL_SEPARATOR CHAR_PERIOD -#elif GERMAN -#define CHAR_DECIMAL_SEPARATOR CHAR_COMMA -#endif - -extern struct WarpData gUnknown_020297F0; -extern u8 gBattleOutcome; -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; -extern u16 gScriptResult; - -EWRAM_DATA u8 gUnknown_02039250 = 0; -EWRAM_DATA u8 gUnknown_02039251 = 0; -EWRAM_DATA u32 gUnknown_02039254 = 0; -EWRAM_DATA u8 gUnknown_02039258 = 0; -EWRAM_DATA u8 gUnknown_02039259 = 0; -EWRAM_DATA u8 gUnknown_0203925A = 0; -EWRAM_DATA u8 gUnknown_0203925B = 0; -EWRAM_DATA u8 gUnknown_0203925C = 0; - -static void RecordCyclingRoadResults(u32, u8); - -static struct ElevatorMenu gUnknown_03000760[20]; - -void sub_810D6A4(void) { - SetMainCallback2(sub_8145D88); - ScriptContext2_Enable(); -} - -void sub_810D6B8(void) { - gMain.savedCallback = c2_exit_to_overworld_2_switch; - SetMainCallback2(CB2_ViewWallClock); - ScriptContext2_Enable(); -} - -void ResetCyclingRoadChallengeData(void) { - gUnknown_02039250 = 0; - gUnknown_02039251 = 0; - gUnknown_02039254 = 0; -} - -void BeginCyclingRoadChallenge(void) { - gUnknown_02039250 = 1; - gUnknown_02039251 = 0; - gUnknown_02039254 = gMain.vblankCounter1; -} - -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) { - u8 result; - - if (arg1 <= 99) - { - ConvertIntToDecimalStringN(gStringVar1, arg1, STR_CONV_MODE_LEFT_ALIGN, 2); - StringAppend(gStringVar1, gOtherText_Times); - } - else - { - StringCopy(gStringVar1, gOtherText_99Times); - } - - if (arg0 < 3600) - { - ConvertIntToDecimalStringN(gStringVar2, arg0 / 60, STR_CONV_MODE_RIGHT_ALIGN, 2); - gStringVar2[2] = CHAR_DECIMAL_SEPARATOR; - ConvertIntToDecimalStringN(&gStringVar2[3], ((arg0 % 60) * 100) / 60, STR_CONV_MODE_LEADING_ZEROS, 2); - StringAppend(gStringVar2, gOtherText_Seconds); - } - else - { - StringCopy(gStringVar2, gOtherText_1Minute); - } - - result = 0; - if (arg1 == 0) - { - result = 5; - } - else if (arg1 < 4) - { - result = 4; - } - else if (arg1 < 10) - { - result = 3; - } - else if (arg1 < 20) - { - result = 2; - } - else if (arg1 < 100) - { - result = 1; - } - - if (arg0 / 60 <= 10) - { - result += 5; - } - else if (arg0 / 60 <= 15) - { - result += 4; - } - else if (arg0 / 60 <= 20) - { - result += 3; - } - else if (arg0 / 60 <= 40) - { - result += 2; - } - else if (arg0 / 60 < 60) - { - result += 1; - } - - - gScriptResult = result; -} - -void FinishCyclingRoadChallenge(void) { - const u32 time = gMain.vblankCounter1 - gUnknown_02039254; - - DetermineCyclingRoadResults(time, gUnknown_02039251); - RecordCyclingRoadResults(time, gUnknown_02039251); -} - -static void RecordCyclingRoadResults(u32 arg0, u8 arg1) { - u16 high = VarGet(0x4028); - u16 low = VarGet(0x4029); - u32 record = high + (low << 16); - - if (record > arg0 || record == 0) - { - VarSet(0x4028, arg0); - VarSet(0x4029, arg0 >> 16); - VarSet(0x4027, arg1); - } -} - -u16 GetRecordedCyclingRoadResults(void) { - u16 high = VarGet(0x4028); - u16 low = VarGet(0x4029); - u32 record = high + (low << 16); - - if (record == 0) - { - return FALSE; - } - - DetermineCyclingRoadResults(record, VarGet(0x4027)); - return TRUE; -} - -void UpdateCyclingRoadState(void) { - if (gUnknown_020297F0.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE && gUnknown_020297F0.mapGroup == MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE) - { - return; - } - - if (VarGet(0x40a9) == 2 || VarGet(0x40a9) == 3) - { - VarSet(0x40a9, 0); - sav1_set_battle_music_maybe(SE_STOP); - } -} - -void SetSSTidalFlag(void) -{ - FlagSet(SYS_CRUISE_MODE); - *GetVarPointer(VAR_CRUISE_STEP_COUNT) = 0; -} - -void ResetSSTidalFlag(void) -{ - FlagReset(SYS_CRUISE_MODE); -} - -bool32 CountSSTidalStep(u16 delta) -{ - if (!FlagGet(SYS_CRUISE_MODE) || (*GetVarPointer(VAR_CRUISE_STEP_COUNT) += delta) <= 0xcc) - { - return FALSE; - } - return TRUE; -} - -u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y) -{ - u16 *varCruiseStepCount = GetVarPointer(VAR_CRUISE_STEP_COUNT); - switch (*GetVarPointer(VAR_PORTHOLE)) - { - case 1: - case 8: - return 1; - case 3: - case 9: - return 4; - case 4: - case 5: - return 2; - case 6: - case 10: - return 3; - case 2: - if (*varCruiseStepCount < 60) - { - *mapNum = MAP_ID_ROUTE134; - *x = *varCruiseStepCount + 19; - } - else if (*varCruiseStepCount < 140) - { - *mapNum = MAP_ID_ROUTE133; - *x = *varCruiseStepCount - 60; - } - else - { - *mapNum = MAP_ID_ROUTE132; - *x = *varCruiseStepCount - 140; - } - break; - case 7: - if (*varCruiseStepCount < 66) - { - *mapNum = MAP_ID_ROUTE132; - *x = 65 - *varCruiseStepCount; - } - else if (*varCruiseStepCount < 146) { - *mapNum = MAP_ID_ROUTE133; - *x = 145 - *varCruiseStepCount; - } - else - { - *mapNum = MAP_ID_ROUTE134; - *x = 224 - *varCruiseStepCount; - } - break; - } - *mapGroup = MAP_GROUP_ROUTE132; - *y = 20; - return 0; -} - -u8 GetLinkPartnerNames(void) -{ - u8 i; - u8 j = 0; - u8 myLinkPlayerNumber = sub_8008218(); - u8 nLinkPlayers = sub_800820C(); - for (i=0; i=0; i--) - { - MapGridSetMetatileIdAt(switchCoords->x, switchCoords->y, 0x206); - switchCoords++; - } - for (y=12; y<24; y++) - { - for (x=7; x<16; x++) - { - switch (MapGridGetMetatileIdAt(x, y)) - { - case 0x220: - MapGridSetMetatileIdAt(x, y, 0x230); - break; - case 0x221: - MapGridSetMetatileIdAt(x, y, 0x231); - break; - case 0x228: - MapGridSetMetatileIdAt(x, y, 0x238); - break; - case 0x229: - MapGridSetMetatileIdAt(x, y, 0x239); - break; - case 0x222: - MapGridSetMetatileIdAt(x, y, 0x232); - break; - case 0x223: - MapGridSetMetatileIdAt(x, y, 0x233); - break; - case 0x22a: - MapGridSetMetatileIdAt(x, y, 0x23a); - break; - case 0x22b: - MapGridSetMetatileIdAt(x, y, 0x23b); - break; - case 0x240: - MapGridSetMetatileIdAt(x, y, 0xe42); - break; - case 0x241: - MapGridSetMetatileIdAt(x, y, 0xe43); - break; - case 0x248: - case 0x249: - MapGridSetMetatileIdAt(x, y, 0x21a); - break; - case 0x250: - MapGridSetMetatileIdAt(x, y, 0x251); - break; - } - } - } -} - -static void Task_PetalburgGym(u8); -static void PetalburgGymFunc(u8, u16); -const u8 gUnknown_083F8370[] = {0, 1, 1, 1, 1}; -const u16 gUnknown_083F8376[] = {0x218, 0x219, 0x21a, 0x21b, 0x21c}; - -void PetalburgGymSpecial1(void) -{ - gUnknown_02039258 = 0; - gUnknown_02039259 = 0; - PlaySE(SE_KI_GASYAN); - CreateTask(Task_PetalburgGym, 8); -} - -static void Task_PetalburgGym(u8 taskId) -{ - if (gUnknown_083F8370[gUnknown_02039259] == gUnknown_02039258) - { - PetalburgGymFunc(gSpecialVar_0x8004, gUnknown_083F8376[gUnknown_02039259]); - gUnknown_02039258 = 0; - if ((++gUnknown_02039259) == 5) - { - DestroyTask(taskId); - EnableBothScriptContexts(); - } - } - else - { - gUnknown_02039258++; - } -} - -static void PetalburgGymFunc(u8 a0, u16 a1) -{ - u16 x[4]; - u16 y[4]; - u8 i; - u8 nDoors = 0; - switch (a0) - { - case 1: - nDoors = 2; - x[0] = 1; - x[1] = 7; - y[0] = 0x68; - y[1] = 0x68; - break; - case 2: - nDoors = 2; - x[0] = 1; - x[1] = 7; - y[0] = 0x4e; - y[1] = 0x4e; - break; - case 3: - nDoors = 2; - x[0] = 1; - x[1] = 7; - y[0] = 0x5b; - y[1] = 0x5b; - break; - case 4: - nDoors = 1; - x[0] = 7; - y[0] = 0x27; - break; - case 5: - nDoors = 2; - x[0] = 1; - x[1] = 7; - y[0] = 0x34; - y[1] = 0x34; - break; - case 6: - nDoors = 1; - x[0] = 1; - y[0] = 0x41; - break; - case 7: - nDoors = 1; - x[0] = 7; - y[0] = 0xd; - break; - case 8: - nDoors = 1; - x[0] = 1; - y[0] = 0x1a; - break; - } - for (i=0; i 9999) - { - weekCount = 9999; - } - return weekCount; -} - -u8 GetLeadMonFriendshipScore(void) -{ - struct Pokemon *pokemon = &gPlayerParty[GetLeadMonIndex()]; - if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) == 255) - { - return 6; - } - if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 200) - { - return 5; - } - if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 150) - { - return 4; - } - if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 100) - { - return 3; - } - if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 50) - { - return 2; - } - if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) >= 1) - { - return 1; - } - return 0; -} - -void CB2_FieldShowRegionMap(void) -{ - FieldInitRegionMap(c2_exit_to_overworld_1_continue_scripts_restart_music); -} - -void FieldShowRegionMap(void) -{ - SetMainCallback2(CB2_FieldShowRegionMap); -} - -static void Task_PCTurnOnEffect(u8); -static void PCTurnOffEffect_0(struct Task *); -static void PCTurnOffEffect_1(s16, s8, s8); -static void PCTurnOffEffect(void); - -void DoPCTurnOnEffect(void) -{ - if (FuncIsActiveTask(Task_PCTurnOnEffect) != TRUE) - { - u8 taskId = CreateTask(Task_PCTurnOnEffect, 8); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = taskId; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; - } -} - -static void Task_PCTurnOnEffect(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - if (task->data[0] == 0) - { - PCTurnOffEffect_0(task); - } -} - -static void PCTurnOffEffect_0(struct Task *task) -{ - u8 playerDirectionLowerNybble; - s8 dx = 0; - s8 dy = 0; - if (task->data[3] == 6) - { - task->data[3] = 0; - playerDirectionLowerNybble = player_get_direction_lower_nybble(); - switch (playerDirectionLowerNybble) - { - case DIR_NORTH: - dx = 0; - dy = -1; - break; - case DIR_WEST: - dx = -1; - dy = -1; - break; - case DIR_EAST: - dx = 1; - dy = -1; - break; - } - PCTurnOffEffect_1(task->data[4], dx, dy); - DrawWholeMapView(); - task->data[4] ^= 1; - if ((++task->data[2]) == 5) - { - DestroyTask(task->data[1]); - } - } - task->data[3]++; -} - -static void PCTurnOffEffect_1(s16 flag, s8 dx, s8 dy) -{ - u16 tileId = 0; - if (flag != 0) - { - if (gSpecialVar_0x8004 == 0) - { - tileId = 0x4; - } - else if (gSpecialVar_0x8004 == 1) - { - tileId = 0x25a; - } - else if (gSpecialVar_0x8004 == 2) - { - tileId = 0x259; - } - } - else - { - if (gSpecialVar_0x8004 == 0) - { - tileId = 0x5; - } - else if (gSpecialVar_0x8004 == 1) - { - tileId = 0x27f; - } - else if (gSpecialVar_0x8004 == 2) - { - tileId = 0x27e; - } - } - MapGridSetMetatileIdAt(gSaveBlock1.pos.x + dx + 7, gSaveBlock1.pos.y + dy + 7, tileId | 0xc00); -} - -void DoPCTurnOffEffect(void) -{ - PCTurnOffEffect(); -} - -static void PCTurnOffEffect(void) -{ - s8 dx = 0; - s8 dy = 0; - u16 tileId = 0; - u8 playerDirectionLowerNybble = player_get_direction_lower_nybble(); - switch (playerDirectionLowerNybble) - { - case DIR_NORTH: - dx = 0; - dy = -1; - break; - case DIR_WEST: - dx = -1; - dy = -1; - break; - case DIR_EAST: - dx = 1; - dy = -1; - break; - } - if (gSpecialVar_0x8004 == 0) - { - tileId = 0x4; - } - else if (gSpecialVar_0x8004 == 1) - { - tileId = 0x25a; - } - else if (gSpecialVar_0x8004 == 2) - { - tileId = 0x259; - } - MapGridSetMetatileIdAt(gSaveBlock1.pos.x + dx + 7, gSaveBlock1.pos.y + dy + 7, tileId | 0xc00); - DrawWholeMapView(); -} - -static void Task_LotteryCornerComputerEffect(u8); -static void LotteryCornerComputerEffect(struct Task *); - -void DoLotteryCornerComputerEffect(void) -{ - if (FuncIsActiveTask(Task_LotteryCornerComputerEffect) != TRUE) - { - u8 taskId = CreateTask(Task_LotteryCornerComputerEffect, 8); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = taskId; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; - } -} - -static void Task_LotteryCornerComputerEffect(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - if (task->data[0] == 0) - { - LotteryCornerComputerEffect(task); - } -} - -static void LotteryCornerComputerEffect(struct Task *task) -{ - if (task->data[3] == 6) - { - task->data[3] = 0; - if (task->data[4] != 0) - { - MapGridSetMetatileIdAt(18, 8, 0xe9d); - MapGridSetMetatileIdAt(18, 9, 0xea5); - } - else - { - MapGridSetMetatileIdAt(18, 8, 0xe58); - MapGridSetMetatileIdAt(18, 9, 0xe60); - } - DrawWholeMapView(); - task->data[4] ^= 1; - if ((++task->data[2]) == 5) - { - DestroyTask(task->data[1]); - } - } - task->data[3]++; -} - -void EndLotteryCornerComputerEffect(void) -{ - MapGridSetMetatileIdAt(18, 8, 0xe9d); - MapGridSetMetatileIdAt(18, 9, 0xea5); - DrawWholeMapView(); -} - -static void sub_810E874(void); -void sub_810E944(void); -void sub_810E984(u8); -bool8 sub_810EAC8(u8, u8); -void sub_810EB90(u8, u8); -void sub_810EBEC(void); -void sub_810EC34(u8); -void sub_810EC9C(u8); -void sub_810ECB0(void); -void sub_810ECD4(void); -void sub_810ECFC(void); -void sub_810ED40(u8); -void sub_810ED60(struct Task *); -void sub_810EEDC(void); - -const u8 *const gUnknown_083F8380[] = { - OtherText_1F, - OtherText_2F, - OtherText_3F, - OtherText_4F, - OtherText_5F, - OtherText_6F, - OtherText_7F, - OtherText_8F, - OtherText_9F, - OtherText_10F, - OtherText_11F, - OtherText_B1F, - OtherText_B2F, - OtherText_B3F, - OtherText_B4F, - OtherText_Rooftop -}; - -void SetDepartmentStoreFloorVar(void) -{ - u8 deptStoreFloor; - switch (gSaveBlock1.warp2.mapNum) - { - case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_1F: - deptStoreFloor = 0; - break; - case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_2F: - deptStoreFloor = 1; - break; - case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_3F: - deptStoreFloor = 2; - break; - case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_4F: - deptStoreFloor = 3; - break; - case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_5F: - deptStoreFloor = 4; - break; - case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP: - deptStoreFloor = 15; - break; - default: - deptStoreFloor = 0; - break; - } - VarSet(VAR_DEPT_STORE_FLOOR, deptStoreFloor); -} - -void ScriptAddElevatorMenuItem(u8 a0, u8 a1, u8 a2, u8 a3) -{ - u8 i; - if (gSpecialVar_0x8004 == 0) - { - for (i=0; i<20; i++) - { - gUnknown_03000760[i].var0 = 16; - } - } - gUnknown_03000760[gSpecialVar_0x8004].var0 = a0; - gUnknown_03000760[gSpecialVar_0x8004].var1 = a1; - gUnknown_03000760[gSpecialVar_0x8004].var2 = a2; - gUnknown_03000760[gSpecialVar_0x8004].var3 = a3; - gSpecialVar_0x8004++; -} - -void ScriptShowElevatorMenu(void) -{ - u8 i = 0; - gUnknown_0203925A = 0; - gUnknown_0203925B = 0; - ScriptAddElevatorMenuItem(16, 0, 0, 0); - while (gUnknown_03000760[i].var0 != 16) - { - gUnknown_0203925A++; - i++; - } - sub_810E874(); -} - -static void sub_810E874(void) -{ - u8 i; - ScriptContext2_Enable(); - if (gUnknown_0203925A > 5) - { - MenuDrawTextWindow(0, 0, 8, 11); - InitMenu(0, 1, 1, 5, 0, 7); - gUnknown_0203925C = 0; - sub_80F944C(); - LoadScrollIndicatorPalette(); - sub_810ECD4(); - } - else - { - MenuDrawTextWindow(0, 0, 8, 2 * gUnknown_0203925A + 1); - InitMenu(0, 1, 1, gUnknown_0203925A, 0, 7); - } - for (i = 0; i < 5 && gUnknown_03000760[i].var0 != 16; i ++) - { - MenuPrint(gUnknown_083F8380[gUnknown_03000760[i].var0], 1, 2 * i + 1); - } - sub_810E944(); - CreateTask(sub_810E984, 8); -} - -void sub_810E944(void) -{ - MenuDrawTextWindow(20, 0, 29, 5); - sub_8072BD8(gOtherText_NowOn, 21, 1, 64); - sub_8072BD8(gUnknown_083F8380[gSpecialVar_0x8005], 21, 3, 64); -} - -void sub_810E984(u8 taskId) -{ - u8 curMenuPos; - if (gMain.newKeys == DPAD_UP && gUnknown_0203925B != 0) - { - gUnknown_0203925B--; - curMenuPos = GetMenuCursorPos(); - MoveMenuCursorNoWrap(-1); - sub_810EAC8(curMenuPos, DPAD_UP); - } - if (gMain.newKeys == DPAD_DOWN && gUnknown_0203925B != gUnknown_0203925A - 1) - { - gUnknown_0203925B++; - curMenuPos = GetMenuCursorPos(); - MoveMenuCursorNoWrap(+1); - sub_810EAC8(curMenuPos, DPAD_DOWN); - } - if (gMain.newKeys & A_BUTTON) - { - saved_warp2_set_2(0, gUnknown_03000760[gUnknown_0203925B].var1, gUnknown_03000760[gUnknown_0203925B].var2, -1, 2, 1); - if (gSpecialVar_0x8005 == gUnknown_0203925B) - { - gScriptResult = 0; - PlaySE(SE_SELECT); - MenuZeroFillWindowRect(0, 0, 29, 12); - sub_810EC9C(taskId); - } - else - { - gScriptResult = 1; - gSpecialVar_0x8005 = gUnknown_0203925B; - sub_810EBEC(); - FieldObjectTurnByLocalIdAndMap(gScriptLastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, DIR_SOUTH); - sub_810EEDC(); - MenuZeroFillScreen(); - DestroyTask(taskId); - } - } - else if (gMain.newKeys & B_BUTTON) - { - gScriptResult = 0; - PlaySE(SE_SELECT); - sub_810EEDC(); - MenuZeroFillWindowRect(0, 0, 29, 12); - sub_810EC9C(taskId); - } -} - -// This function, as written, swaps the roles of r4 and r5 throughout. -#ifdef NONMATCHING -bool8 sub_810EAC8(u8 prevMenuPos, u8 dpadInput) -{ - u8 i; - bool8 flag = 0; - u8 newPos = 0; - if (gUnknown_0203925A < 5) - { - return FALSE; - } - if (dpadInput == DPAD_UP) - { - if (prevMenuPos == 0) - { - newPos = gUnknown_0203925B; - flag = 1; - } - } - else if (dpadInput == DPAD_DOWN) - { - if (prevMenuPos == 4) - { - newPos = gUnknown_0203925B - 4; - flag = 1; - } - } - if (flag) - { - sub_810EB90(newPos, 5); - MenuFillWindowRectWithBlankTile(2, 1, 7, 10); - for (i=0; i<5 && gUnknown_03000760[newPos].var0 != 16; newPos++, i++) - { - MenuPrint(gUnknown_083F8380[gUnknown_03000760[newPos].var0], 1, i * 2 + 1); - } - } - return flag; -} -#else -__attribute__((naked)) -bool8 sub_810EAC8(u8 prevMenuPos, u8 dpadInput) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r8\n" - "\tpush {r7}\n" - "\tlsls r0, 24\n" - "\tlsrs r2, r0, 24\n" - "\tadds r5, r2, 0\n" - "\tlsls r1, 24\n" - "\tlsrs r1, 24\n" - "\tadds r3, r1, 0\n" - "\tmovs r7, 0\n" - "\tmovs r4, 0\n" - "\tldr r0, _0810EAEC @ =gUnknown_0203925A\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0x4\n" - "\tbhi _0810EAF0\n" - "\tmovs r0, 0\n" - "\tb _0810EB78\n" - "\t.align 2, 0\n" - "_0810EAEC: .4byte gUnknown_0203925A\n" - "_0810EAF0:\n" - "\tcmp r1, 0x40\n" - "\tbne _0810EB04\n" - "\tcmp r2, 0\n" - "\tbne _0810EB18\n" - "\tldr r0, _0810EB00 @ =gUnknown_0203925B\n" - "\tldrb r4, [r0]\n" - "\tmovs r7, 0x1\n" - "\tb _0810EB1C\n" - "\t.align 2, 0\n" - "_0810EB00: .4byte gUnknown_0203925B\n" - "_0810EB04:\n" - "\tcmp r3, 0x80\n" - "\tbne _0810EB18\n" - "\tcmp r5, 0x4\n" - "\tbne _0810EB18\n" - "\tldr r0, _0810EB84 @ =gUnknown_0203925B\n" - "\tldrb r0, [r0]\n" - "\tsubs r0, 0x4\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tmovs r7, 0x1\n" - "_0810EB18:\n" - "\tcmp r7, 0\n" - "\tbeq _0810EB76\n" - "_0810EB1C:\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0x5\n" - "\tbl sub_810EB90\n" - "\tmovs r0, 0x2\n" - "\tmovs r1, 0x1\n" - "\tmovs r2, 0x7\n" - "\tmovs r3, 0xA\n" - "\tbl MenuFillWindowRectWithBlankTile\n" - "\tmovs r5, 0\n" - "\tldr r2, _0810EB88 @ =gUnknown_03000760\n" - "\tlsls r1, r4, 2\n" - "\tadds r0, r1, r2\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0x10\n" - "\tbeq _0810EB76\n" - "\tldr r0, _0810EB8C @ =gUnknown_083F8380\n" - "\tmov r8, r0\n" - "\tadds r6, r2, 0\n" - "_0810EB44:\n" - "\tadds r0, r1, r6\n" - "\tldrb r0, [r0]\n" - "\tlsls r0, 2\n" - "\tadd r0, r8\n" - "\tldr r0, [r0]\n" - "\tlsls r2, r5, 1\n" - "\tadds r2, 0x1\n" - "\tlsls r2, 24\n" - "\tlsrs r2, 24\n" - "\tmovs r1, 0x1\n" - "\tbl MenuPrint\n" - "\tadds r0, r4, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tadds r0, r5, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tcmp r5, 0x4\n" - "\tbhi _0810EB76\n" - "\tlsls r1, r4, 2\n" - "\tadds r0, r1, r6\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0x10\n" - "\tbne _0810EB44\n" - "_0810EB76:\n" - "\tadds r0, r7, 0\n" - "_0810EB78:\n" - "\tpop {r3}\n" - "\tmov r8, r3\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1\n" - "\t.align 2, 0\n" - "_0810EB84: .4byte gUnknown_0203925B\n" - "_0810EB88: .4byte gUnknown_03000760\n" - "_0810EB8C: .4byte gUnknown_083F8380"); -} -#endif - -void sub_810EB90(u8 newPos, u8 maxItems) -{ - if (newPos == 0) - { - gUnknown_0203925C ^= 0x02; - DestroyVerticalScrollIndicator(0); - } - else - { - sub_810ECB0(); - } - if (newPos + maxItems < gUnknown_0203925A) - { - sub_810ECD4(); - } - else if (newPos + maxItems == gUnknown_0203925A) - { - gUnknown_0203925C ^= 0x01; - DestroyVerticalScrollIndicator(1); - } -} - -void sub_810EBEC(void) -{ - u8 taskId = CreateTask(sub_810EC34, 9); - gTasks[taskId].data[0] = 1; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 1; - gTasks[taskId].data[5] = 3; - SetCameraPanningCallback(NULL); - sub_810ECFC(); - PlaySE(SE_ELEBETA); -} - -void sub_810EC34(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - task->data[1] ++; - if (task->data[1] % task->data[5] == 0) - { - task->data[1] = 0; - task->data[2] ++; - if (task->data[3] == 0) - { - task->data[4] = -task->data[4]; - SetCameraPanning(0, task->data[4]); - if (task->data[2] == 23) - { - PlaySE(SE_PINPON); - sub_810EC9C(taskId); - InstallCameraPanAheadCallback(); - } - } - } -} - -void sub_810EC9C(u8 taskId) -{ - DestroyTask(taskId); - EnableBothScriptContexts(); -} - -void sub_810ECB0(void) -{ - if (gUnknown_0203925C >> 1 != 1) - { - gUnknown_0203925C |= 0x2; - CreateVerticalScrollIndicators(0, 0x24, 0x08); - } -} - -void sub_810ECD4(void) -{ - if ((gUnknown_0203925C & 1) == 0) - { - gUnknown_0203925C |= 0x1; - CreateVerticalScrollIndicators(1, 0x24, 0x48); - } -} - -void sub_810ECFC(void) -{ - if (FuncIsActiveTask(sub_810ED40) != TRUE) - { - u8 taskId = CreateTask(sub_810ED40, 8); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = taskId; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; - } -} - -void sub_810ED40(u8 taskId) -{ - sub_810ED60(&gTasks[taskId]); -} - -void sub_810ED60(struct Task *task) -{ - if (task->data[3] == 8) - { - task->data[3] = 0; - if (task->data[4] != 0) - { - MapGridSetMetatileIdAt( 7, 7, 0xe68); - MapGridSetMetatileIdAt( 8, 7, 0xe69); - MapGridSetMetatileIdAt( 9, 7, 0xe69); - MapGridSetMetatileIdAt(10, 7, 0xe6a); - MapGridSetMetatileIdAt( 7, 8, 0xe70); - MapGridSetMetatileIdAt( 8, 8, 0xe71); - MapGridSetMetatileIdAt( 9, 8, 0xe71); - MapGridSetMetatileIdAt(10, 8, 0xe72); - MapGridSetMetatileIdAt( 7, 9, 0xe78); - MapGridSetMetatileIdAt( 8, 9, 0xe79); - MapGridSetMetatileIdAt( 9, 9, 0xe79); - MapGridSetMetatileIdAt(10, 9, 0xe7a); - } - else - { - MapGridSetMetatileIdAt( 7, 7, 0xe6b); - MapGridSetMetatileIdAt( 8, 7, 0xe6c); - MapGridSetMetatileIdAt( 9, 7, 0xe6c); - MapGridSetMetatileIdAt(10, 7, 0xe6d); - MapGridSetMetatileIdAt( 7, 8, 0xe73); - MapGridSetMetatileIdAt( 8, 8, 0xe74); - MapGridSetMetatileIdAt( 9, 8, 0xe74); - MapGridSetMetatileIdAt(10, 8, 0xe75); - MapGridSetMetatileIdAt( 7, 9, 0xe7b); - MapGridSetMetatileIdAt( 8, 9, 0xe7c); - MapGridSetMetatileIdAt( 9, 9, 0xe7c); - MapGridSetMetatileIdAt(10, 9, 0xe7d); - } - DrawWholeMapView(); - task->data[4] ^= 1; - task->data[2]++; - if (task->data[2] == 8) - { - DestroyTask(task->data[1]); - } - } - task->data[3]++; -} - -void sub_810EEDC(void) -{ - if ((gUnknown_0203925C & 1) != 0) - { - DestroyVerticalScrollIndicator(1); - } - if ((gUnknown_0203925C >> 1) == 1) - { - DestroyVerticalScrollIndicator(0); - } - BuyMenuFreeMemory(); -} - -void SetTrickHouseEndRoomFlag(void) -{ - u16 *specVar = &gSpecialVar_0x8004; - u16 flag = 0x259; - *specVar = flag; - FlagSet(flag); -} - -void ResetTrickHouseEndRoomFlag(void) -{ - u16 *specVar = &gSpecialVar_0x8004; - u16 flag = 0x259; - *specVar = flag; - FlagReset(flag); -} - -bool8 CheckLeadMonCool(void) -{ - if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_COOL) < 200) - { - return FALSE; - } - return TRUE; -} - -bool8 CheckLeadMonBeauty(void) -{ - if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_BEAUTY) < 200) - { - return FALSE; - } - return TRUE; -} - -bool8 CheckLeadMonCute(void) -{ - if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_CUTE) < 200) - { - return FALSE; - } - return TRUE; -} - -bool8 CheckLeadMonSmart(void) -{ - if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SMART) < 200) - { - return FALSE; - } - return TRUE; -} - -bool8 CheckLeadMonTough(void) -{ - if (GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_TOUGH) < 200) - { - return FALSE; - } - return TRUE; -} - -void IsGrassTypeInParty(void) -{ - u8 i; - u16 species; - struct Pokemon *pokemon; - for (i=0; i> 1 != 1) - { - gUnknown_0203925C |= 0x02; - CreateVerticalScrollIndicators(0, 0x2c, 0x08); - } -} - -void sub_810F2B4(void) -{ - if (!(gUnknown_0203925C & 0x01)) - { - gUnknown_0203925C |= 0x01; - CreateVerticalScrollIndicators(1, 0x2c, 0x58); - } -} - -void GlassWorkshopUpdateScrollIndicators(u8 newPos, u8 maxItems) -{ - if (newPos == 0) - { - gUnknown_0203925C ^= 0x02; - DestroyVerticalScrollIndicator(0); - } - else - { - sub_810F290(); - } - if (newPos + maxItems < gUnknown_0203925A) - { - sub_810F2B4(); - } - else if (newPos + maxItems == gUnknown_0203925A) - { - gUnknown_0203925C ^= 0x01; - DestroyVerticalScrollIndicator(1); - } -} - -void SpawnCameraDummy(void) -{ - u8 mapObjectId = SpawnSpecialFieldObjectParametrized(7, 8, 0x7f, gSaveBlock1.pos.x + 7, gSaveBlock1.pos.y + 7, 3); - gMapObjects[mapObjectId].mapobj_bit_13 = 1; - CameraObjectSetFollowedObjectId(gMapObjects[mapObjectId].spriteId); -} - -void RemoveCameraDummy(void) -{ - CameraObjectSetFollowedObjectId(GetPlayerAvatarObjectId()); - RemoveFieldObjectByLocalIdAndMap(0x7f, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); -} - -u8 GetPokeblockNameByMonNature(void) -{ - return sub_810CB68(GetNature(&gPlayerParty[GetLeadMonIndex()]), gStringVar1); -} - -void GetSecretBaseNearbyMapName(void) -{ - GetMapSectionName(gStringVar1, VarGet(VAR_SECRET_BASE_MAP), 0); -} - -u16 sub_810F404(void) -{ - return GetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK); -} - -void sub_810F414(void) -{ - sub_8135FF4(gStringVar1); -} - -const u8 gUnknown_083F83E0[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6}; -const u8 gUnknown_083F83EC[] = {0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5}; -const u8 gUnknown_083F83F8[] = {3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5}; - -u8 sub_810F424(void) -{ - u32 v0 = gSaveBlock1.easyChatPairs[0].unk0_0 + gSaveBlock1.easyChatPairs[0].unk2 + gUnknown_083F83E0[gSpecialVar_0x8004]; - if (GetPriceReduction(2)) - { - return gUnknown_083F83F8[v0 % 12]; - } - return gUnknown_083F83EC[v0 % 12]; -} - -bool8 sub_810F488(void) -{ - u16 *specVar = &gSpecialVar_0x8004; - u16 flag = 0x277; - *specVar = flag; - if (!FlagGet(flag)) - { - return FALSE; - } - return TRUE; -} - -bool8 sub_810F4B0(void) -{ - u16 *specVar = &gSpecialVar_0x8004; - u16 flag = 0x278; - *specVar = flag; - if (!FlagGet(flag)) - { - return FALSE; - } - return TRUE; -} - -bool8 sub_810F4D4(void) -{ - u16 *specVar = &gSpecialVar_0x8004; - u16 flag = 0x279; - *specVar = flag; - if (!FlagGet(flag)) - { - return FALSE; - } - return TRUE; -} - -bool8 sub_810F4FC(void) -{ - u16 *specVar = &gSpecialVar_0x8004; - u16 flag = 0x27a; - *specVar = flag; - if (!FlagGet(flag)) - { - return FALSE; - } - return TRUE; -} - -bool8 LeadMonHasEffortRibbon(void) -{ - return GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_EFFORT_RIBBON, NULL); -} - -void GivLeadMonEffortRibbon(void) -{ - bool8 ribbonSet; - IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); - FlagSet(SYS_RIBBON_GET); - ribbonSet = TRUE; - SetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_EFFORT_RIBBON, &ribbonSet); -} - -bool8 GetLeadMonEVCount(void) -{ - if (GetMonEVCount(&gPlayerParty[GetLeadMonIndex()]) >= 510) - { - return TRUE; - } - return FALSE; -} - -u8 sub_810F5BC(void) -{ - if (!FlagGet(0xc7) && gSaveBlock1.location.mapGroup == MAP_GROUP_RUSTURF_TUNNEL && gSaveBlock1.location.mapNum == MAP_ID_RUSTURF_TUNNEL) - { - if (FlagGet(0x3a3)) - { - VarSet(VAR_0x409a, 4); - return TRUE; - } - else if (FlagGet(0x3a4)) - { - VarSet(VAR_0x409a, 5); - return TRUE; - } - } - return FALSE; -} - -void SetShoalItemFlag(u16 v0) -{ - FlagSet(0x85f); -} - -void PutZigzagoonInPlayerParty(void) -{ - u16 monData; - CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, 0x20, FALSE, 0, FALSE, 0); - monData = TRUE; - SetMonData(&gPlayerParty[0], MON_DATA_ALT_ABILITY, (u8 *)&monData); - monData = MOVE_TACKLE; - SetMonData(&gPlayerParty[0], MON_DATA_MOVE1, (u8 *)&monData); - monData = MOVE_NONE; - SetMonData(&gPlayerParty[0], MON_DATA_MOVE2, (u8 *)&monData); - SetMonData(&gPlayerParty[0], MON_DATA_MOVE3, (u8 *)&monData); - SetMonData(&gPlayerParty[0], MON_DATA_MOVE4, (u8 *)&monData); -} - -bool8 IsStarterInParty(void) -{ - u8 i; - u16 starter = GetStarterPokemon(VarGet(VAR_FIRST_POKE)); - u8 partyCount = CalculatePlayerPartyCount(); - for (i=0; idata[1]++; - if ((task->data[1] % task->data[5]) == 0) - { - task->data[1] = 0; - task->data[2]++; - if (task->data[3] == 0) - { - task->data[0] = -task->data[0]; - task->data[4] = -task->data[4]; - SetCameraPanning(task->data[0], task->data[4]); - if (task->data[2] == 8) - { - sub_810F814(taskId); - InstallCameraPanAheadCallback(); - } - } - } -} - -static void sub_810F814(u8 taskId) -{ - DestroyTask(taskId); - EnableBothScriptContexts(); -} - -bool8 sub_810F828(void) -{ - return FlagGet(0x2b8); -} - -void SetRoute119Weather(void) -{ - if (is_light_level_1_2_3_5_or_6(get_map_light_from_warp0()) != TRUE) - { - SetSav1Weather(0x14); - } -} - -void SetRoute123Weather(void) -{ - if (is_light_level_1_2_3_5_or_6(get_map_light_from_warp0()) != TRUE) - { - SetSav1Weather(0x15); - } -} - -u8 GetLeadMonIndex(void) -{ - u8 i; - u8 partyCount = CalculatePlayerPartyCount(); - for (i=0; i= 7) - { - return 0; - } - else if (gLocalTime.days < 0) - { - return 8; - } - return 7 - (gLocalTime.days - var40c2); -} - -u16 sub_810F950(void) -{ - VarSet(VAR_0x40C2, gLocalTime.days); - return gLocalTime.days; -} - -bool8 sub_810F96C(void) -{ - GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_OT_NAME, gStringVar1); - if (!StringCompareWithoutExtCtrlCodes(gSaveBlock2.playerName, gStringVar1)) - { - return FALSE; - } - return TRUE; -} - -void sub_810F9AC(void) -{ - if (gScriptResult >= 10000) - { - sub_80BF088(0, gScriptResult); - } - else if (gScriptResult >= 1000) - { - gStringVar1[0] = CHAR_0; - ConvertIntToDecimalStringN(gStringVar1 + 1, gScriptResult, 0, sub_80BF0B8(gScriptResult)); - } - else if (gScriptResult >= 100) - { - gStringVar1[0] = CHAR_0; - gStringVar1[1] = CHAR_0; - ConvertIntToDecimalStringN(gStringVar1 + 2, gScriptResult, 0, sub_80BF0B8(gScriptResult)); - } - else if (gScriptResult >= 10) - { - gStringVar1[0] = CHAR_0; - gStringVar1[1] = CHAR_0; - gStringVar1[2] = CHAR_0; - ConvertIntToDecimalStringN(gStringVar1 + 3, gScriptResult, 0, sub_80BF0B8(gScriptResult)); - } - else - { - gStringVar1[0] = CHAR_0; - gStringVar1[1] = CHAR_0; - gStringVar1[2] = CHAR_0; - gStringVar1[3] = CHAR_0; - ConvertIntToDecimalStringN(gStringVar1 + 4, gScriptResult, 0, sub_80BF0B8(gScriptResult)); - } -} - -const u8 gUnknown_083F8404[] = {2, 1, 2, 1}; -const u8 gUnknown_083F8408[] = {8, 9, 10, 11, 12, 13, 14, 15}; -const u8 gUnknown_083F8410[] = {8, 13, 14, 11, 10, 12, 15, 9}; - -bool8 sub_810FF30(void); -void sub_810FCE8(void); -void sub_810FF48(void); -void sub_810FD80(void); -u16 sub_810FCB0(void); -int sub_810FB9C(void); - -void ResetFanClub(void) -{ - gSaveBlock1.vars[0x41] = 0; - gSaveBlock1.vars[0x42] = 0; -} - -void sub_810FA74(void) -{ - if (sub_810FF30()) - { - sub_810FCE8(); - gSaveBlock1.vars[0x42] = gSaveBlock2.playTimeHours; - } -} - -void sub_810FAA0(void) -{ - if (!((gSaveBlock1.vars[0x41] >> 7) & 1)) - { - sub_810FF48(); - sub_810FD80(); - gSaveBlock1.vars[0x42] = gSaveBlock2.playTimeHours; - FlagReset(0x315); - FlagReset(0x316); - FlagReset(0x317); - FlagReset(0x318); - VarSet(VAR_0x4095, 1); - } -} - -u8 sub_810FB10(u8 a0) -{ - if (VarGet(VAR_0x4095) == 2) - { - if ((gSaveBlock1.vars[0x41] & 0x7f) + gUnknown_083F8404[a0] >= 20) - { - if (sub_810FCB0() < 3) - { - sub_810FB9C(); - gSaveBlock1.vars[0x41] &= 0xff80; - } - else - { - gSaveBlock1.vars[0x41] = (gSaveBlock1.vars[0x41] & 0xff80) | 20; - } - } - else - { - gSaveBlock1.vars[0x41] += gUnknown_083F8404[a0]; - } - } - return gSaveBlock1.vars[0x41] & 0x7f; -} - -int sub_810FB9C(void) -{ - u8 i; - int retval = 0; - for (i=0; i<8; i++) - { - if (!((gSaveBlock1.vars[0x41] >> gUnknown_083F8408[i]) & 0x01)) - { - retval = i; - if (Random() & 1) - { - gSaveBlock1.vars[0x41] |= (1 << gUnknown_083F8408[i]); - return retval; - } - } - } - gSaveBlock1.vars[0x41] |= (1 << gUnknown_083F8408[retval]); - return retval; -} - -int sub_810FC18(void) -{ - u8 i; - int retval = 0; - if (sub_810FCB0() == TRUE) - { - return 0; - } - for (i=0; i<8; i++) - { - if ((gSaveBlock1.vars[0x41] >> gUnknown_083F8410[i]) & 1) - { - retval = i; - if (Random() & 1) - { - gSaveBlock1.vars[0x41] ^= (1 << gUnknown_083F8410[i]); - return retval; - } - } - } - if ((gSaveBlock1.vars[0x41] >> gUnknown_083F8410[retval]) & 1) - { - gSaveBlock1.vars[0x41] ^= (1 << gUnknown_083F8410[retval]); - } - return retval; -} - -u16 sub_810FCB0(void) -{ - u8 i; - u8 retval = 0; - for (i=0; i<8; i++) - { - if ((gSaveBlock1.vars[0x41] >> (i + 8)) & 1) - { - retval ++; - } - } - return retval; -} - -void sub_810FCE8(void) -{ - u8 i = 0; - if (gSaveBlock2.playTimeHours < 999) - { - while (1) - { - if (sub_810FCB0() < 5) - { - gSaveBlock1.vars[0x42] = gSaveBlock2.playTimeHours; - break; - } - else if (i == 8) - { - break; - } - else if (gSaveBlock2.playTimeHours - gSaveBlock1.vars[0x42] < 12) - { - return; - } - sub_810FC18(); - gSaveBlock1.vars[0x42] += 12; - i++; - } - } -} - -bool8 sub_810FD60(void) -{ - return (gSaveBlock1.vars[0x41] >> gSpecialVar_0x8004) & 0x01; -} - -void sub_810FD80(void) -{ - gSaveBlock1.vars[0x41] |= 0x2000; - gSaveBlock1.vars[0x41] |= 0x100; - gSaveBlock1.vars[0x41] |= 0x400; -} - -void sub_810FE1C(void *, u8, u8); - -void sub_810FDAC(void) -{ - u8 a = 0; - u8 b = 0; - switch (gSpecialVar_0x8004) - { - case 8: - break; - case 9: - break; - case 10: - a = 0; - b = 3; - break; - case 11: - a = 0; - b = 1; - break; - case 12: - a = 1; - b = 0; - break; - case 13: - a = 0; - b = 4; - break; - case 14: - a = 1; - b = 5; - break; - case 15: - break; - } - sub_810FE1C(gSaveBlock1.linkBattleRecords, a, b); -} - -void sub_810FE1C(void *linkRecords, u8 a, u8 b) -{ - u8 *curRecord = (linkRecords + 16 * a); - if (*curRecord == EOS) - { - switch (b) - { - case 0: - StringCopy(gStringVar1, gOtherText_Wallace); - break; - case 1: - StringCopy(gStringVar1, gOtherText_Steven); - break; - case 2: - StringCopy(gStringVar1, gOtherText_Brawly); - break; - case 3: - StringCopy(gStringVar1, gOtherText_Winona); - break; - case 4: - StringCopy(gStringVar1, gOtherText_Phoebe); - break; - case 5: - StringCopy(gStringVar1, gOtherText_Glacia); - break; - default: - StringCopy(gStringVar1, gOtherText_Wallace); - break; - } - } - else - { - StringCopyN(gStringVar1, curRecord, 7); - gStringVar1[7] = EOS; - if (gStringVar1[0] == 0xfc && gStringVar1[1] == 0x15) - { - ConvertInternationalString(gStringVar1, 1); - } - } -} - -void sub_810FEFC(void) -{ - if (VarGet(VAR_0x4095) == 2) - { - sub_810FA74(); - if (gBattleOutcome == 1) - { - sub_810FB9C(); - } - else - { - sub_810FC18(); - } - } -} - -bool8 sub_810FF30(void) -{ - return (gSaveBlock1.vars[0x41] >> 7) & 0x01; -} - -void sub_810FF48(void) -{ - gSaveBlock1.vars[0x41] |= 0x80; -} - -u8 sub_810FF60(void) -{ - return sub_810FB10(gSpecialVar_0x8004); -} diff --git a/src/field_tasks.c b/src/field_tasks.c deleted file mode 100644 index caf2ce6b9..000000000 --- a/src/field_tasks.c +++ /dev/null @@ -1,859 +0,0 @@ -// -// Created by scott on 6/22/2017. -// - -#include "global.h" -#include "task.h" -#include "main.h" -#include "vars.h" -#include "bike.h" -#include "item.h" -#include "items.h" -#include "event_data.h" -#include "rom4.h" -#include "clock.h" -#include "script.h" -#include "field_special_scene.h" -#include "field_effect_helpers.h" -#include "secret_base.h" -#include "metatile_behavior.h" -#include "fieldmap.h" -#include "field_player_avatar.h" -#include "field_camera.h" -#include "songs.h" -#include "sound.h" -#include "field_tasks.h" - -void DummyPerStepCallback(u8); -void PerStepCallback_8069F64(u8); -void PerStepCallback_8069AA0(u8); -void PerStepCallback_8069864(u8); -void PerStepCallback_8069DD4(u8); -void PerStepCallback_806A07C(u8); - -void (*const gUnknown_08376364[])(u8) = { - DummyPerStepCallback, - PerStepCallback_8069F64, - PerStepCallback_8069AA0, - PerStepCallback_8069864, - PerStepCallback_8069DD4, - EndTruckSequence, - sub_80BCF1C, - PerStepCallback_806A07C -}; - -void Task_RunPerStepCallback(u8 taskId) -{ - int idx = gTasks[taskId].data[0]; - gUnknown_08376364[idx](taskId); -} - -static void RunTimeBasedEvents(s16 *taskData) -{ - switch (*taskData) - { - case 0: - if (gMain.vblankCounter1 & 0x1000) - { - DoTimeBasedEvents(); - (*taskData)++; - } - break; - case 1: - if (!(gMain.vblankCounter1 & 0x1000)) - { - (*taskData)--; - } - break; - } -} - -void Task_RunTimeBasedEvents(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - if (!ScriptContext2_IsEnabled()) - { - RunTimeBasedEvents(taskData); - sub_80540D0(taskData + 1, taskData + 2); - } -} - -void Task_MuddySlope(u8); - -void SetUpFieldTasks(void) -{ - if (!FuncIsActiveTask(Task_RunPerStepCallback)) - { - u8 taskId = CreateTask(Task_RunPerStepCallback, 0x50); - gTasks[taskId].data[0] = 0; - } - if (!FuncIsActiveTask(Task_MuddySlope)) - { - CreateTask(Task_MuddySlope, 0x50); - } - if (!FuncIsActiveTask(Task_RunTimeBasedEvents)) - { - CreateTask(Task_RunTimeBasedEvents, 0x50); - } -} - -void ActivatePerStepCallback(u8 callback) -{ - s16 *dataPointer; - s16 *dataStart; - s16 zero; - u8 taskId = FindTaskIdByFunc(Task_RunPerStepCallback); - if (taskId != 0xff) - { - dataStart = gTasks[taskId].data; - zero = 0; - dataPointer = &dataStart[15]; - do - { - *dataPointer-- = zero; - } while ((int)dataPointer >= (int)dataStart); - if (callback >= ARRAY_COUNT(gUnknown_08376364)) - { - *dataStart = 0; - } - else - { - *dataStart = callback; - } - } -} - -void ResetFieldTasksArgs(void) -{ - u8 taskId; - s16 *taskData; - taskId = FindTaskIdByFunc(Task_RunPerStepCallback); - if (taskId != 0xff) - { - taskData = gTasks[taskId].data; - } - taskId = FindTaskIdByFunc(Task_RunTimeBasedEvents); - if (taskId != 0xff) - { - taskData = gTasks[taskId].data; - taskData[1] = 0; - taskData[2] = 0; - } -} - -const struct MetatileOffset gUnknown_08376384[][2] = { - {{ 0, 0,0x259}, { 0, 1,0x261}}, - {{ 0, -1,0x259}, { 0, 0,0x261}}, - {{ 0, 0,0x252}, { 1, 0,0x253}}, - {{ -1, 0,0x252}, { 0, 0,0x253}} -}; - -const struct MetatileOffset gUnknown_083763A4[][2] = { - {{ 0, 0,0x25A}, { 0, 1,0x262}}, - {{ 0, -1,0x25A}, { 0, 0,0x262}}, - {{ 0, 0,0x254}, { 1, 0,0x255}}, - {{ -1, 0,0x254}, { 0, 0,0x255}} -}; - -const struct MetatileOffset gUnknown_083763C4[][2] = { - {{ 0, 0,0x258}, { 0, 1,0x260}}, - {{ 0, -1,0x258}, { 0, 0,0x260}}, - {{ 0, 0,0x250}, { 1, 0,0x251}}, - {{ -1, 0,0x250}, { 0, 0,0x251}} -}; - -void DummyPerStepCallback(u8 taskId) {} - -const struct MetatileOffset *sub_80695E0(const struct MetatileOffset a0[][2], s8 a1) -{ - if (sub_80576A0(a1)) - { - return a0[0]; - } - else if (sub_80576B4(a1)) - { - return a0[1]; - } - else if (sub_80576C8(a1)) - { - return a0[2]; - } - else if (sub_80576DC(a1)) - { - return a0[3]; - } - else - { - return NULL; - } -} - -#ifdef NONMATCHING -void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 flag) -{ - const struct MetatileOffset *offsetData = sub_80695E0(offsets, MapGridGetMetatileBehaviorAt(x, y)); - const struct MetatileOffset *offsetData2 = offsetData; - if (offsetData != NULL) - { - MapGridSetMetatileIdAt(x + offsetData[0].x, y + offsetData[0].y, offsetData[0].tileId); - if (flag) - { - CurrentMapDrawMetatileAt(x + offsetData[0].x, y + offsetData[0].y); - } - MapGridSetMetatileIdAt(x + offsetData2[1].x, y + offsetData2[1].y, offsetData2[1].tileId); - if (flag) - { - CurrentMapDrawMetatileAt(x + offsetData2[1].x, y + offsetData2[1].y); - } - } -} -#else -__attribute__((naked)) -void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 flag) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r8\n" - "\tpush {r7}\n" - "\tadds r5, r0, 0\n" - "\tmov r8, r3\n" - "\tlsls r1, 16\n" - "\tasrs r6, r1, 16\n" - "\tlsls r2, 16\n" - "\tasrs r7, r2, 16\n" - "\tadds r0, r6, 0\n" - "\tadds r1, r7, 0\n" - "\tbl MapGridGetMetatileBehaviorAt\n" - "\tadds r1, r0, 0\n" - "\tlsls r1, 16\n" - "\tlsrs r1, 16\n" - "\tadds r0, r5, 0\n" - "\tbl sub_80695E0\n" - "\tadds r4, r0, 0\n" - "\tadds r5, r4, 0\n" - "\tcmp r4, 0\n" - "\tbeq _080696B6\n" - "\tmovs r0, 0\n" - "\tldrsb r0, [r4, r0]\n" - "\tadds r0, r6, r0\n" - "\tmovs r1, 0x1\n" - "\tldrsb r1, [r4, r1]\n" - "\tadds r1, r7, r1\n" - "\tldrh r2, [r4, 0x2]\n" - "\tbl MapGridSetMetatileIdAt\n" - "\tmov r0, r8\n" - "\tcmp r0, 0\n" - "\tbeq _0806968E\n" - "\tmovs r0, 0\n" - "\tldrsb r0, [r4, r0]\n" - "\tadds r0, r6, r0\n" - "\tmovs r1, 0x1\n" - "\tldrsb r1, [r4, r1]\n" - "\tadds r1, r7, r1\n" - "\tbl CurrentMapDrawMetatileAt\n" - "_0806968E:\n" - "\tmovs r0, 0x4\n" - "\tldrsb r0, [r5, r0]\n" - "\tadds r0, r6, r0\n" - "\tmovs r1, 0x5\n" - "\tldrsb r1, [r5, r1]\n" - "\tadds r1, r7, r1\n" - "\tldrh r2, [r5, 0x6]\n" - "\tbl MapGridSetMetatileIdAt\n" - "\tmov r0, r8\n" - "\tcmp r0, 0\n" - "\tbeq _080696B6\n" - "\tmovs r0, 0x4\n" - "\tldrsb r0, [r5, r0]\n" - "\tadds r0, r6, r0\n" - "\tmovs r1, 0x5\n" - "\tldrsb r1, [r5, r1]\n" - "\tadds r1, r7, r1\n" - "\tbl CurrentMapDrawMetatileAt\n" - "_080696B6:\n" - "\tpop {r3}\n" - "\tmov r8, r3\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0"); -} -#endif - -void sub_80696C0(s16 x, s16 y, bool32 flag) -{ - sub_8069638(gUnknown_08376384, x, y, flag); -} - -void sub_80696E4(s16 x, s16 y, bool32 flag) -{ - sub_8069638(gUnknown_083763A4, x, y, flag); -} - -void sub_8069708(s16 x, s16 y, bool32 flag) -{ - sub_8069638(gUnknown_083763C4, x, y, flag); -} - -bool32 sub_806972C(s16 x1, s16 y1, s16 x2, s16 y2) -{ - s8 metatileBehavior = MapGridGetMetatileBehaviorAt(x2, y2); - if (sub_80576A0(metatileBehavior)) - { - if (y1 > y2) - { - return FALSE; - } - } - else if (sub_80576B4(metatileBehavior)) - { - if (y1 < y2) - { - return FALSE; - } - } - else if (sub_80576C8(metatileBehavior)) - { - if (x1 > x2) - { - return FALSE; - } - } - else if (sub_80576DC(metatileBehavior)) - { - if (x1 < x2) - { - return FALSE; - } - } - return TRUE; -} - -bool32 sub_80697C8(s16 x1, s16 y1, s16 x2, s16 y2) -{ - s8 metatileBehavior = MapGridGetMetatileBehaviorAt(x1, y1); - if (sub_80576A0(metatileBehavior)) - { - if (y1 < y2) - { - return FALSE; - } - } - else if (sub_80576B4(metatileBehavior)) - { - if (y1 > y2) - { - return FALSE; - } - } - else if (sub_80576C8(metatileBehavior)) - { - if (x1 < x2) - { - return FALSE; - } - } - else if (sub_80576DC(metatileBehavior)) - { - if (x1 > x2) - { - return FALSE; - } - } - return TRUE; -} - -void PerStepCallback_8069864(u8 taskId) -{ - s16 *data; - s16 x, y; - data = gTasks[taskId].data; - PlayerGetDestCoords(&x, &y); - switch (data[1]) - { - case 0: - data[2] = x; - data[3] = y; - sub_80696E4(x, y, TRUE); - data[1] = 1; - break; - case 1: - if (x != data[2] || y != data[3]) - { - if (sub_806972C(x, y, data[2], data[3])) - { - sub_80696C0(data[2], data[3], TRUE); - sub_8069708(data[2], data[3], FALSE); - data[4] = data[2]; - data[5] = data[3]; - data[1] = 2; - data[6] = 8; - } - else - { - data[4] = -1; - data[5] = -1; - } - if (sub_80697C8(x, y, data[2], data[3])) - { - sub_80696C0(x, y, TRUE); - data[1] = 2; - data[6] = 8; - } - data[2] = x; - data[3] = y; - if (MetatileBehavior_IsPacifidlogLog(MapGridGetMetatileBehaviorAt(x, y))) - { - PlaySE(SE_MIZU); - } - } - break; - case 2: - if ((--data[6]) == 0) - { - sub_80696E4(x, y, TRUE); - if (data[4] != -1 && data[5] != -1) - { - sub_8069708(data[4], data[5], TRUE); - } - data[1] = 1; - } - break; - } -} - -void sub_80699D8(s16 x, s16 y) -{ - u8 z = PlayerGetZCoord(); - if (!(z & 0x01)) - { - switch (MapGridGetMetatileIdAt(x, y)) - { - case 0x24e: - MapGridSetMetatileIdAt(x, y, 0x24f); - break; - case 0x256: - MapGridSetMetatileIdAt(x, y, 0x257); - break; - } - } -} - -void sub_8069A3C(s16 x, s16 y) -{ - u8 z = PlayerGetZCoord(); - if (!(z & 0x01)) - { - switch (MapGridGetMetatileIdAt(x, y)) - { - case 0x24f: - MapGridSetMetatileIdAt(x, y, 0x24e); - break; - case 0x257: - MapGridSetMetatileIdAt(x, y, 0x256); - break; - } - } -} - -void PerStepCallback_8069AA0(u8 taskId) -{ - bool8 isFortreeBridgeCur; - bool8 isFortreeBridgePrev; - u8 z, flag; - s16 x, y, x2, y2; - s16 *data = gTasks[taskId].data; - PlayerGetDestCoords(&x, &y); - switch (data[1]) - { - default: - break; - case 0: - data[2] = x; - data[3] = y; - if (MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y))) - { - sub_80699D8(x, y); - CurrentMapDrawMetatileAt(x, y); - } - data[1] = 1; - break; - case 1: - x2 = data[2]; - y2 = data[3]; - if (x == x2 && y == y2) - { - break; - } - isFortreeBridgeCur = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y)); - isFortreeBridgePrev = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x2, y2)); - z = PlayerGetZCoord(); - flag = 0; - if ((u8)(z & 1) == 0) - { - flag = 1; - } - if (flag && (isFortreeBridgeCur == 1 || isFortreeBridgePrev == 1)) - { - PlaySE(SE_HASHI); - } - if (isFortreeBridgePrev) - { - sub_8069A3C(x2, y2); - CurrentMapDrawMetatileAt(x2, y2); - sub_80699D8(x, y); - CurrentMapDrawMetatileAt(x, y); - } - data[4] = x2; - data[5] = y2; - data[2] = x; - data[3] = y; - if (!isFortreeBridgePrev) - { - break; - } - data[6] = 16; - data[1] = 2; - // fallthrough - case 2: - data[6]--; - x2 = data[4]; - y2 = data[5]; - switch (data[6] % 7) - { - case 0: - CurrentMapDrawMetatileAt(x2, y2); - case 1: - case 2: - case 3: - break; - case 4: - sub_80699D8(x2, y2); - CurrentMapDrawMetatileAt(x2, y2); - sub_8069A3C(x2, y2); - case 5: - case 6: - case 7: - break; - } - if (data[6] == 0) - { - data[1] = 1; - } - break; - } -} - -const u16 gUnknown_083763E4[] = { - 0, - 0, - 0, - 0, - 0, - 0, - VAR_0x4001, - VAR_0x4002, - VAR_0x4003, - VAR_0x4004, - 0, - 0, - VAR_0x4005, - VAR_0x4006, - VAR_0x4007, - 0, - 0, - VAR_0x4008, - VAR_0x4009, - VAR_0x400A, - 0, - 0, - 0, - 0, - 0, - 0 -}; - -bool32 sub_8069CB8(s16 x, s16 y) -{ - if ((u16)(x - 3) < 11 && (u16)(y - 6) < 14 && gUnknown_083763E4[y]) - { - return TRUE; - } - return FALSE; -} - -void sub_8069CFC(s16 x, s16 y) -{ - if (sub_8069CB8(x, y)) - { - *GetVarPointer(gUnknown_083763E4[y]) |= (1 << (x - 3)); - } -} - -bool32 sub_8069D34(s16 x, s16 y) -{ - u32 var; - if (!sub_8069CB8(x, y)) - { - return FALSE; - } - var = VarGet(gUnknown_083763E4[y]) << 16; - if (((1 << 16) << (x - 3)) & var) - { - return TRUE; - } - return FALSE; -} - -void sub_8069D78(void) -{ - s32 x, y; - s32 width = gMapHeader.mapData->width; - s32 height = gMapHeader.mapData->height; - for (x=0; x> 8; - } - v9 = v4; - v10 = 0x1f00 - v4; - if ((0x1f00 - v4) < 0) - { - v10 += 0xf; - } - v11 = v10 >> 4; - if (v2 <= 0xb) - { - for (; v6 <= 0x12; v6++) - { - v4 += v11; - dunno = v4 - v9; - if (dunno > 0) - { - v4 -= (dunno + ((u16)dunno >> 15)) >> 1; - } - v1[v6][v2] = v4 >> 8; - if (v1[v6][v2] > 0x1f) - { - v1[v6][v2] = 0x1f; - } - } - } - else - { - for (; v6 <= 0x12; v6++) - { - v4 += v11; - v1[v6][v2] = v4 >> 8; - if (v1[v6][v2] > 0x1f) - { - v1[v6][v2] = 0x1f; - } - } - } - } - } -} - -void sub_807CC24(void) -{ - if (gWeather.unknown_6C0 == gWeather.unknown_6C1) - { - gWeather.unknown_6C6 = 3; - } - else - { - if (++gWeather.unknown_6C3 >= gWeather.unknown_6C2) - { - gWeather.unknown_6C3 = 0; - if (gWeather.unknown_6C0 < gWeather.unknown_6C1) - { - gWeather.unknown_6C0++; - } - else - { - gWeather.unknown_6C0--; - } - sub_807CEBC(0, 0x20, gWeather.unknown_6C0); - } - } -} - -void sub_807CCAC(void) -{ - if (++gWeather.unknown_6CB > 1) - { - gWeather.unknown_6CA = 0; - } - switch (gWeather.unknown_6D0) - { - case 3: - case 4: - case 5: - case 11: - case 13: - if (sub_807CDC4() == 0) - { - gWeather.unknown_6C0 = 3; - gWeather.unknown_6C6 = 3; - } - break; - case 12: - if (sub_807CE24() == 0) - { - gWeather.unknown_6C0 = -6; - gWeather.unknown_6C6 = 3; - } - break; - case 6: - if (sub_807CE7C() == 0) - { - gWeather.unknown_6C0 = 0; - gWeather.unknown_6C6 = 3; - } - break; - case 7: - case 8: - case 9: - case 10: - default: - if (!gPaletteFade.active) - { - gWeather.unknown_6C0 = gWeather.unknown_6C1; - gWeather.unknown_6C6 = 3; - } - break; - } -} - -u8 sub_807CDC4(void) -{ - if (gWeather.unknown_6C7 == 0x10) - { - return 0; - } - if (++gWeather.unknown_6C7 >= 0x10) - { - sub_807CEBC(0, 0x20, 3); - gWeather.unknown_6C7 = 0x10; - return 0; - } - sub_807D1BC(0, 0x20, 3, 0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4); - return 1; -} - -u8 sub_807CE24(void) -{ - if (gWeather.unknown_6C7 == 0x10) - { - return 0; - } - if (++gWeather.unknown_6C7 >= 0x10) - { - sub_807CEBC(0, 0x20, -6); - gWeather.unknown_6C7 = 0x10; - return 0; - } - sub_807D304(-6, 0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4); - return 1; -} - -u8 sub_807CE7C(void) -{ - if (gWeather.unknown_6C7 == 0x10) - { - return 0; - } - ++gWeather.unknown_6C7; - sub_807D424(0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4); - return 1; -} - -void nullsub_39(void) -{ -} diff --git a/src/fieldmap.c b/src/fieldmap.c deleted file mode 100644 index 0e0ec246c..000000000 --- a/src/fieldmap.c +++ /dev/null @@ -1,955 +0,0 @@ -#include "global.h" -#include "fieldmap.h" -#include "palette.h" -#include "rom4.h" -#include "script.h" -#include "secret_base.h" -#include "tv.h" - -struct ConnectionFlags -{ - u8 south:1; - u8 north:1; - u8 west:1; - u8 east:1; -}; - -struct Coords32 -{ - s32 x; - s32 y; -}; - -EWRAM_DATA static u16 gUnknown_02029828[0x2800] = {0}; -EWRAM_DATA struct MapHeader gMapHeader = {0}; -EWRAM_DATA struct Camera gUnknown_0202E844 = {0}; -EWRAM_DATA static struct ConnectionFlags gUnknown_0202E850 = {0}; - -struct BackupMapData gUnknown_03004870; - -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); -} - -void not_trainer_hill_battle_pyramid(void) -{ - mapheader_copy_mapdata_with_padding(&gMapHeader); - sub_80BB970(gMapHeader.events); - mapheader_run_script_with_tag_x1(); -} - -void sub_8055FC0(void) -{ - mapheader_copy_mapdata_with_padding(&gMapHeader); - sub_80BBCCC(0); - sub_80BB970(gMapHeader.events); - sub_8056670(); - mapheader_run_script_with_tag_x1(); - UpdateTVScreensOnMap(gUnknown_03004870.width, gUnknown_03004870.height); -} - -void mapheader_copy_mapdata_with_padding(struct MapHeader *mapHeader) -{ - struct MapData *mapData; - int width; - int height; - mapData = mapHeader->mapData; - CpuFastFill16(0x03ff, gUnknown_02029828, sizeof(gUnknown_02029828)); - gUnknown_03004870.map = gUnknown_02029828; - width = mapData->width + 15; - gUnknown_03004870.width = width; - height = mapData->height + 14; - gUnknown_03004870.height = height; - if (width * height <= 0x2800) - { - map_copy_with_padding(mapData->map, mapData->width, mapData->height); - sub_80560AC(mapHeader); - } -} - -void map_copy_with_padding(u16 *map, u16 width, u16 height) -{ - u16 *dest; - int y; - dest = gUnknown_03004870.map; - dest += gUnknown_03004870.width * 7 + 7; - for (y = 0; y < height; y++) - { - CpuCopy16(map, dest, width * 2); - dest += width + 0xf; - map += width; - } -} - -void sub_80560AC(struct MapHeader *mapHeader) -{ - int i; - struct MapConnection *connection; - struct MapHeader *cMap; - u32 offset; - int count; - count = mapHeader->connections->count; - connection = mapHeader->connections->connections; - gUnknown_0202E850 = sDummyConnectionFlags; - for (i = 0; i < count; i++, connection++) - { - cMap = mapconnection_get_mapheader(connection); - offset = connection->offset; - switch (connection->direction) - { - case CONNECTION_SOUTH: - fillSouthConnection(mapHeader, cMap, offset); - gUnknown_0202E850.south = 1; - break; - case CONNECTION_NORTH: - fillNorthConnection(mapHeader, cMap, offset); - gUnknown_0202E850.north = 1; - break; - case CONNECTION_WEST: - fillWestConnection(mapHeader, cMap, offset); - gUnknown_0202E850.west = 1; - break; - case CONNECTION_EAST: - fillEastConnection(mapHeader, cMap, offset); - gUnknown_0202E850.east = 1; - break; - } - } -} - -void sub_8056134(int x, int y, struct MapHeader *mapHeader, int x2, int y2, int width, int height) -{ - int i; - u16 *src; - u16 *dest; - int mapWidth; - - mapWidth = mapHeader->mapData->width; - src = &mapHeader->mapData->map[mapWidth * y2 + x2]; - dest = &gUnknown_03004870.map[gUnknown_03004870.width * y + x]; - - for (i = 0; i < height; i++) - { - CpuCopy16(src, dest, width * 2); - dest += gUnknown_03004870.width; - src += mapWidth; - } -} - -void fillSouthConnection(struct MapHeader *mapHeader, struct MapHeader *connectedMapHeader, s32 offset) -{ - int x, y; - int x2; - int width; - int cWidth; - - if (connectedMapHeader) - { - cWidth = connectedMapHeader->mapData->width; - x = offset + 7; - y = mapHeader->mapData->height + 7; - if (x < 0) - { - x2 = -x; - x += cWidth; - if (x < gUnknown_03004870.width) - { - width = x; - } - else - { - width = gUnknown_03004870.width; - } - x = 0; - } - else - { - x2 = 0; - if (x + cWidth < gUnknown_03004870.width) - { - width = cWidth; - } - else - { - width = gUnknown_03004870.width - x; - } - } - sub_8056134( - x, y, - connectedMapHeader, - x2, /*y2*/ 0, - width, /*height*/ 7); - } -} - -void fillNorthConnection(struct MapHeader *mapHeader, struct MapHeader *connectedMapHeader, s32 offset) -{ - int x; - int x2, y2; - int width; - int cWidth, cHeight; - - if (connectedMapHeader) - { - cWidth = connectedMapHeader->mapData->width; - cHeight = connectedMapHeader->mapData->height; - x = offset + 7; - y2 = cHeight - 7; - if (x < 0) - { - x2 = -x; - x += cWidth; - if (x < gUnknown_03004870.width) - { - width = x; - } - else - { - width = gUnknown_03004870.width; - } - x = 0; - } - else - { - x2 = 0; - if (x + cWidth < gUnknown_03004870.width) - { - width = cWidth; - } - else - { - width = gUnknown_03004870.width - x; - } - } - - sub_8056134( - x, /*y*/ 0, - connectedMapHeader, - x2, y2, - width, /*height*/ 7); - - } -} - - -void fillWestConnection(struct MapHeader *mapHeader, struct MapHeader *connectedMapHeader, s32 offset) -{ - int y; - int x2, y2; - int height; - int cWidth, cHeight; - if (connectedMapHeader) - { - cWidth = connectedMapHeader->mapData->width; - cHeight = connectedMapHeader->mapData->height; - y = offset + 7; - x2 = cWidth - 7; - if (y < 0) - { - y2 = -y; - if (y + cHeight < gUnknown_03004870.height) - { - height = y + cHeight; - } - else - { - height = gUnknown_03004870.height; - } - y = 0; - } - else - { - y2 = 0; - if (y + cHeight < gUnknown_03004870.height) - { - height = cHeight; - } - else - { - height = gUnknown_03004870.height - y; - } - } - - sub_8056134( - /*x*/ 0, y, - connectedMapHeader, - x2, y2, - /*width*/ 7, height); - } -} - -void fillEastConnection(struct MapHeader *mapHeader, struct MapHeader *connectedMapHeader, s32 offset) -{ - int x, y; - int y2; - int height; - int cHeight; - if (connectedMapHeader) - { - cHeight = connectedMapHeader->mapData->height; - x = mapHeader->mapData->width + 7; - y = offset + 7; - if (y < 0) - { - y2 = -y; - if (y + cHeight < gUnknown_03004870.height) - { - height = y + cHeight; - } - else - { - height = gUnknown_03004870.height; - } - y = 0; - } - else - { - y2 = 0; - if (y + cHeight < gUnknown_03004870.height) - { - height = cHeight; - } - else - { - height = gUnknown_03004870.height - y; - } - } - - sub_8056134( - x, y, - connectedMapHeader, - /*x2*/ 0, y2, - /*width*/ 8, height); - } -} - -union Block -{ - struct - { - u16 block:10; - u16 collision:2; - u16 elevation:4; - } block; - u16 value; -}; - -u8 MapGridGetZCoordAt(int x, int y) -{ - u16 block; - int i; - u16 *border; - - if (x >= 0 && x < gUnknown_03004870.width - && y >= 0 && y < gUnknown_03004870.height) - { - block = gUnknown_03004870.map[x + gUnknown_03004870.width * y]; - } - else - { - border = gMapHeader.mapData->border; - i = (x + 1) & 1; - i += ((y + 1) & 1) * 2; - block = gMapHeader.mapData->border[i]; - block |= 0xc00; - } - if (block == 0x3ff) - { - return 0; - } - return block >> 12; -} - -u8 MapGridIsImpassableAt(int x, int y) -{ - u16 block; - int i; - u16 *border; - - if (x >= 0 && x < gUnknown_03004870.width - && y >= 0 && y < gUnknown_03004870.height) - { - block = gUnknown_03004870.map[x + gUnknown_03004870.width * y]; - } - else - { - border = gMapHeader.mapData->border; - i = (x + 1) & 1; - i += ((y + 1) & 1) * 2; - block = gMapHeader.mapData->border[i]; - block |= 0xc00; - } - if (block == 0x3ff) - { - return 1; - } - return (block & 0xc00) >> 10; -} - -u32 MapGridGetMetatileIdAt(int x, int y) -{ - u16 block; - int i; - int j; - struct MapData *mapData; - u16 *border; - u16 block2; - - if (x >= 0 && x < gUnknown_03004870.width - && y >= 0 && y < gUnknown_03004870.height) - { - block = gUnknown_03004870.map[x + gUnknown_03004870.width * y]; - } - else - { - mapData = gMapHeader.mapData; - i = (x + 1) & 1; - i += ((y + 1) & 1) * 2; - block = mapData->border[i] | 0xc00; - } - if (block == 0x3ff) - { - border = gMapHeader.mapData->border; - j = (x + 1) & 1; - j += ((y + 1) & 1) * 2; - block2 = gMapHeader.mapData->border[j]; - block2 |= 0xc00; - return block2 & block; - } - return block & 0x3ff; -} - -u32 MapGridGetMetatileBehaviorAt(int x, int y) -{ - u16 metatile; - metatile = MapGridGetMetatileIdAt(x, y); - return GetBehaviorByMetatileId(metatile) & 0xff; -} - -u8 MapGridGetMetatileLayerTypeAt(int x, int y) -{ - u16 metatile; - metatile = MapGridGetMetatileIdAt(x, y); - return (GetBehaviorByMetatileId(metatile) & 0xf000) >> 12; -} - -void MapGridSetMetatileIdAt(int x, int y, u16 metatile) -{ - int i; - if (x >= 0 && x < gUnknown_03004870.width - && y >= 0 && y < gUnknown_03004870.height) - { - i = x + y * gUnknown_03004870.width; - gUnknown_03004870.map[i] = (gUnknown_03004870.map[i] & 0xf000) | (metatile & 0xfff); - } -} - -void MapGridSetMetatileEntryAt(int x, int y, u16 metatile) -{ - int i; - if (x >= 0 && x < gUnknown_03004870.width - && y >= 0 && y < gUnknown_03004870.height) - { - i = x + gUnknown_03004870.width * y; - gUnknown_03004870.map[i] = metatile; - } -} - -u32 GetBehaviorByMetatileId(u16 metatile) -{ - u16 *attributes; - if (metatile <= 0x1ff) - { - attributes = gMapHeader.mapData->primaryTileset->metatileAttributes; - return attributes[metatile]; - } - else if (metatile <= 0x3ff) - { - attributes = gMapHeader.mapData->secondaryTileset->metatileAttributes; - return attributes[metatile - 0x200]; - } - else - { - return 0xff; - } -} - -void save_serialize_map(void) -{ - int i, j; - int x, y; - u16 *mapView; - int width; - mapView = gSaveBlock1.mapView; - width = gUnknown_03004870.width; - x = gSaveBlock1.pos.x; - y = gSaveBlock1.pos.y; - for (i = y; i < y + 14; i++) - { - for (j = x; j < x + 15; j++) - { - *mapView++ = gUnknown_02029828[width * i + j]; - } - } -} - -int sub_8056618(void) -{ - u16 i; - u32 r2; - r2 = 0; - for (i = 0; i < 0x200; i++) - { - r2 |= gSaveBlock1.mapView[i]; - } - if (r2 == 0) - { - return 1; - } - return 0; -} - -void sav2_mapdata_clear(void) -{ - CpuFill16(0, gSaveBlock1.mapView, sizeof(gSaveBlock1.mapView)); -} - -void sub_8056670(void) -{ - int i, j; - int x, y; - u16 *mapView; - int width; - mapView = gSaveBlock1.mapView; - if (!sub_8056618()) - { - width = gUnknown_03004870.width; - x = gSaveBlock1.pos.x; - y = gSaveBlock1.pos.y; - for (i = y; i < y + 14; i++) - { - for (j = x; j < x + 15; j++) - { - gUnknown_02029828[width * i + j] = *mapView++; - } - } - sav2_mapdata_clear(); - } -} - -void sub_80566F0(u8 a1) -{ - u16 *mapView; - int width; - int x0, y0; - int x2, y2; - u16 *src, *dest; - int srci, desti; - int r9, r8; - int x, y; - int i, j; - mapView = gSaveBlock1.mapView; - width = gUnknown_03004870.width; - r9 = 0; - r8 = 0; - x0 = gSaveBlock1.pos.x; - y0 = gSaveBlock1.pos.y; - x2 = 15; - y2 = 14; - switch (a1) - { - case CONNECTION_NORTH: - y0 += 1; - y2 = 13; - break; - case CONNECTION_SOUTH: - r8 = 1; - y2 = 13; - break; - case CONNECTION_WEST: - x0 += 1; - x2 = 14; - break; - case CONNECTION_EAST: - r9 = 1; - x2 = 14; - break; - } - for (y = 0; y < y2; y++) - { - i = 0; - j = 0; - for (x = 0; x < x2; x++) - { - desti = width * (y + y0); - srci = (y + r8) * 15 + r9; - src = &mapView[srci + i]; - dest = &gUnknown_02029828[x0 + desti + j]; - *dest = *src; - i++; - j++; - } - } - sav2_mapdata_clear(); -} - -int GetMapBorderIdAt(int x, int y) -{ - struct MapData *mapData; - u16 block, block2; - int i, j; - if (x >= 0 && x < gUnknown_03004870.width - && y >= 0 && y < gUnknown_03004870.height) - { - i = gUnknown_03004870.width; - i *= y; - block = gUnknown_03004870.map[x + i]; - if (block == 0x3ff) - { - goto fail; - } - } - else - { - mapData = gMapHeader.mapData; - j = (x + 1) & 1; - j += ((y + 1) & 1) * 2; - block2 = 0xc00 | mapData->border[j]; - if (block2 == 0x3ff) - { - goto fail; - } - } - goto success; -fail: - return -1; -success: - - if (x >= (gUnknown_03004870.width - 8)) - { - if (!gUnknown_0202E850.east) - { - return -1; - } - return CONNECTION_EAST; - } - else if (x < 7) - { - if (!gUnknown_0202E850.west) - { - return -1; - } - return CONNECTION_WEST; - } - else if (y >= (gUnknown_03004870.height - 7)) - { - if (!gUnknown_0202E850.south) - { - return -1; - } - return CONNECTION_SOUTH; - } - else if (y < 7) - { - if (!gUnknown_0202E850.north) - { - return -1; - } - return CONNECTION_NORTH; - } - else - { - return 0; - } -} - -int GetPostCameraMoveMapBorderId(int x, int y) -{ - return GetMapBorderIdAt(gSaveBlock1.pos.x + 7 + x, gSaveBlock1.pos.y + 7 + y); -} - -int CanCameraMoveInDirection(int direction) -{ - int x, y; - x = gSaveBlock1.pos.x + 7 + gUnknown_0821664C[direction].x; - y = gSaveBlock1.pos.y + 7 + gUnknown_0821664C[direction].y; - if (GetMapBorderIdAt(x, y) == -1) - { - return 0; - } - return 1; -} - -void sub_8056918(struct MapConnection *connection, int direction, int x, int y) -{ - struct MapHeader *mapHeader; - mapHeader = mapconnection_get_mapheader(connection); - switch (direction) - { - case CONNECTION_EAST: - gSaveBlock1.pos.x = -x; - gSaveBlock1.pos.y -= connection->offset; - break; - case CONNECTION_WEST: - gSaveBlock1.pos.x = mapHeader->mapData->width; - gSaveBlock1.pos.y -= connection->offset; - break; - case CONNECTION_SOUTH: - gSaveBlock1.pos.x -= connection->offset; - gSaveBlock1.pos.y = -y; - break; - case CONNECTION_NORTH: - gSaveBlock1.pos.x -= connection->offset; - gSaveBlock1.pos.y = mapHeader->mapData->height; - break; - } -} - -bool8 CameraMove(int x, int y) -{ - unsigned int direction; - struct MapConnection *connection; - int old_x, old_y; - gUnknown_0202E844.field_0 = FALSE; - direction = GetPostCameraMoveMapBorderId(x, y); - if (direction + 1 <= 1) - { - gSaveBlock1.pos.x += x; - gSaveBlock1.pos.y += y; - } - else - { - save_serialize_map(); - old_x = gSaveBlock1.pos.x; - old_y = gSaveBlock1.pos.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; - gSaveBlock1.pos.x += x; - gSaveBlock1.pos.y += y; - sub_80566F0(direction); - } - return gUnknown_0202E844.field_0; -} - -struct MapConnection *sub_8056A64(u8 direction, int x, int y) -{ - int count; - struct MapConnection *connection; - int i; - count = gMapHeader.connections->count; - connection = gMapHeader.connections->connections; - for (i = 0; i < count; i++, connection++) - { - if (connection->direction == direction) - { - if (sub_8056ABC(direction, x, y, connection) == TRUE) - { - return connection; - } - } - } - return NULL; -} - -bool8 sub_8056ABC(u8 direction, int x, int y, struct MapConnection *connection) -{ - struct MapHeader *mapHeader; - mapHeader = mapconnection_get_mapheader(connection); - switch (direction) - { - case CONNECTION_SOUTH: - case CONNECTION_NORTH: - return sub_8056B20(x, gMapHeader.mapData->width, mapHeader->mapData->width, connection->offset); - case CONNECTION_WEST: - case CONNECTION_EAST: - return sub_8056B20(y, gMapHeader.mapData->height, mapHeader->mapData->height, connection->offset); - } - return FALSE; -} - -bool8 sub_8056B20(int x, int src_width, int dest_width, int offset) -{ - int offset2; - offset2 = offset; - if (offset2 < 0) - { - offset2 = 0; - } - if (dest_width + offset < src_width) - { - src_width = dest_width + offset; - } - if (offset2 <= x && x <= src_width) - { - return TRUE; - } - return FALSE; -} - -int sub_8056B4C(int x, int width) -{ - if (x >= 0 && x < width) - { - return TRUE; - } - return FALSE; -} - -int sub_8056B60(struct MapConnection *connection, int x, int y) -{ - struct MapHeader *mapHeader; - mapHeader = mapconnection_get_mapheader(connection); - switch (connection->direction) - { - case CONNECTION_SOUTH: - case CONNECTION_NORTH: - return sub_8056B4C(x - connection->offset, mapHeader->mapData->width); - case CONNECTION_WEST: - case CONNECTION_EAST: - return sub_8056B4C(y - connection->offset, mapHeader->mapData->height); - } - return FALSE; -} - -struct MapConnection *sub_8056BA0(s16 x, s16 y) -{ - int count; - struct MapConnection *connection; - int i; - u8 direction; - if (!gMapHeader.connections) - { - return NULL; - } - else - { - count = gMapHeader.connections->count; - connection = gMapHeader.connections->connections; - for (i = 0; i < count; i++, connection++) - { - direction = connection->direction; - if ((direction == CONNECTION_DIVE || direction == CONNECTION_EMERGE) - || (direction == CONNECTION_NORTH && y > 6) - || (direction == CONNECTION_SOUTH && y < gMapHeader.mapData->height + 7) - || (direction == CONNECTION_WEST && x > 6) - || (direction == CONNECTION_EAST && x < gMapHeader.mapData->width + 7)) - { - continue; - } - if (sub_8056B60(connection, x - 7, y - 7) == TRUE) - { - return connection; - } - } - } - return NULL; -} - -void sub_8056C50(u16 x, u16 y) -{ - gSaveBlock1.pos.x = x - 7; - gSaveBlock1.pos.y = y - 7; -} - -void sav1_camera_get_focus_coords(u16 *x, u16 *y) -{ - *x = gSaveBlock1.pos.x + 7; - *y = gSaveBlock1.pos.y + 7; -} - -void unref_sub_8056C7C(u16 x, u16 y) -{ - gSaveBlock1.pos.x = x; - gSaveBlock1.pos.y = y; -} - -void GetCameraCoords(u16 *x, u16 *y) -{ - *x = gSaveBlock1.pos.x; - *y = gSaveBlock1.pos.y; -} - -void sub_8056C98(struct Tileset *tileset, void *src) -{ - if (tileset) - { - if (!tileset->isCompressed) - { - CpuFastSet(tileset->tiles, src, 0x1000); - } - else - { - LZ77UnCompVram(tileset->tiles, src); - } - } -} - -void sub_8056CBC(struct Tileset *tileset, int offset, int size) -{ - u16 black; - if (tileset) - { - if (tileset->isSecondary == FALSE) - { - black = 0; - LoadPalette(&black, offset, 2); - LoadPalette(tileset->palettes + 2, offset + 1, size - 2); - } - else if (tileset->isSecondary == TRUE) - { - LoadPalette(tileset->palettes + 0xc0, offset, size); - } - else - { - LZ77UnCompVram(tileset->palettes, (void*)0x2000000); - LoadPalette((void*)0x2000000, offset, size); - } - } -} - -void sub_8056D28(struct MapData *mapData) -{ - void *src = (void*)(BG_VRAM); - sub_8056C98(mapData->primaryTileset, src); -} - -void sub_8056D38(struct MapData *mapData) -{ - void *src = (void*)(BG_VRAM + 0x4000); - sub_8056C98(mapData->secondaryTileset, src); -} - -void apply_map_tileset1_palette(struct MapData *mapData) -{ - sub_8056CBC(mapData->primaryTileset, 0, 0xc0); -} - -void apply_map_tileset2_palette(struct MapData *mapData) -{ - sub_8056CBC(mapData->secondaryTileset, 0x60, 0xc0); -} - -void copy_map_tileset1_tileset2_to_vram(struct MapData *mapData) -{ - if (mapData) - { - sub_8056D28(mapData); - sub_8056D38(mapData); - } -} - -void apply_map_tileset1_tileset2_palette(struct MapData *mapData) -{ - if (mapData) - { - apply_map_tileset1_palette(mapData); - apply_map_tileset2_palette(mapData); - } -} diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c deleted file mode 100644 index b394d1e4c..000000000 --- a/src/fldeff_cut.c +++ /dev/null @@ -1,290 +0,0 @@ -#include "global.h" -#include "fldeff_cut.h" -#include "field_camera.h" -#include "field_effect.h" -#include "field_player_avatar.h" -#include "fieldmap.h" -#include "map_obj_lock.h" -#include "metatile_behavior.h" -#include "metatile_behaviors.h" -#include "pokemon_menu.h" -#include "rom4.h" -#include "rom6.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "task.h" -#include "trig.h" - -extern u8 gCutGrassSpriteArray[8]; // seems to be an array of 8 sprite IDs - -extern void (*gFieldCallback)(void); -extern void (*gUnknown_03005CE4)(void); - -extern struct SpriteTemplate gSpriteTemplate_CutGrass; - -extern struct MapPosition gUnknown_0203923C; - -extern u8 gLastFieldPokeMenuOpened; - -extern u8 UseCutScript; - -bool8 SetUpFieldMove_Cut(void) -{ - s16 x, y; - u8 i, j; - u8 tileBehavior; - - if(npc_before_player_of_type(0x52) == TRUE) // is in front of tree? - { - gFieldCallback = sub_808AB90; - gUnknown_03005CE4 = sub_80A2634; - return TRUE; - } - else // is in ash or grass to cut? - { - PlayerGetDestCoords(&gUnknown_0203923C.x, &gUnknown_0203923C.y); - for(i = 0; i < 3; i++) - { - y = i - 1 + gUnknown_0203923C.y; - for(j = 0; j < 3; j++) - { - x = j - 1 + gUnknown_0203923C.x; - if(MapGridGetZCoordAt(x, y) == (s8)gUnknown_0203923C.height) - { - tileBehavior = MapGridGetMetatileBehaviorAt(x, y); - if(MetatileBehavior_IsPokeGrass(tileBehavior) == TRUE - || MetatileBehavior_IsAshGrass(tileBehavior) == TRUE) - { - gFieldCallback = sub_808AB90; - gUnknown_03005CE4 = sub_80A25E8; - return TRUE; - } - } - } - } - return FALSE; // do not use cut - } -} - -void sub_80A25E8(void) -{ - FieldEffectStart(1); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; -} - -bool8 FldEff_UseCutOnGrass(void) -{ - u8 taskId = oei_task_add(); - - gTasks[taskId].data[8] = (u32)sub_80A2684 >> 16; - gTasks[taskId].data[9] = (u32)sub_80A2684; - IncrementGameStat(0x12); - return FALSE; -} - -void sub_80A2634(void) -{ - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; - ScriptContext1_SetupScript(&UseCutScript); -} - -bool8 FldEff_UseCutOnTree(void) -{ - u8 taskId = oei_task_add(); - - gTasks[taskId].data[8] = (u32)sub_80A2B00 >> 16; - gTasks[taskId].data[9] = (u32)sub_80A2B00; - IncrementGameStat(0x12); - return FALSE; -} - -void sub_80A2684(void) -{ - FieldEffectActiveListRemove(1); - FieldEffectStart(0x3A); -} - -bool8 FldEff_CutGrass(void) -{ - s16 x, y; - u8 tileBehavior; - u8 i, j; // not in for loop? - - for(i = 0, PlaySE(SE_W015), PlayerGetDestCoords(&gUnknown_0203923C.x, &gUnknown_0203923C.y); i < 3; i++) - { - y = i - 1 + gUnknown_0203923C.y; - for(j = 0; j < 3; j++) - { - x = j - 1 + gUnknown_0203923C.x; - if(MapGridGetZCoordAt(x, y) == (s8)gUnknown_0203923C.height) - { - tileBehavior = MapGridGetMetatileBehaviorAt(x, y); - if(MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE) - { - sub_80A27A8(x, y); - sub_805BCC0(x, y); - } - } - } - } - sub_80A28F4(gUnknown_0203923C.x - 1, gUnknown_0203923C.y - 2); - DrawWholeMapView(); - - // populate sprite ID array - for(i = 0; i < 8; i++) - { - gCutGrassSpriteArray[i] = CreateSprite((struct SpriteTemplate *)&gSpriteTemplate_CutGrass, - gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 20, 0); - gSprites[gCutGrassSpriteArray[i]].data2 = 32 * i; - } - return 0; -} - -// set map grid metatile depending on x, y -// TODO: enum for metatile IDs -void sub_80A27A8(s16 x, s16 y) -{ - int metatileId = MapGridGetMetatileIdAt(x, y); - - switch(metatileId) - { - case 0x208: - case 0x15: - case 0xD: - MapGridSetMetatileIdAt(x, y, 0x1); - break; - case 0x1C6: - MapGridSetMetatileIdAt(x, y, 0x1CE); - break; - case 0x1C7: - MapGridSetMetatileIdAt(x, y, 0x1CF); - break; - case 0x281: - MapGridSetMetatileIdAt(x, y, 0x279); - break; - case 0x282: - MapGridSetMetatileIdAt(x, y, 0x27A); - break; - case 0x283: - MapGridSetMetatileIdAt(x, y, 0x27B); - break; - case 0x206: - case 0x207: - MapGridSetMetatileIdAt(x, y, 0x271); - break; - case 0x212: - case 0x20A: - MapGridSetMetatileIdAt(x, y, 0x218); - break; - case 0x25: - MapGridSetMetatileIdAt(x, y, 0xE); - break; - } -} - -s32 sub_80A28A0(s16 x, s16 y) -{ - u16 metatileId = MapGridGetMetatileIdAt(x, y); - - if(metatileId == 1) - return 1; - else if(metatileId == 633) - return 2; - else if(metatileId == 634) - return 3; - else if(metatileId == 635) - return 4; - else - return 0; -} - -void sub_80A28F4(s16 x, s16 y) -{ - s16 i; - u16 lowerY = y + 3; - - for(i = 0; i < 3; i++) - { - u16 currentX = x + i; - s16 currentXsigned = x + i; - if(MapGridGetMetatileIdAt(currentXsigned, y) == 21) - { - switch((u8)sub_80A28A0(currentXsigned, y + 1)) - { - case 1: - MapGridSetMetatileIdAt(currentXsigned, y + 1, 0x208); - break; - case 2: - MapGridSetMetatileIdAt(currentXsigned, y + 1, 0x281); - break; - case 3: - MapGridSetMetatileIdAt(currentXsigned, y + 1, 0x282); - break; - case 4: - MapGridSetMetatileIdAt(currentXsigned, y + 1, 0x283); - break; - } - } - if(MapGridGetMetatileIdAt((s16)currentX, (s16)lowerY) == 1) - { - if(MapGridGetMetatileIdAt((s16)currentX, (s16)lowerY + 1) == 0x208) - MapGridSetMetatileIdAt((s16)currentX, (s16)lowerY + 1, 0x1); - if(MapGridGetMetatileIdAt((s16)currentX, (s16)lowerY + 1) == 0x281) - MapGridSetMetatileIdAt((s16)currentX, (s16)lowerY + 1, 0x279); - if(MapGridGetMetatileIdAt((s16)currentX, (s16)lowerY + 1) == 0x282) - MapGridSetMetatileIdAt((s16)currentX, (s16)lowerY + 1, 0x27A); - if(MapGridGetMetatileIdAt((s16)currentX, (s16)lowerY + 1) == 0x283) - MapGridSetMetatileIdAt((s16)currentX, (s16)lowerY + 1, 0x27B); - } - } -} - -void sub_80A2A48(struct Sprite *sprite) -{ - sprite->data0 = 8; - sprite->data1 = 0; - sprite->data3 = 0; - sprite->callback = (void *)objc_8097BBC; -} - -void objc_8097BBC(struct Sprite *sprite) -{ - u16 tempdata; - u16 tempdata2; - - sprite->pos2.x = Sin(sprite->data2, sprite->data0); - sprite->pos2.y = Cos(sprite->data2, sprite->data0); - - sprite->data2 = (sprite->data2 + 8) & 0xFF; - sprite->data0 += ((tempdata2 = sprite->data3) << 16 >> 18) + 1; // what? - sprite->data3 = tempdata2 + 1; - - tempdata = sprite->data1; - if((s16)tempdata != 28) // done rotating the grass, execute clean up function - sprite->data1++; - else - sprite->callback = (void *)sub_80A2AB8; -} - -void sub_80A2AB8(void) -{ - u8 i; - - for(i = 1; i < 8; i++) - { - DestroySprite(&gSprites[gCutGrassSpriteArray[i]]); - } - - FieldEffectStop(&gSprites[gCutGrassSpriteArray[0]], 0x3A); - sub_8064E2C(); - ScriptContext2_Disable(); -} - -void sub_80A2B00(void) -{ - PlaySE(0x80); - FieldEffectActiveListRemove(2); - EnableBothScriptContexts(); -} diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c deleted file mode 100644 index 6c2633567..000000000 --- a/src/fldeff_flash.c +++ /dev/null @@ -1,306 +0,0 @@ -#include "global.h" -#include "event_data.h" -#include "field_effect.h" -#include "main.h" -#include "palette.h" -#include "pokemon_menu.h" -#include "rom4.h" -#include "rom6.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "task.h" - -struct FlashStruct -{ - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; - void (*func)(void); -}; - -extern struct FlashStruct gUnknown_083F7FC4[]; -extern u16 gCaveTransitionPalette_White[]; -extern u16 gCaveTransitionPalette_Black[]; -extern u16 gUnknown_083F808C[]; -extern u16 gUnknown_083F809C[]; -extern u16 gCaveTransitionTilemap[]; -extern u8 gCaveTransitionTiles[]; - -extern u8 gLastFieldPokeMenuOpened; -extern void (*gUnknown_03005CE4)(void); - -extern u8 gUnknown_081B694A[]; - -void sub_810CBFC(void); -void sub_810CC34(void); -bool8 sub_810CD5C(void); -void sub_810CE5C(u8); -void sub_810CE78(u8); -void sub_810CF18(u8); -void sub_810CF5C(u8); -void sub_810CFC4(u8); -void sub_810D00C(u8); -void sub_810D028(u8); -void sub_810D0C4(u8); -void sub_810D128(u8); - -bool8 SetUpFieldMove_Flash(void) -{ - if (gMapHeader.cave == TRUE && !FlagGet(SYS_USE_FLASH)) - { - gFieldCallback = sub_808AB90; - gUnknown_03005CE4 = sub_810CBFC; - return TRUE; - } - - return FALSE; -} - -void sub_810CBFC(void) -{ - u8 taskId = oei_task_add(); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; - gTasks[taskId].data[8] = (uintptr_t)sub_810CC34 >> 16; - gTasks[taskId].data[9] = (uintptr_t)sub_810CC34; -} - -void sub_810CC34(void) -{ - PlaySE(SE_W115); - FlagSet(SYS_USE_FLASH); - ScriptContext1_SetupScript(gUnknown_081B694A); -} - -void sub_810CC54(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void VBlankCB(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -void sub_810CC80(void) -{ - u16 ime; - - SetVBlankCallback(NULL); - REG_DISPCNT = 0; - REG_BG2CNT = 0; - REG_BG1CNT = 0; - REG_BG0CNT = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); - DmaFill32(3, 0, (void *)OAM, OAM_SIZE); - DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2); - ResetPaletteFade(); - ResetTasks(); - ResetSpriteData(); - ime = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = ime; - SetVBlankCallback(VBlankCB); - SetMainCallback2(sub_810CC54); - if (!sub_810CD5C()) - SetMainCallback2(gMain.savedCallback); -} - -bool8 sub_810CD5C(void) -{ - u8 i; - u8 v0 = get_map_light_from_warp0(); - u8 v1 = sav1_map_get_light_level(); - - for (i = 0; gUnknown_083F7FC4[i].unk0; i++) - { - if (gUnknown_083F7FC4[i].unk0 == v0 && gUnknown_083F7FC4[i].unk1 == v1) - { - gUnknown_083F7FC4[i].func(); - return TRUE; - } - } - - return FALSE; -} - -u8 sub_810CDB8(u8 a1, u8 a2) -{ - u8 i; - u8 v0 = a1; - u8 v1 = a2; - - for (i = 0; gUnknown_083F7FC4[i].unk0; i++) - { - if (gUnknown_083F7FC4[i].unk0 == v0 && gUnknown_083F7FC4[i].unk1 == v1) - { - return gUnknown_083F7FC4[i].unk2; - } - } - - return FALSE; -} - -u8 fade_type_for_given_maplight_pair(u8 a1, u8 a2) -{ - u8 i; - u8 v0 = a1; - u8 v1 = a2; - - for (i = 0; gUnknown_083F7FC4[i].unk0; i++) - { - if (gUnknown_083F7FC4[i].unk0 == v0 && gUnknown_083F7FC4[i].unk1 == v1) - { - return gUnknown_083F7FC4[i].unk3; - } - } - - return FALSE; -} - -void sub_810CE48(void) -{ - CreateTask(sub_810CE5C, 0); -} - -void sub_810CE5C(u8 taskId) -{ - gTasks[taskId].func = sub_810CE78; -} - -void sub_810CE78(u8 taskId) -{ - REG_DISPCNT = 0; - LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000); - LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800); - LoadPalette(gCaveTransitionPalette_White, 0xE0, 0x20); - LoadPalette(gUnknown_083F809C, 0xE0, 0x10); - REG_BLDCNT = 15937; - REG_BLDALPHA = 0; - REG_BLDY = 0; - REG_BG0CNT = 7948; - REG_DISPCNT = 4416; - gTasks[taskId].func = sub_810CF18; - gTasks[taskId].data[0] = 16; - gTasks[taskId].data[1] = 0; -} - -void sub_810CF18(u8 taskId) -{ - u16 count = gTasks[taskId].data[1]; - u16 blend = count + 0x1000; - REG_BLDALPHA = blend; - if (count <= 0x10) - { - gTasks[taskId].data[1]++; - } - else - { - gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_810CF5C; - } -} - -void sub_810CF5C(u8 taskId) -{ - u16 count; - - REG_BLDALPHA = 4112; - - count = gTasks[taskId].data[2]; - - if (count < 8) - { - gTasks[taskId].data[2]++; - LoadPalette(&gUnknown_083F809C[count], 0xE0, 16 - 2 * count); - } - else - { - LoadPalette(gCaveTransitionPalette_White, 0, 0x20); - gTasks[taskId].func = sub_810CFC4; - gTasks[taskId].data[2] = 8; - } -} - -void sub_810CFC4(u8 taskId) -{ - if (gTasks[taskId].data[2]) - gTasks[taskId].data[2]--; - else - SetMainCallback2(gMain.savedCallback); -} - -void sub_810CFF8(void) -{ - CreateTask(sub_810D00C, 0); -} - -void sub_810D00C(u8 taskId) -{ - gTasks[taskId].func = sub_810D028; -} - -void sub_810D028(u8 taskId) -{ - REG_DISPCNT = 0; - LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000); - LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800); - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - REG_BG0CNT = 7948; - REG_DISPCNT = 4416; - LoadPalette(gCaveTransitionPalette_White, 0xE0, 0x20); - LoadPalette(gCaveTransitionPalette_Black, 0, 0x20); - gTasks[taskId].func = sub_810D0C4; - gTasks[taskId].data[0] = 16; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; -} - -void sub_810D0C4(u8 taskId) -{ - u16 count = gTasks[taskId].data[2]; - if (count < 16) - { - gTasks[taskId].data[2]++; - gTasks[taskId].data[2]++; - LoadPalette(&gUnknown_083F808C[15 - count], 0xE0, 2 * (count + 1)); - } - else - { - REG_BLDALPHA = 4112; - REG_BLDCNT = 15937; - gTasks[taskId].func = sub_810D128; - } -} - -void sub_810D128(u8 taskId) -{ - u16 count = 16 - gTasks[taskId].data[1]; - u16 blend = count + 0x1000; - REG_BLDALPHA = blend; - if (count) - { - gTasks[taskId].data[1]++; - } - else - { - LoadPalette(gCaveTransitionPalette_Black, 0, 0x20); - SetMainCallback2(gMain.savedCallback); - } -} diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c deleted file mode 100644 index cb26d9966..000000000 --- a/src/fldeff_softboiled.c +++ /dev/null @@ -1,153 +0,0 @@ -#include "global.h" -#include "fldeff_softboiled.h" -#include "menu.h" -#include "party_menu.h" -#include "pokemon.h" -#include "pokemon_menu.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "strings.h" -#include "task.h" - -struct Struct2001000 { - u8 unk0; - u8 unk1; - u8 unk2; - u8 filler3[9]; - void *unkC; -}; - -struct Struct201C000 { - struct Pokemon *unk0; - u8 filler4[1]; - u8 unk5; - u16 unk6; - u8 filler8[4]; - s32 unkC; - void* unk10; - u8 filler14[26]; - s16 unk2E; -}; - -#if ENGLISH -#define WINDOW_LEFT 3 -#define WINDOW_RIGHT 26 -#elif GERMAN -#define WINDOW_LEFT 0 -#define WINDOW_RIGHT 29 -#endif - -#define EWRAM_1000 (*(struct Struct2001000 *)(unk_2000000 + 0x1000)) -#define EWRAM_1B000_2 (*(struct Struct201B000 *)(unk_2000000 + 0x1B000)) -#define EWRAM_1C000 (*(struct Struct201C000 *)(unk_2000000 + 0x1C000)) - -// extern -extern u8 gUnknown_0202E8F6; -extern u8 gLastFieldPokeMenuOpened; - -extern u8 unk_2000000[]; -extern u8 gUnknown_0202E8F4; - -// Static -static void sub_8133D50(u8 taskId); -static void sub_8133E74(u8 taskId); -static void sub_8133EB8(u8 taskId); -static void sub_8133EF8(void); - -bool8 SetUpFieldMove_SoftBoiled(void) { - u16 maxHp; - u16 hp; - u16 minHp; - - maxHp = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_MAX_HP); - hp = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HP); - - minHp = (maxHp / 5); - if (hp >= minHp) - { - return TRUE; - } - - return FALSE; -} - -void sub_8133D28(u8 taskid) { - EWRAM_1000.unkC = sub_8133D50; - EWRAM_1B000_2.unk272 = 3; - sub_808A004(taskid); -} - -static void sub_8133D50(u8 taskId) { - u8 unk1, unk2; - u16 hp; - struct Pokemon *pokemon; - //struct Task *task; - - struct Sprite *sprites = gSprites; - - - unk1 = sprites[EWRAM_1000.unk1].data0; - unk2 = sprites[EWRAM_1000.unk2].data0; - - if (unk1 > 5 || unk2 > 5) - { - sub_806CD44(taskId); - return; - } - - EWRAM_1C000.unk0 = &gPlayerParty[sprites[EWRAM_1000.unk2].data0]; - hp = GetMonData(EWRAM_1C000.unk0, MON_DATA_HP); - - if (hp == 0 || unk1 == unk2 || GetMonData(EWRAM_1C000.unk0, MON_DATA_MAX_HP) == hp) - { - sub_8133EB8(taskId); - return; - } - - PlaySE(SE_KAIFUKU); - - EWRAM_1C000.unk5 = gSprites[EWRAM_1000.unk1].data0; - - pokemon = &gPlayerParty[EWRAM_1C000.unk5]; - EWRAM_1C000.unk0 = pokemon; - EWRAM_1C000.unk6 = 0; - EWRAM_1C000.unkC = -0x8000; - EWRAM_1C000.unk10 = sub_8133EF8; - - - gTasks[taskId].data[10] = GetMonData(EWRAM_1C000.unk0, MON_DATA_MAX_HP); - gTasks[taskId].data[11] = GetMonData(EWRAM_1C000.unk0, MON_DATA_HP); - gTasks[taskId].data[12] = gTasks[taskId].data[10] / 5; - - sub_806D5A4(); - gTasks[taskId].func = sub_806FA18; - EWRAM_1B000_2.unk282 = gTasks[taskId].data[11]; -} - -static void sub_8133E74(u8 taskId) { - if (gUnknown_0202E8F6) - { - return; - } - - MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); - sub_806D538(3, 0); - gTasks[taskId].func = sub_806CB74; -} - -static void sub_8133EB8(u8 taskId) { - gUnknown_0202E8F4 = 0; - sub_806D5A4(); - sub_806E834(gOtherText_CantUseOnPoke, 1); - gTasks[taskId].func = sub_8133E74; -} - -static void sub_8133EF8(void) { - sub_806CCE4(); - EWRAM_1B000_2.unk261 = 2; - DestroySprite(&gSprites[EWRAM_1000.unk1]); - MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); - sub_806D538(0, 0); - SwitchTaskToFollowupFunc(EWRAM_1000.unk0); -} diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c deleted file mode 100644 index 81f4f63c6..000000000 --- a/src/fldeff_strength.c +++ /dev/null @@ -1,76 +0,0 @@ -#include "global.h" -#include "braille_puzzles.h" -#include "field_effect.h" -#include "party_menu.h" -#include "pokemon.h" -#include "pokemon_menu.h" -#include "rom6.h" -#include "script.h" -#include "task.h" -#include "text.h" - -static void sub_811AA18(void); -static void sub_811AA38(void); -static void sub_811AA9C(void); - -extern u8 gLastFieldPokeMenuOpened; -extern u16 gScriptResult; -extern void (*gFieldCallback)(void); -extern void (*gUnknown_03005CE4)(void); - -extern u8 UseStrengthScript[]; - -bool8 SetUpFieldMove_Strength(void) -{ - if (ShouldDoBrailleStrengthEffect()) - { - gScriptResult = gLastFieldPokeMenuOpened; - gFieldCallback = sub_808AB90; - gUnknown_03005CE4 = sub_811AA38; - } - else - { - if (npc_before_player_of_type(87) != TRUE) - return 0; - gScriptResult = gLastFieldPokeMenuOpened; - gFieldCallback = sub_808AB90; - gUnknown_03005CE4 = sub_811AA18; - } - - return TRUE; -} - -static void sub_811AA18(void) -{ - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; - ScriptContext1_SetupScript(UseStrengthScript); -} - -static void sub_811AA38(void) -{ - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; - FieldEffectStart(40); -} - -bool8 FldEff_UseStrength(void) -{ - u8 taskId = oei_task_add(); - - gTasks[taskId].data[8] = (u32)sub_811AA9C >> 16; - gTasks[taskId].data[9] = (u32)sub_811AA9C; - GetMonNickname(&gPlayerParty[gUnknown_0202FF84[0]], gStringVar1); - return FALSE; -} - -static void sub_811AA9C(void) -{ - if (ShouldDoBrailleStrengthEffect()) - { - DoBrailleStrengthEffect(); - } - else - { - FieldEffectActiveListRemove(40); - EnableBothScriptContexts(); - } -} diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c deleted file mode 100644 index 4c3e6bf4a..000000000 --- a/src/fldeff_sweetscent.c +++ /dev/null @@ -1,88 +0,0 @@ -#include "global.h" -#include "field_effect.h" -#include "field_player_avatar.h" -#include "palette.h" -#include "pokemon_menu.h" -#include "rom6.h" -#include "script.h" -#include "sound.h" -#include "sprite.h" -#include "task.h" -#include "wild_encounter.h" - -static void sub_812BFD4(void); -static void sub_812C01C(void); -static void sub_812C084(u8); -static void sub_812C118(u8); - -extern u8 gLastFieldPokeMenuOpened; -extern void (*gFieldCallback)(void); -extern void (*gUnknown_03005CE4)(void); - -extern u8 SweetScentNothingHereScript[]; - -bool8 SetUpFieldMove_SweetScent(void) -{ - gFieldCallback = sub_808AB90; - gUnknown_03005CE4 = sub_812BFD4; - return TRUE; -} - -static void sub_812BFD4(void) -{ - FieldEffectStart(51); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; -} - -bool8 FldEff_SweetScent() -{ - u8 taskId = oei_task_add(); - - gTasks[taskId].data[8] = (u32)sub_812C01C >> 16; - gTasks[taskId].data[9] = (u32)sub_812C01C; - return FALSE; -} - -static void sub_812C01C(void) -{ - u8 taskId; - - PlaySE(0xEC); - BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 0, 8, 0x1F); - taskId = CreateTask(sub_812C084, 0); - gTasks[taskId].data[0] = 0; - FieldEffectActiveListRemove(51); -} - -static void sub_812C084(u8 taskId) -{ - if (!gPaletteFade.active) - { - if (gTasks[taskId].data[0] == 64) - { - gTasks[taskId].data[0] = 0; - if (SweetScentWildEncounter() == TRUE) - { - DestroyTask(taskId); - } - else - { - gTasks[taskId].func = sub_812C118; - BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 8, 0, 0x1F); - } - } - else - { - gTasks[taskId].data[0]++; - } - } -} - -static void sub_812C118(u8 taskId) -{ - if (!gPaletteFade.active) - { - ScriptContext1_SetupScript(SweetScentNothingHereScript); - DestroyTask(taskId); - } -} diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c deleted file mode 100644 index 74e68df06..000000000 --- a/src/fldeff_teleport.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "global.h" -#include "fldeff_teleport.h" -#include "field_effect.h" -#include "field_player_avatar.h" -#include "pokemon_menu.h" -#include "rom4.h" -#include "rom6.h" -#include "task.h" - -extern void (*gFieldCallback)(void); -extern u8 gLastFieldPokeMenuOpened; -extern void (*gUnknown_03005CE4)(void); - -bool8 SetUpFieldMove_Teleport(void) -{ - if (is_light_level_1_2_3_or_6(gMapHeader.mapType) == TRUE) - { - gFieldCallback = sub_808AB90; - gUnknown_03005CE4 = hm_teleport_run_dp02scr; - return TRUE; - } - - return FALSE; -} - -void hm_teleport_run_dp02scr(void) -{ - new_game(); - FieldEffectStart(63); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; -} - -bool8 FldEff_UseTeleport(void) -{ - u8 taskId = oei_task_add(); - gTasks[taskId].data[8] = (u32)sub_814A404 >> 16; - gTasks[taskId].data[9] = (u32)sub_814A404; - SetPlayerAvatarTransitionFlags(1); - return 0; -} - -void sub_814A404(void) -{ - FieldEffectActiveListRemove(63); - sub_8087BA8(); -} diff --git a/src/heal_location.c b/src/heal_location.c deleted file mode 100644 index 42bc18567..000000000 --- a/src/heal_location.c +++ /dev/null @@ -1,63 +0,0 @@ -#include "global.h" -#include "heal_location.h" -#include "map_constants.h" - -#define NUM_HEAL_LOCATIONS 22 - -static const struct HealLocation sHealLocations[] = -{ - {MAP_GROUP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F, MAP_ID_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F, 4, 2}, - {MAP_GROUP_LITTLEROOT_TOWN_MAYS_HOUSE_2F, MAP_ID_LITTLEROOT_TOWN_MAYS_HOUSE_2F, 4, 2}, - {MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, 20, 17}, - {MAP_GROUP_SLATEPORT_CITY, MAP_ID_SLATEPORT_CITY, 19, 20}, - {MAP_GROUP_MAUVILLE_CITY, MAP_ID_MAUVILLE_CITY, 22, 6}, - {MAP_GROUP_RUSTBORO_CITY, MAP_ID_RUSTBORO_CITY, 16, 39}, - {MAP_GROUP_FORTREE_CITY, MAP_ID_FORTREE_CITY, 5, 7}, - {MAP_GROUP_LILYCOVE_CITY, MAP_ID_LILYCOVE_CITY, 24, 15}, - {MAP_GROUP_MOSSDEEP_CITY, MAP_ID_MOSSDEEP_CITY, 28, 17}, - {MAP_GROUP_SOOTOPOLIS_CITY, MAP_ID_SOOTOPOLIS_CITY, 43, 32}, - {MAP_GROUP_EVER_GRANDE_CITY, MAP_ID_EVER_GRANDE_CITY, 27, 49}, - {MAP_GROUP_LITTLEROOT_TOWN, MAP_ID_LITTLEROOT_TOWN, 5, 9}, - {MAP_GROUP_LITTLEROOT_TOWN, MAP_ID_LITTLEROOT_TOWN, 14, 9}, - {MAP_GROUP_OLDALE_TOWN, MAP_ID_OLDALE_TOWN, 6, 17}, - {MAP_GROUP_DEWFORD_TOWN, MAP_ID_DEWFORD_TOWN, 2, 11}, - {MAP_GROUP_LAVARIDGE_TOWN, MAP_ID_LAVARIDGE_TOWN, 9, 7}, - {MAP_GROUP_FALLARBOR_TOWN, MAP_ID_FALLARBOR_TOWN, 14, 8}, - {MAP_GROUP_VERDANTURF_TOWN, MAP_ID_VERDANTURF_TOWN, 16, 4}, - {MAP_GROUP_PACIFIDLOG_TOWN, MAP_ID_PACIFIDLOG_TOWN, 8, 16}, - {MAP_GROUP_EVER_GRANDE_CITY, MAP_ID_EVER_GRANDE_CITY, 18, 6}, - {MAP_GROUP_BATTLE_TOWER_OUTSIDE, MAP_ID_BATTLE_TOWER_OUTSIDE, 14, 9}, - {MAP_GROUP_SOUTHERN_ISLAND_EXTERIOR, MAP_ID_SOUTHERN_ISLAND_EXTERIOR, 15, 20}, -}; - -u32 GetHealLocationIndexByMap(u16 mapGroup, u16 mapNum) -{ - u32 i; - - for (i = 0; i < NUM_HEAL_LOCATIONS; i++) - { - if (sHealLocations[i].group == mapGroup && sHealLocations[i].map == mapNum) - return i + 1; - } - return 0; -} - -const struct HealLocation *GetHealLocationByMap(u16 mapGroup, u16 mapNum) -{ - u32 index = GetHealLocationIndexByMap(mapGroup, mapNum); - - if (index == 0) - return NULL; - else - return &sHealLocations[index - 1]; -} - -const struct HealLocation *GetHealLocation(u32 index) -{ - if (index == 0) - return NULL; - else if (index > NUM_HEAL_LOCATIONS) - return NULL; - else - return &sHealLocations[index - 1]; -} diff --git a/src/hof_pc.c b/src/hof_pc.c deleted file mode 100644 index 4646d171c..000000000 --- a/src/hof_pc.c +++ /dev/null @@ -1,42 +0,0 @@ -#include "global.h" -#include "hall_of_fame.h" -#include "main.h" -#include "palette.h" -#include "rom4.h" -#include "script.h" -#include "script_menu.h" -#include "task.h" - -extern void (*gFieldCallback)(void); -extern void (*gUnknown_0300485C)(void); - -static void ReshowPCMenuAfterHallOfFamePC(void); -static void Task_WaitForPaletteFade(u8); - -void AccessHallOfFamePC(void) -{ - SetMainCallback2(sub_81428CC); - ScriptContext2_Enable(); -} - -void ReturnFromHallOfFamePC(void) -{ - SetMainCallback2(c2_exit_to_overworld_2_switch); - gFieldCallback = ReshowPCMenuAfterHallOfFamePC; -} - -static void ReshowPCMenuAfterHallOfFamePC(void) -{ - ScriptContext2_Enable(); - sub_8053E90(); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); - TryCreatePCMenu(); - sub_80B5838(); - CreateTask(Task_WaitForPaletteFade, 10); -} - -static void Task_WaitForPaletteFade(u8 taskId) -{ - if (!gPaletteFade.active) - DestroyTask(taskId); -} diff --git a/src/intro.c b/src/intro.c deleted file mode 100644 index a43e0356c..000000000 --- a/src/intro.c +++ /dev/null @@ -1,3167 +0,0 @@ -#include "global.h" -#include "gba/m4a_internal.h" -#include "intro.h" -#include "data2.h" -#include "decompress.h" -#include "hall_of_fame.h" -#include "intro_credits_graphics.h" -#include "libgncmultiboot.h" -#include "link.h" -#include "m4a.h" -#include "main.h" -#include "new_game.h" -#include "palette.h" -#include "rng.h" -#include "save.h" -#include "songs.h" -#include "sound.h" -#include "species.h" -#include "task.h" -#include "title_screen.h" -#include "trig.h" -#include "unknown_task.h" - -extern struct SpriteTemplate gUnknown_02024E8C; -extern u16 gUnknown_02039358; -extern u16 gUnknown_0203935A; -extern u16 gSaveFileStatus; -extern u8 gReservedSpritePaletteCount; -extern const u8 gInterfaceGfx_PokeBall[]; -extern const u8 gInterfacePal_PokeBall[]; -extern const u8 gIntroCopyright_Gfx[]; -extern const u16 gIntroCopyright_Pal[]; -extern const u16 gIntroCopyright_Tilemap[]; -extern void *const gUnknown_0840B5A0[]; - -static EWRAM_DATA u16 gUnknown_02039318 = 0; -static EWRAM_DATA u16 gUnknown_0203931A = 0; - -u32 gIntroFrameCounter; -struct GcmbStruct gMultibootProgramStruct; - -//-------------------------------------------------- -// Graphics Data -//-------------------------------------------------- - -static const u16 Palette_406340[] = INCBIN_U16("graphics/intro/unknown1.gbapal"); -static const u16 Palette_406360[] = INCBIN_U16("graphics/intro/unknown2.gbapal"); -#if ENGLISH -static const u8 gIntroTiles[] = INCBIN_U8("graphics/intro/intro.4bpp.lz"); -#elif GERMAN -extern const u8 gIntroTiles[]; -#endif -static const u16 gIntro1BGPals[][16] = -{ - INCBIN_U16("graphics/intro/intro1_bgpal1.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal2.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal3.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal4.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal5.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal6.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal7.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal8.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal9.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal10.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal11.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal12.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal13.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal14.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal15.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal16.gbapal"), -}; -static const u8 gIntro1BG0_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg0_map.bin.lz"); -static const u8 gIntro1BG1_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg1_map.bin.lz"); -static const u8 gIntro1BG2_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg2_map.bin.lz"); -static const u8 gIntro1BG3_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg3_map.bin.lz"); -static const u8 gIntro1BGLeavesGfx[] = INCBIN_U8("graphics/intro/introgfx.4bpp.lz"); -static const u16 gIntro3PokeballPal[] = INCBIN_U16("graphics/intro/intro3_pokeball.gbapal"); -static const u8 gIntro3Pokeball_Tilemap[] = INCBIN_U8("graphics/intro/intro3_pokeball_map.bin.lz"); -static const u8 gIntro3Pokeball_Gfx[] = INCBIN_U8("graphics/intro/intro3_pokeball.8bpp.lz"); -static const u16 gIntro3Streaks_Pal[] = INCBIN_U16("graphics/intro/intro3_streaks.gbapal"); -static const u8 gIntro3Streaks_Gfx[] = INCBIN_U8("graphics/intro/intro3_streaks.4bpp.lz"); -static const u8 gIntro3Streaks_Tilemap[] = INCBIN_U8("graphics/intro/intro3_streaks_map.bin.lz"); -static const u16 gIntro3Misc1Palette[] = INCBIN_U16("graphics/intro/intro3_misc1.gbapal"); -static const u16 gIntro3Misc2Palette[] = INCBIN_U16("graphics/intro/intro3_misc2.gbapal"); -static const u8 gIntro3MiscTiles[] = INCBIN_U8("graphics/intro/intro3_misc.4bpp.lz"); -static const u16 gIntro1EonPalette[] = INCBIN_U16("graphics/intro/intro1_eon.gbapal"); -static const u8 gIntro1EonTiles[] = INCBIN_U8("graphics/intro/intro1_eon.4bpp.lz"); -static const struct OamData gOamData_840ADE8 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840ADF0[] = -{ - ANIMCMD_FRAME(16, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840ADF8[] = -{ - ANIMCMD_FRAME(24, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AE00[] = -{ - ANIMCMD_FRAME(0, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AE08[] = -{ - ANIMCMD_FRAME(48, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_840AE10[] = -{ - gSpriteAnim_840ADF0, - gSpriteAnim_840ADF8, - gSpriteAnim_840AE00, - gSpriteAnim_840AE08, -}; -static void sub_813D208(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840AE20 = -{ - .tileTag = 2000, - .paletteTag = 2000, - .oam = &gOamData_840ADE8, - .anims = gSpriteAnimTable_840AE10, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813D208, -}; -static const union AnimCmd Unknown_40AE38[] = -{ - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(192, 4), - ANIMCMD_JUMP(0), -}; -static const union AnimCmd Unknown_40AE4C[] = -{ - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(64, 8), - ANIMCMD_FRAME(128, 8), - ANIMCMD_FRAME(192, 8), - ANIMCMD_JUMP(0), -}; -static const union AnimCmd Unknown_40AE60[] = -{ - ANIMCMD_FRAME(256, 4), - ANIMCMD_FRAME(0x140, 4), - ANIMCMD_FRAME(0x180, 4), - ANIMCMD_END, -}; -static const union AnimCmd Unknown_40AE70[] = -{ - ANIMCMD_FRAME(0x180, 16), - ANIMCMD_FRAME(0x140, 16), - ANIMCMD_FRAME(256, 16), - ANIMCMD_END, -}; -static const union AnimCmd *const gUnknown_0840AE80[] = -{ - Unknown_40AE38, - Unknown_40AE4C, - Unknown_40AE60, - Unknown_40AE70, -}; -static const struct OamData gOamData_840AE90 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const struct OamData gOamData_840AE98 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 0, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const struct OamData gOamData_840AEA0 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 2, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840AEA8[] = -{ - ANIMCMD_FRAME(80, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEB0[] = -{ - ANIMCMD_FRAME(84, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEB8[] = -{ - ANIMCMD_FRAME(88, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEC0[] = -{ - ANIMCMD_FRAME(92, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEC8[] = -{ - ANIMCMD_FRAME(96, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AED0[] = -{ - ANIMCMD_FRAME(100, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AED8[] = -{ - ANIMCMD_FRAME(104, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEE0[] = -{ - ANIMCMD_FRAME(112, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEE8[] = -{ - ANIMCMD_FRAME(113, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEF0[] = -{ - ANIMCMD_FRAME(114, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEF8[] = -{ - ANIMCMD_FRAME(115, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AF00[] = -{ - ANIMCMD_FRAME(116, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AF08[] = -{ - ANIMCMD_FRAME(117, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AF10[] = -{ - ANIMCMD_FRAME(128, 8), - ANIMCMD_END, -}; -#if GERMAN -static const union AnimCmd gSpriteAnim_8416DA4[] = -{ - ANIMCMD_FRAME(118, 8), - ANIMCMD_END, -}; -#endif -static const union AnimCmd *const gSpriteAnimTable_840AF18[] = -{ - gSpriteAnim_840AEA8, - gSpriteAnim_840AEB0, - gSpriteAnim_840AEB8, - gSpriteAnim_840AEC0, - gSpriteAnim_840AEC8, - gSpriteAnim_840AED0, - gSpriteAnim_840AED8, -}; -static const union AnimCmd *const gSpriteAnimTable_840AF34[] = -{ - gSpriteAnim_840AEE0, - gSpriteAnim_840AEE8, - gSpriteAnim_840AEF0, - gSpriteAnim_840AEF8, - gSpriteAnim_840AF00, - gSpriteAnim_840AF08, -#if GERMAN - gSpriteAnim_8416DA4, -#endif -}; -static const union AnimCmd *const gSpriteAnimTable_840AF4C[] = -{ - gSpriteAnim_840AF10, -}; -static const s16 gUnknown_0840AF50[][2] = -{ - {0, -72}, - {1, -56}, - {2, -40}, - {3, -24}, - {4, 8}, - {5, 24}, - {3, 40}, - {1, 56}, - {6, 72}, -}; -static const s16 gUnknown_0840AF74[][2] = -{ - {0, -28}, - {1, -20}, - {2, -12}, - {3, -4}, - {2, 4}, - {4, 12}, - {5, 20}, - {3, 28}, -}; -static void sub_813D908(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840AF94 = -{ - .tileTag = 2000, - .paletteTag = 2001, - .oam = &gOamData_840AE90, - .anims = gSpriteAnimTable_840AF18, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813D908, -}; -static const struct SpriteTemplate gSpriteTemplate_840AFAC = -{ - .tileTag = 2000, - .paletteTag = 2001, - .oam = &gOamData_840AE98, - .anims = gSpriteAnimTable_840AF34, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813D908, -}; -static const struct SpriteTemplate gSpriteTemplate_840AFC4 = -{ - .tileTag = 2000, - .paletteTag = 2001, - .oam = &gOamData_840AEA0, - .anims = gSpriteAnimTable_840AF4C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813D908, -}; -static const struct OamData gOamData_840AFDC = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 1, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840AFE4[] = -{ - ANIMCMD_FRAME(0, 10), - ANIMCMD_JUMP(0), -}; -static const union AnimCmd *const gSpriteAnimTable_840AFEC[] = -{ - gSpriteAnim_840AFE4, -}; -static void sub_813DA64(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840AFF0 = -{ - .tileTag = 2002, - .paletteTag = 2002, - .oam = &gOamData_840AFDC, - .anims = gSpriteAnimTable_840AFEC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813DA64, -}; -const struct CompressedSpriteSheet gUnknown_0840B008[] = -{ - {gIntroTiles, 0x1400, 2000}, - {NULL}, -}; -const struct CompressedSpriteSheet gUnknown_0840B018[] = -{ - {gIntro1EonTiles, 0x400, 2002}, - {NULL}, -}; -const struct SpritePalette gUnknown_0840B028[] = -{ - {Palette_406340, 2000}, - {Palette_406360, 2001}, - {gIntro1EonPalette, 2002}, - {NULL}, -}; -static const union AnimCmd gUnknown_0840B048[] = -{ - ANIMCMD_FRAME(3, 0), - ANIMCMD_END, -}; -static const union AnimCmd gUnknown_0840B050[] = -{ - ANIMCMD_FRAME(0, 8), - ANIMCMD_END, -}; -static const union AnimCmd gUnknown_0840B058[] = -{ - ANIMCMD_FRAME(1, 8), - ANIMCMD_FRAME(2, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gUnknown_0840B064[] = -{ - gUnknown_0840B048, - gUnknown_0840B050, - gUnknown_0840B058, -}; -static const struct OamData gOamData_840B070 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840B078[] = -{ - ANIMCMD_FRAME(0, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_840B080[] = -{ - gSpriteAnim_840B078, -}; -static void sub_813E30C(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B084 = -{ - .tileTag = 2002, - .paletteTag = 2002, - .oam = &gOamData_840B070, - .anims = gSpriteAnimTable_840B080, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813E30C, -}; -static const struct OamData gOamData_840B09C = -{ - .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 gSpriteAnim_840B0A4[] = -{ - ANIMCMD_FRAME(1, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_840B0AC[] = -{ - gSpriteAnim_840B0A4, -}; -static void sub_813E4B8(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B0B0 = -{ - .tileTag = 2003, - .paletteTag = 2003, - .oam = &gOamData_840B09C, - .anims = gSpriteAnimTable_840B0AC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813E4B8, -}; -static const struct OamData gOamData_840B0C8 = -{ - .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 gSpriteAnim_840B0D0[] = -{ - ANIMCMD_FRAME(14, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_840B0D8[] = -{ - gSpriteAnim_840B0D0, -}; -static void sub_813E5E0(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B0DC = -{ - .tileTag = 2003, - .paletteTag = 2004, - .oam = &gOamData_840B0C8, - .anims = gSpriteAnimTable_840B0D8, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813E5E0, -}; -static void sub_813E6C0(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B0F4 = -{ - .tileTag = 2003, - .paletteTag = 2004, - .oam = &gOamData_840B0C8, - .anims = gSpriteAnimTable_840B0D8, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813E6C0, -}; -static const struct OamData gOamData_840B10C = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840B114[] = -{ - ANIMCMD_FRAME(6, 8), - ANIMCMD_FRAME(6, 8, .hFlip = TRUE), - ANIMCMD_JUMP(0), -}; -static const union AnimCmd *const gSpriteAnimTable_840B120[] = -{ - gSpriteAnim_840B114, -}; -static void sub_813E804(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B124 = -{ - .tileTag = 2003, - .paletteTag = 2004, - .oam = &gOamData_840B10C, - .anims = gSpriteAnimTable_840B120, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813E804, -}; -static const struct OamData gOamData_840B13C = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840B144[] = -{ - ANIMCMD_FRAME(10, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_840B14C[] = -{ - gSpriteAnim_840B144, -}; -static void sub_813E980(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B150 = -{ - .tileTag = 2003, - .paletteTag = 2004, - .oam = &gOamData_840B13C, - .anims = gSpriteAnimTable_840B14C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813E980, -}; -static const u8 gUnknown_0840B168[] = {0xE6, 0xEB, 0xE4, 0xEA, 0xE5, 0xE9, 0xE7, 0xE8}; -static void sub_813EA60(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B170 = -{ - .tileTag = 2003, - .paletteTag = 2004, - .oam = &gOamData_840B13C, - .anims = gSpriteAnimTable_840B14C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813EA60, -}; -static const u16 gUnknown_0840B188[] = {0x200, 0x1C0, 0x180, 0x140, 0x100, 0xE0, 0xC0, 0xA0, 0x80, 0x80}; -static const struct OamData gOamData_840B19C = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840B1A4[] = -{ - ANIMCMD_FRAME(2, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_840B1AC[] = -{ - gSpriteAnim_840B1A4, -}; -static void sub_813EBBC(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B1B0 = -{ - .tileTag = 2003, - .paletteTag = 2004, - .oam = &gOamData_840B19C, - .anims = gSpriteAnimTable_840B1AC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813EBBC, -}; -static void sub_813EC90(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B1C8 = -{ - .tileTag = 2003, - .paletteTag = 2004, - .oam = &gOamData_840B19C, - .anims = gSpriteAnimTable_840B1AC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813EC90, -}; -static const struct OamData gOamData_840B1E0 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840B1E8[] = -{ - ANIMCMD_FRAME(16, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_840B1F0[] = -{ - gSpriteAnim_840B1E8, -}; -static void sub_813EDFC(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B1F4 = -{ - .tileTag = 2003, - .paletteTag = 2003, - .oam = &gOamData_840B1E0, - .anims = gSpriteAnimTable_840B1F0, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813EDFC, -}; -const struct CompressedSpriteSheet gIntro3PokeballGfx_Table[] = -{ - {gInterfaceGfx_PokeBall, 0x100, 2002}, - {NULL}, -}; -const struct CompressedSpriteSheet gIntro3MiscGfx_Table[] = -{ - {gIntro3MiscTiles, 0xa00, 2003}, - {NULL}, -}; -const struct CompressedSpritePalette gInterfacePokeballPal_Table[] = -{ - {gInterfacePal_PokeBall, 2002}, - {NULL}, -}; -const struct SpritePalette gIntro3MiscPal_Table[] = -{ - {gIntro3Misc1Palette, 2003}, - {gIntro3Misc2Palette, 2004}, - {NULL}, -}; -const u32 unusedData = 0x02000000; - -static void MainCB2_EndIntro(void); -static void Task_IntroLoadPart1Graphics(u8); -static void Task_IntroFadeIn(u8); -static void Task_IntroWaterDrops(u8); -static void Task_IntroScrollDownAndShowEon(u8); -static void Task_IntroWaitToSetupPart2(u8); -static void Task_IntroLoadPart2Graphics(u8); -static void Task_IntroStartBikeRide(u8); -static void Task_IntroHandleBikeAndEonMovement(u8); -static void Task_IntroWaitToSetupPart3(u8); -static void Task_IntroLoadPart3Graphics(u8); -static void Task_IntroSpinAndZoomPokeball(u8); -static void Task_IntroWaitToSetupPart3DoubleFight(u8); -static void Task_IntroLoadPart3Streaks(u8); -static void task_intro_14(u8); -static void task_intro_15(u8); -static void task_intro_16(u8); -static void task_intro_17(u8); -static void Task_IntroPokemonBattle(u8); -static void task_intro_19(u8); -static void task_intro_20(u8); -static void intro_reset_and_hide_bgs(void); -static void sub_813CCE8(u8); -static u16 sub_813CE88(u16, s16, s16, u16, u8); -static u8 sub_813CFA8(u16, u16, u16, u16); -static void sub_813D084(u8); -static void sub_813D220(struct Sprite *); -static void sub_813D368(struct Sprite *); -static void sub_813D414(struct Sprite *); -static void SpriteCB_WaterDropFall(struct Sprite *); -static u8 CreateWaterDrop(s16, s16, u16, u16, u16, u8); -static void sub_813D788(struct Sprite *); -static void sub_813D880(struct Sprite *); -static u8 CreateGameFreakLogo(s16, s16, u8); -static void sub_813DB9C(struct Sprite *); -static void sub_813DE70(struct Sprite *); -static void sub_813E10C(struct Sprite *); -static void sub_813E210(struct Sprite *); -static void sub_813E580(u16, u16); -static void sub_813E7C0(u8); -static void sub_813E930(u8); -static void InitIntroTorchicAttackAnim(u8); -static void InitIntroMudkipAttackAnim(u8); - -static void VBlankCB_Intro(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -static void MainCB2_Intro(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); - if (gMain.newKeys && !gPaletteFade.active) - SetMainCallback2(MainCB2_EndIntro); - else if (gIntroFrameCounter != -1) - gIntroFrameCounter++; -} - -static void MainCB2_EndIntro(void) -{ - if (!UpdatePaletteFade()) - SetMainCallback2(CB2_InitTitleScreen); -} - -static void LoadCopyrightGraphics(u16 tilesetAddress, u16 tilemapAddress, u16 paletteAddress) -{ - LZ77UnCompVram(gIntroCopyright_Gfx, (void *)(VRAM + tilesetAddress)); - LoadPalette(gIntroCopyright_Pal, paletteAddress, 0x20); - CpuCopy16(gIntroCopyright_Tilemap, (void *)(VRAM + tilemapAddress), 0x500); -} - -static void SerialCB_CopyrightScreen(void) -{ - GameCubeMultiBoot_HandleSerialInterrupt(&gMultibootProgramStruct); -} - -static u8 SetUpCopyrightScreen(void) -{ - u16 ime; - - switch (gMain.state) - { - case 0: - SetVBlankCallback(NULL); - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - *(u16 *)PLTT = 0x7FFF; - REG_DISPCNT = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); - DmaFill32(3, 0, (void *)OAM, OAM_SIZE); - DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2); - ResetPaletteFade(); - LoadCopyrightGraphics(0, 0x3800, 0); - remove_some_task(); - ResetTasks(); - ResetSpriteData(); - FreeAllSpritePalettes(); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0xFFFF); - REG_BG0CNT = BGCNT_PRIORITY(0) - | BGCNT_CHARBASE(0) - | BGCNT_SCREENBASE(7) - | BGCNT_16COLOR - | BGCNT_TXT256x256; - ime = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = ime; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - SetVBlankCallback(VBlankCB_Intro); - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON; - SetSerialCallback(SerialCB_CopyrightScreen); - GameCubeMultiBoot_Init(&gMultibootProgramStruct); - default: - UpdatePaletteFade(); - gMain.state++; - GameCubeMultiBoot_Main(&gMultibootProgramStruct); - break; - case 140: - GameCubeMultiBoot_Main(&gMultibootProgramStruct); - if (gMultibootProgramStruct.gcmb_field_2 != 1) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gMain.state++; - } - break; - case 141: - if (UpdatePaletteFade()) - break; - CreateTask(Task_IntroLoadPart1Graphics, 0); - SetMainCallback2(MainCB2_Intro); - if (gMultibootProgramStruct.gcmb_field_2) - { - GameCubeMultiBoot_ExecuteProgram(&gMultibootProgramStruct); - } - else - { - GameCubeMultiBoot_Quit(); - SetSerialCallback(SerialCB); - } - return 0; - } - - return 1; -} - -void CB2_InitCopyrightScreenAfterBootup(void) -{ - if (!SetUpCopyrightScreen()) - { - sub_8052E4C(); - ResetSaveCounters(); - sub_8125EC8(0); - if (gSaveFileStatus == 0 || gSaveFileStatus == 2) - ClearSav2(); - SetPokemonCryStereo(gSaveBlock2.optionsSound); - } -} - -void CB2_InitCopyrightScreenAfterTitleScreen(void) -{ - SetUpCopyrightScreen(); -} - -static void Task_IntroLoadPart1Graphics(u8 taskId) -{ - SetVBlankCallback(NULL); - gUnknown_02039318 = Random() & 1; - intro_reset_and_hide_bgs(); - REG_BG3VOFS = 0; - REG_BG2VOFS = 0x50; - REG_BG1VOFS = 0x18; - REG_BG0VOFS = 0x28; - LZ77UnCompVram(gIntro1BGLeavesGfx, (void *)VRAM); - LZ77UnCompVram(gIntro1BG0_Tilemap, (void *)(VRAM + 0x8000)); - DmaClear16(3, VRAM + 0x8800, 0x800); - LZ77UnCompVram(gIntro1BG1_Tilemap, (void *)(VRAM + 0x9000)); - DmaClear16(3, VRAM + 0x9800, 0x800); - LZ77UnCompVram(gIntro1BG2_Tilemap, (void *)(VRAM + 0xA000)); - DmaClear16(3, VRAM + 0xA800, 0x800); - LZ77UnCompVram(gIntro1BG3_Tilemap, (void *)(VRAM + 0xB000)); - DmaClear16(3, VRAM + 0xB800, 0x800); - LoadPalette(gIntro1BGPals, 0, sizeof(gIntro1BGPals)); - REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(22) | BGCNT_16COLOR | BGCNT_TXT256x512; - REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(20) | BGCNT_16COLOR | BGCNT_TXT256x512; - REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(18) | BGCNT_16COLOR | BGCNT_TXT256x512; - REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(16) | BGCNT_16COLOR | BGCNT_TXT256x512; - LoadCompressedObjectPic(&gUnknown_0840B008[0]); - LoadCompressedObjectPic(&gUnknown_0840B018[0]); - LoadSpritePalettes(gUnknown_0840B028); - CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1F0, 0x20); - CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1E1, 0x1E); - CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1D2, 0x1C); - CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1C3, 0x1A); - CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1B4, 0x18); - CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1A5, 0x16); - CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x196, 0x14); - gTasks[taskId].data[0] = CreateWaterDrop(236, -14, 0x200, 1, 0x78, FALSE); - gTasks[taskId].func = Task_IntroFadeIn; -} - -static void Task_IntroFadeIn(u8 taskId) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - SetVBlankCallback(VBlankCB_Intro); - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; - gTasks[taskId].func = Task_IntroWaterDrops; - gIntroFrameCounter = 0; - m4aSongNumStart(0x19E); - ResetSerial(); -} - -static void Task_IntroWaterDrops(u8 taskId) -{ - //start moving rock - if (gIntroFrameCounter == 76) - gSprites[gTasks[taskId].data[0]].data0 = 1; - - //drop rock - if (gIntroFrameCounter == 251) - gSprites[gTasks[taskId].data[0]].data0 = 2; - - if (gIntroFrameCounter == 368) - CreateWaterDrop(48, 0, 0x400, 5, 0x70, TRUE); - if (gIntroFrameCounter == 384) - CreateWaterDrop(200, 60, 0x400, 9, 0x80, TRUE); - - if (gIntroFrameCounter == 560) - CreateGameFreakLogo(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, CreateTask(sub_813CCE8, 0)); - - if (gIntroFrameCounter > 739) - { - gTasks[taskId].data[1] = 0x50; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0x18; - gTasks[taskId].data[4] = 0; - gTasks[taskId].data[5] = 0x28; - gTasks[taskId].data[6] = 0; - gTasks[taskId].func = Task_IntroScrollDownAndShowEon; - } -} - -static void Task_IntroScrollDownAndShowEon(u8 taskId) -{ - if (gIntroFrameCounter < 904) - { - s32 r2; - - //slide backgrounds downward - r2 = (gTasks[taskId].data[1] << 16) + (u16)gTasks[taskId].data[2] - 0xC000; - gTasks[taskId].data[1] = r2 >> 16; - gTasks[taskId].data[2] = r2; - REG_BG2VOFS = gTasks[taskId].data[1]; - r2 = (gTasks[taskId].data[3] << 16) + (u16)gTasks[taskId].data[4] - 0x10000; - gTasks[taskId].data[3] = r2 >> 16; - gTasks[taskId].data[4] = r2; - REG_BG1VOFS = gTasks[taskId].data[3]; - r2 = (gTasks[taskId].data[5] << 16) + (u16)gTasks[taskId].data[6] - 0x18000; - gTasks[taskId].data[5] = r2 >> 16; - gTasks[taskId].data[6] = r2; - REG_BG0VOFS = gTasks[taskId].data[5]; - - //show Lati@s sprite - if (gIntroFrameCounter == 880) - { - u8 spriteId = CreateSprite(&gSpriteTemplate_840AFF0, 200, 160, 10); - - gSprites[spriteId].invisible = 1; - } - } - else - { - //fade to white - if (gIntroFrameCounter > 1007) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0xFFFF); - gTasks[taskId].func = Task_IntroWaitToSetupPart2; - } - } -} - -static void Task_IntroWaitToSetupPart2(u8 taskId) -{ - if (gIntroFrameCounter > 1026) - gTasks[taskId].func = Task_IntroLoadPart2Graphics; -} - -static void Task_IntroLoadPart2Graphics(u8 taskId) -{ - intro_reset_and_hide_bgs(); - SetVBlankCallback(NULL); - ResetSpriteData(); - FreeAllSpritePalettes(); - gUnknown_02039358 = 0; - gUnknown_0203935A = 0; -#ifdef SAPPHIRE - load_intro_part2_graphics(0); -#else - load_intro_part2_graphics(1); -#endif - gTasks[taskId].func = Task_IntroStartBikeRide; -} - -static void Task_IntroStartBikeRide(u8 taskId) -{ - u8 spriteId; - - if (gUnknown_02039318 == 0) - LoadCompressedObjectPic(&gIntro2BrendanSpriteSheet); - else - LoadCompressedObjectPic(&gIntro2MaySpriteSheet); - LoadCompressedObjectPic(&gIntro2BicycleSpriteSheet); -#ifdef SAPPHIRE - LoadCompressedObjectPic(&gIntro2LatiasSpriteSheet); -#else - LoadCompressedObjectPic(&gIntro2LatiosSpriteSheet); -#endif - LoadSpritePalettes(gIntro2SpritePalettes); - if (gUnknown_02039318 == 0) - spriteId = intro_create_brendan_sprite(0x110, 100); - else - spriteId = intro_create_may_sprite(0x110, 100); - gSprites[spriteId].callback = sub_813D788; - gSprites[spriteId].anims = gUnknown_0840AE80; - gTasks[taskId].data[1] = spriteId; -#ifdef SAPPHIRE - spriteId = intro_create_latias_sprite(-0x40, 0x3C); -#else - spriteId = intro_create_latios_sprite(-0x40, 0x3C); -#endif - gSprites[spriteId].callback = sub_813D880; - gTasks[taskId].data[2] = spriteId; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0xFFFF); - SetVBlankCallback(VBlankCB_Intro); -#ifdef SAPPHIRE - gTasks[taskId].data[0] = sub_8148EC0(0, 0x4000, 0x40, 0x10); - sub_8148C78(0); -#else - gTasks[taskId].data[0] = sub_8148EC0(1, 0x4000, 0x400, 0x10); - sub_8148C78(1); -#endif - gTasks[taskId].func = Task_IntroHandleBikeAndEonMovement; -} - -static void Task_IntroHandleBikeAndEonMovement(u8 taskId) -{ - s16 a; - u16 sine; - - if (gIntroFrameCounter > 1823) - { - BeginNormalPaletteFade(0xFFFFFFFF, 16, 0, 16, 0xFFFF); - gTasks[taskId].func = Task_IntroWaitToSetupPart3; - } - if (gIntroFrameCounter == 1109) - gSprites[gTasks[taskId].data[1]].data0 = 1; - if (gIntroFrameCounter == 1214) - gSprites[gTasks[taskId].data[1]].data0 = 0; - if (gIntroFrameCounter == 1394) - gSprites[gTasks[taskId].data[2]].data0 = 1; - if (gIntroFrameCounter == 1398) - gSprites[gTasks[taskId].data[1]].data0 = 2; - if (gIntroFrameCounter == 1586) - gSprites[gTasks[taskId].data[1]].data0 = 3; - if (gIntroFrameCounter == 1727) - gSprites[gTasks[taskId].data[1]].data0 = 4; - - //TODO: Clean this up - a = (((u16)gTasks[taskId].data[3] << 16) >> 18) & 0x7F; - sine = Sin(a, 48); - gUnknown_0203935A = sine; - if (gTasks[taskId].data[3] < 512) - gTasks[taskId].data[3]++; -#ifdef SAPPHIRE - sub_8149020(0); -#else - sub_8149020(1); -#endif -} - -static void Task_IntroWaitToSetupPart3(u8 taskId) -{ - if (gIntroFrameCounter > 2068) - { - DestroyTask(gTasks[taskId].data[0]); - gTasks[taskId].func = Task_IntroLoadPart3Graphics; - } -} - -static void Task_IntroLoadPart3Graphics(u8 taskId) -{ - intro_reset_and_hide_bgs(); - LZ77UnCompVram(gIntro3Pokeball_Gfx, (void *)VRAM); - LZ77UnCompVram(gIntro3Pokeball_Tilemap, (void *)(VRAM + 0x4000)); - LoadPalette(gIntro3PokeballPal, 0, 0x200); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - sub_813CE30(0x78, 0x50, 0, 0); - ResetSpriteData(); - FreeAllSpritePalettes(); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0xFFFF); - REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(8) | BGCNT_256COLOR | BGCNT_AFF256x256; - REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; - gTasks[taskId].func = Task_IntroSpinAndZoomPokeball; - gIntroFrameCounter = 0; - m4aSongNumStart(0x1BA); -} - -static void Task_IntroSpinAndZoomPokeball(u8 taskId) -{ - gTasks[taskId].data[0] += 0x400; - if (gTasks[taskId].data[1] <= 0x6BF) - { - gTasks[taskId].data[1] += gTasks[taskId].data[2]; - gTasks[taskId].data[2]++; - } - else - { - gTasks[taskId].func = Task_IntroWaitToSetupPart3DoubleFight; - } - sub_813CE30(0x78, 0x50, 0x10000 / gTasks[taskId].data[1], gTasks[taskId].data[0]); - if (gIntroFrameCounter == 44) - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0xFFFF); -} - -static void Task_IntroWaitToSetupPart3DoubleFight(u8 taskId) -{ - if (gIntroFrameCounter > 59) - gTasks[taskId].func = Task_IntroLoadPart3Streaks; -} - -extern u8 unk_2000000[][32]; - -static void Task_IntroLoadPart3Streaks(u8 taskId) -{ - u16 i; - void *vram; - - intro_reset_and_hide_bgs(); - for (i = 0; i < 32; i++) - { - unk_2000000[0][i] = 0; - unk_2000000[1][i] = 17; - unk_2000000[2][i] = 34; - } - vram = (void *)VRAM; - DmaCopy16(3, unk_2000000, vram, 0x60); - for (i = 0; i < 0x280; i++) - ((u16 *)(VRAM + 0x3000))[i] = 0xF001; - for (i = 0; i < 0x80; i++) - ((u16 *)(VRAM + 0x3800))[i] = 0xF002; - for (i = 0; i < 0x180; i++) - ((u16 *)(VRAM + 0x3900))[i] = 0xF000; - for (i = 0; i < 0x80; i++) - ((u16 *)(VRAM + 0x3C00))[i] = 0xF002; - gPlttBufferUnfaded[0xF0] = RGB_WHITE; - gPlttBufferFaded[0xF0] = RGB_WHITE; - sub_813D084(1); - gPlttBufferUnfaded[0xF2] = RGB_BLACK; - gPlttBufferFaded[0xF2] = RGB_BLACK; - LZ77UnCompVram(gIntro3Streaks_Gfx, (void *)(VRAM + 0x4000)); - LZ77UnCompVram(gIntro3Streaks_Tilemap, (void *)(VRAM + 0x7000)); - LoadPalette(gIntro3Streaks_Pal, 0, 0x20); - ResetSpriteData(); - FreeAllSpritePalettes(); - gReservedSpritePaletteCount = 8; - LoadCompressedObjectPic(&gIntro3PokeballGfx_Table[0]); - LoadCompressedObjectPic(&gIntro3MiscGfx_Table[0]); - LoadCompressedObjectPalette(&gInterfacePokeballPal_Table[0]); - LoadSpritePalettes(gIntro3MiscPal_Table); - gTasks[taskId].func = task_intro_14; -} - -static void task_intro_14(u8 taskId) -{ - REG_WIN0H = 0xF0; - REG_WIN0V = 0xA0; - REG_WININ = 0x1C; - REG_WINOUT = 0x1D; - REG_BG3CNT = BGCNT_PRIORITY(3) - | BGCNT_CHARBASE(0) - | BGCNT_SCREENBASE(6) - | BGCNT_16COLOR - | BGCNT_TXT256x256; - REG_BG0CNT = BGCNT_PRIORITY(0) - | BGCNT_CHARBASE(0) - | BGCNT_SCREENBASE(7) - | BGCNT_16COLOR - | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; - gTasks[taskId].data[15] = CreateTask(task_intro_20, 0); - gTasks[gTasks[taskId].data[15]].data[0] = 0; - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = task_intro_15; -} - -static void task_intro_15(u8 taskId) -{ - u16 foo = gTasks[taskId].data[0]; - - if (gTasks[taskId].data[0] != 32) - { - u32 bar; //needed to match for some reason - - gTasks[taskId].data[0] += 4; - REG_WIN0V = (gTasks[taskId].data[0] * 256) - (bar = foo - 0x9C); - } - else - { - REG_WIN0V = 0x2080; - gTasks[taskId].func = task_intro_16; - } -} - -static void task_intro_16(u8 taskId) -{ - gTasks[taskId].func = task_intro_17; -} - -static void task_intro_17(u8 taskId) -{ - gUnknown_0203931A = 0; - gTasks[taskId].func = Task_IntroPokemonBattle; -} - -static void Task_IntroPokemonBattle(u8 taskId) -{ - u8 spriteId; - - if (gIntroFrameCounter == 80) - { - spriteId = sub_813CE88(SPECIES_SHARPEDO, 0xF0, 0xA0, 5, 1); - gSprites[spriteId].callback = sub_813DB9C; - gSprites[spriteId].data1 = 1; - gSprites[spriteId].data2 = 0; - } - if (gIntroFrameCounter == 152) - { - spriteId = sub_813CE88(SPECIES_DUSKULL, 0, 0xA0, 4, 1); - gSprites[spriteId].callback = sub_813DB9C; - gSprites[spriteId].data1 = 2; - gSprites[spriteId].data2 = 1; - } - if (gIntroFrameCounter == 219) - { - sub_813D084(0); - spriteId = sub_813CFA8(gUnknown_02039318, 0x110, 0x60, 6); - gSprites[spriteId].callback = sub_813DE70; - gTasks[taskId].data[1] = spriteId; - } - if (gIntroFrameCounter == 304) - { - gTasks[gTasks[taskId].data[15]].data[0] = 4; - gSprites[gTasks[taskId].data[1]].data0 = 2; - } - if (gIntroFrameCounter == 384) - { - gTasks[gTasks[taskId].data[15]].data[0] = 0; - gSprites[gTasks[taskId].data[1]].data0 = 4; - } - if (gIntroFrameCounter == 400) - { - BeginNormalPaletteFade(0xFF0000, 0, 0x10, 0, 0x7EFF); - } - if (gIntroFrameCounter == 432) - { - gSprites[gTasks[taskId].data[1]].data0 = 5; - } - if (gIntroFrameCounter == 462) - { - gSprites[gTasks[taskId].data[1]].data0 = 6; - gTasks[gTasks[taskId].data[15]].data[0] = 2; - } - if (gIntroFrameCounter == 463) - { - sub_813D084(1); - spriteId = sub_813CE88(SPECIES_SHARPEDO, 0xD0, 8, 5, 1); - gSprites[spriteId].callback = sub_813E10C; - gTasks[taskId].data[2] = spriteId; - sub_813E7C0(spriteId); - } - if (gIntroFrameCounter == 539) - { - spriteId = sub_813CE88(SPECIES_DUSKULL, 0xF8, 0x10, 4, 1); - gSprites[spriteId].callback = sub_813E10C; - gTasks[taskId].data[3] = spriteId; - sub_813E930(spriteId); - } - if (gIntroFrameCounter == 623) - { - gSprites[gTasks[taskId].data[2]].data0 = 2; - gSprites[gTasks[taskId].data[3]].data0 = 2; - gTasks[gTasks[taskId].data[15]].data[0] = 3; - } - if (gIntroFrameCounter == 624) - { - sub_813D084(0); - spriteId = sub_813CE88(SPECIES_MUDKIP, 0x20, 0x98, 0, 0); - gSprites[spriteId].callback = sub_813E210; - gTasks[taskId].data[4] = spriteId; - InitIntroMudkipAttackAnim(spriteId); - } - if (gIntroFrameCounter == 700) - { - spriteId = sub_813CE88(SPECIES_TORCHIC, -8, 0x90, 1, 0); - gSprites[spriteId].callback = sub_813E210; - gTasks[taskId].data[5] = spriteId; - InitIntroTorchicAttackAnim(spriteId); - } - if (gIntroFrameCounter == 776) - { - gUnknown_0203931A = 1; - gSprites[gTasks[taskId].data[4]].data0 = 2; - gSprites[gTasks[taskId].data[5]].data0 = 2; - gTasks[gTasks[taskId].data[15]].data[0] = 0; - } - if (gIntroFrameCounter == 781) - { - sub_813D084(2); - gSprites[gTasks[taskId].data[2]].data0 = 3; - gSprites[gTasks[taskId].data[3]].data0 = 3; - gSprites[gTasks[taskId].data[4]].data0 = 3; - gSprites[gTasks[taskId].data[5]].data0 = 3; - spriteId = CreateSprite(&gSpriteTemplate_840B1F4, 0x78, 0x50, 15); - gSprites[spriteId].invisible = 1; - } - if (gIntroFrameCounter == 800) - PlaySE(SE_OP_BASYU); - if (gIntroFrameCounter == 850) - BeginNormalPaletteFade(0xFFFFFFFF, 4, 0, 0x10, 0xFFFF); - if (gIntroFrameCounter == 946) - gTasks[taskId].func = task_intro_19; -} - -static void task_intro_19(u8 taskId) -{ - DestroyTask(taskId); - SetMainCallback2(MainCB2_EndIntro); -} - -static void task_intro_20(u8 taskId) -{ -#define BG2_FLAGS (BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(14) | BGCNT_16COLOR | BGCNT_TXT256x256) -#define DISPCNT_FLAGS (DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON) - - gTasks[taskId].data[15]++; - switch (gTasks[taskId].data[0]) - { - case 0: - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; - REG_BG2CNT = 0; - gTasks[taskId].data[0] = 0xFF; - break; - case 2: - BeginNormalPaletteFade(1, 0, 0x10, 0, 0xFFFF); - REG_BG2CNT = BG2_FLAGS; - REG_DISPCNT = DISPCNT_FLAGS; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[0] = 20; - //fall through - case 20: - REG_BG2VOFS = gTasks[taskId].data[1]; - REG_BG2HOFS = gTasks[taskId].data[2]; - gTasks[taskId].data[1] += 6; - gTasks[taskId].data[2] -= 8; - break; - case 3: - BeginNormalPaletteFade(1, 0, 0x10, 0, 0xFFFF); - REG_BG2CNT = BG2_FLAGS; - REG_DISPCNT = DISPCNT_FLAGS; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[0] = 0x1E; - //fall through - case 0x1E: - REG_BG2VOFS = gTasks[taskId].data[1]; - REG_BG2HOFS = gTasks[taskId].data[2]; - gTasks[taskId].data[1] -= 6; - gTasks[taskId].data[2] += 8; - break; - case 4: - BeginNormalPaletteFade(1, 5, 0, 0x10, 0x37F7); - REG_BG2CNT = BG2_FLAGS; - REG_DISPCNT = DISPCNT_FLAGS; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 8; - gTasks[taskId].data[0] = 0x28; - //fall through - case 0x28: - REG_BG2VOFS = gTasks[taskId].data[1]; - REG_BG2HOFS = gTasks[taskId].data[2]; - gTasks[taskId].data[1] -= gTasks[taskId].data[3]; - gTasks[taskId].data[2] += gTasks[taskId].data[3]; - if (!(gTasks[taskId].data[15] & 7) && gTasks[taskId].data[3] != 0) - gTasks[taskId].data[3]--; - break; - case 0xFF: //needed to prevent jump table optimization - break; - } - -#undef BG2_FLAGS -#undef DISPCNT_FLAGS -} - -static void intro_reset_and_hide_bgs(void) -{ - REG_DISPCNT = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; -} - -#ifdef NONMATCHING -static void sub_813CCE8(u8 taskId) -{ - switch (gTasks[taskId].data[0]) - { - default: - case 0: - REG_BLDCNT = 0x3F50; - REG_BLDALPHA = 0x1000; - REG_BLDY = 0; - gTasks[taskId].data[1] = 0x40; - gTasks[taskId].data[0] = 1; - return; - case 1: - if (gTasks[taskId].data[1] != 0) - { - u32 foo; - u32 bar asm("r2"); - - gTasks[taskId].data[1]--; - //tail merge at _0813CDC2 - foo = gTasks[taskId].data[1] + (gTasks[taskId].data[1] < 0); - bar = 0x1FE; - REG_BLDALPHA = gUnknown_08393E64[(foo & bar) / 2]; - } - else - { - REG_BLDALPHA = gUnknown_08393E64[0]; - gTasks[taskId].data[1] = 0x80; - gTasks[taskId].data[0]++; - } - return; - case 2: - if (gTasks[taskId].data[1] != 0) - { - //tail merge at _0813CE0E - gTasks[taskId].data[1]--; - } - else - { - gTasks[taskId].data[1] = 0; //redundant? - gTasks[taskId].data[0]++; - } - return; - case 3: - if (gTasks[taskId].data[1] <= 0x3D) - { - u32 foo; - u32 bar asm("r2"); - - gTasks[taskId].data[1]++; - //_0813CDC2 - foo = gTasks[taskId].data[1] + (gTasks[taskId].data[1] < 0); - bar = 0x1FE; - REG_BLDALPHA = gUnknown_08393E64[(foo & bar) / 2]; - } - else - { - //_0813CDE0 - REG_BLDALPHA = gUnknown_08393E64[0x1F]; - gTasks[taskId].data[1] = 0x10; - gTasks[taskId].data[0]++; - } - return; - case 4: - if (gTasks[taskId].data[1] != 0) - { - gTasks[taskId].data[1]--; - } - else - { - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - DestroyTask(taskId); - } - return; - } -} -#else -__attribute__((naked)) -static void sub_813CCE8(u8 taskId) -{ - asm("\n\ - .equ REG_BLDCNT, 0x4000050\n\ - .equ REG_BLDALPHA, 0x4000052\n\ - .syntax unified\n\ - push {r4,lr}\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - ldr r1, _0813CD0C @ =gTasks\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - movs r2, 0x8\n\ - ldrsh r0, [r0, r2]\n\ - adds r2, r1, 0\n\ - cmp r0, 0x4\n\ - bhi _0813CD28\n\ - lsls r0, 2\n\ - ldr r1, _0813CD10 @ =_0813CD14\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_0813CD0C: .4byte gTasks\n\ -_0813CD10: .4byte _0813CD14\n\ - .align 2, 0\n\ -_0813CD14:\n\ - .4byte _0813CD28\n\ - .4byte _0813CD5C\n\ - .4byte _0813CD8C\n\ - .4byte _0813CDA8\n\ - .4byte _0813CDFC\n\ -_0813CD28:\n\ - ldr r1, _0813CD54 @ =REG_BLDCNT\n\ - ldr r4, _0813CD58 @ =0x00003f50\n\ - adds r0, r4, 0\n\ - strh r0, [r1]\n\ - adds r1, 0x2\n\ - movs r4, 0x80\n\ - lsls r4, 5\n\ - adds r0, r4, 0\n\ - strh r0, [r1]\n\ - adds r1, 0x2\n\ - movs r0, 0\n\ - strh r0, [r1]\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 3\n\ - adds r0, r2\n\ - movs r1, 0x40\n\ - strh r1, [r0, 0xA]\n\ - movs r1, 0x1\n\ - strh r1, [r0, 0x8]\n\ - b _0813CE26\n\ - .align 2, 0\n\ -_0813CD54: .4byte REG_BLDCNT\n\ -_0813CD58: .4byte 0x00003f50\n\ -_0813CD5C:\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 3\n\ - adds r2, r0, r2\n\ - ldrh r1, [r2, 0xA]\n\ - movs r3, 0xA\n\ - ldrsh r0, [r2, r3]\n\ - cmp r0, 0\n\ - beq _0813CD78\n\ - subs r0, r1, 0x1\n\ - strh r0, [r2, 0xA]\n\ - movs r4, 0xA\n\ - ldrsh r0, [r2, r4]\n\ - b _0813CDC2\n\ -_0813CD78:\n\ - ldr r1, _0813CD84 @ =REG_BLDALPHA\n\ - ldr r0, _0813CD88 @ =gUnknown_08393E64\n\ - ldrh r0, [r0]\n\ - strh r0, [r1]\n\ - movs r0, 0x80\n\ - b _0813CDEA\n\ - .align 2, 0\n\ -_0813CD84: .4byte REG_BLDALPHA\n\ -_0813CD88: .4byte gUnknown_08393E64\n\ -_0813CD8C:\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 3\n\ - adds r1, r0, r2\n\ - ldrh r0, [r1, 0xA]\n\ - movs r3, 0xA\n\ - ldrsh r2, [r1, r3]\n\ - cmp r2, 0\n\ - bne _0813CE0E\n\ - strh r2, [r1, 0xA]\n\ - ldrh r0, [r1, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r1, 0x8]\n\ - b _0813CE26\n\ -_0813CDA8:\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 3\n\ - adds r2, r0, r2\n\ - ldrh r1, [r2, 0xA]\n\ - movs r4, 0xA\n\ - ldrsh r0, [r2, r4]\n\ - cmp r0, 0x3D\n\ - bgt _0813CDE0\n\ - adds r0, r1, 0x1\n\ - strh r0, [r2, 0xA]\n\ - movs r1, 0xA\n\ - ldrsh r0, [r2, r1]\n\ -_0813CDC2:\n\ - lsrs r1, r0, 31\n\ - adds r0, r1\n\ - movs r2, 0xFF\n\ - lsls r2, 1\n\ - ldr r3, _0813CDD8 @ =REG_BLDALPHA\n\ - ldr r1, _0813CDDC @ =gUnknown_08393E64\n\ - ands r0, r2\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - strh r0, [r3]\n\ - b _0813CE26\n\ - .align 2, 0\n\ -_0813CDD8: .4byte REG_BLDALPHA\n\ -_0813CDDC: .4byte gUnknown_08393E64\n\ -_0813CDE0:\n\ - ldr r1, _0813CDF4 @ =REG_BLDALPHA\n\ - ldr r0, _0813CDF8 @ =gUnknown_08393E64\n\ - ldrh r0, [r0, 0x3E]\n\ - strh r0, [r1]\n\ - movs r0, 0x10\n\ -_0813CDEA:\n\ - strh r0, [r2, 0xA]\n\ - ldrh r0, [r2, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r2, 0x8]\n\ - b _0813CE26\n\ - .align 2, 0\n\ -_0813CDF4: .4byte REG_BLDALPHA\n\ -_0813CDF8: .4byte gUnknown_08393E64\n\ -_0813CDFC:\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 3\n\ - adds r1, r0, r2\n\ - ldrh r0, [r1, 0xA]\n\ - movs r4, 0xA\n\ - ldrsh r2, [r1, r4]\n\ - cmp r2, 0\n\ - beq _0813CE14\n\ -_0813CE0E:\n\ - subs r0, 0x1\n\ - strh r0, [r1, 0xA]\n\ - b _0813CE26\n\ -_0813CE14:\n\ - ldr r0, _0813CE2C @ =REG_BLDCNT\n\ - strh r2, [r0]\n\ - adds r0, 0x2\n\ - strh r2, [r0]\n\ - adds r0, 0x2\n\ - strh r2, [r0]\n\ - adds r0, r3, 0\n\ - bl DestroyTask\n\ -_0813CE26:\n\ - pop {r4}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0813CE2C: .4byte REG_BLDCNT\n\ - .syntax divided\n"); -} -#endif - -void sub_813CE30(u16 scrX, u16 scrY, u16 zoom, u16 alpha) -{ - struct BgAffineSrcData src; - struct BgAffineDstData dest; - - src.texX = 0x8000; - src.texY = 0x8000; - src.scrX = scrX; - src.scrY = scrY; - src.sx = zoom; - src.sy = zoom; - src.alpha = alpha; - BgAffineSet(&src, &dest, 1); - REG_BG2PA = dest.pa; - REG_BG2PB = dest.pb; - REG_BG2PC = dest.pc; - REG_BG2PD = dest.pd; - REG_BG2X = dest.dx; - REG_BG2Y = dest.dy; -} - -static u16 sub_813CE88(u16 species, s16 x, s16 y, u16 d, u8 front) -{ - const u8 *lzPaletteData; - u8 spriteId; - - if (front) - LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[d], species, 0, 1); - else - LoadSpecialPokePic(&gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[d], species, 0, 0); - lzPaletteData = species_and_otid_get_pal(species, 0, 0xFFFF); - LoadCompressedPalette(lzPaletteData, 0x100 + d * 0x10, 0x20); - sub_8143648(d, d); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, (d + 1) * 4); - gSprites[spriteId].oam.paletteNum = d; - gSprites[spriteId].oam.priority = 1; - return spriteId; -} - -static u8 sub_813CFA8(u16 a, u16 b, u16 c, u16 d) -{ - u8 spriteId; - - DecompressPicFromTable_2(&gTrainerBackPicTable[a], gTrainerBackPicCoords[a].coords, gTrainerBackPicCoords[a].y_offset, (void *)0x2000000, gUnknown_0840B5A0[d], a); - LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + d * 0x10, 0x20); - sub_8143680(d, d); - gUnknown_02024E8C.anims = gUnknown_0840B064; - spriteId = CreateSprite(&gUnknown_02024E8C, b, c, 1); - gSprites[spriteId].oam.paletteNum = d; - gSprites[spriteId].oam.priority = 1; - return spriteId; -} - -static void sub_813D084(u8 a) -{ - u16 color; - - switch (a) - { - default: - case 0: - color = RGB(22, 31, 15); - break; - case 1: - color = RGB(31, 14, 12); - break; - case 2: - color = RGB(12, 12, 20); - break; - } - gPlttBufferUnfaded[241] = color; - gPlttBufferFaded[241] = color; -} - -static void sub_813D0CC(struct Sprite *sprite) -{ - u8 r0; - - if (sprite->data2 >= 192) - { - if (sprite->data3 != 0) - { - sprite->data3--; - } - else - { - sprite->invisible = FALSE; - SetOamMatrix(sprite->data1, sprite->data2, 0, 0, sprite->data2); - sprite->data2 = (sprite->data2 * 95) / 100; - r0 = (sprite->data2 - 192) / 128 + 9; - if (r0 > 15) - r0 = 15; - sprite->oam.paletteNum = r0; - } - } - else - { - DestroySprite(sprite); - } -} - -static void sub_813D158(struct Sprite *sprite) -{ - if (gSprites[sprite->data7].data7 != 0) - { - sprite->invisible = TRUE; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - StartSpriteAnim(sprite, 3); - sprite->data2 = 1024; - sprite->data3 = 8 * (sprite->data1 & 3); - sprite->callback = sub_813D0CC; - sprite->oam.shape = 1; - sprite->oam.size = 3; - CalcCenterToCornerVec(sprite, 1, 3, 2); - } - else - { - sprite->pos2.x = gSprites[sprite->data7].pos2.x; - sprite->pos2.y = gSprites[sprite->data7].pos2.y; - sprite->pos1.x = gSprites[sprite->data7].pos1.x; - sprite->pos1.y = gSprites[sprite->data7].pos1.y; - } -} - -static void sub_813D208(struct Sprite *sprite) -{ - if (sprite->data0 != 0) - sprite->callback = sub_813D220; -} - -static void sub_813D220(struct Sprite *sprite) -{ - if (sprite->pos1.x <= 116) - { - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos1.x += 4; - sprite->pos2.x = -4; - sprite->data4 = 128; - sprite->callback = sub_813D368; - } - else - { - u16 data2; - u16 data3; - u16 data4; - s16 sin1; - s16 sin2; - s16 sin3; - s16 sin4; - s16 var1; - s16 var2; - s16 var3; - s16 var4; - s16 temp; - - data4 = sprite->data4; - sin1 = gSineTable[(u8)data4]; - sin2 = gSineTable[(u8)(data4 + 64)]; - sprite->data4 += 2; - sprite->pos2.y = sin1 / 32; - sprite->pos1.x--; - if (sprite->pos1.x & 1) - sprite->pos1.y++; - temp = -sin2 / 16; - data2 = sprite->data2; - data3 = sprite->data3; - sin3 = gSineTable[(u8)(temp - 16)]; - sin4 = gSineTable[(u8)(temp + 48)]; - var1 = sin4 * data2 / 256; - var2 = -sin3 * data3 / 256; - var3 = sin3 * data2 / 256; - var4 = sin4 * data3 / 256; - SetOamMatrix(sprite->data1, data2, 0, 0, data3); - SetOamMatrix(sprite->data1 + 1, var1, var3, var2, var4); - SetOamMatrix(sprite->data1 + 2, var1, var3, var2 * 2, var4 * 2); - } -} - -static void sub_813D368(struct Sprite *sprite) -{ - SetOamMatrix(sprite->data1, sprite->data6 + 64, 0, 0, sprite->data6 + 64); - SetOamMatrix(sprite->data1 + 1, sprite->data6 + 64, 0, 0, sprite->data6 + 64); - SetOamMatrix(sprite->data1 + 2, sprite->data6 + 64, 0, 0, sprite->data6 + 64); - if (sprite->data4 != 64) - { - u16 data4; - - sprite->data4 -= 8; - data4 = sprite->data4; - sprite->pos2.x = gSineTable[(u8)(data4 + 64)] / 64; - sprite->pos2.y = gSineTable[(u8)data4] / 64; - } - else - { - sprite->data4 = 0; - sprite->callback = sub_813D414; - } -} - -static void sub_813D414(struct Sprite *sprite) -{ - if (sprite->data0 != 2) - { - s16 r2; - - sprite->data4 += 8; - r2 = gSineTable[(u8)sprite->data4] / 16 + 64; - sprite->pos2.x = gSineTable[(u8)(r2 + 64)] / 64; - sprite->pos2.y = gSineTable[(u8)r2] / 64; - } - else - { - sprite->callback = SpriteCB_WaterDropFall; - } -} - -static void SpriteCB_WaterDropFall(struct Sprite *sprite) -{ - if (sprite->pos1.y < sprite->data5) - { - sprite->pos1.y += 4; - } - else - { - sprite->data7 = 1; - sprite->invisible = TRUE; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - StartSpriteAnim(sprite, 3); - sprite->data2 = 1024; - sprite->data3 = 8 * (sprite->data1 & 3); - sprite->callback = sub_813D0CC; - sprite->oam.shape = 1; - sprite->oam.size = 3; - CalcCenterToCornerVec(sprite, 1, 3, 2); - } -} - -//Duplicate function -static void SpriteCB_WaterDropFall_2(struct Sprite *sprite) -{ - if (sprite->pos1.y < sprite->data5) - { - sprite->pos1.y += 4; - } - else - { - sprite->data7 = 1; - sprite->invisible = TRUE; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - StartSpriteAnim(sprite, 3); - sprite->data2 = 1024; - sprite->data3 = 8 * (sprite->data1 & 3); - sprite->callback = sub_813D0CC; - sprite->oam.shape = 1; - sprite->oam.size = 3; - CalcCenterToCornerVec(sprite, 1, 3, 2); - } -} - -static u8 CreateWaterDrop(s16 x, s16 y, u16 c, u16 d, u16 e, u8 fallImmediately) -{ - u8 spriteId; - u8 oldSpriteId; - - spriteId = CreateSprite(&gSpriteTemplate_840AE20, x, y, 0); - gSprites[spriteId].data0 = 0; - gSprites[spriteId].data7 = 0; - gSprites[spriteId].data1 = d; - gSprites[spriteId].data2 = c; - gSprites[spriteId].data3 = c; - gSprites[spriteId].data5 = e; - gSprites[spriteId].data6 = c; - gSprites[spriteId].oam.affineMode = 3; - gSprites[spriteId].oam.matrixNum = d; - CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2); - StartSpriteAnim(&gSprites[spriteId], 2); - if (!fallImmediately) - gSprites[spriteId].callback = sub_813D208; - else - gSprites[spriteId].callback = SpriteCB_WaterDropFall_2; - oldSpriteId = spriteId; - - spriteId = CreateSprite(&gSpriteTemplate_840AE20, x, y, 0); - gSprites[spriteId].data7 = oldSpriteId; - gSprites[spriteId].data1 = d + 1; - gSprites[spriteId].oam.affineMode = 3; - gSprites[spriteId].oam.matrixNum = d + 1; - CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2); - gSprites[spriteId].callback = sub_813D158; - - spriteId = CreateSprite(&gSpriteTemplate_840AE20, x, y, 0); - gSprites[spriteId].data7 = oldSpriteId; - gSprites[spriteId].data1 = d + 2; - StartSpriteAnim(&gSprites[spriteId], 1); - gSprites[spriteId].oam.affineMode = 3; - gSprites[spriteId].oam.matrixNum = d + 2; - CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2); - gSprites[spriteId].callback = sub_813D158; - - SetOamMatrix(d, c + 32, 0, 0, c + 32); - SetOamMatrix(d + 1, c + 32, 0, 0, c + 32); - SetOamMatrix(d + 2, c + 32, 0, 0, 2 * (c + 32)); - - return oldSpriteId; -} - -static void sub_813D788(struct Sprite *sprite) -{ - switch (sprite->data0) - { - case 0: - StartSpriteAnimIfDifferent(sprite, 0); - sprite->pos1.x--; - break; - case 1: - StartSpriteAnimIfDifferent(sprite, 0); - if (gIntroFrameCounter & 7) - return; - sprite->pos1.x++; - break; - case 2: - StartSpriteAnimIfDifferent(sprite, 2); - if (sprite->pos1.x <= 120 || (gIntroFrameCounter & 7)) - sprite->pos1.x++; - break; - case 3: - StartSpriteAnimIfDifferent(sprite, 3); - break; - case 4: - StartSpriteAnimIfDifferent(sprite, 0); - if (sprite->pos1.x > -32) - sprite->pos1.x -= 2; - break; - } - if (gIntroFrameCounter & 7) - return; - if (sprite->pos2.y != 0) - { - sprite->pos2.y = 0; - } - else - { - switch (Random() & 3) - { - case 0: - sprite->pos2.y = -1; - break; - case 1: - sprite->pos2.y = 1; - break; - case 2: - case 3: - sprite->pos2.y = 0; - break; - } - } -} - -static void sub_813D880(struct Sprite *sprite) -{ - switch (sprite->data0) - { - case 0: - break; - case 1: - if (sprite->pos2.x + sprite->pos1.x < 304) - sprite->pos2.x += 8; - else - sprite->data0 = 2; - break; - case 2: - if (sprite->pos2.x + sprite->pos1.x > 120) - sprite->pos2.x -= 1; - else - sprite->data0 = 3; - break; - case 3: - if (sprite->pos2.x > 0) - sprite->pos2.x -= 2; - break; - } - sprite->pos2.y = Sin((u8)sprite->data1, 8) - gUnknown_0203935A; - sprite->data1 += 4; -} - -static void sub_813D908(struct Sprite *sprite) -{ - if (gTasks[sprite->data0].data[0] == 0) - { - sprite->invisible = TRUE; - } - else if (gTasks[sprite->data0].data[0] != 4) - { - sprite->invisible = FALSE; - } - else - { - DestroySprite(sprite); - } -} - -static u8 CreateGameFreakLogo(s16 a, s16 b, u8 c) -{ - u8 spriteId; - u16 i; - - for (i = 0; i < 9; i++) - { - spriteId = CreateSprite(&gSpriteTemplate_840AF94, gUnknown_0840AF50[i][1] + a, b - 4, 0); - gSprites[spriteId].data0 = c; - StartSpriteAnim(&gSprites[spriteId], gUnknown_0840AF50[i][0]); - } - for (i = 0; i < 8; i++) - { - spriteId = CreateSprite(&gSpriteTemplate_840AFAC, gUnknown_0840AF74[i][1] + a, b + 12, 0); - gSprites[spriteId].data0 = c; - StartSpriteAnim(&gSprites[spriteId], gUnknown_0840AF74[i][0]); - } - spriteId = CreateSprite(&gSpriteTemplate_840AFC4, 120, b - 4, 0); - gSprites[spriteId].data0 = c; - - return spriteId; -} - -#ifdef NONMATCHING -static void sub_813DA64(struct Sprite *sprite) -{ - sprite->data7++; - - switch (sprite->data0) - { - case 0: - default: - sprite->oam.affineMode = 3; - sprite->oam.matrixNum = 1; - CalcCenterToCornerVec(sprite, 1, 3, 3); - sprite->invisible = FALSE; - sprite->data0 = 1; - sprite->data1 = 128; - sprite->data2 = -24; - sprite->data3 = 0; - break; - case 1: - { - s16 r3; - s16 sin1; - s16 r6; - s16 foo; - s16 r5; - s16 r2; - - //_0813DAC0 - if (sprite->data3 < 0x50) - { - sprite->pos2.y = -Sin((u8)sprite->data3, 0x78); - sprite->pos2.x = -Sin((u8)sprite->data3, 0x8C); - if (sprite->data3 > 64) - sprite->oam.priority = 3; - } - //_0813DAF8 - r3 = gSineTable[(u8)sprite->data2]; - sin1 = gSineTable[(u8)(sprite->data2 + 64)]; - r6 = sin1 * sprite->data1 / 256; - foo = sin1 * sprite->data1 / 256; - r5 = -r3 * sprite->data1 / 256; - r2 = r3 * sprite->data1 / 256; - - SetOamMatrix(1, r6, r2, r5, foo); - - if (sprite->data1 < 0x100) - sprite->data1 += 8; - else - sprite->data1 += 32; - if (sprite->data2 < 0x18) - sprite->data2 += 1; - if (sprite->data3 < 64) - sprite->data3 += 2; - else if (!(sprite->data7 & 3)) - sprite->data3 += 1; - break; - } - } - //_0813DB92 -} -#else -__attribute__((naked)) -static void sub_813DA64(struct Sprite *sprite) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - sub sp, 0x4\n\ - adds r4, r0, 0\n\ - ldrh r0, [r4, 0x3C]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x3C]\n\ - movs r1, 0x2E\n\ - ldrsh r0, [r4, r1]\n\ - cmp r0, 0\n\ - beq _0813DA7C\n\ - cmp r0, 0x1\n\ - beq _0813DAC0\n\ -_0813DA7C:\n\ - ldrb r0, [r4, 0x1]\n\ - movs r1, 0x3\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x1]\n\ - ldrb r1, [r4, 0x3]\n\ - movs r0, 0x3F\n\ - negs r0, r0\n\ - ands r0, r1\n\ - movs r1, 0x2\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x3]\n\ - adds r0, r4, 0\n\ - movs r1, 0x1\n\ - movs r2, 0x3\n\ - movs r3, 0x3\n\ - bl CalcCenterToCornerVec\n\ - adds r2, r4, 0\n\ - adds r2, 0x3E\n\ - ldrb r1, [r2]\n\ - movs r0, 0x5\n\ - negs r0, r0\n\ - ands r0, r1\n\ - strb r0, [r2]\n\ - movs r0, 0x1\n\ - strh r0, [r4, 0x2E]\n\ - movs r0, 0x80\n\ - strh r0, [r4, 0x30]\n\ - ldr r0, _0813DABC @ =0x0000ffe8\n\ - strh r0, [r4, 0x32]\n\ - movs r0, 0\n\ - b _0813DB92\n\ - .align 2, 0\n\ -_0813DABC: .4byte 0x0000ffe8\n\ -_0813DAC0:\n\ - ldrh r1, [r4, 0x34]\n\ - movs r2, 0x34\n\ - ldrsh r0, [r4, r2]\n\ - cmp r0, 0x4F\n\ - bgt _0813DAF8\n\ - lsls r0, r1, 24\n\ - lsrs r0, 24\n\ - movs r1, 0x78\n\ - bl Sin\n\ - negs r0, r0\n\ - strh r0, [r4, 0x26]\n\ - ldrh r0, [r4, 0x34]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - movs r1, 0x8C\n\ - bl Sin\n\ - negs r0, r0\n\ - strh r0, [r4, 0x24]\n\ - movs r1, 0x34\n\ - ldrsh r0, [r4, r1]\n\ - cmp r0, 0x40\n\ - ble _0813DAF8\n\ - ldrb r0, [r4, 0x5]\n\ - movs r1, 0xC\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x5]\n\ -_0813DAF8:\n\ - ldr r2, _0813DB60 @ =gSineTable\n\ - ldrh r1, [r4, 0x32]\n\ - lsls r0, r1, 24\n\ - lsrs r0, 23\n\ - adds r0, r2\n\ - ldrh r3, [r0]\n\ - adds r1, 0x40\n\ - lsls r1, 24\n\ - lsrs r1, 23\n\ - adds r1, r2\n\ - movs r2, 0\n\ - ldrsh r0, [r1, r2]\n\ - movs r1, 0x30\n\ - ldrsh r2, [r4, r1]\n\ - adds r1, r0, 0\n\ - muls r1, r2\n\ - adds r0, r1, 0\n\ - cmp r1, 0\n\ - bge _0813DB20\n\ - adds r0, 0xFF\n\ -_0813DB20:\n\ - lsls r0, 8\n\ - lsrs r6, r0, 16\n\ - lsls r0, r3, 16\n\ - asrs r3, r0, 16\n\ - negs r0, r3\n\ - muls r0, r2\n\ - cmp r0, 0\n\ - bge _0813DB32\n\ - adds r0, 0xFF\n\ -_0813DB32:\n\ - lsls r0, 8\n\ - lsrs r5, r0, 16\n\ - adds r0, r3, 0\n\ - muls r0, r2\n\ - cmp r0, 0\n\ - bge _0813DB40\n\ - adds r0, 0xFF\n\ -_0813DB40:\n\ - lsls r0, 8\n\ - lsrs r2, r0, 16\n\ - adds r1, r6, 0\n\ - adds r3, r5, 0\n\ - str r1, [sp]\n\ - movs r0, 0x1\n\ - bl SetOamMatrix\n\ - ldrh r1, [r4, 0x30]\n\ - movs r2, 0x30\n\ - ldrsh r0, [r4, r2]\n\ - cmp r0, 0xFF\n\ - bgt _0813DB64\n\ - adds r0, r1, 0\n\ - adds r0, 0x8\n\ - b _0813DB68\n\ - .align 2, 0\n\ -_0813DB60: .4byte gSineTable\n\ -_0813DB64:\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ -_0813DB68:\n\ - strh r0, [r4, 0x30]\n\ - ldrh r1, [r4, 0x32]\n\ - movs r2, 0x32\n\ - ldrsh r0, [r4, r2]\n\ - cmp r0, 0x17\n\ - bgt _0813DB78\n\ - adds r0, r1, 0x1\n\ - strh r0, [r4, 0x32]\n\ -_0813DB78:\n\ - ldrh r2, [r4, 0x34]\n\ - movs r1, 0x34\n\ - ldrsh r0, [r4, r1]\n\ - cmp r0, 0x3F\n\ - bgt _0813DB86\n\ - adds r0, r2, 0x2\n\ - b _0813DB92\n\ -_0813DB86:\n\ - ldrh r1, [r4, 0x3C]\n\ - movs r0, 0x3\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0813DB94\n\ - adds r0, r2, 0x1\n\ -_0813DB92:\n\ - strh r0, [r4, 0x34]\n\ -_0813DB94:\n\ - add sp, 0x4\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} -#endif - -static void sub_813DB9C(struct Sprite *sprite) -{ - switch (sprite->data0) - { - case 0: - default: - if (sprite->data2 != 0) - sprite->hFlip = TRUE; - else - sprite->hFlip = FALSE; - sprite->data0 = 1; - //fall through - case 1: - if (sprite->pos1.y > 96) - { - sprite->pos1.y -= 4; - if (sprite->data2 != 0) - sprite->pos1.x += 2; - else - sprite->pos1.x -= 2; - } - else - { - sprite->data0++; - sprite->data3 = 8; - } - break; - case 2: - if (sprite->data3 != 0) - { - sprite->data3--; - } - else - { - sprite->data0++; - sprite->data3 = 0; //redundant? - } - break; - case 3: - sprite->oam.affineMode = 3; - sprite->oam.matrixNum = sprite->data1; - CalcCenterToCornerVec(sprite, 0, 3, 3); - if (sprite->data2 != 0) - SetOamMatrix(sprite->data1, -256, 0, 0, 256); - else - SetOamMatrix(sprite->data1, 256, 0, 0, 256); - sprite->data0++; - sprite->data4 = 0; - break; - case 4: - sprite->data4++; - if (sprite->pos1.y + sprite->pos2.y > -32 - && sprite->pos1.x + sprite->pos2.x > -64) - { - u16 r2; - - sprite->pos2.y = -(sprite->data4 * sprite->data4) / 8; - if (sprite->data2 != 0) - sprite->pos2.x += sprite->data4; - else - sprite->pos2.x -= sprite->data4; - if (sprite->data3 < 128) - sprite->data3 += 8; - r2 = 256 - sprite->data3; - if (sprite->data2 != 0) - SetOamMatrix(sprite->data1, -r2, 0, 0, r2); - else - SetOamMatrix(sprite->data1, r2, 0, 0, r2); - } - else - { - DestroySprite(sprite); - } - } -} - -static void sub_813DD58(struct Sprite *sprite) -{ - switch (sprite->data0) - { - case 0: - default: - sprite->invisible = FALSE; - sprite->oam.affineMode = 1; - sprite->oam.matrixNum = sprite->data1; - sprite->data3 = 2048; - sprite->data0 = 1; - //fall through - case 1: - if (sprite->data3 > 256) - { - sprite->data3 -= 128; - if (sprite->data2 != 0) - SetOamMatrix(sprite->data1, -sprite->data3, 0, 0, sprite->data3); - else - SetOamMatrix(sprite->data1, sprite->data3, 0, 0, sprite->data3); - } - else - { - if (sprite->data2 != 0) - SetOamMatrix(sprite->data1, -256, 0, 0, 256); - else - SetOamMatrix(sprite->data1, 256, 0, 0, 256); - sprite->data0++; - } - break; - case 2: - break; - case 3: - sprite->data4++; - sprite->pos2.y = sprite->data4 * sprite->data4 / 32; - if (sprite->data2 != 0) - sprite->pos2.x = sprite->data4 / 4; - else - sprite->pos2.x = -(sprite->data4 / 4); - break; - } -} - -static void sub_813DE70(struct Sprite *sprite) -{ - switch (sprite->data0) - { - case 0: - default: - if (sprite->pos1.x > 40) - { - sprite->pos1.x -= 4; - } - else - { - StartSpriteAnim(sprite, 1); - sprite->data6 = CreateSprite(&gSpriteTemplate_840B084, 16, 104, 100); - sprite->data7 = CreateSprite(&gSpriteTemplate_840B084, 12, 106, 101); - sprite->data0 = 1; - } - break; - case 1: - break; - case 2: - StartSpriteAnim(sprite, 2); - gSprites[sprite->data6].data0 = 1; - gSprites[sprite->data7].data0 = 2; - sprite->data0++; - break; - case 3: - if (sprite->pos1.y > 160) - { - sprite->invisible = 1; - sprite->data0 = 1; - } - else - { - sprite->pos1.y += 2; - sprite->pos1.x--; - } - break; - case 4: - { - s16 r4, r5; - - r5 = gSprites[sprite->data6].pos1.x + gSprites[sprite->data6].pos2.x; - r4 = gSprites[sprite->data6].pos1.y + gSprites[sprite->data6].pos2.y; - DestroySprite(&gSprites[sprite->data6]); - sprite->data6 = sub_813CE88(SPECIES_TORCHIC, r5, r4, 2, 1); - gSprites[sprite->data6].callback = sub_813DD58; - gSprites[sprite->data6].invisible = TRUE; - gSprites[sprite->data6].data1 = 1; - gSprites[sprite->data6].data2 = 1; - sub_813E580(r5, r4); - - r5 = gSprites[sprite->data7].pos1.x + gSprites[sprite->data7].pos2.x; - r4 = gSprites[sprite->data7].pos1.y + gSprites[sprite->data7].pos2.y; - DestroySprite(&gSprites[sprite->data7]); - sprite->data7 = sub_813CE88(SPECIES_MUDKIP, r5, r4, 3, 1); - gSprites[sprite->data7].callback = sub_813DD58; - gSprites[sprite->data7].invisible = TRUE; - gSprites[sprite->data7].data1 = 2; - gSprites[sprite->data7].data2 = 0; - sub_813E580(r5, r4); - - BeginNormalPaletteFade(0xFF0000, 0, 16, 16, RGB(31, 23, 31)); - sprite->data0 = 1; - break; - } - case 5: - gSprites[sprite->data6].data0 = 3; - gSprites[sprite->data7].data0 = 3; - break; - case 6: - DestroySprite(&gSprites[sprite->data6]); - DestroySprite(&gSprites[sprite->data7]); - DestroySprite(sprite); - break; - } -} - -static void sub_813E10C(struct Sprite *sprite) -{ - switch (sprite->data0) - { - case 0: - default: - if (sprite->pos2.x > -56) - { - sprite->pos2.x -= 8; - sprite->pos2.y += 6; - } - else - { - sprite->data6 = sprite->pos1.x; - sprite->data7 = sprite->pos1.y; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 1; - sprite->data1 = 0; - } - break; - case 1: - if (!(sprite->data1 & 1)) - { - if (sprite->data1 & 2) - { - sprite->pos2.x = -1; - sprite->pos2.y = 1; - } - else - { - sprite->pos2.x = 0; - sprite->pos2.y = 0; - } - } - sprite->data1++; - break; - case 2: - sprite->invisible = TRUE; - sprite->pos1.x = sprite->data6; - sprite->pos1.y = sprite->data7; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - break; - case 3: - sprite->invisible = FALSE; - sprite->data1++; - //fall through - case 4: - if (sprite->pos2.x > -56) - { - sprite->pos2.x -= 4; - sprite->pos2.y += 3; - } - else - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 1; - } - break; - } -} - -static void sub_813E210(struct Sprite *sprite) -{ - switch (sprite->data0) - { - case 0: - default: - if (sprite->pos2.x < 56) - { - sprite->pos2.x += 8; - sprite->pos2.y -= 6; - } - else - { - sprite->data6 = sprite->pos1.x; - sprite->data7 = sprite->pos1.y; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 1; - sprite->data1 = 0; - } - break; - case 1: - if (!(sprite->data1 & 1)) - { - if (sprite->data1 & 2) - { - sprite->pos2.x = 1; - sprite->pos2.y = -1; - } - else - { - sprite->pos2.x = 0; - sprite->pos2.y = 0; - } - } - sprite->data1++; - break; - case 2: - sprite->invisible = TRUE; - sprite->pos1.x = sprite->data6; - sprite->pos1.y = sprite->data7; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - break; - case 3: - sprite->invisible = FALSE; - sprite->data1++; - //fall through - case 4: - if (sprite->pos2.x < 56) - { - sprite->pos2.x += 4; - sprite->pos2.y -= 3; - } - else - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 1; - } - break; - } -} - -static void sub_813E30C(struct Sprite *sprite) -{ - u16 r4, r1; - - sprite->data7++; - switch (sprite->data0) - { - case 0: - default: - break; - case 1: - sprite->oam.affineMode = 1; - sprite->oam.matrixNum = 1; - sprite->data0 = 10; - sprite->data4 = 36; - //fall through - case 10: - if (sprite->pos1.x <= 144) - { - sprite->pos1.x += 4; - sprite->pos1.y -= 1; - sprite->pos2.y = -Sin((u8)sprite->data2, 24); - sprite->data2 += 4; - } - sprite->data3 -= sprite->data4; - if ((sprite->data7 & 1) && sprite->data4 != 0) - sprite->data4--; - r4 = gSineTable[(u8)sprite->data3]; - r1 = gSineTable[(u8)(sprite->data3 + 64)]; - SetOamMatrix(1, r1, r4, -r4, r1); - break; - case 2: - sprite->oam.affineMode = 1; - sprite->oam.matrixNum = 2; - sprite->data0 = 20; - sprite->data4 = 36; - //fall through - case 20: - if (sprite->pos1.x <= 96) - { - sprite->pos1.x += 3; - sprite->pos1.y -= 1; - sprite->pos2.y = -Sin((u8)sprite->data2, 24); - sprite->data2 += 4; - } - sprite->data3 -= sprite->data4; - if ((sprite->data7 & 1) && sprite->data4 != 0) - sprite->data4--; - r4 = gSineTable[(u8)sprite->data3]; - r1 = gSineTable[(u8)(sprite->data3 + 64)]; - SetOamMatrix(2, r1, r4, -r4, r1); - break; - } -} - -static void sub_813E4B8(struct Sprite *sprite) -{ - u16 r4; - u16 r2; - u16 r1; - - sprite->data7++; - if (sprite->data7 & 1) - sprite->invisible = FALSE; - else - sprite->invisible = TRUE; - if (sprite->data2 >= 64) - { - DestroySprite(sprite); - return; - } - sprite->data2 += 2; - r4 = Sin((u8)sprite->data2, 40); - sprite->pos2.x = Cos((u8)(sprite->data0 * 32), r4); - sprite->pos2.y = Sin((u8)(sprite->data0 * 32), r4); - if (sprite->data0 == 0) - { - sprite->data3 -= sprite->data1; - if ((sprite->data7 & 1) && sprite->data1 != 0) - sprite->data1--; - r2 = gSineTable[(u8)sprite->data3]; - r1 = gSineTable[(u8)(sprite->data3 + 64)]; - SetOamMatrix(16, r1, r2, -r2, r1); - } -} - -static void sub_813E580(u16 x, u16 y) -{ - u8 i; - u8 spriteId; - - for (i = 0; i < 8; i++) - { - spriteId = CreateSprite(&gSpriteTemplate_840B0B0, x, y, 0); - gSprites[spriteId].oam.affineMode = 1; - gSprites[spriteId].oam.matrixNum = 16; - gSprites[spriteId].data0 = i; - gSprites[spriteId].data1 = 32; - } -} - -static void sub_813E5E0(struct Sprite *sprite) -{ - if (gUnknown_0203931A != 0) - { - DestroySprite(sprite); - } - else - { - sprite->invisible = gSprites[sprite->data0].invisible; - if (sprite->data7 < 12) - sprite->data7++; - sprite->data6 += 4; - sprite->pos1.x = sprite->data4 + gSineTable[(u8)(sprite->data3 + 64)] * sprite->data6 / 256; - //This useless '+ 0' is needed to make the asm match - sprite->pos1.y = sprite->data5 + gSineTable[(u8)(sprite->data3 + 0)] * sprite->data6 / 256; - sprite->pos2.y = gSineTable[(u8)(sprite->data1 + 0)] * sprite->data7 / 256; - sprite->data1 += 16; - if (sprite->pos1.y > sprite->data2) - DestroySprite(sprite); - } -} - -static void sub_813E6C0(struct Sprite *sprite) -{ - u8 spriteId; - u8 i; - s16 var1; - s16 var2; - - if (gUnknown_0203931A != 0) - { - DestroySprite(sprite); - } - else - { - sprite->data7++; - sprite->invisible = TRUE; - if (gSprites[sprite->data0].data0 == 1 && !(sprite->data7 & 3)) - { - var1 = sprite->data1 + gSprites[sprite->data0].pos1.x; - var2 = sprite->data2 + gSprites[sprite->data0].pos1.y; - for (i = 0; i < 3; i++) - { - u8 r3 = gSprites[sprite->data0].subpriority - 1; - //Make redundant copies of these variables to get the asm to match - s16 _var1 = var1; - s16 _var2 = var2; - - spriteId = CreateSprite(&gSpriteTemplate_840B0DC, _var1, _var2, r3); - if (spriteId != 64) - { - gSprites[spriteId].data0 = sprite->data0; - gSprites[spriteId].data1 = (((sprite->data7 >> 2) & 7) << 5) + i * 85; - gSprites[spriteId].data2 = sprite->data3; - gSprites[spriteId].data3 = 104; - gSprites[spriteId].data4 = var1; - gSprites[spriteId].data5 = var2; - gSprites[spriteId].data6 = 0; - } - } - } - } -} - -static void sub_813E7C0(u8 a) -{ - u8 spriteId; - - spriteId = CreateSprite(&gSpriteTemplate_840B0F4, 0, 0, 0); - if (spriteId != 64) - { - gSprites[spriteId].data0 = a; - gSprites[spriteId].data1 = -12; - gSprites[spriteId].data2 = 0; - gSprites[spriteId].data3 = 136; - } -} - -static void sub_813E804(struct Sprite *sprite) -{ - if (gUnknown_0203931A != 0) - { - DestroySprite(sprite); - } - else - { - sprite->invisible = gSprites[sprite->data0].invisible; - sprite->data7++; - if (sprite->data3 < 40) - sprite->data3 += 2; - //This useless '+ 0' is needed to make the asm match - sprite->pos1.x = gSprites[sprite->data0].pos1.x + gSprites[sprite->data0].pos2.x + gSineTable[(u8)(sprite->data1 + 64)] * sprite->data3 / 256; - sprite->pos1.y = gSprites[sprite->data0].pos1.y + gSprites[sprite->data0].pos2.y + gSineTable[(u8)(sprite->data1 + 0)] * sprite->data3 / 512; - sprite->data1 += 2; - sprite->pos2.y = gSineTable[(u8)(sprite->data2 + 0)] / 32; - sprite->data2 += 8; - if ((sprite->data1 & 0xFF) < 128) - sprite->subpriority = gSprites[sprite->data0].subpriority - 1; - else - sprite->subpriority = gSprites[sprite->data0].subpriority + 1; - } -} - -static void sub_813E930(u8 a) -{ - u8 i; - u8 spriteId; - - for (i = 0; i < 8; i++) - { - spriteId = CreateSprite(&gSpriteTemplate_840B124, gSprites[a].pos1.x, gSprites[a].pos1.y, 0); - if (spriteId != 64) - { - gSprites[spriteId].data0 = a; - gSprites[spriteId].data1 = i * 32; - } - } -} - -static void sub_813E980(struct Sprite *sprite) -{ - if (gUnknown_0203931A != 0) - { - DestroySprite(sprite); - } - else - { - u8 r0; - u16 matrixNum; - - sprite->invisible = gSprites[sprite->data0].invisible; - sprite->data7++; - sprite->data6 += 8; - sprite->pos1.x = sprite->data4 + gSineTable[(u8)(sprite->data3 + 64)] * sprite->data6 / 256; - sprite->pos1.y = sprite->data5 + gSineTable[(u8)(sprite->data3 + 0)] * sprite->data6 / 256; - r0 = sprite->data6 / 16; - if (r0 > 9) - r0 = 9; - matrixNum = (r0 + 18) & 31; - sprite->oam.matrixNum = matrixNum; - if (sprite->data6 > 160) - DestroySprite(sprite); - } -} - -static void sub_813EA60(struct Sprite *sprite) -{ - bool32 r6; - s16 r1, r2; - u8 spriteId; - - if (gUnknown_0203931A != 0) - { - DestroySprite(sprite); - } - else - { - sprite->data7++; - sprite->invisible = TRUE; - if (gSprites[sprite->data0].data0 == 1) - { - r6 = (sprite->data7 & 1); - if (!r6) - { - r1 = sprite->data1 + gSprites[sprite->data0].pos1.x; - r2 = sprite->data2 + gSprites[sprite->data0].pos1.y; - spriteId = CreateSprite(&gSpriteTemplate_840B150, r1, r2, gSprites[sprite->data0].subpriority + 1); - if (spriteId != 64) - { - gSprites[spriteId].oam.affineMode = 3; - gSprites[spriteId].oam.matrixNum = 18; - CalcCenterToCornerVec(&gSprites[spriteId], 0, 1, 3); - gSprites[spriteId].data0 = sprite->data0; - gSprites[spriteId].data3 = gUnknown_0840B168[(sprite->data7 >> 1) & 7]; - gSprites[spriteId].data4 = r1; - gSprites[spriteId].data5 = r2; - gSprites[spriteId].data6 = r6; - } - } - } - } -} - -static void InitIntroTorchicAttackAnim(u8 a) -{ - u8 spriteId; - u8 i; - - spriteId = CreateSprite(&gSpriteTemplate_840B170, 0, 0, 0); - if (spriteId != 64) - { - gSprites[spriteId].data0 = a; - gSprites[spriteId].data1 = 0; - gSprites[spriteId].data2 = 8; - gSprites[spriteId].data3 = 24; - } - for (i = 0; i < 10; i++) - { - SetOamMatrix(18 + i, gUnknown_0840B188[i], 0, 0, gUnknown_0840B188[i]); - } -} - -static void sub_813EBBC(struct Sprite *sprite) -{ - if (gUnknown_0203931A != 0) - { - DestroySprite(sprite); - } - else - { - sprite->invisible = gSprites[sprite->data0].invisible; - sprite->data7 += 1; - sprite->data6 += 8; - sprite->pos1.x = sprite->data4 + gSineTable[(u8)(sprite->data3 + 64)] * sprite->data6 / 256; - sprite->pos1.y = sprite->data5 + gSineTable[(u8)(sprite->data3 + 0)] * sprite->data6 / 256; - sprite->pos2.y = gSineTable[(u8)(sprite->data1 + 0)] / 64; - sprite->data1 += 16; - if (sprite->pos1.y < sprite->data2) - DestroySprite(sprite); - } -} - -static void sub_813EC90(struct Sprite *sprite) -{ - bool32 r6; - s16 r1, r2; - u8 spriteId; - u16 foo; - - if (gUnknown_0203931A != 0) - { - DestroySprite(sprite); - } - else - { - sprite->data7++; - sprite->invisible = TRUE; - if (gSprites[sprite->data0].data0 == 1) - { - r6 = sprite->data7 & 1; - if (!r6) - { - r1 = sprite->data1 + gSprites[sprite->data0].pos1.x; - r2 = sprite->data2 + gSprites[sprite->data0].pos1.y; - spriteId = CreateSprite(&gSpriteTemplate_840B1B0, r1, r2, gSprites[sprite->data0].subpriority + 1); - if (spriteId != 64) - { - gSprites[spriteId].oam.affineMode = 3; - gSprites[spriteId].oam.matrixNum = 17; - CalcCenterToCornerVec(&gSprites[spriteId], 0, 1, 3); - gSprites[spriteId].data0 = sprite->data0; - gSprites[spriteId].data1 = ((sprite->data7 >> 2) & 7) << 5; - gSprites[spriteId].data2 = sprite->data3; - gSprites[spriteId].data3 = 232; - gSprites[spriteId].data4 = r1; - gSprites[spriteId].data5 = r2; - gSprites[spriteId].data6 = r6; - } - } - if (sprite->data6 < 112) - sprite->data6 += 4; - } - foo = 256 - gSineTable[(u8)sprite->data6] / 2; - SetOamMatrix(17, foo, 0, 0, foo); - } -} - -static void InitIntroMudkipAttackAnim(u8 a) -{ - u8 spriteId; - - spriteId = CreateSprite(&gSpriteTemplate_840B1C8, 0, 0, 0); - if (spriteId != 64) - { - gSprites[spriteId].data0 = a; - gSprites[spriteId].data1 = 0; - gSprites[spriteId].data2 = 12; - gSprites[spriteId].data3 = 24; - } -} - -static void sub_813EDFC(struct Sprite *sprite) -{ - u16 foo; - - //I'm not sure why a switch statement was used here. - //if (sprite->data0 != 1) would have been more appropriate. - switch (sprite->data0) - { - case 0: - default: - sprite->invisible = FALSE; - sprite->oam.affineMode = 3; - sprite->oam.matrixNum = 18; - CalcCenterToCornerVec(sprite, 0, 3, 3); - sprite->data1 = 0; - sprite->data0 = 1; - //fall through - case 1: - break; - } - sprite->data7++; - if (sprite->data7 & 1) - { - sprite->invisible = TRUE; - } - else - { - sprite->invisible = FALSE; - if (sprite->data1 < 64) - sprite->data1++; - } - foo = 256 - gSineTable[(u8)sprite->data1] / 2; - SetOamMatrix(18, foo, 0, 0, foo); -} diff --git a/src/item.c b/src/item.c deleted file mode 100644 index 36871285a..000000000 --- a/src/item.c +++ /dev/null @@ -1,674 +0,0 @@ -#include "global.h" -#include "hold_effects.h" -#include "item.h" -#include "items.h" -#include "item_use.h" -#include "berry.h" -#include "string_util.h" -#include "strings.h" - -extern u8 gUnknown_02038560; - -// These constants are used in gItems -enum -{ - POCKET_NONE, - POCKET_ITEMS, - POCKET_POKE_BALLS, - POCKET_TM_HM, - POCKET_BERRIES, - POCKET_KEY_ITEMS, -}; - -enum -{ - ITEMS_POCKET, - BALLS_POCKET, - TMHM_POCKET, - BERRIES_POCKET, - KEYITEMS_POCKET -}; - -#if ENGLISH -#include "data/item_descriptions_en.h" -#include "data/items_en.h" -#elif GERMAN -#include "data/item_descriptions_de.h" -#include "data/items_de.h" -#endif - -static void CompactPCItems(void); - -void CopyItemName(u16 itemId, u8 *string) -{ - if (itemId == ITEM_ENIGMA_BERRY) - { - StringCopy(string, GetBerryInfo(0x2B)->name); // berry 0x2b = enigma berry - StringAppend(string, gOtherText_Berry2); - } - else - StringCopy(string, ItemId_GetItem(itemId)->name); -} - -//Unreferenced -s8 CountUsedBagPocketSlots(u8 pocket) -{ - u8 i; - - for (i = 0; i < gBagPockets[pocket].capacity; i++) - { - if (gBagPockets[pocket].itemSlots[i].itemId == 0) - return i; - } - return -1; -} - -bool8 IsBagPocketNonEmpty(u8 pocket) -{ - u8 i; - - for (i = 0; i < gBagPockets[pocket - 1].capacity; i++) - { - if (gBagPockets[pocket - 1].itemSlots[i].itemId != 0) - return TRUE; - } - return FALSE; -} - -bool8 CheckBagHasItem(u16 itemId, u16 count) -{ - u8 i; - u8 pocket; - - if (ItemId_GetPocket(itemId) == 0) - return FALSE; - pocket = ItemId_GetPocket(itemId) - 1; - //Check for item slots that contain the item - for (i = 0; i < gBagPockets[pocket].capacity; i++) - { - if (gBagPockets[pocket].itemSlots[i].itemId == itemId) - { - //Does this item slot contain enough of the item? - if (gBagPockets[pocket].itemSlots[i].quantity >= count) - return TRUE; - count -= gBagPockets[pocket].itemSlots[i].quantity; - //Does this item slot and all previous slots contain enough of the item? - if (count == 0) - return TRUE; - } - } - return FALSE; -} - -bool8 CheckBagHasSpace(u16 itemId, u16 count) -{ - u8 i; - u8 pocket; - u16 slotCapacity; - - if (ItemId_GetPocket(itemId) == 0) - return FALSE; - pocket = ItemId_GetPocket(itemId) - 1; - if (pocket != BERRIES_POCKET) - slotCapacity = 99; - else - slotCapacity = 999; - - //Check space in any existing item slots that already contain this item - for (i = 0; i < gBagPockets[pocket].capacity; i++) - { - if (gBagPockets[pocket].itemSlots[i].itemId == itemId) - { - if (gBagPockets[pocket].itemSlots[i].quantity + count <= slotCapacity) - return TRUE; - if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET) - return FALSE; - count -= slotCapacity - gBagPockets[pocket].itemSlots[i].quantity; - if (count == 0) - return TRUE; - } - } - - //Check space in empty item slots - if (count > 0) - { - for (i = 0; i < gBagPockets[pocket].capacity; i++) - { - if (gBagPockets[pocket].itemSlots[i].itemId == 0) - { - if (count <= slotCapacity) - return TRUE; - else - count -= slotCapacity; - } - } - if (count > 0) - return FALSE; //No more item slots. The bag is full - } - - return TRUE; -} - -// This function matches if gBagPockets is declared non-const, -// but it should be fixed anyway. -#ifdef NONMATCHING -bool8 AddBagItem(u16 itemId, u16 count) -{ - u8 i; - u8 pocket; - u16 slotCapacity; - struct ItemSlot newItems[64]; - - if (ItemId_GetPocket(itemId) == 0) - return FALSE; - pocket = ItemId_GetPocket(itemId) - 1; - //Copy the bag pocket - memcpy(newItems, gBagPockets[pocket].itemSlots, gBagPockets[pocket].capacity * sizeof(struct ItemSlot)); - if (pocket != BERRIES_POCKET) - slotCapacity = 99; - else - slotCapacity = 999; - - //Use any item slots that already contain this item - for (i = 0; i < gBagPockets[pocket].capacity; i++) - { - if (newItems[i].itemId == itemId) - { - if (newItems[i].quantity + count <= slotCapacity) - { - newItems[i].quantity += count; - //Copy pocket back into the bag. - memcpy(gBagPockets[pocket].itemSlots, newItems, gBagPockets[pocket].capacity * sizeof(struct ItemSlot)); - return TRUE; - } - if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET) - return FALSE; - count -= slotCapacity - newItems[i].quantity; - newItems[i].quantity = slotCapacity; - if (count == 0) - goto copy_items; - } - } - - //Put any remaining items into new item slots. - if (count > 0) - { - for (i = 0; i < gBagPockets[pocket].capacity; i++) - { - if (newItems[i].itemId == 0) - { - newItems[i].itemId = itemId; - if (count <= slotCapacity) - { - newItems[i].quantity = count; - goto copy_items; - } - count -= slotCapacity; - newItems[i].quantity = slotCapacity; - } - } - if (count > 0) - return FALSE; //No more empty item slots. The bag is full. - } - - copy_items: - //Copy pocket back into the bag. - memcpy(gBagPockets[pocket].itemSlots, newItems, gBagPockets[pocket].capacity * sizeof(struct ItemSlot)); - return TRUE; -} -#else -__attribute__((naked)) -bool8 AddBagItem(u16 itemId, u16 count) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - sub sp, 0x100\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ - lsls r1, 16\n\ - lsrs r4, r1, 16\n\ - bl ItemId_GetPocket\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080A9510\n\ - mov r0, r8\n\ - bl ItemId_GetPocket\n\ - subs r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - ldr r1, _080A94F8 @ =gBagPockets\n\ - lsls r0, r6, 3\n\ - adds r5, r0, r1\n\ - ldr r1, [r5]\n\ - ldrb r2, [r5, 0x4]\n\ - lsls r2, 2\n\ - mov r0, sp\n\ - bl memcpy\n\ - ldr r7, _080A94FC @ =0x000003e7\n\ - cmp r6, 0x3\n\ - beq _080A9468\n\ - movs r7, 0x63\n\ -_080A9468:\n\ - movs r1, 0\n\ - ldrb r0, [r5, 0x4]\n\ - cmp r1, r0\n\ - bcs _080A94B2\n\ - subs r0, r6, 0x2\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r12, r0\n\ -_080A9478:\n\ - lsls r0, r1, 2\n\ - mov r2, sp\n\ - adds r3, r2, r0\n\ - ldrh r0, [r3]\n\ - cmp r0, r8\n\ - bne _080A94A6\n\ - ldrh r2, [r3, 0x2]\n\ - adds r0, r2, r4\n\ - cmp r0, r7\n\ - ble _080A9500\n\ - mov r0, r12\n\ - cmp r0, 0x1\n\ - bls _080A9510\n\ - subs r0, r7, r2\n\ - subs r0, r4, r0\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - strh r7, [r3, 0x2]\n\ - ldr r2, _080A94F8 @ =gBagPockets\n\ - mov r9, r2\n\ - lsls r3, r6, 3\n\ - cmp r4, 0\n\ - beq _080A9516\n\ -_080A94A6:\n\ - adds r0, r1, 0x1\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - ldrb r0, [r5, 0x4]\n\ - cmp r1, r0\n\ - bcc _080A9478\n\ -_080A94B2:\n\ - ldr r2, _080A94F8 @ =gBagPockets\n\ - mov r9, r2\n\ - lsls r3, r6, 3\n\ - cmp r4, 0\n\ - beq _080A9516\n\ - movs r1, 0\n\ - adds r0, r3, r2\n\ - ldrb r0, [r0, 0x4]\n\ - cmp r1, r0\n\ - bcs _080A94F2\n\ - mov r6, r9\n\ - adds r5, r3, r6\n\ -_080A94CA:\n\ - lsls r0, r1, 2\n\ - mov r6, sp\n\ - adds r2, r6, r0\n\ - ldrh r0, [r2]\n\ - cmp r0, 0\n\ - bne _080A94E6\n\ - mov r0, r8\n\ - strh r0, [r2]\n\ - cmp r4, r7\n\ - bls _080A9514\n\ - subs r0, r4, r7\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - strh r7, [r2, 0x2]\n\ -_080A94E6:\n\ - adds r0, r1, 0x1\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - ldrb r2, [r5, 0x4]\n\ - cmp r1, r2\n\ - bcc _080A94CA\n\ -_080A94F2:\n\ - cmp r4, 0\n\ - beq _080A9516\n\ - b _080A9510\n\ - .align 2, 0\n\ -_080A94F8: .4byte gBagPockets\n\ -_080A94FC: .4byte 0x000003e7\n\ -_080A9500:\n\ - strh r0, [r3, 0x2]\n\ - ldr r0, _080A950C @ =gBagPockets\n\ - lsls r1, r6, 3\n\ - adds r1, r0\n\ - b _080A951A\n\ - .align 2, 0\n\ -_080A950C: .4byte gBagPockets\n\ -_080A9510:\n\ - movs r0, 0\n\ - b _080A9528\n\ -_080A9514:\n\ - strh r4, [r2, 0x2]\n\ -_080A9516:\n\ - mov r6, r9\n\ - adds r1, r3, r6\n\ -_080A951A:\n\ - ldr r0, [r1]\n\ - ldrb r2, [r1, 0x4]\n\ - lsls r2, 2\n\ - mov r1, sp\n\ - bl memcpy\n\ - movs r0, 0x1\n\ -_080A9528:\n\ - add sp, 0x100\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); -} -#endif - -bool8 RemoveBagItem(u16 itemId, u16 count) -{ - u8 i; - u8 pocket; - u16 totalQuantity = 0; - - if (ItemId_GetPocket(itemId) == 0 || itemId == 0) - return FALSE; - pocket = ItemId_GetPocket(itemId) - 1; - - for (i = 0; i < gBagPockets[pocket].capacity; i++) - { - if (gBagPockets[pocket].itemSlots[i].itemId == itemId) - totalQuantity += gBagPockets[pocket].itemSlots[i].quantity; - } - if (totalQuantity < count) - return FALSE; //We don't have enough of the item - - if (gBagPockets[pocket].capacity > gUnknown_02038560 - && gBagPockets[pocket].itemSlots[gUnknown_02038560].itemId == itemId) - { - if (gBagPockets[pocket].itemSlots[gUnknown_02038560].quantity >= count) - { - gBagPockets[pocket].itemSlots[gUnknown_02038560].quantity -= count; - count = 0; - } - else - { - count -= gBagPockets[pocket].itemSlots[gUnknown_02038560].quantity; - gBagPockets[pocket].itemSlots[gUnknown_02038560].quantity = 0; - } - if (gBagPockets[pocket].itemSlots[gUnknown_02038560].quantity == 0) - gBagPockets[pocket].itemSlots[gUnknown_02038560].itemId = 0; - if (count == 0) - return TRUE; - } - - for (i = 0; i < gBagPockets[pocket].capacity; i++) - { - if (gBagPockets[pocket].itemSlots[i].itemId == itemId) - { - if (gBagPockets[pocket].itemSlots[i].quantity >= count) - { - gBagPockets[pocket].itemSlots[i].quantity -= count; - count = 0; - } - else - { - count -= gBagPockets[pocket].itemSlots[i].quantity; - gBagPockets[pocket].itemSlots[i].quantity = 0; - } - if (gBagPockets[pocket].itemSlots[i].quantity == 0) - gBagPockets[pocket].itemSlots[i].itemId = 0; - if (count == 0) - return TRUE; - } - } - return TRUE; -} - -u8 GetPocketByItemId(u16 itemId) -{ - return ItemId_GetPocket(itemId); -} - -void ClearItemSlots(struct ItemSlot *itemSlots, u8 b) -{ - u16 i; - - for (i = 0; i < b; i++) - { - itemSlots[i].itemId = 0; - itemSlots[i].quantity = 0; - } -} - -static s32 FindFreePCItemSlot(void) -{ - s8 i; - - for (i = 0; i < 50; i++) - { - if (gSaveBlock1.pcItems[i].itemId == 0) - return i; - } - return -1; -} - -u8 CountUsedPCItemSlots(void) -{ - u8 usedSlots = 0; - u8 i; - - for (i = 0; i < 50; i++) - { - if (gSaveBlock1.pcItems[i].itemId != 0) - usedSlots++; - } - return usedSlots; -} - -bool8 CheckPCHasItem(u16 itemId, u16 count) -{ - u8 i; - - for (i = 0; i < 50; i++) - { - if (gSaveBlock1.pcItems[i].itemId == itemId && gSaveBlock1.pcItems[i].quantity >= count) - return TRUE; - } - return FALSE; -} - -bool8 AddPCItem(u16 itemId, u16 count) -{ - u8 i; - s8 freeSlot; - struct ItemSlot newItems[50]; - - //Copy PC items - memcpy(newItems, gSaveBlock1.pcItems, sizeof(newItems)); - - //Use any item slots that already contain this item - for (i = 0; i < 50; i++) - { - if (newItems[i].itemId == itemId) - { - if (newItems[i].quantity + count <= 999) - { - newItems[i].quantity += count; - memcpy(gSaveBlock1.pcItems, newItems, sizeof(gSaveBlock1.pcItems)); - return TRUE; - } - count += newItems[i].quantity - 999; - newItems[i].quantity = 999; - if (count == 0) - { - memcpy(gSaveBlock1.pcItems, newItems, sizeof(gSaveBlock1.pcItems)); - return TRUE; - } - } - } - - //Put any remaining items into a new item slot. - if (count > 0) - { - freeSlot = FindFreePCItemSlot(); - if (freeSlot == -1) - return FALSE; - newItems[freeSlot].itemId = itemId; - newItems[freeSlot].quantity = count; - } - - //Copy items back to the PC - memcpy(gSaveBlock1.pcItems, newItems, sizeof(gSaveBlock1.pcItems)); - return TRUE; -} - -void RemovePCItem(u8 index, u16 count) -{ - gSaveBlock1.pcItems[index].quantity -= count; - if (gSaveBlock1.pcItems[index].quantity == 0) - { - gSaveBlock1.pcItems[index].itemId = 0; - CompactPCItems(); - } -} - -static void CompactPCItems(void) -{ - u16 i; - u16 j; - - for (i = 0; i < 49; i++) - { - for (j = i + 1; j <= 49; j++) - { - if (gSaveBlock1.pcItems[i].itemId == 0) - { - struct ItemSlot temp = gSaveBlock1.pcItems[i]; - gSaveBlock1.pcItems[i] = gSaveBlock1.pcItems[j]; - gSaveBlock1.pcItems[j] = temp; - } - } - } -} - -void SwapRegisteredBike(void) -{ - switch (gSaveBlock1.registeredItem) - { - case 0x103: - gSaveBlock1.registeredItem = 0x110; - break; - case 0x110: - gSaveBlock1.registeredItem = 0x103; - break; - } -} - -static u16 SanitizeItemId(u16 itemId) -{ - if (itemId > 0x15C) - return 0; - else - return itemId; -} - -const struct Item *ItemId_GetItem(u16 itemId) -{ - return &gItems[SanitizeItemId(itemId)]; -} - -u16 ItemId_GetId(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].itemId; -} - -u16 ItemId_GetPrice(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].price; -} - -u8 ItemId_GetHoldEffect(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].holdEffect; -} - -u8 ItemId_GetHoldEffectParam(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].holdEffectParam; -} - -const u8 *ItemId_GetDescription(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].description; -} - -bool32 ItemId_CopyDescription(u8 *a, u32 itemId, u32 c) -{ - u32 r5 = c + 1; - const u8 *description = gItems[SanitizeItemId(itemId)].description; - u8 *str = a; - - for (;;) - { - if (*description == 0xFF || *description == 0xFE) - { - r5--; - if (r5 == 0) - { - *str = 0xFF; - return TRUE; - } - if (*description == 0xFF) - return FALSE; - str = a; - description++; - } - else - *(str++) = *(description++); - } -} - -u8 ItemId_GetImportance(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].importance; -} - -u8 ItemId_GetUnknownValue(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].unk19; -} - -u8 ItemId_GetPocket(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].pocket; -} - -u8 ItemId_GetType(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].type; -} - -ItemUseFunc ItemId_GetFieldFunc(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].fieldUseFunc; -} - -u8 ItemId_GetBattleUsage(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].battleUsage; -} - -ItemUseFunc ItemId_GetBattleFunc(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].battleUseFunc; -} - -u8 ItemId_GetSecondaryId(u16 itemId) -{ - return gItems[SanitizeItemId(itemId)].secondaryId; -} diff --git a/src/item_menu.c b/src/item_menu.c deleted file mode 100644 index 350ba3db4..000000000 --- a/src/item_menu.c +++ /dev/null @@ -1,4583 +0,0 @@ -#include "global.h" -#include "berry.h" -#include "berry_tag_screen.h" -#include "data2.h" -#include "decompress.h" -#include "field_effect.h" -#include "field_map_obj_helpers.h" -#include "field_player_avatar.h" -#include "graphics.h" -#include "item.h" -#include "items.h" -#include "item_menu.h" -#include "item_use.h" -#include "link.h" -#include "mail_data.h" -#include "main.h" -#include "map_name_popup.h" -#include "menu.h" -#include "menu_cursor.h" -#include "menu_helpers.h" -#include "money.h" -#include "palette.h" -#include "party_menu.h" -#include "player_pc.h" -#include "pokemon_menu.h" -#include "rom4.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "strings.h" -#include "strings2.h" -#include "string_util.h" -#include "task.h" -#include "text.h" -#include "unknown_task.h" - -// External stuff -extern u8 ewram[]; -extern void gpu_pal_allocator_reset__manage_upper_four(void); -extern void sub_80F9020(void); -extern void sub_80F9988(); -extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16); -extern void PauseVerticalScrollIndicator(); -extern u8 sub_80F9284(void); -extern void sub_808B5B4(); -extern u8 sub_80F92F4(); -extern void sub_80C9C7C(u8); -extern void pal_fill_black(void); -extern bool8 sub_807D770(void); -extern u8 sub_80F931C(); -extern void sub_808A3F8(u8); -extern void sub_80B3050(void); -extern void sub_80546B8(u8); -extern void sub_804E990(u8); -extern void sub_802E424(u8); -extern void sub_8064E2C(void); - -struct PocketScrollState -{ - u8 cursorPos; - u8 scrollTop; - u8 numSlots; - u8 cursorMax; -}; - -struct UnknownStruct2 -{ - u8 unk0; - u8 textLine; - u8 unk2; -}; - -struct UnknownStruct3 -{ - u8 unk0; - u8 unk1; - u8 unk2; -}; - -struct UnknownStruct4 -{ - u8 unk0; - u8 unk1; - u16 unk2; - const u8 *unk4; - TaskFunc unk8; -}; - -struct UnknownStruct5 -{ - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; -}; - -struct UnknownStruct6 -{ - u8 unk0; -}; - -enum -{ - BAG_POCKET_ITEMS, // 0 - BAG_POCKET_POKE_BALLS, // 1 - BAG_POCKET_TMs_HMs, // 2 - BAG_POCKET_BERRIES, // 3 - BAG_POCKET_KEY_ITEMS, // 4 -}; - -enum -{ - RETURN_TO_FIELD_0, - RETURN_TO_BATTLE, - RETURN_TO_PKMN_LIST, - RETURN_TO_SHOP, - RETURN_TO_FIELD_4, - RETURN_TO_FIELD_5, - RETURN_TO_PC, - RETURN_TO_WALLY_BATTLE, -}; - -enum -{ - ITEM_ACTION_USE_0, // 0 - ITEM_ACTION_TOSS, // 1 - ITEM_ACTION_CANCEL_2, // 2 - ITEM_ACTION_REGISTER, // 3 - ITEM_ACTION_USE_4, // 4 - ITEM_ACTION_CANCEL_5, // 5 - ITEM_ACTION_GIVE, // 6 - ITEM_ACTION_CHECK_TAG, // 7 - ITEM_ACTION_NONE, // 8 - ITEM_ACTION_CONFIRM, // 9 -}; - -// ewram -EWRAM_DATA static struct UnknownStruct2 gUnknown_0203853C = {0}; -EWRAM_DATA static struct UnknownStruct3 gUnknown_02038540 = {0}; -EWRAM_DATA static struct UnknownStruct4 gUnknown_02038544 = {0}; -EWRAM_DATA static struct UnknownStruct5 gUnknown_02038550 = {0}; -EWRAM_DATA static struct UnknownStruct6 gUnknown_02038554 = {0}; // There are 3 bytes of padding after this, so I assume it's a struct -EWRAM_DATA static u8 gUnknown_02038558 = 0; -EWRAM_DATA static s8 sCurrentBagPocket = 0; -EWRAM_DATA static u8 gUnknown_0203855A = 0; -EWRAM_DATA static s8 gUnknown_0203855B = 0; -EWRAM_DATA static s8 gUnknown_0203855C = 0; -EWRAM_DATA u16 gScriptItemId = 0; -EWRAM_DATA u8 gUnknown_02038560 = 0; -EWRAM_DATA u8 gUnknown_02038561 = 0; -EWRAM_DATA static u8 gUnknown_02038562 = 0; -EWRAM_DATA static u8 gUnknown_02038563 = 0; -EWRAM_DATA static u8 gUnknown_02038564 = 0; -EWRAM_DATA static u8 sPokeballSpriteId ALIGNED(4) = 0; // HACK: why is there a space before this variable? - -// bss -static u8 sPopupMenuSelection; -static u8 sReturnLocation; -static const u8 *sPopupMenuActionList; - -// common -void (*gUnknown_03005D00)(u8) = NULL; -extern u16 gUnknown_030041B4; -extern struct PocketScrollState gBagPocketScrollStates[]; -extern struct ItemSlot *gCurrentBagPocketItemSlots; // selected pocket item slots -extern const u8 Event_NoRegisteredItem[]; - -#define ewramBerryPic (ewram + 0) -#define ewramBerryPicTemp (ewram + 0x1000) -#define ewramSavedItemsPocket ((struct ItemSlot *)(ewram + 0x1E000)) // saved items pocket (for Wally battle) -#define ewramSavedPokeballsPocket ((struct ItemSlot *)(ewram + 0x1F000)) // saved Pokeballs pocket (for Wally battle) -#define ewramBagSetupStep (ewram[0x1FFFF]) - -extern const struct CompressedSpriteSheet sMaleBagSpriteSheet; -extern const struct CompressedSpriteSheet sFemaleBagSpriteSheet; -extern const struct CompressedSpritePalette sBagSpritePalette; - -const struct BagPocket gBagPockets[NUM_BAG_POCKETS] = -{ - {gSaveBlock1.bagPocket_Items, 20}, - {gSaveBlock1.bagPocket_PokeBalls, 16}, - {gSaveBlock1.bagPocket_TMHM, 64}, - {gSaveBlock1.bagPocket_Berries, 46}, - {gSaveBlock1.bagPocket_KeyItems, 20}, -}; - -static void HandlePopupMenuAction_UseOnField(u8); -static void HandlePopupMenuAction_Toss(u8); -static void sub_80A5F80(u8); -static void HandlePopupMenuAction_Register(u8); -static void HandlePopupMenuAction_UseInBattle(u8); -static void sub_80A7124(u8); -static void HandlePopupMenuAction_Give(u8); -static void HandlePopupMenuAction_CheckTag(u8); -static void HandlePopupMenuAction_Confirm(u8); - -static const struct MenuAction2 sItemPopupMenuActions[] = -{ - {OtherText_Use, HandlePopupMenuAction_UseOnField}, - {OtherText_Toss, HandlePopupMenuAction_Toss}, - {gOtherText_CancelNoTerminator, sub_80A5F80}, - {OtherText_Register, HandlePopupMenuAction_Register}, - {OtherText_Use, HandlePopupMenuAction_UseInBattle}, - {gOtherText_CancelNoTerminator, sub_80A7124}, - {OtherText_Give2, HandlePopupMenuAction_Give}, - {OtherText_CheckTag, HandlePopupMenuAction_CheckTag}, - {gOtherText_CancelWithTerminator, NULL}, - {OtherText_Confirm, HandlePopupMenuAction_Confirm}, -}; - -static const u8 sItemPopupMenuChoicesTable[][6] = -{ - [BAG_POCKET_ITEMS] = - { - ITEM_ACTION_USE_0, - ITEM_ACTION_TOSS, - ITEM_ACTION_GIVE, - ITEM_ACTION_CANCEL_2, - }, - - [BAG_POCKET_POKE_BALLS] = - { - ITEM_ACTION_GIVE, - ITEM_ACTION_TOSS, - ITEM_ACTION_NONE, - ITEM_ACTION_CANCEL_2, - }, - - [BAG_POCKET_TMs_HMs] = - { - ITEM_ACTION_USE_0, - ITEM_ACTION_NONE, - ITEM_ACTION_GIVE, - ITEM_ACTION_CANCEL_2, - }, - - [BAG_POCKET_BERRIES] = - { - ITEM_ACTION_CHECK_TAG, - ITEM_ACTION_USE_0, - ITEM_ACTION_TOSS, - ITEM_ACTION_NONE, - ITEM_ACTION_GIVE, - ITEM_ACTION_CANCEL_2 - }, - - [BAG_POCKET_KEY_ITEMS] = - { - ITEM_ACTION_USE_0, - ITEM_ACTION_NONE, - ITEM_ACTION_REGISTER, - ITEM_ACTION_CANCEL_2, - }, -}; - -const u8 gUnknown_083C16AE[][2] = -{ - {6, 2}, - {6, 2}, - {6, 2}, - {6, 2}, - {2, 0}, -}; - -const u8 gUnknown_083C16B8[] = {7, 9, 8, 2}; - -static void OnItemSelect_Field05(u8); -static void OnBagClose_Field0(u8); -static void OnBagClose_PkmnList(u8); -static void OnItemSelect_PkmnList(u8); -static void OnBagClose_Shop(u8); -static void OnItemSelect_Shop(u8); -static void OnBagClose_Field4(u8); -static void OnItemSelect_Field4(u8); -static void OnBagClose_Field5(u8); -static void OnBagClose_PC(u8); -static void OnItemSelect_PC(u8); -static void OnItemSelect_Battle(u8); -static void OnBagClose_Battle(u8); - -static const struct {TaskFunc onItemSelect; TaskFunc onBagClose;} gUnknown_083C16BC[] = -{ - [RETURN_TO_FIELD_0] = {OnItemSelect_Field05, OnBagClose_Field0}, - [RETURN_TO_BATTLE] = {OnItemSelect_Battle, OnBagClose_Battle}, - [RETURN_TO_PKMN_LIST] = {OnItemSelect_PkmnList, OnBagClose_PkmnList}, - [RETURN_TO_SHOP] = {OnItemSelect_Shop, OnBagClose_Shop}, - [RETURN_TO_FIELD_4] = {OnItemSelect_Field4, OnBagClose_Field4}, - [RETURN_TO_FIELD_5] = {OnItemSelect_Field05, OnBagClose_Field5}, - [RETURN_TO_PC] = {OnItemSelect_PC, OnBagClose_PC}, -}; - -static void sub_80A5E60(u8); -static void sub_80A5E90(u8); - -static const struct YesNoFuncTable gUnknown_083C16F4 = {sub_80A5E60, sub_80A5E90}; - -static void sub_80A65AC(u8); -static void sub_80A6618(u8); - -const struct YesNoFuncTable gUnknown_083C16FC = {sub_80A65AC, sub_80A6618}; - -void sub_80A34E8(void); -static bool8 LoadBagGraphicsMultistep(void); -static void sub_80A362C(void); -static void sub_80A3740(void); -static void sub_80A396C(u16 *, u8, u8, u8); -static void sub_80A39B8(u16 *, u8); -static void sub_80A39E4(u16 *, u8, u8, s8); -static void DrawPocketIndicatorDots(u16 *, u8); -static void SortItemSlots(struct BagPocket); -static void UpdateAllBagPockets(void); -static void sub_80A3D24(u8); -static void sub_80A3D40(void); -static void RemoveSelectIconFromRegisteredItem(void); -static void sub_80A48E8(u16, int, int); -static void ItemListMenu_InitDescription(s16); -static void ItemListMenu_ChangeDescription(s16, int); -static void sub_80A4F68(u8); -static void sub_80A50C8(u8); -static void sub_80A5AE4(u8); -static void sub_80A5BF8(u8); -static void Task_CallItemUseOnFieldCallback(u8); -static void sub_80A6444(u8); -static void sub_80A648C(u8); -static void Task_BuyHowManyDialogueHandleInput(u8); -static void BuyMenuPrintItemQuantityAndPrice(u8); -static void BuyMenuDisplayMessage(u16, u16); -static void sub_80A683C(void); -static void sub_80A6870(u16, u8); -static void sub_80A699C(void); -static void sub_80A7230(u8); -static void ItemListMenu_InitMenu(void); -static void sub_80A73C0(void); -static void sub_80A73F0(void); -static void sub_80A73FC(void); -static void sub_80A740C(void); -static void sub_80A7420(void); -static void sub_80A751C(void); -static void sub_80A7528(u8); -static void sub_80A7590(void); -static void sub_80A75E4(void); -static void sub_80A7630(void); -static void sub_80A763C(void); -static void sub_80A76A0(void); -static void sub_80A770C(void); -static void DisplayCannotUseItemMessage(int, const u8 *, TaskFunc, int); -static void sub_80A7768(void); -static void sub_80A7828(void); -static void sub_80A7834(int, int); -static bool32 sub_80A78A0(void); -static void sub_80A78B8(void); -static bool32 sub_80A78C4(void); -static void sub_80A78E8(void); -static int sub_80A78F4(void); -static void sub_80A7918(void); -static int sub_80A7924(void); -static int sub_80A7958(void); -static void sub_80A7970(void); -static void sub_80A797C(void); -static int sub_80A7988(void); -static void sub_80A79B4(struct Sprite *); -static void sub_80A79EC(struct Sprite *); -static void sub_80A7A94(struct Sprite *); -static void sub_80A7AE4(struct Sprite *); -static void CreateBagSprite(void); -static void sub_80A7B6C(struct Sprite *); -static void CreateBagPokeballSprite(u8); -static void sub_80A7C64(void); - -static void sub_80A3118(void) -{ - AnimateSprites(); - BuildOamBuffer(); - RunTasks(); - sub_80A740C(); - UpdatePaletteFade(); -} - -static void sub_80A3134(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - - { - const void *src = gBGTilemapBuffers[1]; - void *dst = (void *)(VRAM + 0x2000); - - DmaCopy16(3, src, dst, 0x800); - } - - { - const void *src = gBGTilemapBuffers[2]; - void *dst = (void *)(VRAM + 0x6000); - - DmaCopy16(3, src, dst, 0x800); - } -} - -static bool8 SetupBagMultistep(void) -{ - u32 index; - u16 savedIme; - - switch (gMain.state) - { - case 0: - sub_80F9438(); - sub_80A34E8(); - gMain.state++; - break; - case 1: - remove_some_task(); - gMain.state++; - break; - case 2: - gpu_pal_allocator_reset__manage_upper_four(); - gMain.state++; - break; - case 3: - sub_80F9020(); - ewramBagSetupStep = 0; - gMain.state++; - break; - case 4: - ResetPaletteFade(); - gPaletteFade.bufferTransferDisabled = TRUE; - gMain.state++; - break; - case 5: - ResetSpriteData(); - gMain.state++; - break; - case 6: - if (LoadBagGraphicsMultistep() == FALSE) - break; - gMain.state++; - break; - case 7: - SetUpWindowConfig(&gWindowConfig_81E6DFC); - gMain.state++; - break; - case 8: - MultistepInitMenuWindowBegin(&gWindowConfig_81E6DFC); - gMain.state++; - break; - case 9: - if (!MultistepInitMenuWindowContinue()) - break; - gMain.state++; - break; - case 10: - sub_80F944C(); - LoadScrollIndicatorPalette(); - CreateVerticalScrollIndicators(0, 172, 12); - CreateVerticalScrollIndicators(1, 172, 148); - CreateVerticalScrollIndicators(2, 28, 88); - CreateVerticalScrollIndicators(3, 100, 88); - sub_80F9988(0, 2); - sub_80F9988(1, 2); - sub_80F9988(2, 2); - sub_80F9988(3, 2); - if (sReturnLocation == RETURN_TO_FIELD_4 || sReturnLocation == RETURN_TO_FIELD_5) - { - sub_80F979C(2, 1); - sub_80F979C(3, 1); - } - gMain.state++; - break; - case 11: - gUnknown_0203855A = 16; - sub_80A39B8(gBGTilemapBuffers[2], sCurrentBagPocket + 1); - DrawPocketIndicatorDots(gBGTilemapBuffers[2], sCurrentBagPocket); - UpdateAllBagPockets(); - SortItemSlots(gBagPockets[2]); - SortItemSlots(gBagPockets[3]); - sub_80A3D40(); - gCurrentBagPocketItemSlots = gBagPockets[sCurrentBagPocket].itemSlots; - sub_80A362C(); - gMain.state++; - break; - case 12: - sub_80A48E8(0xFFFF, 0, 7); - index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - ItemListMenu_InitDescription(gCurrentBagPocketItemSlots[index].itemId); - ItemListMenu_InitMenu(); - gUnknown_0203855B = sCurrentBagPocket + 1; - gUnknown_0203855C = 0; - gMain.state++; - break; - case 13: - CreateBagSprite(); - CreateBagPokeballSprite(0); - sub_80A3740(); - gMain.state++; - break; - case 14: - savedIme = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = savedIme; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - gPaletteFade.bufferTransferDisabled = FALSE; - gMain.state++; - break; - case 15: - if (sub_8055870() == TRUE) - break; - gMain.state++; - break; - case 16: - SetVBlankCallback(sub_80A3134); - SetMainCallback2(sub_80A3118); - sub_80A751C(); - sub_80A7630(); - sub_80A770C(); - sub_80A7828(); - sub_80A78B8(); - return TRUE; - } - return FALSE; -} - -static bool8 sub_80A34B4(void) -{ - while (1) - { - if (SetupBagMultistep() == TRUE) - { - sPopupMenuSelection = 0; - ResetTasks(); - return TRUE; - } - if (sub_80F9344() == TRUE) - break; - } - return FALSE; -} - - -void sub_80A34E8(void) -{ - sub_80F9368(); - REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(12) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(4) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; - REG_BLDCNT = 0; -} - -static bool8 LoadBagGraphicsMultistep(void) -{ - switch (ewramBagSetupStep) - { - case 0: - LZDecompressVram(gBagScreen_Gfx, (void *)(VRAM + 0x4000)); - ewramBagSetupStep++; - break; - case 1: - CpuCopy16(gUnknown_08E77004, gBGTilemapBuffers[2], 0x800); - ewramBagSetupStep++; - break; - case 2: - if (gSaveBlock2.playerGender == MALE || sReturnLocation == RETURN_TO_WALLY_BATTLE) - LoadCompressedPalette(gBagScreenMale_Pal, 0, 64); - else - LoadCompressedPalette(gBagScreenFemale_Pal, 0, 64); - ewramBagSetupStep++; - break; - case 3: - if (gSaveBlock2.playerGender == MALE || sReturnLocation == RETURN_TO_WALLY_BATTLE) - LoadCompressedObjectPic(&sMaleBagSpriteSheet); - else - LoadCompressedObjectPic(&sFemaleBagSpriteSheet); - ewramBagSetupStep++; - break; - case 4: - LoadCompressedObjectPalette(&sBagSpritePalette); - ewramBagSetupStep = 0; - return TRUE; - } - return FALSE; -} - -static void sub_80A362C(void) -{ - u8 i; - - for (i = 0; i < 5; i++) - { - u8 r3; - - if (sReturnLocation == RETURN_TO_FIELD_5) - r3 = gBagPocketScrollStates[i].numSlots - 1; - else - r3 = gBagPocketScrollStates[i].numSlots; - - if (gBagPocketScrollStates[i].scrollTop != 0) - { - if (gBagPocketScrollStates[i].scrollTop + gBagPocketScrollStates[i].cursorMax > r3) - gBagPocketScrollStates[i].scrollTop = r3 - gBagPocketScrollStates[i].cursorMax; - } - else - { - if (gBagPocketScrollStates[i].cursorPos > r3) - gBagPocketScrollStates[i].cursorPos = r3; - } - } -} - -void ResetBagScrollPositions(void) -{ - u16 i; - - for (i = 0; i < NUM_BAG_POCKETS; i++) - { - gBagPocketScrollStates[i].cursorPos = 0; - gBagPocketScrollStates[i].scrollTop = 0; - gBagPocketScrollStates[i].numSlots = 0; - gBagPocketScrollStates[i].cursorMax = 0; - } - sCurrentBagPocket = 0; -} - -static void sub_80A36B8(u16 *a, u8 b, u8 c, u8 d, u8 e) -{ - u16 i; - u16 j; - - for (i = c; i <= c + e; i++) - { - for (j = b; j <= b + d; j++) - { - u32 index = j + i * 32; - - a[index] = 0; - } - } -} - -void ClearBag(void) -{ - u16 i; - - for (i = 0; i < NUM_BAG_POCKETS; i++) - ClearItemSlots(gBagPockets[i].itemSlots, gBagPockets[i].capacity); - ResetBagScrollPositions(); -} - -static void sub_80A3740(void) -{ - const u16 colors[2] = {RGB(14, 15, 16), RGB_WHITE}; - - LoadPalette(&colors[1], 0xD1, sizeof(colors[1])); - LoadPalette(&colors[0], 0xD8, sizeof(colors[0])); -} - -static void sub_80A3770(void) -{ - if (sReturnLocation == RETURN_TO_FIELD_0) - { - sPopupMenuActionList = sItemPopupMenuChoicesTable[sCurrentBagPocket]; - if (sCurrentBagPocket != BAG_POCKET_BERRIES) - gUnknown_02038564 = 4; - else - gUnknown_02038564 = 6; - } -} - -static void sub_80A37C0(u8 taskId) -{ - gTasks[taskId].func = sub_80A50C8; - StartVerticalScrollIndicators(0); - StartVerticalScrollIndicators(1); - StartVerticalScrollIndicators(2); - StartVerticalScrollIndicators(3); -} - -static void sub_80A37F8(u8 taskId) -{ - u8 r5 = gUnknown_0203855A; - - if (r5 < 16) - { - gUnknown_0203855A++; - sub_80A396C(gBGTilemapBuffers[2], r5, gUnknown_0203855A, 0x4F); - sub_80A39E4(gBGTilemapBuffers[2], sCurrentBagPocket + 1, gUnknown_0203855A / 2, gTasks[taskId].data[5]); - gUnknown_02038558 = 1; - sub_80A48E8(taskId, r5 / 2, gUnknown_0203855A / 2 - 1); - gUnknown_02038558 = 0; - return; - } - - if (gLinkOpen == TRUE) - { - u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - - ItemListMenu_ChangeDescription(gCurrentBagPocketItemSlots[index].itemId, gUnknown_02038562); - gUnknown_02038562++; - } - else - { - while (gUnknown_02038562 < 3) - { - u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - - ItemListMenu_ChangeDescription(gCurrentBagPocketItemSlots[index].itemId, gUnknown_02038562); - gUnknown_02038562++; - } - } - if (gUnknown_02038562 == 3) - { - gUnknown_0203855A = 16; - gUnknown_0203855B = sCurrentBagPocket + 1; - sub_80A37C0(FindTaskIdByFunc(sub_80A4F68)); - DestroyTask(taskId); - ItemListMenu_InitMenu(); - sub_80F979C(2, 0); - sub_80F979C(3, 0); - } -} - -static void sub_80A3954(u16 *a) -{ - CpuCopy16(gUnknown_08E77004, a, 0x800); -} - -static void sub_80A396C(u16 *a, u8 b, u8 c, u8 d) -{ - u16 *dst = a + 14 + (b + 2) * 32; - u16 i; - - while (c > b++) - { - for (i = 0; i < 15; i++) - dst[i] = d; - dst += 32; - } -} - -static void sub_80A39B8(u16 *a, u8 b) -{ - u8 var = b * 2; - - sub_809D104(a, 4, 10, gUnknown_08E96EC8, 0, var, 8, 2); -} - -static void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d) -{ - u16 r2 = b * 2; - u16 r7; - - if (d == -1) - { - r7 = (b + 1) * 2; - if (b == 5) - r7 = 2; - - sub_809D104(a, 4, 10, gUnknown_08E96EC8, 8 - c, r2, c, 2); - sub_809D104(a, c + 4, 10, gUnknown_08E96EC8, 0, r7, 8 - c, 2); - } - else if (d == 1) - { - r7 = (b - 1) * 2; - if (b == 1) - r7 = 10; - - sub_809D104(a, 4, 10, gUnknown_08E96EC8, c, r7, 8 - c, 2); - sub_809D104(a, 12 - c, 10, gUnknown_08E96EC8, 0, r2, c, 2); - } -} - -// Draws dots under the bag sprite, showing which pocket is selected -static void DrawPocketIndicatorDots(u16 *tileMapBuffer, u8 selectedPocket) -{ - u8 i; - - for (i = 0; i < NUM_BAG_POCKETS; i++) - { - if (i == selectedPocket) - tileMapBuffer[0x125 + i] = 0x107D; - else - tileMapBuffer[0x125 + i] = 0x107C; - } -} - -static void ChangePocket(u16 *tileMapBuffer, s8 delta) -{ - u8 taskId; - - sCurrentBagPocket += delta; - // Wrap around - if (sCurrentBagPocket >= NUM_BAG_POCKETS) - sCurrentBagPocket = 0; - if (sCurrentBagPocket < 0) - sCurrentBagPocket = NUM_BAG_POCKETS - 1; - - sub_80A76A0(); - sub_80A7590(); - gCurrentBagPocketItemSlots = gBagPockets[sCurrentBagPocket].itemSlots; - sub_80A3D24(sCurrentBagPocket); - gUnknown_0203855A = 0; - sub_80A3954(tileMapBuffer); - sub_80A396C(tileMapBuffer, 0, 16, 3); - sub_80A39B8(tileMapBuffer, 0); - gUnknown_0203855B = 6; - gUnknown_02038562 = 0; - taskId = FindTaskIdByFunc(sub_80A37F8); - if (taskId == 0xFF) - taskId = CreateTask(sub_80A37F8, 8); - gTasks[taskId].data[5] = delta; -} - -static void SwapItemSlots(struct ItemSlot *a, struct ItemSlot *b) -{ - struct ItemSlot temp = *a; - - *a = *b; - *b = temp; -} - -static void RemoveEmptyItemSlots(struct BagPocket pocket) -{ - u16 i; - u16 j; - - for (i = 0; i < pocket.capacity - 1; i++) - { - for (j = i + 1; j < pocket.capacity; j++) - { - if (pocket.itemSlots[i].quantity == 0) - SwapItemSlots(&pocket.itemSlots[i], &pocket.itemSlots[j]); - } - } -} - -static void SortItemSlots(struct BagPocket pocket) -{ - u16 i; - u16 j; - - for (i = 0; i < pocket.capacity; i++) - { - for (j = i + 1; j < pocket.capacity; j++) - { - if (pocket.itemSlots[i].quantity != 0 && pocket.itemSlots[j].quantity != 0 - && pocket.itemSlots[i].itemId > pocket.itemSlots[j].itemId) - SwapItemSlots(&pocket.itemSlots[i], &pocket.itemSlots[j]); - } - } -} - -static void UpdateBagPocket(u8 pocketNum) -{ - u16 i; - - gBagPocketScrollStates[pocketNum].numSlots = 0; - for (i = 0; i < gBagPockets[pocketNum].capacity; i++) - { - if (gBagPockets[pocketNum].itemSlots[i].quantity != 0) - gBagPocketScrollStates[pocketNum].numSlots++; - } - RemoveEmptyItemSlots(gBagPockets[pocketNum]); -} - -static void UpdateAllBagPockets(void) -{ - u8 i; - - for (i = 0; i < NUM_BAG_POCKETS; i++) - UpdateBagPocket(i); -} - -static void sub_80A3D24(u8 pocketNum) -{ - if (gBagPocketScrollStates[pocketNum].numSlots >= 7) - gBagPocketScrollStates[pocketNum].cursorMax = 7; - else - gBagPocketScrollStates[pocketNum].cursorMax = gBagPocketScrollStates[pocketNum].numSlots; -} - -static void sub_80A3D40(void) -{ - u8 i; - - for (i = 0; i < NUM_BAG_POCKETS; i++) - sub_80A3D24(i); -} - -static void sub_80A3D5C(u8 taskId) -{ - u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - - gCurrentBagPocketItemSlots[index].quantity -= gTasks[taskId].data[1]; - if (gCurrentBagPocketItemSlots[index].quantity == 0) // item slot will be removed if the quantity is zero - { - // Un-register the item if registered - if (gSaveBlock1.registeredItem == gCurrentBagPocketItemSlots[index].itemId) - { - RemoveSelectIconFromRegisteredItem(); - gSaveBlock1.registeredItem = ITEM_NONE; - } - - gCurrentBagPocketItemSlots[index].itemId = ITEM_NONE; - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 7 == gBagPocketScrollStates[sCurrentBagPocket].numSlots - && gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) - gBagPocketScrollStates[sCurrentBagPocket].scrollTop--; - UpdateBagPocket(sCurrentBagPocket); - } - sub_80A3D24(sCurrentBagPocket); -} - -void sub_80A3E0C(void) -{ - u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - - if (gCurrentBagPocketItemSlots[index].quantity == 0) - { - gCurrentBagPocketItemSlots[index].itemId = 0; - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 7 == gBagPocketScrollStates[sCurrentBagPocket].numSlots - && gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) - gBagPocketScrollStates[sCurrentBagPocket].scrollTop--; - UpdateBagPocket(sCurrentBagPocket); - } - sub_80A3D24(sCurrentBagPocket); -} - -static void nullsub_16(void) -{ -} - -static void sub_80A3E70(u8 a, u8 b) -{ - struct ItemSlot temp = gCurrentBagPocketItemSlots[a]; - - gCurrentBagPocketItemSlots[a] = gCurrentBagPocketItemSlots[b]; - gCurrentBagPocketItemSlots[b] = temp; -} - -static void sub_80A3E90(u8 taskId) -{ - PlaySE(SE_SELECT); - nullsub_16(); - sub_80A3E70( - gTasks[taskId].data[10] - 1, - gBagPocketScrollStates[sCurrentBagPocket].cursorPos + gBagPocketScrollStates[sCurrentBagPocket].scrollTop); - gTasks[taskId].data[10] = 0; - sub_80A763C(); - sub_80A7528(0); - ItemListMenu_InitMenu(); -} - -static void sub_80A3EF4(u8 taskId) -{ - u8 r2; - - PlaySE(SE_SELECT); - nullsub_16(); - r2 = gTasks[taskId].data[10] - gBagPocketScrollStates[sCurrentBagPocket].scrollTop - 1; - gTasks[taskId].data[10] = 0; - if (r2 < 8) - sub_80A48E8(taskId, r2, r2); - sub_80A7528(0); -} - -static void sub_80A3F50(u8 taskId) -{ - gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A7528(1); -} - -void sub_80A3FA0(u16 *a, u8 b, u8 c, u8 d, u8 e, u16 f) -{ - s16 i; - s16 j; - - for (i = c; i < c + e; i++) - { - for (j = b; j < b + d; j++) - { - u32 index = j + i * 32; - - a[index] = f; - } - } -} - -static void sub_80A4008(u16 *a, u8 b, u8 c, u8 d, u8 e) -{ - sub_80A3FA0(a, b, c, d, e, 1); -} - -static void DrawSelectIcon(u32 itemPos) -{ - u16 *ptr1 = gBGTilemapBuffers[2] + 0x5A; - - ptr1 += itemPos * 64; - ptr1[0] = 0x5A; - ptr1[1] = 0x5B; - ptr1[2] = 0x5C; - ptr1[32] = 0x6A; - ptr1[33] = 0x6B; - ptr1[34] = 0x6C; -} - -static void MoveSelectIcon(u8 itemPos) -{ - u16 i; - u16 *ptr; - - ptr = gBGTilemapBuffers[2] + 0x5A; - for (i = 0; i < 16; i++) - { - ptr[0] = 0x4F; - ptr[1] = 0x4F; - ptr[2] = 0x4F; - ptr += 32; - } - - ptr = gBGTilemapBuffers[2] + 0x5A + itemPos * 64; - ptr[0] = 0x5A; - ptr[1] = 0x5B; - ptr[2] = 0x5C; - ptr[32] = 0x6A; - ptr[33] = 0x6B; - ptr[34] = 0x6C; -} - -static void EraseSelectIcon(u8 itemPos) -{ - u16 *ptr = gBGTilemapBuffers[2] + 0x5A; - - ptr += itemPos * 64; - ptr[0] = 0x4F; - ptr[1] = 0x4F; - ptr[2] = 0x4F; - ptr[32] = 0x4F; - ptr[33] = 0x4F; - ptr[34] = 0x4F; -} - -static void RemoveSelectIconFromRegisteredItem(void) -{ - u8 i; - - for (i = 0; i < 8; i++) - { - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i == gBagPocketScrollStates[sCurrentBagPocket].numSlots) - break; - if (gCurrentBagPocketItemSlots[gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i].itemId == gSaveBlock1.registeredItem) - { - EraseSelectIcon(i); - break; - } - } -} - -static void AddSelectIconToRegisteredItem(void) -{ - RemoveSelectIconFromRegisteredItem(); - MoveSelectIcon(gBagPocketScrollStates[sCurrentBagPocket].cursorPos); -} - -void sub_80A4164(u8 *dest, u16 value, enum StringConvertMode mode, u8 digits) -{ - *dest++ = CHAR_MULT_SIGN; - dest[0] = EXT_CTRL_CODE_BEGIN; - dest[1] = 0x14; - dest[2] = 6; - dest += 3; - ConvertIntToDecimalStringN(dest, value, mode, digits); -} - -void sub_80A418C(u16 value, enum StringConvertMode mode, u8 c, u8 d, u8 digits) -{ - sub_80A4164(gStringVar1, value, mode, digits); - MenuPrint(gStringVar1, c, d); -} - -static void sub_80A41D4(u8 taskId) -{ - sub_80A763C(); -} - -static void sub_80A41E0(u8 *a, u16 b, const u8 *c, u16 d, u8 e) -{ - a[0] = EXT_CTRL_CODE_BEGIN; - a[1] = 0x13; - a[2] = 8; - a += 3; - a = ConvertIntToDecimalStringN(a, b, STR_CONV_MODE_LEADING_ZEROS, 2); - a[0] = EXT_CTRL_CODE_BEGIN; - a[1] = 0x13; - a[2] = 0x18; - a += 3; - a = sub_8072C74(a, c, 0x78 - (e + 1) * 6, 0); - *a++ = CHAR_MULT_SIGN; - sub_8072C14(a, d, 0x78, 1); -} - -static u8 *sub_80A425C(u8 taskId, u8 *text, u8 c) -{ - if (gTasks[taskId].data[10] - gBagPocketScrollStates[sCurrentBagPocket].scrollTop - 1 == c) - { - text[0] = EXT_CTRL_CODE_BEGIN; - text[1] = 1; - text[2] = 2; - text += 3; - } - return text; -} - -static bool8 sub_80A42B0(u8 itemPos, int b) -{ - u8 r5; - u16 *ptr; - struct UnknownStruct3 *r8 = &gUnknown_02038540; - - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + itemPos > gBagPocketScrollStates[sCurrentBagPocket].numSlots) - return TRUE; - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + itemPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) - { - if (sReturnLocation == RETURN_TO_FIELD_5) - return TRUE; - r5 = itemPos * 2 + 2; - sub_8072C74(gStringVar1, gOtherText_CloseBag, 0x78, 0); - MenuPrint(gStringVar1, 14, r5); - ptr = gBGTilemapBuffers[2] + 14 + r5 * 32; - ptr[0] = 0x4F; - ptr[1] = 0x4F; - ptr[32] = 0x4F; - ptr[33] = 0x4F; - if (itemPos == 7) - return TRUE; - if ((b == 1 && r8->unk2 != 0) || b == 2) - MenuFillWindowRectWithBlankTile(14, r5 + 2, 29, 13); - else - MenuFillWindowRectWithBlankTile(14, r5 + 2, 29, 17); - return TRUE; - } - return FALSE; -} - -static void sub_80A4380(u16 a, int b, int c, int d) -{ - u8 i; - - for (i = b; i <= c; i++) - { - u8 r4; - u8 r5; - u8 *text; - - if (sub_80A42B0(i, d) == TRUE) - break; - r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; - r5 = i * 2 + 2; - text = gStringVar1; - text = sub_80A425C(a, text, i); - text = sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x66, 0); - *text++ = CHAR_MULT_SIGN; - sub_8072C14(text, gCurrentBagPocketItemSlots[r4].quantity, 0x78, 1); - MenuPrint(gStringVar1, 14, r5); - } -} - -static void sub_80A444C(u16 a, int b, int c, int d) -{ - u8 i; - - for (i = b; i <= c; i++) - { - u8 r4; - u8 r5; - u8 *text; - - if (sub_80A42B0(i, d) == TRUE) - break; - r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; - r5 = i * 2 + 2; - text = gStringVar1; - text = sub_80A425C(a, text, i); -#if ENGLISH - sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x60, 0); -#else - sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x63, 0); -#endif - MenuPrint(gStringVar1, 14, r5); - if (gUnknown_02038558 != 0) - { - if (gCurrentBagPocketItemSlots[r4].itemId == gSaveBlock1.registeredItem) - DrawSelectIcon(i); - } - else - { - if (gCurrentBagPocketItemSlots[r4].itemId == gSaveBlock1.registeredItem) - MoveSelectIcon(i); - else - EraseSelectIcon(i); - } - } -} - -// more gBGTilemapBuffers shenanigans -#ifdef NONMATCHING -static void sub_80A4548(u16 a, int b, int c, int d) -{ - u8 i; - - for (i = b; i <= c; i++) - { - u8 r4; - u8 sp10; - u32 r5; - u8 *text; - - if (sub_80A42B0(i, d) == TRUE) - break; - r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; - sp10 = i * 2 + 2; - r5 = sp10 * 32 + 14; - text = gStringVar1; - text = sub_80A425C(a, text, i); - if (gCurrentBagPocketItemSlots[r4].itemId < 0x153) - { - const u8 *r2; - - gBGTilemapBuffers[2][r5 + 0] = 0x59; - gBGTilemapBuffers[2][r5 + 1] = 0x4F; - gBGTilemapBuffers[2][r5 + 32] = 0x69; - gBGTilemapBuffers[2][r5 + 33] = 0x4F; - r2 = gMoveNames[ItemIdToBattleMoveId(gCurrentBagPocketItemSlots[r4].itemId)]; - sub_80A41E0(text, gCurrentBagPocketItemSlots[r4].itemId - 288, r2, gCurrentBagPocketItemSlots[r4].quantity, 2); - } - else - { - const u8 *moveName; - - gBGTilemapBuffers[2][r5 + 0] = 0x105D; - gBGTilemapBuffers[2][r5 + 1] = 0x105E; - gBGTilemapBuffers[2][r5 + 32] = 0x106D; - gBGTilemapBuffers[2][r5 + 33] = 0x106E; - text[0] = EXT_CTRL_CODE_BEGIN; - text[1] = 0x13; - text[2] = 0x11; - text += 3; - text = ConvertIntToDecimalString(text, gCurrentBagPocketItemSlots[r4].itemId); - text[0] = EXT_CTRL_CODE_BEGIN; - text[1] = 0x13; - text[2] = 0x18; - text += 3; - moveName = gMoveNames[ItemIdToBattleMoveId(gCurrentBagPocketItemSlots[r4].itemId)]; - sub_8072C74(text, moveName, 0x78, 0); - } - MenuPrint(gStringVar1, 14, sp10); - } -} -#else -__attribute__((naked)) -static void sub_80A4548(u16 a, int b, int c, int d) -{ - 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\ - str r2, [sp, 0x8]\n\ - str r3, [sp, 0xC]\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x4]\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r8, r1\n\ - ldr r0, _080A456C @ =gBGTilemapBuffers + 0x1000\n\ - mov r9, r0\n\ - b _080A46C2\n\ - .align 2, 0\n\ -_080A456C: .4byte gBGTilemapBuffers + 0x1000\n\ -_080A4570:\n\ - ldr r1, _080A461C @ =gBagPocketScrollStates\n\ - ldr r0, _080A4620 @ =sCurrentBagPocket\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r4, [r0, 0x1]\n\ - add r4, r8\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - mov r1, r8\n\ - lsls r0, r1, 25\n\ - movs r3, 0x80\n\ - lsls r3, 18\n\ - adds r0, r3\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x10]\n\ - lsls r0, 5\n\ - adds r0, 0xE\n\ - adds r5, r0, 0\n\ - ldr r6, _080A4624 @ =gStringVar1\n\ - ldr r1, [sp, 0x4]\n\ - lsls r0, r1, 24\n\ - lsrs r0, 24\n\ - adds r1, r6, 0\n\ - mov r2, r8\n\ - bl sub_80A425C\n\ - adds r6, r0, 0\n\ - ldr r3, _080A4628 @ =gCurrentBagPocketItemSlots\n\ - mov r10, r3\n\ - ldr r0, [r3]\n\ - lsls r7, r4, 2\n\ - adds r3, r7, r0\n\ - ldrh r1, [r3]\n\ - movs r0, 0xA9\n\ - lsls r0, 1\n\ - cmp r1, r0\n\ - bhi _080A4634\n\ - lsls r0, r5, 1\n\ - add r0, r9\n\ - movs r1, 0x59\n\ - strh r1, [r0]\n\ - adds r0, r5, 0x1\n\ - lsls r0, 1\n\ - add r0, r9\n\ - movs r2, 0x4F\n\ - strh r2, [r0]\n\ - adds r0, r5, 0\n\ - adds r0, 0x20\n\ - lsls r0, 1\n\ - add r0, r9\n\ - movs r1, 0x69\n\ - strh r1, [r0]\n\ - adds r0, r5, 0\n\ - adds r0, 0x21\n\ - lsls r0, 1\n\ - add r0, r9\n\ - strh r2, [r0]\n\ - ldrh r0, [r3]\n\ - bl ItemIdToBattleMoveId\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0xD\n\ - adds r2, r0, 0\n\ - muls r2, r1\n\ - ldr r0, _080A462C @ =gMoveNames\n\ - adds r2, r0\n\ - mov r1, r10\n\ - ldr r0, [r1]\n\ - adds r0, r7, r0\n\ - ldr r3, _080A4630 @ =0xfffffee0\n\ - adds r1, r3, 0\n\ - ldrh r3, [r0]\n\ - adds r1, r3\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - ldrh r3, [r0, 0x2]\n\ - movs r0, 0x2\n\ - str r0, [sp]\n\ - adds r0, r6, 0\n\ - bl sub_80A41E0\n\ - b _080A46AE\n\ - .align 2, 0\n\ -_080A461C: .4byte gBagPocketScrollStates\n\ -_080A4620: .4byte sCurrentBagPocket\n\ -_080A4624: .4byte gStringVar1\n\ -_080A4628: .4byte gCurrentBagPocketItemSlots\n\ -_080A462C: .4byte gMoveNames\n\ -_080A4630: .4byte 0xfffffee0\n\ -_080A4634:\n\ - lsls r0, r5, 1\n\ - add r0, r9\n\ - ldr r1, _080A46EC @ =0x0000105d\n\ - strh r1, [r0]\n\ - adds r0, r5, 0x1\n\ - lsls r0, 1\n\ - add r0, r9\n\ - adds r1, 0x1\n\ - strh r1, [r0]\n\ - adds r0, r5, 0\n\ - adds r0, 0x20\n\ - lsls r0, 1\n\ - add r0, r9\n\ - adds r1, 0xF\n\ - strh r1, [r0]\n\ - adds r0, r5, 0\n\ - adds r0, 0x21\n\ - lsls r0, 1\n\ - add r0, r9\n\ - adds r1, 0x1\n\ - strh r1, [r0]\n\ - movs r0, 0xFC\n\ - strb r0, [r6]\n\ - movs r4, 0x13\n\ - strb r4, [r6, 0x1]\n\ - movs r0, 0x11\n\ - strb r0, [r6, 0x2]\n\ - adds r6, 0x3\n\ - mov r1, r10\n\ - ldr r0, [r1]\n\ - adds r0, r7, r0\n\ - ldrh r1, [r0]\n\ - ldr r3, _080A46F0 @ =0xfffffeae\n\ - adds r1, r3\n\ - adds r0, r6, 0\n\ - bl ConvertIntToDecimalString\n\ - adds r6, r0, 0\n\ - movs r0, 0xFC\n\ - strb r0, [r6]\n\ - strb r4, [r6, 0x1]\n\ - movs r0, 0x18\n\ - strb r0, [r6, 0x2]\n\ - adds r6, 0x3\n\ - mov r1, r10\n\ - ldr r0, [r1]\n\ - adds r0, r7, r0\n\ - ldrh r0, [r0]\n\ - bl ItemIdToBattleMoveId\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0xD\n\ - muls r1, r0\n\ - ldr r0, _080A46F4 @ =gMoveNames\n\ - adds r1, r0\n\ - adds r0, r6, 0\n\ - movs r2, 0x78\n\ - movs r3, 0\n\ - bl sub_8072C74\n\ -_080A46AE:\n\ - ldr r0, _080A46F8 @ =gStringVar1\n\ - movs r1, 0xE\n\ - ldr r2, [sp, 0x10]\n\ - bl MenuPrint\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ -_080A46C2:\n\ - ldr r3, [sp, 0x8]\n\ - cmp r8, r3\n\ - bgt _080A46DA\n\ - mov r0, r8\n\ - ldr r1, [sp, 0xC]\n\ - bl sub_80A42B0\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - beq _080A46DA\n\ - b _080A4570\n\ -_080A46DA:\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 {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080A46EC: .4byte 0x0000105d\n\ -_080A46F0: .4byte 0xfffffeae\n\ -_080A46F4: .4byte gMoveNames\n\ -_080A46F8: .4byte gStringVar1\n\ - .syntax divided\n"); -} -#endif - -static void sub_80A46FC(u16 a, int b, int c, int d) -{ - u8 i; - - for (i = b; i <= c; i++) - { - u8 r4; - u8 r5; - u8 *text; - register int var asm("r0"); - - if (sub_80A42B0(i, d) == TRUE) - break; - r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; - r5 = i * 2 + 2; - - var = 14 + r5 * 32; - gBGTilemapBuffers[2][var] = 0x59; - var += 32; - gBGTilemapBuffers[2][var] = 0x69; - - text = gStringVar1; - text = sub_80A425C(a, text, i); - CopyItemName(gCurrentBagPocketItemSlots[r4].itemId, gStringVar2); - sub_80A41E0(text, gCurrentBagPocketItemSlots[r4].itemId - 0x84, gStringVar2, gCurrentBagPocketItemSlots[r4].quantity, 3); - MenuPrint(gStringVar1, 14, r5); - } -} - -static void sub_80A47E8(u16 a, int b, int c, int d) -{ - switch (sCurrentBagPocket) - { - case BAG_POCKET_ITEMS: - case BAG_POCKET_POKE_BALLS: - sub_80A4380(a, b, c, d); - break; - case BAG_POCKET_KEY_ITEMS: - sub_80A444C(a, b, c, d); - break; - case BAG_POCKET_TMs_HMs: - sub_80A4548(a, b, c, d); - break; - case BAG_POCKET_BERRIES: - sub_80A46FC(a, b, c, d); - break; - } - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) - sub_80F979C(0, 0); - else - sub_80F979C(0, 1); - if ((sReturnLocation != RETURN_TO_FIELD_5 && gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 8 < gBagPocketScrollStates[sCurrentBagPocket].numSlots + 1) - || (sReturnLocation == RETURN_TO_FIELD_5 && gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 8 < gBagPocketScrollStates[sCurrentBagPocket].numSlots)) - sub_80F979C(1, 0); - else - sub_80F979C(1, 1); -} - -static void sub_80A48E8(u16 taskId, int b, int c) -{ - sub_80A47E8(taskId, b, c, 0); -} - -static void sub_80A48F8(u16 taskId) -{ - sub_80A47E8(taskId, 0, 5, 2); -} - -static void ItemListMenu_InitDescription(s16 itemId) -{ - u8 r5; - - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) - { - r5 = sub_8072A18(gOtherText_ReturnTo, 4, 0x68, 0x68, 1); - r5 += sub_8072A18(gUnknown_0840E740[sReturnLocation], 4, 0x78, 0x68, 1); - } - else - { - r5 = sub_8072A18(ItemId_GetDescription(itemId), 4, 0x68, 0x68, 1); - } - - if (r5 < 3) - MenuZeroFillWindowRect(0, 13 + r5 * 2, 13, 20); -} - -static void ItemListMenu_ChangeDescription(s16 itemId, int b) -{ - u8 description[100]; - - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) - { - if (b == 0) - { - MenuZeroFillWindowRect(0, 13, 13, 20); - MenuPrint_PixelCoords(gOtherText_ReturnTo, 4, 0x68, 0); - } - else if (b == 1) - { - MenuPrint_PixelCoords(gUnknown_0840E740[sReturnLocation], 4, 0x78, 0); - } - } - else - { - if (b == 0) - MenuZeroFillWindowRect(0, 13, 13, 20); - if (ItemId_CopyDescription(description, itemId, b)) - MenuPrint_PixelCoords(description, 4, 104 + b * 16, 0); - } -} - -static bool32 CopyTextLine(u8 *destination, const u8 *source, u32 c) -{ - u32 r4 = c + 1; - const u8 *src = source; - u8 *dst = destination; - - while (1) - { - if (*src == CHAR_NEWLINE || *src == EOS) - { - r4--; - if (r4 == 0) - { - *dst = EOS; - return TRUE; - } - if (*src == EOS) - return FALSE; - // got a new line - reset dst pointer - dst = destination; - src++; - } - else - { - *dst++ = *src++; - } - } -} - -static void sub_80A4A98(const u8 *text, u32 line) -{ - u8 buffer[100]; - - if (line == 0) - MenuZeroFillWindowRect(0, 13, 13, 20); - if (CopyTextLine(buffer, text, line)) - MenuPrint_PixelCoords(buffer, 4, 104 + line * 16, 0); -} - -static void sub_80A4ADC(u8 taskId) -{ - if (gTasks[taskId].data[10] == 0) - sub_80A7528(0); - PlaySE(SE_SELECT); - gUnknown_0203855C = 1; -} - -static void sub_80A4B14(s8 a, u8 b) -{ - gBagPocketScrollStates[sCurrentBagPocket].scrollTop += a; - MoveMenuCursor(0); - sub_80A73C0(); - sub_80A763C(); - sub_80A4ADC(b); -} - -static void sub_80A4B58(s8 delta, u8 b) -{ - gBagPocketScrollStates[sCurrentBagPocket].cursorPos = MoveMenuCursor(delta); - sub_80A73C0(); - sub_80A4ADC(b); -} - -static const u8 *sub_80A4B90(u16 itemId) -{ - if (TestPlayerAvatarFlags(6)) - { - if (itemId == ITEM_MACH_BIKE || itemId == ITEM_ACRO_BIKE) - return gOtherText_Walk; - } - if (ItemIsMail(itemId) == TRUE) - return gOtherText_Check; - return sItemPopupMenuActions[sPopupMenuActionList[0]].text; -} - -static void sub_80A4BF0(u16 *a) -{ - u8 i; - - if (gUnknown_02038564 == 4) - { - MenuDrawTextWindow(0, 7, 13, 12); - sub_80A4008(a, 1, 8, 12, 4); - if (sub_80F9344() == TRUE && sReturnLocation == RETURN_TO_FIELD_5) - { - sub_80A7834(1, 0); - } - else - { - for (i = 0; i < gUnknown_02038564; i++) - { - const u8 *text; - - if (i == 0) - text = sub_80A4B90(gScriptItemId); - else - text = sItemPopupMenuActions[sPopupMenuActionList[i]].text; - MenuPrint(text, 1 + (i / 2) * 6, 8 + (i % 2) * 2); - } - } - if (sReturnLocation == RETURN_TO_FIELD_5) - InitMenu(0, 1, 8, gUnknown_02038564, sPopupMenuSelection, 1); - else - InitMenu(0, 1, 8, gUnknown_02038564, 0, 1); - sub_8072DCC(0x2F); - } - else - { - MenuDrawTextWindow(0, 5, 13, 12); - sub_80A4008(a, 1, 6, 12, 6); - for (i = 0; i < gUnknown_02038564; i++) - MenuPrint(sItemPopupMenuActions[sPopupMenuActionList[i]].text, 1 + (i / 3) * 6, 6 + (i % 3) * 2); - InitMenu(0, 1, 6, gUnknown_02038564, 0, 1); - sub_8072DCC(0x2F); - } - sub_80A7528(2); -} - -static void sub_80A4DA4(u16 *a) -{ - sub_80A73FC(); - sub_80A36B8(a, 0, 6, 13, 6); - MenuZeroFillWindowRect(0, 5, 13, 12); - sub_80A7590(); -} - -static void sub_80A4DD8(u8 taskId, u8 b, u8 c, u8 d, u8 e, u8 digits) -{ - gTasks[taskId].data[1] = 1; - gTasks[taskId].data[2] = b + 2; - gTasks[taskId].data[3] = c + 1; - MenuDrawTextWindow(b, c, b + d, c + e); - sub_80A4008(gBGTilemapBuffers[1], b + 1, c + 1, d - 1, e - 1); - sub_80A418C(1, 1, b + 2, c + 1, digits); -} - -static void sub_80A4E8C(s8 delta, u8 b) -{ - PlaySE(SE_SELECT); - sub_80F979C(0, 1); - sub_80F979C(1, 1); - sub_80F979C(2, 1); - sub_80F979C(3, 1); - PauseVerticalScrollIndicator(0); - PauseVerticalScrollIndicator(1); - PauseVerticalScrollIndicator(2); - PauseVerticalScrollIndicator(3); - ChangePocket(gBGTilemapBuffers[2], delta); - DrawPocketIndicatorDots(gBGTilemapBuffers[2], sCurrentBagPocket); - sub_80A3770(); - sub_80A7C64(); - CreateBagPokeballSprite(b); -} - -static bool8 sub_80A4F0C(void) -{ - if (sReturnLocation == RETURN_TO_FIELD_5 || sReturnLocation == RETURN_TO_FIELD_4) - return FALSE; - if (gMain.newKeys == DPAD_RIGHT || sub_80F9284() == 2) - { - sub_80A4E8C(1, 2); - return TRUE; - } - if (gMain.newKeys == DPAD_LEFT || sub_80F9284() == 1) - { - sub_80A4E8C(-1, 1); - return TRUE; - } - return FALSE; -} - -static void sub_80A4F68(u8 taskId) -{ - sub_80A4F0C(); -} - -static bool8 sub_80A4F74(u8 a) -{ - bool8 retVal = FALSE; - - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) - { - if (gBagPocketScrollStates[sCurrentBagPocket].cursorPos != 0) - sub_80A4B58(-1, a); - else if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) - sub_80A4B14(-1, a); - if (gLinkOpen == TRUE && gMain.keyRepeatCounter == 5) - gMain.keyRepeatCounter = 11; - retVal = TRUE; - } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) - { - if (sReturnLocation != RETURN_TO_FIELD_5) - { - if (gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].cursorMax) - { - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots) - sub_80A4B14(1, a); - } - else - { - sub_80A4B58(1, a); - } - } - else - { - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots - 1) - { - if (gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].cursorMax) - sub_80A4B58(1, a); - else - sub_80A4B14(1, a); - } - } - retVal = TRUE; - if (gLinkOpen == TRUE && gMain.keyRepeatCounter == 5) - gMain.keyRepeatCounter = 11; - } - else - { - if (gTasks[a].data[10] == 0 && sub_80A4F0C() == TRUE) - { - sub_80A73F0(); - gTasks[a].func = sub_80A4F68; - retVal = TRUE; - } - else - { - sub_80A73C0(); - } - } - return retVal; -} - -static void sub_80A50C8(u8 taskId) -{ - s16 *r5 = gTasks[taskId].data; - - if (!gPaletteFade.active) - { - if (sub_80A4F74(taskId) == TRUE) - { - sub_808B5B4(taskId); - return; - } - - if ((gMain.newKeys & SELECT_BUTTON) - && !(sCurrentBagPocket == BAG_POCKET_BERRIES || sCurrentBagPocket == BAG_POCKET_TMs_HMs) - && (sReturnLocation == RETURN_TO_FIELD_0 || sReturnLocation == RETURN_TO_BATTLE)) - { - if (r5[10] == 0) - { - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots) - { - PlaySE(SE_SELECT); - sub_80A3F50(taskId); - } - sub_808B5B4(taskId); - } - else - { - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots) - { - PlaySE(SE_SELECT); - sub_80A3E90(taskId); - } - else - { - sub_80A3EF4(taskId); - } - sub_808B5B4(taskId); - } - return; - } - - if (gMain.newKeys & A_BUTTON) - { - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) - { - if (r5[10] == 0) - { - gScriptItemId = 0; - gUnknown_083C16BC[sReturnLocation].onBagClose(taskId); - } - else - { - sub_80A3EF4(taskId); - } - sub_808B5B4(taskId); - } - else - { - if (r5[10] == 0) - { - PlaySE(SE_SELECT); - gUnknown_02038560 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - gScriptItemId = gCurrentBagPocketItemSlots[gUnknown_02038560].itemId; - gUnknown_083C16BC[sReturnLocation].onItemSelect(taskId); - sub_80F98A4(0); - sub_80F98A4(1); - sub_80F98A4(2); - sub_80F98A4(3); - sub_80A797C(); - } - else - { - sub_80A3E90(taskId); - } - sub_808B5B4(taskId); - } - return; - } - - if (gMain.newKeys & B_BUTTON) - { - if (r5[10] == 0) - { - if (sReturnLocation != RETURN_TO_FIELD_5) - { - gScriptItemId = 0; - gUnknown_083C16BC[sReturnLocation].onBagClose(taskId); - } - } - else - { - sub_80A3EF4(taskId); - } - sub_808B5B4(taskId); - return; - } - } -} - -bool8 sub_80A52C4(u8 taskId, u16 b) -{ - s16 *taskData = gTasks[taskId].data; - - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) - { - if (taskData[1] != b) - taskData[1]++; - else - taskData[1] = 1; - return TRUE; - } - - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) - { - if (taskData[1] != 1) - taskData[1]--; - else - taskData[1] = b; - return TRUE; - } - - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT) - { - if (taskData[1] + 10 < b) - taskData[1] += 10; - else - taskData[1] = b; - return TRUE; - } - - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT) - { - if (taskData[1] > 10) - taskData[1] -= 10; - else - taskData[1] = 1; - return TRUE; - } - - return FALSE; -} - -static bool8 sub_80A5350(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - if (sub_80A52C4(taskId, gCurrentBagPocketItemSlots[gUnknown_02038560].quantity) == TRUE) - { - // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way - if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) - sub_80A418C(taskData[1], 1, taskData[2], taskData[3], 3); - else - sub_80A418C(taskData[1], 1, taskData[2], taskData[3], 2); - return TRUE; - } - return FALSE; -} - -static void sub_80A53CC(void) -{ - if (sub_80A34B4() == TRUE) - { - sub_80A3770(); - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); - } -} - -void sub_80A53F8(void) -{ - sReturnLocation = RETURN_TO_FIELD_0; - SetMainCallback2(sub_80A53CC); -} - -#ifdef NONMATCHING -static void sub_80A5414(u8 taskId) -{ - TaskFunc r5 = NULL; - - if (sub_80A78A0() != 0) - { - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x40) - { - if ((sPopupMenuSelection & 1) && sPopupMenuActionList[sPopupMenuSelection - 1] == 8) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = MoveMenuCursor3(-1); - } - } - //_080A546C - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x80) - { - if (!(sPopupMenuSelection & 1) && sPopupMenuActionList[sPopupMenuSelection + 1] != 8) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = MoveMenuCursor3(1); - } - } - //_080A549C - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x20) - { - if (sPopupMenuSelection > 1 && sPopupMenuActionList[sPopupMenuSelection - 2] != 8) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = MoveMenuCursor3(-2); - } - } - //_080A54CC - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x10) - { - if (sPopupMenuSelection <= 1 && sPopupMenuActionList[sPopupMenuSelection + 2] != 8) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = MoveMenuCursor3(2); - } - } - //_080A5500 - else if (!(gMain.newKeys & A_BUTTON)) - { - if (gMain.newKeys & B_BUTTON) - { - gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A4DA4(gBGTilemapBuffers[1]); - r5 = sItemPopupMenuActions[sPopupMenuActionList[3]].func; - r5(taskId); - } - } - else - { - //_080A5590 - gTasks[taskId].data[10] = 0; - sub_80A4DA4(gBGTilemapBuffers[1]); - r5 = sItemPopupMenuActions[sPopupMenuActionList[sPopupMenuSelection]].func; - r5(taskId); - } - } - //_080A5552 - if (r5 == NULL) - { - if (sReturnLocation == RETURN_TO_FIELD_5) - { - if (sPopupMenuSelection == 0) - { - sub_8072DDC(12); - return; - } - //_080A55D4 - //else - //{ - if (sPopupMenuSelection == 0 || sPopupMenuSelection == 1) - sub_8072DCC(0x2F); - else - sub_8072DCC(0x30); - //} - } - //_080A55E0 - else - { - if (sPopupMenuSelection == 0 || sPopupMenuSelection == 1) - sub_8072DCC(0x2F); - else - sub_8072DCC(0x30); - } - } -} -#else -__attribute__((naked)) -static void sub_80A5414(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - movs r5, 0\n\ - bl sub_80A78A0\n\ - cmp r0, 0\n\ - bne _080A5426\n\ - b _080A5552\n\ -_080A5426:\n\ - ldr r2, _080A5460 @ =gMain\n\ - ldrh r0, [r2, 0x30]\n\ - movs r1, 0xF0\n\ - ands r1, r0\n\ - cmp r1, 0x40\n\ - bne _080A546C\n\ - ldr r4, _080A5464 @ =sPopupMenuSelection\n\ - ldrb r1, [r4]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080A5440\n\ - b _080A5552\n\ -_080A5440:\n\ - ldrb r1, [r4]\n\ - ldr r0, _080A5468 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r1, r0\n\ - subs r1, 0x1\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x8\n\ - bne _080A5452\n\ - b _080A5552\n\ -_080A5452:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - b _080A54EE\n\ - .align 2, 0\n\ -_080A5460: .4byte gMain\n\ -_080A5464: .4byte sPopupMenuSelection\n\ -_080A5468: .4byte sPopupMenuActionList\n\ -_080A546C:\n\ - cmp r1, 0x80\n\ - bne _080A549C\n\ - ldr r4, _080A5494 @ =sPopupMenuSelection\n\ - ldrb r1, [r4]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080A5552\n\ - ldrb r1, [r4]\n\ - ldr r0, _080A5498 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - cmp r0, 0x8\n\ - beq _080A5552\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x1\n\ - b _080A54EE\n\ - .align 2, 0\n\ -_080A5494: .4byte sPopupMenuSelection\n\ -_080A5498: .4byte sPopupMenuActionList\n\ -_080A549C:\n\ - cmp r1, 0x20\n\ - bne _080A54CC\n\ - ldr r4, _080A54C4 @ =sPopupMenuSelection\n\ - ldrb r0, [r4]\n\ - cmp r0, 0x1\n\ - bls _080A5552\n\ - adds r1, r0, 0\n\ - ldr r0, _080A54C8 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r1, r0\n\ - subs r1, 0x2\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x8\n\ - beq _080A5552\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - b _080A54EE\n\ - .align 2, 0\n\ -_080A54C4: .4byte sPopupMenuSelection\n\ -_080A54C8: .4byte sPopupMenuActionList\n\ -_080A54CC:\n\ - cmp r1, 0x10\n\ - bne _080A5500\n\ - ldr r4, _080A54F8 @ =sPopupMenuSelection\n\ - ldrb r0, [r4]\n\ - cmp r0, 0x1\n\ - bhi _080A5552\n\ - adds r1, r0, 0\n\ - ldr r0, _080A54FC @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x2]\n\ - cmp r0, 0x8\n\ - beq _080A5552\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x2\n\ -_080A54EE:\n\ - bl MoveMenuCursor3\n\ - strb r0, [r4]\n\ - b _080A5552\n\ - .align 2, 0\n\ -_080A54F8: .4byte sPopupMenuSelection\n\ -_080A54FC: .4byte sPopupMenuActionList\n\ -_080A5500:\n\ - ldrh r1, [r2, 0x2E]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080A5590\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080A5552\n\ - ldr r1, _080A5570 @ =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, _080A5574 @ =gBagPocketScrollStates\n\ - ldr r0, _080A5578 @ =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, _080A557C @ =gBGTilemapBuffers + 0x800\n\ - bl sub_80A4DA4\n\ - ldr r1, _080A5580 @ =sItemPopupMenuActions\n\ - ldr r0, _080A5584 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - ldrb r0, [r0, 0x3]\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\ -_080A5552:\n\ - cmp r5, 0\n\ - bne _080A55FA\n\ - ldr r0, _080A5588 @ =sReturnLocation\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x5\n\ - bne _080A55E0\n\ - ldr r0, _080A558C @ =sPopupMenuSelection\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _080A55D4\n\ - movs r0, 0xC\n\ - bl sub_8072DDC\n\ - b _080A55FA\n\ - .align 2, 0\n\ -_080A5570: .4byte gTasks\n\ -_080A5574: .4byte gBagPocketScrollStates\n\ -_080A5578: .4byte sCurrentBagPocket\n\ -_080A557C: .4byte gBGTilemapBuffers + 0x800\n\ -_080A5580: .4byte sItemPopupMenuActions\n\ -_080A5584: .4byte sPopupMenuActionList\n\ -_080A5588: .4byte sReturnLocation\n\ -_080A558C: .4byte sPopupMenuSelection\n\ -_080A5590:\n\ - ldr r1, _080A55C0 @ =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, _080A55C4 @ =gBGTilemapBuffers + 0x800\n\ - bl sub_80A4DA4\n\ - ldr r1, _080A55C8 @ =sItemPopupMenuActions\n\ - ldr r0, _080A55CC @ =sPopupMenuSelection\n\ - ldrb r2, [r0]\n\ - ldr r0, _080A55D0 @ =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 _080A5552\n\ - .align 2, 0\n\ -_080A55C0: .4byte gTasks\n\ -_080A55C4: .4byte gBGTilemapBuffers + 0x800\n\ -_080A55C8: .4byte sItemPopupMenuActions\n\ -_080A55CC: .4byte sPopupMenuSelection\n\ -_080A55D0: .4byte sPopupMenuActionList\n\ -_080A55D4:\n\ - cmp r0, 0x1\n\ - bls _080A55E8\n\ - movs r0, 0x30\n\ - bl sub_8072DCC\n\ - b _080A55FA\n\ -_080A55E0:\n\ - ldr r0, _080A55F0 @ =sPopupMenuSelection\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1\n\ - bhi _080A55F4\n\ -_080A55E8:\n\ - movs r0, 0x2F\n\ - bl sub_8072DCC\n\ - b _080A55FA\n\ - .align 2, 0\n\ -_080A55F0: .4byte sPopupMenuSelection\n\ -_080A55F4:\n\ - movs r0, 0x30\n\ - bl sub_8072DCC\n\ -_080A55FA:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} -#endif - -__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\ -_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\ -_080A5630:\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\ -_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\ -_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\ -_080A56D2:\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\ -_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\ -_080A574C: .4byte gTasks\n\ -_080A5750: .4byte gBagPocketScrollStates\n\ -_080A5754: .4byte sCurrentBagPocket\n\ -_080A5758: .4byte gBGTilemapBuffers + 0x800\n\ -_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\ -_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\ -_080A57B8:\n\ - movs r0, 0x30\n\ - bl sub_8072DCC\n\ -_080A57BE:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} - -static void sub_80A57C4(void) -{ - u8 r5; - - sPopupMenuActionList = gUnknown_083C16AE[sCurrentBagPocket]; - if (sCurrentBagPocket == BAG_POCKET_KEY_ITEMS) - { - gUnknown_02038564 = 1; - r5 = 9; - } - else if (sub_80F92F4(gScriptItemId) == 0) - { - sPopupMenuActionList = gUnknown_083C16AE[4]; - gUnknown_02038564 = 1; - r5 = 9; - } - else - { - gUnknown_02038564 = 2; - r5 = 7; - } - sub_80A4008(gBGTilemapBuffers[1], 7, r5 + 1, 6, gUnknown_02038564 * 2); - MenuDrawTextWindow(6, r5, 13, gUnknown_02038564 * 2 + 1 + r5); - sub_80A7834(0, r5); - InitMenu(0, 7, r5 + 1, gUnknown_02038564, 0, 6); -} - -static void sub_80A5888(u8 taskId) -{ - if (sub_80A78A0() != 0) - { - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - if (sPopupMenuSelection != 0) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = MoveMenuCursor(-1); - } - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if (sPopupMenuSelection != gUnknown_02038564 - 1) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = MoveMenuCursor(1); - } - } - else if (gMain.newKeys & A_BUTTON) - { - gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A4DA4(gBGTilemapBuffers[1]); - sItemPopupMenuActions[sPopupMenuActionList[sPopupMenuSelection]].func(taskId); - } - else if (gMain.newKeys & B_BUTTON) - { - gTasks[taskId].data[10] = 0; - sub_80A4DA4(gBGTilemapBuffers[1]); - sItemPopupMenuActions[2].func(taskId); - } - } -} - -static void OnBagClose_Field0(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_805469C >> 16; - gTasks[taskId].data[9] = (u32)sub_805469C; - gLastFieldPokeMenuOpened = 0; - sub_80A5AE4(taskId); -} - -static void OnItemSelect_Field05(u8 taskId) -{ - sPopupMenuSelection = 0; - if (sReturnLocation == RETURN_TO_FIELD_5) - sPopupMenuSelection = 1; - gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A73FC(); - if (sub_80F9344() == TRUE && sReturnLocation != RETURN_TO_FIELD_5) - { - sub_80A57C4(); - gTasks[taskId].func = sub_80A5888; - } - else - { - sub_80A4BF0(gBGTilemapBuffers[1]); - if (sCurrentBagPocket != BAG_POCKET_BERRIES || sReturnLocation == RETURN_TO_FIELD_5) - gTasks[taskId].func = sub_80A5414; - else - gTasks[taskId].func = sub_80A5600; - } -} - -static void sub_80A5AAC(u8 taskId) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = HandleItemMenuPaletteFade; -} - -static void sub_80A5AE4(u8 taskId) -{ - PlaySE(SE_SELECT); - sub_80A5AAC(taskId); -} - -void HandleItemMenuPaletteFade(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - if (!gPaletteFade.active) - { - MainCallback cb = (MainCallback)((u16)taskData[8] << 16 | (u16)taskData[9]); - - SetMainCallback2(cb); - gpu_pal_allocator_reset__manage_upper_four(); - DestroyTask(taskId); - } -} - -void sub_80A5B40(void) -{ - while (1) - { - if (SetupBagMultistep() == TRUE) - { - ResetTasks(); - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); - break; - } - if (sub_80F9344() == TRUE) - break; - } -} - -static void HandlePopupMenuAction_UseOnField(u8 taskId) -{ - if (ItemId_GetFieldFunc(gScriptItemId) != NULL) - { - PlaySE(SE_SELECT); - if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gScriptItemId) == 1) - { - sub_80A5BF8(taskId); - } - else - { - gTasks[taskId].data[2] = 0; - if (sCurrentBagPocket != BAG_POCKET_BERRIES) - ItemId_GetFieldFunc(gScriptItemId)(taskId); - else - sub_80C9C7C(taskId); - } - } -} - -static void sub_80A5BF8(u8 taskId) -{ - sub_80A73FC(); - sub_80A7590(); - DisplayCannotUseItemMessage(taskId, gOtherText_NoPokemon, CleanUpItemMenuMessage, 1); -} - -static void sub_80A5C24(u8 taskId) -{ - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -void CleanUpItemMenuMessage(u8 taskId) -{ - sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); - MenuZeroFillWindowRect(7, 7, 13, 12); - MenuZeroFillWindowRect(0, 14, 29, 19); - gTasks[taskId].func = sub_80A5C24; -} - -void CleanUpOverworldMessage(u8 taskId) -{ - MenuZeroFillWindowRect(0, 13, 29, 19); - DestroyTask(taskId); - sub_8064E2C(); - ScriptContext2_Disable(); -} - -void ExecuteItemUseFromBlackPalette(void) -{ - pal_fill_black(); - CreateTask(Task_CallItemUseOnFieldCallback, 8); -} - -static void Task_CallItemUseOnFieldCallback(u8 taskId) -{ - if (sub_807D770() == TRUE) - gUnknown_03005D00(taskId); -} - -void sub_80A5D04(void) -{ - while (1) - { - if (SetupBagMultistep() == TRUE) - { - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); - break; - } - if (sub_80F9344() == TRUE) - break; - } -} - -static void sub_80A5D38(u8 taskId) -{ - gTasks[taskId].data[1] = 0; - sub_80A4DA4(gBGTilemapBuffers[1]); - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -static void sub_80A5D78(void) -{ - sub_80A4008(gBGTilemapBuffers[1], 8, 8, 5, 4); - DisplayYesNoMenu(7, 7, 1); -} - -static void sub_80A5DA0(u16 itemId, u16 quantity) -{ - CopyItemName(itemId, gStringVar1); - if (quantity >= 100) - ConvertIntToDecimalStringN(gStringVar2, quantity, STR_CONV_MODE_LEFT_ALIGN, 3); - else - ConvertIntToDecimalStringN(gStringVar2, quantity, STR_CONV_MODE_LEFT_ALIGN, 2); - sub_80A4DA4(gBGTilemapBuffers[1]); - sub_80A7528(5); - sub_80A5D78(); -} - -static void sub_80A5DF8(void) -{ - sub_80A4DA4(gBGTilemapBuffers[1]); - MenuZeroFillWindowRect(7, 6, 11, 13); - sub_80A7528(4); -} - -static void sub_80A5E1C(u8 taskId) -{ - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) - { - gTasks[taskId].data[10] = 0; - sub_80A41D4(taskId); - sub_80A5D38(taskId); - } -} - -static void sub_80A5E60(u8 taskId) -{ - sub_80A5DF8(); - sub_80A3D5C(taskId); - gTasks[taskId].func = sub_80A5E1C; -} - -static void sub_80A5E90(u8 taskId) -{ - sub_80A5D38(taskId); -} - -static void sub_80A5EA0(u8 taskId) -{ - if (sub_80A5350(taskId) == TRUE) - return; - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - sub_80A5DA0(gScriptItemId, gTasks[taskId].data[1]); - DoYesNoFuncWithChoice(taskId, &gUnknown_083C16F4); - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - sub_80A5D38(taskId); - } -} - -static void HandlePopupMenuAction_Toss(u8 taskId) -{ - PlaySE(SE_SELECT); - gTasks[taskId].func = sub_80A5EA0; - sub_80A7528(3); - // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way - if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) - sub_80A4DD8(taskId, 6, 9, 7, 3, 3); - else - sub_80A4DD8(taskId, 7, 9, 6, 3, 2); -} - -static void sub_80A5F80(u8 taskId) -{ - PlaySE(SE_SELECT); - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -static void HandlePopupMenuAction_Register(u8 taskId) -{ - PlaySE(SE_SELECT); - if (gSaveBlock1.registeredItem == gScriptItemId) - { - // Un-register the registered item - RemoveSelectIconFromRegisteredItem(); - gSaveBlock1.registeredItem = 0; - } - else - { - AddSelectIconToRegisteredItem(); - gSaveBlock1.registeredItem = gScriptItemId; - } - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -static void sub_80A6000(u8 taskId) -{ - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -static void sub_80A6024(u8 taskId) -{ - if (gMain.newKeys & A_BUTTON) - { - sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); - MenuZeroFillWindowRect(0, 14, 29, 19); - gTasks[taskId].func = sub_80A6000; - } -} - -static void DisplayCannotBeHeldMessage(u8 taskId) -{ - sub_80A73FC(); - CopyItemName(gScriptItemId, gStringVar1); - StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeld); - sub_80A7590(); - DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1); -} - -static void HandlePopupMenuAction_Give(u8 taskId) -{ - PlaySE(SE_SELECT); - if (sub_80F931C(gScriptItemId) == 0) - { - sub_80A73FC(); - sub_80A7590(); - DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1); - } - else if (ItemId_GetImportance(gScriptItemId) == 0) - { - if (CalculatePlayerPartyCount() == 0) - { - sub_80A5BF8(taskId); - } - else - { - gTasks[taskId].data[8] = (u32)sub_808B020 >> 16; - gTasks[taskId].data[9] = (u32)sub_808B020; - gTasks[taskId].func = HandleItemMenuPaletteFade; - gUnknown_02038561 = 1; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - } - } - else - { - DisplayCannotBeHeldMessage(taskId); - } -} - -static void HandlePopupMenuAction_CheckTag(u8 taskId) -{ - sub_80A5AE4(taskId); - gTasks[taskId].data[8] = (u32)BerryTagScreen_814625C >> 16; - gTasks[taskId].data[9] = (u32)BerryTagScreen_814625C; -} - -static void sub_80A61A8(void) -{ - if (sub_80A34B4() == TRUE) - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); -} - -void sub_80A61D0(void) -{ - sReturnLocation = RETURN_TO_PKMN_LIST; - SetMainCallback2(sub_80A61A8); -} - -static void OnBagClose_PkmnList(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_808A3F8 >> 16; - gTasks[taskId].data[9] = (u32)sub_808A3F8; - sub_80A5AE4(taskId); -} - -static void OnItemSelect_PkmnList(u8 taskId) -{ - u8 r6 = sCurrentBagPocket + 1; - - if (sub_80F931C(gScriptItemId) == 0) - { - sub_80A73FC(); - sub_80A7590(); - DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1); - } - else if (sub_80F92F4(gScriptItemId) == 0) - { - sub_80A73FC(); - CopyItemName(gScriptItemId, gStringVar1); - StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeldHere); - sub_80A7590(); - DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1); - } - else if (r6 != 5 && ItemId_GetImportance(gScriptItemId) == 0) - { - gTasks[taskId].data[8] = (u32)sub_808A3F8 >> 16; - gTasks[taskId].data[9] = (u32)sub_808A3F8; - sub_80A5AAC(taskId); - } - else - { - DisplayCannotBeHeldMessage(taskId); - } -} - -static void sub_80A62D8(void) -{ - if (sub_80A34B4() == TRUE) - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); -} - -void sub_80A6300(void) -{ - sReturnLocation = RETURN_TO_SHOP; - SetMainCallback2(sub_80A62D8); -} - -static void OnBagClose_Shop(u8 taskId) -{ - gFieldCallback = sub_80B3050; - gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; - gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch; - sub_80A5AE4(taskId); -} - -static void OnItemSelect_Shop(u8 taskId) -{ - sub_80A7590(); - gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A73FC(); - CopyItemName(gScriptItemId, gStringVar2); - if (ItemId_GetPrice(gScriptItemId) == 0) - { - StringExpandPlaceholders(gStringVar4, gOtherText_CantBuyThat); - DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6444, 1); - } - else - { - StringExpandPlaceholders(gStringVar4, gOtherText_HowManyToSell); - DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A648C, 1); - } -} - -static void sub_80A640C(u8 taskId) -{ - gTasks[taskId].data[10] = 0; - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -static void sub_80A6444(u8 taskId) -{ - sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); - MenuZeroFillWindowRect(0, 14, 29, 19); - gTasks[taskId].func = sub_80A640C; -} - -static void sub_80A648C(u8 taskId) -{ - gTasks[taskId].func = Task_BuyHowManyDialogueHandleInput; - sub_80A4008(gBGTilemapBuffers[1], 1, 11, 12, 2); - MenuDrawTextWindow(0, 10, 13, 13); - gTasks[taskId].data[1] = 1; - gTasks[taskId].data[2] = 1; - gTasks[taskId].data[3] = 11; - // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way - if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) - sub_80A418C(1, 1, 1, 11, 3); - else - sub_80A418C(1, 1, 1, 11, 2); - BuyMenuDisplayMessage(gScriptItemId, 1); - sub_80A683C(); -} - -static void sub_80A6520(u8 taskId) -{ - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - BuyMenuPrintItemQuantityAndPrice(taskId); - } -} - -static void sub_80A6548(u8 taskId) -{ - sub_80A48F8(taskId); - gTasks[taskId].func = sub_80A6520; -} - -static void sub_80A6574(u8 taskId) -{ - PlaySE(SE_REGI); - sub_80A6870(gScriptItemId, gTasks[taskId].data[1]); - gTasks[taskId].func = sub_80A6548; -} - -static void sub_80A65AC(u8 taskId) -{ - MenuZeroFillWindowRect(7, 6, 13, 12); - sub_80A36B8(gBGTilemapBuffers[1], 7, 6, 6, 6); - CopyItemName(gScriptItemId, gStringVar2); - StringExpandPlaceholders(gStringVar4, gOtherText_SoldItem); - DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6574, 1); - sub_80A3D5C(taskId); -} - -static void sub_80A6618(u8 taskId) -{ - MenuZeroFillWindowRect(7, 6, 13, 12); - sub_80A36B8(gBGTilemapBuffers[1], 7, 6, 6, 6); - BuyMenuPrintItemQuantityAndPrice(taskId); -} - -static void sub_80A6650(u8 taskId) -{ - sub_80A5D78(); - DoYesNoFuncWithChoice(taskId, &gUnknown_083C16FC); -} - -static void Task_BuyHowManyDialogueHandleInput(u8 taskId) -{ - if (sub_80A5350(taskId) == TRUE) - { - MenuZeroFillWindowRect(6, 11, 12, 11); - BuyMenuDisplayMessage(gScriptItemId, gTasks[taskId].data[1]); - } - else if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - MenuZeroFillWindowRect(0, 10, 13, 13); - sub_80A36B8(gBGTilemapBuffers[1], 0, 10, 13, 3); - ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(gScriptItemId) / 2 * gTasks[taskId].data[1], STR_CONV_MODE_LEFT_ALIGN, 6); - StringExpandPlaceholders(gStringVar4, gOtherText_CanPay); - DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6650, 1); - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - BuyMenuPrintItemQuantityAndPrice(taskId); - } -} - -static void sub_80A6760(u8 taskId) -{ - gTasks[taskId].data[10] = 0; - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) -{ - sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); - RemoveMoneyLabelObject(0, 0); - MenuZeroFillWindowRect(0, 4, 13, 13); - MenuZeroFillWindowRect(0, 14, 29, 19); - gTasks[taskId].func = sub_80A6760; -} - -static void BuyMenuDisplayMessage(u16 itemId, u16 quantity) -{ - sub_80B7A94(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); - 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); -} - -static void sub_80A68A4(void) -{ - if (sub_80A34B4() == TRUE) - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); -} - -void sub_80A68CC(void) -{ - sCurrentBagPocket = BAG_POCKET_BERRIES; - sReturnLocation = RETURN_TO_FIELD_4; - SetMainCallback2(sub_80A68A4); -} - -static void OnBagClose_Field4(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_80546B8 >> 16; - gTasks[taskId].data[9] = (u32)sub_80546B8; - sub_80A5AE4(taskId); -} - -static void OnItemSelect_Field4(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_80546B8 >> 16; - gTasks[taskId].data[9] = (u32)sub_80546B8; - sub_80A5AAC(taskId); -} - -static void sub_80A6940(void) -{ - while (1) - { - if (SetupBagMultistep() == TRUE) - { - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); - sub_80A699C(); - break; - } - if (sub_80F9344() == TRUE) - break; - } -} - -void sub_80A6978(void) -{ - sCurrentBagPocket = BAG_POCKET_BERRIES; - sReturnLocation = RETURN_TO_FIELD_5; - SetMainCallback2(sub_80A6940); -} - -static void sub_80A699C(void) -{ - sPopupMenuActionList = gUnknown_083C16B8; - gUnknown_02038564 = 4; -} - -static void OnBagClose_Field5(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_804E990 >> 16; - gTasks[taskId].data[9] = (u32)sub_804E990; - sub_80A5AE4(taskId); -} - -static void HandlePopupMenuAction_Confirm(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_804E990 >> 16; - gTasks[taskId].data[9] = (u32)sub_804E990; - sub_80A5AAC(taskId); -} - -static void sub_80A6A08(void) -{ - if (sub_80A34B4() == TRUE) - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); -} - -void sub_80A6A30(void) -{ - sReturnLocation = RETURN_TO_PC; - SetMainCallback2(sub_80A6A08); -} - -static void OnBagClose_PC(u8 taskId) -{ - gFieldCallback = ItemStorage_ReturnToMenuAfterDeposit; - gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; - gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch; - sub_80A5AE4(taskId); -} - -static void sub_80A6A84(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - sub_80A4DA4(gBGTilemapBuffers[1]); - CopyItemName(gScriptItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, taskData[1], STR_CONV_MODE_LEFT_ALIGN, 3); - MenuZeroFillWindowRect(7, 6, 11, 13); - sub_80A7528(7); - sub_80A3D5C(taskId); - gTasks[taskId].func = sub_80A5E1C; -} - -static void sub_80A6B00(u8 taskId) -{ - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) - { - gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - PlaySE(SE_SELECT); - sub_80A5D38(taskId); - } -} - -static void sub_80A6B64(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - if (ItemId_GetImportance(gScriptItemId) == 2) - { - gTasks[taskId].func = sub_80A6B00; - sub_80A7528(9); - } - else - { - if (AddPCItem(gScriptItemId, taskData[1]) == TRUE) - { - sub_80A6A84(taskId); - } - else - { - gTasks[taskId].func = sub_80A6B00; - sub_80A7528(8); - } - } -} - -static void sub_80A6BE0(u8 taskId) -{ - if (sub_80A5350(taskId) == TRUE) - return; - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - sub_80A4DA4(gBGTilemapBuffers[1]); - sub_80A6B64(taskId); - } - else if (gMain.newKeys & B_BUTTON) - { - gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - PlaySE(SE_SELECT); - sub_80A5D38(taskId); - } -} - -static void OnItemSelect_PC(u8 taskId) -{ - gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A73FC(); - PlaySE(SE_SELECT); - sub_80A7590(); - if (sCurrentBagPocket != BAG_POCKET_KEY_ITEMS) - { - gTasks[taskId].func = sub_80A6BE0; - sub_80A7528(6); - // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way - if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) - sub_80A4DD8(taskId, 6, 9, 7, 3, 3); - else - sub_80A4DD8(taskId, 7, 9, 6, 3, 2); - } - else - { - gTasks[taskId].data[1] = 1; - sub_80A6B64(taskId); - } -} - -bool32 sub_80A6D1C(void) -{ - HideMapNamePopup(); - if (gSaveBlock1.registeredItem != 0) - { - if (CheckBagHasItem(gSaveBlock1.registeredItem, 1) == TRUE) - { - u8 taskId; - - ScriptContext2_Enable(); - FreezeMapObjects(); - sub_80594C0(); - sub_80597F4(); - gScriptItemId = gSaveBlock1.registeredItem; - taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1.registeredItem), 8); - gTasks[taskId].data[2] = 1; - return TRUE; - } - gSaveBlock1.registeredItem = 0; - } - ScriptContext1_SetupScript(Event_NoRegisteredItem); - return TRUE; -} - -static void sub_80A6D98(void) -{ - while (1) - { - if (SetupBagMultistep() == TRUE) - { - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); - break; - } - if (sub_80F9344() == TRUE) - break; - } -} - -void sub_80A6DCC(void) -{ - sPopupMenuSelection = 0; - sReturnLocation = RETURN_TO_BATTLE; - SetMainCallback2(sub_80A6D98); -} - -static void sub_80A6DF0(u16 *a) -{ - u8 r6 = (gUnknown_02038564 - 1) * 2; - - MenuDrawTextWindow(7, 9 - r6, 13, 12); - sub_80A4008(a, 8, 10 - r6, 5, r6 + 2); - if (gUnknown_02038564 == 1) - { - MenuPrint(sItemPopupMenuActions[sPopupMenuActionList[0]].text, 8, 10); - } - else - { - MenuPrint(sItemPopupMenuActions[sPopupMenuActionList[0]].text, 8, 8); - MenuPrint(sItemPopupMenuActions[sPopupMenuActionList[1]].text, 8, 10); - } - InitMenu(0, 8, 10 - r6, gUnknown_02038564, 0, 5); - sub_80A7528(2); -} - -static void sub_80A6EB8(u8 taskId) -{ - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) - { - if (sPopupMenuSelection == 1) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = MoveMenuCursor(-1); - } - } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) - { - if (sPopupMenuSelection + 1 < gUnknown_02038564) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = MoveMenuCursor(1); - } - } - else if (gMain.newKeys & A_BUTTON) - { - gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A4DA4(gBGTilemapBuffers[1]); - sItemPopupMenuActions[sPopupMenuActionList[sPopupMenuSelection]].func(taskId); - } - else if (gMain.newKeys & B_BUTTON) - { - gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A4DA4(gBGTilemapBuffers[1]); - sItemPopupMenuActions[5].func(taskId); - } -} - -static const u8 gUnknown_083C1708[] = {4, 5}; -static const u8 gUnknown_083C170A[] = {5, 0}; - -static void sub_80A6FDC(void) -{ - if (ItemId_GetBattleUsage(gScriptItemId) != 0) - { - sPopupMenuActionList = gUnknown_083C1708; - gUnknown_02038564 = 2; - } - else - { - sPopupMenuActionList = gUnknown_083C170A; - gUnknown_02038564 = 1; - } -} - -static void OnItemSelect_Battle(u8 taskId) -{ - sPopupMenuSelection = 0; - sub_80A6FDC(); - gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A73FC(); - sub_80A6DF0(gBGTilemapBuffers[1]); - gTasks[taskId].func = sub_80A6EB8; -} - -void sub_80A7094(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_802E424 >> 16; - gTasks[taskId].data[9] = (u32)sub_802E424; - gTasks[taskId].func = HandleItemMenuPaletteFade; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); -} - -static void OnBagClose_Battle(u8 taskId) -{ - PlaySE(SE_SELECT); - sub_80A7094(taskId); -} - -static void HandlePopupMenuAction_UseInBattle(u8 taskId) -{ - if (ItemId_GetBattleFunc(gScriptItemId) != NULL) - { - PlaySE(SE_SELECT); - ItemId_GetBattleFunc(gScriptItemId)(taskId); - } -} - -static void sub_80A7124(u8 taskId) -{ - PlaySE(SE_SELECT); - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -static void sub_80A7150(void) -{ - while (1) - { - if (SetupBagMultistep() == TRUE) - { - gUnknown_02038563 = CreateTask(sub_80A7230, 0); - gTasks[gUnknown_02038563].data[15] = 0; - break; - } - if (sub_80F9344() == TRUE) - break; - } -} - -void PrepareBagForWallyTutorial(void) -{ - u8 i; - - sPopupMenuSelection = 0; - sCurrentBagPocket = BAG_POCKET_ITEMS; - for (i = 0; i < 5; i++) - { - gBagPocketScrollStates[i].cursorPos = 0; - gBagPocketScrollStates[i].scrollTop = 0; - } - - // Save player's items - memcpy(ewramSavedItemsPocket, gSaveBlock1.bagPocket_Items, sizeof(gSaveBlock1.bagPocket_Items)); - memcpy(ewramSavedPokeballsPocket, gSaveBlock1.bagPocket_PokeBalls, sizeof(gSaveBlock1.bagPocket_PokeBalls)); - - // Add Wally's items to the bag - ClearItemSlots(gSaveBlock1.bagPocket_Items, ARRAY_COUNT(gSaveBlock1.bagPocket_Items)); - ClearItemSlots(gSaveBlock1.bagPocket_PokeBalls, ARRAY_COUNT(gSaveBlock1.bagPocket_PokeBalls)); - AddBagItem(ITEM_POTION, 1); - AddBagItem(ITEM_POKE_BALL, 1); - - sReturnLocation = RETURN_TO_WALLY_BATTLE; - SetMainCallback2(sub_80A7150); -} - -static void sub_80A7230(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - switch (taskData[15]) - { - case 102: - PlaySE(SE_SELECT); - sub_80A4E8C(1, 2); - break; - case 204: - PlaySE(SE_SELECT); - sub_80F98A4(2); - sub_80F98A4(3); - gScriptItemId = ITEM_POKE_BALL; - sPopupMenuActionList = gUnknown_083C1708; - gUnknown_02038564 = 2; - gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A73FC(); - sub_80A6DF0(gBGTilemapBuffers[1]); - break; - case 306: - PlaySE(SE_SELECT); - sub_80A4DA4(gBGTilemapBuffers[1]); - - // Restore player's items - memcpy(gSaveBlock1.bagPocket_Items, ewramSavedItemsPocket, sizeof(gSaveBlock1.bagPocket_Items)); - memcpy(gSaveBlock1.bagPocket_PokeBalls, ewramSavedPokeballsPocket, sizeof(gSaveBlock1.bagPocket_PokeBalls)); - - taskData[8] = (u32)sub_802E424 >> 16; - taskData[9] = (u32)sub_802E424; - gTasks[taskId].func = HandleItemMenuPaletteFade; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - return; - } - taskData[15]++; -} - -static void ItemListMenu_InitMenu(void) -{ - InitMenu(0, 14, 2, gBagPocketScrollStates[sCurrentBagPocket].cursorMax + 1, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, 0); - CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 15); - sub_80A73C0(); -} - -static void sub_80A73C0(void) -{ - sub_814AD7C(0x70, gBagPocketScrollStates[sCurrentBagPocket].cursorPos * 16 + 16); -} - -static void sub_80A73F0(void) -{ - sub_814ADC8(); -} - -static void sub_80A73FC(void) -{ - HandleDestroyMenuCursors(); - sub_814AD44(); -} - -static void sub_80A740C(void) -{ - sub_80A75E4(); - sub_80A7768(); - sub_80A7420(); -} - -static void sub_80A7420(void) -{ - struct UnknownStruct2 *unkStruct = &gUnknown_0203853C; - int index; - - switch (unkStruct->unk0) - { - case 3: - unkStruct->unk0 = 2; - break; - case 2: - switch (unkStruct->unk2) - { - case 0: - index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - ItemListMenu_ChangeDescription(gCurrentBagPocketItemSlots[index].itemId, unkStruct->textLine); - break; - case 1: - sub_80A4A98(gOtherText_SwitchWhichItem, unkStruct->textLine); - break; - case 2: - sub_80A4A98(gOtherText_WhatWillYouDo2, unkStruct->textLine); - break; - case 3: - sub_80A4A98(gOtherText_HowManyToToss, unkStruct->textLine); - break; - case 4: - sub_80A4A98(gOtherText_ThrewAwayItem, unkStruct->textLine); - break; - case 5: - sub_80A4A98(gOtherText_OkayToThrowAwayPrompt, unkStruct->textLine); - break; - case 6: - sub_80A4A98(gOtherText_HowManyToDeposit, unkStruct->textLine); - break; - case 7: - sub_80A4A98(gOtherText_DepositedItems, unkStruct->textLine); - break; - case 8: - sub_80A4A98(gOtherText_NoRoomForItems, unkStruct->textLine); - break; - case 9: - sub_80A4A98(gOtherText_CantStoreSomeoneItem, unkStruct->textLine); - break; - } - unkStruct->textLine++; - if (unkStruct->textLine == 3) - { - unkStruct->unk0 = 0; - sub_80A7918(); - } - break; - } -} - -static void sub_80A751C(void) -{ - gUnknown_0203853C.unk0 = 0; -} - -static void sub_80A7528(u8 a) -{ - gUnknown_0203853C.textLine = 0; - gUnknown_0203853C.unk2 = a; - switch (sub_80A78F4()) - { - case 0: - gUnknown_0203853C.unk0 = 2; - while (gUnknown_0203853C.unk0 != 0) - sub_80A7420(); - break; - case 1: - gUnknown_0203853C.unk0 = 3; - break; - case 2: - gUnknown_0203853C.unk0 = 1; - break; - } -} - -static void sub_80A756C(void) -{ - if (gUnknown_0203853C.unk0 == 2 || gUnknown_0203853C.unk0 == 3) - sub_80A7918(); - gUnknown_0203853C.unk0 = 0; -} - -static void sub_80A7590(void) -{ - MenuZeroFillWindowRect(0, 13, 13, 20); - sub_80A756C(); -} - -static void sub_80A75A8(void) -{ - if (gUnknown_0203853C.unk0 == 2 || gUnknown_0203853C.unk0 == 3) - gUnknown_0203853C.unk0 = 1; -} - -static void sub_80A75C4(void) -{ - switch (gUnknown_0203853C.unk0) - { - case 1: - gUnknown_0203853C.unk0 = 3; - break; - case 0: - sub_80A7918(); - break; - } -} - -static void sub_80A75E4(void) -{ - if (gUnknown_02038540.unk0 == 1 && sub_80A7988() == 0) - { - int r1; - - sub_80A47E8(gUnknown_02038563, gUnknown_02038540.unk1, gUnknown_02038540.unk1, 1); - gUnknown_02038540.unk1++; - if (gUnknown_02038540.unk2 != 0) - r1 = 5; - else - r1 = 7; - if (r1 < gUnknown_02038540.unk1) - { - gUnknown_02038540.unk0 = 0; - sub_80A78E8(); - } - } -} - -static void sub_80A7630(void) -{ - gUnknown_02038540.unk0 = 0; -} - -static void sub_80A763C(void) -{ - struct UnknownStruct3 *r4 = &gUnknown_02038540; - - switch (sub_80A78C4()) - { - case FALSE: - sub_80A48E8(gUnknown_02038563, 0, 7); - break; - case TRUE: - r4->unk0 = 1; - r4->unk1 = 0; - r4->unk2 = 0; - break; - } -} - -static void sub_80A7678(void) -{ - if (gUnknown_02038540.unk0 == 1) - sub_80A78E8(); - gUnknown_02038540.unk0 = 0; -} - -static void sub_80A7694(void) -{ - gUnknown_02038540.unk2 = 1; -} - -static void sub_80A76A0(void) -{ - MenuZeroFillWindowRect(14, 2, 29, 18); - sub_80A7678(); -} - -static bool32 sub_80A76B8(void) -{ - struct UnknownStruct3 *s = &gUnknown_02038540; - - return (s->unk0 == 0); -} - -static bool32 sub_80A76D0(void) -{ - struct UnknownStruct3 *s = &gUnknown_02038540; - - return (s->unk1 > 5); -} - -static void sub_80A76E8(void) -{ - if (gUnknown_02038544.unk0 == 1) - { - DisplayItemMessageOnField( - gUnknown_02038544.unk1, - gUnknown_02038544.unk4, - gUnknown_02038544.unk8, - gUnknown_02038544.unk2); - gUnknown_02038544.unk0 = 0; - } -} - -static void sub_80A770C(void) -{ - gUnknown_02038544.unk0 = 0; -} - -static void DisplayCannotUseItemMessage(int a, const u8 *b, TaskFunc func, int d) -{ - struct UnknownStruct4 *r4 = &gUnknown_02038544; - - switch (sub_80A7924()) - { - case 0: - DisplayItemMessageOnField(a, b, func, d); - break; - case 2: - r4->unk0 = 1; - r4->unk1 = a; - r4->unk4 = b; - r4->unk8 = func; - r4->unk2 = d; - break; - } -} - -static void sub_80A7768(void) -{ - struct UnknownStruct5 *r4 = &gUnknown_02038550; - - if (r4->unk0 == 2) - { - if (r4->unk1 != 0) - { - if (r4->unk2 != 1) - { - const u8 *text = sItemPopupMenuActions[sPopupMenuActionList[r4->unk1 - 1]].text; - int var = r4->unk1 - 1; - - MenuPrint(text, 7, var * 2 + 1 + r4->unk3); - } - else - { - const u8 *text; - int var; - - if (r4->unk1 == 1) - text = sub_80A4B90(gScriptItemId); - else - text = sItemPopupMenuActions[sPopupMenuActionList[r4->unk1 - 1]].text; - var = r4->unk1 - 1; - MenuPrint(text, (var >> 1) * 6 + 1, (var & 1) * 2 + 8); - } - if (r4->unk1 == gUnknown_02038564) - { - r4->unk0 = 0; - sub_80A7970(); - } - } - r4->unk1++; - } -} - -static void sub_80A7828(void) -{ - gUnknown_02038550.unk0 = 0; -} - -static void sub_80A7834(int a, int b) -{ - struct UnknownStruct5 *r4 = &gUnknown_02038550; - - switch (sub_80A7958()) - { - case 1: - r4->unk0 = 2; - r4->unk1 = 0; - r4->unk2 = a; - r4->unk3 = b; - break; - case 2: - r4->unk0 = 1; - r4->unk1 = 0; - r4->unk2 = a; - r4->unk3 = b; - break; - } -} - -static void sub_80A7868(void) -{ - if (gUnknown_02038550.unk0 == 2) - gUnknown_02038550.unk0 = 1; -} - -static void sub_80A7880(void) -{ - switch (gUnknown_02038550.unk0) - { - case 1: - gUnknown_02038550.unk0 = 2; - break; - case 0: - sub_80A7970(); - break; - } -} - -static bool32 sub_80A78A0(void) -{ - struct UnknownStruct5 *r0 = &gUnknown_02038550; - - return (r0->unk0 == 0); -} - -static void sub_80A78B8(void) -{ - gUnknown_02038554.unk0 = 0; -} - -static bool32 sub_80A78C4(void) -{ - bool32 retVal; - - if (gLinkOpen == TRUE) - { - sub_80A7868(); - sub_80A75A8(); - retVal = TRUE; - } - else - { - retVal = FALSE; - } - return retVal; -} - -static void sub_80A78E8(void) -{ - sub_80A7880(); -} - -static int sub_80A78F4(void) -{ - int retVal; - - if (gLinkOpen == TRUE) - { - if (sub_80A76B8() != 0) - retVal = 1; - else - retVal = 2; - } - else - { - retVal = 0; - } - return retVal; -} - -static void sub_80A7918(void) -{ - sub_80A76E8(); -} - -static int sub_80A7924(void) -{ - if (gLinkOpen == TRUE && sub_80A76B8() == 0) - { - if (sub_80A76D0() != 0) - { - sub_80A7678(); - return 0; - } - } - else - { - return 0; - } - sub_80A7694(); - return 2; -} - -static int sub_80A7958(void) -{ - if (sub_80A76B8() == 0) - return 2; - sub_80A75A8(); - return 1; -} - -static void sub_80A7970(void) -{ - sub_80A75C4(); -} - -static void sub_80A797C(void) -{ - gUnknown_02038554.unk0 = 1; -} - -static int sub_80A7988(void) -{ - int val = gUnknown_02038554.unk0; - - gUnknown_02038554.unk0 = 0; - return val; -} - -static const u16 gPalette_83C170C[] = INCBIN_U16("graphics/unknown/83C170C.gbapal"); -static const u8 gSpriteImage_83C172C[] = INCBIN_U8("graphics/unknown_sprites/83C172C.4bpp"); - -const u8 gSpriteImage_UnusedCherry[] = INCBIN_U8("graphics/unused/cherry.4bpp"); -const u16 gSpritePalette_UnusedCherry[] = INCBIN_U16("graphics/unused/cherry.gbapal"); - -//------------------------------------------------------------------------------ -// Bag Sprite -//------------------------------------------------------------------------------ - -static const struct OamData sBagSpriteOamData = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 2, - .paletteNum = 7, - .affineParam = 0, -}; - -static const union AnimCmd sBagSpriteAnimSeq0[] = -{ - ANIMCMD_FRAME(0, 4), - ANIMCMD_END, -}; - -static const union AnimCmd sBagSpriteAnimSeq1[] = -{ - ANIMCMD_FRAME(64, 4), - ANIMCMD_END, -}; - -static const union AnimCmd sBagSpriteAnimSeq5[] = -{ - ANIMCMD_FRAME(128, 4), - ANIMCMD_END, -}; - -static const union AnimCmd sBagSpriteAnimSeq2[] = -{ - ANIMCMD_FRAME(192, 4), - ANIMCMD_END, -}; - -static const union AnimCmd sBagSpriteAnimSeq3[] = -{ - ANIMCMD_FRAME(256, 4), - ANIMCMD_END, -}; - -static const union AnimCmd sBagSpriteAnimSeq4[] = -{ - ANIMCMD_FRAME(320, 4), - ANIMCMD_END, -}; - -static const union AnimCmd *const sBagSpriteAnimTable[] = -{ - sBagSpriteAnimSeq0, - sBagSpriteAnimSeq1, - sBagSpriteAnimSeq2, - sBagSpriteAnimSeq3, - sBagSpriteAnimSeq4, - sBagSpriteAnimSeq5, -}; - -static const union AffineAnimCmd sBagSpriteAffineAnimSeq[] = -{ - AFFINEANIMCMD_FRAME(0, 0, -2, 2), - AFFINEANIMCMD_FRAME(0, 0, 2, 4), - AFFINEANIMCMD_FRAME(0, 0, -2, 4), - AFFINEANIMCMD_FRAME(0, 0, 2, 2), - AFFINEANIMCMD_END, -}; - -static const union AffineAnimCmd *const sBagSpriteAffineAnimTable[] = -{ - sBagSpriteAffineAnimSeq, -}; - -static const struct CompressedSpriteSheet sMaleBagSpriteSheet = {gBagMaleTiles, 0x3000, 30000}; -static const struct CompressedSpriteSheet sFemaleBagSpriteSheet = {gBagFemaleTiles, 0x3000, 30000}; -static const struct CompressedSpritePalette sBagSpritePalette = {gBagPalette, 30000}; - -static void sub_80A7998(struct Sprite *sprite) -{ - sprite->animNum = 0; - sprite->data0 = 0; - sprite->data1 = 0; - sprite->data2 = 0; - sprite->data3 = 0; - sprite->data4 = 0; - sprite->callback = sub_80A79B4; -} - -static void sub_80A79B4(struct Sprite *sprite) -{ - if (gUnknown_0203855B != -1) - sub_80A79EC(sprite); - if (gUnknown_0203855C != 0) - sub_80A7A94(sprite); -} - -static void sub_80A79EC(struct Sprite *sprite) -{ - switch (sprite->data3) - { - case 0: - if (gUnknown_0203855B != 6) - { - sprite->animBeginning = TRUE; - sprite->animNum = gUnknown_0203855B; - gUnknown_0203855B = -1; - } - else - { - sprite->animBeginning = TRUE; - sprite->animNum = 0; - sprite->pos1.y -= 4; - sprite->data0 = 4; - sprite->data3 = 1; - sub_80A7AE4(sprite); - } - break; - case 1: - if (sprite->data0 != 0) - { - if (sprite->data1 != 0) - { - sprite->pos1.y++; - sprite->data0--; - } - sprite->data1 = (sprite->data1 + 1) & 1; - } - else - { - gUnknown_0203855B = -1; - sprite->data1 = 0; - sprite->data3 = 0; - } - break; - } -} - -static void sub_80A7A94(struct Sprite *sprite) -{ - switch (sprite->data4) - { - case 0: - sprite->oam.affineMode = 1; - sprite->affineAnims = sBagSpriteAffineAnimTable; - InitSpriteAffineAnim(sprite); - sprite->data4 = 1; - break; - case 1: - sprite->data2++; - if (sprite->data2 == 12) - sub_80A7AE4(sprite); - break; - } -} - -static void sub_80A7AE4(struct Sprite *sprite) -{ - gUnknown_0203855C = 0; - sprite->oam.affineMode = 0; - sprite->data2 = 0; - sprite->data4 = 0; - FreeOamMatrix(sprite->oam.matrixNum); -} - -static const struct SpriteTemplate sBagSpriteTemplate = -{ - .tileTag = 30000, - .paletteTag = 30000, - .oam = &sBagSpriteOamData, - .anims = sBagSpriteAnimTable, - .images = NULL, - .affineAnims = sBagSpriteAffineAnimTable, - .callback = sub_80A7998, -}; - -static void CreateBagSprite(void) -{ - CreateSprite(&sBagSpriteTemplate, 58, 40, 0); -} - -//------------------------------------------------------------------------------ -// Pokeball Sprite -//------------------------------------------------------------------------------ - -static const struct OamData gOamData_83C1CF8 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 4, - .size = 1, - .tileNum = 0, - .priority = 2, - .paletteNum = 8, - .affineParam = 0, -}; - -static const union AffineAnimCmd gSpriteAffineAnim_83C1D00[] = -{ - AFFINEANIMCMD_FRAME(0, 0, 8, 32), - AFFINEANIMCMD_END, -}; - -static const union AffineAnimCmd gSpriteAffineAnim_83C1D10[] = -{ - AFFINEANIMCMD_FRAME(0, 0, -8, 32), - AFFINEANIMCMD_END, -}; - -static const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1D20[] = -{ - gSpriteAffineAnim_83C1D00, - gSpriteAffineAnim_83C1D10, -}; - -static const struct SpriteFrameImage gSpriteImageTable_83C1D28[] = -{ - {gSpriteImage_83C172C, sizeof(gSpriteImage_83C172C)}, -}; - -static const struct SpritePalette sPokeballSpritePalette = {gPalette_83C170C, 8}; - -static void sub_80A7B28(struct Sprite *sprite) -{ - sprite->data3 = 0; - sprite->data0 = 0; - sub_80A7B6C(sprite); - sprite->callback = sub_80A7B6C; -} - -static void sub_80A7B48(struct Sprite *sprite) -{ - sprite->centerToCornerVecX = sprite->data5 - ((sprite->data0 + 1) & 1); - sprite->centerToCornerVecY = sprite->data6 - ((sprite->data0 + 1) & 1); -} - -static void sub_80A7B6C(struct Sprite *sprite) -{ - if (sprite->data7 != 0) - { - switch (sprite->data3) - { - case 0: - sprite->oam.affineMode = 1; - if (sprite->data7 == 1) - sprite->affineAnims = gSpriteAffineAnimTable_83C1D20; - else - sprite->affineAnims = gSpriteAffineAnimTable_83C1D20 + 1; - InitSpriteAffineAnim(sprite); - sprite->data3 = 1; - sprite->data5 = sprite->centerToCornerVecX; - sprite->data6 = sprite->centerToCornerVecY; - sub_80A7B48(sprite); - break; - case 1: - sprite->data0++; - sub_80A7B48(sprite); - if (sprite->data0 == 32) - { - sprite->data0 = 0; - sprite->data3 = 0; - sprite->centerToCornerVecX = sprite->data5; - sprite->centerToCornerVecY = sprite->data6; - FreeOamMatrix(sprite->oam.matrixNum); - sprite->oam.affineMode = 0; - sprite->callback = SpriteCallbackDummy; - } - break; - } - } -} - -static const struct SpriteTemplate sPokeballSpriteTemplate = -{ - .tileTag = 0xFFFF, - .paletteTag = 8, - .oam = &gOamData_83C1CF8, - .anims = sBagSpriteAnimTable, - .images = gSpriteImageTable_83C1D28, - .affineAnims = gSpriteAffineAnimTable_83C1D20, - .callback = sub_80A7B28, -}; - -static void CreateBagPokeballSprite(u8 a) -{ - LoadSpritePalette(&sPokeballSpritePalette); - sPokeballSpriteId = CreateSprite(&sPokeballSpriteTemplate, 16, 88, 0); - gSprites[sPokeballSpriteId].data7 = a; -} - -static void sub_80A7C64(void) -{ - FreeSpritePaletteByTag(8); - FreeOamMatrix(gSprites[sPokeballSpriteId].oam.matrixNum); - DestroySprite(&gSprites[sPokeballSpriteId]); -} - -static const struct OamData sBerrySpriteOamData = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 1, - .paletteNum = 7, - .affineParam = 0, -}; - -static const struct OamData gOamData_83C1D58 = -{ - .y = 0, - .affineMode = 3, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 0, - .paletteNum = 7, - .affineParam = 0, -}; - -static const union AnimCmd sBerrySpriteAnimSeq[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END, -}; - -static const union AnimCmd *const sBerrySpriteAnimTable[] = -{ - sBerrySpriteAnimSeq, -}; - -static const struct SpriteFrameImage sBerrySpriteImageTable[] = -{ - {ewramBerryPic, 0x800}, -}; - -static void SpriteCB_BerrySprite(struct Sprite *); -static const struct SpriteTemplate sBerrySpriteTemplate = -{ - .tileTag = 0xFFFF, - .paletteTag = 30020, - .oam = &sBerrySpriteOamData, - .anims = sBerrySpriteAnimTable, - .images = sBerrySpriteImageTable, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BerrySprite, -}; - -static const union AffineAnimCmd gSpriteAffineAnim_83C1D8C[] = -{ - AFFINEANIMCMD_FRAME(-1, -1, -3, 96), - AFFINEANIMCMD_FRAME(0, 0, 0, 16), - AFFINEANIMCMD_FRAME(-2, -2, -1, 64), - AFFINEANIMCMD_FRAME(-8, 0, 0, 16), - AFFINEANIMCMD_FRAME(0, -8, 0, 16), - AFFINEANIMCMD_FRAME(256, 256, 0, 0), - AFFINEANIMCMD_JUMP(0), -}; - -static const union AffineAnimCmd gSpriteAffineAnim_83C1DC4[] = -{ - AFFINEANIMCMD_FRAME(-1, -1, 3, 96), - AFFINEANIMCMD_FRAME(0, 0, 0, 16), - AFFINEANIMCMD_FRAME(-2, -2, 1, 64), - AFFINEANIMCMD_FRAME(-8, 0, 0, 16), - AFFINEANIMCMD_FRAME(0, -8, 0, 16), - AFFINEANIMCMD_FRAME(256, 256, 0, 0), - AFFINEANIMCMD_JUMP(0), -}; - -static const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1DFC[] = -{ - gSpriteAffineAnim_83C1D8C, - gSpriteAffineAnim_83C1DC4, -}; - -static const struct SpriteTemplate gSpriteTemplate_83C1E04 = -{ - .tileTag = 0xFFFF, - .paletteTag = 30020, - .oam = &gOamData_83C1D58, - .anims = sBerrySpriteAnimTable, - .images = sBerrySpriteImageTable, - .affineAnims = gSpriteAffineAnimTable_83C1DFC, - .callback = SpriteCallbackDummy, -}; - -static const struct {const u8 *lzPic; const u8 *lzPalette;} sBerryGraphicsTable[] = -{ - {gBerryPic_Cheri, gBerryPalette_Cheri}, - {gBerryPic_Chesto, gBerryPalette_Chesto}, - {gBerryPic_Pecha, gBerryPalette_Pecha}, - {gBerryPic_Rawst, gBerryPalette_Rawst}, - {gBerryPic_Aspear, gBerryPalette_Aspear}, - {gBerryPic_Leppa, gBerryPalette_Leppa}, - {gBerryPic_Oran, gBerryPalette_Oran}, - {gBerryPic_Persim, gBerryPalette_Persim}, - {gBerryPic_Lum, gBerryPalette_Lum}, - {gBerryPic_Sitrus, gBerryPalette_Sitrus}, - {gBerryPic_Figy, gBerryPalette_Figy}, - {gBerryPic_Wiki, gBerryPalette_Wiki}, - {gBerryPic_Mago, gBerryPalette_Mago}, - {gBerryPic_Aguav, gBerryPalette_Aguav}, - {gBerryPic_Iapapa, gBerryPalette_Iapapa}, - {gBerryPic_Razz, gBerryPalette_Razz}, - {gBerryPic_Bluk, gBerryPalette_Bluk}, - {gBerryPic_Nanab, gBerryPalette_Nanab}, - {gBerryPic_Wepear, gBerryPalette_Wepear}, - {gBerryPic_Pinap, gBerryPalette_Pinap}, - {gBerryPic_Pomeg, gBerryPalette_Pomeg}, - {gBerryPic_Kelpsy, gBerryPalette_Kelpsy}, - {gBerryPic_Qualot, gBerryPalette_Qualot}, - {gBerryPic_Hondew, gBerryPalette_Hondew}, - {gBerryPic_Grepa, gBerryPalette_Grepa}, - {gBerryPic_Tamato, gBerryPalette_Tamato}, - {gBerryPic_Cornn, gBerryPalette_Cornn}, - {gBerryPic_Magost, gBerryPalette_Magost}, - {gBerryPic_Rabuta, gBerryPalette_Rabuta}, - {gBerryPic_Nomel, gBerryPalette_Nomel}, - {gBerryPic_Spelon, gBerryPalette_Spelon}, - {gBerryPic_Pamtre, gBerryPalette_Pamtre}, - {gBerryPic_Watmel, gBerryPalette_Watmel}, - {gBerryPic_Durin, gBerryPalette_Durin}, - {gBerryPic_Belue, gBerryPalette_Belue}, - {gBerryPic_Liechi, gBerryPalette_Liechi}, - {gBerryPic_Ganlon, gBerryPalette_Ganlon}, - {gBerryPic_Salac, gBerryPalette_Salac}, - {gBerryPic_Petaya, gBerryPalette_Petaya}, - {gBerryPic_Apicot, gBerryPalette_Apicot}, - {gBerryPic_Lansat, gBerryPalette_Lansat}, - {gBerryPic_Starf, gBerryPalette_Starf}, - {gBerryPic_Enigma, gBerryPalette_Enigma}, -}; - -static void DrawBerryPic(const u8 *src, u8 *dst) -{ - u8 i; - u8 j; - - memset(dst, 0, 0x800); - dst += 0x100; - for (i = 0; i < 6; i++) - { - dst += 32; - for (j = 0; j < 6; j++) - { - memcpy(dst, src, 32); - dst += 32; - src += 32; - } - if (i != 5) - dst += 32; - } -} - -static void LoadBerryPic(u8 berryId) -{ - struct SpritePalette spritePal; - - if (berryId == 0x2A && IsEnigmaBerryValid() == TRUE) - { - DrawBerryPic(gSaveBlock1.enigmaBerry.pic, ewramBerryPic); - spritePal.data = gSaveBlock1.enigmaBerry.palette; - spritePal.tag = 0x7544; - LoadSpritePalette(&spritePal); - } - else - { - spritePal.data = (u16 *)sBerryGraphicsTable[berryId].lzPalette; - spritePal.tag = 0x7544; - LoadCompressedObjectPalette((struct CompressedSpritePalette *)&spritePal); - sub_800D238(sBerryGraphicsTable[berryId].lzPic, ewramBerryPicTemp); - DrawBerryPic(ewramBerryPicTemp, ewramBerryPic); - } -} - -u8 CreateBerrySprite(u8 berryId, s16 x, s16 y) -{ - LoadBerryPic(berryId); - return CreateSprite(&sBerrySpriteTemplate, x, y, 0); -} - -static void SpriteCB_BerrySprite(struct Sprite *sprite) -{ - sprite->pos2.y = -gUnknown_030041B4; -} - -void sub_80A7DD4(void) -{ - FreeSpritePaletteByTag(0x7544); - FreeSpritePaletteByTag(8); -} - -u8 sub_80A7DEC(u8 berryId, u8 x, u8 y, bool8 animate) -{ - u8 spriteId; - - FreeSpritePaletteByTag(0x7544); - LoadBerryPic(berryId); - spriteId = CreateSprite(&gSpriteTemplate_83C1E04, x, y, 0); - if (animate == TRUE) - StartSpriteAffineAnim(&gSprites[spriteId], 1); - return spriteId; -} - -const struct CompressedSpriteSheet gUnknown_083C1F74 = {gBerryCheckCircle_Gfx, 2048, 0x2710}; - -const struct CompressedSpritePalette gUnknown_083C1F7C = {gBerryCheck_Pal, 0x2710}; - -static const struct OamData gOamData_83C1F84 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd gSpriteAnim_83C1F8C[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END, -}; - -static const union AnimCmd *const gSpriteAnimTable_83C1F94[] = -{ - gSpriteAnim_83C1F8C, -}; - -static const struct SpriteTemplate gSpriteTemplate_83C1F98 = -{ - .tileTag = 10000, - .paletteTag = 10000, - .oam = &gOamData_83C1F84, - .anims = gSpriteAnimTable_83C1F94, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BerrySprite, -}; - -u8 sub_80A7E5C(s16 x) -{ - return CreateSprite(&gSpriteTemplate_83C1F98, x, 99, 0); -} diff --git a/src/item_use.c b/src/item_use.c deleted file mode 100644 index 1750c1584..000000000 --- a/src/item_use.c +++ /dev/null @@ -1,1198 +0,0 @@ -#include "global.h" -#include "item_use.h" -#include "battle.h" -#include "berry.h" -#include "bike.h" -#include "coins.h" -#include "data2.h" -#include "event_data.h" -#include "field_effect.h" -#include "field_fadetransition.h" -#include "field_map_obj_helpers.h" -#include "field_player_avatar.h" -#include "field_weather.h" -#include "fieldmap.h" -#include "item.h" -#include "item_menu.h" -#include "items.h" -#include "mail.h" -#include "main.h" -#include "map_obj_lock.h" -#include "menu.h" -#include "menu_helpers.h" -#include "metatile_behavior.h" -#include "palette.h" -#include "party_menu.h" -#include "pokeblock.h" -#include "pokemon_item_effect.h" -#include "pokemon_menu.h" -#include "rom4.h" -#include "rom_8094928.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "vars.h" - -extern void (* gUnknown_03005D00)(u8); -extern void (* gFieldCallback)(void); -extern void (* gUnknown_0300485C)(void); -extern void (* gUnknown_03004AE4)(u8, u16, TaskFunc); - -extern u8 gUnknown_02038561; -extern u8 gLastFieldPokeMenuOpened; -extern u8 gBankInMenu; - -extern u8 gUnknown_081A1654[]; -extern u8 gUnknown_081A168F[]; - -extern u16 gBattlePartyID[]; - -extern u16 gBattleTypeFlags; - -static const u8 gSSTidalBetaString[] = _("この チケットで ふねに のりほうだい\nはやく のってみたいな"); -static const u8 gSSTidalBetaString2[] = _("この チケットで ふねに のりほうだい\nはやく のってみたいな"); - -static const u8 *const gUnknown_083D61DC[2] = -{ - gSSTidalBetaString, - gSSTidalBetaString2, -}; - -static const MainCallback gExitToOverworldFuncList[] = -{ - sub_808B020, - c2_exit_to_overworld_2_switch, - sub_810B96C, -}; - -static const u8 gItemFinderDirections[] = { DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST }; - -static const struct YesNoFuncTable gUnknown_083D61F4 = -{ - .yesFunc = sub_80C9FC0, - .noFunc = CleanUpItemMenuMessage, -}; - -void ExecuteSwitchToOverworldFromItemUse(u8 taskId) -{ - u8 taskData; - - if (gScriptItemId == 0xAF) - taskData = gTasks[taskId].data[15] - 1; - else - taskData = ItemId_GetType(gScriptItemId) - 1; - - gTasks[taskId].data[8] = (u32)gExitToOverworldFuncList[taskData] >> 16; - gTasks[taskId].data[9] = (u32)gExitToOverworldFuncList[taskData]; - gTasks[taskId].func = HandleItemMenuPaletteFade; -} - -void ItemMenu_ConfirmNormalFade(u8 var) -{ - ExecuteSwitchToOverworldFromItemUse(var); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); -} - -void ItemMenu_ConfirmComplexFade(u8 var) -{ - ExecuteSwitchToOverworldFromItemUse(var); - fade_screen(1, 0); -} - -void SetUpItemUseOnFieldCallback(u8 taskId) -{ - if (gTasks[taskId].data[2] != 1) - { - gFieldCallback = (void *)ExecuteItemUseFromBlackPalette; - ItemMenu_ConfirmNormalFade(taskId); - } - else - gUnknown_03005D00(taskId); -} - -void HandleDeniedItemUseMessage(u8 var1, u8 playerMenuStatus, const u8 *text) -{ - StringExpandPlaceholders(gStringVar4, text); - - switch (playerMenuStatus) - { - case 0: // Item Menu - MenuZeroFillWindowRect(0, 13, 13, 20); - DisplayItemMessageOnField(var1, gStringVar4, CleanUpItemMenuMessage, 1); - break; - default: // Field - DisplayItemMessageOnField(var1, gStringVar4, CleanUpOverworldMessage, 0); - break; - } -} - -void DisplayDadsAdviceCannotUseItemMessage(u8 var1, u8 playerMenuStatus) -{ - HandleDeniedItemUseMessage(var1, playerMenuStatus, gOtherText_DadsAdvice); -} - -void DisplayCantGetOffBikeItemMessage(u8 var1, u8 playerMenuStatus) -{ - HandleDeniedItemUseMessage(var1, playerMenuStatus, gOtherText_CantGetOffBike); -} - -u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId) -{ - if (ItemId_GetFieldFunc(itemId) == ItemUseOutOfBattle_TMHM) - return 1; - else if (ItemId_GetFieldFunc(itemId) == ItemUseOutOfBattle_EvolutionStone) - return 2; - else - return 0; -} - -void ItemMenu_ReadMail(u8 taskId) -{ - struct MailStruct mailStruct; - - if (!gPaletteFade.active) - { - mailStruct.itemId = gScriptItemId; - HandleReadMail(&mailStruct, sub_80A5D04, 0); - DestroyTask(taskId); - } -} - -void ItemUseOutOfBattle_Mail(u8 taskId) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = ItemMenu_ReadMail; -} - -void ItemUseOutOfBattle_Bike(u8 taskId) -{ - s16 x, y; - u8 tileBehavior; - - PlayerGetDestCoords(&x, &y); - tileBehavior = MapGridGetMetatileBehaviorAt(x, y); - - if (FlagGet(SYS_CYCLING_ROAD) == TRUE // on cycling road? - || MetatileBehavior_IsVerticalRail(tileBehavior) == TRUE - || MetatileBehavior_IsHorizontalRail(tileBehavior) == TRUE - || MetatileBehavior_IsIsolatedVerticalRail(tileBehavior) == TRUE - || MetatileBehavior_IsIsolatedHorizontalRail(tileBehavior) == TRUE) - { - DisplayCantGetOffBikeItemMessage(taskId, gTasks[taskId].data[2]); - } - else - { - if (IsBikingAllowedByMap() == TRUE && IsBikingDisallowedByPlayer() == FALSE) - { - gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Bike; - SetUpItemUseOnFieldCallback(taskId); - } - else - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]); - } -} - -void ItemUseOnFieldCB_Bike(u8 taskId) -{ - if (ItemId_GetSecondaryId(gScriptItemId) == 0) - GetOnOffBike(2); - if (ItemId_GetSecondaryId(gScriptItemId) == 1) - GetOnOffBike(4); - - sub_8064E2C(); - ScriptContext2_Disable(); - DestroyTask(taskId); -} - -bool32 CanFish(void) -{ - s16 x, y; - u16 tileBehavior; - - GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - tileBehavior = MapGridGetMetatileBehaviorAt(x, y); - - if (MetatileBehavior_IsWaterfall(tileBehavior)) - return FALSE; - - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_4)) - return FALSE; - - if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) - { - if (IsPlayerFacingSurfableFishableWater()) - return TRUE; - } - else - { - if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior) && !MapGridIsImpassableAt(x, y)) - return TRUE; - if (MetatileBehavior_IsBridge(tileBehavior) == TRUE) - return TRUE; - } - - return FALSE; -} - -void ItemUseOutOfBattle_Rod(u8 taskId) -{ - if (CanFish() == TRUE) - { - gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Rod; - SetUpItemUseOnFieldCallback(taskId); - } - else - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]); -} - -void ItemUseOnFieldCB_Rod(u8 taskId) -{ - StartFishing(ItemId_GetSecondaryId(gScriptItemId)); - DestroyTask(taskId); -} - -void ItemUseOutOfBattle_Itemfinder(u8 var) -{ - IncrementGameStat(0x27); - gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Itemfinder; - SetUpItemUseOnFieldCallback(var); -} - -void ItemUseOnFieldCB_Itemfinder(u8 taskId) -{ - if (ItemfinderCheckForHiddenItems(gMapHeader.events, taskId) == TRUE) - gTasks[taskId].func = RunItemfinderResults; - else - DisplayItemMessageOnField(taskId, gOtherText_NoResponse, ExitItemfinder, 0); -} - -void RunItemfinderResults(u8 taskId) -{ - u8 playerDir; - u8 playerDirToItem; - u8 i; - s16 *data = gTasks[taskId].data; - - if (!data[3]) - { - if (data[4] == 4) - { - playerDirToItem = GetPlayerDirectionTowardsHiddenItem(data[0], data[1]); - if (playerDirToItem) - { - SetPlayerDirectionTowardsItem(gItemFinderDirections[playerDirToItem - 1]); - gTasks[taskId].func = DisplayItemRespondingMessageAndExitItemfinder; - } - else // player is above hidden item. - { - playerDir = player_get_direction_lower_nybble(); - - // rotate player clockwise depending on current direction. - for (i = 0; i < 4; i++) - if (playerDir == gItemFinderDirections[i]) - data[5] = (i + 1) & 3; - - gTasks[taskId].func = RotatePlayerAndExitItemfinder; - data[3] = 0; - data[2] = 0; - } - return; - } - PlaySE(SE_DAUGI); // play the itemfinder jingle 4 times before executing the itemfinder. - data[4]++; - } - data[3] = (data[3] + 1) & 0x1F; -} - -void ExitItemfinder(u8 taskId) -{ - MenuZeroFillWindowRect(0, 14, 29, 19); - sub_8064E2C(); - ScriptContext2_Disable(); - DestroyTask(taskId); -} - -bool8 ItemfinderCheckForHiddenItems(struct MapEvents *events, u8 taskId) -{ - int distanceX, distanceY; - u16 x, y; - s16 newDistanceX, newDistanceY, i; - - PlayerGetDestCoords(&x, &y); - gTasks[taskId].data[2] = FALSE; - - for (i = 0; i < events->bgEventCount; i++) - { - if ((events -> bgEvents[i].kind == 7) && !FlagGet(events -> bgEvents[i].bgUnion.hiddenItem.hiddenItemId + 600)) - { - // do a distance lookup of each item so long as the index remains less than the objects on the current map. - distanceX = (u16)events -> bgEvents[i].x + 7; - newDistanceX = distanceX - x; - distanceY = (u16)events -> bgEvents[i].y + 7; - newDistanceY = distanceY - y; - - // is item in range? - if ((u16)(newDistanceX + 7) < 15 && (newDistanceY >= -5) && (newDistanceY < 6)) - sub_80C9838(taskId, newDistanceX, newDistanceY); // send coordinates of the item relative to the player - } - } - sub_80C9720(taskId); - - // hidden item detected? - if(gTasks[taskId].data[2] == TRUE) - return TRUE; - else - return FALSE; -} - -bool8 HiddenItemAtPos(struct MapEvents *events, s16 x, s16 y) -{ - u8 bgEventCount = events->bgEventCount; - struct BgEvent *bgEvent = events->bgEvents; - int i; - - for(i = 0; i < bgEventCount; i++) - { - if(bgEvent[i].kind == 7 && x == (u16)bgEvent[i].x && y == (u16)bgEvent[i].y) // hidden item and coordinates matches x and y passed? - { - if(!FlagGet(bgEvent[i].bgUnion.hiddenItem.hiddenItemId + 600)) - return TRUE; - else - return FALSE; - } - } - return FALSE; -} - -bool8 sub_80C9688(struct MapConnection *connection, int x, int y) -{ - struct MapHeader *mapHeader; - u16 localX, localY; - u32 localOffset; - s32 localLength; - - mapHeader = mapconnection_get_mapheader(connection); - - switch(connection->direction) - { - // same weird temp variable behavior seen in HiddenItemAtPos - case 2: - localOffset = connection->offset + 7; - localX = x - localOffset; - localLength = mapHeader->mapData->height - 7; - localY = localLength + y; // additions are reversed for some reason - break; - case 1: - localOffset = connection->offset + 7; - localX = x - localOffset; - localLength = gMapHeader.mapData->height + 7; - localY = y - localLength; - break; - case 3: - localLength = mapHeader->mapData->width - 7; - localX = localLength + x; // additions are reversed for some reason - localOffset = connection->offset + 7; - localY = y - localOffset; - break; - case 4: - localLength = gMapHeader.mapData->width + 7; - localX = x - localLength; - localOffset = connection->offset + 7; - localY = y - localOffset; - break; - default: - return FALSE; - } - return HiddenItemAtPos(mapHeader->events, localX, localY); -} - -// weird math -#ifdef NONMATCHING -void sub_80C9720(u8 taskId) -{ - s16 x, y; - s16 curX, curY; - s16 width = gMapHeader.mapData->width + 7; - s16 height = gMapHeader.mapData->height + 7; - - PlayerGetDestCoords(&x, &y); - - for (curX = x - 7; curX <= x + 7; curX++) - { - for (curY = y - 5; curY <= y + 5; curY++) - { - if (7 > curX - || curX >= width - || 7 > curY - || curY >= height) - { - struct MapConnection *conn = sub_8056BA0(curX, curY); - if (conn && sub_80C9688(conn, curX, curY) == TRUE) - sub_80C9838(taskId, curX - x, curY - y); - } - } - } -} -#else -__attribute__((naked)) -void sub_80C9720(u8 taskId) -{ - 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, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x4]\n\ - ldr r0, _080C9834 @ =gMapHeader\n\ - ldr r1, [r0]\n\ - ldr r0, [r1]\n\ - adds r0, 0x7\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x8]\n\ - ldr r0, [r1, 0x4]\n\ - adds r0, 0x7\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0xC]\n\ - mov r4, sp\n\ - adds r4, 0x2\n\ - mov r0, sp\n\ - adds r1, r4, 0\n\ - bl PlayerGetDestCoords\n\ - mov r0, sp\n\ - ldrh r0, [r0]\n\ - subs r0, 0x7\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - asrs r0, 16\n\ - mov r1, sp\n\ - movs r2, 0\n\ - ldrsh r1, [r1, r2]\n\ - adds r1, 0x7\n\ - cmp r0, r1\n\ - bgt _080C9824\n\ -_080C976E:\n\ - mov r5, sp\n\ - ldrh r0, [r5, 0x2]\n\ - subs r0, 0x5\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - lsls r2, r4, 16\n\ - asrs r1, r2, 16\n\ - movs r6, 0x2\n\ - ldrsh r0, [r5, r6]\n\ - adds r0, 0x5\n\ - lsls r3, 16\n\ - mov r8, r3\n\ - cmp r1, r0\n\ - bgt _080C980E\n\ - movs r0, 0x7\n\ - str r0, [sp, 0x10]\n\ - mov r1, r8\n\ - asrs r1, 16\n\ - mov r9, r1\n\ - mov r10, r0\n\ -_080C9796:\n\ - ldr r3, [sp, 0x10]\n\ - cmp r3, r9\n\ - bgt _080C97B8\n\ - ldr r5, [sp, 0x8]\n\ - lsls r0, r5, 16\n\ - asrs r0, 16\n\ - cmp r9, r0\n\ - bge _080C97B8\n\ - asrs r1, r2, 16\n\ - cmp r10, r1\n\ - bgt _080C97B8\n\ - ldr r6, [sp, 0xC]\n\ - lsls r0, r6, 16\n\ - asrs r0, 16\n\ - lsls r7, r4, 16\n\ - cmp r1, r0\n\ - blt _080C97F6\n\ -_080C97B8:\n\ - mov r0, r8\n\ - asrs r5, r0, 16\n\ - lsls r4, 16\n\ - asrs r6, r4, 16\n\ - adds r0, r5, 0\n\ - adds r1, r6, 0\n\ - bl sub_8056BA0\n\ - adds r7, r4, 0\n\ - cmp r0, 0\n\ - beq _080C97F6\n\ - adds r1, r5, 0\n\ - adds r2, r6, 0\n\ - bl sub_80C9688\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _080C97F6\n\ - mov r0, sp\n\ - ldrh r1, [r0]\n\ - subs r1, r5, r1\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - ldrh r2, [r0, 0x2]\n\ - subs r2, r6, r2\n\ - lsls r2, 16\n\ - asrs r2, 16\n\ - ldr r0, [sp, 0x4]\n\ - bl sub_80C9838\n\ -_080C97F6:\n\ - movs r1, 0x80\n\ - lsls r1, 9\n\ - adds r0, r7, r1\n\ - lsrs r4, r0, 16\n\ - lsls r2, r4, 16\n\ - asrs r1, r2, 16\n\ - mov r3, sp\n\ - movs r5, 0x2\n\ - ldrsh r0, [r3, r5]\n\ - adds r0, 0x5\n\ - cmp r1, r0\n\ - ble _080C9796\n\ -_080C980E:\n\ - movs r1, 0x80\n\ - lsls r1, 9\n\ - add r1, r8\n\ - lsrs r3, r1, 16\n\ - asrs r1, 16\n\ - mov r0, sp\n\ - movs r6, 0\n\ - ldrsh r0, [r0, r6]\n\ - adds r0, 0x7\n\ - cmp r1, r0\n\ - ble _080C976E\n\ -_080C9824:\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 {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080C9834: .4byte gMapHeader\n\ - .syntax divided"); -} -#endif - -void sub_80C9838(u8 taskId, s16 x, s16 y) -{ - s16 *data = gTasks[taskId].data; - s16 var1, var2, var3, var4; - - if(data[2] == FALSE) - { - data[0] = x; - data[1] = y; - data[2] = TRUE; - } - else - { - // data[0] and data[1] contain the player's coordinates. - // x and y contain the item's coordinates. - if(data[0] < 0) - var1 = data[0] * -1; // item is to the left - else - var1 = data[0]; // item is to the right - - if(data[1] < 0) - var2 = data[1] * -1; // item is to the north - else - var2 = data[1]; // item is to the south - - if(x < 0) - var3 = x * -1; - else - var3 = x; - - if(y < 0) - var4 = y * -1; - else - var4 = y; - - if(var1 + var2 > var3 + var4) - { - data[0] = x; - data[1] = y; - } - else - { - if(var1 + var2 == var3 + var4 && (var2 > var4 || (var2 == var4 && data[1] < y))) - { - data[0] = x; - data[1] = y; - } - } - } -} - -u8 GetPlayerDirectionTowardsHiddenItem(s16 itemX, s16 itemY) -{ - s16 abX, abY; - - if(itemX == 0 && itemY == 0) - return DIR_NONE; // player is standing on the item. - - // get absolute X distance. - if(itemX < 0) - abX = itemX * -1; - else - abX = itemX; - - // get absolute Y distance. - if(itemY < 0) - abY = itemY * -1; - else - abY = itemY; - - if(abX > abY) - { - if(itemX < 0) - return DIR_EAST; - else - return DIR_NORTH; - } - else - { - if(abX < abY) - { - if(itemY < 0) - return DIR_SOUTH; - else - return DIR_WEST; - } - if(abX == abY) - { - if(itemY < 0) - return DIR_SOUTH; - else - return DIR_WEST; - } - return DIR_NONE; // should never get here. return something so it doesnt crash. - } -} - -void SetPlayerDirectionTowardsItem(u8 direction) -{ - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]); - FieldObjectClearAnim(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]); - UnfreezeMapObject(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]); - PlayerTurnInPlace(direction); -} - -void DisplayItemRespondingMessageAndExitItemfinder(u8 taskId) -{ - if(FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE) - DisplayItemMessageOnField(taskId, gOtherText_ItemfinderResponding, ExitItemfinder, 0); -} - -void RotatePlayerAndExitItemfinder(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - if(FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE - || data[2] == FALSE) - { - SetPlayerDirectionTowardsItem(gItemFinderDirections[data[5]]); - data[2] = 1; - data[5] = (data[5] + 1) & 3; - data[3]++; - - if(data[3] == 4) - DisplayItemMessageOnField(taskId, gOtherText_ItemfinderItemUnderfoot, ExitItemfinder, 0); - } -} - -void ItemUseOutOfBattle_PokeblockCase(u8 taskId) -{ - if(sub_80F9344() == TRUE) - { - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]); - } - else if(gTasks[taskId].data[2] != TRUE) - { - sub_810BA7C(0); - ItemMenu_ConfirmNormalFade(taskId); - } - else - { - gFieldCallback = (void *)sub_8080E28; - sub_810BA7C(1); - ItemMenu_ConfirmComplexFade(taskId); - } -} - -void ItemUseOutOfBattle_CoinCase(u8 taskId) -{ - ConvertIntToDecimalStringN(gStringVar1, GetCoins(), 0, 4); - StringExpandPlaceholders(gStringVar4, gOtherText_Coins3); - - if(!gTasks[taskId].data[2]) - { - MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); - DisplayItemMessageOnField(taskId, gStringVar4, CleanUpItemMenuMessage, 1); - } - else - { - DisplayItemMessageOnField(taskId, gStringVar4, CleanUpOverworldMessage, 0); - } -} - -void sub_80C9BB8(u8 var) -{ - if(gMain.newKeys & A_BUTTON) - CleanUpItemMenuMessage(var); -} - -void sub_80C9BD8(u8 var) -{ - if(gMain.newKeys & A_BUTTON) - CleanUpOverworldMessage(var); -} - -// unused -void ItemUseOutOfBattle_SSTicket(u8 taskId) -{ - if(gTasks[taskId].data[2] == 0) - { - MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); - DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BB8, 1); - } - else - { - DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BD8, 0); - } -} - -void sub_80C9C7C(u8 taskId) -{ - if(IsPlayerFacingPlantedBerryTree() == TRUE) - { - gUnknown_03005D00 = sub_80C9D00; - gFieldCallback = ExecuteItemUseFromBlackPalette; - gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; - gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch; - gTasks[taskId].func = HandleItemMenuPaletteFade; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - } - else - { - ItemId_GetFieldFunc(gScriptItemId)(taskId); - } -} - -void sub_80C9D00(u8 taskId) -{ - RemoveBagItem(gScriptItemId, 1); - ScriptContext2_Enable(); - ScriptContext1_SetupScript(gUnknown_081A1654); - DestroyTask(taskId); -} - -void ItemUseOutOfBattle_WailmerPail(u8 taskId) -{ - if(TryToWaterBerryTree() == TRUE) - { - gUnknown_03005D00 = sub_80C9D74; - SetUpItemUseOnFieldCallback(taskId); - } - else - { - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]); - } -} - -void sub_80C9D74(u8 taskId) -{ - ScriptContext2_Enable(); - ScriptContext1_SetupScript(gUnknown_081A168F); - DestroyTask(taskId); -} - -void sub_80C9D98(u8 taskId) -{ - gUnknown_02038561 = 0; - ItemMenu_ConfirmNormalFade(taskId); -} - -void ItemUseOutOfBattle_Medicine(u8 taskId) -{ - gUnknown_03004AE4 = UseMedicine; - sub_80C9D98(taskId); -} - -void ItemUseOutOfBattle_SacredAsh(u8 taskId) -{ - u8 i; - - gLastFieldPokeMenuOpened = 0; - - for(i = 0; i < 6; i++) - { - if(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0 && GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) - { - gLastFieldPokeMenuOpened = i; - break; - } - } - gUnknown_03004AE4 = sub_8070048; - gUnknown_02038561 = 4; - ItemMenu_ConfirmNormalFade(taskId); -} - -void ItemUseOutOfBattle_PPRecovery(u8 taskId) -{ - gUnknown_03004AE4 = DoPPRecoveryItemEffect; - sub_80C9D98(taskId); -} - -void ItemUseOutOfBattle_PPUp(u8 taskId) -{ - gUnknown_03004AE4 = DoPPUpItemEffect; - sub_80C9D98(taskId); -} - -void ItemUseOutOfBattle_RareCandy(u8 taskId) -{ - gUnknown_03004AE4 = DoRareCandyItemEffect; - sub_80C9D98(taskId); -} - -void ItemUseOutOfBattle_TMHM(u8 taskId) -{ - MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); - - if(gScriptItemId >= ITEM_HM01) - DisplayItemMessageOnField(taskId, gOtherText_BootedHM, sub_80C9EE4, 1); // HM - else - DisplayItemMessageOnField(taskId, gOtherText_BootedTM, sub_80C9EE4, 1); // TM -} - -void sub_80C9EE4(u8 taskId) -{ - PlaySE(2); - gTasks[taskId].func = sub_80C9F10; -} - -void sub_80C9F10(u8 taskId) -{ - if(gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) - { - StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gScriptItemId)]); - StringExpandPlaceholders(gStringVar4, gOtherText_ContainsMove); - DisplayItemMessageOnField(taskId, gStringVar4, sub_80C9F80, 1); - } -} - -void sub_80C9F80(u8 var) -{ - DisplayYesNoMenu(7, 7, 1); - sub_80A3FA0(gBGTilemapBuffers[1], 8, 8, 5, 4, 1); - DoYesNoFuncWithChoice(var, &gUnknown_083D61F4); -} - -void sub_80C9FC0(u8 var) -{ - gUnknown_03004AE4 = TeachMonTMMove; - sub_80C9D98(var); -} - -void sub_80C9FDC(void) -{ - RemoveBagItem(gScriptItemId, 1); - sub_80A3E0C(); - CopyItemName(gScriptItemId, gStringVar2); - StringExpandPlaceholders(gStringVar4, gOtherText_UsedItem); -} - -void ItemUseOutOfBattle_Repel(u8 var) -{ - if(VarGet(VAR_REPEL_STEP_COUNT) == FALSE) - { - VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gScriptItemId)); - sub_80C9FDC(); - DisplayItemMessageOnField(var, gStringVar4, CleanUpItemMenuMessage, 1); - } - else - { - DisplayItemMessageOnField(var, gOtherText_RepelLingers, CleanUpItemMenuMessage, 1); - } -} - -void sub_80CA07C(void) -{ - sub_80A3E0C(); - CopyItemName(gScriptItemId, gStringVar2); -} - -void sub_80CA098(u8 taskId) -{ - if(++gTasks[taskId].data[15] > 7) - { - PlaySE(0x75); - DisplayItemMessageOnField(taskId, gStringVar4, CleanUpItemMenuMessage, 1); - } -} - -void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId) -{ - if(gScriptItemId == 43) - { - FlagSet(SYS_ENC_UP_ITEM); - FlagReset(SYS_ENC_DOWN_ITEM); - sub_80CA07C(); - StringExpandPlaceholders(gStringVar4, gOtherText_UsedFlute); - gTasks[taskId].func = sub_80CA098; - gTasks[taskId].data[15] = 0; - } - else if(gScriptItemId == 42) - { - FlagSet(SYS_ENC_DOWN_ITEM); - FlagReset(SYS_ENC_UP_ITEM); - sub_80CA07C(); - StringExpandPlaceholders(gStringVar4, gOtherText_UsedRepel); - gTasks[taskId].func = sub_80CA098; - gTasks[taskId].data[15] = 0; - } -} - -void task08_080A1C44(u8 taskId) -{ - player_avatar_init_params_reset(); - sub_80878A8(); - DestroyTask(taskId); -} - -void sub_80CA18C(u8 taskId) -{ - sub_8053014(); - sub_80C9FDC(); - gTasks[taskId].data[0] = 0; - DisplayItemMessageOnField(taskId, gStringVar4, task08_080A1C44, 0); -} - -bool8 sub_80CA1C8(void) -{ - if(gMapHeader.mapType == MAP_TYPE_UNDERGROUND) - return TRUE; - else - return FALSE; -} - -void ItemUseOutOfBattle_EscapeRope(u8 taskId) -{ - if(sub_80CA1C8() == TRUE) // is map type an area you can use escape rope? - { - gUnknown_03005D00 = sub_80CA18C; - SetUpItemUseOnFieldCallback(taskId); - } - else - { - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]); - } -} - -void ItemUseOutOfBattle_EvolutionStone(u8 var) -{ - gUnknown_03004AE4 = DoEvolutionStoneItemEffect; - sub_80C9D98(var); -} - -void ItemUseInBattle_PokeBall(u8 var) -{ - if(PlayerPartyAndPokemonStorageFull() == FALSE) // have room for mon? - { - RemoveBagItem(gScriptItemId, 1); - sub_80A7094(var); - } - else - { - MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); - DisplayItemMessageOnField(var, gOtherText_BoxIsFull, CleanUpItemMenuMessage, 1); - } -} - -void sub_80CA294(u8 var) -{ - if(gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) - sub_80A7094(var); -} - -void sub_80CA2BC(u8 taskId) -{ - if(++gTasks[taskId].data[15] > 7) - { - PlaySE(1); - RemoveBagItem(gScriptItemId, 1); - DisplayItemMessageOnField(taskId, sub_803F378(gScriptItemId), sub_80CA294, 1); - } -} - -void ItemUseInBattle_StatIncrease(u8 taskId) -{ - u16 partyId = gBattlePartyID[gBankInMenu]; - - MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); - - if(ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gScriptItemId, partyId, 0) != FALSE) - { - DisplayItemMessageOnField(taskId, gOtherText_WontHaveAnyEffect, CleanUpItemMenuMessage, 1); - } - else - { - gTasks[taskId].func = sub_80CA2BC; - gTasks[taskId].data[15] = 0; - } -} - -void sub_80CA394(u8 taskId) -{ - if(!gPaletteFade.active) - { - sub_8094E4C(); - gpu_pal_allocator_reset__manage_upper_four(); - DestroyTask(taskId); - } -} - -void sub_80CA3C0(u8 taskId) -{ - gTasks[taskId].func = sub_80CA394; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); -} - -void ItemUseInBattle_Medicine(u8 var) -{ - gUnknown_03004AE4 = UseMedicine; - sub_80CA3C0(var); -} - -void unref_sub_80CA410(u8 var) -{ - gUnknown_03004AE4 = sub_8070048; - sub_80CA3C0(var); -} - -void ItemUseInBattle_PPRecovery(u8 var) -{ - gUnknown_03004AE4 = DoPPRecoveryItemEffect; - sub_80CA3C0(var); -} - -void unref_sub_80CA448(u8 var) -{ - MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); - - if(ExecuteTableBasedItemEffect__(0, gScriptItemId, 0) == FALSE) - { - RemoveBagItem(gScriptItemId, 1); - GetMonNickname(&gPlayerParty[0], gStringVar1); - StringExpandPlaceholders(gStringVar4, gOtherText_SnapConfusion); - DisplayItemMessageOnField(var, gStringVar4, sub_80A7094, 1); - } - else - { - DisplayItemMessageOnField(var, gOtherText_WontHaveAnyEffect, CleanUpItemMenuMessage, 1); - } -} - -void ItemUseInBattle_Escape(u8 taskId) -{ - MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); - - if((gBattleTypeFlags & BATTLE_TYPE_TRAINER) == FALSE) - { - sub_80C9FDC(); - DisplayItemMessageOnField(taskId, gStringVar4, sub_80A7094, 1); - } - else - { - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]); - } -} - -void ItemUseOutOfBattle_EnigmaBerry(u8 taskId) -{ - switch(GetItemEffectType(gScriptItemId) - 1) - { - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - case 16: - gTasks[taskId].data[15] = 1; - ItemUseOutOfBattle_Medicine(taskId); - break; - case 9: - gTasks[taskId].data[15] = 1; - ItemUseOutOfBattle_SacredAsh(taskId); - break; - case 0: - gTasks[taskId].data[15] = 1; - ItemUseOutOfBattle_RareCandy(taskId); - break; - case 18: - case 19: - gTasks[taskId].data[15] = 1; - ItemUseOutOfBattle_PPUp(taskId); - break; - case 20: - gTasks[taskId].data[15] = 1; - ItemUseOutOfBattle_PPRecovery(taskId); - break; - default: - gTasks[taskId].data[15] = 4; - ItemUseOutOfBattle_CannotUse(taskId); - } -} - -void ItemUseInBattle_EnigmaBerry(u8 taskId) -{ - switch(GetItemEffectType(gScriptItemId)) - { - case 0: - ItemUseInBattle_StatIncrease(taskId); - break; - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 11: - ItemUseInBattle_Medicine(taskId); - break; - case 21: - ItemUseInBattle_PPRecovery(taskId); - break; - default: - ItemUseOutOfBattle_CannotUse(taskId); - } -} - -void ItemUseOutOfBattle_CannotUse(u8 taskId) -{ - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]); -} diff --git a/src/landmark.c b/src/landmark.c deleted file mode 100644 index 6a53716bb..000000000 --- a/src/landmark.c +++ /dev/null @@ -1,73 +0,0 @@ -#include "global.h" -#include "landmark.h" -#include "event_data.h" - -#define MAPSEC_NONE 0x58 - -struct Landmark -{ - u8 *name; - u16 flag; -}; - -struct LandmarkList -{ - u8 mapSection; - u8 id; - const struct Landmark **landmarks; -}; - -extern const struct LandmarkList gLandmarkLists[]; - -static const struct Landmark **GetLandmarks(u8 mapSection, u8 id); - -u8 *GetLandmarkName(u8 mapSection, u8 id, u8 count) -{ - const struct Landmark **landmarks = GetLandmarks(mapSection, id); - - if (!landmarks) - return NULL; - - while (1) - { - const struct Landmark *landmark = *landmarks; - - if (landmark->flag == 0xFFFF || FlagGet(landmark->flag) == TRUE) - { - if (count == 0) - break; - else - count--; - } - - landmarks++; - if (!*landmarks) - return NULL; - } - - return (*landmarks)->name; -} - -static const struct Landmark **GetLandmarks(u8 mapSection, u8 id) -{ - u16 i = 0; - - for (; gLandmarkLists[i].mapSection != MAPSEC_NONE; i++) - { - if (gLandmarkLists[i].mapSection > mapSection) - return NULL; - if (gLandmarkLists[i].mapSection == mapSection) - break; - } - - if (gLandmarkLists[i].mapSection == MAPSEC_NONE) - return NULL; - - for (; gLandmarkLists[i].mapSection == mapSection; i++) - { - if (gLandmarkLists[i].id == id) - return gLandmarkLists[i].landmarks; - } - - return NULL; -} diff --git a/src/libc.c b/src/libc.c deleted file mode 100644 index 920673e3e..000000000 --- a/src/libc.c +++ /dev/null @@ -1,143 +0,0 @@ -#include "global.h" -#include - -#define LBLOCKSIZE (sizeof(long)) - -// Nonzero if (long)X contains a NULL byte. -#define CONTAINSNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) - -// Nonzero if X is not aligned on a "long" boundary. -#define UNALIGNED(X) ((long)X & (LBLOCKSIZE - 1)) - -void *memcpy(void *dst0, const void *src0, size_t len0) -{ - char *dst = dst0; - const char *src = src0; - long *aligned_dst; - const long *aligned_src; - unsigned int len = len0; - - // If the size is small, or either src or dst is unaligned, - // then go to the byte copy loop. This should be rare. - if (len >= 16 && !(UNALIGNED(src) | UNALIGNED(dst))) - { - aligned_dst = (long *)dst; - aligned_src = (long *)src; - - // Copy 4X long words at a time if possible. - while (len >= 16) - { - *aligned_dst++ = *aligned_src++; - *aligned_dst++ = *aligned_src++; - *aligned_dst++ = *aligned_src++; - *aligned_dst++ = *aligned_src++; - len -= 16; - } - - // Copy one long word at a time if possible - while (len >= 4) - { - *aligned_dst++ = *aligned_src++; - len -= 4; - } - - dst = (char *)aligned_dst; - src = (char *)aligned_src; - } - - // Pick up any remaining bytes with a byte copier. - while (len--) - *dst++ = *src++; - - return dst0; -} - -void *memset(void *m, int c, size_t n) -{ - char *s = (char *)m; - int count, i; - unsigned long buffer; - unsigned long *aligned_addr; - unsigned char *unaligned_addr; - - // If the size is small or m is unaligned, - // then go to the byte copy loop. This should be rare. - if (n >= LBLOCKSIZE && !UNALIGNED(m)) - { - // We know that n is large and m is word-aligned. - aligned_addr = (unsigned long *)m; - - // Store C into each char sized location in buffer so that - // we can set large blocks quickly. - c &= 0xFF; - if (LBLOCKSIZE == 4) - { - buffer = (c << 8) | c; - buffer |= (buffer << 16); - } - else - { - buffer = 0; - for (i = 0; i < LBLOCKSIZE; i++) - buffer = (buffer << 8) | c; - } - - while (n >= LBLOCKSIZE * 4) - { - *aligned_addr++ = buffer; - *aligned_addr++ = buffer; - *aligned_addr++ = buffer; - *aligned_addr++ = buffer; - n -= LBLOCKSIZE * 4; - } - while (n >= LBLOCKSIZE) - { - *aligned_addr++ = buffer; - n -= LBLOCKSIZE; - } - - s = (char *)aligned_addr; - } - - // Pick up the remainder with a bytewise loop. - while (n--) - *s++ = (char)c; - - return m; -} - -int strcmp(const char *s1, const char *s2) -{ - unsigned long *a1; - unsigned long *a2; - - // If s1 or s2 are unaligned, then skip this and compare bytes. - if (!(UNALIGNED(s1) | UNALIGNED(s2))) - { - // Compare them a word at a time. - a1 = (unsigned long *)s1; - a2 = (unsigned long *)s2; - while (*a1 == *a2) - { - // If *a1 == *a2, and we find a null in *a1, - // then the strings must be equal, so return zero. - if (CONTAINSNULL(*a1)) - return 0; - - a1++; - a2++; - } - - s1 = (char *)a1; - s2 = (char *)a2; - } - - // Check the remaining few bytes. - while (*s1 != '\0' && *s1 == *s2) - { - s1++; - s2++; - } - - return (*(unsigned char *) s1) - (*(unsigned char *) s2); -} diff --git a/src/link.c b/src/link.c deleted file mode 100644 index 5858ad8bf..000000000 --- a/src/link.c +++ /dev/null @@ -1,1820 +0,0 @@ -#include "global.h" -#include "link.h" -#include "battle.h" -#include "berry.h" -#include "berry_blender.h" -#include "hall_of_fame.h" -#include "item_use.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "rng.h" -#include "save.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "strings2.h" -#include "task.h" -#include "text.h" - -#define SIO_MULTI_CNT ((struct SioMultiCnt *)REG_ADDR_SIOCNT) - -struct BlockTransfer -{ - u16 pos; - u16 size; - void *src; - bool8 active; - u8 multiplayerId; -}; - -struct LinkTestBGInfo -{ - u32 screenBaseBlock; - u32 paletteNum; - u32 dummy_8; - u32 dummy_C; -}; - -extern u8 unk_2000000[]; -extern u8 unk_2004000[]; -extern u16 gBattleTypeFlags; - -extern u16 word_3004858; - -static void InitLinkTestBG(u8, u8, u8, u8); -void InitLinkTestBG_Unused(u8, u8, u8, u8); -void LinkTestScreen(); -static void InitLocalLinkPlayer(void); -static void VBlankCB_LinkTest(void); -static void InitLink(void); -static void Task_TriggerHandshake(u8); -static void TestBlockTransfer(u32, u32, u32); -static void LinkTestProcessKeyInput(void); -static void CB2_LinkTest(void); -static void HandleReceiveRemoteLinkPlayer(u8); -static void ProcessRecvCmds(u8); -static void BuildSendCmd(u16); -static void sub_8007B44(void); -static void ResetBlockSend(void); -static bool8 InitBlockSend(void *, u32); -static void LinkCB_BlockSendBegin(void); -static void LinkCB_BlockSend(void); -static void LinkCB_BlockSendEnd(void); -static void sub_8007E04(void); -u32 sub_8007E40(void); -static void SetBlockReceivedFlag(u8); -static u16 LinkTestCalcBlockChecksum(void *, u16); -static void PrintHexDigit(u8, u8, u8); -static void PrintHex(u32, u8, u8, u8); -static void LinkCB_RequestPlayerDataExchange(void); -static void Task_PrintTestData(u8); -bool8 sub_8008224(void); -u8 GetDummy2(void); -static void sub_8008350(void); -static void sub_800837C(void); -static void sub_80083E0(void); -static void sub_8008454(void); -static void sub_80084C8(void); -static void sub_80084F4(void); - -static void CheckErrorStatus(void); -static void CB2_PrintErrorMessage(void); -static u8 IsSioMultiMaster(void); -static void DisableSerial(void); -static void EnableSerial(void); -static void CheckMasterOrSlave(void); -static void InitTimer(void); -static void EnqueueSendCmd(u16 *); -static void DequeueRecvCmds(u16[CMD_LENGTH][MAX_LINK_PLAYERS]); -static void StartTransfer(void); -static bool8 DoHandshake(void); -static void DoRecv(void); -static void DoSend(void); -static void StopTimer(void); -static void SendRecvDone(void); -void ResetSendBuffer(void); -void ResetRecvBuffer(void); - -static struct BlockTransfer sBlockSend; -static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS]; -static u32 sBlockSendDelayCounter; -static u32 sDummy1; -static u8 sDummy2; -static u32 sPlayerDataExchangeStatus; -static u32 sErrorLinkStatus; -static u32 sErrorLastRecvQueueCount; -static u32 sErrorLastSendQueueCount; -static u32 sDummy3; -static u8 sLinkTestLastBlockSendPos; -static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS]; -static u8 sNumVBlanksWithoutSerialIntr; -static bool8 sSendBufferEmpty; -static u16 sSendNonzeroCheck; -static u16 sRecvNonzeroCheck; -static u8 sChecksumAvailable; -static u8 sHandshakePlayerCount; - -u16 word_3002910[MAX_LINK_PLAYERS]; -u32 gLinkDebugValue1; -struct LinkPlayerBlock localLinkPlayerBlock; -bool8 gLinkErrorOccurred; -u32 gLinkDebugValue2; -bool8 gLinkPlayerPending[MAX_LINK_PLAYERS]; -struct LinkPlayer gLinkPlayers[MAX_LINK_PLAYERS]; -bool8 gBlockReceived[MAX_LINK_PLAYERS]; -u16 gLinkHeldKeys; -u16 gLinkTimeOutCounter; -struct LinkPlayer localLinkPlayer; -u16 gRecvCmds[CMD_LENGTH][MAX_LINK_PLAYERS]; -u32 gLinkStatus; -bool8 gLinkDummyBool; -u8 byte_3002A68; -u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE]; -bool8 u8_array_3002B70[MAX_LINK_PLAYERS]; -u16 gLinkType; -bool8 u8_array_3002B78[MAX_LINK_PLAYERS]; -u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2]; -bool8 gSuppressLinkErrorMessage; -u8 gSavedLinkPlayerCount; -u16 gSendCmd[CMD_LENGTH]; -u8 gSavedMultiplayerId; -bool8 gReceivedRemoteLinkPlayers; -struct LinkTestBGInfo gLinkTestBGInfo; -void (*gLinkCallback)(void); -struct LinkPlayer gSavedLinkPlayers[MAX_LINK_PLAYERS]; -u8 gShouldAdvanceLinkState; -u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS]; -u8 gBlockRequestType; -u8 gLastSendQueueCount; -struct Link gLink; -u8 gLastRecvQueueCount; -u16 gLinkSavedIme; - -#ifdef GERMAN -u8 deUnkValue1; -u8 deUnkValue2; -#endif - -EWRAM_DATA bool8 gLinkTestDebugValuesEnabled = {0}; -EWRAM_DATA bool8 gLinkTestDummyBool = {0}; -EWRAM_DATA u32 gFiller_20238B8 = {0}; -EWRAM_DATA u32 dword_20238BC = {0}; -EWRAM_DATA bool8 gLinkOpen = {0}; - -static const u16 sLinkTestDigitPalette[] = INCBIN_U16("graphics/interface/link_test_digits.gbapal"); -static const u32 sLinkTestDigitTiles[] = INCBIN_U32("graphics/interface/link_test_digits.4bpp"); - -static const u8 sDebugMessages[7][12] = -{ - _("せつぞく ちゅうです"), - _("せつぞく できません"), - _("かくにん ちゅうです"), - _("かくにん できました"), - _("かくにん できません"), - _("かくにん を かくにん"), - _("かくにん は しっぱい"), -}; - -static const u8 sColorCodes[] = _("{HIGHLIGHT TRANSPARENT}{COLOR WHITE2}"); - -const struct BlockRequest sBlockRequestLookupTable[5] = -{ - {gBlockSendBuffer, 200}, - {gBlockSendBuffer, 200}, - {gBlockSendBuffer, 100}, - {gBlockSendBuffer, 220}, - {gBlockSendBuffer, 40}, -}; - -static const u8 sTestString[] = _("テストな"); - -ALIGNED(4) static const u8 sMagic[] = "GameFreak inc."; - -ALIGNED(4) static const u8 sEmptyString[] = _(""); - -void Task_DestroySelf(u8 taskId) -{ - DestroyTask(taskId); -} - -static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) -{ - LoadPalette(sLinkTestDigitPalette, 16 * paletteNum, 32); - DmaCopy16(3, sLinkTestDigitTiles, BG_CHAR_ADDR(charBaseBlock), 0x220); - - gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; - gLinkTestBGInfo.paletteNum = paletteNum; - - switch (bgNum) - { - case 1: - REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock); - break; - case 2: - REG_BG2CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock); - break; - case 3: - REG_BG3CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock); - break; - } -} - -void InitLinkTestBG_Unused(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) -{ - LoadPalette(sLinkTestDigitPalette, 16 * paletteNum, 32); - DmaCopy16(3, sLinkTestDigitTiles, BG_CHAR_ADDR(charBaseBlock), 0x220); - - gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; - gLinkTestBGInfo.paletteNum = paletteNum; - - *gBGControlRegs[bgNum] = (screenBaseBlock << 8) | (charBaseBlock << 2); -} - -void LinkTestScreen(void) -{ - s32 i; - ResetSpriteData(); - FreeAllSpritePalettes(); - ResetTasks(); - SetVBlankCallback(VBlankCB_LinkTest); - SetUpWindowConfig(&gWindowConfig_81E6CE4); - InitMenuWindow((struct WindowConfig *)&gWindowConfig_81E6CE4); - ResetBlockSend(); - gLinkType = 0x1111; - OpenLink(); - SeedRng(gMain.vblankCounter1); - - for (i = 0; i < 4; i++) - { - // Very weird code, but nothing else seems to match. - // The following would have the same effect: - // gSaveBlock2.playerTrainerId[i] = Random(); - u8 *trainerId = gSaveBlock2.playerTrainerId; - s32 r; - s32 mask = 0xFF; - trainerId[i] = (r = Random()) & mask; - } - - InitLinkTestBG(0, 2, 4, 0); - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_1D_MAP; - CreateTask(Task_DestroySelf, 0); - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); - sDummy3 = 0; - InitLocalLinkPlayer(); - CreateTask(Task_PrintTestData, 0); - SetMainCallback2(CB2_LinkTest); -} - -void sub_8007270(u8 a1) -{ - localLinkPlayer.lp_field_18 = a1; -} - -static void InitLocalLinkPlayer(void) -{ - s32 i; - - localLinkPlayer.trainerId = gSaveBlock2.playerTrainerId[0] - | (gSaveBlock2.playerTrainerId[1] << 8) - | (gSaveBlock2.playerTrainerId[2] << 16) - | (gSaveBlock2.playerTrainerId[3] << 24); - - for (i = 0; i < (s32)sizeof(localLinkPlayer.name); i++) - localLinkPlayer.name[i] = gSaveBlock2.playerName[i]; // UB: reads past the end of "playerName" array - - localLinkPlayer.gender = gSaveBlock2.playerGender; - localLinkPlayer.linkType = gLinkType; - localLinkPlayer.language = gGameLanguage; - localLinkPlayer.version = gGameVersion + 0x4000; - localLinkPlayer.lp_field_2 = 0; -} - -static void VBlankCB_LinkTest(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -static void InitLink(void) -{ - s32 i; - - for (i = 0; i < CMD_LENGTH; i++) - gSendCmd[i] = 0xEFFF; - - gLinkOpen = TRUE; - EnableSerial(); -} - -static void Task_TriggerHandshake(u8 taskId) -{ - gTasks[taskId].data[0]++; - - if (gTasks[taskId].data[0] == 5) - { - gShouldAdvanceLinkState = 1; - DestroyTask(taskId); - } -} - -void OpenLink(void) -{ - s32 i; - - ResetSerial(); - InitLink(); - - gLinkCallback = LinkCB_RequestPlayerDataExchange; - gLinkVSyncDisabled = FALSE; - gLinkErrorOccurred = FALSE; - gSuppressLinkErrorMessage = FALSE; - - ResetBlockReceivedFlags(); - - sDummy1 = 0; - byte_3002A68 = 0; - gLinkDummyBool = FALSE; - gReceivedRemoteLinkPlayers = FALSE; - - for (i = 0; i < 4; i++) - { - gLinkPlayerPending[i] = TRUE; - u8_array_3002B78[i] = 0; - u8_array_3002B70[i] = 0; - } - - CreateTask(Task_TriggerHandshake, 2); -} - -void CloseLink(void) -{ - gReceivedRemoteLinkPlayers = FALSE; - gLinkOpen = FALSE; - DisableSerial(); -} - -static void TestBlockTransfer(u32 a1, u32 a2, u32 a3) -{ - u8 i; - u8 val; - - if (sLinkTestLastBlockSendPos != sBlockSend.pos) - { - PrintHex(sBlockSend.pos, 2, 3, 2); - sLinkTestLastBlockSendPos = sBlockSend.pos; - } - - for (i = 0; i < MAX_LINK_PLAYERS; i++) - { - if (sLinkTestLastBlockRecvPos[i] != sBlockRecv[i].pos) - { - PrintHex(sBlockRecv[i].pos, 2, i + 4, 2); - sLinkTestLastBlockRecvPos[i] = sBlockRecv[i].pos; - } - } - - val = GetBlockReceivedStatus(); - - if (val == 0xF) - { - for (i = 0; i < MAX_LINK_PLAYERS; i++) - { - if ((val >> i) & 1) - { - gLinkTestBlockChecksums[i] = LinkTestCalcBlockChecksum(&gBlockRecvBuffer[i], sBlockRecv[i].size); - ResetBlockReceivedFlag(i); - if (gLinkTestBlockChecksums[i] != 834) - { - gLinkTestDebugValuesEnabled = FALSE; - gLinkTestDummyBool = FALSE; - } - } - } - } -} - -static void LinkTestProcessKeyInput(void) -{ - if (gMain.newKeys & A_BUTTON) - gShouldAdvanceLinkState = 1; - if (gMain.heldKeys & B_BUTTON) - InitBlockSend(unk_2004000, 0x2004); - if (gMain.newKeys & L_BUTTON) - BeginNormalPaletteFade(-1, 0, 0x10, 0, 2); - if (gMain.newKeys & START_BUTTON) - SetSuppressLinkErrorMessage(TRUE); - if (gMain.newKeys & R_BUTTON) - TrySavingData(LINK_SAVE); - if (gMain.newKeys & SELECT_BUTTON) - sub_800832C(); - if (gLinkTestDebugValuesEnabled) - { - u32 vblankCounter1 = gMain.vblankCounter1; - u8 val = gLinkVSyncDisabled; - if (!gLinkCallback) - val = gLinkVSyncDisabled | 0x10; - SetLinkDebugValues(vblankCounter1, val); - } -} - -static void CB2_LinkTest(void) -{ - LinkTestProcessKeyInput(); - TestBlockTransfer(1, 1, 0); - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -u16 LinkMain2(u16 *heldKeys) -{ - u8 i; - - if (!gLinkOpen) - return 0; - - for (i = 0; i < CMD_LENGTH; i++) - gSendCmd[i] = 0; - - gLinkHeldKeys = *heldKeys; - - if (gLinkStatus & LINK_STAT_CONN_ESTABLISHED) - { - ProcessRecvCmds(SIO_MULTI_CNT->id); - if (gLinkCallback) - gLinkCallback(); - CheckErrorStatus(); - } - - return gLinkStatus; -} - -static void HandleReceiveRemoteLinkPlayer(u8 multiplayerId) -{ - u32 pendingLinkPlayerCount = 0; - s32 i; - - gLinkPlayerPending[multiplayerId] = FALSE; - - for (i = 0; i < GetLinkPlayerCount_2(); i++) - pendingLinkPlayerCount += gLinkPlayerPending[i]; - - if (pendingLinkPlayerCount == 0 && !gReceivedRemoteLinkPlayers) - gReceivedRemoteLinkPlayers = TRUE; -} - -static void ProcessRecvCmds(u8 unusedParam) -{ - u16 i; - for (i = 0; i < MAX_LINK_PLAYERS; i++) - { - word_3002910[i] = 0; - if (!gRecvCmds[0][i]) - continue; - switch (gRecvCmds[0][i]) - { - case 0x2222: - InitLocalLinkPlayer(); - localLinkPlayerBlock.linkPlayer = localLinkPlayer; - memcpy(localLinkPlayerBlock.magic1, sMagic, sizeof(localLinkPlayerBlock.magic1) - 1); - memcpy(localLinkPlayerBlock.magic2, sMagic, sizeof(localLinkPlayerBlock.magic2) - 1); - InitBlockSend(&localLinkPlayerBlock, sizeof(localLinkPlayerBlock)); - break; - case 0x4444: - word_3002910[i] = gRecvCmds[1][i]; - break; - case 0x5555: - byte_3002A68 = 1; - break; - case 0x5566: - byte_3002A68 = 1; - break; - case 0xBBBB: - { - struct BlockTransfer *blockRecv = &sBlockRecv[i]; - blockRecv->pos = 0; - blockRecv->size = gRecvCmds[1][i]; - blockRecv->multiplayerId = gRecvCmds[2][i]; - break; - } - case 0x8888: - if (sBlockRecv[i].size > BLOCK_BUFFER_SIZE) - { - u16 *buffer = (u16 *)unk_2000000; - u16 j; - for (j = 0; j < CMD_LENGTH - 1; j++) - buffer[(sBlockRecv[i].pos / 2) + j] = gRecvCmds[j + 1][i]; - } - else - { - u16 j; - for (j = 0; j < CMD_LENGTH - 1; j++) - gBlockRecvBuffer[i][(sBlockRecv[i].pos / 2) + j] = gRecvCmds[j + 1][i]; - } - - sBlockRecv[i].pos += (CMD_LENGTH - 1) * 2; - - if (sBlockRecv[i].pos >= sBlockRecv[i].size) - { - if (gLinkPlayerPending[i] == TRUE) - { - struct LinkPlayerBlock *block = (struct LinkPlayerBlock *)&gBlockRecvBuffer[i]; - struct LinkPlayer *linkPlayer = &gLinkPlayers[i]; - *linkPlayer = block->linkPlayer; - - if (strcmp(block->magic1, sMagic) - || strcmp(block->magic2, sMagic)) - { - SetMainCallback2(CB2_LinkError); - } - else - { - HandleReceiveRemoteLinkPlayer(i); - } - - ConvertInternationalString(gLinkPlayers[i].name, gLinkPlayers[i].language); - } - else - { - SetBlockReceivedFlag(i); - } - } - break; - case 0x5FFF: - u8_array_3002B78[i] = 1; - break; - case 0x2FFE: - u8_array_3002B70[i] = 1; - break; - case 0xAAAA: - sub_8007E24(); - break; - case 0xAAAB: - sub_80516C4(i, gRecvCmds[1][i]); - break; - case 0xCCCC: -#if defined(ENGLISH) - SendBlock(0, sBlockRequestLookupTable[gRecvCmds[1][i]].address, sBlockRequestLookupTable[gRecvCmds[1][i]].size); -#elif defined(GERMAN) - if (deUnkValue2 == 1) - { - deUnkValue2 = 2; - deUnkValue1 = gRecvCmds[1][i]; - } - else if (deUnkValue2 == 2 || deUnkValue2 == 3) - { - SendBlock(0, sBlockRequestLookupTable[gRecvCmds[1][i]].address, sBlockRequestLookupTable[gRecvCmds[1][i]].size); - - if (deUnkValue2 == 2) - deUnkValue2 = 1; - else - deUnkValue2 = 0; - } - else - { - SendBlock(0, sBlockRequestLookupTable[gRecvCmds[1][i]].address, sBlockRequestLookupTable[gRecvCmds[1][i]].size); - } -#endif - break; - case 0xCAFE: - word_3002910[i] = gRecvCmds[1][i]; - break; - } - } -} - -static void BuildSendCmd(u16 code) -{ - switch (code) - { - case 0x2222: - gSendCmd[0] = 0x2222; - gSendCmd[1] = gLinkType; - break; - case 0x2FFE: - gSendCmd[0] = 0x2FFE; - break; - case 0x4444: - gSendCmd[0] = 0x4444; - gSendCmd[1] = gMain.heldKeys; - break; - case 0x5555: - gSendCmd[0] = 0x5555; - break; - case 0x5566: - gSendCmd[0] = 0x5566; - break; - case 0x6666: - gSendCmd[0] = 0x6666; - gSendCmd[1] = 0; - break; - case 0x7777: - { - u8 i; - - gSendCmd[0] = 0x7777; - - for (i = 0; i < 5; i++) - gSendCmd[i + 1] = 0xEE; - - break; - } - case 0xBBBB: - gSendCmd[0] = 0xBBBB; - gSendCmd[1] = sBlockSend.size; - gSendCmd[2] = sBlockSend.multiplayerId + 128; - break; - case 0xAAAA: - gSendCmd[0] = 0xAAAA; - break; - case 0xAAAB: - gSendCmd[0] = 0xAAAB; - gSendCmd[1] = gScriptItemId; - break; - case 0xCCCC: - gSendCmd[0] = 0xCCCC; - gSendCmd[1] = gBlockRequestType; - break; - case 0x5FFF: - gSendCmd[0] = 0x5FFF; - break; - case 0xCAFE: - if (!word_3004858 || gLinkTransferringData) - break; - gSendCmd[0] = 0xCAFE; - gSendCmd[1] = word_3004858; - break; - } -} - -void sub_8007B14(void) -{ - gLinkCallback = sub_8007B44; -} - -bool32 sub_8007B24(void) -{ - if (gLinkCallback == sub_8007B44) - return TRUE; - else - return FALSE; -} - -static void sub_8007B44(void) -{ - if (gReceivedRemoteLinkPlayers == TRUE) - BuildSendCmd(0xCAFE); -} - -void ClearLinkCallback(void) -{ - gLinkCallback = NULL; -} - -void ClearLinkCallback_2(void) -{ - gLinkCallback = NULL; -} - -u8 GetLinkPlayerCount(void) -{ - return EXTRACT_PLAYER_COUNT(gLinkStatus); -} - -void OpenLinkTimed(void) -{ - sPlayerDataExchangeStatus = EXCHANGE_NOT_STARTED; - gLinkTimeOutCounter = 0; -#if defined(GERMAN) - ResetBlockSend(); -#endif - OpenLink(); -} - -u8 GetLinkPlayerDataExchangeStatusTimed(void) -{ - s32 i; - s32 count = 0; - u32 index; - - if (gReceivedRemoteLinkPlayers == TRUE) - { - if (GetLinkPlayerCount() == 0) - { - gLinkErrorOccurred = TRUE; - CloseLink(); - } - - i = 0; - index = 0; - - while (i < GetLinkPlayerCount()) - { - if (gLinkPlayers[index].linkType == gLinkPlayers[0].linkType) - ++count; - ++index; - ++i; - } - - if (count == GetLinkPlayerCount()) - sPlayerDataExchangeStatus = EXCHANGE_COMPLETE; - else - sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS; - } - else - { - gLinkTimeOutCounter++; - if (gLinkTimeOutCounter > 600) - sPlayerDataExchangeStatus = EXCHANGE_TIMED_OUT; - } - - return sPlayerDataExchangeStatus; -} - -bool8 IsLinkPlayerDataExchangeComplete(void) -{ - u8 i; - u8 count = 0; - u8 isComplete; - - for (i = 0; i < GetLinkPlayerCount(); i++) - if (gLinkPlayers[i].linkType == gLinkPlayers[0].linkType) - count++; - - if (count == GetLinkPlayerCount()) - { - isComplete = TRUE; - sPlayerDataExchangeStatus = EXCHANGE_COMPLETE; - } - else - { - isComplete = FALSE; - sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS; - } - - return isComplete; -} - -u32 GetLinkPlayerTrainerId(u8 multiplayerId) -{ - return gLinkPlayers[multiplayerId].trainerId; -} - -void ResetLinkPlayers(void) -{ - s32 i; - for (i = 0; i < 4; i++) - memset(&gLinkPlayers[i], 0, sizeof(struct LinkPlayer)); -} - -static void ResetBlockSend(void) -{ - sBlockSend.active = FALSE; - sBlockSend.pos = 0; - sBlockSend.size = 0; - sBlockSend.src = NULL; -} - -static bool8 InitBlockSend(void *data, u32 size) -{ - if (sBlockSend.active) - { - return FALSE; - } - else - { - sBlockSend.multiplayerId = GetMultiplayerId(); - sBlockSend.active = TRUE; - sBlockSend.size = size; - sBlockSend.pos = 0; - - if (size > BLOCK_BUFFER_SIZE) - { - sBlockSend.src = data; - } - else - { - if (data != gBlockSendBuffer) - memcpy(gBlockSendBuffer, data, size); - sBlockSend.src = gBlockSendBuffer; - } - - BuildSendCmd(0xBBBB); - gLinkCallback = LinkCB_BlockSendBegin; - sBlockSendDelayCounter = 0; - return TRUE; - } -} - -static void LinkCB_BlockSendBegin(void) -{ - sBlockSendDelayCounter++; - if (sBlockSendDelayCounter > 2) - gLinkCallback = LinkCB_BlockSend; -} - -static void LinkCB_BlockSend(void) -{ - s32 i; - u8 *buffer = sBlockSend.src; - - gSendCmd[0] = 0x8888; - - for (i = 0; i < CMD_LENGTH - 1; i++) - { - s32 offset = sBlockSend.pos + 2 * i; - gSendCmd[i + 1] = (buffer[offset + 1] << 8) | buffer[offset]; - } - - sBlockSend.pos += (CMD_LENGTH - 1) * 2; - - if (sBlockSend.size <= sBlockSend.pos) - { - sBlockSend.active = FALSE; - gLinkCallback = LinkCB_BlockSendEnd; - } -} - -static void LinkCB_BlockSendEnd(void) -{ - gLinkCallback = NULL; -} - -static void sub_8007E04(void) -{ - GetMultiplayerId(); // whats the point of calling this if you dont use the multiplayer ID? - BuildSendCmd(0x4444); - dword_20238BC++; -} - -void sub_8007E24(void) -{ - dword_20238BC = 0; - gLinkCallback = sub_8007E04; -} - -u32 sub_8007E40(void) -{ - return dword_20238BC; -} - -void sub_8007E4C(void) -{ - BuildSendCmd(0xAAAA); -} - -u8 GetMultiplayerId(void) -{ - return SIO_MULTI_CNT->id; -} - -u8 bitmask_all_link_players_but_self(void) -{ - return ((1 << GetMultiplayerId()) ^ 0xF); -} - -bool8 SendBlock(u8 a1, void *a2, u16 a3) -{ - return InitBlockSend(a2, a3); -} - -bool8 sub_8007E9C(u8 a1) -{ - if (!gLinkCallback) - { - gBlockRequestType = a1; - BuildSendCmd(0xCCCC); - return TRUE; - } - else - { - return FALSE; - } -} - -bool8 sub_8007ECC(void) -{ - u8 retVal = FALSE; - - if (!gLinkCallback) - retVal = TRUE; - - return retVal; -} - -u8 GetBlockReceivedStatus(void) -{ - return (gBlockReceived[3] << 3) - | (gBlockReceived[2] << 2) - | (gBlockReceived[1] << 1) - | gBlockReceived[0]; -} - -static void SetBlockReceivedFlag(u8 multiplayerId) -{ - gBlockReceived[multiplayerId] = TRUE; -} - -void ResetBlockReceivedFlags(void) -{ - s32 i; - for (i = 0; i < 4; i++) - gBlockReceived[i] = FALSE; -} - -void ResetBlockReceivedFlag(u8 multiplayerId) -{ - if (gBlockReceived[multiplayerId]) - gBlockReceived[multiplayerId] = FALSE; -} - -void sub_8007F4C(void) -{ - if ((gLinkStatus & LINK_STAT_MASTER) && EXTRACT_PLAYER_COUNT(gLinkStatus) > 1) - gShouldAdvanceLinkState = 1; -} - -static u16 LinkTestCalcBlockChecksum(void *data, u16 size) -{ - u16 sum = 0; - u16 i; - - for (i = 0; i < size / 2; i++) - sum += ((u16 *)data)[i]; - - return sum; -} - -static void PrintHexDigit(u8 tileNum, u8 x, u8 y) -{ - u16 *tilemap = (u16 *)BG_SCREEN_ADDR(gLinkTestBGInfo.screenBaseBlock); - tilemap[(32 * y) + x] = (gLinkTestBGInfo.paletteNum << 12) | (tileNum + 1); -} - -static void PrintHex(u32 num, u8 x, u8 y, u8 maxDigits) -{ - u8 buffer[16]; - s32 i; - - for (i = 0; i < maxDigits; i++) - { - buffer[i] = num & 0xF; - num >>= 4; - } - - for (i = maxDigits - 1; i >= 0; i--) - { - PrintHexDigit(buffer[i], x, y); - x++; - } -} - -static void LinkCB_RequestPlayerDataExchange(void) -{ - // Only one request needs to be sent, so only the master sends it. - if (gLinkStatus & LINK_STAT_MASTER) - BuildSendCmd(0x2222); - gLinkCallback = NULL; -} - -void Task_PrintTestData(u8 taskId) -{ - s32 i; - - PrintHex(gShouldAdvanceLinkState, 2, 1, 2); - PrintHex(gLinkStatus, 15, 1, 8); - PrintHex(gLink.state, 2, 10, 2); - PrintHex(EXTRACT_PLAYER_COUNT(gLinkStatus), 15, 10, 2); - PrintHex(GetMultiplayerId(), 15, 12, 2); - PrintHex(gLastSendQueueCount, 25, 1, 2); - PrintHex(gLastRecvQueueCount, 25, 2, 2); - PrintHex(GetBlockReceivedStatus(), 15, 5, 2); - PrintHex(gLinkDebugValue1, 2, 12, 8); - PrintHex(gLinkDebugValue2, 2, 13, 8); - PrintHex(GetSioMultiSI(), 25, 5, 1); - PrintHex(IsSioMultiMaster(), 25, 6, 1); - PrintHex(IsLinkConnectionEstablished(), 25, 7, 1); - PrintHex(HasLinkErrorOccurred(), 25, 8, 1); - - for (i = 0; i < MAX_LINK_PLAYERS; i++) - PrintHex(gLinkTestBlockChecksums[i], 10, 4 + i, 4); -} - -void SetLinkDebugValues(u32 value1, u32 value2) -{ - gLinkDebugValue1 = value1; - gLinkDebugValue2 = value2; -} - -u8 sub_8008198(void) -{ - u8 result = 0; - s32 i; - - for (i = 0; i < gSavedLinkPlayerCount; i++) - result |= (1 << i); - - return result; -} - -void sub_80081C8(u8 playerCount) -{ - s32 i; - - gSavedLinkPlayerCount = playerCount; - gSavedMultiplayerId = GetMultiplayerId(); - - for (i = 0; i < 4; i++) - gSavedLinkPlayers[i] = gLinkPlayers[i]; -} - -u8 sub_800820C(void) -{ - return gSavedLinkPlayerCount; -} - -u8 sub_8008218(void) -{ - return gSavedMultiplayerId; -} - -bool8 sub_8008224(void) -{ - s32 count = 0; - s32 i; - - for (i = 0; i < gSavedLinkPlayerCount; i++) - if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId) - count++; - - if (count == gSavedLinkPlayerCount) - return TRUE; - else - return FALSE; -} - -void sub_800826C(void) -{ - u8 i; - - for (i = 0; i < gSavedLinkPlayerCount; i++) - { - if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId - || StringCompareWithoutExtCtrlCodes(gSavedLinkPlayers[i].name, gLinkPlayers[i].name)) - { - gLinkErrorOccurred = TRUE; - CloseLink(); - SetMainCallback2(CB2_LinkError); - } - } -} - -void sub_80082EC(void) -{ - gSavedLinkPlayerCount = 0; - gSavedMultiplayerId = 0; -} - -u8 GetLinkPlayerCount_2(void) -{ - return EXTRACT_PLAYER_COUNT(gLinkStatus); -} - -bool8 IsLinkMaster(void) -{ - return EXTRACT_MASTER(gLinkStatus); -} - -u8 GetDummy2(void) -{ - return sDummy2; -} - -void sub_800832C(void) -{ - if (!gLinkCallback) - { - gLinkCallback = sub_8008350; - gLinkDummyBool = FALSE; - } -} - -static void sub_8008350(void) -{ - if (gLastRecvQueueCount == 0) - { - BuildSendCmd(0x5FFF); - gLinkCallback = sub_800837C; - } -} - -static void sub_800837C(void) -{ - s32 i; - s32 totalCount = GetLinkPlayerCount(); - s32 count = 0; - - for (i = 0; i < totalCount; i++) - if (u8_array_3002B78[i]) - count++; - - if (count == totalCount) - { - gBattleTypeFlags &= ~BATTLE_TYPE_20; - gLinkVSyncDisabled = TRUE; - CloseLink(); - gLinkCallback = NULL; - gLinkDummyBool = TRUE; - } -} - -static void sub_80083E0(void) -{ - s32 i; - s32 totalCount = GetLinkPlayerCount(); - s32 count = 0; - - for (i = 0; i < totalCount; i++) - { - if (gLinkPlayers[i].language == 1) - count++; - else if (u8_array_3002B78[i]) - count++; - } - - if (count == totalCount) - { - gBattleTypeFlags &= ~BATTLE_TYPE_20; - gLinkVSyncDisabled = TRUE; - CloseLink(); - gLinkCallback = 0; - gLinkDummyBool = TRUE; - } -} - -static void sub_8008454(void) -{ - if (gLastRecvQueueCount == 0) - { - BuildSendCmd(0x5FFF); - gLinkCallback = sub_80083E0; - } -} - -void sub_8008480(void) -{ - if (!gLinkCallback) - { - gLinkCallback = sub_8008454; - gLinkDummyBool = FALSE; - } -} - -void sub_80084A4(void) -{ - if (!gLinkCallback) - gLinkCallback = sub_80084C8; - gLinkDummyBool = FALSE; -} - -static void sub_80084C8(void) -{ - if (gLastRecvQueueCount == 0) - { - BuildSendCmd(0x2FFE); - gLinkCallback = sub_80084F4; - } -} - -static void sub_80084F4(void) -{ - u8 totalCount = GetLinkPlayerCount(); - u8 count = 0; - - while (count < totalCount && u8_array_3002B70[count]) - count++; - - if (count == totalCount) - { - u8 i; - for (i = 0; i < 4; i++) - u8_array_3002B70[i] = 0; - gLinkCallback = NULL; - } -} - -static void CheckErrorStatus(void) -{ - if (gLinkOpen) - { - if (gLinkStatus & LINK_STAT_ERRORS) - { - if (!gSuppressLinkErrorMessage) - { - sErrorLinkStatus = gLinkStatus; - sErrorLastRecvQueueCount = gLastRecvQueueCount; - sErrorLastSendQueueCount = gLastSendQueueCount; - SetMainCallback2(CB2_LinkError); - } - gLinkErrorOccurred = TRUE; - CloseLink(); - } - } -} - -void CB2_LinkError(void) -{ - ResetSpriteData(); - FreeAllSpritePalettes(); - ResetPaletteFadeControl(); - FillPalette(0, 0, 2); - ResetTasks(); - SetVBlankCallback(VBlankCB_LinkTest); - SetUpWindowConfig(&gWindowConfig_81E7198); - InitMenuWindow((struct WindowConfig *)&gWindowConfig_81E7198); - MenuZeroFillScreen(); - REG_BLDALPHA = 0; - REG_BG0VOFS = 0; - REG_BG0HOFS = 0; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON; - gSoftResetDisabled = FALSE; - CreateTask(Task_DestroySelf, 0); - StopMapMusic(); - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); - SetMainCallback2(CB2_PrintErrorMessage); -} - -static void CB2_PrintErrorMessage(void) -{ - u8 array[64] __attribute__((unused)); // unused - - switch (gMain.state) - { - case 0: - MenuPrint_PixelCoords(gMultiText_LinkError, 20, 56, 1); - break; - case 30: - case 60: - PlaySE(SE_BOO); - break; - case 90: - PlaySE(SE_BOO); - break; - } - - if (gMain.state != 200) - gMain.state++; -} - -u8 GetSioMultiSI(void) -{ - return (REG_SIOCNT >> SIO_MULTI_SI_SHIFT) & SIO_MULTI_SI_MASK; -} - -static bool8 IsSioMultiMaster(void) -{ - bool8 isMaster = FALSE; - - if ((REG_SIOCNT & SIO_MULTI_SD) && !(REG_SIOCNT & SIO_MULTI_SI)) - isMaster = TRUE; - - return isMaster; -} - -bool8 IsLinkConnectionEstablished(void) -{ - return EXTRACT_CONN_ESTABLISHED(gLinkStatus); -} - -void SetSuppressLinkErrorMessage(bool8 value) -{ - gSuppressLinkErrorMessage = value; -} - -bool8 HasLinkErrorOccurred(void) -{ - return gLinkErrorOccurred; -} - -static void DisableSerial(void) -{ - gLinkSavedIme = REG_IME; - REG_IME = 0; - REG_IE &= ~(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); - REG_IME = gLinkSavedIme; - - REG_SIOCNT = 0; - REG_TM3CNT_H = 0; - REG_IF = INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL; - - CpuFill32(0, &gLink, sizeof(gLink)); -} - -static void EnableSerial(void) -{ - gLinkSavedIme = REG_IME; - REG_IME = 0; - REG_IE &= ~(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); - REG_IME = gLinkSavedIme; - - REG_RCNT = 0; - - REG_SIOCNT = SIO_MULTI_MODE; - REG_SIOCNT |= SIO_INTR_ENABLE | SIO_115200_BPS; - - gLinkSavedIme = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_SERIAL; - REG_IME = gLinkSavedIme; - - REG_SIOMLT_SEND = 0; - - CpuFill32(0, &gLink, sizeof(gLink)); - - sNumVBlanksWithoutSerialIntr = 0; - sSendNonzeroCheck = 0; - sRecvNonzeroCheck = 0; - sChecksumAvailable = FALSE; - sHandshakePlayerCount = 0; - gLastSendQueueCount = 0; - gLastRecvQueueCount = 0; -} - -void ResetSerial(void) -{ - EnableSerial(); - DisableSerial(); -} - -u32 LinkMain1(u8 *shouldAdvanceLinkState, u16 *sendCmd, u16 recvCmds[CMD_LENGTH][MAX_LINK_PLAYERS]) -{ - u32 retVal; - u32 retVal2; - - switch (gLink.state) - { - case LINK_STATE_START0: - DisableSerial(); - gLink.state = LINK_STATE_START1; - break; - case LINK_STATE_START1: - if (*shouldAdvanceLinkState == 1) - { - EnableSerial(); - gLink.state = LINK_STATE_HANDSHAKE; - } - break; - case LINK_STATE_HANDSHAKE: - switch (*shouldAdvanceLinkState) - { - case 1: - if (gLink.isMaster == 8 && gLink.playerCount > 1) - gLink.handshakeAsMaster = TRUE; - break; - case 2: - gLink.state = LINK_STATE_START0; - REG_SIOMLT_SEND = 0; - break; - default: - CheckMasterOrSlave(); - break; - } - break; - case LINK_STATE_INIT_TIMER: - InitTimer(); - gLink.state = LINK_STATE_CONN_ESTABLISHED; - case LINK_STATE_CONN_ESTABLISHED: - EnqueueSendCmd(sendCmd); - DequeueRecvCmds(recvCmds); - break; - } - - *shouldAdvanceLinkState = 0; - - retVal = gLink.localId; - retVal |= (gLink.playerCount << 2); - - if (gLink.isMaster == 8) - retVal |= 0x20; - - { - u32 receivedNothing = gLink.receivedNothing << 8; - u32 link_field_F = gLink.link_field_F << 9; - u32 hardwareError = gLink.hardwareError << 12; - u32 badChecksum = gLink.badChecksum << 13; - u32 queueFull = gLink.queueFull << 14; - u32 val; - - if (gLink.state == LINK_STATE_CONN_ESTABLISHED) - { - val = 0x40; - val |= receivedNothing; - val |= retVal; - val |= link_field_F; - val |= hardwareError; - val |= badChecksum; - val |= queueFull; - } - else - { - val = retVal; - val |= receivedNothing; - val |= link_field_F; - val |= hardwareError; - val |= badChecksum; - val |= queueFull; - } - - retVal = val; - } - - if (gLink.lag == LAG_MASTER) - retVal |= 0x10000; - - if (gLink.localId > 3) - retVal |= 0x20000; - - retVal2 = retVal; - if (gLink.lag == LAG_SLAVE) - retVal2 |= 0x40000; - - return retVal2; -} - -static void CheckMasterOrSlave(void) -{ - u32 terminals = *(u32 *)REG_ADDR_SIOCNT & (SIO_MULTI_SD | SIO_MULTI_SI); - - if (terminals == SIO_MULTI_SD && !gLink.localId) - gLink.isMaster = 8; - else - gLink.isMaster = 0; -} - -static void InitTimer(void) -{ - if (gLink.isMaster) - { - REG_TM3CNT_L = 65339; - REG_TM3CNT_H = TIMER_INTR_ENABLE | TIMER_64CLK; - - gLinkSavedIme = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_TIMER3; - REG_IME = gLinkSavedIme; - } -} - -static void EnqueueSendCmd(u16 *sendCmd) -{ - gLinkSavedIme = REG_IME; - REG_IME = 0; - - if (gLink.sendQueue.count < QUEUE_CAPACITY) - { - u8 i; - u8 offset = gLink.sendQueue.pos + gLink.sendQueue.count; - - if (offset >= QUEUE_CAPACITY) - offset -= QUEUE_CAPACITY; - - for (i = 0; i < CMD_LENGTH; i++) - { - sSendNonzeroCheck |= *sendCmd; - gLink.sendQueue.data[i][offset] = *sendCmd; - *sendCmd = 0; - sendCmd++; - } - } - else - { - gLink.queueFull = QUEUE_FULL_SEND; - } - - if (sSendNonzeroCheck) - { - gLink.sendQueue.count++; - sSendNonzeroCheck = 0; - } - - REG_IME = gLinkSavedIme; - gLastSendQueueCount = gLink.sendQueue.count; -} - -void DequeueRecvCmds(u16 recvCmds[CMD_LENGTH][MAX_LINK_PLAYERS]) -{ - u8 i; - u8 j; - - gLinkSavedIme = REG_IME; - REG_IME = 0; - - if (gLink.recvQueue.count == 0) - { - for (i = 0; i < CMD_LENGTH; i++) - for (j = 0; j < gLink.playerCount; j++) - recvCmds[i][j] = 0; - - gLink.receivedNothing = TRUE; - } - else - { - for (i = 0; i < CMD_LENGTH; i++) - for (j = 0; j < gLink.playerCount; j++) - recvCmds[i][j] = gLink.recvQueue.data[j][i][gLink.recvQueue.pos]; - - gLink.recvQueue.count--; - gLink.recvQueue.pos++; - - if (gLink.recvQueue.pos >= QUEUE_CAPACITY) - gLink.recvQueue.pos = 0; - - gLink.receivedNothing = FALSE; - } - - REG_IME = gLinkSavedIme; -} - -void LinkVSync(void) -{ - if (gLink.isMaster) - { - switch (gLink.state) - { - case LINK_STATE_HANDSHAKE: - StartTransfer(); - break; - case LINK_STATE_CONN_ESTABLISHED: - if (gLink.serialIntrCounter > 8) - { - if (gLink.lag == LAG_MASTER) - return; - gLink.serialIntrCounter = 0; - } - else if (gLink.hardwareError != TRUE) - { - gLink.lag = LAG_MASTER; - return; - } - StartTransfer(); - break; - } - } - else if (gLink.state == LINK_STATE_CONN_ESTABLISHED - || gLink.state == LINK_STATE_HANDSHAKE) - { - sNumVBlanksWithoutSerialIntr++; - - if (sNumVBlanksWithoutSerialIntr > 10) - { - if (gLink.state == LINK_STATE_CONN_ESTABLISHED) - gLink.lag = LAG_SLAVE; - - if (gLink.state == LINK_STATE_HANDSHAKE) - { - gLink.playerCount = 0; - gLink.link_field_F = 0; - } - } - } -} - -void Timer3Intr(void) -{ - StopTimer(); - StartTransfer(); -} - -void SerialCB(void) -{ - gLink.localId = SIO_MULTI_CNT->id; - - switch (gLink.state) - { - case LINK_STATE_CONN_ESTABLISHED: - gLink.hardwareError = SIO_MULTI_CNT->error; - DoRecv(); - DoSend(); - SendRecvDone(); - break; - case LINK_STATE_HANDSHAKE: - if (DoHandshake()) - { - if (gLink.isMaster) - { - gLink.state = LINK_STATE_INIT_TIMER; - gLink.serialIntrCounter = 8; - } - else - { - gLink.state = LINK_STATE_CONN_ESTABLISHED; - } - } - break; - } - - gLink.serialIntrCounter++; - sNumVBlanksWithoutSerialIntr = 0; - - if (gLink.serialIntrCounter == 8) - gLastRecvQueueCount = gLink.recvQueue.count; -} - -static void StartTransfer(void) -{ - REG_SIOCNT |= SIO_START; -} - -static bool8 DoHandshake(void) -{ - u8 i; - u8 playerCount = 0; - u16 minRecv = 0xFFFF; - - if (gLink.handshakeAsMaster == TRUE) - REG_SIOMLT_SEND = MASTER_HANDSHAKE; - else - REG_SIOMLT_SEND = SLAVE_HANDSHAKE; - - *(u64 *)&gLink.tempRecvBuffer[0] = REG_SIOMLT_RECV; - REG_SIOMLT_RECV = 0; - - gLink.handshakeAsMaster = FALSE; - - for (i = 0; i < 4; i++) - { - if ((gLink.tempRecvBuffer[i] & ~0x3) == SLAVE_HANDSHAKE - || gLink.tempRecvBuffer[i] == MASTER_HANDSHAKE) - { - playerCount++; - - if (minRecv > gLink.tempRecvBuffer[i] && gLink.tempRecvBuffer[i] != 0) - minRecv = gLink.tempRecvBuffer[i]; - } - else - { - if (gLink.tempRecvBuffer[i] != 0xFFFF) - playerCount = 0; - break; - } - } - - gLink.playerCount = playerCount; - - // The handshake is successful when: - // 1. There are multiple players. - // 2. The number of players agrees with the last attempt. - // 3. Player no. 0 is identifying as the master. - if (gLink.playerCount > 1 - && gLink.playerCount == sHandshakePlayerCount - && gLink.tempRecvBuffer[0] == MASTER_HANDSHAKE) - return TRUE; - - if (gLink.playerCount > 1) - gLink.link_field_F = (minRecv & 3) + 1; - else - gLink.link_field_F = 0; - - sHandshakePlayerCount = gLink.playerCount; - - return FALSE; -} - -static void DoRecv(void) -{ - u16 recvBuffer[4]; - u8 i; - - *(u64 *)&recvBuffer[0] = REG_SIOMLT_RECV; - - if (gLink.sendCmdIndex == 0) - { - for (i = 0; i < gLink.playerCount; i++) - if (gLink.checksum != recvBuffer[i] && sChecksumAvailable) - gLink.badChecksum = TRUE; - - gLink.checksum = 0; - sChecksumAvailable = TRUE; - } - else - { - u8 index = gLink.recvQueue.pos + gLink.recvQueue.count; - - if (index >= QUEUE_CAPACITY) - index -= QUEUE_CAPACITY; - - if (gLink.recvQueue.count < QUEUE_CAPACITY) - { - for (i = 0; i < gLink.playerCount; i++) - { - gLink.checksum += recvBuffer[i]; - sRecvNonzeroCheck |= recvBuffer[i]; - gLink.recvQueue.data[i][gLink.recvCmdIndex][index] = recvBuffer[i]; - } - } - else - { - gLink.queueFull = QUEUE_FULL_RECV; - } - - gLink.recvCmdIndex++; - - if (gLink.recvCmdIndex == CMD_LENGTH && sRecvNonzeroCheck) - { - gLink.recvQueue.count++; - sRecvNonzeroCheck = 0; - } - } -} - -static void DoSend(void) -{ - if (gLink.sendCmdIndex == CMD_LENGTH) - { - REG_SIOMLT_SEND = gLink.checksum; - - if (!sSendBufferEmpty) - { - gLink.sendQueue.count--; - gLink.sendQueue.pos++; - - if (gLink.sendQueue.pos >= QUEUE_CAPACITY) - gLink.sendQueue.pos = 0; - } - else - { - sSendBufferEmpty = FALSE; - } - } - else - { - if (!sSendBufferEmpty && gLink.sendQueue.count == 0) - sSendBufferEmpty = TRUE; - - if (sSendBufferEmpty) - REG_SIOMLT_SEND = 0; - else - REG_SIOMLT_SEND = gLink.sendQueue.data[gLink.sendCmdIndex][gLink.sendQueue.pos]; - - gLink.sendCmdIndex++; - } -} - -static void StopTimer(void) -{ - if (gLink.isMaster) - { - REG_TM3CNT_H &= ~TIMER_ENABLE; - REG_TM3CNT_L = 65339; - } -} - -static void SendRecvDone(void) -{ - if (gLink.recvCmdIndex == CMD_LENGTH) - { - gLink.sendCmdIndex = 0; - gLink.recvCmdIndex = 0; - } - else if (gLink.isMaster) - { - REG_TM3CNT_H |= TIMER_ENABLE; - } -} - -void ResetSendBuffer(void) -{ - u8 i; - u8 j; - - gLink.sendQueue.count = 0; - gLink.sendQueue.pos = 0; - - for (i = 0; i < CMD_LENGTH; i++) - for (j = 0; j < QUEUE_CAPACITY; j++) - gLink.sendQueue.data[i][j] = 0xEFFF; -} - -void ResetRecvBuffer(void) -{ - u8 i; - u8 j; - u8 k; - - gLink.recvQueue.count = 0; - gLink.recvQueue.pos = 0; - - for (i = 0; i < 4; i++) - for (j = 0; j < CMD_LENGTH; j++) - for (k = 0; k < QUEUE_CAPACITY; k++) - gLink.recvQueue.data[i][j][k] = 0xEFFF; -} diff --git a/src/load_save.c b/src/load_save.c deleted file mode 100644 index 730aea2b8..000000000 --- a/src/load_save.c +++ /dev/null @@ -1,168 +0,0 @@ -#include "global.h" -#include "gba/flash_internal.h" -#include "load_save.h" -#include "main.h" -#include "pokemon.h" -#include "rom4.h" - -extern u8 gPlayerPartyCount; - -bool32 gFlashMemoryPresent; - -struct LoadedSaveData -{ - struct ItemSlot items[20]; - struct ItemSlot keyItems[20]; - struct ItemSlot pokeBalls[16]; - struct ItemSlot TMsHMs[64]; - struct ItemSlot berries[46]; - struct MailStruct mail[16]; -}; - -EWRAM_DATA struct SaveBlock2 gSaveBlock2 = {0}; -EWRAM_DATA struct SaveBlock1 gSaveBlock1 = {0}; - -static EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0}; - -void CheckForFlashMemory(void) -{ - if (!IdentifyFlash()) - { - gFlashMemoryPresent = TRUE; - InitFlashTimer(); - } - else - gFlashMemoryPresent = FALSE; -} - -bool32 GetSecretBase2Field_9(void) -{ - return gSaveBlock2.specialSaveWarp; -} - -void ClearSecretBase2Field_9(void) -{ - gSaveBlock2.specialSaveWarp = 0; -} - -void SetSecretBase2Field_9(void) -{ - gSaveBlock2.specialSaveWarp = 1; -} - -void SetSecretBase2Field_9_AndHideBG(void) // note: no other function sets specialSaveWarp to values other than 0 or 1, hence clear and set distinctions. -{ - gpu_sync_bg_hide(0); // the function doesn't use the parameter passed to it, but this is necessary to match. - gSaveBlock2.specialSaveWarp = 1; -} - -void ClearSecretBase2Field_9_2(void) // duplicate function -{ - gSaveBlock2.specialSaveWarp = 0; -} - -void SavePlayerParty(void) -{ - int i; - - gSaveBlock1.playerPartyCount = gPlayerPartyCount; - - for (i = 0; i < 6; i++) - gSaveBlock1.playerParty[i] = gPlayerParty[i]; -} - -void LoadPlayerParty(void) -{ - int i; - - gPlayerPartyCount = gSaveBlock1.playerPartyCount; - - for (i = 0; i < 6; i++) - gPlayerParty[i] = gSaveBlock1.playerParty[i]; -} - -static void SaveMapObjects(void) -{ - int i; - - for (i = 0; i < 16; i++) - gSaveBlock1.mapObjects[i] = gMapObjects[i]; -} - -static void LoadMapObjects(void) -{ - int i; - - for (i = 0; i < 16; i++) - gMapObjects[i] = gSaveBlock1.mapObjects[i]; -} - -void SaveSerializedGame(void) -{ - SavePlayerParty(); - SaveMapObjects(); -} - -void LoadSerializedGame(void) -{ - LoadPlayerParty(); - LoadMapObjects(); -} - -void LoadPlayerBag(void) -{ - int i; - - // load player items. - for (i = 0; i < 20; i++) - gLoadedSaveData.items[i] = gSaveBlock1.bagPocket_Items[i]; - - // load player key items. - for (i = 0; i < 20; i++) - gLoadedSaveData.keyItems[i] = gSaveBlock1.bagPocket_KeyItems[i]; - - // load player pokeballs. - for (i = 0; i < 16; i++) - gLoadedSaveData.pokeBalls[i] = gSaveBlock1.bagPocket_PokeBalls[i]; - - // load player TMs and HMs. - for (i = 0; i < 64; i++) - gLoadedSaveData.TMsHMs[i] = gSaveBlock1.bagPocket_TMHM[i]; - - // load player berries. - for (i = 0; i < 46; i++) - gLoadedSaveData.berries[i] = gSaveBlock1.bagPocket_Berries[i]; - - // load mail. - for (i = 0; i < 16; i++) - gLoadedSaveData.mail[i] = gSaveBlock1.mail[i]; -} - -void SavePlayerBag(void) -{ - int i; - - // save player items. - for (i = 0; i < 20; i++) - gSaveBlock1.bagPocket_Items[i] = gLoadedSaveData.items[i]; - - // save player key items. - for (i = 0; i < 20; i++) - gSaveBlock1.bagPocket_KeyItems[i] = gLoadedSaveData.keyItems[i]; - - // save player pokeballs. - for (i = 0; i < 16; i++) - gSaveBlock1.bagPocket_PokeBalls[i] = gLoadedSaveData.pokeBalls[i]; - - // save player TMs and HMs. - for (i = 0; i < 64; i++) - gSaveBlock1.bagPocket_TMHM[i] = gLoadedSaveData.TMsHMs[i]; - - // save player berries. - for (i = 0; i < 46; i++) - gSaveBlock1.bagPocket_Berries[i] = gLoadedSaveData.berries[i]; - - // save mail. - for (i = 0; i < 16; i++) - gSaveBlock1.mail[i] = gLoadedSaveData.mail[i]; -} diff --git a/src/lottery_corner.c b/src/lottery_corner.c deleted file mode 100644 index c2c25b9ac..000000000 --- a/src/lottery_corner.c +++ /dev/null @@ -1,174 +0,0 @@ -#include "global.h" -#include "lottery_corner.h" -#include "event_data.h" -#include "items.h" -#include "rng.h" -#include "species.h" -#include "string_util.h" -#include "text.h" - -extern u16 gScriptResult; -extern u16 gSpecialVar_0x8004; -extern struct PokemonStorage gPokemonStorage; -extern u16 gSpecialVar_0x8005; -extern u16 gSpecialVar_0x8006; -static EWRAM_DATA u16 sWinNumberDigit = 0; -static EWRAM_DATA u16 sOtIdDigit = 0; - -static const u16 sLotteryPrizes[] = -{ - ITEM_PP_UP, - ITEM_EXP_SHARE, - ITEM_MAX_REVIVE, - ITEM_MASTER_BALL, -}; - -static u8 GetMatchingDigits(u16, u16); - -void ResetLotteryCorner(void) -{ - u16 rand = Random(); - - SetLotteryNumber((Random() << 16) | rand); - VarSet(VAR_POKELOT_PRIZE, 0); -} - -void SetRandomLotteryNumber(u16 i) -{ - u32 var = Random(); - - while (--i != 0xFFFF) - var = var * 1103515245 + 12345; - - SetLotteryNumber(var); -} - -void RetrieveLotteryNumber(void) -{ - u16 lottoNumber = GetLotteryNumber(); - gScriptResult = lottoNumber; -} - -void PickLotteryCornerTicket(void) -{ - u16 i; - u16 j; - u32 box; - u32 slot; - - gSpecialVar_0x8004 = 0; - slot = 0; - box = 0; - for (i = 0; i < 6; i++) - { - struct Pokemon *pkmn = &gPlayerParty[i]; - - // UB: Too few arguments for function GetMonData - if (GetMonData(pkmn, MON_DATA_SPECIES) != SPECIES_NONE) - { - // do not calculate ticket values for eggs. - if (!GetMonData(pkmn, MON_DATA_IS_EGG)) - { - u32 otId = GetMonData(pkmn, MON_DATA_OT_ID); - u8 numMatchingDigits = GetMatchingDigits(gScriptResult, otId); - - if (numMatchingDigits > gSpecialVar_0x8004 && numMatchingDigits > 1) - { - gSpecialVar_0x8004 = numMatchingDigits - 1; - box = 14; - slot = i; - } - } - } - else // pokemon are always arranged from populated spots first to unpopulated, so the moment a NONE species is found, that's the end of the list. - break; - } - - // player has 14 boxes. - for (i = 0; i < 14; i++) - { - // player has 30 slots per box. - for (j = 0; j < 30; j++) - { - struct BoxPokemon *pkmn = &gPokemonStorage.boxes[i][j]; - - // UB: Too few arguments for function GetMonData - if (GetBoxMonData(pkmn, MON_DATA_SPECIES) != SPECIES_NONE && - !GetBoxMonData(pkmn, MON_DATA_IS_EGG)) - { - u32 otId = GetBoxMonData(pkmn, MON_DATA_OT_ID); - u8 numMatchingDigits = GetMatchingDigits(gScriptResult, otId); - - if (numMatchingDigits > gSpecialVar_0x8004 && numMatchingDigits > 1) - { - gSpecialVar_0x8004 = numMatchingDigits - 1; - box = i; - slot = j; - } - } - } - } - - if (gSpecialVar_0x8004 != 0) - { - gSpecialVar_0x8005 = sLotteryPrizes[gSpecialVar_0x8004 - 1]; - - if (box == 14) - { - gSpecialVar_0x8006 = 0; - GetMonData(&gPlayerParty[slot], MON_DATA_NICKNAME, gStringVar1); - } - else - { - gSpecialVar_0x8006 = 1; - GetBoxMonData(&gPokemonStorage.boxes[box][slot], MON_DATA_NICKNAME, gStringVar1); - } - StringGetEnd10(gStringVar1); - } -} - -static u8 GetMatchingDigits(u16 winNumber, u16 otId) -{ - u8 i; - u8 matchingDigits = 0; - - for (i = 0; i < 5; i++) - { - sWinNumberDigit = winNumber % 10; - sOtIdDigit = otId % 10; - - if (sWinNumberDigit == sOtIdDigit) - { - winNumber = winNumber / 10; - otId = otId / 10; - matchingDigits++; - } - else - break; - } - return matchingDigits; -} - -// lottery numbers go from 0 to 99999, not 65535 (0xFFFF). interestingly enough, the function that calls GetLotteryNumber shifts to u16, so it cant be anything above 65535 anyway. -void SetLotteryNumber(u32 lotteryNum) -{ - u16 lowNum = lotteryNum >> 16; - u16 highNum = lotteryNum; - - VarSet(VAR_POKELOT_RND1, highNum); - VarSet(VAR_POKELOT_RND2, lowNum); -} - -u32 GetLotteryNumber(void) -{ - u16 highNum = VarGet(VAR_POKELOT_RND1); - u16 lowNum = VarGet(VAR_POKELOT_RND2); - - return (lowNum << 16) | highNum; -} - -// interestingly, this may have been the original lottery number set function, but GF tried to change it to 32-bit later but didnt finish changing all calls as one GetLotteryNumber still shifts to u16. -void SetLotteryNumber16_Unused(u16 lotteryNum) -{ - SetLotteryNumber(lotteryNum); -} diff --git a/src/m4a_2.c b/src/m4a_2.c deleted file mode 100644 index 2d3c65848..000000000 --- a/src/m4a_2.c +++ /dev/null @@ -1,912 +0,0 @@ -#include "gba/m4a_internal.h" - -#define BSS_CODE __attribute__((section(".bss.code"))) - -BSS_CODE ALIGNED(4) char SoundMainRAM_Buffer[0x800] = {0}; - -struct SoundInfo gSoundInfo; -struct PokemonCrySong gPokemonCrySongs[MAX_POKEMON_CRIES]; -struct MusicPlayerInfo gPokemonCryMusicPlayers[MAX_POKEMON_CRIES]; -void *gMPlayJumpTable[36]; -struct CgbChannel gCgbChans[4]; -struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2]; -struct PokemonCrySong gPokemonCrySong; -struct MusicPlayerInfo gMPlay_BGM; -struct MusicPlayerInfo gMPlay_SE1; -struct MusicPlayerInfo gMPlay_SE2; -struct MusicPlayerInfo gMPlay_SE3; -u8 gMPlayMemAccArea[0x10]; - -u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust) -{ - u32 val1; - u32 val2; - u32 fineAdjustShifted = fineAdjust << 24; - - if (key > 178) - { - key = 178; - fineAdjustShifted = 255 << 24; - } - - val1 = gScaleTable[key]; - val1 = gFreqTable[val1 & 0xF] >> (val1 >> 4); - - val2 = gScaleTable[key + 1]; - val2 = gFreqTable[val2 & 0xF] >> (val2 >> 4); - - return umul3232H32(wav->freq, val1 + umul3232H32(val2 - val1, fineAdjustShifted)); -} - -void UnusedDummyFunc() -{ -} - -void MPlayContinue(struct MusicPlayerInfo *mplayInfo) -{ - if (mplayInfo->ident == ID_NUMBER) - { - mplayInfo->ident++; - mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE; - mplayInfo->ident = ID_NUMBER; - } -} - -void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed) -{ - if (mplayInfo->ident == ID_NUMBER) - { - mplayInfo->ident++; - mplayInfo->fadeOC = speed; - mplayInfo->fadeOI = speed; - mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT); - mplayInfo->ident = ID_NUMBER; - } -} - -void m4aSoundInit(void) -{ - s32 i; - - CpuCopy32((void *)((s32)SoundMainRAM & ~1), SoundMainRAM_Buffer, sizeof(SoundMainRAM_Buffer)); - - SoundInit(&gSoundInfo); - MPlayExtender(gCgbChans); - m4aSoundMode(SOUND_MODE_DA_BIT_8 - | SOUND_MODE_FREQ_13379 - | (12 << SOUND_MODE_MASVOL_SHIFT) - | (5 << SOUND_MODE_MAXCHN_SHIFT)); - - for (i = 0; i < NUM_MUSIC_PLAYERS; i++) - { - struct MusicPlayerInfo *mplayInfo = gMPlayTable[i].info; - MPlayOpen(mplayInfo, gMPlayTable[i].track, gMPlayTable[i].unk_8); - mplayInfo->unk_B = gMPlayTable[i].unk_A; - mplayInfo->memAccArea = gMPlayMemAccArea; - } - - memcpy(&gPokemonCrySong, &gPokemonCrySongTemplate, sizeof(struct PokemonCrySong)); - - for (i = 0; i < MAX_POKEMON_CRIES; i++) - { - struct MusicPlayerInfo *mplayInfo = &gPokemonCryMusicPlayers[i]; - struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2]; - MPlayOpen(mplayInfo, track, 2); - track->chan = 0; - } -} - -void m4aSoundMain(void) -{ - SoundMain(); -} - -void m4aSongNumStart(u16 n) -{ - const struct MusicPlayer *mplayTable = gMPlayTable; - const struct Song *songTable = gSongTable; - const struct Song *song = &songTable[n]; - const struct MusicPlayer *mplay = &mplayTable[song->ms]; - - MPlayStart(mplay->info, song->header); -} - -void m4aSongNumStartOrChange(u16 n) -{ - const struct MusicPlayer *mplayTable = gMPlayTable; - const struct Song *songTable = gSongTable; - const struct Song *song = &songTable[n]; - const struct MusicPlayer *mplay = &mplayTable[song->ms]; - - if (mplay->info->songHeader != song->header) - { - MPlayStart(mplay->info, song->header); - } - else - { - if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0 - || (mplay->info->status & MUSICPLAYER_STATUS_PAUSE)) - { - MPlayStart(mplay->info, song->header); - } - } -} - -void m4aSongNumStartOrContinue(u16 n) -{ - const struct MusicPlayer *mplayTable = gMPlayTable; - const struct Song *songTable = gSongTable; - const struct Song *song = &songTable[n]; - const struct MusicPlayer *mplay = &mplayTable[song->ms]; - - if (mplay->info->songHeader != song->header) - MPlayStart(mplay->info, song->header); - else if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0) - MPlayStart(mplay->info, song->header); - else if (mplay->info->status & MUSICPLAYER_STATUS_PAUSE) - MPlayContinue(mplay->info); -} - -void m4aSongNumStop(u16 n) -{ - const struct MusicPlayer *mplayTable = gMPlayTable; - const struct Song *songTable = gSongTable; - const struct Song *song = &songTable[n]; - const struct MusicPlayer *mplay = &mplayTable[song->ms]; - - if (mplay->info->songHeader == song->header) - m4aMPlayStop(mplay->info); -} - -void m4aSongNumContinue(u16 n) -{ - const struct MusicPlayer *mplayTable = gMPlayTable; - const struct Song *songTable = gSongTable; - const struct Song *song = &songTable[n]; - const struct MusicPlayer *mplay = &mplayTable[song->ms]; - - if (mplay->info->songHeader == song->header) - MPlayContinue(mplay->info); -} - -void m4aMPlayAllStop(void) -{ - s32 i; - - for (i = 0; i < NUM_MUSIC_PLAYERS; i++) - m4aMPlayStop(gMPlayTable[i].info); - - for (i = 0; i < MAX_POKEMON_CRIES; i++) - m4aMPlayStop(&gPokemonCryMusicPlayers[i]); -} - -void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo) -{ - MPlayContinue(mplayInfo); -} - -void m4aMPlayAllContinue(void) -{ - s32 i; - - for (i = 0; i < NUM_MUSIC_PLAYERS; i++) - MPlayContinue(gMPlayTable[i].info); - - for (i = 0; i < MAX_POKEMON_CRIES; i++) - MPlayContinue(&gPokemonCryMusicPlayers[i]); -} - -void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed) -{ - MPlayFadeOut(mplayInfo, speed); -} - -void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed) -{ - if (mplayInfo->ident == ID_NUMBER) - { - mplayInfo->ident++; - mplayInfo->fadeOC = speed; - mplayInfo->fadeOI = speed; - mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT) | TEMPORARY_FADE; - mplayInfo->ident = ID_NUMBER; - } -} - -void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed) -{ - if (mplayInfo->ident == ID_NUMBER) - { - mplayInfo->ident++; - mplayInfo->fadeOC = speed; - mplayInfo->fadeOI = speed; - mplayInfo->fadeOV = (0 << FADE_VOL_SHIFT) | FADE_IN; - mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE; - mplayInfo->ident = ID_NUMBER; - } -} - -void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo) -{ - s32 trackCount = mplayInfo->trackCount; - struct MusicPlayerTrack *track = mplayInfo->tracks; - - while (trackCount > 0) - { - if (track->flags & MPT_FLG_EXIST) - { - if (track->flags & MPT_FLG_START) - { - Clear64byte(track); - track->flags = MPT_FLG_EXIST; - track->bendRange = 2; - track->volX = 64; - track->lfoSpeed = 22; - track->tone.type = 1; - } - } - - trackCount--; - track++; - } -} - -void MPlayExtender(struct CgbChannel *cgbChans) -{ - struct SoundInfo *soundInfo; - u32 ident; - - REG_SOUNDCNT_X = SOUND_MASTER_ENABLE - | SOUND_4_ON - | SOUND_3_ON - | SOUND_2_ON - | SOUND_1_ON; - REG_SOUNDCNT_L = 0; // set master volume to zero - REG_NR12 = 0x8; - REG_NR22 = 0x8; - REG_NR42 = 0x8; - REG_NR14 = 0x80; - REG_NR24 = 0x80; - REG_NR44 = 0x80; - REG_NR30 = 0; - REG_NR50 = 0x77; - - soundInfo = SOUND_INFO_PTR; - - ident = soundInfo->ident; - - if (ident != ID_NUMBER) - return; - - soundInfo->ident++; - - gMPlayJumpTable[8] = ply_memacc; - gMPlayJumpTable[17] = ply_lfos; - gMPlayJumpTable[19] = ply_mod; - gMPlayJumpTable[28] = ply_xcmd; - gMPlayJumpTable[29] = ply_endtie; - gMPlayJumpTable[30] = SampleFreqSet; - gMPlayJumpTable[31] = TrackStop; - gMPlayJumpTable[32] = FadeOutBody; - gMPlayJumpTable[33] = TrkVolPitSet; - - soundInfo->cgbChans = (struct CgbChannel *)cgbChans; - soundInfo->CgbSound = CgbSound; - soundInfo->CgbOscOff = CgbOscOff; - soundInfo->MidiKeyToCgbFreq = MidiKeyToCgbFreq; - soundInfo->maxLines = MAX_LINES; - - CpuFill32(0, cgbChans, sizeof(struct CgbChannel) * 4); - - cgbChans[0].ty = 1; - cgbChans[0].panMask = 0x11; - cgbChans[1].ty = 2; - cgbChans[1].panMask = 0x22; - cgbChans[2].ty = 3; - cgbChans[2].panMask = 0x44; - cgbChans[3].ty = 4; - cgbChans[3].panMask = 0x88; - - soundInfo->ident = ident; -} - -void MusicPlayerJumpTableCopy(void) -{ - asm("swi 0x2A"); -} - -void ClearChain(void *x) -{ - void (*func)(void *) = *(&gMPlayJumpTable[34]); - func(x); -} - -void Clear64byte(void *x) -{ - void (*func)(void *) = *(&gMPlayJumpTable[35]); - func(x); -} - -void SoundInit(struct SoundInfo *soundInfo) -{ - soundInfo->ident = 0; - - if (REG_DMA1CNT & (DMA_REPEAT << 16)) - REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; - - if (REG_DMA2CNT & (DMA_REPEAT << 16)) - REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; - - REG_DMA1CNT_H = DMA_32BIT; - REG_DMA2CNT_H = DMA_32BIT; - REG_SOUNDCNT_X = SOUND_MASTER_ENABLE - | SOUND_4_ON - | SOUND_3_ON - | SOUND_2_ON - | SOUND_1_ON; - REG_SOUNDCNT_H = SOUND_B_FIFO_RESET | SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT - | SOUND_A_FIFO_RESET | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT - | SOUND_ALL_MIX_FULL; - REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40; - - REG_DMA1SAD = (s32)soundInfo->pcmBuffer; - REG_DMA1DAD = (s32)®_FIFO_A; - REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE; - REG_DMA2DAD = (s32)®_FIFO_B; - - SOUND_INFO_PTR = soundInfo; - CpuFill32(0, soundInfo, sizeof(struct SoundInfo)); - - soundInfo->maxChans = 8; - soundInfo->masterVolume = 15; - soundInfo->plynote = (u32)ply_note; - soundInfo->CgbSound = DummyFunc; - soundInfo->CgbOscOff = (void (*)(u8))DummyFunc; - soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc; - soundInfo->ExtVolPit = (u32)DummyFunc; - - MPlayJumpTableCopy(gMPlayJumpTable); - - soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable; - - SampleFreqSet(SOUND_MODE_FREQ_13379); - - soundInfo->ident = ID_NUMBER; -} - -void SampleFreqSet(u32 freq) -{ - struct SoundInfo *soundInfo = SOUND_INFO_PTR; - - freq = (freq & 0xF0000) >> 16; - soundInfo->freq = freq; - soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1]; - soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank; - - // LCD refresh rate 59.7275Hz - soundInfo->pcmFreq = (597275 * soundInfo->pcmSamplesPerVBlank + 5000) / 10000; - - // CPU frequency 16.78Mhz - soundInfo->divFreq = (16777216 / soundInfo->pcmFreq + 1) >> 1; - - // Turn off timer 0. - REG_TM0CNT_H = 0; - - // cycles per LCD fresh 280896 - REG_TM0CNT_L = -(280896 / soundInfo->pcmSamplesPerVBlank); - - m4aSoundVSyncOn(); - - while (*(vu8 *)REG_ADDR_VCOUNT == 159) - ; - - while (*(vu8 *)REG_ADDR_VCOUNT != 159) - ; - - REG_TM0CNT_H = TIMER_ENABLE | TIMER_1CLK; -} - -void m4aSoundMode(u32 mode) -{ - struct SoundInfo *soundInfo = SOUND_INFO_PTR; - u32 temp; - - if (soundInfo->ident != ID_NUMBER) - return; - - soundInfo->ident++; - - temp = mode & (SOUND_MODE_REVERB_SET | SOUND_MODE_REVERB_VAL); - - if (temp) - soundInfo->reverb = temp & SOUND_MODE_REVERB_VAL; - - temp = mode & SOUND_MODE_MAXCHN; - - if (temp) - { - struct SoundChannel *chan; - - soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT; - - temp = MAX_DIRECTSOUND_CHANNELS; - chan = &soundInfo->chans[0]; - - while (temp != 0) - { - chan->status = 0; - temp--; - chan++; - } - } - - temp = mode & SOUND_MODE_MASVOL; - - if (temp) - soundInfo->masterVolume = temp >> SOUND_MODE_MASVOL_SHIFT; - - temp = mode & SOUND_MODE_DA_BIT; - - if (temp) - { - temp = (temp & 0x300000) >> 14; - REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | temp; - } - - temp = mode & SOUND_MODE_FREQ; - - if (temp) - { - m4aSoundVSyncOff(); - SampleFreqSet(temp); - } - - soundInfo->ident = ID_NUMBER; -} - -void SoundClear(void) -{ - struct SoundInfo *soundInfo = SOUND_INFO_PTR; - s32 i; - void *chan; - - if (soundInfo->ident != ID_NUMBER) - return; - - soundInfo->ident++; - - i = MAX_DIRECTSOUND_CHANNELS; - chan = &soundInfo->chans[0]; - - while (i > 0) - { - ((struct SoundChannel *)chan)->status = 0; - i--; - chan = (void *)((s32)chan + sizeof(struct SoundChannel)); - } - - chan = soundInfo->cgbChans; - - if (chan) - { - i = 1; - - while (i <= 4) - { - soundInfo->CgbOscOff(i); - ((struct CgbChannel *)chan)->sf = 0; - i++; - chan = (void *)((s32)chan + sizeof(struct CgbChannel)); - } - } - - soundInfo->ident = ID_NUMBER; -} - -void m4aSoundVSyncOff(void) -{ - struct SoundInfo *soundInfo = SOUND_INFO_PTR; - - if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1) - { - soundInfo->ident += 10; - - if (REG_DMA1CNT & (DMA_REPEAT << 16)) - REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; - - if (REG_DMA2CNT & (DMA_REPEAT << 16)) - REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; - - REG_DMA1CNT_H = DMA_32BIT; - REG_DMA2CNT_H = DMA_32BIT; - - CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer)); - } -} - -void m4aSoundVSyncOn(void) -{ - struct SoundInfo *soundInfo = SOUND_INFO_PTR; - u32 ident = soundInfo->ident; - - if (ident == ID_NUMBER) - return; - - REG_DMA1CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT; - REG_DMA2CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT; - - soundInfo->pcmDmaCounter = 0; - soundInfo->ident = ident - 10; -} - -void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tracks, u8 trackCount) -{ - struct SoundInfo *soundInfo; - - if (trackCount == 0) - return; - - if (trackCount > MAX_MUSICPLAYER_TRACKS) - trackCount = MAX_MUSICPLAYER_TRACKS; - - soundInfo = SOUND_INFO_PTR; - - if (soundInfo->ident != ID_NUMBER) - return; - - soundInfo->ident++; - - Clear64byte(mplayInfo); - - mplayInfo->tracks = tracks; - mplayInfo->trackCount = trackCount; - mplayInfo->status = MUSICPLAYER_STATUS_PAUSE; - - while (trackCount != 0) - { - tracks->flags = 0; - trackCount--; - tracks++; - } - - if (soundInfo->func != 0) - { - mplayInfo->func = soundInfo->func; - mplayInfo->intp = soundInfo->intp; - soundInfo->func = 0; - } - - soundInfo->intp = (u32)mplayInfo; - soundInfo->func = (u32)MPlayMain; - soundInfo->ident = ID_NUMBER; - mplayInfo->ident = ID_NUMBER; -} - -void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader) -{ - s32 i; - u8 unk_B; - struct MusicPlayerTrack *track; - - if (mplayInfo->ident != ID_NUMBER) - return; - - unk_B = mplayInfo->unk_B; - - if (!unk_B - || ((!mplayInfo->songHeader || !(mplayInfo->tracks[0].flags & MPT_FLG_START)) - && ((mplayInfo->status & MUSICPLAYER_STATUS_TRACK) == 0 - || (mplayInfo->status & MUSICPLAYER_STATUS_PAUSE))) - || (mplayInfo->priority <= songHeader->priority)) - { - mplayInfo->ident++; - mplayInfo->status = 0; - mplayInfo->songHeader = songHeader; - mplayInfo->tone = songHeader->tone; - mplayInfo->priority = songHeader->priority; - mplayInfo->clock = 0; - mplayInfo->tempoD = 150; - mplayInfo->tempoI = 150; - mplayInfo->tempoU = 0x100; - mplayInfo->tempoC = 0; - mplayInfo->fadeOI = 0; - - i = 0; - track = mplayInfo->tracks; - - while (i < songHeader->trackCount && i < mplayInfo->trackCount) - { - TrackStop(mplayInfo, track); - track->flags = MPT_FLG_EXIST | MPT_FLG_START; - track->chan = 0; - track->cmdPtr = songHeader->part[i]; - i++; - track++; - } - - while (i < mplayInfo->trackCount) - { - TrackStop(mplayInfo, track); - track->flags = 0; - i++; - track++; - } - - if (songHeader->reverb & 0x80) - m4aSoundMode(songHeader->reverb); - - mplayInfo->ident = ID_NUMBER; - } -} - -void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo) -{ - s32 i; - struct MusicPlayerTrack *track; - - if (mplayInfo->ident != ID_NUMBER) - return; - - mplayInfo->ident++; - mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE; - - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - - while (i > 0) - { - TrackStop(mplayInfo, track); - i--; - track++; - } - - mplayInfo->ident = ID_NUMBER; -} - -void FadeOutBody(struct MusicPlayerInfo *mplayInfo) -{ - s32 i; - struct MusicPlayerTrack *track; - u16 fadeOI = mplayInfo->fadeOI; - register u32 temp asm("r3"); - register u16 mask asm("r2"); - - if (fadeOI == 0) - return; - - mplayInfo->fadeOC--; - - temp = 0xFFFF; - mask = temp; - - if (mplayInfo->fadeOC != 0) - return; - - mplayInfo->fadeOC = fadeOI; - - if (mplayInfo->fadeOV & FADE_IN) - { - mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT); - - if ((u16)(mplayInfo->fadeOV & mask) >= (64 << FADE_VOL_SHIFT)) - { - mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT); - mplayInfo->fadeOI = 0; - } - } - else - { - mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT); - - if ((s16)(mplayInfo->fadeOV & mask) <= 0) - { - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - - while (i > 0) - { - register u32 fadeOV asm("r7"); - u32 val; - - TrackStop(mplayInfo, track); - - val = TEMPORARY_FADE; - fadeOV = mplayInfo->fadeOV; - val &= fadeOV; - - if (!val) - track->flags = 0; - - i--; - track++; - } - - if (mplayInfo->fadeOV & TEMPORARY_FADE) - mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE; - else - mplayInfo->status = MUSICPLAYER_STATUS_PAUSE; - - mplayInfo->fadeOI = 0; - return; - } - } - - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - - while (i > 0) - { - if (track->flags & MPT_FLG_EXIST) - { - track->volX = (mplayInfo->fadeOV >> FADE_VOL_SHIFT); - track->flags |= MPT_FLG_VOLCHG; - } - - i--; - track++; - } -} - -void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - if (track->flags & MPT_FLG_VOLSET) - { - s32 x; - s32 y; - - x = (u32)(track->vol * track->volX) >> 5; - - if (track->modT == 1) - x = (u32)(x * (track->modM + 128)) >> 7; - - y = 2 * track->pan + track->panX; - - if (track->modT == 2) - y += track->modM; - - if (y < -128) - y = -128; - else if (y > 127) - y = 127; - - track->volMR = (u32)((y + 128) * x) >> 8; - track->volML = (u32)((127 - y) * x) >> 8; - } - - if (track->flags & MPT_FLG_PITSET) - { - s32 bend = track->bend * track->bendRange; - register s32 x asm("r1") = track->tune; - x += bend; - x *= 4; - x += (track->keyShift << 8); - x += (track->keyShiftX << 8); - x += track->pitX; - - if (track->modT == 0) - x += 16 * track->modM; - - track->keyM = x >> 8; - track->pitM = x; - } - - track->flags &= ~(MPT_FLG_PITSET | MPT_FLG_VOLSET); -} - -u32 MidiKeyToCgbFreq(u8 chanNum, u8 key, u8 fineAdjust) -{ - if (chanNum == 4) - { - if (key <= 20) - { - key = 0; - } - else - { - key -= 21; - if (key > 59) - key = 59; - } - - return gNoiseTable[key]; - } - else - { - s32 val1; - s32 val2; - - if (key <= 35) - { - fineAdjust = 0; - key = 0; - } - else - { - key -= 36; - if (key > 130) - { - key = 130; - fineAdjust = 255; - } - } - - val1 = gCgbScaleTable[key]; - val1 = gCgbFreqTable[val1 & 0xF] >> (val1 >> 4); - - val2 = gCgbScaleTable[key + 1]; - val2 = gCgbFreqTable[val2 & 0xF] >> (val2 >> 4); - - return val1 + ((fineAdjust * (val2 - val1)) >> 8) + 2048; - } -} - -void CgbOscOff(u8 chanNum) -{ - switch (chanNum) - { - case 1: - REG_NR12 = 8; - REG_NR14 = 0x80; - break; - case 2: - REG_NR22 = 8; - REG_NR24 = 0x80; - break; - case 3: - REG_NR30 = 0; - break; - default: - REG_NR42 = 8; - REG_NR44 = 0x80; - } -} - -static inline int CgbPan(struct CgbChannel *chan) -{ - u32 rightVolume = chan->rightVolume; - u32 leftVolume = chan->leftVolume; - - if ((rightVolume = (u8)rightVolume) >= (leftVolume = (u8)leftVolume)) - { - if (rightVolume / 2 >= leftVolume) - { - chan->pan = 0x0F; - return 1; - } - } - else - { - if (leftVolume / 2 >= rightVolume) - { - chan->pan = 0xF0; - return 1; - } - } - - return 0; -} - -void CgbModVol(struct CgbChannel *chan) -{ - struct SoundInfo *soundInfo = SOUND_INFO_PTR; - - if ((soundInfo->mode & 1) || !CgbPan(chan)) - { - chan->pan = 0xFF; - chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4; - } - else - { - // Force chan->rightVolume and chan->leftVolume to be read from memory again, - // even though there is no reason to do so. - // The command line option "-fno-gcse" achieves the same result as this. - asm("" : : : "memory"); - - chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4; - if (chan->eg > 15) - chan->eg = 15; - } - - chan->sg = (chan->eg * chan->su + 15) >> 4; - chan->pan &= chan->panMask; -} diff --git a/src/m4a_4.c b/src/m4a_4.c deleted file mode 100644 index 99195ec00..000000000 --- a/src/m4a_4.c +++ /dev/null @@ -1,545 +0,0 @@ -#include "gba/m4a_internal.h" - -void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo) -{ - if (mplayInfo->ident == ID_NUMBER) - { - mplayInfo->ident++; - mplayInfo->tempoU = tempo; - mplayInfo->tempoI = (mplayInfo->tempoD * mplayInfo->tempoU) >> 8; - mplayInfo->ident = ID_NUMBER; - } -} - -void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume) -{ - s32 i; - u32 bit; - struct MusicPlayerTrack *track; - - if (mplayInfo->ident != ID_NUMBER) - return; - - mplayInfo->ident++; - - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - bit = 1; - - while (i > 0) - { - if (trackBits & bit) - { - if (track->flags & MPT_FLG_EXIST) - { - track->volX = volume / 4; - track->flags |= MPT_FLG_VOLCHG; - } - } - - i--; - track++; - bit <<= 1; - } - - mplayInfo->ident = ID_NUMBER; -} - -void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 pitch) -{ - s32 i; - u32 bit; - struct MusicPlayerTrack *track; - - if (mplayInfo->ident != ID_NUMBER) - return; - - mplayInfo->ident++; - - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - bit = 1; - - while (i > 0) - { - if (trackBits & bit) - { - if (track->flags & MPT_FLG_EXIST) - { - track->keyShiftX = (s16)pitch >> 8; - track->pitX = pitch; - track->flags |= MPT_FLG_PITCHG; - } - } - - i--; - track++; - bit <<= 1; - } - - mplayInfo->ident = ID_NUMBER; -} - -void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan) -{ - s32 i; - u32 bit; - struct MusicPlayerTrack *track; - - if (mplayInfo->ident != ID_NUMBER) - return; - - mplayInfo->ident++; - - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - bit = 1; - - while (i > 0) - { - if (trackBits & bit) - { - if (track->flags & MPT_FLG_EXIST) - { - track->panX = pan; - track->flags |= MPT_FLG_VOLCHG; - } - } - - i--; - track++; - bit <<= 1; - } - - mplayInfo->ident = ID_NUMBER; -} - -void ClearModM(struct MusicPlayerTrack *track) -{ - track->lfoSpeedC = 0; - track->modM = 0; - - if (track->modT == 0) - track->flags |= MPT_FLG_PITCHG; - else - track->flags |= MPT_FLG_VOLCHG; -} - -void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth) -{ - s32 i; - u32 bit; - struct MusicPlayerTrack *track; - - if (mplayInfo->ident != ID_NUMBER) - return; - - mplayInfo->ident++; - - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - bit = 1; - - while (i > 0) - { - if (trackBits & bit) - { - if (track->flags & MPT_FLG_EXIST) - { - track->mod = modDepth; - - if (!track->mod) - ClearModM(track); - } - } - - i--; - track++; - bit <<= 1; - } - - mplayInfo->ident = ID_NUMBER; -} - -void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed) -{ - s32 i; - u32 bit; - struct MusicPlayerTrack *track; - - if (mplayInfo->ident != ID_NUMBER) - return; - - mplayInfo->ident++; - - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - bit = 1; - - while (i > 0) - { - if (trackBits & bit) - { - if (track->flags & MPT_FLG_EXIST) - { - track->lfoSpeed = lfoSpeed; - - if (!track->lfoSpeed) - ClearModM(track); - } - } - - i--; - track++; - bit <<= 1; - } - - mplayInfo->ident = ID_NUMBER; -} - -#define MEMACC_COND_JUMP(cond) \ -if (cond) \ - goto cond_true; \ -else \ - goto cond_false; \ - -void ply_memacc(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - u32 op; - u8 *addr; - u8 data; - - op = *track->cmdPtr; - track->cmdPtr++; - - addr = mplayInfo->memAccArea + *track->cmdPtr; - track->cmdPtr++; - - data = *track->cmdPtr; - track->cmdPtr++; - - switch (op) - { - case 0: - *addr = data; - return; - case 1: - *addr += data; - return; - case 2: - *addr -= data; - return; - case 3: - *addr = mplayInfo->memAccArea[data]; - return; - case 4: - *addr += mplayInfo->memAccArea[data]; - return; - case 5: - *addr -= mplayInfo->memAccArea[data]; - return; - case 6: - MEMACC_COND_JUMP(*addr == data) - return; - case 7: - MEMACC_COND_JUMP(*addr != data) - return; - case 8: - MEMACC_COND_JUMP(*addr > data) - return; - case 9: - MEMACC_COND_JUMP(*addr >= data) - return; - case 10: - MEMACC_COND_JUMP(*addr <= data) - return; - case 11: - MEMACC_COND_JUMP(*addr < data) - return; - case 12: - MEMACC_COND_JUMP(*addr == mplayInfo->memAccArea[data]) - return; - case 13: - MEMACC_COND_JUMP(*addr != mplayInfo->memAccArea[data]) - return; - case 14: - MEMACC_COND_JUMP(*addr > mplayInfo->memAccArea[data]) - return; - case 15: - MEMACC_COND_JUMP(*addr >= mplayInfo->memAccArea[data]) - return; - case 16: - MEMACC_COND_JUMP(*addr <= mplayInfo->memAccArea[data]) - return; - case 17: - MEMACC_COND_JUMP(*addr < mplayInfo->memAccArea[data]) - return; - default: - return; - } - -cond_true: - { - void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[1]); - func(mplayInfo, track); - return; - } - -cond_false: - track->cmdPtr += 4; -} - -void ply_xcmd(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - u32 n = *track->cmdPtr; - track->cmdPtr++; - - gXcmdTable[n](mplayInfo, track); -} - -void ply_xxx(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[0]); - func(mplayInfo, track); -} - -#define READ_XCMD_BYTE(var, n) \ -{ \ - u32 byte = track->cmdPtr[(n)]; \ - byte <<= n * 8; \ - (var) &= ~(0xFF << (n * 8)); \ - (var) |= byte; \ -} - -void ply_xwave(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - u32 wav; - - READ_XCMD_BYTE(wav, 0) // UB: uninitialized variable - READ_XCMD_BYTE(wav, 1) - READ_XCMD_BYTE(wav, 2) - READ_XCMD_BYTE(wav, 3) - - track->tone.wav = (struct WaveData *)wav; - track->cmdPtr += 4; -} - -void ply_xtype(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->tone.type = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xatta(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->tone.attack = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xdeca(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->tone.decay = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xsust(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->tone.sustain = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xrele(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->tone.release = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xiecv(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->echoVolume = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xiecl(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->echoLength = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xleng(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->tone.length = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xswee(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->tone.pan_sweep = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - u32 unk; - - READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable - READ_XCMD_BYTE(unk, 1) - - if (track->unk_3A < (u16)unk) - { - track->unk_3A++; - track->cmdPtr -= 2; - track->wait = 1; - } - else - { - track->unk_3A = 0; - track->cmdPtr += 2; - } -} - -void ply_xcmd_0D(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - u32 unk; - - READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable - READ_XCMD_BYTE(unk, 1) - READ_XCMD_BYTE(unk, 2) - READ_XCMD_BYTE(unk, 3) - - track->unk_3C = unk; - track->cmdPtr += 4; -} - -void DummyFunc(void) -{ -} - -struct MusicPlayerInfo *SetPokemonCryTone(struct ToneData *tone) -{ - u32 maxClock = 0; - s32 maxClockIndex = 0; - s32 i; - struct MusicPlayerInfo *mplayInfo; - - for (i = 0; i < MAX_POKEMON_CRIES; i++) - { - struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2]; - - if (!track->flags && (!track->chan || track->chan->track != track)) - goto start_song; - - if (maxClock < gPokemonCryMusicPlayers[i].clock) - { - maxClock = gPokemonCryMusicPlayers[i].clock; - maxClockIndex = i; - } - } - - i = maxClockIndex; - -start_song: - mplayInfo = &gPokemonCryMusicPlayers[i]; - mplayInfo->ident++; - -#define CRY ((s32)&gPokemonCrySongs + i * sizeof(struct PokemonCrySong)) -#define CRY_OFS(field) offsetof(struct PokemonCrySong, field) - - memcpy((void *)CRY, &gPokemonCrySong, sizeof(struct PokemonCrySong)); - - *(u32 *)(CRY + CRY_OFS(tone)) = (u32)tone; - *(u32 *)(CRY + CRY_OFS(part)) = CRY + CRY_OFS(part0); - *(u32 *)(CRY + CRY_OFS(part) + 4) = CRY + CRY_OFS(part1); - *(u32 *)(CRY + CRY_OFS(gotoTarget)) = CRY + CRY_OFS(cont); - -#undef CRY_OFS -#undef CRY - - mplayInfo->ident = ID_NUMBER; - - MPlayStart(mplayInfo, (struct SongHeader *)(&gPokemonCrySongs[i])); - - return mplayInfo; -} - -void SetPokemonCryVolume(u8 val) -{ - gPokemonCrySong.volumeValue = val & 0x7F; -} - -void SetPokemonCryPanpot(s8 val) -{ - gPokemonCrySong.panValue = (val + C_V) & 0x7F; -} - -void SetPokemonCryPitch(s16 val) -{ - s16 b = val + 0x80; - u8 a = gPokemonCrySong.tuneValue2 - gPokemonCrySong.tuneValue; - gPokemonCrySong.tieKeyValue = (b >> 8) & 0x7F; - gPokemonCrySong.tuneValue = (b >> 1) & 0x7F; - gPokemonCrySong.tuneValue2 = (a + ((b >> 1) & 0x7F)) & 0x7F; -} - -void SetPokemonCryLength(u16 val) -{ - gPokemonCrySong.unkCmd0CParam = val; -} - -void SetPokemonCryRelease(u8 val) -{ - gPokemonCrySong.releaseValue = val; -} - -void SetPokemonCryProgress(u32 val) -{ - gPokemonCrySong.unkCmd0DParam = val; -} - -int IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo) -{ - struct MusicPlayerTrack *track = mplayInfo->tracks; - - if (track->chan && track->chan->track == track) - return 1; - else - return 0; -} - -void SetPokemonCryChorus(s8 val) -{ - if (val) - { - gPokemonCrySong.trackCount = 2; - gPokemonCrySong.tuneValue2 = (val + gPokemonCrySong.tuneValue) & 0x7F; - } - else - { - gPokemonCrySong.trackCount = 1; - } -} - -void SetPokemonCryStereo(u32 val) -{ - struct SoundInfo *soundInfo = SOUND_INFO_PTR; - - if (val) - { - REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT - | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT - | SOUND_ALL_MIX_FULL; - soundInfo->mode &= ~1; - } - else - { - REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT | SOUND_B_RIGHT_OUTPUT - | SOUND_A_TIMER_0 | SOUND_A_LEFT_OUTPUT | SOUND_A_RIGHT_OUTPUT - | SOUND_B_MIX_HALF | SOUND_A_MIX_HALF | SOUND_CGB_MIX_FULL; - soundInfo->mode |= 1; - } -} - -void SetPokemonCryPriority(u8 val) -{ - gPokemonCrySong.priority = val; -} diff --git a/src/m4a_tables.c b/src/m4a_tables.c deleted file mode 100644 index 91f00a31d..000000000 --- a/src/m4a_tables.c +++ /dev/null @@ -1,307 +0,0 @@ -#include "gba/m4a_internal.h" - -// Some of these functions have different signatures, so we need to make this -// an array of void pointers or a struct. It's simpler to just make it an array -// for now. -void * const gMPlayJumpTableTemplate[] = -{ - ply_fine, - ply_goto, - ply_patt, - ply_pend, - ply_rept, - ply_fine, - ply_fine, - ply_fine, - ply_fine, - ply_prio, - ply_tempo, - ply_keysh, - ply_voice, - ply_vol, - ply_pan, - ply_bend, - ply_bendr, - ply_lfos, - ply_lfodl, - ply_mod, - ply_modt, - ply_fine, - ply_fine, - ply_tune, - ply_fine, - ply_fine, - ply_fine, - ply_port, - ply_fine, - ply_endtie, - SampleFreqSet, - TrackStop, - FadeOutBody, - TrkVolPitSet, - RealClearChain, - SoundMainBTM, -}; - -// This is a table of deltas between sample values in compressed PCM data. -const s8 gDeltaEncodingTable[] = -{ - 0, - 1, - 4, - 9, - 16, - 25, - 36, - 49, - -64, - -49, - -36, - -25, - -16, - -9, - -4, - -1, -}; - -const u8 gScaleTable[] = -{ - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, - 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, - 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, -}; - -const u32 gFreqTable[] = -{ - 2147483648u, - 2275179671u, - 2410468894u, - 2553802834u, - 2705659852u, - 2866546760u, - 3037000500u, - 3217589947u, - 3408917802u, - 3611622603u, - 3826380858u, - 4053909305u, -}; - -const u16 gPcmSamplesPerVBlankTable[] = -{ - 96, - 132, - 176, - 224, - 264, - 304, - 352, - 448, - 528, - 608, - 672, - 704, -}; - -const u8 gCgbScaleTable[] = -{ - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, - 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, -}; - -const s16 gCgbFreqTable[] = -{ - -2004, - -1891, - -1785, - -1685, - -1591, - -1501, - -1417, - -1337, - -1262, - -1192, - -1125, - -1062, -}; - -const u8 gNoiseTable[] = -{ - 0xD7, 0xD6, 0xD5, 0xD4, - 0xC7, 0xC6, 0xC5, 0xC4, - 0xB7, 0xB6, 0xB5, 0xB4, - 0xA7, 0xA6, 0xA5, 0xA4, - 0x97, 0x96, 0x95, 0x94, - 0x87, 0x86, 0x85, 0x84, - 0x77, 0x76, 0x75, 0x74, - 0x67, 0x66, 0x65, 0x64, - 0x57, 0x56, 0x55, 0x54, - 0x47, 0x46, 0x45, 0x44, - 0x37, 0x36, 0x35, 0x34, - 0x27, 0x26, 0x25, 0x24, - 0x17, 0x16, 0x15, 0x14, - 0x07, 0x06, 0x05, 0x04, - 0x03, 0x02, 0x01, 0x00, -}; - -const u8 gCgb3Vol[] = -{ - 0x00, 0x00, - 0x60, 0x60, 0x60, 0x60, - 0x40, 0x40, 0x40, 0x40, - 0x80, 0x80, 0x80, 0x80, - 0x20, 0x20, -}; - -const u8 gClockTable[] = -{ - 0x00, - 0x01, - 0x02, - 0x03, - 0x04, - 0x05, - 0x06, - 0x07, - 0x08, - 0x09, - 0x0A, - 0x0B, - 0x0C, - 0x0D, - 0x0E, - 0x0F, - 0x10, - 0x11, - 0x12, - 0x13, - 0x14, - 0x15, - 0x16, - 0x17, - 0x18, - 0x1C, - 0x1E, - 0x20, - 0x24, - 0x28, - 0x2A, - 0x2C, - 0x30, - 0x34, - 0x36, - 0x38, - 0x3C, - 0x40, - 0x42, - 0x44, - 0x48, - 0x4C, - 0x4E, - 0x50, - 0x54, - 0x58, - 0x5A, - 0x5C, - 0x60, -}; - -#define FINE 0xb1 -#define GOTO 0xb2 -#define PATT 0xb3 -#define PEND 0xb4 -#define REPT 0xb5 -#define MEMACC 0xb9 -#define PRIO 0xba -#define TEMPO 0xbb -#define KEYSH 0xbc -#define VOICE 0xbd -#define VOL 0xbe -#define PAN 0xbf -#define BEND 0xc0 -#define BENDR 0xc1 -#define LFOS 0xc2 -#define LFODL 0xc3 -#define MOD 0xc4 -#define MODT 0xc5 -#define TUNE 0xc8 - -#define XCMD 0xcd -#define xRELE 0x07 -#define xIECV 0x08 -#define xIECL 0x09 - -#define EOT 0xce -#define TIE 0xcf - -const struct PokemonCrySong gPokemonCrySongTemplate = -{ - 1, // track count - 0, // block count - 255, // priority - 0, // reverb - (struct ToneData *)&voicegroup_pokemon_cry, - NULL, - NULL, - 0, - TUNE, // part 0 - C_V, // TUNE value - GOTO, - 0, // GOTO target address - TUNE, // part 1 - C_V + 16, // TUNE value - {VOICE, 0}, // part 0 jumps here with GOTO - VOL, - 127, // volume - {XCMD, 0x0D}, - 0, // unk value - {XCMD, xRELE}, - 0, // release - PAN, - C_V, // PAN value - TIE, - 60, // TIE key (default is Cn3) - 127, // TIE velocity - {XCMD, 0x0C}, - 60, // unk value - {EOT, FINE} // end -}; - -const XcmdFunc gXcmdTable[] = -{ - ply_xxx, - ply_xwave, - ply_xtype, - ply_xxx, - ply_xatta, - ply_xdeca, - ply_xsust, - ply_xrele, - ply_xiecv, - ply_xiecl, - ply_xleng, - ply_xswee, - ply_xcmd_0C, - ply_xcmd_0D, -}; diff --git a/src/mail.c b/src/mail.c deleted file mode 100644 index 658d37976..000000000 --- a/src/mail.c +++ /dev/null @@ -1,437 +0,0 @@ -#include "global.h" -#include "mail.h" -#include "easy_chat.h" -#include "items.h" -#include "mail_data.h" -#include "menu.h" -#include "menu_helpers.h" -#include "name_string_util.h" -#include "palette.h" -#include "pokemon_icon.h" -#include "rom4.h" -#include "sprite.h" -#include "string_util.h" -#include "strings2.h" -#include "task.h" -#include "text.h" -#include "unknown_task.h" - -struct UnkMailStruct -{ - u8 unk_0_0:2; - u8 unk_0_2:2; - u8 unk_0_4:4; -}; - -struct MailLayout -{ - u8 var0; - u8 var1; - u8 var2; - u8 var3_0:4; - u8 var3_4:4; - struct UnkMailStruct *var4; -}; - -struct Unk2000000 -{ - /* 0x00*/ u8 words[8][27]; - /* 0xD8*/ u8 varD8[20]; - /* 0xEC*/ MainCallback varEC; - /* 0xF0*/ MainCallback varF0; - /* 0xF4*/ struct MailStruct *varF4; - /* 0xF8*/ u8 varF8; - /* 0xF9*/ u8 varF9; - /* 0xFA*/ u8 varFA; - /* 0xFB*/ u8 varFB; - /* 0xFC*/ u8 varFC; - u8 padFD[1]; - /* 0xFE*/ u8 varFE; - /* 0xFF*/ u8 varFF; - /*0x100*/ u8 var100; - u8 pad101[3]; - /*0x104*/ MainCallback var104; - /*0x108*/ MainCallback var108; - /*0x10C*/ struct MailLayout *var10C; -}; - -struct MailGraphics -{ - u16 (*palette)[]; - u8 (*tiles)[]; - u8 (*tileMap)[]; - u16 var0C; - u16 var0E; - u16 color10; - u16 color12; -}; - -extern u8 ewram[]; -#define ewram0 (*(struct Unk2000000 *)(ewram)) - -extern struct MailGraphics gMailGraphicsTable[]; -extern u16 gUnknown_083E562C[][2]; - -extern struct MailLayout gUnknown_083E5730[]; -extern struct MailLayout gUnknown_083E57A4[]; - -static u8 sub_80F8A28(void); -static void sub_80F8D50(void); -static void sub_80F8DA0(void); -static void sub_80F8E80(void); -static void sub_80F8F18(void); -static void sub_80F8F2C(void); -static void sub_80F8F58(void); -static void sub_80F8F78(void); -static void sub_80F8FB4(void); - -void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) -{ - u16 mailDesign; - u16 buffer[2]; - - ewram0.varFF = GAME_LANGUAGE; - ewram0.var100 = 1; - ewram0.var104 = (MainCallback)sub_80EB3FC; - ewram0.var108 = (MainCallback)ConvertEasyChatWordsToString; - - mailDesign = arg0->itemId - ITEM_ORANGE_MAIL; - - if (mailDesign <= 11) - { - ewram0.varFA = arg0->itemId - ITEM_ORANGE_MAIL; - } - else - { - ewram0.varFA = 0; - arg2 = FALSE; - } - - switch (ewram0.var100) - { - case 0: - default: - ewram0.var10C = &gUnknown_083E5730[ewram0.varFA]; - break; - - case 1: - ewram0.var10C = &gUnknown_083E57A4[ewram0.varFA]; - break; - } - - if (((MailSpeciesToSpecies(arg0->species, buffer) << 16) + 0xFFFF0000) <= (410 << 16)) - { - switch (ewram0.varFA) - { - case 6: - ewram0.varFB = 1; - break; - - case 9: - ewram0.varFB = 2; - break; - - default: - ewram0.varFB = 0; - break; - } - } - else - { - ewram0.varFB = 0; - } - - - ewram0.varF4 = arg0; - ewram0.varEC = arg1; - ewram0.varF8 = arg2; - - SetMainCallback2(sub_80F8D50); -} - -#define RETURN_UP_STATE break -#define RETURN_SKIP_STATE return FALSE - -static u8 sub_80F8A28(void) -{ - switch (gMain.state) - { - case 0: - SetVBlankCallback(NULL); - remove_some_task(); - REG_DISPCNT = 0; - RETURN_UP_STATE; - - case 1: CpuFill16(0, (void *)OAM, OAM_SIZE); - RETURN_UP_STATE; - - case 2: - ResetPaletteFade(); - RETURN_UP_STATE; - - case 3: - ResetTasks(); - RETURN_UP_STATE; - - case 4: - ResetSpriteData(); - RETURN_UP_STATE; - - case 5: - FreeAllSpritePalettes(); - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG2VOFS = 0; - REG_BG2HOFS = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - RETURN_UP_STATE; - - case 6: - SetUpWindowConfig(&gWindowConfig_81E6DFC); - RETURN_UP_STATE; - - case 7: - MultistepInitMenuWindowBegin(&gWindowConfig_81E6DFC); - RETURN_UP_STATE; - - case 8: - if (MultistepInitMenuWindowContinue() == 0) - { - return FALSE; - } - RETURN_UP_STATE; - - case 9: - MenuZeroFillScreen(); - RETURN_UP_STATE; - - case 10: CpuFill16(1, (void *)(VRAM + 0x4800), 0x800); - RETURN_UP_STATE; - - case 11: - LoadPalette(gMailGraphicsTable[ewram0.varFA].palette, 0, 16 * 2); - RETURN_UP_STATE; - - case 12: - LZ77UnCompVram(gMailGraphicsTable[ewram0.varFA].tileMap, (void *)(VRAM + 0x4000)); - RETURN_UP_STATE; - - case 13: - LZ77UnCompVram(gMailGraphicsTable[ewram0.varFA].tiles, (void *)(VRAM)); - - gPlttBufferUnfaded[241] = gMailGraphicsTable[ewram0.varFA].color10; - gPlttBufferUnfaded[248] = gMailGraphicsTable[ewram0.varFA].color12; - gPlttBufferUnfaded[10] = gUnknown_083E562C[gSaveBlock2.playerGender][0]; - gPlttBufferUnfaded[11] = gUnknown_083E562C[gSaveBlock2.playerGender][1]; - RETURN_UP_STATE; - - case 14: - if (ewram0.varF8 != 0) - { - sub_80F8DA0(); - } - RETURN_UP_STATE; - - case 15: - if (ewram0.varF8 != 0) - { - sub_80F8E80(); - } - - SetVBlankCallback(sub_80F8F18); - gPaletteFade.bufferTransferDisabled = 1; - RETURN_UP_STATE; - - case 16: - { - u16 local1; - - local1 = sub_809D4A8(ewram0.varF4->species); - - switch (ewram0.varFB) - { - case 1: - sub_809D580(local1); - ewram0.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 96, 128, 0); - break; - - case 2: - sub_809D580(local1); - ewram0.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 40, 128, 0); - break; - } - RETURN_UP_STATE; - } - - case 17: - if (sub_8055870() != TRUE) - { - RETURN_UP_STATE; - } - RETURN_SKIP_STATE; - - case 18: - REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x512; - REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(8) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(9) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BLDCNT = 0; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; - BeginNormalPaletteFade(-1, 0, 16, 0, 0); - gPaletteFade.bufferTransferDisabled = 0; - ewram0.varF0 = sub_80F8F58; - return TRUE; - - default: - return FALSE; - } - - gMain.state += 1; - return FALSE; -} - -static void sub_80F8D50(void) -{ - do - { - if (sub_80F8A28() == 1) - { - SetMainCallback2(sub_80F8F2C); - return; - } - } while (sub_80F9344() != 1); -} - -static u8 *sub_80F8D7C(u8 *dest, u8 *src) -{ - u16 length; - - StringCopy(dest, src); - SanitizeNameString(dest); - - length = StringLength(dest); - - return dest + length; -} - -static void sub_80F8DA0(void) -{ - u16 i; - u8 r6; - u8 *ptr; - - r6 = 0; - for (i = 0; i < ewram0.var10C->var0; i++) - { - ConvertEasyChatWordsToString(ewram0.words[i], &ewram0.varF4->words[r6], ewram0.var10C->var4[i].unk_0_2, 1); - r6 += ewram0.var10C->var4[i].unk_0_2; - } - ptr = ewram0.varD8; - if (ewram0.var100 == 0) - { - ptr = sub_80F8D7C(ptr, ewram0.varF4->playerName); - StringCopy(ptr, gOtherText_From); - ewram0.varF9 = ewram0.var10C->var2 - StringLength(ewram0.varD8); - - } - else - { - ptr = StringCopy(ptr, gOtherText_From); - sub_80F8D7C(ptr, ewram0.varF4->playerName); - ewram0.varF9 = ewram0.var10C->var2; - } -} - -static void sub_80F8E80(void) -{ - u16 pos; - u8 x; - u8 y = 0; - - for (pos = 0; pos < ewram0.var10C->var0; pos++) - { - if (ewram0.words[pos][0] == 0xFF) - { - continue; - } - - if (ewram0.words[pos][0] == 0x00) - { - continue; - } - - x = ewram0.var10C->var4[pos].unk_0_4; - y += ewram0.var10C->var4[pos].unk_0_0; - MenuPrint(ewram0.words[pos], ewram0.var10C->var3_4 + x, ewram0.var10C->var3_0 + y); - y += 2; - } - - MenuPrint(ewram0.varD8, ewram0.varF9, ewram0.var10C->var1); -} - -static void sub_80F8F18(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -static void sub_80F8F2C(void) -{ - if (ewram0.varFB != 0) - { - AnimateSprites(); - BuildOamBuffer(); - } - - ewram0.varF0(); -} - -static void sub_80F8F58(void) -{ - u8 local0; - - local0 = UpdatePaletteFade(); - if (local0 == 0) - { - ewram0.varF0 = sub_80F8F78; - } -} - -static void sub_80F8F78(void) -{ - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - ewram0.varF0 = sub_80F8FB4; - } -} - -static void sub_80F8FB4(void) -{ - u16 local1; - - if (UpdatePaletteFade()) - { - return; - } - - SetMainCallback2(ewram0.varEC); - switch (ewram0.varFB) - { - case 2: - case 1: - local1 = sub_809D4A8(ewram0.varF4->species); - sub_809D608(local1); - - sub_809D510(&gSprites[ewram0.varFC]); - break; - } - - memset(&ewram0, 0, 0x110); - ResetPaletteFade(); -} diff --git a/src/mail_data.c b/src/mail_data.c deleted file mode 100644 index ae3f4b3e8..000000000 --- a/src/mail_data.c +++ /dev/null @@ -1,208 +0,0 @@ -#include "global.h" -#include "mail_data.h" -#include "items.h" -#include "name_string_util.h" -#include "pokemon.h" -#include "pokemon_icon.h" -#include "species.h" -#include "text.h" - -void ClearMailData(void) -{ - u8 i; - - for (i = 0; i < 16; i++) - ClearMailStruct(&gSaveBlock1.mail[i]); -} - -void ClearMailStruct(struct MailStruct *mail) -{ - int i; - - for (i = 0; i < 9; i++) - mail->words[i] = -1; - - for (i = 0; i < 8; i++) - mail->playerName[i] = -1; - - for (i = 0; i < 4; i++) - mail->trainerId[i] = 0; - - mail->species = 1; - mail->itemId = 0; -} - -bool8 MonHasMail(struct Pokemon *mon) -{ - u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM); - if (ItemIsMail(heldItem) && GetMonData(mon, MON_DATA_MAIL) != 0xFF) - return TRUE; - else - return FALSE; -} - -u8 GiveMailToMon(struct Pokemon *mon, u16 itemId) -{ - u16 _itemId; - u8 heldItem[2]; - u8 id; - u8 i; - u16 species; - u32 personality; - - _itemId = itemId; - heldItem[0] = _itemId; - heldItem[1] = _itemId >> 8; - id = 0; - - while (id < 6) - { - if (gSaveBlock1.mail[id].itemId == 0) - { - for (i = 0; i < 9; i++) - gSaveBlock1.mail[id].words[i] = -1; - - for (i = 0; i < 7; i++) - gSaveBlock1.mail[id].playerName[i] = gSaveBlock2.playerName[i]; - gSaveBlock1.mail[id].playerName[i] = EOS; - PadNameString(gSaveBlock1.mail[id].playerName, 0); - - for (i = 0; i < 4; i++) - gSaveBlock1.mail[id].trainerId[i] = gSaveBlock2.playerTrainerId[i]; - - species = GetBoxMonData(&mon->box, MON_DATA_SPECIES); - personality = GetBoxMonData(&mon->box, MON_DATA_PERSONALITY); - gSaveBlock1.mail[id].species = SpeciesToMailSpecies(species, personality); - gSaveBlock1.mail[id].itemId = _itemId; - SetMonData(mon, MON_DATA_MAIL, &id); - SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); - return id; - } - id++; - } - - return -1; -} - -u16 SpeciesToMailSpecies(u16 species, u32 personality) -{ - if (species == SPECIES_UNOWN) - { - int mailSpecies = GetUnownLetterByPersonality(personality) + 30000; - return mailSpecies; - } - - return species; -} - -u16 MailSpeciesToSpecies(u16 a1, u16 *a2) -{ - u16 result; - - if (a1 >= 30000 && a1 < (30000 + UNOWN_FORM_COUNT)) - { - result = SPECIES_UNOWN; - *a2 = a1 - 30000; - } - else - { - result = a1; - } - - return result; -} - -u8 GiveMailToMon2(struct Pokemon *mon, struct MailStruct *mail) -{ - u8 heldItem[2]; - u16 itemId = mail->itemId; - u8 mailId = GiveMailToMon(mon, itemId); - - if (mailId == 0xFF) - return 0xFF; - - gSaveBlock1.mail[mailId] = *mail; - - SetMonData(mon, MON_DATA_MAIL, &mailId); - - heldItem[0] = itemId; - heldItem[1] = itemId >> 8; - - SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); - - return mailId; -} - -int unref_sub_80A2DF4(void) -{ - return 0; -} - -void TakeMailFromMon(struct Pokemon *mon) -{ - u8 heldItem[2]; - u8 mailId; - - if (MonHasMail(mon)) - { - mailId = GetMonData(mon, MON_DATA_MAIL); - gSaveBlock1.mail[mailId].itemId = 0; - mailId = 0xFF; - heldItem[0] = 0; - heldItem[1] = 0; - SetMonData(mon, MON_DATA_MAIL, &mailId); - SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); - } -} - -void DeleteMail(u8 mailId) -{ - gSaveBlock1.mail[mailId].itemId = 0; -} - -u8 TakeMailFromMon2(struct Pokemon *mon) -{ - u8 i; - u8 newHeldItem[2]; - u8 newMailId; - - newHeldItem[0] = 0; - newHeldItem[1] = 0; - newMailId = 0xFF; - - for (i = 6; i < 16; i++) - { - if (gSaveBlock1.mail[i].itemId == 0) - { - memcpy(&gSaveBlock1.mail[i], &gSaveBlock1.mail[GetMonData(mon, MON_DATA_MAIL)], sizeof(struct MailStruct)); - gSaveBlock1.mail[GetMonData(mon, MON_DATA_MAIL)].itemId = 0; - SetMonData(mon, MON_DATA_MAIL, &newMailId); - SetMonData(mon, MON_DATA_HELD_ITEM, newHeldItem); - return i; - } - } - - return 0xFF; -} - -bool8 ItemIsMail(u16 itemId) -{ - switch (itemId) - { - case ITEM_ORANGE_MAIL: - case ITEM_HARBOR_MAIL: - case ITEM_GLITTER_MAIL: - case ITEM_MECH_MAIL: - case ITEM_WOOD_MAIL: - case ITEM_WAVE_MAIL: - case ITEM_BEAD_MAIL: - case ITEM_SHADOW_MAIL: - case ITEM_TROPIC_MAIL: - case ITEM_DREAM_MAIL: - case ITEM_FAB_MAIL: - case ITEM_RETRO_MAIL: - return TRUE; - default: - return FALSE; - } -} diff --git a/src/main.c b/src/main.c deleted file mode 100644 index afaa0e77a..000000000 --- a/src/main.c +++ /dev/null @@ -1,363 +0,0 @@ -#include "global.h" -#include "gba/flash_internal.h" -#include "gba/m4a_internal.h" -#include "main.h" -#include "intro.h" -#include "link.h" -#include "load_save.h" -#include "m4a.h" -#include "play_time.h" -#include "rng.h" -#include "rom3.h" -#include "rom4.h" -#include "rtc.h" -#include "siirtc.h" -#include "sound.h" -#include "unknown_task.h" - -extern struct SoundInfo gSoundInfo; -extern u32 IntrMain[]; - -static void VBlankIntr(void); -static void HBlankIntr(void); -static void VCountIntr(void); -static void SerialIntr(void); -static void IntrDummy(void); - -#ifdef SAPPHIRE -#define GAME_VERSION VERSION_SAPPHIRE -#else -#define GAME_VERSION VERSION_RUBY -#endif - -const u8 gGameVersion = GAME_VERSION; - -const u8 gGameLanguage = GAME_LANGUAGE; - -#if defined(ENGLISH) -const char BuildDateTime[] = "2002 10 15 20:34"; -#elif defined(GERMAN) -const char BuildDateTime[] = "$Name: debug-Euro-2003-05-09-A $"; -#endif - -const IntrFunc gIntrTableTemplate[] = -{ - SerialIntr, // Serial interrupt - Timer3Intr, // Timer 3 interrupt - HBlankIntr, // H-blank interrupt - VBlankIntr, // V-blank interrupt - VCountIntr, // V-count interrupt - IntrDummy, // Timer 0 interrupt - IntrDummy, // Timer 1 interrupt - IntrDummy, // Timer 2 interrupt - IntrDummy, // DMA 0 interrupt - IntrDummy, // DMA 1 interrupt - IntrDummy, // DMA 2 interrupt - IntrDummy, // DMA 3 interrupt - IntrDummy, // Key interrupt - IntrDummy, // Game Pak interrupt -}; - -#define INTR_COUNT ((int)(sizeof(gIntrTableTemplate)/sizeof(IntrFunc))) - -u16 gKeyRepeatStartDelay; -bool8 gLinkTransferringData; -struct Main gMain; -u16 gKeyRepeatContinueDelay; -u8 gSoftResetDisabled; -IntrFunc gIntrTable[INTR_COUNT]; -bool8 gLinkVSyncDisabled; -u32 IntrMain_Buffer[0x200]; -u8 gPcmDmaCounter; - -EWRAM_DATA void (**gFlashTimerIntrFunc)(void) = NULL; - -static void UpdateLinkAndCallCallbacks(void); -static void InitMainCallbacks(void); -static void CallCallbacks(void); -static void SeedRngWithRtc(void); -static void ReadKeys(void); -static void InitIntrHandlers(void); -static void WaitForVBlank(void); - -#define B_START_SELECT (B_BUTTON | START_BUTTON | SELECT_BUTTON) - -void AgbMain() -{ - RegisterRamReset(RESET_ALL); - REG_WAITCNT = WAITCNT_PREFETCH_ENABLE | WAITCNT_WS0_S_1 | WAITCNT_WS0_N_3; - InitKeys(); - InitIntrHandlers(); - m4aSoundInit(); - RtcInit(); - CheckForFlashMemory(); - InitMainCallbacks(); - InitMapMusic(); - SeedRngWithRtc(); - - gSoftResetDisabled = FALSE; - - if (gFlashMemoryPresent != TRUE) - SetMainCallback2(NULL); - - gLinkTransferringData = FALSE; - - for (;;) - { - ReadKeys(); - - if (gSoftResetDisabled == FALSE - && (gMain.heldKeysRaw & A_BUTTON) - && (gMain.heldKeysRaw & B_START_SELECT) == B_START_SELECT) - DoSoftReset(); - - if (gLink.sendQueue.count > 1 && sub_8055910() == 1) - { - gLinkTransferringData = TRUE; - UpdateLinkAndCallCallbacks(); - gLinkTransferringData = FALSE; - } - else - { - gLinkTransferringData = FALSE; - UpdateLinkAndCallCallbacks(); - - if (gLink.recvQueue.count > 1) - { - if (sub_80558AC() == 1) - { - gMain.newKeys = 0; - gLinkTransferringData = TRUE; - UpdateLinkAndCallCallbacks(); - gLinkTransferringData = FALSE; - } - } - } - - PlayTimeCounter_Update(); - MapMusicMain(); - WaitForVBlank(); - } -} - -static void UpdateLinkAndCallCallbacks(void) -{ - gLinkStatus = LinkMain1(&gShouldAdvanceLinkState, gSendCmd, gRecvCmds); - LinkMain2(&gMain.heldKeys); - if (!(gLinkStatus & LINK_STAT_RECEIVED_NOTHING) || sub_8055940() != 1) - CallCallbacks(); -} - -static void InitMainCallbacks(void) -{ - gMain.vblankCounter1 = 0; - gMain.vblankCounter2 = 0; - gMain.callback1 = NULL; - SetMainCallback2(CB2_InitCopyrightScreenAfterBootup); -} - -static void CallCallbacks(void) -{ - if (gMain.callback1) - gMain.callback1(); - - if (gMain.callback2) - gMain.callback2(); -} - -void SetMainCallback2(MainCallback callback) -{ - gMain.callback2 = callback; - gMain.state = 0; -} - -static void SeedRngWithRtc(void) -{ - u32 seed = RtcGetMinuteCount(); - seed = (seed >> 16) ^ (seed & 0xFFFF); - SeedRng(seed); -} - -void InitKeys(void) -{ - gKeyRepeatContinueDelay = 5; - gKeyRepeatStartDelay = 40; - - gMain.heldKeys = 0; - gMain.newKeys = 0; - gMain.newAndRepeatedKeys = 0; - gMain.heldKeysRaw = 0; - gMain.newKeysRaw = 0; -} - -static void ReadKeys(void) -{ - u16 keyInput = REG_KEYINPUT ^ KEYS_MASK; - gMain.newKeysRaw = keyInput & ~gMain.heldKeysRaw; - gMain.newKeys = gMain.newKeysRaw; - gMain.newAndRepeatedKeys = gMain.newKeysRaw; - - // BUG: Key repeat won't work when pressing L using L=A button mode - // because it compares the raw key input with the remapped held keys. - // Note that newAndRepeatedKeys is never remapped either. - - if (keyInput != 0 && gMain.heldKeys == keyInput) - { - gMain.keyRepeatCounter--; - - if (gMain.keyRepeatCounter == 0) - { - gMain.newAndRepeatedKeys = keyInput; - gMain.keyRepeatCounter = gKeyRepeatContinueDelay; - } - } - else - { - // If there is no input or the input has changed, reset the counter. - gMain.keyRepeatCounter = gKeyRepeatStartDelay; - } - - gMain.heldKeysRaw = keyInput; - gMain.heldKeys = gMain.heldKeysRaw; - - // Remap L to A if the L=A option is enabled. - if (gSaveBlock2.optionsButtonMode == 2) - { - if (gMain.newKeys & L_BUTTON) - gMain.newKeys |= A_BUTTON; - - if (gMain.heldKeys & L_BUTTON) - gMain.heldKeys |= A_BUTTON; - } - - if (gMain.newKeys & gMain.watchedKeysMask) - gMain.watchedKeysPressed = TRUE; -} - -static void InitIntrHandlers(void) -{ - int i; - - for (i = 0; i < INTR_COUNT; i++) - gIntrTable[i] = gIntrTableTemplate[i]; - - DmaCopy32(3, IntrMain, IntrMain_Buffer, sizeof(IntrMain_Buffer)); - - INTR_VECTOR = IntrMain_Buffer; - - SetVBlankCallback(NULL); - SetHBlankCallback(NULL); - SetSerialCallback(NULL); - - REG_IME = 1; - REG_IE = INTR_FLAG_VBLANK; - REG_DISPSTAT = DISPSTAT_VBLANK_INTR; - REG_IE |= INTR_FLAG_VBLANK; -} - -void SetVBlankCallback(IntrCallback callback) -{ - gMain.vblankCallback = callback; -} - -void SetHBlankCallback(IntrCallback callback) -{ - gMain.hblankCallback = callback; -} - -void SetVCountCallback(IntrCallback callback) -{ - gMain.vcountCallback = callback; -} - -void SetSerialCallback(IntrCallback callback) -{ - gMain.serialCallback = callback; -} - -static void VBlankIntr(void) -{ - u16 savedIme; - - if (!gLinkVSyncDisabled) - LinkVSync(); - - savedIme = REG_IME; - REG_IME = 0; - m4aSoundVSync(); - REG_IME = savedIme; - - gMain.vblankCounter1++; - - if (gMain.vblankCallback) - gMain.vblankCallback(); - - gMain.vblankCounter2++; - - gPcmDmaCounter = gSoundInfo.pcmDmaCounter; - - m4aSoundMain(); - sub_800C35C(); - Random(); - - INTR_CHECK |= INTR_FLAG_VBLANK; - gMain.intrCheck |= INTR_FLAG_VBLANK; -} - -void InitFlashTimer(void) -{ - SetFlashTimerIntr(2, gFlashTimerIntrFunc); -} - -static void HBlankIntr(void) -{ - if (gMain.hblankCallback) - gMain.hblankCallback(); - - INTR_CHECK |= INTR_FLAG_HBLANK; - gMain.intrCheck |= INTR_FLAG_HBLANK; -} - -static void VCountIntr(void) -{ - if (gMain.vcountCallback) - gMain.vcountCallback(); - - INTR_CHECK |= INTR_FLAG_VCOUNT; - gMain.intrCheck |= INTR_FLAG_VCOUNT; -} - -static void SerialIntr(void) -{ - if (gMain.serialCallback) - gMain.serialCallback(); - - INTR_CHECK |= INTR_FLAG_SERIAL; - gMain.intrCheck |= INTR_FLAG_SERIAL; -} - -static void IntrDummy(void) -{} - -static void WaitForVBlank(void) -{ - gMain.intrCheck &= ~INTR_FLAG_VBLANK; - VBlankIntrWait(); -} - -void DoSoftReset(void) -{ - REG_IME = 0; - m4aSoundVSyncOff(); - remove_some_task(); - DmaStop(1); - DmaStop(2); - DmaStop(3); - SiiRtcProtect(); - SoftReset(RESET_ALL); -} - -void ClearPokemonCrySongs(void) -{ - CpuFill16(0, gPokemonCrySongs, MAX_POKEMON_CRIES * sizeof(struct PokemonCrySong)); -} diff --git a/src/main_menu.c b/src/main_menu.c deleted file mode 100644 index 09fd06d9e..000000000 --- a/src/main_menu.c +++ /dev/null @@ -1,1639 +0,0 @@ -#include "global.h" -#include "main_menu.h" -#include "data2.h" -#include "decompress.h" -#include "event_data.h" -#include "field_effect.h" -#include "menu.h" -#include "mystery_event_menu.h" -#include "naming_screen.h" -#include "option_menu.h" -#include "palette.h" -#include "pokeball.h" -#include "rom4.h" -#include "rtc.h" -#include "save_menu_util.h" -#include "songs.h" -#include "sound.h" -#include "species.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "text.h" -#include "title_screen.h" -#include "unknown_task.h" - -#define BirchSpeechUpdateWindowText() ((u8)MenuUpdateWindowText_OverrideLineLength(24)) - -extern struct PaletteFadeControl gPaletteFade; - -extern u16 gSaveFileStatus; - -extern u16 gMainMenuPalette[]; - -extern const u8 gBirchSpeech_Welcome[]; -extern const u8 gBirchSpeech_ThisIsPokemon[]; -extern const u8 gBirchSpeech_WorldInhabitedByPokemon[]; -extern const u8 gBirchSpeech_AndYouAre[]; -extern const u8 gBirchSpeech_AreYouBoyOrGirl[]; -extern const u8 gBirchSpeech_WhatsYourName[]; -extern u8 gBirchSpeech_SoItsPlayer[]; -extern u8 gBirchSpeech_AhOkayYouArePlayer[]; -extern u8 gBirchSpeech_AreYouReady[]; - -extern struct SpriteTemplate gUnknown_02024E8C; -extern u16 gUnknown_081E795C[]; -extern const struct MenuAction gUnknown_081E79B0[]; -extern const struct MenuAction gMalePresetNames[]; -extern const struct MenuAction gFemalePresetNames[]; - -extern const u8 gUnknown_081E764C[]; -extern const u8 gBirchIntroShadowGfx[]; -extern const u8 gUnknown_081E7834[]; -extern const u8 gUnknown_081E796C[]; - -extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E79AC[]; - -extern u8 unk_2000000[]; - -//Task data -enum { - TD_MENULAYOUT, - TD_SELECTEDMENUITEM, -}; - -//Menu layouts -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); -static u32 InitMainMenu(bool8 a1); -static void Task_MainMenuCheckSave(u8 taskId); -static void Task_MainMenuWaitForSaveErrorAck(u8 taskId); -static void Task_MainMenuCheckRtc(u8 taskId); -static void Task_MainMenuWaitForRtcErrorAck(u8 taskId); -static void Task_MainMenuDraw(u8 taskId); -static void Task_MainMenuHighlight(u8 taskId); -static bool8 MainMenuProcessKeyInput(u8 taskId); -static void Task_MainMenuProcessKeyInput(u8 taskId); -static void Task_MainMenuPressedA(u8 taskId); -static void Task_MainMenuPressedB(u8 taskId); -static void HighlightCurrentMenuItem(u8 layout, u8 menuItem); -static void PrintMainMenuItem(const u8 *text, u8 left, u8 top); -static void PrintSaveFileInfo(void); -static void PrintPlayerName(void); -static void PrintPlayTime(void); -static void PrintPokedexCount(void); -static void PrintBadgeCount(void); -static void Task_NewGameSpeech1(u8 taskId); -static void Task_NewGameSpeech2(u8 taskId); -static void Task_NewGameSpeech3(u8 taskId); -static void Task_NewGameSpeech4(u8 taskId); -static void Task_NewGameSpeech5(u8 taskId); -static void Task_NewGameSpeech6(u8 taskId); -static void Task_NewGameSpeech7(u8 taskId); -static void Task_NewGameSpeech8(u8 taskId); -static void Task_NewGameSpeech9(u8 taskId); -static void Task_NewGameSpeech10(u8 taskId); -static void Task_NewGameSpeech11(u8 taskId); -static void Task_NewGameSpeech12(u8 taskId); -static void Task_NewGameSpeech13(u8 taskId); -static void Task_NewGameSpeech14(u8 taskId); -static void Task_NewGameSpeech15(u8 taskId); -static void Task_NewGameSpeech16(u8 taskId); -static void Task_NewGameSpeech17(u8 taskId); -static void Task_NewGameSpeech18(u8 taskId); -static void Task_NewGameSpeech19(u8 taskId); -static void Task_NewGameSpeech20(u8 taskId); -static void Task_NewGameSpeech21(u8 taskId); -static void Task_NewGameSpeech22(u8 taskId); -static void Task_NewGameSpeech23(u8 taskId); -static void Task_NewGameSpeech24(u8 taskId); -static void Task_NewGameSpeech25(u8 taskId); -static void Task_NewGameSpeech26(u8 taskId); -static void Task_NewGameSpeech27(u8 taskId); -static void Task_NewGameSpeech28(u8 taskId); -static void Task_NewGameSpeech29(u8 taskId); -static void Task_NewGameSpeech30(u8 taskId); -static void Task_NewGameSpeech31(u8 taskId); -static void Task_NewGameSpeech32(u8 taskId); -static void Task_NewGameSpeech33(u8 taskId); -static void CB_ContinueNewGameSpeechPart2(); -static void nullsub_34(struct Sprite *sprite); -static void ShrinkPlayerSprite(struct Sprite *sprite); -static u8 CreateAzurillSprite(u8 x, u8 y); -static void AddBirchSpeechObjects(u8 taskId); -static void Task_SpriteFadeOut(u8 taskId); -static void StartSpriteFadeOut(u8 taskId, u8 interval); -static void Task_SpriteFadeIn(u8 taskId); -static void StartSpriteFadeIn(u8 taskId, u8 interval); -static void HandleFloorShadowFadeOut(u8 taskId); -static void StartBackgroundFadeOut(u8 taskId, u8 interval); -static void HandleFloorShadowFadeIn(u8 taskId); -static void StartBackgroundFadeIn(u8 taskId, u8 interval); -static void CreateGenderMenu(u8 left, u8 top); -static s8 GenderMenuProcessInput(void); -static void CreateNameMenu(u8 left, u8 top); -static s8 NameMenuProcessInput(void); -static void SetPresetPlayerName(u8 index); - -static void CB2_MainMenu(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void VBlankCB_MainMenu(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -void CB2_InitMainMenu(void) -{ - InitMainMenu(FALSE); -} - -static void CB2_InitMainMenuFromOptions(void) -{ - InitMainMenu(TRUE); -} - -u32 InitMainMenu(u8 a1) -{ - u16 savedIme; - u8 taskId; - - SetVBlankCallback(NULL); - - REG_DISPCNT = 0; - REG_BG2CNT = 0; - REG_BG1CNT = 0; - REG_BG0CNT = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - - DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); - DmaFill32(3, 0, (void *)OAM, OAM_SIZE); - DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2); - - ResetPaletteFade(); - LoadPalette(gMainMenuPalette, 0, 32); - remove_some_task(); - ResetTasks(); - ResetSpriteData(); - FreeAllSpritePalettes(); - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow((struct WindowConfig *)&gWindowConfig_81E6CE4); - - if (a1) - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0x0000); // fade to black - else - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0xFFFF); // fade to white - - REG_WIN0H = 0; - REG_WIN0V = 0; - REG_WININ = 0; - REG_WINOUT = 0; - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - - savedIme = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = savedIme; - - SetVBlankCallback(VBlankCB_MainMenu); - SetMainCallback2(CB2_MainMenu); - - REG_DISPCNT = DISPCNT_MODE_0 - | DISPCNT_OBJ_1D_MAP - | DISPCNT_BG0_ON - | DISPCNT_OBJ_ON - | DISPCNT_WIN0_ON; - - taskId = CreateTask(Task_MainMenuCheckSave, 0); - gTasks[taskId].data[TD_SELECTEDMENUITEM] = 0; - - return 0; -} - -void Task_MainMenuCheckSave(u8 taskId) -{ - if (gPaletteFade.active) - return; - - REG_WIN0H = 0; - REG_WIN0V = 0; - REG_WININ = 0x1111; - REG_WINOUT = 49; - REG_BLDCNT = 241; - REG_BLDALPHA = 0; - REG_BLDY = 7; - - switch (gSaveFileStatus) - { - case 1: - if (IsMysteryGiftEnabled() == TRUE) - gTasks[taskId].data[TD_MENULAYOUT] = HAS_MYSTERY_GIFT; - else - gTasks[taskId].data[TD_MENULAYOUT] = HAS_SAVED_GAME; - - gTasks[taskId].func = Task_MainMenuCheckRtc; - break; - case 2: - MenuDrawTextWindow(2, 14, 27, 19); - 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].func = Task_MainMenuWaitForSaveErrorAck; - break; - case 255: - MenuDrawTextWindow(2, 14, 27, 19); - 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].func = Task_MainMenuWaitForSaveErrorAck; - - if (IsMysteryGiftEnabled() == TRUE) - gTasks[taskId].data[TD_MENULAYOUT] = HAS_MYSTERY_GIFT; - else - gTasks[taskId].data[TD_MENULAYOUT] = HAS_SAVED_GAME; - break; - case 0: - default: - gTasks[taskId].data[TD_MENULAYOUT] = HAS_NO_SAVED_GAME; - gTasks[taskId].func = Task_MainMenuCheckRtc; - break; - case 4: - MenuDrawTextWindow(2, 14, 27, 19); - 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].func = Task_MainMenuWaitForSaveErrorAck; - return; - } -} - -void Task_MainMenuWaitForSaveErrorAck(u8 taskId) -{ - if (MenuUpdateWindowText()) - { - if (gMain.newKeys & A_BUTTON) - { - MenuZeroFillWindowRect(2, 14, 27, 19); - gTasks[taskId].func = Task_MainMenuCheckRtc; - } - } -} - -void Task_MainMenuCheckRtc(u8 taskId) -{ - if (!gPaletteFade.active) - { - REG_WIN0H = 0; - REG_WIN0V = 0; - REG_WININ = 0x1111; - REG_WINOUT = 49; - REG_BLDCNT = 241; - REG_BLDALPHA = 0; - REG_BLDY = 7; - - if (!(RtcGetErrorStatus() & RTC_ERR_FLAG_MASK)) - { - gTasks[taskId].func = Task_MainMenuDraw; - } - else - { - MenuDrawTextWindow(2, 14, 27, 19); - MenuPrintMessage(gBatteryDryMessage, 3, 15); - REG_WIN0H = WIN_RANGE(17, 223); - REG_WIN0V = WIN_RANGE(113, 159); - gTasks[taskId].func = Task_MainMenuWaitForRtcErrorAck; - } - } -} - -void Task_MainMenuWaitForRtcErrorAck(u8 taskId) -{ - if (MenuUpdateWindowText()) - { - if ( gMain.newKeys & 1 ) - { - MenuZeroFillWindowRect(2, 14, 27, 19); - gTasks[taskId].func = Task_MainMenuDraw; - } - } -} - -void Task_MainMenuDraw(u8 taskId) -{ - u16 palette; - - if (!gPaletteFade.active) - { - REG_WIN0H = 0; - REG_WIN0V = 0; - REG_WININ = 0x1111; - REG_WINOUT = 49; - REG_BLDCNT = 241; - REG_BLDALPHA = 0; - REG_BLDY = 7; - - palette = RGB(0, 0, 0); - LoadPalette(&palette, 254, 2); - - if (gSaveBlock2.playerGender == MALE) - { - palette = RGB(4, 16, 31); - LoadPalette(&palette, 241, 2); - } - else - { - palette = RGB(31, 3, 21); - LoadPalette(&palette, 241, 2); - } - - switch (gTasks[taskId].data[TD_MENULAYOUT]) - { - case HAS_NO_SAVED_GAME: - default: - MenuDrawTextWindow(1, 0, 28, 3); - PrintMainMenuItem(gMainMenuString_NewGame, 2, 1); - MenuDrawTextWindow(1, 4, 28, 7); - PrintMainMenuItem(gMainMenuString_Option, 2, 5); - break; - case HAS_SAVED_GAME: - MenuDrawTextWindow(1, 0, 28, 7); - PrintMainMenuItem(gMainMenuString_Continue, 2, 1); - MenuDrawTextWindow(1, 8, 28, 11); - PrintMainMenuItem(gMainMenuString_NewGame, 2, 9); - MenuDrawTextWindow(1, 12, 28, 15); - PrintMainMenuItem(gMainMenuString_Option, 2, 13); - PrintSaveFileInfo(); - break; - case HAS_MYSTERY_GIFT: - MenuDrawTextWindow(1, 0, 28, 7); - PrintMainMenuItem(gMainMenuString_Continue, 2, 1); - MenuDrawTextWindow(1, 8, 28, 11); - PrintMainMenuItem(gMainMenuString_NewGame, 2, 9); - MenuDrawTextWindow(1, 12, 28, 15); - PrintMainMenuItem(gMainMenuString_MysteryEvents, 2, 13); - MenuDrawTextWindow(1, 16, 28, 19); - PrintMainMenuItem(gMainMenuString_Option, 2, 0x11); - PrintSaveFileInfo(); - break; - } - - gTasks[taskId].func = Task_MainMenuHighlight; - } -} - -void Task_MainMenuHighlight(u8 taskId) -{ - HighlightCurrentMenuItem(gTasks[taskId].data[TD_MENULAYOUT], gTasks[taskId].data[TD_SELECTEDMENUITEM]); - gTasks[taskId].func = Task_MainMenuProcessKeyInput; -} - -bool8 MainMenuProcessKeyInput(u8 taskId) -{ - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0x0000); - gTasks[taskId].func = Task_MainMenuPressedA; - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0xFFFF); - REG_WIN0H = WIN_RANGE(0, 240); - REG_WIN0V = WIN_RANGE(0, 160); - gTasks[taskId].func = Task_MainMenuPressedB; - } - else - { - s32 menuItemCount; - - switch (gTasks[taskId].data[TD_MENULAYOUT]) - { - case HAS_NO_SAVED_GAME: - default: - menuItemCount = 2; - break; - case HAS_SAVED_GAME: - menuItemCount = 3; - break; - case HAS_MYSTERY_GIFT: - menuItemCount = 4; - break; - } - - if (gMain.newKeys & DPAD_UP) - { - if (gTasks[taskId].data[TD_SELECTEDMENUITEM] > 0) - { - gTasks[taskId].data[TD_SELECTEDMENUITEM]--; - return TRUE; - } - } - if (gMain.newKeys & DPAD_DOWN) - { - if (gTasks[taskId].data[TD_SELECTEDMENUITEM] < menuItemCount - 1) - { - gTasks[taskId].data[TD_SELECTEDMENUITEM]++; - return TRUE; - } - } - } - - return FALSE; -} - -void Task_MainMenuProcessKeyInput(u8 taskId) -{ - bool8 currentMenuItemChanged = MainMenuProcessKeyInput(taskId); - if (currentMenuItemChanged) - gTasks[taskId].func = Task_MainMenuHighlight; -} - -void Task_MainMenuPressedA(u8 taskId) -{ - enum - { - NEW_GAME, - CONTINUE, - OPTION, - MYSTERY_EVENTS, - } action; - - if (gPaletteFade.active) - return; - - switch (gTasks[taskId].data[TD_MENULAYOUT]) - { - case HAS_NO_SAVED_GAME: - default: - switch (gTasks[taskId].data[TD_SELECTEDMENUITEM]) - { - case 0: - default: - action = NEW_GAME; - break; - case 1: - action = OPTION; - break; - } - break; - case HAS_SAVED_GAME: - switch (gTasks[taskId].data[TD_SELECTEDMENUITEM]) - { - case 0: - default: - action = CONTINUE; - break; - case 1: - action = NEW_GAME; - break; - case 2: - action = OPTION; - break; - } - break; - case HAS_MYSTERY_GIFT: - switch (gTasks[taskId].data[TD_SELECTEDMENUITEM]) - { - case 0: - default: - action = CONTINUE; - break; - case 1: - action = NEW_GAME; - break; - case 2: - action = MYSTERY_EVENTS; - break; - case 3: - action = OPTION; - break; - } - break; - } - - switch ((int)action) - { - case NEW_GAME: - default: - gPlttBufferUnfaded[0] = 0; - gPlttBufferFaded[0] = 0; - gTasks[taskId].func = Task_NewGameSpeech1; - break; - case CONTINUE: - gPlttBufferUnfaded[0] = 0; - gPlttBufferFaded[0] = 0; - SetMainCallback2(CB2_ContinueSavedGame); - DestroyTask(taskId); - break; - case OPTION: - gMain.savedCallback = CB2_InitMainMenuFromOptions; - SetMainCallback2(CB2_InitOptionMenu); - DestroyTask(taskId); - break; - case MYSTERY_EVENTS: - SetMainCallback2(CB2_InitMysteryEventMenu); - DestroyTask(taskId); - break; - } -} - -void Task_MainMenuPressedB(u8 taskId) -{ - if (!gPaletteFade.active) - { - SetMainCallback2(CB2_InitTitleScreen); - DestroyTask(taskId); - } -} - -void HighlightCurrentMenuItem(u8 layout, u8 menuItem) -{ - REG_WIN0H = WIN_RANGE(9, 231); - - switch (layout) - { - case HAS_NO_SAVED_GAME: - default: - switch (menuItem) - { - case 0: - default: - REG_WIN0V = WIN_RANGE(1, 31); - break; - case 1: - REG_WIN0V = WIN_RANGE(33, 63); - break; - } - break; - case HAS_SAVED_GAME: - switch (menuItem) - { - case 0: - default: - REG_WIN0V = WIN_RANGE(1, 63); - break; - case 1: - REG_WIN0V = WIN_RANGE(65, 95); - break; - case 2: - REG_WIN0V = WIN_RANGE(97, 127); - break; - } - break; - case HAS_MYSTERY_GIFT: - switch (menuItem) - { - case 0: - default: - REG_WIN0V = WIN_RANGE(1, 63); - break; - case 1: - REG_WIN0V = WIN_RANGE(65, 95); - break; - case 2: - REG_WIN0V = WIN_RANGE(97, 127); - break; - case 3: - REG_WIN0V = WIN_RANGE(129, 159); - break; - } - break; - } -} - -void PrintMainMenuItem(const u8 *text, u8 left, u8 top) -{ - u8 i; - u8 buffer[32]; - - buffer[0] = 0xFC; - buffer[1] = 1; - buffer[2] = 14; - - for (i = 0; i < 26; i++) - buffer[3 + i] = text[i]; - - buffer[29] = EOS; - - MenuPrint(buffer, left, top); -} - -void PrintSaveFileInfo(void) -{ - PrintPlayerName(); - PrintPokedexCount(); - PrintPlayTime(); - PrintBadgeCount(); -} - -void PrintPlayerName(void) -{ - MenuPrint(gMainMenuString_Player, 2, 3); - MenuPrint(gSaveBlock2.playerName, 9, 3); -} - -void PrintPlayTime(void) -{ - u8 playTime[16]; - u8 alignedPlayTime[32]; - -#if defined(ENGLISH) - MenuPrint(gMainMenuString_Time, 16, 3); - FormatPlayTime(playTime, gSaveBlock2.playTimeHours, gSaveBlock2.playTimeMinutes, 1); - sub_8072C74(alignedPlayTime, playTime, 48, 1); - MenuPrint(alignedPlayTime, 22, 3); -#elif defined(GERMAN) - MenuPrint_PixelCoords(gMainMenuString_Time, 124, 24, TRUE); - FormatPlayTime(playTime, gSaveBlock2.playTimeHours, gSaveBlock2.playTimeMinutes, 1); - sub_8072C74(alignedPlayTime, playTime, 40, 1); - MenuPrint(alignedPlayTime, 23, 3); -#endif -} - -void PrintPokedexCount(void) -{ - u8 buffer[16]; - - MenuPrint(gMainMenuString_Pokedex, 2, 5); - sub_8072C14(buffer, GetPokedexSeenCount(), 18, 0); - MenuPrint(buffer, 9, 5); -} - -void PrintBadgeCount(void) -{ - u8 buffer[16]; - -#if defined(ENGLISH) - MenuPrint(gMainMenuString_Badges, 16, 5); -#elif defined(GERMAN) - MenuPrint_PixelCoords(gMainMenuString_Badges, 124, 40, TRUE); -#endif - ConvertIntToDecimalString(buffer, GetBadgeCount()); - MenuPrint_PixelCoords(buffer, 205, 40, 1); -} - -static void Task_NewGameSpeech1(u8 taskId) -{ - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow((struct WindowConfig *)&gWindowConfig_81E6CE4); - REG_WIN0H = 0; - REG_WIN0V = 0; - REG_WININ = 0; - REG_WINOUT = 0; - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - LZ77UnCompVram(gBirchIntroShadowGfx, (void *)BG_VRAM); - LZ77UnCompVram(gUnknown_081E7834, (void *)(BG_VRAM + 0x3800)); - LoadPalette(gUnknown_081E764C, 0, 0x40); - LoadPalette(gUnknown_081E796C, 1, 0x10); - remove_some_task(); - ResetSpriteData(); - FreeAllSpritePalettes(); - AddBirchSpeechObjects(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].func = Task_NewGameSpeech2; - gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = 0xFF; - gTasks[taskId].data[3] = 0xFF; - gTasks[taskId].data[TD_COUNTER] = 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) - { - gTasks[taskId].data[TD_COUNTER]--; - } - else - { - //Initialize Birch sprite - u8 spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; - - gSprites[spriteId].pos1.x = 136; - gSprites[spriteId].pos1.y = 60; - gSprites[spriteId].invisible = 0; - gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; - StartSpriteFadeIn(taskId, 10); - StartBackgroundFadeIn(taskId, 20); - gTasks[taskId].data[TD_COUNTER] = 80; - gTasks[taskId].func = Task_NewGameSpeech3; - } -} - -static void Task_NewGameSpeech3(u8 taskId) -{ - if (gTasks[taskId].data[TD_SUBTASK_DONE] != FALSE) - { - gSprites[gTasks[taskId].data[TD_BIRCH_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_NORMAL; - if (gTasks[taskId].data[TD_COUNTER]) - { - gTasks[taskId].data[TD_COUNTER]--; - } - else - { - MenuDrawTextWindow(2, 13, 27, 18); - //"Hi! Sorry to keep you waiting... - //...But everyone calls me the POKEMON PROFESSOR." - MenuPrintMessage(gBirchSpeech_Welcome, 3, 14); - gTasks[taskId].func = Task_NewGameSpeech4; - } - } -} - -static void Task_NewGameSpeech4(u8 taskId) -{ - if (!gPaletteFade.active && BirchSpeechUpdateWindowText()) - { - gTasks[taskId].func = Task_NewGameSpeech5; - //"This is what we call a POKEMON." - MenuPrintMessage(gBirchSpeech_ThisIsPokemon, 3, 14); - } -} - -static void Task_NewGameSpeech5(u8 taskId) -{ - if (BirchSpeechUpdateWindowText()) - gTasks[taskId].func = Task_NewGameSpeech6; -} - -static void Task_NewGameSpeech6(u8 taskId) -{ - u8 spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID]; - - gSprites[spriteId].pos1.x = 104; - gSprites[spriteId].pos1.y = 72; - gSprites[spriteId].invisible = 0; - 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; -} - -static void Task_NewGameSpeech7(u8 taskId) -{ - if (IsCryFinished()) - { - //Go on to next sentence after frame 95 - if (gTasks[taskId].data[TD_COUNTER] > 95) - { - MenuSetText(gSystemText_NewPara); - gTasks[taskId].func = Task_NewGameSpeech8; - } - } - - if (gTasks[taskId].data[TD_COUNTER] < 16384) - { - gTasks[taskId].data[TD_COUNTER]++; - //Play Azurill cry at frame 32 - if (gTasks[taskId].data[TD_COUNTER] == 32) - PlayCry1(SPECIES_AZURILL, 0); - } -} - -static void Task_NewGameSpeech8(u8 taskId) -{ - if (BirchSpeechUpdateWindowText()) - { - //"This world is widely inhabited by POKEMON... - //...That's what I do." - MenuPrintMessage(gBirchSpeech_WorldInhabitedByPokemon, 3, 14); - gTasks[taskId].func = Task_NewGameSpeech9; - } -} - -static void Task_NewGameSpeech9(u8 taskId) -{ - if (BirchSpeechUpdateWindowText()) - { - MenuDrawTextWindow(2, 13, 27, 18); - //"And you are?" - MenuPrintMessage(gBirchSpeech_AndYouAre, 3, 14); - gTasks[taskId].func = Task_NewGameSpeech10; - } -} - -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; - StartSpriteFadeOut(taskId, 2); - StartBackgroundFadeOut(taskId, 1); - gTasks[taskId].data[TD_COUNTER] = 64; - gTasks[taskId].func = Task_NewGameSpeech11; - } -} - -//Slide platform away to the right -static void Task_NewGameSpeech11(u8 taskId) -{ - if (gTasks[taskId].data[TD_BGHOFS] != -60) - { - gTasks[taskId].data[TD_BGHOFS] -= 2; - REG_BG1HOFS = gTasks[taskId].data[TD_BGHOFS]; - } - else - { - gTasks[taskId].data[TD_BGHOFS] = -60; - gTasks[taskId].func = Task_NewGameSpeech12; - } -} - -static void Task_NewGameSpeech12(u8 taskId) -{ - if (gTasks[taskId].data[TD_SUBTASK_DONE]) - { - //Hide Birch and Azurill - gSprites[gTasks[taskId].data[TD_BIRCH_SPRITE_ID]].invisible = TRUE; - gSprites[gTasks[taskId].data[TD_AZURILL_SPRITE_ID]].invisible = TRUE; - - if (gTasks[taskId].data[TD_COUNTER]) - { - gTasks[taskId].data[TD_COUNTER]--; - } - else - { - //Initialize Brendan sprite - u8 spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; - - 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; - StartSpriteFadeIn(taskId, 2); - StartBackgroundFadeIn(taskId, 1); - gTasks[taskId].func = Task_NewGameSpeech13; - } - } -} - -static void Task_NewGameSpeech13(u8 taskId) -{ - if (gTasks[taskId].data[TD_SUBTASK_DONE]) - { - gSprites[gTasks[taskId].data[TD_TRAINER_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_NORMAL; - gTasks[taskId].func = Task_NewGameSpeech14; - } -} - -static void Task_NewGameSpeech14(u8 taskId) -{ - MenuDrawTextWindow(2, 13, 27, 18); - //"Are you a boy? Or are you a girl?" - MenuPrintMessage(gBirchSpeech_AreYouBoyOrGirl, 3, 14); - gTasks[taskId].func = Task_NewGameSpeech15; -} - -static void Task_NewGameSpeech15(u8 taskId) -{ - if (BirchSpeechUpdateWindowText()) - { - CreateGenderMenu(2, 4); - gTasks[taskId].func = Task_NewGameSpeech16; - } -} - -//Process gender menu -static void Task_NewGameSpeech16(u8 taskId) -{ - u8 cursorPos; - - switch (GenderMenuProcessInput()) - { - case MALE: - HandleDestroyMenuCursors(); - PlaySE(SE_SELECT); - gSaveBlock2.playerGender = MALE; - MenuZeroFillWindowRect(2, 4, 8, 9); - gTasks[taskId].func = Task_NewGameSpeech19; - break; - case FEMALE: - HandleDestroyMenuCursors(); - PlaySE(SE_SELECT); - gSaveBlock2.playerGender = FEMALE; - MenuZeroFillWindowRect(2, 4, 8, 9); - gTasks[taskId].func = Task_NewGameSpeech19; - break; - } - - cursorPos = GetMenuCursorPos(); - - if (cursorPos != gTasks[taskId].data[TD_GENDER_SELECTION]) - { - //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; - StartSpriteFadeOut(taskId, 0); - gTasks[taskId].func = Task_NewGameSpeech17; - } -} - -//Slide old trainer sprite off right of screen -static void Task_NewGameSpeech17(u8 taskId) -{ - u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; - - if (gTasks[taskId].data[TD_SUBTASK_DONE] == FALSE) - { - gSprites[spriteId].pos1.x += 4; //Move sprite right - } - else - { - gSprites[spriteId].invisible = TRUE; - - //Set up new trainer sprite - if (gTasks[taskId].data[TD_GENDER_SELECTION]) - spriteId = gTasks[taskId].data[TD_MAY_SPRITE_ID]; - else - spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; - gSprites[spriteId].pos1.x = 240; - gSprites[spriteId].pos1.y = 60; - gSprites[spriteId].invisible = FALSE; - gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = spriteId; - gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; - StartSpriteFadeIn(taskId, 0); - gTasks[taskId].func = Task_NewGameSpeech18; - } -} - -//Slide new trainer sprite from right of screen -static void Task_NewGameSpeech18(u8 taskId) -{ - u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; - - if (gSprites[spriteId].pos1.x > 180) - { - gSprites[spriteId].pos1.x -= 4; //Move sprite left - } - else - { - gSprites[spriteId].pos1.x = 180; - if (gTasks[taskId].data[TD_SUBTASK_DONE]) - { - gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL; - gTasks[taskId].func = Task_NewGameSpeech16; //Go back to gender menu - } - } -} - -static void Task_NewGameSpeech19(u8 taskId) -{ - MenuDrawTextWindow(2, 13, 27, 18); - //"All right. What's your name?" - MenuPrintMessage(gBirchSpeech_WhatsYourName, 3, 14); - gTasks[taskId].func = Task_NewGameSpeech20; -} - -static void Task_NewGameSpeech20(u8 taskId) -{ - if (BirchSpeechUpdateWindowText()) - { - CreateNameMenu(2, 1); - gTasks[taskId].func = Task_NewGameSpeech21; - } -} - -//Handle name menu selection -static void Task_NewGameSpeech21(u8 taskId) -{ - s8 selection = NameMenuProcessInput(); - - switch (selection) - { - case 1: //preset names - case 2: - case 3: - case 4: - HandleDestroyMenuCursors(); - PlaySE(SE_SELECT); - MenuZeroFillWindowRect(2, 1, 22, 12); - SetPresetPlayerName(selection); - gTasks[taskId].func = Task_NewGameSpeech23; - break; - case 0: //NEW NAME - PlaySE(SE_SELECT); - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskId].func = Task_NewGameSpeech22; - break; - case -1: //B button - HandleDestroyMenuCursors(); - PlaySE(SE_SELECT); - MenuZeroFillWindowRect(2, 1, 22, 12); - gTasks[taskId].func = Task_NewGameSpeech14; //Go back to gender menu - break; - } -} - -//Open naming screen -static void Task_NewGameSpeech22(u8 taskId) -{ - if (!gPaletteFade.active) - { - SetPresetPlayerName(1); - DoNamingScreen(0, gSaveBlock2.playerName, gSaveBlock2.playerGender, 0, 0, CB_ContinueNewGameSpeechPart2); - } -} - -static void Task_NewGameSpeech23(u8 taskId) -{ - MenuDrawTextWindow(2, 13, 27, 18); - //"So it's (PLAYER)?" - StringExpandPlaceholders(gStringVar4, gBirchSpeech_SoItsPlayer); - MenuPrintMessage(gStringVar4, 3, 14); - gTasks[taskId].func = Task_NewGameSpeech24; -} - -static void Task_NewGameSpeech24(u8 taskId) -{ - if (BirchSpeechUpdateWindowText()) - { - DisplayYesNoMenu(2, 1, 1); - gTasks[taskId].func = Task_NewGameSpeech25; - } -} - -//Handle yes/no menu selection -static void Task_NewGameSpeech25(u8 taskId) -{ - switch (ProcessMenuInputNoWrap_()) - { - 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; - StartSpriteFadeOut(taskId, 2); - StartBackgroundFadeOut(taskId, 1); - gTasks[taskId].func = Task_NewGameSpeech26; //Continue - break; - case -1: //B button - case 1: //NO - PlaySE(SE_SELECT); - MenuZeroFillWindowRect(2, 1, 8, 7); - gTasks[taskId].func = Task_NewGameSpeech14; //Go back to gender menu - break; - } -} - -static void Task_NewGameSpeech26(u8 taskId) -{ - if (gTasks[taskId].data[TD_BGHOFS]) - { - gTasks[taskId].data[TD_BGHOFS] += 2; - REG_BG1HOFS = gTasks[taskId].data[TD_BGHOFS]; - } - else - { - gTasks[taskId].func = Task_NewGameSpeech27; - } -} - -static void Task_NewGameSpeech27(u8 taskId) -{ - if (gTasks[taskId].data[TD_SUBTASK_DONE]) - { - s16 spriteId; - - //Hide Brendan and May sprites - spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; - gSprites[spriteId].invisible = TRUE; - spriteId = gTasks[taskId].data[TD_MAY_SPRITE_ID]; - gSprites[spriteId].invisible = TRUE; - - //Fade in Birch and Azurill - spriteId = (u8)gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; - 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]; - gSprites[spriteId].pos1.x = 104; - gSprites[spriteId].pos1.y = 72; - gSprites[spriteId].invisible = FALSE; - gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; - - StartSpriteFadeIn(taskId, 2); - StartBackgroundFadeIn(taskId, 1); - MenuDrawTextWindow(2, 13, 27, 18); - StringExpandPlaceholders(gStringVar4, gBirchSpeech_AhOkayYouArePlayer); - //"Ah, okay! You're (PLAYER) who's moving... - //...I get it now!" - MenuPrintMessage(gStringVar4, 3, 14); - gTasks[taskId].func = Task_NewGameSpeech28; - } -} - -static void Task_NewGameSpeech28(u8 taskId) -{ - if (gTasks[taskId].data[TD_SUBTASK_DONE]) - { - s16 spriteId; - - spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; - gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL; - - spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID]; - gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL; - - if (BirchSpeechUpdateWindowText()) - { - //Fade out Birch and Azurill - spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; - gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; - spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID]; - gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; - - StartSpriteFadeOut(taskId, 2); - StartBackgroundFadeOut(taskId, 1); - gTasks[taskId].data[TD_COUNTER] = 64; - gTasks[taskId].func = Task_NewGameSpeech29; - } - } -} - -static void Task_NewGameSpeech29(u8 taskId) -{ - if (gTasks[taskId].data[TD_SUBTASK_DONE]) - { - s16 spriteId; - - //Hide Birch and Azurill - spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID]; - gSprites[spriteId].invisible = TRUE; - spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID]; - gSprites[spriteId].invisible = TRUE; - - if (gTasks[taskId].data[TD_COUNTER]) - { - gTasks[taskId].data[TD_COUNTER]--; - } - else - { - u8 spriteId; - - //Fade in trainer and background - if (gSaveBlock2.playerGender) - spriteId = (u8)gTasks[taskId].data[TD_MAY_SPRITE_ID]; - else - spriteId = (u8)gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; - 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; - - StartSpriteFadeIn(taskId, 2); - StartBackgroundFadeIn(taskId, 1); - MenuDrawTextWindow(2, 13, 27, 18); - MenuPrintMessage(gBirchSpeech_AreYouReady, 3, 14); - gTasks[taskId].func = Task_NewGameSpeech30; - } - } -} - -static void Task_NewGameSpeech30(u8 taskId) -{ - if (gTasks[taskId].data[TD_SUBTASK_DONE]) - { - s16 spriteId; - - spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; - gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL; - - if (BirchSpeechUpdateWindowText()) - { - u8 spriteId; - - spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; - gSprites[spriteId].oam.affineMode = 1; - gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E79AC; - InitSpriteAffineAnim(&gSprites[spriteId]); - StartSpriteAffineAnim(&gSprites[spriteId], 0); - gSprites[spriteId].callback = ShrinkPlayerSprite; - BeginNormalPaletteFade(0x0000FFFF, 0, 0, 0x10, 0); - FadeOutBGM(4); - gTasks[taskId].func = Task_NewGameSpeech31; - } - } -} - -static void Task_NewGameSpeech31(u8 taskId) -{ - u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; - - if (gSprites[spriteId].affineAnimEnded) - gTasks[taskId].func = Task_NewGameSpeech32; -} - -static void Task_NewGameSpeech32(u8 taskId) -{ - if (!gPaletteFade.active) - { - u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID]; - gSprites[spriteId].callback = nullsub_34; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON; - BeginNormalPaletteFade(0xFFFF0000, 0, 0, 0x10, 0xFFFF); - gTasks[taskId].func = Task_NewGameSpeech33; - } -} - -static void Task_NewGameSpeech33(u8 taskId) -{ - if (!gPaletteFade.active) - { - //We're finished setting up. Start the new game! - SetMainCallback2(CB2_NewGame); - DestroyTask(taskId); - } -} - -// Re-initializes graphics state after running the naming screen -// and continues the new game speech -void CB_ContinueNewGameSpeechPart2() -{ - u8 taskId; - u8 spriteId; - u16 savedIme; - - SetVBlankCallback(NULL); - - REG_DISPCNT = 0; - REG_BG2CNT = 0; - REG_BG1CNT = 0; - REG_BG0CNT = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - - DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); - DmaFill32(3, 0, (void *)OAM, OAM_SIZE); - DmaFill16(3, 0, (void *)PLTT, PLTT_SIZE); - - ResetPaletteFade(); - - LZ77UnCompVram(gBirchIntroShadowGfx, (void *)BG_VRAM); - LZ77UnCompVram(gUnknown_081E7834, (void *)(BG_VRAM + 0x3800)); - - LoadPalette(gUnknown_081E764C, 0, 0x40); - - ResetTasks(); - - taskId = CreateTask(Task_NewGameSpeech23, 0); - - gTasks[taskId].data[TD_BGHOFS] = -60; - - remove_some_task(); - ResetSpriteData(); - FreeAllSpritePalettes(); - AddBirchSpeechObjects(taskId); - - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow((struct WindowConfig *)&gWindowConfig_81E6CE4); - - if (gSaveBlock2.playerGender != MALE) - { - gTasks[taskId].data[TD_GENDER_SELECTION] = FEMALE; - spriteId = gTasks[taskId].data[TD_MAY_SPRITE_ID]; - } - else - { - gTasks[taskId].data[TD_GENDER_SELECTION] = MALE; - spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID]; - } - - gSprites[spriteId].pos1.x = 180; - gSprites[spriteId].pos1.y = 60; - gSprites[spriteId].invisible = FALSE; - - gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = spriteId; - - REG_BG1HOFS = -60; - - BeginNormalPaletteFade(0xFFFFFFFFu, 0, 0x10, 0, 0); - - REG_WIN0H = 0; - REG_WIN0V = 0; - REG_WININ = 0; - REG_WINOUT = 0; - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - - savedIme = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = savedIme; - - SetVBlankCallback(VBlankCB_MainMenu); - SetMainCallback2(CB2_MainMenu); - REG_BG1CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | - DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; -} - -void nullsub_34(struct Sprite *sprite) -{ -} - -void ShrinkPlayerSprite(struct Sprite *sprite) -{ - u32 y = (sprite->pos1.y << 16) + sprite->data0 + 0xC000; - sprite->pos1.y = y >> 16; - sprite->data0 = y; -} - -u8 CreateAzurillSprite(u8 x, u8 y) -{ - DecompressPicFromTable_2( - &gMonFrontPicTable[SPECIES_AZURILL], - gMonFrontPicCoords[SPECIES_AZURILL].coords, - gMonFrontPicCoords[SPECIES_AZURILL].y_offset, - gUnknown_081FAF4C[0], - gUnknown_081FAF4C[1], - SPECIES_AZURILL); - LoadCompressedObjectPalette(&gMonPaletteTable[SPECIES_AZURILL]); - GetMonSpriteTemplate_803C56C(SPECIES_AZURILL, 1); - return CreateSprite(&gUnknown_02024E8C, x, y, 0); -} - -void AddBirchSpeechObjects(u8 taskId) -{ - u8 spriteId; - - spriteId = CreateBirchSprite(136, 60, 1); - gSprites[spriteId].callback = nullsub_34; - gSprites[spriteId].oam.priority = 0; - gSprites[spriteId].invisible = 1; - gTasks[taskId].data[TD_BIRCH_SPRITE_ID] = 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; - - //Create Brendan sprite - spriteId = CreateTrainerSprite_BirchSpeech(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); - gSprites[spriteId].callback = nullsub_34; - gSprites[spriteId].invisible = 1; - gSprites[spriteId].oam.priority = 0; - gTasks[taskId].data[TD_MAY_SPRITE_ID] = spriteId; -} - -enum { - TD_PARENT_TASK_ID, - TD_EVA, //EVA coefficient of REG_BLDALPHA - TD_EVB, //EVB coefficient of REG_BLDALPHA - TD_INTERVAL, - TD_FRAMECOUNTER -}; - -static void Task_SpriteFadeOut(u8 taskId) -{ - if (gTasks[taskId].data[TD_EVA] == 0) - { - gTasks[gTasks[taskId].data[TD_PARENT_TASK_ID]].data[TD_SUBTASK_DONE] = TRUE; - 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_EVA]--; - gTasks[taskId].data[TD_EVB]++; - REG_BLDALPHA = gTasks[taskId].data[TD_EVA] + (gTasks[taskId].data[TD_EVB] * 256); - } - } -} - -//Launches a helper task to fade out sprites -static void StartSpriteFadeOut(u8 taskId, u8 interval) -{ - u8 newTaskId; - - REG_BLDCNT = 592; - REG_BLDALPHA = 16; - REG_BLDY = 0; - gTasks[taskId].data[TD_SUBTASK_DONE] = 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; -} - -static void Task_SpriteFadeIn(u8 taskId) -{ - if (gTasks[taskId].data[TD_EVA] == 16) - { - gTasks[gTasks[taskId].data[TD_PARENT_TASK_ID]].data[TD_SUBTASK_DONE] = TRUE; - 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_EVA]++; - gTasks[taskId].data[TD_EVB]--; - REG_BLDALPHA = gTasks[taskId].data[TD_EVA] + (gTasks[taskId].data[TD_EVB] * 256); - } -} - -//Launches a helper task to fade in sprites -static void StartSpriteFadeIn(u8 taskId, u8 interval) -{ - u8 newTaskId; - - REG_BLDCNT = 592; - REG_BLDALPHA = 4096; - REG_BLDY = 0; - gTasks[taskId].data[TD_SUBTASK_DONE] = 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; -} - -enum { - TD_FADELEVEL = 1, - TD_DELAY, -}; - -static void HandleFloorShadowFadeOut(u8 taskId) -{ - if (gTasks[taskId].data[TD_DELAY]) - gTasks[taskId].data[TD_DELAY]--; - else - { - if (gTasks[taskId].data[TD_FADELEVEL] == 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); - } - } -} - -//Launches a helper task to fade out the background -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; -} - -static void HandleFloorShadowFadeIn(u8 taskId) -{ - if (gTasks[taskId].data[TD_DELAY]) - gTasks[taskId].data[TD_DELAY]--; - else - { - if (gTasks[taskId].data[TD_FADELEVEL] == 0) - 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); - } - } - } -} - -//Launches a helper task to fade in the background -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; -} - -static void CreateGenderMenu(u8 left, u8 top) -{ - u8 menuLeft, menuTop; - MenuDrawTextWindow(left, top, left + 6, top + 5); - menuLeft = left + 1; - menuTop = top + 1; - PrintMenuItems(menuLeft, menuTop, 2, gUnknown_081E79B0); - InitMenu(0, menuLeft, menuTop, 2, 0, 5); -} - -static s8 GenderMenuProcessInput(void) -{ - return ProcessMenuInputNoWrap(); -} - -static void CreateNameMenu(u8 left, u8 top) -{ - MenuDrawTextWindow(left, top, left + 10, top + 11); - - if (gSaveBlock2.playerGender == MALE) - PrintMenuItems(left + 1, top + 1, 5, gMalePresetNames); - else - PrintMenuItems(left + 1, top + 1, 5, gFemalePresetNames); - - InitMenu(0, left + 1, top + 1, 5, 0, 9); -} - -static s8 NameMenuProcessInput(void) -{ - return ProcessMenuInput(); -} - -static void SetPresetPlayerName(u8 index) -{ - u8 i; - u8 *name; - - if (gSaveBlock2.playerGender == MALE) - name = (u8 *) gMalePresetNames[index].text; - else - name = (u8 *) gFemalePresetNames[index].text; - - for (i = 0; i < 7; i++) - gSaveBlock2.playerName[i] = name[i]; - - gSaveBlock2.playerName[i] = EOS; -} diff --git a/src/map_name_popup.c b/src/map_name_popup.c deleted file mode 100644 index 01105d0db..000000000 --- a/src/map_name_popup.c +++ /dev/null @@ -1,107 +0,0 @@ -#include "global.h" -#include "map_name_popup.h" -#include "event_data.h" -#include "menu.h" -#include "region_map.h" -#include "task.h" - -EWRAM_DATA static u8 sTaskId = 0; - -static void Task_MapNamePopup(u8); -static void DrawMapNamePopup(void); - -bool8 unref_sub_80A2F44(void) -{ - CloseMenu(); - ShowMapNamePopup(); - return 1; -} - -void ShowMapNamePopup(void) -{ - if (FlagGet(0x4000) != TRUE) - { - if (!FuncIsActiveTask(Task_MapNamePopup)) - { - sTaskId = CreateTask(Task_MapNamePopup, 90); - REG_BG0VOFS = 32; - DrawMapNamePopup(); - gTasks[sTaskId].data[0] = 0; - gTasks[sTaskId].data[2] = 32; - } - else - { - if (gTasks[sTaskId].data[0] != 2) - gTasks[sTaskId].data[0] = 2; - gTasks[sTaskId].data[3] = 1; - } - } -} - -void Task_MapNamePopup(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - switch (task->data[0]) - { - case 0: - task->data[2] -= 2; - if (task->data[2] <= 0 ) - { - task->data[0] = 1; - gTasks[sTaskId].data[1] = 0; - } - break; - case 1: - task->data[1]++; - if (task->data[1] > 120 ) - { - task->data[1] = 0; - task->data[0] = 2; - } - break; - case 2: - task->data[2] += 2; - if (task->data[2] > 31) - { - if (task->data[3]) - { - DrawMapNamePopup(); - task->data[0] = 0; - task->data[3] = 0; - } - else - { - task->data[0] = 4; - return; - } - } - break; - case 4: - HideMapNamePopup(); - return; - } - - REG_BG0VOFS = task->data[2]; -} - -void HideMapNamePopup(void) -{ - if (FuncIsActiveTask(Task_MapNamePopup)) - { - MenuLoadTextWindowGraphics(); - MenuZeroFillWindowRect(0, 0, 13, 3); - REG_BG0VOFS = 0; - DestroyTask(sTaskId); - } -} - -void DrawMapNamePopup(void) -{ - u8 name[20]; - - MenuLoadTextWindowGraphics_OverrideFrameType(0); - GetMapSectionName(name, gMapHeader.regionMapSectionId, 0); - MenuDrawTextWindow(0, 0, 13, 3); - sub_8072BD8(name, 1, 1, 0x60); -} diff --git a/src/map_obj_lock.c b/src/map_obj_lock.c deleted file mode 100644 index bd40bcacc..000000000 --- a/src/map_obj_lock.c +++ /dev/null @@ -1,118 +0,0 @@ -#include "global.h" -#include "map_obj_lock.h" -#include "field_map_obj.h" -#include "field_map_obj_helpers.h" -#include "field_player_avatar.h" -#include "script_movement.h" -#include "task.h" - -extern u16 gScriptFacing; - -bool8 walkrun_is_standing_still(void) -{ - if (gPlayerAvatar.running1 == 1) - return FALSE; - else - return TRUE; -} - -void sub_8064CDC(u8 taskId) -{ - if (walkrun_is_standing_still()) - { - sub_80594C0(); - DestroyTask(taskId); - } -} - -bool8 sub_8064CFC(void) -{ - if (FuncIsActiveTask(sub_8064CDC)) - { - return FALSE; - } - else - { - sub_80597F4(); - return TRUE; - } -} - -void ScriptFreezeMapObjects(void) -{ - FreezeMapObjects(); - CreateTask(sub_8064CDC, 80); -} - -void sub_8064D38(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - if (!task->data[0] && walkrun_is_standing_still() == TRUE) - { - sub_80594C0(); - task->data[0] = 1; - } - if (!task->data[1] && !gMapObjects[gSelectedMapObject].mapobj_bit_1) - { - FreezeMapObject(&gMapObjects[gSelectedMapObject]); - task->data[1] = 1; - } - if (task->data[0] && task->data[1]) - DestroyTask(taskId); -} - -bool8 sub_8064DB4(void) -{ - if (FuncIsActiveTask(sub_8064D38)) - { - return FALSE; - } - else - { - sub_80597F4(); - return TRUE; - } -} - -void sub_8064DD8(void) -{ - u8 taskId; - FreezeMapObjectsExceptOne(gSelectedMapObject); - taskId = CreateTask(sub_8064D38, 80); - if (!gMapObjects[gSelectedMapObject].mapobj_bit_1) - { - FreezeMapObject(&gMapObjects[gSelectedMapObject]); - gTasks[taskId].data[1] = 1; - } -} - -void sub_8064E2C(void) -{ - u8 objectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[objectId]); - sub_80A2178(); - UnfreezeMapObjects(); -} - -void unref_sub_8064E5C(void) -{ - u8 objectId; - - if (gMapObjects[gSelectedMapObject].active) - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gSelectedMapObject]); - objectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[objectId]); - sub_80A2178(); - UnfreezeMapObjects(); -} - -void sub_8064EAC(void) -{ - FieldObjectFaceOppositeDirection(&gMapObjects[gSelectedMapObject], gScriptFacing); -} - -void sub_8064ED4(void) -{ - FieldObjectClearAnimIfSpecialAnimActive(&gMapObjects[gSelectedMapObject]); -} diff --git a/src/matsuda_debug_menu.c b/src/matsuda_debug_menu.c deleted file mode 100644 index 3665cabd8..000000000 --- a/src/matsuda_debug_menu.c +++ /dev/null @@ -1,1113 +0,0 @@ -#include "global.h" -#include "matsuda_debug_menu.h" -#include "contest.h" -#include "contest_link_80C2020.h" -#include "contest_link_80C857C.h" -#include "data2.h" -#include "link.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "rom4.h" -#include "sprite.h" -#include "start_menu.h" -#include "string_util.h" -#include "task.h" -#include "text.h" -#include "unknown_task.h" - -extern u8 gUnknown_0203856C; -extern u8 gUnknown_0203857D[][64]; -extern u16 gUnknown_02038670[]; -extern u16 gUnknown_02038678[]; -extern u16 gUnknown_02038680[]; -extern u8 gUnknown_02038690[]; -extern u8 gUnknown_02038694; -extern u8 gIsLinkContest; -extern u8 gUnknown_0203869B; -extern u8 gContestPlayerMonIndex; -extern u16 gScriptContestCategory; -extern u16 gScriptContestRank; - -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 struct Window gUnknown_03004210; -extern u8 (*gCallback_03004AE8)(void); - -extern u8 gUnknown_083C926E[][2]; -extern u8 gUnknown_083C9282[]; -extern const u8 gUnknown_083C928E[][2]; -extern u8 gUnknown_083C9296[]; -extern u8 gUnknown_083C92A8[]; -extern u8 unk_2000000[]; -extern u8 gMatsudaDebugMenu_GoBackText[]; -extern u8 gMatsudaDebugMenu_BattlePointsText[]; -extern u8 gMatsudaDebugMenu_StartText[]; - -extern struct SpritePalette gUnknown_083C92BC; -extern struct SpriteSheet gUnknown_083C92B4; -extern struct SpriteTemplate gSpriteTemplate_83C92CC; -extern void (*gUnknown_083C92E4[][2])(struct Sprite *, s8); -extern u32 gUnknown_083C9400[2]; - - -extern u8 gMatsudaDebugMenu_UnknownByteArray[]; -extern u8* gMatsudaDebugMenuTextList1[]; -extern u8* gMatsudaDebugMenuTextList2[]; -extern u8* gMatsudaDebugMenuTextList3[]; -extern u8 gMatsudaDebugMenuContestTopLeft[][2]; - -extern bool8 gReceivedRemoteLinkPlayers; - -extern struct MenuAction gMatsudaDebugMenuActions[]; - -static bool8 sub_80A9B78(void); -static void sub_80A9BE4(u8 taskId); -static void sub_80A9C98(u8); -static void sub_80A9CC0(u8); -static void sub_80A9CDC(u8); -static void sub_80A9D58(u8); -static void sub_80A9DBC(u8); -static void sub_80A9DD8(u8); -static void sub_80A9E04(u8 taskId); -static void sub_80A9E3C(u8 taskId); -static void sub_80A9E80(u8); -static void sub_80A9ED8(u8); -static void sub_80A9F10(u8); -static void sub_80AA10C(void); -static void sub_80AA5BC(u8); -static void sub_80AA614(u8, u8); -static void sub_80AAD08(struct Sprite *, s8); - -u8 unref_sub_80A9B28(void) -{ - MenuZeroFillScreen(); - MenuDrawTextWindow(0, 0, 17, 18); - PrintMenuItems(1, 1, 7, gMatsudaDebugMenuActions); - InitMenu(0, 1, 1, 7, 0, 16); - gCallback_03004AE8 = sub_80A9B78; - return 0; -} - -static bool8 sub_80A9B78(void) -{ - s8 choice = ProcessMenuInput(); - - switch (choice) - { - case -2: - return FALSE; - default: - gCallback_03004AE8 = gMatsudaDebugMenuActions[choice].func; - return FALSE; - case -1: - CloseMenu(); - return TRUE; - } -} - -s8 MatsudaDebugMenu_ContestResults(void) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - CreateTask(sub_80A9BE4, 0xFF); - return 1; -} - -static void sub_80A9BE4(u8 taskId) -{ - if (!gPaletteFade.active) - { - DestroyTask(taskId); - - if (!(gIsLinkContest & 1)) - sub_80AF668(); - - sub_80C2358(); - } -} - -s8 MatsudaDebugMenu_Contest(void) -{ - gIsLinkContest = 0; - sub_80AA10C(); - return 0; -} - -s8 MatsudaDebugMenu_ContestComm(void) -{ - sub_80AA10C(); - return 0; -} - -s8 MatsudaDebugMenu_CommTest(void) -{ - u8 newTaskId; - u8 newTaskId2; - - newTaskId = CreateTask(sub_80A9E3C, 0); - SetTaskFuncWithFollowupFunc(newTaskId, sub_80A9E3C, sub_80A9C98); - newTaskId2 = CreateTask(sub_80A9E04, 1); - gTasks[newTaskId2].data[10] = newTaskId; - gTasks[newTaskId].data[10] = newTaskId2; - return 1; -} - -static void sub_80A9C98(u8 taskId) -{ - sub_80AE098(0); - SetTaskFuncWithFollowupFunc(taskId, sub_80C8734, sub_80A9CC0); -} - -static void sub_80A9CC0(u8 taskId) -{ - SetTaskFuncWithFollowupFunc(taskId, sub_80C88AC, sub_80A9CDC); -} - -static void sub_80A9CDC(u8 taskId) -{ - SetTaskFuncWithFollowupFunc(taskId, sub_80C8E1C, sub_80A9D58); -} - -static void sub_80A9CF8(u8 taskId) -{ - if (gReceivedRemoteLinkPlayers == FALSE) - { - DestroyTask(gTasks[taskId].data[10]); - DestroyTask(taskId); - CloseMenu(); - } -} - -static void sub_80A9D30(u8 taskId) -{ - sub_800832C(); - gTasks[taskId].func = sub_80A9CF8; -} - -static void sub_80A9D58(u8 taskId) -{ - int i; - u8 dest[4]; - - for (i = 0; i < 4; i++) - dest[i] = gTasks[taskId].data[5 + i]; - - gUnknown_0203869B = sub_80C4B34(dest); - sub_80AE82C((u8)gScriptContestCategory); - sub_80B0F28(0); - SetTaskFuncWithFollowupFunc(taskId, sub_80C8EBC, sub_80A9DBC); -} - -static void sub_80A9DBC(u8 taskId) -{ - SetTaskFuncWithFollowupFunc(taskId, sub_80C8F34, sub_80A9DD8); -} - -static void sub_80A9DD8(u8 taskId) -{ - DestroyTask(gTasks[taskId].data[10]); - DestroyTask(taskId); - CloseMenu(); -} - -static void sub_80A9E04(u8 taskId) -{ - if (gMain.newKeys == 2) - gTasks[(u8)gTasks[taskId].data[10]].func = sub_80A9D30; -} - -static void sub_80A9E3C(u8 taskId) -{ - u8 i; - - OpenLink(); - - for (i = 0; i < 4; i++) - gBlockRecvBuffer[i][0] = 255; - - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80A9E80; -} - -static void sub_80A9E80(u8 taskId) -{ - TaskFunc func; - - if (gTasks[taskId].data[0] < 10) - gTasks[taskId].data[0]++; - else - { - if (GetLinkPlayerCount_2() > 3) - { - gTasks[taskId].data[0] = 0; - - if (IsLinkMaster()) - { - func = sub_80A9ED8; - gTasks[taskId].func = (TaskFunc)func; - } - else - { - func = sub_80A9F10; - gTasks[taskId].func = (TaskFunc)func; - } - } - } -} - -static void sub_80A9ED8(u8 taskId) -{ - gTasks[taskId].data[0] = gTasks[taskId].data[0] + 1; - if ((gTasks[taskId].data[0]) == 101) - { - sub_8007F4C(); - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80A9F10; - } -} - -static void sub_80A9F10(u8 taskId) -{ - if (gReceivedRemoteLinkPlayers) - { - gContestPlayerMonIndex = GetMultiplayerId(); - if (GetLinkPlayerCount() == 4) - { - gIsLinkContest = 1; - SwitchTaskToFollowupFunc(taskId); - } - } -} - -static void sub_80A9F50(void) -{ - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP; - REG_DISPCNT |= DISPCNT_OBJ_ON | DISPCNT_BG0_ON; - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitWindowFromConfig(&gMenuWindow, &gWindowConfig_81E6C3C); - REG_MOSAIC = 0; - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; - gUnknown_030042C0 = 0; - gUnknown_030041B4 = 0; - gUnknown_03004288 = 0; - gUnknown_03004280 = 0; - gUnknown_030041B0 = 0; - gUnknown_030041B8 = 0; -} - -static void sub_80A9FE4(void) -{ - u8 *addr; - u32 i; - u8 ptr[5]; - - memcpy(ptr, gMatsudaDebugMenu_UnknownByteArray, 5); - - addr = (void *)VRAM; - i = VRAM_SIZE; - - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - i -= 0x1000; - if (i <= 0x1000) - { - DmaFill32(3, 0, addr, i); - break; - } - } - sub_80034D4((void *)VRAM, ptr); - LoadFontDefaultPalette(&gWindowConfig_81E6C3C); -} - -static void sub_80AA064(void) -{ - AnimateSprites(); - BuildOamBuffer(); - RunTasks(); - UpdatePaletteFade(); - if (gMain.newKeys == 4) - SetMainCallback2(sub_805469C); -} - -static void sub_80AA090(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_80AA10C(void) -{ - u8 i; - u8 zero; - u8 spriteId; - - gPaletteFade.bufferTransferDisabled = 1; - SetVBlankCallback(0); - sub_80A9F50(); - dp12_8087EA4(); - ResetPaletteFade(); - ResetSpriteData(); - ResetTasks(); - FreeAllSpritePalettes(); - sub_80A9FE4(); - SetVBlankCallback(sub_80AA090); - SetMainCallback2(sub_80AA064); - gPaletteFade.bufferTransferDisabled = 0; - gUnknown_02038694 = 0; - - if (!(gContestMons[0].nickname[0])) - sub_80AE398(0, 0); - - sub_80AE098(gUnknown_02038694); - - for (i = 0; i < 6; i++) - { - sub_8003460(&gMenuWindow, gMatsudaDebugMenuTextList1[i], - (0xA * i + 0x2A), gMatsudaDebugMenuContestTopLeft[i][0], - gMatsudaDebugMenuContestTopLeft[i][1]); - } - - gScriptContestCategory = gScriptContestRank = 0; - zero = 0; // it's possible this was some assignment that matsuda used to quickly edit and test things without changing whats passed to the later functions. - sub_80AA5BC(zero); - sub_80AA5E8(gScriptContestRank); - sub_8003460(&gMenuWindow, gMatsudaDebugMenu_GoBackText, 0xD6, 0x12, 0x12); - sub_8003460(&gMenuWindow, gMatsudaDebugMenu_BattlePointsText, 0xDC, zero, 0xC); - LoadSpriteSheet(&gUnknown_083C92B4); - LoadSpritePalette(&gUnknown_083C92BC); - sub_80AA280(3); - sub_80AA658(3); - sub_80AA614(3, zero); - spriteId = CreateSprite(&gSpriteTemplate_83C92CC, gUnknown_083C9296[3], gUnknown_083C92A8[1], 5); - gSprites[spriteId].data0 = 1; - gSprites[spriteId].data1 = 1; - gSprites[spriteId].data2 = 3; - gSprites[spriteId].data3 = zero; // only this assignment of zero is necessary. other replacements of 0 with zero do not change the asm, compiler will treat it the same. -} - -void sub_80AA280(u8 var) // no? -{ - u8 i; - - FillWindowRect_DefaultPalette(&gMenuWindow, 0, 0, 0, 0x1E, 3); - StringCopy(unk_2000000, gMatsudaDebugMenu_StartText); - StringAppend(unk_2000000, &gUnknown_0203857D[var][0]); - - for (i = 0; i < 4; i++) - { - if (var == i) - { - sub_8003460(&gMenuWindow, unk_2000000, (10 * i + 2), gUnknown_083C926E[i][0], gUnknown_083C926E[i][1]); - } - else - { - u8 *ptr = gUnknown_0203857D[i]; - sub_8003460(&gMenuWindow, ptr, (10 * i + 2), gUnknown_083C926E[i][0], gUnknown_083C926E[i][1]); - } - } -} - -static void sub_80AA340(u8 var) -{ - ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].cool, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, unk_2000000, 0x66, gUnknown_083C9282[0], gUnknown_083C9282[1]); -} - -static void sub_80AA388(u8 var) -{ - ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].cute, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, unk_2000000, 0x6C, gUnknown_083C9282[2], gUnknown_083C9282[3]); -} - -static void sub_80AA3D0(u8 var) -{ - ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].beauty, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, unk_2000000, 0x72, gUnknown_083C9282[4], gUnknown_083C9282[5]); -} - -static void sub_80AA418(u8 var) -{ - ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].smart, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, unk_2000000, 0x78, gUnknown_083C9282[6], gUnknown_083C9282[7]); -} - -static void sub_80AA460(u8 var) -{ - ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].tough, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, unk_2000000, 0x7E, gUnknown_083C9282[8], gUnknown_083C9282[9]); -} - -static void sub_80AA4A8(u8 var) -{ - ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].sheen, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, unk_2000000, 0x84, gUnknown_083C9282[10], gUnknown_083C9282[11]); -} - -static void sub_80AA4F0(u8 var1, u8 var2) -{ - FillWindowRect_DefaultPalette(&gMenuWindow, 0, gUnknown_083C928E[var2][0], gUnknown_083C928E[var2][1], gUnknown_083C928E[var2][0] + 7, gUnknown_083C928E[var2][1] + 1); - sub_8003460(&gMenuWindow, gMoveNames[gContestMons[var1].moves[var2]], 0x8A + var2 * 14, gUnknown_083C928E[var2][0], gUnknown_083C928E[var2][1]); - ConvertIntToDecimalStringN(gStringVar1, gContestMons[var1].moves[var2], STR_CONV_MODE_LEADING_ZEROS, 3); - sub_8003460(&gMenuWindow, gStringVar1, 0xFA + var2 * 6, gUnknown_083C928E[var2][0] + 7, gUnknown_083C928E[var2][1]); -} - -static void sub_80AA5BC(u8 var) -{ - sub_8003460(&gMenuWindow, gMatsudaDebugMenuTextList2[var], 0xC2, 3, 0x12); -} - -void sub_80AA5E8(u8 var) -{ - sub_8003460(&gMenuWindow, gMatsudaDebugMenuTextList3[var], 0xE8, 3, 4); -} - -static void sub_80AA614(u8 var1, u8 var2) -{ - u16 var = sub_80AE770(var1, var2); - - ConvertIntToDecimalStringN(unk_2000000, var, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, unk_2000000, 0xE2, 3, 0xC); -} - -void sub_80AA658(u8 var) -{ - u8 i; - - sub_80AA340(var); - sub_80AA388(var); - sub_80AA3D0(var); - sub_80AA418(var); - sub_80AA460(var); - sub_80AA4A8(var); - - for (i = 0; i < 4; i++) - sub_80AA4F0(var, i); -} - -void SetDebugMonForContest(void) -{ - SetMonData(&gPlayerParty[0], MON_DATA_COOL, &gContestMons[gContestPlayerMonIndex].cool); - SetMonData(&gPlayerParty[0], MON_DATA_CUTE, &gContestMons[gContestPlayerMonIndex].cute); - SetMonData(&gPlayerParty[0], MON_DATA_BEAUTY, &gContestMons[gContestPlayerMonIndex].beauty); - SetMonData(&gPlayerParty[0], MON_DATA_SMART, &gContestMons[gContestPlayerMonIndex].smart); - SetMonData(&gPlayerParty[0], MON_DATA_TOUGH, &gContestMons[gContestPlayerMonIndex].tough); - SetMonData(&gPlayerParty[0], MON_DATA_SHEEN, &gContestMons[gContestPlayerMonIndex].sheen); - SetMonData(&gPlayerParty[0], MON_DATA_MOVE1, (const u8 *) &gContestMons[gContestPlayerMonIndex].moves[0]); - SetMonData(&gPlayerParty[0], MON_DATA_MOVE2, (const u8 *) &gContestMons[gContestPlayerMonIndex].moves[1]); - SetMonData(&gPlayerParty[0], MON_DATA_MOVE3, (const u8 *) &gContestMons[gContestPlayerMonIndex].moves[2]); - SetMonData(&gPlayerParty[0], MON_DATA_MOVE4, (const u8 *) &gContestMons[gContestPlayerMonIndex].moves[3]); -} - -void sub_80AA754(struct Sprite *sprite) -{ - switch (gMain.newAndRepeatedKeys) - { - case DPAD_RIGHT: - case DPAD_LEFT: - sprite->data0 ^= 1; - break; - case DPAD_UP: - if (sprite->data1 == 0) - sprite->data1 = 8; - else - sprite->data1--; - break; - case DPAD_DOWN: - if (sprite->data1 == 8) - sprite->data1 = 0; - else - sprite->data1++; - break; - case A_BUTTON: - gUnknown_083C92E4[sprite->data1][sprite->data0](sprite, 1); - sub_80AA614(sprite->data2, sprite->data3); - break; - case B_BUTTON: - gUnknown_083C92E4[sprite->data1][sprite->data0](sprite, -1); - sub_80AA614(sprite->data2, sprite->data3); - break; - case R_BUTTON: - gUnknown_083C92E4[sprite->data1][sprite->data0](sprite, 10); - sub_80AA614(sprite->data2, sprite->data3); - break; - case L_BUTTON: - gUnknown_083C92E4[sprite->data1][sprite->data0](sprite, -10); - sub_80AA614(sprite->data2, sprite->data3); - break; - case START_BUTTON: - sub_80AAD08(sprite, 1); - break; - } - sprite->pos1.x = gUnknown_083C9296[sprite->data0 + sprite->data1 * 2]; - sprite->pos1.y = gUnknown_083C92A8[sprite->data1]; -} - -static void sub_80AA8A0(struct Sprite *sprite, s8 var1, u8 var2) -{ - if (var1 == 1) - { - sprite->data2 = var2; - sub_80AA280(var2); - sub_80AA658(sprite->data2); - } -} - -void sub_80AA8C8(struct Sprite *sprite, s8 var1) -{ - sub_80AA8A0(sprite, var1, 0); -} - -void sub_80AA8D8(struct Sprite *sprite, s8 var1) -{ - sub_80AA8A0(sprite, var1, 1); -} - -void sub_80AA8E8(struct Sprite *sprite, s8 var1) -{ - sub_80AA8A0(sprite, var1, 2); -} - -void sub_80AA8F8(struct Sprite *sprite, s8 var1) -{ - sub_80AA8A0(sprite, var1, 3); -} - -static u8 sub_80AA908(u32 a1, u8 a2, s8 a3) // first param is unused. -{ - s16 val = a2 + a3; - - if (val > 255) - val = 255; - else if (val < 0) - val = 0; - - return val; -} - -void sub_80AA930(struct Sprite *sprite, u8 var2) -{ - u8 val = sprite->data2; - - gContestMons[sprite->data2].cool = sub_80AA908(val, gContestMons[sprite->data2].cool, var2); - sub_80AA340(sprite->data2); -} - -void sub_80AA974(struct Sprite *sprite, u8 var2) -{ - u8 val = sprite->data2; - - gContestMons[sprite->data2].cute = sub_80AA908(val, gContestMons[sprite->data2].cute, var2); - sub_80AA388(sprite->data2); -} - -void sub_80AA9B8(struct Sprite *sprite, u8 var2) -{ - u8 val = sprite->data2; - - gContestMons[sprite->data2].beauty = sub_80AA908(val, gContestMons[sprite->data2].beauty, var2); - sub_80AA3D0(sprite->data2); -} - -void sub_80AA9FC(struct Sprite *sprite, u8 var2) -{ - u8 val = sprite->data2; - - gContestMons[sprite->data2].smart = sub_80AA908(val, gContestMons[sprite->data2].smart, var2); - sub_80AA418(sprite->data2); -} - -void sub_80AAA40(struct Sprite *sprite, u8 var2) -{ - u8 val = sprite->data2; - - gContestMons[sprite->data2].tough = sub_80AA908(val, gContestMons[sprite->data2].tough, var2); - sub_80AA460(sprite->data2); -} - -void sub_80AAA84(struct Sprite *sprite, u8 var2) -{ - u8 val = sprite->data2; - - gContestMons[sprite->data2].sheen = sub_80AA908(val, gContestMons[sprite->data2].sheen, var2); - sub_80AA4A8(sprite->data2); -} - -// a similar function is at 0x80AA908, however, it apparently returns the wrong type (u8 vs u16). -static u16 sub_80AAAC8(u32 a1, u16 a2, s8 a3) // first param is unused. -{ - s16 val = a2 + a3; - - if (val > 354) - val = 1; - else if (val < 0) - val = 354; - - return val; -} - -void sub_80AAAF0(struct Sprite *sprite, u8 var2) -{ - u8 val = sprite->data2; - - gContestMons[sprite->data2].moves[0] = sub_80AAAC8(val, gContestMons[sprite->data2].moves[0], var2); - sub_80AA4F0(sprite->data2, 0); -} - -void sub_80AAB30(struct Sprite *sprite, u8 var2) -{ - u8 val = sprite->data2; - - gContestMons[sprite->data2].moves[1] = sub_80AAAC8(val, gContestMons[sprite->data2].moves[1], var2); - sub_80AA4F0(sprite->data2, 1); -} - -void sub_80AAB70(struct Sprite *sprite, u8 var2) -{ - u8 val = sprite->data2; - - gContestMons[sprite->data2].moves[2] = sub_80AAAC8(val, gContestMons[sprite->data2].moves[2], var2); - sub_80AA4F0(sprite->data2, 2); -} - -void sub_80AABB0(struct Sprite *sprite, u8 var2) -{ - u8 val = sprite->data2; - - gContestMons[sprite->data2].moves[3] = sub_80AAAC8(val, gContestMons[sprite->data2].moves[3], var2); - sub_80AA4F0(sprite->data2, 3); -} - -void sub_80AABF0(struct Sprite *sprite, s8 var2) -{ - s8 a = (var2 > 0) ? 1 : -1; - s8 r4 = sprite->data3 + a; - - if (r4 < 0) - r4 = 0; - else if (r4 > 4) - r4 = 4; - sub_80AA5BC(r4); - sprite->data3 = r4; - gScriptContestCategory = sprite->data3; - sub_80AE398(sprite->data3, gScriptContestRank); - sub_80AA280(sprite->data2); - sub_80AA658(sprite->data2); -} - -void sub_80AAC5C(struct Sprite *sprite, s8 var2) -{ - if (var2 > 0) - gScriptContestRank++; - else if (gScriptContestRank != 0) - gScriptContestRank--; - if (gScriptContestRank > 3) - gScriptContestRank = 3; - sub_80AA5E8(gScriptContestRank); - sub_80AE398(gScriptContestCategory, gScriptContestRank); - sub_80AA280(sprite->data2); - sub_80AA658(sprite->data2); -} - -void sub_80AACC4(void) -{ - UpdatePaletteFade(); - if (!gPaletteFade.active) - { - SetDebugMonForContest(); - if (!(gIsLinkContest & 1)) - sub_80AE82C(unk_2000000[0]); - SetMainCallback2(sub_80AB47C); - } -} - -void sub_80AAD08(struct Sprite *sprite, s8 var2) -{ - if (var2 == 1) - { - unk_2000000[0] = sprite->data3; - SetMainCallback2(sub_80AACC4); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - } -} - -void sub_80AAD44(struct Sprite *sprite, s8 var2) -{ - if (var2 == 1) - { - int i; - - SetDebugMonForContest(); - for (i = 0; i < 4; i++) - gUnknown_02038670[i] = sub_80AE770(i, gScriptContestCategory); - SetMainCallback2(sub_805469C); - } -} - -//Do this later -/* -void sub_80AAD84(u8 *string, u8 b, u8 c, u8 d) -{ - u32 r5; - u16 r7; - u8 r7_2; - //u32 sp44; - //u32 sp48; - u32 sp58; - - gMain.state = 0; - - r5 = d + 1; - //Could also be DmaClear32 - DmaFill32(3, 0, (u8 *)VRAM + 0x18000 - r5 * 256, 0x100); - - r7 = StringLength(string); - if (r7 > 8) - r7 = 8; - sp58 = d * 2; - - //More stuff - - r7_2 = 0x7C - sp58; - -} -*/ - -__attribute__((naked)) -void sub_80AAD84(u8 *string, u8 b, u8 c, u8 d) -{ - 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, 0x64\n\ - mov r9, r0\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - str r1, [sp, 0x48]\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - str r2, [sp, 0x4C]\n\ - lsls r3, 24\n\ - lsrs r3, 24\n\ - mov r10, r3\n\ - mov r5, r10\n\ - adds r5, 0x1\n\ - lsls r1, r5, 8\n\ - ldr r0, _080AAEC4 @ =0x06018000\n\ - subs r1, r0, r1\n\ - movs r0, 0\n\ - str r0, [sp, 0x44]\n\ - ldr r4, _080AAEC8 @ =0x040000d4\n\ - add r0, sp, 0x44\n\ - str r0, [r4]\n\ - str r1, [r4, 0x4]\n\ - ldr r0, _080AAECC @ =0x85000040\n\ - str r0, [r4, 0x8]\n\ - ldr r0, [r4, 0x8]\n\ - mov r0, r9\n\ - bl StringLength\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ - cmp r7, 0x8\n\ - bls _080AADD0\n\ - movs r7, 0x8\n\ -_080AADD0:\n\ - movs r6, 0\n\ - mov r8, r5\n\ - mov r1, r10\n\ - lsls r1, 1\n\ - str r1, [sp, 0x58]\n\ - ldr r2, [sp, 0x48]\n\ - adds r2, 0x20\n\ - str r2, [sp, 0x5C]\n\ - cmp r6, r7\n\ - bge _080AAE1E\n\ - add r5, sp, 0x40\n\ - add r0, sp, 0x20\n\ - mov r10, r0\n\ - ldr r2, _080AAEC4 @ =0x06018000\n\ -_080AADEC:\n\ - mov r1, r9\n\ - adds r0, r1, r6\n\ - ldrb r0, [r0]\n\ - strb r0, [r5]\n\ - movs r0, 0xFF\n\ - strb r0, [r5, 0x1]\n\ - mov r0, sp\n\ - adds r1, r5, 0\n\ - str r2, [sp, 0x60]\n\ - bl sub_80034D4\n\ - mov r1, r8\n\ - lsls r0, r1, 8\n\ - ldr r2, [sp, 0x60]\n\ - subs r0, r2, r0\n\ - mov r1, r10\n\ - str r1, [r4]\n\ - str r0, [r4, 0x4]\n\ - ldr r0, _080AAED0 @ =0x84000008\n\ - str r0, [r4, 0x8]\n\ - ldr r0, [r4, 0x8]\n\ - adds r2, 0x20\n\ - adds r6, 0x1\n\ - cmp r6, r7\n\ - blt _080AADEC\n\ -_080AAE1E:\n\ - movs r1, 0x7C\n\ - ldr r2, [sp, 0x58]\n\ - subs r1, r2\n\ - lsls r1, 24\n\ - lsrs r7, r1, 24\n\ - ldr r0, _080AAED4 @ =gMain\n\ - mov r9, r0\n\ - lsls r3, r7, 3\n\ - add r3, r9\n\ - ldr r0, _080AAED8 @ =gUnknown_083C9400\n\ - ldr r1, [r0]\n\ - ldr r2, [r0, 0x4]\n\ - str r1, [sp, 0x50]\n\ - str r2, [sp, 0x54]\n\ - str r1, [r3, 0x3C]\n\ - str r2, [r3, 0x40]\n\ - mov r2, r8\n\ - lsls r0, r2, 3\n\ - movs r1, 0x80\n\ - lsls r1, 3\n\ - adds r2, r1, 0\n\ - subs r2, r0\n\ - adds r6, r3, 0\n\ - adds r6, 0x40\n\ - ldr r0, _080AAEDC @ =0x000003ff\n\ - mov r8, r0\n\ - mov r1, r8\n\ - ands r2, r1\n\ - ldrh r5, [r6]\n\ - ldr r4, _080AAEE0 @ =0xfffffc00\n\ - adds r0, r4, 0\n\ - ands r0, r5\n\ - orrs r0, r2\n\ - strh r0, [r6]\n\ - ldrh r5, [r3, 0x3E]\n\ - ldr r2, _080AAEE4 @ =0xfffffe00\n\ - adds r0, r2, 0\n\ - ands r0, r5\n\ - ldr r1, [sp, 0x48]\n\ - orrs r0, r1\n\ - strh r0, [r3, 0x3E]\n\ - adds r3, 0x3C\n\ - add r0, sp, 0x4C\n\ - ldrb r0, [r0]\n\ - strb r0, [r3]\n\ - adds r1, r7, 0x1\n\ - lsls r1, 3\n\ - mov r0, r9\n\ - adds r7, r1, r0\n\ - ldr r0, [sp, 0x50]\n\ - ldr r1, [sp, 0x54]\n\ - str r0, [r7, 0x3C]\n\ - str r1, [r7, 0x40]\n\ - ldrh r0, [r6]\n\ - lsls r0, 22\n\ - lsrs r0, 22\n\ - adds r0, 0x4\n\ - adds r5, r7, 0\n\ - adds r5, 0x40\n\ - mov r1, r8\n\ - ands r0, r1\n\ - ldrh r3, [r5]\n\ - ands r4, r3\n\ - orrs r4, r0\n\ - strh r4, [r5]\n\ - ldrh r0, [r7, 0x3E]\n\ - ands r2, r0\n\ - ldr r0, [sp, 0x5C]\n\ - orrs r2, r0\n\ - strh r2, [r7, 0x3E]\n\ - adds r1, r7, 0\n\ - adds r1, 0x3C\n\ - add r2, sp, 0x4C\n\ - ldrb r2, [r2]\n\ - strb r2, [r1]\n\ - add sp, 0x64\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\ -_080AAEC4: .4byte 0x06018000\n\ -_080AAEC8: .4byte 0x040000d4\n\ -_080AAECC: .4byte 0x85000040\n\ -_080AAED0: .4byte 0x84000008\n\ -_080AAED4: .4byte gMain\n\ -_080AAED8: .4byte gUnknown_083C9400\n\ -_080AAEDC: .4byte 0x000003ff\n\ -_080AAEE0: .4byte 0xfffffc00\n\ -_080AAEE4: .4byte 0xfffffe00\n\ - .syntax divided\n"); -} - -void unref_sub_80AAEE8(s32 a, u8 b, u8 c, u8 d) -{ - u8 string[12]; - u8 offset = 0; - - if (a < 0) - { - string[0] = 0xAE; - offset = 1; - } - ConvertIntToDecimalStringN(string + offset, (a < 0) ? -a : a, 0, 8); - sub_80AAD84(string, b, c, d); -} - -void sub_80AAF30(void) -{ - s32 i; - - gUnknown_0203856C = 1; - gContestPlayerMonIndex = 3; - sub_80AE098(0); - - for (i = 3; i > -1; i--) - gUnknown_02038690[i] = 3 - i; - - for (i = 0; i < 3; i++) - { - gUnknown_02038670[i] = 0; - gUnknown_02038680[i] = 0; - gUnknown_02038678[i] = 0; - memcpy(&gContestMons[i], &gContestMons[3], sizeof(struct ContestPokemon)); - } - - gUnknown_02038670[3] = 0x12C; - gUnknown_02038680[3] = 0x190; - gUnknown_02038678[3] = 0x190; - sub_80B2A7C(0xFE); -} - -//Don't know size of return type -int MatsudaDebugMenu_SetHighScore(void) -{ - sub_80AAF30(); - CloseMenu(); - return 1; -} - -//Don't know size of return type -int MatsudaDebugMenu_ResetHighScore(void) -{ - s32 i; - - gUnknown_0203856C = 0; - for (i = 0; i < 4; i++) - { - gUnknown_02038670[i] = 0; - gUnknown_02038680[i] = 0; - gUnknown_02038678[i] = 0; - } - CloseMenu(); - return 1; -} - -//Don't know size of return type -int MatsudaDebugMenu_SetArtMuseumItems(void) -{ - s32 i; - - gContestPlayerMonIndex = 3; - sub_80AE098(0); - for (i = 3; i > -1; i--) - gUnknown_02038690[i] = 3 - i; - for (gScriptContestCategory = 0; gScriptContestCategory < 5; gScriptContestCategory++) - sub_80B2A7C(0xFF); - CloseMenu(); - return 1; -} - -void unref_sub_80AB084(u8 *text) -{ - u16 savedIme; - u8 *addr; - size_t size; - - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - REG_WIN0H = 0; - REG_WIN0V = 0; - REG_WIN1H = 0; - REG_WIN1V = 0; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; - - savedIme = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = savedIme; - REG_DISPSTAT = 8; - ResetTasks(); - ResetSpriteData(); - SetMainCallback2(sub_80AB184); - - addr = (void *)VRAM; - size = 0x18000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - SetUpWindowConfig(&gWindowConfig_81E6FD8); - InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6FD8); - LoadFontDefaultPalette(&gWindowConfig_81E6FD8); - sub_8003460(&gUnknown_03004210, text, 1, 9, 7); -} - -void sub_80AB184(void) -{ - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; -} diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c deleted file mode 100644 index 93684fc60..000000000 --- a/src/mauville_old_man.c +++ /dev/null @@ -1,247 +0,0 @@ -#include "global.h" -#include "mauville_old_man.h" -#include "easy_chat.h" -#include "menu.h" -#include "rng.h" -#include "script.h" -#include "string_util.h" -#include "strings.h" -#include "trader.h" - -extern u16 gScriptResult; -extern u16 gSpecialVar_0x8004; - -extern u32 gUnknown_083E5388[]; -extern u32 gUnknown_083E53A8[]; - -extern u16 gUnknown_083E537C[]; - -void sub_80F7A34(void) -{ - u16 i; - OldMan *oldMan = &gSaveBlock1.oldMan; - - oldMan->oldMan1.unk_2D94 = 0; - oldMan->oldMan1.unk_2DBD = 0; - - for(i = 0; i < 6; i++) - oldMan->oldMan1.mauvilleOldMan_ecArray[i] = gUnknown_083E537C[i]; -} - -void sub_80F7A6C(void) -{ - struct UnkMauvilleOldManStruct *bard = &gSaveBlock1.oldMan.oldMan1; - - bard->unk_2D94 = 1; - bard->unk_2D95 = 0; -} - -void sub_80F7A7C(void) -{ - sub_80F83F8(); -} - -void sub_80F7A88(void) -{ - OldMan *oldMan = &gSaveBlock1.oldMan; - - oldMan->oldMan1.unk_2D94 = 4; - oldMan->oldMan1.unk_2D95 = 0; -} - -void sub_80F7A98(void) -{ - sub_81099CC(); -} - -void SetMauvilleOldMan(void) -{ - u32 var = ((u16)((gSaveBlock2.playerTrainerId[1] << 8 | gSaveBlock2.playerTrainerId[0])) % 10) / 2; - - switch(var) - { - case 0: - sub_80F7A34(); - break; - case 1: - sub_80F7A6C(); - break; - case 2: - sub_80F7A98(); - break; - case 3: - sub_80F7A7C(); - break; - case 4: - sub_80F7A88(); - break; - } - sub_80F83D0(); -} - -u8 GetCurrentMauvilleOldMan(void) -{ - OldMan *oldMan = &gSaveBlock1.oldMan; - - return oldMan->oldMan1.unk_2D94; -} - -void sub_80F7B14(void) -{ - gScriptResult = GetCurrentMauvilleOldMan(); -} - -void sub_80F7B2C(void) -{ - u16 *scriptPtr = &gScriptResult; // why?? - OldMan *oldMan = &gSaveBlock1.oldMan; - - *scriptPtr = oldMan->oldMan1.unk_2DBD; -} - -void sub_80F7B40(void) -{ - u16 i; - OldMan *oldMan = &gSaveBlock1.oldMan; - //struct UnkMauvilleOldManStruct *oldManStruct = &gSaveBlock1.oldManStruct; - - StringCopy(oldMan->oldMan1.playerName, gSaveBlock2.playerName); - - for(i = 0; i < 4; i++) - oldMan->oldMan1.playerTrainerId[i] = gSaveBlock2.playerTrainerId[i]; - - for(i = 0; i < 6; i++) - oldMan->oldMan1.mauvilleOldMan_ecArray[i] = oldMan->oldMan1.mauvilleOldMan_ecArray2[i]; - - oldMan->oldMan1.unk_2DBD = 1; -} - -void sub_80F7BA0(void) -{ - struct UnkMauvilleOldManStruct *oldMan = &gSaveBlock1.oldMan.oldMan1; - 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; - if (specialVar == 0) - r5 = oldMan->mauvilleOldMan_ecArray; - ptr = gStringVar4; - r4 = ptr; - for (i = 0; i < 2; i++) - { - ptr = sub_80EB3FC(ptr, *(r5++)); - while (ptr != r4) - { - if (*r4 == 0) - *r4 = 0x37; - r4++; - } - r4++; - *(ptr++) = 0; - ptr = sub_80EB3FC(ptr, *(r5++)); - while (ptr != r4) - { - if (*r4 == 0) - *r4 = 0x37; - r4++; - } - r4++; - *(ptr++) = 0xFE; - ptr = sub_80EB3FC(ptr, *(r5++)); - while (ptr != r4) - { - if (*r4 == 0) - *r4 = 0x37; - r4++; - } - //_080F7C2A - if (i == 0) - { - *(ptr++) = EXT_CTRL_CODE_BEGIN; - *(ptr++) = 0xF; - } - } -} - -void sub_80F7C54(void) -{ - sub_80F7F80(gSpecialVar_0x8004); - MenuDisplayMessageBox(); - ScriptContext1_Stop(); -} - -void sub_80F7C70(void) -{ - u16 *scriptPtr = &gScriptResult; // again?? - OldMan *oldMan = &gSaveBlock1.oldMan; - - *scriptPtr = oldMan->oldMan1.unk_2D95; -} - -void sub_80F7C84(void) -{ - OldMan *oldMan = &gSaveBlock1.oldMan; - - oldMan->oldMan1.unk_2D95 = 1; -} - -void sub_80F7C90(void) -{ - u16 var = sub_80EB8EC(); - - if(var == 0xFFFF) - { - gScriptResult = FALSE; - } - else - { - sub_80EB3FC(gStringVar1, var); - gScriptResult = TRUE; - } -} - -void sub_80F7CC8(void) -{ - OldMan *oldMan = &gSaveBlock1.oldMan; - - if(oldMan->oldMan1.unk_2D95 == 10) - { - gScriptResult = FALSE; - oldMan->oldMan1.unk_2D95 = 0; - } - else - gScriptResult = TRUE; -} - -void sub_80F7CF4(void) -{ - struct UnkMauvilleOldManStruct2 *oldMan = &gSaveBlock1.oldMan.oldMan2; - - if(oldMan->unk1 == 0) - sub_80F7DC0(); - - if(oldMan->mauvilleOldMan_ecArray[oldMan->unk1] != 0xFFFF) // is not the last element of the array? - { - u8 *stringPtr; - u32 random = Random(); - - random %= 8; - stringPtr = sub_80EB3FC(gStringVar4, oldMan->mauvilleOldMan_ecArray[oldMan->unk1]); - stringPtr = StringCopy(stringPtr, gOtherText_Is); - stringPtr = StringCopy(stringPtr, (u8 *)gUnknown_083E5388[random]); - StringCopy(stringPtr, gOtherText_DontYouAgree); - } - else - { - StringCopy(gStringVar4, (u8 *)gUnknown_083E53A8[oldMan->mauvilleOldMan_ecArray2[oldMan->unk2++]]); - } - if(!(Random() % 10)) - oldMan->unk1 = 10; - else - oldMan->unk1++; - - gScriptResult = TRUE; -} diff --git a/src/menu.c b/src/menu.c deleted file mode 100644 index ef458124b..000000000 --- a/src/menu.c +++ /dev/null @@ -1,871 +0,0 @@ -#include "global.h" -#include "menu.h" -#include "main.h" -#include "map_obj_lock.h" -#include "menu_cursor.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "strings.h" -#include "text.h" -#include "text_window.h" -#include "string_util.h" - -struct Menu -{ - u8 left; - u8 top; - s8 cursorPos; - s8 minCursorPos; - s8 maxCursorPos; - u8 width; - u8 height; - u8 menu_field_7; - u8 columnXCoords[8]; -}; - -static void MultistepInitMenuWindowInternal(const struct WindowConfig *, u16); -static void InitMenuWindowInternal(const struct WindowConfig *, u16); -static bool8 sub_80723D4(void); -static u8 sub_8072484(u8, u8, u8, u8, u8, u8, u32); -static u8 sub_80724F4(u8, u8, u8, const struct MenuAction[], u8); -static void sub_8072620(u8, u8, u8, const struct MenuAction[], u8); -static void sub_8072D18(u8, u8); - -static struct Menu gMenu; - -EWRAM_DATA struct Window gMenuWindow = {0}; -EWRAM_DATA u8 gFiller_202E908[0x90] = {0}; -EWRAM_DATA struct Window *gMenuWindowPtr = NULL; -EWRAM_DATA u8 gMenuMultistepInitState = 0; -EWRAM_DATA u16 gMenuTextTileOffset = 0; -EWRAM_DATA u16 gMenuTextWindowTileOffset = 0; -EWRAM_DATA u16 gMenuTextWindowContentTileOffset = 0; -EWRAM_DATA u16 gMenuMessageBoxContentTileOffset = 0; - -const struct MenuAction gMenuYesNoItems[] = -{ - { OtherText_Yes, NULL }, - { OtherText_No, NULL }, -}; - -void CloseMenu(void) -{ - PlaySE(SE_SELECT); - MenuZeroFillScreen(); - sub_8064E2C(); - ScriptContext2_Disable(); - HandleDestroyMenuCursors(); -} - -void AppendToList(u8 *list, u8 *pindex, u32 value) -{ - list[*pindex] = value; - (*pindex)++; -} - -void InitMenuWindow(const struct WindowConfig *winConfig) -{ - InitMenuWindowInternal(winConfig, 1); -} - -void MultistepInitMenuWindowBegin(const struct WindowConfig *winConfig) -{ - MultistepInitMenuWindowInternal(winConfig, 1); -} - -static void MultistepInitMenuWindowInternal(const struct WindowConfig *winConfig, u16 tileOffset) -{ - gMenuMultistepInitState = 0; - gMenuTextTileOffset = tileOffset; - gMenuWindowPtr = &gMenuWindow; - InitWindowFromConfig(&gMenuWindow, winConfig); -} - -bool32 MultistepInitMenuWindowContinue(void) -{ - switch (gMenuMultistepInitState) - { - case 0: - gMenuMultistepInitState++; - return 0; - case 1: - gMenuTextWindowTileOffset = MultistepInitWindowTileData(gMenuWindowPtr, gMenuTextTileOffset); - goto next; - case 2: - if (!MultistepLoadFont()) - goto fail; - goto next; - case 3: - gMenuTextWindowContentTileOffset = SetTextWindowBaseTileNum(gMenuTextWindowTileOffset); - next: - gMenuMultistepInitState++; - return 0; - case 4: - LoadTextWindowGraphics(gMenuWindowPtr); - gMenuMessageBoxContentTileOffset = SetMessageBoxBaseTileNum(gMenuTextWindowContentTileOffset); - return 1; - default: - fail: - return 0; - } -} - -static void InitMenuWindowInternal(const struct WindowConfig *winConfig, u16 tileOffset) -{ - gMenuWindowPtr = &gMenuWindow; - InitWindowFromConfig(&gMenuWindow, winConfig); - gMenuTextTileOffset = tileOffset; - gMenuTextWindowTileOffset = InitWindowTileData(gMenuWindowPtr, gMenuTextTileOffset); - gMenuTextWindowContentTileOffset = SetTextWindowBaseTileNum(gMenuTextWindowTileOffset); - LoadTextWindowGraphics(gMenuWindowPtr); - gMenuMessageBoxContentTileOffset = SetMessageBoxBaseTileNum(gMenuTextWindowContentTileOffset); -} - -void unref_sub_8071DA4(struct WindowConfig *winConfig, u16 tileOffset) -{ - gMenuWindowPtr = &gMenuWindow; - InitWindowFromConfig(&gMenuWindow, winConfig); - gMenuTextWindowTileOffset = tileOffset; - gMenuTextWindowContentTileOffset = SetTextWindowBaseTileNum(gMenuTextWindowTileOffset); - LoadTextWindowGraphics(gMenuWindowPtr); - gMenuTextTileOffset = SetMessageBoxBaseTileNum(gMenuTextWindowContentTileOffset); - gMenuMessageBoxContentTileOffset = InitWindowTileData(gMenuWindowPtr, gMenuTextTileOffset); -} - -void MenuLoadTextWindowGraphics_OverrideFrameType(u8 frameType) -{ - LoadTextWindowGraphics_OverrideFrameType(gMenuWindowPtr, frameType); -} - -void MenuLoadTextWindowGraphics(void) -{ - LoadTextWindowGraphics(gMenuWindowPtr); -} - -void BasicInitMenuWindow(const struct WindowConfig *winConfig) -{ - InitWindowFromConfig(gMenuWindowPtr, winConfig); - gMenuWindowPtr->tileDataStartOffset = gMenuTextTileOffset; -} - -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) -{ - ZeroFillWindowRect(gMenuWindowPtr, a1, a2, a3, a4); -} - -void MenuFillWindowRectWithBlankTile(u8 left, u8 top, u8 right, u8 bottom) -{ - FillWindowRectWithBlankTile(gMenuWindowPtr, left, top, right, bottom); -} - -void MenuZeroFillScreen(void) -{ - MenuZeroFillWindowRect(0, 0, 29, 19); -} - -void MenuDrawTextWindow(u8 left, u8 top, u8 right, u8 bottom) -{ - DrawTextWindow(gMenuWindowPtr, left, top, right, bottom); -} - -void sub_8071F40(const u8 *str) -{ - MenuDrawTextWindow(2, 14, 28, 19); - MenuPrint(str, 3, 15); -} - -void sub_8071F60(u8 a1, u8 a2, u8 a3) -{ - sub_8003490(gMenuWindowPtr, a1, gMenuTextTileOffset, a2, a3); -} - -u16 unref_sub_8071F98(u8 x, u8 y) -{ - return GetWindowTilemapEntry(gMenuWindowPtr, x, y); -} - -void unref_sub_8071FBC(u16 a1, u8 a2, u8 a3, u8 a4, u8 a5) -{ - DrawWindowRect(gMenuWindowPtr, a1, a2, a3, a4, a5); -} - -void MenuDisplayMessageBox(void) -{ - DisplayMessageBox(gMenuWindowPtr); -} - -void MenuPrintMessage(const u8 *str, u8 left, u8 top) -{ - sub_8002EB0(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); -} - -void sub_8072044(const u8 *str) -{ - sub_8002EB0(gMenuWindowPtr, str, gMenuTextTileOffset, 2, 15); -} - -void MenuSetText(const u8 *str) -{ - sub_8002E90(gMenuWindowPtr, str); -} - -u8 MenuUpdateWindowText(void) -{ - return sub_80035AC(gMenuWindowPtr); -} - -u8 unref_sub_8072098(void) -{ - return sub_8003418(gMenuWindowPtr); -} - -void sub_80720B0(void) -{ - ClearWindowTextLines(gMenuWindowPtr); -} - -u8 MoveMenuCursor(s8 delta) -{ - s32 newPos = gMenu.cursorPos + delta; - - if (newPos < gMenu.minCursorPos) - gMenu.cursorPos = gMenu.maxCursorPos; - else if (newPos > gMenu.maxCursorPos) - gMenu.cursorPos = gMenu.minCursorPos; - else - gMenu.cursorPos += delta; - - RedrawMenuCursor(gMenu.left, 2 * gMenu.cursorPos + gMenu.top); - return gMenu.cursorPos; -} - -u8 MoveMenuCursorNoWrap(s8 delta) -{ - s32 newPos = gMenu.cursorPos + delta; - - if (newPos < gMenu.minCursorPos) - gMenu.cursorPos = gMenu.minCursorPos; - else if (newPos > gMenu.maxCursorPos) - gMenu.cursorPos = gMenu.maxCursorPos; - else - gMenu.cursorPos += delta; - - RedrawMenuCursor(gMenu.left, 2 * gMenu.cursorPos + gMenu.top); - return gMenu.cursorPos; -} - -u8 GetMenuCursorPos(void) -{ - return gMenu.cursorPos; -} - -s8 ProcessMenuInput(void) -{ - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if (gMenu.menu_field_7) - HandleDestroyMenuCursors(); - return gMenu.cursorPos; - } - - if (gMain.newKeys & B_BUTTON) - { - if (gMenu.menu_field_7) - HandleDestroyMenuCursors(); - return -1; - } - - if (gMain.newKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - MoveMenuCursor(-1); - return -2; - } - else if (gMain.newKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - MoveMenuCursor(1); - return -2; - } - - return -2; -} - -s8 ProcessMenuInputNoWrap(void) -{ - u8 cursorPos = gMenu.cursorPos; - - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if (gMenu.menu_field_7) - HandleDestroyMenuCursors(); - return gMenu.cursorPos; - } - - if (gMain.newKeys & B_BUTTON) - { - if (gMenu.menu_field_7) - HandleDestroyMenuCursors(); - return -1; - } - - if (gMain.newKeys & DPAD_UP) - { - if (cursorPos != MoveMenuCursorNoWrap(-1)) - PlaySE(SE_SELECT); - return -2; - } - else if (gMain.newKeys & DPAD_DOWN) - { - if (cursorPos != MoveMenuCursorNoWrap(1)) - PlaySE(SE_SELECT); - return -2; - } - - MoveMenuCursorNoWrap(0); - return -2; -} - -u8 MoveMenuCursor3(s8 delta) -{ - u8 menuHeight = (gMenu.maxCursorPos + 1) >> 1; - s32 newPos = gMenu.cursorPos + delta; - - if (newPos < gMenu.minCursorPos) - gMenu.cursorPos = gMenu.maxCursorPos; - else if (newPos > gMenu.maxCursorPos) - gMenu.cursorPos = gMenu.minCursorPos; - else - gMenu.cursorPos += delta; - - RedrawMenuCursor( - 6 * (gMenu.cursorPos / menuHeight) + gMenu.left, - 2 * (gMenu.cursorPos % menuHeight) + gMenu.top); - - return gMenu.cursorPos; -} - -u8 MoveMenuCursor4(s8 delta) -{ - if (gMenu.cursorPos + delta <= gMenu.maxCursorPos) - { - if (sub_80723D4() == TRUE) - return gMenu.cursorPos; - } - else - { - return gMenu.cursorPos; - } - - gMenu.cursorPos += delta; - - if ((gMenu.maxCursorPos + 1) / gMenu.width == 0) - RedrawMenuCursor( - gMenu.left + gMenu.columnXCoords[gMenu.cursorPos % gMenu.width], - 2 * ((gMenu.cursorPos / gMenu.width) % gMenu.height) + gMenu.top); - else - RedrawMenuCursor( - gMenu.left + gMenu.columnXCoords[gMenu.cursorPos % gMenu.width], - 2 * (gMenu.cursorPos / gMenu.width) + gMenu.top); - - return gMenu.cursorPos; -} - -static bool8 sub_80723D4(void) -{ - if ((gMain.newKeys & DPAD_UP) && gMenu.cursorPos < gMenu.width) - return TRUE; - - if ((gMain.newKeys & DPAD_DOWN) && gMenu.cursorPos >= (gMenu.maxCursorPos + 1) - gMenu.width) - return TRUE; - - if ((gMain.newKeys & DPAD_LEFT) - && ((gMenu.cursorPos - (gMenu.cursorPos % gMenu.width)) % gMenu.width == 1 // always false - || gMenu.cursorPos == 0 - || gMenu.cursorPos % gMenu.width == 0)) - return TRUE; - - if ((gMain.newKeys & DPAD_RIGHT) && gMenu.cursorPos % gMenu.width == gMenu.width - 1) - return TRUE; - - return FALSE; -} - -static u8 sub_8072484(u8 a1, u8 a2, u8 menuItemCount, u8 a4, u8 width, u8 a6, u32 a7) -{ - u8 v7; - - gMenu.width = width; - gMenu.height = menuItemCount / width; - InitMenu(0, a1, a2, menuItemCount, a4, a6); - v7 = 0; - if (a7) - v7 = -1; - gMenu.menu_field_7 = v7; - return a4; -} - -static u8 sub_80724F4(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], u8 columnCount) -{ - u8 i; - u8 maxWidth; - s32 height; - - for (i = 0; i < 7; i++) - gMenu.columnXCoords[i] = 0; - - maxWidth = 0; - for (i = 0; i < menuItemCount; i++) - { - u8 width = (sub_8072CA4(menuItems[i].text) + 7) / 8; - - if (width > maxWidth) - maxWidth = width; - } - - for (i = 1; i <= columnCount; i++) - gMenu.columnXCoords[i] = maxWidth; - - for (i = 1; i <= columnCount; i++) - gMenu.columnXCoords[i] += 1 + gMenu.columnXCoords[i - 1]; - - gMenu.columnXCoords[columnCount]--; - - if (!((menuItemCount / 2) < columnCount || (menuItemCount % 2 != 0)) - || columnCount == 1 - || columnCount == menuItemCount) - { - height = 2 * (menuItemCount / columnCount) + 1; - } - else - { - height = 2 * ((menuItemCount / columnCount) + 1) + 1; - } - - { - // TODO: Make this code less hideous but still match the original asm. - u8 right; - u8 bottom; - u32 totalWidth; - register s32 val asm("r1"); - - val = (s8)top + height; - val = val << 24; - asm("" ::: "r3"); - bottom = val >> 24; - - totalWidth = (gMenu.columnXCoords[columnCount] + 1); - right = left + totalWidth; - - MenuDrawTextWindow(left, top, right, bottom); - } - - return maxWidth; -} - -static void sub_8072620(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], u8 columnCount) -{ - u8 i; - u8 maxWidth; - - for (i = 0; i < 7; i++) - gMenu.columnXCoords[i] = 0; - - maxWidth = 0; - for (i = 0; i < menuItemCount; i++) - { - u8 width = (sub_8072CA4(menuItems[i].text) + 7) / 8; - - if (width > maxWidth) - maxWidth = width; - } - - for (i = 1; i <= columnCount; i++) - gMenu.columnXCoords[i] = maxWidth; - - for (i = 1; i <= columnCount; i++) - gMenu.columnXCoords[i] += 1 + gMenu.columnXCoords[i - 1]; - - gMenu.columnXCoords[columnCount]--; - - for (i = 0; i < columnCount; i++) - { - u8 row = 0; - u8 j; - for (j = 0; i + j < menuItemCount; j += columnCount, row++) - MenuPrint(menuItems[i + j].text, left + gMenu.columnXCoords[i % columnCount], top + 2 * row); - } -} - -void sub_807274C(u8 left, u8 top, u8 menuItemCount, u8 a4, const struct MenuAction menuItems[], u8 columnCount, u32 a7) -{ - u8 maxWidth = sub_80724F4(left, top, menuItemCount, menuItems, columnCount); - - sub_8072484(left + 1, top + 1, menuItemCount, a4, columnCount, maxWidth, a7); - sub_8072620(left + 1, top + 1, menuItemCount, menuItems, columnCount); -} - -s8 sub_80727CC(void) -{ - if (gMain.newKeys & A_BUTTON) - { - if (gMenu.menu_field_7) - HandleDestroyMenuCursors(); - PlaySE(SE_SELECT); - return GetMenuCursorPos(); - } - - if (gMain.newKeys & B_BUTTON) - { - if (gMenu.menu_field_7) - HandleDestroyMenuCursors(); - return -1; - } - - if (gMain.newKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - MoveMenuCursor4(-gMenu.width); - return -2; - } - else if (gMain.newKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - MoveMenuCursor4(gMenu.width); - return -2; - } - else if (gMain.newKeys & DPAD_LEFT) - { - PlaySE(SE_SELECT); - MoveMenuCursor4(-1); - return -2; - } - else if (gMain.newKeys & DPAD_RIGHT) - { - PlaySE(SE_SELECT); - MoveMenuCursor4(1); - return -2; - } - - return -2; -} - -u8 sub_807288C(u8 column) -{ - return gMenu.columnXCoords[column]; -} - -void PrintMenuItems(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[]) -{ - u8 i; - - for (i = 0; i < menuItemCount; i++) - MenuPrint(menuItems[i].text, left, top + 2 * i); -} - -void PrintMenuItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], const u8 *order) -{ - u8 i; - - for (i = 0; i < menuItemCount; i++) - MenuPrint(menuItems[order[i]].text, left, top + 2 * i); -} - -void InitYesNoMenu(u8 left, u8 top, u8 a3) -{ - PrintMenuItems(left + 1, top + 1, 2, gMenuYesNoItems); - InitMenu(0, left + 1, top + 1, 2, 0, a3); -} - -void DisplayYesNoMenu(u8 left, u8 top, u32 a3) -{ - MenuDrawTextWindow(left, top, left + 6, top + 5); - InitYesNoMenu(left, top, 5); - gMenu.menu_field_7 = a3 ? -1 : 0; -} - -s8 ProcessMenuInputNoWrap_(void) -{ - return ProcessMenuInputNoWrap(); -} - -u8 MenuPrint_PixelCoords(const u8 *text, u8 left, u16 top, u8 a4) -{ - return sub_8004D04(gMenuWindowPtr, text, gMenuTextTileOffset, left, top, a4); -} - -u8 sub_8072A18(const u8 *text, u8 left, u16 top, u8 width, u32 a5) -{ - return sub_8004FD0(gMenuWindowPtr, 0, text, gMenuTextTileOffset, left, top, width, a5); -} - -u8 unref_sub_8072A5C(u8 *dest, u8 *src, u8 left, u16 top, u8 width, u32 a6) -{ - return sub_8004FD0(gMenuWindowPtr, dest, src, gMenuTextTileOffset, left, top, width, a6); -} - -#if ENGLISH -int sub_8072AB0(const u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6) -{ - u8 newlineCount = sub_8004FD0(gMenuWindowPtr, NULL, str, gMenuTextTileOffset, left, top, width, a6); - - left /= 8; - top /= 8; - width = (width + 7) / 8; - height = (height + 7) / 8; - - if (newlineCount < height) - MenuFillWindowRectWithBlankTile(left, top + 2 * newlineCount, left + width - 1, height + top - 1); -} -#elif GERMAN -__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\ -_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\ -_08072B0A:\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\ -_08072B3E:\n\ - add sp, 0x10\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); -} -#endif - -void MenuPrint_RightAligned(const u8 *str, u8 left, u8 top) -{ - sub_8004D38(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); -} - -void sub_8072B80(const u8 *a1, u8 a2, u8 a3, const u8 *a4) -{ - u8 buffer[64]; - u8 width = GetStringWidth(gMenuWindowPtr, a4); - AlignString(gMenuWindowPtr, buffer, a1, width, 1); - sub_8003460(gMenuWindowPtr, buffer, gMenuTextTileOffset, a2, a3); -} - -void sub_8072BD8(const u8 *a1, u8 a2, u8 a3, u16 a4) -{ - sub_8004DB0(gMenuWindowPtr, a1, gMenuTextTileOffset, a2, a3, a4); -} - -u8 *sub_8072C14(u8 *a1, s32 a2, u8 a3, u8 a4) -{ - return AlignInt1(gMenuWindowPtr, a1, a2, a3, a4); -} - -u8 *sub_8072C44(u8 *a1, s32 a2, u8 a3, u8 a4) -{ - return AlignInt2(gMenuWindowPtr, a1, a2, a3, a4); -} - -u8 *sub_8072C74(u8 *a1, const u8 *a2, u8 a3, u8 a4) -{ - return AlignString(gMenuWindowPtr, a1, a2, a3, a4); -} - -u8 sub_8072CA4(const u8 *str) -{ - return GetStringWidth(gMenuWindowPtr, str); -} - -u8 sub_8072CBC() -{ - return sub_8004E24(gMenuWindowPtr); -} - -void sub_8072CD4(u8 *a1, u8 *a2, u8 *a3) -{ - sub_8004E28(gMenuWindowPtr, a1, a2, a3); -} - -u32 MenuUpdateWindowText_OverrideLineLength(u8 lineLength) -{ - return sub_80037C8(gMenuWindowPtr, lineLength); -} - -struct Window *unref_sub_8072D0C(void) -{ - return gMenuWindowPtr; -} - -static void sub_8072D18(u8 a1, u8 a2) -{ - sub_814A5C0(a1, 0xFFFF, 12, 11679, 8 * a2); -} - -u8 InitMenu(u8 cursorSubpriority, u8 left, u8 top, u8 numChoices, u8 cursorPos, u8 cursorWidth) -{ - s32 pos; - - if (cursorWidth) - sub_8072D18(cursorSubpriority, cursorWidth); - - gMenu.left = left - 1; - gMenu.top = top; - gMenu.minCursorPos = 0; - gMenu.maxCursorPos = numChoices - 1; - gMenu.menu_field_7 = 0; - - pos = cursorPos; - - if (pos < 0 || pos > gMenu.maxCursorPos) - pos = 0; - - gMenu.cursorPos = pos; - MoveMenuCursor(0); - - return pos; -} - -void RedrawMenuCursor(u8 a1, u8 a2) -{ - sub_814A880((a1 + 1) * 8, 8 * a2); -} - -void unref_sub_8072DC0() -{ - sub_814A904(); -} - -void sub_8072DCC(u8 a1) -{ - sub_814A958(a1); -} - -void sub_8072DDC(u8 a1) -{ - sub_8072DCC(8 * a1); -} - -void HandleDestroyMenuCursors(void) -{ - DestroyMenuCursor(); -} - -#if GERMAN -void de_sub_8073110(u8 * buffer, u8 * name) { - u8 * ptr, *ptr2, *ptr3; - - ptr2 = buffer; - ptr = &gStringVar1[1 + StringLengthN(gStringVar1, 256)]; - ptr3 = ptr; - - for (;;) - { - if (*ptr2 == EOS) - break; - - if (*ptr2 == 0xFD) - { - - *ptr3 = EOS; - ptr2 += 2; - - StringAppend(ptr, name); - StringAppend(ptr, ptr2); - - buffer[0] = EOS; - StringAppend(buffer, ptr); - break; - } - - *ptr3 = *ptr2; - ptr2 += 1; - ptr3 += 1; - } -} - -u8 *de_sub_8073174(u8 *name, const u8 *format) { - u32 offset; - u8 *ptr; - - offset = StringLengthN(gStringVar2, 0x100); - ptr = &gStringVar2[1 + offset]; - - StringCopy(ptr, format); - - de_sub_8073110(ptr, name); - - return StringCopy(name, ptr); -} -#endif diff --git a/src/menu_cursor.c b/src/menu_cursor.c deleted file mode 100644 index 64ab36573..000000000 --- a/src/menu_cursor.c +++ /dev/null @@ -1,798 +0,0 @@ -#include "global.h" -#include "menu_cursor.h" -#include "palette.h" -#include "sprite.h" - -extern const struct SpriteSheet gUnknown_0842F140[]; -extern const struct SpriteSheet gUnknown_0842F1C0[]; -extern const struct SpritePalette gUnknown_0842F240; -extern const struct SpritePalette gUnknown_0842F248; -extern const struct SpriteTemplate gSpriteTemplate_842F250[]; -extern const struct SpriteTemplate gSpriteTemplate_842F298[]; - -extern struct Subsprite *const gUnknown_0842F5BC[]; - -extern const struct SubspriteTable gSubspriteTables_842F5C0[]; -extern const struct SubspriteTable gSubspriteTables_842F6C0[]; -extern const struct SubspriteTable gUnknown_0842F758[]; - -extern const struct Subsprite gUnknown_0842F780; -extern const struct Subsprite gUnknown_0842F788; -extern const struct Subsprite gUnknown_0842F790; - -extern u16 gUnknown_0203A360[]; - -EWRAM_DATA struct Subsprite gMenuCursorSubsprites[10] = {0}; -EWRAM_DATA u8 gUnknown_0203A3D0 = 0; -EWRAM_DATA u8 gUnknown_0203A3D1 = 0; -EWRAM_DATA u8 gUnknown_0203A3D2 = 0; -EWRAM_DATA u8 gUnknown_0203A3D3 = 0; -EWRAM_DATA u8 gUnknown_0203A3D4 = 0; - -void sub_814A590(void) -{ - gUnknown_0203A3D0 = 0x40; - gUnknown_0203A3D1 = 0x40; - gUnknown_0203A3D2 = 0x40; - gUnknown_0203A3D3 = 0; - gUnknown_0203A3D4 = 0; -} - -u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5) -{ - int v9; - struct Sprite *v10; - - if (gUnknown_0203A3D0 != 0x40 || gUnknown_0203A3D1 != 0x40) - DestroyMenuCursor(); - - v9 = 1; - if (a2 == 0xFFFF) - { - gUnknown_0203A360[a3 & 0xF] = a4; - if (LoadSpritePalette(&gUnknown_0842F240) != 0xFF) - { - a2 = 0xFFF0; - v9 = 0; - } - } - - LoadSpriteSheetDeferred(&gUnknown_0842F140[a3 & 0xF]); - gUnknown_0203A3D0 = CreateSprite(&gSpriteTemplate_842F250[v9], 0, 0xA0, a1); - gUnknown_0203A3D1 = CreateSprite(&gSpriteTemplate_842F250[2], 0, 0xA0, a1); - if (gUnknown_0203A3D0 != 0x40) - { - v10 = &gSprites[gUnknown_0203A3D0]; - if (a2 == 0xFFFF) - v10->oam.paletteNum = 0; - else - v10->oam.paletteNum = IndexOfSpritePaletteTag(a2); - } - if (gUnknown_0203A3D1 != 0x40) - { - v10 = &gSprites[gUnknown_0203A3D1]; - if (a2 == 0xFFFF) - v10->oam.paletteNum = 0; - else - v10->oam.paletteNum = IndexOfSpritePaletteTag(a2); - - if (!(REG_DISPCNT & (DISPCNT_WIN0_ON | DISPCNT_WIN1_ON))) - *(u8 *)(REG_ADDR_WINOUT) |= 0x1F; - gUnknown_0203A3D3 = REG_DISPCNT >> 0xF; - gUnknown_0203A3D4 = *(u8 *)(REG_BASE + REG_OFFSET_WINOUT + 1); - REG_DISPCNT |= DISPCNT_OBJWIN_ON; - *(u8 *)(REG_ADDR_WINOUT + 1) = 0x10; - } - sub_814A958(a5); - return gUnknown_0203A3D0; -} - -u8 sub_814A758(u8 a1, u8 a2, u8 a3, u8 a4) -{ - u8 result; - struct Sprite *spr; - - result = sub_814A5C0(a1, 0, a3, 0, a4); - if (result != 0x40) - { - spr = &gSprites[gUnknown_0203A3D0]; - spr->oam.paletteNum = a2; - } - return result; -} - -u8 unref_sub_814A7AC(u8 a1, u16 a2, u8 a3) -{ - u16 i; - u8 val1 = 0; - u16 val2 = 0xF; - - for (i = 0; i <= 0xFF; i++) - { - if (gPlttBufferUnfaded[i] == a2) - { - val1 = (u8)(i >> 4); - val2 = i & 0xF; - } - } - - return sub_814A758(a1, val1, val2, a3); -} - -void DestroyMenuCursor(void) -{ - if (gUnknown_0203A3D0 != 0x40) - { - LoadTilesForSpriteSheet(&gUnknown_0842F140[0]); - DestroySpriteAndFreeResources(&gSprites[gUnknown_0203A3D0]); - gUnknown_0203A3D0 = 0x40; - } - - if (gUnknown_0203A3D1 != 0x40) - { - DestroySpriteAndFreeResources(&gSprites[gUnknown_0203A3D1]); - gUnknown_0203A3D1 = 0x40; - if (!gUnknown_0203A3D3) - REG_DISPCNT &= ~DISPCNT_OBJWIN_ON; - *(u8 *)(REG_BASE + REG_OFFSET_WINOUT + 1) = gUnknown_0203A3D4; - } - - return; -} - -void sub_814A880(u8 a1, u8 a2) -{ - struct Sprite *spr; - - if (gUnknown_0203A3D0 != 0x40) - { - spr = &gSprites[gUnknown_0203A3D0]; - spr->invisible = 0; - spr->centerToCornerVecX = 0; - spr->centerToCornerVecY = 0; - spr->pos1.x = a1; - spr->pos1.y = a2; - } - - if (gUnknown_0203A3D1 != 0x40) - { - spr = &gSprites[gUnknown_0203A3D1]; - spr->invisible = 0; - spr->centerToCornerVecX = 0; - spr->centerToCornerVecY = 0; - spr->pos1.x = a1; - spr->pos1.y = a2; - } - - return; -} - -void sub_814A904(void) -{ - struct Sprite *spr; - - if (gUnknown_0203A3D0 != 0x40) - { - spr = &gSprites[gUnknown_0203A3D0]; - spr->invisible = 1; - } - - if (gUnknown_0203A3D1 != 0x40) - { - spr = &gSprites[gUnknown_0203A3D1]; - spr->invisible = 1; - } - - return; -} - -#ifdef NONMATCHING -// Fix pls -void sub_814A958(u8 a1) -{ - 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) - { - do - { - if (v6 > 0x1F) - { - *cursub = gUnknown_0842F780; - cursub->x = v3; - v3 = ((v3 << 16) + 0x200000) >> 16; - v7 = a1 << 16; - } - 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; - } - } - - cursub++; - v2 = v2 + 1; - v6 = ((v7 >> 16) - v3) & 0xFFFF; - } - while (v7 - v3 > 7); - } - *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; -} -#elif ENGLISH -__attribute__((naked)) -void sub_814A958(u8 a1) -{ - 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\ - lsls r0, 24\n\ - ldr r4, _0814A9C4\n\ - ldr r2, _0814A9C8\n\ - lsrs r0, 24\n\ - str r0, [sp]\n\ - movs r0, 0\n\ - movs r1, 0\n\ - movs r1, 0x2\n\ - str r0, [r4]\n\ - str r1, [r4, 0x4]\n\ - strh r2, [r4]\n\ - adds r4, 0x8\n\ - movs r7, 0x1\n\ - movs r2, 0x1\n\ - ldr r1, [sp]\n\ - subs r0, r1, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x7\n\ - ble _0814AA3A\n\ - ldr r0, _0814A9CC\n\ - mov r12, r0\n\ - mov r8, r1\n\ - movs r1, 0x8\n\ - negs r1, r1\n\ - mov r10, r1\n\ - ldr r5, _0814A9D0\n\ - mov r9, r5\n\ -_0814A99E:\n\ - lsls r0, r3, 16\n\ - asrs r3, r0, 16\n\ - cmp r3, 0x1F\n\ - ble _0814A9D4\n\ - mov r6, r12\n\ - ldr r0, [r6]\n\ - ldr r1, [r6, 0x4]\n\ - str r0, [r4]\n\ - str r1, [r4, 0x4]\n\ - strh r2, [r4]\n\ - lsls r0, r2, 16\n\ - movs r1, 0x80\n\ - lsls r1, 14\n\ - adds r0, r1\n\ - lsrs r2, r0, 16\n\ - ldr r3, [sp]\n\ - lsls r5, r3, 16\n\ - b _0814AA20\n\ - .align 2, 0\n\ -_0814A9C4: .4byte gMenuCursorSubsprites\n\ -_0814A9C8: .4byte 0x0000ffff\n\ -_0814A9CC: .4byte gUnknown_0842F780\n\ -_0814A9D0: .4byte gUnknown_0842F788\n\ -_0814A9D4:\n\ - ldr r6, [sp]\n\ - lsls r5, r6, 16\n\ - mov r0, r8\n\ - cmp r0, 0x27\n\ - ble _0814AA0A\n\ - cmp r3, 0x8\n\ - ble _0814AA0A\n\ - mov r6, r12\n\ - ldr r0, [r6]\n\ - ldr r1, [r6, 0x4]\n\ - str r0, [r4]\n\ - str r1, [r4, 0x4]\n\ - lsls r1, r2, 16\n\ - asrs r1, 16\n\ - adds r2, r1, 0\n\ - subs r2, 0x20\n\ - adds r0, r3, 0\n\ - mov r6, r10\n\ - ands r0, r6\n\ - adds r2, r0\n\ - strh r2, [r4]\n\ - movs r0, 0x18\n\ - ands r0, r3\n\ - adds r1, r0\n\ - lsls r1, 16\n\ - lsrs r2, r1, 16\n\ - b _0814AA20\n\ -_0814AA0A:\n\ - mov r3, r9\n\ - ldr r0, [r3]\n\ - ldr r1, [r3, 0x4]\n\ - str r0, [r4]\n\ - str r1, [r4, 0x4]\n\ - strh r2, [r4]\n\ - lsls r0, r2, 16\n\ - movs r6, 0x80\n\ - lsls r6, 12\n\ - adds r0, r6\n\ - lsrs r2, r0, 16\n\ -_0814AA20:\n\ - adds r4, 0x8\n\ - adds r0, r7, 0x1\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - asrs r1, r5, 16\n\ - lsls r0, r2, 16\n\ - asrs r0, 16\n\ - subs r1, r0\n\ - lsls r1, 16\n\ - lsrs r3, r1, 16\n\ - asrs r1, 16\n\ - cmp r1, 0x7\n\ - bgt _0814A99E\n\ -_0814AA3A:\n\ - ldr r5, _0814AAA8\n\ - ldr r0, [r5]\n\ - ldr r1, [r5, 0x4]\n\ - str r0, [r4]\n\ - str r1, [r4, 0x4]\n\ - lsls r1, r2, 16\n\ - asrs r1, 16\n\ - subs r1, 0x7\n\ - lsls r0, r3, 16\n\ - asrs r0, 16\n\ - adds r0, r1\n\ - strh r0, [r4]\n\ - adds r0, r7, 0x1\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - ldr r6, _0814AAAC\n\ - ldrb r0, [r6]\n\ - cmp r0, 0x40\n\ - beq _0814AA78\n\ - adds r1, r0, 0\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r1, _0814AAB0\n\ - adds r2, r0, r1\n\ - lsls r1, r7, 3\n\ - ldr r0, _0814AAB4\n\ - adds r1, r0\n\ - adds r0, r2, 0\n\ - bl SetSubspriteTables\n\ -_0814AA78:\n\ - ldr r1, _0814AAB8\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x40\n\ - beq _0814AA98\n\ - adds r1, r0, 0\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r1, _0814AAB0\n\ - adds r2, r0, r1\n\ - lsls r1, r7, 3\n\ - ldr r0, _0814AAB4\n\ - adds r1, r0\n\ - adds r0, r2, 0\n\ - bl SetSubspriteTables\n\ -_0814AA98:\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\ -_0814AAA8: .4byte gUnknown_0842F790\n\ -_0814AAAC: .4byte gUnknown_0203A3D0\n\ -_0814AAB0: .4byte gSprites\n\ -_0814AAB4: .4byte gSubspriteTables_842F5C0\n\ -_0814AAB8: .4byte gUnknown_0203A3D1\n\ - .syntax divided\n"); -} -#elif GERMAN -__attribute__((naked)) -void sub_814A958(u8 a1) -{ - 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\ - lsls r0, 24\n\ - ldr r4, _0814A9C4 @ =gMenuCursorSubsprites\n\ - ldr r2, _0814A9C8 @ =0x0000ffff\n\ - lsrs r0, 24\n\ - str r0, [sp]\n\ - ldr r0, _0814A9CC @ =gUnknown_0842F780\n\ - ldr r1, [r0, 0x4]\n\ - ldr r0, [r0]\n\ - str r0, [r4]\n\ - str r1, [r4, 0x4]\n\ - strh r2, [r4]\n\ - adds r4, 0x8\n\ - movs r7, 0x1\n\ - movs r2, 0x1\n\ - ldr r1, [sp]\n\ - subs r0, r1, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x7\n\ - ble _0814AA3E\n\ - ldr r0, _0814A9D0 @ =gUnknown_0842F788\n\ - mov r12, r0\n\ - mov r8, r1\n\ - movs r1, 0x8\n\ - negs r1, r1\n\ - mov r10, r1\n\ - ldr r5, _0814A9D4 @ =gUnknown_0842F790\n\ - mov r9, r5\n\ -_0814A99E:\n\ - lsls r0, r3, 16\n\ - asrs r3, r0, 16\n\ - cmp r3, 0x1F\n\ - ble _0814A9D8\n\ - mov r6, r12\n\ - ldr r0, [r6]\n\ - ldr r1, [r6, 0x4]\n\ - str r0, [r4]\n\ - str r1, [r4, 0x4]\n\ - strh r2, [r4]\n\ - lsls r0, r2, 16\n\ - movs r1, 0x80\n\ - lsls r1, 14\n\ - adds r0, r1\n\ - lsrs r2, r0, 16\n\ - ldr r3, [sp]\n\ - lsls r5, r3, 16\n\ - b _0814AA24\n\ - .align 2, 0\n\ -_0814A9C4: .4byte gMenuCursorSubsprites\n\ -_0814A9C8: .4byte 0x0000ffff\n\ -_0814A9CC: .4byte gUnknown_0842F780\n\ -_0814A9D0: .4byte gUnknown_0842F788\n\ -_0814A9D4: .4byte gUnknown_0842F790\n\ -_0814A9D8:\n\ - ldr r6, [sp]\n\ - lsls r5, r6, 16\n\ - mov r0, r8\n\ - cmp r0, 0x27\n\ - ble _0814AA0E\n\ - cmp r3, 0x8\n\ - ble _0814AA0E\n\ - mov r6, r12\n\ - ldr r0, [r6]\n\ - ldr r1, [r6, 0x4]\n\ - str r0, [r4]\n\ - str r1, [r4, 0x4]\n\ - lsls r1, r2, 16\n\ - asrs r1, 16\n\ - adds r2, r1, 0\n\ - subs r2, 0x20\n\ - adds r0, r3, 0\n\ - mov r6, r10\n\ - ands r0, r6\n\ - adds r2, r0\n\ - strh r2, [r4]\n\ - movs r0, 0x18\n\ - ands r0, r3\n\ - adds r1, r0\n\ - lsls r1, 16\n\ - lsrs r2, r1, 16\n\ - b _0814AA24\n\ -_0814AA0E:\n\ - mov r3, r9\n\ - ldr r0, [r3]\n\ - ldr r1, [r3, 0x4]\n\ - str r0, [r4]\n\ - str r1, [r4, 0x4]\n\ - strh r2, [r4]\n\ - lsls r0, r2, 16\n\ - movs r6, 0x80\n\ - lsls r6, 12\n\ - adds r0, r6\n\ - lsrs r2, r0, 16\n\ -_0814AA24:\n\ - adds r4, 0x8\n\ - adds r0, r7, 0x1\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - asrs r1, r5, 16\n\ - lsls r0, r2, 16\n\ - asrs r0, 16\n\ - subs r1, r0\n\ - lsls r1, 16\n\ - lsrs r3, r1, 16\n\ - asrs r1, 16\n\ - cmp r1, 0x7\n\ - bgt _0814A99E\n\ -_0814AA3E:\n\ - ldr r5, _0814AAAC @ =gUnknown_0842F798\n\ - ldr r0, [r5]\n\ - ldr r1, [r5, 0x4]\n\ - str r0, [r4]\n\ - str r1, [r4, 0x4]\n\ - lsls r1, r2, 16\n\ - asrs r1, 16\n\ - subs r1, 0x7\n\ - lsls r0, r3, 16\n\ - asrs r0, 16\n\ - adds r0, r1\n\ - strh r0, [r4]\n\ - adds r0, r7, 0x1\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - ldr r6, _0814AAB0 @ =gUnknown_0203A3D0\n\ - ldrb r0, [r6]\n\ - cmp r0, 0x40\n\ - beq _0814AA7C\n\ - adds r1, r0, 0\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r1, _0814AAB4 @ =gSprites\n\ - adds r2, r0, r1\n\ - lsls r1, r7, 3\n\ - ldr r0, _0814AAB8 @ =gSubspriteTables_842F5C0\n\ - adds r1, r0\n\ - adds r0, r2, 0\n\ - bl SetSubspriteTables\n\ -_0814AA7C:\n\ - ldr r1, _0814AABC @ =gUnknown_0203A3D1\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x40\n\ - beq _0814AA9C\n\ - adds r1, r0, 0\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r1, _0814AAB4 @ =gSprites\n\ - adds r2, r0, r1\n\ - lsls r1, r7, 3\n\ - ldr r0, _0814AAB8 @ =gSubspriteTables_842F5C0\n\ - adds r1, r0\n\ - adds r0, r2, 0\n\ - bl SetSubspriteTables\n\ -_0814AA9C:\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\ -_0814AAAC: .4byte gUnknown_0842F798\n\ -_0814AAB0: .4byte gUnknown_0203A3D0\n\ -_0814AAB4: .4byte gSprites\n\ -_0814AAB8: .4byte gSubspriteTables_842F5C0\n\ -_0814AABC: .4byte gUnknown_0203A3D1\n\ - .syntax divided\n"); -} -#endif - -void sub_814AABC(void (*callback)(struct Sprite *)) -{ - struct Sprite *spr; - - if (gUnknown_0203A3D0 != 0x40) - { - spr = &gSprites[gUnknown_0203A3D0]; - spr->callback = callback; - } - - if (gUnknown_0203A3D1 != 0x40) - { - spr = &gSprites[gUnknown_0203A3D1]; - spr->callback = callback; - } - - return; -} - -void sub_814AAF8(u16 a1) -{ - struct Sprite *spr; - u8 v2; - u8 v3; - u16 v4; - - if (gUnknown_0203A3D0 != 0x40) - { - spr = &gSprites[gUnknown_0203A3D0]; - if (spr->template->paletteTag == 0xFFFF) - { - for (v2 = 0, v3 = 0xF, v4 = 0; v4 <= 0xFF; v4++) - { - if (gPlttBufferUnfaded[v4] == a1) - { - v2 = v4 >> 4; - v3 = v4 & 0xF; - } - } - spr->oam.paletteNum = v2; - RequestSpriteSheetCopy(&gUnknown_0842F140[v3 & 0xF]); - } - } - return; -} - -void sub_814AB84(void) -{ - struct Sprite *spr; - - if (gUnknown_0203A3D1 != 0x40) - { - spr = &gSprites[gUnknown_0203A3D1]; - FreeSpriteOamMatrix(spr); - DestroySprite(spr); - gUnknown_0203A3D1 = 0x40; - - if (!gUnknown_0203A3D3) - REG_DISPCNT &= ~DISPCNT_OBJWIN_ON; - *(u8 *)(REG_ADDR_WINOUT + 1) = gUnknown_0203A3D4; - } - return; -} - -void unref_sub_814ABE4(int a1) -{ - struct Sprite *spr; - - CpuCopy16(gUnknown_0842F5BC[a1], &gMenuCursorSubsprites, 80); - - if (gUnknown_0203A3D0 != 0x40) - { - spr = &gSprites[gUnknown_0203A3D0]; - SetSubspriteTables(spr, &gUnknown_0842F758[a1]); - } - if (gUnknown_0203A3D1 != 0x40) - { - spr = &gSprites[gUnknown_0203A3D1]; - SetSubspriteTables(spr, &gUnknown_0842F758[a1]); - } - return; -} - -u8 CreateBlendedOutlineCursor(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5) -{ - int v8; - struct Sprite *spr; - u8 var1 = gUnknown_0203A3D2; - - if (var1 != 0x40) - sub_814AD44(); - - v8 = 1; - - if (a2 == 0xFFFF) - { - gUnknown_0203A360[a3 & 0xF] = a4; - if (LoadSpritePalette(&gUnknown_0842F248) != 0xFF ) - { - a2 = 0xFFF1; - v8 = 0; - } - } - - LoadSpriteSheetDeferred(&gUnknown_0842F1C0[a3 & 0xF]); -#if ENGLISH - gUnknown_0203A3D2 = CreateSprite(&gSpriteTemplate_842F298[v8], 0, 160, a1); -#elif GERMAN - gUnknown_0203A3D2 = CreateSprite(&gSpriteTemplate_842F298[v8], 0, 161, a1); -#endif - - if (gUnknown_0203A3D2 != 0x40) - { - spr = &gSprites[gUnknown_0203A3D2]; - - if (a2 == 0xFFFF) - spr->oam.paletteNum = 0; - else - spr->oam.paletteNum = IndexOfSpritePaletteTag(a2); - } - sub_814ADF4(a5); - - return gUnknown_0203A3D2; -} - -void sub_814AD44(void) -{ - if (gUnknown_0203A3D2 != 0x40) - { - LoadTilesForSpriteSheet(&gUnknown_0842F1C0[0]); - DestroySpriteAndFreeResources(&gSprites[gUnknown_0203A3D2]); - gUnknown_0203A3D2 = 0x40; - } - return; -} - -void sub_814AD7C(u8 a1, u8 a2) -{ - struct Sprite *spr; - if (gUnknown_0203A3D2 != 0x40) - { - spr = &gSprites[gUnknown_0203A3D2]; - spr->invisible = 0; - spr->centerToCornerVecX = 0; - spr->centerToCornerVecY = 0; - spr->pos1.x = a1; - spr->pos1.y = a2; - } - return; -} - -void sub_814ADC8() -{ - struct Sprite *spr; - if (gUnknown_0203A3D2 != 0x40) - { - spr = &gSprites[gUnknown_0203A3D2]; - spr->invisible = 1; - } - return; -} - -void sub_814ADF4(u8 a1) -{ - if (a1 > 0x12) - a1 = 0; - - if (gUnknown_0203A3D2 != 0x40) - SetSubspriteTables(&gSprites[gUnknown_0203A3D2], &gSubspriteTables_842F6C0[a1]); - return; -} - -#if GERMAN -void nullsub_814B200(void) -{ -} -#endif diff --git a/src/menu_helpers.c b/src/menu_helpers.c deleted file mode 100644 index 9915d67ac..000000000 --- a/src/menu_helpers.c +++ /dev/null @@ -1,572 +0,0 @@ -#include "global.h" -#include "item_menu.h" -#include "items.h" -#include "link.h" -#include "mail_data.h" -#include "main.h" -#include "map_constants.h" -#include "menu.h" -#include "menu_helpers.h" -#include "rom4.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "task.h" -#include "text.h" - -#define SCROLL_INDICATOR_PAL_TAG 6 - -static void sub_80F9834(struct Sprite *sprite); - -static EWRAM_DATA u8 gUnknown_020388C0[4] = {0}; -static EWRAM_DATA struct YesNoFuncTable gUnknown_020388C4 = {0}; - -static TaskFunc gUnknown_0300074C; - -static const u8 gSpriteImage_83E5808[] = INCBIN_U8("graphics/unknown_sprites/83E59A0/0.4bpp"); - -static const u8 gSpriteImage_83E5848[] = INCBIN_U8("graphics/unknown_sprites/83E59A0/1.4bpp"); - -static const u8 gSpriteImage_83E5888[] = INCBIN_U8("graphics/unknown_sprites/83E59B0/0.4bpp"); - -static const u8 gSpriteImage_83E58C8[] = INCBIN_U8("graphics/unknown_sprites/83E59B0/1.4bpp"); - -static const u8 gSpriteImage_83E5908[] = INCBIN_U8("graphics/unknown_sprites/83E59C0/0.4bpp"); - -static const u8 gSpriteImage_83E5928[] = INCBIN_U8("graphics/unknown_sprites/83E59C0/1.4bpp"); - -static const u16 Palette_3E5948[] = INCBIN_U16("graphics/interface/83E5948.gbapal"); - -static const struct SpritePalette gUnknown_083E5968 = { Palette_3E5948, SCROLL_INDICATOR_PAL_TAG }; - -static const struct OamData gOamData_83E5970 = -{ - .tileNum = 1 -}; - -static const struct OamData gOamData_83E5978 = -{ - .shape = ST_OAM_H_RECTANGLE, - .tileNum = 1 -}; - -static const struct OamData gOamData_83E5980 = -{ - .shape = ST_OAM_V_RECTANGLE, - .tileNum = 1 -}; - -static const union AnimCmd gSpriteAnim_83E5988[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END, -}; - -static const union AnimCmd gSpriteAnim_83E5990[] = -{ - ANIMCMD_FRAME(1, 0), - ANIMCMD_END, -}; - -static const union AnimCmd *const gSpriteAnimTable_83E5998[] = -{ - gSpriteAnim_83E5988, - gSpriteAnim_83E5990, -}; - -static const struct SpriteFrameImage gSpriteImageTable_83E59A0[] = -{ - { gSpriteImage_83E5808, 0x40 }, - { gSpriteImage_83E5848, 0x40 }, -}; - -static const struct SpriteFrameImage gSpriteImageTable_83E59B0[] = -{ - { gSpriteImage_83E5888, 0x40 }, - { gSpriteImage_83E58C8, 0x40 }, -}; - -static const struct SpriteFrameImage gSpriteImageTable_83E59C0[] = -{ - { gSpriteImage_83E5908, 0x20 }, - { gSpriteImage_83E5928, 0x20 }, -}; - -static const struct SpriteTemplate gSpriteTemplate_83E59D0 = -{ - .tileTag = 0xFFFF, - .paletteTag = SCROLL_INDICATOR_PAL_TAG, - .oam = &gOamData_83E5978, - .anims = gSpriteAnimTable_83E5998, - .images = gSpriteImageTable_83E59A0, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80F9834, -}; - -static const struct SpriteTemplate gSpriteTemplate_83E59E8 = -{ - .tileTag = 0xFFFF, - .paletteTag = SCROLL_INDICATOR_PAL_TAG, - .oam = &gOamData_83E5980, - .anims = gSpriteAnimTable_83E5998, - .images = gSpriteImageTable_83E59B0, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80F9834, -}; - -static const struct SpriteTemplate gSpriteTemplate_83E5A00 = -{ - .tileTag = 0xFFFF, - .paletteTag = SCROLL_INDICATOR_PAL_TAG, - .oam = &gOamData_83E5970, - .anims = gSpriteAnimTable_83E5998, - .images = gSpriteImageTable_83E59C0, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, -}; - -void sub_80F9020(void) -{ - memset(&gBGTilemapBuffers[1], 0, 0x800); - memset(&gBGTilemapBuffers[2], 0, 0x800); - memset(&gBGTilemapBuffers[3], 0, 0x800); -} - -// display message box, fill box with tile if tile is not zero, print string -static void PrintMessage(const u8 *str, u16 tile) -{ - MenuDisplayMessageBox(); - if (tile) - { - sub_80A3FA0(&gBGTilemapBuffers[1][0], 2, 15, 26, 4, tile); - } - sub_8072044(str); -} - -static void sub_80F9090(u8 taskId) -{ - if (MenuUpdateWindowText() == TRUE) - { - gUnknown_0300074C(taskId); - } -} - -void DisplayItemMessageOnField(u8 taskId, const u8 *str, TaskFunc callback, u16 tile) -{ - PrintMessage(str, tile); - gUnknown_0300074C = callback; - gTasks[taskId].func = sub_80F9090; -} - -static void Task_CallYesOrNoCallback(u8 taskId) -{ - switch (ProcessMenuInputNoWrap_()) - { - case 0: - PlaySE(SE_SELECT); - gUnknown_020388C4.yesFunc(taskId); - break; - case 1: - case -1: - PlaySE(SE_SELECT); - gUnknown_020388C4.noFunc(taskId); - } -} - -void DoYesNoFuncWithChoice(u8 taskId, const struct YesNoFuncTable *funcTable) -{ - gUnknown_020388C4 = *funcTable; - gTasks[taskId].func = Task_CallYesOrNoCallback; -} - -static void PrintStringWithPalette(const u8 *str, u8 paletteNum, u8 left, u8 top) -{ - u8 paletteStr[] = _("{PALETTE 0}"); - - if (paletteNum != 0xFF) - { - paletteStr[2] = paletteNum; - StringCopy(gStringVar4, paletteStr); - StringAppend(gStringVar4, str); - paletteStr[2] = gMenuWindowPtr->paletteNum; - StringAppend(gStringVar4, paletteStr); - } - else - { - StringCopy(gStringVar4, str); - } - - MenuPrint(gStringVar4, left, top); -} - -// unused -void PrintNumberWithPalette(s32 value, u8 paletteNum, u8 n, u8 mode, u8 left, u8 top) -{ - ConvertIntToDecimalStringN(gStringVar1, value, mode, n); - if (paletteNum != 0xFF) - { - PrintStringWithPalette(gStringVar1, paletteNum, left, top); - } - else - { - MenuPrint(gStringVar1, left, top); - } -} - -// unused -void PrintTriangleCursorWithPalette(u8 left, u8 top, u8 paletteNum) -{ - u8 cursorStr[] = _("▶"); - PrintStringWithPalette(cursorStr, paletteNum, left, top); -} - -u8 sub_80F9284(void) -{ - if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR) - { - if (gMain.newKeys & L_BUTTON) - { - return 1; - } - if (gMain.newKeys & R_BUTTON) - { - return 2; - } - } - - return 0; -} - -u8 sub_80F92BC(void) -{ - if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR) - { - if (gMain.newAndRepeatedKeys & L_BUTTON) - { - return 1; - } - if (gMain.newAndRepeatedKeys & R_BUTTON) - { - return 2; - } - } - - return 0; -} - -bool8 sub_80F92F4(u16 itemId) -{ - if (itemId != ITEM_ENIGMA_BERRY) - { - return TRUE; - } - - if (!(gSaveBlock1.location.mapGroup == MAP_GROUP_TRADE_CENTER && gSaveBlock1.location.mapNum == MAP_ID_TRADE_CENTER)) - { - return TRUE; - } - - return FALSE; -} - -bool8 sub_80F931C(u16 itemId) -{ - if (is_c1_link_related_active() != TRUE) - { - return TRUE; - } - - if (ItemIsMail(itemId) != TRUE) - { - return TRUE; - } - - return FALSE; -} - -bool8 sub_80F9344(void) -{ - if (is_c1_link_related_active() == TRUE || gReceivedRemoteLinkPlayers == 1) - { - return TRUE; - } - - return FALSE; -} - -void sub_80F9368(void) -{ - u8 *addr; - u32 size; - - REG_DISPCNT = 0; - REG_BG3CNT = 0; - REG_BG2CNT = 0; - REG_BG1CNT = 0; - REG_BG0CNT = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - - addr = (u8 *)VRAM; - size = 0x18000; - while (1) - { - DmaFill16(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill16(3, 0, addr, size); - break; - } - } - - DmaClear32(3, OAM, OAM_SIZE); - DmaClear16(3, PLTT, PLTT_SIZE); -} - -void sub_80F9438(void) -{ - SetVBlankCallback(NULL); - SetHBlankCallback(NULL); -} - -void sub_80F944C(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - gUnknown_020388C0[i] = 0xFF; - } - - FreeSpritePaletteByTag(SCROLL_INDICATOR_PAL_TAG); - LoadSpritePalette(&gUnknown_083E5968); -} - -void sub_80F9480(u8 *data, u8 n) -{ - u8 i; - - for (i = 0; i < n; i++) - { - data[i] = 0xFF; - } -} - -void sub_80F94A4(u8 animNum, u8 *spriteId, s16 x, s16 y) -{ - if (animNum <= 5) - { - if (*spriteId == 0xFF) - { - *spriteId = CreateSprite(&gSpriteTemplate_83E5A00, x, y, 0); - } - animNum -= 4; - StartSpriteAnim(&gSprites[*spriteId], animNum); - } -} - -void sub_80F94F8(u8 *spriteId) -{ - if (*spriteId != 0xFF) - { - DestroySprite(&gSprites[*spriteId]); - *spriteId = 0xFF; - } -} - -void sub_80F9520(u8 *data, u8 n) -{ - u8 i; - - for (i = 0; i < 8; i++) - { - sub_80F94F8(&data[i]); - } -} - -void CreateVerticalScrollIndicators(u8 id, u16 x, u16 y) -{ - if (id >= 4) - { - return; - } - - switch (id) - { - case 0: - if (gUnknown_020388C0[0] == 0xFF) - { - gUnknown_020388C0[0] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0); - gSprites[gUnknown_020388C0[0]].data2 = -1; - if (gUnknown_020388C0[1] != 0xFF) - { - gSprites[gUnknown_020388C0[0]].pos2.y = gSprites[gUnknown_020388C0[1]].pos2.y * -1; - gSprites[gUnknown_020388C0[0]].data3 = gSprites[gUnknown_020388C0[1]].data3; - } - else - { - gSprites[gUnknown_020388C0[0]].data3 = 0; - } - } - break; - - case 1: - if (gUnknown_020388C0[1] == 0xFF) - { - gUnknown_020388C0[1] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0); - gSprites[gUnknown_020388C0[1]].data2 = 1; - if (gUnknown_020388C0[0] != 0xFF) - { - gSprites[gUnknown_020388C0[1]].pos2.y = gSprites[gUnknown_020388C0[0]].pos2.y * -1; - gSprites[gUnknown_020388C0[1]].data3 = gSprites[gUnknown_020388C0[0]].data3; - } - else - { - gSprites[gUnknown_020388C0[1]].data3 = 0; - } - } - break; - - case 2: - if (gUnknown_020388C0[2] == 0xFF) - { - gUnknown_020388C0[2] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0); - gSprites[gUnknown_020388C0[2]].data0 = -1; - if (gUnknown_020388C0[3] != 0xFF) - { - gSprites[gUnknown_020388C0[2]].pos2.x = gSprites[gUnknown_020388C0[3]].pos2.x * -1; - gSprites[gUnknown_020388C0[2]].data1 = gSprites[gUnknown_020388C0[3]].data1; - } - else - { - gSprites[gUnknown_020388C0[2]].data1 = 0; - } - } - break; - - case 3: - if (gUnknown_020388C0[3] == 0xFF) - { - gUnknown_020388C0[3] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0); - gSprites[gUnknown_020388C0[3]].data0 = 1; - if (gUnknown_020388C0[2] != 0xFF) - { - gSprites[gUnknown_020388C0[3]].pos2.x = gSprites[gUnknown_020388C0[2]].pos2.x * -1; - gSprites[gUnknown_020388C0[3]].data1 = gSprites[gUnknown_020388C0[2]].data1; - } - else - { - gSprites[gUnknown_020388C0[3]].data1 = 0; - } - } - break; - } - - StartSpriteAnim(&gSprites[gUnknown_020388C0[id]], id & 1); -} - -void sub_80F979C(u8 id, bool8 invisible) -{ - if (id < 4 && gUnknown_020388C0[id] != 0xFF) - { - gSprites[gUnknown_020388C0[id]].invisible = invisible; - } -} - -void DestroyVerticalScrollIndicator(u8 id) -{ - if (id < 4 && gUnknown_020388C0[id] != 0xFF) - { - DestroySprite(&gSprites[gUnknown_020388C0[id]]); - gUnknown_020388C0[id] = 0xFF; - } -} - -void LoadScrollIndicatorPalette(void) -{ - LoadSpritePalette(&gUnknown_083E5968); -} - -void BuyMenuFreeMemory(void) -{ - FreeSpritePaletteByTag(SCROLL_INDICATOR_PAL_TAG); -} - -static void sub_80F9834(struct Sprite *sprite) -{ - if (sprite->data1 == 0) - { - sprite->pos2.x += sprite->data0; - } - if (sprite->data3 == 0) - { - sprite->pos2.y += sprite->data2; - } - sprite->data1++; - sprite->data3++; - if (sprite->data1 > 2) - { - sprite->data1 = 0; - } - if (sprite->data3 > 2) - { - sprite->data3 = 0; - } - if (sprite->pos2.x == 8 || sprite->pos2.x == -8) - { - sprite->pos2.x = 0; - } - if (sprite->pos2.y == 8 || sprite->pos2.y == -8) - { - sprite->pos2.y = 0; - } -} - -void sub_80F98A4(u8 id) -{ - if (gUnknown_020388C0[id] != 0xFF && id < 4) - { - gSprites[gUnknown_020388C0[id]].callback = SpriteCallbackDummy; - } -} - -void StartVerticalScrollIndicators(u8 id) -{ - if (gUnknown_020388C0[id] != 0xFF && id < 4) - { - gSprites[gUnknown_020388C0[id]].callback = sub_80F9834; - } -} - -static void sub_80F9914(u8 id) -{ - if (gUnknown_020388C0[id] != 0xFF && id < 4) - { - gSprites[gUnknown_020388C0[id]].pos2.x = 0; - gSprites[gUnknown_020388C0[id]].pos2.y = 0; - gSprites[gUnknown_020388C0[id]].data1 = 0; - gSprites[gUnknown_020388C0[id]].data3 = 0; - } -} - -void PauseVerticalScrollIndicator(u8 id) -{ - sub_80F98A4(id); - sub_80F9914(id); -} - -void sub_80F9988(u8 id, u8 priority) -{ - if (gUnknown_020388C0[id] != 0xFF && id < 4) - { - gSprites[gUnknown_020388C0[id]].oam.priority = priority; - } -} diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c deleted file mode 100644 index d05ba0b89..000000000 --- a/src/metatile_behavior.c +++ /dev/null @@ -1,1308 +0,0 @@ -#include "global.h" -#include "metatile_behavior.h" -#include "metatile_behaviors.h" - -#define TILE_ATTRIBUTES(three, two, one) (((one) ? 1 : 0) | ((two) ? 2 : 0) | ((three) ? 4 : 0)) - -static const u8 sTileBitAttributes[] = -{ - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, TRUE), - TILE_ATTRIBUTES(TRUE, FALSE, TRUE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, TRUE), - TILE_ATTRIBUTES(TRUE, FALSE, TRUE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, TRUE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, TRUE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, TRUE, TRUE), - TILE_ATTRIBUTES(TRUE, TRUE, TRUE), - TILE_ATTRIBUTES(TRUE, TRUE, TRUE), - TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - TILE_ATTRIBUTES(TRUE, TRUE, TRUE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, TRUE, TRUE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, TRUE), - TILE_ATTRIBUTES(TRUE, FALSE, TRUE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, TRUE, TRUE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, TRUE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - TILE_ATTRIBUTES(FALSE, FALSE, FALSE) -}; - -// only used as default case for checking jump landing in field_ground_effect. -bool8 MetatileBehavior_IsATile(u8 var) -{ - return TRUE; -} - -bool8 MetatileBehavior_IsEncounterTile(u8 var) -{ - if ((sTileBitAttributes[var] & 1) != 0) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsJumpEast(u8 var) -{ - if (var == MB_JUMP_EAST) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsJumpWest(u8 var) -{ - if (var == MB_JUMP_WEST) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsJumpNorth(u8 var) -{ - if (var == MB_JUMP_NORTH) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsJumpSouth(u8 var) -{ - if (var == MB_JUMP_SOUTH) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsPokeGrass(u8 var) -{ - if (var == MB_TALL_GRASS || var == MB_LONG_GRASS) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSandOrDeepSand(u8 var) -{ - if (var == MB_SAND || var == MB_DEEP_SAND) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsDeepSand(u8 var) -{ - if (var == MB_DEEP_SAND) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsReflective(u8 var) -{ - if (var == MB_POND_WATER || var == MB_PUDDLE || var == MB_1A || var == MB_ICE || var == MB_SOOTOPOLIS_DEEP_WATER || var == MB_REFLECTION_UNDER_BRIDGE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsIce(u8 var) -{ - if (var == MB_ICE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsWarpDoor(u8 var) -{ - if (var == MB_ANIMATED_DOOR) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsDoor(u8 var) -{ - if (var == MB_8D || var == MB_ANIMATED_DOOR) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsEscalator(u8 var) -{ - if (var == MB_UP_ESCALATOR || var == MB_DOWN_ESCALATOR) - return TRUE; - else - return FALSE; -} - -bool8 unref_sub_8056EE0(u8 var) -{ - if (var == MB_04) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsLadder(u8 var) -{ - if (var == MB_LADDER) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsNonAnimDoor(u8 var) -{ - if (var == MB_NON_ANIMATED_DOOR || var == MB_WATER_DOOR || var == MB_DEEP_SOUTH_WARP) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsDeepSouthWarp(u8 var) -{ - if (var == MB_DEEP_SOUTH_WARP) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSurfableWaterOrUnderwater(u8 var) -{ - if ((sTileBitAttributes[var] & 2) != 0) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsEastArrowWarp(u8 var) -{ - if (var == MB_EAST_ARROW_WARP) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsWestArrowWarp(u8 var) -{ - if (var == MB_WEST_ARROW_WARP) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsNorthArrowWarp(u8 var) -{ - if (var == MB_NORTH_ARROW_WARP || var == MB_STAIRS_OUTSIDE_ABANDONED_SHIP) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSouthArrowWarp(u8 var) -{ - if (var == MB_SOUTH_ARROW_WARP || var == MB_WATER_SOUTH_ARROW_WARP || var == MB_SHOAL_CAVE_ENTRANCE) - return TRUE; - else - return FALSE; -} - -// unused -bool8 MetatileBehavior_IsArrowWarp(u8 var) -{ - u8 var2 = 0; - - if (MetatileBehavior_IsEastArrowWarp(var) - || MetatileBehavior_IsWestArrowWarp(var) - || MetatileBehavior_IsNorthArrowWarp(var) - || MetatileBehavior_IsSouthArrowWarp(var)) - { - var2 = 1; - } - return var2; -} - -bool8 MetatileBehavior_IsMoveTile(u8 var) -{ - if ((var >= MB_WALK_EAST && var <= MB_TRICK_HOUSE_PUZZLE_8_FLOOR) || (var >= MB_EASTWARD_CURRENT && var <= MB_SOUTHWARD_CURRENT) - || var == MB_MUDDY_SLOPE || var == MB_CRACKED_FLOOR || var == MB_WATERFALL || var == MB_ICE || var == MB_BB || var == MB_BC) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsIce_2(u8 var) -{ - if (var == MB_ICE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsTrickHouseSlipperyFloor(u8 var) -{ - if (var == MB_TRICK_HOUSE_PUZZLE_8_FLOOR) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_0x05(u8 var) -{ - if (var == MB_05) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsWalkNorth(u8 var) -{ - if (var == MB_WALK_NORTH) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsWalkSouth(u8 var) -{ - if (var == MB_WALK_SOUTH) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsWalkWest(u8 var) -{ - if (var == MB_WALK_WEST) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsWalkEast(u8 var) -{ - if (var == MB_WALK_EAST) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsNorthwardCurrent(u8 var) -{ - if (var == MB_NORTHWARD_CURRENT) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSouthwardCurrent(u8 var) -{ - if (var == MB_SOUTHWARD_CURRENT) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsWestwardCurrent(u8 var) -{ - if (var == MB_WESTWARD_CURRENT) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsEastwardCurrent(u8 var) -{ - if (var == MB_EASTWARD_CURRENT) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSlideNorth(u8 var) -{ - if (var == MB_SLIDE_NORTH) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSlideSouth(u8 var) -{ - if (var == MB_SLIDE_SOUTH) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSlideWest(u8 var) -{ - if (var == MB_SLIDE_WEST) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSlideEast(u8 var) -{ - if (var == MB_SLIDE_EAST) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsCounter(u8 var) -{ - if (var == MB_COUNTER) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsPlayerFacingTVScreen(u8 tile, u8 playerDir) -{ - if (playerDir != CONNECTION_NORTH) // if the player isn't facing north, forget about it. - return FALSE; - else if (tile == MB_TELEVISION) // is the player's north tile a TV? - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsPC(u8 var) -{ - if (var == MB_PC) - return TRUE; - else - return FALSE; -} - -bool8 is_tile_x84(u8 var) -{ - if (var == MB_84) - return TRUE; - else - return FALSE; -} - -bool8 sub_80571C0(u8 var) -{ - if (var == MB_91 || var == MB_93 || var == MB_95 || var == MB_97 - || var == MB_99 || var == MB_9B || var == MB_9D) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSecretBaseCave(u8 var) -{ - if (var == MB_SECRET_BASE_SPOT_RED_CAVE || var == MB_SECRET_BASE_SPOT_BROWN_CAVE || var == MB_SECRET_BASE_SPOT_YELLOW_CAVE || var == MB_SECRET_BASE_SPOT_BLUE_CAVE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSecretBaseTree(u8 var) -{ - if (var == MB_SECRET_BASE_SPOT_TREE_1 || var == MB_SECRET_BASE_SPOT_TREE_2) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSecretBaseShrub(u8 var) -{ - if (var == MB_SECRET_BASE_SPOT_SHRUB) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSecretBasePC(u8 var) -{ - if (var == MB_SECRET_BASE_PC) - return TRUE; - else - return FALSE; -} - -bool8 sub_805724C(u8 var) -{ - if (var == MB_B1) - return TRUE; - else - return FALSE; -} - -bool8 unref_sub_8057260(u8 var) -{ - if (var == MB_B2) - return TRUE; - else - return FALSE; -} - -bool8 sub_8057274(u8 var) -{ - if (var == MB_B3) - return TRUE; - else - return FALSE; -} - -bool8 sub_8057288(u8 var) -{ - if (var == MB_B9) - return TRUE; - else - return FALSE; -} - -bool8 sub_805729C(u8 var) -{ - if (var == MB_NORMAL) - return TRUE; - else - return FALSE; -} - -bool8 sub_80572B0(u8 var) -{ - if (var == MB_B7) - return TRUE; - else - return FALSE; -} - -bool8 unref_sub_80572C4(u8 var) -{ - if (var == MB_B2) - return TRUE; - else - return FALSE; -} - -bool8 sub_80572D8(u8 var) -{ - if (var == MB_B5) - return TRUE; - else - return FALSE; -} - -bool8 sub_80572EC(u8 var) -{ - if (var == MB_C3) - return TRUE; - else - return FALSE; -} - -bool8 sub_8057300(u8 var) -{ - if (var == MB_C2) - return TRUE; - else - return FALSE; -} - -bool8 sub_8057314(u8 var) -{ - if (var == MB_B8) - return TRUE; - else - return FALSE; -} - -bool8 sub_8057328(u8 var) -{ - if (var == MB_BE) - return TRUE; - else - return FALSE; -} - -bool8 sub_805733C(u8 var) -{ - if (var == MB_BD) - return TRUE; - else - return FALSE; -} - -bool8 sub_8057350(u8 var) -{ - if (var == MB_BA) - return TRUE; - else - return FALSE; -} - -bool8 sub_8057364(u8 var) -{ - if (var == MB_BF) - return TRUE; - else - return FALSE; -} - -bool8 sub_8057378(u8 var) -{ - if (var == MB_C4) - return TRUE; - else - return FALSE; -} - -bool8 sub_805738C(u8 var) -{ - if (var == MB_C5) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_HasRipples(u8 var) -{ - if (var == MB_POND_WATER || var == MB_PUDDLE || var == MB_SOOTOPOLIS_DEEP_WATER) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsPuddle(u8 var) -{ - if (var == MB_PUDDLE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsTallGrass(u8 var) -{ - if (var == MB_TALL_GRASS) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsLongGrass(u8 var) -{ - if (var == MB_LONG_GRASS) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsBerryTreeSoil(u8 var) -{ - if (var == MB_BERRY_TREE_SOIL) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsAshGrass(u8 var) -{ - if (var == MB_ASHGRASS) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsUnusedFootprintMetatile(u8 var) -{ - if (var == MB_25) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsBridge(u8 var) -{ - if (var >= MB_WARP_OR_BRIDGE && var <= MB_ROUTE120_NORTH_BRIDGE_2) - return TRUE; - else - return FALSE; -} - -u8 sub_8057450(u8 var) -{ - u8 result = var - MB_WARP_OR_BRIDGE; - - if (result > 3) - result = 0; - - return result; -} - -bool8 MetatileBehavior_IsLandWildEncounter(u8 var) -{ - if (MetatileBehavior_IsSurfableWaterOrUnderwater(var) == FALSE && MetatileBehavior_IsEncounterTile(var) == TRUE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsWaterWildEncounter(u8 var) -{ - if (MetatileBehavior_IsSurfableWaterOrUnderwater(var) == TRUE && MetatileBehavior_IsEncounterTile(var) == TRUE) - return TRUE; - else - return FALSE; -} - -bool8 sub_80574C4(u8 var) -{ - if (var == MB_0B) - return TRUE; - else - return FALSE; -} - -bool8 sub_80574D8(u8 var) -{ - if (var == MB_MOUNTAIN_TOP) - return TRUE; - else - return FALSE; -} - -bool8 sub_80574EC(u8 var) -{ - if (var == MB_SEMI_DEEP_WATER || var == MB_DEEP_WATER || var == MB_SOOTOPOLIS_DEEP_WATER) - return TRUE; - else - return FALSE; -} - -bool8 sub_805750C(u8 var) -{ - if (var == MB_NO_SURFACING || var == MB_SEAWEED_NO_SURFACING) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsShallowFlowingWater(u8 var) -{ - if (var == MB_SHALLOW_WATER || var == MB_STAIRS_OUTSIDE_ABANDONED_SHIP || var == MB_SHOAL_CAVE_ENTRANCE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsThinIce(u8 var) -{ - if (var == MB_THIN_ICE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsCrackedIce(u8 var) -{ - if (var == MB_CRACKED_ICE) - return TRUE; - else - return FALSE; -} - -bool8 sub_8057568(u8 var) -{ - if (var == MB_OCEAN_WATER || var == MB_SEMI_DEEP_WATER || var == MB_DEEP_WATER) - return TRUE; - else - return FALSE; -} - -bool8 unref_sub_8057584(u8 var) -{ - if (var == MB_18 || var == MB_1A) - return TRUE; - else - return FALSE; -} - -bool8 sub_805759C(u8 var) -{ - if (MetatileBehavior_IsSurfableWaterOrUnderwater(var) && MetatileBehavior_IsWaterfall(var) == FALSE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsEastBlocked(u8 var) -{ - if (var == MB_IMPASSABLE_EAST || var == MB_IMPASSABLE_NORTHEAST || var == MB_IMPASSABLE_SOUTHEAST || var == MB_C1 || var == MB_BE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsWestBlocked(u8 var) -{ - if (var == MB_IMPASSABLE_WEST || var == MB_IMPASSABLE_NORTHWEST || var == MB_IMPASSABLE_SOUTHWEST || var == MB_C1 || var == MB_BE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsNorthBlocked(u8 var) -{ - if (var == MB_IMPASSABLE_NORTH || var == MB_IMPASSABLE_NORTHEAST || var == MB_IMPASSABLE_NORTHWEST || var == MB_BED) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSouthBlocked(u8 var) -{ - if (var == MB_IMPASSABLE_SOUTH || var == MB_IMPASSABLE_SOUTHEAST || var == MB_IMPASSABLE_SOUTHWEST || var == MB_BED) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsShortGrass(u8 var) -{ - if (var == MB_SHORT_GRASS) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsHotSprings(u8 var) -{ - if (var == MB_HOT_SPRINGS) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsWaterfall(u8 var) -{ - if (var == MB_WATERFALL) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsFortreeBridge(u8 var) -{ - if (var == MB_FORTREE_BRIDGE) - return TRUE; - else - return FALSE; -} - -bool8 sub_80576A0(u8 var) -{ - if (var == MB_PACIFIDLOG_VERTICAL_LOG_1) - return TRUE; - else - return FALSE; -} - -bool8 sub_80576B4(u8 var) -{ - if (var == MB_PACIFIDLOG_VERTICAL_LOG_2) - return TRUE; - else - return FALSE; -} - -bool8 sub_80576C8(u8 var) -{ - if (var == MB_PACIFIDLOG_HORIZONTAL_LOG_1) - return TRUE; - else - return FALSE; -} - -bool8 sub_80576DC(u8 var) -{ - if (var == MB_PACIFIDLOG_HORIZONTAL_LOG_2) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsPacifidlogLog(u8 var) -{ - if (var >= MB_PACIFIDLOG_VERTICAL_LOG_1 && var <= MB_PACIFIDLOG_HORIZONTAL_LOG_2) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsTrickHousePuzzleDoor(u8 var) -{ - if (var == MB_TRICK_HOUSE_PUZZLE_DOOR) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsRegionMap(u8 var) -{ - if (var == MB_REGION_MAP) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsClosedSootopolisGymDoor(u8 var) -{ - if (var == MB_CLOSED_SOOTOPOLIS_GYM_DOOR) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsRoulette(u8 var) -{ - if (var == MB_ROULETTE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsPokeblockFeeder(u8 var) -{ - if (var == MB_POKEBLOCK_FEEDER) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_0xBB(u8 var) -{ - if (var == MB_BB) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_0xBC(u8 var) -{ - if (var == MB_BC) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsLavaridgeB1FWarp(u8 var) -{ - if (var == MB_LAVARIDGE_GYM_B1F_WARP) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsLavaridge1FWarp(u8 var) -{ - if (var == MB_LAVARIDGE_GYM_1F_WARP) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsAquaHideoutWarp(u8 var) -{ - if (var == MB_AQUA_HIDEOUT_WARP) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSurfableFishableWater(u8 var) -{ - if (var == MB_POND_WATER || var == MB_OCEAN_WATER || var == MB_SEMI_DEEP_WATER || var == MB_DEEP_WATER || var == MB_SOOTOPOLIS_DEEP_WATER || (var >= MB_EASTWARD_CURRENT && var <= MB_SOUTHWARD_CURRENT)) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsMtPyreHole(u8 var) -{ - if (var == MB_MT_PYRE_HOLE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsCrackedFloorHole(u8 var) -{ - if (var == MB_CRACKED_FLOOR_HOLE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsCrackedFloor(u8 var) -{ - if (var == MB_CRACKED_FLOOR) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsMuddySlope(u8 var) -{ - if (var == MB_MUDDY_SLOPE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsBumpySlope(u8 var) -{ - if (var == MB_BUMPY_SLOPE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsIsolatedVerticalRail(u8 var) -{ - if (var == MB_ISOLATED_VERTICAL_RAIL) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsIsolatedHorizontalRail(u8 var) -{ - if (var == MB_ISOLATED_HORIZONTAL_RAIL) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsVerticalRail(u8 var) -{ - if (var == MB_VERTICAL_RAIL) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsHorizontalRail(u8 var) -{ - if (var == MB_HORIZONTAL_RAIL) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsSeaweed(u8 var) -{ - if (var == MB_SEAWEED || var == MB_SEAWEED_NO_SURFACING) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsRunningDisallowed(u8 var) -{ - if (var == MB_NO_RUNNING || var == MB_LONG_GRASS || var == MB_HOT_SPRINGS || MetatileBehavior_IsPacifidlogLog(var) != FALSE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsCuttableGrass(u8 var) -{ - if (var == MB_TALL_GRASS || var == MB_LONG_GRASS || var == MB_ASHGRASS || var == MB_LONG_GRASS_SOUTH_EDGE) - return TRUE; - else - return FALSE; -} - -bool8 sub_805791C(u8 var) -{ - if (var == MB_8E) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsPictureBookShelf(u8 var) -{ - if (var == MB_PICTURE_BOOK_SHELF) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsBookShelf(u8 var) -{ - if (var == MB_BOOKSHELF) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsPokeCenterBookShelf(u8 var) -{ - if (var == MB_POKEMON_CENTER_BOOKSHELF) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsVase(u8 var) -{ - if (var == MB_VASE) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsTrashCan(u8 var) -{ - if (var == MB_TRASH_CAN) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsShopShelf(u8 var) -{ - if (var == MB_SHOP_SHELF) - return TRUE; - else - return FALSE; -} - -bool8 MetatileBehavior_IsBlueprint(u8 var) -{ - if (var == MB_BLUEPRINT) - return TRUE; - else - return FALSE; -} diff --git a/src/misc/de_rom_8040FE0.c b/src/misc/de_rom_8040FE0.c new file mode 100644 index 000000000..c618ebdb2 --- /dev/null +++ b/src/misc/de_rom_8040FE0.c @@ -0,0 +1,272 @@ +#include "global.h" +#include "battle.h" + +#if GERMAN + +enum { + TRAINER_CLASS_NAME_LEADER = 25, + TRAINER_CLASS_NAME_SCHOOL_KID = 26, + TRAINER_CLASS_NAME_EXPERT = 30, + TRAINER_CLASS_NAME_POKEMON_TRAINER_3 = 46, +}; + +enum { + TRAINER_CLASS_LEADER_F = 26, + TRAINER_CLASS_ELITE_FOUR_F = 25, + TRAINER_CLASS_SCHOOL_KID_F = 30, + TRAINER_CLASS_BIRD_KEEPER = 46, + TRAINER_CLASS_MAY_1 = 61, + TRAINER_CLASS_MAY_2 = 62, + TRAINER_CLASS_MAY_3 = 63, +}; + +extern struct SecretBaseRecord gSecretBaseRecord; + +extern u8 gTrainerClassNames[][13]; +extern struct Trainer gTrainers[]; + +u8 *de_sub_8040FE0(u8 gender) { + if (gender) + { + gender++; + + } + + gender = TRAINER_CLASS_NAME_SCHOOL_KID; + return gTrainerClassNames[gender]; +} + +u8 *de_sub_8040FF4(u8 gender) { + if (gender) { + gender++; + } + + gender = TRAINER_CLASS_NAME_POKEMON_TRAINER_3; + return gTrainerClassNames[gender]; +} + +u8 *de_sub_804100C(u8 gender) { + if (gender) { + gender++; + } + + gender = TRAINER_CLASS_NAME_LEADER; + return gTrainerClassNames[gender]; +} + +#ifdef NONMATCHING + +u8 de_sub_81364AC(void); +u8 get_trainer_class_name_index(void); +u8 de_sub_81364F8(void); +u8 sub_8135FD8(void); + +u8 *de_sub_8041024(s32 arg0, u32 arg1) { + u8 nameIndex, trainerClass, gender; + struct Trainer *trainer; + u8 local2; + + switch (arg0) + { + case 0x400: + nameIndex = GetSecretBaseTrainerNameIndex(); + gender = gSecretBaseRecord.gender; + if (nameIndex == TRAINER_CLASS_NAME_SCHOOL_KID) + { + return de_sub_8040FE0(gender); + } + + return gTrainerClassNames[nameIndex]; + + case 0x100: + trainerClass = de_sub_81364AC(); + nameIndex = get_trainer_class_name_index(); + if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F) + { + return de_sub_8040FE0(FEMALE); + } + if (trainerClass == TRAINER_CLASS_MAY_1 || trainerClass == TRAINER_CLASS_MAY_2 || trainerClass == TRAINER_CLASS_MAY_3) + { + return de_sub_8040FF4(FEMALE); + } + + return gTrainerClassNames[nameIndex]; + + case 0x800: + trainerClass = de_sub_81364F8(); + nameIndex = sub_8135FD8(); + if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F) + { + return de_sub_8040FE0(FEMALE); + } + if (trainerClass == TRAINER_CLASS_MAY_1 || trainerClass == TRAINER_CLASS_MAY_2 || trainerClass == TRAINER_CLASS_MAY_3) + { + return de_sub_8040FF4(FEMALE); + } + + return gTrainerClassNames[nameIndex]; + + default: + trainer = &gTrainers[arg1]; + trainerClass = trainer->trainerClass; + local2 = sub_803FC58(arg1); + + if (trainerClass == TRAINER_CLASS_LEADER_F) + { + return de_sub_8040FE0(local2); + } + + if (trainerClass == TRAINER_CLASS_BIRD_KEEPER && local2 == FEMALE) + { + return de_sub_8040FF4(FEMALE); + } + + if (trainerClass == TRAINER_CLASS_ELITE_FOUR_F) + { + if (gTrainers[arg1].doubleBattle == TRUE) + { + return de_sub_804100C(FEMALE); + } + else + { + return de_sub_804100C(MALE); + } + } + + + return gTrainerClassNames[trainerClass]; + } +} +#else + +__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\ +_08041040:\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\ +_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\ +_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\ +_08041086:\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\ +_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\ +_080410B8:\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\ +_080410CC:\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\ +_080410EA:\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\ +_08041102:\n\ + pop {r4-r6}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_08041108: .4byte gTrainerClassNames\n\ + .syntax divided\n"); +} +#endif + +u32 de_sub_804110C(u32 arg0, u32 arg1) { + return arg1; +} + +#endif diff --git a/src/misc/rom3.c b/src/misc/rom3.c new file mode 100644 index 000000000..803bbf943 --- /dev/null +++ b/src/misc/rom3.c @@ -0,0 +1,1393 @@ +#include "global.h" +#include "battle.h" +#include "battle_811DA74.h" +#include "battle_ai.h" +#include "battle_anim.h" +#include "battle_anim_81258BC.h" +#include "battle_anim_8137220.h" +#include "cable_club.h" +#include "items.h" +#include "link.h" +#include "pokemon.h" +#include "rom3.h" +#include "rom_8094928.h" +#include "species.h" +#include "task.h" +#include "util.h" + +extern u8 unk_2000000[]; + +#define EWRAM_14000 ((u8 *)(unk_2000000 + 0x14000)) +#define EWRAM_15000 ((u8 *)(unk_2000000 + 0x15000)) + +extern u16 gBattleTypeFlags; +extern u16 gBattleWeather; +extern struct BattlePokemon gBattleMons[]; + +static EWRAM_DATA u8 gUnknown_020238C4 = 0; +static EWRAM_DATA u8 gUnknown_020238C5 = 0; +static EWRAM_DATA u8 gUnknown_020238C6 = 0; + +extern u32 gUnknown_020239FC; +extern u8 gBattleBufferA[][0x200]; +extern u8 gBattleBufferB[][0x200]; +extern u8 gActiveBank; +extern u32 gBattleExecBuffer; +extern u8 gNoOfAllBanks; +extern u16 gBattlePartyID[]; +extern u8 gBanksBySide[]; +extern u16 gCurrentMove; +extern u16 gUnknown_02024BE8; +extern u16 gLastUsedItem; +extern u8 gLastUsedAbility; +extern u8 gBankAttacker; +extern u8 gBankTarget; +extern u8 gEffectBank; +extern u8 gStringBank; +extern u8 gAbsentBankFlags; +extern u8 gMultiHitCounter; +extern u8 gUnknown_02024C78; +extern u8 gBattleOutcome; +extern u8 gActionSelectionCursor[]; +extern u8 gMoveSelectionCursor[]; +extern u8 gBattleTextBuff1[]; +extern u8 gBattleTextBuff2[]; +extern u8 gBattleTextBuff3[]; +extern void (*gBattleMainFunc)(void); +extern void (*gBattleBankFunc[])(void); + +u8 gBattleBuffersTransferData[0x170]; + +void sub_800B858(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + OpenLink(); + CreateTask(sub_8083C50, 0); + sub_800BF28(); + } +} + +void setup_poochyena_battle(void) +{ + s32 i; + + gBattleMainFunc = nullsub_41; + for (i = 0; i < 4; i++) + { + gBattleBankFunc[i] = nullsub_91; + gBanksBySide[i] = 0xFF; + gActionSelectionCursor[i] = 0; + gMoveSelectionCursor[i] = 0; + } + sub_800B858(); + gBattleExecBuffer = 0; + battle_anim_clear_some_data(); + ClearBattleMonForms(); + BattleAI_HandleItemUseBeforeAISetup(); + if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) + { + ZeroEnemyPartyMons(); + CreateMon(&gEnemyParty[0], SPECIES_POOCHYENA, 2, 32, 0, 0, 0, 0); + i = ITEM_NONE; + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&i); + } + gUnknown_020239FC = 0; + gUnknown_02024C78 = 0; +} + +void sub_800B950(void) +{ + s32 i; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + sub_800BA78(); + else + sub_800B9A8(); + sub_800BD54(); + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + for (i = 0; i < gNoOfAllBanks; i++) + sub_8094978(i, 0); + } +} + +void sub_800B9A8(void) +{ + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + gBattleMainFunc = sub_8010800; + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + gBattleBankFunc[0] = SetBankFuncToSafariBufferRunCommand; + else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) + gBattleBankFunc[0] = SetBankFuncToWallyBufferRunCommand; + else + gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[0] = 0; + gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand; + gBanksBySide[1] = 1; + gNoOfAllBanks = 2; + } + else + { + gBattleMainFunc = sub_8010800; + gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[0] = 0; + gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand; + gBanksBySide[1] = 1; + gBattleBankFunc[2] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[2] = 2; + gBattleBankFunc[3] = SetBankFuncToOpponentBufferRunCommand; + gBanksBySide[3] = 3; + gNoOfAllBanks = 4; + } +} + +void sub_800BA78(void) +{ + u8 multiplayerId; + int i; + + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + if (gBattleTypeFlags & BATTLE_TYPE_WILD) + { + gBattleMainFunc = sub_8010800; + gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[0] = 0; + gBattleBankFunc[1] = SetBankFuncToLinkOpponentBufferRunCommand; + gBanksBySide[1] = 1; + gNoOfAllBanks = 2; + } + else + { + gBattleBankFunc[1] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[1] = 0; + gBattleBankFunc[0] = SetBankFuncToLinkOpponentBufferRunCommand; + gBanksBySide[0] = 1; + gNoOfAllBanks = 2; + } + return; + } + if ((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) == BATTLE_TYPE_DOUBLE) + { + if (gBattleTypeFlags & BATTLE_TYPE_WILD) + { + gBattleMainFunc = sub_8010800; + gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[0] = 0; + gBattleBankFunc[1] = SetBankFuncToLinkOpponentBufferRunCommand; + gBanksBySide[1] = 1; + gBattleBankFunc[2] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[2] = 2; + gBattleBankFunc[3] = SetBankFuncToLinkOpponentBufferRunCommand; + gBanksBySide[3] = 3; + gNoOfAllBanks = 4; + } + else + { + gBattleBankFunc[1] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[1] = 0; + gBattleBankFunc[0] = SetBankFuncToLinkOpponentBufferRunCommand; + gBanksBySide[0] = 1; + gBattleBankFunc[3] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[3] = 2; + gBattleBankFunc[2] = SetBankFuncToLinkOpponentBufferRunCommand; + gBanksBySide[2] = 3; + gNoOfAllBanks = 4; + + } + return; + } + multiplayerId = GetMultiplayerId(); + if (gBattleTypeFlags & BATTLE_TYPE_WILD) + gBattleMainFunc = sub_8010800; + for (i = 0; i < 4; i++) + { + switch (gLinkPlayers[i].lp_field_18) + { + case 0: + case 3: + sub_8094978(gLinkPlayers[i].lp_field_18, 0); + break; + case 1: + case 2: + sub_8094978(gLinkPlayers[i].lp_field_18, 1); + break; + } + + if (i == multiplayerId) + { + gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToPlayerBufferRunCommand; + switch (gLinkPlayers[i].lp_field_18) + { + case 0: + case 3: + gBanksBySide[gLinkPlayers[i].lp_field_18] = 0; + gBattlePartyID[gLinkPlayers[i].lp_field_18] = 0; + break; + case 1: + case 2: + gBanksBySide[gLinkPlayers[i].lp_field_18] = 2; + gBattlePartyID[gLinkPlayers[i].lp_field_18] = 3; + break; + } + } + else + { + if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[multiplayerId].lp_field_18 & 1)) + || ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[multiplayerId].lp_field_18 & 1))) + { + gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToLinkPartnerBufferRunCommand; + switch (gLinkPlayers[i].lp_field_18) + { + case 0: + case 3: + gBanksBySide[gLinkPlayers[i].lp_field_18] = 0; + gBattlePartyID[gLinkPlayers[i].lp_field_18] = 0; + break; + case 1: + case 2: + gBanksBySide[gLinkPlayers[i].lp_field_18] = 2; + gBattlePartyID[gLinkPlayers[i].lp_field_18] = 3; + break; + } + } + else + { + gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToLinkOpponentBufferRunCommand; + switch (gLinkPlayers[i].lp_field_18) + { + case 0: + case 3: + gBanksBySide[gLinkPlayers[i].lp_field_18] = 1; + gBattlePartyID[gLinkPlayers[i].lp_field_18] = 0; + break; + case 1: + case 2: + gBanksBySide[gLinkPlayers[i].lp_field_18] = 3; + gBattlePartyID[gLinkPlayers[i].lp_field_18] = 3; + break; + } + } + } + } + gNoOfAllBanks = 4; +} + +void sub_800BD54(void) +{ + int i; + int j; + + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + for (i = 0; i < gNoOfAllBanks; i++) + { + for (j = 0; j < 6; j++) + { + if (i < 2) + { + if (!(gBanksBySide[i] & 1)) + { + if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != 0 + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) == 0) + { + gBattlePartyID[i] = j; + break; + } + } + else + { + if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != 0 + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) == 0) + { + gBattlePartyID[i] = j; + break; + } + } + } + else + { + if (!(gBanksBySide[i] & 1)) + { + if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES) != 0 //Probably a typo by Game Freak. The rest use SPECIES2 + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) == 0 + && gBattlePartyID[i - 2] != j) + { + gBattlePartyID[i] = j; + break; + } + } + else + { + if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != 0 + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) == 0 + && gBattlePartyID[i - 2] != j) + { + gBattlePartyID[i] = j; + break; + } + } + } + } + } + } +} + +void dp01_prepare_buffer(u8 a, u8 *b, u16 c) +{ + int i; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + dp01_prepare_buffer_wireless_probably(a, c, b); + } + else + { + switch (a) + { + case 0: + for (i = 0; i < c; i++) + { + gBattleBufferA[gActiveBank][i] = *b; + b++; + } + break; + case 1: + for (i = 0; i < c; i++) + { + gBattleBufferB[gActiveBank][i] = *b; + b++; + } + break; + } + } +} + +void sub_800BF28(void) +{ + gUnknown_020238C4 = CreateTask(sub_800C1A8, 0); + gTasks[gUnknown_020238C4].data[11] = 0; + gTasks[gUnknown_020238C4].data[12] = 0; + gTasks[gUnknown_020238C4].data[13] = 0; + gTasks[gUnknown_020238C4].data[14] = 0; + gTasks[gUnknown_020238C4].data[15] = 0; + gUnknown_020238C5 = CreateTask(sub_800C47C, 0); + gTasks[gUnknown_020238C5].data[12] = 0; + gTasks[gUnknown_020238C5].data[13] = 0; + gTasks[gUnknown_020238C5].data[14] = 0; + gTasks[gUnknown_020238C5].data[15] = 0; + gUnknown_020238C6 = 0; + CpuFill16(0, EWRAM_14000, 0x2000); +} + +void dp01_prepare_buffer_wireless_probably(u8 a, u16 b, u8 *c) +{ + s32 r9; + int i; + + r9 = b - b % 4 + 4; + if (gTasks[gUnknown_020238C4].data[14] + r9 + 9 > 0x1000) + { + gTasks[gUnknown_020238C4].data[12] = gTasks[gUnknown_020238C4].data[14]; + gTasks[gUnknown_020238C4].data[14] = 0; + } + unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14000] = a; + unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14001] = gActiveBank; + unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14002] = gBankAttacker; + unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14003] = gBankTarget; + unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14004] = r9; + 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]; + gTasks[gUnknown_020238C4].data[14] = gTasks[gUnknown_020238C4].data[14] + r9 + 8; +} + +void sub_800C1A8(u8 taskId) +{ + u16 var; + + switch (gTasks[taskId].data[11]) + { + case 0: + gTasks[taskId].data[10] = 100; + gTasks[taskId].data[11]++; + break; + case 1: + gTasks[taskId].data[10]--; + if (gTasks[taskId].data[10] == 0) + gTasks[taskId].data[11]++; + break; + case 2: + GetLinkPlayerCount_2(); + if (IsLinkMaster()) + { + sub_8007F4C(); + gTasks[taskId].data[11]++; + break; + } + gTasks[taskId].data[11]++; + break; + case 3: + if (gTasks[taskId].data[15] != gTasks[taskId].data[14]) + { + if (gTasks[taskId].data[13] == 0) + { + if (gTasks[taskId].data[15] > gTasks[taskId].data[14] + && gTasks[taskId].data[15] == gTasks[taskId].data[12]) + { + gTasks[taskId].data[12] = 0; + gTasks[taskId].data[15] = 0; + } + var = (unk_2000000[gTasks[taskId].data[15] + 0x14004] | (unk_2000000[gTasks[taskId].data[15] + 0x14005] << 8)) + 8; + SendBlock(bitmask_all_link_players_but_self(), &unk_2000000[gTasks[taskId].data[15] + 0x14000], var); + gTasks[taskId].data[11]++; + } + else + { + gTasks[taskId].data[13]--; + break; + } + } + break; + case 4: + if (sub_8007ECC()) + { + var = unk_2000000[gTasks[taskId].data[15] + 0x14004] | (unk_2000000[gTasks[taskId].data[15] + 0x14005] << 8); + gTasks[taskId].data[13] = 1; + gTasks[taskId].data[15] = gTasks[taskId].data[15] + var + 8; + gTasks[taskId].data[11] = 3; + } + break; + case 5: + gTasks[taskId].data[13]--; + if (gTasks[taskId].data[13] == 0) + { + gTasks[taskId].data[13] = 1; + gTasks[taskId].data[11] = 3; + } + break; + } +} + +//fix me +void sub_800C35C(void) +{ + u8 i; //r4 + s32 j; //r2 + u16 r6; //r6 + u8 *recvBuffer; //r3 + u8 *dest; //r5 + u8 *src; //r4 + + if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & 0x20) && gLinkPlayers[0].linkType == 0x2211) + { + for (i = 0; i < GetLinkPlayerCount(); i++) + { + if (GetBlockReceivedStatus() & gBitTable[i]) + { + ResetBlockReceivedFlag(i); + recvBuffer = (u8 *)&gBlockRecvBuffer[i]; +#ifndef NONMATCHING + asm(""); + recvBuffer = (u8 *)&gBlockRecvBuffer[i]; +#endif + r6 = gBlockRecvBuffer[i][2]; + if (gTasks[gUnknown_020238C5].data[14] + 9 + r6 > 0x1000) + { + gTasks[gUnknown_020238C5].data[12] = gTasks[gUnknown_020238C5].data[14]; + gTasks[gUnknown_020238C5].data[14] = 0; + } + //_0800C402 + dest = EWRAM_15000 + gTasks[gUnknown_020238C5].data[14]; + src = recvBuffer; + for (j = 0; j < r6 + 8; j++) + dest[j] = src[j]; + gTasks[gUnknown_020238C5].data[14] = gTasks[gUnknown_020238C5].data[14] + r6 + 8; + } + //_0800C446 + } + } +} + +void sub_800C47C(u8 taskId) +{ + u16 r7; + u8 r4; + u8 r2; + + if (gTasks[taskId].data[15] != gTasks[taskId].data[14]) + { + if (gTasks[taskId].data[15] > gTasks[taskId].data[14] + && gTasks[taskId].data[15] == gTasks[taskId].data[12]) + { + gTasks[taskId].data[12] = 0; + gTasks[taskId].data[15] = 0; + } + r4 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 1]; + r7 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 4] | (unk_2000000[0x15000 + gTasks[taskId].data[15] + 5] << 8); + switch (unk_2000000[0x15000 + gTasks[taskId].data[15] + 0]) + { + case 0: + if (gBattleExecBuffer & gBitTable[r4]) + return; + memcpy(gBattleBufferA[r4], &unk_2000000[0x15000 + gTasks[taskId].data[15] + 8], r7); + sub_80155A4(r4); + if (!(gBattleTypeFlags & BATTLE_TYPE_WILD)) + { + gBankAttacker = unk_2000000[0x15000 + gTasks[taskId].data[15] + 2]; + gBankTarget = unk_2000000[0x15000 + gTasks[taskId].data[15] + 3]; + gAbsentBankFlags = unk_2000000[0x15000 + gTasks[taskId].data[15] + 6]; + gEffectBank = unk_2000000[0x15000 + gTasks[taskId].data[15] + 7]; + } + break; + case 1: + memcpy(gBattleBufferB[r4], &unk_2000000[0x15000 + gTasks[taskId].data[15] + 8], r7); + break; + case 2: + r2 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 8]; + gBattleExecBuffer &= ~(gBitTable[r4] << (r2 * 4)); + break; + } + gTasks[taskId].data[15] = gTasks[taskId].data[15] + r7 + 8; + } +} + +void EmitGetAttributes(u8 a, u8 b, u8 c) +{ + gBattleBuffersTransferData[0] = 0; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = 0; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c) +{ + gBattleBuffersTransferData[0] = 1; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = 0; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, void *e) +{ + int i; + + gBattleBuffersTransferData[0] = 2; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + for (i = 0; i < d; i++) + gBattleBuffersTransferData[3 + i] = *(u8*)(e++); + dp01_prepare_buffer(a, gBattleBuffersTransferData, d + 3); +} + +void unref_sub_800C6A4(u8 a, u8 b, u8 c, u8 *d) +{ + int i; + + gBattleBuffersTransferData[0] = 3; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + for (i = 0; i < c; i++) + gBattleBuffersTransferData[3 + i] = *(d++); + dp01_prepare_buffer(a, gBattleBuffersTransferData, c + 3); +} + +void dp01_build_cmdbuf_x04_4_4_4(u8 a) +{ + gBattleBuffersTransferData[0] = 4; + gBattleBuffersTransferData[1] = 4; + gBattleBuffersTransferData[2] = 4; + gBattleBuffersTransferData[3] = 4; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitSwitchInAnim(u8 a, u8 b, u8 c) +{ + gBattleBuffersTransferData[0] = 5; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = 5; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitReturnPokeToBall(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 6; + gBattleBuffersTransferData[1] = b; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); +} + +void dp01_build_cmdbuf_x07_7_7_7(u8 a) +{ + gBattleBuffersTransferData[0] = 7; + gBattleBuffersTransferData[1] = 7; + gBattleBuffersTransferData[2] = 7; + gBattleBuffersTransferData[3] = 7; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitTrainerSlide(u8 a) +{ + gBattleBuffersTransferData[0] = 8; + gBattleBuffersTransferData[1] = 8; + gBattleBuffersTransferData[2] = 8; + gBattleBuffersTransferData[3] = 8; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void dp01_build_cmdbuf_x09_9_9_9(u8 a) +{ + gBattleBuffersTransferData[0] = 9; + gBattleBuffersTransferData[1] = 9; + gBattleBuffersTransferData[2] = 9; + gBattleBuffersTransferData[3] = 9; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitFaintAnimation(u8 a) +{ + gBattleBuffersTransferData[0] = 10; + gBattleBuffersTransferData[1] = 10; + gBattleBuffersTransferData[2] = 10; + gBattleBuffersTransferData[3] = 10; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void dp01_build_cmdbuf_x0B_B_B_B(u8 a) +{ + gBattleBuffersTransferData[0] = 11; + gBattleBuffersTransferData[1] = 11; + gBattleBuffersTransferData[2] = 11; + gBattleBuffersTransferData[3] = 11; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void dp01_build_cmdbuf_x0C_C_C_C(u8 a) +{ + gBattleBuffersTransferData[0] = 12; + gBattleBuffersTransferData[1] = 12; + gBattleBuffersTransferData[2] = 12; + gBattleBuffersTransferData[3] = 12; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitBallThrowAnim(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) +{ + int i; + + gBattleBuffersTransferData[0] = 14; + gBattleBuffersTransferData[1] = b; + for (i = 0; i < b * 3; i++) + gBattleBuffersTransferData[2 + i] = *(c++); + dp01_prepare_buffer(a, gBattleBuffersTransferData, b * 3 + 2); +} + +void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStruct *g) +{ + gBattleBuffersTransferData[0] = 15; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + gBattleBuffersTransferData[3] = c; + gBattleBuffersTransferData[4] = d; + gBattleBuffersTransferData[5] = (d & 0xFF00) >> 8; + gBattleBuffersTransferData[6] = e; + gBattleBuffersTransferData[7] = (e & 0x0000FF00) >> 8; + gBattleBuffersTransferData[8] = (e & 0x00FF0000) >> 16; + gBattleBuffersTransferData[9] = (e & 0xFF000000) >> 24; + gBattleBuffersTransferData[10] = f; + gBattleBuffersTransferData[11] = gMultiHitCounter; + if (AbilityBattleEffects(14, 0, 13, 0, 0) == 0 && AbilityBattleEffects(14, 0, 0x4D, 0, 0) == 0) + { + gBattleBuffersTransferData[12] = gBattleWeather; + gBattleBuffersTransferData[13] = (gBattleWeather & 0xFF00) >> 8; + } + else + { + gBattleBuffersTransferData[12] = 0; + gBattleBuffersTransferData[13] = 0; + } + gBattleBuffersTransferData[14] = 0; + gBattleBuffersTransferData[15] = 0; + memcpy(&gBattleBuffersTransferData[16], g, sizeof(*g)); + dp01_prepare_buffer(a, gBattleBuffersTransferData, 0x2C); +} + +#ifdef NONMATCHING +void EmitPrintString(u8 a, u16 b) +{ + int i; + //u16 *r12; + + 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[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++) + { + 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]; + } + 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"); +} +#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"); +} + +void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c) +{ + gBattleBuffersTransferData[0] = 18; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void unref_sub_800CB84(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) +{ + u32 i; + + gBattleBuffersTransferData[0] = 20; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = 0; + for (i = 0; i < 20; i++) + gBattleBuffersTransferData[4 + i] = d[i]; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 24); +} + +void sub_800CBE0(u8 a, u8 *b) +{ + int i; + + gBattleBuffersTransferData[0] = 21; + for (i = 0; i < 3; i++) + gBattleBuffersTransferData[1 + i] = b[i]; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e) +{ + int i; + + gBattleBuffersTransferData[0] = 22; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + 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 +} + +void dp01_build_cmdbuf_x17_17_17_17(u8 a) +{ + gBattleBuffersTransferData[0] = 23; + gBattleBuffersTransferData[1] = 23; + gBattleBuffersTransferData[2] = 23; + gBattleBuffersTransferData[3] = 23; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +// FIXME: I think this function is supposed to take s16 as its second argument, +// but battle_4.c expects u16 +void EmitHealthBarUpdate(u8 a, u16 b) +{ + gBattleBuffersTransferData[0] = 24; + gBattleBuffersTransferData[1] = 0; + gBattleBuffersTransferData[2] = (s16)b; + gBattleBuffersTransferData[3] = ((s16)b & 0xFF00) >> 8; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +// FIXME: I think this function is supposed to take s16 as its third argument, +// but battle_4.c expects u16 +void EmitExpBarUpdate(u8 a, u8 b, u16 c) +{ + gBattleBuffersTransferData[0] = 25; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (s16)c; + gBattleBuffersTransferData[3] = ((s16)c & 0xFF00) >> 8; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitStatusIconUpdate(u8 a, u32 b, u32 c) +{ + gBattleBuffersTransferData[0] = 26; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0x0000FF00) >> 8; + gBattleBuffersTransferData[3] = (b & 0x00FF0000) >> 16; + gBattleBuffersTransferData[4] = (b & 0xFF000000) >> 24; + gBattleBuffersTransferData[5] = c; + gBattleBuffersTransferData[6] = (c & 0x0000FF00) >> 8; + gBattleBuffersTransferData[7] = (c & 0x00FF0000) >> 16; + gBattleBuffersTransferData[8] = (c & 0xFF000000) >> 24; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 9); +} + +void EmitStatusAnimation(u8 a, u8 b, u32 c) +{ + gBattleBuffersTransferData[0] = 27; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = (c & 0x0000FF00) >> 8; + gBattleBuffersTransferData[4] = (c & 0x00FF0000) >> 16; + gBattleBuffersTransferData[5] = (c & 0xFF000000) >> 24; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 6); +} + +void EmitStatusXor(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 28; + gBattleBuffersTransferData[1] = b; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); +} + +void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8 a, u16 b, u8 *c) +{ + int i; + + gBattleBuffersTransferData[0] = 29; + gBattleBuffersTransferData[1] = 29; + gBattleBuffersTransferData[2] = b; + gBattleBuffersTransferData[3] = (b & 0xFF00) >> 8; + for (i = 0; i < b; i++) + gBattleBuffersTransferData[4 + i] = *(c++); + dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 4); +} + +void unref_sub_800CDD4(u8 a, u32 b, u16 c, u8 *d) +{ + int i; + + gBattleBuffersTransferData[0] = 30; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0x0000FF00) >> 8; + gBattleBuffersTransferData[3] = (b & 0x00FF0000) >> 16; + gBattleBuffersTransferData[4] = (b & 0xFF000000) >> 24; + gBattleBuffersTransferData[5] = c; + gBattleBuffersTransferData[6] = (c & 0xFF00) >> 8; + for (i = 0; i < c; i++) + gBattleBuffersTransferData[7 + i] = *(d++); + dp01_prepare_buffer(a, gBattleBuffersTransferData, c + 7); +} + +void unref_sub_800CE3C(u8 a, u16 b, u8 *c) +{ + int i; + + gBattleBuffersTransferData[0] = 31; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + for (i = 0; i < b; i++) + gBattleBuffersTransferData[3 + i] = *(c++); + dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 3); +} + +void unref_sub_800CE84(u8 a, u16 b, u8 *c) +{ + int i; + + gBattleBuffersTransferData[0] = 32; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + for (i = 0; i < b; i++) + gBattleBuffersTransferData[3 + i] = *(c++); + dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 3); +} + +void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c) +{ + gBattleBuffersTransferData[0] = 33; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c) +{ + int i; + + gBattleBuffersTransferData[0] = 34; + gBattleBuffersTransferData[1] = b; + for (i = 0; i < 3; i++) + gBattleBuffersTransferData[2 + i] = c[i]; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 5); +} + +void dp01_build_cmdbuf_x23_aa_0(u8 a, u16 b) +{ + gBattleBuffersTransferData[0] = 35; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + gBattleBuffersTransferData[3] = 0; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void dp01_build_cmdbuf_x24_aa_0(u8 a, u16 b) +{ + gBattleBuffersTransferData[0] = 36; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + gBattleBuffersTransferData[3] = 0; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void dp01_build_cmdbuf_x25_25_25_25(u8 a) +{ + gBattleBuffersTransferData[0] = 37; + gBattleBuffersTransferData[1] = 37; + gBattleBuffersTransferData[2] = 37; + gBattleBuffersTransferData[3] = 37; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void dp01_build_cmdbuf_x26_a(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) +{ + gBattleBuffersTransferData[0] = 39; + gBattleBuffersTransferData[1] = 39; + gBattleBuffersTransferData[2] = 39; + gBattleBuffersTransferData[3] = 39; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void dp01_build_cmdbuf_x28_28_28_28(u8 a) +{ + gBattleBuffersTransferData[0] = 40; + gBattleBuffersTransferData[1] = 40; + gBattleBuffersTransferData[2] = 40; + gBattleBuffersTransferData[3] = 40; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitHitAnimation(u8 a) +{ + gBattleBuffersTransferData[0] = 41; + gBattleBuffersTransferData[1] = 41; + gBattleBuffersTransferData[2] = 41; + gBattleBuffersTransferData[3] = 41; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void dp01_build_cmdbuf_x2A_2A_2A_2A(u8 a) +{ + gBattleBuffersTransferData[0] = 42; + gBattleBuffersTransferData[1] = 42; + gBattleBuffersTransferData[2] = 42; + gBattleBuffersTransferData[3] = 42; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitEffectivenessSound(u8 a, u16 b) +{ + gBattleBuffersTransferData[0] = 43; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + gBattleBuffersTransferData[3] = 0; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitPlaySound(u8 a, u16 b) +{ + gBattleBuffersTransferData[0] = 44; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + gBattleBuffersTransferData[3] = 0; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitFaintingCry(u8 a) +{ + gBattleBuffersTransferData[0] = 45; + gBattleBuffersTransferData[1] = 45; + gBattleBuffersTransferData[2] = 45; + gBattleBuffersTransferData[3] = 45; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitBattleIntroSlide(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) +{ + gBattleBuffersTransferData[0] = 47; + gBattleBuffersTransferData[1] = 47; + gBattleBuffersTransferData[2] = 47; + gBattleBuffersTransferData[3] = 47; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c) +{ + int i; + + gBattleBuffersTransferData[0] = 48; + gBattleBuffersTransferData[1] = c & 0x7F; + gBattleBuffersTransferData[2] = (c & 0x80) >> 7; + gBattleBuffersTransferData[3] = 48; + for (i = 0; i < 48; i++) + gBattleBuffersTransferData[4 + i] = b[i]; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 52); +} + +void dp01_build_cmdbuf_x31_31_31_31(u8 a) +{ + gBattleBuffersTransferData[0] = 49; + gBattleBuffersTransferData[1] = 49; + gBattleBuffersTransferData[2] = 49; + gBattleBuffersTransferData[3] = 49; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void dp01_build_cmdbuf_x32_32_32_32(u8 a) +{ + gBattleBuffersTransferData[0] = 50; + gBattleBuffersTransferData[1] = 50; + gBattleBuffersTransferData[2] = 50; + gBattleBuffersTransferData[3] = 50; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitSpriteInvisibility(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 51; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = 51; + gBattleBuffersTransferData[3] = 51; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitBattleAnimation(u8 a, u8 b, u16 c) +{ + gBattleBuffersTransferData[0] = 52; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); +} + +void EmitLinkStandbyMsg(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 53; + gBattleBuffersTransferData[1] = b; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); +} + +void EmitResetActionMoveSelection(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 54; + gBattleBuffersTransferData[1] = b; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); +} + +void dp01_build_cmdbuf_x37_a(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 55; + gBattleBuffersTransferData[1] = b; + dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); +} diff --git a/src/misc/rom4.c b/src/misc/rom4.c new file mode 100644 index 000000000..f9006efba --- /dev/null +++ b/src/misc/rom4.c @@ -0,0 +1,2573 @@ +#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_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 "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 u16 gUnknown_02029814 = 0; +EWRAM_DATA bool8 gUnknown_02029816 = 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 EventScript_LeagueWhiteOut[]; +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 gUnknown_0839ACE8; +extern u32 gUnknown_08216694[]; + +void DoWhiteOut(void) +{ + ScriptContext2_RunNewScript(EventScript_LeagueWhiteOut); + 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 new_game(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); + sub_8054164(); + 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)); +} + +void sub_8053198(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) +{ + s32 i; + for (i = 0; i < 64; i++) + { + struct MapObjectTemplate *mapObjectTemplate = &gSaveBlock1.mapObjectTemplates[i]; + if (mapObjectTemplate->localId == localId) + { + mapObjectTemplate->x = x; + mapObjectTemplate->y = y; + break; + } + } +} + +void update_saveblock1_field_object_movement_behavior(u8 localId, u8 movementType) +{ + s32 i = 0; + struct MapObjectTemplate *mapObjectTemplate = gSaveBlock1.mapObjectTemplates; + do + { + if (mapObjectTemplate->localId == localId) + { + mapObjectTemplate->movementType = movementType; + break; + } + mapObjectTemplate++; + i++; + } while (i < 64); +} + +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(); +} + +struct MapData *get_mapdata_header(void) +{ + u16 mapDataId = gSaveBlock1.mapDataId; + if (mapDataId) + return gMapAttributes[mapDataId - 1]; + return NULL; +} + +void warp_shift(void) +{ + gUnknown_020297F0 = gSaveBlock1.location; + gSaveBlock1.location = gUnknown_020297F8; + gUnknown_02029800 = gDummyWarpData; + gUnknown_02029808 = gDummyWarpData; +} + +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; +} + +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 get_mapheader_by_bank_and_number(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); +} + +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(); +} + +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(); +} + +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 = 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) + 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) + { + 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(); + sub_8054164(); + sub_8053C98(); + 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_light_level_1_2_3_5_or_6(gMapHeader.mapType); + v3 = is_light_level_8_or_9(gMapHeader.mapType); + ClearTempFieldEventData(); + ResetCyclingRoadChallengeData(); + prev_quest_postbuffer_cursor_backup_reset(); + sub_8082BD0(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); + if (a1 != 1) + DoTimeBasedEvents(); + sub_80806E4(); + sub_8054164(); + if (v2) + FlagReset(SYS_USE_FLASH); + sub_8053C98(); + 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 light = sav1_map_get_light_level(); + u16 v2 = cur_mapdata_block_role_at_screen_center_acc_to_sav1(); + u8 v4 = sub_8053B00(&gUnknown_02029810, v2, light); + playerStruct.player_field_0 = v4; + playerStruct.player_field_1 = sub_8053B60(&gUnknown_02029810, v4, v2, light); + 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 (IsBikingAllowedByMap() != 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 IsBikingAllowedByMap(void) +{ + // is player in cycling road entrance? + if (gSaveBlock1.location.mapGroup == 29 && (gSaveBlock1.location.mapNum == 11 || gSaveBlock1.location.mapNum == 12)) + 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; + + // is player in SeafloorCavern_Room9? + if (gSaveBlock1.location.mapGroup == 24 && gSaveBlock1.location.mapNum == 36) + return FALSE; + + // is player in CaveOfOrigin_B4F? + if (gSaveBlock1.location.mapGroup == 24 && gSaveBlock1.location.mapNum == 42) + return FALSE; + + return TRUE; +} + +void sub_8053C98(void) +{ + if (!gMapHeader.cave) + gSaveBlock1.flashUsed = 0; + else if (FlagGet(SYS_USE_FLASH)) + gSaveBlock1.flashUsed = 1; + else + gSaveBlock1.flashUsed = gUnknown_0839ACE8; +} + +void sub_8053CE4(s32 a1) +{ + if (a1 < 0 || a1 > gUnknown_0839ACE8) + a1 = 0; + gSaveBlock1.flashUsed = a1; +} + +u8 sav1_get_flash_used_on_map(void) +{ + return gSaveBlock1.flashUsed; +} + +void sub_8053D14(u16 mapDataId) +{ + gSaveBlock1.mapDataId = mapDataId; + gMapHeader.mapData = get_mapdata_header(); +} + +bool16 sub_8053D30(struct WarpData *warp) +{ + if (!FlagGet(SYS_WEATHER_CTRL)) + return FALSE; + if (warp->mapGroup != 0) + return FALSE; + switch (warp->mapNum) + { + case 5: + case 6: + case 7: + case 8: + return TRUE; + case 39: + case 40: + case 41: + case 42: + case 43: + return TRUE; + } + return FALSE; +} + +bool16 sub_8053D6C(struct WarpData *warp) +{ + if (VarGet(0x40B3)) + return FALSE; + if (warp->mapGroup != 32) + return FALSE; + if (warp->mapNum == 0 || warp->mapNum == 1) + return TRUE; + return FALSE; +} + +u16 sub_8053D9C(struct WarpData *warp) +{ + if (sub_8053D30(warp) == TRUE) + return LEGENDARY_MUSIC; + else if (sub_8053D6C(warp) == TRUE) + return BGM_TOZAN; + else + return get_mapheader_by_bank_and_number(warp->mapGroup, warp->mapNum)->music; +} + +u16 sav1_map_get_music(void) +{ + u16 music; + + if (gSaveBlock1.location.mapGroup == 0 + && gSaveBlock1.location.mapNum == 26 + && GetSav1Weather() == 8) + return BGM_ASHROAD; + + music = sub_8053D9C(&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 = sub_8053D9C(&gUnknown_020297F8); + if (music != 0x7FFF) + { + return music; + } + else + { + if (gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 2) + 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 (sav1_map_get_light_level() == 5) + 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 sub_8053FB0(u16 music) +{ + u16 currentMusic = GetCurrentMapMusic(); + if (currentMusic != music && currentMusic != LEGENDARY_MUSIC) + FadeOutAndPlayNewMapMusic(music, 8); +} + +u8 is_warp1_light_level_8_or_9(void) +{ + struct MapHeader *mapHeader = warp1_get_mapheader(); + if (is_light_level_8_or_9(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 = is_warp1_light_level_8_or_9(); + FadeOutMapMusic(speed); + } +} + +bool8 sub_8054034(void) +{ + return IsNotWaitingForBGMStop(); +} + +void sub_8054044(void) +{ + FadeOutMapMusic(4); +} + +void sub_8054050(void) +{ + s16 x, y; + PlayerGetDestCoords((u16 *)&x, (u16 *)&y); + if (gUnknown_02029816 != TRUE + || MetatileBehavior_IsSurfableWaterOrUnderwater(MapGridGetMetatileBehaviorAt(x, y))) + { + s8 pan = (Random() % 88) + 212; + s8 volume = (Random() % 30) + 50; + PlayCry2(gUnknown_02029814, pan, volume, 1); + } +} + +void sub_80540D0(s16 *a1, u16 *a2) +{ + switch (*a1) + { + case 0: + if (!gUnknown_02029814) + *a1 = 4; + else + *a1 = 1; + break; + case 1: + *a2 = (Random() % 2400) + 1200; + *a1 = 3; + break; + case 2: + *a2 = (Random() % 1200) + 1200; + *a1 = 3; + break; + case 3: + (*a2)--; + if (*a2 == 0) + { + sub_8054050(); + *a1 = 2; + } + break; + case 4: + break; + } +} + +void sub_8054164(void) +{ + if ((gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 45) && !IsMirageIslandPresent()) + { + gUnknown_02029816 = TRUE; + gUnknown_02029814 = GetMirageIslandMon(); + } + else + { + gUnknown_02029814 = GetLocalWildMon(&gUnknown_02029816); + } +} + +u8 get_map_light_level_by_bank_and_number(s8 mapGroup, s8 mapNum) +{ + return get_mapheader_by_bank_and_number(mapGroup, mapNum)->mapType; +} + +u8 get_map_light_level_from_warp(struct WarpData *warp) +{ + return get_map_light_level_by_bank_and_number(warp->mapGroup, warp->mapNum); +} + +u8 sav1_map_get_light_level(void) +{ + return get_map_light_level_from_warp(&gSaveBlock1.location); +} + +u8 get_map_light_from_warp0(void) +{ + return get_map_light_level_from_warp(&gUnknown_020297F0); +} + +bool8 is_light_level_1_2_3_5_or_6(u8 a1) +{ + if (a1 == 3 || a1 == 1 || a1 == 5 || a1 == 2 || a1 == 6) + return TRUE; + else + return FALSE; +} + +bool8 is_light_level_1_2_3_or_6(u8 a1) +{ + if (a1 == 3 || a1 == 1 || a1 == 6 || a1 == 2) + return TRUE; + else + return FALSE; +} + +bool8 is_light_level_8_or_9(u8 a1) +{ + if (a1 == 8 || a1 == 9) + return TRUE; + else + return FALSE; +} + +u8 unref_sub_8054260(void) +{ + return get_mapheader_by_bank_and_number(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; +} + +u8 sav1_map_get_battletype(void) +{ + return get_mapheader_by_bank_and_number(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 c2_overworld_basic(void) +{ + ScriptContext2_RunScript(); + RunTasks(); + AnimateSprites(); + CameraUpdate(); + UpdateCameraPanning(); + BuildOamBuffer(); + UpdatePaletteFade(); + sub_8072EDC(); +} + +void sub_8054398(void) +{ + c2_overworld_basic(); +} + +void c2_overworld(void) +{ + int fading = (gPaletteFade.active != 0); + if (fading) + SetVBlankCallback(NULL); + c2_overworld_basic(); + 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_(); + sub_805338C(); + sub_8053198(); + 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 = sav1_get_flash_used_on_map(); + 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/misc/rom6.c b/src/misc/rom6.c new file mode 100644 index 000000000..ff032b6c2 --- /dev/null +++ b/src/misc/rom6.c @@ -0,0 +1,202 @@ +#include "global.h" +#include "rom6.h" +#include "braille_puzzles.h" +#include "field_effect.h" +#include "field_map_obj.h" +#include "field_player_avatar.h" +#include "item_use.h" +#include "pokemon_menu.h" +#include "rom4.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" + +extern u16 gScriptLastTalked; +extern void (*gFieldCallback)(void); +extern u8 gLastFieldPokeMenuOpened; +extern void (*gUnknown_03005CE4)(void); +extern u8 UseRockSmashScript[]; + +EWRAM_DATA struct MapPosition gUnknown_0203923C = {0}; + +static void task08_080C9820(u8); +static void sub_810B3DC(u8); +static void sub_810B428(u8); +static void sub_810B4CC(u8); +static void sub_810B53C(void); +static void sub_810B58C(void); +static void sub_810B5D8(void); +static void sub_810B634(void); + +bool8 npc_before_player_of_type(u8 a) +{ + u8 mapObjId; + + GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203923C.x, &gUnknown_0203923C.y); + gUnknown_0203923C.height = PlayerGetZCoord(); + mapObjId = GetFieldObjectIdByXYZ(gUnknown_0203923C.x, gUnknown_0203923C.y, gUnknown_0203923C.height); + if (gMapObjects[mapObjId].graphicsId != a) + { + return FALSE; + } + else + { + gScriptLastTalked = gMapObjects[mapObjId].localId; + return TRUE; + } +} + +u8 oei_task_add(void) +{ + GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203923C.x, &gUnknown_0203923C.y); + return CreateTask(task08_080C9820, 8); +} + +static void task08_080C9820(u8 taskId) +{ + u8 mapObjId; + + ScriptContext2_Enable(); + gPlayerAvatar.unk6 = 1; + mapObjId = gPlayerAvatar.mapObjectId; + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(&gMapObjects[mapObjId]) + || FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId])) + { + if (gMapHeader.mapType == 5) + { + FieldEffectStart(0x3B); + gTasks[taskId].func = sub_810B428; + } + else + { + sub_8059BF4(); + FieldObjectSetSpecialAnim(&gMapObjects[mapObjId], 0x39); + gTasks[taskId].func = sub_810B3DC; + } + } +} + +static void sub_810B3DC(u8 taskId) +{ + if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[gPlayerAvatar.mapObjectId]) == TRUE) + { + FieldEffectStart(0x3B); + gTasks[taskId].func = sub_810B428; + } +} + +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; + sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByCurrentState()); + StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gUnknown_0202FF84[2]); + FieldEffectActiveListRemove(6); + gTasks[taskId].func = sub_810B4CC; + } +} + +static void sub_810B4CC(u8 taskId) +{ + void (*func)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]); + + func(); + gPlayerAvatar.unk6 = 0; + DestroyTask(taskId); +} + +bool8 SetUpFieldMove_RockSmash(void) +{ + if (npc_before_player_of_type(0x56) == TRUE) + { + gFieldCallback = sub_808AB90; + gUnknown_03005CE4 = sub_810B53C; + return TRUE; + } + else + { + return FALSE; + } +} + +static void sub_810B53C(void) +{ + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; + ScriptContext1_SetupScript(UseRockSmashScript); +} + +int FldEff_RockSmash(void) +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (u32)sub_810B58C >> 16; + gTasks[taskId].data[9] = (u32)sub_810B58C; + IncrementGameStat(0x13); + return 0; +} + +static void sub_810B58C(void) +{ + PlaySE(SE_W088); + FieldEffectActiveListRemove(0x25); + EnableBothScriptContexts(); +} + +int SetUpFieldMove_Dig(void) +{ + if (sub_80CA1C8() == TRUE) + { + gFieldCallback = sub_808AB90; + gUnknown_03005CE4 = sub_810B5D8; + return TRUE; + } + else + { + return FALSE; + } +} + +static void sub_810B5D8(void) +{ + sub_8053014(); + FieldEffectStart(0x26); + gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; +} + +int FldEff_UseDig(void) +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (u32)sub_810B634 >> 16; + gTasks[taskId].data[9] = (u32)sub_810B634; + if (!ShouldDoBrailleDigEffect()) + SetPlayerAvatarTransitionFlags(1); + return 0; +} + +static void sub_810B634(void) +{ + u8 taskId; + + FieldEffectActiveListRemove(0x26); + if (ShouldDoBrailleDigEffect()) + { + DoBrailleDigEffect(); + } + else + { + taskId = CreateTask(task08_080A1C44, 8); + gTasks[taskId].data[0] = 0; + } +} diff --git a/src/misc/rom_800D42C.c b/src/misc/rom_800D42C.c new file mode 100644 index 000000000..f51779e65 --- /dev/null +++ b/src/misc/rom_800D42C.c @@ -0,0 +1,118 @@ +#include "global.h" +#include "battle.h" +#include "link.h" +#include "text.h" + +extern u16 gBattleTypeFlags; +extern u8 gBattleOutcome; + +extern struct Window gUnknown_03004210; + +extern u8 BattleText_Win[]; +extern u8 BattleText_Loss[]; +extern u8 BattleText_Tie[]; + +#if ENGLISH +#define LEFT_MESSAGE_X 6 +#define RIGHT_MESSAGE_X 21 +#define TILE_OFFSET_LOSS 168 +#elif GERMAN +#define LEFT_MESSAGE_X 5 +#define RIGHT_MESSAGE_X 20 +#define TILE_OFFSET_LOSS 172 +#endif +#define TILE_OFFSET_WIN 160 +#define CENTER_MESSAGE_X 13 +#define MESSAGE_Y 2 + +#define PRINT_MESSAGE(text, tileDataStartOffset, x) \ +{ \ + InitWindow(&gUnknown_03004210, text, tileDataStartOffset, x, MESSAGE_Y); \ + sub_8002F44(&gUnknown_03004210); \ +} + +#define PRINT_MESSAGE_LEFT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, LEFT_MESSAGE_X) +#define PRINT_MESSAGE_RIGHT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, RIGHT_MESSAGE_X) + +void PrintLinkBattleWinLossTie(void) +{ + + if (gBattleOutcome == 3) + { + PRINT_MESSAGE(BattleText_Tie, TILE_OFFSET_WIN, CENTER_MESSAGE_X); + return; + } + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + // Double battle? + + if (gBattleOutcome == 1) + { + + // lp_field_18 = player position? + switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18) + { + case 0: + case 2: + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); + return; + + case 1: + case 3: + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN) + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS) + return; + } + } + else + { + + switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18) + { + case 1: + case 3: + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); + return; + + case 0: + case 2: + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); + return; + } + } + + return; + } + + + if (gBattleOutcome == 1) + { + if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0) + { + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); + } + else + { + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); + } + } + else + { + if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0) + { + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); + } + else + { + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); + } + } +} diff --git a/src/misc/rom_8077ABC.c b/src/misc/rom_8077ABC.c new file mode 100644 index 000000000..249146b37 --- /dev/null +++ b/src/misc/rom_8077ABC.c @@ -0,0 +1,2055 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "battle.h" +#include "battle_anim.h" +#include "blend_palette.h" +#include "data2.h" +#include "decompress.h" +#include "palette.h" +#include "pokemon_icon.h" +#include "species.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "util.h" + +#define GET_UNOWN_LETTER(personality) ((\ + (((personality & 0x03000000) >> 24) << 6) \ + | (((personality & 0x00030000) >> 16) << 4) \ + | (((personality & 0x00000300) >> 8) << 2) \ + | (((personality & 0x00000003) >> 0) << 0) \ +) % 28) + +#define IS_DOUBLE_BATTLE() ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? TRUE : FALSE) + +#define NUM_BATTLE_SLOTS 4 + +#define gBattleMonPartyPositions gBattlePartyID +#define gCastformElevations gUnknownCastformData_0837F5A8 +#define gCastformBackSpriteYCoords gUnknown_0837F5AC +#define gTransformPersonalities gPID_perBank +#define gBattleMonSprites gObjectBankIDs + + +struct Struct_unk_2019348 { + u16 field_0; + u16 field_2; + u8 field_4; + u32 field_8; + u32 field_c; + u32 field_10; +}; + +struct TransformStatus { + u16 unknown; + u16 species; +}; + +struct Struct_gUnknown_0837F578 { + u8 field_0; + u8 field_1; +}; + +struct OamMatrix { + s16 a; + s16 b; + s16 c; + s16 d; +}; + +struct Struct_2017810 { + u8 filler_0[6]; + u8 field_6; + u8 filler_7[5]; +}; + +struct Color { + u16 r:5; + u16 g:5; + u16 b:5; +}; + +struct Struct_sub_8078914 { + u8 *field_0; + u8 *field_4; + u8 field_8; +}; + +struct BGCnt { + u16 priority:2; + u16 charBase:2; + u16 unused:2; + u16 mosaic:1; + u16 colorMode:1; + u16 screenBase:5; + u16 overflow:1; + u16 size:2; +}; + +#define BG1CNT (*(volatile struct BGCnt*)REG_ADDR_BG1CNT) +#define BG2CNT (*(volatile struct BGCnt*)REG_ADDR_BG2CNT) +#define BG3CNT (*(volatile struct BGCnt*)REG_ADDR_BG3CNT) + +extern struct OamData gOamData_837DF9C[]; +extern const union AnimCmd *const gDummySpriteAnimTable[]; +extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; + +extern struct Struct_unk_2019348 unk_2019348; +extern struct TransformStatus gTransformStatuses[]; +extern u16 gBattleMonPartyPositions[]; +extern u16 gBattleTypeFlags; +extern u32 gTransformPersonalities[NUM_BATTLE_SLOTS]; +extern u8 gBattleMonForms[NUM_BATTLE_SLOTS]; +extern u16 gUnknown_0202F7CA[]; +extern u8 gBattleMonSprites[NUM_BATTLE_SLOTS]; +extern u8 gBattleAnimPlayerMonIndex; +extern u8 gBattleAnimEnemyMonIndex; +extern s16 gBattleAnimArgs[8]; +extern u8 gBanksBySide[NUM_BATTLE_SLOTS]; +extern u8 gNoOfAllBanks; // gNumBattleMons? +extern struct OamMatrix gOamMatrices[]; +extern struct Struct_2017810 unk_2017810[]; +extern u8 gHappinessMoveAnim; + +EWRAM_DATA union AffineAnimCmd *gUnknown_0202F7D4 = NULL; +EWRAM_DATA u32 filler_0202F7D8[3] = {0}; + +const struct Struct_gUnknown_0837F578 gUnknown_0837F578[][4] = { + { + { 72, 80 }, + { 176, 40 }, + { 48, 40 }, + { 112, 80 }, + }, + { + { 32, 80 }, + { 200, 40 }, + { 90, 88 }, + { 152, 32 }, + }, +}; + +// One entry for each of the four Castform forms. +// Coords are probably front pic coords or back pic coords, but this data does not seem to be +// used during battle, party summary, or pokedex screens. +const struct MonCoords gCastformFrontSpriteCoords[] = { + { 0x44, 17 }, // NORMAL + { 0x66, 9 }, // SUN + { 0x46, 9 }, // RAIN + { 0x86, 8 }, // HAIL +}; + +const u8 gCastformElevations[] = { + 13, // NORMAL + 14, // SUN + 13, // RAIN + 13, // HAIL +}; + +// Y position of the backsprite for each of the four Castform forms. +const u8 gCastformBackSpriteYCoords[] = { + 0, // NORMAL + 0, // SUN + 0, // RAIN + 0, // HAIL +}; + +const struct SpriteTemplate gSpriteTemplate_837F5B0[] = { + { + .tileTag = 55125, + .paletteTag = 55125, + .oam = gOamData_837DF9C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, { + .tileTag = 55126, + .paletteTag = 55126, + .oam = gOamData_837DF9C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + } +}; + +const struct SpriteSheet gUnknown_0837F5E0[] = { + { gMiscBlank_Gfx, 0x800, 55125, }, + { gMiscBlank_Gfx, 0x800, 55126, }, +}; + + +u8 sub_8077ABC(u8 slot, u8 a2) { + u8 var; + u16 species; + struct TransformStatus *transform; + + if (IsContest()) { + if (a2 == 3 && slot == 3) { + a2 = 1; + } + } + switch (a2) { + case 0: + case 2: + var = gUnknown_0837F578[IS_DOUBLE_BATTLE()][GetBankIdentity(slot)].field_0; + break; + case 1: + var = gUnknown_0837F578[IS_DOUBLE_BATTLE()][GetBankIdentity(slot)].field_1; + break; + case 3: + case 4: + default: + if (IsContest()) { + if (unk_2019348.field_4 & 1) { + species = unk_2019348.field_2; + } else { + species = unk_2019348.field_0; + } + } else { + if (GetBankSide(slot)) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + } else { + species = transform->species; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + } else { + species = transform->species; + } + } + } + if (a2 == 3) { + var = sub_8077E44(slot, species, 1); + } else { + var = sub_8077E44(slot, species, 0); + } + break; + } + return var; +} + +u8 sub_8077BFC(u8 slot, u16 species) { + u16 letter; + u32 personality; + struct TransformStatus *transform; + u8 ret; + u16 var; + + if (!GetBankSide(slot) || IsContest()) { + if (species == SPECIES_UNOWN) { + if (IsContest()) { + if (unk_2019348.field_4 & 1) { + personality = unk_2019348.field_10; + } else { + personality = unk_2019348.field_8; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + personality = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); + } else { + personality = gTransformPersonalities[slot]; + } + } + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = species; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + ret = gMonBackPicCoords[var].y_offset; + } else if (species == SPECIES_CASTFORM) { + ret = gCastformBackSpriteYCoords[gBattleMonForms[slot]]; + } else if (species > NUM_SPECIES) { + ret = gMonBackPicCoords[0].y_offset; + } else { + ret = gMonBackPicCoords[species].y_offset; + } + } else { + if (species == SPECIES_UNOWN) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + personality = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); + } else { + personality = gTransformPersonalities[slot]; + } + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = species; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + ret = gMonFrontPicCoords[var].y_offset; + } else if (species == SPECIES_CASTFORM) { + ret = gCastformFrontSpriteCoords[gBattleMonForms[slot]].y_offset; + } else if (species > NUM_SPECIES) { + ret = gMonFrontPicCoords[0].y_offset; + } else { + ret = gMonFrontPicCoords[species].y_offset; + } + } + return ret; +} + +u8 sub_8077DD8(u8 slot, u16 species) { + u8 ret = 0; + if (GetBankSide(slot) == 1) { + if (!IsContest()) { + if (species == SPECIES_CASTFORM) { + ret = gCastformElevations[gBattleMonForms[slot]]; + } else if (species > NUM_SPECIES) { + ret = gEnemyMonElevation[0]; + } else { + ret = gEnemyMonElevation[species]; + } + } + } + return ret; +} + +u8 sub_8077E44(u8 slot, u16 species, u8 a3) { + u16 offset; + u8 y; + if (GetBankSide(slot) == 0 || IsContest()) { + offset = sub_8077BFC(slot, species); + } else { + offset = sub_8077BFC(slot, species); + offset -= sub_8077DD8(slot, species); + } + y = offset + gUnknown_0837F578[IS_DOUBLE_BATTLE()][GetBankIdentity(slot)].field_1; + if (a3) { + if (GetBankSide(slot) == 0) { + y += 8; + } + if (y > 104) y = 104; + } + return y; +} + +u8 sub_8077EE4(u8 slot, u8 a2) { + u16 species; + struct TransformStatus *transform; + if (a2 == 3 || a2 == 4) { + if (IsContest()) { + if (unk_2019348.field_4 & 1) { + species = unk_2019348.field_2; + } else { + species = unk_2019348.field_0; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = gUnknown_0202F7CA[slot]; + } else { + species = transform->species; + } + } + if (a2 == 3) { + return sub_8077E44(slot, species, 1); + } else { + return sub_8077E44(slot, species, 0); + } + } else { + return sub_8077ABC(slot, a2); + } +} + +u8 sub_8077F68(u8 slot) { + return sub_8077ABC(slot, 4); +} + +u8 sub_8077F7C(u8 slot) { + u16 var; + if (GetBankSide(slot)) { + var = sub_8077ABC(slot, 1) + 16; + } else { + var = sub_8077ABC(slot, 1) + 17; + } + return var; +} + +u8 sub_8077FC0(u8 slot) { + u16 var; + u8 r6; + struct TransformStatus *transform; + r6 = sub_8077ABC(slot, 1); + if (!IsContest()) { + if (GetBankSide(slot)) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + var = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + } else { + var = transform->species; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + var = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + } else { + var = transform->species; + } + } + if (GetBankSide(slot)) { + r6 -= sub_8077DD8(slot, var); + } + } + return r6; +} + +u8 obj_id_for_side_relative_to_move(u8 a1) { + u8 *sprites; + if (a1 == 0) { + if (sub_8078874(gBattleAnimPlayerMonIndex)) { + sprites = gBattleMonSprites; + return sprites[gBattleAnimPlayerMonIndex]; + } else { + return 0xff; + } + } else if (a1 == 1) { + if (sub_8078874(gBattleAnimEnemyMonIndex)) { + sprites = gBattleMonSprites; + return sprites[gBattleAnimEnemyMonIndex]; + } else { + return 0xff; + } + } else if (a1 == 2) { + if (!b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) { + return 0xff; + } else { + return gBattleMonSprites[gBattleAnimPlayerMonIndex ^ 2]; + } + } else { + if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) { + return gBattleMonSprites[gBattleAnimEnemyMonIndex ^ 2]; + } else { + return 0xff; + } + } +} + +void oamt_set_x3A_32(struct Sprite *sprite, void (*callback)(struct Sprite*)) { + sprite->data6 = (u32)(callback) & 0xffff; + sprite->data7 = (u32)(callback) >> 16; +} + +void sub_8078104(struct Sprite *sprite) { + u32 callback = (u16)sprite->data6 | (sprite->data7 << 16); + sprite->callback = (void (*)(struct Sprite *))callback; +} + +void sub_8078114(struct Sprite *sprite) { + if (sprite->data3) { + sprite->pos2.x = Sin(sprite->data0, sprite->data1); + sprite->pos2.y = Cos(sprite->data0, sprite->data1); + sprite->data0 += sprite->data2; + if (sprite->data0 >= 0x100) { + sprite->data0 -= 0x100; + } else if (sprite->data0 < 0) { + sprite->data0 += 0x100; + } + sprite->data3--; + } else { + sub_8078104(sprite); + } +} + +void sub_8078174(struct Sprite *sprite) { + if (sprite->data3) { + sprite->pos2.x = Sin(sprite->data0, (sprite->data5 >> 8) + sprite->data1); + sprite->pos2.y = Cos(sprite->data0, (sprite->data5 >> 8) + sprite->data1); + sprite->data0 += sprite->data2; + sprite->data5 += sprite->data4; + if (sprite->data0 >= 0x100) { + sprite->data0 -= 0x100; + } else if (sprite->data0 < 0) { + sprite->data0 += 0x100; + } + sprite->data3--; + } else { + sub_8078104(sprite); + } +} + +void unref_sub_80781F0(struct Sprite *sprite) { + if (sprite->data3) { + sprite->pos2.x = Sin(sprite->data0, sprite->data1); + sprite->pos2.y = Cos(sprite->data4, sprite->data1); + sprite->data0 += sprite->data2; + sprite->data4 += sprite->data5; + if (sprite->data0 >= 0x100) { + sprite->data0 -= 0x100; + } else if (sprite->data0 < 0) { + sprite->data0 += 0x100; + } + if (sprite->data4 >= 0x100) { + sprite->data4 -= 0x100; + } else if (sprite->data4 < 0) { + sprite->data4 += 0x100; + } + sprite->data3--; + } else { + sub_8078104(sprite); + } +} + +void sub_8078278(struct Sprite *sprite) { + if (sprite->data3) { + sprite->pos2.x = Sin(sprite->data0, sprite->data1); + sprite->pos2.y = Cos(sprite->data0, sprite->data4); + sprite->data0 += sprite->data2; + if (sprite->data0 >= 0x100) { + sprite->data0 -= 0x100; + } else if (sprite->data0 < 0) { + sprite->data0 += 0x100; + } + sprite->data3--; + } else { + sub_8078104(sprite); + } +} + +void sub_80782D8(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + } else { + sub_8078104(sprite); + } +} + +void sub_80782F8(struct Sprite *sprite) { + sub_8078314(sprite); + sprite->callback = sub_8078364; + sprite->callback(sprite); +} + +void sub_8078314(struct Sprite *sprite) { + s16 old; + int v1; + if (sprite->data1 > sprite->data2) { + sprite->data0 = -sprite->data0; + } + v1 = sprite->data2 - sprite->data1; + old = sprite->data0; + sprite->data0 = abs(v1 / sprite->data0); + sprite->data2 = (sprite->data4 - sprite->data3) / sprite->data0; + sprite->data1 = old; +} + +void sub_8078364(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->pos2.x += sprite->data1; + sprite->pos2.y += sprite->data2; + } else { + sub_8078104(sprite); + } +} + +void sub_8078394(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->data3 += sprite->data1; + sprite->data4 += sprite->data2; + sprite->pos2.x = sprite->data3 >> 8; + sprite->pos2.y = sprite->data4 >> 8; + } else { + sub_8078104(sprite); + } +} + +void sub_80783D0(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->data3 += sprite->data1; + sprite->data4 += sprite->data2; + sprite->pos2.x = sprite->data3 >> 8; + sprite->pos2.y = sprite->data4 >> 8; + } else { + sub_8078104(sprite); + } + UpdateMonIconFrame(sprite); +} + +void unref_sub_8078414(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x + sprite->pos2.x; + sprite->data3 = sprite->pos1.y + sprite->pos2.y; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + sprite->callback = sub_80782F8; +} + +void sub_8078458(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + gSprites[sprite->data3].pos2.x += sprite->data1; + gSprites[sprite->data3].pos2.y += sprite->data2; + } else { + sub_8078104(sprite); + } +} + +void sub_80784A8(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->data3 += sprite->data1; + sprite->data4 += sprite->data2; + gSprites[sprite->data5].pos2.x = sprite->data3 >> 8; + gSprites[sprite->data5].pos2.y = sprite->data4 >> 8; + } else { + sub_8078104(sprite); + } +} + +void sub_8078504(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->pos2.x = sprite->data2 >> 8; + sprite->data2 += sprite->data1; + sprite->pos2.y = sprite->data4 >> 8; + sprite->data4 += sprite->data3; + if (sprite->data0 % sprite->data5 == 0) { + if (sprite->data5) { + sprite->invisible ^= 1; + } + } + } else { + sub_8078104(sprite); + } +} + +void move_anim_8074EE0(struct Sprite *sprite) { + FreeSpriteOamMatrix(sprite); + move_anim_8072740(sprite); +} + +void unref_sub_8078588(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x + sprite->pos2.x; + sprite->data3 = sprite->pos1.y + sprite->pos2.y; + sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + sprite->callback = sub_80782F8; +} + +void unref_sub_80785CC(struct Sprite *sprite) { + ResetPaletteStructByUid(sprite->data5); + move_anim_8074EE0(sprite); +} + +void sub_80785E4(struct Sprite *sprite) { + if (sprite->affineAnimEnded) { + sub_8078104(sprite); + } +} + +void sub_8078600(struct Sprite *sprite) { + if (sprite->animEnded) { + sub_8078104(sprite); + } +} + +void sub_807861C(struct Sprite *sprite) { + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + move_anim_8072740(sprite); +} + +void sub_8078634(u8 task) { + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimVisualTask(task); +} + +void sub_8078650(struct Sprite *sprite) { + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); +} + +void sub_807867C(struct Sprite *sprite, s16 a2) { + u16 v1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 0); + u16 v2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 0); + if (v1 > v2) { + sprite->pos1.x -= a2; + } else if (v1 < v2) { + sprite->pos1.x += a2; + } else { + if (GetBankSide(gBattleAnimPlayerMonIndex)) { + sprite->pos1.x -= a2; + } else { + sprite->pos1.x += a2; + } + } +} + +void sub_80786EC(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data6 = 0x8000 / sprite->data0; + sprite->data7 = 0; +} + +bool8 sub_8078718(struct Sprite *sprite) { + if (sub_8078B5C(sprite)) { + return TRUE; + } + sprite->data7 += sprite->data6; + sprite->pos2.y += Sin((u8)(sprite->data7 >> 8), sprite->data5); + return FALSE; +} + +void oamt_add_pos2_onto_pos1(struct Sprite *sprite) { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; +} + +void sub_8078764(struct Sprite *sprite, u8 a2) { + if (!a2) { + sprite->pos1.x = sub_8077EE4(gBattleAnimEnemyMonIndex, 0); + sprite->pos1.y = sub_8077EE4(gBattleAnimEnemyMonIndex, 1); + } + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; +} + +void sub_80787B0(struct Sprite *sprite, u8 a2) { + if (!a2) { + sprite->pos1.x = sub_8077EE4(gBattleAnimPlayerMonIndex, 0); + sprite->pos1.y = sub_8077EE4(gBattleAnimPlayerMonIndex, 1); + } else { + sprite->pos1.x = sub_8077EE4(gBattleAnimPlayerMonIndex, 2); + sprite->pos1.y = sub_8077EE4(gBattleAnimPlayerMonIndex, 3); + } + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; +} + +u8 GetBankSide(u8 slot) { + return gBanksBySide[slot] & 1; +} + +u8 GetBankIdentity(u8 slot) { + return gBanksBySide[slot]; +} + +u8 GetBankByPlayerAI(u8 slot) { + u8 i; + for (i = 0; i < gNoOfAllBanks; i++) { + if (gBanksBySide[i] == slot) { + break; + } + } + return i; +} + +bool8 sub_8078874(u8 slot) { + if (IsContest()) { + if (gBattleAnimPlayerMonIndex == slot) { + return TRUE; + } + if (gBattleAnimEnemyMonIndex == slot) { + return TRUE; + } + return FALSE; + } else { + if (gBanksBySide[slot] == 0xff) { + return FALSE; + } + if (GetBankSide(slot)) { + if (GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_HP) != 0) { + return TRUE; + } + } else { + if (GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_HP) != 0) { + return TRUE; + } + } + return FALSE; + } +} + +bool8 IsDoubleBattle() { + return IS_DOUBLE_BATTLE(); +} + +void sub_8078914(struct Struct_sub_8078914 *unk) { + if (IsContest()) { + unk->field_0 = (u8 *)0x6008000; + unk->field_4 = (u8 *)0x600f000; + unk->field_8 = 0xe; + } else { + unk->field_0 = (u8 *)0x6004000; + unk->field_4 = (u8 *)0x600e000; + unk->field_8 = 0x8; + } +} + +void sub_8078954(struct Struct_sub_8078914 *unk) { + if (IsContest()) { + unk->field_0 = (u8 *)0x6008000; + unk->field_4 = (u8 *)0x600f000; + unk->field_8 = 0xe; + } else if (GetBankIdentity_permutated(gBattleAnimPlayerMonIndex) == 1) { + unk->field_0 = (u8 *)0x6004000; + unk->field_4 = (u8 *)0x600e000; + unk->field_8 = 0x8; + } else { + unk->field_0 = (u8 *)0x6006000; + unk->field_4 = (u8 *)0x600f000; + unk->field_8 = 0x9; + } +} + +u8 sub_80789BC() { + if (IsContest()) { + return 1; + } + return 2; +} + +void sub_80789D4(bool8 a1) { + if (!a1) { + BG3CNT.size = 0; + BG3CNT.overflow = 1; + } else if (IsContest()) { + BG3CNT.size = 0; + BG3CNT.overflow = 1; + } else { + BG3CNT.size = 1; + BG3CNT.overflow = 0; + } +} + +void sub_8078A34(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + sub_8078A5C(sprite); + sprite->callback = sub_80783D0; + sprite->callback(sprite); +} + +void sub_8078A5C(struct Sprite *sprite) { + s16 x = (sprite->data2 - sprite->data1) << 8; + s16 y = (sprite->data4 - sprite->data3) << 8; + sprite->data1 = x / sprite->data0; + sprite->data2 = y / sprite->data0; + sprite->data4 = 0; + sprite->data3 = 0; +} + +void obj_translate_based_on_private_1_2_3_4(struct Sprite *sprite) { + int x = sprite->data2 - sprite->data1; + int y = sprite->data4 - sprite->data3; + bool8 r8 = x < 0; + bool8 r9 = y < 0; + u16 x2 = abs(x) << 8; + u16 y2 = abs(y) << 8; + x2 = x2 / sprite->data0; + y2 = y2 / sprite->data0; + if (r8) { + x2 |= 1; + } else { + x2 &= ~1; + } + if (r9) { + y2 |= 1; + } else { + y2 &= ~1; + } + sprite->data1 = x2; + sprite->data2 = y2; + sprite->data4 = 0; + sprite->data3 = 0; +} + +void sub_8078B34(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->callback = sub_8078BB8; + sprite->callback(sprite); +} + +bool8 sub_8078B5C(struct Sprite *sprite) { + u16 v1, v2, x, y; + if (!sprite->data0) { + return TRUE; + } + v1 = sprite->data1; + v2 = sprite->data2; + x = sprite->data3; + y = sprite->data4; + x += v1; + y += v2; + if (v1 & 1) { + sprite->pos2.x = -(x >> 8); + } else { + sprite->pos2.x = x >> 8; + } + if (v2 & 1) { + sprite->pos2.y = -(y >> 8); + } else { + sprite->pos2.y = y >> 8; + } + sprite->data3 = x; + sprite->data4 = y; + sprite->data0--; + return FALSE; +} + +void sub_8078BB8(struct Sprite *sprite) { + if (sub_8078B5C(sprite)) { + sub_8078104(sprite); + } +} + +void sub_8078BD4(struct Sprite *sprite) { + int v1 = abs(sprite->data2 - sprite->data1) << 8; + sprite->data0 = v1 / sprite->data0; + obj_translate_based_on_private_1_2_3_4(sprite); +} + +void sub_8078C00(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + sub_8078BD4(sprite); + sprite->callback = sub_8078BB8; + sprite->callback(sprite); +} + +void sub_8078C28(struct Sprite *sprite) { + int x = sprite->data2 - sprite->data1; + int y = sprite->data4 - sprite->data3; + bool8 x_sign = x < 0; + bool8 y_sign = y < 0; + u16 x2 = abs(x) << 4; + u16 y2 = abs(y) << 4; + x2 /= sprite->data0; + y2 /= sprite->data0; + if (x_sign) { + x2 |= 1; + } else { + x2 &= ~1; + } + if (y_sign) { + y2 |= 1; + } else { + y2 &= ~1; + } + sprite->data1 = x2; + sprite->data2 = y2; + sprite->data4 = 0; + sprite->data3 = 0; +} + +void sub_8078CC0(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + sub_8078C28(sprite); + sprite->callback = sub_8078D44; + sprite->callback(sprite); +} + +bool8 sub_8078CE8(struct Sprite *sprite) { + u16 v1, v2, x, y; + if (!sprite->data0) { + return TRUE; + } + v1 = sprite->data1; + v2 = sprite->data2; + x = sprite->data3; + y = sprite->data4; + x += v1; + y += v2; + if (v1 & 1) { + sprite->pos2.x = -(x >> 4); + } else { + sprite->pos2.x = x >> 4; + } + if (v2 & 1) { + sprite->pos2.y = -(y >> 4); + } else { + sprite->pos2.y = y >> 4; + } + sprite->data3 = x; + sprite->data4 = y; + sprite->data0--; + return FALSE; +} + +void sub_8078D44(struct Sprite *sprite) { + if (sub_8078CE8(sprite)) { + sub_8078104(sprite); + } +} + +void sub_8078D60(struct Sprite *sprite) { + int v1 = abs(sprite->data2 - sprite->data1) << 4; + sprite->data0 = v1 / sprite->data0; + sub_8078C28(sprite); +} + +void sub_8078D8C(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + sub_8078D60(sprite); + sprite->callback = sub_8078D44; + sprite->callback(sprite); +} + +void obj_id_set_rotscale(u8 sprite, s16 xScale, s16 yScale, u16 rotation) { + int i; + struct ObjAffineSrcData src; + struct OamMatrix matrix; + src.xScale = xScale; + src.yScale = yScale; + src.rotation = rotation; + if (sub_8078E38()) { + src.xScale = -src.xScale; + } + i = gSprites[sprite].oam.matrixNum; + ObjAffineSet(&src, &matrix, 1, 2); + gOamMatrices[i].a = matrix.a; + gOamMatrices[i].b = matrix.b; + gOamMatrices[i].c = matrix.c; + gOamMatrices[i].d = matrix.d; +} + +bool8 sub_8078E38() { + if (IsContest()) { + if (gSprites[obj_id_for_side_relative_to_move(0)].data2 == 0xc9 /* XXX SPECIES_UNOWN? */) { + return FALSE; + } + return TRUE; + } + return FALSE; +} + +void sub_8078E70(u8 sprite, u8 a2) { + struct Struct_2017810 *unk; + u8 r7 = gSprites[sprite].data0; + if (IsContest() || b_side_obj__get_some_boolean(r7)) { + gSprites[sprite].invisible = FALSE; + } + gSprites[sprite].oam.objMode = a2; + gSprites[sprite].affineAnimPaused = TRUE; + if (!IsContest() && !gSprites[sprite].oam.affineMode) { + unk = &unk_2017810[r7]; + gSprites[sprite].oam.matrixNum = unk->field_6; + } + gSprites[sprite].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[sprite], gSprites[sprite].oam.shape, gSprites[sprite].oam.size, gSprites[sprite].oam.affineMode); +} + +void sub_8078F40(u8 sprite) { + obj_id_set_rotscale(sprite, 0x100, 0x100, 0); + gSprites[sprite].oam.affineMode = 1; + gSprites[sprite].oam.objMode = 0; + gSprites[sprite].affineAnimPaused = FALSE; + CalcCenterToCornerVec(&gSprites[sprite], gSprites[sprite].oam.shape, gSprites[sprite].oam.size, gSprites[sprite].oam.affineMode); +} + +void sub_8078F9C(u8 sprite) { + u16 matrix = gSprites[sprite].oam.matrixNum; + s16 c = gOamMatrices[matrix].c; + if (c < 0) { + c = -c; + } + gSprites[sprite].pos2.y = c >> 3; +} + +// related to obj_id_set_rotscale +void sub_8078FDC(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation) { + int i; + struct ObjAffineSrcData src; + struct OamMatrix matrix; + if (sprite->oam.affineMode & 1) { + sprite->affineAnimPaused = TRUE; + if (a2) { + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); + } + src.xScale = xScale; + src.yScale = yScale; + src.rotation = rotation; + if (sub_8078E38()) { + src.xScale = -src.xScale; + } + i = sprite->oam.matrixNum; + ObjAffineSet(&src, &matrix, 1, 2); + gOamMatrices[i].a = matrix.a; + gOamMatrices[i].b = matrix.b; + gOamMatrices[i].c = matrix.c; + gOamMatrices[i].d = matrix.d; + } +} + +void sub_8079098(struct Sprite *sprite) { + sub_8078FDC(sprite, TRUE, 0x100, 0x100, 0); + sprite->affineAnimPaused = FALSE; + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); +} + +u16 sub_80790D8(s16 a, s16 b) { + return ArcTan2(a, b); +} + +u16 sub_80790F0(s16 a, s16 b) { + u16 var = sub_80790D8(a, b); + return -var; +} + +void sub_8079108(u16 a1, bool8 a2) { + int i; + struct Color *c; + struct Color *c2; + u16 average; + + a1 *= 0x10; + + if (!a2) { + for (i = 0; i < 0x10; i++) { + c = (struct Color *)&gPlttBufferUnfaded[a1 + i]; + average = c->r + c->g + c->b; + average /= 3; + + c2 = (struct Color *)&gPlttBufferFaded[a1 + i]; + c2->r = average; + c2->g = average; + c2->b = average; + } + } else { + CpuCopy32(&gPlttBufferUnfaded[a1], &gPlttBufferFaded[a1], 0x20); + } +} + +u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) { + u32 var = 0; + u32 shift; + if (a1) { + if (!IsContest()) { + var = 0xe; + } else { + var = 1 << sub_80789BC(); + } + } + if (a2) { + shift = gBattleAnimPlayerMonIndex + 16; + var |= 1 << shift; + } + if (a3) { + shift = gBattleAnimEnemyMonIndex + 16; + var |= 1 << shift; + } + if (a4) { + if (b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) { + shift = (gBattleAnimPlayerMonIndex ^ 2) + 16; + var |= 1 << shift; + } + } + if (a5) { + if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) { + shift = (gBattleAnimEnemyMonIndex ^ 2) + 16; + var |= 1 << shift; + } + } + if (a6) { + if (!IsContest()) { + var |= 0x100; + } else { + var |= 0x4000; + } + } + if (a7) { + if (!IsContest()) { + var |= 0x200; + } + } + return var; +} + +u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4) { + u32 var = 0; + u32 shift; + if (IsContest()) { + if (a1) { + var |= 1 << 18; + return var; + } + } else { + if (a1) { + if (b_side_obj__get_some_boolean(GetBankByPlayerAI(0))) { + var |= 1 << (GetBankByPlayerAI(0) + 16); + } + } + if (a2) { + if (b_side_obj__get_some_boolean(GetBankByPlayerAI(2))) { + shift = GetBankByPlayerAI(2) + 16; + var |= 1 << shift; + } + } + if (a3) { + if (b_side_obj__get_some_boolean(GetBankByPlayerAI(1))) { + shift = GetBankByPlayerAI(1) + 16; + var |= 1 << shift; + } + } + if (a4) { + if (b_side_obj__get_some_boolean(GetBankByPlayerAI(3))) { + shift = GetBankByPlayerAI(3) + 16; + var |= 1 << shift; + } + } + } + return var; +} + +u8 sub_80793A8(u8 a1) { + return a1; +} + +u8 unref_sub_80793B0(u8 a1) { + return GetBankByPlayerAI(a1); +} + +void sub_80793C4(struct Sprite *sprite) { + bool8 var; + if (!sprite->data0) { + if (!gBattleAnimArgs[3]) { + var = TRUE; + } else { + var = FALSE; + } + if (!gBattleAnimArgs[2]) { + sub_80787B0(sprite, var); + } else { + sub_8078764(sprite, var); + } + sprite->data0++; + + } else if (sprite->animEnded || sprite->affineAnimEnded) { + move_anim_8074EE0(sprite); + } +} + +void sub_807941C(struct Sprite *sprite) { + bool8 v1; + u8 v2; + if (!(gBattleAnimArgs[5] & 0xff00)) { + v1 = TRUE; + } else { + v1 = FALSE; + } + if (!(gBattleAnimArgs[5] & 0xff)) { + v2 = 3; + } else { + v2 = 1; + } + sub_80787B0(sprite, v1); + if (GetBankSide(gBattleAnimPlayerMonIndex)) { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + sprite->data0 = gBattleAnimArgs[4]; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + gBattleAnimArgs[2]; + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, v2) + gBattleAnimArgs[3]; + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_80794A8(struct Sprite *sprite) { + sub_80787B0(sprite, 1); + if (GetBankSide(gBattleAnimPlayerMonIndex)) { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + sprite->data0 = gBattleAnimArgs[4]; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + gBattleAnimArgs[2]; + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[3]; + sprite->data5 = gBattleAnimArgs[5]; + sub_80786EC(sprite); + sprite->callback = sub_8079518; +} + +void sub_8079518(struct Sprite *sprite) { + if (sub_8078718(sprite)) { + move_anim_8072740(sprite); + } +} + +void sub_8079534(struct Sprite *sprite) { + u8 r4, slot, r7; + if (!gBattleAnimArgs[6]) { + r4 = 1; + r7 = 3; + } else { + r4 = 0; + r7 = 1; + } + if (!gBattleAnimArgs[5]) { + sub_80787B0(sprite, r4); + slot = gBattleAnimPlayerMonIndex; + } else { + sub_8078764(sprite, r4); + slot = gBattleAnimEnemyMonIndex; + } + if (GetBankSide(gBattleAnimPlayerMonIndex)) { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + sub_8078764(sprite, r4); + sprite->data0 = gBattleAnimArgs[4]; + sprite->data2 = sub_8077ABC(slot, 2) + gBattleAnimArgs[2]; + sprite->data4 = sub_8077ABC(slot, r7) + gBattleAnimArgs[3]; + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1) { + u16 i; + u8 sprite = obj_id_for_side_relative_to_move(a1); + if (sprite != 0xff) { + for (i = 0; i < 0x40; i++) { + if (gSprites[i].inUse) { + continue; + } + gSprites[i] = gSprites[sprite]; + gSprites[i].oam.objMode = 1; + gSprites[i].invisible = FALSE; + return i; + } + } + return -1; +} + +void obj_delete_but_dont_free_vram(struct Sprite *sprite) { + sprite->usingSheet = TRUE; + DestroySprite(sprite); +} + +void sub_8079670(u8 task) { + s16 v1 = 0; + s16 v2 = 0; + if (gBattleAnimArgs[2] > gBattleAnimArgs[0]) { + v2 = 1; + } + if (gBattleAnimArgs[2] < gBattleAnimArgs[0]) { + v2 = -1; + } + if (gBattleAnimArgs[3] > gBattleAnimArgs[1]) { + v1 = 1; + } + if (gBattleAnimArgs[3] < gBattleAnimArgs[1]) { + v1 = -1; + } + gTasks[task].data[0] = 0; + gTasks[task].data[1] = gBattleAnimArgs[4]; + gTasks[task].data[2] = 0; + gTasks[task].data[3] = gBattleAnimArgs[0]; + gTasks[task].data[4] = gBattleAnimArgs[1]; + gTasks[task].data[5] = v2; + gTasks[task].data[6] = v1; + gTasks[task].data[7] = gBattleAnimArgs[2]; + gTasks[task].data[8] = gBattleAnimArgs[3]; + REG_BLDALPHA = (gBattleAnimArgs[1] << 8) | gBattleAnimArgs[0]; + gTasks[task].func = sub_80796F8; +} + +void sub_80796F8(u8 taskId) { + struct Task *task = &gTasks[taskId]; + if (++task->data[0] > task->data[1]) { + task->data[0] = 0; + if (++task->data[2] & 1) { + if (task->data[3] != task->data[7]) { + task->data[3] += task->data[5]; + } + } else { + if (task->data[4] != task->data[8]) { + task->data[4] += task->data[6]; + } + } + REG_BLDALPHA = (task->data[4] << 8) | task->data[3]; + if (task->data[3] == task->data[7] && task->data[4] == task->data[8]) { + DestroyAnimVisualTask(taskId); + return; + } + } +} + +void sub_8079790(u8 task) { + u8 sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + if (sprite == 0xff) { + DestroyAnimVisualTask(task); + return; + } + gTasks[task].data[0] = (gSprites[sprite].oam.paletteNum * 0x10) + 0x101; + sub_80797EC(&gTasks[task]); +} + +void sub_80797EC(struct Task *task) { + task->data[1] = gBattleAnimArgs[1]; + task->data[2] = 0; + task->data[3] = gBattleAnimArgs[2]; + task->data[4] = 0; + task->data[5] = gBattleAnimArgs[3]; + task->data[6] = 0; + task->data[7] = gBattleAnimArgs[4]; + task->func = sub_8079814; +} + +void sub_8079814(u8 taskId) { + struct Task *task = &gTasks[taskId]; + if (++task->data[4] >= task->data[5]) { + task->data[4] = 0; + if (!task->data[6]) { + task->data[2]++; + BlendPalette(task->data[0], 0xf, task->data[2], task->data[1]); + if (task->data[2] == task->data[3]) { + task->data[6] = 1; + } + } else { + task->data[2]--; + BlendPalette(task->data[0], 0xf, task->data[2], task->data[1]); + if (!task->data[2]) { + if (--task->data[7]) { + task->data[4] = 0; + task->data[6] = 0; + } else { + DestroyAnimVisualTask(taskId); + return; + } + } + } + } +} + +void sub_80798AC(u8 task) { + u8 palette = IndexOfSpritePaletteTag(gBattleAnimArgs[0]); + if (palette == 0xff) { + DestroyAnimVisualTask(task); + return; + } + gTasks[task].data[0] = (palette * 0x10) + 0x101; + sub_80797EC(&gTasks[task]); +} + +void sub_80798F4(struct Task *task, u8 a2, void *a3) { + task->data[7] = 0; + task->data[8] = 0; + task->data[9] = 0; + task->data[15] = a2; + task->data[10] = 0x100; + task->data[11] = 0x100; + task->data[12] = 0; + sub_8079BF4(&task->data[13], &task->data[14], a3); + sub_8078E70(a2, 0); +} + +bool8 sub_807992C(struct Task *task) { + gUnknown_0202F7D4 = sub_8079BFC(task->data[13], task->data[14]) + (task->data[7] << 3); + switch (gUnknown_0202F7D4->type) { + default: + if (!gUnknown_0202F7D4->frame.duration) { + task->data[10] = gUnknown_0202F7D4->frame.xScale; + task->data[11] = gUnknown_0202F7D4->frame.yScale; + task->data[12] = gUnknown_0202F7D4->frame.rotation; + task->data[7]++; + gUnknown_0202F7D4++; + } + task->data[10] += gUnknown_0202F7D4->frame.xScale; + task->data[11] += gUnknown_0202F7D4->frame.yScale; + task->data[12] += gUnknown_0202F7D4->frame.rotation; + obj_id_set_rotscale(task->data[15], task->data[10], task->data[11], task->data[12]); + sub_8079A64(task->data[15]); + if (++task->data[8] >= gUnknown_0202F7D4->frame.duration) { + task->data[8] = 0; + task->data[7]++; + } + break; + + case AFFINEANIMCMDTYPE_JUMP: + task->data[7] = gUnknown_0202F7D4->jump.target; + break; + + case AFFINEANIMCMDTYPE_LOOP: + if (gUnknown_0202F7D4->loop.count) { + if (task->data[9]) { + if (!--task->data[9]) { + task->data[7]++; + break; + } + } else { + task->data[9] = gUnknown_0202F7D4->loop.count; + } + if (!task->data[7]) { + break; + } + for (;;) { + task->data[7]--; + gUnknown_0202F7D4--; + if (gUnknown_0202F7D4->type == AFFINEANIMCMDTYPE_LOOP) { + task->data[7]++; + return TRUE; + } + if (!task->data[7]) { + return TRUE; + } + } + } + task->data[7]++; + break; + + case 0x7fff: + gSprites[task->data[15]].pos2.y = 0; + sub_8078F40(task->data[15]); + return FALSE; + } + + return TRUE; +} + +void sub_8079A64(u8 sprite) { + int var = 0x40 - sub_8079B10(sprite) * 2; + u16 matrix = gSprites[sprite].oam.matrixNum; + int var2 = (var << 8) / gOamMatrices[matrix].d; + if (var2 > 0x80) { + var2 = 0x80; + } + gSprites[sprite].pos2.y = (var - var2) / 2; +} + +void sub_8079AB8(u8 sprite, u8 sprite2) { + int var = 0x40 - sub_8079B10(sprite2) * 2; + u16 matrix = gSprites[sprite].oam.matrixNum; + int var2 = (var << 8) / gOamMatrices[matrix].d; + if (var2 > 0x80) { + var2 = 0x80; + } + gSprites[sprite].pos2.y = (var - var2) / 2; +} + +u16 sub_8079B10(u8 sprite) { + struct TransformStatus *transform; + u8 slot = gSprites[sprite].data0; + u16 species; + u16 i; + for (i = 0; i < (sizeof(gBattleMonSprites) / sizeof(u8)); i++) { + if (gBattleMonSprites[i] == sprite) { + if (IsContest()) { + species = unk_2019348.field_0; + return gMonBackPicCoords[species].y_offset; + } else { + if (!GetBankSide(i)) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[i]], MON_DATA_SPECIES); + } else { + species = transform->species; + } + return gMonBackPicCoords[species].y_offset; + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[i]], MON_DATA_SPECIES); + } else { + species = transform->species; + } + return gMonFrontPicCoords[species].y_offset; + } + } + } + } + return 0x40; +} + +void sub_8079BF4(s16 *bottom, s16 *top, void *ptr) { + *bottom = ((intptr_t) ptr) & 0xffff; + *top = (((intptr_t) ptr) >> 16) & 0xffff; +} + +void *sub_8079BFC(s16 bottom, s16 top) { + return (void *)((u16)bottom | ((u16)top << 16)); +} + + +// possible new file + +void sub_8079C08(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7) { + task->data[8] = a7; + task->data[15] = a2; + task->data[9] = a3; + task->data[10] = a4; + task->data[13] = a5; + task->data[14] = a6; + task->data[11] = (a5 - a3) / a7; + task->data[12] = (a6 - a4) / a7; +} + +u8 sub_8079C74(struct Task *task) { + if (!task->data[8]) { + return 0; + } + if (--task->data[8]) { + task->data[9] += task->data[11]; + task->data[10] += task->data[12]; + } else { + task->data[9] = task->data[13]; + task->data[10] = task->data[14]; + } + obj_id_set_rotscale(task->data[15], task->data[9], task->data[10], 0); + if (task->data[8]) { + sub_8079A64(task->data[15]); + } else { + gSprites[task->data[15]].pos2.y = 0; + } + return task->data[8]; +} + +void sub_8079CEC(u8 task) { + u16 v1; + if (gHappinessMoveAnim <= 30) { + v1 = 0; + } else if (gHappinessMoveAnim <= 100) { + v1 = 1; + } else if (gHappinessMoveAnim <= 200) { + v1 = 2; + } else { + v1 = 3; + } + gBattleAnimArgs[7] = v1; + DestroyAnimVisualTask(task); +} + +void unref_sub_8079D20(u8 priority) { + if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex)) { + gSprites[gBattleMonSprites[gBattleAnimEnemyMonIndex]].oam.priority = priority; + } + if (b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex)) { + gSprites[gBattleMonSprites[gBattleAnimPlayerMonIndex]].oam.priority = priority; + } + if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) { + gSprites[gBattleMonSprites[gBattleAnimEnemyMonIndex ^ 2]].oam.priority = priority; + } + if (b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) { + gSprites[gBattleMonSprites[gBattleAnimPlayerMonIndex ^ 2]].oam.priority = priority; + } +} + +void sub_8079E24() { + int i; + for (i = 0; i < gNoOfAllBanks; i++) { + if (b_side_obj__get_some_boolean(i)) { + gSprites[gBattleMonSprites[i]].subpriority = sub_8079E90(i); + gSprites[gBattleMonSprites[i]].oam.priority = 2; + } + } +} + +u8 sub_8079E90(u8 slot) { + u8 status; + u8 ret; + if (IsContest()) { + if (slot == 2) { + return 30; + } else { + return 40; + } + } else { + status = GetBankIdentity(slot); + if (status == 0) { + ret = 30; + } else if (status == 2) { + ret = 20; + } else if (status == 1) { + ret = 40; + } else { + ret = 50; + } + } + return ret; +} + +u8 sub_8079ED4(u8 slot) { + u8 status = GetBankIdentity(slot); + if (IsContest()) { + return 2; + } + if (status == 0 || status == 3) { + return BG2CNT.priority; + } else { + return BG1CNT.priority; + } +} + +u8 GetBankIdentity_permutated(u8 slot) { + u8 status; + if (!IsContest()) { + status = GetBankIdentity(slot); + if (status == 0 || status == 3) { + return 2; + } else { + return 1; + } + } + return 1; +} + +u8 sub_8079F44(u16 species, u8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7, u32 a8) { + void *src; + void *dest; + int size; + + u8 sprite; + u16 sheet = LoadSpriteSheet(&gUnknown_0837F5E0[a3]); + u16 palette = AllocSpritePalette(gSpriteTemplate_837F5B0[a3].paletteTag); + if (!isBackpic) { + LoadCompressedPalette(species_and_otid_get_pal(species, a8, a7), (palette * 0x10) + 0x100, 0x20); + LoadSpecialPokePic( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].coords, + gMonFrontPicCoords[species].y_offset, + 0x2000000, + (void *)0x2000000, + species, + a7, + 1 + ); + } else { + LoadCompressedPalette( + species_and_otid_get_pal(species, a8, a7), (palette * 0x10) + 0x100, 0x20); + LoadSpecialPokePic( + &gMonBackPicTable[species], + gMonBackPicCoords[species].coords, + gMonBackPicCoords[species].y_offset, + 0x2000000, + (void *)0x2000000, + species, + a7, + 0 + ); + } + + src = (void *)0x2000000; + dest = (void *)(0x6010000 + (sheet * 0x20)); + size = 0x800; + DmaCopy32(3, src, dest, size); + + if (!isBackpic) { + sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonFrontPicCoords[species].y_offset, a6); + } else { + sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonBackPicCoords[species].y_offset, a6); + } + if (IsContest()) { + gSprites[sprite].affineAnims = &gSpriteAffineAnimTable_81E7C18; + StartSpriteAffineAnim(&gSprites[sprite], 0); + } + return sprite; +} + +void sub_807A0F4(struct Sprite *sprite) { + DestroySpriteAndFreeResources(sprite); +} + +int sub_807A100(u8 slot, u8 a2) { + u16 species; + u32 personality; + u16 letter; + u16 var; + int ret; + const struct MonCoords *coords; + struct TransformStatus *transform; + if (IsContest()) { + if (unk_2019348.field_4 & 1) { + species = unk_2019348.field_2; + personality = unk_2019348.field_10; + } else { + species = unk_2019348.field_0; + personality = unk_2019348.field_8; + } + if (species == SPECIES_UNOWN) { + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = SPECIES_UNOWN; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + coords = &gMonBackPicCoords[var]; + } else if (species == SPECIES_CASTFORM) { + coords = &gCastformFrontSpriteCoords[gBattleMonForms[slot]]; + } else if (species <= SPECIES_EGG) { + coords = &gMonBackPicCoords[species]; + } else { + coords = &gMonBackPicCoords[0]; + } + } else { + if (!GetBankSide(slot)) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + personality = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); + } else { + species = transform->species; + personality = gTransformPersonalities[slot]; + } + if (species == SPECIES_UNOWN) { + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = SPECIES_UNOWN; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + coords = &gMonBackPicCoords[var]; + } else if (species > SPECIES_EGG) { + coords = &gMonBackPicCoords[0]; + } else { + coords = &gMonBackPicCoords[species]; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + personality = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); + } else { + species = transform->species; + personality = gTransformPersonalities[slot]; + } + if (species == SPECIES_UNOWN) { + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = SPECIES_UNOWN; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + coords = &gMonFrontPicCoords[var]; + } else if (species == SPECIES_CASTFORM) { + coords = &gCastformFrontSpriteCoords[gBattleMonForms[slot]]; + } else if (species > SPECIES_EGG) { + coords = &gMonFrontPicCoords[0]; + } else { + coords = &gMonFrontPicCoords[species]; + } + } + } + + switch (a2) { + case 0: + return (coords->coords & 0xf) * 8; + case 1: + return (coords->coords >> 4) * 8; + case 4: + return sub_8077ABC(slot, 2) - ((coords->coords >> 4) * 4); + case 5: + return sub_8077ABC(slot, 2) + ((coords->coords >> 4) * 4); + case 2: + return sub_8077ABC(slot, 3) - ((coords->coords & 0xf) * 4); + case 3: + return sub_8077ABC(slot, 3) + ((coords->coords & 0xf) * 4); + case 6: + ret = sub_8077ABC(slot, 1) + 0x1f; + return ret - coords->y_offset; + default: + return 0; + } +} + +void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4) { + u8 v1, v2; + s16 v3, v4; + s16 v5, v6; + if (!a2) { + v1 = 0; + v2 = 1; + } else { + v1 = 2; + v2 = 3; + } + v3 = sub_8077ABC(slot, v1); + v4 = sub_8077ABC(slot, v2); + if (IsDoubleBattle() && !IsContest()) { + v5 = sub_8077ABC(slot ^ 2, v1); + v6 = sub_8077ABC(slot ^ 2, v2); + } else { + v5 = v3; + v6 = v4; + } + *a3 = (v3 + v5) / 2; + *a4 = (v4 + v6) / 2; +} + +u8 sub_807A4A0(int a1, u8 sprite, int a3) { + u8 new_sprite = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + gSprites[new_sprite] = gSprites[sprite]; + gSprites[new_sprite].usingSheet = TRUE; + gSprites[new_sprite].oam.priority = 0; + gSprites[new_sprite].oam.objMode = 2; + gSprites[new_sprite].oam.tileNum = gSprites[sprite].oam.tileNum; + gSprites[new_sprite].callback = SpriteCallbackDummy; + return new_sprite; +} + +void sub_807A544(struct Sprite *sprite) { + sub_8078650(sprite); + if (GetBankSide(gBattleAnimPlayerMonIndex)) { + sprite->pos1.x -= gBattleAnimArgs[0]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + sprite->hFlip = TRUE; + } else { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data0 = gBattleAnimArgs[2]; + sprite->data1 = gBattleAnimArgs[3]; + sprite->data3 = gBattleAnimArgs[4]; + sprite->data5 = gBattleAnimArgs[5]; + oamt_set_x3A_32(sprite, move_anim_8074EE0); + sprite->callback = sub_8078504; +} + +void sub_807A5C4(struct Sprite *sprite) { + if (GetBankSide(gBattleAnimPlayerMonIndex)) { + sprite->pos1.x -= gBattleAnimArgs[0]; + gBattleAnimArgs[3] *= -1; + } else { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data0 = gBattleAnimArgs[2]; + sprite->data1 = gBattleAnimArgs[3]; + sprite->data3 = gBattleAnimArgs[4]; + sprite->data5 = gBattleAnimArgs[5]; + StartSpriteAnim(sprite, gBattleAnimArgs[6]); + oamt_set_x3A_32(sprite, move_anim_8074EE0); + sprite->callback = sub_8078504; +} + +void sub_807A63C(struct Sprite *sprite) { + sub_8078650(sprite); + if (GetBankSide(gBattleAnimPlayerMonIndex)) { + sprite->pos1.x -= gBattleAnimArgs[0]; + } else { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->callback = sub_8078600; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_807A69C(u8 taskId) { + u16 src; + u16 dest; + struct Task *task = &gTasks[taskId]; + task->data[0] = obj_id_for_side_relative_to_move(0); + task->data[1] = (GetBankSide(gBattleAnimPlayerMonIndex)) ? -8 : 8; + task->data[2] = 0; + task->data[3] = 0; + gSprites[task->data[0]].pos2.x -= task->data[0]; + task->data[4] = AllocSpritePalette(10097); + task->data[5] = 0; + + dest = (task->data[4] + 0x10) * 0x10; + src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10; + task->data[6] = sub_8079E90(gBattleAnimPlayerMonIndex); + if (task->data[6] == 20 || task->data[6] == 40) { + task->data[6] = 2; + } else { + task->data[6] = 3; + } + CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], 0x20); + BlendPalette(dest, 0x10, gBattleAnimArgs[1], gBattleAnimArgs[0]); + task->func = sub_807A784; +} + +void sub_807A784(u8 taskId) { + struct Task *task = &gTasks[taskId]; + switch (task->data[2]) { + case 0: + sub_807A850(task, taskId); + gSprites[task->data[0]].pos2.x += task->data[1]; + if (++task->data[3] == 5) { + task->data[3]--; + task->data[2]++; + } + break; + case 1: + sub_807A850(task, taskId); + gSprites[task->data[0]].pos2.x -= task->data[1]; + if (--task->data[3] == 0) { + gSprites[task->data[0]].pos2.x = 0; + task->data[2]++; + } + break; + case 2: + if (!task->data[5]) { + FreeSpritePaletteByTag(10097); + DestroyAnimVisualTask(taskId); + } + break; + } +} + +void sub_807A850(struct Task *task, u8 taskId) { + s16 sprite = duplicate_obj_of_side_rel2move_in_transparent_mode(0); + if (sprite >= 0) { + gSprites[sprite].oam.priority = task->data[6]; + gSprites[sprite].oam.paletteNum = task->data[4]; + gSprites[sprite].data0 = 8; + gSprites[sprite].data1 = taskId; + gSprites[sprite].data2 = sprite; + gSprites[sprite].pos2.x = gSprites[task->data[0]].pos2.x; + gSprites[sprite].callback = sub_807A8D4; + task->data[5]++; + } +} + +void sub_807A8D4(struct Sprite *sprite) { + if (--sprite->data0 == 0) { + gTasks[sprite->data1].data[5]--; + obj_delete_but_dont_free_vram(sprite); + } +} + +void sub_807A908(struct Sprite *sprite) { + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + if (!GetBankSide(gBattleAnimPlayerMonIndex)) { + sprite->data0 = 5; + } else { + sprite->data0 = -10; + } + sprite->data1 = -40; + sprite->callback = sub_807A960; +} + +void sub_807A960(struct Sprite *sprite) { + sprite->data2 += sprite->data0; + sprite->data3 += sprite->data1; + sprite->pos2.x = sprite->data2 / 10; + sprite->pos2.y = sprite->data3 / 10; + if (sprite->data1 < -20) { + sprite->data1++; + } + if ((sprite->pos1.y + sprite->pos2.y) < -32) { + move_anim_8072740(sprite); + } +} + +void sub_807A9BC(struct Sprite *sprite) { + int x; + sprite->data0 = gBattleAnimArgs[2]; + sprite->data2 = sprite->pos1.x + gBattleAnimArgs[4]; + sprite->data4 = sprite->pos1.y + gBattleAnimArgs[5]; + if (!GetBankSide(gBattleAnimEnemyMonIndex)) { + x = (u16)gBattleAnimArgs[4] + 30; + sprite->pos1.x += x; + sprite->pos1.y = gBattleAnimArgs[5] - 20; + } else { + x = (u16)gBattleAnimArgs[4] - 30; + sprite->pos1.x += x; + sprite->pos1.y = gBattleAnimArgs[5] - 80; + } + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, move_anim_8072740); +} diff --git a/src/misc/script_pokemon_util_80C4BF0.c b/src/misc/script_pokemon_util_80C4BF0.c new file mode 100644 index 000000000..cbca07011 --- /dev/null +++ b/src/misc/script_pokemon_util_80C4BF0.c @@ -0,0 +1,716 @@ +#include "global.h" +#include "battle.h" +#include "berry.h" +#include "choose_party.h" +#include "contest.h" +#include "contest_link_80C2020.h" +#include "contest_painting.h" +#include "data2.h" +#include "daycare.h" +#include "debug.h" +#include "decompress.h" +#include "event_data.h" +#include "items.h" +#include "link.h" +#include "load_save.h" +#include "main.h" +#include "menu.h" +#include "pokedex.h" +#include "pokemon.h" +#include "rng.h" +#include "rom4.h" +#include "script_pokemon_80C4.h" +#include "species.h" +#include "task.h" + +#define CONTEST_ENTRY_PIC_LEFT 10 +#define CONTEST_ENTRY_PIC_TOP 3 + +extern struct SpriteTemplate gUnknown_02024E8C; + +extern u8 gContestPlayerMonIndex; +extern u8 gIsLinkContest; +extern u8 gPlayerPartyCount; +extern u8 gSelectedOrderFromParty[]; + +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u16 gSpecialVar_0x8006; + +extern u16 gScriptContestCategory; +extern u16 gScriptContestRank; +extern u16 gScriptResult; + +extern u32 gUnknown_03005D28; + +extern u8 gUnknown_02038694; +extern u8 gUnknown_0203856C; +extern u8 gUnknown_02038690[]; +extern u16 gUnknown_02038678[]; + +void sub_80C4BF0(void) +{ + gSaveBlock1.vars[0x10] = gContestMons[0].unk16; + gSaveBlock1.vars[0x11] = gContestMons[1].unk16; + gSaveBlock1.vars[0x12] = gContestMons[2].unk16; +} + +void sub_80C4C28(void) +{ + u16 var; + u8 specialVar = gSpecialVar_0x8005; + + switch(specialVar) + { + case 0: + var = 3; + break; + case 1: + var = 4; + break; + case 2: + var = 5; + break; + default: + var = 100; + break; + } + gSpecialVar_0x8004 = var; +} + +void sub_80C4C64(void) +{ + sub_80C46EC(); + sub_80C4740(); + sub_80C48F4(); +} + +void sub_80C4C78(void) +{ + u16 var; + u16 returnVar; + + switch(gScriptContestCategory) + { + case 0: + var = 8; + break; + case 1: + var = 9; + break; + case 2: + var = 10; + break; + case 3: + var = 11; + break; + case 4: + default: + var = 12; + break; + } + + returnVar = gSaveBlock1.sbStruct.unkSB2.sb1_2EFC_struct2[var].var; + + if(returnVar == 0) + gSpecialVar_0x8004 = returnVar; + else + gSpecialVar_0x8004 = 1; +} + +void sub_80C4CEC(void) +{ + sub_80B2A7C(0xFF); +} + +void sub_80C4CF8(void) +{ + if(!gUnknown_02038690[gContestPlayerMonIndex] + && gScriptContestRank == 3 + && (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800) + { + gSpecialVar_0x8004 = 1; + } + else + { + gSpecialVar_0x8004 = 0; + } +} + +u8 sub_80C4D50(void) +{ + u8 retVar = 0; + int i; + + for (i = 0; i < 5; i++) + if (gSaveBlock1.sbStruct.unkSB2.sb1_2EFC_struct2[i + 8].var) + retVar++; + + return retVar; +} + +// nope. too hard +__attribute__((naked)) +void sub_80C4D80(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\ + ldr r0, _080C4EA0 @ =gUnknown_02038670\n\ + mov r12, r0\n\ + ldr r1, _080C4EA4 @ =gSpecialVar_0x8006\n\ + mov r8, r1\n\ + ldr r2, _080C4EA8 @ =gStringVar1\n\ + mov r9, r2\n\ + mov r2, r12\n\ + mov r1, sp\n\ + movs r6, 0x3\n\ +_080C4D9E:\n\ + ldrh r0, [r2]\n\ + strh r0, [r1]\n\ + adds r2, 0x2\n\ + adds r1, 0x2\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080C4D9E\n\ + movs r6, 0\n\ +_080C4DAE:\n\ + movs r1, 0x3\n\ + cmp r1, r6\n\ + ble _080C4DD8\n\ +_080C4DB4:\n\ + subs r4, r1, 0x1\n\ + lsls r0, r4, 1\n\ + mov r5, sp\n\ + adds r3, r5, r0\n\ + lsls r0, r1, 1\n\ + adds r2, r5, r0\n\ + ldrh r5, [r3]\n\ + movs r7, 0\n\ + ldrsh r1, [r3, r7]\n\ + movs r7, 0\n\ + ldrsh r0, [r2, r7]\n\ + cmp r1, r0\n\ + bge _080C4DD2\n\ + strh r5, [r2]\n\ + strh r0, [r3]\n\ +_080C4DD2:\n\ + adds r1, r4, 0\n\ + cmp r1, r6\n\ + bgt _080C4DB4\n\ +_080C4DD8:\n\ + adds r6, 0x1\n\ + cmp r6, 0x2\n\ + ble _080C4DAE\n\ + mov r2, r8\n\ + ldrh r0, [r2]\n\ + lsls r0, 1\n\ + add r0, sp\n\ + ldrh r0, [r0]\n\ + movs r2, 0\n\ + movs r7, 0\n\ + movs r6, 0\n\ + lsls r0, 16\n\ + asrs r4, r0, 16\n\ + adds r3, r0, 0\n\ + mov r1, sp\n\ +_080C4DF6:\n\ + movs r5, 0\n\ + ldrsh r0, [r1, r5]\n\ + cmp r0, r4\n\ + bne _080C4E12\n\ + lsls r0, r2, 24\n\ + movs r2, 0x80\n\ + lsls r2, 17\n\ + adds r0, r2\n\ + lsrs r2, r0, 24\n\ + mov r5, r8\n\ + ldrh r5, [r5]\n\ + cmp r6, r5\n\ + bne _080C4E12\n\ + adds r7, r2, 0\n\ +_080C4E12:\n\ + adds r1, 0x2\n\ + adds r6, 0x1\n\ + cmp r6, 0x3\n\ + ble _080C4DF6\n\ + movs r6, 0\n\ + mov r0, sp\n\ + movs r1, 0\n\ + ldrsh r0, [r0, r1]\n\ + asrs r1, r3, 16\n\ + lsls r2, 24\n\ + mov r10, r2\n\ + cmp r0, r1\n\ + beq _080C4E40\n\ + adds r2, r1, 0\n\ + mov r1, sp\n\ +_080C4E30:\n\ + adds r1, 0x2\n\ + adds r6, 0x1\n\ + cmp r6, 0x3\n\ + bgt _080C4E40\n\ + movs r4, 0\n\ + ldrsh r0, [r1, r4]\n\ + cmp r0, r2\n\ + bne _080C4E30\n\ +_080C4E40:\n\ + lsls r0, r6, 24\n\ + lsrs r4, r0, 24\n\ + adds r2, r7, 0\n\ + movs r6, 0\n\ + asrs r5, r3, 16\n\ + mov r8, r5\n\ + mov r1, r12\n\ + movs r5, 0\n\ + ldrsh r0, [r1, r5]\n\ + cmp r8, r0\n\ + bne _080C4E60\n\ + cmp r7, 0x1\n\ + beq _080C4E78\n\ +_080C4E5A:\n\ + subs r0, r2, 0x1\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ +_080C4E60:\n\ + adds r6, 0x1\n\ + cmp r6, 0x3\n\ + bgt _080C4E78\n\ + lsls r0, r6, 1\n\ + add r0, r12\n\ + asrs r1, r3, 16\n\ + movs r5, 0\n\ + ldrsh r0, [r0, r5]\n\ + cmp r1, r0\n\ + bne _080C4E60\n\ + cmp r2, 0x1\n\ + bne _080C4E5A\n\ +_080C4E78:\n\ + lsls r1, r6, 24\n\ + lsrs r1, 24\n\ + mov r0, r9\n\ + bl sub_80C4698\n\ + ldr r0, _080C4EAC @ =gIsLinkContest\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080C4EB8\n\ + ldr r0, _080C4EB0 @ =gStringVar2\n\ + lsls r1, r6, 3\n\ + subs r1, r6\n\ + lsls r1, 2\n\ + ldr r2, _080C4EB4 @ =gLinkPlayers + 0x8\n\ + adds r1, r2\n\ + bl sub_80C4674\n\ + b _080C4EC4\n\ + .align 2, 0\n\ +_080C4EA0: .4byte gUnknown_02038670\n\ +_080C4EA4: .4byte gSpecialVar_0x8006\n\ +_080C4EA8: .4byte gStringVar1\n\ +_080C4EAC: .4byte gIsLinkContest\n\ +_080C4EB0: .4byte gStringVar2\n\ +_080C4EB4: .4byte gLinkPlayers + 0x8\n\ +_080C4EB8:\n\ + ldr r0, _080C4ED8 @ =gStringVar2\n\ + lsls r1, r6, 6\n\ + ldr r2, _080C4EDC @ =gUnknown_0203857D\n\ + adds r1, r2\n\ + bl sub_80C4674\n\ +_080C4EC4:\n\ + mov r1, r10\n\ + asrs r0, r1, 24\n\ + cmp r0, 0x1\n\ + beq _080C4ED0\n\ + cmp r7, r0\n\ + bne _080C4EE4\n\ +_080C4ED0:\n\ + ldr r0, _080C4EE0 @ =gSpecialVar_0x8006\n\ + strh r4, [r0]\n\ + b _080C4EEA\n\ + .align 2, 0\n\ +_080C4ED8: .4byte gStringVar2\n\ +_080C4EDC: .4byte gUnknown_0203857D\n\ +_080C4EE0: .4byte gSpecialVar_0x8006\n\ +_080C4EE4:\n\ + ldr r1, _080C4EFC @ =gSpecialVar_0x8006\n\ + adds r0, r4, 0x4\n\ + strh r0, [r1]\n\ +_080C4EEA:\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\ +_080C4EFC: .4byte gSpecialVar_0x8006\n\ + .syntax divided"); +} + +void ShowContestWinnerCleanup(void) +{ + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void ShowContestWinner(void) +{ + if(gUnknown_0203856C) + { + sub_80AAF30(); + BATTLE_STRUCT->unk15DDF = 1; + BATTLE_STRUCT->unk15DDE = sub_80B2C4C(254, 0); + sub_80B2A7C(3); + gUnknown_0203856C = 0; + } + SetMainCallback2(CB2_ContestPainting); + gMain.savedCallback = ShowContestWinnerCleanup; +} + +void sub_80C4F70(void) +{ + VarSet(0x4010, gContestMons[0].unk16); + VarSet(0x4011, gContestMons[1].unk16); + VarSet(0x4012, gContestMons[2].unk16); + VarSet(0x4013, gContestMons[3].unk16); +} + +bool8 GiveMonArtistRibbon(void) +{ + u8 ribbon = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_ARTIST_RIBBON); + + if(ribbon == FALSE + && gUnknown_02038690[gContestPlayerMonIndex] == 0 + && gScriptContestRank == 3 + && (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800) + { + ribbon = TRUE; + SetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_ARTIST_RIBBON, &ribbon); + return TRUE; + } + else + { + return FALSE; + } +} + +u8 sub_80C5044(void) +{ + return gUnknown_0203856C; +} + +void ShowContestEntryMonPic(void) +{ + const struct CompressedSpritePalette *palette; + u32 var1, var2; + u16 species; + u8 spriteId; + u8 taskId; + + if(FindTaskIdByFunc(sub_80C5190) == 0xFF) + { + u8 left = CONTEST_ENTRY_PIC_LEFT; + u8 top = CONTEST_ENTRY_PIC_TOP; + + MenuDrawTextWindow(left, top, 19, 13); + species = gContestMons[gSpecialVar_0x8006].species; + var1 = gContestMons[gSpecialVar_0x8006].unk38; // v2 + var2 = gContestMons[gSpecialVar_0x8006].unk3C; // v3 + taskId = CreateTask(sub_80C5190, 0x50); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = species; + HandleLoadSpecialPokePic( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].coords, + gMonFrontPicCoords[species].y_offset, + (u32)gUnknown_081FAF4C[0], + gUnknown_081FAF4C[1], + species, + var1); + palette = sub_80409C8(species, var2, var1); + LoadCompressedObjectPalette(palette); + GetMonSpriteTemplate_803C56C(species, 1); + gUnknown_02024E8C.paletteTag = palette->tag; + spriteId = CreateSprite(&gUnknown_02024E8C, 0x78, 0x40, 0); + gTasks[taskId].data[2] = spriteId; + gTasks[taskId].data[3] = left; + gTasks[taskId].data[4] = top; + gSprites[spriteId].callback = SpriteCallbackDummy; + gSprites[spriteId].oam.priority = 0; + } +} + +void sub_80C5164(void) +{ + u8 taskId = FindTaskIdByFunc(sub_80C5190); + + if(taskId != 0xFF) + gTasks[taskId].data[0]++; +} + +void sub_80C5190(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + struct Sprite *sprite; + + switch(task->data[0]) + { + case 2: + sprite = &gSprites[task->data[2]]; + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); + + if(sprite->oam.affineMode) + FreeOamMatrix(sprite->oam.matrixNum); + + DestroySprite(sprite); + task->data[0]++; + break; + case 0: + task->data[0]++; + break; + case 3: + MenuZeroFillWindowRect(task->data[3], task->data[4], task->data[3] + 9, task->data[4] + 10); + DestroyTask(taskId); + break; + case 1: + default: + break; + } +} + +void ScriptGetMultiplayerId(void) +{ + if(gIsLinkContest & 1) + gScriptResult = GetMultiplayerId(); + else + gScriptResult = 4; +} + +void ScriptRandom(void) +{ + u16 random; + u16 *scriptPtr; + + if(gIsLinkContest & 1) + { + gUnknown_03005D28 = 1103515245 * gUnknown_03005D28 + 24691; + random = gUnknown_03005D28 >> 16; + scriptPtr = &gScriptResult; + } + else + { + scriptPtr = &gScriptResult; + random = Random(); + } + *scriptPtr = random % *scriptPtr; +} + +void HealPlayerParty(void) +{ + u8 i, j; + u8 ppBonuses; + u8 arg[4]; + + // restore HP. + for(i = 0; i < gPlayerPartyCount; i++) + { + u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + arg[0] = maxHP; + arg[1] = maxHP >> 8; + SetMonData(&gPlayerParty[i], MON_DATA_HP, arg); + ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES); + + // restore PP. + for(j = 0; j < 4; j++) + { + arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j); + SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg); + } + + // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData. + arg[0] = 0; + arg[1] = 0; + arg[2] = 0; + arg[3] = 0; + SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg); + } +} + +u8 ScriptGiveMon(u16 species, u8 var, u16 item, u32 var3, u32 var4, u8 var5) +{ + u16 nationalSpecies; + int sentToPc; + u8 array[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); + sentToPc = GiveMonToPlayer(&mon); + nationalSpecies = 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; + } +} + +u8 ScriptGiveEgg(u16 value) +{ + struct Pokemon mon; + u8 data; + + sub_8042044(&mon, value, 1); + data = 1; + SetMonData(&mon, MON_DATA_IS_EGG, &data); + + return GiveMonToPlayer(&mon); +} + +void CheckForAlivePartyMons(void) +{ + u8 var = sub_803DAA0(); + + switch(var) + { + case 1: + gScriptResult = var; + break; + case 0: + gScriptResult = var; + break; + case 2: + gScriptResult = var; + break; + } +} + +bool8 CheckPartyMonHasHeldItem(u16 item) +{ + int i; + + for(i = 0; i < 6; i++) + { + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + if(species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item) + return TRUE; + } + return FALSE; +} + +bool8 GetNameOfEnigmaBerryInPlayerParty(void) +{ + bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY); + + if(hasItem == TRUE) + GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1); + + return hasItem; +} + +void ScriptWildBattle(u16 species, u8 level, u16 item) +{ + u8 data[2]; + + ZeroEnemyPartyMons(); + CreateMon(&gEnemyParty[0], species, level, 0x20, 0, 0, 0, 0); + + if(item) + { + data[0] = item; + data[1] = item >> 8; + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, data); + } +} + +void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot) +{ + if(monIndex > 6) + monIndex = gPlayerPartyCount - 1; + + SetMonMoveSlot(&gPlayerParty[monIndex], move, slot); +} + +void sub_80C5568(void) +{ + gMain.savedCallback = sub_80C5580; + sub_8121E10(); +} + +void sub_80C5580(void) +{ + u8 var = gSelectedOrderFromParty[0]; + + switch(var) + { + case 0: + gScriptResult = 0; + break; + default: + gScriptResult = 1; + break; + } + + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void ChooseBattleTowerPlayerParty(void) +{ + gMain.savedCallback = SetBattleTowerPlayerParty; + sub_8121E34(); +} + +void SetBattleTowerPlayerParty(void) +{ + u8 var = gSelectedOrderFromParty[0]; + + switch(var) + { + case 0: // player quit battle tower? + LoadPlayerParty(); + gScriptResult = 0; + break; + default: // load battle tower. + ReducePlayerPartyToThree(); + gScriptResult = 1; + break; + } + + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void ReducePlayerPartyToThree(void) +{ + struct Pokemon party[3]; + int i; + + CpuFill32(0, party, sizeof party); + + // copy the selected pokemon according to the order. + for(i = 0; i < 3; i++) + if(gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop + party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal + + // delete the last 3 pokemon + CpuFill32(0, gPlayerParty, sizeof gPlayerParty); + + // overwrite the first 3 with the order copied to. + for(i = 0; i < 3; i++) + gPlayerParty[i] = party[i]; + + CalculatePlayerPartyCount(); +} diff --git a/src/misc/script_pokemon_util_80F99CC.c b/src/misc/script_pokemon_util_80F99CC.c new file mode 100644 index 000000000..2b48cc0d8 --- /dev/null +++ b/src/misc/script_pokemon_util_80F99CC.c @@ -0,0 +1,445 @@ +#include "global.h" +#include "battle_party_menu.h" +#include "choose_party.h" +#include "contest.h" +#include "data2.h" +#include "party_menu.h" +#include "field_fadetransition.h" +#include "palette.h" +#include "party_menu.h" +#include "pokemon.h" +#include "pokemon_summary_screen.h" +#include "rom4.h" +#include "script.h" +#include "script_pokemon_80F9.h" +#include "sound.h" +#include "string_util.h" +#include "task.h" +#include "text.h" + + + +extern u8 gPlayerPartyCount; +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u8 gUnknown_02038694; +extern u16 gScriptResult; + +extern void (*gFieldCallback)(void); + +void sub_80F99CC(void) +{ + u8 taskId; + + ScriptContext2_Enable(); + taskId = CreateTask((void *)sub_80F9A8C, 0xA); + gTasks[taskId].data[0] = 2; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); +} + +void sub_80F9A0C(void) +{ + u8 taskId; + + ScriptContext2_Enable(); + taskId = CreateTask((void *)sub_80F9A8C, 0xA); + gTasks[taskId].data[0] = 3; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); +} + +void sub_80F9A4C(void) +{ + u8 taskId; + + ScriptContext2_Enable(); + taskId = CreateTask((void *)sub_80F9A8C, 0xA); + gTasks[taskId].data[0] = 7; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); +} + +void sub_80F9A8C(u8 taskId) +{ + if(!gPaletteFade.active) + { + gPaletteFade.bufferTransferDisabled = 1; + OpenPartyMenu((u8) gTasks[taskId].data[0], 0); + DestroyTask(taskId); + } +} + +bool8 sub_80F9ACC(void) +{ + switch(EWRAM_1B000.unk264) + { + case 0: + if(EWRAM_1B000.unk266 < gPlayerPartyCount) + { + TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); + EWRAM_1B000.unk266++; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + break; + case 1: + LoadHeldItemIconGraphics(); + EWRAM_1B000.unk264++; + break; + case 2: + CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); + EWRAM_1B000.unk264++; + break; + case 3: + if(sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1) + { + EWRAM_1B000.unk266++; + break; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + break; + } + case 4: + PartyMenuPrintMonsLevelOrStatus(); + EWRAM_1B000.unk264++; + break; + case 5: + PrintPartyMenuMonNicknames(); + EWRAM_1B000.unk264++; + break; + case 6: + sub_80F9C00(); + EWRAM_1B000.unk264++; + break; + case 7: // the only case that can return true. + if(sub_806B58C(EWRAM_1B000.unk266) != 1) + { + EWRAM_1B000.unk266++; + break; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264 = 0; + return TRUE; + } + } + return FALSE; +} + +void sub_80F9C00(void) +{ + u8 i; + + for(i = 0; i < gPlayerPartyCount; i++) + { + switch(sub_80AE47C(&gPlayerParty[i])) + { + case 0: + case 3: + case 4: + sub_806BC3C(i, 0x7E); + break; + case 1: + case 2: + sub_806BC3C(i, 0x70); + break; + } + } +} + +void sub_80F9C6C(u8 var) +{ + if(!gPaletteFade.active) + { + switch(sub_806BD80(var)) + { + case 1: + PlaySE(5); + gUnknown_02038694 = sub_806CA38(var); + gSpecialVar_0x8004 = gUnknown_02038694; + sub_8123138(var); + break; + case 2: + PlaySE(5); + gUnknown_02038694 = 0xFF; + gSpecialVar_0x8004 = 0xFF; + sub_8123138(var); + break; + } + } +} + +bool8 sub_80F9CE8(void) // this is the same function as sub_80F9ACC except case 6 calls a different function. why +{ + switch(EWRAM_1B000.unk264) + { + case 0: + if(EWRAM_1B000.unk266 < gPlayerPartyCount) + { + TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); + EWRAM_1B000.unk266++; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + break; + case 1: + LoadHeldItemIconGraphics(); + EWRAM_1B000.unk264++; + break; + case 2: + CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); + EWRAM_1B000.unk264++; + break; + case 3: + if(sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1) + { + EWRAM_1B000.unk266++; + break; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + break; + } + case 4: + PartyMenuPrintMonsLevelOrStatus(); + EWRAM_1B000.unk264++; + break; + case 5: + PrintPartyMenuMonNicknames(); + EWRAM_1B000.unk264++; + break; + case 6: + sub_80F9E1C(); + EWRAM_1B000.unk264++; + break; + case 7: // the only case that can return true. + if(sub_806B58C(EWRAM_1B000.unk266) != 1) + { + EWRAM_1B000.unk266++; + break; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264 = 0; + return TRUE; + } + } + return FALSE; +} + +void sub_80F9E1C(void) +{ + u8 i; + + for(i = 0; i < gPlayerPartyCount; i++) + { + if(!sub_8040574(&gPlayerParty[i])) + sub_806BC3C(i, 0x9A); + else + sub_806BC3C(i, 0x8C); + } +} + +void sub_80F9E64(u8 var) +{ + if(!gPaletteFade.active) + { + switch(sub_806BD80(var)) + { + case 1: + PlaySE(5); + gSpecialVar_0x8004 = sub_806CA38(var); + gSpecialVar_0x8005 = sub_8040574(&gPlayerParty[gSpecialVar_0x8004]); + sub_8123138(var); + break; + case 2: + PlaySE(5); + gSpecialVar_0x8004 = 0xFF; + sub_8123138(var); + } + } +} + +void sub_80F9EEC(void) +{ + sub_809D9F0(&gPlayerParty[0], gSpecialVar_0x8004, gPlayerPartyCount - 1, c2_exit_to_overworld_2_switch, 0); + unk_2018000.unk8 = 3; + gFieldCallback = sub_8080990; +} + +void sub_80F9F3C(void) // count pokemon moves +{ + u8 i; + + gScriptResult = 0; + + for(i = 0; i < 4; i++) // checks MOVE1-MOVE4 + if(GetMonData(&gPlayerParty[gSpecialVar_0x8004], i + 13)) + gScriptResult++; +} + +void sub_80F9F84(void) +{ + struct Pokemon *party = &gPlayerParty[gSpecialVar_0x8004]; + u16 data = GetMonData(party, gSpecialVar_0x8005 + 13); + + GetMonNickname(party, gStringVar1); + StringCopy(gStringVar2, gMoveNames[data]); +} + +// no. hard +__attribute__((naked)) +void sub_80F9FDC(struct Pokemon *party, u8 var, u8 var2) +{ + 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, 0x20\n\ + mov r8, r0\n\ + adds r5, r1, 0\n\ + adds r4, r2, 0\n\ + lsls r5, 24\n\ + lsrs r5, 24\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r0, r5, 0\n\ + adds r0, 0xD\n\ + str r0, [sp, 0x8]\n\ + mov r0, r8\n\ + ldr r1, [sp, 0x8]\n\ + bl GetMonData\n\ + mov r1, sp\n\ + adds r1, 0x2\n\ + str r1, [sp, 0x14]\n\ + strh r0, [r1]\n\ + adds r3, r4, 0\n\ + adds r3, 0xD\n\ + str r3, [sp, 0xC]\n\ + mov r0, r8\n\ + adds r1, r3, 0\n\ + bl GetMonData\n\ + mov r1, sp\n\ + strh r0, [r1]\n\ + adds r7, r5, 0\n\ + adds r7, 0x11\n\ + str r7, [sp, 0x10]\n\ + mov r0, r8\n\ + adds r1, r7, 0\n\ + bl GetMonData\n\ + mov r1, sp\n\ + adds r1, 0x5\n\ + str r1, [sp, 0x18]\n\ + strb r0, [r1]\n\ + adds r3, r4, 0\n\ + adds r3, 0x11\n\ + str r3, [sp, 0x1C]\n\ + mov r0, r8\n\ + adds r1, r3, 0\n\ + bl GetMonData\n\ + add r7, sp, 0x4\n\ + mov r10, r7\n\ + strb r0, [r7]\n\ + mov r0, r8\n\ + movs r1, 0x15\n\ + bl GetMonData\n\ + mov r6, sp\n\ + adds r6, 0x6\n\ + strb r0, [r6]\n\ + ldr r1, _080FA0D8 @ =gUnknown_08208238\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + mov r9, r0\n\ + ldrb r0, [r6]\n\ + adds r2, r0, 0\n\ + mov r3, r9\n\ + ands r2, r3\n\ + lsls r5, 1\n\ + asrs r2, r5\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + adds r1, r4, r1\n\ + ldrb r3, [r1]\n\ + adds r1, r0, 0\n\ + ands r1, r3\n\ + lsls r4, 1\n\ + asrs r1, r4\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r7, r9\n\ + bics r0, r7\n\ + strb r0, [r6]\n\ + ldrb r0, [r6]\n\ + bics r0, r3\n\ + strb r0, [r6]\n\ + lsls r2, r4\n\ + lsls r1, r5\n\ + adds r2, r1\n\ + ldrb r0, [r6]\n\ + orrs r0, r2\n\ + strb r0, [r6]\n\ + mov r0, r8\n\ + ldr r1, [sp, 0x8]\n\ + mov r2, sp\n\ + bl SetMonData\n\ + mov r0, r8\n\ + ldr r1, [sp, 0xC]\n\ + ldr r2, [sp, 0x14]\n\ + bl SetMonData\n\ + mov r0, r8\n\ + ldr r1, [sp, 0x10]\n\ + mov r2, r10\n\ + bl SetMonData\n\ + mov r0, r8\n\ + ldr r1, [sp, 0x1C]\n\ + ldr r2, [sp, 0x18]\n\ + bl SetMonData\n\ + mov r0, r8\n\ + movs r1, 0x15\n\ + adds r2, r6, 0\n\ + bl SetMonData\n\ + add sp, 0x20\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\ +_080FA0D8: .4byte gUnknown_08208238\n\ + .syntax divided"); +} + +void sub_80FA0DC(void) +{ + u16 i; + + SetMonMoveSlot(&gPlayerParty[gSpecialVar_0x8004], 0, gSpecialVar_0x8005); + RemoveMonPPBonus(&gPlayerParty[gSpecialVar_0x8004], gSpecialVar_0x8005); + + for(i = gSpecialVar_0x8005; i < 3; i++) + sub_80F9FDC(&gPlayerParty[gSpecialVar_0x8004], i, i + 1); +} + +void sub_80FA148(void) +{ + struct Pokemon *party = &gPlayerParty[gSpecialVar_0x8004]; + gScriptResult = 0; + + if(GetMonData(party, MON_DATA_IS_EGG)) + gScriptResult = 1; +} diff --git a/src/misc/unknown_task.c b/src/misc/unknown_task.c new file mode 100644 index 000000000..81b89ef92 --- /dev/null +++ b/src/misc/unknown_task.c @@ -0,0 +1,255 @@ +#include "global.h" +#include "data2.h" +#include "task.h" +#include "trig.h" + +struct UnknownStruct1 +{ + void *src[2]; + void *dest; + u32 unkC; + void (*unk10)(void); + u8 srcBank; + u8 unk15; + u8 unk16; + u8 unk17; + u8 taskId; + u8 filler19[0x7]; +}; + +struct UnknownStruct2 +{ + void *dest; + u32 control; + u8 unk8; + u8 unk9; +}; + +static void sub_80896F4(void); +static void sub_8089714(void); + +extern u16 gUnknown_030041B0; +extern u16 gUnknown_030041B4; +extern u16 gUnknown_030041B8; +extern u16 gUnknown_03004280; +extern u16 gUnknown_03004288; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; +extern u16 gUnknown_030042C0; + +extern u8 gUnknown_0202FFA4; + +extern struct UnknownStruct1 gUnknown_03004DC0; + +extern u16 gUnknown_03004DE0[][0x3C0]; + +void remove_some_task(void) +{ + gUnknown_03004DC0.unk15 = 0; + DmaStop(0); + if (gUnknown_03004DC0.taskId != 0xFF) + { + DestroyTask(gUnknown_03004DC0.taskId); + gUnknown_03004DC0.taskId = 0xFF; + } +} + +void dp12_8087EA4(void) +{ + CpuFill16(0, gUnknown_03004DE0, 0x780 * 2); + gUnknown_03004DC0.src[0] = 0; + gUnknown_03004DC0.src[1] = 0; + gUnknown_03004DC0.dest = 0; + gUnknown_03004DC0.unkC = 0; + gUnknown_03004DC0.srcBank = 0; + gUnknown_03004DC0.unk15 = 0; + gUnknown_03004DC0.unk16 = 0; + gUnknown_03004DC0.unk17 = 0; + gUnknown_03004DC0.taskId = 0xFF; +} + +void sub_80895F8(struct UnknownStruct2 unk) +{ + if (unk.control == (((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1)) + { + gUnknown_03004DC0.src[0] = &gUnknown_03004DE0[0][1]; + gUnknown_03004DC0.src[1] = &gUnknown_03004DE0[1][1]; + gUnknown_03004DC0.unk10 = sub_80896F4; + } + else + { + gUnknown_03004DC0.src[0] = &gUnknown_03004DE0[0][2]; + gUnknown_03004DC0.src[1] = &gUnknown_03004DE0[1][2]; + gUnknown_03004DC0.unk10 = sub_8089714; + } + + gUnknown_03004DC0.unkC = unk.control; + gUnknown_03004DC0.dest = unk.dest; + gUnknown_03004DC0.unk15 = unk.unk8; + gUnknown_03004DC0.unk16 = unk.unk9; + gUnknown_03004DC0.unk17 = unk.unk9; +} + +void sub_8089668(void) +{ + if (gUnknown_03004DC0.unk15) + { + if (gUnknown_03004DC0.unk15 == 3) + { + gUnknown_03004DC0.unk15 = 0; + DmaStop(0); + gUnknown_0202FFA4 = 1; + } + else + { + DmaStop(0); + DmaSet(0, gUnknown_03004DC0.src[gUnknown_03004DC0.srcBank], gUnknown_03004DC0.dest, gUnknown_03004DC0.unkC); + gUnknown_03004DC0.unk10(); + gUnknown_03004DC0.srcBank ^= 1; + } + } +} + +static void sub_80896F4(void) +{ + u16 *dest = (u16 *)gUnknown_03004DC0.dest; + u16 *src = (u16 *)&gUnknown_03004DE0[gUnknown_03004DC0.srcBank]; + *dest = *src; +} + +static void sub_8089714(void) +{ + u32 *dest = (u32 *)gUnknown_03004DC0.dest; + u32 *src = (u32 *)&gUnknown_03004DE0[gUnknown_03004DC0.srcBank]; + *dest = *src; +} + +static void task00_for_dp12(u8 taskId) +{ + int value = 0; + + if (gUnknown_0202FFA4) + { + DestroyTask(taskId); + gUnknown_03004DC0.taskId = 0xFF; + } + else + { + if (gTasks[taskId].data[7]) + { + switch (gTasks[taskId].data[6]) + { + case 0x0: + value = gUnknown_030042A4; + break; + case 0x2: + value = gUnknown_030042A0; + break; + case 0x4: + value = gUnknown_030042C0; + break; + case 0x6: + value = gUnknown_030041B4; + break; + case 0x8: + value = gUnknown_03004288; + break; + case 0xA: + value = gUnknown_03004280; + break; + case 0xC: + value = gUnknown_030041B0; + break; + case 0xE: + value = gUnknown_030041B8; + break; + } + } + if (gTasks[taskId].data[4]) + { + int i; + int offset; + gTasks[taskId].data[4]--; + offset = gTasks[taskId].data[3] + 320; + for (i = gTasks[taskId].data[0]; i < gTasks[taskId].data[1]; i++) + { + gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = gUnknown_03004DE0[0][offset] + value; + offset++; + } + } + else + { + int i; + int offset; + gTasks[taskId].data[4] = gTasks[taskId].data[5]; + offset = gTasks[taskId].data[3] + 320; + for (i = gTasks[taskId].data[0]; i < gTasks[taskId].data[1]; i++) + { + gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = gUnknown_03004DE0[0][offset] + value; + offset++; + } + gTasks[taskId].data[3]++; + if (gTasks[taskId].data[3] == gTasks[taskId].data[2]) + { + gTasks[taskId].data[3] = 0; + } + } + } +} + +static void sub_80898FC(u16 *a1, u8 a2, u8 a3, u8 a4) +{ + u16 i = 0; + u8 offset = 0; + + while (i < 0x100) + { + a1[i] = (gSineTable[offset] * a3) / 256; + offset += a2; + i++; + } +} + +u8 sub_8089944(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) +{ + int i; + int offset; + struct UnknownStruct2 unk; + u8 taskId; + + dp12_8087EA4(); + + unk.dest = (void *)(REG_ADDR_BG0HOFS + a6); + unk.control = ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1; + unk.unk8 = 1; + unk.unk9 = 0; + + sub_80895F8(unk); + + taskId = CreateTask(task00_for_dp12, 0); + + gTasks[taskId].data[0] = a1; + gTasks[taskId].data[1] = a2; + gTasks[taskId].data[2] = 256 / a3; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = a5; + gTasks[taskId].data[5] = a5; + gTasks[taskId].data[6] = a6; + gTasks[taskId].data[7] = a7; + + gUnknown_03004DC0.taskId = taskId; + gUnknown_0202FFA4 = 0; + + sub_80898FC(&gUnknown_03004DE0[0][320], a3, a4, a2 - a1); + + offset = 320; + + for (i = a1; i < a2; i++) + { + gUnknown_03004DE0[0][i] = gUnknown_03004DE0[0][offset]; + gUnknown_03004DE0[1][i] = gUnknown_03004DE0[0][offset]; + offset++; + } + + return taskId; +} diff --git a/src/misc/unused_8124F94.c b/src/misc/unused_8124F94.c new file mode 100644 index 000000000..93b569058 --- /dev/null +++ b/src/misc/unused_8124F94.c @@ -0,0 +1,126 @@ +#include "global.h" +#include "decompress.h" +#include "palette.h" + +struct UnknownStruct2 +{ + void *src; + u8 unk4; + u8 unk5; + u8 unk6; + u16 unk8; +}; + +struct UnknownStruct3 +{ + u16 *paletteSrc; + u8 unk4; + u8 paletteCount; +}; + +struct UnknownStruct1 +{ + u8 paletteNum; + u8 unk1; + u16 unk2; + u8 *dest; + struct UnknownStruct3 unk8[16]; + struct UnknownStruct2 unk88[32]; +}; + +void unref_sub_8124F94(struct UnknownStruct1 *a) +{ + a->unk1 = 0; + a->paletteNum = 0; + a->unk2 = 0; + a->dest = (void *)VRAM; + DmaFill16(3, 0, a->unk8, sizeof(a->unk8)); + DmaFill16(3, 0, a->unk88, sizeof(a->unk88)); +} + +u8 unref_sub_8124FD8(struct UnknownStruct1 *a, const struct UnknownStruct2 *b) +{ + while (1) + { + s32 r6; + s32 temp; + + // Couldn't get it to match any other way + if (a->unk1 < 32 && b->src == NULL) + return 0; + if (a->unk1 >= 32) + break; + + a->unk88[a->unk1].src = b->src; + a->unk88[a->unk1].unk6 = b->unk6; + a->unk88[a->unk1].unk4 = b->unk4; + a->unk88[a->unk1].unk5 = b->unk5; + r6 = b->unk4 * b->unk5; + if (a->unk2 + r6 > 0x400) + return 2; + if (b->unk8 == 0) + { + DmaCopy16(3, b->src, a->dest + a->unk2 * 64, r6 * 32); + } + else + { + sub_800D238(b->src, a->dest + a->unk2 * 64); + } + a->unk88[a->unk1].unk8 = a->unk2; + temp = r6 + a->unk2; + a->unk2 = temp; + a->unk1++; + b++; + } + return 1; +} + +u8 unref_sub_81250A4(struct UnknownStruct1 *a, struct UnknownStruct3 *b) +{ + while (1) + { + // Couldn't get it to match any other way + if (a->paletteNum < 16 && b->paletteSrc == NULL) + return 0; + if (a->paletteNum >= 16) + break; + + a->unk8[a->paletteNum].paletteSrc = b->paletteSrc; + a->unk8[a->paletteNum].unk4 = b->unk4; + if (b->paletteCount == 0) + { + LoadPalette(b->paletteSrc, a->paletteNum * 16, 32); + } + else + { + u16 palette[16]; + + sub_800D238(b->paletteSrc, palette); + LoadPalette(palette, a->paletteNum * 16, 32); + } + a->unk8[a->paletteNum].paletteCount = a->paletteNum; + a->paletteNum = a->paletteNum + 1; + b++; + } + return 1; +} + +u8 unref_sub_8125118(struct UnknownStruct1 *a, struct UnknownStruct3 *b) +{ + u16 palettes[16][16] = {0}; + u8 r7 = b->paletteCount; + u8 i; + + sub_800D238(b->paletteSrc, palettes); + for (i = a->paletteNum; i < r7; i++) + { + if (a->paletteNum + i >= 16) + return 1; + a->unk8[i].paletteSrc = b->paletteSrc; + a->unk8[i].unk4 = b->unk4 + i; + a->unk8[i].paletteCount = a->paletteNum; + LoadPalette(palettes[i], a->paletteNum * 16, sizeof(palettes[i])); + a->paletteNum++; + } + return 0; +} diff --git a/src/mon_markings.c b/src/mon_markings.c deleted file mode 100644 index 0cad8db59..000000000 --- a/src/mon_markings.c +++ /dev/null @@ -1,383 +0,0 @@ -#include "global.h" -#include "main.h" -#include "menu_cursor.h" -#include "text_window.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" - -#ifdef GERMAN -#define MENU_TEXT_SPRITE_X_OFFSET 24 -#else -#define MENU_TEXT_SPRITE_X_OFFSET 32 -#endif - -struct PokemonMarkMenu -{ - /*0x0000*/ u16 baseTileTag; - /*0x0002*/ u16 basePaletteTag; - /*0x0004*/ u8 markings; // bit flags - /*0x0005*/ s8 cursorPos; - /*0x0006*/ bool8 markingsArray[4]; - /*0x000A*/ u8 cursorBaseY; - /*0x000B*/ bool8 spriteSheetLoadRequired; - /*0x000C*/ struct Sprite *menuWindowSprites[2]; // upper and lower halves of menu window - /*0x0014*/ struct Sprite *menuMarkingSprites[4]; - /*0x0024*/ struct Sprite *menuTextSprite; - /*0x0028*/ u8 *frameTiles; - /*0x002C*/ u16 *framePalette; - /*0x0030*/ u8 menuWindowSpriteTiles[0x1000]; - /*0x1030*/ u8 filler1030[0x80]; - /*0x10B0*/ u8 tileLoadState; -}; - -extern u8 gPokenavConditionMenuMisc_Gfx[]; -extern u16 gUnknown_08E966B8[]; - -extern u16 gUnknown_083E49F4[]; -extern u8 gUnknown_083E4A14[]; -extern struct OamData gOamData_83E5214; -extern struct OamData gOamData_83E521C; -extern const union AnimCmd *const gSpriteAnimTable_83E5274[]; -extern const union AnimCmd *const gSpriteAnimTable_83E52AC[]; -extern struct OamData gOamData_83E52B4; -extern const union AnimCmd *const gSpriteAnimTable_83E533C[]; - -static EWRAM_DATA struct PokemonMarkMenu *sMenu = NULL; - -void sub_80F761C(s16, s16, u16, u16); -void nullsub_65(struct Sprite *); -void sub_80F78CC(struct Sprite *); -void sub_80F7908(struct Sprite *); -struct Sprite *sub_80F7960(u16, u16, u16 *, u16); - -void sub_80F727C(struct PokemonMarkMenu *ptr) -{ - sMenu = ptr; - sMenu->spriteSheetLoadRequired = FALSE; -} - -void sub_80F728C(void) -{ - const struct FrameGraphics *frame = GetTextWindowFrameGraphics(gSaveBlock2.optionsWindowFrameType); - sMenu->frameTiles = frame->tiles; - sMenu->framePalette = frame->palette; - sMenu->tileLoadState = 0; - CpuFill16(0, sMenu->menuWindowSpriteTiles, sizeof(sMenu->menuWindowSpriteTiles)); -} - -bool8 sub_80F72D4(void) -{ - u16 i; - u8 *dest = sMenu->menuWindowSpriteTiles + sMenu->tileLoadState * 0x100; - - switch (sMenu->tileLoadState) - { - case 0: - CpuFastCopy(sMenu->frameTiles, dest, TILE_SIZE_4BPP); - for (i = 0; i < 6; i++) - { - CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP); - } - CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 2, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP); - sMenu->tileLoadState++; - break; - default: - CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 3, dest, TILE_SIZE_4BPP); - for (i = 0; i < 6; i++) - { - CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 4, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP); - } - CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 5, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP); - sMenu->tileLoadState++; - break; - case 13: - CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 6, dest, TILE_SIZE_4BPP); - for (i = 0; i < 6; i++) - { - CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 7, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP); - } - CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 8, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP); - sMenu->tileLoadState++; - return FALSE; - case 14: - return FALSE; - } - - return TRUE; -} - -void sub_80F7404(void) -{ - sub_80F728C(); - while (sub_80F72D4()) - ; -} - -void sub_80F7418(u8 markings, s16 x, s16 y) -{ - u16 i; - sMenu->cursorPos = 0; - sMenu->markings = markings; - for (i = 0; i < 4; i++) - sMenu->markingsArray[i] = (sMenu->markings >> i) & 1; - DestroyMenuCursor(); - sub_80F761C(x, y, sMenu->baseTileTag, sMenu->basePaletteTag); -} - -void sub_80F7470(void) -{ - u16 i; - - for (i = 0; i < 3; i++) - { - FreeSpriteTilesByTag(sMenu->baseTileTag + i); - } - - FreeSpritePaletteByTag(sMenu->basePaletteTag); - FreeSpritePaletteByTag(sMenu->basePaletteTag + 1); - - for (i = 0; i < 2; i++) - { - if (!sMenu->menuWindowSprites[i]) - return; - DestroySprite(sMenu->menuWindowSprites[i]); - } - - for (i = 0; i < 4; i++) - { - if (!sMenu->menuMarkingSprites[i]) - return; - DestroySprite(sMenu->menuMarkingSprites[i]); - } - - DestroyMenuCursor(); - - if (sMenu->menuTextSprite) - DestroySprite(sMenu->menuTextSprite); -} - -bool8 sub_80F7500(void) -{ - u16 i; - struct SpriteSheet sheets[3] = - { - { sMenu->menuWindowSpriteTiles, 0x1000, sMenu->baseTileTag }, - { gPokenavConditionMenuMisc_Gfx, 0x520, sMenu->baseTileTag + 1 }, - { NULL, 0, 0 } - }; - - if (sMenu->spriteSheetLoadRequired) - { - LoadTilesForSpriteSheets(sheets); - sMenu->spriteSheetLoadRequired = FALSE; - } - - if (gMain.newKeys & DPAD_UP) - { - s8 pos; - PlaySE(SE_SELECT); - pos = --sMenu->cursorPos; - if (pos < 0) - sMenu->cursorPos = 5; - return TRUE; - } - - if (gMain.newKeys & DPAD_DOWN) - { - s8 pos; - PlaySE(SE_SELECT); - pos = ++sMenu->cursorPos; - if (pos > 5) - sMenu->cursorPos = 0; - return TRUE; - } - - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - - switch (sMenu->cursorPos) - { - case 4: - sMenu->markings = 0; - for (i = 0; i < 4; i++) - sMenu->markings |= sMenu->markingsArray[i] << i; - return FALSE; - case 5: - return FALSE; - } - - sMenu->markingsArray[sMenu->cursorPos] = !sMenu->markingsArray[sMenu->cursorPos]; - return TRUE; - } - - if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - return FALSE; - } - - return TRUE; -} - -void sub_80F761C(s16 x, s16 y, u16 baseTileTag, u16 basePaletteTag) -{ - u16 i; - u8 spriteId; - - struct SpriteSheet sheets[] = - { - { sMenu->menuWindowSpriteTiles, 0x1000, baseTileTag }, - { gPokenavConditionMenuMisc_Gfx, 0x520, baseTileTag + 1 }, - { NULL, 0 } - }; - - struct SpritePalette palettes[] = - { - { sMenu->framePalette, basePaletteTag }, - { gUnknown_08E966B8, basePaletteTag + 1}, - { NULL, 0 } - }; - - struct SpriteTemplate sprTemplate = - { - baseTileTag, - basePaletteTag, - &gOamData_83E5214, - gSpriteAnimTable_83E52AC, - NULL, - gDummySpriteAffineAnimTable, - nullsub_65, - }; - - sMenu->spriteSheetLoadRequired = TRUE; - AllocTilesForSpriteSheets(sheets); - LoadSpritePalettes(palettes); - - for (i = 0; i < 2; i++) - { - spriteId = CreateSprite(&sprTemplate, x + 32, y + 32, 2); - if (spriteId != 64) - { - sMenu->menuWindowSprites[i] = &gSprites[spriteId]; - StartSpriteAnim(&gSprites[spriteId], i); - } - else - { - sMenu->menuWindowSprites[i] = NULL; - return; - } - } - - sMenu->menuWindowSprites[1]->pos1.y = y + 96; - - sprTemplate.tileTag++; - sprTemplate.paletteTag++; - sprTemplate.anims = gSpriteAnimTable_83E5274; - sprTemplate.callback = sub_80F78CC; - sprTemplate.oam = &gOamData_83E521C; - - for (i = 0; i < 4; i++) - { - spriteId = CreateSprite(&sprTemplate, x + 32, y + 16 + 16 * i, 1); - if (spriteId != 64) - { - sMenu->menuMarkingSprites[i] = &gSprites[spriteId]; - gSprites[spriteId].data0 = i; - } - else - { - sMenu->menuMarkingSprites[i] = NULL; - return; - } - } - - sprTemplate.callback = SpriteCallbackDummy; - - spriteId = CreateSprite(&sprTemplate, 0, 0, 1); - - if (spriteId != 64) - { - sMenu->menuTextSprite = &gSprites[spriteId]; - sMenu->menuTextSprite->oam.shape = ST_OAM_H_RECTANGLE; - sMenu->menuTextSprite->oam.size = 3; - StartSpriteAnim(sMenu->menuTextSprite, 9); - sMenu->menuTextSprite->pos1.x = x + MENU_TEXT_SPRITE_X_OFFSET; - sMenu->menuTextSprite->pos1.y = y + 80; - CalcCenterToCornerVec(sMenu->menuTextSprite, 1, 2, 0); - } - else - { - sMenu->menuTextSprite = NULL; - } - - sMenu->cursorBaseY = y + 8; - sub_814A5C0(0, basePaletteTag + 1, 15, 0, 0x30); - sub_814A880(x + 8, sMenu->cursorBaseY); - sub_814AABC(sub_80F7908); -} - -void nullsub_65(struct Sprite *sprite) -{ -} - -void sub_80F78CC(struct Sprite *sprite) -{ - if (sMenu->markingsArray[sprite->data0]) - StartSpriteAnim(sprite, 2 * sprite->data0 + 1); - else - StartSpriteAnim(sprite, 2 * sprite->data0); -} - -void sub_80F7908(struct Sprite *sprite) -{ - sprite->pos1.y = 16 * sMenu->cursorPos + sMenu->cursorBaseY; -} - -struct Sprite *sub_80F7920(u16 tileTag, u16 paletteTag, u16 *palette) -{ - if (!palette) - palette = gUnknown_083E49F4; - return sub_80F7960(tileTag, paletteTag, palette, 16); -} - -struct Sprite *sub_80F7940(u16 tileTag, u16 paletteTag, u16 *palette) -{ - if (!palette) - palette = gUnknown_083E49F4; - return sub_80F7960(tileTag, paletteTag, palette, 1); -} - -struct Sprite *sub_80F7960(u16 tileTag, u16 paletteTag, u16 *palette, u16 size) -{ - u8 spriteId; - struct SpriteTemplate sprTemplate; - struct SpriteSheet sheet = { gUnknown_083E4A14, 0x80, tileTag }; - struct SpritePalette sprPalette = { palette, paletteTag }; - - sprTemplate.tileTag = tileTag; - sprTemplate.paletteTag = paletteTag; - sprTemplate.oam = &gOamData_83E52B4; - sprTemplate.anims = gSpriteAnimTable_83E533C; - sprTemplate.images = NULL; - sprTemplate.affineAnims = gDummySpriteAffineAnimTable; - sprTemplate.callback = nullsub_65; - - sheet.size = size * 0x80; - - LoadSpriteSheet(&sheet); - LoadSpritePalette(&sprPalette); - - spriteId = CreateSprite(&sprTemplate, 0, 0, 0); - if (spriteId != 64) - return &gSprites[spriteId]; - else - return NULL; -} - -void sub_80F7A10(u8 markings, void *dest) -{ - void *src = gUnknown_083E4A14 + markings * 0x80; - DmaCopy16(3, src, dest, 0x80); -} diff --git a/src/money.c b/src/money.c deleted file mode 100644 index 5d9d0b689..000000000 --- a/src/money.c +++ /dev/null @@ -1,275 +0,0 @@ -#include "global.h" -#include "money.h" -#include "decompress.h" -#include "menu.h" -#include "sprite.h" -#include "string_util.h" - -#define SPRITE_TAG_MONEY (0x2722) - -extern u16 gSpecialVar_0x8005; - -static EWRAM_DATA u8 gUnknown_02038734 = 0; - -extern const struct CompressedSpriteSheet gUnknown_083CF584; -extern const struct CompressedSpritePalette gUnknown_083CF58C; -extern const struct SpriteTemplate gSpriteTemplate_83CF56C; - -bool8 IsEnoughMoney(u32 budget, u32 cost) -{ - if (budget >= cost) - { - return TRUE; - } - - return FALSE; -} - -void sub_80B79B8(u32 *arg0, u32 arg1) -{ - if (*arg0 > *arg0 + arg1) - { - *arg0 = 999999; - return; - } - - *arg0 = *arg0 + arg1; - if (*arg0 > 999999) - { - *arg0 = 999999; - } -} - -void sub_80B79E0(u32 *arg0, u32 arg1) -{ - if (*arg0 < arg1) - { - *arg0 = 0; - } - else - { - *arg0 = *arg0 - arg1; - } -} - -void sub_80B79F8(u8 *buffer, u32 arg1, u8 arg2) -{ - u8 width; - u8 i; - - if (arg1 > 999999) - { - width = 7; - } - else if (arg1 > 99999) - { - width = 6; - } - else if (arg1 > 10000) - { - width = 5; - } - else if (arg1 > 999) - { - width = 4; - } - else if (arg1 > 99) - { - width = 3; - } - else if (arg1 > 9) - { - width = 2; - } - else - { - width = 1; - } - - buffer[0] = EXT_CTRL_CODE_BEGIN; - buffer[1] = 0x14; - buffer[2] = 0x06; - buffer += 3; - - for (i = 0; i < arg2 - width; i++) - { - buffer[0] = CHAR_SPACE; - buffer += 1; - } - - buffer[0] = CHAR_CURRENCY; - buffer += 1; - - buffer = ConvertIntToDecimalString(buffer, arg1); - - buffer[0] = EXT_CTRL_CODE_BEGIN; - buffer[1] = 0x14; - buffer[2] = 0x00; - buffer[3] = EOS; -} - -void sub_80B7A94(u32 arg0, u8 size, u8 x, u8 y) -{ - u8 buffer[16]; - u8 stringWidth; - - sub_80B79F8(buffer, arg0, size); - stringWidth = sub_8072CA4(buffer); - - if (stringWidth >= (size + 1) * 8) - MenuPrint(buffer, x, y); - else - { - int xPlusOne = x + 1; - MenuPrint_PixelCoords(buffer, (xPlusOne + size) * 8 - stringWidth, y * 8, 1); - } -} - -void sub_80B7AEC(u32 arg0, u8 left, u8 top) -{ - u8 buffer[32]; - u8 *ptr; - - ptr = &buffer[0]; - - ptr[0] = CHAR_CURRENCY; - ptr++; - - ptr = ConvertIntToDecimalString(ptr, arg0); - - MenuPrint_RightAligned(buffer, left, top); - -#ifdef ENGLISH - ptr[0] = 0xFC; - ptr[1] = 0x14; - ptr[2] = 0x00; - ptr[3] = 0xFF; -#endif -} - -__attribute__((naked)) -void sub_80B7B34(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - sub sp, 0x4\n\ - mov r8, r0\n\ - adds r5, r1, 0\n\ - mov r9, r2\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - lsls r5, 24\n\ - lsrs r5, 24\n\ - mov r1, r9\n\ - lsls r1, 8\n\ - mov r9, r1\n\ - ldr r4, _080B7BD8 @ =gDecoration10000_Gfx\n\ - adds r0, r1, r4\n\ - lsls r6, r5, 4\n\ - subs r6, r5\n\ - lsls r1, r6, 6\n\ - mov r3, r8\n\ - adds r3, 0x1\n\ - lsls r3, 5\n\ - ldr r2, _080B7BDC @ =0x06008000\n\ - adds r3, r2\n\ - adds r1, r3\n\ - movs r2, 0x20\n\ - str r3, [sp]\n\ - bl CpuFastSet\n\ - adds r4, 0x80\n\ - add r9, r4\n\ - adds r0, r5, 0x1\n\ - lsls r4, r0, 4\n\ - subs r4, r0\n\ - lsls r1, r4, 6\n\ - ldr r3, [sp]\n\ - adds r1, r3\n\ - mov r0, r9\n\ - movs r2, 0x20\n\ - bl CpuFastSet\n\ - movs r3, 0\n\ - lsls r5, 5\n\ - mov r0, r8\n\ - adds r7, r5, r0\n\ - lsls r6, 1\n\ - adds r6, 0x1\n\ - add r6, r8\n\ - ldr r1, _080B7BE0 @ =0xfffff000\n\ - adds r5, r1, 0\n\ - ldr r0, _080B7BE4 @ =0x0600f800\n\ - mov r12, r0\n\ - ldr r1, _080B7BE8 @ =0x0600f840\n\ - mov r9, r1\n\ - lsls r4, 1\n\ - adds r4, 0x1\n\ - add r4, r8\n\ -_080B7BAA:\n\ - adds r1, r7, r3\n\ - lsls r1, 1\n\ - mov r0, r12\n\ - adds r2, r1, r0\n\ - adds r0, r3, r6\n\ - adds r0, r5\n\ - strh r0, [r2]\n\ - add r1, r9\n\ - adds r0, r3, r4\n\ - adds r0, r5\n\ - strh r0, [r1]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, 0x3\n\ - bls _080B7BAA\n\ - add sp, 0x4\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\ -_080B7BD8: .4byte gDecoration10000_Gfx\n\ -_080B7BDC: .4byte 0x06008000\n\ -_080B7BE0: .4byte 0xfffff000\n\ -_080B7BE4: .4byte 0x0600f800\n\ -_080B7BE8: .4byte 0x0600f840\n\ - .syntax divided\n"); -} - -void sub_80B7BEC(u32 arg0, u8 x, u8 y) -{ - sub_80B7A94(arg0, 6, x + 6, y + 1); -} - -void sub_80B7C14(u32 arg0, u8 x, u8 y) -{ - MenuDrawTextWindow(x, y, x + 13, y + 3); - sub_80B7BEC(arg0, x, y); - - LoadCompressedObjectPic(&gUnknown_083CF584); - LoadCompressedObjectPalette(&gUnknown_083CF58C); - - gUnknown_02038734 = CreateSprite(&gSpriteTemplate_83CF56C, x * 8 + 19, y * 8 + 11, 0); -} - -void RemoveMoneyLabelObject(u8 x, u8 y) -{ - DestroySpriteAndFreeResources(&gSprites[gUnknown_02038734]); - FreeSpritePaletteByTag(SPRITE_TAG_MONEY); - MenuZeroFillWindowRect(x, y, x + 13, y + 3); -} - -bool8 sub_80B7CE8(void) -{ - return IsEnoughMoney(gSaveBlock1.money, gSpecialVar_0x8005); -} - -void sub_80B7D0C(void) -{ - sub_80B79E0(&gSaveBlock1.money, gSpecialVar_0x8005); -} diff --git a/src/mori_debug_menu.c b/src/mori_debug_menu.c deleted file mode 100644 index 273191192..000000000 --- a/src/mori_debug_menu.c +++ /dev/null @@ -1,168 +0,0 @@ -#include "global.h" -#include "mori_debug_menu.h" -#include "data2.h" -#include "daycare.h" -#include "learn_move.h" -#include "link.h" -#include "main.h" -#include "menu.h" -#include "pokeblock.h" -#include "start_menu.h" -#include "string_util.h" - -#define SIO_MULTI_CNT ((struct SioMultiCnt *)REG_ADDR_SIOCNT) - -extern u8 (*gCallback_03004AE8)(void); - -u8 gUnknown_03004DA0[0x20]; - -extern u8 gUnknown_0839B22C[][3]; -extern u8 gUnknown_0839B24A[]; -extern u8 gUnknown_0839B24D[]; -extern u8 gUnknown_0839B255[]; -extern u8 gUnknown_0839B257[]; - -extern const struct MenuAction gMoriDebugMenuActions[]; - -void unref_sub_8083CF0(void) -{ - int i; - int id = SIO_MULTI_CNT->id; - gUnknown_03004DA0[0] = EOS; - StringAppend(gUnknown_03004DA0, gUnknown_0839B24A); - for (i = 0; i < 10; i++) - if ((word_3002910[id ^ 1] >> i) & 1) - StringAppend(gUnknown_03004DA0, gUnknown_0839B22C[i]); -} - -bool8 sub_8083D4C(void) -{ - if ( gMain.newKeys & A_BUTTON ) - { - CloseMenu(); - return TRUE; - } - else - return FALSE; -} - -u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr) -{ - u8 localPtr[52]; - u16 monData; - u16 var; - - monData = GetMonData(gPlayerParty, 11, ptr); - var = sub_8041870(monData); - StringCopy(localPtr, gSpeciesNames[monData]); - StringAppend(localPtr, gUnknown_0839B24D); - StringAppend(localPtr, gSpeciesNames[var]); - StringAppend(localPtr, gUnknown_0839B255); - MenuZeroFillScreen(); - MenuDrawTextWindow(0, 14, 30, 19); - MenuPrint(localPtr, 1, 15); - gCallback_03004AE8 = sub_8083D4C; - return 0; -} - -s8 MoriDebugMenu_Egg(void) -{ - if ( Daycare_CountPokemon(gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() ) - sub_8041940(); - CloseMenu(); - - return 1; -} - -s8 MoriDebugMenu_MaleEgg(void) -{ - if ( Daycare_CountPokemon(gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() ) - sub_8041950(); - CloseMenu(); - - return 1; -} - -s8 MoriDebugMenu_1000Steps(void) -{ - sub_8041790(1000); - CloseMenu(); - return 1; -} - -s8 MoriDebugMenu_10000Steps(void) -{ - sub_8041790(10000); - CloseMenu(); - return 1; -} - -s8 MoriDebugMenu_MoveTutor(void) -{ - sub_8132670(); - CloseMenu(); - return 1; -} - -s8 MoriDebugMenu_BreedEgg(void) -{ - u8 loopCounter; - - for (loopCounter = 0; loopCounter <= 5; loopCounter++) - { - //UB: Too few arguments for function 'GetMonData' - if ( GetMonData(&gPlayerParty[loopCounter], MON_DATA_IS_EGG) ) - { - u8 friendship = 0; - SetMonData(&gPlayerParty[loopCounter], MON_DATA_FRIENDSHIP, &friendship); - } - } - gSaveBlock1.filler_30B6 = -3; - CloseMenu(); - return 1; -} - -s8 MoriDebugMenu_LongName(void) -{ - SetMonData(gPlayerParty, MON_DATA_NICKNAME, gUnknown_0839B257); - CloseMenu(); - return 1; -} - -s8 MoriDebugMenu_PokeblockCase(void) -{ - s32 loopCounter; - - for (loopCounter = 0; loopCounter <= 39; loopCounter++) - sub_810CA6C(loopCounter); - - CloseMenu(); - return 1; -} - -bool8 MoriDebugMenuProcessInput(void) -{ - s8 choice = ProcessMenuInput(); - - switch (choice) - { - default: - gCallback_03004AE8 = gMoriDebugMenuActions[choice].func; - return FALSE; - case -2: - return FALSE; - case -1: - CloseMenu(); - return TRUE; - } -} - -s8 InitMoriDebugMenu(void) -{ - MenuZeroFillScreen(); - MenuDrawTextWindow(0, 0, 10, 19); - PrintMenuItems(1, 1, 9, gMoriDebugMenuActions); - InitMenu(0, 1, 1, 9, 0, 9); - gCallback_03004AE8 = MoriDebugMenuProcessInput; - return 0; -} diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c deleted file mode 100644 index 46b76fd88..000000000 --- a/src/mystery_event_menu.c +++ /dev/null @@ -1,341 +0,0 @@ -#include "global.h" -#include "mystery_event_menu.h" -#include "link.h" -#include "main.h" -#include "menu.h" -#include "mystery_event_script.h" -#include "palette.h" -#include "save.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "string_util.h" -#include "strings2.h" -#include "task.h" -#include "text.h" - -extern u8 unk_2000000[]; - -static EWRAM_DATA u8 gUnknown_02039338 = 0; - -static void VBlankCB(void); -static bool8 CheckLanguageMatch(void); -static bool8 GetEventLoadMessage(u8 *dest, u32 status); -static void CB2_MysteryEventMenu(void); - -static void VBlankCB(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -static bool8 CheckLanguageMatch(void) -{ - bool8 val = FALSE; - - if (gLinkPlayers[0].language == gLinkPlayers[1].language) - val = TRUE; - - return val; -} - -void CB2_InitMysteryEventMenu(void) -{ - ResetSpriteData(); - FreeAllSpritePalettes(); - ResetTasks(); - SetVBlankCallback(VBlankCB); - SetUpWindowConfig(&gWindowConfig_81E6CE4); - InitMenuWindow(&gWindowConfig_81E6CE4); - MenuZeroFillScreen(); - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON; - REG_BLDCNT = 0; - CreateTask(Task_DestroySelf, 0); - StopMapMusic(); - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); - FillPalette(0, 0, 2); - SetMainCallback2(CB2_MysteryEventMenu); -} - -static bool8 GetEventLoadMessage(u8 *dest, u32 status) -{ - bool8 retVal = 1; - - if (status == 0) - { - StringCopy(dest, gSystemText_EventLoadSuccess); - retVal = 0; - } - - if (status == 2) - retVal = 0; - - if (status == 1) - StringCopy(dest, gSystemText_LoadingError); - - return retVal; -} - -static void CB2_MysteryEventMenu(void) -{ - u16 unkVal; - - switch (gMain.state) - { - case 0: - MenuDrawTextWindow(0, 14, 29, 19); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); - gMain.state++; - break; - case 1: - if (gPaletteFade.active) - break; - sub_8072044(gSystemText_LinkStandby); - gMain.state++; - break; - case 2: - if (MenuUpdateWindowText()) - { - gMain.state++; - gLinkType = 21761; - OpenLink(); - } - break; - case 3: - if ((gLinkStatus & 0x20) && (gLinkStatus & 0x1C) > 4) - { - PlaySE(SE_PIN); - sub_8072044(gSystemText_LoadEventPressA); - gMain.state++; - } - if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - CloseLink(); - gMain.state = 15; - } - break; - case 4: - if (MenuUpdateWindowText()) - gMain.state++; - break; -#ifdef NONMATCHING - case 5: - if (GetLinkPlayerCount_2() != 2) - { - GetEventLoadMessage(gStringVar4, 1); - sub_8072044(gStringVar4); - gMain.state = 13; - break; - } - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - sub_8007F4C(); - MenuDrawTextWindow(6, 5, 23, 8); - MenuPrint(gSystemText_LoadingEvent, 7, 6); - gMain.state++; - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - CloseLink(); - gMain.state = 15; - } - break; - case 6: - if (IsLinkConnectionEstablished()) - { - if (!gReceivedRemoteLinkPlayers) - break; - - if (GetLinkPlayerDataExchangeStatusTimed() == 3) - { - sub_800832C(); - MenuZeroFillWindowRect(6, 5, 23, 8); - GetEventLoadMessage(gStringVar4, 1); - sub_8072044(gStringVar4); - gMain.state = 13; - break; - } - else if (CheckLanguageMatch()) - { - sub_8072044(gSystemText_DontCutLink); - gMain.state++; - break; - } - else - { - CloseLink(); - MenuZeroFillWindowRect(6, 5, 23, 8); - GetEventLoadMessage(gStringVar4, 1); - sub_8072044(gStringVar4); - gMain.state = 13; - break; - } - } - if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - CloseLink(); - gMain.state = 15; - break; - } - break; -#else - case 5: - if (GetLinkPlayerCount_2() != 2) - { - goto label; - } - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - sub_8007F4C(); - MenuDrawTextWindow(6, 5, 23, 8); - MenuPrint(gSystemText_LoadingEvent, 7, 6); - gMain.state++; - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - CloseLink(); - gMain.state = 15; - } - break; - case 6: - if (IsLinkConnectionEstablished()) - { - register u8 *ptr asm("r0"); - register u32 offset1 asm("r2"); - register u32 offset2 asm("r1"); - - if (!gReceivedRemoteLinkPlayers) - break; - - if (GetLinkPlayerDataExchangeStatusTimed() == 3) - { - sub_800832C(); - MenuZeroFillWindowRect(6, 5, 23, 8); - GetEventLoadMessage(gStringVar4, 1); - sub_8072044(gStringVar4); - ptr = (u8 *)&gMain; - offset1 = offsetof(struct Main, state); - asm("" ::: "r1"); - ptr += offset1; - *ptr = 13; - } - else if (CheckLanguageMatch()) - { - register u8 *ptr2 asm("r1"); - register int offset3 asm("r0"); - register int dummy asm("r2"); - sub_8072044(gSystemText_DontCutLink); - ptr2 = (u8 *)&gMain; - offset3 = offsetof(struct Main, state); - if (dummy) - dummy++; - ptr2 += offset3; - (*ptr2)++; - break; - } - else - { - CloseLink(); - MenuZeroFillWindowRect(6, 5, 23, 8); - label: - GetEventLoadMessage(gStringVar4, 1); - sub_8072044(gStringVar4); - ptr = (u8 *)&gMain; - offset2 = offsetof(struct Main, state); - ptr += offset2; - *ptr = 13; - } - break; - } - if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - CloseLink(); - gMain.state = 15; - break; - } - break; -#endif - case 7: - if (MenuUpdateWindowText()) - gMain.state++; - break; - case 8: - if (GetBlockReceivedStatus()) - { - ResetBlockReceivedFlags(); - gMain.state++; - } - break; - case 9: - gMain.state++; - break; - case 10: - sub_800832C(); - gMain.state++; - break; - case 11: - if (gReceivedRemoteLinkPlayers) - break; - unkVal = RunMysteryEventScript(unk_2000000); - CpuFill32(0, unk_2000000, 0x7D4); - if (!GetEventLoadMessage(gStringVar4, unkVal)) - TrySavingData(NORMAL_SAVE); - gMain.state++; - break; - case 12: - sub_8072044(gStringVar4); - gMain.state++; - break; - case 13: - MenuZeroFillWindowRect(6, 5, 23, 8); - if (MenuUpdateWindowText()) - { - gMain.state++; - gUnknown_02039338 = 0; - } - break; - case 14: - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - gMain.state++; - } - break; - case 15: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gMain.state++; - break; - case 16: - if (!gPaletteFade.active) - DoSoftReset(); - break; - } - - if (gLinkStatus & 0x40) - { - if (!IsLinkMaster()) - { - CloseLink(); - MenuZeroFillWindowRect(6, 5, 23, 8); - GetEventLoadMessage(gStringVar4, 1); - sub_8072044(gStringVar4); - gMain.state = 13; - } - } - - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c deleted file mode 100644 index f507942a7..000000000 --- a/src/mystery_event_script.c +++ /dev/null @@ -1,462 +0,0 @@ -#include "global.h" -#include "berry.h" -#include "easy_chat.h" -#include "event_data.h" -#include "mail_data.h" -#include "mystery_event_script.h" -#include "pokedex.h" -#include "pokemon.h" -#include "pokemon_size_record.h" -#include "script.h" -#include "species.h" -#include "strings.h" -#include "string_util.h" -#include "text.h" -#include "util.h" - -#if ENGLISH -#define LANGUAGE_MASK 0x2 -#elif GERMAN -#define LANGUAGE_MASK 0x4 -#endif - -#ifdef SAPPHIRE -#define VERSION_MASK 0x100 -#else -#define VERSION_MASK 0x80 -#endif - -extern void party_compaction(void); -extern void sub_813601C(void); - -extern ScrCmdFunc gMysteryEventScriptCmdTable[]; -extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[]; - -extern const u8 gOtherText_BerryObtainedDadHasIt[]; -extern const u8 gOtherText_BerryTransformed[]; -extern const u8 gOtherText_BerryAlreadyObtained[]; -extern const u8 gOtherText_SpecialRibbonReceived[]; -extern const u8 gOtherText_DexUpgraded[]; -extern const u8 gOtherText_RareWordAdded[]; -extern const u8 gOtherText_PokeWasSentOver[]; -extern const u8 gOtherText_PartyIsFull[]; -extern const u8 gOtherText_NewTrainerInHoenn[]; -extern const u8 gOtherText_DataCannotUseVersion[]; - -static EWRAM_DATA struct ScriptContext sMysteryEventScriptContext = {0}; - -static bool32 CheckCompatibility(u16 a1, u32 a2, u16 a3, u32 a4) -{ - if (!(a1 & LANGUAGE_MASK)) - return FALSE; - - if (!(a2 & LANGUAGE_MASK)) - return FALSE; - - if (!(a3 & 0x4)) - return FALSE; - - if (!(a4 & VERSION_MASK)) - return FALSE; - - return TRUE; -} - -static void SetIncompatible(void) -{ - StringExpandPlaceholders(gStringVar4, gOtherText_DataCannotUseVersion); - SetMysteryEventScriptStatus(3); -} - -static void InitMysteryEventScript(struct ScriptContext *ctx, u8 *script) -{ - InitScriptContext(ctx, gMysteryEventScriptCmdTable, gMysteryEventScriptCmdTableEnd); - SetupBytecodeScript(ctx, script); - ctx->data[0] = (u32)script; - ctx->data[1] = 0; - ctx->data[2] = 0; - ctx->data[3] = 0; -} - -static bool32 RunMysteryEventScriptCommand(struct ScriptContext *ctx) -{ - if (RunScriptCommand(ctx) && ctx->data[3]) - return TRUE; - else - return FALSE; -} - -u32 RunMysteryEventScript(u8 *script) -{ - struct ScriptContext *ctx = &sMysteryEventScriptContext; - InitMysteryEventScript(ctx, script); - while (RunMysteryEventScriptCommand(ctx)) - ; - return ctx->data[2]; -} - -void SetMysteryEventScriptStatus(u32 val) -{ - sMysteryEventScriptContext.data[2] = val; -} - -static int CalcChecksum(u8 *data, int size) -{ - unsigned int i; - int sum = 0; - - for (i = 0; i < size; i++) - sum += data[i]; - - return sum; -} - -static u32 GetWord(u8 *ptr) -{ - return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); -} - -static void SetWord(u8 *ptr, u32 val) -{ - ptr[0] = val; - ptr[1] = val >> 8; - ptr[2] = val >> 16; - ptr[3] = val >> 24; -} - -bool8 unref_sub_81261B4(u8 *a1, int a2) -{ - if (a1[0x0] == 1 && a1[0x11] == 15 && !GetWord(a1 + 0x12)) - { - int v4 = GetWord(a1 + 0x16) - a2 + (int)a1; - int v5 = GetWord(a1 + 0x1A); - int v6 = CalcChecksum((u8*)v4, v5 - a2 + (int)a1 - v4); - SetWord(a1 + 0x12, v6); - return TRUE; - } - - return FALSE; -} - -bool8 unref_sub_812620C(u8 *a1, int a2) -{ - if (a1[0x0] == 1 && a1[0x11] == 16 && !GetWord(a1 + 0x12)) - { - int v4 = GetWord(a1 + 0x16) - a2 + (int)a1; - int v5 = GetWord(a1 + 0x1A); - int v6 = CalcCRC16((u8*)v4, v5 - a2 + (int)a1 - v4); - SetWord(a1 + 0x12, v6); - return TRUE; - } - - return FALSE; -} - -static u32 CalcRecordMixingGiftChecksum(void) -{ - u32 sum = 0; - int i; - char *data = (char *)&gSaveBlock1.recordMixingGift.data; - - for (i = 0; i < sizeof(gSaveBlock1.recordMixingGift.data); i++) - { - sum += data[i]; - } - - return sum; -} - -static bool32 IsRecordMixingGiftValid(void) -{ - struct RecordMixingGiftData *data = &gSaveBlock1.recordMixingGift.data; - - u32 checksum = CalcRecordMixingGiftChecksum(); - - if (!data->unk0) - return FALSE; - - if (!data->quantity) - return FALSE; - - if (!data->itemId) - return FALSE; - - if (checksum == 0) - return FALSE; - - if (checksum == gSaveBlock1.recordMixingGift.checksum) - return TRUE; - else - return FALSE; -} - -static void ClearRecordMixingGift(void) -{ - CpuFill16(0, &gSaveBlock1.recordMixingGift, sizeof(gSaveBlock1.recordMixingGift)); -} - -static void SetRecordMixingGift(u8 unk, u8 quantity, u16 itemId) -{ - if (!unk || !quantity || !itemId) - { - ClearRecordMixingGift(); - } - else - { - gSaveBlock1.recordMixingGift.data.unk0 = unk; - gSaveBlock1.recordMixingGift.data.quantity = quantity; - gSaveBlock1.recordMixingGift.data.itemId = itemId; - gSaveBlock1.recordMixingGift.checksum = CalcRecordMixingGiftChecksum(); - } -} - -u16 GetRecordMixingGift(void) -{ - struct RecordMixingGiftData *data = &gSaveBlock1.recordMixingGift.data; - - if (!IsRecordMixingGiftValid()) - { - ClearRecordMixingGift(); - return 0; - } - else - { - u16 itemId = data->itemId; - data->quantity--; - if (data->quantity == 0) - ClearRecordMixingGift(); - else - gSaveBlock1.recordMixingGift.checksum = CalcRecordMixingGiftChecksum(); - return itemId; - } -} - -bool8 MEScrCmd_end(struct ScriptContext *ctx) -{ - StopScript(ctx); - return TRUE; -} - -bool8 MEScrCmd_checkcompat(struct ScriptContext *ctx) -{ - u16 v1; - u32 v2; - u16 v3; - u32 v4; - - ctx->data[1] = ScriptReadWord(ctx); - v1 = ScriptReadHalfword(ctx); - v2 = ScriptReadWord(ctx); - v3 = ScriptReadHalfword(ctx); - v4 = ScriptReadWord(ctx); - - if (CheckCompatibility(v1, v2, v3, v4) == TRUE) - ctx->data[3] = 1; - else - SetIncompatible(); - - return TRUE; -} - -bool8 MEScrCmd_nop(struct ScriptContext *ctx) -{ - return FALSE; -} - -bool8 MEScrCmd_setstatus(struct ScriptContext *ctx) -{ - u8 value = ScriptReadByte(ctx); - ctx->data[2] = value; - return FALSE; -} - -bool8 MEScrCmd_setmsg(struct ScriptContext *ctx) -{ - u8 value = ScriptReadByte(ctx); - u8 *str = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); - if (value == 255 || value == ctx->data[2]) - StringExpandPlaceholders(gStringVar4, str); - return FALSE; -} - -bool8 MEScrCmd_runscript(struct ScriptContext *ctx) -{ - u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); - ScriptContext2_RunNewScript(script); - return FALSE; -} - -bool8 MEScrCmd_setenigmaberry(struct ScriptContext *ctx) -{ - u8 *str; - const u8 *message; - bool32 haveBerry = IsEnigmaBerryValid(); - u8 *berry = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); - StringCopyN(gStringVar1, gSaveBlock1.enigmaBerry.berry.name, 7); - SetEnigmaBerry(berry); - StringCopyN(gStringVar2, gSaveBlock1.enigmaBerry.berry.name, 7); - - if (!haveBerry) - { - str = gStringVar4; - message = gOtherText_BerryObtainedDadHasIt; - } - else if (StringCompare(gStringVar1, gStringVar2)) - { - str = gStringVar4; - message = gOtherText_BerryTransformed; - } - else - { - str = gStringVar4; - message = gOtherText_BerryAlreadyObtained; - } - - StringExpandPlaceholders(str, message); - - ctx->data[2] = 2; - - if (IsEnigmaBerryValid() == TRUE) - VarSet(0x402D, 1); - else - ctx->data[2] = 1; - - return FALSE; -} - -bool8 MEScrCmd_giveribbon(struct ScriptContext *ctx) -{ - u8 index = ScriptReadByte(ctx); - u8 ribbonId = ScriptReadByte(ctx); - GiveGiftRibbonToParty(index, ribbonId); - StringExpandPlaceholders(gStringVar4, gOtherText_SpecialRibbonReceived); - ctx->data[2] = 2; - return FALSE; -} - -bool8 MEScrCmd_initramscript(struct ScriptContext *ctx) -{ - u8 mapGroup = ScriptReadByte(ctx); - u8 mapNum = ScriptReadByte(ctx); - u8 objectId = ScriptReadByte(ctx); - u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); - u8 *scriptEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); - InitRamScript(script, scriptEnd - script, mapGroup, mapNum, objectId); - return FALSE; -} - -bool8 MEScrCmd_givenationaldex(struct ScriptContext *ctx) -{ - EnableNationalPokedex(); - StringExpandPlaceholders(gStringVar4, gOtherText_DexUpgraded); - ctx->data[2] = 2; - return FALSE; -} - -bool8 MEScrCmd_addrareword(struct ScriptContext *ctx) -{ - sub_80EB890(ScriptReadByte(ctx)); - StringExpandPlaceholders(gStringVar4, gOtherText_RareWordAdded); - ctx->data[2] = 2; - return FALSE; -} - -bool8 MEScrCmd_setrecordmixinggift(struct ScriptContext *ctx) -{ - u8 unk = ScriptReadByte(ctx); - u8 quantity = ScriptReadByte(ctx); - u16 itemId = ScriptReadHalfword(ctx); - SetRecordMixingGift(unk, quantity, itemId); - return FALSE; -} - -bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) -{ - struct MailStruct mail; - struct Pokemon pokemon; - u16 species; - u16 heldItem; - u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]; - void *pokemonPtr = (void *)data; - void *mailPtr = (void *)(data + sizeof(struct Pokemon)); - - pokemon = *(struct Pokemon *)pokemonPtr; - species = GetMonData(&pokemon, MON_DATA_SPECIES2); - - if (species == SPECIES_EGG) - StringCopyN(gStringVar1, gSystemText_Egg, 11); - else - StringCopyN(gStringVar1, gSystemText_Pokemon2, 11); - - if (gPlayerPartyCount == 6) - { - StringExpandPlaceholders(gStringVar4, gOtherText_PartyIsFull); - ctx->data[2] = 3; - } - else - { - memcpy(&gPlayerParty[5], pokemonPtr, sizeof(struct Pokemon)); - memcpy(&mail, mailPtr, sizeof(struct MailStruct)); - - if (species != SPECIES_EGG) - { - u16 pokedexNum = SpeciesToNationalPokedexNum(species); - GetNationalPokedexFlag(pokedexNum, 2); - GetNationalPokedexFlag(pokedexNum, 3); - } - - heldItem = GetMonData(&gPlayerParty[5], MON_DATA_HELD_ITEM); - if (ItemIsMail(heldItem)) - GiveMailToMon2(&gPlayerParty[5], &mail); - party_compaction(); - CalculatePlayerPartyCount(); - StringExpandPlaceholders(gStringVar4, gOtherText_PokeWasSentOver); - ctx->data[2] = 2; - } - - return FALSE; -} - -bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx) -{ - u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]; - memcpy(gSaveBlock2.filler_A8.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.filler_A8.ereaderTrainer)); - sub_813601C(); - StringExpandPlaceholders(gStringVar4, gOtherText_NewTrainerInHoenn); - ctx->data[2] = 2; - return FALSE; -} - -bool8 MEScrCmd_enableresetrtc(struct ScriptContext *ctx) -{ - EnableResetRTC(); - StringExpandPlaceholders(gStringVar4, gSystemText_ClockAdjustmentUsable); - ctx->data[2] = 2; - return FALSE; -} - -bool8 MEScrCmd_checksum(struct ScriptContext *ctx) -{ - int checksum = ScriptReadWord(ctx); - u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); - u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); - if (checksum != CalcChecksum(data, dataEnd - data)) - { - ctx->data[3] = 0; - ctx->data[2] = 1; - } - return TRUE; -} - -bool8 MEScrCmd_crc(struct ScriptContext *ctx) -{ - int crc = ScriptReadWord(ctx); - u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); - u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); - if (crc != CalcCRC16(data, dataEnd - data)) - { - ctx->data[3] = 0; - ctx->data[2] = 1; - } - return TRUE; -} diff --git a/src/name_string_util.c b/src/name_string_util.c deleted file mode 100644 index f1a935453..000000000 --- a/src/name_string_util.c +++ /dev/null @@ -1,40 +0,0 @@ -#include "global.h" -#include "name_string_util.h" -#include "string_util.h" -#include "text.h" - -void PadNameString(u8 *a1, u8 a2) -{ - u8 i; - - StripExtCtrlCodes(a1); - i = StringLength(a1); - - if (a2 == 0xFC) - { - while (i < 6) - { - a1[i] = 0xFC; - a1[i + 1] = 7; - i += 2; - } - } - else - { - while (i < 6) - { - a1[i] = a2; - i++; - } - } - - a1[i] = EOS; -} - -void SanitizeNameString(u8 *a1) -{ - if (StringLength(a1) < 6) - ConvertInternationalString(a1, 1); - else - StripExtCtrlCodes(a1); -} diff --git a/src/naming_screen.c b/src/naming_screen.c deleted file mode 100644 index 6c107f022..000000000 --- a/src/naming_screen.c +++ /dev/null @@ -1,2038 +0,0 @@ -#include "global.h" -#include "naming_screen.h" -#include "data2.h" -#include "field_effect.h" -#include "field_map_obj.h" -#include "field_player_avatar.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "pokemon_icon.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "string_util.h" -#include "strings2.h" -#include "task.h" -#include "text.h" -#include "trig.h" -#include "util.h" - -#ifdef ENGLISH -#define COLUMN_COUNT 9 -#elif GERMAN -#define COLUMN_COUNT 10 -#endif - -extern u16 gKeyRepeatStartDelay; - -extern u8 unk_2000000[]; - -#define namingScreenData (*(struct NamingScreenData *)(unk_2000000)) - -const u32 gSpriteImage_83CE094[] = INCBIN_U32("graphics/naming_screen/pc_icon/0.4bpp"); -const u32 gSpriteImage_83CE154[] = INCBIN_U32("graphics/naming_screen/pc_icon/1.4bpp"); - -//Some unused pointer, perhaps. -asm(".section .rodata\n\ -@ XXX: what is this?\n\ - .align 2\n\ - .4byte 0x2000000\n"); - -extern u16 *const gUnknown_083CE28C[]; -extern const struct SubspriteTable gSubspriteTables_83CE558[]; -extern const struct SubspriteTable gSubspriteTables_83CE560[]; -extern const struct SubspriteTable gSubspriteTables_83CE578[]; -extern const struct SubspriteTable gSubspriteTables_83CE580[]; -extern const struct SpriteTemplate gSpriteTemplate_83CE5C8; -extern const struct SpriteTemplate gSpriteTemplate_83CE5E0; -extern const struct SpriteTemplate gSpriteTemplate_83CE5F8; -extern const struct SpriteTemplate gSpriteTemplate_83CE610; -extern const struct SpriteTemplate gSpriteTemplate_83CE628; -extern const struct SpriteTemplate gSpriteTemplate_83CE640; -extern const struct SpriteTemplate gSpriteTemplate_83CE658; -extern const struct SpriteTemplate gSpriteTemplate_83CE670; -extern const struct SpriteTemplate gSpriteTemplate_83CE688; -extern const struct SpriteSheet gUnknown_083CE6A0[]; -extern const struct SpritePalette gUnknown_083CE708[]; -extern const u8 gNamingScreenMenu_Gfx[]; -extern const u16 gNamingScreenPalettes[]; -extern const u16 gUnknown_083CE748[]; -extern const u16 gUnknown_083CEBF8[]; -extern const u16 gUnknown_083CF0A8[]; -extern const u16 gUnknown_08E86258[]; - -static void C2_NamingScreen(void); -static void sub_80B5AA0(void); -static void StoreNamingScreenParameters(u8, u8 *, u16, u16, u32, MainCallback); -static void NamingScreen_TurnOffScreen(void); -static void NamingScreen_Init(void); -static void NamingScreen_ClearVram(void); -static void NamingScreen_ClearOam(void); -static void NamingScreen_SetUpVideoRegs(void); -static void NamingScreen_SetUpWindow(void); -static void NamingScreen_ResetObjects(void); -static void sub_80B5DFC(void); -static void sub_80B5E20(void); -static void sub_80B5E3C(void); -static void NamingScreen_InitDisplayMode(void); -static void Task_DoNothing(u8); -static void sub_80B7558(void); -static void sub_80B753C(void); -static void sub_80B7680(void); -static void sub_80B75C4(void); -static void sub_80B7794(void); -static void sub_80B78A8(void); -static void sub_80B7960(void); -static void CursorInit(void); -static void sub_80B6A80(void); -static void sub_80B6CA8(void); -static void sub_80B6D04(void); -static void sub_80B6E44(void); -static void InputInit(void); -static void sub_80B6438(void); -static void sub_80B5E50(void); -static void Task_NamingScreenMain(u8); -static void SetInputState(u8); -static void sub_80B68D8(u8); -static bool8 HandleKeyboardEvent(void); -static bool8 IsCursorAnimFinished(void); -static void MoveCursorToOKButton(void); -static void sub_80B6B14(void); -static void StartPageSwapAnim(void); -static void sub_80B6888(u8); -static void sub_80B6460(u8, u8, u8); -static bool8 IsPageSwapAnimNotInProgress(void); -static void sub_80B7614(void); -static void GetCursorPos(s16 *, s16 *); -static void SetCursorPos(s16, s16); -static void sub_80B77F8(void); -static void sub_80B74B0(void); -static void DisplaySentToPCMessage(void); -static u8 GetKeyRoleAtCursorPos(void); -static u8 sub_80B61C8(void); -static void DeleteTextCharacter(void); -static void sub_80B7090(void); -static u8 GetInputEvent(void); -static bool8 sub_80B7004(void); -static void sub_80B6914(void); -static void Task_HandlePageSwapAnim(u8); -static void sub_80B6C48(u8, struct Sprite *, struct Sprite *); -static u8 GetTextCaretPosition(void); -static u8 GetCharAtKeyboardPos(s16, s16); -static bool8 sub_80B7104(void); -static bool8 sub_80B713C(void); -static void AddTextCharacter(u8); -static bool8 sub_80B7198(u8); -static bool8 sub_80B7264(u8); -static void sub_80B7370(u8, u8); -static void sub_80B73CC(u8, u8); -static bool8 sub_80B71E4(u8); -static void sub_80B7474(u8, u8); -static void sub_80B72A4(u8, u8); -static bool8 sub_80B720C(u8); -static void sub_80B7568(void); -static void sub_80B75B0(void); -static void sub_80B7698(u16 *, const u16 *); -static void sub_80B76E0(); -static void nullsub_20(u8, u8); -static void PrintKeyboardCharacters(u8); - -void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 c, u16 d, u32 e, MainCallback returnCallback) -{ - StoreNamingScreenParameters(templateNum, destBuffer, c, d, e, returnCallback); - SetMainCallback2(C2_NamingScreen); -} - -static void C2_NamingScreen(void) -{ - switch (gMain.state) - { - case 0: - NamingScreen_TurnOffScreen(); - NamingScreen_Init(); - gMain.state++; - break; - case 1: - NamingScreen_ClearVram(); - gMain.state++; - break; - case 2: - NamingScreen_ClearOam(); - gMain.state++; - break; - case 3: - NamingScreen_SetUpVideoRegs(); - gMain.state++; - break; - case 4: - NamingScreen_SetUpWindow(); - gMain.state++; - break; - case 5: - NamingScreen_ResetObjects(); - gMain.state++; - break; - case 6: - sub_80B5DFC(); - gMain.state++; - break; - case 7: - sub_80B5E20(); - sub_80B5E3C(); - NamingScreen_InitDisplayMode(); - SetMainCallback2(sub_80B5AA0); - break; - } -} - -static void sub_80B5AA0(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void VBlankCB_NamingScreen(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - REG_BG1VOFS = namingScreenData.bg1vOffset; - REG_BG2VOFS = namingScreenData.bg2vOffset; - REG_BG1CNT &= 0xFFFC; - REG_BG1CNT |= namingScreenData.unk8; - REG_BG2CNT &= 0xFFFC; - REG_BG2CNT |= namingScreenData.unkA; -} - -static void StoreNamingScreenParameters(u8 templateNum, u8 *destBuffer, u16 c, u16 d, u32 e, MainCallback returnCallback) -{ - struct Task *task; - - //Create a task that does nothing, and use it as a temporary space to store parameters - task = &gTasks[CreateTask(Task_DoNothing, 0xFF)]; - task->data[0] = templateNum; - task->data[1] = c; - task->data[2] = d; - task->data[3] = e >> 16; - task->data[4] = e; - StoreWordInTwoHalfwords(&task->data[5], (u32)destBuffer); - StoreWordInTwoHalfwords(&task->data[7], (u32)returnCallback); -} - -static void GetNamingScreenParameters(void) -{ - u8 taskId; - struct Task *task; - - taskId = FindTaskIdByFunc(Task_DoNothing); - task = &gTasks[taskId]; - namingScreenData.templateNum = task->data[0]; - namingScreenData.unk3E = task->data[1]; - namingScreenData.unk40 = task->data[2]; - namingScreenData.unk42 = (task->data[3] << 16) | (u16)task->data[4]; - LoadWordFromTwoHalfwords(&task->data[5], (u32 *)&namingScreenData.destBuffer); - LoadWordFromTwoHalfwords(&task->data[7], (u32 *)&namingScreenData.returnCallback); - DestroyTask(taskId); -} - -static void Task_DoNothing(u8 taskId) -{ -} - -static void NamingScreen_TurnOffScreen(void) -{ - SetVBlankCallback(NULL); - SetHBlankCallback(NULL); - REG_DISPCNT = 0; -} - -static void NamingScreen_InitDisplayMode(void) -{ - u16 savedIme; - - SetVBlankCallback(VBlankCB_NamingScreen); - savedIme = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = savedIme; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; -} - -static void NamingScreen_ClearVram(void) -{ - u8 *addr = (void *)VRAM; - u32 size = 0x10000; - - while (1) - { - DmaFill16(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill16(3, 0, addr, size); - break; - } - } -} - -static void NamingScreen_ClearOam(void) -{ - DmaClear16(3, (void *)OAM, 0x400); -} - -static void NamingScreen_SetUpVideoRegs(void) -{ - REG_BG0CNT = 0; - REG_BG1CNT = 0; - REG_BG2CNT = 0; - REG_BG3CNT = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(28) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(29) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(30) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BLDCNT = 0x640; - REG_BLDALPHA = 0x80C; -} - -static const struct NamingScreenTemplate *const sNamingScreenTemplates[]; //forward declaration - -static void NamingScreen_Init(void) -{ - GetNamingScreenParameters(); - namingScreenData.state = 0; - namingScreenData.bg1vOffset = 0; - namingScreenData.bg2vOffset = 0; - namingScreenData.unk8 = 1; - namingScreenData.unkA = 2; - namingScreenData.unkC = 0; - namingScreenData.unkD = 1; - namingScreenData.template = sNamingScreenTemplates[namingScreenData.templateNum]; - namingScreenData.currentPage = namingScreenData.template->unk4; - namingScreenData.unk2 = 14 - namingScreenData.template->maxChars / 2; - namingScreenData.unk3C = gKeyRepeatStartDelay; - memset(namingScreenData.textBuffer, 0xFF, sizeof(namingScreenData.textBuffer)); - if (namingScreenData.template->unk0 != 0) - StringCopy(namingScreenData.textBuffer, namingScreenData.destBuffer); - gKeyRepeatStartDelay = 16; -} - -static void NamingScreen_SetUpWindow(void) -{ - SetUpWindowConfig(&gWindowConfig_81E6E88); - InitMenuWindow(&gWindowConfig_81E6E88); -} - -static void NamingScreen_ResetObjects(void) -{ - ResetPaletteFade(); - ResetSpriteData(); - FreeAllSpritePalettes(); - ResetTasks(); -} - -static void sub_80B5DFC(void) -{ - sub_80B7558(); - sub_80B753C(); - sub_80B7680(); - sub_80B75C4(); - sub_80B7794(); - sub_80B78A8(); - sub_80B7960(); -} - -static void sub_80B5E20(void) -{ - CursorInit(); - sub_80B6A80(); - sub_80B6CA8(); - sub_80B6D04(); - sub_80B6E44(); -} - -static void sub_80B5E3C(void) -{ - InputInit(); - sub_80B6438(); - sub_80B5E50(); -} - -//-------------------------------------------------- -// Naming screen main -//-------------------------------------------------- - -static bool8 MainState_BeginFadeIn(struct Task *); -static bool8 MainState_WaitFadeIn(struct Task *); -static bool8 MainState_HandleInput(struct Task *); -static bool8 MainState_MoveToOKButton(struct Task *); -static bool8 MainState_StartPageSwap(struct Task *); -static bool8 MainState_WaitPageSwap(struct Task *); -static bool8 MainState_6(struct Task *); -static bool8 MainState_UpdateSentToPCMessage(struct Task *); -static bool8 MainState_BeginFadeInOut(struct Task *); -static bool8 MainState_WaitFadeOutAndExit(struct Task *); - -static bool8 (*const sMainStateFuncs[])(struct Task *) = -{ - MainState_BeginFadeIn, - MainState_WaitFadeIn, - MainState_HandleInput, - MainState_MoveToOKButton, - MainState_StartPageSwap, - MainState_WaitPageSwap, - MainState_6, - MainState_UpdateSentToPCMessage, - MainState_BeginFadeInOut, - MainState_WaitFadeOutAndExit, -}; - -static void sub_80B5E50(void) -{ - u8 taskId; - - taskId = CreateTask(Task_NamingScreenMain, 2); - Task_NamingScreenMain(taskId); -} - -static void Task_NamingScreenMain(u8 taskId) -{ - while (sMainStateFuncs[namingScreenData.state](&gTasks[taskId]) != 0) - ; -} - -static bool8 MainState_BeginFadeIn(struct Task *task) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - namingScreenData.state++; - return 0; -} - -static bool8 MainState_WaitFadeIn(struct Task *task) -{ - if (!gPaletteFade.active) - { - SetInputState(INPUT_STATE_ENABLED); - sub_80B68D8(1); - namingScreenData.state++; - } - return FALSE; -} - -static bool8 MainState_HandleInput(struct Task *task) -{ - return HandleKeyboardEvent(); -} - -static bool8 MainState_MoveToOKButton(struct Task *task) -{ - if (IsCursorAnimFinished()) - { - SetInputState(INPUT_STATE_ENABLED); - MoveCursorToOKButton(); - namingScreenData.state = MAIN_STATE_HANDLE_INPUT; - } - return FALSE; -} - -static bool8 MainState_StartPageSwap(struct Task *task) -{ - SetInputState(INPUT_STATE_DISABLED); - sub_80B6B14(); - StartPageSwapAnim(); - sub_80B6888(1); - sub_80B6460(0, 0, 1); - PlaySE(SE_WIN_OPEN); - namingScreenData.state = MAIN_STATE_WAIT_PAGE_SWAP; - return FALSE; -} - -static bool8 MainState_WaitPageSwap(struct Task *task) -{ - s16 cursorX; - s16 cursorY; - - if (IsPageSwapAnimNotInProgress()) - { - namingScreenData.state = MAIN_STATE_HANDLE_INPUT; - namingScreenData.currentPage++; - namingScreenData.currentPage %= 3; - sub_80B7614(); - sub_80B77F8(); - SetInputState(INPUT_STATE_ENABLED); - GetCursorPos(&cursorX, &cursorY); -#if ENGLISH - if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7)) - cursorX = 5; -#elif GERMAN - if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 7 || cursorX == 8)) - cursorX = 6; -#endif - SetCursorPos(cursorX, cursorY); - sub_80B6888(0); - } - return FALSE; -} - -static bool8 MainState_6(struct Task *task) -{ - sub_80B74B0(); - SetInputState(INPUT_STATE_DISABLED); - sub_80B68D8(0); - sub_80B6460(3, 0, 1); - gKeyRepeatStartDelay = namingScreenData.unk3C; - if (namingScreenData.templateNum == NAMING_SCREEN_TEMPLATE_MON_NAME - && CalculatePlayerPartyCount() >= 6) - { - DisplaySentToPCMessage(); - namingScreenData.state = MAIN_STATE_UPDATE_SENT_TO_PC_MESSAGE; - return FALSE; - } - else - { - namingScreenData.state = MAIN_STATE_BEGIN_FADE_OUT; - return TRUE; //Exit the naming screen - } -} - -static bool8 MainState_UpdateSentToPCMessage(struct Task *task) -{ - if (MenuUpdateWindowText()) - namingScreenData.state++; - return FALSE; -} - -static bool8 MainState_BeginFadeInOut(struct Task *task) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - namingScreenData.state++; - return FALSE; -} - -static bool8 MainState_WaitFadeOutAndExit(struct Task *task) -{ - if (!gPaletteFade.active) - SetMainCallback2(namingScreenData.returnCallback); - return FALSE; -} - -//-------------------------------------------------- -// Keyboard handling -//-------------------------------------------------- - -enum -{ - KEY_ROLE_CHAR, - KEY_ROLE_PAGE, - KEY_ROLE_BACKSPACE, - KEY_ROLE_OK, -}; - - -static bool8 KeyboardKeyHandler_Character(u8); -static bool8 KeyboardKeyHandler_Page(u8); -static bool8 KeyboardKeyHandler_Backspace(u8); -static bool8 KeyboardKeyHandler_OK(u8); - -static bool8 (*const sKeyboardKeyHandlers[])(u8) = -{ - KeyboardKeyHandler_Character, - KeyboardKeyHandler_Page, - KeyboardKeyHandler_Backspace, - KeyboardKeyHandler_OK, -}; - -static bool8 HandleKeyboardEvent(void) -{ - u8 event = GetInputEvent(); - u8 keyRole = GetKeyRoleAtCursorPos(); - - if (event == KBEVENT_PRESSED_SELECT) - return sub_80B61C8(); - else if (event == KBEVENT_PRESSED_B) - { - DeleteTextCharacter(); - return FALSE; - } - else if (event == 7) - { - sub_80B7090(); - return FALSE; - } - return sKeyboardKeyHandlers[keyRole](event); -} - -static bool8 KeyboardKeyHandler_Character(u8 event) -{ - sub_80B6460(3, 0, 0); - if (event == KBEVENT_PRESSED_A) - { - u8 var = sub_80B7004(); - - sub_80B6914(); - if (var) - { - SetInputState(INPUT_STATE_DISABLED); - namingScreenData.state = MAIN_STATE_MOVE_TO_OK_BUTTON; - } - } - return FALSE; -} - -static bool8 KeyboardKeyHandler_Page(u8 event) -{ - sub_80B6460(0, 1, 0); - if (event == KBEVENT_PRESSED_A) - return sub_80B61C8(); - else - return FALSE; -} - -static bool8 KeyboardKeyHandler_Backspace(u8 event) -{ - sub_80B6460(1, 1, 0); - if (event == KBEVENT_PRESSED_A) - DeleteTextCharacter(); - return FALSE; -} - -static bool8 KeyboardKeyHandler_OK(u8 event) -{ - sub_80B6460(2, 1, 0); - if (event == KBEVENT_PRESSED_A) - { - PlaySE(SE_SELECT); - namingScreenData.state = MAIN_STATE_6; - return TRUE; - } - else - return FALSE; -} - -static bool8 sub_80B61C8(void) -{ - namingScreenData.state = MAIN_STATE_START_PAGE_SWAP; - return TRUE; -} - -//-------------------------------------------------- -// Input handling -//-------------------------------------------------- - -enum -{ - FNKEY_CASE, - FNKEY_BACK, - FNKEY_OK, -}; - -#define tState data[0] -#define tKeyboardEvent data[1] -#define tKbFunctionKey data[2] - -static void InputState_Disabled(struct Task *); -static void InputState_Enabled(struct Task *); - -static void (*const sInputStateFuncs[])(struct Task *) = -{ - InputState_Disabled, - InputState_Enabled, -}; - -static void Task_HandleInput(u8); -static void HandleDpadMovement(struct Task *); - -static void InputInit(void) -{ - CreateTask(Task_HandleInput, 1); -} - -static u8 GetInputEvent(void) -{ - u8 taskId = FindTaskIdByFunc(Task_HandleInput); - - return gTasks[taskId].tKeyboardEvent; -} - -static void SetInputState(u8 state) -{ - u8 taskId = FindTaskIdByFunc(Task_HandleInput); - - gTasks[taskId].tState = state; -} - -static void Task_HandleInput(u8 taskId) -{ - sInputStateFuncs[gTasks[taskId].tState](&gTasks[taskId]); -} - -static void InputState_Disabled(struct Task *task) -{ - task->tKeyboardEvent = 0; -} - -static void InputState_Enabled(struct Task *task) -{ - task->tKeyboardEvent = 0; - if (gMain.newKeys & A_BUTTON) - { - task->tKeyboardEvent = KBEVENT_PRESSED_A; - return; - } - if (gMain.newKeys & B_BUTTON) - { - task->tKeyboardEvent = KBEVENT_PRESSED_B; - return; - } - if (gMain.newKeys & SELECT_BUTTON) - { - task->tKeyboardEvent = KBEVENT_PRESSED_SELECT; - return; - } - if (gMain.newKeys & START_BUTTON) - { - task->tKeyboardEvent = KBEVENT_PRESSED_START; - MoveCursorToOKButton(); - return; - } - HandleDpadMovement(task); -} - -static const s16 sDpadDeltaX[] = -{ - 0, //none - 0, //up - 0, //down - -1, //left - 1 //right -}; - -static const s16 sDpadDeltaY[] = -{ - 0, //none - -1, //up - 1, //down - 0, //left - 0 //right -}; - -static const s16 s4RowTo3RowTableY[] = {0, 1, 1, 2}; -static const s16 gUnknown_083CE274[] = {0, 0, 3, 0}; - -static void HandleDpadMovement(struct Task *task) -{ - s16 cursorX; - s16 cursorY; - u16 dpadDir; - s16 prevCursorX; - - GetCursorPos(&cursorX, &cursorY); - dpadDir = 0; - if (gMain.newAndRepeatedKeys & DPAD_UP) - dpadDir = 1; - if (gMain.newAndRepeatedKeys & DPAD_DOWN) - dpadDir = 2; - if (gMain.newAndRepeatedKeys & DPAD_LEFT) - dpadDir = 3; - if (gMain.newAndRepeatedKeys & DPAD_RIGHT) - dpadDir = 4; - - //Get new cursor position - prevCursorX = cursorX; - cursorX += sDpadDeltaX[dpadDir]; - cursorY += sDpadDeltaY[dpadDir]; - - //Wrap cursor position in the X direction - if (cursorX < 0) - cursorX = COLUMN_COUNT - 1; - if (cursorX > COLUMN_COUNT - 1) - cursorX = 0; - - //Handle cursor movement in X direction - if (sDpadDeltaX[dpadDir] != 0) - { - //The "others" page only has 5 columns -#if ENGLISH - if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7)) -#elif GERMAN - if (namingScreenData.currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7 || cursorX == 8)) -#endif - { - if (sDpadDeltaX[dpadDir] > 0) - cursorX = COLUMN_COUNT - 1; - else - cursorX = 5; - } - - if (cursorX == COLUMN_COUNT - 1) - { - //We are now on the last column - task->tKbFunctionKey = cursorY; - cursorY = s4RowTo3RowTableY[cursorY]; - } - else if (prevCursorX == COLUMN_COUNT - 1) - { - if (cursorY == 1) - cursorY = task->tKbFunctionKey; - else - cursorY = gUnknown_083CE274[cursorY]; - } - } - - if (cursorX == COLUMN_COUNT - 1) - { - //There are only 3 keys on the last column, unlike the others, - //so wrap Y accordingly - if (cursorY < 0) - cursorY = 2; - if (cursorY > 2) - cursorY = 0; - if (cursorY == 0) - task->tKbFunctionKey = FNKEY_BACK; - else if (cursorY == 2) - task->tKbFunctionKey = FNKEY_OK; - } - else - { - if (cursorY < 0) - cursorY = 3; - if (cursorY > 3) - cursorY = 0; - } - SetCursorPos(cursorX, cursorY); -} - -#undef tState -#undef tKeyboardEvent -#undef tKbFunctionKey - -//-------------------------------------------------- -// -//-------------------------------------------------- - -static void Task_80B64D4(u8); -static u16 sub_80B654C(u8); -static void sub_80B65AC(u8); -static void sub_80B65D4(struct Task *, u8, u8); - -static void sub_80B6438(void) -{ - u8 taskId; - - taskId = CreateTask(Task_80B64D4, 3); - gTasks[taskId].data[0] = 3; -} - -static void sub_80B6460(u8 a, u8 b, u8 c) -{ - struct Task *task = &gTasks[FindTaskIdByFunc(Task_80B64D4)]; - - if (a == task->data[0] && c == 0) - { - task->data[1] = b; - task->data[2] = 1; - return; - } - if (a == 3 && task->data[1] == 0 && c == 0) - return; - if (task->data[0] != 3) - sub_80B65AC(task->data[0]); - sub_80B65D4(task, a, b); -} - -static void Task_80B64D4(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - if (task->data[0] == 3 || task->data[2] == 0) - return; - MultiplyInvertedPaletteRGBComponents(sub_80B654C(task->data[0]), task->data[3], task->data[3], task->data[3]); - if (task->data[5] != 0) - { - task->data[5]--; - if (task->data[5] != 0) - return; - } - task->data[5] = 2; - task->data[3] += task->data[4]; - if (task->data[3] == 16) - task->data[4] = -task->data[4]; - else if (task->data[3] == 0) - { - task->data[2] = task->data[1]; - task->data[4] = -task->data[4]; - } -} - -static u16 sub_80B654C(u8 a) -{ - const u16 arr[] = - { - IndexOfSpritePaletteTag(4) * 16 + 0x10E, - IndexOfSpritePaletteTag(6) * 16 + 0x10C, - IndexOfSpritePaletteTag(6) * 16 + 0x10E, - }; - - return arr[a]; -} - -static void sub_80B65AC(u8 a) -{ - u16 index = sub_80B654C(a); - - gPlttBufferFaded[index] = gPlttBufferUnfaded[index]; -} - -static void sub_80B65D4(struct Task *task, u8 b, u8 c) -{ - task->data[0] = b; - task->data[1] = c; - task->data[2] = 1; - task->data[3] = 15; - task->data[4] = 1; - task->data[5] = 0; -} - -//-------------------------------------------------- -// Page Swap -//-------------------------------------------------- - -#define tState data[0] -#define tFrameCount data[1] - -static bool8 PageSwapAnimState_Init(struct Task *); -static bool8 PageSwapAnimState_1(struct Task *); -static bool8 PageSwapAnimState_2(struct Task *); -static bool8 PageSwapAnimState_Done(struct Task *); - -static bool8 (*const sPageSwapAnimStateFuncs[])(struct Task *) = -{ - PageSwapAnimState_Init, - PageSwapAnimState_1, - PageSwapAnimState_2, - PageSwapAnimState_Done, -}; - -static void StartPageSwapAnim(void) -{ - u8 taskId; - - taskId = CreateTask(Task_HandlePageSwapAnim, 0); - Task_HandlePageSwapAnim(taskId); -} - -static bool8 IsPageSwapAnimNotInProgress(void) -{ - if (FindTaskIdByFunc(Task_HandlePageSwapAnim) == 0xFF) - return TRUE; - else - return FALSE; -} - -static void Task_HandlePageSwapAnim(u8 taskId) -{ - while (sPageSwapAnimStateFuncs[gTasks[taskId].tState](&gTasks[taskId]) != 0) - ; -} - -static bool8 PageSwapAnimState_Init(struct Task *task) -{ - namingScreenData.bg1vOffset = 0; - namingScreenData.bg2vOffset = 0; - task->tState++; - return 0; -} - -static bool8 PageSwapAnimState_1(struct Task *task) -{ - u16 *const arr[] = - { - &namingScreenData.bg2vOffset, - &namingScreenData.bg1vOffset - }; - - task->tFrameCount += 4; - *arr[namingScreenData.unkC] = Sin(task->tFrameCount, 40); - *arr[namingScreenData.unkD] = Sin((task->tFrameCount + 128) & 0xFF, 40); - if (task->tFrameCount >= 64) - { - u8 temp = namingScreenData.unk8; //Why u8 and not u16? - - namingScreenData.unk8 = namingScreenData.unkA; - namingScreenData.unkA = temp; - task->tState++; - } - return 0; -} - -static bool8 PageSwapAnimState_2(struct Task *task) -{ - u16 *const arr[] = {&namingScreenData.bg2vOffset, &namingScreenData.bg1vOffset}; - - task->tFrameCount += 4; - *arr[namingScreenData.unkC] = Sin(task->tFrameCount, 40); - *arr[namingScreenData.unkD] = Sin((task->tFrameCount + 128) & 0xFF, 40); - if (task->tFrameCount >= 128) - { - u8 temp = namingScreenData.unkC; - - namingScreenData.unkC = namingScreenData.unkD; - namingScreenData.unkD = temp; - task->tState++; - } - return 0; -} - -static bool8 PageSwapAnimState_Done(struct Task *task) -{ - DestroyTask(FindTaskIdByFunc(Task_HandlePageSwapAnim)); - return 0; -} - -#undef tState -#undef tFrameCount - -//-------------------------------------------------- -// Cursor -//-------------------------------------------------- - -static void CursorInit(void) -{ - namingScreenData.cursorSpriteId = CreateSprite(&gSpriteTemplate_83CE640, 0, 0, 0); - gSprites[namingScreenData.cursorSpriteId].oam.priority = 1; - gSprites[namingScreenData.cursorSpriteId].oam.objMode = 1; - gSprites[namingScreenData.cursorSpriteId].data6 = 1; - gSprites[namingScreenData.cursorSpriteId].data6 = 2; - SetCursorPos(0, 0); -} - -static const u8 sKeyboardSymbolPositions[][COLUMN_COUNT] = { -#if ENGLISH - {1, 3, 5, 8, 10, 12, 14, 17, 19}, //Upper page - {1, 3, 5, 8, 10, 12, 14, 17, 19}, //Lower page - {1, 4, 7, 10, 13, 16, 16, 16, 19}, //Others page -#elif GERMAN - {2, 3, 4, 5, 9, 10, 11, 12, 16, 19}, //Upper page - {2, 3, 4, 5, 9, 10, 11, 12, 16, 19}, //Lower page - {1, 4, 7, 10, 13, 16, 16, 16, 16, 19}, //Others page -#endif -}; - -static u8 CursorColToKeyboardCol(s16 x) -{ - return sKeyboardSymbolPositions[namingScreenData.currentPage][x]; -} - -static void SetCursorPos(s16 x, s16 y) -{ - struct Sprite *cursorSprite = &gSprites[namingScreenData.cursorSpriteId]; - - cursorSprite->pos1.x = CursorColToKeyboardCol(x) * 8 + 27; - cursorSprite->pos1.y = y * 16 + 80; - cursorSprite->data2 = cursorSprite->data0; - cursorSprite->data3 = cursorSprite->data1; - cursorSprite->data0 = x; - cursorSprite->data1 = y; -} - -static void GetCursorPos(s16 *x, s16 *y) -{ - struct Sprite *cursorSprite = &gSprites[namingScreenData.cursorSpriteId]; - - *x = cursorSprite->data0; - *y = cursorSprite->data1; -} - -static void MoveCursorToOKButton(void) -{ - SetCursorPos(COLUMN_COUNT - 1, 2); -} - -static void sub_80B6888(u8 a) -{ - gSprites[namingScreenData.cursorSpriteId].data4 &= -256; - gSprites[namingScreenData.cursorSpriteId].data4 |= a; - StartSpriteAnim(&gSprites[namingScreenData.cursorSpriteId], 0); -} - -static void sub_80B68D8(u8 a) -{ - gSprites[namingScreenData.cursorSpriteId].data4 &= 0xFF; - gSprites[namingScreenData.cursorSpriteId].data4 |= a << 8; -} - -static void sub_80B6914(void) -{ - StartSpriteAnim(&gSprites[namingScreenData.cursorSpriteId], 1); -} - -static bool8 IsCursorAnimFinished(void) -{ - return gSprites[namingScreenData.cursorSpriteId].animEnded; -} - -static u8 GetKeyRoleAtCursorPos(void) -{ - const u8 keyRoles[] = {KEY_ROLE_PAGE, KEY_ROLE_BACKSPACE, KEY_ROLE_OK}; - s16 cursorX; - s16 cursorY; - - GetCursorPos(&cursorX, &cursorY); - if (cursorX < COLUMN_COUNT - 1) - return KEY_ROLE_CHAR; - else - return keyRoles[cursorY]; -} - -void sub_80B6998(struct Sprite *sprite) -{ - if (sprite->animEnded) - StartSpriteAnim(sprite, 0); - sprite->invisible = (sprite->data4 & 0xFF); - if (sprite->data0 == COLUMN_COUNT - 1) - sprite->invisible = TRUE; - if (sprite->invisible || (sprite->data4 & 0xFF00) == 0 - || sprite->data0 != sprite->data2 || sprite->data1 != sprite->data3) - { - sprite->data5 = 0; - sprite->data6 = 1; - sprite->data7 = 2; - } - sprite->data7--; - if (sprite->data7 == 0) - { - sprite->data5 += sprite->data6; - if (sprite->data5 == 16 || sprite->data5 == 0) - sprite->data6 = -sprite->data6; - sprite->data7 = 2; - } - if ((sprite->data4 & 0xFF00) != 0) - { - s8 gb = sprite->data5; - s8 r = sprite->data5 >> 1; - u16 index = IndexOfSpritePaletteTag(5) * 16 + 0x0101; - - MultiplyInvertedPaletteRGBComponents(index, r, gb, gb); - } -} - -static void sub_80B6A80(void) -{ - u8 spriteId1; - u8 spriteId2; - u8 spriteId3; - - spriteId1 = CreateSprite(&gSpriteTemplate_83CE5C8, 0xCC, 0x50, 0); - namingScreenData.unk10 = spriteId1; - SetSubspriteTables(&gSprites[spriteId1], gSubspriteTables_83CE558); - - spriteId2 = CreateSprite(&gSpriteTemplate_83CE5F8, 0xCC, 0x4C, 1); - gSprites[spriteId1].data6 = spriteId2; - SetSubspriteTables(&gSprites[spriteId2], gSubspriteTables_83CE560); - - spriteId3 = CreateSprite(&gSpriteTemplate_83CE5E0, 0xCC, 0x4B, 2); - gSprites[spriteId3].oam.priority = 1; - gSprites[spriteId1].data7 = spriteId3; -} - -static void sub_80B6B14(void) -{ - struct Sprite *sprite = &gSprites[namingScreenData.unk10]; - - sprite->data0 = 2; - sprite->data1 = namingScreenData.currentPage; -} - -static u8 sub_80B6B5C(struct Sprite *); -static u8 sub_80B6B98(struct Sprite *); -static u8 sub_80B6B9C(struct Sprite *); -static u8 sub_80B6C08(struct Sprite *); - -static u8 (*const gUnknown_083CE2B4[])(struct Sprite *) = -{ - sub_80B6B5C, - sub_80B6B98, - sub_80B6B9C, - sub_80B6C08, -}; - -void sub_80B6B34(struct Sprite *sprite) -{ - while (gUnknown_083CE2B4[sprite->data0](sprite) != 0) - ; -} - -static u8 sub_80B6B5C(struct Sprite *sprite) -{ - struct Sprite *sprite1 = &gSprites[sprite->data6]; - struct Sprite *sprite2 = &gSprites[sprite->data7]; - - sub_80B6C48(namingScreenData.currentPage, sprite1, sprite2); - sprite->data0++; - return 0; -} - -static u8 sub_80B6B98(struct Sprite *sprite) -{ - return 0; -} - -static u8 sub_80B6B9C(struct Sprite *sprite) -{ - struct Sprite *r4 = &gSprites[sprite->data6]; - struct Sprite *r5 = &gSprites[sprite->data7]; - - r4->pos2.y++; - if (r4->pos2.y > 7) - { - sprite->data0++; - r4->pos2.y = -4; - r4->invisible = TRUE; - sub_80B6C48(((u8)sprite->data1 + 1) % 3, r4, r5); - } - return 0; -} - -static u8 sub_80B6C08(struct Sprite *sprite) -{ - struct Sprite *r2 = &gSprites[sprite->data6]; - - r2->invisible = FALSE; - r2->pos2.y++; - if (r2->pos2.y >= 0) - { - r2->pos2.y = 0; - sprite->data0 = 1; - } - return 0; -} - -static const u16 gUnknown_083CE2C4[] = {1, 3, 2}; -static const u16 gUnknown_083CE2CA[] = {4, 6, 5}; - -static void sub_80B6C48(u8 a, struct Sprite *b, struct Sprite *c) -{ - c->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083CE2C4[a]); - b->sheetTileStart = GetSpriteTileStartByTag(gUnknown_083CE2CA[a]); - b->subspriteTableNum = a; -} - -// - -static void sub_80B6CA8(void) -{ - u8 spriteId; - - spriteId = CreateSprite(&gSpriteTemplate_83CE610, 0xCC, 0x6C, 0); - SetSubspriteTables(&gSprites[spriteId], gSubspriteTables_83CE578); - - spriteId = CreateSprite(&gSpriteTemplate_83CE628, 0xCC, 0x84, 0); - SetSubspriteTables(&gSprites[spriteId], gSubspriteTables_83CE578); -} - -static void sub_80B6D04(void) -{ - u8 spriteId; - s16 r1; - u8 i; - - r1 = (namingScreenData.unk2 - 1) * 8 + 4; - spriteId = CreateSprite(&gSpriteTemplate_83CE658, r1, 0x28, 0); - gSprites[spriteId].oam.priority = 3; - r1 = namingScreenData.unk2 * 8 + 4; - for (i = 0; i < namingScreenData.template->maxChars; i++, r1 += 8) - { - spriteId = CreateSprite(&gSpriteTemplate_83CE670, r1, 0x2C, 0); - gSprites[spriteId].oam.priority = 3; - gSprites[spriteId].data0 = i; - } -} - -void sub_80B6D9C(struct Sprite *sprite) -{ - const s16 arr[] = {0, -4, -2, -1}; - - if (sprite->data0 == 0 || --sprite->data0 == 0) - { - sprite->data0 = 8; - sprite->data1 = (sprite->data1 + 1) & 3; - } - sprite->pos2.x = arr[sprite->data1]; -} - -void sub_80B6DE8(struct Sprite *sprite) -{ - const s16 arr[] = {2, 3, 2, 1}; - u8 var; - - var = GetTextCaretPosition(); - if (var != (u8)sprite->data0) - { - sprite->pos2.y = 0; - sprite->data1 = 0; - sprite->data2 = 0; - } - else - { - sprite->pos2.y = arr[sprite->data1]; - sprite->data2++; - if (sprite->data2 > 8) - { - sprite->data1 = (sprite->data1 + 1) & 3; - sprite->data2 = 0; - } - } -} - -// - -static void nullsub_40(void); -static void sub_80B6E68(void); -static void sub_80B6EBC(void); -static void sub_80B6EFC(void); - -static void (*const gUnknown_083CE2E0[])(void) = -{ - nullsub_40, - sub_80B6E68, - sub_80B6EBC, - sub_80B6EFC, -}; - -static void sub_80B6E44(void) -{ - gUnknown_083CE2E0[namingScreenData.template->unk2](); -} - -static void nullsub_40(void) -{ -} - -static void sub_80B6E68(void) -{ - u8 rivalGfxId; - u8 spriteId; - - rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, namingScreenData.unk3E); - spriteId = AddPseudoFieldObject(rivalGfxId, SpriteCallbackDummy, 0x38, 0x18, 0); - gSprites[spriteId].oam.priority = 3; - StartSpriteAnim(&gSprites[spriteId], 4); -} - -static void sub_80B6EBC(void) -{ - u8 spriteId; - - spriteId = CreateSprite(&gSpriteTemplate_83CE688, 0x34, 0x18, 0); - SetSubspriteTables(&gSprites[spriteId], gSubspriteTables_83CE580); - gSprites[spriteId].oam.priority = 3; -} - -static void sub_80B6EFC(void) -{ - u8 spriteId; - - sub_809D51C(); - spriteId = CreateMonIcon(namingScreenData.unk3E, SpriteCallbackDummy, 0x34, 0x18, 0, namingScreenData.unk42); - gSprites[spriteId].oam.priority = 3; -} - -static u8 GetTextCaretPosition(void) -{ - u8 i; - - for (i = 0; i < namingScreenData.template->maxChars; i++) - { - if (namingScreenData.textBuffer[i] == EOS) - return i; - } - return namingScreenData.template->maxChars - 1; -} - -static u8 GetPreviousTextCaretPosition(void) -{ - s8 i; - - for (i = namingScreenData.template->maxChars - 1; i > 0; i--) - { - if (namingScreenData.textBuffer[i] != EOS) - return i; - } - return 0; -} - -static void DeleteTextCharacter(void) -{ - u8 index; - u8 var2; - - index = GetPreviousTextCaretPosition(); - namingScreenData.textBuffer[index] = 0; - sub_80B7960(); - namingScreenData.textBuffer[index] = EOS; - var2 = GetKeyRoleAtCursorPos(); - if (var2 == 0 || var2 == 2) - sub_80B6460(1, 0, 1); - PlaySE(SE_BOWA); -} - -static bool8 sub_80B7004(void) -{ - s16 x; - s16 y; - u8 ch; - bool8 r4; - - GetCursorPos(&x, &y); - x = CursorColToKeyboardCol(x); - ch = GetCharAtKeyboardPos(x, y); - r4 = 1; - if (ch == 0xFF) - r4 = sub_80B7104(); - else if (ch == 0xFE) - r4 = sub_80B713C(); - else - AddTextCharacter(ch); - sub_80B7960(); - PlaySE(SE_SELECT); - if (r4) - { - if (GetPreviousTextCaretPosition() == namingScreenData.template->maxChars - 1) - return TRUE; - } - return FALSE; -} - -static void sub_80B7090(void) // DoInput? -{ - u8 r5; - u8 r4; - - r5 = GetPreviousTextCaretPosition(); - r4 = namingScreenData.textBuffer[r5]; - if (sub_80B7198(r4)) - { - if (sub_80B7264(r4)) - sub_80B7370(r4, r5); - else - sub_80B73CC(r4, r5); - } - else - { - if (sub_80B71E4(r4)) - sub_80B7474(r4, r5); - else - sub_80B72A4(r4, r5); - } - sub_80B7960(); - PlaySE(SE_SELECT); -} - -static bool8 sub_80B7104(void) -{ - u8 r5; - u8 r4; - - r5 = GetPreviousTextCaretPosition(); - r4 = namingScreenData.textBuffer[r5]; - if (sub_80B720C(r4)) - { - sub_80B72A4(r4, r5); - return TRUE; - } - return FALSE; -} - -static bool8 sub_80B713C(void) -{ - u8 r5; - u8 r4; - - r5 = GetPreviousTextCaretPosition(); - r4 = namingScreenData.textBuffer[r5]; - if (sub_80B7264(r4)) - { - sub_80B7370(r4, r5); - return TRUE; - } - return FALSE; -} - -static void AddTextCharacter(u8 ch) -{ - u8 index = GetTextCaretPosition(); - - namingScreenData.textBuffer[index] = ch; -} - -static bool8 sub_80B7198(u8 a) -{ - if ((a >= 55 && a <= 74) - || (a >= 135 && a <= 139) - || (a >= 140 && a <= 144) - || (a >= 145 && a <= 149) - || (a >= 150 && a <= 154)) - return TRUE; - else - return FALSE; -} - -static bool8 sub_80B71E4(u8 a) -{ - if ((a >= 75 && a <= 79) - || (a >= 155 && a <= 159)) - return TRUE; - else - return FALSE; -} - -static bool8 sub_80B720C(u8 a) -{ - if ((a >= 6 && a <= 20) - || (a >= 26 && a <= 30) - || (a >= 75 && a <= 79) - || (a >= 86 && a <= 100) - || (a >= 106 && a <= 110) - || (a >= 155 && a <= 159)) - return TRUE; - else - return FALSE; -} - -static bool8 sub_80B7264(u8 a) -{ - if ((a >= 26 && a <= 30) - || (a >= 70 && a <= 74) - || (a >= 106 && a <= 110) - || (a >= 150 && a <= 154)) - return TRUE; - else - return FALSE; -} - -static void sub_80B72A4(u8 a, u8 b) -{ - u8 chr = a; - - if (a >= 6 && a <= 10) - chr = a + 0x31; - else if (a >= 11 && a <= 15) - chr = a + 0x31; - else if (a >= 16 && a <= 20) - chr = a + 0x31; - else if (a >= 26 && a <= 30) - chr = a + 0x2C; - else if (a >= 75 && a <= 79) - chr = a + 0xFB; - else if (a >= 86 && a <= 90) - chr = a + 0x31; - else if (a >= 91 && a <= 95) - chr = a + 0x31; - else if (a >= 96 && a <= 100) - chr = a + 0x31; - else if (a >= 106 && a <= 110) - chr = a + 0x2C; - else if (a >= 155 && a <= 159) - chr = a + 0xFB; - namingScreenData.textBuffer[b] = chr; -} - -static void sub_80B7370(u8 a, u8 b) -{ - u8 chr = a; - - if (a >= 26 && a <= 30) - chr = a + 0x31; - else if (a >= 70 && a <= 74) - chr = a + 5; - else if (a >= 106 && a <= 110) - chr = a + 0x31; - else if (a >= 150 && a <= 154) - chr = a + 5; - namingScreenData.textBuffer[b] = chr; -} - -static void sub_80B73CC(u8 a, u8 b) -{ - u8 chr = a; - - if (a >= 55 && a <= 59) - chr = a + 0xCF; - else if (a >= 60 && a <= 64) - chr = a + 0xCF; - else if (a >= 65 && a <= 69) - chr = a + 0xCF; - else if (a >= 70 && a <= 74) - chr = a + 0xD4; - else if (a >= 135 && a <= 139) - chr = a + 0xCF; - else if (a >= 140 && a <= 144) - chr = a + 0xCF; - else if (a >= 145 && a <= 149) - chr = a + 0xCF; - else if (a >= 150 && a <= 154) - chr = a + 0xD4; - namingScreenData.textBuffer[b] = chr; -} - -static void sub_80B7474(u8 a, u8 b) -{ - u8 chr = a; - - if (a >= 75 && a <= 79) - chr = a + 0xCF; - else if (a >= 155 && a <= 159) - chr = a + 0xCF; - namingScreenData.textBuffer[b] = chr; -} - -static void sub_80B74B0(void) -{ - u8 i; - - for (i = 0; i < namingScreenData.template->maxChars; i++) - { - if (namingScreenData.textBuffer[i] != 0 && namingScreenData.textBuffer[i] != 0xFF) - { - StringCopyN(namingScreenData.destBuffer, namingScreenData.textBuffer, namingScreenData.template->maxChars + 1); - break; - } - } -} - -static void DisplaySentToPCMessage(void) -{ - StringCopy(gStringVar1, namingScreenData.destBuffer); - StringExpandPlaceholders(gStringVar4, gOtherText_SentToPC); - BasicInitMenuWindow(&gWindowConfig_81E6E88); - MenuDisplayMessageBox(); - sub_8072044(gStringVar4); -} - -static void sub_80B753C(void) -{ - LoadSpriteSheets(gUnknown_083CE6A0); - LoadSpritePalettes(gUnknown_083CE708); -} - -static void sub_80B7558(void) -{ - sub_80B7568(); - sub_80B75B0(); -} - -static void sub_80B7568(void) -{ - const void *src; - void *dst; - - src = gNamingScreenMenu_Gfx; - dst = (void *)(VRAM + gMenuMessageBoxContentTileOffset * 32); - DmaCopy16(3, src, dst, 0x800); - - src = gNamingScreenMenu_Gfx; - dst = (void *)(VRAM + 0x8000 + gMenuMessageBoxContentTileOffset * 32); - DmaCopy16(3, src, dst, 0x800); -} - -static void sub_80B75B0(void) -{ - LoadPalette(gNamingScreenPalettes, 0, 0x80); -} - -static void sub_80B7650(u16 *); -static void sub_80B7660(u16 *); -static void sub_80B7670(u16 *); - -static void (*const gUnknown_083CE2F0[][2])(u16 *) = -{ - {sub_80B7660, sub_80B7650}, - {sub_80B7650, sub_80B7670}, - {sub_80B7670, sub_80B7660}, -}; - -static void sub_80B75C4(void) -{ - u16 *const arr[] = - { - (u16 *)(VRAM + 0xE000), - (u16 *)(VRAM + 0xE800), - }; - - gUnknown_083CE2F0[namingScreenData.currentPage][0](arr[namingScreenData.unkC]); - gUnknown_083CE2F0[namingScreenData.currentPage][1](arr[namingScreenData.unkD]); -} - -static void sub_80B7614(void) -{ - u16 *const arr[] = - { - (u16 *)(VRAM + 0xE000), - (u16 *)(VRAM + 0xE800), - }; - - gUnknown_083CE2F0[namingScreenData.currentPage][1](arr[namingScreenData.unkD]); -} - -static void sub_80B7650(u16 *vramBuffer) -{ - sub_80B7698(vramBuffer, gUnknown_083CE748); -} - -static void sub_80B7660(u16 *vramBuffer) -{ - sub_80B7698(vramBuffer, gUnknown_083CEBF8); -} - -static void sub_80B7670(u16 *vramBuffer) -{ - sub_80B7698(vramBuffer, gUnknown_083CF0A8); -} - -static void sub_80B7680(void) -{ - sub_80B76E0(VRAM + 0xF000, gUnknown_08E86258); -} - -static void sub_80B7698(u16 *vramBuffer, const u16 *src) -{ - s16 i; - s16 j; - - for (i = 0; i < 20; i++) - { - for (j = 0; j < 30; j++, src++) - { - vramBuffer[i * 32 + j] = *src + gMenuMessageBoxContentTileOffset; - } - } -} - -static void sub_80B76E0(u16 *vramBuffer, const u16 *src) -{ - s16 i; - s16 j; - - for (i = 0; i < 20; i++) - { - for (j = 0; j < 30; j++, src++) - { - vramBuffer[i * 32 + j] = *src + gMenuMessageBoxContentTileOffset; - } - src += 2; - } -} - -static void sub_80B772C(void) -{ - nullsub_20(namingScreenData.currentPage, namingScreenData.unkC); -} - -static void sub_80B7740(void) -{ - nullsub_20((namingScreenData.currentPage + 1) % 3, namingScreenData.unkD); -} - -static void nullsub_20(u8 a, u8 b) -{ -} - -static void sub_80B7838(void); -static void sub_80B7844(void); -static void sub_80B7850(void); - -static void (*const gUnknown_083CE310[][2])(void) = -{ - sub_80B7844, - sub_80B7838, - sub_80B7838, - sub_80B7850, - sub_80B7850, - sub_80B7844, -}; - -static const struct WindowConfig *const gUnknown_083CE328[][2][2] = -{ - { - {&gWindowConfig_81E6EDC, &gWindowConfig_81E6EF8}, - {&gWindowConfig_81E6EA4, &gWindowConfig_81E6EC0}, - }, - { - {&gWindowConfig_81E6EA4, &gWindowConfig_81E6EC0}, - {&gWindowConfig_81E6F14, &gWindowConfig_81E6F30}, - }, - { - {&gWindowConfig_81E6F14, &gWindowConfig_81E6F30}, - {&gWindowConfig_81E6EDC, &gWindowConfig_81E6EF8}, - }, -}; - -static void nullsub_61(void); -static void sub_80B78F8(void); - -static void (*const gUnknown_083CE358[])(void) = -{ - nullsub_61, - nullsub_61, - sub_80B78F8, - sub_80B78F8, -}; - -static void nullsub_62(void); -static void sub_80B7924(void); - -static void (*const gUnknown_083CE368[])(void) = -{ - nullsub_62, - sub_80B7924, -}; - -static const u8 sKeyboardCharacters[][4][20]; //forward declaration - -static u8 GetCharAtKeyboardPos(s16 a, s16 b) -{ - return sKeyboardCharacters[namingScreenData.currentPage][b][a]; -} - -static void sub_80B7794(void) -{ - BasicInitMenuWindow(gUnknown_083CE328[namingScreenData.currentPage][0][namingScreenData.unkC]); - gUnknown_083CE310[namingScreenData.currentPage][0](); - BasicInitMenuWindow(gUnknown_083CE328[namingScreenData.currentPage][1][namingScreenData.unkD]); - gUnknown_083CE310[namingScreenData.currentPage][1](); - sub_80B772C(); - sub_80B7740(); -} - -static void sub_80B77F8(void) -{ - BasicInitMenuWindow(gUnknown_083CE328[namingScreenData.currentPage][1][namingScreenData.unkD]); - gUnknown_083CE310[namingScreenData.currentPage][1](); - sub_80B7740(); -} - -static void sub_80B7838(void) -{ - PrintKeyboardCharacters(1); -} - -static void sub_80B7844(void) -{ - PrintKeyboardCharacters(0); -} - -static void sub_80B7850(void) -{ - PrintKeyboardCharacters(2); -} - -static void PrintKeyboardCharacters(u8 page) //print letters on page -{ - s16 i; - s16 r5; - - for (i = 0, r5 = 9; i < 4; i++, r5 += 2) - MenuPrint(sKeyboardCharacters[page][i], 3, r5); -} - -static void sub_80B78A8(void) -{ - BasicInitMenuWindow(&gWindowConfig_81E6F4C); - gUnknown_083CE358[namingScreenData.templateNum](); - gUnknown_083CE368[namingScreenData.template->unk3](); - MenuPrint(namingScreenData.template->title, 9, 2); -} - -static void nullsub_61(void) -{ -} - -static void sub_80B78F8(void) -{ - StringCopy(gStringVar1, gSpeciesNames[(s16)namingScreenData.unk3E]); -} - -static void nullsub_62(void) -{ -} - -static void sub_80B7924(void) -{ - u8 genderSymbol[2] = _("♂"); - - if ((s16)namingScreenData.unk40 != MON_GENDERLESS) - { - if ((s16)namingScreenData.unk40 == MON_FEMALE) - genderSymbol[0] = 0xB6; //female symbol - MenuPrint(genderSymbol, 0x14, 4); - } -} - -static void sub_80B7960(void) -{ - u8 *string = gStringVar1; - - string[0] = 0xFC; - string[1] = 0x14; - string[2] = 8; - string[3] = 0xFC; - string[4] = 0x11; - string[5] = 1; - string += 6; - StringCopy(string, namingScreenData.textBuffer); - BasicInitMenuWindow(&gWindowConfig_81E6F4C); - MenuPrint(gStringVar1, namingScreenData.unk2, 4); -} - -//-------------------------------------------------- -// Forward-declared variables -//-------------------------------------------------- - -static const struct NamingScreenTemplate playerNamingScreenTemplate = -{ - .unk0 = 0, - .maxChars = 7, - .unk2 = 1, - .unk3 = 0, - .unk4 = 0, - .unk5 = 0, - .unk6 = 0, - .unk7 = 0, - .title = OtherText_YourName, -}; - -static const struct NamingScreenTemplate pcBoxNamingTemplate = -{ - .unk0 = 0, - .maxChars = 8, - .unk2 = 2, - .unk3 = 0, - .unk4 = 0, - .unk5 = 0, - .unk6 = 0, - .unk7 = 0, - .title = OtherText_BoxName, -}; - -static const struct NamingScreenTemplate monNamingScreenTemplate = -{ - .unk0 = 0, - .maxChars = 10, - .unk2 = 3, - .unk3 = 1, - .unk4 = 0, - .unk5 = 0, - .unk6 = 0, - .unk7 = 0, - .title = OtherText_PokeName, -}; - -static const struct NamingScreenTemplate *const sNamingScreenTemplates[] = -{ - &playerNamingScreenTemplate, - &pcBoxNamingTemplate, - &monNamingScreenTemplate, - &monNamingScreenTemplate, -}; - -static const u8 sKeyboardCharacters[][4][20] = -{ -#if ENGLISH - { - _(" A B C D E F . "), - _(" G H I J K L , "), - _(" M N O P Q R S "), - _(" T U V W X Y Z "), - }, - { - _(" a b c d e f . "), - _(" g h i j k l , "), - _(" m n o p q r s "), - _(" t u v w x y z "), - }, -#elif GERMAN - { - _(" ABCD EFGH . "), - _(" IJKL MNOP , "), - _(" QRST UVWX "), - _(" YZ ÄÖÜ "), - }, - { - _(" abcd efgh . "), - _(" ijkl mnop , "), - _(" qrst uvwx "), - _(" yz äöü "), - }, -#endif - { - _(" 0 1 2 3 4 "), - _(" 5 6 7 8 9 "), - _(" ! ? ♂ ♀ / - "), - _(" … “ ” ‘ ’ "), - }, -}; - -const struct OamData gOamData_83CE498 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 0, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; - -const struct OamData gOamData_83CE4A0 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; - -const struct OamData gOamData_83CE4A8 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 1, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; - -//TODO: dump sprite data diff --git a/src/new_game.c b/src/new_game.c deleted file mode 100644 index 226ac9bb7..000000000 --- a/src/new_game.c +++ /dev/null @@ -1,166 +0,0 @@ -#include "global.h" -#include "new_game.h" -#include "battle_records.h" -#include "berry.h" -#include "contest.h" -#include "decoration_inventory.h" -#include "dewford_trend.h" -#include "easy_chat.h" -#include "event_data.h" -#include "field_specials.h" -#include "item_menu.h" -#include "lottery_corner.h" -#include "mail_data.h" -#include "mauville_old_man.h" -#include "play_time.h" -#include "player_pc.h" -#include "pokeblock.h" -#include "pokedex.h" -#include "pokemon_size_record.h" -#include "pokemon_storage_system.h" -#include "rng.h" -#include "roamer.h" -#include "rom4.h" -#include "rtc.h" -#include "script.h" -#include "secret_base.h" -#include "tv.h" - -EWRAM_DATA u8 gDifferentSaveFile = 0; -EWRAM_DATA u8 gUnknown_020297ED = 0; - -extern u8 gPlayerPartyCount; -extern u8 gUnknown_03005CE8; -extern u16 gSaveFileStatus; - -extern u8 gUnknown_0819FA81[]; - -const struct SB1_2EFC_Struct gUnknown_08216604 = -{ - 0x0000, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } -}; - -void write_word_to_mem(u32 var, u8 *dataPtr) -{ - dataPtr[0] = var; - dataPtr[1] = var >> 8; - dataPtr[2] = var >> 16; - dataPtr[3] = var >> 24; -} - -void copy_word_to_mem(u8 *copyTo, u8 *copyFrom) -{ - s32 i; - for (i = 0; i < 4; i++) - copyTo[i] = copyFrom[i]; -} - -void InitPlayerTrainerId(void) -{ - write_word_to_mem((Random() << 16) | Random(), gSaveBlock2.playerTrainerId); -} - -// L=A isnt set here for some reason. -void SetDefaultOptions(void) -{ - gSaveBlock2.optionsTextSpeed = OPTIONS_TEXT_SPEED_MID; - gSaveBlock2.optionsWindowFrameType = 0; - gSaveBlock2.optionsSound = OPTIONS_SOUND_MONO; - gSaveBlock2.optionsBattleStyle = OPTIONS_BATTLE_STYLE_SHIFT; - gSaveBlock2.optionsBattleSceneOff = FALSE; - gSaveBlock2.regionMapZoom = FALSE; -} - -void ClearPokedexFlags(void) -{ - gUnknown_03005CE8 = 0; - memset(&gSaveBlock2.pokedex.owned, 0, sizeof(gSaveBlock2.pokedex.owned)); - memset(&gSaveBlock2.pokedex.seen, 0, sizeof(gSaveBlock2.pokedex.seen)); -} - -void sub_8052DA8(void) -{ - s32 i; - - sub_80B2D1C(); - for (i = 0; i < 5; i++) - gSaveBlock1.sbStruct.unkSB1.sb1_2EFC_struct[i] = gUnknown_08216604; -} - -void sub_8052DE4(void) -{ - CpuFill32(0, &gSaveBlock2.filler_A8, sizeof(gSaveBlock2.filler_A8)); -} - -void WarpToTruck(void) -{ - warp1_set(25, 40, -1, -1, -1); // inside of truck - warp_in(); -} - -void ClearSav2(void) -{ - CpuFill16(0, &gSaveBlock2, sizeof(gSaveBlock2)); - SetDefaultOptions(); -} - -void sub_8052E4C(void) -{ - gDifferentSaveFile = 0; - sub_808C0A0(); - ZeroPlayerPartyMons(); - ZeroEnemyPartyMons(); - ResetBagScrollPositions(); -} - -void NewGameInitData(void) -{ - if (gSaveFileStatus == 0 || gSaveFileStatus == 2) - RtcReset(); - - gDifferentSaveFile = 1; - ZeroPlayerPartyMons(); - ZeroEnemyPartyMons(); - ResetPokedex(); - sub_8052DE4(); - memset(&gSaveBlock1, 0, sizeof(gSaveBlock1)); - ClearMailData(); - gSaveBlock2.specialSaveWarp = 0; - InitPlayerTrainerId(); - PlayTimeCounter_Reset(); - ClearPokedexFlags(); - InitEventData(); - ClearTVShowData(); - ResetGabbyAndTy(); - ResetSecretBases(); - ClearBerryTrees(); - gSaveBlock1.money = 3000; - ResetLinkContestBoolean(); - ResetGameStats(); - sub_8052DA8(); - InitLinkBattleRecords(); - InitShroomishSizeRecord(); - InitBarboachSizeRecord(); - gPlayerPartyCount = 0; - ZeroPlayerPartyMons(); - ResetPokemonStorageSystem(); - ClearRoamerData(); - ClearRoamerLocationData(); - gSaveBlock1.registeredItem = 0; - ClearBag(); - NewGameInitPCItems(); - ClearPokeblocks(); - ClearDecorationInventories(); - InitEasyChatPhrases(); - SetMauvilleOldMan(); - InitDewfordTrend(); - ResetFanClub(); - ResetLotteryCorner(); - WarpToTruck(); - ScriptContext2_RunNewScript(gUnknown_0819FA81); -} diff --git a/src/option_menu.c b/src/option_menu.c deleted file mode 100644 index 7f8d76528..000000000 --- a/src/option_menu.c +++ /dev/null @@ -1,579 +0,0 @@ -#include "global.h" -#include "option_menu.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "sprite.h" -#include "strings2.h" -#include "task.h" - -extern void SetPokemonCryStereo(u32 val); -extern void remove_some_task(void); - -//Task data -enum { - TD_MENUSELECTION, - TD_TEXTSPEED, - TD_BATTLESCENE, - TD_BATTLESTYLE, - TD_SOUND, - TD_BUTTONMODE, - TD_FRAMETYPE, -}; - -//Menu items -enum { - MENUITEM_TEXTSPEED, - MENUITEM_BATTLESCENE, - MENUITEM_BATTLESTYLE, - MENUITEM_SOUND, - MENUITEM_BUTTONMODE, - MENUITEM_FRAMETYPE, - MENUITEM_CANCEL, -}; - -const u16 gUnknown_0839F5FC[] = INCBIN_U16("graphics/misc/option_menu_text.gbapal"); -// note: this is only used in the Japanese release -const u8 gUnknown_0839F63C[] = INCBIN_U8("graphics/misc/option_menu_equals_sign.4bpp"); - -static void Task_OptionMenuFadeIn(u8 taskId); -static void Task_OptionMenuProcessInput(u8 taskId); -static void Task_OptionMenuSave(u8 taskId); -static void Task_OptionMenuFadeOut(u8 taskId); -static void HighlightOptionMenuItem(u8 selection); -static u8 TextSpeed_ProcessInput(u8 selection); -static void TextSpeed_DrawChoices(u8 selection); -static u8 BattleScene_ProcessInput(u8 selection); -static void BattleScene_DrawChoices(u8 selection); -static u8 BattleStyle_ProcessInput(u8 selection); -static void BattleStyle_DrawChoices(u8 selection); -static u8 Sound_ProcessInput(u8 selection); -static void Sound_DrawChoices(u8 selection); -static u8 FrameType_ProcessInput(u8 selection); -static void FrameType_DrawChoices(u8 selection); -static u8 ButtonMode_ProcessInput(u8 selection); -static void ButtonMode_DrawChoices(u8 selection); - -static void MainCB(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void VBlankCB(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -void CB2_InitOptionMenu(void) -{ - switch (gMain.state) - { - default: - case 0: - { - u8 *addr; - u32 size; - - SetVBlankCallback(NULL); - REG_DISPCNT = 0; - REG_BG2CNT = 0; - REG_BG1CNT = 0; - REG_BG0CNT = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - addr = (u8 *)VRAM; - size = 0x18000; - while (1) - { - DmaFill16(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill16(3, 0, addr, size); - break; - } - } - DmaClear32(3, OAM, OAM_SIZE); - DmaClear16(3, PLTT, PLTT_SIZE); - gMain.state++; - break; - } - case 1: - ResetPaletteFade(); - remove_some_task(); - ResetTasks(); - ResetSpriteData(); - gMain.state++; - break; - case 2: - SetUpWindowConfig(&gWindowConfig_81E71B4); - gMain.state++; - break; - case 3: - MultistepInitMenuWindowBegin(&gWindowConfig_81E71B4); - gMain.state++; - break; - case 4: - if (!MultistepInitMenuWindowContinue()) - return; - gMain.state++; - break; - case 5: - LoadPalette(gUnknown_0839F5FC, 0x80, 0x40); - CpuCopy16(gUnknown_0839F63C, (void *)0x0600BEE0, 0x40); - gMain.state++; - break; - case 6: - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - gMain.state++; - break; - case 7: - { - u16 savedIme; - - REG_WIN0H = 0; - REG_WIN0V = 0; - REG_WIN1H = 0; - REG_WIN1V = 0; - REG_WININ = 0x1111; - REG_WINOUT = 0x31; - REG_BLDCNT = 0xE1; - REG_BLDALPHA = 0; - REG_BLDY = 7; - savedIme = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = savedIme; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - SetVBlankCallback(VBlankCB); - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_OBJ_ON | - DISPCNT_WIN0_ON | DISPCNT_WIN1_ON; - gMain.state++; - break; - } - case 8: - { - u8 taskId = CreateTask(Task_OptionMenuFadeIn, 0); - - gTasks[taskId].data[TD_MENUSELECTION] = 0; - gTasks[taskId].data[TD_TEXTSPEED] = gSaveBlock2.optionsTextSpeed; - gTasks[taskId].data[TD_BATTLESCENE] = gSaveBlock2.optionsBattleSceneOff; - gTasks[taskId].data[TD_BATTLESTYLE] = gSaveBlock2.optionsBattleStyle; - gTasks[taskId].data[TD_SOUND] = gSaveBlock2.optionsSound; - gTasks[taskId].data[TD_BUTTONMODE] = gSaveBlock2.optionsButtonMode; - gTasks[taskId].data[TD_FRAMETYPE] = gSaveBlock2.optionsWindowFrameType; - - MenuDrawTextWindow(2, 0, 27, 3); - MenuDrawTextWindow(2, 4, 27, 19); - - MenuPrint(gSystemText_OptionMenu, 4, 1); - MenuPrint(gSystemText_TextSpeed, 4, 5); - MenuPrint(gSystemText_BattleScene, 4, 7); - MenuPrint(gSystemText_BattleStyle, 4, 9); - MenuPrint(gSystemText_Sound, 4, 11); - MenuPrint(gSystemText_ButtonMode, 4, 13); - MenuPrint(gSystemText_Frame, 4, 15); - MenuPrint(gSystemText_Cancel, 4, 17); - - TextSpeed_DrawChoices(gTasks[taskId].data[TD_TEXTSPEED]); - BattleScene_DrawChoices(gTasks[taskId].data[TD_BATTLESCENE]); - BattleStyle_DrawChoices(gTasks[taskId].data[TD_BATTLESTYLE]); - Sound_DrawChoices(gTasks[taskId].data[TD_SOUND]); - ButtonMode_DrawChoices(gTasks[taskId].data[TD_BUTTONMODE]); - FrameType_DrawChoices(gTasks[taskId].data[TD_FRAMETYPE]); - - REG_WIN0H = WIN_RANGE(17, 223); - REG_WIN0V = WIN_RANGE(1, 31); - - HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); - gMain.state++; - break; - } - case 9: - SetMainCallback2(MainCB); - return; - } -} - -static void Task_OptionMenuFadeIn(u8 taskId) -{ - if (!gPaletteFade.active) - { - gTasks[taskId].func = Task_OptionMenuProcessInput; - } -} - -static void Task_OptionMenuProcessInput(u8 taskId) -{ - if (gMain.newKeys & A_BUTTON) - { - if (gTasks[taskId].data[TD_MENUSELECTION] == MENUITEM_CANCEL) - gTasks[taskId].func = Task_OptionMenuSave; - } - else if (gMain.newKeys & B_BUTTON) - { - gTasks[taskId].func = Task_OptionMenuSave; - } - else if (gMain.newKeys & DPAD_UP) - { - if (gTasks[taskId].data[TD_MENUSELECTION] > 0) - gTasks[taskId].data[TD_MENUSELECTION]--; - else - gTasks[taskId].data[TD_MENUSELECTION] = 6; - HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); - } - else if (gMain.newKeys & DPAD_DOWN) - { - if (gTasks[taskId].data[TD_MENUSELECTION] <= 5) - gTasks[taskId].data[TD_MENUSELECTION]++; - else - gTasks[taskId].data[TD_MENUSELECTION] = 0; - HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); - } - else - { - switch (gTasks[taskId].data[TD_MENUSELECTION]) - { - case MENUITEM_TEXTSPEED: - gTasks[taskId].data[TD_TEXTSPEED] = TextSpeed_ProcessInput(gTasks[taskId].data[TD_TEXTSPEED]); - TextSpeed_DrawChoices(gTasks[taskId].data[TD_TEXTSPEED]); - break; - case MENUITEM_BATTLESCENE: - gTasks[taskId].data[TD_BATTLESCENE] = BattleScene_ProcessInput(gTasks[taskId].data[TD_BATTLESCENE]); - BattleScene_DrawChoices(gTasks[taskId].data[TD_BATTLESCENE]); - break; - case MENUITEM_BATTLESTYLE: - gTasks[taskId].data[TD_BATTLESTYLE] = BattleStyle_ProcessInput(gTasks[taskId].data[TD_BATTLESTYLE]); - BattleStyle_DrawChoices(gTasks[taskId].data[TD_BATTLESTYLE]); - break; - case MENUITEM_SOUND: - gTasks[taskId].data[TD_SOUND] = Sound_ProcessInput(gTasks[taskId].data[TD_SOUND]); - Sound_DrawChoices(gTasks[taskId].data[TD_SOUND]); - break; - case MENUITEM_BUTTONMODE: - gTasks[taskId].data[TD_BUTTONMODE] = ButtonMode_ProcessInput(gTasks[taskId].data[TD_BUTTONMODE]); - ButtonMode_DrawChoices(gTasks[taskId].data[TD_BUTTONMODE]); - break; - case MENUITEM_FRAMETYPE: - gTasks[taskId].data[TD_FRAMETYPE] = FrameType_ProcessInput(gTasks[taskId].data[TD_FRAMETYPE]); - FrameType_DrawChoices(gTasks[taskId].data[TD_FRAMETYPE]); - break; - } - } -} - -static void Task_OptionMenuSave(u8 taskId) -{ - gSaveBlock2.optionsTextSpeed = gTasks[taskId].data[TD_TEXTSPEED]; - gSaveBlock2.optionsBattleSceneOff = gTasks[taskId].data[TD_BATTLESCENE]; - gSaveBlock2.optionsBattleStyle = gTasks[taskId].data[TD_BATTLESTYLE]; - gSaveBlock2.optionsSound = gTasks[taskId].data[TD_SOUND]; - gSaveBlock2.optionsButtonMode = gTasks[taskId].data[TD_BUTTONMODE]; - gSaveBlock2.optionsWindowFrameType = gTasks[taskId].data[TD_FRAMETYPE]; - - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gTasks[taskId].func = Task_OptionMenuFadeOut; -} - -static void Task_OptionMenuFadeOut(u8 taskId) -{ - if (!gPaletteFade.active) - { - DestroyTask(taskId); - SetMainCallback2(gMain.savedCallback); - } -} - -//This version uses addition '+' instead of OR '|'. -#define WIN_RANGE_(a, b) (((a) << 8) + (b)) - -static void HighlightOptionMenuItem(u8 index) -{ - REG_WIN1H = WIN_RANGE(24, 215); - REG_WIN1V = WIN_RANGE_(index * 16 + 40, index * 16 + 56); -} - -static void DrawOptionMenuChoice(const u8 *text, u8 x, u8 y, u8 style) -{ - u8 dst[16]; - u16 i; - - for (i = 0; *text != EOS && i <= 14; i++) - dst[i] = *(text++); - - dst[2] = style; - dst[i] = EOS; - MenuPrint_PixelCoords(dst, x, y, 1); -} - -static u8 TextSpeed_ProcessInput(u8 selection) -{ - if (gMain.newKeys & DPAD_RIGHT) - { - if (selection <= 1) - selection++; - else - selection = 0; - } - if (gMain.newKeys & DPAD_LEFT) - { - if (selection != 0) - selection--; - else - selection = 2; - } - return selection; -} - -#if ENGLISH -#define TEXTSPEED_SLOW_LEFT (120) -#define TEXTSPEED_MIX_LEFT (155) -#define TEXTSPEED_FAST_LEFT (184) -#endif -#if GERMAN -#define TEXTSPEED_SLOW_LEFT (120) -#define TEXTSPEED_MIX_LEFT (161) -#define TEXTSPEED_FAST_LEFT (202) -#endif - -static void TextSpeed_DrawChoices(u8 selection) -{ - u8 styles[3]; - - styles[0] = 0xF; - styles[1] = 0xF; - styles[2] = 0xF; - styles[selection] = 0x8; - - DrawOptionMenuChoice(gSystemText_Slow, TEXTSPEED_SLOW_LEFT, 40, styles[0]); - DrawOptionMenuChoice(gSystemText_Mid, TEXTSPEED_MIX_LEFT, 40, styles[1]); - DrawOptionMenuChoice(gSystemText_Fast, TEXTSPEED_FAST_LEFT, 40, styles[2]); -} - -static u8 BattleScene_ProcessInput(u8 selection) -{ - if (gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) - selection ^= 1; - return selection; -} - -static void BattleScene_DrawChoices(u8 selection) -{ - u8 styles[2]; - - styles[0] = 0xF; - styles[1] = 0xF; - styles[selection] = 0x8; - - DrawOptionMenuChoice(gSystemText_On, 120, 56, styles[0]); - DrawOptionMenuChoice(gSystemText_Off, 190, 56, styles[1]); -} - -static u8 BattleStyle_ProcessInput(u8 selection) -{ - if (gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) - selection ^= 1; - return selection; -} - -#if ENGLISH -#define BATTLESTYLE_SHIFT (120) -#define BATTLESTYLE_SET (190) -#elif GERMAN -#define BATTLESTYLE_SHIFT (120) -#define BATTLESTYLE_SET (178) -#endif - -static void BattleStyle_DrawChoices(u8 selection) -{ - u8 styles[2]; - - styles[0] = 0xF; - styles[1] = 0xF; - styles[selection] = 0x8; - - DrawOptionMenuChoice(gSystemText_Shift, BATTLESTYLE_SHIFT, 72, styles[0]); - DrawOptionMenuChoice(gSystemText_Set, BATTLESTYLE_SET, 72, styles[1]); -} - -static u8 Sound_ProcessInput(u8 selection) -{ - if (gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) - { - selection ^= 1; - SetPokemonCryStereo(selection); - } - return selection; -} - -static void Sound_DrawChoices(u8 selection) -{ - u8 styles[3]; - - styles[0] = 0xF; - styles[1] = 0xF; - styles[selection] = 0x8; - - DrawOptionMenuChoice(gSystemText_Mono, 120, 88, styles[0]); - DrawOptionMenuChoice(gSystemText_Stereo, 172, 88, styles[1]); -} - -static u8 FrameType_ProcessInput(u8 selection) -{ - if (gMain.newKeys & DPAD_RIGHT) - { - if (selection <= 18) - selection++; - else - selection = 0; - MenuLoadTextWindowGraphics_OverrideFrameType(selection); - } - if (gMain.newKeys & DPAD_LEFT) - { - if (selection != 0) - selection--; - else - selection = 19; - MenuLoadTextWindowGraphics_OverrideFrameType(selection); - } - return selection; -} - -#define CHAR_0 0xA1 //Character code of '0' character - -#if ENGLISH -static void FrameType_DrawChoices(u8 selection) -{ - u8 text[8]; - u8 n = selection + 1; - u16 i; - - for (i = 0; gSystemText_Terminator[i] != EOS && i <= 5; i++) - text[i] = gSystemText_Terminator[i]; - - //Convert number to decimal string - if (n / 10 != 0) - { - text[i] = n / 10 + CHAR_0; - i++; - text[i] = n % 10 + CHAR_0; - i++; - } - else - { - text[i] = n % 10 + CHAR_0; - i++; - text[i] = CHAR_SPACE; - i++; - } - - text[i] = EOS; - MenuPrint(gSystemText_Type, 15, 15); - MenuPrint(text, 18, 15); -} -#elif GERMAN -__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\ -_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\ -_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\ - .syntax divided\n"); -} -#endif - -static u8 ButtonMode_ProcessInput(u8 selection) -{ - if (gMain.newKeys & DPAD_RIGHT) - { - if (selection <= 1) - selection++; - else - selection = 0; - } - if (gMain.newKeys & DPAD_LEFT) - { - if (selection != 0) - selection--; - else - selection = 2; - } - return selection; -} - -static void ButtonMode_DrawChoices(u8 selection) -{ - u8 styles[3]; - - styles[0] = 0xF; - styles[1] = 0xF; - styles[2] = 0xF; - styles[selection] = 0x8; - - DrawOptionMenuChoice(gSystemText_Normal, 120, 104, styles[0]); - DrawOptionMenuChoice(gSystemText_LR, 166, 104, styles[1]); - DrawOptionMenuChoice(gSystemText_LA, 188, 104, styles[2]); -} diff --git a/src/palette.c b/src/palette.c deleted file mode 100644 index 94a4f8092..000000000 --- a/src/palette.c +++ /dev/null @@ -1,834 +0,0 @@ -#include "global.h" -#include "palette.h" -#include "blend_palette.h" -#include "decompress.h" - -enum -{ - NORMAL_FADE, - FAST_FADE, - HARDWARE_FADE, -}; - -// These are structs for some unused palette system. -// The full functionality of this system is unknown. - -struct PaletteStructTemplate -{ - u16 uid; - u16 *src; - u16 pst_field_8_0:1; - u16 pst_field_8_1:9; - u16 size:5; - u16 pst_field_9_7:1; - u8 pst_field_A; - u8 srcCount:5; - u8 pst_field_B_5:3; - u8 pst_field_C; -}; - -struct PaletteStruct -{ - const struct PaletteStructTemplate *base; - u32 ps_field_4_0:1; - u16 ps_field_4_1:1; - u32 baseDestOffset:9; - u16 destOffset:10; - u16 srcIndex:7; - u8 ps_field_8; - u8 ps_field_9; -}; - -EWRAM_DATA u16 gPlttBufferUnfaded[0x200] = {0}; -EWRAM_DATA u16 gPlttBufferFaded[0x200] = {0}; -EWRAM_DATA static struct PaletteStruct sPaletteStructs[0x10] = {0}; -EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; -EWRAM_DATA u32 gFiller_202F394 = 0; -EWRAM_DATA static u32 sPlttBufferTransferPending = 0; -EWRAM_DATA static u8 sPaletteDecompressionBuffer[0x400] = {0}; - -static const struct PaletteStructTemplate sDummyPaletteStructTemplate = -{ - 0xFFFF, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0 -}; - -static void unused_sub_8073DFC(struct PaletteStruct *, u32 *); -static void unused_sub_8073F60(struct PaletteStruct *, u32 *); -static void unused_sub_8074020(struct PaletteStruct *); -static u8 GetPaletteNumByUid(u16); -static u8 UpdateNormalPaletteFade(void); -static void BeginFastPaletteFadeInternal(u8); -static u8 UpdateFastPaletteFade(void); -static u8 UpdateHardwarePaletteFade(void); -static void UpdateBlendRegisters(void); -static bool8 IsSoftwarePaletteFadeFinishing(void); - -void LoadCompressedPalette(const void *src, u16 offset, u16 size) -{ - sub_800D238(src, sPaletteDecompressionBuffer); - CpuCopy16(sPaletteDecompressionBuffer, gPlttBufferUnfaded + offset, size); - CpuCopy16(sPaletteDecompressionBuffer, gPlttBufferFaded + offset, size); -} - -void LoadPalette(const void *src, u16 offset, u16 size) -{ - CpuCopy16(src, gPlttBufferUnfaded + offset, size); - CpuCopy16(src, gPlttBufferFaded + offset, size); -} - -void FillPalette(u16 value, u16 offset, u16 size) -{ - CpuFill16(value, gPlttBufferUnfaded + offset, size); - CpuFill16(value, gPlttBufferFaded + offset, size); -} - -void TransferPlttBuffer(void) -{ - if (!gPaletteFade.bufferTransferDisabled) - { - void *src = gPlttBufferFaded; - void *dest = (void *)PLTT; - DmaCopy16(3, src, dest, PLTT_SIZE); - sPlttBufferTransferPending = 0; - if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active) - UpdateBlendRegisters(); - } -} - -u8 UpdatePaletteFade(void) -{ - u8 result; - u8 dummy = 0; - - if (sPlttBufferTransferPending) - return -1; - - if (gPaletteFade.mode == NORMAL_FADE) - result = UpdateNormalPaletteFade(); - else if (gPaletteFade.mode == FAST_FADE) - result = UpdateFastPaletteFade(); - else - result = UpdateHardwarePaletteFade(); - - sPlttBufferTransferPending = gPaletteFade.multipurpose1 | dummy; - - return result; -} - -void ResetPaletteFade(void) -{ - u8 i; - - for (i = 0; i < 16; i++) - ResetPaletteStruct(i); - - ResetPaletteFadeControl(); -} - -void ReadPlttIntoBuffers(void) -{ - u16 i; - u16 *pltt = (u16 *)PLTT; - - for (i = 0; i < PLTT_SIZE / 2; i++) - { - gPlttBufferUnfaded[i] = pltt[i]; - gPlttBufferFaded[i] = pltt[i]; - } -} - -bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor) -{ - u8 temp; - register u32 _blendColor asm("r8") = blendColor; - - if (gPaletteFade.active) - { - return FALSE; - } - else - { - gPaletteFade.deltaY = 2; - - if (delay < 0) - { - gPaletteFade.deltaY += (delay * -1); - delay = 0; - } - - gPaletteFade_selectedPalettes = selectedPalettes; - gPaletteFade.delayCounter = delay; - gPaletteFade_delay = delay; - gPaletteFade.y = startY; - gPaletteFade.targetY = targetY; - gPaletteFade.blendColor = _blendColor; - gPaletteFade.active = 1; - gPaletteFade.mode = NORMAL_FADE; - - if (startY < targetY) - gPaletteFade.yDec = 0; - else - gPaletteFade.yDec = 1; - - UpdatePaletteFade(); - - temp = gPaletteFade.bufferTransferDisabled; - gPaletteFade.bufferTransferDisabled = 0; - CpuCopy32(gPlttBufferFaded, (void *)PLTT, PLTT_SIZE); - sPlttBufferTransferPending = 0; - if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active) - UpdateBlendRegisters(); - gPaletteFade.bufferTransferDisabled = temp; - return TRUE; - } -} - -bool8 unref_sub_8073D3C(u32 a1, u8 a2, u8 a3, u8 a4, u16 a5) -{ - ReadPlttIntoBuffers(); - return BeginNormalPaletteFade(a1, a2, a3, a4, a5); -} - -void unref_sub_8073D84(u8 a1, u32 *a2) -{ - u8 i; - - for (i = 0; i < 16; i++) - { - struct PaletteStruct *palstruct = &sPaletteStructs[i]; - if (palstruct->ps_field_4_0) - { - if (palstruct->base->pst_field_8_0 == a1) - { - u8 val1 = palstruct->srcIndex; - u8 val2 = palstruct->base->srcCount; - if (val1 == val2) - { - unused_sub_8074020(palstruct); - if (!palstruct->ps_field_4_0) - continue; - } - if (palstruct->ps_field_8 == 0) - unused_sub_8073DFC(palstruct, a2); - else - palstruct->ps_field_8--; - - unused_sub_8073F60(palstruct, a2); - } - } - } -} - -static void unused_sub_8073DFC(struct PaletteStruct *a1, u32 *a2) -{ - s32 srcIndex; - s32 srcCount; - u8 i = 0; - u16 srcOffset = a1->srcIndex * a1->base->size; - - if (!a1->base->pst_field_8_0) - { - while (i < a1->base->size) - { - gPlttBufferUnfaded[a1->destOffset] = a1->base->src[srcOffset]; - gPlttBufferFaded[a1->destOffset] = a1->base->src[srcOffset]; - i++; - a1->destOffset++; - srcOffset++; - } - } - else - { - while (i < a1->base->size) - { - gPlttBufferFaded[a1->destOffset] = a1->base->src[srcOffset]; - i++; - a1->destOffset++; - srcOffset++; - } - } - - a1->destOffset = a1->baseDestOffset; - a1->ps_field_8 = a1->base->pst_field_A; - a1->srcIndex++; - - srcIndex = a1->srcIndex; - srcCount = a1->base->srcCount; - - if (srcIndex >= srcCount) - { - if (a1->ps_field_9) - a1->ps_field_9--; - a1->srcIndex = 0; - } - - *a2 |= 1 << (a1->baseDestOffset >> 4); -} - -static void unused_sub_8073F60(struct PaletteStruct *a1, u32 *a2) -{ - if (gPaletteFade.active && ((1 << (a1->baseDestOffset >> 4)) & gPaletteFade_selectedPalettes)) - { - if (!a1->base->pst_field_8_0) - { - if (gPaletteFade.delayCounter != gPaletteFade_delay) - { - BlendPalette( - a1->baseDestOffset, - a1->base->size, - gPaletteFade.y, - gPaletteFade.blendColor); - } - } - else - { - if (!gPaletteFade.delayCounter) - { - if (a1->ps_field_8 != a1->base->pst_field_A) - { - u32 srcOffset = a1->srcIndex * a1->base->size; - u8 i; - - for (i = 0; i < a1->base->size; i++) - gPlttBufferFaded[a1->baseDestOffset + i] = a1->base->src[srcOffset + i]; - } - } - } - } -} - -static void unused_sub_8074020(struct PaletteStruct *a1) -{ - if (!a1->ps_field_9) - { - s32 val = a1->base->pst_field_B_5; - - if (!val) - { - a1->srcIndex = 0; - a1->ps_field_8 = a1->base->pst_field_A; - a1->ps_field_9 = a1->base->pst_field_C; - a1->destOffset = a1->baseDestOffset; - } - else - { - if (val < 0) - return; - if (val > 2) - return; - ResetPaletteStructByUid(a1->base->uid); - } - } - else - { - a1->ps_field_9--; - } -} - -void ResetPaletteStructByUid(u16 a1) -{ - u8 paletteNum = GetPaletteNumByUid(a1); - if (paletteNum != 16) - ResetPaletteStruct(paletteNum); -} - -void ResetPaletteStruct(u8 paletteNum) -{ - sPaletteStructs[paletteNum].base = &sDummyPaletteStructTemplate; - sPaletteStructs[paletteNum].ps_field_4_0 = 0; - sPaletteStructs[paletteNum].baseDestOffset = 0; - sPaletteStructs[paletteNum].destOffset = 0; - sPaletteStructs[paletteNum].srcIndex = 0; - sPaletteStructs[paletteNum].ps_field_4_1 = 0; - sPaletteStructs[paletteNum].ps_field_8 = 0; - sPaletteStructs[paletteNum].ps_field_9 = 0; -} - -void ResetPaletteFadeControl() -{ - gPaletteFade.multipurpose1 = 0; - gPaletteFade.multipurpose2 = 0; - gPaletteFade.delayCounter = 0; - gPaletteFade.y = 0; - gPaletteFade.targetY = 0; - gPaletteFade.blendColor = 0; - gPaletteFade.active = 0; - gPaletteFade.multipurpose2 = 0; // assign same value twice - gPaletteFade.yDec = 0; - gPaletteFade.bufferTransferDisabled = 0; - gPaletteFade.shouldResetBlendRegisters = 0; - gPaletteFade.hardwareFadeFinishing = 0; - gPaletteFade.softwareFadeFinishing = 0; - gPaletteFade.softwareFadeFinishingCounter = 0; - gPaletteFade.objPaletteToggle = 0; - gPaletteFade.deltaY = 2; -} - -void unref_sub_8074168(u16 uid) -{ - u8 paletteNum = GetPaletteNumByUid(uid); - if (paletteNum != 16) - sPaletteStructs[paletteNum].ps_field_4_1 = 1; -} - -void unref_sub_8074194(u16 uid) -{ - u8 paletteNum = GetPaletteNumByUid(uid); - if (paletteNum != 16) - sPaletteStructs[paletteNum].ps_field_4_1 = 0; -} - -static u8 GetPaletteNumByUid(u16 uid) -{ - u8 i; - - for (i = 0; i < 16; i++) - if (sPaletteStructs[i].base->uid == uid) - return i; - - return 16; -} - -static u8 UpdateNormalPaletteFade() -{ - u16 paletteOffset; - u16 selectedPalettes; - - if (!gPaletteFade.active) - return 0; - - if (IsSoftwarePaletteFadeFinishing()) - { - return gPaletteFade.active; - } - else - { - if (!gPaletteFade.objPaletteToggle) - { - if (gPaletteFade.delayCounter < gPaletteFade_delay) - { - gPaletteFade.delayCounter++; - return 2; - } - gPaletteFade.delayCounter = 0; - } - - paletteOffset = 0; - - if (!gPaletteFade.objPaletteToggle) - { - selectedPalettes = gPaletteFade_selectedPalettes; - } - else - { - selectedPalettes = gPaletteFade_selectedPalettes >> 16; - paletteOffset = 256; - } - - while (selectedPalettes) - { - if (selectedPalettes & 1) - BlendPalette( - paletteOffset, - 16, - gPaletteFade.y, - gPaletteFade.blendColor); - selectedPalettes >>= 1; - paletteOffset += 16; - } - - gPaletteFade.objPaletteToggle ^= 1; - - if (!gPaletteFade.objPaletteToggle) - { - if (gPaletteFade.y == gPaletteFade.targetY) - { - gPaletteFade_selectedPalettes = 0; - gPaletteFade.softwareFadeFinishing = 1; - } - else - { - s8 val; - - if (!gPaletteFade.yDec) - { - val = gPaletteFade.y; - val += gPaletteFade.deltaY; - if (val > gPaletteFade.targetY) - val = gPaletteFade.targetY; - gPaletteFade.y = val; - } - else - { - val = gPaletteFade.y; - val -= gPaletteFade.deltaY; - if (val < gPaletteFade.targetY) - val = gPaletteFade.targetY; - gPaletteFade.y = val; - } - } - } - - return gPaletteFade.active; - } -} - -void InvertPlttBuffer(u32 selectedPalettes) -{ - u16 paletteOffset = 0; - - while (selectedPalettes) - { - if (selectedPalettes & 1) - { - u8 i; - for (i = 0; i < 16; i++) - gPlttBufferFaded[paletteOffset + i] = ~gPlttBufferFaded[paletteOffset + i]; - } - selectedPalettes >>= 1; - paletteOffset += 16; - } -} - -void TintPlttBuffer(u32 selectedPalettes, s8 r, s8 g, s8 b) -{ - u16 paletteOffset = 0; - - while (selectedPalettes) - { - if (selectedPalettes & 1) - { - u8 i; - for (i = 0; i < 16; i++) - { - struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[paletteOffset + i]; - data->r += r; - data->g += g; - data->b += b; - } - } - selectedPalettes >>= 1; - paletteOffset += 16; - } -} - -void UnfadePlttBuffer(u32 selectedPalettes) -{ - u16 paletteOffset = 0; - - while (selectedPalettes) - { - if (selectedPalettes & 1) - { - u8 i; - for (i = 0; i < 16; i++) - gPlttBufferFaded[paletteOffset + i] = gPlttBufferUnfaded[paletteOffset + i]; - } - selectedPalettes >>= 1; - paletteOffset += 16; - } -} - -void BeginFastPaletteFade(u8 submode) -{ - gPaletteFade.deltaY = 2; - BeginFastPaletteFadeInternal(submode); -} - -static void BeginFastPaletteFadeInternal(u8 submode) -{ - gPaletteFade.y = 31; - gPaletteFade_submode = submode & 0x3F; - gPaletteFade.active = 1; - gPaletteFade.mode = FAST_FADE; - - if (submode == FAST_FADE_IN_FROM_BLACK) - CpuFill16(RGB_BLACK, gPlttBufferFaded, PLTT_SIZE); - - if (submode == FAST_FADE_IN_FROM_WHITE) - CpuFill16(RGB_WHITE, gPlttBufferFaded, PLTT_SIZE); - - UpdatePaletteFade(); -} - -static u8 UpdateFastPaletteFade(void) -{ - u16 i; - u16 paletteOffsetStart; - u16 paletteOffsetEnd; - s8 r0; - s8 g0; - s8 b0; - s8 r; - s8 g; - s8 b; - - if (!gPaletteFade.active) - return 0; - - if (IsSoftwarePaletteFadeFinishing()) - return gPaletteFade.active; - - if (gPaletteFade.objPaletteToggle) - { - paletteOffsetStart = 256; - paletteOffsetEnd = 512; - } - else - { - paletteOffsetStart = 0; - paletteOffsetEnd = 256; - } - - switch (gPaletteFade_submode) - { - case FAST_FADE_IN_FROM_WHITE: - for (i = paletteOffsetStart; i < paletteOffsetEnd; i++) - { - struct PlttData *unfaded; - struct PlttData *faded; - - unfaded = (struct PlttData *)&gPlttBufferUnfaded[i]; - r0 = unfaded->r; - g0 = unfaded->g; - b0 = unfaded->b; - - faded = (struct PlttData *)&gPlttBufferFaded[i]; - r = faded->r - 2; - g = faded->g - 2; - b = faded->b - 2; - - if (r < r0) - r = r0; - if (g < g0) - g = g0; - if (b < b0) - b = b0; - - gPlttBufferFaded[i] = RGB(r, g, b); - } - break; - case FAST_FADE_OUT_TO_WHTIE: - for (i = paletteOffsetStart; i < paletteOffsetEnd; i++) - { - struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[i]; - r = data->r + 2; - g = data->g + 2; - b = data->b + 2; - - if (r > 31) - r = 31; - if (g > 31) - g = 31; - if (b > 31) - b = 31; - - gPlttBufferFaded[i] = RGB(r, g, b); - } - break; - case FAST_FADE_IN_FROM_BLACK: - for (i = paletteOffsetStart; i < paletteOffsetEnd; i++) - { - struct PlttData *unfaded; - struct PlttData *faded; - - unfaded = (struct PlttData *)&gPlttBufferUnfaded[i]; - r0 = unfaded->r; - g0 = unfaded->g; - b0 = unfaded->b; - - faded = (struct PlttData *)&gPlttBufferFaded[i]; - r = faded->r + 2; - g = faded->g + 2; - b = faded->b + 2; - - if (r > r0) - r = r0; - if (g > g0) - g = g0; - if (b > b0) - b = b0; - - gPlttBufferFaded[i] = RGB(r, g, b); - } - break; - case FAST_FADE_OUT_TO_BLACK: - for (i = paletteOffsetStart; i < paletteOffsetEnd; i++) - { - struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[i]; - r = data->r - 2; - g = data->g - 2; - b = data->b - 2; - - if (r < 0) - r = 0; - if (g < 0) - g = 0; - if (b < 0) - b = 0; - - gPlttBufferFaded[i] = RGB(r, g, b); - } - } - - gPaletteFade.objPaletteToggle ^= 1; - - if (gPaletteFade.objPaletteToggle) - return gPaletteFade.active; - - if (gPaletteFade.y - gPaletteFade.deltaY < 0) - gPaletteFade.y = 0; - else - gPaletteFade.y -= gPaletteFade.deltaY; - - if (gPaletteFade.y == 0) - { - switch (gPaletteFade_submode) - { - case FAST_FADE_IN_FROM_WHITE: - case FAST_FADE_IN_FROM_BLACK: - CpuCopy32(gPlttBufferUnfaded, gPlttBufferFaded, PLTT_SIZE); - break; - case FAST_FADE_OUT_TO_WHTIE: - CpuFill32(0xFFFFFFFF, gPlttBufferFaded, PLTT_SIZE); - break; - case FAST_FADE_OUT_TO_BLACK: - CpuFill32(0x00000000, gPlttBufferFaded, PLTT_SIZE); - break; - } - - gPaletteFade.mode = NORMAL_FADE; - gPaletteFade.softwareFadeFinishing = 1; - } - - return gPaletteFade.active; -} - -void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 shouldResetBlendRegisters) -{ - gPaletteFade_blendCnt = blendCnt; - gPaletteFade.delayCounter = delay; - gPaletteFade_delay = delay; - gPaletteFade.y = y; - gPaletteFade.targetY = targetY; - gPaletteFade.active = 1; - gPaletteFade.mode = HARDWARE_FADE; - gPaletteFade.shouldResetBlendRegisters = shouldResetBlendRegisters & 1; - gPaletteFade.hardwareFadeFinishing = 0; - - if (y < targetY) - gPaletteFade.yDec = 0; - else - gPaletteFade.yDec = 1; -} - -static u8 UpdateHardwarePaletteFade(void) -{ - if (!gPaletteFade.active) - return 0; - - if (gPaletteFade.delayCounter < gPaletteFade_delay) - { - gPaletteFade.delayCounter++; - return 2; - } - - gPaletteFade.delayCounter = 0; - - if (!gPaletteFade.yDec) - { - gPaletteFade.y++; - if (gPaletteFade.y > gPaletteFade.targetY) - { - gPaletteFade.hardwareFadeFinishing++; - gPaletteFade.y--; - } - } - else - { - s32 y = gPaletteFade.y--; - if (y - 1 < gPaletteFade.targetY) - { - gPaletteFade.hardwareFadeFinishing++; - gPaletteFade.y++; - } - } - - if (gPaletteFade.hardwareFadeFinishing) - { - if (gPaletteFade.shouldResetBlendRegisters) - { - gPaletteFade_blendCnt = 0; - gPaletteFade.y = 0; - } - gPaletteFade.shouldResetBlendRegisters = 0; - } - - return gPaletteFade.active; -} - -static void UpdateBlendRegisters(void) -{ - REG_BLDCNT = gPaletteFade_blendCnt; - REG_BLDY = gPaletteFade.y; - if (gPaletteFade.hardwareFadeFinishing) - { - gPaletteFade.hardwareFadeFinishing = 0; - gPaletteFade.mode = 0; - gPaletteFade_blendCnt = 0; - gPaletteFade.y = 0; - gPaletteFade.active = 0; - } -} - -static bool8 IsSoftwarePaletteFadeFinishing(void) -{ - if (gPaletteFade.softwareFadeFinishing) - { - if (gPaletteFade.softwareFadeFinishingCounter == 4) - { - gPaletteFade.active = 0; - gPaletteFade.softwareFadeFinishing = 0; - gPaletteFade.softwareFadeFinishingCounter = 0; - } - else - { - gPaletteFade.softwareFadeFinishingCounter++; - } - - return TRUE; - } - else - { - return FALSE; - } -} - -void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color) -{ - u16 paletteOffset; - - for (paletteOffset = 0; selectedPalettes; paletteOffset += 16) - { - if (selectedPalettes & 1) - BlendPalette(paletteOffset, 16, coeff, color); - selectedPalettes >>= 1; - } -} - -void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color) -{ - void *src = gPlttBufferUnfaded; - void *dest = gPlttBufferFaded; - DmaCopy32(3, src, dest, PLTT_SIZE); - BlendPalettes(selectedPalettes, coeff, color); -} diff --git a/src/party_menu.c b/src/party_menu.c deleted file mode 100644 index 1fcd2cdda..000000000 --- a/src/party_menu.c +++ /dev/null @@ -1,1505 +0,0 @@ -#include "global.h" -#include "party_menu.h" -#include "battle.h" -#include "battle_interface.h" -#include "battle_party_menu.h" -#include "data2.h" -#include "event_data.h" -#include "item.h" -#include "item_use.h" -#include "mail_data.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "pokemon.h" -#include "pokemon_item_effect.h" -#include "pokemon_menu.h" -#include "pokemon_summary_screen.h" -#include "rom_8077ABC.h" -#include "rom_8094928.h" -#include "songs.h" -#include "sound.h" -#include "species.h" -#include "sprite.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "sprite.h" -#include "palette.h" -#include "event_data.h" -#include "main.h" -#include "item.h" -#include "battle_interface.h" -#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; - /*0x04*/ u8 unk4; - /*0x05*/ u8 unk5; - /*0x06*/ u16 unk6; - /*0x08*/ u16 unk8; - /*0x0A*/ u8 pad_0A[2]; - /*0x0C*/ s32 unkC; - /*0x10*/ TaskFunc unk10; - /*0x14*/ TaskFunc unk14; -}; - -struct Unk201F000 -{ - u8 filler0[0xE00]; - u8 unkE00[3]; // not sure if this is an array or struct, or how big it is -}; - -struct UnknownStruct5 -{ - u8 unk0; - u8 unk1; - u16 *unk4; -}; - -extern u8 ewram[]; -#define ewram01000 (*(struct Unk2001000 *)(ewram + 0x01000)) -#define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000)) -#define ewram1F000 (*(struct Unk201F000 *)(ewram + 0x1F000)) - -extern u8 gUnknown_0202E8F4; -extern u8 gUnknown_0202E8F6; -extern u16 gUnknown_0202E8F8; -extern u8 gUnknown_0202E8FA; -extern u8 gLastFieldPokeMenuOpened; -extern u8 gPlayerPartyCount; -extern s32 gBattleMoveDamage; - -//extern const u16 gUnknown_083769A8[][6]; -//extern const u8 gUnknown_083769A8[][12]; -extern void *const gUnknown_08376858[][6]; -extern const u8 gUnknown_083769A8[]; -extern const u8 gUnknown_08376D1C[DATA_COUNT]; -extern const u16 gUnknown_08376504[]; -extern void (*const gUnknown_08376B54[])(u8); -extern const u8 *const gUnknown_08376D04[DATA_COUNT]; -extern const struct UnknownStruct5 gUnknown_08376BB4[][6]; - -static void sub_806E884(u8 taskId); - -/* -void sub_806AEDC(void) -{ - const struct UnknownStruct5 *r5; - s32 i; - - AnimateSprites(); - BuildOamBuffer(); - r5 = gUnknown_08376BB4[gUnknown_0202E8FA]; - for (i = 0; i < 6; i++) - sub_800142C(r5[i].unk0 * 8, r5[i].unk1 * 8, r5[i].unk4, 0, (i << 5) | 0x200); - RunTasks(); - UpdatePaletteFade(); -} -*/ - -#if ENGLISH -#define WINDOW_LEFT (3) -#define WINDOW_RIGHT (26) -#elif GERMAN -#define WINDOW_LEFT (0) -#define WINDOW_RIGHT (29) -#endif - -u8 sub_806E834(const u8 *message, u8 arg1) -{ - u8 taskId; - - gUnknown_0202E8F6 = 1; - - MenuDrawTextWindow(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); - MenuPrintMessage(message, WINDOW_LEFT + 1, 15); - - taskId = CreateTask(sub_806E884, 1); - gTasks[taskId].data[0] = arg1; - - return taskId; -} - -static void sub_806E884(u8 taskId) -{ - if (MenuUpdateWindowText()) - { - gUnknown_0202E8F6 = 0; - if (gTasks[taskId].data[0] == 0) - MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); - DestroyTask(taskId); - } -} - -void sub_806E8D0(u8 taskId, u16 b, TaskFunc c) -{ - ewram1C000.unk10 = c; - ewram1C000.unk4 = taskId; - ewram1C000.unk5 = sub_806CA38(taskId); - ewram1C000.unk6 = b; - ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5]; -} - -bool8 PartyMenuUpdateMonHeldItem(struct Pokemon *pkmn, u16 item) -{ - u8 itemData[2]; - - if (ItemIsMail(item) == TRUE) - { - if (GiveMailToMon(pkmn, item) == 0xFF) - return TRUE; - gUnknown_0202E8F4 = 2; - } - else - { - gUnknown_0202E8F4 = 1; - } - - itemData[0] = item; - itemData[1] = item >> 8; - SetMonData(pkmn, MON_DATA_HELD_ITEM, itemData); - return FALSE; -} - -void PartyMenuTryGiveMonHeldItem(u8 taskId, u16 newItem, TaskFunc c) -{ - u16 currentItem; - - gTasks[taskId].func = TaskDummy; - sub_806E8D0(taskId, newItem, c); - currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM); - gUnknown_0202E8F4 = 0; - gUnknown_0202E8F8 = 0; - if (currentItem != 0) - { - if (ItemIsMail(currentItem) == TRUE) - { - sub_806E834(gOtherText_MailMustBeRemoved, 1); - CreateTask(party_menu_link_mon_held_item_object, 5); - } - else - { - GetMonNickname(ewram1C000.pokemon, gStringVar1); - CopyItemName(currentItem, gStringVar2); - StringExpandPlaceholders(gStringVar4, gOtherText_AlreadyHolding); - sub_806E834(gStringVar4, 1); - CreateTask(Task_ConfirmGiveHeldItem, 5); - if (ItemIsMail(newItem) == TRUE) - gUnknown_0202E8F8 = currentItem; - } - } - else - { - PartyMenuUpdateMonHeldItem(ewram1C000.pokemon, newItem); - RemoveBagItem(newItem, 1); - if (ItemIsMail(newItem)) - { - gTasks[taskId].func = c; - } - else - { - DisplayGiveHeldItemMessage(ewram1C000.unk5, newItem, 1); - CreateTask(party_menu_link_mon_held_item_object, 5); - } - } -} - -void party_menu_link_mon_held_item_object(u8 taskId) -{ - if (gUnknown_0202E8F6 == 0) - { - SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5); - gTasks[ewram1C000.unk4].func = ewram1C000.unk10; - DestroyTask(taskId); - } -} - -void PartyMenuTryGiveMonHeldItem_806EACC(u8 taskId) -{ - s8 selection = ProcessMenuInputNoWrap_(); - - if (selection == 0) - { - u16 currentItem; - - MenuZeroFillWindowRect(23, 8, 29, 13); - currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM); - RemoveBagItem(ewram1C000.unk6, 1); - if (AddBagItem(currentItem, 1) == TRUE) - { - PartyMenuUpdateMonHeldItem(ewram1C000.pokemon, ewram1C000.unk6); - if (ItemIsMail(ewram1C000.unk6)) - { - DisplayTakeHeldItemMessage(ewram1C000.unk5, currentItem, 1); - } - else - { - CopyItemName(ewram1C000.unk6, gStringVar1); - StringExpandPlaceholders(gStringVar4, gOtherText_TakenAndReplaced); - sub_806E834(gStringVar4, 1); - } - } - else - { - sub_806E834(gOtherText_BagFullCannotRemoveItem, 0); - AddBagItem(ewram1C000.unk6, 1); - } - } - else - { - if (selection != 1 && selection != -1) - return; - if (selection == -1) - PlaySE(SE_SELECT); - MenuZeroFillWindowRect(23, 8, 29, 13); - } - gTasks[taskId].func = party_menu_link_mon_held_item_object; -} - -void Task_ConfirmGiveHeldItem(u8 taskId) -{ - if (gUnknown_0202E8F6 == 0) - { - DisplayYesNoMenu(23, 8, 1); - gTasks[taskId].func = PartyMenuTryGiveMonHeldItem_806EACC; - } -} - -void DisplayGiveHeldItemMessage(u8 a, u16 b, u8 c) -{ - GetMonNickname(&gPlayerParty[a], gStringVar1); - CopyItemName(b, gStringVar2); - StringExpandPlaceholders(gStringVar4, gOtherText_WasGivenToHold); - sub_806E834(gStringVar4, c); -} - - -// Not sure about this one for now. -/* -void PartyMenuTryGiveMonMail(u8 taskId, TaskFunc func) -{ - u16 currentItem; - struct MailStruct *r4; - - gTasks[taskId].func = TaskDummy; - sub_806E8D0(taskId, 0, func); - currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM); - gUnknown_0202E8F4 = 0; - r4 = &gSaveBlock1.mail[ewram1F000.unkE00[0] + ewram1F000.unkE00[2]]; - if (currentItem != 0) - { - sub_806E834(gOtherText_PokeHoldingItemCantMail, 1); - CreateTask(party_menu_link_mon_held_item_object, 5); - } - else - { - GiveMailToMon2(ewram1C000.pokemon, r4); - ClearMailStruct(r4); - sub_806E834(gOtherText_MailTransferredMailbox, 1); - CreateTask(party_menu_link_mon_held_item_object, 5); - } -} -*/ -__attribute__((naked)) -void PartyMenuTryGiveMonMail(u8 taskId, TaskFunc func) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - adds r2, r1, 0\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldr r3, _0806ECA0 @ =gTasks\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 3\n\ - adds r1, r3\n\ - ldr r3, _0806ECA4 @ =TaskDummy\n\ - str r3, [r1]\n\ - movs r1, 0\n\ - bl sub_806E8D0\n\ - ldr r5, _0806ECA8 @ =0x0201c000\n\ - ldr r0, [r5]\n\ - movs r1, 0xC\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - ldr r2, _0806ECAC @ =gUnknown_0202E8F4\n\ - movs r1, 0\n\ - strb r1, [r2]\n\ - movs r1, 0xF8\n\ - lsls r1, 6\n\ - adds r2, r5, r1\n\ - ldrb r1, [r2]\n\ - adds r1, 0x6\n\ - ldrb r2, [r2, 0x2]\n\ - adds r1, r2\n\ - lsls r2, r1, 3\n\ - adds r2, r1\n\ - lsls r2, 2\n\ - ldr r1, _0806ECB0 @ =gSaveBlock1 + 0x2B4C\n\ - adds r4, r2, r1\n\ - cmp r0, 0\n\ - beq _0806ECBC\n\ - ldr r0, _0806ECB4 @ =gOtherText_PokeHoldingItemCantMail\n\ - movs r1, 0x1\n\ - bl sub_806E834\n\ - ldr r0, _0806ECB8 @ =party_menu_link_mon_held_item_object\n\ - movs r1, 0x5\n\ - bl CreateTask\n\ - b _0806ECDA\n\ - .align 2, 0\n\ -_0806ECA0: .4byte gTasks\n\ -_0806ECA4: .4byte TaskDummy\n\ -_0806ECA8: .4byte 0x0201c000\n\ -_0806ECAC: .4byte gUnknown_0202E8F4\n\ -_0806ECB0: .4byte gSaveBlock1 + 0x2B4C\n\ -_0806ECB4: .4byte gOtherText_PokeHoldingItemCantMail\n\ -_0806ECB8: .4byte party_menu_link_mon_held_item_object\n\ -_0806ECBC:\n\ - ldr r0, [r5]\n\ - adds r1, r4, 0\n\ - bl GiveMailToMon2\n\ - adds r0, r4, 0\n\ - bl ClearMailStruct\n\ - ldr r0, _0806ECE0 @ =gOtherText_MailTransferredMailbox\n\ - movs r1, 0x1\n\ - bl sub_806E834\n\ - ldr r0, _0806ECE4 @ =party_menu_link_mon_held_item_object\n\ - movs r1, 0x5\n\ - bl CreateTask\n\ -_0806ECDA:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0806ECE0: .4byte gOtherText_MailTransferredMailbox\n\ -_0806ECE4: .4byte party_menu_link_mon_held_item_object\n\ - .syntax divided\n"); -} - -void PartyMenuTryGiveMonHeldItem_806ECE8(u8 taskId, TaskFunc func) -{ - u16 currentItem; - - gTasks[taskId].func = TaskDummy; - sub_806E8D0(taskId, 0, func); - currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM); - if (currentItem == 0) - { - StringExpandPlaceholders(gStringVar4, gOtherText_NotHoldingAnything); - sub_806E834(gStringVar4, 0); - CreateTask(party_menu_link_mon_held_item_object, 5); - } - else - { - u8 itemData[2]; - - itemData[0] = 0; - itemData[1] = 0; - if (AddBagItem(currentItem, 1) == TRUE) - { - if (ItemIsMail(currentItem) == TRUE) - TakeMailFromMon(ewram1C000.pokemon); - DisplayTakeHeldItemMessage(ewram1C000.unk5, currentItem, 0); - SetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM, itemData); - } - else - { - sub_806E834(gOtherText_BagFullCannotRemoveItem, 0); - } - CreateTask(party_menu_link_mon_held_item_object, 5); - } -} - -void DisplayTakeHeldItemMessage(u8 a, u16 b, u8 c) -{ - GetMonNickname(&gPlayerParty[a], gStringVar1); - CopyItemName(b, gStringVar2); - StringExpandPlaceholders(gStringVar4, gOtherText_ReceivedTheThingFrom); - sub_806E834(gStringVar4, c); -} - -void DoTakeMail(u8 taskId, TaskFunc func) -{ - gTasks[taskId].func = TaskDummy; - sub_806E8D0(taskId, 0, func); - ewram1C000.unk6 = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM); - sub_806E834(gOtherText_SendRemovedMailPrompt, 1); - CreateTask(Task_ConfirmTakeHeldMail, 5); -} - -void Task_LoseMailMessage(u8 taskId) -{ - s8 selection = ProcessMenuInputNoWrap_(); - - if (selection == 0) - { - if (AddBagItem(ewram1C000.unk6, 1) == TRUE) - { - TakeMailFromMon(ewram1C000.pokemon); - sub_806E834(gOtherText_MailTaken, 0); - } - else - { - sub_806E834(gOtherText_BagFullCannotRemoveItem, 0); - } - MenuZeroFillWindowRect(23, 8, 29, 13); - gTasks[taskId].func = party_menu_link_mon_held_item_object; - } - else - { - if (selection != 1 && selection != -1) - return; - if (selection == -1) - PlaySE(SE_SELECT); - MenuZeroFillWindowRect(23, 8, 29, 13); - MenuZeroFillWindowRect(0, 14, 29, 19); - gTasks[taskId].func = party_menu_link_mon_held_item_object; - } -} - -void Task_ConfirmLoseMailMessage(u8 taskId) -{ - if (gUnknown_0202E8F6 == 0) - { - DisplayYesNoMenu(23, 8, 1); - gTasks[taskId].func = Task_LoseMailMessage; - } -} - -void Task_TakeHeldMail(u8 taskId) -{ - s8 selection = ProcessMenuInputNoWrap_(); - - if (selection == 0) - { - MenuZeroFillWindowRect(23, 8, 29, 13); - if (TakeMailFromMon2(ewram1C000.pokemon) != 0xFF) - sub_806E834(gOtherText_MailWasSent, 0); - else - sub_806E834(gOtherText_MailboxIsFull, 0); - gTasks[taskId].func = party_menu_link_mon_held_item_object; - } - else - { - if (selection != 1 && selection != -1) - return; - if (selection == -1) - PlaySE(SE_SELECT); - MenuZeroFillWindowRect(23, 8, 29, 13); - sub_806E834(gOtherText_MailRemovedMessageLost, 1); - gTasks[taskId].func = Task_ConfirmLoseMailMessage; - } -} - -void Task_ConfirmTakeHeldMail(u8 taskId) -{ - if (gUnknown_0202E8F6 == 0) - { - DisplayYesNoMenu(23, 8, 1); - gTasks[taskId].func = Task_TakeHeldMail; - } -} - -u16 ItemIdToBattleMoveId(u16 item) -{ - u16 moveId = item - 289; - - return gUnknown_08376504[moveId]; -} - -bool8 pokemon_has_move(struct Pokemon *pkmn, u16 move) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - if (GetMonData(pkmn, MON_DATA_MOVE1 + i) == move) - return TRUE; - } - return FALSE; -} - -void TeachMonTMMove(u8 taskId, u16 move, TaskFunc func) -{ - PlaySE(SE_SELECT); - gTasks[taskId].func = TaskDummy; - sub_806E8D0(taskId, move, func); - CreateTask(Task_TeamMonTMMove, 5); -} - -void Task_TeamMonTMMove(u8 taskId) -{ - GetMonNickname(ewram1C000.pokemon, gStringVar1); - ewram1C000.unk8 = ItemIdToBattleMoveId(ewram1C000.unk6); - StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); - ewram1B000.unk282 = 0; - if (pokemon_has_move(ewram1C000.pokemon, ewram1C000.unk8)) - { - StringExpandPlaceholders(gStringVar4, gOtherText_AlreadyKnows); - sub_806E834(gStringVar4, 1); - gTasks[taskId].func = party_menu_link_mon_held_item_object; - } - else - { - if (!CanMonLearnTMHM(ewram1C000.pokemon, ewram1C000.unk6 - 33)) - { - StringExpandPlaceholders(gStringVar4, gOtherText_NotCompatible); - sub_806E834(gStringVar4, 1); - gTasks[taskId].func = party_menu_link_mon_held_item_object; - } - else - { - if (GiveMoveToMon(ewram1C000.pokemon, ewram1C000.unk8) != 0xFFFF) - { - Task_TeamMonTMMove2(taskId); - } - else - { - StringExpandPlaceholders(gStringVar4, gOtherText_WantsToLearn); - sub_806E834(gStringVar4, 1); - gTasks[taskId].func = sub_806F358; - } - } - } -} - -void Task_TeamMonTMMove2(u8 taskId) -{ - StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); - StringExpandPlaceholders(gStringVar4, gOtherText_LearnedMove); - sub_806E834(gStringVar4, 1); - AdjustFriendship(ewram1C000.pokemon, 4); - if (ewram1B000.unk282 == 0 && ewram1C000.unk6 <= 0x152) - RemoveBagItem(ewram1C000.unk6, 1); - gTasks[taskId].func = Task_TeamMonTMMove3; -} - -void Task_TeamMonTMMove3(u8 taskId) -{ - if (gUnknown_0202E8F6 == 0) - { - PlayFanfare(BGM_FANFA1); - gTasks[taskId].func = Task_TeamMonTMMove4; - } -} - -void Task_TeamMonTMMove4(u8 taskId) -{ - if (IsFanfareTaskInactive()) - { - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) - { - SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5); - if (ewram1B000.unk282 == 1) - { - sub_8070C54(taskId); - } - else - { - gTasks[ewram1C000.unk4].func = ewram1C000.unk10; - DestroyTask(taskId); - } - } - } -} - -void sub_806F2FC(u8 taskId) -{ - if (gUnknown_0202E8F6 == 0) - { - SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5); - if (ewram1B000.unk282 == 1) - { - sub_8070C54(taskId); - } - else - { - gTasks[ewram1C000.unk4].func = ewram1C000.unk10; - DestroyTask(taskId); - } - } -} - -void sub_806F358(u8 taskId) -{ - if (gUnknown_0202E8F6 == 0) - { - DisplayYesNoMenu(23, 8, 1); - gTasks[taskId].func = sub_806F390; - } -} - -void sub_806F390(u8 taskId) -{ - s8 selection = ProcessMenuInputNoWrap_(); - - if (selection == 0) - { - MenuZeroFillWindowRect(23, 8, 29, 13); - sub_806E834(gOtherText_WhichMoveToForget2, 1); - gTasks[taskId].func = sub_806F44C; - } - else - { - if (selection != 1 && selection != -1) - return; - if (selection == -1) - PlaySE(SE_SELECT); - StopTryingToTeachMove_806F614(taskId); - } -} - -void sub_806F3FC(u8 taskId) -{ - if (!gPaletteFade.active) - { - sub_809D9F0(gPlayerParty, ewram1C000.unk5, gPlayerPartyCount - 1, sub_808B564, ewram1C000.unk8); - DestroyTask(taskId); - } -} - -void sub_806F44C(u8 taskId) -{ - if (gUnknown_0202E8F6 == 0) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = sub_806F3FC; - } -} - -void TaughtMove(u8 taskId) -{ - if (!gPaletteFade.active) - { - u8 moveIndex; - u16 r4; - - gTasks[taskId].func = TaskDummy; - sub_806E8D0(taskId, gScriptItemId, sub_808B508); - moveIndex = sub_809FA30(); - r4 = GetMonData(ewram1C000.pokemon, MON_DATA_MOVE1 + moveIndex); - GetMonNickname(ewram1C000.pokemon, gStringVar1); - StringCopy(gStringVar2, gMoveNames[r4]); - StringExpandPlaceholders(gStringVar4, gOtherText_ForgetMove123_2); - sub_806E834(gStringVar4, 1); - CreateTask(TMMoveUpdateMoveSlot, 5); - } -} - -void TMMoveUpdateMoveSlot(u8 taskId) -{ - if (gUnknown_0202E8F6 == 0) - { - RemoveMonPPBonus(ewram1C000.pokemon, sub_809FA30()); - SetMonMoveSlot(ewram1C000.pokemon, ewram1C000.unk8, sub_809FA30()); - Task_TeamMonTMMove2(taskId); - } -} - -void StopTryingToTeachMove_806F588(u8 taskId) -{ - if (!gPaletteFade.active) - { - gTasks[taskId].func = TaskDummy; - sub_806E8D0(taskId, gScriptItemId, sub_808B508); - StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); - StringExpandPlaceholders(gStringVar4, gOtherText_StopTryingTo); - sub_806E834(gStringVar4, 1); - CreateTask(StopTryingToTeachMove_806F67C, 5); - } -} - -void StopTryingToTeachMove_806F614(u8 taskId) -{ - MenuZeroFillWindowRect(23, 8, 29, 13); - StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); - StringExpandPlaceholders(gStringVar4, gOtherText_StopTryingTo); - sub_806E834(gStringVar4, 1); - gTasks[taskId].func = StopTryingToTeachMove_806F67C; -} - -void StopTryingToTeachMove_806F67C(u8 taskId) -{ - if (gUnknown_0202E8F6 == 0) - { - DisplayYesNoMenu(23, 8, 1); - gTasks[taskId].func = StopTryingToTeachMove_806F6B4; - } -} - -void StopTryingToTeachMove_806F6B4(u8 taskId) -{ - s8 selection = ProcessMenuInputNoWrap_(); - - if (selection == 0) - { - MenuZeroFillWindowRect(23, 8, 29, 13); - GetMonNickname(ewram1C000.pokemon, gStringVar1); - StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); - StringExpandPlaceholders(gStringVar4, gOtherText_DidNotLearnMove2); - sub_806E834(gStringVar4, 1); - gTasks[taskId].func = sub_806F2FC; - } - else - { - if (selection != 1 && selection != -1) - return; - if (selection == -1) - PlaySE(SE_SELECT); - MenuZeroFillWindowRect(23, 8, 29, 13); - GetMonNickname(ewram1C000.pokemon, gStringVar1); - StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); - StringExpandPlaceholders(gStringVar4, gOtherText_WantsToLearn); - sub_806E834(gStringVar4, 1); - gTasks[taskId].func = sub_806F358; - } -} - -bool8 IsHMMove(u16 move) -{ - u8 i; - - for (i = 0; i < 8; i++) - { - if (gUnknown_08376504[50 + i] == move) - return TRUE; - } - return FALSE; -} - -s16 sub_806F7E8(u8 taskId, struct BattleInterfaceStruct1 *b, s8 c) -{ - s16 *taskData; - u8 hpBarLevel; - void *vramPtr; - - taskData = gTasks[taskId].data; - - b->unk0 = taskData[10]; - b->unk4 = taskData[11]; - b->unk8 = taskData[12] * c; - b->unk10 = 0x100; - hpBarLevel = GetHPBarLevel(ewram1B000.unk282, b->unk0); - if (hpBarLevel > 2) - b->unkC_0 = 4; - if (hpBarLevel == 2) - b->unkC_0 = 5; - if (hpBarLevel < 2) - b->unkC_0 = 6; - vramPtr = gUnknown_08376858[IsDoubleBattle()][ewram1C000.unk5]; - return sub_80460C8(b, &ewram1C000.unkC, vramPtr, 0); -} - -void sub_806F8AC(u8 taskId) -{ - struct BattleInterfaceStruct1 sp0; - u16 sp14; - - ewram1B000.unk282 = sub_806F7E8(taskId, &sp0, -1); - if (ewram1B000.unk282 == -1) - { - ewram1C000.unkC = 0; - if (-sp0.unk8 + sp0.unk4 > sp0.unk0) - sp14 = sp0.unk0 - sp0.unk4; - else - sp14 = -sp0.unk8; - gBattleMoveDamage = -sp14; - GetMonNickname(ewram1C000.pokemon, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, sp14, 0, 3); - if (gTasks[taskId].data[14] == 0) - StringExpandPlaceholders(gStringVar4, gOtherText_HPRestoredBy); - else - StringExpandPlaceholders(gStringVar4, gOtherText_RegainedHealth); - SetMonIconAnim(GetMonIconSpriteId_maybe(ewram1C000.unk4, ewram1C000.unk5), ewram1C000.pokemon); - task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 7); - ewram1B000.unk261 = 2; - sub_806E834(gStringVar4, 1); - sp14 += sp0.unk4; - SetMonData(ewram1C000.pokemon, MON_DATA_HP, (u8 *)&sp14); - RemoveBagItem(ewram1C000.unk6, 1); - sub_8032638(); - gTasks[taskId].func = sub_806FB44; - } - else - { - PartyMenuDoPrintHP(ewram1C000.unk5, IsDoubleBattle(), ewram1B000.unk282, sp0.unk0); - } -} - -void sub_806FA18(u8 taskId) -{ - struct BattleInterfaceStruct1 sp0; - - ewram1B000.unk282 = sub_806F7E8(taskId, &sp0, 1); - if (ewram1B000.unk282 == -1) - { - PlaySE(SE_KAIFUKU); - ewram1C000.unkC = 0; - gTasks[taskId].data[11] -= gTasks[taskId].data[12]; - SetMonData(ewram1C000.pokemon, MON_DATA_HP, (u8 *)&gTasks[taskId].data[11]); - SetMonIconAnim(GetMonIconSpriteId_maybe(ewram1C000.unk4, ewram01000.unk1), ewram1C000.pokemon); - ewram1C000.unk5 = gSprites[ewram01000.unk2].data0; - ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5]; - gTasks[taskId].data[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP); - gTasks[taskId].data[11] = GetMonData(ewram1C000.pokemon, MON_DATA_HP); - ewram1C000.unkC = -32768; - ewram1C000.unk14 = ewram1C000.unk10; - gTasks[taskId].func = sub_806F8AC; - ewram1B000.unk282 = gTasks[taskId].data[11]; - } - else - { - PartyMenuDoPrintHP(ewram1C000.unk5, IsDoubleBattle(), ewram1B000.unk282, sp0.unk0); - } -} - -void sub_806FB0C(u8 taskId) -{ - if (gUnknown_0202E8F6 == 0) - { - gTasks[ewram1C000.unk4].func = ewram1C000.unk10; - DestroyTask(taskId); - } -} - -void sub_806FB44(u8 taskId) -{ - if (gUnknown_0202E8F6 == 0) - { - gTasks[ewram1C000.unk4].func = ewram1C000.unk14; - DestroyTask(taskId); - } -} - -bool8 IsHPRecoveryItem(u16 item) -{ - const u8 *itemEffect; - - if (item == 0xAF) - itemEffect = gSaveBlock1.enigmaBerry.itemEffect; - else - itemEffect = gItemEffectTable[item - 13]; - - if (itemEffect[4] & 4) - return TRUE; - else - return FALSE; -} - -void PartyMenuUpdateLevelOrStatus(struct Pokemon *pkmn, u8 b) -{ - PartyMenuClearLevelStatusTilemap(b); - PartyMenuPrintMonLevelOrStatus(b, pkmn); -} - -void GetMedicineItemEffectMessage(u16 item) -{ - switch (GetItemEffectType(item)) - { - case 3: - StringExpandPlaceholders(gStringVar4, gOtherText_CuredPoisoning); - break; - case 4: - StringExpandPlaceholders(gStringVar4, gOtherText_WokeUp); - break; - case 5: - StringExpandPlaceholders(gStringVar4, gOtherText_BurnHealed); - break; - case 6: - StringExpandPlaceholders(gStringVar4, gOtherText_ThawedOut); - break; - case 7: - StringExpandPlaceholders(gStringVar4, gOtherText_CuredParalysis); - break; - case 8: - StringExpandPlaceholders(gStringVar4, gOtherText_SnapConfusion); - break; - case 9: - StringExpandPlaceholders(gStringVar4, gOtherText_GotOverLove); - break; - case 11: - StringExpandPlaceholders(gStringVar4, gOtherText_BecameHealthy); - break; - case 13: - StringCopy(gStringVar2, gOtherText_Hp2); - StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); - break; - case 12: - StringCopy(gStringVar2, gOtherText_Attack); - StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); - break; - case 17: - StringCopy(gStringVar2, gOtherText_Defense); - StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); - break; - case 16: - StringCopy(gStringVar2, gOtherText_Speed); - StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); - break; - case 14: - StringCopy(gStringVar2, gOtherText_SpAtk2); - StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); - break; - case 15: - StringCopy(gStringVar2, gOtherText_SpDef2); - StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); - break; - case 19: - case 20: - StringExpandPlaceholders(gStringVar4, gOtherText_PPIncreased); - break; - case 21: - StringExpandPlaceholders(gStringVar4, gOtherText_PPRestored); - break; - default: - StringExpandPlaceholders(gStringVar4, gOtherText_WontHaveAnyEffect); - break; - } -} - -bool8 IsMedicineIneffective(struct Pokemon *pkmn, u16 item) -{ - if (GetItemEffectType(item) == 13 - && GetMonData(pkmn, MON_DATA_SPECIES) == SPECIES_SHEDINJA) - return TRUE; - else - return FALSE; -} - -bool8 ExecuteTableBasedItemEffect__(u8 a, u16 b, u8 c) -{ - if (gMain.inBattle) - return ExecuteTableBasedItemEffect_(&gPlayerParty[a], b, sub_8094C20(a), c); - else - return ExecuteTableBasedItemEffect_(&gPlayerParty[a], b, a, c); -} - -void UseMedicine(u8 taskId, u16 item, TaskFunc func) -{ - u8 r7; - bool8 r9 = FALSE; - bool8 r0; - - gTasks[taskId].func = TaskDummy; - r7 = CreateTask(TaskDummy, 5); - sub_806E8D0(taskId, item, func); - if (!IsMedicineIneffective(ewram1C000.pokemon, item)) - { - r9 = IsHPRecoveryItem(item); - if (r9 == TRUE) - { - gTasks[r7].data[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP); - gTasks[r7].data[11] = GetMonData(ewram1C000.pokemon, MON_DATA_HP); - if (gTasks[r7].data[10] == gTasks[r7].data[11]) - { - r9 = FALSE; - gTasks[r7].data[10] = 0; - gTasks[r7].data[11] = 0; - } - } - r0 = ExecuteTableBasedItemEffect__(ewram1C000.unk5, item, 0); - } - else - { - r0 = TRUE; - } - - if (r0) - { - gUnknown_0202E8F4 = 0; - PlaySE(SE_SELECT); - sub_806E834(gOtherText_WontHaveAnyEffect, 1); - gTasks[r7].func = sub_806FB0C; - } - else - { - u8 statusAndPkrs; - - gUnknown_0202E8F4 = 1; - if (!IsBlueYellowRedFlute(item)) - PlaySE(SE_KAIFUKU); - else - PlaySE(SE_BIDORO); - statusAndPkrs = GetMonStatusAndPokerus(ewram1C000.pokemon); - if (statusAndPkrs == 6 || statusAndPkrs == 0) - PartyMenuUpdateLevelOrStatus(ewram1C000.pokemon, ewram1C000.unk5); - if (r9 == TRUE) - { - gTasks[r7].data[12] = GetMonData(ewram1C000.pokemon, MON_DATA_HP) - gTasks[r7].data[11]; - ewram1C000.unkC = -32768; - if (gTasks[r7].data[11] == 0) - gTasks[r7].data[14] = 1; - else - gTasks[r7].data[14] = 0; - ewram1C000.unk14 = ewram1C000.unk10; - gTasks[r7].func = sub_806F8AC; - ewram1B000.unk282 = gTasks[r7].data[11]; - } - else - { - GetMonNickname(ewram1C000.pokemon, gStringVar1); - if (!IsBlueYellowRedFlute(item)) - RemoveBagItem(item, 1); - GetMedicineItemEffectMessage(item); - TryPrintPartyMenuMonNickname(ewram1C000.unk5, ewram1C000.pokemon); - sub_806E834(gStringVar4, 1); - gTasks[r7].func = sub_806FB0C; - } - } -} - -bool8 IsBlueYellowRedFlute(u16 item) -{ - if (item == 0x27 - || item == 0x29 - || item == 0x28) - return TRUE; - else - return FALSE; -} - -void sub_8070048(u8 taskId, u16 item, TaskFunc func) -{ - ewram1C000.unk10 = func; - ewram1C000.unk4 = taskId; - ewram1C000.unk6 = item; - ewram1C000.unk5 = 0; - ewram1C000.unk14 = sub_80701DC; - ewram1B000.unk27E = 0; - ewram1B000.unk280 = 0; - sub_8070088(taskId); -} - -void sub_8070088(u8 taskId) -{ - u8 taskId2; - - gTasks[taskId].func = TaskDummy; - if (GetMonData(&gPlayerParty[ewram1C000.unk5], MON_DATA_SPECIES) == 0) - { - gTasks[taskId].func = sub_80701DC; - } - else - { - s16 *taskData; - - taskId2 = CreateTask(TaskDummy, 5); - taskData = gTasks[taskId2].data; - ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5]; - taskData[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP); - taskData[11] = GetMonData(ewram1C000.pokemon, MON_DATA_HP); - if (ExecuteTableBasedItemEffect__(ewram1C000.unk5, ewram1C000.unk6, 0)) - { - DestroyTask(taskId2); - gTasks[taskId].func = sub_80701DC; - } - else - { - gUnknown_0202E8F4 = 1; - MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); - PlaySE(SE_KAIFUKU); - PartyMenuUpdateLevelOrStatus(ewram1C000.pokemon, ewram1C000.unk5); - task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 9); - ewram1B000.unk261 = 2; - taskData[12] = GetMonData(ewram1C000.pokemon, MON_DATA_HP) - taskData[11]; - taskData[14] = 1; - ewram1B000.unk27E = 1; - ewram1B000.unk280 = 1; - ewram1B000.unk282 = taskData[11]; - ewram1C000.unkC = -32768; - gTasks[taskId2].func = sub_806F8AC; - } - } -} - -void sub_80701DC(u8 taskId) -{ - if (ewram1B000.unk27E == 1) - { - AddBagItem(ewram1C000.unk6, 1); - if (GetMonData(&gPlayerParty[ewram1C000.unk5], MON_DATA_SPECIES) != 0) - { - task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 3); - ewram1B000.unk261 = 2; - } - ewram1B000.unk27E = 0; - } - ewram1C000.unk5++; - if (ewram1C000.unk5 == 6) - { - gUnknown_0202E8F4 = 0; - if (ewram1B000.unk280 == 0) - { - gTasks[taskId].func = TaskDummy; - sub_806E834(gOtherText_WontHaveAnyEffect, 1); - CreateTask(sub_806FB0C, 8); - } - else - { - RemoveBagItem(ewram1C000.unk6, 1); - gTasks[taskId].func = ewram1C000.unk10; - } - gLastFieldPokeMenuOpened = 0; - } - else - { - sub_8070088(taskId); - } -} - -void CreateItemUseMoveMenu(u8 partyMonIndex) -{ - u8 r6; - u8 i; - - r6 = 0; - MenuDrawTextWindow(19, 10, 29, 19); - for (i = 0; i < 4; i++) - { - u16 move = GetMonData(&gPlayerParty[partyMonIndex], MON_DATA_MOVE1 + i); - - MenuPrint(gMoveNames[move], 20, i * 2 + 11); - if (move != 0) - r6++; - } - InitMenu(0, 20, 11, r6, 0, 9); -} - -void Task_HandleItemUseMoveMenuInput(u8 taskId) -{ - if (gMain.newKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - MoveMenuCursor(-1); - } - else if (gMain.newKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - MoveMenuCursor(1); - } - else if (gMain.newKeys & A_BUTTON) - { - gUnknown_08376B54[0](taskId); - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - gUnknown_08376B54[1](taskId); - } -} - -void DoPPRecoveryItemEffect(u8 taskId, u16 b, TaskFunc c) -{ - const u8 *itemEffect; - u8 taskId2; - - if (b == 0xAF) - itemEffect = gSaveBlock1.enigmaBerry.itemEffect; - else - itemEffect = gItemEffectTable[b - 13]; - gTasks[taskId].func = TaskDummy; - taskId2 = CreateTask(TaskDummy, 5); - sub_806E8D0(taskId, b, c); - if (!(itemEffect[4] & 0x10)) - { - gTasks[taskId2].data[11] = 0; - DoRecoverPP(taskId2); - } - else - { - PlaySE(SE_SELECT); - sub_806D538(10, 3); - CreateItemUseMoveMenu(ewram1C000.unk5); - gTasks[taskId2].func = Task_HandleItemUseMoveMenuInput; - gMain.newKeys = 0; - } -} - -void ItemUseMoveMenu_HandleMoveSelection(u8 taskId) -{ - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(19, 10, 29, 19); - sub_806D5A4(); - gTasks[taskId].data[11] = GetMenuCursorPos(); - DoRecoverPP(taskId); -} - -void ItemUseMoveMenu_HandleCancel(u8 taskId) -{ - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(19, 10, 29, 19); - if (gMain.inBattle) - gTasks[ewram1C000.unk4].func = SetUpBattlePokemonMenu; - else - gTasks[ewram1C000.unk4].func = sub_808B0C0; - sub_806D538(3, 0); - DestroyTask(taskId); -} - -void DoRecoverPP(u8 taskId) -{ - u16 r5 = 0; - - if (ExecuteTableBasedItemEffect__(ewram1C000.unk5, ewram1C000.unk6, gTasks[taskId].data[11])) - { - gUnknown_0202E8F4 = r5; - PlaySE(SE_SELECT); - sub_806E834(gOtherText_WontHaveAnyEffect, 1); - } - else - { - gUnknown_0202E8F4 = 1; - PlaySE(SE_KAIFUKU); - RemoveBagItem(ewram1C000.unk6, 1); - r5 = GetMonData(ewram1C000.pokemon, MON_DATA_MOVE1 + gTasks[taskId].data[11]); - StringCopy(gStringVar1, gMoveNames[r5]); - GetMedicineItemEffectMessage(ewram1C000.unk6); - sub_806E834(gStringVar4, 1); - } - gTasks[taskId].func = sub_806FB0C; -} - -void DoPPUpItemEffect(u8 taskId, u16 b, TaskFunc c) -{ - gTasks[taskId].func = TaskDummy; - sub_806E8D0(taskId, b, c); - PlaySE(SE_SELECT); - sub_806D538(11, 3); - CreateItemUseMoveMenu(ewram1C000.unk5); - CreateTask(Task_HandleItemUseMoveMenuInput, 5); - gMain.newKeys = 0; -} - -void DoRareCandyItemEffect(u8 taskId, u16 b, TaskFunc c) -{ - u8 i; - bool8 r0; - - gTasks[taskId].func = TaskDummy; - sub_806E8D0(taskId, b, c); - - if (GetMonData(ewram1C000.pokemon, MON_DATA_LEVEL) != 100) - { - for (i = 0; i < 6; i++) - ewram1B000.unk264[i] = GetMonData(ewram1C000.pokemon, gUnknown_08376D1C[i]); - r0 = ExecuteTableBasedItemEffect__(ewram1C000.unk5, b, 0); - } - else - r0 = TRUE; - - if (r0) - { - gUnknown_0202E8F4 = 0; - PlaySE(SE_SELECT); - sub_806E834(gOtherText_WontHaveAnyEffect, 1); - CreateTask(sub_806FB0C, 5); - } - else - { - u8 level; - - gUnknown_0202E8F4 = 1; - PlayFanfareByFanfareNum(0); - sub_8070A20(ewram1C000.unk5, ewram1C000.pokemon); - RemoveBagItem(b, 1); - GetMonNickname(ewram1C000.pokemon, gStringVar1); - level = GetMonData(ewram1C000.pokemon, MON_DATA_LEVEL); - ConvertIntToDecimalStringN(gStringVar2, level, 0, 3); - StringExpandPlaceholders(gStringVar4, gOtherText_ElevatedTo); - sub_806E834(gStringVar4, 1); - CreateTask(Task_RareCandy1, 5); - } -} - -void Task_RareCandy1(u8 taskId) -{ - if (WaitFanfare(0) && gUnknown_0202E8F6 == 0) - { - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) - { - PlaySE(SE_SELECT); - sub_8070848(taskId); - gTasks[taskId].func = Task_RareCandy2; - } - } -} - -void Task_RareCandy2(u8 taskId) -{ - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) - { - PlaySE(SE_SELECT); - sub_8070968(taskId); - gTasks[taskId].func = Task_RareCandy3; - } -} - -#if ENGLISH -void sub_8070848(u8 taskId) -{ - u8 i; - - MenuDrawTextWindow(11, 0, 29, 7); - - for (i = 0; i < DATA_COUNT; i++) - { - u8 x; - u8 y; - u32 stat; - - stat = GetMonData(ewram1C000.pokemon, gUnknown_08376D1C[i]); - - ewram1B000.unk264[i + DATA_COUNT] = stat; - ewram1B000.unk264[i] = stat - ewram1B000.unk264[i]; - - x = (i / 3) * 9 + 11; - y = ((i % 3) << 1) + 1; - - MenuPrint_PixelCoords(gUnknown_08376D04[i], (x + 1) * 8, y * 8, 1); - - if (i == 2) - MenuPrint_PixelCoords(gOtherText_TallPlusAndRightArrow, (x + 6) * 8 + 6, y * 8, 0); - else - MenuPrint_PixelCoords(gOtherText_TallPlusAndRightArrow, (x + 6) * 8 + 6, y * 8, 1); - - gStringVar1[0] = EXT_CTRL_CODE_BEGIN; - gStringVar1[1] = 0x14; - gStringVar1[2] = 0x06; - - ConvertIntToDecimalStringN(gStringVar1 + 3, ewram1B000.unk264[i], 1, 2); - - MenuPrint_PixelCoords(gStringVar1, (x + 6) * 8 + 12, y * 8, 0); - } -} -#elif GERMAN -__attribute__((naked)) -void sub_8070848(u8 taskId) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - movs r0, 0xB\n\ - movs r1, 0\n\ - movs r2, 0x1D\n\ - movs r3, 0x7\n\ - bl MenuDrawTextWindow\n\ - movs r7, 0\n\ - ldr r0, _0807092C @ =gStringVar1\n\ - mov r10, r0\n\ - movs r1, 0xFC\n\ - mov r9, r1\n\ - movs r2, 0x13\n\ - mov r8, r2\n\ -_0807086C:\n\ - ldr r1, _08070930 @ =0x0201c000\n\ - ldr r0, [r1]\n\ - ldr r1, _08070934 @ =gUnknown_08376D1C\n\ - adds r1, r7, r1\n\ - ldrb r1, [r1]\n\ - bl GetMonData\n\ - adds r1, r7, 0x6\n\ - lsls r1, 1\n\ - ldr r2, _08070938 @ =0x0201b264\n\ - adds r1, r2, r1\n\ - strh r0, [r1]\n\ - lsls r6, r7, 1\n\ - adds r6, r2, r6\n\ - ldrh r1, [r6]\n\ - subs r0, r1\n\ - strh r0, [r6]\n\ - adds r0, r7, 0\n\ - movs r1, 0x3\n\ - bl __udivsi3\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - lsls r4, r0, 3\n\ - adds r4, r0\n\ - adds r4, 0xB\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - adds r0, r7, 0\n\ - movs r1, 0x3\n\ - bl __umodsi3\n\ - adds r5, r0, 0\n\ - lsls r5, 1\n\ - adds r5, 0x1\n\ - lsls r5, 24\n\ - lsrs r5, 24\n\ - ldr r1, _0807093C @ =gUnknown_08376D04\n\ - lsls r0, r7, 2\n\ - adds r0, r1\n\ - ldr r1, [r0]\n\ - mov r0, r10\n\ - bl StringCopy\n\ - adds r2, r0, 0\n\ - mov r0, r9\n\ - strb r0, [r2]\n\ - adds r2, 0x1\n\ - mov r1, r8\n\ - strb r1, [r2]\n\ - adds r2, 0x1\n\ - movs r0, 0x2E\n\ - strb r0, [r2]\n\ - adds r2, 0x1\n\ - adds r0, r2, 0\n\ - ldr r1, _08070940 @ =gOtherText_TallPlusAndRightArrow\n\ - bl StringCopy\n\ - adds r2, r0, 0\n\ - mov r0, r9\n\ - strb r0, [r2]\n\ - adds r2, 0x1\n\ - mov r1, r8\n\ - strb r1, [r2]\n\ - adds r2, 0x1\n\ - movs r0, 0x34\n\ - strb r0, [r2]\n\ - adds r2, 0x1\n\ - movs r0, 0\n\ - ldrsh r1, [r6, r0]\n\ - adds r0, r2, 0\n\ - movs r2, 0x1\n\ - movs r3, 0x2\n\ - bl ConvertIntToDecimalStringN\n\ - adds r4, 0x1\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - mov r0, r10\n\ - adds r1, r4, 0\n\ - adds r2, r5, 0\n\ - bl MenuPrint\n\ - adds r0, r7, 0x1\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - cmp r7, 0x5\n\ - bls _0807086C\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\ -_0807092C: .4byte gStringVar1\n\ -_08070930: .4byte 0x0201c000\n\ -_08070934: .4byte gUnknown_08376D1C\n\ -_08070938: .4byte 0x0201b264\n\ -_0807093C: .4byte gUnknown_08376D04\n\ -_08070940: .4byte gOtherText_TallPlusAndRightArrow\n\ - .syntax divided\n"); -} -#endif diff --git a/src/play_time.c b/src/play_time.c deleted file mode 100644 index 9882c9c4b..000000000 --- a/src/play_time.c +++ /dev/null @@ -1,73 +0,0 @@ -#include "global.h" -#include "play_time.h" - -enum -{ - STOPPED, - RUNNING, - MAXED_OUT -}; - -static u8 sPlayTimeCounterState; - -void PlayTimeCounter_Reset() -{ - sPlayTimeCounterState = STOPPED; - - gSaveBlock2.playTimeHours = 0; - gSaveBlock2.playTimeMinutes = 0; - gSaveBlock2.playTimeSeconds = 0; - gSaveBlock2.playTimeVBlanks = 0; -} - -void PlayTimeCounter_Start() -{ - sPlayTimeCounterState = RUNNING; - - if (gSaveBlock2.playTimeHours > 999) - PlayTimeCounter_SetToMax(); -} - -void PlayTimeCounter_Stop() -{ - sPlayTimeCounterState = STOPPED; -} - -void PlayTimeCounter_Update() -{ - if (sPlayTimeCounterState == RUNNING) - { - gSaveBlock2.playTimeVBlanks++; - - if (gSaveBlock2.playTimeVBlanks > 59) - { - gSaveBlock2.playTimeVBlanks = 0; - gSaveBlock2.playTimeSeconds++; - - if (gSaveBlock2.playTimeSeconds > 59) - { - gSaveBlock2.playTimeSeconds = 0; - gSaveBlock2.playTimeMinutes++; - - if (gSaveBlock2.playTimeMinutes > 59) - { - gSaveBlock2.playTimeMinutes = 0; - gSaveBlock2.playTimeHours++; - - if (gSaveBlock2.playTimeHours > 999) - PlayTimeCounter_SetToMax(); - } - } - } - } -} - -void PlayTimeCounter_SetToMax() -{ - sPlayTimeCounterState = MAXED_OUT; - - gSaveBlock2.playTimeHours = 999; - gSaveBlock2.playTimeMinutes = 59; - gSaveBlock2.playTimeSeconds = 59; - gSaveBlock2.playTimeVBlanks = 59; -} diff --git a/src/player_pc.c b/src/player_pc.c deleted file mode 100644 index 6d52c560a..000000000 --- a/src/player_pc.c +++ /dev/null @@ -1,1368 +0,0 @@ -#include "global.h" -#include "player_pc.h" -#include "decoration.h" -#include "field_fadetransition.h" -#include "field_weather.h" -#include "item.h" -#include "item_menu.h" -#include "items.h" -#include "main.h" -#include "menu.h" -#include "menu_helpers.h" -#include "palette.h" -#include "script.h" -#include "sound.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "songs.h" -#include "name_string_util.h" -#include "mail.h" -#include "rom4.h" -#include "player_pc.h" - -extern void DisplayItemMessageOnField(u8, const u8*, TaskFunc, u16); -extern void DoPlayerPCDecoration(u8); -extern void BuyMenuFreeMemory(void); -extern void DestroyVerticalScrollIndicator(u8); -extern void PauseVerticalScrollIndicator(u8); -extern void LoadScrollIndicatorPalette(void); -extern void ClearMailStruct(struct MailStruct *); -extern u8 sub_807D770(void); -extern void sub_808B020(void); -extern void sub_80F944C(void); - -static EWRAM_DATA u8 *gPcItemMenuOptionOrder = NULL; - -static u8 gPcItemMenuOptionsNum; - -extern u8 gUnknown_02038561; - -// event scripts -extern u8 gBrendanHouse_TurnPCOff[]; -extern u8 gMayHouse_TurnPCOff[]; - -extern void (*gFieldCallback)(void); - -static void InitPlayerPCMenu(u8 taskId); -static void PlayerPCProcessMenuInput(u8 taskId); -static void InitItemStorageMenu(u8); -static void ItemStorageMenuPrint(const u8 *); -static void ItemStorageMenuProcessInput(u8); -static void ItemStorage_ProcessInput(u8); -static void ItemStorage_SetItemAndMailCount(u8); -static void ItemStorage_DoItemAction(u8); -static void ItemStorage_GoBackToPlayerPCMenu(u8); -static void ItemStorage_HandleQuantityRolling(u8); -static void ItemStorage_DoItemWithdraw(u8); -static void ItemStorage_DoItemToss(u8); -static void ItemStorage_HandleRemoveItem(u8); -static void ItemStorage_WaitPressHandleResumeProcessInput(u8); -static void ItemStorage_HandleResumeProcessInput(u8); -static void ItemStorage_DoItemSwap(u8, bool8); -static void ItemStorage_DrawItemList(u8); -static void ItemStorage_PrintItemPcResponse(u16); -static void ItemStorage_DrawBothListAndDescription(u8); -static void ItemStorage_GoBackToItemPCMenu(u8, u8); -static void ItemStorage_LoadPalette(void); -static u8 GetMailboxMailCount(void); -static void Mailbox_UpdateMailList(void); -static void Mailbox_DrawMailboxMenu(u8); -static void Mailbox_ProcessInput(u8); -static void Mailbox_CloseScrollIndicators(void); -static void Mailbox_PrintWhatToDoWithPlayerMailText(u8); -static void Mailbox_TurnOff(u8); -static void Mailbox_PrintMailOptions(u8); -static void Mailbox_MailOptionsProcessInput(u8); -static void Mailbox_FadeAndReadMail(u8); -static void Mailbox_ReturnToFieldFromReadMail(void); -static void Mailbox_DrawYesNoBeforeMove(u8); -static void Mailbox_DoGiveMailPokeMenu(u8); -static void Mailbox_NoPokemonForMail(u8); -static void Mailbox_Cancel(u8); -static void Mailbox_DrawMailMenuAndDoProcessInput(u8); -static void PlayerPC_ItemStorage(u8 taskId); -static void PlayerPC_Mailbox(u8 taskId); -static void PlayerPC_Decoration(u8 var); -static void PlayerPC_TurnOff(u8 taskId); -static void ItemStorage_Withdraw(u8); -static void ItemStorage_Deposit(u8); -static void ItemStorage_Toss(u8); -static void ItemStorage_Exit(u8); -static void ItemStorage_ResumeInputFromYesToss(u8); -static void ItemStorage_ResumeInputFromNoToss(u8); -static void Mailbox_DoMailMoveToBag(u8); -static void Mailbox_ReturnToInputAfterNo(u8); -static void Mailbox_DoMailRead(u8); -static void Mailbox_MoveToBag(u8); -static void Mailbox_Give(u8); -static void Mailbox_Cancel(u8); - -static const u8 *const gPCText_OptionDescList[] = -{ - PCText_TakeOutItems, - PCText_StoreItems, - PCText_ThrowAwayItems, - gMenuText_GoBackToPrev -}; - -static const struct MenuAction2 gPCText_PlayerPCOptionsText[] = -{ - { SecretBaseText_ItemStorage, PlayerPC_ItemStorage }, - { gPCText_Mailbox, PlayerPC_Mailbox }, - { SecretBaseText_Decoration, PlayerPC_Decoration }, - { SecretBaseText_TurnOff, PlayerPC_TurnOff } -}; - -static const u8 gBedroomPC_OptionOrder[] = -{ - PLAYERPC_MENU_ITEMSTORAGE, - PLAYERPC_MENU_MAILBOX, - PLAYERPC_MENU_DECORATION, - PLAYERPC_MENU_TURNOFF -}; - -static const u8 gPlayerPC_OptionOrder[] = -{ - PLAYERPC_MENU_ITEMSTORAGE, - PLAYERPC_MENU_MAILBOX, - PLAYERPC_MENU_TURNOFF -}; - -static const struct MenuAction2 gPCText_ItemPCOptionsText[] = -{ - { PCText_WithdrawItem, ItemStorage_Withdraw }, - { PCText_DepositItem, ItemStorage_Deposit }, - { PCText_TossItem, ItemStorage_Toss }, - { gUnknownText_Exit, ItemStorage_Exit } -}; - -static const struct YesNoFuncTable ResumeFromTossYesNoFuncList[] = // ResumeFromTossYesNoFuncList -{ - ItemStorage_ResumeInputFromYesToss, - ItemStorage_ResumeInputFromNoToss -}; - -static const struct YesNoFuncTable ResumeFromWithdrawYesNoFuncList[] = // ResumeFromWithdrawYesNoFuncList -{ - Mailbox_DoMailMoveToBag, - Mailbox_ReturnToInputAfterNo -}; - -// the use of this struct is meant to be an ItemSlot struct, but NewGameInitPCItems refuses to match without a weird pointer access. -static const struct ItemSlot gNewGamePCItems[] = -{ - { ITEM_POTION, 1 }, - { ITEM_NONE, 0 } -}; - -static const struct MenuAction2 gMailboxMailOptions[] = -{ - { OtherText_Read, Mailbox_DoMailRead }, - { gOtherText_MoveToBag, Mailbox_MoveToBag }, - { OtherText_Give, Mailbox_Give }, - { gOtherText_CancelNoTerminator, Mailbox_Cancel } -}; - -static const u8 gNonSelectedItemFormattedText[] = _("{STR_VAR_1}{CLEAR_TO 80}"); -static const u8 gSelectedItemFormattedText[] = _("{COLOR RED}{STR_VAR_1}{CLEAR_TO 80}"); -static const u8 gNonSelectedItemQuantityFormatText[] = _("{STR_VAR_1}"); -static const u8 gSelectedItemQuantityFormatText[] = _("{COLOR RED}{STR_VAR_1}"); -static const u8 gUnknown_08406330[] = _("{CLEAR_TO 32}"); - -static const u16 gUnknown_08406334[3] = -{ - 0x5294, - 0x6B5A, - 0x7FFF -}; - -static const u8 gHighlightedMoveToBagFormatText[] = _("{COLOR RED}{STR_VAR_1}"); - -extern u8 *gUnknown_02039314; -extern struct MenuAction gUnknown_08406298[]; - -extern u8 gUnknown_084062B8[]; -extern u8 gUnknown_084062BC[]; -extern u8 gUnknown_0840632A[]; -extern u8 gUnknown_08406327[]; -extern u8 gUnknown_0840631E[]; -extern u8 gUnknown_08406318[]; - -extern u8 gUnknown_030007B4; -extern u8 unk_201FE00[]; - -extern u8 gUnknown_08152850; -extern u8 gUnknown_08152C75; - -extern u32 gUnknown_08406288[]; -extern const struct MenuAction gUnknown_084062C0[]; -extern const struct YesNoFuncTable gUnknown_084062E0; - -void NewGameInitPCItems(void) -{ - u8 i; - - // because Game Freak don't know how to use a struct or a 2d array - for(i = 0, ClearItemSlots(gSaveBlock1.pcItems, ARRAY_COUNT(gSaveBlock1.pcItems)); NEW_GAME_PC_ITEMS(i, ITEM_ID) && NEW_GAME_PC_ITEMS(i, QUANTITY) && - AddPCItem(NEW_GAME_PC_ITEMS(i, ITEM_ID), NEW_GAME_PC_ITEMS(i, QUANTITY)) == TRUE; i++) - ; -} - -void BedroomPC(void) -{ - gPcItemMenuOptionOrder = (u8 *)gBedroomPC_OptionOrder; - gPcItemMenuOptionsNum = 4; - DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gOtherText_WhatWillYouDo, InitPlayerPCMenu, 0); -} - -void PlayerPC(void) -{ - gPcItemMenuOptionOrder = (u8 *)gPlayerPC_OptionOrder; - gPcItemMenuOptionsNum = 3; - DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gOtherText_WhatWillYouDo, InitPlayerPCMenu, 0); -} - -static void InitPlayerPCMenu(u8 taskId) -{ - MenuDrawTextWindow(0, 0, 10, gPcItemMenuOptionsNum * 2 + 1); - PrintMenuItemsReordered(1, 1, gPcItemMenuOptionsNum, (struct MenuAction *)gPCText_PlayerPCOptionsText, gPcItemMenuOptionOrder); - InitMenu(0, 1, 1, gPcItemMenuOptionsNum, 0, 9); - TASK.FUNC = PlayerPCProcessMenuInput; -} - -static void PlayerPCProcessMenuInput(u8 taskId) -{ - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - MoveMenuCursor(-1); - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - MoveMenuCursor(1); - } - else if (gMain.newKeys & A_BUTTON) - { - HandleDestroyMenuCursors(); - PlaySE(SE_SELECT); - gPCText_PlayerPCOptionsText[gPcItemMenuOptionOrder[GetMenuCursorPos()]].func(taskId); - } - else if (gMain.newKeys & B_BUTTON) - { - HandleDestroyMenuCursors(); - PlaySE(SE_SELECT); - gPCText_PlayerPCOptionsText[gPcItemMenuOptionsNum[gPcItemMenuOptionOrder - 1]].func(taskId); // run EXIT. - } -} - -void ReshowPlayerPC(u8 var) -{ - DisplayItemMessageOnField(var, gOtherText_WhatWillYouDo, InitPlayerPCMenu, 0); -} - -static void PlayerPC_ItemStorage(u8 taskId) -{ - InitItemStorageMenu(ITEMPC_MENU_WITHDRAW); - TASK.FUNC = ItemStorageMenuProcessInput; -} - -static void PlayerPC_Mailbox(u8 taskId) -{ - MenuZeroFillWindowRect(0, 0, 10, 9); - gMailboxInfo.count = GetMailboxMailCount(); - - if (gMailboxInfo.count == 0) - DisplayItemMessageOnField(taskId, gOtherText_NoMailHere, ReshowPlayerPC, 0); - else - { - gMailboxInfo.cursorPos = 0; - gMailboxInfo.itemsAbove = 0; - Mailbox_UpdateMailList(); - ItemStorage_SetItemAndMailCount(taskId); - Mailbox_DrawMailboxMenu(taskId); - TASK.FUNC = Mailbox_ProcessInput; - } -} - -static void PlayerPC_Decoration(u8 var) -{ - MenuZeroFillWindowRect(0, 0, 10, 9); - DoPlayerPCDecoration(var); -} - -static void PlayerPC_TurnOff(u8 taskId) -{ - if (gPcItemMenuOptionsNum == 4) // if the option count is 4, we are at the bedroom PC and not player PC, so do gender specific handling. - { - MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - - if (gSaveBlock2.playerGender == MALE) - ScriptContext1_SetupScript(gBrendanHouse_TurnPCOff); - else - ScriptContext1_SetupScript(gMayHouse_TurnPCOff); - } - else - { - MenuZeroFillWindowRect(0, 0, 10, 9); - EnableBothScriptContexts(); - } - DestroyTask(taskId); -} - -static void InitItemStorageMenu(u8 var) -{ - MenuZeroFillWindowRect(0, 0, 10, 9); - MenuDrawTextWindow(0, 0, 11, 9); - PrintMenuItems(1, 1, 4, (struct MenuAction *)gPCText_ItemPCOptionsText); - InitMenu(0, 1, 1, 4, var, 10); - ItemStorageMenuPrint(gPCText_OptionDescList[var]); -} - -static void ItemStorageMenuPrint(const u8 *textPtr) -{ - MenuFillWindowRectWithBlankTile(2, 15, 27, 18); - MenuPrint(textPtr, 2, 15); -} - -static void ItemStorageMenuProcessInput(u8 var) -{ - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - MoveMenuCursor(-1); - ItemStorageMenuPrint(gPCText_OptionDescList[GetMenuCursorPos()]); - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - MoveMenuCursor(1); - ItemStorageMenuPrint(gPCText_OptionDescList[GetMenuCursorPos()]); - } - else if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - gPCText_ItemPCOptionsText[GetMenuCursorPos()].func(var); - } - else if (gMain.newKeys & B_BUTTON) - { - HandleDestroyMenuCursors(); - PlaySE(SE_SELECT); - gPCText_ItemPCOptionsText[ITEMPC_MENU_EXIT].func(var); - } -} - -static void Task_ItemStorage_Deposit(u8 taskId) -{ - if (!gPaletteFade.active) - { - sub_80A6A30(); - DestroyTask(taskId); - } -} - -static void ItemStorage_Deposit(u8 taskId) -{ - TASK.FUNC = Task_ItemStorage_Deposit; - fade_screen(1, 0); -} - -static void ItemStorage_HandleReturnToProcessInput(u8 taskId) -{ - if (sub_807D770() == TRUE) - TASK.FUNC = ItemStorageMenuProcessInput; -} - -void ItemStorage_ReturnToMenuAfterDeposit(void) -{ - MenuDisplayMessageBox(); - InitItemStorageMenu(ITEMPC_MENU_DEPOSIT); - CreateTask(ItemStorage_HandleReturnToProcessInput, 0); - pal_fill_black(); -} - -static void ItemStorage_Withdraw(u8 taskId) -{ - s16 *data = TASK.data; - - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(0, 0, 11, 9); - NUM_ITEMS = CountUsedPCItemSlots(); - - if (NUM_ITEMS != 0) - { - MenuZeroFillWindowRect(0, 14, 29, 19); - CURRENT_ITEM_STORAGE_MENU = ITEMPC_MENU_WITHDRAW; - PAGE_INDEX = 0; - ITEMS_ABOVE_TOP = 0; - ItemStorage_SetItemAndMailCount(taskId); - ItemStorage_GoBackToItemPCMenu(taskId, 0); - TASK.FUNC = ItemStorage_ProcessInput; - } - else - DisplayItemMessageOnField(taskId, gOtherText_NoItems, PlayerPC_ItemStorage, 0); -} - -static void ItemStorage_Toss(u8 taskId) -{ - s16 *data = TASK.data; - - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(0, 0, 11, 9); - NUM_ITEMS = CountUsedPCItemSlots(); - - if (NUM_ITEMS) - { - MenuZeroFillWindowRect(0, 14, 29, 19); - CURRENT_ITEM_STORAGE_MENU = ITEMPC_MENU_TOSS; - PAGE_INDEX = 0; - ITEMS_ABOVE_TOP = 0; - ItemStorage_SetItemAndMailCount(taskId); - ItemStorage_GoBackToItemPCMenu(taskId, 2); - TASK.FUNC = ItemStorage_ProcessInput; - } - else - DisplayItemMessageOnField(taskId, gOtherText_NoItems, PlayerPC_ItemStorage, 0); -} - -static void ItemStorage_Exit(u8 var) -{ - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(0, 0, 11, 9); - ReshowPlayerPC(var); -} - -static void ItemStorage_SetItemAndMailCount(u8 taskId) -{ - s16 *data = TASK.data; - - if (NUM_ITEMS > 7) // we have a full page, so set the num of page items appropriately. - NUM_PAGE_ITEMS = 8; - else - NUM_PAGE_ITEMS = NUM_ITEMS + 1; // there are not enough items to fill a full page; take the # of items and add 1 for the cancel button. - - if (gMailboxInfo.count > 7) - gMailboxInfo.pageItems = 8; - else - gMailboxInfo.pageItems = gMailboxInfo.count + 1; -} - -static void ItemStorage_ProcessInput(u8 taskId) -{ - s16 *data = TASK.data; - s16 trueIndex; - - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - if(PAGE_INDEX != 0) // did the cursor move physically upwards? - { - PlaySE(SE_SELECT); - PAGE_INDEX = MoveMenuCursor(-1); - trueIndex = ITEMS_ABOVE_TOP + PAGE_INDEX; - if (SWITCH_MODE_ACTIVE == FALSE) // are we not currently switching items? - { - if (trueIndex == NUM_ITEMS) // if the cursor is on top of cancel, print the go back to prev description. - { - ItemStorage_PrintItemPcResponse(ITEMPC_GO_BACK_TO_PREV); - } - else - { - ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[trueIndex].itemId); - } - } - } - else // the page cursor is at the top. but we may not be at the top of the true index list, so do another check. - { - if (ITEMS_ABOVE_TOP == 0) // did the cursor not move due to being at the top of the list? - return; - - PlaySE(SE_SELECT); - ITEMS_ABOVE_TOP--; - ItemStorage_DrawBothListAndDescription(taskId); - - if (SWITCH_MODE_ACTIVE != FALSE) - MoveMenuCursor(0); // don't move the cursor. it's at the top of the page index, but not the true index. - } - } - else if(gMain.newAndRepeatedKeys & DPAD_DOWN) // _0813A306 - { - if(PAGE_INDEX != NUM_PAGE_ITEMS - 1) - { - PlaySE(SE_SELECT); - PAGE_INDEX = MoveMenuCursor(1); - trueIndex = ITEMS_ABOVE_TOP + PAGE_INDEX; - - if(SWITCH_MODE_ACTIVE != FALSE) - return; - - if (trueIndex == NUM_ITEMS) - ItemStorage_PrintItemPcResponse(ITEMPC_GO_BACK_TO_PREV); // probably further down - else - ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[trueIndex].itemId); - } - else if(ITEMS_ABOVE_TOP + PAGE_INDEX != NUM_ITEMS) - { - PlaySE(SE_SELECT); - ITEMS_ABOVE_TOP++; - ItemStorage_DrawBothListAndDescription(taskId); - - if (SWITCH_MODE_ACTIVE != FALSE) - MoveMenuCursor(0); - } - } - else if(gMain.newKeys & SELECT_BUTTON) // _0813A3A0 - { - if (SWITCH_MODE_ACTIVE == FALSE) - { - if (PAGE_INDEX + ITEMS_ABOVE_TOP != NUM_ITEMS) // you cannot swap the Cancel button. - { - PlaySE(SE_SELECT); - SWITCH_MODE_ACTIVE = TRUE; - SWAP_ITEM_INDEX = ITEMS_ABOVE_TOP + PAGE_INDEX; - ItemStorage_PrintItemPcResponse(ITEMPC_SWITCH_WHICH_ITEM); - } - // _0813A3DC - ItemStorage_DrawItemList(taskId); - } - else // _0813A3E8 - { - PlaySE(SE_SELECT); - ItemStorage_DoItemSwap(taskId, FALSE); - ItemStorage_DrawBothListAndDescription(taskId); - } - } - else if(gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if(SWITCH_MODE_ACTIVE == FALSE) - { - if(ITEMS_ABOVE_TOP + PAGE_INDEX != NUM_ITEMS) - { - ItemStorage_DoItemAction(taskId); - } - else - { - ItemStorage_GoBackToPlayerPCMenu(taskId); - } - } - else - { - ItemStorage_DoItemSwap(taskId, FALSE); - ItemStorage_DrawBothListAndDescription(taskId); - } - } - else if(gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - if(SWITCH_MODE_ACTIVE == FALSE) - { - HandleDestroyMenuCursors(); - ItemStorage_GoBackToPlayerPCMenu(taskId); - } - else - { - ItemStorage_DoItemSwap(taskId, TRUE); - ItemStorage_DrawBothListAndDescription(taskId); - } - } -} - -static void ItemStorage_GoBackToPlayerPCMenu(u8 taskId) -{ - BuyMenuFreeMemory(); - DestroyVerticalScrollIndicator(0); - DestroyVerticalScrollIndicator(1); - MenuZeroFillWindowRect(0, 0, 29, 19); - MenuDisplayMessageBox(); - InitItemStorageMenu(TASK.CURRENT_ITEM_STORAGE_MENU); - TASK.FUNC = ItemStorageMenuProcessInput; -} - -static void ItemStorage_DoItemAction(u8 taskId) -{ - s16 *data = TASK.data; - u8 trueIndex = PAGE_INDEX + ITEMS_ABOVE_TOP; - - PauseVerticalScrollIndicator(0); - PauseVerticalScrollIndicator(1); // PauseVerticalScrollIndicator - - if(CURRENT_ITEM_STORAGE_MENU == ITEMPC_MENU_WITHDRAW) - { - if(gSaveBlock1.pcItems[trueIndex].quantity == 1) - { - NUM_QUANTITY_ROLLER = 1; - ItemStorage_DoItemWithdraw(taskId); - return; - } - else // _0813A50C - { - ItemStorage_PrintItemPcResponse(ITEMPC_HOW_MANY_TO_WITHDRAW); - } - } - else if(gSaveBlock1.pcItems[trueIndex].quantity == 1) // _0813A518 - { - NUM_QUANTITY_ROLLER = 1; - ItemStorage_DoItemToss(taskId); - return; - } - else - { - ItemStorage_PrintItemPcResponse(ITEMPC_HOW_MANY_TO_TOSS); - } - NUM_QUANTITY_ROLLER = 1; - MenuDrawTextWindow(6, 8, 13, 11); - sub_80A418C(NUM_QUANTITY_ROLLER, STR_CONV_MODE_RIGHT_ALIGN, 8, 9, 3); - TASK.FUNC = ItemStorage_HandleQuantityRolling; -} - -static void ItemStorage_HandleQuantityRolling(u8 taskId) -{ - s16 *data = TASK.data; - u8 trueIndex = PAGE_INDEX + ITEMS_ABOVE_TOP; - - if(gMain.newAndRepeatedKeys & DPAD_UP) - { - if(NUM_QUANTITY_ROLLER != gSaveBlock1.pcItems[trueIndex].quantity) - NUM_QUANTITY_ROLLER++; - else - NUM_QUANTITY_ROLLER = 1; // you are at the max amount of items you have when you press Up, set your quantity back to 1. - - sub_80A418C(NUM_QUANTITY_ROLLER, STR_CONV_MODE_RIGHT_ALIGN, 8, 9, 3); // print quantity? - } - else if(gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if(NUM_QUANTITY_ROLLER != 1) - NUM_QUANTITY_ROLLER--; - else - NUM_QUANTITY_ROLLER = gSaveBlock1.pcItems[trueIndex].quantity; // you are at 0 when you press down, set your quantity to the amount you have. - - sub_80A418C(NUM_QUANTITY_ROLLER, STR_CONV_MODE_RIGHT_ALIGN, 8, 9, 3); // print quantity? - } - else if(gMain.newAndRepeatedKeys & DPAD_LEFT) // reduce by 10. - { - NUM_QUANTITY_ROLLER -= 10; - - if(NUM_QUANTITY_ROLLER <= 0) - NUM_QUANTITY_ROLLER = 1; // dont underflow or allow 0! - - sub_80A418C(NUM_QUANTITY_ROLLER, STR_CONV_MODE_RIGHT_ALIGN, 8, 9, 3); // print quantity? - } - else if(gMain.newAndRepeatedKeys & DPAD_RIGHT) // add 10. - { - NUM_QUANTITY_ROLLER += 10; - - if(NUM_QUANTITY_ROLLER > gSaveBlock1.pcItems[trueIndex].quantity) - NUM_QUANTITY_ROLLER = gSaveBlock1.pcItems[trueIndex].quantity; // dont overflow! - - sub_80A418C(NUM_QUANTITY_ROLLER, STR_CONV_MODE_RIGHT_ALIGN, 8, 9, 3); // print quantity? - } - else if(gMain.newKeys & A_BUTTON) // confirm quantity. - { - PlaySE(SE_SELECT); - MenuZeroFillWindowRect(6, 6, 0xD, 0xB); - - if(CURRENT_ITEM_STORAGE_MENU == ITEMPC_MENU_WITHDRAW) - ItemStorage_DoItemWithdraw(taskId); - else - ItemStorage_DoItemToss(taskId); - } - else if(gMain.newKeys & B_BUTTON) // cancel quantity. - { - PlaySE(SE_SELECT); - MenuZeroFillWindowRect(6, 6, 0xD, 0xB); - StartVerticalScrollIndicators(0); - StartVerticalScrollIndicators(1); - ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[ITEMS_ABOVE_TOP + PAGE_INDEX].itemId); // why not use trueIndex? - TASK.FUNC = ItemStorage_ProcessInput; - } -} - -static void ItemStorage_DoItemWithdraw(u8 taskId) -{ - s16 *data = TASK.data; - u8 trueIndex = PAGE_INDEX + ITEMS_ABOVE_TOP; - - if(AddBagItem(gSaveBlock1.pcItems[trueIndex].itemId, NUM_QUANTITY_ROLLER) == TRUE) // add item works. - { - CopyItemName(gSaveBlock1.pcItems[trueIndex].itemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, NUM_QUANTITY_ROLLER, 0, 3); - ItemStorage_PrintItemPcResponse(ITEMPC_WITHDREW_THING); - TASK.FUNC = ItemStorage_HandleRemoveItem; - } - else - { - NUM_QUANTITY_ROLLER = 0; - ItemStorage_PrintItemPcResponse(ITEMPC_NO_MORE_ROOM); - TASK.FUNC = ItemStorage_WaitPressHandleResumeProcessInput; - } -} - -static void ItemStorage_DoItemToss(u8 taskId) -{ - s16 *data = TASK.data; - u8 var = PAGE_INDEX + ITEMS_ABOVE_TOP; - - if(ItemId_GetImportance(gSaveBlock1.pcItems[var].itemId) == FALSE) - { - CopyItemName(gSaveBlock1.pcItems[var].itemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, NUM_QUANTITY_ROLLER, 0, 3); - ItemStorage_PrintItemPcResponse(ITEMPC_OKAY_TO_THROW_AWAY); - DisplayYesNoMenu(7, 6, 1); - DoYesNoFuncWithChoice(taskId, (struct YesNoFuncTable *)&ResumeFromTossYesNoFuncList); - } - else - { - NUM_QUANTITY_ROLLER = 0; - ItemStorage_PrintItemPcResponse(ITEMPC_TOO_IMPORTANT); - TASK.FUNC = ItemStorage_HandleRemoveItem; - } -} - -static void ItemStorage_ResumeInputFromYesToss(u8 taskId) -{ - MenuZeroFillWindowRect(0x6, 0x6, 0xD, 0xB); - ItemStorage_PrintItemPcResponse(ITEMPC_THREW_AWAY_ITEM); - TASK.FUNC = ItemStorage_HandleRemoveItem; -} - -static void ItemStorage_ResumeInputFromNoToss(u8 taskId) -{ - s16 *data = TASK.data; - - MenuZeroFillWindowRect(0x6, 0x6, 0xD, 0xB); - InitMenu(0, 16, 2, NUM_PAGE_ITEMS, PAGE_INDEX, 0xD); - StartVerticalScrollIndicators(0); - StartVerticalScrollIndicators(1); - ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[ITEMS_ABOVE_TOP + PAGE_INDEX].itemId); - TASK.FUNC = ItemStorage_ProcessInput; -} - -static void ItemStorage_HandleRemoveItem(u8 taskId) -{ - s16 *data = TASK.data; - s16 oldNumItems; - - if(gMain.newKeys & A_BUTTON || gMain.newKeys == B_BUTTON) - { - RemovePCItem(PAGE_INDEX + ITEMS_ABOVE_TOP, NUM_QUANTITY_ROLLER); - oldNumItems = NUM_ITEMS; - NUM_ITEMS = CountUsedPCItemSlots(); - - if(oldNumItems != NUM_ITEMS && oldNumItems < NUM_PAGE_ITEMS + ITEMS_ABOVE_TOP && ITEMS_ABOVE_TOP != 0) - ITEMS_ABOVE_TOP--; - - ItemStorage_SetItemAndMailCount(taskId); - ItemStorage_HandleResumeProcessInput(taskId); - InitMenu(0, 16, 2, NUM_PAGE_ITEMS, PAGE_INDEX, 0xD); - } -} - -static void ItemStorage_WaitPressHandleResumeProcessInput(u8 taskId) -{ - s16 *data = TASK.data; - - if(gMain.newKeys & A_BUTTON || gMain.newKeys == B_BUTTON) - { - ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[ITEMS_ABOVE_TOP + PAGE_INDEX].itemId); - StartVerticalScrollIndicators(0); - StartVerticalScrollIndicators(1); - TASK.FUNC = ItemStorage_ProcessInput; - } -} - -static void ItemStorage_HandleResumeProcessInput(u8 taskId) -{ - MenuZeroFillWindowRect(0x6, 0x6, 0xD, 0xB); - StartVerticalScrollIndicators(0); - StartVerticalScrollIndicators(1); - ItemStorage_DrawBothListAndDescription(taskId); - TASK.FUNC = ItemStorage_ProcessInput; -} - -static void ItemStorage_DoItemSwap(u8 taskId, bool8 switchModeDisabled) -{ - s16 *data = TASK.data; - u8 trueIndex = ITEMS_ABOVE_TOP + PAGE_INDEX; - - SWITCH_MODE_ACTIVE = FALSE; - - if((u8)NUM_ITEMS > trueIndex && (u8)SWAP_ITEM_INDEX != trueIndex && switchModeDisabled == FALSE) - { - struct ItemSlot itemSlot = gSaveBlock1.pcItems[SWAP_ITEM_INDEX]; // backup the itemSlot before swapping the two. - - gSaveBlock1.pcItems[SWAP_ITEM_INDEX] = gSaveBlock1.pcItems[trueIndex]; - gSaveBlock1.pcItems[trueIndex] = itemSlot; - return; - } - else if(trueIndex == NUM_ITEMS) - { - ItemStorage_PrintItemPcResponse(ITEMPC_GO_BACK_TO_PREV); - } - else - { - ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[trueIndex].itemId); - } - - /* - THEORY: This check produces essentially dead code, but it might have been working in an earlier build - in which case it allows a programmer to easily duplicate items without the use of a debug menu. - This gets the page index of the swap index for some reason. It is currently unknown what it would have been used - for, but perhaps it was used to increase the quantity of the item without a debug menu. - With the removal of a lot of the debug menus close to release, a programmer may have added this to - help test things with a low key (such as planting a lot of duplicated berries, which requires this lazy "cheat") - without bringing the relevent debug menus back. The commented out line is intentionally left in below to show - what it may have looked like. - */ - if(SWAP_ITEM_INDEX - ITEMS_ABOVE_TOP <= 0) { // this check is arbitrary and used to generate the correct assembly using the subtraction, which is what matters. the 0 check doesn't. - //gSaveBlock1.pcItems[SWAP_ITEM_INDEX].quantity += 100; - gSaveBlock1.pcItems[SWAP_ITEM_INDEX].quantity += 0; // do not enforce item cap. - } -} - -static void ItemStorage_DrawItemQuantity(u16 arg1, enum StringConvertMode arg2, u8 arg3, u8 arg4, int isSwapSelected) -{ - sub_80A4164(gStringVar1, arg1, arg2, arg4); - - if(isSwapSelected != FALSE) - MenuPrint(gSelectedItemQuantityFormatText, 0x1A, arg3); - else - MenuPrint(gNonSelectedItemQuantityFormatText, 0x1A, arg3); -} - -static void ItemStorage_DrawItemVoidQuantity(u8 var) -{ - MenuPrint(gUnknown_08406330, 0x19, var); -} - -static void ItemStorage_DrawItemName(struct ItemSlot *itemSlot, u8 var, int isSwapSelected) -{ - CopyItemName(itemSlot->itemId, gStringVar1); - - if(isSwapSelected != FALSE) - MenuPrint(gSelectedItemFormattedText, 16, var); - else - MenuPrint(gNonSelectedItemFormattedText, 16, var); -} - -static void ItemStorage_DrawNormalItemEntry(struct ItemSlot *itemSlot, u8 var, int var2) -{ - ItemStorage_DrawItemName(itemSlot, var, var2); - ItemStorage_DrawItemQuantity(itemSlot->quantity, STR_CONV_MODE_RIGHT_ALIGN, var, 3, var2); -} - -static void ItemStorage_DrawKeyItemEntry(struct ItemSlot *itemSlot, u8 var, int var2) -{ - ItemStorage_DrawItemName(itemSlot, var, var2); - ItemStorage_DrawItemVoidQuantity(var); -} - -static void ItemStorage_DrawTMHMEntry(struct ItemSlot *itemSlot, u8 var, int var2) -{ - ItemStorage_DrawItemName(itemSlot, var, var2); - - if(itemSlot->itemId < ITEM_HM01) - ItemStorage_DrawItemQuantity(itemSlot->quantity, STR_CONV_MODE_RIGHT_ALIGN, var, 3, var2); - else - ItemStorage_DrawItemVoidQuantity(var); // HMs do not have a quantity. -} - -static void ItemStorage_DrawItemList(u8 taskId) -{ - s16 *data = TASK.data; - int tempArg; - u16 i; - u16 yCoord = 0; - - // r5 is i and is unsigned 16-bit. - - for(i = ITEMS_ABOVE_TOP; i < ITEMS_ABOVE_TOP + NUM_PAGE_ITEMS; i++) - { - yCoord = (i - ITEMS_ABOVE_TOP) * 2; - - if(i != NUM_ITEMS) - { - tempArg = 0; - - if(SWITCH_MODE_ACTIVE != FALSE && i == SWAP_ITEM_INDEX) - tempArg = 1; - - switch(GetPocketByItemId(gSaveBlock1.pcItems[i].itemId) - 1) - { - case 0: - case 1: - case 3: - ItemStorage_DrawNormalItemEntry((struct ItemSlot *)&gSaveBlock1.pcItems[i], yCoord + 2, tempArg); - break; - case 4: - ItemStorage_DrawKeyItemEntry((struct ItemSlot *)&gSaveBlock1.pcItems[i], yCoord + 2, tempArg); - break; - case 2: - ItemStorage_DrawTMHMEntry((struct ItemSlot *)&gSaveBlock1.pcItems[i], yCoord + 2, tempArg); - break; - } - } - else - { - goto weirdCase; // what??? - } - } - -beforeLabel: - if(i - ITEMS_ABOVE_TOP < 8) - MenuFillWindowRectWithBlankTile(16, yCoord + 4, 0x1C, 0x12); - - switch(ITEMS_ABOVE_TOP) - { - default: - CreateVerticalScrollIndicators(0, 0xB8, 8); - break; -weirdCase: - sub_8072A18(gOtherText_CancelNoTerminator, 0x80, (yCoord + 2) * 8, 0x68, 1); - goto beforeLabel; - case 0: - DestroyVerticalScrollIndicator(0); - break; - } - - if(ITEMS_ABOVE_TOP + NUM_PAGE_ITEMS <= NUM_ITEMS) - CreateVerticalScrollIndicators(1, 0xB8, 0x98); - else - DestroyVerticalScrollIndicator(1); -} - -static void ItemStorage_PrintItemPcResponse(u16 itemId) -{ - const u8 *string; - - switch(itemId) - { - case ITEMPC_GO_BACK_TO_PREV: - string = gMenuText_GoBackToPrev; - break; - case ITEMPC_HOW_MANY_TO_WITHDRAW: - string = gOtherText_HowManyToWithdraw; - break; - case ITEMPC_WITHDREW_THING: - string = gOtherText_WithdrewThing; - break; - case ITEMPC_HOW_MANY_TO_TOSS: - string = gOtherText_HowManyToToss; - break; - case ITEMPC_THREW_AWAY_ITEM: - string = gOtherText_ThrewAwayItem; - break; - case ITEMPC_NO_MORE_ROOM: - string = gOtherText_NoMoreRoom; - break; - case ITEMPC_TOO_IMPORTANT: - string = gOtherText_TooImportant; - break; - case ITEMPC_OKAY_TO_THROW_AWAY: - string = gOtherText_OkayToThrowAwayPrompt; - break; - case ITEMPC_SWITCH_WHICH_ITEM: - string = gOtherText_SwitchWhichItem; - break; - default: - string = ItemId_GetDescription(itemId); - break; - } - - sub_8072AB0(string, 8, 0x68, 0x68, 0x30, 1); -} - -static void ItemStorage_DrawBothListAndDescription(u8 taskId) -{ - s16 *data = TASK.data; - s16 trueIndex = ITEMS_ABOVE_TOP + PAGE_INDEX; - - ItemStorage_DrawItemList(taskId); - - if(SWITCH_MODE_ACTIVE == FALSE) - { - if(trueIndex == NUM_ITEMS) - ItemStorage_PrintItemPcResponse(ITEMPC_GO_BACK_TO_PREV); - else - ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[trueIndex].itemId); - } -} - -static void ItemStorage_GoBackToItemPCMenu(u8 taskId, u8 var) -{ - s16 *data = TASK.data; - - sub_80F944C(); - LoadScrollIndicatorPalette(); - ItemStorage_LoadPalette(); - MenuDrawTextWindow(0xF, 0, 0x1D, 0x13); - MenuDrawTextWindow(0, 0xC, 0xE, 0x13); - MenuDrawTextWindow(0, 0, 0xB, 3); - ItemStorage_PrintItemPcResponse(gSaveBlock1.pcItems[0].itemId); - MenuPrint(gPCText_ItemPCOptionsText[var].text, 1, 1); - ItemStorage_DrawItemList(taskId); - InitMenu(0, 0x10, 2, NUM_PAGE_ITEMS, PAGE_INDEX, 0xD); -} - -static void ItemStorage_LoadPalette(void) -{ - u16 arr[3]; - - memcpy(arr, gUnknown_08406334, sizeof(arr)); - LoadPalette(&arr[2], 0xDF, 2); - LoadPalette(&arr[1], 0xD1, 2); - LoadPalette(&arr[0], 0xD8, 2); -} - -static u8 GetMailboxMailCount(void) -{ - u8 i, j; - - for(i = 0, j = 6; j < 16; j++) - if(gSaveBlock1.mail[j].itemId != 0) - i++; - - return i; -} - -static void Mailbox_UpdateMailList(void) -{ - struct MailStruct mailBuffer; - u8 i, j; - - for (i=6; i<15; i++) - { - for (j=i+1; j<16; j++) - { - if (gSaveBlock1.mail[i].itemId == 0) - { - mailBuffer = gSaveBlock1.mail[i]; - gSaveBlock1.mail[i] = gSaveBlock1.mail[j]; - gSaveBlock1.mail[j] = mailBuffer; - } - } - } -} - -// WWHHHHHYYYYYYYY SOMEBODY PLEASE FIX THIS -static void Mailbox_DrawMailList(u8 taskId) // taskId is unused -{ - u16 yCoord = 0; - u16 i = gMailboxInfo.itemsAbove; - register struct MailboxStruct *tempMailbox asm("r1") = &gMailboxInfo; - register struct MailboxStruct *mailbox asm("r6"); - - if(i < i + tempMailbox->pageItems) - { - mailbox = tempMailbox; - goto forJump; - for(; i < mailbox->itemsAbove + mailbox->pageItems; i++) - { - forJump: - yCoord = (i - mailbox->itemsAbove) * 2; - MenuFillWindowRectWithBlankTile(0x15, yCoord + 2, 0x1C, yCoord + 3); - - if(i != mailbox->count) - { - StringCopy(gStringVar1, (u8 *)gSaveBlock1.mail[i + 6].playerName); - SanitizeNameString(gStringVar1); - MenuPrint(gStringVar1, 0x15, yCoord + 2); - } - else - { - goto weirdCase; // again, what??? - } - } - } - -beforeLabel: - if(i - gMailboxInfo.itemsAbove != 8) - MenuFillWindowRectWithBlankTile(0x15, yCoord + 4, 0x1C, 0x12); - - switch(gMailboxInfo.itemsAbove) - { - default: - CreateVerticalScrollIndicators(0, 0xC8, 8); - break; -weirdCase: - MenuPrint(gOtherText_CancelNoTerminator, 0x15, yCoord + 2); - goto beforeLabel; - case 0: - DestroyVerticalScrollIndicator(0); - break; - } - - if(gMailboxInfo.itemsAbove + gMailboxInfo.pageItems <= gMailboxInfo.count) - CreateVerticalScrollIndicators(1, 0xC8, 0x98); - else - DestroyVerticalScrollIndicator(1); -} - -static void Mailbox_DrawMailboxMenu(u8 taskId) -{ - sub_80F944C(); - LoadScrollIndicatorPalette(); - MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - MenuDrawTextWindow(0, 0, 0x8, 0x3); - MenuPrint(gPCText_Mailbox, 1, 1); - MenuDrawTextWindow(0x14, 0, 0x1D, 0x13); - Mailbox_DrawMailList(taskId); - InitMenu(0, 0x15, 2, gMailboxInfo.pageItems, gMailboxInfo.cursorPos, 8); -} - -// Mailbox_ProcessInput -static void Mailbox_ProcessInput(u8 taskId) -{ - if(!gPaletteFade.active) - { - if(gMain.newAndRepeatedKeys & DPAD_UP) - { - if(gMailboxInfo.cursorPos != 0) - { - PlaySE(SE_SELECT); - gMailboxInfo.cursorPos = MoveMenuCursor(-1); - } - else if(gMailboxInfo.itemsAbove != 0) - { - PlaySE(SE_SELECT); - gMailboxInfo.itemsAbove--; - Mailbox_DrawMailList(taskId); - } - } - else if(gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if(gMailboxInfo.cursorPos != gMailboxInfo.pageItems - 1) - { - PlaySE(SE_SELECT); - gMailboxInfo.cursorPos = MoveMenuCursor(1); - } - else if(gMailboxInfo.itemsAbove + gMailboxInfo.cursorPos != gMailboxInfo.count) - { - PlaySE(SE_SELECT); - gMailboxInfo.itemsAbove++; - Mailbox_DrawMailList(taskId); - } - } - else if(gMain.newKeys & A_BUTTON) - { - HandleDestroyMenuCursors(); - PlaySE(SE_SELECT); - - if(gMailboxInfo.itemsAbove + gMailboxInfo.cursorPos == gMailboxInfo.count) - { - Mailbox_TurnOff(taskId); - } - else - { - Mailbox_CloseScrollIndicators(); - TASK.FUNC = Mailbox_PrintWhatToDoWithPlayerMailText; - } - } - else if(gMain.newKeys & B_BUTTON) - { - HandleDestroyMenuCursors(); - PlaySE(SE_SELECT); - Mailbox_TurnOff(taskId); - } - } -} - -static void Mailbox_CloseScrollIndicators(void) -{ - BuyMenuFreeMemory(); - DestroyVerticalScrollIndicator(0); - DestroyVerticalScrollIndicator(1); -} - -static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId) -{ - MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - StringCopy(gStringVar1, gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos].playerName); - SanitizeNameString(gStringVar1); - StringExpandPlaceholders(gStringVar4, gOtherText_WhatWillYouDoMail); - DisplayItemMessageOnField(taskId, gStringVar4, Mailbox_PrintMailOptions, 0); -} - -static void Mailbox_ReturnToPlayerPC(u8 taskId) -{ - MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - ReshowPlayerPC(taskId); -} - -static void Mailbox_TurnOff(u8 taskId) -{ - Mailbox_CloseScrollIndicators(); - TASK.FUNC = Mailbox_ReturnToPlayerPC; -} - -static void Mailbox_PrintMailOptions(u8 taskId) // Mailbox_PrintMailOptions -{ - MenuDrawTextWindow(0, 0, 0xC, 0x9); - PrintMenuItems(1, 1, 4, (struct MenuAction *)gMailboxMailOptions); - InitMenu(0, 1, 1, 4, 0, 0xB); - TASK.FUNC = Mailbox_MailOptionsProcessInput; -} - -static void Mailbox_MailOptionsProcessInput(u8 taskId) -{ - if(gMain.newAndRepeatedKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - MoveMenuCursor(-1); - } - else if(gMain.newAndRepeatedKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - MoveMenuCursor(1); - } - else if(gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - gMailboxMailOptions[GetMenuCursorPos()].func(taskId); - } - else if(gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - Mailbox_Cancel(taskId); - } -} - -static void Mailbox_DoMailRead(u8 taskId) -{ - fade_screen(1, 0); - TASK.FUNC = Mailbox_FadeAndReadMail; -} - -static void Mailbox_FadeAndReadMail(u8 taskId) -{ - if(!gPaletteFade.active) - { - HandleReadMail(&gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos], Mailbox_ReturnToFieldFromReadMail, 1); - DestroyTask(taskId); - } -} - -static void Mailbox_HandleReturnToProcessInput(u8 taskId) // Mailbox_HandleReturnToProcessInput -{ - if(sub_807D770() == TRUE) // is black fade finished? why not gPaletteFade.active? - TASK.FUNC = Mailbox_ProcessInput; -} - -static void Mailbox_DoRedrawMailboxMenuAfterReturn(void) -{ - Mailbox_DrawMailboxMenu(CreateTask(Mailbox_HandleReturnToProcessInput, 0)); - pal_fill_black(); -} - -static void Mailbox_ReturnToFieldFromReadMail(void) -{ - gFieldCallback = Mailbox_DoRedrawMailboxMenuAfterReturn; - SetMainCallback2(c2_exit_to_overworld_2_switch); -} - -static void Mailbox_MoveToBag(u8 taskId) -{ - HandleDestroyMenuCursors(); - StringCopy(gStringVar1, gOtherText_MoveToBag); - MenuPrint(gHighlightedMoveToBagFormatText, 1, 3); // gHighlightedMoveToBagFormatText - DisplayItemMessageOnField(taskId, gOtherText_MessageWillBeLost, Mailbox_DrawYesNoBeforeMove, 0); -} - -static void Mailbox_DrawYesNoBeforeMove(u8 taskId) -{ - DisplayYesNoMenu(0x14, 0x8, 0x1); - DoYesNoFuncWithChoice(taskId, (struct YesNoFuncTable *)&ResumeFromWithdrawYesNoFuncList); -} - -static void Mailbox_DoMailMoveToBag(u8 taskId) -{ - struct MailStruct *mail = &gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos]; - - MenuZeroFillWindowRect(0x14, 8, 0x1A, 0xD); - - if(AddBagItem(mail->itemId, 1) == FALSE) - { - DisplayItemMessageOnField(taskId, gOtherText_BagIsFull, Mailbox_DrawMailMenuAndDoProcessInput, 0); - } - else - { - DisplayItemMessageOnField(taskId, gOtherText_MailWasReturned, Mailbox_DrawMailMenuAndDoProcessInput, 0); - ClearMailStruct(mail); - Mailbox_UpdateMailList(); - - gMailboxInfo.count--; - - if(gMailboxInfo.count < gMailboxInfo.pageItems + gMailboxInfo.itemsAbove && gMailboxInfo.itemsAbove != 0) - gMailboxInfo.itemsAbove--; - - ItemStorage_SetItemAndMailCount(taskId); - } -} - -static void Mailbox_ReturnToInputAfterNo(u8 taskId) // Mailbox_ReturnToInputAfterNo -{ - MenuZeroFillWindowRect(0x14, 0x8, 0x1A, 0xD); - Mailbox_DrawMailMenuAndDoProcessInput(taskId); -} - -static void Mailbox_Give(u8 taskId) -{ - if(CalculatePlayerPartyCount() == 0) - Mailbox_NoPokemonForMail(taskId); // cannot be reached normally - else - { - fade_screen(1, 0); - TASK.FUNC = Mailbox_DoGiveMailPokeMenu; - } -} - -static void Mailbox_DoGiveMailPokeMenu(u8 taskId) // Mailbox_DoGiveMailPokeMenu -{ - if(!gPaletteFade.active) - { - SetMainCallback2(sub_808B020); - gUnknown_02038561 = 3; - DestroyTask(taskId); - } -} - -static void Mailbox_UpdateMailListAfterDeposit(void) -{ - u8 taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0); - u8 oldCount = gMailboxInfo.count; - - gMailboxInfo.count = GetMailboxMailCount(); - Mailbox_UpdateMailList(); - - if(oldCount != gMailboxInfo.count && gMailboxInfo.count < gMailboxInfo.pageItems + gMailboxInfo.itemsAbove && gMailboxInfo.itemsAbove != 0) // did the count update? - gMailboxInfo.itemsAbove--; - - ItemStorage_SetItemAndMailCount(taskId); - Mailbox_DrawMailboxMenu(taskId); - pal_fill_black(); -} - -void Mailbox_ReturnToMailListAfterDeposit(void) -{ - gFieldCallback = Mailbox_UpdateMailListAfterDeposit; - SetMainCallback2(c2_exit_to_overworld_2_switch); -} - -// you always have at least 1 POKeMON and you cannot receive mail before you leave Littleroot: therefore this function cannot be reached normally. -static void Mailbox_NoPokemonForMail(u8 taskId) -{ - DisplayItemMessageOnField(taskId, gOtherText_NoPokemon, Mailbox_DrawMailMenuAndDoProcessInput, 0); -} - -static void Mailbox_Cancel(u8 taskId) -{ - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(0, 0, 0xC, 0x9); - Mailbox_DrawMailMenuAndDoProcessInput(taskId); -} - -static void Mailbox_DrawMailMenuAndDoProcessInput(u8 taskId) -{ - Mailbox_DrawMailboxMenu(taskId); - TASK.FUNC = Mailbox_ProcessInput; -} diff --git a/src/pokeball.c b/src/pokeball.c deleted file mode 100644 index ee3b95678..000000000 --- a/src/pokeball.c +++ /dev/null @@ -1,1193 +0,0 @@ -#include "global.h" -#include "gba/m4a_internal.h" -#include "battle.h" -#include "decompress.h" -#include "graphics.h" -#include "m4a.h" -#include "main.h" -#include "pokeball.h" -#include "pokemon.h" -#include "rom_8077ABC.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "task.h" -#include "trig.h" -#include "util.h" - -extern struct MusicPlayerInfo gMPlay_BGM; -extern u16 gBattleTypeFlags; -extern u8 gBankTarget; -extern u8 gActiveBank; -extern u16 gBattlePartyID[]; -extern u8 gObjectBankIDs[]; -extern u8 gDoingBattleAnim; -extern u8 gHealthboxIDs[]; - -#define GFX_TAG_POKEBALL 55000 -#define GFX_TAG_GREATBALL 55001 -#define GFX_TAG_SAFARIBALL 55002 -#define GFX_TAG_ULTRABALL 55003 -#define GFX_TAG_MASTERBALL 55004 -#define GFX_TAG_NETBALL 55005 -#define GFX_TAG_DIVEBALL 55006 -#define GFX_TAG_NESTBALL 55007 -#define GFX_TAG_REPEATBALL 55008 -#define GFX_TAG_TIMERBALL 55009 -#define GFX_TAG_LUXURYBALL 55010 -#define GFX_TAG_PREMIERBALL 55011 - -static const struct CompressedSpriteSheet sBallSpriteSheets[] = -{ - {gInterfaceGfx_PokeBall, 384, GFX_TAG_POKEBALL}, - {gInterfaceGfx_GreatBall, 384, GFX_TAG_GREATBALL}, - {gInterfaceGfx_SafariBall, 384, GFX_TAG_SAFARIBALL}, - {gInterfaceGfx_UltraBall, 384, GFX_TAG_ULTRABALL}, - {gInterfaceGfx_MasterBall, 384, GFX_TAG_MASTERBALL}, - {gInterfaceGfx_NetBall, 384, GFX_TAG_NETBALL}, - {gInterfaceGfx_DiveBall, 384, GFX_TAG_DIVEBALL}, - {gInterfaceGfx_NestBall, 384, GFX_TAG_NESTBALL}, - {gInterfaceGfx_RepeatBall, 384, GFX_TAG_REPEATBALL}, - {gInterfaceGfx_TimerBall, 384, GFX_TAG_TIMERBALL}, - {gInterfaceGfx_LuxuryBall, 384, GFX_TAG_LUXURYBALL}, - {gInterfaceGfx_PremierBall, 384, GFX_TAG_PREMIERBALL}, -}; - -static const struct CompressedSpritePalette sBallSpritePalettes[] = -{ - {gInterfacePal_PokeBall, GFX_TAG_POKEBALL}, - {gInterfacePal_GreatBall, GFX_TAG_GREATBALL}, - {gInterfacePal_SafariBall, GFX_TAG_SAFARIBALL}, - {gInterfacePal_UltraBall, GFX_TAG_ULTRABALL}, - {gInterfacePal_MasterBall, GFX_TAG_MASTERBALL}, - {gInterfacePal_NetBall, GFX_TAG_NETBALL}, - {gInterfacePal_DiveBall, GFX_TAG_DIVEBALL}, - {gInterfacePal_NestBall, GFX_TAG_NESTBALL}, - {gInterfacePal_RepeatBall, GFX_TAG_REPEATBALL}, - {gInterfacePal_TimerBall, GFX_TAG_TIMERBALL}, - {gInterfacePal_LuxuryBall, GFX_TAG_LUXURYBALL}, - {gInterfacePal_PremierBall, GFX_TAG_PREMIERBALL}, -}; - -static const struct OamData sBallOamData = -{ - .y = 0, - .affineMode = 3, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sBallAnimSeq3[] = -{ - ANIMCMD_FRAME(0, 5), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sBallAnimSeq5[] = -{ - ANIMCMD_FRAME(4, 1), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sBallAnimSeq4[] = -{ - ANIMCMD_FRAME(8, 5), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sBallAnimSeq6[] = -{ - ANIMCMD_FRAME(12, 1), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sBallAnimSeq0[] = -{ - ANIMCMD_FRAME(0, 1), - ANIMCMD_END, -}; - -static const union AnimCmd sBallAnimSeq1[] = -{ - ANIMCMD_FRAME(4, 5), - ANIMCMD_FRAME(8, 5), - ANIMCMD_END, -}; - -static const union AnimCmd sBallAnimSeq2[] = -{ - ANIMCMD_FRAME(4, 5), - ANIMCMD_FRAME(0, 5), - ANIMCMD_END, -}; - -static const union AnimCmd *const sBallAnimSequences[] = -{ - sBallAnimSeq0, - sBallAnimSeq1, - sBallAnimSeq2, - - // unused? - sBallAnimSeq3, - sBallAnimSeq4, - sBallAnimSeq5, - sBallAnimSeq6, -}; - -static const union AffineAnimCmd sBallAffineAnimSeq0[] = -{ - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_JUMP(0), -}; - -static const union AffineAnimCmd sBallAffineAnimSeq1[] = -{ - AFFINEANIMCMD_FRAME(0, 0, -3, 1), - AFFINEANIMCMD_JUMP(0), -}; - -static const union AffineAnimCmd sBallAffineAnimSeq2[] = -{ - AFFINEANIMCMD_FRAME(0, 0, 3, 1), - AFFINEANIMCMD_JUMP(0), -}; - -static const union AffineAnimCmd sBallAffineAnimSeq3[] = -{ - AFFINEANIMCMD_FRAME(256, 256, 0, 0), - AFFINEANIMCMD_END, -}; - -static const union AffineAnimCmd sBallAffineAnimSeq4[] = -{ - AFFINEANIMCMD_FRAME(0, 0, 25, 1), - AFFINEANIMCMD_JUMP(0), -}; - -static const union AffineAnimCmd *const sBallAffineAnimSequences[] = -{ - sBallAffineAnimSeq0, - sBallAffineAnimSeq1, - sBallAffineAnimSeq2, - sBallAffineAnimSeq3, - sBallAffineAnimSeq4, -}; - -static void objc_0804ABD4(struct Sprite *sprite); -const struct SpriteTemplate gBallSpriteTemplates[] = -{ - { - .tileTag = GFX_TAG_POKEBALL, - .paletteTag = GFX_TAG_POKEBALL, - .oam = &sBallOamData, - .anims = sBallAnimSequences, - .images = NULL, - .affineAnims = sBallAffineAnimSequences, - .callback = objc_0804ABD4, - }, - { - .tileTag = GFX_TAG_GREATBALL, - .paletteTag = GFX_TAG_GREATBALL, - .oam = &sBallOamData, - .anims = sBallAnimSequences, - .images = NULL, - .affineAnims = sBallAffineAnimSequences, - .callback = objc_0804ABD4, - }, - { - .tileTag = GFX_TAG_SAFARIBALL, - .paletteTag = GFX_TAG_SAFARIBALL, - .oam = &sBallOamData, - .anims = sBallAnimSequences, - .images = NULL, - .affineAnims = sBallAffineAnimSequences, - .callback = objc_0804ABD4, - }, - { - .tileTag = GFX_TAG_ULTRABALL, - .paletteTag = GFX_TAG_ULTRABALL, - .oam = &sBallOamData, - .anims = sBallAnimSequences, - .images = NULL, - .affineAnims = sBallAffineAnimSequences, - .callback = objc_0804ABD4, - }, - { - .tileTag = GFX_TAG_MASTERBALL, - .paletteTag = GFX_TAG_MASTERBALL, - .oam = &sBallOamData, - .anims = sBallAnimSequences, - .images = NULL, - .affineAnims = sBallAffineAnimSequences, - .callback = objc_0804ABD4, - }, - { - .tileTag = GFX_TAG_NETBALL, - .paletteTag = GFX_TAG_NETBALL, - .oam = &sBallOamData, - .anims = sBallAnimSequences, - .images = NULL, - .affineAnims = sBallAffineAnimSequences, - .callback = objc_0804ABD4, - }, - { - .tileTag = GFX_TAG_DIVEBALL, - .paletteTag = GFX_TAG_DIVEBALL, - .oam = &sBallOamData, - .anims = sBallAnimSequences, - .images = NULL, - .affineAnims = sBallAffineAnimSequences, - .callback = objc_0804ABD4, - }, - { - .tileTag = GFX_TAG_NESTBALL, - .paletteTag = GFX_TAG_NESTBALL, - .oam = &sBallOamData, - .anims = sBallAnimSequences, - .images = NULL, - .affineAnims = sBallAffineAnimSequences, - .callback = objc_0804ABD4, - }, - { - .tileTag = GFX_TAG_REPEATBALL, - .paletteTag = GFX_TAG_REPEATBALL, - .oam = &sBallOamData, - .anims = sBallAnimSequences, - .images = NULL, - .affineAnims = sBallAffineAnimSequences, - .callback = objc_0804ABD4, - }, - { - .tileTag = GFX_TAG_TIMERBALL, - .paletteTag = GFX_TAG_TIMERBALL, - .oam = &sBallOamData, - .anims = sBallAnimSequences, - .images = NULL, - .affineAnims = sBallAffineAnimSequences, - .callback = objc_0804ABD4, - }, - { - .tileTag = GFX_TAG_LUXURYBALL, - .paletteTag = GFX_TAG_LUXURYBALL, - .oam = &sBallOamData, - .anims = sBallAnimSequences, - .images = NULL, - .affineAnims = sBallAffineAnimSequences, - .callback = objc_0804ABD4, - }, - { - .tileTag = GFX_TAG_PREMIERBALL, - .paletteTag = GFX_TAG_PREMIERBALL, - .oam = &sBallOamData, - .anims = sBallAnimSequences, - .images = NULL, - .affineAnims = sBallAffineAnimSequences, - .callback = objc_0804ABD4, - }, -}; - -extern u32 ball_number_to_ball_processing_index(u16); // not sure of return type -extern void sub_80786EC(); -extern bool8 sub_8078718(struct Sprite *); -extern u8 sub_814086C(u8, u8, int, int, u8); -extern u8 sub_8141314(u8, u8, int, u8); - -static void sub_8046464(u8); -static void sub_80466E8(struct Sprite *); -static void sub_80466F4(struct Sprite *); -static void sub_8046760(struct Sprite *); -static void sub_80467F8(struct Sprite *); -static void sub_804684C(struct Sprite *); -static void sub_8046944(struct Sprite *); -static void sub_8046984(struct Sprite *); -static void sub_8046C78(struct Sprite *); -static void sub_8046E7C(struct Sprite *); -static void sub_8046E9C(struct Sprite *); -static void sub_8046FBC(struct Sprite *); -static void sub_8047074(struct Sprite *); -static void sub_80470C4(struct Sprite *); -static void sub_8047230(struct Sprite *); -static void sub_8047254(struct Sprite *); -static void sub_80473D0(struct Sprite *); -static void sub_804748C(struct Sprite *); -static void sub_8047638(struct Sprite *); -static void sub_80476E0(struct Sprite *); -static void sub_8047754(struct Sprite *); -static void sub_804780C(struct Sprite *); -static void sub_8047830(struct Sprite *); -static void oamc_804BEB4(struct Sprite *); -static u16 sub_8047978(u8); - -u8 sub_8046400(u16 a, u8 b) -{ - u8 taskId; - - gDoingBattleAnim = 1; - ewram17810[gActiveBank].unk0_3 = 1; - taskId = CreateTask(sub_8046464, 5); - gTasks[taskId].data[1] = a; - gTasks[taskId].data[2] = b; - gTasks[taskId].data[3] = gActiveBank; - return 0; -} - -static void sub_8046464(u8 taskId) -{ - bool8 sp0 = FALSE; - u16 r8; - u8 r5; - u16 ball; - u8 r4; - u8 spriteId; - - if (gTasks[taskId].data[0] == 0) - { - gTasks[taskId].data[0]++; - return; - } - r8 = gTasks[taskId].data[2]; - r5 = gTasks[taskId].data[3]; - if (GetBankSide(r5) != 0) - ball = GetMonData(&gEnemyParty[gBattlePartyID[r5]], MON_DATA_POKEBALL); - else - ball = GetMonData(&gPlayerParty[gBattlePartyID[r5]], MON_DATA_POKEBALL); - r4 = ball_number_to_ball_processing_index(ball); - sub_80478DC(r4); - spriteId = CreateSprite(&gBallSpriteTemplates[r4], 32, 80, 0x1D); - gSprites[spriteId].data0 = 0x80; - gSprites[spriteId].data1 = 0; - gSprites[spriteId].data7 = r8; - switch (r8) - { - case 0xFF: - gBankTarget = r5; - gSprites[spriteId].pos1.x = 24; - gSprites[spriteId].pos1.y = 68; - gSprites[spriteId].callback = sub_8047074; - break; - case 0xFE: - gSprites[spriteId].pos1.x = sub_8077ABC(r5, 0); - gSprites[spriteId].pos1.y = sub_8077ABC(r5, 1) + 24; - gBankTarget = r5; - gSprites[spriteId].data0 = 0; - gSprites[spriteId].callback = sub_8047254; - break; - default: - gBankTarget = GetBankByPlayerAI(1); - sp0 = TRUE; - break; - } - gSprites[spriteId].data6 = gBankTarget; - if (!sp0) - { - DestroyTask(taskId); - return; - } - gSprites[spriteId].data0 = 0x22; - gSprites[spriteId].data2 = sub_8077ABC(gBankTarget, 0); - gSprites[spriteId].data4 = sub_8077ABC(gBankTarget, 1) - 16; - gSprites[spriteId].data5 = -40; - sub_80786EC(&gSprites[spriteId]); - gSprites[spriteId].oam.affineParam = taskId; - gTasks[taskId].data[4] = gBankTarget; - gTasks[taskId].func = TaskDummy; - PlaySE(SE_NAGERU); -} - -static void objc_0804ABD4(struct Sprite *sprite) -{ - if (sub_8078718(sprite)) - { - u8 taskId = sprite->oam.affineParam; - u8 r5 = gTasks[taskId].data[4]; - u8 r8 = gTasks[taskId].data[2]; - u32 r4; // not sure of this type - - StartSpriteAnim(sprite, 1); - sprite->affineAnimPaused = TRUE; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data5 = 0; - r4 = ball_number_to_ball_processing_index(sub_8047978(r5)); - sub_814086C(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, r4); - sprite->data0 = sub_8141314(0, r5, 14, r4); - sprite->data6 = r5; - sprite->data7 = r8; - DestroyTask(taskId); - sprite->callback = sub_80466E8; - } -} - -static void sub_80466E8(struct Sprite *sprite) -{ - sprite->callback = sub_80466F4; -} - -static void sub_80466F4(struct Sprite *sprite) -{ - sprite->data5++; - if (sprite->data5 == 10) - { - sprite->data5 = 0; - sprite->callback = sub_8046760; - StartSpriteAffineAnim(&gSprites[gObjectBankIDs[sprite->data6]], 2); - AnimateSprite(&gSprites[gObjectBankIDs[sprite->data6]]); - gSprites[gObjectBankIDs[sprite->data6]].data1 = 0; - } -} - -static void sub_8046760(struct Sprite *sprite) -{ - sprite->data5++; - if (sprite->data5 == 11) - PlaySE(SE_SUIKOMU); - if (gSprites[gObjectBankIDs[sprite->data6]].affineAnimEnded) - { - StartSpriteAnim(sprite, 2); - gSprites[gObjectBankIDs[sprite->data6]].invisible = TRUE; - sprite->data5 = 0; - sprite->callback = sub_80467F8; - } - else - { - gSprites[gObjectBankIDs[sprite->data6]].data1 += 0x60; - gSprites[gObjectBankIDs[sprite->data6]].pos2.y = -gSprites[gObjectBankIDs[sprite->data6]].data1 >> 8; - } -} - -static void sub_80467F8(struct Sprite *sprite) -{ - if (sprite->animEnded) - { - sprite->data5++; - if (sprite->data5 == 1) - { - sprite->data3 = 0; - sprite->data4 = 32; - sprite->data5 = 0; - sprite->pos1.y += Cos(0, 32); - sprite->pos2.y = -Cos(0, sprite->data4); - sprite->callback = sub_804684C; - } - } -} - -static void sub_804684C(struct Sprite *sprite) -{ - bool8 r5 = FALSE; - - switch (sprite->data3 & 0xFF) - { - case 0: - sprite->pos2.y = -Cos(sprite->data5, sprite->data4); - sprite->data5 += 4 + (sprite->data3 >> 8); - if (sprite->data5 >= 64) - { - sprite->data4 -= 10; - sprite->data3 += 0x101; - if (sprite->data3 >> 8 == 4) - r5 = TRUE; - switch (sprite->data3 >> 8) - { - case 1: - PlaySE(SE_KON); - break; - case 2: - PlaySE(SE_KON2); - break; - case 3: - PlaySE(SE_KON3); - break; - default: - PlaySE(SE_KON4); - break; - } - } - break; - case 1: - sprite->pos2.y = -Cos(sprite->data5, sprite->data4); - sprite->data5 -= 4 + (sprite->data3 >> 8); - if (sprite->data5 <= 0) - { - sprite->data5 = 0; - sprite->data3 &= 0xFF00; - } - break; - } - if (r5) - { - sprite->data3 = 0; - sprite->pos1.y += Cos(64, 32); - sprite->pos2.y = 0; - if (sprite->data7 == 0) - { - sprite->callback = sub_8046C78; - } - else - { - sprite->callback = sub_8046944; - sprite->data4 = 1; - sprite->data5 = 0; - } - } -} - -static void sub_8046944(struct Sprite *sprite) -{ - sprite->data3++; - if (sprite->data3 == 31) - { - sprite->data3 = 0; - sprite->affineAnimPaused = TRUE; - StartSpriteAffineAnim(sprite, 1); - sprite->callback = sub_8046984; - PlaySE(SE_BOWA); - } -} - -static void sub_8046984(struct Sprite *sprite) -{ - switch (sprite->data3 & 0xFF) - { - case 0: - case 2: - sprite->pos2.x += sprite->data4; - sprite->data5 += sprite->data4; - sprite->affineAnimPaused = FALSE; - if (sprite->data5 > 3 || sprite->data5 < -3) - { - sprite->data3++; - sprite->data5 = 0; - } - break; - case 1: - sprite->data5++; - if (sprite->data5 == 1) - { - sprite->data5 = 0; - sprite->data4 = -sprite->data4; - sprite->data3++; - sprite->affineAnimPaused = FALSE; - if (sprite->data4 < 0) - ChangeSpriteAffineAnim(sprite, 2); - else - ChangeSpriteAffineAnim(sprite, 1); - } - else - { - sprite->affineAnimPaused = TRUE; - } - break; - case 3: - sprite->data3 += 0x100; - if (sprite->data3 >> 8 == sprite->data7) - { - sprite->callback = sub_8046C78; - } - else - { - if (sprite->data7 == 4 && sprite->data3 >> 8 == 3) - { - sprite->callback = sub_8046E7C; - sprite->affineAnimPaused = TRUE; - } - else - { - sprite->data3++; - sprite->affineAnimPaused = TRUE; - } - } - break; - case 4: - default: - sprite->data5++; - if (sprite->data5 == 31) - { - sprite->data5 = 0; - sprite->data3 &= 0xFF00; - StartSpriteAffineAnim(sprite, 3); - if (sprite->data4 < 0) - StartSpriteAffineAnim(sprite, 2); - else - StartSpriteAffineAnim(sprite, 1); - PlaySE(SE_BOWA); - } - break; - } -} - -static void sub_8046AD0(u8 taskId) -{ - u8 r6 = gTasks[taskId].data[2]; - u8 r3 = gTasks[taskId].data[1]; - u16 species = gTasks[taskId].data[0]; - - switch (gTasks[taskId].data[15]) - { - case 0: - default: - if (gTasks[taskId].data[8] < 3) - gTasks[taskId].data[8]++; - else - gTasks[taskId].data[15] = r6 + 1; - break; - case 1: - PlayCry1(species, r3); - DestroyTask(taskId); - break; - case 2: - StopCryAndClearCrySongs(); - gTasks[taskId].data[10] = 3; - gTasks[taskId].data[15] = 20; - break; - case 20: - if (gTasks[taskId].data[10] != 0) - { - gTasks[taskId].data[10]--; - break; - } - PlayCry4(species, r3, 1); - DestroyTask(taskId); - break; - case 3: - gTasks[taskId].data[10] = 6; - gTasks[taskId].data[15] = 30; - break; - case 30: - if (gTasks[taskId].data[10] != 0) - { - gTasks[taskId].data[10]--; - break; - } - gTasks[taskId].data[15]++; - // fall through - case 31: - if (!IsCryPlayingOrClearCrySongs()) - { - StopCryAndClearCrySongs(); - gTasks[taskId].data[10] = 3; - gTasks[taskId].data[15]++; - } - break; - case 32: - if (gTasks[taskId].data[10] != 0) - { - gTasks[taskId].data[10]--; - break; - } - PlayCry4(species, r3, 0); - DestroyTask(taskId); - break; - } -} - -static void sub_8046C78(struct Sprite *sprite) -{ - u8 r5 = sprite->data6; - u32 r4; // not sure of this type - - StartSpriteAnim(sprite, 1); - r4 = ball_number_to_ball_processing_index(sub_8047978(r5)); - sub_814086C(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, r4); - sprite->data0 = sub_8141314(1, sprite->data6, 14, r4); - sprite->callback = sub_8046E9C; - if (gMain.inBattle) - { - struct Pokemon *pkmn; - u16 species; - s8 r8; - u16 r4_2; - u8 taskId; - - if (GetBankSide(r5) != 0) - { - pkmn = &gEnemyParty[gBattlePartyID[r5]]; - r8 = 25; - } - else - { - pkmn = &gPlayerParty[gBattlePartyID[r5]]; - r8 = -25; - } - species = GetMonData(pkmn, MON_DATA_SPECIES); - if ((r5 == GetBankByPlayerAI(0) || r5 == GetBankByPlayerAI(1)) - && IsDoubleBattle() && ewram17840.unk9_0) - { - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - if (IsBGMPlaying()) - m4aMPlayStop(&gMPlay_BGM); - } - else - { - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 128); - } - } - if (!IsDoubleBattle() || !ewram17840.unk9_0) - r4_2 = 0; - else if (r5 == GetBankByPlayerAI(0) || r5 == GetBankByPlayerAI(1)) - r4_2 = 1; - else - r4_2 = 2; - taskId = CreateTask(sub_8046AD0, 3); - gTasks[taskId].data[0] = species; - gTasks[taskId].data[1] = r8; - gTasks[taskId].data[2] = r4_2; - gTasks[taskId].data[15] = 0; - } - StartSpriteAffineAnim(&gSprites[gObjectBankIDs[sprite->data6]], 1); - AnimateSprite(&gSprites[gObjectBankIDs[sprite->data6]]); - gSprites[gObjectBankIDs[sprite->data6]].data1 = 0x1000; -} - -static void sub_8046E7C(struct Sprite *sprite) -{ - sprite->animPaused = TRUE; - sprite->callback = sub_8046FBC; - sprite->data3 = 0; - sprite->data4 = 0; - sprite->data5 = 0; -} - -static void sub_8046E9C(struct Sprite *sprite) -{ - bool8 r7 = FALSE; - u8 r4 = sprite->data6; - - gSprites[gObjectBankIDs[r4]].invisible = FALSE; - if (sprite->animEnded) - sprite->invisible = TRUE; - if (gSprites[gObjectBankIDs[r4]].affineAnimEnded) - { - StartSpriteAffineAnim(&gSprites[gObjectBankIDs[r4]], 0); - r7 = TRUE; - } - else - { - gSprites[gObjectBankIDs[r4]].data1 -= 288; - gSprites[gObjectBankIDs[r4]].pos2.y = gSprites[gObjectBankIDs[r4]].data1 >> 8; - } - if (sprite->animEnded && r7) - { - s32 i; - u32 r3; - - gSprites[gObjectBankIDs[r4]].pos2.y = 0; - gDoingBattleAnim = 0; - ewram17810[r4].unk0_3 = 0; - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); - for (r3 = 0, i = 0; i < 4; i++) - { - if (ewram17810[i].unk0_3 == 0) - r3++; - } - if (r3 == 4) - { - for (i = 0; i < 12; i++) - sub_804794C(i); - } - } -} - -static void sub_8046FBC(struct Sprite *sprite) -{ - u8 r7 = sprite->data6; - - sprite->data4++; - if (sprite->data4 == 40) - { - return; - } - else if (sprite->data4 == 95) - { - gDoingBattleAnim = 0; - m4aMPlayAllStop(); - PlaySE(BGM_FANFA5); - } - else if (sprite->data4 == 315) - { - FreeOamMatrix(gSprites[gObjectBankIDs[sprite->data6]].oam.matrixNum); - DestroySprite(&gSprites[gObjectBankIDs[sprite->data6]]); - DestroySpriteAndFreeResources(sprite); - if (gMain.inBattle) - ewram17810[r7].unk0_3 = 0; - } -} - -static void sub_8047074(struct Sprite *sprite) -{ - sprite->data0 = 25; - sprite->data2 = sub_8077ABC(sprite->data6, 2); - sprite->data4 = sub_8077ABC(sprite->data6, 3) + 24; - sprite->data5 = -30; - sprite->oam.affineParam = sprite->data6; - sub_80786EC(sprite); - sprite->callback = sub_80470C4; -} - -#define HIBYTE(x) (((x) >> 8) & 0xFF) - -static void sub_80470C4(struct Sprite *sprite) -{ - u32 r6; - u32 r7; - - if (HIBYTE(sprite->data7) >= 35 && HIBYTE(sprite->data7) < 80) - { - s16 r4; - - if ((sprite->oam.affineParam & 0xFF00) == 0) - { - r6 = sprite->data1 & 1; - r7 = sprite->data2 & 1; - sprite->data1 = ((sprite->data1 / 3) & ~1) | r6; - sprite->data2 = ((sprite->data2 / 3) & ~1) | r7; - StartSpriteAffineAnim(sprite, 4); - } - r4 = sprite->data0; - sub_8078B5C(sprite); - sprite->data7 += sprite->data6 / 3; - sprite->pos2.y += Sin(HIBYTE(sprite->data7), sprite->data5); - sprite->oam.affineParam += 0x100; - if ((sprite->oam.affineParam >> 8) % 3 != 0) - sprite->data0 = r4; - else - sprite->data0 = r4 - 1; - if (HIBYTE(sprite->data7) >= 80) - { - r6 = sprite->data1 & 1; - r7 = sprite->data2 & 1; - sprite->data1 = ((sprite->data1 * 3) & ~1) | r6; - sprite->data2 = ((sprite->data2 * 3) & ~1) | r7; - } - } - else - { - if (sub_8078718(sprite)) - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - sprite->data6 = sprite->oam.affineParam & 0xFF; - sprite->data0 = 0; - if (IsDoubleBattle() && ewram17840.unk9_0 - && sprite->data6 == GetBankByPlayerAI(2)) - sprite->callback = sub_8047230; - else - sprite->callback = sub_8046C78; - StartSpriteAffineAnim(sprite, 0); - } - } -} - -static void sub_8047230(struct Sprite *sprite) -{ - if (sprite->data0++ > 24) - { - sprite->data0 = 0; - sprite->callback = sub_8046C78; - } -} - -static void sub_8047254(struct Sprite *sprite) -{ - sprite->data0++; - if (sprite->data0 > 15) - { - sprite->data0 = 0; - if (IsDoubleBattle() && ewram17840.unk9_0 - && sprite->data6 == GetBankByPlayerAI(3)) - sprite->callback = sub_8047230; - else - sprite->callback = sub_8046C78; - } -} - -static u8 sub_80472B0(u8 a, u8 b, u8 c, u8 d) -{ - return sub_814086C(a, b, c, d, 0); -} - -static u8 sub_80472D8(u8 a, u8 b, u32 c) -{ - return sub_8141314(a, b, c, 0); -} - -void CreatePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 e, u8 f, u8 g, u32 h) -{ - u8 spriteId; - - LoadCompressedObjectPic(&sBallSpriteSheets[0]); - LoadCompressedObjectPalette(&sBallSpritePalettes[0]); - spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, f); - gSprites[spriteId].data0 = a; - gSprites[spriteId].data5 = gSprites[a].pos1.x; - gSprites[spriteId].data6 = gSprites[a].pos1.y; - gSprites[a].pos1.x = x; - gSprites[a].pos1.y = y; - gSprites[spriteId].data1 = g; - gSprites[spriteId].data2 = b; - gSprites[spriteId].data3 = h; - gSprites[spriteId].data4 = h >> 16; - gSprites[spriteId].oam.priority = e; - gSprites[spriteId].callback = sub_80473D0; - gSprites[a].invisible = TRUE; -} - -static void sub_80473D0(struct Sprite *sprite) -{ - if (sprite->data1 == 0) - { - u8 r5; - u8 r7 = sprite->data0; - u8 r8 = sprite->data2; - u32 r4 = (u16)sprite->data3 | ((u16)sprite->data4 << 16); - - if (sprite->subpriority != 0) - r5 = sprite->subpriority - 1; - else - r5 = 0; - StartSpriteAnim(sprite, 1); - sub_80472B0(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5); - sprite->data1 = sub_80472D8(1, r8, r4); - sprite->callback = sub_804748C; - gSprites[r7].invisible = FALSE; - StartSpriteAffineAnim(&gSprites[r7], 1); - AnimateSprite(&gSprites[r7]); - gSprites[r7].data1 = 0x1000; - sprite->data7 = 0; - } - else - { - sprite->data1--; - } -} - -static void sub_804748C(struct Sprite *sprite) -{ - bool8 r12 = FALSE; - bool8 r6 = FALSE; - u8 r3 = sprite->data0; - u16 var1; - u16 var2; - - if (sprite->animEnded) - sprite->invisible = TRUE; - if (gSprites[r3].affineAnimEnded) - { - StartSpriteAffineAnim(&gSprites[r3], 0); - r12 = TRUE; - } - var1 = (sprite->data5 - sprite->pos1.x) * sprite->data7 / 128 + sprite->pos1.x; - var2 = (sprite->data6 - sprite->pos1.y) * sprite->data7 / 128 + sprite->pos1.y; - gSprites[r3].pos1.x = var1; - gSprites[r3].pos1.y = var2; - if (sprite->data7 < 128) - { - s16 sine = -(gSineTable[(u8)sprite->data7] / 8); - - sprite->data7 += 4; - gSprites[r3].pos2.x = sine; - gSprites[r3].pos2.y = sine; - } - else - { - gSprites[r3].pos1.x = sprite->data5; - gSprites[r3].pos1.y = sprite->data6; - gSprites[r3].pos2.x = 0; - gSprites[r3].pos2.y = 0; - r6 = TRUE; - } - if (sprite->animEnded && r12 && r6) - DestroySpriteAndFreeResources(sprite); -} - -u8 sub_8047580(u8 a, u8 b, u8 x, u8 y, u8 e, u8 f, u8 g, u32 h) -{ - u8 spriteId; - - LoadCompressedObjectPic(&sBallSpriteSheets[0]); - LoadCompressedObjectPalette(&sBallSpritePalettes[0]); - spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, f); - gSprites[spriteId].data0 = a; - gSprites[spriteId].data1 = g; - gSprites[spriteId].data2 = b; - gSprites[spriteId].data3 = h; - gSprites[spriteId].data4 = h >> 16; - gSprites[spriteId].oam.priority = e; - gSprites[spriteId].callback = sub_8047638; - return spriteId; -} - -static void sub_8047638(struct Sprite *sprite) -{ - if (sprite->data1 == 0) - { - u8 r6; - u8 r7 = sprite->data0; - u8 r8 = sprite->data2; - u32 r5 = (u16)sprite->data3 | ((u16)sprite->data4 << 16); - - if (sprite->subpriority != 0) - r6 = sprite->subpriority - 1; - else - r6 = 0; - StartSpriteAnim(sprite, 1); - sub_80472B0(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r6); - sprite->data1 = sub_80472D8(1, r8, r5); - sprite->callback = sub_80476E0; - StartSpriteAffineAnim(&gSprites[r7], 2); - AnimateSprite(&gSprites[r7]); - gSprites[r7].data1 = 0; - } - else - { - sprite->data1--; - } -} - -static void sub_80476E0(struct Sprite *sprite) -{ - u8 r1; - - sprite->data5++; - if (sprite->data5 == 11) - PlaySE(SE_SUIKOMU); - r1 = sprite->data0; - if (gSprites[r1].affineAnimEnded) - { - StartSpriteAnim(sprite, 2); - gSprites[r1].invisible = TRUE; - sprite->data5 = 0; - sprite->callback = sub_8047754; - } - else - { - gSprites[r1].data1 += 96; - gSprites[r1].pos2.y = -gSprites[r1].data1 >> 8; - } -} - -static void sub_8047754(struct Sprite *sprite) -{ - if (sprite->animEnded) - sprite->callback = SpriteCallbackDummy; -} - -void obj_delete_and_free_associated_resources_(struct Sprite *sprite) -{ - DestroySpriteAndFreeResources(sprite); -} - -void sub_804777C(u8 a) -{ - struct Sprite *sprite = &gSprites[gHealthboxIDs[a]]; - - sprite->data0 = 5; - sprite->data1 = 0; - sprite->pos2.x = 0x73; - sprite->pos2.y = 0; - sprite->callback = sub_8047830; - if (GetBankSide(a) != 0) - { - sprite->data0 = -sprite->data0; - sprite->data1 = -sprite->data1; - sprite->pos2.x = -sprite->pos2.x; - sprite->pos2.y = -sprite->pos2.y; - } - gSprites[sprite->data5].callback(&gSprites[sprite->data5]); - if (GetBankIdentity(a) == 2) - sprite->callback = sub_804780C; -} - -static void sub_804780C(struct Sprite *sprite) -{ - sprite->data1++; - if (sprite->data1 == 20) - { - sprite->data1 = 0; - sprite->callback = sub_8047830; - } -} - -static void sub_8047830(struct Sprite *sprite) -{ - sprite->pos2.x -= sprite->data0; - sprite->pos2.y -= sprite->data1; - if (sprite->pos2.x == 0 && sprite->pos2.y == 0) - sprite->callback = SpriteCallbackDummy; -} - -void sub_8047858(u8 a) -{ - u8 spriteId; - - spriteId = CreateInvisibleSpriteWithCallback(oamc_804BEB4); - gSprites[spriteId].data0 = 1; - gSprites[spriteId].data1 = gHealthboxIDs[a]; - gSprites[spriteId].callback = oamc_804BEB4; -} - -static void oamc_804BEB4(struct Sprite *sprite) -{ - u8 r1 = sprite->data1; - - gSprites[r1].pos2.y = sprite->data0; - sprite->data0 = -sprite->data0; - sprite->data2++; - if (sprite->data2 == 21) - { - gSprites[r1].pos2.x = 0; - gSprites[r1].pos2.y = 0; - DestroySprite(sprite); - } -} - -void sub_80478DC(u8 a) -{ - u16 var; - - if (GetSpriteTileStartByTag(sBallSpriteSheets[a].tag) == 0xFFFF) - { - LoadCompressedObjectPic(&sBallSpriteSheets[a]); - LoadCompressedObjectPalette(&sBallSpritePalettes[a]); - } - switch (a) - { - case 6: - case 10: - case 11: - break; - default: - var = GetSpriteTileStartByTag(sBallSpriteSheets[a].tag); - LZDecompressVram(gUnknown_08D030D0, (void *)(VRAM + 0x10100 + var * 32)); - break; - } -} - -void sub_804794C(u8 a) -{ - FreeSpriteTilesByTag(sBallSpriteSheets[a].tag); - FreeSpritePaletteByTag(sBallSpritePalettes[a].tag); -} - -static u16 sub_8047978(u8 a) -{ - if (GetBankSide(a) == 0) - return GetMonData(&gPlayerParty[gBattlePartyID[a]], MON_DATA_POKEBALL); - else - return GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_POKEBALL); -} diff --git a/src/pokeblock.c b/src/pokeblock.c deleted file mode 100644 index 775280f6e..000000000 --- a/src/pokeblock.c +++ /dev/null @@ -1,1134 +0,0 @@ -// -// Created by scott on 6/27/2017. -// - -#include "global.h" -#include "rom4.h" -#include "sprite.h" -#include "script.h" -#include "strings.h" -#include "task.h" -#include "unknown_task.h" -#include "text.h" -#include "main.h" -#include "menu.h" -#include "field_fadetransition.h" -#include "palette.h" -#include "graphics.h" -#include "decompress.h" -#include "menu_helpers.h" -#include "battle.h" -#include "item_menu.h" -#include "item_use.h" -#include "item.h" -#include "items.h" -#include "sound.h" -#include "songs.h" -#include "safari_zone.h" -#include "use_pokeblock.h" -#include "event_data.h" -#include "pokeblock.h" - -struct UnkPokeblockStruct -{ - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; -}; - -extern u8 ewram[]; - - -static EWRAM_DATA u8 gUnknown_02039244 = 0; -static EWRAM_DATA struct UnkPokeblockStruct gUnknown_02039248 = {0}; -static EWRAM_DATA u8 gUnknown_0203924C = 0; - -// function declarations - -// gUnknown_083F7EF4 -static void sub_810C508(u8); -static void sub_810C5C0(u8); -static void sub_810C748(u8); -static void sub_810C788(u8); -static void sub_810C854(u8); - -// gUnknown_083F7F24 -static void sub_810C610(u8); -static void sub_810C668(u8); - -// sub_810B6C0 -static bool8 sub_810B998(void); -static void sub_810BC98(void); -static void sub_810BD08(void); -static void sub_810BB0C(void); -static void sub_810BB30(void); -static void sub_810BC84(u8); - -// sub_810B96C -static void sub_810BF7C(u8); - -// sub_810BC84 -static void sub_810BDAC(bool8); - -// sub_810BF38 -static void sub_810C8D4(struct Sprite *); - -// sub_810BF7C -static void sub_810C0C8(u8); -static void sub_810C31C(u8); -static void sub_810C368(u8); - -// sub_810C0C8 -static void sub_810C1C8(u8, u8); -static void sub_810C23C(u8); - -// sub_810C368 -static void sub_810C40C(u8); - -// sub_810C540 -static void sub_810C5EC(u8); - -// sub_810C610 -static void sub_810C704(u8); - -static const u8 *gUnknown_03000758; - -// rodata - -#define GFX_TAG_POKEBLOCK_CASE 14800 - -const s8 gPokeblockFlavorCompatibilityTable[] = { - // Cool, Beauty, Cute, Smart, Tough - 0, 0, 0, 0, 0, // Hardy - 1, 0, 0, 0, -1, // Lonely - 1, 0, -1, 0, 0, // Brave - 1, -1, 0, 0, 0, // Adamant - 1, 0, 0, -1, 0, // Naughty - -1, 0, 0, 0, 1, // Bold - 0, 0, 0, 0, 0, // Docile - 0, 0, -1, 0, 1, // Relaxed - 0, -1, 0, 0, 1, // Impish - 0, 0, 0, -1, 1, // Lax - -1, 0, 1, 0, 0, // Timid - 0, 0, 1, 0, -1, // Hasty - 0, 0, 0, 0, 0, // Serious - 0, -1, 1, 0, 0, // Jolly - 0, 0, 1, -1, 0, // Naive - -1, 1, 0, 0, 0, // Modest - 0, 1, 0, 0, -1, // Mild - 0, 1, -1, 0, 0, // Quiet - 0, 0, 0, 0, 0, // Bashful - 0, 1, 0, -1, 0, // Rash - -1, 0, 0, 1, 0, // Calm - 0, 0, 0, 1, -1, // Gentle - 0, 0, -1, 1, 0, // Sassy - 0, -1, 0, 1, 0, // Careful - 0, 0, 0, 0, 0 // Quirky -}; - -void (*const gUnknown_083F7EA8[])(void) = { - sub_80A5B40, - c2_exit_to_overworld_2_switch, - sub_802E424, - c2_exit_to_overworld_2_switch -}; - -const u8 *const gPokeblockNames[] = { - NULL, - ContestStatsText_RedPokeBlock, - ContestStatsText_BluePokeBlock, - ContestStatsText_PinkPokeBlock, - ContestStatsText_GreenPokeBlock, - ContestStatsText_YellowPokeBlock, - ContestStatsText_PurplePokeBlock, - ContestStatsText_IndigoPokeBlock, - ContestStatsText_BrownPokeBlock, - ContestStatsText_LiteBluePokeBlock, - ContestStatsText_OlivePokeBlock, - ContestStatsText_GrayPokeBlock, - ContestStatsText_BlackPokeBlock, - ContestStatsText_WhitePokeBlock, - ContestStatsText_GoldPokeBlock -}; - -const struct MenuAction2 gUnknown_083F7EF4[] = { - {OtherText_Use, sub_810C508}, - {OtherText_Toss, sub_810C5C0}, - {gOtherText_CancelNoTerminator, sub_810C748}, - {OtherText_Use, sub_810C788}, - {OtherText_Use, sub_810C854}, -}; - -const u8 gUnknown_083F7F1C[] = {0, 1, 2}; -const u8 gUnknown_083F7F1F[] = {3, 2}; -const u8 gUnknown_083F7F21[] = {4, 2}; - -const struct YesNoFuncTable gUnknown_083F7F24 = {sub_810C610, sub_810C668}; - -const u8 UnreferencedData_083F7F2C[] = {0x16, 0x17, 0x18, 0x21, 0x2f}; - -const struct OamData gOamData_83F7F34 = { - .size = 3, - .priority = 2 -}; - -const union AnimCmd gSpriteAnim_83F7F3C[] = { - ANIMCMD_FRAME(.imageValue = 0, .duration = 0), - ANIMCMD_END -}; - -const union AnimCmd *const gSpriteAnimTable_83F7F44[] = { - gSpriteAnim_83F7F3C -}; - -const union AffineAnimCmd gSpriteAffineAnim_83F7F48[] = { - AFFINEANIMCMD_FRAME(0, 0, -2, 2), - AFFINEANIMCMD_FRAME(0, 0, 2, 4), - AFFINEANIMCMD_FRAME(0, 0, -2, 4), - AFFINEANIMCMD_FRAME(0, 0, 2, 2), - AFFINEANIMCMD_END -}; - -const union AffineAnimCmd *const gSpriteAffineAnimTable_83F7F70[] = { - gSpriteAffineAnim_83F7F48 -}; - -const struct CompressedSpriteSheet gUnknown_083F7F74 = { - gMenuPokeblockDevice_Gfx, - 0x800, - GFX_TAG_POKEBLOCK_CASE -}; - -const struct CompressedSpritePalette gUnknown_083F7F7C = { - gMenuPokeblockDevice_Pal, - GFX_TAG_POKEBLOCK_CASE -}; - -const struct SpriteTemplate gSpriteTemplate_83F7F84 = { - GFX_TAG_POKEBLOCK_CASE, - GFX_TAG_POKEBLOCK_CASE, - &gOamData_83F7F34, - gSpriteAnimTable_83F7F44, - NULL, - gDummySpriteAffineAnimTable, - SpriteCallbackDummy -}; - -const struct Pokeblock gUnknown_083F7F9C[] = { - { PBLOCK_CLR_RED, 20, 0, 0, 0, 0, 20}, - { PBLOCK_CLR_BLUE, 0, 20, 0, 0, 0, 20}, - { PBLOCK_CLR_PINK, 0, 0, 20, 0, 0, 20}, - { PBLOCK_CLR_GREEN, 0, 0, 0, 20, 0, 20}, - { PBLOCK_CLR_YELLOW, 0, 0, 0, 0, 20, 20} -}; - -// text - -static void sub_810B674(void) -{ - AnimateSprites(); - BuildOamBuffer(); - RunTasks(); - UpdatePaletteFade(); -} - -static void sub_810B68C(void) -{ - u16 *src; - vu16 *dest; - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - src = gBGTilemapBuffers[2]; - dest = (vu16 *)(VRAM + 0x7800); - DmaCopy16(3, src, dest, sizeof gBGTilemapBuffers[2]); -} - -static bool8 sub_810B6C0(void) -{ - u16 ime; - switch (gMain.state) - { - case 0: - sub_80F9438(); - sub_80F9368(); - REG_BG2CNT = BGCNT_SCREENBASE(15) | BGCNT_CHARBASE(2) | BGCNT_PRIORITY(2); - REG_BLDCNT = 0; - gMain.state++; - break; - case 1: - remove_some_task(); - gMain.state++; - break; - case 2: - ResetPaletteFade(); - gPaletteFade.bufferTransferDisabled = TRUE; - gMain.state++; - break; - case 3: - ResetSpriteData(); - gMain.state++; - break; - case 4: - if (gUnknown_02039244 != 2) - { - ResetTasks(); - } - gMain.state++; - break; - case 5: - SetUpWindowConfig(&gWindowConfig_81E6E34); - gMain.state++; - break; - case 6: - SetUpWindowConfig(&gWindowConfig_81E6E50); - gMain.state++; - break; - case 7: - MultistepInitMenuWindowBegin(&gWindowConfig_81E6E34); - gMain.state++; - break; - case 8: - if (MultistepInitMenuWindowContinue()) - { - gMain.state++; - } - break; - case 9: - MultistepInitMenuWindowBegin(&gWindowConfig_81E6E50); - gMain.state++; - break; - case 10: - if (MultistepInitMenuWindowContinue()) - { - ewram[0x1ffff] = 0; - gMain.state++; - } - break; - case 11: - if (sub_810B998()) - { - gMain.state++; - } - break; - case 12: - sub_80F944C(); - LoadScrollIndicatorPalette(); - CreateVerticalScrollIndicators(0, 0xb0, 0x08); - CreateVerticalScrollIndicators(1, 0xb0, 0x98); - gMain.state++; - break; - case 13: - ewram[0x1fffe] = sub_810BA50(0x38, 0x40, 0); - gMain.state++; - break; - case 14: - sub_810BC98(); - sub_810BD08(); - gMain.state++; - break; - case 15: - sub_810BB0C(); - sub_810BB30(); - sub_810BC84(gUnknown_02039248.unk1); - gMain.state++; - break; - case 16: - ime = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = ime; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - SetVBlankCallback(sub_810B68C); - REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG2_ON | DISPCNT_BG1_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP; - gMain.state++; - break; - case 17: - if (sub_8055870() != TRUE) - { - gMain.state++; - } - break; - case 18: - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - gPaletteFade.bufferTransferDisabled = FALSE; - SetMainCallback2(sub_810B674); - return TRUE; - } - return FALSE; -} - -void sub_810B96C(void) -{ - do { - if (sub_810B6C0() == TRUE) - { - CreateTask(sub_810BF7C, 0); - break; - } - } while (sub_80F9344() != TRUE); -} - -static bool8 sub_810B998(void) -{ - switch (ewram[0x1ffff]) - { - case 0: - LZDecompressVram(gMenuPokeblock_Gfx, (u8 *)BG_CHAR_ADDR(2)); - ewram[0x1ffff]++; - break; - case 1: - sub_800D238(gMenuPokeblock_Tilemap, gBGTilemapBuffers[2]); - ewram[0x1ffff]++; - break; - case 2: - LoadCompressedPalette(gMenuPokeblock_Pal, 0, 0xc0); - ewram[0x1ffff]++; - break; - case 3: - LoadCompressedObjectPic(&gUnknown_083F7F74); - ewram[0x1ffff]++; - break; - case 4: - LoadCompressedObjectPalette(&gUnknown_083F7F7C); - ewram[0x1ffff] = 0; - return TRUE; - } - return FALSE; -} - -u8 sub_810BA50(s16 x, s16 y, u8 subpriority) -{ - return CreateSprite(&gSpriteTemplate_83F7F84, x, y, subpriority); -} - -void sub_810BA7C(u8 a0) -{ - gUnknown_02039244 = a0; - switch (gUnknown_02039244) - { - default: - gUnknown_03000758 = gUnknown_083F7F1C; - gUnknown_0203924C = sizeof gUnknown_083F7F1C; - break; - case 2: - gUnknown_03000758 = gUnknown_083F7F1F; - gUnknown_0203924C = sizeof gUnknown_083F7F1F; - break; - case 3: - gUnknown_03000758 = gUnknown_083F7F21; - gUnknown_0203924C = sizeof gUnknown_083F7F21; - break; - } -} - -void sub_810BADC(void) -{ - sub_810BA7C(2); - SetMainCallback2(sub_810B96C); -} - -void sub_810BAF4(void) -{ - sub_810BA7C(3); - SetMainCallback2(sub_810B96C); -} - -#ifdef DEBUG -void debug_sub_8120F98(void) -{ - u8 i; - for (i=0; i<40 && gUnknown_083F7F9C[i].color != 0; i++) - { - gSaveBlock1.pokeblocks[i] = gUnknown_083F7F9C[i]; - } -} -#endif - -static void sub_810BB0C(void) -{ - BasicInitMenuWindow(&gWindowConfig_81E6E34); - sub_8072BD8(ItemId_GetItem(ITEM_POKEBLOCK_CASE)->name, 2, 1, 0x48); -} - -static void sub_810BB30(void) -{ - BasicInitMenuWindow(&gWindowConfig_81E6E34); - MenuPrint(gContestStatsText_Spicy, 2, 13); - MenuPrint(gContestStatsText_Dry, 2, 15); - MenuPrint(gContestStatsText_Sweet, 2, 17); - MenuPrint(gContestStatsText_Bitter, 8, 13); - MenuPrint(gContestStatsText_Sour, 8, 15); -} - -static void sub_810BB88(u8 a0) -{ - u8 i; - u8 y; - u8 *buf; - BasicInitMenuWindow(&gWindowConfig_81E6E34); - for (i=a0; i<=a0+8; i++) - { - y = (i - a0) << 1; - if (i == gUnknown_02039248.unk2) - { - buf = sub_8072C74(gStringVar1, gContestStatsText_StowCase, 0x78, 0); - MenuPrint(gStringVar1, 15, y + 1); - if (i != a0 + 8) - { - MenuZeroFillWindowRect(15, y + 3, 29, 18); - } - break; - } - buf = sub_8072C74(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[i].color], 0x5e, 0); - buf[0] = EXT_CTRL_CODE_BEGIN; - buf[1] = 0x14; - buf[2] = 0x06; - buf += 3; - ConvertIntToDecimalStringN(buf, sub_810C9B0(&gSaveBlock1.pokeblocks[i]), STR_CONV_MODE_RIGHT_ALIGN, 3); - MenuPrint(gStringVar1, 15, y + 1); - } -} - -static void sub_810BC84(u8 a0) -{ - sub_810BB88(a0); - sub_810BDAC(FALSE); -} - -static void sub_810BC98(void) -{ - u16 i, j; - struct Pokeblock buf; - for (i=0; i<39; i++) - { - for (j=i+1; j<40; j++) - { - if (gSaveBlock1.pokeblocks[i].color == 0) - { - buf = gSaveBlock1.pokeblocks[i]; - gSaveBlock1.pokeblocks[i] = gSaveBlock1.pokeblocks[j]; - gSaveBlock1.pokeblocks[j] = buf; - } - } - } -} - -static void sub_810BD08(void) -{ - u8 i; - gUnknown_02039248.unk2 = 0; - for (i=0; i<40; i++) - { - if (gSaveBlock1.pokeblocks[i].color != 0) - gUnknown_02039248.unk2++; - } - if (gUnknown_02039248.unk2 < 8) - { - gUnknown_02039248.unk3 = gUnknown_02039248.unk2; - } - else - { - gUnknown_02039248.unk3 = 8; - } - if (gUnknown_02039248.unk1 + 8 > gUnknown_02039248.unk2 && gUnknown_02039248.unk1 != 0) - { - gUnknown_02039248.unk1--; - } -} - -static void sub_810BD64(u16 a0, u16 a1) -{ - u8 i; - int y; - for (i=0; i<14; i++) - { - gBGTilemapBuffers[2][(2 * gUnknown_02039248.unk0 + 1) * 32 + (y = i + 15)] = a0; - gBGTilemapBuffers[2][(2 * gUnknown_02039248.unk0 + 2) * 32 + y] = a0; - } -} - -static void sub_810BDAC(bool8 flag) -{ - u8 i; - u16 v0; - if (!flag) - { - sub_810BD64(0x1005, 0x1014); - } - else - { - sub_810BD64(0x2005, 0x2014); - } - if (gUnknown_02039248.unk1) - { - sub_80F979C(0, 0); - } - else - { - sub_80F979C(0, 1); - } - if (gUnknown_02039248.unk2 > gUnknown_02039248.unk3 && gUnknown_02039248.unk1 + gUnknown_02039248.unk3 != gUnknown_02039248.unk2) - { - sub_80F979C(1, 0); - } - else - { - sub_80F979C(1, 1); - } - for (i=0; i<5; i++) - { - 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) - { - gBGTilemapBuffers[2][v0] = (i << 12) + 23; - gBGTilemapBuffers[2][v0 + 32] = (i << 12) + 24; - } - else - { - gBGTilemapBuffers[2][v0] = 15; - gBGTilemapBuffers[2][v0 + 32] = 15; - } - } - else - { - gBGTilemapBuffers[2][v0] = 15; - gBGTilemapBuffers[2][v0 + 32] = 15; - } - } - BasicInitMenuWindow(&gWindowConfig_81E6E34); - if (gUnknown_02039248.unk0 + gUnknown_02039248.unk1 != gUnknown_02039248.unk2) - { - sub_8072C14(gStringVar1, sub_810C9E8(&gSaveBlock1.pokeblocks[gUnknown_02039248.unk0 + gUnknown_02039248.unk1]), 16, 1); - MenuPrint(gStringVar1, 11, 17); - } - else - { - MenuZeroFillWindowRect(11, 17, 12, 18); - } -} - -static void sub_810BF38(bool8 flag) -{ - PlaySE(SE_SELECT); - gSprites[ewram[0x1fffe]].callback = sub_810C8D4; - sub_810BDAC(flag); -} - -static void sub_810BF7C(u8 taskId) -{ - if (!gPaletteFade.active) - { - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - if (gUnknown_02039248.unk0 != 0) - { - sub_810BD64(5, 20); - gUnknown_02039248.unk0--; - sub_810BF38(FALSE); - } - else if (gUnknown_02039248.unk1 != 0) - { - gUnknown_02039248.unk1--; - sub_810BB88(gUnknown_02039248.unk1); - sub_810BF38(FALSE); - } - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if (gUnknown_02039248.unk0 != gUnknown_02039248.unk3) - { - sub_810BD64(5, 20); - gUnknown_02039248.unk0++; - sub_810BF38(FALSE); - } - else if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 != gUnknown_02039248.unk2) - { - gUnknown_02039248.unk1++; - sub_810BB88(gUnknown_02039248.unk1); - sub_810BF38(FALSE); - } - } - else if (gMain.newKeys & SELECT_BUTTON) - { - if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 != gUnknown_02039248.unk2) - { - PlaySE(SE_SELECT); - sub_810BDAC(TRUE); - gTasks[taskId].data[0] = gUnknown_02039248.unk1 + gUnknown_02039248.unk0; - gTasks[taskId].func = sub_810C0C8; - } - } - else if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 == gUnknown_02039248.unk2) - { - gScriptResult = 0xffff; - sub_810C31C(taskId); - } - else - { - sub_810C368(taskId); - } - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - gScriptResult = 0xffff; - sub_810C31C(taskId); - } - } -} - -static void sub_810C0C8(u8 taskId) -{ - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - if (gUnknown_02039248.unk0 != 0) - { - sub_810BD64(5, 20); - gUnknown_02039248.unk0--; - sub_810BF38(TRUE); - sub_810C1C8(taskId, 1); - } - else if (gUnknown_02039248.unk1 != 0) - { - sub_810C1C8(taskId, 0); - gUnknown_02039248.unk1--; - sub_810BB88(gUnknown_02039248.unk1); - sub_810BF38(TRUE); - sub_810C1C8(taskId, 1); - } - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if (gUnknown_02039248.unk0 != gUnknown_02039248.unk3) - { - sub_810BD64(5, 20); - gUnknown_02039248.unk0++; - sub_810BF38(TRUE); - sub_810C1C8(taskId, 1); - } - else if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 != gUnknown_02039248.unk2) - { - sub_810C1C8(taskId, 0); - gUnknown_02039248.unk1++; - sub_810BB88(gUnknown_02039248.unk1); - sub_810BF38(TRUE); - sub_810C1C8(taskId, 1); - } - } - else if (gMain.newKeys & A_BUTTON || gMain.newKeys & SELECT_BUTTON) - { - PlaySE(SE_SELECT); - sub_810C1C8(taskId, 0); - sub_810C23C(taskId); - gTasks[taskId].func = sub_810BF7C; - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - sub_810C1C8(taskId, 0); - sub_810BDAC(0); - gTasks[taskId].func = sub_810BF7C; - } -} - -static void sub_810C1C8(u8 taskId, u8 flag) -{ - u8 i; - u32 x; - s16 y; - u16 v0 = 0x1005; - if (!flag) - { - v0 = 0x0005; - } - y = gTasks[taskId].data[0] - gUnknown_02039248.unk1; - if ((u16)y <= 8 && y != gUnknown_02039248.unk0) - { - for (i=0; i<14; i++) - { - gBGTilemapBuffers[2][(2 * y + 1) * 32 + (x = i + 15)] = v0; - gBGTilemapBuffers[2][(2 * y + 2) * 32 + x] = v0; - } - } -} - -static void sub_810C23C(u8 taskId) -{ - struct Pokeblock buf; - u8 selidx = gUnknown_02039248.unk1 + gUnknown_02039248.unk0; - if (selidx == gUnknown_02039248.unk2) - { - sub_810BDAC(FALSE); - } - else - { - buf = gSaveBlock1.pokeblocks[selidx]; - gSaveBlock1.pokeblocks[selidx] = gSaveBlock1.pokeblocks[gTasks[taskId].data[0]]; - gSaveBlock1.pokeblocks[gTasks[taskId].data[0]] = buf; - sub_810BB88(gUnknown_02039248.unk1); - sub_810BDAC(FALSE); - } -} - -static void sub_810C2B0(void) -{ - DestroyVerticalScrollIndicator(0); - DestroyVerticalScrollIndicator(1); - BuyMenuFreeMemory(); -} - -static void sub_810C2C8(u8 taskId) -{ - if (!gPaletteFade.active) - { - if (gUnknown_02039244 == 3) - { - gFieldCallback = sub_8080990; - } - sub_810C2B0(); - SetMainCallback2(gUnknown_083F7EA8[gUnknown_02039244]); - DestroyTask(taskId); - } -} - -static void sub_810C31C(u8 taskId) -{ - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - if (gUnknown_02039244 > 1) - { - gScriptItemId = ITEM_NONE; - } - gTasks[taskId].func = sub_810C2C8; -} - -static void sub_810C368(u8 taskId) -{ - int v0 = 0; - if (gUnknown_02039244 > 1) - v0 = 2; - sub_80F98A4(0); - 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); - InitMenu(0, 8, v0 + 5, gUnknown_0203924C, 0, 5); - gScriptItemId = gUnknown_02039248.unk0 + gUnknown_02039248.unk1; - gTasks[taskId].func = sub_810C40C; -} - -static void sub_810C40C(u8 taskId) -{ - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - if (GetMenuCursorPos()) - { - PlaySE(SE_SELECT); - MoveMenuCursor(-1); - } - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if (GetMenuCursorPos() != gUnknown_0203924C - 1) - { - PlaySE(SE_SELECT); - MoveMenuCursor(+1); - } - } - else if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - gUnknown_083F7EF4[gUnknown_03000758[GetMenuCursorPos()]].func(taskId); - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - sub_810C748(taskId); - } -} - -static void sub_810C4C4(u8 taskId) -{ - if (!gPaletteFade.active) - { - sub_810C2B0(); - sub_8136130(&gSaveBlock1.pokeblocks[gScriptItemId], sub_810B96C); - DestroyTask(taskId); - } -} - -static void sub_810C508(u8 taskId) -{ - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskId].func = sub_810C4C4; -} - -static void sub_810C540(u8 taskId) -{ - BasicInitMenuWindow(&gWindowConfig_81E6E50); - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(7, 4, 13, 11); - StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gUnknown_02039248.unk0 + gUnknown_02039248.unk1].color]); - StringExpandPlaceholders(gStringVar4, gContestStatsText_ThrowAwayPrompt); - DisplayItemMessageOnField(taskId, gStringVar4, sub_810C5EC, 0); -} - -static void sub_810C5C0(u8 taskId) -{ - sub_80F979C(1, 1); - gTasks[taskId].func = sub_810C540; -} - -static void sub_810C5EC(u8 taskId) -{ - DisplayYesNoMenu(7, 6, 1); - DoYesNoFuncWithChoice(taskId, &gUnknown_083F7F24); -} - -static void sub_810C610(u8 taskId) -{ - MenuZeroFillWindowRect(7, 6, 13, 11); - sub_810CA6C((gUnknown_02039248.unk0 + gUnknown_02039248.unk1)); - StringExpandPlaceholders(gStringVar4, gContestStatsText_WasThrownAway); - DisplayItemMessageOnField(taskId, gStringVar4, sub_810C704, 0); - sub_810BC98(); - sub_810BD08(); -} - -static void sub_810C668(u8 taskId) -{ - StartVerticalScrollIndicators(0); - StartVerticalScrollIndicators(1); - if (gUnknown_02039248.unk2 > gUnknown_02039248.unk3 && gUnknown_02039248.unk1 + gUnknown_02039248.unk3 != gUnknown_02039248.unk2) - { - sub_80F979C(1, 0); - } - BasicInitMenuWindow(&gWindowConfig_81E6E50); - MenuZeroFillWindowRect(7, 6, 13, 11); - MenuZeroFillWindowRect(0, 14, 29, 19); - gTasks[taskId].func = sub_810BF7C; -} - -static void sub_810C6DC(u8 taskId) -{ - if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) - { - sub_810C668(taskId); - } -} - -static void sub_810C704(u8 taskId) -{ - BasicInitMenuWindow(&gWindowConfig_81E6E34); - sub_810BC84(gUnknown_02039248.unk1); - sub_80F979C(1, 1); - gTasks[taskId].func = sub_810C6DC; -} - -static void sub_810C748(u8 taskId) -{ - StartVerticalScrollIndicators(0); - StartVerticalScrollIndicators(1); - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(7, 4, 13, 11); - gTasks[taskId].func = sub_810BF7C; -} - -static void sub_810C788(u8 taskId) -{ - s16 v0 = sub_810CAE4(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gScriptItemId]); - StringCopy(gBattleTextBuff1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]); - sub_810CA6C(gScriptItemId); - gScriptItemId = gSaveBlock1.pokeblocks[gScriptItemId].color << 8; - if (v0 == 0) - { - gScriptItemId += 1; - } - if (v0 > 0) - { - gScriptItemId += 2; - } - if (v0 < 0) - { - gScriptItemId += 3; - } - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskId].func = sub_810C2C8; -} - -static void sub_810C854(u8 taskId) -{ - SafariZoneActivatePokeblockFeeder(gScriptItemId); - StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]); - gScriptResult = gScriptItemId; - sub_810CA6C(gScriptItemId); - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskId].func = sub_810C2C8; -} - -static void sub_810C8D4(struct Sprite *sprite) -{ - if (sprite->data0 > 1) - { - sprite->data0 = 0; - } - switch (sprite->data0) - { - case 0: - sprite->oam.affineMode = 1; - sprite->affineAnims = gSpriteAffineAnimTable_83F7F70; - InitSpriteAffineAnim(sprite); - sprite->data0 = 1; - sprite->data1 = 0; - break; - case 1: - if (++sprite->data1 > 11) - { - sprite->oam.affineMode = 0; - sprite->data0 = 0; - sprite->data1 = 0; - FreeOamMatrix(sprite->oam.matrixNum); - sprite->callback = SpriteCallbackDummy; - } - break; - } -} - -static void ClearPokeblock(u8 pokeblockIdx) -{ - gSaveBlock1.pokeblocks[pokeblockIdx].color = 0; - gSaveBlock1.pokeblocks[pokeblockIdx].spicy = 0; - gSaveBlock1.pokeblocks[pokeblockIdx].dry = 0; - gSaveBlock1.pokeblocks[pokeblockIdx].sweet = 0; - gSaveBlock1.pokeblocks[pokeblockIdx].bitter = 0; - gSaveBlock1.pokeblocks[pokeblockIdx].sour = 0; - gSaveBlock1.pokeblocks[pokeblockIdx].feel = 0; -} - -void ClearPokeblocks(void) -{ - u8 pokeblockIdx; - for (pokeblockIdx=0; pokeblockIdx 99) - feel = 99; - return feel; -} - -s8 sub_810CA00(void) -{ - u8 i; - for (i=0; icolor; - if (field == 1) - return pokeblock->spicy; - if (field == 2) - return pokeblock->dry; - if (field == 3) - return pokeblock->sweet; - if (field == 4) - return pokeblock->bitter; - if (field == 5) - return pokeblock->sour; - if (field == 6) - return pokeblock->feel; - return 0; -} - -s16 sub_810CAE4(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); - if (curGain > 0) - { - totalGain += curGain * gPokeblockFlavorCompatibilityTable[5 * nature + flavor]; - } - } - return totalGain; -} - -void sub_810CB44(struct Pokeblock *pokeblock, u8 *dest) -{ - u8 color = sub_810CA9C(pokeblock, 0); - StringCopy(dest, gPokeblockNames[color]); -} - -bool8 sub_810CB68(u8 nature, u8 *dest) -{ - u8 flavor; - for (flavor=0; flavor<5; flavor++) - { - if (sub_810CAE4(nature, &gUnknown_083F7F9C[flavor]) > 0) - { - StringCopy(dest, gPokeblockNames[flavor + 1]); - return TRUE; - } - } - return FALSE; -} diff --git a/src/pokedex.c b/src/pokedex.c deleted file mode 100644 index c132635cb..000000000 --- a/src/pokedex.c +++ /dev/null @@ -1,5528 +0,0 @@ - -#include "global.h" -#include "gba/m4a_internal.h" -#include "pokedex.h" -#include "battle.h" -#include "data2.h" -#include "decompress.h" -#include "event_data.h" -#include "graphics.h" -#include "m4a.h" -#include "main.h" -#include "menu.h" -#include "menu_cursor.h" -#include "palette.h" -#include "pokedex_area_screen.h" -#include "pokedex_cry_screen.h" -#include "pokemon.h" -#include "rng.h" -#include "rom4.h" -#include "songs.h" -#include "sound.h" -#include "species.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "trig.h" -#include "unknown_task.h" - -#define NATIONAL_DEX_COUNT 386 - -struct PokedexListItem -{ - u16 dexNum; - u16 seen:1; - u16 owned:1; -}; - -struct PokedexView -{ - struct PokedexListItem unk0[NATIONAL_DEX_COUNT]; - u16 unk608; - u8 unk60A_1:1; - u8 unk60A_2:1; - u8 unk60B; - u16 pokemonListCount; - u16 selectedPokemon; - u16 unk610; - u16 dexMode; - u16 unk614; - u16 dexOrder; - u16 unk618; - u16 unk61A; - u16 unk61C; - u16 unk61E[4]; - u16 selectedMonSpriteId; - u16 unk628; - u16 unk62A; - u8 unk62C; - u8 unk62D; - u8 unk62E; - u8 unk62F; - s16 unk630; - s16 unk632; - u16 unk634; - u16 unk636; - u16 unk638; - u16 unk63A[4]; - u8 filler642[8]; - u8 unk64A; - u8 unk64B; - u8 unk64C_1:1; - u8 selectedScreen; - u8 descriptionPageNum; - u8 unk64F; - u8 menuIsOpen; //menuIsOpen - u8 unk651; - u16 menuCursorPos; //Menu cursor position - s16 menuY; //Menu Y position (inverted because we use REG_BG0VOFS for this) - u8 unk656[8]; - u8 unk65E[8]; -}; - -enum -{ - DEX_MODE_HOENN, - DEX_MODE_NATIONAL -}; - -enum -{ - PAGE_SCREEN, - AREA_SCREEN, - CRY_SCREEN, - SIZE_SCREEN -}; - -struct PokedexEntry -{ - /*0x00*/ u8 categoryName[12]; - /*0x0C*/ u16 height; //in decimeters - /*0x0E*/ u16 weight; //in hectograms - /*0x10*/ const u8 *descriptionPage1; - /*0x14*/ const u8 *descriptionPage2; - /*0x18*/ u16 unused; - /*0x1A*/ u16 pokemonScale; - /*0x1C*/ u16 pokemonOffset; - /*0x1E*/ u16 trainerScale; - /*0x20*/ u16 trainerOffset; -}; /*size = 0x24*/ - -struct UnknownStruct2 -{ - const u8 *text1; - const u8 *text2; -}; - -struct UnknownStruct1 -{ - const struct UnknownStruct2 *unk0; - u8 unk4; - u8 unk5; - u16 unk6; -}; - -struct UnknownStruct3 -{ - const u8 *text; - u8 unk4; - u8 unk5; - u8 unk6; -}; - -struct UnknownStruct4 -{ - const u8 *text; - u8 unk4; - u8 unk5; - u8 unk6; - u8 unk7; - u8 unk8; - u8 unk9; -}; - -extern struct MusicPlayerInfo gMPlay_BGM; -extern u8 gReservedSpritePaletteCount; -extern struct SpriteTemplate gUnknown_02024E8C; -extern u8 gUnknown_03005E98; -extern const u8 gPokedexMenu_Gfx[]; -extern const u8 gUnknown_08E96738[]; -extern const u8 gUnknown_08E96888[]; -extern const u8 gUnknown_08E96994[]; -extern const u8 gUnknown_08E9C6DC[]; -extern const u8 gUnknown_08D00524[]; -extern const u8 gUnknown_08E96BD4[]; -extern const u8 gUnknown_08E96ACC[]; -extern const u8 gUnknown_08E96B58[]; -extern const u16 gPokedexMenu_Pal[]; -extern const u16 gPokedexMenu2_Pal[]; -extern const struct CompressedSpriteSheet gTrainerFrontPicTable[]; -extern const struct MonCoords gTrainerFrontPicCoords[]; -extern const struct PokedexEntry gPokedexEntries[]; -extern const u8 gPokedexMenuSearch_Gfx[]; -extern const u8 gUnknown_08E96D2C[]; -extern const u16 gPokedexMenuSearch_Pal[]; -extern const u8 gTypeNames[][7]; -extern const u8 gPokedexMenu2_Gfx[]; - -static EWRAM_DATA struct PokedexView *gPokedexView = NULL; -static EWRAM_DATA u16 gUnknown_0202FFB8 = 0; -static EWRAM_DATA u8 gUnknown_0202FFBA = 0; -static EWRAM_DATA struct PokedexListItem *gUnknown_0202FFBC = NULL; - -u8 gUnknown_03005CE8; -IntrCallback gUnknown_03005CEC; - -static u8 sub_8091E3C(void); - -static const u16 sPokedexSearchPalette[] = INCBIN_U16("graphics/pokedex/search.gbapal"); -static const u16 sNationalPokedexPalette[] = INCBIN_U16("graphics/pokedex/national.gbapal"); -const u8 gEmptySpacce_839F7FC[0xA4] = {0}; -static const u8 gUnknown_0839F8A0[] = INCBIN_U8("graphics/pokedex/pokedex_cry_layout.bin.lz"); -static const u8 gUnknown_0839F988[] = INCBIN_U8("graphics/pokedex/pokedex_size_layout.bin.lz"); -#if ENGLISH -static const u8 gUnknown_0839FA7C[] = INCBIN_U8("graphics/pokedex/noball.4bpp.lz"); -#elif GERMAN -extern const u8 gUnknown_0839FA7C[]; -#endif - -#include "data/pokedex_orders.h" -static const struct OamData gOamData_83A0404 = -{ - .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 struct OamData gOamData_83A040C = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 1, - .x = 0, - .matrixNum = 0, - .size = 0, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const struct OamData gOamData_83A0414 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 1, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const struct OamData gOamData_83A041C = -{ - .y = 160, - .affineMode = 0, - .objMode = 2, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const struct OamData gOamData_83A0424 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 1, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const struct OamData gOamData_83A042C = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 2, - .x = 0, - .matrixNum = 0, - .size = 0, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_83A0434[] = -{ - ANIMCMD_FRAME(3, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A043C[] = -{ - ANIMCMD_FRAME(1, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A0444[] = -{ - ANIMCMD_FRAME(16, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A044C[] = -{ - ANIMCMD_FRAME(32, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A0454[] = -{ - ANIMCMD_FRAME(64, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A045C[] = -{ - ANIMCMD_FRAME(96, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A0464[] = -{ - ANIMCMD_FRAME(128, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A046C[] = -{ - ANIMCMD_FRAME(160, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A0474[] = -{ - ANIMCMD_FRAME(192, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A047C[] = -{ - ANIMCMD_FRAME(224, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A0484[] = -{ - ANIMCMD_FRAME(226, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A048C[] = -{ - ANIMCMD_FRAME(228, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A0494[] = -{ - ANIMCMD_FRAME(230, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A049C[] = -{ - ANIMCMD_FRAME(232, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A04A4[] = -{ - ANIMCMD_FRAME(234, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A04AC[] = -{ - ANIMCMD_FRAME(236, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A04B4[] = -{ - ANIMCMD_FRAME(238, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A04BC[] = -{ - ANIMCMD_FRAME(240, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A04C4[] = -{ - ANIMCMD_FRAME(242, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83A04CC[] = -{ - ANIMCMD_FRAME(4, 30), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_83A04D4[] = -{ - gSpriteAnim_83A0434, -}; -static const union AnimCmd *const gSpriteAnimTable_83A04D8[] = -{ - gSpriteAnim_83A043C, -}; -static const union AnimCmd *const gSpriteAnimTable_83A04DC[] = -{ - gSpriteAnim_83A0444, -}; -static const union AnimCmd *const gSpriteAnimTable_83A04E0[] = -{ - gSpriteAnim_83A044C, - gSpriteAnim_83A0454, - gSpriteAnim_83A045C, - gSpriteAnim_83A0464, -}; -static const union AnimCmd *const gSpriteAnimTable_83A04F0[] = -{ - gSpriteAnim_83A046C, - gSpriteAnim_83A0474, -}; -static const union AnimCmd *const gSpriteAnimTable_83A04F8[] = -{ - gSpriteAnim_83A047C, - gSpriteAnim_83A0484, - gSpriteAnim_83A048C, - gSpriteAnim_83A0494, - gSpriteAnim_83A049C, - gSpriteAnim_83A04A4, - gSpriteAnim_83A04AC, - gSpriteAnim_83A04B4, - gSpriteAnim_83A04BC, - gSpriteAnim_83A04C4, -}; -static const union AnimCmd *const gSpriteAnimTable_83A0520[] = -{ - gSpriteAnim_83A04CC, -}; -static void sub_808EF38(struct Sprite *); -static const struct SpriteTemplate gSpriteTemplate_83A0524 = -{ - .tileTag = 4096, - .paletteTag = 4096, - .oam = &gOamData_83A0404, - .anims = gSpriteAnimTable_83A04D4, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808EF38, -}; -static void sub_808EF8C(struct Sprite *); -static const struct SpriteTemplate gSpriteTemplate_83A053C = -{ - .tileTag = 4096, - .paletteTag = 4096, - .oam = &gOamData_83A040C, - .anims = gSpriteAnimTable_83A04D8, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808EF8C, -}; -static void sub_808F08C(struct Sprite *); -static const struct SpriteTemplate gSpriteTemplate_83A0554 = -{ - .tileTag = 4096, - .paletteTag = 4096, - .oam = &gOamData_83A0414, - .anims = gSpriteAnimTable_83A04E0, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808F08C, -}; -static void sub_808F0B4(struct Sprite *); -static const struct SpriteTemplate gSpriteTemplate_83A056C = -{ - .tileTag = 4096, - .paletteTag = 4096, - .oam = &gOamData_83A041C, - .anims = gSpriteAnimTable_83A04DC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808F0B4, -}; -static void sub_808ED94(struct Sprite *); -static const struct SpriteTemplate gSpriteTemplate_83A0584 = -{ - .tileTag = 4096, - .paletteTag = 4096, - .oam = &gOamData_83A0424, - .anims = gSpriteAnimTable_83A04F0, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808ED94, -}; -static const struct SpriteTemplate gSpriteTemplate_83A059C = -{ - .tileTag = 4096, - .paletteTag = 4096, - .oam = &gOamData_83A042C, - .anims = gSpriteAnimTable_83A04F8, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808ED94, -}; -static void sub_808F168(struct Sprite *); -static const struct SpriteTemplate gSpriteTemplate_83A05B4 = -{ - .tileTag = 4096, - .paletteTag = 4096, - .oam = &gOamData_83A042C, - .anims = gSpriteAnimTable_83A0520, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808F168, -}; -static const struct CompressedSpriteSheet gUnknown_083A05CC[] = -{ - {gPokedexMenu2_Gfx, 0x1F00, 0x1000}, - {NULL, 0, 0}, -}; -static const struct SpritePalette gUnknown_083A05DC[] = -{ - {gPokedexMenu_Pal, 0x1000}, - {NULL, 0}, -}; -static const u8 gUnknown_083A05EC[] = {2, 4, 8, 16, 32}; -static const u8 gUnknown_083A05F1[] = {16, 8, 4, 2, 1}; -const u8 gEmptySpacce_83A05F6[] = {0, 0}; // Padding, maybe? -static const u8 gUnknown_083A05F8[] = _(""); -#if ENGLISH -#include "data/pokedex_entries_en.h" -#elif GERMAN -#include "data/pokedex_entries_de.h" -#endif -static const u16 gUnknown_083B4EC4[16] = {0}; -static const u8 *const sMonFootprintTable[] = -{ - gMonFootprint_Bulbasaur, - gMonFootprint_Bulbasaur, - gMonFootprint_Ivysaur, - gMonFootprint_Venusaur, - gMonFootprint_Charmander, - gMonFootprint_Charmeleon, - gMonFootprint_Charizard, - gMonFootprint_Squirtle, - gMonFootprint_Wartortle, - gMonFootprint_Blastoise, - gMonFootprint_Caterpie, - gMonFootprint_Metapod, - gMonFootprint_Butterfree, - gMonFootprint_Weedle, - gMonFootprint_Kakuna, - gMonFootprint_Beedrill, - gMonFootprint_Pidgey, - gMonFootprint_Pidgeotto, - gMonFootprint_Pidgeot, - gMonFootprint_Rattata, - gMonFootprint_Raticate, - gMonFootprint_Spearow, - gMonFootprint_Fearow, - gMonFootprint_Ekans, - gMonFootprint_Arbok, - gMonFootprint_Pikachu, - gMonFootprint_Raichu, - gMonFootprint_Sandshrew, - gMonFootprint_Sandslash, - gMonFootprint_NidoranF, - gMonFootprint_Nidorina, - gMonFootprint_Nidoqueen, - gMonFootprint_NidoranM, - gMonFootprint_Nidorino, - gMonFootprint_Nidoking, - gMonFootprint_Clefairy, - gMonFootprint_Clefable, - gMonFootprint_Vulpix, - gMonFootprint_Ninetales, - gMonFootprint_Jigglypuff, - gMonFootprint_Wigglytuff, - gMonFootprint_Zubat, - gMonFootprint_Golbat, - gMonFootprint_Oddish, - gMonFootprint_Gloom, - gMonFootprint_Vileplume, - gMonFootprint_Paras, - gMonFootprint_Parasect, - gMonFootprint_Venonat, - gMonFootprint_Venomoth, - gMonFootprint_Diglett, - gMonFootprint_Dugtrio, - gMonFootprint_Meowth, - gMonFootprint_Persian, - gMonFootprint_Psyduck, - gMonFootprint_Golduck, - gMonFootprint_Mankey, - gMonFootprint_Primeape, - gMonFootprint_Growlithe, - gMonFootprint_Arcanine, - gMonFootprint_Poliwag, - gMonFootprint_Poliwhirl, - gMonFootprint_Poliwrath, - gMonFootprint_Abra, - gMonFootprint_Kadabra, - gMonFootprint_Alakazam, - gMonFootprint_Machop, - gMonFootprint_Machoke, - gMonFootprint_Machamp, - gMonFootprint_Bellsprout, - gMonFootprint_Weepinbell, - gMonFootprint_Victreebel, - gMonFootprint_Tentacool, - gMonFootprint_Tentacruel, - gMonFootprint_Geodude, - gMonFootprint_Graveler, - gMonFootprint_Golem, - gMonFootprint_Ponyta, - gMonFootprint_Rapidash, - gMonFootprint_Slowpoke, - gMonFootprint_Slowbro, - gMonFootprint_Magnemite, - gMonFootprint_Magneton, - gMonFootprint_Farfetchd, - gMonFootprint_Doduo, - gMonFootprint_Dodrio, - gMonFootprint_Seel, - gMonFootprint_Dewgong, - gMonFootprint_Grimer, - gMonFootprint_Muk, - gMonFootprint_Shellder, - gMonFootprint_Cloyster, - gMonFootprint_Gastly, - gMonFootprint_Haunter, - gMonFootprint_Gengar, - gMonFootprint_Onix, - gMonFootprint_Drowzee, - gMonFootprint_Hypno, - gMonFootprint_Krabby, - gMonFootprint_Kingler, - gMonFootprint_Voltorb, - gMonFootprint_Electrode, - gMonFootprint_Exeggcute, - gMonFootprint_Exeggutor, - gMonFootprint_Cubone, - gMonFootprint_Marowak, - gMonFootprint_Hitmonlee, - gMonFootprint_Hitmonchan, - gMonFootprint_Lickitung, - gMonFootprint_Koffing, - gMonFootprint_Weezing, - gMonFootprint_Rhyhorn, - gMonFootprint_Rhydon, - gMonFootprint_Chansey, - gMonFootprint_Tangela, - gMonFootprint_Kangaskhan, - gMonFootprint_Horsea, - gMonFootprint_Seadra, - gMonFootprint_Goldeen, - gMonFootprint_Seaking, - gMonFootprint_Staryu, - gMonFootprint_Starmie, - gMonFootprint_Mrmime, - gMonFootprint_Scyther, - gMonFootprint_Jynx, - gMonFootprint_Electabuzz, - gMonFootprint_Magmar, - gMonFootprint_Pinsir, - gMonFootprint_Tauros, - gMonFootprint_Magikarp, - gMonFootprint_Gyarados, - gMonFootprint_Lapras, - gMonFootprint_Ditto, - gMonFootprint_Eevee, - gMonFootprint_Vaporeon, - gMonFootprint_Jolteon, - gMonFootprint_Flareon, - gMonFootprint_Porygon, - gMonFootprint_Omanyte, - gMonFootprint_Omastar, - gMonFootprint_Kabuto, - gMonFootprint_Kabutops, - gMonFootprint_Aerodactyl, - gMonFootprint_Snorlax, - gMonFootprint_Articuno, - gMonFootprint_Zapdos, - gMonFootprint_Moltres, - gMonFootprint_Dratini, - gMonFootprint_Dragonair, - gMonFootprint_Dragonite, - gMonFootprint_Mewtwo, - gMonFootprint_Mew, - gMonFootprint_Chikorita, - gMonFootprint_Bayleef, - gMonFootprint_Meganium, - gMonFootprint_Cyndaquil, - gMonFootprint_Quilava, - gMonFootprint_Typhlosion, - gMonFootprint_Totodile, - gMonFootprint_Croconaw, - gMonFootprint_Feraligatr, - gMonFootprint_Sentret, - gMonFootprint_Furret, - gMonFootprint_Hoothoot, - gMonFootprint_Noctowl, - gMonFootprint_Ledyba, - gMonFootprint_Ledian, - gMonFootprint_Spinarak, - gMonFootprint_Ariados, - gMonFootprint_Crobat, - gMonFootprint_Chinchou, - gMonFootprint_Lanturn, - gMonFootprint_Pichu, - gMonFootprint_Cleffa, - gMonFootprint_Igglybuff, - gMonFootprint_Togepi, - gMonFootprint_Togetic, - gMonFootprint_Natu, - gMonFootprint_Xatu, - gMonFootprint_Mareep, - gMonFootprint_Flaaffy, - gMonFootprint_Ampharos, - gMonFootprint_Bellossom, - gMonFootprint_Marill, - gMonFootprint_Azumarill, - gMonFootprint_Sudowoodo, - gMonFootprint_Politoed, - gMonFootprint_Hoppip, - gMonFootprint_Skiploom, - gMonFootprint_Jumpluff, - gMonFootprint_Aipom, - gMonFootprint_Sunkern, - gMonFootprint_Sunflora, - gMonFootprint_Yanma, - gMonFootprint_Wooper, - gMonFootprint_Quagsire, - gMonFootprint_Espeon, - gMonFootprint_Umbreon, - gMonFootprint_Murkrow, - gMonFootprint_Slowking, - gMonFootprint_Misdreavus, - gMonFootprint_Unown, - gMonFootprint_Wobbuffet, - gMonFootprint_Girafarig, - gMonFootprint_Pineco, - gMonFootprint_Forretress, - gMonFootprint_Dunsparce, - gMonFootprint_Gligar, - gMonFootprint_Steelix, - gMonFootprint_Snubbull, - gMonFootprint_Granbull, - gMonFootprint_Qwilfish, - gMonFootprint_Scizor, - gMonFootprint_Shuckle, - gMonFootprint_Heracross, - gMonFootprint_Sneasel, - gMonFootprint_Teddiursa, - gMonFootprint_Ursaring, - gMonFootprint_Slugma, - gMonFootprint_Magcargo, - gMonFootprint_Swinub, - gMonFootprint_Piloswine, - gMonFootprint_Corsola, - gMonFootprint_Remoraid, - gMonFootprint_Octillery, - gMonFootprint_Delibird, - gMonFootprint_Mantine, - gMonFootprint_Skarmory, - gMonFootprint_Houndour, - gMonFootprint_Houndoom, - gMonFootprint_Kingdra, - gMonFootprint_Phanpy, - gMonFootprint_Donphan, - gMonFootprint_Porygon2, - gMonFootprint_Stantler, - gMonFootprint_Smeargle, - gMonFootprint_Tyrogue, - gMonFootprint_Hitmontop, - gMonFootprint_Smoochum, - gMonFootprint_Elekid, - gMonFootprint_Magby, - gMonFootprint_Miltank, - gMonFootprint_Blissey, - gMonFootprint_Raikou, - gMonFootprint_Entei, - gMonFootprint_Suicune, - gMonFootprint_Larvitar, - gMonFootprint_Pupitar, - gMonFootprint_Tyranitar, - gMonFootprint_Lugia, - gMonFootprint_HoOh, - gMonFootprint_Celebi, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_QuestionMark, - gMonFootprint_Treecko, - gMonFootprint_Grovyle, - gMonFootprint_Sceptile, - gMonFootprint_Torchic, - gMonFootprint_Combusken, - gMonFootprint_Blaziken, - gMonFootprint_Mudkip, - gMonFootprint_Marshtomp, - gMonFootprint_Swampert, - gMonFootprint_Poochyena, - gMonFootprint_Mightyena, - gMonFootprint_Zigzagoon, - gMonFootprint_Linoone, - gMonFootprint_Wurmple, - gMonFootprint_Silcoon, - gMonFootprint_Beautifly, - gMonFootprint_Cascoon, - gMonFootprint_Dustox, - gMonFootprint_Lotad, - gMonFootprint_Lombre, - gMonFootprint_Ludicolo, - gMonFootprint_Seedot, - gMonFootprint_Nuzleaf, - gMonFootprint_Shiftry, - gMonFootprint_Nincada, - gMonFootprint_Ninjask, - gMonFootprint_Shedinja, - gMonFootprint_Taillow, - gMonFootprint_Swellow, - gMonFootprint_Shroomish, - gMonFootprint_Breloom, - gMonFootprint_Spinda, - gMonFootprint_Wingull, - gMonFootprint_Pelipper, - gMonFootprint_Surskit, - gMonFootprint_Masquerain, - gMonFootprint_Wailmer, - gMonFootprint_Wailord, - gMonFootprint_Skitty, - gMonFootprint_Delcatty, - gMonFootprint_Kecleon, - gMonFootprint_Baltoy, - gMonFootprint_Claydol, - gMonFootprint_Nosepass, - gMonFootprint_Torkoal, - gMonFootprint_Sableye, - gMonFootprint_Barboach, - gMonFootprint_Whiscash, - gMonFootprint_Luvdisc, - gMonFootprint_Corphish, - gMonFootprint_Crawdaunt, - gMonFootprint_Feebas, - gMonFootprint_Milotic, - gMonFootprint_Carvanha, - gMonFootprint_Sharpedo, - gMonFootprint_Trapinch, - gMonFootprint_Vibrava, - gMonFootprint_Flygon, - gMonFootprint_Makuhita, - gMonFootprint_Hariyama, - gMonFootprint_Electrike, - gMonFootprint_Manectric, - gMonFootprint_Numel, - gMonFootprint_Camerupt, - gMonFootprint_Spheal, - gMonFootprint_Sealeo, - gMonFootprint_Walrein, - gMonFootprint_Cacnea, - gMonFootprint_Cacturne, - gMonFootprint_Snorunt, - gMonFootprint_Glalie, - gMonFootprint_Lunatone, - gMonFootprint_Solrock, - gMonFootprint_Azurill, - gMonFootprint_Spoink, - gMonFootprint_Grumpig, - gMonFootprint_Plusle, - gMonFootprint_Minun, - gMonFootprint_Mawile, - gMonFootprint_Meditite, - gMonFootprint_Medicham, - gMonFootprint_Swablu, - gMonFootprint_Altaria, - gMonFootprint_Wynaut, - gMonFootprint_Duskull, - gMonFootprint_Dusclops, - gMonFootprint_Roselia, - gMonFootprint_Slakoth, - gMonFootprint_Vigoroth, - gMonFootprint_Slaking, - gMonFootprint_Gulpin, - gMonFootprint_Swalot, - gMonFootprint_Tropius, - gMonFootprint_Whismur, - gMonFootprint_Loudred, - gMonFootprint_Exploud, - gMonFootprint_Clamperl, - gMonFootprint_Huntail, - gMonFootprint_Gorebyss, - gMonFootprint_Absol, - gMonFootprint_Shuppet, - gMonFootprint_Banette, - gMonFootprint_Seviper, - gMonFootprint_Zangoose, - gMonFootprint_Relicanth, - gMonFootprint_Aron, - gMonFootprint_Lairon, - gMonFootprint_Aggron, - gMonFootprint_Castform, - gMonFootprint_Volbeat, - gMonFootprint_Illumise, - gMonFootprint_Lileep, - gMonFootprint_Cradily, - gMonFootprint_Anorith, - gMonFootprint_Armaldo, - gMonFootprint_Ralts, - gMonFootprint_Kirlia, - gMonFootprint_Gardevoir, - gMonFootprint_Bagon, - gMonFootprint_Shelgon, - gMonFootprint_Salamence, - gMonFootprint_Beldum, - gMonFootprint_Metang, - gMonFootprint_Metagross, - gMonFootprint_Regirock, - gMonFootprint_Regice, - gMonFootprint_Registeel, - gMonFootprint_Kyogre, - gMonFootprint_Groudon, - gMonFootprint_Rayquaza, - gMonFootprint_Latias, - gMonFootprint_Latios, - gMonFootprint_Jirachi, - gMonFootprint_Deoxys, - gMonFootprint_Chimecho, - gMonFootprint_Bulbasaur, -}; -static const u8 gUnknown_083B5558[] = _("{CLEAR_TO 0}"); -const u8 gUnknown_083B555C[] = INCBIN_U8("graphics/unknown/unknown_3B555C.bin"); -static const struct OamData gOamData_83B557C = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static void *const gUnknown_083B5584[] = -{ - (void *)0x02008000, - (void *)0x0200C000, - (void *)0x02010000, - (void *)0x02014000, -}; -static const struct SpriteFrameImage gSpriteImageTable_83B5594[] = -{ - {(u8 *)0x02008000, 0x800}, - {(u8 *)0x02008800, 0x800}, - {(u8 *)0x02009000, 0x800}, - {(u8 *)0x02009800, 0x800}, - {(u8 *)0x0200A000, 0x800}, - {(u8 *)0x0200A800, 0x800}, - {(u8 *)0x0200B000, 0x800}, - {(u8 *)0x0200B800, 0x800}, - {(u8 *)0x0200C000, 0x800}, - {(u8 *)0x0200C800, 0x800}, - {(u8 *)0x0200D000, 0x800}, - {(u8 *)0x0200D800, 0x800}, - {(u8 *)0x0200E000, 0x800}, - {(u8 *)0x0200E800, 0x800}, - {(u8 *)0x0200F000, 0x800}, - {(u8 *)0x0200F800, 0x800}, -}; -static const struct SpriteFrameImage gSpriteImageTable_83B5614[] = -{ - {(u8 *)0x0200C000, 0x800}, - {(u8 *)0x0200C800, 0x800}, - {(u8 *)0x0200D000, 0x800}, - {(u8 *)0x0200D800, 0x800}, - {(u8 *)0x0200E000, 0x800}, - {(u8 *)0x0200E800, 0x800}, - {(u8 *)0x0200F000, 0x800}, - {(u8 *)0x0200F800, 0x800}, - {(u8 *)0x02010000, 0x800}, - {(u8 *)0x02010800, 0x800}, - {(u8 *)0x02011000, 0x800}, - {(u8 *)0x02011800, 0x800}, - {(u8 *)0x02012000, 0x800}, - {(u8 *)0x02012800, 0x800}, - {(u8 *)0x02013000, 0x800}, - {(u8 *)0x02013800, 0x800}, -}; -static const struct SpriteFrameImage gSpriteImageTable_83B5694[] = -{ - {(u8 *)0x02010000, 0x800}, - {(u8 *)0x02010800, 0x800}, - {(u8 *)0x02011000, 0x800}, - {(u8 *)0x02011800, 0x800}, - {(u8 *)0x02012000, 0x800}, - {(u8 *)0x02012800, 0x800}, - {(u8 *)0x02013000, 0x800}, - {(u8 *)0x02013800, 0x800}, - {(u8 *)0x02014000, 0x800}, - {(u8 *)0x02014800, 0x800}, - {(u8 *)0x02015000, 0x800}, - {(u8 *)0x02015800, 0x800}, - {(u8 *)0x02016000, 0x800}, - {(u8 *)0x02016800, 0x800}, - {(u8 *)0x02017000, 0x800}, - {(u8 *)0x02017800, 0x800}, -}; -static const struct SpriteFrameImage gSpriteImageTable_83B5714[] = -{ - {(u8 *)0x02014000, 0x800}, - {(u8 *)0x02014800, 0x800}, - {(u8 *)0x02015000, 0x800}, - {(u8 *)0x02015800, 0x800}, - {(u8 *)0x02016000, 0x800}, - {(u8 *)0x02016800, 0x800}, - {(u8 *)0x02017000, 0x800}, - {(u8 *)0x02017800, 0x800}, - {(u8 *)0x02018000, 0x800}, - {(u8 *)0x02018800, 0x800}, - {(u8 *)0x02019000, 0x800}, - {(u8 *)0x02019800, 0x800}, - {(u8 *)0x0201A000, 0x800}, - {(u8 *)0x0201A800, 0x800}, - {(u8 *)0x0201B000, 0x800}, - {(u8 *)0x0201B800, 0x800}, -}; -static const struct SpriteFrameImage *const gUnknown_083B5794[] = -{ - gSpriteImageTable_83B5594, - gSpriteImageTable_83B5614, - gSpriteImageTable_83B5694, - gSpriteImageTable_83B5714, -}; -static void nullsub_59(struct Sprite *); -static const struct SpriteTemplate gUnknown_083B57A4 = -{ - .tileTag = 0xFFFF, - .paletteTag = 0, - .oam = &gOamData_83B557C, - .anims = NULL, - .images = gSpriteImageTable_83B5594, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = nullsub_59, -}; -static const u8 gUnknown_083B57BC[][4] = -{ - {0, 0, 0, 0}, - {CHAR_A, 3, CHAR_a, 3}, - {CHAR_D, 3, CHAR_d, 3}, - {CHAR_G, 3, CHAR_g, 3}, - {CHAR_J, 3, CHAR_j, 3}, - {CHAR_M, 3, CHAR_m, 3}, - {CHAR_P, 3, CHAR_p, 3}, - {CHAR_S, 3, CHAR_s, 3}, - {CHAR_V, 3, CHAR_v, 3}, - {CHAR_Y, 2, CHAR_y, 2}, -}; -static const struct UnknownStruct3 gUnknown_083B57E4[] = -{ - {DexText_SearchForPoke, 0, 0, 5}, - {DexText_SwitchDex, 6, 0, 5}, - {DexText_ReturnToDex, 12, 0, 5}, -}; -static const struct UnknownStruct4 gUnknown_083B57FC[] = -{ - {DexText_ListByABC, 0, 2, 5, 5, 2, 12}, - {DexText_ListByColor, 0, 4, 5, 5, 4, 12}, - {DexText_ListByType, 0, 6, 5, 5, 6, 6}, - {DexText_ListByType, 0, 6, 5, 11, 6, 6}, - {DexText_SelectDexList, 0, 8, 5, 5, 8, 12}, - {DexText_SelectDexMode, 0, 10, 5, 5, 10, 12}, - {DexText_ExecuteSearchSwitch, 0, 12, 5, 0, 0, 0}, -}; -static const u8 gUnknown_083B5850[][4] = -{ - {0xFF, 0xFF, 0xFF, 1}, - {0xFF, 0xFF, 0, 2}, - {0xFF, 3, 1, 4}, - { 2, 0xFF, 1, 4}, - {0xFF, 0xFF, 2, 5}, - {0xFF, 0xFF, 4, 6}, - {0xFF, 0xFF, 5, 0xFF}, -}; -static const u8 gUnknown_083B586C[][4] = -{ - {0xFF, 0xFF, 0xFF, 0xFF}, - {0xFF, 0xFF, 0xFF, 0xFF}, - {0xFF, 0xFF, 0xFF, 0xFF}, - {0xFF, 0xFF, 0xFF, 0xFF}, - {0xFF, 0xFF, 0xFF, 5}, - {0xFF, 0xFF, 4, 6}, - {0xFF, 0xFF, 5, 0xFF}, -}; -static const u8 gUnknown_083B5888[][4] = -{ - {0xFF, 0xFF, 0xFF, 1}, - {0xFF, 0xFF, 0, 2}, - {0xFF, 3, 1, 4}, - { 2, 0xFF, 1, 4}, - {0xFF, 0xFF, 2, 6}, - {0xFF, 0xFF, 0xFF, 0xFF}, - {0xFF, 0xFF, 4, 0xFF}, -}; -static const u8 gUnknown_083B58A4[][4] = -{ - {0xFF, 0xFF, 0xFF, 0xFF}, - {0xFF, 0xFF, 0xFF, 0xFF}, - {0xFF, 0xFF, 0xFF, 0xFF}, - {0xFF, 0xFF, 0xFF, 0xFF}, - {0xFF, 0xFF, 0xFF, 6}, - {0xFF, 0xFF, 0xFF, 0xFF}, - {0xFF, 0xFF, 4, 0xFF}, -}; -static const struct UnknownStruct2 gUnknown_083B58C0[] = -{ - {DexText_HoennDex2, DexText_HoennDex}, - {DexText_NationalDex2, DexText_NationalDex}, - {NULL, NULL}, -}; -static const struct UnknownStruct2 gUnknown_083B58D8[] = -{ - {DexText_ListByNumber, DexText_NumericalMode}, - {DexText_ListByABC2, DexText_ABCMode}, - {DexText_ListByHeavyToLightest, DexText_HeaviestMode}, - {DexText_ListByLightToHeaviest, DexText_LightestMode}, - {DexText_ListByTallToSmallest, DexText_TallestMode}, - {DexText_ListBySmallToTallest, DexText_SmallestMode}, - {NULL, NULL}, -}; -static const struct UnknownStruct2 gUnknown_083B5910[] = -{ - {DexText_Terminator5, DexText_DontSpecify}, - {DexText_Terminator5, DexText_ABC}, - {DexText_Terminator5, DexText_DEF}, - {DexText_Terminator5, DexText_GHI}, - {DexText_Terminator5, DexText_JKL}, - {DexText_Terminator5, DexText_MNO}, - {DexText_Terminator5, DexText_PQR}, - {DexText_Terminator5, DexText_STU}, - {DexText_Terminator5, DexText_VWX}, - {DexText_Terminator5, DexText_YZ}, - {NULL, NULL}, -}; -static const struct UnknownStruct2 gUnknown_083B5968[] = -{ - {DexText_Terminator5, DexText_DontSpecify}, - {DexText_Terminator5, DexText_Red}, - {DexText_Terminator5, DexText_Blue}, - {DexText_Terminator5, DexText_Yellow}, - {DexText_Terminator5, DexText_Green}, - {DexText_Terminator5, DexText_Black}, - {DexText_Terminator5, DexText_Brown}, - {DexText_Terminator5, DexText_Purple}, - {DexText_Terminator5, DexText_Gray}, - {DexText_Terminator5, DexText_White}, - {DexText_Terminator5, DexText_Pink}, - {NULL, NULL}, -}; -static const struct UnknownStruct2 gUnknown_083B59C8[] = -{ - {DexText_Terminator5, DexText_None}, - {DexText_Terminator5, gTypeNames[TYPE_NORMAL]}, - {DexText_Terminator5, gTypeNames[TYPE_FIGHTING]}, - {DexText_Terminator5, gTypeNames[TYPE_FLYING]}, - {DexText_Terminator5, gTypeNames[TYPE_POISON]}, - {DexText_Terminator5, gTypeNames[TYPE_GROUND]}, - {DexText_Terminator5, gTypeNames[TYPE_ROCK]}, - {DexText_Terminator5, gTypeNames[TYPE_BUG]}, - {DexText_Terminator5, gTypeNames[TYPE_GHOST]}, - {DexText_Terminator5, gTypeNames[TYPE_STEEL]}, - {DexText_Terminator5, gTypeNames[TYPE_FIRE]}, - {DexText_Terminator5, gTypeNames[TYPE_WATER]}, - {DexText_Terminator5, gTypeNames[TYPE_GRASS]}, - {DexText_Terminator5, gTypeNames[TYPE_ELECTRIC]}, - {DexText_Terminator5, gTypeNames[TYPE_PSYCHIC]}, - {DexText_Terminator5, gTypeNames[TYPE_ICE]}, - {DexText_Terminator5, gTypeNames[TYPE_DRAGON]}, - {DexText_Terminator5, gTypeNames[TYPE_DARK]}, - {NULL, NULL}, -}; -static const u8 gUnknown_083B5A60[] = {0, 1}; -static const u8 gUnknown_083B5A62[] = {0, 1, 2, 3, 4, 5}; -static const u8 gUnknown_083B5A68[] = {0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17}; -static const struct UnknownStruct1 gUnknown_083B5A7C[] = -{ - {gUnknown_083B5910, 6, 7, 10}, - {gUnknown_083B5968, 8, 9, 11}, - {gUnknown_083B59C8, 10, 11, 18}, - {gUnknown_083B59C8, 12, 13, 18}, - {gUnknown_083B58D8, 4, 5, 6}, - {gUnknown_083B58C0, 2, 3, 2}, -}; -static const u8 gUnknown_083B5AAC[] = _("{STR_VAR_1}{CLEAR_TO 43}"); -static const u8 gUnknown_083B5AB2[] = _("{STR_VAR_1}{CLEAR_TO 96}"); - -static void MainCB(void); -static void Task_PokedexShowMainScreen(u8 taskId); -static void Task_PokedexMainScreen(u8 taskId); -static void sub_808C898(u8 taskId); -static void Task_PokedexMainScreenMenu(u8 taskId); -static void sub_808CA64(u8 taskId); -static void sub_808CAE4(u8 taskId); -static void sub_808CB8C(u8 taskId); -static void Task_ClosePokedex(u8 taskId); -static void sub_808CCC4(u8 taskId); -static void Task_PokedexResultsScreen(u8 taskId); -static void sub_808CEF8(u8 taskId); -static void Task_PokedexResultsScreenMenu(u8 taskId); -static void sub_808D118(u8 taskId); -static void sub_808D198(u8 taskId); -static void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId); -static void Task_PokedexResultsScreenExitPokedex(u8 taskId); -static bool8 sub_808D344(u8 a); -static void sub_808D640(void); -static void SortPokedex(u8 dexMode, u8 sortMode); -static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d); -static void sub_808DF88(u16 a, u8 b, u8 c, u16 d); -static u8 sub_808DFE4(u16 num, u8 b, u8 c); -static void sub_808E090(u8 a, u8 b, u16 c); -static void sub_808E0CC(u16 a, u16 b); -static bool8 sub_808E208(u8 a, u8 b, u8 c); -static u16 sub_808E48C(u16 a, u16 b); -static void sub_808E6BC(void); -static u8 sub_808E71C(void); -static u8 sub_808E82C(void); -static u16 sub_808E888(u16 a1); -static u32 sub_808E8C8(u16 a, s16 b, s16 c); -static void sub_808E978(u8 a); -static void sub_808EDB8(struct Sprite *sprite); -static void sub_808EE28(struct Sprite *sprite); -static u8 sub_808F210(struct PokedexListItem *, u8); -static bool8 sub_808F250(u8 taskId); -static u8 sub_808F284(struct PokedexListItem *, u8); -static void Task_InitPageScreenMultistep(u8 taskId); -static void Task_PageScreenProcessInput(u8 taskId); -static void sub_808F888(u8 taskId); -static void Task_ClosePageScreen(u8 taskId); -static void Task_InitAreaScreenMultistep(u8 taskId); -static void Task_AreaScreenProcessInput(u8 taskId); -static void sub_808FA00(u8 taskId); -static void Task_InitCryScreenMultistep(u8 taskId); -static void Task_CryScreenProcessInput(u8 taskId); -static void sub_808FFBC(u8 taskId); -static void sub_8090040(u8 a); -static void Task_InitSizeScreenMultistep(u8 taskId); -static void Task_SizeScreenProcessInput(u8 taskId); -static void sub_8090498(u8 taskId); -static void sub_80904FC(u16 a); -static void sub_8090540(u16 a); -static void sub_8090584(u8 a, u16 b); -static void sub_8090644(u8 a, u16 b); -static void sub_8090750(u8); -static void sub_8090A3C(u8); -static void sub_8090B8C(u8); -static void sub_8090C28(struct Sprite *); -static void sub_8090C68(void); -static void sub_8091060(u16); -static void sub_8091154(u16 order, u8, u8); -static u8 sub_80911C8(u16 num, u8, u8); -static u8 sub_8091260(u16 num, u8, u8, u8); -static void sub_8091304(const u8 *name, u8, u8); -static void sub_8091458(u16 height, u8 i, u8 i1); -static void sub_8091564(u16 weight, u8 i, u8 i1); -static void sub_8091738(u16, u16, u16); -static void sub_80917CC(u16 i, u16 i1); -static u16 sub_8091818(u8, u16, u16, u16); -static u16 sub_80918EC(u16 a, s16 b, s16 c, u16 d); -static u8 sub_8091A4C(u16 gender, s16, s16, u16); -static void sub_8091E54(u8); -static void sub_809204C(u8); -static void sub_809207C(u8); -static void sub_809217C(u8); -static void sub_80921B0(u8); -static void sub_80923FC(u8); -static void sub_80924A4(u8); -static void sub_8092508(u8); -static void sub_80925CC(u8); -static void sub_8092644(u8); -static void sub_80927B8(u8); -static void sub_80927F0(u8); -static void sub_8092AB0(u8); -static void sub_8092AD4(u8, u8); -static void sub_8092B68(u8); -static void sub_8092C8C(u8); -static void sub_8092D78(u8); -static u8 sub_8092E10(u8, u8); -static void sub_8092EB0(u8); -static void sub_809308C(u8); - - -void ResetPokedex(void) -{ - u16 i; - - gUnknown_0202FFB8 = 0; - gUnknown_0202FFBA = 0x40; - gUnknown_03005CE8 = 0; - gSaveBlock2.pokedex.unknown1 = 0; - gSaveBlock2.pokedex.order = 0; - gSaveBlock2.pokedex.nationalMagic = 0; - gSaveBlock2.pokedex.unknown2 = 0; - gSaveBlock2.pokedex.unownPersonality = 0; - gSaveBlock2.pokedex.spindaPersonality = 0; - gSaveBlock2.pokedex.unknown3 = 0; - DisableNationalPokedex(); - for (i = 0; i <= 51; i++) - { - gSaveBlock2.pokedex.owned[i] = 0; - gSaveBlock2.pokedex.seen[i] = 0; - gSaveBlock1.unk938[i] = 0; - gSaveBlock1.unk3A8C[i] = 0; - } -} - -void sub_808C0A0(void) -{ - gUnknown_0202FFB8 = 0; - gUnknown_0202FFBA = 0x40; -} - -static void sub_808C0B8(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -static void ClearPokedexView(struct PokedexView *pokedexView) -{ - u16 i; - - for (i = 0; i < NATIONAL_DEX_COUNT; i++) - { - pokedexView->unk0[i].dexNum |= 0xFFFF; - pokedexView->unk0[i].seen = 0; - pokedexView->unk0[i].owned = 0; - } - pokedexView->unk608 = 0; - pokedexView->unk60A_1 = 0; - pokedexView->unk60A_2 = 0; - pokedexView->pokemonListCount = 0; - pokedexView->selectedPokemon = 0; - pokedexView->unk610 = 0; - pokedexView->dexMode = 0; - pokedexView->unk614 = 0; - pokedexView->dexOrder = 0; - pokedexView->unk618 = 0; - pokedexView->unk61A = 0; - pokedexView->unk61C = 0; - for (i = 0; i <= 3; i++) - pokedexView->unk61E[i] |= 0xFFFF; - pokedexView->unk628 = 0; - pokedexView->unk62A = 0; - pokedexView->unk62C = 0; - pokedexView->unk62D = 0; - pokedexView->unk62E = 0; - pokedexView->unk62F = 0; - pokedexView->unk630 = 0; - pokedexView->unk632 = 0; - pokedexView->unk634 = 0; - pokedexView->unk636 = 0; - pokedexView->unk638 = 0; - for (i = 0; i <= 3; i++) - pokedexView->unk63A[i] = 0; - pokedexView->unk64A = 0; - pokedexView->unk64B = 0; - pokedexView->unk64C_1 = 0; - pokedexView->selectedScreen = 0; - pokedexView->unk64F = 0; - pokedexView->menuIsOpen = 0; - pokedexView->menuCursorPos = 0; - pokedexView->menuY = 0; - for (i = 0; i <= 7; i++) - pokedexView->unk656[i] = 0; - for (i = 0; i <= 7; i++) - pokedexView->unk65E[i] = 0; -} - -void CB2_InitPokedex(void) -{ - switch (gMain.state) - { - case 0: - default: - { - u8 *addr; - u32 size; - - SetVBlankCallback(NULL); - sub_8091060(0); - addr = (u8 *)VRAM; - size = VRAM_SIZE; - while (1) - { - DmaFill16(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill16(3, 0, addr, size); - break; - } - } - DmaClear32(3, OAM, OAM_SIZE); - DmaClear16(3, PLTT, PLTT_SIZE); - gMain.state = 1; - } - break; - case 1: - remove_some_task(); - ResetTasks(); - ResetSpriteData(); - ResetPaletteFade(); - FreeAllSpritePalettes(); - gReservedSpritePaletteCount = 8; - SetUpWindowConfig(&gWindowConfig_81E7048); - InitMenuWindow(&gWindowConfig_81E7048); - gMain.state++; - break; - case 2: - switch (Random() & 3) - { - case 0: - default: - gPokedexView = (struct PokedexView *)0x02018000; - break; - case 1: - gPokedexView = (struct PokedexView *)0x02018800; - break; - case 2: - gPokedexView = (struct PokedexView *)0x02019000; - break; - case 3: - gPokedexView = (struct PokedexView *)0x02019800; - break; - } - ClearPokedexView(gPokedexView); - CreateTask(Task_PokedexShowMainScreen, 0); - gPokedexView->dexMode = gSaveBlock2.pokedex.unknown1; - if (!IsNationalPokedexEnabled()) - gPokedexView->dexMode = DEX_MODE_HOENN; - gPokedexView->dexOrder = gSaveBlock2.pokedex.order; - gPokedexView->selectedPokemon = gUnknown_0202FFB8; - gPokedexView->unk62C = gUnknown_0202FFBA; - gPokedexView->selectedScreen = PAGE_SCREEN; - gPokedexView->descriptionPageNum = 0; - if (!IsNationalPokedexEnabled()) - { - gPokedexView->unk61A = GetHoennPokedexCount(0); - gPokedexView->unk61C = GetHoennPokedexCount(1); - } - else - { - gPokedexView->unk61A = GetNationalPokedexCount(0); - gPokedexView->unk61C = GetNationalPokedexCount(1); - } - gPokedexView->unk62D = 8; - gMain.state++; - break; - case 3: - { - u16 savedIme; - - savedIme = REG_IME; - REG_IME = 0; - REG_IE |= 1; - REG_IME = savedIme; - REG_DISPSTAT |= 8; - SetVBlankCallback(sub_808C0B8); - SetMainCallback2(MainCB); - SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder); - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x80); - } - break; - } -} - -u8 unref_sub_808C540(void (*func)(u8)) -{ - u16 savedIme; - u8 taskId; - - SetVBlankCallback(NULL); - sub_8091060(0x200); - remove_some_task(); - ResetTasks(); - ResetPaletteFade(); - savedIme = REG_IME; - REG_IME = 0; - REG_IE |= 1; - REG_IME = savedIme; - REG_DISPSTAT |= 0x8; - SetVBlankCallback(sub_808C0B8); - SetMainCallback2(MainCB); - if (!gPokedexView->unk64B) - taskId = CreateTask(sub_808CAE4, 0); - else - taskId = CreateTask(sub_808D198, 0); - gTasks[taskId].data[0] = CreateTask(func, 0); - return gTasks[taskId].data[0]; -} - -static void MainCB(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void Task_PokedexShowMainScreen(u8 taskId) -{ - gPokedexView->unk64C_1 = 0; - if (sub_808D344(0)) - gTasks[taskId].func = Task_PokedexMainScreen; -} - -//Hide menu and process input on main screen -void Task_PokedexMainScreen(u8 taskId) -{ - REG_BG0VOFS = gPokedexView->menuY; - - //If menu is open, slide it down, off screen - if (gPokedexView->menuY) - gPokedexView->menuY -= 8; - else - { - if ((gMain.newKeys & A_BUTTON) && gPokedexView->unk0[gPokedexView->selectedPokemon].seen) - { - sub_808E6BC(); - BeginNormalPaletteFade( - ~(1 << (gSprites[gPokedexView->selectedMonSpriteId].oam.paletteNum + 16)), - 0, 0, 0x10, 0); - gSprites[gPokedexView->selectedMonSpriteId].callback = sub_808EDB8; - gTasks[taskId].func = sub_808CA64; - PlaySE(SE_PIN); - } - else if (gMain.newKeys & START_BUTTON) - { - //Open menu - gPokedexView->menuY = 0; - gPokedexView->menuIsOpen = 1; - gPokedexView->menuCursorPos = 0; - gTasks[taskId].func = Task_PokedexMainScreenMenu; - PlaySE(SE_SELECT); - } - else if (gMain.newKeys & SELECT_BUTTON) - { - PlaySE(SE_SELECT); - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gTasks[taskId].data[0] = sub_8091E3C(); - gPokedexView->unk64F = 0; - gPokedexView->unk62A = gPokedexView->unk62C; - gPokedexView->unk610 = gPokedexView->selectedPokemon; - gPokedexView->unk614 = gPokedexView->dexMode; - gPokedexView->unk618 = gPokedexView->dexOrder; - gTasks[taskId].func = sub_808CB8C; - PlaySE(SE_PC_LOGON); - } - else if (gMain.newKeys & B_BUTTON) - { - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gTasks[taskId].func = Task_ClosePokedex; - PlaySE(SE_PC_OFF); - } - else - { - //Handle D-pad - gPokedexView->selectedPokemon = sub_808E48C(gPokedexView->selectedPokemon, 0xE); - if (gPokedexView->unk62E) - gTasks[taskId].func = sub_808C898; - } - } -} - -static void sub_808C898(u8 taskId) -{ - if (sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636)) - gTasks[taskId].func = Task_PokedexMainScreen; -} - -//Bring up menu and process menu input -static void Task_PokedexMainScreenMenu(u8 taskId) -{ - REG_BG0VOFS = gPokedexView->menuY; - - //If menu is not open, slide it up, on screen - if (gPokedexView->menuY != 80) - gPokedexView->menuY += 8; - else - { - if (gMain.newKeys & A_BUTTON) - { - switch (gPokedexView->menuCursorPos) - { - case 0: //BACK TO LIST - default: - gMain.newKeys |= START_BUTTON; //Exit menu - break; - case 1: //LIST TOP - gPokedexView->selectedPokemon = 0; - gPokedexView->unk62C = 0x40; - sub_808E82C(); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); - gMain.newKeys |= START_BUTTON; //Exit menu - break; - case 2: //LIST BOTTOM - gPokedexView->selectedPokemon = gPokedexView->pokemonListCount - 1; - gPokedexView->unk62C = gPokedexView->pokemonListCount * 16 + 0x30; - sub_808E82C(); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); - gMain.newKeys |= START_BUTTON; //Exit menu - break; - case 3: //CLOSE POKEDEX - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gTasks[taskId].func = Task_ClosePokedex; - PlaySE(SE_PC_OFF); - break; - } - } - - //Exit menu when Start or B is pressed - if (gMain.newKeys & (START_BUTTON | B_BUTTON)) - { - gPokedexView->menuIsOpen = 0; - gTasks[taskId].func = Task_PokedexMainScreen; - PlaySE(SE_SELECT); - } - else if ((gMain.newAndRepeatedKeys & DPAD_UP) && gPokedexView->menuCursorPos != 0) - { - gPokedexView->menuCursorPos--; - PlaySE(SE_SELECT); - } - else if ((gMain.newAndRepeatedKeys & DPAD_DOWN) && gPokedexView->menuCursorPos <= 2) - { - gPokedexView->menuCursorPos++; - PlaySE(SE_SELECT); - } - } -} - -static void sub_808CA64(u8 taskId) -{ - if (gSprites[gPokedexView->selectedMonSpriteId].pos1.x == 48 - && gSprites[gPokedexView->selectedMonSpriteId].pos1.y == 56) - { - gPokedexView->unk64B = gPokedexView->unk64A; - gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId); - gTasks[taskId].func = sub_808CAE4; - } -} - -static void sub_808CAE4(u8 taskId) -{ - if (gTasks[gTasks[taskId].data[0]].isActive) - { - if (gPokedexView->unk64A == 1 && !sub_808F250(gTasks[taskId].data[0]) && sub_808E71C()) - sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]); - } - else - { - gUnknown_0202FFB8 = gPokedexView->selectedPokemon; - gUnknown_0202FFBA = gPokedexView->unk62C; - gTasks[taskId].func = Task_PokedexShowMainScreen; - } -} - -static void sub_808CB8C(u8 taskId) -{ - bool8 isActive = gTasks[gTasks[taskId].data[0]].isActive; - - if (!isActive) - { - if (gPokedexView->unk64F != 0) - { - gPokedexView->selectedPokemon = isActive; - gPokedexView->unk62C = 0x40; - gTasks[taskId].func = sub_808CCC4; - } - else - { - gPokedexView->unk62C = gPokedexView->unk62A; - gPokedexView->selectedPokemon = gPokedexView->unk610; - gPokedexView->dexMode = gPokedexView->unk614; - if (!IsNationalPokedexEnabled()) - gPokedexView->dexMode = DEX_MODE_HOENN; - gPokedexView->dexOrder = gPokedexView->unk618; - gTasks[taskId].func = Task_PokedexShowMainScreen; - } - } -} - -static void Task_ClosePokedex(u8 taskId) -{ - if (!gPaletteFade.active) - { - gSaveBlock2.pokedex.unknown1 = gPokedexView->dexMode; - if (!IsNationalPokedexEnabled()) - gSaveBlock2.pokedex.unknown1 = 0; - gSaveBlock2.pokedex.order = gPokedexView->dexOrder; - DestroyTask(taskId); - SetMainCallback2(sub_805469C); - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); - } -} - -static void sub_808CCC4(u8 taskId) -{ - gPokedexView->unk64C_1 = 1; - if (sub_808D344(3)) - gTasks[taskId].func = Task_PokedexResultsScreen; -} - -static void Task_PokedexResultsScreen(u8 taskId) -{ - REG_BG0VOFS = gPokedexView->menuY; - - if (gPokedexView->menuY) - { - gPokedexView->menuY -= 8; - } - else - { - if ((gMain.newKeys & A_BUTTON) && gPokedexView->unk0[gPokedexView->selectedPokemon].seen) - { - u32 a; - - sub_808E6BC(); - a = (1 << (gSprites[gPokedexView->selectedMonSpriteId].oam.paletteNum + 16)); - gSprites[gPokedexView->selectedMonSpriteId].callback = sub_808EDB8; - BeginNormalPaletteFade(~a, 0, 0, 0x10, 0); - gTasks[taskId].func = sub_808D118; - PlaySE(SE_PIN); - } - else if (gMain.newKeys & START_BUTTON) - { - gPokedexView->menuY = 0; - gPokedexView->menuIsOpen = 1; - gPokedexView->menuCursorPos = 0; - gTasks[taskId].func = Task_PokedexResultsScreenMenu; - PlaySE(SE_SELECT); - } - else if (gMain.newKeys & SELECT_BUTTON) - { - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gTasks[taskId].data[0] = sub_8091E3C(); - gPokedexView->unk64F = 0; - gTasks[taskId].func = sub_808CB8C; - PlaySE(SE_PC_LOGON); - } - else if (gMain.newKeys & B_BUTTON) - { - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gTasks[taskId].func = Task_PokedexResultsScreenReturnToMainScreen; - PlaySE(SE_PC_OFF); - } - else - { - //Handle D-pad - gPokedexView->selectedPokemon = sub_808E48C(gPokedexView->selectedPokemon, 0xE); - if (gPokedexView->unk62E) - gTasks[taskId].func = sub_808CEF8; - } - } -} - -static void sub_808CEF8(u8 taskId) -{ - if (sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636)) - gTasks[taskId].func = Task_PokedexResultsScreen; -} - -static void Task_PokedexResultsScreenMenu(u8 taskId) -{ - REG_BG0VOFS = gPokedexView->menuY; - - if (gPokedexView->menuY != 96) - { - gPokedexView->menuY += 8; - } - else - { - if (gMain.newKeys & A_BUTTON) - { - switch (gPokedexView->menuCursorPos) - { - case 0: //BACK TO LIST - default: - gMain.newKeys |= START_BUTTON; - break; - case 1: //LIST TOP - gPokedexView->selectedPokemon = 0; - gPokedexView->unk62C = 0x40; - sub_808E82C(); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); - gMain.newKeys |= START_BUTTON; - break; - case 2: //LIST BOTTOM - gPokedexView->selectedPokemon = gPokedexView->pokemonListCount - 1; - gPokedexView->unk62C = gPokedexView->pokemonListCount * 16 + 0x30; - sub_808E82C(); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); - gMain.newKeys |= START_BUTTON; - break; - case 3: //BACK TO POKEDEX - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gTasks[taskId].func = Task_PokedexResultsScreenReturnToMainScreen; - PlaySE(SE_TRACK_DOOR); - break; - case 4: //CLOSE POKEDEX - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gTasks[taskId].func = Task_PokedexResultsScreenExitPokedex; - PlaySE(SE_PC_OFF); - break; - } - } - - //Exit menu when Start or B is pressed - if (gMain.newKeys & (START_BUTTON | B_BUTTON)) - { - gPokedexView->menuIsOpen = 0; - gTasks[taskId].func = Task_PokedexResultsScreen; - PlaySE(SE_SELECT); - } - else if ((gMain.newAndRepeatedKeys & DPAD_UP) && gPokedexView->menuCursorPos) - { - gPokedexView->menuCursorPos--; - PlaySE(SE_SELECT); - } - else if ((gMain.newAndRepeatedKeys & DPAD_DOWN) && gPokedexView->menuCursorPos <= 3) - { - gPokedexView->menuCursorPos++; - PlaySE(SE_SELECT); - } - } -} - -static void sub_808D118(u8 taskId) -{ - if (gSprites[gPokedexView->selectedMonSpriteId].pos1.x == 48 - && gSprites[gPokedexView->selectedMonSpriteId].pos1.y == 56) - { - gPokedexView->unk64B = gPokedexView->unk64A; - gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId); - gTasks[taskId].func = sub_808D198; - } -} - -static void sub_808D198(u8 taskId) -{ - if (gTasks[gTasks[taskId].data[0]].isActive) - { - if (gPokedexView->unk64A == 1 && !sub_808F250(gTasks[taskId].data[0]) && sub_808E71C()) - sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]); - } - else - { - gTasks[taskId].func = sub_808CCC4; - } -} - -static void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId) -{ - if (!gPaletteFade.active) - { - gPokedexView->unk62C = gPokedexView->unk62A; - gPokedexView->selectedPokemon = gPokedexView->unk610; - gPokedexView->dexMode = gPokedexView->unk614; - if (!IsNationalPokedexEnabled()) - gPokedexView->dexMode = DEX_MODE_HOENN; - gPokedexView->dexOrder = gPokedexView->unk618; - gTasks[taskId].func = Task_PokedexShowMainScreen; - } -} - -static void Task_PokedexResultsScreenExitPokedex(u8 taskId) -{ - if (!gPaletteFade.active) - { - gPokedexView->unk62C = gPokedexView->unk62A; - gPokedexView->selectedPokemon = gPokedexView->unk610; - gPokedexView->dexMode = gPokedexView->unk614; - if (!IsNationalPokedexEnabled()) - gPokedexView->dexMode = DEX_MODE_HOENN; - gPokedexView->dexOrder = gPokedexView->unk618; - gTasks[taskId].func = Task_ClosePokedex; - } -} - -static bool8 sub_808D344(u8 a) -{ - switch (gMain.state) - { - case 0: - default: - if (gPaletteFade.active) - return 0; - SetVBlankCallback(NULL); - gPokedexView->unk64A = a; - sub_8091060(0); - REG_BG2VOFS = gPokedexView->unk62D; - LZ77UnCompVram(gPokedexMenu_Gfx, (void *)(VRAM)); - LZ77UnCompVram(gUnknown_08E96738, (void *)(VRAM + 0x6800)); - LZ77UnCompVram(gUnknown_08E9C6DC, (void *)(VRAM + 0x7800)); - DmaClear16(3, VRAM + 0x6000, 0x500); - if (a == 0) - LZ77UnCompVram(gUnknown_08E96888, (void *)(VRAM + 0x6500)); - else - LZ77UnCompVram(gUnknown_08E96994, (void *)(VRAM + 0x6500)); - ResetPaletteFade(); - if (a == 0) - gPokedexView->unk64C_1 = 0; - else - gPokedexView->unk64C_1 = 1; - sub_808D640(); - gMain.state = 1; - break; - case 1: - ResetSpriteData(); - FreeAllSpritePalettes(); - gReservedSpritePaletteCount = 8; - LoadCompressedObjectPic(&gUnknown_083A05CC[0]); - LoadSpritePalettes(gUnknown_083A05DC); - sub_808E978(a); - gMain.state++; - break; - case 2: - SetUpWindowConfig(&gWindowConfig_81E7048); - InitMenuWindow(&gWindowConfig_81E7048); - LZ77UnCompVram(gUnknown_0839FA7C, (void *)(VRAM + 0xFF80)); - gMain.state++; - break; - case 3: - if (a == 0) - SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); - gPokedexView->menuIsOpen = 0; - gPokedexView->menuY = 0; - gMain.state++; - break; - case 4: - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - SetVBlankCallback(sub_808C0B8); - gMain.state++; - break; - case 5: - REG_WININ = 0x3F3F; - REG_WINOUT = 0x1D3F; - REG_WIN0H = 0; - REG_WIN0V = 0; - REG_WIN1H = 0; - REG_WIN1V = 0; - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(12) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_OBJWIN_ON; - gMain.state++; - break; - case 6: - if (!gPaletteFade.active) - { - gMain.state = 0; - return TRUE; - } - break; - } - return FALSE; -} - -static void sub_808D640(void) -{ - if (gPokedexView->unk64C_1) - LoadPalette(sPokedexSearchPalette + 1, 1, sizeof(sPokedexSearchPalette) - sizeof(u16)); - else if (!IsNationalPokedexEnabled()) - LoadPalette(gPokedexMenu_Pal + 1, 1, 0xBE); - else - LoadPalette(sNationalPokedexPalette + 1, 1, sizeof(sNationalPokedexPalette) - sizeof(u16)); -} - -static void SortPokedex(u8 dexMode, u8 sortMode) -{ - u16 vars[3]; //I have no idea why three regular variables are stored in an array, but whatever. - s16 i; - - gPokedexView->pokemonListCount = 0; - - switch (dexMode) - { - default: - case DEX_MODE_HOENN: - vars[0] = 202; - vars[1] = 1; - break; - case DEX_MODE_NATIONAL: - if (IsNationalPokedexEnabled()) - { - vars[0] = NATIONAL_DEX_COUNT; - vars[1] = 0; - } - else - { - vars[0] = 202; - vars[1] = 1; - } - break; - } - - switch (sortMode) - { - case 0: - if (vars[1]) - { - for (i = 0; i < vars[0]; i++) - { - vars[2] = HoennToNationalOrder(i + 1); - gPokedexView->unk0[i].dexNum = vars[2]; - gPokedexView->unk0[i].seen = GetNationalPokedexFlag(vars[2], 0); - gPokedexView->unk0[i].owned = GetNationalPokedexFlag(vars[2], 1); - if (gPokedexView->unk0[i].seen) - gPokedexView->pokemonListCount = i + 1; - } - } - else - { - bool32 r10; - s16 r5; - - r10 = r5 = i = 0; - for (i = 0; i < vars[0]; i++) - { - vars[2] = i + 1; - if (GetNationalPokedexFlag(vars[2], 0)) - r10 = 1; - if (r10) - { - asm(""); //Needed to match for some reason - gPokedexView->unk0[r5].dexNum = vars[2]; - gPokedexView->unk0[r5].seen = GetNationalPokedexFlag(vars[2], 0); - gPokedexView->unk0[r5].owned = GetNationalPokedexFlag(vars[2], 1); - if (gPokedexView->unk0[r5].seen) - gPokedexView->pokemonListCount = r5 + 1; - r5++; - } - } - } - break; - case 1: - for (i = 0; i < 411; i++) - { - vars[2] = gPokedexOrder_Alphabetical[i]; - - if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 0)) - { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = GetNationalPokedexFlag(vars[2], 1); - gPokedexView->pokemonListCount++; - } - } - break; - case 2: - for (i = NATIONAL_DEX_COUNT - 1; i >= 0; i--) - { - vars[2] = gPokedexOrder_Weight[i]; - - if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1)) - { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; - gPokedexView->pokemonListCount++; - } - } - break; - case 3: - for (i = 0; i < NATIONAL_DEX_COUNT; i++) - { - vars[2] = gPokedexOrder_Weight[i]; - - if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1)) - { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; - gPokedexView->pokemonListCount++; - } - } - break; - case 4: - for (i = NATIONAL_DEX_COUNT - 1; i >=0; i--) - { - vars[2] = gPokedexOrder_Height[i]; - - if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1)) - { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; - gPokedexView->pokemonListCount++; - } - } - break; - case 5: - for (i = 0; i < NATIONAL_DEX_COUNT; i++) - { - vars[2] = gPokedexOrder_Height[i]; - - if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1)) - { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; - gPokedexView->pokemonListCount++; - } - } - break; - } - - for (i = gPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++) - { - gPokedexView->unk0[i].dexNum |= 0xFFFF; - gPokedexView->unk0[i].seen = 0; - gPokedexView->unk0[i].owned = 0; - } -} - -static void sub_808DBE8(u8 a, u16 b, u16 c) -{ - s16 _b; - u16 i; - u16 r2; - - switch (a) - { - case 0: - default: - _b = b - 5; - for (i = 0; i <= 10; i++) - { - if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF) - { - sub_808E090(0x11, i * 2, c); - } - else - { - sub_808E090(0x11, i * 2, c); - if (gPokedexView->unk0[_b].seen) - { - sub_808DEB0(_b, 0x12, i * 2, c); - sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, i * 2, c); - sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, i * 2); - } - else - { - sub_808DEB0(_b, 0x12, i * 2, c); - sub_808DF88(0, 0x11, i * 2, c); - sub_808DFE4(0, 0x17, i * 2); - } - } - _b++; - } - break; - case 1: - _b = b - 5; - if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF) - { - sub_808E090(0x11, gPokedexView->unk630 * 2, c); - } - else - { - sub_808E090(0x11, gPokedexView->unk630 * 2, c); - if (gPokedexView->unk0[_b].seen) - { - sub_808DEB0(_b, 0x12, gPokedexView->unk630 * 2, c); - sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, gPokedexView->unk630 * 2, c); - sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, gPokedexView->unk630 * 2); - } - else - { - sub_808DEB0(_b, 0x12, gPokedexView->unk630 * 2, c); - sub_808DF88(0, 0x11, gPokedexView->unk630 * 2, c); - sub_808DFE4(0, 0x17, gPokedexView->unk630 * 2); - } - } - break; - case 2: - _b = b + 5; - r2 = gPokedexView->unk630 + 10; - if (r2 > 15) - r2 -= 16; - if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF) - sub_808E090(0x11, r2 * 2, c); - else - { - sub_808E090(0x11, r2 * 2, c); - if (gPokedexView->unk0[_b].seen) - { - sub_808DEB0(_b, 0x12, r2 * 2, c); - sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, r2 * 2, c); - sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, r2 * 2); - } - else - { - sub_808DEB0(_b, 0x12, r2 * 2, c); - sub_808DF88(0, 0x11, r2 * 2, c); - sub_808DFE4(0, 0x17, r2 * 2); - } - } - break; - } -} - -static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d) -{ - u8 text[4]; - u16 unk[2]; - u16 r7 = gPokedexView->unk0[a].dexNum; - - if (gPokedexView->dexMode == DEX_MODE_HOENN) - r7 = NationalToHoennOrder(r7); - unk[0] = 0x3FC; - unk[1] = 0x3FD; - text[0] = CHAR_0 + r7 / 100; - text[1] = CHAR_0 + (r7 % 100) / 10; - text[2] = CHAR_0 + (r7 % 100) % 10; - text[3] = EOS; - *(u16 *)(VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0]; - *(u16 *)(VRAM + d * 0x800 + (c + 1) * 0x40 + b * 2) = unk[1]; - MenuPrint(text, b - 15, c); -} - -static void sub_808DF88(u16 a, u8 b, u8 c, u16 d) -{ - u16 unk[2]; - - if (a) - { - unk[0] = 0x3FE; - unk[1] = 0x3FF; - } - else - { - unk[0] = 0; - unk[1] = 0; - } - *(u16 *)(VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0]; - *(u16 *)(VRAM + d * 0x800 + (c + 1) * 0x40 + b * 2) = unk[1]; -} - -static u8 sub_808DFE4(u16 num, u8 b, u8 c) -{ - u8 text[10]; - u8 i; - - for (i = 0; i < 10; i++) - text[i] = CHAR_SPACE; - text[i] = EOS; - - num = NationalPokedexNumToSpecies(num); - switch (num) - { - default: - for (i = 0; gSpeciesNames[num][i] != EOS && i < 10; i++) - text[i] = gSpeciesNames[num][i]; - break; - case 0: - for (i = 0; i < 10; i++) - text[i] = CHAR_HYPHEN; - break; - } - MenuPrint_PixelCoords(text, (b - 0x11) * 8 + 0xFC, c * 8, 0); - return i; -} - -static void sub_808E090(u8 a, u8 b, u16 c) -{ - u8 i; - - for (i = 0; i < 12; i++) - { - *(u16 *)(VRAM + c * 0x800 + b * 64 + (a + i) * 2) = 0; - *(u16 *)(VRAM + c * 0x800 + (b + 1) * 64 + (a + i) * 2) = 0; - } -} - -static void sub_808E0CC(u16 a, u16 b) -{ - u8 i; - u16 unk; - u8 spriteId; - - for (i = 0; i < 4; i++) - gPokedexView->unk61E[i] = 0xFFFF; - gPokedexView->selectedMonSpriteId = 0xFFFF; - sub_808DBE8(0, a, b); - REG_BG2VOFS = gPokedexView->unk62D; - - unk = sub_808E888(a - 1); - if (unk != 0xFFFF) - { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; - gSprites[spriteId].data5 = -32; - } - - unk = sub_808E888(a); - if (unk != 0xFFFF) - { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; - gSprites[spriteId].data5 = 0; - } - - unk = sub_808E888(a + 1); - if (unk != 0xFFFF) - { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; - gSprites[spriteId].data5 = 32; - } - - gPokedexView->unk630 = 0; - gPokedexView->unk632 = 0; -} - -static bool8 sub_808E208(u8 a, u8 b, u8 c) -{ - u16 i; - u8 foo; - - if (gPokedexView->unk62E) - { - gPokedexView->unk62E--; - switch (a) - { - case 1: - for (i = 0; i < 4; i++) - { - if (gPokedexView->unk61E[i] != 0xFFFF) - gSprites[gPokedexView->unk61E[i]].data5 += b; - } - foo = 16 * (c - gPokedexView->unk62E) / c; - REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 - foo; - gPokedexView->unk62C -= gPokedexView->unk628; - break; - case 2: - for (i = 0; i < 4; i++) - { - if (gPokedexView->unk61E[i] != 0xFFFF) - gSprites[gPokedexView->unk61E[i]].data5 -= b; - } - foo = 16 * (c - gPokedexView->unk62E) / c; - REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 + foo; - gPokedexView->unk62C += gPokedexView->unk628; - break; - } - return FALSE; - } - else - { - REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk630 * 16; - return TRUE; - } -} - -static void sub_808E398(u8 a, u16 b) -{ - u16 unk; - u8 spriteId; - - gPokedexView->unk632 = gPokedexView->unk630; - switch (a) - { - case 1: - unk = sub_808E888(b - 1); - if (unk != 0xFFFF) - { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; - gSprites[spriteId].data5 = -64; - } - if (gPokedexView->unk630 > 0) - gPokedexView->unk630--; - else - gPokedexView->unk630 = 15; - break; - case 2: - unk = sub_808E888(b + 1); - if (unk != 0xFFFF) - { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; - gSprites[spriteId].data5 = 0x40; - } - if (gPokedexView->unk630 <= 0xE) - gPokedexView->unk630++; - else - gPokedexView->unk630 = 0; - break; - } -} - -// Ugly, ugly, ugly. I couldn't get it to match otherwise. -static u16 sub_808E48C(u16 a, u16 b) -{ - u8 r3; - u8 r5; - u8 i; - u16 r6; - u8 r10 = 0; - - if (!((gMain.heldKeys & 0x40) && (a > 0))) - { - //_0808E4B6 - if (!((gMain.heldKeys & 0x80) && (a < gPokedexView->pokemonListCount - 1))) - //_0808E4CE - { - if ((gMain.newKeys & 0x20) && (a > 0)) - { - r6 = a; - //_0808E4E0 - for (i = 0; i < 7; i++) - a = sub_8091818(1, a, 0, gPokedexView->pokemonListCount - 1); - gPokedexView->unk62C += 16 * (a - r6); - sub_808E82C(); - sub_808E0CC(a, 0xE); - PlaySE(0x6D); - } - //_0808E53C - else if ((gMain.newKeys & 0x10) && (a < gPokedexView->pokemonListCount - 1)) - { - r6 = a; - for (i = 0; i < 7; i++) - a = sub_8091818(0, a, 0, gPokedexView->pokemonListCount - 1); - gPokedexView->unk62C += (a - r6) * 16; - sub_808E82C(); - sub_808E0CC(a, 0xE); - PlaySE(0x6D); - } - _0808E5A2: - if (r10 == 0) - { - gPokedexView->unk638 = 0; - return a; - } - } - else - { - // to _0808E5C4 - r10 = 2; - a = sub_8091818(0, a, 0, gPokedexView->pokemonListCount - 1); - sub_808E398(2, a); - //goto _0808E60E - sub_808DBE8(2, a, b); - PlaySE(0x6C); - goto _0808E5A2; - } - } - else - { - //to _0808E5E4 - r10 = 1; - a = sub_8091818(1, a, 0, gPokedexView->pokemonListCount - 1); - sub_808E398(1, a); - //_0808E60E - sub_808DBE8(1, a, b); - PlaySE(0x6C); - goto _0808E5A2; - } - //_0808E628 - r5 = gUnknown_083A05EC[gPokedexView->unk638 / 4]; - r3 = gUnknown_083A05F1[gPokedexView->unk638 / 4]; - gPokedexView->unk62E = r3; - gPokedexView->unk636 = r3; - gPokedexView->unk634 = r5; - gPokedexView->unk62F = r10; - gPokedexView->unk628 = r5 / 2; - sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636); - if (gPokedexView->unk638 <= 0xB) - gPokedexView->unk638++; - return a; -} - -static void sub_808E6BC(void) -{ - u16 i; - - for (i = 0; i < 4; i++) - { - u16 spriteId = gPokedexView->unk61E[i]; - - if (gSprites[spriteId].pos2.x == 0 && gSprites[spriteId].pos2.y == 0 && spriteId != 0xFFFF) - gPokedexView->selectedMonSpriteId = spriteId; - } -} - -static u8 sub_808E71C(void) -{ - u16 r2; - u16 r4 = gPokedexView->selectedPokemon; - - if ((gMain.newKeys & DPAD_UP) && r4) - { - r2 = r4; - while (r2 != 0) - { - r2 = sub_8091818(1, r2, 0, gPokedexView->pokemonListCount - 1); - - if (gPokedexView->unk0[r2].seen) - { - r4 = r2; - break; - } - } - - if (gPokedexView->selectedPokemon == r4) - return 0; - else - { - gPokedexView->selectedPokemon = r4; - gPokedexView->unk62C -= 16; - return 1; - } - } - else if ((gMain.newKeys & DPAD_DOWN) && r4 < gPokedexView->pokemonListCount - 1) - { - r2 = r4; - while (r2 < gPokedexView->pokemonListCount - 1) - { - r2 = sub_8091818(0, r2, 0, gPokedexView->pokemonListCount - 1); - - if (gPokedexView->unk0[r2].seen) - { - r4 = r2; - break; - } - } - - if (gPokedexView->selectedPokemon == r4) - return 0; - else - { - gPokedexView->selectedPokemon = r4; - gPokedexView->unk62C += 16; - return 1; - } - } - return 0; -} - -static u8 sub_808E82C(void) -{ - u16 i; - - for (i = 0; i < 4; i++) - { - if (gPokedexView->unk61E[i] != 0xFFFF) - { - DestroySprite(&gSprites[gPokedexView->unk61E[i]]); - gPokedexView->unk61E[i] |= 0xFFFF; - } - } - return 0; -} - -static u16 sub_808E888(u16 a1) -{ - if (a1 >= NATIONAL_DEX_COUNT || gPokedexView->unk0[a1].dexNum == 0xFFFF) - return 0xFFFF; - else if (gPokedexView->unk0[a1].seen) - return gPokedexView->unk0[a1].dexNum; - else - return 0; -} - -static u32 sub_808E8C8(u16 a, s16 b, s16 c) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - if (gPokedexView->unk61E[i] == 0xFFFF) - { - u8 spriteId = sub_80918EC(a, b, c, i); - - gSprites[spriteId].oam.affineMode = 1; - gSprites[spriteId].oam.priority = 3; - gSprites[spriteId].data0 = 0; - gSprites[spriteId].data1 = i; - gSprites[spriteId].data2 = NationalPokedexNumToSpecies(a); - gPokedexView->unk61E[i] = spriteId; - return spriteId; - } - } - return 0xFFFF; -} - -static void sub_808E978(u8 a) -{ - u8 spriteId; - u16 r5; - - spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0); - gSprites[spriteId].data1 = 0; - - spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 156, 0); - gSprites[spriteId].data1 = 1; - gSprites[spriteId].vFlip = TRUE; - - CreateSprite(&gSpriteTemplate_83A0524, 234, 20, 0); - CreateSprite(&gSpriteTemplate_83A0554, 16, 138, 0); - - spriteId = CreateSprite(&gSpriteTemplate_83A0554, 48, 138, 0); - StartSpriteAnim(&gSprites[spriteId], 3); - - spriteId = CreateSprite(&gSpriteTemplate_83A0554, 16, 158, 0); - StartSpriteAnim(&gSprites[spriteId], 2); - gSprites[spriteId].data2 = 0x80; - - spriteId = CreateSprite(&gSpriteTemplate_83A0554, 48, 158, 0); - StartSpriteAnim(&gSprites[spriteId], 1); - - spriteId = CreateSprite(&gSpriteTemplate_83A056C, 0, 80, 2); - gSprites[spriteId].oam.affineMode = 1; - gSprites[spriteId].oam.matrixNum = 30; - gSprites[spriteId].data0 = 0x1E; - gSprites[spriteId].data1 = 0; - - spriteId = CreateSprite(&gSpriteTemplate_83A056C, 0, 80, 2); - gSprites[spriteId].oam.affineMode = 1; - gSprites[spriteId].oam.matrixNum = 31; - gSprites[spriteId].data0 = 0x1F; - gSprites[spriteId].data1 = 0x80; - - if (a == 0) - { - u32 _a; - - CreateSprite(&gSpriteTemplate_83A0584, 32, 40, 1); - - spriteId = CreateSprite(&gSpriteTemplate_83A0584, 32, 72, 1); - StartSpriteAnim(&gSprites[spriteId], 1); - _a = 0; - - spriteId = CreateSprite(&gSpriteTemplate_83A059C, 28, 48, 1); - r5 = gPokedexView->unk61A / 100; - StartSpriteAnim(&gSprites[spriteId], r5); - if (r5 != 0) - _a = 1; - else - gSprites[spriteId].invisible = TRUE; - - spriteId = CreateSprite(&gSpriteTemplate_83A059C, 34, 48, 1); - r5 = (gPokedexView->unk61A % 100) / 10; - if (r5 != 0 || _a != 0) - StartSpriteAnim(&gSprites[spriteId], r5); - else - gSprites[spriteId].invisible = TRUE; - - spriteId = CreateSprite(&gSpriteTemplate_83A059C, 40, 48, 1); - r5 = (gPokedexView->unk61A % 100) % 10; - StartSpriteAnim(&gSprites[spriteId], r5); - _a = 0; - - spriteId = CreateSprite(&gSpriteTemplate_83A059C, 28, 80, 1); - r5 = gPokedexView->unk61C / 100; - StartSpriteAnim(&gSprites[spriteId], r5); - if (r5 != 0) - _a = 1; - else - gSprites[spriteId].invisible = TRUE; - - spriteId = CreateSprite(&gSpriteTemplate_83A059C, 34, 80, 1); - r5 = (gPokedexView->unk61C % 100) / 10; - if (r5 != 0 || _a != 0) - StartSpriteAnim(&gSprites[spriteId], r5); - else - gSprites[spriteId].invisible = TRUE; - - spriteId = CreateSprite(&gSpriteTemplate_83A059C, 40, 80, 1); - r5 = (gPokedexView->unk61C % 100) % 10; - StartSpriteAnim(&gSprites[spriteId], r5); - - spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 140, 96, 1); - gSprites[spriteId].invisible = TRUE; - } - else - { - spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 140, 80, 1); - gSprites[spriteId].invisible = TRUE; - } -} - -static void nullsub_58(struct Sprite *sprite) -{ -} - -static void sub_808ED94(struct Sprite *sprite) -{ - if (gPokedexView->unk64A != 0) - DestroySprite(sprite); -} - -//Move Pokemon into position for description page -static void sub_808EDB8(struct Sprite *sprite) -{ - sprite->oam.priority = 0; - sprite->oam.affineMode = 0; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - if (sprite->pos1.x != 48 || sprite->pos1.y != 56) - { - if (sprite->pos1.x > 48) - sprite->pos1.x--; - if (sprite->pos1.x < 48) - sprite->pos1.x++; - - if (sprite->pos1.y > 56) - sprite->pos1.y--; - if (sprite->pos1.y < 56) - sprite->pos1.y++; - } - else - { - sprite->callback = nullsub_58; - } -} - -static void sub_808EE28(struct Sprite *sprite) -{ - u8 data1 = sprite->data1; - - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) - { - DestroySprite(sprite); - gPokedexView->unk61E[data1] = 0xFFFF; - } - else - { - u32 var; - - sprite->pos2.y = gSineTable[(u8)sprite->data5] * 76 / 256; - var = 0x10000 / gSineTable[sprite->data5 + 0x40]; - if (var > 0xFFFF) - var = 0xFFFF; - SetOamMatrix(sprite->data1 + 1, 0x100, 0, 0, var); - sprite->oam.matrixNum = data1 + 1; - - if (sprite->data5 > -64 && sprite->data5 < 64) - { - sprite->invisible = FALSE; - sprite->data0 = 1; - } - else - { - sprite->invisible = TRUE; - } - - if ((sprite->data5 <= -64 || sprite->data5 >= 64) && sprite->data0 != 0) - { - DestroySprite(sprite); - gPokedexView->unk61E[data1] = 0xFFFF; - } - } -} - -static void sub_808EF38(struct Sprite *sprite) -{ - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) - DestroySprite(sprite); - else - sprite->pos2.y = gPokedexView->selectedPokemon * 120 / (gPokedexView->pokemonListCount - 1); -} - -static void sub_808EF8C(struct Sprite *sprite) -{ - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) - { - DestroySprite(sprite); - } - else - { - u8 r0; - - if (sprite->data1 != 0) - { - if (gPokedexView->selectedPokemon == gPokedexView->pokemonListCount - 1) - sprite->invisible = TRUE; - else - sprite->invisible = FALSE; - r0 = sprite->data2; - } - else - { - if (gPokedexView->selectedPokemon == 0) - sprite->invisible = TRUE; - else - sprite->invisible = FALSE; - r0 = sprite->data2 - 128; - } - sprite->pos2.y = gSineTable[r0] / 64; - sprite->data2 = sprite->data2 + 8; - if (gPokedexView->menuIsOpen == 0 && gPokedexView->menuY == 0 && sprite->invisible == 0) - sprite->invisible = FALSE; - else - sprite->invisible = TRUE; - } -} - -static void sub_808F08C(struct Sprite *sprite) -{ - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) - DestroySprite(sprite); -} - -static void sub_808F0B4(struct Sprite *sprite) -{ - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) - { - DestroySprite(sprite); - } - else - { - u8 val; - s16 r3; - s16 r0; - - val = gPokedexView->unk62C + sprite->data1; - r3 = gSineTable[val]; - r0 = gSineTable[val + 0x40]; - SetOamMatrix(sprite->data0, r0, r3, -r3, r0); - - val = gPokedexView->unk62C + (sprite->data1 + 0x40); - r3 = gSineTable[val]; - r0 = gSineTable[val + 0x40]; - sprite->pos2.x = r0 * 40 / 256; - sprite->pos2.y = r3 * 40 / 256; - } -} - -static void sub_808F168(struct Sprite *sprite) -{ - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) - { - DestroySprite(sprite); - } - else - { - u16 r1 = gPokedexView->unk64A == 0 ? 80 : 96; - - if (gPokedexView->menuIsOpen != 0 && gPokedexView->menuY == r1) - { - sprite->invisible = FALSE; - sprite->pos2.y = gPokedexView->menuCursorPos * 16; - sprite->pos2.x = gSineTable[(u8)sprite->data2] / 64; - sprite->data2 += 8; - } - else - { - sprite->invisible = TRUE; - } - } -} - -static u8 sub_808F210(struct PokedexListItem *item, u8 b) -{ - u8 taskId; - - gUnknown_0202FFBC = item; - taskId = CreateTask(Task_InitPageScreenMultistep, 0); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 1; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = b; - return taskId; -} - -static bool8 sub_808F250(u8 taskId) -{ - if (gTasks[taskId].data[0] == 0 && gTasks[taskId].func == Task_PageScreenProcessInput) - return FALSE; - else - return TRUE; -} - -static u8 sub_808F284(struct PokedexListItem *item, u8 b) -{ - gUnknown_0202FFBC = item; - gTasks[b].data[0] = 1; - gTasks[b].data[1] = 0; - gTasks[b].data[2] = 0; - gTasks[b].data[3] = 0; - return b; -} - -#if ENGLISH -#define CATEGORY_LEFT (11) -#elif GERMAN -#define CATEGORY_LEFT (16) -#endif - -static void Task_InitPageScreenMultistep(u8 taskId) -{ - switch (gMain.state) - { - case 0: - default: - if (!gPaletteFade.active) - { - u16 r2; - - gPokedexView->unk64A = 1; - gPokedexView->descriptionPageNum = 0; - gUnknown_03005CEC = gMain.vblankCallback; - SetVBlankCallback(NULL); - r2 = 0; - if (gTasks[taskId].data[1] != 0) - r2 += 0x1000; - if (gTasks[taskId].data[2] != 0) - r2 |= 0x200; - sub_8091060(r2); - gMain.state = 1; - } - break; - case 1: - LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM); - LZ77UnCompVram(gUnknown_08E96BD4, (void *)(VRAM + 0x7800)); - sub_8091738(gUnknown_0202FFBC->dexNum, 2, 0x3FC); - gMain.state++; - break; - case 2: - sub_80904FC(0xD); - sub_8090584(gPokedexView->selectedScreen, 0xD); - sub_808D640(); - gMain.state++; - break; - case 3: - SetUpWindowConfig(&gWindowConfig_81E7064); - InitMenuWindow(&gWindowConfig_81E7064); - gMain.state++; - break; - case 4: - if (gPokedexView->dexMode == DEX_MODE_HOENN) - sub_8091154(NationalToHoennOrder(gUnknown_0202FFBC->dexNum), 0xD, 3); - else - sub_8091154(gUnknown_0202FFBC->dexNum, 0xD, 3); - sub_80911C8(gUnknown_0202FFBC->dexNum, 0x10, 3); - MenuPrint(gDexText_UnknownPoke, CATEGORY_LEFT, 5); - MenuPrint(gDexText_UnknownHeight, 16, 7); - MenuPrint(gDexText_UnknownWeight, 16, 9); - if (gUnknown_0202FFBC->owned) - { - sub_8091304(gPokedexEntries[gUnknown_0202FFBC->dexNum].categoryName, CATEGORY_LEFT, 5); - sub_8091458(gPokedexEntries[gUnknown_0202FFBC->dexNum].height, 16, 7); - sub_8091564(gPokedexEntries[gUnknown_0202FFBC->dexNum].weight, 16, 9); - MenuPrint(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13); - sub_80917CC(14, 0x3FC); - } - else - { - MenuPrint(gUnknown_083A05F8, 2, 13); - LoadPalette(gPlttBufferUnfaded + 1, 0x31, 0x1E); - } - gMain.state++; - break; - case 5: - if (gTasks[taskId].data[1] == 0) - { - gTasks[taskId].data[4] = (u16)sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0); - gSprites[gTasks[taskId].data[4]].oam.priority = 0; - } - gMain.state++; - break; - case 6: - { - u32 r3 = 0; - - if (gTasks[taskId].data[2] != 0) - r3 = 0x14; - if (gTasks[taskId].data[1] != 0) - r3 |= (1 << (gSprites[gTasks[taskId].data[4]].oam.paletteNum + 16)); - BeginNormalPaletteFade(~r3, 0, 16, 0, 0); - SetVBlankCallback(gUnknown_03005CEC); - gMain.state++; - } - break; - case 7: - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; - gMain.state++; - break; - case 8: - if (!gPaletteFade.active) - { - gMain.state++; - if (gTasks[taskId].data[3] == 0) - { - StopCryAndClearCrySongs(); - PlayCry2(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), 0, 0x7D, 0xA); - } - else - { - gMain.state++; - } - } - break; - case 9: - if (!IsCryPlayingOrClearCrySongs()) - gMain.state++; - break; - case 10: - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 1; - gTasks[taskId].data[3] = 1; - gTasks[taskId].func = Task_PageScreenProcessInput; - gMain.state = 0; - break; - } -} - -static void Task_PageScreenProcessInput(u8 taskId) -{ - if (gTasks[taskId].data[0] != 0) - { - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskId].func = sub_808F888; - PlaySE(SE_Z_SCROLL); - return; - } - if (gMain.newKeys & B_BUTTON) - { - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskId].func = Task_ClosePageScreen; - PlaySE(SE_PC_OFF); - return; - } - if (gMain.newKeys & A_BUTTON) - { - switch (gPokedexView->selectedScreen) - { - case PAGE_SCREEN: - sub_8090C68(); - break; - case AREA_SCREEN: - BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); - gTasks[taskId].func = Task_InitAreaScreenMultistep; - PlaySE(SE_PIN); - break; - case CRY_SCREEN: - BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); - gTasks[taskId].func = Task_InitCryScreenMultistep; - PlaySE(SE_PIN); - break; - case SIZE_SCREEN: - if (!gUnknown_0202FFBC->owned) - { - PlaySE(SE_HAZURE); - } - else - { - BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); - gTasks[taskId].func = Task_InitSizeScreenMultistep; - PlaySE(SE_PIN); - } - break; - } - return; - } - if (((gMain.newKeys & DPAD_LEFT) - || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) - && gPokedexView->selectedScreen > 0) - { - gPokedexView->selectedScreen--; - sub_8090584(gPokedexView->selectedScreen, 0xD); - PlaySE(SE_Z_PAGE); - return; - } - if (((gMain.newKeys & DPAD_RIGHT) - || ((gMain.newKeys & R_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) - && gPokedexView->selectedScreen < 3) - { - gPokedexView->selectedScreen++; - sub_8090584(gPokedexView->selectedScreen, 0xD); - PlaySE(SE_Z_PAGE); - return; - } -} - -static void sub_808F888(u8 taskId) -{ - if (!gPaletteFade.active) - gTasks[taskId].func = Task_InitPageScreenMultistep; -} - -static void Task_ClosePageScreen(u8 taskId) -{ - if (!gPaletteFade.active) - DestroyTask(taskId); -} - -static void Task_InitAreaScreenMultistep(u8 taskId) -{ - switch (gMain.state) - { - case 0: - default: - if (!gPaletteFade.active) - { - gPokedexView->unk64A = 5; - gUnknown_03005CEC = gMain.vblankCallback; - SetVBlankCallback(NULL); - sub_8091060(0x200); - gPokedexView->selectedScreen = AREA_SCREEN; - gMain.state = 1; - } - break; - case 1: - sub_8090540(0xD); - sub_8090644(1, 0xD); - sub_808D640(); - REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256; - gMain.state++; - break; - case 2: - ShowPokedexAreaScreen(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), &gPokedexView->unk64F); - SetVBlankCallback(gUnknown_03005CEC); - gPokedexView->unk64F = 0; - gMain.state = 0; - gTasks[taskId].func = Task_AreaScreenProcessInput; - break; - } -} - -static void Task_AreaScreenProcessInput(u8 taskId) -{ - if (gPokedexView->unk64F != 0) - gTasks[taskId].func = sub_808FA00; -} - -static void sub_808FA00(u8 taskId) -{ - if (!gPaletteFade.active) - { - switch (gPokedexView->unk64F) - { - case 1: - default: - gTasks[taskId].func = Task_InitPageScreenMultistep; - break; - case 2: - gTasks[taskId].func = Task_InitCryScreenMultistep; - break; - } - } -} - -static void Task_InitCryScreenMultistep(u8 taskId) -{ - switch (gMain.state) - { - case 0: - default: - if (!gPaletteFade.active) - { - m4aMPlayStop(&gMPlay_BGM); - gPokedexView->unk64A = 6; - gUnknown_03005CEC = gMain.vblankCallback; - SetVBlankCallback(NULL); - sub_8091060(0x200); - gPokedexView->selectedScreen = CRY_SCREEN; - gMain.state = 1; - } - break; - case 1: - LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM); - LZ77UnCompVram(gUnknown_0839F8A0, (void *)(VRAM + 0x7000)); - gMain.state++; - break; - case 2: - sub_8090540(0xD); - sub_8090644(2, 0xD); - sub_808D640(); - DmaClear16(3, (void *)(VRAM + 0xF800), 0x500); - gMain.state++; - break; - case 3: - SetUpWindowConfig(&gWindowConfig_81E702C); - InitMenuWindow(&gWindowConfig_81E702C); - ResetPaletteFade(); - gMain.state++; - break; - case 4: - MenuPrint(gDexText_CryOf, 10, 4); - sub_8091260(gUnknown_0202FFBC->dexNum, 10, 6, 2); - gMain.state++; - break; - case 5: - gTasks[taskId].data[4] = sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0); - gSprites[gTasks[taskId].data[4]].oam.priority = 0; - gUnknown_03005E98 = 0; - gMain.state++; - break; - case 6: - { - struct CryRelatedStruct sp8; - - sp8.unk0 = 0x4020; - sp8.unk2 = 0x1F; - sp8.paletteNo = 8; - sp8.yPos = 0x1E; - sp8.xPos = 0xC; - if (sub_8119E3C(&sp8, 0) != 0) - { - gMain.state++; - gUnknown_03005E98 = 0; - } - } - break; - case 7: - { - struct CryRelatedStruct sp10; - - sp10.unk0 = 0x3000; - sp10.unk2 = 0xE; - sp10.paletteNo = 9; - sp10.xPos = 0x12; - sp10.yPos = 3; - if (ShowPokedexCryScreen(&sp10, 1) != 0) - gMain.state++; - } - break; - case 8: - BeginNormalPaletteFade(-0x15, 0, 0x10, 0, 0); - SetVBlankCallback(gUnknown_03005CEC); - gMain.state++; - break; - case 9: - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(14) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG0CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; - gMain.state++; - break; - case 10: - gPokedexView->unk64F = 0; - gMain.state = 0; - gTasks[taskId].func = Task_CryScreenProcessInput; - break; - } -} - -static void Task_CryScreenProcessInput(u8 taskId) -{ - sub_8119F88(0); - - if (IsCryPlaying()) - sub_8090040(1); - else - sub_8090040(0); - - if (gMain.newKeys & A_BUTTON) - { - sub_8090040(1); - sub_811A050(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum)); - return; - } - else if (!gPaletteFade.active) - { - if (gMain.newKeys & B_BUTTON) - { - BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); - m4aMPlayContinue(&gMPlay_BGM); - gPokedexView->unk64F = 1; - gTasks[taskId].func = sub_808FFBC; - PlaySE(SE_PC_OFF); - return; - } - if ((gMain.newKeys & DPAD_LEFT) - || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) - { - BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); - m4aMPlayContinue(&gMPlay_BGM); - gPokedexView->unk64F = 2; - gTasks[taskId].func = sub_808FFBC; - PlaySE(SE_Z_PAGE); - return; - } - if ((gMain.newKeys & DPAD_RIGHT) - || ((gMain.newKeys & R_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) - { - if (!gUnknown_0202FFBC->owned) - { - PlaySE(SE_HAZURE); - } - else - { - BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); - m4aMPlayContinue(&gMPlay_BGM); - gPokedexView->unk64F = 3; - gTasks[taskId].func = sub_808FFBC; - PlaySE(SE_Z_PAGE); - } - return; - } - } -} - -static void sub_808FFBC(u8 taskId) -{ - if (!gPaletteFade.active) - { - DestroyCryMeterNeedleSprite(); - switch (gPokedexView->unk64F) - { - default: - case 1: - gTasks[taskId].func = Task_InitPageScreenMultistep; - break; - case 2: - gTasks[taskId].func = Task_InitAreaScreenMultistep; - break; - case 3: - gTasks[taskId].func = Task_InitSizeScreenMultistep; - break; - } - } -} - -static void sub_8090040(u8 a) -{ - u16 unk; - - if (a != 0) - unk = 0x392; - else - unk = 0x2AF; - LoadPalette(&unk, 0x5D, 2); -} - -static void Task_InitSizeScreenMultistep(u8 taskId) -{ - u8 spriteId; - - switch (gMain.state) - { - default: - case 0: - if (!gPaletteFade.active) - { - gPokedexView->unk64A = 7; - gUnknown_03005CEC = gMain.vblankCallback; - SetVBlankCallback(NULL); - sub_8091060(0x200); - gPokedexView->selectedScreen = SIZE_SCREEN; - gMain.state = 1; - } - break; - case 1: - LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM); - LZ77UnCompVram(gUnknown_0839F988, (void *)(VRAM + 0x7000)); - gMain.state++; - break; - case 2: - sub_8090540(0xD); - sub_8090644(3, 0xD); - sub_808D640(); - gMain.state++; - break; - case 3: - { - u8 string[40]; //I hope this is the correct size - - SetUpWindowConfig(&gWindowConfig_81E702C); - InitMenuWindow(&gWindowConfig_81E702C); - string[0] = EOS; - StringAppend(string, gDexText_SizeComparedTo); - StringAppend(string, gSaveBlock2.playerName); - sub_8072BD8(string, 3, 15, 0xC0); - gMain.state++; - } - break; - case 4: - ResetPaletteFade(); - gMain.state++; - break; - case 5: - spriteId = sub_8091A4C(gSaveBlock2.playerGender, 152, 56, 0); - gSprites[spriteId].oam.affineMode = 1; - gSprites[spriteId].oam.matrixNum = 1; - gSprites[spriteId].oam.priority = 0; - gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerOffset; - SetOamMatrix(1, gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerScale); - LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(gUnknown_083B4EC4)); - gMain.state++; - break; - case 6: - spriteId = sub_80918EC(gUnknown_0202FFBC->dexNum, 88, 56, 1); - gSprites[spriteId].oam.affineMode = 1; - gSprites[spriteId].oam.matrixNum = 2; - gSprites[spriteId].oam.priority = 0; - gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonOffset; - SetOamMatrix(2, gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonScale); - LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(gUnknown_083B4EC4)); - gMain.state++; - break; - case 7: - BeginNormalPaletteFade(-0x15, 0, 0x10, 0, 0); - SetVBlankCallback(gUnknown_03005CEC); - gMain.state++; - break; - case 8: - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(14) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; - gMain.state++; - break; - case 9: - if (!gPaletteFade.active) - { - gPokedexView->unk64F = 0; - gMain.state = 0; - gTasks[taskId].func = Task_SizeScreenProcessInput; - } - break; - } -} - -static void Task_SizeScreenProcessInput(u8 taskId) -{ - if (gMain.newKeys & B_BUTTON) - { - BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); - gPokedexView->unk64F = 1; - gTasks[taskId].func = sub_8090498; - PlaySE(SE_PC_OFF); - } - else if ((gMain.newKeys & DPAD_LEFT) - || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) - { - BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); - gPokedexView->unk64F = 2; - gTasks[taskId].func = sub_8090498; - PlaySE(SE_Z_PAGE); - } -} - -static void sub_8090498(u8 taskId) -{ - if (!gPaletteFade.active) - { - switch (gPokedexView->unk64F) - { - default: - case 1: - gTasks[taskId].func = Task_InitPageScreenMultistep; - break; - case 2: - gTasks[taskId].func = Task_InitCryScreenMultistep; - break; - } - } -} - -static void sub_80904FC(u16 a) -{ - LZ77UnCompVram(gUnknown_08E96ACC, (void *)(VRAM + a * 0x800)); - DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440); -} - -static void sub_8090540(u16 a) -{ - LZ77UnCompVram(gUnknown_08E96B58, (void *)(VRAM + a * 0x800)); - DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440); -} - -#ifdef NONMATCHING -static void sub_8090584(u8 a, u16 b) -{ - u8 i; //r1 - u8 j; //r3 - u32 r6; - register u8 r7; - - for (i = 0; i < 4; i++) - { - r7 = i * 5 + 1; - r6 = 0x4000; - - if (i == a) - r6 = 0x2000; - - for (j = 0; j < 5; j++) - { - u32 r0 = b * 0x800 + (r7 + j) * 2; - u8 *ptr; - - ptr = VRAM; - *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6; - ptr = VRAM + 0x40; - *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6; - } - } - r6 = 0x4000; - for (j = 0; j < 5; j++) - { - u32 r0 = b * 0x800 + j * 2; - u8 *ptr; - - ptr = VRAM + 0x32; - *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6; - ptr = VRAM + 0x72; - *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6; - } -} -#else -__attribute__((naked)) -static void sub_8090584(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\ - mov r9, r1\n\ - movs r1, 0\n\ -_0809059C:\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - movs r6, 0x80\n\ - lsls r6, 7\n\ - cmp r1, r10\n\ - bne _080905B2\n\ - movs r6, 0x80\n\ - lsls r6, 6\n\ -_080905B2:\n\ - movs r3, 0\n\ - mov r0, r9\n\ - lsls r0, 11\n\ - mov r12, r0\n\ - adds r1, 0x1\n\ - mov r8, r1\n\ - mov r5, r12\n\ - ldr r4, _08090634 @ =0x00000fff\n\ -_080905C2:\n\ - adds r0, r7, r3\n\ - lsls r0, 1\n\ - adds r0, r5, r0\n\ - movs r2, 0xC0\n\ - lsls r2, 19\n\ - adds r1, r0, r2\n\ - ldrh r2, [r1]\n\ - ands r2, r4\n\ - orrs r2, r6\n\ - strh r2, [r1]\n\ - ldr r1, _08090638 @ =0x06000040\n\ - adds r0, r1\n\ - ldrh r2, [r0]\n\ - ands r2, r4\n\ - orrs r2, r6\n\ - strh r2, [r0]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0x4\n\ - bls _080905C2\n\ - mov r2, r8\n\ - lsls r0, r2, 24\n\ - lsrs r1, r0, 24\n\ - cmp r1, 0x3\n\ - bls _0809059C\n\ - movs r6, 0x80\n\ - lsls r6, 7\n\ - movs r3, 0\n\ - mov r5, r12\n\ - ldr r4, _08090634 @ =0x00000fff\n\ -_08090600:\n\ - lsls r0, r3, 1\n\ - adds r0, r5, r0\n\ - ldr r2, _0809063C @ =0x06000032\n\ - adds r1, r0, r2\n\ - ldrh r2, [r1]\n\ - ands r2, r4\n\ - orrs r2, r6\n\ - strh r2, [r1]\n\ - ldr r1, _08090640 @ =0x06000072\n\ - adds r0, r1\n\ - ldrh r2, [r0]\n\ - ands r2, r4\n\ - orrs r2, r6\n\ - strh r2, [r0]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0x4\n\ - bls _08090600\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\ -_08090634: .4byte 0x00000fff\n\ -_08090638: .4byte 0x06000040\n\ -_0809063C: .4byte 0x06000032\n\ -_08090640: .4byte 0x06000072\n\ - .syntax divided\n"); -} -#endif - -//Nope, can't get this one to match, either. -#ifdef NONMATCHING -static void sub_8090644(u8 a, u16 b) -{ - u8 i; - u8 j; - - for (i = 0; i < 4; i++) - { - u8 r8 = i * 5 + 1; - u32 r5; - - if (i == a || i == 0) - r5 = 0x2000; - else if (a != 0) - r5 = 0x4000; - - for (j = 0; j < 5; j++) - { - u16 (*vramData)[0x400]; - - vramData = (u16 (*)[])VRAM; - vramData[b][r8 + j] = vramData[b][r8 + j] & 0xFFF | r5; - vramData = (u16 (*)[])(VRAM + 0x40); - vramData[b][r8 + j] = vramData[b][r8 + j] & 0xFFF | r5; - } - } - - for (j = 0; j < 5; j++) - { - u16 (*vramData)[0x400]; - - vramData = (u16 (*)[])(VRAM + 0x32); - vramData[b][j] = vramData[b][j] & 0xFFF | 0x4000; - vramData = (u16 (*)[])(VRAM + 0x72); - vramData[b][j] = vramData[b][j] & 0xFFF | 0x4000; - } -} -#else -__attribute__((naked)) -static void sub_8090644(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\ - mov r9, r1\n\ - movs r1, 0\n\ -_0809065C:\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - cmp r1, r10\n\ - beq _08090670\n\ - cmp r1, 0\n\ - bne _08090676\n\ -_08090670:\n\ - movs r5, 0x80\n\ - lsls r5, 6\n\ - b _0809067A\n\ -_08090676:\n\ - movs r5, 0x80\n\ - lsls r5, 7\n\ -_0809067A:\n\ - movs r3, 0\n\ - mov r0, r9\n\ - lsls r7, r0, 11\n\ - adds r1, 0x1\n\ - mov r12, r1\n\ - adds r6, r7, 0\n\ - ldr r4, _080906FC @ =0x00000fff\n\ -_08090688:\n\ - mov r1, r8\n\ - adds r0, r1, r3\n\ - lsls r0, 1\n\ - adds r0, r6, r0\n\ - movs r2, 0xC0\n\ - lsls r2, 19\n\ - adds r1, r0, r2\n\ - ldrh r2, [r1]\n\ - ands r2, r4\n\ - orrs r2, r5\n\ - strh r2, [r1]\n\ - ldr r1, _08090700 @ =0x06000040\n\ - adds r0, r1\n\ - ldrh r2, [r0]\n\ - ands r2, r4\n\ - orrs r2, r5\n\ - strh r2, [r0]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0x4\n\ - bls _08090688\n\ - mov r2, r12\n\ - lsls r0, r2, 24\n\ - lsrs r1, r0, 24\n\ - cmp r1, 0x3\n\ - bls _0809065C\n\ - movs r5, 0x80\n\ - lsls r5, 7\n\ - movs r3, 0\n\ - adds r6, r7, 0\n\ - ldr r4, _080906FC @ =0x00000fff\n\ -_080906C8:\n\ - lsls r0, r3, 1\n\ - adds r0, r6, r0\n\ - ldr r2, _08090704 @ =0x06000032\n\ - adds r1, r0, r2\n\ - ldrh r2, [r1]\n\ - ands r2, r4\n\ - orrs r2, r5\n\ - strh r2, [r1]\n\ - ldr r1, _08090708 @ =0x06000072\n\ - adds r0, r1\n\ - ldrh r2, [r0]\n\ - ands r2, r4\n\ - orrs r2, r5\n\ - strh r2, [r0]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0x4\n\ - bls _080906C8\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\ -_080906FC: .4byte 0x00000fff\n\ -_08090700: .4byte 0x06000040\n\ -_08090704: .4byte 0x06000032\n\ -_08090708: .4byte 0x06000072\n\ - .syntax divided\n"); -} -#endif - -u8 sub_809070C(u16 dexNum, u32 b, u32 c) -{ - u8 taskId = CreateTask(sub_8090750, 0); - - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = dexNum; - gTasks[taskId].data[12] = b; - gTasks[taskId].data[13] = b >> 16; - gTasks[taskId].data[14] = c; - gTasks[taskId].data[15] = c >> 16; - return taskId; -} - -static void sub_8090750(u8 taskId) -{ - u8 spriteId; - u16 dexNum = gTasks[taskId].data[1]; - u16 i; - - switch (gTasks[taskId].data[0]) - { - case 0: - default: - if (!gPaletteFade.active) - { - gUnknown_03005CEC = gMain.vblankCallback; - SetVBlankCallback(NULL); - sub_8091060(0x100); - gTasks[taskId].data[0] = 1; - } - break; - case 1: - LZ77UnCompVram(gPokedexMenu_Gfx, (void *)(VRAM + 0x4000)); - LZ77UnCompVram(gUnknown_08E96BD4, (void *)(VRAM + 0x7800)); - for (i = 0; i < 0x280; i++) - { -#ifndef NONMATCHING - asm(""); -#endif - *(u16 *)(VRAM + 0x7800 + 2 * i) += 0x2000; - } - sub_8091738(gTasks[taskId].data[1], 2, 0x3FC); - ResetPaletteFade(); - LoadPalette(gPokedexMenu_Pal + 1, 0x21, 0x9E); - gTasks[taskId].data[0]++; - break; - case 2: - SetUpWindowConfig(&gWindowConfig_81E7064); - InitMenuWindow(&gWindowConfig_81E7064); - DmaClear16(3, (void *)(VRAM + 0xC000), 0x200); - gTasks[taskId].data[0]++; - break; - case 3: - sub_8072BD8(gDexText_RegisterComplete, 2, 0, 0xD0); - if (!IsNationalPokedexEnabled()) - sub_8091154(NationalToHoennOrder(dexNum), 13, 3); - else - sub_8091154(dexNum, 13, 3); - sub_80911C8(dexNum, 16, 3); - MenuPrint(gDexText_UnknownPoke, CATEGORY_LEFT, 5); - MenuPrint(gDexText_UnknownHeight, 16, 7); - MenuPrint(gDexText_UnknownWeight, 16, 9); - sub_8091304(gPokedexEntries[dexNum].categoryName, CATEGORY_LEFT, 5); - sub_8091458(gPokedexEntries[dexNum].height, 16, 7); - sub_8091564(gPokedexEntries[dexNum].weight, 16, 9); - MenuPrint(gPokedexEntries[dexNum].descriptionPage1, 2, 13); - sub_80917CC(14, 0x3FC); - gTasks[taskId].data[0]++; - break; - case 4: - spriteId = sub_80918EC(dexNum, 0x30, 0x38, 0); - gSprites[spriteId].oam.priority = 0; - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - SetVBlankCallback(gUnknown_03005CEC); - gTasks[taskId].data[3] = spriteId; - gTasks[taskId].data[0]++; - break; - case 5: - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; - gTasks[taskId].data[0]++; - break; - case 6: - if (!gPaletteFade.active) - { - PlayCry1(NationalPokedexNumToSpecies(dexNum), 0); - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[4] = 0; - gTasks[taskId].func = sub_8090A3C; - } - break; - } -} - -static void sub_8090A3C(u8 taskId) -{ - if (gMain.newKeys & B_BUTTON) - { - BeginNormalPaletteFade(0x0000FFFC, 0, 0, 16, 0); - gSprites[gTasks[taskId].data[3]].callback = sub_8090C28; - gTasks[taskId].func = sub_8090B8C; - return; - } - else if (gMain.newKeys & A_BUTTON) - { - if (gTasks[taskId].data[4] == 0) - { - u16 r4 = gTasks[taskId].data[1]; - - MenuZeroFillWindowRect(2, 13, 27, 19); - MenuPrint(gPokedexEntries[r4].descriptionPage2, 2, 13); - (*(u16 *)(VRAM + 0x7ACA))++; - (*(u16 *)(VRAM + 0x7B0A))++; - gTasks[taskId].data[4] = 1; - PlaySE(SE_PIN); - } - else - { - BeginNormalPaletteFade(0x0000FFFC, 0, 0, 16, 0); - gSprites[gTasks[taskId].data[3]].callback = sub_8090C28; - gTasks[taskId].func = sub_8090B8C; - return; - } - } - gTasks[taskId].data[2]++; - if (gTasks[taskId].data[2] & 0x10) - LoadPalette(gPokedexMenu_Pal + 1, 0x51, 14); - else - LoadPalette(gPokedexMenu2_Pal + 1, 0x51, 14); -} - -static void sub_8090B8C(u8 taskId) -{ - if (!gPaletteFade.active) - { - u16 species; - u32 otId; - u32 personality; - u8 paletteNum; - const u8 *lzPaletteData; - - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; - CpuCopy16(gUnknown_08D00524, (void *)(VRAM + 0xC000), 0x1000); - sub_800D74C(); - species = NationalPokedexNumToSpecies(gTasks[taskId].data[1]); - otId = ((u16)gTasks[taskId].data[13] << 16) | (u16)gTasks[taskId].data[12]; - personality = ((u16)gTasks[taskId].data[15] << 16) | (u16)gTasks[taskId].data[14]; - paletteNum = gSprites[gTasks[taskId].data[3]].oam.paletteNum; - lzPaletteData = species_and_otid_get_pal(species, otId, personality); - LoadCompressedPalette(lzPaletteData, 0x100 | paletteNum * 16, 32); - DestroyTask(taskId); - } -} - -static void sub_8090C28(struct Sprite *sprite) -{ - if (sprite->pos1.x < 0x78) - sprite->pos1.x += 2; - if (sprite->pos1.x > 0x78) - sprite->pos1.x -= 2; - - if (sprite->pos1.y < 0x50) - sprite->pos1.y += 1; - if (sprite->pos1.y > 0x50) - sprite->pos1.y -= 1; -} - -static void sub_8090C68(void) -{ - if (gUnknown_0202FFBC->owned) - { - if (gPokedexView->descriptionPageNum == 0) - { - MenuZeroFillWindowRect(2, 13, 27, 19); - MenuPrint(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage2, 2, 13); - gPokedexView->descriptionPageNum = 1; - (*(u16 *)(VRAM + 0x7ACA))++; - (*(u16 *)(VRAM + 0x7B0A))++; - PlaySE(SE_PIN); - } - else - { - MenuZeroFillWindowRect(2, 13, 27, 19); - MenuPrint(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13); - gPokedexView->descriptionPageNum = 0; - (*(u16 *)(VRAM + 0x7ACA))--; - (*(u16 *)(VRAM + 0x7B0A))--; - PlaySE(SE_PIN); - } - } -} - -const u8 *GetPokemonCategory(u16 dexNum) -{ - return gPokedexEntries[dexNum].categoryName; -} - -u16 GetPokedexHeightWeight(u16 dexNum, u8 data) -{ - switch (data) - { - case 0: // height - return gPokedexEntries[dexNum].height; - case 1: // weight - return gPokedexEntries[dexNum].weight; - default: - return 1; - } -} - -s8 GetNationalPokedexFlag(u16 a, u8 b) -{ - u8 index; - u8 bit; - u8 mask; - s8 retVal; - - a--; - index = a / 8; - bit = a % 8; - mask = 1 << bit; - retVal = 0; - switch (b) - { - case 0: - if (gSaveBlock2.pokedex.seen[index] & mask) - { - if ((gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.unk938[index] & mask) - && (gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.unk3A8C[index] & mask)) - retVal = 1; - else - { - gSaveBlock2.pokedex.seen[index] &= ~mask; - gSaveBlock1.unk938[index] &= ~mask; - gSaveBlock1.unk3A8C[index] &= ~mask; - retVal = 0; - } - } - break; - case 1: - if (gSaveBlock2.pokedex.owned[index] & mask) - { - if ((gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock2.pokedex.seen[index] & mask) - && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.unk938[index] & mask) - && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.unk3A8C[index] & mask)) - retVal = 1; - else - { - gSaveBlock2.pokedex.owned[index] &= ~mask; - gSaveBlock2.pokedex.seen[index] &= ~mask; - gSaveBlock1.unk938[index] &= ~mask; - gSaveBlock1.unk3A8C[index] &= ~mask; - retVal = 0; - } - } - break; - case 2: - gSaveBlock2.pokedex.seen[index] |= mask; - gSaveBlock1.unk938[index] |= mask; - gSaveBlock1.unk3A8C[index] |= mask; - break; - case 3: - gSaveBlock2.pokedex.owned[index] |= mask; - break; - } - return retVal; -} - -u16 GetNationalPokedexCount(u8 a) -{ - u16 count = 0; - u16 i; - - for (i = 0; i < NATIONAL_DEX_COUNT; i++) - { - switch (a) - { - case 0: - if (GetNationalPokedexFlag(i + 1, 0) != 0) - count++; - break; - case 1: - if (GetNationalPokedexFlag(i + 1, 1) != 0) - count++; - break; - } - } - return count; -} - -u16 GetHoennPokedexCount(u8 a) -{ - u16 count = 0; - u16 i; - - for (i = 0; i < 202; i++) - { - switch (a) - { - case 0: - if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 0) != 0) - count++; - break; - case 1: - if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 1) != 0) - count++; - break; - } - } - return count; -} - -bool8 sub_8090FC0(void) -{ - u16 i; - - for (i = 0; i < 200; i++) - { - if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 1) == 0) - return FALSE; - } - return TRUE; -} - -u16 sub_8090FF4(void) -{ - u16 i; - - for (i = 0; i < 150; i++) - { - if (GetNationalPokedexFlag(i + 1, 1) == 0) - return 0; - } - for (i = 152; i < 250; i++) - { - if (GetNationalPokedexFlag(i + 1, 1) == 0) - return 0; - } - for (i = 252; i < 384; i++) - { - if (GetNationalPokedexFlag(i + 1, 1) == 0) - return 0; - } - return 1; -} - -static void sub_8091060(u16 a) -{ - if (!(a & 0x100)) - { - REG_DISPCNT &= 0xFEFF; - REG_BG0CNT = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - } - if (!(a & 0x200)) - { - REG_DISPCNT &= 0xFDFF; - REG_BG1CNT = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - } - if (!(a & 0x400)) - { - REG_DISPCNT &= 0xFBFF; - REG_BG2CNT = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - } - if (!(a & 0x800)) - { - REG_DISPCNT &= 0xF7FF; - REG_BG3CNT = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - } - if (!(a & 0x1000)) - { - REG_DISPCNT &= 0xEFFF; - ResetSpriteData(); - FreeAllSpritePalettes(); - gReservedSpritePaletteCount = 8; - } -} - -static void sub_8091154(u16 order, u8 b, u8 c) -{ - u8 str[4]; - - str[0] = CHAR_0 + order / 100; - str[1] = CHAR_0 + (order % 100) / 10; - str[2] = CHAR_0 + (order % 100) % 10; - str[3] = EOS; - MenuPrint(str, b, c); -} - -static u8 sub_80911C8(u16 num, u8 b, u8 c) -{ - u8 str[11]; - u8 i; - - for (i = 0; i < 11; i++) - str[i] = EOS; - num = NationalPokedexNumToSpecies(num); - switch (num) - { - default: - for (i = 0; gSpeciesNames[num][i] != EOS && i < 10; i++) - str[i] = gSpeciesNames[num][i]; - break; - case 0: - for (i = 0; i < 10; i++) - str[i] = 0xAE; - break; - } - MenuPrint(str, b, c); - return i; -} - -static u8 sub_8091260(u16 num, u8 b, u8 c, u8 d) -{ - u8 str[40]; - u8 *end; - u8 i; - - end = StringCopy(str, gUnknown_083B5558); - str[2] = d; - num = NationalPokedexNumToSpecies(num); - switch (num) - { - default: - for (i = 0; gSpeciesNames[num][i] != EOS && i < 10; i++) - end[i] = gSpeciesNames[num][i]; - break; - case 0: - for (i = 0; i < 10; i++) - end[i] = 0xAE; - break; - } - end[i] = EOS; - MenuPrint(str, b, c); - return i; -} - -static void sub_8091304(const u8 *name, u8 left, u8 top) -{ - u8 str[32]; - u8 i; -#if ENGLISH - u8 j; -#endif - - for (i = 0; name[i] != EOS && i < 11; i++) - str[i] = name[i]; -#if ENGLISH - for (j = 0; gDexText_UnknownPoke[j] == 0xAC || gDexText_UnknownPoke[j] == 0; j++) - ; - j--; - while (gDexText_UnknownPoke[j] != EOS) - str[i++] = gDexText_UnknownPoke[j++]; -#endif - str[i] = EOS; - sub_8072B80(str, left, top, gDexText_UnknownPoke); -} - -#if ENGLISH -void unref_sub_80913A4(u16 a, u8 left, u8 top) -{ - u8 str[6]; - bool8 outputted = FALSE; - u8 result; - - result = a / 1000; - if (result == 0) - { - str[0] = CHAR_SPACE; - outputted = FALSE; - } - else - { - str[0] = CHAR_0 + result; - outputted = TRUE; - } - - result = (a % 1000) / 100; - if (result == 0 && !outputted) - { - str[1] = CHAR_SPACE; - outputted = FALSE; - } - else - { - str[1] = CHAR_0 + result; - outputted = TRUE; - } - - str[2] = CHAR_0 + ((a % 1000) % 100) / 10; - str[3] = CHAR_PERIOD; - str[4] = CHAR_0 + ((a % 1000) % 100) % 10; - str[5] = EOS; - MenuPrint(str, left, top); -} -#elif GERMAN -void unref_sub_80913A4(u16 arg0, u8 left, u8 top) { - u8 buffer[8]; - int offset; - u8 result; - - u8 r6 = 0; - offset = 0; - - - buffer[r6++] = 0xFC; - buffer[r6++] = 0x13; - r6++; - - result = (arg0 / 1000); - if (result == 0) - { - offset = 6; - } - else - { - buffer[r6++] = result + CHAR_0; - } - - - result = (arg0 % 1000) / 100; - - if (result == 0 && offset != 0) - { - offset += 6; - } - else - { - buffer[r6++] = result + CHAR_0; - } - - buffer[r6++] = (((arg0 % 1000) % 100) / 10) + CHAR_0; - buffer[r6++] = CHAR_COMMA; - buffer[r6++] = (((arg0 % 1000) % 100) % 10) + CHAR_0; - - buffer[r6++] = EOS; - buffer[2] = offset; - MenuPrint(buffer, left, top); -} -#endif - -#ifdef UNITS_IMPERIAL -#define CHAR_PRIME (0xB4) -#define CHAR_DOUBLE_PRIME (0xB2) -static void sub_8091458(u16 height, u8 left, u8 top) -{ - u8 buffer[16]; - u32 inches, feet; - u8 i = 0; - - inches = (height * 10000) / 254; - if (inches % 10 >= 5) - inches += 10; - feet = inches / 120; - inches = (inches - (feet * 120)) / 10; - - buffer[i++] = EXT_CTRL_CODE_BEGIN; - buffer[i++] = 0x13; - if (feet / 10 == 0) - { - buffer[i++] = 18; - buffer[i++] = feet + CHAR_0; - } - else - { - buffer[i++] = 12; - buffer[i++] = feet / 10 + CHAR_0; - buffer[i++] = (feet % 10) + CHAR_0; - } - buffer[i++] = CHAR_PRIME; - buffer[i++] = (inches / 10) + CHAR_0; - buffer[i++] = (inches % 10) + CHAR_0; - buffer[i++] = CHAR_DOUBLE_PRIME; - buffer[i++] = EOS; - MenuPrint(buffer, left, top); -} -#else -static void sub_8091458(u16 height, u8 left, u8 top) -{ - unref_sub_80913A4(height, left, top); -} -#endif - -#ifdef UNITS_IMPERIAL -static void sub_8091564(u16 weight, u8 left, u8 top) -{ - u8 buffer[16]; - u32 lbs; - u8 i = 0; - bool8 output; - - lbs = (weight * 100000) / 4536; - if (lbs % 10 >= 5) - lbs += 10; - output = FALSE; - - buffer[i] = (lbs / 100000) + CHAR_0; - if (buffer[i] == CHAR_0 && output == FALSE) - { - buffer[i++] = CHAR_SPACE; - buffer[i++] = CHAR_SPACE; - } - else - { - output = TRUE; - i++; - } - - lbs = (lbs % 100000); - buffer[i] = (lbs / 10000) + CHAR_0; - if (buffer[i] == CHAR_0 && output == FALSE) - { - buffer[i++] = CHAR_SPACE; - buffer[i++] = CHAR_SPACE; - } - else - { - output = TRUE; - i++; - } - - lbs = (lbs % 10000); - buffer[i] = (lbs / 1000) + CHAR_0; - if (buffer[i] == CHAR_0 && output == FALSE) - { - buffer[i++] = CHAR_SPACE; - buffer[i++] = CHAR_SPACE; - } - else - { - output = TRUE; - i++; - } - lbs = (lbs % 1000); - buffer[i++] = (lbs / 100) + CHAR_0; - lbs = (lbs % 100); - buffer[i++] = CHAR_PERIOD; - buffer[i++] = (lbs / 10) + CHAR_0; - buffer[i++] = CHAR_SPACE; - buffer[i++] = CHAR_l; - buffer[i++] = CHAR_b; - buffer[i++] = CHAR_s; - buffer[i++] = CHAR_PERIOD; - buffer[i++] = EOS; - MenuPrint(buffer, left, top); -} -#else -static void sub_8091564(u16 arg0, u8 left, u8 top) -{ - unref_sub_80913A4(arg0, left, top); -} -#endif - -static void sub_8091738(u16 num, u16 b, u16 c) -{ - u8 arr[0x80]; - u16 i; - u16 j; - const u8 *r12; - u16 r7; - u8 r3; - - r12 = sMonFootprintTable[NationalPokedexNumToSpecies(num)]; - for (r7 = 0, i = 0; i < 32; i++) - { - r3 = r12[i]; - for (j = 0; j < 4; j++) - { - u32 r1 = j * 2; - s32 r2 = (r3 >> r1) & 1; - - if (r3 & (2 << r1)) - r2 |= 0x10; - -// Needed to match -#ifndef NONMATCHING - asm("");asm("");asm("");asm("");asm(""); -#endif - - arr[r7] = r2; - r7++; - } - } - CpuCopy16(arr, (u16 *)(VRAM + b * 0x4000 + c * 0x20), 0x80); -} - -static void sub_80917CC(u16 a, u16 b) -{ - *(u16 *)(VRAM + a * 0x800 + 0x232) = 0xF000 + b + 0; - *(u16 *)(VRAM + a * 0x800 + 0x234) = 0xF000 + b + 1; - *(u16 *)(VRAM + a * 0x800 + 0x272) = 0xF000 + b + 2; - *(u16 *)(VRAM + a * 0x800 + 0x274) = 0xF000 + b + 3; -} - -static u16 sub_8091818(u8 a, u16 b, u16 c, u16 d) -{ - switch (a) - { - case 1: - if (b > c) - b--; - break; - case 0: - if (b < d) - b++; - break; - case 3: - if (b > c) - b--; - else - b = d; - break; - case 2: - if (b < d) - b++; - else - b = c; - break; - } - return b; -} - -static void nullsub_59(struct Sprite *sprite) -{ -} - -static void sub_8091878(u16 a, u8 b) -{ - gUnknown_02024E8C = gUnknown_083B57A4; - gUnknown_02024E8C.paletteTag = a; - gUnknown_02024E8C.images = gUnknown_083B5794[b]; - gUnknown_02024E8C.anims = gSpriteAnimTable_81E7C64; -} - -static void sub_80918B0(u16 a, u8 b) -{ - gUnknown_02024E8C = gUnknown_083B57A4; - gUnknown_02024E8C.paletteTag = a; - gUnknown_02024E8C.images = gUnknown_083B5794[b]; - gUnknown_02024E8C.anims = gUnknown_081EC2A4[0]; -} - -u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum) -{ - u8 spriteId; - - num = NationalPokedexNumToSpecies(num); - switch (num) - { - default: - DecompressPicFromTable_2( - &gMonFrontPicTable[num], - gMonFrontPicCoords[num].coords, - gMonFrontPicCoords[num].y_offset, - (void *)0x02000000, - gUnknown_083B5584[paletteNum], - num); - break; - case SPECIES_SPINDA: - LoadSpecialPokePic( - &gMonFrontPicTable[num], - gMonFrontPicCoords[num].coords, - gMonFrontPicCoords[num].y_offset, - 0x02000000, - gUnknown_083B5584[paletteNum], - num, - gSaveBlock2.pokedex.spindaPersonality, - 1); - break; - case SPECIES_UNOWN: - LoadSpecialPokePic( - &gMonFrontPicTable[num], - gMonFrontPicCoords[num].coords, - gMonFrontPicCoords[num].y_offset, - 0x02000000, - gUnknown_083B5584[paletteNum], - num, - gSaveBlock2.pokedex.unownPersonality, - 1); - break; - } - LoadCompressedPalette(gMonPaletteTable[num].data, 0x100 + paletteNum * 16, 32); - sub_8091878(paletteNum, paletteNum); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); - gSprites[spriteId].oam.paletteNum = paletteNum; - return spriteId; -} - -static u8 sub_8091A4C(u16 gender, s16 x, s16 y, u16 paletteNum) -{ - u8 spriteId; - - DecompressPicFromTable_2( - &gTrainerFrontPicTable[gender], - gTrainerFrontPicCoords[gender].coords, - gTrainerFrontPicCoords[gender].y_offset, - (void *)0x02000000, - gUnknown_083B5584[0], - gender); - sub_80918B0(gender, 0); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); - gSprites[spriteId].oam.paletteNum = paletteNum; - return spriteId; -} - -int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) -{ - u16 species; - u16 i; - u16 resultsCount; - u8 types[2]; - - SortPokedex(a, b); - - for (i = 0, resultsCount = 0; i < NATIONAL_DEX_COUNT; i++) - { - if (gPokedexView->unk0[i].seen) - { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; - resultsCount++; - } - } - gPokedexView->pokemonListCount = resultsCount; - - // Search by name - if (abcGroup != 0xFF) - { - for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++) - { - u8 r3; - - species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); - r3 = gSpeciesNames[species][0]; - if ((r3 >= gUnknown_083B57BC[abcGroup][0] && r3 < gUnknown_083B57BC[abcGroup][0] + gUnknown_083B57BC[abcGroup][1]) - || (r3 >= gUnknown_083B57BC[abcGroup][2] && r3 < gUnknown_083B57BC[abcGroup][2] + gUnknown_083B57BC[abcGroup][3])) - { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; - resultsCount++; - } - } - gPokedexView->pokemonListCount = resultsCount; - } - - // Search by body color - if (bodyColor != 0xFF) - { - for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++) - { - species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); - - if (bodyColor == gBaseStats[species].bodyColor) - { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; - resultsCount++; - } - } - gPokedexView->pokemonListCount = resultsCount; - } - - // Search by type - if (type1 != 0xFF || type2 != 0xFF) - { - if (type1 == 0xFF) - { - type1 = type2; - type2 = 0xFF; - } - - if (type2 == 0xFF) - { - for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++) - { - if (gPokedexView->unk0[i].owned) - { - species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); - - types[0] = gBaseStats[species].type1; - types[1] = gBaseStats[species].type2; - if (types[0] == type1 || types[1] == type1) - { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; - resultsCount++; - } - } - } - } - else - { - for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++) - { - if (gPokedexView->unk0[i].owned) - { - species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); - - types[0] = gBaseStats[species].type1; - types[1] = gBaseStats[species].type2; - if ((types[0] == type1 && types[1] == type2) || (types[0] == type2 && types[1] == type1)) - { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; - resultsCount++; - } - } - } - } - gPokedexView->pokemonListCount = resultsCount; - } - - if (gPokedexView->pokemonListCount != 0) - { - for (i = gPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++) - { - gPokedexView->unk0[i].dexNum = 0xFFFF; - gPokedexView->unk0[i].seen = FALSE; - gPokedexView->unk0[i].owned = FALSE; - - } - } - - return resultsCount; -} - -#if ENGLISH -#define SUB_8091E20_WIDTH (208) -#elif GERMAN -#define SUB_8091E20_WIDTH (216) -#endif - -void sub_8091E20(const u8 *str) -{ - sub_8072AB0(str, 9, 120, SUB_8091E20_WIDTH, 32, 1); -} - -u8 sub_8091E3C(void) -{ - return CreateTask(sub_8091E54, 0); -} - -static void sub_8091E54(u8 taskId) -{ - u16 i; - - switch (gMain.state) - { - default: - case 0: - if (!gPaletteFade.active) - { - gPokedexView->unk64A = 2; - sub_8091060(0); - LZ77UnCompVram(gPokedexMenuSearch_Gfx, (void *)VRAM); - LZ77UnCompVram(gUnknown_08E96D2C, (void *)(VRAM + 0x7800)); - LoadPalette(gPokedexMenuSearch_Pal + 1, 1, 0x7E); - if (!IsNationalPokedexEnabled()) - { - for (i = 0; i < 17; i++) - { - ((u16 *)(VRAM + 0x7A80))[i] = ((u16 *)(VRAM + 0x7B00))[i]; - ((u16 *)(VRAM + 0x7AC0))[i] = ((u16 *)(VRAM + 0x7B40))[i]; - ((u16 *)(VRAM + 0x7B00))[i] = 1; - ((u16 *)(VRAM + 0x7B40))[i] = 1; - } - } - gMain.state = 1; - } - break; - case 1: - SetUpWindowConfig(&gWindowConfig_81E7064); - InitMenuWindow(&gWindowConfig_81E7064); - LoadCompressedObjectPic(&gUnknown_083A05CC[0]); - LoadSpritePalettes(gUnknown_083A05DC); - sub_809308C(taskId); - for (i = 0; i < 16; i++) - gTasks[taskId].data[i] = 0; - sub_8092EB0(taskId); - sub_8092AB0(0); - sub_8092B68(taskId); - gMain.state++; - break; - case 2: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - gMain.state++; - break; - case 3: - REG_BG3CNT = 0x0F03; - REG_DISPCNT = 0x1C40; - gMain.state++; - break; - case 4: - if (!gPaletteFade.active) - { - gTasks[taskId].func = sub_809204C; - gMain.state = 0; - } - break; - } -} - -static void sub_809204C(u8 taskId) -{ - sub_8092AB0(gTasks[taskId].data[0]); - sub_8092B68(taskId); - gTasks[taskId].func = sub_809207C; -} - -static void sub_809207C(u8 taskId) -{ - if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_PC_OFF); - gTasks[taskId].func = sub_80927B8; - return; - } - if (gMain.newKeys & A_BUTTON) - { - switch (gTasks[taskId].data[0]) - { - case 0: - PlaySE(SE_PIN); - gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_809217C; - break; - case 1: - PlaySE(SE_PIN); - gTasks[taskId].data[1] = 4; - gTasks[taskId].func = sub_809217C; - break; - case 2: - PlaySE(SE_PC_OFF); - gTasks[taskId].func = sub_80927B8; - break; - } - return; - } - if ((gMain.newKeys & DPAD_LEFT) && gTasks[taskId].data[0] > 0) - { - PlaySE(SE_Z_PAGE); - gTasks[taskId].data[0]--; - sub_8092AB0(gTasks[taskId].data[0]); - } - if ((gMain.newKeys & DPAD_RIGHT) && gTasks[taskId].data[0] < 2) - { - PlaySE(SE_Z_PAGE); - gTasks[taskId].data[0]++; - sub_8092AB0(gTasks[taskId].data[0]); - } -} - -static void sub_809217C(u8 taskId) -{ - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); - sub_8092B68(taskId); - gTasks[taskId].func = sub_80921B0; -} - -static void sub_80921B0(u8 taskId) -{ - const u8 (*r6)[4]; - - if (gTasks[taskId].data[0] != 0) - { - if (!IsNationalPokedexEnabled()) - r6 = gUnknown_083B58A4; - else - r6 = gUnknown_083B586C; - } - else - { - if (!IsNationalPokedexEnabled()) - r6 = gUnknown_083B5888; - else - r6 = gUnknown_083B5850; - } - - if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_BOWA); - sub_8092EB0(taskId); - gTasks[taskId].func = sub_809204C; - return; - } - if (gMain.newKeys & A_BUTTON) - { - if (gTasks[taskId].data[1] == 6) - { - if (gTasks[taskId].data[0] != 0) - { - gUnknown_0202FFBA = 0x40; - gPokedexView->unk62A = 0x40; - gUnknown_0202FFB8 = 0; - gPokedexView->unk610 = 0; - gSaveBlock2.pokedex.unknown1 = sub_8092E10(taskId, 5); - if (!IsNationalPokedexEnabled()) - gSaveBlock2.pokedex.unknown1 = 0; - gPokedexView->unk614 = gSaveBlock2.pokedex.unknown1; - gSaveBlock2.pokedex.order = sub_8092E10(taskId, 4); - gPokedexView->unk618 = gSaveBlock2.pokedex.order; - PlaySE(SE_PC_OFF); - gTasks[taskId].func = sub_80927B8; - } - else - { - sub_8091E20(gDexText_Searching); - gTasks[taskId].func = sub_80923FC; - PlaySE(SE_Z_SEARCH); - } - } - else - { - PlaySE(SE_PIN); - gTasks[taskId].func = sub_80925CC; - } - return; - } - - if ((gMain.newKeys & DPAD_LEFT) && r6[gTasks[taskId].data[1]][0] != 0xFF) - { - PlaySE(SE_SELECT); - gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][0]; - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); - } - if ((gMain.newKeys & DPAD_RIGHT) && r6[gTasks[taskId].data[1]][1] != 0xFF) - { - PlaySE(SE_SELECT); - gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][1]; - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); - } - if ((gMain.newKeys & DPAD_UP) && r6[gTasks[taskId].data[1]][2] != 0xFF) - { - PlaySE(SE_SELECT); - gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][2]; - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); - } - if ((gMain.newKeys & DPAD_DOWN) && r6[gTasks[taskId].data[1]][3] != 0xFF) - { - PlaySE(SE_SELECT); - gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][3]; - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); - } -} - -static void sub_80923FC(u8 taskId) -{ - u8 r10 = sub_8092E10(taskId, 5); - u8 r9 = sub_8092E10(taskId, 4); - u8 r8 = sub_8092E10(taskId, 0); - u8 r6 = sub_8092E10(taskId, 1); - u8 r4 = sub_8092E10(taskId, 2); - u8 r0 = sub_8092E10(taskId, 3); - - sub_8091AF8(r10, r9, r8, r6, r4, r0); - gTasks[taskId].func = sub_80924A4; -} - -static void sub_80924A4(u8 taskId) -{ - if (!IsSEPlaying()) - { - if (gPokedexView->pokemonListCount != 0) - { - PlaySE(SE_SEIKAI); - sub_8091E20(gDexText_SearchComplete); - } - else - { - PlaySE(SE_HAZURE); - sub_8091E20(gDexText_NoMatching); - } - gTasks[taskId].func = sub_8092508; - } -} - -static void sub_8092508(u8 taskId) -{ - if (gMain.newKeys & A_BUTTON) - { - if (gPokedexView->pokemonListCount != 0) - { - gPokedexView->unk64F = 1; - gPokedexView->dexMode = sub_8092E10(taskId, 5); - gPokedexView->dexOrder = sub_8092E10(taskId, 4); - gTasks[taskId].func = sub_80927B8; - PlaySE(SE_PC_OFF); - } - else - { - gTasks[taskId].func = sub_809217C; - PlaySE(SE_BOWA); - } - } -} - -static void sub_80925B4(u16 a, int unused) -{ - sub_814AD7C(0x90, (a * 2 + 1) * 8); -} - -static void sub_80925CC(u8 taskId) -{ - u8 r0; - u16 *p1; - u16 *p2; - - sub_8092C8C(0); - r0 = gTasks[taskId].data[1]; - p1 = &gTasks[taskId].data[gUnknown_083B5A7C[r0].unk4]; - p2 = &gTasks[taskId].data[gUnknown_083B5A7C[r0].unk5]; - gTasks[taskId].data[14] = *p1; - gTasks[taskId].data[15] = *p2; - sub_8092D78(taskId); - CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 11); - sub_80925B4(*p1, 1); - gTasks[taskId].func = sub_8092644; -} - -static void sub_8092644(u8 taskId) -{ - u8 r1; - const struct UnknownStruct2 *r8; - u16 *p1; - u16 *p2; - u16 r2; - bool8 r3; - - r1 = gTasks[taskId].data[1]; - r8 = gUnknown_083B5A7C[r1].unk0; - p1 = &gTasks[taskId].data[gUnknown_083B5A7C[r1].unk4]; - p2 = &gTasks[taskId].data[gUnknown_083B5A7C[r1].unk5]; - r2 = gUnknown_083B5A7C[r1].unk6 - 1; - if (gMain.newKeys & A_BUTTON) - { - sub_814ADC8(); - PlaySE(SE_PIN); - MenuZeroFillWindowRect(18, 1, 28, 12); - sub_8092C8C(1); - gTasks[taskId].func = sub_809217C; - return; - } - if (gMain.newKeys & B_BUTTON) - { - sub_814ADC8(); - PlaySE(SE_BOWA); - MenuZeroFillWindowRect(18, 1, 28, 12); - sub_8092C8C(1); - *p1 = gTasks[taskId].data[14]; - *p2 = gTasks[taskId].data[15]; - gTasks[taskId].func = sub_809217C; - return; - } - r3 = FALSE; - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - if (*p1 != 0) - { - sub_80925B4(*p1, 0); - (*p1)--; - sub_80925B4(*p1, 1); - r3 = TRUE; - } - else if (*p2 != 0) - { - (*p2)--; - sub_8092D78(taskId); - sub_80925B4(*p1, 1); - r3 = TRUE; - } - if (r3) - { - PlaySE(SE_SELECT); - sub_8091E20(r8[*p1 + *p2].text1); - } - return; - } - if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if (*p1 < 5 && *p1 < r2) - { - sub_80925B4(*p1, 0); - (*p1)++; - sub_80925B4(*p1, 1); - r3 = TRUE; - } - else if (r2 > 5 && *p2 < r2 - 5) - { - (*p2)++; - sub_8092D78(taskId); - sub_80925B4(5, 1); - r3 = TRUE; - } - if (r3) - { - PlaySE(SE_SELECT); - sub_8091E20(r8[*p1 + *p2].text1); - } - return; - } -} - -static void sub_80927B8(u8 taskId) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = sub_80927F0; -} - -static void sub_80927F0(u8 taskId) -{ - if (!gPaletteFade.active) - DestroyTask(taskId); -} - -#ifdef NONMATCHING -void sub_8092810(u8 a, u8 b, u8 c, u8 d) -{ - u16 i; - - for (i = 0; i < d; i++) - { - ((u16 *)VRAM)[15 * 0x400 + c * 32 + i + b] &= 0xFFF; - ((u16 *)VRAM)[15 * 0x400 + c * 32 + i + b] |= a << 12; - - ((u16 *)VRAM)[15 * 0x400 + (c + 1) * 32 + i + b] &= 0xFFF; - ((u16 *)VRAM)[15 * 0x400 + (c + 1) * 32 + i + b] |= a << 12; - } -} -#else -__attribute__((naked)) -void sub_8092810(u8 a, u8 b, u8 c, u8 d) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r12, r1\n\ - lsls r2, 24\n\ - lsrs r1, r2, 24\n\ - lsls r3, 24\n\ - lsrs r5, r3, 8\n\ - movs r3, 0\n\ - cmp r5, 0\n\ - beq _0809285A\n\ - lsls r7, r1, 6\n\ - ldr r6, _08092860 @ =0x00000fff\n\ - lsls r4, r0, 12\n\ -_08092830:\n\ - mov r0, r12\n\ - adds r1, r0, r3\n\ - lsls r1, 1\n\ - adds r1, r7, r1\n\ - ldr r0, _08092864 @ =0x06007800\n\ - adds r2, r1, r0\n\ - ldrh r0, [r2]\n\ - ands r0, r6\n\ - orrs r0, r4\n\ - strh r0, [r2]\n\ - ldr r0, _08092868 @ =0x06007840\n\ - adds r1, r0\n\ - ldrh r0, [r1]\n\ - ands r0, r6\n\ - orrs r0, r4\n\ - strh r0, [r1]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - cmp r0, r5\n\ - bcc _08092830\n\ -_0809285A:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08092860: .4byte 0x00000fff\n\ -_08092864: .4byte 0x06007800\n\ -_08092868: .4byte 0x06007840\n\ - .syntax divided\n"); -} -#endif - -static void sub_809286C(u8 a, u8 b, u8 c) -{ - u8 r5 = (b & 1) | ((c & 1) << 1); - - switch (a) - { - case 0: - case 1: - case 2: - sub_8092810(r5, gUnknown_083B57E4[a].unk4, gUnknown_083B57E4[a].unk5, gUnknown_083B57E4[a].unk6); - break; - case 3: - case 4: - case 7: - case 8: - sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5, gUnknown_083B57FC[a - 3].unk6); - // fall through - case 5: - case 6: - sub_8092810(r5, gUnknown_083B57FC[a - 3].unk7, gUnknown_083B57FC[a - 3].unk8, gUnknown_083B57FC[a - 3].unk9); - break; - case 10: - sub_8092810(r5, gUnknown_083B57FC[2].unk4, gUnknown_083B57FC[2].unk5, gUnknown_083B57FC[2].unk6); - break; - case 9: - if (!IsNationalPokedexEnabled()) - sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5 - 2, gUnknown_083B57FC[a - 3].unk6); - else - sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5, gUnknown_083B57FC[a - 3].unk6); - break; - } -} - -static void sub_8092964(u8 a) -{ - switch (a) - { - case 0: - sub_809286C(0, 0, 0); - sub_809286C(1, 1, 0); - sub_809286C(2, 1, 0); - sub_809286C(3, 1, 0); - sub_809286C(4, 1, 0); - sub_809286C(10, 1, 0); - sub_809286C(5, 1, 0); - sub_809286C(6, 1, 0); - sub_809286C(7, 1, 0); - sub_809286C(8, 1, 0); - sub_809286C(9, 1, 0); - break; - case 1: - sub_809286C(0, 1, 0); - sub_809286C(1, 0, 0); - sub_809286C(2, 1, 0); - sub_809286C(3, 1, 1); - sub_809286C(4, 1, 1); - sub_809286C(10, 1, 1); - sub_809286C(5, 1, 1); - sub_809286C(6, 1, 1); - sub_809286C(7, 1, 0); - sub_809286C(8, 1, 0); - sub_809286C(9, 1, 0); - break; - case 2: - sub_809286C(0, 1, 0); - sub_809286C(1, 1, 0); - sub_809286C(2, 0, 0); - sub_809286C(3, 1, 1); - sub_809286C(4, 1, 1); - sub_809286C(10, 1, 1); - sub_809286C(5, 1, 1); - sub_809286C(6, 1, 1); - sub_809286C(7, 1, 1); - sub_809286C(8, 1, 1); - sub_809286C(9, 1, 1); - break; - } -} - -static void sub_8092AB0(u8 a) -{ - sub_8092964(a); - sub_8091E20(gUnknown_083B57E4[a].text); -} - -static void sub_8092AD4(u8 a, u8 b) -{ - sub_8092964(a); - switch (b) - { - case 0: - sub_809286C(3, 0, 0); - break; - case 1: - sub_809286C(4, 0, 0); - break; - case 2: - sub_809286C(10, 0, 0); - sub_809286C(5, 0, 0); - break; - case 3: - sub_809286C(10, 0, 0); - sub_809286C(6, 0, 0); - break; - case 4: - sub_809286C(7, 0, 0); - break; - case 5: - sub_809286C(8, 0, 0); - break; - case 6: - sub_809286C(9, 0, 0); - break; - } - sub_8091E20(gUnknown_083B57FC[b].text); -} - -static void sub_8092B68(u8 taskId) -{ - u16 var; - - var = gTasks[taskId].data[6] + gTasks[taskId].data[7]; - StringCopy(gStringVar1, gUnknown_083B5910[var].text2); - MenuPrint_PixelCoords(gUnknown_083B5AB2, 45, 16, 1); - - var = gTasks[taskId].data[8] + gTasks[taskId].data[9]; - StringCopy(gStringVar1, gUnknown_083B5968[var].text2); - MenuPrint_PixelCoords(gUnknown_083B5AB2, 45, 32, 1); - - var = gTasks[taskId].data[10] + gTasks[taskId].data[11]; - StringCopy(gStringVar1, gUnknown_083B59C8[var].text2); - MenuPrint_PixelCoords(gUnknown_083B5AAC, 45, 48, 1); - - var = gTasks[taskId].data[12] + gTasks[taskId].data[13]; - StringCopy(gStringVar1, gUnknown_083B59C8[var].text2); - MenuPrint_PixelCoords(gUnknown_083B5AAC, 93, 48, 1); - - var = gTasks[taskId].data[4] + gTasks[taskId].data[5]; - StringCopy(gStringVar1, gUnknown_083B58D8[var].text2); - MenuPrint_PixelCoords(gUnknown_083B5AB2, 45, 64, 1); - - if (IsNationalPokedexEnabled()) - { - var = gTasks[taskId].data[2] + gTasks[taskId].data[3]; - StringCopy(gStringVar1, gUnknown_083B58C0[var].text2); - MenuPrint_PixelCoords(gUnknown_083B5AB2, 45, 80, 1); - } -} - -static void sub_8092C8C(u8 a) -{ - u16 i; - u16 j; - - if (a == 0) - { - *((u16 *)(VRAM + 0x7800 + 0x22)) = 0xC0B; - for (i = 0x12; i < 0x1D; i++) - *((u16 *)(VRAM + 0x7800 + i * 2)) = 0x80D; - *((u16 *)(VRAM + 0x7800 + 0x3A)) = 0x80B; - for (j = 1; j < 13; j++) - { - *((u16 *)(VRAM + 0x7800 + 0x22 + j * 64)) = 0x40A; - for (i = 0x12; i < 0x1D; i++) - *((u16 *)(VRAM + 0x7800 + j * 64 + i * 2)) = 2; - *((u16 *)(VRAM + 0x7800 + 0x3A + j * 64)) = 0xA; - } - *((u16 *)(VRAM + 0x7800 + 0x362)) = 0x40B; - for (i = 0x12; i < 0x1D; i++) - *((u16 *)(VRAM + 0x7800 + 0x340 + i * 2)) = 0xD; - *((u16 *)(VRAM + 0x7800 + 0x37A)) = 0xB; - } - else - { - for (j = 0; j < 14; j++) - { - for (i = 0x11; i < 0x1E; i++) - { - *((u16 *)(VRAM + 0x7800 + j * 64 + i * 2)) = 0x4F; - } - } - } -} - -static void sub_8092D78(u8 taskId) -{ - const struct UnknownStruct2 *r6 = gUnknown_083B5A7C[gTasks[taskId].data[1]].unk0; - const u16 *r8 = &gTasks[taskId].data[gUnknown_083B5A7C[gTasks[taskId].data[1]].unk4]; - const u16 *r7 = &gTasks[taskId].data[gUnknown_083B5A7C[gTasks[taskId].data[1]].unk5]; - u16 i; - u16 j; - - MenuZeroFillWindowRect(18, 1, 28, 12); - for (i = 0, j = *r7; i < 6 && r6[j].text2 != NULL; i++, j++) - { -#ifndef NONMATCHING - j += 0; // Useless statement needed to match -#endif - MenuPrint(r6[j].text2, 18, i * 2 + 1); - } - sub_8091E20(r6[*r8 + *r7].text1); -} - -static u8 sub_8092E10(u8 taskId, u8 b) -{ - const u16 *ptr1 = &gTasks[taskId].data[gUnknown_083B5A7C[b].unk4]; - const u16 *ptr2 = &gTasks[taskId].data[gUnknown_083B5A7C[b].unk5]; - u16 r2 = *ptr1 + *ptr2; - - switch (b) - { - default: - return 0; - case 5: - return gUnknown_083B5A60[r2]; - case 4: - return gUnknown_083B5A62[r2]; - case 0: - if (r2 == 0) - return 0xFF; - else - return r2; - case 1: - if (r2 == 0) - return 0xFF; - else - return r2 - 1; - case 2: - case 3: - return gUnknown_083B5A68[r2]; - } -} - -static void sub_8092EB0(u8 taskId) -{ - u16 r3; - - switch (gPokedexView->unk614) - { - default: - case 0: - r3 = 0; - break; - case 1: - r3 = 1; - break; - } - gTasks[taskId].data[2] = r3; - - switch (gPokedexView->unk618) - { - default: - case 0: - r3 = 0; - break; - case 1: - r3 = 1; - break; - case 2: - r3 = 2; - break; - case 3: - r3 = 3; - break; - case 4: - r3 = 4; - break; - case 5: - r3 = 5; - break; - } - gTasks[taskId].data[4] = r3; -} - -static bool8 sub_8092F44(u8 taskId) -{ - u8 val1 = gTasks[taskId].data[1]; - const u16 *ptr = &gTasks[taskId].data[gUnknown_083B5A7C[val1].unk5]; - u16 val2 = gUnknown_083B5A7C[val1].unk6 - 1; - - if (val2 > 5 && *ptr != 0) - return FALSE; - else - return TRUE; -} - -static bool8 sub_8092F8C(u8 taskId) -{ - u8 val1 = gTasks[taskId].data[1]; - const u16 *ptr = &gTasks[taskId].data[gUnknown_083B5A7C[val1].unk5]; - u16 val2 = gUnknown_083B5A7C[val1].unk6 - 1; - - if (val2 > 5 && *ptr < val2 - 5) - return FALSE; - else - return TRUE; -} - -static void sub_8092FD8(struct Sprite *sprite) -{ - if (gTasks[sprite->data0].func == sub_8092644) - { - u8 val; - - if (sprite->data1 != 0) - { - if (sub_8092F8C(sprite->data0)) - sprite->invisible = TRUE; - else - sprite->invisible = FALSE; - } - else - { - if (sub_8092F44(sprite->data0)) - sprite->invisible = TRUE; - else - sprite->invisible = FALSE; - } - val = sprite->data2 + sprite->data1 * 128; - sprite->pos2.y = gSineTable[val] / 128; - sprite->data2 += 8; - } - else - { - sprite->invisible = TRUE; - } -} - -static void sub_809308C(u8 taskId) -{ - u8 spriteId; - - spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 0; - gSprites[spriteId].callback = sub_8092FD8; - - spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 108, 0); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 1; - gSprites[spriteId].vFlip = TRUE; - gSprites[spriteId].callback = sub_8092FD8; -} diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c deleted file mode 100644 index 92fd832fc..000000000 --- a/src/pokedex_cry_screen.c +++ /dev/null @@ -1,85 +0,0 @@ -#include "global.h" -#include "pokedex_cry_screen.h" -#include "palette.h" -#include "sprite.h" - -struct Unk201C800 { - u8 unk_0; - u8 unk_1; - u8 unk_2; - u8 filler_3; - u16 unk_4; -}; - -#define EWRAM_1C800 (*(struct Unk201C800 *)(unk_201C000 + 0x800)) - -extern u8 unk_201C000[]; - -extern u8 gUnknown_03005E98; - -// data/pokedex_cry_screen.o -extern const u16 gUnknown_083FAE7C[]; -extern const u16 gUnknown_083FAF1C[]; -extern const u8 gUnknown_083FAF3C[]; -extern struct SpriteTemplate gSpriteTemplate_83FB774; -extern const struct SpriteSheet gCryMeterNeedleSpriteSheets[]; -extern const struct SpritePalette gCryMeterNeedleSpritePalettes[]; - -#if ENGLISH -#define CRY_METER_MAP_WIDTH 10 -#elif GERMAN -#define CRY_METER_MAP_WIDTH 32 -#endif - -u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { - int returnVal = FALSE; - - switch (gUnknown_03005E98) - { - case 0: - LZ77UnCompVram(gUnknown_083FAF3C, (void *) (VRAM + cry->unk0)); - LoadPalette(&gUnknown_083FAF1C, cry->paletteNo * 16, 0x20); - gUnknown_03005E98 += 1; - break; - - case 1: - { - void *vram; - u8 row, col; - u32 r12; - int x, y; - - vram = (void *) BG_SCREEN_ADDR(cry->unk2); - - r12 = (u32) (cry->unk0 << 18) >> 23; - - for (row = 0; row < 8; row++) - { - for (col = 0; col < 10; col++) - { - y = row + cry->yPos; - x = col + cry->xPos; - *(u16 *) (vram + (y * 64 + x * 2)) = (gUnknown_083FAE7C[row * CRY_METER_MAP_WIDTH + col] | (cry->paletteNo << 12)) + r12; - } - } - - gUnknown_03005E98 += 1; - break; - } - - case 2: - { - LoadSpriteSheets(gCryMeterNeedleSpriteSheets); - LoadSpritePalettes(gCryMeterNeedleSpritePalettes); - EWRAM_1C800.unk_4 = CreateSprite(&gSpriteTemplate_83FB774, 40 + cry->xPos * 8, 56 + cry->yPos * 8, 1); - EWRAM_1C800.unk_0 = 0x20; - EWRAM_1C800.unk_1 = 0x20; - EWRAM_1C800.unk_2 = 0; - - returnVal = TRUE; - break; - } - } - - return returnVal; -} diff --git a/src/pokemon/mail.c b/src/pokemon/mail.c new file mode 100644 index 000000000..658d37976 --- /dev/null +++ b/src/pokemon/mail.c @@ -0,0 +1,437 @@ +#include "global.h" +#include "mail.h" +#include "easy_chat.h" +#include "items.h" +#include "mail_data.h" +#include "menu.h" +#include "menu_helpers.h" +#include "name_string_util.h" +#include "palette.h" +#include "pokemon_icon.h" +#include "rom4.h" +#include "sprite.h" +#include "string_util.h" +#include "strings2.h" +#include "task.h" +#include "text.h" +#include "unknown_task.h" + +struct UnkMailStruct +{ + u8 unk_0_0:2; + u8 unk_0_2:2; + u8 unk_0_4:4; +}; + +struct MailLayout +{ + u8 var0; + u8 var1; + u8 var2; + u8 var3_0:4; + u8 var3_4:4; + struct UnkMailStruct *var4; +}; + +struct Unk2000000 +{ + /* 0x00*/ u8 words[8][27]; + /* 0xD8*/ u8 varD8[20]; + /* 0xEC*/ MainCallback varEC; + /* 0xF0*/ MainCallback varF0; + /* 0xF4*/ struct MailStruct *varF4; + /* 0xF8*/ u8 varF8; + /* 0xF9*/ u8 varF9; + /* 0xFA*/ u8 varFA; + /* 0xFB*/ u8 varFB; + /* 0xFC*/ u8 varFC; + u8 padFD[1]; + /* 0xFE*/ u8 varFE; + /* 0xFF*/ u8 varFF; + /*0x100*/ u8 var100; + u8 pad101[3]; + /*0x104*/ MainCallback var104; + /*0x108*/ MainCallback var108; + /*0x10C*/ struct MailLayout *var10C; +}; + +struct MailGraphics +{ + u16 (*palette)[]; + u8 (*tiles)[]; + u8 (*tileMap)[]; + u16 var0C; + u16 var0E; + u16 color10; + u16 color12; +}; + +extern u8 ewram[]; +#define ewram0 (*(struct Unk2000000 *)(ewram)) + +extern struct MailGraphics gMailGraphicsTable[]; +extern u16 gUnknown_083E562C[][2]; + +extern struct MailLayout gUnknown_083E5730[]; +extern struct MailLayout gUnknown_083E57A4[]; + +static u8 sub_80F8A28(void); +static void sub_80F8D50(void); +static void sub_80F8DA0(void); +static void sub_80F8E80(void); +static void sub_80F8F18(void); +static void sub_80F8F2C(void); +static void sub_80F8F58(void); +static void sub_80F8F78(void); +static void sub_80F8FB4(void); + +void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) +{ + u16 mailDesign; + u16 buffer[2]; + + ewram0.varFF = GAME_LANGUAGE; + ewram0.var100 = 1; + ewram0.var104 = (MainCallback)sub_80EB3FC; + ewram0.var108 = (MainCallback)ConvertEasyChatWordsToString; + + mailDesign = arg0->itemId - ITEM_ORANGE_MAIL; + + if (mailDesign <= 11) + { + ewram0.varFA = arg0->itemId - ITEM_ORANGE_MAIL; + } + else + { + ewram0.varFA = 0; + arg2 = FALSE; + } + + switch (ewram0.var100) + { + case 0: + default: + ewram0.var10C = &gUnknown_083E5730[ewram0.varFA]; + break; + + case 1: + ewram0.var10C = &gUnknown_083E57A4[ewram0.varFA]; + break; + } + + if (((MailSpeciesToSpecies(arg0->species, buffer) << 16) + 0xFFFF0000) <= (410 << 16)) + { + switch (ewram0.varFA) + { + case 6: + ewram0.varFB = 1; + break; + + case 9: + ewram0.varFB = 2; + break; + + default: + ewram0.varFB = 0; + break; + } + } + else + { + ewram0.varFB = 0; + } + + + ewram0.varF4 = arg0; + ewram0.varEC = arg1; + ewram0.varF8 = arg2; + + SetMainCallback2(sub_80F8D50); +} + +#define RETURN_UP_STATE break +#define RETURN_SKIP_STATE return FALSE + +static u8 sub_80F8A28(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + remove_some_task(); + REG_DISPCNT = 0; + RETURN_UP_STATE; + + case 1: CpuFill16(0, (void *)OAM, OAM_SIZE); + RETURN_UP_STATE; + + case 2: + ResetPaletteFade(); + RETURN_UP_STATE; + + case 3: + ResetTasks(); + RETURN_UP_STATE; + + case 4: + ResetSpriteData(); + RETURN_UP_STATE; + + case 5: + FreeAllSpritePalettes(); + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2VOFS = 0; + REG_BG2HOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + RETURN_UP_STATE; + + case 6: + SetUpWindowConfig(&gWindowConfig_81E6DFC); + RETURN_UP_STATE; + + case 7: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6DFC); + RETURN_UP_STATE; + + case 8: + if (MultistepInitMenuWindowContinue() == 0) + { + return FALSE; + } + RETURN_UP_STATE; + + case 9: + MenuZeroFillScreen(); + RETURN_UP_STATE; + + case 10: CpuFill16(1, (void *)(VRAM + 0x4800), 0x800); + RETURN_UP_STATE; + + case 11: + LoadPalette(gMailGraphicsTable[ewram0.varFA].palette, 0, 16 * 2); + RETURN_UP_STATE; + + case 12: + LZ77UnCompVram(gMailGraphicsTable[ewram0.varFA].tileMap, (void *)(VRAM + 0x4000)); + RETURN_UP_STATE; + + case 13: + LZ77UnCompVram(gMailGraphicsTable[ewram0.varFA].tiles, (void *)(VRAM)); + + gPlttBufferUnfaded[241] = gMailGraphicsTable[ewram0.varFA].color10; + gPlttBufferUnfaded[248] = gMailGraphicsTable[ewram0.varFA].color12; + gPlttBufferUnfaded[10] = gUnknown_083E562C[gSaveBlock2.playerGender][0]; + gPlttBufferUnfaded[11] = gUnknown_083E562C[gSaveBlock2.playerGender][1]; + RETURN_UP_STATE; + + case 14: + if (ewram0.varF8 != 0) + { + sub_80F8DA0(); + } + RETURN_UP_STATE; + + case 15: + if (ewram0.varF8 != 0) + { + sub_80F8E80(); + } + + SetVBlankCallback(sub_80F8F18); + gPaletteFade.bufferTransferDisabled = 1; + RETURN_UP_STATE; + + case 16: + { + u16 local1; + + local1 = sub_809D4A8(ewram0.varF4->species); + + switch (ewram0.varFB) + { + case 1: + sub_809D580(local1); + ewram0.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 96, 128, 0); + break; + + case 2: + sub_809D580(local1); + ewram0.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 40, 128, 0); + break; + } + RETURN_UP_STATE; + } + + case 17: + if (sub_8055870() != TRUE) + { + RETURN_UP_STATE; + } + RETURN_SKIP_STATE; + + case 18: + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x512; + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(8) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(9) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BLDCNT = 0; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + gPaletteFade.bufferTransferDisabled = 0; + ewram0.varF0 = sub_80F8F58; + return TRUE; + + default: + return FALSE; + } + + gMain.state += 1; + return FALSE; +} + +static void sub_80F8D50(void) +{ + do + { + if (sub_80F8A28() == 1) + { + SetMainCallback2(sub_80F8F2C); + return; + } + } while (sub_80F9344() != 1); +} + +static u8 *sub_80F8D7C(u8 *dest, u8 *src) +{ + u16 length; + + StringCopy(dest, src); + SanitizeNameString(dest); + + length = StringLength(dest); + + return dest + length; +} + +static void sub_80F8DA0(void) +{ + u16 i; + u8 r6; + u8 *ptr; + + r6 = 0; + for (i = 0; i < ewram0.var10C->var0; i++) + { + ConvertEasyChatWordsToString(ewram0.words[i], &ewram0.varF4->words[r6], ewram0.var10C->var4[i].unk_0_2, 1); + r6 += ewram0.var10C->var4[i].unk_0_2; + } + ptr = ewram0.varD8; + if (ewram0.var100 == 0) + { + ptr = sub_80F8D7C(ptr, ewram0.varF4->playerName); + StringCopy(ptr, gOtherText_From); + ewram0.varF9 = ewram0.var10C->var2 - StringLength(ewram0.varD8); + + } + else + { + ptr = StringCopy(ptr, gOtherText_From); + sub_80F8D7C(ptr, ewram0.varF4->playerName); + ewram0.varF9 = ewram0.var10C->var2; + } +} + +static void sub_80F8E80(void) +{ + u16 pos; + u8 x; + u8 y = 0; + + for (pos = 0; pos < ewram0.var10C->var0; pos++) + { + if (ewram0.words[pos][0] == 0xFF) + { + continue; + } + + if (ewram0.words[pos][0] == 0x00) + { + continue; + } + + x = ewram0.var10C->var4[pos].unk_0_4; + y += ewram0.var10C->var4[pos].unk_0_0; + MenuPrint(ewram0.words[pos], ewram0.var10C->var3_4 + x, ewram0.var10C->var3_0 + y); + y += 2; + } + + MenuPrint(ewram0.varD8, ewram0.varF9, ewram0.var10C->var1); +} + +static void sub_80F8F18(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void sub_80F8F2C(void) +{ + if (ewram0.varFB != 0) + { + AnimateSprites(); + BuildOamBuffer(); + } + + ewram0.varF0(); +} + +static void sub_80F8F58(void) +{ + u8 local0; + + local0 = UpdatePaletteFade(); + if (local0 == 0) + { + ewram0.varF0 = sub_80F8F78; + } +} + +static void sub_80F8F78(void) +{ + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + ewram0.varF0 = sub_80F8FB4; + } +} + +static void sub_80F8FB4(void) +{ + u16 local1; + + if (UpdatePaletteFade()) + { + return; + } + + SetMainCallback2(ewram0.varEC); + switch (ewram0.varFB) + { + case 2: + case 1: + local1 = sub_809D4A8(ewram0.varF4->species); + sub_809D608(local1); + + sub_809D510(&gSprites[ewram0.varFC]); + break; + } + + memset(&ewram0, 0, 0x110); + ResetPaletteFade(); +} diff --git a/src/pokemon/mail_data.c b/src/pokemon/mail_data.c new file mode 100644 index 000000000..ae3f4b3e8 --- /dev/null +++ b/src/pokemon/mail_data.c @@ -0,0 +1,208 @@ +#include "global.h" +#include "mail_data.h" +#include "items.h" +#include "name_string_util.h" +#include "pokemon.h" +#include "pokemon_icon.h" +#include "species.h" +#include "text.h" + +void ClearMailData(void) +{ + u8 i; + + for (i = 0; i < 16; i++) + ClearMailStruct(&gSaveBlock1.mail[i]); +} + +void ClearMailStruct(struct MailStruct *mail) +{ + int i; + + for (i = 0; i < 9; i++) + mail->words[i] = -1; + + for (i = 0; i < 8; i++) + mail->playerName[i] = -1; + + for (i = 0; i < 4; i++) + mail->trainerId[i] = 0; + + mail->species = 1; + mail->itemId = 0; +} + +bool8 MonHasMail(struct Pokemon *mon) +{ + u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM); + if (ItemIsMail(heldItem) && GetMonData(mon, MON_DATA_MAIL) != 0xFF) + return TRUE; + else + return FALSE; +} + +u8 GiveMailToMon(struct Pokemon *mon, u16 itemId) +{ + u16 _itemId; + u8 heldItem[2]; + u8 id; + u8 i; + u16 species; + u32 personality; + + _itemId = itemId; + heldItem[0] = _itemId; + heldItem[1] = _itemId >> 8; + id = 0; + + while (id < 6) + { + if (gSaveBlock1.mail[id].itemId == 0) + { + for (i = 0; i < 9; i++) + gSaveBlock1.mail[id].words[i] = -1; + + for (i = 0; i < 7; i++) + gSaveBlock1.mail[id].playerName[i] = gSaveBlock2.playerName[i]; + gSaveBlock1.mail[id].playerName[i] = EOS; + PadNameString(gSaveBlock1.mail[id].playerName, 0); + + for (i = 0; i < 4; i++) + gSaveBlock1.mail[id].trainerId[i] = gSaveBlock2.playerTrainerId[i]; + + species = GetBoxMonData(&mon->box, MON_DATA_SPECIES); + personality = GetBoxMonData(&mon->box, MON_DATA_PERSONALITY); + gSaveBlock1.mail[id].species = SpeciesToMailSpecies(species, personality); + gSaveBlock1.mail[id].itemId = _itemId; + SetMonData(mon, MON_DATA_MAIL, &id); + SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); + return id; + } + id++; + } + + return -1; +} + +u16 SpeciesToMailSpecies(u16 species, u32 personality) +{ + if (species == SPECIES_UNOWN) + { + int mailSpecies = GetUnownLetterByPersonality(personality) + 30000; + return mailSpecies; + } + + return species; +} + +u16 MailSpeciesToSpecies(u16 a1, u16 *a2) +{ + u16 result; + + if (a1 >= 30000 && a1 < (30000 + UNOWN_FORM_COUNT)) + { + result = SPECIES_UNOWN; + *a2 = a1 - 30000; + } + else + { + result = a1; + } + + return result; +} + +u8 GiveMailToMon2(struct Pokemon *mon, struct MailStruct *mail) +{ + u8 heldItem[2]; + u16 itemId = mail->itemId; + u8 mailId = GiveMailToMon(mon, itemId); + + if (mailId == 0xFF) + return 0xFF; + + gSaveBlock1.mail[mailId] = *mail; + + SetMonData(mon, MON_DATA_MAIL, &mailId); + + heldItem[0] = itemId; + heldItem[1] = itemId >> 8; + + SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); + + return mailId; +} + +int unref_sub_80A2DF4(void) +{ + return 0; +} + +void TakeMailFromMon(struct Pokemon *mon) +{ + u8 heldItem[2]; + u8 mailId; + + if (MonHasMail(mon)) + { + mailId = GetMonData(mon, MON_DATA_MAIL); + gSaveBlock1.mail[mailId].itemId = 0; + mailId = 0xFF; + heldItem[0] = 0; + heldItem[1] = 0; + SetMonData(mon, MON_DATA_MAIL, &mailId); + SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); + } +} + +void DeleteMail(u8 mailId) +{ + gSaveBlock1.mail[mailId].itemId = 0; +} + +u8 TakeMailFromMon2(struct Pokemon *mon) +{ + u8 i; + u8 newHeldItem[2]; + u8 newMailId; + + newHeldItem[0] = 0; + newHeldItem[1] = 0; + newMailId = 0xFF; + + for (i = 6; i < 16; i++) + { + if (gSaveBlock1.mail[i].itemId == 0) + { + memcpy(&gSaveBlock1.mail[i], &gSaveBlock1.mail[GetMonData(mon, MON_DATA_MAIL)], sizeof(struct MailStruct)); + gSaveBlock1.mail[GetMonData(mon, MON_DATA_MAIL)].itemId = 0; + SetMonData(mon, MON_DATA_MAIL, &newMailId); + SetMonData(mon, MON_DATA_HELD_ITEM, newHeldItem); + return i; + } + } + + return 0xFF; +} + +bool8 ItemIsMail(u16 itemId) +{ + switch (itemId) + { + case ITEM_ORANGE_MAIL: + case ITEM_HARBOR_MAIL: + case ITEM_GLITTER_MAIL: + case ITEM_MECH_MAIL: + case ITEM_WOOD_MAIL: + case ITEM_WAVE_MAIL: + case ITEM_BEAD_MAIL: + case ITEM_SHADOW_MAIL: + case ITEM_TROPIC_MAIL: + case ITEM_DREAM_MAIL: + case ITEM_FAB_MAIL: + case ITEM_RETRO_MAIL: + return TRUE; + default: + return FALSE; + } +} diff --git a/src/pokemon/mon_markings.c b/src/pokemon/mon_markings.c new file mode 100644 index 000000000..0cad8db59 --- /dev/null +++ b/src/pokemon/mon_markings.c @@ -0,0 +1,383 @@ +#include "global.h" +#include "main.h" +#include "menu_cursor.h" +#include "text_window.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" + +#ifdef GERMAN +#define MENU_TEXT_SPRITE_X_OFFSET 24 +#else +#define MENU_TEXT_SPRITE_X_OFFSET 32 +#endif + +struct PokemonMarkMenu +{ + /*0x0000*/ u16 baseTileTag; + /*0x0002*/ u16 basePaletteTag; + /*0x0004*/ u8 markings; // bit flags + /*0x0005*/ s8 cursorPos; + /*0x0006*/ bool8 markingsArray[4]; + /*0x000A*/ u8 cursorBaseY; + /*0x000B*/ bool8 spriteSheetLoadRequired; + /*0x000C*/ struct Sprite *menuWindowSprites[2]; // upper and lower halves of menu window + /*0x0014*/ struct Sprite *menuMarkingSprites[4]; + /*0x0024*/ struct Sprite *menuTextSprite; + /*0x0028*/ u8 *frameTiles; + /*0x002C*/ u16 *framePalette; + /*0x0030*/ u8 menuWindowSpriteTiles[0x1000]; + /*0x1030*/ u8 filler1030[0x80]; + /*0x10B0*/ u8 tileLoadState; +}; + +extern u8 gPokenavConditionMenuMisc_Gfx[]; +extern u16 gUnknown_08E966B8[]; + +extern u16 gUnknown_083E49F4[]; +extern u8 gUnknown_083E4A14[]; +extern struct OamData gOamData_83E5214; +extern struct OamData gOamData_83E521C; +extern const union AnimCmd *const gSpriteAnimTable_83E5274[]; +extern const union AnimCmd *const gSpriteAnimTable_83E52AC[]; +extern struct OamData gOamData_83E52B4; +extern const union AnimCmd *const gSpriteAnimTable_83E533C[]; + +static EWRAM_DATA struct PokemonMarkMenu *sMenu = NULL; + +void sub_80F761C(s16, s16, u16, u16); +void nullsub_65(struct Sprite *); +void sub_80F78CC(struct Sprite *); +void sub_80F7908(struct Sprite *); +struct Sprite *sub_80F7960(u16, u16, u16 *, u16); + +void sub_80F727C(struct PokemonMarkMenu *ptr) +{ + sMenu = ptr; + sMenu->spriteSheetLoadRequired = FALSE; +} + +void sub_80F728C(void) +{ + const struct FrameGraphics *frame = GetTextWindowFrameGraphics(gSaveBlock2.optionsWindowFrameType); + sMenu->frameTiles = frame->tiles; + sMenu->framePalette = frame->palette; + sMenu->tileLoadState = 0; + CpuFill16(0, sMenu->menuWindowSpriteTiles, sizeof(sMenu->menuWindowSpriteTiles)); +} + +bool8 sub_80F72D4(void) +{ + u16 i; + u8 *dest = sMenu->menuWindowSpriteTiles + sMenu->tileLoadState * 0x100; + + switch (sMenu->tileLoadState) + { + case 0: + CpuFastCopy(sMenu->frameTiles, dest, TILE_SIZE_4BPP); + for (i = 0; i < 6; i++) + { + CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP); + } + CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 2, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP); + sMenu->tileLoadState++; + break; + default: + CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 3, dest, TILE_SIZE_4BPP); + for (i = 0; i < 6; i++) + { + CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 4, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP); + } + CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 5, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP); + sMenu->tileLoadState++; + break; + case 13: + CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 6, dest, TILE_SIZE_4BPP); + for (i = 0; i < 6; i++) + { + CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 7, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP); + } + CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 8, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP); + sMenu->tileLoadState++; + return FALSE; + case 14: + return FALSE; + } + + return TRUE; +} + +void sub_80F7404(void) +{ + sub_80F728C(); + while (sub_80F72D4()) + ; +} + +void sub_80F7418(u8 markings, s16 x, s16 y) +{ + u16 i; + sMenu->cursorPos = 0; + sMenu->markings = markings; + for (i = 0; i < 4; i++) + sMenu->markingsArray[i] = (sMenu->markings >> i) & 1; + DestroyMenuCursor(); + sub_80F761C(x, y, sMenu->baseTileTag, sMenu->basePaletteTag); +} + +void sub_80F7470(void) +{ + u16 i; + + for (i = 0; i < 3; i++) + { + FreeSpriteTilesByTag(sMenu->baseTileTag + i); + } + + FreeSpritePaletteByTag(sMenu->basePaletteTag); + FreeSpritePaletteByTag(sMenu->basePaletteTag + 1); + + for (i = 0; i < 2; i++) + { + if (!sMenu->menuWindowSprites[i]) + return; + DestroySprite(sMenu->menuWindowSprites[i]); + } + + for (i = 0; i < 4; i++) + { + if (!sMenu->menuMarkingSprites[i]) + return; + DestroySprite(sMenu->menuMarkingSprites[i]); + } + + DestroyMenuCursor(); + + if (sMenu->menuTextSprite) + DestroySprite(sMenu->menuTextSprite); +} + +bool8 sub_80F7500(void) +{ + u16 i; + struct SpriteSheet sheets[3] = + { + { sMenu->menuWindowSpriteTiles, 0x1000, sMenu->baseTileTag }, + { gPokenavConditionMenuMisc_Gfx, 0x520, sMenu->baseTileTag + 1 }, + { NULL, 0, 0 } + }; + + if (sMenu->spriteSheetLoadRequired) + { + LoadTilesForSpriteSheets(sheets); + sMenu->spriteSheetLoadRequired = FALSE; + } + + if (gMain.newKeys & DPAD_UP) + { + s8 pos; + PlaySE(SE_SELECT); + pos = --sMenu->cursorPos; + if (pos < 0) + sMenu->cursorPos = 5; + return TRUE; + } + + if (gMain.newKeys & DPAD_DOWN) + { + s8 pos; + PlaySE(SE_SELECT); + pos = ++sMenu->cursorPos; + if (pos > 5) + sMenu->cursorPos = 0; + return TRUE; + } + + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + + switch (sMenu->cursorPos) + { + case 4: + sMenu->markings = 0; + for (i = 0; i < 4; i++) + sMenu->markings |= sMenu->markingsArray[i] << i; + return FALSE; + case 5: + return FALSE; + } + + sMenu->markingsArray[sMenu->cursorPos] = !sMenu->markingsArray[sMenu->cursorPos]; + return TRUE; + } + + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + return FALSE; + } + + return TRUE; +} + +void sub_80F761C(s16 x, s16 y, u16 baseTileTag, u16 basePaletteTag) +{ + u16 i; + u8 spriteId; + + struct SpriteSheet sheets[] = + { + { sMenu->menuWindowSpriteTiles, 0x1000, baseTileTag }, + { gPokenavConditionMenuMisc_Gfx, 0x520, baseTileTag + 1 }, + { NULL, 0 } + }; + + struct SpritePalette palettes[] = + { + { sMenu->framePalette, basePaletteTag }, + { gUnknown_08E966B8, basePaletteTag + 1}, + { NULL, 0 } + }; + + struct SpriteTemplate sprTemplate = + { + baseTileTag, + basePaletteTag, + &gOamData_83E5214, + gSpriteAnimTable_83E52AC, + NULL, + gDummySpriteAffineAnimTable, + nullsub_65, + }; + + sMenu->spriteSheetLoadRequired = TRUE; + AllocTilesForSpriteSheets(sheets); + LoadSpritePalettes(palettes); + + for (i = 0; i < 2; i++) + { + spriteId = CreateSprite(&sprTemplate, x + 32, y + 32, 2); + if (spriteId != 64) + { + sMenu->menuWindowSprites[i] = &gSprites[spriteId]; + StartSpriteAnim(&gSprites[spriteId], i); + } + else + { + sMenu->menuWindowSprites[i] = NULL; + return; + } + } + + sMenu->menuWindowSprites[1]->pos1.y = y + 96; + + sprTemplate.tileTag++; + sprTemplate.paletteTag++; + sprTemplate.anims = gSpriteAnimTable_83E5274; + sprTemplate.callback = sub_80F78CC; + sprTemplate.oam = &gOamData_83E521C; + + for (i = 0; i < 4; i++) + { + spriteId = CreateSprite(&sprTemplate, x + 32, y + 16 + 16 * i, 1); + if (spriteId != 64) + { + sMenu->menuMarkingSprites[i] = &gSprites[spriteId]; + gSprites[spriteId].data0 = i; + } + else + { + sMenu->menuMarkingSprites[i] = NULL; + return; + } + } + + sprTemplate.callback = SpriteCallbackDummy; + + spriteId = CreateSprite(&sprTemplate, 0, 0, 1); + + if (spriteId != 64) + { + sMenu->menuTextSprite = &gSprites[spriteId]; + sMenu->menuTextSprite->oam.shape = ST_OAM_H_RECTANGLE; + sMenu->menuTextSprite->oam.size = 3; + StartSpriteAnim(sMenu->menuTextSprite, 9); + sMenu->menuTextSprite->pos1.x = x + MENU_TEXT_SPRITE_X_OFFSET; + sMenu->menuTextSprite->pos1.y = y + 80; + CalcCenterToCornerVec(sMenu->menuTextSprite, 1, 2, 0); + } + else + { + sMenu->menuTextSprite = NULL; + } + + sMenu->cursorBaseY = y + 8; + sub_814A5C0(0, basePaletteTag + 1, 15, 0, 0x30); + sub_814A880(x + 8, sMenu->cursorBaseY); + sub_814AABC(sub_80F7908); +} + +void nullsub_65(struct Sprite *sprite) +{ +} + +void sub_80F78CC(struct Sprite *sprite) +{ + if (sMenu->markingsArray[sprite->data0]) + StartSpriteAnim(sprite, 2 * sprite->data0 + 1); + else + StartSpriteAnim(sprite, 2 * sprite->data0); +} + +void sub_80F7908(struct Sprite *sprite) +{ + sprite->pos1.y = 16 * sMenu->cursorPos + sMenu->cursorBaseY; +} + +struct Sprite *sub_80F7920(u16 tileTag, u16 paletteTag, u16 *palette) +{ + if (!palette) + palette = gUnknown_083E49F4; + return sub_80F7960(tileTag, paletteTag, palette, 16); +} + +struct Sprite *sub_80F7940(u16 tileTag, u16 paletteTag, u16 *palette) +{ + if (!palette) + palette = gUnknown_083E49F4; + return sub_80F7960(tileTag, paletteTag, palette, 1); +} + +struct Sprite *sub_80F7960(u16 tileTag, u16 paletteTag, u16 *palette, u16 size) +{ + u8 spriteId; + struct SpriteTemplate sprTemplate; + struct SpriteSheet sheet = { gUnknown_083E4A14, 0x80, tileTag }; + struct SpritePalette sprPalette = { palette, paletteTag }; + + sprTemplate.tileTag = tileTag; + sprTemplate.paletteTag = paletteTag; + sprTemplate.oam = &gOamData_83E52B4; + sprTemplate.anims = gSpriteAnimTable_83E533C; + sprTemplate.images = NULL; + sprTemplate.affineAnims = gDummySpriteAffineAnimTable; + sprTemplate.callback = nullsub_65; + + sheet.size = size * 0x80; + + LoadSpriteSheet(&sheet); + LoadSpritePalette(&sprPalette); + + spriteId = CreateSprite(&sprTemplate, 0, 0, 0); + if (spriteId != 64) + return &gSprites[spriteId]; + else + return NULL; +} + +void sub_80F7A10(u8 markings, void *dest) +{ + void *src = gUnknown_083E4A14 + markings * 0x80; + DmaCopy16(3, src, dest, 0x80); +} diff --git a/src/pokemon/pokedex.c b/src/pokemon/pokedex.c new file mode 100644 index 000000000..6a17a89e0 --- /dev/null +++ b/src/pokemon/pokedex.c @@ -0,0 +1,5528 @@ + +#include "global.h" +#include "gba/m4a_internal.h" +#include "pokedex.h" +#include "battle.h" +#include "data2.h" +#include "decompress.h" +#include "event_data.h" +#include "graphics.h" +#include "m4a.h" +#include "main.h" +#include "menu.h" +#include "menu_cursor.h" +#include "palette.h" +#include "pokedex_area_screen.h" +#include "pokedex_cry_screen.h" +#include "pokemon.h" +#include "rng.h" +#include "rom4.h" +#include "songs.h" +#include "sound.h" +#include "species.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "trig.h" +#include "unknown_task.h" + +#define NATIONAL_DEX_COUNT 386 + +struct PokedexListItem +{ + u16 dexNum; + u16 seen:1; + u16 owned:1; +}; + +struct PokedexView +{ + struct PokedexListItem unk0[NATIONAL_DEX_COUNT]; + u16 unk608; + u8 unk60A_1:1; + u8 unk60A_2:1; + u8 unk60B; + u16 pokemonListCount; + u16 selectedPokemon; + u16 unk610; + u16 dexMode; + u16 unk614; + u16 dexOrder; + u16 unk618; + u16 unk61A; + u16 unk61C; + u16 unk61E[4]; + u16 selectedMonSpriteId; + u16 unk628; + u16 unk62A; + u8 unk62C; + u8 unk62D; + u8 unk62E; + u8 unk62F; + s16 unk630; + s16 unk632; + u16 unk634; + u16 unk636; + u16 unk638; + u16 unk63A[4]; + u8 filler642[8]; + u8 unk64A; + u8 unk64B; + u8 unk64C_1:1; + u8 selectedScreen; + u8 descriptionPageNum; + u8 unk64F; + u8 menuIsOpen; //menuIsOpen + u8 unk651; + u16 menuCursorPos; //Menu cursor position + s16 menuY; //Menu Y position (inverted because we use REG_BG0VOFS for this) + u8 unk656[8]; + u8 unk65E[8]; +}; + +enum +{ + DEX_MODE_HOENN, + DEX_MODE_NATIONAL +}; + +enum +{ + PAGE_SCREEN, + AREA_SCREEN, + CRY_SCREEN, + SIZE_SCREEN +}; + +struct PokedexEntry +{ + /*0x00*/ u8 categoryName[12]; + /*0x0C*/ u16 height; //in decimeters + /*0x0E*/ u16 weight; //in hectograms + /*0x10*/ const u8 *descriptionPage1; + /*0x14*/ const u8 *descriptionPage2; + /*0x18*/ u16 unused; + /*0x1A*/ u16 pokemonScale; + /*0x1C*/ u16 pokemonOffset; + /*0x1E*/ u16 trainerScale; + /*0x20*/ u16 trainerOffset; +}; /*size = 0x24*/ + +struct UnknownStruct2 +{ + const u8 *text1; + const u8 *text2; +}; + +struct UnknownStruct1 +{ + const struct UnknownStruct2 *unk0; + u8 unk4; + u8 unk5; + u16 unk6; +}; + +struct UnknownStruct3 +{ + const u8 *text; + u8 unk4; + u8 unk5; + u8 unk6; +}; + +struct UnknownStruct4 +{ + const u8 *text; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; + u8 unk8; + u8 unk9; +}; + +extern struct MusicPlayerInfo gMPlay_BGM; +extern u8 gReservedSpritePaletteCount; +extern struct SpriteTemplate gUnknown_02024E8C; +extern u8 gUnknown_03005E98; +extern const u8 gPokedexMenu_Gfx[]; +extern const u8 gUnknown_08E96738[]; +extern const u8 gUnknown_08E96888[]; +extern const u8 gUnknown_08E96994[]; +extern const u8 gUnknown_08E9C6DC[]; +extern const u8 gUnknown_08D00524[]; +extern const u8 gUnknown_08E96BD4[]; +extern const u8 gUnknown_08E96ACC[]; +extern const u8 gUnknown_08E96B58[]; +extern const u16 gPokedexMenu_Pal[]; +extern const u16 gPokedexMenu2_Pal[]; +extern const struct CompressedSpriteSheet gTrainerFrontPicTable[]; +extern const struct MonCoords gTrainerFrontPicCoords[]; +extern const struct PokedexEntry gPokedexEntries[]; +extern const u8 gPokedexMenuSearch_Gfx[]; +extern const u8 gUnknown_08E96D2C[]; +extern const u16 gPokedexMenuSearch_Pal[]; +extern const u8 gTypeNames[][7]; +extern const u8 gPokedexMenu2_Gfx[]; + +static EWRAM_DATA struct PokedexView *gPokedexView = NULL; +static EWRAM_DATA u16 gUnknown_0202FFB8 = 0; +static EWRAM_DATA u8 gUnknown_0202FFBA = 0; +static EWRAM_DATA struct PokedexListItem *gUnknown_0202FFBC = NULL; + +u8 gUnknown_03005CE8; +IntrCallback gUnknown_03005CEC; + +static u8 sub_8091E3C(void); + +static const u16 sPokedexSearchPalette[] = INCBIN_U16("graphics/pokedex/search.gbapal"); +static const u16 sNationalPokedexPalette[] = INCBIN_U16("graphics/pokedex/national.gbapal"); +const u8 gEmptySpacce_839F7FC[0xA4] = {0}; +static const u8 gUnknown_0839F8A0[] = INCBIN_U8("graphics/pokedex/pokedex_cry_layout.bin.lz"); +static const u8 gUnknown_0839F988[] = INCBIN_U8("graphics/pokedex/pokedex_size_layout.bin.lz"); +#if ENGLISH +static const u8 gUnknown_0839FA7C[] = INCBIN_U8("graphics/pokedex/noball.4bpp.lz"); +#elif GERMAN +extern const u8 gUnknown_0839FA7C[]; +#endif + +#include "../data/pokedex_orders.h" +static const struct OamData gOamData_83A0404 = +{ + .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 struct OamData gOamData_83A040C = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; +static const struct OamData gOamData_83A0414 = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; +static const struct OamData gOamData_83A041C = +{ + .y = 160, + .affineMode = 0, + .objMode = 2, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; +static const struct OamData gOamData_83A0424 = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; +static const struct OamData gOamData_83A042C = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_83A0434[] = +{ + ANIMCMD_FRAME(3, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A043C[] = +{ + ANIMCMD_FRAME(1, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A0444[] = +{ + ANIMCMD_FRAME(16, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A044C[] = +{ + ANIMCMD_FRAME(32, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A0454[] = +{ + ANIMCMD_FRAME(64, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A045C[] = +{ + ANIMCMD_FRAME(96, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A0464[] = +{ + ANIMCMD_FRAME(128, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A046C[] = +{ + ANIMCMD_FRAME(160, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A0474[] = +{ + ANIMCMD_FRAME(192, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A047C[] = +{ + ANIMCMD_FRAME(224, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A0484[] = +{ + ANIMCMD_FRAME(226, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A048C[] = +{ + ANIMCMD_FRAME(228, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A0494[] = +{ + ANIMCMD_FRAME(230, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A049C[] = +{ + ANIMCMD_FRAME(232, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A04A4[] = +{ + ANIMCMD_FRAME(234, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A04AC[] = +{ + ANIMCMD_FRAME(236, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A04B4[] = +{ + ANIMCMD_FRAME(238, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A04BC[] = +{ + ANIMCMD_FRAME(240, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A04C4[] = +{ + ANIMCMD_FRAME(242, 30), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83A04CC[] = +{ + ANIMCMD_FRAME(4, 30), + ANIMCMD_END, +}; +static const union AnimCmd *const gSpriteAnimTable_83A04D4[] = +{ + gSpriteAnim_83A0434, +}; +static const union AnimCmd *const gSpriteAnimTable_83A04D8[] = +{ + gSpriteAnim_83A043C, +}; +static const union AnimCmd *const gSpriteAnimTable_83A04DC[] = +{ + gSpriteAnim_83A0444, +}; +static const union AnimCmd *const gSpriteAnimTable_83A04E0[] = +{ + gSpriteAnim_83A044C, + gSpriteAnim_83A0454, + gSpriteAnim_83A045C, + gSpriteAnim_83A0464, +}; +static const union AnimCmd *const gSpriteAnimTable_83A04F0[] = +{ + gSpriteAnim_83A046C, + gSpriteAnim_83A0474, +}; +static const union AnimCmd *const gSpriteAnimTable_83A04F8[] = +{ + gSpriteAnim_83A047C, + gSpriteAnim_83A0484, + gSpriteAnim_83A048C, + gSpriteAnim_83A0494, + gSpriteAnim_83A049C, + gSpriteAnim_83A04A4, + gSpriteAnim_83A04AC, + gSpriteAnim_83A04B4, + gSpriteAnim_83A04BC, + gSpriteAnim_83A04C4, +}; +static const union AnimCmd *const gSpriteAnimTable_83A0520[] = +{ + gSpriteAnim_83A04CC, +}; +static void sub_808EF38(struct Sprite *); +static const struct SpriteTemplate gSpriteTemplate_83A0524 = +{ + .tileTag = 4096, + .paletteTag = 4096, + .oam = &gOamData_83A0404, + .anims = gSpriteAnimTable_83A04D4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_808EF38, +}; +static void sub_808EF8C(struct Sprite *); +static const struct SpriteTemplate gSpriteTemplate_83A053C = +{ + .tileTag = 4096, + .paletteTag = 4096, + .oam = &gOamData_83A040C, + .anims = gSpriteAnimTable_83A04D8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_808EF8C, +}; +static void sub_808F08C(struct Sprite *); +static const struct SpriteTemplate gSpriteTemplate_83A0554 = +{ + .tileTag = 4096, + .paletteTag = 4096, + .oam = &gOamData_83A0414, + .anims = gSpriteAnimTable_83A04E0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_808F08C, +}; +static void sub_808F0B4(struct Sprite *); +static const struct SpriteTemplate gSpriteTemplate_83A056C = +{ + .tileTag = 4096, + .paletteTag = 4096, + .oam = &gOamData_83A041C, + .anims = gSpriteAnimTable_83A04DC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_808F0B4, +}; +static void sub_808ED94(struct Sprite *); +static const struct SpriteTemplate gSpriteTemplate_83A0584 = +{ + .tileTag = 4096, + .paletteTag = 4096, + .oam = &gOamData_83A0424, + .anims = gSpriteAnimTable_83A04F0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_808ED94, +}; +static const struct SpriteTemplate gSpriteTemplate_83A059C = +{ + .tileTag = 4096, + .paletteTag = 4096, + .oam = &gOamData_83A042C, + .anims = gSpriteAnimTable_83A04F8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_808ED94, +}; +static void sub_808F168(struct Sprite *); +static const struct SpriteTemplate gSpriteTemplate_83A05B4 = +{ + .tileTag = 4096, + .paletteTag = 4096, + .oam = &gOamData_83A042C, + .anims = gSpriteAnimTable_83A0520, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_808F168, +}; +static const struct CompressedSpriteSheet gUnknown_083A05CC[] = +{ + {gPokedexMenu2_Gfx, 0x1F00, 0x1000}, + {NULL, 0, 0}, +}; +static const struct SpritePalette gUnknown_083A05DC[] = +{ + {gPokedexMenu_Pal, 0x1000}, + {NULL, 0}, +}; +static const u8 gUnknown_083A05EC[] = {2, 4, 8, 16, 32}; +static const u8 gUnknown_083A05F1[] = {16, 8, 4, 2, 1}; +const u8 gEmptySpacce_83A05F6[] = {0, 0}; // Padding, maybe? +static const u8 gUnknown_083A05F8[] = _(""); +#if ENGLISH +#include "../data/pokedex_entries_en.h" +#elif GERMAN +#include "../data/pokedex_entries_de.h" +#endif +static const u16 gUnknown_083B4EC4[16] = {0}; +static const u8 *const sMonFootprintTable[] = +{ + gMonFootprint_Bulbasaur, + gMonFootprint_Bulbasaur, + gMonFootprint_Ivysaur, + gMonFootprint_Venusaur, + gMonFootprint_Charmander, + gMonFootprint_Charmeleon, + gMonFootprint_Charizard, + gMonFootprint_Squirtle, + gMonFootprint_Wartortle, + gMonFootprint_Blastoise, + gMonFootprint_Caterpie, + gMonFootprint_Metapod, + gMonFootprint_Butterfree, + gMonFootprint_Weedle, + gMonFootprint_Kakuna, + gMonFootprint_Beedrill, + gMonFootprint_Pidgey, + gMonFootprint_Pidgeotto, + gMonFootprint_Pidgeot, + gMonFootprint_Rattata, + gMonFootprint_Raticate, + gMonFootprint_Spearow, + gMonFootprint_Fearow, + gMonFootprint_Ekans, + gMonFootprint_Arbok, + gMonFootprint_Pikachu, + gMonFootprint_Raichu, + gMonFootprint_Sandshrew, + gMonFootprint_Sandslash, + gMonFootprint_NidoranF, + gMonFootprint_Nidorina, + gMonFootprint_Nidoqueen, + gMonFootprint_NidoranM, + gMonFootprint_Nidorino, + gMonFootprint_Nidoking, + gMonFootprint_Clefairy, + gMonFootprint_Clefable, + gMonFootprint_Vulpix, + gMonFootprint_Ninetales, + gMonFootprint_Jigglypuff, + gMonFootprint_Wigglytuff, + gMonFootprint_Zubat, + gMonFootprint_Golbat, + gMonFootprint_Oddish, + gMonFootprint_Gloom, + gMonFootprint_Vileplume, + gMonFootprint_Paras, + gMonFootprint_Parasect, + gMonFootprint_Venonat, + gMonFootprint_Venomoth, + gMonFootprint_Diglett, + gMonFootprint_Dugtrio, + gMonFootprint_Meowth, + gMonFootprint_Persian, + gMonFootprint_Psyduck, + gMonFootprint_Golduck, + gMonFootprint_Mankey, + gMonFootprint_Primeape, + gMonFootprint_Growlithe, + gMonFootprint_Arcanine, + gMonFootprint_Poliwag, + gMonFootprint_Poliwhirl, + gMonFootprint_Poliwrath, + gMonFootprint_Abra, + gMonFootprint_Kadabra, + gMonFootprint_Alakazam, + gMonFootprint_Machop, + gMonFootprint_Machoke, + gMonFootprint_Machamp, + gMonFootprint_Bellsprout, + gMonFootprint_Weepinbell, + gMonFootprint_Victreebel, + gMonFootprint_Tentacool, + gMonFootprint_Tentacruel, + gMonFootprint_Geodude, + gMonFootprint_Graveler, + gMonFootprint_Golem, + gMonFootprint_Ponyta, + gMonFootprint_Rapidash, + gMonFootprint_Slowpoke, + gMonFootprint_Slowbro, + gMonFootprint_Magnemite, + gMonFootprint_Magneton, + gMonFootprint_Farfetchd, + gMonFootprint_Doduo, + gMonFootprint_Dodrio, + gMonFootprint_Seel, + gMonFootprint_Dewgong, + gMonFootprint_Grimer, + gMonFootprint_Muk, + gMonFootprint_Shellder, + gMonFootprint_Cloyster, + gMonFootprint_Gastly, + gMonFootprint_Haunter, + gMonFootprint_Gengar, + gMonFootprint_Onix, + gMonFootprint_Drowzee, + gMonFootprint_Hypno, + gMonFootprint_Krabby, + gMonFootprint_Kingler, + gMonFootprint_Voltorb, + gMonFootprint_Electrode, + gMonFootprint_Exeggcute, + gMonFootprint_Exeggutor, + gMonFootprint_Cubone, + gMonFootprint_Marowak, + gMonFootprint_Hitmonlee, + gMonFootprint_Hitmonchan, + gMonFootprint_Lickitung, + gMonFootprint_Koffing, + gMonFootprint_Weezing, + gMonFootprint_Rhyhorn, + gMonFootprint_Rhydon, + gMonFootprint_Chansey, + gMonFootprint_Tangela, + gMonFootprint_Kangaskhan, + gMonFootprint_Horsea, + gMonFootprint_Seadra, + gMonFootprint_Goldeen, + gMonFootprint_Seaking, + gMonFootprint_Staryu, + gMonFootprint_Starmie, + gMonFootprint_Mrmime, + gMonFootprint_Scyther, + gMonFootprint_Jynx, + gMonFootprint_Electabuzz, + gMonFootprint_Magmar, + gMonFootprint_Pinsir, + gMonFootprint_Tauros, + gMonFootprint_Magikarp, + gMonFootprint_Gyarados, + gMonFootprint_Lapras, + gMonFootprint_Ditto, + gMonFootprint_Eevee, + gMonFootprint_Vaporeon, + gMonFootprint_Jolteon, + gMonFootprint_Flareon, + gMonFootprint_Porygon, + gMonFootprint_Omanyte, + gMonFootprint_Omastar, + gMonFootprint_Kabuto, + gMonFootprint_Kabutops, + gMonFootprint_Aerodactyl, + gMonFootprint_Snorlax, + gMonFootprint_Articuno, + gMonFootprint_Zapdos, + gMonFootprint_Moltres, + gMonFootprint_Dratini, + gMonFootprint_Dragonair, + gMonFootprint_Dragonite, + gMonFootprint_Mewtwo, + gMonFootprint_Mew, + gMonFootprint_Chikorita, + gMonFootprint_Bayleef, + gMonFootprint_Meganium, + gMonFootprint_Cyndaquil, + gMonFootprint_Quilava, + gMonFootprint_Typhlosion, + gMonFootprint_Totodile, + gMonFootprint_Croconaw, + gMonFootprint_Feraligatr, + gMonFootprint_Sentret, + gMonFootprint_Furret, + gMonFootprint_Hoothoot, + gMonFootprint_Noctowl, + gMonFootprint_Ledyba, + gMonFootprint_Ledian, + gMonFootprint_Spinarak, + gMonFootprint_Ariados, + gMonFootprint_Crobat, + gMonFootprint_Chinchou, + gMonFootprint_Lanturn, + gMonFootprint_Pichu, + gMonFootprint_Cleffa, + gMonFootprint_Igglybuff, + gMonFootprint_Togepi, + gMonFootprint_Togetic, + gMonFootprint_Natu, + gMonFootprint_Xatu, + gMonFootprint_Mareep, + gMonFootprint_Flaaffy, + gMonFootprint_Ampharos, + gMonFootprint_Bellossom, + gMonFootprint_Marill, + gMonFootprint_Azumarill, + gMonFootprint_Sudowoodo, + gMonFootprint_Politoed, + gMonFootprint_Hoppip, + gMonFootprint_Skiploom, + gMonFootprint_Jumpluff, + gMonFootprint_Aipom, + gMonFootprint_Sunkern, + gMonFootprint_Sunflora, + gMonFootprint_Yanma, + gMonFootprint_Wooper, + gMonFootprint_Quagsire, + gMonFootprint_Espeon, + gMonFootprint_Umbreon, + gMonFootprint_Murkrow, + gMonFootprint_Slowking, + gMonFootprint_Misdreavus, + gMonFootprint_Unown, + gMonFootprint_Wobbuffet, + gMonFootprint_Girafarig, + gMonFootprint_Pineco, + gMonFootprint_Forretress, + gMonFootprint_Dunsparce, + gMonFootprint_Gligar, + gMonFootprint_Steelix, + gMonFootprint_Snubbull, + gMonFootprint_Granbull, + gMonFootprint_Qwilfish, + gMonFootprint_Scizor, + gMonFootprint_Shuckle, + gMonFootprint_Heracross, + gMonFootprint_Sneasel, + gMonFootprint_Teddiursa, + gMonFootprint_Ursaring, + gMonFootprint_Slugma, + gMonFootprint_Magcargo, + gMonFootprint_Swinub, + gMonFootprint_Piloswine, + gMonFootprint_Corsola, + gMonFootprint_Remoraid, + gMonFootprint_Octillery, + gMonFootprint_Delibird, + gMonFootprint_Mantine, + gMonFootprint_Skarmory, + gMonFootprint_Houndour, + gMonFootprint_Houndoom, + gMonFootprint_Kingdra, + gMonFootprint_Phanpy, + gMonFootprint_Donphan, + gMonFootprint_Porygon2, + gMonFootprint_Stantler, + gMonFootprint_Smeargle, + gMonFootprint_Tyrogue, + gMonFootprint_Hitmontop, + gMonFootprint_Smoochum, + gMonFootprint_Elekid, + gMonFootprint_Magby, + gMonFootprint_Miltank, + gMonFootprint_Blissey, + gMonFootprint_Raikou, + gMonFootprint_Entei, + gMonFootprint_Suicune, + gMonFootprint_Larvitar, + gMonFootprint_Pupitar, + gMonFootprint_Tyranitar, + gMonFootprint_Lugia, + gMonFootprint_HoOh, + gMonFootprint_Celebi, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_QuestionMark, + gMonFootprint_Treecko, + gMonFootprint_Grovyle, + gMonFootprint_Sceptile, + gMonFootprint_Torchic, + gMonFootprint_Combusken, + gMonFootprint_Blaziken, + gMonFootprint_Mudkip, + gMonFootprint_Marshtomp, + gMonFootprint_Swampert, + gMonFootprint_Poochyena, + gMonFootprint_Mightyena, + gMonFootprint_Zigzagoon, + gMonFootprint_Linoone, + gMonFootprint_Wurmple, + gMonFootprint_Silcoon, + gMonFootprint_Beautifly, + gMonFootprint_Cascoon, + gMonFootprint_Dustox, + gMonFootprint_Lotad, + gMonFootprint_Lombre, + gMonFootprint_Ludicolo, + gMonFootprint_Seedot, + gMonFootprint_Nuzleaf, + gMonFootprint_Shiftry, + gMonFootprint_Nincada, + gMonFootprint_Ninjask, + gMonFootprint_Shedinja, + gMonFootprint_Taillow, + gMonFootprint_Swellow, + gMonFootprint_Shroomish, + gMonFootprint_Breloom, + gMonFootprint_Spinda, + gMonFootprint_Wingull, + gMonFootprint_Pelipper, + gMonFootprint_Surskit, + gMonFootprint_Masquerain, + gMonFootprint_Wailmer, + gMonFootprint_Wailord, + gMonFootprint_Skitty, + gMonFootprint_Delcatty, + gMonFootprint_Kecleon, + gMonFootprint_Baltoy, + gMonFootprint_Claydol, + gMonFootprint_Nosepass, + gMonFootprint_Torkoal, + gMonFootprint_Sableye, + gMonFootprint_Barboach, + gMonFootprint_Whiscash, + gMonFootprint_Luvdisc, + gMonFootprint_Corphish, + gMonFootprint_Crawdaunt, + gMonFootprint_Feebas, + gMonFootprint_Milotic, + gMonFootprint_Carvanha, + gMonFootprint_Sharpedo, + gMonFootprint_Trapinch, + gMonFootprint_Vibrava, + gMonFootprint_Flygon, + gMonFootprint_Makuhita, + gMonFootprint_Hariyama, + gMonFootprint_Electrike, + gMonFootprint_Manectric, + gMonFootprint_Numel, + gMonFootprint_Camerupt, + gMonFootprint_Spheal, + gMonFootprint_Sealeo, + gMonFootprint_Walrein, + gMonFootprint_Cacnea, + gMonFootprint_Cacturne, + gMonFootprint_Snorunt, + gMonFootprint_Glalie, + gMonFootprint_Lunatone, + gMonFootprint_Solrock, + gMonFootprint_Azurill, + gMonFootprint_Spoink, + gMonFootprint_Grumpig, + gMonFootprint_Plusle, + gMonFootprint_Minun, + gMonFootprint_Mawile, + gMonFootprint_Meditite, + gMonFootprint_Medicham, + gMonFootprint_Swablu, + gMonFootprint_Altaria, + gMonFootprint_Wynaut, + gMonFootprint_Duskull, + gMonFootprint_Dusclops, + gMonFootprint_Roselia, + gMonFootprint_Slakoth, + gMonFootprint_Vigoroth, + gMonFootprint_Slaking, + gMonFootprint_Gulpin, + gMonFootprint_Swalot, + gMonFootprint_Tropius, + gMonFootprint_Whismur, + gMonFootprint_Loudred, + gMonFootprint_Exploud, + gMonFootprint_Clamperl, + gMonFootprint_Huntail, + gMonFootprint_Gorebyss, + gMonFootprint_Absol, + gMonFootprint_Shuppet, + gMonFootprint_Banette, + gMonFootprint_Seviper, + gMonFootprint_Zangoose, + gMonFootprint_Relicanth, + gMonFootprint_Aron, + gMonFootprint_Lairon, + gMonFootprint_Aggron, + gMonFootprint_Castform, + gMonFootprint_Volbeat, + gMonFootprint_Illumise, + gMonFootprint_Lileep, + gMonFootprint_Cradily, + gMonFootprint_Anorith, + gMonFootprint_Armaldo, + gMonFootprint_Ralts, + gMonFootprint_Kirlia, + gMonFootprint_Gardevoir, + gMonFootprint_Bagon, + gMonFootprint_Shelgon, + gMonFootprint_Salamence, + gMonFootprint_Beldum, + gMonFootprint_Metang, + gMonFootprint_Metagross, + gMonFootprint_Regirock, + gMonFootprint_Regice, + gMonFootprint_Registeel, + gMonFootprint_Kyogre, + gMonFootprint_Groudon, + gMonFootprint_Rayquaza, + gMonFootprint_Latias, + gMonFootprint_Latios, + gMonFootprint_Jirachi, + gMonFootprint_Deoxys, + gMonFootprint_Chimecho, + gMonFootprint_Bulbasaur, +}; +static const u8 gUnknown_083B5558[] = _("{CLEAR_TO 0}"); +const u8 gUnknown_083B555C[] = INCBIN_U8("graphics/unknown/unknown_3B555C.bin"); +static const struct OamData gOamData_83B557C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; +static void *const gUnknown_083B5584[] = +{ + (void *)0x02008000, + (void *)0x0200C000, + (void *)0x02010000, + (void *)0x02014000, +}; +static const struct SpriteFrameImage gSpriteImageTable_83B5594[] = +{ + {(u8 *)0x02008000, 0x800}, + {(u8 *)0x02008800, 0x800}, + {(u8 *)0x02009000, 0x800}, + {(u8 *)0x02009800, 0x800}, + {(u8 *)0x0200A000, 0x800}, + {(u8 *)0x0200A800, 0x800}, + {(u8 *)0x0200B000, 0x800}, + {(u8 *)0x0200B800, 0x800}, + {(u8 *)0x0200C000, 0x800}, + {(u8 *)0x0200C800, 0x800}, + {(u8 *)0x0200D000, 0x800}, + {(u8 *)0x0200D800, 0x800}, + {(u8 *)0x0200E000, 0x800}, + {(u8 *)0x0200E800, 0x800}, + {(u8 *)0x0200F000, 0x800}, + {(u8 *)0x0200F800, 0x800}, +}; +static const struct SpriteFrameImage gSpriteImageTable_83B5614[] = +{ + {(u8 *)0x0200C000, 0x800}, + {(u8 *)0x0200C800, 0x800}, + {(u8 *)0x0200D000, 0x800}, + {(u8 *)0x0200D800, 0x800}, + {(u8 *)0x0200E000, 0x800}, + {(u8 *)0x0200E800, 0x800}, + {(u8 *)0x0200F000, 0x800}, + {(u8 *)0x0200F800, 0x800}, + {(u8 *)0x02010000, 0x800}, + {(u8 *)0x02010800, 0x800}, + {(u8 *)0x02011000, 0x800}, + {(u8 *)0x02011800, 0x800}, + {(u8 *)0x02012000, 0x800}, + {(u8 *)0x02012800, 0x800}, + {(u8 *)0x02013000, 0x800}, + {(u8 *)0x02013800, 0x800}, +}; +static const struct SpriteFrameImage gSpriteImageTable_83B5694[] = +{ + {(u8 *)0x02010000, 0x800}, + {(u8 *)0x02010800, 0x800}, + {(u8 *)0x02011000, 0x800}, + {(u8 *)0x02011800, 0x800}, + {(u8 *)0x02012000, 0x800}, + {(u8 *)0x02012800, 0x800}, + {(u8 *)0x02013000, 0x800}, + {(u8 *)0x02013800, 0x800}, + {(u8 *)0x02014000, 0x800}, + {(u8 *)0x02014800, 0x800}, + {(u8 *)0x02015000, 0x800}, + {(u8 *)0x02015800, 0x800}, + {(u8 *)0x02016000, 0x800}, + {(u8 *)0x02016800, 0x800}, + {(u8 *)0x02017000, 0x800}, + {(u8 *)0x02017800, 0x800}, +}; +static const struct SpriteFrameImage gSpriteImageTable_83B5714[] = +{ + {(u8 *)0x02014000, 0x800}, + {(u8 *)0x02014800, 0x800}, + {(u8 *)0x02015000, 0x800}, + {(u8 *)0x02015800, 0x800}, + {(u8 *)0x02016000, 0x800}, + {(u8 *)0x02016800, 0x800}, + {(u8 *)0x02017000, 0x800}, + {(u8 *)0x02017800, 0x800}, + {(u8 *)0x02018000, 0x800}, + {(u8 *)0x02018800, 0x800}, + {(u8 *)0x02019000, 0x800}, + {(u8 *)0x02019800, 0x800}, + {(u8 *)0x0201A000, 0x800}, + {(u8 *)0x0201A800, 0x800}, + {(u8 *)0x0201B000, 0x800}, + {(u8 *)0x0201B800, 0x800}, +}; +static const struct SpriteFrameImage *const gUnknown_083B5794[] = +{ + gSpriteImageTable_83B5594, + gSpriteImageTable_83B5614, + gSpriteImageTable_83B5694, + gSpriteImageTable_83B5714, +}; +static void nullsub_59(struct Sprite *); +static const struct SpriteTemplate gUnknown_083B57A4 = +{ + .tileTag = 0xFFFF, + .paletteTag = 0, + .oam = &gOamData_83B557C, + .anims = NULL, + .images = gSpriteImageTable_83B5594, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = nullsub_59, +}; +static const u8 gUnknown_083B57BC[][4] = +{ + {0, 0, 0, 0}, + {CHAR_A, 3, CHAR_a, 3}, + {CHAR_D, 3, CHAR_d, 3}, + {CHAR_G, 3, CHAR_g, 3}, + {CHAR_J, 3, CHAR_j, 3}, + {CHAR_M, 3, CHAR_m, 3}, + {CHAR_P, 3, CHAR_p, 3}, + {CHAR_S, 3, CHAR_s, 3}, + {CHAR_V, 3, CHAR_v, 3}, + {CHAR_Y, 2, CHAR_y, 2}, +}; +static const struct UnknownStruct3 gUnknown_083B57E4[] = +{ + {DexText_SearchForPoke, 0, 0, 5}, + {DexText_SwitchDex, 6, 0, 5}, + {DexText_ReturnToDex, 12, 0, 5}, +}; +static const struct UnknownStruct4 gUnknown_083B57FC[] = +{ + {DexText_ListByABC, 0, 2, 5, 5, 2, 12}, + {DexText_ListByColor, 0, 4, 5, 5, 4, 12}, + {DexText_ListByType, 0, 6, 5, 5, 6, 6}, + {DexText_ListByType, 0, 6, 5, 11, 6, 6}, + {DexText_SelectDexList, 0, 8, 5, 5, 8, 12}, + {DexText_SelectDexMode, 0, 10, 5, 5, 10, 12}, + {DexText_ExecuteSearchSwitch, 0, 12, 5, 0, 0, 0}, +}; +static const u8 gUnknown_083B5850[][4] = +{ + {0xFF, 0xFF, 0xFF, 1}, + {0xFF, 0xFF, 0, 2}, + {0xFF, 3, 1, 4}, + { 2, 0xFF, 1, 4}, + {0xFF, 0xFF, 2, 5}, + {0xFF, 0xFF, 4, 6}, + {0xFF, 0xFF, 5, 0xFF}, +}; +static const u8 gUnknown_083B586C[][4] = +{ + {0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 5}, + {0xFF, 0xFF, 4, 6}, + {0xFF, 0xFF, 5, 0xFF}, +}; +static const u8 gUnknown_083B5888[][4] = +{ + {0xFF, 0xFF, 0xFF, 1}, + {0xFF, 0xFF, 0, 2}, + {0xFF, 3, 1, 4}, + { 2, 0xFF, 1, 4}, + {0xFF, 0xFF, 2, 6}, + {0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 4, 0xFF}, +}; +static const u8 gUnknown_083B58A4[][4] = +{ + {0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 6}, + {0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 4, 0xFF}, +}; +static const struct UnknownStruct2 gUnknown_083B58C0[] = +{ + {DexText_HoennDex2, DexText_HoennDex}, + {DexText_NationalDex2, DexText_NationalDex}, + {NULL, NULL}, +}; +static const struct UnknownStruct2 gUnknown_083B58D8[] = +{ + {DexText_ListByNumber, DexText_NumericalMode}, + {DexText_ListByABC2, DexText_ABCMode}, + {DexText_ListByHeavyToLightest, DexText_HeaviestMode}, + {DexText_ListByLightToHeaviest, DexText_LightestMode}, + {DexText_ListByTallToSmallest, DexText_TallestMode}, + {DexText_ListBySmallToTallest, DexText_SmallestMode}, + {NULL, NULL}, +}; +static const struct UnknownStruct2 gUnknown_083B5910[] = +{ + {DexText_Terminator5, DexText_DontSpecify}, + {DexText_Terminator5, DexText_ABC}, + {DexText_Terminator5, DexText_DEF}, + {DexText_Terminator5, DexText_GHI}, + {DexText_Terminator5, DexText_JKL}, + {DexText_Terminator5, DexText_MNO}, + {DexText_Terminator5, DexText_PQR}, + {DexText_Terminator5, DexText_STU}, + {DexText_Terminator5, DexText_VWX}, + {DexText_Terminator5, DexText_YZ}, + {NULL, NULL}, +}; +static const struct UnknownStruct2 gUnknown_083B5968[] = +{ + {DexText_Terminator5, DexText_DontSpecify}, + {DexText_Terminator5, DexText_Red}, + {DexText_Terminator5, DexText_Blue}, + {DexText_Terminator5, DexText_Yellow}, + {DexText_Terminator5, DexText_Green}, + {DexText_Terminator5, DexText_Black}, + {DexText_Terminator5, DexText_Brown}, + {DexText_Terminator5, DexText_Purple}, + {DexText_Terminator5, DexText_Gray}, + {DexText_Terminator5, DexText_White}, + {DexText_Terminator5, DexText_Pink}, + {NULL, NULL}, +}; +static const struct UnknownStruct2 gUnknown_083B59C8[] = +{ + {DexText_Terminator5, DexText_None}, + {DexText_Terminator5, gTypeNames[TYPE_NORMAL]}, + {DexText_Terminator5, gTypeNames[TYPE_FIGHTING]}, + {DexText_Terminator5, gTypeNames[TYPE_FLYING]}, + {DexText_Terminator5, gTypeNames[TYPE_POISON]}, + {DexText_Terminator5, gTypeNames[TYPE_GROUND]}, + {DexText_Terminator5, gTypeNames[TYPE_ROCK]}, + {DexText_Terminator5, gTypeNames[TYPE_BUG]}, + {DexText_Terminator5, gTypeNames[TYPE_GHOST]}, + {DexText_Terminator5, gTypeNames[TYPE_STEEL]}, + {DexText_Terminator5, gTypeNames[TYPE_FIRE]}, + {DexText_Terminator5, gTypeNames[TYPE_WATER]}, + {DexText_Terminator5, gTypeNames[TYPE_GRASS]}, + {DexText_Terminator5, gTypeNames[TYPE_ELECTRIC]}, + {DexText_Terminator5, gTypeNames[TYPE_PSYCHIC]}, + {DexText_Terminator5, gTypeNames[TYPE_ICE]}, + {DexText_Terminator5, gTypeNames[TYPE_DRAGON]}, + {DexText_Terminator5, gTypeNames[TYPE_DARK]}, + {NULL, NULL}, +}; +static const u8 gUnknown_083B5A60[] = {0, 1}; +static const u8 gUnknown_083B5A62[] = {0, 1, 2, 3, 4, 5}; +static const u8 gUnknown_083B5A68[] = {0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17}; +static const struct UnknownStruct1 gUnknown_083B5A7C[] = +{ + {gUnknown_083B5910, 6, 7, 10}, + {gUnknown_083B5968, 8, 9, 11}, + {gUnknown_083B59C8, 10, 11, 18}, + {gUnknown_083B59C8, 12, 13, 18}, + {gUnknown_083B58D8, 4, 5, 6}, + {gUnknown_083B58C0, 2, 3, 2}, +}; +static const u8 gUnknown_083B5AAC[] = _("{STR_VAR_1}{CLEAR_TO 43}"); +static const u8 gUnknown_083B5AB2[] = _("{STR_VAR_1}{CLEAR_TO 96}"); + +static void MainCB(void); +static void Task_PokedexShowMainScreen(u8 taskId); +static void Task_PokedexMainScreen(u8 taskId); +static void sub_808C898(u8 taskId); +static void Task_PokedexMainScreenMenu(u8 taskId); +static void sub_808CA64(u8 taskId); +static void sub_808CAE4(u8 taskId); +static void sub_808CB8C(u8 taskId); +static void Task_ClosePokedex(u8 taskId); +static void sub_808CCC4(u8 taskId); +static void Task_PokedexResultsScreen(u8 taskId); +static void sub_808CEF8(u8 taskId); +static void Task_PokedexResultsScreenMenu(u8 taskId); +static void sub_808D118(u8 taskId); +static void sub_808D198(u8 taskId); +static void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId); +static void Task_PokedexResultsScreenExitPokedex(u8 taskId); +static bool8 sub_808D344(u8 a); +static void sub_808D640(void); +static void SortPokedex(u8 dexMode, u8 sortMode); +static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d); +static void sub_808DF88(u16 a, u8 b, u8 c, u16 d); +static u8 sub_808DFE4(u16 num, u8 b, u8 c); +static void sub_808E090(u8 a, u8 b, u16 c); +static void sub_808E0CC(u16 a, u16 b); +static bool8 sub_808E208(u8 a, u8 b, u8 c); +static u16 sub_808E48C(u16 a, u16 b); +static void sub_808E6BC(void); +static u8 sub_808E71C(void); +static u8 sub_808E82C(void); +static u16 sub_808E888(u16 a1); +static u32 sub_808E8C8(u16 a, s16 b, s16 c); +static void sub_808E978(u8 a); +static void sub_808EDB8(struct Sprite *sprite); +static void sub_808EE28(struct Sprite *sprite); +static u8 sub_808F210(struct PokedexListItem *, u8); +static bool8 sub_808F250(u8 taskId); +static u8 sub_808F284(struct PokedexListItem *, u8); +static void Task_InitPageScreenMultistep(u8 taskId); +static void Task_PageScreenProcessInput(u8 taskId); +static void sub_808F888(u8 taskId); +static void Task_ClosePageScreen(u8 taskId); +static void Task_InitAreaScreenMultistep(u8 taskId); +static void Task_AreaScreenProcessInput(u8 taskId); +static void sub_808FA00(u8 taskId); +static void Task_InitCryScreenMultistep(u8 taskId); +static void Task_CryScreenProcessInput(u8 taskId); +static void sub_808FFBC(u8 taskId); +static void sub_8090040(u8 a); +static void Task_InitSizeScreenMultistep(u8 taskId); +static void Task_SizeScreenProcessInput(u8 taskId); +static void sub_8090498(u8 taskId); +static void sub_80904FC(u16 a); +static void sub_8090540(u16 a); +static void sub_8090584(u8 a, u16 b); +static void sub_8090644(u8 a, u16 b); +static void sub_8090750(u8); +static void sub_8090A3C(u8); +static void sub_8090B8C(u8); +static void sub_8090C28(struct Sprite *); +static void sub_8090C68(void); +static void sub_8091060(u16); +static void sub_8091154(u16 order, u8, u8); +static u8 sub_80911C8(u16 num, u8, u8); +static u8 sub_8091260(u16 num, u8, u8, u8); +static void sub_8091304(const u8 *name, u8, u8); +static void sub_8091458(u16 height, u8 i, u8 i1); +static void sub_8091564(u16 weight, u8 i, u8 i1); +static void sub_8091738(u16, u16, u16); +static void sub_80917CC(u16 i, u16 i1); +static u16 sub_8091818(u8, u16, u16, u16); +static u16 sub_80918EC(u16 a, s16 b, s16 c, u16 d); +static u8 sub_8091A4C(u16 gender, s16, s16, u16); +static void sub_8091E54(u8); +static void sub_809204C(u8); +static void sub_809207C(u8); +static void sub_809217C(u8); +static void sub_80921B0(u8); +static void sub_80923FC(u8); +static void sub_80924A4(u8); +static void sub_8092508(u8); +static void sub_80925CC(u8); +static void sub_8092644(u8); +static void sub_80927B8(u8); +static void sub_80927F0(u8); +static void sub_8092AB0(u8); +static void sub_8092AD4(u8, u8); +static void sub_8092B68(u8); +static void sub_8092C8C(u8); +static void sub_8092D78(u8); +static u8 sub_8092E10(u8, u8); +static void sub_8092EB0(u8); +static void sub_809308C(u8); + + +void ResetPokedex(void) +{ + u16 i; + + gUnknown_0202FFB8 = 0; + gUnknown_0202FFBA = 0x40; + gUnknown_03005CE8 = 0; + gSaveBlock2.pokedex.unknown1 = 0; + gSaveBlock2.pokedex.order = 0; + gSaveBlock2.pokedex.nationalMagic = 0; + gSaveBlock2.pokedex.unknown2 = 0; + gSaveBlock2.pokedex.unownPersonality = 0; + gSaveBlock2.pokedex.spindaPersonality = 0; + gSaveBlock2.pokedex.unknown3 = 0; + DisableNationalPokedex(); + for (i = 0; i <= 51; i++) + { + gSaveBlock2.pokedex.owned[i] = 0; + gSaveBlock2.pokedex.seen[i] = 0; + gSaveBlock1.unk938[i] = 0; + gSaveBlock1.unk3A8C[i] = 0; + } +} + +void sub_808C0A0(void) +{ + gUnknown_0202FFB8 = 0; + gUnknown_0202FFBA = 0x40; +} + +static void sub_808C0B8(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void ClearPokedexView(struct PokedexView *pokedexView) +{ + u16 i; + + for (i = 0; i < NATIONAL_DEX_COUNT; i++) + { + pokedexView->unk0[i].dexNum |= 0xFFFF; + pokedexView->unk0[i].seen = 0; + pokedexView->unk0[i].owned = 0; + } + pokedexView->unk608 = 0; + pokedexView->unk60A_1 = 0; + pokedexView->unk60A_2 = 0; + pokedexView->pokemonListCount = 0; + pokedexView->selectedPokemon = 0; + pokedexView->unk610 = 0; + pokedexView->dexMode = 0; + pokedexView->unk614 = 0; + pokedexView->dexOrder = 0; + pokedexView->unk618 = 0; + pokedexView->unk61A = 0; + pokedexView->unk61C = 0; + for (i = 0; i <= 3; i++) + pokedexView->unk61E[i] |= 0xFFFF; + pokedexView->unk628 = 0; + pokedexView->unk62A = 0; + pokedexView->unk62C = 0; + pokedexView->unk62D = 0; + pokedexView->unk62E = 0; + pokedexView->unk62F = 0; + pokedexView->unk630 = 0; + pokedexView->unk632 = 0; + pokedexView->unk634 = 0; + pokedexView->unk636 = 0; + pokedexView->unk638 = 0; + for (i = 0; i <= 3; i++) + pokedexView->unk63A[i] = 0; + pokedexView->unk64A = 0; + pokedexView->unk64B = 0; + pokedexView->unk64C_1 = 0; + pokedexView->selectedScreen = 0; + pokedexView->unk64F = 0; + pokedexView->menuIsOpen = 0; + pokedexView->menuCursorPos = 0; + pokedexView->menuY = 0; + for (i = 0; i <= 7; i++) + pokedexView->unk656[i] = 0; + for (i = 0; i <= 7; i++) + pokedexView->unk65E[i] = 0; +} + +void CB2_InitPokedex(void) +{ + switch (gMain.state) + { + case 0: + default: + { + u8 *addr; + u32 size; + + SetVBlankCallback(NULL); + sub_8091060(0); + addr = (u8 *)VRAM; + size = VRAM_SIZE; + while (1) + { + DmaFill16(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill16(3, 0, addr, size); + break; + } + } + DmaClear32(3, OAM, OAM_SIZE); + DmaClear16(3, PLTT, PLTT_SIZE); + gMain.state = 1; + } + break; + case 1: + remove_some_task(); + ResetTasks(); + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 8; + SetUpWindowConfig(&gWindowConfig_81E7048); + InitMenuWindow(&gWindowConfig_81E7048); + gMain.state++; + break; + case 2: + switch (Random() & 3) + { + case 0: + default: + gPokedexView = (struct PokedexView *)0x02018000; + break; + case 1: + gPokedexView = (struct PokedexView *)0x02018800; + break; + case 2: + gPokedexView = (struct PokedexView *)0x02019000; + break; + case 3: + gPokedexView = (struct PokedexView *)0x02019800; + break; + } + ClearPokedexView(gPokedexView); + CreateTask(Task_PokedexShowMainScreen, 0); + gPokedexView->dexMode = gSaveBlock2.pokedex.unknown1; + if (!IsNationalPokedexEnabled()) + gPokedexView->dexMode = DEX_MODE_HOENN; + gPokedexView->dexOrder = gSaveBlock2.pokedex.order; + gPokedexView->selectedPokemon = gUnknown_0202FFB8; + gPokedexView->unk62C = gUnknown_0202FFBA; + gPokedexView->selectedScreen = PAGE_SCREEN; + gPokedexView->descriptionPageNum = 0; + if (!IsNationalPokedexEnabled()) + { + gPokedexView->unk61A = GetHoennPokedexCount(0); + gPokedexView->unk61C = GetHoennPokedexCount(1); + } + else + { + gPokedexView->unk61A = GetNationalPokedexCount(0); + gPokedexView->unk61C = GetNationalPokedexCount(1); + } + gPokedexView->unk62D = 8; + gMain.state++; + break; + case 3: + { + u16 savedIme; + + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= 1; + REG_IME = savedIme; + REG_DISPSTAT |= 8; + SetVBlankCallback(sub_808C0B8); + SetMainCallback2(MainCB); + SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder); + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x80); + } + break; + } +} + +u8 unref_sub_808C540(void (*func)(u8)) +{ + u16 savedIme; + u8 taskId; + + SetVBlankCallback(NULL); + sub_8091060(0x200); + remove_some_task(); + ResetTasks(); + ResetPaletteFade(); + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= 1; + REG_IME = savedIme; + REG_DISPSTAT |= 0x8; + SetVBlankCallback(sub_808C0B8); + SetMainCallback2(MainCB); + if (!gPokedexView->unk64B) + taskId = CreateTask(sub_808CAE4, 0); + else + taskId = CreateTask(sub_808D198, 0); + gTasks[taskId].data[0] = CreateTask(func, 0); + return gTasks[taskId].data[0]; +} + +static void MainCB(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void Task_PokedexShowMainScreen(u8 taskId) +{ + gPokedexView->unk64C_1 = 0; + if (sub_808D344(0)) + gTasks[taskId].func = Task_PokedexMainScreen; +} + +//Hide menu and process input on main screen +void Task_PokedexMainScreen(u8 taskId) +{ + REG_BG0VOFS = gPokedexView->menuY; + + //If menu is open, slide it down, off screen + if (gPokedexView->menuY) + gPokedexView->menuY -= 8; + else + { + if ((gMain.newKeys & A_BUTTON) && gPokedexView->unk0[gPokedexView->selectedPokemon].seen) + { + sub_808E6BC(); + BeginNormalPaletteFade( + ~(1 << (gSprites[gPokedexView->selectedMonSpriteId].oam.paletteNum + 16)), + 0, 0, 0x10, 0); + gSprites[gPokedexView->selectedMonSpriteId].callback = sub_808EDB8; + gTasks[taskId].func = sub_808CA64; + PlaySE(SE_PIN); + } + else if (gMain.newKeys & START_BUTTON) + { + //Open menu + gPokedexView->menuY = 0; + gPokedexView->menuIsOpen = 1; + gPokedexView->menuCursorPos = 0; + gTasks[taskId].func = Task_PokedexMainScreenMenu; + PlaySE(SE_SELECT); + } + else if (gMain.newKeys & SELECT_BUTTON) + { + PlaySE(SE_SELECT); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = sub_8091E3C(); + gPokedexView->unk64F = 0; + gPokedexView->unk62A = gPokedexView->unk62C; + gPokedexView->unk610 = gPokedexView->selectedPokemon; + gPokedexView->unk614 = gPokedexView->dexMode; + gPokedexView->unk618 = gPokedexView->dexOrder; + gTasks[taskId].func = sub_808CB8C; + PlaySE(SE_PC_LOGON); + } + else if (gMain.newKeys & B_BUTTON) + { + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskId].func = Task_ClosePokedex; + PlaySE(SE_PC_OFF); + } + else + { + //Handle D-pad + gPokedexView->selectedPokemon = sub_808E48C(gPokedexView->selectedPokemon, 0xE); + if (gPokedexView->unk62E) + gTasks[taskId].func = sub_808C898; + } + } +} + +static void sub_808C898(u8 taskId) +{ + if (sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636)) + gTasks[taskId].func = Task_PokedexMainScreen; +} + +//Bring up menu and process menu input +static void Task_PokedexMainScreenMenu(u8 taskId) +{ + REG_BG0VOFS = gPokedexView->menuY; + + //If menu is not open, slide it up, on screen + if (gPokedexView->menuY != 80) + gPokedexView->menuY += 8; + else + { + if (gMain.newKeys & A_BUTTON) + { + switch (gPokedexView->menuCursorPos) + { + case 0: //BACK TO LIST + default: + gMain.newKeys |= START_BUTTON; //Exit menu + break; + case 1: //LIST TOP + gPokedexView->selectedPokemon = 0; + gPokedexView->unk62C = 0x40; + sub_808E82C(); + sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + gMain.newKeys |= START_BUTTON; //Exit menu + break; + case 2: //LIST BOTTOM + gPokedexView->selectedPokemon = gPokedexView->pokemonListCount - 1; + gPokedexView->unk62C = gPokedexView->pokemonListCount * 16 + 0x30; + sub_808E82C(); + sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + gMain.newKeys |= START_BUTTON; //Exit menu + break; + case 3: //CLOSE POKEDEX + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskId].func = Task_ClosePokedex; + PlaySE(SE_PC_OFF); + break; + } + } + + //Exit menu when Start or B is pressed + if (gMain.newKeys & (START_BUTTON | B_BUTTON)) + { + gPokedexView->menuIsOpen = 0; + gTasks[taskId].func = Task_PokedexMainScreen; + PlaySE(SE_SELECT); + } + else if ((gMain.newAndRepeatedKeys & DPAD_UP) && gPokedexView->menuCursorPos != 0) + { + gPokedexView->menuCursorPos--; + PlaySE(SE_SELECT); + } + else if ((gMain.newAndRepeatedKeys & DPAD_DOWN) && gPokedexView->menuCursorPos <= 2) + { + gPokedexView->menuCursorPos++; + PlaySE(SE_SELECT); + } + } +} + +static void sub_808CA64(u8 taskId) +{ + if (gSprites[gPokedexView->selectedMonSpriteId].pos1.x == 48 + && gSprites[gPokedexView->selectedMonSpriteId].pos1.y == 56) + { + gPokedexView->unk64B = gPokedexView->unk64A; + gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId); + gTasks[taskId].func = sub_808CAE4; + } +} + +static void sub_808CAE4(u8 taskId) +{ + if (gTasks[gTasks[taskId].data[0]].isActive) + { + if (gPokedexView->unk64A == 1 && !sub_808F250(gTasks[taskId].data[0]) && sub_808E71C()) + sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]); + } + else + { + gUnknown_0202FFB8 = gPokedexView->selectedPokemon; + gUnknown_0202FFBA = gPokedexView->unk62C; + gTasks[taskId].func = Task_PokedexShowMainScreen; + } +} + +static void sub_808CB8C(u8 taskId) +{ + bool8 isActive = gTasks[gTasks[taskId].data[0]].isActive; + + if (!isActive) + { + if (gPokedexView->unk64F != 0) + { + gPokedexView->selectedPokemon = isActive; + gPokedexView->unk62C = 0x40; + gTasks[taskId].func = sub_808CCC4; + } + else + { + gPokedexView->unk62C = gPokedexView->unk62A; + gPokedexView->selectedPokemon = gPokedexView->unk610; + gPokedexView->dexMode = gPokedexView->unk614; + if (!IsNationalPokedexEnabled()) + gPokedexView->dexMode = DEX_MODE_HOENN; + gPokedexView->dexOrder = gPokedexView->unk618; + gTasks[taskId].func = Task_PokedexShowMainScreen; + } + } +} + +static void Task_ClosePokedex(u8 taskId) +{ + if (!gPaletteFade.active) + { + gSaveBlock2.pokedex.unknown1 = gPokedexView->dexMode; + if (!IsNationalPokedexEnabled()) + gSaveBlock2.pokedex.unknown1 = 0; + gSaveBlock2.pokedex.order = gPokedexView->dexOrder; + DestroyTask(taskId); + SetMainCallback2(sub_805469C); + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); + } +} + +static void sub_808CCC4(u8 taskId) +{ + gPokedexView->unk64C_1 = 1; + if (sub_808D344(3)) + gTasks[taskId].func = Task_PokedexResultsScreen; +} + +static void Task_PokedexResultsScreen(u8 taskId) +{ + REG_BG0VOFS = gPokedexView->menuY; + + if (gPokedexView->menuY) + { + gPokedexView->menuY -= 8; + } + else + { + if ((gMain.newKeys & A_BUTTON) && gPokedexView->unk0[gPokedexView->selectedPokemon].seen) + { + u32 a; + + sub_808E6BC(); + a = (1 << (gSprites[gPokedexView->selectedMonSpriteId].oam.paletteNum + 16)); + gSprites[gPokedexView->selectedMonSpriteId].callback = sub_808EDB8; + BeginNormalPaletteFade(~a, 0, 0, 0x10, 0); + gTasks[taskId].func = sub_808D118; + PlaySE(SE_PIN); + } + else if (gMain.newKeys & START_BUTTON) + { + gPokedexView->menuY = 0; + gPokedexView->menuIsOpen = 1; + gPokedexView->menuCursorPos = 0; + gTasks[taskId].func = Task_PokedexResultsScreenMenu; + PlaySE(SE_SELECT); + } + else if (gMain.newKeys & SELECT_BUTTON) + { + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = sub_8091E3C(); + gPokedexView->unk64F = 0; + gTasks[taskId].func = sub_808CB8C; + PlaySE(SE_PC_LOGON); + } + else if (gMain.newKeys & B_BUTTON) + { + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskId].func = Task_PokedexResultsScreenReturnToMainScreen; + PlaySE(SE_PC_OFF); + } + else + { + //Handle D-pad + gPokedexView->selectedPokemon = sub_808E48C(gPokedexView->selectedPokemon, 0xE); + if (gPokedexView->unk62E) + gTasks[taskId].func = sub_808CEF8; + } + } +} + +static void sub_808CEF8(u8 taskId) +{ + if (sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636)) + gTasks[taskId].func = Task_PokedexResultsScreen; +} + +static void Task_PokedexResultsScreenMenu(u8 taskId) +{ + REG_BG0VOFS = gPokedexView->menuY; + + if (gPokedexView->menuY != 96) + { + gPokedexView->menuY += 8; + } + else + { + if (gMain.newKeys & A_BUTTON) + { + switch (gPokedexView->menuCursorPos) + { + case 0: //BACK TO LIST + default: + gMain.newKeys |= START_BUTTON; + break; + case 1: //LIST TOP + gPokedexView->selectedPokemon = 0; + gPokedexView->unk62C = 0x40; + sub_808E82C(); + sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + gMain.newKeys |= START_BUTTON; + break; + case 2: //LIST BOTTOM + gPokedexView->selectedPokemon = gPokedexView->pokemonListCount - 1; + gPokedexView->unk62C = gPokedexView->pokemonListCount * 16 + 0x30; + sub_808E82C(); + sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + gMain.newKeys |= START_BUTTON; + break; + case 3: //BACK TO POKEDEX + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskId].func = Task_PokedexResultsScreenReturnToMainScreen; + PlaySE(SE_TRACK_DOOR); + break; + case 4: //CLOSE POKEDEX + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskId].func = Task_PokedexResultsScreenExitPokedex; + PlaySE(SE_PC_OFF); + break; + } + } + + //Exit menu when Start or B is pressed + if (gMain.newKeys & (START_BUTTON | B_BUTTON)) + { + gPokedexView->menuIsOpen = 0; + gTasks[taskId].func = Task_PokedexResultsScreen; + PlaySE(SE_SELECT); + } + else if ((gMain.newAndRepeatedKeys & DPAD_UP) && gPokedexView->menuCursorPos) + { + gPokedexView->menuCursorPos--; + PlaySE(SE_SELECT); + } + else if ((gMain.newAndRepeatedKeys & DPAD_DOWN) && gPokedexView->menuCursorPos <= 3) + { + gPokedexView->menuCursorPos++; + PlaySE(SE_SELECT); + } + } +} + +static void sub_808D118(u8 taskId) +{ + if (gSprites[gPokedexView->selectedMonSpriteId].pos1.x == 48 + && gSprites[gPokedexView->selectedMonSpriteId].pos1.y == 56) + { + gPokedexView->unk64B = gPokedexView->unk64A; + gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId); + gTasks[taskId].func = sub_808D198; + } +} + +static void sub_808D198(u8 taskId) +{ + if (gTasks[gTasks[taskId].data[0]].isActive) + { + if (gPokedexView->unk64A == 1 && !sub_808F250(gTasks[taskId].data[0]) && sub_808E71C()) + sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]); + } + else + { + gTasks[taskId].func = sub_808CCC4; + } +} + +static void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId) +{ + if (!gPaletteFade.active) + { + gPokedexView->unk62C = gPokedexView->unk62A; + gPokedexView->selectedPokemon = gPokedexView->unk610; + gPokedexView->dexMode = gPokedexView->unk614; + if (!IsNationalPokedexEnabled()) + gPokedexView->dexMode = DEX_MODE_HOENN; + gPokedexView->dexOrder = gPokedexView->unk618; + gTasks[taskId].func = Task_PokedexShowMainScreen; + } +} + +static void Task_PokedexResultsScreenExitPokedex(u8 taskId) +{ + if (!gPaletteFade.active) + { + gPokedexView->unk62C = gPokedexView->unk62A; + gPokedexView->selectedPokemon = gPokedexView->unk610; + gPokedexView->dexMode = gPokedexView->unk614; + if (!IsNationalPokedexEnabled()) + gPokedexView->dexMode = DEX_MODE_HOENN; + gPokedexView->dexOrder = gPokedexView->unk618; + gTasks[taskId].func = Task_ClosePokedex; + } +} + +static bool8 sub_808D344(u8 a) +{ + switch (gMain.state) + { + case 0: + default: + if (gPaletteFade.active) + return 0; + SetVBlankCallback(NULL); + gPokedexView->unk64A = a; + sub_8091060(0); + REG_BG2VOFS = gPokedexView->unk62D; + LZ77UnCompVram(gPokedexMenu_Gfx, (void *)(VRAM)); + LZ77UnCompVram(gUnknown_08E96738, (void *)(VRAM + 0x6800)); + LZ77UnCompVram(gUnknown_08E9C6DC, (void *)(VRAM + 0x7800)); + DmaClear16(3, VRAM + 0x6000, 0x500); + if (a == 0) + LZ77UnCompVram(gUnknown_08E96888, (void *)(VRAM + 0x6500)); + else + LZ77UnCompVram(gUnknown_08E96994, (void *)(VRAM + 0x6500)); + ResetPaletteFade(); + if (a == 0) + gPokedexView->unk64C_1 = 0; + else + gPokedexView->unk64C_1 = 1; + sub_808D640(); + gMain.state = 1; + break; + case 1: + ResetSpriteData(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 8; + LoadCompressedObjectPic(&gUnknown_083A05CC[0]); + LoadSpritePalettes(gUnknown_083A05DC); + sub_808E978(a); + gMain.state++; + break; + case 2: + SetUpWindowConfig(&gWindowConfig_81E7048); + InitMenuWindow(&gWindowConfig_81E7048); + LZ77UnCompVram(gUnknown_0839FA7C, (void *)(VRAM + 0xFF80)); + gMain.state++; + break; + case 3: + if (a == 0) + SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder); + sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + gPokedexView->menuIsOpen = 0; + gPokedexView->menuY = 0; + gMain.state++; + break; + case 4: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + SetVBlankCallback(sub_808C0B8); + gMain.state++; + break; + case 5: + REG_WININ = 0x3F3F; + REG_WINOUT = 0x1D3F; + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WIN1H = 0; + REG_WIN1V = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(12) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_OBJWIN_ON; + gMain.state++; + break; + case 6: + if (!gPaletteFade.active) + { + gMain.state = 0; + return TRUE; + } + break; + } + return FALSE; +} + +static void sub_808D640(void) +{ + if (gPokedexView->unk64C_1) + LoadPalette(sPokedexSearchPalette + 1, 1, sizeof(sPokedexSearchPalette) - sizeof(u16)); + else if (!IsNationalPokedexEnabled()) + LoadPalette(gPokedexMenu_Pal + 1, 1, 0xBE); + else + LoadPalette(sNationalPokedexPalette + 1, 1, sizeof(sNationalPokedexPalette) - sizeof(u16)); +} + +static void SortPokedex(u8 dexMode, u8 sortMode) +{ + u16 vars[3]; //I have no idea why three regular variables are stored in an array, but whatever. + s16 i; + + gPokedexView->pokemonListCount = 0; + + switch (dexMode) + { + default: + case DEX_MODE_HOENN: + vars[0] = 202; + vars[1] = 1; + break; + case DEX_MODE_NATIONAL: + if (IsNationalPokedexEnabled()) + { + vars[0] = NATIONAL_DEX_COUNT; + vars[1] = 0; + } + else + { + vars[0] = 202; + vars[1] = 1; + } + break; + } + + switch (sortMode) + { + case 0: + if (vars[1]) + { + for (i = 0; i < vars[0]; i++) + { + vars[2] = HoennToNationalOrder(i + 1); + gPokedexView->unk0[i].dexNum = vars[2]; + gPokedexView->unk0[i].seen = GetNationalPokedexFlag(vars[2], 0); + gPokedexView->unk0[i].owned = GetNationalPokedexFlag(vars[2], 1); + if (gPokedexView->unk0[i].seen) + gPokedexView->pokemonListCount = i + 1; + } + } + else + { + bool32 r10; + s16 r5; + + r10 = r5 = i = 0; + for (i = 0; i < vars[0]; i++) + { + vars[2] = i + 1; + if (GetNationalPokedexFlag(vars[2], 0)) + r10 = 1; + if (r10) + { + asm(""); //Needed to match for some reason + gPokedexView->unk0[r5].dexNum = vars[2]; + gPokedexView->unk0[r5].seen = GetNationalPokedexFlag(vars[2], 0); + gPokedexView->unk0[r5].owned = GetNationalPokedexFlag(vars[2], 1); + if (gPokedexView->unk0[r5].seen) + gPokedexView->pokemonListCount = r5 + 1; + r5++; + } + } + } + break; + case 1: + for (i = 0; i < 411; i++) + { + vars[2] = gPokedexOrder_Alphabetical[i]; + + if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 0)) + { + gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->unk0[gPokedexView->pokemonListCount].owned = GetNationalPokedexFlag(vars[2], 1); + gPokedexView->pokemonListCount++; + } + } + break; + case 2: + for (i = NATIONAL_DEX_COUNT - 1; i >= 0; i--) + { + vars[2] = gPokedexOrder_Weight[i]; + + if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1)) + { + gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; + gPokedexView->pokemonListCount++; + } + } + break; + case 3: + for (i = 0; i < NATIONAL_DEX_COUNT; i++) + { + vars[2] = gPokedexOrder_Weight[i]; + + if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1)) + { + gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; + gPokedexView->pokemonListCount++; + } + } + break; + case 4: + for (i = NATIONAL_DEX_COUNT - 1; i >=0; i--) + { + vars[2] = gPokedexOrder_Height[i]; + + if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1)) + { + gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; + gPokedexView->pokemonListCount++; + } + } + break; + case 5: + for (i = 0; i < NATIONAL_DEX_COUNT; i++) + { + vars[2] = gPokedexOrder_Height[i]; + + if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1)) + { + gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; + gPokedexView->pokemonListCount++; + } + } + break; + } + + for (i = gPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++) + { + gPokedexView->unk0[i].dexNum |= 0xFFFF; + gPokedexView->unk0[i].seen = 0; + gPokedexView->unk0[i].owned = 0; + } +} + +static void sub_808DBE8(u8 a, u16 b, u16 c) +{ + s16 _b; + u16 i; + u16 r2; + + switch (a) + { + case 0: + default: + _b = b - 5; + for (i = 0; i <= 10; i++) + { + if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF) + { + sub_808E090(0x11, i * 2, c); + } + else + { + sub_808E090(0x11, i * 2, c); + if (gPokedexView->unk0[_b].seen) + { + sub_808DEB0(_b, 0x12, i * 2, c); + sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, i * 2, c); + sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, i * 2); + } + else + { + sub_808DEB0(_b, 0x12, i * 2, c); + sub_808DF88(0, 0x11, i * 2, c); + sub_808DFE4(0, 0x17, i * 2); + } + } + _b++; + } + break; + case 1: + _b = b - 5; + if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF) + { + sub_808E090(0x11, gPokedexView->unk630 * 2, c); + } + else + { + sub_808E090(0x11, gPokedexView->unk630 * 2, c); + if (gPokedexView->unk0[_b].seen) + { + sub_808DEB0(_b, 0x12, gPokedexView->unk630 * 2, c); + sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, gPokedexView->unk630 * 2, c); + sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, gPokedexView->unk630 * 2); + } + else + { + sub_808DEB0(_b, 0x12, gPokedexView->unk630 * 2, c); + sub_808DF88(0, 0x11, gPokedexView->unk630 * 2, c); + sub_808DFE4(0, 0x17, gPokedexView->unk630 * 2); + } + } + break; + case 2: + _b = b + 5; + r2 = gPokedexView->unk630 + 10; + if (r2 > 15) + r2 -= 16; + if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF) + sub_808E090(0x11, r2 * 2, c); + else + { + sub_808E090(0x11, r2 * 2, c); + if (gPokedexView->unk0[_b].seen) + { + sub_808DEB0(_b, 0x12, r2 * 2, c); + sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, r2 * 2, c); + sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, r2 * 2); + } + else + { + sub_808DEB0(_b, 0x12, r2 * 2, c); + sub_808DF88(0, 0x11, r2 * 2, c); + sub_808DFE4(0, 0x17, r2 * 2); + } + } + break; + } +} + +static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d) +{ + u8 text[4]; + u16 unk[2]; + u16 r7 = gPokedexView->unk0[a].dexNum; + + if (gPokedexView->dexMode == DEX_MODE_HOENN) + r7 = NationalToHoennOrder(r7); + unk[0] = 0x3FC; + unk[1] = 0x3FD; + text[0] = CHAR_0 + r7 / 100; + text[1] = CHAR_0 + (r7 % 100) / 10; + text[2] = CHAR_0 + (r7 % 100) % 10; + text[3] = EOS; + *(u16 *)(VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0]; + *(u16 *)(VRAM + d * 0x800 + (c + 1) * 0x40 + b * 2) = unk[1]; + MenuPrint(text, b - 15, c); +} + +static void sub_808DF88(u16 a, u8 b, u8 c, u16 d) +{ + u16 unk[2]; + + if (a) + { + unk[0] = 0x3FE; + unk[1] = 0x3FF; + } + else + { + unk[0] = 0; + unk[1] = 0; + } + *(u16 *)(VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0]; + *(u16 *)(VRAM + d * 0x800 + (c + 1) * 0x40 + b * 2) = unk[1]; +} + +static u8 sub_808DFE4(u16 num, u8 b, u8 c) +{ + u8 text[10]; + u8 i; + + for (i = 0; i < 10; i++) + text[i] = CHAR_SPACE; + text[i] = EOS; + + num = NationalPokedexNumToSpecies(num); + switch (num) + { + default: + for (i = 0; gSpeciesNames[num][i] != EOS && i < 10; i++) + text[i] = gSpeciesNames[num][i]; + break; + case 0: + for (i = 0; i < 10; i++) + text[i] = CHAR_HYPHEN; + break; + } + MenuPrint_PixelCoords(text, (b - 0x11) * 8 + 0xFC, c * 8, 0); + return i; +} + +static void sub_808E090(u8 a, u8 b, u16 c) +{ + u8 i; + + for (i = 0; i < 12; i++) + { + *(u16 *)(VRAM + c * 0x800 + b * 64 + (a + i) * 2) = 0; + *(u16 *)(VRAM + c * 0x800 + (b + 1) * 64 + (a + i) * 2) = 0; + } +} + +static void sub_808E0CC(u16 a, u16 b) +{ + u8 i; + u16 unk; + u8 spriteId; + + for (i = 0; i < 4; i++) + gPokedexView->unk61E[i] = 0xFFFF; + gPokedexView->selectedMonSpriteId = 0xFFFF; + sub_808DBE8(0, a, b); + REG_BG2VOFS = gPokedexView->unk62D; + + unk = sub_808E888(a - 1); + if (unk != 0xFFFF) + { + spriteId = sub_808E8C8(unk, 0x60, 0x50); + gSprites[spriteId].callback = sub_808EE28; + gSprites[spriteId].data5 = -32; + } + + unk = sub_808E888(a); + if (unk != 0xFFFF) + { + spriteId = sub_808E8C8(unk, 0x60, 0x50); + gSprites[spriteId].callback = sub_808EE28; + gSprites[spriteId].data5 = 0; + } + + unk = sub_808E888(a + 1); + if (unk != 0xFFFF) + { + spriteId = sub_808E8C8(unk, 0x60, 0x50); + gSprites[spriteId].callback = sub_808EE28; + gSprites[spriteId].data5 = 32; + } + + gPokedexView->unk630 = 0; + gPokedexView->unk632 = 0; +} + +static bool8 sub_808E208(u8 a, u8 b, u8 c) +{ + u16 i; + u8 foo; + + if (gPokedexView->unk62E) + { + gPokedexView->unk62E--; + switch (a) + { + case 1: + for (i = 0; i < 4; i++) + { + if (gPokedexView->unk61E[i] != 0xFFFF) + gSprites[gPokedexView->unk61E[i]].data5 += b; + } + foo = 16 * (c - gPokedexView->unk62E) / c; + REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 - foo; + gPokedexView->unk62C -= gPokedexView->unk628; + break; + case 2: + for (i = 0; i < 4; i++) + { + if (gPokedexView->unk61E[i] != 0xFFFF) + gSprites[gPokedexView->unk61E[i]].data5 -= b; + } + foo = 16 * (c - gPokedexView->unk62E) / c; + REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 + foo; + gPokedexView->unk62C += gPokedexView->unk628; + break; + } + return FALSE; + } + else + { + REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk630 * 16; + return TRUE; + } +} + +static void sub_808E398(u8 a, u16 b) +{ + u16 unk; + u8 spriteId; + + gPokedexView->unk632 = gPokedexView->unk630; + switch (a) + { + case 1: + unk = sub_808E888(b - 1); + if (unk != 0xFFFF) + { + spriteId = sub_808E8C8(unk, 0x60, 0x50); + gSprites[spriteId].callback = sub_808EE28; + gSprites[spriteId].data5 = -64; + } + if (gPokedexView->unk630 > 0) + gPokedexView->unk630--; + else + gPokedexView->unk630 = 15; + break; + case 2: + unk = sub_808E888(b + 1); + if (unk != 0xFFFF) + { + spriteId = sub_808E8C8(unk, 0x60, 0x50); + gSprites[spriteId].callback = sub_808EE28; + gSprites[spriteId].data5 = 0x40; + } + if (gPokedexView->unk630 <= 0xE) + gPokedexView->unk630++; + else + gPokedexView->unk630 = 0; + break; + } +} + +// Ugly, ugly, ugly. I couldn't get it to match otherwise. +static u16 sub_808E48C(u16 a, u16 b) +{ + u8 r3; + u8 r5; + u8 i; + u16 r6; + u8 r10 = 0; + + if (!((gMain.heldKeys & 0x40) && (a > 0))) + { + //_0808E4B6 + if (!((gMain.heldKeys & 0x80) && (a < gPokedexView->pokemonListCount - 1))) + //_0808E4CE + { + if ((gMain.newKeys & 0x20) && (a > 0)) + { + r6 = a; + //_0808E4E0 + for (i = 0; i < 7; i++) + a = sub_8091818(1, a, 0, gPokedexView->pokemonListCount - 1); + gPokedexView->unk62C += 16 * (a - r6); + sub_808E82C(); + sub_808E0CC(a, 0xE); + PlaySE(0x6D); + } + //_0808E53C + else if ((gMain.newKeys & 0x10) && (a < gPokedexView->pokemonListCount - 1)) + { + r6 = a; + for (i = 0; i < 7; i++) + a = sub_8091818(0, a, 0, gPokedexView->pokemonListCount - 1); + gPokedexView->unk62C += (a - r6) * 16; + sub_808E82C(); + sub_808E0CC(a, 0xE); + PlaySE(0x6D); + } + _0808E5A2: + if (r10 == 0) + { + gPokedexView->unk638 = 0; + return a; + } + } + else + { + // to _0808E5C4 + r10 = 2; + a = sub_8091818(0, a, 0, gPokedexView->pokemonListCount - 1); + sub_808E398(2, a); + //goto _0808E60E + sub_808DBE8(2, a, b); + PlaySE(0x6C); + goto _0808E5A2; + } + } + else + { + //to _0808E5E4 + r10 = 1; + a = sub_8091818(1, a, 0, gPokedexView->pokemonListCount - 1); + sub_808E398(1, a); + //_0808E60E + sub_808DBE8(1, a, b); + PlaySE(0x6C); + goto _0808E5A2; + } + //_0808E628 + r5 = gUnknown_083A05EC[gPokedexView->unk638 / 4]; + r3 = gUnknown_083A05F1[gPokedexView->unk638 / 4]; + gPokedexView->unk62E = r3; + gPokedexView->unk636 = r3; + gPokedexView->unk634 = r5; + gPokedexView->unk62F = r10; + gPokedexView->unk628 = r5 / 2; + sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636); + if (gPokedexView->unk638 <= 0xB) + gPokedexView->unk638++; + return a; +} + +static void sub_808E6BC(void) +{ + u16 i; + + for (i = 0; i < 4; i++) + { + u16 spriteId = gPokedexView->unk61E[i]; + + if (gSprites[spriteId].pos2.x == 0 && gSprites[spriteId].pos2.y == 0 && spriteId != 0xFFFF) + gPokedexView->selectedMonSpriteId = spriteId; + } +} + +static u8 sub_808E71C(void) +{ + u16 r2; + u16 r4 = gPokedexView->selectedPokemon; + + if ((gMain.newKeys & DPAD_UP) && r4) + { + r2 = r4; + while (r2 != 0) + { + r2 = sub_8091818(1, r2, 0, gPokedexView->pokemonListCount - 1); + + if (gPokedexView->unk0[r2].seen) + { + r4 = r2; + break; + } + } + + if (gPokedexView->selectedPokemon == r4) + return 0; + else + { + gPokedexView->selectedPokemon = r4; + gPokedexView->unk62C -= 16; + return 1; + } + } + else if ((gMain.newKeys & DPAD_DOWN) && r4 < gPokedexView->pokemonListCount - 1) + { + r2 = r4; + while (r2 < gPokedexView->pokemonListCount - 1) + { + r2 = sub_8091818(0, r2, 0, gPokedexView->pokemonListCount - 1); + + if (gPokedexView->unk0[r2].seen) + { + r4 = r2; + break; + } + } + + if (gPokedexView->selectedPokemon == r4) + return 0; + else + { + gPokedexView->selectedPokemon = r4; + gPokedexView->unk62C += 16; + return 1; + } + } + return 0; +} + +static u8 sub_808E82C(void) +{ + u16 i; + + for (i = 0; i < 4; i++) + { + if (gPokedexView->unk61E[i] != 0xFFFF) + { + DestroySprite(&gSprites[gPokedexView->unk61E[i]]); + gPokedexView->unk61E[i] |= 0xFFFF; + } + } + return 0; +} + +static u16 sub_808E888(u16 a1) +{ + if (a1 >= NATIONAL_DEX_COUNT || gPokedexView->unk0[a1].dexNum == 0xFFFF) + return 0xFFFF; + else if (gPokedexView->unk0[a1].seen) + return gPokedexView->unk0[a1].dexNum; + else + return 0; +} + +static u32 sub_808E8C8(u16 a, s16 b, s16 c) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + if (gPokedexView->unk61E[i] == 0xFFFF) + { + u8 spriteId = sub_80918EC(a, b, c, i); + + gSprites[spriteId].oam.affineMode = 1; + gSprites[spriteId].oam.priority = 3; + gSprites[spriteId].data0 = 0; + gSprites[spriteId].data1 = i; + gSprites[spriteId].data2 = NationalPokedexNumToSpecies(a); + gPokedexView->unk61E[i] = spriteId; + return spriteId; + } + } + return 0xFFFF; +} + +static void sub_808E978(u8 a) +{ + u8 spriteId; + u16 r5; + + spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0); + gSprites[spriteId].data1 = 0; + + spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 156, 0); + gSprites[spriteId].data1 = 1; + gSprites[spriteId].vFlip = TRUE; + + CreateSprite(&gSpriteTemplate_83A0524, 234, 20, 0); + CreateSprite(&gSpriteTemplate_83A0554, 16, 138, 0); + + spriteId = CreateSprite(&gSpriteTemplate_83A0554, 48, 138, 0); + StartSpriteAnim(&gSprites[spriteId], 3); + + spriteId = CreateSprite(&gSpriteTemplate_83A0554, 16, 158, 0); + StartSpriteAnim(&gSprites[spriteId], 2); + gSprites[spriteId].data2 = 0x80; + + spriteId = CreateSprite(&gSpriteTemplate_83A0554, 48, 158, 0); + StartSpriteAnim(&gSprites[spriteId], 1); + + spriteId = CreateSprite(&gSpriteTemplate_83A056C, 0, 80, 2); + gSprites[spriteId].oam.affineMode = 1; + gSprites[spriteId].oam.matrixNum = 30; + gSprites[spriteId].data0 = 0x1E; + gSprites[spriteId].data1 = 0; + + spriteId = CreateSprite(&gSpriteTemplate_83A056C, 0, 80, 2); + gSprites[spriteId].oam.affineMode = 1; + gSprites[spriteId].oam.matrixNum = 31; + gSprites[spriteId].data0 = 0x1F; + gSprites[spriteId].data1 = 0x80; + + if (a == 0) + { + u32 _a; + + CreateSprite(&gSpriteTemplate_83A0584, 32, 40, 1); + + spriteId = CreateSprite(&gSpriteTemplate_83A0584, 32, 72, 1); + StartSpriteAnim(&gSprites[spriteId], 1); + _a = 0; + + spriteId = CreateSprite(&gSpriteTemplate_83A059C, 28, 48, 1); + r5 = gPokedexView->unk61A / 100; + StartSpriteAnim(&gSprites[spriteId], r5); + if (r5 != 0) + _a = 1; + else + gSprites[spriteId].invisible = TRUE; + + spriteId = CreateSprite(&gSpriteTemplate_83A059C, 34, 48, 1); + r5 = (gPokedexView->unk61A % 100) / 10; + if (r5 != 0 || _a != 0) + StartSpriteAnim(&gSprites[spriteId], r5); + else + gSprites[spriteId].invisible = TRUE; + + spriteId = CreateSprite(&gSpriteTemplate_83A059C, 40, 48, 1); + r5 = (gPokedexView->unk61A % 100) % 10; + StartSpriteAnim(&gSprites[spriteId], r5); + _a = 0; + + spriteId = CreateSprite(&gSpriteTemplate_83A059C, 28, 80, 1); + r5 = gPokedexView->unk61C / 100; + StartSpriteAnim(&gSprites[spriteId], r5); + if (r5 != 0) + _a = 1; + else + gSprites[spriteId].invisible = TRUE; + + spriteId = CreateSprite(&gSpriteTemplate_83A059C, 34, 80, 1); + r5 = (gPokedexView->unk61C % 100) / 10; + if (r5 != 0 || _a != 0) + StartSpriteAnim(&gSprites[spriteId], r5); + else + gSprites[spriteId].invisible = TRUE; + + spriteId = CreateSprite(&gSpriteTemplate_83A059C, 40, 80, 1); + r5 = (gPokedexView->unk61C % 100) % 10; + StartSpriteAnim(&gSprites[spriteId], r5); + + spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 140, 96, 1); + gSprites[spriteId].invisible = TRUE; + } + else + { + spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 140, 80, 1); + gSprites[spriteId].invisible = TRUE; + } +} + +static void nullsub_58(struct Sprite *sprite) +{ +} + +static void sub_808ED94(struct Sprite *sprite) +{ + if (gPokedexView->unk64A != 0) + DestroySprite(sprite); +} + +//Move Pokemon into position for description page +static void sub_808EDB8(struct Sprite *sprite) +{ + sprite->oam.priority = 0; + sprite->oam.affineMode = 0; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + if (sprite->pos1.x != 48 || sprite->pos1.y != 56) + { + if (sprite->pos1.x > 48) + sprite->pos1.x--; + if (sprite->pos1.x < 48) + sprite->pos1.x++; + + if (sprite->pos1.y > 56) + sprite->pos1.y--; + if (sprite->pos1.y < 56) + sprite->pos1.y++; + } + else + { + sprite->callback = nullsub_58; + } +} + +static void sub_808EE28(struct Sprite *sprite) +{ + u8 data1 = sprite->data1; + + if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + { + DestroySprite(sprite); + gPokedexView->unk61E[data1] = 0xFFFF; + } + else + { + u32 var; + + sprite->pos2.y = gSineTable[(u8)sprite->data5] * 76 / 256; + var = 0x10000 / gSineTable[sprite->data5 + 0x40]; + if (var > 0xFFFF) + var = 0xFFFF; + SetOamMatrix(sprite->data1 + 1, 0x100, 0, 0, var); + sprite->oam.matrixNum = data1 + 1; + + if (sprite->data5 > -64 && sprite->data5 < 64) + { + sprite->invisible = FALSE; + sprite->data0 = 1; + } + else + { + sprite->invisible = TRUE; + } + + if ((sprite->data5 <= -64 || sprite->data5 >= 64) && sprite->data0 != 0) + { + DestroySprite(sprite); + gPokedexView->unk61E[data1] = 0xFFFF; + } + } +} + +static void sub_808EF38(struct Sprite *sprite) +{ + if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + DestroySprite(sprite); + else + sprite->pos2.y = gPokedexView->selectedPokemon * 120 / (gPokedexView->pokemonListCount - 1); +} + +static void sub_808EF8C(struct Sprite *sprite) +{ + if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + { + DestroySprite(sprite); + } + else + { + u8 r0; + + if (sprite->data1 != 0) + { + if (gPokedexView->selectedPokemon == gPokedexView->pokemonListCount - 1) + sprite->invisible = TRUE; + else + sprite->invisible = FALSE; + r0 = sprite->data2; + } + else + { + if (gPokedexView->selectedPokemon == 0) + sprite->invisible = TRUE; + else + sprite->invisible = FALSE; + r0 = sprite->data2 - 128; + } + sprite->pos2.y = gSineTable[r0] / 64; + sprite->data2 = sprite->data2 + 8; + if (gPokedexView->menuIsOpen == 0 && gPokedexView->menuY == 0 && sprite->invisible == 0) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + } +} + +static void sub_808F08C(struct Sprite *sprite) +{ + if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + DestroySprite(sprite); +} + +static void sub_808F0B4(struct Sprite *sprite) +{ + if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + { + DestroySprite(sprite); + } + else + { + u8 val; + s16 r3; + s16 r0; + + val = gPokedexView->unk62C + sprite->data1; + r3 = gSineTable[val]; + r0 = gSineTable[val + 0x40]; + SetOamMatrix(sprite->data0, r0, r3, -r3, r0); + + val = gPokedexView->unk62C + (sprite->data1 + 0x40); + r3 = gSineTable[val]; + r0 = gSineTable[val + 0x40]; + sprite->pos2.x = r0 * 40 / 256; + sprite->pos2.y = r3 * 40 / 256; + } +} + +static void sub_808F168(struct Sprite *sprite) +{ + if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + { + DestroySprite(sprite); + } + else + { + u16 r1 = gPokedexView->unk64A == 0 ? 80 : 96; + + if (gPokedexView->menuIsOpen != 0 && gPokedexView->menuY == r1) + { + sprite->invisible = FALSE; + sprite->pos2.y = gPokedexView->menuCursorPos * 16; + sprite->pos2.x = gSineTable[(u8)sprite->data2] / 64; + sprite->data2 += 8; + } + else + { + sprite->invisible = TRUE; + } + } +} + +static u8 sub_808F210(struct PokedexListItem *item, u8 b) +{ + u8 taskId; + + gUnknown_0202FFBC = item; + taskId = CreateTask(Task_InitPageScreenMultistep, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 1; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = b; + return taskId; +} + +static bool8 sub_808F250(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0 && gTasks[taskId].func == Task_PageScreenProcessInput) + return FALSE; + else + return TRUE; +} + +static u8 sub_808F284(struct PokedexListItem *item, u8 b) +{ + gUnknown_0202FFBC = item; + gTasks[b].data[0] = 1; + gTasks[b].data[1] = 0; + gTasks[b].data[2] = 0; + gTasks[b].data[3] = 0; + return b; +} + +#if ENGLISH +#define CATEGORY_LEFT (11) +#elif GERMAN +#define CATEGORY_LEFT (16) +#endif + +static void Task_InitPageScreenMultistep(u8 taskId) +{ + switch (gMain.state) + { + case 0: + default: + if (!gPaletteFade.active) + { + u16 r2; + + gPokedexView->unk64A = 1; + gPokedexView->descriptionPageNum = 0; + gUnknown_03005CEC = gMain.vblankCallback; + SetVBlankCallback(NULL); + r2 = 0; + if (gTasks[taskId].data[1] != 0) + r2 += 0x1000; + if (gTasks[taskId].data[2] != 0) + r2 |= 0x200; + sub_8091060(r2); + gMain.state = 1; + } + break; + case 1: + LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM); + LZ77UnCompVram(gUnknown_08E96BD4, (void *)(VRAM + 0x7800)); + sub_8091738(gUnknown_0202FFBC->dexNum, 2, 0x3FC); + gMain.state++; + break; + case 2: + sub_80904FC(0xD); + sub_8090584(gPokedexView->selectedScreen, 0xD); + sub_808D640(); + gMain.state++; + break; + case 3: + SetUpWindowConfig(&gWindowConfig_81E7064); + InitMenuWindow(&gWindowConfig_81E7064); + gMain.state++; + break; + case 4: + if (gPokedexView->dexMode == DEX_MODE_HOENN) + sub_8091154(NationalToHoennOrder(gUnknown_0202FFBC->dexNum), 0xD, 3); + else + sub_8091154(gUnknown_0202FFBC->dexNum, 0xD, 3); + sub_80911C8(gUnknown_0202FFBC->dexNum, 0x10, 3); + MenuPrint(gDexText_UnknownPoke, CATEGORY_LEFT, 5); + MenuPrint(gDexText_UnknownHeight, 16, 7); + MenuPrint(gDexText_UnknownWeight, 16, 9); + if (gUnknown_0202FFBC->owned) + { + sub_8091304(gPokedexEntries[gUnknown_0202FFBC->dexNum].categoryName, CATEGORY_LEFT, 5); + sub_8091458(gPokedexEntries[gUnknown_0202FFBC->dexNum].height, 16, 7); + sub_8091564(gPokedexEntries[gUnknown_0202FFBC->dexNum].weight, 16, 9); + MenuPrint(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13); + sub_80917CC(14, 0x3FC); + } + else + { + MenuPrint(gUnknown_083A05F8, 2, 13); + LoadPalette(gPlttBufferUnfaded + 1, 0x31, 0x1E); + } + gMain.state++; + break; + case 5: + if (gTasks[taskId].data[1] == 0) + { + gTasks[taskId].data[4] = (u16)sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0); + gSprites[gTasks[taskId].data[4]].oam.priority = 0; + } + gMain.state++; + break; + case 6: + { + u32 r3 = 0; + + if (gTasks[taskId].data[2] != 0) + r3 = 0x14; + if (gTasks[taskId].data[1] != 0) + r3 |= (1 << (gSprites[gTasks[taskId].data[4]].oam.paletteNum + 16)); + BeginNormalPaletteFade(~r3, 0, 16, 0, 0); + SetVBlankCallback(gUnknown_03005CEC); + gMain.state++; + } + break; + case 7: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; + gMain.state++; + break; + case 8: + if (!gPaletteFade.active) + { + gMain.state++; + if (gTasks[taskId].data[3] == 0) + { + StopCryAndClearCrySongs(); + PlayCry2(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), 0, 0x7D, 0xA); + } + else + { + gMain.state++; + } + } + break; + case 9: + if (!IsCryPlayingOrClearCrySongs()) + gMain.state++; + break; + case 10: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 1; + gTasks[taskId].data[3] = 1; + gTasks[taskId].func = Task_PageScreenProcessInput; + gMain.state = 0; + break; + } +} + +static void Task_PageScreenProcessInput(u8 taskId) +{ + if (gTasks[taskId].data[0] != 0) + { + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = sub_808F888; + PlaySE(SE_Z_SCROLL); + return; + } + if (gMain.newKeys & B_BUTTON) + { + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = Task_ClosePageScreen; + PlaySE(SE_PC_OFF); + return; + } + if (gMain.newKeys & A_BUTTON) + { + switch (gPokedexView->selectedScreen) + { + case PAGE_SCREEN: + sub_8090C68(); + break; + case AREA_SCREEN: + BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); + gTasks[taskId].func = Task_InitAreaScreenMultistep; + PlaySE(SE_PIN); + break; + case CRY_SCREEN: + BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); + gTasks[taskId].func = Task_InitCryScreenMultistep; + PlaySE(SE_PIN); + break; + case SIZE_SCREEN: + if (!gUnknown_0202FFBC->owned) + { + PlaySE(SE_HAZURE); + } + else + { + BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); + gTasks[taskId].func = Task_InitSizeScreenMultistep; + PlaySE(SE_PIN); + } + break; + } + return; + } + if (((gMain.newKeys & DPAD_LEFT) + || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + && gPokedexView->selectedScreen > 0) + { + gPokedexView->selectedScreen--; + sub_8090584(gPokedexView->selectedScreen, 0xD); + PlaySE(SE_Z_PAGE); + return; + } + if (((gMain.newKeys & DPAD_RIGHT) + || ((gMain.newKeys & R_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + && gPokedexView->selectedScreen < 3) + { + gPokedexView->selectedScreen++; + sub_8090584(gPokedexView->selectedScreen, 0xD); + PlaySE(SE_Z_PAGE); + return; + } +} + +static void sub_808F888(u8 taskId) +{ + if (!gPaletteFade.active) + gTasks[taskId].func = Task_InitPageScreenMultistep; +} + +static void Task_ClosePageScreen(u8 taskId) +{ + if (!gPaletteFade.active) + DestroyTask(taskId); +} + +static void Task_InitAreaScreenMultistep(u8 taskId) +{ + switch (gMain.state) + { + case 0: + default: + if (!gPaletteFade.active) + { + gPokedexView->unk64A = 5; + gUnknown_03005CEC = gMain.vblankCallback; + SetVBlankCallback(NULL); + sub_8091060(0x200); + gPokedexView->selectedScreen = AREA_SCREEN; + gMain.state = 1; + } + break; + case 1: + sub_8090540(0xD); + sub_8090644(1, 0xD); + sub_808D640(); + REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256; + gMain.state++; + break; + case 2: + ShowPokedexAreaScreen(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), &gPokedexView->unk64F); + SetVBlankCallback(gUnknown_03005CEC); + gPokedexView->unk64F = 0; + gMain.state = 0; + gTasks[taskId].func = Task_AreaScreenProcessInput; + break; + } +} + +static void Task_AreaScreenProcessInput(u8 taskId) +{ + if (gPokedexView->unk64F != 0) + gTasks[taskId].func = sub_808FA00; +} + +static void sub_808FA00(u8 taskId) +{ + if (!gPaletteFade.active) + { + switch (gPokedexView->unk64F) + { + case 1: + default: + gTasks[taskId].func = Task_InitPageScreenMultistep; + break; + case 2: + gTasks[taskId].func = Task_InitCryScreenMultistep; + break; + } + } +} + +static void Task_InitCryScreenMultistep(u8 taskId) +{ + switch (gMain.state) + { + case 0: + default: + if (!gPaletteFade.active) + { + m4aMPlayStop(&gMPlay_BGM); + gPokedexView->unk64A = 6; + gUnknown_03005CEC = gMain.vblankCallback; + SetVBlankCallback(NULL); + sub_8091060(0x200); + gPokedexView->selectedScreen = CRY_SCREEN; + gMain.state = 1; + } + break; + case 1: + LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM); + LZ77UnCompVram(gUnknown_0839F8A0, (void *)(VRAM + 0x7000)); + gMain.state++; + break; + case 2: + sub_8090540(0xD); + sub_8090644(2, 0xD); + sub_808D640(); + DmaClear16(3, (void *)(VRAM + 0xF800), 0x500); + gMain.state++; + break; + case 3: + SetUpWindowConfig(&gWindowConfig_81E702C); + InitMenuWindow(&gWindowConfig_81E702C); + ResetPaletteFade(); + gMain.state++; + break; + case 4: + MenuPrint(gDexText_CryOf, 10, 4); + sub_8091260(gUnknown_0202FFBC->dexNum, 10, 6, 2); + gMain.state++; + break; + case 5: + gTasks[taskId].data[4] = sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0); + gSprites[gTasks[taskId].data[4]].oam.priority = 0; + gUnknown_03005E98 = 0; + gMain.state++; + break; + case 6: + { + struct CryRelatedStruct sp8; + + sp8.unk0 = 0x4020; + sp8.unk2 = 0x1F; + sp8.paletteNo = 8; + sp8.yPos = 0x1E; + sp8.xPos = 0xC; + if (sub_8119E3C(&sp8, 0) != 0) + { + gMain.state++; + gUnknown_03005E98 = 0; + } + } + break; + case 7: + { + struct CryRelatedStruct sp10; + + sp10.unk0 = 0x3000; + sp10.unk2 = 0xE; + sp10.paletteNo = 9; + sp10.xPos = 0x12; + sp10.yPos = 3; + if (ShowPokedexCryScreen(&sp10, 1) != 0) + gMain.state++; + } + break; + case 8: + BeginNormalPaletteFade(-0x15, 0, 0x10, 0, 0); + SetVBlankCallback(gUnknown_03005CEC); + gMain.state++; + break; + case 9: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(14) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG0CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; + gMain.state++; + break; + case 10: + gPokedexView->unk64F = 0; + gMain.state = 0; + gTasks[taskId].func = Task_CryScreenProcessInput; + break; + } +} + +static void Task_CryScreenProcessInput(u8 taskId) +{ + sub_8119F88(0); + + if (IsCryPlaying()) + sub_8090040(1); + else + sub_8090040(0); + + if (gMain.newKeys & A_BUTTON) + { + sub_8090040(1); + sub_811A050(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum)); + return; + } + else if (!gPaletteFade.active) + { + if (gMain.newKeys & B_BUTTON) + { + BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); + m4aMPlayContinue(&gMPlay_BGM); + gPokedexView->unk64F = 1; + gTasks[taskId].func = sub_808FFBC; + PlaySE(SE_PC_OFF); + return; + } + if ((gMain.newKeys & DPAD_LEFT) + || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + { + BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); + m4aMPlayContinue(&gMPlay_BGM); + gPokedexView->unk64F = 2; + gTasks[taskId].func = sub_808FFBC; + PlaySE(SE_Z_PAGE); + return; + } + if ((gMain.newKeys & DPAD_RIGHT) + || ((gMain.newKeys & R_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + { + if (!gUnknown_0202FFBC->owned) + { + PlaySE(SE_HAZURE); + } + else + { + BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); + m4aMPlayContinue(&gMPlay_BGM); + gPokedexView->unk64F = 3; + gTasks[taskId].func = sub_808FFBC; + PlaySE(SE_Z_PAGE); + } + return; + } + } +} + +static void sub_808FFBC(u8 taskId) +{ + if (!gPaletteFade.active) + { + DestroyCryMeterNeedleSprite(); + switch (gPokedexView->unk64F) + { + default: + case 1: + gTasks[taskId].func = Task_InitPageScreenMultistep; + break; + case 2: + gTasks[taskId].func = Task_InitAreaScreenMultistep; + break; + case 3: + gTasks[taskId].func = Task_InitSizeScreenMultistep; + break; + } + } +} + +static void sub_8090040(u8 a) +{ + u16 unk; + + if (a != 0) + unk = 0x392; + else + unk = 0x2AF; + LoadPalette(&unk, 0x5D, 2); +} + +static void Task_InitSizeScreenMultistep(u8 taskId) +{ + u8 spriteId; + + switch (gMain.state) + { + default: + case 0: + if (!gPaletteFade.active) + { + gPokedexView->unk64A = 7; + gUnknown_03005CEC = gMain.vblankCallback; + SetVBlankCallback(NULL); + sub_8091060(0x200); + gPokedexView->selectedScreen = SIZE_SCREEN; + gMain.state = 1; + } + break; + case 1: + LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM); + LZ77UnCompVram(gUnknown_0839F988, (void *)(VRAM + 0x7000)); + gMain.state++; + break; + case 2: + sub_8090540(0xD); + sub_8090644(3, 0xD); + sub_808D640(); + gMain.state++; + break; + case 3: + { + u8 string[40]; //I hope this is the correct size + + SetUpWindowConfig(&gWindowConfig_81E702C); + InitMenuWindow(&gWindowConfig_81E702C); + string[0] = EOS; + StringAppend(string, gDexText_SizeComparedTo); + StringAppend(string, gSaveBlock2.playerName); + sub_8072BD8(string, 3, 15, 0xC0); + gMain.state++; + } + break; + case 4: + ResetPaletteFade(); + gMain.state++; + break; + case 5: + spriteId = sub_8091A4C(gSaveBlock2.playerGender, 152, 56, 0); + gSprites[spriteId].oam.affineMode = 1; + gSprites[spriteId].oam.matrixNum = 1; + gSprites[spriteId].oam.priority = 0; + gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerOffset; + SetOamMatrix(1, gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerScale); + LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(gUnknown_083B4EC4)); + gMain.state++; + break; + case 6: + spriteId = sub_80918EC(gUnknown_0202FFBC->dexNum, 88, 56, 1); + gSprites[spriteId].oam.affineMode = 1; + gSprites[spriteId].oam.matrixNum = 2; + gSprites[spriteId].oam.priority = 0; + gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonOffset; + SetOamMatrix(2, gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonScale); + LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(gUnknown_083B4EC4)); + gMain.state++; + break; + case 7: + BeginNormalPaletteFade(-0x15, 0, 0x10, 0, 0); + SetVBlankCallback(gUnknown_03005CEC); + gMain.state++; + break; + case 8: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(14) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; + gMain.state++; + break; + case 9: + if (!gPaletteFade.active) + { + gPokedexView->unk64F = 0; + gMain.state = 0; + gTasks[taskId].func = Task_SizeScreenProcessInput; + } + break; + } +} + +static void Task_SizeScreenProcessInput(u8 taskId) +{ + if (gMain.newKeys & B_BUTTON) + { + BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); + gPokedexView->unk64F = 1; + gTasks[taskId].func = sub_8090498; + PlaySE(SE_PC_OFF); + } + else if ((gMain.newKeys & DPAD_LEFT) + || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + { + BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); + gPokedexView->unk64F = 2; + gTasks[taskId].func = sub_8090498; + PlaySE(SE_Z_PAGE); + } +} + +static void sub_8090498(u8 taskId) +{ + if (!gPaletteFade.active) + { + switch (gPokedexView->unk64F) + { + default: + case 1: + gTasks[taskId].func = Task_InitPageScreenMultistep; + break; + case 2: + gTasks[taskId].func = Task_InitCryScreenMultistep; + break; + } + } +} + +static void sub_80904FC(u16 a) +{ + LZ77UnCompVram(gUnknown_08E96ACC, (void *)(VRAM + a * 0x800)); + DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440); +} + +static void sub_8090540(u16 a) +{ + LZ77UnCompVram(gUnknown_08E96B58, (void *)(VRAM + a * 0x800)); + DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440); +} + +#ifdef NONMATCHING +static void sub_8090584(u8 a, u16 b) +{ + u8 i; //r1 + u8 j; //r3 + u32 r6; + register u8 r7; + + for (i = 0; i < 4; i++) + { + r7 = i * 5 + 1; + r6 = 0x4000; + + if (i == a) + r6 = 0x2000; + + for (j = 0; j < 5; j++) + { + u32 r0 = b * 0x800 + (r7 + j) * 2; + u8 *ptr; + + ptr = VRAM; + *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6; + ptr = VRAM + 0x40; + *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6; + } + } + r6 = 0x4000; + for (j = 0; j < 5; j++) + { + u32 r0 = b * 0x800 + j * 2; + u8 *ptr; + + ptr = VRAM + 0x32; + *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6; + ptr = VRAM + 0x72; + *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6; + } +} +#else +__attribute__((naked)) +static void sub_8090584(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\ + mov r9, r1\n\ + movs r1, 0\n\ +_0809059C:\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + movs r6, 0x80\n\ + lsls r6, 7\n\ + cmp r1, r10\n\ + bne _080905B2\n\ + movs r6, 0x80\n\ + lsls r6, 6\n\ +_080905B2:\n\ + movs r3, 0\n\ + mov r0, r9\n\ + lsls r0, 11\n\ + mov r12, r0\n\ + adds r1, 0x1\n\ + mov r8, r1\n\ + mov r5, r12\n\ + ldr r4, _08090634 @ =0x00000fff\n\ +_080905C2:\n\ + adds r0, r7, r3\n\ + lsls r0, 1\n\ + adds r0, r5, r0\n\ + movs r2, 0xC0\n\ + lsls r2, 19\n\ + adds r1, r0, r2\n\ + ldrh r2, [r1]\n\ + ands r2, r4\n\ + orrs r2, r6\n\ + strh r2, [r1]\n\ + ldr r1, _08090638 @ =0x06000040\n\ + adds r0, r1\n\ + ldrh r2, [r0]\n\ + ands r2, r4\n\ + orrs r2, r6\n\ + strh r2, [r0]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x4\n\ + bls _080905C2\n\ + mov r2, r8\n\ + lsls r0, r2, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0x3\n\ + bls _0809059C\n\ + movs r6, 0x80\n\ + lsls r6, 7\n\ + movs r3, 0\n\ + mov r5, r12\n\ + ldr r4, _08090634 @ =0x00000fff\n\ +_08090600:\n\ + lsls r0, r3, 1\n\ + adds r0, r5, r0\n\ + ldr r2, _0809063C @ =0x06000032\n\ + adds r1, r0, r2\n\ + ldrh r2, [r1]\n\ + ands r2, r4\n\ + orrs r2, r6\n\ + strh r2, [r1]\n\ + ldr r1, _08090640 @ =0x06000072\n\ + adds r0, r1\n\ + ldrh r2, [r0]\n\ + ands r2, r4\n\ + orrs r2, r6\n\ + strh r2, [r0]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x4\n\ + bls _08090600\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\ +_08090634: .4byte 0x00000fff\n\ +_08090638: .4byte 0x06000040\n\ +_0809063C: .4byte 0x06000032\n\ +_08090640: .4byte 0x06000072\n\ + .syntax divided\n"); +} +#endif + +//Nope, can't get this one to match, either. +#ifdef NONMATCHING +static void sub_8090644(u8 a, u16 b) +{ + u8 i; + u8 j; + + for (i = 0; i < 4; i++) + { + u8 r8 = i * 5 + 1; + u32 r5; + + if (i == a || i == 0) + r5 = 0x2000; + else if (a != 0) + r5 = 0x4000; + + for (j = 0; j < 5; j++) + { + u16 (*vramData)[0x400]; + + vramData = (u16 (*)[])VRAM; + vramData[b][r8 + j] = vramData[b][r8 + j] & 0xFFF | r5; + vramData = (u16 (*)[])(VRAM + 0x40); + vramData[b][r8 + j] = vramData[b][r8 + j] & 0xFFF | r5; + } + } + + for (j = 0; j < 5; j++) + { + u16 (*vramData)[0x400]; + + vramData = (u16 (*)[])(VRAM + 0x32); + vramData[b][j] = vramData[b][j] & 0xFFF | 0x4000; + vramData = (u16 (*)[])(VRAM + 0x72); + vramData[b][j] = vramData[b][j] & 0xFFF | 0x4000; + } +} +#else +__attribute__((naked)) +static void sub_8090644(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\ + mov r9, r1\n\ + movs r1, 0\n\ +_0809065C:\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + cmp r1, r10\n\ + beq _08090670\n\ + cmp r1, 0\n\ + bne _08090676\n\ +_08090670:\n\ + movs r5, 0x80\n\ + lsls r5, 6\n\ + b _0809067A\n\ +_08090676:\n\ + movs r5, 0x80\n\ + lsls r5, 7\n\ +_0809067A:\n\ + movs r3, 0\n\ + mov r0, r9\n\ + lsls r7, r0, 11\n\ + adds r1, 0x1\n\ + mov r12, r1\n\ + adds r6, r7, 0\n\ + ldr r4, _080906FC @ =0x00000fff\n\ +_08090688:\n\ + mov r1, r8\n\ + adds r0, r1, r3\n\ + lsls r0, 1\n\ + adds r0, r6, r0\n\ + movs r2, 0xC0\n\ + lsls r2, 19\n\ + adds r1, r0, r2\n\ + ldrh r2, [r1]\n\ + ands r2, r4\n\ + orrs r2, r5\n\ + strh r2, [r1]\n\ + ldr r1, _08090700 @ =0x06000040\n\ + adds r0, r1\n\ + ldrh r2, [r0]\n\ + ands r2, r4\n\ + orrs r2, r5\n\ + strh r2, [r0]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x4\n\ + bls _08090688\n\ + mov r2, r12\n\ + lsls r0, r2, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0x3\n\ + bls _0809065C\n\ + movs r5, 0x80\n\ + lsls r5, 7\n\ + movs r3, 0\n\ + adds r6, r7, 0\n\ + ldr r4, _080906FC @ =0x00000fff\n\ +_080906C8:\n\ + lsls r0, r3, 1\n\ + adds r0, r6, r0\n\ + ldr r2, _08090704 @ =0x06000032\n\ + adds r1, r0, r2\n\ + ldrh r2, [r1]\n\ + ands r2, r4\n\ + orrs r2, r5\n\ + strh r2, [r1]\n\ + ldr r1, _08090708 @ =0x06000072\n\ + adds r0, r1\n\ + ldrh r2, [r0]\n\ + ands r2, r4\n\ + orrs r2, r5\n\ + strh r2, [r0]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x4\n\ + bls _080906C8\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\ +_080906FC: .4byte 0x00000fff\n\ +_08090700: .4byte 0x06000040\n\ +_08090704: .4byte 0x06000032\n\ +_08090708: .4byte 0x06000072\n\ + .syntax divided\n"); +} +#endif + +u8 sub_809070C(u16 dexNum, u32 b, u32 c) +{ + u8 taskId = CreateTask(sub_8090750, 0); + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = dexNum; + gTasks[taskId].data[12] = b; + gTasks[taskId].data[13] = b >> 16; + gTasks[taskId].data[14] = c; + gTasks[taskId].data[15] = c >> 16; + return taskId; +} + +static void sub_8090750(u8 taskId) +{ + u8 spriteId; + u16 dexNum = gTasks[taskId].data[1]; + u16 i; + + switch (gTasks[taskId].data[0]) + { + case 0: + default: + if (!gPaletteFade.active) + { + gUnknown_03005CEC = gMain.vblankCallback; + SetVBlankCallback(NULL); + sub_8091060(0x100); + gTasks[taskId].data[0] = 1; + } + break; + case 1: + LZ77UnCompVram(gPokedexMenu_Gfx, (void *)(VRAM + 0x4000)); + LZ77UnCompVram(gUnknown_08E96BD4, (void *)(VRAM + 0x7800)); + for (i = 0; i < 0x280; i++) + { +#ifndef NONMATCHING + asm(""); +#endif + *(u16 *)(VRAM + 0x7800 + 2 * i) += 0x2000; + } + sub_8091738(gTasks[taskId].data[1], 2, 0x3FC); + ResetPaletteFade(); + LoadPalette(gPokedexMenu_Pal + 1, 0x21, 0x9E); + gTasks[taskId].data[0]++; + break; + case 2: + SetUpWindowConfig(&gWindowConfig_81E7064); + InitMenuWindow(&gWindowConfig_81E7064); + DmaClear16(3, (void *)(VRAM + 0xC000), 0x200); + gTasks[taskId].data[0]++; + break; + case 3: + sub_8072BD8(gDexText_RegisterComplete, 2, 0, 0xD0); + if (!IsNationalPokedexEnabled()) + sub_8091154(NationalToHoennOrder(dexNum), 13, 3); + else + sub_8091154(dexNum, 13, 3); + sub_80911C8(dexNum, 16, 3); + MenuPrint(gDexText_UnknownPoke, CATEGORY_LEFT, 5); + MenuPrint(gDexText_UnknownHeight, 16, 7); + MenuPrint(gDexText_UnknownWeight, 16, 9); + sub_8091304(gPokedexEntries[dexNum].categoryName, CATEGORY_LEFT, 5); + sub_8091458(gPokedexEntries[dexNum].height, 16, 7); + sub_8091564(gPokedexEntries[dexNum].weight, 16, 9); + MenuPrint(gPokedexEntries[dexNum].descriptionPage1, 2, 13); + sub_80917CC(14, 0x3FC); + gTasks[taskId].data[0]++; + break; + case 4: + spriteId = sub_80918EC(dexNum, 0x30, 0x38, 0); + gSprites[spriteId].oam.priority = 0; + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + SetVBlankCallback(gUnknown_03005CEC); + gTasks[taskId].data[3] = spriteId; + gTasks[taskId].data[0]++; + break; + case 5: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; + gTasks[taskId].data[0]++; + break; + case 6: + if (!gPaletteFade.active) + { + PlayCry1(NationalPokedexNumToSpecies(dexNum), 0); + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[4] = 0; + gTasks[taskId].func = sub_8090A3C; + } + break; + } +} + +static void sub_8090A3C(u8 taskId) +{ + if (gMain.newKeys & B_BUTTON) + { + BeginNormalPaletteFade(0x0000FFFC, 0, 0, 16, 0); + gSprites[gTasks[taskId].data[3]].callback = sub_8090C28; + gTasks[taskId].func = sub_8090B8C; + return; + } + else if (gMain.newKeys & A_BUTTON) + { + if (gTasks[taskId].data[4] == 0) + { + u16 r4 = gTasks[taskId].data[1]; + + MenuZeroFillWindowRect(2, 13, 27, 19); + MenuPrint(gPokedexEntries[r4].descriptionPage2, 2, 13); + (*(u16 *)(VRAM + 0x7ACA))++; + (*(u16 *)(VRAM + 0x7B0A))++; + gTasks[taskId].data[4] = 1; + PlaySE(SE_PIN); + } + else + { + BeginNormalPaletteFade(0x0000FFFC, 0, 0, 16, 0); + gSprites[gTasks[taskId].data[3]].callback = sub_8090C28; + gTasks[taskId].func = sub_8090B8C; + return; + } + } + gTasks[taskId].data[2]++; + if (gTasks[taskId].data[2] & 0x10) + LoadPalette(gPokedexMenu_Pal + 1, 0x51, 14); + else + LoadPalette(gPokedexMenu2_Pal + 1, 0x51, 14); +} + +static void sub_8090B8C(u8 taskId) +{ + if (!gPaletteFade.active) + { + u16 species; + u32 otId; + u32 personality; + u8 paletteNum; + const u8 *lzPaletteData; + + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; + CpuCopy16(gUnknown_08D00524, (void *)(VRAM + 0xC000), 0x1000); + sub_800D74C(); + species = NationalPokedexNumToSpecies(gTasks[taskId].data[1]); + otId = ((u16)gTasks[taskId].data[13] << 16) | (u16)gTasks[taskId].data[12]; + personality = ((u16)gTasks[taskId].data[15] << 16) | (u16)gTasks[taskId].data[14]; + paletteNum = gSprites[gTasks[taskId].data[3]].oam.paletteNum; + lzPaletteData = species_and_otid_get_pal(species, otId, personality); + LoadCompressedPalette(lzPaletteData, 0x100 | paletteNum * 16, 32); + DestroyTask(taskId); + } +} + +static void sub_8090C28(struct Sprite *sprite) +{ + if (sprite->pos1.x < 0x78) + sprite->pos1.x += 2; + if (sprite->pos1.x > 0x78) + sprite->pos1.x -= 2; + + if (sprite->pos1.y < 0x50) + sprite->pos1.y += 1; + if (sprite->pos1.y > 0x50) + sprite->pos1.y -= 1; +} + +static void sub_8090C68(void) +{ + if (gUnknown_0202FFBC->owned) + { + if (gPokedexView->descriptionPageNum == 0) + { + MenuZeroFillWindowRect(2, 13, 27, 19); + MenuPrint(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage2, 2, 13); + gPokedexView->descriptionPageNum = 1; + (*(u16 *)(VRAM + 0x7ACA))++; + (*(u16 *)(VRAM + 0x7B0A))++; + PlaySE(SE_PIN); + } + else + { + MenuZeroFillWindowRect(2, 13, 27, 19); + MenuPrint(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13); + gPokedexView->descriptionPageNum = 0; + (*(u16 *)(VRAM + 0x7ACA))--; + (*(u16 *)(VRAM + 0x7B0A))--; + PlaySE(SE_PIN); + } + } +} + +const u8 *GetPokemonCategory(u16 dexNum) +{ + return gPokedexEntries[dexNum].categoryName; +} + +u16 GetPokedexHeightWeight(u16 dexNum, u8 data) +{ + switch (data) + { + case 0: // height + return gPokedexEntries[dexNum].height; + case 1: // weight + return gPokedexEntries[dexNum].weight; + default: + return 1; + } +} + +s8 GetNationalPokedexFlag(u16 a, u8 b) +{ + u8 index; + u8 bit; + u8 mask; + s8 retVal; + + a--; + index = a / 8; + bit = a % 8; + mask = 1 << bit; + retVal = 0; + switch (b) + { + case 0: + if (gSaveBlock2.pokedex.seen[index] & mask) + { + if ((gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.unk938[index] & mask) + && (gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.unk3A8C[index] & mask)) + retVal = 1; + else + { + gSaveBlock2.pokedex.seen[index] &= ~mask; + gSaveBlock1.unk938[index] &= ~mask; + gSaveBlock1.unk3A8C[index] &= ~mask; + retVal = 0; + } + } + break; + case 1: + if (gSaveBlock2.pokedex.owned[index] & mask) + { + if ((gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock2.pokedex.seen[index] & mask) + && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.unk938[index] & mask) + && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.unk3A8C[index] & mask)) + retVal = 1; + else + { + gSaveBlock2.pokedex.owned[index] &= ~mask; + gSaveBlock2.pokedex.seen[index] &= ~mask; + gSaveBlock1.unk938[index] &= ~mask; + gSaveBlock1.unk3A8C[index] &= ~mask; + retVal = 0; + } + } + break; + case 2: + gSaveBlock2.pokedex.seen[index] |= mask; + gSaveBlock1.unk938[index] |= mask; + gSaveBlock1.unk3A8C[index] |= mask; + break; + case 3: + gSaveBlock2.pokedex.owned[index] |= mask; + break; + } + return retVal; +} + +u16 GetNationalPokedexCount(u8 a) +{ + u16 count = 0; + u16 i; + + for (i = 0; i < NATIONAL_DEX_COUNT; i++) + { + switch (a) + { + case 0: + if (GetNationalPokedexFlag(i + 1, 0) != 0) + count++; + break; + case 1: + if (GetNationalPokedexFlag(i + 1, 1) != 0) + count++; + break; + } + } + return count; +} + +u16 GetHoennPokedexCount(u8 a) +{ + u16 count = 0; + u16 i; + + for (i = 0; i < 202; i++) + { + switch (a) + { + case 0: + if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 0) != 0) + count++; + break; + case 1: + if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 1) != 0) + count++; + break; + } + } + return count; +} + +bool8 sub_8090FC0(void) +{ + u16 i; + + for (i = 0; i < 200; i++) + { + if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 1) == 0) + return FALSE; + } + return TRUE; +} + +u16 sub_8090FF4(void) +{ + u16 i; + + for (i = 0; i < 150; i++) + { + if (GetNationalPokedexFlag(i + 1, 1) == 0) + return 0; + } + for (i = 152; i < 250; i++) + { + if (GetNationalPokedexFlag(i + 1, 1) == 0) + return 0; + } + for (i = 252; i < 384; i++) + { + if (GetNationalPokedexFlag(i + 1, 1) == 0) + return 0; + } + return 1; +} + +static void sub_8091060(u16 a) +{ + if (!(a & 0x100)) + { + REG_DISPCNT &= 0xFEFF; + REG_BG0CNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + } + if (!(a & 0x200)) + { + REG_DISPCNT &= 0xFDFF; + REG_BG1CNT = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + } + if (!(a & 0x400)) + { + REG_DISPCNT &= 0xFBFF; + REG_BG2CNT = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + } + if (!(a & 0x800)) + { + REG_DISPCNT &= 0xF7FF; + REG_BG3CNT = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + } + if (!(a & 0x1000)) + { + REG_DISPCNT &= 0xEFFF; + ResetSpriteData(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 8; + } +} + +static void sub_8091154(u16 order, u8 b, u8 c) +{ + u8 str[4]; + + str[0] = CHAR_0 + order / 100; + str[1] = CHAR_0 + (order % 100) / 10; + str[2] = CHAR_0 + (order % 100) % 10; + str[3] = EOS; + MenuPrint(str, b, c); +} + +static u8 sub_80911C8(u16 num, u8 b, u8 c) +{ + u8 str[11]; + u8 i; + + for (i = 0; i < 11; i++) + str[i] = EOS; + num = NationalPokedexNumToSpecies(num); + switch (num) + { + default: + for (i = 0; gSpeciesNames[num][i] != EOS && i < 10; i++) + str[i] = gSpeciesNames[num][i]; + break; + case 0: + for (i = 0; i < 10; i++) + str[i] = 0xAE; + break; + } + MenuPrint(str, b, c); + return i; +} + +static u8 sub_8091260(u16 num, u8 b, u8 c, u8 d) +{ + u8 str[40]; + u8 *end; + u8 i; + + end = StringCopy(str, gUnknown_083B5558); + str[2] = d; + num = NationalPokedexNumToSpecies(num); + switch (num) + { + default: + for (i = 0; gSpeciesNames[num][i] != EOS && i < 10; i++) + end[i] = gSpeciesNames[num][i]; + break; + case 0: + for (i = 0; i < 10; i++) + end[i] = 0xAE; + break; + } + end[i] = EOS; + MenuPrint(str, b, c); + return i; +} + +static void sub_8091304(const u8 *name, u8 left, u8 top) +{ + u8 str[32]; + u8 i; +#if ENGLISH + u8 j; +#endif + + for (i = 0; name[i] != EOS && i < 11; i++) + str[i] = name[i]; +#if ENGLISH + for (j = 0; gDexText_UnknownPoke[j] == 0xAC || gDexText_UnknownPoke[j] == 0; j++) + ; + j--; + while (gDexText_UnknownPoke[j] != EOS) + str[i++] = gDexText_UnknownPoke[j++]; +#endif + str[i] = EOS; + sub_8072B80(str, left, top, gDexText_UnknownPoke); +} + +#if ENGLISH +void unref_sub_80913A4(u16 a, u8 left, u8 top) +{ + u8 str[6]; + bool8 outputted = FALSE; + u8 result; + + result = a / 1000; + if (result == 0) + { + str[0] = CHAR_SPACE; + outputted = FALSE; + } + else + { + str[0] = CHAR_0 + result; + outputted = TRUE; + } + + result = (a % 1000) / 100; + if (result == 0 && !outputted) + { + str[1] = CHAR_SPACE; + outputted = FALSE; + } + else + { + str[1] = CHAR_0 + result; + outputted = TRUE; + } + + str[2] = CHAR_0 + ((a % 1000) % 100) / 10; + str[3] = CHAR_PERIOD; + str[4] = CHAR_0 + ((a % 1000) % 100) % 10; + str[5] = EOS; + MenuPrint(str, left, top); +} +#elif GERMAN +void unref_sub_80913A4(u16 arg0, u8 left, u8 top) { + u8 buffer[8]; + int offset; + u8 result; + + u8 r6 = 0; + offset = 0; + + + buffer[r6++] = 0xFC; + buffer[r6++] = 0x13; + r6++; + + result = (arg0 / 1000); + if (result == 0) + { + offset = 6; + } + else + { + buffer[r6++] = result + CHAR_0; + } + + + result = (arg0 % 1000) / 100; + + if (result == 0 && offset != 0) + { + offset += 6; + } + else + { + buffer[r6++] = result + CHAR_0; + } + + buffer[r6++] = (((arg0 % 1000) % 100) / 10) + CHAR_0; + buffer[r6++] = CHAR_COMMA; + buffer[r6++] = (((arg0 % 1000) % 100) % 10) + CHAR_0; + + buffer[r6++] = EOS; + buffer[2] = offset; + MenuPrint(buffer, left, top); +} +#endif + +#ifdef UNITS_IMPERIAL +#define CHAR_PRIME (0xB4) +#define CHAR_DOUBLE_PRIME (0xB2) +static void sub_8091458(u16 height, u8 left, u8 top) +{ + u8 buffer[16]; + u32 inches, feet; + u8 i = 0; + + inches = (height * 10000) / 254; + if (inches % 10 >= 5) + inches += 10; + feet = inches / 120; + inches = (inches - (feet * 120)) / 10; + + buffer[i++] = EXT_CTRL_CODE_BEGIN; + buffer[i++] = 0x13; + if (feet / 10 == 0) + { + buffer[i++] = 18; + buffer[i++] = feet + CHAR_0; + } + else + { + buffer[i++] = 12; + buffer[i++] = feet / 10 + CHAR_0; + buffer[i++] = (feet % 10) + CHAR_0; + } + buffer[i++] = CHAR_PRIME; + buffer[i++] = (inches / 10) + CHAR_0; + buffer[i++] = (inches % 10) + CHAR_0; + buffer[i++] = CHAR_DOUBLE_PRIME; + buffer[i++] = EOS; + MenuPrint(buffer, left, top); +} +#else +static void sub_8091458(u16 height, u8 left, u8 top) +{ + unref_sub_80913A4(height, left, top); +} +#endif + +#ifdef UNITS_IMPERIAL +static void sub_8091564(u16 weight, u8 left, u8 top) +{ + u8 buffer[16]; + u32 lbs; + u8 i = 0; + bool8 output; + + lbs = (weight * 100000) / 4536; + if (lbs % 10 >= 5) + lbs += 10; + output = FALSE; + + buffer[i] = (lbs / 100000) + CHAR_0; + if (buffer[i] == CHAR_0 && output == FALSE) + { + buffer[i++] = CHAR_SPACE; + buffer[i++] = CHAR_SPACE; + } + else + { + output = TRUE; + i++; + } + + lbs = (lbs % 100000); + buffer[i] = (lbs / 10000) + CHAR_0; + if (buffer[i] == CHAR_0 && output == FALSE) + { + buffer[i++] = CHAR_SPACE; + buffer[i++] = CHAR_SPACE; + } + else + { + output = TRUE; + i++; + } + + lbs = (lbs % 10000); + buffer[i] = (lbs / 1000) + CHAR_0; + if (buffer[i] == CHAR_0 && output == FALSE) + { + buffer[i++] = CHAR_SPACE; + buffer[i++] = CHAR_SPACE; + } + else + { + output = TRUE; + i++; + } + lbs = (lbs % 1000); + buffer[i++] = (lbs / 100) + CHAR_0; + lbs = (lbs % 100); + buffer[i++] = CHAR_PERIOD; + buffer[i++] = (lbs / 10) + CHAR_0; + buffer[i++] = CHAR_SPACE; + buffer[i++] = CHAR_l; + buffer[i++] = CHAR_b; + buffer[i++] = CHAR_s; + buffer[i++] = CHAR_PERIOD; + buffer[i++] = EOS; + MenuPrint(buffer, left, top); +} +#else +static void sub_8091564(u16 arg0, u8 left, u8 top) +{ + unref_sub_80913A4(arg0, left, top); +} +#endif + +static void sub_8091738(u16 num, u16 b, u16 c) +{ + u8 arr[0x80]; + u16 i; + u16 j; + const u8 *r12; + u16 r7; + u8 r3; + + r12 = sMonFootprintTable[NationalPokedexNumToSpecies(num)]; + for (r7 = 0, i = 0; i < 32; i++) + { + r3 = r12[i]; + for (j = 0; j < 4; j++) + { + u32 r1 = j * 2; + s32 r2 = (r3 >> r1) & 1; + + if (r3 & (2 << r1)) + r2 |= 0x10; + +// Needed to match +#ifndef NONMATCHING + asm("");asm("");asm("");asm("");asm(""); +#endif + + arr[r7] = r2; + r7++; + } + } + CpuCopy16(arr, (u16 *)(VRAM + b * 0x4000 + c * 0x20), 0x80); +} + +static void sub_80917CC(u16 a, u16 b) +{ + *(u16 *)(VRAM + a * 0x800 + 0x232) = 0xF000 + b + 0; + *(u16 *)(VRAM + a * 0x800 + 0x234) = 0xF000 + b + 1; + *(u16 *)(VRAM + a * 0x800 + 0x272) = 0xF000 + b + 2; + *(u16 *)(VRAM + a * 0x800 + 0x274) = 0xF000 + b + 3; +} + +static u16 sub_8091818(u8 a, u16 b, u16 c, u16 d) +{ + switch (a) + { + case 1: + if (b > c) + b--; + break; + case 0: + if (b < d) + b++; + break; + case 3: + if (b > c) + b--; + else + b = d; + break; + case 2: + if (b < d) + b++; + else + b = c; + break; + } + return b; +} + +static void nullsub_59(struct Sprite *sprite) +{ +} + +static void sub_8091878(u16 a, u8 b) +{ + gUnknown_02024E8C = gUnknown_083B57A4; + gUnknown_02024E8C.paletteTag = a; + gUnknown_02024E8C.images = gUnknown_083B5794[b]; + gUnknown_02024E8C.anims = gSpriteAnimTable_81E7C64; +} + +static void sub_80918B0(u16 a, u8 b) +{ + gUnknown_02024E8C = gUnknown_083B57A4; + gUnknown_02024E8C.paletteTag = a; + gUnknown_02024E8C.images = gUnknown_083B5794[b]; + gUnknown_02024E8C.anims = gUnknown_081EC2A4[0]; +} + +u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum) +{ + u8 spriteId; + + num = NationalPokedexNumToSpecies(num); + switch (num) + { + default: + DecompressPicFromTable_2( + &gMonFrontPicTable[num], + gMonFrontPicCoords[num].coords, + gMonFrontPicCoords[num].y_offset, + (void *)0x02000000, + gUnknown_083B5584[paletteNum], + num); + break; + case SPECIES_SPINDA: + LoadSpecialPokePic( + &gMonFrontPicTable[num], + gMonFrontPicCoords[num].coords, + gMonFrontPicCoords[num].y_offset, + 0x02000000, + gUnknown_083B5584[paletteNum], + num, + gSaveBlock2.pokedex.spindaPersonality, + 1); + break; + case SPECIES_UNOWN: + LoadSpecialPokePic( + &gMonFrontPicTable[num], + gMonFrontPicCoords[num].coords, + gMonFrontPicCoords[num].y_offset, + 0x02000000, + gUnknown_083B5584[paletteNum], + num, + gSaveBlock2.pokedex.unownPersonality, + 1); + break; + } + LoadCompressedPalette(gMonPaletteTable[num].data, 0x100 + paletteNum * 16, 32); + sub_8091878(paletteNum, paletteNum); + spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); + gSprites[spriteId].oam.paletteNum = paletteNum; + return spriteId; +} + +static u8 sub_8091A4C(u16 gender, s16 x, s16 y, u16 paletteNum) +{ + u8 spriteId; + + DecompressPicFromTable_2( + &gTrainerFrontPicTable[gender], + gTrainerFrontPicCoords[gender].coords, + gTrainerFrontPicCoords[gender].y_offset, + (void *)0x02000000, + gUnknown_083B5584[0], + gender); + sub_80918B0(gender, 0); + spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); + gSprites[spriteId].oam.paletteNum = paletteNum; + return spriteId; +} + +int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) +{ + u16 species; + u16 i; + u16 resultsCount; + u8 types[2]; + + SortPokedex(a, b); + + for (i = 0, resultsCount = 0; i < NATIONAL_DEX_COUNT; i++) + { + if (gPokedexView->unk0[i].seen) + { + gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + resultsCount++; + } + } + gPokedexView->pokemonListCount = resultsCount; + + // Search by name + if (abcGroup != 0xFF) + { + for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++) + { + u8 r3; + + species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); + r3 = gSpeciesNames[species][0]; + if ((r3 >= gUnknown_083B57BC[abcGroup][0] && r3 < gUnknown_083B57BC[abcGroup][0] + gUnknown_083B57BC[abcGroup][1]) + || (r3 >= gUnknown_083B57BC[abcGroup][2] && r3 < gUnknown_083B57BC[abcGroup][2] + gUnknown_083B57BC[abcGroup][3])) + { + gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + resultsCount++; + } + } + gPokedexView->pokemonListCount = resultsCount; + } + + // Search by body color + if (bodyColor != 0xFF) + { + for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++) + { + species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); + + if (bodyColor == gBaseStats[species].bodyColor) + { + gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + resultsCount++; + } + } + gPokedexView->pokemonListCount = resultsCount; + } + + // Search by type + if (type1 != 0xFF || type2 != 0xFF) + { + if (type1 == 0xFF) + { + type1 = type2; + type2 = 0xFF; + } + + if (type2 == 0xFF) + { + for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++) + { + if (gPokedexView->unk0[i].owned) + { + species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); + + types[0] = gBaseStats[species].type1; + types[1] = gBaseStats[species].type2; + if (types[0] == type1 || types[1] == type1) + { + gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + resultsCount++; + } + } + } + } + else + { + for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++) + { + if (gPokedexView->unk0[i].owned) + { + species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); + + types[0] = gBaseStats[species].type1; + types[1] = gBaseStats[species].type2; + if ((types[0] == type1 && types[1] == type2) || (types[0] == type2 && types[1] == type1)) + { + gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + resultsCount++; + } + } + } + } + gPokedexView->pokemonListCount = resultsCount; + } + + if (gPokedexView->pokemonListCount != 0) + { + for (i = gPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++) + { + gPokedexView->unk0[i].dexNum = 0xFFFF; + gPokedexView->unk0[i].seen = FALSE; + gPokedexView->unk0[i].owned = FALSE; + + } + } + + return resultsCount; +} + +#if ENGLISH +#define SUB_8091E20_WIDTH (208) +#elif GERMAN +#define SUB_8091E20_WIDTH (216) +#endif + +void sub_8091E20(const u8 *str) +{ + sub_8072AB0(str, 9, 120, SUB_8091E20_WIDTH, 32, 1); +} + +u8 sub_8091E3C(void) +{ + return CreateTask(sub_8091E54, 0); +} + +static void sub_8091E54(u8 taskId) +{ + u16 i; + + switch (gMain.state) + { + default: + case 0: + if (!gPaletteFade.active) + { + gPokedexView->unk64A = 2; + sub_8091060(0); + LZ77UnCompVram(gPokedexMenuSearch_Gfx, (void *)VRAM); + LZ77UnCompVram(gUnknown_08E96D2C, (void *)(VRAM + 0x7800)); + LoadPalette(gPokedexMenuSearch_Pal + 1, 1, 0x7E); + if (!IsNationalPokedexEnabled()) + { + for (i = 0; i < 17; i++) + { + ((u16 *)(VRAM + 0x7A80))[i] = ((u16 *)(VRAM + 0x7B00))[i]; + ((u16 *)(VRAM + 0x7AC0))[i] = ((u16 *)(VRAM + 0x7B40))[i]; + ((u16 *)(VRAM + 0x7B00))[i] = 1; + ((u16 *)(VRAM + 0x7B40))[i] = 1; + } + } + gMain.state = 1; + } + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E7064); + InitMenuWindow(&gWindowConfig_81E7064); + LoadCompressedObjectPic(&gUnknown_083A05CC[0]); + LoadSpritePalettes(gUnknown_083A05DC); + sub_809308C(taskId); + for (i = 0; i < 16; i++) + gTasks[taskId].data[i] = 0; + sub_8092EB0(taskId); + sub_8092AB0(0); + sub_8092B68(taskId); + gMain.state++; + break; + case 2: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + gMain.state++; + break; + case 3: + REG_BG3CNT = 0x0F03; + REG_DISPCNT = 0x1C40; + gMain.state++; + break; + case 4: + if (!gPaletteFade.active) + { + gTasks[taskId].func = sub_809204C; + gMain.state = 0; + } + break; + } +} + +static void sub_809204C(u8 taskId) +{ + sub_8092AB0(gTasks[taskId].data[0]); + sub_8092B68(taskId); + gTasks[taskId].func = sub_809207C; +} + +static void sub_809207C(u8 taskId) +{ + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_PC_OFF); + gTasks[taskId].func = sub_80927B8; + return; + } + if (gMain.newKeys & A_BUTTON) + { + switch (gTasks[taskId].data[0]) + { + case 0: + PlaySE(SE_PIN); + gTasks[taskId].data[1] = 0; + gTasks[taskId].func = sub_809217C; + break; + case 1: + PlaySE(SE_PIN); + gTasks[taskId].data[1] = 4; + gTasks[taskId].func = sub_809217C; + break; + case 2: + PlaySE(SE_PC_OFF); + gTasks[taskId].func = sub_80927B8; + break; + } + return; + } + if ((gMain.newKeys & DPAD_LEFT) && gTasks[taskId].data[0] > 0) + { + PlaySE(SE_Z_PAGE); + gTasks[taskId].data[0]--; + sub_8092AB0(gTasks[taskId].data[0]); + } + if ((gMain.newKeys & DPAD_RIGHT) && gTasks[taskId].data[0] < 2) + { + PlaySE(SE_Z_PAGE); + gTasks[taskId].data[0]++; + sub_8092AB0(gTasks[taskId].data[0]); + } +} + +static void sub_809217C(u8 taskId) +{ + sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); + sub_8092B68(taskId); + gTasks[taskId].func = sub_80921B0; +} + +static void sub_80921B0(u8 taskId) +{ + const u8 (*r6)[4]; + + if (gTasks[taskId].data[0] != 0) + { + if (!IsNationalPokedexEnabled()) + r6 = gUnknown_083B58A4; + else + r6 = gUnknown_083B586C; + } + else + { + if (!IsNationalPokedexEnabled()) + r6 = gUnknown_083B5888; + else + r6 = gUnknown_083B5850; + } + + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_BOWA); + sub_8092EB0(taskId); + gTasks[taskId].func = sub_809204C; + return; + } + if (gMain.newKeys & A_BUTTON) + { + if (gTasks[taskId].data[1] == 6) + { + if (gTasks[taskId].data[0] != 0) + { + gUnknown_0202FFBA = 0x40; + gPokedexView->unk62A = 0x40; + gUnknown_0202FFB8 = 0; + gPokedexView->unk610 = 0; + gSaveBlock2.pokedex.unknown1 = sub_8092E10(taskId, 5); + if (!IsNationalPokedexEnabled()) + gSaveBlock2.pokedex.unknown1 = 0; + gPokedexView->unk614 = gSaveBlock2.pokedex.unknown1; + gSaveBlock2.pokedex.order = sub_8092E10(taskId, 4); + gPokedexView->unk618 = gSaveBlock2.pokedex.order; + PlaySE(SE_PC_OFF); + gTasks[taskId].func = sub_80927B8; + } + else + { + sub_8091E20(gDexText_Searching); + gTasks[taskId].func = sub_80923FC; + PlaySE(SE_Z_SEARCH); + } + } + else + { + PlaySE(SE_PIN); + gTasks[taskId].func = sub_80925CC; + } + return; + } + + if ((gMain.newKeys & DPAD_LEFT) && r6[gTasks[taskId].data[1]][0] != 0xFF) + { + PlaySE(SE_SELECT); + gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][0]; + sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); + } + if ((gMain.newKeys & DPAD_RIGHT) && r6[gTasks[taskId].data[1]][1] != 0xFF) + { + PlaySE(SE_SELECT); + gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][1]; + sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); + } + if ((gMain.newKeys & DPAD_UP) && r6[gTasks[taskId].data[1]][2] != 0xFF) + { + PlaySE(SE_SELECT); + gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][2]; + sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); + } + if ((gMain.newKeys & DPAD_DOWN) && r6[gTasks[taskId].data[1]][3] != 0xFF) + { + PlaySE(SE_SELECT); + gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][3]; + sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); + } +} + +static void sub_80923FC(u8 taskId) +{ + u8 r10 = sub_8092E10(taskId, 5); + u8 r9 = sub_8092E10(taskId, 4); + u8 r8 = sub_8092E10(taskId, 0); + u8 r6 = sub_8092E10(taskId, 1); + u8 r4 = sub_8092E10(taskId, 2); + u8 r0 = sub_8092E10(taskId, 3); + + sub_8091AF8(r10, r9, r8, r6, r4, r0); + gTasks[taskId].func = sub_80924A4; +} + +static void sub_80924A4(u8 taskId) +{ + if (!IsSEPlaying()) + { + if (gPokedexView->pokemonListCount != 0) + { + PlaySE(SE_SEIKAI); + sub_8091E20(gDexText_SearchComplete); + } + else + { + PlaySE(SE_HAZURE); + sub_8091E20(gDexText_NoMatching); + } + gTasks[taskId].func = sub_8092508; + } +} + +static void sub_8092508(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON) + { + if (gPokedexView->pokemonListCount != 0) + { + gPokedexView->unk64F = 1; + gPokedexView->dexMode = sub_8092E10(taskId, 5); + gPokedexView->dexOrder = sub_8092E10(taskId, 4); + gTasks[taskId].func = sub_80927B8; + PlaySE(SE_PC_OFF); + } + else + { + gTasks[taskId].func = sub_809217C; + PlaySE(SE_BOWA); + } + } +} + +static void sub_80925B4(u16 a, int unused) +{ + sub_814AD7C(0x90, (a * 2 + 1) * 8); +} + +static void sub_80925CC(u8 taskId) +{ + u8 r0; + u16 *p1; + u16 *p2; + + sub_8092C8C(0); + r0 = gTasks[taskId].data[1]; + p1 = &gTasks[taskId].data[gUnknown_083B5A7C[r0].unk4]; + p2 = &gTasks[taskId].data[gUnknown_083B5A7C[r0].unk5]; + gTasks[taskId].data[14] = *p1; + gTasks[taskId].data[15] = *p2; + sub_8092D78(taskId); + CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 11); + sub_80925B4(*p1, 1); + gTasks[taskId].func = sub_8092644; +} + +static void sub_8092644(u8 taskId) +{ + u8 r1; + const struct UnknownStruct2 *r8; + u16 *p1; + u16 *p2; + u16 r2; + bool8 r3; + + r1 = gTasks[taskId].data[1]; + r8 = gUnknown_083B5A7C[r1].unk0; + p1 = &gTasks[taskId].data[gUnknown_083B5A7C[r1].unk4]; + p2 = &gTasks[taskId].data[gUnknown_083B5A7C[r1].unk5]; + r2 = gUnknown_083B5A7C[r1].unk6 - 1; + if (gMain.newKeys & A_BUTTON) + { + sub_814ADC8(); + PlaySE(SE_PIN); + MenuZeroFillWindowRect(18, 1, 28, 12); + sub_8092C8C(1); + gTasks[taskId].func = sub_809217C; + return; + } + if (gMain.newKeys & B_BUTTON) + { + sub_814ADC8(); + PlaySE(SE_BOWA); + MenuZeroFillWindowRect(18, 1, 28, 12); + sub_8092C8C(1); + *p1 = gTasks[taskId].data[14]; + *p2 = gTasks[taskId].data[15]; + gTasks[taskId].func = sub_809217C; + return; + } + r3 = FALSE; + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (*p1 != 0) + { + sub_80925B4(*p1, 0); + (*p1)--; + sub_80925B4(*p1, 1); + r3 = TRUE; + } + else if (*p2 != 0) + { + (*p2)--; + sub_8092D78(taskId); + sub_80925B4(*p1, 1); + r3 = TRUE; + } + if (r3) + { + PlaySE(SE_SELECT); + sub_8091E20(r8[*p1 + *p2].text1); + } + return; + } + if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (*p1 < 5 && *p1 < r2) + { + sub_80925B4(*p1, 0); + (*p1)++; + sub_80925B4(*p1, 1); + r3 = TRUE; + } + else if (r2 > 5 && *p2 < r2 - 5) + { + (*p2)++; + sub_8092D78(taskId); + sub_80925B4(5, 1); + r3 = TRUE; + } + if (r3) + { + PlaySE(SE_SELECT); + sub_8091E20(r8[*p1 + *p2].text1); + } + return; + } +} + +static void sub_80927B8(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = sub_80927F0; +} + +static void sub_80927F0(u8 taskId) +{ + if (!gPaletteFade.active) + DestroyTask(taskId); +} + +#ifdef NONMATCHING +void sub_8092810(u8 a, u8 b, u8 c, u8 d) +{ + u16 i; + + for (i = 0; i < d; i++) + { + ((u16 *)VRAM)[15 * 0x400 + c * 32 + i + b] &= 0xFFF; + ((u16 *)VRAM)[15 * 0x400 + c * 32 + i + b] |= a << 12; + + ((u16 *)VRAM)[15 * 0x400 + (c + 1) * 32 + i + b] &= 0xFFF; + ((u16 *)VRAM)[15 * 0x400 + (c + 1) * 32 + i + b] |= a << 12; + } +} +#else +__attribute__((naked)) +void sub_8092810(u8 a, u8 b, u8 c, u8 d) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r12, r1\n\ + lsls r2, 24\n\ + lsrs r1, r2, 24\n\ + lsls r3, 24\n\ + lsrs r5, r3, 8\n\ + movs r3, 0\n\ + cmp r5, 0\n\ + beq _0809285A\n\ + lsls r7, r1, 6\n\ + ldr r6, _08092860 @ =0x00000fff\n\ + lsls r4, r0, 12\n\ +_08092830:\n\ + mov r0, r12\n\ + adds r1, r0, r3\n\ + lsls r1, 1\n\ + adds r1, r7, r1\n\ + ldr r0, _08092864 @ =0x06007800\n\ + adds r2, r1, r0\n\ + ldrh r0, [r2]\n\ + ands r0, r6\n\ + orrs r0, r4\n\ + strh r0, [r2]\n\ + ldr r0, _08092868 @ =0x06007840\n\ + adds r1, r0\n\ + ldrh r0, [r1]\n\ + ands r0, r6\n\ + orrs r0, r4\n\ + strh r0, [r1]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r0, r5\n\ + bcc _08092830\n\ +_0809285A:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08092860: .4byte 0x00000fff\n\ +_08092864: .4byte 0x06007800\n\ +_08092868: .4byte 0x06007840\n\ + .syntax divided\n"); +} +#endif + +static void sub_809286C(u8 a, u8 b, u8 c) +{ + u8 r5 = (b & 1) | ((c & 1) << 1); + + switch (a) + { + case 0: + case 1: + case 2: + sub_8092810(r5, gUnknown_083B57E4[a].unk4, gUnknown_083B57E4[a].unk5, gUnknown_083B57E4[a].unk6); + break; + case 3: + case 4: + case 7: + case 8: + sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5, gUnknown_083B57FC[a - 3].unk6); + // fall through + case 5: + case 6: + sub_8092810(r5, gUnknown_083B57FC[a - 3].unk7, gUnknown_083B57FC[a - 3].unk8, gUnknown_083B57FC[a - 3].unk9); + break; + case 10: + sub_8092810(r5, gUnknown_083B57FC[2].unk4, gUnknown_083B57FC[2].unk5, gUnknown_083B57FC[2].unk6); + break; + case 9: + if (!IsNationalPokedexEnabled()) + sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5 - 2, gUnknown_083B57FC[a - 3].unk6); + else + sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5, gUnknown_083B57FC[a - 3].unk6); + break; + } +} + +static void sub_8092964(u8 a) +{ + switch (a) + { + case 0: + sub_809286C(0, 0, 0); + sub_809286C(1, 1, 0); + sub_809286C(2, 1, 0); + sub_809286C(3, 1, 0); + sub_809286C(4, 1, 0); + sub_809286C(10, 1, 0); + sub_809286C(5, 1, 0); + sub_809286C(6, 1, 0); + sub_809286C(7, 1, 0); + sub_809286C(8, 1, 0); + sub_809286C(9, 1, 0); + break; + case 1: + sub_809286C(0, 1, 0); + sub_809286C(1, 0, 0); + sub_809286C(2, 1, 0); + sub_809286C(3, 1, 1); + sub_809286C(4, 1, 1); + sub_809286C(10, 1, 1); + sub_809286C(5, 1, 1); + sub_809286C(6, 1, 1); + sub_809286C(7, 1, 0); + sub_809286C(8, 1, 0); + sub_809286C(9, 1, 0); + break; + case 2: + sub_809286C(0, 1, 0); + sub_809286C(1, 1, 0); + sub_809286C(2, 0, 0); + sub_809286C(3, 1, 1); + sub_809286C(4, 1, 1); + sub_809286C(10, 1, 1); + sub_809286C(5, 1, 1); + sub_809286C(6, 1, 1); + sub_809286C(7, 1, 1); + sub_809286C(8, 1, 1); + sub_809286C(9, 1, 1); + break; + } +} + +static void sub_8092AB0(u8 a) +{ + sub_8092964(a); + sub_8091E20(gUnknown_083B57E4[a].text); +} + +static void sub_8092AD4(u8 a, u8 b) +{ + sub_8092964(a); + switch (b) + { + case 0: + sub_809286C(3, 0, 0); + break; + case 1: + sub_809286C(4, 0, 0); + break; + case 2: + sub_809286C(10, 0, 0); + sub_809286C(5, 0, 0); + break; + case 3: + sub_809286C(10, 0, 0); + sub_809286C(6, 0, 0); + break; + case 4: + sub_809286C(7, 0, 0); + break; + case 5: + sub_809286C(8, 0, 0); + break; + case 6: + sub_809286C(9, 0, 0); + break; + } + sub_8091E20(gUnknown_083B57FC[b].text); +} + +static void sub_8092B68(u8 taskId) +{ + u16 var; + + var = gTasks[taskId].data[6] + gTasks[taskId].data[7]; + StringCopy(gStringVar1, gUnknown_083B5910[var].text2); + MenuPrint_PixelCoords(gUnknown_083B5AB2, 45, 16, 1); + + var = gTasks[taskId].data[8] + gTasks[taskId].data[9]; + StringCopy(gStringVar1, gUnknown_083B5968[var].text2); + MenuPrint_PixelCoords(gUnknown_083B5AB2, 45, 32, 1); + + var = gTasks[taskId].data[10] + gTasks[taskId].data[11]; + StringCopy(gStringVar1, gUnknown_083B59C8[var].text2); + MenuPrint_PixelCoords(gUnknown_083B5AAC, 45, 48, 1); + + var = gTasks[taskId].data[12] + gTasks[taskId].data[13]; + StringCopy(gStringVar1, gUnknown_083B59C8[var].text2); + MenuPrint_PixelCoords(gUnknown_083B5AAC, 93, 48, 1); + + var = gTasks[taskId].data[4] + gTasks[taskId].data[5]; + StringCopy(gStringVar1, gUnknown_083B58D8[var].text2); + MenuPrint_PixelCoords(gUnknown_083B5AB2, 45, 64, 1); + + if (IsNationalPokedexEnabled()) + { + var = gTasks[taskId].data[2] + gTasks[taskId].data[3]; + StringCopy(gStringVar1, gUnknown_083B58C0[var].text2); + MenuPrint_PixelCoords(gUnknown_083B5AB2, 45, 80, 1); + } +} + +static void sub_8092C8C(u8 a) +{ + u16 i; + u16 j; + + if (a == 0) + { + *((u16 *)(VRAM + 0x7800 + 0x22)) = 0xC0B; + for (i = 0x12; i < 0x1D; i++) + *((u16 *)(VRAM + 0x7800 + i * 2)) = 0x80D; + *((u16 *)(VRAM + 0x7800 + 0x3A)) = 0x80B; + for (j = 1; j < 13; j++) + { + *((u16 *)(VRAM + 0x7800 + 0x22 + j * 64)) = 0x40A; + for (i = 0x12; i < 0x1D; i++) + *((u16 *)(VRAM + 0x7800 + j * 64 + i * 2)) = 2; + *((u16 *)(VRAM + 0x7800 + 0x3A + j * 64)) = 0xA; + } + *((u16 *)(VRAM + 0x7800 + 0x362)) = 0x40B; + for (i = 0x12; i < 0x1D; i++) + *((u16 *)(VRAM + 0x7800 + 0x340 + i * 2)) = 0xD; + *((u16 *)(VRAM + 0x7800 + 0x37A)) = 0xB; + } + else + { + for (j = 0; j < 14; j++) + { + for (i = 0x11; i < 0x1E; i++) + { + *((u16 *)(VRAM + 0x7800 + j * 64 + i * 2)) = 0x4F; + } + } + } +} + +static void sub_8092D78(u8 taskId) +{ + const struct UnknownStruct2 *r6 = gUnknown_083B5A7C[gTasks[taskId].data[1]].unk0; + const u16 *r8 = &gTasks[taskId].data[gUnknown_083B5A7C[gTasks[taskId].data[1]].unk4]; + const u16 *r7 = &gTasks[taskId].data[gUnknown_083B5A7C[gTasks[taskId].data[1]].unk5]; + u16 i; + u16 j; + + MenuZeroFillWindowRect(18, 1, 28, 12); + for (i = 0, j = *r7; i < 6 && r6[j].text2 != NULL; i++, j++) + { +#ifndef NONMATCHING + j += 0; // Useless statement needed to match +#endif + MenuPrint(r6[j].text2, 18, i * 2 + 1); + } + sub_8091E20(r6[*r8 + *r7].text1); +} + +static u8 sub_8092E10(u8 taskId, u8 b) +{ + const u16 *ptr1 = &gTasks[taskId].data[gUnknown_083B5A7C[b].unk4]; + const u16 *ptr2 = &gTasks[taskId].data[gUnknown_083B5A7C[b].unk5]; + u16 r2 = *ptr1 + *ptr2; + + switch (b) + { + default: + return 0; + case 5: + return gUnknown_083B5A60[r2]; + case 4: + return gUnknown_083B5A62[r2]; + case 0: + if (r2 == 0) + return 0xFF; + else + return r2; + case 1: + if (r2 == 0) + return 0xFF; + else + return r2 - 1; + case 2: + case 3: + return gUnknown_083B5A68[r2]; + } +} + +static void sub_8092EB0(u8 taskId) +{ + u16 r3; + + switch (gPokedexView->unk614) + { + default: + case 0: + r3 = 0; + break; + case 1: + r3 = 1; + break; + } + gTasks[taskId].data[2] = r3; + + switch (gPokedexView->unk618) + { + default: + case 0: + r3 = 0; + break; + case 1: + r3 = 1; + break; + case 2: + r3 = 2; + break; + case 3: + r3 = 3; + break; + case 4: + r3 = 4; + break; + case 5: + r3 = 5; + break; + } + gTasks[taskId].data[4] = r3; +} + +static bool8 sub_8092F44(u8 taskId) +{ + u8 val1 = gTasks[taskId].data[1]; + const u16 *ptr = &gTasks[taskId].data[gUnknown_083B5A7C[val1].unk5]; + u16 val2 = gUnknown_083B5A7C[val1].unk6 - 1; + + if (val2 > 5 && *ptr != 0) + return FALSE; + else + return TRUE; +} + +static bool8 sub_8092F8C(u8 taskId) +{ + u8 val1 = gTasks[taskId].data[1]; + const u16 *ptr = &gTasks[taskId].data[gUnknown_083B5A7C[val1].unk5]; + u16 val2 = gUnknown_083B5A7C[val1].unk6 - 1; + + if (val2 > 5 && *ptr < val2 - 5) + return FALSE; + else + return TRUE; +} + +static void sub_8092FD8(struct Sprite *sprite) +{ + if (gTasks[sprite->data0].func == sub_8092644) + { + u8 val; + + if (sprite->data1 != 0) + { + if (sub_8092F8C(sprite->data0)) + sprite->invisible = TRUE; + else + sprite->invisible = FALSE; + } + else + { + if (sub_8092F44(sprite->data0)) + sprite->invisible = TRUE; + else + sprite->invisible = FALSE; + } + val = sprite->data2 + sprite->data1 * 128; + sprite->pos2.y = gSineTable[val] / 128; + sprite->data2 += 8; + } + else + { + sprite->invisible = TRUE; + } +} + +static void sub_809308C(u8 taskId) +{ + u8 spriteId; + + spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 0; + gSprites[spriteId].callback = sub_8092FD8; + + spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 108, 0); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 1; + gSprites[spriteId].vFlip = TRUE; + gSprites[spriteId].callback = sub_8092FD8; +} diff --git a/src/pokemon/pokedex_cry_screen.c b/src/pokemon/pokedex_cry_screen.c new file mode 100644 index 000000000..92fd832fc --- /dev/null +++ b/src/pokemon/pokedex_cry_screen.c @@ -0,0 +1,85 @@ +#include "global.h" +#include "pokedex_cry_screen.h" +#include "palette.h" +#include "sprite.h" + +struct Unk201C800 { + u8 unk_0; + u8 unk_1; + u8 unk_2; + u8 filler_3; + u16 unk_4; +}; + +#define EWRAM_1C800 (*(struct Unk201C800 *)(unk_201C000 + 0x800)) + +extern u8 unk_201C000[]; + +extern u8 gUnknown_03005E98; + +// data/pokedex_cry_screen.o +extern const u16 gUnknown_083FAE7C[]; +extern const u16 gUnknown_083FAF1C[]; +extern const u8 gUnknown_083FAF3C[]; +extern struct SpriteTemplate gSpriteTemplate_83FB774; +extern const struct SpriteSheet gCryMeterNeedleSpriteSheets[]; +extern const struct SpritePalette gCryMeterNeedleSpritePalettes[]; + +#if ENGLISH +#define CRY_METER_MAP_WIDTH 10 +#elif GERMAN +#define CRY_METER_MAP_WIDTH 32 +#endif + +u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { + int returnVal = FALSE; + + switch (gUnknown_03005E98) + { + case 0: + LZ77UnCompVram(gUnknown_083FAF3C, (void *) (VRAM + cry->unk0)); + LoadPalette(&gUnknown_083FAF1C, cry->paletteNo * 16, 0x20); + gUnknown_03005E98 += 1; + break; + + case 1: + { + void *vram; + u8 row, col; + u32 r12; + int x, y; + + vram = (void *) BG_SCREEN_ADDR(cry->unk2); + + r12 = (u32) (cry->unk0 << 18) >> 23; + + for (row = 0; row < 8; row++) + { + for (col = 0; col < 10; col++) + { + y = row + cry->yPos; + x = col + cry->xPos; + *(u16 *) (vram + (y * 64 + x * 2)) = (gUnknown_083FAE7C[row * CRY_METER_MAP_WIDTH + col] | (cry->paletteNo << 12)) + r12; + } + } + + gUnknown_03005E98 += 1; + break; + } + + case 2: + { + LoadSpriteSheets(gCryMeterNeedleSpriteSheets); + LoadSpritePalettes(gCryMeterNeedleSpritePalettes); + EWRAM_1C800.unk_4 = CreateSprite(&gSpriteTemplate_83FB774, 40 + cry->xPos * 8, 56 + cry->yPos * 8, 1); + EWRAM_1C800.unk_0 = 0x20; + EWRAM_1C800.unk_1 = 0x20; + EWRAM_1C800.unk_2 = 0; + + returnVal = TRUE; + break; + } + } + + return returnVal; +} diff --git a/src/pokemon/pokemon_1.c b/src/pokemon/pokemon_1.c new file mode 100644 index 000000000..c65bfa185 --- /dev/null +++ b/src/pokemon/pokemon_1.c @@ -0,0 +1,666 @@ +#include "global.h" +#include "data2.h" +#include "items.h" +#include "main.h" +#include "pokemon.h" +#include "rng.h" +#include "rom4.h" +#include "species.h" +#include "sprite.h" +#include "string_util.h" +#include "text.h" + +//Extracts the upper 16 bits of a 32-bit number +#define HIHALF(n) (((n) & 0xFFFF0000) >> 16) + +//Extracts the lower 16 bits of a 32-bit number +#define LOHALF(n) ((n) & 0xFFFF) + +extern u8 unk_2000000[]; +extern u16 word_2024E82; + +static EWRAM_DATA u8 byte_2024E88 = 0; + +u8 gPlayerPartyCount; +struct Pokemon gPlayerParty[6]; +u8 gEnemyPartyCount; +struct Pokemon gEnemyParty[6]; + +void ZeroBoxMonData(struct BoxPokemon *boxMon) +{ + u8 *raw = (u8 *)boxMon; + u32 i; + for (i = 0; i < sizeof(struct BoxPokemon); i++) + raw[i] = 0; +} + +void ZeroMonData(struct Pokemon *mon) +{ + u32 arg; + ZeroBoxMonData(&mon->box); + arg = 0; + SetMonData(mon, MON_DATA_STATUS, (u8 *)&arg); + SetMonData(mon, MON_DATA_LEVEL, (u8 *)&arg); + SetMonData(mon, MON_DATA_HP, (u8 *)&arg); + SetMonData(mon, MON_DATA_MAX_HP, (u8 *)&arg); + SetMonData(mon, MON_DATA_ATK, (u8 *)&arg); + SetMonData(mon, MON_DATA_DEF, (u8 *)&arg); + SetMonData(mon, MON_DATA_SPD, (u8 *)&arg); + SetMonData(mon, MON_DATA_SPATK, (u8 *)&arg); + SetMonData(mon, MON_DATA_SPDEF, (u8 *)&arg); + arg = 255; + SetMonData(mon, MON_DATA_MAIL, (u8 *)&arg); +} + +void ZeroPlayerPartyMons(void) +{ + s32 i; + for (i = 0; i < 6; i++) + ZeroMonData(&gPlayerParty[i]); +} + +void ZeroEnemyPartyMons(void) +{ + s32 i; + for (i = 0; i < 6; i++) + ZeroMonData(&gEnemyParty[i]); +} + +void CreateMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) +{ + u32 arg; + ZeroMonData(mon); + CreateBoxMon(&mon->box, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId); + SetMonData(mon, MON_DATA_LEVEL, &level); + arg = 255; + SetMonData(mon, MON_DATA_MAIL, (u8 *)&arg); + CalculateMonStats(mon); +} + +void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) +{ + u8 speciesName[POKEMON_NAME_LENGTH + 1]; + u32 personality; + u32 value; + u16 checksum; + + ZeroBoxMonData(boxMon); + + if (hasFixedPersonality) + personality = fixedPersonality; + else + personality = Random32(); + + SetBoxMonData(boxMon, MON_DATA_PERSONALITY, (u8 *)&personality); + + //Determine original trainer ID + if (otIdType == 2) //Pokemon cannot be shiny + { + u32 shinyValue; + do + { + value = Random32(); + shinyValue = HIHALF(value) ^ LOHALF(value) ^ HIHALF(personality) ^ LOHALF(personality); + } while (shinyValue < 8); + } + else if (otIdType == 1) //Pokemon has a preset OT ID + { + value = fixedOtId; + } + else //Player is the OT + { + value = gSaveBlock2.playerTrainerId[0] + | (gSaveBlock2.playerTrainerId[1] << 8) + | (gSaveBlock2.playerTrainerId[2] << 16) + | (gSaveBlock2.playerTrainerId[3] << 24); + } + + SetBoxMonData(boxMon, MON_DATA_OT_ID, (u8 *)&value); + + checksum = CalculateBoxMonChecksum(boxMon); + SetBoxMonData(boxMon, MON_DATA_CHECKSUM, (u8 *)&checksum); + EncryptBoxMon(boxMon); + GetSpeciesName(speciesName, species); + SetBoxMonData(boxMon, MON_DATA_NICKNAME, speciesName); + SetBoxMonData(boxMon, MON_DATA_LANGUAGE, &gGameLanguage); + SetBoxMonData(boxMon, MON_DATA_OT_NAME, gSaveBlock2.playerName); + SetBoxMonData(boxMon, MON_DATA_SPECIES, (u8 *)&species); + SetBoxMonData(boxMon, MON_DATA_EXP, (u8 *)&gExperienceTables[gBaseStats[species].growthRate][level]); + SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gBaseStats[species].friendship); + value = sav1_map_get_name(); + SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, (u8 *)&value); + SetBoxMonData(boxMon, MON_DATA_MET_LEVEL, &level); + SetBoxMonData(boxMon, MON_DATA_MET_GAME, &gGameVersion); + value = 4; + SetBoxMonData(boxMon, MON_DATA_POKEBALL, (u8 *)&value); + SetBoxMonData(boxMon, MON_DATA_OT_GENDER, &gSaveBlock2.playerGender); + + if (fixedIV < 32) + { + SetBoxMonData(boxMon, MON_DATA_HP_IV, &fixedIV); + SetBoxMonData(boxMon, MON_DATA_ATK_IV, &fixedIV); + SetBoxMonData(boxMon, MON_DATA_DEF_IV, &fixedIV); + SetBoxMonData(boxMon, MON_DATA_SPD_IV, &fixedIV); + SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &fixedIV); + SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &fixedIV); + } + else + { + u32 iv; + value = Random(); + + iv = value & 0x1F; + SetBoxMonData(boxMon, MON_DATA_HP_IV, (u8 *)&iv); + iv = (value & 0x3E0) >> 5; + SetBoxMonData(boxMon, MON_DATA_ATK_IV, (u8 *)&iv); + iv = (value & 0x7C00) >> 10; + SetBoxMonData(boxMon, MON_DATA_DEF_IV, (u8 *)&iv); + + value = Random(); + + iv = value & 0x1F; + SetBoxMonData(boxMon, MON_DATA_SPD_IV, (u8 *)&iv); + iv = (value & 0x3E0) >> 5; + SetBoxMonData(boxMon, MON_DATA_SPATK_IV, (u8 *)&iv); + iv = (value & 0x7C00) >> 10; + SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, (u8 *)&iv); + } + + if (gBaseStats[species].ability2) + { + value = personality & 1; + SetBoxMonData(boxMon, MON_DATA_ALT_ABILITY, (u8 *)&value); + } + + GiveBoxMonInitialMoveset(boxMon); +} + +void CreateMonWithNature(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 nature) +{ + u32 personality; + + do + { + personality = Random32(); + } + while (nature != GetNatureFromPersonality(personality)); + + CreateMon(mon, species, level, fixedIV, 1, personality, 0, 0); +} + +void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 gender, u8 nature, u8 unownLetter) +{ + u32 personality; + + if ((u8)(unownLetter - 1) < 28) + { + u16 actualLetter; + + do + { + personality = Random32(); + actualLetter = ((((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 28); + } + while (nature != GetNatureFromPersonality(personality) + || gender != GetGenderFromSpeciesAndPersonality(species, personality) + || actualLetter != unownLetter - 1); + } + else + { + do + { + personality = Random32(); + } + while (nature != GetNatureFromPersonality(personality) + || gender != GetGenderFromSpeciesAndPersonality(species, personality)); + } + + CreateMon(mon, species, level, fixedIV, 1, personality, 0, 0); +} + +// This is only used to create Wally's Ralts. +void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level) +{ + u32 personality; + u32 otId; + + do + { + otId = Random32(); + personality = Random32(); + } + while (GetGenderFromSpeciesAndPersonality(species, personality) != MON_MALE); + CreateMon(mon, species, level, 32, 1, personality, 1, otId); +} + +void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality) +{ + CreateMon(mon, species, level, 0, 1, personality, 0, 0); + SetMonData(mon, MON_DATA_IVS, (u8 *)&ivs); + CalculateMonStats(mon); +} + +void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u32 otId) +{ + CreateMon(mon, species, level, 0, 0, 0, 1, otId); + SetMonData(mon, MON_DATA_HP_IV, &ivs[0]); + SetMonData(mon, MON_DATA_ATK_IV, &ivs[1]); + SetMonData(mon, MON_DATA_DEF_IV, &ivs[2]); + SetMonData(mon, MON_DATA_SPD_IV, &ivs[3]); + SetMonData(mon, MON_DATA_SPATK_IV, &ivs[4]); + SetMonData(mon, MON_DATA_SPDEF_IV, &ivs[5]); + CalculateMonStats(mon); +} + +void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 evSpread) +{ + s32 i; + s32 statCount = 0; + u16 evAmount; + u8 temp; + + CreateMon(mon, species, level, fixedIV, 0, 0, 0, 0); + + temp = evSpread; + + for (i = 0; i < 6; i++) + { + if (temp & 1) + statCount++; + temp >>= 1; + } + + evAmount = 510 / statCount; + + temp = 1; + + for (i = 0; i < 6; i++) + { + if (evSpread & temp) + SetMonData(mon, MON_DATA_HP_EV + i, (u8 *)&evAmount); + temp <<= 1; + } + + CalculateMonStats(mon); +} + +void sub_803ADE8(struct Pokemon *mon, struct UnknownPokemonStruct *src) +{ + s32 i; + u8 nickname[POKEMON_NAME_LENGTH + 1]; + u8 language; + u8 value; + + CreateMon(mon, src->species, src->level, 0, 1, src->personality, 1, src->otId); + + for (i = 0; i < 4; i++) + SetMonMoveSlot(mon, src->moves[i], i); + + SetMonData(mon, MON_DATA_PP_BONUSES, (u8 *)&src->ppBonuses); + SetMonData(mon, MON_DATA_HELD_ITEM, (u8 *)&src->heldItem); + + StringCopy(nickname, src->nickname); + + if (nickname[0] == 0xFC && nickname[1] == 0x15) + language = LANGUAGE_JAPANESE; + else + language = GAME_LANGUAGE; + + SetMonData(mon, MON_DATA_LANGUAGE, &language); + StripExtCtrlCodes(nickname); + SetMonData(mon, MON_DATA_NICKNAME, nickname); + SetMonData(mon, MON_DATA_FRIENDSHIP, (u8 *)&src->friendship); + SetMonData(mon, MON_DATA_HP_EV, (u8 *)&src->hpEV); + SetMonData(mon, MON_DATA_ATK_EV, (u8 *)&src->attackEV); + SetMonData(mon, MON_DATA_DEF_EV, (u8 *)&src->defenseEV); + SetMonData(mon, MON_DATA_SPD_EV, (u8 *)&src->speedEV); + SetMonData(mon, MON_DATA_SPATK_EV, (u8 *)&src->spAttackEV); + SetMonData(mon, MON_DATA_SPDEF_EV, (u8 *)&src->spDefenseEV); + value = src->altAbility; + SetMonData(mon, MON_DATA_ALT_ABILITY, &value); + value = src->hpIV; + SetMonData(mon, MON_DATA_HP_IV, &value); + value = src->attackIV; + SetMonData(mon, MON_DATA_ATK_IV, &value); + value = src->defenseIV; + SetMonData(mon, MON_DATA_DEF_IV, &value); + value = src->speedIV; + SetMonData(mon, MON_DATA_SPD_IV, &value); + value = src->spAttackIV; + SetMonData(mon, MON_DATA_SPATK_IV, &value); + value = src->spDefenseIV; + SetMonData(mon, MON_DATA_SPDEF_IV, &value); + CalculateMonStats(mon); +} + +void sub_803AF78(struct Pokemon *mon, struct UnknownPokemonStruct *dest) +{ + s32 i; + u16 heldItem; + + dest->species = GetMonData(mon, MON_DATA_SPECIES, NULL); + heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); + + if (heldItem == ITEM_ENIGMA_BERRY) + heldItem = 0; + + dest->heldItem = heldItem; + + for (i = 0; i < 4; i++) + dest->moves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, NULL); + + dest->level = GetMonData(mon, MON_DATA_LEVEL, NULL); + dest->ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); + dest->otId = GetMonData(mon, MON_DATA_OT_ID, NULL); + dest->hpEV = GetMonData(mon, MON_DATA_HP_EV, NULL); + dest->attackEV = GetMonData(mon, MON_DATA_ATK_EV, NULL); + dest->defenseEV = GetMonData(mon, MON_DATA_DEF_EV, NULL); + dest->speedEV = GetMonData(mon, MON_DATA_SPD_EV, NULL); + dest->spAttackEV = GetMonData(mon, MON_DATA_SPATK_EV, NULL); + dest->spDefenseEV = GetMonData(mon, MON_DATA_SPDEF_EV, NULL); + dest->friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL); + dest->hpIV = GetMonData(mon, MON_DATA_HP_IV, NULL); + dest->attackIV = GetMonData(mon, MON_DATA_ATK_IV, NULL); + dest->defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL); + dest->speedIV = GetMonData(mon, MON_DATA_SPD_IV, NULL); + dest->spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL); + dest->spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL); + dest->altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL); + dest->personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + GetMonData(mon, MON_DATA_NICKNAME, dest->nickname); +} + +u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon) +{ + u16 checksum = 0; + union PokemonSubstruct *substruct0 = GetSubstruct(boxMon, boxMon->personality, 0); + union PokemonSubstruct *substruct1 = GetSubstruct(boxMon, boxMon->personality, 1); + union PokemonSubstruct *substruct2 = GetSubstruct(boxMon, boxMon->personality, 2); + union PokemonSubstruct *substruct3 = GetSubstruct(boxMon, boxMon->personality, 3); + s32 i; + + for (i = 0; i < 6; i++) + checksum += substruct0->raw[i]; + + for (i = 0; i < 6; i++) + checksum += substruct1->raw[i]; + + for (i = 0; i < 6; i++) + checksum += substruct2->raw[i]; + + for (i = 0; i < 6; i++) + checksum += substruct3->raw[i]; + + return checksum; +} + +#define CALC_STAT(base, iv, ev, statIndex, field) \ +{ \ + u8 baseStat = gBaseStats[species].base; \ + s32 n = (((2 * baseStat + iv + ev / 4) * level) / 100) + 5; \ + u8 nature = GetNature(mon); \ + n = nature_stat_mod(nature, n, statIndex); \ + SetMonData(mon, field, (u8 *)&n); \ +} + +void CalculateMonStats(struct Pokemon *mon) +{ + s32 oldMaxHP = GetMonData(mon, MON_DATA_MAX_HP, NULL); + s32 currentHP = GetMonData(mon, MON_DATA_HP, NULL); + s32 hpIV = GetMonData(mon, MON_DATA_HP_IV, NULL); + s32 hpEV = GetMonData(mon, MON_DATA_HP_EV, NULL); + s32 attackIV = GetMonData(mon, MON_DATA_ATK_IV, NULL); + s32 attackEV = GetMonData(mon, MON_DATA_ATK_EV, NULL); + s32 defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL); + s32 defenseEV = GetMonData(mon, MON_DATA_DEF_EV, NULL); + s32 speedIV = GetMonData(mon, MON_DATA_SPD_IV, NULL); + s32 speedEV = GetMonData(mon, MON_DATA_SPD_EV, NULL); + s32 spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL); + s32 spAttackEV = GetMonData(mon, MON_DATA_SPATK_EV, NULL); + s32 spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL); + s32 spDefenseEV = GetMonData(mon, MON_DATA_SPDEF_EV, NULL); + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + s32 level = GetLevelFromMonExp(mon); + s32 newMaxHP; + + SetMonData(mon, MON_DATA_LEVEL, (u8 *)&level); + + if (species == SPECIES_SHEDINJA) + { + newMaxHP = 1; + } + else + { + s32 n = 2 * gBaseStats[species].baseHP + hpIV; + newMaxHP = (((n + hpEV / 4) * level) / 100) + level + 10; + } + + unk_2000000[0x160FA] = newMaxHP - oldMaxHP; + if (unk_2000000[0x160FA] == 0) + unk_2000000[0x160FA] = 1; + + SetMonData(mon, MON_DATA_MAX_HP, (u8 *)&newMaxHP); + + CALC_STAT(baseAttack, attackIV, attackEV, 1, MON_DATA_ATK) + CALC_STAT(baseDefense, defenseIV, defenseEV, 2, MON_DATA_DEF) + CALC_STAT(baseSpeed, speedIV, speedEV, 3, MON_DATA_SPD) + CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, 4, MON_DATA_SPATK) + CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, 5, MON_DATA_SPDEF) + + if (species == SPECIES_SHEDINJA) + { + if (currentHP != 0 || oldMaxHP == 0) + currentHP = 1; + else + return; + } + else + { + if (currentHP == 0 && oldMaxHP == 0) + currentHP = newMaxHP; + else if (currentHP != 0) + currentHP += newMaxHP - oldMaxHP; + else + return; + } + + SetMonData(mon, MON_DATA_HP, (u8 *)¤tHP); +} + +void sub_803B4B4(struct Pokemon *src, struct Pokemon *dest) +{ + u32 value = 0; + memcpy(&dest->box, &src->box, sizeof(struct BoxPokemon)); + SetMonData(dest, MON_DATA_STATUS, (u8 *)&value); + SetMonData(dest, MON_DATA_HP, (u8 *)&value); + SetMonData(dest, MON_DATA_MAX_HP, (u8 *)&value); + value = 255; + SetMonData(dest, MON_DATA_MAIL, (u8 *)&value); + CalculateMonStats(dest); +} + +u8 GetLevelFromMonExp(struct Pokemon *mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + u32 exp = GetMonData(mon, MON_DATA_EXP, NULL); + s32 level = 1; + + while (level <= 100 && gExperienceTables[gBaseStats[species].growthRate][level] <= exp) + level++; + + return level - 1; +} + +u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon) +{ + u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL); + u32 exp = GetBoxMonData(boxMon, MON_DATA_EXP, NULL); + s32 level = 1; + + while (level <= 100 && gExperienceTables[gBaseStats[species].growthRate][level] <= exp) + level++; + + return level - 1; +} + +u16 GiveMoveToMon(struct Pokemon *mon, u16 move) +{ + return GiveMoveToBoxMon(&mon->box, move); +} + +u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) +{ + s32 i; + for (i = 0; i < 4; i++) + { + u16 existingMove = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, NULL); + if (!existingMove) + { + SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, (u8 *)&move); + SetBoxMonData(boxMon, MON_DATA_PP1 + i, &gBattleMoves[move].pp); + return move; + } + if (existingMove == move) + return -2; + } + return -1; +} + +u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (!mon->moves[i]) + { + mon->moves[i] = move; + mon->pp[i] = gBattleMoves[move].pp; + return move; + } + } + + return -1; +} + +void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot) +{ + SetMonData(mon, MON_DATA_MOVE1 + slot, (u8 *)&move); + SetMonData(mon, MON_DATA_PP1 + slot, &gBattleMoves[move].pp); +} + +void SetBattleMonMoveSlot(struct BattlePokemon *mon, u16 move, u8 slot) +{ + mon->moves[slot] = move; + mon->pp[slot] = gBattleMoves[move].pp; +} + +void GiveMonInitialMoveset(struct Pokemon *mon) +{ + GiveBoxMonInitialMoveset(&mon->box); +} + +void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon) +{ + u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL); + s32 level = GetLevelFromBoxMonExp(boxMon); + s32 i; + + for (i = 0; gLevelUpLearnsets[species][i] != (u16)-1; i++) + { + u16 moveLevel; + u16 move; + + moveLevel = (gLevelUpLearnsets[species][i] & 0xFE00); + + if (moveLevel > (level << 9)) + break; + + move = (gLevelUpLearnsets[species][i] & 0x1FF); + + if (GiveMoveToBoxMon(boxMon, move) == (u16)-1) + DeleteFirstMoveAndGiveMoveToBoxMon(boxMon, move); + } +} + +u16 sub_803B7C8(struct Pokemon *mon, u8 a2) +{ + u32 retVal = 0; + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL); + + if (a2) + { + byte_2024E88 = retVal; + + while ((gLevelUpLearnsets[species][byte_2024E88] & 0xFE00) != (level << 9)) + { + byte_2024E88++; + if (gLevelUpLearnsets[species][byte_2024E88] == (u16)-1) + return 0; + } + } + + if ((gLevelUpLearnsets[species][byte_2024E88] & 0xFE00) == (level << 9)) + { + word_2024E82 = (gLevelUpLearnsets[species][byte_2024E88] & 0x1FF); + byte_2024E88++; + retVal = GiveMoveToMon(mon, word_2024E82); + } + + return retVal; +} + +void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move) +{ + s32 i; + u16 moves[4]; + u8 pp[4]; + u8 ppBonuses; + + for (i = 0; i < 3; i++) + { + moves[i] = GetMonData(mon, MON_DATA_MOVE2 + i, NULL); + pp[i] = GetMonData(mon, MON_DATA_PP2 + i, NULL); + } + + ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); + ppBonuses >>= 2; + moves[3] = move; + pp[3] = gBattleMoves[move].pp; + + for (i = 0; i < 4; i++) + { + SetMonData(mon, MON_DATA_MOVE1 + i, (u8 *)&moves[i]); + SetMonData(mon, MON_DATA_PP1 + i, &pp[i]); + } + + SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses); +} + +void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) +{ + s32 i; + u16 moves[4]; + u8 pp[4]; + u8 ppBonuses; + + for (i = 0; i < 3; i++) + { + moves[i] = GetBoxMonData(boxMon, MON_DATA_MOVE2 + i, NULL); + pp[i] = GetBoxMonData(boxMon, MON_DATA_PP2 + i, NULL); + } + + ppBonuses = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, NULL); + ppBonuses >>= 2; + moves[3] = move; + pp[3] = gBattleMoves[move].pp; + + for (i = 0; i < 4; i++) + { + SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, (u8 *)&moves[i]); + SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp[i]); + } + + SetBoxMonData(boxMon, MON_DATA_PP_BONUSES, &ppBonuses); +} diff --git a/src/pokemon/pokemon_2.c b/src/pokemon/pokemon_2.c new file mode 100644 index 000000000..a77edbdb2 --- /dev/null +++ b/src/pokemon/pokemon_2.c @@ -0,0 +1,1312 @@ +#include "global.h" +#include "battle.h" +#include "data2.h" +#include "event_data.h" +#include "main.h" +#include "pokemon.h" +#include "rng.h" +#include "rom_8077ABC.h" +#include "species.h" +#include "sprite.h" +#include "string_util.h" +#include "strings2.h" +#include "text.h" +#include "util.h" + +extern u8 gPlayerPartyCount; +extern u8 gEnemyPartyCount; + +extern u16 unk_20160BC[]; +extern struct SecretBaseRecord gSecretBaseRecord; +extern u32 dword_2017100[]; +extern u16 gBattleTypeFlags; +extern u8 gActiveBank; +extern struct BattlePokemon gBattleMons[4]; +extern u16 gCurrentMove; +extern u8 gLastUsedAbility; +extern u8 gBankAttacker; +extern u8 gBankTarget; +extern u8 gAbsentBankFlags; +extern u8 gXXX_CritRelated; +extern u16 gBattleWeather; +extern struct BattleEnigmaBerry gEnigmaBerries[]; +extern u16 gBattleMovePower; +extern u16 gTrainerBattleOpponent; +extern struct PokemonStorage gPokemonStorage; + +EWRAM_DATA struct SpriteTemplate gUnknown_02024E8C = {0}; + +extern u8 gBadEggNickname[]; +extern const struct SpriteTemplate gSpriteTemplate_8208288[]; +//array of pointers to arrays of pointers to union AnimCmd (We probably need to typedef this.) +extern u8 gTrainerClassToPicIndex[]; +extern u8 gTrainerClassToNameIndex[]; +extern u8 gSecretBaseTrainerClasses[][5]; +extern u8 gUnknown_08208238[]; +extern u8 gUnknown_0820823C[]; +extern u8 gStatStageRatios[][2]; +extern u8 gHoldEffectToType[][2]; + +u8 CountAliveMons(u8 a1) +{ + s32 i; + u8 retVal = 0; + + switch (a1) + { + case 0: + for (i = 0; i < 4; i++) + { + if (i != gActiveBank && !(gAbsentBankFlags & gBitTable[i])) + retVal++; + } + break; + case 1: + for (i = 0; i < 4; i++) + { + if (GetBankSide(i) == GetBankSide(gBankAttacker) && !(gAbsentBankFlags & gBitTable[i])) + retVal++; + } + break; + case 2: + for (i = 0; i < 4; i++) + { + if (GetBankSide(i) == GetBankSide(gBankTarget) && !(gAbsentBankFlags & gBitTable[i])) + retVal++; + } + break; + } + + 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); + } + } + + 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); + } + else + { + return GetBankByPlayerAI(status); + } + } + else + { + 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) +{ + return GetBoxMonGender(&mon->box); +} + +u8 GetBoxMonGender(struct BoxPokemon *boxMon) +{ + u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL); + u32 personality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY, NULL); + + switch (gBaseStats[species].genderRatio) + { + case MON_MALE: + case MON_FEMALE: + case MON_GENDERLESS: + return gBaseStats[species].genderRatio; + } + + if (gBaseStats[species].genderRatio > (personality & 0xFF)) + return MON_FEMALE; + else + return MON_MALE; +} + +u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality) +{ + switch (gBaseStats[species].genderRatio) + { + case MON_MALE: + case MON_FEMALE: + case MON_GENDERLESS: + return gBaseStats[species].genderRatio; + } + + if (gBaseStats[species].genderRatio > (personality & 0xFF)) + return MON_FEMALE; + else + return MON_MALE; +} + +void GetMonSpriteTemplate_803C56C(u16 species, u8 a2) +{ + gUnknown_02024E8C = gSpriteTemplate_8208288[a2]; + gUnknown_02024E8C.paletteTag = species; + gUnknown_02024E8C.anims = (const union AnimCmd *const *)gSpriteAnimTable_81E7C64; //Why do I have to cast this? +} + +void GetMonSpriteTemplate_803C5A0(u16 species, u8 a2) +{ + gUnknown_02024E8C = gSpriteTemplate_8208288[a2]; + gUnknown_02024E8C.paletteTag = species; + if (a2 == 0 || a2 == 2) + gUnknown_02024E8C.anims = gUnknown_081ECACC[species]; + else + gUnknown_02024E8C.anims = gUnknown_081EC2A4[species]; +} + +void EncryptBoxMon(struct BoxPokemon *boxMon) +{ + u32 i; + for (i = 0; i < 12; i++) + { + boxMon->secure.raw[i] ^= boxMon->personality; + boxMon->secure.raw[i] ^= boxMon->otId; + } +} + +void DecryptBoxMon(struct BoxPokemon *boxMon) +{ + u32 i; + for (i = 0; i < 12; i++) + { + boxMon->secure.raw[i] ^= boxMon->otId; + boxMon->secure.raw[i] ^= boxMon->personality; + } +} + +#define SUBSTRUCT_CASE(n, v1, v2, v3, v4) \ +case n: \ + switch (substructType) \ + { \ + case 0: \ + substruct = &substructs ## n [v1]; \ + break; \ + case 1: \ + substruct = &substructs ## n [v2]; \ + break; \ + case 2: \ + substruct = &substructs ## n [v3]; \ + break; \ + case 3: \ + substruct = &substructs ## n [v4]; \ + break; \ + } \ + break; + +union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 personality, u8 substructType) +{ + union PokemonSubstruct *substruct = NULL; + + union PokemonSubstruct *substructs0 = boxMon->secure.substructs; + union PokemonSubstruct *substructs1 = boxMon->secure.substructs; + union PokemonSubstruct *substructs2 = boxMon->secure.substructs; + union PokemonSubstruct *substructs3 = boxMon->secure.substructs; + union PokemonSubstruct *substructs4 = boxMon->secure.substructs; + union PokemonSubstruct *substructs5 = boxMon->secure.substructs; + union PokemonSubstruct *substructs6 = boxMon->secure.substructs; + union PokemonSubstruct *substructs7 = boxMon->secure.substructs; + union PokemonSubstruct *substructs8 = boxMon->secure.substructs; + union PokemonSubstruct *substructs9 = boxMon->secure.substructs; + union PokemonSubstruct *substructs10 = boxMon->secure.substructs; + union PokemonSubstruct *substructs11 = boxMon->secure.substructs; + union PokemonSubstruct *substructs12 = boxMon->secure.substructs; + union PokemonSubstruct *substructs13 = boxMon->secure.substructs; + union PokemonSubstruct *substructs14 = boxMon->secure.substructs; + union PokemonSubstruct *substructs15 = boxMon->secure.substructs; + union PokemonSubstruct *substructs16 = boxMon->secure.substructs; + union PokemonSubstruct *substructs17 = boxMon->secure.substructs; + union PokemonSubstruct *substructs18 = boxMon->secure.substructs; + union PokemonSubstruct *substructs19 = boxMon->secure.substructs; + union PokemonSubstruct *substructs20 = boxMon->secure.substructs; + union PokemonSubstruct *substructs21 = boxMon->secure.substructs; + union PokemonSubstruct *substructs22 = boxMon->secure.substructs; + union PokemonSubstruct *substructs23 = boxMon->secure.substructs; + + switch (personality % 24) + { + SUBSTRUCT_CASE( 0,0,1,2,3) + SUBSTRUCT_CASE( 1,0,1,3,2) + SUBSTRUCT_CASE( 2,0,2,1,3) + SUBSTRUCT_CASE( 3,0,3,1,2) + SUBSTRUCT_CASE( 4,0,2,3,1) + SUBSTRUCT_CASE( 5,0,3,2,1) + SUBSTRUCT_CASE( 6,1,0,2,3) + SUBSTRUCT_CASE( 7,1,0,3,2) + SUBSTRUCT_CASE( 8,2,0,1,3) + SUBSTRUCT_CASE( 9,3,0,1,2) + SUBSTRUCT_CASE(10,2,0,3,1) + SUBSTRUCT_CASE(11,3,0,2,1) + SUBSTRUCT_CASE(12,1,2,0,3) + SUBSTRUCT_CASE(13,1,3,0,2) + SUBSTRUCT_CASE(14,2,1,0,3) + SUBSTRUCT_CASE(15,3,1,0,2) + SUBSTRUCT_CASE(16,2,3,0,1) + SUBSTRUCT_CASE(17,3,2,0,1) + SUBSTRUCT_CASE(18,1,2,3,0) + SUBSTRUCT_CASE(19,1,3,2,0) + SUBSTRUCT_CASE(20,2,1,3,0) + SUBSTRUCT_CASE(21,3,1,2,0) + SUBSTRUCT_CASE(22,2,3,1,0) + SUBSTRUCT_CASE(23,3,2,1,0) + } + + return substruct; +} + +u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data) +{ + switch (field) + { + case MON_DATA_STATUS: + return mon->status; + case MON_DATA_LEVEL: + return mon->level; + case MON_DATA_HP: + return mon->hp; + case MON_DATA_MAX_HP: + return mon->maxHP; + case MON_DATA_ATK: + return mon->attack; + case MON_DATA_DEF: + return mon->defense; + case MON_DATA_SPD: + return mon->speed; + case MON_DATA_SPATK: + return mon->spAttack; + case MON_DATA_SPDEF: + return mon->spDefense; + case MON_DATA_MAIL: + return mon->mail; + default: + return GetBoxMonData(&mon->box, field, data); + } +} + +u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) +{ + u32 retVal = 0; + struct PokemonSubstruct0 *substruct0 = NULL; + struct PokemonSubstruct1 *substruct1 = NULL; + struct PokemonSubstruct2 *substruct2 = NULL; + struct PokemonSubstruct3 *substruct3 = NULL; + + if (field > MON_DATA_10) + { + substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0); + substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1); + substruct2 = &(GetSubstruct(boxMon, boxMon->personality, 2)->type2); + substruct3 = &(GetSubstruct(boxMon, boxMon->personality, 3)->type3); + + DecryptBoxMon(boxMon); + + if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum) + { + boxMon->isBadEgg = 1; + boxMon->isEgg = 1; + substruct3->isEgg = 1; + } + } + + switch (field) + { + case MON_DATA_PERSONALITY: + retVal = boxMon->personality; + break; + case MON_DATA_OT_ID: + retVal = boxMon->otId; + break; + case MON_DATA_NICKNAME: + { + if (boxMon->isBadEgg) + { + StringCopy(data, gBadEggNickname); + retVal = StringLength(data); + } + else if (boxMon->isEgg) + { + StringCopy(data, gEggNickname); + retVal = StringLength(data); + } + else + { + retVal = 0; + + while (retVal < POKEMON_NAME_LENGTH && boxMon->nickname[retVal] != EOS) + { + data[retVal] = boxMon->nickname[retVal]; + retVal++; + } + + data[retVal] = EOS; + ConvertInternationalString(data, boxMon->language); + retVal = StringLength(data); + } + break; + } + case MON_DATA_LANGUAGE: + retVal = boxMon->language; + break; + case MON_DATA_SANITY_BIT1: + retVal = boxMon->isBadEgg; + break; + case MON_DATA_SANITY_BIT2: + retVal = boxMon->hasSpecies; + break; + case MON_DATA_SANITY_BIT3: + retVal = boxMon->isEgg; + break; + case MON_DATA_OT_NAME: + { + retVal = 0; + + while (retVal < OT_NAME_LENGTH && boxMon->otName[retVal] != EOS) + { + data[retVal] = boxMon->otName[retVal]; + retVal++; + } + + data[retVal] = EOS; + break; + } + case MON_DATA_MARKINGS: + retVal = boxMon->markings; + break; + case MON_DATA_CHECKSUM: + retVal = boxMon->checksum; + break; + case MON_DATA_10: + retVal = boxMon->unknown; + break; + case MON_DATA_SPECIES: + retVal = boxMon->isBadEgg ? SPECIES_EGG : substruct0->species; + break; + case MON_DATA_HELD_ITEM: + retVal = substruct0->heldItem; + break; + case MON_DATA_EXP: + retVal = substruct0->experience; + break; + case MON_DATA_PP_BONUSES: + retVal = substruct0->ppBonuses; + break; + case MON_DATA_FRIENDSHIP: + retVal = substruct0->friendship; + break; + case MON_DATA_MOVE1: + case MON_DATA_MOVE2: + case MON_DATA_MOVE3: + case MON_DATA_MOVE4: + retVal = substruct1->moves[field - MON_DATA_MOVE1]; + break; + case MON_DATA_PP1: + case MON_DATA_PP2: + case MON_DATA_PP3: + case MON_DATA_PP4: + retVal = substruct1->pp[field - MON_DATA_PP1]; + break; + case MON_DATA_HP_EV: + retVal = substruct2->hpEV; + break; + case MON_DATA_ATK_EV: + retVal = substruct2->attackEV; + break; + case MON_DATA_DEF_EV: + retVal = substruct2->defenseEV; + break; + case MON_DATA_SPD_EV: + retVal = substruct2->speedEV; + break; + case MON_DATA_SPATK_EV: + retVal = substruct2->spAttackEV; + break; + case MON_DATA_SPDEF_EV: + retVal = substruct2->spDefenseEV; + break; + case MON_DATA_COOL: + retVal = substruct2->cool; + break; + case MON_DATA_BEAUTY: + retVal = substruct2->beauty; + break; + case MON_DATA_CUTE: + retVal = substruct2->cute; + break; + case MON_DATA_SMART: + retVal = substruct2->smart; + break; + case MON_DATA_TOUGH: + retVal = substruct2->tough; + break; + case MON_DATA_SHEEN: + retVal = substruct2->sheen; + break; + case MON_DATA_POKERUS: + retVal = substruct3->pokerus; + break; + case MON_DATA_MET_LOCATION: + retVal = substruct3->metLocation; + break; + case MON_DATA_MET_LEVEL: + retVal = substruct3->metLevel; + break; + case MON_DATA_MET_GAME: + retVal = substruct3->metGame; + break; + case MON_DATA_POKEBALL: + retVal = substruct3->pokeball; + break; + case MON_DATA_OT_GENDER: + retVal = substruct3->otGender; + break; + case MON_DATA_HP_IV: + retVal = substruct3->hpIV; + break; + case MON_DATA_ATK_IV: + retVal = substruct3->attackIV; + break; + case MON_DATA_DEF_IV: + retVal = substruct3->defenseIV; + break; + case MON_DATA_SPD_IV: + retVal = substruct3->speedIV; + break; + case MON_DATA_SPATK_IV: + retVal = substruct3->spAttackIV; + break; + case MON_DATA_SPDEF_IV: + retVal = substruct3->spDefenseIV; + break; + case MON_DATA_IS_EGG: + retVal = substruct3->isEgg; + break; + case MON_DATA_ALT_ABILITY: + retVal = substruct3->altAbility; + break; + case MON_DATA_COOL_RIBBON: + retVal = substruct3->coolRibbon; + break; + case MON_DATA_BEAUTY_RIBBON: + retVal = substruct3->beautyRibbon; + break; + case MON_DATA_CUTE_RIBBON: + retVal = substruct3->cuteRibbon; + break; + case MON_DATA_SMART_RIBBON: + retVal = substruct3->smartRibbon; + break; + case MON_DATA_TOUGH_RIBBON: + retVal = substruct3->toughRibbon; + break; + case MON_DATA_CHAMPION_RIBBON: + retVal = substruct3->championRibbon; + break; + case MON_DATA_WINNING_RIBBON: + retVal = substruct3->winningRibbon; + break; + case MON_DATA_VICTORY_RIBBON: + retVal = substruct3->victoryRibbon; + break; + case MON_DATA_ARTIST_RIBBON: + retVal = substruct3->artistRibbon; + break; + case MON_DATA_EFFORT_RIBBON: + retVal = substruct3->effortRibbon; + break; + case MON_DATA_GIFT_RIBBON_1: + retVal = substruct3->giftRibbon1; + break; + case MON_DATA_GIFT_RIBBON_2: + retVal = substruct3->giftRibbon2; + break; + case MON_DATA_GIFT_RIBBON_3: + retVal = substruct3->giftRibbon3; + break; + case MON_DATA_GIFT_RIBBON_4: + retVal = substruct3->giftRibbon4; + break; + case MON_DATA_GIFT_RIBBON_5: + retVal = substruct3->giftRibbon5; + break; + case MON_DATA_GIFT_RIBBON_6: + retVal = substruct3->giftRibbon6; + break; + case MON_DATA_GIFT_RIBBON_7: + retVal = substruct3->giftRibbon7; + break; + case MON_DATA_FATEFUL_ENCOUNTER: + retVal = substruct3->fatefulEncounter; + break; + case MON_DATA_SPECIES2: + retVal = substruct0->species; + if (substruct0->species && (substruct3->isEgg || boxMon->isBadEgg)) + retVal = SPECIES_EGG; + break; + case MON_DATA_IVS: + retVal = substruct3->hpIV | (substruct3->attackIV << 5) | (substruct3->defenseIV << 10) | (substruct3->speedIV << 15) | (substruct3->spAttackIV << 20) | (substruct3->spDefenseIV << 25); + break; + case MON_DATA_KNOWN_MOVES: + if (substruct0->species && !substruct3->isEgg) + { + u16 *moves = (u16 *)data; + s32 i = 0; + + while (moves[i] != 355) + { + u16 move = moves[i]; + if (substruct1->moves[0] == move + || substruct1->moves[1] == move + || substruct1->moves[2] == move + || substruct1->moves[3] == move) + retVal |= gBitTable[i]; + i++; + } + } + break; + case MON_DATA_RIBBON_COUNT: + retVal = 0; + if (substruct0->species && !substruct3->isEgg) + { + retVal += substruct3->coolRibbon; + retVal += substruct3->beautyRibbon; + retVal += substruct3->cuteRibbon; + retVal += substruct3->smartRibbon; + retVal += substruct3->toughRibbon; + retVal += substruct3->championRibbon; + retVal += substruct3->winningRibbon; + retVal += substruct3->victoryRibbon; + retVal += substruct3->artistRibbon; + retVal += substruct3->effortRibbon; + retVal += substruct3->giftRibbon1; + retVal += substruct3->giftRibbon2; + retVal += substruct3->giftRibbon3; + retVal += substruct3->giftRibbon4; + retVal += substruct3->giftRibbon5; + retVal += substruct3->giftRibbon6; + retVal += substruct3->giftRibbon7; + } + break; + case MON_DATA_RIBBONS: + retVal = 0; + if (substruct0->species && !substruct3->isEgg) + { + retVal = substruct3->championRibbon + | (substruct3->coolRibbon << 1) + | (substruct3->beautyRibbon << 4) + | (substruct3->cuteRibbon << 7) + | (substruct3->smartRibbon << 10) + | (substruct3->toughRibbon << 13) + | (substruct3->winningRibbon << 16) + | (substruct3->victoryRibbon << 17) + | (substruct3->artistRibbon << 18) + | (substruct3->effortRibbon << 19) + | (substruct3->giftRibbon1 << 20) + | (substruct3->giftRibbon2 << 21) + | (substruct3->giftRibbon3 << 22) + | (substruct3->giftRibbon4 << 23) + | (substruct3->giftRibbon5 << 24) + | (substruct3->giftRibbon6 << 25) + | (substruct3->giftRibbon7 << 26); + } + break; + default: + break; + } + + if (field > MON_DATA_10) + EncryptBoxMon(boxMon); + + return retVal; +} + +#define SET8(lhs) (lhs) = *data +#define SET16(lhs) (lhs) = data[0] + (data[1] << 8) +#define SET32(lhs) (lhs) = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24) + +void SetMonData(struct Pokemon *mon, s32 field, const u8 *data) +{ + switch (field) + { + case MON_DATA_STATUS: + SET32(mon->status); + break; + case MON_DATA_LEVEL: + SET8(mon->level); + break; + case MON_DATA_HP: + SET16(mon->hp); + break; + case MON_DATA_MAX_HP: + SET16(mon->maxHP); + break; + case MON_DATA_ATK: + SET16(mon->attack); + break; + case MON_DATA_DEF: + SET16(mon->defense); + break; + case MON_DATA_SPD: + SET16(mon->speed); + break; + case MON_DATA_SPATK: + SET16(mon->spAttack); + break; + case MON_DATA_SPDEF: + SET16(mon->spDefense); + break; + case MON_DATA_MAIL: + SET8(mon->mail); + break; + case MON_DATA_SPECIES2: + break; + default: + SetBoxMonData(&mon->box, field, data); + break; + } +} + +void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const u8 *data) +{ + struct PokemonSubstruct0 *substruct0 = NULL; + struct PokemonSubstruct1 *substruct1 = NULL; + struct PokemonSubstruct2 *substruct2 = NULL; + struct PokemonSubstruct3 *substruct3 = NULL; + + if (field > MON_DATA_10) + { + substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0); + substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1); + substruct2 = &(GetSubstruct(boxMon, boxMon->personality, 2)->type2); + substruct3 = &(GetSubstruct(boxMon, boxMon->personality, 3)->type3); + + DecryptBoxMon(boxMon); + + if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum) + { + boxMon->isBadEgg = 1; + boxMon->isEgg = 1; + substruct3->isEgg = 1; + EncryptBoxMon(boxMon); + return; + } + } + + switch (field) + { + case MON_DATA_PERSONALITY: + SET32(boxMon->personality); + break; + case MON_DATA_OT_ID: + SET32(boxMon->otId); + break; + case MON_DATA_NICKNAME: + { + s32 i; + for (i = 0; i < POKEMON_NAME_LENGTH; i++) + boxMon->nickname[i] = data[i]; + break; + } + case MON_DATA_LANGUAGE: + SET8(boxMon->language); + break; + case MON_DATA_SANITY_BIT1: + SET8(boxMon->isBadEgg); + break; + case MON_DATA_SANITY_BIT2: + SET8(boxMon->hasSpecies); + break; + case MON_DATA_SANITY_BIT3: + SET8(boxMon->isEgg); + break; + case MON_DATA_OT_NAME: + { + s32 i; + for (i = 0; i < OT_NAME_LENGTH; i++) + boxMon->otName[i] = data[i]; + break; + } + case MON_DATA_MARKINGS: + SET8(boxMon->markings); + break; + case MON_DATA_CHECKSUM: + SET16(boxMon->checksum); + break; + case MON_DATA_10: + SET16(boxMon->unknown); + break; + case MON_DATA_SPECIES: + { + SET16(substruct0->species); + if (substruct0->species) + boxMon->hasSpecies = 1; + else + boxMon->hasSpecies = 0; + break; + } + case MON_DATA_HELD_ITEM: + SET16(substruct0->heldItem); + break; + case MON_DATA_EXP: + SET32(substruct0->experience); + break; + case MON_DATA_PP_BONUSES: + SET8(substruct0->ppBonuses); + break; + case MON_DATA_FRIENDSHIP: + SET8(substruct0->friendship); + break; + case MON_DATA_MOVE1: + case MON_DATA_MOVE2: + case MON_DATA_MOVE3: + case MON_DATA_MOVE4: + SET16(substruct1->moves[field - MON_DATA_MOVE1]); + break; + case MON_DATA_PP1: + case MON_DATA_PP2: + case MON_DATA_PP3: + case MON_DATA_PP4: + SET8(substruct1->pp[field - MON_DATA_PP1]); + break; + case MON_DATA_HP_EV: + SET8(substruct2->hpEV); + break; + case MON_DATA_ATK_EV: + SET8(substruct2->attackEV); + break; + case MON_DATA_DEF_EV: + SET8(substruct2->defenseEV); + break; + case MON_DATA_SPD_EV: + SET8(substruct2->speedEV); + break; + case MON_DATA_SPATK_EV: + SET8(substruct2->spAttackEV); + break; + case MON_DATA_SPDEF_EV: + SET8(substruct2->spDefenseEV); + break; + case MON_DATA_COOL: + SET8(substruct2->cool); + break; + case MON_DATA_BEAUTY: + SET8(substruct2->beauty); + break; + case MON_DATA_CUTE: + SET8(substruct2->cute); + break; + case MON_DATA_SMART: + SET8(substruct2->smart); + break; + case MON_DATA_TOUGH: + SET8(substruct2->tough); + break; + case MON_DATA_SHEEN: + SET8(substruct2->sheen); + break; + case MON_DATA_POKERUS: + SET8(substruct3->pokerus); + break; + case MON_DATA_MET_LOCATION: + SET8(substruct3->metLocation); + break; + case MON_DATA_MET_LEVEL: + { + u8 metLevel = *data; + substruct3->metLevel = metLevel; + break; + } + case MON_DATA_MET_GAME: + SET8(substruct3->metGame); + break; + case MON_DATA_POKEBALL: + { + u8 pokeball = *data; + substruct3->pokeball = pokeball; + break; + } + case MON_DATA_OT_GENDER: + SET8(substruct3->otGender); + break; + case MON_DATA_HP_IV: + SET8(substruct3->hpIV); + break; + case MON_DATA_ATK_IV: + SET8(substruct3->attackIV); + break; + case MON_DATA_DEF_IV: + SET8(substruct3->defenseIV); + break; + case MON_DATA_SPD_IV: + SET8(substruct3->speedIV); + break; + case MON_DATA_SPATK_IV: + SET8(substruct3->spAttackIV); + break; + case MON_DATA_SPDEF_IV: + SET8(substruct3->spDefenseIV); + break; + case MON_DATA_IS_EGG: + SET8(substruct3->isEgg); + if (substruct3->isEgg) + boxMon->isEgg = 1; + else + boxMon->isEgg = 0; + break; + case MON_DATA_ALT_ABILITY: + SET8(substruct3->altAbility); + break; + case MON_DATA_COOL_RIBBON: + SET8(substruct3->coolRibbon); + break; + case MON_DATA_BEAUTY_RIBBON: + SET8(substruct3->beautyRibbon); + break; + case MON_DATA_CUTE_RIBBON: + SET8(substruct3->cuteRibbon); + break; + case MON_DATA_SMART_RIBBON: + SET8(substruct3->smartRibbon); + break; + case MON_DATA_TOUGH_RIBBON: + SET8(substruct3->toughRibbon); + break; + case MON_DATA_CHAMPION_RIBBON: + SET8(substruct3->championRibbon); + break; + case MON_DATA_WINNING_RIBBON: + SET8(substruct3->winningRibbon); + break; + case MON_DATA_VICTORY_RIBBON: + SET8(substruct3->victoryRibbon); + break; + case MON_DATA_ARTIST_RIBBON: + SET8(substruct3->artistRibbon); + break; + case MON_DATA_EFFORT_RIBBON: + SET8(substruct3->effortRibbon); + break; + case MON_DATA_GIFT_RIBBON_1: + SET8(substruct3->giftRibbon1); + break; + case MON_DATA_GIFT_RIBBON_2: + SET8(substruct3->giftRibbon2); + break; + case MON_DATA_GIFT_RIBBON_3: + SET8(substruct3->giftRibbon3); + break; + case MON_DATA_GIFT_RIBBON_4: + SET8(substruct3->giftRibbon4); + break; + case MON_DATA_GIFT_RIBBON_5: + SET8(substruct3->giftRibbon5); + break; + case MON_DATA_GIFT_RIBBON_6: + SET8(substruct3->giftRibbon6); + break; + case MON_DATA_GIFT_RIBBON_7: + SET8(substruct3->giftRibbon7); + break; + case MON_DATA_FATEFUL_ENCOUNTER: + SET8(substruct3->fatefulEncounter); + break; + case MON_DATA_IVS: + { +#ifdef BUGFIX_SETMONIVS + u32 ivs = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24); +#else + u32 ivs = *data; // Bug: Only the HP IV and the lower 3 bits of the Attack IV are read. The rest become 0. +#endif + substruct3->hpIV = ivs & 0x1F; + substruct3->attackIV = (ivs >> 5) & 0x1F; + substruct3->defenseIV = (ivs >> 10) & 0x1F; + substruct3->speedIV = (ivs >> 15) & 0x1F; + substruct3->spAttackIV = (ivs >> 20) & 0x1F; + substruct3->spDefenseIV = (ivs >> 25) & 0x1F; + break; + } + default: + break; + } + + if (field > MON_DATA_10) + { + boxMon->checksum = CalculateBoxMonChecksum(boxMon); + EncryptBoxMon(boxMon); + } +} + +void CopyMon(void *dest, void *src, size_t size) +{ + memcpy(dest, src, size); +} + +u8 GiveMonToPlayer(struct Pokemon *mon) +{ + s32 i; + + SetMonData(mon, MON_DATA_OT_NAME, gSaveBlock2.playerName); + SetMonData(mon, MON_DATA_OT_GENDER, &gSaveBlock2.playerGender); + SetMonData(mon, MON_DATA_OT_ID, gSaveBlock2.playerTrainerId); + + i = 0; + + while (i < 6 && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) != SPECIES_NONE) + i++; + + if (i >= 6) + return SendMonToPC(mon); + + CopyMon(&gPlayerParty[i], mon, sizeof(*mon)); + gPlayerPartyCount = i + 1; + return 0; +} + +u8 SendMonToPC(struct Pokemon *mon) +{ + s32 i = gPokemonStorage.currentBox; + + do + { + s32 j; + for (j = 0; j < 30; j++) + { + if (GetBoxMonData(&gPokemonStorage.boxes[i][j], MON_DATA_SPECIES, NULL) == SPECIES_NONE) + { + MonRestorePP(mon); + CopyMon(&gPokemonStorage.boxes[i][j], &mon->box, sizeof(mon->box)); + return 1; + } + } + + i++; + if (i == 14) + i = 0; + } while (i != gPokemonStorage.currentBox); + + return 2; +} + +u8 CalculatePlayerPartyCount(void) +{ + gPlayerPartyCount = 0; + + while (gPlayerPartyCount < 6 + && GetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_SPECIES, NULL) != SPECIES_NONE) + { + gPlayerPartyCount++; + } + + return gPlayerPartyCount; +} + +u8 CalculateEnemyPartyCount(void) +{ + gEnemyPartyCount = 0; + + while (gEnemyPartyCount < 6 + && GetMonData(&gEnemyParty[gEnemyPartyCount], MON_DATA_SPECIES, NULL) != SPECIES_NONE) + { + gEnemyPartyCount++; + } + + return gEnemyPartyCount; +} + +u8 sub_803DAA0(void) +{ + s32 aliveCount = 0; + s32 i; + CalculatePlayerPartyCount(); + + if (gPlayerPartyCount == 1) + return gPlayerPartyCount; + + for (i = 0; i < gPlayerPartyCount; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0 + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_NONE + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG) + aliveCount++; + } + + return (aliveCount > 1) ? 0 : 2; +} + +u8 GetAbilityBySpecies(u16 species, bool8 altAbility) +{ + if (altAbility) + gLastUsedAbility = gBaseStats[species].ability2; + else + gLastUsedAbility = gBaseStats[species].ability1; + + return gLastUsedAbility; +} + +u8 GetMonAbility(struct Pokemon *mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + u8 altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL); + return GetAbilityBySpecies(species, altAbility); +} + +void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord) +{ + s32 i, j; + + ZeroEnemyPartyMons(); + memcpy(&gSecretBaseRecord, secretBaseRecord, sizeof(*secretBaseRecord)); + + for (i = 0; i < 6; i++) + { + if (gSecretBaseRecord.partySpecies[i]) + { + CreateMon(&gEnemyParty[i], + gSecretBaseRecord.partySpecies[i], + gSecretBaseRecord.partyLevels[i], + 15, + 1, + gSecretBaseRecord.partyPersonality[i], + 2, + 0); + + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, (u8 *)&gSecretBaseRecord.partyHeldItems[i]); + + for (j = 0; j < 6; j++) + SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &gSecretBaseRecord.partyEVs[i]); + + for (j = 0; j < 4; j++) + { + SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, (u8 *)&gSecretBaseRecord.partyMoves[i * 4 + j]); + SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gSecretBaseRecord.partyMoves[i * 4 + j]].pp); + } + } + } + + gBattleTypeFlags = 8; + gTrainerBattleOpponent = 1024; +} + +u8 GetSecretBaseTrainerPicIndex(void) +{ + u8 trainerClass = gSecretBaseTrainerClasses[gSecretBaseRecord.gender][gSecretBaseRecord.trainerId[0] % 5]; + return gTrainerClassToPicIndex[trainerClass]; +} + +u8 GetSecretBaseTrainerNameIndex(void) +{ + u8 trainerClass = gSecretBaseTrainerClasses[gSecretBaseRecord.gender][gSecretBaseRecord.trainerId[0] % 5]; + return gTrainerClassToNameIndex[trainerClass]; +} + +u8 PlayerPartyAndPokemonStorageFull(void) +{ + s32 i; + + for (i = 0; i < 6; i++) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) == SPECIES_NONE) + return 0; + + return PokemonStorageFull(); +} + +u8 PokemonStorageFull(void) +{ + s32 i, j; + + for (i = 0; i < 14; i++) + for (j = 0; j < 30; j++) + if (GetBoxMonData(&gPokemonStorage.boxes[i][j], MON_DATA_SPECIES, NULL) == SPECIES_NONE) + return 0; + + return 1; +} + +void GetSpeciesName(u8 *name, u16 species) +{ + s32 i; + + for (i = 0; i <= POKEMON_NAME_LENGTH; i++) + { + if (species > NUM_SPECIES) + name[i] = gSpeciesNames[0][i]; + else + name[i] = gSpeciesNames[species][i]; + + if (name[i] == EOS) + break; + } + + name[i] = EOS; +} + +u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex) +{ + u8 basePP = gBattleMoves[move].pp; + return basePP + ((basePP * 20 * ((gUnknown_08208238[moveIndex] & ppBonuses) >> (2 * moveIndex))) / 100); +} + +void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex) +{ + u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); + ppBonuses &= gUnknown_0820823C[moveIndex]; + SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses); +} + +void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex) +{ + mon->ppBonuses &= gUnknown_0820823C[moveIndex]; +} + +void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex) +{ + s32 i; + s8 nickname[POKEMON_NAME_LENGTH * 2]; + + gBattleMons[battleIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL); + gBattleMons[battleIndex].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL); + + for (i = 0; i < 4; i++) + { + gBattleMons[battleIndex].moves[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1 + i, NULL); + gBattleMons[battleIndex].pp[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP1 + i, NULL); + } + + gBattleMons[battleIndex].ppBonuses = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP_BONUSES, NULL); + gBattleMons[battleIndex].friendship = GetMonData(&gPlayerParty[partyIndex], MON_DATA_FRIENDSHIP, NULL); + gBattleMons[battleIndex].experience = GetMonData(&gPlayerParty[partyIndex], MON_DATA_EXP, NULL); + gBattleMons[battleIndex].hpIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP_IV, NULL); + gBattleMons[battleIndex].attackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK_IV, NULL); + gBattleMons[battleIndex].defenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF_IV, NULL); + gBattleMons[battleIndex].speedIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPD_IV, NULL); + gBattleMons[battleIndex].spAttackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK_IV, NULL); + gBattleMons[battleIndex].spDefenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF_IV, NULL); + gBattleMons[battleIndex].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY, NULL); + gBattleMons[battleIndex].status1 = GetMonData(&gPlayerParty[partyIndex], MON_DATA_STATUS, NULL); + gBattleMons[battleIndex].level = GetMonData(&gPlayerParty[partyIndex], MON_DATA_LEVEL, NULL); + gBattleMons[battleIndex].hp = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP, NULL); + gBattleMons[battleIndex].maxHP = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MAX_HP, NULL); + gBattleMons[battleIndex].attack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK, NULL); + gBattleMons[battleIndex].defense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF, NULL); + gBattleMons[battleIndex].speed = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPD, NULL); + gBattleMons[battleIndex].spAttack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK, NULL); + gBattleMons[battleIndex].spDefense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF, NULL); + gBattleMons[battleIndex].isEgg = GetMonData(&gPlayerParty[partyIndex], MON_DATA_IS_EGG, NULL); + gBattleMons[battleIndex].altAbility = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ALT_ABILITY, NULL); + gBattleMons[battleIndex].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID, NULL); + gBattleMons[battleIndex].type1 = gBaseStats[gBattleMons[battleIndex].species].type1; + gBattleMons[battleIndex].type2 = gBaseStats[gBattleMons[battleIndex].species].type2; + gBattleMons[battleIndex].ability = GetAbilityBySpecies(gBattleMons[battleIndex].species, gBattleMons[battleIndex].altAbility); + GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname); + StringCopy10(gBattleMons[battleIndex].nickname, nickname); + GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_NAME, gBattleMons[battleIndex].otName); + *(unk_20160BC + GetBankSide(battleIndex)) = gBattleMons[battleIndex].hp; + + for (i = 0; i < 8; i++) + gBattleMons[battleIndex].statStages[i] = 6; + + gBattleMons[battleIndex].status2 = 0; + sub_80157C4(battleIndex); + sub_8032AA8(battleIndex, 0); +} diff --git a/src/pokemon/pokemon_3.c b/src/pokemon/pokemon_3.c new file mode 100644 index 000000000..3d85a1c8f --- /dev/null +++ b/src/pokemon/pokemon_3.c @@ -0,0 +1,1380 @@ +#include "global.h" +#include "battle.h" +#include "battle_message.h" +#include "data2.h" +#include "event_data.h" +#include "hold_effects.h" +#include "item.h" +#include "items.h" +#include "link.h" +#include "m4a.h" +#include "main.h" +#include "pokemon.h" +#include "rng.h" +#include "rom4.h" +#include "rom_8077ABC.h" +#include "rom_8094928.h" +#include "rtc.h" +#include "songs.h" +#include "sound.h" +#include "species.h" +#include "sprite.h" +#include "string_util.h" +#include "text.h" +#include "util.h" + +extern u8 gPlayerPartyCount; +extern u8 gEnemyPartyCount; +extern struct BattlePokemon gBattleMons[4]; +extern u8 gActiveBank; +extern struct BattleEnigmaBerry gEnigmaBerries[]; +extern u16 gSpeciesToHoennPokedexNum[]; +extern u16 gSpeciesToNationalPokedexNum[]; +extern u16 gHoennToNationalOrder[]; +extern u16 gSpeciesIdToCryId[]; +extern u8 gBattleTextBuff1[]; +extern u8 gBattleTextBuff2[]; +extern u8 gDisplayedStringBattle[]; +extern u8 gBankAttacker; +extern u8 gBankTarget; +extern u8 gStringBank; +extern u8 gBankInMenu; +extern struct SpindaSpot gSpindaSpotGraphics[]; +extern s8 gNatureStatTable[][5]; +extern s8 gUnknown_082082FE[][3]; +extern u16 gTrainerBattleOpponent; +extern u16 gBattleTypeFlags; +extern u32 gTMHMLearnsets[][2]; +extern u8 gBattleMonForms[]; +extern const u8 BattleText_Wally[]; +extern const u16 gHMMoves[]; +extern s8 gPokeblockFlavorCompatibilityTable[]; +extern u8 gLastUsedAbility; +extern const u8 BattleText_PreventedSwitch[]; +extern u16 gBattlePartyID[]; +extern u8 gJapaneseNidoranNames[][11]; + +extern u8 gUnknown_082082F8[]; +extern u8 gUnknown_083FFDB3[]; +extern u8 gUnknown_083FFDD3[]; +extern u8 gUnknown_083FEE5D[]; +extern u8 gUnknown_083FEE92[]; +extern u8 *gUnknown_08400F58[]; + +bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId) +{ + u32 status = GetMonData(mon, MON_DATA_STATUS, 0); + + if (status & healMask) + { + status &= ~healMask; + SetMonData(mon, MON_DATA_STATUS, (u8 *)&status); + if (gMain.inBattle && battleId != 4) + gBattleMons[battleId].status1 &= ~healMask; + return FALSE; + } + else + { + return TRUE; + } +} + +u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) +{ + const u8 *temp; + const u8 *itemEffect; + u8 offset; + int i; + u8 j; + u8 val; + + offset = 6; + + temp = gItemEffectTable[itemId - 13]; + + if (!temp && itemId != ITEM_ENIGMA_BERRY) + return 0; + + if (itemId == ITEM_ENIGMA_BERRY) + { + temp = gEnigmaBerries[gActiveBank].itemEffect; + } + + itemEffect = temp; + + for (i = 0; i < 6; i++) + { + switch (i) + { + case 0: + case 1: + case 2: + case 3: + if (i == effectByte) + return 0; + break; + case 4: + val = itemEffect[4]; + if (val & 0x20) + val &= 0xDF; + j = 0; + while (val) + { + if (val & 1) + { + switch (j) + { + case 2: + if (val & 0x10) + val &= 0xEF; + case 0: + if (i == effectByte && (val & effectBit)) + return offset; + offset++; + break; + case 1: + if (i == effectByte && (val & effectBit)) + return offset; + offset++; + break; + case 3: + if (i == effectByte && (val & effectBit)) + return offset; + offset++; + break; + case 7: + if (i == effectByte) + return 0; + break; + } + } + j++; + val >>= 1; + if (i == effectByte) + effectBit >>= 1; + } + break; + case 5: + val = itemEffect[5]; + j = 0; + while (val) + { + if (val & 1) + { + switch (j) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + if (i == effectByte && (val & effectBit)) + return offset; + offset++; + break; + case 7: + if (i == effectByte) + return 0; + break; + } + } + j++; + val >>= 1; + if (i == effectByte) + effectBit >>= 1; + } + break; + } + } + + return offset; +} + +void sub_803F324(int stat) +{ + gBankTarget = gBankInMenu; + StringCopy(gBattleTextBuff1, gUnknown_08400F58[gUnknown_082082F8[stat]]); + StringCopy(gBattleTextBuff2, gUnknown_083FFDB3); + StrCpyDecodeToDisplayedStringBattle(gUnknown_083FFDD3); +} + +u8 *sub_803F378(u16 itemId) +{ + int i; + u8 *itemEffect; + + if (itemId == ITEM_ENIGMA_BERRY) + { + if (gMain.inBattle) + { + itemEffect = gEnigmaBerries[gBankInMenu].itemEffect; + } + else + { + itemEffect = gSaveBlock1.enigmaBerry.itemEffect; + } + } + else + { + itemEffect = (u8 *) gItemEffectTable[itemId - 13]; + } + + gStringBank = gBankInMenu; + + for (i = 0; i < 3; i++) + { + if (itemEffect[i] & 0xF) + sub_803F324(i * 2); + if (itemEffect[i] & 0xF0) + { + if (i) + { + sub_803F324(i * 2 + 1); + } + else + { + gBankAttacker = gBankInMenu; + StrCpyDecodeToDisplayedStringBattle(gUnknown_083FEE92); + } + } + } + + if (itemEffect[3] & 0x80) + { + gBankAttacker = gBankInMenu; + StrCpyDecodeToDisplayedStringBattle(gUnknown_083FEE5D); + } + + return gDisplayedStringBattle; +} + +u8 GetNature(struct Pokemon *mon) +{ + return GetMonData(mon, MON_DATA_PERSONALITY, 0) % 25; +} + +u8 GetNatureFromPersonality(u32 personality) +{ + return personality % 25; +} + +u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) +{ + int i; + u16 targetSpecies = 0; + u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); + u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); + u8 level; + u16 friendship; + u8 beauty = GetMonData(mon, MON_DATA_BEAUTY, 0); + u16 upperPersonality = personality >> 16; + u8 holdEffect; + + if (heldItem == ITEM_ENIGMA_BERRY) + holdEffect = gSaveBlock1.enigmaBerry.holdEffect; + else + holdEffect = ItemId_GetHoldEffect(heldItem); + + if (holdEffect == 38 && type != 3) + return 0; + + switch (type) + { + case 0: + level = GetMonData(mon, MON_DATA_LEVEL, 0); + friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0); + + for (i = 0; i < 5; i++) + { + switch (gEvolutionTable[species].evolutions[i].method) + { + case EVO_FRIENDSHIP: + if (friendship >= 220) + targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; + break; + case EVO_FRIENDSHIP_DAY: + RtcCalcLocalTime(); + if (gLocalTime.hours >= 12 && gLocalTime.hours < 24 && friendship >= 220) + targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; + break; + case EVO_FRIENDSHIP_NIGHT: + RtcCalcLocalTime(); + if (gLocalTime.hours >= 0 && gLocalTime.hours < 12 && friendship >= 220) + targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; + break; + case EVO_LEVEL: + if (gEvolutionTable[species].evolutions[i].param <= level) + targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; + break; + case EVO_LEVEL_ATK_GT_DEF: + if (gEvolutionTable[species].evolutions[i].param <= level) + if (GetMonData(mon, MON_DATA_ATK, 0) > GetMonData(mon, MON_DATA_DEF, 0)) + targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; + break; + case EVO_LEVEL_ATK_EQ_DEF: + if (gEvolutionTable[species].evolutions[i].param <= level) + if (GetMonData(mon, MON_DATA_ATK, 0) == GetMonData(mon, MON_DATA_DEF, 0)) + targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; + break; + case EVO_LEVEL_ATK_LT_DEF: + if (gEvolutionTable[species].evolutions[i].param <= level) + if (GetMonData(mon, MON_DATA_ATK, 0) < GetMonData(mon, MON_DATA_DEF, 0)) + targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; + break; + case EVO_LEVEL_SILCOON: + if (gEvolutionTable[species].evolutions[i].param <= level && (upperPersonality % 10) <= 4) + targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; + break; + case EVO_LEVEL_CASCOON: + if (gEvolutionTable[species].evolutions[i].param <= level && (upperPersonality % 10) > 4) + targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; + break; + case EVO_LEVEL_NINJASK: + if (gEvolutionTable[species].evolutions[i].param <= level) + targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; + break; + case EVO_BEAUTY: + if (gEvolutionTable[species].evolutions[i].param <= beauty) + targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; + break; + } + } + break; + case 1: + for (i = 0; i < 5; i++) + { + switch (gEvolutionTable[species].evolutions[i].method) + { + case EVO_TRADE: + targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; + break; + case EVO_TRADE_ITEM: + if (gEvolutionTable[species].evolutions[i].param == heldItem) + { + heldItem = 0; + SetMonData(mon, MON_DATA_HELD_ITEM, (u8 *)&heldItem); + targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; + } + break; + } + } + break; + case 2: + case 3: + for (i = 0; i < 5; i++) + { + if (gEvolutionTable[species].evolutions[i].method == EVO_ITEM + && gEvolutionTable[species].evolutions[i].param == evolutionItem) + { + targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; + break; + } + } + break; + } + + return targetSpecies; +} + +u16 HoennPokedexNumToSpecies(u16 hoennNum) +{ + u16 species; + + if (!hoennNum) + return 0; + + species = 0; + + while (species < 411 && gSpeciesToHoennPokedexNum[species] != hoennNum) + species++; + + if (species == 411) + return 0; + + return species + 1; +} + +u16 NationalPokedexNumToSpecies(u16 nationalNum) +{ + u16 species; + + if (!nationalNum) + return 0; + + species = 0; + + while (species < 411 && gSpeciesToNationalPokedexNum[species] != nationalNum) + species++; + + if (species == 411) + return 0; + + return species + 1; +} + +u16 NationalToHoennOrder(u16 nationalNum) +{ + u16 hoennNum; + + if (!nationalNum) + return 0; + + hoennNum = 0; + + while (hoennNum < 411 && gHoennToNationalOrder[hoennNum] != nationalNum) + hoennNum++; + + if (hoennNum == 411) + return 0; + + return hoennNum + 1; +} + +u16 SpeciesToNationalPokedexNum(u16 species) +{ + if (!species) + return 0; + + return gSpeciesToNationalPokedexNum[species - 1]; +} + +u16 SpeciesToHoennPokedexNum(u16 species) +{ + if (!species) + return 0; + + return gSpeciesToHoennPokedexNum[species - 1]; +} + +u16 HoennToNationalOrder(u16 hoennNum) +{ + if (!hoennNum) + return 0; + + return gHoennToNationalOrder[hoennNum - 1]; +} + +u32 SpeciesToCryId(u16 species) +{ + if (species <= 250) + return species; + + if (species < 276) + return 200; + + return gSpeciesIdToCryId[species - 276]; +} + +void unref_sub_803F938(u16 species, u32 personality, u8 *dest) +{ + if (species == SPECIES_SPINDA && dest != gUnknown_081FAF4C[0] && dest != gUnknown_081FAF4C[2]) + { + int i; + for (i = 0; i < 4; i++) + { + int j; + u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); + u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); + + for (j = 0; j < 16; j++) + { + int k; + s32 row = gSpindaSpotGraphics[i].image[j]; + + for (k = x; k < x + 16; k++) + { + u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2); + + if (row & 1) + { + if (k & 1) + { + if ((u8)((*val & 0xF0) - 0x10) <= 0x20) + *val += 0x40; + } + else + { + if ((u8)((*val & 0xF) - 0x01) <= 0x02) + *val += 0x04; + } + } + + row >>= 1; + } + + y++; + } + + personality >>= 8; + } + } +} + +void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4) +{ + if (species == SPECIES_SPINDA && a4) + { + int i; + for (i = 0; i < 4; i++) + { + int j; + u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); + u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); + + for (j = 0; j < 16; j++) + { + int k; + s32 row = gSpindaSpotGraphics[i].image[j]; + + for (k = x; k < x + 16; k++) + { + u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2); + + if (row & 1) + { + if (k & 1) + { + if ((u8)((*val & 0xF0) - 0x10) <= 0x20) + *val += 0x40; + } + else + { + if ((u8)((*val & 0xF) - 0x01) <= 0x02) + *val += 0x04; + } + } + + row >>= 1; + } + + y++; + } + + personality >>= 8; + } + } +} + +void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies) +{ +#ifdef BUGFIX_EVO_NAME + u8 language; + GetMonData(mon, MON_DATA_NICKNAME, gStringVar1); + language = GetMonData(mon, MON_DATA_LANGUAGE, &language); + if (language == GAME_LANGUAGE && !StringCompareWithoutExtCtrlCodes(gSpeciesNames[oldSpecies], gStringVar1)) + SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]); +#else + GetMonData(mon, MON_DATA_NICKNAME, gStringVar1); + if (!StringCompareWithoutExtCtrlCodes(gSpeciesNames[oldSpecies], gStringVar1)) + SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]); +#endif +} + +bool8 sub_803FBBC(void) +{ + bool8 retVal = FALSE; + switch (gLinkPlayers[GetMultiplayerId()].lp_field_18) + { + case 0: + case 3: + retVal = FALSE; + break; + case 1: + case 2: + retVal = TRUE; + break; + } + return retVal; +} + +bool8 sub_803FBFC(u8 id) +{ + bool8 retVal = FALSE; + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + retVal = FALSE; + break; + case 1: + case 2: + retVal = TRUE; + break; + } + return retVal; +} + +s32 sub_803FC34(u16 a1) +{ + s32 id; + for (id = 0; id < MAX_LINK_PLAYERS; id++) + if (gLinkPlayers[id].lp_field_18 == a1) + break; + return id; +} + +u8 sub_803FC58(u16 trainer) +{ + return gTrainers[trainer].encounterMusic_gender & 0x7F; +} + +u16 nature_stat_mod(u8 nature, u16 n, u8 statIndex) +{ + if (statIndex < 1 || statIndex > 5) + { + // should just be "return n", but it wouldn't match without this + u16 retVal = n; + retVal++; + retVal--; + return retVal; + } + + switch (gNatureStatTable[nature][statIndex - 1]) + { + case 1: + return (u16)(n * 110) / 100; + case -1: + return (u16)(n * 90) / 100; + } + + return n; +} + +void AdjustFriendship(struct Pokemon *mon, u8 event) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); + u8 holdEffect; + + if (heldItem == ITEM_ENIGMA_BERRY) + { + if (gMain.inBattle) + { + holdEffect = gEnigmaBerries[0].holdEffect; + } + else + { + holdEffect = gSaveBlock1.enigmaBerry.holdEffect; + } + } + else + { + holdEffect = ItemId_GetHoldEffect(heldItem); + } + + if (species && species != SPECIES_EGG) + { + u8 friendshipLevel = 0; + s16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0); + if (friendship > 99) + friendshipLevel++; + if (friendship > 199) + friendshipLevel++; + if ((event != 5 || !(Random() & 1)) + && (event != 3 + || ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) + && (gTrainers[gTrainerBattleOpponent].trainerClass == 24 + || gTrainers[gTrainerBattleOpponent].trainerClass == 25 + || gTrainers[gTrainerBattleOpponent].trainerClass == 32)))) + { + s8 mod = gUnknown_082082FE[event][friendshipLevel]; + if (mod > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) + mod = (150 * mod) / 100; + friendship += mod; + if (mod > 0) + { + if (GetMonData(mon, MON_DATA_POKEBALL, 0) == ITEM_LUXURY_BALL) + friendship++; + if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == sav1_map_get_name()) + friendship++; + } + if (friendship < 0) + friendship = 0; + if (friendship > 255) + friendship = 255; + SetMonData(mon, MON_DATA_FRIENDSHIP, (u8 *)&friendship); + } + } +} + +void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) +{ + u8 evs[NUM_STATS]; + u16 evIncrease = 0; + u16 totalEVs = 0; + u16 heldItem; + u8 holdEffect; + int i; + + for (i = 0; i < NUM_STATS; i++) + { + evs[i] = GetMonData(mon, MON_DATA_HP_EV + i, 0); + totalEVs += evs[i]; + } + + for (i = 0; i < NUM_STATS; i++) + { + u8 hasHadPokerus; + int multiplier; + + if (totalEVs >= MAX_TOTAL_EVS) + break; + + hasHadPokerus = CheckPartyHasHadPokerus(mon, 0); + + if (hasHadPokerus) + multiplier = 2; + else + multiplier = 1; + + switch (i) + { + case 0: + evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier; + break; + case 1: + evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier; + break; + case 2: + evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier; + break; + case 3: + evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier; + break; + case 4: + evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier; + break; + case 5: + evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier; + break; + } + + heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); + + if (heldItem == ITEM_ENIGMA_BERRY) + { + if (gMain.inBattle) + { + holdEffect = gEnigmaBerries[0].holdEffect; + } + else + { + holdEffect = gSaveBlock1.enigmaBerry.holdEffect; + } + } + else + { + holdEffect = ItemId_GetHoldEffect(heldItem); + } + + if (holdEffect == HOLD_EFFECT_MACHO_BRACE) + evIncrease *= 2; + + if (totalEVs + (s16)evIncrease > MAX_TOTAL_EVS) + evIncrease = ((s16)evIncrease + MAX_TOTAL_EVS) - (totalEVs + evIncrease); + + if (evs[i] + (s16)evIncrease > 255) + { + int val1 = (s16)evIncrease + 255; + int val2 = evs[i] + evIncrease; + evIncrease = val1 - val2; + } + + evs[i] += evIncrease; + totalEVs += evIncrease; + SetMonData(mon, MON_DATA_HP_EV + i, &evs[i]); + } +} + +u16 GetMonEVCount(struct Pokemon *mon) +{ + int i; + u16 count = 0; + + for (i = 0; i < NUM_STATS; i++) + count += GetMonData(mon, MON_DATA_HP_EV + i, 0); + + return count; +} + +void RandomlyGivePartyPokerus(struct Pokemon *party) +{ + u16 rnd = Random(); + if (rnd == 0x4000 || rnd == 0x8000 || rnd == 0xC000) + { + struct Pokemon *mon; + + do + { + do + { + rnd = Random() % PARTY_SIZE; + mon = &party[rnd]; + } + while (!GetMonData(mon, MON_DATA_SPECIES, 0)); + } + while (GetMonData(mon, MON_DATA_IS_EGG, 0)); + + if (!(CheckPartyHasHadPokerus(party, gBitTable[rnd]))) + { + u8 rnd2; + + do + { + rnd2 = Random(); + } + while (rnd2 == 0); + + if (rnd2 & 0xF0) + rnd2 &= 0x07; + + rnd2 |= (rnd2 << 4); + rnd2 &= 0xF3; + rnd2++; + + SetMonData(&party[rnd], MON_DATA_POKERUS, &rnd2); + } + } +} + +u8 CheckPartyPokerus(struct Pokemon *party, u8 selection) +{ + u8 retVal; + + int partyIndex = 0; + unsigned curBit = 1; + retVal = 0; + + if (selection) + { + do + { + if ((selection & 1) && (GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0) & 0xF)) + retVal |= curBit; + partyIndex++; + curBit <<= 1; + selection >>= 1; + } + while (selection); + } + else if (GetMonData(&party[0], MON_DATA_POKERUS, 0) & 0xF) + { + retVal = 1; + } + + return retVal; +} + +u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection) +{ + u8 retVal; + + int partyIndex = 0; + unsigned curBit = 1; + retVal = 0; + + if (selection) + { + do + { + if ((selection & 1) && GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0)) + retVal |= curBit; + partyIndex++; + curBit <<= 1; + selection >>= 1; + } + while (selection); + } + else if (GetMonData(&party[0], MON_DATA_POKERUS, 0)) + { + retVal = 1; + } + + return retVal; +} + +void UpdatePartyPokerusTime(u16 days) +{ + int i; + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, 0)) + { + u8 pokerus = GetMonData(&gPlayerParty[i], MON_DATA_POKERUS, 0); + if (pokerus & 0xF) + { + if ((pokerus & 0xF) < days || days > 4) + pokerus &= 0xF0; + else + pokerus -= days; + + SetMonData(&gPlayerParty[i], MON_DATA_POKERUS, &pokerus); + } + } + } +} + +void PartySpreadPokerus(struct Pokemon *party) +{ + if ((Random() % 3) == 0) + { + int i; + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&party[i], MON_DATA_SPECIES, 0)) + { + u8 pokerus = GetMonData(&party[i], MON_DATA_POKERUS, 0); + u8 curPokerus = pokerus; + if (pokerus) + { + if (pokerus & 0xF) + { + // spread to adjacent party members + if (i != 0 && !(GetMonData(&party[i - 1], MON_DATA_POKERUS, 0) & 0xF0)) + SetMonData(&party[i - 1], MON_DATA_POKERUS, &curPokerus); + if (i != (PARTY_SIZE - 1) && !(GetMonData(&party[i + 1], MON_DATA_POKERUS, 0) & 0xF0)) + { + SetMonData(&party[i + 1], MON_DATA_POKERUS, &curPokerus); + i++; + } + } + } + } + } + } +} + +bool8 TryIncrementMonLevel(struct Pokemon *mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); + u8 nextLevel = GetMonData(mon, MON_DATA_LEVEL, 0) + 1; + if (GetMonData(mon, MON_DATA_EXP, 0) > gExperienceTables[gBaseStats[species].growthRate][nextLevel]) + { + SetMonData(mon, MON_DATA_LEVEL, &nextLevel); + return TRUE; + } + else + { + return FALSE; + } +} + +u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + if (species == SPECIES_EGG) + { + return 0; + } + else if (tm < 32) + { + u32 mask = 1 << tm; + return gTMHMLearnsets[species][0] & mask; + } + else + { + u32 mask = 1 << (tm - 32); + return gTMHMLearnsets[species][1] & mask; + } +} + +u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves) +{ + u16 learnedMoves[4]; + u8 numMoves = 0; + u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); + u8 level = GetMonData(mon, MON_DATA_LEVEL, 0); + int i, j, k; + + for (i = 0; i < 4; i++) + learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0); + + for (i = 0; i < 20; i++) + { + u16 moveLevel; + + if (gLevelUpLearnsets[species][i] == 0xFFFF) + break; + + moveLevel = gLevelUpLearnsets[species][i] & 0xFE00; + + if (moveLevel <= (level << 9)) + { + for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++) + ; + + if (j == 4) + { + for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++) + ; + + if (k == numMoves) + moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; + } + } + } + + return numMoves; +} + +u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves) +{ + u8 numMoves = 0; + int i; + + for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != 0xFFFF; i++) + moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; + + return numMoves; +} + +u8 sub_8040574(struct Pokemon *mon) +{ + u16 learnedMoves[4]; + u16 moves[20]; + u8 numMoves = 0; + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u8 level = GetMonData(mon, MON_DATA_LEVEL, 0); + int i, j, k; + + if (species == SPECIES_EGG) + return 0; + + for (i = 0; i < 4; i++) + learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0); + + for (i = 0; i < 20; i++) + { + u16 moveLevel; + + if (gLevelUpLearnsets[species][i] == 0xFFFF) + break; + + moveLevel = gLevelUpLearnsets[species][i] & 0xFE00; + + if (moveLevel <= (level << 9)) + { + for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++) + ; + + if (j == 4) + { + for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++) + ; + + if (k == numMoves) + moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; + } + } + } + + return numMoves; +} + +u16 SpeciesToPokedexNum(u16 species) +{ + if (IsNationalPokedexEnabled()) + { + return SpeciesToNationalPokedexNum(species); + } + else + { + species = SpeciesToHoennPokedexNum(species); + if (species <= 202) + return species; + return 0xFFFF; + } +} + +void ClearBattleMonForms(void) +{ + int i; + for (i = 0; i < 4; i++) + gBattleMonForms[i] = 0; +} + +u16 sub_8040728(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) + return BGM_BATTLE34; + if (gBattleTypeFlags & BATTLE_TYPE_REGI) + return BGM_BATTLE36; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + return BGM_BATTLE20; + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + switch (gTrainers[gTrainerBattleOpponent].trainerClass) + { + case 2: + case 0x31: + return BGM_BATTLE30; + case 3: + case 4: + case 0x32: + case 0x33: + return BGM_BATTLE31; + case 0x19: + return BGM_BATTLE32; + case 0x20: + return BGM_BATTLE33; + case 0x2E: + if (!StringCompare(gTrainers[gTrainerBattleOpponent].trainerName, BattleText_Wally)) + return BGM_BATTLE20; + return BGM_BATTLE35; + case 0x18: + return BGM_BATTLE38; + default: + return BGM_BATTLE20; + } + } + return BGM_BATTLE27; +} + +void sub_80408BC(void) +{ + ResetMapMusic(); + m4aMPlayAllStop(); + PlayBGM(sub_8040728()); +} + +void current_map_music_set__default_for_battle(u16 song) +{ + ResetMapMusic(); + m4aMPlayAllStop(); + if (song) + PlayNewMapMusic(song); + else + PlayNewMapMusic(sub_8040728()); +} + +const u8 *pokemon_get_pal(struct Pokemon *mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); + return species_and_otid_get_pal(species, otId, personality); +} + +//Extracts the upper 16 bits of a 32-bit number +#define HIHALF(n) (((n) & 0xFFFF0000) >> 16) + +//Extracts the lower 16 bits of a 32-bit number +#define LOHALF(n) ((n) & 0xFFFF) + +const u8 *species_and_otid_get_pal(u16 species, u32 otId, u32 personality) +{ + u32 shinyValue; + + if (species > SPECIES_EGG) + return gMonPaletteTable[0].data; + + shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + if (shinyValue < 8) + return gMonShinyPaletteTable[species].data; + else + return gMonPaletteTable[species].data; +} + +const struct CompressedSpritePalette *sub_8040990(struct Pokemon *mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); + return sub_80409C8(species, otId, personality); +} + +const struct CompressedSpritePalette *sub_80409C8(u16 species, u32 otId , u32 personality) +{ + u32 shinyValue; + + shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + if (shinyValue < 8) + return &gMonShinyPaletteTable[species]; + else + return &gMonPaletteTable[species]; +} + +bool8 IsHMMove2(u16 move) +{ + int i = 0; + while (gHMMoves[i] != 0xFFFF) + { + if (gHMMoves[i++] == move) + return TRUE; + } + return FALSE; +} + +bool8 sub_8040A3C(u16 species) +{ + return gBaseStats[species].unk19_7; +} + +s8 sub_8040A54(struct Pokemon *mon, u8 a2) +{ + u8 nature = GetNature(mon); + return gPokeblockFlavorCompatibilityTable[nature * 5 + a2]; +} + +s8 sub_8040A7C(u32 personality, u8 a2) +{ + u8 nature = GetNatureFromPersonality(personality); + return gPokeblockFlavorCompatibilityTable[nature * 5 + a2]; +} + +bool8 IsTradedMon(struct Pokemon *mon) +{ + u8 otName[8]; + u32 otId; + GetMonData(mon, MON_DATA_OT_NAME, otName); + otId = GetMonData(mon, MON_DATA_OT_ID, 0); + return IsOtherTrainer(otId, otName); +} + +bool8 IsOtherTrainer(u32 otId, u8 *otName) +{ + if (otId == (gSaveBlock2.playerTrainerId[0] | (gSaveBlock2.playerTrainerId[1] << 8) | (gSaveBlock2.playerTrainerId[2] << 16) | (gSaveBlock2.playerTrainerId[3] << 24))) + { + int i; + + for (i = 0; otName[i] != EOS; i++) + if (otName[i] != gSaveBlock2.playerName[i]) + return TRUE; + return FALSE; + } + + return TRUE; +} + +void BoxMonRestorePP(struct BoxPokemon *); + +void MonRestorePP(struct Pokemon *mon) +{ + BoxMonRestorePP(&mon->box); +} + +void BoxMonRestorePP(struct BoxPokemon *boxMon) +{ + int i; + + for (i = 0; i < 4; i++) + { + if (GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0)) + { + u16 move = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0); + u16 bonus = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, 0); + u8 pp = CalculatePPWithBonus(move, bonus, i); + SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp); + } + } +} + +void sub_8040B8C(void) +{ + gLastUsedAbility = BATTLE_STRUCT->unk160C0;; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 4; + gBattleTextBuff1[2] = BATTLE_STRUCT->unk16054; + gBattleTextBuff1[4] = EOS; + if (!GetBankSide(BATTLE_STRUCT->unk16054)) + gBattleTextBuff1[3] = pokemon_order_func(gBattlePartyID[BATTLE_STRUCT->unk16054]); + else + gBattleTextBuff1[3] = gBattlePartyID[BATTLE_STRUCT->unk16054]; + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 4; + gBattleTextBuff2[2] = gBankInMenu; + gBattleTextBuff2[3] = pokemon_order_func(gBattlePartyID[gBankInMenu]); + gBattleTextBuff2[4] = EOS; + StrCpyDecodeBattle(BattleText_PreventedSwitch, gStringVar4); +} + +void SetWildMonHeldItem(void) +{ + if (!(gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER))) + { + u16 rnd = Random() % 100; + u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0); + if (gBaseStats[species].item1 == gBaseStats[species].item2) + { + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item1); + return; + } + + if (rnd > 44) + { + if (rnd <= 94) + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item1); + else + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item2); + } + } +} + +bool8 IsShinyOtIdPersonality(u32, u32); + +bool8 IsShiny(struct Pokemon *mon) +{ + u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); + return IsShinyOtIdPersonality(otId, personality); +} + +bool8 IsShinyOtIdPersonality(u32 otId, u32 personality) +{ + bool8 retVal = FALSE; + u32 shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + if (shinyValue < 8) + retVal = TRUE; + return retVal; +} + +u8 *sub_8040D08(void) +{ + u8 id = GetMultiplayerId(); + return gLinkPlayers[sub_803FC34(gLinkPlayers[id].lp_field_18 ^ 2)].name; +} + +bool32 sub_8040D3C(u16 species, u8 *name, u8 language) +{ + bool32 retVal = FALSE; + if (species == SPECIES_NIDORAN_M || species == SPECIES_NIDORAN_F) + { + u8 *speciesName; + if (language == GAME_LANGUAGE) + { + speciesName = gSpeciesNames[species]; + } + else + { + if (species == SPECIES_NIDORAN_M) + speciesName = gJapaneseNidoranNames[0]; + else + speciesName = gJapaneseNidoranNames[1]; + } + if (!StringCompareWithoutExtCtrlCodes(name, speciesName)) + retVal = TRUE; + else + retVal = FALSE; + } + return retVal; +} + +bool32 sub_8040D8C(u16 species, u8 *name) +{ + u8 language = GAME_LANGUAGE; + if (name[0] == 0xFC && name[1] == 21) + language = LANGUAGE_JAPANESE; + return sub_8040D3C(species, name, language); +} + +bool32 unref_sub_8040DAC(struct Pokemon *mon) +{ + u8 name[12]; + u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); + u8 language = GetMonData(mon, MON_DATA_LANGUAGE, 0); + GetMonData(mon, MON_DATA_NICKNAME, name); + return sub_8040D3C(species, name, language); +} diff --git a/src/pokemon/pokemon_data.c b/src/pokemon/pokemon_data.c new file mode 100644 index 000000000..6414134fb --- /dev/null +++ b/src/pokemon/pokemon_data.c @@ -0,0 +1,128 @@ +#include "global.h" +#include "pokemon.h" +#include "species.h" +#include "trainer.h" +#include "abilities.h" +#include "moves.h" +#include "hold_effects.h" +#include "items.h" +#include "sprite.h" +#include "data2.h" + +#include "data/pokemon/dex_order.h" +#include "data/pokemon/spinda_spots.h" +#include "data/pokemon/item_effects.h" +#include "data/pokemon/nature_stats.h" +#include "data/pokemon/tmhm_learnsets.h" +#include "data/pokemon/trainer_class_lookups.h" +#include "data/pokemon/cry_ids.h" +#include "data/pokemon/experience_tables.h" +#include "data/pokemon/base_stats.h" +#include "data/pokemon/level_up_learnsets.h" +#include "data/pokemon/evolution.h" +#include "data/pokemon/level_up_learnset_pointers.h" + +const u8 gUnknown_08208238[] = { // Masks for getting PP Up count, also PP Max values + 0x03, 0x0c, 0x30, 0xc0 +}; + +const u8 gUnknown_0820823C[] = { // Masks for setting PP Up count + 0xFC, 0xF3, 0xCF, 0x3F +}; + +const u8 gUnknown_08208240[] = { // Values added to PP Up count + 0x01, 0x04, 0x10, 0x40 +}; + +const u8 gStatStageRatios[][2] = { + {10, 40}, // -6 + {10, 35}, // -5 + {10, 30}, // -4 + {10, 25}, // -3 + {10, 20}, // -2 + {10, 15}, // -1 + {10, 10}, // 0 + {15, 10}, // 1 + {20, 10}, // 2 + {25, 10}, // 3 + {30, 10}, // 4 + {35, 10}, // 5 + {40, 10} // 6 +}; + +const u8 unknownGameFreakAbbrev_820825E[] = _("ゲーフリ"); + +const u8 gHoldEffectToType[][2] = { + {HOLD_EFFECT_BUG_POWER, TYPE_BUG}, + {HOLD_EFFECT_STEEL_POWER, TYPE_STEEL}, + {HOLD_EFFECT_GROUND_POWER, TYPE_GROUND}, + {HOLD_EFFECT_ROCK_POWER, TYPE_ROCK}, + {HOLD_EFFECT_GRASS_POWER, TYPE_GRASS}, + {HOLD_EFFECT_DARK_POWER, TYPE_DARK}, + {HOLD_EFFECT_FIGHTING_POWER, TYPE_FIGHTING}, + {HOLD_EFFECT_ELECTRIC_POWER, TYPE_ELECTRIC}, + {HOLD_EFFECT_WATER_POWER, TYPE_WATER}, + {HOLD_EFFECT_FLYING_POWER, TYPE_FLYING}, + {HOLD_EFFECT_POISON_POWER, TYPE_POISON}, + {HOLD_EFFECT_ICE_POWER, TYPE_ICE}, + {HOLD_EFFECT_GHOST_POWER, TYPE_GHOST}, + {HOLD_EFFECT_PSYCHIC_POWER, TYPE_PSYCHIC}, + {HOLD_EFFECT_FIRE_POWER, TYPE_FIRE}, + {HOLD_EFFECT_DRAGON_POWER, TYPE_DRAGON}, + {HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL} +}; + +extern void sub_80105A0(struct Sprite *); +extern void oac_poke_opponent(struct Sprite *); + +const struct SpriteTemplate gSpriteTemplate_8208288[] = { + {0xFFFF, 0, &gOamData_81F96F0, NULL, gSpriteImageTable_81E7A10, gSpriteAffineAnimTable_81E7B70, sub_80105A0}, + {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A30, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent}, + {0xFFFF, 0, &gOamData_81F96F0, NULL, gSpriteImageTable_81E7A50, gSpriteAffineAnimTable_81E7B70, sub_80105A0}, + {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A70, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent}, +}; + +const u8 gSecretBaseTrainerClasses[][5] = { + // male + {TRAINER_CLASS_YOUNGSTER, TRAINER_CLASS_BUG_CATCHER, TRAINER_CLASS_RICH_BOY, TRAINER_CLASS_CAMPER, TRAINER_CLASS_COOL_TRAINER_M}, + // female + {TRAINER_CLASS_LASS, TRAINER_CLASS_SCHOOL_KID_F, TRAINER_CLASS_LADY, TRAINER_CLASS_PICNICKER, TRAINER_CLASS_COOL_TRAINER_F} +}; + +const u8 gUnknown_082082F2[] = { + MON_DATA_HP_EV, + MON_DATA_ATK_EV, + MON_DATA_DEF_EV, + MON_DATA_SPD_EV, + MON_DATA_SPDEF_EV, + MON_DATA_SPATK_EV +}; + +const u8 gUnknown_082082F8[] = {1, 1, 3, 2, 4, 6}; + +const s8 gUnknown_082082FE[][3] = { + // Happiness deltas + { 5, 3, 2}, + { 5, 3, 2}, + { 1, 1, 0}, + { 3, 2, 1}, + { 1, 1, 0}, + { 1, 1, 1}, + {-1, -1, -1}, + {-5, -5, -10}, + {-5, -5, -10} +}; + +const u16 gHMMoves[] = { + MOVE_CUT, + MOVE_FLY, + MOVE_SURF, + MOVE_STRENGTH, + MOVE_FLASH, + MOVE_ROCK_SMASH, + MOVE_WATERFALL, + MOVE_DIVE, + 0xffff +}; + +const u8 gJapaneseNidoranNames[][11] = {_("ニドラン♂"), _("ニドラン♀")}; diff --git a/src/pokemon/pokemon_icon.c b/src/pokemon/pokemon_icon.c new file mode 100644 index 000000000..8994ea49e --- /dev/null +++ b/src/pokemon/pokemon_icon.c @@ -0,0 +1,1276 @@ +#include "global.h" +#include "graphics.h" +#include "mail_data.h" +#include "species.h" +#include "sprite.h" + +#define POKE_ICON_BASE_PAL_TAG 56000 + +struct MonIconSpriteTemplate +{ + const struct OamData *oam; + const u8 *image; + const union AnimCmd *const *anims; + const union AffineAnimCmd *const *affineAnims; + void (*callback)(struct Sprite *); + u16 paletteTag; +}; + +const u8 * const gMonIconTable[] = +{ + gMonIcon_Bulbasaur, + gMonIcon_Bulbasaur, + gMonIcon_Ivysaur, + gMonIcon_Venusaur, + gMonIcon_Charmander, + gMonIcon_Charmeleon, + gMonIcon_Charizard, + gMonIcon_Squirtle, + gMonIcon_Wartortle, + gMonIcon_Blastoise, + gMonIcon_Caterpie, + gMonIcon_Metapod, + gMonIcon_Butterfree, + gMonIcon_Weedle, + gMonIcon_Kakuna, + gMonIcon_Beedrill, + gMonIcon_Pidgey, + gMonIcon_Pidgeotto, + gMonIcon_Pidgeot, + gMonIcon_Rattata, + gMonIcon_Raticate, + gMonIcon_Spearow, + gMonIcon_Fearow, + gMonIcon_Ekans, + gMonIcon_Arbok, + gMonIcon_Pikachu, + gMonIcon_Raichu, + gMonIcon_Sandshrew, + gMonIcon_Sandslash, + gMonIcon_NidoranF, + gMonIcon_Nidorina, + gMonIcon_Nidoqueen, + gMonIcon_NidoranM, + gMonIcon_Nidorino, + gMonIcon_Nidoking, + gMonIcon_Clefairy, + gMonIcon_Clefable, + gMonIcon_Vulpix, + gMonIcon_Ninetales, + gMonIcon_Jigglypuff, + gMonIcon_Wigglytuff, + gMonIcon_Zubat, + gMonIcon_Golbat, + gMonIcon_Oddish, + gMonIcon_Gloom, + gMonIcon_Vileplume, + gMonIcon_Paras, + gMonIcon_Parasect, + gMonIcon_Venonat, + gMonIcon_Venomoth, + gMonIcon_Diglett, + gMonIcon_Dugtrio, + gMonIcon_Meowth, + gMonIcon_Persian, + gMonIcon_Psyduck, + gMonIcon_Golduck, + gMonIcon_Mankey, + gMonIcon_Primeape, + gMonIcon_Growlithe, + gMonIcon_Arcanine, + gMonIcon_Poliwag, + gMonIcon_Poliwhirl, + gMonIcon_Poliwrath, + gMonIcon_Abra, + gMonIcon_Kadabra, + gMonIcon_Alakazam, + gMonIcon_Machop, + gMonIcon_Machoke, + gMonIcon_Machamp, + gMonIcon_Bellsprout, + gMonIcon_Weepinbell, + gMonIcon_Victreebel, + gMonIcon_Tentacool, + gMonIcon_Tentacruel, + gMonIcon_Geodude, + gMonIcon_Graveler, + gMonIcon_Golem, + gMonIcon_Ponyta, + gMonIcon_Rapidash, + gMonIcon_Slowpoke, + gMonIcon_Slowbro, + gMonIcon_Magnemite, + gMonIcon_Magneton, + gMonIcon_Farfetchd, + gMonIcon_Doduo, + gMonIcon_Dodrio, + gMonIcon_Seel, + gMonIcon_Dewgong, + gMonIcon_Grimer, + gMonIcon_Muk, + gMonIcon_Shellder, + gMonIcon_Cloyster, + gMonIcon_Gastly, + gMonIcon_Haunter, + gMonIcon_Gengar, + gMonIcon_Onix, + gMonIcon_Drowzee, + gMonIcon_Hypno, + gMonIcon_Krabby, + gMonIcon_Kingler, + gMonIcon_Voltorb, + gMonIcon_Electrode, + gMonIcon_Exeggcute, + gMonIcon_Exeggutor, + gMonIcon_Cubone, + gMonIcon_Marowak, + gMonIcon_Hitmonlee, + gMonIcon_Hitmonchan, + gMonIcon_Lickitung, + gMonIcon_Koffing, + gMonIcon_Weezing, + gMonIcon_Rhyhorn, + gMonIcon_Rhydon, + gMonIcon_Chansey, + gMonIcon_Tangela, + gMonIcon_Kangaskhan, + gMonIcon_Horsea, + gMonIcon_Seadra, + gMonIcon_Goldeen, + gMonIcon_Seaking, + gMonIcon_Staryu, + gMonIcon_Starmie, + gMonIcon_Mrmime, + gMonIcon_Scyther, + gMonIcon_Jynx, + gMonIcon_Electabuzz, + gMonIcon_Magmar, + gMonIcon_Pinsir, + gMonIcon_Tauros, + gMonIcon_Magikarp, + gMonIcon_Gyarados, + gMonIcon_Lapras, + gMonIcon_Ditto, + gMonIcon_Eevee, + gMonIcon_Vaporeon, + gMonIcon_Jolteon, + gMonIcon_Flareon, + gMonIcon_Porygon, + gMonIcon_Omanyte, + gMonIcon_Omastar, + gMonIcon_Kabuto, + gMonIcon_Kabutops, + gMonIcon_Aerodactyl, + gMonIcon_Snorlax, + gMonIcon_Articuno, + gMonIcon_Zapdos, + gMonIcon_Moltres, + gMonIcon_Dratini, + gMonIcon_Dragonair, + gMonIcon_Dragonite, + gMonIcon_Mewtwo, + gMonIcon_Mew, + gMonIcon_Chikorita, + gMonIcon_Bayleef, + gMonIcon_Meganium, + gMonIcon_Cyndaquil, + gMonIcon_Quilava, + gMonIcon_Typhlosion, + gMonIcon_Totodile, + gMonIcon_Croconaw, + gMonIcon_Feraligatr, + gMonIcon_Sentret, + gMonIcon_Furret, + gMonIcon_Hoothoot, + gMonIcon_Noctowl, + gMonIcon_Ledyba, + gMonIcon_Ledian, + gMonIcon_Spinarak, + gMonIcon_Ariados, + gMonIcon_Crobat, + gMonIcon_Chinchou, + gMonIcon_Lanturn, + gMonIcon_Pichu, + gMonIcon_Cleffa, + gMonIcon_Igglybuff, + gMonIcon_Togepi, + gMonIcon_Togetic, + gMonIcon_Natu, + gMonIcon_Xatu, + gMonIcon_Mareep, + gMonIcon_Flaaffy, + gMonIcon_Ampharos, + gMonIcon_Bellossom, + gMonIcon_Marill, + gMonIcon_Azumarill, + gMonIcon_Sudowoodo, + gMonIcon_Politoed, + gMonIcon_Hoppip, + gMonIcon_Skiploom, + gMonIcon_Jumpluff, + gMonIcon_Aipom, + gMonIcon_Sunkern, + gMonIcon_Sunflora, + gMonIcon_Yanma, + gMonIcon_Wooper, + gMonIcon_Quagsire, + gMonIcon_Espeon, + gMonIcon_Umbreon, + gMonIcon_Murkrow, + gMonIcon_Slowking, + gMonIcon_Misdreavus, + gMonIcon_UnownA, + gMonIcon_Wobbuffet, + gMonIcon_Girafarig, + gMonIcon_Pineco, + gMonIcon_Forretress, + gMonIcon_Dunsparce, + gMonIcon_Gligar, + gMonIcon_Steelix, + gMonIcon_Snubbull, + gMonIcon_Granbull, + gMonIcon_Qwilfish, + gMonIcon_Scizor, + gMonIcon_Shuckle, + gMonIcon_Heracross, + gMonIcon_Sneasel, + gMonIcon_Teddiursa, + gMonIcon_Ursaring, + gMonIcon_Slugma, + gMonIcon_Magcargo, + gMonIcon_Swinub, + gMonIcon_Piloswine, + gMonIcon_Corsola, + gMonIcon_Remoraid, + gMonIcon_Octillery, + gMonIcon_Delibird, + gMonIcon_Mantine, + gMonIcon_Skarmory, + gMonIcon_Houndour, + gMonIcon_Houndoom, + gMonIcon_Kingdra, + gMonIcon_Phanpy, + gMonIcon_Donphan, + gMonIcon_Porygon2, + gMonIcon_Stantler, + gMonIcon_Smeargle, + gMonIcon_Tyrogue, + gMonIcon_Hitmontop, + gMonIcon_Smoochum, + gMonIcon_Elekid, + gMonIcon_Magby, + gMonIcon_Miltank, + gMonIcon_Blissey, + gMonIcon_Raikou, + gMonIcon_Entei, + gMonIcon_Suicune, + gMonIcon_Larvitar, + gMonIcon_Pupitar, + gMonIcon_Tyranitar, + gMonIcon_Lugia, + gMonIcon_HoOh, + gMonIcon_Celebi, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_QuestionMark, + gMonIcon_Treecko, + gMonIcon_Grovyle, + gMonIcon_Sceptile, + gMonIcon_Torchic, + gMonIcon_Combusken, + gMonIcon_Blaziken, + gMonIcon_Mudkip, + gMonIcon_Marshtomp, + gMonIcon_Swampert, + gMonIcon_Poochyena, + gMonIcon_Mightyena, + gMonIcon_Zigzagoon, + gMonIcon_Linoone, + gMonIcon_Wurmple, + gMonIcon_Silcoon, + gMonIcon_Beautifly, + gMonIcon_Cascoon, + gMonIcon_Dustox, + gMonIcon_Lotad, + gMonIcon_Lombre, + gMonIcon_Ludicolo, + gMonIcon_Seedot, + gMonIcon_Nuzleaf, + gMonIcon_Shiftry, + gMonIcon_Nincada, + gMonIcon_Ninjask, + gMonIcon_Shedinja, + gMonIcon_Taillow, + gMonIcon_Swellow, + gMonIcon_Shroomish, + gMonIcon_Breloom, + gMonIcon_Spinda, + gMonIcon_Wingull, + gMonIcon_Pelipper, + gMonIcon_Surskit, + gMonIcon_Masquerain, + gMonIcon_Wailmer, + gMonIcon_Wailord, + gMonIcon_Skitty, + gMonIcon_Delcatty, + gMonIcon_Kecleon, + gMonIcon_Baltoy, + gMonIcon_Claydol, + gMonIcon_Nosepass, + gMonIcon_Torkoal, + gMonIcon_Sableye, + gMonIcon_Barboach, + gMonIcon_Whiscash, + gMonIcon_Luvdisc, + gMonIcon_Corphish, + gMonIcon_Crawdaunt, + gMonIcon_Feebas, + gMonIcon_Milotic, + gMonIcon_Carvanha, + gMonIcon_Sharpedo, + gMonIcon_Trapinch, + gMonIcon_Vibrava, + gMonIcon_Flygon, + gMonIcon_Makuhita, + gMonIcon_Hariyama, + gMonIcon_Electrike, + gMonIcon_Manectric, + gMonIcon_Numel, + gMonIcon_Camerupt, + gMonIcon_Spheal, + gMonIcon_Sealeo, + gMonIcon_Walrein, + gMonIcon_Cacnea, + gMonIcon_Cacturne, + gMonIcon_Snorunt, + gMonIcon_Glalie, + gMonIcon_Lunatone, + gMonIcon_Solrock, + gMonIcon_Azurill, + gMonIcon_Spoink, + gMonIcon_Grumpig, + gMonIcon_Plusle, + gMonIcon_Minun, + gMonIcon_Mawile, + gMonIcon_Meditite, + gMonIcon_Medicham, + gMonIcon_Swablu, + gMonIcon_Altaria, + gMonIcon_Wynaut, + gMonIcon_Duskull, + gMonIcon_Dusclops, + gMonIcon_Roselia, + gMonIcon_Slakoth, + gMonIcon_Vigoroth, + gMonIcon_Slaking, + gMonIcon_Gulpin, + gMonIcon_Swalot, + gMonIcon_Tropius, + gMonIcon_Whismur, + gMonIcon_Loudred, + gMonIcon_Exploud, + gMonIcon_Clamperl, + gMonIcon_Huntail, + gMonIcon_Gorebyss, + gMonIcon_Absol, + gMonIcon_Shuppet, + gMonIcon_Banette, + gMonIcon_Seviper, + gMonIcon_Zangoose, + gMonIcon_Relicanth, + gMonIcon_Aron, + gMonIcon_Lairon, + gMonIcon_Aggron, + gMonIcon_Castform, + gMonIcon_Volbeat, + gMonIcon_Illumise, + gMonIcon_Lileep, + gMonIcon_Cradily, + gMonIcon_Anorith, + gMonIcon_Armaldo, + gMonIcon_Ralts, + gMonIcon_Kirlia, + gMonIcon_Gardevoir, + gMonIcon_Bagon, + gMonIcon_Shelgon, + gMonIcon_Salamence, + gMonIcon_Beldum, + gMonIcon_Metang, + gMonIcon_Metagross, + gMonIcon_Regirock, + gMonIcon_Regice, + gMonIcon_Registeel, + gMonIcon_Kyogre, + gMonIcon_Groudon, + gMonIcon_Rayquaza, + gMonIcon_Latias, + gMonIcon_Latios, + gMonIcon_Jirachi, + gMonIcon_Deoxys, + gMonIcon_Chimecho, + gMonIcon_Egg, + gMonIcon_UnownB, + gMonIcon_UnownC, + gMonIcon_UnownD, + gMonIcon_UnownE, + gMonIcon_UnownF, + gMonIcon_UnownG, + gMonIcon_UnownH, + gMonIcon_UnownI, + gMonIcon_UnownJ, + gMonIcon_UnownK, + gMonIcon_UnownL, + gMonIcon_UnownM, + gMonIcon_UnownN, + gMonIcon_UnownO, + gMonIcon_UnownP, + gMonIcon_UnownQ, + gMonIcon_UnownR, + gMonIcon_UnownS, + gMonIcon_UnownT, + gMonIcon_UnownU, + gMonIcon_UnownV, + gMonIcon_UnownW, + gMonIcon_UnownX, + gMonIcon_UnownY, + gMonIcon_UnownZ, + gMonIcon_UnownExclamationMark, + gMonIcon_UnownQuestionMark, +}; + +const u8 gMonIconPaletteIndices[] = +{ + 0, // ?????????? + 1, // Bulbasaur + 1, // Ivysaur + 1, // Venusaur + 0, // Charmander + 0, // Charmeleon + 0, // Charizard + 0, // Squirtle + 2, // Wartortle + 2, // Blastoise + 1, // Caterpie + 1, // Metapod + 0, // Butterfree + 1, // Weedle + 2, // Kakuna + 2, // Beedrill + 0, // Pidgey + 0, // Pidgeotto + 0, // Pidgeot + 2, // Rattata + 1, // Raticate + 0, // Spearow + 0, // Fearow + 2, // Ekans + 2, // Arbok + 2, // Pikachu + 0, // Raichu + 2, // Sandshrew + 2, // Sandslash + 2, // Nidoran♀ + 2, // Nidorina + 2, // Nidoqueen + 2, // Nidoran♂ + 2, // Nidorino + 2, // Nidoking + 0, // Clefairy + 0, // Clefable + 2, // Vulpix + 1, // Ninetales + 0, // Jigglypuff + 0, // Wigglytuff + 2, // Zubat + 2, // Golbat + 1, // Oddish + 0, // Gloom + 0, // Vileplume + 0, // Paras + 0, // Parasect + 0, // Venonat + 2, // Venomoth + 2, // Diglett + 2, // Dugtrio + 1, // Meowth + 1, // Persian + 1, // Psyduck + 2, // Golduck + 1, // Mankey + 2, // Primeape + 0, // Growlithe + 0, // Arcanine + 0, // Poliwag + 0, // Poliwhirl + 0, // Poliwrath + 2, // Abra + 2, // Kadabra + 2, // Alakazam + 0, // Machop + 2, // Machoke + 0, // Machamp + 1, // Bellsprout + 1, // Weepinbell + 1, // Victreebel + 2, // Tentacool + 2, // Tentacruel + 1, // Geodude + 1, // Graveler + 1, // Golem + 0, // Ponyta + 0, // Rapidash + 0, // Slowpoke + 0, // Slowbro + 0, // Magnemite + 0, // Magneton + 1, // Farfetch'd + 2, // Doduo + 2, // Dodrio + 2, // Seel + 2, // Dewgong + 2, // Grimer + 2, // Muk + 2, // Shellder + 2, // Cloyster + 2, // Gastly + 2, // Haunter + 2, // Gengar + 2, // Onix + 2, // Drowzee + 1, // Hypno + 2, // Krabby + 2, // Kingler + 0, // Voltorb + 0, // Electrode + 0, // Exeggcute + 1, // Exeggutor + 1, // Cubone + 1, // Marowak + 2, // Hitmonlee + 2, // Hitmonchan + 1, // Lickitung + 2, // Koffing + 2, // Weezing + 1, // Rhyhorn + 1, // Rhydon + 0, // Chansey + 0, // Tangela + 1, // Kangaskhan + 0, // Horsea + 0, // Seadra + 0, // Goldeen + 0, // Seaking + 2, // Staryu + 2, // Starmie + 0, // Mr. mime + 1, // Scyther + 2, // Jynx + 1, // Electabuzz + 0, // Magmar + 2, // Pinsir + 2, // Tauros + 0, // Magikarp + 0, // Gyarados + 2, // Lapras + 2, // Ditto + 2, // Eevee + 0, // Vaporeon + 0, // Jolteon + 0, // Flareon + 0, // Porygon + 0, // Omanyte + 0, // Omastar + 2, // Kabuto + 2, // Kabutops + 0, // Aerodactyl + 1, // Snorlax + 0, // Articuno + 0, // Zapdos + 0, // Moltres + 0, // Dratini + 0, // Dragonair + 2, // Dragonite + 2, // Mewtwo + 0, // Mew + 1, // Chikorita + 1, // Bayleef + 1, // Meganium + 1, // Cyndaquil + 1, // Quilava + 1, // Typhlosion + 2, // Totodile + 2, // Croconaw + 2, // Feraligatr + 2, // Sentret + 2, // Furret + 2, // Hoothoot + 2, // Noctowl + 0, // Ledyba + 0, // Ledian + 1, // Spinarak + 0, // Ariados + 2, // Crobat + 2, // Chinchou + 0, // Lanturn + 0, // Pichu + 0, // Cleffa + 1, // Igglybuff + 2, // Togepi + 2, // Togetic + 0, // Natu + 0, // Xatu + 2, // Mareep + 0, // Flaaffy + 0, // Ampharos + 1, // Bellossom + 2, // Marill + 2, // Azumarill + 1, // Sudowoodo + 1, // Politoed + 1, // Hoppip + 1, // Skiploom + 2, // Jumpluff + 2, // Aipom + 1, // Sunkern + 1, // Sunflora + 1, // Yanma + 0, // Wooper + 0, // Quagsire + 2, // Espeon + 2, // Umbreon + 2, // Murkrow + 0, // Slowking + 0, // Misdreavus + 0, // Unown A + 0, // Wobbuffet + 1, // Girafarig + 0, // Pineco + 2, // Forretress + 2, // Dunsparce + 2, // Gligar + 0, // Steelix + 0, // Snubbull + 2, // Granbull + 0, // Qwilfish + 0, // Scizor + 1, // Shuckle + 2, // Heracross + 0, // Sneasel + 0, // Teddiursa + 2, // Ursaring + 0, // Slugma + 0, // Magcargo + 2, // Swinub + 2, // Piloswine + 0, // Corsola + 0, // Remoraid + 0, // Octillery + 0, // Delibird + 2, // Mantine + 0, // Skarmory + 0, // Houndour + 0, // Houndoom + 0, // Kingdra + 0, // Phanpy + 0, // Donphan + 0, // Porygon2 + 2, // Stantler + 1, // Smeargle + 2, // Tyrogue + 2, // Hitmontop + 1, // Smoochum + 1, // Elekid + 1, // Magby + 1, // Miltank + 1, // Blissey + 0, // Raikou + 2, // Entei + 0, // Suicune + 1, // Larvitar + 0, // Pupitar + 1, // Tyranitar + 0, // Lugia + 1, // Ho-Oh + 1, // Celebi + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 0, // ? + 1, // Treecko + 0, // Grovyle + 1, // Sceptile + 0, // Torchic + 0, // Combusken + 0, // Blaziken + 0, // Mudkip + 0, // Marshtomp + 0, // Swampert + 2, // Poochyena + 2, // Mightyena + 2, // Zigzagoon + 2, // Linoone + 0, // Wurmple + 2, // Silcoon + 0, // Beautifly + 2, // Cascoon + 1, // Dustox + 1, // Lotad + 1, // Lombre + 1, // Ludicolo + 1, // Seedot + 1, // Nuzleaf + 0, // Shiftry + 1, // Nincada + 1, // Ninjask + 1, // Shedinja + 2, // Taillow + 2, // Swellow + 1, // Shroomish + 1, // Breloom + 1, // Spinda + 0, // Wingull + 0, // Pelipper + 2, // Surskit + 0, // Masquerain + 2, // Wailmer + 0, // Wailord + 0, // Skitty + 2, // Delcatty + 1, // Kecleon + 1, // Baltoy + 0, // Claydol + 0, // Nosepass + 1, // Torkoal + 2, // Sableye + 0, // Barboach + 0, // Whiscash + 0, // Luvdisc + 0, // Corphish + 0, // Crawdaunt + 2, // Feebas + 0, // Milotic + 0, // Carvanha + 0, // Sharpedo + 1, // Trapinch + 1, // Vibrava + 1, // Flygon + 2, // Makuhita + 1, // Hariyama + 1, // Electrike + 0, // Manectric + 1, // Numel + 0, // Camerupt + 2, // Spheal + 2, // Sealeo + 0, // Walrein + 1, // Cacnea + 1, // Cacturne + 2, // Snorunt + 0, // Glalie + 1, // Lunatone + 0, // Solrock + 2, // Azurill + 0, // Spoink + 2, // Grumpig + 0, // Plusle + 0, // Minun + 2, // Mawile + 0, // Meditite + 0, // Medicham + 0, // Swablu + 0, // Altaria + 0, // Wynaut + 0, // Duskull + 0, // Dusclops + 0, // Roselia + 2, // Slakoth + 2, // Vigoroth + 1, // Slaking + 1, // Gulpin + 2, // Swalot + 1, // Tropius + 0, // Whismur + 2, // Loudred + 2, // Exploud + 0, // Clamperl + 0, // Huntail + 0, // Gorebyss + 0, // Absol + 0, // Shuppet + 0, // Banette + 2, // Seviper + 0, // Zangoose + 1, // Relicanth + 2, // Aron + 2, // Lairon + 2, // Aggron + 0, // Castform + 0, // Volbeat + 2, // Illumise + 2, // Lileep + 0, // Cradily + 0, // Anorith + 0, // Armaldo + 1, // Ralts + 1, // Kirlia + 1, // Gardevoir + 2, // Bagon + 2, // Shelgon + 0, // Salamence + 0, // Beldum + 0, // Metang + 0, // Metagross + 2, // Regirock + 2, // Regice + 2, // Registeel + 2, // Kyogre + 0, // Groudon + 1, // Rayquaza + 0, // Latias + 2, // Latios + 0, // Jirachi + 0, // Deoxys + 0, // Chimecho + 1, // Egg + 0, // Unown B + 0, // Unown C + 0, // Unown D + 0, // Unown E + 0, // Unown F + 0, // Unown G + 0, // Unown H + 0, // Unown I + 0, // Unown J + 0, // Unown K + 0, // Unown L + 0, // Unown M + 0, // Unown N + 0, // Unown O + 0, // Unown P + 0, // Unown Q + 0, // Unown R + 0, // Unown S + 0, // Unown T + 0, // Unown U + 0, // Unown V + 0, // Unown W + 0, // Unown X + 0, // Unown Y + 0, // Unown Z + 0, // Unown Exclamation Mark + 0, // Unown Question Mark +}; + +const struct SpritePalette gMonIconPaletteTable[] = +{ + { gMonIconPalettes[0], POKE_ICON_BASE_PAL_TAG + 0 }, + { gMonIconPalettes[1], POKE_ICON_BASE_PAL_TAG + 1 }, + { gMonIconPalettes[2], POKE_ICON_BASE_PAL_TAG + 2 }, + +// There are only 3 actual palettes. The following are unused +// and don't point to valid data. + { gMonIconPalettes[3], POKE_ICON_BASE_PAL_TAG + 3 }, + { gMonIconPalettes[4], POKE_ICON_BASE_PAL_TAG + 4 }, + { gMonIconPalettes[5], POKE_ICON_BASE_PAL_TAG + 5 }, +}; + +static const struct OamData sMonIconOamData = +{ + .size = 2, + .priority = 1, +}; + +// fastest to slowest + +static const union AnimCmd sAnim_0[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(1, 6), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sAnim_1[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sAnim_2[] = +{ + ANIMCMD_FRAME(0, 14), + ANIMCMD_FRAME(1, 14), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sAnim_3[] = +{ + ANIMCMD_FRAME(0, 22), + ANIMCMD_FRAME(1, 22), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sAnim_4[] = +{ + ANIMCMD_FRAME(0, 29), + ANIMCMD_FRAME(0, 29), // frame 0 is repeated + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const sMonIconAnims[] = +{ + sAnim_0, + sAnim_1, + sAnim_2, + sAnim_3, + sAnim_4, +}; + +static const union AffineAnimCmd sAffineAnim_0[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 0, 10), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sAffineAnim_1[] = +{ + AFFINEANIMCMD_FRAME(-2, -2, 0, 122), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const sMonIconAffineAnims[] = +{ + sAffineAnim_0, + sAffineAnim_1, +}; + +const u16 sSpriteImageSizes[3][4] = +{ + // square + { + 0x20, // 1×1 + 0x80, // 2×2 + 0x200, // 4×4 + 0x800, // 8×8 + }, + + // horizontal rectangle + { + 0x40, // 2×1 + 0x80, // 4×1 + 0x100, // 4×2 + 0x400, // 8×4 + }, + + // vertical rectangle + { + 0x40, // 1×2 + 0x80, // 1×4 + 0x100, // 2×4 + 0x400, // 4×8 + }, +}; + +u16 GetUnownLetterByPersonality(u32); +const u8 *GetMonIconPtr(u16, u32 personality); +u8 UpdateMonIconFrame(struct Sprite *); +u8 CreateMonIconSprite(struct MonIconSpriteTemplate *, s16, s16, u8); +void sub_809D7E8(struct Sprite *); + +// duplicate of sub_809D3A4 +u8 unref_sub_809D26C(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) +{ + u8 spriteId; + struct MonIconSpriteTemplate iconTemplate; + struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match + + iconTemplatePtr->oam = &sMonIconOamData; + iconTemplatePtr->image = gMonIconTable[species]; + iconTemplatePtr->anims = sMonIconAnims; + iconTemplatePtr->affineAnims = sMonIconAffineAnims; + iconTemplatePtr->callback = callback; + iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species]; + + spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority); + + UpdateMonIconFrame(&gSprites[spriteId]); + + return spriteId; +} + +u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality) +{ + u8 spriteId; + struct MonIconSpriteTemplate iconTemplate = + { + .oam = &sMonIconOamData, + .image = GetMonIconPtr(species, personality), + .anims = sMonIconAnims, + .affineAnims = sMonIconAffineAnims, + .callback = callback, + .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species], + }; + + if (species > SPECIES_EGG) + iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG; + + spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority); + + UpdateMonIconFrame(&gSprites[spriteId]); + + return spriteId; +} + +u8 sub_809D3A4(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) +{ + u8 spriteId; + struct MonIconSpriteTemplate iconTemplate; + struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match + + iconTemplatePtr->oam = &sMonIconOamData; + iconTemplatePtr->image = gMonIconTable[species]; + iconTemplatePtr->anims = sMonIconAnims; + iconTemplatePtr->affineAnims = sMonIconAffineAnims; + iconTemplatePtr->callback = callback; + iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species]; + + spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority); + + UpdateMonIconFrame(&gSprites[spriteId]); + + return spriteId; +} + +u16 mon_icon_convert_unown_species_id(u16 species, u32 personality) +{ + u16 result; + + if (species == SPECIES_UNOWN) + { + u16 letter = GetUnownLetterByPersonality(personality); + if (letter == 0) + letter = SPECIES_UNOWN; + else + letter += (SPECIES_UNOWN_B - 1); + result = letter; + } + else + { + if (species > SPECIES_EGG) + result = 260; + else + result = species; + } + + return result; +} + +u16 GetUnownLetterByPersonality(u32 personality) +{ + return (((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 0x1C; +} + +u16 sub_809D4A8(u16 species) +{ + u16 value; + + if (MailSpeciesToSpecies(species, &value) == SPECIES_UNOWN) + { + if (value == 0) + value += SPECIES_UNOWN; + else + value += (SPECIES_UNOWN_B - 1); + return value; + } + else + { + return mon_icon_convert_unown_species_id(species, 0); + } +} + +const u8 *GetMonIconPtr(u16 species, u32 personality) +{ + u16 convertedSpecies = mon_icon_convert_unown_species_id(species, personality); + return gMonIconTable[convertedSpecies]; +} + +void sub_809D510(struct Sprite *sprite) +{ + sub_809D7E8(sprite); +} + +void sub_809D51C(void) +{ + u8 i; + for (i = 0; i < 6; i++) + LoadSpritePalette(&gMonIconPaletteTable[i]); +} + +// unused +void SafeLoadMonIconPalette(u16 species) +{ + u8 palIndex; + if (species > SPECIES_EGG) + species = 260; + palIndex = gMonIconPaletteIndices[species]; + if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF) + LoadSpritePalette(&gMonIconPaletteTable[palIndex]); +} + +void sub_809D580(u16 species) +{ + u8 palIndex = gMonIconPaletteIndices[species]; + if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF) + LoadSpritePalette(&gMonIconPaletteTable[palIndex]); +} + +// unused +void FreeMonIconPalettes(void) +{ + u8 i; + for (i = 0; i < 6; i++) + FreeSpritePaletteByTag(gMonIconPaletteTable[i].tag); +} + +// unused +void SafeFreeMonIconPalette(u16 species) +{ + u8 palIndex; + if (species > SPECIES_EGG) + species = 260; + palIndex = gMonIconPaletteIndices[species]; + FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag); +} + +void sub_809D608(u16 species) +{ + u8 palIndex; + palIndex = gMonIconPaletteIndices[species]; + FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag); +} + +void sub_809D62C(struct Sprite *sprite) +{ + UpdateMonIconFrame(sprite); +} + +// TODO: try to find a way to avoid using goto and asm statement +u8 UpdateMonIconFrame(struct Sprite *sprite) +{ + u8 result = 0; + + if (sprite->animDelayCounter == 0) + { + s16 frame = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; + + if (frame != -2) + { + if (frame != -1) + goto copy; + goto end; + } + + sprite->animCmdIndex = 0; + goto end; + + copy: + RequestSpriteCopy( + (u8 *)sprite->images + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame, + (u8 *)OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP, + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]); + { + register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; + sprite->animDelayCounter = duration; + } + sprite->animCmdIndex++; + result = sprite->animCmdIndex; + } + else + { + sprite->animDelayCounter--; + } + +end: + return result; +} + +u8 CreateMonIconSprite(struct MonIconSpriteTemplate *iconTemplate, s16 x, s16 y, u8 subpriority) +{ + u8 spriteId; + + struct SpriteFrameImage image = { NULL, sSpriteImageSizes[iconTemplate->oam->shape][iconTemplate->oam->size] }; + + struct SpriteTemplate spriteTemplate = + { + .tileTag = 0xFFFF, + .paletteTag = iconTemplate->paletteTag, + .oam = iconTemplate->oam, + .anims = iconTemplate->anims, + .images = &image, + .affineAnims = iconTemplate->affineAnims, + .callback = iconTemplate->callback, + }; + + spriteId = CreateSprite(&spriteTemplate, x, y, subpriority); + gSprites[spriteId].animPaused = TRUE; + gSprites[spriteId].animBeginning = FALSE; + gSprites[spriteId].images = (const struct SpriteFrameImage *)iconTemplate->image; + return spriteId; +} + +void sub_809D7E8(struct Sprite *sprite) +{ + struct SpriteFrameImage image = { NULL, sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] }; + sprite->images = ℑ + DestroySprite(sprite); +} + +void sub_809D824(struct Sprite *sprite, u8 animNum) +{ + sprite->animNum = animNum; + sprite->animDelayCounter = 0; + sprite->animCmdIndex = 0; +} diff --git a/src/pokemon/pokemon_size_record.c b/src/pokemon/pokemon_size_record.c new file mode 100644 index 000000000..f2222bd3b --- /dev/null +++ b/src/pokemon/pokemon_size_record.c @@ -0,0 +1,217 @@ +#include "global.h" +#include "pokemon_size_record.h" +#include "data2.h" +#include "event_data.h" +#include "pokedex.h" +#include "species.h" +#include "string_util.h" +#include "strings2.h" +#include "text.h" + +struct UnknownStruct +{ + u16 unk0; + u8 unk2; + u16 unk4; +}; + +extern u16 gScriptResult; + +static const struct UnknownStruct sBigMonSizeTable[] = +{ + { 290, 1, 0 }, + { 300, 1, 10 }, + { 400, 2, 110 }, + { 500, 4, 310 }, + { 600, 20, 710 }, + { 700, 50, 2710 }, + { 800, 100, 7710 }, + { 900, 150, 17710 }, + { 1000, 150, 32710 }, + { 1100, 100, -17826 }, + { 1200, 50, -7826 }, + { 1300, 20, -2826 }, + { 1400, 5, -826 }, + { 1500, 2, -326 }, + { 1600, 1, -126 }, + { 1700, 1, -26 }, +}; + +#define CM_PER_INCH 2.54 + +static u32 GetMonSizeHash(struct Pokemon *pkmn) +{ + // UB: Too few arguments for function 'GetMonData' + u16 personality = GetMonData(pkmn, MON_DATA_PERSONALITY); + u16 hpIV = GetMonData(pkmn, MON_DATA_HP_IV) & 0xF; + u16 attackIV = GetMonData(pkmn, MON_DATA_ATK_IV) & 0xF; + u16 defenseIV = GetMonData(pkmn, MON_DATA_DEF_IV) & 0xF; + u16 speedIV = GetMonData(pkmn, MON_DATA_SPD_IV) & 0xF; + u16 spAtkIV = GetMonData(pkmn, MON_DATA_SPATK_IV) & 0xF; + u16 spDefIV = GetMonData(pkmn, MON_DATA_SPDEF_IV) & 0xF; + u32 hibyte = ((attackIV ^ defenseIV) * hpIV) ^ (personality & 0xFF); + u32 lobyte = ((spAtkIV ^ spDefIV) * speedIV) ^ (personality >> 8); + + return (hibyte << 8) + lobyte; +} + +static u8 TranslateBigMonSizeTableIndex(u16 a) +{ + u8 i; + + for (i = 1; i < 15; i++) + { + if (a < sBigMonSizeTable[i].unk4) + return i - 1; + } + return i; +} + +static u32 GetMonSize(u16 species, u16 b) +{ + u64 unk2; + u64 unk4; + u64 unk0; + u32 height; + u32 var; + + height = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(species), 0); + var = TranslateBigMonSizeTableIndex(b); + unk0 = sBigMonSizeTable[var].unk0; + unk2 = sBigMonSizeTable[var].unk2; + unk4 = sBigMonSizeTable[var].unk4; + unk0 += (b - unk4) / unk2; + return height * unk0 / 10; +} + +static void FormatMonSizeRecord(u8 *string, u32 size) +{ +#if ENGLISH + u8 decimalPoint[] = _("."); +#elif GERMAN + u8 decimalPoint[] = _(","); +#endif + +#ifdef UNITS_IMPERIAL + //Convert size from centimeters to inches + size = (double)(size * 10) / (CM_PER_INCH * 10); +#endif + + string = ConvertIntToDecimalStringN(string, size / 10, 0, 8); + string = StringAppend(string, decimalPoint); + ConvertIntToDecimalStringN(string, size % 10, 0, 1); +} + +static u8 CompareMonSize(u16 species, u16 *sizeRecord) +{ + if (gScriptResult == 0xFF) + { + return 0; + } + else + { + struct Pokemon *pkmn = &gPlayerParty[gScriptResult]; + + // UB: Too few arguments for function 'GetMonData' + if (GetMonData(pkmn, MON_DATA_IS_EGG) == TRUE || GetMonData(pkmn, MON_DATA_SPECIES) != species) + { + return 1; + } + else + { + u32 oldSize; + u32 newSize; + u16 sizeParams; + + *(&sizeParams) = GetMonSizeHash(pkmn); + newSize = GetMonSize(species, sizeParams); + oldSize = GetMonSize(species, *sizeRecord); + FormatMonSizeRecord(gStringVar2, newSize); + if (newSize <= oldSize) + { + return 2; + } + else + { + *sizeRecord = sizeParams; + return 3; + } + } + } +} + +//Stores species name in gStringVar1, trainer's name in gStringVar2, and size in gStringVar3 +static void GetMonSizeRecordInfo(u16 species, u16 *sizeRecord) +{ + u32 size = GetMonSize(species, *sizeRecord); + + FormatMonSizeRecord(gStringVar3, size); + StringCopy(gStringVar1, gSpeciesNames[species]); + if (*sizeRecord == 0x8100) + StringCopy(gStringVar2, gOtherText_Marco); + else + StringCopy(gStringVar2, gSaveBlock2.playerName); +} + +void InitShroomishSizeRecord(void) +{ + VarSet(VAR_SHROOMISH_SIZE_RECORD, 0x8100); +} + +void GetShroomishSizeRecordInfo(void) +{ + u16 *sizeRecord = GetVarPointer(VAR_SHROOMISH_SIZE_RECORD); + + GetMonSizeRecordInfo(SPECIES_SHROOMISH, sizeRecord); +} + +void CompareShroomishSize(void) +{ + u16 *sizeRecord = GetVarPointer(VAR_SHROOMISH_SIZE_RECORD); + + gScriptResult = CompareMonSize(SPECIES_SHROOMISH, sizeRecord); +} + +void InitBarboachSizeRecord(void) +{ + VarSet(VAR_BARBOACH_SIZE_RECORD, 0x8100); +} + +void GetBarboachSizeRecordInfo(void) +{ + u16 *sizeRecord = GetVarPointer(VAR_BARBOACH_SIZE_RECORD); + + GetMonSizeRecordInfo(SPECIES_BARBOACH, sizeRecord); +} + +void CompareBarboachSize(void) +{ + u16 *sizeRecord = GetVarPointer(VAR_BARBOACH_SIZE_RECORD); + + gScriptResult = CompareMonSize(SPECIES_BARBOACH, sizeRecord); +} + +void GiveGiftRibbonToParty(u8 index, u8 ribbonId) +{ + s32 i; + bool32 gotRibbon = FALSE; + u8 data = 1; + u8 arr[] = { 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E }; + + if (index < 11 && ribbonId < 65) + { + gSaveBlock1.giftRibbons[index] = ribbonId; + for (i = 0; i < 6; i++) + { + struct Pokemon *pkmn = &gPlayerParty[i]; + + if (GetMonData(pkmn, MON_DATA_SPECIES) != 0 && GetMonData(pkmn, MON_DATA_SANITY_BIT3) == 0) + { + SetMonData(pkmn, arr[index], &data); + gotRibbon = TRUE; + } + } + if (gotRibbon) + FlagSet(SYS_RIBBON_GET); + } +} diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c new file mode 100644 index 000000000..5e97523e2 --- /dev/null +++ b/src/pokemon/pokemon_storage_system.c @@ -0,0 +1,99 @@ +#include "global.h" +#include "pokemon_storage_system.h" +#include "menu.h" +#include "string_util.h" + +struct StorageAction { + u8 *text; + u8 format; +}; + +extern const struct StorageAction gUnknown_083B6DF4[]; + +extern const u8 unk_2000000[]; + +EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; + +#define gUnk2002694 (u8 *)(&unk_2000000[0x2694]) +#define gUnk20026A6 (u8 *)(&unk_2000000[0x26a6]) +#define gUnk20011fa (u8 *)(&unk_2000000[0x11fa]) +#define gUnk20026e4 (u8 *)(&unk_2000000[0x26e4]) + +void sub_8098898(u8 index) { + u8 *ptr; + + MenuDrawTextWindow(10, 16, 29, 19); + + switch (gUnknown_083B6DF4[index].format) + { + + case 2: + ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); + ptr = StringCopy(ptr, gUnk20011fa); + break; + + case 5: + ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); + ptr = StringCopy(ptr, gUnk20026e4); + break; + + case 1: + // {var} + " is selected." + ptr = StringCopy(gUnk2002694, gUnk20011fa); + ptr = StringCopy(ptr, gUnknown_083B6DF4[index].text); + break; + + case 4: + // {var} + " was released." + ptr = StringCopy(gUnk2002694, gUnk20026e4); +#if ENGLISH + ptr = StringCopy(ptr, gUnknown_083B6DF4[index].text); +#elif GERMAN + ptr = de_sub_8073174(gUnk2002694, gUnknown_083B6DF4[index].text); +#endif + break; + + case 3: + { + u8 *stringLength; + u8 *text; + + text = gUnknown_083B6DF4[index].text; + stringLength = &text[StringLength(text)] + 1; + + ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); + ptr = StringCopy(ptr, gUnk20011fa); + ptr = StringCopy(ptr, stringLength); + } + break; + + case 6: + // "Bye-bye, ".substr(0, -1) + {var} + "Bye-bye, !".substr(-1, 1) + { + u8 *stringLength; + u8 *text; + + text = gUnknown_083B6DF4[index].text; + stringLength = &text[StringLength(text)] - 1; + + ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); + ptr = StringCopy(ptr - 1, gUnk20026e4); + ptr = StringCopy(ptr, stringLength); + } + break; + + case 0: + default: + ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); + break; + } + + while (ptr < gUnk20026A6) + { + ptr[0] = CHAR_SPACE; + ptr++; + } + + ptr[0] = EOS; + MenuPrint(gUnk2002694, 11, 17); +} diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c new file mode 100644 index 000000000..00a0bea29 --- /dev/null +++ b/src/pokemon/pokemon_summary_screen.c @@ -0,0 +1,180 @@ +#include "global.h" +#include "pokemon_summary_screen.h" +#include "link.h" +#include "menu.h" +#include "pokemon.h" +#include "region_map.h" +#include "string_util.h" +#include "strings2.h" +#include "tv.h" + +extern struct Pokemon *unk_2018000; + +bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon) +{ + u32 trainerId; + + if (unk_2018000 == gEnemyParty) + { + u8 enemyId = GetMultiplayerId() ^ 1; + trainerId = gLinkPlayers[enemyId].trainerId & 0xFFFF; + StringCopy(gStringVar1, gLinkPlayers[enemyId].name); + StripExtCtrlCodes(gStringVar1); + } + else + { + trainerId = GetPlayerTrainerId() & 0xFFFF; + StringCopy(gStringVar1, gSaveBlock2.playerName); + } + + if (trainerId != (GetMonData(mon, MON_DATA_OT_ID) & 0xFFFF)) + return FALSE; + + GetMonData(mon, MON_DATA_OT_NAME, gStringVar2); + + if (!StringCompareWithoutExtCtrlCodes(gStringVar1, gStringVar2)) + return TRUE; + + return FALSE; +} + +void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *mon, u8 left, u8 top) +{ + u8 locationMet; + u8 gameMet = GetMonData(mon, MON_DATA_MET_GAME); + + if (!(gameMet == VERSION_RUBY || gameMet == VERSION_SAPPHIRE || gameMet == VERSION_EMERALD)) + { + MenuPrint(gOtherText_EggObtainedInTrade, left, top); + return; + } + + locationMet = GetMonData(mon, MON_DATA_MET_LOCATION); + + if (locationMet == 255) + { + MenuPrint(gOtherText_EggNicePlace, left, top); + return; + } + + if (!PokemonSummaryScreen_CheckOT(mon)) + { + MenuPrint(gOtherText_EggObtainedInTrade, left, top); + return; + } + + asm(""); // needed to match for some reason + + if (locationMet == 253) + { + MenuPrint(gOtherText_EggHotSprings, left, top); + return; + } + + MenuPrint(gOtherText_EggDayCare, left, top); +} + +void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8 top) +{ + u8 locationMet; + u8 gameMet; + u8 *ptr = gStringVar4; + u8 nature = GetNature(pokemon); + +#if ENGLISH + ptr = sub_80A1E9C(ptr, gNatureNames[nature], 14); + + if (nature != NATURE_BOLD && nature != NATURE_GENTLE) + { + ptr = StringCopy(ptr, gOtherText_Terminator4); + } + + ptr = StringCopy(ptr, gOtherText_Nature); +#elif GERMAN + ptr = StringCopy(gStringVar4, gOtherText_Nature); + ptr = sub_80A1E9C(ptr, gNatureNames[nature], 14); + ptr = StringCopy(ptr, gOtherText_Terminator4); +#endif + + if (PokemonSummaryScreen_CheckOT(pokemon) == TRUE) + { + locationMet = GetMonData(pokemon, MON_DATA_MET_LOCATION); + + if (GetMonData(pokemon, MON_DATA_MET_LEVEL) == 0) + { + ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, 5); + *ptr = CHAR_NEWLINE; + ptr++; + + CopyLocationName(gStringVar1, locationMet); + ptr = sub_80A1E9C(ptr, gStringVar1, 14); + StringCopy(ptr, gOtherText_Egg2); + } + else if (locationMet >= 88) + { + *ptr = CHAR_NEWLINE; + ptr++; + + StringCopy(ptr, gOtherText_ObtainedInTrade); + } + else + { + u8 levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL); + + ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet); + *ptr = CHAR_NEWLINE; + ptr++; + + CopyLocationName(gStringVar1, locationMet); + ptr = sub_80A1E9C(ptr, gStringVar1, 14); + StringCopy(ptr, gOtherText_Met); + } + } + else + { + gameMet = GetMonData(pokemon, MON_DATA_MET_GAME); + + if (!(gameMet == VERSION_RUBY || gameMet == VERSION_SAPPHIRE || gameMet == VERSION_EMERALD)) + { + *ptr = CHAR_NEWLINE; + ptr++; + + StringCopy(ptr, gOtherText_ObtainedInTrade); + } + else + { + locationMet = GetMonData(pokemon, MON_DATA_MET_LOCATION); + if (locationMet == 0xFF) + { + u8 levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL); + + ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet); + *ptr = CHAR_NEWLINE; + ptr++; + + StringCopy(ptr, gOtherText_FatefulEncounter); + } + else if (locationMet >= 88) + { + *ptr = CHAR_NEWLINE; + ptr++; + + StringCopy(ptr, gOtherText_ObtainedInTrade); + } + else + { + u8 levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL); + + ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet); + *ptr = CHAR_NEWLINE; + ptr++; + + CopyLocationName(gStringVar1, locationMet); + ptr = sub_80A1E9C(ptr, gStringVar1, 14); + StringCopy(ptr, gOtherText_Met2); + } + } + } + + MenuPrint(gStringVar4, left++, top++); +} diff --git a/src/pokemon_1.c b/src/pokemon_1.c deleted file mode 100644 index c65bfa185..000000000 --- a/src/pokemon_1.c +++ /dev/null @@ -1,666 +0,0 @@ -#include "global.h" -#include "data2.h" -#include "items.h" -#include "main.h" -#include "pokemon.h" -#include "rng.h" -#include "rom4.h" -#include "species.h" -#include "sprite.h" -#include "string_util.h" -#include "text.h" - -//Extracts the upper 16 bits of a 32-bit number -#define HIHALF(n) (((n) & 0xFFFF0000) >> 16) - -//Extracts the lower 16 bits of a 32-bit number -#define LOHALF(n) ((n) & 0xFFFF) - -extern u8 unk_2000000[]; -extern u16 word_2024E82; - -static EWRAM_DATA u8 byte_2024E88 = 0; - -u8 gPlayerPartyCount; -struct Pokemon gPlayerParty[6]; -u8 gEnemyPartyCount; -struct Pokemon gEnemyParty[6]; - -void ZeroBoxMonData(struct BoxPokemon *boxMon) -{ - u8 *raw = (u8 *)boxMon; - u32 i; - for (i = 0; i < sizeof(struct BoxPokemon); i++) - raw[i] = 0; -} - -void ZeroMonData(struct Pokemon *mon) -{ - u32 arg; - ZeroBoxMonData(&mon->box); - arg = 0; - SetMonData(mon, MON_DATA_STATUS, (u8 *)&arg); - SetMonData(mon, MON_DATA_LEVEL, (u8 *)&arg); - SetMonData(mon, MON_DATA_HP, (u8 *)&arg); - SetMonData(mon, MON_DATA_MAX_HP, (u8 *)&arg); - SetMonData(mon, MON_DATA_ATK, (u8 *)&arg); - SetMonData(mon, MON_DATA_DEF, (u8 *)&arg); - SetMonData(mon, MON_DATA_SPD, (u8 *)&arg); - SetMonData(mon, MON_DATA_SPATK, (u8 *)&arg); - SetMonData(mon, MON_DATA_SPDEF, (u8 *)&arg); - arg = 255; - SetMonData(mon, MON_DATA_MAIL, (u8 *)&arg); -} - -void ZeroPlayerPartyMons(void) -{ - s32 i; - for (i = 0; i < 6; i++) - ZeroMonData(&gPlayerParty[i]); -} - -void ZeroEnemyPartyMons(void) -{ - s32 i; - for (i = 0; i < 6; i++) - ZeroMonData(&gEnemyParty[i]); -} - -void CreateMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) -{ - u32 arg; - ZeroMonData(mon); - CreateBoxMon(&mon->box, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId); - SetMonData(mon, MON_DATA_LEVEL, &level); - arg = 255; - SetMonData(mon, MON_DATA_MAIL, (u8 *)&arg); - CalculateMonStats(mon); -} - -void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) -{ - u8 speciesName[POKEMON_NAME_LENGTH + 1]; - u32 personality; - u32 value; - u16 checksum; - - ZeroBoxMonData(boxMon); - - if (hasFixedPersonality) - personality = fixedPersonality; - else - personality = Random32(); - - SetBoxMonData(boxMon, MON_DATA_PERSONALITY, (u8 *)&personality); - - //Determine original trainer ID - if (otIdType == 2) //Pokemon cannot be shiny - { - u32 shinyValue; - do - { - value = Random32(); - shinyValue = HIHALF(value) ^ LOHALF(value) ^ HIHALF(personality) ^ LOHALF(personality); - } while (shinyValue < 8); - } - else if (otIdType == 1) //Pokemon has a preset OT ID - { - value = fixedOtId; - } - else //Player is the OT - { - value = gSaveBlock2.playerTrainerId[0] - | (gSaveBlock2.playerTrainerId[1] << 8) - | (gSaveBlock2.playerTrainerId[2] << 16) - | (gSaveBlock2.playerTrainerId[3] << 24); - } - - SetBoxMonData(boxMon, MON_DATA_OT_ID, (u8 *)&value); - - checksum = CalculateBoxMonChecksum(boxMon); - SetBoxMonData(boxMon, MON_DATA_CHECKSUM, (u8 *)&checksum); - EncryptBoxMon(boxMon); - GetSpeciesName(speciesName, species); - SetBoxMonData(boxMon, MON_DATA_NICKNAME, speciesName); - SetBoxMonData(boxMon, MON_DATA_LANGUAGE, &gGameLanguage); - SetBoxMonData(boxMon, MON_DATA_OT_NAME, gSaveBlock2.playerName); - SetBoxMonData(boxMon, MON_DATA_SPECIES, (u8 *)&species); - SetBoxMonData(boxMon, MON_DATA_EXP, (u8 *)&gExperienceTables[gBaseStats[species].growthRate][level]); - SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gBaseStats[species].friendship); - value = sav1_map_get_name(); - SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, (u8 *)&value); - SetBoxMonData(boxMon, MON_DATA_MET_LEVEL, &level); - SetBoxMonData(boxMon, MON_DATA_MET_GAME, &gGameVersion); - value = 4; - SetBoxMonData(boxMon, MON_DATA_POKEBALL, (u8 *)&value); - SetBoxMonData(boxMon, MON_DATA_OT_GENDER, &gSaveBlock2.playerGender); - - if (fixedIV < 32) - { - SetBoxMonData(boxMon, MON_DATA_HP_IV, &fixedIV); - SetBoxMonData(boxMon, MON_DATA_ATK_IV, &fixedIV); - SetBoxMonData(boxMon, MON_DATA_DEF_IV, &fixedIV); - SetBoxMonData(boxMon, MON_DATA_SPD_IV, &fixedIV); - SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &fixedIV); - SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &fixedIV); - } - else - { - u32 iv; - value = Random(); - - iv = value & 0x1F; - SetBoxMonData(boxMon, MON_DATA_HP_IV, (u8 *)&iv); - iv = (value & 0x3E0) >> 5; - SetBoxMonData(boxMon, MON_DATA_ATK_IV, (u8 *)&iv); - iv = (value & 0x7C00) >> 10; - SetBoxMonData(boxMon, MON_DATA_DEF_IV, (u8 *)&iv); - - value = Random(); - - iv = value & 0x1F; - SetBoxMonData(boxMon, MON_DATA_SPD_IV, (u8 *)&iv); - iv = (value & 0x3E0) >> 5; - SetBoxMonData(boxMon, MON_DATA_SPATK_IV, (u8 *)&iv); - iv = (value & 0x7C00) >> 10; - SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, (u8 *)&iv); - } - - if (gBaseStats[species].ability2) - { - value = personality & 1; - SetBoxMonData(boxMon, MON_DATA_ALT_ABILITY, (u8 *)&value); - } - - GiveBoxMonInitialMoveset(boxMon); -} - -void CreateMonWithNature(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 nature) -{ - u32 personality; - - do - { - personality = Random32(); - } - while (nature != GetNatureFromPersonality(personality)); - - CreateMon(mon, species, level, fixedIV, 1, personality, 0, 0); -} - -void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 gender, u8 nature, u8 unownLetter) -{ - u32 personality; - - if ((u8)(unownLetter - 1) < 28) - { - u16 actualLetter; - - do - { - personality = Random32(); - actualLetter = ((((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 28); - } - while (nature != GetNatureFromPersonality(personality) - || gender != GetGenderFromSpeciesAndPersonality(species, personality) - || actualLetter != unownLetter - 1); - } - else - { - do - { - personality = Random32(); - } - while (nature != GetNatureFromPersonality(personality) - || gender != GetGenderFromSpeciesAndPersonality(species, personality)); - } - - CreateMon(mon, species, level, fixedIV, 1, personality, 0, 0); -} - -// This is only used to create Wally's Ralts. -void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level) -{ - u32 personality; - u32 otId; - - do - { - otId = Random32(); - personality = Random32(); - } - while (GetGenderFromSpeciesAndPersonality(species, personality) != MON_MALE); - CreateMon(mon, species, level, 32, 1, personality, 1, otId); -} - -void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality) -{ - CreateMon(mon, species, level, 0, 1, personality, 0, 0); - SetMonData(mon, MON_DATA_IVS, (u8 *)&ivs); - CalculateMonStats(mon); -} - -void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u32 otId) -{ - CreateMon(mon, species, level, 0, 0, 0, 1, otId); - SetMonData(mon, MON_DATA_HP_IV, &ivs[0]); - SetMonData(mon, MON_DATA_ATK_IV, &ivs[1]); - SetMonData(mon, MON_DATA_DEF_IV, &ivs[2]); - SetMonData(mon, MON_DATA_SPD_IV, &ivs[3]); - SetMonData(mon, MON_DATA_SPATK_IV, &ivs[4]); - SetMonData(mon, MON_DATA_SPDEF_IV, &ivs[5]); - CalculateMonStats(mon); -} - -void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 evSpread) -{ - s32 i; - s32 statCount = 0; - u16 evAmount; - u8 temp; - - CreateMon(mon, species, level, fixedIV, 0, 0, 0, 0); - - temp = evSpread; - - for (i = 0; i < 6; i++) - { - if (temp & 1) - statCount++; - temp >>= 1; - } - - evAmount = 510 / statCount; - - temp = 1; - - for (i = 0; i < 6; i++) - { - if (evSpread & temp) - SetMonData(mon, MON_DATA_HP_EV + i, (u8 *)&evAmount); - temp <<= 1; - } - - CalculateMonStats(mon); -} - -void sub_803ADE8(struct Pokemon *mon, struct UnknownPokemonStruct *src) -{ - s32 i; - u8 nickname[POKEMON_NAME_LENGTH + 1]; - u8 language; - u8 value; - - CreateMon(mon, src->species, src->level, 0, 1, src->personality, 1, src->otId); - - for (i = 0; i < 4; i++) - SetMonMoveSlot(mon, src->moves[i], i); - - SetMonData(mon, MON_DATA_PP_BONUSES, (u8 *)&src->ppBonuses); - SetMonData(mon, MON_DATA_HELD_ITEM, (u8 *)&src->heldItem); - - StringCopy(nickname, src->nickname); - - if (nickname[0] == 0xFC && nickname[1] == 0x15) - language = LANGUAGE_JAPANESE; - else - language = GAME_LANGUAGE; - - SetMonData(mon, MON_DATA_LANGUAGE, &language); - StripExtCtrlCodes(nickname); - SetMonData(mon, MON_DATA_NICKNAME, nickname); - SetMonData(mon, MON_DATA_FRIENDSHIP, (u8 *)&src->friendship); - SetMonData(mon, MON_DATA_HP_EV, (u8 *)&src->hpEV); - SetMonData(mon, MON_DATA_ATK_EV, (u8 *)&src->attackEV); - SetMonData(mon, MON_DATA_DEF_EV, (u8 *)&src->defenseEV); - SetMonData(mon, MON_DATA_SPD_EV, (u8 *)&src->speedEV); - SetMonData(mon, MON_DATA_SPATK_EV, (u8 *)&src->spAttackEV); - SetMonData(mon, MON_DATA_SPDEF_EV, (u8 *)&src->spDefenseEV); - value = src->altAbility; - SetMonData(mon, MON_DATA_ALT_ABILITY, &value); - value = src->hpIV; - SetMonData(mon, MON_DATA_HP_IV, &value); - value = src->attackIV; - SetMonData(mon, MON_DATA_ATK_IV, &value); - value = src->defenseIV; - SetMonData(mon, MON_DATA_DEF_IV, &value); - value = src->speedIV; - SetMonData(mon, MON_DATA_SPD_IV, &value); - value = src->spAttackIV; - SetMonData(mon, MON_DATA_SPATK_IV, &value); - value = src->spDefenseIV; - SetMonData(mon, MON_DATA_SPDEF_IV, &value); - CalculateMonStats(mon); -} - -void sub_803AF78(struct Pokemon *mon, struct UnknownPokemonStruct *dest) -{ - s32 i; - u16 heldItem; - - dest->species = GetMonData(mon, MON_DATA_SPECIES, NULL); - heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); - - if (heldItem == ITEM_ENIGMA_BERRY) - heldItem = 0; - - dest->heldItem = heldItem; - - for (i = 0; i < 4; i++) - dest->moves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, NULL); - - dest->level = GetMonData(mon, MON_DATA_LEVEL, NULL); - dest->ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); - dest->otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - dest->hpEV = GetMonData(mon, MON_DATA_HP_EV, NULL); - dest->attackEV = GetMonData(mon, MON_DATA_ATK_EV, NULL); - dest->defenseEV = GetMonData(mon, MON_DATA_DEF_EV, NULL); - dest->speedEV = GetMonData(mon, MON_DATA_SPD_EV, NULL); - dest->spAttackEV = GetMonData(mon, MON_DATA_SPATK_EV, NULL); - dest->spDefenseEV = GetMonData(mon, MON_DATA_SPDEF_EV, NULL); - dest->friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL); - dest->hpIV = GetMonData(mon, MON_DATA_HP_IV, NULL); - dest->attackIV = GetMonData(mon, MON_DATA_ATK_IV, NULL); - dest->defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL); - dest->speedIV = GetMonData(mon, MON_DATA_SPD_IV, NULL); - dest->spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL); - dest->spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL); - dest->altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL); - dest->personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); - GetMonData(mon, MON_DATA_NICKNAME, dest->nickname); -} - -u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon) -{ - u16 checksum = 0; - union PokemonSubstruct *substruct0 = GetSubstruct(boxMon, boxMon->personality, 0); - union PokemonSubstruct *substruct1 = GetSubstruct(boxMon, boxMon->personality, 1); - union PokemonSubstruct *substruct2 = GetSubstruct(boxMon, boxMon->personality, 2); - union PokemonSubstruct *substruct3 = GetSubstruct(boxMon, boxMon->personality, 3); - s32 i; - - for (i = 0; i < 6; i++) - checksum += substruct0->raw[i]; - - for (i = 0; i < 6; i++) - checksum += substruct1->raw[i]; - - for (i = 0; i < 6; i++) - checksum += substruct2->raw[i]; - - for (i = 0; i < 6; i++) - checksum += substruct3->raw[i]; - - return checksum; -} - -#define CALC_STAT(base, iv, ev, statIndex, field) \ -{ \ - u8 baseStat = gBaseStats[species].base; \ - s32 n = (((2 * baseStat + iv + ev / 4) * level) / 100) + 5; \ - u8 nature = GetNature(mon); \ - n = nature_stat_mod(nature, n, statIndex); \ - SetMonData(mon, field, (u8 *)&n); \ -} - -void CalculateMonStats(struct Pokemon *mon) -{ - s32 oldMaxHP = GetMonData(mon, MON_DATA_MAX_HP, NULL); - s32 currentHP = GetMonData(mon, MON_DATA_HP, NULL); - s32 hpIV = GetMonData(mon, MON_DATA_HP_IV, NULL); - s32 hpEV = GetMonData(mon, MON_DATA_HP_EV, NULL); - s32 attackIV = GetMonData(mon, MON_DATA_ATK_IV, NULL); - s32 attackEV = GetMonData(mon, MON_DATA_ATK_EV, NULL); - s32 defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL); - s32 defenseEV = GetMonData(mon, MON_DATA_DEF_EV, NULL); - s32 speedIV = GetMonData(mon, MON_DATA_SPD_IV, NULL); - s32 speedEV = GetMonData(mon, MON_DATA_SPD_EV, NULL); - s32 spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL); - s32 spAttackEV = GetMonData(mon, MON_DATA_SPATK_EV, NULL); - s32 spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL); - s32 spDefenseEV = GetMonData(mon, MON_DATA_SPDEF_EV, NULL); - u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); - s32 level = GetLevelFromMonExp(mon); - s32 newMaxHP; - - SetMonData(mon, MON_DATA_LEVEL, (u8 *)&level); - - if (species == SPECIES_SHEDINJA) - { - newMaxHP = 1; - } - else - { - s32 n = 2 * gBaseStats[species].baseHP + hpIV; - newMaxHP = (((n + hpEV / 4) * level) / 100) + level + 10; - } - - unk_2000000[0x160FA] = newMaxHP - oldMaxHP; - if (unk_2000000[0x160FA] == 0) - unk_2000000[0x160FA] = 1; - - SetMonData(mon, MON_DATA_MAX_HP, (u8 *)&newMaxHP); - - CALC_STAT(baseAttack, attackIV, attackEV, 1, MON_DATA_ATK) - CALC_STAT(baseDefense, defenseIV, defenseEV, 2, MON_DATA_DEF) - CALC_STAT(baseSpeed, speedIV, speedEV, 3, MON_DATA_SPD) - CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, 4, MON_DATA_SPATK) - CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, 5, MON_DATA_SPDEF) - - if (species == SPECIES_SHEDINJA) - { - if (currentHP != 0 || oldMaxHP == 0) - currentHP = 1; - else - return; - } - else - { - if (currentHP == 0 && oldMaxHP == 0) - currentHP = newMaxHP; - else if (currentHP != 0) - currentHP += newMaxHP - oldMaxHP; - else - return; - } - - SetMonData(mon, MON_DATA_HP, (u8 *)¤tHP); -} - -void sub_803B4B4(struct Pokemon *src, struct Pokemon *dest) -{ - u32 value = 0; - memcpy(&dest->box, &src->box, sizeof(struct BoxPokemon)); - SetMonData(dest, MON_DATA_STATUS, (u8 *)&value); - SetMonData(dest, MON_DATA_HP, (u8 *)&value); - SetMonData(dest, MON_DATA_MAX_HP, (u8 *)&value); - value = 255; - SetMonData(dest, MON_DATA_MAIL, (u8 *)&value); - CalculateMonStats(dest); -} - -u8 GetLevelFromMonExp(struct Pokemon *mon) -{ - u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); - u32 exp = GetMonData(mon, MON_DATA_EXP, NULL); - s32 level = 1; - - while (level <= 100 && gExperienceTables[gBaseStats[species].growthRate][level] <= exp) - level++; - - return level - 1; -} - -u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon) -{ - u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL); - u32 exp = GetBoxMonData(boxMon, MON_DATA_EXP, NULL); - s32 level = 1; - - while (level <= 100 && gExperienceTables[gBaseStats[species].growthRate][level] <= exp) - level++; - - return level - 1; -} - -u16 GiveMoveToMon(struct Pokemon *mon, u16 move) -{ - return GiveMoveToBoxMon(&mon->box, move); -} - -u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) -{ - s32 i; - for (i = 0; i < 4; i++) - { - u16 existingMove = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, NULL); - if (!existingMove) - { - SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, (u8 *)&move); - SetBoxMonData(boxMon, MON_DATA_PP1 + i, &gBattleMoves[move].pp); - return move; - } - if (existingMove == move) - return -2; - } - return -1; -} - -u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - if (!mon->moves[i]) - { - mon->moves[i] = move; - mon->pp[i] = gBattleMoves[move].pp; - return move; - } - } - - return -1; -} - -void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot) -{ - SetMonData(mon, MON_DATA_MOVE1 + slot, (u8 *)&move); - SetMonData(mon, MON_DATA_PP1 + slot, &gBattleMoves[move].pp); -} - -void SetBattleMonMoveSlot(struct BattlePokemon *mon, u16 move, u8 slot) -{ - mon->moves[slot] = move; - mon->pp[slot] = gBattleMoves[move].pp; -} - -void GiveMonInitialMoveset(struct Pokemon *mon) -{ - GiveBoxMonInitialMoveset(&mon->box); -} - -void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon) -{ - u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL); - s32 level = GetLevelFromBoxMonExp(boxMon); - s32 i; - - for (i = 0; gLevelUpLearnsets[species][i] != (u16)-1; i++) - { - u16 moveLevel; - u16 move; - - moveLevel = (gLevelUpLearnsets[species][i] & 0xFE00); - - if (moveLevel > (level << 9)) - break; - - move = (gLevelUpLearnsets[species][i] & 0x1FF); - - if (GiveMoveToBoxMon(boxMon, move) == (u16)-1) - DeleteFirstMoveAndGiveMoveToBoxMon(boxMon, move); - } -} - -u16 sub_803B7C8(struct Pokemon *mon, u8 a2) -{ - u32 retVal = 0; - u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); - u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL); - - if (a2) - { - byte_2024E88 = retVal; - - while ((gLevelUpLearnsets[species][byte_2024E88] & 0xFE00) != (level << 9)) - { - byte_2024E88++; - if (gLevelUpLearnsets[species][byte_2024E88] == (u16)-1) - return 0; - } - } - - if ((gLevelUpLearnsets[species][byte_2024E88] & 0xFE00) == (level << 9)) - { - word_2024E82 = (gLevelUpLearnsets[species][byte_2024E88] & 0x1FF); - byte_2024E88++; - retVal = GiveMoveToMon(mon, word_2024E82); - } - - return retVal; -} - -void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move) -{ - s32 i; - u16 moves[4]; - u8 pp[4]; - u8 ppBonuses; - - for (i = 0; i < 3; i++) - { - moves[i] = GetMonData(mon, MON_DATA_MOVE2 + i, NULL); - pp[i] = GetMonData(mon, MON_DATA_PP2 + i, NULL); - } - - ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); - ppBonuses >>= 2; - moves[3] = move; - pp[3] = gBattleMoves[move].pp; - - for (i = 0; i < 4; i++) - { - SetMonData(mon, MON_DATA_MOVE1 + i, (u8 *)&moves[i]); - SetMonData(mon, MON_DATA_PP1 + i, &pp[i]); - } - - SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses); -} - -void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) -{ - s32 i; - u16 moves[4]; - u8 pp[4]; - u8 ppBonuses; - - for (i = 0; i < 3; i++) - { - moves[i] = GetBoxMonData(boxMon, MON_DATA_MOVE2 + i, NULL); - pp[i] = GetBoxMonData(boxMon, MON_DATA_PP2 + i, NULL); - } - - ppBonuses = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, NULL); - ppBonuses >>= 2; - moves[3] = move; - pp[3] = gBattleMoves[move].pp; - - for (i = 0; i < 4; i++) - { - SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, (u8 *)&moves[i]); - SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp[i]); - } - - SetBoxMonData(boxMon, MON_DATA_PP_BONUSES, &ppBonuses); -} diff --git a/src/pokemon_2.c b/src/pokemon_2.c deleted file mode 100644 index a77edbdb2..000000000 --- a/src/pokemon_2.c +++ /dev/null @@ -1,1312 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "data2.h" -#include "event_data.h" -#include "main.h" -#include "pokemon.h" -#include "rng.h" -#include "rom_8077ABC.h" -#include "species.h" -#include "sprite.h" -#include "string_util.h" -#include "strings2.h" -#include "text.h" -#include "util.h" - -extern u8 gPlayerPartyCount; -extern u8 gEnemyPartyCount; - -extern u16 unk_20160BC[]; -extern struct SecretBaseRecord gSecretBaseRecord; -extern u32 dword_2017100[]; -extern u16 gBattleTypeFlags; -extern u8 gActiveBank; -extern struct BattlePokemon gBattleMons[4]; -extern u16 gCurrentMove; -extern u8 gLastUsedAbility; -extern u8 gBankAttacker; -extern u8 gBankTarget; -extern u8 gAbsentBankFlags; -extern u8 gXXX_CritRelated; -extern u16 gBattleWeather; -extern struct BattleEnigmaBerry gEnigmaBerries[]; -extern u16 gBattleMovePower; -extern u16 gTrainerBattleOpponent; -extern struct PokemonStorage gPokemonStorage; - -EWRAM_DATA struct SpriteTemplate gUnknown_02024E8C = {0}; - -extern u8 gBadEggNickname[]; -extern const struct SpriteTemplate gSpriteTemplate_8208288[]; -//array of pointers to arrays of pointers to union AnimCmd (We probably need to typedef this.) -extern u8 gTrainerClassToPicIndex[]; -extern u8 gTrainerClassToNameIndex[]; -extern u8 gSecretBaseTrainerClasses[][5]; -extern u8 gUnknown_08208238[]; -extern u8 gUnknown_0820823C[]; -extern u8 gStatStageRatios[][2]; -extern u8 gHoldEffectToType[][2]; - -u8 CountAliveMons(u8 a1) -{ - s32 i; - u8 retVal = 0; - - switch (a1) - { - case 0: - for (i = 0; i < 4; i++) - { - if (i != gActiveBank && !(gAbsentBankFlags & gBitTable[i])) - retVal++; - } - break; - case 1: - for (i = 0; i < 4; i++) - { - if (GetBankSide(i) == GetBankSide(gBankAttacker) && !(gAbsentBankFlags & gBitTable[i])) - retVal++; - } - break; - case 2: - for (i = 0; i < 4; i++) - { - if (GetBankSide(i) == GetBankSide(gBankTarget) && !(gAbsentBankFlags & gBitTable[i])) - retVal++; - } - break; - } - - 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); - } - } - - 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); - } - else - { - return GetBankByPlayerAI(status); - } - } - else - { - 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) -{ - return GetBoxMonGender(&mon->box); -} - -u8 GetBoxMonGender(struct BoxPokemon *boxMon) -{ - u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL); - u32 personality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY, NULL); - - switch (gBaseStats[species].genderRatio) - { - case MON_MALE: - case MON_FEMALE: - case MON_GENDERLESS: - return gBaseStats[species].genderRatio; - } - - if (gBaseStats[species].genderRatio > (personality & 0xFF)) - return MON_FEMALE; - else - return MON_MALE; -} - -u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality) -{ - switch (gBaseStats[species].genderRatio) - { - case MON_MALE: - case MON_FEMALE: - case MON_GENDERLESS: - return gBaseStats[species].genderRatio; - } - - if (gBaseStats[species].genderRatio > (personality & 0xFF)) - return MON_FEMALE; - else - return MON_MALE; -} - -void GetMonSpriteTemplate_803C56C(u16 species, u8 a2) -{ - gUnknown_02024E8C = gSpriteTemplate_8208288[a2]; - gUnknown_02024E8C.paletteTag = species; - gUnknown_02024E8C.anims = (const union AnimCmd *const *)gSpriteAnimTable_81E7C64; //Why do I have to cast this? -} - -void GetMonSpriteTemplate_803C5A0(u16 species, u8 a2) -{ - gUnknown_02024E8C = gSpriteTemplate_8208288[a2]; - gUnknown_02024E8C.paletteTag = species; - if (a2 == 0 || a2 == 2) - gUnknown_02024E8C.anims = gUnknown_081ECACC[species]; - else - gUnknown_02024E8C.anims = gUnknown_081EC2A4[species]; -} - -void EncryptBoxMon(struct BoxPokemon *boxMon) -{ - u32 i; - for (i = 0; i < 12; i++) - { - boxMon->secure.raw[i] ^= boxMon->personality; - boxMon->secure.raw[i] ^= boxMon->otId; - } -} - -void DecryptBoxMon(struct BoxPokemon *boxMon) -{ - u32 i; - for (i = 0; i < 12; i++) - { - boxMon->secure.raw[i] ^= boxMon->otId; - boxMon->secure.raw[i] ^= boxMon->personality; - } -} - -#define SUBSTRUCT_CASE(n, v1, v2, v3, v4) \ -case n: \ - switch (substructType) \ - { \ - case 0: \ - substruct = &substructs ## n [v1]; \ - break; \ - case 1: \ - substruct = &substructs ## n [v2]; \ - break; \ - case 2: \ - substruct = &substructs ## n [v3]; \ - break; \ - case 3: \ - substruct = &substructs ## n [v4]; \ - break; \ - } \ - break; - -union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 personality, u8 substructType) -{ - union PokemonSubstruct *substruct = NULL; - - union PokemonSubstruct *substructs0 = boxMon->secure.substructs; - union PokemonSubstruct *substructs1 = boxMon->secure.substructs; - union PokemonSubstruct *substructs2 = boxMon->secure.substructs; - union PokemonSubstruct *substructs3 = boxMon->secure.substructs; - union PokemonSubstruct *substructs4 = boxMon->secure.substructs; - union PokemonSubstruct *substructs5 = boxMon->secure.substructs; - union PokemonSubstruct *substructs6 = boxMon->secure.substructs; - union PokemonSubstruct *substructs7 = boxMon->secure.substructs; - union PokemonSubstruct *substructs8 = boxMon->secure.substructs; - union PokemonSubstruct *substructs9 = boxMon->secure.substructs; - union PokemonSubstruct *substructs10 = boxMon->secure.substructs; - union PokemonSubstruct *substructs11 = boxMon->secure.substructs; - union PokemonSubstruct *substructs12 = boxMon->secure.substructs; - union PokemonSubstruct *substructs13 = boxMon->secure.substructs; - union PokemonSubstruct *substructs14 = boxMon->secure.substructs; - union PokemonSubstruct *substructs15 = boxMon->secure.substructs; - union PokemonSubstruct *substructs16 = boxMon->secure.substructs; - union PokemonSubstruct *substructs17 = boxMon->secure.substructs; - union PokemonSubstruct *substructs18 = boxMon->secure.substructs; - union PokemonSubstruct *substructs19 = boxMon->secure.substructs; - union PokemonSubstruct *substructs20 = boxMon->secure.substructs; - union PokemonSubstruct *substructs21 = boxMon->secure.substructs; - union PokemonSubstruct *substructs22 = boxMon->secure.substructs; - union PokemonSubstruct *substructs23 = boxMon->secure.substructs; - - switch (personality % 24) - { - SUBSTRUCT_CASE( 0,0,1,2,3) - SUBSTRUCT_CASE( 1,0,1,3,2) - SUBSTRUCT_CASE( 2,0,2,1,3) - SUBSTRUCT_CASE( 3,0,3,1,2) - SUBSTRUCT_CASE( 4,0,2,3,1) - SUBSTRUCT_CASE( 5,0,3,2,1) - SUBSTRUCT_CASE( 6,1,0,2,3) - SUBSTRUCT_CASE( 7,1,0,3,2) - SUBSTRUCT_CASE( 8,2,0,1,3) - SUBSTRUCT_CASE( 9,3,0,1,2) - SUBSTRUCT_CASE(10,2,0,3,1) - SUBSTRUCT_CASE(11,3,0,2,1) - SUBSTRUCT_CASE(12,1,2,0,3) - SUBSTRUCT_CASE(13,1,3,0,2) - SUBSTRUCT_CASE(14,2,1,0,3) - SUBSTRUCT_CASE(15,3,1,0,2) - SUBSTRUCT_CASE(16,2,3,0,1) - SUBSTRUCT_CASE(17,3,2,0,1) - SUBSTRUCT_CASE(18,1,2,3,0) - SUBSTRUCT_CASE(19,1,3,2,0) - SUBSTRUCT_CASE(20,2,1,3,0) - SUBSTRUCT_CASE(21,3,1,2,0) - SUBSTRUCT_CASE(22,2,3,1,0) - SUBSTRUCT_CASE(23,3,2,1,0) - } - - return substruct; -} - -u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data) -{ - switch (field) - { - case MON_DATA_STATUS: - return mon->status; - case MON_DATA_LEVEL: - return mon->level; - case MON_DATA_HP: - return mon->hp; - case MON_DATA_MAX_HP: - return mon->maxHP; - case MON_DATA_ATK: - return mon->attack; - case MON_DATA_DEF: - return mon->defense; - case MON_DATA_SPD: - return mon->speed; - case MON_DATA_SPATK: - return mon->spAttack; - case MON_DATA_SPDEF: - return mon->spDefense; - case MON_DATA_MAIL: - return mon->mail; - default: - return GetBoxMonData(&mon->box, field, data); - } -} - -u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) -{ - u32 retVal = 0; - struct PokemonSubstruct0 *substruct0 = NULL; - struct PokemonSubstruct1 *substruct1 = NULL; - struct PokemonSubstruct2 *substruct2 = NULL; - struct PokemonSubstruct3 *substruct3 = NULL; - - if (field > MON_DATA_10) - { - substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0); - substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1); - substruct2 = &(GetSubstruct(boxMon, boxMon->personality, 2)->type2); - substruct3 = &(GetSubstruct(boxMon, boxMon->personality, 3)->type3); - - DecryptBoxMon(boxMon); - - if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum) - { - boxMon->isBadEgg = 1; - boxMon->isEgg = 1; - substruct3->isEgg = 1; - } - } - - switch (field) - { - case MON_DATA_PERSONALITY: - retVal = boxMon->personality; - break; - case MON_DATA_OT_ID: - retVal = boxMon->otId; - break; - case MON_DATA_NICKNAME: - { - if (boxMon->isBadEgg) - { - StringCopy(data, gBadEggNickname); - retVal = StringLength(data); - } - else if (boxMon->isEgg) - { - StringCopy(data, gEggNickname); - retVal = StringLength(data); - } - else - { - retVal = 0; - - while (retVal < POKEMON_NAME_LENGTH && boxMon->nickname[retVal] != EOS) - { - data[retVal] = boxMon->nickname[retVal]; - retVal++; - } - - data[retVal] = EOS; - ConvertInternationalString(data, boxMon->language); - retVal = StringLength(data); - } - break; - } - case MON_DATA_LANGUAGE: - retVal = boxMon->language; - break; - case MON_DATA_SANITY_BIT1: - retVal = boxMon->isBadEgg; - break; - case MON_DATA_SANITY_BIT2: - retVal = boxMon->hasSpecies; - break; - case MON_DATA_SANITY_BIT3: - retVal = boxMon->isEgg; - break; - case MON_DATA_OT_NAME: - { - retVal = 0; - - while (retVal < OT_NAME_LENGTH && boxMon->otName[retVal] != EOS) - { - data[retVal] = boxMon->otName[retVal]; - retVal++; - } - - data[retVal] = EOS; - break; - } - case MON_DATA_MARKINGS: - retVal = boxMon->markings; - break; - case MON_DATA_CHECKSUM: - retVal = boxMon->checksum; - break; - case MON_DATA_10: - retVal = boxMon->unknown; - break; - case MON_DATA_SPECIES: - retVal = boxMon->isBadEgg ? SPECIES_EGG : substruct0->species; - break; - case MON_DATA_HELD_ITEM: - retVal = substruct0->heldItem; - break; - case MON_DATA_EXP: - retVal = substruct0->experience; - break; - case MON_DATA_PP_BONUSES: - retVal = substruct0->ppBonuses; - break; - case MON_DATA_FRIENDSHIP: - retVal = substruct0->friendship; - break; - case MON_DATA_MOVE1: - case MON_DATA_MOVE2: - case MON_DATA_MOVE3: - case MON_DATA_MOVE4: - retVal = substruct1->moves[field - MON_DATA_MOVE1]; - break; - case MON_DATA_PP1: - case MON_DATA_PP2: - case MON_DATA_PP3: - case MON_DATA_PP4: - retVal = substruct1->pp[field - MON_DATA_PP1]; - break; - case MON_DATA_HP_EV: - retVal = substruct2->hpEV; - break; - case MON_DATA_ATK_EV: - retVal = substruct2->attackEV; - break; - case MON_DATA_DEF_EV: - retVal = substruct2->defenseEV; - break; - case MON_DATA_SPD_EV: - retVal = substruct2->speedEV; - break; - case MON_DATA_SPATK_EV: - retVal = substruct2->spAttackEV; - break; - case MON_DATA_SPDEF_EV: - retVal = substruct2->spDefenseEV; - break; - case MON_DATA_COOL: - retVal = substruct2->cool; - break; - case MON_DATA_BEAUTY: - retVal = substruct2->beauty; - break; - case MON_DATA_CUTE: - retVal = substruct2->cute; - break; - case MON_DATA_SMART: - retVal = substruct2->smart; - break; - case MON_DATA_TOUGH: - retVal = substruct2->tough; - break; - case MON_DATA_SHEEN: - retVal = substruct2->sheen; - break; - case MON_DATA_POKERUS: - retVal = substruct3->pokerus; - break; - case MON_DATA_MET_LOCATION: - retVal = substruct3->metLocation; - break; - case MON_DATA_MET_LEVEL: - retVal = substruct3->metLevel; - break; - case MON_DATA_MET_GAME: - retVal = substruct3->metGame; - break; - case MON_DATA_POKEBALL: - retVal = substruct3->pokeball; - break; - case MON_DATA_OT_GENDER: - retVal = substruct3->otGender; - break; - case MON_DATA_HP_IV: - retVal = substruct3->hpIV; - break; - case MON_DATA_ATK_IV: - retVal = substruct3->attackIV; - break; - case MON_DATA_DEF_IV: - retVal = substruct3->defenseIV; - break; - case MON_DATA_SPD_IV: - retVal = substruct3->speedIV; - break; - case MON_DATA_SPATK_IV: - retVal = substruct3->spAttackIV; - break; - case MON_DATA_SPDEF_IV: - retVal = substruct3->spDefenseIV; - break; - case MON_DATA_IS_EGG: - retVal = substruct3->isEgg; - break; - case MON_DATA_ALT_ABILITY: - retVal = substruct3->altAbility; - break; - case MON_DATA_COOL_RIBBON: - retVal = substruct3->coolRibbon; - break; - case MON_DATA_BEAUTY_RIBBON: - retVal = substruct3->beautyRibbon; - break; - case MON_DATA_CUTE_RIBBON: - retVal = substruct3->cuteRibbon; - break; - case MON_DATA_SMART_RIBBON: - retVal = substruct3->smartRibbon; - break; - case MON_DATA_TOUGH_RIBBON: - retVal = substruct3->toughRibbon; - break; - case MON_DATA_CHAMPION_RIBBON: - retVal = substruct3->championRibbon; - break; - case MON_DATA_WINNING_RIBBON: - retVal = substruct3->winningRibbon; - break; - case MON_DATA_VICTORY_RIBBON: - retVal = substruct3->victoryRibbon; - break; - case MON_DATA_ARTIST_RIBBON: - retVal = substruct3->artistRibbon; - break; - case MON_DATA_EFFORT_RIBBON: - retVal = substruct3->effortRibbon; - break; - case MON_DATA_GIFT_RIBBON_1: - retVal = substruct3->giftRibbon1; - break; - case MON_DATA_GIFT_RIBBON_2: - retVal = substruct3->giftRibbon2; - break; - case MON_DATA_GIFT_RIBBON_3: - retVal = substruct3->giftRibbon3; - break; - case MON_DATA_GIFT_RIBBON_4: - retVal = substruct3->giftRibbon4; - break; - case MON_DATA_GIFT_RIBBON_5: - retVal = substruct3->giftRibbon5; - break; - case MON_DATA_GIFT_RIBBON_6: - retVal = substruct3->giftRibbon6; - break; - case MON_DATA_GIFT_RIBBON_7: - retVal = substruct3->giftRibbon7; - break; - case MON_DATA_FATEFUL_ENCOUNTER: - retVal = substruct3->fatefulEncounter; - break; - case MON_DATA_SPECIES2: - retVal = substruct0->species; - if (substruct0->species && (substruct3->isEgg || boxMon->isBadEgg)) - retVal = SPECIES_EGG; - break; - case MON_DATA_IVS: - retVal = substruct3->hpIV | (substruct3->attackIV << 5) | (substruct3->defenseIV << 10) | (substruct3->speedIV << 15) | (substruct3->spAttackIV << 20) | (substruct3->spDefenseIV << 25); - break; - case MON_DATA_KNOWN_MOVES: - if (substruct0->species && !substruct3->isEgg) - { - u16 *moves = (u16 *)data; - s32 i = 0; - - while (moves[i] != 355) - { - u16 move = moves[i]; - if (substruct1->moves[0] == move - || substruct1->moves[1] == move - || substruct1->moves[2] == move - || substruct1->moves[3] == move) - retVal |= gBitTable[i]; - i++; - } - } - break; - case MON_DATA_RIBBON_COUNT: - retVal = 0; - if (substruct0->species && !substruct3->isEgg) - { - retVal += substruct3->coolRibbon; - retVal += substruct3->beautyRibbon; - retVal += substruct3->cuteRibbon; - retVal += substruct3->smartRibbon; - retVal += substruct3->toughRibbon; - retVal += substruct3->championRibbon; - retVal += substruct3->winningRibbon; - retVal += substruct3->victoryRibbon; - retVal += substruct3->artistRibbon; - retVal += substruct3->effortRibbon; - retVal += substruct3->giftRibbon1; - retVal += substruct3->giftRibbon2; - retVal += substruct3->giftRibbon3; - retVal += substruct3->giftRibbon4; - retVal += substruct3->giftRibbon5; - retVal += substruct3->giftRibbon6; - retVal += substruct3->giftRibbon7; - } - break; - case MON_DATA_RIBBONS: - retVal = 0; - if (substruct0->species && !substruct3->isEgg) - { - retVal = substruct3->championRibbon - | (substruct3->coolRibbon << 1) - | (substruct3->beautyRibbon << 4) - | (substruct3->cuteRibbon << 7) - | (substruct3->smartRibbon << 10) - | (substruct3->toughRibbon << 13) - | (substruct3->winningRibbon << 16) - | (substruct3->victoryRibbon << 17) - | (substruct3->artistRibbon << 18) - | (substruct3->effortRibbon << 19) - | (substruct3->giftRibbon1 << 20) - | (substruct3->giftRibbon2 << 21) - | (substruct3->giftRibbon3 << 22) - | (substruct3->giftRibbon4 << 23) - | (substruct3->giftRibbon5 << 24) - | (substruct3->giftRibbon6 << 25) - | (substruct3->giftRibbon7 << 26); - } - break; - default: - break; - } - - if (field > MON_DATA_10) - EncryptBoxMon(boxMon); - - return retVal; -} - -#define SET8(lhs) (lhs) = *data -#define SET16(lhs) (lhs) = data[0] + (data[1] << 8) -#define SET32(lhs) (lhs) = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24) - -void SetMonData(struct Pokemon *mon, s32 field, const u8 *data) -{ - switch (field) - { - case MON_DATA_STATUS: - SET32(mon->status); - break; - case MON_DATA_LEVEL: - SET8(mon->level); - break; - case MON_DATA_HP: - SET16(mon->hp); - break; - case MON_DATA_MAX_HP: - SET16(mon->maxHP); - break; - case MON_DATA_ATK: - SET16(mon->attack); - break; - case MON_DATA_DEF: - SET16(mon->defense); - break; - case MON_DATA_SPD: - SET16(mon->speed); - break; - case MON_DATA_SPATK: - SET16(mon->spAttack); - break; - case MON_DATA_SPDEF: - SET16(mon->spDefense); - break; - case MON_DATA_MAIL: - SET8(mon->mail); - break; - case MON_DATA_SPECIES2: - break; - default: - SetBoxMonData(&mon->box, field, data); - break; - } -} - -void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const u8 *data) -{ - struct PokemonSubstruct0 *substruct0 = NULL; - struct PokemonSubstruct1 *substruct1 = NULL; - struct PokemonSubstruct2 *substruct2 = NULL; - struct PokemonSubstruct3 *substruct3 = NULL; - - if (field > MON_DATA_10) - { - substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0); - substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1); - substruct2 = &(GetSubstruct(boxMon, boxMon->personality, 2)->type2); - substruct3 = &(GetSubstruct(boxMon, boxMon->personality, 3)->type3); - - DecryptBoxMon(boxMon); - - if (CalculateBoxMonChecksum(boxMon) != boxMon->checksum) - { - boxMon->isBadEgg = 1; - boxMon->isEgg = 1; - substruct3->isEgg = 1; - EncryptBoxMon(boxMon); - return; - } - } - - switch (field) - { - case MON_DATA_PERSONALITY: - SET32(boxMon->personality); - break; - case MON_DATA_OT_ID: - SET32(boxMon->otId); - break; - case MON_DATA_NICKNAME: - { - s32 i; - for (i = 0; i < POKEMON_NAME_LENGTH; i++) - boxMon->nickname[i] = data[i]; - break; - } - case MON_DATA_LANGUAGE: - SET8(boxMon->language); - break; - case MON_DATA_SANITY_BIT1: - SET8(boxMon->isBadEgg); - break; - case MON_DATA_SANITY_BIT2: - SET8(boxMon->hasSpecies); - break; - case MON_DATA_SANITY_BIT3: - SET8(boxMon->isEgg); - break; - case MON_DATA_OT_NAME: - { - s32 i; - for (i = 0; i < OT_NAME_LENGTH; i++) - boxMon->otName[i] = data[i]; - break; - } - case MON_DATA_MARKINGS: - SET8(boxMon->markings); - break; - case MON_DATA_CHECKSUM: - SET16(boxMon->checksum); - break; - case MON_DATA_10: - SET16(boxMon->unknown); - break; - case MON_DATA_SPECIES: - { - SET16(substruct0->species); - if (substruct0->species) - boxMon->hasSpecies = 1; - else - boxMon->hasSpecies = 0; - break; - } - case MON_DATA_HELD_ITEM: - SET16(substruct0->heldItem); - break; - case MON_DATA_EXP: - SET32(substruct0->experience); - break; - case MON_DATA_PP_BONUSES: - SET8(substruct0->ppBonuses); - break; - case MON_DATA_FRIENDSHIP: - SET8(substruct0->friendship); - break; - case MON_DATA_MOVE1: - case MON_DATA_MOVE2: - case MON_DATA_MOVE3: - case MON_DATA_MOVE4: - SET16(substruct1->moves[field - MON_DATA_MOVE1]); - break; - case MON_DATA_PP1: - case MON_DATA_PP2: - case MON_DATA_PP3: - case MON_DATA_PP4: - SET8(substruct1->pp[field - MON_DATA_PP1]); - break; - case MON_DATA_HP_EV: - SET8(substruct2->hpEV); - break; - case MON_DATA_ATK_EV: - SET8(substruct2->attackEV); - break; - case MON_DATA_DEF_EV: - SET8(substruct2->defenseEV); - break; - case MON_DATA_SPD_EV: - SET8(substruct2->speedEV); - break; - case MON_DATA_SPATK_EV: - SET8(substruct2->spAttackEV); - break; - case MON_DATA_SPDEF_EV: - SET8(substruct2->spDefenseEV); - break; - case MON_DATA_COOL: - SET8(substruct2->cool); - break; - case MON_DATA_BEAUTY: - SET8(substruct2->beauty); - break; - case MON_DATA_CUTE: - SET8(substruct2->cute); - break; - case MON_DATA_SMART: - SET8(substruct2->smart); - break; - case MON_DATA_TOUGH: - SET8(substruct2->tough); - break; - case MON_DATA_SHEEN: - SET8(substruct2->sheen); - break; - case MON_DATA_POKERUS: - SET8(substruct3->pokerus); - break; - case MON_DATA_MET_LOCATION: - SET8(substruct3->metLocation); - break; - case MON_DATA_MET_LEVEL: - { - u8 metLevel = *data; - substruct3->metLevel = metLevel; - break; - } - case MON_DATA_MET_GAME: - SET8(substruct3->metGame); - break; - case MON_DATA_POKEBALL: - { - u8 pokeball = *data; - substruct3->pokeball = pokeball; - break; - } - case MON_DATA_OT_GENDER: - SET8(substruct3->otGender); - break; - case MON_DATA_HP_IV: - SET8(substruct3->hpIV); - break; - case MON_DATA_ATK_IV: - SET8(substruct3->attackIV); - break; - case MON_DATA_DEF_IV: - SET8(substruct3->defenseIV); - break; - case MON_DATA_SPD_IV: - SET8(substruct3->speedIV); - break; - case MON_DATA_SPATK_IV: - SET8(substruct3->spAttackIV); - break; - case MON_DATA_SPDEF_IV: - SET8(substruct3->spDefenseIV); - break; - case MON_DATA_IS_EGG: - SET8(substruct3->isEgg); - if (substruct3->isEgg) - boxMon->isEgg = 1; - else - boxMon->isEgg = 0; - break; - case MON_DATA_ALT_ABILITY: - SET8(substruct3->altAbility); - break; - case MON_DATA_COOL_RIBBON: - SET8(substruct3->coolRibbon); - break; - case MON_DATA_BEAUTY_RIBBON: - SET8(substruct3->beautyRibbon); - break; - case MON_DATA_CUTE_RIBBON: - SET8(substruct3->cuteRibbon); - break; - case MON_DATA_SMART_RIBBON: - SET8(substruct3->smartRibbon); - break; - case MON_DATA_TOUGH_RIBBON: - SET8(substruct3->toughRibbon); - break; - case MON_DATA_CHAMPION_RIBBON: - SET8(substruct3->championRibbon); - break; - case MON_DATA_WINNING_RIBBON: - SET8(substruct3->winningRibbon); - break; - case MON_DATA_VICTORY_RIBBON: - SET8(substruct3->victoryRibbon); - break; - case MON_DATA_ARTIST_RIBBON: - SET8(substruct3->artistRibbon); - break; - case MON_DATA_EFFORT_RIBBON: - SET8(substruct3->effortRibbon); - break; - case MON_DATA_GIFT_RIBBON_1: - SET8(substruct3->giftRibbon1); - break; - case MON_DATA_GIFT_RIBBON_2: - SET8(substruct3->giftRibbon2); - break; - case MON_DATA_GIFT_RIBBON_3: - SET8(substruct3->giftRibbon3); - break; - case MON_DATA_GIFT_RIBBON_4: - SET8(substruct3->giftRibbon4); - break; - case MON_DATA_GIFT_RIBBON_5: - SET8(substruct3->giftRibbon5); - break; - case MON_DATA_GIFT_RIBBON_6: - SET8(substruct3->giftRibbon6); - break; - case MON_DATA_GIFT_RIBBON_7: - SET8(substruct3->giftRibbon7); - break; - case MON_DATA_FATEFUL_ENCOUNTER: - SET8(substruct3->fatefulEncounter); - break; - case MON_DATA_IVS: - { -#ifdef BUGFIX_SETMONIVS - u32 ivs = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24); -#else - u32 ivs = *data; // Bug: Only the HP IV and the lower 3 bits of the Attack IV are read. The rest become 0. -#endif - substruct3->hpIV = ivs & 0x1F; - substruct3->attackIV = (ivs >> 5) & 0x1F; - substruct3->defenseIV = (ivs >> 10) & 0x1F; - substruct3->speedIV = (ivs >> 15) & 0x1F; - substruct3->spAttackIV = (ivs >> 20) & 0x1F; - substruct3->spDefenseIV = (ivs >> 25) & 0x1F; - break; - } - default: - break; - } - - if (field > MON_DATA_10) - { - boxMon->checksum = CalculateBoxMonChecksum(boxMon); - EncryptBoxMon(boxMon); - } -} - -void CopyMon(void *dest, void *src, size_t size) -{ - memcpy(dest, src, size); -} - -u8 GiveMonToPlayer(struct Pokemon *mon) -{ - s32 i; - - SetMonData(mon, MON_DATA_OT_NAME, gSaveBlock2.playerName); - SetMonData(mon, MON_DATA_OT_GENDER, &gSaveBlock2.playerGender); - SetMonData(mon, MON_DATA_OT_ID, gSaveBlock2.playerTrainerId); - - i = 0; - - while (i < 6 && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) != SPECIES_NONE) - i++; - - if (i >= 6) - return SendMonToPC(mon); - - CopyMon(&gPlayerParty[i], mon, sizeof(*mon)); - gPlayerPartyCount = i + 1; - return 0; -} - -u8 SendMonToPC(struct Pokemon *mon) -{ - s32 i = gPokemonStorage.currentBox; - - do - { - s32 j; - for (j = 0; j < 30; j++) - { - if (GetBoxMonData(&gPokemonStorage.boxes[i][j], MON_DATA_SPECIES, NULL) == SPECIES_NONE) - { - MonRestorePP(mon); - CopyMon(&gPokemonStorage.boxes[i][j], &mon->box, sizeof(mon->box)); - return 1; - } - } - - i++; - if (i == 14) - i = 0; - } while (i != gPokemonStorage.currentBox); - - return 2; -} - -u8 CalculatePlayerPartyCount(void) -{ - gPlayerPartyCount = 0; - - while (gPlayerPartyCount < 6 - && GetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_SPECIES, NULL) != SPECIES_NONE) - { - gPlayerPartyCount++; - } - - return gPlayerPartyCount; -} - -u8 CalculateEnemyPartyCount(void) -{ - gEnemyPartyCount = 0; - - while (gEnemyPartyCount < 6 - && GetMonData(&gEnemyParty[gEnemyPartyCount], MON_DATA_SPECIES, NULL) != SPECIES_NONE) - { - gEnemyPartyCount++; - } - - return gEnemyPartyCount; -} - -u8 sub_803DAA0(void) -{ - s32 aliveCount = 0; - s32 i; - CalculatePlayerPartyCount(); - - if (gPlayerPartyCount == 1) - return gPlayerPartyCount; - - for (i = 0; i < gPlayerPartyCount; i++) - { - if (GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0 - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_NONE - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG) - aliveCount++; - } - - return (aliveCount > 1) ? 0 : 2; -} - -u8 GetAbilityBySpecies(u16 species, bool8 altAbility) -{ - if (altAbility) - gLastUsedAbility = gBaseStats[species].ability2; - else - gLastUsedAbility = gBaseStats[species].ability1; - - return gLastUsedAbility; -} - -u8 GetMonAbility(struct Pokemon *mon) -{ - u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); - u8 altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL); - return GetAbilityBySpecies(species, altAbility); -} - -void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord) -{ - s32 i, j; - - ZeroEnemyPartyMons(); - memcpy(&gSecretBaseRecord, secretBaseRecord, sizeof(*secretBaseRecord)); - - for (i = 0; i < 6; i++) - { - if (gSecretBaseRecord.partySpecies[i]) - { - CreateMon(&gEnemyParty[i], - gSecretBaseRecord.partySpecies[i], - gSecretBaseRecord.partyLevels[i], - 15, - 1, - gSecretBaseRecord.partyPersonality[i], - 2, - 0); - - SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, (u8 *)&gSecretBaseRecord.partyHeldItems[i]); - - for (j = 0; j < 6; j++) - SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &gSecretBaseRecord.partyEVs[i]); - - for (j = 0; j < 4; j++) - { - SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, (u8 *)&gSecretBaseRecord.partyMoves[i * 4 + j]); - SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gSecretBaseRecord.partyMoves[i * 4 + j]].pp); - } - } - } - - gBattleTypeFlags = 8; - gTrainerBattleOpponent = 1024; -} - -u8 GetSecretBaseTrainerPicIndex(void) -{ - u8 trainerClass = gSecretBaseTrainerClasses[gSecretBaseRecord.gender][gSecretBaseRecord.trainerId[0] % 5]; - return gTrainerClassToPicIndex[trainerClass]; -} - -u8 GetSecretBaseTrainerNameIndex(void) -{ - u8 trainerClass = gSecretBaseTrainerClasses[gSecretBaseRecord.gender][gSecretBaseRecord.trainerId[0] % 5]; - return gTrainerClassToNameIndex[trainerClass]; -} - -u8 PlayerPartyAndPokemonStorageFull(void) -{ - s32 i; - - for (i = 0; i < 6; i++) - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) == SPECIES_NONE) - return 0; - - return PokemonStorageFull(); -} - -u8 PokemonStorageFull(void) -{ - s32 i, j; - - for (i = 0; i < 14; i++) - for (j = 0; j < 30; j++) - if (GetBoxMonData(&gPokemonStorage.boxes[i][j], MON_DATA_SPECIES, NULL) == SPECIES_NONE) - return 0; - - return 1; -} - -void GetSpeciesName(u8 *name, u16 species) -{ - s32 i; - - for (i = 0; i <= POKEMON_NAME_LENGTH; i++) - { - if (species > NUM_SPECIES) - name[i] = gSpeciesNames[0][i]; - else - name[i] = gSpeciesNames[species][i]; - - if (name[i] == EOS) - break; - } - - name[i] = EOS; -} - -u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex) -{ - u8 basePP = gBattleMoves[move].pp; - return basePP + ((basePP * 20 * ((gUnknown_08208238[moveIndex] & ppBonuses) >> (2 * moveIndex))) / 100); -} - -void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex) -{ - u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); - ppBonuses &= gUnknown_0820823C[moveIndex]; - SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses); -} - -void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex) -{ - mon->ppBonuses &= gUnknown_0820823C[moveIndex]; -} - -void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex) -{ - s32 i; - s8 nickname[POKEMON_NAME_LENGTH * 2]; - - gBattleMons[battleIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL); - gBattleMons[battleIndex].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL); - - for (i = 0; i < 4; i++) - { - gBattleMons[battleIndex].moves[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1 + i, NULL); - gBattleMons[battleIndex].pp[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP1 + i, NULL); - } - - gBattleMons[battleIndex].ppBonuses = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP_BONUSES, NULL); - gBattleMons[battleIndex].friendship = GetMonData(&gPlayerParty[partyIndex], MON_DATA_FRIENDSHIP, NULL); - gBattleMons[battleIndex].experience = GetMonData(&gPlayerParty[partyIndex], MON_DATA_EXP, NULL); - gBattleMons[battleIndex].hpIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP_IV, NULL); - gBattleMons[battleIndex].attackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK_IV, NULL); - gBattleMons[battleIndex].defenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF_IV, NULL); - gBattleMons[battleIndex].speedIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPD_IV, NULL); - gBattleMons[battleIndex].spAttackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK_IV, NULL); - gBattleMons[battleIndex].spDefenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF_IV, NULL); - gBattleMons[battleIndex].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY, NULL); - gBattleMons[battleIndex].status1 = GetMonData(&gPlayerParty[partyIndex], MON_DATA_STATUS, NULL); - gBattleMons[battleIndex].level = GetMonData(&gPlayerParty[partyIndex], MON_DATA_LEVEL, NULL); - gBattleMons[battleIndex].hp = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP, NULL); - gBattleMons[battleIndex].maxHP = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MAX_HP, NULL); - gBattleMons[battleIndex].attack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK, NULL); - gBattleMons[battleIndex].defense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF, NULL); - gBattleMons[battleIndex].speed = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPD, NULL); - gBattleMons[battleIndex].spAttack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK, NULL); - gBattleMons[battleIndex].spDefense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF, NULL); - gBattleMons[battleIndex].isEgg = GetMonData(&gPlayerParty[partyIndex], MON_DATA_IS_EGG, NULL); - gBattleMons[battleIndex].altAbility = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ALT_ABILITY, NULL); - gBattleMons[battleIndex].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID, NULL); - gBattleMons[battleIndex].type1 = gBaseStats[gBattleMons[battleIndex].species].type1; - gBattleMons[battleIndex].type2 = gBaseStats[gBattleMons[battleIndex].species].type2; - gBattleMons[battleIndex].ability = GetAbilityBySpecies(gBattleMons[battleIndex].species, gBattleMons[battleIndex].altAbility); - GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname); - StringCopy10(gBattleMons[battleIndex].nickname, nickname); - GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_NAME, gBattleMons[battleIndex].otName); - *(unk_20160BC + GetBankSide(battleIndex)) = gBattleMons[battleIndex].hp; - - for (i = 0; i < 8; i++) - gBattleMons[battleIndex].statStages[i] = 6; - - gBattleMons[battleIndex].status2 = 0; - sub_80157C4(battleIndex); - sub_8032AA8(battleIndex, 0); -} diff --git a/src/pokemon_3.c b/src/pokemon_3.c deleted file mode 100644 index 3d85a1c8f..000000000 --- a/src/pokemon_3.c +++ /dev/null @@ -1,1380 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_message.h" -#include "data2.h" -#include "event_data.h" -#include "hold_effects.h" -#include "item.h" -#include "items.h" -#include "link.h" -#include "m4a.h" -#include "main.h" -#include "pokemon.h" -#include "rng.h" -#include "rom4.h" -#include "rom_8077ABC.h" -#include "rom_8094928.h" -#include "rtc.h" -#include "songs.h" -#include "sound.h" -#include "species.h" -#include "sprite.h" -#include "string_util.h" -#include "text.h" -#include "util.h" - -extern u8 gPlayerPartyCount; -extern u8 gEnemyPartyCount; -extern struct BattlePokemon gBattleMons[4]; -extern u8 gActiveBank; -extern struct BattleEnigmaBerry gEnigmaBerries[]; -extern u16 gSpeciesToHoennPokedexNum[]; -extern u16 gSpeciesToNationalPokedexNum[]; -extern u16 gHoennToNationalOrder[]; -extern u16 gSpeciesIdToCryId[]; -extern u8 gBattleTextBuff1[]; -extern u8 gBattleTextBuff2[]; -extern u8 gDisplayedStringBattle[]; -extern u8 gBankAttacker; -extern u8 gBankTarget; -extern u8 gStringBank; -extern u8 gBankInMenu; -extern struct SpindaSpot gSpindaSpotGraphics[]; -extern s8 gNatureStatTable[][5]; -extern s8 gUnknown_082082FE[][3]; -extern u16 gTrainerBattleOpponent; -extern u16 gBattleTypeFlags; -extern u32 gTMHMLearnsets[][2]; -extern u8 gBattleMonForms[]; -extern const u8 BattleText_Wally[]; -extern const u16 gHMMoves[]; -extern s8 gPokeblockFlavorCompatibilityTable[]; -extern u8 gLastUsedAbility; -extern const u8 BattleText_PreventedSwitch[]; -extern u16 gBattlePartyID[]; -extern u8 gJapaneseNidoranNames[][11]; - -extern u8 gUnknown_082082F8[]; -extern u8 gUnknown_083FFDB3[]; -extern u8 gUnknown_083FFDD3[]; -extern u8 gUnknown_083FEE5D[]; -extern u8 gUnknown_083FEE92[]; -extern u8 *gUnknown_08400F58[]; - -bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId) -{ - u32 status = GetMonData(mon, MON_DATA_STATUS, 0); - - if (status & healMask) - { - status &= ~healMask; - SetMonData(mon, MON_DATA_STATUS, (u8 *)&status); - if (gMain.inBattle && battleId != 4) - gBattleMons[battleId].status1 &= ~healMask; - return FALSE; - } - else - { - return TRUE; - } -} - -u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) -{ - const u8 *temp; - const u8 *itemEffect; - u8 offset; - int i; - u8 j; - u8 val; - - offset = 6; - - temp = gItemEffectTable[itemId - 13]; - - if (!temp && itemId != ITEM_ENIGMA_BERRY) - return 0; - - if (itemId == ITEM_ENIGMA_BERRY) - { - temp = gEnigmaBerries[gActiveBank].itemEffect; - } - - itemEffect = temp; - - for (i = 0; i < 6; i++) - { - switch (i) - { - case 0: - case 1: - case 2: - case 3: - if (i == effectByte) - return 0; - break; - case 4: - val = itemEffect[4]; - if (val & 0x20) - val &= 0xDF; - j = 0; - while (val) - { - if (val & 1) - { - switch (j) - { - case 2: - if (val & 0x10) - val &= 0xEF; - case 0: - if (i == effectByte && (val & effectBit)) - return offset; - offset++; - break; - case 1: - if (i == effectByte && (val & effectBit)) - return offset; - offset++; - break; - case 3: - if (i == effectByte && (val & effectBit)) - return offset; - offset++; - break; - case 7: - if (i == effectByte) - return 0; - break; - } - } - j++; - val >>= 1; - if (i == effectByte) - effectBit >>= 1; - } - break; - case 5: - val = itemEffect[5]; - j = 0; - while (val) - { - if (val & 1) - { - switch (j) - { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - if (i == effectByte && (val & effectBit)) - return offset; - offset++; - break; - case 7: - if (i == effectByte) - return 0; - break; - } - } - j++; - val >>= 1; - if (i == effectByte) - effectBit >>= 1; - } - break; - } - } - - return offset; -} - -void sub_803F324(int stat) -{ - gBankTarget = gBankInMenu; - StringCopy(gBattleTextBuff1, gUnknown_08400F58[gUnknown_082082F8[stat]]); - StringCopy(gBattleTextBuff2, gUnknown_083FFDB3); - StrCpyDecodeToDisplayedStringBattle(gUnknown_083FFDD3); -} - -u8 *sub_803F378(u16 itemId) -{ - int i; - u8 *itemEffect; - - if (itemId == ITEM_ENIGMA_BERRY) - { - if (gMain.inBattle) - { - itemEffect = gEnigmaBerries[gBankInMenu].itemEffect; - } - else - { - itemEffect = gSaveBlock1.enigmaBerry.itemEffect; - } - } - else - { - itemEffect = (u8 *) gItemEffectTable[itemId - 13]; - } - - gStringBank = gBankInMenu; - - for (i = 0; i < 3; i++) - { - if (itemEffect[i] & 0xF) - sub_803F324(i * 2); - if (itemEffect[i] & 0xF0) - { - if (i) - { - sub_803F324(i * 2 + 1); - } - else - { - gBankAttacker = gBankInMenu; - StrCpyDecodeToDisplayedStringBattle(gUnknown_083FEE92); - } - } - } - - if (itemEffect[3] & 0x80) - { - gBankAttacker = gBankInMenu; - StrCpyDecodeToDisplayedStringBattle(gUnknown_083FEE5D); - } - - return gDisplayedStringBattle; -} - -u8 GetNature(struct Pokemon *mon) -{ - return GetMonData(mon, MON_DATA_PERSONALITY, 0) % 25; -} - -u8 GetNatureFromPersonality(u32 personality) -{ - return personality % 25; -} - -u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) -{ - int i; - u16 targetSpecies = 0; - u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); - u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); - u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); - u8 level; - u16 friendship; - u8 beauty = GetMonData(mon, MON_DATA_BEAUTY, 0); - u16 upperPersonality = personality >> 16; - u8 holdEffect; - - if (heldItem == ITEM_ENIGMA_BERRY) - holdEffect = gSaveBlock1.enigmaBerry.holdEffect; - else - holdEffect = ItemId_GetHoldEffect(heldItem); - - if (holdEffect == 38 && type != 3) - return 0; - - switch (type) - { - case 0: - level = GetMonData(mon, MON_DATA_LEVEL, 0); - friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0); - - for (i = 0; i < 5; i++) - { - switch (gEvolutionTable[species].evolutions[i].method) - { - case EVO_FRIENDSHIP: - if (friendship >= 220) - targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; - break; - case EVO_FRIENDSHIP_DAY: - RtcCalcLocalTime(); - if (gLocalTime.hours >= 12 && gLocalTime.hours < 24 && friendship >= 220) - targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; - break; - case EVO_FRIENDSHIP_NIGHT: - RtcCalcLocalTime(); - if (gLocalTime.hours >= 0 && gLocalTime.hours < 12 && friendship >= 220) - targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; - break; - case EVO_LEVEL: - if (gEvolutionTable[species].evolutions[i].param <= level) - targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; - break; - case EVO_LEVEL_ATK_GT_DEF: - if (gEvolutionTable[species].evolutions[i].param <= level) - if (GetMonData(mon, MON_DATA_ATK, 0) > GetMonData(mon, MON_DATA_DEF, 0)) - targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; - break; - case EVO_LEVEL_ATK_EQ_DEF: - if (gEvolutionTable[species].evolutions[i].param <= level) - if (GetMonData(mon, MON_DATA_ATK, 0) == GetMonData(mon, MON_DATA_DEF, 0)) - targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; - break; - case EVO_LEVEL_ATK_LT_DEF: - if (gEvolutionTable[species].evolutions[i].param <= level) - if (GetMonData(mon, MON_DATA_ATK, 0) < GetMonData(mon, MON_DATA_DEF, 0)) - targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; - break; - case EVO_LEVEL_SILCOON: - if (gEvolutionTable[species].evolutions[i].param <= level && (upperPersonality % 10) <= 4) - targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; - break; - case EVO_LEVEL_CASCOON: - if (gEvolutionTable[species].evolutions[i].param <= level && (upperPersonality % 10) > 4) - targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; - break; - case EVO_LEVEL_NINJASK: - if (gEvolutionTable[species].evolutions[i].param <= level) - targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; - break; - case EVO_BEAUTY: - if (gEvolutionTable[species].evolutions[i].param <= beauty) - targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; - break; - } - } - break; - case 1: - for (i = 0; i < 5; i++) - { - switch (gEvolutionTable[species].evolutions[i].method) - { - case EVO_TRADE: - targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; - break; - case EVO_TRADE_ITEM: - if (gEvolutionTable[species].evolutions[i].param == heldItem) - { - heldItem = 0; - SetMonData(mon, MON_DATA_HELD_ITEM, (u8 *)&heldItem); - targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; - } - break; - } - } - break; - case 2: - case 3: - for (i = 0; i < 5; i++) - { - if (gEvolutionTable[species].evolutions[i].method == EVO_ITEM - && gEvolutionTable[species].evolutions[i].param == evolutionItem) - { - targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; - break; - } - } - break; - } - - return targetSpecies; -} - -u16 HoennPokedexNumToSpecies(u16 hoennNum) -{ - u16 species; - - if (!hoennNum) - return 0; - - species = 0; - - while (species < 411 && gSpeciesToHoennPokedexNum[species] != hoennNum) - species++; - - if (species == 411) - return 0; - - return species + 1; -} - -u16 NationalPokedexNumToSpecies(u16 nationalNum) -{ - u16 species; - - if (!nationalNum) - return 0; - - species = 0; - - while (species < 411 && gSpeciesToNationalPokedexNum[species] != nationalNum) - species++; - - if (species == 411) - return 0; - - return species + 1; -} - -u16 NationalToHoennOrder(u16 nationalNum) -{ - u16 hoennNum; - - if (!nationalNum) - return 0; - - hoennNum = 0; - - while (hoennNum < 411 && gHoennToNationalOrder[hoennNum] != nationalNum) - hoennNum++; - - if (hoennNum == 411) - return 0; - - return hoennNum + 1; -} - -u16 SpeciesToNationalPokedexNum(u16 species) -{ - if (!species) - return 0; - - return gSpeciesToNationalPokedexNum[species - 1]; -} - -u16 SpeciesToHoennPokedexNum(u16 species) -{ - if (!species) - return 0; - - return gSpeciesToHoennPokedexNum[species - 1]; -} - -u16 HoennToNationalOrder(u16 hoennNum) -{ - if (!hoennNum) - return 0; - - return gHoennToNationalOrder[hoennNum - 1]; -} - -u32 SpeciesToCryId(u16 species) -{ - if (species <= 250) - return species; - - if (species < 276) - return 200; - - return gSpeciesIdToCryId[species - 276]; -} - -void unref_sub_803F938(u16 species, u32 personality, u8 *dest) -{ - if (species == SPECIES_SPINDA && dest != gUnknown_081FAF4C[0] && dest != gUnknown_081FAF4C[2]) - { - int i; - for (i = 0; i < 4; i++) - { - int j; - u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); - u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); - - for (j = 0; j < 16; j++) - { - int k; - s32 row = gSpindaSpotGraphics[i].image[j]; - - for (k = x; k < x + 16; k++) - { - u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2); - - if (row & 1) - { - if (k & 1) - { - if ((u8)((*val & 0xF0) - 0x10) <= 0x20) - *val += 0x40; - } - else - { - if ((u8)((*val & 0xF) - 0x01) <= 0x02) - *val += 0x04; - } - } - - row >>= 1; - } - - y++; - } - - personality >>= 8; - } - } -} - -void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4) -{ - if (species == SPECIES_SPINDA && a4) - { - int i; - for (i = 0; i < 4; i++) - { - int j; - u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); - u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); - - for (j = 0; j < 16; j++) - { - int k; - s32 row = gSpindaSpotGraphics[i].image[j]; - - for (k = x; k < x + 16; k++) - { - u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2); - - if (row & 1) - { - if (k & 1) - { - if ((u8)((*val & 0xF0) - 0x10) <= 0x20) - *val += 0x40; - } - else - { - if ((u8)((*val & 0xF) - 0x01) <= 0x02) - *val += 0x04; - } - } - - row >>= 1; - } - - y++; - } - - personality >>= 8; - } - } -} - -void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies) -{ -#ifdef BUGFIX_EVO_NAME - u8 language; - GetMonData(mon, MON_DATA_NICKNAME, gStringVar1); - language = GetMonData(mon, MON_DATA_LANGUAGE, &language); - if (language == GAME_LANGUAGE && !StringCompareWithoutExtCtrlCodes(gSpeciesNames[oldSpecies], gStringVar1)) - SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]); -#else - GetMonData(mon, MON_DATA_NICKNAME, gStringVar1); - if (!StringCompareWithoutExtCtrlCodes(gSpeciesNames[oldSpecies], gStringVar1)) - SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]); -#endif -} - -bool8 sub_803FBBC(void) -{ - bool8 retVal = FALSE; - switch (gLinkPlayers[GetMultiplayerId()].lp_field_18) - { - case 0: - case 3: - retVal = FALSE; - break; - case 1: - case 2: - retVal = TRUE; - break; - } - return retVal; -} - -bool8 sub_803FBFC(u8 id) -{ - bool8 retVal = FALSE; - switch (gLinkPlayers[id].lp_field_18) - { - case 0: - case 3: - retVal = FALSE; - break; - case 1: - case 2: - retVal = TRUE; - break; - } - return retVal; -} - -s32 sub_803FC34(u16 a1) -{ - s32 id; - for (id = 0; id < MAX_LINK_PLAYERS; id++) - if (gLinkPlayers[id].lp_field_18 == a1) - break; - return id; -} - -u8 sub_803FC58(u16 trainer) -{ - return gTrainers[trainer].encounterMusic_gender & 0x7F; -} - -u16 nature_stat_mod(u8 nature, u16 n, u8 statIndex) -{ - if (statIndex < 1 || statIndex > 5) - { - // should just be "return n", but it wouldn't match without this - u16 retVal = n; - retVal++; - retVal--; - return retVal; - } - - switch (gNatureStatTable[nature][statIndex - 1]) - { - case 1: - return (u16)(n * 110) / 100; - case -1: - return (u16)(n * 90) / 100; - } - - return n; -} - -void AdjustFriendship(struct Pokemon *mon, u8 event) -{ - u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); - u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); - u8 holdEffect; - - if (heldItem == ITEM_ENIGMA_BERRY) - { - if (gMain.inBattle) - { - holdEffect = gEnigmaBerries[0].holdEffect; - } - else - { - holdEffect = gSaveBlock1.enigmaBerry.holdEffect; - } - } - else - { - holdEffect = ItemId_GetHoldEffect(heldItem); - } - - if (species && species != SPECIES_EGG) - { - u8 friendshipLevel = 0; - s16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0); - if (friendship > 99) - friendshipLevel++; - if (friendship > 199) - friendshipLevel++; - if ((event != 5 || !(Random() & 1)) - && (event != 3 - || ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) - && (gTrainers[gTrainerBattleOpponent].trainerClass == 24 - || gTrainers[gTrainerBattleOpponent].trainerClass == 25 - || gTrainers[gTrainerBattleOpponent].trainerClass == 32)))) - { - s8 mod = gUnknown_082082FE[event][friendshipLevel]; - if (mod > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) - mod = (150 * mod) / 100; - friendship += mod; - if (mod > 0) - { - if (GetMonData(mon, MON_DATA_POKEBALL, 0) == ITEM_LUXURY_BALL) - friendship++; - if (GetMonData(mon, MON_DATA_MET_LOCATION, 0) == sav1_map_get_name()) - friendship++; - } - if (friendship < 0) - friendship = 0; - if (friendship > 255) - friendship = 255; - SetMonData(mon, MON_DATA_FRIENDSHIP, (u8 *)&friendship); - } - } -} - -void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) -{ - u8 evs[NUM_STATS]; - u16 evIncrease = 0; - u16 totalEVs = 0; - u16 heldItem; - u8 holdEffect; - int i; - - for (i = 0; i < NUM_STATS; i++) - { - evs[i] = GetMonData(mon, MON_DATA_HP_EV + i, 0); - totalEVs += evs[i]; - } - - for (i = 0; i < NUM_STATS; i++) - { - u8 hasHadPokerus; - int multiplier; - - if (totalEVs >= MAX_TOTAL_EVS) - break; - - hasHadPokerus = CheckPartyHasHadPokerus(mon, 0); - - if (hasHadPokerus) - multiplier = 2; - else - multiplier = 1; - - switch (i) - { - case 0: - evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier; - break; - case 1: - evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier; - break; - case 2: - evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier; - break; - case 3: - evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier; - break; - case 4: - evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier; - break; - case 5: - evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier; - break; - } - - heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); - - if (heldItem == ITEM_ENIGMA_BERRY) - { - if (gMain.inBattle) - { - holdEffect = gEnigmaBerries[0].holdEffect; - } - else - { - holdEffect = gSaveBlock1.enigmaBerry.holdEffect; - } - } - else - { - holdEffect = ItemId_GetHoldEffect(heldItem); - } - - if (holdEffect == HOLD_EFFECT_MACHO_BRACE) - evIncrease *= 2; - - if (totalEVs + (s16)evIncrease > MAX_TOTAL_EVS) - evIncrease = ((s16)evIncrease + MAX_TOTAL_EVS) - (totalEVs + evIncrease); - - if (evs[i] + (s16)evIncrease > 255) - { - int val1 = (s16)evIncrease + 255; - int val2 = evs[i] + evIncrease; - evIncrease = val1 - val2; - } - - evs[i] += evIncrease; - totalEVs += evIncrease; - SetMonData(mon, MON_DATA_HP_EV + i, &evs[i]); - } -} - -u16 GetMonEVCount(struct Pokemon *mon) -{ - int i; - u16 count = 0; - - for (i = 0; i < NUM_STATS; i++) - count += GetMonData(mon, MON_DATA_HP_EV + i, 0); - - return count; -} - -void RandomlyGivePartyPokerus(struct Pokemon *party) -{ - u16 rnd = Random(); - if (rnd == 0x4000 || rnd == 0x8000 || rnd == 0xC000) - { - struct Pokemon *mon; - - do - { - do - { - rnd = Random() % PARTY_SIZE; - mon = &party[rnd]; - } - while (!GetMonData(mon, MON_DATA_SPECIES, 0)); - } - while (GetMonData(mon, MON_DATA_IS_EGG, 0)); - - if (!(CheckPartyHasHadPokerus(party, gBitTable[rnd]))) - { - u8 rnd2; - - do - { - rnd2 = Random(); - } - while (rnd2 == 0); - - if (rnd2 & 0xF0) - rnd2 &= 0x07; - - rnd2 |= (rnd2 << 4); - rnd2 &= 0xF3; - rnd2++; - - SetMonData(&party[rnd], MON_DATA_POKERUS, &rnd2); - } - } -} - -u8 CheckPartyPokerus(struct Pokemon *party, u8 selection) -{ - u8 retVal; - - int partyIndex = 0; - unsigned curBit = 1; - retVal = 0; - - if (selection) - { - do - { - if ((selection & 1) && (GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0) & 0xF)) - retVal |= curBit; - partyIndex++; - curBit <<= 1; - selection >>= 1; - } - while (selection); - } - else if (GetMonData(&party[0], MON_DATA_POKERUS, 0) & 0xF) - { - retVal = 1; - } - - return retVal; -} - -u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection) -{ - u8 retVal; - - int partyIndex = 0; - unsigned curBit = 1; - retVal = 0; - - if (selection) - { - do - { - if ((selection & 1) && GetMonData(&party[partyIndex], MON_DATA_POKERUS, 0)) - retVal |= curBit; - partyIndex++; - curBit <<= 1; - selection >>= 1; - } - while (selection); - } - else if (GetMonData(&party[0], MON_DATA_POKERUS, 0)) - { - retVal = 1; - } - - return retVal; -} - -void UpdatePartyPokerusTime(u16 days) -{ - int i; - for (i = 0; i < PARTY_SIZE; i++) - { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, 0)) - { - u8 pokerus = GetMonData(&gPlayerParty[i], MON_DATA_POKERUS, 0); - if (pokerus & 0xF) - { - if ((pokerus & 0xF) < days || days > 4) - pokerus &= 0xF0; - else - pokerus -= days; - - SetMonData(&gPlayerParty[i], MON_DATA_POKERUS, &pokerus); - } - } - } -} - -void PartySpreadPokerus(struct Pokemon *party) -{ - if ((Random() % 3) == 0) - { - int i; - for (i = 0; i < PARTY_SIZE; i++) - { - if (GetMonData(&party[i], MON_DATA_SPECIES, 0)) - { - u8 pokerus = GetMonData(&party[i], MON_DATA_POKERUS, 0); - u8 curPokerus = pokerus; - if (pokerus) - { - if (pokerus & 0xF) - { - // spread to adjacent party members - if (i != 0 && !(GetMonData(&party[i - 1], MON_DATA_POKERUS, 0) & 0xF0)) - SetMonData(&party[i - 1], MON_DATA_POKERUS, &curPokerus); - if (i != (PARTY_SIZE - 1) && !(GetMonData(&party[i + 1], MON_DATA_POKERUS, 0) & 0xF0)) - { - SetMonData(&party[i + 1], MON_DATA_POKERUS, &curPokerus); - i++; - } - } - } - } - } - } -} - -bool8 TryIncrementMonLevel(struct Pokemon *mon) -{ - u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); - u8 nextLevel = GetMonData(mon, MON_DATA_LEVEL, 0) + 1; - if (GetMonData(mon, MON_DATA_EXP, 0) > gExperienceTables[gBaseStats[species].growthRate][nextLevel]) - { - SetMonData(mon, MON_DATA_LEVEL, &nextLevel); - return TRUE; - } - else - { - return FALSE; - } -} - -u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm) -{ - u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); - if (species == SPECIES_EGG) - { - return 0; - } - else if (tm < 32) - { - u32 mask = 1 << tm; - return gTMHMLearnsets[species][0] & mask; - } - else - { - u32 mask = 1 << (tm - 32); - return gTMHMLearnsets[species][1] & mask; - } -} - -u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves) -{ - u16 learnedMoves[4]; - u8 numMoves = 0; - u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); - u8 level = GetMonData(mon, MON_DATA_LEVEL, 0); - int i, j, k; - - for (i = 0; i < 4; i++) - learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0); - - for (i = 0; i < 20; i++) - { - u16 moveLevel; - - if (gLevelUpLearnsets[species][i] == 0xFFFF) - break; - - moveLevel = gLevelUpLearnsets[species][i] & 0xFE00; - - if (moveLevel <= (level << 9)) - { - for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++) - ; - - if (j == 4) - { - for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++) - ; - - if (k == numMoves) - moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; - } - } - } - - return numMoves; -} - -u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves) -{ - u8 numMoves = 0; - int i; - - for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != 0xFFFF; i++) - moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; - - return numMoves; -} - -u8 sub_8040574(struct Pokemon *mon) -{ - u16 learnedMoves[4]; - u16 moves[20]; - u8 numMoves = 0; - u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); - u8 level = GetMonData(mon, MON_DATA_LEVEL, 0); - int i, j, k; - - if (species == SPECIES_EGG) - return 0; - - for (i = 0; i < 4; i++) - learnedMoves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, 0); - - for (i = 0; i < 20; i++) - { - u16 moveLevel; - - if (gLevelUpLearnsets[species][i] == 0xFFFF) - break; - - moveLevel = gLevelUpLearnsets[species][i] & 0xFE00; - - if (moveLevel <= (level << 9)) - { - for (j = 0; j < 4 && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++) - ; - - if (j == 4) - { - for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++) - ; - - if (k == numMoves) - moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF; - } - } - } - - return numMoves; -} - -u16 SpeciesToPokedexNum(u16 species) -{ - if (IsNationalPokedexEnabled()) - { - return SpeciesToNationalPokedexNum(species); - } - else - { - species = SpeciesToHoennPokedexNum(species); - if (species <= 202) - return species; - return 0xFFFF; - } -} - -void ClearBattleMonForms(void) -{ - int i; - for (i = 0; i < 4; i++) - gBattleMonForms[i] = 0; -} - -u16 sub_8040728(void) -{ - if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) - return BGM_BATTLE34; - if (gBattleTypeFlags & BATTLE_TYPE_REGI) - return BGM_BATTLE36; - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - return BGM_BATTLE20; - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { - switch (gTrainers[gTrainerBattleOpponent].trainerClass) - { - case 2: - case 0x31: - return BGM_BATTLE30; - case 3: - case 4: - case 0x32: - case 0x33: - return BGM_BATTLE31; - case 0x19: - return BGM_BATTLE32; - case 0x20: - return BGM_BATTLE33; - case 0x2E: - if (!StringCompare(gTrainers[gTrainerBattleOpponent].trainerName, BattleText_Wally)) - return BGM_BATTLE20; - return BGM_BATTLE35; - case 0x18: - return BGM_BATTLE38; - default: - return BGM_BATTLE20; - } - } - return BGM_BATTLE27; -} - -void sub_80408BC(void) -{ - ResetMapMusic(); - m4aMPlayAllStop(); - PlayBGM(sub_8040728()); -} - -void current_map_music_set__default_for_battle(u16 song) -{ - ResetMapMusic(); - m4aMPlayAllStop(); - if (song) - PlayNewMapMusic(song); - else - PlayNewMapMusic(sub_8040728()); -} - -const u8 *pokemon_get_pal(struct Pokemon *mon) -{ - u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); - u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); - u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); - return species_and_otid_get_pal(species, otId, personality); -} - -//Extracts the upper 16 bits of a 32-bit number -#define HIHALF(n) (((n) & 0xFFFF0000) >> 16) - -//Extracts the lower 16 bits of a 32-bit number -#define LOHALF(n) ((n) & 0xFFFF) - -const u8 *species_and_otid_get_pal(u16 species, u32 otId, u32 personality) -{ - u32 shinyValue; - - if (species > SPECIES_EGG) - return gMonPaletteTable[0].data; - - shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); - if (shinyValue < 8) - return gMonShinyPaletteTable[species].data; - else - return gMonPaletteTable[species].data; -} - -const struct CompressedSpritePalette *sub_8040990(struct Pokemon *mon) -{ - u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); - u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); - u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); - return sub_80409C8(species, otId, personality); -} - -const struct CompressedSpritePalette *sub_80409C8(u16 species, u32 otId , u32 personality) -{ - u32 shinyValue; - - shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); - if (shinyValue < 8) - return &gMonShinyPaletteTable[species]; - else - return &gMonPaletteTable[species]; -} - -bool8 IsHMMove2(u16 move) -{ - int i = 0; - while (gHMMoves[i] != 0xFFFF) - { - if (gHMMoves[i++] == move) - return TRUE; - } - return FALSE; -} - -bool8 sub_8040A3C(u16 species) -{ - return gBaseStats[species].unk19_7; -} - -s8 sub_8040A54(struct Pokemon *mon, u8 a2) -{ - u8 nature = GetNature(mon); - return gPokeblockFlavorCompatibilityTable[nature * 5 + a2]; -} - -s8 sub_8040A7C(u32 personality, u8 a2) -{ - u8 nature = GetNatureFromPersonality(personality); - return gPokeblockFlavorCompatibilityTable[nature * 5 + a2]; -} - -bool8 IsTradedMon(struct Pokemon *mon) -{ - u8 otName[8]; - u32 otId; - GetMonData(mon, MON_DATA_OT_NAME, otName); - otId = GetMonData(mon, MON_DATA_OT_ID, 0); - return IsOtherTrainer(otId, otName); -} - -bool8 IsOtherTrainer(u32 otId, u8 *otName) -{ - if (otId == (gSaveBlock2.playerTrainerId[0] | (gSaveBlock2.playerTrainerId[1] << 8) | (gSaveBlock2.playerTrainerId[2] << 16) | (gSaveBlock2.playerTrainerId[3] << 24))) - { - int i; - - for (i = 0; otName[i] != EOS; i++) - if (otName[i] != gSaveBlock2.playerName[i]) - return TRUE; - return FALSE; - } - - return TRUE; -} - -void BoxMonRestorePP(struct BoxPokemon *); - -void MonRestorePP(struct Pokemon *mon) -{ - BoxMonRestorePP(&mon->box); -} - -void BoxMonRestorePP(struct BoxPokemon *boxMon) -{ - int i; - - for (i = 0; i < 4; i++) - { - if (GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0)) - { - u16 move = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0); - u16 bonus = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, 0); - u8 pp = CalculatePPWithBonus(move, bonus, i); - SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp); - } - } -} - -void sub_8040B8C(void) -{ - gLastUsedAbility = BATTLE_STRUCT->unk160C0;; - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 4; - gBattleTextBuff1[2] = BATTLE_STRUCT->unk16054; - gBattleTextBuff1[4] = EOS; - if (!GetBankSide(BATTLE_STRUCT->unk16054)) - gBattleTextBuff1[3] = pokemon_order_func(gBattlePartyID[BATTLE_STRUCT->unk16054]); - else - gBattleTextBuff1[3] = gBattlePartyID[BATTLE_STRUCT->unk16054]; - gBattleTextBuff2[0] = 0xFD; - gBattleTextBuff2[1] = 4; - gBattleTextBuff2[2] = gBankInMenu; - gBattleTextBuff2[3] = pokemon_order_func(gBattlePartyID[gBankInMenu]); - gBattleTextBuff2[4] = EOS; - StrCpyDecodeBattle(BattleText_PreventedSwitch, gStringVar4); -} - -void SetWildMonHeldItem(void) -{ - if (!(gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER))) - { - u16 rnd = Random() % 100; - u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0); - if (gBaseStats[species].item1 == gBaseStats[species].item2) - { - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item1); - return; - } - - if (rnd > 44) - { - if (rnd <= 94) - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item1); - else - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item2); - } - } -} - -bool8 IsShinyOtIdPersonality(u32, u32); - -bool8 IsShiny(struct Pokemon *mon) -{ - u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); - u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); - return IsShinyOtIdPersonality(otId, personality); -} - -bool8 IsShinyOtIdPersonality(u32 otId, u32 personality) -{ - bool8 retVal = FALSE; - u32 shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); - if (shinyValue < 8) - retVal = TRUE; - return retVal; -} - -u8 *sub_8040D08(void) -{ - u8 id = GetMultiplayerId(); - return gLinkPlayers[sub_803FC34(gLinkPlayers[id].lp_field_18 ^ 2)].name; -} - -bool32 sub_8040D3C(u16 species, u8 *name, u8 language) -{ - bool32 retVal = FALSE; - if (species == SPECIES_NIDORAN_M || species == SPECIES_NIDORAN_F) - { - u8 *speciesName; - if (language == GAME_LANGUAGE) - { - speciesName = gSpeciesNames[species]; - } - else - { - if (species == SPECIES_NIDORAN_M) - speciesName = gJapaneseNidoranNames[0]; - else - speciesName = gJapaneseNidoranNames[1]; - } - if (!StringCompareWithoutExtCtrlCodes(name, speciesName)) - retVal = TRUE; - else - retVal = FALSE; - } - return retVal; -} - -bool32 sub_8040D8C(u16 species, u8 *name) -{ - u8 language = GAME_LANGUAGE; - if (name[0] == 0xFC && name[1] == 21) - language = LANGUAGE_JAPANESE; - return sub_8040D3C(species, name, language); -} - -bool32 unref_sub_8040DAC(struct Pokemon *mon) -{ - u8 name[12]; - u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); - u8 language = GetMonData(mon, MON_DATA_LANGUAGE, 0); - GetMonData(mon, MON_DATA_NICKNAME, name); - return sub_8040D3C(species, name, language); -} diff --git a/src/pokemon_data.c b/src/pokemon_data.c deleted file mode 100644 index 6414134fb..000000000 --- a/src/pokemon_data.c +++ /dev/null @@ -1,128 +0,0 @@ -#include "global.h" -#include "pokemon.h" -#include "species.h" -#include "trainer.h" -#include "abilities.h" -#include "moves.h" -#include "hold_effects.h" -#include "items.h" -#include "sprite.h" -#include "data2.h" - -#include "data/pokemon/dex_order.h" -#include "data/pokemon/spinda_spots.h" -#include "data/pokemon/item_effects.h" -#include "data/pokemon/nature_stats.h" -#include "data/pokemon/tmhm_learnsets.h" -#include "data/pokemon/trainer_class_lookups.h" -#include "data/pokemon/cry_ids.h" -#include "data/pokemon/experience_tables.h" -#include "data/pokemon/base_stats.h" -#include "data/pokemon/level_up_learnsets.h" -#include "data/pokemon/evolution.h" -#include "data/pokemon/level_up_learnset_pointers.h" - -const u8 gUnknown_08208238[] = { // Masks for getting PP Up count, also PP Max values - 0x03, 0x0c, 0x30, 0xc0 -}; - -const u8 gUnknown_0820823C[] = { // Masks for setting PP Up count - 0xFC, 0xF3, 0xCF, 0x3F -}; - -const u8 gUnknown_08208240[] = { // Values added to PP Up count - 0x01, 0x04, 0x10, 0x40 -}; - -const u8 gStatStageRatios[][2] = { - {10, 40}, // -6 - {10, 35}, // -5 - {10, 30}, // -4 - {10, 25}, // -3 - {10, 20}, // -2 - {10, 15}, // -1 - {10, 10}, // 0 - {15, 10}, // 1 - {20, 10}, // 2 - {25, 10}, // 3 - {30, 10}, // 4 - {35, 10}, // 5 - {40, 10} // 6 -}; - -const u8 unknownGameFreakAbbrev_820825E[] = _("ゲーフリ"); - -const u8 gHoldEffectToType[][2] = { - {HOLD_EFFECT_BUG_POWER, TYPE_BUG}, - {HOLD_EFFECT_STEEL_POWER, TYPE_STEEL}, - {HOLD_EFFECT_GROUND_POWER, TYPE_GROUND}, - {HOLD_EFFECT_ROCK_POWER, TYPE_ROCK}, - {HOLD_EFFECT_GRASS_POWER, TYPE_GRASS}, - {HOLD_EFFECT_DARK_POWER, TYPE_DARK}, - {HOLD_EFFECT_FIGHTING_POWER, TYPE_FIGHTING}, - {HOLD_EFFECT_ELECTRIC_POWER, TYPE_ELECTRIC}, - {HOLD_EFFECT_WATER_POWER, TYPE_WATER}, - {HOLD_EFFECT_FLYING_POWER, TYPE_FLYING}, - {HOLD_EFFECT_POISON_POWER, TYPE_POISON}, - {HOLD_EFFECT_ICE_POWER, TYPE_ICE}, - {HOLD_EFFECT_GHOST_POWER, TYPE_GHOST}, - {HOLD_EFFECT_PSYCHIC_POWER, TYPE_PSYCHIC}, - {HOLD_EFFECT_FIRE_POWER, TYPE_FIRE}, - {HOLD_EFFECT_DRAGON_POWER, TYPE_DRAGON}, - {HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL} -}; - -extern void sub_80105A0(struct Sprite *); -extern void oac_poke_opponent(struct Sprite *); - -const struct SpriteTemplate gSpriteTemplate_8208288[] = { - {0xFFFF, 0, &gOamData_81F96F0, NULL, gSpriteImageTable_81E7A10, gSpriteAffineAnimTable_81E7B70, sub_80105A0}, - {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A30, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent}, - {0xFFFF, 0, &gOamData_81F96F0, NULL, gSpriteImageTable_81E7A50, gSpriteAffineAnimTable_81E7B70, sub_80105A0}, - {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A70, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent}, -}; - -const u8 gSecretBaseTrainerClasses[][5] = { - // male - {TRAINER_CLASS_YOUNGSTER, TRAINER_CLASS_BUG_CATCHER, TRAINER_CLASS_RICH_BOY, TRAINER_CLASS_CAMPER, TRAINER_CLASS_COOL_TRAINER_M}, - // female - {TRAINER_CLASS_LASS, TRAINER_CLASS_SCHOOL_KID_F, TRAINER_CLASS_LADY, TRAINER_CLASS_PICNICKER, TRAINER_CLASS_COOL_TRAINER_F} -}; - -const u8 gUnknown_082082F2[] = { - MON_DATA_HP_EV, - MON_DATA_ATK_EV, - MON_DATA_DEF_EV, - MON_DATA_SPD_EV, - MON_DATA_SPDEF_EV, - MON_DATA_SPATK_EV -}; - -const u8 gUnknown_082082F8[] = {1, 1, 3, 2, 4, 6}; - -const s8 gUnknown_082082FE[][3] = { - // Happiness deltas - { 5, 3, 2}, - { 5, 3, 2}, - { 1, 1, 0}, - { 3, 2, 1}, - { 1, 1, 0}, - { 1, 1, 1}, - {-1, -1, -1}, - {-5, -5, -10}, - {-5, -5, -10} -}; - -const u16 gHMMoves[] = { - MOVE_CUT, - MOVE_FLY, - MOVE_SURF, - MOVE_STRENGTH, - MOVE_FLASH, - MOVE_ROCK_SMASH, - MOVE_WATERFALL, - MOVE_DIVE, - 0xffff -}; - -const u8 gJapaneseNidoranNames[][11] = {_("ニドラン♂"), _("ニドラン♀")}; diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c deleted file mode 100644 index 8994ea49e..000000000 --- a/src/pokemon_icon.c +++ /dev/null @@ -1,1276 +0,0 @@ -#include "global.h" -#include "graphics.h" -#include "mail_data.h" -#include "species.h" -#include "sprite.h" - -#define POKE_ICON_BASE_PAL_TAG 56000 - -struct MonIconSpriteTemplate -{ - const struct OamData *oam; - const u8 *image; - const union AnimCmd *const *anims; - const union AffineAnimCmd *const *affineAnims; - void (*callback)(struct Sprite *); - u16 paletteTag; -}; - -const u8 * const gMonIconTable[] = -{ - gMonIcon_Bulbasaur, - gMonIcon_Bulbasaur, - gMonIcon_Ivysaur, - gMonIcon_Venusaur, - gMonIcon_Charmander, - gMonIcon_Charmeleon, - gMonIcon_Charizard, - gMonIcon_Squirtle, - gMonIcon_Wartortle, - gMonIcon_Blastoise, - gMonIcon_Caterpie, - gMonIcon_Metapod, - gMonIcon_Butterfree, - gMonIcon_Weedle, - gMonIcon_Kakuna, - gMonIcon_Beedrill, - gMonIcon_Pidgey, - gMonIcon_Pidgeotto, - gMonIcon_Pidgeot, - gMonIcon_Rattata, - gMonIcon_Raticate, - gMonIcon_Spearow, - gMonIcon_Fearow, - gMonIcon_Ekans, - gMonIcon_Arbok, - gMonIcon_Pikachu, - gMonIcon_Raichu, - gMonIcon_Sandshrew, - gMonIcon_Sandslash, - gMonIcon_NidoranF, - gMonIcon_Nidorina, - gMonIcon_Nidoqueen, - gMonIcon_NidoranM, - gMonIcon_Nidorino, - gMonIcon_Nidoking, - gMonIcon_Clefairy, - gMonIcon_Clefable, - gMonIcon_Vulpix, - gMonIcon_Ninetales, - gMonIcon_Jigglypuff, - gMonIcon_Wigglytuff, - gMonIcon_Zubat, - gMonIcon_Golbat, - gMonIcon_Oddish, - gMonIcon_Gloom, - gMonIcon_Vileplume, - gMonIcon_Paras, - gMonIcon_Parasect, - gMonIcon_Venonat, - gMonIcon_Venomoth, - gMonIcon_Diglett, - gMonIcon_Dugtrio, - gMonIcon_Meowth, - gMonIcon_Persian, - gMonIcon_Psyduck, - gMonIcon_Golduck, - gMonIcon_Mankey, - gMonIcon_Primeape, - gMonIcon_Growlithe, - gMonIcon_Arcanine, - gMonIcon_Poliwag, - gMonIcon_Poliwhirl, - gMonIcon_Poliwrath, - gMonIcon_Abra, - gMonIcon_Kadabra, - gMonIcon_Alakazam, - gMonIcon_Machop, - gMonIcon_Machoke, - gMonIcon_Machamp, - gMonIcon_Bellsprout, - gMonIcon_Weepinbell, - gMonIcon_Victreebel, - gMonIcon_Tentacool, - gMonIcon_Tentacruel, - gMonIcon_Geodude, - gMonIcon_Graveler, - gMonIcon_Golem, - gMonIcon_Ponyta, - gMonIcon_Rapidash, - gMonIcon_Slowpoke, - gMonIcon_Slowbro, - gMonIcon_Magnemite, - gMonIcon_Magneton, - gMonIcon_Farfetchd, - gMonIcon_Doduo, - gMonIcon_Dodrio, - gMonIcon_Seel, - gMonIcon_Dewgong, - gMonIcon_Grimer, - gMonIcon_Muk, - gMonIcon_Shellder, - gMonIcon_Cloyster, - gMonIcon_Gastly, - gMonIcon_Haunter, - gMonIcon_Gengar, - gMonIcon_Onix, - gMonIcon_Drowzee, - gMonIcon_Hypno, - gMonIcon_Krabby, - gMonIcon_Kingler, - gMonIcon_Voltorb, - gMonIcon_Electrode, - gMonIcon_Exeggcute, - gMonIcon_Exeggutor, - gMonIcon_Cubone, - gMonIcon_Marowak, - gMonIcon_Hitmonlee, - gMonIcon_Hitmonchan, - gMonIcon_Lickitung, - gMonIcon_Koffing, - gMonIcon_Weezing, - gMonIcon_Rhyhorn, - gMonIcon_Rhydon, - gMonIcon_Chansey, - gMonIcon_Tangela, - gMonIcon_Kangaskhan, - gMonIcon_Horsea, - gMonIcon_Seadra, - gMonIcon_Goldeen, - gMonIcon_Seaking, - gMonIcon_Staryu, - gMonIcon_Starmie, - gMonIcon_Mrmime, - gMonIcon_Scyther, - gMonIcon_Jynx, - gMonIcon_Electabuzz, - gMonIcon_Magmar, - gMonIcon_Pinsir, - gMonIcon_Tauros, - gMonIcon_Magikarp, - gMonIcon_Gyarados, - gMonIcon_Lapras, - gMonIcon_Ditto, - gMonIcon_Eevee, - gMonIcon_Vaporeon, - gMonIcon_Jolteon, - gMonIcon_Flareon, - gMonIcon_Porygon, - gMonIcon_Omanyte, - gMonIcon_Omastar, - gMonIcon_Kabuto, - gMonIcon_Kabutops, - gMonIcon_Aerodactyl, - gMonIcon_Snorlax, - gMonIcon_Articuno, - gMonIcon_Zapdos, - gMonIcon_Moltres, - gMonIcon_Dratini, - gMonIcon_Dragonair, - gMonIcon_Dragonite, - gMonIcon_Mewtwo, - gMonIcon_Mew, - gMonIcon_Chikorita, - gMonIcon_Bayleef, - gMonIcon_Meganium, - gMonIcon_Cyndaquil, - gMonIcon_Quilava, - gMonIcon_Typhlosion, - gMonIcon_Totodile, - gMonIcon_Croconaw, - gMonIcon_Feraligatr, - gMonIcon_Sentret, - gMonIcon_Furret, - gMonIcon_Hoothoot, - gMonIcon_Noctowl, - gMonIcon_Ledyba, - gMonIcon_Ledian, - gMonIcon_Spinarak, - gMonIcon_Ariados, - gMonIcon_Crobat, - gMonIcon_Chinchou, - gMonIcon_Lanturn, - gMonIcon_Pichu, - gMonIcon_Cleffa, - gMonIcon_Igglybuff, - gMonIcon_Togepi, - gMonIcon_Togetic, - gMonIcon_Natu, - gMonIcon_Xatu, - gMonIcon_Mareep, - gMonIcon_Flaaffy, - gMonIcon_Ampharos, - gMonIcon_Bellossom, - gMonIcon_Marill, - gMonIcon_Azumarill, - gMonIcon_Sudowoodo, - gMonIcon_Politoed, - gMonIcon_Hoppip, - gMonIcon_Skiploom, - gMonIcon_Jumpluff, - gMonIcon_Aipom, - gMonIcon_Sunkern, - gMonIcon_Sunflora, - gMonIcon_Yanma, - gMonIcon_Wooper, - gMonIcon_Quagsire, - gMonIcon_Espeon, - gMonIcon_Umbreon, - gMonIcon_Murkrow, - gMonIcon_Slowking, - gMonIcon_Misdreavus, - gMonIcon_UnownA, - gMonIcon_Wobbuffet, - gMonIcon_Girafarig, - gMonIcon_Pineco, - gMonIcon_Forretress, - gMonIcon_Dunsparce, - gMonIcon_Gligar, - gMonIcon_Steelix, - gMonIcon_Snubbull, - gMonIcon_Granbull, - gMonIcon_Qwilfish, - gMonIcon_Scizor, - gMonIcon_Shuckle, - gMonIcon_Heracross, - gMonIcon_Sneasel, - gMonIcon_Teddiursa, - gMonIcon_Ursaring, - gMonIcon_Slugma, - gMonIcon_Magcargo, - gMonIcon_Swinub, - gMonIcon_Piloswine, - gMonIcon_Corsola, - gMonIcon_Remoraid, - gMonIcon_Octillery, - gMonIcon_Delibird, - gMonIcon_Mantine, - gMonIcon_Skarmory, - gMonIcon_Houndour, - gMonIcon_Houndoom, - gMonIcon_Kingdra, - gMonIcon_Phanpy, - gMonIcon_Donphan, - gMonIcon_Porygon2, - gMonIcon_Stantler, - gMonIcon_Smeargle, - gMonIcon_Tyrogue, - gMonIcon_Hitmontop, - gMonIcon_Smoochum, - gMonIcon_Elekid, - gMonIcon_Magby, - gMonIcon_Miltank, - gMonIcon_Blissey, - gMonIcon_Raikou, - gMonIcon_Entei, - gMonIcon_Suicune, - gMonIcon_Larvitar, - gMonIcon_Pupitar, - gMonIcon_Tyranitar, - gMonIcon_Lugia, - gMonIcon_HoOh, - gMonIcon_Celebi, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_Treecko, - gMonIcon_Grovyle, - gMonIcon_Sceptile, - gMonIcon_Torchic, - gMonIcon_Combusken, - gMonIcon_Blaziken, - gMonIcon_Mudkip, - gMonIcon_Marshtomp, - gMonIcon_Swampert, - gMonIcon_Poochyena, - gMonIcon_Mightyena, - gMonIcon_Zigzagoon, - gMonIcon_Linoone, - gMonIcon_Wurmple, - gMonIcon_Silcoon, - gMonIcon_Beautifly, - gMonIcon_Cascoon, - gMonIcon_Dustox, - gMonIcon_Lotad, - gMonIcon_Lombre, - gMonIcon_Ludicolo, - gMonIcon_Seedot, - gMonIcon_Nuzleaf, - gMonIcon_Shiftry, - gMonIcon_Nincada, - gMonIcon_Ninjask, - gMonIcon_Shedinja, - gMonIcon_Taillow, - gMonIcon_Swellow, - gMonIcon_Shroomish, - gMonIcon_Breloom, - gMonIcon_Spinda, - gMonIcon_Wingull, - gMonIcon_Pelipper, - gMonIcon_Surskit, - gMonIcon_Masquerain, - gMonIcon_Wailmer, - gMonIcon_Wailord, - gMonIcon_Skitty, - gMonIcon_Delcatty, - gMonIcon_Kecleon, - gMonIcon_Baltoy, - gMonIcon_Claydol, - gMonIcon_Nosepass, - gMonIcon_Torkoal, - gMonIcon_Sableye, - gMonIcon_Barboach, - gMonIcon_Whiscash, - gMonIcon_Luvdisc, - gMonIcon_Corphish, - gMonIcon_Crawdaunt, - gMonIcon_Feebas, - gMonIcon_Milotic, - gMonIcon_Carvanha, - gMonIcon_Sharpedo, - gMonIcon_Trapinch, - gMonIcon_Vibrava, - gMonIcon_Flygon, - gMonIcon_Makuhita, - gMonIcon_Hariyama, - gMonIcon_Electrike, - gMonIcon_Manectric, - gMonIcon_Numel, - gMonIcon_Camerupt, - gMonIcon_Spheal, - gMonIcon_Sealeo, - gMonIcon_Walrein, - gMonIcon_Cacnea, - gMonIcon_Cacturne, - gMonIcon_Snorunt, - gMonIcon_Glalie, - gMonIcon_Lunatone, - gMonIcon_Solrock, - gMonIcon_Azurill, - gMonIcon_Spoink, - gMonIcon_Grumpig, - gMonIcon_Plusle, - gMonIcon_Minun, - gMonIcon_Mawile, - gMonIcon_Meditite, - gMonIcon_Medicham, - gMonIcon_Swablu, - gMonIcon_Altaria, - gMonIcon_Wynaut, - gMonIcon_Duskull, - gMonIcon_Dusclops, - gMonIcon_Roselia, - gMonIcon_Slakoth, - gMonIcon_Vigoroth, - gMonIcon_Slaking, - gMonIcon_Gulpin, - gMonIcon_Swalot, - gMonIcon_Tropius, - gMonIcon_Whismur, - gMonIcon_Loudred, - gMonIcon_Exploud, - gMonIcon_Clamperl, - gMonIcon_Huntail, - gMonIcon_Gorebyss, - gMonIcon_Absol, - gMonIcon_Shuppet, - gMonIcon_Banette, - gMonIcon_Seviper, - gMonIcon_Zangoose, - gMonIcon_Relicanth, - gMonIcon_Aron, - gMonIcon_Lairon, - gMonIcon_Aggron, - gMonIcon_Castform, - gMonIcon_Volbeat, - gMonIcon_Illumise, - gMonIcon_Lileep, - gMonIcon_Cradily, - gMonIcon_Anorith, - gMonIcon_Armaldo, - gMonIcon_Ralts, - gMonIcon_Kirlia, - gMonIcon_Gardevoir, - gMonIcon_Bagon, - gMonIcon_Shelgon, - gMonIcon_Salamence, - gMonIcon_Beldum, - gMonIcon_Metang, - gMonIcon_Metagross, - gMonIcon_Regirock, - gMonIcon_Regice, - gMonIcon_Registeel, - gMonIcon_Kyogre, - gMonIcon_Groudon, - gMonIcon_Rayquaza, - gMonIcon_Latias, - gMonIcon_Latios, - gMonIcon_Jirachi, - gMonIcon_Deoxys, - gMonIcon_Chimecho, - gMonIcon_Egg, - gMonIcon_UnownB, - gMonIcon_UnownC, - gMonIcon_UnownD, - gMonIcon_UnownE, - gMonIcon_UnownF, - gMonIcon_UnownG, - gMonIcon_UnownH, - gMonIcon_UnownI, - gMonIcon_UnownJ, - gMonIcon_UnownK, - gMonIcon_UnownL, - gMonIcon_UnownM, - gMonIcon_UnownN, - gMonIcon_UnownO, - gMonIcon_UnownP, - gMonIcon_UnownQ, - gMonIcon_UnownR, - gMonIcon_UnownS, - gMonIcon_UnownT, - gMonIcon_UnownU, - gMonIcon_UnownV, - gMonIcon_UnownW, - gMonIcon_UnownX, - gMonIcon_UnownY, - gMonIcon_UnownZ, - gMonIcon_UnownExclamationMark, - gMonIcon_UnownQuestionMark, -}; - -const u8 gMonIconPaletteIndices[] = -{ - 0, // ?????????? - 1, // Bulbasaur - 1, // Ivysaur - 1, // Venusaur - 0, // Charmander - 0, // Charmeleon - 0, // Charizard - 0, // Squirtle - 2, // Wartortle - 2, // Blastoise - 1, // Caterpie - 1, // Metapod - 0, // Butterfree - 1, // Weedle - 2, // Kakuna - 2, // Beedrill - 0, // Pidgey - 0, // Pidgeotto - 0, // Pidgeot - 2, // Rattata - 1, // Raticate - 0, // Spearow - 0, // Fearow - 2, // Ekans - 2, // Arbok - 2, // Pikachu - 0, // Raichu - 2, // Sandshrew - 2, // Sandslash - 2, // Nidoran♀ - 2, // Nidorina - 2, // Nidoqueen - 2, // Nidoran♂ - 2, // Nidorino - 2, // Nidoking - 0, // Clefairy - 0, // Clefable - 2, // Vulpix - 1, // Ninetales - 0, // Jigglypuff - 0, // Wigglytuff - 2, // Zubat - 2, // Golbat - 1, // Oddish - 0, // Gloom - 0, // Vileplume - 0, // Paras - 0, // Parasect - 0, // Venonat - 2, // Venomoth - 2, // Diglett - 2, // Dugtrio - 1, // Meowth - 1, // Persian - 1, // Psyduck - 2, // Golduck - 1, // Mankey - 2, // Primeape - 0, // Growlithe - 0, // Arcanine - 0, // Poliwag - 0, // Poliwhirl - 0, // Poliwrath - 2, // Abra - 2, // Kadabra - 2, // Alakazam - 0, // Machop - 2, // Machoke - 0, // Machamp - 1, // Bellsprout - 1, // Weepinbell - 1, // Victreebel - 2, // Tentacool - 2, // Tentacruel - 1, // Geodude - 1, // Graveler - 1, // Golem - 0, // Ponyta - 0, // Rapidash - 0, // Slowpoke - 0, // Slowbro - 0, // Magnemite - 0, // Magneton - 1, // Farfetch'd - 2, // Doduo - 2, // Dodrio - 2, // Seel - 2, // Dewgong - 2, // Grimer - 2, // Muk - 2, // Shellder - 2, // Cloyster - 2, // Gastly - 2, // Haunter - 2, // Gengar - 2, // Onix - 2, // Drowzee - 1, // Hypno - 2, // Krabby - 2, // Kingler - 0, // Voltorb - 0, // Electrode - 0, // Exeggcute - 1, // Exeggutor - 1, // Cubone - 1, // Marowak - 2, // Hitmonlee - 2, // Hitmonchan - 1, // Lickitung - 2, // Koffing - 2, // Weezing - 1, // Rhyhorn - 1, // Rhydon - 0, // Chansey - 0, // Tangela - 1, // Kangaskhan - 0, // Horsea - 0, // Seadra - 0, // Goldeen - 0, // Seaking - 2, // Staryu - 2, // Starmie - 0, // Mr. mime - 1, // Scyther - 2, // Jynx - 1, // Electabuzz - 0, // Magmar - 2, // Pinsir - 2, // Tauros - 0, // Magikarp - 0, // Gyarados - 2, // Lapras - 2, // Ditto - 2, // Eevee - 0, // Vaporeon - 0, // Jolteon - 0, // Flareon - 0, // Porygon - 0, // Omanyte - 0, // Omastar - 2, // Kabuto - 2, // Kabutops - 0, // Aerodactyl - 1, // Snorlax - 0, // Articuno - 0, // Zapdos - 0, // Moltres - 0, // Dratini - 0, // Dragonair - 2, // Dragonite - 2, // Mewtwo - 0, // Mew - 1, // Chikorita - 1, // Bayleef - 1, // Meganium - 1, // Cyndaquil - 1, // Quilava - 1, // Typhlosion - 2, // Totodile - 2, // Croconaw - 2, // Feraligatr - 2, // Sentret - 2, // Furret - 2, // Hoothoot - 2, // Noctowl - 0, // Ledyba - 0, // Ledian - 1, // Spinarak - 0, // Ariados - 2, // Crobat - 2, // Chinchou - 0, // Lanturn - 0, // Pichu - 0, // Cleffa - 1, // Igglybuff - 2, // Togepi - 2, // Togetic - 0, // Natu - 0, // Xatu - 2, // Mareep - 0, // Flaaffy - 0, // Ampharos - 1, // Bellossom - 2, // Marill - 2, // Azumarill - 1, // Sudowoodo - 1, // Politoed - 1, // Hoppip - 1, // Skiploom - 2, // Jumpluff - 2, // Aipom - 1, // Sunkern - 1, // Sunflora - 1, // Yanma - 0, // Wooper - 0, // Quagsire - 2, // Espeon - 2, // Umbreon - 2, // Murkrow - 0, // Slowking - 0, // Misdreavus - 0, // Unown A - 0, // Wobbuffet - 1, // Girafarig - 0, // Pineco - 2, // Forretress - 2, // Dunsparce - 2, // Gligar - 0, // Steelix - 0, // Snubbull - 2, // Granbull - 0, // Qwilfish - 0, // Scizor - 1, // Shuckle - 2, // Heracross - 0, // Sneasel - 0, // Teddiursa - 2, // Ursaring - 0, // Slugma - 0, // Magcargo - 2, // Swinub - 2, // Piloswine - 0, // Corsola - 0, // Remoraid - 0, // Octillery - 0, // Delibird - 2, // Mantine - 0, // Skarmory - 0, // Houndour - 0, // Houndoom - 0, // Kingdra - 0, // Phanpy - 0, // Donphan - 0, // Porygon2 - 2, // Stantler - 1, // Smeargle - 2, // Tyrogue - 2, // Hitmontop - 1, // Smoochum - 1, // Elekid - 1, // Magby - 1, // Miltank - 1, // Blissey - 0, // Raikou - 2, // Entei - 0, // Suicune - 1, // Larvitar - 0, // Pupitar - 1, // Tyranitar - 0, // Lugia - 1, // Ho-Oh - 1, // Celebi - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 0, // ? - 1, // Treecko - 0, // Grovyle - 1, // Sceptile - 0, // Torchic - 0, // Combusken - 0, // Blaziken - 0, // Mudkip - 0, // Marshtomp - 0, // Swampert - 2, // Poochyena - 2, // Mightyena - 2, // Zigzagoon - 2, // Linoone - 0, // Wurmple - 2, // Silcoon - 0, // Beautifly - 2, // Cascoon - 1, // Dustox - 1, // Lotad - 1, // Lombre - 1, // Ludicolo - 1, // Seedot - 1, // Nuzleaf - 0, // Shiftry - 1, // Nincada - 1, // Ninjask - 1, // Shedinja - 2, // Taillow - 2, // Swellow - 1, // Shroomish - 1, // Breloom - 1, // Spinda - 0, // Wingull - 0, // Pelipper - 2, // Surskit - 0, // Masquerain - 2, // Wailmer - 0, // Wailord - 0, // Skitty - 2, // Delcatty - 1, // Kecleon - 1, // Baltoy - 0, // Claydol - 0, // Nosepass - 1, // Torkoal - 2, // Sableye - 0, // Barboach - 0, // Whiscash - 0, // Luvdisc - 0, // Corphish - 0, // Crawdaunt - 2, // Feebas - 0, // Milotic - 0, // Carvanha - 0, // Sharpedo - 1, // Trapinch - 1, // Vibrava - 1, // Flygon - 2, // Makuhita - 1, // Hariyama - 1, // Electrike - 0, // Manectric - 1, // Numel - 0, // Camerupt - 2, // Spheal - 2, // Sealeo - 0, // Walrein - 1, // Cacnea - 1, // Cacturne - 2, // Snorunt - 0, // Glalie - 1, // Lunatone - 0, // Solrock - 2, // Azurill - 0, // Spoink - 2, // Grumpig - 0, // Plusle - 0, // Minun - 2, // Mawile - 0, // Meditite - 0, // Medicham - 0, // Swablu - 0, // Altaria - 0, // Wynaut - 0, // Duskull - 0, // Dusclops - 0, // Roselia - 2, // Slakoth - 2, // Vigoroth - 1, // Slaking - 1, // Gulpin - 2, // Swalot - 1, // Tropius - 0, // Whismur - 2, // Loudred - 2, // Exploud - 0, // Clamperl - 0, // Huntail - 0, // Gorebyss - 0, // Absol - 0, // Shuppet - 0, // Banette - 2, // Seviper - 0, // Zangoose - 1, // Relicanth - 2, // Aron - 2, // Lairon - 2, // Aggron - 0, // Castform - 0, // Volbeat - 2, // Illumise - 2, // Lileep - 0, // Cradily - 0, // Anorith - 0, // Armaldo - 1, // Ralts - 1, // Kirlia - 1, // Gardevoir - 2, // Bagon - 2, // Shelgon - 0, // Salamence - 0, // Beldum - 0, // Metang - 0, // Metagross - 2, // Regirock - 2, // Regice - 2, // Registeel - 2, // Kyogre - 0, // Groudon - 1, // Rayquaza - 0, // Latias - 2, // Latios - 0, // Jirachi - 0, // Deoxys - 0, // Chimecho - 1, // Egg - 0, // Unown B - 0, // Unown C - 0, // Unown D - 0, // Unown E - 0, // Unown F - 0, // Unown G - 0, // Unown H - 0, // Unown I - 0, // Unown J - 0, // Unown K - 0, // Unown L - 0, // Unown M - 0, // Unown N - 0, // Unown O - 0, // Unown P - 0, // Unown Q - 0, // Unown R - 0, // Unown S - 0, // Unown T - 0, // Unown U - 0, // Unown V - 0, // Unown W - 0, // Unown X - 0, // Unown Y - 0, // Unown Z - 0, // Unown Exclamation Mark - 0, // Unown Question Mark -}; - -const struct SpritePalette gMonIconPaletteTable[] = -{ - { gMonIconPalettes[0], POKE_ICON_BASE_PAL_TAG + 0 }, - { gMonIconPalettes[1], POKE_ICON_BASE_PAL_TAG + 1 }, - { gMonIconPalettes[2], POKE_ICON_BASE_PAL_TAG + 2 }, - -// There are only 3 actual palettes. The following are unused -// and don't point to valid data. - { gMonIconPalettes[3], POKE_ICON_BASE_PAL_TAG + 3 }, - { gMonIconPalettes[4], POKE_ICON_BASE_PAL_TAG + 4 }, - { gMonIconPalettes[5], POKE_ICON_BASE_PAL_TAG + 5 }, -}; - -static const struct OamData sMonIconOamData = -{ - .size = 2, - .priority = 1, -}; - -// fastest to slowest - -static const union AnimCmd sAnim_0[] = -{ - ANIMCMD_FRAME(0, 6), - ANIMCMD_FRAME(1, 6), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sAnim_1[] = -{ - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(1, 8), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sAnim_2[] = -{ - ANIMCMD_FRAME(0, 14), - ANIMCMD_FRAME(1, 14), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sAnim_3[] = -{ - ANIMCMD_FRAME(0, 22), - ANIMCMD_FRAME(1, 22), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sAnim_4[] = -{ - ANIMCMD_FRAME(0, 29), - ANIMCMD_FRAME(0, 29), // frame 0 is repeated - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd *const sMonIconAnims[] = -{ - sAnim_0, - sAnim_1, - sAnim_2, - sAnim_3, - sAnim_4, -}; - -static const union AffineAnimCmd sAffineAnim_0[] = -{ - AFFINEANIMCMD_FRAME(0, 0, 0, 10), - AFFINEANIMCMD_END, -}; - -static const union AffineAnimCmd sAffineAnim_1[] = -{ - AFFINEANIMCMD_FRAME(-2, -2, 0, 122), - AFFINEANIMCMD_END, -}; - -static const union AffineAnimCmd *const sMonIconAffineAnims[] = -{ - sAffineAnim_0, - sAffineAnim_1, -}; - -const u16 sSpriteImageSizes[3][4] = -{ - // square - { - 0x20, // 1×1 - 0x80, // 2×2 - 0x200, // 4×4 - 0x800, // 8×8 - }, - - // horizontal rectangle - { - 0x40, // 2×1 - 0x80, // 4×1 - 0x100, // 4×2 - 0x400, // 8×4 - }, - - // vertical rectangle - { - 0x40, // 1×2 - 0x80, // 1×4 - 0x100, // 2×4 - 0x400, // 4×8 - }, -}; - -u16 GetUnownLetterByPersonality(u32); -const u8 *GetMonIconPtr(u16, u32 personality); -u8 UpdateMonIconFrame(struct Sprite *); -u8 CreateMonIconSprite(struct MonIconSpriteTemplate *, s16, s16, u8); -void sub_809D7E8(struct Sprite *); - -// duplicate of sub_809D3A4 -u8 unref_sub_809D26C(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) -{ - u8 spriteId; - struct MonIconSpriteTemplate iconTemplate; - struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match - - iconTemplatePtr->oam = &sMonIconOamData; - iconTemplatePtr->image = gMonIconTable[species]; - iconTemplatePtr->anims = sMonIconAnims; - iconTemplatePtr->affineAnims = sMonIconAffineAnims; - iconTemplatePtr->callback = callback; - iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species]; - - spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority); - - UpdateMonIconFrame(&gSprites[spriteId]); - - return spriteId; -} - -u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality) -{ - u8 spriteId; - struct MonIconSpriteTemplate iconTemplate = - { - .oam = &sMonIconOamData, - .image = GetMonIconPtr(species, personality), - .anims = sMonIconAnims, - .affineAnims = sMonIconAffineAnims, - .callback = callback, - .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species], - }; - - if (species > SPECIES_EGG) - iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG; - - spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority); - - UpdateMonIconFrame(&gSprites[spriteId]); - - return spriteId; -} - -u8 sub_809D3A4(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) -{ - u8 spriteId; - struct MonIconSpriteTemplate iconTemplate; - struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match - - iconTemplatePtr->oam = &sMonIconOamData; - iconTemplatePtr->image = gMonIconTable[species]; - iconTemplatePtr->anims = sMonIconAnims; - iconTemplatePtr->affineAnims = sMonIconAffineAnims; - iconTemplatePtr->callback = callback; - iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species]; - - spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority); - - UpdateMonIconFrame(&gSprites[spriteId]); - - return spriteId; -} - -u16 mon_icon_convert_unown_species_id(u16 species, u32 personality) -{ - u16 result; - - if (species == SPECIES_UNOWN) - { - u16 letter = GetUnownLetterByPersonality(personality); - if (letter == 0) - letter = SPECIES_UNOWN; - else - letter += (SPECIES_UNOWN_B - 1); - result = letter; - } - else - { - if (species > SPECIES_EGG) - result = 260; - else - result = species; - } - - return result; -} - -u16 GetUnownLetterByPersonality(u32 personality) -{ - return (((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 0x1C; -} - -u16 sub_809D4A8(u16 species) -{ - u16 value; - - if (MailSpeciesToSpecies(species, &value) == SPECIES_UNOWN) - { - if (value == 0) - value += SPECIES_UNOWN; - else - value += (SPECIES_UNOWN_B - 1); - return value; - } - else - { - return mon_icon_convert_unown_species_id(species, 0); - } -} - -const u8 *GetMonIconPtr(u16 species, u32 personality) -{ - u16 convertedSpecies = mon_icon_convert_unown_species_id(species, personality); - return gMonIconTable[convertedSpecies]; -} - -void sub_809D510(struct Sprite *sprite) -{ - sub_809D7E8(sprite); -} - -void sub_809D51C(void) -{ - u8 i; - for (i = 0; i < 6; i++) - LoadSpritePalette(&gMonIconPaletteTable[i]); -} - -// unused -void SafeLoadMonIconPalette(u16 species) -{ - u8 palIndex; - if (species > SPECIES_EGG) - species = 260; - palIndex = gMonIconPaletteIndices[species]; - if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF) - LoadSpritePalette(&gMonIconPaletteTable[palIndex]); -} - -void sub_809D580(u16 species) -{ - u8 palIndex = gMonIconPaletteIndices[species]; - if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF) - LoadSpritePalette(&gMonIconPaletteTable[palIndex]); -} - -// unused -void FreeMonIconPalettes(void) -{ - u8 i; - for (i = 0; i < 6; i++) - FreeSpritePaletteByTag(gMonIconPaletteTable[i].tag); -} - -// unused -void SafeFreeMonIconPalette(u16 species) -{ - u8 palIndex; - if (species > SPECIES_EGG) - species = 260; - palIndex = gMonIconPaletteIndices[species]; - FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag); -} - -void sub_809D608(u16 species) -{ - u8 palIndex; - palIndex = gMonIconPaletteIndices[species]; - FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag); -} - -void sub_809D62C(struct Sprite *sprite) -{ - UpdateMonIconFrame(sprite); -} - -// TODO: try to find a way to avoid using goto and asm statement -u8 UpdateMonIconFrame(struct Sprite *sprite) -{ - u8 result = 0; - - if (sprite->animDelayCounter == 0) - { - s16 frame = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; - - if (frame != -2) - { - if (frame != -1) - goto copy; - goto end; - } - - sprite->animCmdIndex = 0; - goto end; - - copy: - RequestSpriteCopy( - (u8 *)sprite->images + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame, - (u8 *)OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP, - sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]); - { - register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; - sprite->animDelayCounter = duration; - } - sprite->animCmdIndex++; - result = sprite->animCmdIndex; - } - else - { - sprite->animDelayCounter--; - } - -end: - return result; -} - -u8 CreateMonIconSprite(struct MonIconSpriteTemplate *iconTemplate, s16 x, s16 y, u8 subpriority) -{ - u8 spriteId; - - struct SpriteFrameImage image = { NULL, sSpriteImageSizes[iconTemplate->oam->shape][iconTemplate->oam->size] }; - - struct SpriteTemplate spriteTemplate = - { - .tileTag = 0xFFFF, - .paletteTag = iconTemplate->paletteTag, - .oam = iconTemplate->oam, - .anims = iconTemplate->anims, - .images = &image, - .affineAnims = iconTemplate->affineAnims, - .callback = iconTemplate->callback, - }; - - spriteId = CreateSprite(&spriteTemplate, x, y, subpriority); - gSprites[spriteId].animPaused = TRUE; - gSprites[spriteId].animBeginning = FALSE; - gSprites[spriteId].images = (const struct SpriteFrameImage *)iconTemplate->image; - return spriteId; -} - -void sub_809D7E8(struct Sprite *sprite) -{ - struct SpriteFrameImage image = { NULL, sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] }; - sprite->images = ℑ - DestroySprite(sprite); -} - -void sub_809D824(struct Sprite *sprite, u8 animNum) -{ - sprite->animNum = animNum; - sprite->animDelayCounter = 0; - sprite->animCmdIndex = 0; -} diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c deleted file mode 100644 index f2222bd3b..000000000 --- a/src/pokemon_size_record.c +++ /dev/null @@ -1,217 +0,0 @@ -#include "global.h" -#include "pokemon_size_record.h" -#include "data2.h" -#include "event_data.h" -#include "pokedex.h" -#include "species.h" -#include "string_util.h" -#include "strings2.h" -#include "text.h" - -struct UnknownStruct -{ - u16 unk0; - u8 unk2; - u16 unk4; -}; - -extern u16 gScriptResult; - -static const struct UnknownStruct sBigMonSizeTable[] = -{ - { 290, 1, 0 }, - { 300, 1, 10 }, - { 400, 2, 110 }, - { 500, 4, 310 }, - { 600, 20, 710 }, - { 700, 50, 2710 }, - { 800, 100, 7710 }, - { 900, 150, 17710 }, - { 1000, 150, 32710 }, - { 1100, 100, -17826 }, - { 1200, 50, -7826 }, - { 1300, 20, -2826 }, - { 1400, 5, -826 }, - { 1500, 2, -326 }, - { 1600, 1, -126 }, - { 1700, 1, -26 }, -}; - -#define CM_PER_INCH 2.54 - -static u32 GetMonSizeHash(struct Pokemon *pkmn) -{ - // UB: Too few arguments for function 'GetMonData' - u16 personality = GetMonData(pkmn, MON_DATA_PERSONALITY); - u16 hpIV = GetMonData(pkmn, MON_DATA_HP_IV) & 0xF; - u16 attackIV = GetMonData(pkmn, MON_DATA_ATK_IV) & 0xF; - u16 defenseIV = GetMonData(pkmn, MON_DATA_DEF_IV) & 0xF; - u16 speedIV = GetMonData(pkmn, MON_DATA_SPD_IV) & 0xF; - u16 spAtkIV = GetMonData(pkmn, MON_DATA_SPATK_IV) & 0xF; - u16 spDefIV = GetMonData(pkmn, MON_DATA_SPDEF_IV) & 0xF; - u32 hibyte = ((attackIV ^ defenseIV) * hpIV) ^ (personality & 0xFF); - u32 lobyte = ((spAtkIV ^ spDefIV) * speedIV) ^ (personality >> 8); - - return (hibyte << 8) + lobyte; -} - -static u8 TranslateBigMonSizeTableIndex(u16 a) -{ - u8 i; - - for (i = 1; i < 15; i++) - { - if (a < sBigMonSizeTable[i].unk4) - return i - 1; - } - return i; -} - -static u32 GetMonSize(u16 species, u16 b) -{ - u64 unk2; - u64 unk4; - u64 unk0; - u32 height; - u32 var; - - height = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(species), 0); - var = TranslateBigMonSizeTableIndex(b); - unk0 = sBigMonSizeTable[var].unk0; - unk2 = sBigMonSizeTable[var].unk2; - unk4 = sBigMonSizeTable[var].unk4; - unk0 += (b - unk4) / unk2; - return height * unk0 / 10; -} - -static void FormatMonSizeRecord(u8 *string, u32 size) -{ -#if ENGLISH - u8 decimalPoint[] = _("."); -#elif GERMAN - u8 decimalPoint[] = _(","); -#endif - -#ifdef UNITS_IMPERIAL - //Convert size from centimeters to inches - size = (double)(size * 10) / (CM_PER_INCH * 10); -#endif - - string = ConvertIntToDecimalStringN(string, size / 10, 0, 8); - string = StringAppend(string, decimalPoint); - ConvertIntToDecimalStringN(string, size % 10, 0, 1); -} - -static u8 CompareMonSize(u16 species, u16 *sizeRecord) -{ - if (gScriptResult == 0xFF) - { - return 0; - } - else - { - struct Pokemon *pkmn = &gPlayerParty[gScriptResult]; - - // UB: Too few arguments for function 'GetMonData' - if (GetMonData(pkmn, MON_DATA_IS_EGG) == TRUE || GetMonData(pkmn, MON_DATA_SPECIES) != species) - { - return 1; - } - else - { - u32 oldSize; - u32 newSize; - u16 sizeParams; - - *(&sizeParams) = GetMonSizeHash(pkmn); - newSize = GetMonSize(species, sizeParams); - oldSize = GetMonSize(species, *sizeRecord); - FormatMonSizeRecord(gStringVar2, newSize); - if (newSize <= oldSize) - { - return 2; - } - else - { - *sizeRecord = sizeParams; - return 3; - } - } - } -} - -//Stores species name in gStringVar1, trainer's name in gStringVar2, and size in gStringVar3 -static void GetMonSizeRecordInfo(u16 species, u16 *sizeRecord) -{ - u32 size = GetMonSize(species, *sizeRecord); - - FormatMonSizeRecord(gStringVar3, size); - StringCopy(gStringVar1, gSpeciesNames[species]); - if (*sizeRecord == 0x8100) - StringCopy(gStringVar2, gOtherText_Marco); - else - StringCopy(gStringVar2, gSaveBlock2.playerName); -} - -void InitShroomishSizeRecord(void) -{ - VarSet(VAR_SHROOMISH_SIZE_RECORD, 0x8100); -} - -void GetShroomishSizeRecordInfo(void) -{ - u16 *sizeRecord = GetVarPointer(VAR_SHROOMISH_SIZE_RECORD); - - GetMonSizeRecordInfo(SPECIES_SHROOMISH, sizeRecord); -} - -void CompareShroomishSize(void) -{ - u16 *sizeRecord = GetVarPointer(VAR_SHROOMISH_SIZE_RECORD); - - gScriptResult = CompareMonSize(SPECIES_SHROOMISH, sizeRecord); -} - -void InitBarboachSizeRecord(void) -{ - VarSet(VAR_BARBOACH_SIZE_RECORD, 0x8100); -} - -void GetBarboachSizeRecordInfo(void) -{ - u16 *sizeRecord = GetVarPointer(VAR_BARBOACH_SIZE_RECORD); - - GetMonSizeRecordInfo(SPECIES_BARBOACH, sizeRecord); -} - -void CompareBarboachSize(void) -{ - u16 *sizeRecord = GetVarPointer(VAR_BARBOACH_SIZE_RECORD); - - gScriptResult = CompareMonSize(SPECIES_BARBOACH, sizeRecord); -} - -void GiveGiftRibbonToParty(u8 index, u8 ribbonId) -{ - s32 i; - bool32 gotRibbon = FALSE; - u8 data = 1; - u8 arr[] = { 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E }; - - if (index < 11 && ribbonId < 65) - { - gSaveBlock1.giftRibbons[index] = ribbonId; - for (i = 0; i < 6; i++) - { - struct Pokemon *pkmn = &gPlayerParty[i]; - - if (GetMonData(pkmn, MON_DATA_SPECIES) != 0 && GetMonData(pkmn, MON_DATA_SANITY_BIT3) == 0) - { - SetMonData(pkmn, arr[index], &data); - gotRibbon = TRUE; - } - } - if (gotRibbon) - FlagSet(SYS_RIBBON_GET); - } -} diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c deleted file mode 100644 index 5e97523e2..000000000 --- a/src/pokemon_storage_system.c +++ /dev/null @@ -1,99 +0,0 @@ -#include "global.h" -#include "pokemon_storage_system.h" -#include "menu.h" -#include "string_util.h" - -struct StorageAction { - u8 *text; - u8 format; -}; - -extern const struct StorageAction gUnknown_083B6DF4[]; - -extern const u8 unk_2000000[]; - -EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; - -#define gUnk2002694 (u8 *)(&unk_2000000[0x2694]) -#define gUnk20026A6 (u8 *)(&unk_2000000[0x26a6]) -#define gUnk20011fa (u8 *)(&unk_2000000[0x11fa]) -#define gUnk20026e4 (u8 *)(&unk_2000000[0x26e4]) - -void sub_8098898(u8 index) { - u8 *ptr; - - MenuDrawTextWindow(10, 16, 29, 19); - - switch (gUnknown_083B6DF4[index].format) - { - - case 2: - ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); - ptr = StringCopy(ptr, gUnk20011fa); - break; - - case 5: - ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); - ptr = StringCopy(ptr, gUnk20026e4); - break; - - case 1: - // {var} + " is selected." - ptr = StringCopy(gUnk2002694, gUnk20011fa); - ptr = StringCopy(ptr, gUnknown_083B6DF4[index].text); - break; - - case 4: - // {var} + " was released." - ptr = StringCopy(gUnk2002694, gUnk20026e4); -#if ENGLISH - ptr = StringCopy(ptr, gUnknown_083B6DF4[index].text); -#elif GERMAN - ptr = de_sub_8073174(gUnk2002694, gUnknown_083B6DF4[index].text); -#endif - break; - - case 3: - { - u8 *stringLength; - u8 *text; - - text = gUnknown_083B6DF4[index].text; - stringLength = &text[StringLength(text)] + 1; - - ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); - ptr = StringCopy(ptr, gUnk20011fa); - ptr = StringCopy(ptr, stringLength); - } - break; - - case 6: - // "Bye-bye, ".substr(0, -1) + {var} + "Bye-bye, !".substr(-1, 1) - { - u8 *stringLength; - u8 *text; - - text = gUnknown_083B6DF4[index].text; - stringLength = &text[StringLength(text)] - 1; - - ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); - ptr = StringCopy(ptr - 1, gUnk20026e4); - ptr = StringCopy(ptr, stringLength); - } - break; - - case 0: - default: - ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); - break; - } - - while (ptr < gUnk20026A6) - { - ptr[0] = CHAR_SPACE; - ptr++; - } - - ptr[0] = EOS; - MenuPrint(gUnk2002694, 11, 17); -} diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c deleted file mode 100644 index 00a0bea29..000000000 --- a/src/pokemon_summary_screen.c +++ /dev/null @@ -1,180 +0,0 @@ -#include "global.h" -#include "pokemon_summary_screen.h" -#include "link.h" -#include "menu.h" -#include "pokemon.h" -#include "region_map.h" -#include "string_util.h" -#include "strings2.h" -#include "tv.h" - -extern struct Pokemon *unk_2018000; - -bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon) -{ - u32 trainerId; - - if (unk_2018000 == gEnemyParty) - { - u8 enemyId = GetMultiplayerId() ^ 1; - trainerId = gLinkPlayers[enemyId].trainerId & 0xFFFF; - StringCopy(gStringVar1, gLinkPlayers[enemyId].name); - StripExtCtrlCodes(gStringVar1); - } - else - { - trainerId = GetPlayerTrainerId() & 0xFFFF; - StringCopy(gStringVar1, gSaveBlock2.playerName); - } - - if (trainerId != (GetMonData(mon, MON_DATA_OT_ID) & 0xFFFF)) - return FALSE; - - GetMonData(mon, MON_DATA_OT_NAME, gStringVar2); - - if (!StringCompareWithoutExtCtrlCodes(gStringVar1, gStringVar2)) - return TRUE; - - return FALSE; -} - -void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *mon, u8 left, u8 top) -{ - u8 locationMet; - u8 gameMet = GetMonData(mon, MON_DATA_MET_GAME); - - if (!(gameMet == VERSION_RUBY || gameMet == VERSION_SAPPHIRE || gameMet == VERSION_EMERALD)) - { - MenuPrint(gOtherText_EggObtainedInTrade, left, top); - return; - } - - locationMet = GetMonData(mon, MON_DATA_MET_LOCATION); - - if (locationMet == 255) - { - MenuPrint(gOtherText_EggNicePlace, left, top); - return; - } - - if (!PokemonSummaryScreen_CheckOT(mon)) - { - MenuPrint(gOtherText_EggObtainedInTrade, left, top); - return; - } - - asm(""); // needed to match for some reason - - if (locationMet == 253) - { - MenuPrint(gOtherText_EggHotSprings, left, top); - return; - } - - MenuPrint(gOtherText_EggDayCare, left, top); -} - -void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8 top) -{ - u8 locationMet; - u8 gameMet; - u8 *ptr = gStringVar4; - u8 nature = GetNature(pokemon); - -#if ENGLISH - ptr = sub_80A1E9C(ptr, gNatureNames[nature], 14); - - if (nature != NATURE_BOLD && nature != NATURE_GENTLE) - { - ptr = StringCopy(ptr, gOtherText_Terminator4); - } - - ptr = StringCopy(ptr, gOtherText_Nature); -#elif GERMAN - ptr = StringCopy(gStringVar4, gOtherText_Nature); - ptr = sub_80A1E9C(ptr, gNatureNames[nature], 14); - ptr = StringCopy(ptr, gOtherText_Terminator4); -#endif - - if (PokemonSummaryScreen_CheckOT(pokemon) == TRUE) - { - locationMet = GetMonData(pokemon, MON_DATA_MET_LOCATION); - - if (GetMonData(pokemon, MON_DATA_MET_LEVEL) == 0) - { - ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, 5); - *ptr = CHAR_NEWLINE; - ptr++; - - CopyLocationName(gStringVar1, locationMet); - ptr = sub_80A1E9C(ptr, gStringVar1, 14); - StringCopy(ptr, gOtherText_Egg2); - } - else if (locationMet >= 88) - { - *ptr = CHAR_NEWLINE; - ptr++; - - StringCopy(ptr, gOtherText_ObtainedInTrade); - } - else - { - u8 levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL); - - ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet); - *ptr = CHAR_NEWLINE; - ptr++; - - CopyLocationName(gStringVar1, locationMet); - ptr = sub_80A1E9C(ptr, gStringVar1, 14); - StringCopy(ptr, gOtherText_Met); - } - } - else - { - gameMet = GetMonData(pokemon, MON_DATA_MET_GAME); - - if (!(gameMet == VERSION_RUBY || gameMet == VERSION_SAPPHIRE || gameMet == VERSION_EMERALD)) - { - *ptr = CHAR_NEWLINE; - ptr++; - - StringCopy(ptr, gOtherText_ObtainedInTrade); - } - else - { - locationMet = GetMonData(pokemon, MON_DATA_MET_LOCATION); - if (locationMet == 0xFF) - { - u8 levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL); - - ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet); - *ptr = CHAR_NEWLINE; - ptr++; - - StringCopy(ptr, gOtherText_FatefulEncounter); - } - else if (locationMet >= 88) - { - *ptr = CHAR_NEWLINE; - ptr++; - - StringCopy(ptr, gOtherText_ObtainedInTrade); - } - else - { - u8 levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL); - - ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet); - *ptr = CHAR_NEWLINE; - ptr++; - - CopyLocationName(gStringVar1, locationMet); - ptr = sub_80A1E9C(ptr, gStringVar1, 14); - StringCopy(ptr, gOtherText_Met2); - } - } - } - - MenuPrint(gStringVar4, left++, top++); -} diff --git a/src/pokenav.c b/src/pokenav.c deleted file mode 100644 index 84ed7b14b..000000000 --- a/src/pokenav.c +++ /dev/null @@ -1,40 +0,0 @@ -#include "global.h" -#include "main.h" -#include "pokenav.h" -#include "battle.h" -#include "data2.h" -#include "de_rom_8040FE0.h" -#include "string_util.h" - -void sub_80F700C(u8 *arg0, u16 arg1) { - struct Trainer *trainer; - u8 *ptr; - -#if ENGLISH - trainer = (struct Trainer *) &gTrainers[gUnknown_083DFEC4->unkCEE8[arg1].unk0]; -#elif GERMAN - const u16 trainerIndex = gUnknown_083DFEC4->unkCEE8[arg1].unk0; - trainer = (struct Trainer *) &gTrainers[trainerIndex]; -#endif - - ptr = arg0; - if (arg1 < gUnknown_083DFEC4->unkD158) - { -#if ENGLISH - ptr = StringCopy(ptr, gTrainerClassNames[trainer->trainerClass]); -#elif GERMAN - ptr = StringCopy(ptr, de_sub_8041024(0, trainerIndex)); -#endif - - ptr[0] = 0xFC; - ptr[1] = 0x13; - ptr[2] = 0x4B; - ptr += 3; - ptr = StringCopy(ptr, trainer->trainerName); - } - - ptr[0] = 0xFC; - ptr[1] = 0x13; - ptr[2] = 0x80; - ptr[3] = 0xFF; -} diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c deleted file mode 100644 index 8d85705c8..000000000 --- a/src/post_battle_event_funcs.c +++ /dev/null @@ -1,69 +0,0 @@ -#include "global.h" -#include "event_data.h" -#include "hall_of_fame.h" -#include "load_save.h" -#include "main.h" -#include "pokemon.h" -#include "rom4.h" -#include "script_pokemon_80C4.h" - -extern u8 gUnknown_02039324; - -int GameClear(void) -{ - int i; - bool32 ribbonGet; - - HealPlayerParty(); - - if (FlagGet(SYS_GAME_CLEAR) == TRUE) - { - gUnknown_02039324 = 1; - } - else - { - gUnknown_02039324 = 0; - FlagSet(SYS_GAME_CLEAR); - } - - if (!GetGameStat(1)) - SetGameStat(1, (gSaveBlock2.playTimeHours << 16) | (gSaveBlock2.playTimeMinutes << 8) | gSaveBlock2.playTimeSeconds); - - SetSecretBase2Field_9(); - - if (gSaveBlock2.playerGender == MALE) - sub_80537CC(1); - else - sub_80537CC(2); - - ribbonGet = FALSE; - - for (i = 0; i < 6; i++) - { - u8 val; - u8 *ptr = &val; - if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_BIT2) - && !GetMonData(&gPlayerParty[i], MON_DATA_SANITY_BIT3) - && !GetMonData(&gPlayerParty[i], MON_DATA_CHAMPION_RIBBON)) - { - *ptr = 1; - SetMonData(&gPlayerParty[i], MON_DATA_CHAMPION_RIBBON, ptr); - ribbonGet = TRUE; - } - } - - if (ribbonGet == TRUE) - { - IncrementGameStat(42); - FlagSet(SYS_RIBBON_GET); - } - - SetMainCallback2(sub_8141F90); - return 0; -} - -int sp0C8_whiteout_maybe(void) -{ - SetMainCallback2(CB2_WhiteOut); - return 0; -} diff --git a/src/record_mixing.c b/src/record_mixing.c deleted file mode 100644 index d1083910c..000000000 --- a/src/record_mixing.c +++ /dev/null @@ -1,1085 +0,0 @@ -#include "global.h" -#include "record_mixing.h" -#include "battle_tower.h" -#include "cable_club.h" -#include "daycare.h" -#include "dewford_trend.h" -#include "event_data.h" -#include "fldeff_80C5CD4.h" -#include "item.h" -#include "items.h" -#include "load_save.h" -#include "link.h" -#include "mauville_old_man.h" -#include "menu.h" -#include "mystery_event_script.h" -#include "rng.h" -#include "rom4.h" -#include "save.h" -#include "script.h" -#include "secret_base.h" -#include "songs.h" -#include "sound.h" -#include "string_util.h" -#include "strings2.h" -#include "task.h" -#include "tv.h" - -extern u8 ewram[]; -#define unk_2018000 (*(struct PlayerRecords *)(ewram + 0x18000)) -#define unk_2008000 (*(struct PlayerRecords *)(ewram + 0x08000)) - -extern struct RecordMixing_UnknownStruct gUnknown_02038738; -extern u16 gSpecialVar_0x8005; - -u32 gUnknown_03005D2C; - -static u8 gUnknown_03000718; -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 *recordMixingEasyChatPairs = &gSaveBlock1.easyChatPairs; -struct RecordMixing_UnknownStruct *gUnknown_083D0280 = &gUnknown_02038738; -void *gUnknown_083D0284 = &gSaveBlock2.filler_A8; - -#define BUFFER_CHUNK_SIZE 200 - -void sub_80B929C(void) -{ - sub_8083A84(Task_RecordMixing_Main); -} - -struct PlayerRecords -{ - struct SecretBaseRecord secretBases[20]; - TVShow tvShows[25]; - u8 filler1004[0x40]; - u8 filler1044[0x40]; - struct EasyChatPair easyChatPairs[5]; - struct RecordMixing_UnknownStruct filler10AC; - u8 filler1124[0xA4]; - u16 filler11C8[0x34]; -}; - -void RecordMixing_PrepareExchangePacket(void) -{ - sub_80BC300(); - sub_80C045C(); - - memcpy(unk_2018000.secretBases, recordMixingSecretBases, sizeof(unk_2018000.secretBases)); - memcpy(unk_2018000.tvShows, recordMixingTvShows, sizeof(unk_2018000.tvShows)); - 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)); - memcpy(unk_2018000.filler1124, gUnknown_083D0284, sizeof(unk_2018000.filler1124)); - - if (GetMultiplayerId() == 0) - unk_2018000.filler11C8[0] = GetRecordMixingGift(); -} - -void RecordMixing_ReceiveExchangePacket(u32 a) -{ - sub_80BD674(unk_2008000.secretBases, sizeof(struct PlayerRecords), a); - sub_80BFD44((u8 *)unk_2008000.tvShows, sizeof(struct PlayerRecords), a); - sub_80C0514(unk_2008000.filler1004, sizeof(struct PlayerRecords), a); - sub_80B9B1C(unk_2008000.filler1044, sizeof(struct PlayerRecords), a); - sub_80FA4E4(unk_2008000.easyChatPairs, sizeof(struct PlayerRecords), a); - sub_80B9C6C((u8 *)&unk_2008000.filler10AC, sizeof(struct PlayerRecords), a, unk_2008000.tvShows); - sub_80B9B70(unk_2008000.filler1124, sizeof(struct PlayerRecords), a); - sub_80B9F3C(unk_2008000.filler11C8, a); -} - -#define tCounter data[0] - -void Task_RecordMixing_SoundEffect(u8 taskId) -{ - gTasks[taskId].tCounter++; - if (gTasks[taskId].tCounter == 50) - { - PlaySE(SE_W213); - gTasks[taskId].tCounter = 0; - } -} - -#undef tCounter - - -#define tState data[0] -#define tSndEffTaskId data[15] - -void Task_RecordMixing_Main(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - switch (tState) - { - case 0: // init - sub_8007270(gSpecialVar_0x8005); - VarSet(VAR_0x4000, 1); - gUnknown_03000718 = 0; - RecordMixing_PrepareExchangePacket(); - CreateRecordMixingSprite(); - tState = 1; - data[10] = CreateTask(sub_80B95F0, 0x50); - tSndEffTaskId = CreateTask(Task_RecordMixing_SoundEffect, 0x51); - break; - case 1: // wait for sub_80B95F0 - if (!gTasks[data[10]].isActive) - { - tState = 2; - FlagSet(SYS_MIX_RECORD); - DestroyRecordMixingSprite(); - DestroyTask(tSndEffTaskId); - } - break; - case 2: - data[10] = CreateTask(sub_80BA00C, 10); - tState = 3; - PlaySE(SE_W226); - break; - case 3: // wait for sub_80BA00C - if (!gTasks[data[10]].isActive) - { - tState = 4; - data[10] = sub_8083664(); - sub_80720B0(); - MenuPrint(gOtherText_MixingComplete, 2, 15); - data[8] = 0; - } - break; - case 4: // wait 60 frames - data[8]++; - if (data[8] > 60) - tState = 5; - break; - case 5: - if (!gTasks[data[10]].isActive) - { - sub_8055588(); - MenuZeroFillScreen(); - DestroyTask(taskId); - EnableBothScriptContexts(); - } - break; - } -} - -void sub_80B95F0(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - switch (task->tState) - { - case 0: - sub_80B9A78(); - MenuDisplayMessageBox(); - MenuPrint(gOtherText_MixingRecordsWithFriend, 2, 15); - task->data[8] = 0x708; - task->tState = 400; - ClearLinkCallback_2(); - break; - case 100: // wait 20 frames - task->data[12]++; - if (task->data[12] > 20) - { - task->data[12] = 0; - task->tState = 101; - } - break; - case 101: - { - u8 players = GetLinkPlayerCount_2(); - - if (IsLinkMaster() == 1) - { - if (players == sub_800820C()) - { - PlaySE(SE_PIN); - task->tState = 201; - task->data[12] = 0; - } - } - else - { - PlaySE(SE_BOO); - task->tState = 301; - } - } - break; - case 201: - if (sub_800820C() == GetLinkPlayerCount_2()) - { - if (++task->data[12] > GetLinkPlayerCount_2() * 30) - { - sub_8007F4C(); - task->tState = 1; - } - } - break; - case 301: - if (sub_800820C() == GetLinkPlayerCount_2()) - task->tState = 1; - break; - case 400: // wait 20 frames - task->data[12]++; - if (task->data[12] > 20) - { - task->tState = 1; - task->data[12] = 0; - } - break; - case 1: // wait for handshake - if (gReceivedRemoteLinkPlayers) - { - ConvertIntToDecimalStringN(gStringVar1, GetMultiplayerId_(), 2, 2); - task->tState = 5; - } - break; - case 2: - { - u8 subTaskId; - - task->data[6] = GetLinkPlayerCount_2(); - task->tState = 0; - task->data[5] = GetMultiplayerId_(); - task->func = Task_RecordMixing_SendPacket; - StorePtrInTaskData(&unk_2018000, &task->data[2]); - subTaskId = CreateTask(Task_RecordMixing_CopyReceiveBuffer, 0x50); - task->data[10] = subTaskId; - gTasks[subTaskId].data[0] = taskId; - StorePtrInTaskData((u8 *)&unk_2008000, &gTasks[subTaskId].data[5]); - } - break; - case 5: // wait 60 frames - task->data[10]++; - if (task->data[10] > 60) - { - task->data[10] = 0; - task->tState = 2; - } - break; - } -} - -void Task_RecordMixing_SendPacket(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - // does this send the data 24 times? - - switch (task->tState) - { - case 0: //Copy record data to send buffer - { - void *recordData = (u8 *)LoadPtrFromTaskData(&task->data[2]) + BUFFER_CHUNK_SIZE * task->data[4]; - - memcpy(gBlockSendBuffer, recordData, BUFFER_CHUNK_SIZE); - task->tState++; - } - break; - case 1: - if (GetMultiplayerId() == 0) - sub_8007E9C(1); - task->tState++; - break; - case 2: - break; - case 3: - task->data[4]++; - if ((u16)task->data[4] == 24) - task->tState++; - else - task->tState = 0; - break; - case 4: - if (!gTasks[task->data[10]].isActive) - task->func = Task_RecordMixing_SendPacket_SwitchToReceive; - } -} - -void Task_RecordMixing_CopyReceiveBuffer(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - s32 recvStatus = GetBlockReceivedStatus(); - u8 handledPlayers = 0; - - if (recvStatus == sub_8008198()) - { - u8 player; - - for (player = 0; player < GetLinkPlayerCount(); player++) - { - void *src; - u8 *dst; - - if ((recvStatus >> player) & 1) - { - dst = LoadPtrFromTaskData(&task->data[5]) + task->data[player + 1] * BUFFER_CHUNK_SIZE + player * sizeof(struct PlayerRecords); - src = GetPlayerRecvBuffer(player); - if ((task->data[player + 1] + 1) * BUFFER_CHUNK_SIZE > sizeof(struct PlayerRecords)) - memcpy(dst, src, sizeof(struct PlayerRecords) - task->data[player + 1] * BUFFER_CHUNK_SIZE); - else - memcpy(dst, src, BUFFER_CHUNK_SIZE); - ResetBlockReceivedFlag(player); - task->data[player + 1]++; - if ((u16)task->data[player + 1] == 0x18) - handledPlayers++; - } - } - gTasks[task->data[0]].data[0]++; - } - if (handledPlayers == GetLinkPlayerCount()) - DestroyTask(taskId); -} - -void sub_80B99B4(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - if (!gTasks[task->data[10]].isActive) - DestroyTask(taskId); -} - -void Task_RecordMixing_ReceivePacket(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - task->func = sub_80B99B4; - if (gUnknown_03000718 == 1) - RecordMixing_ReceiveExchangePacket(task->data[5]); -} - -void Task_RecordMixing_SendPacket_SwitchToReceive(u8 taskId) -{ - gTasks[taskId].func = Task_RecordMixing_ReceivePacket; - gUnknown_03000718 = 1; -} - -void *LoadPtrFromTaskData(u16 *taskData) -{ - return (void *)(taskData[0] | (taskData[1] << 16)); -} - -void StorePtrInTaskData(void *ptr, u16 *taskData) -{ - taskData[0] = (u32)ptr; - taskData[1] = (u32)ptr >> 16; -} - -u8 GetMultiplayerId_(void) -{ - return GetMultiplayerId(); -} - -u16 *GetPlayerRecvBuffer(u8 player) -{ - return gBlockRecvBuffer[player]; -} - -void sub_80B9A78(void) -{ - gUnknown_03005D2C = sizeof(struct PlayerRecords); -} - -const u8 gUnknown_083D0288[2] = {1, 0}; - -const u8 gUnknown_083D028A[2][3] = -{ - {1, 2, 0}, - {2, 0, 1}, -}; - -const u8 gUnknown_083D0290[9][4] = -{ - {1, 0, 3, 2}, - {3, 0, 1, 2}, - {2, 0, 3, 1}, - {1, 3, 0, 2}, - {2, 3, 0, 1}, - {3, 2, 0, 1}, - {1, 2, 3, 0}, - {2, 3, 1, 0}, - {3, 2, 1, 0}, -}; - -void sub_80B9A88(u8 *a) -{ - u32 i; - u32 id; - u32 players = GetLinkPlayerCount(); - - switch (players) - { - case 2: - for (i = 0; i < 2; i++) - a[i] = gUnknown_083D0288[i]; - break; - case 3: - id = GetLinkPlayerTrainerId(0) % 2; - for (i = 0; i < 3; i++) - a[i] = gUnknown_083D028A[id][i]; - break; - case 4: - id = GetLinkPlayerTrainerId(0) % 9; - for (i = 0; i < 4; i++) - a[i] = gUnknown_083D0290[id][i]; - break; - default: - break; - } -} - -void sub_80B9B1C(u8 *a, size_t size, u8 index) -{ - u8 arr[4]; - u8 *ptr; - - sub_80B9A88(arr); - //Probably not how it was originally written, but this matches. - memcpy(a + index * size, (ptr = gUnknown_083D0278), 0x40); - memcpy(ptr, a + arr[index] * size, 0x40); - sub_80F7F30(); -} - -void sub_80B9B70(u8 *a, size_t size, u8 index) -{ - sub_80B9A88(gUnknown_0300071C); - memcpy(a + size * index, a + size * gUnknown_0300071C[index], 0xA4); - sub_8134AC0(a + size * index); -} - -u8 sub_80B9BBC(u16 *a) -{ - return a[16]; -} - -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]); - - r6 += c[d][1]; - *r6 = *(r8 + c[e][1]); - - r8 += c[e][1]; - *r8 = sp0; -} - -u8 sub_80B9C4C(u8 *a) -{ - int i; - u8 r2 = 0; - - for (i = 0; i < 0x100; i++) - r2 += a[i]; - return r2; -} - -const u8 gUnknown_083D02B4[][2] = -{ - {0, 1}, - {1, 2}, - {2, 0}, -}; - -const u8 gUnknown_083D02BA[3][4] = -{ - {0, 1, 2, 3}, - {0, 2, 1, 3}, - {0, 3, 2, 1}, -}; - -#ifdef NONMATCHING -void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d) -{ - u8 r8; - u8 sp4[4]; - u8 sp8[4]; - void *spC[4]; - u8 sp1C[4][2]; - u8 sp24[4][2]; - u8 sp3C; - u16 sp40 = Random(); - u16 i; // r3 - u16 r7; - u8 r1; - struct RecordMixing_UnknownStruct *r6; - - //asm("":::"r8"); - SeedRng(gLinkPlayers[0].trainerId); - r8 = GetLinkPlayerCount(); - for (i = 0; i < 4; i++) - { - sp4[i] = 0xFF; - sp8[i] = 0; - sp1C[i][0] = 0; - sp1C[i][1] = 0; - } - sp3C = 0; - for (i = 0; i < r8; i++) - { - r6 = (struct RecordMixing_UnknownStruct *)(a + b * i); - if (r6->unk70 != 0) - { - for (r7 = 0; r7 < r6->unk70; r7++) - { - if (r6->unk74[r7] == 0) - sp1C[i][r7] = 1; - } - } - //_080B9D3C - } - //_080B9D46 - for (r7 = 0, i = 0; i < r8; i++) - { - r6 = (struct RecordMixing_UnknownStruct *)(a + b * i); - if (sp1C[i][0] == 1 || sp1C[i][1] == 1) - sp3C++; - if (sp1C[i][0] == 1 && sp1C[i][1] == 0) - { - sp24[r7][0] = i; - sp24[r7][1] = 0; - r7++; - } - else if (sp1C[i][0] == 0 && sp1C[i][1] == 1) - { - sp24[r7][0] = i; - sp24[r7][1] = 0; - r7++; - } - //else if (sp1C[i][0] == 1 + 1 && sp1C[i][1] + 1 == 1 + 1) - else if (sp1C[i][0] == 1 && sp1C[i][1] == 1) - { - u8 r4, r1; - - sp24[r7][0] = i; - r4 = sub_80B9BBC((u16 *)&r6->data[0]); - r1 = sub_80B9BBC((u16 *)&r6->data[1]); - - asm(""); - if (r4 == 0 && r1 != 0) - sp24[r7][1] = 1; - else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0)) - sp24[r7][1] = Random() % 2; - else - sp24[r7][1] = 0; - /* - if (r4 == 0 && r1 != 0) - sp24[r7][1] = 1; - else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0)) - sp24[r7][1] = Random() % 2; - else - sp24[r7][1] = 0; - */ - - /* - if (r4 == 0 && r1 != 0) - sp24[r7][1] = 1; - else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0)) - //sp24[r7][1] = ((Random() << 16) >> 16) % 2; - sp24[r7][1] = Random() % 2; - else - sp24[r7][1] = 0; - */ - //_080B9E2C: - r7++; - } - } - //_080B9E3E - for (i = 0; i < 4; i++) - { - r6 = (struct RecordMixing_UnknownStruct *)a + b * c; - spC[i] = r6; - } - r1 = sub_80B9C4C(d) % 3; - switch (sp3C) - { - case 2: - sub_80B9BC4(a, b, (u8 *)sp24, 0, 1); - break; - case 3: - { - u8 var1 = gUnknown_083D02B4[r1][0]; - u8 var2 = gUnknown_083D02B4[r1][1]; - sub_80B9BC4(a, b, (u8 *)sp24, var1, var2); - } - break; - case 4: - { - u8 *r6 = (u8 *)sp24; - u8 var1 = gUnknown_083D02BA[r1][0]; - u8 var2 = gUnknown_083D02BA[r1][1]; - sub_80B9BC4(a, b, r6, var1, var2); - } - { - u8 *r6 = (u8 *)sp24; - u8 var1 = gUnknown_083D02BA[r1][2]; - u8 var2 = gUnknown_083D02BA[r1][3]; - sub_80B9BC4(a, b, r6, var1, var2); - } - break; - } - //_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); - 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); - //memcpy(&gSaveBlock1.filler_303C.data[1], &r6->data[1], 0x38); - SeedRng(sp40); -} -#else -__attribute__((naked)) -void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d) -{ - 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, 0x58\n\ - str r0, [sp, 0x2C]\n\ - str r1, [sp, 0x30]\n\ - str r3, [sp, 0x38]\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - str r2, [sp, 0x34]\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x40]\n\ - ldr r0, _080B9DA8 @ =gLinkPlayers\n\ - ldrh r0, [r0, 0x4]\n\ - bl SeedRng\n\ - bl GetLinkPlayerCount\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - movs r3, 0\n\ - add r0, sp, 0x1C\n\ - mov r9, r0\n\ - movs r1, 0x1D\n\ - add r1, sp\n\ - mov r10, r1\n\ - mov r2, sp\n\ - adds r2, 0xC\n\ - str r2, [sp, 0x4C]\n\ - movs r7, 0xFF\n\ - add r4, sp, 0x8\n\ - movs r2, 0\n\ - mov r6, r9\n\ - mov r5, r10\n\ -_080B9CBC:\n\ - mov r1, sp\n\ - adds r1, r3\n\ - adds r1, 0x4\n\ - ldrb r0, [r1]\n\ - orrs r0, r7\n\ - strb r0, [r1]\n\ - adds r0, r4, r3\n\ - strb r2, [r0]\n\ - lsls r1, r3, 1\n\ - adds r0, r6, r1\n\ - strb r2, [r0]\n\ - adds r1, r5, r1\n\ - strb r2, [r1]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, 0x3\n\ - bls _080B9CBC\n\ - movs r4, 0\n\ - str r4, [sp, 0x3C]\n\ - movs r3, 0\n\ - mov r1, r8\n\ - lsls r0, r1, 16\n\ - lsrs r1, r0, 16\n\ - str r0, [sp, 0x50]\n\ - ldr r4, [sp, 0x30]\n\ - ldr r0, [sp, 0x34]\n\ - adds r2, r4, 0\n\ - muls r2, r0\n\ - str r2, [sp, 0x48]\n\ - ldr r2, [sp, 0x3C]\n\ - cmp r2, r1\n\ - bcs _080B9D46\n\ - mov r8, r1\n\ -_080B9D00:\n\ - ldr r4, [sp, 0x30]\n\ - adds r0, r4, 0\n\ - muls r0, r3\n\ - ldr r1, [sp, 0x2C]\n\ - adds r6, r1, r0\n\ - ldr r0, [r6, 0x70]\n\ - cmp r0, 0\n\ - beq _080B9D3C\n\ - movs r7, 0\n\ - cmp r7, r0\n\ - bcs _080B9D3C\n\ - adds r4, r6, 0\n\ - adds r4, 0x74\n\ - mov r2, r9\n\ - lsls r1, r3, 1\n\ - movs r5, 0x1\n\ -_080B9D20:\n\ - lsls r0, r7, 1\n\ - adds r0, r4, r0\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - bne _080B9D30\n\ - adds r0, r7, r1\n\ - adds r0, r2, r0\n\ - strb r5, [r0]\n\ -_080B9D30:\n\ - adds r0, r7, 0x1\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ - ldr r0, [r6, 0x70]\n\ - cmp r7, r0\n\ - bcc _080B9D20\n\ -_080B9D3C:\n\ - adds r0, r3, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, r8\n\ - bcc _080B9D00\n\ -_080B9D46:\n\ - movs r7, 0\n\ - movs r3, 0\n\ - ldr r2, [sp, 0x50]\n\ - cmp r2, 0\n\ - beq _080B9E3E\n\ - mov r4, sp\n\ - adds r4, 0x24\n\ - str r4, [sp, 0x44]\n\ - movs r0, 0x25\n\ - add r0, sp\n\ - mov r8, r0\n\ -_080B9D5C:\n\ - ldr r1, [sp, 0x30]\n\ - adds r0, r1, 0\n\ - muls r0, r3\n\ - ldr r2, [sp, 0x2C]\n\ - adds r6, r2, r0\n\ - lsls r1, r3, 1\n\ - mov r4, r9\n\ - adds r0, r4, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1\n\ - beq _080B9D7C\n\ - mov r2, r10\n\ - adds r0, r2, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1\n\ - bne _080B9D86\n\ -_080B9D7C:\n\ - ldr r0, [sp, 0x3C]\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x3C]\n\ -_080B9D86:\n\ - mov r4, r9\n\ - adds r0, r4, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1\n\ - bne _080B9DAC\n\ - mov r2, r10\n\ - adds r0, r2, r1\n\ - ldrb r2, [r0]\n\ - cmp r2, 0\n\ - bne _080B9DAC\n\ -_080B9D9A:\n\ - lsls r1, r7, 1\n\ - ldr r4, [sp, 0x44]\n\ - adds r0, r4, r1\n\ - strb r3, [r0]\n\ - add r1, r8\n\ - strb r2, [r1]\n\ - b _080B9E2C\n\ - .align 2, 0\n\ -_080B9DA8: .4byte gLinkPlayers\n\ -_080B9DAC:\n\ - mov r2, r9\n\ - adds r0, r2, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _080B9DC0\n\ - mov r4, r10\n\ - adds r0, r4, r1\n\ - ldrb r2, [r0]\n\ - cmp r2, 0x1\n\ - beq _080B9D9A\n\ -_080B9DC0:\n\ - mov r2, r9\n\ - adds r0, r2, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1\n\ - bne _080B9E32\n\ - mov r4, r10\n\ - adds r0, r4, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1\n\ - bne _080B9E32\n\ - lsls r5, r7, 1\n\ - ldr r1, [sp, 0x44]\n\ - adds r0, r1, r5\n\ - strb r3, [r0]\n\ - adds r0, r6, 0\n\ - str r3, [sp, 0x54]\n\ - bl sub_80B9BBC\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - adds r0, r6, 0\n\ - adds r0, 0x38\n\ - bl sub_80B9BBC\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - ldr r3, [sp, 0x54]\n\ - cmp r4, 0\n\ - bne _080B9E0A\n\ - cmp r1, 0\n\ - beq _080B9E0E\n\ - mov r2, r8\n\ - adds r1, r2, r5\n\ - movs r0, 0x1\n\ - strb r0, [r1]\n\ - b _080B9E2C\n\ -_080B9E0A:\n\ - cmp r1, 0\n\ - beq _080B9E26\n\ -_080B9E0E:\n\ - str r3, [sp, 0x54]\n\ - bl Random\n\ - mov r4, r8\n\ - adds r2, r4, r5\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x1\n\ - ands r0, r1\n\ - strb r0, [r2]\n\ - ldr r3, [sp, 0x54]\n\ - b _080B9E2C\n\ -_080B9E26:\n\ - mov r2, r8\n\ - adds r0, r2, r5\n\ - strb r1, [r0]\n\ -_080B9E2C:\n\ - adds r0, r7, 0x1\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ -_080B9E32:\n\ - adds r0, r3, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - ldr r4, [sp, 0x50]\n\ - cmp r0, r4\n\ - bcc _080B9D5C\n\ -_080B9E3E:\n\ - movs r3, 0\n\ - ldr r1, [sp, 0x48]\n\ - lsls r0, r1, 4\n\ - subs r0, r1\n\ - lsls r0, 3\n\ - ldr r2, [sp, 0x2C]\n\ - adds r6, r2, r0\n\ - ldr r1, [sp, 0x4C]\n\ -_080B9E4E:\n\ - lsls r0, r3, 2\n\ - adds r0, r1, r0\n\ - str r6, [r0]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, 0x3\n\ - bls _080B9E4E\n\ - ldr r0, [sp, 0x38]\n\ - bl sub_80B9C4C\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - movs r1, 0x3\n\ - bl __umodsi3\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - ldr r4, [sp, 0x3C]\n\ - cmp r4, 0x3\n\ - beq _080B9E9C\n\ - cmp r4, 0x3\n\ - bgt _080B9E82\n\ - cmp r4, 0x2\n\ - beq _080B9E8A\n\ - b _080B9EF0\n\ -_080B9E82:\n\ - ldr r0, [sp, 0x3C]\n\ - cmp r0, 0x4\n\ - beq _080B9EBC\n\ - b _080B9EF0\n\ -_080B9E8A:\n\ - add r2, sp, 0x24\n\ - movs r0, 0x1\n\ - str r0, [sp]\n\ - ldr r0, [sp, 0x2C]\n\ - ldr r1, [sp, 0x30]\n\ - movs r3, 0\n\ - bl sub_80B9BC4\n\ - b _080B9EF0\n\ -_080B9E9C:\n\ - ldr r0, _080B9EB8 @ =gUnknown_083D02B4\n\ - lsls r1, 1\n\ - adds r2, r1, r0\n\ - ldrb r3, [r2]\n\ - adds r0, 0x1\n\ - adds r1, r0\n\ - ldrb r0, [r1]\n\ - add r2, sp, 0x24\n\ - str r0, [sp]\n\ - ldr r0, [sp, 0x2C]\n\ - ldr r1, [sp, 0x30]\n\ - bl sub_80B9BC4\n\ - b _080B9EF0\n\ - .align 2, 0\n\ -_080B9EB8: .4byte gUnknown_083D02B4\n\ -_080B9EBC:\n\ - add r6, sp, 0x24\n\ - ldr r4, _080B9F2C @ =gUnknown_083D02BA\n\ - lsls r5, r1, 2\n\ - adds r0, r5, r4\n\ - ldrb r3, [r0]\n\ - adds r0, r4, 0x1\n\ - adds r0, r5, r0\n\ - ldrb r0, [r0]\n\ - str r0, [sp]\n\ - ldr r0, [sp, 0x2C]\n\ - ldr r1, [sp, 0x30]\n\ - adds r2, r6, 0\n\ - bl sub_80B9BC4\n\ - adds r0, r4, 0x2\n\ - adds r0, r5, r0\n\ - ldrb r3, [r0]\n\ - adds r4, 0x3\n\ - adds r5, r4\n\ - ldrb r0, [r5]\n\ - str r0, [sp]\n\ - ldr r0, [sp, 0x2C]\n\ - ldr r1, [sp, 0x30]\n\ - adds r2, r6, 0\n\ - bl sub_80B9BC4\n\ -_080B9EF0:\n\ - ldr r1, [sp, 0x2C]\n\ - ldr r2, [sp, 0x48]\n\ - adds r6, r1, r2\n\ - ldr r4, _080B9F30 @ =gSaveBlock1\n\ - ldr r1, _080B9F34 @ =0x0000303c\n\ - adds r0, r4, r1\n\ - adds r1, r6, 0\n\ - movs r2, 0x38\n\ - bl memcpy\n\ - ldr r2, _080B9F38 @ =0x00003074\n\ - adds r4, r2\n\ - adds r1, r6, 0\n\ - adds r1, 0x38\n\ - adds r0, r4, 0\n\ - movs r2, 0x38\n\ - bl memcpy\n\ - ldr r0, [sp, 0x40]\n\ - bl SeedRng\n\ - add sp, 0x58\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\ -_080B9F2C: .4byte gUnknown_083D02BA\n\ -_080B9F30: .4byte gSaveBlock1\n\ -_080B9F34: .4byte 0x0000303c\n\ -_080B9F38: .4byte 0x00003074\n\ - .syntax divided\n"); -} -#endif - -void sub_80B9F3C(u16 *a, u8 b) -{ - if (b != 0 && *a != 0) - { - if (GetPocketByItemId(*a) == 5) - { - if (!CheckBagHasItem(*a, 1) && !CheckPCHasItem(*a, 1) && AddBagItem(*a, 1)) - { - VarSet(VAR_0x4001, *a); - StringCopy(gStringVar1, gLinkPlayers[0].name); - if (*a == ITEM_EON_TICKET) - FlagSet(SYS_HAS_EON_TICKET); - } - else - { - VarSet(VAR_0x4001, ITEM_NONE); - } - } - else - { - if (AddBagItem(*a, 1) == TRUE) - { - VarSet(VAR_0x4001, *a); - StringCopy(gStringVar1, gLinkPlayers[0].name); - } - else - { - VarSet(VAR_0x4001, ITEM_NONE); - } - } - } -} - -void sub_80BA00C(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - switch (task->data[0]) - { - case 0: - task->data[0]++; - break; - case 1: - task->data[0]++; - break; - case 2: - SetSecretBase2Field_9_AndHideBG(); - sub_8125E2C(); - task->data[0]++; - break; - case 3: - if (sub_8125E6C() != 0) - { - ClearSecretBase2Field_9_2(); - task->data[0]++; - task->data[1] = 0; - } - break; - case 4: - task->data[1]++; - if (task->data[1] > 10) - { - sub_800832C(); - task->data[0]++; - } - break; - case 5: - if (!gReceivedRemoteLinkPlayers) - DestroyTask(taskId); - break; - } -} diff --git a/src/region_map.c b/src/region_map.c deleted file mode 100644 index 076dfecec..000000000 --- a/src/region_map.c +++ /dev/null @@ -1,1847 +0,0 @@ -#include "global.h" -#include "event_data.h" -#include "field_effect.h" -#include "field_specials.h" -#include "m4a.h" -#include "main.h" -#include "map_constants.h" -#include "menu.h" -#include "palette.h" -#include "pokemon_menu.h" -#include "region_map.h" -#include "rom4.h" -#include "secret_base.h" -#include "songs.h" -#include "sprite.h" -#include "strings.h" -#include "string_util.h" -#include "text.h" -#include "trig.h" - -// Map Section IDs -#define MAPSEC_LITTLEROOT_TOWN 0 -#define MAPSEC_OLDALE_TOWN 1 -#define MAPSEC_DEWFORD_TOWN 2 -#define MAPSEC_LAVARIDGE_TOWN 3 -#define MAPSEC_FALLARBOR_TOWN 4 -#define MAPSEC_VERDANTURF_TOWN 5 -#define MAPSEC_PACIFIDLOG_TOWN 6 -#define MAPSEC_PETALBURG_CITY 7 -#define MAPSEC_SLATEPORT_CITY 8 -#define MAPSEC_MAUVILLE_CITY 9 -#define MAPSEC_RUSTBORO_CITY 10 -#define MAPSEC_FORTREE_CITY 11 -#define MAPSEC_LILYCOVE_CITY 12 -#define MAPSEC_MOSSDEEP_CITY 13 -#define MAPSEC_SOOTOPOLIS_CITY 14 -#define MAPSEC_EVER_GRANDE_CITY 15 -#define MAPSEC_ROUTE_101 0x10 -#define MAPSEC_ROUTE_102 0x11 -#define MAPSEC_ROUTE_103 0x12 -#define MAPSEC_ROUTE_104 0x13 -#define MAPSEC_ROUTE_105 0x14 -#define MAPSEC_ROUTE_106 0x15 -#define MAPSEC_ROUTE_107 0x16 -#define MAPSEC_ROUTE_108 0x17 -#define MAPSEC_ROUTE_109 0x18 -#define MAPSEC_ROUTE_110 0x19 -#define MAPSEC_ROUTE_111 0x1A -#define MAPSEC_ROUTE_112 0x1B -#define MAPSEC_ROUTE_113 0x1C -#define MAPSEC_ROUTE_114 0x1D -#define MAPSEC_ROUTE_115 0x1E -#define MAPSEC_ROUTE_116 0x1F -#define MAPSEC_ROUTE_117 0x20 -#define MAPSEC_ROUTE_118 0x21 -#define MAPSEC_ROUTE_119 0x22 -#define MAPSEC_ROUTE_120 0x23 -#define MAPSEC_ROUTE_121 0x24 -#define MAPSEC_ROUTE_122 0x25 -#define MAPSEC_ROUTE_123 0x26 -#define MAPSEC_ROUTE_124 0x27 -#define MAPSEC_ROUTE_125 0x28 -#define MAPSEC_ROUTE_126 0x29 -#define MAPSEC_ROUTE_127 0x2A -#define MAPSEC_ROUTE_128 0x2B -#define MAPSEC_ROUTE_129 0x2C -#define MAPSEC_ROUTE_130 0x2D -#define MAPSEC_ROUTE_131 0x2E -#define MAPSEC_ROUTE_132 0x2F -#define MAPSEC_ROUTE_133 0x30 -#define MAPSEC_ROUTE_134 0x31 -#define MAPSEC_UNDERWATER1 0x32 -#define MAPSEC_UNDERWATER2 0x33 -#define MAPSEC_UNDERWATER3 0x34 -#define MAPSEC_UNDERWATER4 0x35 -#define MAPSEC_UNDERWATER5 0x36 -#define MAPSEC_GRANITE_CAVE 0x37 -#define MAPSEC_MT_CHIMNEY 0x38 -#define MAPSEC_SAFARI_ZONE 0x39 -#define MAPSEC_BATTLE_TOWER 0x3A -#define MAPSEC_PETALBURG_WOODS 0x3B -#define MAPSEC_RUSTURF_TUNNEL 0x3C -#define MAPSEC_ABANDONED_SHIP 0x3D -#define MAPSEC_NEW_MAUVILLE 0x3E -#define MAPSEC_METEOR_FALLS_1 0x3F -#define MAPSEC_METEOR_FALLS_2 0x40 -#define MAPSEC_MT_PYRE 0x41 -#define MAPSEC_EVIL_TEAM_HIDEOUT 0x42 -#define MAPSEC_SHOAL_CAVE 0x43 -#define MAPSEC_SEAFLOOR_CAVERN 0x44 -#define MAPSEC_UNDERWATER6 0x45 -#define MAPSEC_VICTORY_ROAD 0x46 -#define MAPSEC_MIRAGE_ISLAND 0x47 -#define MAPSEC_CAVE_OF_ORIGIN 0x48 -#define MAPSEC_SOUTHERN_ISLAND 0x49 -#define MAPSEC_FIERY_PATH_1 0x4A -#define MAPSEC_FIERY_PATH_2 0x4B -#define MAPSEC_JAGGED_PASS_1 0x4C -#define MAPSEC_JAGGED_PASS_2 0x4D -#define MAPSEC_SEALED_CHAMBER 0x4E -#define MAPSEC_UNDERWATER7 0x4F -#define MAPSEC_SCORCHED_SLAB 0x50 -#define MAPSEC_ISLAND_CAVE 0x51 -#define MAPSEC_DESERT_RUINS 0x52 -#define MAPSEC_ANCIENT_TOMB 0x53 -#define MAPSEC_INSIDE_OF_TRUCK 0x54 -#define MAPSEC_SKY_PILLAR 0x55 -#define MAPSEC_SECRET_BASE 0x56 -#define MAPSEC_UNK_0x57 0x57 -#define MAPSEC_NONE 0x58 - -#define MAP_WIDTH 28 -#define MAP_HEIGHT 15 -#define MAPCURSOR_X_MIN 1 -#define MAPCURSOR_Y_MIN 2 -#define MAPCURSOR_X_MAX (MAPCURSOR_X_MIN + MAP_WIDTH - 1) -#define MAPCURSOR_Y_MAX (MAPCURSOR_Y_MIN + MAP_HEIGHT - 1) - -// Input events -enum -{ - INPUT_EVENT_NONE, - INPUT_EVENT_DPAD, - INPUT_EVENT_2, - INPUT_EVENT_3, - INPUT_EVENT_A_BUTTON, - INPUT_EVENT_B_BUTTON, -}; - -static EWRAM_DATA struct RegionMap *gRegionMap = NULL; - -static const u16 sRegionMapCursor_Pal[] = INCBIN_U16("graphics/pokenav/cursor.gbapal"); -static const u8 sRegionMapCursorSmall_ImageLZ[] = INCBIN_U8("graphics/pokenav/cursor_small.4bpp.lz"); -static const u8 sRegionMapCursorLarge_ImageLZ[] = INCBIN_U8("graphics/pokenav/cursor_large.4bpp.lz"); -static const u16 sRegionMapBrendanIcon_Pal[] = INCBIN_U16("graphics/pokenav/brendan_icon.gbapal"); -static const u8 sRegionMapBrendanIcon_Image[] = INCBIN_U8("graphics/pokenav/brendan_icon.4bpp"); -static const u16 sRegionMapMayIcon_Pal[] = INCBIN_U16("graphics/pokenav/may_icon.gbapal"); -static const u8 sRegionMapMayIcon_Image[] = INCBIN_U8("graphics/pokenav/may_icon.4bpp"); -static const u16 sRegionMapBkgnd_Pal[] = INCBIN_U16("graphics/pokenav/region_map.gbapal"); -static const u8 sRegionMapBkgnd_ImageLZ[] = INCBIN_U8("graphics/pokenav/region_map.8bpp.lz"); -static const u8 sRegionMapBkgnd_TilemapLZ[] = INCBIN_U8("graphics/pokenav/region_map_map.bin.lz"); - -#include "data/region_map_layout.h" - -#if ENGLISH -#include "data/region_map_names_en.h" -#elif GERMAN -#include "data/region_map_names_de.h" -#endif - -struct RegionMapLocation -{ - u8 x, y; - u8 width, height; - const u8 *regionMapSectionId; -}; - -const struct RegionMapLocation gRegionMapLocations[] = -{ - { 4, 11, 1, 1, gMapName_LittlerootTown}, - { 4, 9, 1, 1, gMapName_OldaleTown}, - { 2, 14, 1, 1, gMapName_DewfordTown}, - { 5, 3, 1, 1, gMapName_LavaridgeTown}, - { 3, 0, 1, 1, gMapName_FallarborTown}, - { 4, 6, 1, 1, gMapName_VerdanturfTown}, - {17, 10, 1, 1, gMapName_PacifidlogTown}, - { 1, 9, 1, 1, gMapName_PetalburgCity}, - { 8, 10, 1, 2, gMapName_SlateportCity}, - { 8, 6, 2, 1, gMapName_MauvilleCity}, - { 0, 5, 1, 2, gMapName_RustboroCity}, - {12, 0, 1, 1, gMapName_FortreeCity}, - {18, 3, 2, 1, gMapName_LilycoveCity}, - {24, 5, 2, 1, gMapName_MossdeepCity}, - {21, 7, 1, 1, gMapName_SootopolisCity}, - {27, 8, 1, 2, gMapName_EverGrandeCity}, - { 4, 10, 1, 1, gMapName_Route101}, - { 2, 9, 2, 1, gMapName_Route102}, - { 4, 8, 4, 1, gMapName_Route103}, - { 0, 7, 1, 3, gMapName_Route104}, - { 0, 10, 1, 3, gMapName_Route105}, - { 0, 13, 2, 1, gMapName_Route106}, - { 3, 14, 3, 1, gMapName_Route107}, - { 6, 14, 2, 1, gMapName_Route108}, - { 8, 12, 1, 3, gMapName_Route109}, - { 8, 7, 1, 3, gMapName_Route110}, - { 8, 0, 1, 6, gMapName_Route111}, - { 6, 3, 2, 1, gMapName_Route112}, - { 4, 0, 4, 1, gMapName_Route113}, - { 1, 0, 2, 3, gMapName_Route114}, - { 0, 2, 1, 3, gMapName_Route115}, - { 1, 5, 4, 1, gMapName_Route116}, - { 5, 6, 3, 1, gMapName_Route117}, - {10, 6, 2, 1, gMapName_Route118}, - {11, 0, 1, 6, gMapName_Route119}, - {13, 0, 1, 4, gMapName_Route120}, - {14, 3, 4, 1, gMapName_Route121}, - {16, 4, 1, 2, gMapName_Route122}, - {12, 6, 5, 1, gMapName_Route123}, - {20, 3, 4, 3, gMapName_Route124}, - {24, 3, 2, 2, gMapName_Route125}, - {20, 6, 3, 3, gMapName_Route126}, - {23, 6, 3, 3, gMapName_Route127}, - {23, 9, 4, 1, gMapName_Route128}, - {24, 10, 2, 1, gMapName_Route129}, - {21, 10, 3, 1, gMapName_Route130}, - {18, 10, 3, 1, gMapName_Route131}, - {15, 10, 2, 1, gMapName_Route132}, - {12, 10, 3, 1, gMapName_Route133}, - { 9, 10, 3, 1, gMapName_Route134}, - {20, 3, 4, 3, gMapName_Underwater}, - {20, 6, 3, 3, gMapName_Underwater}, - {23, 6, 3, 3, gMapName_Underwater}, - {23, 9, 4, 1, gMapName_Underwater}, - {21, 7, 1, 1, gMapName_Underwater}, - { 1, 13, 1, 1, gMapName_GraniteCave}, - { 6, 2, 1, 1, gMapName_MtChimney}, - {16, 2, 1, 1, gMapName_SafariZone}, - {22, 12, 1, 1, gMapName_BattleTower}, - { 0, 8, 1, 1, gMapName_PetalburgWoods}, - { 2, 5, 1, 1, gMapName_RusturfTunnel}, - { 6, 14, 1, 1, gMapName_AbandonedShip}, - { 8, 7, 1, 1, gMapName_NewMauville}, - { 0, 3, 1, 1, gMapName_MeteorFalls}, - { 1, 2, 1, 1, gMapName_MeteorFalls}, - {16, 4, 1, 1, gMapName_MtPyre}, - {19, 3, 1, 1, gMapName_EvilTeamHideout}, - {24, 4, 1, 1, gMapName_ShoalCave}, - {24, 9, 1, 1, gMapName_SeafloorCavern}, - {24, 9, 1, 1, gMapName_Underwater}, - {27, 9, 1, 1, gMapName_VictoryRoad}, - {17, 10, 1, 1, gMapName_MirageIsland}, - {21, 7, 1, 1, gMapName_CaveOfOrigin}, - {12, 14, 1, 1, gMapName_SouthernIsland}, - { 6, 3, 1, 1, gMapName_FieryPath}, - { 7, 3, 1, 1, gMapName_FieryPath}, - { 6, 3, 1, 1, gMapName_JaggedPass}, - { 7, 2, 1, 1, gMapName_JaggedPass}, - {11, 10, 1, 1, gMapName_SealedChamber}, - {11, 10, 1, 1, gMapName_Underwater}, - {13, 0, 1, 1, gMapName_ScorchedSlab}, - {0, 10, 1, 1, gMapName_IslandCave}, - { 8, 3, 1, 1, gMapName_DesertRuins}, - {13, 2, 1, 1, gMapName_AncientTomb}, - { 0, 0, 1, 1, gMapName_InsideOfTruck}, - {19, 10, 1, 1, gMapName_SkyPillar}, - { 0, 0, 1, 1, gMapName_SecretBase}, - { 0, 0, 1, 1, gMapName_None}, -}; - -static const u16 gUnknown_083E7684[][2] = -{ - {MAPSEC_UNDERWATER1, MAPSEC_ROUTE_124}, - {MAPSEC_UNDERWATER2, MAPSEC_ROUTE_126}, - {MAPSEC_UNDERWATER3, MAPSEC_ROUTE_127}, - {MAPSEC_UNDERWATER4, MAPSEC_ROUTE_128}, - {MAPSEC_UNDERWATER5, MAPSEC_SOOTOPOLIS_CITY}, - {MAPSEC_UNDERWATER6, MAPSEC_ROUTE_128}, - {MAPSEC_EVIL_TEAM_HIDEOUT, MAPSEC_LILYCOVE_CITY}, - {MAPSEC_UNDERWATER7, MAPSEC_ROUTE_134}, - {MAPSEC_PETALBURG_WOODS, MAPSEC_ROUTE_104}, - {MAPSEC_JAGGED_PASS_1, MAPSEC_ROUTE_112}, - {MAPSEC_MT_PYRE, MAPSEC_ROUTE_122}, - {MAPSEC_SKY_PILLAR, MAPSEC_ROUTE_131}, - {MAPSEC_NONE, MAPSEC_NONE}, -}; - -static u8 sub_80FAB78(void); -static u8 _swiopen(void); -static u8 sub_80FAD04(void); -static u8 sub_80FADE4(void); -static void CalcZoomScrollParams(s16, s16, s16, s16, u16, u16, u8); -static void sub_80FB238(s16, s16); -void UpdateRegionMapVideoRegs(void); -static u16 GetRegionMapSectionAt(u16, u16); -static void InitializeCursorPosition(void); -static void sub_80FB600(void); -static u16 sub_80FB758(u16); -static u16 sub_80FB9C0(u16); -static void sub_80FBA18(void); -static bool8 sub_80FBAA0(u16); -void CreateRegionMapCursor(u16, u16); -static void sub_80FBCA0(void); -static void sub_80FBDF8(void); -static void sub_80FBE24(void); -static void SpriteCB_PlayerIconZoomedOut(struct Sprite *); -static void UpdateIconBlink(struct Sprite *); -static void SpriteCB_PlayerIconZoomedIn(struct Sprite *); -const u8 *GetMapSectionName(u8 *, u16, u16); -static void VBlankCB_FlyRegionMap(void); -static void CB2_FlyRegionMap(void); -static void sub_80FC244(void (*func)(void)); -static void PrintFlyTargetName(void); -static void CreateFlyTargetGraphics(void); -static void CreateCityTownFlyTargetIcons(void); -static void CreateSpecialAreaFlyTargetIcons(void); -static void SpriteCB_FlyTargetIcons(struct Sprite *); -static void sub_80FC5B4(void); -static void sub_80FC600(void); -static void sub_80FC69C(void); - -void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed) -{ - sub_80FA904(regionMap, zoomed); - while (sub_80FA940()) - ; -} - -void sub_80FA904(struct RegionMap *regionMap, bool8 zoomed) -{ - gRegionMap = regionMap; - gRegionMap->initStep = 0; - gRegionMap->zoomed = zoomed; - gRegionMap->inputCallback = (zoomed == 0) ? sub_80FAB78 : sub_80FAD04; -} - -bool8 sub_80FA940(void) -{ - switch (gRegionMap->initStep) - { - case 0: - LZ77UnCompVram(sRegionMapBkgnd_ImageLZ, (void *)(VRAM + 0x8000)); - break; - case 1: - LZ77UnCompVram(sRegionMapBkgnd_TilemapLZ, (void *)(VRAM + 0xE000)); - break; - case 2: - LoadPalette(sRegionMapBkgnd_Pal, 0x70, 0x60); // Why isn't this the right size? - break; - case 3: - LZ77UnCompWram(sRegionMapCursorSmall_ImageLZ, gRegionMap->cursorSmallImage); - break; - case 4: - LZ77UnCompWram(sRegionMapCursorLarge_ImageLZ, gRegionMap->cursorLargeImage); - break; - case 5: - InitializeCursorPosition(); - gRegionMap->unk74 = gRegionMap->cursorPosX; - gRegionMap->unk76 = gRegionMap->cursorPosY; - gRegionMap->unk16 = sub_80FB758(gRegionMap->mapSecId); - gRegionMap->mapSecId = sub_80FB9C0(gRegionMap->mapSecId); - GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16); - break; - case 6: - if (gRegionMap->zoomed == FALSE) - { - CalcZoomScrollParams(0, 0, 0, 0, 0x100, 0x100, 0); - } - else - { - gRegionMap->scrollX = gRegionMap->cursorPosX * 8 - 52; - gRegionMap->scrollY = gRegionMap->cursorPosY * 8 - 68; - gRegionMap->unk64 = gRegionMap->cursorPosX; - gRegionMap->unk66 = gRegionMap->cursorPosY; - CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, 0x80, 0x80, 0); - } - break; - case 7: - sub_80FBA18(); - UpdateRegionMapVideoRegs(); - gRegionMap->cursorSprite = NULL; - gRegionMap->playerIconSprite = NULL; - gRegionMap->unk7A = 0; - gRegionMap->blinkPlayerIcon = FALSE; - REG_BG2CNT = 0xBC8A; - gRegionMap->initStep++; - default: - return FALSE; - } - gRegionMap->initStep++; - return TRUE; -} - -void FreeRegionMapIconResources(void) -{ - if (gRegionMap->cursorSprite != NULL) - { - DestroySprite(gRegionMap->cursorSprite); - FreeSpriteTilesByTag(gRegionMap->cursorTileTag); - FreeSpritePaletteByTag(gRegionMap->cursorPaletteTag); - } - if (gRegionMap->playerIconSprite != NULL) - { - DestroySprite(gRegionMap->playerIconSprite); - FreeSpriteTilesByTag(gRegionMap->playerIconTileTag); - FreeSpritePaletteByTag(gRegionMap->playerIconPaletteTag); - } -} - -u8 sub_80FAB60(void) -{ - return gRegionMap->inputCallback(); -} - -static u8 sub_80FAB78(void) -{ - u8 event = INPUT_EVENT_NONE; - - gRegionMap->cursorDeltaX = 0; - gRegionMap->cursorDeltaY = 0; - if ((gMain.heldKeys & DPAD_UP) && gRegionMap->cursorPosY > MAPCURSOR_Y_MIN) - { - gRegionMap->cursorDeltaY = -1; - event = INPUT_EVENT_DPAD; - } - if ((gMain.heldKeys & DPAD_DOWN) && gRegionMap->cursorPosY < MAPCURSOR_Y_MAX) - { - gRegionMap->cursorDeltaY = 1; - event = INPUT_EVENT_DPAD; - } - if ((gMain.heldKeys & DPAD_LEFT) && gRegionMap->cursorPosX > MAPCURSOR_X_MIN) - { - gRegionMap->cursorDeltaX = -1; - event = INPUT_EVENT_DPAD; - } - if ((gMain.heldKeys & DPAD_RIGHT) && gRegionMap->cursorPosX < MAPCURSOR_X_MAX) - { - gRegionMap->cursorDeltaX = 1; - event = INPUT_EVENT_DPAD; - } - - if (gMain.newKeys & A_BUTTON) - event = INPUT_EVENT_A_BUTTON; - else if (gMain.newKeys & B_BUTTON) - event = INPUT_EVENT_B_BUTTON; - - if (event == INPUT_EVENT_DPAD) - { - gRegionMap->unk7A = 4; - gRegionMap->inputCallback = _swiopen; - } - return event; -} - -static u8 _swiopen(void) -{ - u16 mapSecId; - - if (gRegionMap->unk7A != 0) - return INPUT_EVENT_2; - - if (gRegionMap->cursorDeltaX > 0) - gRegionMap->cursorPosX++; - - if (gRegionMap->cursorDeltaX < 0) - gRegionMap->cursorPosX--; - - if (gRegionMap->cursorDeltaY > 0) - gRegionMap->cursorPosY++; - - if (gRegionMap->cursorDeltaY < 0) - gRegionMap->cursorPosY--; - - mapSecId = GetRegionMapSectionAt(gRegionMap->cursorPosX, gRegionMap->cursorPosY); - gRegionMap->unk16 = sub_80FB758(mapSecId); - if (mapSecId != gRegionMap->mapSecId) - { - gRegionMap->mapSecId = mapSecId; - GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16); - } - sub_80FBA18(); - gRegionMap->inputCallback = sub_80FAB78; - return INPUT_EVENT_3; -} - -static u8 sub_80FAD04(void) -{ - u8 event = INPUT_EVENT_NONE; - - gRegionMap->unk6A = 0; - gRegionMap->unk68 = 0; - if ((gMain.heldKeys & DPAD_UP) && gRegionMap->scrollY > -52) - { - gRegionMap->unk68 = -1; - event = INPUT_EVENT_DPAD; - } - if ((gMain.heldKeys & DPAD_DOWN) && gRegionMap->scrollY < 60) - { - gRegionMap->unk68 = 1; - event = INPUT_EVENT_DPAD; - } - if ((gMain.heldKeys & DPAD_LEFT) && gRegionMap->scrollX > -44) - { - gRegionMap->unk6A = -1; - event = INPUT_EVENT_DPAD; - } - if ((gMain.heldKeys & DPAD_RIGHT) && gRegionMap->scrollX < 172) - { - gRegionMap->unk6A = 1; - event = INPUT_EVENT_DPAD; - } - - if (gMain.newKeys & A_BUTTON) - event = INPUT_EVENT_A_BUTTON; - if (gMain.newKeys & B_BUTTON) - event = INPUT_EVENT_B_BUTTON; - - if (event == INPUT_EVENT_DPAD) - { - gRegionMap->inputCallback = sub_80FADE4; - gRegionMap->unk6C = 0; - } - return event; -} - -static u8 sub_80FADE4(void) -{ - gRegionMap->scrollY += gRegionMap->unk68; - gRegionMap->scrollX += gRegionMap->unk6A; - sub_80FB238(gRegionMap->scrollX, gRegionMap->scrollY); - gRegionMap->unk6C++; - if (gRegionMap->unk6C == 8) - { - u16 r3 = (gRegionMap->scrollX + 44) / 8 + 1; - u16 r1 = (gRegionMap->scrollY + 52) / 8 + 2; - - if (r3 != gRegionMap->unk64 || r1 != gRegionMap->unk66) - { - u16 mapSecId; - - gRegionMap->unk64 = r3; - gRegionMap->unk66 = r1; - mapSecId = GetRegionMapSectionAt(r3, r1); - gRegionMap->unk16 = sub_80FB758(mapSecId); - if (mapSecId != gRegionMap->mapSecId) - { - gRegionMap->mapSecId = mapSecId; - GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16); - } - sub_80FBA18(); - } - gRegionMap->unk6C = 0; - gRegionMap->inputCallback = sub_80FAD04; - return INPUT_EVENT_3; - } - return INPUT_EVENT_2; -} - -void sub_80FAEC4(void) -{ - if (gRegionMap->zoomed == FALSE) - { - gRegionMap->scrollY = 0; - gRegionMap->scrollX = 0; - gRegionMap->unk40 = 0; - gRegionMap->unk3C = 0; - gRegionMap->unk60 = gRegionMap->cursorPosX * 8 - 52; - gRegionMap->unk62 = gRegionMap->cursorPosY * 8 - 68; - gRegionMap->unk44 = (gRegionMap->unk60 << 8) / 16; - gRegionMap->unk48 = (gRegionMap->unk62 << 8) / 16; - gRegionMap->unk64 = gRegionMap->cursorPosX; - gRegionMap->unk66 = gRegionMap->cursorPosY; - gRegionMap->unk4C = (256 << 8); - gRegionMap->unk50 = -0x800; - } - else - { - gRegionMap->unk3C = gRegionMap->scrollX * 256; - gRegionMap->unk40 = gRegionMap->scrollY * 256; - gRegionMap->unk60 = 0; - gRegionMap->unk62 = 0; - gRegionMap->unk44 = -(gRegionMap->unk3C / 16); - gRegionMap->unk48 = -(gRegionMap->unk40 / 16); - gRegionMap->cursorPosX = gRegionMap->unk64; - gRegionMap->cursorPosY = gRegionMap->unk66; - gRegionMap->unk4C = (128 << 8); - gRegionMap->unk50 = 0x800; - } - gRegionMap->unk6E = 0; - sub_80FBCA0(); - sub_80FBDF8(); -} - -u8 sub_80FAFC0(void) -{ - u8 r4; - - if (gRegionMap->unk6E >= 16) - return 0; - gRegionMap->unk6E++; - if (gRegionMap->unk6E == 16) - { - gRegionMap->unk44 = 0; - gRegionMap->unk48 = 0; - gRegionMap->scrollX = gRegionMap->unk60; - gRegionMap->scrollY = gRegionMap->unk62; - gRegionMap->unk4C = (gRegionMap->zoomed == FALSE) ? (128 << 8) : (256 << 8); - gRegionMap->zoomed = !gRegionMap->zoomed; - gRegionMap->inputCallback = (gRegionMap->zoomed == FALSE) ? sub_80FAB78 : sub_80FAD04; - CreateRegionMapCursor(gRegionMap->cursorTileTag, gRegionMap->cursorPaletteTag); - sub_80FBE24(); - r4 = 0; - } - else - { - gRegionMap->unk3C += gRegionMap->unk44; - gRegionMap->unk40 += gRegionMap->unk48; - gRegionMap->scrollX = gRegionMap->unk3C >> 8; - gRegionMap->scrollY = gRegionMap->unk40 >> 8; - gRegionMap->unk4C += gRegionMap->unk50; - if ((gRegionMap->unk44 < 0 && gRegionMap->scrollX < gRegionMap->unk60) - || (gRegionMap->unk44 > 0 && gRegionMap->scrollX > gRegionMap->unk60)) - { - gRegionMap->scrollX = gRegionMap->unk60; - gRegionMap->unk44 = 0; - } - if ((gRegionMap->unk48 < 0 && gRegionMap->scrollY < gRegionMap->unk62) - || (gRegionMap->unk48 > 0 && gRegionMap->scrollY > gRegionMap->unk62)) - { - gRegionMap->scrollY = gRegionMap->unk62; - gRegionMap->unk48 = 0; - } - if (gRegionMap->zoomed == FALSE) - { - if (gRegionMap->unk4C < (128 << 8)) - { - gRegionMap->unk4C = (128 << 8); - gRegionMap->unk50 = 0; - } - } - else - { - if (gRegionMap->unk4C > (256 << 8)) - { - gRegionMap->unk4C = (256 << 8); - gRegionMap->unk50 = 0; - } - } - r4 = 1; - } - CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, gRegionMap->unk4C >> 8, gRegionMap->unk4C >> 8, 0); - return r4; -} - -static void CalcZoomScrollParams(s16 a, s16 b, s16 c, s16 d, u16 e, u16 f, u8 rotation) -{ - s32 var1; - s32 var2; - s32 var3; - s32 var4; - - gRegionMap->unk2C = e * gSineTable[rotation + 64] >> 8; - gRegionMap->unk30 = e * -gSineTable[rotation] >> 8; - gRegionMap->unk34 = f * gSineTable[rotation] >> 8; - gRegionMap->unk38 = f * gSineTable[rotation + 64] >> 8; - - var1 = (a << 8) + (c << 8); - var2 = d * gRegionMap->unk34 + gRegionMap->unk2C * c; - gRegionMap->bg2x = var1 - var2; - - var3 = (b << 8) + (d << 8); - var4 = gRegionMap->unk38 * d + gRegionMap->unk30 * c; - gRegionMap->bg2y = var3 - var4; - - gRegionMap->needUpdateVideoRegs = TRUE; -} - -static void sub_80FB238(s16 x, s16 y) -{ - gRegionMap->bg2x = (0x1C << 8) + (x << 8); - gRegionMap->bg2y = (0x24 << 8) + (y << 8); - gRegionMap->needUpdateVideoRegs = TRUE; -} - -void UpdateRegionMapVideoRegs(void) -{ - if (gRegionMap->needUpdateVideoRegs) - { - REG_BG2PA = gRegionMap->unk2C; - REG_BG2PB = gRegionMap->unk34; - REG_BG2PC = gRegionMap->unk30; - REG_BG2PD = gRegionMap->unk38; - REG_BG2X = gRegionMap->bg2x; - REG_BG2Y = gRegionMap->bg2y; - gRegionMap->needUpdateVideoRegs = FALSE; - } -} - -void sub_80FB2A4(s16 a, s16 b) -{ - CalcZoomScrollParams(a, b, 0x38, 0x48, 0x100, 0x100, 0); - UpdateRegionMapVideoRegs(); - if (gRegionMap->playerIconSprite != NULL) - { - gRegionMap->playerIconSprite->pos2.x = -a; - gRegionMap->playerIconSprite->pos2.y = -b; - } -} - -static u16 GetRegionMapSectionAt(u16 x, u16 y) -{ - if (y < MAPCURSOR_Y_MIN || y > MAPCURSOR_Y_MAX || x < MAPCURSOR_X_MIN || x > MAPCURSOR_X_MAX) - return MAPSEC_NONE; - y -= MAPCURSOR_Y_MIN; - x -= MAPCURSOR_X_MIN; - return sRegionMapLayout[x + y * 28]; -} - -static void InitializeCursorPosition(void) -{ - struct MapHeader *mapHeader; - u16 mapWidth; - u16 mapHeight; - u16 x; - u16 y; - u16 r1; - u16 r9; - - if (gSaveBlock1.location.mapGroup == 25 - && (gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_CORRIDOR - || gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_LOWER_DECK - || gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_ROOMS)) - { - sub_80FB600(); - return; - } - - switch (get_map_light_level_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) - 1) - { - default: - case 0: - case 1: - case 2: - case 4: - case 5: - gRegionMap->mapSecId = gMapHeader.regionMapSectionId; - gRegionMap->playerIsInCave = FALSE; - mapWidth = gMapHeader.mapData->width; - mapHeight = gMapHeader.mapData->height; - x = gSaveBlock1.pos.x; - y = gSaveBlock1.pos.y; - if (gRegionMap->mapSecId == MAPSEC_UNDERWATER6) - gRegionMap->playerIsInCave = TRUE; - break; - case 3: - case 6: - mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1.warp4.mapGroup, gSaveBlock1.warp4.mapNum); - gRegionMap->mapSecId = mapHeader->regionMapSectionId; - gRegionMap->playerIsInCave = TRUE; - mapWidth = mapHeader->mapData->width; - mapHeight = mapHeader->mapData->height; - x = gSaveBlock1.warp4.x; - y = gSaveBlock1.warp4.y; - break; - case 8: - mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum); - gRegionMap->mapSecId = mapHeader->regionMapSectionId; - gRegionMap->playerIsInCave = TRUE; - mapWidth = mapHeader->mapData->width; - mapHeight = mapHeader->mapData->height; - x = gSaveBlock1.warp2.x; - y = gSaveBlock1.warp2.y; - break; - case 7: - { - struct WarpData *r4; - - gRegionMap->mapSecId = gMapHeader.regionMapSectionId; - if (gRegionMap->mapSecId != MAPSEC_UNK_0x57) - { - r4 = &gSaveBlock1.warp4; - mapHeader = get_mapheader_by_bank_and_number(r4->mapGroup, r4->mapNum); - } - else - { - r4 = &gSaveBlock1.warp2; - mapHeader = get_mapheader_by_bank_and_number(r4->mapGroup, r4->mapNum); - gRegionMap->mapSecId = mapHeader->regionMapSectionId; - } - gRegionMap->playerIsInCave = FALSE; - mapWidth = mapHeader->mapData->width; - mapHeight = mapHeader->mapData->height; - x = r4->x; - y = r4->y; - } - break; - } - - r9 = x; - - r1 = mapWidth / gRegionMapLocations[gRegionMap->mapSecId].width; - if (r1 == 0) - r1 = 1; - x /= r1; - if (x >= gRegionMapLocations[gRegionMap->mapSecId].width) - x = gRegionMapLocations[gRegionMap->mapSecId].width - 1; - - r1 = mapHeight / gRegionMapLocations[gRegionMap->mapSecId].height; - if (r1 == 0) - r1 = 1; - y /= r1; - if (y >= gRegionMapLocations[gRegionMap->mapSecId].height) - y = gRegionMapLocations[gRegionMap->mapSecId].height - 1; - - switch (gRegionMap->mapSecId) - { - case MAPSEC_ROUTE_114: - if (y != 0) - x = 0; - break; - case MAPSEC_ROUTE_126: - case MAPSEC_UNDERWATER2: - x = 0; - if (gSaveBlock1.pos.x > 32) - x = 1; - if (gSaveBlock1.pos.x > 0x33) - x++; - y = 0; - if (gSaveBlock1.pos.y > 0x25) - y = 1; - if (gSaveBlock1.pos.y > 0x38) - y++; - break; - case MAPSEC_ROUTE_121: - x = 0; - if (r9 > 14) - x = 1; - if (r9 > 0x1C) - x++; - if (r9 > 0x36) - x++; - break; - } - gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; - gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; -} - -static void sub_80FB600(void) -{ - u16 y = 0; - u16 x = 0; - u8 mapGroup; - u8 mapNum; - s16 sp2; - s16 sp4; - - switch (GetSSTidalLocation(&mapGroup, &mapNum, &sp2, &sp4)) - { - case 1: - gRegionMap->mapSecId = MAPSEC_SLATEPORT_CITY; - break; - case 2: - gRegionMap->mapSecId = MAPSEC_LILYCOVE_CITY; - break; - case 3: - gRegionMap->mapSecId = MAPSEC_ROUTE_124; - break; - case 4: - gRegionMap->mapSecId = MAPSEC_ROUTE_131; - break; - default: - case 0: - { - struct MapHeader *mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum); - u16 r1; - - gRegionMap->mapSecId = mapHeader->regionMapSectionId; - r1 = mapHeader->mapData->width / gRegionMapLocations[gRegionMap->mapSecId].width; - if (r1 == 0) - r1 = 1; - x = sp2 / r1; - if (x >= gRegionMapLocations[gRegionMap->mapSecId].width) - x = gRegionMapLocations[gRegionMap->mapSecId].width - 1; - - r1 = mapHeader->mapData->height / gRegionMapLocations[gRegionMap->mapSecId].height; - if (r1 == 0) - r1 = 1; - y = sp4 / r1; - if (y >= gRegionMapLocations[gRegionMap->mapSecId].height) - y = gRegionMapLocations[gRegionMap->mapSecId].height - 1; - } - break; - } - gRegionMap->playerIsInCave = FALSE; - gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; - gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; -} - -static u16 sub_80FB758(u16 mapSecId) -{ - switch (mapSecId) - { - case MAPSEC_NONE: - return 0; - case MAPSEC_LITTLEROOT_TOWN: - return FlagGet(FLAG_VISITED_LITTLEROOT_TOWN) ? 2 : 3; - case MAPSEC_OLDALE_TOWN: - return FlagGet(FLAG_VISITED_OLDALE_TOWN) ? 2 : 3; - case MAPSEC_DEWFORD_TOWN: - return FlagGet(FLAG_VISITED_DEWFORD_TOWN) ? 2 : 3; - case MAPSEC_LAVARIDGE_TOWN: - return FlagGet(FLAG_VISITED_LAVARIDGE_TOWN) ? 2 : 3; - case MAPSEC_FALLARBOR_TOWN: - return FlagGet(FLAG_VISITED_FALLARBOR_TOWN) ? 2 : 3; - case MAPSEC_VERDANTURF_TOWN: - return FlagGet(FLAG_VISITED_VERDANTURF_TOWN) ? 2 : 3; - case MAPSEC_PACIFIDLOG_TOWN: - return FlagGet(FLAG_VISITED_PACIFIDLOG_TOWN) ? 2 : 3; - case MAPSEC_PETALBURG_CITY: - return FlagGet(FLAG_VISITED_PETALBURG_CITY) ? 2 : 3; - case MAPSEC_SLATEPORT_CITY: - return FlagGet(FLAG_VISITED_SLATEPORT_CITY) ? 2 : 3; - case MAPSEC_MAUVILLE_CITY: - return FlagGet(FLAG_VISITED_MAUVILLE_CITY) ? 2 : 3; - case MAPSEC_RUSTBORO_CITY: - return FlagGet(FLAG_VISITED_RUSTBORO_CITY) ? 2 : 3; - case MAPSEC_FORTREE_CITY: - return FlagGet(FLAG_VISITED_FORTREE_CITY) ? 2 : 3; - case MAPSEC_LILYCOVE_CITY: - return FlagGet(FLAG_VISITED_LILYCOVE_CITY) ? 2 : 3; - case MAPSEC_MOSSDEEP_CITY: - return FlagGet(FLAG_VISITED_MOSSDEEP_CITY) ? 2 : 3; - case MAPSEC_SOOTOPOLIS_CITY: - return FlagGet(FLAG_VISITED_SOOTOPOLIS_CITY) ? 2 : 3; - case MAPSEC_EVER_GRANDE_CITY: - return FlagGet(FLAG_VISITED_EVER_GRANDE_CITY) ? 2 : 3; - - case MAPSEC_BATTLE_TOWER: - return FlagGet(FLAG_UNLOCK_BATTLE_TOWER) ? 4 : 0; - case MAPSEC_SOUTHERN_ISLAND: - return FlagGet(FLAG_UNLOCK_SOUTHERN_ISLAND) ? 1 : 0; - default: - return 1; - } -} - -u16 GetRegionMapSectionAt_(u16 x, u16 y) -{ - return GetRegionMapSectionAt(x, y); -} - -static u16 sub_80FB9C0(u16 mapSecId) -{ - u16 i; - - for (i = 0; gUnknown_083E7684[i][0] != MAPSEC_NONE; i++) - { - if (gUnknown_083E7684[i][0] == mapSecId) - return gUnknown_083E7684[i][1]; - } - return mapSecId; -} - -u16 sub_80FBA04(u16 mapSecId) -{ - return sub_80FB9C0(mapSecId); -} - -static void sub_80FBA18(void) -{ - u16 x; - u16 y; - u16 i; - - if (gRegionMap->mapSecId == MAPSEC_NONE) - { - gRegionMap->everGrandeCityArea = 0; - return; - } - - if (gRegionMap->zoomed == FALSE) - { - x = gRegionMap->cursorPosX; - y = gRegionMap->cursorPosY; - } - else - { - x = gRegionMap->unk64; - y = gRegionMap->unk66; - } - - i = 0; - while (1) - { - if (x <= 1) - { - if (sub_80FBAA0(y)) - { - y--; - x = 0x1D; - } - else - { - break; - } - } - else - { - x--; - if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSecId) - i++; - } - } - - gRegionMap->everGrandeCityArea = i; -} - -static bool8 sub_80FBAA0(u16 a) -{ - u16 x; - u16 y; - - y = a - 1; - if (y == 0xFFFF) - return FALSE; - - for (x = MAPCURSOR_X_MIN; x <= MAPCURSOR_X_MAX; x++) - { - if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSecId) - return TRUE; - } - return FALSE; -} - -static const struct OamData sCursorOamData = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sCursorAnimSeq0[] = -{ - ANIMCMD_FRAME(0, 20), - ANIMCMD_FRAME(4, 20), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sCursorAnimSeq1[] = -{ - ANIMCMD_FRAME(0, 10), - ANIMCMD_FRAME(16, 10), - ANIMCMD_FRAME(32, 10), - ANIMCMD_FRAME(16, 10), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd *const sCursorAnimTable[] = -{ - sCursorAnimSeq0, - sCursorAnimSeq1, -}; - -static void SpriteCB_Cursor(struct Sprite *sprite) -{ - if (gRegionMap->unk7A != 0) - { - sprite->pos1.x += gRegionMap->cursorDeltaX * 2; - sprite->pos1.y += gRegionMap->cursorDeltaY * 2; - gRegionMap->unk7A--; - } -} - -static void nullsub_66(struct Sprite *sprite) -{ -} - -void CreateRegionMapCursor(u16 tileTag, u16 paletteTag) -{ - u8 spriteId; - struct SpriteSheet spriteSheet; - struct SpritePalette spritePalette = - { - .data = sRegionMapCursor_Pal, - }; - struct SpriteTemplate spriteTemplate = - { - .oam = &sCursorOamData, - .anims = sCursorAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_Cursor, - }; - - spriteSheet.tag = tileTag; - spriteTemplate.tileTag = tileTag; - gRegionMap->cursorTileTag = tileTag; - - spritePalette.tag = paletteTag; - spriteTemplate.paletteTag = paletteTag; - gRegionMap->cursorPaletteTag = paletteTag; - - if (gRegionMap->zoomed == FALSE) - { - spriteSheet.data = gRegionMap->cursorSmallImage; - spriteSheet.size = 0x100; - spriteTemplate.callback = SpriteCB_Cursor; - } - else - { - spriteSheet.data = gRegionMap->cursorLargeImage; - spriteSheet.size = 0x600; - spriteTemplate.callback = nullsub_66; - } - LoadSpriteSheet(&spriteSheet); - LoadSpritePalette(&spritePalette); - spriteId = CreateSprite(&spriteTemplate, 0x38, 0x48, 0); - if (spriteId != 64) - { - gRegionMap->cursorSprite = &gSprites[spriteId]; - if (gRegionMap->zoomed == TRUE) - { - gRegionMap->cursorSprite->oam.size = 2; - gRegionMap->cursorSprite->pos1.x -= 8; - gRegionMap->cursorSprite->pos1.y -= 8; - StartSpriteAnim(gRegionMap->cursorSprite, 1); - } - else - { - gRegionMap->cursorSprite->oam.size = 1; - gRegionMap->cursorSprite->pos1.x = gRegionMap->cursorPosX * 8 + 4; - gRegionMap->cursorSprite->pos1.y = gRegionMap->cursorPosY * 8 + 4; - } - gRegionMap->cursorSprite->data1 = 2; - gRegionMap->cursorSprite->data2 = IndexOfSpritePaletteTag(paletteTag) * 16 + 0x0101; - gRegionMap->cursorSprite->data3 = 1; - } -} - -static void sub_80FBCA0(void) -{ - if (gRegionMap->cursorSprite != NULL) - { - DestroySprite(gRegionMap->cursorSprite); - FreeSpriteTilesByTag(gRegionMap->cursorTileTag); - FreeSpritePaletteByTag(gRegionMap->cursorPaletteTag); - } -} - -void unref_sub_80FBCD0(void) -{ - gRegionMap->cursorSprite->data3 = 1; -} - -void unref_sub_80FBCE0(void) -{ - gRegionMap->cursorSprite->data3 = 0; -} - -static const struct OamData sPlayerIconOamData = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sPlayerIconAnimSeq0[] = -{ - ANIMCMD_FRAME(0, 5), - ANIMCMD_END, -}; - -static const union AnimCmd *const sPlayerIconAnimTable[] = -{ - sPlayerIconAnimSeq0, -}; - -void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag) -{ - u8 spriteId; - struct SpriteSheet playerIconSpriteSheet = - { - .data = sRegionMapBrendanIcon_Image, - .size = 128, - .tag = tileTag, - }; - struct SpritePalette playerIconSpritePalette = - { - .data = sRegionMapBrendanIcon_Pal, - .tag = paletteTag, - }; - struct SpriteTemplate playerIconSpriteTemplate = - { - .tileTag = tileTag, - .paletteTag = paletteTag, - .oam = &sPlayerIconOamData, - .anims = sPlayerIconAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }; - - if (gSaveBlock2.playerGender == FEMALE) - { - playerIconSpriteSheet.data = sRegionMapMayIcon_Image; - playerIconSpritePalette.data = sRegionMapMayIcon_Pal; - } - LoadSpriteSheet(&playerIconSpriteSheet); - LoadSpritePalette(&playerIconSpritePalette); - spriteId = CreateSprite(&playerIconSpriteTemplate, 0, 0, 1); - gRegionMap->playerIconSprite = &gSprites[spriteId]; - if (gRegionMap->zoomed == FALSE) - { - gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 8 + 4; - gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 8 + 4; - gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedOut; - } - else - { - gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 16 - 48; - gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 16 - 66; - gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedIn; - } -} - -static void sub_80FBDF8(void) -{ - if (gRegionMap->playerIconSprite != NULL) - { - gRegionMap->playerIconSprite->invisible = TRUE; - gRegionMap->playerIconSprite->callback = SpriteCallbackDummy; - } -} - -static void sub_80FBE24(void) -{ - if (gRegionMap->playerIconSprite != NULL) - { - if (gRegionMap->zoomed == TRUE) - { - gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 16 - 48; - gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 16 - 66; - gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedIn; - gRegionMap->playerIconSprite->invisible = FALSE; - } - else - { - gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 8 + 4; - gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 8 + 4; - gRegionMap->playerIconSprite->pos2.x = 0; - gRegionMap->playerIconSprite->pos2.y = 0; - gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedOut; - gRegionMap->playerIconSprite->invisible = FALSE; - } - } -} - -static void SpriteCB_PlayerIconZoomedIn(struct Sprite *sprite) -{ - sprite->pos2.x = -(gRegionMap->scrollX * 2); - sprite->pos2.y = -(gRegionMap->scrollY * 2); - sprite->data0 = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; - sprite->data1 = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; - - // Determine if sprite is on screen - if (sprite->data0 < -8 || sprite->data0 > 0xA8 || sprite->data1 < -8 || sprite->data1 > 0xF8) - sprite->data2 = FALSE; - else - sprite->data2 = TRUE; - - if (sprite->data2 == TRUE) - UpdateIconBlink(sprite); - else - sprite->invisible = TRUE; -} - -static void SpriteCB_PlayerIconZoomedOut(struct Sprite *sprite) -{ - UpdateIconBlink(sprite); -} - -static void UpdateIconBlink(struct Sprite *sprite) -{ - if (gRegionMap->blinkPlayerIcon) - { - // Toggle visibility every 16 frames - sprite->data7++; - if (sprite->data7 > 16) - { - sprite->data7 = 0; - sprite->invisible = !sprite->invisible; - } - } - else - { - sprite->invisible = FALSE; - } -} - -void sub_80FBF94(void) -{ - if (gRegionMap->playerIsInCave) - gRegionMap->blinkPlayerIcon = TRUE; -} - -const u8 *GetMapSectionName(u8 *dest, u16 mapSecId, u16 length) -{ - if (mapSecId == MAPSEC_SECRET_BASE) - return GetSecretBaseMapName(dest); - if (mapSecId < MAPSEC_NONE) - return StringCopy(dest, gRegionMapLocations[mapSecId].regionMapSectionId); - if (length == 0) - length = 18; - return StringFill(dest, CHAR_SPACE, length); -} - -const u8 *CopyMapName(u8 *dest, u16 mapSecId) -{ - switch (mapSecId) - { - case MAPSEC_UNK_0x57: - return StringCopy(dest, gOtherText_Ferry); - case MAPSEC_SECRET_BASE: - return StringCopy(dest, gOtherText_SecretBase); - default: - return GetMapSectionName(dest, mapSecId, 0); - } -} - -const u8 *CopyLocationName(u8 *dest, u16 mapSecId) -{ - if (mapSecId == MAPSEC_EVIL_TEAM_HIDEOUT) - return StringCopy(dest, gOtherText_Hideout); - else - return CopyMapName(dest, mapSecId); -} - -static void GetRegionMapLocationPosition(u16 mapSecId, u16 *x, u16 *y, u16 *width, u16 *height) -{ - *x = gRegionMapLocations[mapSecId].x; - *y = gRegionMapLocations[mapSecId].y; - *width = gRegionMapLocations[mapSecId].width; - *height = gRegionMapLocations[mapSecId].height; -} - -struct UnknownStruct3 -{ - void (*unk0)(void); - u16 unk4; - u16 unk6; - struct RegionMap regionMap; -}; - -extern u8 ewram[]; -#define ewram0 (*(struct UnknownStruct3 *)(ewram + 0)) -#define ewram888 (ewram + 0x888) -#define ewramA6E (ewram[0xA6E]) -#define ewramBlankMapName (ewram + 0xA48) - -static const u16 sFlyRegionMapFrame_Pal[] = INCBIN_U16("graphics/pokenav/map_frame.gbapal"); -static const u8 sFlyRegionMapFrame_ImageLZ[] = INCBIN_U8("graphics/pokenav/map_frame.4bpp.lz"); -static const u8 sFlyRegionMapFrame_TilemapLZ[] = INCBIN_U8("graphics/pokenav/map_frame.bin.lz"); -static const u16 sFlyTargetIcons_Pal[] = INCBIN_U16("graphics/pokenav/fly_target_icons.gbapal"); -static const u8 sFlyTargetIcons_ImageLZ[] = INCBIN_U8("graphics/pokenav/fly_target_icons.4bpp.lz"); - -static const u8 sUnknown_083E7920[][3] = -{ - {0, 9, 1}, - {0, 10, 14}, - {0, 11, 15}, - {0, 12, 16}, - {0, 13, 17}, - {0, 14, 18}, - {0, 15, 19}, - {0, 0, 3}, - {0, 1, 4}, - {0, 2, 5}, - {0, 3, 6}, - {0, 4, 7}, - {0, 5, 8}, - {0, 6, 9}, - {0, 7, 10}, - {0, 8, 11}, - {0, 16, 0}, - {0, 17, 0}, - {0, 18, 0}, - {0, 19, 0}, - {0, 20, 0}, - {0, 21, 0}, - {0, 22, 0}, - {0, 23, 0}, - {0, 24, 0}, - {0, 25, 0}, - {0, 26, 0}, - {0, 27, 0}, - {0, 28, 0}, - {0, 29, 0}, - {0, 30, 0}, - {0, 31, 0}, - {0, 32, 0}, - {0, 33, 0}, - {0, 34, 0}, - {0, 35, 0}, - {0, 36, 0}, - {0, 37, 0}, - {0, 38, 0}, - {0, 39, 0}, - {0, 40, 0}, - {0, 41, 0}, - {0, 42, 0}, - {0, 43, 0}, - {0, 44, 0}, - {0, 45, 0}, - {0, 46, 0}, - {0, 47, 0}, - {0, 48, 0}, - {0, 49, 0}, -}; - -struct UnknownStruct4 -{ - const u8 *const *unk0; - u16 mapSecId; - u16 flag; -}; - -static const u8 *const sEverGrandeCityAreaNames[] = {OtherText_PokeLeague, OtherText_PokeCenter}; - -static const struct UnknownStruct4 sUnknown_083E79C0[1] = -{ - {sEverGrandeCityAreaNames, MAPSEC_EVER_GRANDE_CITY, SYS_POKEMON_LEAGUE_FLY}, -}; - -// XXX: what is this? -static u8 *const ewram_ = ewram; - -static const struct SpritePalette sFlyTargetIconSpritePalette = {sFlyTargetIcons_Pal, 2}; - -// Fly targets that are not cities or towns -static const u16 sSpecialFlyAreas[][2] = -{ - // flag, mapSecId - {0x848, MAPSEC_BATTLE_TOWER}, - {0xFFFF, MAPSEC_NONE}, -}; - -static const struct OamData sFlyTargetOamData = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 0, - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sFlyTargetAnimSeq0[] = -{ - ANIMCMD_FRAME(0, 5), - ANIMCMD_END, -}; - -static const union AnimCmd sFlyTargetAnimSeq1[] = -{ - ANIMCMD_FRAME(1, 5), - ANIMCMD_END, -}; - -static const union AnimCmd sFlyTargetAnimSeq2[] = -{ - ANIMCMD_FRAME(3, 5), - ANIMCMD_END, -}; - -static const union AnimCmd sFlyTargetAnimSeq3[] = -{ - ANIMCMD_FRAME(5, 5), - ANIMCMD_END, -}; - -static const union AnimCmd sFlyTargetAnimSeq4[] = -{ - ANIMCMD_FRAME(6, 5), - ANIMCMD_END, -}; - -static const union AnimCmd sFlyTargetAnimSeq5[] = -{ - ANIMCMD_FRAME(8, 5), - ANIMCMD_END, -}; - -static const union AnimCmd sFlyTargetAnimSeq6[] = -{ - ANIMCMD_FRAME(10, 5), - ANIMCMD_END, -}; - -static const union AnimCmd *const sFlyTargetAnimTable[] = -{ - sFlyTargetAnimSeq0, - sFlyTargetAnimSeq1, - sFlyTargetAnimSeq2, - sFlyTargetAnimSeq3, - sFlyTargetAnimSeq4, - sFlyTargetAnimSeq5, - sFlyTargetAnimSeq6, -}; - -static const struct SpriteTemplate gFlyTargetSpriteTemplate = -{ - .tileTag = 2, - .paletteTag = 2, - .oam = &sFlyTargetOamData, - .anims = sFlyTargetAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, -}; - -void CB2_InitFlyRegionMap(void) -{ - switch (gMain.state) - { - case 0: - SetVBlankCallback(NULL); - REG_DISPCNT = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG2VOFS = 0; - REG_BG2HOFS = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - ResetPaletteFade(); - ResetSpriteData(); - FreeSpriteTileRanges(); - FreeAllSpritePalettes(); - break; - case 1: - SetUpWindowConfig(&gWindowConfig_81E7224); - break; - case 2: - InitMenuWindow(&gWindowConfig_81E7224); - MenuZeroFillScreen(); - break; - case 3: - InitRegionMap(&ewram0.regionMap, 0); - CreateRegionMapCursor(0, 0); - CreateRegionMapPlayerIcon(1, 1); - ewram0.unk6 = ewram0.regionMap.mapSecId; - StringFill(ewramBlankMapName, CHAR_SPACE, 12); - PrintFlyTargetName(); - break; - case 4: - LZ77UnCompVram(sFlyRegionMapFrame_ImageLZ, (void *)(VRAM + 0xC000)); - break; - case 5: - LZ77UnCompVram(sFlyRegionMapFrame_TilemapLZ, (void *)(VRAM + 0xF000)); - break; - case 6: - LoadPalette(sFlyRegionMapFrame_Pal, 16, 32); - MenuPrint_PixelCoords(gOtherText_FlyToWhere, 1, 0x90, 1); - break; - case 7: - CreateFlyTargetGraphics(); - break; - case 8: - BlendPalettes(0xFFFFFFFF, 16, 0); - SetVBlankCallback(VBlankCB_FlyRegionMap); - break; - case 9: - REG_BLDCNT = 0; - REG_BG1CNT = 0x1E0D; - REG_DISPCNT = 0x1741; - sub_80FC244(sub_80FC5B4); - SetMainCallback2(CB2_FlyRegionMap); - break; - default: - return; - } - gMain.state++; -} - -static void VBlankCB_FlyRegionMap(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -static void CB2_FlyRegionMap(void) -{ - ewram0.unk0(); - AnimateSprites(); - BuildOamBuffer(); -} - -static void sub_80FC244(void (*func)(void)) -{ - ewram0.unk0 = func; - ewram0.unk4 = 0; -} - -static void PrintFlyTargetName(void) -{ - if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4) - { - u16 i = 0; - int zero; - - for (i = 0; i < ARRAY_COUNT(sUnknown_083E79C0); i++) - { - const struct UnknownStruct4 *r4 = &sUnknown_083E79C0[i]; - - if (ewram0.regionMap.mapSecId == r4->mapSecId) - { - if (FlagGet(r4->flag)) - { - MenuDrawTextWindow(16, 14, 29, 19); - MenuPrint(ewram0.regionMap.mapSecName, 17, 15); - MenuPrint_RightAligned(r4->unk0[ewram0.regionMap.everGrandeCityArea], 29, 17); - return; - } - break; - } - } - // This check is always true, but somehow the compiler still performed it. - asm("mov %0, #0\n":"=r"(zero)); // zero = 0 - if (zero == 0) - { - MenuDrawTextWindow(16, 16, 29, 19); - MenuPrint(ewram0.regionMap.mapSecName, 17, 17); - MenuZeroFillWindowRect(16, 14, 29, 15); - } - } - else - { - MenuDrawTextWindow(16, 16, 29, 19); - MenuPrint(ewramBlankMapName, 17, 17); - MenuZeroFillWindowRect(16, 14, 29, 15); - } -} - -static void CreateFlyTargetGraphics(void) -{ - struct SpriteSheet spriteSheet; - - LZ77UnCompWram(sFlyTargetIcons_ImageLZ, ewram888); - spriteSheet.data = ewram888; - spriteSheet.size = 0x1C0; - spriteSheet.tag = 2; - LoadSpriteSheet(&spriteSheet); - LoadSpritePalette(&sFlyTargetIconSpritePalette); - CreateCityTownFlyTargetIcons(); - CreateSpecialAreaFlyTargetIcons(); -} - -// Draws a light overlay on cities and towns that the player can fly to -static void CreateCityTownFlyTargetIcons(void) -{ - u16 canFlyFlag = 0x80F; - u16 i; - - for (i = 0; i < 16; i++) - { - u16 x; - u16 y; - u16 width; - u16 height; - u16 r7; - u8 spriteId; - - GetRegionMapLocationPosition(i, &x, &y, &width, &height); - x = (x + 1) * 8 + 4; - y = (y + 2) * 8 + 4; - if (width == 2) - r7 = 1; - else if (height == 2) - r7 = 2; - else - r7 = 0; - spriteId = CreateSprite(&gFlyTargetSpriteTemplate, x, y, 10); - if (spriteId != 64) - { - gSprites[spriteId].oam.shape = r7; - if (FlagGet(canFlyFlag)) - gSprites[spriteId].callback = SpriteCB_FlyTargetIcons; - else - r7 += 3; - StartSpriteAnim(&gSprites[spriteId], r7); - gSprites[spriteId].data0 = i; - } - canFlyFlag++; - } -} - -// Draws a red box on other fly targets -// The Battle Tower is the only one of these -static void CreateSpecialAreaFlyTargetIcons(void) -{ - u16 i; - - for (i = 0; sSpecialFlyAreas[i][1] != MAPSEC_NONE; i++) - { - u16 x; - u16 y; - u16 width; - u16 height; - - if (FlagGet(sSpecialFlyAreas[i][0])) - { - u16 mapSecId = sSpecialFlyAreas[i][1]; - u8 spriteId; - - GetRegionMapLocationPosition(mapSecId, &x, &y, &width, &height); - x = (x + 1) * 8; - y = (y + 2) * 8; - spriteId = CreateSprite(&gFlyTargetSpriteTemplate, x, y, 10); - if (spriteId != 64) - { - gSprites[spriteId].oam.size = 1; - gSprites[spriteId].callback = SpriteCB_FlyTargetIcons; - StartSpriteAnim(&gSprites[spriteId], 6); - gSprites[spriteId].data0 = mapSecId; - } - } - } -} - -static void SpriteCB_FlyTargetIcons(struct Sprite *sprite) -{ - // Blink if our mapSecId is the one selected on the map - if (ewram0.regionMap.mapSecId == sprite->data0) - { - // Toggle visibility every 16 frames - sprite->data1++; - if (sprite->data1 > 16) - { - sprite->data1 = 0; - sprite->invisible = !sprite->invisible; - } - } - else - { - sprite->data1 = 16; - sprite->invisible = FALSE; - } -} - -static void sub_80FC5B4(void) -{ - switch (ewram0.unk4) - { - case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - ewram0.unk4++; - break; - case 1: - if (UpdatePaletteFade() != 0) - break; - sub_80FC244(sub_80FC600); - break; - } -} - -static void sub_80FC600(void) -{ - if (ewram0.unk4 == 0) - { - switch (sub_80FAB60()) - { - case INPUT_EVENT_NONE: - case INPUT_EVENT_DPAD: - case INPUT_EVENT_2: - break; - case INPUT_EVENT_3: - PrintFlyTargetName(); - break; - case INPUT_EVENT_A_BUTTON: - if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4) - { - m4aSongNumStart(SE_SELECT); - ewramA6E = 1; - sub_80FC244(sub_80FC69C); - } - break; - case INPUT_EVENT_B_BUTTON: - m4aSongNumStart(SE_SELECT); - ewramA6E = 0; - sub_80FC244(sub_80FC69C); - break; - } - } -} - -static void sub_80FC69C(void) -{ - switch (ewram0.unk4) - { - case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - ewram0.unk4++; - break; - case 1: - if (UpdatePaletteFade() != 0) - break; - FreeRegionMapIconResources(); - if (ewramA6E != 0) - { - switch (ewram0.regionMap.mapSecId) - { - case MAPSEC_SOUTHERN_ISLAND: - sub_8053538(22); - break; - case MAPSEC_BATTLE_TOWER: - sub_8053538(21); - break; - case MAPSEC_LITTLEROOT_TOWN: - sub_8053538((gSaveBlock2.playerGender == MALE) ? 12 : 13); - break; - case MAPSEC_EVER_GRANDE_CITY: - sub_8053538((FlagGet(0x854) && ewram0.regionMap.everGrandeCityArea == 0) ? 20 : 11); - break; - default: - if (sUnknown_083E7920[ewram0.regionMap.mapSecId][2] != 0) - sub_8053538(sUnknown_083E7920[ewram0.regionMap.mapSecId][2]); - else - warp1_set_2(sUnknown_083E7920[ewram0.regionMap.mapSecId][0], sUnknown_083E7920[ewram0.regionMap.mapSecId][1], -1); - break; - } - sub_80865BC(); - } - else - { - SetMainCallback2(sub_808AD58); - } - break; - } -} diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c deleted file mode 100644 index d052992ad..000000000 --- a/src/reset_rtc_screen.c +++ /dev/null @@ -1,496 +0,0 @@ -#include "global.h" -#include "event_data.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "rtc.h" -#include "save.h" -#include "sprite.h" -#include "songs.h" -#include "sound.h" -#include "string_util.h" -#include "strings.h" -#include "strings2.h" -#include "task.h" -#include "text.h" -#include "unknown_task.h" - -struct ResetRtcStruct -{ - /*0x0*/ u8 dataIndex; - /*0x2*/ u16 minVal; - /*0x4*/ u16 maxVal; - /*0x6*/ u8 left; - /*0x7*/ u8 right; - /*0x8*/ u8 unk8; -}; - -extern u16 gSaveFileStatus; - -extern struct ResetRtcStruct gUnknown_08376420[]; -extern struct SpritePalette gUnknown_083764BC; -extern struct SpriteTemplate gSpriteTemplate_83764E8; -extern u8 gUnknown_08376500[]; - -void CB2_ResetRtcScreen(void); -void VBlankCB_ResetRtcScreen(void); -void Task_ResetRtcScreen(u8); - -void SpriteCB_ResetRtcCusor0(struct Sprite *sprite) -{ - int state = gTasks[sprite->data0].data[2]; - if (state != sprite->data1) - { - sprite->data1 = state; - switch (state) - { - case 1: - sprite->invisible = FALSE; - sprite->animNum = 1; - sprite->animDelayCounter = 0; - sprite->pos1.x = 53; - sprite->pos1.y = 68; - break; - case 2: - sprite->invisible = FALSE; - sprite->animNum = 1; - sprite->animDelayCounter = 0; - sprite->pos1.x = 86; - sprite->pos1.y = 68; - break; - case 3: - sprite->invisible = FALSE; - sprite->animNum = 1; - sprite->animDelayCounter = 0; - sprite->pos1.x = 107; - sprite->pos1.y = 68; - break; - case 4: - sprite->invisible = FALSE; - sprite->animNum = 1; - sprite->animDelayCounter = 0; - sprite->pos1.x = 128; - sprite->pos1.y = 68; - break; - case 5: - sprite->invisible = FALSE; - sprite->animNum = 2; - sprite->animDelayCounter = 0; - sprite->pos1.x = 155; - sprite->pos1.y = 80; - break; - case 6: - DestroySprite(sprite); - break; - } - } -} - -void SpriteCB_ResetRtcCusor1(struct Sprite *sprite) -{ - int state = gTasks[sprite->data0].data[2]; - if (state != sprite->data1) - { - sprite->data1 = state; - switch (state) - { - case 1: - sprite->invisible = FALSE; - sprite->animNum = 0; - sprite->animDelayCounter = 0; - sprite->pos1.x = 53; - sprite->pos1.y = 92; - break; - case 2: - sprite->invisible = FALSE; - sprite->animNum = 0; - sprite->animDelayCounter = 0; - sprite->pos1.x = 86; - sprite->pos1.y = 92; - break; - case 3: - sprite->invisible = FALSE; - sprite->animNum = 0; - sprite->animDelayCounter = 0; - sprite->pos1.x = 107; - sprite->pos1.y = 92; - break; - case 4: - sprite->invisible = FALSE; - sprite->animNum = 0; - sprite->animDelayCounter = 0; - sprite->pos1.x = 128; - sprite->pos1.y = 92; - break; - case 5: - sprite->invisible = TRUE; - break; - case 6: - DestroySprite(sprite); - break; - } - } -} - -void ResetRtcScreen_CreateCursor(u8 taskId) -{ - int spriteId; - - LoadSpritePalette(&gUnknown_083764BC); - - spriteId = CreateSpriteAtEnd(&gSpriteTemplate_83764E8, 53, 68, 0); - gSprites[spriteId].callback = SpriteCB_ResetRtcCusor0; - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = -1; - - spriteId = CreateSpriteAtEnd(&gSpriteTemplate_83764E8, 53, 68, 0); - gSprites[spriteId].callback = SpriteCB_ResetRtcCusor1; - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = -1; -} - -void ResetRtcScreen_FreeCursorPalette(void) -{ - FreeSpritePaletteByTag(gUnknown_083764BC.tag); -} - -void ResetRtcScreen_HideChooseTimeWindow(void) -{ - MenuZeroFillWindowRect(3, 8, 25, 11); -} - -void ResetRtcScreen_PrintTime(u8 x, u8 y, u16 days, u8 hours, u8 minutes, u8 seconds) -{ - u8 *dest = gStringVar4; - days %= 10000; - hours %= 24; - minutes %= 60; - seconds %= 60; - sub_8072C44(gStringVar1, days, 24, 1); - dest = StringCopy(dest, gStringVar1); - dest = StringCopy(dest, gOtherText_Day); - sub_8072C44(gStringVar1, hours, 18, 1); - dest = StringCopy(dest, gStringVar1); - dest = StringCopy(dest, gUnknown_08376500); - dest = ConvertIntToDecimalStringN(dest, minutes, STR_CONV_MODE_LEADING_ZEROS, 2); - dest = StringCopy(dest, gUnknown_08376500); - ConvertIntToDecimalStringN(dest, seconds, STR_CONV_MODE_LEADING_ZEROS, 2); - MenuPrint(gStringVar4, x, y); -} - -void ResetRtcScreen_ShowChooseTimeWindow(u16 days, u8 hours, u8 minutes, u8 seconds) -{ - MenuDrawTextWindow(3, 8, 25, 11); - MenuPrint(gOtherText_OK, 20, 9); - ResetRtcScreen_PrintTime(4, 9, days, hours, minutes, seconds); -} - -bool32 ResetRtcScreen_MoveTimeUpDown(s16 *val, int minVal, int maxVal, u16 keys) -{ - if (keys & DPAD_DOWN) - { - (*val)--; - if (*val < minVal) - *val = maxVal; - } - else if (keys & DPAD_UP) - { - (*val)++; - if (*val > maxVal) - *val = minVal; - } - else if (keys & DPAD_LEFT) - { - *val -= 10; - if (*val < minVal) - *val = maxVal; - } - else if (keys & DPAD_RIGHT) - { - *val += 10; - if (*val > maxVal) - *val = minVal; - } - else - { - return FALSE; - } - - return TRUE; -} - -void Task_ResetRtc_3(u8 taskId) -{ - gTasks[taskId].data[0] = 1; -} - -void Task_ResetRtc_2(u8 taskId) -{ - ResetRtcScreen_HideChooseTimeWindow(); - ResetRtcScreen_FreeCursorPalette(); - gTasks[taskId].func = Task_ResetRtc_3; -} - -void Task_ResetRtc_1(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - u8 selection = data[2]; - struct ResetRtcStruct *selectionInfo = &gUnknown_08376420[selection - 1]; - - if (gMain.newKeys & B_BUTTON) - { - gTasks[taskId].func = Task_ResetRtc_2; - data[1] = 0; - data[2] = 6; - PlaySE(SE_SELECT); - return; - } - - if (gMain.newKeys & DPAD_RIGHT) - { - if (selectionInfo->right) - { - data[2] = selectionInfo->right; - PlaySE(SE_SELECT); - return; - } - } - - if (gMain.newKeys & DPAD_LEFT) - { - if (selectionInfo->left) - { - data[2] = selectionInfo->left; - PlaySE(SE_SELECT); - return; - } - } - - if (selection == 5) - { - if (gMain.newKeys & A_BUTTON) - { - gLocalTime.days = data[3]; - gLocalTime.hours = data[4]; - gLocalTime.minutes = data[5]; - gLocalTime.seconds = data[6]; - PlaySE(SE_SELECT); - gTasks[taskId].func = Task_ResetRtc_2; - data[1] = 1; - data[2] = 6; - } - } - else if (ResetRtcScreen_MoveTimeUpDown(&data[selectionInfo->dataIndex], selectionInfo->minVal, selectionInfo->maxVal, gMain.newAndRepeatedKeys & (DPAD_UP | DPAD_DOWN))) - { - PlaySE(SE_SELECT); - ResetRtcScreen_PrintTime(4, 9, data[3], data[4], data[5], data[6]); - } -} - -void Task_ResetRtc_0(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - data[0] = 0; - data[3] = gLocalTime.days; - data[4] = gLocalTime.hours; - data[5] = gLocalTime.minutes; - data[6] = gLocalTime.seconds; - ResetRtcScreen_ShowChooseTimeWindow(data[3], data[4], data[5], data[6]); - ResetRtcScreen_CreateCursor(taskId); - data[2] = 2; - gTasks[taskId].func = Task_ResetRtc_1; -} - -void CB2_InitResetRtcScreen(void) -{ - u8 *addr; - u32 size; - - REG_DISPCNT = 0; - SetVBlankCallback(NULL); - - DmaClear16(3, PLTT, PLTT_SIZE); - - addr = (u8 *)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(); - remove_some_task(); - dp12_8087EA4(); - ResetSpriteData(); - ResetTasks(); - ResetPaletteFade(); - SetUpWindowConfig(&gWindowConfig_81E6CE4); - InitMenuWindow(&gWindowConfig_81E6CE4); - REG_DISPCNT = 4352; - SetVBlankCallback(VBlankCB_ResetRtcScreen); - SetMainCallback2(CB2_ResetRtcScreen); - CreateTask(Task_ResetRtcScreen, 80); -} - -void CB2_ResetRtcScreen(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void VBlankCB_ResetRtcScreen(void) -{ - ProcessSpriteCopyRequests(); - LoadOam(); - TransferPlttBuffer(); -} - -void ResetRtcScreen_ShowMessage(const u8 *str) -{ - MenuDisplayMessageBox(); - MenuPrint(str, 2, 15); -} - -void Task_ShowResetRtcPrompt(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - switch (data[0]) - { - case 0: - MenuZeroFillScreen(); - MenuDrawTextWindow(0, 0, 20, 10); - MenuPrint(gSystemText_PresentTime, 1, 1); - ResetRtcScreen_PrintTime( - 1, - 3, - gLocalTime.days, - gLocalTime.hours, - gLocalTime.minutes, - gLocalTime.seconds); - MenuPrint(gSystemText_PreviousTime, 1, 5); - ResetRtcScreen_PrintTime( - 1, - 7, - gSaveBlock2.lastBerryTreeUpdate.days, - gSaveBlock2.lastBerryTreeUpdate.hours, - gSaveBlock2.lastBerryTreeUpdate.minutes, - gSaveBlock2.lastBerryTreeUpdate.seconds); - ResetRtcScreen_ShowMessage(gSystemText_ResetRTCPrompt); - data[0]++; - case 1: - if (gMain.newKeys & B_BUTTON) - { - DestroyTask(taskId); - DoSoftReset(); - } - else if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - DestroyTask(taskId); - } - break; - } -} - -void Task_ResetRtcScreen(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - switch (data[0]) - { - case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 1, 0x10, 0, 0xFFFF); - data[0] = 1; - break; - case 1: - if (!gPaletteFade.active) - { - if (gSaveFileStatus == 0 || gSaveFileStatus == 2) - { - ResetRtcScreen_ShowMessage(gSystemText_NoSaveFileNoTime); - data[0] = 5; - } - else - { - RtcCalcLocalTime(); - data[1] = CreateTask(Task_ShowResetRtcPrompt, 80); - data[0] = 2; - } - } - break; - case 2: - if (gTasks[data[1]].isActive != TRUE) - { - MenuZeroFillScreen(); - ResetRtcScreen_ShowMessage(gSystemText_PleaseResetTime); - gLocalTime = gSaveBlock2.lastBerryTreeUpdate; - data[1] = CreateTask(Task_ResetRtc_0, 80); - data[0] = 3; - } - break; - case 3: - if (gTasks[data[1]].data[0]) - { - if (!gTasks[data[1]].data[1]) - { - DestroyTask(data[1]); - data[0] = 2; - } - else - { - DestroyTask(data[1]); - RtcReset(); - RtcCalcLocalTimeOffset( - gLocalTime.days, - gLocalTime.hours, - gLocalTime.minutes, - gLocalTime.seconds); - gSaveBlock2.lastBerryTreeUpdate = gLocalTime; - VarSet(VAR_DAYS, gLocalTime.days); - DisableResetRTC(); - ResetRtcScreen_ShowMessage(gSystemText_ClockResetDataSave); - data[0] = 4; - } - } - break; - case 4: - if (TrySavingData(0) == TRUE) - { - ResetRtcScreen_ShowMessage(gSystemText_SaveCompleted); - PlaySE(SE_PINPON); - } - else - { - ResetRtcScreen_ShowMessage(gSystemText_SaveFailed); - PlaySE(SE_BOO); - } - data[0] = 5; - case 5: - if (gMain.newKeys & A_BUTTON) - { - BeginNormalPaletteFade(0xFFFFFFFF, 1, 0, 0x10, 0xFFFF); - data[0] = 6; - } - else - { - break; - } - case 6: - if (!gPaletteFade.active) - { - DestroyTask(taskId); - DoSoftReset(); - } - } -} diff --git a/src/rng.c b/src/rng.c deleted file mode 100644 index 7d4b5600e..000000000 --- a/src/rng.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "global.h" -#include "rng.h" - -// The number 1103515245 comes from the example implementation of rand and srand -// in the ISO C standard. - -u32 gRngValue; - -u16 Random(void) -{ - gRngValue = 1103515245 * gRngValue + 24691; - return gRngValue >> 16; -} - -void SeedRng(u16 seed) -{ - gRngValue = seed; -} diff --git a/src/roamer.c b/src/roamer.c deleted file mode 100644 index 948828d5e..000000000 --- a/src/roamer.c +++ /dev/null @@ -1,226 +0,0 @@ -#include "global.h" -#include "roamer.h" -#include "pokemon.h" -#include "rng.h" -#include "species.h" - -#ifdef SAPPHIRE -#define ROAMER_SPECIES SPECIES_LATIAS -#else -#define ROAMER_SPECIES SPECIES_LATIOS -#endif - -enum -{ - MAP_GRP = 0, // map group - MAP_NUM = 1, // map number -}; - -EWRAM_DATA static u8 sLocationHistory[3][2] = {0}; -EWRAM_DATA static u8 sRoamerLocation[2] = {0}; - -static const u8 sRoamerLocations[][6] = -{ - { 0x19, 0x1A, 0x20, 0x21, 0x31, 0xFF }, - { 0x1A, 0x19, 0x20, 0x21, 0xFF, 0xFF }, - { 0x20, 0x1A, 0x19, 0x21, 0xFF, 0xFF }, - { 0x21, 0x20, 0x19, 0x1A, 0x22, 0x26 }, - { 0x22, 0x21, 0x23, 0xFF, 0xFF, 0xFF }, - { 0x23, 0x22, 0x24, 0xFF, 0xFF, 0xFF }, - { 0x24, 0x23, 0x25, 0x26, 0xFF, 0xFF }, - { 0x25, 0x24, 0x26, 0xFF, 0xFF, 0xFF }, - { 0x26, 0x25, 0x21, 0xFF, 0xFF, 0xFF }, - { 0x27, 0x24, 0x28, 0x29, 0xFF, 0xFF }, - { 0x28, 0x27, 0x2A, 0xFF, 0xFF, 0xFF }, - { 0x29, 0x27, 0x2A, 0xFF, 0xFF, 0xFF }, - { 0x2A, 0x28, 0x29, 0x2B, 0xFF, 0xFF }, - { 0x2B, 0x2A, 0x2C, 0xFF, 0xFF, 0xFF }, - { 0x2C, 0x2B, 0x2D, 0xFF, 0xFF, 0xFF }, - { 0x2D, 0x2C, 0x2E, 0xFF, 0xFF, 0xFF }, - { 0x2E, 0x2D, 0x2F, 0xFF, 0xFF, 0xFF }, - { 0x2F, 0x2E, 0x30, 0xFF, 0xFF, 0xFF }, - { 0x30, 0x2F, 0x31, 0xFF, 0xFF, 0xFF }, - { 0x31, 0x30, 0x19, 0xFF, 0xFF, 0xFF }, - { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, -}; - -void ClearRoamerData(void) -{ - memset(&gSaveBlock1.roamer, 0, sizeof(gSaveBlock1.roamer)); -} - -void ClearRoamerLocationData(void) -{ - u8 i; - - for (i = 0; i < 3; i++) - { - sLocationHistory[i][MAP_GRP] = 0; - sLocationHistory[i][MAP_NUM] = 0; - } - - sRoamerLocation[MAP_GRP] = 0; - sRoamerLocation[MAP_NUM] = 0; -} - -void CreateInitialRoamerMon(void) -{ - struct Roamer *roamer; - CreateMon(&gEnemyParty[0], ROAMER_SPECIES, 40, 0x20, 0, 0, 0, 0); - roamer = &gSaveBlock1.roamer; - roamer->species = ROAMER_SPECIES; - roamer->level = 40; - roamer->status = 0; - roamer->active = TRUE; - roamer->ivs = GetMonData(&gEnemyParty[0], MON_DATA_IVS); - roamer->personality = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY); - roamer->hp = GetMonData(&gEnemyParty[0], MON_DATA_MAX_HP); - roamer->cool = GetMonData(&gEnemyParty[0], MON_DATA_COOL); - roamer->beauty = GetMonData(&gEnemyParty[0], MON_DATA_BEAUTY); - roamer->cute = GetMonData(&gEnemyParty[0], MON_DATA_CUTE); - roamer->smart = GetMonData(&gEnemyParty[0], MON_DATA_SMART); - roamer->tough = GetMonData(&gEnemyParty[0], MON_DATA_TOUGH); - sRoamerLocation[MAP_GRP] = 0; - sRoamerLocation[MAP_NUM] = sRoamerLocations[Random() % 20][0]; -} - -void InitRoamer(void) -{ - ClearRoamerData(); - ClearRoamerLocationData(); - CreateInitialRoamerMon(); -} - -void UpdateLocationHistoryForRoamer(void) -{ - sLocationHistory[2][MAP_GRP] = sLocationHistory[1][MAP_GRP]; - sLocationHistory[2][MAP_NUM] = sLocationHistory[1][MAP_NUM]; - - sLocationHistory[1][MAP_GRP] = sLocationHistory[0][MAP_GRP]; - sLocationHistory[1][MAP_NUM] = sLocationHistory[0][MAP_NUM]; - - sLocationHistory[0][MAP_GRP] = gSaveBlock1.location.mapGroup; - sLocationHistory[0][MAP_NUM] = gSaveBlock1.location.mapNum; -} - -void RoamerMoveToOtherLocationSet(void) -{ - u8 val = 0; - struct Roamer *roamer = &gSaveBlock1.roamer; - - if (!roamer->active) - return; - - sRoamerLocation[MAP_GRP] = val; - - while (1) - { - val = sRoamerLocations[Random() % 20][0]; - if (sRoamerLocation[MAP_NUM] != val) - { - sRoamerLocation[MAP_NUM] = val; - return; - } - } -} - -void RoamerMove(void) -{ - u8 locSet = 0; - - if ((Random() % 16) == 0) - { - RoamerMoveToOtherLocationSet(); - } - else - { - struct Roamer *roamer = &gSaveBlock1.roamer; - - if (!roamer->active) - return; - - while (locSet < 20) - { - if (sRoamerLocation[MAP_NUM] == sRoamerLocations[locSet][0]) - { - u8 mapNum; - while (1) - { - mapNum = sRoamerLocations[locSet][(Random() % 5) + 1]; - if (!(sLocationHistory[2][MAP_GRP] == 0 && sLocationHistory[2][MAP_NUM] == mapNum) && mapNum != 0xFF) - break; - } - sRoamerLocation[MAP_NUM] = mapNum; - return; - } - locSet++; - } - } -} - -bool8 IsRoamerAt(u8 mapGroup, u8 mapNum) -{ - struct Roamer *roamer = &gSaveBlock1.roamer; - - if (roamer->active && mapGroup == sRoamerLocation[MAP_GRP] && mapNum == sRoamerLocation[MAP_NUM]) - return TRUE; - else - return FALSE; -} - -void CreateRoamerMonInstance(void) -{ - struct Pokemon *mon = &gEnemyParty[0]; - struct Roamer *roamer = &gSaveBlock1.roamer; - CreateMonWithIVsPersonality(mon, roamer->species, roamer->level, roamer->ivs, roamer->personality); - SetMonData(mon, MON_DATA_STATUS, (u8 *)&roamer->status); - SetMonData(mon, MON_DATA_HP, (u8 *)&roamer->hp); - SetMonData(mon, MON_DATA_COOL, (u8 *)&roamer->cool); - SetMonData(mon, MON_DATA_BEAUTY, (u8 *)&roamer->beauty); - SetMonData(mon, MON_DATA_CUTE, (u8 *)&roamer->cute); - SetMonData(mon, MON_DATA_SMART, (u8 *)&roamer->smart); - SetMonData(mon, MON_DATA_TOUGH, (u8 *)&roamer->tough); -} - -bool8 TryStartRoamerEncounter(void) -{ - if (IsRoamerAt(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) == TRUE && (Random() % 4) == 0) - { - CreateRoamerMonInstance(); - return TRUE; - } - else - { - return FALSE; - } -} - -void UpdateRoamerHPStatus(struct Pokemon *mon) -{ - struct Roamer *roamer; - u16 hp; - u8 status; - - hp = GetMonData(mon, MON_DATA_HP); - - roamer = &gSaveBlock1.roamer; - roamer->hp = hp; - - status = GetMonData(mon, MON_DATA_STATUS); - - roamer->status = status; - - RoamerMoveToOtherLocationSet(); -} - -void SetRoamerInactive(void) -{ - struct Roamer *roamer = &gSaveBlock1.roamer; - roamer->active = FALSE; -} - -void GetRoamerLocation(u8 *mapGroup, u8 *mapNum) -{ - *mapGroup = sRoamerLocation[MAP_GRP]; - *mapNum = sRoamerLocation[MAP_NUM]; -} diff --git a/src/rom3.c b/src/rom3.c deleted file mode 100644 index 803bbf943..000000000 --- a/src/rom3.c +++ /dev/null @@ -1,1393 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_811DA74.h" -#include "battle_ai.h" -#include "battle_anim.h" -#include "battle_anim_81258BC.h" -#include "battle_anim_8137220.h" -#include "cable_club.h" -#include "items.h" -#include "link.h" -#include "pokemon.h" -#include "rom3.h" -#include "rom_8094928.h" -#include "species.h" -#include "task.h" -#include "util.h" - -extern u8 unk_2000000[]; - -#define EWRAM_14000 ((u8 *)(unk_2000000 + 0x14000)) -#define EWRAM_15000 ((u8 *)(unk_2000000 + 0x15000)) - -extern u16 gBattleTypeFlags; -extern u16 gBattleWeather; -extern struct BattlePokemon gBattleMons[]; - -static EWRAM_DATA u8 gUnknown_020238C4 = 0; -static EWRAM_DATA u8 gUnknown_020238C5 = 0; -static EWRAM_DATA u8 gUnknown_020238C6 = 0; - -extern u32 gUnknown_020239FC; -extern u8 gBattleBufferA[][0x200]; -extern u8 gBattleBufferB[][0x200]; -extern u8 gActiveBank; -extern u32 gBattleExecBuffer; -extern u8 gNoOfAllBanks; -extern u16 gBattlePartyID[]; -extern u8 gBanksBySide[]; -extern u16 gCurrentMove; -extern u16 gUnknown_02024BE8; -extern u16 gLastUsedItem; -extern u8 gLastUsedAbility; -extern u8 gBankAttacker; -extern u8 gBankTarget; -extern u8 gEffectBank; -extern u8 gStringBank; -extern u8 gAbsentBankFlags; -extern u8 gMultiHitCounter; -extern u8 gUnknown_02024C78; -extern u8 gBattleOutcome; -extern u8 gActionSelectionCursor[]; -extern u8 gMoveSelectionCursor[]; -extern u8 gBattleTextBuff1[]; -extern u8 gBattleTextBuff2[]; -extern u8 gBattleTextBuff3[]; -extern void (*gBattleMainFunc)(void); -extern void (*gBattleBankFunc[])(void); - -u8 gBattleBuffersTransferData[0x170]; - -void sub_800B858(void) -{ - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - OpenLink(); - CreateTask(sub_8083C50, 0); - sub_800BF28(); - } -} - -void setup_poochyena_battle(void) -{ - s32 i; - - gBattleMainFunc = nullsub_41; - for (i = 0; i < 4; i++) - { - gBattleBankFunc[i] = nullsub_91; - gBanksBySide[i] = 0xFF; - gActionSelectionCursor[i] = 0; - gMoveSelectionCursor[i] = 0; - } - sub_800B858(); - gBattleExecBuffer = 0; - battle_anim_clear_some_data(); - ClearBattleMonForms(); - BattleAI_HandleItemUseBeforeAISetup(); - if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) - { - ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], SPECIES_POOCHYENA, 2, 32, 0, 0, 0, 0); - i = ITEM_NONE; - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&i); - } - gUnknown_020239FC = 0; - gUnknown_02024C78 = 0; -} - -void sub_800B950(void) -{ - s32 i; - - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - sub_800BA78(); - else - sub_800B9A8(); - sub_800BD54(); - if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - for (i = 0; i < gNoOfAllBanks; i++) - sub_8094978(i, 0); - } -} - -void sub_800B9A8(void) -{ - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - { - gBattleMainFunc = sub_8010800; - if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) - gBattleBankFunc[0] = SetBankFuncToSafariBufferRunCommand; - else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) - gBattleBankFunc[0] = SetBankFuncToWallyBufferRunCommand; - else - gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[0] = 0; - gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand; - gBanksBySide[1] = 1; - gNoOfAllBanks = 2; - } - else - { - gBattleMainFunc = sub_8010800; - gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[0] = 0; - gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand; - gBanksBySide[1] = 1; - gBattleBankFunc[2] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[2] = 2; - gBattleBankFunc[3] = SetBankFuncToOpponentBufferRunCommand; - gBanksBySide[3] = 3; - gNoOfAllBanks = 4; - } -} - -void sub_800BA78(void) -{ - u8 multiplayerId; - int i; - - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - { - if (gBattleTypeFlags & BATTLE_TYPE_WILD) - { - gBattleMainFunc = sub_8010800; - gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[0] = 0; - gBattleBankFunc[1] = SetBankFuncToLinkOpponentBufferRunCommand; - gBanksBySide[1] = 1; - gNoOfAllBanks = 2; - } - else - { - gBattleBankFunc[1] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[1] = 0; - gBattleBankFunc[0] = SetBankFuncToLinkOpponentBufferRunCommand; - gBanksBySide[0] = 1; - gNoOfAllBanks = 2; - } - return; - } - if ((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) == BATTLE_TYPE_DOUBLE) - { - if (gBattleTypeFlags & BATTLE_TYPE_WILD) - { - gBattleMainFunc = sub_8010800; - gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[0] = 0; - gBattleBankFunc[1] = SetBankFuncToLinkOpponentBufferRunCommand; - gBanksBySide[1] = 1; - gBattleBankFunc[2] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[2] = 2; - gBattleBankFunc[3] = SetBankFuncToLinkOpponentBufferRunCommand; - gBanksBySide[3] = 3; - gNoOfAllBanks = 4; - } - else - { - gBattleBankFunc[1] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[1] = 0; - gBattleBankFunc[0] = SetBankFuncToLinkOpponentBufferRunCommand; - gBanksBySide[0] = 1; - gBattleBankFunc[3] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[3] = 2; - gBattleBankFunc[2] = SetBankFuncToLinkOpponentBufferRunCommand; - gBanksBySide[2] = 3; - gNoOfAllBanks = 4; - - } - return; - } - multiplayerId = GetMultiplayerId(); - if (gBattleTypeFlags & BATTLE_TYPE_WILD) - gBattleMainFunc = sub_8010800; - for (i = 0; i < 4; i++) - { - switch (gLinkPlayers[i].lp_field_18) - { - case 0: - case 3: - sub_8094978(gLinkPlayers[i].lp_field_18, 0); - break; - case 1: - case 2: - sub_8094978(gLinkPlayers[i].lp_field_18, 1); - break; - } - - if (i == multiplayerId) - { - gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToPlayerBufferRunCommand; - switch (gLinkPlayers[i].lp_field_18) - { - case 0: - case 3: - gBanksBySide[gLinkPlayers[i].lp_field_18] = 0; - gBattlePartyID[gLinkPlayers[i].lp_field_18] = 0; - break; - case 1: - case 2: - gBanksBySide[gLinkPlayers[i].lp_field_18] = 2; - gBattlePartyID[gLinkPlayers[i].lp_field_18] = 3; - break; - } - } - else - { - if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[multiplayerId].lp_field_18 & 1)) - || ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[multiplayerId].lp_field_18 & 1))) - { - gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToLinkPartnerBufferRunCommand; - switch (gLinkPlayers[i].lp_field_18) - { - case 0: - case 3: - gBanksBySide[gLinkPlayers[i].lp_field_18] = 0; - gBattlePartyID[gLinkPlayers[i].lp_field_18] = 0; - break; - case 1: - case 2: - gBanksBySide[gLinkPlayers[i].lp_field_18] = 2; - gBattlePartyID[gLinkPlayers[i].lp_field_18] = 3; - break; - } - } - else - { - gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToLinkOpponentBufferRunCommand; - switch (gLinkPlayers[i].lp_field_18) - { - case 0: - case 3: - gBanksBySide[gLinkPlayers[i].lp_field_18] = 1; - gBattlePartyID[gLinkPlayers[i].lp_field_18] = 0; - break; - case 1: - case 2: - gBanksBySide[gLinkPlayers[i].lp_field_18] = 3; - gBattlePartyID[gLinkPlayers[i].lp_field_18] = 3; - break; - } - } - } - } - gNoOfAllBanks = 4; -} - -void sub_800BD54(void) -{ - int i; - int j; - - if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - for (i = 0; i < gNoOfAllBanks; i++) - { - for (j = 0; j < 6; j++) - { - if (i < 2) - { - if (!(gBanksBySide[i] & 1)) - { - if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != 0 - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG - && GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) == 0) - { - gBattlePartyID[i] = j; - break; - } - } - else - { - if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG - && GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) == 0) - { - gBattlePartyID[i] = j; - break; - } - } - } - else - { - if (!(gBanksBySide[i] & 1)) - { - if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES) != 0 //Probably a typo by Game Freak. The rest use SPECIES2 - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG - && GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) == 0 - && gBattlePartyID[i - 2] != j) - { - gBattlePartyID[i] = j; - break; - } - } - else - { - if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG - && GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) == 0 - && gBattlePartyID[i - 2] != j) - { - gBattlePartyID[i] = j; - break; - } - } - } - } - } - } -} - -void dp01_prepare_buffer(u8 a, u8 *b, u16 c) -{ - int i; - - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - dp01_prepare_buffer_wireless_probably(a, c, b); - } - else - { - switch (a) - { - case 0: - for (i = 0; i < c; i++) - { - gBattleBufferA[gActiveBank][i] = *b; - b++; - } - break; - case 1: - for (i = 0; i < c; i++) - { - gBattleBufferB[gActiveBank][i] = *b; - b++; - } - break; - } - } -} - -void sub_800BF28(void) -{ - gUnknown_020238C4 = CreateTask(sub_800C1A8, 0); - gTasks[gUnknown_020238C4].data[11] = 0; - gTasks[gUnknown_020238C4].data[12] = 0; - gTasks[gUnknown_020238C4].data[13] = 0; - gTasks[gUnknown_020238C4].data[14] = 0; - gTasks[gUnknown_020238C4].data[15] = 0; - gUnknown_020238C5 = CreateTask(sub_800C47C, 0); - gTasks[gUnknown_020238C5].data[12] = 0; - gTasks[gUnknown_020238C5].data[13] = 0; - gTasks[gUnknown_020238C5].data[14] = 0; - gTasks[gUnknown_020238C5].data[15] = 0; - gUnknown_020238C6 = 0; - CpuFill16(0, EWRAM_14000, 0x2000); -} - -void dp01_prepare_buffer_wireless_probably(u8 a, u16 b, u8 *c) -{ - s32 r9; - int i; - - r9 = b - b % 4 + 4; - if (gTasks[gUnknown_020238C4].data[14] + r9 + 9 > 0x1000) - { - gTasks[gUnknown_020238C4].data[12] = gTasks[gUnknown_020238C4].data[14]; - gTasks[gUnknown_020238C4].data[14] = 0; - } - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14000] = a; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14001] = gActiveBank; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14002] = gBankAttacker; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14003] = gBankTarget; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14004] = r9; - 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]; - gTasks[gUnknown_020238C4].data[14] = gTasks[gUnknown_020238C4].data[14] + r9 + 8; -} - -void sub_800C1A8(u8 taskId) -{ - u16 var; - - switch (gTasks[taskId].data[11]) - { - case 0: - gTasks[taskId].data[10] = 100; - gTasks[taskId].data[11]++; - break; - case 1: - gTasks[taskId].data[10]--; - if (gTasks[taskId].data[10] == 0) - gTasks[taskId].data[11]++; - break; - case 2: - GetLinkPlayerCount_2(); - if (IsLinkMaster()) - { - sub_8007F4C(); - gTasks[taskId].data[11]++; - break; - } - gTasks[taskId].data[11]++; - break; - case 3: - if (gTasks[taskId].data[15] != gTasks[taskId].data[14]) - { - if (gTasks[taskId].data[13] == 0) - { - if (gTasks[taskId].data[15] > gTasks[taskId].data[14] - && gTasks[taskId].data[15] == gTasks[taskId].data[12]) - { - gTasks[taskId].data[12] = 0; - gTasks[taskId].data[15] = 0; - } - var = (unk_2000000[gTasks[taskId].data[15] + 0x14004] | (unk_2000000[gTasks[taskId].data[15] + 0x14005] << 8)) + 8; - SendBlock(bitmask_all_link_players_but_self(), &unk_2000000[gTasks[taskId].data[15] + 0x14000], var); - gTasks[taskId].data[11]++; - } - else - { - gTasks[taskId].data[13]--; - break; - } - } - break; - case 4: - if (sub_8007ECC()) - { - var = unk_2000000[gTasks[taskId].data[15] + 0x14004] | (unk_2000000[gTasks[taskId].data[15] + 0x14005] << 8); - gTasks[taskId].data[13] = 1; - gTasks[taskId].data[15] = gTasks[taskId].data[15] + var + 8; - gTasks[taskId].data[11] = 3; - } - break; - case 5: - gTasks[taskId].data[13]--; - if (gTasks[taskId].data[13] == 0) - { - gTasks[taskId].data[13] = 1; - gTasks[taskId].data[11] = 3; - } - break; - } -} - -//fix me -void sub_800C35C(void) -{ - u8 i; //r4 - s32 j; //r2 - u16 r6; //r6 - u8 *recvBuffer; //r3 - u8 *dest; //r5 - u8 *src; //r4 - - if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & 0x20) && gLinkPlayers[0].linkType == 0x2211) - { - for (i = 0; i < GetLinkPlayerCount(); i++) - { - if (GetBlockReceivedStatus() & gBitTable[i]) - { - ResetBlockReceivedFlag(i); - recvBuffer = (u8 *)&gBlockRecvBuffer[i]; -#ifndef NONMATCHING - asm(""); - recvBuffer = (u8 *)&gBlockRecvBuffer[i]; -#endif - r6 = gBlockRecvBuffer[i][2]; - if (gTasks[gUnknown_020238C5].data[14] + 9 + r6 > 0x1000) - { - gTasks[gUnknown_020238C5].data[12] = gTasks[gUnknown_020238C5].data[14]; - gTasks[gUnknown_020238C5].data[14] = 0; - } - //_0800C402 - dest = EWRAM_15000 + gTasks[gUnknown_020238C5].data[14]; - src = recvBuffer; - for (j = 0; j < r6 + 8; j++) - dest[j] = src[j]; - gTasks[gUnknown_020238C5].data[14] = gTasks[gUnknown_020238C5].data[14] + r6 + 8; - } - //_0800C446 - } - } -} - -void sub_800C47C(u8 taskId) -{ - u16 r7; - u8 r4; - u8 r2; - - if (gTasks[taskId].data[15] != gTasks[taskId].data[14]) - { - if (gTasks[taskId].data[15] > gTasks[taskId].data[14] - && gTasks[taskId].data[15] == gTasks[taskId].data[12]) - { - gTasks[taskId].data[12] = 0; - gTasks[taskId].data[15] = 0; - } - r4 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 1]; - r7 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 4] | (unk_2000000[0x15000 + gTasks[taskId].data[15] + 5] << 8); - switch (unk_2000000[0x15000 + gTasks[taskId].data[15] + 0]) - { - case 0: - if (gBattleExecBuffer & gBitTable[r4]) - return; - memcpy(gBattleBufferA[r4], &unk_2000000[0x15000 + gTasks[taskId].data[15] + 8], r7); - sub_80155A4(r4); - if (!(gBattleTypeFlags & BATTLE_TYPE_WILD)) - { - gBankAttacker = unk_2000000[0x15000 + gTasks[taskId].data[15] + 2]; - gBankTarget = unk_2000000[0x15000 + gTasks[taskId].data[15] + 3]; - gAbsentBankFlags = unk_2000000[0x15000 + gTasks[taskId].data[15] + 6]; - gEffectBank = unk_2000000[0x15000 + gTasks[taskId].data[15] + 7]; - } - break; - case 1: - memcpy(gBattleBufferB[r4], &unk_2000000[0x15000 + gTasks[taskId].data[15] + 8], r7); - break; - case 2: - r2 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 8]; - gBattleExecBuffer &= ~(gBitTable[r4] << (r2 * 4)); - break; - } - gTasks[taskId].data[15] = gTasks[taskId].data[15] + r7 + 8; - } -} - -void EmitGetAttributes(u8 a, u8 b, u8 c) -{ - gBattleBuffersTransferData[0] = 0; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = 0; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c) -{ - gBattleBuffersTransferData[0] = 1; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = 0; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, void *e) -{ - int i; - - gBattleBuffersTransferData[0] = 2; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - for (i = 0; i < d; i++) - gBattleBuffersTransferData[3 + i] = *(u8*)(e++); - dp01_prepare_buffer(a, gBattleBuffersTransferData, d + 3); -} - -void unref_sub_800C6A4(u8 a, u8 b, u8 c, u8 *d) -{ - int i; - - gBattleBuffersTransferData[0] = 3; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - for (i = 0; i < c; i++) - gBattleBuffersTransferData[3 + i] = *(d++); - dp01_prepare_buffer(a, gBattleBuffersTransferData, c + 3); -} - -void dp01_build_cmdbuf_x04_4_4_4(u8 a) -{ - gBattleBuffersTransferData[0] = 4; - gBattleBuffersTransferData[1] = 4; - gBattleBuffersTransferData[2] = 4; - gBattleBuffersTransferData[3] = 4; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitSwitchInAnim(u8 a, u8 b, u8 c) -{ - gBattleBuffersTransferData[0] = 5; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = 5; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitReturnPokeToBall(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 6; - gBattleBuffersTransferData[1] = b; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); -} - -void dp01_build_cmdbuf_x07_7_7_7(u8 a) -{ - gBattleBuffersTransferData[0] = 7; - gBattleBuffersTransferData[1] = 7; - gBattleBuffersTransferData[2] = 7; - gBattleBuffersTransferData[3] = 7; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitTrainerSlide(u8 a) -{ - gBattleBuffersTransferData[0] = 8; - gBattleBuffersTransferData[1] = 8; - gBattleBuffersTransferData[2] = 8; - gBattleBuffersTransferData[3] = 8; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void dp01_build_cmdbuf_x09_9_9_9(u8 a) -{ - gBattleBuffersTransferData[0] = 9; - gBattleBuffersTransferData[1] = 9; - gBattleBuffersTransferData[2] = 9; - gBattleBuffersTransferData[3] = 9; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitFaintAnimation(u8 a) -{ - gBattleBuffersTransferData[0] = 10; - gBattleBuffersTransferData[1] = 10; - gBattleBuffersTransferData[2] = 10; - gBattleBuffersTransferData[3] = 10; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void dp01_build_cmdbuf_x0B_B_B_B(u8 a) -{ - gBattleBuffersTransferData[0] = 11; - gBattleBuffersTransferData[1] = 11; - gBattleBuffersTransferData[2] = 11; - gBattleBuffersTransferData[3] = 11; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void dp01_build_cmdbuf_x0C_C_C_C(u8 a) -{ - gBattleBuffersTransferData[0] = 12; - gBattleBuffersTransferData[1] = 12; - gBattleBuffersTransferData[2] = 12; - gBattleBuffersTransferData[3] = 12; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitBallThrowAnim(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) -{ - int i; - - gBattleBuffersTransferData[0] = 14; - gBattleBuffersTransferData[1] = b; - for (i = 0; i < b * 3; i++) - gBattleBuffersTransferData[2 + i] = *(c++); - dp01_prepare_buffer(a, gBattleBuffersTransferData, b * 3 + 2); -} - -void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStruct *g) -{ - gBattleBuffersTransferData[0] = 15; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; - gBattleBuffersTransferData[3] = c; - gBattleBuffersTransferData[4] = d; - gBattleBuffersTransferData[5] = (d & 0xFF00) >> 8; - gBattleBuffersTransferData[6] = e; - gBattleBuffersTransferData[7] = (e & 0x0000FF00) >> 8; - gBattleBuffersTransferData[8] = (e & 0x00FF0000) >> 16; - gBattleBuffersTransferData[9] = (e & 0xFF000000) >> 24; - gBattleBuffersTransferData[10] = f; - gBattleBuffersTransferData[11] = gMultiHitCounter; - if (AbilityBattleEffects(14, 0, 13, 0, 0) == 0 && AbilityBattleEffects(14, 0, 0x4D, 0, 0) == 0) - { - gBattleBuffersTransferData[12] = gBattleWeather; - gBattleBuffersTransferData[13] = (gBattleWeather & 0xFF00) >> 8; - } - else - { - gBattleBuffersTransferData[12] = 0; - gBattleBuffersTransferData[13] = 0; - } - gBattleBuffersTransferData[14] = 0; - gBattleBuffersTransferData[15] = 0; - memcpy(&gBattleBuffersTransferData[16], g, sizeof(*g)); - dp01_prepare_buffer(a, gBattleBuffersTransferData, 0x2C); -} - -#ifdef NONMATCHING -void EmitPrintString(u8 a, u16 b) -{ - int i; - //u16 *r12; - - 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[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++) - { - 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]; - } - 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"); -} -#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"); -} - -void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c) -{ - gBattleBuffersTransferData[0] = 18; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void unref_sub_800CB84(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) -{ - u32 i; - - gBattleBuffersTransferData[0] = 20; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = 0; - for (i = 0; i < 20; i++) - gBattleBuffersTransferData[4 + i] = d[i]; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 24); -} - -void sub_800CBE0(u8 a, u8 *b) -{ - int i; - - gBattleBuffersTransferData[0] = 21; - for (i = 0; i < 3; i++) - gBattleBuffersTransferData[1 + i] = b[i]; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e) -{ - int i; - - gBattleBuffersTransferData[0] = 22; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - 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 -} - -void dp01_build_cmdbuf_x17_17_17_17(u8 a) -{ - gBattleBuffersTransferData[0] = 23; - gBattleBuffersTransferData[1] = 23; - gBattleBuffersTransferData[2] = 23; - gBattleBuffersTransferData[3] = 23; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -// FIXME: I think this function is supposed to take s16 as its second argument, -// but battle_4.c expects u16 -void EmitHealthBarUpdate(u8 a, u16 b) -{ - gBattleBuffersTransferData[0] = 24; - gBattleBuffersTransferData[1] = 0; - gBattleBuffersTransferData[2] = (s16)b; - gBattleBuffersTransferData[3] = ((s16)b & 0xFF00) >> 8; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -// FIXME: I think this function is supposed to take s16 as its third argument, -// but battle_4.c expects u16 -void EmitExpBarUpdate(u8 a, u8 b, u16 c) -{ - gBattleBuffersTransferData[0] = 25; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (s16)c; - gBattleBuffersTransferData[3] = ((s16)c & 0xFF00) >> 8; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitStatusIconUpdate(u8 a, u32 b, u32 c) -{ - gBattleBuffersTransferData[0] = 26; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0x0000FF00) >> 8; - gBattleBuffersTransferData[3] = (b & 0x00FF0000) >> 16; - gBattleBuffersTransferData[4] = (b & 0xFF000000) >> 24; - gBattleBuffersTransferData[5] = c; - gBattleBuffersTransferData[6] = (c & 0x0000FF00) >> 8; - gBattleBuffersTransferData[7] = (c & 0x00FF0000) >> 16; - gBattleBuffersTransferData[8] = (c & 0xFF000000) >> 24; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 9); -} - -void EmitStatusAnimation(u8 a, u8 b, u32 c) -{ - gBattleBuffersTransferData[0] = 27; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = (c & 0x0000FF00) >> 8; - gBattleBuffersTransferData[4] = (c & 0x00FF0000) >> 16; - gBattleBuffersTransferData[5] = (c & 0xFF000000) >> 24; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 6); -} - -void EmitStatusXor(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 28; - gBattleBuffersTransferData[1] = b; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); -} - -void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8 a, u16 b, u8 *c) -{ - int i; - - gBattleBuffersTransferData[0] = 29; - gBattleBuffersTransferData[1] = 29; - gBattleBuffersTransferData[2] = b; - gBattleBuffersTransferData[3] = (b & 0xFF00) >> 8; - for (i = 0; i < b; i++) - gBattleBuffersTransferData[4 + i] = *(c++); - dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 4); -} - -void unref_sub_800CDD4(u8 a, u32 b, u16 c, u8 *d) -{ - int i; - - gBattleBuffersTransferData[0] = 30; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0x0000FF00) >> 8; - gBattleBuffersTransferData[3] = (b & 0x00FF0000) >> 16; - gBattleBuffersTransferData[4] = (b & 0xFF000000) >> 24; - gBattleBuffersTransferData[5] = c; - gBattleBuffersTransferData[6] = (c & 0xFF00) >> 8; - for (i = 0; i < c; i++) - gBattleBuffersTransferData[7 + i] = *(d++); - dp01_prepare_buffer(a, gBattleBuffersTransferData, c + 7); -} - -void unref_sub_800CE3C(u8 a, u16 b, u8 *c) -{ - int i; - - gBattleBuffersTransferData[0] = 31; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; - for (i = 0; i < b; i++) - gBattleBuffersTransferData[3 + i] = *(c++); - dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 3); -} - -void unref_sub_800CE84(u8 a, u16 b, u8 *c) -{ - int i; - - gBattleBuffersTransferData[0] = 32; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; - for (i = 0; i < b; i++) - gBattleBuffersTransferData[3 + i] = *(c++); - dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 3); -} - -void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c) -{ - gBattleBuffersTransferData[0] = 33; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c) -{ - int i; - - gBattleBuffersTransferData[0] = 34; - gBattleBuffersTransferData[1] = b; - for (i = 0; i < 3; i++) - gBattleBuffersTransferData[2 + i] = c[i]; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 5); -} - -void dp01_build_cmdbuf_x23_aa_0(u8 a, u16 b) -{ - gBattleBuffersTransferData[0] = 35; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; - gBattleBuffersTransferData[3] = 0; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void dp01_build_cmdbuf_x24_aa_0(u8 a, u16 b) -{ - gBattleBuffersTransferData[0] = 36; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; - gBattleBuffersTransferData[3] = 0; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void dp01_build_cmdbuf_x25_25_25_25(u8 a) -{ - gBattleBuffersTransferData[0] = 37; - gBattleBuffersTransferData[1] = 37; - gBattleBuffersTransferData[2] = 37; - gBattleBuffersTransferData[3] = 37; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void dp01_build_cmdbuf_x26_a(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) -{ - gBattleBuffersTransferData[0] = 39; - gBattleBuffersTransferData[1] = 39; - gBattleBuffersTransferData[2] = 39; - gBattleBuffersTransferData[3] = 39; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void dp01_build_cmdbuf_x28_28_28_28(u8 a) -{ - gBattleBuffersTransferData[0] = 40; - gBattleBuffersTransferData[1] = 40; - gBattleBuffersTransferData[2] = 40; - gBattleBuffersTransferData[3] = 40; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitHitAnimation(u8 a) -{ - gBattleBuffersTransferData[0] = 41; - gBattleBuffersTransferData[1] = 41; - gBattleBuffersTransferData[2] = 41; - gBattleBuffersTransferData[3] = 41; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void dp01_build_cmdbuf_x2A_2A_2A_2A(u8 a) -{ - gBattleBuffersTransferData[0] = 42; - gBattleBuffersTransferData[1] = 42; - gBattleBuffersTransferData[2] = 42; - gBattleBuffersTransferData[3] = 42; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitEffectivenessSound(u8 a, u16 b) -{ - gBattleBuffersTransferData[0] = 43; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; - gBattleBuffersTransferData[3] = 0; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitPlaySound(u8 a, u16 b) -{ - gBattleBuffersTransferData[0] = 44; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; - gBattleBuffersTransferData[3] = 0; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitFaintingCry(u8 a) -{ - gBattleBuffersTransferData[0] = 45; - gBattleBuffersTransferData[1] = 45; - gBattleBuffersTransferData[2] = 45; - gBattleBuffersTransferData[3] = 45; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitBattleIntroSlide(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) -{ - gBattleBuffersTransferData[0] = 47; - gBattleBuffersTransferData[1] = 47; - gBattleBuffersTransferData[2] = 47; - gBattleBuffersTransferData[3] = 47; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c) -{ - int i; - - gBattleBuffersTransferData[0] = 48; - gBattleBuffersTransferData[1] = c & 0x7F; - gBattleBuffersTransferData[2] = (c & 0x80) >> 7; - gBattleBuffersTransferData[3] = 48; - for (i = 0; i < 48; i++) - gBattleBuffersTransferData[4 + i] = b[i]; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 52); -} - -void dp01_build_cmdbuf_x31_31_31_31(u8 a) -{ - gBattleBuffersTransferData[0] = 49; - gBattleBuffersTransferData[1] = 49; - gBattleBuffersTransferData[2] = 49; - gBattleBuffersTransferData[3] = 49; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void dp01_build_cmdbuf_x32_32_32_32(u8 a) -{ - gBattleBuffersTransferData[0] = 50; - gBattleBuffersTransferData[1] = 50; - gBattleBuffersTransferData[2] = 50; - gBattleBuffersTransferData[3] = 50; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitSpriteInvisibility(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 51; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = 51; - gBattleBuffersTransferData[3] = 51; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitBattleAnimation(u8 a, u8 b, u16 c) -{ - gBattleBuffersTransferData[0] = 52; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 4); -} - -void EmitLinkStandbyMsg(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 53; - gBattleBuffersTransferData[1] = b; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); -} - -void EmitResetActionMoveSelection(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 54; - gBattleBuffersTransferData[1] = b; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); -} - -void dp01_build_cmdbuf_x37_a(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 55; - gBattleBuffersTransferData[1] = b; - dp01_prepare_buffer(a, gBattleBuffersTransferData, 2); -} diff --git a/src/rom4.c b/src/rom4.c deleted file mode 100644 index f9006efba..000000000 --- a/src/rom4.c +++ /dev/null @@ -1,2573 +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_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 "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 u16 gUnknown_02029814 = 0; -EWRAM_DATA bool8 gUnknown_02029816 = 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 EventScript_LeagueWhiteOut[]; -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 gUnknown_0839ACE8; -extern u32 gUnknown_08216694[]; - -void DoWhiteOut(void) -{ - ScriptContext2_RunNewScript(EventScript_LeagueWhiteOut); - 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 new_game(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); - sub_8054164(); - 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)); -} - -void sub_8053198(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) -{ - s32 i; - for (i = 0; i < 64; i++) - { - struct MapObjectTemplate *mapObjectTemplate = &gSaveBlock1.mapObjectTemplates[i]; - if (mapObjectTemplate->localId == localId) - { - mapObjectTemplate->x = x; - mapObjectTemplate->y = y; - break; - } - } -} - -void update_saveblock1_field_object_movement_behavior(u8 localId, u8 movementType) -{ - s32 i = 0; - struct MapObjectTemplate *mapObjectTemplate = gSaveBlock1.mapObjectTemplates; - do - { - if (mapObjectTemplate->localId == localId) - { - mapObjectTemplate->movementType = movementType; - break; - } - mapObjectTemplate++; - i++; - } while (i < 64); -} - -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(); -} - -struct MapData *get_mapdata_header(void) -{ - u16 mapDataId = gSaveBlock1.mapDataId; - if (mapDataId) - return gMapAttributes[mapDataId - 1]; - return NULL; -} - -void warp_shift(void) -{ - gUnknown_020297F0 = gSaveBlock1.location; - gSaveBlock1.location = gUnknown_020297F8; - gUnknown_02029800 = gDummyWarpData; - gUnknown_02029808 = gDummyWarpData; -} - -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; -} - -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 get_mapheader_by_bank_and_number(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); -} - -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(); -} - -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(); -} - -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 = 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) - 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) - { - 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(); - sub_8054164(); - sub_8053C98(); - 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_light_level_1_2_3_5_or_6(gMapHeader.mapType); - v3 = is_light_level_8_or_9(gMapHeader.mapType); - ClearTempFieldEventData(); - ResetCyclingRoadChallengeData(); - prev_quest_postbuffer_cursor_backup_reset(); - sub_8082BD0(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); - if (a1 != 1) - DoTimeBasedEvents(); - sub_80806E4(); - sub_8054164(); - if (v2) - FlagReset(SYS_USE_FLASH); - sub_8053C98(); - 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 light = sav1_map_get_light_level(); - u16 v2 = cur_mapdata_block_role_at_screen_center_acc_to_sav1(); - u8 v4 = sub_8053B00(&gUnknown_02029810, v2, light); - playerStruct.player_field_0 = v4; - playerStruct.player_field_1 = sub_8053B60(&gUnknown_02029810, v4, v2, light); - 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 (IsBikingAllowedByMap() != 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 IsBikingAllowedByMap(void) -{ - // is player in cycling road entrance? - if (gSaveBlock1.location.mapGroup == 29 && (gSaveBlock1.location.mapNum == 11 || gSaveBlock1.location.mapNum == 12)) - 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; - - // is player in SeafloorCavern_Room9? - if (gSaveBlock1.location.mapGroup == 24 && gSaveBlock1.location.mapNum == 36) - return FALSE; - - // is player in CaveOfOrigin_B4F? - if (gSaveBlock1.location.mapGroup == 24 && gSaveBlock1.location.mapNum == 42) - return FALSE; - - return TRUE; -} - -void sub_8053C98(void) -{ - if (!gMapHeader.cave) - gSaveBlock1.flashUsed = 0; - else if (FlagGet(SYS_USE_FLASH)) - gSaveBlock1.flashUsed = 1; - else - gSaveBlock1.flashUsed = gUnknown_0839ACE8; -} - -void sub_8053CE4(s32 a1) -{ - if (a1 < 0 || a1 > gUnknown_0839ACE8) - a1 = 0; - gSaveBlock1.flashUsed = a1; -} - -u8 sav1_get_flash_used_on_map(void) -{ - return gSaveBlock1.flashUsed; -} - -void sub_8053D14(u16 mapDataId) -{ - gSaveBlock1.mapDataId = mapDataId; - gMapHeader.mapData = get_mapdata_header(); -} - -bool16 sub_8053D30(struct WarpData *warp) -{ - if (!FlagGet(SYS_WEATHER_CTRL)) - return FALSE; - if (warp->mapGroup != 0) - return FALSE; - switch (warp->mapNum) - { - case 5: - case 6: - case 7: - case 8: - return TRUE; - case 39: - case 40: - case 41: - case 42: - case 43: - return TRUE; - } - return FALSE; -} - -bool16 sub_8053D6C(struct WarpData *warp) -{ - if (VarGet(0x40B3)) - return FALSE; - if (warp->mapGroup != 32) - return FALSE; - if (warp->mapNum == 0 || warp->mapNum == 1) - return TRUE; - return FALSE; -} - -u16 sub_8053D9C(struct WarpData *warp) -{ - if (sub_8053D30(warp) == TRUE) - return LEGENDARY_MUSIC; - else if (sub_8053D6C(warp) == TRUE) - return BGM_TOZAN; - else - return get_mapheader_by_bank_and_number(warp->mapGroup, warp->mapNum)->music; -} - -u16 sav1_map_get_music(void) -{ - u16 music; - - if (gSaveBlock1.location.mapGroup == 0 - && gSaveBlock1.location.mapNum == 26 - && GetSav1Weather() == 8) - return BGM_ASHROAD; - - music = sub_8053D9C(&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 = sub_8053D9C(&gUnknown_020297F8); - if (music != 0x7FFF) - { - return music; - } - else - { - if (gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 2) - 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 (sav1_map_get_light_level() == 5) - 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 sub_8053FB0(u16 music) -{ - u16 currentMusic = GetCurrentMapMusic(); - if (currentMusic != music && currentMusic != LEGENDARY_MUSIC) - FadeOutAndPlayNewMapMusic(music, 8); -} - -u8 is_warp1_light_level_8_or_9(void) -{ - struct MapHeader *mapHeader = warp1_get_mapheader(); - if (is_light_level_8_or_9(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 = is_warp1_light_level_8_or_9(); - FadeOutMapMusic(speed); - } -} - -bool8 sub_8054034(void) -{ - return IsNotWaitingForBGMStop(); -} - -void sub_8054044(void) -{ - FadeOutMapMusic(4); -} - -void sub_8054050(void) -{ - s16 x, y; - PlayerGetDestCoords((u16 *)&x, (u16 *)&y); - if (gUnknown_02029816 != TRUE - || MetatileBehavior_IsSurfableWaterOrUnderwater(MapGridGetMetatileBehaviorAt(x, y))) - { - s8 pan = (Random() % 88) + 212; - s8 volume = (Random() % 30) + 50; - PlayCry2(gUnknown_02029814, pan, volume, 1); - } -} - -void sub_80540D0(s16 *a1, u16 *a2) -{ - switch (*a1) - { - case 0: - if (!gUnknown_02029814) - *a1 = 4; - else - *a1 = 1; - break; - case 1: - *a2 = (Random() % 2400) + 1200; - *a1 = 3; - break; - case 2: - *a2 = (Random() % 1200) + 1200; - *a1 = 3; - break; - case 3: - (*a2)--; - if (*a2 == 0) - { - sub_8054050(); - *a1 = 2; - } - break; - case 4: - break; - } -} - -void sub_8054164(void) -{ - if ((gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 45) && !IsMirageIslandPresent()) - { - gUnknown_02029816 = TRUE; - gUnknown_02029814 = GetMirageIslandMon(); - } - else - { - gUnknown_02029814 = GetLocalWildMon(&gUnknown_02029816); - } -} - -u8 get_map_light_level_by_bank_and_number(s8 mapGroup, s8 mapNum) -{ - return get_mapheader_by_bank_and_number(mapGroup, mapNum)->mapType; -} - -u8 get_map_light_level_from_warp(struct WarpData *warp) -{ - return get_map_light_level_by_bank_and_number(warp->mapGroup, warp->mapNum); -} - -u8 sav1_map_get_light_level(void) -{ - return get_map_light_level_from_warp(&gSaveBlock1.location); -} - -u8 get_map_light_from_warp0(void) -{ - return get_map_light_level_from_warp(&gUnknown_020297F0); -} - -bool8 is_light_level_1_2_3_5_or_6(u8 a1) -{ - if (a1 == 3 || a1 == 1 || a1 == 5 || a1 == 2 || a1 == 6) - return TRUE; - else - return FALSE; -} - -bool8 is_light_level_1_2_3_or_6(u8 a1) -{ - if (a1 == 3 || a1 == 1 || a1 == 6 || a1 == 2) - return TRUE; - else - return FALSE; -} - -bool8 is_light_level_8_or_9(u8 a1) -{ - if (a1 == 8 || a1 == 9) - return TRUE; - else - return FALSE; -} - -u8 unref_sub_8054260(void) -{ - return get_mapheader_by_bank_and_number(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; -} - -u8 sav1_map_get_battletype(void) -{ - return get_mapheader_by_bank_and_number(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 c2_overworld_basic(void) -{ - ScriptContext2_RunScript(); - RunTasks(); - AnimateSprites(); - CameraUpdate(); - UpdateCameraPanning(); - BuildOamBuffer(); - UpdatePaletteFade(); - sub_8072EDC(); -} - -void sub_8054398(void) -{ - c2_overworld_basic(); -} - -void c2_overworld(void) -{ - int fading = (gPaletteFade.active != 0); - if (fading) - SetVBlankCallback(NULL); - c2_overworld_basic(); - 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_(); - sub_805338C(); - sub_8053198(); - 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 = sav1_get_flash_used_on_map(); - 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 deleted file mode 100644 index ff032b6c2..000000000 --- a/src/rom6.c +++ /dev/null @@ -1,202 +0,0 @@ -#include "global.h" -#include "rom6.h" -#include "braille_puzzles.h" -#include "field_effect.h" -#include "field_map_obj.h" -#include "field_player_avatar.h" -#include "item_use.h" -#include "pokemon_menu.h" -#include "rom4.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "task.h" - -extern u16 gScriptLastTalked; -extern void (*gFieldCallback)(void); -extern u8 gLastFieldPokeMenuOpened; -extern void (*gUnknown_03005CE4)(void); -extern u8 UseRockSmashScript[]; - -EWRAM_DATA struct MapPosition gUnknown_0203923C = {0}; - -static void task08_080C9820(u8); -static void sub_810B3DC(u8); -static void sub_810B428(u8); -static void sub_810B4CC(u8); -static void sub_810B53C(void); -static void sub_810B58C(void); -static void sub_810B5D8(void); -static void sub_810B634(void); - -bool8 npc_before_player_of_type(u8 a) -{ - u8 mapObjId; - - GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203923C.x, &gUnknown_0203923C.y); - gUnknown_0203923C.height = PlayerGetZCoord(); - mapObjId = GetFieldObjectIdByXYZ(gUnknown_0203923C.x, gUnknown_0203923C.y, gUnknown_0203923C.height); - if (gMapObjects[mapObjId].graphicsId != a) - { - return FALSE; - } - else - { - gScriptLastTalked = gMapObjects[mapObjId].localId; - return TRUE; - } -} - -u8 oei_task_add(void) -{ - GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203923C.x, &gUnknown_0203923C.y); - return CreateTask(task08_080C9820, 8); -} - -static void task08_080C9820(u8 taskId) -{ - u8 mapObjId; - - ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; - mapObjId = gPlayerAvatar.mapObjectId; - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(&gMapObjects[mapObjId]) - || FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId])) - { - if (gMapHeader.mapType == 5) - { - FieldEffectStart(0x3B); - gTasks[taskId].func = sub_810B428; - } - else - { - sub_8059BF4(); - FieldObjectSetSpecialAnim(&gMapObjects[mapObjId], 0x39); - gTasks[taskId].func = sub_810B3DC; - } - } -} - -static void sub_810B3DC(u8 taskId) -{ - if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[gPlayerAvatar.mapObjectId]) == TRUE) - { - FieldEffectStart(0x3B); - gTasks[taskId].func = sub_810B428; - } -} - -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; - sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByCurrentState()); - StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gUnknown_0202FF84[2]); - FieldEffectActiveListRemove(6); - gTasks[taskId].func = sub_810B4CC; - } -} - -static void sub_810B4CC(u8 taskId) -{ - void (*func)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]); - - func(); - gPlayerAvatar.unk6 = 0; - DestroyTask(taskId); -} - -bool8 SetUpFieldMove_RockSmash(void) -{ - if (npc_before_player_of_type(0x56) == TRUE) - { - gFieldCallback = sub_808AB90; - gUnknown_03005CE4 = sub_810B53C; - return TRUE; - } - else - { - return FALSE; - } -} - -static void sub_810B53C(void) -{ - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; - ScriptContext1_SetupScript(UseRockSmashScript); -} - -int FldEff_RockSmash(void) -{ - u8 taskId = oei_task_add(); - - gTasks[taskId].data[8] = (u32)sub_810B58C >> 16; - gTasks[taskId].data[9] = (u32)sub_810B58C; - IncrementGameStat(0x13); - return 0; -} - -static void sub_810B58C(void) -{ - PlaySE(SE_W088); - FieldEffectActiveListRemove(0x25); - EnableBothScriptContexts(); -} - -int SetUpFieldMove_Dig(void) -{ - if (sub_80CA1C8() == TRUE) - { - gFieldCallback = sub_808AB90; - gUnknown_03005CE4 = sub_810B5D8; - return TRUE; - } - else - { - return FALSE; - } -} - -static void sub_810B5D8(void) -{ - sub_8053014(); - FieldEffectStart(0x26); - gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened; -} - -int FldEff_UseDig(void) -{ - u8 taskId = oei_task_add(); - - gTasks[taskId].data[8] = (u32)sub_810B634 >> 16; - gTasks[taskId].data[9] = (u32)sub_810B634; - if (!ShouldDoBrailleDigEffect()) - SetPlayerAvatarTransitionFlags(1); - return 0; -} - -static void sub_810B634(void) -{ - u8 taskId; - - FieldEffectActiveListRemove(0x26); - if (ShouldDoBrailleDigEffect()) - { - DoBrailleDigEffect(); - } - else - { - taskId = CreateTask(task08_080A1C44, 8); - gTasks[taskId].data[0] = 0; - } -} diff --git a/src/rom_800D42C.c b/src/rom_800D42C.c deleted file mode 100644 index f51779e65..000000000 --- a/src/rom_800D42C.c +++ /dev/null @@ -1,118 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "link.h" -#include "text.h" - -extern u16 gBattleTypeFlags; -extern u8 gBattleOutcome; - -extern struct Window gUnknown_03004210; - -extern u8 BattleText_Win[]; -extern u8 BattleText_Loss[]; -extern u8 BattleText_Tie[]; - -#if ENGLISH -#define LEFT_MESSAGE_X 6 -#define RIGHT_MESSAGE_X 21 -#define TILE_OFFSET_LOSS 168 -#elif GERMAN -#define LEFT_MESSAGE_X 5 -#define RIGHT_MESSAGE_X 20 -#define TILE_OFFSET_LOSS 172 -#endif -#define TILE_OFFSET_WIN 160 -#define CENTER_MESSAGE_X 13 -#define MESSAGE_Y 2 - -#define PRINT_MESSAGE(text, tileDataStartOffset, x) \ -{ \ - InitWindow(&gUnknown_03004210, text, tileDataStartOffset, x, MESSAGE_Y); \ - sub_8002F44(&gUnknown_03004210); \ -} - -#define PRINT_MESSAGE_LEFT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, LEFT_MESSAGE_X) -#define PRINT_MESSAGE_RIGHT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, RIGHT_MESSAGE_X) - -void PrintLinkBattleWinLossTie(void) -{ - - if (gBattleOutcome == 3) - { - PRINT_MESSAGE(BattleText_Tie, TILE_OFFSET_WIN, CENTER_MESSAGE_X); - return; - } - - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - // Double battle? - - if (gBattleOutcome == 1) - { - - // lp_field_18 = player position? - switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18) - { - case 0: - case 2: - PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); - return; - - case 1: - case 3: - PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN) - PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS) - return; - } - } - else - { - - switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18) - { - case 1: - case 3: - PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); - return; - - case 0: - case 2: - PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); - return; - } - } - - return; - } - - - if (gBattleOutcome == 1) - { - if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0) - { - PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); - } - else - { - PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); - } - } - else - { - if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0) - { - PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); - } - else - { - PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); - } - } -} diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c deleted file mode 100644 index 249146b37..000000000 --- a/src/rom_8077ABC.c +++ /dev/null @@ -1,2055 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "battle.h" -#include "battle_anim.h" -#include "blend_palette.h" -#include "data2.h" -#include "decompress.h" -#include "palette.h" -#include "pokemon_icon.h" -#include "species.h" -#include "sprite.h" -#include "task.h" -#include "trig.h" -#include "util.h" - -#define GET_UNOWN_LETTER(personality) ((\ - (((personality & 0x03000000) >> 24) << 6) \ - | (((personality & 0x00030000) >> 16) << 4) \ - | (((personality & 0x00000300) >> 8) << 2) \ - | (((personality & 0x00000003) >> 0) << 0) \ -) % 28) - -#define IS_DOUBLE_BATTLE() ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? TRUE : FALSE) - -#define NUM_BATTLE_SLOTS 4 - -#define gBattleMonPartyPositions gBattlePartyID -#define gCastformElevations gUnknownCastformData_0837F5A8 -#define gCastformBackSpriteYCoords gUnknown_0837F5AC -#define gTransformPersonalities gPID_perBank -#define gBattleMonSprites gObjectBankIDs - - -struct Struct_unk_2019348 { - u16 field_0; - u16 field_2; - u8 field_4; - u32 field_8; - u32 field_c; - u32 field_10; -}; - -struct TransformStatus { - u16 unknown; - u16 species; -}; - -struct Struct_gUnknown_0837F578 { - u8 field_0; - u8 field_1; -}; - -struct OamMatrix { - s16 a; - s16 b; - s16 c; - s16 d; -}; - -struct Struct_2017810 { - u8 filler_0[6]; - u8 field_6; - u8 filler_7[5]; -}; - -struct Color { - u16 r:5; - u16 g:5; - u16 b:5; -}; - -struct Struct_sub_8078914 { - u8 *field_0; - u8 *field_4; - u8 field_8; -}; - -struct BGCnt { - u16 priority:2; - u16 charBase:2; - u16 unused:2; - u16 mosaic:1; - u16 colorMode:1; - u16 screenBase:5; - u16 overflow:1; - u16 size:2; -}; - -#define BG1CNT (*(volatile struct BGCnt*)REG_ADDR_BG1CNT) -#define BG2CNT (*(volatile struct BGCnt*)REG_ADDR_BG2CNT) -#define BG3CNT (*(volatile struct BGCnt*)REG_ADDR_BG3CNT) - -extern struct OamData gOamData_837DF9C[]; -extern const union AnimCmd *const gDummySpriteAnimTable[]; -extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; - -extern struct Struct_unk_2019348 unk_2019348; -extern struct TransformStatus gTransformStatuses[]; -extern u16 gBattleMonPartyPositions[]; -extern u16 gBattleTypeFlags; -extern u32 gTransformPersonalities[NUM_BATTLE_SLOTS]; -extern u8 gBattleMonForms[NUM_BATTLE_SLOTS]; -extern u16 gUnknown_0202F7CA[]; -extern u8 gBattleMonSprites[NUM_BATTLE_SLOTS]; -extern u8 gBattleAnimPlayerMonIndex; -extern u8 gBattleAnimEnemyMonIndex; -extern s16 gBattleAnimArgs[8]; -extern u8 gBanksBySide[NUM_BATTLE_SLOTS]; -extern u8 gNoOfAllBanks; // gNumBattleMons? -extern struct OamMatrix gOamMatrices[]; -extern struct Struct_2017810 unk_2017810[]; -extern u8 gHappinessMoveAnim; - -EWRAM_DATA union AffineAnimCmd *gUnknown_0202F7D4 = NULL; -EWRAM_DATA u32 filler_0202F7D8[3] = {0}; - -const struct Struct_gUnknown_0837F578 gUnknown_0837F578[][4] = { - { - { 72, 80 }, - { 176, 40 }, - { 48, 40 }, - { 112, 80 }, - }, - { - { 32, 80 }, - { 200, 40 }, - { 90, 88 }, - { 152, 32 }, - }, -}; - -// One entry for each of the four Castform forms. -// Coords are probably front pic coords or back pic coords, but this data does not seem to be -// used during battle, party summary, or pokedex screens. -const struct MonCoords gCastformFrontSpriteCoords[] = { - { 0x44, 17 }, // NORMAL - { 0x66, 9 }, // SUN - { 0x46, 9 }, // RAIN - { 0x86, 8 }, // HAIL -}; - -const u8 gCastformElevations[] = { - 13, // NORMAL - 14, // SUN - 13, // RAIN - 13, // HAIL -}; - -// Y position of the backsprite for each of the four Castform forms. -const u8 gCastformBackSpriteYCoords[] = { - 0, // NORMAL - 0, // SUN - 0, // RAIN - 0, // HAIL -}; - -const struct SpriteTemplate gSpriteTemplate_837F5B0[] = { - { - .tileTag = 55125, - .paletteTag = 55125, - .oam = gOamData_837DF9C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, { - .tileTag = 55126, - .paletteTag = 55126, - .oam = gOamData_837DF9C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - } -}; - -const struct SpriteSheet gUnknown_0837F5E0[] = { - { gMiscBlank_Gfx, 0x800, 55125, }, - { gMiscBlank_Gfx, 0x800, 55126, }, -}; - - -u8 sub_8077ABC(u8 slot, u8 a2) { - u8 var; - u16 species; - struct TransformStatus *transform; - - if (IsContest()) { - if (a2 == 3 && slot == 3) { - a2 = 1; - } - } - switch (a2) { - case 0: - case 2: - var = gUnknown_0837F578[IS_DOUBLE_BATTLE()][GetBankIdentity(slot)].field_0; - break; - case 1: - var = gUnknown_0837F578[IS_DOUBLE_BATTLE()][GetBankIdentity(slot)].field_1; - break; - case 3: - case 4: - default: - if (IsContest()) { - if (unk_2019348.field_4 & 1) { - species = unk_2019348.field_2; - } else { - species = unk_2019348.field_0; - } - } else { - if (GetBankSide(slot)) { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); - } else { - species = transform->species; - } - } else { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); - } else { - species = transform->species; - } - } - } - if (a2 == 3) { - var = sub_8077E44(slot, species, 1); - } else { - var = sub_8077E44(slot, species, 0); - } - break; - } - return var; -} - -u8 sub_8077BFC(u8 slot, u16 species) { - u16 letter; - u32 personality; - struct TransformStatus *transform; - u8 ret; - u16 var; - - if (!GetBankSide(slot) || IsContest()) { - if (species == SPECIES_UNOWN) { - if (IsContest()) { - if (unk_2019348.field_4 & 1) { - personality = unk_2019348.field_10; - } else { - personality = unk_2019348.field_8; - } - } else { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - personality = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); - } else { - personality = gTransformPersonalities[slot]; - } - } - letter = GET_UNOWN_LETTER(personality); - if (!letter) { - var = species; - } else { - var = letter + SPECIES_UNOWN_B - 1; - } - ret = gMonBackPicCoords[var].y_offset; - } else if (species == SPECIES_CASTFORM) { - ret = gCastformBackSpriteYCoords[gBattleMonForms[slot]]; - } else if (species > NUM_SPECIES) { - ret = gMonBackPicCoords[0].y_offset; - } else { - ret = gMonBackPicCoords[species].y_offset; - } - } else { - if (species == SPECIES_UNOWN) { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - personality = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); - } else { - personality = gTransformPersonalities[slot]; - } - letter = GET_UNOWN_LETTER(personality); - if (!letter) { - var = species; - } else { - var = letter + SPECIES_UNOWN_B - 1; - } - ret = gMonFrontPicCoords[var].y_offset; - } else if (species == SPECIES_CASTFORM) { - ret = gCastformFrontSpriteCoords[gBattleMonForms[slot]].y_offset; - } else if (species > NUM_SPECIES) { - ret = gMonFrontPicCoords[0].y_offset; - } else { - ret = gMonFrontPicCoords[species].y_offset; - } - } - return ret; -} - -u8 sub_8077DD8(u8 slot, u16 species) { - u8 ret = 0; - if (GetBankSide(slot) == 1) { - if (!IsContest()) { - if (species == SPECIES_CASTFORM) { - ret = gCastformElevations[gBattleMonForms[slot]]; - } else if (species > NUM_SPECIES) { - ret = gEnemyMonElevation[0]; - } else { - ret = gEnemyMonElevation[species]; - } - } - } - return ret; -} - -u8 sub_8077E44(u8 slot, u16 species, u8 a3) { - u16 offset; - u8 y; - if (GetBankSide(slot) == 0 || IsContest()) { - offset = sub_8077BFC(slot, species); - } else { - offset = sub_8077BFC(slot, species); - offset -= sub_8077DD8(slot, species); - } - y = offset + gUnknown_0837F578[IS_DOUBLE_BATTLE()][GetBankIdentity(slot)].field_1; - if (a3) { - if (GetBankSide(slot) == 0) { - y += 8; - } - if (y > 104) y = 104; - } - return y; -} - -u8 sub_8077EE4(u8 slot, u8 a2) { - u16 species; - struct TransformStatus *transform; - if (a2 == 3 || a2 == 4) { - if (IsContest()) { - if (unk_2019348.field_4 & 1) { - species = unk_2019348.field_2; - } else { - species = unk_2019348.field_0; - } - } else { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - species = gUnknown_0202F7CA[slot]; - } else { - species = transform->species; - } - } - if (a2 == 3) { - return sub_8077E44(slot, species, 1); - } else { - return sub_8077E44(slot, species, 0); - } - } else { - return sub_8077ABC(slot, a2); - } -} - -u8 sub_8077F68(u8 slot) { - return sub_8077ABC(slot, 4); -} - -u8 sub_8077F7C(u8 slot) { - u16 var; - if (GetBankSide(slot)) { - var = sub_8077ABC(slot, 1) + 16; - } else { - var = sub_8077ABC(slot, 1) + 17; - } - return var; -} - -u8 sub_8077FC0(u8 slot) { - u16 var; - u8 r6; - struct TransformStatus *transform; - r6 = sub_8077ABC(slot, 1); - if (!IsContest()) { - if (GetBankSide(slot)) { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - var = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); - } else { - var = transform->species; - } - } else { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - var = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); - } else { - var = transform->species; - } - } - if (GetBankSide(slot)) { - r6 -= sub_8077DD8(slot, var); - } - } - return r6; -} - -u8 obj_id_for_side_relative_to_move(u8 a1) { - u8 *sprites; - if (a1 == 0) { - if (sub_8078874(gBattleAnimPlayerMonIndex)) { - sprites = gBattleMonSprites; - return sprites[gBattleAnimPlayerMonIndex]; - } else { - return 0xff; - } - } else if (a1 == 1) { - if (sub_8078874(gBattleAnimEnemyMonIndex)) { - sprites = gBattleMonSprites; - return sprites[gBattleAnimEnemyMonIndex]; - } else { - return 0xff; - } - } else if (a1 == 2) { - if (!b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) { - return 0xff; - } else { - return gBattleMonSprites[gBattleAnimPlayerMonIndex ^ 2]; - } - } else { - if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) { - return gBattleMonSprites[gBattleAnimEnemyMonIndex ^ 2]; - } else { - return 0xff; - } - } -} - -void oamt_set_x3A_32(struct Sprite *sprite, void (*callback)(struct Sprite*)) { - sprite->data6 = (u32)(callback) & 0xffff; - sprite->data7 = (u32)(callback) >> 16; -} - -void sub_8078104(struct Sprite *sprite) { - u32 callback = (u16)sprite->data6 | (sprite->data7 << 16); - sprite->callback = (void (*)(struct Sprite *))callback; -} - -void sub_8078114(struct Sprite *sprite) { - if (sprite->data3) { - sprite->pos2.x = Sin(sprite->data0, sprite->data1); - sprite->pos2.y = Cos(sprite->data0, sprite->data1); - sprite->data0 += sprite->data2; - if (sprite->data0 >= 0x100) { - sprite->data0 -= 0x100; - } else if (sprite->data0 < 0) { - sprite->data0 += 0x100; - } - sprite->data3--; - } else { - sub_8078104(sprite); - } -} - -void sub_8078174(struct Sprite *sprite) { - if (sprite->data3) { - sprite->pos2.x = Sin(sprite->data0, (sprite->data5 >> 8) + sprite->data1); - sprite->pos2.y = Cos(sprite->data0, (sprite->data5 >> 8) + sprite->data1); - sprite->data0 += sprite->data2; - sprite->data5 += sprite->data4; - if (sprite->data0 >= 0x100) { - sprite->data0 -= 0x100; - } else if (sprite->data0 < 0) { - sprite->data0 += 0x100; - } - sprite->data3--; - } else { - sub_8078104(sprite); - } -} - -void unref_sub_80781F0(struct Sprite *sprite) { - if (sprite->data3) { - sprite->pos2.x = Sin(sprite->data0, sprite->data1); - sprite->pos2.y = Cos(sprite->data4, sprite->data1); - sprite->data0 += sprite->data2; - sprite->data4 += sprite->data5; - if (sprite->data0 >= 0x100) { - sprite->data0 -= 0x100; - } else if (sprite->data0 < 0) { - sprite->data0 += 0x100; - } - if (sprite->data4 >= 0x100) { - sprite->data4 -= 0x100; - } else if (sprite->data4 < 0) { - sprite->data4 += 0x100; - } - sprite->data3--; - } else { - sub_8078104(sprite); - } -} - -void sub_8078278(struct Sprite *sprite) { - if (sprite->data3) { - sprite->pos2.x = Sin(sprite->data0, sprite->data1); - sprite->pos2.y = Cos(sprite->data0, sprite->data4); - sprite->data0 += sprite->data2; - if (sprite->data0 >= 0x100) { - sprite->data0 -= 0x100; - } else if (sprite->data0 < 0) { - sprite->data0 += 0x100; - } - sprite->data3--; - } else { - sub_8078104(sprite); - } -} - -void sub_80782D8(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - } else { - sub_8078104(sprite); - } -} - -void sub_80782F8(struct Sprite *sprite) { - sub_8078314(sprite); - sprite->callback = sub_8078364; - sprite->callback(sprite); -} - -void sub_8078314(struct Sprite *sprite) { - s16 old; - int v1; - if (sprite->data1 > sprite->data2) { - sprite->data0 = -sprite->data0; - } - v1 = sprite->data2 - sprite->data1; - old = sprite->data0; - sprite->data0 = abs(v1 / sprite->data0); - sprite->data2 = (sprite->data4 - sprite->data3) / sprite->data0; - sprite->data1 = old; -} - -void sub_8078364(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->pos2.x += sprite->data1; - sprite->pos2.y += sprite->data2; - } else { - sub_8078104(sprite); - } -} - -void sub_8078394(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->data3 += sprite->data1; - sprite->data4 += sprite->data2; - sprite->pos2.x = sprite->data3 >> 8; - sprite->pos2.y = sprite->data4 >> 8; - } else { - sub_8078104(sprite); - } -} - -void sub_80783D0(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->data3 += sprite->data1; - sprite->data4 += sprite->data2; - sprite->pos2.x = sprite->data3 >> 8; - sprite->pos2.y = sprite->data4 >> 8; - } else { - sub_8078104(sprite); - } - UpdateMonIconFrame(sprite); -} - -void unref_sub_8078414(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x + sprite->pos2.x; - sprite->data3 = sprite->pos1.y + sprite->pos2.y; - sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); - sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); - sprite->callback = sub_80782F8; -} - -void sub_8078458(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - gSprites[sprite->data3].pos2.x += sprite->data1; - gSprites[sprite->data3].pos2.y += sprite->data2; - } else { - sub_8078104(sprite); - } -} - -void sub_80784A8(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->data3 += sprite->data1; - sprite->data4 += sprite->data2; - gSprites[sprite->data5].pos2.x = sprite->data3 >> 8; - gSprites[sprite->data5].pos2.y = sprite->data4 >> 8; - } else { - sub_8078104(sprite); - } -} - -void sub_8078504(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->pos2.x = sprite->data2 >> 8; - sprite->data2 += sprite->data1; - sprite->pos2.y = sprite->data4 >> 8; - sprite->data4 += sprite->data3; - if (sprite->data0 % sprite->data5 == 0) { - if (sprite->data5) { - sprite->invisible ^= 1; - } - } - } else { - sub_8078104(sprite); - } -} - -void move_anim_8074EE0(struct Sprite *sprite) { - FreeSpriteOamMatrix(sprite); - move_anim_8072740(sprite); -} - -void unref_sub_8078588(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x + sprite->pos2.x; - sprite->data3 = sprite->pos1.y + sprite->pos2.y; - sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); - sprite->callback = sub_80782F8; -} - -void unref_sub_80785CC(struct Sprite *sprite) { - ResetPaletteStructByUid(sprite->data5); - move_anim_8074EE0(sprite); -} - -void sub_80785E4(struct Sprite *sprite) { - if (sprite->affineAnimEnded) { - sub_8078104(sprite); - } -} - -void sub_8078600(struct Sprite *sprite) { - if (sprite->animEnded) { - sub_8078104(sprite); - } -} - -void sub_807861C(struct Sprite *sprite) { - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - move_anim_8072740(sprite); -} - -void sub_8078634(u8 task) { - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - DestroyAnimVisualTask(task); -} - -void sub_8078650(struct Sprite *sprite) { - sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); -} - -void sub_807867C(struct Sprite *sprite, s16 a2) { - u16 v1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 0); - u16 v2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 0); - if (v1 > v2) { - sprite->pos1.x -= a2; - } else if (v1 < v2) { - sprite->pos1.x += a2; - } else { - if (GetBankSide(gBattleAnimPlayerMonIndex)) { - sprite->pos1.x -= a2; - } else { - sprite->pos1.x += a2; - } - } -} - -void sub_80786EC(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data6 = 0x8000 / sprite->data0; - sprite->data7 = 0; -} - -bool8 sub_8078718(struct Sprite *sprite) { - if (sub_8078B5C(sprite)) { - return TRUE; - } - sprite->data7 += sprite->data6; - sprite->pos2.y += Sin((u8)(sprite->data7 >> 8), sprite->data5); - return FALSE; -} - -void oamt_add_pos2_onto_pos1(struct Sprite *sprite) { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; -} - -void sub_8078764(struct Sprite *sprite, u8 a2) { - if (!a2) { - sprite->pos1.x = sub_8077EE4(gBattleAnimEnemyMonIndex, 0); - sprite->pos1.y = sub_8077EE4(gBattleAnimEnemyMonIndex, 1); - } - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; -} - -void sub_80787B0(struct Sprite *sprite, u8 a2) { - if (!a2) { - sprite->pos1.x = sub_8077EE4(gBattleAnimPlayerMonIndex, 0); - sprite->pos1.y = sub_8077EE4(gBattleAnimPlayerMonIndex, 1); - } else { - sprite->pos1.x = sub_8077EE4(gBattleAnimPlayerMonIndex, 2); - sprite->pos1.y = sub_8077EE4(gBattleAnimPlayerMonIndex, 3); - } - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; -} - -u8 GetBankSide(u8 slot) { - return gBanksBySide[slot] & 1; -} - -u8 GetBankIdentity(u8 slot) { - return gBanksBySide[slot]; -} - -u8 GetBankByPlayerAI(u8 slot) { - u8 i; - for (i = 0; i < gNoOfAllBanks; i++) { - if (gBanksBySide[i] == slot) { - break; - } - } - return i; -} - -bool8 sub_8078874(u8 slot) { - if (IsContest()) { - if (gBattleAnimPlayerMonIndex == slot) { - return TRUE; - } - if (gBattleAnimEnemyMonIndex == slot) { - return TRUE; - } - return FALSE; - } else { - if (gBanksBySide[slot] == 0xff) { - return FALSE; - } - if (GetBankSide(slot)) { - if (GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_HP) != 0) { - return TRUE; - } - } else { - if (GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_HP) != 0) { - return TRUE; - } - } - return FALSE; - } -} - -bool8 IsDoubleBattle() { - return IS_DOUBLE_BATTLE(); -} - -void sub_8078914(struct Struct_sub_8078914 *unk) { - if (IsContest()) { - unk->field_0 = (u8 *)0x6008000; - unk->field_4 = (u8 *)0x600f000; - unk->field_8 = 0xe; - } else { - unk->field_0 = (u8 *)0x6004000; - unk->field_4 = (u8 *)0x600e000; - unk->field_8 = 0x8; - } -} - -void sub_8078954(struct Struct_sub_8078914 *unk) { - if (IsContest()) { - unk->field_0 = (u8 *)0x6008000; - unk->field_4 = (u8 *)0x600f000; - unk->field_8 = 0xe; - } else if (GetBankIdentity_permutated(gBattleAnimPlayerMonIndex) == 1) { - unk->field_0 = (u8 *)0x6004000; - unk->field_4 = (u8 *)0x600e000; - unk->field_8 = 0x8; - } else { - unk->field_0 = (u8 *)0x6006000; - unk->field_4 = (u8 *)0x600f000; - unk->field_8 = 0x9; - } -} - -u8 sub_80789BC() { - if (IsContest()) { - return 1; - } - return 2; -} - -void sub_80789D4(bool8 a1) { - if (!a1) { - BG3CNT.size = 0; - BG3CNT.overflow = 1; - } else if (IsContest()) { - BG3CNT.size = 0; - BG3CNT.overflow = 1; - } else { - BG3CNT.size = 1; - BG3CNT.overflow = 0; - } -} - -void sub_8078A34(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - sub_8078A5C(sprite); - sprite->callback = sub_80783D0; - sprite->callback(sprite); -} - -void sub_8078A5C(struct Sprite *sprite) { - s16 x = (sprite->data2 - sprite->data1) << 8; - s16 y = (sprite->data4 - sprite->data3) << 8; - sprite->data1 = x / sprite->data0; - sprite->data2 = y / sprite->data0; - sprite->data4 = 0; - sprite->data3 = 0; -} - -void obj_translate_based_on_private_1_2_3_4(struct Sprite *sprite) { - int x = sprite->data2 - sprite->data1; - int y = sprite->data4 - sprite->data3; - bool8 r8 = x < 0; - bool8 r9 = y < 0; - u16 x2 = abs(x) << 8; - u16 y2 = abs(y) << 8; - x2 = x2 / sprite->data0; - y2 = y2 / sprite->data0; - if (r8) { - x2 |= 1; - } else { - x2 &= ~1; - } - if (r9) { - y2 |= 1; - } else { - y2 &= ~1; - } - sprite->data1 = x2; - sprite->data2 = y2; - sprite->data4 = 0; - sprite->data3 = 0; -} - -void sub_8078B34(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->callback = sub_8078BB8; - sprite->callback(sprite); -} - -bool8 sub_8078B5C(struct Sprite *sprite) { - u16 v1, v2, x, y; - if (!sprite->data0) { - return TRUE; - } - v1 = sprite->data1; - v2 = sprite->data2; - x = sprite->data3; - y = sprite->data4; - x += v1; - y += v2; - if (v1 & 1) { - sprite->pos2.x = -(x >> 8); - } else { - sprite->pos2.x = x >> 8; - } - if (v2 & 1) { - sprite->pos2.y = -(y >> 8); - } else { - sprite->pos2.y = y >> 8; - } - sprite->data3 = x; - sprite->data4 = y; - sprite->data0--; - return FALSE; -} - -void sub_8078BB8(struct Sprite *sprite) { - if (sub_8078B5C(sprite)) { - sub_8078104(sprite); - } -} - -void sub_8078BD4(struct Sprite *sprite) { - int v1 = abs(sprite->data2 - sprite->data1) << 8; - sprite->data0 = v1 / sprite->data0; - obj_translate_based_on_private_1_2_3_4(sprite); -} - -void sub_8078C00(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - sub_8078BD4(sprite); - sprite->callback = sub_8078BB8; - sprite->callback(sprite); -} - -void sub_8078C28(struct Sprite *sprite) { - int x = sprite->data2 - sprite->data1; - int y = sprite->data4 - sprite->data3; - bool8 x_sign = x < 0; - bool8 y_sign = y < 0; - u16 x2 = abs(x) << 4; - u16 y2 = abs(y) << 4; - x2 /= sprite->data0; - y2 /= sprite->data0; - if (x_sign) { - x2 |= 1; - } else { - x2 &= ~1; - } - if (y_sign) { - y2 |= 1; - } else { - y2 &= ~1; - } - sprite->data1 = x2; - sprite->data2 = y2; - sprite->data4 = 0; - sprite->data3 = 0; -} - -void sub_8078CC0(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - sub_8078C28(sprite); - sprite->callback = sub_8078D44; - sprite->callback(sprite); -} - -bool8 sub_8078CE8(struct Sprite *sprite) { - u16 v1, v2, x, y; - if (!sprite->data0) { - return TRUE; - } - v1 = sprite->data1; - v2 = sprite->data2; - x = sprite->data3; - y = sprite->data4; - x += v1; - y += v2; - if (v1 & 1) { - sprite->pos2.x = -(x >> 4); - } else { - sprite->pos2.x = x >> 4; - } - if (v2 & 1) { - sprite->pos2.y = -(y >> 4); - } else { - sprite->pos2.y = y >> 4; - } - sprite->data3 = x; - sprite->data4 = y; - sprite->data0--; - return FALSE; -} - -void sub_8078D44(struct Sprite *sprite) { - if (sub_8078CE8(sprite)) { - sub_8078104(sprite); - } -} - -void sub_8078D60(struct Sprite *sprite) { - int v1 = abs(sprite->data2 - sprite->data1) << 4; - sprite->data0 = v1 / sprite->data0; - sub_8078C28(sprite); -} - -void sub_8078D8C(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - sub_8078D60(sprite); - sprite->callback = sub_8078D44; - sprite->callback(sprite); -} - -void obj_id_set_rotscale(u8 sprite, s16 xScale, s16 yScale, u16 rotation) { - int i; - struct ObjAffineSrcData src; - struct OamMatrix matrix; - src.xScale = xScale; - src.yScale = yScale; - src.rotation = rotation; - if (sub_8078E38()) { - src.xScale = -src.xScale; - } - i = gSprites[sprite].oam.matrixNum; - ObjAffineSet(&src, &matrix, 1, 2); - gOamMatrices[i].a = matrix.a; - gOamMatrices[i].b = matrix.b; - gOamMatrices[i].c = matrix.c; - gOamMatrices[i].d = matrix.d; -} - -bool8 sub_8078E38() { - if (IsContest()) { - if (gSprites[obj_id_for_side_relative_to_move(0)].data2 == 0xc9 /* XXX SPECIES_UNOWN? */) { - return FALSE; - } - return TRUE; - } - return FALSE; -} - -void sub_8078E70(u8 sprite, u8 a2) { - struct Struct_2017810 *unk; - u8 r7 = gSprites[sprite].data0; - if (IsContest() || b_side_obj__get_some_boolean(r7)) { - gSprites[sprite].invisible = FALSE; - } - gSprites[sprite].oam.objMode = a2; - gSprites[sprite].affineAnimPaused = TRUE; - if (!IsContest() && !gSprites[sprite].oam.affineMode) { - unk = &unk_2017810[r7]; - gSprites[sprite].oam.matrixNum = unk->field_6; - } - gSprites[sprite].oam.affineMode = 3; - CalcCenterToCornerVec(&gSprites[sprite], gSprites[sprite].oam.shape, gSprites[sprite].oam.size, gSprites[sprite].oam.affineMode); -} - -void sub_8078F40(u8 sprite) { - obj_id_set_rotscale(sprite, 0x100, 0x100, 0); - gSprites[sprite].oam.affineMode = 1; - gSprites[sprite].oam.objMode = 0; - gSprites[sprite].affineAnimPaused = FALSE; - CalcCenterToCornerVec(&gSprites[sprite], gSprites[sprite].oam.shape, gSprites[sprite].oam.size, gSprites[sprite].oam.affineMode); -} - -void sub_8078F9C(u8 sprite) { - u16 matrix = gSprites[sprite].oam.matrixNum; - s16 c = gOamMatrices[matrix].c; - if (c < 0) { - c = -c; - } - gSprites[sprite].pos2.y = c >> 3; -} - -// related to obj_id_set_rotscale -void sub_8078FDC(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation) { - int i; - struct ObjAffineSrcData src; - struct OamMatrix matrix; - if (sprite->oam.affineMode & 1) { - sprite->affineAnimPaused = TRUE; - if (a2) { - CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); - } - src.xScale = xScale; - src.yScale = yScale; - src.rotation = rotation; - if (sub_8078E38()) { - src.xScale = -src.xScale; - } - i = sprite->oam.matrixNum; - ObjAffineSet(&src, &matrix, 1, 2); - gOamMatrices[i].a = matrix.a; - gOamMatrices[i].b = matrix.b; - gOamMatrices[i].c = matrix.c; - gOamMatrices[i].d = matrix.d; - } -} - -void sub_8079098(struct Sprite *sprite) { - sub_8078FDC(sprite, TRUE, 0x100, 0x100, 0); - sprite->affineAnimPaused = FALSE; - CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); -} - -u16 sub_80790D8(s16 a, s16 b) { - return ArcTan2(a, b); -} - -u16 sub_80790F0(s16 a, s16 b) { - u16 var = sub_80790D8(a, b); - return -var; -} - -void sub_8079108(u16 a1, bool8 a2) { - int i; - struct Color *c; - struct Color *c2; - u16 average; - - a1 *= 0x10; - - if (!a2) { - for (i = 0; i < 0x10; i++) { - c = (struct Color *)&gPlttBufferUnfaded[a1 + i]; - average = c->r + c->g + c->b; - average /= 3; - - c2 = (struct Color *)&gPlttBufferFaded[a1 + i]; - c2->r = average; - c2->g = average; - c2->b = average; - } - } else { - CpuCopy32(&gPlttBufferUnfaded[a1], &gPlttBufferFaded[a1], 0x20); - } -} - -u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) { - u32 var = 0; - u32 shift; - if (a1) { - if (!IsContest()) { - var = 0xe; - } else { - var = 1 << sub_80789BC(); - } - } - if (a2) { - shift = gBattleAnimPlayerMonIndex + 16; - var |= 1 << shift; - } - if (a3) { - shift = gBattleAnimEnemyMonIndex + 16; - var |= 1 << shift; - } - if (a4) { - if (b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) { - shift = (gBattleAnimPlayerMonIndex ^ 2) + 16; - var |= 1 << shift; - } - } - if (a5) { - if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) { - shift = (gBattleAnimEnemyMonIndex ^ 2) + 16; - var |= 1 << shift; - } - } - if (a6) { - if (!IsContest()) { - var |= 0x100; - } else { - var |= 0x4000; - } - } - if (a7) { - if (!IsContest()) { - var |= 0x200; - } - } - return var; -} - -u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4) { - u32 var = 0; - u32 shift; - if (IsContest()) { - if (a1) { - var |= 1 << 18; - return var; - } - } else { - if (a1) { - if (b_side_obj__get_some_boolean(GetBankByPlayerAI(0))) { - var |= 1 << (GetBankByPlayerAI(0) + 16); - } - } - if (a2) { - if (b_side_obj__get_some_boolean(GetBankByPlayerAI(2))) { - shift = GetBankByPlayerAI(2) + 16; - var |= 1 << shift; - } - } - if (a3) { - if (b_side_obj__get_some_boolean(GetBankByPlayerAI(1))) { - shift = GetBankByPlayerAI(1) + 16; - var |= 1 << shift; - } - } - if (a4) { - if (b_side_obj__get_some_boolean(GetBankByPlayerAI(3))) { - shift = GetBankByPlayerAI(3) + 16; - var |= 1 << shift; - } - } - } - return var; -} - -u8 sub_80793A8(u8 a1) { - return a1; -} - -u8 unref_sub_80793B0(u8 a1) { - return GetBankByPlayerAI(a1); -} - -void sub_80793C4(struct Sprite *sprite) { - bool8 var; - if (!sprite->data0) { - if (!gBattleAnimArgs[3]) { - var = TRUE; - } else { - var = FALSE; - } - if (!gBattleAnimArgs[2]) { - sub_80787B0(sprite, var); - } else { - sub_8078764(sprite, var); - } - sprite->data0++; - - } else if (sprite->animEnded || sprite->affineAnimEnded) { - move_anim_8074EE0(sprite); - } -} - -void sub_807941C(struct Sprite *sprite) { - bool8 v1; - u8 v2; - if (!(gBattleAnimArgs[5] & 0xff00)) { - v1 = TRUE; - } else { - v1 = FALSE; - } - if (!(gBattleAnimArgs[5] & 0xff)) { - v2 = 3; - } else { - v2 = 1; - } - sub_80787B0(sprite, v1); - if (GetBankSide(gBattleAnimPlayerMonIndex)) { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, v2) + gBattleAnimArgs[3]; - sprite->callback = sub_8078B34; - oamt_set_x3A_32(sprite, move_anim_8072740); -} - -void sub_80794A8(struct Sprite *sprite) { - sub_80787B0(sprite, 1); - if (GetBankSide(gBattleAnimPlayerMonIndex)) { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[3]; - sprite->data5 = gBattleAnimArgs[5]; - sub_80786EC(sprite); - sprite->callback = sub_8079518; -} - -void sub_8079518(struct Sprite *sprite) { - if (sub_8078718(sprite)) { - move_anim_8072740(sprite); - } -} - -void sub_8079534(struct Sprite *sprite) { - u8 r4, slot, r7; - if (!gBattleAnimArgs[6]) { - r4 = 1; - r7 = 3; - } else { - r4 = 0; - r7 = 1; - } - if (!gBattleAnimArgs[5]) { - sub_80787B0(sprite, r4); - slot = gBattleAnimPlayerMonIndex; - } else { - sub_8078764(sprite, r4); - slot = gBattleAnimEnemyMonIndex; - } - if (GetBankSide(gBattleAnimPlayerMonIndex)) { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - sub_8078764(sprite, r4); - sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = sub_8077ABC(slot, 2) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(slot, r7) + gBattleAnimArgs[3]; - sprite->callback = sub_8078B34; - oamt_set_x3A_32(sprite, move_anim_8072740); -} - -s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1) { - u16 i; - u8 sprite = obj_id_for_side_relative_to_move(a1); - if (sprite != 0xff) { - for (i = 0; i < 0x40; i++) { - if (gSprites[i].inUse) { - continue; - } - gSprites[i] = gSprites[sprite]; - gSprites[i].oam.objMode = 1; - gSprites[i].invisible = FALSE; - return i; - } - } - return -1; -} - -void obj_delete_but_dont_free_vram(struct Sprite *sprite) { - sprite->usingSheet = TRUE; - DestroySprite(sprite); -} - -void sub_8079670(u8 task) { - s16 v1 = 0; - s16 v2 = 0; - if (gBattleAnimArgs[2] > gBattleAnimArgs[0]) { - v2 = 1; - } - if (gBattleAnimArgs[2] < gBattleAnimArgs[0]) { - v2 = -1; - } - if (gBattleAnimArgs[3] > gBattleAnimArgs[1]) { - v1 = 1; - } - if (gBattleAnimArgs[3] < gBattleAnimArgs[1]) { - v1 = -1; - } - gTasks[task].data[0] = 0; - gTasks[task].data[1] = gBattleAnimArgs[4]; - gTasks[task].data[2] = 0; - gTasks[task].data[3] = gBattleAnimArgs[0]; - gTasks[task].data[4] = gBattleAnimArgs[1]; - gTasks[task].data[5] = v2; - gTasks[task].data[6] = v1; - gTasks[task].data[7] = gBattleAnimArgs[2]; - gTasks[task].data[8] = gBattleAnimArgs[3]; - REG_BLDALPHA = (gBattleAnimArgs[1] << 8) | gBattleAnimArgs[0]; - gTasks[task].func = sub_80796F8; -} - -void sub_80796F8(u8 taskId) { - struct Task *task = &gTasks[taskId]; - if (++task->data[0] > task->data[1]) { - task->data[0] = 0; - if (++task->data[2] & 1) { - if (task->data[3] != task->data[7]) { - task->data[3] += task->data[5]; - } - } else { - if (task->data[4] != task->data[8]) { - task->data[4] += task->data[6]; - } - } - REG_BLDALPHA = (task->data[4] << 8) | task->data[3]; - if (task->data[3] == task->data[7] && task->data[4] == task->data[8]) { - DestroyAnimVisualTask(taskId); - return; - } - } -} - -void sub_8079790(u8 task) { - u8 sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); - if (sprite == 0xff) { - DestroyAnimVisualTask(task); - return; - } - gTasks[task].data[0] = (gSprites[sprite].oam.paletteNum * 0x10) + 0x101; - sub_80797EC(&gTasks[task]); -} - -void sub_80797EC(struct Task *task) { - task->data[1] = gBattleAnimArgs[1]; - task->data[2] = 0; - task->data[3] = gBattleAnimArgs[2]; - task->data[4] = 0; - task->data[5] = gBattleAnimArgs[3]; - task->data[6] = 0; - task->data[7] = gBattleAnimArgs[4]; - task->func = sub_8079814; -} - -void sub_8079814(u8 taskId) { - struct Task *task = &gTasks[taskId]; - if (++task->data[4] >= task->data[5]) { - task->data[4] = 0; - if (!task->data[6]) { - task->data[2]++; - BlendPalette(task->data[0], 0xf, task->data[2], task->data[1]); - if (task->data[2] == task->data[3]) { - task->data[6] = 1; - } - } else { - task->data[2]--; - BlendPalette(task->data[0], 0xf, task->data[2], task->data[1]); - if (!task->data[2]) { - if (--task->data[7]) { - task->data[4] = 0; - task->data[6] = 0; - } else { - DestroyAnimVisualTask(taskId); - return; - } - } - } - } -} - -void sub_80798AC(u8 task) { - u8 palette = IndexOfSpritePaletteTag(gBattleAnimArgs[0]); - if (palette == 0xff) { - DestroyAnimVisualTask(task); - return; - } - gTasks[task].data[0] = (palette * 0x10) + 0x101; - sub_80797EC(&gTasks[task]); -} - -void sub_80798F4(struct Task *task, u8 a2, void *a3) { - task->data[7] = 0; - task->data[8] = 0; - task->data[9] = 0; - task->data[15] = a2; - task->data[10] = 0x100; - task->data[11] = 0x100; - task->data[12] = 0; - sub_8079BF4(&task->data[13], &task->data[14], a3); - sub_8078E70(a2, 0); -} - -bool8 sub_807992C(struct Task *task) { - gUnknown_0202F7D4 = sub_8079BFC(task->data[13], task->data[14]) + (task->data[7] << 3); - switch (gUnknown_0202F7D4->type) { - default: - if (!gUnknown_0202F7D4->frame.duration) { - task->data[10] = gUnknown_0202F7D4->frame.xScale; - task->data[11] = gUnknown_0202F7D4->frame.yScale; - task->data[12] = gUnknown_0202F7D4->frame.rotation; - task->data[7]++; - gUnknown_0202F7D4++; - } - task->data[10] += gUnknown_0202F7D4->frame.xScale; - task->data[11] += gUnknown_0202F7D4->frame.yScale; - task->data[12] += gUnknown_0202F7D4->frame.rotation; - obj_id_set_rotscale(task->data[15], task->data[10], task->data[11], task->data[12]); - sub_8079A64(task->data[15]); - if (++task->data[8] >= gUnknown_0202F7D4->frame.duration) { - task->data[8] = 0; - task->data[7]++; - } - break; - - case AFFINEANIMCMDTYPE_JUMP: - task->data[7] = gUnknown_0202F7D4->jump.target; - break; - - case AFFINEANIMCMDTYPE_LOOP: - if (gUnknown_0202F7D4->loop.count) { - if (task->data[9]) { - if (!--task->data[9]) { - task->data[7]++; - break; - } - } else { - task->data[9] = gUnknown_0202F7D4->loop.count; - } - if (!task->data[7]) { - break; - } - for (;;) { - task->data[7]--; - gUnknown_0202F7D4--; - if (gUnknown_0202F7D4->type == AFFINEANIMCMDTYPE_LOOP) { - task->data[7]++; - return TRUE; - } - if (!task->data[7]) { - return TRUE; - } - } - } - task->data[7]++; - break; - - case 0x7fff: - gSprites[task->data[15]].pos2.y = 0; - sub_8078F40(task->data[15]); - return FALSE; - } - - return TRUE; -} - -void sub_8079A64(u8 sprite) { - int var = 0x40 - sub_8079B10(sprite) * 2; - u16 matrix = gSprites[sprite].oam.matrixNum; - int var2 = (var << 8) / gOamMatrices[matrix].d; - if (var2 > 0x80) { - var2 = 0x80; - } - gSprites[sprite].pos2.y = (var - var2) / 2; -} - -void sub_8079AB8(u8 sprite, u8 sprite2) { - int var = 0x40 - sub_8079B10(sprite2) * 2; - u16 matrix = gSprites[sprite].oam.matrixNum; - int var2 = (var << 8) / gOamMatrices[matrix].d; - if (var2 > 0x80) { - var2 = 0x80; - } - gSprites[sprite].pos2.y = (var - var2) / 2; -} - -u16 sub_8079B10(u8 sprite) { - struct TransformStatus *transform; - u8 slot = gSprites[sprite].data0; - u16 species; - u16 i; - for (i = 0; i < (sizeof(gBattleMonSprites) / sizeof(u8)); i++) { - if (gBattleMonSprites[i] == sprite) { - if (IsContest()) { - species = unk_2019348.field_0; - return gMonBackPicCoords[species].y_offset; - } else { - if (!GetBankSide(i)) { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[i]], MON_DATA_SPECIES); - } else { - species = transform->species; - } - return gMonBackPicCoords[species].y_offset; - } else { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[i]], MON_DATA_SPECIES); - } else { - species = transform->species; - } - return gMonFrontPicCoords[species].y_offset; - } - } - } - } - return 0x40; -} - -void sub_8079BF4(s16 *bottom, s16 *top, void *ptr) { - *bottom = ((intptr_t) ptr) & 0xffff; - *top = (((intptr_t) ptr) >> 16) & 0xffff; -} - -void *sub_8079BFC(s16 bottom, s16 top) { - return (void *)((u16)bottom | ((u16)top << 16)); -} - - -// possible new file - -void sub_8079C08(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7) { - task->data[8] = a7; - task->data[15] = a2; - task->data[9] = a3; - task->data[10] = a4; - task->data[13] = a5; - task->data[14] = a6; - task->data[11] = (a5 - a3) / a7; - task->data[12] = (a6 - a4) / a7; -} - -u8 sub_8079C74(struct Task *task) { - if (!task->data[8]) { - return 0; - } - if (--task->data[8]) { - task->data[9] += task->data[11]; - task->data[10] += task->data[12]; - } else { - task->data[9] = task->data[13]; - task->data[10] = task->data[14]; - } - obj_id_set_rotscale(task->data[15], task->data[9], task->data[10], 0); - if (task->data[8]) { - sub_8079A64(task->data[15]); - } else { - gSprites[task->data[15]].pos2.y = 0; - } - return task->data[8]; -} - -void sub_8079CEC(u8 task) { - u16 v1; - if (gHappinessMoveAnim <= 30) { - v1 = 0; - } else if (gHappinessMoveAnim <= 100) { - v1 = 1; - } else if (gHappinessMoveAnim <= 200) { - v1 = 2; - } else { - v1 = 3; - } - gBattleAnimArgs[7] = v1; - DestroyAnimVisualTask(task); -} - -void unref_sub_8079D20(u8 priority) { - if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex)) { - gSprites[gBattleMonSprites[gBattleAnimEnemyMonIndex]].oam.priority = priority; - } - if (b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex)) { - gSprites[gBattleMonSprites[gBattleAnimPlayerMonIndex]].oam.priority = priority; - } - if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) { - gSprites[gBattleMonSprites[gBattleAnimEnemyMonIndex ^ 2]].oam.priority = priority; - } - if (b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) { - gSprites[gBattleMonSprites[gBattleAnimPlayerMonIndex ^ 2]].oam.priority = priority; - } -} - -void sub_8079E24() { - int i; - for (i = 0; i < gNoOfAllBanks; i++) { - if (b_side_obj__get_some_boolean(i)) { - gSprites[gBattleMonSprites[i]].subpriority = sub_8079E90(i); - gSprites[gBattleMonSprites[i]].oam.priority = 2; - } - } -} - -u8 sub_8079E90(u8 slot) { - u8 status; - u8 ret; - if (IsContest()) { - if (slot == 2) { - return 30; - } else { - return 40; - } - } else { - status = GetBankIdentity(slot); - if (status == 0) { - ret = 30; - } else if (status == 2) { - ret = 20; - } else if (status == 1) { - ret = 40; - } else { - ret = 50; - } - } - return ret; -} - -u8 sub_8079ED4(u8 slot) { - u8 status = GetBankIdentity(slot); - if (IsContest()) { - return 2; - } - if (status == 0 || status == 3) { - return BG2CNT.priority; - } else { - return BG1CNT.priority; - } -} - -u8 GetBankIdentity_permutated(u8 slot) { - u8 status; - if (!IsContest()) { - status = GetBankIdentity(slot); - if (status == 0 || status == 3) { - return 2; - } else { - return 1; - } - } - return 1; -} - -u8 sub_8079F44(u16 species, u8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7, u32 a8) { - void *src; - void *dest; - int size; - - u8 sprite; - u16 sheet = LoadSpriteSheet(&gUnknown_0837F5E0[a3]); - u16 palette = AllocSpritePalette(gSpriteTemplate_837F5B0[a3].paletteTag); - if (!isBackpic) { - LoadCompressedPalette(species_and_otid_get_pal(species, a8, a7), (palette * 0x10) + 0x100, 0x20); - LoadSpecialPokePic( - &gMonFrontPicTable[species], - gMonFrontPicCoords[species].coords, - gMonFrontPicCoords[species].y_offset, - 0x2000000, - (void *)0x2000000, - species, - a7, - 1 - ); - } else { - LoadCompressedPalette( - species_and_otid_get_pal(species, a8, a7), (palette * 0x10) + 0x100, 0x20); - LoadSpecialPokePic( - &gMonBackPicTable[species], - gMonBackPicCoords[species].coords, - gMonBackPicCoords[species].y_offset, - 0x2000000, - (void *)0x2000000, - species, - a7, - 0 - ); - } - - src = (void *)0x2000000; - dest = (void *)(0x6010000 + (sheet * 0x20)); - size = 0x800; - DmaCopy32(3, src, dest, size); - - if (!isBackpic) { - sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonFrontPicCoords[species].y_offset, a6); - } else { - sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonBackPicCoords[species].y_offset, a6); - } - if (IsContest()) { - gSprites[sprite].affineAnims = &gSpriteAffineAnimTable_81E7C18; - StartSpriteAffineAnim(&gSprites[sprite], 0); - } - return sprite; -} - -void sub_807A0F4(struct Sprite *sprite) { - DestroySpriteAndFreeResources(sprite); -} - -int sub_807A100(u8 slot, u8 a2) { - u16 species; - u32 personality; - u16 letter; - u16 var; - int ret; - const struct MonCoords *coords; - struct TransformStatus *transform; - if (IsContest()) { - if (unk_2019348.field_4 & 1) { - species = unk_2019348.field_2; - personality = unk_2019348.field_10; - } else { - species = unk_2019348.field_0; - personality = unk_2019348.field_8; - } - if (species == SPECIES_UNOWN) { - letter = GET_UNOWN_LETTER(personality); - if (!letter) { - var = SPECIES_UNOWN; - } else { - var = letter + SPECIES_UNOWN_B - 1; - } - coords = &gMonBackPicCoords[var]; - } else if (species == SPECIES_CASTFORM) { - coords = &gCastformFrontSpriteCoords[gBattleMonForms[slot]]; - } else if (species <= SPECIES_EGG) { - coords = &gMonBackPicCoords[species]; - } else { - coords = &gMonBackPicCoords[0]; - } - } else { - if (!GetBankSide(slot)) { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); - personality = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); - } else { - species = transform->species; - personality = gTransformPersonalities[slot]; - } - if (species == SPECIES_UNOWN) { - letter = GET_UNOWN_LETTER(personality); - if (!letter) { - var = SPECIES_UNOWN; - } else { - var = letter + SPECIES_UNOWN_B - 1; - } - coords = &gMonBackPicCoords[var]; - } else if (species > SPECIES_EGG) { - coords = &gMonBackPicCoords[0]; - } else { - coords = &gMonBackPicCoords[species]; - } - } else { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); - personality = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); - } else { - species = transform->species; - personality = gTransformPersonalities[slot]; - } - if (species == SPECIES_UNOWN) { - letter = GET_UNOWN_LETTER(personality); - if (!letter) { - var = SPECIES_UNOWN; - } else { - var = letter + SPECIES_UNOWN_B - 1; - } - coords = &gMonFrontPicCoords[var]; - } else if (species == SPECIES_CASTFORM) { - coords = &gCastformFrontSpriteCoords[gBattleMonForms[slot]]; - } else if (species > SPECIES_EGG) { - coords = &gMonFrontPicCoords[0]; - } else { - coords = &gMonFrontPicCoords[species]; - } - } - } - - switch (a2) { - case 0: - return (coords->coords & 0xf) * 8; - case 1: - return (coords->coords >> 4) * 8; - case 4: - return sub_8077ABC(slot, 2) - ((coords->coords >> 4) * 4); - case 5: - return sub_8077ABC(slot, 2) + ((coords->coords >> 4) * 4); - case 2: - return sub_8077ABC(slot, 3) - ((coords->coords & 0xf) * 4); - case 3: - return sub_8077ABC(slot, 3) + ((coords->coords & 0xf) * 4); - case 6: - ret = sub_8077ABC(slot, 1) + 0x1f; - return ret - coords->y_offset; - default: - return 0; - } -} - -void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4) { - u8 v1, v2; - s16 v3, v4; - s16 v5, v6; - if (!a2) { - v1 = 0; - v2 = 1; - } else { - v1 = 2; - v2 = 3; - } - v3 = sub_8077ABC(slot, v1); - v4 = sub_8077ABC(slot, v2); - if (IsDoubleBattle() && !IsContest()) { - v5 = sub_8077ABC(slot ^ 2, v1); - v6 = sub_8077ABC(slot ^ 2, v2); - } else { - v5 = v3; - v6 = v4; - } - *a3 = (v3 + v5) / 2; - *a4 = (v4 + v6) / 2; -} - -u8 sub_807A4A0(int a1, u8 sprite, int a3) { - u8 new_sprite = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); - gSprites[new_sprite] = gSprites[sprite]; - gSprites[new_sprite].usingSheet = TRUE; - gSprites[new_sprite].oam.priority = 0; - gSprites[new_sprite].oam.objMode = 2; - gSprites[new_sprite].oam.tileNum = gSprites[sprite].oam.tileNum; - gSprites[new_sprite].callback = SpriteCallbackDummy; - return new_sprite; -} - -void sub_807A544(struct Sprite *sprite) { - sub_8078650(sprite); - if (GetBankSide(gBattleAnimPlayerMonIndex)) { - sprite->pos1.x -= gBattleAnimArgs[0]; - gBattleAnimArgs[3] = -gBattleAnimArgs[3]; - sprite->hFlip = TRUE; - } else { - sprite->pos1.x += gBattleAnimArgs[0]; - } - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gBattleAnimArgs[3]; - sprite->data3 = gBattleAnimArgs[4]; - sprite->data5 = gBattleAnimArgs[5]; - oamt_set_x3A_32(sprite, move_anim_8074EE0); - sprite->callback = sub_8078504; -} - -void sub_807A5C4(struct Sprite *sprite) { - if (GetBankSide(gBattleAnimPlayerMonIndex)) { - sprite->pos1.x -= gBattleAnimArgs[0]; - gBattleAnimArgs[3] *= -1; - } else { - sprite->pos1.x += gBattleAnimArgs[0]; - } - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gBattleAnimArgs[3]; - sprite->data3 = gBattleAnimArgs[4]; - sprite->data5 = gBattleAnimArgs[5]; - StartSpriteAnim(sprite, gBattleAnimArgs[6]); - oamt_set_x3A_32(sprite, move_anim_8074EE0); - sprite->callback = sub_8078504; -} - -void sub_807A63C(struct Sprite *sprite) { - sub_8078650(sprite); - if (GetBankSide(gBattleAnimPlayerMonIndex)) { - sprite->pos1.x -= gBattleAnimArgs[0]; - } else { - sprite->pos1.x += gBattleAnimArgs[0]; - } - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->callback = sub_8078600; - oamt_set_x3A_32(sprite, move_anim_8072740); -} - -void sub_807A69C(u8 taskId) { - u16 src; - u16 dest; - struct Task *task = &gTasks[taskId]; - task->data[0] = obj_id_for_side_relative_to_move(0); - task->data[1] = (GetBankSide(gBattleAnimPlayerMonIndex)) ? -8 : 8; - task->data[2] = 0; - task->data[3] = 0; - gSprites[task->data[0]].pos2.x -= task->data[0]; - task->data[4] = AllocSpritePalette(10097); - task->data[5] = 0; - - dest = (task->data[4] + 0x10) * 0x10; - src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10; - task->data[6] = sub_8079E90(gBattleAnimPlayerMonIndex); - if (task->data[6] == 20 || task->data[6] == 40) { - task->data[6] = 2; - } else { - task->data[6] = 3; - } - CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], 0x20); - BlendPalette(dest, 0x10, gBattleAnimArgs[1], gBattleAnimArgs[0]); - task->func = sub_807A784; -} - -void sub_807A784(u8 taskId) { - struct Task *task = &gTasks[taskId]; - switch (task->data[2]) { - case 0: - sub_807A850(task, taskId); - gSprites[task->data[0]].pos2.x += task->data[1]; - if (++task->data[3] == 5) { - task->data[3]--; - task->data[2]++; - } - break; - case 1: - sub_807A850(task, taskId); - gSprites[task->data[0]].pos2.x -= task->data[1]; - if (--task->data[3] == 0) { - gSprites[task->data[0]].pos2.x = 0; - task->data[2]++; - } - break; - case 2: - if (!task->data[5]) { - FreeSpritePaletteByTag(10097); - DestroyAnimVisualTask(taskId); - } - break; - } -} - -void sub_807A850(struct Task *task, u8 taskId) { - s16 sprite = duplicate_obj_of_side_rel2move_in_transparent_mode(0); - if (sprite >= 0) { - gSprites[sprite].oam.priority = task->data[6]; - gSprites[sprite].oam.paletteNum = task->data[4]; - gSprites[sprite].data0 = 8; - gSprites[sprite].data1 = taskId; - gSprites[sprite].data2 = sprite; - gSprites[sprite].pos2.x = gSprites[task->data[0]].pos2.x; - gSprites[sprite].callback = sub_807A8D4; - task->data[5]++; - } -} - -void sub_807A8D4(struct Sprite *sprite) { - if (--sprite->data0 == 0) { - gTasks[sprite->data1].data[5]--; - obj_delete_but_dont_free_vram(sprite); - } -} - -void sub_807A908(struct Sprite *sprite) { - sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); - if (!GetBankSide(gBattleAnimPlayerMonIndex)) { - sprite->data0 = 5; - } else { - sprite->data0 = -10; - } - sprite->data1 = -40; - sprite->callback = sub_807A960; -} - -void sub_807A960(struct Sprite *sprite) { - sprite->data2 += sprite->data0; - sprite->data3 += sprite->data1; - sprite->pos2.x = sprite->data2 / 10; - sprite->pos2.y = sprite->data3 / 10; - if (sprite->data1 < -20) { - sprite->data1++; - } - if ((sprite->pos1.y + sprite->pos2.y) < -32) { - move_anim_8072740(sprite); - } -} - -void sub_807A9BC(struct Sprite *sprite) { - int x; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data2 = sprite->pos1.x + gBattleAnimArgs[4]; - sprite->data4 = sprite->pos1.y + gBattleAnimArgs[5]; - if (!GetBankSide(gBattleAnimEnemyMonIndex)) { - x = (u16)gBattleAnimArgs[4] + 30; - sprite->pos1.x += x; - sprite->pos1.y = gBattleAnimArgs[5] - 20; - } else { - x = (u16)gBattleAnimArgs[4] - 30; - sprite->pos1.x += x; - sprite->pos1.y = gBattleAnimArgs[5] - 80; - } - sprite->callback = sub_8078B34; - oamt_set_x3A_32(sprite, move_anim_8072740); -} diff --git a/src/rotating_gate.c b/src/rotating_gate.c deleted file mode 100644 index bb3c31dfc..000000000 --- a/src/rotating_gate.c +++ /dev/null @@ -1,1228 +0,0 @@ -#include "global.h" -#include "bike.h" -#include "event_data.h" -#include "field_map_obj.h" -#include "fieldmap.h" -#include "map_constants.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" - -#define ROTATING_GATE_TILE_TAG 0x1300 -#define ROTATING_GATE_PUZZLE_MAX 14 -#define GATE_ARM_MAX_LENGTH 2 - -#define GATE_ROTATION(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 - -static void SpriteCallback_RotatingGate(struct Sprite *sprite); -static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY); -static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite); - -enum -{ - /* - * | - * +-- - */ - GATE_SHAPE_L1, - - /* - * | - * | - * +-- - */ - GATE_SHAPE_L2, - - /* - * | - * +---- - */ - GATE_SHAPE_L3, - - /* - * | - * | - * +---- - */ - GATE_SHAPE_L4, - - /* - * | - * +-- - * | - */ - GATE_SHAPE_T1, - - /* - * | - * | - * +-- - * | - */ - GATE_SHAPE_T2, - - /* - * | - * +---- - * | - */ - GATE_SHAPE_T3, - - /* - * An unused T-shape gate - * | - * +-- - * | - * | - */ - GATE_SHAPE_T4, - - /* - * An unused T-shape gate - * | - * | - * +---- - * | - */ - GATE_SHAPE_UNUSED_T1, - - /* - * An unused T-shape gate - * | - * | - * +-- - * | - * | - */ - GATE_SHAPE_UNUSED_T2, - - /* - * An unused T-shape gate - * | - * +---- - * | - * | - */ - GATE_SHAPE_UNUSED_T3, - - /* - * An unused T-shape gate - * | - * | - * +---- - * | - * | - */ - GATE_SHAPE_UNUSED_T4, -}; - -enum -{ - /* - * 0 degrees (clockwise) - * | - * +-- - * | - */ - GATE_ORIENTATION_0, - - /* - * 90 degress (clockwise) - * --+-- - * | - */ - GATE_ORIENTATION_90, - - /* - * 180 degrees (clockwise) - * | - * --+ - * | - */ - GATE_ORIENTATION_180, - - /* - * 270 degrees (clockwise) - * | - * --+-- - */ - GATE_ORIENTATION_270, - - GATE_ORIENTATION_MAX, -}; - -// Describes the location of the gates "arms" when the gate has not -// been rotated (i.e. rotated 0 degrees) -enum -{ - GATE_ARM_NORTH, - GATE_ARM_EAST, - GATE_ARM_SOUTH, - GATE_ARM_WEST, -}; - -enum -{ - ROTATE_NONE, - ROTATE_ANTICLOCKWISE, - ROTATE_CLOCKWISE, -}; - -enum -{ - PUZZLE_NONE, - PUZZLE_FORTREE_CITY_GYM, - PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6, -}; - -struct RotatingGatePuzzle -{ - struct Coords16 pos; - u8 shape; - u8 orientation; -}; - -struct Coords8 -{ - s8 deltaX; - s8 deltaY; -}; - -// 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 }, -}; - -// 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 u8 sRotatingGateTiles_1[] = INCBIN_U8("graphics/rotating_gates/1.4bpp"); -static const u8 sRotatingGateTiles_2[] = INCBIN_U8("graphics/rotating_gates/2.4bpp"); -static const u8 sRotatingGateTiles_3[] = INCBIN_U8("graphics/rotating_gates/3.4bpp"); -static const u8 sRotatingGateTiles_5[] = INCBIN_U8("graphics/rotating_gates/5.4bpp"); -static const u8 sRotatingGateTiles_6[] = INCBIN_U8("graphics/rotating_gates/6.4bpp"); -static const u8 sRotatingGateTiles_7[] = INCBIN_U8("graphics/rotating_gates/7.4bpp"); -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 = { - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = 0, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = ST_OAM_SQUARE, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 2, - .paletteNum = 5, - .affineParam = 0, -}; - -static const struct OamData sOamData_RotatingGateRegular = { - .y = 0, - .affineMode = ST_OAM_AFFINE_NORMAL, - .objMode = 0, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = ST_OAM_SQUARE, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 2, - .paletteNum = 5, - .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 union AnimCmd sSpriteAnim_RotatingGateLarge[] = { - ANIMCMD_FRAME(0, 0), ANIMCMD_END, -}; - -static const union AnimCmd sSpriteAnim_RotatingGateRegular[] = { - ANIMCMD_FRAME(0, 0), ANIMCMD_END, -}; - -static const union AnimCmd *const sSpriteAnimTable_RotatingGateLarge[] = { - sSpriteAnim_RotatingGateLarge, -}; - -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_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_Rotated270[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), AFFINEANIMCMD_JUMP(0), -}; - -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[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), - AFFINEANIMCMD_END, -}; - -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[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), - AFFINEANIMCMD_END, -}; - -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[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), - AFFINEANIMCMD_END, -}; - -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[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), - AFFINEANIMCMD_END, -}; - -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[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8), - AFFINEANIMCMD_END, -}; - -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[] = { - 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_RotatingAnticlockwise270to180Faster[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), - AFFINEANIMCMD_END, -}; - -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[] = { - AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), - AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), - AFFINEANIMCMD_END, -}; - -static const union AffineAnimCmd *const sSpriteAffineAnimTable_RotatingGate[] = { - sSpriteAffineAnim_Rotated0, - sSpriteAffineAnim_Rotated90, - sSpriteAffineAnim_Rotated180, - sSpriteAffineAnim_Rotated270, - sSpriteAffineAnim_RotatingAnticlockwise360to270, - sSpriteAffineAnim_RotatingAnticlockwise90to0, - sSpriteAffineAnim_RotatingAnticlockwise180to90, - sSpriteAffineAnim_RotatingAnticlockwise270to180, - sSpriteAffineAnim_RotatingClockwise0to90, - sSpriteAffineAnim_RotatingClockwise90to180, - sSpriteAffineAnim_RotatingClockwise180to270, - sSpriteAffineAnim_RotatingClockwise270to360, - sSpriteAffineAnim_RotatingAnticlockwise360to270Faster, - sSpriteAffineAnim_RotatingAnticlockwise90to0Faster, - sSpriteAffineAnim_RotatingAnticlockwise180to90Faster, - sSpriteAffineAnim_RotatingAnticlockwise270to180Faster, - sSpriteAffineAnim_RotatingClockwise0to90Faster, - sSpriteAffineAnim_RotatingClockwise90to180Faster, - sSpriteAffineAnim_RotatingClockwise180to270Faster, - sSpriteAffineAnim_RotatingClockwise270to360Faster, -}; - -static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge = { - .tileTag = ROTATING_GATE_TILE_TAG, - .paletteTag = 0xFFFF, - .oam = &sOamData_RotatingGateLarge, - .anims = sSpriteAnimTable_RotatingGateLarge, - .images = NULL, - .affineAnims = sSpriteAffineAnimTable_RotatingGate, - .callback = SpriteCallback_RotatingGate, -}; - -static const struct SpriteTemplate sSpriteTemplate_RotatingGateRegular = { - .tileTag = ROTATING_GATE_TILE_TAG, - .paletteTag = 0xFFFF, - .oam = &sOamData_RotatingGateRegular, - .anims = sSpriteAnimTable_RotatingGateRegular, - .images = NULL, - .affineAnims = sSpriteAffineAnimTable_RotatingGate, - .callback = SpriteCallback_RotatingGate, -}; - -// These structures describe what happens to the gate if you hit it at -// a given coordinate in a 4x4 grid when walking in the specified -// direction. Either the gate does not rotate, or it rotates in the -// 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_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_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_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 }, -}; - -// These tables describe the relative coordinate positions the arms -// must move through in order to be rotated. -static const struct Coords8 sRotatingGate_ArmPositionsClockwiseRotation[] = { - { 0, -1 }, { 1, -2 }, { 0, 0 }, { 1, 0 }, { -1, 0 }, { -1, 1 }, { -1, -1 }, { -2, -1 }, -}; - -static const struct Coords8 sRotatingGate_ArmPositionsAntiClockwiseRotation[] = { - { -1, -1 }, { -1, -2 }, { 0, -1 }, { 1, -1 }, { 0, 0 }, { 0, 1 }, { -1, 0 }, { -2, 0 }, -}; - -// 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] = { - // L-shape gates - { - { 1, 0 }, { 1, 0 }, { 0, 0 }, { 0, 0 }, - }, - { - { 1, 1 }, { 1, 0 }, { 0, 0 }, { 0, 0 }, - }, - { - { 1, 0 }, { 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, 1 }, { 1, 0 }, { 1, 0 }, { 0, 0 }, - }, - { - { 1, 0 }, { 1, 1 }, { 1, 0 }, { 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, 0 }, { 1, 1 }, { 0, 0 }, - }, - { - { 1, 0 }, { 1, 1 }, { 1, 1 }, { 0, 0 }, - }, - { - { 1, 1 }, { 1, 1 }, { 1, 1 }, { 0, 0 }, - }, -}; - -static EWRAM_DATA u8 gRotatingGate_GateSpriteIds[ROTATING_GATE_PUZZLE_MAX] = {0}; -static EWRAM_DATA const struct RotatingGatePuzzle *gRotatingGate_PuzzleConfig = NULL; -static EWRAM_DATA u8 gRotatingGate_PuzzleCount = 0; - -static int GetCurrentMapRotatingGatePuzzleType(void) -{ - if (gSaveBlock1.location.mapGroup == MAP_GROUP_FORTREE_CITY_GYM && - gSaveBlock1.location.mapNum == MAP_ID_FORTREE_CITY_GYM) - { - return PUZZLE_FORTREE_CITY_GYM; - } - - if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE110_TRICK_HOUSE_PUZZLE6 && - gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_TRICK_HOUSE_PUZZLE6) - { - return PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6; - } - - return PUZZLE_NONE; -} - -static void RotatingGate_ResetAllGateOrientations(void) -{ - int i; - u8 *ptr; - - ptr = (u8 *)GetVarPointer(0x4000); - - for (i = 0; i < gRotatingGate_PuzzleCount; i++) - { - ptr[i] = gRotatingGate_PuzzleConfig[i].orientation; - } -} - -static int RotatingGate_GetGateOrientation(u8 gateId) -{ - return ((u8 *)GetVarPointer(0x4000))[gateId]; -} - -static void RotatingGate_SetGateOrientation(u8 gateId, u8 orientation) -{ - ((u8 *)GetVarPointer(0x4000))[gateId] = orientation; -} - -static void RotatingGate_RotateInDirection(u8 gateId, u32 rotationDirection) -{ - u8 orientation = RotatingGate_GetGateOrientation(gateId); - - if (rotationDirection == ROTATE_ANTICLOCKWISE) - { - if (orientation) - { - orientation--; - } - else - { - orientation = GATE_ORIENTATION_270; - } - } - else - { - orientation = ++orientation % GATE_ORIENTATION_MAX; - } - - RotatingGate_SetGateOrientation(gateId, orientation); -} - -static void RotatingGate_LoadPuzzleConfig(void) -{ - int puzzleType = GetCurrentMapRotatingGatePuzzleType(); - u32 i; - - switch (puzzleType) - { - case PUZZLE_FORTREE_CITY_GYM: - gRotatingGate_PuzzleConfig = sRotatingGate_FortreePuzzleConfig; - gRotatingGate_PuzzleCount = - sizeof(sRotatingGate_FortreePuzzleConfig) / sizeof(struct RotatingGatePuzzle); - break; - case PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6: - gRotatingGate_PuzzleConfig = sRotatingGate_TrickHousePuzzleConfig; - gRotatingGate_PuzzleCount = - sizeof(sRotatingGate_TrickHousePuzzleConfig) / sizeof(struct RotatingGatePuzzle); - break; - case PUZZLE_NONE: - default: - return; - } - - for (i = 0; i < ROTATING_GATE_PUZZLE_MAX; i++) - { - gRotatingGate_GateSpriteIds[i] = MAX_SPRITES; - } -} - -static void RotatingGate_CreateGatesWithinViewport(s16 deltaX, s16 deltaY) -{ - u8 i; - - // Calculate the bounding box of the camera - // Same as RotatingGate_DestroyGatesOutsideViewport - s16 x = gSaveBlock1.pos.x - 2; - s16 x2 = gSaveBlock1.pos.x + 0x11; - s16 y = gSaveBlock1.pos.y - 2; - s16 y2 = gSaveBlock1.pos.y + 0xe; - - s16 x3, y3; - - for (i = 0; i < gRotatingGate_PuzzleCount; i++) - { - x3 = gRotatingGate_PuzzleConfig[i].pos.x + 7; - y3 = gRotatingGate_PuzzleConfig[i].pos.y + 7; - - if (y <= y3 && y2 >= y3 && x <= x3 && x2 >= x3 && - gRotatingGate_GateSpriteIds[i] == MAX_SPRITES) - { - gRotatingGate_GateSpriteIds[i] = RotatingGate_CreateGate(i, deltaX, deltaY); - } - } -} - -static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY) -{ - struct Sprite *sprite; - struct SpriteTemplate template; - const struct RotatingGatePuzzle *gate; - u8 spriteId; - s16 x, y; - - 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; - - sprite = &gSprites[spriteId]; - sprite->data0 = gateId; - sprite->coordOffsetEnabled = 1; - - sub_8060388(x + deltaX, y + deltaY, &sprite->pos1.x, &sprite->pos1.y); - RotatingGate_HideGatesOutsideViewport(sprite); - StartSpriteAffineAnim(sprite, RotatingGate_GetGateOrientation(gateId)); - - return spriteId; -} - -static void SpriteCallback_RotatingGate(struct Sprite *sprite) -{ - u8 rotationDirection; - u8 orientation; - u8 affineAnimation; - - rotationDirection = sprite->data1; - orientation = sprite->data2; - - RotatingGate_HideGatesOutsideViewport(sprite); - - if (rotationDirection == ROTATE_ANTICLOCKWISE) - { - affineAnimation = orientation + 4; - - if (GetPlayerSpeed() != 1) - affineAnimation += 8; - - PlaySE(SE_HI_TURUN); - StartSpriteAffineAnim(sprite, affineAnimation); - } - else if (rotationDirection == ROTATE_CLOCKWISE) - { - affineAnimation = orientation + 8; - - if (GetPlayerSpeed() != 1) - affineAnimation += 8; - - PlaySE(SE_HI_TURUN); - StartSpriteAffineAnim(sprite, affineAnimation); - } - - sprite->data1 = ROTATE_NONE; -} - -static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite) -{ - u16 x; - s16 x2; - u16 y; - s16 y2; - - sprite->invisible = 0; - x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; - y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; - - x2 = x + 0x40; // Dimensions of the rotating gate - y2 = y + 0x40; - - if ((s16)x > DISPLAY_WIDTH + 0x10 - 1 || x2 < -0x10) - { - sprite->invisible = 1; - } - - if ((s16)y > DISPLAY_HEIGHT + 0x10 - 1 || y2 < -0x10) - { - sprite->invisible = 1; - } -} - -static void LoadRotatingGatePics(void) -{ - LoadSpriteSheets(sRotatingGatesGraphicsTable); -} - -static void RotatingGate_DestroyGatesOutsideViewport(void) -{ - s16 x; - s16 x2; - s16 y; - s16 y2; - s16 xGate; - s16 yGate; - int i; - struct Sprite *sprite; - - // Same as RotatingGate_CreateGatesWithinViewport - x = gSaveBlock1.pos.x - 2; - x2 = gSaveBlock1.pos.x + 0x11; - y = gSaveBlock1.pos.y - 2; - y2 = gSaveBlock1.pos.y + 0xe; - - for (i = 0; i < gRotatingGate_PuzzleCount; i++) - { - xGate = gRotatingGate_PuzzleConfig[i].pos.x + 7; - yGate = gRotatingGate_PuzzleConfig[i].pos.y + 7; - - if (gRotatingGate_GateSpriteIds[i] == MAX_SPRITES) - continue; - - if (xGate < x || xGate > x2 || yGate < y || yGate > y2) - { - sprite = &gSprites[gRotatingGate_GateSpriteIds[i]]; - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); - gRotatingGate_GateSpriteIds[i] = MAX_SPRITES; - } - } -} - -#ifdef NONMATCHING -static int RotatingGate_CanRotate(u8 gateId, int rotationDirection) -{ - const struct Coords8 *armPos; - u8 orientation; - s16 x; - s16 y; - int shape; - int i; - int j; - int armOrientation; - const u8 *gateArmCollisionData; - u8 armIndex; - - if (rotationDirection == ROTATE_ANTICLOCKWISE) - armPos = sRotatingGate_ArmPositionsAntiClockwiseRotation; - else if (rotationDirection == ROTATE_CLOCKWISE) - armPos = sRotatingGate_ArmPositionsClockwiseRotation; - else - return 0; - - orientation = RotatingGate_GetGateOrientation(gateId); - - shape = gRotatingGate_PuzzleConfig[gateId].shape; - x = gRotatingGate_PuzzleConfig[gateId].pos.x + 7; - y = gRotatingGate_PuzzleConfig[gateId].pos.y + 7; - - // Loop through the gate's "arms" clockwise (north, south, east, west) - for (i = GATE_ARM_NORTH; i <= GATE_ARM_WEST; i++) - { - armOrientation = orientation + i; - gateArmCollisionData = sRotatingGate_ArmLayout[shape][i]; - - // Ensure that no part of the arm collides with the map - for (j = 0; j < GATE_ARM_MAX_LENGTH; j++) - { - armIndex = 2 * (armOrientation % 4) + j; - - if (*gateArmCollisionData) - { - if (MapGridIsImpassableAt( - armPos[armIndex].deltaX + x, armPos[armIndex].deltaY + y) == 1) - return 0; - } - gateArmCollisionData++; - } - } - - return 1; -} -#else -__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\ -_080C7EA8: .4byte sRotatingGate_ArmPositionsAntiClockwiseRotation\n\ -_080C7EAC:\n\ - cmp r1, 0x2\n\ - beq _080C7EB4\n\ -_080C7EB0:\n\ - movs r0, 0\n\ - b _080C7F48\n\ -_080C7EB4:\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\ -_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\ -_080C7EFA:\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\ -_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\ -_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\ -_080C7F58: .4byte sRotatingGate_ArmPositionsClockwiseRotation\n\ -_080C7F5C: .4byte gRotatingGate_PuzzleConfig\n\ -_080C7F60: .4byte sRotatingGate_ArmLayout\n\ -.syntax divided\n"); -} -#endif - -#ifdef NONMATCHING -static int RotatingGate_HasArm(u8 gateId, u8 armInfo) -{ - int isLongArm; - s8 armOrientation; - int arm; - int shape; - - arm = armInfo >> 1; - isLongArm = armInfo & 1; - - armOrientation = (arm - RotatingGate_GetGateOrientation(gateId) + 4) % 4; - shape = gRotatingGate_PuzzleConfig[gateId].shape; - return sRotatingGate_ArmLayout[shape][armOrientation][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) -{ - struct Sprite *sprite; - - if (gRotatingGate_GateSpriteIds[gateId] != MAX_SPRITES) - { - sprite = &gSprites[gRotatingGate_GateSpriteIds[gateId]]; - sprite->data1 = rotationDirection; - sprite->data2 = RotatingGate_GetGateOrientation(gateId); - } -} - -#ifdef NONMATCHING -static u8 RotatingGate_GetRotationInfo(u8 direction, s16 x, s16 y) -{ - register const u8(*ptr)[][4] asm("r3"); - - if (direction == DIR_NORTH) - ptr = &sRotatingGate_RotationInfoNorth; - else if (direction == DIR_SOUTH) - ptr = &sRotatingGate_RotationInfoSouth; - else if (direction == DIR_WEST) - ptr = &sRotatingGate_RotationInfoWest; - else if (direction == DIR_EAST) - ptr = &sRotatingGate_RotationInfoEast; - else - return GATE_ROTATION_NONE; - - return (*ptr)[y][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) -{ - if (GetCurrentMapRotatingGatePuzzleType()) - { - RotatingGate_LoadPuzzleConfig(); - RotatingGate_ResetAllGateOrientations(); - } -} - -void RotatingGatePuzzleCameraUpdate(u16 deltaX, u16 deltaY) -{ - if (GetCurrentMapRotatingGatePuzzleType()) - { - RotatingGate_CreateGatesWithinViewport(deltaX, deltaY); - RotatingGate_DestroyGatesOutsideViewport(); - } -} - -void RotatingGate_InitPuzzleAndGraphics(void) -{ - if (GetCurrentMapRotatingGatePuzzleType()) - { - LoadRotatingGatePics(); - RotatingGate_LoadPuzzleConfig(); - RotatingGate_CreateGatesWithinViewport(0, 0); - } -} - -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; - } - - for (i = 0; i < gRotatingGate_PuzzleCount; i++) - { - gateX = gRotatingGate_PuzzleConfig[i].pos.x + 7; - gateY = gRotatingGate_PuzzleConfig[i].pos.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); - - if (rotationInfo != GATE_ROTATION_NONE) - { - rotationDirection = rotationInfo >> 4; - armInfo = rotationInfo & 0xF; - - asm("" ::"r"(armInfo)); - - if (RotatingGate_HasArm(i, armInfo)) - { - if (RotatingGate_CanRotate(i, rotationDirection)) - { - RotatingGate_TriggerRotationAnimation(i, rotationDirection); - RotatingGate_RotateInDirection(i, rotationDirection); - return 0; - } - - return 1; - } - } - } - } - - return 0; -} diff --git a/src/rtc.c b/src/rtc.c deleted file mode 100644 index d73f943d2..000000000 --- a/src/rtc.c +++ /dev/null @@ -1,349 +0,0 @@ -#include "global.h" -#include "rtc.h" -#include "string_util.h" -#include "text.h" - -static u16 sErrorStatus; -static struct SiiRtcInfo sRtc; -static u8 sProbeResult; -static u16 sSavedIme; - -struct Time gLocalTime; - -static const struct SiiRtcInfo sRtcDummy = {0, MONTH_JAN, 1}; // 2000 Jan 1 - -static const s32 sNumDaysInMonths[12] = -{ - 31, - 28, - 31, - 30, - 31, - 30, - 31, - 31, - 30, - 31, - 30, - 31, -}; - -void RtcDisableInterrupts() -{ - sSavedIme = REG_IME; - REG_IME = 0; -} - -void RtcRestoreInterrupts() -{ - REG_IME = sSavedIme; -} - -u32 ConvertBcdToBinary(u8 bcd) -{ - if (bcd > 0x9F) - return 0xFF; - - if ((bcd & 0xF) <= 9) - return (10 * ((bcd >> 4) & 0xF)) + (bcd & 0xF); - else - return 0xFF; -} - -bool8 IsLeapYear(u8 year) -{ - if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) - return TRUE; - - return FALSE; -} - -u16 ConvertDateToDayCount(u8 year, u8 month, u8 day) -{ - s32 i; - u16 dayCount = 0; - -#ifndef BUGFIX_BERRY - // The berry glitch was caused by not adding days for the year 2000. - for (i = year - 1; i > 0; i--) - { - dayCount += 365; - - if (IsLeapYear(i) == TRUE) - dayCount++; - } -#else - // The fix was to use "i >= 0" as the condition instead of "i > 0". - for (i = year - 1; i >= 0; i--) - { - dayCount += 365; - - if (IsLeapYear(i) == TRUE) - dayCount++; - } -#endif // BUGFIX_BERRY - - for (i = 0; i < month - 1; i++) - dayCount += sNumDaysInMonths[i]; - - if (month > MONTH_FEB && IsLeapYear(year) == TRUE) - dayCount++; - - dayCount += day; - - return dayCount; -} - -u16 RtcGetDayCount(struct SiiRtcInfo *rtc) -{ - u8 year = ConvertBcdToBinary(rtc->year); - u8 month = ConvertBcdToBinary(rtc->month); - u8 day = ConvertBcdToBinary(rtc->day); - return ConvertDateToDayCount(year, month, day); -} - -void RtcInit() -{ - sErrorStatus = 0; - - RtcDisableInterrupts(); - SiiRtcUnprotect(); - sProbeResult = SiiRtcProbe(); - RtcRestoreInterrupts(); - - if (!(sProbeResult & 0xF)) - { - sErrorStatus = RTC_INIT_ERROR; - return; - } - - if (sProbeResult & 0xF0) - sErrorStatus = RTC_INIT_WARNING; - else - sErrorStatus = 0; - - RtcGetRawInfo(&sRtc); - sErrorStatus = RtcCheckInfo(&sRtc); -} - -u16 RtcGetErrorStatus() -{ - return sErrorStatus; -} - -void RtcGetInfo(struct SiiRtcInfo *rtc) -{ - if (sErrorStatus & RTC_ERR_FLAG_MASK) - *rtc = sRtcDummy; - else - RtcGetRawInfo(rtc); -} - -void RtcGetDateTime(struct SiiRtcInfo *rtc) -{ - RtcDisableInterrupts(); - SiiRtcGetDateTime(rtc); - RtcRestoreInterrupts(); -} - -void RtcGetStatus(struct SiiRtcInfo *rtc) -{ - RtcDisableInterrupts(); - SiiRtcGetStatus(rtc); - RtcRestoreInterrupts(); -} - -void RtcGetRawInfo(struct SiiRtcInfo *rtc) -{ - RtcGetStatus(rtc); - RtcGetDateTime(rtc); -} - -u16 RtcCheckInfo(struct SiiRtcInfo *rtc) -{ - u16 errorFlags = 0; - s32 year; - s32 month; - s32 value; - - if (rtc->status & SIIRTCINFO_POWER) - errorFlags |= RTC_ERR_POWER_FAILURE; - - if (!(rtc->status & SIIRTCINFO_24HOUR)) - errorFlags |= RTC_ERR_12HOUR_CLOCK; - - year = ConvertBcdToBinary(rtc->year); - - if (year == 0xFF) - errorFlags |= RTC_ERR_INVALID_YEAR; - - month = ConvertBcdToBinary(rtc->month); - - if (month == 0xFF || month == 0 || month > 12) - errorFlags |= RTC_ERR_INVALID_MONTH; - - value = ConvertBcdToBinary(rtc->day); - - if (value == 0xFF) - errorFlags |= RTC_ERR_INVALID_DAY; - - if (month == MONTH_FEB) - { - if (value > IsLeapYear(year) + sNumDaysInMonths[month - 1]) - errorFlags |= RTC_ERR_INVALID_DAY; - } - else - { - if (value > sNumDaysInMonths[month - 1]) - errorFlags |= RTC_ERR_INVALID_DAY; - } - - value = ConvertBcdToBinary(rtc->hour); - - if (value > 24) - errorFlags |= RTC_ERR_INVALID_HOUR; - - value = ConvertBcdToBinary(rtc->minute); - - if (value > 60) - errorFlags |= RTC_ERR_INVALID_MINUTE; - - value = ConvertBcdToBinary(rtc->second); - - if (value > 60) - errorFlags |= RTC_ERR_INVALID_SECOND; - - return errorFlags; -} - -void RtcReset() -{ - RtcDisableInterrupts(); - SiiRtcReset(); - RtcRestoreInterrupts(); -} - -void FormatDecimalTime(u8 *dest, s32 hour, s32 minute, s32 second) -{ - dest = ConvertIntToDecimalStringN(dest, hour, STR_CONV_MODE_LEADING_ZEROS, 2); - *dest++ = CHAR_COLON; - dest = ConvertIntToDecimalStringN(dest, minute, STR_CONV_MODE_LEADING_ZEROS, 2); - *dest++ = CHAR_COLON; - dest = ConvertIntToDecimalStringN(dest, second, STR_CONV_MODE_LEADING_ZEROS, 2); - *dest = EOS; -} - -void FormatHexTime(u8 *dest, s32 hour, s32 minute, s32 second) -{ - dest = ConvertIntToHexStringN(dest, hour, STR_CONV_MODE_LEADING_ZEROS, 2); - *dest++ = CHAR_COLON; - dest = ConvertIntToHexStringN(dest, minute, STR_CONV_MODE_LEADING_ZEROS, 2); - *dest++ = CHAR_COLON; - dest = ConvertIntToHexStringN(dest, second, STR_CONV_MODE_LEADING_ZEROS, 2); - *dest = EOS; -} - -void FormatHexRtcTime(u8 *dest) -{ - FormatHexTime(dest, sRtc.hour, sRtc.minute, sRtc.second); -} - -void FormatDecimalDate(u8 *dest, s32 year, s32 month, s32 day) -{ - dest = ConvertIntToDecimalStringN(dest, year, STR_CONV_MODE_LEADING_ZEROS, 4); - *dest++ = CHAR_HYPHEN; - dest = ConvertIntToDecimalStringN(dest, month, STR_CONV_MODE_LEADING_ZEROS, 2); - *dest++ = CHAR_HYPHEN; - dest = ConvertIntToDecimalStringN(dest, day, STR_CONV_MODE_LEADING_ZEROS, 2); - *dest = EOS; -} - -void FormatHexDate(u8 *dest, s32 year, s32 month, s32 day) -{ - dest = ConvertIntToHexStringN(dest, year, STR_CONV_MODE_LEADING_ZEROS, 4); - *dest++ = CHAR_HYPHEN; - dest = ConvertIntToHexStringN(dest, month, STR_CONV_MODE_LEADING_ZEROS, 2); - *dest++ = CHAR_HYPHEN; - dest = ConvertIntToHexStringN(dest, day, STR_CONV_MODE_LEADING_ZEROS, 2); - *dest = EOS; -} - -void RtcCalcTimeDifference(struct SiiRtcInfo *rtc, struct Time *result, struct Time *t) -{ - u16 days = RtcGetDayCount(rtc); - result->seconds = ConvertBcdToBinary(rtc->second) - t->seconds; - result->minutes = ConvertBcdToBinary(rtc->minute) - t->minutes; - result->hours = ConvertBcdToBinary(rtc->hour) - t->hours; - result->days = days - t->days; - - if (result->seconds < 0) - { - result->seconds += 60; - --result->minutes; - } - - if (result->minutes < 0) - { - result->minutes += 60; - --result->hours; - } - - if (result->hours < 0) - { - result->hours += 24; - --result->days; - } -} - -void RtcCalcLocalTime() -{ - RtcGetInfo(&sRtc); - RtcCalcTimeDifference(&sRtc, &gLocalTime, &gSaveBlock2.localTimeOffset); -} - -void RtcInitLocalTimeOffset(s32 hour, s32 minute) -{ - RtcCalcLocalTimeOffset(0, hour, minute, 0); -} - -void RtcCalcLocalTimeOffset(s32 days, s32 hours, s32 minutes, s32 seconds) -{ - gLocalTime.days = days; - gLocalTime.hours = hours; - gLocalTime.minutes = minutes; - gLocalTime.seconds = seconds; - RtcGetInfo(&sRtc); - RtcCalcTimeDifference(&sRtc, &gSaveBlock2.localTimeOffset, &gLocalTime); -} - -void CalcTimeDifference(struct Time *result, struct Time *t1, struct Time *t2) -{ - result->seconds = t2->seconds - t1->seconds; - result->minutes = t2->minutes - t1->minutes; - result->hours = t2->hours - t1->hours; - result->days = t2->days - t1->days; - - if (result->seconds < 0) - { - result->seconds += 60; - --result->minutes; - } - - if (result->minutes < 0) - { - result->minutes += 60; - --result->hours; - } - - if (result->hours < 0) - { - result->hours += 24; - --result->days; - } -} - -u32 RtcGetMinuteCount() -{ - RtcGetInfo(&sRtc); - return (24 * 60) * RtcGetDayCount(&sRtc) + 60 * sRtc.hour + sRtc.minute; -} diff --git a/src/safari_zone.c b/src/safari_zone.c deleted file mode 100644 index a47c8e951..000000000 --- a/src/safari_zone.c +++ /dev/null @@ -1,253 +0,0 @@ -#include "global.h" -#include "safari_zone.h" -#include "event_data.h" -#include "field_fadetransition.h" -#include "field_player_avatar.h" -#include "main.h" -#include "rom4.h" -#include "script.h" -#include "string_util.h" -#include "text.h" - -struct PokeblockFeeder -{ - /*0x00*/ s16 x; - /*0x02*/ s16 y; - /*0x04*/ s8 mapNum; - /*0x05*/ u8 stepCounter; - /*0x08*/ struct Pokeblock pokeblock; -}; - -#define NUM_POKEBLOCK_FEEDERS 10 - -static void ClearAllPokeblockFeeders(void); -static void DecrementFeederStepCounters(void); - -extern u8 gBattleOutcome; - -EWRAM_DATA u8 gNumSafariBalls = 0; -EWRAM_DATA static u16 gSafariZoneStepCounter = 0; -EWRAM_DATA static struct PokeblockFeeder gPokeblockFeeders[NUM_POKEBLOCK_FEEDERS] = {0}; - -extern void (*gFieldCallback)(void); - -extern u8 gUnknown_081C340A; -extern u8 gUnknown_081C342D; -extern u8 gUnknown_081C3448; -extern u8 gUnknown_081C3459; -extern u8 *gPokeblockNames[]; - -extern u16 gScriptResult; - -bool32 GetSafariZoneFlag(void) -{ - return FlagGet(SYS_SAFARI_MODE); -} - -void SetSafariZoneFlag(void) -{ - FlagSet(SYS_SAFARI_MODE); -} - -void ResetSafariZoneFlag(void) -{ - FlagReset(SYS_SAFARI_MODE); -} - -void EnterSafariMode(void) -{ - IncrementGameStat(0x11); - SetSafariZoneFlag(); - ClearAllPokeblockFeeders(); - gNumSafariBalls = 30; - gSafariZoneStepCounter = 500; -} - -void ExitSafariMode(void) -{ - ResetSafariZoneFlag(); - ClearAllPokeblockFeeders(); - gNumSafariBalls = 0; - gSafariZoneStepCounter = 0; -} - -bool8 SafariZoneTakeStep(void) -{ - if (GetSafariZoneFlag() == FALSE) - { - return FALSE; - } - - DecrementFeederStepCounters(); - gSafariZoneStepCounter--; - if (gSafariZoneStepCounter == 0) - { - ScriptContext1_SetupScript(&gUnknown_081C3448); - return TRUE; - } - return FALSE; -} - -void SafariZoneRetirePrompt(void) -{ - ScriptContext1_SetupScript(&gUnknown_081C342D); -} - -void sub_80C824C(void) -{ - if (gNumSafariBalls != 0) - { - SetMainCallback2(c2_exit_to_overworld_2_switch); - } - else if (gBattleOutcome == 8) - { - ScriptContext2_RunNewScript(&gUnknown_081C340A); - warp_in(); - gFieldCallback = sub_8080E44; - SetMainCallback2(CB2_LoadMap); - } - else if (gBattleOutcome == 7) - { - ScriptContext1_SetupScript(&gUnknown_081C3459); - ScriptContext1_Stop(); - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); - } -} - -static void ClearPokeblockFeeder(u8 index) -{ - memset(&gPokeblockFeeders[index], 0, sizeof(struct PokeblockFeeder)); -} - -static void ClearAllPokeblockFeeders(void) -{ - memset(gPokeblockFeeders, 0, sizeof(gPokeblockFeeders)); -} - -void SafariZoneGetPokeblockNameInFeeder(void) -{ - s16 x, y; - u16 i; - - GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - - for (i = 0; i < NUM_POKEBLOCK_FEEDERS; i++) - { - if (gSaveBlock1.location.mapNum == gPokeblockFeeders[i].mapNum - && gPokeblockFeeders[i].x == x - && gPokeblockFeeders[i].y == y) - { - gScriptResult = i; - StringCopy(gStringVar1, gPokeblockNames[gPokeblockFeeders[i].pokeblock.color]); - return; - } - } - - gScriptResult = -1; -} - -static void GetPokeblockFeederWithinRange(void) -{ - s16 x, y; - u16 i; - - PlayerGetDestCoords(&x, &y); - - for (i = 0; i < NUM_POKEBLOCK_FEEDERS; i++) - { - if (gSaveBlock1.location.mapNum == gPokeblockFeeders[i].mapNum) - { - //Get absolute value of x and y distance from Pokeblock feeder on current map - x -= gPokeblockFeeders[i].x; - y -= gPokeblockFeeders[i].y; - if (x < 0) - x *= -1; - if (y < 0) - y *= -1; - if ((x + y) <= 5) - { - gScriptResult = i; - return; - } - } - } - - gScriptResult = -1; -} - -struct Pokeblock *unref_sub_80C8418(void) -{ - SafariZoneGetPokeblockNameInFeeder(); - - if (gScriptResult == 0xFFFF) - return NULL; - else - return &gPokeblockFeeders[gScriptResult].pokeblock; -} - - -struct Pokeblock *SafariZoneGetActivePokeblock(void) -{ - GetPokeblockFeederWithinRange(); - - if (gScriptResult == 0xFFFF) - return NULL; - else - return &gPokeblockFeeders[gScriptResult].pokeblock; -} - - -void SafariZoneActivatePokeblockFeeder(u8 pokeblock_index) -{ - s16 x, y; - u8 i; - - for (i = 0; i < NUM_POKEBLOCK_FEEDERS; i++) - { - //Find free entry in gPokeblockFeeders - if (gPokeblockFeeders[i].mapNum == 0 - && gPokeblockFeeders[i].x == 0 - && gPokeblockFeeders[i].y == 0) - { - //Initialize Pokeblock feeder - GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - gPokeblockFeeders[i].mapNum = gSaveBlock1.location.mapNum; - gPokeblockFeeders[i].pokeblock = gSaveBlock1.pokeblocks[pokeblock_index]; - gPokeblockFeeders[i].stepCounter = 100; - gPokeblockFeeders[i].x = x; - gPokeblockFeeders[i].y = y; - break; - } - } -} - -static void DecrementFeederStepCounters(void) -{ - u8 i; - - for (i = 0; i < NUM_POKEBLOCK_FEEDERS; i++) - { - if (gPokeblockFeeders[i].stepCounter != 0) - { - gPokeblockFeeders[i].stepCounter--; - if (gPokeblockFeeders[i].stepCounter == 0) - ClearPokeblockFeeder(i); - } - } -} - -bool8 unref_sub_80C853C(void) -{ - SafariZoneGetPokeblockNameInFeeder(); - - if (gScriptResult == 0xFFFF) - { - return FALSE; - } - - ConvertIntToDecimalStringN(gStringVar2, - gPokeblockFeeders[gScriptResult].stepCounter, - STR_CONV_MODE_LEADING_ZEROS, 3); - - return TRUE; -} diff --git a/src/save.c b/src/save.c deleted file mode 100644 index adf39268e..000000000 --- a/src/save.c +++ /dev/null @@ -1,797 +0,0 @@ -#include "global.h" -#include "gba/gba.h" -#include "gba/flash_internal.h" -#include "save.h" -#include "load_save.h" -#include "rom4.h" -#include "save_failed_screen.h" - -#define GETVALIDSTATUSBITFIELD ((1 << ARRAY_COUNT(gSaveSectionLocations)) - 1) -#define GETCHUNKSIZE(chunk, n) ((sizeof(chunk) - (0xF80 * (n - 1))) >= 0xF80 ? 0xF80 : (sizeof(chunk) - (0xF80 * (n - 1)))) -#define GETBLOCKOFFSET(n) (0xF80 * (n - 1)) -#define TOTALNUMSECTORS ((ARRAY_COUNT(gSaveSectionLocations) * 2) + (ARRAY_COUNT(gHallOfFameSaveSectionLocations) * 2)) // there are 2 slots, so double each array count and get the sum. - -extern struct SaveSection unk_2000000; // slow save RAM - -u16 gLastWrittenSector; -u32 gLastSaveCounter; -u16 gLastKnownGoodSector; -u32 gDamagedSaveSectors; -u32 gSaveCounter; -struct SaveSection *gFastSaveSection; // the pointer is in fast IWRAM but may sometimes point to the slower EWRAM. -u16 gUnknown_03005EB4; -u16 gSaveFileStatus; -u32 gGameContinueCallback; - -extern struct PokemonStorage gPokemonStorage; -extern struct HallOfFame gHallOfFame; - -static EWRAM_DATA u32 gLastSaveSectorStatus = 0; // used but in an unferenced function, so unused - -const struct SaveSectionLocation gSaveSectionLocations[] = -{ - {((u8 *) &gSaveBlock2) + GETBLOCKOFFSET(1), GETCHUNKSIZE(gSaveBlock2, 1)}, - {((u8 *) &gSaveBlock1) + GETBLOCKOFFSET(1), GETCHUNKSIZE(gSaveBlock1, 1)}, - {((u8 *) &gSaveBlock1) + GETBLOCKOFFSET(2), GETCHUNKSIZE(gSaveBlock1, 2)}, - {((u8 *) &gSaveBlock1) + GETBLOCKOFFSET(3), GETCHUNKSIZE(gSaveBlock1, 3)}, - {((u8 *) &gSaveBlock1) + GETBLOCKOFFSET(4), GETCHUNKSIZE(gSaveBlock1, 4)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(1), GETCHUNKSIZE(gPokemonStorage, 1)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(2), GETCHUNKSIZE(gPokemonStorage, 2)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(3), GETCHUNKSIZE(gPokemonStorage, 3)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(4), GETCHUNKSIZE(gPokemonStorage, 4)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(5), GETCHUNKSIZE(gPokemonStorage, 5)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(6), GETCHUNKSIZE(gPokemonStorage, 6)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(7), GETCHUNKSIZE(gPokemonStorage, 7)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(8), GETCHUNKSIZE(gPokemonStorage, 8)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(9), GETCHUNKSIZE(gPokemonStorage, 9)} -}; - -const struct SaveSectionLocation gHallOfFameSaveSectionLocations[] = -{ - {((u8 *) &gHallOfFame) + GETBLOCKOFFSET(1), GETCHUNKSIZE(struct HallOfFame, 1)}, // gHallOfFame is not a proper sym, so the struct must be used. - {((u8 *) &gHallOfFame) + GETBLOCKOFFSET(2), GETCHUNKSIZE(struct HallOfFame, 2)} -}; - -const u8 gFlashSectors[] = { 0x1E, 0x1F }; - -void ClearSaveData(void) -{ - u16 i; - - for (i = 0; i < NUM_SECTORS; i++) - EraseFlashSector(i); -} - -void ResetSaveCounters(void) -{ - gSaveCounter = 0; - gLastWrittenSector = 0; - gDamagedSaveSectors = 0; -} - -bool32 SetDamagedSectorBits(u8 op, u8 bit) -{ - bool32 retVal = FALSE; - - switch (op) - { - case ENABLE: - gDamagedSaveSectors |= (1 << bit); - break; - case DISABLE: - gDamagedSaveSectors &= ~(1 << bit); - break; - case CHECK: // unused - if (gDamagedSaveSectors & (1 << bit)) - retVal = TRUE; - break; - } - - return retVal; -} - -u8 save_write_to_flash(u16 a1, const struct SaveSectionLocation *location) -{ - u32 retVal; - u16 i; - - gFastSaveSection = &unk_2000000; - - if (a1 != 0xFFFF) // for link - { - retVal = HandleWriteSector(a1, location); - } - else - { - gLastKnownGoodSector = gLastWrittenSector; // backup the current written sector before attempting to write. - gLastSaveCounter = gSaveCounter; - gLastWrittenSector++; - gLastWrittenSector = gLastWrittenSector % ARRAY_COUNT(gSaveSectionLocations); - gSaveCounter++; - retVal = 1; - - for (i = 0; i < ARRAY_COUNT(gSaveSectionLocations); i++) - HandleWriteSector(i, location); - - if (gDamagedSaveSectors != 0) // skip the damaged sector. - { - retVal = 0xFF; - gLastWrittenSector = gLastKnownGoodSector; - gSaveCounter = gLastSaveCounter; - } - } - - return retVal; -} - -u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location) -{ - u16 i; - u16 sector; - u8 *data; - u16 size; - - sector = a1 + gLastWrittenSector; - sector %= ARRAY_COUNT(gSaveSectionLocations); - sector += ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); - - data = location[a1].data; - size = location[a1].size; - - // clear save section. - for (i = 0; i < sizeof(struct SaveSection); i++) - ((char *)gFastSaveSection)[i] = 0; - - gFastSaveSection->id = a1; - gFastSaveSection->security = UNKNOWN_CHECK_VALUE; - gFastSaveSection->counter = gSaveCounter; - - for (i = 0; i < size; i++) - gFastSaveSection->data[i] = data[i]; - - gFastSaveSection->checksum = CalculateChecksum(data, size); - return TryWriteSector(sector, gFastSaveSection->data); -} - -u8 HandleWriteSectorNBytes(u8 sector, u8 *data, u16 size) -{ - u16 i; - struct SaveSection *section = &unk_2000000; - - for (i = 0; i < sizeof(struct SaveSection); i++) - ((char *)section)[i] = 0; - - section->security = UNKNOWN_CHECK_VALUE; - - for (i = 0; i < size; i++) - section->data[i] = data[i]; - - section->id = CalculateChecksum(data, size); // though this appears to be incorrect, it might be some sector checksum instead of a whole save checksum and only appears to be relevent to HOF data, if used. - return TryWriteSector(sector, section->data); -} - -u8 TryWriteSector(u8 sector, u8 *data) -{ - if (ProgramFlashSectorAndVerify(sector, data) != 0) // is damaged? - { - SetDamagedSectorBits(ENABLE, sector); // set damaged sector bits. - return 0xFF; - } - else - { - SetDamagedSectorBits(DISABLE, sector); // unset damaged sector bits. it's safe now. - return 1; - } -} - -u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectionLocation *location) // location is unused -{ - gFastSaveSection = &unk_2000000; - gLastKnownGoodSector = gLastWrittenSector; - gLastSaveCounter = gSaveCounter; - gLastWrittenSector++; - gLastWrittenSector = gLastWrittenSector % ARRAY_COUNT(gSaveSectionLocations); - gSaveCounter++; - gUnknown_03005EB4 = 0; - gDamagedSaveSectors = 0; - return 0; -} - -u32 RestoreSaveBackupVars(const struct SaveSectionLocation *location) // only ever called once, and gSaveBlock2 is passed to this function. location is unused -{ - gFastSaveSection = &unk_2000000; - gLastKnownGoodSector = gLastWrittenSector; - gLastSaveCounter = gSaveCounter; - gUnknown_03005EB4 = 0; - gDamagedSaveSectors = 0; - return 0; -} - -u8 sub_812550C(u16 a1, const struct SaveSectionLocation *location) -{ - u8 retVal; - - if (gUnknown_03005EB4 < a1 - 1) - { - retVal = 1; - HandleWriteSector(gUnknown_03005EB4, location); - gUnknown_03005EB4++; - if (gDamagedSaveSectors) - { - retVal = 0xFF; - gLastWrittenSector = gLastKnownGoodSector; - gSaveCounter = gLastSaveCounter; - } - } - else - { - retVal = 0xFF; - } - - return retVal; -} - -u8 sub_812556C(u16 a1, const struct SaveSectionLocation *location) -{ - u8 retVal = 1; - - sub_81255B8(a1 - 1, location); - - if (gDamagedSaveSectors) - { - retVal = 0xFF; - gLastWrittenSector = gLastKnownGoodSector; - gSaveCounter = gLastSaveCounter; - } - return retVal; -} - -u8 sub_81255B8(u16 a1, const struct SaveSectionLocation *location) -{ - u16 i; - u16 sector; - u8 *data; - u16 size; - u8 status; - - sector = a1 + gLastWrittenSector; - sector %= ARRAY_COUNT(gSaveSectionLocations); - sector += ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); - - data = location[a1].data; - size = location[a1].size; - - // clear temp save section. - for (i = 0; i < sizeof(struct SaveSection); i++) - ((char *)gFastSaveSection)[i] = 0; - - gFastSaveSection->id = a1; - gFastSaveSection->security = UNKNOWN_CHECK_VALUE; - gFastSaveSection->counter = gSaveCounter; - - // set temp section's data. - for (i = 0; i < size; i++) - gFastSaveSection->data[i] = data[i]; - - // calculate checksum. - gFastSaveSection->checksum = CalculateChecksum(data, size); - - EraseFlashSector(sector); - - status = 1; - - for (i = 0; i < sizeof(struct UnkSaveSection); i++) - { - if (ProgramFlashByte(sector, i, ((u8 *)gFastSaveSection)[i])) - { - status = 0xFF; - break; - } - } - - if (status == 0xFF) - { - SetDamagedSectorBits(ENABLE, sector); - return 0xFF; - } - else - { - status = 1; - - for (i = 0; i < 7; i++) - { - if (ProgramFlashByte(sector, 0xFF9 + i, ((u8 *)gFastSaveSection)[0xFF9 + i])) - { - status = 0xFF; - break; - } - } - - if (status == 0xFF) - { - SetDamagedSectorBits(ENABLE, sector); - return 0xFF; - } - else - { - SetDamagedSectorBits(DISABLE, sector); - return 1; - } - } -} - -u8 sub_8125758(u16 a1, const struct SaveSectionLocation *location) -{ - u16 sector; - - sector = a1 + gLastWrittenSector - 1; - sector %= ARRAY_COUNT(gSaveSectionLocations); - sector += ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); - - if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), ((u8 *)gFastSaveSection)[sizeof(struct UnkSaveSection)])) - { - // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. - SetDamagedSectorBits(ENABLE, sector); - gLastWrittenSector = gLastKnownGoodSector; - gSaveCounter = gLastSaveCounter; - return 0xFF; - } - else - { - SetDamagedSectorBits(DISABLE, sector); - return 1; - } -} - -u8 sub_81257F0(u16 a1, const struct SaveSectionLocation *location) -{ - u16 sector; - - sector = a1 + gLastWrittenSector - 1; - sector %= ARRAY_COUNT(gSaveSectionLocations); - sector += ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); - - if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), 0x25)) - { - // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. - SetDamagedSectorBits(ENABLE, sector); - gLastWrittenSector = gLastKnownGoodSector; - gSaveCounter = gLastSaveCounter; - return 0xFF; - } - else - { - SetDamagedSectorBits(DISABLE, sector); - return 1; - } -} - -u8 sub_812587C(u16 a1, const struct SaveSectionLocation *location) -{ - u8 retVal; - gFastSaveSection = &unk_2000000; - if (a1 != 0xFFFF) - { - retVal = 0xFF; - } - else - { - retVal = GetSaveValidStatus(location); - sub_81258BC(0xFFFF, location); - } - - return retVal; -} - -u8 sub_81258BC(u16 a1, const struct SaveSectionLocation *location) -{ - u16 i; - u16 checksum; - u16 v3 = ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); - u16 id; - - for (i = 0; i < ARRAY_COUNT(gSaveSectionLocations); i++) - { - DoReadFlashWholeSection(i + v3, gFastSaveSection); - id = gFastSaveSection->id; - if (id == 0) - gLastWrittenSector = i; - checksum = CalculateChecksum(gFastSaveSection->data, location[id].size); - if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE - && gFastSaveSection->checksum == checksum) - { - u16 j; - for (j = 0; j < location[id].size; j++) - ((u8 *)location[id].data)[j] = gFastSaveSection->data[j]; - } - } - - return 1; -} - -u8 GetSaveValidStatus(const struct SaveSectionLocation *location) -{ - u16 i; - u16 checksum; - u32 saveSlot1Counter = 0; - u32 saveSlot2Counter = 0; - u32 slotCheckField = 0; - bool8 securityPassed = FALSE; - u8 saveSlot1Status; - u8 saveSlot2Status; - - // check save slot 1. - for (i = 0; i < ARRAY_COUNT(gSaveSectionLocations); i++) - { - DoReadFlashWholeSection(i, gFastSaveSection); - if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE) - { - securityPassed = TRUE; - checksum = CalculateChecksum(gFastSaveSection->data, location[gFastSaveSection->id].size); - if (gFastSaveSection->checksum == checksum) - { - saveSlot1Counter = gFastSaveSection->counter; - slotCheckField |= 1 << gFastSaveSection->id; - } - } - } - - if (securityPassed) - { - if (slotCheckField == GETVALIDSTATUSBITFIELD) - saveSlot1Status = 1; - else - saveSlot1Status = 255; - } - else - { - saveSlot1Status = 0; - } - - slotCheckField = 0; - securityPassed = FALSE; - - // check save slot 2. - for (i = 0; i < ARRAY_COUNT(gSaveSectionLocations); i++) - { - DoReadFlashWholeSection(i + ARRAY_COUNT(gSaveSectionLocations), gFastSaveSection); - if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE) - { - securityPassed = TRUE; - checksum = CalculateChecksum(gFastSaveSection->data, location[gFastSaveSection->id].size); - if (gFastSaveSection->checksum == checksum) - { - saveSlot2Counter = gFastSaveSection->counter; - slotCheckField |= 1 << gFastSaveSection->id; - } - } - } - - if (securityPassed) - { - if (slotCheckField == GETVALIDSTATUSBITFIELD) - saveSlot2Status = 1; - else - saveSlot2Status = 255; - } - else - { - saveSlot2Status = 0; - } - - if (saveSlot1Status == 1 && saveSlot2Status == 1) - { - if ((saveSlot1Counter == -1 && saveSlot2Counter == 0) || (saveSlot1Counter == 0 && saveSlot2Counter == -1)) - { - if ((unsigned)(saveSlot1Counter + 1) < (unsigned)(saveSlot2Counter + 1)) - { - gSaveCounter = saveSlot2Counter; - } - else - { - gSaveCounter = saveSlot1Counter; - } - } - else - { - if (saveSlot1Counter < saveSlot2Counter) - { - gSaveCounter = saveSlot2Counter; - } - else - { - gSaveCounter = saveSlot1Counter; - } - } - return 1; - } - - if (saveSlot1Status == 1) - { - gSaveCounter = saveSlot1Counter; - if (saveSlot2Status == 255) - return 255; - return 1; - } - - if (saveSlot2Status == 1) - { - gSaveCounter = saveSlot2Counter; - if (saveSlot1Status == 255) - return 255; - return 1; - } - - if (saveSlot1Status == 0 && saveSlot2Status == 0) - { - gSaveCounter = 0; - gLastWrittenSector = 0; - return 0; - } - - gSaveCounter = 0; - gLastWrittenSector = 0; - return 2; -} - -u8 sub_8125B88(u8 a1, u8 *data, u16 size) -{ - u16 i; - struct SaveSection *section = &unk_2000000; - DoReadFlashWholeSection(a1, section); - if (section->security == UNKNOWN_CHECK_VALUE) - { - u16 checksum = CalculateChecksum(section->data, size); - if (section->id == checksum) - { - for (i = 0; i < size; i++) - data[i] = section->data[i]; - return 1; - } - else - { - return 2; - } - } - else - { - return 0; - } -} - -u8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section) -{ - ReadFlash(sector, 0, section->data, sizeof(struct SaveSection)); - return 1; -} - -u16 CalculateChecksum(void *data, u16 size) -{ - u16 i; - u32 checksum = 0; - - for (i = 0; i < (size / 4); i++) - checksum += *((u32 *)data)++; - - return ((checksum >> 16) + checksum); -} - -u8 HandleSavingData(u8 saveType) -{ - u8 i; - switch (saveType) - { - case HOF_DELETE_SAVE: // deletes HOF before overwriting HOF completely. unused - for (i = (ARRAY_COUNT(gSaveSectionLocations) * 2 + 0); i < TOTALNUMSECTORS; i++) - EraseFlashSector(i); - case HOF_SAVE: // hall of fame. - if (GetGameStat(10) < 999) - IncrementGameStat(10); - for (i = 0; i < ARRAY_COUNT(gHallOfFameSaveSectionLocations); i++) - HandleWriteSectorNBytes((ARRAY_COUNT(gSaveSectionLocations) * 2 + 0) + i, gHallOfFameSaveSectionLocations[i].data, gHallOfFameSaveSectionLocations[i].size); - SaveSerializedGame(); - save_write_to_flash(0xFFFF, gSaveSectionLocations); - break; - case NORMAL_SAVE: // normal save. also called by overwriting your own save. - default: - SaveSerializedGame(); - save_write_to_flash(0xFFFF, gSaveSectionLocations); - break; - case LINK_SAVE: // link save. updates only gSaveBlock1 and gSaveBlock2. - SaveSerializedGame(); - for (i = 0; i < 5; i++) - save_write_to_flash(i, gSaveSectionLocations); - break; - case EREADER_SAVE: // used in mossdeep "game corner" before/after battling old man e-reader trainer - SaveSerializedGame(); - save_write_to_flash(0, gSaveSectionLocations); - break; - case DIFFERENT_FILE_SAVE: // there is a different file, so erase the file and overwrite it completely. - for (i = (ARRAY_COUNT(gSaveSectionLocations) * 2 + 0); i < TOTALNUMSECTORS; i++) - EraseFlashSector(i); // erase HOF. - SaveSerializedGame(); - save_write_to_flash(0xFFFF, gSaveSectionLocations); - break; - } - return 0; -} - -u8 TrySavingData(u8 saveType) // TrySave -{ - if (gFlashMemoryPresent != TRUE) - return 0xFF; - HandleSavingData(saveType); - if (!gDamagedSaveSectors) - return 1; - DoSaveFailedScreen(saveType); - return 0xFF; -} - -u8 sub_8125D80(void) // trade.s save -{ - if (gFlashMemoryPresent != TRUE) - return 1; - SaveSerializedGame(); - RestoreSaveBackupVarsAndIncrement(gSaveSectionLocations); - return 0; -} - -bool8 sub_8125DA8(void) // trade.s save -{ - u8 retVal = sub_812550C(ARRAY_COUNT(gSaveSectionLocations), gSaveSectionLocations); - if (gDamagedSaveSectors) - DoSaveFailedScreen(0); - if (retVal == 0xFF) - return 1; - else - return 0; -} - -u8 sub_8125DDC(void) // trade.s save -{ - sub_812556C(ARRAY_COUNT(gSaveSectionLocations), gSaveSectionLocations); - if (gDamagedSaveSectors) - DoSaveFailedScreen(0); - return 0; -} - -u8 sub_8125E04(void) // trade.s save -{ - sub_8125758(ARRAY_COUNT(gSaveSectionLocations), gSaveSectionLocations); - if (gDamagedSaveSectors) - DoSaveFailedScreen(0); - return 0; -} - -u8 sub_8125E2C(void) -{ - if (gFlashMemoryPresent != TRUE) - return 1; - - SaveSerializedGame(); - RestoreSaveBackupVars(gSaveSectionLocations); - sub_812556C(gUnknown_03005EB4 + 1, gSaveSectionLocations); - return 0; -} - -bool8 sub_8125E6C(void) -{ - u8 retVal = FALSE; - u16 val = ++gUnknown_03005EB4; - if (val <= 4) - { - sub_812556C(gUnknown_03005EB4 + 1, gSaveSectionLocations); - sub_81257F0(val, gSaveSectionLocations); - } - else - { - sub_81257F0(val, gSaveSectionLocations); - retVal = TRUE; - } - if (gDamagedSaveSectors) - DoSaveFailedScreen(1); - return retVal; -} - -u8 sub_8125EC8(u8 a1) -{ - u8 result; - - if (gFlashMemoryPresent != TRUE) - { - gSaveFileStatus = 4; - return 0xFF; - } - - switch (a1) - { - case 0: - default: - result = sub_812587C(0xFFFF, gSaveSectionLocations); - LoadSerializedGame(); - gSaveFileStatus = result; - gGameContinueCallback = 0; - break; - case 3: - result = sub_8125B88((ARRAY_COUNT(gSaveSectionLocations) * 2 + 0), gHallOfFameSaveSectionLocations[0].data, gHallOfFameSaveSectionLocations[0].size); - if (result == 1) - result = sub_8125B88((ARRAY_COUNT(gSaveSectionLocations) * 2 + 1), gHallOfFameSaveSectionLocations[1].data, gHallOfFameSaveSectionLocations[1].size); - break; - } - - return result; -} - -bool8 unref_sub_8125F4C(struct UnkSaveSection *a1) -{ - u16 i; - char *raw = (char *)a1; - - for (i = 0; i < sizeof(struct SaveSection); i++) - raw[i] = 0; - - ReadFlash(gFlashSectors[0], 0, a1->data, 4096); - - if (a1->security != UNKNOWN_CHECK_VALUE) - return FALSE; - - return TRUE; -} - -u8 unref_sub_8125FA0(void) -{ - u16 i; - u8 v0 = TrySavingData(0); - - for (i = 0; i < 2; i++) - EraseFlashSector(gFlashSectors[i]); - - if (v0 == 255) - { - return 3; - } - else if (v0 == 3) - { - return 2; - } - else - { - sub_8125EC8(0); - return 1; - } -} - -u8 unref_sub_8125FF0(u8 *data, u16 size) -{ - u16 i; - struct UnkSaveSection *section = (struct UnkSaveSection *)&unk_2000000; - - for (i = 0; i < sizeof(struct SaveSection); i++) - ((char *)section)[i] = 0; - - section->security = UNKNOWN_CHECK_VALUE; - - for (i = 0; i < size; i++) - section->data[i] = data[i]; - - gLastSaveSectorStatus = ProgramFlashSectorAndVerifyNBytes(gFlashSectors[0], (u8 *)section, sizeof(struct SaveSection)); - - if (gLastSaveSectorStatus) - return 0xFF; - else - return 1; -} - -u8 unref_sub_8126068(u8 sector, u8 *data, u32 size) -{ - if (ProgramFlashSectorAndVerify(sector, data)) - return 255; - else - return 1; -} - -u8 unref_sub_8126080(u8 sector, u8 *data) -{ - ReadFlash(sector, 0, data, sizeof(struct SaveSection)); - return 1; -} diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c deleted file mode 100644 index b91e8b5bf..000000000 --- a/src/save_failed_screen.c +++ /dev/null @@ -1,310 +0,0 @@ -#include "global.h" -#include "gba/flash_internal.h" -#include "save_failed_screen.h" -#include "m4a.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "save.h" -#include "sprite.h" -#include "starter_choose.h" -#include "strings.h" -#include "task.h" -#include "text.h" - -// In English 1.0, the text window is too small, causing text to overflow. - -#ifdef BUGFIX_SAVEFAILEDSCREEN1 -#define MSG_WIN_TOP 10 -#else -#define MSG_WIN_TOP 12 -#endif - -#define CLOCK_WIN_TOP (MSG_WIN_TOP - 4) - -extern u8 unk_2000000[]; - -static EWRAM_DATA u16 gSaveFailedType = 0; -static EWRAM_DATA u16 gSaveFailedClockInfo[9] = {0}; - -extern u32 gDamagedSaveSectors; -extern u32 gGameContinueCallback; - -static const struct OamData sClockOamData = -{ - 160, // Y - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0 -}; - -static const u8 sClockFrames[8][3] = -{ - { 1, 0, 0 }, - { 5, 0, 0 }, - { 9, 0, 0 }, - { 5, 0, 1 }, - { 1, 0, 1 }, - { 5, 1, 1 }, - { 9, 1, 0 }, - { 5, 1, 0 }, -}; - -static const u8 gSaveFailedClockPal[] = INCBIN_U8("graphics/misc/clock_small.gbapal"); -static const u8 gSaveFailedClockGfx[] = INCBIN_U8("graphics/misc/clock_small.4bpp.lz"); - -static void VBlankCB(void); -static void CB2_SaveFailedScreen(void); -static void CB2_WipeSave(void); -static void CB2_GameplayCannotBeContinued(void); -static void CB2_FadeAndReturnToTitleScreen(void); -static void CB2_ReturnToTitleScreen(void); -static void VBlankCB_UpdateClockGraphics(void); -static bool8 VerifySectorWipe(u16 sector); -static bool8 WipeSector(u16 sector); -static bool8 WipeSectors(u32 sectorBits); - -void DoSaveFailedScreen(u8 saveType) -{ - SetMainCallback2(CB2_SaveFailedScreen); - gSaveFailedType = saveType; - gSaveFailedClockInfo[0] = FALSE; -} - -static void VBlankCB(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -static void CB2_SaveFailedScreen(void) -{ - u16 ime; - - switch (gMain.state) - { - case 0: - default: - SetVBlankCallback(0); - REG_DISPCNT = 0; - REG_BG3CNT = 0; - REG_BG2CNT = 0; - REG_BG1CNT = 0; - REG_BG0CNT = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - DmaFill16(3, 0, VRAM, VRAM_SIZE); - DmaFill32(3, 0, OAM, OAM_SIZE); - DmaFill16(3, 0, PLTT, PLTT_SIZE); - LZ77UnCompVram(&gBirchHelpGfx, (void *)VRAM); - LZ77UnCompVram(&gBirchBagTilemap, (void *)(VRAM + 0x3000)); - LZ77UnCompVram(&gBirchGrassTilemap, (void *)(VRAM + 0x3800)); - LZ77UnCompVram(&gSaveFailedClockGfx, (void *)(VRAM + 0x10020)); - ResetSpriteData(); - ResetTasks(); - ResetPaletteFade(); - LoadPalette(&gBirchBagGrassPal, 0, sizeof(gBirchBagGrassPal)); - LoadPalette(&gSaveFailedClockPal, 0x100, sizeof(gSaveFailedClockPal)); - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow(&gWindowConfig_81E6CE4); - MenuDrawTextWindow(13, CLOCK_WIN_TOP, 16, CLOCK_WIN_TOP + 3); // clock window - MenuDrawTextWindow(1, MSG_WIN_TOP, 28, 19); // message window - MenuPrint(gSystemText_SaveFailedBackupCheck, 2, MSG_WIN_TOP + 1); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - ime = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = ime; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - SetVBlankCallback(VBlankCB); - REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG3_ON | DISPCNT_BG2_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_MODE_0; - gMain.state++; - break; - case 1: - if (!UpdatePaletteFade()) - { - SetMainCallback2(CB2_WipeSave); - SetVBlankCallback(VBlankCB_UpdateClockGraphics); - } - break; - } -} - -static void CB2_WipeSave(void) -{ - u8 wipeTries = 0; - - gSaveFailedClockInfo[0] = TRUE; - - while (gDamagedSaveSectors != 0 && wipeTries < 3) // while there are still attempts left, keep trying to fix the save sectors. - { - if (WipeSectors(gDamagedSaveSectors) != FALSE) - { - MenuDrawTextWindow(1, MSG_WIN_TOP, 28, 19); - MenuPrint(gSystemText_BackupDamagedGameContinue, 2, MSG_WIN_TOP + 1); - SetMainCallback2(CB2_GameplayCannotBeContinued); - return; - } - - MenuDrawTextWindow(1, MSG_WIN_TOP, 28, 19); - MenuPrint(gSystemText_CheckCompleteSaveAttempt, 2, MSG_WIN_TOP + 1); - HandleSavingData(gSaveFailedType); - - if (gDamagedSaveSectors != 0) - { -#ifdef BUGFIX_SAVEFAILEDSCREEN2 - MenuDrawTextWindow(1, MSG_WIN_TOP, 28, 19); -#endif - MenuPrint(gSystemText_SaveFailedBackupCheck, 2, MSG_WIN_TOP + 1); - } - - wipeTries++; - } - - if (wipeTries == 3) - { - MenuDrawTextWindow(1, MSG_WIN_TOP, 28, 19); - MenuPrint(gSystemText_BackupDamagedGameContinue, 2, MSG_WIN_TOP + 1); - SetMainCallback2(CB2_FadeAndReturnToTitleScreen); // called again below - } - else - { - MenuDrawTextWindow(1, MSG_WIN_TOP, 28, 19); - - // no callback exists, so the game cannot continue. - if (gGameContinueCallback == 0) - MenuPrint(gSystemText_SaveCompletedGameEnd, 2, MSG_WIN_TOP + 1); - else // callback exists, so continue - MenuPrint(gSystemText_SaveCompletedPressA, 2, MSG_WIN_TOP + 1); - } - - SetMainCallback2(CB2_FadeAndReturnToTitleScreen); -} - -static void CB2_GameplayCannotBeContinued(void) -{ - gSaveFailedClockInfo[0] = FALSE; - - if (gMain.newKeys & A_BUTTON) - { - MenuDrawTextWindow(1, MSG_WIN_TOP, 28, 19); - MenuPrint(gSystemText_GameplayEnded, 2, MSG_WIN_TOP + 1); - SetVBlankCallback(VBlankCB); - SetMainCallback2(CB2_FadeAndReturnToTitleScreen); - } -} - -static void CB2_FadeAndReturnToTitleScreen(void) -{ - gSaveFailedClockInfo[0] = FALSE; - - if (gMain.newKeys & A_BUTTON) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - SetVBlankCallback(VBlankCB); - SetMainCallback2(CB2_ReturnToTitleScreen); - } -} - -static void CB2_ReturnToTitleScreen(void) -{ - if (!UpdatePaletteFade()) - { - if (gGameContinueCallback == 0) // no callback exists, so do a soft reset. - { - DoSoftReset(); - } - else - { - SetMainCallback2((MainCallback)gGameContinueCallback); - gGameContinueCallback = 0; - } - } -} - -static void VBlankCB_UpdateClockGraphics(void) -{ - unsigned int n = (gMain.vblankCounter2 >> 3) & 7; - - gMain.oamBuffer[0] = sClockOamData; - gMain.oamBuffer[0].x = 112; - gMain.oamBuffer[0].y = (CLOCK_WIN_TOP + 1) * 8; - - if (gSaveFailedClockInfo[0] != FALSE) - { - gMain.oamBuffer[0].tileNum = sClockFrames[n][0]; - gMain.oamBuffer[0].matrixNum = (sClockFrames[n][2] << 4) | (sClockFrames[n][1] << 3); - } - else - { - gMain.oamBuffer[0].tileNum = 1; - } - - CpuFastCopy(gMain.oamBuffer, (void *)OAM, 4); - - if (gSaveFailedClockInfo[1]) // maybe was used for debugging? - gSaveFailedClockInfo[1]--; -} - -static bool8 VerifySectorWipe(u16 sector) -{ - u32 *ptr = (u32 *)unk_2000000; - u16 i; - - ReadFlash(sector, 0, (u8 *)ptr, 4096); - - for (i = 0; i < 0x400; i++, ptr++) - if (*ptr) - return TRUE; - - return FALSE; -} - -static bool8 WipeSector(u16 sector) -{ - u16 i, j; - bool8 failed = TRUE; - - for (i = 0; failed && i < 130; i++) - { - for (j = 0; j < 0x1000; j++) - ProgramFlashByte(sector, j, 0); - - failed = VerifySectorWipe(sector); - } - - return failed; -} - -static bool8 WipeSectors(u32 sectorBits) -{ - u16 i; - - for (i = 0; i < 0x20; i++) - if ((sectorBits & (1 << i)) && !WipeSector(i)) - sectorBits &= ~(1 << i); - - if (sectorBits == 0) - return FALSE; - else - return TRUE; -} diff --git a/src/save_menu_util.c b/src/save_menu_util.c deleted file mode 100644 index a2d17bd36..000000000 --- a/src/save_menu_util.c +++ /dev/null @@ -1,148 +0,0 @@ -#include "global.h" -#include "save_menu_util.h" -#include "event_data.h" -#include "menu.h" -#include "pokedex.h" -#include "region_map.h" -#include "string_util.h" -#include "strings2.h" - -void HandleDrawSaveWindowInfo(s16 left, s16 top) -{ - u32 width = 12; - - // old handle for setting window width? - if (IsResizeSaveWindowEnabled()) - width = 13; - - if (FlagGet(SYS_POKEDEX_GET)) - { - // print info + dex information. - MenuDrawTextWindow(left, top, left + width, top + 11); - PrintSaveMapName(++left, ++top); // MAP NAME - PrintSavePlayerName(left, top + 2); // PLAYER - PrintSaveBadges(left, top + 4); // BADGES - PrintSavePokedexCount(left, top + 6); // POKEDEX - PrintSavePlayTime(left, top + 8); // PLAY TIME - } - else - { - // print everything besides dex. - MenuDrawTextWindow(left, top, left + width, top + 9); - PrintSaveMapName(++left, ++top); // MAP NAME - PrintSavePlayerName(left, top + 2); // PLAYER - PrintSaveBadges(left, top + 4); // BADGES - PrintSavePlayTime(left, top + 6); // PLAY TIME - } -} - -void HandleCloseSaveWindow(u16 left, u16 top) -{ - u32 width = 12; - - // old handle for setting window width? - if (IsResizeSaveWindowEnabled()) - width = 13; - - if (FlagGet(SYS_POKEDEX_GET)) - MenuZeroFillWindowRect(left, top, left + width, top + 11); - else - MenuZeroFillWindowRect(left, top, left + width, top + 9); -} - -/* -theory: This function was used to handle the save menu window's width being auto sized from -either 12 or 13 in an older source. Whatever was here might have either been optimized out by -GF's compiler or was dummied out to always return a TRUE at some point. -*/ -u8 IsResizeSaveWindowEnabled(void) // i don't know what else to name it.. -{ - return TRUE; -} - -void PrintSavePlayerName(s16 x, s16 y) -{ - MenuPrint(gOtherText_Player, x, y); - MenuPrint_RightAligned(gSaveBlock2.playerName, x + 12, y); -} - -void PrintSaveMapName(s16 x, s16 y) -{ - char name[32]; - - CopyMapName(name, gMapHeader.regionMapSectionId); - MenuPrint(name, x, y); -} - -void PrintSaveBadges(s16 x, s16 y) -{ - char badges[16]; - - MenuPrint(gOtherText_Badges, x, y); - ConvertIntToDecimalString(badges, GetBadgeCount()); - MenuPrint_RightAligned(badges, x + 12, y); -} - -void PrintSavePokedexCount(s16 x, s16 y) -{ - char pokedex[16]; - - MenuPrint(gOtherText_Pokedex, x, y); - ConvertIntToDecimalStringN(pokedex, GetPokedexSeenCount(), 1, 3); - MenuPrint_RightAligned(pokedex, x + 12, y); -} - -void PrintSavePlayTime(s16 x, s16 y) -{ - char playtime[16]; - - MenuPrint(gOtherText_PlayTime, x, y); - FormatPlayTime(playtime, gSaveBlock2.playTimeHours, gSaveBlock2.playTimeMinutes, 1); - MenuPrint_RightAligned(playtime, x + 12, y); -} - -u8 GetBadgeCount(void) -{ - u8 badgeCount = 0; - int badgeFlag; - - for (badgeFlag = BADGE01_GET; badgeFlag <= BADGE08_GET; badgeFlag++) - if (FlagGet(badgeFlag)) - badgeCount++; - - return badgeCount; -} - -u16 GetPokedexSeenCount() -{ - u16 pokedexSeenCount; - - if (IsNationalPokedexEnabled()) - pokedexSeenCount = GetNationalPokedexCount(1); - else - pokedexSeenCount = GetHoennPokedexCount(1); - - return pokedexSeenCount; -} - -void FormatPlayTime(char *playtime, u16 hours, u16 minutes, u16 unk) -{ - s16 colon = unk; - playtime = ConvertIntToDecimalString(playtime, hours); - - // playtime[0] is hours. - // playtime[1] is the character to render between hours and minutes. - // playtime[2] is minutes. - - playtime[0] = 0; - - if (colon) - playtime[1] = 0xF0; // set middle character to ":" - else - playtime[1] = 0; - - playtime[2] = 0; - playtime += 3; - - ConvertIntToDecimalStringN(playtime, minutes, 2, 2); -} diff --git a/src/scene/contest_painting.c b/src/scene/contest_painting.c new file mode 100644 index 000000000..391cbdfaa --- /dev/null +++ b/src/scene/contest_painting.c @@ -0,0 +1,805 @@ +#include "global.h" +#include "contest_painting.h" +#include "cute_sketch.h" +#include "data2.h" +#include "decompress.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "rng.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" +#include "unknown_task.h" + +extern u8 unk_2000000[]; + +static u8 gUnknown_03000750; +static u16 gUnknown_03000752; +static u16 gUnknown_03000754; +static u8 gUnknown_03000756; + +u16 (*gUnknown_03005E10)[][32]; +struct Unk03005E20 gUnknown_03005E20; +u8 gUnknown_03005E40[0x4C]; +struct ContestEntry *gUnknown_03005E8C; +u16 (*gUnknown_03005E90)[]; + +extern struct ContestEntry unk_2015de0; +extern struct Unk2015E00 unk_2015e00; + +static const u16 gPictureFramePalettes[][16] = +{ + INCBIN_U16("graphics/picture_frame/bg0.gbapal"), + INCBIN_U16("graphics/picture_frame/bg1.gbapal"), + INCBIN_U16("graphics/picture_frame/bg2.gbapal"), + INCBIN_U16("graphics/picture_frame/bg3.gbapal"), + INCBIN_U16("graphics/picture_frame/bg4.gbapal"), + INCBIN_U16("graphics/picture_frame/bg5.gbapal"), + {0}, + {0}, +}; +const u8 emptySpace[8 * 32] = {0}; +const u8 gPictureFrameTiles_0[] = INCBIN_U8("graphics/picture_frame/frame0.4bpp.rl"); +const u8 gPictureFrameTiles_1[] = INCBIN_U8("graphics/picture_frame/frame1.4bpp.rl"); +const u8 gPictureFrameTiles_2[] = INCBIN_U8("graphics/picture_frame/frame2.4bpp.rl"); +const u8 gPictureFrameTiles_3[] = INCBIN_U8("graphics/picture_frame/frame3.4bpp.rl"); +const u8 gPictureFrameTiles_4[] = INCBIN_U8("graphics/picture_frame/frame4.4bpp.rl"); +const u8 gPictureFrameTiles_5[] = INCBIN_U8("graphics/picture_frame/frame5.4bpp.rl"); +const u8 gPictureFrameTilemap_0[] = INCBIN_U8("graphics/picture_frame/frame0_map.bin.rl"); +const u8 gPictureFrameTilemap_1[] = INCBIN_U8("graphics/picture_frame/frame1_map.bin.rl"); +const u8 gPictureFrameTilemap_2[] = INCBIN_U8("graphics/picture_frame/frame2_map.bin.rl"); +const u8 gPictureFrameTilemap_3[] = INCBIN_U8("graphics/picture_frame/frame3_map.bin.rl"); +const u8 gPictureFrameTilemap_4[] = INCBIN_U8("graphics/picture_frame/frame4_map.bin.rl"); +const u8 gPictureFrameTilemap_5[] = INCBIN_U8("graphics/picture_frame/frame5_map.bin.rl"); +const u8 *const gUnknown_083F60AC[] = +{ + OtherText_Cool, + OtherText_Beauty2, + OtherText_Cute, + OtherText_Smart, + OtherText_Tough, +}; +const struct LabelPair gUnknown_083F60C0[] = +{ + {OtherText_NonstopSuperCool, OtherText_Terminator6}, + {OtherText_GoodLookingPoke, OtherText_Terminator7}, + {OtherText_MarvelousGreat, OtherText_Terminator8}, + {OtherText_CenturyLastVenus, OtherText_Terminator9}, + {OtherText_Terminator10, OtherText_DazzlingSmile}, + {OtherText_PokeCenterIdol, OtherText_Terminator11}, + {OtherText_LovelyAndSweet, OtherText_Terminator12}, + {OtherText_ThePretty, OtherText_WinningPortrait}, + {OtherText_GiveUsWink, OtherText_Terminator13}, + {OtherText_SmartnessMaestro, OtherText_Terminator15}, + {OtherText_ChosenPokeAmong, OtherText_Terminator15}, + {OtherText_TheExcellent, OtherText_ItsMomentOfElegance}, + {OtherText_PowerfullyMuscular, OtherText_Terminator16}, + {OtherText_StrongErEst, OtherText_Terminator17}, + {OtherText_MightyTough, OtherText_Exclamation}, +}; +const struct OamData gOamData_83F6138 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 1, + .bpp = 1, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; +const u16 gUnknown_083F6140[] = {0, 0}; + +static void ShowContestPainting(); +static void CB2_HoldContestPainting(void); +static void HoldContestPainting(void); +static void ContestPaintingInitWindow(u8 arg0); +static void ContestPaintingPrintCaption(u8 arg0, u8 arg1); +static void ContestPaintingInitBG(void); +static void ContestPaintingInitVars(u8 arg0); +static void VBlankCB_ContestPainting(void); +void sub_8106B90(); //should be static +static void sub_8107090(u8 arg0, u8 arg1); + +__attribute__((naked)) +void sub_8106630(u32 arg0) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + ldr r2, _0810665C @ =0x02015de0\n\ + subs r4, r2, 0x2\n\ + subs r5, r2, 0x1\n\ + ldr r3, _08106660 @ =gSaveBlock1\n\ + subs r0, 0x1\n\ + lsls r1, r0, 5\n\ + adds r1, r3\n\ + ldr r3, _08106664 @ =0x00002dfc\n\ + adds r1, r3\n\ + ldm r1!, {r3,r6,r7}\n\ + stm r2!, {r3,r6,r7}\n\ + ldm r1!, {r3,r6,r7}\n\ + stm r2!, {r3,r6,r7}\n\ + ldm r1!, {r6,r7}\n\ + stm r2!, {r6,r7}\n\ + strb r0, [r4]\n\ + movs r0, 0\n\ + strb r0, [r5]\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0810665C: .4byte 0x02015de0\n\ +_08106660: .4byte gSaveBlock1\n\ +_08106664: .4byte 0x00002dfc\n\ + .syntax divided\n"); +} + +void CB2_ContestPainting(void) +{ + ShowContestPainting(); +} + +static void ShowContestPainting(void) +{ + switch (gMain.state) + { + case 0: + remove_some_task(); + SetVBlankCallback(NULL); + gUnknown_03005E8C = &unk_2015de0; + ContestPaintingInitVars(TRUE); + ContestPaintingInitBG(); + gMain.state++; + break; + case 1: + { + u8 *addr; + size_t size; + + ResetPaletteFade(); + addr = (void *)VRAM; + size = 0x18000; + while (1) + { + DmaFill32(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill32(3, 0, addr, size); + break; + } + } + ResetSpriteData(); + gMain.state++; + break; + } + case 2: + SeedRng(gMain.vblankCounter1); + InitKeys(); + ContestPaintingInitWindow(unk_2000000[0x15DDF]); + gMain.state++; + break; + case 3: + sub_8107090(unk_2000000[0x15DDE], unk_2000000[0x15DDF]); + gMain.state++; + break; + case 4: + ContestPaintingPrintCaption(unk_2000000[0x15DDE], unk_2000000[0x15DDF]); + LoadPalette(gUnknown_083F6140, 0, 1 * 2); + DmaClear32(3, PLTT, 0x400); + BeginFastPaletteFade(2); + SetVBlankCallback(VBlankCB_ContestPainting); + gUnknown_03000750 = 0; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; + SetMainCallback2(CB2_HoldContestPainting); + break; + } +} + +static void CB2_HoldContestPainting(void) +{ + HoldContestPainting(); + UpdatePaletteFade(); +} + +static void CB2_QuitContestPainting(void) +{ + SetMainCallback2(gMain.savedCallback); +} + +static void HoldContestPainting(void) +{ + switch (gUnknown_03000750) + { + case 0: + if (!gPaletteFade.active) + gUnknown_03000750 = 1; + if (gUnknown_03000756 != 0 && gUnknown_03000754 != 0) + gUnknown_03000754--; + break; + case 1: + if ((gMain.newKeys & 1) || (gMain.newKeys & 2)) + { + u8 two = 2; //needed to make the asm match + + gUnknown_03000750 = two; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + } + if (gUnknown_03000756 != 0) + gUnknown_03000754 = 0; + break; + case 2: + if (!gPaletteFade.active) + SetMainCallback2(CB2_QuitContestPainting); + if (gUnknown_03000756 != 0 && gUnknown_03000754 <= 0x1D) + gUnknown_03000754++; + break; + } +} + +static void ContestPaintingInitWindow(u8 arg0) +{ + InitMenuWindow(&gWindowConfig_81E7160); + SetUpWindowConfig(&gWindowConfig_81E7160); +} + +static void ContestPaintingPrintCaption(u8 contestType, u8 arg1) +{ + u8 xPos, yPos; + u8 *ptr; + u8 type; + + if (arg1 == TRUE) + return; + ptr = gUnknown_03005E40; + type = gUnknown_03005E8C->contestType; + if (contestType < 8) + { + ptr = StringCopy(ptr, gUnknown_083F60AC[type]); + ptr = StringCopy(ptr, gContestText_ContestWinner); +#if ENGLISH + ptr = StringCopy(ptr, gUnknown_03005E8C->trainer_name); +#elif GERMAN + ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); +#endif + + // {LATIN} + ptr[0] = 0xFC; + ptr[1] = 0x16; + ptr += 2; + + ptr = StringCopy(ptr, gOtherText_Unknown1); +#if ENGLISH + ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); +#elif GERMAN + ptr = StringCopy(ptr, gUnknown_03005E8C->trainer_name); +#endif + + xPos = 6; + yPos = 14; + } + else + { + ptr = StringCopy(ptr, gUnknown_083F60C0[type].prefix); + ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); + ptr = StringCopy(ptr, gUnknown_083F60C0[type].suffix); + + xPos = 3; + yPos = 14; + } + MenuPrint_PixelCoords(gUnknown_03005E40, xPos * 8 + 1, yPos * 8, 1); +} + +static void ContestPaintingInitBG(void) +{ + REG_DISPCNT = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_BG0CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(12) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; +} + +static void ContestPaintingInitVars(bool8 arg0) +{ + if (arg0 == FALSE) + { + gUnknown_03000756 = FALSE; + gUnknown_03000752 = 0; + gUnknown_03000754 = 0; + } + else + { + gUnknown_03000756 = TRUE; + gUnknown_03000752 = 15; + gUnknown_03000754 = 30; + } +} + +static void ContestPaintingMosaic(void) +{ + if (gUnknown_03000756 == FALSE) + { + REG_MOSAIC = 0; + return; + } + + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256; + gUnknown_03000752 = gUnknown_03000754 / 2; + + REG_MOSAIC = (gUnknown_03000752 << 12) | (gUnknown_03000752 << 8) | (gUnknown_03000752 << 4) | (gUnknown_03000752 << 0); +} + +static void VBlankCB_ContestPainting(void) +{ + ContestPaintingMosaic(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +#ifdef NONMATCHING +static void sub_8106AC4(u16 species, u8 arg1) +{ + void *pal; + + // Unsure what gUnknown_03005E8C->var0 is supposed to be. + pal = species_and_otid_get_pal(species, gUnknown_03005E8C->var4, gUnknown_03005E8C->var0); + LZDecompressVram(pal, gUnknown_03005E90); + + if (arg1 == 1) + { + HandleLoadSpecialPokePic( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].x, + gMonFrontPicCoords[species].y, + 0x2000000, + gUnknown_081FAF4C[1], + species, + (u32)gUnknown_03005E8C->var0 + ); + sub_8106B90(gUnknown_081FAF4C[1], gUnknown_03005E90, gUnknown_03005E10); + } + else + { + HandleLoadSpecialPokePic( + &gMonBackPicTable[species], + gMonBackPicCoords[species].x, + gMonBackPicCoords[species].y, + 0x2000000, + gUnknown_081FAF4C[0], + species, + (u32)gUnknown_03005E8C->var0 + ); + sub_8106B90(gUnknown_081FAF4C[0], gUnknown_03005E90, gUnknown_03005E10); + } +} +#else +__attribute__((naked)) +static void sub_8106AC4(u16 arg0, u8 arg2) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0xC\n\ + adds r4, r1, 0\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + ldr r7, _08106B28 @ =gUnknown_03005E8C\n\ + ldr r0, [r7]\n\ + ldr r1, [r0, 0x4]\n\ + ldr r2, [r0]\n\ + adds r0, r6, 0\n\ + bl species_and_otid_get_pal\n\ + ldr r1, _08106B2C @ =gUnknown_03005E90\n\ + mov r8, r1\n\ + ldr r1, [r1]\n\ + bl LZDecompressVram\n\ + cmp r4, 0\n\ + bne _08106B40\n\ + lsls r0, r6, 3\n\ + ldr r1, _08106B30 @ =gMonFrontPicTable\n\ + adds r0, r1\n\ + ldr r1, _08106B34 @ =gMonFrontPicCoords\n\ + lsls r2, r6, 2\n\ + adds r2, r1\n\ + ldrb r1, [r2]\n\ + ldrb r2, [r2, 0x1]\n\ + movs r3, 0x80\n\ + lsls r3, 18\n\ + ldr r4, _08106B38 @ =gUnknown_081FAF4C\n\ + ldr r5, [r4, 0x4]\n\ + str r5, [sp]\n\ + str r6, [sp, 0x4]\n\ + ldr r4, [r7]\n\ + ldr r4, [r4]\n\ + str r4, [sp, 0x8]\n\ + bl HandleLoadSpecialPokePic\n\ + mov r2, r8\n\ + ldr r1, [r2]\n\ + ldr r0, _08106B3C @ =gUnknown_03005E10\n\ + ldr r2, [r0]\n\ + adds r0, r5, 0\n\ + bl sub_8106B90\n\ + b _08106B74\n\ + .align 2, 0\n\ +_08106B28: .4byte gUnknown_03005E8C\n\ +_08106B2C: .4byte gUnknown_03005E90\n\ +_08106B30: .4byte gMonFrontPicTable\n\ +_08106B34: .4byte gMonFrontPicCoords\n\ +_08106B38: .4byte gUnknown_081FAF4C\n\ +_08106B3C: .4byte gUnknown_03005E10\n\ +_08106B40:\n\ + lsls r0, r6, 3\n\ + ldr r1, _08106B80 @ =gMonBackPicTable\n\ + adds r0, r1\n\ + ldr r1, _08106B84 @ =gMonBackPicCoords\n\ + lsls r2, r6, 2\n\ + adds r2, r1\n\ + ldrb r1, [r2]\n\ + ldrb r2, [r2, 0x1]\n\ + movs r3, 0x80\n\ + lsls r3, 18\n\ + ldr r4, _08106B88 @ =gUnknown_081FAF4C\n\ + ldr r5, [r4]\n\ + str r5, [sp]\n\ + str r6, [sp, 0x4]\n\ + ldr r4, [r7]\n\ + ldr r4, [r4]\n\ + str r4, [sp, 0x8]\n\ + bl HandleLoadSpecialPokePic\n\ + mov r0, r8\n\ + ldr r1, [r0]\n\ + ldr r0, _08106B8C @ =gUnknown_03005E10\n\ + ldr r2, [r0]\n\ + adds r0, r5, 0\n\ + bl sub_8106B90\n\ +_08106B74:\n\ + add sp, 0xC\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08106B80: .4byte gMonBackPicTable\n\ +_08106B84: .4byte gMonBackPicCoords\n\ +_08106B88: .4byte gUnknown_081FAF4C\n\ +_08106B8C: .4byte gUnknown_03005E10\n\ + .syntax divided\n"); +} +#endif + +#ifdef NONMATCHING +void sub_8106B90(u8 a[][8][8][4], u16 b[], u16 c[][8][8][8]) +{ + u16 i; + u16 j; + u16 k; + u16 l; + + for (i = 0; i < 8; i++) + { + for (j = 0; j < 8; j++) + { + for (k = 0; k < 8; k++) + { + for (l = 0; l < 8; l++) + { + //u8 *arr = a[i][j][k]; + //u8 r1 = arr[l / 2]; + u8 r1 = a[i][j][k][l / 2]; + + if (l & 1) + r1 /= 16; + else + r1 %= 16; + //_08106BEA + if (r1 == 0) + c[i][k][j][l] = 0x8000; + else + c[i][k][j][l] = b[r1]; + } + } + } + } +} +#else +__attribute__((naked)) +void sub_8106B90() +{ + 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\ + mov r10, r0\n\ + mov r9, r1\n\ + str r2, [sp]\n\ + movs r0, 0\n\ +_08106BA4:\n\ + movs r3, 0\n\ + adds r1, r0, 0x1\n\ + str r1, [sp, 0x4]\n\ + lsls r0, 3\n\ + str r0, [sp, 0x8]\n\ +_08106BAE:\n\ + movs r1, 0\n\ + adds r2, r3, 0x1\n\ + mov r8, r2\n\ + ldr r7, [sp, 0x8]\n\ + adds r0, r7, r3\n\ + lsls r0, 5\n\ + mov r12, r0\n\ + lsls r4, r3, 3\n\ +_08106BBE:\n\ + movs r3, 0\n\ + lsls r0, r1, 2\n\ + adds r6, r1, 0x1\n\ + mov r2, r12\n\ + adds r5, r2, r0\n\ + ldr r7, [sp, 0x8]\n\ + adds r0, r7, r1\n\ + lsls r0, 7\n\ + ldr r1, [sp]\n\ + adds r2, r0, r1\n\ +_08106BD2:\n\ + lsrs r0, r3, 1\n\ + adds r0, r5, r0\n\ + add r0, r10\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _08106BE6\n\ + lsrs r1, 4\n\ + b _08106BEA\n\ +_08106BE6:\n\ + movs r0, 0xF\n\ + ands r1, r0\n\ +_08106BEA:\n\ + cmp r1, 0\n\ + bne _08106BFC\n\ + adds r0, r4, r3\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + movs r7, 0x80\n\ + lsls r7, 8\n\ + adds r1, r7, 0\n\ + b _08106C08\n\ +_08106BFC:\n\ + adds r0, r4, r3\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + lsls r1, 1\n\ + add r1, r9\n\ + ldrh r1, [r1]\n\ +_08106C08:\n\ + strh r1, [r0]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, 0x7\n\ + bls _08106BD2\n\ + lsls r0, r6, 16\n\ + lsrs r1, r0, 16\n\ + cmp r1, 0x7\n\ + bls _08106BBE\n\ + mov r1, r8\n\ + lsls r0, r1, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, 0x7\n\ + bls _08106BAE\n\ + ldr r2, [sp, 0x4]\n\ + lsls r0, r2, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0x7\n\ + bls _08106BA4\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 {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif + +static void sub_8106C40(u8 arg0, u8 arg1) +{ + u8 x, y; + + LoadPalette(gPictureFramePalettes, 0, sizeof(gPictureFramePalettes)); + if (arg1 == 1) + { + switch (gUnknown_03005E8C->contestType / 3) + { + case CONTEST_COOL: + RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM); + RLUnCompWram(gPictureFrameTilemap_0, gUnknown_03005E10); + break; + case CONTEST_BEAUTY: + RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM); + RLUnCompWram(gPictureFrameTilemap_1, gUnknown_03005E10); + break; + case CONTEST_CUTE: + RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM); + RLUnCompWram(gPictureFrameTilemap_2, gUnknown_03005E10); + break; + case CONTEST_SMART: + RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM); + RLUnCompWram(gPictureFrameTilemap_3, gUnknown_03005E10); + break; + case CONTEST_TOUGH: + RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM); + RLUnCompWram(gPictureFrameTilemap_4, gUnknown_03005E10); + break; + } + +#define VRAM_PICTURE_DATA(x, y) (((u16 *)(VRAM + 0x6000))[(y) * 32 + (x)]) + + // Set the background + for (y = 0; y < 20; y++) + { + for (x = 0; x < 32; x++) + VRAM_PICTURE_DATA(x, y) = 0x1015; + } + + // Copy the image frame + for (y = 0; y < 10; y++) + { + for (x = 0; x < 18; x++) + VRAM_PICTURE_DATA(x + 6, y + 2) = (*gUnknown_03005E10)[y + 2][x + 6]; + } + + // Re-set the entire top row to the first top frame part + for (x = 0; x < 16; x++) + VRAM_PICTURE_DATA(x + 7, 2) = (*gUnknown_03005E10)[2][7]; + +#undef VRAM_PICTURE_DATA + } + else if (arg0 < 8) + { + RLUnCompVram(gPictureFrameTiles_5, (void *)VRAM); + RLUnCompVram(gPictureFrameTilemap_5, (void *)(VRAM + 0x6000)); + } + else + { + switch (gUnknown_03005E8C->contestType / 3) + { + case CONTEST_COOL: + RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM); + RLUnCompVram(gPictureFrameTilemap_0, (void *)(VRAM + 0x6000)); + break; + case CONTEST_BEAUTY: + RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM); + RLUnCompVram(gPictureFrameTilemap_1, (void *)(VRAM + 0x6000)); + break; + case CONTEST_CUTE: + RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM); + RLUnCompVram(gPictureFrameTilemap_2, (void *)(VRAM + 0x6000)); + break; + case CONTEST_SMART: + RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM); + RLUnCompVram(gPictureFrameTilemap_3, (void *)(VRAM + 0x6000)); + break; + case CONTEST_TOUGH: + RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM); + RLUnCompVram(gPictureFrameTilemap_4, (void *)(VRAM + 0x6000)); + break; + } + } +} + +static void sub_8106E98(u8 arg0) +{ + //Some hacks just to get the asm to match +#ifndef NONMATCHING + asm(""::"r"(arg0)); +#endif + + gMain.oamBuffer[0] = gOamData_83F6138; + gMain.oamBuffer[0].tileNum = 0; + +#ifndef NONMATCHING + if (arg0) arg0 = gMain.oamBuffer[0].tileNum; +#endif + + gMain.oamBuffer[0].x = 88; + gMain.oamBuffer[0].y = 24; +} + +static u8 sub_8106EE0(u8 arg0) +{ + u8 contestType; + + if (arg0 < 8) + contestType = gUnknown_03005E8C->contestType; + else + contestType = gUnknown_03005E8C->contestType / 3; + + switch (contestType) + { + case CONTEST_COOL: + return CONTESTRESULT_COOL; + case CONTEST_BEAUTY: + return CONTESTRESULT_BEAUTY; + case CONTEST_CUTE: + return CONTESTRESULT_CUTE; + case CONTEST_SMART: + return CONTESTRESULT_SMART; + case CONTEST_TOUGH: + return CONTESTRESULT_TOUGH; + } + + return contestType; +} + +static void sub_8106F4C(void) +{ + gUnknown_03005E90 = &unk_2015e00.unk2017e00; + gUnknown_03005E10 = &unk_2015e00.unk2015e00; +} + +static void sub_8106F6C(u8 arg0) +{ + gUnknown_03005E20.var_4 = gUnknown_03005E10; + gUnknown_03005E20.var_8 = gUnknown_03005E90; + gUnknown_03005E20.var_18 = 0; + gUnknown_03005E20.var_1F = gUnknown_03005E8C->var0; + gUnknown_03005E20.var_19 = 0; + gUnknown_03005E20.var_1A = 0; + gUnknown_03005E20.var_1B = 64; + gUnknown_03005E20.var_1C = 64; + gUnknown_03005E20.var_1D = 64; + gUnknown_03005E20.var_1E = 64; + + switch (arg0) + { + case CONTESTRESULT_SMART: + case CONTESTRESULT_TOUGH: + gUnknown_03005E20.var_14 = 3; + break; + case CONTESTRESULT_COOL: + case CONTESTRESULT_BEAUTY: + case CONTESTRESULT_CUTE: + default: + gUnknown_03005E20.var_14 = 1; + break; + } + + gUnknown_03005E20.var_16 = 2; + gUnknown_03005E20.var_0 = arg0; + gUnknown_03005E20.var_10 = 0x6010000; + + sub_80FC7A0(&gUnknown_03005E20); + sub_80FDA18(&gUnknown_03005E20); + sub_80FD8CC(&gUnknown_03005E20); + + LoadPalette(gUnknown_03005E90, 256, 256 * 2); +} + +static void sub_8107090(u8 arg0, u8 arg1) +{ + sub_8106F4C(); + sub_8106AC4(gUnknown_03005E8C->var8, 0); + sub_8106F6C(sub_8106EE0(arg0)); + sub_8106E98(arg0); + sub_8106C40(arg0, arg1); +} diff --git a/src/scene/credits.c b/src/scene/credits.c new file mode 100644 index 000000000..df70674b6 --- /dev/null +++ b/src/scene/credits.c @@ -0,0 +1,1496 @@ +#include "global.h" +#include "data2.h" +#include "decompress.h" +#include "event_data.h" +#include "hall_of_fame.h" +#include "intro_credits_graphics.h" +#include "m4a.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "pokedex.h" +#include "rng.h" +#include "songs.h" +#include "sound.h" +#include "species.h" +#include "starter_choose.h" +#include "task.h" +#include "trig.h" + +asm(".set REG_BASE, 0x4000000"); +asm(".set OFFSET_REG_BLDCNT, 0x50"); +asm(".set OFFSET_REG_BLDALPHA, 0x52"); +asm(".set REG_BLDCNT, REG_BASE + OFFSET_REG_BLDCNT"); +asm(".set REG_BLDALPHA, REG_BASE + OFFSET_REG_BLDALPHA"); + +enum +{ + PAGE_TITLE, + PAGE_DIRECTOR, + PAGE_ART_DIRECTOR, + PAGE_BATTLE_DIRECTOR, + PAGE_MAIN_PROGRAMMER, + PAGE_BATTLE_SYSTEM_PROGRAMMER, + PAGE_PROGRAMMERS_1, + PAGE_PROGRAMMERS_2, + PAGE_PROGRAMMERS_3, + PAGE_MAIN_GRAHPICS_DESIGNER, + PAGE_POKEMON_GRAHPIC_DESIGNERS_1, + PAGE_POKEMON_GRAHPIC_DESIGNERS_2, + PAGE_POKEMON_GRAHPIC_DESIGNERS_3, + PAGE_POKEMON_DESIGNERS_1, + PAGE_POKEMON_DESIGNERS_2, + PAGE_MUSIC_COMPOSITION, + PAGE_SOUND_EFFECTS, + PAGE_GAME_DESIGNERS_1, + PAGE_GAME_DESIGNERS_2, + PAGE_GAME_DESIGNERS_3, + PAGE_PLOT_SCENARIO, + PAGE_GAME_SCENARIO, + PAGE_SCRIPT_DESIGNERS, + PAGE_MAP_DESIGNERS, + PAGE_MAP_DATA_DESIGNERS, + PAGE_PARAMETRIC_DESIGNERS, + PAGE_POKEDEX_TEXT, + PAGE_ENVIRONMENT_TOOLS, + PAGE_PRODUCT_TESTING, + PAGE_SPECIAL_THANKS, + PAGE_SPECIAL_THANKS_1, + PAGE_SPECIAL_THANKS_2, + PAGE_SPECIAL_THANKS_3, + PAGE_INFORMATION_SUPERVISORS, + PAGE_COORDINATORS, + PAGE_TASK_MANAGERS, + PAGE_PRODUCERS, + PAGE_EXECUTIVE_DIRECTOR, + PAGE_EXECUTIVE_PRODUCERS_1, + PAGE_EXECUTIVE_PRODUCERS_2, + PAGE_TRANSLATION_COORDINATOR, + PAGE_TRANSLATORS, + PAGE_PROGRAMMERS, + PAGE_GRAPHIC_DESIGNERS, + PAGE_PRODUCT_SUPPORT, + +#if ENGLISH + PAGE_ARTWORK, + PAGE_TEXT_EDITOR, + PAGE_NOA_TESTING, + PAGE_BRAILLE_CODE_CHECK_1, + PAGE_BRAILLE_CODE_CHECK_2, +#elif GERMAN + PAGE_NOE_TESTING, + PAGE_BRAILLE_CODE_CHECK_1, +#endif + + PAGE_SPECIAL_THANKS_4, + PAGE_SPECIAL_THANKS_5, + + PAGE_COUNT +}; + +#if ENGLISH +#define POKEMON_TILE_COUNT 68 +#define LAST_PAGE (PAGE_TEXT_EDITOR) +#define UNK_DEFINE_45 (0x45) +#define UNK_DEFINE_82 (0x82) +#define UNK_DEF_1F3 (499) +#elif GERMAN +#define POKEMON_TILE_COUNT 65 +#define LAST_PAGE (PAGE_NOE_TESTING) +#define UNK_DEFINE_45 (8) +#define UNK_DEFINE_82 (0x8D) +#define UNK_DEF_1F3 (554) +#endif + +#define COLOR_DARK_GREEN 0x1967 +#define COLOR_LIGHT_GREEN 0x328D + +enum +{ + TDA_0 = 0, + TDA_TASK_C_ID = 1, + TDA_TASK_E_ID = 2, + TDA_TASK_D_ID = 3, + TDA_4 = 4, + TDA_PLAYER_CYCLIST = 5, + TDA_RIVAL_CYCLIST = 6, + TDA_7 = 7, // Has something to do with the bike scene + TDA_11 = 11, // Gets set depending on whether the bike or the grass scene should be shown + TDA_12 = 12, + TDA_13 = 13, + TDA_14 = 14, + TDA_TASK_B_ID = 15, + + // Appears to be responsible for text + TDB_0 = 0, + TDB_TASK_A_ID = 1, + TDB_CURRENT_PAGE = 2, + TDB_3 = 3, + + TDC_0 = 0, + TDC_1 = 1, + TDC_2 = 2, + TDC_3 = 3, + TDC_4 = 4, + TDC_5 = 5, + + TDD_STATE = 0, + TDD_TASK_A_ID = 1, + TDD_2 = 2, + TDD_3 = 3, + + TDE_0 = 0, + TDE_1 = 1, + TDE_TASK_A_ID = 2, +}; + + +struct Unk201C000 +{ + u16 unk0[POKEMON_TILE_COUNT]; + u16 unk88; + u16 unk8A; + u16 unk8C; + u16 unk8E; + u16 unk90[386]; + u16 unk394; +}; + +struct CreditsEntry +{ + u8 var_0; + u8 *text; +}; + +extern u8 ewram[]; + +#define EWRAM_1F800 ((u16 *)(ewram + 0x1F800)) +#define HALL_OF_FAME_SHEET_0 ((u8 *)(ewram + 0x1E000)) +#define HALL_OF_FAME_SHEET_1 ((u8 *)(ewram + 0x1E800)) +#define HALL_OF_FAME_SHEET_2 ((u8 *)(ewram + 0x1F000)) +#define ewram1c000 (*(struct Unk201C000 *)(ewram + 0x1C000)) + +extern struct HallOfFame gHallOfFame; +extern u8 unk_201e800[0x800]; +extern u8 unk_201f000[0x800]; +extern u16 unk_201f800[]; + +extern struct SpriteTemplate gUnknown_02024E8C; + +extern u16 gUnknown_02039358; +extern s16 gUnknown_0203935A; +extern s16 gUnknown_0203935C; + +static EWRAM_DATA s16 gUnknown_02039320 = 0; +static EWRAM_DATA u16 gUnknown_02039322 = 0; // TASK A +EWRAM_DATA u8 gUnknown_02039324 = 0; +static EWRAM_DATA u8 gUnknown_02039325 = 0; + +extern u8 gReservedSpritePaletteCount; + +// data/hall_of_fame +extern void *gUnknown_0840B5A0[]; + +// data/credits +const u16 gUnknown_0840B7BC[] = INCBIN_U16("graphics/credits/palette_1.gbapal"); +const u8 gUnknown_0840B7FC[] = INCBIN_U8("graphics/credits/ampersand.4bpp"); +extern u8 gUnknown_0840B83C[]; +extern u8 gUnknown_0840B84B[]; +extern u8 gUnknown_0840B85A[]; +extern u8 gUnknown_0840B869[]; +extern u8 gUnknown_0840B878[]; +extern struct CreditsEntry *gCreditsEntryPointerTable[][5]; +extern u8 gUnknown_0840CA00[][2]; +extern struct SpriteSheet gUnknown_0840CAA0; +extern struct SpritePalette gUnknown_0840CAB0; +extern const union AnimCmd *const gSpriteAnimTable_0840CA54[]; +extern const union AnimCmd *const gSpriteAnimTable_0840CA94[]; +extern struct SpriteTemplate gSpriteTemplate_840CAEC; + +// graphics +extern u8 gCreditsCopyrightEnd_Gfx[]; +extern u16 gIntroCopyright_Pal[16]; + +static void task_a_8143B38(u8 taskIdA); +static void task_a_8143B68(u8 taskIdA); +static void task_a_8143BFC(u8 taskIdA); +static void task_a_80C9BFC(u8 taskIdA); +static void task_a_8143CC0(u8 taskIdA); +static void task_a_8143D04(u8 taskIdA); +static void task_a_8143EBC(u8 taskIdA); +static void task_a_8143F04(u8 taskIdA); +static void task_a_8143F3C(u8 taskIdA); +static void task_a_8143FDC(u8 taskIdA); +static void task_a_8144024(u8 taskIdA); +static void task_a_8144080(u8 taskIdA); +static void task_a_8144114(u8 taskIdA); +static void sub_8144130(void); +static void task_b_81441B8(u8 taskIdB); +static u8 sub_8144454(u8 page, u8 taskIdA); +static void task_d_8144514(u8 taskIdD); +static bool8 sub_8144ECC(u8 data, u8 taskIdA); +static void sub_81450AC(u8 taskIdA); +static void sub_8145128(u16, u16, u16); +static void sub_81452D0(u16 arg0, u16 palette); +static void spritecb_player_8145378(struct Sprite *sprite); +static void spritecb_rival_8145420(struct Sprite *sprite); +static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position); +static void sub_81458DC(void); + +static void vblank_8143948(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void sub_814395C(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + + if ((gMain.heldKeys & B_BUTTON) + && gUnknown_02039324 != 0 + && gTasks[gUnknown_02039322].func == task_a_8143B68) + { + vblank_8143948(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + gUnknown_02039325 = 1; + } +} + +void sub_81439D0(void) +{ + u8 taskIdA; + s16 taskIdC; + u8 taskIdB; + u16 savedIme; + struct Unk201C000 *c000; + + sub_8144130(); + SetVBlankCallback(NULL); + ResetPaletteFade(); + ResetTasks(); + + taskIdA = CreateTask(task_a_8143B38, 0); + + gTasks[taskIdA].data[TDA_4] = 0; + gTasks[taskIdA].data[TDA_7] = 0; + gTasks[taskIdA].data[TDA_11] = 0; + gTasks[taskIdA].data[TDA_13] = 1; + + while (TRUE) + { + if (sub_8144ECC(0, taskIdA)) + break; + } + + taskIdC = gTasks[taskIdA].data[TDA_TASK_C_ID]; + gTasks[taskIdC].data[TDC_0] = 40; + + SetUpWindowConfig(&gWindowConfig_81E7208); + InitMenuWindow(&gWindowConfig_81E7208); + LoadPalette(&gUnknown_0840B7BC, 0x80, sizeof(gUnknown_0840B7BC)); + + CpuCopy16(&gUnknown_0840B7FC, (void *)(VRAM + 0xBEE0), sizeof(gUnknown_0840B7FC)); + + REG_BG0VOFS = 0xFFFC; + + taskIdB = CreateTask(task_b_81441B8, 0); + + gTasks[taskIdB].data[TDB_TASK_A_ID] = taskIdA; + gTasks[taskIdA].data[TDA_TASK_B_ID] = taskIdB; + + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + + + SetVBlankCallback(vblank_8143948); + m4aSongNumStart(BGM_THANKFOR); + SetMainCallback2(sub_814395C); + gUnknown_02039325 = 0; + + c000 = &ewram1c000; + + sub_81458DC(); + + c000->unk88 = 0; + c000->unk8A = 0; + c000->unk8C = 0; + + gUnknown_02039322 = taskIdA; +} + +static void task_a_8143B38(u8 taskIdA) +{ + if (!gPaletteFade.active) + gTasks[taskIdA].func = task_a_8143B68; +} + +static void task_a_8143B68(u8 taskIdA) +{ + u16 data11; + + if (gTasks[taskIdA].data[TDA_4]) + { + s16 taskIdC; + + taskIdC = gTasks[taskIdA].data[TDA_TASK_C_ID]; + gTasks[taskIdC].data[TDC_0] = 30; + + gTasks[taskIdA].data[TDA_12] = 0x100; + gTasks[taskIdA].func = task_a_8143EBC; + return; + } + + gUnknown_02039320 = 0; + data11 = gTasks[taskIdA].data[TDA_11]; + + if (gTasks[taskIdA].data[TDA_11] == 1) + { + gTasks[taskIdA].data[TDA_13] = data11; + gTasks[taskIdA].data[TDA_11] = 0; + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskIdA].func = task_a_8143BFC; + } + else if (gTasks[taskIdA].data[TDA_11] == 2) + { + gTasks[taskIdA].data[TDA_13] = data11; + gTasks[taskIdA].data[TDA_11] = 0; + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskIdA].func = task_a_8143CC0; + } +} + +static void task_a_8143BFC(u8 taskIdA) +{ + if (!gPaletteFade.active) + { + REG_DISPCNT = 0; + sub_81450AC(taskIdA); + gTasks[taskIdA].func = task_a_80C9BFC; + } +} + +static void task_a_80C9BFC(u8 taskIdA) +{ + u16 backup; + + SetVBlankCallback(NULL); + + if (sub_8144ECC(gTasks[taskIdA].data[TDA_7], taskIdA)) + { + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + + backup = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = backup; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + + SetVBlankCallback(vblank_8143948); + gTasks[taskIdA].func = task_a_8143B38; + } +} + +static void task_a_8143CC0(u8 taskIdA) +{ + if (!gPaletteFade.active) + { + REG_DISPCNT = 0; + sub_81450AC(taskIdA); + gTasks[taskIdA].func = task_a_8143D04; + } +} + +void task_a_8143D04(u8 taskIdA) +{ + switch (gMain.state) + { + default: + case 0: + { + u16 i; + + ResetSpriteData(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 8; + LZ77UnCompVram(&gBirchHelpGfx, (void *)VRAM); + LZ77UnCompVram(&gBirchGrassTilemap, (void *)(VRAM + 0x3800)); + LoadPalette(gBirchBagGrassPal[0] + 1, 1, 31 * 2); + + for (i = 0; i < 0x800; i++) + HALL_OF_FAME_SHEET_0[i] = 0x11; + for (i = 0; i < 0x800; i++) + HALL_OF_FAME_SHEET_1[i] = 0x22; + for (i = 0; i < 0x800; i++) + HALL_OF_FAME_SHEET_2[i] = 0x33; + + EWRAM_1F800[0] = 0; + EWRAM_1F800[1] = 0x53FF; // light yellow + EWRAM_1F800[2] = 0x529F; // light red + EWRAM_1F800[3] = 0x7E94; // light blue + + LoadSpriteSheet(&gUnknown_0840CAA0); + LoadSpritePalette(&gUnknown_0840CAB0); + + gMain.state += 1; + break; + } + case 1: + gTasks[taskIdA].data[TDA_TASK_D_ID] = CreateTask(task_d_8144514, 0); + gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_STATE] = 1; + gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_TASK_A_ID] = taskIdA; + gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_2] = gTasks[taskIdA].data[TDA_7]; + + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + REG_BG3HOFS = 0; + REG_BG3VOFS = 32; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; + + gMain.state = 0; + gUnknown_0203935C = 0; + gTasks[taskIdA].func = task_a_8143B38; + break; + } +} + +static void task_a_8143EBC(u8 taskIdA) +{ + if (gTasks[taskIdA].data[TDA_12]) + { + gTasks[taskIdA].data[TDA_12] -= 1; + return; + } + + BeginNormalPaletteFade(-1, 12, 0, 16, 0); + gTasks[taskIdA].func = task_a_8143F04; +} + +static void task_a_8143F04(u8 taskIdA) +{ + if (!gPaletteFade.active) + { + sub_81450AC(taskIdA); + gTasks[taskIdA].func = task_a_8143F3C; + } +} + +static void task_a_8143F3C(u8 taskIdA) +{ + u16 backup; + + sub_8144130(); + ResetPaletteFade(); + sub_8145128(0, 0x3800, 0); + ResetSpriteData(); + FreeAllSpritePalettes(); + BeginNormalPaletteFade(-1, 8, 16, 0, 0); + + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; + backup = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = backup; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON; + + gTasks[taskIdA].data[TDA_0] = 0x100; + gTasks[taskIdA].func = task_a_8143FDC; +} + +static void task_a_8143FDC(u8 taskIdA) +{ + if (gTasks[taskIdA].data[TDA_0]) + { + gTasks[taskIdA].data[TDA_0] -= 1; + return; + } + + BeginNormalPaletteFade(-1, 6, 0, 16, 0); + gTasks[taskIdA].func = task_a_8144024; +} + +static void task_a_8144024(u8 taskIdA) +{ + if (!gPaletteFade.active) + { + sub_81452D0(0x3800, 0); + + BeginNormalPaletteFade(-1, 0, 0, 0, 0); + gTasks[taskIdA].data[TDA_0] = 7200; + gTasks[taskIdA].func = task_a_8144080; + } +} + +static void task_a_8144080(u8 taskIdA) +{ + if (!gPaletteFade.active) + { + if (gTasks[taskIdA].data[TDA_0] == 0) + { + FadeOutBGM(4); + BeginNormalPaletteFade(-1, 8, 0, 16, 0xFFFF); + gTasks[taskIdA].func = task_a_8144114; + return; + } + + if (gMain.newKeys) + { + FadeOutBGM(4); + BeginNormalPaletteFade(-1, 8, 0, 16, 0xFFFF); + gTasks[taskIdA].func = task_a_8144114; + return; + } + + if (gTasks[taskIdA].data[TDA_0] == 7144) + { + FadeOutBGM(8); + } + + if (gTasks[taskIdA].data[TDA_0] == 6840) + m4aSongNumStart(BGM_END); + + gTasks[taskIdA].data[TDA_0] -= 1; + } +} + +static void task_a_8144114(u8 taskIdA) +{ + if (!gPaletteFade.active) + SoftReset(0xFF); +} + +static void sub_8144130(void) +{ + REG_DISPCNT = 0; + + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + + DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); + DmaFill32(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2); +} + +static void task_b_81441B8(u8 taskIdB) +{ + u16 i; + + switch (gTasks[taskIdB].data[TDB_0]) + { + case 0: + case 6: + case 7: + case 8: + case 9: + default: + if (!gPaletteFade.active) + { + gTasks[taskIdB].data[TDB_0] = 1; + gTasks[taskIdB].data[TDB_3] = 0x58; + gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 0; + gUnknown_02039320 = 0; + } + return; + case 1: + if (gTasks[taskIdB].data[TDB_3] != 0) + { + gTasks[taskIdB].data[TDB_3] -= 1; + return; + } + gTasks[taskIdB].data[TDB_0] += 1; + return; + case 2: + REG_DISPCNT &= ~DISPCNT_BG0_ON; + if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].func == task_a_8143B68) + { + if (gTasks[taskIdB].data[TDB_CURRENT_PAGE] < PAGE_COUNT) + { + for (i = 0; i < 5; i++) + sub_8072BD8(gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->text, 0, 9 + i * 2, 240); + + gTasks[taskIdB].data[TDB_CURRENT_PAGE] += 1; + gTasks[taskIdB].data[TDB_0] += 1; + + gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 1; + + if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_13] == 1) + BeginNormalPaletteFade(0x300, 0, 16, 0, COLOR_LIGHT_GREEN); + else + BeginNormalPaletteFade(0x300, 0, 16, 0, COLOR_DARK_GREEN); + return; + } + gTasks[taskIdB].data[TDB_0] = 10; + return; + } + gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 0; + return; + case 3: + REG_DISPCNT |= DISPCNT_BG0_ON; + if (!gPaletteFade.active) + { + gTasks[taskIdB].data[TDB_3] = UNK_DEFINE_82; + gTasks[taskIdB].data[TDB_0] += 1; + } + return; + case 4: + if (gTasks[taskIdB].data[TDB_3] != 0) + { + gTasks[taskIdB].data[TDB_3] -= 1; + return; + } + + if (sub_8144454((u8)gTasks[taskIdB].data[TDB_CURRENT_PAGE], (u8)gTasks[taskIdB].data[TDB_TASK_A_ID])) + { + gTasks[taskIdB].data[TDB_0] += 1; + return; + } + gTasks[taskIdB].data[TDB_0] += 1; + if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_13] == 1) + BeginNormalPaletteFade(0x300, 0, 0, 16, COLOR_LIGHT_GREEN); + else + BeginNormalPaletteFade(0x300, 0, 0, 16, COLOR_DARK_GREEN); + return; + case 5: + if (!gPaletteFade.active) + { + MenuZeroFillWindowRect(0, 9, 29, 19); + gTasks[taskIdB].data[TDB_0] = 2; + } + return; + + case 10: + gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_4] = 1; + DestroyTask(taskIdB); + return; + } +} + +static u8 sub_8144454(u8 page, u8 taskIdA) +{ + // Starts with bike + ocean + morning + + if (page == PAGE_PROGRAMMERS_1) + { + // Grass patch + gTasks[taskIdA].data[TDA_11] = 2; + } + + if (page == PAGE_POKEMON_GRAHPIC_DESIGNERS_3) + { + // Bike + ocean + sunset + gTasks[taskIdA].data[TDA_7] = 1; + gTasks[taskIdA].data[TDA_11] = 1; + } + + if (page == PAGE_GAME_DESIGNERS_2) + { + // Grass patch + gTasks[taskIdA].data[TDA_11] = 2; + } + + if (page == PAGE_MAP_DATA_DESIGNERS) + { + // Bike + forest + sunset + gTasks[taskIdA].data[TDA_7] = 2; + gTasks[taskIdA].data[TDA_11] = 1; + } + + if (page == PAGE_SPECIAL_THANKS_1) + { + // Grass patch + gTasks[taskIdA].data[TDA_11] = 2; + } + + if (page == PAGE_TASK_MANAGERS) + { + // Bike + forest + sunset + gTasks[taskIdA].data[TDA_7] = 3; + gTasks[taskIdA].data[TDA_11] = 1; + } + + if (page == PAGE_TRANSLATION_COORDINATOR) + { + // Grass patch + gTasks[taskIdA].data[TDA_11] = 2; + } + + if (page == LAST_PAGE) + { + // Bike + town + night + gTasks[taskIdA].data[TDA_7] = 4; + gTasks[taskIdA].data[TDA_11] = 1; + } + + if (gTasks[taskIdA].data[TDA_11] != 0) + { + // Returns true if changed? + return TRUE; + } + + return FALSE; +} + +static void task_d_8144514(u8 taskIdD) +{ + struct Unk201C000 *r6 = &ewram1c000; + u8 r2; + + switch (gTasks[taskIdD].data[TDD_STATE]) + { + case 0: + break; + case 1: + if (r6->unk8A == 0 && gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14] == 0) + break; + gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14] = 0; + gTasks[taskIdD].data[TDD_STATE]++; + break; + case 2: + if (r6->unk88 == POKEMON_TILE_COUNT || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != task_a_8143B68) + break; + r2 = sub_81456B4(r6->unk0[r6->unk8C], gUnknown_0840CA00[r6->unk8A][0], gUnknown_0840CA00[r6->unk8A][1], r6->unk8A); + if (r6->unk8C < r6->unk8E - 1) + { + r6->unk8C++; + gSprites[r2].data3 = 50; + } + else + { + r6->unk8C = 0; + gSprites[r2].data3 = 512; + } + r6->unk88++; + if (r6->unk8A == 2) + r6->unk8A = 0; + else + r6->unk8A++; + gTasks[taskIdD].data[TDD_3] = 50; + gTasks[taskIdD].data[TDD_STATE]++; + break; + case 3: + if (gTasks[taskIdD].data[TDD_3] != 0) + gTasks[taskIdD].data[TDD_3]--; + else + gTasks[taskIdD].data[TDD_STATE] = 1; + break; + } +} + +void task_c_8144664(u8 taskIdC) +{ + switch (gTasks[taskIdC].data[TDC_0]) + { + case 0: + gUnknown_0203935A = Sin((gTasks[taskIdC].data[TDC_5] >> 1) & 0x7F, 12); + gTasks[taskIdC].data[TDC_5]++; + break; + case 1: + if (gUnknown_0203935A != 0) + { + gUnknown_0203935A = Sin((gTasks[taskIdC].data[TDC_5] >> 1) & 0x7F, 12); + gTasks[taskIdC].data[TDC_5]++; + } + else + { + gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 2; + gTasks[taskIdC].data[TDC_5] = 0; + gTasks[taskIdC].data[TDC_0]++; + } + break; + case 2: + if (gTasks[taskIdC].data[TDC_5] < 64) + { + gTasks[taskIdC].data[TDC_5]++; + gUnknown_0203935A = Sin(gTasks[taskIdC].data[TDC_5] & 0x7F, 20); + } + else + { + gTasks[taskIdC].data[TDC_0]++; + } + break; + case 3: + gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 3; + gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 1; + gTasks[taskIdC].data[TDC_4] = 120; + gTasks[taskIdC].data[TDC_0]++; + break; + case 4: + if (gTasks[taskIdC].data[TDC_4] != 0) + { + gTasks[taskIdC].data[TDC_4]--; + } + else + { + gTasks[taskIdC].data[TDC_5] = 64; + gTasks[taskIdC].data[TDC_0]++; + } + break; + case 5: + if (gTasks[taskIdC].data[TDC_5] > 0) + { + gTasks[taskIdC].data[TDC_5]--; + gUnknown_0203935A = Sin(gTasks[taskIdC].data[TDC_5] & 0x7F, 20); + } + else + { + gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 1; + gTasks[taskIdC].data[TDC_0]++; + } + break; + case 6: + gTasks[taskIdC].data[TDC_0] = 50; + break; + case 10: + gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 2; + gTasks[taskIdC].data[TDC_0] = 50; + break; + case 20: + gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 4; + gTasks[taskIdC].data[TDC_0] = 50; + break; + case 30: + gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 5; + gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 3; + gTasks[taskIdC].data[TDC_0] = 50; + break; + case 50: + gTasks[taskIdC].data[TDC_0] = 0; + break; + } +} + +void task_e_8144934(u8 taskIdE) +{ + s16 taskIdC; + + switch (gTasks[taskIdE].data[TDE_0]) + { + default: + case 0: + if (gTasks[taskIdE].data[TDE_1] != 0x7FFF) + { + + if (gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_B_ID]].data[TDB_CURRENT_PAGE] == PAGE_ART_DIRECTOR) + { + gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]].data[TDC_0] = 20; + gTasks[taskIdE].data[TDE_1] = 0x7FFF; + } + } + sub_8149020(0); + break; + case 1: + sub_8149020(0); + break; + case 2: + if (gTasks[taskIdE].data[TDE_1] != 0x7FFF) + { + taskIdC = gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]; + + // Floor to multiple of 128 + if ((gTasks[taskIdC].data[TDC_5] & -128) == 640) + { + gTasks[taskIdC].data[TDC_0] = 1; + gTasks[taskIdE].data[TDE_1] = 0x7FFF; + } + } + sub_8149020(1); + break; + case 3: + if (gTasks[taskIdE].data[TDE_1] != 0x7FFF) + { + + if (gTasks[taskIdE].data[TDE_1] == UNK_DEF_1F3) + { + gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]].data[TDC_0] = 10; + gTasks[taskIdE].data[TDE_1] = 0x7FFF; + } + else + { + gTasks[taskIdE].data[TDE_1] += 1; + } + } + sub_8149020(1); + break; + case 4: + sub_8149020(2); + break; + } +} + +static void sub_8144A68(u8 data, u8 taskIdA) +{ + switch (data) + { + case 0: + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 272; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gTasks[taskIdA].data[TDA_0] = sub_8148EC0(0, 0x2000, 0x20, 8); + break; + case 1: + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gTasks[taskIdA].data[TDA_0] = sub_8148EC0(0, 0x2000, 0x20, 8); + break; + case 2: + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gTasks[taskIdA].data[TDA_0] = sub_8148EC0(1, 0x2000, 0x200, 8); + break; + case 3: + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = -32; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gTasks[taskIdA].data[TDA_0] = sub_8148EC0(1, 0x2000, 0x200, 8); + break; + case 4: + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 88; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 152; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gTasks[taskIdA].data[TDA_0] = sub_8148EC0(2, 0x2000, 0x200, 8); + break; + } + + gTasks[taskIdA].data[TDA_TASK_E_ID] = CreateTask(task_e_8144934, 0); + gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_0] = data; + gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_1] = 0; + gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_TASK_A_ID] = taskIdA; + + gTasks[taskIdA].data[TDA_TASK_C_ID] = CreateTask(task_c_8144664, 0); + gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_0] = 0; + gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_1] = taskIdA; + gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_2] = gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]; + gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_3] = gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]; + gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_4] = 0; + + if (data == 2) + gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_5] = UNK_DEFINE_45; +} + +static bool8 sub_8144ECC(u8 data, u8 taskIdA) +{ + u8 spriteId; + + switch (gMain.state) + { + default: + case 0: + REG_DISPCNT = 0; + REG_BG3HOFS = 8; + REG_BG3VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + ResetSpriteData(); + FreeAllSpritePalettes(); + gMain.state = 1; + break; + case 1: + gUnknown_02039358 = 34; + gUnknown_0203935A = 0; + sub_8148CB0(data); + gMain.state += 1; + break; + case 2: + if (gSaveBlock2.playerGender == MALE) + { + LoadCompressedObjectPic(&gIntro2BrendanSpriteSheet); + LoadCompressedObjectPic(&gUnknown_08416E34); + LoadCompressedObjectPic(&gIntro2BicycleSpriteSheet); + LoadSpritePalettes(gIntro2SpritePalettes); + + spriteId = intro_create_brendan_sprite(120, 46); + gTasks[taskIdA].data[TDA_PLAYER_CYCLIST] = spriteId; + gSprites[spriteId].callback = spritecb_player_8145378; + gSprites[spriteId].anims = gSpriteAnimTable_0840CA54; + + spriteId = intro_create_may_sprite(272, 46); + gTasks[taskIdA].data[TDA_RIVAL_CYCLIST] = spriteId; + gSprites[spriteId].callback = spritecb_rival_8145420; + gSprites[spriteId].anims = gSpriteAnimTable_0840CA94; + } + else + { + LoadCompressedObjectPic(&gIntro2MaySpriteSheet); + LoadCompressedObjectPic(&gUnknown_08416E24); + LoadCompressedObjectPic(&gIntro2BicycleSpriteSheet); + LoadSpritePalettes(gIntro2SpritePalettes); + + spriteId = intro_create_may_sprite(120, 46); + gTasks[taskIdA].data[TDA_PLAYER_CYCLIST] = spriteId; + gSprites[spriteId].callback = spritecb_player_8145378; + gSprites[spriteId].anims = gSpriteAnimTable_0840CA54; + + spriteId = intro_create_brendan_sprite(272, 46); + gTasks[taskIdA].data[TDA_RIVAL_CYCLIST] = spriteId; + gSprites[spriteId].callback = spritecb_rival_8145420; + gSprites[spriteId].anims = gSpriteAnimTable_0840CA94; + }; + gMain.state += 1; + break; + case 3: + sub_8144A68(data, taskIdA); + sub_8148E90(data); + gMain.state = 0; + return TRUE; + } + return FALSE; +} + +static void sub_81450AC(u8 taskIdA) +{ + if (gTasks[taskIdA].data[TDA_0] != 0) + { + DestroyTask(gTasks[taskIdA].data[TDA_0]); + gTasks[taskIdA].data[TDA_0] = 0; + } + + if (gTasks[taskIdA].data[TDA_TASK_C_ID] != 0) + { + DestroyTask(gTasks[taskIdA].data[TDA_TASK_C_ID]); + gTasks[taskIdA].data[TDA_TASK_C_ID] = 0; + } + + if (gTasks[taskIdA].data[TDA_TASK_E_ID] != 0) + { + DestroyTask(gTasks[taskIdA].data[TDA_TASK_E_ID]); + gTasks[taskIdA].data[TDA_TASK_E_ID] = 0; + } + + if (gTasks[taskIdA].data[TDA_TASK_D_ID] != 0) + { + DestroyTask(gTasks[taskIdA].data[TDA_TASK_D_ID]); + gTasks[taskIdA].data[TDA_TASK_D_ID] = 0; + } + + gUnknown_0203935C = 1; +} + +static void sub_8145128(u16 arg0, u16 arg1, u16 arg2) +{ + u16 baseTile; + u16 i; + + LZ77UnCompVram(gCreditsCopyrightEnd_Gfx, (void *) (VRAM + arg0)); + LoadPalette(gIntroCopyright_Pal, arg2, sizeof(gIntroCopyright_Pal)); + + baseTile = (arg2 / 16) << 12; + + for (i = 0; i < 32 * 32; i++) + ((u16 *) (VRAM + arg1))[i] = baseTile + 1; + + for (i = 0; i < 21; i++) + ((u16 *) (VRAM + arg1))[7 * 32 + 4 + i] = i + 2 + baseTile; + + for (i = 0; i < 20; i++) + ((u16 *) (VRAM + arg1))[9 * 32 + 4 + i] = i + 23 + baseTile; + + for (i = 0; i < 23; i++) + ((u16 *) (VRAM + arg1))[11 * 32 + 4 + i] = i + 43 + baseTile; + + for (i = 0; i < 12; i++) + ((u16 *) (VRAM + arg1))[13 * 32 + 4 + i] = i + 66 + baseTile; +} + +u16 sub_8145208(u8 arg0) +{ + u16 out = (arg0 & 0x3F) + 80; + + if (arg0 == 0xFF) + return 1; + + if (arg0 & (1 << 7)) + out |= 1 << 11; + if (arg0 & (1 << 6)) + out |= 1 << 10; + + return out; +} + +void sub_814524C(u8 arg0[], u8 baseX, u8 baseY, u16 arg3, u16 palette) +{ + u8 y, x; + const u16 tileOffset = (palette / 16) << 12; + + for (y = 0; y < 5; y++) + { + for (x = 0; x < 3; x++) + ((u16 *) (VRAM + arg3 + (baseY + y) * 64))[baseX + x] = tileOffset + sub_8145208(arg0[y * 3 + x]); + } +} + +static void sub_81452D0(u16 arg0, u16 palette) +{ + u16 pos; + u16 baseTile = (palette / 16) << 12; + + for (pos = 0; pos < 32 * 32; pos++) + ((u16 *) (VRAM + arg0))[pos] = baseTile + 1; + +#if ENGLISH + sub_814524C(gUnknown_0840B83C, 3, 7, arg0, palette); + sub_814524C(gUnknown_0840B84B, 7, 7, arg0, palette); + sub_814524C(gUnknown_0840B85A, 11, 7, arg0, palette); + sub_814524C(gUnknown_0840B85A, 16, 7, arg0, palette); + sub_814524C(gUnknown_0840B869, 20, 7, arg0, palette); + sub_814524C(gUnknown_0840B878, 24, 7, arg0, palette); +#elif GERMAN + sub_814524C(gUnknown_0840B85A, 7, 7, arg0, palette); + sub_814524C(gUnknown_0840B869, 11, 7, arg0, palette); + sub_814524C(gUnknown_0840B878, 15, 7, arg0, palette); + sub_814524C(gUnknown_0840B85A, 19, 7, arg0, palette); +#endif +} + +static void spritecb_player_8145378(struct Sprite *sprite) +{ + if (gUnknown_0203935C != 0) + { + DestroySprite(sprite); + return; + } + + switch (sprite->data0) + { + case 0: + StartSpriteAnimIfDifferent(sprite, 0); + break; + case 1: + StartSpriteAnimIfDifferent(sprite, 1); + if (sprite->pos1.x > -32) + sprite->pos1.x -= 1; + break; + case 2: + StartSpriteAnimIfDifferent(sprite, 2); + break; + case 3: + StartSpriteAnimIfDifferent(sprite, 3); + break; + case 4: + StartSpriteAnimIfDifferent(sprite, 0); + if (sprite->pos1.x > 120) + sprite->pos1.x -= 1; + break; + case 5: + StartSpriteAnimIfDifferent(sprite, 0); + if (sprite->pos1.x > -32) + sprite->pos1.x -= 1; + break; + } +} + +static void spritecb_rival_8145420(struct Sprite *sprite) +{ + if (gUnknown_0203935C != 0) + { + DestroySprite(sprite); + return; + } + + switch (sprite->data0) + { + case 0: + sprite->pos2.y = 0; + StartSpriteAnimIfDifferent(sprite, 0); + break; + case 1: + if (sprite->pos1.x > 200) + StartSpriteAnimIfDifferent(sprite, 1); + else + StartSpriteAnimIfDifferent(sprite, 2); + if (sprite->pos1.x > -32) + sprite->pos1.x -= 2; + sprite->pos2.y = -gUnknown_0203935A; + break; + case 2: + sprite->data7 += 1; + StartSpriteAnimIfDifferent(sprite, 0); + if ((sprite->data7 & 3) == 0) + sprite->pos1.x += 1; + break; + case 3: + StartSpriteAnimIfDifferent(sprite, 0); + if (sprite->pos1.x > -32) + sprite->pos1.x -= 1; + break; + } +} + +void spritecb_81454E0(struct Sprite *sprite) +{ + if (gUnknown_0203935C) + { + DestroySprite(sprite); + return; + } + + sprite->data7 += 1; + switch (sprite->data0) + { + case 0: + default: + sprite->oam.affineMode = 1; + sprite->oam.matrixNum = sprite->data1; + sprite->data2 = 16; + SetOamMatrix(sprite->data1, 0x10000 / sprite->data2, 0, 0, 0x10000 / sprite->data2); + sprite->invisible = FALSE; + sprite->data0 = 1; + break; + case 1: + if (sprite->data2 < 256) + { + sprite->data2 += 8; + SetOamMatrix(sprite->data1, 0x10000 / sprite->data2, 0, 0, 0x10000 / sprite->data2); + } + else + { + sprite->data0 += 1; + } + switch (sprite->data1) + { + case 1: + if ((sprite->data7 & 3) == 0) + sprite->pos1.y += 1; + sprite->pos1.x -= 2; + break; + case 2: + break; + case 3: + if ((sprite->data7 & 3) == 0) + sprite->pos1.y += 1; + sprite->pos1.x += 2; + break; + } + break; + case 2: + if (sprite->data3 != 0) + { + sprite->data3 -= 1; + } + else + { + REG_BLDCNT = 0xF40; + REG_BLDALPHA = 0x10; + sprite->oam.objMode = 1; + sprite->data3 = 16; + sprite->data0 += 1; + } + break; + case 3: + if (sprite->data3 != 0) + { + int data3; + vu16 *reg; + + sprite->data3 -= 1; + + reg = ®_BLDALPHA; + data3 = 16 - sprite->data3; + *reg = (data3 << 8) + sprite->data3; + } + else + { + sprite->invisible = TRUE; + sprite->data0 = 10; + } + break; + case 10: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroySprite(sprite); + break; + } +} + +static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position) +{ + u32 personality; + const u8 *lzPaletteData; + u8 spriteId; + u8 spriteId2; + + species = NationalPokedexNumToSpecies(species); + switch (species) + { + default: + personality = 0; + break; + case SPECIES_SPINDA: + personality = gSaveBlock2.pokedex.spindaPersonality; + break; + case SPECIES_UNOWN: + personality = gSaveBlock2.pokedex.unownPersonality; + break; + } + + LoadSpecialPokePic( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].coords, + gMonFrontPicCoords[species].y_offset, + 0x2000000, + gUnknown_0840B5A0[position], + species, + personality, + 1 + ); + + lzPaletteData = species_and_otid_get_pal(species, 0, 0xFFFF); + LoadCompressedPalette(lzPaletteData, 0x100 + (position * 16), 0x20); + sub_8143648(position, position); + + spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); + gSprites[spriteId].oam.paletteNum = position; + gSprites[spriteId].oam.priority = 1; + gSprites[spriteId].data1 = position + 1; + gSprites[spriteId].invisible = TRUE; + gSprites[spriteId].callback = spritecb_81454E0; + + spriteId2 = CreateSprite(&gSpriteTemplate_840CAEC, gSprites[spriteId].pos1.x, gSprites[spriteId].pos1.y, 1); + gSprites[spriteId2].data0 = spriteId; + + StartSpriteAnimIfDifferent(&gSprites[spriteId2], position); + + return spriteId; +} + +void spritecb_814580C(struct Sprite *sprite) +{ + if (gSprites[sprite->data0].data0 == 10 || gUnknown_0203935C) + { + DestroySprite(sprite); + return; + } + + sprite->invisible = gSprites[sprite->data0].invisible; + sprite->oam.objMode = gSprites[sprite->data0].oam.objMode; + sprite->oam.affineMode = gSprites[sprite->data0].oam.affineMode; + sprite->oam.matrixNum = gSprites[sprite->data0].oam.matrixNum; + sprite->pos1.x = gSprites[sprite->data0].pos1.x; + sprite->pos1.y = gSprites[sprite->data0].pos1.y; +} + +static void sub_81458DC(void) +{ + struct Unk201C000 *unk201C000 = &ewram1c000; + u16 starter = SpeciesToNationalPokedexNum(GetStarterPokemon(VarGet(VAR_FIRST_POKE))); + u16 seenTypesCount; + u16 page; + u16 dexNum; + u16 j; + + for (dexNum = 1, seenTypesCount = 0; dexNum < 386; dexNum++) + { + if (GetNationalPokedexFlag(dexNum, 1)) + { + unk201C000->unk90[seenTypesCount] = dexNum; + seenTypesCount++; + } + } + + for (dexNum = seenTypesCount; dexNum < 386; dexNum++) + unk201C000->unk90[dexNum] = 0; + + unk201C000->unk394 = seenTypesCount; + if (unk201C000->unk394 < POKEMON_TILE_COUNT) + unk201C000->unk8E = seenTypesCount; + else + unk201C000->unk8E = POKEMON_TILE_COUNT; + + j = 0; + do + { + page = Random() % unk201C000->unk394; + unk201C000->unk0[j] = unk201C000->unk90[page]; + + j++; + unk201C000->unk90[page] = 0; + unk201C000->unk394--; + if (page != unk201C000->unk394) + { + unk201C000->unk90[page] = unk201C000->unk90[unk201C000->unk394]; + unk201C000->unk90[unk201C000->unk394] = 0; + } + } + while (unk201C000->unk394 != 0 && j < POKEMON_TILE_COUNT); + + if (unk201C000->unk8E < POKEMON_TILE_COUNT) + { + for (j = unk201C000->unk8E, page = 0; j < POKEMON_TILE_COUNT; j++) + { + unk201C000->unk0[j] = unk201C000->unk0[page]; + + page++; + if (page == unk201C000->unk8E) + page = 0; + } + unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter; + } + else + { + for (dexNum = 0; unk201C000->unk0[dexNum] != starter && dexNum < POKEMON_TILE_COUNT; dexNum++); + + if (dexNum < unk201C000->unk8E - 1) + { + unk201C000->unk0[dexNum] = unk201C000->unk0[POKEMON_TILE_COUNT - 1]; + unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter; + } + else + { + unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter; + } + } + unk201C000->unk8E = POKEMON_TILE_COUNT; +} diff --git a/src/scene/egg_hatch.c b/src/scene/egg_hatch.c new file mode 100644 index 000000000..32fbe1547 --- /dev/null +++ b/src/scene/egg_hatch.c @@ -0,0 +1,52 @@ +#include "global.h" +#include "pokemon.h" + +void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { + u16 species; + u32 personality, pokerus; + u8 i, friendship, language, gameMet, markings; + u16 moves[4]; + u32 ivs[6]; + + + species = GetMonData(egg, MON_DATA_SPECIES); + + for (i = 0; i < 4; i++) + { + moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i); + } + + personality = GetMonData(egg, MON_DATA_PERSONALITY); + + for (i = 0; i < 6; i++) + { + ivs[i] = GetMonData(egg, MON_DATA_HP_IV + i); + } + + gameMet = GetMonData(egg, MON_DATA_MET_GAME); + markings = GetMonData(egg, MON_DATA_MARKINGS); + pokerus = GetMonData(egg, MON_DATA_POKERUS); + + CreateMon(temp, species, 5, 32, TRUE, personality, 0, 0); + + for (i = 0; i < 4; i++) + { + SetMonData(temp, MON_DATA_MOVE1 + i, (const u8 *) &moves[i]); + } + + for (i = 0; i < 6; i++) + { + SetMonData(temp, MON_DATA_HP_IV + i, (const u8 *) &ivs[i]); + } + + language = GAME_LANGUAGE; + SetMonData(temp, MON_DATA_LANGUAGE, &language); + SetMonData(temp, MON_DATA_MET_GAME, &gameMet); + SetMonData(temp, MON_DATA_MARKINGS, &markings); + + friendship = 120; + SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship); + SetMonData(temp, MON_DATA_POKERUS, (const u8 *) &pokerus); + + *egg = *temp; +} diff --git a/src/scene/intro.c b/src/scene/intro.c new file mode 100644 index 000000000..a43e0356c --- /dev/null +++ b/src/scene/intro.c @@ -0,0 +1,3167 @@ +#include "global.h" +#include "gba/m4a_internal.h" +#include "intro.h" +#include "data2.h" +#include "decompress.h" +#include "hall_of_fame.h" +#include "intro_credits_graphics.h" +#include "libgncmultiboot.h" +#include "link.h" +#include "m4a.h" +#include "main.h" +#include "new_game.h" +#include "palette.h" +#include "rng.h" +#include "save.h" +#include "songs.h" +#include "sound.h" +#include "species.h" +#include "task.h" +#include "title_screen.h" +#include "trig.h" +#include "unknown_task.h" + +extern struct SpriteTemplate gUnknown_02024E8C; +extern u16 gUnknown_02039358; +extern u16 gUnknown_0203935A; +extern u16 gSaveFileStatus; +extern u8 gReservedSpritePaletteCount; +extern const u8 gInterfaceGfx_PokeBall[]; +extern const u8 gInterfacePal_PokeBall[]; +extern const u8 gIntroCopyright_Gfx[]; +extern const u16 gIntroCopyright_Pal[]; +extern const u16 gIntroCopyright_Tilemap[]; +extern void *const gUnknown_0840B5A0[]; + +static EWRAM_DATA u16 gUnknown_02039318 = 0; +static EWRAM_DATA u16 gUnknown_0203931A = 0; + +u32 gIntroFrameCounter; +struct GcmbStruct gMultibootProgramStruct; + +//-------------------------------------------------- +// Graphics Data +//-------------------------------------------------- + +static const u16 Palette_406340[] = INCBIN_U16("graphics/intro/unknown1.gbapal"); +static const u16 Palette_406360[] = INCBIN_U16("graphics/intro/unknown2.gbapal"); +#if ENGLISH +static const u8 gIntroTiles[] = INCBIN_U8("graphics/intro/intro.4bpp.lz"); +#elif GERMAN +extern const u8 gIntroTiles[]; +#endif +static const u16 gIntro1BGPals[][16] = +{ + INCBIN_U16("graphics/intro/intro1_bgpal1.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal2.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal3.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal4.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal5.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal6.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal7.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal8.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal9.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal10.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal11.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal12.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal13.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal14.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal15.gbapal"), + INCBIN_U16("graphics/intro/intro1_bgpal16.gbapal"), +}; +static const u8 gIntro1BG0_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg0_map.bin.lz"); +static const u8 gIntro1BG1_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg1_map.bin.lz"); +static const u8 gIntro1BG2_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg2_map.bin.lz"); +static const u8 gIntro1BG3_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg3_map.bin.lz"); +static const u8 gIntro1BGLeavesGfx[] = INCBIN_U8("graphics/intro/introgfx.4bpp.lz"); +static const u16 gIntro3PokeballPal[] = INCBIN_U16("graphics/intro/intro3_pokeball.gbapal"); +static const u8 gIntro3Pokeball_Tilemap[] = INCBIN_U8("graphics/intro/intro3_pokeball_map.bin.lz"); +static const u8 gIntro3Pokeball_Gfx[] = INCBIN_U8("graphics/intro/intro3_pokeball.8bpp.lz"); +static const u16 gIntro3Streaks_Pal[] = INCBIN_U16("graphics/intro/intro3_streaks.gbapal"); +static const u8 gIntro3Streaks_Gfx[] = INCBIN_U8("graphics/intro/intro3_streaks.4bpp.lz"); +static const u8 gIntro3Streaks_Tilemap[] = INCBIN_U8("graphics/intro/intro3_streaks_map.bin.lz"); +static const u16 gIntro3Misc1Palette[] = INCBIN_U16("graphics/intro/intro3_misc1.gbapal"); +static const u16 gIntro3Misc2Palette[] = INCBIN_U16("graphics/intro/intro3_misc2.gbapal"); +static const u8 gIntro3MiscTiles[] = INCBIN_U8("graphics/intro/intro3_misc.4bpp.lz"); +static const u16 gIntro1EonPalette[] = INCBIN_U16("graphics/intro/intro1_eon.gbapal"); +static const u8 gIntro1EonTiles[] = INCBIN_U8("graphics/intro/intro1_eon.4bpp.lz"); +static const struct OamData gOamData_840ADE8 = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_840ADF0[] = +{ + ANIMCMD_FRAME(16, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840ADF8[] = +{ + ANIMCMD_FRAME(24, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AE00[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AE08[] = +{ + ANIMCMD_FRAME(48, 8), + ANIMCMD_END, +}; +static const union AnimCmd *const gSpriteAnimTable_840AE10[] = +{ + gSpriteAnim_840ADF0, + gSpriteAnim_840ADF8, + gSpriteAnim_840AE00, + gSpriteAnim_840AE08, +}; +static void sub_813D208(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_840AE20 = +{ + .tileTag = 2000, + .paletteTag = 2000, + .oam = &gOamData_840ADE8, + .anims = gSpriteAnimTable_840AE10, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813D208, +}; +static const union AnimCmd Unknown_40AE38[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(192, 4), + ANIMCMD_JUMP(0), +}; +static const union AnimCmd Unknown_40AE4C[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(64, 8), + ANIMCMD_FRAME(128, 8), + ANIMCMD_FRAME(192, 8), + ANIMCMD_JUMP(0), +}; +static const union AnimCmd Unknown_40AE60[] = +{ + ANIMCMD_FRAME(256, 4), + ANIMCMD_FRAME(0x140, 4), + ANIMCMD_FRAME(0x180, 4), + ANIMCMD_END, +}; +static const union AnimCmd Unknown_40AE70[] = +{ + ANIMCMD_FRAME(0x180, 16), + ANIMCMD_FRAME(0x140, 16), + ANIMCMD_FRAME(256, 16), + ANIMCMD_END, +}; +static const union AnimCmd *const gUnknown_0840AE80[] = +{ + Unknown_40AE38, + Unknown_40AE4C, + Unknown_40AE60, + Unknown_40AE70, +}; +static const struct OamData gOamData_840AE90 = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; +static const struct OamData gOamData_840AE98 = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; +static const struct OamData gOamData_840AEA0 = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_840AEA8[] = +{ + ANIMCMD_FRAME(80, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEB0[] = +{ + ANIMCMD_FRAME(84, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEB8[] = +{ + ANIMCMD_FRAME(88, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEC0[] = +{ + ANIMCMD_FRAME(92, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEC8[] = +{ + ANIMCMD_FRAME(96, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AED0[] = +{ + ANIMCMD_FRAME(100, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AED8[] = +{ + ANIMCMD_FRAME(104, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEE0[] = +{ + ANIMCMD_FRAME(112, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEE8[] = +{ + ANIMCMD_FRAME(113, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEF0[] = +{ + ANIMCMD_FRAME(114, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEF8[] = +{ + ANIMCMD_FRAME(115, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AF00[] = +{ + ANIMCMD_FRAME(116, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AF08[] = +{ + ANIMCMD_FRAME(117, 8), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AF10[] = +{ + ANIMCMD_FRAME(128, 8), + ANIMCMD_END, +}; +#if GERMAN +static const union AnimCmd gSpriteAnim_8416DA4[] = +{ + ANIMCMD_FRAME(118, 8), + ANIMCMD_END, +}; +#endif +static const union AnimCmd *const gSpriteAnimTable_840AF18[] = +{ + gSpriteAnim_840AEA8, + gSpriteAnim_840AEB0, + gSpriteAnim_840AEB8, + gSpriteAnim_840AEC0, + gSpriteAnim_840AEC8, + gSpriteAnim_840AED0, + gSpriteAnim_840AED8, +}; +static const union AnimCmd *const gSpriteAnimTable_840AF34[] = +{ + gSpriteAnim_840AEE0, + gSpriteAnim_840AEE8, + gSpriteAnim_840AEF0, + gSpriteAnim_840AEF8, + gSpriteAnim_840AF00, + gSpriteAnim_840AF08, +#if GERMAN + gSpriteAnim_8416DA4, +#endif +}; +static const union AnimCmd *const gSpriteAnimTable_840AF4C[] = +{ + gSpriteAnim_840AF10, +}; +static const s16 gUnknown_0840AF50[][2] = +{ + {0, -72}, + {1, -56}, + {2, -40}, + {3, -24}, + {4, 8}, + {5, 24}, + {3, 40}, + {1, 56}, + {6, 72}, +}; +static const s16 gUnknown_0840AF74[][2] = +{ + {0, -28}, + {1, -20}, + {2, -12}, + {3, -4}, + {2, 4}, + {4, 12}, + {5, 20}, + {3, 28}, +}; +static void sub_813D908(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_840AF94 = +{ + .tileTag = 2000, + .paletteTag = 2001, + .oam = &gOamData_840AE90, + .anims = gSpriteAnimTable_840AF18, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813D908, +}; +static const struct SpriteTemplate gSpriteTemplate_840AFAC = +{ + .tileTag = 2000, + .paletteTag = 2001, + .oam = &gOamData_840AE98, + .anims = gSpriteAnimTable_840AF34, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813D908, +}; +static const struct SpriteTemplate gSpriteTemplate_840AFC4 = +{ + .tileTag = 2000, + .paletteTag = 2001, + .oam = &gOamData_840AEA0, + .anims = gSpriteAnimTable_840AF4C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813D908, +}; +static const struct OamData gOamData_840AFDC = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_840AFE4[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_JUMP(0), +}; +static const union AnimCmd *const gSpriteAnimTable_840AFEC[] = +{ + gSpriteAnim_840AFE4, +}; +static void sub_813DA64(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_840AFF0 = +{ + .tileTag = 2002, + .paletteTag = 2002, + .oam = &gOamData_840AFDC, + .anims = gSpriteAnimTable_840AFEC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813DA64, +}; +const struct CompressedSpriteSheet gUnknown_0840B008[] = +{ + {gIntroTiles, 0x1400, 2000}, + {NULL}, +}; +const struct CompressedSpriteSheet gUnknown_0840B018[] = +{ + {gIntro1EonTiles, 0x400, 2002}, + {NULL}, +}; +const struct SpritePalette gUnknown_0840B028[] = +{ + {Palette_406340, 2000}, + {Palette_406360, 2001}, + {gIntro1EonPalette, 2002}, + {NULL}, +}; +static const union AnimCmd gUnknown_0840B048[] = +{ + ANIMCMD_FRAME(3, 0), + ANIMCMD_END, +}; +static const union AnimCmd gUnknown_0840B050[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_END, +}; +static const union AnimCmd gUnknown_0840B058[] = +{ + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_END, +}; +static const union AnimCmd *const gUnknown_0840B064[] = +{ + gUnknown_0840B048, + gUnknown_0840B050, + gUnknown_0840B058, +}; +static const struct OamData gOamData_840B070 = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_840B078[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_END, +}; +static const union AnimCmd *const gSpriteAnimTable_840B080[] = +{ + gSpriteAnim_840B078, +}; +static void sub_813E30C(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_840B084 = +{ + .tileTag = 2002, + .paletteTag = 2002, + .oam = &gOamData_840B070, + .anims = gSpriteAnimTable_840B080, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813E30C, +}; +static const struct OamData gOamData_840B09C = +{ + .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 gSpriteAnim_840B0A4[] = +{ + ANIMCMD_FRAME(1, 8), + ANIMCMD_END, +}; +static const union AnimCmd *const gSpriteAnimTable_840B0AC[] = +{ + gSpriteAnim_840B0A4, +}; +static void sub_813E4B8(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_840B0B0 = +{ + .tileTag = 2003, + .paletteTag = 2003, + .oam = &gOamData_840B09C, + .anims = gSpriteAnimTable_840B0AC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813E4B8, +}; +static const struct OamData gOamData_840B0C8 = +{ + .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 gSpriteAnim_840B0D0[] = +{ + ANIMCMD_FRAME(14, 8), + ANIMCMD_END, +}; +static const union AnimCmd *const gSpriteAnimTable_840B0D8[] = +{ + gSpriteAnim_840B0D0, +}; +static void sub_813E5E0(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_840B0DC = +{ + .tileTag = 2003, + .paletteTag = 2004, + .oam = &gOamData_840B0C8, + .anims = gSpriteAnimTable_840B0D8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813E5E0, +}; +static void sub_813E6C0(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_840B0F4 = +{ + .tileTag = 2003, + .paletteTag = 2004, + .oam = &gOamData_840B0C8, + .anims = gSpriteAnimTable_840B0D8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813E6C0, +}; +static const struct OamData gOamData_840B10C = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_840B114[] = +{ + ANIMCMD_FRAME(6, 8), + ANIMCMD_FRAME(6, 8, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; +static const union AnimCmd *const gSpriteAnimTable_840B120[] = +{ + gSpriteAnim_840B114, +}; +static void sub_813E804(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_840B124 = +{ + .tileTag = 2003, + .paletteTag = 2004, + .oam = &gOamData_840B10C, + .anims = gSpriteAnimTable_840B120, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813E804, +}; +static const struct OamData gOamData_840B13C = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_840B144[] = +{ + ANIMCMD_FRAME(10, 8), + ANIMCMD_END, +}; +static const union AnimCmd *const gSpriteAnimTable_840B14C[] = +{ + gSpriteAnim_840B144, +}; +static void sub_813E980(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_840B150 = +{ + .tileTag = 2003, + .paletteTag = 2004, + .oam = &gOamData_840B13C, + .anims = gSpriteAnimTable_840B14C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813E980, +}; +static const u8 gUnknown_0840B168[] = {0xE6, 0xEB, 0xE4, 0xEA, 0xE5, 0xE9, 0xE7, 0xE8}; +static void sub_813EA60(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_840B170 = +{ + .tileTag = 2003, + .paletteTag = 2004, + .oam = &gOamData_840B13C, + .anims = gSpriteAnimTable_840B14C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813EA60, +}; +static const u16 gUnknown_0840B188[] = {0x200, 0x1C0, 0x180, 0x140, 0x100, 0xE0, 0xC0, 0xA0, 0x80, 0x80}; +static const struct OamData gOamData_840B19C = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_840B1A4[] = +{ + ANIMCMD_FRAME(2, 8), + ANIMCMD_END, +}; +static const union AnimCmd *const gSpriteAnimTable_840B1AC[] = +{ + gSpriteAnim_840B1A4, +}; +static void sub_813EBBC(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_840B1B0 = +{ + .tileTag = 2003, + .paletteTag = 2004, + .oam = &gOamData_840B19C, + .anims = gSpriteAnimTable_840B1AC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813EBBC, +}; +static void sub_813EC90(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_840B1C8 = +{ + .tileTag = 2003, + .paletteTag = 2004, + .oam = &gOamData_840B19C, + .anims = gSpriteAnimTable_840B1AC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813EC90, +}; +static const struct OamData gOamData_840B1E0 = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_840B1E8[] = +{ + ANIMCMD_FRAME(16, 8), + ANIMCMD_END, +}; +static const union AnimCmd *const gSpriteAnimTable_840B1F0[] = +{ + gSpriteAnim_840B1E8, +}; +static void sub_813EDFC(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_840B1F4 = +{ + .tileTag = 2003, + .paletteTag = 2003, + .oam = &gOamData_840B1E0, + .anims = gSpriteAnimTable_840B1F0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813EDFC, +}; +const struct CompressedSpriteSheet gIntro3PokeballGfx_Table[] = +{ + {gInterfaceGfx_PokeBall, 0x100, 2002}, + {NULL}, +}; +const struct CompressedSpriteSheet gIntro3MiscGfx_Table[] = +{ + {gIntro3MiscTiles, 0xa00, 2003}, + {NULL}, +}; +const struct CompressedSpritePalette gInterfacePokeballPal_Table[] = +{ + {gInterfacePal_PokeBall, 2002}, + {NULL}, +}; +const struct SpritePalette gIntro3MiscPal_Table[] = +{ + {gIntro3Misc1Palette, 2003}, + {gIntro3Misc2Palette, 2004}, + {NULL}, +}; +const u32 unusedData = 0x02000000; + +static void MainCB2_EndIntro(void); +static void Task_IntroLoadPart1Graphics(u8); +static void Task_IntroFadeIn(u8); +static void Task_IntroWaterDrops(u8); +static void Task_IntroScrollDownAndShowEon(u8); +static void Task_IntroWaitToSetupPart2(u8); +static void Task_IntroLoadPart2Graphics(u8); +static void Task_IntroStartBikeRide(u8); +static void Task_IntroHandleBikeAndEonMovement(u8); +static void Task_IntroWaitToSetupPart3(u8); +static void Task_IntroLoadPart3Graphics(u8); +static void Task_IntroSpinAndZoomPokeball(u8); +static void Task_IntroWaitToSetupPart3DoubleFight(u8); +static void Task_IntroLoadPart3Streaks(u8); +static void task_intro_14(u8); +static void task_intro_15(u8); +static void task_intro_16(u8); +static void task_intro_17(u8); +static void Task_IntroPokemonBattle(u8); +static void task_intro_19(u8); +static void task_intro_20(u8); +static void intro_reset_and_hide_bgs(void); +static void sub_813CCE8(u8); +static u16 sub_813CE88(u16, s16, s16, u16, u8); +static u8 sub_813CFA8(u16, u16, u16, u16); +static void sub_813D084(u8); +static void sub_813D220(struct Sprite *); +static void sub_813D368(struct Sprite *); +static void sub_813D414(struct Sprite *); +static void SpriteCB_WaterDropFall(struct Sprite *); +static u8 CreateWaterDrop(s16, s16, u16, u16, u16, u8); +static void sub_813D788(struct Sprite *); +static void sub_813D880(struct Sprite *); +static u8 CreateGameFreakLogo(s16, s16, u8); +static void sub_813DB9C(struct Sprite *); +static void sub_813DE70(struct Sprite *); +static void sub_813E10C(struct Sprite *); +static void sub_813E210(struct Sprite *); +static void sub_813E580(u16, u16); +static void sub_813E7C0(u8); +static void sub_813E930(u8); +static void InitIntroTorchicAttackAnim(u8); +static void InitIntroMudkipAttackAnim(u8); + +static void VBlankCB_Intro(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void MainCB2_Intro(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + if (gMain.newKeys && !gPaletteFade.active) + SetMainCallback2(MainCB2_EndIntro); + else if (gIntroFrameCounter != -1) + gIntroFrameCounter++; +} + +static void MainCB2_EndIntro(void) +{ + if (!UpdatePaletteFade()) + SetMainCallback2(CB2_InitTitleScreen); +} + +static void LoadCopyrightGraphics(u16 tilesetAddress, u16 tilemapAddress, u16 paletteAddress) +{ + LZ77UnCompVram(gIntroCopyright_Gfx, (void *)(VRAM + tilesetAddress)); + LoadPalette(gIntroCopyright_Pal, paletteAddress, 0x20); + CpuCopy16(gIntroCopyright_Tilemap, (void *)(VRAM + tilemapAddress), 0x500); +} + +static void SerialCB_CopyrightScreen(void) +{ + GameCubeMultiBoot_HandleSerialInterrupt(&gMultibootProgramStruct); +} + +static u8 SetUpCopyrightScreen(void) +{ + u16 ime; + + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + *(u16 *)PLTT = 0x7FFF; + REG_DISPCNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); + DmaFill32(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2); + ResetPaletteFade(); + LoadCopyrightGraphics(0, 0x3800, 0); + remove_some_task(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0xFFFF); + REG_BG0CNT = BGCNT_PRIORITY(0) + | BGCNT_CHARBASE(0) + | BGCNT_SCREENBASE(7) + | BGCNT_16COLOR + | BGCNT_TXT256x256; + ime = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = ime; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + SetVBlankCallback(VBlankCB_Intro); + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON; + SetSerialCallback(SerialCB_CopyrightScreen); + GameCubeMultiBoot_Init(&gMultibootProgramStruct); + default: + UpdatePaletteFade(); + gMain.state++; + GameCubeMultiBoot_Main(&gMultibootProgramStruct); + break; + case 140: + GameCubeMultiBoot_Main(&gMultibootProgramStruct); + if (gMultibootProgramStruct.gcmb_field_2 != 1) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gMain.state++; + } + break; + case 141: + if (UpdatePaletteFade()) + break; + CreateTask(Task_IntroLoadPart1Graphics, 0); + SetMainCallback2(MainCB2_Intro); + if (gMultibootProgramStruct.gcmb_field_2) + { + GameCubeMultiBoot_ExecuteProgram(&gMultibootProgramStruct); + } + else + { + GameCubeMultiBoot_Quit(); + SetSerialCallback(SerialCB); + } + return 0; + } + + return 1; +} + +void CB2_InitCopyrightScreenAfterBootup(void) +{ + if (!SetUpCopyrightScreen()) + { + sub_8052E4C(); + ResetSaveCounters(); + sub_8125EC8(0); + if (gSaveFileStatus == 0 || gSaveFileStatus == 2) + ClearSav2(); + SetPokemonCryStereo(gSaveBlock2.optionsSound); + } +} + +void CB2_InitCopyrightScreenAfterTitleScreen(void) +{ + SetUpCopyrightScreen(); +} + +static void Task_IntroLoadPart1Graphics(u8 taskId) +{ + SetVBlankCallback(NULL); + gUnknown_02039318 = Random() & 1; + intro_reset_and_hide_bgs(); + REG_BG3VOFS = 0; + REG_BG2VOFS = 0x50; + REG_BG1VOFS = 0x18; + REG_BG0VOFS = 0x28; + LZ77UnCompVram(gIntro1BGLeavesGfx, (void *)VRAM); + LZ77UnCompVram(gIntro1BG0_Tilemap, (void *)(VRAM + 0x8000)); + DmaClear16(3, VRAM + 0x8800, 0x800); + LZ77UnCompVram(gIntro1BG1_Tilemap, (void *)(VRAM + 0x9000)); + DmaClear16(3, VRAM + 0x9800, 0x800); + LZ77UnCompVram(gIntro1BG2_Tilemap, (void *)(VRAM + 0xA000)); + DmaClear16(3, VRAM + 0xA800, 0x800); + LZ77UnCompVram(gIntro1BG3_Tilemap, (void *)(VRAM + 0xB000)); + DmaClear16(3, VRAM + 0xB800, 0x800); + LoadPalette(gIntro1BGPals, 0, sizeof(gIntro1BGPals)); + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(22) | BGCNT_16COLOR | BGCNT_TXT256x512; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(20) | BGCNT_16COLOR | BGCNT_TXT256x512; + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(18) | BGCNT_16COLOR | BGCNT_TXT256x512; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(16) | BGCNT_16COLOR | BGCNT_TXT256x512; + LoadCompressedObjectPic(&gUnknown_0840B008[0]); + LoadCompressedObjectPic(&gUnknown_0840B018[0]); + LoadSpritePalettes(gUnknown_0840B028); + CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1F0, 0x20); + CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1E1, 0x1E); + CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1D2, 0x1C); + CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1C3, 0x1A); + CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1B4, 0x18); + CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1A5, 0x16); + CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x196, 0x14); + gTasks[taskId].data[0] = CreateWaterDrop(236, -14, 0x200, 1, 0x78, FALSE); + gTasks[taskId].func = Task_IntroFadeIn; +} + +static void Task_IntroFadeIn(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + SetVBlankCallback(VBlankCB_Intro); + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; + gTasks[taskId].func = Task_IntroWaterDrops; + gIntroFrameCounter = 0; + m4aSongNumStart(0x19E); + ResetSerial(); +} + +static void Task_IntroWaterDrops(u8 taskId) +{ + //start moving rock + if (gIntroFrameCounter == 76) + gSprites[gTasks[taskId].data[0]].data0 = 1; + + //drop rock + if (gIntroFrameCounter == 251) + gSprites[gTasks[taskId].data[0]].data0 = 2; + + if (gIntroFrameCounter == 368) + CreateWaterDrop(48, 0, 0x400, 5, 0x70, TRUE); + if (gIntroFrameCounter == 384) + CreateWaterDrop(200, 60, 0x400, 9, 0x80, TRUE); + + if (gIntroFrameCounter == 560) + CreateGameFreakLogo(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, CreateTask(sub_813CCE8, 0)); + + if (gIntroFrameCounter > 739) + { + gTasks[taskId].data[1] = 0x50; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0x18; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 0x28; + gTasks[taskId].data[6] = 0; + gTasks[taskId].func = Task_IntroScrollDownAndShowEon; + } +} + +static void Task_IntroScrollDownAndShowEon(u8 taskId) +{ + if (gIntroFrameCounter < 904) + { + s32 r2; + + //slide backgrounds downward + r2 = (gTasks[taskId].data[1] << 16) + (u16)gTasks[taskId].data[2] - 0xC000; + gTasks[taskId].data[1] = r2 >> 16; + gTasks[taskId].data[2] = r2; + REG_BG2VOFS = gTasks[taskId].data[1]; + r2 = (gTasks[taskId].data[3] << 16) + (u16)gTasks[taskId].data[4] - 0x10000; + gTasks[taskId].data[3] = r2 >> 16; + gTasks[taskId].data[4] = r2; + REG_BG1VOFS = gTasks[taskId].data[3]; + r2 = (gTasks[taskId].data[5] << 16) + (u16)gTasks[taskId].data[6] - 0x18000; + gTasks[taskId].data[5] = r2 >> 16; + gTasks[taskId].data[6] = r2; + REG_BG0VOFS = gTasks[taskId].data[5]; + + //show Lati@s sprite + if (gIntroFrameCounter == 880) + { + u8 spriteId = CreateSprite(&gSpriteTemplate_840AFF0, 200, 160, 10); + + gSprites[spriteId].invisible = 1; + } + } + else + { + //fade to white + if (gIntroFrameCounter > 1007) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0xFFFF); + gTasks[taskId].func = Task_IntroWaitToSetupPart2; + } + } +} + +static void Task_IntroWaitToSetupPart2(u8 taskId) +{ + if (gIntroFrameCounter > 1026) + gTasks[taskId].func = Task_IntroLoadPart2Graphics; +} + +static void Task_IntroLoadPart2Graphics(u8 taskId) +{ + intro_reset_and_hide_bgs(); + SetVBlankCallback(NULL); + ResetSpriteData(); + FreeAllSpritePalettes(); + gUnknown_02039358 = 0; + gUnknown_0203935A = 0; +#ifdef SAPPHIRE + load_intro_part2_graphics(0); +#else + load_intro_part2_graphics(1); +#endif + gTasks[taskId].func = Task_IntroStartBikeRide; +} + +static void Task_IntroStartBikeRide(u8 taskId) +{ + u8 spriteId; + + if (gUnknown_02039318 == 0) + LoadCompressedObjectPic(&gIntro2BrendanSpriteSheet); + else + LoadCompressedObjectPic(&gIntro2MaySpriteSheet); + LoadCompressedObjectPic(&gIntro2BicycleSpriteSheet); +#ifdef SAPPHIRE + LoadCompressedObjectPic(&gIntro2LatiasSpriteSheet); +#else + LoadCompressedObjectPic(&gIntro2LatiosSpriteSheet); +#endif + LoadSpritePalettes(gIntro2SpritePalettes); + if (gUnknown_02039318 == 0) + spriteId = intro_create_brendan_sprite(0x110, 100); + else + spriteId = intro_create_may_sprite(0x110, 100); + gSprites[spriteId].callback = sub_813D788; + gSprites[spriteId].anims = gUnknown_0840AE80; + gTasks[taskId].data[1] = spriteId; +#ifdef SAPPHIRE + spriteId = intro_create_latias_sprite(-0x40, 0x3C); +#else + spriteId = intro_create_latios_sprite(-0x40, 0x3C); +#endif + gSprites[spriteId].callback = sub_813D880; + gTasks[taskId].data[2] = spriteId; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0xFFFF); + SetVBlankCallback(VBlankCB_Intro); +#ifdef SAPPHIRE + gTasks[taskId].data[0] = sub_8148EC0(0, 0x4000, 0x40, 0x10); + sub_8148C78(0); +#else + gTasks[taskId].data[0] = sub_8148EC0(1, 0x4000, 0x400, 0x10); + sub_8148C78(1); +#endif + gTasks[taskId].func = Task_IntroHandleBikeAndEonMovement; +} + +static void Task_IntroHandleBikeAndEonMovement(u8 taskId) +{ + s16 a; + u16 sine; + + if (gIntroFrameCounter > 1823) + { + BeginNormalPaletteFade(0xFFFFFFFF, 16, 0, 16, 0xFFFF); + gTasks[taskId].func = Task_IntroWaitToSetupPart3; + } + if (gIntroFrameCounter == 1109) + gSprites[gTasks[taskId].data[1]].data0 = 1; + if (gIntroFrameCounter == 1214) + gSprites[gTasks[taskId].data[1]].data0 = 0; + if (gIntroFrameCounter == 1394) + gSprites[gTasks[taskId].data[2]].data0 = 1; + if (gIntroFrameCounter == 1398) + gSprites[gTasks[taskId].data[1]].data0 = 2; + if (gIntroFrameCounter == 1586) + gSprites[gTasks[taskId].data[1]].data0 = 3; + if (gIntroFrameCounter == 1727) + gSprites[gTasks[taskId].data[1]].data0 = 4; + + //TODO: Clean this up + a = (((u16)gTasks[taskId].data[3] << 16) >> 18) & 0x7F; + sine = Sin(a, 48); + gUnknown_0203935A = sine; + if (gTasks[taskId].data[3] < 512) + gTasks[taskId].data[3]++; +#ifdef SAPPHIRE + sub_8149020(0); +#else + sub_8149020(1); +#endif +} + +static void Task_IntroWaitToSetupPart3(u8 taskId) +{ + if (gIntroFrameCounter > 2068) + { + DestroyTask(gTasks[taskId].data[0]); + gTasks[taskId].func = Task_IntroLoadPart3Graphics; + } +} + +static void Task_IntroLoadPart3Graphics(u8 taskId) +{ + intro_reset_and_hide_bgs(); + LZ77UnCompVram(gIntro3Pokeball_Gfx, (void *)VRAM); + LZ77UnCompVram(gIntro3Pokeball_Tilemap, (void *)(VRAM + 0x4000)); + LoadPalette(gIntro3PokeballPal, 0, 0x200); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + sub_813CE30(0x78, 0x50, 0, 0); + ResetSpriteData(); + FreeAllSpritePalettes(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0xFFFF); + REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(8) | BGCNT_256COLOR | BGCNT_AFF256x256; + REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + gTasks[taskId].func = Task_IntroSpinAndZoomPokeball; + gIntroFrameCounter = 0; + m4aSongNumStart(0x1BA); +} + +static void Task_IntroSpinAndZoomPokeball(u8 taskId) +{ + gTasks[taskId].data[0] += 0x400; + if (gTasks[taskId].data[1] <= 0x6BF) + { + gTasks[taskId].data[1] += gTasks[taskId].data[2]; + gTasks[taskId].data[2]++; + } + else + { + gTasks[taskId].func = Task_IntroWaitToSetupPart3DoubleFight; + } + sub_813CE30(0x78, 0x50, 0x10000 / gTasks[taskId].data[1], gTasks[taskId].data[0]); + if (gIntroFrameCounter == 44) + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0xFFFF); +} + +static void Task_IntroWaitToSetupPart3DoubleFight(u8 taskId) +{ + if (gIntroFrameCounter > 59) + gTasks[taskId].func = Task_IntroLoadPart3Streaks; +} + +extern u8 unk_2000000[][32]; + +static void Task_IntroLoadPart3Streaks(u8 taskId) +{ + u16 i; + void *vram; + + intro_reset_and_hide_bgs(); + for (i = 0; i < 32; i++) + { + unk_2000000[0][i] = 0; + unk_2000000[1][i] = 17; + unk_2000000[2][i] = 34; + } + vram = (void *)VRAM; + DmaCopy16(3, unk_2000000, vram, 0x60); + for (i = 0; i < 0x280; i++) + ((u16 *)(VRAM + 0x3000))[i] = 0xF001; + for (i = 0; i < 0x80; i++) + ((u16 *)(VRAM + 0x3800))[i] = 0xF002; + for (i = 0; i < 0x180; i++) + ((u16 *)(VRAM + 0x3900))[i] = 0xF000; + for (i = 0; i < 0x80; i++) + ((u16 *)(VRAM + 0x3C00))[i] = 0xF002; + gPlttBufferUnfaded[0xF0] = RGB_WHITE; + gPlttBufferFaded[0xF0] = RGB_WHITE; + sub_813D084(1); + gPlttBufferUnfaded[0xF2] = RGB_BLACK; + gPlttBufferFaded[0xF2] = RGB_BLACK; + LZ77UnCompVram(gIntro3Streaks_Gfx, (void *)(VRAM + 0x4000)); + LZ77UnCompVram(gIntro3Streaks_Tilemap, (void *)(VRAM + 0x7000)); + LoadPalette(gIntro3Streaks_Pal, 0, 0x20); + ResetSpriteData(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 8; + LoadCompressedObjectPic(&gIntro3PokeballGfx_Table[0]); + LoadCompressedObjectPic(&gIntro3MiscGfx_Table[0]); + LoadCompressedObjectPalette(&gInterfacePokeballPal_Table[0]); + LoadSpritePalettes(gIntro3MiscPal_Table); + gTasks[taskId].func = task_intro_14; +} + +static void task_intro_14(u8 taskId) +{ + REG_WIN0H = 0xF0; + REG_WIN0V = 0xA0; + REG_WININ = 0x1C; + REG_WINOUT = 0x1D; + REG_BG3CNT = BGCNT_PRIORITY(3) + | BGCNT_CHARBASE(0) + | BGCNT_SCREENBASE(6) + | BGCNT_16COLOR + | BGCNT_TXT256x256; + REG_BG0CNT = BGCNT_PRIORITY(0) + | BGCNT_CHARBASE(0) + | BGCNT_SCREENBASE(7) + | BGCNT_16COLOR + | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; + gTasks[taskId].data[15] = CreateTask(task_intro_20, 0); + gTasks[gTasks[taskId].data[15]].data[0] = 0; + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = task_intro_15; +} + +static void task_intro_15(u8 taskId) +{ + u16 foo = gTasks[taskId].data[0]; + + if (gTasks[taskId].data[0] != 32) + { + u32 bar; //needed to match for some reason + + gTasks[taskId].data[0] += 4; + REG_WIN0V = (gTasks[taskId].data[0] * 256) - (bar = foo - 0x9C); + } + else + { + REG_WIN0V = 0x2080; + gTasks[taskId].func = task_intro_16; + } +} + +static void task_intro_16(u8 taskId) +{ + gTasks[taskId].func = task_intro_17; +} + +static void task_intro_17(u8 taskId) +{ + gUnknown_0203931A = 0; + gTasks[taskId].func = Task_IntroPokemonBattle; +} + +static void Task_IntroPokemonBattle(u8 taskId) +{ + u8 spriteId; + + if (gIntroFrameCounter == 80) + { + spriteId = sub_813CE88(SPECIES_SHARPEDO, 0xF0, 0xA0, 5, 1); + gSprites[spriteId].callback = sub_813DB9C; + gSprites[spriteId].data1 = 1; + gSprites[spriteId].data2 = 0; + } + if (gIntroFrameCounter == 152) + { + spriteId = sub_813CE88(SPECIES_DUSKULL, 0, 0xA0, 4, 1); + gSprites[spriteId].callback = sub_813DB9C; + gSprites[spriteId].data1 = 2; + gSprites[spriteId].data2 = 1; + } + if (gIntroFrameCounter == 219) + { + sub_813D084(0); + spriteId = sub_813CFA8(gUnknown_02039318, 0x110, 0x60, 6); + gSprites[spriteId].callback = sub_813DE70; + gTasks[taskId].data[1] = spriteId; + } + if (gIntroFrameCounter == 304) + { + gTasks[gTasks[taskId].data[15]].data[0] = 4; + gSprites[gTasks[taskId].data[1]].data0 = 2; + } + if (gIntroFrameCounter == 384) + { + gTasks[gTasks[taskId].data[15]].data[0] = 0; + gSprites[gTasks[taskId].data[1]].data0 = 4; + } + if (gIntroFrameCounter == 400) + { + BeginNormalPaletteFade(0xFF0000, 0, 0x10, 0, 0x7EFF); + } + if (gIntroFrameCounter == 432) + { + gSprites[gTasks[taskId].data[1]].data0 = 5; + } + if (gIntroFrameCounter == 462) + { + gSprites[gTasks[taskId].data[1]].data0 = 6; + gTasks[gTasks[taskId].data[15]].data[0] = 2; + } + if (gIntroFrameCounter == 463) + { + sub_813D084(1); + spriteId = sub_813CE88(SPECIES_SHARPEDO, 0xD0, 8, 5, 1); + gSprites[spriteId].callback = sub_813E10C; + gTasks[taskId].data[2] = spriteId; + sub_813E7C0(spriteId); + } + if (gIntroFrameCounter == 539) + { + spriteId = sub_813CE88(SPECIES_DUSKULL, 0xF8, 0x10, 4, 1); + gSprites[spriteId].callback = sub_813E10C; + gTasks[taskId].data[3] = spriteId; + sub_813E930(spriteId); + } + if (gIntroFrameCounter == 623) + { + gSprites[gTasks[taskId].data[2]].data0 = 2; + gSprites[gTasks[taskId].data[3]].data0 = 2; + gTasks[gTasks[taskId].data[15]].data[0] = 3; + } + if (gIntroFrameCounter == 624) + { + sub_813D084(0); + spriteId = sub_813CE88(SPECIES_MUDKIP, 0x20, 0x98, 0, 0); + gSprites[spriteId].callback = sub_813E210; + gTasks[taskId].data[4] = spriteId; + InitIntroMudkipAttackAnim(spriteId); + } + if (gIntroFrameCounter == 700) + { + spriteId = sub_813CE88(SPECIES_TORCHIC, -8, 0x90, 1, 0); + gSprites[spriteId].callback = sub_813E210; + gTasks[taskId].data[5] = spriteId; + InitIntroTorchicAttackAnim(spriteId); + } + if (gIntroFrameCounter == 776) + { + gUnknown_0203931A = 1; + gSprites[gTasks[taskId].data[4]].data0 = 2; + gSprites[gTasks[taskId].data[5]].data0 = 2; + gTasks[gTasks[taskId].data[15]].data[0] = 0; + } + if (gIntroFrameCounter == 781) + { + sub_813D084(2); + gSprites[gTasks[taskId].data[2]].data0 = 3; + gSprites[gTasks[taskId].data[3]].data0 = 3; + gSprites[gTasks[taskId].data[4]].data0 = 3; + gSprites[gTasks[taskId].data[5]].data0 = 3; + spriteId = CreateSprite(&gSpriteTemplate_840B1F4, 0x78, 0x50, 15); + gSprites[spriteId].invisible = 1; + } + if (gIntroFrameCounter == 800) + PlaySE(SE_OP_BASYU); + if (gIntroFrameCounter == 850) + BeginNormalPaletteFade(0xFFFFFFFF, 4, 0, 0x10, 0xFFFF); + if (gIntroFrameCounter == 946) + gTasks[taskId].func = task_intro_19; +} + +static void task_intro_19(u8 taskId) +{ + DestroyTask(taskId); + SetMainCallback2(MainCB2_EndIntro); +} + +static void task_intro_20(u8 taskId) +{ +#define BG2_FLAGS (BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(14) | BGCNT_16COLOR | BGCNT_TXT256x256) +#define DISPCNT_FLAGS (DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON) + + gTasks[taskId].data[15]++; + switch (gTasks[taskId].data[0]) + { + case 0: + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; + REG_BG2CNT = 0; + gTasks[taskId].data[0] = 0xFF; + break; + case 2: + BeginNormalPaletteFade(1, 0, 0x10, 0, 0xFFFF); + REG_BG2CNT = BG2_FLAGS; + REG_DISPCNT = DISPCNT_FLAGS; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[0] = 20; + //fall through + case 20: + REG_BG2VOFS = gTasks[taskId].data[1]; + REG_BG2HOFS = gTasks[taskId].data[2]; + gTasks[taskId].data[1] += 6; + gTasks[taskId].data[2] -= 8; + break; + case 3: + BeginNormalPaletteFade(1, 0, 0x10, 0, 0xFFFF); + REG_BG2CNT = BG2_FLAGS; + REG_DISPCNT = DISPCNT_FLAGS; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[0] = 0x1E; + //fall through + case 0x1E: + REG_BG2VOFS = gTasks[taskId].data[1]; + REG_BG2HOFS = gTasks[taskId].data[2]; + gTasks[taskId].data[1] -= 6; + gTasks[taskId].data[2] += 8; + break; + case 4: + BeginNormalPaletteFade(1, 5, 0, 0x10, 0x37F7); + REG_BG2CNT = BG2_FLAGS; + REG_DISPCNT = DISPCNT_FLAGS; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[0] = 0x28; + //fall through + case 0x28: + REG_BG2VOFS = gTasks[taskId].data[1]; + REG_BG2HOFS = gTasks[taskId].data[2]; + gTasks[taskId].data[1] -= gTasks[taskId].data[3]; + gTasks[taskId].data[2] += gTasks[taskId].data[3]; + if (!(gTasks[taskId].data[15] & 7) && gTasks[taskId].data[3] != 0) + gTasks[taskId].data[3]--; + break; + case 0xFF: //needed to prevent jump table optimization + break; + } + +#undef BG2_FLAGS +#undef DISPCNT_FLAGS +} + +static void intro_reset_and_hide_bgs(void) +{ + REG_DISPCNT = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; +} + +#ifdef NONMATCHING +static void sub_813CCE8(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + default: + case 0: + REG_BLDCNT = 0x3F50; + REG_BLDALPHA = 0x1000; + REG_BLDY = 0; + gTasks[taskId].data[1] = 0x40; + gTasks[taskId].data[0] = 1; + return; + case 1: + if (gTasks[taskId].data[1] != 0) + { + u32 foo; + u32 bar asm("r2"); + + gTasks[taskId].data[1]--; + //tail merge at _0813CDC2 + foo = gTasks[taskId].data[1] + (gTasks[taskId].data[1] < 0); + bar = 0x1FE; + REG_BLDALPHA = gUnknown_08393E64[(foo & bar) / 2]; + } + else + { + REG_BLDALPHA = gUnknown_08393E64[0]; + gTasks[taskId].data[1] = 0x80; + gTasks[taskId].data[0]++; + } + return; + case 2: + if (gTasks[taskId].data[1] != 0) + { + //tail merge at _0813CE0E + gTasks[taskId].data[1]--; + } + else + { + gTasks[taskId].data[1] = 0; //redundant? + gTasks[taskId].data[0]++; + } + return; + case 3: + if (gTasks[taskId].data[1] <= 0x3D) + { + u32 foo; + u32 bar asm("r2"); + + gTasks[taskId].data[1]++; + //_0813CDC2 + foo = gTasks[taskId].data[1] + (gTasks[taskId].data[1] < 0); + bar = 0x1FE; + REG_BLDALPHA = gUnknown_08393E64[(foo & bar) / 2]; + } + else + { + //_0813CDE0 + REG_BLDALPHA = gUnknown_08393E64[0x1F]; + gTasks[taskId].data[1] = 0x10; + gTasks[taskId].data[0]++; + } + return; + case 4: + if (gTasks[taskId].data[1] != 0) + { + gTasks[taskId].data[1]--; + } + else + { + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + DestroyTask(taskId); + } + return; + } +} +#else +__attribute__((naked)) +static void sub_813CCE8(u8 taskId) +{ + asm("\n\ + .equ REG_BLDCNT, 0x4000050\n\ + .equ REG_BLDALPHA, 0x4000052\n\ + .syntax unified\n\ + push {r4,lr}\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + ldr r1, _0813CD0C @ =gTasks\n\ + lsls r0, r3, 2\n\ + adds r0, r3\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + movs r2, 0x8\n\ + ldrsh r0, [r0, r2]\n\ + adds r2, r1, 0\n\ + cmp r0, 0x4\n\ + bhi _0813CD28\n\ + lsls r0, 2\n\ + ldr r1, _0813CD10 @ =_0813CD14\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0813CD0C: .4byte gTasks\n\ +_0813CD10: .4byte _0813CD14\n\ + .align 2, 0\n\ +_0813CD14:\n\ + .4byte _0813CD28\n\ + .4byte _0813CD5C\n\ + .4byte _0813CD8C\n\ + .4byte _0813CDA8\n\ + .4byte _0813CDFC\n\ +_0813CD28:\n\ + ldr r1, _0813CD54 @ =REG_BLDCNT\n\ + ldr r4, _0813CD58 @ =0x00003f50\n\ + adds r0, r4, 0\n\ + strh r0, [r1]\n\ + adds r1, 0x2\n\ + movs r4, 0x80\n\ + lsls r4, 5\n\ + adds r0, r4, 0\n\ + strh r0, [r1]\n\ + adds r1, 0x2\n\ + movs r0, 0\n\ + strh r0, [r1]\n\ + lsls r0, r3, 2\n\ + adds r0, r3\n\ + lsls r0, 3\n\ + adds r0, r2\n\ + movs r1, 0x40\n\ + strh r1, [r0, 0xA]\n\ + movs r1, 0x1\n\ + strh r1, [r0, 0x8]\n\ + b _0813CE26\n\ + .align 2, 0\n\ +_0813CD54: .4byte REG_BLDCNT\n\ +_0813CD58: .4byte 0x00003f50\n\ +_0813CD5C:\n\ + lsls r0, r3, 2\n\ + adds r0, r3\n\ + lsls r0, 3\n\ + adds r2, r0, r2\n\ + ldrh r1, [r2, 0xA]\n\ + movs r3, 0xA\n\ + ldrsh r0, [r2, r3]\n\ + cmp r0, 0\n\ + beq _0813CD78\n\ + subs r0, r1, 0x1\n\ + strh r0, [r2, 0xA]\n\ + movs r4, 0xA\n\ + ldrsh r0, [r2, r4]\n\ + b _0813CDC2\n\ +_0813CD78:\n\ + ldr r1, _0813CD84 @ =REG_BLDALPHA\n\ + ldr r0, _0813CD88 @ =gUnknown_08393E64\n\ + ldrh r0, [r0]\n\ + strh r0, [r1]\n\ + movs r0, 0x80\n\ + b _0813CDEA\n\ + .align 2, 0\n\ +_0813CD84: .4byte REG_BLDALPHA\n\ +_0813CD88: .4byte gUnknown_08393E64\n\ +_0813CD8C:\n\ + lsls r0, r3, 2\n\ + adds r0, r3\n\ + lsls r0, 3\n\ + adds r1, r0, r2\n\ + ldrh r0, [r1, 0xA]\n\ + movs r3, 0xA\n\ + ldrsh r2, [r1, r3]\n\ + cmp r2, 0\n\ + bne _0813CE0E\n\ + strh r2, [r1, 0xA]\n\ + ldrh r0, [r1, 0x8]\n\ + adds r0, 0x1\n\ + strh r0, [r1, 0x8]\n\ + b _0813CE26\n\ +_0813CDA8:\n\ + lsls r0, r3, 2\n\ + adds r0, r3\n\ + lsls r0, 3\n\ + adds r2, r0, r2\n\ + ldrh r1, [r2, 0xA]\n\ + movs r4, 0xA\n\ + ldrsh r0, [r2, r4]\n\ + cmp r0, 0x3D\n\ + bgt _0813CDE0\n\ + adds r0, r1, 0x1\n\ + strh r0, [r2, 0xA]\n\ + movs r1, 0xA\n\ + ldrsh r0, [r2, r1]\n\ +_0813CDC2:\n\ + lsrs r1, r0, 31\n\ + adds r0, r1\n\ + movs r2, 0xFF\n\ + lsls r2, 1\n\ + ldr r3, _0813CDD8 @ =REG_BLDALPHA\n\ + ldr r1, _0813CDDC @ =gUnknown_08393E64\n\ + ands r0, r2\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + strh r0, [r3]\n\ + b _0813CE26\n\ + .align 2, 0\n\ +_0813CDD8: .4byte REG_BLDALPHA\n\ +_0813CDDC: .4byte gUnknown_08393E64\n\ +_0813CDE0:\n\ + ldr r1, _0813CDF4 @ =REG_BLDALPHA\n\ + ldr r0, _0813CDF8 @ =gUnknown_08393E64\n\ + ldrh r0, [r0, 0x3E]\n\ + strh r0, [r1]\n\ + movs r0, 0x10\n\ +_0813CDEA:\n\ + strh r0, [r2, 0xA]\n\ + ldrh r0, [r2, 0x8]\n\ + adds r0, 0x1\n\ + strh r0, [r2, 0x8]\n\ + b _0813CE26\n\ + .align 2, 0\n\ +_0813CDF4: .4byte REG_BLDALPHA\n\ +_0813CDF8: .4byte gUnknown_08393E64\n\ +_0813CDFC:\n\ + lsls r0, r3, 2\n\ + adds r0, r3\n\ + lsls r0, 3\n\ + adds r1, r0, r2\n\ + ldrh r0, [r1, 0xA]\n\ + movs r4, 0xA\n\ + ldrsh r2, [r1, r4]\n\ + cmp r2, 0\n\ + beq _0813CE14\n\ +_0813CE0E:\n\ + subs r0, 0x1\n\ + strh r0, [r1, 0xA]\n\ + b _0813CE26\n\ +_0813CE14:\n\ + ldr r0, _0813CE2C @ =REG_BLDCNT\n\ + strh r2, [r0]\n\ + adds r0, 0x2\n\ + strh r2, [r0]\n\ + adds r0, 0x2\n\ + strh r2, [r0]\n\ + adds r0, r3, 0\n\ + bl DestroyTask\n\ +_0813CE26:\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0813CE2C: .4byte REG_BLDCNT\n\ + .syntax divided\n"); +} +#endif + +void sub_813CE30(u16 scrX, u16 scrY, u16 zoom, u16 alpha) +{ + struct BgAffineSrcData src; + struct BgAffineDstData dest; + + src.texX = 0x8000; + src.texY = 0x8000; + src.scrX = scrX; + src.scrY = scrY; + src.sx = zoom; + src.sy = zoom; + src.alpha = alpha; + BgAffineSet(&src, &dest, 1); + REG_BG2PA = dest.pa; + REG_BG2PB = dest.pb; + REG_BG2PC = dest.pc; + REG_BG2PD = dest.pd; + REG_BG2X = dest.dx; + REG_BG2Y = dest.dy; +} + +static u16 sub_813CE88(u16 species, s16 x, s16 y, u16 d, u8 front) +{ + const u8 *lzPaletteData; + u8 spriteId; + + if (front) + LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[d], species, 0, 1); + else + LoadSpecialPokePic(&gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[d], species, 0, 0); + lzPaletteData = species_and_otid_get_pal(species, 0, 0xFFFF); + LoadCompressedPalette(lzPaletteData, 0x100 + d * 0x10, 0x20); + sub_8143648(d, d); + spriteId = CreateSprite(&gUnknown_02024E8C, x, y, (d + 1) * 4); + gSprites[spriteId].oam.paletteNum = d; + gSprites[spriteId].oam.priority = 1; + return spriteId; +} + +static u8 sub_813CFA8(u16 a, u16 b, u16 c, u16 d) +{ + u8 spriteId; + + DecompressPicFromTable_2(&gTrainerBackPicTable[a], gTrainerBackPicCoords[a].coords, gTrainerBackPicCoords[a].y_offset, (void *)0x2000000, gUnknown_0840B5A0[d], a); + LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + d * 0x10, 0x20); + sub_8143680(d, d); + gUnknown_02024E8C.anims = gUnknown_0840B064; + spriteId = CreateSprite(&gUnknown_02024E8C, b, c, 1); + gSprites[spriteId].oam.paletteNum = d; + gSprites[spriteId].oam.priority = 1; + return spriteId; +} + +static void sub_813D084(u8 a) +{ + u16 color; + + switch (a) + { + default: + case 0: + color = RGB(22, 31, 15); + break; + case 1: + color = RGB(31, 14, 12); + break; + case 2: + color = RGB(12, 12, 20); + break; + } + gPlttBufferUnfaded[241] = color; + gPlttBufferFaded[241] = color; +} + +static void sub_813D0CC(struct Sprite *sprite) +{ + u8 r0; + + if (sprite->data2 >= 192) + { + if (sprite->data3 != 0) + { + sprite->data3--; + } + else + { + sprite->invisible = FALSE; + SetOamMatrix(sprite->data1, sprite->data2, 0, 0, sprite->data2); + sprite->data2 = (sprite->data2 * 95) / 100; + r0 = (sprite->data2 - 192) / 128 + 9; + if (r0 > 15) + r0 = 15; + sprite->oam.paletteNum = r0; + } + } + else + { + DestroySprite(sprite); + } +} + +static void sub_813D158(struct Sprite *sprite) +{ + if (gSprites[sprite->data7].data7 != 0) + { + sprite->invisible = TRUE; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + StartSpriteAnim(sprite, 3); + sprite->data2 = 1024; + sprite->data3 = 8 * (sprite->data1 & 3); + sprite->callback = sub_813D0CC; + sprite->oam.shape = 1; + sprite->oam.size = 3; + CalcCenterToCornerVec(sprite, 1, 3, 2); + } + else + { + sprite->pos2.x = gSprites[sprite->data7].pos2.x; + sprite->pos2.y = gSprites[sprite->data7].pos2.y; + sprite->pos1.x = gSprites[sprite->data7].pos1.x; + sprite->pos1.y = gSprites[sprite->data7].pos1.y; + } +} + +static void sub_813D208(struct Sprite *sprite) +{ + if (sprite->data0 != 0) + sprite->callback = sub_813D220; +} + +static void sub_813D220(struct Sprite *sprite) +{ + if (sprite->pos1.x <= 116) + { + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos1.x += 4; + sprite->pos2.x = -4; + sprite->data4 = 128; + sprite->callback = sub_813D368; + } + else + { + u16 data2; + u16 data3; + u16 data4; + s16 sin1; + s16 sin2; + s16 sin3; + s16 sin4; + s16 var1; + s16 var2; + s16 var3; + s16 var4; + s16 temp; + + data4 = sprite->data4; + sin1 = gSineTable[(u8)data4]; + sin2 = gSineTable[(u8)(data4 + 64)]; + sprite->data4 += 2; + sprite->pos2.y = sin1 / 32; + sprite->pos1.x--; + if (sprite->pos1.x & 1) + sprite->pos1.y++; + temp = -sin2 / 16; + data2 = sprite->data2; + data3 = sprite->data3; + sin3 = gSineTable[(u8)(temp - 16)]; + sin4 = gSineTable[(u8)(temp + 48)]; + var1 = sin4 * data2 / 256; + var2 = -sin3 * data3 / 256; + var3 = sin3 * data2 / 256; + var4 = sin4 * data3 / 256; + SetOamMatrix(sprite->data1, data2, 0, 0, data3); + SetOamMatrix(sprite->data1 + 1, var1, var3, var2, var4); + SetOamMatrix(sprite->data1 + 2, var1, var3, var2 * 2, var4 * 2); + } +} + +static void sub_813D368(struct Sprite *sprite) +{ + SetOamMatrix(sprite->data1, sprite->data6 + 64, 0, 0, sprite->data6 + 64); + SetOamMatrix(sprite->data1 + 1, sprite->data6 + 64, 0, 0, sprite->data6 + 64); + SetOamMatrix(sprite->data1 + 2, sprite->data6 + 64, 0, 0, sprite->data6 + 64); + if (sprite->data4 != 64) + { + u16 data4; + + sprite->data4 -= 8; + data4 = sprite->data4; + sprite->pos2.x = gSineTable[(u8)(data4 + 64)] / 64; + sprite->pos2.y = gSineTable[(u8)data4] / 64; + } + else + { + sprite->data4 = 0; + sprite->callback = sub_813D414; + } +} + +static void sub_813D414(struct Sprite *sprite) +{ + if (sprite->data0 != 2) + { + s16 r2; + + sprite->data4 += 8; + r2 = gSineTable[(u8)sprite->data4] / 16 + 64; + sprite->pos2.x = gSineTable[(u8)(r2 + 64)] / 64; + sprite->pos2.y = gSineTable[(u8)r2] / 64; + } + else + { + sprite->callback = SpriteCB_WaterDropFall; + } +} + +static void SpriteCB_WaterDropFall(struct Sprite *sprite) +{ + if (sprite->pos1.y < sprite->data5) + { + sprite->pos1.y += 4; + } + else + { + sprite->data7 = 1; + sprite->invisible = TRUE; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + StartSpriteAnim(sprite, 3); + sprite->data2 = 1024; + sprite->data3 = 8 * (sprite->data1 & 3); + sprite->callback = sub_813D0CC; + sprite->oam.shape = 1; + sprite->oam.size = 3; + CalcCenterToCornerVec(sprite, 1, 3, 2); + } +} + +//Duplicate function +static void SpriteCB_WaterDropFall_2(struct Sprite *sprite) +{ + if (sprite->pos1.y < sprite->data5) + { + sprite->pos1.y += 4; + } + else + { + sprite->data7 = 1; + sprite->invisible = TRUE; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + StartSpriteAnim(sprite, 3); + sprite->data2 = 1024; + sprite->data3 = 8 * (sprite->data1 & 3); + sprite->callback = sub_813D0CC; + sprite->oam.shape = 1; + sprite->oam.size = 3; + CalcCenterToCornerVec(sprite, 1, 3, 2); + } +} + +static u8 CreateWaterDrop(s16 x, s16 y, u16 c, u16 d, u16 e, u8 fallImmediately) +{ + u8 spriteId; + u8 oldSpriteId; + + spriteId = CreateSprite(&gSpriteTemplate_840AE20, x, y, 0); + gSprites[spriteId].data0 = 0; + gSprites[spriteId].data7 = 0; + gSprites[spriteId].data1 = d; + gSprites[spriteId].data2 = c; + gSprites[spriteId].data3 = c; + gSprites[spriteId].data5 = e; + gSprites[spriteId].data6 = c; + gSprites[spriteId].oam.affineMode = 3; + gSprites[spriteId].oam.matrixNum = d; + CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2); + StartSpriteAnim(&gSprites[spriteId], 2); + if (!fallImmediately) + gSprites[spriteId].callback = sub_813D208; + else + gSprites[spriteId].callback = SpriteCB_WaterDropFall_2; + oldSpriteId = spriteId; + + spriteId = CreateSprite(&gSpriteTemplate_840AE20, x, y, 0); + gSprites[spriteId].data7 = oldSpriteId; + gSprites[spriteId].data1 = d + 1; + gSprites[spriteId].oam.affineMode = 3; + gSprites[spriteId].oam.matrixNum = d + 1; + CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2); + gSprites[spriteId].callback = sub_813D158; + + spriteId = CreateSprite(&gSpriteTemplate_840AE20, x, y, 0); + gSprites[spriteId].data7 = oldSpriteId; + gSprites[spriteId].data1 = d + 2; + StartSpriteAnim(&gSprites[spriteId], 1); + gSprites[spriteId].oam.affineMode = 3; + gSprites[spriteId].oam.matrixNum = d + 2; + CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2); + gSprites[spriteId].callback = sub_813D158; + + SetOamMatrix(d, c + 32, 0, 0, c + 32); + SetOamMatrix(d + 1, c + 32, 0, 0, c + 32); + SetOamMatrix(d + 2, c + 32, 0, 0, 2 * (c + 32)); + + return oldSpriteId; +} + +static void sub_813D788(struct Sprite *sprite) +{ + switch (sprite->data0) + { + case 0: + StartSpriteAnimIfDifferent(sprite, 0); + sprite->pos1.x--; + break; + case 1: + StartSpriteAnimIfDifferent(sprite, 0); + if (gIntroFrameCounter & 7) + return; + sprite->pos1.x++; + break; + case 2: + StartSpriteAnimIfDifferent(sprite, 2); + if (sprite->pos1.x <= 120 || (gIntroFrameCounter & 7)) + sprite->pos1.x++; + break; + case 3: + StartSpriteAnimIfDifferent(sprite, 3); + break; + case 4: + StartSpriteAnimIfDifferent(sprite, 0); + if (sprite->pos1.x > -32) + sprite->pos1.x -= 2; + break; + } + if (gIntroFrameCounter & 7) + return; + if (sprite->pos2.y != 0) + { + sprite->pos2.y = 0; + } + else + { + switch (Random() & 3) + { + case 0: + sprite->pos2.y = -1; + break; + case 1: + sprite->pos2.y = 1; + break; + case 2: + case 3: + sprite->pos2.y = 0; + break; + } + } +} + +static void sub_813D880(struct Sprite *sprite) +{ + switch (sprite->data0) + { + case 0: + break; + case 1: + if (sprite->pos2.x + sprite->pos1.x < 304) + sprite->pos2.x += 8; + else + sprite->data0 = 2; + break; + case 2: + if (sprite->pos2.x + sprite->pos1.x > 120) + sprite->pos2.x -= 1; + else + sprite->data0 = 3; + break; + case 3: + if (sprite->pos2.x > 0) + sprite->pos2.x -= 2; + break; + } + sprite->pos2.y = Sin((u8)sprite->data1, 8) - gUnknown_0203935A; + sprite->data1 += 4; +} + +static void sub_813D908(struct Sprite *sprite) +{ + if (gTasks[sprite->data0].data[0] == 0) + { + sprite->invisible = TRUE; + } + else if (gTasks[sprite->data0].data[0] != 4) + { + sprite->invisible = FALSE; + } + else + { + DestroySprite(sprite); + } +} + +static u8 CreateGameFreakLogo(s16 a, s16 b, u8 c) +{ + u8 spriteId; + u16 i; + + for (i = 0; i < 9; i++) + { + spriteId = CreateSprite(&gSpriteTemplate_840AF94, gUnknown_0840AF50[i][1] + a, b - 4, 0); + gSprites[spriteId].data0 = c; + StartSpriteAnim(&gSprites[spriteId], gUnknown_0840AF50[i][0]); + } + for (i = 0; i < 8; i++) + { + spriteId = CreateSprite(&gSpriteTemplate_840AFAC, gUnknown_0840AF74[i][1] + a, b + 12, 0); + gSprites[spriteId].data0 = c; + StartSpriteAnim(&gSprites[spriteId], gUnknown_0840AF74[i][0]); + } + spriteId = CreateSprite(&gSpriteTemplate_840AFC4, 120, b - 4, 0); + gSprites[spriteId].data0 = c; + + return spriteId; +} + +#ifdef NONMATCHING +static void sub_813DA64(struct Sprite *sprite) +{ + sprite->data7++; + + switch (sprite->data0) + { + case 0: + default: + sprite->oam.affineMode = 3; + sprite->oam.matrixNum = 1; + CalcCenterToCornerVec(sprite, 1, 3, 3); + sprite->invisible = FALSE; + sprite->data0 = 1; + sprite->data1 = 128; + sprite->data2 = -24; + sprite->data3 = 0; + break; + case 1: + { + s16 r3; + s16 sin1; + s16 r6; + s16 foo; + s16 r5; + s16 r2; + + //_0813DAC0 + if (sprite->data3 < 0x50) + { + sprite->pos2.y = -Sin((u8)sprite->data3, 0x78); + sprite->pos2.x = -Sin((u8)sprite->data3, 0x8C); + if (sprite->data3 > 64) + sprite->oam.priority = 3; + } + //_0813DAF8 + r3 = gSineTable[(u8)sprite->data2]; + sin1 = gSineTable[(u8)(sprite->data2 + 64)]; + r6 = sin1 * sprite->data1 / 256; + foo = sin1 * sprite->data1 / 256; + r5 = -r3 * sprite->data1 / 256; + r2 = r3 * sprite->data1 / 256; + + SetOamMatrix(1, r6, r2, r5, foo); + + if (sprite->data1 < 0x100) + sprite->data1 += 8; + else + sprite->data1 += 32; + if (sprite->data2 < 0x18) + sprite->data2 += 1; + if (sprite->data3 < 64) + sprite->data3 += 2; + else if (!(sprite->data7 & 3)) + sprite->data3 += 1; + break; + } + } + //_0813DB92 +} +#else +__attribute__((naked)) +static void sub_813DA64(struct Sprite *sprite) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + sub sp, 0x4\n\ + adds r4, r0, 0\n\ + ldrh r0, [r4, 0x3C]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x3C]\n\ + movs r1, 0x2E\n\ + ldrsh r0, [r4, r1]\n\ + cmp r0, 0\n\ + beq _0813DA7C\n\ + cmp r0, 0x1\n\ + beq _0813DAC0\n\ +_0813DA7C:\n\ + ldrb r0, [r4, 0x1]\n\ + movs r1, 0x3\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x1]\n\ + ldrb r1, [r4, 0x3]\n\ + movs r0, 0x3F\n\ + negs r0, r0\n\ + ands r0, r1\n\ + movs r1, 0x2\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x3]\n\ + adds r0, r4, 0\n\ + movs r1, 0x1\n\ + movs r2, 0x3\n\ + movs r3, 0x3\n\ + bl CalcCenterToCornerVec\n\ + adds r2, r4, 0\n\ + adds r2, 0x3E\n\ + ldrb r1, [r2]\n\ + movs r0, 0x5\n\ + negs r0, r0\n\ + ands r0, r1\n\ + strb r0, [r2]\n\ + movs r0, 0x1\n\ + strh r0, [r4, 0x2E]\n\ + movs r0, 0x80\n\ + strh r0, [r4, 0x30]\n\ + ldr r0, _0813DABC @ =0x0000ffe8\n\ + strh r0, [r4, 0x32]\n\ + movs r0, 0\n\ + b _0813DB92\n\ + .align 2, 0\n\ +_0813DABC: .4byte 0x0000ffe8\n\ +_0813DAC0:\n\ + ldrh r1, [r4, 0x34]\n\ + movs r2, 0x34\n\ + ldrsh r0, [r4, r2]\n\ + cmp r0, 0x4F\n\ + bgt _0813DAF8\n\ + lsls r0, r1, 24\n\ + lsrs r0, 24\n\ + movs r1, 0x78\n\ + bl Sin\n\ + negs r0, r0\n\ + strh r0, [r4, 0x26]\n\ + ldrh r0, [r4, 0x34]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + movs r1, 0x8C\n\ + bl Sin\n\ + negs r0, r0\n\ + strh r0, [r4, 0x24]\n\ + movs r1, 0x34\n\ + ldrsh r0, [r4, r1]\n\ + cmp r0, 0x40\n\ + ble _0813DAF8\n\ + ldrb r0, [r4, 0x5]\n\ + movs r1, 0xC\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x5]\n\ +_0813DAF8:\n\ + ldr r2, _0813DB60 @ =gSineTable\n\ + ldrh r1, [r4, 0x32]\n\ + lsls r0, r1, 24\n\ + lsrs r0, 23\n\ + adds r0, r2\n\ + ldrh r3, [r0]\n\ + adds r1, 0x40\n\ + lsls r1, 24\n\ + lsrs r1, 23\n\ + adds r1, r2\n\ + movs r2, 0\n\ + ldrsh r0, [r1, r2]\n\ + movs r1, 0x30\n\ + ldrsh r2, [r4, r1]\n\ + adds r1, r0, 0\n\ + muls r1, r2\n\ + adds r0, r1, 0\n\ + cmp r1, 0\n\ + bge _0813DB20\n\ + adds r0, 0xFF\n\ +_0813DB20:\n\ + lsls r0, 8\n\ + lsrs r6, r0, 16\n\ + lsls r0, r3, 16\n\ + asrs r3, r0, 16\n\ + negs r0, r3\n\ + muls r0, r2\n\ + cmp r0, 0\n\ + bge _0813DB32\n\ + adds r0, 0xFF\n\ +_0813DB32:\n\ + lsls r0, 8\n\ + lsrs r5, r0, 16\n\ + adds r0, r3, 0\n\ + muls r0, r2\n\ + cmp r0, 0\n\ + bge _0813DB40\n\ + adds r0, 0xFF\n\ +_0813DB40:\n\ + lsls r0, 8\n\ + lsrs r2, r0, 16\n\ + adds r1, r6, 0\n\ + adds r3, r5, 0\n\ + str r1, [sp]\n\ + movs r0, 0x1\n\ + bl SetOamMatrix\n\ + ldrh r1, [r4, 0x30]\n\ + movs r2, 0x30\n\ + ldrsh r0, [r4, r2]\n\ + cmp r0, 0xFF\n\ + bgt _0813DB64\n\ + adds r0, r1, 0\n\ + adds r0, 0x8\n\ + b _0813DB68\n\ + .align 2, 0\n\ +_0813DB60: .4byte gSineTable\n\ +_0813DB64:\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ +_0813DB68:\n\ + strh r0, [r4, 0x30]\n\ + ldrh r1, [r4, 0x32]\n\ + movs r2, 0x32\n\ + ldrsh r0, [r4, r2]\n\ + cmp r0, 0x17\n\ + bgt _0813DB78\n\ + adds r0, r1, 0x1\n\ + strh r0, [r4, 0x32]\n\ +_0813DB78:\n\ + ldrh r2, [r4, 0x34]\n\ + movs r1, 0x34\n\ + ldrsh r0, [r4, r1]\n\ + cmp r0, 0x3F\n\ + bgt _0813DB86\n\ + adds r0, r2, 0x2\n\ + b _0813DB92\n\ +_0813DB86:\n\ + ldrh r1, [r4, 0x3C]\n\ + movs r0, 0x3\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0813DB94\n\ + adds r0, r2, 0x1\n\ +_0813DB92:\n\ + strh r0, [r4, 0x34]\n\ +_0813DB94:\n\ + add sp, 0x4\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif + +static void sub_813DB9C(struct Sprite *sprite) +{ + switch (sprite->data0) + { + case 0: + default: + if (sprite->data2 != 0) + sprite->hFlip = TRUE; + else + sprite->hFlip = FALSE; + sprite->data0 = 1; + //fall through + case 1: + if (sprite->pos1.y > 96) + { + sprite->pos1.y -= 4; + if (sprite->data2 != 0) + sprite->pos1.x += 2; + else + sprite->pos1.x -= 2; + } + else + { + sprite->data0++; + sprite->data3 = 8; + } + break; + case 2: + if (sprite->data3 != 0) + { + sprite->data3--; + } + else + { + sprite->data0++; + sprite->data3 = 0; //redundant? + } + break; + case 3: + sprite->oam.affineMode = 3; + sprite->oam.matrixNum = sprite->data1; + CalcCenterToCornerVec(sprite, 0, 3, 3); + if (sprite->data2 != 0) + SetOamMatrix(sprite->data1, -256, 0, 0, 256); + else + SetOamMatrix(sprite->data1, 256, 0, 0, 256); + sprite->data0++; + sprite->data4 = 0; + break; + case 4: + sprite->data4++; + if (sprite->pos1.y + sprite->pos2.y > -32 + && sprite->pos1.x + sprite->pos2.x > -64) + { + u16 r2; + + sprite->pos2.y = -(sprite->data4 * sprite->data4) / 8; + if (sprite->data2 != 0) + sprite->pos2.x += sprite->data4; + else + sprite->pos2.x -= sprite->data4; + if (sprite->data3 < 128) + sprite->data3 += 8; + r2 = 256 - sprite->data3; + if (sprite->data2 != 0) + SetOamMatrix(sprite->data1, -r2, 0, 0, r2); + else + SetOamMatrix(sprite->data1, r2, 0, 0, r2); + } + else + { + DestroySprite(sprite); + } + } +} + +static void sub_813DD58(struct Sprite *sprite) +{ + switch (sprite->data0) + { + case 0: + default: + sprite->invisible = FALSE; + sprite->oam.affineMode = 1; + sprite->oam.matrixNum = sprite->data1; + sprite->data3 = 2048; + sprite->data0 = 1; + //fall through + case 1: + if (sprite->data3 > 256) + { + sprite->data3 -= 128; + if (sprite->data2 != 0) + SetOamMatrix(sprite->data1, -sprite->data3, 0, 0, sprite->data3); + else + SetOamMatrix(sprite->data1, sprite->data3, 0, 0, sprite->data3); + } + else + { + if (sprite->data2 != 0) + SetOamMatrix(sprite->data1, -256, 0, 0, 256); + else + SetOamMatrix(sprite->data1, 256, 0, 0, 256); + sprite->data0++; + } + break; + case 2: + break; + case 3: + sprite->data4++; + sprite->pos2.y = sprite->data4 * sprite->data4 / 32; + if (sprite->data2 != 0) + sprite->pos2.x = sprite->data4 / 4; + else + sprite->pos2.x = -(sprite->data4 / 4); + break; + } +} + +static void sub_813DE70(struct Sprite *sprite) +{ + switch (sprite->data0) + { + case 0: + default: + if (sprite->pos1.x > 40) + { + sprite->pos1.x -= 4; + } + else + { + StartSpriteAnim(sprite, 1); + sprite->data6 = CreateSprite(&gSpriteTemplate_840B084, 16, 104, 100); + sprite->data7 = CreateSprite(&gSpriteTemplate_840B084, 12, 106, 101); + sprite->data0 = 1; + } + break; + case 1: + break; + case 2: + StartSpriteAnim(sprite, 2); + gSprites[sprite->data6].data0 = 1; + gSprites[sprite->data7].data0 = 2; + sprite->data0++; + break; + case 3: + if (sprite->pos1.y > 160) + { + sprite->invisible = 1; + sprite->data0 = 1; + } + else + { + sprite->pos1.y += 2; + sprite->pos1.x--; + } + break; + case 4: + { + s16 r4, r5; + + r5 = gSprites[sprite->data6].pos1.x + gSprites[sprite->data6].pos2.x; + r4 = gSprites[sprite->data6].pos1.y + gSprites[sprite->data6].pos2.y; + DestroySprite(&gSprites[sprite->data6]); + sprite->data6 = sub_813CE88(SPECIES_TORCHIC, r5, r4, 2, 1); + gSprites[sprite->data6].callback = sub_813DD58; + gSprites[sprite->data6].invisible = TRUE; + gSprites[sprite->data6].data1 = 1; + gSprites[sprite->data6].data2 = 1; + sub_813E580(r5, r4); + + r5 = gSprites[sprite->data7].pos1.x + gSprites[sprite->data7].pos2.x; + r4 = gSprites[sprite->data7].pos1.y + gSprites[sprite->data7].pos2.y; + DestroySprite(&gSprites[sprite->data7]); + sprite->data7 = sub_813CE88(SPECIES_MUDKIP, r5, r4, 3, 1); + gSprites[sprite->data7].callback = sub_813DD58; + gSprites[sprite->data7].invisible = TRUE; + gSprites[sprite->data7].data1 = 2; + gSprites[sprite->data7].data2 = 0; + sub_813E580(r5, r4); + + BeginNormalPaletteFade(0xFF0000, 0, 16, 16, RGB(31, 23, 31)); + sprite->data0 = 1; + break; + } + case 5: + gSprites[sprite->data6].data0 = 3; + gSprites[sprite->data7].data0 = 3; + break; + case 6: + DestroySprite(&gSprites[sprite->data6]); + DestroySprite(&gSprites[sprite->data7]); + DestroySprite(sprite); + break; + } +} + +static void sub_813E10C(struct Sprite *sprite) +{ + switch (sprite->data0) + { + case 0: + default: + if (sprite->pos2.x > -56) + { + sprite->pos2.x -= 8; + sprite->pos2.y += 6; + } + else + { + sprite->data6 = sprite->pos1.x; + sprite->data7 = sprite->pos1.y; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 1; + sprite->data1 = 0; + } + break; + case 1: + if (!(sprite->data1 & 1)) + { + if (sprite->data1 & 2) + { + sprite->pos2.x = -1; + sprite->pos2.y = 1; + } + else + { + sprite->pos2.x = 0; + sprite->pos2.y = 0; + } + } + sprite->data1++; + break; + case 2: + sprite->invisible = TRUE; + sprite->pos1.x = sprite->data6; + sprite->pos1.y = sprite->data7; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + break; + case 3: + sprite->invisible = FALSE; + sprite->data1++; + //fall through + case 4: + if (sprite->pos2.x > -56) + { + sprite->pos2.x -= 4; + sprite->pos2.y += 3; + } + else + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 1; + } + break; + } +} + +static void sub_813E210(struct Sprite *sprite) +{ + switch (sprite->data0) + { + case 0: + default: + if (sprite->pos2.x < 56) + { + sprite->pos2.x += 8; + sprite->pos2.y -= 6; + } + else + { + sprite->data6 = sprite->pos1.x; + sprite->data7 = sprite->pos1.y; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 1; + sprite->data1 = 0; + } + break; + case 1: + if (!(sprite->data1 & 1)) + { + if (sprite->data1 & 2) + { + sprite->pos2.x = 1; + sprite->pos2.y = -1; + } + else + { + sprite->pos2.x = 0; + sprite->pos2.y = 0; + } + } + sprite->data1++; + break; + case 2: + sprite->invisible = TRUE; + sprite->pos1.x = sprite->data6; + sprite->pos1.y = sprite->data7; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + break; + case 3: + sprite->invisible = FALSE; + sprite->data1++; + //fall through + case 4: + if (sprite->pos2.x < 56) + { + sprite->pos2.x += 4; + sprite->pos2.y -= 3; + } + else + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 1; + } + break; + } +} + +static void sub_813E30C(struct Sprite *sprite) +{ + u16 r4, r1; + + sprite->data7++; + switch (sprite->data0) + { + case 0: + default: + break; + case 1: + sprite->oam.affineMode = 1; + sprite->oam.matrixNum = 1; + sprite->data0 = 10; + sprite->data4 = 36; + //fall through + case 10: + if (sprite->pos1.x <= 144) + { + sprite->pos1.x += 4; + sprite->pos1.y -= 1; + sprite->pos2.y = -Sin((u8)sprite->data2, 24); + sprite->data2 += 4; + } + sprite->data3 -= sprite->data4; + if ((sprite->data7 & 1) && sprite->data4 != 0) + sprite->data4--; + r4 = gSineTable[(u8)sprite->data3]; + r1 = gSineTable[(u8)(sprite->data3 + 64)]; + SetOamMatrix(1, r1, r4, -r4, r1); + break; + case 2: + sprite->oam.affineMode = 1; + sprite->oam.matrixNum = 2; + sprite->data0 = 20; + sprite->data4 = 36; + //fall through + case 20: + if (sprite->pos1.x <= 96) + { + sprite->pos1.x += 3; + sprite->pos1.y -= 1; + sprite->pos2.y = -Sin((u8)sprite->data2, 24); + sprite->data2 += 4; + } + sprite->data3 -= sprite->data4; + if ((sprite->data7 & 1) && sprite->data4 != 0) + sprite->data4--; + r4 = gSineTable[(u8)sprite->data3]; + r1 = gSineTable[(u8)(sprite->data3 + 64)]; + SetOamMatrix(2, r1, r4, -r4, r1); + break; + } +} + +static void sub_813E4B8(struct Sprite *sprite) +{ + u16 r4; + u16 r2; + u16 r1; + + sprite->data7++; + if (sprite->data7 & 1) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + if (sprite->data2 >= 64) + { + DestroySprite(sprite); + return; + } + sprite->data2 += 2; + r4 = Sin((u8)sprite->data2, 40); + sprite->pos2.x = Cos((u8)(sprite->data0 * 32), r4); + sprite->pos2.y = Sin((u8)(sprite->data0 * 32), r4); + if (sprite->data0 == 0) + { + sprite->data3 -= sprite->data1; + if ((sprite->data7 & 1) && sprite->data1 != 0) + sprite->data1--; + r2 = gSineTable[(u8)sprite->data3]; + r1 = gSineTable[(u8)(sprite->data3 + 64)]; + SetOamMatrix(16, r1, r2, -r2, r1); + } +} + +static void sub_813E580(u16 x, u16 y) +{ + u8 i; + u8 spriteId; + + for (i = 0; i < 8; i++) + { + spriteId = CreateSprite(&gSpriteTemplate_840B0B0, x, y, 0); + gSprites[spriteId].oam.affineMode = 1; + gSprites[spriteId].oam.matrixNum = 16; + gSprites[spriteId].data0 = i; + gSprites[spriteId].data1 = 32; + } +} + +static void sub_813E5E0(struct Sprite *sprite) +{ + if (gUnknown_0203931A != 0) + { + DestroySprite(sprite); + } + else + { + sprite->invisible = gSprites[sprite->data0].invisible; + if (sprite->data7 < 12) + sprite->data7++; + sprite->data6 += 4; + sprite->pos1.x = sprite->data4 + gSineTable[(u8)(sprite->data3 + 64)] * sprite->data6 / 256; + //This useless '+ 0' is needed to make the asm match + sprite->pos1.y = sprite->data5 + gSineTable[(u8)(sprite->data3 + 0)] * sprite->data6 / 256; + sprite->pos2.y = gSineTable[(u8)(sprite->data1 + 0)] * sprite->data7 / 256; + sprite->data1 += 16; + if (sprite->pos1.y > sprite->data2) + DestroySprite(sprite); + } +} + +static void sub_813E6C0(struct Sprite *sprite) +{ + u8 spriteId; + u8 i; + s16 var1; + s16 var2; + + if (gUnknown_0203931A != 0) + { + DestroySprite(sprite); + } + else + { + sprite->data7++; + sprite->invisible = TRUE; + if (gSprites[sprite->data0].data0 == 1 && !(sprite->data7 & 3)) + { + var1 = sprite->data1 + gSprites[sprite->data0].pos1.x; + var2 = sprite->data2 + gSprites[sprite->data0].pos1.y; + for (i = 0; i < 3; i++) + { + u8 r3 = gSprites[sprite->data0].subpriority - 1; + //Make redundant copies of these variables to get the asm to match + s16 _var1 = var1; + s16 _var2 = var2; + + spriteId = CreateSprite(&gSpriteTemplate_840B0DC, _var1, _var2, r3); + if (spriteId != 64) + { + gSprites[spriteId].data0 = sprite->data0; + gSprites[spriteId].data1 = (((sprite->data7 >> 2) & 7) << 5) + i * 85; + gSprites[spriteId].data2 = sprite->data3; + gSprites[spriteId].data3 = 104; + gSprites[spriteId].data4 = var1; + gSprites[spriteId].data5 = var2; + gSprites[spriteId].data6 = 0; + } + } + } + } +} + +static void sub_813E7C0(u8 a) +{ + u8 spriteId; + + spriteId = CreateSprite(&gSpriteTemplate_840B0F4, 0, 0, 0); + if (spriteId != 64) + { + gSprites[spriteId].data0 = a; + gSprites[spriteId].data1 = -12; + gSprites[spriteId].data2 = 0; + gSprites[spriteId].data3 = 136; + } +} + +static void sub_813E804(struct Sprite *sprite) +{ + if (gUnknown_0203931A != 0) + { + DestroySprite(sprite); + } + else + { + sprite->invisible = gSprites[sprite->data0].invisible; + sprite->data7++; + if (sprite->data3 < 40) + sprite->data3 += 2; + //This useless '+ 0' is needed to make the asm match + sprite->pos1.x = gSprites[sprite->data0].pos1.x + gSprites[sprite->data0].pos2.x + gSineTable[(u8)(sprite->data1 + 64)] * sprite->data3 / 256; + sprite->pos1.y = gSprites[sprite->data0].pos1.y + gSprites[sprite->data0].pos2.y + gSineTable[(u8)(sprite->data1 + 0)] * sprite->data3 / 512; + sprite->data1 += 2; + sprite->pos2.y = gSineTable[(u8)(sprite->data2 + 0)] / 32; + sprite->data2 += 8; + if ((sprite->data1 & 0xFF) < 128) + sprite->subpriority = gSprites[sprite->data0].subpriority - 1; + else + sprite->subpriority = gSprites[sprite->data0].subpriority + 1; + } +} + +static void sub_813E930(u8 a) +{ + u8 i; + u8 spriteId; + + for (i = 0; i < 8; i++) + { + spriteId = CreateSprite(&gSpriteTemplate_840B124, gSprites[a].pos1.x, gSprites[a].pos1.y, 0); + if (spriteId != 64) + { + gSprites[spriteId].data0 = a; + gSprites[spriteId].data1 = i * 32; + } + } +} + +static void sub_813E980(struct Sprite *sprite) +{ + if (gUnknown_0203931A != 0) + { + DestroySprite(sprite); + } + else + { + u8 r0; + u16 matrixNum; + + sprite->invisible = gSprites[sprite->data0].invisible; + sprite->data7++; + sprite->data6 += 8; + sprite->pos1.x = sprite->data4 + gSineTable[(u8)(sprite->data3 + 64)] * sprite->data6 / 256; + sprite->pos1.y = sprite->data5 + gSineTable[(u8)(sprite->data3 + 0)] * sprite->data6 / 256; + r0 = sprite->data6 / 16; + if (r0 > 9) + r0 = 9; + matrixNum = (r0 + 18) & 31; + sprite->oam.matrixNum = matrixNum; + if (sprite->data6 > 160) + DestroySprite(sprite); + } +} + +static void sub_813EA60(struct Sprite *sprite) +{ + bool32 r6; + s16 r1, r2; + u8 spriteId; + + if (gUnknown_0203931A != 0) + { + DestroySprite(sprite); + } + else + { + sprite->data7++; + sprite->invisible = TRUE; + if (gSprites[sprite->data0].data0 == 1) + { + r6 = (sprite->data7 & 1); + if (!r6) + { + r1 = sprite->data1 + gSprites[sprite->data0].pos1.x; + r2 = sprite->data2 + gSprites[sprite->data0].pos1.y; + spriteId = CreateSprite(&gSpriteTemplate_840B150, r1, r2, gSprites[sprite->data0].subpriority + 1); + if (spriteId != 64) + { + gSprites[spriteId].oam.affineMode = 3; + gSprites[spriteId].oam.matrixNum = 18; + CalcCenterToCornerVec(&gSprites[spriteId], 0, 1, 3); + gSprites[spriteId].data0 = sprite->data0; + gSprites[spriteId].data3 = gUnknown_0840B168[(sprite->data7 >> 1) & 7]; + gSprites[spriteId].data4 = r1; + gSprites[spriteId].data5 = r2; + gSprites[spriteId].data6 = r6; + } + } + } + } +} + +static void InitIntroTorchicAttackAnim(u8 a) +{ + u8 spriteId; + u8 i; + + spriteId = CreateSprite(&gSpriteTemplate_840B170, 0, 0, 0); + if (spriteId != 64) + { + gSprites[spriteId].data0 = a; + gSprites[spriteId].data1 = 0; + gSprites[spriteId].data2 = 8; + gSprites[spriteId].data3 = 24; + } + for (i = 0; i < 10; i++) + { + SetOamMatrix(18 + i, gUnknown_0840B188[i], 0, 0, gUnknown_0840B188[i]); + } +} + +static void sub_813EBBC(struct Sprite *sprite) +{ + if (gUnknown_0203931A != 0) + { + DestroySprite(sprite); + } + else + { + sprite->invisible = gSprites[sprite->data0].invisible; + sprite->data7 += 1; + sprite->data6 += 8; + sprite->pos1.x = sprite->data4 + gSineTable[(u8)(sprite->data3 + 64)] * sprite->data6 / 256; + sprite->pos1.y = sprite->data5 + gSineTable[(u8)(sprite->data3 + 0)] * sprite->data6 / 256; + sprite->pos2.y = gSineTable[(u8)(sprite->data1 + 0)] / 64; + sprite->data1 += 16; + if (sprite->pos1.y < sprite->data2) + DestroySprite(sprite); + } +} + +static void sub_813EC90(struct Sprite *sprite) +{ + bool32 r6; + s16 r1, r2; + u8 spriteId; + u16 foo; + + if (gUnknown_0203931A != 0) + { + DestroySprite(sprite); + } + else + { + sprite->data7++; + sprite->invisible = TRUE; + if (gSprites[sprite->data0].data0 == 1) + { + r6 = sprite->data7 & 1; + if (!r6) + { + r1 = sprite->data1 + gSprites[sprite->data0].pos1.x; + r2 = sprite->data2 + gSprites[sprite->data0].pos1.y; + spriteId = CreateSprite(&gSpriteTemplate_840B1B0, r1, r2, gSprites[sprite->data0].subpriority + 1); + if (spriteId != 64) + { + gSprites[spriteId].oam.affineMode = 3; + gSprites[spriteId].oam.matrixNum = 17; + CalcCenterToCornerVec(&gSprites[spriteId], 0, 1, 3); + gSprites[spriteId].data0 = sprite->data0; + gSprites[spriteId].data1 = ((sprite->data7 >> 2) & 7) << 5; + gSprites[spriteId].data2 = sprite->data3; + gSprites[spriteId].data3 = 232; + gSprites[spriteId].data4 = r1; + gSprites[spriteId].data5 = r2; + gSprites[spriteId].data6 = r6; + } + } + if (sprite->data6 < 112) + sprite->data6 += 4; + } + foo = 256 - gSineTable[(u8)sprite->data6] / 2; + SetOamMatrix(17, foo, 0, 0, foo); + } +} + +static void InitIntroMudkipAttackAnim(u8 a) +{ + u8 spriteId; + + spriteId = CreateSprite(&gSpriteTemplate_840B1C8, 0, 0, 0); + if (spriteId != 64) + { + gSprites[spriteId].data0 = a; + gSprites[spriteId].data1 = 0; + gSprites[spriteId].data2 = 12; + gSprites[spriteId].data3 = 24; + } +} + +static void sub_813EDFC(struct Sprite *sprite) +{ + u16 foo; + + //I'm not sure why a switch statement was used here. + //if (sprite->data0 != 1) would have been more appropriate. + switch (sprite->data0) + { + case 0: + default: + sprite->invisible = FALSE; + sprite->oam.affineMode = 3; + sprite->oam.matrixNum = 18; + CalcCenterToCornerVec(sprite, 0, 3, 3); + sprite->data1 = 0; + sprite->data0 = 1; + //fall through + case 1: + break; + } + sprite->data7++; + if (sprite->data7 & 1) + { + sprite->invisible = TRUE; + } + else + { + sprite->invisible = FALSE; + if (sprite->data1 < 64) + sprite->data1++; + } + foo = 256 - gSineTable[(u8)sprite->data1] / 2; + SetOamMatrix(18, foo, 0, 0, foo); +} diff --git a/src/scene/new_game.c b/src/scene/new_game.c new file mode 100644 index 000000000..226ac9bb7 --- /dev/null +++ b/src/scene/new_game.c @@ -0,0 +1,166 @@ +#include "global.h" +#include "new_game.h" +#include "battle_records.h" +#include "berry.h" +#include "contest.h" +#include "decoration_inventory.h" +#include "dewford_trend.h" +#include "easy_chat.h" +#include "event_data.h" +#include "field_specials.h" +#include "item_menu.h" +#include "lottery_corner.h" +#include "mail_data.h" +#include "mauville_old_man.h" +#include "play_time.h" +#include "player_pc.h" +#include "pokeblock.h" +#include "pokedex.h" +#include "pokemon_size_record.h" +#include "pokemon_storage_system.h" +#include "rng.h" +#include "roamer.h" +#include "rom4.h" +#include "rtc.h" +#include "script.h" +#include "secret_base.h" +#include "tv.h" + +EWRAM_DATA u8 gDifferentSaveFile = 0; +EWRAM_DATA u8 gUnknown_020297ED = 0; + +extern u8 gPlayerPartyCount; +extern u8 gUnknown_03005CE8; +extern u16 gSaveFileStatus; + +extern u8 gUnknown_0819FA81[]; + +const struct SB1_2EFC_Struct gUnknown_08216604 = +{ + 0x0000, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } +}; + +void write_word_to_mem(u32 var, u8 *dataPtr) +{ + dataPtr[0] = var; + dataPtr[1] = var >> 8; + dataPtr[2] = var >> 16; + dataPtr[3] = var >> 24; +} + +void copy_word_to_mem(u8 *copyTo, u8 *copyFrom) +{ + s32 i; + for (i = 0; i < 4; i++) + copyTo[i] = copyFrom[i]; +} + +void InitPlayerTrainerId(void) +{ + write_word_to_mem((Random() << 16) | Random(), gSaveBlock2.playerTrainerId); +} + +// L=A isnt set here for some reason. +void SetDefaultOptions(void) +{ + gSaveBlock2.optionsTextSpeed = OPTIONS_TEXT_SPEED_MID; + gSaveBlock2.optionsWindowFrameType = 0; + gSaveBlock2.optionsSound = OPTIONS_SOUND_MONO; + gSaveBlock2.optionsBattleStyle = OPTIONS_BATTLE_STYLE_SHIFT; + gSaveBlock2.optionsBattleSceneOff = FALSE; + gSaveBlock2.regionMapZoom = FALSE; +} + +void ClearPokedexFlags(void) +{ + gUnknown_03005CE8 = 0; + memset(&gSaveBlock2.pokedex.owned, 0, sizeof(gSaveBlock2.pokedex.owned)); + memset(&gSaveBlock2.pokedex.seen, 0, sizeof(gSaveBlock2.pokedex.seen)); +} + +void sub_8052DA8(void) +{ + s32 i; + + sub_80B2D1C(); + for (i = 0; i < 5; i++) + gSaveBlock1.sbStruct.unkSB1.sb1_2EFC_struct[i] = gUnknown_08216604; +} + +void sub_8052DE4(void) +{ + CpuFill32(0, &gSaveBlock2.filler_A8, sizeof(gSaveBlock2.filler_A8)); +} + +void WarpToTruck(void) +{ + warp1_set(25, 40, -1, -1, -1); // inside of truck + warp_in(); +} + +void ClearSav2(void) +{ + CpuFill16(0, &gSaveBlock2, sizeof(gSaveBlock2)); + SetDefaultOptions(); +} + +void sub_8052E4C(void) +{ + gDifferentSaveFile = 0; + sub_808C0A0(); + ZeroPlayerPartyMons(); + ZeroEnemyPartyMons(); + ResetBagScrollPositions(); +} + +void NewGameInitData(void) +{ + if (gSaveFileStatus == 0 || gSaveFileStatus == 2) + RtcReset(); + + gDifferentSaveFile = 1; + ZeroPlayerPartyMons(); + ZeroEnemyPartyMons(); + ResetPokedex(); + sub_8052DE4(); + memset(&gSaveBlock1, 0, sizeof(gSaveBlock1)); + ClearMailData(); + gSaveBlock2.specialSaveWarp = 0; + InitPlayerTrainerId(); + PlayTimeCounter_Reset(); + ClearPokedexFlags(); + InitEventData(); + ClearTVShowData(); + ResetGabbyAndTy(); + ResetSecretBases(); + ClearBerryTrees(); + gSaveBlock1.money = 3000; + ResetLinkContestBoolean(); + ResetGameStats(); + sub_8052DA8(); + InitLinkBattleRecords(); + InitShroomishSizeRecord(); + InitBarboachSizeRecord(); + gPlayerPartyCount = 0; + ZeroPlayerPartyMons(); + ResetPokemonStorageSystem(); + ClearRoamerData(); + ClearRoamerLocationData(); + gSaveBlock1.registeredItem = 0; + ClearBag(); + NewGameInitPCItems(); + ClearPokeblocks(); + ClearDecorationInventories(); + InitEasyChatPhrases(); + SetMauvilleOldMan(); + InitDewfordTrend(); + ResetFanClub(); + ResetLotteryCorner(); + WarpToTruck(); + ScriptContext2_RunNewScript(gUnknown_0819FA81); +} diff --git a/src/scene/title_screen.c b/src/scene/title_screen.c new file mode 100644 index 000000000..ab0f1d505 --- /dev/null +++ b/src/scene/title_screen.c @@ -0,0 +1,892 @@ +#include "global.h" +#include "gba/m4a_internal.h" +#include "title_screen.h" +#include "clear_save_data_menu.h" +#include "decompress.h" +#include "event_data.h" +#include "intro.h" +#include "m4a.h" +#include "main.h" +#include "main_menu.h" +#include "palette.h" +#include "reset_rtc_screen.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "unknown_task.h" + +#if ENGLISH +#define VERSION_BANNER_SHAPE 1 +#define VERSION_BANNER_RIGHT_TILEOFFSET 64 +#define VERSION_BANNER_BYTES 0x1000 +#define VERSION_BANNER_LEFT_X 98 +#define VERSION_BANNER_RIGHT_X 162 +#define VERSION_BANNER_Y 26 +#define VERSION_BANNER_Y_GOAL 66 +#define START_BANNER_X DISPLAY_WIDTH / 2 +#elif GERMAN +#define VERSION_BANNER_SHAPE 0 +#define VERSION_BANNER_RIGHT_TILEOFFSET 128 +#define VERSION_BANNER_BYTES 0x2000 +#define VERSION_BANNER_LEFT_X 108 +#define VERSION_BANNER_RIGHT_X 172 +#ifdef SAPPHIRE +#define VERSION_BANNER_Y_GOAL 83 +#else +#define VERSION_BANNER_Y_GOAL 84 +#endif +#define VERSION_BANNER_Y (VERSION_BANNER_Y_GOAL - 40) +#define START_BANNER_X DISPLAY_WIDTH / 2 - 2 +#endif + +extern u8 gReservedSpritePaletteCount; +extern struct MusicPlayerInfo gMPlay_BGM; +extern u16 gUnknown_030041B4; +extern u16 gUnknown_030042C0; +extern const u8 gUnknown_08E9D8CC[]; +extern const u16 gUnknown_08E9F624[]; +extern const u8 gUnknown_08E9F7E4[]; +extern const u8 gVersionTiles[]; +extern const u8 gTitleScreenPressStart_Gfx[]; +extern const u16 gTitleScreenLogoShinePalette[]; + +static EWRAM_DATA u8 gUnknown_0202F7E4 = 0; + +#ifdef SAPPHIRE +static const u16 sLegendaryMonPalettes[][16] = +{ + INCBIN_U16("graphics/title_screen/kyogre_dark.gbapal"), + INCBIN_U16("graphics/title_screen/kyogre_glow.gbapal"), +}; +static const u8 sLegendaryMonPixelData[] = INCBIN_U8("graphics/title_screen/kyogre.4bpp.lz"); +static const u8 sLegendaryMonTilemap[] = INCBIN_U8("graphics/title_screen/kyogre_map.bin.lz"); +static const u8 sBackdropTilemap[] = INCBIN_U8("graphics/title_screen/water_map.bin.lz"); +#else +static const u16 sLegendaryMonPalettes[][16] = +{ + INCBIN_U16("graphics/title_screen/groudon_dark.gbapal"), + INCBIN_U16("graphics/title_screen/groudon_glow.gbapal"), +}; +static const u8 sLegendaryMonPixelData[] = INCBIN_U8("graphics/title_screen/groudon.4bpp.lz"); +static const u8 sLegendaryMonTilemap[] = INCBIN_U8("graphics/title_screen/groudon_map.bin.lz"); +static const u8 sBackdropTilemap[] = INCBIN_U8("graphics/title_screen/lava_map.bin.lz"); +#endif +static const u8 sLogoShineTiles[] = INCBIN_U8("graphics/title_screen/logo_shine.4bpp.lz"); +const u16 gUnknown_08393E64[] = +{ + 0x10, + 0x110, + 0x210, + 0x310, + 0x410, + 0x510, + 0x610, + 0x710, + 0x810, + 0x910, + 0xA10, + 0xB10, + 0xC10, + 0xD10, + 0xE10, + 0xF10, + 0x100F, + 0x100E, + 0x100D, + 0x100C, + 0x100B, + 0x100A, + 0x1009, + 0x1008, + 0x1007, + 0x1006, + 0x1005, + 0x1004, + 0x1003, + 0x1002, + 0x1001, + 0x1000, +}; +static const struct OamData sVersionBannerLeftOamData = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = VERSION_BANNER_SHAPE, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; +static const struct OamData sVersionBannerRightOamData = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = VERSION_BANNER_SHAPE, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; +static const union AnimCmd sVersionBannerLeftAnimSequence[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END, +}; +static const union AnimCmd sVersionBannerRightAnimSequence[] = +{ + ANIMCMD_FRAME(VERSION_BANNER_RIGHT_TILEOFFSET, 30), + ANIMCMD_END, +}; +static const union AnimCmd *const sVersionBannerLeftAnimTable[] = +{ + sVersionBannerLeftAnimSequence, +}; +static const union AnimCmd *const sVersionBannerRightAnimTable[] = +{ + sVersionBannerRightAnimSequence, +}; +static const struct SpriteTemplate sVersionBannerLeftSpriteTemplate = +{ + .tileTag = 1000, + .paletteTag = 1000, + .oam = &sVersionBannerLeftOamData, + .anims = sVersionBannerLeftAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallback_VersionBannerLeft, +}; +static const struct SpriteTemplate sVersionBannerRightSpriteTemplate = +{ + .tileTag = 1000, + .paletteTag = 1000, + .oam = &sVersionBannerRightOamData, + .anims = sVersionBannerRightAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallback_VersionBannerRight, +}; +static const struct CompressedSpriteSheet gUnknown_08393EFC[] = +{ + {gVersionTiles, VERSION_BANNER_BYTES, 1000}, + {NULL}, +}; +static const struct OamData gOamData_8393F0C = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_8393F14[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_8393F1C[] = +{ + ANIMCMD_FRAME(4, 4), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_8393F24[] = +{ + ANIMCMD_FRAME(8, 4), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_8393F2C[] = +{ + ANIMCMD_FRAME(12, 4), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_8393F34[] = +{ + ANIMCMD_FRAME(16, 4), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_8393F3C[] = +{ + ANIMCMD_FRAME(20, 4), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_8393F44[] = +{ + ANIMCMD_FRAME(24, 4), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_8393F4C[] = +{ + ANIMCMD_FRAME(28, 4), + ANIMCMD_END, +}; +#if GERMAN +static const union AnimCmd gSpriteAnim_839F73C[] = +{ + ANIMCMD_FRAME(32, 4), + ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_839F744[] = +{ + ANIMCMD_FRAME(36, 4), + ANIMCMD_END, +}; +#endif +static const union AnimCmd *const sStartCopyrightBannerAnimTable[] = +{ + gSpriteAnim_8393F14, + gSpriteAnim_8393F1C, + gSpriteAnim_8393F24, + gSpriteAnim_8393F2C, + gSpriteAnim_8393F34, + gSpriteAnim_8393F3C, + gSpriteAnim_8393F44, + gSpriteAnim_8393F4C, +#if GERMAN + gSpriteAnim_839F73C, + gSpriteAnim_839F744, +#endif +}; +static const struct SpriteTemplate sStartCopyrightBannerSpriteTemplate = +{ + .tileTag = 1001, + .paletteTag = 1001, + .oam = &gOamData_8393F0C, + .anims = sStartCopyrightBannerAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallback_PressStartCopyrightBanner, +}; +static const struct CompressedSpriteSheet gUnknown_08393F8C[] = +{ + {gTitleScreenPressStart_Gfx, 0x520, 1001}, + {NULL}, +}; +const struct SpritePalette sPokemonLogoShinePalette[] = +{ + {gTitleScreenLogoShinePalette, 1001}, + {NULL}, +}; +static const struct OamData sPokemonLogoShineOamData = +{ + .y = 160, + .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 union AnimCmd sPokemonLogoShineAnimSequence[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_END, +}; +static const union AnimCmd *const sPokemonLogoShineAnimTable[] = +{ + sPokemonLogoShineAnimSequence, +}; +static const struct SpriteTemplate sPokemonLogoShineSpriteTemplate = +{ + .tileTag = 1002, + .paletteTag = 1001, + .oam = &sPokemonLogoShineOamData, + .anims = sPokemonLogoShineAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallback_PokemonLogoShine, +}; +static const struct CompressedSpriteSheet sPokemonLogoShineSpriteSheet[] = +{ + {sLogoShineTiles, 0x800, 1002}, + {NULL}, +}; + +#define _RGB(r, g, b) ((((b) & 31) << 10) + (((g) & 31) << 5) + ((r) & 31)) + +#ifdef SAPPHIRE +//Red Kyogre markings +#define LEGENDARY_MARKING_COLOR(c) RGB((c), 0, 0) +#else +//Blue Groundon markings +#define LEGENDARY_MARKING_COLOR(c) RGB(0, 0, (c)) +#endif + +#if defined(GERMAN) && defined(SAPPHIRE) +#define PLTT_BUFFER_INDEX 9 +#elif defined(SAPPHIRE) +#define PLTT_BUFFER_INDEX 26 +#else +#define PLTT_BUFFER_INDEX 21 +#endif + +#define CLEAR_SAVE_BUTTON_COMBO (B_BUTTON | SELECT_BUTTON | DPAD_UP) +#define RESET_RTC_BUTTON_COMBO (B_BUTTON | SELECT_BUTTON | DPAD_LEFT) +#define A_B_START_SELECT (A_BUTTON | B_BUTTON | START_BUTTON | SELECT_BUTTON) + +static void MainCB2(void); +static void Task_TitleScreenPhase1(u8); +static void Task_TitleScreenPhase2(u8); +static void Task_TitleScreenPhase3(u8); +static void CB2_GoToMainMenu(void); +static void CB2_GoToClearSaveDataScreen(void); +static void CB2_GoToResetRtcScreen(void); +static void CB2_GoToCopyrightScreen(void); +static void UpdateLegendaryMarkingColor(u8); + +void SpriteCallback_VersionBannerLeft(struct Sprite *sprite) +{ + struct Task *task = &gTasks[sprite->data1]; + + if (task->data[1] != 0) + { + sprite->oam.objMode = 0; + sprite->pos1.y = VERSION_BANNER_Y_GOAL; + sprite->invisible = FALSE; + } + else + { + if (task->data[5] != 0) + task->data[5]--; + if (task->data[5] < 64) + { + sprite->invisible = FALSE; + if (sprite->pos1.y != VERSION_BANNER_Y_GOAL) + sprite->pos1.y++; + REG_BLDALPHA = gUnknown_08393E64[task->data[5] / 2]; + } + } +} + +void SpriteCallback_VersionBannerRight(struct Sprite *sprite) +{ + struct Task *task = &gTasks[sprite->data1]; + + if (task->data[1] != 0) + { + sprite->oam.objMode = 0; + sprite->pos1.y = VERSION_BANNER_Y_GOAL; + sprite->invisible = FALSE; + } + else + { + if (task->data[5] < 64) + { + sprite->invisible = FALSE; + if (sprite->pos1.y != VERSION_BANNER_Y_GOAL) + sprite->pos1.y++; + } + } +} + +void SpriteCallback_PressStartCopyrightBanner(struct Sprite *sprite) +{ + if (sprite->data0 == 1) + { + sprite->data1++; + //Alternate between hidden and shown every 16th frame + if (sprite->data1 & 16) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + } + else + sprite->invisible = FALSE; +} + +#if ENGLISH +static void CreatePressStartBanner(s16 x, s16 y) +{ + u8 i; + u8 spriteId; + + x -= 32; + for (i = 0; i < 3; i++, x += 32) + { + spriteId = CreateSprite(&sStartCopyrightBannerSpriteTemplate, x, y, 0); + StartSpriteAnim(&gSprites[spriteId], i); + gSprites[spriteId].data0 = 1; + } +} +#elif GERMAN +__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\ +_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\ +_0807C3AC: .4byte 0xffe00000\n\ +_0807C3B0: .4byte sStartCopyrightBannerSpriteTemplate\n\ +_0807C3B4: .4byte gSprites\n\ + .syntax divided\n"); +} +#endif + +static void CreateCopyrightBanner(s16 x, s16 y) +{ + u8 i; + u8 spriteId; + + x -= 64; + for (i = 0; i < 5; i++, x += 32) + { + spriteId = CreateSprite(&sStartCopyrightBannerSpriteTemplate, x, y, 0); + StartSpriteAnim(&gSprites[spriteId], i + 3); + } +} + +void SpriteCallback_PokemonLogoShine(struct Sprite *sprite) +{ + if (gTasks[gUnknown_0202F7E4].data[1] == 0 && sprite->pos1.x < 272) + { + if (sprite->data0) //Flash background + { + u16 backgroundColor; + + if (sprite->pos1.x < DISPLAY_WIDTH / 2) + { + //Brighten background color + if (sprite->data1 < 31) + sprite->data1++; + if (sprite->data1 < 31) + sprite->data1++; + } + else + { + //Darken background color + if (sprite->data1 != 0) + sprite->data1--; + if (sprite->data1 != 0) + sprite->data1--; + } + backgroundColor = _RGB(sprite->data1, sprite->data1, sprite->data1); + gPlttBufferFaded[0] = backgroundColor; + gPlttBufferFaded[PLTT_BUFFER_INDEX] = backgroundColor; + } + sprite->pos1.x += 4; + } + else + { + gPlttBufferFaded[0] = RGB_BLACK; + gPlttBufferFaded[PLTT_BUFFER_INDEX] = RGB_BLACK; + DestroySprite(sprite); + } +} + +static void StartPokemonLogoShine(bool8 flashBackground) +{ + u8 spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, 0, 68, 0); + + gSprites[spriteId].oam.objMode = 2; + gSprites[spriteId].data0 = flashBackground; +} + +static void VBlankCB(void) +{ + sub_8089668(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + REG_BG1VOFS = gUnknown_030041B4; +} + + +#define tCounter data[0] +#define tSkipToNext data[1] + +void CB2_InitTitleScreen(void) +{ + switch (gMain.state) + { + default: + case 0: + SetVBlankCallback(NULL); + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + *((u16 *)PLTT) = RGB_WHITE; + REG_DISPCNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + DmaFill16(3, 0, (void *)VRAM, 0x18000); + DmaFill32(3, 0, (void *)OAM, 0x400); + DmaFill16(3, 0, (void *)(PLTT + 2), 0x3FE); + ResetPaletteFade(); + gMain.state = 1; + break; + case 1: + LZ77UnCompVram(gUnknown_08E9D8CC, (void *)VRAM); + LZ77UnCompVram(gUnknown_08E9F7E4, (void *)(VRAM + 0x4800)); + LoadPalette(gUnknown_08E9F624, 0, 0x1C0); + LZ77UnCompVram(sLegendaryMonPixelData, (void *)(VRAM + 0x8000)); + LZ77UnCompVram(sLegendaryMonTilemap, (void *)(VRAM + 0xC000)); + LZ77UnCompVram(sBackdropTilemap, (void *)(VRAM + 0xC800)); + LoadPalette(sLegendaryMonPalettes, 0xE0, sizeof(sLegendaryMonPalettes)); + remove_some_task(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 14; + LoadCompressedObjectPic(&gUnknown_08393EFC[0]); + LoadCompressedObjectPic(&gUnknown_08393F8C[0]); + LoadCompressedObjectPic(&sPokemonLogoShineSpriteSheet[0]); + LoadPalette(gUnknown_08E9F624, 0x100, 0x1C0); + LoadSpritePalette(&sPokemonLogoShinePalette[0]); + gMain.state = 2; + break; + case 2: + { + u8 taskId = CreateTask(Task_TitleScreenPhase1, 0); + + gTasks[taskId].tCounter = 256; + gTasks[taskId].tSkipToNext = FALSE; + gTasks[taskId].data[2] = -16; + gTasks[taskId].data[3] = -32; + gUnknown_0202F7E4 = taskId; + gMain.state = 3; + break; + } + case 3: + BeginNormalPaletteFade(-1, 1, 0x10, 0, 0xFFFF); + SetVBlankCallback(VBlankCB); + gMain.state = 4; + break; + case 4: + { + u16 savedIme; + + sub_813CE30(0x78, 0x50, 0x100, 0); + REG_BG2X = -29 * 256; + REG_BG2Y = -33 * 256; + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WIN1H = 0; + REG_WIN1V = 0; + REG_WININ = 0x1F1F; + REG_WINOUT = 0x3F1F; + REG_BLDCNT = 0x84; + REG_BLDALPHA = 0; + REG_BLDY = 0x8; + REG_BG0CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(24) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(25) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG2CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(9) | BGCNT_256COLOR | BGCNT_AFF256x256; + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + REG_DISPCNT = DISPCNT_MODE_1 + | DISPCNT_OBJ_1D_MAP + | DISPCNT_BG2_ON + | DISPCNT_OBJ_ON + | DISPCNT_WIN0_ON + | DISPCNT_OBJWIN_ON; + m4aSongNumStart(0x19D); + gMain.state = 5; + break; + } + case 5: + if (!UpdatePaletteFade()) + { + StartPokemonLogoShine(FALSE); + sub_8089944(0, 0xA0, 4, 4, 0, 4, 1); + SetMainCallback2(MainCB2); + } + break; + } +} + +static void MainCB2(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +//Shine the Pokemon logo two more times, and fade in the version banner +static void Task_TitleScreenPhase1(u8 taskId) +{ + //Skip to next phase when A, B, Start, or Select is pressed + if ((gMain.newKeys & A_B_START_SELECT) || gTasks[taskId].data[1] != 0) + { + gTasks[taskId].tSkipToNext = TRUE; + gTasks[taskId].tCounter = 0; + } + + if (gTasks[taskId].tCounter != 0) + { + u16 frameNum = gTasks[taskId].tCounter; + + if (frameNum == 160 || frameNum == 64) + StartPokemonLogoShine(TRUE); + gTasks[taskId].tCounter--; + } + else + { + u8 spriteId; + + REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + REG_WININ = 0; + REG_WINOUT = 0; + REG_BLDCNT = 0x3F50; + REG_BLDALPHA = 0x1F; + REG_BLDY = 0; + + //Create left side of version banner + spriteId = CreateSprite(&sVersionBannerLeftSpriteTemplate, VERSION_BANNER_LEFT_X, VERSION_BANNER_Y, 0); + gSprites[spriteId].invisible = TRUE; + gSprites[spriteId].data1 = taskId; + + //Create right side of version banner + spriteId = CreateSprite(&sVersionBannerRightSpriteTemplate, VERSION_BANNER_RIGHT_X, VERSION_BANNER_Y, 0); + gSprites[spriteId].invisible = TRUE; + gSprites[spriteId].data1 = taskId; + + gTasks[taskId].data[5] = 88; + gTasks[taskId].tCounter = 144; + gTasks[taskId].func = Task_TitleScreenPhase2; + } +} + +//Create "Press Start" and copyright banners, and slide Pokemon logo up +static void Task_TitleScreenPhase2(u8 taskId) +{ + //Skip to next phase when A, B, Start, or Select is pressed + if ((gMain.newKeys & A_B_START_SELECT) || gTasks[taskId].tSkipToNext) + { + gTasks[taskId].tSkipToNext = TRUE; + gTasks[taskId].tCounter = 0; + } + + if (gTasks[taskId].tCounter != 0) + gTasks[taskId].tCounter--; + else + { + gTasks[taskId].tSkipToNext = TRUE; + REG_DISPCNT = DISPCNT_MODE_1 + | DISPCNT_OBJ_1D_MAP + | DISPCNT_BG0_ON + | DISPCNT_BG1_ON + | DISPCNT_BG2_ON + | DISPCNT_OBJ_ON; + CreatePressStartBanner(START_BANNER_X, 108); + CreateCopyrightBanner(DISPLAY_WIDTH / 2, 148); + gTasks[taskId].data[4] = 0; + gTasks[taskId].func = Task_TitleScreenPhase3; + } + + if (!(gTasks[taskId].tCounter & 1) && gTasks[taskId].data[3] != 0) + gTasks[taskId].data[3]++; + + //Slide Pokemon logo up + REG_BG2Y = gTasks[taskId].data[3] * 256; +} + +//Show Kyogre/Groundon silhouette and process main title screen input +static void Task_TitleScreenPhase3(u8 taskId) +{ + REG_BLDCNT = 0x2142; + REG_BLDALPHA = 0x1F0F; + REG_BLDY = 0; + + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & START_BUTTON)) + { + FadeOutBGM(4); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0xFFFF); + SetMainCallback2(CB2_GoToMainMenu); + } + else + { + if ((gMain.heldKeys & CLEAR_SAVE_BUTTON_COMBO) == CLEAR_SAVE_BUTTON_COMBO) + SetMainCallback2(CB2_GoToClearSaveDataScreen); + if ((gMain.heldKeys & RESET_RTC_BUTTON_COMBO) == RESET_RTC_BUTTON_COMBO + && CanResetRTC() == 1) + { + FadeOutBGM(4); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + SetMainCallback2(CB2_GoToResetRtcScreen); + } + else + { + REG_BG2Y = 0; + gTasks[taskId].tCounter++; + if (gTasks[taskId].tCounter & 1) + { + gTasks[taskId].data[4]++; + gUnknown_030041B4 = gTasks[taskId].data[4]; + gUnknown_030042C0 = 0; + } + UpdateLegendaryMarkingColor(gTasks[taskId].tCounter); + if ((gMPlay_BGM.status & 0xFFFF) == 0) + { + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0xFFFF); + SetMainCallback2(CB2_GoToCopyrightScreen); + } + } + } +} + +static void CB2_GoToMainMenu(void) +{ + if (!UpdatePaletteFade()) + SetMainCallback2(CB2_InitMainMenu); +} + +static void CB2_GoToCopyrightScreen(void) +{ + if (!UpdatePaletteFade()) + SetMainCallback2(CB2_InitCopyrightScreenAfterTitleScreen); +} + +static void CB2_GoToClearSaveDataScreen(void) +{ + if (!UpdatePaletteFade()) + SetMainCallback2(CB2_InitClearSaveDataScreen); +} + +static void CB2_GoToResetRtcScreen(void) +{ + if (!UpdatePaletteFade()) + SetMainCallback2(CB2_InitResetRtcScreen); +} + +static void UpdateLegendaryMarkingColor(u8 frameNum) +{ + u16 palette; + + if ((frameNum % 4) == 0) //Change color every 4th frame + { + u8 colorIntensity = (frameNum >> 2) & 31; //Take bits 2-6 of frameNum the color intensity + u8 fadeDarker = (frameNum >> 2) & 32; + + if (!fadeDarker) + palette = LEGENDARY_MARKING_COLOR(colorIntensity); + else + palette = LEGENDARY_MARKING_COLOR(31 - colorIntensity); + LoadPalette(&palette, 0xEF, sizeof(palette)); + } +} + diff --git a/src/scrcmd.c b/src/scrcmd.c deleted file mode 100644 index 66578f350..000000000 --- a/src/scrcmd.c +++ /dev/null @@ -1,1887 +0,0 @@ -#include "global.h" -#include "battle_setup.h" -#include "berry.h" -#include "clock.h" -#include "coins.h" -#include "contest_link_80C2020.h" -#include "contest_painting.h" -#include "data2.h" -#include "decoration.h" -#include "decoration_inventory.h" -#include "event_data.h" -#include "field_door.h" -#include "field_effect.h" -#include "field_fadetransition.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_specials.h" -#include "field_tasks.h" -#include "field_weather.h" -#include "fieldmap.h" -#include "item.h" -#include "main.h" -#include "map_obj_lock.h" -#include "menu.h" -#include "money.h" -#include "mystery_event_script.h" -#include "palette.h" -#include "party_menu.h" -#include "pokemon.h" -#include "rng.h" -#include "rom4.h" -#include "rtc.h" -#include "script.h" -#include "script_menu.h" -#include "script_movement.h" -#include "script_pokemon_80C4.h" -#include "script_pokemon_80F9.h" -#include "shop.h" -#include "slot_machine.h" -#include "sound.h" -#include "string_util.h" -#include "tv.h" - -typedef u16 (*SpecialFunc)(void); -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; - -extern u16 gSpecialVar_0x8000; -extern u16 gSpecialVar_0x8001; -extern u16 gSpecialVar_0x8002; -extern u16 gSpecialVar_0x8004; - -extern u16 gScriptResult; - -extern u16 gScriptContestCategory; - -extern SpecialFunc gSpecials[]; -extern u8 *gStdScripts[]; -extern u8 *gStdScripts_End[]; - -// This is defined in here so the optimizer can't see its value when compiling -// script.c. -void * const gNullScriptPtr = NULL; - -static const u8 sScriptConditionTable[6][3] = -{ -// < = > - 1, 0, 0, // < - 0, 1, 0, // = - 0, 0, 1, // > - 1, 1, 0, // <= - 0, 1, 1, // >= - 1, 0, 1, // != -}; - -static u8 * const sScriptStringVars[] = -{ - gStringVar1, - gStringVar2, - gStringVar3, -}; - -bool8 ScrCmd_snop(struct ScriptContext *ctx) -{ - return FALSE; -} - -bool8 ScrCmd_snop1(struct ScriptContext *ctx) -{ - return FALSE; -} - -bool8 ScrCmd_end(struct ScriptContext *ctx) -{ - StopScript(ctx); - return FALSE; -} - -bool8 ScrCmd_jumpasm(struct ScriptContext *ctx) -{ - u32 addr = ScriptReadWord(ctx); - SetupNativeScript(ctx, (void *)addr); - return TRUE; -} - -bool8 ScrCmd_special(struct ScriptContext *ctx) -{ - u16 index = ScriptReadHalfword(ctx); - gSpecials[index](); - return FALSE; -} - -bool8 ScrCmd_specialval(struct ScriptContext *ctx) -{ - u16 *var = GetVarPointer(ScriptReadHalfword(ctx)); - *var = gSpecials[ScriptReadHalfword(ctx)](); - return FALSE; -} - -bool8 ScrCmd_callasm(struct ScriptContext *ctx) -{ - NativeFunc func = (NativeFunc)ScriptReadWord(ctx); - func(); - return FALSE; -} - -bool8 ScrCmd_waitstate(struct ScriptContext *ctx) -{ - ScriptContext1_Stop(); - return TRUE; -} - -bool8 ScrCmd_jump(struct ScriptContext *ctx) -{ - u8 *ptr = (u8 *)ScriptReadWord(ctx); - ScriptJump(ctx, ptr); - return FALSE; -} - -bool8 ScrCmd_return(struct ScriptContext *ctx) -{ - ScriptReturn(ctx); - return FALSE; -} - -bool8 ScrCmd_call(struct ScriptContext *ctx) -{ - - u8 *ptr = (u8 *)ScriptReadWord(ctx); - ScriptCall(ctx, ptr); - return FALSE; -} - -bool8 ScrCmd_jumpif(struct ScriptContext *ctx) -{ - u8 condition = ScriptReadByte(ctx); - u8 *ptr = (u8 *)ScriptReadWord(ctx); - if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) - ScriptJump(ctx, ptr); - return FALSE; -} - -bool8 ScrCmd_callif(struct ScriptContext *ctx) -{ - u8 condition = ScriptReadByte(ctx); - u8 *ptr = (u8 *)ScriptReadWord(ctx); - if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) - ScriptCall(ctx, ptr); - return FALSE; -} - -bool8 ScrCmd_setvaddress(struct ScriptContext *ctx) -{ - u32 addr1 = (u32)ctx->scriptPtr - 1; - u32 addr2 = ScriptReadWord(ctx); - gUnknown_0202E8B0 = addr2 - addr1; - return FALSE; -} - -bool8 ScrCmd_vjump(struct ScriptContext *ctx) -{ - u32 addr = ScriptReadWord(ctx); - ScriptJump(ctx, (u8 *)(addr - gUnknown_0202E8B0)); - return FALSE; -} - -bool8 ScrCmd_vcall(struct ScriptContext *ctx) -{ - u32 addr = ScriptReadWord(ctx); - ScriptCall(ctx, (u8 *)(addr - gUnknown_0202E8B0)); - return FALSE; -} - -bool8 ScrCmd_if5(struct ScriptContext *ctx) -{ - u8 condition = ScriptReadByte(ctx); - u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0); - if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) - ScriptJump(ctx, ptr); - return FALSE; -} - -bool8 ScrCmd_if6(struct ScriptContext *ctx) -{ - u8 condition = ScriptReadByte(ctx); - u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0); - if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) - ScriptCall(ctx, ptr); - return FALSE; -} - -bool8 ScrCmd_jumpstd(struct ScriptContext *ctx) -{ - u8 index = ScriptReadByte(ctx); - u8 **ptr = &gStdScripts[index]; - if (ptr < gStdScripts_End) - ScriptJump(ctx, *ptr); - return FALSE; -} - -bool8 ScrCmd_callstd(struct ScriptContext *ctx) -{ - u8 index = ScriptReadByte(ctx); - u8 **ptr = &gStdScripts[index]; - if (ptr < gStdScripts_End) - ScriptCall(ctx, *ptr); - return FALSE; -} - -bool8 ScrCmd_jumpstdif(struct ScriptContext *ctx) -{ - u8 condition = ScriptReadByte(ctx); - u8 index = ScriptReadByte(ctx); - if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) - { - u8 **ptr = &gStdScripts[index]; - if (ptr < gStdScripts_End) - ScriptJump(ctx, *ptr); - } - return FALSE; -} - -bool8 ScrCmd_callstdif(struct ScriptContext *ctx) -{ - u8 condition = ScriptReadByte(ctx); - u8 index = ScriptReadByte(ctx); - if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) - { - u8 **ptr = &gStdScripts[index]; - if (ptr < gStdScripts_End) - ScriptCall(ctx, *ptr); - } - return FALSE; -} - -bool8 ScrCmd_jumpram(struct ScriptContext *ctx) -{ - ScriptJump(ctx, (u8 *)gUnknown_0202E8AC); - return FALSE; -} - -bool8 ScrCmd_die(struct ScriptContext *ctx) -{ - ClearRamScript(); - StopScript(ctx); - return TRUE; -} - -bool8 ScrCmd_setbyte(struct ScriptContext *ctx) -{ - u8 value = ScriptReadByte(ctx); - SetMysteryEventScriptStatus(value); - return FALSE; -} - -bool8 ScrCmd_loadptr(struct ScriptContext *ctx) -{ - u8 index = ScriptReadByte(ctx); - ctx->data[index] = ScriptReadWord(ctx); - return FALSE; -} - -bool8 ScrCmd_loadbytefrompointer(struct ScriptContext *ctx) -{ - u8 index = ScriptReadByte(ctx); - ctx->data[index] = *(u8 *)ScriptReadWord(ctx); - return FALSE; -} - -bool8 ScrCmd_writebytetooffset(struct ScriptContext *ctx) -{ - u8 value = ScriptReadByte(ctx); - *(u8 *)ScriptReadWord(ctx) = value; - return FALSE; -} - -bool8 ScrCmd_setbufferbyte(struct ScriptContext *ctx) -{ - u8 index = ScriptReadByte(ctx); - ctx->data[index] = ScriptReadByte(ctx); - return FALSE; -} - -bool8 ScrCmd_setptrbyte(struct ScriptContext *ctx) -{ - u8 index = ScriptReadByte(ctx); - *(u8 *)ScriptReadWord(ctx) = ctx->data[index]; - return FALSE; -} - -bool8 ScrCmd_copybuffers(struct ScriptContext *ctx) -{ - u8 destIndex = ScriptReadByte(ctx); - u8 srcIndex = ScriptReadByte(ctx); - ctx->data[destIndex] = ctx->data[srcIndex]; - return FALSE; -} - -bool8 ScrCmd_copybyte(struct ScriptContext *ctx) -{ - u8 *ptr = (u8 *)ScriptReadWord(ctx); - *ptr = *(u8 *)ScriptReadWord(ctx); - return FALSE; -} - -bool8 ScrCmd_setvar(struct ScriptContext *ctx) -{ - u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx)); - *ptr = ScriptReadHalfword(ctx); - return FALSE; -} - -bool8 ScrCmd_copyvar(struct ScriptContext *ctx) -{ - u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx)); - *ptr = *GetVarPointer(ScriptReadHalfword(ctx)); - return FALSE; -} - -bool8 ScrCmd_setorcopyvar(struct ScriptContext *ctx) -{ - u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx)); - *ptr = VarGet(ScriptReadHalfword(ctx)); - return FALSE; -} - -u8 compare_012(u16 a1, u16 a2) -{ - if (a1 < a2) - return 0; - - if (a1 == a2) - return 1; - - return 2; -} - -bool8 ScrCmd_comparebuffers(struct ScriptContext *ctx) -{ - u8 value1 = ctx->data[ScriptReadByte(ctx)]; - u8 value2 = ctx->data[ScriptReadByte(ctx)]; - ctx->comparisonResult = compare_012(value1, value2); - return FALSE; -} - -bool8 ScrCmd_comparebuffertobyte(struct ScriptContext *ctx) -{ - u8 value1 = ctx->data[ScriptReadByte(ctx)]; - u8 value2 = ScriptReadByte(ctx); - ctx->comparisonResult = compare_012(value1, value2); - return FALSE; -} - -bool8 ScrCmd_comparebuffertoptrbyte(struct ScriptContext *ctx) -{ - u8 value1 = ctx->data[ScriptReadByte(ctx)]; - u8 value2 = *(u8 *)ScriptReadWord(ctx); - ctx->comparisonResult = compare_012(value1, value2); - return FALSE; -} - -bool8 ScrCmd_compareptrbytetobuffer(struct ScriptContext *ctx) -{ - u8 value1 = *(u8 *)ScriptReadWord(ctx); - u8 value2 = ctx->data[ScriptReadByte(ctx)]; - ctx->comparisonResult = compare_012(value1, value2); - return FALSE; -} - -bool8 ScrCmd_compareptrbytetobyte(struct ScriptContext *ctx) -{ - u8 value1 = *(u8 *)ScriptReadWord(ctx); - u8 value2 = ScriptReadByte(ctx); - ctx->comparisonResult = compare_012(value1, value2); - return FALSE; -} - -bool8 ScrCmd_compareptrbytes(struct ScriptContext *ctx) -{ - u8 value1 = *(u8 *)ScriptReadWord(ctx); - u8 value2 = *(u8 *)ScriptReadWord(ctx); - ctx->comparisonResult = compare_012(value1, value2); - return FALSE; -} - -bool8 ScrCmd_compare(struct ScriptContext *ctx) -{ - u16 value1 = *GetVarPointer(ScriptReadHalfword(ctx)); - u16 value2 = ScriptReadHalfword(ctx); - ctx->comparisonResult = compare_012(value1, value2); - return FALSE; -} - -bool8 ScrCmd_comparevars(struct ScriptContext *ctx) -{ - u16 *ptr1 = GetVarPointer(ScriptReadHalfword(ctx)); - u16 *ptr2 = GetVarPointer(ScriptReadHalfword(ctx)); - ctx->comparisonResult = compare_012(*ptr1, *ptr2); - return FALSE; -} - -bool8 ScrCmd_addvar(struct ScriptContext *ctx) -{ - u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx)); - *ptr += ScriptReadHalfword(ctx); - return FALSE; -} - -bool8 ScrCmd_subvar(struct ScriptContext *ctx) -{ - u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx)); - *ptr -= VarGet(ScriptReadHalfword(ctx)); - return FALSE; -} - -bool8 ScrCmd_random(struct ScriptContext *ctx) -{ - u16 max = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = Random() % max; - return FALSE; -} - -bool8 ScrCmd_additem(struct ScriptContext *ctx) -{ - u16 itemId = VarGet(ScriptReadHalfword(ctx)); - u32 quantity = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = AddBagItem(itemId, (u8)quantity); - return FALSE; -} - -bool8 ScrCmd_removeitem(struct ScriptContext *ctx) -{ - u16 itemId = VarGet(ScriptReadHalfword(ctx)); - u32 quantity = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = RemoveBagItem(itemId, (u8)quantity); - return FALSE; -} - -bool8 ScrCmd_checkitemspace(struct ScriptContext *ctx) -{ - u16 itemId = VarGet(ScriptReadHalfword(ctx)); - u32 quantity = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = CheckBagHasSpace(itemId, (u8)quantity); - return FALSE; -} - -bool8 ScrCmd_checkitem(struct ScriptContext *ctx) -{ - u16 itemId = VarGet(ScriptReadHalfword(ctx)); - u32 quantity = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = CheckBagHasItem(itemId, (u8)quantity); - return FALSE; -} - -bool8 ScrCmd_checkitemtype(struct ScriptContext *ctx) -{ - u16 itemId = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = GetPocketByItemId(itemId); - return FALSE; -} - -bool8 ScrCmd_addpcitem(struct ScriptContext *ctx) -{ - u16 itemId = VarGet(ScriptReadHalfword(ctx)); - u16 quantity = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = AddPCItem(itemId, quantity); - return FALSE; -} - -bool8 ScrCmd_checkpcitem(struct ScriptContext *ctx) -{ - u16 itemId = VarGet(ScriptReadHalfword(ctx)); - u16 quantity = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = CheckPCHasItem(itemId, quantity); - return FALSE; -} - -bool8 ScrCmd_adddecor(struct ScriptContext *ctx) -{ - u32 decorId = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = IsThereStorageSpaceForDecoration(decorId); - return FALSE; -} - -bool8 ScrCmd_removedecor(struct ScriptContext *ctx) -{ - u32 decorId = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = sub_81340A8(decorId); - return FALSE; -} - -bool8 ScrCmd_checkdecor(struct ScriptContext *ctx) -{ - u32 decorId = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = sub_8134074(decorId); - return FALSE; -} - -bool8 ScrCmd_testdecor(struct ScriptContext *ctx) -{ - u32 decorId = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = sub_8133FE4(decorId); - return FALSE; -} - -bool8 ScrCmd_setflag(struct ScriptContext *ctx) -{ - FlagSet(ScriptReadHalfword(ctx)); - return FALSE; -} - -bool8 ScrCmd_clearflag(struct ScriptContext *ctx) -{ - FlagReset(ScriptReadHalfword(ctx)); - return FALSE; -} - -bool8 ScrCmd_checkflag(struct ScriptContext *ctx) -{ - ctx->comparisonResult = FlagGet(ScriptReadHalfword(ctx)); - return FALSE; -} - -bool8 ScrCmd_inccounter(struct ScriptContext *ctx) -{ - IncrementGameStat(ScriptReadByte(ctx)); - return FALSE; -} - -bool8 ScrCmd_lighten(struct ScriptContext *ctx) -{ - sub_8081594(ScriptReadByte(ctx)); - ScriptContext1_Stop(); - return TRUE; -} - -bool8 ScrCmd_darken(struct ScriptContext *ctx) -{ - u16 value = VarGet(ScriptReadHalfword(ctx)); - sub_8053CE4(value); - return FALSE; -} - -bool8 IsPaletteNotActive(void) -{ - if (!gPaletteFade.active) - return TRUE; - else - return FALSE; -} - -bool8 ScrCmd_fadescreen(struct ScriptContext *ctx) -{ - fade_screen(ScriptReadByte(ctx), 0); - SetupNativeScript(ctx, IsPaletteNotActive); - return TRUE; -} - -bool8 ScrCmd_fadescreendelay(struct ScriptContext *ctx) -{ - u8 duration = ScriptReadByte(ctx); - u8 delay = ScriptReadByte(ctx); - fade_screen(duration, delay); - SetupNativeScript(ctx, IsPaletteNotActive); - return TRUE; -} - -bool8 s28_pause_asm() -{ - gUnknown_0202E8B4--; - - if (gUnknown_0202E8B4 == 0) - return TRUE; - else - return FALSE; -} - -bool8 ScrCmd_pause(struct ScriptContext *ctx) -{ - gUnknown_0202E8B4 = ScriptReadHalfword(ctx); - SetupNativeScript(ctx, s28_pause_asm); - return TRUE; -} - -bool8 ScrCmd_compareflags(struct ScriptContext *ctx) -{ - u8 hour = VarGet(ScriptReadHalfword(ctx)); - u8 minute = VarGet(ScriptReadHalfword(ctx)); - RtcInitLocalTimeOffset(hour, minute); - return FALSE; -} - -bool8 ScrCmd_checkdailyflags(struct ScriptContext *ctx) -{ - DoTimeBasedEvents(); - return FALSE; -} - -bool8 ScrCmd_resetvars(struct ScriptContext *ctx) -{ - RtcCalcLocalTime(); - gSpecialVar_0x8000 = gLocalTime.hours; - gSpecialVar_0x8001 = gLocalTime.minutes; - gSpecialVar_0x8002 = gLocalTime.seconds; - return FALSE; -} - -bool8 ScrCmd_setweather(struct ScriptContext *ctx) -{ - u16 value = VarGet(ScriptReadHalfword(ctx)); - SetSav1Weather(value); - return FALSE; -} - -bool8 ScrCmd_resetweather(struct ScriptContext *ctx) -{ - sub_80806E4(); - return FALSE; -} - -bool8 ScrCmd_doweather(struct ScriptContext *ctx) -{ - DoCurrentWeather(); - return FALSE; -} - -bool8 ScrCmd_tileeffect(struct ScriptContext *ctx) -{ - ActivatePerStepCallback(ScriptReadByte(ctx)); - return FALSE; -} - -bool8 ScrCmd_setmapfooter(struct ScriptContext *ctx) -{ - u16 value = VarGet(ScriptReadHalfword(ctx)); - sub_8053D14(value); - return FALSE; -} - -bool8 ScrCmd_warp(struct ScriptContext *ctx) -{ - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - warp1_set(v1, v2, v3, v4, v5); - sub_8080E88(); - player_avatar_init_params_reset(); - return TRUE; -} - -bool8 ScrCmd_warpmuted(struct ScriptContext *ctx) -{ - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - warp1_set(v1, v2, v3, v4, v5); - sp13E_warp_to_last_warp(); - player_avatar_init_params_reset(); - return TRUE; -} - -bool8 ScrCmd_warpwalk(struct ScriptContext *ctx) -{ - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - warp1_set(v1, v2, v3, v4, v5); - sub_8080EF0(); - player_avatar_init_params_reset(); - return TRUE; -} - -bool8 ScrCmd_warphole(struct ScriptContext *ctx) -{ - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u16 x; - u16 y; - - PlayerGetDestCoords(&x, &y); - - if (v1 == 0xFF && v2 == 0xFF) - sub_8053720(x - 7, y - 7); - else - warp1_set(v1, v2, -1, x - 7, y - 7); - - sp13F_fall_to_last_warp(); - player_avatar_init_params_reset(); - return TRUE; -} - -bool8 ScrCmd_warpteleport(struct ScriptContext *ctx) -{ - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - warp1_set(v1, v2, v3, v4, v5); - sub_8080F68(); - player_avatar_init_params_reset(); - return TRUE; -} - -bool8 ScrCmd_warp3(struct ScriptContext *ctx) -{ - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - warp1_set(v1, v2, v3, v4, v5); - return FALSE; -} - -bool8 ScrCmd_warpplace(struct ScriptContext *ctx) -{ - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - saved_warp2_set_2(0, v1, v2, v3, v4, v5); - return FALSE; -} - -bool8 ScrCmd_warp4(struct ScriptContext *ctx) -{ - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - sub_8053690(v1, v2, v3, v4, v5); - return FALSE; -} - -bool8 ScrCmd_warp5(struct ScriptContext *ctx) -{ - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - sub_80536E4(v1, v2, v3, v4, v5); - return FALSE; -} - -bool8 ScrCmd_warp6(struct ScriptContext *ctx) -{ - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - sub_805363C(v1, v2, v3, v4, v5); - return FALSE; -} - -bool8 ScrCmd_getplayerxy(struct ScriptContext *ctx) -{ - u16 *ptr1 = GetVarPointer(ScriptReadHalfword(ctx)); - u16 *ptr2 = GetVarPointer(ScriptReadHalfword(ctx)); - *ptr1 = gSaveBlock1.pos.x; - *ptr2 = gSaveBlock1.pos.y; - return FALSE; -} - -bool8 ScrCmd_countpokemon(struct ScriptContext *ctx) -{ - gScriptResult = CalculatePlayerPartyCount(); - return FALSE; -} - -bool8 ScrCmd_playsfx(struct ScriptContext *ctx) -{ - PlaySE(ScriptReadHalfword(ctx)); - return FALSE; -} - -bool8 s30_music_check_asm() -{ - if (!IsSEPlaying()) - return TRUE; - else - return FALSE; -} - -bool8 ScrCmd_checksound(struct ScriptContext *ctx) -{ - SetupNativeScript(ctx, s30_music_check_asm); - return TRUE; -} - -bool8 ScrCmd_fanfare(struct ScriptContext *ctx) -{ - PlayFanfare(ScriptReadHalfword(ctx)); - return FALSE; -} - -bool8 s32_fanfare_wait_asm() -{ - return IsFanfareTaskInactive(); -} - -bool8 ScrCmd_waitfanfare(struct ScriptContext *ctx) -{ - SetupNativeScript(ctx, s32_fanfare_wait_asm); - return TRUE; -} - -bool8 ScrCmd_playmusic(struct ScriptContext *ctx) -{ - u16 songId = ScriptReadHalfword(ctx); - bool8 val = ScriptReadByte(ctx); - if (val == TRUE) - sav1_set_battle_music_maybe(songId); - PlayNewMapMusic(songId); - return FALSE; -} - -bool8 ScrCmd_playmusicbattle(struct ScriptContext *ctx) -{ - sav1_set_battle_music_maybe(ScriptReadHalfword(ctx)); - return FALSE; -} - -bool8 ScrCmd_fadedefault(struct ScriptContext *ctx) -{ - sub_8053F84(); - return FALSE; -} - -bool8 ScrCmd_fademusic(struct ScriptContext *ctx) -{ - sub_8053FB0(ScriptReadHalfword(ctx)); - return FALSE; -} - -bool8 ScrCmd_fadeout(struct ScriptContext *ctx) -{ - u8 val = ScriptReadByte(ctx); - if (val) - FadeOutBGMTemporarily(4 * val); - else - FadeOutBGMTemporarily(4); - SetupNativeScript(ctx, IsBGMPausedOrStopped); - return TRUE; -} - -bool8 ScrCmd_fadein(struct ScriptContext *ctx) -{ - u8 val = ScriptReadByte(ctx); - if (val) - FadeInBGM(4 * val); - else - FadeInBGM(4); - return FALSE; -} - -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; - 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); - gUnknown_0202E8B6 = v1; - return FALSE; -} - -bool8 s51a_0806B288(void) -{ - return sub_80A212C(gUnknown_0202E8B6, gUnknown_0202E8BA, gUnknown_0202E8B8); -} - -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; - SetupNativeScript(ctx, s51a_0806B288); - return TRUE; -} - -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; - SetupNativeScript(ctx, s51a_0806B288); - return TRUE; -} - -bool8 ScrCmd_disappear(struct ScriptContext *ctx) -{ - u16 objectId = VarGet(ScriptReadHalfword(ctx)); - RemoveFieldObjectByLocalIdAndMap(objectId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - return FALSE; -} - -bool8 ScrCmd_disappearxy(struct ScriptContext *ctx) -{ - u16 objectId = VarGet(ScriptReadHalfword(ctx)); - u8 mapGroup = ScriptReadByte(ctx); - u8 mapNum = ScriptReadByte(ctx); - RemoveFieldObjectByLocalIdAndMap(objectId, mapNum, mapGroup); - return FALSE; -} - -bool8 ScrCmd_reappear(struct ScriptContext *ctx) -{ - u16 objectId = VarGet(ScriptReadHalfword(ctx)); - show_sprite(objectId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - return FALSE; -} - -bool8 ScrCmd_reappearxy(struct ScriptContext *ctx) -{ - u16 objectId = VarGet(ScriptReadHalfword(ctx)); - u8 mapGroup = ScriptReadByte(ctx); - u8 mapNum = ScriptReadByte(ctx); - show_sprite(objectId, mapNum, mapGroup); - return FALSE; -} - -bool8 ScrCmd_movesprite(struct ScriptContext *ctx) -{ - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u16 v2 = VarGet(ScriptReadHalfword(ctx)); - u32 v3 = VarGet(ScriptReadHalfword(ctx)); - sub_805C0F8(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, v2, v3); - return FALSE; -} - -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); - return FALSE; -} - -bool8 ScrCmd_moveoffscreen(struct ScriptContext *ctx) -{ - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - sub_805C78C(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - return FALSE; -} - -bool8 ScrCmd_spritevisible(struct ScriptContext *ctx) -{ - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - npc_by_local_id_and_map_set_field_1_bit_x20(v1, v3, v2, 0); - return FALSE; -} - -bool8 ScrCmd_spriteinvisible(struct ScriptContext *ctx) -{ - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - npc_by_local_id_and_map_set_field_1_bit_x20(v1, v3, v2, 1); - return FALSE; -} - -bool8 ScrCmd_spritelevelup(struct ScriptContext *ctx) -{ - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u8 v4 = ScriptReadByte(ctx); - sub_805BCF0(v1, v3, v2, v4 + 83); - return FALSE; -} - -bool8 ScrCmd_restorespritelevel(struct ScriptContext *ctx) -{ - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - sub_805BD48(v1, v3, v2); - return FALSE; -} - -bool8 ScrCmd_faceplayer(struct ScriptContext *ctx) -{ - if (gMapObjects[gSelectedMapObject].active) - { - FieldObjectFaceOppositeDirection(&gMapObjects[gSelectedMapObject], - player_get_direction_lower_nybble()); - } - return FALSE; -} - -bool8 ScrCmd_spriteface(struct ScriptContext *ctx) -{ - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = ScriptReadByte(ctx); - FieldObjectTurnByLocalIdAndMap(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, v2); - return FALSE; -} - -bool8 ScrCmd_spritebehave(struct ScriptContext *ctx) -{ - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = ScriptReadByte(ctx); - update_saveblock1_field_object_movement_behavior(v1, v2); - return FALSE; -} - -bool8 ScrCmd_createvsprite(struct ScriptContext *ctx) -{ - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u16 v3 = VarGet(ScriptReadHalfword(ctx)); - u32 v4 = VarGet(ScriptReadHalfword(ctx)); - u8 v5 = ScriptReadByte(ctx); - u8 v6 = ScriptReadByte(ctx); - sub_805B410(v1, v2, v3, v4, v5, v6); - return FALSE; -} - -bool8 ScrCmd_vspriteface(struct ScriptContext *ctx) -{ - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - sub_8064990(v1, v2); - return FALSE; -} - -bool8 ScrCmd_lockall(struct ScriptContext *ctx) -{ - if (is_c1_link_related_active()) - { - return FALSE; - } - else - { - ScriptFreezeMapObjects(); - SetupNativeScript(ctx, sub_8064CFC); - return TRUE; - } -} - -bool8 ScrCmd_lock(struct ScriptContext *ctx) -{ - if (is_c1_link_related_active()) - { - return FALSE; - } - else - { - if (gMapObjects[gSelectedMapObject].active) - { - sub_8064DD8(); - SetupNativeScript(ctx, sub_8064DB4); - } - else - { - ScriptFreezeMapObjects(); - SetupNativeScript(ctx, sub_8064CFC); - } - - return TRUE; - } -} - -bool8 ScrCmd_releaseall(struct ScriptContext *ctx) -{ - u8 objectId; - - HideFieldMessageBox(); - objectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[objectId]); - sub_80A2178(); - UnfreezeMapObjects(); - return FALSE; -} - -bool8 ScrCmd_release(struct ScriptContext *ctx) -{ - u8 objectId; - - HideFieldMessageBox(); - if (gMapObjects[gSelectedMapObject].active) - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gSelectedMapObject]); - objectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0); - FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[objectId]); - sub_80A2178(); - UnfreezeMapObjects(); - return FALSE; -} - -bool8 ScrCmd_message(struct ScriptContext *ctx) -{ - u8 *msg = (u8 *)ScriptReadWord(ctx); - if (!msg) - msg = (u8 *)ctx->data[0]; - ShowFieldMessage(msg); - return FALSE; -} - -bool8 ScrCmd_message2(struct ScriptContext *ctx) -{ - u8 *msg = (u8 *)ScriptReadWord(ctx); - if (!msg) - msg = (u8 *)ctx->data[0]; - ShowFieldAutoScrollMessage(msg); - return FALSE; -} - -bool8 ScrCmd_waittext(struct ScriptContext *ctx) -{ - SetupNativeScript(ctx, IsFieldMessageBoxHidden); - return TRUE; -} - -bool8 ScrCmd_closebutton(struct ScriptContext *ctx) -{ - HideFieldMessageBox(); - return FALSE; -} - -bool8 WaitForAorBPress(void) -{ - if (gMain.newKeys & A_BUTTON) - return TRUE; - if (gMain.newKeys & B_BUTTON) - return TRUE; - return FALSE; -} - -bool8 ScrCmd_waitbutton(struct ScriptContext *ctx) -{ - SetupNativeScript(ctx, WaitForAorBPress); - return TRUE; -} - -bool8 ScrCmd_yesnobox(struct ScriptContext *ctx) -{ - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - if (yes_no_box(v1, v2) == 1) - { - ScriptContext1_Stop(); - return TRUE; - } - else - { - return FALSE; - } -} - -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) - { - ScriptContext1_Stop(); - return TRUE; - } - else - { - return FALSE; - } -} - -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) - { - ScriptContext1_Stop(); - return TRUE; - } - else - { - return FALSE; - } -} - -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); - 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) == 1) - { - ScriptContext1_Stop(); - return TRUE; - } - else - { - return FALSE; - } -} - -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); - return FALSE; -} - -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) - { - ScriptContext1_Stop(); - return TRUE; - } - else - { - return FALSE; - } -} - -bool8 ScrCmd_showpokepic(struct ScriptContext *ctx) -{ - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - sub_80B58C4(v1, v2, v3); - return FALSE; -} - -bool8 ScrCmd_hidepokepic(struct ScriptContext *ctx) -{ - void *func = picbox_close(); - if (!func) - return FALSE; - - SetupNativeScript(ctx, func); - return TRUE; -} - -bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx) -{ - u8 v1 = ScriptReadByte(ctx); - if (v1) - sub_8106630(v1); - ShowContestWinner(); - ScriptContext1_Stop(); - return TRUE; -} - -bool8 ScrCmd_braillemsg(struct ScriptContext *ctx) -{ - u8 *ptr = (u8 *)ScriptReadWord(ctx); - u8 v2 = ptr[0]; - u8 v3 = ptr[1]; - u8 v4 = ptr[2]; - u8 v5 = ptr[3]; - u8 v6 = ptr[4]; - u8 v7 = ptr[5]; - StringBraille(gStringVar4, ptr + 6); - MenuDrawTextWindow(v2, v3, v4, v5); - MenuPrint(gStringVar4, v6, v7); - return FALSE; -} - -bool8 ScrCmd_vtext(struct ScriptContext *ctx) -{ - u32 v1 = ScriptReadWord(ctx); - ShowFieldMessage((u8 *)(v1 - gUnknown_0202E8B0)); - return FALSE; -} - -bool8 ScrCmd_bufferpoke(struct ScriptContext *ctx) -{ - u8 stringVarIndex = ScriptReadByte(ctx); - u16 species = VarGet(ScriptReadHalfword(ctx)); - StringCopy(sScriptStringVars[stringVarIndex], gSpeciesNames[species]); - return FALSE; -} - -bool8 ScrCmd_bufferfirstpoke(struct ScriptContext *ctx) -{ - u8 stringVarIndex = ScriptReadByte(ctx); - u8 *dest = sScriptStringVars[stringVarIndex]; - u8 partyIndex = GetLeadMonIndex(); - u32 species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL); - StringCopy(dest, gSpeciesNames[species]); - return FALSE; -} - -bool8 ScrCmd_bufferpartypoke(struct ScriptContext *ctx) -{ - u8 stringVarIndex = ScriptReadByte(ctx); - u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, sScriptStringVars[stringVarIndex]); - StringGetEnd10(sScriptStringVars[stringVarIndex]); - return FALSE; -} - -bool8 ScrCmd_bufferitem(struct ScriptContext *ctx) -{ - u8 stringVarIndex = ScriptReadByte(ctx); - u16 itemId = VarGet(ScriptReadHalfword(ctx)); - CopyItemName(itemId, sScriptStringVars[stringVarIndex]); - return FALSE; -} - -bool8 ScrCmd_bufferdecor(struct ScriptContext *ctx) -{ - u8 stringVarIndex = ScriptReadByte(ctx); - u16 decorId = VarGet(ScriptReadHalfword(ctx)); - StringCopy(sScriptStringVars[stringVarIndex], gDecorations[decorId].name); - return FALSE; -} - -bool8 ScrCmd_bufferattack(struct ScriptContext *ctx) -{ - u8 stringVarIndex = ScriptReadByte(ctx); - u16 moveId = VarGet(ScriptReadHalfword(ctx)); - StringCopy(sScriptStringVars[stringVarIndex], gMoveNames[moveId]); - return FALSE; -} - -bool8 ScrCmd_buffernum(struct ScriptContext *ctx) -{ - u8 stringVarIndex = ScriptReadByte(ctx); - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = sub_80BF0B8(v1); - ConvertIntToDecimalStringN(sScriptStringVars[stringVarIndex], v1, 0, v2); - return FALSE; -} - -bool8 ScrCmd_bufferstd(struct ScriptContext *ctx) -{ - u8 stringVarIndex = ScriptReadByte(ctx); - u16 index = VarGet(ScriptReadHalfword(ctx)); - StringCopy(sScriptStringVars[stringVarIndex], gUnknown_083CE048[index]); - return FALSE; -} - -bool8 ScrCmd_buffertext(struct ScriptContext *ctx) -{ - u8 stringVarIndex = ScriptReadByte(ctx); - u8 *text = (u8 *)ScriptReadWord(ctx); - StringCopy(sScriptStringVars[stringVarIndex], text); - return FALSE; -} - -bool8 ScrCmd_vloadptr(struct ScriptContext *ctx) -{ - u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0); - StringExpandPlaceholders(gStringVar4, ptr); - return FALSE; -} - -bool8 ScrCmd_vbuffer(struct ScriptContext *ctx) -{ - u8 stringVarIndex = ScriptReadByte(ctx); - u32 addr = ScriptReadWord(ctx); - u8 *src = (u8 *)(addr - gUnknown_0202E8B0); - u8 *dest = sScriptStringVars[stringVarIndex]; - StringCopy(dest, src); - return FALSE; -} - -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); - return FALSE; -} - -bool8 ScrCmd_giveegg(struct ScriptContext *ctx) -{ - u16 value = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = ScriptGiveEgg(value); - return FALSE; -} - -bool8 ScrCmd_setpokemove(struct ScriptContext *ctx) -{ - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = ScriptReadHalfword(ctx); - ScriptSetMonMoveSlot(v2, v4, v3); - return FALSE; -} - -bool8 ScrCmd_checkattack(struct ScriptContext *ctx) -{ - u8 i; - u16 moveId = ScriptReadHalfword(ctx); - gScriptResult = 6; - for (i = 0; i < 6; i++) - { - u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL); - if (!species) - break; - // UB: GetMonData() arguments don't match function definition - if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) && pokemon_has_move(&gPlayerParty[i], moveId) == TRUE) - { - gScriptResult = i; - gSpecialVar_0x8004 = species; - break; - } - } - return FALSE; -} - -bool8 ScrCmd_givemoney(struct ScriptContext *ctx) -{ - u32 amount = ScriptReadWord(ctx); - u8 ignore = ScriptReadByte(ctx); - if (!ignore) - sub_80B79B8(&gSaveBlock1.money, amount); - return FALSE; -} - -bool8 ScrCmd_paymoney(struct ScriptContext *ctx) -{ - u32 amount = ScriptReadWord(ctx); - u8 ignore = ScriptReadByte(ctx); - if (!ignore) - sub_80B79E0(&gSaveBlock1.money, amount); - return FALSE; -} - -bool8 ScrCmd_checkmoney(struct ScriptContext *ctx) -{ - u32 amount = ScriptReadWord(ctx); - u8 ignore = ScriptReadByte(ctx); - if (!ignore) - gScriptResult = IsEnoughMoney(gSaveBlock1.money, amount); - return FALSE; -} - -bool8 ScrCmd_showmoney(struct ScriptContext *ctx) -{ - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u8 ignore = ScriptReadByte(ctx); - if (!ignore) - sub_80B7C14(gSaveBlock1.money, v2, v3); - return FALSE; -} - -bool8 ScrCmd_hidemoney(struct ScriptContext *ctx) -{ - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - RemoveMoneyLabelObject(v2, v3); - return FALSE; -} - -bool8 ScrCmd_updatemoney(struct ScriptContext *ctx) -{ - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u8 ignore = ScriptReadByte(ctx); - if (!ignore) - sub_80B7BEC(gSaveBlock1.money, v2, v3); - return FALSE; -} - -bool8 ScrCmd_showcoins(struct ScriptContext *ctx) -{ - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - ShowCoinsWindow(gSaveBlock1.coins, v2, v3); - return FALSE; -} - -bool8 ScrCmd_hidecoins(struct ScriptContext *ctx) -{ - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - HideCoinsWindow(v2, v3); - return FALSE; -} - -bool8 ScrCmd_updatecoins(struct ScriptContext *ctx) -{ - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - UpdateCoinsWindow(gSaveBlock1.coins, v2, v3); - return FALSE; -} - -bool8 ScrCmd_trainerbattle(struct ScriptContext *ctx) -{ - ctx->scriptPtr = TrainerBattleConfigure(ctx->scriptPtr); - return FALSE; -} - -bool8 ScrCmd_reptrainerbattle(struct ScriptContext *ctx) -{ - sub_80825E4(); - return TRUE; -} - -bool8 ScrCmd_endtrainerbattle(struct ScriptContext *ctx) -{ - ctx->scriptPtr = sub_80826E8(); - return FALSE; -} - -bool8 ScrCmd_endtrainerbattle2(struct ScriptContext *ctx) -{ - ctx->scriptPtr = sub_8082700(); - return FALSE; -} - -bool8 ScrCmd_checktrainerflag(struct ScriptContext *ctx) -{ - u16 index = VarGet(ScriptReadHalfword(ctx)); - ctx->comparisonResult = trainer_flag_check(index); - return FALSE; -} - -bool8 ScrCmd_cleartrainerflag(struct ScriptContext *ctx) -{ - u16 index = VarGet(ScriptReadHalfword(ctx)); - trainer_flag_set(index); - return FALSE; -} - -bool8 ScrCmd_settrainerflag(struct ScriptContext *ctx) -{ - u16 index = VarGet(ScriptReadHalfword(ctx)); - trainer_flag_clear(index); - return FALSE; -} - -bool8 ScrCmd_setwildbattle(struct ScriptContext *ctx) -{ - u16 v2 = ScriptReadHalfword(ctx); - u8 v4 = ScriptReadByte(ctx); - u16 v5 = ScriptReadHalfword(ctx); - ScriptWildBattle(v2, v4, v5); - return FALSE; -} - -bool8 ScrCmd_dowildbattle(struct ScriptContext *ctx) -{ - StartBattle_ScriptedWild(); - ScriptContext1_Stop(); - return TRUE; -} - -bool8 ScrCmd_pokemart(struct ScriptContext *ctx) -{ - void *ptr = (void *)ScriptReadWord(ctx); - CreatePokemartMenu(ptr); - ScriptContext1_Stop(); - return TRUE; -} - -bool8 ScrCmd_pokemartdecor(struct ScriptContext *ctx) -{ - void *ptr = (void *)ScriptReadWord(ctx); - CreateDecorationShop1Menu(ptr); - ScriptContext1_Stop(); - return TRUE; -} - -bool8 ScrCmd_pokemartbp(struct ScriptContext *ctx) -{ - void *ptr = (void *)ScriptReadWord(ctx); - CreateDecorationShop2Menu(ptr); - ScriptContext1_Stop(); - return TRUE; -} - -bool8 ScrCmd_pokecasino(struct ScriptContext *ctx) -{ - u8 v2 = VarGet(ScriptReadHalfword(ctx)); - PlaySlotMachine(v2, c2_exit_to_overworld_1_continue_scripts_restart_music); - ScriptContext1_Stop(); - return TRUE; -} - -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); - else - PlantBerryTree(v2, v3, v4, FALSE); - return FALSE; -} - -bool8 ScrCmd_event_96(struct ScriptContext *ctx) -{ - u16 value = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = GetPriceReduction(value); - return FALSE; -} - -bool8 ScrCmd_choosecontestpkmn(struct ScriptContext *ctx) -{ - sub_80F99CC(); - ScriptContext1_Stop(); - return TRUE; -} - -bool8 ScrCmd_startcontest(struct ScriptContext *ctx) -{ - sub_80C48C8(); - ScriptContext1_Stop(); - return TRUE; -} - -bool8 ScrCmd_showcontestresults(struct ScriptContext *ctx) -{ - sub_80C4940(); - ScriptContext1_Stop(); - return TRUE; -} - -bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx) -{ - sub_80C4980(gScriptContestCategory); - ScriptContext1_Stop(); - return TRUE; -} - -bool8 ScrCmd_doanimation(struct ScriptContext *ctx) -{ - u16 effectId = VarGet(ScriptReadHalfword(ctx)); - gUnknown_0202E8BC = effectId; - FieldEffectStart(gUnknown_0202E8BC); - return FALSE; -} - -bool8 ScrCmd_setanimation(struct ScriptContext *ctx) -{ - u8 v2 = ScriptReadByte(ctx); - gUnknown_0202FF84[v2] = (s16)VarGet(ScriptReadHalfword(ctx)); - return FALSE; -} - -static bool8 sub_8067B48() -{ - if (!FieldEffectActiveListContains(gUnknown_0202E8BC)) - return TRUE; - else - return FALSE; -} - -bool8 ScrCmd_checkanimation(struct ScriptContext *ctx) -{ - gUnknown_0202E8BC = VarGet(ScriptReadHalfword(ctx)); - SetupNativeScript(ctx, sub_8067B48); - return TRUE; -} - -bool8 ScrCmd_sethealplace(struct ScriptContext *ctx) -{ - u16 v2 = VarGet(ScriptReadHalfword(ctx)); - sub_8053588(v2); - return FALSE; -} - -bool8 ScrCmd_checkgender(struct ScriptContext *ctx) -{ - gScriptResult = gSaveBlock2.playerGender; - return FALSE; -} - -bool8 ScrCmd_pokecry(struct ScriptContext *ctx) -{ - u16 v3 = VarGet(ScriptReadHalfword(ctx)); - u16 v5 = VarGet(ScriptReadHalfword(ctx)); - PlayCry5(v3, v5); - return FALSE; -} - -bool8 ScrCmd_waitpokecry(struct ScriptContext *ctx) -{ - SetupNativeScript(ctx, IsCryFinished); - return TRUE; -} - -bool8 ScrCmd_setmaptile(struct ScriptContext *ctx) -{ - u16 v3 = VarGet(ScriptReadHalfword(ctx)); - u16 v5 = VarGet(ScriptReadHalfword(ctx)); - u16 v7 = VarGet(ScriptReadHalfword(ctx)); - u16 v8 = VarGet(ScriptReadHalfword(ctx)); - v3 += 7; - v5 += 7; - if (!v8) - MapGridSetMetatileIdAt(v3, v5, v7); - else - MapGridSetMetatileIdAt(v3, v5, v7 | 0xC00); - return FALSE; -} - -bool8 ScrCmd_setdooropened(struct ScriptContext *ctx) -{ - u16 x = VarGet(ScriptReadHalfword(ctx)); - u16 y = VarGet(ScriptReadHalfword(ctx)); - x += 7; - y += 7; - PlaySE(sub_8058790(x, y)); - FieldAnimateDoorOpen(x, y); - return FALSE; -} - -bool8 ScrCmd_setdoorclosed(struct ScriptContext *ctx) -{ - u16 x = VarGet(ScriptReadHalfword(ctx)); - u16 y = VarGet(ScriptReadHalfword(ctx)); - x += 7; - y += 7; - FieldAnimateDoorClose(x, y); - return FALSE; -} - -static bool8 IsDoorAnimationStopped() -{ - if (!FieldIsDoorAnimationRunning()) - return TRUE; - else - return FALSE; -} - -bool8 ScrCmd_doorchange(struct ScriptContext *ctx) -{ - SetupNativeScript(ctx, IsDoorAnimationStopped); - return TRUE; -} - -bool8 ScrCmd_setdooropened2(struct ScriptContext *ctx) -{ - u16 x = VarGet(ScriptReadHalfword(ctx)); - u16 y = VarGet(ScriptReadHalfword(ctx)); - x += 7; - y += 7; - FieldSetDoorOpened(x, y); - return FALSE; -} - -bool8 ScrCmd_setdoorclosed2(struct ScriptContext *ctx) -{ - u16 x = VarGet(ScriptReadHalfword(ctx)); - u16 y = VarGet(ScriptReadHalfword(ctx)); - x += 7; - y += 7; - FieldSetDoorClosed(x, y); - return FALSE; -} - -bool8 ScrCmd_event_b1(struct ScriptContext *ctx) -{ - u8 v3 = ScriptReadByte(ctx); - u16 v5 = VarGet(ScriptReadHalfword(ctx)); - u16 v7 = VarGet(ScriptReadHalfword(ctx)); - u16 v9 = VarGet(ScriptReadHalfword(ctx)); - ScriptAddElevatorMenuItem(v3, v5, v7, v9); - return FALSE; -} - -bool8 ScrCmd_event_b2(struct ScriptContext *ctx) -{ - ScriptShowElevatorMenu(); - ScriptContext1_Stop(); - return TRUE; -} - -bool8 ScrCmd_checkcoins(struct ScriptContext *ctx) -{ - u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx)); - *ptr = GetCoins(); - return FALSE; -} - -bool8 ScrCmd_givecoins(struct ScriptContext *ctx) -{ - u16 coins = VarGet(ScriptReadHalfword(ctx)); - if (GiveCoins(coins) == TRUE) - gScriptResult = 0; - else - gScriptResult = 1; - - return FALSE; -} - -bool8 ScrCmd_removecoins(struct ScriptContext *ctx) -{ - u16 coins = VarGet(ScriptReadHalfword(ctx)); - if (TakeCoins(coins) == TRUE) - gScriptResult = 0; - else - gScriptResult = 1; - - return FALSE; -} diff --git a/src/script.c b/src/script.c deleted file mode 100644 index 8f12da437..000000000 --- a/src/script.c +++ /dev/null @@ -1,368 +0,0 @@ -#include "global.h" -#include "script.h" -#include "event_data.h" - -#define RAM_SCRIPT_MAGIC 51 - -EWRAM_DATA u8 *gUnknown_0202E8AC = NULL; - -static u8 sScriptContext1Status; -static struct ScriptContext sScriptContext1; -static struct ScriptContext sScriptContext2; -static bool8 sScriptContext2Enabled; - -extern ScrCmdFunc gScriptCmdTable[]; -extern ScrCmdFunc gScriptCmdTableEnd[]; -extern void *gNullScriptPtr; - -void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTableEnd) -{ - s32 i; - - ctx->mode = 0; - ctx->scriptPtr = 0; - ctx->stackDepth = 0; - ctx->nativePtr = 0; - ctx->cmdTable = cmdTable; - ctx->cmdTableEnd = cmdTableEnd; - - for (i = 0; i < 4; i++) - ctx->data[i] = 0; - - for (i = 0; i < 20; i++) - ctx->stack[i] = 0; -} - -u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr) -{ - ctx->scriptPtr = ptr; - ctx->mode = 1; - return 1; -} - -void SetupNativeScript(struct ScriptContext *ctx, void *ptr) -{ - ctx->mode = 2; - ctx->nativePtr = ptr; -} - -void StopScript(struct ScriptContext *ctx) -{ - ctx->mode = 0; - ctx->scriptPtr = 0; -} - -u8 RunScriptCommand(struct ScriptContext *ctx) -{ - if (ctx->mode == 0) - return 0; - - switch (ctx->mode) - { - case 0: - return 0; - case 2: - if (ctx->nativePtr) - { - if (ctx->nativePtr() == 1) - ctx->mode = 1; - return 1; - } - ctx->mode = 1; - case 1: - while (1) - { - u8 cmdCode; - ScrCmdFunc *func; - - if (!ctx->scriptPtr) - { - ctx->mode = 0; - return 0; - } - - if (ctx->scriptPtr == gNullScriptPtr) - { - while (1) - asm("svc 2"); // HALT - } - - cmdCode = *(ctx->scriptPtr); - ctx->scriptPtr++; - func = &ctx->cmdTable[cmdCode]; - - if (func >= ctx->cmdTableEnd) - { - ctx->mode = 0; - return 0; - } - - if ((*func)(ctx) == 1) - return 1; - } - } - - return 1; -} - -u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr) -{ - if (ctx->stackDepth + 1 >= 20) - { - return 1; - } - else - { - ctx->stack[ctx->stackDepth] = ptr; - ctx->stackDepth++; - return 0; - } -} - -const u8 *ScriptPop(struct ScriptContext *ctx) -{ - if (ctx->stackDepth == 0) - return NULL; - - ctx->stackDepth--; - return ctx->stack[ctx->stackDepth]; -} - -void ScriptJump(struct ScriptContext *ctx, u8 *ptr) -{ - ctx->scriptPtr = ptr; -} - -void ScriptCall(struct ScriptContext *ctx, u8 *ptr) -{ - ScriptPush(ctx, ctx->scriptPtr); - ctx->scriptPtr = ptr; -} - -void ScriptReturn(struct ScriptContext *ctx) -{ - ctx->scriptPtr = ScriptPop(ctx); -} - -u16 ScriptReadHalfword(struct ScriptContext *ctx) -{ - u16 value = *(ctx->scriptPtr++); - value |= *(ctx->scriptPtr++) << 8; - return value; -} - -u32 ScriptReadWord(struct ScriptContext *ctx) -{ - u32 value0 = *(ctx->scriptPtr++); - u32 value1 = *(ctx->scriptPtr++); - u32 value2 = *(ctx->scriptPtr++); - u32 value3 = *(ctx->scriptPtr++); - return (((((value3 << 8) + value2) << 8) + value1) << 8) + value0; -} - -void ScriptContext2_Enable(void) -{ - sScriptContext2Enabled = TRUE; -} - -void ScriptContext2_Disable(void) -{ - sScriptContext2Enabled = FALSE; -} - -bool8 ScriptContext2_IsEnabled(void) -{ - return sScriptContext2Enabled; -} - -void ScriptContext1_Init(void) -{ - InitScriptContext(&sScriptContext1, gScriptCmdTable, gScriptCmdTableEnd); - sScriptContext1Status = 2; -} - -bool8 ScriptContext2_RunScript(void) -{ - if (sScriptContext1Status == 2) - return 0; - - if (sScriptContext1Status == 1) - return 0; - - ScriptContext2_Enable(); - - if (!RunScriptCommand(&sScriptContext1)) - { - sScriptContext1Status = 2; - ScriptContext2_Disable(); - return 0; - } - - return 1; -} - -void ScriptContext1_SetupScript(const u8 *ptr) -{ - InitScriptContext(&sScriptContext1, gScriptCmdTable, gScriptCmdTableEnd); - SetupBytecodeScript(&sScriptContext1, ptr); - ScriptContext2_Enable(); - sScriptContext1Status = 0; -} - -void ScriptContext1_Stop(void) -{ - sScriptContext1Status = 1; -} - -void EnableBothScriptContexts() -{ - sScriptContext1Status = 0; - ScriptContext2_Enable(); -} - -void ScriptContext2_RunNewScript(const u8 *ptr) -{ - InitScriptContext(&sScriptContext2, &gScriptCmdTable, &gScriptCmdTableEnd); - SetupBytecodeScript(&sScriptContext2, ptr); - while (RunScriptCommand(&sScriptContext2) == 1) - ; -} - -u8 *mapheader_get_tagged_pointer(u8 tag) -{ - u8 *mapScripts = gMapHeader.mapScripts; - - if (!mapScripts) - return NULL; - - while (1) - { - if (!*mapScripts) - return NULL; - if (*mapScripts == tag) - { - mapScripts++; - return (u8 *)(mapScripts[0] + (mapScripts[1] << 8) + (mapScripts[2] << 16) + (mapScripts[3] << 24)); - } - mapScripts += 5; - } -} - -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) -{ - u8 *ptr = mapheader_get_tagged_pointer(tag); - - if (!ptr) - return NULL; - - while (1) - { - u16 varIndex1; - u16 varIndex2; - varIndex1 = ptr[0] | (ptr[1] << 8); - if (!varIndex1) - return NULL; - ptr += 2; - varIndex2 = ptr[0] | (ptr[1] << 8); - ptr += 2; - if (VarGet(varIndex1) == VarGet(varIndex2)) - return (u8 *)(ptr[0] + (ptr[1] << 8) + (ptr[2] << 16) + (ptr[3] << 24)); - ptr += 4; - } -} - -void mapheader_run_script_with_tag_x1(void) -{ - mapheader_run_script_by_tag(1); -} - -void mapheader_run_script_with_tag_x3(void) -{ - mapheader_run_script_by_tag(3); -} - -void mapheader_run_script_with_tag_x5(void) -{ - mapheader_run_script_by_tag(5); -} - -void mapheader_run_script_with_tag_x6(void) -{ - mapheader_run_script_by_tag(6); -} - -bool8 mapheader_run_first_tag2_script_list_match(void) -{ - u8 *ptr = mapheader_get_first_match_from_tagged_ptr_list(2); - - if (!ptr) - return 0; - - ScriptContext1_SetupScript(ptr); - return 1; -} - -void mapheader_run_first_tag4_script_list_match(void) -{ - u8 *ptr = mapheader_get_first_match_from_tagged_ptr_list(4); - if (ptr) - ScriptContext2_RunNewScript(ptr); -} - -u32 CalculateRamScriptChecksum(void) -{ - u32 i; - u32 sum = 0; - for (i = 0; i < sizeof(struct RamScriptData); i++) - sum += ((u8 *)&gSaveBlock1.ramScript.data)[i]; - return sum; -} - -void ClearRamScript(void) -{ - CpuFill32(0, &gSaveBlock1.ramScript, sizeof(struct RamScript)); -} - -bool8 InitRamScript(u8 *script, u16 scriptSize, u8 mapGroup, u8 mapNum, u8 objectId) -{ - struct RamScriptData *scriptData = &gSaveBlock1.ramScript.data; - - ClearRamScript(); - - if (scriptSize > sizeof(scriptData->script)) - return FALSE; - - scriptData->magic = RAM_SCRIPT_MAGIC; - scriptData->mapGroup = mapGroup; - scriptData->mapNum = mapNum; - scriptData->objectId = objectId; - memcpy(scriptData->script, script, scriptSize); - gSaveBlock1.ramScript.checksum = CalculateRamScriptChecksum(); - return TRUE; -} - -u8 *GetRamScript(u8 objectId, u8 *script) -{ - struct RamScriptData *scriptData = &gSaveBlock1.ramScript.data; - gUnknown_0202E8AC = 0; - if (scriptData->magic == RAM_SCRIPT_MAGIC - && scriptData->mapGroup == gSaveBlock1.location.mapGroup - && scriptData->mapNum == gSaveBlock1.location.mapNum - && scriptData->objectId == objectId) - { - if (CalculateRamScriptChecksum() == gSaveBlock1.ramScript.checksum) - { - gUnknown_0202E8AC = script; - return scriptData->script; - } - ClearRamScript(); - } - return script; -} diff --git a/src/script_menu.c b/src/script_menu.c deleted file mode 100644 index f4ac55fb9..000000000 --- a/src/script_menu.c +++ /dev/null @@ -1,1134 +0,0 @@ -#include "global.h" -#include "script_menu.h" -#include "event_data.h" -#include "field_effect.h" -#include "menu.h" -#include "palette.h" -#include "script.h" -#include "sound.h" -#include "sprite.h" -#include "strings.h" -#include "task.h" - -// multichoice lists -const struct MenuAction MultichoiceList_00[] = -{ - {(u8 *)OtherText_Petalburg, 0}, - {(u8 *)OtherText_Slateport, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_02[] = -{ - {(u8 *)OtherText_Enter, 0}, - {(u8 *)OtherText_Info3, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_03[] = -{ - {(u8 *)OtherText_WhatsAContest, 0}, - {(u8 *)OtherText_TypesOfContest, 0}, - {(u8 *)OtherText_Ranks, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -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}, -}; - -const struct MenuAction MultichoiceList_06[] = -{ - {(u8 *)OtherText_Decoration, 0}, - {(u8 *)OtherText_PackUp, 0}, - {(u8 *)OtherText_Registry, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_05[] = -{ - {(u8 *)OtherText_Decoration, 0}, - {(u8 *)OtherText_PackUp, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_07[] = -{ - {(u8 *)OtherText_Register, 0}, - {(u8 *)OtherText_Registry, 0}, - {(u8 *)OtherText_Information, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_12[] = -{ - {(u8 *)OtherText_Mach, 0}, - {(u8 *)OtherText_Acro, 0}, -}; - -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}, -}; - -const struct MenuAction MultichoiceList_14[] = -{ - {(u8 *)OtherText_Dewford, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_16[] = -{ - {(u8 *)OtherText_SawIt, 0}, - {(u8 *)OtherText_NotYet, 0}, -}; - -const struct MenuAction MultichoiceList_17[] = -{ - {(u8 *)OtherText_Yes, 0}, - {(u8 *)OtherText_No, 0}, - {(u8 *)OtherText_Info3, 0}, -}; - -const struct MenuAction MultichoiceList_18[] = -{ - {(u8 *)OtherText_SingleBattle, 0}, - {(u8 *)OtherText_DoubleBattle, 0}, - {(u8 *)OtherText_MultiBattle, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_19[] = -{ - {(u8 *)OtherText_Littleroot, 0}, - {(u8 *)OtherText_Slateport, 0}, - {(u8 *)OtherText_Lilycove, 0}, -}; - -const struct MenuAction MultichoiceList_20[] = -{ - {(u8 *)OtherText_Yes, 0}, - {(u8 *)OtherText_No, 0}, - {(u8 *)OtherText_Info3, 0}, -}; - -const struct MenuAction MultichoiceList_23[] = -{ - {(u8 *)OtherText_MakeAChallenge, 0}, - {(u8 *)OtherText_ObtainInformation, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_24[] = -{ - {(u8 *)OtherText_Lv50_2, 0}, - {(u8 *)OtherText_Lv100_2, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_25[] = -{ - {(u8 *)OtherText_Zigzagoon, 0}, - {(u8 *)OtherText_Nincada, 0}, - {(u8 *)OtherText_Poochyena, 0}, -}; - -const struct MenuAction MultichoiceList_26[] = -{ - {(u8 *)OtherText_Nincada2, 0}, - {(u8 *)OtherText_Lotad, 0}, - {(u8 *)OtherText_Roselia, 0}, -}; - -const struct MenuAction MultichoiceList_27[] = -{ - {(u8 *)OtherText_Shroomish, 0}, - {(u8 *)OtherText_Nincada3, 0}, - {(u8 *)OtherText_Surskit, 0}, -}; - -const struct MenuAction MultichoiceList_28[] = -{ - {(u8 *)OtherText_Treecko, 0}, - {(u8 *)OtherText_Torchic, 0}, - {(u8 *)OtherText_Mudkip, 0}, -}; - -const struct MenuAction MultichoiceList_29[] = -{ - {(u8 *)OtherText_Seedot, 0}, - {(u8 *)OtherText_Shroomish2, 0}, - {(u8 *)OtherText_Spinda, 0}, -}; - -const struct MenuAction MultichoiceList_30[] = -{ - {(u8 *)OtherText_Shroomish3, 0}, - {(u8 *)OtherText_Zigzagoon2, 0}, - {(u8 *)OtherText_Wurmple, 0}, -}; - -const struct MenuAction MultichoiceList_31[] = -{ - {(u8 *)OtherText_PokeBall, 0}, - {(u8 *)OtherText_SuperPotion, 0}, - {(u8 *)OtherText_SamePrice, 0}, -}; - -const struct MenuAction MultichoiceList_32[] = -{ - {(u8 *)OtherText_Yen135, 0}, - {(u8 *)OtherText_Yen155, 0}, - {(u8 *)OtherText_Yen175, 0}, -}; - -const struct MenuAction MultichoiceList_33[] = -{ - {(u8 *)OtherText_CostMore, 0}, - {(u8 *)OtherText_CostLess, 0}, - {(u8 *)OtherText_SamePrice2, 0}, -}; - -const struct MenuAction MultichoiceList_34[] = -{ - {(u8 *)OtherText_MaleSymbol, 0}, - {(u8 *)OtherText_FemaleSymbol, 0}, - {(u8 *)OtherText_Neither, 0}, -}; - -const struct MenuAction MultichoiceList_35[] = -{ - {(u8 *)OtherText_Males, 0}, - {(u8 *)OtherText_Females, 0}, - {(u8 *)OtherText_SameNumber, 0}, -}; - -const struct MenuAction MultichoiceList_36[] = -{ - {(u8 *)OtherText_Male, 0}, - {(u8 *)OtherText_Female, 0}, - {(u8 *)OtherText_ItDepends, 0}, -}; - -const struct MenuAction MultichoiceList_37[] = -{ - {(u8 *)OtherText_Six2, 0}, - {(u8 *)OtherText_Eight2, 0}, - {(u8 *)OtherText_Ten, 0}, -}; - -const struct MenuAction MultichoiceList_38[] = -{ - {(u8 *)OtherText_One, 0}, - {(u8 *)OtherText_Two, 0}, - {(u8 *)OtherText_Three, 0}, -}; - -const struct MenuAction MultichoiceList_39[] = -{ - {(u8 *)OtherText_Six, 0}, - {(u8 *)OtherText_Seven, 0}, - {(u8 *)OtherText_Eight, 0}, -}; - -const struct MenuAction MultichoiceList_42[] = -{ - {(u8 *)OtherText_FreshWater, 0}, - {(u8 *)OtherText_SodaPop, 0}, - {(u8 *)OtherText_Lemonade, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_43[] = -{ - {(u8 *)OtherText_HowToRide, 0}, - {(u8 *)OtherText_HowToTurn, 0}, - {(u8 *)OtherText_SandySlopes, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_44[] = -{ - {(u8 *)OtherText_Wheelies, 0}, - {(u8 *)OtherText_BunnyHops, 0}, - {(u8 *)OtherText_Jumping, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_45[] = -{ - {(u8 *)OtherText_Satisfied, 0}, - {(u8 *)OtherText_Dissatisfied, 0}, -}; - -const struct MenuAction MultichoiceList_46[] = -{ - {(u8 *)OtherText_Deepseatooth, 0}, - {(u8 *)OtherText_Deepseascale, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -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}, -}; - -const struct MenuAction MultichoiceList_48[] = -{ - {(u8 *)OtherText_TreeckoDoll, 0}, - {(u8 *)OtherText_TorchicDoll, 0}, - {(u8 *)OtherText_MudkipDoll, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -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}, -}; - -const struct MenuAction MultichoiceList_49[] = -{ - {(u8 *)OtherText_50Coins, 0}, - {(u8 *)OtherText_500Coins, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_50[] = -{ - {(u8 *)OtherText_Excellent, 0}, - {(u8 *)OtherText_NotSoHot, 0}, -}; - -const struct MenuAction MultichoiceList_52[] = -{ - {(u8 *)OtherText_Lilycove, 0}, - {(u8 *)OtherText_BattleTower, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_53[] = -{ - {(u8 *)OtherText_Slateport, 0}, - {(u8 *)OtherText_Lilycove, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_54[] = -{ - {(u8 *)OtherText_Right, 0}, - {(u8 *)OtherText_Left, 0}, -}; - -const struct MenuAction MultichoiceList_56[] = -{ - {(u8 *)OtherText_Slateport, 0}, - {(u8 *)OtherText_BattleTower, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -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}, -}; - -const struct MenuAction MultichoiceList_58[] = -{ - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_59[] = -{ - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_60[] = -{ - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_61[] = -{ - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_62[] = -{ - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_63[] = -{ - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_64[] = -{ - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_65[] = -{ - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_66[] = -{ - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_67[] = -{ - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_68[] = -{ - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_69[] = -{ - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_70[] = -{ - {(u8 *)OtherText_RedShard, 0}, - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -const struct MenuAction MultichoiceList_71[] = -{ - {(u8 *)OtherText_YellowShard, 0}, - {(u8 *)OtherText_BlueShard, 0}, - {(u8 *)OtherText_GreenShard, 0}, - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -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}, -}; - -const struct MenuAction MultichoiceList_01[] = -{ - {(u8 *)gOtherText_CancelNoTerminator, 0}, -}; - -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} -}; - -const u8 *const gUnknown_083CE048[] = -{ - OtherText_Cool2, - OtherText_Beauty3, - OtherText_Cute2, - OtherText_Smart2, - OtherText_Tough2, - OtherText_Normal, - OtherText_Super, - OtherText_Hyper, - OtherText_Master, - OtherText_Cool3, - OtherText_Beauty4, - OtherText_Cute3, - OtherText_Smart3, - OtherText_Tough3, - OtherText_Items, - OtherText_KeyItems, - OtherText_Balls, - OtherText_TMsHMs, - OtherText_Berries, -}; - -extern u8 gPCText_WhichPCShouldBeAccessed[]; - -extern u16 gScriptResult; - -bool8 sub_80B5054(u8 left, u8 top, u8 var3, u8 var4) -{ - if (FuncIsActiveTask(sub_80B52B4) == 1) - return FALSE; - else - { - gScriptResult = 0xFF; - DrawMultichoiceMenu(left, top, gMultichoiceLists[var3].count, gMultichoiceLists[var3].list, var4, 0); - return TRUE; - } -} - -bool8 sub_80B50B0(u8 left, u8 top, u8 var3, u8 var4, u8 var5) -{ - if (FuncIsActiveTask(sub_80B52B4) == 1) - return FALSE; - else - { - gScriptResult = 0xFF; - DrawMultichoiceMenu(left, top, gMultichoiceLists[var3].count, gMultichoiceLists[var3].list, var4, var5); - return TRUE; - } -} - -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, struct MenuAction *list, u8 var4, u8 cursorPos) -{ - u16 width = GetStringWidthInTilesForScriptMenu(list[0].text); - u16 newWidth; - u8 i; - u8 right; - u8 bottom; - - for (i = 1; i < count; i++) - { - newWidth = GetStringWidthInTilesForScriptMenu(list[i].text); - if (width < newWidth) - width = newWidth; - } - - right = width; - right = (right + left) + 1; - - if (right > 29) - { - left = left + (29 - right); - right = 29; - } - - bottom = top + (2 * count + 1); - - 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); -} - -void sub_80B5230(u8 left, u8 top, u8 right, u8 bottom, u8 unkVar, u8 count) -{ - u8 taskId = CreateTask(sub_80B52B4, 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; - - if (count > 3) - gTasks[taskId].data[5] = TRUE; - else - gTasks[taskId].data[5] = FALSE; -} - -void sub_80B52B4(u8 taskId) -{ - s8 var; - - if (!gPaletteFade.active) - { - if (!gTasks[taskId].data[5]) - var = ProcessMenuInputNoWrap(); - else - var = ProcessMenuInput(); - - if (var != -2) - { - if (var == -1) - { - if (!gTasks[taskId].data[4]) - { - PlaySE(5); - gScriptResult = 127; - } - else - { - return; - } - } - else - { - gScriptResult = var; - } - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(gTasks[taskId].data[0], gTasks[taskId].data[1], gTasks[taskId].data[2], gTasks[taskId].data[3]); - DestroyTask(taskId); - EnableBothScriptContexts(); - } - } -} - -bool8 Multichoice(u8 var1, u8 var2, u8 var3, u8 var4) -{ - if (FuncIsActiveTask(sub_80B52B4) == 1) - return FALSE; - else - { - gScriptResult = 0xFF; - sub_80B53B4(var1, var2, gMultichoiceLists[var3].count, gMultichoiceLists[var3].list, var4); - return TRUE; - } -} - -void sub_80B53B4(u8 left, u8 top, u8 count, struct MenuAction *list, u8 var4) -{ - u16 width = GetStringWidthInTilesForScriptMenu(list[0].text); - u16 newWidth; - u8 i; - u8 right; - u8 bottom; - - for (i = 1; i < count; i++) - { - newWidth = GetStringWidthInTilesForScriptMenu(list[i].text); - if (width < newWidth) - width = newWidth; - } - - right = width; - right = (right + left) + 2; - bottom = top + (2 * count + 1); - - PrintMenuItems(left, top, count, list); - InitMenu(0, left, top, count, 0, right - left - 1); - sub_80B5230(left, top, right, bottom, var4, count); -} - -bool8 yes_no_box(u8 var1, u8 var2) -{ - u8 taskId; - - if (FuncIsActiveTask(task_yes_no_maybe) == 1) - 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; - return TRUE; - } -} - -// unused -bool8 IsScriptActive(void) -{ - if (gScriptResult == 0xFF) - return FALSE; - else - return TRUE; -} - -void task_yes_no_maybe(u8 taskId) -{ - u8 left, top; - - if (gTasks[taskId].data[2] < 5) - { - gTasks[taskId].data[2]++; - return; - } - - switch (ProcessMenuInputNoWrap()) - { - case -2: - return; - case -1: - case 1: - PlaySE(5); - gScriptResult = 0; - break; - case 0: - gScriptResult = 1; - break; - } - - left = gTasks[taskId].data[0]; - top = gTasks[taskId].data[1]; - - MenuZeroFillWindowRect(left, top, left + 6, top + 5); - DestroyTask(taskId); - EnableBothScriptContexts(); -} - -bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount) -{ - u8 bottom = 0; - - if (FuncIsActiveTask(sub_80B5684) == TRUE) - { - return FALSE; - } - else - { - u8 taskId; - u8 width; - - gScriptResult = 0xFF; - - sub_807274C(left, top, gMultichoiceLists[multichoiceId].count, 0, gMultichoiceLists[multichoiceId].list, columnCount, 0); - - taskId = CreateTask(sub_80B5684, 80); - - if (!((gMultichoiceLists[multichoiceId].count >> 1) < columnCount || (gMultichoiceLists[multichoiceId].count & 1)) - || columnCount == 1 || gMultichoiceLists[multichoiceId].count == columnCount) - { - bottom = (2 * (gMultichoiceLists[multichoiceId].count / columnCount)) + 1 + top; - } - else - { - bottom = (2 * (gMultichoiceLists[multichoiceId].count / columnCount)) + 3 + top; - } - - 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; - return TRUE; - } -} - -void sub_80B5684(u8 taskId) -{ - s8 var = sub_80727CC(); - - if (var != -2) - { - if (var == -1) - { - if (!gTasks[taskId].data[4]) - { - PlaySE(5); - gScriptResult = 127; - } - else - { - return; - } - } - else - { - gScriptResult = var; - } - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(gTasks[taskId].data[0], gTasks[taskId].data[1], gTasks[taskId].data[2], gTasks[taskId].data[3]); - DestroyTask(taskId); - EnableBothScriptContexts(); - } -} - -bool8 TryCreatePCMenu(void) -{ - if (FuncIsActiveTask(sub_80B52B4) == 1) - return FALSE; - else - { - gScriptResult = 0xFF; - CreatePCMenu(); - return TRUE; - } -} - -#if ENGLISH -void CreatePCMenu(void) -{ - u16 playersPCWidth = GetStringWidthInTilesForScriptMenu(gPCText_PlayersPC); - u8 width; - u8 numChoices; - - if (playersPCWidth > GetStringWidthInTilesForScriptMenu(gPCText_SomeonesPC)) - width = playersPCWidth; - else - width = 8; - - if (FlagGet(SYS_GAME_CLEAR)) // player has cleared game? - { - numChoices = 4; - MenuDrawTextWindow(0, 0, width + 2, 9); - MenuPrint(gPCText_HallOfFame, 1, 5); - MenuPrint(gPCText_LogOff, 1, 7); - } - else - { - numChoices = 3; - MenuDrawTextWindow(0, 0, width + 2, 7); - MenuPrint(gPCText_LogOff, 1, 5); - } - - if (FlagGet(SYS_PC_LANETTE)) // player met lanette? - MenuPrint(gPCText_LanettesPC, 1, 1); - else - MenuPrint(gPCText_SomeonesPC, 1, 1); - - MenuPrint(gPCText_PlayersPC, 1, 3); - InitMenu(0, 1, 1, numChoices, 0, width + 1); - sub_80B5230(0, 0, width + 2, 2 * numChoices + 1, 0, numChoices); -} -#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\ -_080B5748: .4byte 0x0000084b\n\ -_080B574C: .4byte gPCText_LanettesPC\n\ -_080B5750:\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\ -_080B5798:\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\ -_080B57AC:\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\ -_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\ -_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\ -_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\ -_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\ -_080B5888: .4byte gPCText_SomeonesPC\n\ -_080B588C: .4byte gPCText_PlayersPC\n\ - .syntax divided\n"); -} -#endif - -void sub_80B5838(void) -{ - MenuDisplayMessageBox(); - MenuPrint(gPCText_WhichPCShouldBeAccessed, 2, 15); -} - -void task_picbox(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - switch (task->data[0]) - { - case 0: - task->data[0]++; - break; - case 1: - break; - case 2: - FreeResourcesAndDestroySprite(&gSprites[task->data[2]]); - task->data[0]++; - break; - case 3: - MenuZeroFillWindowRect(task->data[3], task->data[4], task->data[3] + 9, task->data[4] + 10); - DestroyTask(taskId); - break; - } -} - -bool8 sub_80B58C4(u16 var1, u8 var2, u8 var3) -{ - u8 taskId; - u8 var; - - if (FindTaskIdByFunc(task_picbox) != 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; - return TRUE; - } -} - -void *picbox_close(void) -{ - u8 taskId = FindTaskIdByFunc(task_picbox); - - if (taskId == 0xFF) - return NULL; - - gTasks[taskId].data[0]++; - return (void *)sub_80B59AC; -} - -bool8 sub_80B59AC(void) -{ - if (FindTaskIdByFunc(task_picbox) == 0xFF) - return TRUE; - else - return FALSE; -} diff --git a/src/script_movement.c b/src/script_movement.c deleted file mode 100644 index e25b60a3c..000000000 --- a/src/script_movement.c +++ /dev/null @@ -1,224 +0,0 @@ -#include "global.h" -#include "script_movement.h" -#include "field_map_obj.h" -#include "field_map_obj_helpers.h" -#include "task.h" -#include "util.h" - -static EWRAM_DATA u8 *gUnknown_020384F8[16] = {0}; - -static void sub_80A2198(u8); -static u8 sub_80A21E0(void); -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 Task_80A244C(u8); -static void sub_80A2490(u8, u8, u8, u8 *); - -bool8 exec_movement(u8 a, u8 b, u8 c, u8 *d) -{ - u8 mapObjId; - - if (TryGetFieldObjectIdByLocalIdAndMap(a, b, c, &mapObjId)) - return TRUE; - if (!FuncIsActiveTask(Task_80A244C)) - sub_80A2198(50); - return sub_80A21F4(sub_80A21E0(), mapObjId, d); -} - -bool8 sub_80A212C(u8 a, u8 b, u8 c) -{ - u8 mapObjId; - u8 r4; - u8 r1; - - if (TryGetFieldObjectIdByLocalIdAndMap(a, b, c, &mapObjId)) - return 1; - r4 = sub_80A21E0(); - r1 = sub_80A2260(r4, mapObjId); - if (r1 == 16) - return 1; - return sub_80A2370(r4, r1); -} - -void sub_80A2178(void) -{ - u8 taskId; - - taskId = sub_80A21E0(); - if (taskId != 0xFF) - { - sub_80A2408(taskId); - DestroyTask(taskId); - } -} - -static void sub_80A2198(u8 priority) -{ - u8 taskId; - u8 i; - - taskId = CreateTask(Task_80A244C, priority); - for (i = 1; i < 16; i++) - gTasks[taskId].data[i] = 0xFFFF; -} - -static u8 sub_80A21E0(void) -{ - return FindTaskIdByFunc(Task_80A244C); -} - -static bool8 sub_80A21F4(u8 taskId, u8 b, u8 *c) -{ - u8 r4; - - r4 = sub_80A2260(taskId, b); - if (r4 != 16) - { - if (sub_80A2370(taskId, r4) == 0) - return TRUE; - else - { - sub_80A23C8(taskId, r4, b, c); - return FALSE; - } - } - r4 = sub_80A2260(taskId, 0xFF); - if (r4 == 16) - return TRUE; - else - { - sub_80A23C8(taskId, r4, b, c); - return FALSE; - } -} - -static u8 sub_80A2260(u8 taskId, u8 b) -{ - u8 *ptr; - u8 i; - - ptr = (u8 *)&gTasks[taskId].data[1]; - for (i = 0; i < 16; i++, ptr++) - { - if (*ptr == b) - return i; - } - return 16; -} - -static void sub_80A229C(u8 taskId, u8 b, u8 **c) -{ - u8 i; - - *c = (u8 *)&gTasks[taskId].data[1]; - for (i = 0; i < b; i++, (*c)++) - ; -} - -static void sub_80A22D0(u8 taskId, u8 b, u8 c) -{ - u8 *ptr; - - sub_80A229C(taskId, b, &ptr); - *ptr = c; //what is this supposed to do? -} - -static void sub_80A22F4(u8 taskId, u8 b, u8 *c) -{ - u8 *ptr; - - sub_80A229C(taskId, b, &ptr); - *c = *ptr; -} - -static void sub_80A2318(u8 a, u8 b) -{ - u16 var = ~gBitTable[b]; - - gTasks[a].data[0] &= var; -} - -static void sub_80A2348(u8 taskId, u8 b) -{ - gTasks[taskId].data[0] |= gBitTable[b]; -} - -static bool8 sub_80A2370(u8 taskId, u8 b) -{ - u16 var = (u16)gTasks[taskId].data[0] & gBitTable[b]; - - if (var != 0) - return TRUE; - else - return FALSE; -} - -static void npc_obj_offscreen_culling_and_flag_update(u8 a, u8 *b) -{ - gUnknown_020384F8[a] = b; -} - -static u8 *sub_80A23B8(u8 a) -{ - return gUnknown_020384F8[a]; -} - -static void sub_80A23C8(u8 taskId, u8 b, u8 c, u8 *d) -{ - sub_80A2318(taskId, b); - npc_obj_offscreen_culling_and_flag_update(b, d); - sub_80A22D0(taskId, b, c); -} - -static void sub_80A2408(u8 a) -{ - u8 *ptr; - u8 i; - - ptr = (u8 *)&gTasks[a].data[1]; - for (i = 0; i < 16; i++, ptr++) - { - if (*ptr != 0xFF) - UnfreezeMapObject(&gMapObjects[*ptr]); - } -} - -static void Task_80A244C(u8 taskId) -{ - u8 i; - u8 var; - - for (i = 0; i < 16; i++) - { - sub_80A22F4(taskId, i, &var); - if (var != 0xFF) - sub_80A2490(taskId, i, var, sub_80A23B8(i)); - } -} - -static void sub_80A2490(u8 taskId, u8 b, u8 c, u8 *d) -{ - u8 var; - - if (FieldObjectIsSpecialAnimActive(&gMapObjects[c]) - && !FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[c])) - return; - - var = *d; - if (var == 0xFE) - { - sub_80A2348(taskId, b); - FreezeMapObject(&gMapObjects[c]); - } - else - { - if (!FieldObjectSetSpecialAnim(&gMapObjects[c], 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 deleted file mode 100644 index cbca07011..000000000 --- a/src/script_pokemon_util_80C4BF0.c +++ /dev/null @@ -1,716 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "berry.h" -#include "choose_party.h" -#include "contest.h" -#include "contest_link_80C2020.h" -#include "contest_painting.h" -#include "data2.h" -#include "daycare.h" -#include "debug.h" -#include "decompress.h" -#include "event_data.h" -#include "items.h" -#include "link.h" -#include "load_save.h" -#include "main.h" -#include "menu.h" -#include "pokedex.h" -#include "pokemon.h" -#include "rng.h" -#include "rom4.h" -#include "script_pokemon_80C4.h" -#include "species.h" -#include "task.h" - -#define CONTEST_ENTRY_PIC_LEFT 10 -#define CONTEST_ENTRY_PIC_TOP 3 - -extern struct SpriteTemplate gUnknown_02024E8C; - -extern u8 gContestPlayerMonIndex; -extern u8 gIsLinkContest; -extern u8 gPlayerPartyCount; -extern u8 gSelectedOrderFromParty[]; - -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; -extern u16 gSpecialVar_0x8006; - -extern u16 gScriptContestCategory; -extern u16 gScriptContestRank; -extern u16 gScriptResult; - -extern u32 gUnknown_03005D28; - -extern u8 gUnknown_02038694; -extern u8 gUnknown_0203856C; -extern u8 gUnknown_02038690[]; -extern u16 gUnknown_02038678[]; - -void sub_80C4BF0(void) -{ - gSaveBlock1.vars[0x10] = gContestMons[0].unk16; - gSaveBlock1.vars[0x11] = gContestMons[1].unk16; - gSaveBlock1.vars[0x12] = gContestMons[2].unk16; -} - -void sub_80C4C28(void) -{ - u16 var; - u8 specialVar = gSpecialVar_0x8005; - - switch(specialVar) - { - case 0: - var = 3; - break; - case 1: - var = 4; - break; - case 2: - var = 5; - break; - default: - var = 100; - break; - } - gSpecialVar_0x8004 = var; -} - -void sub_80C4C64(void) -{ - sub_80C46EC(); - sub_80C4740(); - sub_80C48F4(); -} - -void sub_80C4C78(void) -{ - u16 var; - u16 returnVar; - - switch(gScriptContestCategory) - { - case 0: - var = 8; - break; - case 1: - var = 9; - break; - case 2: - var = 10; - break; - case 3: - var = 11; - break; - case 4: - default: - var = 12; - break; - } - - returnVar = gSaveBlock1.sbStruct.unkSB2.sb1_2EFC_struct2[var].var; - - if(returnVar == 0) - gSpecialVar_0x8004 = returnVar; - else - gSpecialVar_0x8004 = 1; -} - -void sub_80C4CEC(void) -{ - sub_80B2A7C(0xFF); -} - -void sub_80C4CF8(void) -{ - if(!gUnknown_02038690[gContestPlayerMonIndex] - && gScriptContestRank == 3 - && (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800) - { - gSpecialVar_0x8004 = 1; - } - else - { - gSpecialVar_0x8004 = 0; - } -} - -u8 sub_80C4D50(void) -{ - u8 retVar = 0; - int i; - - for (i = 0; i < 5; i++) - if (gSaveBlock1.sbStruct.unkSB2.sb1_2EFC_struct2[i + 8].var) - retVar++; - - return retVar; -} - -// nope. too hard -__attribute__((naked)) -void sub_80C4D80(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\ - ldr r0, _080C4EA0 @ =gUnknown_02038670\n\ - mov r12, r0\n\ - ldr r1, _080C4EA4 @ =gSpecialVar_0x8006\n\ - mov r8, r1\n\ - ldr r2, _080C4EA8 @ =gStringVar1\n\ - mov r9, r2\n\ - mov r2, r12\n\ - mov r1, sp\n\ - movs r6, 0x3\n\ -_080C4D9E:\n\ - ldrh r0, [r2]\n\ - strh r0, [r1]\n\ - adds r2, 0x2\n\ - adds r1, 0x2\n\ - subs r6, 0x1\n\ - cmp r6, 0\n\ - bge _080C4D9E\n\ - movs r6, 0\n\ -_080C4DAE:\n\ - movs r1, 0x3\n\ - cmp r1, r6\n\ - ble _080C4DD8\n\ -_080C4DB4:\n\ - subs r4, r1, 0x1\n\ - lsls r0, r4, 1\n\ - mov r5, sp\n\ - adds r3, r5, r0\n\ - lsls r0, r1, 1\n\ - adds r2, r5, r0\n\ - ldrh r5, [r3]\n\ - movs r7, 0\n\ - ldrsh r1, [r3, r7]\n\ - movs r7, 0\n\ - ldrsh r0, [r2, r7]\n\ - cmp r1, r0\n\ - bge _080C4DD2\n\ - strh r5, [r2]\n\ - strh r0, [r3]\n\ -_080C4DD2:\n\ - adds r1, r4, 0\n\ - cmp r1, r6\n\ - bgt _080C4DB4\n\ -_080C4DD8:\n\ - adds r6, 0x1\n\ - cmp r6, 0x2\n\ - ble _080C4DAE\n\ - mov r2, r8\n\ - ldrh r0, [r2]\n\ - lsls r0, 1\n\ - add r0, sp\n\ - ldrh r0, [r0]\n\ - movs r2, 0\n\ - movs r7, 0\n\ - movs r6, 0\n\ - lsls r0, 16\n\ - asrs r4, r0, 16\n\ - adds r3, r0, 0\n\ - mov r1, sp\n\ -_080C4DF6:\n\ - movs r5, 0\n\ - ldrsh r0, [r1, r5]\n\ - cmp r0, r4\n\ - bne _080C4E12\n\ - lsls r0, r2, 24\n\ - movs r2, 0x80\n\ - lsls r2, 17\n\ - adds r0, r2\n\ - lsrs r2, r0, 24\n\ - mov r5, r8\n\ - ldrh r5, [r5]\n\ - cmp r6, r5\n\ - bne _080C4E12\n\ - adds r7, r2, 0\n\ -_080C4E12:\n\ - adds r1, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - ble _080C4DF6\n\ - movs r6, 0\n\ - mov r0, sp\n\ - movs r1, 0\n\ - ldrsh r0, [r0, r1]\n\ - asrs r1, r3, 16\n\ - lsls r2, 24\n\ - mov r10, r2\n\ - cmp r0, r1\n\ - beq _080C4E40\n\ - adds r2, r1, 0\n\ - mov r1, sp\n\ -_080C4E30:\n\ - adds r1, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - bgt _080C4E40\n\ - movs r4, 0\n\ - ldrsh r0, [r1, r4]\n\ - cmp r0, r2\n\ - bne _080C4E30\n\ -_080C4E40:\n\ - lsls r0, r6, 24\n\ - lsrs r4, r0, 24\n\ - adds r2, r7, 0\n\ - movs r6, 0\n\ - asrs r5, r3, 16\n\ - mov r8, r5\n\ - mov r1, r12\n\ - movs r5, 0\n\ - ldrsh r0, [r1, r5]\n\ - cmp r8, r0\n\ - bne _080C4E60\n\ - cmp r7, 0x1\n\ - beq _080C4E78\n\ -_080C4E5A:\n\ - subs r0, r2, 0x1\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ -_080C4E60:\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - bgt _080C4E78\n\ - lsls r0, r6, 1\n\ - add r0, r12\n\ - asrs r1, r3, 16\n\ - movs r5, 0\n\ - ldrsh r0, [r0, r5]\n\ - cmp r1, r0\n\ - bne _080C4E60\n\ - cmp r2, 0x1\n\ - bne _080C4E5A\n\ -_080C4E78:\n\ - lsls r1, r6, 24\n\ - lsrs r1, 24\n\ - mov r0, r9\n\ - bl sub_80C4698\n\ - ldr r0, _080C4EAC @ =gIsLinkContest\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080C4EB8\n\ - ldr r0, _080C4EB0 @ =gStringVar2\n\ - lsls r1, r6, 3\n\ - subs r1, r6\n\ - lsls r1, 2\n\ - ldr r2, _080C4EB4 @ =gLinkPlayers + 0x8\n\ - adds r1, r2\n\ - bl sub_80C4674\n\ - b _080C4EC4\n\ - .align 2, 0\n\ -_080C4EA0: .4byte gUnknown_02038670\n\ -_080C4EA4: .4byte gSpecialVar_0x8006\n\ -_080C4EA8: .4byte gStringVar1\n\ -_080C4EAC: .4byte gIsLinkContest\n\ -_080C4EB0: .4byte gStringVar2\n\ -_080C4EB4: .4byte gLinkPlayers + 0x8\n\ -_080C4EB8:\n\ - ldr r0, _080C4ED8 @ =gStringVar2\n\ - lsls r1, r6, 6\n\ - ldr r2, _080C4EDC @ =gUnknown_0203857D\n\ - adds r1, r2\n\ - bl sub_80C4674\n\ -_080C4EC4:\n\ - mov r1, r10\n\ - asrs r0, r1, 24\n\ - cmp r0, 0x1\n\ - beq _080C4ED0\n\ - cmp r7, r0\n\ - bne _080C4EE4\n\ -_080C4ED0:\n\ - ldr r0, _080C4EE0 @ =gSpecialVar_0x8006\n\ - strh r4, [r0]\n\ - b _080C4EEA\n\ - .align 2, 0\n\ -_080C4ED8: .4byte gStringVar2\n\ -_080C4EDC: .4byte gUnknown_0203857D\n\ -_080C4EE0: .4byte gSpecialVar_0x8006\n\ -_080C4EE4:\n\ - ldr r1, _080C4EFC @ =gSpecialVar_0x8006\n\ - adds r0, r4, 0x4\n\ - strh r0, [r1]\n\ -_080C4EEA:\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\ -_080C4EFC: .4byte gSpecialVar_0x8006\n\ - .syntax divided"); -} - -void ShowContestWinnerCleanup(void) -{ - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); -} - -void ShowContestWinner(void) -{ - if(gUnknown_0203856C) - { - sub_80AAF30(); - BATTLE_STRUCT->unk15DDF = 1; - BATTLE_STRUCT->unk15DDE = sub_80B2C4C(254, 0); - sub_80B2A7C(3); - gUnknown_0203856C = 0; - } - SetMainCallback2(CB2_ContestPainting); - gMain.savedCallback = ShowContestWinnerCleanup; -} - -void sub_80C4F70(void) -{ - VarSet(0x4010, gContestMons[0].unk16); - VarSet(0x4011, gContestMons[1].unk16); - VarSet(0x4012, gContestMons[2].unk16); - VarSet(0x4013, gContestMons[3].unk16); -} - -bool8 GiveMonArtistRibbon(void) -{ - u8 ribbon = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_ARTIST_RIBBON); - - if(ribbon == FALSE - && gUnknown_02038690[gContestPlayerMonIndex] == 0 - && gScriptContestRank == 3 - && (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800) - { - ribbon = TRUE; - SetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_ARTIST_RIBBON, &ribbon); - return TRUE; - } - else - { - return FALSE; - } -} - -u8 sub_80C5044(void) -{ - return gUnknown_0203856C; -} - -void ShowContestEntryMonPic(void) -{ - const struct CompressedSpritePalette *palette; - u32 var1, var2; - u16 species; - u8 spriteId; - u8 taskId; - - if(FindTaskIdByFunc(sub_80C5190) == 0xFF) - { - u8 left = CONTEST_ENTRY_PIC_LEFT; - u8 top = CONTEST_ENTRY_PIC_TOP; - - MenuDrawTextWindow(left, top, 19, 13); - species = gContestMons[gSpecialVar_0x8006].species; - var1 = gContestMons[gSpecialVar_0x8006].unk38; // v2 - var2 = gContestMons[gSpecialVar_0x8006].unk3C; // v3 - taskId = CreateTask(sub_80C5190, 0x50); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = species; - HandleLoadSpecialPokePic( - &gMonFrontPicTable[species], - gMonFrontPicCoords[species].coords, - gMonFrontPicCoords[species].y_offset, - (u32)gUnknown_081FAF4C[0], - gUnknown_081FAF4C[1], - species, - var1); - palette = sub_80409C8(species, var2, var1); - LoadCompressedObjectPalette(palette); - GetMonSpriteTemplate_803C56C(species, 1); - gUnknown_02024E8C.paletteTag = palette->tag; - spriteId = CreateSprite(&gUnknown_02024E8C, 0x78, 0x40, 0); - gTasks[taskId].data[2] = spriteId; - gTasks[taskId].data[3] = left; - gTasks[taskId].data[4] = top; - gSprites[spriteId].callback = SpriteCallbackDummy; - gSprites[spriteId].oam.priority = 0; - } -} - -void sub_80C5164(void) -{ - u8 taskId = FindTaskIdByFunc(sub_80C5190); - - if(taskId != 0xFF) - gTasks[taskId].data[0]++; -} - -void sub_80C5190(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - struct Sprite *sprite; - - switch(task->data[0]) - { - case 2: - sprite = &gSprites[task->data[2]]; - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); - - if(sprite->oam.affineMode) - FreeOamMatrix(sprite->oam.matrixNum); - - DestroySprite(sprite); - task->data[0]++; - break; - case 0: - task->data[0]++; - break; - case 3: - MenuZeroFillWindowRect(task->data[3], task->data[4], task->data[3] + 9, task->data[4] + 10); - DestroyTask(taskId); - break; - case 1: - default: - break; - } -} - -void ScriptGetMultiplayerId(void) -{ - if(gIsLinkContest & 1) - gScriptResult = GetMultiplayerId(); - else - gScriptResult = 4; -} - -void ScriptRandom(void) -{ - u16 random; - u16 *scriptPtr; - - if(gIsLinkContest & 1) - { - gUnknown_03005D28 = 1103515245 * gUnknown_03005D28 + 24691; - random = gUnknown_03005D28 >> 16; - scriptPtr = &gScriptResult; - } - else - { - scriptPtr = &gScriptResult; - random = Random(); - } - *scriptPtr = random % *scriptPtr; -} - -void HealPlayerParty(void) -{ - u8 i, j; - u8 ppBonuses; - u8 arg[4]; - - // restore HP. - for(i = 0; i < gPlayerPartyCount; i++) - { - u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); - arg[0] = maxHP; - arg[1] = maxHP >> 8; - SetMonData(&gPlayerParty[i], MON_DATA_HP, arg); - ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES); - - // restore PP. - for(j = 0; j < 4; j++) - { - arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j); - SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg); - } - - // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData. - arg[0] = 0; - arg[1] = 0; - arg[2] = 0; - arg[3] = 0; - SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg); - } -} - -u8 ScriptGiveMon(u16 species, u8 var, u16 item, u32 var3, u32 var4, u8 var5) -{ - u16 nationalSpecies; - int sentToPc; - u8 array[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); - sentToPc = GiveMonToPlayer(&mon); - nationalSpecies = 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; - } -} - -u8 ScriptGiveEgg(u16 value) -{ - struct Pokemon mon; - u8 data; - - sub_8042044(&mon, value, 1); - data = 1; - SetMonData(&mon, MON_DATA_IS_EGG, &data); - - return GiveMonToPlayer(&mon); -} - -void CheckForAlivePartyMons(void) -{ - u8 var = sub_803DAA0(); - - switch(var) - { - case 1: - gScriptResult = var; - break; - case 0: - gScriptResult = var; - break; - case 2: - gScriptResult = var; - break; - } -} - -bool8 CheckPartyMonHasHeldItem(u16 item) -{ - int i; - - for(i = 0; i < 6; i++) - { - u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - if(species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item) - return TRUE; - } - return FALSE; -} - -bool8 GetNameOfEnigmaBerryInPlayerParty(void) -{ - bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY); - - if(hasItem == TRUE) - GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1); - - return hasItem; -} - -void ScriptWildBattle(u16 species, u8 level, u16 item) -{ - u8 data[2]; - - ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], species, level, 0x20, 0, 0, 0, 0); - - if(item) - { - data[0] = item; - data[1] = item >> 8; - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, data); - } -} - -void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot) -{ - if(monIndex > 6) - monIndex = gPlayerPartyCount - 1; - - SetMonMoveSlot(&gPlayerParty[monIndex], move, slot); -} - -void sub_80C5568(void) -{ - gMain.savedCallback = sub_80C5580; - sub_8121E10(); -} - -void sub_80C5580(void) -{ - u8 var = gSelectedOrderFromParty[0]; - - switch(var) - { - case 0: - gScriptResult = 0; - break; - default: - gScriptResult = 1; - break; - } - - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); -} - -void ChooseBattleTowerPlayerParty(void) -{ - gMain.savedCallback = SetBattleTowerPlayerParty; - sub_8121E34(); -} - -void SetBattleTowerPlayerParty(void) -{ - u8 var = gSelectedOrderFromParty[0]; - - switch(var) - { - case 0: // player quit battle tower? - LoadPlayerParty(); - gScriptResult = 0; - break; - default: // load battle tower. - ReducePlayerPartyToThree(); - gScriptResult = 1; - break; - } - - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); -} - -void ReducePlayerPartyToThree(void) -{ - struct Pokemon party[3]; - int i; - - CpuFill32(0, party, sizeof party); - - // copy the selected pokemon according to the order. - for(i = 0; i < 3; i++) - if(gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop - party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal - - // delete the last 3 pokemon - CpuFill32(0, gPlayerParty, sizeof gPlayerParty); - - // overwrite the first 3 with the order copied to. - for(i = 0; i < 3; i++) - gPlayerParty[i] = party[i]; - - CalculatePlayerPartyCount(); -} diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c deleted file mode 100644 index 2b48cc0d8..000000000 --- a/src/script_pokemon_util_80F99CC.c +++ /dev/null @@ -1,445 +0,0 @@ -#include "global.h" -#include "battle_party_menu.h" -#include "choose_party.h" -#include "contest.h" -#include "data2.h" -#include "party_menu.h" -#include "field_fadetransition.h" -#include "palette.h" -#include "party_menu.h" -#include "pokemon.h" -#include "pokemon_summary_screen.h" -#include "rom4.h" -#include "script.h" -#include "script_pokemon_80F9.h" -#include "sound.h" -#include "string_util.h" -#include "task.h" -#include "text.h" - - - -extern u8 gPlayerPartyCount; -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; -extern u8 gUnknown_02038694; -extern u16 gScriptResult; - -extern void (*gFieldCallback)(void); - -void sub_80F99CC(void) -{ - u8 taskId; - - ScriptContext2_Enable(); - taskId = CreateTask((void *)sub_80F9A8C, 0xA); - gTasks[taskId].data[0] = 2; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); -} - -void sub_80F9A0C(void) -{ - u8 taskId; - - ScriptContext2_Enable(); - taskId = CreateTask((void *)sub_80F9A8C, 0xA); - gTasks[taskId].data[0] = 3; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); -} - -void sub_80F9A4C(void) -{ - u8 taskId; - - ScriptContext2_Enable(); - taskId = CreateTask((void *)sub_80F9A8C, 0xA); - gTasks[taskId].data[0] = 7; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); -} - -void sub_80F9A8C(u8 taskId) -{ - if(!gPaletteFade.active) - { - gPaletteFade.bufferTransferDisabled = 1; - OpenPartyMenu((u8) gTasks[taskId].data[0], 0); - DestroyTask(taskId); - } -} - -bool8 sub_80F9ACC(void) -{ - switch(EWRAM_1B000.unk264) - { - case 0: - if(EWRAM_1B000.unk266 < gPlayerPartyCount) - { - TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); - EWRAM_1B000.unk266++; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; - } - break; - case 1: - LoadHeldItemIconGraphics(); - EWRAM_1B000.unk264++; - break; - case 2: - CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); - EWRAM_1B000.unk264++; - break; - case 3: - if(sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1) - { - EWRAM_1B000.unk266++; - break; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; - break; - } - case 4: - PartyMenuPrintMonsLevelOrStatus(); - EWRAM_1B000.unk264++; - break; - case 5: - PrintPartyMenuMonNicknames(); - EWRAM_1B000.unk264++; - break; - case 6: - sub_80F9C00(); - EWRAM_1B000.unk264++; - break; - case 7: // the only case that can return true. - if(sub_806B58C(EWRAM_1B000.unk266) != 1) - { - EWRAM_1B000.unk266++; - break; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264 = 0; - return TRUE; - } - } - return FALSE; -} - -void sub_80F9C00(void) -{ - u8 i; - - for(i = 0; i < gPlayerPartyCount; i++) - { - switch(sub_80AE47C(&gPlayerParty[i])) - { - case 0: - case 3: - case 4: - sub_806BC3C(i, 0x7E); - break; - case 1: - case 2: - sub_806BC3C(i, 0x70); - break; - } - } -} - -void sub_80F9C6C(u8 var) -{ - if(!gPaletteFade.active) - { - switch(sub_806BD80(var)) - { - case 1: - PlaySE(5); - gUnknown_02038694 = sub_806CA38(var); - gSpecialVar_0x8004 = gUnknown_02038694; - sub_8123138(var); - break; - case 2: - PlaySE(5); - gUnknown_02038694 = 0xFF; - gSpecialVar_0x8004 = 0xFF; - sub_8123138(var); - break; - } - } -} - -bool8 sub_80F9CE8(void) // this is the same function as sub_80F9ACC except case 6 calls a different function. why -{ - switch(EWRAM_1B000.unk264) - { - case 0: - if(EWRAM_1B000.unk266 < gPlayerPartyCount) - { - TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); - EWRAM_1B000.unk266++; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; - } - break; - case 1: - LoadHeldItemIconGraphics(); - EWRAM_1B000.unk264++; - break; - case 2: - CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); - EWRAM_1B000.unk264++; - break; - case 3: - if(sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1) - { - EWRAM_1B000.unk266++; - break; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; - break; - } - case 4: - PartyMenuPrintMonsLevelOrStatus(); - EWRAM_1B000.unk264++; - break; - case 5: - PrintPartyMenuMonNicknames(); - EWRAM_1B000.unk264++; - break; - case 6: - sub_80F9E1C(); - EWRAM_1B000.unk264++; - break; - case 7: // the only case that can return true. - if(sub_806B58C(EWRAM_1B000.unk266) != 1) - { - EWRAM_1B000.unk266++; - break; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264 = 0; - return TRUE; - } - } - return FALSE; -} - -void sub_80F9E1C(void) -{ - u8 i; - - for(i = 0; i < gPlayerPartyCount; i++) - { - if(!sub_8040574(&gPlayerParty[i])) - sub_806BC3C(i, 0x9A); - else - sub_806BC3C(i, 0x8C); - } -} - -void sub_80F9E64(u8 var) -{ - if(!gPaletteFade.active) - { - switch(sub_806BD80(var)) - { - case 1: - PlaySE(5); - gSpecialVar_0x8004 = sub_806CA38(var); - gSpecialVar_0x8005 = sub_8040574(&gPlayerParty[gSpecialVar_0x8004]); - sub_8123138(var); - break; - case 2: - PlaySE(5); - gSpecialVar_0x8004 = 0xFF; - sub_8123138(var); - } - } -} - -void sub_80F9EEC(void) -{ - sub_809D9F0(&gPlayerParty[0], gSpecialVar_0x8004, gPlayerPartyCount - 1, c2_exit_to_overworld_2_switch, 0); - unk_2018000.unk8 = 3; - gFieldCallback = sub_8080990; -} - -void sub_80F9F3C(void) // count pokemon moves -{ - u8 i; - - gScriptResult = 0; - - for(i = 0; i < 4; i++) // checks MOVE1-MOVE4 - if(GetMonData(&gPlayerParty[gSpecialVar_0x8004], i + 13)) - gScriptResult++; -} - -void sub_80F9F84(void) -{ - struct Pokemon *party = &gPlayerParty[gSpecialVar_0x8004]; - u16 data = GetMonData(party, gSpecialVar_0x8005 + 13); - - GetMonNickname(party, gStringVar1); - StringCopy(gStringVar2, gMoveNames[data]); -} - -// no. hard -__attribute__((naked)) -void sub_80F9FDC(struct Pokemon *party, u8 var, u8 var2) -{ - 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, 0x20\n\ - mov r8, r0\n\ - adds r5, r1, 0\n\ - adds r4, r2, 0\n\ - lsls r5, 24\n\ - lsrs r5, 24\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - adds r0, r5, 0\n\ - adds r0, 0xD\n\ - str r0, [sp, 0x8]\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x8]\n\ - bl GetMonData\n\ - mov r1, sp\n\ - adds r1, 0x2\n\ - str r1, [sp, 0x14]\n\ - strh r0, [r1]\n\ - adds r3, r4, 0\n\ - adds r3, 0xD\n\ - str r3, [sp, 0xC]\n\ - mov r0, r8\n\ - adds r1, r3, 0\n\ - bl GetMonData\n\ - mov r1, sp\n\ - strh r0, [r1]\n\ - adds r7, r5, 0\n\ - adds r7, 0x11\n\ - str r7, [sp, 0x10]\n\ - mov r0, r8\n\ - adds r1, r7, 0\n\ - bl GetMonData\n\ - mov r1, sp\n\ - adds r1, 0x5\n\ - str r1, [sp, 0x18]\n\ - strb r0, [r1]\n\ - adds r3, r4, 0\n\ - adds r3, 0x11\n\ - str r3, [sp, 0x1C]\n\ - mov r0, r8\n\ - adds r1, r3, 0\n\ - bl GetMonData\n\ - add r7, sp, 0x4\n\ - mov r10, r7\n\ - strb r0, [r7]\n\ - mov r0, r8\n\ - movs r1, 0x15\n\ - bl GetMonData\n\ - mov r6, sp\n\ - adds r6, 0x6\n\ - strb r0, [r6]\n\ - ldr r1, _080FA0D8 @ =gUnknown_08208238\n\ - adds r0, r5, r1\n\ - ldrb r0, [r0]\n\ - mov r9, r0\n\ - ldrb r0, [r6]\n\ - adds r2, r0, 0\n\ - mov r3, r9\n\ - ands r2, r3\n\ - lsls r5, 1\n\ - asrs r2, r5\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - adds r1, r4, r1\n\ - ldrb r3, [r1]\n\ - adds r1, r0, 0\n\ - ands r1, r3\n\ - lsls r4, 1\n\ - asrs r1, r4\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r7, r9\n\ - bics r0, r7\n\ - strb r0, [r6]\n\ - ldrb r0, [r6]\n\ - bics r0, r3\n\ - strb r0, [r6]\n\ - lsls r2, r4\n\ - lsls r1, r5\n\ - adds r2, r1\n\ - ldrb r0, [r6]\n\ - orrs r0, r2\n\ - strb r0, [r6]\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x8]\n\ - mov r2, sp\n\ - bl SetMonData\n\ - mov r0, r8\n\ - ldr r1, [sp, 0xC]\n\ - ldr r2, [sp, 0x14]\n\ - bl SetMonData\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x10]\n\ - mov r2, r10\n\ - bl SetMonData\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x1C]\n\ - ldr r2, [sp, 0x18]\n\ - bl SetMonData\n\ - mov r0, r8\n\ - movs r1, 0x15\n\ - adds r2, r6, 0\n\ - bl SetMonData\n\ - add sp, 0x20\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\ -_080FA0D8: .4byte gUnknown_08208238\n\ - .syntax divided"); -} - -void sub_80FA0DC(void) -{ - u16 i; - - SetMonMoveSlot(&gPlayerParty[gSpecialVar_0x8004], 0, gSpecialVar_0x8005); - RemoveMonPPBonus(&gPlayerParty[gSpecialVar_0x8004], gSpecialVar_0x8005); - - for(i = gSpecialVar_0x8005; i < 3; i++) - sub_80F9FDC(&gPlayerParty[gSpecialVar_0x8004], i, i + 1); -} - -void sub_80FA148(void) -{ - struct Pokemon *party = &gPlayerParty[gSpecialVar_0x8004]; - gScriptResult = 0; - - if(GetMonData(party, MON_DATA_IS_EGG)) - gScriptResult = 1; -} diff --git a/src/secret_base.c b/src/secret_base.c deleted file mode 100644 index 4e8331f5c..000000000 --- a/src/secret_base.c +++ /dev/null @@ -1,1075 +0,0 @@ -#include "global.h" -#include "secret_base.h" -#include "decoration.h" -#include "event_data.h" -#include "field_camera.h" -#include "field_fadetransition.h" -#include "field_player_avatar.h" -#include "field_weather.h" -#include "fieldmap.h" -#include "main.h" -#include "map_constants.h" -#include "map_name_popup.h" -#include "menu.h" -#include "metatile_behavior.h" -#include "palette.h" -#include "pokemon.h" -#include "rom4.h" -#include "script.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "text.h" -#include "vars.h" - -extern u8 gUnknown_020387DC; -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; -extern u16 gSpecialVar_0x8006; -extern u16 gSpecialVar_0x8007; -extern u16 gScriptResult; -extern const struct -{ - u16 unk_083D1358_0; - u16 unk_083D1358_1; -} gUnknown_083D1358[7]; -extern const u8 gUnknown_083D1374[4 * 16]; -extern void *gUnknown_0300485C; -extern const u8 gUnknown_083D13EC[12]; -extern u8 gUnknown_081A2E14[]; - - -void sub_80BB4AC(struct SecretBaseRecord *record) // 080bb4ac -{ - u16 i; - u16 j; - record->sbr_field_0 = 0; - for (i=0; i<7; i++) - record->sbr_field_2[i] = 0xff; - for (i=0; i<4; i++) - record->trainerId[i] = 0x00; - record->sbr_field_e = 0; - record->sbr_field_10 = 0; - record->sbr_field_11 = 0; - record->sbr_field_1_0 = 0; - record->gender = 0; - record->sbr_field_1_5 = 0; - record->sbr_field_1_6 = 0; - for (i=0; i<16; i++) { - record->decorations[i] = 0; - record->decorationPos[i] = 0; - } - for (i=0; i<6; i++) { - for (j=0; j<4; j++) { - record->partyMoves[i * 4 + j] = 0; - } - record->partyPersonality[i] = 0; - record->partyEVs[i] = 0; - record->partySpecies[i] = 0; - record->partyHeldItems[i] = 0; - record->partyLevels[i] = 0; - } -} - -void ResetSecretBase(u8 idx) // 80bb594 -{ - sub_80BB4AC(&(gSaveBlock1.secretBases[idx])); -} - -void ResetSecretBases(void) // 080bb5b4 -{ - u16 i; - for (i=0; i<20; i++) - ResetSecretBase(i); -} - -void sub_80BB5D0(void) // 080bb5d0 -{ - gUnknown_020387DC = gSpecialVar_0x8004; -} - -void sub_80BB5E4(void) // 80bb5e4 -{ - u16 idx; - gScriptResult = 0; - for (idx=0; idx<20; idx++) { - if (gUnknown_020387DC != gSaveBlock1.secretBases[idx].sbr_field_0) - continue; - gScriptResult = 1; - VarSet(VAR_0x4054, idx); - break; - } -} - -void sub_80BB63C(void) // 80bb63c -{ - if (gSaveBlock1.secretBases[0].sbr_field_0) - gScriptResult = 1; - else - gScriptResult = 0; -} - -u8 sub_80BB66C(void) // 80bb66c -{ - s16 x, y; - s16 v0; - GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - v0 = MapGridGetMetatileBehaviorAt(x, y) & 0xFFF; - if (v0 == 0x90 || v0 == 0x91) - return 1; - else if (v0 == 0x92 || v0 == 0x93) - return 2; - else if (v0 == 0x9a || v0 == 0x9b) - return 3; - else if (v0 == 0x94 || v0 == 0x95) - return 4; - else if (v0 == 0x96 || v0 == 0x97 || v0 == 0x9c || v0 == 0x9d) - return 5; - else if (v0 == 0x98 || v0 == 0x99) - return 6; - return 0; -} - -void sub_80BB70C(void) // 80bb70c -{ - gSpecialVar_0x8007 = sub_80BB66C(); -} - -s16 unref_sub_80BB724(u16 *a0, u8 a1) -{ - u16 v2; - for (v2=0; v2<0x200; v2++) { - if ((a0[v2] & 0xFFF) == a1) - return (s16)v2; - } - return -1; -} - -void sub_80BB764(s16 *arg1, s16 *arg2, u16 arg3) -{ - s16 x, y; - for (y=0; yheight; y++) { - for (x=0; xwidth; x++) { - if ((gMapHeader.mapData->map[y * gMapHeader.mapData->width + x] & 0x3ff) == arg3) { - *arg1 = x; - *arg2 = y; - return; - } - } - } -} - -void sub_80BB800(void) -{ - s16 x, y; - s16 tile_id; - u16 idx; - GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - tile_id = MapGridGetMetatileIdAt(x, y); - for (idx=0; idx<7; idx++) { - if (gUnknown_083D1358[idx].unk_083D1358_0 == tile_id) { - MapGridSetMetatileIdAt(x, y, gUnknown_083D1358[idx].unk_083D1358_1 | 0xc00); - CurrentMapDrawMetatileAt(x, y); - return; - } - } - for (idx=0; idx<7; idx++) { - if (gUnknown_083D1358[idx].unk_083D1358_1 == tile_id) { - MapGridSetMetatileIdAt(x, y, gUnknown_083D1358[idx].unk_083D1358_0 | 0xc00); - CurrentMapDrawMetatileAt(x, y); - return; - } - } -} - -u8 sub_80BB8A8(u8 *arg1) -{ - u8 idx; - for (idx=0; idx<7; idx++) { - if (arg1[idx] == EOS) - return idx; - } - return 7; -} - -void sub_80BB8CC(void) -{ - u8 nameLength; - u16 idx; - gSaveBlock1.secretBases[0].sbr_field_0 = gUnknown_020387DC; - for (idx=0; idx<4; idx++) { - gSaveBlock1.secretBases[0].trainerId[idx] = gSaveBlock2.playerTrainerId[idx]; - } - VarSet(VAR_0x4054, 0); - nameLength = sub_80BB8A8(gSaveBlock2.playerName); - memset(gSaveBlock1.secretBases[0].sbr_field_2, 0xFF, 7); - StringCopyN(gSaveBlock1.secretBases[0].sbr_field_2, gSaveBlock2.playerName, nameLength); - gSaveBlock1.secretBases[0].gender = gSaveBlock2.playerGender; - VarSet(VAR_SECRET_BASE_MAP, gMapHeader.regionMapSectionId); -} - -void sub_80BB970(struct MapEvents *events) -{ - u16 bgevidx, idx, jdx; - s16 tile_id; - for (bgevidx=0; bgevidxbgEventCount; bgevidx++) { - if (events->bgEvents[bgevidx].kind == 8) { - for (jdx=0; jdx<20; jdx++) { - if (gSaveBlock1.secretBases[jdx].sbr_field_0 == events->bgEvents[bgevidx].bgUnion.secretBaseId) { - tile_id = MapGridGetMetatileIdAt(events->bgEvents[bgevidx].x + 7, events->bgEvents[bgevidx].y + 7); - for (idx=0; idx<7; idx++) { - if (gUnknown_083D1358[idx].unk_083D1358_0 == tile_id) { - MapGridSetMetatileIdAt(events->bgEvents[bgevidx].x + 7, events->bgEvents[bgevidx].y + 7, gUnknown_083D1358[idx].unk_083D1358_1 | 0xc00); - break; - } - } - break; - } - } - } - } -} - -void sub_80BBA14(void) -{ - s8 idx = 4 * (gUnknown_020387DC / 10); - warp1_set_2(MAP_GROUP_SECRET_BASE_RED_CAVE1, gUnknown_083D1374[idx], gUnknown_083D1374[idx + 1]); -} - -void sub_80BBA48(u8 taskid) -{ - u16 curbaseid; - switch (gTasks[taskid].data[0]) { - case 0: - gTasks[taskid].data[0] = 1; - break; - case 1: - if (!gPaletteFade.active) { - gTasks[taskid].data[0] = 2; - } - break; - case 2: - curbaseid = VarGet(VAR_0x4054); - if (gSaveBlock1.secretBases[curbaseid].sbr_field_10 < 0xff) - gSaveBlock1.secretBases[curbaseid].sbr_field_10 ++; - sub_80BBA14(); - warp_in(); - gFieldCallback = sub_8080990; - SetMainCallback2(CB2_LoadMap); - DestroyTask(taskid); - break; - } -} - -void sub_80BBAF0(void) -{ - CreateTask(sub_80BBA48, 0); - fade_screen(1, 0); - saved_warp2_set(0, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1); -} - -bool8 sub_80BBB24(void) -{ - if (gMapHeader.mapType == 9 && VarGet(VAR_0x4097) == 0) - return FALSE; - return TRUE; -} - -void sub_80BBB50(u8 taskid) -{ - FieldObjectTurn(&(gMapObjects[gPlayerAvatar.mapObjectId]), 2); - if (sub_807D770() == 1) { - EnableBothScriptContexts(); - DestroyTask(taskid); - } -} - -void sub_80BBB90(void) -{ - s16 x, y; - ScriptContext2_Enable(); - HideMapNamePopup(); - sub_80BB764(&x, &y, 0x220); - MapGridSetMetatileIdAt(x + 7, y + 7, 0xe20); - CurrentMapDrawMetatileAt(x + 7, y + 7); - pal_fill_black(); - CreateTask(sub_80BBB50, 0); -} - -void sub_80BBBEC(u8 taskid) -{ - s8 idx; - if (!gPaletteFade.active) { - idx = 4 * (gUnknown_020387DC / 10); - warp1_set(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, gUnknown_083D1374[idx + 2], gUnknown_083D1374[idx + 3]); - warp_in(); - gFieldCallback = sub_80BBB90; - SetMainCallback2(CB2_LoadMap); - DestroyTask(taskid); - } -} - -void sub_80BBC78(void) -{ - u8 taskid = CreateTask(sub_80BBBEC, 0); - gTasks[taskid].data[0] = 0; - fade_screen(1, 0); -} - -bool8 CurrentMapIsSecretBase(void) -{ - if (gSaveBlock1.location.mapGroup == MAP_GROUP_SECRET_BASE_SHRUB4 && (u8)(gSaveBlock1.location.mapNum) <= MAP_ID_SECRET_BASE_SHRUB4) - return TRUE; - return FALSE; -} - -#ifdef NONMATCHING -void sub_80BBCCC(u8 flagIn) -{ - u16 curBaseId; - u16 x, y; - if (CurrentMapIsSecretBase()) { - curBaseId = VarGet(VAR_0x4054); - for (x=0; x<16; x++) { - if ((u8)(gSaveBlock1.secretBases[curBaseId].decorations[x] - 1) <= 0x77 && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].decor_field_11 != 4) { - sub_80FF394((gSaveBlock1.secretBases[0].decorationPos[x] >> 4) + 7, (gSaveBlock1.secretBases[0].decorationPos[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[x]); - } - } - if (curBaseId != 0) { - sub_80BB764(&x, &y, 0x220); - MapGridSetMetatileIdAt(x + 7, y + 7, 0xe21); - } else if (flagIn == 1 && VarGet(VAR_0x4089) == 1) { - sub_80BB764(&x, &y, 0x220); - MapGridSetMetatileIdAt(x + 7, y + 7, 0xe0a); - } - } -} - -void sub_80BBDD0(void) -{ - u8 *roomdecor; - u8 *roomdecorpos; - u8 ndecor; - u8 decidx; - u8 objid = 0; - u8 metatile; - u16 curBase = VarGet(VAR_0x4054); - if (!CurrentMapIsSecretBase()) { - roomdecor = gSaveBlock1.playerRoomDecor; - roomdecorpos = gSaveBlock1.playerRoomDecorPos; - ndecor = 12; - } else { - roomdecor = gSaveBlock1.secretBases[curBase].decorations; - roomdecorpos = gSaveBlock1.secretBases[curBase].decorationPos; - ndecor = 16; - } - for (decidx=0; decidxmapObjectCount; objid++) { - if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE) - break; - } - if (objid != gMapHeader.events->mapObjectCount) { - gSpecialVar_0x8006 = roomdecorpos[decidx] >> 4; - gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF; - metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7); - if (sub_80572D8(metatile) == 1 || sub_80572EC(metatile) == 1) { - gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + 0x3f20; - VarSet(gScriptResult, gDecorations[roomdecor[decidx]].tiles[0]); - gScriptResult = gMapHeader.events->mapObjects[objid].localId; - FlagReset(gSpecialVar_0x8004 + 0xAE); - show_sprite(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - sub_805C0F8(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007); - sub_805C78C(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - gSpecialVar_0x8004 ++; - } - } - } -} - -#else -__attribute__((naked)) -void sub_80BBCCC(u8 flagIn) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - sub sp, 0x4\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - bl CurrentMapIsSecretBase\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080BBDBC\n\ - ldr r0, _080BBD70 @ =0x00004054\n\ - bl VarGet\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - movs r1, 0\n\ - mov r0, sp\n\ - strh r1, [r0]\n\ - ldr r6, _080BBD74 @ =gSaveBlock1\n\ - mov r4, sp\n\ - ldr r0, _080BBD78 @ =0x00001a2a\n\ - adds r7, r6, r0\n\ -_080BBCFC:\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 5\n\ - ldrh r1, [r4]\n\ - adds r2, r0, r1\n\ - ldr r1, _080BBD7C @ =0x00001a1a\n\ - adds r0, r6, r1\n\ - adds r1, r2, r0\n\ - ldrb r0, [r1]\n\ - subs r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x77\n\ - bhi _080BBD3A\n\ - ldr r0, _080BBD80 @ =gDecorations\n\ - ldrb r3, [r1]\n\ - lsls r1, r3, 5\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x11]\n\ - cmp r0, 0x4\n\ - beq _080BBD3A\n\ - adds r0, r2, r7\n\ - ldrb r2, [r0]\n\ - lsrs r0, r2, 4\n\ - adds r0, 0x7\n\ - movs r1, 0xF\n\ - ands r1, r2\n\ - adds r1, 0x7\n\ - adds r2, r3, 0\n\ - bl sub_80FF394\n\ -_080BBD3A:\n\ - ldrh r0, [r4]\n\ - adds r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - strh r0, [r4]\n\ - cmp r0, 0xF\n\ - bls _080BBCFC\n\ - cmp r5, 0\n\ - beq _080BBD88\n\ - mov r4, sp\n\ - adds r4, 0x2\n\ - movs r2, 0x88\n\ - lsls r2, 2\n\ - mov r0, sp\n\ - adds r1, r4, 0\n\ - bl sub_80BB764\n\ - mov r0, sp\n\ - ldrh r0, [r0]\n\ - adds r0, 0x7\n\ - ldrh r1, [r4]\n\ - adds r1, 0x7\n\ - ldr r2, _080BBD84 @ =0x00000e21\n\ - bl MapGridSetMetatileIdAt\n\ - b _080BBDBC\n\ - .align 2, 0\n\ -_080BBD70: .4byte 0x00004054\n\ -_080BBD74: .4byte gSaveBlock1\n\ -_080BBD78: .4byte 0x00001a2a\n\ -_080BBD7C: .4byte 0x00001a1a\n\ -_080BBD80: .4byte gDecorations\n\ -_080BBD84: .4byte 0x00000e21\n\ -_080BBD88:\n\ - mov r0, r8\n\ - cmp r0, 0x1\n\ - bne _080BBDBC\n\ - ldr r0, _080BBDC8 @ =0x00004089\n\ - bl VarGet\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x1\n\ - bne _080BBDBC\n\ - mov r4, sp\n\ - adds r4, 0x2\n\ - movs r2, 0x88\n\ - lsls r2, 2\n\ - mov r0, sp\n\ - adds r1, r4, 0\n\ - bl sub_80BB764\n\ - mov r0, sp\n\ - ldrh r0, [r0]\n\ - adds r0, 0x7\n\ - ldrh r1, [r4]\n\ - adds r1, 0x7\n\ - ldr r2, _080BBDCC @ =0x00000e0a\n\ - bl MapGridSetMetatileIdAt\n\ -_080BBDBC:\n\ - add sp, 0x4\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080BBDC8: .4byte 0x00004089\n\ -_080BBDCC: .4byte 0x00000e0a\n\ -.syntax divided\n"); -} - -__attribute__((naked)) -void sub_80BBDD0(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, 0x14\n\ - ldr r0, _080BBE00 @ =0x00004054\n\ - bl VarGet\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - bl CurrentMapIsSecretBase\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _080BBE08\n\ - ldr r0, _080BBE04 @ =gSaveBlock1 + 0x2688\n\ - str r0, [sp, 0x4]\n\ - adds r0, 0xC\n\ - str r0, [sp, 0x8]\n\ - movs r1, 0xC\n\ - str r1, [sp, 0xC]\n\ - b _080BBE1E\n\ - .align 2, 0\n\ -_080BBE00: .4byte 0x00004054\n\ -_080BBE04: .4byte gSaveBlock1 + 0x2688\n\ -_080BBE08:\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 5\n\ - ldr r0, _080BBF7C @ =gSaveBlock1 + 0x1A1A\n\ - adds r2, r1, r0\n\ - str r2, [sp, 0x4]\n\ - adds r0, 0x10\n\ - adds r1, r0\n\ - str r1, [sp, 0x8]\n\ - movs r3, 0x10\n\ - str r3, [sp, 0xC]\n\ -_080BBE1E:\n\ - movs r6, 0\n\ - ldr r4, [sp, 0xC]\n\ - cmp r6, r4\n\ - bcc _080BBE28\n\ - b _080BBF6C\n\ -_080BBE28:\n\ - ldr r5, _080BBF80 @ =gSaveBlock1\n\ - mov r10, r5\n\ -_080BBE2C:\n\ - ldr r1, [sp, 0x4]\n\ - adds r0, r1, r6\n\ - ldrb r1, [r0]\n\ - mov r9, r0\n\ - adds r2, r6, 0x1\n\ - str r2, [sp, 0x10]\n\ - cmp r1, 0\n\ - bne _080BBE3E\n\ - b _080BBF5E\n\ -_080BBE3E:\n\ - ldrb r0, [r0]\n\ - lsls r0, 5\n\ - ldr r3, _080BBF84 @ =gDecorations\n\ - adds r0, r3\n\ - ldrb r0, [r0, 0x11]\n\ - cmp r0, 0x4\n\ - beq _080BBE4E\n\ - b _080BBF5E\n\ -_080BBE4E:\n\ - movs r5, 0\n\ - ldr r0, _080BBF88 @ =gMapHeader\n\ - ldr r2, [r0, 0x4]\n\ - ldrb r3, [r2]\n\ - mov r8, r0\n\ - cmp r5, r3\n\ - bcs _080BBE8E\n\ - ldr r0, [r2, 0x4]\n\ - ldrh r1, [r0, 0x14]\n\ - ldr r4, _080BBF8C @ =gSpecialVar_0x8004\n\ - ldrh r0, [r4]\n\ - adds r0, 0xAE\n\ - adds r7, r4, 0\n\ - cmp r1, r0\n\ - beq _080BBE8E\n\ - adds r4, r2, 0\n\ - adds r2, r3, 0\n\ -_080BBE70:\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, r2\n\ - bcs _080BBE8E\n\ - ldr r1, [r4, 0x4]\n\ - lsls r0, r5, 1\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldrh r1, [r0, 0x14]\n\ - ldrh r0, [r7]\n\ - adds r0, 0xAE\n\ - cmp r1, r0\n\ - bne _080BBE70\n\ -_080BBE8E:\n\ - mov r1, r8\n\ - ldr r0, [r1, 0x4]\n\ - ldrb r0, [r0]\n\ - cmp r5, r0\n\ - beq _080BBF5E\n\ - ldr r7, _080BBF90 @ =gSpecialVar_0x8006\n\ - ldr r2, [sp, 0x8]\n\ - adds r1, r2, r6\n\ - ldrb r0, [r1]\n\ - lsrs r0, 4\n\ - strh r0, [r7]\n\ - ldr r6, _080BBF94 @ =gSpecialVar_0x8007\n\ - ldrb r1, [r1]\n\ - movs r0, 0xF\n\ - ands r0, r1\n\ - strh r0, [r6]\n\ - ldrh r0, [r7]\n\ - adds r0, 0x7\n\ - ldrh r1, [r6]\n\ - adds r1, 0x7\n\ - bl MapGridGetMetatileBehaviorAt\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - adds r0, r4, 0\n\ - bl sub_80572D8\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - beq _080BBEDA\n\ - adds r0, r4, 0\n\ - bl sub_80572EC\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _080BBF5E\n\ -_080BBEDA:\n\ - mov r3, r8\n\ - ldr r0, [r3, 0x4]\n\ - ldr r1, [r0, 0x4]\n\ - lsls r4, r5, 1\n\ - adds r4, r5\n\ - lsls r4, 3\n\ - adds r1, r4, r1\n\ - ldr r5, _080BBF98 @ =0x00003f20\n\ - adds r0, r5, 0\n\ - ldrb r1, [r1, 0x1]\n\ - adds r0, r1\n\ - ldr r1, _080BBF9C @ =gScriptResult\n\ - strh r0, [r1]\n\ - ldrh r0, [r1]\n\ - mov r2, r9\n\ - ldrb r1, [r2]\n\ - lsls r1, 5\n\ - ldr r3, _080BBFA0 @ =gDecorations + 0x1C\n\ - adds r1, r3\n\ - ldr r1, [r1]\n\ - ldrh r1, [r1]\n\ - bl VarSet\n\ - mov r5, r8\n\ - ldr r0, [r5, 0x4]\n\ - ldr r0, [r0, 0x4]\n\ - adds r4, r0\n\ - ldrb r0, [r4]\n\ - ldr r1, _080BBF9C @ =gScriptResult\n\ - strh r0, [r1]\n\ - ldr r2, _080BBF8C @ =gSpecialVar_0x8004\n\ - ldrh r0, [r2]\n\ - adds r0, 0xAE\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - bl FlagReset\n\ - ldr r3, _080BBF9C @ =gScriptResult\n\ - ldrb r0, [r3]\n\ - mov r4, r10\n\ - ldrb r1, [r4, 0x5]\n\ - ldrb r2, [r4, 0x4]\n\ - bl show_sprite\n\ - ldr r5, _080BBF9C @ =gScriptResult\n\ - ldrb r0, [r5]\n\ - ldrb r1, [r4, 0x5]\n\ - ldrb r2, [r4, 0x4]\n\ - movs r4, 0\n\ - ldrsh r3, [r7, r4]\n\ - movs r5, 0\n\ - ldrsh r4, [r6, r5]\n\ - str r4, [sp]\n\ - bl sub_805C0F8\n\ - ldr r1, _080BBF9C @ =gScriptResult\n\ - ldrb r0, [r1]\n\ - mov r2, r10\n\ - ldrb r1, [r2, 0x5]\n\ - ldrb r2, [r2, 0x4]\n\ - bl sub_805C78C\n\ - ldr r3, _080BBF8C @ =gSpecialVar_0x8004\n\ - ldrh r0, [r3]\n\ - adds r0, 0x1\n\ - strh r0, [r3]\n\ -_080BBF5E:\n\ - ldr r4, [sp, 0x10]\n\ - lsls r0, r4, 24\n\ - lsrs r6, r0, 24\n\ - ldr r5, [sp, 0xC]\n\ - cmp r6, r5\n\ - bcs _080BBF6C\n\ - b _080BBE2C\n\ -_080BBF6C:\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 {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080BBF7C: .4byte gSaveBlock1 + 0x1A1A\n\ -_080BBF80: .4byte gSaveBlock1\n\ -_080BBF84: .4byte gDecorations\n\ -_080BBF88: .4byte gMapHeader\n\ -_080BBF8C: .4byte gSpecialVar_0x8004\n\ -_080BBF90: .4byte gSpecialVar_0x8006\n\ -_080BBF94: .4byte gSpecialVar_0x8007\n\ -_080BBF98: .4byte 0x00003f20\n\ -_080BBF9C: .4byte gScriptResult\n\ -_080BBFA0: .4byte gDecorations + 0x1C\n\ -.syntax divided\n"); -} -#endif - -void sub_80BBFA4(void) -{ - int curBase = VarGet(VAR_0x4054); - VarSet(VAR_0x401F, gUnknown_083D13EC[sub_80BCCA4(curBase)]); -} - -void sub_80BBFD8(s16 *position, struct MapEvents *events) -{ - s16 bgevtidx; - for (bgevtidx=0; bgevtidxbgEventCount; bgevtidx++) { - if (events->bgEvents[bgevtidx].kind == 8 && position[0] == events->bgEvents[bgevtidx].x + 7 && position[1] == events->bgEvents[bgevtidx].y + 7) { - gUnknown_020387DC = events->bgEvents[bgevtidx].bgUnion.secretBaseId; - break; - } - } -} - -void sub_80BC038(s16 *position, struct MapEvents *events) -{ - sub_80BBFD8(position, events); - sub_80BB5E4(); - ScriptContext1_SetupScript(gUnknown_081A2E14); -} - -bool8 sub_80BC050(void) -{ - sub_80BB5D0(); - sub_80BB5E4(); - if (gScriptResult == 1) - return FALSE; - return TRUE; -} - -void sub_80BC074(u8 taskid) -{ - switch (gTasks[taskid].data[0]) { - case 0: - ScriptContext2_Enable(); - gTasks[taskid].data[0] = 1; - break; - case 1: - if (!gPaletteFade.active) { - gTasks[taskid].data[0] = 2; - } - break; - case 2: - copy_saved_warp2_bank_and_enter_x_to_warp1(0x7E); - warp_in(); - gFieldCallback = mapldr_default; - SetMainCallback2(CB2_LoadMap); - ScriptContext2_Disable(); - DestroyTask(taskid); - break; - } -} - -void sub_80BC0F8(void) { - CreateTask(sub_80BC074, 0); - fade_screen(1, 0); -} - -void sub_80BC114(void) { - if (gSaveBlock1.secretBases[0].sbr_field_0 != gUnknown_020387DC) - gScriptResult = 1; - else - gScriptResult = 0; -} - -u8 sub_80BC14C(u8 sbid) -{ - s16 idx; - for (idx=0; idx<20; idx++) { - if (gSaveBlock1.secretBases[idx].sbr_field_0 == sbid) - return idx; - } - return 0; -} - -u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190 - u8 local1; - u8 *str; - - local1 = sub_80BB8A8(gSaveBlock1.secretBases[arg1].sbr_field_2); - - str = StringCopyN(dest, gSaveBlock1.secretBases[arg1].sbr_field_2, local1); - str[0] = EOS; - -#if ENGLISH - return StringAppend(dest, gOtherText_PlayersBase); -#elif GERMAN - return de_sub_8073174(dest, gOtherText_PlayersBase); -#endif -} - -u8 *GetSecretBaseMapName(u8 *dest) { - gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_0; - return sub_80BC190(dest, VarGet(VAR_0x4054)); -} - -void sub_80BC224(void) { - u8 *var0 = gSaveBlock1.secretBases[(u8)VarGet(VAR_0x4054)].sbr_field_2; - u8 *var1 = gStringVar1; - u8 var2 = sub_80BB8A8(var0); - u8 *var3 = StringCopyN(var1, var0, var2); - *var3 = EOS; -} - -u8 sub_80BC268(u8 foo) { // 80bc268 - if (gSaveBlock1.secretBases[foo].sbr_field_1_6) - return 1; - return 0; -} - -u8 sub_80BC298(struct Pokemon *mon) { // 80bc298 - u16 evsum = GetMonData(mon, MON_DATA_HP_EV); - evsum += GetMonData(mon, MON_DATA_ATK_EV); - evsum += GetMonData(mon, MON_DATA_DEF_EV); - evsum += GetMonData(mon, MON_DATA_SPD_EV); - evsum += GetMonData(mon, MON_DATA_SPATK_EV); - evsum += GetMonData(mon, MON_DATA_SPDEF_EV); - return (u8)(evsum / 6); -} - -#ifdef NONMATCHING -void sub_80BC300(void) -{ - u16 moveidx; - u16 sbpartyidx = 0; - int resetVal = 0; - u16 partyidx = 0; - while (partyidx < 6) { - partyidx ++; - for (moveidx=0; moveidx<4; moveidx++) { - gSaveBlock1.secretBases[0].partyMoves[(partyidx - 1) * 6 + moveidx] = resetVal; - } - gSaveBlock1.secretBases[0].partySpecies[partyidx - 1] = resetVal; - gSaveBlock1.secretBases[0].partyHeldItems[partyidx - 1] = resetVal; - gSaveBlock1.secretBases[0].partyLevels[partyidx - 1] = resetVal; - gSaveBlock1.secretBases[0].partyPersonality[partyidx - 1] = resetVal; - gSaveBlock1.secretBases[0].partyEVs[partyidx - 1] = resetVal; - if (GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_SPECIES) != 0 && !GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_IS_EGG)) { - sbpartyidx ++; - for (moveidx=0; moveidx<4; moveidx++) { - gSaveBlock1.secretBases[0].partyMoves[(sbpartyidx - 1) * 6 + moveidx] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_MOVE1 + moveidx); - } - gSaveBlock1.secretBases[0].partySpecies[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_SPECIES); - gSaveBlock1.secretBases[0].partyHeldItems[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_HELD_ITEM); - gSaveBlock1.secretBases[0].partyLevels[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_LEVEL); - gSaveBlock1.secretBases[0].partyPersonality[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_PERSONALITY); - gSaveBlock1.secretBases[0].partyEVs[sbpartyidx - 1] = sub_80BC298(&(gPlayerParty[partyidx - 1])); - } - } -} -#else -__attribute__((naked)) -void sub_80BC300(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, 0xC\n\ - movs r0, 0\n\ - mov r10, r0\n\ - movs r6, 0\n\ - mov r9, r6\n\ -_080BC314:\n\ - movs r4, 0\n\ - lsls r3, r6, 2\n\ - lsls r2, r6, 1\n\ - ldr r7, _080BC424 @ =gPlayerParty\n\ - adds r1, r6, 0x1\n\ - str r1, [sp]\n\ - adds r1, r3, 0\n\ -_080BC322:\n\ - adds r0, r1, r4\n\ - lsls r0, 1\n\ - ldr r5, _080BC428 @ =gSaveBlock1 + 0x1A54\n\ - adds r0, r5, r0\n\ - mov r5, r9\n\ - strh r5, [r0]\n\ - adds r0, r4, 0x1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - cmp r4, 0x3\n\ - bls _080BC322\n\ - ldr r1, _080BC42C @ =gSaveBlock1 + 0x1A84\n\ - adds r0, r1, r2\n\ - strh r5, [r0]\n\ - ldr r5, _080BC430 @ =gSaveBlock1 + 0x1A90\n\ - adds r0, r5, r2\n\ - mov r1, r9\n\ - strh r1, [r0]\n\ - ldr r2, _080BC434 @ =gSaveBlock1 + 0x1A9C\n\ - adds r0, r2, r6\n\ - mov r5, r9\n\ - strb r5, [r0]\n\ - ldr r1, _080BC438 @ =gSaveBlock1 + 0x1A3C\n\ - adds r0, r1, r3\n\ - mov r2, r9\n\ - str r2, [r0]\n\ - ldr r3, _080BC43C @ =gSaveBlock1 + 0x1AA2\n\ - adds r0, r3, r6\n\ - strb r2, [r0]\n\ - movs r0, 0x64\n\ - adds r5, r6, 0\n\ - muls r5, r0\n\ - adds r4, r5, r7\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _080BC408\n\ - adds r0, r4, 0\n\ - movs r1, 0x2D\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _080BC408\n\ - movs r4, 0\n\ - mov r0, r10\n\ - lsls r0, 2\n\ - mov r8, r0\n\ - mov r1, r10\n\ - lsls r7, r1, 1\n\ - adds r1, 0x1\n\ - str r1, [sp, 0x4]\n\ - ldr r2, _080BC424 @ =gPlayerParty\n\ -_080BC38E:\n\ - adds r1, r4, 0\n\ - adds r1, 0xD\n\ - adds r0, r5, r2\n\ - str r2, [sp, 0x8]\n\ - bl GetMonData\n\ - mov r3, r8\n\ - adds r1, r3, r4\n\ - lsls r1, 1\n\ - ldr r3, _080BC428 @ =gSaveBlock1 + 0x1A54\n\ - adds r1, r3, r1\n\ - strh r0, [r1]\n\ - adds r0, r4, 0x1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - ldr r2, [sp, 0x8]\n\ - cmp r4, 0x3\n\ - bls _080BC38E\n\ - movs r0, 0x64\n\ - adds r4, r6, 0\n\ - muls r4, r0\n\ - ldr r0, _080BC424 @ =gPlayerParty\n\ - adds r4, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - ldr r5, _080BC42C @ =gSaveBlock1 + 0x1A84\n\ - adds r1, r5, r7\n\ - strh r0, [r1]\n\ - adds r0, r4, 0\n\ - movs r1, 0xC\n\ - bl GetMonData\n\ - ldr r2, _080BC430 @ =gSaveBlock1 + 0x1A90\n\ - adds r1, r2, r7\n\ - strh r0, [r1]\n\ - adds r0, r4, 0\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - ldr r1, _080BC434 @ =gSaveBlock1 + 0x1A9C\n\ - add r1, r10\n\ - strb r0, [r1]\n\ - adds r0, r4, 0\n\ - movs r1, 0\n\ - bl GetMonData\n\ - ldr r1, _080BC438 @ =gSaveBlock1 + 0x1A3C\n\ - add r1, r8\n\ - str r0, [r1]\n\ - adds r0, r4, 0\n\ - bl sub_80BC298\n\ - ldr r1, _080BC43C @ =gSaveBlock1 + 0x1AA2\n\ - add r1, r10\n\ - strb r0, [r1]\n\ - ldr r3, [sp, 0x4]\n\ - lsls r0, r3, 16\n\ - lsrs r0, 16\n\ - mov r10, r0\n\ -_080BC408:\n\ - ldr r5, [sp]\n\ - lsls r0, r5, 16\n\ - lsrs r6, r0, 16\n\ - cmp r6, 0x5\n\ - bls _080BC314\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 {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080BC424: .4byte gPlayerParty\n\ -_080BC428: .4byte gSaveBlock1 + 0x1A54\n\ -_080BC42C: .4byte gSaveBlock1 + 0x1A84\n\ -_080BC430: .4byte gSaveBlock1 + 0x1A90\n\ -_080BC434: .4byte gSaveBlock1 + 0x1A9C\n\ -_080BC438: .4byte gSaveBlock1 + 0x1A3C\n\ -_080BC43C: .4byte gSaveBlock1 + 0x1AA2\n\ -.syntax divided\n"); -} -#endif - -void sub_80BC440(void) -{ - u16 backupValue = gSaveBlock1.secretBases[0].sbr_field_e; - ResetSecretBase(0); - gSaveBlock1.secretBases[0].sbr_field_e = backupValue; - sub_80BC0F8(); -} - -void SecretBasePC_PackUp(void) -{ - IncrementGameStat(20); - sub_80BC440(); -} diff --git a/src/shop.c b/src/shop.c deleted file mode 100644 index d53646a88..000000000 --- a/src/shop.c +++ /dev/null @@ -1,342 +0,0 @@ -#include "global.h" -#include "shop.h" -#include "decompress.h" -#include "field_fadetransition.h" -#include "field_weather.h" -#include "item_menu.h" -#include "main.h" -#include "menu.h" -#include "menu_helpers.h" -#include "money.h" -#include "palette.h" -#include "script.h" -#include "sound.h" -#include "sprite.h" -#include "strings.h" -#include "task.h" -#include "tv.h" -#include "unknown_task.h" - -struct UnknownShopStruct -{ - /* 0x0 */ void (* callback) (void); - /* 0x4 */ u16 *itemList; - /* 0x8 */ u8 itemCount; - /* 0x9 */ u8 unk9; - /* 0xA */ u8 unkA; - /* 0xB */ u8 unkB; - /* 0xC */ bool8 unkC; - // unknown size -}; - -extern struct UnknownShopStruct gUnknown_03000708; -extern struct MenuAction gUnknown_083CC6D0[]; - -extern u8 gUnknown_083CC6E8[]; -extern u8 gUnknown_083CC6EB[]; -extern u8 gBuyMenuFrame_Gfx[]; - -extern u16 gBuyMenuFrame_Tilemap[]; -extern u16 gMenuMoneyPal[16]; -extern u16 gUnknown_083CC710[2]; - -u8 CreateShopMenu(bool8 var) -{ - ScriptContext2_Enable(); - gUnknown_03000708.unkC = var; - gUnknown_03000708.unk9 = 0; - - if(var == FALSE) - { - gUnknown_03000708.unkA = 2; - MenuDrawTextWindow(0, 0, 10, 7); - PrintMenuItemsReordered(1, 1, 3, gUnknown_083CC6D0, (u8 *)gUnknown_083CC6E8); - } - else - { - gUnknown_03000708.unkA = 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); - - return CreateTask(sub_80B2E38, 8); -} - -void SetShopMenuCallback(void *callbackPtr) -{ - gUnknown_03000708.callback = callbackPtr; -} - -void SetShopItemsForSale(u16 *items) -{ - u16 i = 0; - - gUnknown_03000708.itemList = items; - gUnknown_03000708.itemCount = 0; - - while (gUnknown_03000708.itemList[i]) - { - gUnknown_03000708.itemCount++; - i++; - } -} - -void sub_80B2E38(u8 var) -{ - const u8 local = var; - - if(gMain.newAndRepeatedKeys & 0x40) - { - if(gUnknown_03000708.unk9) - { - PlaySE(0x5); - gUnknown_03000708.unk9 = MoveMenuCursor(-1); - } - } - else if(gMain.newAndRepeatedKeys & 0x80) - { - if(gUnknown_03000708.unk9 != gUnknown_03000708.unkA) - { - PlaySE(0x5); - gUnknown_03000708.unk9 = MoveMenuCursor(1); - } - } - else if (gMain.newKeys & 1) - { - PlaySE(0x5); - if(!gUnknown_03000708.unkC) - { - gUnknown_083CC6D0[gUnknown_083CC6E8[gUnknown_03000708.unk9]].func(local); - } - else - { - gUnknown_083CC6D0[gUnknown_083CC6EB[gUnknown_03000708.unk9]].func(local); - } - } - else if(gMain.newKeys & 2) - { - PlaySE(0x5); - HandleShopMenuQuit(local); - } -} - -void sub_80B2EFC(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)BuyMenuDrawGraphics >> 16; - gTasks[taskId].data[9] = (u32)BuyMenuDrawGraphics; - gTasks[taskId].func = sub_80B2FA0; - fade_screen(1, 0); -} - -void sub_80B2F30(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_80A6300 >> 16; - gTasks[taskId].data[9] = (u32)sub_80A6300; - gTasks[taskId].func = sub_80B2FA0; - fade_screen(1, 0); -} - -void HandleShopMenuQuit(u8 taskId) -{ - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(0, 0, 11, 8); - sub_80BE3BC(); // in tv.s? - ScriptContext2_Disable(); - DestroyTask(taskId); - - if(gUnknown_03000708.callback) - gUnknown_03000708.callback(); // run the callback if it exists. -} - -void sub_80B2FA0(u8 taskId) -{ - if(!gPaletteFade.active) - { - SetMainCallback2((void *)((u16)gTasks[taskId].data[8] << 16 | (u16)gTasks[taskId].data[9])); - DestroyTask(taskId); - } -} - -void ReturnToShopMenuAfterExitingSellMenu(u8 taskId) -{ - CreateShopMenu(gUnknown_03000708.unkC); - DestroyTask(taskId); -} - -void Task_ExitSellMenu(u8 taskId) -{ - if(sub_807D770() == 1) - { - if(gUnknown_03000708.unkC == 2) - DisplayItemMessageOnField(taskId, gOtherText_CanIHelpYou, ReturnToShopMenuAfterExitingSellMenu, 0); - else - DisplayItemMessageOnField(taskId, gOtherText_AnythingElse, ReturnToShopMenuAfterExitingSellMenu, 0); - } -} - -void sub_80B3050(void) -{ - pal_fill_black(); - CreateTask(Task_ExitSellMenu, 0x8); -} - -void sub_80B3068(u8 taskId) -{ - Task_ExitSellMenu(taskId); -} - -void unref_sub_80B3078(u8 taskId) -{ - gTasks[taskId].func = Task_ExitSellMenu; -} - -void sub_80B3094(void) -{ - AnimateSprites(); - BuildOamBuffer(); - RunTasks(); - UpdatePaletteFade(); -} - -void sub_80B30AC(void) -{ - void *addr; - void *addr2; - void *addr3; - u16 *tempArr; - u16 *tempArr2; - u16 *tempArr3; - - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - - // temp vars needed to match for some dumb reason - tempArr = gBGTilemapBuffers[1]; - addr = (void *)(VRAM + 0xE800); - DmaCopy16(3, tempArr, addr, 0x800); - tempArr2 = gBGTilemapBuffers[2]; - addr2 = (void *)(VRAM + 0xE000); - DmaCopy16(3, tempArr2, addr2, 0x800); - tempArr3 = gBGTilemapBuffers[3]; - addr3 = (void *)(VRAM + 0xF000); - DmaCopy16(3, tempArr3, addr3, 0x800); -} - -// this function is fugly. pls fix -void BuyMenuDrawGraphics(void) -{ - void *addr; - register u16 zero2 asm("r5"); - - sub_80F9438(); - remove_some_task(); - REG_BG1HOFS = (zero2 = 0); - REG_BG1VOFS = zero2; - REG_BG2HOFS = zero2; - REG_BG2VOFS = zero2; - REG_BG3HOFS = zero2; - REG_BG3VOFS = zero2; - gPaletteFade.bufferTransferDisabled = 1; - addr = (void*)OAM; - { - register const u32 zero asm("r6") = 0; - DmaFill32(3, zero, addr, OAM_SIZE); - LZDecompressVram(gBuyMenuFrame_Gfx, (void*)(VRAM + 0x7C00)); - sub_800D238(gBuyMenuFrame_Tilemap, (void *)0x02018000); - LoadCompressedPalette(gMenuMoneyPal, 0xC0, sizeof(gMenuMoneyPal)); - FreeAllSpritePalettes(); - ResetPaletteFade(); - ResetSpriteData(); - ResetTasks(); - SetUpWindowConfig(&gWindowConfig_81E6DFC); - InitMenuWindow(&gWindowConfig_81E6DFC); - BuyMenuDrawMapGraphics(); - gUnknown_03000708.unk9 = zero; - gUnknown_03000708.unkB = zero2; - MenuZeroFillWindowRect(0, 0, 0x20, 0x20); - sub_80B7C14(gSaveBlock1.money, 0, 0); - sub_80B3764(0, 7); - sub_80B37EC(); - sub_80B3270(); - CreateTask(sub_80B40E8, 0x8); - sub_80B3240(); - asm("":::"r4"); // what?? - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, zero); - gPaletteFade.bufferTransferDisabled = 0; - SetVBlankCallback(sub_80B30AC); - SetMainCallback2(sub_80B3094); - } -} - -void sub_80B3240(void) -{ - u16 tempArr[2]; - - memcpy(tempArr, gUnknown_083CC710, sizeof(tempArr)); - LoadPalette(&tempArr[1], 0xD1, 2); - LoadPalette(&tempArr[0], 0xD8, 2); -} - -void sub_80B3270(void) -{ - sub_80F944C(); - - if(gUnknown_03000708.itemCount > 7) - { - CreateVerticalScrollIndicators(0, 172, 12); - CreateVerticalScrollIndicators(1, 172, 148); - sub_80F979C(0, 1); - } -} - -void sub_80B32A4(void) -{ - if(gUnknown_03000708.unkB == 0) - sub_80F979C(0, 1); - else - sub_80F979C(0, 0); - - if(gUnknown_03000708.unkB + 7 >= gUnknown_03000708.itemCount) - sub_80F979C(1, 1); - else - sub_80F979C(1, 0); -} - -void sub_80B32EC(u16 *array, s16 offset1, s16 offset2) -{ - array[offset1 + offset2] = 0xC3E1; - array[offset1 + offset2 + 1] = 0xC3E1; -} - -void BuyMenuDrawMapMetatileLayer(u16 *array, s16 offset1, s16 offset2, u16 *array2) -{ - array[offset1 + offset2] = array2[0]; - array[offset1 + offset2 + 1] = array2[1]; - array[offset1 + offset2 + 32] = array2[2]; - array[offset1 + offset2 + 33] = array2[3]; -} - -void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s8 var4) -{ - u8 tempVar4 = var4; - s16 offset1 = var1 * 2; - s16 offset2 = (var2 * 0x40) + 0x40; - - switch(tempVar4) - { - case 0: // _080B335C - BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3); - BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[1], offset1, offset2, var3 + 4); - break; - case 1: // _080B3364 - BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[3], offset1, offset2, var3); - BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3 + 4); - break; - case 2: // _080B3398 - BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[3], offset1, offset2, var3); - BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[1], offset1, offset2, var3 + 4); - break; - } -} diff --git a/src/siirtc.c b/src/siirtc.c deleted file mode 100644 index 965a068f1..000000000 --- a/src/siirtc.c +++ /dev/null @@ -1,432 +0,0 @@ -// Ruby/Sapphire/Emerald cartridges contain a Seiko Instruments Inc. (SII) -// S-3511A real-time clock (RTC). This library ("SIIRTC_V001") is for -// communicating with the RTC. - -#include "gba/gba.h" -#include "siirtc.h" - -#define STATUS_INTFE 0x02 // frequency interrupt enable -#define STATUS_INTME 0x08 // per-minute interrupt enable -#define STATUS_INTAE 0x20 // alarm interrupt enable -#define STATUS_24HOUR 0x40 // 0: 12-hour mode, 1: 24-hour mode -#define STATUS_POWER 0x80 // power on or power failure occurred - -#define TEST_MODE 0x80 // flag in the "second" byte - -#define ALARM_AM 0x00 -#define ALARM_PM 0x80 - -#define OFFSET_YEAR offsetof(struct SiiRtcInfo, year) -#define OFFSET_MONTH offsetof(struct SiiRtcInfo, month) -#define OFFSET_DAY offsetof(struct SiiRtcInfo, day) -#define OFFSET_DAY_OF_WEEK offsetof(struct SiiRtcInfo, dayOfWeek) -#define OFFSET_HOUR offsetof(struct SiiRtcInfo, hour) -#define OFFSET_MINUTE offsetof(struct SiiRtcInfo, minute) -#define OFFSET_SECOND offsetof(struct SiiRtcInfo, second) -#define OFFSET_STATUS offsetof(struct SiiRtcInfo, status) -#define OFFSET_ALARM_HOUR offsetof(struct SiiRtcInfo, alarmHour) -#define OFFSET_ALARM_MINUTE offsetof(struct SiiRtcInfo, alarmMinute) - -#define INFO_BUF(info, index) (*((u8 *)(info) + (index))) - -#define DATETIME_BUF(info, index) INFO_BUF(info, OFFSET_YEAR + index) -#define DATETIME_BUF_LEN (OFFSET_SECOND - OFFSET_YEAR + 1) - -#define TIME_BUF(info, index) INFO_BUF(info, OFFSET_HOUR + index) -#define TIME_BUF_LEN (OFFSET_SECOND - OFFSET_HOUR + 1) - -#define WR 0 // command for writing data -#define RD 1 // command for reading data - -#define CMD(n) (0x60 | (n << 1)) - -#define CMD_RESET CMD(0) -#define CMD_STATUS CMD(1) -#define CMD_DATETIME CMD(2) -#define CMD_TIME CMD(3) -#define CMD_ALARM CMD(4) - -#define GPIO_PORT_DATA (*(vu16 *)0x80000C4) -#define GPIO_PORT_DIRECTION (*(vu16 *)0x80000C6) -#define GPIO_PORT_READ_ENABLE (*(vu16 *)0x80000C8) - -extern vu16 GPIOPortDirection; - -static u16 sDummy; // unused variable -static bool8 sLocked; - -static int WriteCommand(u8 value); -static int WriteData(u8 value); -static u8 ReadData(); -static void EnableGpioPortRead(); -static void DisableGpioPortRead(); - -static const char AgbLibRtcVersion[] = "SIIRTC_V001"; - -void SiiRtcUnprotect() -{ - EnableGpioPortRead(); - sLocked = FALSE; -} - -void SiiRtcProtect() -{ - DisableGpioPortRead(); - sLocked = TRUE; -} - -u8 SiiRtcProbe() -{ - u8 errorCode; - struct SiiRtcInfo rtc; - - if (!SiiRtcGetStatus(&rtc)) - return 0; - - errorCode = 0; - - if ((rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == SIIRTCINFO_POWER - || (rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == 0) - { - // The RTC is in 12-hour mode. Reset it and switch to 24-hour mode. - - // Note that the conditions are redundant and equivalent to simply - // "(rtc.status & SIIRTCINFO_24HOUR) == 0". It's possible that this - // was also intended to handle resetting the clock after power failure - // but a mistake was made. - - if (!SiiRtcReset()) - return 0; - - errorCode++; - } - - SiiRtcGetTime(&rtc); - - if (rtc.second & TEST_MODE) - { - // The RTC is in test mode. Reset it to leave test mode. - - if (!SiiRtcReset()) - return (errorCode << 4) & 0xF0; - - errorCode++; - } - - return (errorCode << 4) | 1; -} - -bool8 SiiRtcReset() -{ - u8 result; - struct SiiRtcInfo rtc; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_RESET | WR); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - rtc.status = SIIRTCINFO_24HOUR; - - result = SiiRtcSetStatus(&rtc); - - return result; -} - -bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc) -{ - u8 statusData; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_STATUS | RD); - - GPIO_PORT_DIRECTION = 5; - - statusData = ReadData(); - - rtc->status = (statusData & (STATUS_POWER | STATUS_24HOUR)) - | ((statusData & STATUS_INTAE) >> 3) - | ((statusData & STATUS_INTME) >> 2) - | ((statusData & STATUS_INTFE) >> 1); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc) -{ - u8 statusData; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - statusData = STATUS_24HOUR - | ((rtc->status & SIIRTCINFO_INTAE) << 3) - | ((rtc->status & SIIRTCINFO_INTME) << 2) - | ((rtc->status & SIIRTCINFO_INTFE) << 1); - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_STATUS | WR); - - WriteData(statusData); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc) -{ - u8 i; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_DATETIME | RD); - - GPIO_PORT_DIRECTION = 5; - - for (i = 0; i < DATETIME_BUF_LEN; i++) - DATETIME_BUF(rtc, i) = ReadData(); - - INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc) -{ - u8 i; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_DATETIME | WR); - - for (i = 0; i < DATETIME_BUF_LEN; i++) - WriteData(DATETIME_BUF(rtc, i)); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc) -{ - u8 i; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_TIME | RD); - - GPIO_PORT_DIRECTION = 5; - - for (i = 0; i < TIME_BUF_LEN; i++) - TIME_BUF(rtc, i) = ReadData(); - - INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc) -{ - u8 i; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_TIME | WR); - - for (i = 0; i < TIME_BUF_LEN; i++) - WriteData(TIME_BUF(rtc, i)); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc) -{ - u8 i; - u8 alarmData[2]; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - // Decode BCD. - alarmData[0] = (rtc->alarmHour & 0xF) + 10 * ((rtc->alarmHour >> 4) & 0xF); - - // The AM/PM flag must be set correctly even in 24-hour mode. - - if (alarmData[0] < 12) - alarmData[0] = rtc->alarmHour | ALARM_AM; - else - alarmData[0] = rtc->alarmHour | ALARM_PM; - - alarmData[1] = rtc->alarmMinute; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIOPortDirection = 7; // Why is this the only instance that uses a symbol? - - WriteCommand(CMD_ALARM | WR); - - for (i = 0; i < 2; i++) - WriteData(alarmData[i]); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -static int WriteCommand(u8 value) -{ - u8 i; - u8 temp; - - for (i = 0; i < 8; i++) - { - temp = ((value >> (7 - i)) & 1); - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 5; - } - - // control reaches end of non-void function -} - -static int WriteData(u8 value) -{ - u8 i; - u8 temp; - - for (i = 0; i < 8; i++) - { - temp = ((value >> i) & 1); - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 5; - } - - // control reaches end of non-void function -} - -static u8 ReadData() -{ - u8 i; - u8 temp; - u8 value; - - for (i = 0; i < 8; i++) - { - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 5; - - temp = ((GPIO_PORT_DATA & 2) >> 1); - value = (value >> 1) | (temp << 7); // UB: accessing uninitialized var - } - - return value; -} - -static void EnableGpioPortRead() -{ - GPIO_PORT_READ_ENABLE = 1; -} - -static void DisableGpioPortRead() -{ - GPIO_PORT_READ_ENABLE = 0; -} diff --git a/src/slot_machine.c b/src/slot_machine.c deleted file mode 100644 index c9a06a758..000000000 --- a/src/slot_machine.c +++ /dev/null @@ -1,150 +0,0 @@ -#include "global.h" -#include "slot_machine.h" -#include "decompress.h" -#include "palette.h" -#include "task.h" - -struct UnkStruct2000000 { - /*0x00*/ u8 filler00[61]; - /*0x3D*/ u8 unk3D; -}; - -struct UnkStruct1 { - /*0x00*/ u8 unk00; - /*0x01*/ u8 unk01; - /*0x02*/ s16 unk02; -}; - -extern struct UnkStruct2000000 unk_2000000; - -extern struct UnkStruct1 *gUnknown_083ED048[]; -extern const u16 gPalette_83EDE24[]; - -extern const u8 gSlotMachine_Gfx[]; -#if ENGLISH -#define SLOTMACHINE_GFX_TILES 233 -#elif GERMAN -#define SLOTMACHINE_GFX_TILES 236 -#endif - -extern const u16 gUnknown_08E95A18[]; - -extern u16 gUnknown_08E95AB8[]; -extern u16 gUnknown_08E95FB8[]; - -static void LoadSlotMachineWheelOverlay(void); - -void sub_8104CAC(u8 arg0) { - u8 i; - struct Task *task; - - sub_8104DA4(); - - task = &gTasks[unk_2000000.unk3D]; - task->data[1] = arg0; - - i = 0; - while (gUnknown_083ED048[arg0][i].unk00 != 0xFF) - { - u8 spriteId; - spriteId = sub_8105BB4( - gUnknown_083ED048[arg0][i].unk00, - gUnknown_083ED048[arg0][i].unk01, - gUnknown_083ED048[arg0][i].unk02 - ); - task->data[4 + i] = spriteId; - -#ifdef GERMAN - if (arg0 == 5 && i <= 2) - { - gSprites[spriteId].invisible = TRUE; - } -#endif - - i += 1; - } -} - -asm(".section .text_b"); - -void sub_8106448(void) { - u32 offsetRead, offsetWrite; - u32 size; - - sub_800D238(gSlotMachine_Gfx, (void *) 0x02010000); - - offsetRead = 0x02010000; - offsetWrite = BG_VRAM; - size = SLOTMACHINE_GFX_TILES * 32; - while (TRUE) - { - DmaCopy16(3, offsetRead, (void *) (offsetWrite), 0x1000); - offsetRead += 0x1000; - offsetWrite += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaCopy16(3, offsetRead, (void *) (offsetWrite), size); - break; - } - } - - LoadPalette(gUnknown_08E95A18, 0, 160); - LoadPalette(gPalette_83EDE24, 208, 32); -} - -void sub_81064B8(void) { - CpuCopy16(gUnknown_08E95AB8, (void *) BG_SCREEN_ADDR(29), 20 * 32 * 2); - LoadSlotMachineWheelOverlay(); -} - -static void LoadSlotMachineWheelOverlay(void) { - s16 x, y, dx; - u16 *screen; - - screen = (u16 *) BG_SCREEN_ADDR(30); - - for (x = 4; x < 18; x += 5) - { - for (dx = 0; dx < 4; dx++) - { - screen[5 * 32 + dx + x] = 0x2051; - screen[13 * 32 + dx + x] = 0x2851; - screen[6 * 32 + dx + x] = 0x2061; - screen[12 * 32 + dx + x] = 0x2861; - } - - screen[6 * 32 + x] = 0x20BE; - screen[12 * 32 + x] = 0x28BE; - - for (y = 7; y <= 11; y++) - { - screen[y * 32 + x] = 0x20BF; - } - } -} - -void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) { - u16 *vram = (u16 *) BG_SCREEN_ADDR(29); - - vram[15 * 32 + arg0] = arg1; - vram[15 * 32 + 1 + arg0] = arg2; - vram[16 * 32 + arg0] = arg3; - vram[16 * 32 + 1 + arg0] = arg4; -} - -void sub_81065DC(void) { - s16 y, x; - u16 *screen; - - CpuCopy16(gUnknown_08E95FB8, (void *) BG_SCREEN_ADDR(29), 20 * 32 * 2); - - screen = (u16 *) BG_SCREEN_ADDR(30); - for (y = 0; y < 20; y++) - { - for (x = 0; x < 30; x++) - { - screen[x + y * 32] = 0; - } - } -} diff --git a/src/smokescreen.c b/src/smokescreen.c deleted file mode 100644 index 8345cb6ad..000000000 --- a/src/smokescreen.c +++ /dev/null @@ -1,73 +0,0 @@ -#include "global.h" -#include "data2.h" -#include "decompress.h" -#include "sprite.h" -#include "util.h" - - -static void sub_8046388(struct Sprite *); - - -u8 sub_8046234(s16 x, s16 y, u8 a3) -{ - u8 mainSpriteId; - u8 spriteId1, spriteId2, spriteId3, spriteId4; - struct Sprite *mainSprite; - - if (GetSpriteTileStartByTag(gUnknown_081FAEA4.tag) == 0xFFFF) - { - LoadCompressedObjectPic(&gUnknown_081FAEA4); - LoadCompressedObjectPalette(&gUnknown_081FAEAC); - } - - mainSpriteId = CreateInvisibleSpriteWithCallback(sub_8046388); - mainSprite = &gSprites[mainSpriteId]; - mainSprite->data1 = a3; - - spriteId1 = CreateSprite(&gSpriteTemplate_81FAF0C, x - 16, y - 16, 2); - gSprites[spriteId1].data0 = mainSpriteId; - mainSprite->data0++; - AnimateSprite(&gSprites[spriteId1]); - - spriteId2 = CreateSprite(&gSpriteTemplate_81FAF0C, x, y - 16, 2); - gSprites[spriteId2].data0 = mainSpriteId; - mainSprite->data0++; - StartSpriteAnim(&gSprites[spriteId2], 1); - AnimateSprite(&gSprites[spriteId2]); - - spriteId3 = CreateSprite(&gSpriteTemplate_81FAF0C, x - 16, y, 2); - gSprites[spriteId3].data0 = mainSpriteId; - mainSprite->data0++; - StartSpriteAnim(&gSprites[spriteId3], 2); - AnimateSprite(&gSprites[spriteId3]); - - spriteId4 = CreateSprite(&gSpriteTemplate_81FAF0C, x, y, 2); - gSprites[spriteId4].data0 = mainSpriteId; - mainSprite->data0++; - StartSpriteAnim(&gSprites[spriteId4], 3); - AnimateSprite(&gSprites[spriteId4]); - - return mainSpriteId; -} - -static void sub_8046388(struct Sprite *sprite) -{ - if (!sprite->data0) - { - FreeSpriteTilesByTag(gUnknown_081FAEA4.tag); - FreeSpritePaletteByTag(gUnknown_081FAEAC.tag); - if (!sprite->data1) - DestroySprite(sprite); - else - sprite->callback = SpriteCallbackDummy; - } -} - -void sub_80463CC(struct Sprite *sprite) -{ - if (sprite->animEnded) - { - gSprites[sprite->data0].data0--; - DestroySprite(sprite); - } -} diff --git a/src/sound.c b/src/sound.c deleted file mode 100644 index 8d23b7d7a..000000000 --- a/src/sound.c +++ /dev/null @@ -1,585 +0,0 @@ -#include "global.h" -#include "gba/m4a_internal.h" -#include "sound.h" -#include "battle.h" -#include "m4a.h" -#include "main.h" -#include "songs.h" -#include "task.h" - -struct Fanfare -{ - u16 songNum; - u16 duration; -}; - -// FIXME: different prototype than definition -u32 SpeciesToCryId(u32); - -extern u16 gBattleTypeFlags; - -static EWRAM_DATA struct MusicPlayerInfo *gMPlay_PokemonCry = NULL; -static EWRAM_DATA u8 gPokemonCryBGMDuckingCounter = 0; - -static u16 sCurrentMapMusic; -static u16 sNextMapMusic; -static u8 sMapMusicState; -static u8 sMapMusicFadeInSpeed; -static u16 sFanfareCounter; - -bool8 gDisableMusic; - -extern struct MusicPlayerInfo gMPlay_BGM; -extern struct MusicPlayerInfo gMPlay_SE1; -extern struct MusicPlayerInfo gMPlay_SE2; -extern struct MusicPlayerInfo gMPlay_SE3; - -extern struct ToneData voicegroup_8452590[]; -extern struct ToneData voicegroup_8452B90[]; -extern struct ToneData voicegroup_8453190[]; -extern struct ToneData voicegroup_8453790[]; - -extern struct ToneData voicegroup_84537C0[]; -extern struct ToneData voicegroup_8453DC0[]; -extern struct ToneData voicegroup_84543C0[]; -extern struct ToneData voicegroup_84549C0[]; - -static const struct Fanfare sFanfares[] = -{ - { BGM_FANFA1, 80 }, - { BGM_FANFA4, 160 }, - { BGM_FANFA5, 220 }, - { BGM_ME_WAZA, 220 }, - { BGM_ME_ASA, 160 }, - { BGM_ME_BACHI, 340 }, - { BGM_ME_WASURE, 180 }, - { BGM_ME_KINOMI, 120 }, - { BGM_ME_TAMA, 710 }, - { BGM_ME_B_BIG, 250 }, - { BGM_ME_B_SMALL, 150 }, - { BGM_ME_ZANNEN, 160 }, -}; - -static void Task_Fanfare(u8 taskId); -static void CreateFanfareTask(void); -static void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode); -static void Task_DuckBGMForPokemonCry(u8 taskId); -static void RestoreBGMVolumeAfterPokemonCry(void); - -void InitMapMusic(void) -{ - gDisableMusic = FALSE; - ResetMapMusic(); -} - -void MapMusicMain(void) -{ - switch (sMapMusicState) - { - case 0: - break; - case 1: - sMapMusicState = 2; - PlayBGM(sCurrentMapMusic); - break; - case 2: - case 3: - case 4: - break; - case 5: - if (IsBGMStopped()) - { - sNextMapMusic = 0; - sMapMusicState = 0; - } - break; - case 6: - if (IsBGMStopped() && IsFanfareTaskInactive()) - { - sCurrentMapMusic = sNextMapMusic; - sNextMapMusic = 0; - sMapMusicState = 2; - PlayBGM(sCurrentMapMusic); - } - break; - case 7: - if (IsBGMStopped() && IsFanfareTaskInactive()) - { - FadeInNewBGM(sNextMapMusic, sMapMusicFadeInSpeed); - sCurrentMapMusic = sNextMapMusic; - sNextMapMusic = 0; - sMapMusicState = 2; - sMapMusicFadeInSpeed = 0; - } - break; - } -} - -void ResetMapMusic(void) -{ - sCurrentMapMusic = 0; - sNextMapMusic = 0; - sMapMusicState = 0; - sMapMusicFadeInSpeed = 0; -} - -u16 GetCurrentMapMusic(void) -{ - return sCurrentMapMusic; -} - -void PlayNewMapMusic(u16 songNum) -{ - sCurrentMapMusic = songNum; - sNextMapMusic = 0; - sMapMusicState = 1; -} - -void StopMapMusic(void) -{ - sCurrentMapMusic = 0; - sNextMapMusic = 0; - sMapMusicState = 1; -} - -void FadeOutMapMusic(u8 speed) -{ - if (IsNotWaitingForBGMStop()) - FadeOutBGM(speed); - sCurrentMapMusic = 0; - sNextMapMusic = 0; - sMapMusicState = 5; -} - -void FadeOutAndPlayNewMapMusic(u16 songNum, u8 speed) -{ - FadeOutMapMusic(speed); - sCurrentMapMusic = 0; - sNextMapMusic = songNum; - sMapMusicState = 6; -} - -void FadeOutAndFadeInNewMapMusic(u16 songNum, u8 fadeOutSpeed, u8 fadeInSpeed) -{ - FadeOutMapMusic(fadeOutSpeed); - sCurrentMapMusic = 0; - sNextMapMusic = songNum; - sMapMusicState = 7; - sMapMusicFadeInSpeed = fadeInSpeed; -} - -void FadeInNewMapMusic(u16 songNum, u8 speed) -{ - FadeInNewBGM(songNum, speed); - sCurrentMapMusic = songNum; - sNextMapMusic = 0; - sMapMusicState = 2; - sMapMusicFadeInSpeed = 0; -} - -bool8 IsNotWaitingForBGMStop(void) -{ - if (sMapMusicState == 6) - return FALSE; - if (sMapMusicState == 5) - return FALSE; - if (sMapMusicState == 7) - return FALSE; - return TRUE; -} - -void PlayFanfareByFanfareNum(u8 fanfareNum) -{ - u16 songNum; - m4aMPlayStop(&gMPlay_BGM); - songNum = sFanfares[fanfareNum].songNum; - sFanfareCounter = sFanfares[fanfareNum].duration; - m4aSongNumStart(songNum); -} - -bool8 WaitFanfare(bool8 stop) -{ - if (sFanfareCounter) - { - sFanfareCounter--; - return FALSE; - } - else - { - if (!stop) - m4aMPlayContinue(&gMPlay_BGM); - else - m4aSongNumStart(SE_STOP); - - return TRUE; - } -} - -void StopFanfareByFanfareNum(u8 fanfareNum) -{ - m4aSongNumStop(sFanfares[fanfareNum].songNum); -} - -void PlayFanfare(u16 songNum) -{ - s32 i; - for (i = 0; (u32)i < 12; i++) - { - if (sFanfares[i].songNum == songNum) - { - PlayFanfareByFanfareNum(i); - CreateFanfareTask(); - return; - } - } - - PlayFanfareByFanfareNum(0); - CreateFanfareTask(); -} - -bool8 IsFanfareTaskInactive(void) -{ - if (FuncIsActiveTask(Task_Fanfare) == TRUE) - return FALSE; - return TRUE; -} - -static void Task_Fanfare(u8 taskId) -{ - if (sFanfareCounter) - { - sFanfareCounter--; - } - else - { - m4aMPlayContinue(&gMPlay_BGM); - DestroyTask(taskId); - } -} - -static void CreateFanfareTask(void) -{ - if (FuncIsActiveTask(Task_Fanfare) != TRUE) - CreateTask(Task_Fanfare, 80); -} - -void FadeInNewBGM(u16 songNum, u8 speed) -{ - if (gDisableMusic) - songNum = 0; - m4aSongNumStart(songNum); - m4aMPlayImmInit(&gMPlay_BGM); - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0); - m4aSongNumStop(songNum); - m4aMPlayFadeIn(&gMPlay_BGM, speed); -} - -void FadeOutBGMTemporarily(u8 speed) -{ - m4aMPlayFadeOutTemporarily(&gMPlay_BGM, speed); -} - -bool8 IsBGMPausedOrStopped(void) -{ - if (gMPlay_BGM.status & MUSICPLAYER_STATUS_PAUSE) - return TRUE; - if (!(gMPlay_BGM.status & MUSICPLAYER_STATUS_TRACK)) - return TRUE; - return FALSE; -} - -void FadeInBGM(u8 speed) -{ - m4aMPlayFadeIn(&gMPlay_BGM, speed); -} - -void FadeOutBGM(u8 speed) -{ - m4aMPlayFadeOut(&gMPlay_BGM, speed); -} - -bool8 IsBGMStopped(void) -{ - if (!(gMPlay_BGM.status & MUSICPLAYER_STATUS_TRACK)) - return TRUE; - return FALSE; -} - -void PlayCry1(u16 species, s8 pan) -{ - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85); - PlayCryInternal(species, pan, 125, 10, 0); - gPokemonCryBGMDuckingCounter = 2; - RestoreBGMVolumeAfterPokemonCry(); -} - -void PlayCry2(u16 species, s8 pan, s8 volume, u8 priority) -{ - PlayCryInternal(species, pan, volume, priority, 0); -} - -void PlayCry3(u16 species, s8 pan, u8 mode) -{ - if (mode == 1) - { - PlayCryInternal(species, pan, 125, 10, 1); - } - else - { - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85); - PlayCryInternal(species, pan, 125, 10, mode); - gPokemonCryBGMDuckingCounter = 2; - RestoreBGMVolumeAfterPokemonCry(); - } -} - -void PlayCry4(u16 species, s8 pan, u8 mode) -{ - if (mode == 1) - { - PlayCryInternal(species, pan, 125, 10, 1); - } - else - { - if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85); - PlayCryInternal(species, pan, 125, 10, mode); - } -} - -void PlayCry5(u16 species, u8 mode) -{ - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 85); - PlayCryInternal(species, 0, 125, 10, mode); - gPokemonCryBGMDuckingCounter = 2; - 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; - u32 release; - u32 length; - u32 pitch; - u32 chorus; - u32 index; - u8 table; - - species--; - - cryId = species; - - v0 = 0; - release = 0; - length = 140; - pitch = 15360; - chorus = 0; - - switch (mode) - { - case 0: - break; - case 1: - length = 20; - release = 225; - break; - case 2: - length = 30; - release = 225; - pitch = 15600; - chorus = 20; - volume = 80; - break; - case 3: - length = 50; - release = 200; - pitch = 14800; - break; - case 4: - length = 20; - release = 220; - pitch = 15800; - break; - case 5: - release = 200; - pitch = 14500; - break; - } - - SetPokemonCryVolume(volume); - SetPokemonCryPanpot(pan); - SetPokemonCryPitch(pitch); - SetPokemonCryLength(length); - SetPokemonCryProgress(0); - SetPokemonCryRelease(release); - SetPokemonCryChorus(chorus); - SetPokemonCryPriority(priority); - - asm(""); - asm(""); - asm(""); - asm(""); - asm(""); - asm(""); - asm(""); - - cryId = SpeciesToCryId(cryId); - index = 0x7F; - asm("" ::: "r0"); - index &= cryId; - table = cryId >> 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); - } -} - -bool8 IsCryFinished(void) -{ - if (FuncIsActiveTask(Task_DuckBGMForPokemonCry) == TRUE) - { - return FALSE; - } - else - { - ClearPokemonCrySongs(); - return TRUE; - } -} - -void StopCryAndClearCrySongs(void) -{ - m4aMPlayStop(gMPlay_PokemonCry); - ClearPokemonCrySongs(); -} - -void StopCry(void) -{ - m4aMPlayStop(gMPlay_PokemonCry); -} - -bool8 IsCryPlayingOrClearCrySongs(void) -{ - if (IsPokemonCryPlaying(gMPlay_PokemonCry)) - { - return TRUE; - } - else - { - ClearPokemonCrySongs(); - return FALSE; - } -} - -bool8 IsCryPlaying(void) -{ - if (IsPokemonCryPlaying(gMPlay_PokemonCry)) - return TRUE; - else - return FALSE; -} - -static void Task_DuckBGMForPokemonCry(u8 taskId) -{ - if (gPokemonCryBGMDuckingCounter) - { - gPokemonCryBGMDuckingCounter--; - return; - } - - if (!IsPokemonCryPlaying(gMPlay_PokemonCry)) - { - m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); - DestroyTask(taskId); - } -} - -static void RestoreBGMVolumeAfterPokemonCry(void) -{ - if (FuncIsActiveTask(Task_DuckBGMForPokemonCry) != TRUE) - CreateTask(Task_DuckBGMForPokemonCry, 80); -} - -void PlayBGM(u16 songNum) -{ - if (gDisableMusic) - songNum = 0; - m4aSongNumStart(songNum); -} - -void PlaySE(u16 songNum) -{ - m4aSongNumStart(songNum); -} - -void PlaySE12WithPanning(u16 songNum, s8 pan) -{ - m4aSongNumStart(songNum); - m4aMPlayImmInit(&gMPlay_SE1); - m4aMPlayImmInit(&gMPlay_SE2); - m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, pan); - m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan); -} - -void PlaySE1WithPanning(u16 songNum, s8 pan) -{ - m4aSongNumStart(songNum); - m4aMPlayImmInit(&gMPlay_SE1); - m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, pan); -} - -void PlaySE2WithPanning(u16 songNum, s8 pan) -{ - m4aSongNumStart(songNum); - m4aMPlayImmInit(&gMPlay_SE2); - m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan); -} - -void SE12PanpotControl(s8 pan) -{ - m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, pan); - m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan); -} - -bool8 IsSEPlaying(void) -{ - if ((gMPlay_SE1.status & MUSICPLAYER_STATUS_PAUSE) && (gMPlay_SE2.status & MUSICPLAYER_STATUS_PAUSE)) - return FALSE; - if (!(gMPlay_SE1.status & MUSICPLAYER_STATUS_TRACK) && !(gMPlay_SE2.status & MUSICPLAYER_STATUS_TRACK)) - return FALSE; - return TRUE; -} - -bool8 IsBGMPlaying(void) -{ - if (gMPlay_BGM.status & MUSICPLAYER_STATUS_PAUSE) - return FALSE; - if (!(gMPlay_BGM.status & MUSICPLAYER_STATUS_TRACK)) - return FALSE; - return TRUE; -} - -bool8 IsSpecialSEPlaying(void) -{ - if (gMPlay_SE3.status & MUSICPLAYER_STATUS_PAUSE) - return FALSE; - if (!(gMPlay_SE3.status & MUSICPLAYER_STATUS_TRACK)) - return FALSE; - return TRUE; -} diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c deleted file mode 100644 index d97ae6d86..000000000 --- a/src/sound_check_menu.c +++ /dev/null @@ -1,2199 +0,0 @@ -#include "global.h" -#include "sprite.h" -#include "palette.h" -#include "task.h" -#include "m4a.h" -#include "main.h" -#include "text.h" -#include "menu.h" -#include "songs.h" -#include "title_screen.h" -#include "sound.h" -#include "pokedex_cry_screen.h" - -// local task defines -#define WINDOW_SELECTED data[0] -#define BGM_INDEX data[1] -#define SE_INDEX data[2] -#define UNK_DATA3 data[3] -#define UNK_DATA4 data[4] -// data 5-7 are not used -// i dont have a define for data 8 yet because its used in a nonmatching and I can't be sure yet its actually used. - -// window selections -enum -{ - BGM_WINDOW, - SE_WINDOW -}; - -// driver test cry enums -enum -{ - CRY_TEST_UNK0, - CRY_TEST_VOLUME, - CRY_TEST_PANPOT, - CRY_TEST_PITCH, - CRY_TEST_LENGTH, - CRY_TEST_RELEASE, - CRY_TEST_PROGRESS, - CRY_TEST_CHORUS, - CRY_TEST_PRIORITY -}; - -// minmax range enums -enum -{ - MIN, - MAX -}; - -extern struct ToneData voicegroup_84537C0[]; -extern struct ToneData voicegroup_8452590[]; -extern struct ToneData voicegroup_8453DC0[]; -extern struct ToneData voicegroup_8452B90[]; -extern struct ToneData voicegroup_84543C0[]; -extern struct ToneData voicegroup_8453190[]; -extern struct ToneData voicegroup_84549C0[]; -extern struct ToneData voicegroup_8453790[]; - -static EWRAM_DATA u8 gUnknown_020387B0 = 0; -static EWRAM_DATA u8 gUnknown_020387B1 = 0; -static EWRAM_DATA u8 gUnknown_020387B2 = 0; -static EWRAM_DATA s8 gUnknown_020387B3 = 0; -static EWRAM_DATA int gUnknown_020387B4[9] = {0}; -static EWRAM_DATA u8 gUnknown_020387D8 = 0; -static EWRAM_DATA u8 gUnknown_020387D9 = 0; - -extern u16 gUnknown_03005D34; -extern u8 gUnknown_03005E98; - -struct MusicPlayerInfo *gUnknown_03005D30; - -extern struct MusicPlayerInfo gMPlay_BGM; - -void sub_80BA258(u8); -void sub_80BA384(u8); -void sub_80BA65C(u8); -void sub_80BA68C(u8); -void sub_80BA6B8(u8); -void sub_80BA700(u16, u16, u16); -void sub_80BA79C(const u8 *const, u16, u16); -void sub_80BA800(u8); -void sub_80BAA48(u8); -void sub_80BACDC(s8); -void sub_80BAD5C(void); -void sub_80BAE10(u8, u8); -void sub_80BAE78(int, u16, u16, u8); -void sub_80BAF84(u8); -void sub_80BB038(u8); -void sub_80BB1D4(void); -void sub_80BB25C(u8); -void sub_80BB3B4(u8); -void sub_80BB494(void); - -static const u8 gDebugText_SoundCheckJap[] = _("サウンドチェック"); -static const u8 gDebugText_BGM[] = _("BGM"); -static const u8 gDebugText_SE[] = _("SE "); -static const u8 gDebugText_ABDesc[] = _("A‥さいせい B‥おわり"); -static const u8 gDebugText_UpDown[] = _("L‥UP R‥DOWN"); -static const u8 gDebugText_DriverTest[] = _("R‥DRIVER-TEST"); - -// ideally this should be a multi Coords8 struct, but it wont match when its treated like a struct. -static const u8 gUnknown_083D0300[] = { 1, 1, 1, 3, 1, 5, 1, 7, 1, 9, 1, 11, 1, 13, 1, 15, 1, 17 }; - -static const u8 gDebugText_BBack[] = _("Bぼたんで もどる"); -static const u8 gDebugText_APlay[] = _("Aぼたんで さいせい"); -static const u8 gDebugText_Voice[] = _("VOICE‥‥‥‥"); -static const u8 gDebugText_Volume[] = _("VOLUME‥‥‥"); -static const u8 gDebugText_Panpot[] = _("PANPOT‥‥‥"); -static const u8 gDebugText_Pitch[] = _("PITCH‥‥‥‥"); -static const u8 gDebugText_Length[] = _("LENGTH‥‥‥"); -static const u8 gDebugText_Release[] = _("RELEASE‥‥"); -static const u8 gDebugText_Progress[] = _("PROGRESS‥"); -static const u8 gDebugText_Chorus[] = _("CHORUS‥‥‥"); -static const u8 gDebugText_Priority[] = _("PRIORITY‥"); -static const u8 gDebugText_Playing[] = _("さいせいちゆう‥"); // 再生中 (playing) -static const u8 gDebugText_Reverse[] = _("はんてん‥‥‥‥"); // 反転 (reverse) -static const u8 gDebugText_Stereo[] = _("すてれお‥‥‥‥"); // stereo - -// also ideally should be a MinMax struct, but any attempt to make this into a struct causes it to not match due to the weird multi dim access. -static const int gUnknown_083D039C[16] = -{ - 0, 387, - 0, 127, - -127, 127, - -128, 32639, - 0, 65535, - 0, 255, - 0, 65535, - -64, 63 -}; - -static const u8 gUnknown_083D03DC[] = _("▶"); -static const u8 gUnknown_083D03DE[] = _(" "); - -// why not just use Powers of ten from string_util? -static const int gUnknown_083D03E0[6] = -{ - 1, - 10, - 100, - 1000, - 10000, - 100000 -}; - -static const s8 gUnknown_083D03F8[5] = { 0x3F, 0x00, 0xC0, 0x7F, 0x80 }; - -static const u8 gOtherText_SE[] = _("SE"); -static const u8 gOtherText_Pan[] = _("PAN"); -static const u8 gOtherText_LR[] = _(" LR"); -static const u8 gOtherText_RL[] = _(" RL"); - -// bgm names -static const u8 BGMName_STOP[] = _("STOP"); -static const u8 BGMName_TETSUJI[] = _("TETSUJI"); -static const u8 BGMName_FIELD13[] = _("FIELD13"); -static const u8 BGMName_KACHI22[] = _("KACHI22"); -static const u8 BGMName_KACHI2[] = _("KACHI2"); -static const u8 BGMName_KACHI3[] = _("KACHI3"); -static const u8 BGMName_KACHI5[] = _("KACHI5"); -static const u8 BGMName_PCC[] = _("PCC"); -static const u8 BGMName_NIBI[] = _("NIBI"); -static const u8 BGMName_SUIKUN[] = _("SUIKUN"); -static const u8 BGMName_DOORO1[] = _("DOORO1"); -static const u8 BGMName_DOORO_X1[] = _("DOORO-X1"); -static const u8 BGMName_DOORO_X3[] = _("DOORO-X3"); -static const u8 BGMName_MACHI_S2[] = _("MACHI-S2"); -static const u8 BGMName_MACHI_S4[] = _("MACHI-S4"); -static const u8 BGMName_GIM[] = _("GIM"); -static const u8 BGMName_NAMINORI[] = _("NAMINORI"); -static const u8 BGMName_DAN01[] = _("DAN01"); -static const u8 BGMName_FANFA1[] = _("FANFA1"); -static const u8 BGMName_ME_ASA[] = _("ME-ASA"); -static const u8 BGMName_ME_BACHI[] = _("ME-BACHI"); -static const u8 BGMName_FANFA4[] = _("FANFA4"); -static const u8 BGMName_FANFA5[] = _("FANFA5"); -static const u8 BGMName_ME_WAZA[] = _("ME-WAZA"); -static const u8 BGMName_BIJYUTU[] = _("BIJYUTU"); -static const u8 BGMName_DOORO_X4[] = _("DOORO-X4"); -static const u8 BGMName_FUNE_KAN[] = _("FUNE-KAN"); -static const u8 BGMName_ME_SHINKA[] = _("ME-SHINKA"); -static const u8 BGMName_SHINKA[] = _("SHINKA"); -static const u8 BGMName_ME_WASURE[] = _("ME-WASURE"); -static const u8 BGMName_SYOUJOEYE[] = _("SYOUJOEYE"); -static const u8 BGMName_BOYEYE[] = _("BOYEYE"); -static const u8 BGMName_DAN02[] = _("DAN02"); -static const u8 BGMName_MACHI_S3[] = _("MACHI-S3"); -static const u8 BGMName_ODAMAKI[] = _("ODAMAKI"); -static const u8 BGMName_B_TOWER[] = _("B-TOWER"); -static const u8 BGMName_SWIMEYE[] = _("SWIMEYE"); -static const u8 BGMName_DAN03[] = _("DAN03"); -static const u8 BGMName_ME_KINOMI[] = _("ME-KINOMI"); -static const u8 BGMName_ME_TAMA[] = _("ME-TAMA"); -static const u8 BGMName_ME_B_BIG[] = _("ME-B-BIG"); -static const u8 BGMName_ME_B_SMALL[] = _("ME-B-SMALL"); -static const u8 BGMName_ME_ZANNEN[] = _("ME-ZANNEN"); -static const u8 BGMName_BD_TIME[] = _("BD-TIME"); -static const u8 BGMName_TEST1[] = _("TEST1"); -static const u8 BGMName_TEST2[] = _("TEST2"); -static const u8 BGMName_TEST3[] = _("TEST3"); -static const u8 BGMName_TEST4[] = _("TEST4"); -static const u8 BGMName_TEST[] = _("TEST"); -static const u8 BGMName_GOMACHI0[] = _("GOMACHI0"); -static const u8 BGMName_GOTOWN[] = _("GOTOWN"); -static const u8 BGMName_POKECEN[] = _("POKECEN"); -static const u8 BGMName_NEXTROAD[] = _("NEXTROAD"); -static const u8 BGMName_GRANROAD[] = _("GRANROAD"); -static const u8 BGMName_CYCLING[] = _("CYCLING"); -static const u8 BGMName_FRIENDLY[] = _("FRIENDLY"); -static const u8 BGMName_MISHIRO[] = _("MISHIRO"); -static const u8 BGMName_TOZAN[] = _("TOZAN"); -static const u8 BGMName_GIRLEYE[] = _("GIRLEYE"); -static const u8 BGMName_MINAMO[] = _("MINAMO"); -static const u8 BGMName_ASHROAD[] = _("ASHROAD"); -static const u8 BGMName_EVENT0[] = _("EVENT0"); -static const u8 BGMName_DEEPDEEP[] = _("DEEPDEEP"); -static const u8 BGMName_KACHI1[] = _("KACHI1"); -static const u8 BGMName_TITLE3[] = _("TITLE3"); -static const u8 BGMName_DEMO1[] = _("DEMO1"); -static const u8 BGMName_GIRL_SUP[] = _("GIRL-SUP"); -static const u8 BGMName_HAGESHII[] = _("HAGESHII"); -static const u8 BGMName_KAKKOII[] = _("KAKKOII"); -static const u8 BGMName_KAZANBAI[] = _("KAZANBAI"); -static const u8 BGMName_AQA_0[] = _("AQA-0"); -static const u8 BGMName_TSURETEK[] = _("TSURETEK"); -static const u8 BGMName_BOY_SUP[] = _("BOY-SUP"); -static const u8 BGMName_RAINBOW[] = _("RAINBOW"); -static const u8 BGMName_AYASII[] = _("AYASII"); -static const u8 BGMName_KACHI4[] = _("KACHI4"); -static const u8 BGMName_ROPEWAY[] = _("ROPEWAY"); -static const u8 BGMName_CASINO[] = _("CASINO"); -static const u8 BGMName_HIGHTOWN[] = _("HIGHTOWN"); -static const u8 BGMName_SAFARI[] = _("SAFARI"); -static const u8 BGMName_C_ROAD[] = _("C-ROAD"); -static const u8 BGMName_AJITO[] = _("AJITO"); -static const u8 BGMName_M_BOAT[] = _("M-BOAT"); -static const u8 BGMName_M_DUNGON[] = _("M-DUNGON"); -static const u8 BGMName_FINECITY[] = _("FINECITY"); -static const u8 BGMName_MACHUPI[] = _("MACHUPI"); -static const u8 BGMName_P_SCHOOL[] = _("P-SCHOOL"); -static const u8 BGMName_DENDOU[] = _("DENDOU"); -static const u8 BGMName_TONEKUSA[] = _("TONEKUSA"); -static const u8 BGMName_MABOROSI[] = _("MABOROSI"); -static const u8 BGMName_CON_FAN[] = _("CON-FAN"); -static const u8 BGMName_CONTEST0[] = _("CONTEST0"); -static const u8 BGMName_MGM0[] = _("MGM0"); -static const u8 BGMName_T_BATTLE[] = _("T-BATTLE"); -static const u8 BGMName_OOAME[] = _("OOAME"); -static const u8 BGMName_HIDERI[] = _("HIDERI"); -static const u8 BGMName_RUNECITY[] = _("RUNECITY"); -static const u8 BGMName_CON_K[] = _("CON-K"); -static const u8 BGMName_EIKOU_R[] = _("EIKOU-R"); -static const u8 BGMName_KARAKURI[] = _("KARAKURI"); -static const u8 BGMName_HUTAGO[] = _("HUTAGO"); -static const u8 BGMName_SITENNOU[] = _("SITENNOU"); -static const u8 BGMName_YAMA_EYE[] = _("YAMA-EYE"); -static const u8 BGMName_CONLOBBY[] = _("CONLOBBY"); -static const u8 BGMName_INTER_V[] = _("INTER-V"); -static const u8 BGMName_DAIGO[] = _("DAIGO"); -static const u8 BGMName_THANKFOR[] = _("THANKFOR"); -static const u8 BGMName_END[] = _("END"); -static const u8 BGMName_BATTLE27[] = _("BATTLE27"); -static const u8 BGMName_BATTLE31[] = _("BATTLE31"); -static const u8 BGMName_BATTLE20[] = _("BATTLE20"); -static const u8 BGMName_BATTLE32[] = _("BATTLE32"); -static const u8 BGMName_BATTLE33[] = _("BATTLE33"); -static const u8 BGMName_BATTLE36[] = _("BATTLE36"); -static const u8 BGMName_BATTLE34[] = _("BATTLE34"); -static const u8 BGMName_BATTLE35[] = _("BATTLE35"); -static const u8 BGMName_BATTLE38[] = _("BATTLE38"); -static const u8 BGMName_BATTLE30[] = _("BATTLE30"); - -static const u8 *const gBGMNames[] = -{ - BGMName_STOP, - BGMName_TETSUJI, - BGMName_FIELD13, - BGMName_KACHI22, - BGMName_KACHI2, - BGMName_KACHI3, - BGMName_KACHI5, - BGMName_PCC, - BGMName_NIBI, - BGMName_SUIKUN, - BGMName_DOORO1, - BGMName_DOORO_X1, - BGMName_DOORO_X3, - BGMName_MACHI_S2, - BGMName_MACHI_S4, - BGMName_GIM, - BGMName_NAMINORI, - BGMName_DAN01, - BGMName_FANFA1, - BGMName_ME_ASA, - BGMName_ME_BACHI, - BGMName_FANFA4, - BGMName_FANFA5, - BGMName_ME_WAZA, - BGMName_BIJYUTU, - BGMName_DOORO_X4, - BGMName_FUNE_KAN, - BGMName_ME_SHINKA, - BGMName_SHINKA, - BGMName_ME_WASURE, - BGMName_SYOUJOEYE, - BGMName_BOYEYE, - BGMName_DAN02, - BGMName_MACHI_S3, - BGMName_ODAMAKI, - BGMName_B_TOWER, - BGMName_SWIMEYE, - BGMName_DAN03, - BGMName_ME_KINOMI, - BGMName_ME_TAMA, - BGMName_ME_B_BIG, - BGMName_ME_B_SMALL, - BGMName_ME_ZANNEN, - BGMName_BD_TIME, - BGMName_TEST1, - BGMName_TEST2, - BGMName_TEST3, - BGMName_TEST4, - BGMName_TEST, - BGMName_GOMACHI0, - BGMName_GOTOWN, - BGMName_POKECEN, - BGMName_NEXTROAD, - BGMName_GRANROAD, - BGMName_CYCLING, - BGMName_FRIENDLY, - BGMName_MISHIRO, - BGMName_TOZAN, - BGMName_GIRLEYE, - BGMName_MINAMO, - BGMName_ASHROAD, - BGMName_EVENT0, - BGMName_DEEPDEEP, - BGMName_KACHI1, - BGMName_TITLE3, - BGMName_DEMO1, - BGMName_GIRL_SUP, - BGMName_HAGESHII, - BGMName_KAKKOII, - BGMName_KAZANBAI, - BGMName_AQA_0, - BGMName_TSURETEK, - BGMName_BOY_SUP, - BGMName_RAINBOW, - BGMName_AYASII, - BGMName_KACHI4, - BGMName_ROPEWAY, - BGMName_CASINO, - BGMName_HIGHTOWN, - BGMName_SAFARI, - BGMName_C_ROAD, - BGMName_AJITO, - BGMName_M_BOAT, - BGMName_M_DUNGON, - BGMName_FINECITY, - BGMName_MACHUPI, - BGMName_P_SCHOOL, - BGMName_DENDOU, - BGMName_TONEKUSA, - BGMName_MABOROSI, - BGMName_CON_FAN, - BGMName_CONTEST0, - BGMName_MGM0, - BGMName_T_BATTLE, - BGMName_OOAME, - BGMName_HIDERI, - BGMName_RUNECITY, - BGMName_CON_K, - BGMName_EIKOU_R, - BGMName_KARAKURI, - BGMName_HUTAGO, - BGMName_SITENNOU, - BGMName_YAMA_EYE, - BGMName_CONLOBBY, - BGMName_INTER_V, - BGMName_DAIGO, - BGMName_THANKFOR, - BGMName_END, - BGMName_BATTLE27, - BGMName_BATTLE31, - BGMName_BATTLE20, - BGMName_BATTLE32, - BGMName_BATTLE33, - BGMName_BATTLE36, - BGMName_BATTLE34, - BGMName_BATTLE35, - BGMName_BATTLE38, - BGMName_BATTLE30 -}; - -// SE names -static const u8 SEName_STOP[] = _("STOP"); -static const u8 SEName_KAIFUKU[] = _("KAIFUKU"); -static const u8 SEName_PC_LOGON[] = _("PC-LOGON"); -static const u8 SEName_PC_OFF[] = _("PC-OFF"); -static const u8 SEName_PC_ON[] = _("PC-ON"); -static const u8 SEName_SELECT[] = _("SELECT"); -static const u8 SEName_WIN_OPEN[] = _("WIN-OPEN"); -static const u8 SEName_WALL_HIT[] = _("WALL-HIT"); -static const u8 SEName_DOOR[] = _("DOOR"); -static const u8 SEName_KAIDAN[] = _("KAIDAN"); -static const u8 SEName_DANSA[] = _("DANSA"); -static const u8 SEName_JITENSYA[] = _("JITENSYA"); -static const u8 SEName_KOUKA_L[] = _("KOUKA-L"); -static const u8 SEName_KOUKA_M[] = _("KOUKA-M"); -static const u8 SEName_KOUKA_H[] = _("KOUKA-H"); -static const u8 SEName_BOWA2[] = _("BOWA2"); -static const u8 SEName_POKE_DEAD[] = _("POKE-DEAD"); -static const u8 SEName_NIGERU[] = _("NIGERU"); -static const u8 SEName_JIDO_DOA[] = _("JIDO-DOA"); -static const u8 SEName_NAMINORI[] = _("NAMINORI"); -static const u8 SEName_BAN[] = _("BAN"); -static const u8 SEName_PIN[] = _("PIN"); -static const u8 SEName_BOO[] = _("BOO"); -static const u8 SEName_BOWA[] = _("BOWA"); -static const u8 SEName_JYUNI[] = _("JYUNI"); -static const u8 SEName_A[] = _("A"); -static const u8 SEName_I[] = _("I"); -static const u8 SEName_U[] = _("U"); -static const u8 SEName_E[] = _("E"); -static const u8 SEName_O[] = _("O"); -static const u8 SEName_N[] = _("N"); -static const u8 SEName_SEIKAI[] = _("SEIKAI"); -static const u8 SEName_HAZURE[] = _("HAZURE"); -static const u8 SEName_EXP[] = _("EXP"); -static const u8 SEName_JITE_PYOKO[] = _("JITE-PYOKO"); -static const u8 SEName_MU_PACHI[] = _("MU-PACHI"); -static const u8 SEName_TK_KASYA[] = _("TK-KASYA"); -static const u8 SEName_FU_ZAKU[] = _("FU-ZAKU"); -static const u8 SEName_FU_ZAKU2[] = _("FU-ZAKU2"); -static const u8 SEName_FU_ZUZUZU[] = _("FU-ZUZUZU"); -static const u8 SEName_RU_GASHIN[] = _("RU-GASHIN"); -static const u8 SEName_RU_GASYAN[] = _("RU-GASYAN"); -static const u8 SEName_RU_BARI[] = _("RU-BARI"); -static const u8 SEName_RU_HYUU[] = _("RU-HYUU"); -static const u8 SEName_KI_GASYAN[] = _("KI-GASYAN"); -static const u8 SEName_TK_WARPIN[] = _("TK-WARPIN"); -static const u8 SEName_TK_WARPOUT[] = _("TK-WARPOUT"); -static const u8 SEName_TU_SAA[] = _("TU-SAA"); -static const u8 SEName_HI_TURUN[] = _("HI-TURUN"); -static const u8 SEName_TRACK_MOVE[] = _("TRACK-MOVE"); -static const u8 SEName_TRACK_STOP[] = _("TRACK-STOP"); -static const u8 SEName_TRACK_HAIK[] = _("TRACK-HAIK"); -static const u8 SEName_TRACK_DOOR[] = _("TRACK-DOOR"); -static const u8 SEName_MOTER[] = _("MOTER"); -static const u8 SEName_CARD[] = _("CARD"); -static const u8 SEName_SAVE[] = _("SAVE"); -static const u8 SEName_KON[] = _("KON"); -static const u8 SEName_KON2[] = _("KON2"); -static const u8 SEName_KON3[] = _("KON3"); -static const u8 SEName_KON4[] = _("KON4"); -static const u8 SEName_SUIKOMU[] = _("SUIKOMU"); -static const u8 SEName_NAGERU[] = _("NAGERU"); -static const u8 SEName_TOY_C[] = _("TOY-C"); -static const u8 SEName_TOY_D[] = _("TOY-D"); -static const u8 SEName_TOY_E[] = _("TOY-E"); -static const u8 SEName_TOY_F[] = _("TOY-F"); -static const u8 SEName_TOY_G[] = _("TOY-G"); -static const u8 SEName_TOY_A[] = _("TOY-A"); -static const u8 SEName_TOY_B[] = _("TOY-B"); -static const u8 SEName_TOY_C1[] = _("TOY-C1"); -static const u8 SEName_MIZU[] = _("MIZU"); -static const u8 SEName_HASHI[] = _("HASHI"); -static const u8 SEName_DAUGI[] = _("DAUGI"); -static const u8 SEName_PINPON[] = _("PINPON"); -static const u8 SEName_FUUSEN1[] = _("FUUSEN1"); -static const u8 SEName_FUUSEN2[] = _("FUUSEN2"); -static const u8 SEName_FUUSEN3[] = _("FUUSEN3"); -static const u8 SEName_TOY_KABE[] = _("TOY-KABE"); -static const u8 SEName_TOY_DANGO[] = _("TOY-DANGO"); -static const u8 SEName_DOKU[] = _("DOKU"); -static const u8 SEName_ESUKA[] = _("ESUKA"); -static const u8 SEName_T_AME[] = _("T-AME"); -static const u8 SEName_T_AME_E[] = _("T-AME-E"); -static const u8 SEName_T_OOAME[] = _("T-OOAME"); -static const u8 SEName_T_OOAME_E[] = _("T-OOAME-E"); -static const u8 SEName_T_KOAME[] = _("T-KOAME"); -static const u8 SEName_T_KOAME_E[] = _("T-KOAME-E"); -static const u8 SEName_T_KAMI[] = _("T-KAMI"); -static const u8 SEName_T_KAMI2[] = _("T-KAMI2"); -static const u8 SEName_ELEBETA[] = _("ELEBETA"); -static const u8 SEName_HINSI[] = _("HINSI"); -static const u8 SEName_EXPMAX[] = _("EXPMAX"); -static const u8 SEName_TAMAKORO[] = _("TAMAKORO"); -static const u8 SEName_TAMAKORO_E[] = _("TAMAKORO-E"); -static const u8 SEName_BASABASA[] = _("BASABASA"); -static const u8 SEName_REGI[] = _("REGI"); -static const u8 SEName_C_GAJI[] = _("C-GAJI"); -static const u8 SEName_C_MAKU_U[] = _("C-MAKU-U"); -static const u8 SEName_C_MAKU_D[] = _("C-MAKU-D"); -static const u8 SEName_C_PASI[] = _("C-PASI"); -static const u8 SEName_C_SYU[] = _("C-SYU"); -static const u8 SEName_C_PIKON[] = _("C-PIKON"); -static const u8 SEName_REAPOKE[] = _("REAPOKE"); -static const u8 SEName_OP_BASYU[] = _("OP-BASYU"); -static const u8 SEName_BT_START[] = _("BT-START"); -static const u8 SEName_DENDOU[] = _("DENDOU"); -static const u8 SEName_JIHANKI[] = _("JIHANKI"); -static const u8 SEName_TAMA[] = _("TAMA"); -static const u8 SEName_Z_SCROLL[] = _("Z-SCROLL"); -static const u8 SEName_Z_PAGE[] = _("Z-PAGE"); -static const u8 SEName_PN_ON[] = _("PN-ON"); -static const u8 SEName_PN_OFF[] = _("PN-OFF"); -static const u8 SEName_Z_SEARCH[] = _("Z-SEARCH"); -static const u8 SEName_TAMAGO[] = _("TAMAGO"); -static const u8 SEName_TB_START[] = _("TB-START"); -static const u8 SEName_TB_KON[] = _("TB-KON"); -static const u8 SEName_TB_KARA[] = _("TB-KARA"); -static const u8 SEName_BIDORO[] = _("BIDORO"); -static const u8 SEName_W085[] = _("W085"); -static const u8 SEName_W085B[] = _("W085B"); -static const u8 SEName_W231[] = _("W231"); -static const u8 SEName_W171[] = _("W171"); -static const u8 SEName_W233[] = _("W233"); -static const u8 SEName_W233B[] = _("W233B"); -static const u8 SEName_W145[] = _("W145"); -static const u8 SEName_W145B[] = _("W145B"); -static const u8 SEName_W145C[] = _("W145C"); -static const u8 SEName_W240[] = _("W240"); -static const u8 SEName_W015[] = _("W015"); -static const u8 SEName_W081[] = _("W081"); -static const u8 SEName_W081B[] = _("W081B"); -static const u8 SEName_W088[] = _("W088"); -static const u8 SEName_W016[] = _("W016"); -static const u8 SEName_W016B[] = _("W016B"); -static const u8 SEName_W003[] = _("W003"); -static const u8 SEName_W104[] = _("W104"); -static const u8 SEName_W013[] = _("W013"); -static const u8 SEName_W196[] = _("W196"); -static const u8 SEName_W086[] = _("W086"); -static const u8 SEName_W004[] = _("W004"); -static const u8 SEName_W025[] = _("W025"); -static const u8 SEName_W025B[] = _("W025B"); -static const u8 SEName_W152[] = _("W152"); -static const u8 SEName_W026[] = _("W026"); -static const u8 SEName_W172[] = _("W172"); -static const u8 SEName_W172B[] = _("W172B"); -static const u8 SEName_W053[] = _("W053"); -static const u8 SEName_W007[] = _("W007"); -static const u8 SEName_W092[] = _("W092"); -static const u8 SEName_W221[] = _("W221"); -static const u8 SEName_W221B[] = _("W221B"); -static const u8 SEName_W052[] = _("W052"); -static const u8 SEName_W036[] = _("W036"); -static const u8 SEName_W059[] = _("W059"); -static const u8 SEName_W059B[] = _("W059B"); -static const u8 SEName_W010[] = _("W010"); -static const u8 SEName_W011[] = _("W011"); -static const u8 SEName_W017[] = _("W017"); -static const u8 SEName_W019[] = _("W019"); -static const u8 SEName_W028[] = _("W028"); -static const u8 SEName_W013B[] = _("W013B"); -static const u8 SEName_W044[] = _("W044"); -static const u8 SEName_W029[] = _("W029"); -static const u8 SEName_W057[] = _("W057"); -static const u8 SEName_W056[] = _("W056"); -static const u8 SEName_W250[] = _("W250"); -static const u8 SEName_W030[] = _("W030"); -static const u8 SEName_W039[] = _("W039"); -static const u8 SEName_W054[] = _("W054"); -static const u8 SEName_W077[] = _("W077"); -static const u8 SEName_W020[] = _("W020"); -static const u8 SEName_W082[] = _("W082"); -static const u8 SEName_W047[] = _("W047"); -static const u8 SEName_W195[] = _("W195"); -static const u8 SEName_W006[] = _("W006"); -static const u8 SEName_W091[] = _("W091"); -static const u8 SEName_W146[] = _("W146"); -static const u8 SEName_W120[] = _("W120"); -static const u8 SEName_W153[] = _("W153"); -static const u8 SEName_W071B[] = _("W071B"); -static const u8 SEName_W071[] = _("W071"); -static const u8 SEName_W103[] = _("W103"); -static const u8 SEName_W062[] = _("W062"); -static const u8 SEName_W062B[] = _("W062B"); -static const u8 SEName_W048[] = _("W048"); -static const u8 SEName_W187[] = _("W187"); -static const u8 SEName_W118[] = _("W118"); -static const u8 SEName_W155[] = _("W155"); -static const u8 SEName_W122[] = _("W122"); -static const u8 SEName_W060[] = _("W060"); -static const u8 SEName_W185[] = _("W185"); -static const u8 SEName_W014[] = _("W014"); -static const u8 SEName_W043[] = _("W043"); -static const u8 SEName_W207[] = _("W207"); -static const u8 SEName_W207B[] = _("W207B"); -static const u8 SEName_W215[] = _("W215"); -static const u8 SEName_W109[] = _("W109"); -static const u8 SEName_W173[] = _("W173"); -static const u8 SEName_W280[] = _("W280"); -static const u8 SEName_W202[] = _("W202"); -static const u8 SEName_W060B[] = _("W060B"); -static const u8 SEName_W076[] = _("W076"); -static const u8 SEName_W080[] = _("W080"); -static const u8 SEName_W100[] = _("W100"); -static const u8 SEName_W107[] = _("W107"); -static const u8 SEName_W166[] = _("W166"); -static const u8 SEName_W129[] = _("W129"); -static const u8 SEName_W115[] = _("W115"); -static const u8 SEName_W112[] = _("W112"); -static const u8 SEName_W197[] = _("W197"); -static const u8 SEName_W199[] = _("W199"); -static const u8 SEName_W236[] = _("W236"); -static const u8 SEName_W204[] = _("W204"); -static const u8 SEName_W268[] = _("W268"); -static const u8 SEName_W070[] = _("W070"); -static const u8 SEName_W063[] = _("W063"); -static const u8 SEName_W127[] = _("W127"); -static const u8 SEName_W179[] = _("W179"); -static const u8 SEName_W151[] = _("W151"); -static const u8 SEName_W201[] = _("W201"); -static const u8 SEName_W161[] = _("W161"); -static const u8 SEName_W161B[] = _("W161B"); -static const u8 SEName_W227[] = _("W227"); -static const u8 SEName_W227B[] = _("W227B"); -static const u8 SEName_W226[] = _("W226"); -static const u8 SEName_W208[] = _("W208"); -static const u8 SEName_W213[] = _("W213"); -static const u8 SEName_W213B[] = _("W213B"); -static const u8 SEName_W234[] = _("W234"); -static const u8 SEName_W260[] = _("W260"); -static const u8 SEName_W328[] = _("W328"); -static const u8 SEName_W320[] = _("W320"); -static const u8 SEName_W255[] = _("W255"); -static const u8 SEName_W291[] = _("W291"); -static const u8 SEName_W089[] = _("W089"); -static const u8 SEName_W239[] = _("W239"); -static const u8 SEName_W230[] = _("W230"); -static const u8 SEName_W281[] = _("W281"); -static const u8 SEName_W327[] = _("W327"); -static const u8 SEName_W287[] = _("W287"); -static const u8 SEName_W257[] = _("W257"); -static const u8 SEName_W253[] = _("W253"); -static const u8 SEName_W258[] = _("W258"); -static const u8 SEName_W322[] = _("W322"); -static const u8 SEName_W298[] = _("W298"); -static const u8 SEName_W287B[] = _("W287B"); -static const u8 SEName_W114[] = _("W114"); -static const u8 SEName_W063B[] = _("W063B"); - -static const u8 *const gSENames[] = -{ - SEName_STOP, - SEName_KAIFUKU, - SEName_PC_LOGON, - SEName_PC_OFF, - SEName_PC_ON, - SEName_SELECT, - SEName_WIN_OPEN, - SEName_WALL_HIT, - SEName_DOOR, - SEName_KAIDAN, - SEName_DANSA, - SEName_JITENSYA, - SEName_KOUKA_L, - SEName_KOUKA_M, - SEName_KOUKA_H, - SEName_BOWA2, - SEName_POKE_DEAD, - SEName_NIGERU, - SEName_JIDO_DOA, - SEName_NAMINORI, - SEName_BAN, - SEName_PIN, - SEName_BOO, - SEName_BOWA, - SEName_JYUNI, - SEName_A, - SEName_I, - SEName_U, - SEName_E, - SEName_O, - SEName_N, - SEName_SEIKAI, - SEName_HAZURE, - SEName_EXP, - SEName_JITE_PYOKO, - SEName_MU_PACHI, - SEName_TK_KASYA, - SEName_FU_ZAKU, - SEName_FU_ZAKU2, - SEName_FU_ZUZUZU, - SEName_RU_GASHIN, - SEName_RU_GASYAN, - SEName_RU_BARI, - SEName_RU_HYUU, - SEName_KI_GASYAN, - SEName_TK_WARPIN, - SEName_TK_WARPOUT, - SEName_TU_SAA, - SEName_HI_TURUN, - SEName_TRACK_MOVE, - SEName_TRACK_STOP, - SEName_TRACK_HAIK, - SEName_TRACK_DOOR, - SEName_MOTER, - SEName_CARD, - SEName_SAVE, - SEName_KON, - SEName_KON2, - SEName_KON3, - SEName_KON4, - SEName_SUIKOMU, - SEName_NAGERU, - SEName_TOY_C, - SEName_TOY_D, - SEName_TOY_E, - SEName_TOY_F, - SEName_TOY_G, - SEName_TOY_A, - SEName_TOY_B, - SEName_TOY_C1, - SEName_MIZU, - SEName_HASHI, - SEName_DAUGI, - SEName_PINPON, - SEName_FUUSEN1, - SEName_FUUSEN2, - SEName_FUUSEN3, - SEName_TOY_KABE, - SEName_TOY_DANGO, - SEName_DOKU, - SEName_ESUKA, - SEName_T_AME, - SEName_T_AME_E, - SEName_T_OOAME, - SEName_T_OOAME_E, - SEName_T_KOAME, - SEName_T_KOAME_E, - SEName_T_KAMI, - SEName_T_KAMI2, - SEName_ELEBETA, - SEName_HINSI, - SEName_EXPMAX, - SEName_TAMAKORO, - SEName_TAMAKORO_E, - SEName_BASABASA, - SEName_REGI, - SEName_C_GAJI, - SEName_C_MAKU_U, - SEName_C_MAKU_D, - SEName_C_PASI, - SEName_C_SYU, - SEName_C_PIKON, - SEName_REAPOKE, - SEName_OP_BASYU, - SEName_BT_START, - SEName_DENDOU, - SEName_JIHANKI, - SEName_TAMA, - SEName_Z_SCROLL, - SEName_Z_PAGE, - SEName_PN_ON, - SEName_PN_OFF, - SEName_Z_SEARCH, - SEName_TAMAGO, - SEName_TB_START, - SEName_TB_KON, - SEName_TB_KARA, - SEName_BIDORO, - SEName_W085, - SEName_W085B, - SEName_W231, - SEName_W171, - SEName_W233, - SEName_W233B, - SEName_W145, - SEName_W145B, - SEName_W145C, - SEName_W240, - SEName_W015, - SEName_W081, - SEName_W081B, - SEName_W088, - SEName_W016, - SEName_W016B, - SEName_W003, - SEName_W104, - SEName_W013, - SEName_W196, - SEName_W086, - SEName_W004, - SEName_W025, - SEName_W025B, - SEName_W152, - SEName_W026, - SEName_W172, - SEName_W172B, - SEName_W053, - SEName_W007, - SEName_W092, - SEName_W221, - SEName_W221B, - SEName_W052, - SEName_W036, - SEName_W059, - SEName_W059B, - SEName_W010, - SEName_W011, - SEName_W017, - SEName_W019, - SEName_W028, - SEName_W013B, - SEName_W044, - SEName_W029, - SEName_W057, - SEName_W056, - SEName_W250, - SEName_W030, - SEName_W039, - SEName_W054, - SEName_W077, - SEName_W020, - SEName_W082, - SEName_W047, - SEName_W195, - SEName_W006, - SEName_W091, - SEName_W146, - SEName_W120, - SEName_W153, - SEName_W071B, - SEName_W071, - SEName_W103, - SEName_W062, - SEName_W062B, - SEName_W048, - SEName_W187, - SEName_W118, - SEName_W155, - SEName_W122, - SEName_W060, - SEName_W185, - SEName_W014, - SEName_W043, - SEName_W207, - SEName_W207B, - SEName_W215, - SEName_W109, - SEName_W173, - SEName_W280, - SEName_W202, - SEName_W060B, - SEName_W076, - SEName_W080, - SEName_W100, - SEName_W107, - SEName_W166, - SEName_W129, - SEName_W115, - SEName_W112, - SEName_W197, - SEName_W199, - SEName_W236, - SEName_W204, - SEName_W268, - SEName_W070, - SEName_W063, - SEName_W127, - SEName_W179, - SEName_W151, - SEName_W201, - SEName_W161, - SEName_W161B, - SEName_W227, - SEName_W227B, - SEName_W226, - SEName_W208, - SEName_W213, - SEName_W213B, - SEName_W234, - SEName_W260, - SEName_W328, - SEName_W320, - SEName_W255, - SEName_W291, - SEName_W089, - SEName_W239, - SEName_W230, - SEName_W281, - SEName_W327, - SEName_W287, - SEName_W257, - SEName_W253, - SEName_W258, - SEName_W322, - SEName_W298, - SEName_W287B, - SEName_W114, - SEName_W063B -}; - -void sub_80BA0A8(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_80BA0C0(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - - if(gUnknown_020387B0 != 0) - { - m4aSoundMain(); - m4aSoundMain(); - m4aSoundMain(); - } -} - -// unused -void CB2_StartSoundCheckMenu(void) -{ - u8 taskId; - - SetVBlankCallback(NULL); - REG_DISPCNT = 0; - REG_BG2CNT = 0; - REG_BG1CNT = 0; - REG_BG0CNT = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - DmaFill16(3, 0, VRAM, VRAM_SIZE); - DmaFill32(3, 0, OAM, OAM_SIZE); - DmaFill16(3, 0, PLTT, PLTT_SIZE); - ResetPaletteFade(); - ResetTasks(); - ResetSpriteData(); - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow(&gWindowConfig_81E6CE4); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - REG_WIN0H = WIN_RANGE(0, 0); - REG_WIN0V = WIN_RANGE(0, 0); - REG_WIN1H = WIN_RANGE(0, 0); - REG_WIN1V = WIN_RANGE(0, 0); - REG_WININ = 0x1111; - REG_WINOUT = 0x31; - REG_BLDCNT = 0xE1; - REG_BLDALPHA = 0; - REG_BLDY = 7; - REG_IE = 1; // could be a typo of REG_IME - REG_IE |= 1; - REG_DISPSTAT |= 8; - SetVBlankCallback(sub_80BA0C0); - SetMainCallback2(sub_80BA0A8); - REG_DISPCNT = 0x7140; - taskId = CreateTask(sub_80BA258, 0); - TASK.WINDOW_SELECTED = BGM_WINDOW; - TASK.BGM_INDEX = 0; - TASK.SE_INDEX = 0; - TASK.UNK_DATA3 = 0; - gUnknown_020387B0 = 0; - TASK.UNK_DATA3 = 0; // why? - m4aSoundInit(); -} - -// Task_InitSoundCheckMenu -void sub_80BA258(u8 taskId) -{ - u8 soundcheckStr[sizeof(gDebugText_SoundCheckJap)]; - u8 bgmStr[sizeof(gDebugText_BGM)]; - u8 seStr[sizeof(gDebugText_SE)]; - u8 abDescStr[sizeof(gDebugText_ABDesc)]; - u8 upDownStr[sizeof(gDebugText_UpDown)]; - u8 driverStr[sizeof(gDebugText_DriverTest)]; - - memcpy(soundcheckStr, gDebugText_SoundCheckJap, sizeof(gDebugText_SoundCheckJap)); - memcpy(bgmStr, gDebugText_BGM, sizeof(gDebugText_BGM)); - memcpy(seStr, gDebugText_SE, sizeof(gDebugText_SE)); - memcpy(abDescStr, gDebugText_ABDesc, sizeof(gDebugText_ABDesc)); - memcpy(upDownStr, gDebugText_UpDown, sizeof(gDebugText_UpDown)); - memcpy(driverStr, gDebugText_DriverTest, sizeof(gDebugText_DriverTest)); - - if(!gPaletteFade.active) - { - MenuDrawTextWindow(0x2, 0, 0x1B, 0x3); - MenuDrawTextWindow(0x2, 0x5, 0x1B, 0xA); - MenuDrawTextWindow(0x2, 0xC, 0x1B, 0x11); - MenuPrint(soundcheckStr, 4, 1); - MenuPrint(abDescStr, 14, 1); - MenuPrint(bgmStr, 4, 6); - MenuPrint(upDownStr, 14, 6); - MenuPrint(seStr, 4, 13); - MenuPrint(upDownStr, 14, 13); - MenuPrint(driverStr, 14, 18); - TASK.FUNC = sub_80BA384; - REG_WIN0H = WIN_RANGE(17, 223); - REG_WIN0V = WIN_RANGE(1, 31); - } -} - -void sub_80BA384(u8 taskId) // Task_HandleDrawingSoundCheckMenuText -{ - sub_80BA6B8(TASK.WINDOW_SELECTED); - sub_80BA700(TASK.BGM_INDEX + BGM_STOP, 7, 8); // print by BGM index - sub_80BA79C(gBGMNames[TASK.BGM_INDEX], 11, 8); - sub_80BA700(TASK.SE_INDEX, 7, 15); - sub_80BA79C(gSENames[TASK.SE_INDEX], 11, 15); - TASK.FUNC = sub_80BA65C; -} - -#ifdef NONMATCHING -bool8 sub_80BA400(u8 taskId) // Task_ProcessSoundCheckMenuInput -{ - if(gMain.newKeys & R_BUTTON) // driver test - { - TASK.FUNC = sub_80BA800; - return FALSE; - } - if(gMain.newKeys & L_BUTTON) - { - TASK.FUNC = sub_80BAF84; - return FALSE; - } - if(gMain.newKeys & START_BUTTON) - { - TASK.FUNC = sub_80BB25C; - return FALSE; - } - if(gMain.newKeys & A_BUTTON) // both these cases insist on non reuses of certain data variables and cause the function to not match. - { - if(TASK.WINDOW_SELECTED != 0) // is playing? - { - if(TASK.UNK_DATA4 != 0) - { - if(TASK.SE_INDEX != 0) // why are you insiting on a non signed halfword? - { - m4aSongNumStop(TASK.UNK_DATA4); - } - else - { - m4aSongNumStop(TASK.SE_INDEX); - TASK.UNK_DATA4 = TASK.SE_INDEX; - return FALSE; - } - } - else if(TASK.SE_INDEX == 0) // _080BA4BA - { - return FALSE; - } - // _080BA4C4 - m4aSongNumStart(TASK.SE_INDEX); - TASK.UNK_DATA4 = TASK.SE_INDEX; - return FALSE; - } - else // _080BA4D0 - { - if(TASK.UNK_DATA3 != 0) - { - if(TASK.BGM_INDEX != 0) - { - m4aSongNumStop(TASK.UNK_DATA3 + BGM_STOP); - } - else // _080BA500 - { - m4aSongNumStop(TASK.UNK_DATA3 + BGM_STOP); - TASK.UNK_DATA3 = TASK.BGM_INDEX; - return FALSE; - } - } - else if(TASK.BGM_INDEX == 0) // _080BA514 - return FALSE; - - m4aSongNumStart(TASK.BGM_INDEX + BGM_STOP); - TASK.UNK_DATA3 = TASK.BGM_INDEX; - } - return FALSE; - } - if(gMain.newKeys & B_BUTTON) - { - m4aSongNumStart(5); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - TASK.FUNC = sub_80BA68C; - return FALSE; - } - if(gMain.newAndRepeatedKeys & DPAD_UP) - { - TASK.data[8] ^= A_BUTTON; // huh? - return TRUE; - } - if(gMain.newAndRepeatedKeys & DPAD_DOWN) - { - TASK.data[8] ^= A_BUTTON; // huh? - return TRUE; - } - else - { - u16 keys = gMain.newAndRepeatedKeys & DPAD_RIGHT; - if(keys) - { - if(TASK.WINDOW_SELECTED != 0) - { - if(TASK.SE_INDEX > 0) - { - TASK.SE_INDEX--; - } - else - { - TASK.SE_INDEX = 0xF7; - } - } - else if(TASK.BGM_INDEX > 0) - { - TASK.BGM_INDEX--; - } - else - { - TASK.BGM_INDEX = 0x75; - } - return TRUE; - } - if(gMain.newAndRepeatedKeys & DPAD_LEFT) - { - if(TASK.WINDOW_SELECTED != 0) - { - if(TASK.SE_INDEX < 0xF7) - { - TASK.SE_INDEX++; - } - else - { - TASK.SE_INDEX = keys; // ?? - } - } - else if(TASK.BGM_INDEX < 0x75) - { - TASK.BGM_INDEX++; - return TRUE; - } - else - { - TASK.BGM_INDEX = TASK.SE_INDEX; - return TRUE; - } - return TRUE; - } - if(gMain.heldKeys & SELECT_BUTTON) - { - gUnknown_020387B0 = A_BUTTON; - return FALSE; - } - else - { - gUnknown_020387B0 = (gMain.heldKeys & SELECT_BUTTON); - return FALSE; - } - } -} -#else -__attribute__((naked)) -bool8 sub_80BA400(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - sub sp, 0x4\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - ldr r2, _080BA428 @ =gMain\n\ - ldrh r1, [r2, 0x2E]\n\ - movs r0, 0x80\n\ - lsls r0, 1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080BA434\n\ - ldr r0, _080BA42C @ =gTasks\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldr r0, _080BA430 @ =sub_80BA800\n\ - str r0, [r1]\n\ - b _080BA64C\n\ - .align 2, 0\n\ -_080BA428: .4byte gMain\n\ -_080BA42C: .4byte gTasks\n\ -_080BA430: .4byte sub_80BA800\n\ -_080BA434:\n\ - movs r0, 0x80\n\ - lsls r0, 2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080BA458\n\ - ldr r0, _080BA450 @ =gTasks\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldr r0, _080BA454 @ =sub_80BAF84\n\ - str r0, [r1]\n\ - b _080BA64C\n\ - .align 2, 0\n\ -_080BA450: .4byte gTasks\n\ -_080BA454: .4byte sub_80BAF84\n\ -_080BA458:\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080BA478\n\ - ldr r0, _080BA470 @ =gTasks\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldr r0, _080BA474 @ =sub_80BB25C\n\ - str r0, [r1]\n\ - b _080BA64C\n\ - .align 2, 0\n\ -_080BA470: .4byte gTasks\n\ -_080BA474: .4byte sub_80BB25C\n\ -_080BA478:\n\ - movs r6, 0x1\n\ - movs r5, 0x1\n\ - ands r5, r1\n\ - cmp r5, 0\n\ - beq _080BA538\n\ - ldr r0, _080BA4AC @ =gTasks\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 3\n\ - adds r5, r1, r0\n\ - movs r1, 0x8\n\ - ldrsh r0, [r5, r1]\n\ - cmp r0, 0\n\ - beq _080BA4D0\n\ - movs r2, 0x10\n\ - ldrsh r0, [r5, r2]\n\ - cmp r0, 0\n\ - beq _080BA4BA\n\ - movs r3, 0xC\n\ - ldrsh r4, [r5, r3]\n\ - cmp r4, 0\n\ - beq _080BA4B0\n\ - ldrh r0, [r5, 0x10]\n\ - bl m4aSongNumStop\n\ - b _080BA4C4\n\ - .align 2, 0\n\ -_080BA4AC: .4byte gTasks\n\ -_080BA4B0:\n\ - ldrh r0, [r5, 0x10]\n\ - bl m4aSongNumStop\n\ - strh r4, [r5, 0x10]\n\ - b _080BA64C\n\ -_080BA4BA:\n\ - movs r4, 0xC\n\ - ldrsh r0, [r5, r4]\n\ - cmp r0, 0\n\ - bne _080BA4C4\n\ - b _080BA64C\n\ -_080BA4C4:\n\ - ldrh r0, [r5, 0xC]\n\ - bl m4aSongNumStart\n\ - ldrh r0, [r5, 0xC]\n\ - strh r0, [r5, 0x10]\n\ - b _080BA64C\n\ -_080BA4D0:\n\ - ldrh r1, [r5, 0xE]\n\ - movs r2, 0xE\n\ - ldrsh r0, [r5, r2]\n\ - cmp r0, 0\n\ - beq _080BA514\n\ - movs r3, 0xA\n\ - ldrsh r4, [r5, r3]\n\ - cmp r4, 0\n\ - beq _080BA500\n\ - ldr r0, _080BA4FC @ =0x0000015d\n\ - adds r4, r0, 0\n\ - adds r0, r1, r4\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - bl m4aSongNumStop\n\ - ldrh r1, [r5, 0xA]\n\ - adds r4, r1\n\ - lsls r4, 16\n\ - lsrs r4, 16\n\ - adds r0, r4, 0\n\ - b _080BA528\n\ - .align 2, 0\n\ -_080BA4FC: .4byte 0x0000015d\n\ -_080BA500:\n\ - ldr r2, _080BA510 @ =0x0000015d\n\ - adds r0, r1, r2\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - bl m4aSongNumStop\n\ - strh r4, [r5, 0xE]\n\ - b _080BA64C\n\ - .align 2, 0\n\ -_080BA510: .4byte 0x0000015d\n\ -_080BA514:\n\ - ldrh r1, [r5, 0xA]\n\ - movs r3, 0xA\n\ - ldrsh r0, [r5, r3]\n\ - cmp r0, 0\n\ - bne _080BA520\n\ - b _080BA64C\n\ -_080BA520:\n\ - ldr r4, _080BA534 @ =0x0000015d\n\ - adds r0, r1, r4\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ -_080BA528:\n\ - bl m4aSongNumStart\n\ - ldrh r0, [r5, 0xA]\n\ - strh r0, [r5, 0xE]\n\ - b _080BA64C\n\ - .align 2, 0\n\ -_080BA534: .4byte 0x0000015d\n\ -_080BA538:\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080BA570\n\ - movs r0, 0x5\n\ - bl m4aSongNumStart\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - str r5, [sp]\n\ - movs r1, 0\n\ - movs r2, 0\n\ - movs r3, 0x10\n\ - bl BeginNormalPaletteFade\n\ - ldr r1, _080BA568 @ =gTasks\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldr r1, _080BA56C @ =sub_80BA68C\n\ - str r1, [r0]\n\ - b _080BA64C\n\ - .align 2, 0\n\ -_080BA568: .4byte gTasks\n\ -_080BA56C: .4byte sub_80BA68C\n\ -_080BA570:\n\ - ldrh r1, [r2, 0x30]\n\ - movs r0, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080BA582\n\ - movs r0, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080BA59C\n\ -_080BA582:\n\ - ldr r0, _080BA598 @ =gTasks\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldrh r0, [r1, 0x8]\n\ - eors r0, r6\n\ - strh r0, [r1, 0x8]\n\ -_080BA592:\n\ - movs r0, 0x1\n\ - b _080BA64E\n\ - .align 2, 0\n\ -_080BA598: .4byte gTasks\n\ -_080BA59C:\n\ - movs r0, 0x10\n\ - ands r0, r1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, 0\n\ - beq _080BA5EA\n\ - ldr r0, _080BA5CC @ =gTasks\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - movs r2, 0x8\n\ - ldrsh r0, [r1, r2]\n\ - cmp r0, 0\n\ - beq _080BA5D6\n\ - ldrh r2, [r1, 0xC]\n\ - movs r3, 0xC\n\ - ldrsh r0, [r1, r3]\n\ - cmp r0, 0\n\ - ble _080BA5D0\n\ - subs r0, r2, 0x1\n\ - strh r0, [r1, 0xC]\n\ - b _080BA592\n\ - .align 2, 0\n\ -_080BA5CC: .4byte gTasks\n\ -_080BA5D0:\n\ - movs r0, 0xF7\n\ - strh r0, [r1, 0xC]\n\ - b _080BA592\n\ -_080BA5D6:\n\ - ldrh r2, [r1, 0xA]\n\ - movs r4, 0xA\n\ - ldrsh r0, [r1, r4]\n\ - cmp r0, 0\n\ - ble _080BA5E4\n\ - subs r0, r2, 0x1\n\ - b _080BA5E6\n\ -_080BA5E4:\n\ - movs r0, 0x75\n\ -_080BA5E6:\n\ - strh r0, [r1, 0xA]\n\ - b _080BA592\n\ -_080BA5EA:\n\ - movs r0, 0x20\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080BA630\n\ - ldr r1, _080BA614 @ =gTasks\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - adds r1, r0, r1\n\ - movs r0, 0x8\n\ - ldrsh r2, [r1, r0]\n\ - cmp r2, 0\n\ - beq _080BA61C\n\ - ldrh r2, [r1, 0xC]\n\ - movs r4, 0xC\n\ - ldrsh r0, [r1, r4]\n\ - cmp r0, 0xF6\n\ - bgt _080BA618\n\ - adds r0, r2, 0x1\n\ - strh r0, [r1, 0xC]\n\ - b _080BA592\n\ - .align 2, 0\n\ -_080BA614: .4byte gTasks\n\ -_080BA618:\n\ - strh r3, [r1, 0xC]\n\ - b _080BA592\n\ -_080BA61C:\n\ - ldrh r3, [r1, 0xA]\n\ - movs r4, 0xA\n\ - ldrsh r0, [r1, r4]\n\ - cmp r0, 0x74\n\ - bgt _080BA62C\n\ - adds r0, r3, 0x1\n\ - strh r0, [r1, 0xA]\n\ - b _080BA592\n\ -_080BA62C:\n\ - strh r2, [r1, 0xA]\n\ - b _080BA592\n\ -_080BA630:\n\ - ldrh r1, [r2, 0x2C]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - lsls r0, 16\n\ - lsrs r1, r0, 16\n\ - cmp r1, 0\n\ - beq _080BA648\n\ - ldr r0, _080BA644 @ =gUnknown_020387B0\n\ - strb r6, [r0]\n\ - b _080BA64C\n\ - .align 2, 0\n\ -_080BA644: .4byte gUnknown_020387B0\n\ -_080BA648:\n\ - ldr r0, _080BA658 @ =gUnknown_020387B0\n\ - strb r1, [r0]\n\ -_080BA64C:\n\ - movs r0, 0\n\ -_080BA64E:\n\ - add sp, 0x4\n\ - pop {r4-r6}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_080BA658: .4byte gUnknown_020387B0\n\ - .syntax divided"); -} -#endif - -void sub_80BA65C(u8 taskId) -{ - if(sub_80BA400(taskId) != FALSE) - TASK.FUNC = sub_80BA384; -} - -void sub_80BA68C(u8 taskId) -{ - if(!gPaletteFade.active) - { - DestroyTask(taskId); - SetMainCallback2(CB2_InitTitleScreen); - } -} - -void sub_80BA6B8(u8 windowType) -{ - switch(windowType) - { - case BGM_WINDOW: - default: - REG_WIN1H = WIN_RANGE(17, 223); - REG_WIN1V = WIN_RANGE(41, 87); - break; - case SE_WINDOW: - REG_WIN1H = WIN_RANGE(17, 223); - REG_WIN1V = WIN_RANGE(97, 143); - break; - } -} - -void sub_80BA700(u16 soundIndex, u16 x, u16 y) // PrintSoundNumber ? -{ - u8 i; - u8 str[5]; - bool8 someBool; - u8 divisorValue; - - for(i = 0; i < 3; i++) - str[i] = 0; // initialize array - - str[3] = CHAR_ELLIPSIS; - str[4] = EOS; - someBool = FALSE; - - divisorValue = soundIndex / 100; - if(divisorValue) - { - str[0] = divisorValue + CHAR_0; - someBool = TRUE; - } - - divisorValue = (soundIndex % 100) / 10; - if(divisorValue || someBool != FALSE) - str[1] = divisorValue + CHAR_0; - - str[2] = ((soundIndex % 100) % 10) + CHAR_0; - MenuPrint(str, x, y); -} - -void sub_80BA79C(const u8 *const string, u16 x, u16 y) -{ - u8 i; - u8 str[11]; - - for(i = 0; i < 11; i++) - str[i] = 0; // format string. - - str[10] = EOS; // the above for loop formats the last element of the array unnecessarily. - - for(i = 0; string[i] != EOS && i < 10; i++) - str[i] = string[i]; - - MenuPrint(str, x, y); -} - -void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu -{ - u8 bbackStr[sizeof(gDebugText_BBack)]; - u8 aplayStr[sizeof(gDebugText_APlay)]; - u8 voiceStr[sizeof(gDebugText_Voice)]; - u8 volumeStr[sizeof(gDebugText_Volume)]; - u8 panpotStr[sizeof(gDebugText_Panpot)]; - u8 pitchStr[sizeof(gDebugText_Pitch)]; - u8 lengthStr[sizeof(gDebugText_Length)]; - u8 releaseStr[sizeof(gDebugText_Release)]; - u8 progressStr[sizeof(gDebugText_Progress)]; - u8 chorusStr[sizeof(gDebugText_Chorus)]; - u8 priorityStr[sizeof(gDebugText_Priority)]; - u8 playingStr[sizeof(gDebugText_Playing)]; - u8 reverseStr[sizeof(gDebugText_Reverse)]; - u8 stereoStr[sizeof(gDebugText_Stereo)]; - - memcpy(bbackStr, gDebugText_BBack, sizeof(gDebugText_BBack)); - memcpy(aplayStr, gDebugText_APlay, sizeof(gDebugText_APlay)); - memcpy(voiceStr, gDebugText_Voice, sizeof(gDebugText_Voice)); - memcpy(volumeStr, gDebugText_Volume, sizeof(gDebugText_Volume)); - memcpy(panpotStr, gDebugText_Panpot, sizeof(gDebugText_Panpot)); - memcpy(pitchStr, gDebugText_Pitch, sizeof(gDebugText_Pitch)); - memcpy(lengthStr, gDebugText_Length, sizeof(gDebugText_Length)); - memcpy(releaseStr, gDebugText_Release, sizeof(gDebugText_Release)); - memcpy(progressStr, gDebugText_Progress, sizeof(gDebugText_Progress)); - memcpy(chorusStr, gDebugText_Chorus, sizeof(gDebugText_Chorus)); - memcpy(priorityStr, gDebugText_Priority, sizeof(gDebugText_Priority)); - memcpy(playingStr, gDebugText_Playing, sizeof(gDebugText_Playing)); - memcpy(reverseStr, gDebugText_Reverse, sizeof(gDebugText_Reverse)); - memcpy(stereoStr, gDebugText_Stereo, sizeof(gDebugText_Stereo)); - - REG_DISPCNT = 0x3140; - MenuDrawTextWindow(0, 0, 0x1D, 0x13); - MenuPrint(bbackStr, 0x13, 0x4); - MenuPrint(aplayStr, 0x13, 0x2); - MenuPrint(voiceStr, 0x2, 0x1); - MenuPrint(volumeStr, 0x2, 0x3); - MenuPrint(panpotStr, 0x2, 0x5); - MenuPrint(pitchStr, 0x2, 0x7); - MenuPrint(lengthStr, 0x2, 0x9); - MenuPrint(releaseStr, 0x2, 0xB); - MenuPrint(progressStr, 0x2, 0xD); - MenuPrint(chorusStr, 0x2, 0xF); - MenuPrint(priorityStr, 0x2, 0x11); - MenuPrint(playingStr, 0x13, 0x10); - MenuPrint(reverseStr, 0x13, 0xE); - MenuPrint(stereoStr, 0x13, 0xC); - REG_WIN0H = WIN_RANGE(0, 240); - REG_WIN0V = WIN_RANGE(0, 160); - gUnknown_020387B3 = 0; - gUnknown_020387B1 = 0; - gUnknown_020387B2 = 0; - gUnknown_03005D30 = NULL; - gUnknown_020387D8 = 0; - gUnknown_020387D9 = 1; - gUnknown_020387B4[CRY_TEST_UNK0] = 0; - gUnknown_020387B4[CRY_TEST_VOLUME] = 0x78; - gUnknown_020387B4[CRY_TEST_PANPOT] = 0; - gUnknown_020387B4[CRY_TEST_PITCH] = 0x3C00; - gUnknown_020387B4[CRY_TEST_LENGTH] = 0xB4; - gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; - gUnknown_020387B4[CRY_TEST_RELEASE] = 0; - gUnknown_020387B4[CRY_TEST_CHORUS] = 0; - gUnknown_020387B4[CRY_TEST_PRIORITY] = 2; - sub_80BAD5C(); - sub_80BAE10(0, 0); - TASK.FUNC = sub_80BAA48; -} - -void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput -{ - if(gMain.newKeys & B_BUTTON) - { - REG_DISPCNT = 0x7140; - REG_WIN0H = WIN_RANGE(17, 223); - REG_WIN0V = WIN_RANGE(1, 31); - MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - TASK.FUNC = sub_80BA258; - return; - } - if(gMain.newAndRepeatedKeys & DPAD_UP) // _080BAAA8 - { - u8 backupVar = gUnknown_020387B3; - if(--gUnknown_020387B3 < 0) - gUnknown_020387B3 = 8; - - sub_80BAE10(backupVar, gUnknown_020387B3); - return; - } - if(gMain.newAndRepeatedKeys & DPAD_DOWN) // _080BAAD0 - { - u8 backupVar = gUnknown_020387B3; - if(++gUnknown_020387B3 > 8) - gUnknown_020387B3 = 0; - - sub_80BAE10(backupVar, gUnknown_020387B3); - return; - } - if(gMain.newKeys & START_BUTTON) // _080BAAF8 - { - gUnknown_020387D8 ^= 1; - sub_80BAD5C(); - return; - } - if(gMain.newKeys & SELECT_BUTTON) // _080BAB14 - { - gUnknown_020387D9 ^= 1; - sub_80BAD5C(); - SetPokemonCryStereo(gUnknown_020387D9); - return; - } - if(gMain.newAndRepeatedKeys & R_BUTTON) // _080BAB38 - { - sub_80BACDC(10); - sub_80BAD5C(); - return; - } - if(gMain.newAndRepeatedKeys & L_BUTTON) // _080BAB46 - { - sub_80BACDC(-10); - sub_80BAD5C(); - return; - } - if(gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BAB56 - { - sub_80BACDC(-1); - sub_80BAD5C(); - return; - } - if(gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BAB64 - { - sub_80BACDC(1); - sub_80BAD5C(); - return; - } - if(gMain.newKeys & A_BUTTON) // _080BAB78 - { - u8 divide, remaining; - - SetPokemonCryVolume(gUnknown_020387B4[CRY_TEST_VOLUME]); - SetPokemonCryPanpot(gUnknown_020387B4[CRY_TEST_PANPOT]); - SetPokemonCryPitch(gUnknown_020387B4[CRY_TEST_PITCH]); - SetPokemonCryLength(gUnknown_020387B4[CRY_TEST_LENGTH]); - SetPokemonCryProgress(gUnknown_020387B4[CRY_TEST_PROGRESS]); - SetPokemonCryRelease(gUnknown_020387B4[CRY_TEST_RELEASE]); - SetPokemonCryChorus(gUnknown_020387B4[CRY_TEST_CHORUS]); - SetPokemonCryPriority(gUnknown_020387B4[CRY_TEST_PRIORITY]); - - remaining = gUnknown_020387B4[CRY_TEST_UNK0] % 128; - divide = gUnknown_020387B4[CRY_TEST_UNK0] / 128; - - switch(divide) - { - case 0: - if(gUnknown_020387D8) - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84537C0[remaining]); - else - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452590[remaining]); - break; - case 1: - if(gUnknown_020387D8) - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453DC0[remaining]); - else - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452B90[remaining]); - break; - case 2: - if(gUnknown_020387D8) - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84543C0[remaining]); - else - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453190[remaining]); - break; - case 3: - if(gUnknown_020387D8) - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84549C0[remaining]); - else - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453790[remaining]); - break; - } - } - - // _080BACA2 - if(gUnknown_03005D30 != NULL) - { - gUnknown_020387B1 = IsPokemonCryPlaying(gUnknown_03005D30); - - if(gUnknown_020387B1 != gUnknown_020387B2) - sub_80BAD5C(); - - gUnknown_020387B2 = gUnknown_020387B1; - } -} - -void sub_80BACDC(s8 var) -{ - int minMaxArray[ARRAY_COUNT(gUnknown_083D039C)]; - - memcpy(minMaxArray, gUnknown_083D039C, sizeof(gUnknown_083D039C)); - gUnknown_020387B4[gUnknown_020387B3] += var; - - if(gUnknown_020387B4[gUnknown_020387B3] > minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)]) - gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MIN)]; - - if(gUnknown_020387B4[gUnknown_020387B3] < minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MIN)]) - gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)]; -} - -void sub_80BAD5C(void) -{ - sub_80BAE78(gUnknown_020387B4[CRY_TEST_UNK0] + 1, 0xB, 0x1, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_VOLUME], 0xB, 0x3, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_PANPOT], 0xB, 0x5, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_PITCH], 0xB, 0x7, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_LENGTH], 0xB, 0x9, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_RELEASE], 0xB, 0xB, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_PROGRESS], 0xB, 0xD, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_CHORUS], 0xB, 0xF, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_PRIORITY], 0xB, 0x11, 0x5); - sub_80BAE78(gUnknown_020387B1, 0x1B, 0x10, 0x1); - sub_80BAE78(gUnknown_020387D8, 0x1B, 0xE, 0x1); - sub_80BAE78(gUnknown_020387D9, 0x1B, 0xC, 0x1); -} - -void sub_80BAE10(u8 var1, u8 var2) -{ - u8 str1[sizeof(gUnknown_083D03DC)]; - u8 str2[sizeof(gUnknown_083D03DE)]; - - memcpy(str1, gUnknown_083D03DC, sizeof(gUnknown_083D03DC)); - memcpy(str2, gUnknown_083D03DE, sizeof(gUnknown_083D03DE)); - - MenuPrint(str2, gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 1)]); - MenuPrint(str1, gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 1)]); -} - -/*void sub_80BAE78(int var1, u16 var2, u16 var3, u8 var4) -{ - u32 powers[6]; - u8 str[8]; - u8 i; - u8 someVar, someVar2; - - memcpy(powers, gUnknown_083D03E0, sizeof(powers); - - for(i = 0; i < var4; i++) - str[i] = 0; - - str[var4 + 1] = CHAR_0; - someVar = 0; - - if(var1 < 0) // make absolute value? wtf - { - var1 = -var1; // just use abs? - someVar = 1; - } - - // _080BAED6 - someVar2 = 0; - if(var4 == 1) - someVar2 = 1; - - // _080BAEE2 - for(;;) - { - - } -}*/ - -// no. -__attribute__((naked)) -void sub_80BAE78(int var1, u16 var2, u16 var3, u8 var4) -{ - 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\ - mov r8, r0\n\ - lsls r1, 16\n\ - lsrs r6, r1, 16\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - lsls r3, 24\n\ - lsrs r7, r3, 24\n\ - mov r1, sp\n\ - ldr r0, _080BAF80 @ =gUnknown_083D03E0\n\ - ldm r0!, {r3-r5}\n\ - stm r1!, {r3-r5}\n\ - ldm r0!, {r3-r5}\n\ - stm r1!, {r3-r5}\n\ - movs r5, 0\n\ - add r0, sp, 0x18\n\ - mov r9, r0\n\ - cmp r5, r7\n\ - bgt _080BAEC0\n\ - mov r4, r9\n\ - movs r3, 0\n\ -_080BAEAC:\n\ - lsls r0, r5, 24\n\ - asrs r0, 24\n\ - adds r1, r4, r0\n\ - strb r3, [r1]\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - asrs r0, 24\n\ - cmp r0, r7\n\ - ble _080BAEAC\n\ -_080BAEC0:\n\ - adds r0, r7, 0x1\n\ - add r0, r9\n\ - movs r1, 0xFF\n\ - strb r1, [r0]\n\ - movs r1, 0\n\ - mov r3, r8\n\ - cmp r3, 0\n\ - bge _080BAED6\n\ - negs r3, r3\n\ - mov r8, r3\n\ - movs r1, 0x1\n\ -_080BAED6:\n\ - movs r4, 0\n\ - mov r10, r4\n\ - cmp r7, 0x1\n\ - bne _080BAEE2\n\ - movs r5, 0x1\n\ - mov r10, r5\n\ -_080BAEE2:\n\ - subs r0, r7, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - lsls r0, r5, 24\n\ - lsls r6, 24\n\ - str r6, [sp, 0x24]\n\ - lsls r2, 24\n\ - str r2, [sp, 0x28]\n\ - cmp r0, 0\n\ - blt _080BAF62\n\ - str r1, [sp, 0x20]\n\ -_080BAEF8:\n\ - asrs r6, r0, 24\n\ - lsls r0, r6, 2\n\ - add r0, sp\n\ - ldr r1, [r0]\n\ - mov r0, r8\n\ - bl __divsi3\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - cmp r0, 0\n\ - bne _080BAF1A\n\ - mov r0, r10\n\ - cmp r0, 0\n\ - bne _080BAF1A\n\ - lsls r4, r5, 24\n\ - cmp r6, 0\n\ - bne _080BAF46\n\ -_080BAF1A:\n\ - lsls r4, r5, 24\n\ - ldr r3, [sp, 0x20]\n\ - cmp r3, 0\n\ - beq _080BAF34\n\ - mov r5, r10\n\ - cmp r5, 0\n\ - bne _080BAF34\n\ - asrs r0, r4, 24\n\ - subs r0, r7, r0\n\ - subs r0, 0x1\n\ - add r0, r9\n\ - movs r1, 0xAE\n\ - strb r1, [r0]\n\ -_080BAF34:\n\ - asrs r1, r4, 24\n\ - subs r1, r7, r1\n\ - add r1, r9\n\ - lsls r0, r2, 24\n\ - asrs r0, 24\n\ - subs r0, 0x5F\n\ - strb r0, [r1]\n\ - movs r0, 0x1\n\ - mov r10, r0\n\ -_080BAF46:\n\ - asrs r4, 24\n\ - lsls r0, r4, 2\n\ - add r0, sp\n\ - ldr r1, [r0]\n\ - mov r0, r8\n\ - bl __modsi3\n\ - mov r8, r0\n\ - subs r4, 0x1\n\ - lsls r4, 24\n\ - lsrs r5, r4, 24\n\ - lsls r0, r5, 24\n\ - cmp r0, 0\n\ - bge _080BAEF8\n\ -_080BAF62:\n\ - ldr r3, [sp, 0x24]\n\ - lsrs r1, r3, 24\n\ - ldr r4, [sp, 0x28]\n\ - lsrs r2, r4, 24\n\ - mov r0, r9\n\ - bl MenuPrint\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 {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080BAF80: .4byte gUnknown_083D03E0\n\ - .syntax divided"); -} - -void sub_80BAF84(u8 taskId) -{ - u8 seStr[sizeof(gOtherText_SE)]; - u8 panStr[sizeof(gOtherText_Pan)]; - u8 playingStr[sizeof(gDebugText_Playing)]; - - memcpy(seStr, gOtherText_SE, sizeof(gOtherText_SE)); - memcpy(panStr, gOtherText_Pan, sizeof(gOtherText_Pan)); - memcpy(playingStr, gDebugText_Playing, sizeof(gDebugText_Playing)); - - REG_DISPCNT = 0x3140; - MenuDrawTextWindow(0, 0, 0x1D, 0x13); - MenuPrint(seStr, 3, 2); - MenuPrint(panStr, 3, 4); - MenuPrint(playingStr, 3, 8); - REG_WIN0H = WIN_RANGE(0, 240); - REG_WIN0V = WIN_RANGE(0, 160); - gUnknown_020387B4[CRY_TEST_UNK0] = 1; - gUnknown_020387B4[CRY_TEST_PANPOT] = 0; - gUnknown_020387B4[CRY_TEST_CHORUS] = 0; - gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; - gUnknown_020387B4[CRY_TEST_RELEASE] = 0; - sub_80BB1D4(); - TASK.FUNC = sub_80BB038; -} - -void sub_80BB038(u8 taskId) -{ - sub_80BB1D4(); - if(gUnknown_020387B4[CRY_TEST_PROGRESS]) - { - if(gUnknown_020387B4[CRY_TEST_RELEASE]) - { - gUnknown_020387B4[CRY_TEST_RELEASE]--; - } - else // _080BB05C - { - s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]; - if(panpot != -128) - { - if(panpot == 0x7F) - { - gUnknown_020387B4[CRY_TEST_CHORUS] += 2; - if(gUnknown_020387B4[CRY_TEST_CHORUS] < 0x3F) - SE12PanpotControl(gUnknown_020387B4[CRY_TEST_CHORUS]); - } - } - else // _080BB08C - { - gUnknown_020387B4[CRY_TEST_CHORUS] -= 2; - if(gUnknown_020387B4[CRY_TEST_CHORUS] > -0x40) - SE12PanpotControl(gUnknown_020387B4[CRY_TEST_CHORUS]); - } - } - } - // _080BB0A2 - if(gMain.newKeys & B_BUTTON) - { - REG_DISPCNT = 0x7140; - REG_WIN0H = WIN_RANGE(17, 223); - REG_WIN0V = WIN_RANGE(1, 31); - MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - TASK.FUNC = sub_80BA258; - return; - } - if(gMain.newKeys & A_BUTTON) // _080BB104 - { - s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]; - if(panpot != -128) - { - if(panpot == 0x7F) - { - PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], -0x40); - gUnknown_020387B4[CRY_TEST_CHORUS] = -0x40; - gUnknown_020387B4[CRY_TEST_PROGRESS] = 1; - gUnknown_020387B4[CRY_TEST_RELEASE] = 0x1E; - return; - } - } - else // _080BB140 - { - PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], 0x3F); - gUnknown_020387B4[CRY_TEST_CHORUS] = 0x3F; - gUnknown_020387B4[CRY_TEST_PROGRESS] = 1; - gUnknown_020387B4[CRY_TEST_RELEASE] = 0x1E; - return; - } - // _080BB154 - PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], panpot); - gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; - return; - } - if(gMain.newKeys & L_BUTTON) // _080BB15E - { - gUnknown_020387B4[CRY_TEST_PANPOT]++; - if(gUnknown_020387B4[CRY_TEST_PANPOT] > 4) - gUnknown_020387B4[CRY_TEST_PANPOT] = 0; - } - if(gMain.newKeys & R_BUTTON) // _080BB176 - { - gUnknown_020387B4[CRY_TEST_PANPOT]--; - if(gUnknown_020387B4[CRY_TEST_PANPOT] < 0) - gUnknown_020387B4[CRY_TEST_PANPOT] = 4; - } - if(gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BB192 - { - gUnknown_020387B4[CRY_TEST_UNK0]++; - if(gUnknown_020387B4[CRY_TEST_UNK0] > 0xF7) - gUnknown_020387B4[CRY_TEST_UNK0] = 0; - } - else if(gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BB1B0 - { - gUnknown_020387B4[CRY_TEST_UNK0]--; - if(gUnknown_020387B4[CRY_TEST_UNK0] < 0) - gUnknown_020387B4[CRY_TEST_UNK0] = 0xF7; - } -} - -void sub_80BB1D4(void) -{ - u8 lrStr[sizeof(gOtherText_LR)]; - u8 rlStr[sizeof(gOtherText_RL)]; - - memcpy(lrStr, gOtherText_LR, sizeof(lrStr)); - memcpy(rlStr, gOtherText_RL, sizeof(rlStr)); - - sub_80BAE78(gUnknown_020387B4[CRY_TEST_UNK0], 7, 2, 3); - - switch(gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]) - { - case 0x7F: - MenuPrint(lrStr, 7, 4); - break; - case -0x80: - MenuPrint(rlStr, 7, 4); - break; - default: - sub_80BAE78(gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]], 7, 4, 3); - break; - } - sub_80BAE78(IsSEPlaying(), 12, 8, 1); -} - -void sub_80BB25C(u8 taskId) -{ - struct CryRelatedStruct cryStruct, cryStruct2; - u8 zero; - - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow(&gWindowConfig_81E6CE4); - gUnknown_03005D34 = 1; - ResetSpriteData(); - FreeAllSpritePalettes(); - - cryStruct.unk0 = 0x2000; - cryStruct.unk2 = 29; - cryStruct.paletteNo = 12; - cryStruct.yPos = 30; - cryStruct.xPos = 4; - - zero = 0; // wtf? - gUnknown_03005E98 = 0; - - while(sub_8119E3C(&cryStruct, 3) == FALSE); - - cryStruct2.unk0 = 0; - cryStruct2.unk2 = 15; - cryStruct2.paletteNo = 13; - cryStruct2.xPos = 12; - cryStruct2.yPos = 12; - - zero = 0; // wtf? - gUnknown_03005E98 = 0; - - while(ShowPokedexCryScreen(&cryStruct2, 2) == FALSE); - - MenuDrawTextWindow(0, 16, 5, 19); - sub_80BB494(); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG2CNT = 0xF01; - REG_BG3CNT = 0x1D03; - REG_DISPCNT = 0x1d40; - m4aMPlayFadeOutTemporarily(&gMPlay_BGM, 2); - TASK.FUNC = sub_80BB3B4; -} - -void sub_80BB3B4(u8 taskId) -{ - sub_8119F88(3); - - if(gMain.newKeys & A_BUTTON) - { - sub_811A050(gUnknown_03005D34); - } - if(gMain.newKeys & R_BUTTON) - { - StopCryAndClearCrySongs(); - } - if(gMain.newAndRepeatedKeys & DPAD_UP) - { - if(--gUnknown_03005D34 == 0) - gUnknown_03005D34 = 384; // total species - sub_80BB494(); - } - if(gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if(++gUnknown_03005D34 > 384) - gUnknown_03005D34 = 1; - sub_80BB494(); - } - if(gMain.newKeys & B_BUTTON) - { - REG_DISPCNT = 0x7140; - REG_WIN0H = WIN_RANGE(17, 223); - REG_WIN0V = WIN_RANGE(1, 31); - MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - TASK.FUNC = sub_80BA258; - DestroyCryMeterNeedleSprite(); - } -} - -void sub_80BB494(void) -{ - sub_80BAE78(gUnknown_03005D34, 1, 17, 3); -} diff --git a/src/sprite.c b/src/sprite.c deleted file mode 100644 index fb8c2b648..000000000 --- a/src/sprite.c +++ /dev/null @@ -1,1802 +0,0 @@ -#include "global.h" -#include "sprite.h" -#include "main.h" -#include "menu_cursor.h" -#include "palette.h" - -#define MAX_SPRITE_COPY_REQUESTS 64 - -#define OAM_MATRIX_COUNT 32 - -#define SET_SPRITE_TILE_RANGE(index, start, count) \ -{ \ - sSpriteTileRanges[index * 2] = start; \ - (sSpriteTileRanges + 1)[index * 2] = count; \ -} - -#define ALLOC_SPRITE_TILE(n) \ -{ \ - gSpriteTileAllocBitmap[(n) / 8] |= (1 << ((n) % 8)); \ -} - -#define FREE_SPRITE_TILE(n) \ -{ \ - gSpriteTileAllocBitmap[(n) / 8] &= ~(1 << ((n) % 8)); \ -} - -#define SPRITE_TILE_IS_ALLOCATED(n) ((gSpriteTileAllocBitmap[(n) / 8] >> ((n) % 8)) & 1) - -struct OamMatrix -{ - s16 a; - s16 b; - s16 c; - s16 d; -}; - -struct SpriteCopyRequest -{ - const u8 *src; - u8 *dest; - u16 size; -}; - -struct OamDimensions -{ - s8 width; - s8 height; -}; - -static void UpdateOamCoords(void); -static void BuildSpritePriorities(void); -static void SortSprites(void); -static void CopyMatricesToOamBuffer(void); -static void AddSpritesToOamBuffer(void); -static u8 CreateSpriteAt(u8 index, const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority); -static void ClearSpriteCopyRequests(void); -static void ResetOamMatrices(void); -static void ResetSprite(struct Sprite *sprite); -static s16 AllocSpriteTiles(u16 tileCount); -static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images); -static void ResetAllSprites(void); -static void BeginAnim(struct Sprite *sprite); -static void ContinueAnim(struct Sprite *sprite); -static void AnimCmd_frame(struct Sprite *sprite); -static void AnimCmd_end(struct Sprite *sprite); -static void AnimCmd_jump(struct Sprite *sprite); -static void AnimCmd_loop(struct Sprite *sprite); -static void BeginAnimLoop(struct Sprite *sprite); -static void ContinueAnimLoop(struct Sprite *sprite); -static void JumpToTopOfAnimLoop(struct Sprite *sprite); -static void BeginAffineAnim(struct Sprite *sprite); -static void ContinueAffineAnim(struct Sprite *sprite); -static void AffineAnimDelay(u8 matrixNum, struct Sprite *sprite); -static void AffineAnimCmd_loop(u8 matrixNum, struct Sprite *sprite); -static void BeginAffineAnimLoop(u8 matrixNum, struct Sprite *sprite); -static void ContinueAffineAnimLoop(u8 matrixNum, struct Sprite *sprite); -static void JumpToTopOfAffineAnimLoop(u8 matrixNum, struct Sprite *sprite); -static void AffineAnimCmd_jump(u8 matrixNum, struct Sprite *sprite); -static void AffineAnimCmd_end(u8 matrixNum, struct Sprite *sprite); -static void AffineAnimCmd_frame(u8 matrixNum, struct Sprite *sprite); -static void CopyOamMatrix(u8 destMatrixIndex, struct OamMatrix *srcMatrix); -static u8 GetSpriteMatrixNum(struct Sprite *sprite); -static void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip); -static void AffineAnimStateRestartAnim(u8 matrixNum); -static void AffineAnimStateStartAnim(u8 matrixNum, u8 animNum); -static void AffineAnimStateReset(u8 matrixNum); -static void ApplyAffineAnimFrameAbsolute(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd); -static void DecrementAnimDelayCounter(struct Sprite *sprite); -static bool8 DecrementAffineAnimDelayCounter(struct Sprite *sprite, u8 matrixNum); -static void ApplyAffineAnimFrameRelativeAndUpdateMatrix(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd); -static s16 ConvertScaleParam(s16 scale); -static void GetAffineAnimFrame(u8 matrixNum, struct Sprite *sprite, struct AffineAnimFrameCmd *frameCmd); -static void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd); -static void ResetAffineAnimData(void); -static u8 IndexOfSpriteTileTag(u16 tag); -static void AllocSpriteTileRange(u16 tag, u16 start, u16 count); -static void DoLoadSpritePalette(const u16 *src, u16 paletteOffset); - -typedef void (*AnimFunc)(struct Sprite *); -typedef void (*AnimCmdFunc)(struct Sprite *); -typedef void (*AffineAnimCmdFunc)(u8 matrixNum, struct Sprite *); - -#define DUMMY_OAM_DATA \ -{ \ - 160, /* Y (off-screen) */ \ - 0, \ - 0, \ - 0, \ - 0, \ - 0, \ - 304, /* X */ \ - 0, \ - 0, \ - 0, \ - 3, /* lowest priority */ \ - 0, \ - 0 \ -} - -#define ANIM_END 0xFFFF -#define AFFINE_ANIM_END 0x7FFF - -// forward declarations -const union AnimCmd * const gDummySpriteAnimTable[]; -const union AffineAnimCmd * const gDummySpriteAffineAnimTable[]; -const struct SpriteTemplate gDummySpriteTemplate; - -// Unreferenced error message. -// It means "The DMA transfer request table has exceeded its limit." -static const u8 sDmaOverErrorMsg[] = - _( - "DMA OVER\n" - "DMAてんそう\n" - "リクエストテーブルが\n" - "オーバーしました" - ); - -// Unreferenced data. -static const u8 sUnknownData[24] = -{ - 0x01, 0x04, 0x10, 0x40, - 0x02, 0x04, 0x08, 0x20, - 0x02, 0x04, 0x08, 0x20, - 0x01, 0x04, 0x10, 0x40, - 0x02, 0x04, 0x08, 0x20, - 0x02, 0x04, 0x08, 0x20, -}; - -static const u8 sCenterToCornerVecTable[3][4][2] = -{ - { // square - { -4, -4 }, - { -8, -8 }, - { -16, -16 }, - { -32, -32 }, - }, - { // horizontal rectangle - { -8, -4 }, - { -16, -4 }, - { -16, -8 }, - { -32, -16 }, - }, - { // vertical rectangle - { -4, -8 }, - { -4, -16 }, - { -8, -16 }, - { -16, -32 }, - }, -}; - -static const struct Sprite sDummySprite = -{ - .oam = DUMMY_OAM_DATA, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .template = &gDummySpriteTemplate, - .subspriteTables = NULL, - .callback = SpriteCallbackDummy, - .pos1 = { 304, 160 }, - .pos2 = { 0, 0 }, - .centerToCornerVecX = 0, - .centerToCornerVecY = 0, - .animNum = 0, - .animCmdIndex = 0, - .animDelayCounter = 0, - .animPaused = 0, - .affineAnimPaused = 0, - .animLoopCounter = 0, - .data0 = 0, - .data1 = 0, - .data2 = 0, - .data3 = 0, - .data4 = 0, - .data5 = 0, - .data6 = 0, - .data7 = 0, - .inUse = 0, - .coordOffsetEnabled = 0, - .invisible = 0, - .flags_3 = 0, - .flags_4 = 0, - .flags_5 = 0, - .flags_6 = 0, - .flags_7 = 0, - .hFlip = 0, - .vFlip = 0, - .animBeginning = 0, - .affineAnimBeginning = 0, - .animEnded = 0, - .affineAnimEnded = 0, - .usingSheet = 0, - .flags_f = 0, - .sheetTileStart = 0, - .subspriteTableNum = 0, - .subspriteMode = 0, - .subpriority = 0xFF -}; - -const struct OamData gDummyOamData = DUMMY_OAM_DATA; - -static const union AnimCmd sDummyAnim = { ANIM_END }; - -const union AnimCmd * const gDummySpriteAnimTable[] = { &sDummyAnim }; - -static const union AffineAnimCmd sDummyAffineAnim = { AFFINE_ANIM_END }; - -const union AffineAnimCmd * const gDummySpriteAffineAnimTable[] = { &sDummyAffineAnim }; - -const struct SpriteTemplate gDummySpriteTemplate = -{ - .tileTag = 0, - .paletteTag = 0xFFFF, - .oam = &gDummyOamData, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - -// TODO: Find out what these are used for. -static const u16 sOamBitmasks[9] = -{ - 0xFF00, 0x00FF, 0x001F, - 0xFE00, 0x01FF, 0x03E0, - 0xFC00, 0x03FF, 0xFC00, -}; - -static const AnimFunc sAnimFuncs[] = -{ - ContinueAnim, - BeginAnim, -}; - -static const AnimFunc sAffineAnimFuncs[] = -{ - ContinueAffineAnim, - BeginAffineAnim, -}; - -static const AnimCmdFunc sAnimCmdFuncs[] = -{ - AnimCmd_loop, - AnimCmd_jump, - AnimCmd_end, - AnimCmd_frame, -}; - -static const AffineAnimCmdFunc sAffineAnimCmdFuncs[] = -{ - AffineAnimCmd_loop, - AffineAnimCmd_jump, - AffineAnimCmd_end, - AffineAnimCmd_frame, -}; - -static const struct OamDimensions sOamDimensions[3][4] = -{ - { // square - { 8, 8 }, - { 16, 16 }, - { 32, 32 }, - { 64, 64 }, - }, - { // horizontal rectangle - { 16, 8 }, - { 32, 8 }, - { 32, 16 }, - { 64, 32 }, - }, - { // vertical rectangle - { 8, 16 }, - { 8, 32 }, - { 16, 32 }, - { 32, 64 }, - }, -}; - -static u16 sSpriteTileRangeTags[MAX_SPRITES]; -static u16 sSpriteTileRanges[MAX_SPRITES * 2]; -static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT]; -static u16 sSpritePaletteTags[16]; - -u8 gSpriteOrder[MAX_SPRITES]; -bool8 gShouldProcessSpriteCopyRequests; -u8 gSpriteCopyRequestCount; -struct SpriteCopyRequest gSpriteCopyRequests[MAX_SPRITE_COPY_REQUESTS]; -u8 gOamLimit; -u16 gReservedSpriteTileCount; -u8 gSpriteTileAllocBitmap[128]; -s16 gSpriteCoordOffsetX; -s16 gSpriteCoordOffsetY; -u32 gOamMatrixAllocBitmap; -struct OamMatrix gOamMatrices[OAM_MATRIX_COUNT]; -u8 gReservedSpritePaletteCount; - -EWRAM_DATA struct Sprite gSprites[MAX_SPRITES + 1] = {0}; -EWRAM_DATA u16 gSpritePriorities[MAX_SPRITES] = {0}; -EWRAM_DATA u8 gAffineAnimsDisabled = {0}; - -void ResetSpriteData(void) -{ - ResetOamRange(0, 128); - ResetAllSprites(); - ClearSpriteCopyRequests(); - ResetAffineAnimData(); - FreeSpriteTileRanges(); - gOamLimit = 64; - gReservedSpriteTileCount = 0; - AllocSpriteTiles(0); - gSpriteCoordOffsetX = 0; - gSpriteCoordOffsetY = 0; -} - -void AnimateSprites(void) -{ - u8 i; - for (i = 0; i < MAX_SPRITES; i++) - { - struct Sprite *sprite = &gSprites[i]; - - if (sprite->inUse) - { - sprite->callback(sprite); - - if (sprite->inUse) - AnimateSprite(sprite); - } - } -} - -void BuildOamBuffer(void) -{ - u8 temp; - UpdateOamCoords(); - BuildSpritePriorities(); - SortSprites(); - temp = gMain.oamLoadDisabled; - gMain.oamLoadDisabled = TRUE; - AddSpritesToOamBuffer(); - CopyMatricesToOamBuffer(); - gMain.oamLoadDisabled = temp; - gShouldProcessSpriteCopyRequests = TRUE; -} - -static void UpdateOamCoords(void) -{ - u8 i; - for (i = 0; i < MAX_SPRITES; i++) - { - struct Sprite *sprite = &gSprites[i]; - if (sprite->inUse && !sprite->invisible) - { - if (sprite->coordOffsetEnabled) - { - sprite->oam.x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; - sprite->oam.y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; - } - else - { - sprite->oam.x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; - sprite->oam.y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; - } - } - } -} - -static void BuildSpritePriorities(void) -{ - u16 i; - for (i = 0; i < MAX_SPRITES; i++) - { - struct Sprite *sprite = &gSprites[i]; - u16 priority = sprite->subpriority | (sprite->oam.priority << 8); - gSpritePriorities[i] = priority; - } -} - -static void SortSprites(void) -{ - u8 i; - for (i = 1; i < MAX_SPRITES; i++) - { - u8 j = i; - struct Sprite *sprite1 = &gSprites[gSpriteOrder[i - 1]]; - struct Sprite *sprite2 = &gSprites[gSpriteOrder[i]]; - u16 sprite1Priority = gSpritePriorities[gSpriteOrder[i - 1]]; - u16 sprite2Priority = gSpritePriorities[gSpriteOrder[i]]; - s16 sprite1Y = sprite1->oam.y; - s16 sprite2Y = sprite2->oam.y; - - if (sprite1Y >= DISPLAY_HEIGHT) - sprite1Y = sprite1Y - 256; - - if (sprite2Y >= DISPLAY_HEIGHT) - sprite2Y = sprite2Y - 256; - - if (sprite1->oam.affineMode == ST_OAM_AFFINE_DOUBLE - && sprite1->oam.size == 3) - { - u32 shape = sprite1->oam.shape; - if (shape == ST_OAM_SQUARE || shape == 2) - { - if (sprite1Y > 128) - sprite1Y = sprite1Y - 256; - } - } - - if (sprite2->oam.affineMode == ST_OAM_AFFINE_DOUBLE - && sprite2->oam.size == 3) - { - u32 shape = sprite2->oam.shape; - if (shape == ST_OAM_SQUARE || shape == ST_OAM_V_RECTANGLE) - { - if (sprite2Y > 128) - sprite2Y = sprite2Y - 256; - } - } - - while (j > 0 - && ((sprite1Priority > sprite2Priority) - || (sprite1Priority == sprite2Priority && sprite1Y < sprite2Y))) - { - u8 temp = gSpriteOrder[j]; - gSpriteOrder[j] = gSpriteOrder[j - 1]; - gSpriteOrder[j - 1] = temp; - - // UB: If j equals 1, then j-- makes j equal 0. - // Then, gSpriteOrder[-1] gets accessed below. - // Although this doesn't result in a bug in the ROM, - // the behavior is undefined. - j--; - - sprite1 = &gSprites[gSpriteOrder[j - 1]]; - sprite2 = &gSprites[gSpriteOrder[j]]; - sprite1Priority = gSpritePriorities[gSpriteOrder[j - 1]]; - sprite2Priority = gSpritePriorities[gSpriteOrder[j]]; - sprite1Y = sprite1->oam.y; - sprite2Y = sprite2->oam.y; - - if (sprite1Y >= DISPLAY_HEIGHT) - sprite1Y = sprite1Y - 256; - - if (sprite2Y >= DISPLAY_HEIGHT) - sprite2Y = sprite2Y - 256; - - if (sprite1->oam.affineMode == ST_OAM_AFFINE_DOUBLE - && sprite1->oam.size == 3) - { - u32 shape = sprite1->oam.shape; - if (shape == ST_OAM_SQUARE || shape == ST_OAM_V_RECTANGLE) - { - if (sprite1Y > 128) - sprite1Y = sprite1Y - 256; - } - } - - if (sprite2->oam.affineMode == ST_OAM_AFFINE_DOUBLE - && sprite2->oam.size == 3) - { - u32 shape = sprite2->oam.shape; - if (shape == ST_OAM_SQUARE || shape == ST_OAM_V_RECTANGLE) - { - if (sprite2Y > 128) - sprite2Y = sprite2Y - 256; - } - } - } - } -} - -static void CopyMatricesToOamBuffer(void) -{ - u8 i; - for (i = 0; i < OAM_MATRIX_COUNT; i++) - { - u32 base = 4 * i; - gMain.oamBuffer[base + 0].affineParam = gOamMatrices[i].a; - gMain.oamBuffer[base + 1].affineParam = gOamMatrices[i].b; - gMain.oamBuffer[base + 2].affineParam = gOamMatrices[i].c; - gMain.oamBuffer[base + 3].affineParam = gOamMatrices[i].d; - } -} - -static void AddSpritesToOamBuffer(void) -{ - u8 i = 0; - u8 oamIndex = 0; - - while (i < MAX_SPRITES) - { - struct Sprite *sprite = &gSprites[gSpriteOrder[i]]; - if (sprite->inUse && !sprite->invisible && AddSpriteToOamBuffer(sprite, &oamIndex)) - break; - i++; - } - - gMain.objCount = oamIndex; - - while (oamIndex < gOamLimit) - { - gMain.oamBuffer[oamIndex] = gDummyOamData; - oamIndex++; - } -} - -u8 CreateSprite(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority) -{ - u8 i; - - for (i = 0; i < MAX_SPRITES; i++) - if (!gSprites[i].inUse) - return CreateSpriteAt(i, template, x, y, subpriority); - - return MAX_SPRITES; -} - -u8 CreateSpriteAtEnd(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority) -{ - s16 i; - - for (i = MAX_SPRITES - 1; i > -1; i--) - if (!gSprites[i].inUse) - return CreateSpriteAt(i, template, x, y, subpriority); - - return MAX_SPRITES; -} - -u8 CreateInvisibleSprite(void (*callback)(struct Sprite *)) -{ - u8 index = CreateSprite(&gDummySpriteTemplate, 0, 0, 31); - - if (index == MAX_SPRITES) - { - return MAX_SPRITES; - } - else - { - gSprites[index].invisible = TRUE; - gSprites[index].callback = callback; - return index; - } -} - -static u8 CreateSpriteAt(u8 index, const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority) -{ - struct Sprite *sprite = &gSprites[index]; - - ResetSprite(sprite); - - sprite->inUse = TRUE; - sprite->animBeginning = TRUE; - sprite->affineAnimBeginning = TRUE; - sprite->usingSheet = TRUE; - - sprite->subpriority = subpriority; - sprite->oam = *template->oam; - sprite->anims = template->anims; - sprite->affineAnims = template->affineAnims; - sprite->template = template; - sprite->callback = template->callback; - sprite->pos1.x = x; - sprite->pos1.y = y; - - CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); - - if (template->tileTag == 0xFFFF) - { - s16 tileNum; - sprite->images = template->images; - tileNum = AllocSpriteTiles((u8)(sprite->images->size / TILE_SIZE_4BPP)); - if (tileNum == -1) - { - ResetSprite(sprite); - return MAX_SPRITES; - } - sprite->oam.tileNum = tileNum; - sprite->usingSheet = FALSE; - sprite->sheetTileStart = 0; - } - else - { - sprite->sheetTileStart = GetSpriteTileStartByTag(template->tileTag); - SetSpriteSheetFrameTileNum(sprite); - } - - if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) - InitSpriteAffineAnim(sprite); - - if (template->paletteTag != 0xFFFF) - sprite->oam.paletteNum = IndexOfSpritePaletteTag(template->paletteTag); - - return index; -} - -u8 CreateSpriteAndAnimate(struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority) -{ - u8 i; - - for (i = 0; i < MAX_SPRITES; i++) - { - struct Sprite *sprite = &gSprites[i]; - - if (!gSprites[i].inUse) - { - u8 index = CreateSpriteAt(i, template, x, y, subpriority); - - if (index == MAX_SPRITES) - return MAX_SPRITES; - - gSprites[i].callback(sprite); - - if (gSprites[i].inUse) - AnimateSprite(sprite); - - return index; - } - } - - return MAX_SPRITES; -} - -void DestroySprite(struct Sprite *sprite) -{ - if (sprite->inUse) - { - if (!sprite->usingSheet) - { - u16 i; - u16 tileEnd = (sprite->images->size / TILE_SIZE_4BPP) + sprite->oam.tileNum; - for (i = sprite->oam.tileNum; i < tileEnd; i++) - FREE_SPRITE_TILE(i); - } - ResetSprite(sprite); - } -} - -void ResetOamRange(u8 a, u8 b) -{ - u8 i; - - for (i = a; i < b; i++) - { - struct OamData *oamBuffer = gMain.oamBuffer; - oamBuffer[i] = *(struct OamData *)&gDummyOamData; - } -} - -void LoadOam(void) -{ - if (!gMain.oamLoadDisabled) - CpuCopy32(gMain.oamBuffer, (void *)OAM, sizeof(gMain.oamBuffer)); -} - -static void ClearSpriteCopyRequests(void) -{ - u8 i; - - gShouldProcessSpriteCopyRequests = FALSE; - gSpriteCopyRequestCount = 0; - - for (i = 0; i < MAX_SPRITE_COPY_REQUESTS; i++) - { - gSpriteCopyRequests[i].src = 0; - gSpriteCopyRequests[i].dest = 0; - gSpriteCopyRequests[i].size = 0; - } -} - -static void ResetOamMatrices(void) -{ - u8 i; - for (i = 0; i < OAM_MATRIX_COUNT; i++) - { - // set to identity matrix - gOamMatrices[i].a = 0x0100; - gOamMatrices[i].b = 0x0000; - gOamMatrices[i].c = 0x0000; - gOamMatrices[i].d = 0x0100; - } -} - -void SetOamMatrix(u8 matrixNum, u16 a, u16 b, u16 c, u16 d) -{ - gOamMatrices[matrixNum].a = a; - gOamMatrices[matrixNum].b = b; - gOamMatrices[matrixNum].c = c; - gOamMatrices[matrixNum].d = d; -} - -static void ResetSprite(struct Sprite *sprite) -{ - *sprite = sDummySprite; -} - -void CalcCenterToCornerVec(struct Sprite *sprite, u8 shape, u8 size, u8 affineMode) -{ - u8 x = sCenterToCornerVecTable[shape][size][0]; - u8 y = sCenterToCornerVecTable[shape][size][1]; - - if (affineMode & ST_OAM_AFFINE_DOUBLE_MASK) - { - x *= 2; - y *= 2; - } - - sprite->centerToCornerVecX = x; - sprite->centerToCornerVecY = y; -} - -static s16 AllocSpriteTiles(u16 tileCount) -{ - u16 i; - s16 start; - u16 numTilesFound; - - if (tileCount == 0) - { - // Free all unreserved tiles if the tile count is 0. - for (i = gReservedSpriteTileCount; i < TOTAL_OBJ_TILE_COUNT; i++) - FREE_SPRITE_TILE(i); - - return 0; - } - - i = gReservedSpriteTileCount; - - for (;;) - { - while (SPRITE_TILE_IS_ALLOCATED(i)) - { - i++; - - if (i == TOTAL_OBJ_TILE_COUNT) - return -1; - } - - start = i; - numTilesFound = 1; - - while (numTilesFound != tileCount) - { - i++; - - if (i == TOTAL_OBJ_TILE_COUNT) - return -1; - - if (!SPRITE_TILE_IS_ALLOCATED(i)) - numTilesFound++; - else - break; - } - - if (numTilesFound == tileCount) - break; - } - - for (i = start; i < tileCount + start; i++) - ALLOC_SPRITE_TILE(i); - - return start; -} - -u8 SpriteTileAllocBitmapOp(u16 bit, u8 op) -{ - u8 index = bit / 8; - u8 shift = bit % 8; - u8 val = bit % 8; - u8 retVal = 0; - - if (op == 0) - { - val = ~(1 << val); - gSpriteTileAllocBitmap[index] &= val; - } - else if (op == 1) - { - val = (1 << val); - gSpriteTileAllocBitmap[index] |= val; - } - else - { - retVal = 1 << shift; - retVal &= gSpriteTileAllocBitmap[index]; - } - - return retVal; -} - -void SpriteCallbackDummy(struct Sprite *sprite) -{ -} - -void ProcessSpriteCopyRequests(void) -{ - if (gShouldProcessSpriteCopyRequests) - { - u8 i = 0; - - while (gSpriteCopyRequestCount > 0) - { - CpuCopy16(gSpriteCopyRequests[i].src, gSpriteCopyRequests[i].dest, gSpriteCopyRequests[i].size); - gSpriteCopyRequestCount--; - i++; - } - - gShouldProcessSpriteCopyRequests = FALSE; - } -} - -static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images) -{ - if (gSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) - { - gSpriteCopyRequests[gSpriteCopyRequestCount].src = images[index].data; - gSpriteCopyRequests[gSpriteCopyRequestCount].dest = (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileNum; - gSpriteCopyRequests[gSpriteCopyRequestCount].size = images[index].size; - gSpriteCopyRequestCount++; - } -} - -void RequestSpriteCopy(const u8 *src, u8 *dest, u16 size) -{ - if (gSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) - { - gSpriteCopyRequests[gSpriteCopyRequestCount].src = src; - gSpriteCopyRequests[gSpriteCopyRequestCount].dest = dest; - gSpriteCopyRequests[gSpriteCopyRequestCount].size = size; - gSpriteCopyRequestCount++; - } -} - -void CopyFromSprites(u8 *dest) -{ - u32 i; - u8 *src = (u8 *)gSprites; - for (i = 0; i < sizeof(struct Sprite) * MAX_SPRITES; i++) - { - *dest = *src; - dest++; - src++; - } -} - -void CopyToSprites(u8 *src) -{ - u32 i; - u8 *dest = (u8 *)gSprites; - for (i = 0; i < sizeof(struct Sprite) * MAX_SPRITES; i++) - { - *dest = *src; - src++; - dest++; - } -} - -static void ResetAllSprites(void) -{ - u8 i; - - for (i = 0; i < MAX_SPRITES; i++) - { - ResetSprite(&gSprites[i]); - gSpriteOrder[i] = i; - } - - ResetSprite(&gSprites[i]); - sub_814A590(); -} - -void FreeSpriteTiles(struct Sprite *sprite) -{ - if (sprite->template->tileTag != 0xFFFF) - FreeSpriteTilesByTag(sprite->template->tileTag); -} - -void FreeSpritePalette(struct Sprite *sprite) -{ - FreeSpritePaletteByTag(sprite->template->paletteTag); -} - -void FreeSpriteOamMatrix(struct Sprite *sprite) -{ - if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) - { - FreeOamMatrix(sprite->oam.matrixNum); - sprite->oam.affineMode = ST_OAM_AFFINE_OFF; - } -} - -void DestroySpriteAndFreeResources(struct Sprite *sprite) -{ - FreeSpriteTiles(sprite); - FreeSpritePalette(sprite); - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); -} - -void sub_800142C(u32 a1, u32 a2, u16 *a3, u16 a4, u32 a5) -{ - u16 *d = a3; - struct OamData *oam = &gMain.oamBuffer[gMain.objCount]; - while (!(gMain.objCount & 0x80) && (s16)(d[0] + 1) != 0) - { - u16 *x = (u16 *)oam; - x[0] = (d[0] & sOamBitmasks[0]) | ((d[0] + a2) & sOamBitmasks[1]) | ((a4 & sOamBitmasks[2]) << 8); - x[1] = (d[1] & sOamBitmasks[3]) | ((d[1] + a1) & sOamBitmasks[4]) | ((a4 & sOamBitmasks[5]) << 4); - x[2] = (d[2] & sOamBitmasks[6]) | ((d[2] + a5) & sOamBitmasks[7]) | (a4 & sOamBitmasks[8]); - oam++; - gMain.objCount++; - d += 3; - } -} - -void AnimateSprite(struct Sprite *sprite) -{ - sAnimFuncs[sprite->animBeginning](sprite); - - if (!gAffineAnimsDisabled) - sAffineAnimFuncs[sprite->affineAnimBeginning](sprite); -} - -static void BeginAnim(struct Sprite *sprite) -{ - s16 imageValue; - u8 duration; - u8 hFlip; - u8 vFlip; - - sprite->animCmdIndex = 0; - sprite->animEnded = FALSE; - sprite->animLoopCounter = 0; - imageValue = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; - - if (imageValue != -1) - { - sprite->animBeginning = FALSE; - duration = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; - hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip; - vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip; - - if (duration) - duration--; - - sprite->animDelayCounter = duration; - - if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) - SetSpriteOamFlipBits(sprite, hFlip, vFlip); - - if (sprite->usingSheet) - sprite->oam.tileNum = sprite->sheetTileStart + imageValue; - else - RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images); - } -} - -static void ContinueAnim(struct Sprite *sprite) -{ - if (sprite->animDelayCounter) - { - u8 hFlip; - u8 vFlip; - DecrementAnimDelayCounter(sprite); - hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip; - vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip; - if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) - SetSpriteOamFlipBits(sprite, hFlip, vFlip); - } - else if (!sprite->animPaused) - { - s16 type; - s16 funcIndex; - sprite->animCmdIndex++; - type = sprite->anims[sprite->animNum][sprite->animCmdIndex].type; - funcIndex = 3; - if (type < 0) - funcIndex = type + 3; - sAnimCmdFuncs[funcIndex](sprite); - } -} - -static void AnimCmd_frame(struct Sprite *sprite) -{ - s16 imageValue; - u8 duration; - u8 hFlip; - u8 vFlip; - - imageValue = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; - duration = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; - hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip; - vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip; - - if (duration) - duration--; - - sprite->animDelayCounter = duration; - - if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) - SetSpriteOamFlipBits(sprite, hFlip, vFlip); - - if (sprite->usingSheet) - sprite->oam.tileNum = sprite->sheetTileStart + imageValue; - else - RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images); -} - -static void AnimCmd_end(struct Sprite *sprite) -{ - sprite->animCmdIndex--; - sprite->animEnded = TRUE; -} - -static void AnimCmd_jump(struct Sprite *sprite) -{ - s16 imageValue; - u8 duration; - u8 hFlip; - u8 vFlip; - - sprite->animCmdIndex = sprite->anims[sprite->animNum][sprite->animCmdIndex].jump.target; - - imageValue = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; - duration = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; - hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip; - vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip; - - if (duration) - duration--; - - sprite->animDelayCounter = duration; - - if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) - SetSpriteOamFlipBits(sprite, hFlip, vFlip); - - if (sprite->usingSheet) - sprite->oam.tileNum = sprite->sheetTileStart + imageValue; - else - RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images); -} - -static void AnimCmd_loop(struct Sprite *sprite) -{ - if (sprite->animLoopCounter) - ContinueAnimLoop(sprite); - else - BeginAnimLoop(sprite); -} - -static void BeginAnimLoop(struct Sprite *sprite) -{ - sprite->animLoopCounter = sprite->anims[sprite->animNum][sprite->animCmdIndex].loop.count; - JumpToTopOfAnimLoop(sprite); - ContinueAnim(sprite); -} - -static void ContinueAnimLoop(struct Sprite *sprite) -{ - sprite->animLoopCounter--; - JumpToTopOfAnimLoop(sprite); - ContinueAnim(sprite); -} - -static void JumpToTopOfAnimLoop(struct Sprite *sprite) -{ - if (sprite->animLoopCounter) - { - sprite->animCmdIndex--; - - while (sprite->anims[sprite->animNum][sprite->animCmdIndex - 1].type != -3) - { - if (sprite->animCmdIndex == 0) - break; - sprite->animCmdIndex--; - } - - sprite->animCmdIndex--; - } -} - -static void BeginAffineAnim(struct Sprite *sprite) -{ - if ((sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) && sprite->affineAnims[0][0].type != 32767) - { - struct AffineAnimFrameCmd frameCmd; - u8 matrixNum = GetSpriteMatrixNum(sprite); - AffineAnimStateRestartAnim(matrixNum); - GetAffineAnimFrame(matrixNum, sprite, &frameCmd); - sprite->affineAnimBeginning = FALSE; - sprite->affineAnimEnded = FALSE; - ApplyAffineAnimFrame(matrixNum, &frameCmd); - sAffineAnimStates[matrixNum].delayCounter = frameCmd.duration; - } -} - -static void ContinueAffineAnim(struct Sprite *sprite) -{ - if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) - { - u8 matrixNum = GetSpriteMatrixNum(sprite); - - if (sAffineAnimStates[matrixNum].delayCounter) - { - AffineAnimDelay(matrixNum, sprite); - } - else if (!sprite->affineAnimPaused) - { - s16 type; - s16 funcIndex; - sAffineAnimStates[matrixNum].animCmdIndex++; - type = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].type; - funcIndex = 3; - if (type >= 32765) - funcIndex = type - 32765; - sAffineAnimCmdFuncs[funcIndex](matrixNum, sprite); - } - } -} - -static void AffineAnimDelay(u8 matrixNum, struct Sprite *sprite) -{ - if (!DecrementAffineAnimDelayCounter(sprite, matrixNum)) - { - struct AffineAnimFrameCmd frameCmd; - GetAffineAnimFrame(matrixNum, sprite, &frameCmd); - ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, &frameCmd); - } -} - -static void AffineAnimCmd_loop(u8 matrixNum, struct Sprite *sprite) -{ - if (sAffineAnimStates[matrixNum].loopCounter) - ContinueAffineAnimLoop(matrixNum, sprite); - else - BeginAffineAnimLoop(matrixNum, sprite); -} - -static void BeginAffineAnimLoop(u8 matrixNum, struct Sprite *sprite) -{ - sAffineAnimStates[matrixNum].loopCounter = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].loop.count; - JumpToTopOfAffineAnimLoop(matrixNum, sprite); - ContinueAffineAnim(sprite); -} - -static void ContinueAffineAnimLoop(u8 matrixNum, struct Sprite *sprite) -{ - sAffineAnimStates[matrixNum].loopCounter--; - JumpToTopOfAffineAnimLoop(matrixNum, sprite); - ContinueAffineAnim(sprite); -} - -static void JumpToTopOfAffineAnimLoop(u8 matrixNum, struct Sprite *sprite) -{ - if (sAffineAnimStates[matrixNum].loopCounter) - { - sAffineAnimStates[matrixNum].animCmdIndex--; - - while (sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex - 1].type != 32765) - { - if (sAffineAnimStates[matrixNum].animCmdIndex == 0) - break; - sAffineAnimStates[matrixNum].animCmdIndex--; - } - - sAffineAnimStates[matrixNum].animCmdIndex--; - } -} - -static void AffineAnimCmd_jump(u8 matrixNum, struct Sprite *sprite) -{ - struct AffineAnimFrameCmd frameCmd; - sAffineAnimStates[matrixNum].animCmdIndex = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].jump.target; - GetAffineAnimFrame(matrixNum, sprite, &frameCmd); - ApplyAffineAnimFrame(matrixNum, &frameCmd); - sAffineAnimStates[matrixNum].delayCounter = frameCmd.duration; -} - -static void AffineAnimCmd_end(u8 matrixNum, struct Sprite *sprite) -{ - struct AffineAnimFrameCmd dummyFrameCmd = {0}; - sprite->affineAnimEnded = TRUE; - sAffineAnimStates[matrixNum].animCmdIndex--; - ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, &dummyFrameCmd); -} - -static void AffineAnimCmd_frame(u8 matrixNum, struct Sprite *sprite) -{ - struct AffineAnimFrameCmd frameCmd; - GetAffineAnimFrame(matrixNum, sprite, &frameCmd); - ApplyAffineAnimFrame(matrixNum, &frameCmd); - sAffineAnimStates[matrixNum].delayCounter = frameCmd.duration; -} - -static void CopyOamMatrix(u8 destMatrixIndex, struct OamMatrix *srcMatrix) -{ - gOamMatrices[destMatrixIndex].a = srcMatrix->a; - gOamMatrices[destMatrixIndex].b = srcMatrix->b; - gOamMatrices[destMatrixIndex].c = srcMatrix->c; - gOamMatrices[destMatrixIndex].d = srcMatrix->d; -} - -static u8 GetSpriteMatrixNum(struct Sprite *sprite) -{ - u8 matrixNum = 0; - if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) - matrixNum = sprite->oam.matrixNum; - return matrixNum; -} - -static void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip) -{ - sprite->oam.matrixNum &= 0x7; - sprite->oam.matrixNum |= (((hFlip ^ sprite->hFlip) & 1) << 3); - sprite->oam.matrixNum |= (((vFlip ^ sprite->vFlip) & 1) << 4); -} - -static void AffineAnimStateRestartAnim(u8 matrixNum) -{ - sAffineAnimStates[matrixNum].animCmdIndex = 0; - sAffineAnimStates[matrixNum].delayCounter = 0; - sAffineAnimStates[matrixNum].loopCounter = 0; -} - -static void AffineAnimStateStartAnim(u8 matrixNum, u8 animNum) -{ - sAffineAnimStates[matrixNum].animNum = animNum; - sAffineAnimStates[matrixNum].animCmdIndex = 0; - sAffineAnimStates[matrixNum].delayCounter = 0; - sAffineAnimStates[matrixNum].loopCounter = 0; - sAffineAnimStates[matrixNum].xScale = 0x0100; - sAffineAnimStates[matrixNum].yScale = 0x0100; - sAffineAnimStates[matrixNum].rotation = 0; -} - -static void AffineAnimStateReset(u8 matrixNum) -{ - sAffineAnimStates[matrixNum].animNum = 0; - sAffineAnimStates[matrixNum].animCmdIndex = 0; - sAffineAnimStates[matrixNum].delayCounter = 0; - sAffineAnimStates[matrixNum].loopCounter = 0; - sAffineAnimStates[matrixNum].xScale = 0x0100; - sAffineAnimStates[matrixNum].yScale = 0x0100; - sAffineAnimStates[matrixNum].rotation = 0; -} - -static void ApplyAffineAnimFrameAbsolute(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd) -{ - sAffineAnimStates[matrixNum].xScale = frameCmd->xScale; - sAffineAnimStates[matrixNum].yScale = frameCmd->yScale; - sAffineAnimStates[matrixNum].rotation = frameCmd->rotation << 8; -} - -static void DecrementAnimDelayCounter(struct Sprite *sprite) -{ - if (!sprite->animPaused) - sprite->animDelayCounter--; -} - -static bool8 DecrementAffineAnimDelayCounter(struct Sprite *sprite, u8 matrixNum) -{ - if (!sprite->affineAnimPaused) - --sAffineAnimStates[matrixNum].delayCounter; - return sprite->affineAnimPaused; -} - -static void ApplyAffineAnimFrameRelativeAndUpdateMatrix(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd) -{ - struct ObjAffineSrcData srcData; - struct OamMatrix matrix; - sAffineAnimStates[matrixNum].xScale += frameCmd->xScale; - sAffineAnimStates[matrixNum].yScale += frameCmd->yScale; - sAffineAnimStates[matrixNum].rotation = (sAffineAnimStates[matrixNum].rotation + (frameCmd->rotation << 8)) & ~0xFF; - srcData.xScale = ConvertScaleParam(sAffineAnimStates[matrixNum].xScale); - srcData.yScale = ConvertScaleParam(sAffineAnimStates[matrixNum].yScale); - srcData.rotation = sAffineAnimStates[matrixNum].rotation; - ObjAffineSet(&srcData, &matrix, 1, 2); - CopyOamMatrix(matrixNum, &matrix); -} - -static s16 ConvertScaleParam(s16 scale) -{ - s32 val = 0x10000; - return val / scale; -} - -static void GetAffineAnimFrame(u8 matrixNum, struct Sprite *sprite, struct AffineAnimFrameCmd *frameCmd) -{ - frameCmd->xScale = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.xScale; - frameCmd->yScale = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.yScale; - frameCmd->rotation = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.rotation; - frameCmd->duration = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.duration; -} - -static void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd) -{ - struct AffineAnimFrameCmd dummyFrameCmd = {0}; - - if (frameCmd->duration) - { - frameCmd->duration--; - ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, frameCmd); - } - else - { - ApplyAffineAnimFrameAbsolute(matrixNum, frameCmd); - ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, &dummyFrameCmd); - } -} - -void StartSpriteAnim(struct Sprite *sprite, u8 animNum) -{ - sprite->animNum = animNum; - sprite->animBeginning = TRUE; - sprite->animEnded = FALSE; -} - -void StartSpriteAnimIfDifferent(struct Sprite *sprite, u8 animNum) -{ - if (sprite->animNum != animNum) - StartSpriteAnim(sprite, animNum); -} - -void SeekSpriteAnim(struct Sprite *sprite, u8 animCmdIndex) -{ - u8 temp = sprite->animPaused; - sprite->animCmdIndex = animCmdIndex - 1; - sprite->animDelayCounter = 0; - sprite->animBeginning = FALSE; - sprite->animEnded = FALSE; - sprite->animPaused = FALSE; - ContinueAnim(sprite); - if (sprite->animDelayCounter) - sprite->animDelayCounter++; - sprite->animPaused = temp; -} - -void StartSpriteAffineAnim(struct Sprite *sprite, u8 animNum) -{ - u8 matrixNum = GetSpriteMatrixNum(sprite); - AffineAnimStateStartAnim(matrixNum, animNum); - sprite->affineAnimBeginning = TRUE; - sprite->affineAnimEnded = FALSE; -} - -void StartSpriteAffineAnimIfDifferent(struct Sprite *sprite, u8 animNum) -{ - u8 matrixNum = GetSpriteMatrixNum(sprite); - if (sAffineAnimStates[matrixNum].animNum != animNum) - StartSpriteAffineAnim(sprite, animNum); -} - -void ChangeSpriteAffineAnim(struct Sprite *sprite, u8 animNum) -{ - u8 matrixNum = GetSpriteMatrixNum(sprite); - sAffineAnimStates[matrixNum].animNum = animNum; - sprite->affineAnimBeginning = TRUE; - sprite->affineAnimEnded = FALSE; -} - -void ChangeSpriteAffineAnimIfDifferent(struct Sprite *sprite, u8 animNum) -{ - u8 matrixNum = GetSpriteMatrixNum(sprite); - if (sAffineAnimStates[matrixNum].animNum != animNum) - ChangeSpriteAffineAnim(sprite, animNum); -} - -void SetSpriteSheetFrameTileNum(struct Sprite *sprite) -{ - if (sprite->usingSheet) - { - s16 tileOffset = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; - if (tileOffset < 0) - tileOffset = 0; - sprite->oam.tileNum = sprite->sheetTileStart + tileOffset; - } -} - -static void ResetAffineAnimData(void) -{ - u8 i; - - gAffineAnimsDisabled = 0; - gOamMatrixAllocBitmap = 0; - - ResetOamMatrices(); - - for (i = 0; i < OAM_MATRIX_COUNT; i++) - AffineAnimStateReset(i); -} - -u8 AllocOamMatrix(void) -{ - u8 i = 0; - u32 bit = 1; - u32 bitmap = gOamMatrixAllocBitmap; - - while (i < OAM_MATRIX_COUNT) - { - if (!(bitmap & bit)) - { - gOamMatrixAllocBitmap |= bit; - return i; - } - - i++; - bit <<= 1; - } - - return 0xFF; -} - -void FreeOamMatrix(u8 matrixNum) -{ - u8 i = 0; - u32 bit = 1; - - while (i < matrixNum) - { - i++; - bit <<= 1; - } - - gOamMatrixAllocBitmap &= ~bit; - SetOamMatrix(matrixNum, 0x100, 0, 0, 0x100); -} - -void InitSpriteAffineAnim(struct Sprite *sprite) -{ - u8 matrixNum = AllocOamMatrix(); - if (matrixNum != 0xFF) - { - CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); - sprite->oam.matrixNum = matrixNum; - sprite->affineAnimBeginning = TRUE; - AffineAnimStateReset(matrixNum); - } -} - -void SetOamMatrixRotationScaling(u8 matrixNum, s16 xScale, s16 yScale, u16 rotation) -{ - struct ObjAffineSrcData srcData; - struct OamMatrix matrix; - srcData.xScale = ConvertScaleParam(xScale); - srcData.yScale = ConvertScaleParam(yScale); - srcData.rotation = rotation; - ObjAffineSet(&srcData, &matrix, 1, 2); - CopyOamMatrix(matrixNum, &matrix); -} - -u16 LoadSpriteSheet(const struct SpriteSheet *sheet) -{ - s16 tileStart = AllocSpriteTiles(sheet->size / TILE_SIZE_4BPP); - - if (tileStart < 0) - { - return 0; - } - else - { - AllocSpriteTileRange(sheet->tag, (u16)tileStart, sheet->size / TILE_SIZE_4BPP); - CpuCopy16(sheet->data, (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size); - return (u16)tileStart; - } -} - -void LoadSpriteSheets(const struct SpriteSheet *sheets) -{ - u8 i; - for (i = 0; sheets[i].data != NULL; i++) - LoadSpriteSheet(&sheets[i]); -} - -u16 AllocTilesForSpriteSheet(struct SpriteSheet *sheet) -{ - s16 tileStart = AllocSpriteTiles(sheet->size / TILE_SIZE_4BPP); - - if (tileStart < 0) - { - return 0; - } - else - { - AllocSpriteTileRange(sheet->tag, (u16)tileStart, sheet->size / TILE_SIZE_4BPP); - return (u16)tileStart; - } -} - -void AllocTilesForSpriteSheets(struct SpriteSheet *sheets) -{ - u8 i; - for (i = 0; sheets[i].data != NULL; i++) - AllocTilesForSpriteSheet(&sheets[i]); -} - -void LoadTilesForSpriteSheet(const struct SpriteSheet *sheet) -{ - const u8 *data = sheet->data; - u16 tileStart = GetSpriteTileStartByTag(sheet->tag); - CpuCopy16(data, (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size); -} - -void LoadTilesForSpriteSheets(struct SpriteSheet *sheets) -{ - u8 i; - for (i = 0; sheets[i].data != NULL; i++) - LoadTilesForSpriteSheet(&sheets[i]); -} - -void FreeSpriteTilesByTag(u16 tag) -{ - u8 index = IndexOfSpriteTileTag(tag); - if (index != 0xFF) - { - u16 i; - u16 *rangeStarts; - u16 *rangeCounts; - u16 start; - u16 count; - rangeStarts = sSpriteTileRanges; - start = rangeStarts[index * 2]; - rangeCounts = sSpriteTileRanges + 1; - count = rangeCounts[index * 2]; - - for (i = start; i < start + count; i++) - FREE_SPRITE_TILE(i); - - sSpriteTileRangeTags[index] = 0xFFFF; - } -} - -void FreeSpriteTileRanges(void) -{ - u8 i; - - for (i = 0; i < MAX_SPRITES; i++) - { - sSpriteTileRangeTags[i] = 0xFFFF; - SET_SPRITE_TILE_RANGE(i, 0, 0); - } -} - -u16 GetSpriteTileStartByTag(u16 tag) -{ - u8 index = IndexOfSpriteTileTag(tag); - if (index == 0xFF) - return 0xFFFF; - return sSpriteTileRanges[index * 2]; -} - -static u8 IndexOfSpriteTileTag(u16 tag) -{ - u8 i; - - for (i = 0; i < MAX_SPRITES; i++) - if (sSpriteTileRangeTags[i] == tag) - return i; - - return 0xFF; -} - -u16 GetSpriteTileTagByTileStart(u16 start) -{ - u8 i; - - for (i = 0; i < MAX_SPRITES; i++) - { - if (sSpriteTileRangeTags[i] != 0xFFFF && sSpriteTileRanges[i * 2] == start) - return sSpriteTileRangeTags[i]; - } - - return 0xFFFF; -} - -static void AllocSpriteTileRange(u16 tag, u16 start, u16 count) -{ - u8 freeIndex = IndexOfSpriteTileTag(0xFFFF); - sSpriteTileRangeTags[freeIndex] = tag; - SET_SPRITE_TILE_RANGE(freeIndex, start, count); -} - -void RequestSpriteSheetCopy(const struct SpriteSheet *sheet) -{ - const u8 *data = sheet->data; - u16 tileStart = GetSpriteTileStartByTag(sheet->tag); - RequestSpriteCopy(data, (u8 *)OBJ_VRAM0 + tileStart * TILE_SIZE_4BPP, sheet->size); -} - -u16 LoadSpriteSheetDeferred(const struct SpriteSheet *sheet) -{ - s16 tileStart = AllocSpriteTiles(sheet->size / TILE_SIZE_4BPP); - - if (tileStart < 0) - { - return 0; - } - else - { - AllocSpriteTileRange(sheet->tag, (u16)tileStart, sheet->size / TILE_SIZE_4BPP); - RequestSpriteSheetCopy(sheet); - return (u16)tileStart; - } -} - -void FreeAllSpritePalettes(void) -{ - u8 i; - gReservedSpritePaletteCount = 0; - for (i = 0; i < 16; i++) - sSpritePaletteTags[i] = 0xFFFF; -} - -u8 LoadSpritePalette(const struct SpritePalette *palette) -{ - u8 index = IndexOfSpritePaletteTag(palette->tag); - - if (index != 0xFF) - return index; - - index = IndexOfSpritePaletteTag(0xFFFF); - - if (index == 0xFF) - { - return 0xFF; - } - else - { - sSpritePaletteTags[index] = palette->tag; - DoLoadSpritePalette(palette->data, index * 16); - return index; - } -} - -void LoadSpritePalettes(const struct SpritePalette *palettes) -{ - u8 i; - for (i = 0; palettes[i].data != NULL; i++) - if (LoadSpritePalette(&palettes[i]) == 0xFF) - break; -} - -static void DoLoadSpritePalette(const u16 *src, u16 paletteOffset) -{ - LoadPalette(src, paletteOffset + 0x100, 32); -} - -u8 AllocSpritePalette(u16 tag) -{ - u8 index = IndexOfSpritePaletteTag(0xFFFF); - if (index == 0xFF) - { - return 0xFF; - } - else - { - sSpritePaletteTags[index] = tag; - return index; - } -} - -u8 IndexOfSpritePaletteTag(u16 tag) -{ - u8 i; - for (i = gReservedSpritePaletteCount; i < 16; i++) - if (sSpritePaletteTags[i] == tag) - return i; - - return 0xFF; -} - -u16 GetSpritePaletteTagByPaletteNum(u8 paletteNum) -{ - return sSpritePaletteTags[paletteNum]; -} - -void FreeSpritePaletteByTag(u16 tag) -{ - u8 index = IndexOfSpritePaletteTag(tag); - if (index != 0xFF) - sSpritePaletteTags[index] = 0xFFFF; -} - -void SetSubspriteTables(struct Sprite *sprite, const struct SubspriteTable *subspriteTables) -{ - sprite->subspriteTables = subspriteTables; - sprite->subspriteTableNum = 0; - sprite->subspriteMode = SUBSPRITES_ON; -} - -bool8 AddSpriteToOamBuffer(struct Sprite *sprite, u8 *oamIndex) -{ - if (*oamIndex >= gOamLimit) - return 1; - - if (!sprite->subspriteTables || sprite->subspriteMode == SUBSPRITES_OFF) - { - gMain.oamBuffer[*oamIndex] = sprite->oam; - (*oamIndex)++; - return 0; - } - else - { - return AddSubspritesToOamBuffer(sprite, &gMain.oamBuffer[*oamIndex], oamIndex); - } -} - -bool8 AddSubspritesToOamBuffer(struct Sprite *sprite, struct OamData *destOam, u8 *oamIndex) -{ - const struct SubspriteTable *subspriteTable; - struct OamData *oam; - - if (*oamIndex >= gOamLimit) - return 1; - - subspriteTable = &sprite->subspriteTables[sprite->subspriteTableNum]; - oam = &sprite->oam; - - if (!subspriteTable || !subspriteTable->subsprites) - { - *destOam = *oam; - (*oamIndex)++; - return 0; - } - else - { - u16 tileNum; - u16 baseX; - u16 baseY; - u8 subspriteCount; - u8 hFlip; - u8 vFlip; - u8 i; - - tileNum = oam->tileNum; - subspriteCount = subspriteTable->subspriteCount; - hFlip = ((s32)oam->matrixNum >> 3) & 1; - vFlip = ((s32)oam->matrixNum >> 4) & 1; - baseX = oam->x - sprite->centerToCornerVecX; - baseY = oam->y - sprite->centerToCornerVecY; - - for (i = 0; i < subspriteCount; i++, (*oamIndex)++) - { - u16 x; - u16 y; - - if (*oamIndex >= gOamLimit) - return 1; - - x = subspriteTable->subsprites[i].x; - y = subspriteTable->subsprites[i].y; - - if (hFlip) - { - s8 width = sOamDimensions[subspriteTable->subsprites[i].shape][subspriteTable->subsprites[i].size].width; - s16 right = x; - right += width; - x = right; - x = ~x + 1; - } - - if (vFlip) - { - s8 height = sOamDimensions[subspriteTable->subsprites[i].shape][subspriteTable->subsprites[i].size].height; - s16 bottom = y; - bottom += height; - y = bottom; - y = ~y + 1; - } - - destOam[i] = *oam; - destOam[i].shape = subspriteTable->subsprites[i].shape; - destOam[i].size = subspriteTable->subsprites[i].size; - destOam[i].x = (s16)baseX + (s16)x; - destOam[i].y = baseY + y; - destOam[i].tileNum = tileNum + subspriteTable->subsprites[i].tileOffset; - - if (sprite->subspriteMode != SUBSPRITES_IGNORE_PRIORITY) - destOam[i].priority = subspriteTable->subsprites[i].priority; - } - } - - return 0; -} diff --git a/src/start_menu.c b/src/start_menu.c deleted file mode 100644 index 411690aff..000000000 --- a/src/start_menu.c +++ /dev/null @@ -1,850 +0,0 @@ -#include "global.h" -#include "start_menu.h" -#include "event_data.h" -#include "field_map_obj_helpers.h" -#include "field_player_avatar.h" -#include "field_weather.h" -#include "fieldmap.h" -#include "item_menu.h" -#include "load_save.h" -#include "main.h" -#include "map_obj_lock.h" -#include "menu.h" -#include "option_menu.h" -#include "palette.h" -#include "pokedex.h" -#include "pokemon_menu.h" -#include "pokenav.h" -#include "rom4.h" -#include "safari_zone.h" -#include "save.h" -#include "save_menu_util.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "string_util.h" -#include "strings.h" -#include "strings2.h" -#include "task.h" -#include "trainer_card.h" -#include "unknown_task.h" - -//Menu actions -enum { - MENU_ACTION_POKEDEX, - MENU_ACTION_POKEMON, - MENU_ACTION_BAG, - MENU_ACTION_POKENAV, - MENU_ACTION_PLAYER, - MENU_ACTION_SAVE, - MENU_ACTION_OPTION, - MENU_ACTION_EXIT, - MENU_ACTION_RETIRE, - MENU_ACTION_PLAYER_LINK -}; - -static u8 (*saveDialogCallback)(void); -static u8 saveDialogTimer; //Number of frames to keep the window on screen after save was completed -static bool8 savingComplete; - -extern bool8 gDifferentSaveFile; -extern u16 gSaveFileStatus; -extern u16 gScriptResult; - -extern u8 gUnknown_03004860; - -u8 (*gCallback_03004AE8)(void); - -EWRAM_DATA static u8 sStartMenuCursorPos = 0; -EWRAM_DATA static u8 sNumStartMenuActions = 0; -EWRAM_DATA static u8 sCurrentStartMenuActions[10] = {0}; - -//Text strings -extern u8 gSaveText_PlayerSavedTheGame[]; -extern u8 gSaveText_DontTurnOff[]; -extern u8 gSaveText_ThereIsAlreadyAFile[]; -extern u8 gSaveText_ThereIsADifferentFile[]; -extern u8 gSaveText_WouldYouLikeToSave[]; - -static u8 StartMenu_PokedexCallback(void); -static u8 StartMenu_PokemonCallback(void); -static u8 StartMenu_BagCallback(void); -static u8 StartMenu_PokenavCallback(void); -static u8 StartMenu_PlayerCallback(void); -static u8 StartMenu_SaveCallback(void); -static u8 StartMenu_OptionCallback(void); -static u8 StartMenu_ExitCallback(void); -static u8 StartMenu_RetireCallback(void); -static u8 StartMenu_PlayerLinkCallback(void); - -static const struct MenuAction sStartMenuItems[] = -{ - { SystemText_Pokedex, StartMenu_PokedexCallback }, - { SystemText_Pokemon, StartMenu_PokemonCallback }, - { SystemText_BAG, StartMenu_BagCallback }, - { SystemText_Pokenav, StartMenu_PokenavCallback }, - { SystemText_Player, StartMenu_PlayerCallback }, - { SystemText_Save, StartMenu_SaveCallback }, - { SystemText_Option, StartMenu_OptionCallback }, - { SystemText_Exit, StartMenu_ExitCallback }, - { SystemText_Retire, StartMenu_RetireCallback }, - { SystemText_Player, StartMenu_PlayerLinkCallback }, -}; - -//Private functions -static void BuildStartMenuActions(void); -static void AddStartMenuAction(u8 action); -static void BuildStartMenuActions_Normal(void); -static void BuildStartMenuActions_SafariZone(void); -static void BuildStartMenuActions_Link(void); -static void DisplaySafariBallsWindow(void); -static bool32 PrintStartMenuItemsMultistep(s16 *a, u32 b); -static bool32 InitStartMenuMultistep(s16 *a, s16 *b); -static void Task_StartMenu(u8 taskId); -static u8 StartMenu_InputProcessCallback(void); -static u8 SaveCallback1(void); -static u8 SaveCallback2(void); -static void sub_807160C(void); -static u8 RunSaveDialogCallback(void); -static void DisplaySaveMessageWithCallback(const u8 *ptr, u8 (*func)(void)); -static void Task_SaveDialog(u8 taskId); -static void sub_8071700(void); -static void HideSaveDialog(void); -static void SaveDialogStartTimeout(void); -static u8 SaveDialogCheckForTimeoutOrKeypress(void); -static u8 SaveDialogCheckForTimeoutAndKeypress(void); -static u8 SaveDialogCheckForTimeoutAndKeypress(void); -static u8 SaveDialogCB_DisplayConfirmMessage(void); -static u8 SaveDialogCB_DisplayConfirmYesNoMenu(void); -static u8 SaveDialogCB_ProcessConfirmYesNoMenu(void); -static u8 SaveDialogCB_SaveFileExists(void); -static u8 SaveDialogCB_DisplayOverwriteYesNoMenu(void); -static u8 SaveDialogCB_ProcessOverwriteYesNoMenu(void); -static u8 SaveDialogCB_DisplaySavingMessage(void); -static u8 SaveDialogCB_DoSave(void); -static u8 SaveDialogCB_SaveSuccess(void); -static u8 SaveDialogCB_ReturnSuccess(void); -static u8 SaveDialogCB_SaveError(void); -static u8 SaveDialogCB_ReturnError(void); -static void sub_80719F0(void); -static bool32 sub_80719FC(u8 *ptr); -static void sub_8071B54(void); -static void Task_8071B64(u8 taskId); - - -static void BuildStartMenuActions(void) -{ - sNumStartMenuActions = 0; - if (is_c1_link_related_active() == TRUE) - BuildStartMenuActions_Link(); - else - { - if (GetSafariZoneFlag() == TRUE) - BuildStartMenuActions_SafariZone(); - else - BuildStartMenuActions_Normal(); - } -} - -static void AddStartMenuAction(u8 action) -{ - AppendToList(sCurrentStartMenuActions, &sNumStartMenuActions, action); -} - -static void BuildStartMenuActions_Normal(void) -{ - if (FlagGet(SYS_POKEDEX_GET) == TRUE) - AddStartMenuAction(MENU_ACTION_POKEDEX); - if (FlagGet(SYS_POKEMON_GET) == TRUE) - AddStartMenuAction(MENU_ACTION_POKEMON); - AddStartMenuAction(MENU_ACTION_BAG); - if (FlagGet(SYS_POKENAV_GET) == TRUE) - AddStartMenuAction(MENU_ACTION_POKENAV); - AddStartMenuAction(MENU_ACTION_PLAYER); - AddStartMenuAction(MENU_ACTION_SAVE); - AddStartMenuAction(MENU_ACTION_OPTION); - AddStartMenuAction(MENU_ACTION_EXIT); -} - -static void BuildStartMenuActions_SafariZone(void) -{ - AddStartMenuAction(MENU_ACTION_RETIRE); - AddStartMenuAction(MENU_ACTION_POKEDEX); - AddStartMenuAction(MENU_ACTION_POKEMON); - AddStartMenuAction(MENU_ACTION_BAG); - AddStartMenuAction(MENU_ACTION_PLAYER); - AddStartMenuAction(MENU_ACTION_OPTION); - AddStartMenuAction(MENU_ACTION_EXIT); -} - -static void BuildStartMenuActions_Link(void) -{ - AddStartMenuAction(MENU_ACTION_POKEMON); - AddStartMenuAction(MENU_ACTION_BAG); - if (FlagGet(SYS_POKENAV_GET) == TRUE) - AddStartMenuAction(MENU_ACTION_POKENAV); - AddStartMenuAction(MENU_ACTION_PLAYER_LINK); - AddStartMenuAction(MENU_ACTION_OPTION); - AddStartMenuAction(MENU_ACTION_EXIT); -} - -//Show number of safari balls left -static void DisplaySafariBallsWindow(void) -{ - sub_8072C44(gStringVar1, gNumSafariBalls, 12, 1); - MenuDrawTextWindow(0, 0, 10, 5); - MenuPrint(gOtherText_SafariStock, 1, 1); -} - -//Prints n menu items starting at *index -static bool32 PrintStartMenuItemsMultistep(s16 *index, u32 n) -{ - int _index = *index; - - do - { - MenuPrint(sStartMenuItems[sCurrentStartMenuActions[_index]].text, 23, 2 + _index * 2); - _index++; - if (_index >= sNumStartMenuActions) - { - *index = _index; - return TRUE; - } - } - while (--n != 0); - *index = _index; - return FALSE; -} - -static bool32 InitStartMenuMultistep(s16 *step, s16 *index) -{ - switch (*step) - { - case 1: - BuildStartMenuActions(); - (*step)++; - break; - case 2: - MenuDrawTextWindow(22, 0, 29, sNumStartMenuActions * 2 + 3); - *index = 0; - (*step)++; - break; - case 3: - if (GetSafariZoneFlag()) - DisplaySafariBallsWindow(); - (*step)++; - break; - case 4: - if (PrintStartMenuItemsMultistep(index, 2)) - (*step)++; - break; - case 0: - (*step)++; - break; - case 5: - sStartMenuCursorPos = InitMenu(0, 0x17, 2, sNumStartMenuActions, sStartMenuCursorPos, 6); - return TRUE; - } - return FALSE; -} - -static void InitStartMenu(void) -{ - s16 step = 0; - s16 index = 0; - - while (InitStartMenuMultistep(&step, &index) == FALSE) - ; -} - -static void Task_StartMenu(u8 taskId) -{ - if (InitStartMenuMultistep(gTasks[taskId].data, gTasks[taskId].data + 1) == TRUE) - { - *gTasks[taskId].data = 0; - SwitchTaskToFollowupFunc(taskId); - } -} - -void CreateStartMenuTask(void (*func)(u8)) -{ - u8 taskId; - - InitMenuWindow(&gWindowConfig_81E6CE4); - taskId = CreateTask(Task_StartMenu, 0x50); - SetTaskFuncWithFollowupFunc(taskId, Task_StartMenu, func); -} - -void sub_80712B4(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - switch (task->data[0]) - { - case 0: - gCallback_03004AE8 = StartMenu_InputProcessCallback; - task->data[0]++; - break; - case 1: - if (gCallback_03004AE8() == 1) - DestroyTask(taskId); - break; - } -} - -void sub_8071310(void) -{ - if (!is_c1_link_related_active()) - { - FreezeMapObjects(); - sub_80594C0(); - sub_80597F4(); - } - CreateStartMenuTask(sub_80712B4); - ScriptContext2_Enable(); -} - -static u8 StartMenu_InputProcessCallback(void) -{ - if (gMain.newKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - sStartMenuCursorPos = MoveMenuCursor(-1); - } - if (gMain.newKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - sStartMenuCursorPos = MoveMenuCursor(1); - } - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if (sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func == StartMenu_PokedexCallback) - { - if (GetNationalPokedexCount(0) == 0) - return 0; - } - gCallback_03004AE8 = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func; - if (gCallback_03004AE8 != StartMenu_SaveCallback && - gCallback_03004AE8 != StartMenu_ExitCallback && - gCallback_03004AE8 != StartMenu_RetireCallback) - fade_screen(1, 0); - return 0; - } - if (gMain.newKeys & (START_BUTTON | B_BUTTON)) - { - CloseMenu(); - return 1; - } - return 0; -} - -//When player selects POKEDEX -static u8 StartMenu_PokedexCallback(void) -{ - if (!gPaletteFade.active) - { - IncrementGameStat(0x29); - PlayRainSoundEffect(); - SetMainCallback2(CB2_InitPokedex); - return 1; - } - return 0; -} - -//When player selects POKEMON -static u8 StartMenu_PokemonCallback(void) -{ - if (!gPaletteFade.active) - { - PlayRainSoundEffect(); - SetMainCallback2(sub_8089A70); - return 1; - } - return 0; -} - -//When player selects BAG -static u8 StartMenu_BagCallback(void) -{ - if (!gPaletteFade.active) - { - PlayRainSoundEffect(); - SetMainCallback2(sub_80A53F8); - return 1; - } - return 0; -} - -//When player selects POKENAV -static u8 StartMenu_PokenavCallback(void) -{ - if (!gPaletteFade.active) - { - PlayRainSoundEffect(); - SetMainCallback2(sub_80EBA5C); - return 1; - } - return 0; -} - -//When player selects his/her name -static u8 StartMenu_PlayerCallback(void) -{ - if (!gPaletteFade.active) - { - PlayRainSoundEffect(); - sub_8093110(sub_805469C); - return 1; - } - return 0; -} - -//When player selects SAVE -static u8 StartMenu_SaveCallback(void) -{ - HandleDestroyMenuCursors(); - gCallback_03004AE8 = SaveCallback1; - return 0; -} - -//When player selects OPTION -static u8 StartMenu_OptionCallback(void) -{ - if (!gPaletteFade.active) - { - PlayRainSoundEffect(); - SetMainCallback2(CB2_InitOptionMenu); - gMain.savedCallback = sub_805469C; - return 1; - } - return 0; -} - -//When player selects EXIT -static u8 StartMenu_ExitCallback(void) -{ - CloseMenu(); - return 1; -} - -//When player selects RETIRE -static u8 StartMenu_RetireCallback(void) -{ - CloseMenu(); - SafariZoneRetirePrompt(); - return 1; -} - -//When player selects their name in multiplayer mode -static u8 StartMenu_PlayerLinkCallback(void) -{ - if (!gPaletteFade.active) - { - PlayRainSoundEffect(); - sub_8093130(gUnknown_03004860, sub_805469C); - return 1; - } - return 0; -} - -//Save dialog status -enum -{ - SAVE_IN_PROGRESS, - SAVE_SUCCESS, - SAVE_CANCELED, - SAVE_ERROR, -}; - -static u8 SaveCallback1(void) -{ - sub_807160C(); - gCallback_03004AE8 = SaveCallback2; - return FALSE; -} - -static u8 SaveCallback2(void) -{ - switch (RunSaveDialogCallback()) - { - case SAVE_IN_PROGRESS: - return FALSE; - case SAVE_CANCELED: - //Go back to start menu - MenuZeroFillScreen(); - InitStartMenu(); - gCallback_03004AE8 = StartMenu_InputProcessCallback; - return FALSE; - case SAVE_SUCCESS: - case SAVE_ERROR: - MenuZeroFillScreen(); - sub_8064E2C(); - ScriptContext2_Disable(); - return TRUE; - } - return FALSE; -} - -static void sub_807160C(void) -{ - save_serialize_map(); - saveDialogCallback = SaveDialogCB_DisplayConfirmMessage; - savingComplete = FALSE; -} - -static u8 RunSaveDialogCallback(void) -{ - if (savingComplete) - { - if (!MenuUpdateWindowText()) - return 0; - } - savingComplete = FALSE; - return saveDialogCallback(); -} - -void InitSaveDialog(void) -{ - sub_807160C(); - CreateTask(Task_SaveDialog, 0x50); -} - -static void DisplaySaveMessageWithCallback(const u8 *ptr, u8 (*func)(void)) -{ - StringExpandPlaceholders(gStringVar4, ptr); - MenuDisplayMessageBox(); - sub_8072044(gStringVar4); - savingComplete = TRUE; - saveDialogCallback = func; -} - -static void Task_SaveDialog(u8 taskId) -{ - u8 status = RunSaveDialogCallback(); - - switch (status) - { - case SAVE_CANCELED: - case SAVE_ERROR: - gScriptResult = 0; - break; - case SAVE_SUCCESS: - gScriptResult = status; - break; - case SAVE_IN_PROGRESS: - return; - } - DestroyTask(taskId); - EnableBothScriptContexts(); -} - -static void sub_8071700(void) -{ - HandleCloseSaveWindow(0, 0); -} - -static void HideSaveDialog(void) -{ - MenuZeroFillWindowRect(20, 8, 26, 13); -} - -static void SaveDialogStartTimeout(void) -{ - saveDialogTimer = 60; -} - -static bool8 SaveDialogCheckForTimeoutOrKeypress(void) -{ - saveDialogTimer--; - if (gMain.heldKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - return TRUE; - } - else if (saveDialogTimer == 0) - return TRUE; - return FALSE; -} - -static bool8 SaveDialogCheckForTimeoutAndKeypress(void) -{ - if (saveDialogTimer != 0) - saveDialogTimer--; - else if (gMain.heldKeys & A_BUTTON) - return TRUE; - return FALSE; -} - -static u8 SaveDialogCB_DisplayConfirmMessage(void) -{ - MenuZeroFillScreen(); - HandleDrawSaveWindowInfo(0, 0); - DisplaySaveMessageWithCallback(gSaveText_WouldYouLikeToSave, SaveDialogCB_DisplayConfirmYesNoMenu); - return SAVE_IN_PROGRESS; -} - -static u8 SaveDialogCB_DisplayConfirmYesNoMenu(void) -{ - DisplayYesNoMenu(20, 8, 1); - saveDialogCallback = SaveDialogCB_ProcessConfirmYesNoMenu; - return SAVE_IN_PROGRESS; -} - -static u8 SaveDialogCB_ProcessConfirmYesNoMenu(void) -{ - switch (ProcessMenuInputNoWrap_()) - { - case 0: //YES - HideSaveDialog(); - switch (gSaveFileStatus) - { - case 0: - case 2: - if (gDifferentSaveFile == FALSE) - { - saveDialogCallback = SaveDialogCB_SaveFileExists; - return SAVE_IN_PROGRESS; - } - saveDialogCallback = SaveDialogCB_DisplaySavingMessage; - return SAVE_IN_PROGRESS; - default: - saveDialogCallback = SaveDialogCB_SaveFileExists; - return SAVE_IN_PROGRESS; - } - break; - case -1: //B button - case 1: //NO - HideSaveDialog(); - sub_8071700(); - return SAVE_CANCELED; - } - return SAVE_IN_PROGRESS; -} - -static u8 SaveDialogCB_SaveFileExists(void) -{ - DisplaySaveMessageWithCallback( - gDifferentSaveFile == TRUE ? gSaveText_ThereIsADifferentFile : gSaveText_ThereIsAlreadyAFile, - SaveDialogCB_DisplayOverwriteYesNoMenu); - return SAVE_IN_PROGRESS; -} - -static u8 SaveDialogCB_DisplayOverwriteYesNoMenu(void) -{ - DisplayYesNoMenu(20, 8, 1); - saveDialogCallback = SaveDialogCB_ProcessOverwriteYesNoMenu; - return SAVE_IN_PROGRESS; -} - -static u8 SaveDialogCB_ProcessOverwriteYesNoMenu(void) -{ - switch (ProcessMenuInputNoWrap_()) - { - case 0: //YES - HideSaveDialog(); - saveDialogCallback = SaveDialogCB_DisplaySavingMessage; - break; - case -1: //B button - case 1: //NO - HideSaveDialog(); - sub_8071700(); - return SAVE_CANCELED; - } - return SAVE_IN_PROGRESS; -} - -static u8 SaveDialogCB_DisplaySavingMessage(void) -{ - //"SAVING... DON'T TURN OFF THE POWER." - DisplaySaveMessageWithCallback(gSaveText_DontTurnOff, SaveDialogCB_DoSave); - return SAVE_IN_PROGRESS; -} - -static u8 SaveDialogCB_DoSave(void) -{ - bool8 saveSucceeded; - - IncrementGameStat(0); - if (gDifferentSaveFile == TRUE) - { - saveSucceeded = TrySavingData(DIFFERENT_FILE_SAVE); - gDifferentSaveFile = FALSE; - } - else - { - saveSucceeded = TrySavingData(NORMAL_SAVE); - } - - if (saveSucceeded == TRUE) - { - //"(Player) saved the game." - DisplaySaveMessageWithCallback(gSaveText_PlayerSavedTheGame, SaveDialogCB_SaveSuccess); - } - else - { - //"Save error. Please exchange the backup memory." - DisplaySaveMessageWithCallback(gSystemText_SaveErrorExchangeBackup, SaveDialogCB_SaveError); - } - - SaveDialogStartTimeout(); - return SAVE_IN_PROGRESS; -} - -static u8 SaveDialogCB_SaveSuccess(void) -{ - if (MenuUpdateWindowText()) - { - PlaySE(SE_SAVE); - saveDialogCallback = SaveDialogCB_ReturnSuccess; - } - return SAVE_IN_PROGRESS; -} - -static u8 SaveDialogCB_ReturnSuccess(void) -{ - if (!IsSEPlaying() && SaveDialogCheckForTimeoutOrKeypress()) - { - sub_8071700(); - return SAVE_SUCCESS; - } - else - return SAVE_IN_PROGRESS; -} - -static u8 SaveDialogCB_SaveError(void) -{ - if (MenuUpdateWindowText()) - { - PlaySE(SE_BOO); - saveDialogCallback = SaveDialogCB_ReturnError; - } - return SAVE_IN_PROGRESS; -} - -static u8 SaveDialogCB_ReturnError(void) -{ - if (!SaveDialogCheckForTimeoutAndKeypress()) - return SAVE_IN_PROGRESS; - else - { - sub_8071700(); - return SAVE_ERROR; - } -} - -static void sub_80719F0(void) -{ - TransferPlttBuffer(); -} - -static bool32 sub_80719FC(u8 *step) -{ - switch (*step) - { - case 0: - { - u8 *addr; - u32 size; - - REG_DISPCNT = 0; - SetVBlankCallback(NULL); - remove_some_task(); - DmaClear16(3, PLTT, PLTT_SIZE); - 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; - } - } - break; - } - case 1: - ResetSpriteData(); - ResetTasks(); - ResetPaletteFade(); - dp12_8087EA4(); - break; - case 2: - SetUpWindowConfig(&gWindowConfig_81E6CE4); - InitMenuWindow(&gWindowConfig_81E6CE4); - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_BG0_ON; - break; - case 3: - { - u32 savedIme; - - BlendPalettes(-1, 0x10, 0); - SetVBlankCallback(sub_80719F0); - savedIme = REG_IME; - REG_IME = 0; - REG_IE |= 1; - REG_IME = savedIme; - break; - } - case 4: - return TRUE; - } - (*step)++; - return FALSE; -} - -void sub_8071B28(void) -{ - if (sub_80719FC(&gMain.state)) - { - CreateTask(Task_8071B64, 0x50); - SetMainCallback2(sub_8071B54); - } -} - -static void sub_8071B54(void) -{ - RunTasks(); - UpdatePaletteFade(); -} - -static void Task_8071B64(u8 taskId) -{ - s16 *step = gTasks[taskId].data; - - if (!gPaletteFade.active) - { - switch (*step) - { - case 0: - MenuDisplayMessageBox(); - MenuPrint(gSystemText_Saving, 2, 15); - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - (*step)++; - break; - case 1: - SetSecretBase2Field_9_AndHideBG(); - sub_8125E2C(); - (*step)++; - break; - case 2: - if (!sub_8125E6C()) - break; - ClearSecretBase2Field_9_2(); - (*step)++; - break; - case 3: - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - (*step)++; - break; - case 4: - SetMainCallback2(gMain.savedCallback); - DestroyTask(taskId); - break; - } - } -} diff --git a/src/starter_choose.c b/src/starter_choose.c deleted file mode 100644 index 2b28df4f0..000000000 --- a/src/starter_choose.c +++ /dev/null @@ -1,757 +0,0 @@ -#include "global.h" -#include "starter_choose.h" -#include "data2.h" -#include "decompress.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "pokedex.h" -#include "songs.h" -#include "sound.h" -#include "species.h" -#include "sprite.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "trig.h" -#include "unknown_task.h" - -extern u16 gScriptResult; -extern struct SpriteTemplate gUnknown_02024E8C; - -//-------------------------------------------------- -// Graphics Data -//-------------------------------------------------- - -const u16 gBirchBagGrassPal[2][16] = -{ - INCBIN_U16("graphics/misc/birch_bag.gbapal"), - INCBIN_U16("graphics/misc/birch_grass.gbapal"), -}; -static const u16 gBirchBallarrow_Pal[] = INCBIN_U16("graphics/misc/birch_ballarrow.gbapal"); -static const u16 gBirchCircle_Pal[] = INCBIN_U16("graphics/misc/birch_circle.gbapal"); -const u8 gBirchBagTilemap[] = INCBIN_U8("graphics/misc/birch_bag_map.bin.lz"); -const u8 gBirchGrassTilemap[] = INCBIN_U8("graphics/misc/birch_grass_map.bin.lz"); -const u8 gBirchHelpGfx[] = INCBIN_U8("graphics/misc/birch_help.4bpp.lz"); -static const u8 gBirchBallarrow_Gfx[] = INCBIN_U8("graphics/misc/birch_ballarrow.4bpp.lz"); -static const u8 gBirchCircle_Gfx[] = INCBIN_U8("graphics/misc/birch_circle.4bpp.lz"); -static const u8 gStarterChoose_PokeballCoords[][2] = -{ - {60, 64}, - {120, 88}, - {180, 64}, -}; -static const u8 gStarterChoose_LabelCoords[][2] = -{ - {0, 9}, - {16, 10}, - {8, 4}, -}; -static const u16 sStarterMons[] = {SPECIES_TREECKO, SPECIES_TORCHIC, SPECIES_MUDKIP}; -static const struct OamData gOamData_83F76CC = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const struct OamData gOamData_83F76D4 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const struct OamData gOamData_83F76DC = -{ - .y = 160, - .affineMode = 3, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const u8 gUnknown_083F76E4[][2] = -{ - {60, 32}, - {120, 56}, - {180, 32}, - {0, 0}, -}; -static const union AnimCmd gSpriteAnim_83F76EC[] = -{ - ANIMCMD_FRAME(48, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83F76F4[] = -{ - ANIMCMD_FRAME(0, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83F76FC[] = -{ - ANIMCMD_FRAME(16, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(32, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(16, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(32, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(0, 32), - ANIMCMD_FRAME(16, 8), - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(32, 8), - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(16, 8), - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(32, 8), - ANIMCMD_FRAME(0, 8), - ANIMCMD_JUMP(0), -}; -static const union AnimCmd gSpriteAnim_83F7744[] = -{ - ANIMCMD_FRAME(0, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_83F774C[] = -{ - gSpriteAnim_83F76EC, -}; -static const union AnimCmd *const gSpriteAnimTable_83F7750[] = -{ - gSpriteAnim_83F76F4, - gSpriteAnim_83F76FC, -}; -static const union AnimCmd *const gSpriteAnimTable_83F7758[] = -{ - gSpriteAnim_83F7744, -}; -static const union AffineAnimCmd gSpriteAffineAnim_83F775C[] = -{ - AFFINEANIMCMD_FRAME(16, 16, 0, 0), - AFFINEANIMCMD_FRAME(16, 16, 0, 15), - AFFINEANIMCMD_END, -}; -static const union AffineAnimCmd gSpriteAffineAnim_83F7774[] = -{ - AFFINEANIMCMD_FRAME(20, 20, 0, 0), - AFFINEANIMCMD_FRAME(20, 20, 0, 15), - AFFINEANIMCMD_END, -}; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_83F778C[] = -{ - gSpriteAffineAnim_83F775C, -}; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_83F7790[] = -{ - gSpriteAffineAnim_83F7774, -}; -static const struct CompressedSpriteSheet gUnknown_083F7794[] = -{ - {gBirchBallarrow_Gfx, 0x0800, 0x1000}, - {NULL}, -}; -static const struct CompressedSpriteSheet gUnknown_083F77A4[] = -{ - {gBirchCircle_Gfx, 0x0800, 0x1001}, - {NULL}, -}; -const struct SpritePalette gUnknown_083F77B4[] = -{ - {gBirchBallarrow_Pal, 0x1000}, - {gBirchCircle_Pal, 0x1001}, - {NULL}, -}; -static void sub_810A62C(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_83F77CC = -{ - .tileTag = 4096, - .paletteTag = 4096, - .oam = &gOamData_83F76CC, - .anims = gSpriteAnimTable_83F774C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810A62C, -}; -static void sub_810A68C(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_83F77E4 = -{ - .tileTag = 4096, - .paletteTag = 4096, - .oam = &gOamData_83F76D4, - .anims = gSpriteAnimTable_83F7750, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810A68C, -}; -static void StarterPokemonSpriteAnimCallback(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_83F77FC = -{ - .tileTag = 4097, - .paletteTag = 4097, - .oam = &gOamData_83F76DC, - .anims = gSpriteAnimTable_83F7758, - .images = NULL, - .affineAnims = gSpriteAffineAnimTable_83F7790, - .callback = StarterPokemonSpriteAnimCallback, -}; - -static void MainCallback2(void); -static void Task_StarterChoose1(u8 taskId); -static void Task_StarterChoose2(u8 taskId); -static void Task_StarterChoose3(u8 taskId); -static void Task_StarterChoose4(u8 taskId); -static void Task_StarterChoose5(u8 taskId); -static void Task_StarterChoose6(u8 taskId); - -static void CreateStarterPokemonLabel(u8, u8); -static u8 CreatePokemonFrontSprite(u16, u8, u8); - -//Position of the sprite of the selected starter Pokemon -#define STARTER_PKMN_POS_X 120 -#define STARTER_PKMN_POS_Y 64 - -//Retrieves one of the available starter Pokemon -u16 GetStarterPokemon(u16 n) -{ - if (n > 3) - n = 0; - return sStarterMons[n]; -} - -static void VblankCallback(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -#define tStarterSelection data[0] -#define tPkmnSpriteId data[1] -#define tCircleSpriteId data[2] - -void CB2_ChooseStarter(void) -{ - u16 savedIme; - u8 taskId; - u8 spriteId; - - SetVBlankCallback(NULL); - - REG_DISPCNT = 0; - REG_BG3CNT = 0; - REG_BG2CNT = 0; - REG_BG1CNT = 0; - REG_BG0CNT = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - - DmaFill16(3, 0, VRAM, VRAM_SIZE); - DmaFill32(3, 0, OAM, OAM_SIZE); - DmaFill16(3, 0, PLTT, PLTT_SIZE); - - LZ77UnCompVram(&gBirchHelpGfx, (void *)VRAM); - LZ77UnCompVram(&gBirchBagTilemap, (void *)(VRAM + 0x3000)); - LZ77UnCompVram(&gBirchGrassTilemap, (void *)(VRAM + 0x3800)); - remove_some_task(); - ResetTasks(); - ResetSpriteData(); - ResetPaletteFade(); - FreeAllSpritePalettes(); - LoadPalette(gBirchBagGrassPal, 0, sizeof(gBirchBagGrassPal)); - LoadCompressedObjectPic(&gUnknown_083F7794[0]); - LoadCompressedObjectPic(&gUnknown_083F77A4[0]); - LoadSpritePalettes(gUnknown_083F77B4); - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow(&gWindowConfig_81E6CE4); - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - - savedIme = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = savedIme; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - - SetVBlankCallback(VblankCallback); - SetMainCallback2(MainCallback2); - - REG_WININ = 0x3F; - REG_WINOUT = 0x1F; - REG_WIN0H = 0; - REG_WIN0V = 0; - REG_BLDCNT = 0xFE; - REG_BLDALPHA = 0; - REG_BLDY = 0x7; - REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; - - taskId = CreateTask(Task_StarterChoose1, 0); - gTasks[taskId].tStarterSelection = 1; - - //Create hand sprite - spriteId = CreateSprite(&gSpriteTemplate_83F77CC, 120, 56, 2); - gSprites[spriteId].data0 = taskId; - - //Create three Pokeball sprites - spriteId = CreateSprite( - &gSpriteTemplate_83F77E4, - gStarterChoose_PokeballCoords[0][0], gStarterChoose_PokeballCoords[0][1], 2); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 0; - spriteId = CreateSprite( - &gSpriteTemplate_83F77E4, - gStarterChoose_PokeballCoords[1][0], gStarterChoose_PokeballCoords[1][1], 2); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 1; - spriteId = CreateSprite( - &gSpriteTemplate_83F77E4, - gStarterChoose_PokeballCoords[2][0], gStarterChoose_PokeballCoords[2][1], 2); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 2; -} - -static void MainCallback2(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void Task_StarterChoose1(u8 taskId) -{ - CreateStarterPokemonLabel(0xFF, gTasks[taskId].tStarterSelection); - MenuDrawTextWindow(2, 14, 27, 19); - MenuPrint(gOtherText_BirchInTrouble, 3, 15); - gTasks[taskId].func = Task_StarterChoose2; -} - -static void Task_StarterChoose2(u8 taskId) -{ - u8 selection = gTasks[taskId].tStarterSelection; - - if (gMain.newKeys & A_BUTTON) - { - u8 spriteId; - - MenuZeroFillWindowRect( - gStarterChoose_LabelCoords[selection][0], - gStarterChoose_LabelCoords[selection][1], - gStarterChoose_LabelCoords[selection][0] + 13, - gStarterChoose_LabelCoords[selection][1] + 3); - - REG_WIN0H = 0; - REG_WIN0V = 0; - - //Create white circle background - spriteId = CreateSprite( - &gSpriteTemplate_83F77FC, - gStarterChoose_PokeballCoords[selection][0], - gStarterChoose_PokeballCoords[selection][1], - 1); - gTasks[taskId].tCircleSpriteId = spriteId; - - //Create Pokemon sprite - spriteId = CreatePokemonFrontSprite( - GetStarterPokemon(gTasks[taskId].tStarterSelection), - gStarterChoose_PokeballCoords[selection][0], - gStarterChoose_PokeballCoords[selection][1]); - gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_83F778C; - gSprites[spriteId].callback = StarterPokemonSpriteAnimCallback; - gTasks[taskId].tPkmnSpriteId = spriteId; - - gTasks[taskId].func = Task_StarterChoose3; - } - else - { - if ((gMain.newKeys & DPAD_LEFT) && selection > 0) - { - gTasks[taskId].tStarterSelection--; - CreateStarterPokemonLabel(selection, gTasks[taskId].tStarterSelection); - } - else if ((gMain.newKeys & DPAD_RIGHT) && selection < 2) - { - gTasks[taskId].tStarterSelection++; - CreateStarterPokemonLabel(selection, gTasks[taskId].tStarterSelection); - } - } -} - -static void Task_StarterChoose3(u8 taskId) -{ - if (gSprites[gTasks[taskId].tCircleSpriteId].affineAnimEnded && - gSprites[gTasks[taskId].tCircleSpriteId].pos1.x == STARTER_PKMN_POS_X && - gSprites[gTasks[taskId].tCircleSpriteId].pos1.y == STARTER_PKMN_POS_Y) - { - gTasks[taskId].func = Task_StarterChoose4; - } -} - -static void Task_StarterChoose4(u8 taskId) -{ - PlayCry1(GetStarterPokemon(gTasks[taskId].tStarterSelection), 0); - MenuDrawTextWindow(2, 14, 27, 19); - //"Do you choose this POKEMON?" - MenuPrint(gOtherText_DoYouChoosePoke, 3, 15); - DisplayYesNoMenu(21, 7, 1); - gTasks[taskId].func = Task_StarterChoose5; -} - -static void Task_StarterChoose5(u8 taskId) -{ - u8 spriteId; - - switch (ProcessMenuInputNoWrap_()) - { - case 0: // YES - //Return the starter choice and exit. - gScriptResult = gTasks[taskId].tStarterSelection; - SetMainCallback2(gMain.savedCallback); - break; - case 1: // NO - case -1: // B button - PlaySE(SE_SELECT); - MenuZeroFillWindowRect(21, 7, 27, 12); - - spriteId = gTasks[taskId].tPkmnSpriteId; - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[spriteId].oam.paletteNum)); - FreeOamMatrix(gSprites[spriteId].oam.matrixNum); - DestroySprite(&gSprites[spriteId]); - - spriteId = gTasks[taskId].tCircleSpriteId; - FreeOamMatrix(gSprites[spriteId].oam.matrixNum); - DestroySprite(&gSprites[spriteId]); - gTasks[taskId].func = Task_StarterChoose6; - break; - } -} - -static void Task_StarterChoose6(u8 taskId) -{ - gTasks[taskId].func = Task_StarterChoose1; -} - -void AddTextColorCtrlCode(u8 *string, u8 bgColor, u8 textColor, u8 shadowColor) -{ - *(string++) = EXT_CTRL_CODE_BEGIN; - *(string++) = 4; - *(string++) = textColor; - *(string++) = bgColor; - *(string++) = shadowColor; -} - -#define SET_CHAR(str, index, c) \ -{ \ - u8 *p = str + index; \ - *p = c; \ -} - - -#if ENGLISH -static void CreateStarterPokemonLabel(u8 prevSelection, u8 selection) -{ - u8 labelText[72]; - const u8 *category; - u8 srcIndex; - u8 dstIndex; - u16 species; - - u8 labelLeft; - u8 labelRight; - u8 labelTop; - u8 labelBottom; - - if (prevSelection != 0xFF) - { - //Remove the old Pokemon label - MenuZeroFillWindowRect( - gStarterChoose_LabelCoords[prevSelection][0], - gStarterChoose_LabelCoords[prevSelection][1], - gStarterChoose_LabelCoords[prevSelection][0] + 13, - gStarterChoose_LabelCoords[prevSelection][1] + 3); - REG_WIN0H = 0; - REG_WIN0V = 0; - } - species = GetStarterPokemon(selection); - category = GetPokemonCategory(SpeciesToNationalPokedexNum(species)); - AddTextColorCtrlCode(labelText, 0, 15, 8); - dstIndex = 5; - SET_CHAR(labelText, 5, EXT_CTRL_CODE_BEGIN); - SET_CHAR(labelText, 6, 0x11); - SET_CHAR(labelText, 7, dstIndex); - - //Copy category string to label - dstIndex = 8; - srcIndex = 0; - while (category[srcIndex] != EOS && srcIndex <= 10) - { - labelText[dstIndex] = category[srcIndex]; - srcIndex++; - dstIndex++; - } - labelText[dstIndex++] = CHAR_SPACE; - - //Copy POKEMON string to label - StringCopy(labelText + dstIndex, gOtherText_Poke); - MenuPrint( - labelText, - gStarterChoose_LabelCoords[selection][0], - gStarterChoose_LabelCoords[selection][1]); - AddTextColorCtrlCode(labelText, 0, 15, 8); - - //Copy Pokemon name to label - sub_8072C74(labelText + 5, gSpeciesNames[species], 0x6B, 1); - MenuPrint( - labelText, - gStarterChoose_LabelCoords[selection][0], - gStarterChoose_LabelCoords[selection][1] + 2); - - labelLeft = gStarterChoose_LabelCoords[selection][0] * 8 + 4; - labelRight = (gStarterChoose_LabelCoords[selection][0] + 13) * 8 + 4; - labelTop = gStarterChoose_LabelCoords[selection][1] * 8; - labelBottom = (gStarterChoose_LabelCoords[selection][1] + 4) * 8; - REG_WIN0H = WIN_RANGE(labelLeft, labelRight); - REG_WIN0V = WIN_RANGE(labelTop, labelBottom); -} -#elif GERMAN -__attribute__((naked)) -static void CreateStarterPokemonLabel(u8 prevSelection, u8 selection) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - sub sp, 0x48\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - lsls r1, 24\n\ - lsrs r5, r1, 24\n\ - cmp r0, 0xFF\n\ - beq _0810A872\n\ - ldr r1, _0810A960 @ =gStarterChoose_LabelCoords\n\ - lsls r2, r0, 1\n\ - adds r0, r2, r1\n\ - ldrb r0, [r0]\n\ - adds r1, 0x1\n\ - adds r2, r1\n\ - ldrb r1, [r2]\n\ - adds r2, r0, 0\n\ - adds r2, 0xD\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - adds r3, r1, 0x3\n\ - lsls r3, 24\n\ - lsrs r3, 24\n\ - bl MenuZeroFillWindowRect\n\ - ldr r0, _0810A964 @ =0x04000040\n\ - movs r1, 0\n\ - strh r1, [r0]\n\ - adds r0, 0x4\n\ - strh r1, [r0]\n\ -_0810A872:\n\ - adds r0, r5, 0\n\ - bl GetStarterPokemon\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - adds r0, r6, 0\n\ - bl SpeciesToNationalPokedexNum\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - bl GetPokemonCategory\n\ - adds r4, r0, 0\n\ - mov r0, sp\n\ - movs r1, 0\n\ - movs r2, 0xF\n\ - movs r3, 0x8\n\ - bl AddTextColorCtrlCode\n\ - movs r2, 0x8\n\ - movs r3, 0\n\ - ldrb r0, [r4]\n\ - lsls r5, 1\n\ - mov r7, sp\n\ - adds r7, 0x5\n\ - cmp r0, 0xFF\n\ - beq _0810A8CA\n\ -_0810A8A8:\n\ - mov r0, sp\n\ - adds r1, r0, r2\n\ - adds r0, r4, r3\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - adds r0, r2, 0x1\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - adds r0, r4, r3\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xFF\n\ - beq _0810A8CA\n\ - cmp r3, 0xA\n\ - bls _0810A8A8\n\ -_0810A8CA:\n\ - mov r0, sp\n\ - adds r1, r0, r2\n\ - movs r0, 0xFF\n\ - strb r0, [r1]\n\ - mov r1, sp\n\ - movs r0, 0xFC\n\ - strb r0, [r1, 0x5]\n\ - movs r0, 0x11\n\ - strb r0, [r1, 0x6]\n\ - mov r2, sp\n\ - lsls r1, r3, 1\n\ - adds r1, r3\n\ - lsls r1, 1\n\ - movs r0, 0x70\n\ - subs r0, r1\n\ - asrs r0, 1\n\ - strb r0, [r2, 0x7]\n\ - ldr r0, _0810A960 @ =gStarterChoose_LabelCoords\n\ - adds r1, r5, r0\n\ - ldrb r4, [r1]\n\ - adds r0, 0x1\n\ - adds r0, r5, r0\n\ - ldrb r5, [r0]\n\ - mov r0, sp\n\ - adds r1, r4, 0\n\ - adds r2, r5, 0\n\ - bl MenuPrint\n\ - mov r0, sp\n\ - movs r1, 0\n\ - movs r2, 0xF\n\ - movs r3, 0x8\n\ - bl AddTextColorCtrlCode\n\ - movs r0, 0xB\n\ - adds r1, r6, 0\n\ - muls r1, r0\n\ - ldr r0, _0810A968 @ =gSpeciesNames\n\ - adds r1, r0\n\ - adds r0, r7, 0\n\ - movs r2, 0x70\n\ - movs r3, 0x2\n\ - bl sub_8072C74\n\ - adds r2, r5, 0x2\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - mov r0, sp\n\ - adds r1, r4, 0\n\ - bl MenuPrint\n\ - lsls r0, r4, 3\n\ - adds r0, 0x4\n\ - lsls r0, 24\n\ - adds r4, 0xD\n\ - lsls r4, 3\n\ - adds r4, 0x4\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - lsls r1, r5, 27\n\ - adds r5, 0x4\n\ - lsls r5, 27\n\ - lsrs r5, 24\n\ - ldr r2, _0810A964 @ =0x04000040\n\ - lsrs r0, 16\n\ - orrs r0, r4\n\ - strh r0, [r2]\n\ - ldr r0, _0810A96C @ =0x04000044\n\ - lsrs r1, 16\n\ - orrs r1, r5\n\ - strh r1, [r0]\n\ - add sp, 0x48\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0810A960: .4byte gStarterChoose_LabelCoords\n\ -_0810A964: .4byte 0x04000040\n\ -_0810A968: .4byte gSpeciesNames\n\ -_0810A96C: .4byte 0x04000044\n\ - .syntax divided\n"); -} -#endif - -static void nullsub_72(struct Sprite *sprite) -{ -} - -static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y) -{ - u8 spriteId; - - DecompressPicFromTable_2( - &gMonFrontPicTable[species], - gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - gUnknown_081FAF4C[0], gUnknown_081FAF4C[1], - species); - LoadCompressedObjectPalette(&gMonPaletteTable[species]); - GetMonSpriteTemplate_803C56C(species, 1); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); - gSprites[spriteId].callback = nullsub_72; - gSprites[spriteId].oam.priority = 0; - return spriteId; -} - -//Sprite callback -static void sub_810A62C(struct Sprite *sprite) -{ - sprite->pos1.x = gUnknown_083F76E4[gTasks[sprite->data0].tStarterSelection][0]; - sprite->pos1.y = gUnknown_083F76E4[gTasks[sprite->data0].tStarterSelection][1]; - sprite->pos2.y = Sin(sprite->data1, 8); - sprite->data1 = (u8)sprite->data1 + 4; -} - -//Sprite callback -static void sub_810A68C(struct Sprite *sprite) -{ - if (gTasks[sprite->data0].tStarterSelection == sprite->data1) - StartSpriteAnimIfDifferent(sprite, 1); - else - StartSpriteAnimIfDifferent(sprite, 0); -} - -//Sprite callback -static void StarterPokemonSpriteAnimCallback(struct Sprite *sprite) -{ - //Move sprite to upper center of screen - if (sprite->pos1.x > STARTER_PKMN_POS_X) - sprite->pos1.x -= 4; - if (sprite->pos1.x < STARTER_PKMN_POS_X) - sprite->pos1.x += 4; - if (sprite->pos1.y > STARTER_PKMN_POS_Y) - sprite->pos1.y -= 2; - if (sprite->pos1.y < STARTER_PKMN_POS_Y) - sprite->pos1.y += 2; -} diff --git a/src/string_util.c b/src/string_util.c deleted file mode 100644 index 9686256a1..000000000 --- a/src/string_util.c +++ /dev/null @@ -1,561 +0,0 @@ -#include "global.h" -#include "string_util.h" -#include "strings.h" -#include "text.h" - -u8 gUnknownStringVar[16]; - -const u8 gEmptyString_81E72B0[] = _(""); -const u8 gRightPointingTriangleString[] = _("▶"); - -static const u8 sDigits[] = __("0123456789ABCDEF"); - -static const s32 sPowersOfTen[] = -{ - 1, - 10, - 100, - 1000, - 10000, - 100000, - 1000000, - 10000000, - 100000000, - 1000000000, -}; - -u8 *StringCopy10(u8 *dest, const u8 *src) -{ - u8 i; - u32 limit = 10; - - for (i = 0; i < limit; i++) - { - dest[i] = src[i]; - - if (dest[i] == EOS) - return &dest[i]; - } - - dest[i] = EOS; - return &dest[i]; -} - -u8 *StringGetEnd10(u8 *str) -{ - u8 i; - u32 limit = 10; - - for (i = 0; i < limit; i++) - if (str[i] == EOS) - return &str[i]; - - str[i] = EOS; - return &str[i]; -} - -u8 *StringCopy8(u8 *dest, const u8 *src) -{ - s32 i; - - for (i = 0; i < 8; i++) - { - dest[i] = src[i]; - - if (dest[i] == EOS) - return &dest[i]; - } - - dest[i] = EOS; - return &dest[i]; -} - -u8 *StringCopy(u8 *dest, const u8 *src) -{ - while (*src != EOS) - { - *dest = *src; - dest++; - src++; - } - - *dest = EOS; - return dest; -} - -u8 *StringAppend(u8 *dest, const u8 *src) -{ - while (*dest != EOS) - dest++; - - return StringCopy(dest, src); -} - -u8 *StringCopyN(u8 *dest, const u8 *src, u8 n) -{ - u16 i; - - for (i = 0; i < n; i++) - dest[i] = src[i]; - - return &dest[n]; -} - -u8 *StringAppendN(u8 *dest, const u8 *src, u8 n) -{ - while (*dest != EOS) - dest++; - - return StringCopyN(dest, src, n); -} - -u16 StringLength(const u8 *str) -{ - u16 length = 0; - - while (str[length] != EOS) - { - u16 temp = length; - length++; - if (str[temp] == EXT_CTRL_CODE_BEGIN) - length += GetExtCtrlCodeLength(str[length]); - } - - return length; -} - -#ifdef GERMAN -s32 StringLengthN(const u8 *str, s32 n) -{ - s32 i; - - for (i = 0; i < n && str[i] != EOS; i++) - ; - - if (i == n) - i = 0; - - return i; -} -#endif - -s32 StringCompare(const u8 *str1, const u8 *str2) -{ - while (*str1 == *str2) - { - if (*str1 == EOS) - return 0; - str1++; - str2++; - } - - return *str1 - *str2; -} - -s32 StringCompareN(const u8 *str1, const u8 *str2, u32 n) -{ - while (*str1 == *str2) - { - if (*str1 == EOS) - return 0; - str1++; - str2++; - if (--n == 0) - return 0; - } - - return *str1 - *str2; -} - -u8 *ConvertIntToDecimalStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n) -{ - enum { WAITING_FOR_NONZERO_DIGIT, WRITING_DIGITS, WRITING_SPACES } state; - s32 powerOfTen; - s32 largestPowerOfTen = sPowersOfTen[n - 1]; - - state = WAITING_FOR_NONZERO_DIGIT; - - if (mode == STR_CONV_MODE_RIGHT_ALIGN) - state = WRITING_SPACES; - - if (mode == STR_CONV_MODE_LEADING_ZEROS) - state = WRITING_DIGITS; - - for (powerOfTen = largestPowerOfTen; powerOfTen > 0; powerOfTen /= 10) - { - char *out; - u8 c; - u16 digit = value / powerOfTen; - s32 temp = value - (powerOfTen * digit); - - if (state == WRITING_DIGITS) - { - out = dest++; - - if (digit <= 9) - c = sDigits[digit]; - else - c = CHAR_QUESTION_MARK; - - *out = c; - } - else if (digit != 0 || powerOfTen == 1) - { - state = WRITING_DIGITS; - out = dest++; - - if (digit <= 9) - c = sDigits[digit]; - else - c = CHAR_QUESTION_MARK; - - *out = c; - } - else if (state == WRITING_SPACES) - { - *dest++ = CHAR_SPACE; - } - - value = temp; - } - - *dest = EOS; - return dest; -} - -u8 *ConvertIntToDecimalStringN_DigitWidth6(u8 *dest, s32 value, enum StringConvertMode mode, u8 n) -{ - enum { WAITING_FOR_NONZERO_DIGIT, WRITING_DIGITS, WRITING_SPACES } state; - s32 powerOfTen; - s32 largestPowerOfTen = sPowersOfTen[n - 1]; - - *dest++ = EXT_CTRL_CODE_BEGIN; - *dest++ = 0x14; - *dest++ = 6; - - state = WAITING_FOR_NONZERO_DIGIT; - - if (mode == STR_CONV_MODE_RIGHT_ALIGN) - state = WRITING_SPACES; - - if (mode == STR_CONV_MODE_LEADING_ZEROS) - state = WRITING_DIGITS; - - for (powerOfTen = largestPowerOfTen; powerOfTen > 0; powerOfTen /= 10) - { - char *out; - u8 c; - u16 digit = value / powerOfTen; - s32 temp = value - (powerOfTen * digit); - - if (state == WRITING_DIGITS) - { - out = dest++; - - if (digit <= 9) - c = sDigits[digit]; - else - c = CHAR_QUESTION_MARK; - - *out = c; - } - else if (digit != 0 || powerOfTen == 1) - { - state = WRITING_DIGITS; - out = dest++; - - if (digit <= 9) - c = sDigits[digit]; - else - c = CHAR_QUESTION_MARK; - - *out = c; - } - else if (state == WRITING_SPACES) - { - *dest++ = CHAR_SPACE; - } - - value = temp; - } - - *dest++ = EXT_CTRL_CODE_BEGIN; - *dest++ = 0x14; - *dest++ = 0x00; - - *dest = EOS; - return dest; -} - -u8 *ConvertIntToHexStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n) -{ - enum { WAITING_FOR_NONZERO_DIGIT, WRITING_DIGITS, WRITING_SPACES } state; - u8 i; - s32 powerOfSixteen; - s32 largestPowerOfSixteen = 1; - - for (i = 1; i < n; i++) - largestPowerOfSixteen *= 16; - - state = WAITING_FOR_NONZERO_DIGIT; - - if (mode == STR_CONV_MODE_RIGHT_ALIGN) - state = WRITING_SPACES; - - if (mode == STR_CONV_MODE_LEADING_ZEROS) - state = WRITING_DIGITS; - - for (powerOfSixteen = largestPowerOfSixteen; powerOfSixteen > 0; powerOfSixteen /= 16) - { - char *out; - u8 c; - u32 digit = value / powerOfSixteen; - s32 temp = value % powerOfSixteen; - - if (state == WRITING_DIGITS) - { - out = dest++; - - if (digit <= 0xF) - c = sDigits[digit]; - else - c = CHAR_QUESTION_MARK; - - *out = c; - } - else if (digit != 0 || powerOfSixteen == 1) - { - state = WRITING_DIGITS; - out = dest++; - - if (digit <= 0xF) - c = sDigits[digit]; - else - c = CHAR_QUESTION_MARK; - - *out = c; - } - else if (state == WRITING_SPACES) - { - *dest++ = CHAR_SPACE; - } - - value = temp; - } - - *dest = EOS; - return dest; -} - -u8 *ConvertIntToDecimalString(u8 *dest, s32 value) -{ - char temp[12]; - s32 length = 0; - - do - { - temp[length++] = sDigits[value % 10]; - value /= 10; - } while (value != 0); - - length--; - - while (length != -1) - { - *dest++ = temp[length]; - length--; - } - - *dest = EOS; - return dest; -} - -u8 *StringExpandPlaceholders(u8 *dest, const u8 *src) -{ - for (;;) - { - u8 c = *src++; - u8 placeholderId; - u8 *expandedString; - u8 length; - - switch (c) - { - case PLACEHOLDER_BEGIN: - placeholderId = *src++; - expandedString = GetExpandedPlaceholder(placeholderId); - dest = StringExpandPlaceholders(dest, expandedString); - break; - case EXT_CTRL_CODE_BEGIN: - *dest++ = c; - length = GetExtCtrlCodeLength(*src); - memcpy(dest, src, length); - dest += length; - src += length; - break; - case EOS: - *dest = EOS; - return dest; - case 0xFA: - case 0xFB: - case 0xFE: - default: - *dest++ = c; - } - } -} - -u8 *StringBraille(u8 *dest, const u8 *src) -{ - u8 setBrailleFont[] = { 0xFC, 0x06, 0x06, 0xFF }; - u8 gotoLine2[] = { 0xFE, 0xFC, 0x0E, 0x02, 0xFF }; - - dest = StringCopy(dest, setBrailleFont); - - for (;;) - { - u8 c = *src++; - - switch (c) - { - case EOS: - *dest = c; - return dest; - case 0xFE: - dest = StringCopy(dest, gotoLine2); - break; - default: - *dest++ = c; - *dest++ = c + 0x40; - break; - } - } -} - -static u8 *ExpandPlaceholder_UnknownStringVar(void) -{ - return gUnknownStringVar; -} - -static u8 *ExpandPlaceholder_PlayerName(void) -{ - return gSaveBlock2.playerName; -} - -static u8 *ExpandPlaceholder_StringVar1(void) -{ - return gStringVar1; -} - -static u8 *ExpandPlaceholder_StringVar2(void) -{ - return gStringVar2; -} - -static u8 *ExpandPlaceholder_StringVar3(void) -{ - return gStringVar3; -} - -static u8 *ExpandPlaceholder_KunChan(void) -{ - if (gSaveBlock2.playerGender == MALE) - return (u8 *) gExpandedPlaceholder_Kun; - else - return (u8 *) gExpandedPlaceholder_Chan; -} - -static u8 *ExpandPlaceholder_RivalName(void) -{ - if (gSaveBlock2.playerGender == MALE) - return (u8 *) gExpandedPlaceholder_May; - else - return (u8 *) gExpandedPlaceholder_Brendan; -} - -#define VERSION_DEPENDENT_PLACEHOLDER_LIST \ - X(Version, Ruby, Sapphire) \ - X(EvilTeam, Magma, Aqua) \ - X(GoodTeam, Aqua, Magma) \ - X(EvilLeader, Maxie, Archie) \ - X(GoodLeader, Archie, Maxie) \ - X(EvilLegendary, Groudon, Kyogre) \ - X(GoodLegendary, Kyogre, Groudon) - -#ifdef SAPPHIRE -#define X(ph, r, s) \ -static u8 *ExpandPlaceholder_##ph(void) { return (u8 *) gExpandedPlaceholder_##s; } -VERSION_DEPENDENT_PLACEHOLDER_LIST -#else -#define X(ph, r, s) \ -static u8 *ExpandPlaceholder_##ph(void) { return (u8 *) gExpandedPlaceholder_##r; } -VERSION_DEPENDENT_PLACEHOLDER_LIST -#endif - -#undef X - -u8 *GetExpandedPlaceholder(u32 id) -{ - typedef u8 *(*ExpandPlaceholderFunc)(void); - - static const ExpandPlaceholderFunc funcs[] = - { - ExpandPlaceholder_UnknownStringVar, - ExpandPlaceholder_PlayerName, - ExpandPlaceholder_StringVar1, - ExpandPlaceholder_StringVar2, - ExpandPlaceholder_StringVar3, - ExpandPlaceholder_KunChan, - ExpandPlaceholder_RivalName, - ExpandPlaceholder_Version, - ExpandPlaceholder_EvilTeam, - ExpandPlaceholder_GoodTeam, - ExpandPlaceholder_EvilLeader, - ExpandPlaceholder_GoodLeader, - ExpandPlaceholder_EvilLegendary, - ExpandPlaceholder_GoodLegendary, - }; - - if (id >= ARRAY_COUNT(funcs)) - return (u8 *) gExpandedPlaceholder_Empty; - else - return funcs[id](); -} - -u8 *StringFill(u8 *dest, u8 c, u16 n) -{ - u16 i; - - for (i = 0; i < n; i++) - *dest++ = c; - - *dest = EOS; - return dest; -} - -u8 *StringCopyPadded(u8 *dest, const u8 *src, u8 c, u16 n) -{ - while (*src != EOS) - { - *dest++ = *src++; - - if (n) - n--; - } - - n--; - - while (n != (u16)-1) - { - *dest++ = c; - n--; - } - - *dest = EOS; - return dest; -} - -u8 *StringFillWithTerminator(u8 *dest, u16 n) -{ - return StringFill(dest, EOS, n); -} diff --git a/src/task.c b/src/task.c deleted file mode 100644 index 7bd2b5937..000000000 --- a/src/task.c +++ /dev/null @@ -1,209 +0,0 @@ -#include "global.h" -#include "task.h" - -#define ACTIVE_SENTINEL 0x10 -#define HEAD_SENTINEL 0xFE -#define TAIL_SENTINEL 0xFF - -// gTasks is a queue of the active 16 tasks -struct Task gTasks[ACTIVE_SENTINEL]; - -static void InsertTask(u8 newTaskId); -static u8 FindFirstActiveTask(); - -// Unused string -const u8 sTaskOverString[] = _("TASK OVER\nタスクがオーバーしました"); - -void ResetTasks() -{ - u8 taskId; - - for (taskId = 0; taskId < ACTIVE_SENTINEL; taskId++) - { - gTasks[taskId].isActive = FALSE; - gTasks[taskId].func = TaskDummy; - gTasks[taskId].prev = taskId; - gTasks[taskId].next = taskId + 1; - gTasks[taskId].priority = -1; - memset(gTasks[taskId].data, 0, sizeof(gTasks[taskId].data)); - } - - gTasks[0].prev = HEAD_SENTINEL; - gTasks[ACTIVE_SENTINEL - 1].next = TAIL_SENTINEL; -} - -u8 CreateTask(TaskFunc func, u8 priority) -{ - u8 taskId; - - for (taskId = 0; taskId < ACTIVE_SENTINEL; taskId++) - { - if (!gTasks[taskId].isActive) - { - gTasks[taskId].func = func; - gTasks[taskId].priority = priority; - InsertTask(taskId); - memset(gTasks[taskId].data, 0, sizeof(gTasks[taskId].data)); - gTasks[taskId].isActive = TRUE; - return taskId; - } - } - - return 0; -} - -static void InsertTask(u8 newTaskId) -{ - u8 taskId = FindFirstActiveTask(); - - if (taskId == ACTIVE_SENTINEL) - { - // The task system inserts from the top downwards starting from the end (0xFF) to 0. If FindFirstActiveTask returned the value equivalent to ACTIVE_SENTINEL, it means it is the only task because it searched the entire queue. - gTasks[newTaskId].prev = HEAD_SENTINEL; - gTasks[newTaskId].next = TAIL_SENTINEL; - return; - } - - while (1) - { - if (gTasks[newTaskId].priority < gTasks[taskId].priority) - { - // We've found a task with a higher priority value, - // so we insert the new task before it. - gTasks[newTaskId].prev = gTasks[taskId].prev; - gTasks[newTaskId].next = taskId; - - if (gTasks[taskId].prev != HEAD_SENTINEL) - gTasks[gTasks[taskId].prev].next = newTaskId; // as long as we are not at the end, insert the newTask appropriately. - - gTasks[taskId].prev = newTaskId; - return; - } - if (gTasks[taskId].next == TAIL_SENTINEL) // we did not find a space for the task, so overwrite the last task as it is the lowest priority. - { - // We've reached the end. - gTasks[newTaskId].prev = taskId; - gTasks[newTaskId].next = gTasks[taskId].next; - gTasks[taskId].next = newTaskId; - return; - } - taskId = gTasks[taskId].next; // neither the priority was lower, nor the end. check the next task. - } -} - -void DestroyTask(u8 taskId) -{ - if (gTasks[taskId].isActive) - { - gTasks[taskId].isActive = FALSE; - - if (gTasks[taskId].prev == HEAD_SENTINEL) - { - if (gTasks[taskId].next != TAIL_SENTINEL) - gTasks[gTasks[taskId].next].prev = HEAD_SENTINEL; - } - else - { - if (gTasks[taskId].next == TAIL_SENTINEL) - { - gTasks[gTasks[taskId].prev].next = TAIL_SENTINEL; - } - else - { - gTasks[gTasks[taskId].prev].next = gTasks[taskId].next; - gTasks[gTasks[taskId].next].prev = gTasks[taskId].prev; - } - } - } -} - -void RunTasks(void) -{ - u8 taskId = FindFirstActiveTask(); - - if (taskId != ACTIVE_SENTINEL) - { - do - { - gTasks[taskId].func(taskId); - taskId = gTasks[taskId].next; - } while (taskId != TAIL_SENTINEL); - } -} - -static u8 FindFirstActiveTask(void) -{ - u8 taskId; - - for (taskId = 0; taskId < ACTIVE_SENTINEL; taskId++) - if (gTasks[taskId].isActive == TRUE && gTasks[taskId].prev == HEAD_SENTINEL) - break; - - return taskId; -} - -void TaskDummy(u8 taskId) -{ -} - -#define TASK_DATA_OP(taskId, offset, op) \ -{ \ - u32 tasksAddr = (u32)gTasks; \ - u32 addr = taskId * sizeof(struct Task) + offset; \ - u32 dataAddr = tasksAddr + offsetof(struct Task, data); \ - addr += dataAddr; \ - op; \ -} - -void SetTaskFuncWithFollowupFunc(u8 taskId, TaskFunc func, TaskFunc followupFunc) -{ - TASK_DATA_OP(taskId, 28, *((u16 *)addr) = (u32)followupFunc) - TASK_DATA_OP(taskId, 30, *((u16 *)addr) = (u32)followupFunc >> 16) - gTasks[taskId].func = func; -} - -void SwitchTaskToFollowupFunc(u8 taskId) -{ - s32 func; - - gTasks[taskId].func = NULL; - - TASK_DATA_OP(taskId, 28, func = *((u16 *)addr)) - TASK_DATA_OP(taskId, 30, func |= *((s16 *)addr) << 16) - - gTasks[taskId].func = (TaskFunc)func; -} - -bool8 FuncIsActiveTask(TaskFunc func) -{ - u8 i; - - for (i = 0; i < ACTIVE_SENTINEL; i++) - if (gTasks[i].isActive == TRUE && gTasks[i].func == func) - return TRUE; - - return FALSE; -} - -u8 FindTaskIdByFunc(TaskFunc func) -{ - s32 i; - - for (i = 0; i < ACTIVE_SENTINEL; i++) - if (gTasks[i].isActive == TRUE && gTasks[i].func == func) - return (u8)i; - - return -1; -} - -u8 GetTaskCount(void) -{ - u8 i; - u8 count = 0; - - for (i = 0; i < ACTIVE_SENTINEL; i++) - if (gTasks[i].isActive == TRUE) - count++; - - return count; -} diff --git a/src/text.c b/src/text.c deleted file mode 100644 index b27084b86..000000000 --- a/src/text.c +++ /dev/null @@ -1,4324 +0,0 @@ -#include "global.h" -#include "text.h" -#include "battle.h" -#include "main.h" -#include "palette.h" -#include "songs.h" -#include "sound.h" -#include "string_util.h" - -enum -{ - WIN_STATE_END, - WIN_STATE_BEGIN, - WIN_STATE_NORMAL, - WIN_STATE_INTERRUPTIBLE_PAUSE, - WIN_STATE_PAUSE, - WIN_STATE_WAIT_BUTTON, - WIN_STATE_NEWLINE, - WIN_STATE_PLACEHOLDER, - WIN_STATE_PARAGRAPH, - WIN_STATE_NEWLINE_WAIT, - WIN_STATE_WAIT_SOUND, -}; - -struct Font -{ - u32 type; - u8 *glyphs; - u16 glyphSize; - u16 lowerTileOffset; -}; - -struct GlyphBuffer -{ - // 0-7 left tile - // 8-15 right tile (if it exists) - u32 pixelRows[16]; - - // pixel row filled with BG color - u32 background; - - // table of color indices (not a palette) - u32 colors[16]; -}; - -struct GlyphTileInfo -{ - u8 textMode; - u8 startPixel; - u8 width; - u8 *src; - u32 *dest; - u32 *colors; -}; - -struct ShiftAmount -{ - u32 left; - u32 right; -}; - -static u16 InitVariableWidthFontTileData(struct Window *, u16); -static u16 LoadFixedWidthFont(struct Window *, u16); -static u16 LoadFixedWidthFont_Font1Latin(struct Window *, u16); -static u16 LoadFixedWidthFont_Font4Latin(struct Window *, u16); -static u16 LoadFixedWidthFont_Braille(struct Window *, u16); -static void MultistepLoadFont_LoadGlyph(struct Window *, u16, u8); -static u8 sub_8002FA0(struct Window *, const u8 *); -static u8 InterpretText(struct Window *); -static u8 HandleExtCtrlCode(struct Window *); -static u8 UpdateWindowText(struct Window *); -static u8 DrawGlyph_TextMode0(struct Window *, u32); -static void DrawGlyph_TextMode2(struct Window *, u32); -static void LoadFixedWidthGlyph(struct Window *, u32, u8 *); -static void WriteGlyphTilemap(struct Window *, u16, u16); -static void GetGlyphTilePointers(u8, u8, u16, u8 **, u8 **); -static u16 *GetCursorTilemapPointer(struct Window *); -static void ApplyColors_UnshadowedFont(const u8 *, u32 *, u8, u8); -static void ApplyColors_ShadowedFont(const void *, void *, u8, u8, u8); -static void SetCursorX(struct Window *, u8); -static void AddToCursorX(struct Window *, u8); -static void AddToCursorY(struct Window *, u8); -static void ClipLeft(struct Window *); -static void ClipRight(struct Window *); -static void InitColors(struct Window *); -static void SetBackgroundColor(struct Window *, u8); -static void SetShadowColor(struct Window *, u8); -static void SetForegroundColor(struct Window *, u8); -static u8 GetTextDelay(struct Window *); -static bool8 PlayerCanInterruptWait(struct Window *); -static void ScrollWindowTextLines(struct Window *); -static void ScrollWindowTextLines_TextMode0(struct Window *); -static void DoScroll_TextMode0(struct Window *, u16); -static void ScrollWindowTextLines_TextMode1(struct Window *); -static void DoScroll_TextMode1(struct Window *, u16); -static void ScrollWindowTextLines_TextMode2(struct Window *); -static void DoScroll_TextMode2(struct Window *, u8); -void ClearWindowTextLines(struct Window *); -static void ClearWindowTextLines_TextMode0_TextMode1(struct Window *, u8); -static void ClearWindowTextLines_TextMode2(struct Window *, u8); -static void TryEraseDownArrow(struct Window *); -static u16 GetBlankTileNum(struct Window *); -static u8 WaitWithDownArrow(struct Window *); -static void DrawInitialDownArrow(struct Window *); -static void DrawMovingDownArrow(struct Window *); -static u16 GetCursorTileNum(struct Window *, u32, u32); -static s32 DrawGlyphTiles(struct Window *, u32, u32); -static void UpdateTilemap(struct Window *, u32); -static u8 GetGlyphWidth(struct Window *, u32); -static s32 DrawGlyphTile_ShadowedFont(struct GlyphTileInfo *); - -static void PrintGlyph_TextMode0(struct Window *, u32); -static void PrintGlyph_TextMode1(struct Window *, u32); -static void PrintGlyph_TextMode2(struct Window *, u32); - -static void WriteGlyphTilemap_Font0_Font3(struct Window *, u32); -static void WriteGlyphTilemap_Font1_Font4(struct Window *, u32); -static void WriteGlyphTilemap_Font2_Font5(struct Window *, u32); -static void WriteGlyphTilemap_Font1_Font4(struct Window *, u32); -static void WriteGlyphTilemap_Font2_Font5(struct Window *, u32); -static void WriteGlyphTilemap_Font6(struct Window *, u32); - -static u8 ExtCtrlCode_Nop(struct Window *); -static u8 ExtCtrlCode_ForegroundColor(struct Window *); -static u8 ExtCtrlCode_BackgroundColor(struct Window *); -static u8 ExtCtrlCode_ShadowColor(struct Window *); -static u8 ExtCtrlCode_AllColors(struct Window *); -static u8 ExtCtrlCode_Palette(struct Window *); -static u8 ExtCtrlCode_Font(struct Window *); -static u8 ExtCtrlCode_DefaultFont(struct Window *); -static u8 ExtCtrlCode_Pause(struct Window *); -static u8 ExtCtrlCode_WaitButton(struct Window *); -static u8 ExtCtrlCode_WaitSound(struct Window *); -static u8 ExtCtrlCode_PlayBGM(struct Window *); -static u8 ExtCtrlCode_Escape(struct Window *); -static u8 ExtCtrlCode_Nop2(struct Window *); -static u8 ExtCtrlCode_SetCursorY(struct Window *); -static u8 ExtCtrlCode_ClearWindowTextLines(struct Window *); -static u8 ExtCtrlCode_PlaySE(struct Window *); -static u8 ExtCtrlCode_Skip(struct Window *); -static u8 ExtCtrlCode_SetCursorX(struct Window *); -static u8 ExtCtrlCode_SkipTo(struct Window *); -static u8 ExtCtrlCode_Spacing(struct Window *); -static u8 ExtCtrlCode_Japanese(struct Window *); -static u8 ExtCtrlCode_Latin(struct Window *); - -static void ShiftGlyphTile_UnshadowedFont_Width0(struct GlyphBuffer *, u8 *, u32 *, u8); -static void ShiftGlyphTile_UnshadowedFont_Width1(struct GlyphBuffer *, u8 *, u32 *, u8); -static void ShiftGlyphTile_UnshadowedFont_Width2(struct GlyphBuffer *, u8 *, u32 *, u8); -static void ShiftGlyphTile_UnshadowedFont_Width3(struct GlyphBuffer *, u8 *, u32 *, u8); -static void ShiftGlyphTile_UnshadowedFont_Width4(struct GlyphBuffer *, u8 *, u32 *, u8); -static void ShiftGlyphTile_UnshadowedFont_Width5(struct GlyphBuffer *, u8 *, u32 *, u8); -static void ShiftGlyphTile_UnshadowedFont_Width6(struct GlyphBuffer *, u8 *, u32 *, u8); -static void ShiftGlyphTile_UnshadowedFont_Width7(struct GlyphBuffer *, u8 *, u32 *, u8); -static void ShiftGlyphTile_UnshadowedFont_Width8(struct GlyphBuffer *, u8 *, u32 *, u8); - -static void ShiftGlyphTile_ShadowedFont_Width0(struct GlyphBuffer *, u32 *, u32 *, u8); -static void ShiftGlyphTile_ShadowedFont_Width1(struct GlyphBuffer *, u32 *, u32 *, u8); -static void ShiftGlyphTile_ShadowedFont_Width2(struct GlyphBuffer *, u32 *, u32 *, u8); -static void ShiftGlyphTile_ShadowedFont_Width3(struct GlyphBuffer *, u32 *, u32 *, u8); -static void ShiftGlyphTile_ShadowedFont_Width4(struct GlyphBuffer *, u32 *, u32 *, u8); -static void ShiftGlyphTile_ShadowedFont_Width5(struct GlyphBuffer *, u32 *, u32 *, u8); -static void ShiftGlyphTile_ShadowedFont_Width6(struct GlyphBuffer *, u32 *, u32 *, u8); -static void ShiftGlyphTile_ShadowedFont_Width7(struct GlyphBuffer *, u32 *, u32 *, u8); -static void ShiftGlyphTile_ShadowedFont_Width8(struct GlyphBuffer *, u32 *, u32 *, u8); - -static struct Window *sMultistepLoadFont_Window; -static u16 sMultistepLoadFont_StartOffset; -static u16 sMultistepLoadFont_Index; -static struct Window sTempWindow; -static u8 sWaitType; -static u8 sLineLength; -static struct GlyphBuffer sGlyphBuffer; - -EWRAM_DATA u16 gBGTilemapBuffers[4][0x400] = {0}; - -EWRAM_DATA u8 gStringVar1[0x100] = {0}; -EWRAM_DATA u8 gStringVar2[0x100] = {0}; -EWRAM_DATA u8 gStringVar3[0x100] = {0}; -EWRAM_DATA u8 gStringVar4[0x100] = {0}; - -extern u16 gBattleTypeFlags; -extern u8 gIsLinkContest; -extern u8 gTileBuffer[]; - -vu16 *const gBGControlRegs[] = -{ - ®_BG0CNT, - ®_BG1CNT, - ®_BG2CNT, - ®_BG3CNT, -}; - -vu16 *const gBGHOffsetRegs[] = -{ - ®_BG0HOFS, - ®_BG1HOFS, - ®_BG2HOFS, - ®_BG3HOFS, -}; - -vu16 *const gBGVOffsetRegs[] = -{ - ®_BG0VOFS, - ®_BG1VOFS, - ®_BG2VOFS, - ®_BG3VOFS, -}; - -const u16 gUnknown_081E29D8[] = { 0x100, 0x200, 0x400, 0x800 }; -const u16 gUnknown_081E29E0[] = { 0x100, 0x200, 0x400, 0x800 }; -const u16 gUnknown_081E29E8[] = { 1, 2, 4, 8 }; - -static const u8 sFont0LatinGlyphs[] = INCBIN_U8("graphics/fonts/font0_lat.1bpp"); -static const u8 sFont1LatinGlyphs[] = INCBIN_U8("graphics/fonts/font1_lat.1bpp"); -static const u8 sFont0JapaneseGlyphs[] = INCBIN_U8("graphics/fonts/font0_jpn.1bpp"); -static const u8 sFont1JapaneseGlyphs[] = INCBIN_U8("graphics/fonts/font1_jpn.1bpp"); -static const u8 sBrailleGlyphs[] = INCBIN_U8("graphics/fonts/font6_braille.1bpp"); -static const u32 sDownArrowTiles[] = INCBIN_U32("graphics/fonts/down_arrow.4bpp"); - -// clang-format off -#include "data/text/type1_map.h" -#include "data/text/type3_map.h" -#include "data/text/font1_widths.h" -#include "data/text/font4_widths.h" -#include "data/text/font0_widths.h" -#include "data/text/font3_widths.h" -// clang-format on - -const u16 gUnknownPalette_81E6692[] = INCBIN_U16("graphics/fonts/unknown_81E6692.gbapal"); -const u16 gFontDefaultPalette[] = INCBIN_U16("graphics/fonts/default.gbapal"); - -const u8 sBlankTile[8] = { 0, 0, 0, 0, 0, 0, 0, 0, }; - -static const u32 sGlyphMasks[9][8][3] = -{ - { - { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, - { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, - { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, - { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, - { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, - { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, - { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, - { 0xFFFFFFFF,0xFFFFFFFF,0x00000000, }, - }, - { - { 0x00000000,0xFFFFFFFF,0xFFFFFFF0, }, - { 0x0000000F,0xFFFFFFFF,0xFFFFFF00, }, - { 0x000000FF,0xFFFFFFFF,0xFFFFF000, }, - { 0x00000FFF,0xFFFFFFFF,0xFFFF0000, }, - { 0x0000FFFF,0xFFFFFFFF,0xFFF00000, }, - { 0x000FFFFF,0xFFFFFFFF,0xFF000000, }, - { 0x00FFFFFF,0xFFFFFFFF,0xF0000000, }, - { 0x0FFFFFFF,0xFFFFFFFF,0x00000000, }, - }, - { - { 0x00000000,0xFFFFFFFF,0xFFFFFF00, }, - { 0x0000000F,0xFFFFFFFF,0xFFFFF000, }, - { 0x000000FF,0xFFFFFFFF,0xFFFF0000, }, - { 0x00000FFF,0xFFFFFFFF,0xFFF00000, }, - { 0x0000FFFF,0xFFFFFFFF,0xFF000000, }, - { 0x000FFFFF,0xFFFFFFFF,0xF0000000, }, - { 0x00FFFFFF,0xFFFFFFFF,0x00000000, }, - { 0x0FFFFFFF,0xFFFFFFF0,0x00000000, }, - }, - { - { 0x00000000,0xFFFFFFFF,0xFFFFF000, }, - { 0x0000000F,0xFFFFFFFF,0xFFFF0000, }, - { 0x000000FF,0xFFFFFFFF,0xFFF00000, }, - { 0x00000FFF,0xFFFFFFFF,0xFF000000, }, - { 0x0000FFFF,0xFFFFFFFF,0xF0000000, }, - { 0x000FFFFF,0xFFFFFFFF,0x00000000, }, - { 0x00FFFFFF,0xFFFFFFF0,0x00000000, }, - { 0x0FFFFFFF,0xFFFFFF00,0x00000000, }, - }, - { - { 0x00000000,0xFFFFFFFF,0xFFFF0000, }, - { 0x0000000F,0xFFFFFFFF,0xFFF00000, }, - { 0x000000FF,0xFFFFFFFF,0xFF000000, }, - { 0x00000FFF,0xFFFFFFFF,0xF0000000, }, - { 0x0000FFFF,0xFFFFFFFF,0x00000000, }, - { 0x000FFFFF,0xFFFFFFF0,0x00000000, }, - { 0x00FFFFFF,0xFFFFFF00,0x00000000, }, - { 0x0FFFFFFF,0xFFFFF000,0x00000000, }, - }, - { - { 0x00000000,0xFFFFFFFF,0xFFF00000, }, - { 0x0000000F,0xFFFFFFFF,0xFF000000, }, - { 0x000000FF,0xFFFFFFFF,0xF0000000, }, - { 0x00000FFF,0xFFFFFFFF,0x00000000, }, - { 0x0000FFFF,0xFFFFFFF0,0x00000000, }, - { 0x000FFFFF,0xFFFFFF00,0x00000000, }, - { 0x00FFFFFF,0xFFFFF000,0x00000000, }, - { 0x0FFFFFFF,0xFFFF0000,0x00000000, }, - }, - { - { 0x00000000,0xFFFFFFFF,0xFF000000, }, - { 0x0000000F,0xFFFFFFFF,0xF0000000, }, - { 0x000000FF,0xFFFFFFFF,0x00000000, }, - { 0x00000FFF,0xFFFFFFF0,0x00000000, }, - { 0x0000FFFF,0xFFFFFF00,0x00000000, }, - { 0x000FFFFF,0xFFFFF000,0x00000000, }, - { 0x00FFFFFF,0xFFFF0000,0x00000000, }, - { 0x0FFFFFFF,0xFFF00000,0x00000000, }, - }, - { - { 0x00000000,0xFFFFFFFF,0xF0000000, }, - { 0x0000000F,0xFFFFFFFF,0x00000000, }, - { 0x000000FF,0xFFFFFFF0,0x00000000, }, - { 0x00000FFF,0xFFFFFF00,0x00000000, }, - { 0x0000FFFF,0xFFFFF000,0x00000000, }, - { 0x000FFFFF,0xFFFF0000,0x00000000, }, - { 0x00FFFFFF,0xFFF00000,0x00000000, }, - { 0x0FFFFFFF,0xFF000000,0x00000000, }, - }, - { - { 0x00000000,0xFFFFFFFF,0x00000000, }, - { 0x0000000F,0xFFFFFFF0,0x00000000, }, - { 0x000000FF,0xFFFFFF00,0x00000000, }, - { 0x00000FFF,0xFFFFF000,0x00000000, }, - { 0x0000FFFF,0xFFFF0000,0x00000000, }, - { 0x000FFFFF,0xFFF00000,0x00000000, }, - { 0x00FFFFFF,0xFF000000,0x00000000, }, - { 0x0FFFFFFF,0xF0000000,0x00000000, }, - }, -}; - -static const struct ShiftAmount sGlyphShiftAmounts[8] = -{ - { 0, 32 }, - { 4, 28 }, - { 8, 24 }, - { 12, 20 }, - { 16, 16 }, - { 20, 12 }, - { 24, 8 }, - { 28, 4 }, -}; - -typedef void (*PrintGlyphFunc)(struct Window *, u32); - -static const PrintGlyphFunc sPrintGlyphFuncs[] = -{ - PrintGlyph_TextMode0, - PrintGlyph_TextMode1, - PrintGlyph_TextMode2, -}; - -typedef void (*WriteGlyphTilemapFunc)(struct Window *, u32); - -static const WriteGlyphTilemapFunc sWriteGlyphTilemapFuncs[] = -{ - WriteGlyphTilemap_Font0_Font3, - WriteGlyphTilemap_Font1_Font4, - WriteGlyphTilemap_Font2_Font5, - WriteGlyphTilemap_Font0_Font3, - WriteGlyphTilemap_Font1_Font4, - WriteGlyphTilemap_Font2_Font5, - WriteGlyphTilemap_Font6, -}; - -static const struct Window sDefaultWindow = { .language = GAME_LANGUAGE }; - -typedef u8 (*ExtCtrlCodeFunc)(struct Window *); - -static const ExtCtrlCodeFunc sExtCtrlCodeFuncs[] = -{ - ExtCtrlCode_Nop, - ExtCtrlCode_ForegroundColor, - ExtCtrlCode_BackgroundColor, - ExtCtrlCode_ShadowColor, - ExtCtrlCode_AllColors, - ExtCtrlCode_Palette, - ExtCtrlCode_Font, - ExtCtrlCode_DefaultFont, - ExtCtrlCode_Pause, - ExtCtrlCode_WaitButton, - ExtCtrlCode_WaitSound, - ExtCtrlCode_PlayBGM, - ExtCtrlCode_Escape, - ExtCtrlCode_Nop2, - ExtCtrlCode_SetCursorY, - ExtCtrlCode_ClearWindowTextLines, - ExtCtrlCode_PlaySE, - ExtCtrlCode_Skip, - ExtCtrlCode_SetCursorX, - ExtCtrlCode_SkipTo, - ExtCtrlCode_Spacing, - ExtCtrlCode_Japanese, - ExtCtrlCode_Latin, -}; - -extern const u32 gFont3LatinGlyphs[]; -extern const u32 gFont4LatinGlyphs[]; -extern const u32 gFont3JapaneseGlyphs[]; -extern const u32 gFont4JapaneseGlyphs[]; - -static const struct Font sFonts[] = -{ - // Japanese fonts - { 0, (u8 *)sFont0JapaneseGlyphs, 16, 8 }, - { 1, (u8 *)sFont1JapaneseGlyphs, 8, 0 }, - { 2, (u8 *)sFont1JapaneseGlyphs, 8, 0 }, - { 4, (u8 *)gFont3JapaneseGlyphs, 64, 512 }, - { 1, (u8 *)gFont4JapaneseGlyphs, 32, 0 }, - { 2, (u8 *)gFont4JapaneseGlyphs, 32, 0 }, - { 3, (u8 *)sBrailleGlyphs, 8, 0 }, - // Latin - { 0, (u8 *)sFont0LatinGlyphs, 16, 8 }, - { 1, (u8 *)sFont1LatinGlyphs, 8, 0 }, - { 2, (u8 *)sFont1LatinGlyphs, 8, 0 }, - { 0, (u8 *)gFont3LatinGlyphs, 64, 32 }, - { 1, (u8 *)gFont4LatinGlyphs, 32, 0 }, - { 2, (u8 *)gFont4LatinGlyphs, 32, 0 }, - { 3, (u8 *)sBrailleGlyphs, 8, 0 }, -}; - -static const u8 sTextSpeedDelays[] = { 6, 3, 1 }; // slow, mid, fast - -static const u8 sExtCtrlCodeLengths[] = -{ - 1, - 2, - 2, - 2, - 4, - 2, - 2, - 1, - 2, - 1, - 1, - 3, - 2, - 2, - 2, - 1, - 3, - 2, - 2, - 2, - 2, - 1, - 1, -}; - -typedef void (*ShiftGlyphTileUnshadowedFunc)(struct GlyphBuffer *, u8 *, u32 *, u8); - -static const ShiftGlyphTileUnshadowedFunc sShiftGlyphTileUnshadowedFuncs[] = -{ - ShiftGlyphTile_UnshadowedFont_Width0, - ShiftGlyphTile_UnshadowedFont_Width1, - ShiftGlyphTile_UnshadowedFont_Width2, - ShiftGlyphTile_UnshadowedFont_Width3, - ShiftGlyphTile_UnshadowedFont_Width4, - ShiftGlyphTile_UnshadowedFont_Width5, - ShiftGlyphTile_UnshadowedFont_Width6, - ShiftGlyphTile_UnshadowedFont_Width7, - ShiftGlyphTile_UnshadowedFont_Width8, -}; - -typedef void (*ShiftGlyphTileShadowedFunc)(struct GlyphBuffer *, u32 *, u32 *, u8); - -static const ShiftGlyphTileShadowedFunc sShiftGlyphTileShadowedFuncs[] = -{ - ShiftGlyphTile_ShadowedFont_Width0, - ShiftGlyphTile_ShadowedFont_Width1, - ShiftGlyphTile_ShadowedFont_Width2, - ShiftGlyphTile_ShadowedFont_Width3, - ShiftGlyphTile_ShadowedFont_Width4, - ShiftGlyphTile_ShadowedFont_Width5, - ShiftGlyphTile_ShadowedFont_Width6, - ShiftGlyphTile_ShadowedFont_Width7, - ShiftGlyphTile_ShadowedFont_Width8, -}; - -const struct WindowConfig gWindowConfig_81E6C3C = -{ - 0, // BG number - 2, // BG character base block - 31, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 0, // font - 0, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6C58 = -{ - 0, // BG number - 0, // BG character base block - 24, // BG screen base block - 0, // BG priority - 0, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 0, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 26, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(24), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6C74 = -{ - 0, // BG number - 0, // BG character base block - 0, // BG screen base block - 0, // BG priority - 0, // palette number - 1, // foreground color - 0, // background color - 3, // shadow color - 4, // font - 0, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)OBJ_VRAM0, // tile data - NULL, // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6C90 = -{ - 0, // BG number - 1, // BG character base block - 30, // BG screen base block - 2, // BG priority - 31, // palette number - 15, // foreground color - 0, // background color - 1, // shadow color - 4, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(1), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6CAC = -{ - 0, // BG number - 0, // BG character base block - 0, // BG screen base block - 0, // BG priority - 0, // palette number - 15, // foreground color - 0, // background color - 1, // shadow color - 4, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 8, // width - 60, // height - gTileBuffer, // tile data - NULL, // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6CC8 = -{ - 2, // BG number - 2, // BG character base block - 15, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(15), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6CE4 = -{ - 0, // BG number - 2, // BG character base block - 31, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6D00 = -{ - 0, // BG number - 0, // BG character base block - 31, // BG screen base block - 0, // BG priority - 15, // palette number - 2, // foreground color - 15, // background color - 3, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6D1C = -{ - 1, // BG number - 0, // BG character base block - 31, // BG screen base block - 1, // BG priority - 15, // palette number - 2, // foreground color - 15, // background color - 3, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6D38 = -{ - 0, // BG number - 0, // BG character base block - 0, // BG screen base block - 0, // BG priority - 0, // palette number - 15, // foreground color - 0, // background color - 14, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 8, // width - 64, // height - gTileBuffer, // tile data - NULL, // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6D54 = -{ - 3, // BG number - 3, // BG character base block - 15, // BG screen base block - 3, // BG priority - 2, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(3), // tile data - (u16 *)BG_SCREEN_ADDR(15), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6D70 = -{ - 3, // BG number - 3, // BG character base block - 15, // BG screen base block - 3, // BG priority - 3, // palette number - 1, // foreground color - 3, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(3), // tile data - (u16 *)BG_SCREEN_ADDR(15), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6D8C = -{ - 1, // BG number - 0, // BG character base block - 14, // BG screen base block - 1, // BG priority - 0, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(14), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6DA8 = -{ - 0, // BG number - 0, // BG character base block - 12, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(11), // tilemap -}; - -const struct WindowConfig WindowConfig_TrainerCard_Back_Values = -{ - 0, // BG number - 2, // BG character base block - 30, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap -}; - -const struct WindowConfig WindowConfig_TrainerCard_Back_Labels = -{ - 0, // BG number - 2, // BG character base block - 30, // BG screen base block - 0, // BG priority - 14, // palette number - 1, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6DFC = -{ - 0, // BG number - 2, // BG character base block - 31, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6E18 = -{ - 0, // BG number - 2, // BG character base block - 31, // BG screen base block - 1, // BG priority - 15, // palette number - 1, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6E34 = -{ - 1, // BG number - 0, // BG character base block - 31, // BG screen base block - 1, // BG priority - 15, // palette number - 1, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6E50 = -{ - 0, // BG number - 2, // BG character base block - 28, // BG screen base block - 0, // BG priority - 13, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(28), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6E6C = -{ - 0, // BG number - 2, // BG character base block - 30, // BG screen base block - 0, // BG priority - 13, // palette number - 15, // foreground color - 0, // background color - 10, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6E88 = -{ - 0, // BG number - 0, // BG character base block - 31, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6EA4 = -{ - 1, // BG number - 0, // BG character base block - 28, // BG screen base block - 1, // BG priority - 1, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 8, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(28), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6EC0 = -{ - 2, // BG number - 2, // BG character base block - 29, // BG screen base block - 2, // BG priority - 1, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 8, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(29), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6EDC = -{ - 1, // BG number - 0, // BG character base block - 28, // BG screen base block - 1, // BG priority - 2, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 8, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(28), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6EF8 = -{ - 2, // BG number - 2, // BG character base block - 29, // BG screen base block - 2, // BG priority - 2, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 8, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(29), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6F14 = -{ - 1, // BG number - 0, // BG character base block - 28, // BG screen base block - 1, // BG priority - 3, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 8, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(28), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6F30 = -{ - 2, // BG number - 2, // BG character base block - 29, // BG screen base block - 2, // BG priority - 3, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 8, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(29), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6F4C = -{ - 3, // BG number - 0, // BG character base block - 30, // BG screen base block - 3, // BG priority - 0, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6F68 = -{ - 0, // BG number - 2, // BG character base block - 13, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(13), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6F84 = -{ - 0, // BG number - 2, // BG character base block - 31, // BG screen base block - 0, // BG priority - 15, // palette number - 15, // foreground color - 0, // background color - 1, // shadow color - 3, // font - 0, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6FA0 = -{ - 1, // BG number - 0, // BG character base block - 24, // BG screen base block - 3, // BG priority - 15, // palette number - 1, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 0, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(24), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6FBC = -{ - 0, // BG number - 0, // BG character base block - 30, // BG screen base block - 0, // BG priority - 15, // palette number - 15, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 0, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6FD8 = -{ - 0, // BG number - 0, // BG character base block - 24, // BG screen base block - 0, // BG priority - 15, // palette number - 15, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 0, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(24), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E6FF4 = -{ - 0, // BG number - 0, // BG character base block - 24, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 0, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(24), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E7010 = -{ - 0, // BG number - 0, // BG character base block - 30, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 0, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E702C = -{ - 3, // BG number - 2, // BG character base block - 15, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(15), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E7048 = -{ - 2, // BG number - 2, // BG character base block - 14, // BG screen base block - 2, // BG priority - 15, // palette number - 1, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 16, // tilemap left coordinate - 0, // tilemap top coordinate - 16, // width - 32, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(14), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E7064 = -{ - 2, // BG number - 2, // BG character base block - 14, // BG screen base block - 2, // BG priority - 15, // palette number - 1, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(14), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E7080 = -{ - 3, // BG number - 0, // BG character base block - 30, // BG screen base block - 3, // BG priority - 11, // palette number - 1, // foreground color - 15, // background color - 5, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E709C = -{ - 0, // BG number - 0, // BG character base block - 31, // BG screen base block - 1, // BG priority - 15, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E70B8 = -{ - 2, // BG number - 0, // BG character base block - 30, // BG screen base block - 2, // BG priority - 11, // palette number - 1, // foreground color - 0, // background color - 5, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E70D4 = -{ - 3, // BG number - 0, // BG character base block - 30, // BG screen base block - 3, // BG priority - 11, // palette number - 1, // foreground color - 15, // background color - 5, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E70F0 = -{ - 0, // BG number - 0, // BG character base block - 0, // BG screen base block - 0, // BG priority - 0, // palette number - 15, // foreground color - 1, // background color - 14, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 32, // width - 32, // height - gTileBuffer, // tile data - NULL, // tilemap -}; - -const struct WindowConfig gWindowConfig_81E710C = -{ - 0, // BG number - 0, // BG character base block - 31, // BG screen base block - 1, // BG priority - 15, // palette number - 1, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E7128 = -{ - 0, // BG number - 2, // BG character base block - 31, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E7144 = -{ - 0, // BG number - 2, // BG character base block - 31, // BG screen base block - 0, // BG priority - 13, // palette number - 1, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E7160 = -{ - 1, // BG number - 1, // BG character base block - 10, // BG screen base block - 1, // BG priority - 14, // palette number - 1, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 0, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(1), // tile data - (u16 *)BG_SCREEN_ADDR(10), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E717C = -{ - 0, // BG number - 3, // BG character base block - 31, // BG screen base block - 0, // BG priority - 15, // palette number - 15, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 0, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(3), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E7198 = -{ - 0, // BG number - 2, // BG character base block - 15, // BG screen base block - 0, // BG priority - 15, // palette number - 15, // foreground color - 0, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(15), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E71B4 = -{ - 0, // BG number - 2, // BG character base block - 15, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(15), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E71D0 = -{ - 1, // BG number - 1, // BG character base block - 28, // BG screen base block - 0, // BG priority - 5, // palette number - 13, // foreground color - 14, // background color - 15, // shadow color - 3, // font - 0, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(1), // tile data - (u16 *)BG_SCREEN_ADDR(28), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E71EC = -{ - 2, // BG number - 1, // BG character base block - 30, // BG screen base block - 0, // BG priority - 5, // palette number - 13, // foreground color - 14, // background color - 15, // shadow color - 3, // font - 0, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(1), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E7208 = -{ - 0, // BG number - 2, // BG character base block - 28, // BG screen base block - 0, // BG priority - 8, // palette number - 1, // foreground color - 0, // background color - 2, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(28), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E7224 = -{ - 0, // BG number - 0, // BG character base block - 31, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E7240 = -{ - 1, // BG number - 2, // BG character base block - 30, // BG screen base block - 0, // BG priority - 15, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap -}; - -const struct WindowConfig gWindowConfig_81E725C = -{ - 0, // BG number - 0, // BG character base block - 0, // BG screen base block - 0, // BG priority - 0, // palette number - 15, // foreground color - 0, // background color - 14, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 30, // width - 20, // height - (u8 *)OBJ_VRAM0, // tile data - NULL, // tilemap -}; - -const struct WindowConfig gWindowConfig_81E7278 = -{ - 0, // BG number - 0, // BG character base block - 0, // BG screen base block - 0, // BG priority - 0, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 3, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 16, // width - 32, // height - gTileBuffer, // tile data - NULL, // tilemap -}; - -const struct WindowConfig gWindowConfig_81E7294 = -{ - 0, // BG number - 0, // BG character base block - 0, // BG screen base block - 0, // BG priority - 0, // palette number - 1, // foreground color - 15, // background color - 8, // shadow color - 4, // font - 2, // text mode - 0, // spacing - 0, // tilemap left coordinate - 0, // tilemap top coordinate - 16, // width - 32, // height - gTileBuffer, // tile data - NULL, // tilemap -}; - -static void UpdateBGRegs(const struct WindowConfig *winConfig) -{ - u8 bgNum = winConfig->bgNum; - *gBGHOffsetRegs[bgNum] = 0; - *gBGVOffsetRegs[bgNum] = 0; - *gBGControlRegs[bgNum] = winConfig->priority | (winConfig->screenBaseBlock << 8) | (winConfig->charBaseBlock << 2); -} - -static void ClearBGMem(const struct WindowConfig *winConfig) -{ - CpuFastFill(0, winConfig->tileData, 32); - - if (winConfig->tilemap) - CpuFastFill(0, winConfig->tilemap, 0x800); -} - -void LoadFontDefaultPalette(const struct WindowConfig *winConfig) -{ - LoadPalette(gFontDefaultPalette, 16 * winConfig->paletteNum, 32); -} - -void SetUpWindowConfig(const struct WindowConfig *winConfig) -{ - UpdateBGRegs(winConfig); - ClearBGMem(winConfig); - LoadFontDefaultPalette(winConfig); -} - -u16 InitWindowTileData(struct Window *win, u16 startOffset) -{ - u16 retVal; - - win->tileDataStartOffset = startOffset; - retVal = 0; - - switch (win->config->textMode) - { - case 2: - retVal = InitVariableWidthFontTileData(win, startOffset); - break; - case 1: - switch (win->config->fontNum) - { - case 0: - case 3: - retVal = LoadFixedWidthFont(win, startOffset); - break; - case 1: - case 2: - retVal = LoadFixedWidthFont_Font1Latin(win, startOffset); - break; - case 4: - case 5: - retVal = LoadFixedWidthFont_Font4Latin(win, startOffset); - break; - case 6: - retVal = LoadFixedWidthFont_Braille(win, startOffset); - break; - } - break; - } - - return retVal; -} - -static u16 InitVariableWidthFontTileData(struct Window *win, u16 startOffset) -{ - u8 *buffer; - - win->tileDataStartOffset = startOffset; - win->tileDataOffset = 2; - buffer = win->tileData + 32 * win->tileDataStartOffset; - CpuFastFill(0, buffer, 32); - ApplyColors_UnshadowedFont(sBlankTile, (u32 *)(buffer + 32), win->config->foregroundColor, win->config->backgroundColor); - return win->tileDataStartOffset + win->tileDataOffset + win->width * win->height; -} - -static u16 LoadFixedWidthFont(struct Window *win, u16 startOffset) -{ - s32 glyph; - u8 *buffer = win->tileData + 32 * startOffset; - for (glyph = 0; glyph < 256; glyph++) - { - LoadFixedWidthGlyph(win, glyph, buffer); - buffer += 64; - } - return 2 * glyph; -} - -static u16 LoadFixedWidthFont_Font1Latin(struct Window *win, u16 startOffset) -{ - s32 i; - u8 *buffer = win->tileData + 32 * startOffset; - for (i = 0; i < 256; i++) - { - ApplyColors_UnshadowedFont(&sFont1LatinGlyphs[8 * i], (u32 *)buffer, win->foregroundColor, win->backgroundColor); - buffer += 32; - } - return i; -} - -static u16 LoadFixedWidthFont_Font4Latin(struct Window *win, u16 startOffset) -{ - s32 i; - u8 *buffer = win->tileData + 32 * startOffset; - for (i = 0; i < 256; i++) - { - ApplyColors_ShadowedFont(&gFont4LatinGlyphs[8 * i], buffer, win->foregroundColor, win->shadowColor, win->backgroundColor); - buffer += 32; - } - return i; -} - -static u16 LoadFixedWidthFont_Braille(struct Window *win, u16 startOffset) -{ - s32 i; - u8 *buffer = win->tileData + 32 * startOffset; - for (i = 0; i < 256; i++) - { - ApplyColors_UnshadowedFont(&sBrailleGlyphs[8 * i], (u32 *)buffer, win->foregroundColor, win->backgroundColor); - buffer += 32; - } - return i; -} - -u32 MultistepInitWindowTileData(struct Window *win, u16 startOffset) -{ - u32 retVal; - sMultistepLoadFont_Window = win; - sMultistepLoadFont_Index = 0; - sMultistepLoadFont_StartOffset = startOffset; - win->tileDataStartOffset = startOffset; - retVal = 0; - - switch (win->config->textMode) - { - case 2: - retVal = InitVariableWidthFontTileData(win, startOffset); - break; - case 1: - retVal = 256; - if (win->config->fontNum == 0 - || win->config->fontNum == 3) - retVal *= 2; - break; - } - - return retVal; -} - -bool32 MultistepLoadFont(void) -{ - bool32 retVal = TRUE; - - if (sMultistepLoadFont_Window->config->textMode == 1) - { - s32 i; - - for (i = sMultistepLoadFont_Index; i < sMultistepLoadFont_Index + 16; i++) - MultistepLoadFont_LoadGlyph(sMultistepLoadFont_Window, sMultistepLoadFont_StartOffset, i); - - sMultistepLoadFont_Index += 16; - - if (sMultistepLoadFont_Index < 256) - retVal = FALSE; - } - - return retVal; -} - -static void MultistepLoadFont_LoadGlyph(struct Window *win, u16 startOffset, u8 glyph) -{ - u8 *buffer; - - switch (win->config->fontNum) - { - case 0: - case 3: - buffer = win->tileData + 32 * startOffset + 64 * glyph; - LoadFixedWidthGlyph(win, glyph, buffer); - break; - case 1: - case 2: - buffer = win->tileData + 32 * (glyph + startOffset); - ApplyColors_UnshadowedFont( - &sFont1LatinGlyphs[8 * glyph], - (u32 *)buffer, - win->foregroundColor, - win->backgroundColor); - break; - case 4: - case 5: - buffer = win->tileData + 32 * (glyph + startOffset); - ApplyColors_ShadowedFont( - &gFont4LatinGlyphs[8 * glyph], - buffer, - win->foregroundColor, - win->shadowColor, - win->backgroundColor); - break; - } -} - -void EmptyFunc(void) -{ -} - -void InitWindowFromConfig(struct Window *win, const struct WindowConfig *winConfig) -{ - *win = sDefaultWindow; - win->config = (struct WindowConfig *)winConfig; - win->textMode = winConfig->textMode; - win->spacing = winConfig->spacing; - win->fontNum = winConfig->fontNum; - win->paletteNum = winConfig->paletteNum; - win->tilemapLeft = winConfig->tilemapLeft; - win->tilemapTop = winConfig->tilemapTop; - win->width = winConfig->width; - win->height = winConfig->height; - win->tileData = winConfig->tileData; - win->tilemap = winConfig->tilemap; - InitColors(win); - SetBackgroundColor(win, winConfig->backgroundColor); - SetShadowColor(win, winConfig->shadowColor); - SetForegroundColor(win, winConfig->foregroundColor); -} - -void InitWindow(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top) -{ - struct WindowConfig *winConfig = win->config; - win->textMode = winConfig->textMode; - win->fontNum = winConfig->fontNum; - win->language = GAME_LANGUAGE; - win->paletteNum = winConfig->paletteNum; - win->win_field_B = 0; - win->win_field_C = 0; - win->delayCounter = 0; - win->spacing = winConfig->spacing; - win->win_field_F = 0; - win->tilemapLeft = winConfig->tilemapLeft; - win->tilemapTop = winConfig->tilemapTop; - win->width = winConfig->width; - win->height = winConfig->height; - win->text = text; - win->textIndex = 0; - win->tileDataStartOffset = tileDataStartOffset; - win->tileDataOffset = 0; - win->left = 8 * left; - win->cursorX = 0; - win->top = 8 * top; - win->cursorY = 0; - win->state = WIN_STATE_BEGIN; - win->downArrowCounter = 0; - win->tileData = winConfig->tileData; - win->tilemap = winConfig->tilemap; - InitColors(win); - SetBackgroundColor(win, winConfig->backgroundColor); - SetShadowColor(win, winConfig->shadowColor); - SetForegroundColor(win, winConfig->foregroundColor); -} - -void sub_8002E4C(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u16 top, u32 a6) -{ - u8 val; - - InitWindow(win, text, tileDataStartOffset, 0, 0); - win->left = left; - win->top = top; - val = 0; - if (a6) - val = 255; - win->win_field_F = val; - if (val) - ClipLeft(win); -} - -void sub_8002E90(struct Window *win, const u8 *text) -{ - win->state = WIN_STATE_NORMAL; - win->text = text; - win->textIndex = 0; - win->downArrowCounter = 0; - win->win_field_B = -1; - win->win_field_C = 0; - win->delayCounter = 0; -} - -void sub_8002EB0(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top) -{ - gMain.watchedKeysMask = A_BUTTON | B_BUTTON; - gMain.watchedKeysPressed = 0; - sWaitType = 0; - sLineLength = 26; - InitWindow(win, text, tileDataStartOffset, left, top); - win->win_field_B = -1; - if (win->textMode == 0) - { - u16 val = GetCursorTileNum(win, 0, 0); - u8 *buffer = win->tileData + 32 * val; - ApplyColors_UnshadowedFont(sBlankTile, (u32 *)buffer, win->backgroundColor, win->backgroundColor); - ApplyColors_UnshadowedFont(&sFont1LatinGlyphs[8 * 0x6E], (u32 *)(buffer + 32), win->foregroundColor, win->backgroundColor); - win->tileDataOffset = 2; - } -} - -u8 sub_8002F44(struct Window *win) -{ - while (win->state) - { - if (win->state == WIN_STATE_NEWLINE) - { - AddToCursorY(win, 16); - win->cursorX = 0; - if (win->win_field_F) - ClipLeft(win); - win->state = WIN_STATE_NORMAL; - } - else if (win->state == WIN_STATE_PLACEHOLDER) - { - sub_8002FA0(win, GetExpandedPlaceholder(win->text[win->textIndex++])); - } - - InterpretText(win); - } - return 1; -} - -static u8 sub_8002FA0(struct Window *win, const u8 *text) -{ - u8 retVal; - u8 savedLanguage = win->language; - const u8 *savedText = win->text; - u16 savedTextIndex = win->textIndex; - win->text = text; - win->textIndex = 0; - win->state = WIN_STATE_NORMAL; - retVal = sub_8002F44(win); - win->text = savedText; - win->textIndex = savedTextIndex; - win->state = WIN_STATE_NORMAL; - win->language = savedLanguage; - return retVal; -} - -static u8 InterpretText(struct Window *win) -{ - u8 c = win->text[win->textIndex++]; - - switch (c) - { - case 0xFF: - ClipRight(win); - win->state = WIN_STATE_END; - return 0; - case 0xFD: - win->state = WIN_STATE_PLACEHOLDER; - return 2; - case 0xFE: - ClipRight(win); - win->state = WIN_STATE_NEWLINE; - return 2; - case 0xFB: - DrawInitialDownArrow(win); - win->state = WIN_STATE_PARAGRAPH; - return 2; - case 0xFA: - DrawInitialDownArrow(win); - win->state = WIN_STATE_NEWLINE_WAIT; - return 2; - case 0xFC: - return HandleExtCtrlCode(win); - } - - sPrintGlyphFuncs[win->textMode](win, c); - return 1; -} - -static u8 HandleExtCtrlCode(struct Window *win) -{ - return sExtCtrlCodeFuncs[win->text[win->textIndex++]](win); -} - -static u8 ExtCtrlCode_Nop(struct Window *win) -{ - return 2; -} - -static u8 ExtCtrlCode_ForegroundColor(struct Window *win) -{ - SetForegroundColor(win, win->text[win->textIndex++]); - return 2; -} - -static u8 ExtCtrlCode_BackgroundColor(struct Window *win) -{ - SetBackgroundColor(win, win->text[win->textIndex++]); - return 2; -} - -static u8 ExtCtrlCode_ShadowColor(struct Window *win) -{ - SetShadowColor(win, win->text[win->textIndex++]); - return 2; -} - -static u8 ExtCtrlCode_AllColors(struct Window *win) -{ - SetForegroundColor(win, win->text[win->textIndex++]); - SetBackgroundColor(win, win->text[win->textIndex++]); - SetShadowColor(win, win->text[win->textIndex++]); - return 2; -} - -static u8 ExtCtrlCode_Palette(struct Window *win) -{ - win->paletteNum = win->text[win->textIndex++]; - return 2; -} - -static u8 ExtCtrlCode_Font(struct Window *win) -{ - win->fontNum = win->text[win->textIndex++]; - return 2; -} - -static u8 ExtCtrlCode_DefaultFont(struct Window *win) -{ - win->fontNum = win->config->fontNum; - return 2; -} - -static u8 ExtCtrlCode_Pause(struct Window *win) -{ - ClipRight(win); - win->state = WIN_STATE_PAUSE; - win->delayCounter = win->text[win->textIndex++]; - return 2; -} - -static u8 ExtCtrlCode_WaitButton(struct Window *win) -{ - ClipRight(win); - win->state = WIN_STATE_WAIT_BUTTON; - return 2; -} - -static u8 ExtCtrlCode_WaitSound(struct Window *win) -{ - ClipRight(win); - win->state = WIN_STATE_WAIT_SOUND; - return 2; -} - -static u8 ExtCtrlCode_PlayBGM(struct Window *win) -{ - u16 loByte = win->text[win->textIndex++]; - u16 hiByte = win->text[win->textIndex++] << 8; - PlayBGM(loByte | hiByte); - return 2; -} - -static u8 ExtCtrlCode_Escape(struct Window *win) -{ - sPrintGlyphFuncs[win->textMode](win, win->text[win->textIndex++]); - return 1; -} - -u8 ExtCtrlCode_Nop2(struct Window *win) -{ - return 1; -} - -static u8 ExtCtrlCode_SetCursorY(struct Window *win) -{ - ClipRight(win); - AddToCursorY(win, 8 * win->text[win->textIndex++]); - return 1; -} - -static u8 ExtCtrlCode_ClearWindowTextLines(struct Window *win) -{ - ClearWindowTextLines(win); - return 2; -} - -static u8 ExtCtrlCode_PlaySE(struct Window *win) -{ - u16 loByte = win->text[win->textIndex++]; - u16 hiByte = win->text[win->textIndex++] << 8; - PlaySE(loByte | hiByte); - return 2; -} - -static void DrawSpace(struct Window *win) -{ - if (win->textMode == 1 || (win->left + win->cursorX) & 7 || win->spacing <= 7) - { - sPrintGlyphFuncs[win->textMode](win, 0); - } - else - { - u32 val = sGlyphBuffer.background; - u16 index = GetCursorTileNum(win, 0, 0); - u32 *buffer = (u32 *)(win->tileData + 32 * index); - buffer[0] = val; - buffer[1] = val; - buffer[2] = val; - buffer[3] = val; - buffer[4] = val; - buffer[5] = val; - buffer[6] = val; - buffer[7] = val; - index = GetCursorTileNum(win, 0, 1); - buffer = (u32 *)(win->tileData + 32 * index); - buffer[0] = val; - buffer[1] = val; - buffer[2] = val; - buffer[3] = val; - buffer[4] = val; - buffer[5] = val; - buffer[6] = val; - buffer[7] = val; - UpdateTilemap(win, 1); - AddToCursorX(win, 8); - } -} - -static void sub_8003344(struct Window *win, u8 newX) -{ - u8 savedSpacing = win->spacing; - - if (newX - win->cursorX <= 8) - win->spacing = newX - win->cursorX; - else - win->spacing = 8 - ((win->left + win->cursorX) & 7); - - while (win->cursorX < newX) - { - s32 spacing; - DrawSpace(win); - spacing = newX - win->cursorX; - if (spacing >= 8) - spacing = 8; - win->spacing = spacing; - } - - win->spacing = savedSpacing; -} - -static u8 ExtCtrlCode_Skip(struct Window *win) -{ - sub_8003344(win, win->cursorX + win->text[win->textIndex++]); - return 1; -} - -static u8 ExtCtrlCode_SetCursorX(struct Window *win) -{ - ClipRight(win); - SetCursorX(win, win->text[win->textIndex++]); - return 1; -} - -static u8 ExtCtrlCode_SkipTo(struct Window *win) -{ - sub_8003344(win, win->text[win->textIndex++]); - return 1; -} - -static u8 ExtCtrlCode_Spacing(struct Window *win) -{ - win->spacing = win->text[win->textIndex++]; - return 2; -} - -static u8 ExtCtrlCode_Japanese(struct Window *win) -{ - win->language = LANGUAGE_JAPANESE; - return 2; -} - -static u8 ExtCtrlCode_Latin(struct Window *win) -{ - win->language = GAME_LANGUAGE; - return 2; -} - -u8 sub_8003418(struct Window *win) -{ - u8 retVal = 1; - while (win->state) - { - if (win->state == WIN_STATE_NEWLINE) - { - AddToCursorY(win, 16); - win->cursorX = 0; - if (win->win_field_F) - ClipLeft(win); - win->state = WIN_STATE_NORMAL; - } - if (InterpretText(win) == 1) - { - retVal = 0; - break; - } - } - return retVal; -} - -u8 sub_8003460(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top) -{ - InitWindow(win, text, tileDataStartOffset, left, top); - return sub_8002F44(win); -} - -u8 sub_8003490(struct Window *win, u8 c, u16 tileDataStartOffset, u8 left, u8 top) -{ - u8 retVal; - u8 text[2]; - text[0] = c; - text[1] = EOS; - InitWindow(win, text, tileDataStartOffset, left, top); - retVal = InterpretText(win); - ClipRight(win); - return retVal; -} - -void sub_80034D4(u8 *tileData, const u8 *text) -{ - sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6C74, tileData, text); -} - -u8 sub_80034EC(u8 *str) -{ - return GetStringWidthGivenWindowConfig((struct WindowConfig *)&gWindowConfig_81E6C74, str); -} - -u8 *sub_8003504(u8 *dest, s32 value, u8 alignAmount, u8 alignType) -{ - sTempWindow.config = (struct WindowConfig *)&gWindowConfig_81E6C74; - InitWindow(&sTempWindow, 0, 0, 0, 0); - return AlignInt2(&sTempWindow, dest, value, alignAmount, alignType); -} - -u8 *sub_8003558(u8 *dest, const u8 *src, u8 alignAmount, u8 alignType) -{ - sTempWindow.config = (struct WindowConfig *)&gWindowConfig_81E6C74; - InitWindow(&sTempWindow, src, 0, 0, 0); - return AlignString(&sTempWindow, dest, src, alignAmount, alignType); -} - -u8 sub_80035AC(struct Window *win) -{ - sWaitType = 0; - return UpdateWindowText(win); -} - -static u8 UpdateWindowText(struct Window *win) -{ - switch (win->state) - { - case WIN_STATE_WAIT_BUTTON: - if (PlayerCanInterruptWait(win)) - { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - PlaySE(SE_SELECT); - } - else - { - return 0; - } - } - else - { - win->delayCounter--; - if (win->delayCounter) - return 0; - } - win->state = WIN_STATE_NORMAL; - return 0; - case WIN_STATE_INTERRUPTIBLE_PAUSE: - if (PlayerCanInterruptWait(win) && (gMain.heldKeys & (A_BUTTON | B_BUTTON)) && gMain.watchedKeysPressed == TRUE) - { - win->delayCounter = 0; - win->state = WIN_STATE_NORMAL; - break; - } - case WIN_STATE_PAUSE: - if (win->delayCounter) - { - win->delayCounter--; - if (win->delayCounter) - return 0; - } - - win->state = WIN_STATE_NORMAL; - break; - case WIN_STATE_PARAGRAPH: - if (!WaitWithDownArrow(win)) - return 0; - ClearWindowTextLines(win); - win->state = WIN_STATE_NORMAL; - BLOCK_CROSS_JUMP - return 0; - case WIN_STATE_NEWLINE_WAIT: - if (!WaitWithDownArrow(win)) - return 0; - ScrollWindowTextLines(win); - win->state = WIN_STATE_NORMAL; - BLOCK_CROSS_JUMP - return 0; - case WIN_STATE_PLACEHOLDER: - win->textIndex++; - win->state = WIN_STATE_NORMAL; - break; - case WIN_STATE_NEWLINE: - ScrollWindowTextLines(win); - win->state = WIN_STATE_NORMAL; - BLOCK_CROSS_JUMP - return 0; - case WIN_STATE_BEGIN: - ClearWindowTextLines(win); - break; - case WIN_STATE_WAIT_SOUND: - if (IsSEPlaying()) - return 0; - win->state = WIN_STATE_NORMAL; - break; - case WIN_STATE_END: - return 1; - case WIN_STATE_NORMAL: - break; - default: - win->state = WIN_STATE_END; - return 1; - } - - InterpretText(win); - - switch (win->state) - { - case WIN_STATE_END: - return 1; - case WIN_STATE_WAIT_BUTTON: - case WIN_STATE_PARAGRAPH: - case WIN_STATE_NEWLINE_WAIT: - if (PlayerCanInterruptWait(win)) - return 0; - win->delayCounter = 60; - break; - case WIN_STATE_PAUSE: - case WIN_STATE_NEWLINE: - case WIN_STATE_WAIT_SOUND: - break; - default: - win->state = WIN_STATE_INTERRUPTIBLE_PAUSE; - win->delayCounter = GetTextDelay(win); - } - - return 0; -} - -#if defined(ENGLISH) -#define SUB_800374C_LINE_LENGTH 26 -#elif defined(GERMAN) -#define SUB_800374C_LINE_LENGTH 27 -#endif - -u8 sub_800374C(struct Window *win) -{ - u8 retVal; - - sWaitType = 1; - sLineLength = SUB_800374C_LINE_LENGTH; - retVal = UpdateWindowText(win); - sLineLength = 26; - sWaitType = 0; - return retVal; -} - -u8 sub_8003778(struct Window *win) -{ - u8 retVal; - - sWaitType = 2; - sLineLength = 26; - retVal = UpdateWindowText(win); - sWaitType = 0; - return retVal; -} - -u8 sub_80037A0(struct Window *win) -{ - u8 retVal; - - sWaitType = 3; - sLineLength = 17; - retVal = UpdateWindowText(win); - sLineLength = 26; - return retVal; -} - -u32 sub_80037C8(struct Window *win, u8 lineLength) -{ - u8 retVal; - - sWaitType = 0; - sLineLength = lineLength; - retVal = UpdateWindowText(win); - sLineLength = 26; - return retVal; -} - -static void PrintGlyph_TextMode0(struct Window *win, u32 glyph) -{ - AddToCursorX(win, DrawGlyph_TextMode0(win, glyph)); - if (win->win_field_B) - ClipRight(win); -} - -static u8 DrawGlyph_TextMode0(struct Window *win, u32 glyph) -{ - u8 pixelsWidth = GetGlyphWidth(win, glyph); - u32 tilesWidth = DrawGlyphTiles(win, glyph, pixelsWidth); - UpdateTilemap(win, tilesWidth); - return pixelsWidth; -} - -static void PrintGlyph_TextMode1(struct Window *win, u32 glyph) -{ - sWriteGlyphTilemapFuncs[win->fontNum](win, glyph); - win->cursorX += 8; -} - -static void WriteGlyphTilemap_Font0_Font3(struct Window *win, u32 glyph) -{ - s16 val = win->tileDataStartOffset + 2 * glyph; - WriteGlyphTilemap(win, val, val + 1); -} - -static void WriteGlyphTilemap_Font1_Font4(struct Window *win, u32 glyph) -{ - u32 val = glyph * 2; - WriteGlyphTilemap( - win, - win->tileDataStartOffset + sFontType1Map[val], - win->tileDataStartOffset + sFontType1Map[val + 1]); -} - -static void WriteGlyphTilemap_Font2_Font5(struct Window *win, u32 glyph) -{ - WriteGlyphTilemap( - win, - win->tileDataStartOffset + 212, - win->tileDataStartOffset + glyph); -} - -static void WriteGlyphTilemap_Font6(struct Window *win, u32 glyph) -{ - u32 val = glyph * 2; - WriteGlyphTilemap( - win, - win->tileDataStartOffset + sFontType3Map[val], - win->tileDataStartOffset + sFontType3Map[val + 1]); -} - -static void PrintGlyph_TextMode2(struct Window *win, u32 glyph) -{ - u8 width = GetGlyphWidth(win, glyph); - DrawGlyph_TextMode2(win, glyph); - AddToCursorX(win, width); - if (win->win_field_B) - ClipRight(win); -} - -static void DrawGlyph_TextMode2(struct Window *win, u32 glyph) -{ - u8 pixelsWidth = GetGlyphWidth(win, glyph); - u32 tilesWidth = DrawGlyphTiles(win, glyph, pixelsWidth); - UpdateTilemap(win, tilesWidth); -} - -static void LoadFixedWidthGlyph(struct Window *win, u32 glyph, u8 *dest) -{ - u8 *upperTile; - u8 *lowerTile; - - GetGlyphTilePointers(win->fontNum, win->language, glyph, &upperTile, &lowerTile); - - switch (win->fontNum) - { - case 0: - case 1: - case 2: - case 6: - ApplyColors_UnshadowedFont(upperTile, (u32 *)dest, win->foregroundColor, win->backgroundColor); - ApplyColors_UnshadowedFont(lowerTile, (u32 *)(dest + 32), win->foregroundColor, win->backgroundColor); - break; - case 3: - case 4: - case 5: - ApplyColors_ShadowedFont(upperTile, dest, win->foregroundColor, win->shadowColor, win->backgroundColor); - ApplyColors_ShadowedFont(lowerTile, dest + 32, win->foregroundColor, win->shadowColor, win->backgroundColor); - break; - } -} - -static void WriteGlyphTilemap(struct Window *win, u16 upperTileNum, u16 lowerTileNum) -{ - u16 *buffer = GetCursorTilemapPointer(win); - if (buffer) - { - u16 palette = (win->paletteNum << 12); - buffer[0] = upperTileNum | palette; - buffer[32] = lowerTileNum | palette; - } -} - -static void GetGlyphTilePointers(u8 fontNum, u8 language, u16 glyph, u8 **upperTilePtr, u8 **lowerTilePtr) -{ - u16 index; - const struct Font *font; - - if (language == LANGUAGE_JAPANESE) - language = 0; - else - language = 7; - - font = &sFonts[language + fontNum]; - - switch (font->type) - { - case 0: - *upperTilePtr = font->glyphs + glyph * font->glyphSize; - *lowerTilePtr = *upperTilePtr + font->lowerTileOffset; - break; - case 1: - index = 2 * glyph; - *upperTilePtr = font->glyphs + sFontType1Map[index] * font->glyphSize; - *lowerTilePtr = font->glyphs + sFontType1Map[index + 1] * font->glyphSize; - break; - case 2: - *upperTilePtr = font->glyphs + 212 * font->glyphSize; - *lowerTilePtr = font->glyphs + glyph * font->glyphSize; - break; - case 3: - index = 2 * glyph; - *upperTilePtr = font->glyphs + sFontType3Map[index] * font->glyphSize; - *lowerTilePtr = font->glyphs + sFontType3Map[index + 1] * font->glyphSize; - break; - case 4: - *upperTilePtr = font->glyphs - + (glyph & 0xFFF0) * font->glyphSize - + (((glyph &= 0xF) * font->glyphSize) >> 1); - *lowerTilePtr = *upperTilePtr + font->lowerTileOffset; - break; - } -} - -static u16 *GetCursorTilemapPointer(struct Window *win) -{ - u16 *ptr = NULL; - if (win->tilemap) - { - u8 x = ((win->left + win->cursorX) >> 3) + win->tilemapLeft; - u8 y = ((win->top + win->cursorY) >> 3) + win->tilemapTop; - ptr = &win->tilemap[(y * 32) + x]; - } - return ptr; -} - -static void ApplyColors_UnshadowedFont(const u8 *src, u32 *dest, u8 foreground, u8 background) -{ - u32 a[2]; - s32 i; - const u8 *srcRows = src; - - a[0] = background; - a[1] = foreground; - - for (i = 0; i < 8; i++) - { - u32 destRow = a[srcRows[i] & 1] - | (a[(srcRows[i] >> 1) & 1] << 4) - | (a[(srcRows[i] >> 2) & 1] << 8) - | (a[(srcRows[i] >> 3) & 1] << 12) - | (a[(srcRows[i] >> 4) & 1] << 16) - | (a[(srcRows[i] >> 5) & 1] << 20) - | (a[(srcRows[i] >> 6) & 1] << 24) - | (a[(srcRows[i] >> 7) ] << 28); - dest[i] = destRow; - } -} - -static void ApplyColors_ShadowedFont(const void *src, void *dest, u8 foreground, u8 shadow, u8 background) -{ - u32 a[0x10]; - s32 i; - const u32 *curSrc; - u32 *curDest; - u32 colorMask; - - a[0x1] = 0x1; - a[0x2] = 0x2; - a[0x3] = 0x3; - a[0x4] = 0x4; - a[0x5] = 0x5; - a[0x6] = 0x6; - a[0x7] = 0x7; - a[0x8] = 0x8; - a[0x9] = 0x9; - a[0xA] = 0xA; - a[0xB] = 0xB; - a[0xC] = 0xC; - a[0xD] = 0xD; - a[0x0] = background; - a[0xE] = shadow; - a[0xF] = foreground; - - colorMask = 0xF; - - curSrc = src; - curDest = dest; - - for (i = 7; i >= 0; i--) - { - u32 row = *curSrc++; - u32 recoloredRow = a[row & colorMask] - | (a[(row >> 4) & colorMask] << 4) - | (a[(row >> 8) & colorMask] << 8) - | (a[(row >> 12) & colorMask] << 12) - | (a[(row >> 16) & colorMask] << 16) - | (a[(row >> 20) & colorMask] << 20) - | (a[(row >> 24) & colorMask] << 24) - | (a[(row >> 28) ] << 28); - *curDest++ = recoloredRow; - } -} - -static void SetCursorX(struct Window *win, u8 x) -{ - if (win->textMode == 0 && ((win->left + win->cursorX) & 7)) - win->tileDataOffset += 2; - win->cursorX = x; -} - -static void AddToCursorX(struct Window *win, u8 deltaX) -{ - if (win->textMode == 0) - { - u8 x = win->cursorX; - win->cursorX += deltaX; - if (((win->left + win->cursorX) & 0xF8) != ((win->left + x) & 0xF8)) - win->tileDataOffset += 2; - } - else - { - win->cursorX += deltaX; - } -} - -static void AddToCursorY(struct Window *win, u8 deltaY) -{ - if (win->textMode == 0 && ((win->left + win->cursorX) & 7)) - win->tileDataOffset += 2; - win->cursorY += deltaY; -} - -static void EraseAtCursor(struct Window *win) -{ - switch (win->textMode) - { - case 0: - case 2: - DrawGlyphTiles(win, 0, 8); - break; - case 1: - sWriteGlyphTilemapFuncs[win->fontNum](win, 0); - break; - } -} - -static void ClipLeft(struct Window *win) -{ - u32 pixel = win->left & 7; - if (win->textMode != 1 && pixel) - { - const u32 *masks = sGlyphMasks[8][pixel]; - u32 outsideMask = masks[0]; - u32 insideMask = ~outsideMask; - u32 outside = sGlyphBuffer.background & outsideMask; - u16 tileNum = GetCursorTileNum(win, 0, 0); - u32 *buffer = (u32 *)(win->tileData + 32 * tileNum); - buffer[0] = (buffer[0] & insideMask) | outside; - buffer[1] = (buffer[1] & insideMask) | outside; - buffer[2] = (buffer[2] & insideMask) | outside; - buffer[3] = (buffer[3] & insideMask) | outside; - buffer[4] = (buffer[4] & insideMask) | outside; - buffer[5] = (buffer[5] & insideMask) | outside; - buffer[6] = (buffer[6] & insideMask) | outside; - buffer[7] = (buffer[7] & insideMask) | outside; - tileNum = GetCursorTileNum(win, 0, 1); - buffer = (u32 *)(win->tileData + 32 * tileNum); - buffer[0] = (buffer[0] & insideMask) | outside; - buffer[1] = (buffer[1] & insideMask) | outside; - buffer[2] = (buffer[2] & insideMask) | outside; - buffer[3] = (buffer[3] & insideMask) | outside; - buffer[4] = (buffer[4] & insideMask) | outside; - buffer[5] = (buffer[5] & insideMask) | outside; - buffer[6] = (buffer[6] & insideMask) | outside; - buffer[7] = (buffer[7] & insideMask) | outside; - } -} - -static void ClipRight(struct Window *win) -{ - register u8 cursorX asm("r0") = win->cursorX; - u8 left = win->left; - u32 pixel = (cursorX + left) & 7; - if (win->textMode != 1 && pixel) - { - const u32 *masks = sGlyphMasks[8 - pixel][pixel]; - u32 insideMask = masks[0]; - u32 outside = (sGlyphBuffer.background & ~insideMask); - u16 tileNum = GetCursorTileNum(win, 0, 0); - u32 *buffer = (u32 *)(win->tileData + 32 * tileNum); - buffer[0] = (buffer[0] & insideMask) | outside; - buffer[1] = (buffer[1] & insideMask) | outside; - buffer[2] = (buffer[2] & insideMask) | outside; - buffer[3] = (buffer[3] & insideMask) | outside; - buffer[4] = (buffer[4] & insideMask) | outside; - buffer[5] = (buffer[5] & insideMask) | outside; - buffer[6] = (buffer[6] & insideMask) | outside; - buffer[7] = (buffer[7] & insideMask) | outside; - tileNum = GetCursorTileNum(win, 0, 1); - buffer = (u32 *)(win->tileData + 32 * tileNum); - buffer[0] = (buffer[0] & insideMask) | outside; - buffer[1] = (buffer[1] & insideMask) | outside; - buffer[2] = (buffer[2] & insideMask) | outside; - buffer[3] = (buffer[3] & insideMask) | outside; - buffer[4] = (buffer[4] & insideMask) | outside; - buffer[5] = (buffer[5] & insideMask) | outside; - buffer[6] = (buffer[6] & insideMask) | outside; - buffer[7] = (buffer[7] & insideMask) | outside; - UpdateTilemap(win, 1); - } -} - -static void InitColors(struct Window *win) -{ - u32 i; - - win->backgroundColor = 0; - win->shadowColor = 14; - win->foregroundColor = 15; - - for (i = 0; i < 16; i++) - sGlyphBuffer.colors[i] = i; -} - -static void SetBackgroundColor(struct Window *win, u8 color) -{ - u32 val1; - u32 val2; - u32 val3; - win->backgroundColor = color; - sGlyphBuffer.colors[0] = color; - val1 = color | (color << 4); - val2 = val1 | (val1 << 8); - val3 = val2 | (val2 << 16); - sGlyphBuffer.background = val3; -} - -static void SetShadowColor(struct Window *win, u8 color) -{ - win->shadowColor = color; - sGlyphBuffer.colors[14] = color; -} - -static void SetForegroundColor(struct Window *win, u8 color) -{ - win->foregroundColor = color; - sGlyphBuffer.colors[15] = color; -} - -static u8 GetTextDelay(struct Window *win) -{ - if (!PlayerCanInterruptWait(win)) - return 3; - - return sTextSpeedDelays[gSaveBlock2.optionsTextSpeed]; -} - -static bool8 PlayerCanInterruptWait(struct Window *win) -{ - bool8 retVal = TRUE; - - switch (sWaitType) - { - case 2: - retVal = FALSE; - break; - case 3: - retVal = gIsLinkContest ? FALSE : TRUE; - break; - case 1: - retVal = (gBattleTypeFlags & BATTLE_TYPE_LINK) ? FALSE : TRUE; - break; - } - - return retVal; -} - -static void ScrollWindowTextLines(struct Window *win) -{ - switch (win->textMode) - { - case 0: - ScrollWindowTextLines_TextMode0(win); - break; - case 1: - ScrollWindowTextLines_TextMode1(win); - break; - case 2: - ScrollWindowTextLines_TextMode2(win); - break; - } -} - -static void ScrollWindowTextLines_TextMode0(struct Window *win) -{ - if (win->cursorY == 0) - { - win->tileDataOffset = 2 * sLineLength + 2; - win->cursorX = 0; - win->cursorY += 16; - } - else - { - if (win->win_field_C & 2) - win->tileDataOffset = 2 * sLineLength + 2; - else - win->tileDataOffset = 2; - win->win_field_C = win->win_field_C ^ 2; - win->cursorX = 0; - DoScroll_TextMode0(win, sLineLength); - } -} - -static void DoScroll_TextMode0(struct Window *win, u16 lineLength) -{ - u16 *buffer = win->tilemap; - u32 val1 = 32 * (win->top >> 3); - u32 val2 = (win->left >> 3); - u16 fill; - buffer += val1 + val2; - fill = (win->paletteNum << 12) | GetBlankTileNum(win); - CpuCopy16(buffer + 64, buffer, lineLength * 2); - CpuCopy16(buffer + 96, buffer + 32, lineLength * 2); - CpuFill16(fill, buffer + 64, lineLength * 2); - CpuFill16(fill, buffer + 96, lineLength * 2); -} - -static void ScrollWindowTextLines_TextMode1(struct Window *win) -{ - if (win->cursorY == 0) - { - win->cursorX = 0; - win->cursorY += 16; - } - else - { - win->win_field_C ^= 2; - win->cursorX = 0; - DoScroll_TextMode1(win, sLineLength); - } -} - -static void DoScroll_TextMode1(struct Window *win, u16 lineLength) -{ - u16 *buffer = GetCursorTilemapPointer(win); - u16 *dest = buffer - 32; - u16 fill = (win->paletteNum << 12) | GetBlankTileNum(win); - CpuCopy16(buffer + 32, dest, lineLength * 2); - CpuCopy16(buffer + 64, buffer, lineLength * 2); - CpuFill16(fill, buffer + 32, lineLength * 2); - CpuFill16(fill, buffer + 64, lineLength * 2); -} - -static void ScrollWindowTextLines_TextMode2(struct Window *win) -{ - if (win->cursorY == 0) - { - win->cursorX = 0; - win->cursorY += 16; - } - else - { - win->win_field_C ^= 2; - win->cursorX = 0; - DoScroll_TextMode2(win, sLineLength); - } -} - -static void DoScroll_TextMode2(struct Window *win, u8 lineLength) -{ - u8 i; - u8 *buf1 = win->tileData + 32 * GetCursorTileNum(win, 0, -2); - u8 *buf2 = win->tileData + 32 * GetCursorTileNum(win, 0, 0); - u8 *buf4; - u16 *buf3; - u16 a[4]; - - CpuFastCopy(buf2, buf1, 32 * lineLength); - CpuFastFill(sGlyphBuffer.background, buf2, 32 * lineLength); - buf4 = buf2 + 32 * win->width; - CpuFastCopy(buf4, buf1 + 32 * win->width, 32 * lineLength); - CpuFastFill(sGlyphBuffer.background, buf4, 32 * lineLength); - - buf3 = GetCursorTilemapPointer(win) - 64; - - a[0] = (win->tileDataStartOffset + win->tileDataOffset - + ((win->top >> 3) * win->width) - + (win->left >> 3)) - | (win->paletteNum << 12); - a[1] = a[0] + win->width; - a[2] = a[1] + win->width; - a[3] = a[2] + win->width; - - for (i = 0; i < lineLength; i++) - { - buf3[0] = a[0]++; - buf3[32] = a[1]++; - buf3[64] = a[2]++; - buf3[96] = a[3]++; - buf3++; - } -} - -void ClearWindowTextLines(struct Window *win) -{ - switch (win->textMode) - { - case 0: - ClearWindowTextLines_TextMode0_TextMode1(win, sLineLength); - win->tileDataOffset = 2; - break; - case 1: - ClearWindowTextLines_TextMode0_TextMode1(win, sLineLength); - break; - case 2: - ClearWindowTextLines_TextMode2(win, sLineLength); - break; - } -} - -static void ClearWindowTextLines_TextMode0_TextMode1(struct Window *win, u8 lineLength) -{ - u8 i; - u16 *buffer; - u16 fill; - - win->cursorX = 0; - win->cursorY = 0; - win->win_field_C = 0; - - buffer = GetCursorTilemapPointer(win); - fill = GetBlankTileNum(win) | (win->paletteNum << 12); - - for (i = 0; i < 4; i++) - { - u8 j; - for (j = 0; j < lineLength; j++) - buffer[j] = fill; - buffer += 32; - } -} - -static void ClearWindowTextLines_TextMode2(struct Window *win, u8 lineLength) -{ - u8 *buffer; - - win->cursorX = 0; - win->cursorY = 0; - win->win_field_C = 0; - - buffer = win->tileData + 32 * GetCursorTileNum(win, 0, 0); - CpuFastFill(sGlyphBuffer.background, buffer, 32 * lineLength); - buffer += 32 * win->width; - CpuFastFill(sGlyphBuffer.background, buffer, 32 * lineLength); - buffer += 32 * win->width; - CpuFastFill(sGlyphBuffer.background, buffer, 32 * lineLength); - buffer += 32 * win->width; - CpuFastFill(sGlyphBuffer.background, buffer, 32 * lineLength); -} - -static void DrawDownArrow(struct Window *win) -{ - if (PlayerCanInterruptWait(win)) - { - const u32 *downArrowTiles = &sDownArrowTiles[((win->downArrowCounter & 0x0F00) >> 8) * 16]; - - switch (win->textMode) - { - case 1: - { - u8 *buffer; - u16 tileNum = win->tileDataStartOffset + 254; - if (win->fontNum == 0 || win->fontNum == 3) - tileNum *= 2; - buffer = win->tileData + 32 * tileNum; - ApplyColors_ShadowedFont(downArrowTiles, buffer, win->foregroundColor, win->shadowColor, win->backgroundColor); - ApplyColors_ShadowedFont(downArrowTiles + 8, buffer + 32, win->foregroundColor, win->shadowColor, win->backgroundColor); - WriteGlyphTilemap(win, tileNum, tileNum + 1); - break; - } - case 0: - case 2: - { - struct GlyphTileInfo glyphTileInfo; - glyphTileInfo.textMode = win->textMode; - glyphTileInfo.startPixel = (win->left + win->cursorX) & 7; - if (glyphTileInfo.startPixel != 0) - { - u8 *upperTile; - u8 *lowerTile; - GetGlyphTilePointers(win->fontNum, win->language, 0, &upperTile, &lowerTile); - glyphTileInfo.width = 8 - glyphTileInfo.startPixel; - glyphTileInfo.src = upperTile; - glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 1, 0)); - glyphTileInfo.colors = sGlyphBuffer.colors; - DrawGlyphTile_ShadowedFont(&glyphTileInfo); - glyphTileInfo.src = lowerTile; - glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 1, 1)); - DrawGlyphTile_ShadowedFont(&glyphTileInfo); - } - glyphTileInfo.width = 8; - glyphTileInfo.src = (u8 *)downArrowTiles; - glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 0)); - glyphTileInfo.colors = sGlyphBuffer.colors; - DrawGlyphTile_ShadowedFont(&glyphTileInfo); - glyphTileInfo.src += 32; - glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 1)); - DrawGlyphTile_ShadowedFont(&glyphTileInfo); - if (glyphTileInfo.startPixel != 0) - UpdateTilemap(win, 2); - else - UpdateTilemap(win, 1); - break; - } - } - } -} - -static u8 WaitWithDownArrow(struct Window *win) -{ - u8 retVal = 1; - - if (!PlayerCanInterruptWait(win)) - { - win->delayCounter--; - if (!win->delayCounter) - { - TryEraseDownArrow(win); - } - else - { - DrawMovingDownArrow(win); - retVal = 0; - } - } - else - { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - PlaySE(SE_SELECT); - TryEraseDownArrow(win); - } - else - { - DrawMovingDownArrow(win); - retVal = 0; - } - } - - return retVal; -} - -static void DrawInitialDownArrow(struct Window *win) -{ - win->downArrowCounter = 0; - DrawDownArrow(win); -} - -static void DrawMovingDownArrow(struct Window *win) -{ - u16 downArrowPos = (win->downArrowCounter & 0x0F00) >> 8; - u16 wait = win->downArrowCounter & 0x000F; - u16 newVal; - - wait++; - - if (wait == 6) - { - wait = 0; - downArrowPos++; - if (downArrowPos > 3) - downArrowPos = 0; - win->downArrowCounter = downArrowPos << 8; - DrawDownArrow(win); - } - - newVal = downArrowPos << 8; - newVal |= wait; - - win->downArrowCounter = newVal; -} - -static void TryEraseDownArrow(struct Window *win) -{ - win->downArrowCounter = 0; - if (PlayerCanInterruptWait(win) == TRUE) - EraseAtCursor(win); -} - -u16 GetWindowTilemapEntry(struct Window *win, u8 x, u8 y) -{ - u16 *tilemap = win->tilemap; - return tilemap[32 * y + x]; -} - -void DrawWindowRect(struct Window *win, u16 tilemapEntry, u8 left, u8 top, u8 right, u8 bottom) -{ - u8 i; - u16 *buffer = &win->tilemap[top * 32]; - - for (i = left; i <= right; i++) - buffer[i] = tilemapEntry; - - for (i = top + 1; i < bottom - 1; i++) - { - buffer += 32; - buffer[left] = tilemapEntry; - buffer[right] = tilemapEntry; - } - - if (top != bottom) - { - buffer += 32; - for (i = left; i <= right; i++) - buffer[i] = tilemapEntry; - } -} - -void DrawWindowRect_DefaultPalette(struct Window *win, u16 tileNum, u8 left, u8 top, u8 right, u8 bottom) -{ - DrawWindowRect(win, (win->paletteNum << 12) | tileNum, left, top, right, bottom); -} - -void FillWindowRect(struct Window *win, u16 tilemapEntry, u8 left, u8 top, u8 right, u8 bottom) -{ - u16 *buffer = &win->tilemap[top * 32]; - while (top++ <= bottom) - { - u8 j; - for (j = left; j <= right; j++) - buffer[j] = tilemapEntry; - buffer += 32; - } -} - -void FillWindowRect_DefaultPalette(struct Window *win, u16 tileNum, u8 left, u8 top, u8 right, u8 bottom) -{ - FillWindowRect(win, (win->paletteNum << 12) | tileNum, left, top, right, bottom); -} - -void ZeroFillWindowRect(struct Window *win, u8 left, u8 top, u8 right, u8 bottom) -{ - FillWindowRect_DefaultPalette(win, 0, left, top, right, bottom); -} - -void FillWindowRectWithBlankTile(struct Window *win, u8 left, u8 top, u8 right, u8 bottom) -{ - u16 tileNum = GetBlankTileNum(win); - FillWindowRect_DefaultPalette(win, tileNum, left, top, right, bottom); -} - -static u16 GetBlankTileNum(struct Window *win) -{ - u16 retVal = win->tileDataStartOffset; - - switch (win->textMode) - { - case 0: - break; - case 2: - retVal++; - break; - case 1: - switch (win->fontNum) - { - case 1: - case 2: - case 4: - case 5: - retVal += 212; - case 0: - case 3: - case 6: - break; - default: - retVal = 0; - } - break; - } - - return retVal; -} - -static s32 sub_80048D8(struct Window *win, u8 x, u8 y) -{ - win->cursorX = x; - win->cursorY = y & 0xF8; -} - -static u8 GetGlyphWidth(struct Window *win, u32 glyph) -{ - u8 width = 8; - -#ifdef BUGFIX_GLYPHWIDTH - if (win->language != LANGUAGE_JAPANESE) -#else - if (win->language == LANGUAGE_ENGLISH) -#endif - { - width = win->spacing; - if (!win->spacing) - { - switch (win->fontNum) - { - case 3: - width = sFont3Widths[glyph]; - break; - case 4: - case 5: - width = sFont4Widths[sFontType1Map[2 * glyph + 1]]; - break; - case 0: - width = sFont0Widths[glyph]; - break; - case 1: - case 2: - width = sFont1Widths[sFontType1Map[2 * glyph + 1]]; - break; - case 6: - width = 8; - break; - default: - width = 8; - } - } - } - - return width; -} - -u8 GetExtCtrlCodeLength(u8 code) -{ - u8 length = 0; - if (code <= 0x16) - length = sExtCtrlCodeLengths[code]; - return length; -} - -u8 *AlignInt1(struct Window *win, u8 *dest, s32 value, u8 alignAmount, u8 alignType) -{ - u8 temp[16]; - u8 width; - switch (alignType) - { - case 0: - ConvertIntToDecimalString(temp, value); - dest = StringCopy(dest, temp); - dest[0] = 0xFC; - dest[1] = 19; - dest[2] = alignAmount; - dest += 3; - *dest = 0xFF; - break; - case 1: - ConvertIntToDecimalString(temp, value); - width = GetStringWidth(win, temp); - if (alignAmount > width) - { - dest[0] = 0xFC; - dest[1] = 19; - dest[2] = alignAmount - width; - dest += 3; - } - dest = StringCopy(dest, temp); - break; - case 2: - ConvertIntToDecimalString(temp, value); - width = GetStringWidth(win, temp); - if (alignAmount > width) - { - dest[0] = 0xFC; - dest[1] = 19; - dest[2] = (alignAmount - width) / 2; - dest += 3; - } - dest = StringCopy(dest, temp); - if (alignAmount > width) - { - dest[0] = 0xFC; - dest[1] = 19; - dest[2] = alignAmount; - dest += 3; - *dest = 0xFF; - } - break; - } - return dest; -} - -u8 *AlignInt2(struct Window *win, u8 *dest, s32 value, u8 alignAmount, u8 alignType) -{ - u8 temp[16]; - u8 width; - switch (alignType) - { - case 0: - ConvertIntToDecimalString(temp, value); - width = GetStringWidth(win, temp); - dest = StringCopy(dest, temp); - dest[0] = 0xFC; - dest[1] = 17; - dest[2] = alignAmount - width; - dest += 3; - *dest = 0xFF; - break; - case 1: - ConvertIntToDecimalString(temp, value); - width = GetStringWidth(win, temp); - if (alignAmount > width) - { - dest[0] = 0xFC; - dest[1] = 17; - dest[2] = alignAmount - width; - dest += 3; - } - dest = StringCopy(dest, temp); - break; - case 2: - ConvertIntToDecimalString(temp, value); - width = GetStringWidth(win, temp); - if (alignAmount > width) - { - dest[0] = 0xFC; - dest[1] = 17; - dest[2] = (alignAmount - width) / 2; - dest += 3; - } - dest = StringCopy(dest, temp); - if (alignAmount > width) - { - dest[0] = 0xFC; - dest[1] = 17; - dest[2] = (alignAmount - width) / 2; - dest += 3; - *dest = 0xFF; - } - break; - } - return dest; -} - -u8 *AlignString(struct Window *win, u8 *dest, const u8 *src, u8 alignAmount, u8 alignType) -{ - u8 width; - switch (alignType) - { - case 0: - dest = StringCopy(dest, src); - dest[0] = 0xFC; - dest[1] = 19; - dest[2] = alignAmount; - dest += 3; - *dest = 0xFF; - break; - case 1: - width = GetStringWidth(win, src); - if (alignAmount > width) - { - dest[0] = 0xFC; - dest[1] = 19; - dest[2] = alignAmount - width; - dest += 3; - } - dest = StringCopy(dest, src); - break; - case 2: - width = GetStringWidth(win, src); - if (alignAmount > width) - { - dest[0] = 0xFC; - dest[1] = 19; - dest[2] = (alignAmount - width) / 2; - dest += 3; - } - dest = StringCopy(dest, src); - if (alignAmount > width) - { - dest[0] = 0xFC; - dest[1] = 19; - dest[2] = alignAmount; - dest += 3; - *dest = 0xFF; - } - break; - } - return dest; -} - -u8 GetStringWidth(struct Window *win, const u8 *s) -{ - u8 width = 0; - u8 savedFontNum = win->fontNum; - u8 savedCharset = win->language; - u8 savedSpacing = win->spacing; - s32 i = 0; - - while (s[i] != 0xFF) - { - u8 c = s[i]; - switch (c) - { - case 0xFD: - { - u8 temp; - i++; - temp = win->language; - width += GetStringWidth(win, GetExpandedPlaceholder(s[i])); - win->language = temp; - i++; - break; - } - case 0xFC: - i++; - switch (s[i]) - { - case 6: - win->fontNum = s[i + 1]; - break; - case 7: - win->fontNum = win->config->fontNum; - break; - case 0x11: - width += s[i + 1]; - break; - case 0x12: - case 0x13: - if (width < s[i + 1]) - width = s[i + 1]; - break; - case 0x14: - win->spacing = s[i + 1]; - break; - case 0x15: - win->language = LANGUAGE_JAPANESE; - break; - case 0x16: - win->language = GAME_LANGUAGE; - break; - } - - i += GetExtCtrlCodeLength(s[i]); - break; - default: - i++; - width += GetGlyphWidth(win, c); - } - } - - win->spacing = savedSpacing; - win->language = savedCharset; - win->fontNum = savedFontNum; - - return width; -} - -u8 sub_8004D04(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u16 top, u32 a6) -{ - sub_8002E4C(win, text, tileDataStartOffset, left, top, a6); - return sub_8002F44(win); -} - -u8 sub_8004D38(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top) -{ - u8 width = GetStringWidth(win, text); - InitWindow(win, text, tileDataStartOffset, left - ((u32)(width + 7) >> 3), top); - EraseAtCursor(win); - width &= 7; - if (width) - width = 8 - width; - sub_80048D8(win, width, 0); - return sub_8002F44(win); -} - -u8 sub_8004DB0(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top, u16 a6) -{ - register u32 val asm("r5") = (u8)((a6 >> 1) - (GetStringWidth(win, text) >> 1)); - left += (val >> 3); - InitWindow(win, text, tileDataStartOffset, left, top); - EraseAtCursor(win); - sub_80048D8(win, val & 7, 0); - return sub_8002F44(win); -} - -u8 sub_8004E24(struct Window *win) -{ - return win->paletteNum; -} - -void sub_8004E28(struct Window *win, u8 *foreground, u8 *background, u8 *shadow) -{ - *foreground = win->foregroundColor; - *background = win->backgroundColor; - *shadow = win->shadowColor; -} - -void sub_8004E3C(struct WindowConfig *winConfig, u8 *tileData, const u8 *text) -{ - sTempWindow.config = winConfig; - InitWindow(&sTempWindow, text, 0, 0, 0); - sTempWindow.tileData = tileData; - sub_8002F44(&sTempWindow); -} - -u8 GetStringWidthGivenWindowConfig(struct WindowConfig *winConfig, const u8 *s) -{ - sTempWindow.config = winConfig; - InitWindow(&sTempWindow, s, 0, 0, 0); - return GetStringWidth(&sTempWindow, s); -} - -void ConvertInternationalString(u8 *s, u8 language) -{ - if (language == LANGUAGE_JAPANESE) - { - u8 i; - - StripExtCtrlCodes(s); - i = StringLength(s); - s[i++] = 0xFC; - s[i++] = 22; - s[i++] = 0xFF; - - i--; - - while (i != (u8)-1) - { - s[i + 2] = s[i]; - i--; - } - - s[0] = 0xFC; - s[1] = 21; - } -} - -void StripExtCtrlCodes(u8 *str) -{ - u16 srcIndex = 0; - u16 destIndex = 0; - while (str[srcIndex] != 0xFF) - { - if (str[srcIndex] == 0xFC) - { - srcIndex++; - srcIndex += GetExtCtrlCodeLength(str[srcIndex]); - } - else - { - str[destIndex++] = str[srcIndex++]; - } - } - str[destIndex] = 0xFF; -} - -static const u8 *SkipExtCtrlCode(const u8 *s) -{ - while (*s == 0xFC) - { - s++; - s += GetExtCtrlCodeLength(*s); - } - - return s; -} - -s32 StringCompareWithoutExtCtrlCodes(const u8 *str1, const u8 *str2) -{ - s32 retVal = 0; - - while (1) - { - str1 = SkipExtCtrlCode(str1); - str2 = SkipExtCtrlCode(str2); - - if (*str1 > *str2) - break; - - if (*str1 < *str2) - { - retVal = -1; - if (*str2 == 0xFF) - retVal = 1; - } - - if (*str1 == 0xFF) - return retVal; - - str1++; - str2++; - } - - retVal = 1; - - if (*str1 == 0xFF) - retVal = -1; - - return retVal; -} - -u8 sub_8004FD0(struct Window *win, u8 *dest, const u8 *src, u16 tileDataStartOffset, u8 left, u16 top, u8 width, u32 a8) -{ - u8 newlineCount = 0; - u8 extCtrlCodeLength; - u8 *start; - u32 endsWithoutNewline; - - if (dest == NULL) - dest = gStringVar4; - - start = dest; - endsWithoutNewline = FALSE; - - while (*src != 0xFF) - { - switch (*src) - { - default: - *dest = *src; - dest++; - src++; - endsWithoutNewline = TRUE; - break; - case 0xFC: - extCtrlCodeLength = GetExtCtrlCodeLength(src[1]) + 1; - memcpy(dest, src, extCtrlCodeLength); - dest += extCtrlCodeLength; - src += extCtrlCodeLength; - break; - case 0xFE: - dest[0] = 0xFC; - dest[1] = 19; - dest[2] = width; - dest[3] = 0xFE; - dest += 4; - src++; - newlineCount++; - endsWithoutNewline = FALSE; - break; - } - } - - dest[0] = 0xFC; - dest[1] = 19; - dest[2] = width; - dest[3] = 0xFF; - - if (endsWithoutNewline) - newlineCount++; - - sub_8002E4C(win, start, tileDataStartOffset, left, top, a8); - sub_8002F44(win); - - return newlineCount; -} - -static s32 DrawGlyphTile_UnshadowedFont(struct GlyphTileInfo *glyphTileInfo) -{ - struct GlyphBuffer *glyphBuffer = &sGlyphBuffer; - u32 colors[2]; - u32 *buffer = glyphTileInfo->dest; - const u32 *masks = sGlyphMasks[glyphTileInfo->width][glyphTileInfo->startPixel]; - u32 mask1 = masks[0] | masks[2]; - - glyphBuffer->pixelRows[0] = buffer[0] & mask1; - glyphBuffer->pixelRows[1] = buffer[1] & mask1; - glyphBuffer->pixelRows[2] = buffer[2] & mask1; - glyphBuffer->pixelRows[3] = buffer[3] & mask1; - glyphBuffer->pixelRows[4] = buffer[4] & mask1; - glyphBuffer->pixelRows[5] = buffer[5] & mask1; - glyphBuffer->pixelRows[6] = buffer[6] & mask1; - glyphBuffer->pixelRows[7] = buffer[7] & mask1; - - if (glyphTileInfo->startPixel + glyphTileInfo->width > 8) - { - u32 mask2 = masks[1]; - if (glyphTileInfo->textMode == 2) - { - glyphBuffer->pixelRows[8] = buffer[8] & mask2; - glyphBuffer->pixelRows[9] = buffer[9] & mask2; - glyphBuffer->pixelRows[10] = buffer[10] & mask2; - glyphBuffer->pixelRows[11] = buffer[11] & mask2; - glyphBuffer->pixelRows[12] = buffer[12] & mask2; - glyphBuffer->pixelRows[13] = buffer[13] & mask2; - glyphBuffer->pixelRows[14] = buffer[14] & mask2; - glyphBuffer->pixelRows[15] = buffer[15] & mask2; - } - else - { - glyphBuffer->pixelRows[8] = buffer[16] & mask2; - glyphBuffer->pixelRows[9] = buffer[17] & mask2; - glyphBuffer->pixelRows[10] = buffer[18] & mask2; - glyphBuffer->pixelRows[11] = buffer[19] & mask2; - glyphBuffer->pixelRows[12] = buffer[20] & mask2; - glyphBuffer->pixelRows[13] = buffer[21] & mask2; - glyphBuffer->pixelRows[14] = buffer[22] & mask2; - glyphBuffer->pixelRows[15] = buffer[23] & mask2; - } - } - - colors[0] = glyphTileInfo->colors[0]; - colors[1] = glyphTileInfo->colors[15]; - - sShiftGlyphTileUnshadowedFuncs[glyphTileInfo->width](glyphBuffer, glyphTileInfo->src, colors, glyphTileInfo->startPixel); - - buffer[0] = glyphBuffer->pixelRows[0]; - buffer[1] = glyphBuffer->pixelRows[1]; - buffer[2] = glyphBuffer->pixelRows[2]; - buffer[3] = glyphBuffer->pixelRows[3]; - buffer[4] = glyphBuffer->pixelRows[4]; - buffer[5] = glyphBuffer->pixelRows[5]; - buffer[6] = glyphBuffer->pixelRows[6]; - buffer[7] = glyphBuffer->pixelRows[7]; - - if (glyphTileInfo->startPixel + glyphTileInfo->width > 8) - { - if (glyphTileInfo->textMode != 2) - buffer += 8; - buffer[8] = glyphBuffer->pixelRows[8]; - buffer[9] = glyphBuffer->pixelRows[9]; - buffer[10] = glyphBuffer->pixelRows[10]; - buffer[11] = glyphBuffer->pixelRows[11]; - buffer[12] = glyphBuffer->pixelRows[12]; - buffer[13] = glyphBuffer->pixelRows[13]; - buffer[14] = glyphBuffer->pixelRows[14]; - buffer[15] = glyphBuffer->pixelRows[15]; - } - - return (glyphTileInfo->startPixel + glyphTileInfo->width) / 8; -} - -static void ShiftGlyphTile_UnshadowedFont_Width0(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *a3, u8 startPixel) -{ -} - -static void ShiftGlyphTile_UnshadowedFont_Width1(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u8 i; - for (i = 0; i < 8; i++) - { - u32 val = colors[src[i] >> 7]; - u32 *dest = &glyphBuffer->pixelRows[i]; - dest[0] |= val << shiftAmount->left; - dest[8] |= val >> shiftAmount->right; - } -} - -static void ShiftGlyphTile_UnshadowedFont_Width2(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u8 i; - for (i = 0; i < 8; i++) - { - u32 val = (colors[(src[i] >> 7) & 1] << 0) - | (colors[(src[i] >> 6) & 1] << 4); - u32 *dest = &glyphBuffer->pixelRows[i]; - dest[0] |= val << shiftAmount->left; - dest[8] |= val >> shiftAmount->right; - } -} - -static void ShiftGlyphTile_UnshadowedFont_Width3(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u8 i; - for (i = 0; i < 8; i++) - { - // XXX: why 4? - u32 val = (colors[(src[i] >> 7) & 1] << 0) - | (colors[(src[i] >> 6) & 1] << 4) - | (colors[(src[i] >> 5) & 1] << 8) - | (colors[(src[i] >> 4) & 1] << 12); - u32 *dest = &glyphBuffer->pixelRows[i]; - dest[0] |= val << shiftAmount->left; - dest[8] |= val >> shiftAmount->right; - } -} - -static void ShiftGlyphTile_UnshadowedFont_Width4(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u8 i; - for (i = 0; i < 8; i++) - { - u32 val = (colors[(src[i] >> 7) & 1] << 0) - | (colors[(src[i] >> 6) & 1] << 4) - | (colors[(src[i] >> 5) & 1] << 8) - | (colors[(src[i] >> 4) & 1] << 12); - u32 *dest = &glyphBuffer->pixelRows[i]; - dest[0] |= val << shiftAmount->left; - dest[8] |= val >> shiftAmount->right; - } -} - -static void ShiftGlyphTile_UnshadowedFont_Width5(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u8 i; - for (i = 0; i < 8; i++) - { - u32 val = (colors[(src[i] >> 7) & 1] << 0) - | (colors[(src[i] >> 6) & 1] << 4) - | (colors[(src[i] >> 5) & 1] << 8) - | (colors[(src[i] >> 4) & 1] << 12) - | (colors[(src[i] >> 3) & 1] << 16); - u32 *dest = &glyphBuffer->pixelRows[i]; - dest[0] |= val << shiftAmount->left; - dest[8] |= val >> shiftAmount->right; - } -} - -static void ShiftGlyphTile_UnshadowedFont_Width6(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u8 i; - for (i = 0; i < 8; i++) - { - u32 val = (colors[(src[i] >> 7) & 1] << 0) - | (colors[(src[i] >> 6) & 1] << 4) - | (colors[(src[i] >> 5) & 1] << 8) - | (colors[(src[i] >> 4) & 1] << 12) - | (colors[(src[i] >> 3) & 1] << 16) - | (colors[(src[i] >> 2) & 1] << 20); - u32 *dest = &glyphBuffer->pixelRows[i]; - dest[0] |= val << shiftAmount->left; - dest[8] |= val >> shiftAmount->right; - } -} - -static void ShiftGlyphTile_UnshadowedFont_Width7(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u8 i; - for (i = 0; i < 8; i++) - { - u32 val = (colors[(src[i] >> 7) & 1] << 0) - | (colors[(src[i] >> 6) & 1] << 4) - | (colors[(src[i] >> 5) & 1] << 8) - | (colors[(src[i] >> 4) & 1] << 12) - | (colors[(src[i] >> 3) & 1] << 16) - | (colors[(src[i] >> 2) & 1] << 20) - | (colors[(src[i] >> 1) & 1] << 24); - u32 *dest = &glyphBuffer->pixelRows[i]; - dest[0] |= val << shiftAmount->left; - dest[8] |= val >> shiftAmount->right; - } -} - -static void ShiftGlyphTile_UnshadowedFont_Width8(struct GlyphBuffer *glyphBuffer, u8 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u8 i; - for (i = 0; i < 8; i++) - { - u32 val = (colors[(src[i] >> 7) & 1] << 0) - | (colors[(src[i] >> 6) & 1] << 4) - | (colors[(src[i] >> 5) & 1] << 8) - | (colors[(src[i] >> 4) & 1] << 12) - | (colors[(src[i] >> 3) & 1] << 16) - | (colors[(src[i] >> 2) & 1] << 20) - | (colors[(src[i] >> 1) & 1] << 24) - | (colors[(src[i] >> 0) & 1] << 28); - u32 *dest = &glyphBuffer->pixelRows[i]; - dest[0] |= val << shiftAmount->left; - dest[8] |= val >> shiftAmount->right; - } -} - -static s32 DrawGlyphTile_ShadowedFont(struct GlyphTileInfo *glyphTileInfo) -{ - struct GlyphBuffer *glyphBuffer = &sGlyphBuffer; - u32 *buffer = glyphTileInfo->dest; - const u32 *masks = sGlyphMasks[glyphTileInfo->width][glyphTileInfo->startPixel]; - u32 mask1 = masks[0] | masks[2]; - - glyphBuffer->pixelRows[0] = buffer[0] & mask1; - glyphBuffer->pixelRows[1] = buffer[1] & mask1; - glyphBuffer->pixelRows[2] = buffer[2] & mask1; - glyphBuffer->pixelRows[3] = buffer[3] & mask1; - glyphBuffer->pixelRows[4] = buffer[4] & mask1; - glyphBuffer->pixelRows[5] = buffer[5] & mask1; - glyphBuffer->pixelRows[6] = buffer[6] & mask1; - glyphBuffer->pixelRows[7] = buffer[7] & mask1; - - if (glyphTileInfo->startPixel + glyphTileInfo->width > 8) - { - u32 mask2 = masks[1]; - if (glyphTileInfo->textMode == 2) - { - glyphBuffer->pixelRows[8] = buffer[8] & mask2; - glyphBuffer->pixelRows[9] = buffer[9] & mask2; - glyphBuffer->pixelRows[10] = buffer[10] & mask2; - glyphBuffer->pixelRows[11] = buffer[11] & mask2; - glyphBuffer->pixelRows[12] = buffer[12] & mask2; - glyphBuffer->pixelRows[13] = buffer[13] & mask2; - glyphBuffer->pixelRows[14] = buffer[14] & mask2; - glyphBuffer->pixelRows[15] = buffer[15] & mask2; - } - else - { - glyphBuffer->pixelRows[8] = buffer[16] & mask2; - glyphBuffer->pixelRows[9] = buffer[17] & mask2; - glyphBuffer->pixelRows[10] = buffer[18] & mask2; - glyphBuffer->pixelRows[11] = buffer[19] & mask2; - glyphBuffer->pixelRows[12] = buffer[20] & mask2; - glyphBuffer->pixelRows[13] = buffer[21] & mask2; - glyphBuffer->pixelRows[14] = buffer[22] & mask2; - glyphBuffer->pixelRows[15] = buffer[23] & mask2; - } - } - - sShiftGlyphTileShadowedFuncs[glyphTileInfo->width](glyphBuffer, (u32 *)glyphTileInfo->src, glyphTileInfo->colors, glyphTileInfo->startPixel); - - buffer[0] = glyphBuffer->pixelRows[0]; - buffer[1] = glyphBuffer->pixelRows[1]; - buffer[2] = glyphBuffer->pixelRows[2]; - buffer[3] = glyphBuffer->pixelRows[3]; - buffer[4] = glyphBuffer->pixelRows[4]; - buffer[5] = glyphBuffer->pixelRows[5]; - buffer[6] = glyphBuffer->pixelRows[6]; - buffer[7] = glyphBuffer->pixelRows[7]; - - if (glyphTileInfo->startPixel + glyphTileInfo->width > 8) - { - if (glyphTileInfo->textMode != 2) - buffer += 8; - buffer[8] = glyphBuffer->pixelRows[8]; - buffer[9] = glyphBuffer->pixelRows[9]; - buffer[10] = glyphBuffer->pixelRows[10]; - buffer[11] = glyphBuffer->pixelRows[11]; - buffer[12] = glyphBuffer->pixelRows[12]; - buffer[13] = glyphBuffer->pixelRows[13]; - buffer[14] = glyphBuffer->pixelRows[14]; - buffer[15] = glyphBuffer->pixelRows[15]; - } - - return (glyphTileInfo->startPixel + glyphTileInfo->width) / 8; -} - -static void ShiftGlyphTile_ShadowedFont_Width0(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) -{ -} - -static void ShiftGlyphTile_ShadowedFont_Width1(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u8 i; - for (i = 0; i < 8; i++) - { - u32 val = colors[src[i] & 0xF]; - u32 *dest = &glyphBuffer->pixelRows[i]; - dest[0] |= val << shiftAmount->left; - dest[8] |= val >> shiftAmount->right; - } -} - -static void ShiftGlyphTile_ShadowedFont_Width2(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u8 i; - for (i = 0; i < 8; i++) - { - u32 val = (colors[(src[i] >> 0) & 0xF] << 0) - | (colors[(src[i] >> 4) & 0xF] << 4); - u32 *dest = &glyphBuffer->pixelRows[i]; - dest[0] |= val << shiftAmount->left; - dest[8] |= val >> shiftAmount->right; - } -} - -static void ShiftGlyphTile_ShadowedFont_Width3(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u8 i; - for (i = 0; i < 8; i++) - { - u32 val = (colors[(src[i] >> 0) & 0xF] << 0) - | (colors[(src[i] >> 4) & 0xF] << 4) - | (colors[(src[i] >> 8) & 0xF] << 8); - u32 *dest = &glyphBuffer->pixelRows[i]; - dest[0] |= val << shiftAmount->left; - dest[8] |= val >> shiftAmount->right; - } -} - -static void ShiftGlyphTile_ShadowedFont_Width4(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u8 i; - for (i = 0; i < 8; i++) - { - u32 val = (colors[(src[i] >> 0) & 0xF] << 0) - | (colors[(src[i] >> 4) & 0xF] << 4) - | (colors[(src[i] >> 8) & 0xF] << 8) - | (colors[(src[i] >> 12) & 0xF] << 12); - u32 *dest = &glyphBuffer->pixelRows[i]; - dest[0] |= val << shiftAmount->left; - dest[8] |= val >> shiftAmount->right; - } -} - -#define SHIFT_GLYPH_WIDTH5_STEP(i) \ -val = (colors[(src[i] >> 0) & 0xF] << 0) \ - | (colors[(src[i] >> 4) & 0xF] << 4) \ - | (colors[(src[i] >> 8) & 0xF] << 8) \ - | (colors[(src[i] >> 12) & 0xF] << 12) \ - | (colors[(src[i] >> 16) & 0xF] << 16); \ -glyphBuffer->pixelRows[i] |= val << shiftAmount->left; \ -glyphBuffer->pixelRows[i + 8] |= val >> shiftAmount->right; \ - -static void ShiftGlyphTile_ShadowedFont_Width5(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u32 val; - SHIFT_GLYPH_WIDTH5_STEP(0) - SHIFT_GLYPH_WIDTH5_STEP(1) - SHIFT_GLYPH_WIDTH5_STEP(2) - SHIFT_GLYPH_WIDTH5_STEP(3) - SHIFT_GLYPH_WIDTH5_STEP(4) - SHIFT_GLYPH_WIDTH5_STEP(5) - SHIFT_GLYPH_WIDTH5_STEP(6) - SHIFT_GLYPH_WIDTH5_STEP(7) -} - -#define SHIFT_GLYPH_WIDTH6_STEP(i) \ -val = (colors[(src[i] >> 0) & 0xF] << 0) \ - | (colors[(src[i] >> 4) & 0xF] << 4) \ - | (colors[(src[i] >> 8) & 0xF] << 8) \ - | (colors[(src[i] >> 12) & 0xF] << 12) \ - | (colors[(src[i] >> 16) & 0xF] << 16) \ - | (colors[(src[i] >> 20) & 0xF] << 20); \ -glyphBuffer->pixelRows[i] |= val << shiftAmount->left; \ -glyphBuffer->pixelRows[i + 8] |= val >> shiftAmount->right; \ - -static void ShiftGlyphTile_ShadowedFont_Width6(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u32 val; - SHIFT_GLYPH_WIDTH6_STEP(0) - SHIFT_GLYPH_WIDTH6_STEP(1) - SHIFT_GLYPH_WIDTH6_STEP(2) - SHIFT_GLYPH_WIDTH6_STEP(3) - SHIFT_GLYPH_WIDTH6_STEP(4) - SHIFT_GLYPH_WIDTH6_STEP(5) - SHIFT_GLYPH_WIDTH6_STEP(6) - SHIFT_GLYPH_WIDTH6_STEP(7) -} - -#define SHIFT_GLYPH_WIDTH7_STEP(i) \ -val = (colors[(src[i] >> 0) & 0xF] << 0) \ - | (colors[(src[i] >> 4) & 0xF] << 4) \ - | (colors[(src[i] >> 8) & 0xF] << 8) \ - | (colors[(src[i] >> 12) & 0xF] << 12) \ - | (colors[(src[i] >> 16) & 0xF] << 16) \ - | (colors[(src[i] >> 20) & 0xF] << 20) \ - | (colors[(src[i] >> 24) & 0xF] << 24); \ -glyphBuffer->pixelRows[i] |= val << shiftAmount->left; \ -glyphBuffer->pixelRows[i + 8] |= val >> shiftAmount->right; \ - -static void ShiftGlyphTile_ShadowedFont_Width7(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u32 val; - SHIFT_GLYPH_WIDTH7_STEP(0) - SHIFT_GLYPH_WIDTH7_STEP(1) - SHIFT_GLYPH_WIDTH7_STEP(2) - SHIFT_GLYPH_WIDTH7_STEP(3) - SHIFT_GLYPH_WIDTH7_STEP(4) - SHIFT_GLYPH_WIDTH7_STEP(5) - SHIFT_GLYPH_WIDTH7_STEP(6) - SHIFT_GLYPH_WIDTH7_STEP(7) -} - -#define SHIFT_GLYPH_WIDTH8_STEP(i) \ -val = (colors[(src[i] >> 0) & 0xF] << 0) \ - | (colors[(src[i] >> 4) & 0xF] << 4) \ - | (colors[(src[i] >> 8) & 0xF] << 8) \ - | (colors[(src[i] >> 12) & 0xF] << 12) \ - | (colors[(src[i] >> 16) & 0xF] << 16) \ - | (colors[(src[i] >> 20) & 0xF] << 20) \ - | (colors[(src[i] >> 24) & 0xF] << 24) \ - | (colors[(src[i] >> 28) ] << 28); \ -glyphBuffer->pixelRows[i] |= val << shiftAmount->left; \ -glyphBuffer->pixelRows[i + 8] |= val >> shiftAmount->right; \ - -static void ShiftGlyphTile_ShadowedFont_Width8(struct GlyphBuffer *glyphBuffer, u32 *src, u32 *colors, u8 startPixel) -{ - const struct ShiftAmount *shiftAmount = &sGlyphShiftAmounts[startPixel]; - u32 val; - SHIFT_GLYPH_WIDTH8_STEP(0) - SHIFT_GLYPH_WIDTH8_STEP(1) - SHIFT_GLYPH_WIDTH8_STEP(2) - SHIFT_GLYPH_WIDTH8_STEP(3) - SHIFT_GLYPH_WIDTH8_STEP(4) - SHIFT_GLYPH_WIDTH8_STEP(5) - SHIFT_GLYPH_WIDTH8_STEP(6) - SHIFT_GLYPH_WIDTH8_STEP(7) -} - -static s32 DrawGlyphTiles(struct Window *win, u32 glyph, u32 glyphWidth) -{ - struct GlyphTileInfo glyphTileInfo; - u8 *upperTile; - u8 *lowerTile; - s32 retVal = 0; - - GetGlyphTilePointers(win->fontNum, win->language, glyph, &upperTile, &lowerTile); - glyphTileInfo.textMode = win->textMode; - glyphTileInfo.startPixel = (win->left + win->cursorX) & 7; - glyphTileInfo.width = glyphWidth; - glyphTileInfo.src = upperTile; - glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 0)); - glyphTileInfo.colors = sGlyphBuffer.colors; - - switch (win->fontNum) - { - case 0: - case 1: - case 2: - case 6: - DrawGlyphTile_UnshadowedFont(&glyphTileInfo); - glyphTileInfo.src = lowerTile; - glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 1)); - retVal = DrawGlyphTile_UnshadowedFont(&glyphTileInfo); - break; - case 3: - case 4: - case 5: - DrawGlyphTile_ShadowedFont(&glyphTileInfo); - glyphTileInfo.src = lowerTile; - glyphTileInfo.dest = (u32 *)(win->tileData + 32 * GetCursorTileNum(win, 0, 1)); - retVal = DrawGlyphTile_ShadowedFont(&glyphTileInfo); - break; - } - - return retVal; -} - -static void UpdateTilemap(struct Window *win, u32 tilesWidth) -{ - u16 *tilemap = GetCursorTilemapPointer(win); - if (tilesWidth && tilemap) - { - u16 paletteNum = (win->paletteNum << 12); - u16 upperLeftTileNum = GetCursorTileNum(win, 0, 0); - u16 lowerLeftTileNum = GetCursorTileNum(win, 0, 1); - tilemap[0] = upperLeftTileNum | paletteNum; - tilemap[32] = lowerLeftTileNum | paletteNum; - if (tilesWidth == 2) - { - u16 upperRightTileNum = GetCursorTileNum(win, 1, 0); - u16 lowerRightTileNum = GetCursorTileNum(win, 1, 1); - tilemap[1] = upperRightTileNum | paletteNum; - tilemap[33] = lowerRightTileNum | paletteNum; - } - } -} - -static u16 GetCursorTileNum(struct Window *win, u32 xOffset, u32 yOffset) -{ - u16 index; - - if (win->textMode == 2) - index = win->tileDataStartOffset - + win->tileDataOffset - + (((win->top + win->cursorY) >> 3) + yOffset) * win->width - + (((win->left + win->cursorX) >> 3) + xOffset); - else - index = win->tileDataStartOffset + win->tileDataOffset + 2 * xOffset + yOffset; - - return index; -} diff --git a/src/text_window.c b/src/text_window.c deleted file mode 100644 index 9a88789d1..000000000 --- a/src/text_window.c +++ /dev/null @@ -1,184 +0,0 @@ -#include "global.h" -#include "text_window.h" -#include "main.h" -#include "palette.h" -#include "text.h" - -#define STD_MSG_BOX_LEFT 0 -#define STD_MSG_BOX_TOP 14 -#define STD_MSG_BOX_WIDTH 26 -#define STD_MSG_BOX_HEIGHT 4 - -static void LoadTextWindowTiles(u8, void *); -static void LoadTextWindowPalette(u8, u8); -static void DrawTextWindowInternal(u16 *dest, u16 baseTileNum, u8 left, u8 top, u8 right, u8 bottom); -static u16 GetMessageBoxTilemapEntry(u16 tilemapEntry, u8 x, u8 y, u8 width, u8 height); -static void DrawMessageBox(struct Window *win, u8 left, u8 top, u8 width, u8 height); - -static u16 sTextWindowBaseTileNum; -static u16 sMessageBoxBaseTileNum; - -extern const struct FrameGraphics gUnknown_083761F0[20]; - -extern const u16 gMessageBoxTilemap[5][7]; -extern const u8 gMessageBox_Gfx[]; - -u16 SetTextWindowBaseTileNum(u16 baseTileNum) -{ - sTextWindowBaseTileNum = baseTileNum; - return baseTileNum + 9; -} - -void LoadTextWindowGraphics(struct Window *win) -{ - u8 *tileData = win->config->tileData + TILE_SIZE_4BPP * sTextWindowBaseTileNum; - LoadTextWindowTiles(gSaveBlock2.optionsWindowFrameType, tileData); - LoadTextWindowPalette(gSaveBlock2.optionsWindowFrameType, 0xE); -} - -void LoadTextWindowGraphics_OverridePalSlot(struct Window *win, u8 palSlot) -{ - u8 *tileData = win->config->tileData + TILE_SIZE_4BPP * sTextWindowBaseTileNum; - LoadTextWindowTiles(gSaveBlock2.optionsWindowFrameType, tileData); - LoadTextWindowPalette(gSaveBlock2.optionsWindowFrameType, palSlot); -} - -void LoadTextWindowGraphics_OverrideFrameType(struct Window *win, u8 frameType) -{ - u8 *tileData = win->config->tileData + TILE_SIZE_4BPP * sTextWindowBaseTileNum; - LoadTextWindowTiles(frameType, tileData); - LoadTextWindowPalette(frameType, 0xE); -} - -void DrawTextWindow(struct Window *win, u8 left, u8 top, u8 right, u8 bottom) -{ - DrawTextWindowInternal(win->config->tilemap, sTextWindowBaseTileNum, left, top, right, bottom); -} - -const struct FrameGraphics *GetTextWindowFrameGraphics(u8 frameType) -{ - if (frameType > 19) - return &gUnknown_083761F0[0]; - else - return &gUnknown_083761F0[frameType]; -} - -static void LoadTextWindowTiles(u8 frameType, void *dest) -{ - const struct FrameGraphics *frameGraphics = GetTextWindowFrameGraphics(frameType); - CpuFastCopy(frameGraphics->tiles, dest, 9 * TILE_SIZE_4BPP); -} - -static void LoadTextWindowPalette(u8 frameType, u8 palSlot) -{ - const struct FrameGraphics *frameGraphics = GetTextWindowFrameGraphics(frameType); - LoadPalette(frameGraphics->palette, 16 * palSlot, 0x20); -} - -static void DrawTextWindowInternal(u16 *dest, u16 baseTileNum, u8 left, u8 top, u8 right, u8 bottom) -{ - u8 x, y; - u8 startX, endX; - u8 startY, endY; - - startX = (left < right) ? left : right; - endX = (right > left) ? right : left; - - startY = (top < bottom) ? top : bottom; - endY = (bottom > top) ? bottom : top; - - dest[32 * startY + startX] = baseTileNum | 0xE000; - - for (x = startX + 1; x < endX; x++) - dest[32 * startY + x] = (baseTileNum + 1) | 0xE000; - - dest[32 * startY + endX] = (baseTileNum + 2) | 0xE000; - - for (y = startY + 1; y < endY; y++) - { - dest[32 * y + startX] = (baseTileNum + 3) | 0xE000; - - for (x = startX + 1; x < endX; x++) - dest[32 * y + x] = (baseTileNum + 4) | 0xE000; - - dest[32 * y + endX] = (baseTileNum + 5) | 0xE000; - } - - dest[32 * endY + startX] = (baseTileNum + 6) | 0xE000; - - for (x = startX + 1; x < endX; x++) - dest[32 * endY + x] = (baseTileNum + 7) | 0xE000; - - dest[32 * endY + endX] = (baseTileNum + 8) | 0xE000; -} - -u16 SetMessageBoxBaseTileNum(u16 baseTileNum) -{ - sMessageBoxBaseTileNum = baseTileNum; - return baseTileNum + 14; -} - -void unref_sub_80651DC(struct Window *win, u8 *text) -{ - sub_8002EB0(win, text, sMessageBoxBaseTileNum + 14, 2, 15); -} - -void DisplayMessageBox(struct Window *win) -{ - LoadMessageBoxTiles(win); - DrawStandardMessageBox(win); -} - -static u16 GetMessageBoxTilemapEntry(u16 baseTilemapEntry, u8 x, u8 y, u8 width, u8 height) -{ - u16 tilemapEntry = 9; - - if (y >= height) - y = y - height + 3; - else if (y > 1) - y = 2; - - if (x >= width + 2) - x = x - (width + 2) + 4; - else if (x > 2) - x = 3; - - if (x <= 6 && y <= 4) - tilemapEntry = gMessageBoxTilemap[y][x]; - - tilemapEntry += baseTilemapEntry; - - return tilemapEntry; -} - -static void DrawMessageBox(struct Window *win, u8 left, u8 top, u8 width, u8 height) -{ - u8 i, j; - u16 tilemapEntry = (win->paletteNum << 12) | sMessageBoxBaseTileNum; - u16 *tilemap = win->config->tilemap; - - for (i = 0; i < height + 2; i++) - for (j = 0; j < width + 6; j++) - tilemap[(left + j) + 32 * (top + i)] = (win->paletteNum << 12) | GetMessageBoxTilemapEntry(tilemapEntry, j, i, width, height); -} - -void DrawStandardMessageBox(struct Window *win) -{ - DrawMessageBox(win, STD_MSG_BOX_LEFT, STD_MSG_BOX_TOP, STD_MSG_BOX_WIDTH, STD_MSG_BOX_HEIGHT); -} - -void LoadMessageBoxTiles(struct Window *win) -{ - u8 *tileData = win->config->tileData; - CpuFastCopy(gMessageBox_Gfx, tileData + 32 * sMessageBoxBaseTileNum, 14 * TILE_SIZE_4BPP); -} - -void ClearStandardMessageBox(struct Window *win) -{ - u8 i; - u16 *tilemap = win->config->tilemap + (STD_MSG_BOX_TOP * 32); - u16 tilemapEntry = win->paletteNum << 12; - - for (i = 0; i < ((STD_MSG_BOX_HEIGHT + 2) * 32); i++) - tilemap[i] = tilemapEntry; -} diff --git a/src/tileset_anim.c b/src/tileset_anim.c deleted file mode 100644 index 34685381d..000000000 --- a/src/tileset_anim.c +++ /dev/null @@ -1,630 +0,0 @@ -#include "global.h" -#include "tileset_anim.h" - -extern u8 *gTilesetAnimTable_General_0[]; -extern u8 *gTilesetAnimTable_General_1[]; -extern u8 *gTilesetAnimTable_General_2[]; -extern u8 *gTilesetAnimTable_General_3[]; -extern u8 *gTilesetAnimTable_General_4[]; -extern u8 *gTilesetAnimTable_Lavaridge[]; -extern u8 *gTilesetAnimTable_Pacifidlog_0[]; -extern u8 *gTilesetAnimTable_Underwater[]; -extern u8 *gTilesetAnimTable_Pacifidlog_1[]; -extern u8 *gUnknown_0837BAE4[]; -extern u8 *gUnknown_0837BB04[]; -extern u8 *gTilesetAnimTable_Mauville_0A[]; -extern u8 *gTilesetAnimTable_Mauville_1A[]; -extern u8 *gTilesetAnimTable_Mauville_0B[]; -extern u8 *gTilesetAnimTable_Mauville_1B[]; -extern u8 *gUnknown_0837BFA4[]; -extern u8 *gTilesetAnimTable_Rustboro_0[]; -extern u8 *gTilesetAnimTable_Rustboro_1[]; -extern u8 *gTilesetAnimTable_Cave[]; -extern u8 *gUnknown_0837C93C[]; -extern u8 *gTilesetAnimTable_EverGrande[]; -extern u8 *gTilesetAnimTable_Building[]; -extern u8 *gTilesetAnimTable_SootopolisGym_0[]; -extern u8 *gTilesetAnimTable_SootopolisGym_1[]; -extern u8 *gTilesetAnimTable_EliteFour_0[]; -extern u8 *gTilesetAnimTable_EliteFour_1[]; -extern u8 *gTilesetAnimTable_MauvilleGym[]; -extern u8 *gTilesetAnimTable_BikeShop[]; - -struct Dma -{ - u8 *src; - u8 *dest; - u16 size; -}; - -EWRAM_DATA static struct Dma gTilesetAnimDmas[20] = {0}; - -static u8 gNumTilesetAnimDmas; -static u16 gTileset1AnimFrame; -static u16 gTileset1AnimLength; -static u16 gTileset2AnimFrame; -static u16 gTileset2AnimLength; -static void (*gTileset1AnimCallback)(u16); -static void (*gTileset2AnimCallback)(u16); - -static void StartTileset1Animation(void); -static void StartTileset2Animation(void); - -static void sub_8073014(u16); -static void sub_8073058(u16); - -static void sub_8073070(u16); -static void sub_8073098(u16); -static void sub_80730C0(u16); -static void sub_80730E8(u16); -static void sub_807361C(u16); - -static void sub_8073424(u16); -static void sub_80734A0(u16); -static void sub_8073514(u16); -static void sub_8073540(u16); -static void sub_80735B4(u16); -static void sub_80735E4(u16); -static void sub_80738A8(u16); -static void sub_8073600(u16); -static void sub_80738C0(u16); -static void sub_8073890(u16); -static void sub_80738EC(u16); - -static void sub_80737A4(u16, u8); -static void sub_80737E0(u16); -static void sub_8073704(u16, u8); -static void sub_8073644(u8); -static void sub_8073808(u16); -static void sub_8073830(u16, u8); -static void sub_807368C(u8); -static void sub_80736DC(u8); -static void sub_80736B4(u8); -static void sub_8073868(u16); - -static void sub_8073904(u16); -static void sub_80739C4(u16); -static void sub_807392C(u16); -static void sub_807399C(u16); -static void sub_8073974(u16); -static void sub_80739EC(u16); - -static void ClearTilesetAnimDmas(void) -{ - gNumTilesetAnimDmas = 0; - CpuFill32(0, &gTilesetAnimDmas, sizeof(gTilesetAnimDmas)); -} - -static void QueueTilesetAnimDma(u8 *src, u8 *dest, u16 size) -{ - if (gNumTilesetAnimDmas < 20) - { - gTilesetAnimDmas[gNumTilesetAnimDmas].src = src; - gTilesetAnimDmas[gNumTilesetAnimDmas].dest = dest; - gTilesetAnimDmas[gNumTilesetAnimDmas].size = size; - gNumTilesetAnimDmas++; - } -} - -void sub_8072E74(void) -{ - int i; - for (i = 0; i < gNumTilesetAnimDmas; i++) - { - DmaCopy16(3, - gTilesetAnimDmas[i].src, - gTilesetAnimDmas[i].dest, - gTilesetAnimDmas[i].size); - } - gNumTilesetAnimDmas = 0; -} - -void cur_mapheader_run_tileset_funcs_after_some_cpuset(void) -{ - ClearTilesetAnimDmas(); - StartTileset1Animation(); - StartTileset2Animation(); -} - -void sub_8072ED0(void) -{ - StartTileset2Animation(); -} - -void sub_8072EDC(void) -{ - ClearTilesetAnimDmas(); - if (++gTileset1AnimFrame >= gTileset1AnimLength) - { - gTileset1AnimFrame = 0; - } - if (++gTileset2AnimFrame >= gTileset2AnimLength) - { - gTileset2AnimFrame = 0; - } - if (gTileset1AnimCallback) - { - gTileset1AnimCallback(gTileset1AnimFrame); - } - if (gTileset2AnimCallback) - { - gTileset2AnimCallback(gTileset2AnimFrame); - } -} - -static void StartTileset1Animation(void) -{ - gTileset1AnimFrame = 0; - gTileset1AnimLength = 0; - gTileset1AnimCallback = 0; - if (gMapHeader.mapData->primaryTileset) - { - if (gMapHeader.mapData->primaryTileset->callback) - { - gMapHeader.mapData->primaryTileset->callback(); - } - } -} - -static void StartTileset2Animation(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = 0; - gTileset2AnimCallback = 0; - if (gMapHeader.mapData->secondaryTileset) - { - if (gMapHeader.mapData->secondaryTileset->callback) - { - gMapHeader.mapData->secondaryTileset->callback(); - } - } -} - -void TilesetCB_General(void) -{ - gTileset1AnimFrame = 0; - gTileset1AnimLength = 0x100; - gTileset1AnimCallback = sub_8073014; -} - -void TilesetCB_Building(void) -{ - gTileset1AnimFrame = 0; - gTileset1AnimLength = 0x100; - gTileset1AnimCallback = sub_8073058; -} - -static void sub_8073014(u16 a1) -{ - int v1; - v1 = a1 % 0x10; - if (v1 == 0) sub_8073070(a1 / 0x10); - if (v1 == 1) sub_8073098(a1 / 0x10); - if (v1 == 2) sub_80730C0(a1 / 0x10); - if (v1 == 3) sub_80730E8(a1 / 0x10); - if (v1 == 4) sub_807361C(a1 / 0x10); -} - -static void sub_8073058(u16 a1) -{ - if (a1 % 8 == 0) - { - sub_8073904(a1 / 8); - } -} - -static void sub_8073070(u16 a1) -{ - int v1; - v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_General_0[v1], (u8 *)(BG_VRAM + 0x3f80), 0x80); -} - -static void sub_8073098(u16 a1) -{ - u8 v1; - v1 = a1 % 8; - QueueTilesetAnimDma(gTilesetAnimTable_General_1[v1], (u8 *)(BG_VRAM + 0x3600), 0x3c0); -} - -static void sub_80730C0(u16 a1) -{ - int v1; - v1 = a1 % 8; - QueueTilesetAnimDma(gTilesetAnimTable_General_2[v1], (u8 *)(BG_VRAM + 0x3a00), 0x140); -} - -static void sub_80730E8(u16 a1) -{ - int v1; - v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_General_3[v1], (u8 *)(BG_VRAM + 0x3e00), 0xc0); -} - -void TilesetCB_Petalburg(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = 0; -} - -void TilesetCB_Rustboro(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = sub_8073424; -} - -void TilesetCB_Dewford(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = 0; -} - -void TilesetCB_Slateport(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = 0; -} - -void TilesetCB_Mauville(void) -{ - gTileset2AnimFrame = gTileset1AnimFrame; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = sub_80734A0; -} - -void TilesetCB_Lavaridge(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = sub_8073514; -} - -void TilesetCB_Fallarbor(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = 0; -} - -void TilesetCB_Fortree(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = 0; -} - -void TilesetCB_Lilycove(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = 0; -} - -void TilesetCB_Mossdeep(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = 0; -} - -void TilesetCB_EverGrande(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = sub_8073540; -} - -void TilesetCB_Pacifidlog(void) -{ - gTileset2AnimFrame = gTileset1AnimFrame; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = sub_80735B4; -} - -void TilesetCB_Sootopolis(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = 0; -} - -void TilesetCB_Underwater(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = 0x80; - gTileset2AnimCallback = sub_80735E4; -} - -void TilesetCB_SootopolisGym(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = 0xf0; - gTileset2AnimCallback = sub_80738A8; -} - -void TilesetCB_Cave(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = sub_8073600; -} - -void TilesetCB_EliteFour(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = 0x80; - gTileset2AnimCallback = sub_80738C0; -} - -void TilesetCB_MauvilleGym(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = sub_8073890; -} - -void TilesetCB_BikeShop(void) -{ - gTileset2AnimFrame = 0; - gTileset2AnimLength = gTileset1AnimLength; - gTileset2AnimCallback = sub_80738EC; -} - -static void sub_8073424(u16 a1) -{ - int v1; - v1 = a1 % 8; - if (v1 == 0) - { - sub_80737A4(a1 / 8, 0); - sub_80737E0(a1 / 8); - } - if (v1 == 1) sub_80737A4(a1 / 8, 1); - if (v1 == 2) sub_80737A4(a1 / 8, 2); - if (v1 == 3) sub_80737A4(a1 / 8, 3); - if (v1 == 4) sub_80737A4(a1 / 8, 4); - if (v1 == 5) sub_80737A4(a1 / 8, 5); - if (v1 == 6) sub_80737A4(a1 / 8, 6); - if (v1 == 7) sub_80737A4(a1 / 8, 7); -} - -static void sub_80734A0(u16 a1) -{ - int v1; - v1 = a1 % 8; - if (v1 == 0) sub_8073704(a1 / 8, 0); - if (v1 == 1) sub_8073704(a1 / 8, 1); - if (v1 == 2) sub_8073704(a1 / 8, 2); - if (v1 == 3) sub_8073704(a1 / 8, 3); - if (v1 == 4) sub_8073704(a1 / 8, 4); - if (v1 == 5) sub_8073704(a1 / 8, 5); - if (v1 == 6) sub_8073704(a1 / 8, 6); - if (v1 == 7) sub_8073704(a1 / 8, 7); -} - -static void sub_8073514(u16 a1) -{ - int v1; - v1 = a1 % 0x10; - if (v1 == 0) sub_8073644(a1 / 0x10); - if (v1 == 1) sub_8073808(a1 / 0x10); -} - -static void sub_8073540(u16 a1) -{ - int v1; - v1 = a1 % 8; - if (v1 == 0) sub_8073830(a1 / 8, 0); - if (v1 == 1) sub_8073830(a1 / 8, 1); - if (v1 == 2) sub_8073830(a1 / 8, 2); - if (v1 == 3) sub_8073830(a1 / 8, 3); - if (v1 == 4) sub_8073830(a1 / 8, 4); - if (v1 == 5) sub_8073830(a1 / 8, 5); - if (v1 == 6) sub_8073830(a1 / 8, 6); - if (v1 == 7) sub_8073830(a1 / 8, 7); -} - -static void sub_80735B4(u16 a1) -{ - int v1; - v1 = a1 % 0x10; - if (v1 == 0) sub_807368C(a1 / 0x10); - if (v1 == 1) sub_80736DC(a1 / 0x10); -} - -static void sub_80735E4(u16 a1) -{ - int v1; - v1 = a1 % 0x10; - if (v1 == 0) sub_80736B4(a1 / 0x10); -} - -static void sub_8073600(u16 a1) -{ - int v1; - v1 = a1 % 0x10; - if (v1 == 1) sub_8073868(a1 / 0x10); -} - -static void sub_807361C(u16 a1) -{ - int v1; - v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_General_4[v1], (u8 *)(BG_VRAM + 0x3c00), 0x140); -} - -static void sub_8073644(u8 a1) -{ - u8 v1; - v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_Lavaridge[v1], (u8 *)(BG_VRAM + 0x6400), 0x80); - v1 = (a1 + 2) % 4; - QueueTilesetAnimDma(gTilesetAnimTable_Lavaridge[v1], (u8 *)(BG_VRAM + 0x6480), 0x80); -} - -static void sub_807368C(u8 a1) -{ - int v1; - v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_Pacifidlog_0[v1], (u8 *)(BG_VRAM + 0x7a00), 0x3c0); -} - -static void sub_80736B4(u8 a1) -{ - int v1; - v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_Underwater[v1], (u8 *)(BG_VRAM + 0x7e00), 0x80); -} - -static void sub_80736DC(u8 a1) -{ - int v1; - v1 = a1 % 8; - QueueTilesetAnimDma(gTilesetAnimTable_Pacifidlog_1[v1], (u8 *)(BG_VRAM + 0x7e00), 0x100); -} - -static void sub_8073704(u16 a1, u8 a2) -{ - int v1; - a1 -= a2; - if (a1 < 12) - { - v1 = a1 % 12; - QueueTilesetAnimDma(gTilesetAnimTable_Mauville_0A[v1], gUnknown_0837BAE4[a2], 0x80); - QueueTilesetAnimDma(gTilesetAnimTable_Mauville_1A[v1], gUnknown_0837BB04[a2], 0x80); - } - else - { - v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_Mauville_0B[v1], gUnknown_0837BAE4[a2], 0x80); - QueueTilesetAnimDma(gTilesetAnimTable_Mauville_1B[v1], gUnknown_0837BB04[a2], 0x80); - } -} - -static void sub_80737A4(u16 a1, u8 a2) -{ - int v1; - a1 -= a2; - - v1 = a1 % 8; - if (gTilesetAnimTable_Rustboro_0[v1]) - { - QueueTilesetAnimDma(gTilesetAnimTable_Rustboro_0[v1], gUnknown_0837BFA4[a2], 0x80); - } -} - -static void sub_80737E0(u16 a1) -{ - int v1; - v1 = a1 % 2; - QueueTilesetAnimDma(gTilesetAnimTable_Rustboro_1[v1], (u8 *)(BG_VRAM + 0x7800), 0x80); -} - -static void sub_8073808(u16 a1) -{ - int v1; - v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_Cave[v1], (u8 *)(BG_VRAM + 0x5400), 0x80); -} - -static void sub_8073830(u16 a1, u8 a2) -{ - int v1; - a1 -= a2; - v1 = a1 % 8; - QueueTilesetAnimDma(gTilesetAnimTable_EverGrande[v1], gUnknown_0837C93C[a2], 0x80); -} - -static void sub_8073868(u16 a1) -{ - int v1; - v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_Cave[v1], (u8 *)(BG_VRAM + 0x7400), 0x80); -} - -static void sub_8073890(u16 a1) -{ - int v1; - v1 = a1 % 2; - if (!v1) - { - sub_80739C4(a1 / 2); - } -} - -static void sub_80738A8(u16 a1) -{ - int v1; - v1 = a1 % 8; - if (!v1) - { - sub_807392C(a1 / 8); - } -} - -static void sub_80738C0(u16 a1) -{ - if (a1 % 0x40 == 0) - { - sub_807399C(a1 / 0x40); - } - if (a1 % 8 == 1) - { - sub_8073974(a1 / 8); - } -} - -static void sub_80738EC(u16 a1) -{ - if (a1 % 4 == 0) - { - sub_80739EC(a1 / 4); - } -} - -static void sub_8073904(u16 a1) -{ - int v1; - v1 = a1 % 2; - QueueTilesetAnimDma(gTilesetAnimTable_Building[v1], (u8 *)(BG_VRAM + 0x3e00), 0x80); -} - -static void sub_807392C(u16 a1) -{ - int v1; - v1 = a1 % 3; - QueueTilesetAnimDma(gTilesetAnimTable_SootopolisGym_0[v1], (u8 *)(BG_VRAM + 0x7e00), 0x180); - QueueTilesetAnimDma(gTilesetAnimTable_SootopolisGym_1[v1], (u8 *)(BG_VRAM + 0x7a00), 0x280); -} - -static void sub_8073974(u16 a1) -{ - int v1; - v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_EliteFour_0[v1], (u8 *)(BG_VRAM + 0x7f00), 0x20); -} - -static void sub_807399C(u16 a1) -{ - int v1; - v1 = a1 % 2; - QueueTilesetAnimDma(gTilesetAnimTable_EliteFour_1[v1], (u8 *)(BG_VRAM + 0x7c00), 0x80); -} - -static void sub_80739C4(u16 a1) -{ - int v1; - v1 = a1 % 2; - QueueTilesetAnimDma(gTilesetAnimTable_MauvilleGym[v1], (u8 *)(BG_VRAM + 0x5200), 0x200); -} - -static void sub_80739EC(u16 a1) -{ - int v1; - v1 = a1 % 2; - QueueTilesetAnimDma(gTilesetAnimTable_BikeShop[v1], (u8 *)(BG_VRAM + 0x7e00), 0x120); -} diff --git a/src/time_events.c b/src/time_events.c deleted file mode 100644 index e1b9a2e9e..000000000 --- a/src/time_events.c +++ /dev/null @@ -1,118 +0,0 @@ -#include "global.h" -#include "time_events.h" -#include "event_data.h" -#include "field_weather.h" -#include "pokemon.h" -#include "rng.h" -#include "rom4.h" -#include "rtc.h" -#include "script.h" -#include "task.h" - -static u32 GetMirageRnd(void) -{ - u32 hi = VarGet(VAR_MIRAGE_RND_H); - u32 lo = VarGet(VAR_MIRAGE_RND_L); - return (hi << 16) | lo; -} - -static void SetMirageRnd(u32 rnd) -{ - VarSet(VAR_MIRAGE_RND_H, rnd >> 16); - VarSet(VAR_MIRAGE_RND_L, rnd); -} - -// unused -void InitMirageRnd(void) -{ - SetMirageRnd((Random() << 16) | Random()); -} - -void UpdateMirageRnd(u16 days) -{ - s32 rnd = GetMirageRnd(); - while (days) - { - rnd = 1103515245 * rnd + 12345; - days--; - } - SetMirageRnd(rnd); -} - -bool8 IsMirageIslandPresent(void) -{ - u16 rnd = GetMirageRnd() >> 16; - int i; - - for (i = 0; i < PARTY_SIZE; i++) - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && (GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY) & 0xFFFF) == rnd) - return TRUE; - - return FALSE; -} - -void UpdateShoalTideFlag(void) -{ - static const u8 tide[] = - { - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - }; - - if (is_light_level_1_2_3_5_or_6(get_map_light_from_warp0())) - { - RtcCalcLocalTime(); - if (tide[gLocalTime.hours]) - FlagSet(SYS_SHOAL_TIDE); - else - FlagReset(SYS_SHOAL_TIDE); - } -} - -static void Task_WaitWeather(u8 taskId) -{ - if (sub_807DDFC()) - { - EnableBothScriptContexts(); - DestroyTask(taskId); - } -} - -void WaitWeather(void) -{ - CreateTask(Task_WaitWeather, 80); -} - -void InitBirchState(void) -{ - *(u16 *)GetVarPointer(VAR_BIRCH_STATE) = 0; -} - -void UpdateBirchState(u16 days) -{ - u16 *state = GetVarPointer(VAR_BIRCH_STATE); - *state += days; - *state %= 7; -} diff --git a/src/title_screen.c b/src/title_screen.c deleted file mode 100644 index ab0f1d505..000000000 --- a/src/title_screen.c +++ /dev/null @@ -1,892 +0,0 @@ -#include "global.h" -#include "gba/m4a_internal.h" -#include "title_screen.h" -#include "clear_save_data_menu.h" -#include "decompress.h" -#include "event_data.h" -#include "intro.h" -#include "m4a.h" -#include "main.h" -#include "main_menu.h" -#include "palette.h" -#include "reset_rtc_screen.h" -#include "sound.h" -#include "sprite.h" -#include "task.h" -#include "unknown_task.h" - -#if ENGLISH -#define VERSION_BANNER_SHAPE 1 -#define VERSION_BANNER_RIGHT_TILEOFFSET 64 -#define VERSION_BANNER_BYTES 0x1000 -#define VERSION_BANNER_LEFT_X 98 -#define VERSION_BANNER_RIGHT_X 162 -#define VERSION_BANNER_Y 26 -#define VERSION_BANNER_Y_GOAL 66 -#define START_BANNER_X DISPLAY_WIDTH / 2 -#elif GERMAN -#define VERSION_BANNER_SHAPE 0 -#define VERSION_BANNER_RIGHT_TILEOFFSET 128 -#define VERSION_BANNER_BYTES 0x2000 -#define VERSION_BANNER_LEFT_X 108 -#define VERSION_BANNER_RIGHT_X 172 -#ifdef SAPPHIRE -#define VERSION_BANNER_Y_GOAL 83 -#else -#define VERSION_BANNER_Y_GOAL 84 -#endif -#define VERSION_BANNER_Y (VERSION_BANNER_Y_GOAL - 40) -#define START_BANNER_X DISPLAY_WIDTH / 2 - 2 -#endif - -extern u8 gReservedSpritePaletteCount; -extern struct MusicPlayerInfo gMPlay_BGM; -extern u16 gUnknown_030041B4; -extern u16 gUnknown_030042C0; -extern const u8 gUnknown_08E9D8CC[]; -extern const u16 gUnknown_08E9F624[]; -extern const u8 gUnknown_08E9F7E4[]; -extern const u8 gVersionTiles[]; -extern const u8 gTitleScreenPressStart_Gfx[]; -extern const u16 gTitleScreenLogoShinePalette[]; - -static EWRAM_DATA u8 gUnknown_0202F7E4 = 0; - -#ifdef SAPPHIRE -static const u16 sLegendaryMonPalettes[][16] = -{ - INCBIN_U16("graphics/title_screen/kyogre_dark.gbapal"), - INCBIN_U16("graphics/title_screen/kyogre_glow.gbapal"), -}; -static const u8 sLegendaryMonPixelData[] = INCBIN_U8("graphics/title_screen/kyogre.4bpp.lz"); -static const u8 sLegendaryMonTilemap[] = INCBIN_U8("graphics/title_screen/kyogre_map.bin.lz"); -static const u8 sBackdropTilemap[] = INCBIN_U8("graphics/title_screen/water_map.bin.lz"); -#else -static const u16 sLegendaryMonPalettes[][16] = -{ - INCBIN_U16("graphics/title_screen/groudon_dark.gbapal"), - INCBIN_U16("graphics/title_screen/groudon_glow.gbapal"), -}; -static const u8 sLegendaryMonPixelData[] = INCBIN_U8("graphics/title_screen/groudon.4bpp.lz"); -static const u8 sLegendaryMonTilemap[] = INCBIN_U8("graphics/title_screen/groudon_map.bin.lz"); -static const u8 sBackdropTilemap[] = INCBIN_U8("graphics/title_screen/lava_map.bin.lz"); -#endif -static const u8 sLogoShineTiles[] = INCBIN_U8("graphics/title_screen/logo_shine.4bpp.lz"); -const u16 gUnknown_08393E64[] = -{ - 0x10, - 0x110, - 0x210, - 0x310, - 0x410, - 0x510, - 0x610, - 0x710, - 0x810, - 0x910, - 0xA10, - 0xB10, - 0xC10, - 0xD10, - 0xE10, - 0xF10, - 0x100F, - 0x100E, - 0x100D, - 0x100C, - 0x100B, - 0x100A, - 0x1009, - 0x1008, - 0x1007, - 0x1006, - 0x1005, - 0x1004, - 0x1003, - 0x1002, - 0x1001, - 0x1000, -}; -static const struct OamData sVersionBannerLeftOamData = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 1, - .shape = VERSION_BANNER_SHAPE, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const struct OamData sVersionBannerRightOamData = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 1, - .shape = VERSION_BANNER_SHAPE, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd sVersionBannerLeftAnimSequence[] = -{ - ANIMCMD_FRAME(0, 30), - ANIMCMD_END, -}; -static const union AnimCmd sVersionBannerRightAnimSequence[] = -{ - ANIMCMD_FRAME(VERSION_BANNER_RIGHT_TILEOFFSET, 30), - ANIMCMD_END, -}; -static const union AnimCmd *const sVersionBannerLeftAnimTable[] = -{ - sVersionBannerLeftAnimSequence, -}; -static const union AnimCmd *const sVersionBannerRightAnimTable[] = -{ - sVersionBannerRightAnimSequence, -}; -static const struct SpriteTemplate sVersionBannerLeftSpriteTemplate = -{ - .tileTag = 1000, - .paletteTag = 1000, - .oam = &sVersionBannerLeftOamData, - .anims = sVersionBannerLeftAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallback_VersionBannerLeft, -}; -static const struct SpriteTemplate sVersionBannerRightSpriteTemplate = -{ - .tileTag = 1000, - .paletteTag = 1000, - .oam = &sVersionBannerRightOamData, - .anims = sVersionBannerRightAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallback_VersionBannerRight, -}; -static const struct CompressedSpriteSheet gUnknown_08393EFC[] = -{ - {gVersionTiles, VERSION_BANNER_BYTES, 1000}, - {NULL}, -}; -static const struct OamData gOamData_8393F0C = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 1, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_8393F14[] = -{ - ANIMCMD_FRAME(0, 4), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_8393F1C[] = -{ - ANIMCMD_FRAME(4, 4), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_8393F24[] = -{ - ANIMCMD_FRAME(8, 4), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_8393F2C[] = -{ - ANIMCMD_FRAME(12, 4), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_8393F34[] = -{ - ANIMCMD_FRAME(16, 4), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_8393F3C[] = -{ - ANIMCMD_FRAME(20, 4), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_8393F44[] = -{ - ANIMCMD_FRAME(24, 4), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_8393F4C[] = -{ - ANIMCMD_FRAME(28, 4), - ANIMCMD_END, -}; -#if GERMAN -static const union AnimCmd gSpriteAnim_839F73C[] = -{ - ANIMCMD_FRAME(32, 4), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_839F744[] = -{ - ANIMCMD_FRAME(36, 4), - ANIMCMD_END, -}; -#endif -static const union AnimCmd *const sStartCopyrightBannerAnimTable[] = -{ - gSpriteAnim_8393F14, - gSpriteAnim_8393F1C, - gSpriteAnim_8393F24, - gSpriteAnim_8393F2C, - gSpriteAnim_8393F34, - gSpriteAnim_8393F3C, - gSpriteAnim_8393F44, - gSpriteAnim_8393F4C, -#if GERMAN - gSpriteAnim_839F73C, - gSpriteAnim_839F744, -#endif -}; -static const struct SpriteTemplate sStartCopyrightBannerSpriteTemplate = -{ - .tileTag = 1001, - .paletteTag = 1001, - .oam = &gOamData_8393F0C, - .anims = sStartCopyrightBannerAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallback_PressStartCopyrightBanner, -}; -static const struct CompressedSpriteSheet gUnknown_08393F8C[] = -{ - {gTitleScreenPressStart_Gfx, 0x520, 1001}, - {NULL}, -}; -const struct SpritePalette sPokemonLogoShinePalette[] = -{ - {gTitleScreenLogoShinePalette, 1001}, - {NULL}, -}; -static const struct OamData sPokemonLogoShineOamData = -{ - .y = 160, - .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 union AnimCmd sPokemonLogoShineAnimSequence[] = -{ - ANIMCMD_FRAME(0, 4), - ANIMCMD_END, -}; -static const union AnimCmd *const sPokemonLogoShineAnimTable[] = -{ - sPokemonLogoShineAnimSequence, -}; -static const struct SpriteTemplate sPokemonLogoShineSpriteTemplate = -{ - .tileTag = 1002, - .paletteTag = 1001, - .oam = &sPokemonLogoShineOamData, - .anims = sPokemonLogoShineAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallback_PokemonLogoShine, -}; -static const struct CompressedSpriteSheet sPokemonLogoShineSpriteSheet[] = -{ - {sLogoShineTiles, 0x800, 1002}, - {NULL}, -}; - -#define _RGB(r, g, b) ((((b) & 31) << 10) + (((g) & 31) << 5) + ((r) & 31)) - -#ifdef SAPPHIRE -//Red Kyogre markings -#define LEGENDARY_MARKING_COLOR(c) RGB((c), 0, 0) -#else -//Blue Groundon markings -#define LEGENDARY_MARKING_COLOR(c) RGB(0, 0, (c)) -#endif - -#if defined(GERMAN) && defined(SAPPHIRE) -#define PLTT_BUFFER_INDEX 9 -#elif defined(SAPPHIRE) -#define PLTT_BUFFER_INDEX 26 -#else -#define PLTT_BUFFER_INDEX 21 -#endif - -#define CLEAR_SAVE_BUTTON_COMBO (B_BUTTON | SELECT_BUTTON | DPAD_UP) -#define RESET_RTC_BUTTON_COMBO (B_BUTTON | SELECT_BUTTON | DPAD_LEFT) -#define A_B_START_SELECT (A_BUTTON | B_BUTTON | START_BUTTON | SELECT_BUTTON) - -static void MainCB2(void); -static void Task_TitleScreenPhase1(u8); -static void Task_TitleScreenPhase2(u8); -static void Task_TitleScreenPhase3(u8); -static void CB2_GoToMainMenu(void); -static void CB2_GoToClearSaveDataScreen(void); -static void CB2_GoToResetRtcScreen(void); -static void CB2_GoToCopyrightScreen(void); -static void UpdateLegendaryMarkingColor(u8); - -void SpriteCallback_VersionBannerLeft(struct Sprite *sprite) -{ - struct Task *task = &gTasks[sprite->data1]; - - if (task->data[1] != 0) - { - sprite->oam.objMode = 0; - sprite->pos1.y = VERSION_BANNER_Y_GOAL; - sprite->invisible = FALSE; - } - else - { - if (task->data[5] != 0) - task->data[5]--; - if (task->data[5] < 64) - { - sprite->invisible = FALSE; - if (sprite->pos1.y != VERSION_BANNER_Y_GOAL) - sprite->pos1.y++; - REG_BLDALPHA = gUnknown_08393E64[task->data[5] / 2]; - } - } -} - -void SpriteCallback_VersionBannerRight(struct Sprite *sprite) -{ - struct Task *task = &gTasks[sprite->data1]; - - if (task->data[1] != 0) - { - sprite->oam.objMode = 0; - sprite->pos1.y = VERSION_BANNER_Y_GOAL; - sprite->invisible = FALSE; - } - else - { - if (task->data[5] < 64) - { - sprite->invisible = FALSE; - if (sprite->pos1.y != VERSION_BANNER_Y_GOAL) - sprite->pos1.y++; - } - } -} - -void SpriteCallback_PressStartCopyrightBanner(struct Sprite *sprite) -{ - if (sprite->data0 == 1) - { - sprite->data1++; - //Alternate between hidden and shown every 16th frame - if (sprite->data1 & 16) - sprite->invisible = FALSE; - else - sprite->invisible = TRUE; - } - else - sprite->invisible = FALSE; -} - -#if ENGLISH -static void CreatePressStartBanner(s16 x, s16 y) -{ - u8 i; - u8 spriteId; - - x -= 32; - for (i = 0; i < 3; i++, x += 32) - { - spriteId = CreateSprite(&sStartCopyrightBannerSpriteTemplate, x, y, 0); - StartSpriteAnim(&gSprites[spriteId], i); - gSprites[spriteId].data0 = 1; - } -} -#elif GERMAN -__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\ -_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\ -_0807C3AC: .4byte 0xffe00000\n\ -_0807C3B0: .4byte sStartCopyrightBannerSpriteTemplate\n\ -_0807C3B4: .4byte gSprites\n\ - .syntax divided\n"); -} -#endif - -static void CreateCopyrightBanner(s16 x, s16 y) -{ - u8 i; - u8 spriteId; - - x -= 64; - for (i = 0; i < 5; i++, x += 32) - { - spriteId = CreateSprite(&sStartCopyrightBannerSpriteTemplate, x, y, 0); - StartSpriteAnim(&gSprites[spriteId], i + 3); - } -} - -void SpriteCallback_PokemonLogoShine(struct Sprite *sprite) -{ - if (gTasks[gUnknown_0202F7E4].data[1] == 0 && sprite->pos1.x < 272) - { - if (sprite->data0) //Flash background - { - u16 backgroundColor; - - if (sprite->pos1.x < DISPLAY_WIDTH / 2) - { - //Brighten background color - if (sprite->data1 < 31) - sprite->data1++; - if (sprite->data1 < 31) - sprite->data1++; - } - else - { - //Darken background color - if (sprite->data1 != 0) - sprite->data1--; - if (sprite->data1 != 0) - sprite->data1--; - } - backgroundColor = _RGB(sprite->data1, sprite->data1, sprite->data1); - gPlttBufferFaded[0] = backgroundColor; - gPlttBufferFaded[PLTT_BUFFER_INDEX] = backgroundColor; - } - sprite->pos1.x += 4; - } - else - { - gPlttBufferFaded[0] = RGB_BLACK; - gPlttBufferFaded[PLTT_BUFFER_INDEX] = RGB_BLACK; - DestroySprite(sprite); - } -} - -static void StartPokemonLogoShine(bool8 flashBackground) -{ - u8 spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, 0, 68, 0); - - gSprites[spriteId].oam.objMode = 2; - gSprites[spriteId].data0 = flashBackground; -} - -static void VBlankCB(void) -{ - sub_8089668(); - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - REG_BG1VOFS = gUnknown_030041B4; -} - - -#define tCounter data[0] -#define tSkipToNext data[1] - -void CB2_InitTitleScreen(void) -{ - switch (gMain.state) - { - default: - case 0: - SetVBlankCallback(NULL); - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - *((u16 *)PLTT) = RGB_WHITE; - REG_DISPCNT = 0; - REG_BG2CNT = 0; - REG_BG1CNT = 0; - REG_BG0CNT = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - DmaFill16(3, 0, (void *)VRAM, 0x18000); - DmaFill32(3, 0, (void *)OAM, 0x400); - DmaFill16(3, 0, (void *)(PLTT + 2), 0x3FE); - ResetPaletteFade(); - gMain.state = 1; - break; - case 1: - LZ77UnCompVram(gUnknown_08E9D8CC, (void *)VRAM); - LZ77UnCompVram(gUnknown_08E9F7E4, (void *)(VRAM + 0x4800)); - LoadPalette(gUnknown_08E9F624, 0, 0x1C0); - LZ77UnCompVram(sLegendaryMonPixelData, (void *)(VRAM + 0x8000)); - LZ77UnCompVram(sLegendaryMonTilemap, (void *)(VRAM + 0xC000)); - LZ77UnCompVram(sBackdropTilemap, (void *)(VRAM + 0xC800)); - LoadPalette(sLegendaryMonPalettes, 0xE0, sizeof(sLegendaryMonPalettes)); - remove_some_task(); - ResetTasks(); - ResetSpriteData(); - FreeAllSpritePalettes(); - gReservedSpritePaletteCount = 14; - LoadCompressedObjectPic(&gUnknown_08393EFC[0]); - LoadCompressedObjectPic(&gUnknown_08393F8C[0]); - LoadCompressedObjectPic(&sPokemonLogoShineSpriteSheet[0]); - LoadPalette(gUnknown_08E9F624, 0x100, 0x1C0); - LoadSpritePalette(&sPokemonLogoShinePalette[0]); - gMain.state = 2; - break; - case 2: - { - u8 taskId = CreateTask(Task_TitleScreenPhase1, 0); - - gTasks[taskId].tCounter = 256; - gTasks[taskId].tSkipToNext = FALSE; - gTasks[taskId].data[2] = -16; - gTasks[taskId].data[3] = -32; - gUnknown_0202F7E4 = taskId; - gMain.state = 3; - break; - } - case 3: - BeginNormalPaletteFade(-1, 1, 0x10, 0, 0xFFFF); - SetVBlankCallback(VBlankCB); - gMain.state = 4; - break; - case 4: - { - u16 savedIme; - - sub_813CE30(0x78, 0x50, 0x100, 0); - REG_BG2X = -29 * 256; - REG_BG2Y = -33 * 256; - REG_WIN0H = 0; - REG_WIN0V = 0; - REG_WIN1H = 0; - REG_WIN1V = 0; - REG_WININ = 0x1F1F; - REG_WINOUT = 0x3F1F; - REG_BLDCNT = 0x84; - REG_BLDALPHA = 0; - REG_BLDY = 0x8; - REG_BG0CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(24) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(25) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG2CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(9) | BGCNT_256COLOR | BGCNT_AFF256x256; - savedIme = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = savedIme; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - REG_DISPCNT = DISPCNT_MODE_1 - | DISPCNT_OBJ_1D_MAP - | DISPCNT_BG2_ON - | DISPCNT_OBJ_ON - | DISPCNT_WIN0_ON - | DISPCNT_OBJWIN_ON; - m4aSongNumStart(0x19D); - gMain.state = 5; - break; - } - case 5: - if (!UpdatePaletteFade()) - { - StartPokemonLogoShine(FALSE); - sub_8089944(0, 0xA0, 4, 4, 0, 4, 1); - SetMainCallback2(MainCB2); - } - break; - } -} - -static void MainCB2(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -//Shine the Pokemon logo two more times, and fade in the version banner -static void Task_TitleScreenPhase1(u8 taskId) -{ - //Skip to next phase when A, B, Start, or Select is pressed - if ((gMain.newKeys & A_B_START_SELECT) || gTasks[taskId].data[1] != 0) - { - gTasks[taskId].tSkipToNext = TRUE; - gTasks[taskId].tCounter = 0; - } - - if (gTasks[taskId].tCounter != 0) - { - u16 frameNum = gTasks[taskId].tCounter; - - if (frameNum == 160 || frameNum == 64) - StartPokemonLogoShine(TRUE); - gTasks[taskId].tCounter--; - } - else - { - u8 spriteId; - - REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; - REG_WININ = 0; - REG_WINOUT = 0; - REG_BLDCNT = 0x3F50; - REG_BLDALPHA = 0x1F; - REG_BLDY = 0; - - //Create left side of version banner - spriteId = CreateSprite(&sVersionBannerLeftSpriteTemplate, VERSION_BANNER_LEFT_X, VERSION_BANNER_Y, 0); - gSprites[spriteId].invisible = TRUE; - gSprites[spriteId].data1 = taskId; - - //Create right side of version banner - spriteId = CreateSprite(&sVersionBannerRightSpriteTemplate, VERSION_BANNER_RIGHT_X, VERSION_BANNER_Y, 0); - gSprites[spriteId].invisible = TRUE; - gSprites[spriteId].data1 = taskId; - - gTasks[taskId].data[5] = 88; - gTasks[taskId].tCounter = 144; - gTasks[taskId].func = Task_TitleScreenPhase2; - } -} - -//Create "Press Start" and copyright banners, and slide Pokemon logo up -static void Task_TitleScreenPhase2(u8 taskId) -{ - //Skip to next phase when A, B, Start, or Select is pressed - if ((gMain.newKeys & A_B_START_SELECT) || gTasks[taskId].tSkipToNext) - { - gTasks[taskId].tSkipToNext = TRUE; - gTasks[taskId].tCounter = 0; - } - - if (gTasks[taskId].tCounter != 0) - gTasks[taskId].tCounter--; - else - { - gTasks[taskId].tSkipToNext = TRUE; - REG_DISPCNT = DISPCNT_MODE_1 - | DISPCNT_OBJ_1D_MAP - | DISPCNT_BG0_ON - | DISPCNT_BG1_ON - | DISPCNT_BG2_ON - | DISPCNT_OBJ_ON; - CreatePressStartBanner(START_BANNER_X, 108); - CreateCopyrightBanner(DISPLAY_WIDTH / 2, 148); - gTasks[taskId].data[4] = 0; - gTasks[taskId].func = Task_TitleScreenPhase3; - } - - if (!(gTasks[taskId].tCounter & 1) && gTasks[taskId].data[3] != 0) - gTasks[taskId].data[3]++; - - //Slide Pokemon logo up - REG_BG2Y = gTasks[taskId].data[3] * 256; -} - -//Show Kyogre/Groundon silhouette and process main title screen input -static void Task_TitleScreenPhase3(u8 taskId) -{ - REG_BLDCNT = 0x2142; - REG_BLDALPHA = 0x1F0F; - REG_BLDY = 0; - - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & START_BUTTON)) - { - FadeOutBGM(4); - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0xFFFF); - SetMainCallback2(CB2_GoToMainMenu); - } - else - { - if ((gMain.heldKeys & CLEAR_SAVE_BUTTON_COMBO) == CLEAR_SAVE_BUTTON_COMBO) - SetMainCallback2(CB2_GoToClearSaveDataScreen); - if ((gMain.heldKeys & RESET_RTC_BUTTON_COMBO) == RESET_RTC_BUTTON_COMBO - && CanResetRTC() == 1) - { - FadeOutBGM(4); - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - SetMainCallback2(CB2_GoToResetRtcScreen); - } - else - { - REG_BG2Y = 0; - gTasks[taskId].tCounter++; - if (gTasks[taskId].tCounter & 1) - { - gTasks[taskId].data[4]++; - gUnknown_030041B4 = gTasks[taskId].data[4]; - gUnknown_030042C0 = 0; - } - UpdateLegendaryMarkingColor(gTasks[taskId].tCounter); - if ((gMPlay_BGM.status & 0xFFFF) == 0) - { - BeginNormalPaletteFade(-1, 0, 0, 0x10, 0xFFFF); - SetMainCallback2(CB2_GoToCopyrightScreen); - } - } - } -} - -static void CB2_GoToMainMenu(void) -{ - if (!UpdatePaletteFade()) - SetMainCallback2(CB2_InitMainMenu); -} - -static void CB2_GoToCopyrightScreen(void) -{ - if (!UpdatePaletteFade()) - SetMainCallback2(CB2_InitCopyrightScreenAfterTitleScreen); -} - -static void CB2_GoToClearSaveDataScreen(void) -{ - if (!UpdatePaletteFade()) - SetMainCallback2(CB2_InitClearSaveDataScreen); -} - -static void CB2_GoToResetRtcScreen(void) -{ - if (!UpdatePaletteFade()) - SetMainCallback2(CB2_InitResetRtcScreen); -} - -static void UpdateLegendaryMarkingColor(u8 frameNum) -{ - u16 palette; - - if ((frameNum % 4) == 0) //Change color every 4th frame - { - u8 colorIntensity = (frameNum >> 2) & 31; //Take bits 2-6 of frameNum the color intensity - u8 fadeDarker = (frameNum >> 2) & 32; - - if (!fadeDarker) - palette = LEGENDARY_MARKING_COLOR(colorIntensity); - else - palette = LEGENDARY_MARKING_COLOR(31 - colorIntensity); - LoadPalette(&palette, 0xEF, sizeof(palette)); - } -} - diff --git a/src/trade.c b/src/trade.c deleted file mode 100644 index cb190d194..000000000 --- a/src/trade.c +++ /dev/null @@ -1,88 +0,0 @@ -#include "global.h" -#include "name_string_util.h" -#include "string_util.h" -#include "text.h" - -struct InGameTrade { - /*0x00*/ u8 name[11]; - /*0x0C*/ u16 species; - /*0x0E*/ u8 ivs[6]; - /*0x14*/ bool8 secondAbility; - /*0x18*/ u32 otId; - /*0x1C*/ u8 stats[5]; - /*0x24*/ u32 personality; - /*0x28*/ u16 heldItem; - /*0x2A*/ u8 mailNum; - /*0x2B*/ u8 otName[11]; - /*0x36*/ u8 otGender; - /*0x37*/ u8 sheen; - /*0x38*/ u16 playerSpecies; -}; - -struct UnkStructC { - /*0x00*/ u16 words[9]; - /*0x10*/ u8 string[8]; - /*0x1A*/ u8 otId[4]; - /*0x1E*/ u16 species; - /*0x20*/ u16 heldItem; -}; - -struct UnkStructD { - /*0x00*/ u8 pad00[0x10]; - /*0x10*/ u8 var10; - /*0x11*/ u8 pad11[1]; - /*0x12*/ u16 var12[1]; -}; - -extern const struct InGameTrade gIngameTrades[]; -extern const u16 gIngameTradeMail[][10]; - - -void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { - int y, x; - - for (y = 0; y < height; y++) - { - - for (x = 0; x < width; x++) - { - arg0->var12[(top * 32 + left) + y * 32 + x] = tilemap[width * y + x] | sp8; - } - } - -#if ENGLISH - arg0->var10 = 1; -#endif -} - -#if GERMAN -void sub_804A96C_alt(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) { - sub_804A96C(arg0, left, top, tilemap, width, height, sp8); - - arg0->var10 = 1; -} -#endif - -asm(".section .text.sub_804DAD4"); - -void sub_804DAD4(struct UnkStructC *arg0, struct InGameTrade *trade) { - s32 i; - - for (i = 0; i < 9; i++) - { - arg0->words[i] = gIngameTradeMail[trade->mailNum][i]; - } - - StringCopy(arg0->string, trade->otName); - -#if GERMAN - PadNameString(arg0->string, CHAR_SPACE); -#endif - - arg0->otId[0] = trade->otId >> 24; - arg0->otId[1] = trade->otId >> 16; - arg0->otId[2] = trade->otId >> 8; - arg0->otId[3] = trade->otId; - arg0->species = trade->species; - arg0->heldItem = trade->heldItem; -} diff --git a/src/trader.c b/src/trader.c deleted file mode 100644 index ea06058e9..000000000 --- a/src/trader.c +++ /dev/null @@ -1,261 +0,0 @@ -#include "global.h" -#include "decoration.h" -#include "decoration_inventory.h" -#include "event_data.h" -#include "main.h" -#include "menu.h" -#include "menu_helpers.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" - -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; -extern u16 gSpecialVar_0x8006; - -static const u8 * const gUnknown_083F62D8[] = -{ - SecretBaseText_Tristan, - SecretBaseText_Philip, - SecretBaseText_Dennis, - SecretBaseText_Roberto, -}; - -static const u8 gTraderDecorations[] = -{ - DECOR_DUSKULL_DOLL, - DECOR_BALL_CUSHION, - DECOR_TIRE, - DECOR_PRETTY_FLOWERS, -}; - -void sub_810993C(void) -{ - u8 i, j; - u8 buffer[12]; - struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; - - for (i = 0; i < 3; i++) - { - for (j = i + 1; j < 4; j++) - { - if (trader->unk1[i] == 0) - { - u8 temp = trader->unk1[i]; - trader->unk1[i] = trader->unk1[j]; - trader->unk1[j] = temp; - StringCopy(buffer, trader->unk5[i]); - StringCopy(trader->unk5[i], trader->unk5[j]); - StringCopy(trader->unk5[j], buffer); - } - } - } -} - -void sub_81099CC(void) -{ - u8 i; - struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; - - trader->unk0 = 2; - trader->unk31 = 0; - - for (i = 0; i < 4; i++) - { - StringCopy(trader->unk5[i], gUnknown_083F62D8[i]); - trader->unk1[i] = gTraderDecorations[i]; - } - - sub_810993C(); -} - -void sub_8109A20(void) -{ - struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; - trader->unk31 = 0; -} - -void sub_8109A30(u8 value) -{ - VarSet(VAR_RECYCLE_GOODS, value); -} - -void sub_8109A48(u8 taskId) -{ - u8 i; - u8 numChoices = 1; - u8 numDecorations = 0; - struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; - - for (i = 0; i < 4; i++) - { - if (trader->unk1[i]) - { - numChoices++; - } - } - - MenuDrawTextWindow(0, 1, 12, numChoices * 2 + 2); - - for (i = 0; i < 4; i++) - { - if (trader->unk1[i]) - { - if (trader->unk1[i] > DECOR_REGISTEEL_DOLL) - { - MenuPrint(gOtherText_FiveQuestionsAndSlash, 1, numDecorations * 2 + 2); - } - else - { - MenuPrint(gDecorations[trader->unk1[i]].name, 1, numDecorations * 2 + 2); - } - - numDecorations++; - } - } - - MenuPrint(gOtherText_CancelNoTerminator, 1, numDecorations * 2 + 2); - InitMenu(0, 1, 2, numChoices, 0, 11); - gTasks[taskId].data[1] = numDecorations; -} - -void sub_8109B34(u8 taskId, u8 decorationId) -{ - if (decorationId > DECOR_REGISTEEL_DOLL) - { - gSpecialVar_0x8004 = 0xFFFF; - } - else - { - gSpecialVar_0x8004 = decorationId; - } - - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(0, 1, 12, 12); - DestroyTask(taskId); - EnableBothScriptContexts(); -} - -void sub_8109B7C(u8 taskId) -{ - struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; - - if (gMain.newKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - MoveMenuCursor(-1); - } - else if (gMain.newKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - MoveMenuCursor(1); - } - else if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - gSpecialVar_0x8005 = GetMenuCursorPos(); - if (gTasks[taskId].data[1] == gSpecialVar_0x8005) - { - sub_8109B34(taskId, 0); - } - else - { - StringCopy(gStringVar1, trader->unk5[gSpecialVar_0x8005]); - sub_8109B34(taskId, trader->unk1[gSpecialVar_0x8005]); - } - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - sub_8109B34(taskId, 0); - } -} - -void sub_8109C44(void) -{ - struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; - gScriptResult = trader->unk31; -} - -void sub_8109C58(void) -{ - u8 i; - - for (i = 0; i < 8; i++) - { - if (sub_8134194(i)) - { - gScriptResult = FALSE; - return; - } - } - gScriptResult = TRUE; -} - -void sub_8109C90(void) -{ - gScriptResult = FALSE; - if (gDecorations[gSpecialVar_0x8004].category != gDecorations[gSpecialVar_0x8006].category - && sub_8133F9C(gDecorations[gSpecialVar_0x8004].category) == -1) - { - sub_80FE7D4(gStringVar2, gDecorations[gSpecialVar_0x8004].category); - gScriptResult = TRUE; - } -} - -void sub_8109CF0(void) -{ - CreateTask(sub_80FE7A8, 0); -} - -void sub_8109D04(u8 taskId) -{ - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(0, 0, 29, 19); - DestroyVerticalScrollIndicator(0); - DestroyVerticalScrollIndicator(1); - sub_80F9520(gUnknown_020388F7, 8); - BuyMenuFreeMemory(); - if (sub_80FEFA4() == TRUE) - { - gSpecialVar_0x8006 = gUnknown_020388D0[gUnknown_020388F5]; - StringCopy(gStringVar3, gDecorations[gSpecialVar_0x8004].name); - StringCopy(gStringVar2, gDecorations[gSpecialVar_0x8006].name); - } - else - { - gSpecialVar_0x8006 = 0xFFFF; - } - DestroyTask(taskId); - EnableBothScriptContexts(); -} - -void sub_8109DAC(u8 taskId) -{ - HandleDestroyMenuCursors(); - MenuZeroFillWindowRect(0, 0, 29, 19); - gSpecialVar_0x8006 = 0; - DestroyTask(taskId); - EnableBothScriptContexts(); -} - -void sub_8109DE0(void) -{ - struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader; - - sub_81340A8(gSpecialVar_0x8006); - IsThereStorageSpaceForDecoration(gSpecialVar_0x8004); - StringCopy(trader->unk5[gSpecialVar_0x8005], gSaveBlock2.playerName); - trader->unk1[gSpecialVar_0x8005] = gSpecialVar_0x8006; - sub_810993C(); - trader->unk31 = 1; -} - -void sub_8109E34(void) -{ - u8 taskId = CreateTask(sub_8109B7C, 0); - sub_8109A48(taskId); -} diff --git a/src/trainer_card.c b/src/trainer_card.c deleted file mode 100644 index 626c5a7bf..000000000 --- a/src/trainer_card.c +++ /dev/null @@ -1,1569 +0,0 @@ -#include "global.h" -#include "trainer_card.h" -#include "easy_chat.h" -#include "event_data.h" -#include "field_effect.h" -#include "graphics.h" -#include "link.h" -#include "main.h" -#include "menu.h" -#include "money.h" -#include "palette.h" -#include "pokedex.h" -#include "rom4.h" -#include "script_pokemon_80C4.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "string_util.h" -#include "strings2.h" -#include "task.h" -#include "unknown_task.h" -#include "util.h" - -typedef void (*Callback)(void); - -struct Struct2000000 -{ - /*0x00*/ u8 var_0; - /*0x01*/ bool8 var_1; - /*0x02*/ u8 var_2; - /*0x03*/ bool8 var_3; - /*0x04*/ u8 var_4; - /*0x05*/ u8 var_5; - /*0x06*/ u8 var_6; - /*0x07*/ bool8 var_7; - /*0x08*/ bool8 var_8; - /*0x09*/ bool8 var_9; - /*0x0A*/ bool8 var_a; - /*0x0B*/ bool8 var_b; - /*0x0C*/ bool8 var_c; - /*0x0D*/ bool8 var_d; - /*0x0E*/ u8 var_e[8]; - /*0x16*/ u8 filler_16[10]; - /*0x20*/ u8 var_20[4][0x10]; - /*0x60*/ Callback *var_60; - /*0x64*/ struct TrainerCard var_64; - /*0x9C*/ u8 language; // 0x9C -}; - -extern u8 ewram[]; -#define ewram0 (*(struct Struct2000000 *)(ewram)) - -extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; - -EWRAM_DATA struct TrainerCard gTrainerCards[4] = {0}; - -struct UnknownStruct1 -{ - u16 filler0[0x3C0]; - u16 unk780[160]; -}; -extern struct UnknownStruct1 gUnknown_03004DE0; - -extern const u8 gBadgesTiles[]; -extern const u16 gUnknown_083B5F0C[]; -extern const u16 gBadgesPalette[]; -extern const u16 gUnknown_083B5F4C[]; -extern const u16 gUnknown_083B5F6C[]; -extern const u16 gUnknown_083B5F8C[][4]; - -const u8 gBadgesTiles[] = INCBIN_U8("graphics/trainer_card/badges.4bpp"); -// XXX: what is this? -u8 *const ewram_ = ewram; - -bool8 sub_8093864(struct Task *); -bool8 sub_80938A8(struct Task *); -bool8 sub_80938CC(struct Task *); -bool8 sub_8093918(struct Task *); -bool8 sub_8093938(struct Task *); -bool8 sub_8093954(struct Task *); -bool8 sub_8093980(struct Task *); - -bool8 (*const gUnknown_083B5EBC[])(struct Task *) = -{ - sub_8093864, - sub_80938A8, - sub_80938CC, - sub_8093918, - sub_8093938, - sub_8093954, - sub_8093980, -}; - -bool8 sub_8093AA0(struct Task *); -bool8 sub_8093AF0(struct Task *); -bool8 sub_8093C0C(struct Task *); -bool8 sub_8093C38(struct Task *); -bool8 sub_8093D50(struct Task *); - -bool8 (*const gUnknown_083B5ED8[])(struct Task *) = -{ - sub_8093AA0, - sub_8093AF0, - sub_8093C0C, - sub_8093C38, - sub_8093D50, -}; - -// FIXME: Other signature than on save_menu_util.h -void FormatPlayTime(u8 *playtime, u16 hours, u16 minutes, s16 colon); -u16 GetPokedexSeenCount(void); - -enum -{ - TD_0, - TD_1, - TD_CALLBACK, -}; - -static void sub_8093174(void); -static void sub_809323C(void); -static void sub_8093254(void); -static void sub_80932AC(Callback callBack); -static void sub_80932E4(u8 arg1, Callback callBack); -void sub_8093324(void); -static void nullsub_60(u8); -static u32 sav12_xor_get_clamped_above(u8 index, u32 maxVal); -static u8 sub_80934F4(struct TrainerCard *); -static void sub_8093534(void); -static void sub_8093550(void); -static void sub_8093598(void); -static void sub_80935EC(void); -static void sub_8093610(void); -static void sub_8093688(void); -void sub_80936D4(void); -static void sub_80937A4(void); -static void sub_80937BC(void); -static void sub_80937D8(void); -static void sub_80937F0(void); -static void nullsub_15(void); -static void sub_8093800(void); -static void sub_809380C(); -static void sub_809382C(u8 taskId); -static void sub_80939A4(void); -static void sub_80939C0(void); -static void sub_80939DC(u8 taskId); -static void sub_8093A28(void); -static u8 sub_8093A48(void); -static void sub_8093A68(u8 taskId); -void sub_8093D7C(void); -static void sub_8093DAC(void); -static void sub_8093DC8(void); -static void sub_8093DEC(void); -static void sub_8093E04(void); -static void sub_8093E28(void); -void sub_8093EA0(void); -static void sub_8093EF8(void); -static void sub_8093F14(void); -static void sub_8093F48(void); -static void sub_8093F64(void); -static void sub_8093F80(void); -static void sub_8093FD0(void); -static void sub_8094038(void); -static void sub_80940E4(void); -static void sub_8094110(void); -static void sub_8094140(void); -static void sub_8094188(void); -static void TrainerCard_Front_PrintTrainerID(void); -static void TrainerCard_Front_PrintMoney(void); -static void TrainerCard_Front_PrintPokedexCount(void); -static void TrainerCard_Front_PrintPlayTime(u8 *arg1, s16 colon); -static void sub_809429C(void); -static void TrainerCard_Back_PrintName(void); -static void TrainerCard_Back_PrintHallOfFameTime_Label(void); -static void TrainerCard_Back_PrintHallOfFameTime(void); -static void TrainerCard_Back_PrintLinkBattlesLabel(void); -static void TrainerCard_Back_PrintLinkBattles(void); -static void TrainerCard_Back_PrintBattleTower_Label(void); -static void TrainerCard_Back_PrintBattleTower(void); -static void TrainerCard_Back_PrintLinkContests_Label(void); -static void TrainerCard_Back_PrintLinkContests(void); -static void TrainerCard_Back_PrintLinkPokeblocks_Label(void); -static void TrainerCard_Back_PrintLinkPokeblocks(void); -static void TrainerCard_Back_PrintPokemonTrades_Label(void); -static void TrainerCard_Back_PrintPokemonTrades(void); -void unref_sub_8094588(u16 left, u16 top); - -void sub_8093110(Callback arg1) -{ - sub_80932AC(arg1); - SetMainCallback2(sub_8093174); - ewram0.language = GAME_LANGUAGE; -} - -void sub_8093130(u8 playerIndex, Callback arg2) -{ - sub_80932E4(playerIndex, arg2); - SetMainCallback2(sub_8093174); - ewram0.language = gLinkPlayers[gLinkPlayerMapObjects[playerIndex].linkPlayerId].language; -} - -static void sub_8093174(void) -{ - switch (gMain.state) - { - case 0: - sub_8093534(); - sub_8093688(); - gMain.state++; - break; - case 1: - sub_8093598(); - gMain.state++; - break; - case 2: - sub_80935EC(); - gMain.state++; - break; - case 3: - sub_8093610(); - sub_80937A4(); - gMain.state++; - break; - case 4: - sub_80937BC(); - gMain.state++; - case 5: - if (MultistepInitMenuWindowContinue()) - gMain.state++; - break; - case 6: - sub_80937F0(); - gMain.state++; - break; - case 7: - sub_80937D8(); - gMain.state++; - break; - case 8: - nullsub_15(); - sub_8093800(); - sub_8093550(); - SetMainCallback2(sub_809323C); - break; - } -} - -static void sub_809323C(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void sub_8093254(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - ewram0.var_6++; - if (ewram0.var_6 >= 60) - { - ewram0.var_6 = 0; - ewram0.var_5 ^= 1; - } - if (ewram0.var_4) - DmaCopy16(3, gUnknown_03004DE0.filler0, gUnknown_03004DE0.unk780, sizeof(gUnknown_03004DE0.unk780)); -} - -static void sub_80932AC(Callback callBack) -{ - u8 taskId = CreateTask(nullsub_60, 0xFF); - struct Task *task = &gTasks[taskId]; - task->data[TD_0] = FALSE; - StoreWordInTwoHalfwords(&task->data[TD_CALLBACK], (u32)callBack); -} - -static void sub_80932E4(u8 arg1, Callback callBack) -{ - u8 taskId = CreateTask(nullsub_60, 0xFF); - - struct Task *task = &gTasks[taskId]; - task->data[TD_0] = TRUE; - task->data[TD_1] = arg1; - StoreWordInTwoHalfwords(&task->data[TD_CALLBACK], (u32)callBack); -} - -void sub_8093324(void) -{ - u8 taskId = FindTaskIdByFunc(nullsub_60); - struct Task *task = &gTasks[taskId]; - ewram0.var_1 = task->data[TD_0]; - - LoadWordFromTwoHalfwords((u16 *)&task->data[TD_CALLBACK], (u32 *)&ewram0.var_60); - - if (ewram0.var_1) - { - struct TrainerCard(*trainerCards)[4] = &gTrainerCards; - s16 var = task->data[TD_1]; - struct TrainerCard *dest = &(*trainerCards)[var]; - memcpy(&ewram0.var_64, dest, sizeof(struct TrainerCard)); - } - else - { - sub_8093390(&ewram0.var_64); - } -} - -static void nullsub_60(u8 taskid) -{ -} - -void sub_8093390(struct TrainerCard *arg1) -{ - u32 playTime; - bool32 enteredHallOfFame; - bool8 r4; - u8 i; - - arg1->gender = gSaveBlock2.playerGender; - arg1->playTimeHours = gSaveBlock2.playTimeHours; - arg1->playTimeMinutes = gSaveBlock2.playTimeMinutes; - - playTime = GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME); - enteredHallOfFame = GetGameStat(GAME_STAT_ENTERED_HOF); - if (!enteredHallOfFame) - { - playTime = 0; - } - arg1->firstHallOfFameA = playTime >> 16; - arg1->firstHallOfFameB = (playTime >> 8) & 0xFF; - arg1->firstHallOfFameC = playTime & 0xFF; - - arg1->hasPokedex = FlagGet(SYS_POKEDEX_GET); - arg1->var_3 = sub_8090FC0(); - arg1->pokedexSeen = GetPokedexSeenCount(); - - arg1->trainerId = (gSaveBlock2.playerTrainerId[1] << 8) | gSaveBlock2.playerTrainerId[0]; - - // Link Cable Battles - arg1->linkBattleWins = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_WINS, 9999); - arg1->linkBattleLosses = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_LOSSES, 9999); - - // Contests w/ Friends - arg1->contestsWithFriends = sav12_xor_get_clamped_above(GAME_STAT_WON_LINK_CONTEST, 999); - - // Pokéblocks w/ Friends - arg1->pokeblocksWithFriends = sav12_xor_get_clamped_above(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF); - - // Pokémon Trades - arg1->pokemonTrades = sav12_xor_get_clamped_above(GAME_STAT_POKEMON_TRADES, 0xFFFF); - - // Battle tower? - arg1->battleTowerWins = gSaveBlock2.filler_A8.var_4C8; - arg1->battleTowerLosses = gSaveBlock2.filler_A8.var_4CA; - if (arg1->battleTowerWins > 9999) - { - arg1->battleTowerWins = 9999; - } - if (arg1->battleTowerLosses > 9999) - { - arg1->battleTowerLosses = 9999; - } - - r4 = FALSE; - if (sub_80C4D50() > 4) - { - r4 = TRUE; - } - arg1->var_4 = r4; - - arg1->money = gSaveBlock1.money; - - for (i = 0; i < 4; i++) - { - arg1->var_28[i] = gSaveBlock1.unk2B1C[i]; - } - - for (i = 0; i < 8; i++) - { - arg1->playerName[i] = gSaveBlock2.playerName[i]; - } - - arg1->stars = sub_80934F4(arg1); -} - -u8 sub_80934C4(u8 id) -{ - return gTrainerCards[id].stars; -} - -static u32 sav12_xor_get_clamped_above(u8 index, u32 maxVal) -{ - u32 value = GetGameStat(index); - - if (value > maxVal) - { - value = maxVal; - } - - return value; -} - -static u8 sub_80934F4(struct TrainerCard *trainerCard) -{ - u8 value = 0; - - if (trainerCard->firstHallOfFameA != 0 || trainerCard->firstHallOfFameB != 0 || trainerCard->firstHallOfFameC != 0) - { - value++; - } - - if (trainerCard->var_3) - { - value++; - } - - if (trainerCard->battleTowerLosses > 49) - { - value++; - } - - if (trainerCard->var_4) - { - value++; - } - - return value; -} - -static void sub_8093534(void) -{ - SetVBlankCallback(NULL); - SetHBlankCallback(NULL); - REG_DISPCNT = 0; -} - -static void sub_8093550(void) -{ - u16 backup; - - SetVBlankCallback(sub_8093254); - - backup = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK | INTR_FLAG_HBLANK; - REG_IME = backup; - - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR | DISPSTAT_HBLANK_INTR; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; -} - -void sub_8093598(void) -{ - u8 *addr = (void *)VRAM; - u32 size = 0x10000; - - while (1) - { - DmaFill16(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill16(3, 0, addr, size); - break; - } - } -} - -void sub_80935EC(void) -{ - void *addr = (void *)OAM; - - DmaFill16(3, 0, addr, 0x400); -} - -void sub_8093610(void) -{ - REG_BG0CNT = 0; - REG_BG1CNT = 0; - REG_BG2CNT = 0; - REG_BG3CNT = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - - REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(30) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(8) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(9) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(10) | BGCNT_16COLOR | BGCNT_TXT256x256; -} - -static void sub_8093688(void) -{ - u8 i; - - sub_8093324(); - ewram0.var_0 = 0; - ewram0.var_3 = 0; - ewram0.var_4 = FALSE; - ewram0.var_2 = ewram0.var_64.stars; - 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]); - sub_80936D4(); -} - -void sub_80936D4(void) -{ - ewram0.var_7 = 0; - ewram0.var_8 = 0; - ewram0.var_9 = 0; - ewram0.var_a = 0; - ewram0.var_b = 0; - ewram0.var_c = 0; - ewram0.var_d = 0; - memset(ewram0.var_e, 0, sizeof(ewram0.var_e)); - - if (ewram0.var_64.hasPokedex) - ewram0.var_7++; - - if (ewram0.var_64.firstHallOfFameA != 0 - || ewram0.var_64.firstHallOfFameB != 0 - || ewram0.var_64.firstHallOfFameC != 0) - ewram0.var_8++; - - if (ewram0.var_64.linkBattleWins != 0 || ewram0.var_64.linkBattleLosses != 0) - ewram0.var_9++; - - if (ewram0.var_64.battleTowerWins != 0 || ewram0.var_64.battleTowerLosses != 0) - ewram0.var_a++; - - if (ewram0.var_64.contestsWithFriends != 0) - ewram0.var_b++; - - if (ewram0.var_64.pokeblocksWithFriends != 0) - ewram0.var_c++; - - if (ewram0.var_64.pokemonTrades != 0) - ewram0.var_d++; - - if (!ewram0.var_1) - { - u32 badgeFlag; - int i = 0; - - badgeFlag = BADGE01_GET; - while (1) - { - if (FlagGet(badgeFlag)) - ewram0.var_e[i]++; - badgeFlag++; - i++; - if (badgeFlag > BADGE08_GET) - { - break; - } - } - } -} - -void sub_80937A4() -{ - ResetPaletteFade(); - ResetSpriteData(); - FreeAllSpritePalettes(); - ResetTasks(); -} - -void sub_80937BC() -{ - SetUpWindowConfig(&WindowConfig_TrainerCard_Back_Values); - MultistepInitMenuWindowBegin(&WindowConfig_TrainerCard_Back_Values); -} - -static void sub_80937D8() -{ - sub_8093E04(); - sub_8093E28(); - sub_8093F64(); - sub_8093DAC(); -} - -static void sub_80937F0() -{ - sub_8093EF8(); -} - -static void nullsub_15(void) -{ -} - -static void sub_8093800() -{ - sub_809380C(); -} - -static void sub_809380C() -{ - u8 taskId; - - taskId = CreateTask(sub_809382C, 0); - sub_809382C(taskId); -} - -static void sub_809382C(u8 taskId) -{ - while (gUnknown_083B5EBC[ewram0.var_0](&gTasks[taskId]) != 0) - ; -} - -bool8 sub_8093864(struct Task *task) -{ - ewram0.var_5 = gSaveBlock2.playTimeSeconds & 1; - ewram0.var_6 = gSaveBlock2.playTimeVBlanks; - sub_80939A4(); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - ewram0.var_0++; - return FALSE; -} - -bool8 sub_80938A8(struct Task *task) -{ - if (!gPaletteFade.active) - ewram0.var_0++; - return FALSE; -} - -bool8 sub_80938CC(struct Task *task) -{ - if (gMain.newKeys & B_BUTTON) - { - ewram0.var_0 = 5; - return TRUE; - } - else if (gMain.newKeys & A_BUTTON) - { - if (ewram0.var_3 != 0) - { - ewram0.var_0 = 5; - } - else - { - ewram0.var_3 ^= 1; - ewram0.var_0 = 3; - } - return TRUE; - } - return FALSE; -} - -bool8 sub_8093918(struct Task *task) -{ - sub_8093A28(); - PlaySE(SE_CARD); - ewram0.var_0++; - return FALSE; -} - -bool8 sub_8093938(struct Task *task) -{ - if (sub_8093A48()) - ewram0.var_0 = 2; - return FALSE; -} - -bool8 sub_8093954(struct Task *task) -{ - sub_80939C0(); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - ewram0.var_0++; - return FALSE; -} - -bool8 sub_8093980(struct Task *task) -{ - if (!gPaletteFade.active) - SetMainCallback2((MainCallback)ewram0.var_60); - return FALSE; -} - -static void sub_80939A4(void) -{ - CreateTask(sub_80939DC, 0); - BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Values); -} - -static void sub_80939C0(void) -{ - u8 taskId = FindTaskIdByFunc(sub_80939DC); - - if (taskId != 0xFF) - DestroyTask(taskId); -} - -static void sub_80939DC(u8 taskId) -{ - u8 buffer[32]; - struct Task *task = &gTasks[taskId]; - - if (ewram0.var_5 != task->data[TD_1]) - { - task->data[TD_1] = ewram0.var_5; - task->data[TD_0] ^= TRUE; - } - TrainerCard_Front_PrintPlayTime(buffer, task->data[TD_0]); - MenuPrint(buffer, 10, 12); -} - -static void sub_8093A28(void) -{ - u8 taskId; - - taskId = CreateTask(sub_8093A68, 0); - sub_8093A68(taskId); -} - -static u8 sub_8093A48(void) -{ - if (FindTaskIdByFunc(sub_8093A68) == 0xFF) - return TRUE; - else - return FALSE; -} - -static void sub_8093A68(u8 taskId) -{ - while (gUnknown_083B5ED8[gTasks[taskId].data[0]](&gTasks[taskId]) != 0) - ; -} - -bool8 sub_8093AA0(struct Task *task) -{ - s32 i; - - ewram0.var_4 = FALSE; - dp12_8087EA4(); - for (i = 0; i < ARRAY_COUNT(gUnknown_03004DE0.unk780); i++) - gUnknown_03004DE0.unk780[i] = -4; - SetHBlankCallback(sub_8093D7C); - ewram0.var_4 = TRUE; - task->data[0]++; - return FALSE; -} - -/* -bool8 sub_8093AF0(struct Task *task) -{ - u32 r7; - u16 r9; - u32 r6; - u32 r5; - u32 r4; - u32 r10; - u32 sp0; - s16 i; - - ewram0.var_4 = 0; - task->data[1] += 3; - if (task->data[1] > 79) - task->data[1] = 79; - - r7 = task->data[1]; - r9 = 160 - r7; - r4 = r9 - r7; - r6 = -r7 << 16; - r5 = (160 << 16) / r4; - r5 -= 1 << 16; - r10 = r5 * r4 + r6; - sp0 = r5 / r4; - r5 *= 2; - - for (i = 0; i < r7; i++) - { - gUnknown_03004DE0.filler0[i] = -4 - (u32)i; - } - //_08093B74 - for (; i < r9; i++) - { - u16 var = r6 >> 16; - r6 += r5; - r5 -= sp0; - gUnknown_03004DE0.filler0[i] = -4 + var; - } - for (; i < 160; i++) - gUnknown_03004DE0.filler0[i] = -4 + (u16)(r10 >> 16); - ewram0.var_4 = 1; - if (task->data[1] > 0x4A) - task->data[0]++; - return FALSE; -} -*/ - -__attribute__((naked)) -bool8 sub_8093AF0(struct Task *task) -{ - 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 r8, r0\n\ - ldr r1, _08093BFC @ =0x02000000\n\ - movs r0, 0\n\ - strb r0, [r1, 0x4]\n\ - mov r2, r8\n\ - ldrh r0, [r2, 0xA]\n\ - adds r0, 0x3\n\ - strh r0, [r2, 0xA]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x4F\n\ - ble _08093B18\n\ - movs r0, 0x4F\n\ - strh r0, [r2, 0xA]\n\ -_08093B18:\n\ - mov r4, r8\n\ - movs r0, 0xA\n\ - ldrsh r7, [r4, r0]\n\ - movs r0, 0xA0\n\ - subs r0, r7\n\ - mov r9, r0\n\ - subs r4, r0, r7\n\ - negs r0, r7\n\ - lsls r6, r0, 16\n\ - movs r0, 0xA0\n\ - lsls r0, 16\n\ - adds r1, r4, 0\n\ - bl __udivsi3\n\ - adds r5, r0, 0\n\ - ldr r1, _08093C00 @ =0xffff0000\n\ - adds r5, r1\n\ - adds r0, r5, 0\n\ - muls r0, r4\n\ - adds r0, r6\n\ - mov r10, r0\n\ - adds r0, r5, 0\n\ - adds r1, r4, 0\n\ - bl __udivsi3\n\ - str r0, [sp]\n\ - lsls r5, 1\n\ - movs r3, 0\n\ - cmp r3, r7\n\ - bcs _08093B74\n\ - ldr r2, _08093C04 @ =gUnknown_03004DE0\n\ - mov r12, r2\n\ - ldr r0, _08093C08 @ =0x0000fffc\n\ - adds r4, r0, 0\n\ -_08093B5C:\n\ - lsls r0, r3, 16\n\ - asrs r0, 16\n\ - lsls r1, r0, 1\n\ - add r1, r12\n\ - subs r2, r4, r0\n\ - strh r2, [r1]\n\ - adds r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, r7\n\ - bcc _08093B5C\n\ -_08093B74:\n\ - lsls r2, r3, 16\n\ - mov r1, r9\n\ - lsls r0, r1, 16\n\ - asrs r1, r0, 16\n\ - mov r4, r10\n\ - lsrs r7, r4, 16\n\ - cmp r2, r0\n\ - bge _08093BAE\n\ - ldr r0, _08093C04 @ =gUnknown_03004DE0\n\ - mov r9, r0\n\ - ldr r4, _08093C08 @ =0x0000fffc\n\ - mov r12, r4\n\ - adds r4, r1, 0\n\ -_08093B8E:\n\ - lsrs r1, r6, 16\n\ - adds r6, r5\n\ - ldr r0, [sp]\n\ - subs r5, r0\n\ - asrs r2, 16\n\ - lsls r0, r2, 1\n\ - add r0, r9\n\ - add r1, r12\n\ - strh r1, [r0]\n\ - adds r2, 0x1\n\ - lsls r2, 16\n\ - lsrs r3, r2, 16\n\ - lsls r2, r3, 16\n\ - asrs r0, r2, 16\n\ - cmp r0, r4\n\ - blt _08093B8E\n\ -_08093BAE:\n\ - adds r1, r7, 0\n\ - lsls r0, r3, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x9F\n\ - bgt _08093BD4\n\ - ldr r4, _08093C04 @ =gUnknown_03004DE0\n\ - ldr r0, _08093C08 @ =0x0000fffc\n\ - adds r2, r1, r0\n\ -_08093BBE:\n\ - lsls r1, r3, 16\n\ - asrs r1, 16\n\ - lsls r0, r1, 1\n\ - adds r0, r4\n\ - strh r2, [r0]\n\ - adds r1, 0x1\n\ - lsls r1, 16\n\ - lsrs r3, r1, 16\n\ - asrs r1, 16\n\ - cmp r1, 0x9F\n\ - ble _08093BBE\n\ -_08093BD4:\n\ - movs r0, 0x1\n\ - ldr r1, _08093BFC @ =0x02000000\n\ - strb r0, [r1, 0x4]\n\ - mov r2, r8\n\ - movs r4, 0xA\n\ - ldrsh r0, [r2, r4]\n\ - cmp r0, 0x4A\n\ - ble _08093BEA\n\ - ldrh r0, [r2, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r2, 0x8]\n\ -_08093BEA:\n\ - movs r0, 0\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 {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_08093BFC: .4byte 0x02000000\n\ -_08093C00: .4byte 0xffff0000\n\ -_08093C04: .4byte gUnknown_03004DE0\n\ -_08093C08: .4byte 0x0000fffc\n\ - .syntax divided\n"); -} - -bool8 sub_8093C0C(struct Task *task) -{ - sub_80939C0(); - sub_8093DAC(); - if (!ewram0.var_3) - sub_80939A4(); - task->data[0]++; - return TRUE; -} - -__attribute__((naked)) -bool8 sub_8093C38(struct Task *task) -{ - 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 r8, r0\n\ - ldr r1, _08093D40 @ =0x02000000\n\ - movs r2, 0\n\ - strb r2, [r1, 0x4]\n\ - ldrh r0, [r0, 0xA]\n\ - subs r0, 0x3\n\ - mov r3, r8\n\ - strh r0, [r3, 0xA]\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - bgt _08093C5C\n\ - strh r2, [r3, 0xA]\n\ -_08093C5C:\n\ - mov r4, r8\n\ - movs r0, 0xA\n\ - ldrsh r7, [r4, r0]\n\ - movs r0, 0xA0\n\ - subs r0, r7\n\ - mov r9, r0\n\ - subs r4, r0, r7\n\ - negs r0, r7\n\ - lsls r6, r0, 16\n\ - movs r0, 0xA0\n\ - lsls r0, 16\n\ - adds r1, r4, 0\n\ - bl __udivsi3\n\ - adds r5, r0, 0\n\ - ldr r1, _08093D44 @ =0xffff0000\n\ - adds r5, r1\n\ - adds r0, r5, 0\n\ - muls r0, r4\n\ - adds r0, r6\n\ - mov r10, r0\n\ - adds r0, r5, 0\n\ - adds r1, r4, 0\n\ - bl __udivsi3\n\ - str r0, [sp]\n\ - lsrs r5, 1\n\ - movs r3, 0\n\ - cmp r3, r7\n\ - bcs _08093CB8\n\ - ldr r2, _08093D48 @ =gUnknown_03004DE0\n\ - mov r12, r2\n\ - ldr r0, _08093D4C @ =0x0000fffc\n\ - adds r4, r0, 0\n\ -_08093CA0:\n\ - lsls r0, r3, 16\n\ - asrs r0, 16\n\ - lsls r1, r0, 1\n\ - add r1, r12\n\ - subs r2, r4, r0\n\ - strh r2, [r1]\n\ - adds r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, r7\n\ - bcc _08093CA0\n\ -_08093CB8:\n\ - lsls r2, r3, 16\n\ - mov r1, r9\n\ - lsls r0, r1, 16\n\ - asrs r1, r0, 16\n\ - mov r4, r10\n\ - lsrs r7, r4, 16\n\ - cmp r2, r0\n\ - bge _08093CF2\n\ - ldr r0, _08093D48 @ =gUnknown_03004DE0\n\ - mov r9, r0\n\ - ldr r3, _08093D4C @ =0x0000fffc\n\ - mov r12, r3\n\ - adds r4, r1, 0\n\ -_08093CD2:\n\ - lsrs r1, r6, 16\n\ - adds r6, r5\n\ - ldr r0, [sp]\n\ - adds r5, r0\n\ - asrs r2, 16\n\ - lsls r0, r2, 1\n\ - add r0, r9\n\ - add r1, r12\n\ - strh r1, [r0]\n\ - adds r2, 0x1\n\ - lsls r2, 16\n\ - lsrs r3, r2, 16\n\ - lsls r2, r3, 16\n\ - asrs r0, r2, 16\n\ - cmp r0, r4\n\ - blt _08093CD2\n\ -_08093CF2:\n\ - adds r1, r7, 0\n\ - lsls r0, r3, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x9F\n\ - bgt _08093D18\n\ - ldr r4, _08093D48 @ =gUnknown_03004DE0\n\ - ldr r0, _08093D4C @ =0x0000fffc\n\ - adds r2, r1, r0\n\ -_08093D02:\n\ - lsls r1, r3, 16\n\ - asrs r1, 16\n\ - lsls r0, r1, 1\n\ - adds r0, r4\n\ - strh r2, [r0]\n\ - adds r1, 0x1\n\ - lsls r1, 16\n\ - lsrs r3, r1, 16\n\ - asrs r1, 16\n\ - cmp r1, 0x9F\n\ - ble _08093D02\n\ -_08093D18:\n\ - movs r0, 0x1\n\ - ldr r1, _08093D40 @ =0x02000000\n\ - strb r0, [r1, 0x4]\n\ - mov r2, r8\n\ - movs r3, 0xA\n\ - ldrsh r0, [r2, r3]\n\ - cmp r0, 0\n\ - bgt _08093D2E\n\ - ldrh r0, [r2, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r2, 0x8]\n\ -_08093D2E:\n\ - movs r0, 0\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 {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_08093D40: .4byte 0x02000000\n\ -_08093D44: .4byte 0xffff0000\n\ -_08093D48: .4byte gUnknown_03004DE0\n\ -_08093D4C: .4byte 0x0000fffc\n\ - .syntax divided\n"); -} - -bool8 sub_8093D50(struct Task *task) -{ - u8 taskId; - - ewram0.var_4 = FALSE; - SetHBlankCallback(NULL); - sub_8093E04(); - taskId = FindTaskIdByFunc(sub_8093A68); - DestroyTask(taskId); - return FALSE; -} - -void sub_8093D7C(void) -{ - u16 bgVOffset = gUnknown_03004DE0.unk780[REG_VCOUNT & 0xFF]; - - REG_BG0VOFS = bgVOffset; - REG_BG1VOFS = bgVOffset; - REG_BG2VOFS = bgVOffset; -} - -static void sub_8093DAC(void) -{ - if (ewram0.var_3) - sub_8093DEC(); - else - sub_8093DC8(); -} - -static void sub_8093DC8(void) -{ - MenuZeroFillScreen(); - sub_80940E4(); - sub_8093F14(); - sub_8093F80(); - sub_8093FD0(); - sub_8094038(); - sub_8094140(); -} - -static void sub_8093DEC(void) -{ - MenuZeroFillScreen(); - sub_80940E4(); - sub_8093F48(); - sub_8094188(); -} - -static void sub_8093E04(void) -{ - REG_BG0VOFS = -4; - REG_BG1HOFS = 0; - REG_BG1VOFS = -4; - REG_BG2HOFS = 0; - REG_BG2VOFS = -4; -} - -static void sub_8093E28(void) -{ - const u8 *src; - u8 *dst; - u32 size; - - sub_8093EA0(); - LoadPalette(gUnknown_083B5F6C, 0xE0, 32); - src = gMenuTrainerCard_Gfx; - dst = (void *)VRAM; - size = 0x1480; - while (1) - { - DmaCopy16(3, src, dst, 0x1000); - src += 0x1000; - dst += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaCopy16(3, src, dst, size); - break; - } - } - { - const void *src = gBadgesTiles; - void *dst = (void *)(VRAM + 0x1480); - - DmaCopy16(3, src, dst, 0x400); - } -} - -extern const u16 *const gUnknown_083B5EF8[]; - -void sub_8093EA0(void) -{ - LoadPalette(gUnknown_083B5EF8[ewram0.var_2], 0, 48 * 2); - LoadPalette(gBadgesPalette, 48, 16 * 2); - LoadPalette(gUnknown_083B5F4C, 64, 16 * 2); - if (ewram0.var_64.gender != MALE) - LoadPalette(gUnknown_083B5F0C, 16, 16 * 2); -} - -static void sub_8093EF8(void) -{ - LoadTrainerGfx_TrainerCard(ewram0.var_64.gender, 80, (void *)(VRAM + 0x1880)); -} - -static void sub_8093F14(void) -{ - const void *arr[] = {gUnknown_08E8CAC0, gUnknown_08E8D4C0}; - - CpuFastSet(arr[ewram0.var_1], (void *)(VRAM + 0x4800), 0x140); -} - -// I don't really know where to put the data. It's in such a weird order. - -const u8 gUnknown_083B5EF4[] = _(" : "); - -const u16 *const gUnknown_083B5EF8[] = -{ - gMenuTrainerCard0Star_Pal, - gMenuTrainerCard1Star_Pal, - gMenuTrainerCard2Star_Pal, - gMenuTrainerCard3Star_Pal, - gMenuTrainerCard4Star_Pal, -}; - -const u16 gUnknown_083B5F0C[] = INCBIN_U16("graphics/trainer_card/83B5F0C.gbapal"); -const u16 gBadgesPalette[] = INCBIN_U16("graphics/trainer_card/badges.gbapal"); -const u16 gUnknown_083B5F4C[] = INCBIN_U16("graphics/trainer_card/83B5F4C.gbapal"); -const u16 gUnknown_083B5F6C[] = INCBIN_U16("graphics/trainer_card/83B5F6C.gbapal"); -const u16 gUnknown_083B5F8C[][4] = INCBIN_U16("graphics/trainer_card/83B5F8C_map.bin"); - -static void sub_8093F48(void) -{ - CpuFastSet(gUnknown_08E8CFC0, (void *)(VRAM + 0x4800), 320); -} - -static void sub_8093F64(void) -{ - CpuFastSet(gUnknown_08E8D9C0, (void *)(VRAM + 0x5000), 320); -} - -static void sub_8093F80(void) -{ - u16 r5 = 0xC4; - u16 *ptr = (u16 *)(VRAM + 0x4000); - s16 i; - s16 j; - - for (i = 5; i < 13; i++) - { - for (j = 19; j < 27; j++, r5++) - ptr[i * 32 + j] = r5 | 0x5000; - } -} - -static void sub_8093FD0(void) -{ - u16 *ptr = (u16 *)(VRAM + 0x4000); - s16 i = 15; - s16 var = 15 + ewram0.var_2; - - while (i < var) - { - ptr[6 * 32 + i] = 0x408F; - i++; - } - while (i < 0x13) - { - ptr[6 * 32 + i] = 0; - i++; - } -} - -static void sub_8094038(void) -{ - if (ewram0.var_1 == 0) - { - u16 *ptr = (u16 *)(VRAM + 0x4000); - s16 i; - s16 r2; - - for (i = 0, r2 = 4; i < 8; i++, r2 += 3) - { - if (ewram0.var_e[i] != 0) - { - ptr[15 * 32 + r2 + 0] = gUnknown_083B5F8C[i][0] | 0x3000; - ptr[15 * 32 + r2 + 1] = gUnknown_083B5F8C[i][1] | 0x3000; - ptr[16 * 32 + r2 + 0] = gUnknown_083B5F8C[i][2] | 0x3000; - ptr[16 * 32 + r2 + 1] = gUnknown_083B5F8C[i][3] | 0x3000; - } - } - } -} - -static void sub_80940E4(void) -{ - s16 i; - u16 *ptr; - - for (i = 0, ptr = (u16 *)(VRAM + 0x4000); i < 0x400; i++, ptr++) - *ptr = 0; -} - -static void sub_8094110(void) -{ - u16 *ptr = (u16 *)(VRAM + 0x4800); - u16 i; - - for (i = 3; i < 17; i++) - { - ptr[10 * 32 + i] = 1; - ptr[11 * 32 + i] = 1; - } -} - -static void sub_8094140(void) -{ - u8 *buffer; - - BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Values); - - buffer = gStringVar1; - StringCopy(buffer, ewram0.var_64.playerName); - ConvertInternationalString(buffer, ewram0.language); - MenuPrint(buffer, 7, 5); - - TrainerCard_Front_PrintTrainerID(); - TrainerCard_Front_PrintMoney(); - TrainerCard_Front_PrintPokedexCount(); - sub_809429C(); -} - -static void sub_8094188(void) -{ - BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Values); - TrainerCard_Back_PrintName(); - TrainerCard_Back_PrintHallOfFameTime_Label(); - TrainerCard_Back_PrintLinkBattlesLabel(); - TrainerCard_Back_PrintBattleTower_Label(); - TrainerCard_Back_PrintLinkContests_Label(); - TrainerCard_Back_PrintLinkPokeblocks_Label(); - TrainerCard_Back_PrintPokemonTrades_Label(); - - BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Labels); - TrainerCard_Back_PrintHallOfFameTime(); - TrainerCard_Back_PrintLinkBattles(); - TrainerCard_Back_PrintBattleTower(); - TrainerCard_Back_PrintLinkContests(); - TrainerCard_Back_PrintLinkPokeblocks(); - TrainerCard_Back_PrintPokemonTrades(); -} - -static void TrainerCard_Front_PrintTrainerID(void) -{ - u8 buffer[8]; - - ConvertIntToDecimalStringN(buffer, ewram0.var_64.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); - MenuPrint(buffer, 20, 2); -} - -static void TrainerCard_Front_PrintMoney(void) -{ - sub_80B7AEC(ewram0.var_64.money, 16, 8); -} - -static void TrainerCard_Front_PrintPokedexCount(void) -{ - u8 buffer[16]; - - if (ewram0.var_7 == FALSE) - { - sub_8094110(); - } - else - { - ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokedexSeen, STR_CONV_MODE_LEFT_ALIGN, 3); - MenuPrint_RightAligned(buffer, 16, 10); - } -} - -static void TrainerCard_Front_PrintPlayTime(u8 *arg1, s16 colon) -{ - u8 buffer[16]; - u16 playTimeHours; - u16 playTimeMinutes; - - playTimeHours = gSaveBlock2.playTimeHours; - playTimeMinutes = gSaveBlock2.playTimeMinutes; - if (ewram0.var_1 != 0) - { - playTimeHours = ewram0.var_64.playTimeHours; - playTimeMinutes = ewram0.var_64.playTimeMinutes; - } - FormatPlayTime(buffer, playTimeHours, playTimeMinutes, colon); - sub_8072C74(arg1, buffer, 48, 1); -} - -static void sub_809429C(void) -{ - u8 *str; - - if (ewram0.var_1 != 0) - { - str = gStringVar1; - str = StringCopy(str, ewram0.var_20[0]); - str[0] = 00; - str++; - str = StringCopy(str, ewram0.var_20[1]); - MenuPrint(gStringVar1, 2, 14); - - str = gStringVar1; - str = StringCopy(str, ewram0.var_20[2]); - str[0] = 00; - str++; - str = StringCopy(str, ewram0.var_20[3]); - MenuPrint(gStringVar1, 2, 16); - } -} - -static void TrainerCard_Back_PrintName(void) -{ - u8 *str; - - str = gStringVar1; - StringCopy(str, ewram0.var_64.playerName); - ConvertInternationalString(str, ewram0.language); - -#if ENGLISH - StringAppend(str, gOtherText_TrainersTrainerCard); -#elif GERMAN - de_sub_8073174(str, gOtherText_TrainersTrainerCard); -#endif - - MenuPrint_RightAligned(gStringVar1, 28, 2); -} - -static void TrainerCard_Back_PrintHallOfFameTime_Label(void) -{ - if (ewram0.var_8 != 0) - MenuPrint(gOtherText_FirstHOF, 3, 5); -} - -static void TrainerCard_Back_PrintHallOfFameTime(void) -{ - u8 *str; - - if (ewram0.var_8 != 0) - { - str = gStringVar1; - str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameA, STR_CONV_MODE_RIGHT_ALIGN, 3); - str = StringCopy(str, gUnknown_083B5EF4); - str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameB, STR_CONV_MODE_LEADING_ZEROS, 2); - str = StringCopy(str, gUnknown_083B5EF4); - str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameC, STR_CONV_MODE_LEADING_ZEROS, 2); - MenuPrint_RightAligned(gStringVar1, 28, 5); - } -} - -static void TrainerCard_Back_PrintLinkBattlesLabel(void) -{ - if (ewram0.var_9 != 0) - MenuPrint(gOtherText_LinkCableBattles, 3, 7); -} - -static void TrainerCard_Back_PrintLinkBattles(void) -{ - u8 buffer[16]; - - if (ewram0.var_9 != 0) - { - ConvertIntToDecimalString(buffer, ewram0.var_64.linkBattleWins); - MenuPrint_RightAligned(buffer, 22, 7); - - ConvertIntToDecimalString(buffer, ewram0.var_64.linkBattleLosses); - MenuPrint_RightAligned(buffer, 28, 7); - } -} - -static void TrainerCard_Back_PrintBattleTower_Label(void) -{ - if (ewram0.var_a != 0) - MenuPrint(gOtherText_BattleTowerWinRecord, 3, 15); -} - -static void TrainerCard_Back_PrintBattleTower(void) -{ - u8 buffer[16]; - - if (ewram0.var_a != 0) - { - sub_8072C44(buffer, ewram0.var_64.battleTowerWins, 24, 1); - MenuPrint_PixelCoords(buffer, 112, 120, 0); - - sub_8072C44(buffer, ewram0.var_64.battleTowerLosses, 24, 1); - MenuPrint_PixelCoords(buffer, 149, 120, 0); - } -} - -static void TrainerCard_Back_PrintLinkContests_Label(void) -{ - if (ewram0.var_b != 0) - MenuPrint(gOtherText_ContestRecord, 3, 13); -} - -static void TrainerCard_Back_PrintLinkContests(void) -{ - u8 buffer[8]; - - if (ewram0.var_b != 0) - { - ConvertIntToDecimalStringN(buffer, ewram0.var_64.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 3); - MenuPrint_RightAligned(buffer, 28, 13); - } -} - -static void TrainerCard_Back_PrintLinkPokeblocks_Label(void) -{ - if (ewram0.var_c != 0) - MenuPrint(gOtherText_MixingRecord, 3, 11); -} - -static void TrainerCard_Back_PrintLinkPokeblocks(void) -{ - u8 buffer[8]; - - if (ewram0.var_c != 0) - { - ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokeblocksWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5); - MenuPrint_RightAligned(buffer, 28, 11); - } -} - -static void TrainerCard_Back_PrintPokemonTrades_Label(void) -{ - if (ewram0.var_d != 0) - MenuPrint(gOtherText_TradeRecord, 3, 9); -} - -static void TrainerCard_Back_PrintPokemonTrades(void) -{ - u8 buffer[8]; - - if (ewram0.var_d != 0) - { - ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5); - MenuPrint_RightAligned(buffer, 28, 9); - } -} - -void unref_sub_8094588(u16 left, u16 top) -{ - const u8 *text = gOtherText_Boy; - - if (gSaveBlock2.playerGender == FEMALE) - text = gOtherText_Girl; - MenuPrint(text, left, top); -} diff --git a/src/trainer_see.c b/src/trainer_see.c deleted file mode 100644 index feb35c67c..000000000 --- a/src/trainer_see.c +++ /dev/null @@ -1,455 +0,0 @@ -#include "global.h" -#include "trainer_see.h" -#include "battle_setup.h" -#include "field_effect.h" -#include "field_map_obj.h" -#include "field_player_avatar.h" -#include "script.h" -#include "sprite.h" -#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 *); - -extern struct SpriteTemplate gSpriteTemplate_839B510; -extern struct SpriteTemplate gSpriteTemplate_839B528; - -bool8 CheckTrainers(void) -{ - u8 i; - - for (i = 0; i < 16; i++) - { - if ( gMapObjects[i].active ) - if ( gMapObjects[i].trainerType == 1 || gMapObjects[i].trainerType == 3 ) - if ( CheckTrainer(i) ) - return TRUE; - } - return FALSE; -} - -bool8 CheckTrainer(u8 trainer) -{ - u8 *scriptPtr = GetFieldObjectScriptPointerByFieldObjectId(trainer); - - if (GetTrainerFlagFromScriptPointer(scriptPtr)) - return FALSE; - else - { - struct MapObject *trainerObj = &gMapObjects[trainer]; - u8 canApproach = TrainerCanApproachPlayer(trainerObj); - - if (canApproach != 0) - { - TrainerWantsBattle(trainer, scriptPtr); - sub_80842C8(trainerObj, (canApproach - 1)); - return TRUE; - } - else - { - return FALSE; - } - } -} - -bool8 TrainerCanApproachPlayer(struct MapObject *trainerObj) -{ - s16 x, y; - u8 i; - u8 playerCoord; - - PlayerGetDestCoords(&x, &y); - if ( trainerObj->trainerType == 1 ) // trainers that don't spin - { - playerCoord = gIsTrainerInRange[trainerObj->mapobj_unk_18 - 1](trainerObj, trainerObj->trainerRange_berryTreeId, x, y); - return CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, playerCoord, trainerObj->mapobj_unk_18); - } - else // spinners - { - 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; - } - return FALSE; - } -} - -bool8 IsTrainerInRangeSouth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) -{ - if ( trainerObj->coords2.x == x - && y > trainerObj->coords2.y - && y <= trainerObj->coords2.y + vision ) - return (y - trainerObj->coords2.y); - else - return FALSE; -} - -bool8 IsTrainerInRangeNorth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) -{ - if ( trainerObj->coords2.x == x - && y < trainerObj->coords2.y - && y >= trainerObj->coords2.y - vision ) - return (trainerObj->coords2.y - y); - else - return FALSE; -} - -bool8 IsTrainerInRangeWest(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) -{ - if ( trainerObj->coords2.y == y - && x < trainerObj->coords2.x - && x >= trainerObj->coords2.x - vision ) - return (trainerObj->coords2.x - x); - else - return FALSE; -} - -bool8 IsTrainerInRangeEast(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) -{ - if ( trainerObj->coords2.y == y - && x > trainerObj->coords2.x - && x <= trainerObj->coords2.x + vision ) - return (x - trainerObj->coords2.x); - else - return FALSE; -} - -#ifdef BUGFIX_TRAINERAPPROACH -#define COLLISION_MASK ~1 -#else -#define COLLISION_MASK 1 -#endif - -bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *trainerObj, u8 playerCoord, u8 direction) -{ - s16 x, y; - u8 unk19_temp; - u8 unk19b_temp; - u8 i; - u8 var; - - if (!playerCoord) - return FALSE; - - x = trainerObj->coords2.x; - y = trainerObj->coords2.y; - - for (i = 0; i <= playerCoord - 1; i++, MoveCoords(direction, &x, &y)) - { - var = sub_8060024((struct MapObject *)trainerObj, x, y, direction); - - if (var && (var & COLLISION_MASK)) - return FALSE; - } - - // preserve mapobj_unk_19 before clearing. - unk19_temp = trainerObj->mapobj_unk_19; - unk19b_temp = trainerObj->mapobj_unk_19b; - trainerObj->mapobj_unk_19 = 0; - trainerObj->mapobj_unk_19b = 0; - - var = 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; - - return FALSE; -} - -void sub_80842C8(struct MapObject *trainerObj, u8 taskId) -{ - struct Task *task = &gTasks[CreateTask(RunTrainerSeeFuncList, 0x50)]; - - task->data[1] = (u32)(trainerObj) >> 16; - task->data[2] = (u32)(trainerObj); - task->data[3] = taskId; -} - -void sub_80842FC(TaskFunc func) -{ - TaskFunc func2 = RunTrainerSeeFuncList; - u8 taskId = FindTaskIdByFunc(func2); - - SetTaskFuncWithFollowupFunc(taskId, RunTrainerSeeFuncList, func); - gTasks[taskId].data[0] = 1; - func2(taskId); -} - -void RunTrainerSeeFuncList(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - struct MapObject *trainerObj = (struct MapObject *)((task->data[1] << 16) | (task->data[2])); - - if (!trainerObj->active) - SwitchTaskToFollowupFunc(taskId); - else - while (gTrainerSeeFuncList[task->data[0]](taskId, task, trainerObj)); -} - -u8 sub_8084394() // cant be void because it is called with RunTrainerSeeFuncList with arguments. -{ - return 0; -} - -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]); - FieldEffectStart(0); - - direction = GetFaceDirectionAnimId(trainerObj->mapobj_unk_18); - - FieldObjectSetSpecialAnim(trainerObj, direction); - task->data[0]++; - return 1; -} - -s8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj) -{ - if (FieldEffectActiveListContains(0)) - return 0; - else - { - task->data[0]++; - if ((u8)(trainerObj->animPattern - 57) <= 1) - task->data[0] = 6; - if (trainerObj->animPattern == 63) - task->data[0] = 8; - return 1; - } -} - -s8 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]++; - } - } - return 0; -} - -s8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj) -{ - struct MapObject *playerObj; - - if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) && !FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) - return 0; - - 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; - - sub_80597E8(); - FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], GetFaceDirectionAnimId(GetOppositeDirection(trainerObj->mapobj_unk_18))); - task->data[0]++; - return 0; -} - -s8 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; -} - -s8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj) -{ - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) - || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) - { - FieldObjectSetSpecialAnim(trainerObj, 0x59); - task->data[0]++; - } - return 0; -} - -s8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj) -{ - if ( FieldObjectClearAnimIfSpecialAnimFinished(trainerObj) ) - task->data[0] = 3; - - return 0; -} - -s8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj) -{ - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) - || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) - { - FieldObjectSetSpecialAnim(trainerObj, 0x3E); - task->data[0]++; - } - return 0; -} - -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; - task->data[4] = FieldEffectStart(49); - task->data[0]++; - } - return 0; -} - -s8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj) -{ - struct Sprite *sprite; - - if (gSprites[task->data[4]].animCmdIndex == 2) - { - trainerObj->mapobj_bit_26 = 0; - trainerObj->mapobj_bit_2 = 1; - - sprite = &gSprites[trainerObj->spriteId]; - sprite->oam.priority = 2; - FieldObjectClearAnimIfSpecialAnimFinished(trainerObj); - FieldObjectSetSpecialAnim(trainerObj, sub_806084C(trainerObj->mapobj_unk_18)); - task->data[0]++; - } - return 0; -} - -s8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj) -{ - if (!FieldEffectActiveListContains(49)) - task->data[0] = 3; - - return 0; -} - -void sub_80846E4(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - struct MapObject *mapObj; - - // another mapObj loaded into by loadword? - LoadWordFromTwoHalfwords(&task->data[1], (u32 *)&mapObj); - if (!task->data[7]) - { - FieldObjectClearAnim(mapObj); - task->data[7]++; - } - gTrainerSeeFuncList2[task->data[0]](taskId, task, mapObj); - if (task->data[0] == 3 && !FieldEffectActiveListContains(49)) - { - npc_set_running_behaviour_etc(mapObj, npc_running_behaviour_by_direction(mapObj->mapobj_unk_18)); - sub_805C774(mapObj, npc_running_behaviour_by_direction(mapObj->mapobj_unk_18)); - DestroyTask(taskId); - } - else - mapObj->mapobj_bit_7 = 0; -} - -void sub_8084794(struct MapObject *var) -{ - StoreWordInTwoHalfwords(&gTasks[CreateTask(sub_80846E4, 0)].data[1], (u32)var); -} - -void sub_80847C8(void) -{ - sub_80842FC(sub_80847D8); -} - -void sub_80847D8(u8 taskId) -{ - DestroyTask(taskId); - EnableBothScriptContexts(); -} - -u8 FldEff_ExclamationMarkIcon1(void) -{ - u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B510, 0, 0, 0x53); - - if (spriteId != 64) - sub_8084894(&gSprites[spriteId], 0, 0); - - return 0; -} - -u8 FldEff_ExclamationMarkIcon2(void) -{ - u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B510, 0, 0, 0x52); - - if (spriteId != 64) - sub_8084894(&gSprites[spriteId], 33, 1); - - return 0; -} - -u8 FldEff_HeartIcon(void) -{ - u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B528, 0, 0, 0x52); - - if (spriteId != 64) - sub_8084894(&gSprites[spriteId], 46, 0); - - return 0; -} - -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->data3 = -5; - sprite->data7 = a2; - - StartSpriteAnim(sprite, a3); -} - -void objc_exclamation_mark_probably(struct Sprite *sprite) -{ - u8 mapObjId; - - if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjId) - || sprite->animEnded) - { - FieldEffectStop(sprite, (u8)sprite->data7); - } - else - { - struct Sprite *mapObjSprite = &gSprites[gMapObjects[mapObjId].spriteId]; - sprite->data4 += sprite->data3; - sprite->pos1.x = mapObjSprite->pos1.x; - sprite->pos1.y = mapObjSprite->pos1.y - 16; - sprite->pos2.x = mapObjSprite->pos2.x; - sprite->pos2.y = mapObjSprite->pos2.y + sprite->data4; - if (sprite->data4) - sprite->data3++; - else - sprite->data3 = 0; - } -} diff --git a/src/trig.c b/src/trig.c deleted file mode 100644 index e16a69e63..000000000 --- a/src/trig.c +++ /dev/null @@ -1,549 +0,0 @@ -#include "global.h" -#include "trig.h" - -// Converts a number to Q8.8 fixed-point format -#define Q_8_8(n) ((s16)((n) * 256)) - -// Converts a number to Q4.12 fixed-point format -#define Q_4_12(n) ((s16)((n) * 4096)) - -// Values of sin(x*(π/128)) as Q8.8 fixed-point numbers from x = 0 to x = 319 -const s16 gSineTable[] = -{ - Q_8_8(0), // sin(0*(π/128)) - Q_8_8(0.0234375), // sin(1*(π/128)) - Q_8_8(0.046875), // sin(2*(π/128)) - Q_8_8(0.0703125), // sin(3*(π/128)) - Q_8_8(0.09765625), // sin(4*(π/128)) - Q_8_8(0.12109375), // sin(5*(π/128)) - Q_8_8(0.14453125), // sin(6*(π/128)) - Q_8_8(0.16796875), // sin(7*(π/128)) - Q_8_8(0.19140625), // sin(8*(π/128)) - Q_8_8(0.21875), // sin(9*(π/128)) - Q_8_8(0.2421875), // sin(10*(π/128)) - Q_8_8(0.265625), // sin(11*(π/128)) - Q_8_8(0.2890625), // sin(12*(π/128)) - Q_8_8(0.3125), // sin(13*(π/128)) - Q_8_8(0.3359375), // sin(14*(π/128)) - Q_8_8(0.359375), // sin(15*(π/128)) - Q_8_8(0.37890625), // sin(16*(π/128)) - Q_8_8(0.40234375), // sin(17*(π/128)) - Q_8_8(0.42578125), // sin(18*(π/128)) - Q_8_8(0.44921875), // sin(19*(π/128)) - Q_8_8(0.46875), // sin(20*(π/128)) - Q_8_8(0.4921875), // sin(21*(π/128)) - Q_8_8(0.51171875), // sin(22*(π/128)) - Q_8_8(0.53125), // sin(23*(π/128)) - Q_8_8(0.5546875), // sin(24*(π/128)) - Q_8_8(0.57421875), // sin(25*(π/128)) - Q_8_8(0.59375), // sin(26*(π/128)) - Q_8_8(0.61328125), // sin(27*(π/128)) - Q_8_8(0.6328125), // sin(28*(π/128)) - Q_8_8(0.65234375), // sin(29*(π/128)) - Q_8_8(0.66796875), // sin(30*(π/128)) - Q_8_8(0.6875), // sin(31*(π/128)) - Q_8_8(0.70703125), // sin(32*(π/128)) - Q_8_8(0.72265625), // sin(33*(π/128)) - Q_8_8(0.73828125), // sin(34*(π/128)) - Q_8_8(0.75390625), // sin(35*(π/128)) - Q_8_8(0.76953125), // sin(36*(π/128)) - Q_8_8(0.78515625), // sin(37*(π/128)) - Q_8_8(0.80078125), // sin(38*(π/128)) - Q_8_8(0.81640625), // sin(39*(π/128)) - Q_8_8(0.828125), // sin(40*(π/128)) - Q_8_8(0.84375), // sin(41*(π/128)) - Q_8_8(0.85546875), // sin(42*(π/128)) - Q_8_8(0.8671875), // sin(43*(π/128)) - Q_8_8(0.87890625), // sin(44*(π/128)) - Q_8_8(0.890625), // sin(45*(π/128)) - Q_8_8(0.90234375), // sin(46*(π/128)) - Q_8_8(0.9140625), // sin(47*(π/128)) - Q_8_8(0.921875), // sin(48*(π/128)) - Q_8_8(0.9296875), // sin(49*(π/128)) - Q_8_8(0.94140625), // sin(50*(π/128)) - Q_8_8(0.94921875), // sin(51*(π/128)) - Q_8_8(0.953125), // sin(52*(π/128)) - Q_8_8(0.9609375), // sin(53*(π/128)) - Q_8_8(0.96875), // sin(54*(π/128)) - Q_8_8(0.97265625), // sin(55*(π/128)) - Q_8_8(0.98046875), // sin(56*(π/128)) - Q_8_8(0.984375), // sin(57*(π/128)) - Q_8_8(0.98828125), // sin(58*(π/128)) - Q_8_8(0.9921875), // sin(59*(π/128)) - Q_8_8(0.9921875), // sin(60*(π/128)) - Q_8_8(0.99609375), // sin(61*(π/128)) - Q_8_8(0.99609375), // sin(62*(π/128)) - Q_8_8(0.99609375), // sin(63*(π/128)) - Q_8_8(1), // sin(64*(π/128)) - Q_8_8(0.99609375), // sin(65*(π/128)) - Q_8_8(0.99609375), // sin(66*(π/128)) - Q_8_8(0.99609375), // sin(67*(π/128)) - Q_8_8(0.9921875), // sin(68*(π/128)) - Q_8_8(0.9921875), // sin(69*(π/128)) - Q_8_8(0.98828125), // sin(70*(π/128)) - Q_8_8(0.984375), // sin(71*(π/128)) - Q_8_8(0.98046875), // sin(72*(π/128)) - Q_8_8(0.97265625), // sin(73*(π/128)) - Q_8_8(0.96875), // sin(74*(π/128)) - Q_8_8(0.9609375), // sin(75*(π/128)) - Q_8_8(0.953125), // sin(76*(π/128)) - Q_8_8(0.94921875), // sin(77*(π/128)) - Q_8_8(0.94140625), // sin(78*(π/128)) - Q_8_8(0.9296875), // sin(79*(π/128)) - Q_8_8(0.921875), // sin(80*(π/128)) - Q_8_8(0.9140625), // sin(81*(π/128)) - Q_8_8(0.90234375), // sin(82*(π/128)) - Q_8_8(0.890625), // sin(83*(π/128)) - Q_8_8(0.87890625), // sin(84*(π/128)) - Q_8_8(0.8671875), // sin(85*(π/128)) - Q_8_8(0.85546875), // sin(86*(π/128)) - Q_8_8(0.84375), // sin(87*(π/128)) - Q_8_8(0.828125), // sin(88*(π/128)) - Q_8_8(0.81640625), // sin(89*(π/128)) - Q_8_8(0.80078125), // sin(90*(π/128)) - Q_8_8(0.78515625), // sin(91*(π/128)) - Q_8_8(0.76953125), // sin(92*(π/128)) - Q_8_8(0.75390625), // sin(93*(π/128)) - Q_8_8(0.73828125), // sin(94*(π/128)) - Q_8_8(0.72265625), // sin(95*(π/128)) - Q_8_8(0.70703125), // sin(96*(π/128)) - Q_8_8(0.6875), // sin(97*(π/128)) - Q_8_8(0.66796875), // sin(98*(π/128)) - Q_8_8(0.65234375), // sin(99*(π/128)) - Q_8_8(0.6328125), // sin(100*(π/128)) - Q_8_8(0.61328125), // sin(101*(π/128)) - Q_8_8(0.59375), // sin(102*(π/128)) - Q_8_8(0.57421875), // sin(103*(π/128)) - Q_8_8(0.5546875), // sin(104*(π/128)) - Q_8_8(0.53125), // sin(105*(π/128)) - Q_8_8(0.51171875), // sin(106*(π/128)) - Q_8_8(0.4921875), // sin(107*(π/128)) - Q_8_8(0.46875), // sin(108*(π/128)) - Q_8_8(0.44921875), // sin(109*(π/128)) - Q_8_8(0.42578125), // sin(110*(π/128)) - Q_8_8(0.40234375), // sin(111*(π/128)) - Q_8_8(0.37890625), // sin(112*(π/128)) - Q_8_8(0.359375), // sin(113*(π/128)) - Q_8_8(0.3359375), // sin(114*(π/128)) - Q_8_8(0.3125), // sin(115*(π/128)) - Q_8_8(0.2890625), // sin(116*(π/128)) - Q_8_8(0.265625), // sin(117*(π/128)) - Q_8_8(0.2421875), // sin(118*(π/128)) - Q_8_8(0.21875), // sin(119*(π/128)) - Q_8_8(0.19140625), // sin(120*(π/128)) - Q_8_8(0.16796875), // sin(121*(π/128)) - Q_8_8(0.14453125), // sin(122*(π/128)) - Q_8_8(0.12109375), // sin(123*(π/128)) - Q_8_8(0.09765625), // sin(124*(π/128)) - Q_8_8(0.0703125), // sin(125*(π/128)) - Q_8_8(0.046875), // sin(126*(π/128)) - Q_8_8(0.0234375), // sin(127*(π/128)) - Q_8_8(0), // sin(128*(π/128)) - Q_8_8(-0.0234375), // sin(129*(π/128)) - Q_8_8(-0.046875), // sin(130*(π/128)) - Q_8_8(-0.0703125), // sin(131*(π/128)) - Q_8_8(-0.09765625), // sin(132*(π/128)) - Q_8_8(-0.12109375), // sin(133*(π/128)) - Q_8_8(-0.14453125), // sin(134*(π/128)) - Q_8_8(-0.16796875), // sin(135*(π/128)) - Q_8_8(-0.19140625), // sin(136*(π/128)) - Q_8_8(-0.21875), // sin(137*(π/128)) - Q_8_8(-0.2421875), // sin(138*(π/128)) - Q_8_8(-0.265625), // sin(139*(π/128)) - Q_8_8(-0.2890625), // sin(140*(π/128)) - Q_8_8(-0.3125), // sin(141*(π/128)) - Q_8_8(-0.3359375), // sin(142*(π/128)) - Q_8_8(-0.359375), // sin(143*(π/128)) - Q_8_8(-0.37890625), // sin(144*(π/128)) - Q_8_8(-0.40234375), // sin(145*(π/128)) - Q_8_8(-0.42578125), // sin(146*(π/128)) - Q_8_8(-0.44921875), // sin(147*(π/128)) - Q_8_8(-0.46875), // sin(148*(π/128)) - Q_8_8(-0.4921875), // sin(149*(π/128)) - Q_8_8(-0.51171875), // sin(150*(π/128)) - Q_8_8(-0.53125), // sin(151*(π/128)) - Q_8_8(-0.5546875), // sin(152*(π/128)) - Q_8_8(-0.57421875), // sin(153*(π/128)) - Q_8_8(-0.59375), // sin(154*(π/128)) - Q_8_8(-0.61328125), // sin(155*(π/128)) - Q_8_8(-0.6328125), // sin(156*(π/128)) - Q_8_8(-0.65234375), // sin(157*(π/128)) - Q_8_8(-0.66796875), // sin(158*(π/128)) - Q_8_8(-0.6875), // sin(159*(π/128)) - Q_8_8(-0.70703125), // sin(160*(π/128)) - Q_8_8(-0.72265625), // sin(161*(π/128)) - Q_8_8(-0.73828125), // sin(162*(π/128)) - Q_8_8(-0.75390625), // sin(163*(π/128)) - Q_8_8(-0.76953125), // sin(164*(π/128)) - Q_8_8(-0.78515625), // sin(165*(π/128)) - Q_8_8(-0.80078125), // sin(166*(π/128)) - Q_8_8(-0.81640625), // sin(167*(π/128)) - Q_8_8(-0.828125), // sin(168*(π/128)) - Q_8_8(-0.84375), // sin(169*(π/128)) - Q_8_8(-0.85546875), // sin(170*(π/128)) - Q_8_8(-0.8671875), // sin(171*(π/128)) - Q_8_8(-0.87890625), // sin(172*(π/128)) - Q_8_8(-0.890625), // sin(173*(π/128)) - Q_8_8(-0.90234375), // sin(174*(π/128)) - Q_8_8(-0.9140625), // sin(175*(π/128)) - Q_8_8(-0.921875), // sin(176*(π/128)) - Q_8_8(-0.9296875), // sin(177*(π/128)) - Q_8_8(-0.94140625), // sin(178*(π/128)) - Q_8_8(-0.94921875), // sin(179*(π/128)) - Q_8_8(-0.953125), // sin(180*(π/128)) - Q_8_8(-0.9609375), // sin(181*(π/128)) - Q_8_8(-0.96875), // sin(182*(π/128)) - Q_8_8(-0.97265625), // sin(183*(π/128)) - Q_8_8(-0.98046875), // sin(184*(π/128)) - Q_8_8(-0.984375), // sin(185*(π/128)) - Q_8_8(-0.98828125), // sin(186*(π/128)) - Q_8_8(-0.9921875), // sin(187*(π/128)) - Q_8_8(-0.9921875), // sin(188*(π/128)) - Q_8_8(-0.99609375), // sin(189*(π/128)) - Q_8_8(-0.99609375), // sin(190*(π/128)) - Q_8_8(-0.99609375), // sin(191*(π/128)) - Q_8_8(-1), // sin(192*(π/128)) - Q_8_8(-0.99609375), // sin(193*(π/128)) - Q_8_8(-0.99609375), // sin(194*(π/128)) - Q_8_8(-0.99609375), // sin(195*(π/128)) - Q_8_8(-0.9921875), // sin(196*(π/128)) - Q_8_8(-0.9921875), // sin(197*(π/128)) - Q_8_8(-0.98828125), // sin(198*(π/128)) - Q_8_8(-0.984375), // sin(199*(π/128)) - Q_8_8(-0.98046875), // sin(200*(π/128)) - Q_8_8(-0.97265625), // sin(201*(π/128)) - Q_8_8(-0.96875), // sin(202*(π/128)) - Q_8_8(-0.9609375), // sin(203*(π/128)) - Q_8_8(-0.953125), // sin(204*(π/128)) - Q_8_8(-0.94921875), // sin(205*(π/128)) - Q_8_8(-0.94140625), // sin(206*(π/128)) - Q_8_8(-0.9296875), // sin(207*(π/128)) - Q_8_8(-0.921875), // sin(208*(π/128)) - Q_8_8(-0.9140625), // sin(209*(π/128)) - Q_8_8(-0.90234375), // sin(210*(π/128)) - Q_8_8(-0.890625), // sin(211*(π/128)) - Q_8_8(-0.87890625), // sin(212*(π/128)) - Q_8_8(-0.8671875), // sin(213*(π/128)) - Q_8_8(-0.85546875), // sin(214*(π/128)) - Q_8_8(-0.84375), // sin(215*(π/128)) - Q_8_8(-0.828125), // sin(216*(π/128)) - Q_8_8(-0.81640625), // sin(217*(π/128)) - Q_8_8(-0.80078125), // sin(218*(π/128)) - Q_8_8(-0.78515625), // sin(219*(π/128)) - Q_8_8(-0.76953125), // sin(220*(π/128)) - Q_8_8(-0.75390625), // sin(221*(π/128)) - Q_8_8(-0.73828125), // sin(222*(π/128)) - Q_8_8(-0.72265625), // sin(223*(π/128)) - Q_8_8(-0.70703125), // sin(224*(π/128)) - Q_8_8(-0.6875), // sin(225*(π/128)) - Q_8_8(-0.66796875), // sin(226*(π/128)) - Q_8_8(-0.65234375), // sin(227*(π/128)) - Q_8_8(-0.6328125), // sin(228*(π/128)) - Q_8_8(-0.61328125), // sin(229*(π/128)) - Q_8_8(-0.59375), // sin(230*(π/128)) - Q_8_8(-0.57421875), // sin(231*(π/128)) - Q_8_8(-0.5546875), // sin(232*(π/128)) - Q_8_8(-0.53125), // sin(233*(π/128)) - Q_8_8(-0.51171875), // sin(234*(π/128)) - Q_8_8(-0.4921875), // sin(235*(π/128)) - Q_8_8(-0.46875), // sin(236*(π/128)) - Q_8_8(-0.44921875), // sin(237*(π/128)) - Q_8_8(-0.42578125), // sin(238*(π/128)) - Q_8_8(-0.40234375), // sin(239*(π/128)) - Q_8_8(-0.37890625), // sin(240*(π/128)) - Q_8_8(-0.359375), // sin(241*(π/128)) - Q_8_8(-0.3359375), // sin(242*(π/128)) - Q_8_8(-0.3125), // sin(243*(π/128)) - Q_8_8(-0.2890625), // sin(244*(π/128)) - Q_8_8(-0.265625), // sin(245*(π/128)) - Q_8_8(-0.2421875), // sin(246*(π/128)) - Q_8_8(-0.21875), // sin(247*(π/128)) - Q_8_8(-0.19140625), // sin(248*(π/128)) - Q_8_8(-0.16796875), // sin(249*(π/128)) - Q_8_8(-0.14453125), // sin(250*(π/128)) - Q_8_8(-0.12109375), // sin(251*(π/128)) - Q_8_8(-0.09765625), // sin(252*(π/128)) - Q_8_8(-0.0703125), // sin(253*(π/128)) - Q_8_8(-0.046875), // sin(254*(π/128)) - Q_8_8(-0.0234375), // sin(255*(π/128)) - Q_8_8(0), // sin(256*(π/128)) - Q_8_8(0.0234375), // sin(257*(π/128)) - Q_8_8(0.046875), // sin(258*(π/128)) - Q_8_8(0.0703125), // sin(259*(π/128)) - Q_8_8(0.09765625), // sin(260*(π/128)) - Q_8_8(0.12109375), // sin(261*(π/128)) - Q_8_8(0.14453125), // sin(262*(π/128)) - Q_8_8(0.16796875), // sin(263*(π/128)) - Q_8_8(0.19140625), // sin(264*(π/128)) - Q_8_8(0.21875), // sin(265*(π/128)) - Q_8_8(0.2421875), // sin(266*(π/128)) - Q_8_8(0.265625), // sin(267*(π/128)) - Q_8_8(0.2890625), // sin(268*(π/128)) - Q_8_8(0.3125), // sin(269*(π/128)) - Q_8_8(0.3359375), // sin(270*(π/128)) - Q_8_8(0.359375), // sin(271*(π/128)) - Q_8_8(0.37890625), // sin(272*(π/128)) - Q_8_8(0.40234375), // sin(273*(π/128)) - Q_8_8(0.42578125), // sin(274*(π/128)) - Q_8_8(0.44921875), // sin(275*(π/128)) - Q_8_8(0.46875), // sin(276*(π/128)) - Q_8_8(0.4921875), // sin(277*(π/128)) - Q_8_8(0.51171875), // sin(278*(π/128)) - Q_8_8(0.53125), // sin(279*(π/128)) - Q_8_8(0.5546875), // sin(280*(π/128)) - Q_8_8(0.57421875), // sin(281*(π/128)) - Q_8_8(0.59375), // sin(282*(π/128)) - Q_8_8(0.61328125), // sin(283*(π/128)) - Q_8_8(0.6328125), // sin(284*(π/128)) - Q_8_8(0.65234375), // sin(285*(π/128)) - Q_8_8(0.66796875), // sin(286*(π/128)) - Q_8_8(0.6875), // sin(287*(π/128)) - Q_8_8(0.70703125), // sin(288*(π/128)) - Q_8_8(0.72265625), // sin(289*(π/128)) - Q_8_8(0.73828125), // sin(290*(π/128)) - Q_8_8(0.75390625), // sin(291*(π/128)) - Q_8_8(0.76953125), // sin(292*(π/128)) - Q_8_8(0.78515625), // sin(293*(π/128)) - Q_8_8(0.80078125), // sin(294*(π/128)) - Q_8_8(0.81640625), // sin(295*(π/128)) - Q_8_8(0.828125), // sin(296*(π/128)) - Q_8_8(0.84375), // sin(297*(π/128)) - Q_8_8(0.85546875), // sin(298*(π/128)) - Q_8_8(0.8671875), // sin(299*(π/128)) - Q_8_8(0.87890625), // sin(300*(π/128)) - Q_8_8(0.890625), // sin(301*(π/128)) - Q_8_8(0.90234375), // sin(302*(π/128)) - Q_8_8(0.9140625), // sin(303*(π/128)) - Q_8_8(0.921875), // sin(304*(π/128)) - Q_8_8(0.9296875), // sin(305*(π/128)) - Q_8_8(0.94140625), // sin(306*(π/128)) - Q_8_8(0.94921875), // sin(307*(π/128)) - Q_8_8(0.953125), // sin(308*(π/128)) - Q_8_8(0.9609375), // sin(309*(π/128)) - Q_8_8(0.96875), // sin(310*(π/128)) - Q_8_8(0.97265625), // sin(311*(π/128)) - Q_8_8(0.98046875), // sin(312*(π/128)) - Q_8_8(0.984375), // sin(313*(π/128)) - Q_8_8(0.98828125), // sin(314*(π/128)) - Q_8_8(0.9921875), // sin(315*(π/128)) - Q_8_8(0.9921875), // sin(316*(π/128)) - Q_8_8(0.99609375), // sin(317*(π/128)) - Q_8_8(0.99609375), // sin(318*(π/128)) - Q_8_8(0.99609375), // sin(319*(π/128)) -}; - -// values of sin(x) as Q4.12 fixed-point numbers from x = 0° to x = 179° -const s16 gSineDegreeTable[] = -{ - Q_4_12(0), // sin(0°) - Q_4_12(0.017333984375), // sin(1°) - Q_4_12(0.034912109375), // sin(2°) - Q_4_12(0.05224609375), // sin(3°) - Q_4_12(0.06982421875), // sin(4°) - Q_4_12(0.087158203125), // sin(5°) - Q_4_12(0.1044921875), // sin(6°) - Q_4_12(0.121826171875), // sin(7°) - Q_4_12(0.13916015625), // sin(8°) - Q_4_12(0.156494140625), // sin(9°) - Q_4_12(0.173583984375), // sin(10°) - Q_4_12(0.19091796875), // sin(11°) - Q_4_12(0.2080078125), // sin(12°) - Q_4_12(0.224853515625), // sin(13°) - Q_4_12(0.241943359375), // sin(14°) - Q_4_12(0.2587890625), // sin(15°) - Q_4_12(0.275634765625), // sin(16°) - Q_4_12(0.29248046875), // sin(17°) - Q_4_12(0.30908203125), // sin(18°) - Q_4_12(0.32568359375), // sin(19°) - Q_4_12(0.342041015625), // sin(20°) - Q_4_12(0.3583984375), // sin(21°) - Q_4_12(0.37451171875), // sin(22°) - Q_4_12(0.390625), // sin(23°) - Q_4_12(0.40673828125), // sin(24°) - Q_4_12(0.422607421875), // sin(25°) - Q_4_12(0.4384765625), // sin(26°) - Q_4_12(0.4541015625), // sin(27°) - Q_4_12(0.469482421875), // sin(28°) - Q_4_12(0.48486328125), // sin(29°) - Q_4_12(0.5), // sin(30°) - Q_4_12(0.51513671875), // sin(31°) - Q_4_12(0.530029296875), // sin(32°) - Q_4_12(0.544677734375), // sin(33°) - Q_4_12(0.55908203125), // sin(34°) - Q_4_12(0.573486328125), // sin(35°) - Q_4_12(0.587890625), // sin(36°) - Q_4_12(0.601806640625), // sin(37°) - Q_4_12(0.61572265625), // sin(38°) - Q_4_12(0.62939453125), // sin(39°) - Q_4_12(0.642822265625), // sin(40°) - Q_4_12(0.656005859375), // sin(41°) - Q_4_12(0.669189453125), // sin(42°) - Q_4_12(0.681884765625), // sin(43°) - Q_4_12(0.694580078125), // sin(44°) - Q_4_12(0.70703125), // sin(45°) - Q_4_12(0.71923828125), // sin(46°) - Q_4_12(0.7314453125), // sin(47°) - Q_4_12(0.7431640625), // sin(48°) - Q_4_12(0.754638671875), // sin(49°) - Q_4_12(0.76611328125), // sin(50°) - Q_4_12(0.777099609375), // sin(51°) - Q_4_12(0.7880859375), // sin(52°) - Q_4_12(0.798583984375), // sin(53°) - Q_4_12(0.80908203125), // sin(54°) - Q_4_12(0.819091796875), // sin(55°) - Q_4_12(0.8291015625), // sin(56°) - Q_4_12(0.838623046875), // sin(57°) - Q_4_12(0.84814453125), // sin(58°) - Q_4_12(0.857177734375), // sin(59°) - Q_4_12(0.865966796875), // sin(60°) - Q_4_12(0.87451171875), // sin(61°) - Q_4_12(0.883056640625), // sin(62°) - Q_4_12(0.89111328125), // sin(63°) - Q_4_12(0.898681640625), // sin(64°) - Q_4_12(0.90625), // sin(65°) - Q_4_12(0.91357421875), // sin(66°) - Q_4_12(0.92041015625), // sin(67°) - Q_4_12(0.92724609375), // sin(68°) - Q_4_12(0.93359375), // sin(69°) - Q_4_12(0.939697265625), // sin(70°) - Q_4_12(0.945556640625), // sin(71°) - Q_4_12(0.951171875), // sin(72°) - Q_4_12(0.956298828125), // sin(73°) - Q_4_12(0.961181640625), // sin(74°) - Q_4_12(0.9658203125), // sin(75°) - Q_4_12(0.97021484375), // sin(76°) - Q_4_12(0.974365234375), // sin(77°) - Q_4_12(0.97802734375), // sin(78°) - Q_4_12(0.981689453125), // sin(79°) - Q_4_12(0.98486328125), // sin(80°) - Q_4_12(0.98779296875), // sin(81°) - Q_4_12(0.990234375), // sin(82°) - Q_4_12(0.992431640625), // sin(83°) - Q_4_12(0.994384765625), // sin(84°) - Q_4_12(0.99609375), // sin(85°) - Q_4_12(0.99755859375), // sin(86°) - Q_4_12(0.99853515625), // sin(87°) - Q_4_12(0.999267578125), // sin(88°) - Q_4_12(0.999755859375), // sin(89°) - Q_4_12(1), // sin(90°) - Q_4_12(0.999755859375), // sin(91°) - Q_4_12(0.999267578125), // sin(92°) - Q_4_12(0.99853515625), // sin(93°) - Q_4_12(0.99755859375), // sin(94°) - Q_4_12(0.99609375), // sin(95°) - Q_4_12(0.994384765625), // sin(96°) - Q_4_12(0.992431640625), // sin(97°) - Q_4_12(0.990234375), // sin(98°) - Q_4_12(0.98779296875), // sin(99°) - Q_4_12(0.98486328125), // sin(100°) - Q_4_12(0.981689453125), // sin(101°) - Q_4_12(0.97802734375), // sin(102°) - Q_4_12(0.974365234375), // sin(103°) - Q_4_12(0.97021484375), // sin(104°) - Q_4_12(0.9658203125), // sin(105°) - Q_4_12(0.961181640625), // sin(106°) - Q_4_12(0.956298828125), // sin(107°) - Q_4_12(0.951171875), // sin(108°) - Q_4_12(0.945556640625), // sin(109°) - Q_4_12(0.939697265625), // sin(110°) - Q_4_12(0.93359375), // sin(111°) - Q_4_12(0.92724609375), // sin(112°) - Q_4_12(0.92041015625), // sin(113°) - Q_4_12(0.91357421875), // sin(114°) - Q_4_12(0.90625), // sin(115°) - Q_4_12(0.898681640625), // sin(116°) - Q_4_12(0.89111328125), // sin(117°) - Q_4_12(0.883056640625), // sin(118°) - Q_4_12(0.87451171875), // sin(119°) - Q_4_12(0.865966796875), // sin(120°) - Q_4_12(0.857177734375), // sin(121°) - Q_4_12(0.84814453125), // sin(122°) - Q_4_12(0.838623046875), // sin(123°) - Q_4_12(0.8291015625), // sin(124°) - Q_4_12(0.819091796875), // sin(125°) - Q_4_12(0.80908203125), // sin(126°) - Q_4_12(0.798583984375), // sin(127°) - Q_4_12(0.7880859375), // sin(128°) - Q_4_12(0.777099609375), // sin(129°) - Q_4_12(0.76611328125), // sin(130°) - Q_4_12(0.754638671875), // sin(131°) - Q_4_12(0.7431640625), // sin(132°) - Q_4_12(0.7314453125), // sin(133°) - Q_4_12(0.71923828125), // sin(134°) - Q_4_12(0.70703125), // sin(135°) - Q_4_12(0.694580078125), // sin(136°) - Q_4_12(0.681884765625), // sin(137°) - Q_4_12(0.669189453125), // sin(138°) - Q_4_12(0.656005859375), // sin(139°) - Q_4_12(0.642822265625), // sin(140°) - Q_4_12(0.62939453125), // sin(141°) - Q_4_12(0.61572265625), // sin(142°) - Q_4_12(0.601806640625), // sin(143°) - Q_4_12(0.587890625), // sin(144°) - Q_4_12(0.573486328125), // sin(145°) - Q_4_12(0.55908203125), // sin(146°) - Q_4_12(0.544677734375), // sin(147°) - Q_4_12(0.530029296875), // sin(148°) - Q_4_12(0.51513671875), // sin(149°) - Q_4_12(0.5), // sin(150°) - Q_4_12(0.48486328125), // sin(151°) - Q_4_12(0.469482421875), // sin(152°) - Q_4_12(0.4541015625), // sin(153°) - Q_4_12(0.4384765625), // sin(154°) - Q_4_12(0.422607421875), // sin(155°) - Q_4_12(0.40673828125), // sin(156°) - Q_4_12(0.390625), // sin(157°) - Q_4_12(0.37451171875), // sin(158°) - Q_4_12(0.3583984375), // sin(159°) - Q_4_12(0.342041015625), // sin(160°) - Q_4_12(0.32568359375), // sin(161°) - Q_4_12(0.30908203125), // sin(162°) - Q_4_12(0.29248046875), // sin(163°) - Q_4_12(0.275634765625), // sin(164°) - Q_4_12(0.2587890625), // sin(165°) - Q_4_12(0.241943359375), // sin(166°) - Q_4_12(0.224853515625), // sin(167°) - Q_4_12(0.2080078125), // sin(168°) - Q_4_12(0.19091796875), // sin(169°) - Q_4_12(0.173583984375), // sin(170°) - Q_4_12(0.156494140625), // sin(171°) - Q_4_12(0.13916015625), // sin(172°) - Q_4_12(0.121826171875), // sin(173°) - Q_4_12(0.1044921875), // sin(174°) - Q_4_12(0.087158203125), // sin(175°) - Q_4_12(0.06982421875), // sin(176°) - Q_4_12(0.05224609375), // sin(177°) - Q_4_12(0.034912109375), // sin(178°) - Q_4_12(0.017333984375), // sin(179°) -}; - -// amplitude * sin(index*(π/128)) -s16 Sin(s16 index, s16 amplitude) -{ - return (amplitude * gSineTable[index]) >> 8; -} - -// amplitude * cos(index*(π/128)) -s16 Cos(s16 index, s16 amplitude) -{ - return (amplitude * gSineTable[index + 64]) >> 8; -} - -// angle in degrees -s16 Sin2(u16 angle) -{ - s32 angleMod = angle % 180; - s32 negate = ((angle / 180) & 1); - s16 value = gSineDegreeTable[angleMod]; - - if (negate) - return -value; - else - return value; -} - -// angle in degrees -s16 Cos2(u16 angle) -{ - return Sin2(angle + 90); -} diff --git a/src/tv.c b/src/tv.c deleted file mode 100644 index a254bcd5f..000000000 --- a/src/tv.c +++ /dev/null @@ -1,3260 +0,0 @@ -#include "global.h" -#include "tv.h" -#include "battle_tower.h" -#include "contest_painting.h" -#include "data2.h" -#include "easy_chat.h" -#include "event_data.h" -#include "fieldmap.h" -#include "field_message_box.h" -#include "field_camera.h" -#include "flags.h" -#include "rng.h" -#include "string_util.h" -#include "text.h" -#include "species.h" -#include "pokedex.h" -#include "naming_screen.h" -#include "rom4.h" -#include "map_constants.h" -#include "strings.h" -#include "battle.h" -#include "link.h" -#include "easy_chat.h" -#include "field_map_obj.h" -#include "field_specials.h" -#include "item.h" -#include "items.h" -#include "link.h" -#include "map_constants.h" -#include "naming_screen.h" -#include "pokedex.h" -#include "region_map.h" -#include "rng.h" -#include "rom4.h" -#include "rtc.h" -#include "script_menu.h" -#include "species.h" -#include "string_util.h" -#include "strings.h" -#include "text.h" - -struct UnkTvStruct -{ - s8 var0; -}; - -extern u8 gUnknown_0300430A[11]; - -struct OutbreakPokemon -{ - /*0x00*/ u16 species; - /*0x02*/ u16 moves[4]; - /*0x0A*/ u8 level; - /*0x0B*/ u8 location; -}; - -struct TVSaleItem { - u16 item_id; - u16 item_amount; -}; - -extern u8 gUnknown_02038694; - -extern struct TVSaleItem gUnknown_02038724[3]; - -struct UnkTvStruct gUnknown_03005D38; - -extern u8 *gTVBravoTrainerTextGroup[]; -extern u8 *gTVBravoTrainerBattleTowerTextGroup[]; -extern u8 *gTVSmartShopperTextGroup[]; -extern u8 *gTVNameRaterTextGroup[]; -extern u8 *gTVPokemonTodayTextGroup[]; -extern u8 *gTVPokemonTodayFailedCaptureTextGroup[]; -extern u8 *gTVFanClubTextGroup[]; -extern u8 *gTVRecentHappeningsTextGroup[]; -extern u8 *gTVFanClubOpinionsTextGroup[]; -extern u8 *gTVPokemonOutbreakTextGroup[]; -extern u8 *gTVGabbyAndTyTextGroup[]; -extern u8 *gTVFishingGuruAdviceTextGroup[]; -extern u8 *gTVWorldOfMastersTextGroup[]; -extern struct OutbreakPokemon gPokeOutbreakSpeciesList[5]; - - - -extern const u8 *gTVNewsTextGroup1[]; -extern const u8 *gTVNewsTextGroup2[]; -extern const u8 *gTVNewsTextGroup3[]; - -extern u16 gScriptLastTalked; - -extern u8 gScriptContestCategory; -extern u8 gScriptContestRank; -extern u8 gUnknown_03004316[11]; -extern u8 gBattleOutcome; - -extern u16 gLastUsedItem; - -extern u8 ewram[]; -#define gUnknown_02007000 (*(ewramStruct_02007000 *)(ewram + 0x7000)) - -static EWRAM_DATA u16 gUnknown_020387E0 = 0; -static EWRAM_DATA u16 gUnknown_020387E2 = 0; -static EWRAM_DATA u8 gUnknown_020387E4 = 0; -static EWRAM_DATA ALIGNED(4) u8 gUnknown_020387E8 = 0; // why is this aligned to a 4-byte boundary? - -static u8 gUnknown_03000720; -static u8 gUnknown_03000721; -static s8 gUnknown_03000722; - -void ClearTVShowData(void) -{ - u8 showidx; - u8 extradataidx; - for (showidx=0; showidx<25; showidx++) { - gSaveBlock1.tvShows[showidx].common.var00 = 0; - gSaveBlock1.tvShows[showidx].common.var01 = 0; - for (extradataidx=0; extradataidx<34; extradataidx++) { - gSaveBlock1.tvShows[showidx].common.pad02[extradataidx] = 0; - } - } - sub_80BEBF4(); -} - -bool8 sub_80BF1B4(u8); -void sub_80BF20C(void); -extern u16 sub_8135D3C(u8); -extern u8 gScriptContestCategory; -extern u8 gScriptContestRank; -extern u8 gUnknown_03004316[11]; -extern u8 gBattleOutcome; - -void sub_80BF334(void); -void sub_80BF3A4(void); -void sub_80BF3DC(void); -void sub_80BF46C(void); -void sub_80BF478(void); -void sub_80BF484(void); -void sub_80BF4BC(void); - -void sub_80BE028(void); -void sub_80BE074(void); -void sub_80BE778(void); -void sub_80BEB20(void); - -u8 sub_80BFB54(u8); - -s8 sub_80BF74C(TVShow tvShow[]); - -void sub_80BF55C(TVShow tvShow[], u8 showidx); -void sub_80BEA88(void); - -void sub_80BE138(TVShow *show); -void sub_80BE160(TVShow *show); -extern u16 gLastUsedItem; - -void sub_80BE5FC(void); -void sub_80BE65C(void); -void sub_80BE6A0(void); -void nullsub_21(void); -void sub_80BE188(void); -void sub_80BE320(void); - -u8 special_0x44(void) -{ - u8 i; - u8 j; - -#ifndef NONMATCHING - asm("":::"r5"); -#endif - - for (i = 5; i < 24; i++) - { - if (gSaveBlock1.tvShows[i].common.var00 == 0) - break; - } - i = Random() % i; - j = i; - do - { - if (sub_80BFB54(gSaveBlock1.tvShows[i].common.var00) != 4) - { - if (gSaveBlock1.tvShows[i].common.var01 == 1) - return i; - } - else - { - struct TVShowMassOutbreak *massOutbreak = &gSaveBlock1.tvShows[i].massOutbreak; - - if (massOutbreak->var16 == 0 && massOutbreak->var01 == 1) - return i; - } - - if (i == 0) - i = 23; - else - i--; - } while (i != j); - return 0xFF; -} - -u8 sub_80BDA30(void); - -u8 sub_80BD8B8(void) -{ - u8 retval = special_0x44(); - - if (retval == 0xff) - return 0xff; - if (gSaveBlock1.outbreakPokemonSpecies != 0 && gSaveBlock1.tvShows[retval].common.var00 == TVSHOW_MASS_OUTBREAK) - return sub_80BDA30(); - return retval; -} - -u8 CheckForBigMovieOrEmergencyNewsOnTV(void); -void SetTVMetatilesOnMap(int, int, u16); -bool8 sub_80BECA0(void); -bool8 IsTVShowInSearchOfTrainersAiring(void); - -void UpdateTVScreensOnMap(int width, int height) -{ - FlagSet(SYS_TV_WATCH); - switch (CheckForBigMovieOrEmergencyNewsOnTV()) - { - case 1: - SetTVMetatilesOnMap(width, height, 0x3); - break; - case 2: - break; - default: - if (gSaveBlock1.location.mapGroup == MAP_GROUP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F - && gSaveBlock1.location.mapNum == MAP_ID_LILYCOVE_CITY_COVE_LILY_MOTEL_1F) - { - SetTVMetatilesOnMap(width, height, 0x3); - } - else if (FlagGet(SYS_TV_START) && (sub_80BD8B8() != 0xff || sub_80BECA0() != 0xff || IsTVShowInSearchOfTrainersAiring())) - { - FlagReset(SYS_TV_WATCH); - SetTVMetatilesOnMap(width, height, 0x3); - } - break; - } -} - -void SetTVMetatilesOnMap(int width, int height, u16 tileId) -{ - int x; - int y; - - for (y=0; ycommon.var00 == TVSHOW_MASS_OUTBREAK && gSaveBlock1.outbreakPokemonSpecies) - return sub_80BDA30(); - return gSpecialVar_0x8004; -} - -void ResetGabbyAndTy(void) -{ - gSaveBlock1.gabbyAndTyData.mon1 = 0; - gSaveBlock1.gabbyAndTyData.mon2 = 0; - gSaveBlock1.gabbyAndTyData.lastMove = 0; - gSaveBlock1.gabbyAndTyData.quote = 0xffff; - gSaveBlock1.gabbyAndTyData.valA_0 = 0; - gSaveBlock1.gabbyAndTyData.valA_1 = 0; - gSaveBlock1.gabbyAndTyData.valA_2 = 0; - gSaveBlock1.gabbyAndTyData.valA_3 = 0; - gSaveBlock1.gabbyAndTyData.valA_4 = 0; - gSaveBlock1.gabbyAndTyData.valA_5 = 0; - gSaveBlock1.gabbyAndTyData.valB_0 = 0; - gSaveBlock1.gabbyAndTyData.valB_1 = 0; - gSaveBlock1.gabbyAndTyData.valB_2 = 0; - gSaveBlock1.gabbyAndTyData.valB_3 = 0; - gSaveBlock1.gabbyAndTyData.valB_4 = 0; - gSaveBlock1.gabbyAndTyData.valB_5 = 0; - gSaveBlock1.gabbyAndTyData.mapnum = 0; - gSaveBlock1.gabbyAndTyData.battleNum = 0; -} - -void TakeTVShowInSearchOfTrainersOffTheAir(void); - -void GabbyAndTyBeforeInterview(void) -{ - u8 i; - - gSaveBlock1.gabbyAndTyData.mon1 = gBattleResults.poke1Species; - gSaveBlock1.gabbyAndTyData.mon2 = gBattleResults.opponentSpecies; - gSaveBlock1.gabbyAndTyData.lastMove = gBattleResults.lastUsedMove; - if (gSaveBlock1.gabbyAndTyData.battleNum != 0xff) - gSaveBlock1.gabbyAndTyData.battleNum ++; - gSaveBlock1.gabbyAndTyData.valA_0 = gBattleResults.unk5_0; - - if (gBattleResults.playerFaintCounter) - gSaveBlock1.gabbyAndTyData.valA_1 = 1; - else - gSaveBlock1.gabbyAndTyData.valA_1 = 0; - - if (gBattleResults.unk3) - gSaveBlock1.gabbyAndTyData.valA_2 = 1; - else - gSaveBlock1.gabbyAndTyData.valA_2 = 0; - - if (!gBattleResults.unk5_1) - { - for (i=0; i<11; i++) - { - if (gBattleResults.unk36[i] != 0) - { - gSaveBlock1.gabbyAndTyData.valA_3 = 1; - break; - } - } - } - else - { - gSaveBlock1.gabbyAndTyData.valA_3 = 1; - } - - TakeTVShowInSearchOfTrainersOffTheAir(); - if (gSaveBlock1.gabbyAndTyData.lastMove == 0) - FlagSet(1); -} - -void sub_80BDC14(void) -{ - gSaveBlock1.gabbyAndTyData.valB_0 = gSaveBlock1.gabbyAndTyData.valA_0; - gSaveBlock1.gabbyAndTyData.valB_1 = gSaveBlock1.gabbyAndTyData.valA_1; - gSaveBlock1.gabbyAndTyData.valB_2 = gSaveBlock1.gabbyAndTyData.valA_2; - gSaveBlock1.gabbyAndTyData.valB_3 = gSaveBlock1.gabbyAndTyData.valA_3; - gSaveBlock1.gabbyAndTyData.valA_4 = 1; - gSaveBlock1.gabbyAndTyData.mapnum = gMapHeader.regionMapSectionId; - IncrementGameStat(GAME_STAT_GOT_INTERVIEWED); -} - -void TakeTVShowInSearchOfTrainersOffTheAir(void) -{ - gSaveBlock1.gabbyAndTyData.valA_4 = 0; -} - -u8 GabbyAndTyGetBattleNum(void) -{ - if (gSaveBlock1.gabbyAndTyData.battleNum >= 6) - return (gSaveBlock1.gabbyAndTyData.battleNum % 3) + 6; - else - return gSaveBlock1.gabbyAndTyData.battleNum; -} - -bool8 IsTVShowInSearchOfTrainersAiring(void) -{ - return gSaveBlock1.gabbyAndTyData.valA_4; -} - -bool8 GabbyAndTyGetLastQuote(void) -{ - if (gSaveBlock1.gabbyAndTyData.quote == 0xffff) - return FALSE; - - sub_80EB3FC(gStringVar1, gSaveBlock1.gabbyAndTyData.quote); - gSaveBlock1.gabbyAndTyData.quote |= 0xffff; - return TRUE; -} - -u8 sub_80BDD18(void) -{ - if (!gSaveBlock1.gabbyAndTyData.valB_0) - return 1; - if (gSaveBlock1.gabbyAndTyData.valB_3) - return 2; - if (gSaveBlock1.gabbyAndTyData.valB_2) - return 3; - if (gSaveBlock1.gabbyAndTyData.valB_1) - return 4; - return 0; -} - -void GabbyAndTySetScriptVarsToFieldObjectLocalIds(void) -{ - switch (GabbyAndTyGetBattleNum()) - { - case 1: - gSpecialVar_0x8004 = 0xE; - gSpecialVar_0x8005 = 0xD; - break; - case 2: - gSpecialVar_0x8004 = 0x5; - gSpecialVar_0x8005 = 0x6; - break; - case 3: - gSpecialVar_0x8004 = 0x12; - gSpecialVar_0x8005 = 0x11; - break; - case 4: - gSpecialVar_0x8004 = 0x15; - gSpecialVar_0x8005 = 0x16; - break; - case 5: - gSpecialVar_0x8004 = 0x8; - gSpecialVar_0x8005 = 0x9; - break; - case 6: - gSpecialVar_0x8004 = 0x13; - gSpecialVar_0x8005 = 0x14; - break; - case 7: - gSpecialVar_0x8004 = 0x17; - gSpecialVar_0x8005 = 0x18; - break; - case 8: - gSpecialVar_0x8004 = 0xA; - gSpecialVar_0x8005 = 0xB; - break; - } -} - -void sub_80BDE48(void) -{ - switch (gSpecialVar_0x8005) - { - case TVSHOW_FAN_CLUB_LETTER: - sub_80BE5FC(); - break; - case TVSHOW_RECENT_HAPPENINGS: - sub_80BE65C(); - break; - case TVSHOW_PKMN_FAN_CLUB_OPINIONS: - sub_80BE6A0(); - break; - case TVSHOW_UNKN_SHOWTYPE_04: - nullsub_21(); - break; - case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: - sub_80BE188(); - break; - case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: - sub_80BE320(); - break; - } -} - -u8 sub_80BDEAC(u8 *a0) -{ - u8 lang = GAME_LANGUAGE; - - if (a0[0] == EXT_CTRL_CODE_BEGIN && a0[1] == 0x15) - lang = LANGUAGE_JAPANESE; - return lang; -} - -void sub_80BDEC8(void) -{ - u8 i; - u16 total; - u16 item; - - total = 0; - sub_80BEB20(); - sub_80BE778(); - - if (gBattleResults.caughtPoke == 0) - { - sub_80BE074(); - } - else - { - sub_80BE028(); - if (sub_80BF77C(0xffff) == 0 && StringCompareWithoutExtCtrlCodes(gSpeciesNames[gBattleResults.caughtPoke], gBattleResults.caughtNick) != 0) - { - gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows); - if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_POKEMON_TODAY_CAUGHT) != 1) - { - for (i = 0; i < 11; i++) - total += gBattleResults.unk36[i]; - if (total != 0 || gBattleResults.unk5_1 != 0) - { - struct TVShowPokemonToday *pokemonToday; - - total = 0; - pokemonToday = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].pokemonToday; - pokemonToday->var00 = TVSHOW_POKEMON_TODAY_CAUGHT; - pokemonToday->var01 = total; - if (gBattleResults.unk5_1 != 0) - { - total = 1; - item = ITEM_MASTER_BALL; - } - else - { - for (i = 0; i < 11; i++) - total += gBattleResults.unk36[i]; - if (total > 0xff) - total = 0xff; - item = gLastUsedItem; - } - pokemonToday->var12 = total; - pokemonToday->ball = item; - StringCopy(pokemonToday->playerName, gSaveBlock2.playerName); - StringCopy(pokemonToday->nickname, gBattleResults.caughtNick); - pokemonToday->species = gBattleResults.caughtPoke; - sub_80BE138((TVShow *)pokemonToday); - pokemonToday->language = GAME_LANGUAGE; - pokemonToday->language2 = sub_80BDEAC(pokemonToday->nickname); - StripExtCtrlCodes(pokemonToday->nickname); - } - } - } - } -} - -void sub_80BE028(void) -{ - struct TVShowWorldOfMasters *worldOfMasters = &gSaveBlock1.tvShows[24].worldOfMasters; - - if (worldOfMasters->var00 != TVSHOW_WORLD_OF_MASTERS) - { - sub_80BF55C(gSaveBlock1.tvShows, 24); - worldOfMasters->var06 = GetGameStat(GAME_STAT_STEPS); - worldOfMasters->var00 = TVSHOW_WORLD_OF_MASTERS; - } - worldOfMasters->var02++; - worldOfMasters->var04 = gBattleResults.caughtPoke; - worldOfMasters->var08 = gBattleResults.poke1Species; - worldOfMasters->var0a = gMapHeader.regionMapSectionId; -} - -void sub_80BE074(void) -{ - u8 i; - u16 total; - u8 zero = 0; - - if (sub_80BF77C(0xffff) == 0) - { - for (i = 0, total = 0; i < ARRAY_COUNT(gUnknown_03004316); i++) - total += gUnknown_03004316[i]; - if (total > 0xff) - total = 0xff; - if (total > 2 && gBattleOutcome == 1) - { - gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows); - if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_POKEMON_TODAY_FAILED) != 1) - { - struct TVShowPokemonTodayFailed *pokemonTodayFailed = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].pokemonTodayFailed; - - zero = 0; - pokemonTodayFailed->var00 = TVSHOW_POKEMON_TODAY_FAILED; - pokemonTodayFailed->var01 = zero; - pokemonTodayFailed->species = gBattleResults.poke1Species; - pokemonTodayFailed->species2 = gBattleResults.lastOpponentSpecies; - pokemonTodayFailed->var10 = total; - pokemonTodayFailed->var11 = gBattleOutcome; - pokemonTodayFailed->var12 = gMapHeader.regionMapSectionId; - StringCopy(pokemonTodayFailed->playerName, gSaveBlock2.playerName); - sub_80BE138((TVShow *)pokemonTodayFailed); - pokemonTodayFailed->language = GAME_LANGUAGE; - } - } - } -} - - -void sub_80BE138(TVShow *show) -{ - u32 playerId = GetPlayerTrainerId(); - - show->common.srcTrainerId2Lo = playerId & 0xFF; - show->common.srcTrainerId2Hi = playerId >> 8; - show->common.srcTrainerIdLo = playerId & 0xFF; - show->common.srcTrainerIdHi = playerId >> 8; - show->common.trainerIdLo = playerId & 0xFF; - show->common.trainerIdHi = playerId >> 8; -} - -void sub_80BE160(TVShow *show) -{ - u32 playerId = GetPlayerTrainerId(); - - show->common.srcTrainerIdLo = playerId & 0xFF; - show->common.srcTrainerIdHi = playerId >> 8; - show->common.trainerIdLo = playerId & 0xFF; - show->common.trainerIdHi = playerId >> 8; -} - -void sub_80BE188(void) -{ - struct TVShowBravoTrainerPokemonProfiles *bravoTrainerSrc = &gSaveBlock1.tvShows[24].bravoTrainer; - - if (bravoTrainerSrc->var00 == TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE) - { - struct TVShowBravoTrainerPokemonProfiles *bravoTrainerNew = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainer; - - bravoTrainerNew->var00 = TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE; - bravoTrainerNew->var01 = 1; - bravoTrainerNew->species = bravoTrainerSrc->species; - StringCopy(bravoTrainerNew->playerName, gSaveBlock2.playerName); - StringCopy(bravoTrainerNew->pokemonNickname, bravoTrainerSrc->pokemonNickname); - bravoTrainerNew->contestCategory = bravoTrainerSrc->contestCategory; - bravoTrainerNew->contestRank = bravoTrainerSrc->contestRank; - bravoTrainerNew->var14 = bravoTrainerSrc->var14; - bravoTrainerNew->contestResult = bravoTrainerSrc->contestResult; - bravoTrainerNew->contestCategory = bravoTrainerSrc->contestCategory; - sub_80BE160((TVShow *)bravoTrainerNew); - bravoTrainerNew->language = GAME_LANGUAGE; - bravoTrainerNew->var1f = sub_80BDEAC(bravoTrainerNew->pokemonNickname); - StripExtCtrlCodes(bravoTrainerNew->pokemonNickname); - } -} - -void sub_80BE23C(u16 a0) -{ - struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[24].bravoTrainer; - - sub_80BF484(); - gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows); - if (gUnknown_03005D38.var0 != -1) - { - sub_80BF55C(gSaveBlock1.tvShows, 24); - bravoTrainer->var14 = a0; - bravoTrainer->var00 = TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE; - } -} - -void sub_80BE284(u8 a0) -{ - struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[24].bravoTrainer; - - gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows); - if (gUnknown_03005D38.var0 != -1) - { - bravoTrainer->contestResult = a0; - bravoTrainer->contestCategory = gScriptContestCategory; - bravoTrainer->contestRank = gScriptContestRank; - bravoTrainer->species = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_SPECIES, NULL); - GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_NICKNAME, bravoTrainer->pokemonNickname); - } -} - -void sub_80BE320(void) -{ - struct TVShowBravoTrainerBattleTowerSpotlight *bravoTrainerTower = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainerTower; - - bravoTrainerTower->var00 = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE; - bravoTrainerTower->var01 = 1; - StringCopy(bravoTrainerTower->trainerName, gSaveBlock2.playerName); - StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.filler_A8.filler_3DC); - bravoTrainerTower->species = gSaveBlock2.filler_A8.var_480; - bravoTrainerTower->defeatedSpecies = gSaveBlock2.filler_A8.var_482; - bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.filler_A8.var_4D0); - bravoTrainerTower->var1c = gSaveBlock2.filler_A8.var_4AD; - if (gSaveBlock2.filler_A8.var_4D0 == 0) - bravoTrainerTower->btLevel = 50; - else - bravoTrainerTower->btLevel = 100; - bravoTrainerTower->var1b = gSpecialVar_0x8004; - sub_80BE160((TVShow *)bravoTrainerTower); - bravoTrainerTower->language = GAME_LANGUAGE; -} - -void sub_80BE3BC(void) -{ - u8 rval; - u8 i; - - rval = sub_80BF77C(0x5555); - if (rval == 0) - { - gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows); - if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_SMART_SHOPPER) != 1) - { - sub_80BF20C(); - if (gUnknown_02038724[0].item_amount >= 20) - { - struct TVShowSmartShopper *smartShopper = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].smartshopperShow; - - smartShopper->var00 = TVSHOW_SMART_SHOPPER; - smartShopper->var01 = rval; - smartShopper->shopLocation = gMapHeader.regionMapSectionId; - for (i=0; i<3; i++) - { - smartShopper->itemIds[i] = gUnknown_02038724[i].item_id; - smartShopper->itemAmounts[i] = gUnknown_02038724[i].item_amount; - } - smartShopper->priceReduced = GetPriceReduction(1); - StringCopy(smartShopper->playerName, gSaveBlock2.playerName); - sub_80BE138((TVShow *)smartShopper); - smartShopper->language = GAME_LANGUAGE; - } - } - } -} - -void sub_80BE478(void) -{ - sub_80BF478(); - if (gScriptResult == 1) - return; - - GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar1); - if (StringLength(gSaveBlock2.playerName) > 1 && StringLength(gStringVar1) > 1) - { - struct TVShowNameRaterShow *nameRaterShow = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].nameRaterShow; - - nameRaterShow->var00 = TVSHOW_NAME_RATER_SHOW; - nameRaterShow->var01 = 1; - nameRaterShow->species = GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES, NULL); - nameRaterShow->random = Random() % 3; - nameRaterShow->random2 = Random() % 2; - nameRaterShow->var1C = sub_80BF674(nameRaterShow->species); - StringCopy(nameRaterShow->trainerName, gSaveBlock2.playerName); - GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, nameRaterShow->pokemonName); - sub_80BE160((TVShow *)nameRaterShow); - nameRaterShow->language = GAME_LANGUAGE; - nameRaterShow->pokemonNameLanguage = sub_80BDEAC(nameRaterShow->pokemonName); - StripExtCtrlCodes(nameRaterShow->pokemonName); - } -} - -void StartMassOutbreak(void) -{ - struct TVShowMassOutbreak *massOutbreak = &gSaveBlock1.tvShows[gSpecialVar_0x8004].massOutbreak; - - gSaveBlock1.outbreakPokemonSpecies = massOutbreak->species; - gSaveBlock1.outbreakLocationMapNum = massOutbreak->locationMapNum; - gSaveBlock1.outbreakLocationMapGroup = massOutbreak->locationMapGroup; - gSaveBlock1.outbreakPokemonLevel = massOutbreak->level; - gSaveBlock1.outbreakUnk1 = massOutbreak->var02; - gSaveBlock1.outbreakUnk2 = massOutbreak->var0E; - gSaveBlock1.outbreakPokemonMoves[0] = massOutbreak->moves[0]; - gSaveBlock1.outbreakPokemonMoves[1] = massOutbreak->moves[1]; - gSaveBlock1.outbreakPokemonMoves[2] = massOutbreak->moves[2]; - gSaveBlock1.outbreakPokemonMoves[3] = massOutbreak->moves[3]; - gSaveBlock1.outbreakUnk4 = massOutbreak->var03; - gSaveBlock1.outbreakPokemonProbability = massOutbreak->probability; - gSaveBlock1.outbreakUnk5 = 2; -} - -void sub_80BE5FC(void) -{ - struct TVShowFanClubLetter *fanclubLetter = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].fanclubLetter; - - fanclubLetter->var00 = TVSHOW_FAN_CLUB_LETTER; - fanclubLetter->var01 = 1; - StringCopy(fanclubLetter->playerName, gSaveBlock2.playerName); - fanclubLetter->species = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL); - sub_80BE160((TVShow *)fanclubLetter); - fanclubLetter->language = GAME_LANGUAGE; -} - -void sub_80BE65C(void) -{ - struct TVShowRecentHappenings *recentHappenings = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].recentHappenings; - - recentHappenings->var00 = TVSHOW_RECENT_HAPPENINGS; - recentHappenings->var01 = 1; - StringCopy(recentHappenings->playerName, gSaveBlock2.playerName); - recentHappenings->var02 = 0; - sub_80BE160((TVShow *)recentHappenings); - recentHappenings->language = GAME_LANGUAGE; -} - -void sub_80BE6A0(void) -{ - u8 monIndex; - struct TVShowFanclubOpinions *fanclubOpinions = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].fanclubOpinions; - - fanclubOpinions->var00 = TVSHOW_PKMN_FAN_CLUB_OPINIONS; - fanclubOpinions->var01 = 1; - monIndex = GetLeadMonIndex(); - fanclubOpinions->var04A = GetMonData(&gPlayerParty[monIndex], MON_DATA_FRIENDSHIP, NULL) / 16; - fanclubOpinions->var04B = gSpecialVar_0x8007; - StringCopy(fanclubOpinions->playerName, gSaveBlock2.playerName); - GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_NICKNAME, fanclubOpinions->var10); - fanclubOpinions->var02 = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL); - sub_80BE160((TVShow *)fanclubOpinions); - fanclubOpinions->language = GAME_LANGUAGE; - fanclubOpinions->var0E = sub_80BDEAC(fanclubOpinions->var10); - StripExtCtrlCodes(fanclubOpinions->var10); -} - -void nullsub_21(void) -{ -} - -void sub_80BE778(void) -{ - if (FlagGet(SYS_GAME_CLEAR)) - { - u8 i; - - for (i = 0; i < 24; i++) - { - if (gSaveBlock1.tvShows[i].massOutbreak.var00 == TVSHOW_MASS_OUTBREAK) - return; - } - if (sub_80BF77C(0x147)) - return; - - gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows); - if (gUnknown_03005D38.var0 != -1) - { - u16 rand = Random(); - u16 val = rand % 5; - s32 val2 = gUnknown_03005D38.var0; - struct TVShowMassOutbreak *massOutbreak = &gSaveBlock1.tvShows[val2].massOutbreak; - - massOutbreak->var00 = TVSHOW_MASS_OUTBREAK; - massOutbreak->var01 = 1; - massOutbreak->level = gPokeOutbreakSpeciesList[val].level; - massOutbreak->var02 = 0; - massOutbreak->var03 = 0; - massOutbreak->species = gPokeOutbreakSpeciesList[val].species; - massOutbreak->var0E = 0; - massOutbreak->moves[0] = gPokeOutbreakSpeciesList[val].moves[0]; - massOutbreak->moves[1] = gPokeOutbreakSpeciesList[val].moves[1]; - massOutbreak->moves[2] = gPokeOutbreakSpeciesList[val].moves[2]; - massOutbreak->moves[3] = gPokeOutbreakSpeciesList[val].moves[3]; - massOutbreak->locationMapNum = gPokeOutbreakSpeciesList[val].location; - massOutbreak->locationMapGroup = 0; - massOutbreak->var12 = 0; - massOutbreak->probability = 0x32; - massOutbreak->var15 = 0; - massOutbreak->var16 = 0x01; - sub_80BE160((TVShow *)massOutbreak); - massOutbreak->language = GAME_LANGUAGE; - } - } -} - -void EndMassOutbreak(void) -{ - gSaveBlock1.outbreakPokemonSpecies = 0; - gSaveBlock1.outbreakLocationMapNum = 0; - gSaveBlock1.outbreakLocationMapGroup = 0; - gSaveBlock1.outbreakPokemonLevel = 0; - gSaveBlock1.outbreakUnk1 = 0; - gSaveBlock1.outbreakUnk2 = 0; - gSaveBlock1.outbreakPokemonMoves[0] = 0; - gSaveBlock1.outbreakPokemonMoves[1] = 0; - gSaveBlock1.outbreakPokemonMoves[2] = 0; - gSaveBlock1.outbreakPokemonMoves[3] = 0; - gSaveBlock1.outbreakUnk4 = 0; - gSaveBlock1.outbreakPokemonProbability = 0; - gSaveBlock1.outbreakUnk5 = 0; -} - -void UpdateTVShowsPerDay(u16 arg0) -{ - sub_80BE8EC(arg0); - UpdateMassOutbreakTimeLeft(arg0); - sub_80BEE84(arg0); - sub_80BEA5C(arg0); -} - -void sub_80BE8EC(u16 arg0) -{ - u8 showidx; - - if (gSaveBlock1.outbreakPokemonSpecies == 0) - { - for (showidx=0; showidx<24; showidx++) - { - if (gSaveBlock1.tvShows[showidx].massOutbreak.var00 == TVSHOW_MASS_OUTBREAK - && gSaveBlock1.tvShows[showidx].massOutbreak.var01 == 0x01) - { - struct TVShowMassOutbreak *massOutbreak = &gSaveBlock1.tvShows[showidx].massOutbreak; - - if (massOutbreak->var16 < arg0) - massOutbreak->var16 = 0; - else - massOutbreak->var16 -= arg0; - break; - } - } - } -} - -void UpdateMassOutbreakTimeLeft(u16 arg0) -{ - if (gSaveBlock1.outbreakUnk5 <= arg0) - EndMassOutbreak(); - else - gSaveBlock1.outbreakUnk5 -= arg0; -} - -void sub_80BE97C(bool8 flag) -{ - u8 var0, var1; - - if (flag) - { - var0 = gUnknown_020387E2 >> 8; - if (var0 > 4) - sub_80BE9D4(); - gUnknown_020387E2 &= 0xFF; - var1 = gUnknown_020387E2 & 0xFF; - if (var1 != 0xFF) - gUnknown_020387E2++; - } - else - { - var0 = gUnknown_020387E2 & 0xFF; - if (var0 > 4) - sub_80BE9D4(); - gUnknown_020387E2 &= 0xFF00; - var1 = gUnknown_020387E2 >> 8; - if (var1 != 0xFF) - gUnknown_020387E2 += 0x100; - } -} - -void sub_80BE9D4(void) -{ - //TVShow *show; - gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows); - if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_FISHING_ADVICE) != 1) - { - struct TVShowPokemonAngler *pokemonAngler = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].pokemonAngler; - register u8 zero asm("r1") = 0; - - asm(""::"r"(zero)); - pokemonAngler->var00 = TVSHOW_FISHING_ADVICE; - pokemonAngler->var01 = zero; - pokemonAngler->var02 = gUnknown_020387E2 & 0xFF; - pokemonAngler->var03 = gUnknown_020387E2 >> 8; - pokemonAngler->var04 = gUnknown_020387E0; - StringCopy(pokemonAngler->playerName, gSaveBlock2.playerName); - sub_80BE138((TVShow *)pokemonAngler); - pokemonAngler->language = GAME_LANGUAGE; - } -} - -void sub_80BEA50(u16 var) -{ - gUnknown_020387E0 = var; -} - -void sub_80BEA88(void); - -void sub_80BEA5C(u16 arg0) -{ - struct TVShowWorldOfMasters *worldOfMasters = &gSaveBlock1.tvShows[24].worldOfMasters; - - if (worldOfMasters->var00 == TVSHOW_WORLD_OF_MASTERS) - { - if (worldOfMasters->var02 < 20) - sub_80BF55C(gSaveBlock1.tvShows, 0x18); - else - sub_80BEA88(); - } -} -void sub_80BEA88(void) -{ - struct TVShowWorldOfMasters *worldOfMastersSrc = &gSaveBlock1.tvShows[24].worldOfMasters; - - if (sub_80BF77C(0xFFFF) == 0) - { - gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows); - if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_WORLD_OF_MASTERS) != 1) - { - struct TVShowWorldOfMasters *worldOfMastersDst = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].worldOfMasters; - - worldOfMastersDst->var00 = TVSHOW_WORLD_OF_MASTERS; - worldOfMastersDst->var01 = 0; - worldOfMastersDst->var02 = worldOfMastersSrc->var02; - worldOfMastersDst->var06 = GetGameStat(GAME_STAT_STEPS) - worldOfMastersSrc->var06; - worldOfMastersDst->var04 = worldOfMastersSrc->var04; - worldOfMastersDst->var08 = worldOfMastersSrc->var08; - worldOfMastersDst->var0a = worldOfMastersSrc->var0a; - StringCopy(worldOfMastersDst->playerName, gSaveBlock2.playerName); - sub_80BE138((TVShow *)worldOfMastersDst); - worldOfMastersDst->language = GAME_LANGUAGE; - } - } -} - -void sub_80BEB20(void) -{ - u16 rval; - - if (FlagGet(SYS_GAME_CLEAR) != 0) - { - gUnknown_03005D38.var0 = sub_80BEBC8(gSaveBlock1.unknown_2ABC); - if (gUnknown_03005D38.var0 != -1 && sub_80BF77C(0x28f) != 1) - { - rval = (Random() % 3) + 1; - if (sub_80BEE48(rval) != 1) - { - gSaveBlock1.unknown_2ABC[gUnknown_03005D38.var0].val0 = rval; - gSaveBlock1.unknown_2ABC[gUnknown_03005D38.var0].val2 = 4; - gSaveBlock1.unknown_2ABC[gUnknown_03005D38.var0].val1 = 1; - } - } - } -} - -int sub_80BEBC8(struct UnknownSaveStruct2ABC *arg0) -{ - s8 i; - - for (i = 0; i < 16; i++) - { - if (arg0[i].val0 == 0) - return i; - } - return -1; -} - -void sub_80BEBF4(void) -{ - u8 i; - - for (i = 0; i < 16; i++) - sub_80BEC10(i); -} - -void sub_80BEC10(u8 arg0) -{ - gSaveBlock1.unknown_2ABC[arg0].val0 = 0; - gSaveBlock1.unknown_2ABC[arg0].val1 = 0; - gSaveBlock1.unknown_2ABC[arg0].val2 = 0; -} - -void sub_80BEC40(void) -{ - u8 i, j; - - for (i = 0; i < 15; i++) - { - if (gSaveBlock1.unknown_2ABC[i].val0 == 0) - { - for (j = i + 1; j < 16; j++) - { - if (gSaveBlock1.unknown_2ABC[j].val0 != 0) - { - gSaveBlock1.unknown_2ABC[i] = gSaveBlock1.unknown_2ABC[j]; - sub_80BEC10(j); - break; - } - } - } - } -} - -u8 sub_80BECA0(void) -{ - u8 i; - for (i = 0; i < 16; i++) - { - if (gSaveBlock1.unknown_2ABC[i].val0 != 0 - && gSaveBlock1.unknown_2ABC[i].val1 == 1 - && gSaveBlock1.unknown_2ABC[i].val2 < 3) - return i; - } - return 0xFF; -} - -void sub_80BECE8(void) -{ - u8 arg0; - arg0 = sub_80BECA0(); - if (arg0 == 0xff) - { - gScriptResult = 0; - return; - } - if (gSaveBlock1.unknown_2ABC[arg0].val2 == 0) - { - gSaveBlock1.unknown_2ABC[arg0].val1 = 2; - if (gLocalTime.hours < 20) - ShowFieldMessage(gTVNewsTextGroup2[gSaveBlock1.unknown_2ABC[arg0].val0]); - else - ShowFieldMessage(gTVNewsTextGroup3[gSaveBlock1.unknown_2ABC[arg0].val0]); - } - else - { - u16 value = gSaveBlock1.unknown_2ABC[arg0].val2; - - ConvertIntToDecimalStringN(gStringVar1, value, 0, 1); - gSaveBlock1.unknown_2ABC[arg0].val1 = 0; - ShowFieldMessage(gTVNewsTextGroup1[gSaveBlock1.unknown_2ABC[arg0].val0]); - } - gScriptResult = 1; -} - -bool8 GetPriceReduction(u8 arg0) -{ - u8 i; - - if (arg0 == 0) - return FALSE; - for (i=0; i<16; i++) - { - if (gSaveBlock1.unknown_2ABC[i].val0 == arg0) - { - if (gSaveBlock1.unknown_2ABC[i].val1 == 2 && IsPriceDiscounted(arg0) != 0) - return TRUE; - else - return FALSE; - } - } - return FALSE; -} - -bool8 IsPriceDiscounted(u8 arg0) -{ - switch (arg0) - { - case 1: - if (gSaveBlock1.location.mapGroup == MAP_GROUP_SLATEPORT_CITY - && gSaveBlock1.location.mapNum == MAP_ID_SLATEPORT_CITY - && gScriptLastTalked == 0x1a) - return TRUE; - else - return FALSE; - break; - case 3: - if (gSaveBlock1.location.mapGroup == MAP_GROUP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP - && gSaveBlock1.location.mapNum == MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP) - return TRUE; - else - return FALSE; - break; - default: - return TRUE; - } -} - -bool8 sub_80BEE48(u8 arg0) -{ - u8 i; - - if (arg0 == 0) - return TRUE; - for (i=0; i<16; i++) - { - if (gSaveBlock1.unknown_2ABC[i].val0 == arg0) - return TRUE; - } - return FALSE; -} - -void sub_80BEE84(u16 var0) -{ - u8 i; - - for (i=0; i<16; i++) - { - if (gSaveBlock1.unknown_2ABC[i].val0) - { - if (gSaveBlock1.unknown_2ABC[i].val2 < var0) - { - sub_80BEC10(i); - } - else - { - if (!gSaveBlock1.unknown_2ABC[i].val1 && FlagGet(SYS_GAME_CLEAR) == 1) - gSaveBlock1.unknown_2ABC[i].val1 = 1; - gSaveBlock1.unknown_2ABC[i].val2 -= var0; - } - } - } - sub_80BEC40(); -} - -void sub_80BEF10(u8 strvaridx, u8 rank) -{ - switch (rank) - { - case NORMAL_RANK: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[NORMAL_RANK + 5]); - break; - case SUPER_RANK: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[SUPER_RANK + 5]); - break; - case HYPER_RANK: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[HYPER_RANK + 5]); - break; - case MASTER_RANK: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[MASTER_RANK + 5]); - break; - } -} - -void CopyContestCategoryToStringVar(u8 strvaridx, u8 category) -{ - switch (category) - { - case CONTEST_COOL: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_COOL]); - break; - case CONTEST_BEAUTY: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_BEAUTY]); - break; - case CONTEST_CUTE: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_CUTE]); - break; - case CONTEST_SMART: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_SMART]); - break; - case CONTEST_TOUGH: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_TOUGH]); - break; - } -} - -void SetContestCategoryStringVarForInterview(void) -{ - struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[gSpecialVar_0x8004].bravoTrainer; - - CopyContestCategoryToStringVar(1, bravoTrainer->contestCategory); -} - -void sub_80BF088(u8 arg0, s32 price) -{ - size_t log10val = sub_80BF0B8(price); - - ConvertIntToDecimalStringN(gUnknown_083D1464[arg0], price, 0, log10val); -} - -size_t sub_80BF0B8(int value) -{ - if (value / 10 == 0) - return 1; - else if (value / 100 == 0) - return 2; - else if (value / 1000 == 0) - return 3; - else if (value / 10000 == 0) - return 4; - else if (value / 100000 == 0) - return 5; - else if (value / 1000000 == 0) - return 6; - else if (value / 10000000 == 0) - return 7; - else if (value / 100000000 == 0) - return 8; - else - return 1; -} - -void sub_80BF154(u8 arg0, struct TVShowSmartShopper *arg1) -{ - u8 i; - s32 price; - price = 0; - - for (i = 0; i < 3; i++) - { - if (arg1->itemIds[i]) - price += ItemId_GetPrice(arg1->itemIds[i]) * arg1->itemAmounts[i]; - } - if (arg1->priceReduced == 1) - sub_80BF088(arg0, price >> 1); - else - sub_80BF088(arg0, price); -} - -bool8 sub_80BF1B4(u8 showIdx) -{ - u8 i; - //TVShow *tvShows; - TVShow *tvShows = gSaveBlock1.tvShows; - u32 trainerId = GetPlayerTrainerId(); - - for (i = 5; i < 24; i++) - { - if (tvShows[i].common.var00 == showIdx) - { - if ((trainerId & 0xFF) == tvShows[i].common.trainerIdLo && ((trainerId >> 8) & 0xFF) == tvShows[i].common.trainerIdHi) - return TRUE; - } - } - return FALSE; -} - -void sub_80BF20C(void) -{ - u8 i, j; - u16 tmpId, tmpAmount; - - for (i = 0; i < 2; i++) - { - for (j = i + 1; j < 3; j++) - { - if (gUnknown_02038724[i].item_amount < gUnknown_02038724[j].item_amount) - { - tmpId = gUnknown_02038724[i].item_id; - tmpAmount = gUnknown_02038724[i].item_amount; - gUnknown_02038724[i].item_id = gUnknown_02038724[j].item_id; - gUnknown_02038724[i].item_amount = gUnknown_02038724[j].item_amount; - gUnknown_02038724[j].item_id = tmpId; - gUnknown_02038724[j].item_amount = tmpAmount; - } - } - } -} - -void sub_80BF25C(u8 showType) -{ - u8 i; - - for (i = 0; i < 5; i++) - { - if (gSaveBlock1.tvShows[i].common.var00 == showType) - { - if(gSaveBlock1.tvShows[i].common.var01 == 1) - { - gScriptResult = 1; - } - else - { - sub_80BF55C(gSaveBlock1.tvShows, i); - sub_80BF588(gSaveBlock1.tvShows); - sub_80BF6D8(); - } - return; - } - } - sub_80BF6D8(); -} - -void sub_80BF2C4(void) -{ - gScriptResult = 0; - switch (gSpecialVar_0x8005) - { - case TVSHOW_FAN_CLUB_LETTER: - sub_80BF334(); - break; - case TVSHOW_RECENT_HAPPENINGS: - sub_80BF3A4(); - break; - case TVSHOW_PKMN_FAN_CLUB_OPINIONS: - sub_80BF3DC(); - break; - case TVSHOW_UNKN_SHOWTYPE_04: - sub_80BF46C(); - break; - case TVSHOW_NAME_RATER_SHOW: - sub_80BF478(); - break; - case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: - sub_80BF484(); - break; - case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: - sub_80BF4BC(); - break; - } -} - -void sub_80BF334(void) -{ - struct TVShowFanClubLetter *fanclubLetter; - - sub_80BF25C(TVSHOW_FAN_CLUB_LETTER); - if (gScriptResult == 0) - { - StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, 0)]); - fanclubLetter = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].fanclubLetter; - sub_80EB6FC(fanclubLetter->pad04, 6); - } -} - -void sub_80BF3A4(void) -{ - struct TVShowRecentHappenings *recentHappenings; - - sub_80BF25C(TVSHOW_RECENT_HAPPENINGS); - if (gScriptResult == 0) - { - recentHappenings = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].recentHappenings; - sub_80EB6FC(recentHappenings->var04, 6); - } -} - -void sub_80BF3DC(void) -{ - struct TVShowFanclubOpinions *fanclubOpinions; - - sub_80BF25C(TVSHOW_PKMN_FAN_CLUB_OPINIONS); - if (gScriptResult == 0) - { - StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, 0)]); - GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_NICKNAME, gStringVar2); - StringGetEnd10(gStringVar2); - fanclubOpinions = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].fanclubOpinions; - sub_80EB6FC(fanclubOpinions->var1C, 2); - } -} - -void sub_80BF46C(void) -{ - gScriptResult = 1; -} - -void sub_80BF478(void) -{ - sub_80BF25C(TVSHOW_NAME_RATER_SHOW); -} - -void sub_80BF484(void) -{ - struct TVShowBravoTrainerPokemonProfiles *bravoTrainer; - - sub_80BF25C(TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE); - if (gScriptResult == 0) - { - bravoTrainer = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainer; - sub_80EB6FC(bravoTrainer->var04, 2); - } -} - -void sub_80BF4BC(void) -{ - struct TVShowBravoTrainerBattleTowerSpotlight *bravoTrainerTower; - - sub_80BF25C(TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE); - if (gScriptResult == 0) - { - bravoTrainerTower = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainerTower; - sub_80EB6FC(bravoTrainerTower->var18, 1); // wrong struct ident, fix later - } -} - -#if ENGLISH -u8 sub_80BF4F4(u8 arg0) -{ - u32 species; - - GetMonData(&gPlayerParty[arg0], MON_DATA_NICKNAME, &gStringVar1); - species = GetMonData(&gPlayerParty[arg0], MON_DATA_SPECIES, NULL); - if (StringCompareWithoutExtCtrlCodes(gSpeciesNames[species], gStringVar1) == FALSE) - return FALSE; - - return TRUE; -} -#elif GERMAN -u8 sub_80BF4F4(u8 arg0) -{ - u8 langData[4]; - u32 species; - u8 *tmp; - - GetMonData(&gPlayerParty[arg0], MON_DATA_NICKNAME, &gStringVar1); - - tmp = langData; - tmp[0] = GetMonData(&gPlayerParty[arg0], MON_DATA_LANGUAGE, &langData); - if (tmp[0] != GAME_LANGUAGE) - return TRUE; - - species = GetMonData(&gPlayerParty[arg0], MON_DATA_SPECIES, NULL); - if (StringCompareWithoutExtCtrlCodes(gSpeciesNames[species], gStringVar1)) - return TRUE; - - return FALSE; -} -#endif - -u8 sub_80BF544(void) -{ - return sub_80BF4F4(GetLeadMonIndex()); -} - -void sub_80BF55C(TVShow tvShow[], u8 showidx) -{ - u8 idx; - - tvShow[showidx].common.var00 = 0; - tvShow[showidx].common.var01 = 0; - for (idx = 0; idx < 34; idx++) - tvShow[showidx].common.pad02[idx] = 0; -} - -void sub_80BF588(TVShow tvShow[]) -{ - u8 showidx; - u8 showidx2; - - for (showidx = 0; showidx < 4; showidx++) - { - if (tvShow[showidx].common.var00 == 0) - { - for (showidx2 = showidx + 1; showidx2 < 5; showidx2++) - { - if (tvShow[showidx2].common.var00 != 0) - { - tvShow[showidx] = tvShow[showidx2]; - sub_80BF55C(tvShow, showidx2); - break; - } - } - } - } - for (showidx = 5; showidx < 24; showidx++) - { - if (tvShow[showidx].common.var00 == 0) - { - for (showidx2 = showidx + 1; showidx2 < 24; showidx2++) - { - if (tvShow[showidx2].common.var00 != 0) - { - tvShow[showidx] = tvShow[showidx2]; - sub_80BF55C(gSaveBlock1.tvShows, showidx2); - break; - } - } - } - } -} - -u16 sub_80BF638(u8 arg0, u16 arg1) -{ - u16 retval = sub_80BF674(arg1); - - StringCopy(gUnknown_083D1464[arg0], gSpeciesNames[retval]); - return retval; -} - -u16 sub_80BF674(u16 species) -{ - u16 rspecies; - u16 cspecies; - - rspecies = (Random() % (NUM_SPECIES - 1)) + 1; - cspecies = rspecies; - while (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(cspecies), 0) != 1 || cspecies == species) - { - if (cspecies == SPECIES_BULBASAUR) - cspecies = NUM_SPECIES - 1; - else - cspecies --; - if (cspecies == rspecies) - { - cspecies = species; - return cspecies; - } - } - return cspecies; -} - -void sub_80BF6D8(void) -{ - gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows); - gSpecialVar_0x8006 = gUnknown_03005D38.var0; - if (gUnknown_03005D38.var0 == -1) - gScriptResult = 1; - else - gScriptResult = 0; -} - -s8 sub_80BF720(TVShow tvShow[]) -{ - u8 idx; - - for (idx = 0; idx < 5; idx++) - { - if (tvShow[idx].common.var00 == 0) - return idx; - } - return -1; -} - -s8 sub_80BF74C(TVShow tvShow[]) -{ - s8 idx; - - for (idx = 5; idx < 24; idx++) - { - if (tvShow[idx].common.var00 == 0) - return idx; - } - return -1; -} - -bool8 sub_80BF77C(u16 value) -{ - if (Random() <= value) - return FALSE; - return TRUE; -} - -void sub_80BF79C(TVShow *arg0) -{ - u8 i = Random() % 6; - - while (1) - { - if (i == 6) - i = 0; - if (arg0->recentHappenings.var04[i] != 0xFFFF) - break; - i++; - } - sub_80EB3FC(gStringVar3, arg0->recentHappenings.var04[i]); -} - -u8 sub_80BF7E8(struct TVShowNameRaterShow *arg0) -{ - u16 flagsum = 0; - u8 i = 0; - - if (arg0->pokemonName[0] != 0xFF) - { - while (i < 11 && arg0->pokemonName[i] != 0xFF) - { - flagsum += arg0->pokemonName[i]; - i++; - } - } - return flagsum & 0x7; -} - - -void sub_80BF820(u8 arg0, u8 arg1, u8 arg2, u16 arg3, u16 arg4, struct TVShowNameRaterShow *tvShow) -{ - u8 flags[3]; - u16 nameLength; - u8 i; - - for (i = 0; i < 3; i++) - flags[i] = EOS; - - if (arg3 == 0) - { - nameLength = StringLength(tvShow->trainerName); - if (arg2 == 0) - { - flags[0] = tvShow->trainerName[arg1]; - } - else if (arg2 == 1) - { - flags[0] = tvShow->trainerName[nameLength - arg1]; - } - else if (arg2 == 2) { - flags[0] = tvShow->trainerName[arg1]; - flags[1] = tvShow->trainerName[arg1 + 1]; - } - else - { - flags[0] = tvShow->trainerName[nameLength - (arg1 + 2)]; - flags[1] = tvShow->trainerName[nameLength - (arg1 + 1)]; - } - } - else if (arg3 == 1) - { - nameLength = StringLength(tvShow->pokemonName); - if (arg2 == 0) - { - flags[0] = tvShow->pokemonName[arg1]; - } - else if (arg2 == 1) - { - flags[0] = tvShow->pokemonName[nameLength - arg1]; - } - else if (arg2 == 2) - { - flags[0] = tvShow->pokemonName[arg1]; - flags[1] = tvShow->pokemonName[arg1 + 1]; - } - else - { - flags[0] = tvShow->pokemonName[nameLength - (arg1 + 2)]; - flags[1] = tvShow->pokemonName[nameLength - (arg1 + 1)]; - } - } - else - { - nameLength = StringLength(gSpeciesNames[arg4]); - if (arg2 == 0) - { - flags[0] = gSpeciesNames[arg4][arg1]; - } - else if (arg2 == 1) - { - flags[0] = gSpeciesNames[arg4][nameLength - arg1]; - } - else if (arg2 == 2) - { - flags[0] = gSpeciesNames[arg4][arg1]; - flags[1] = gSpeciesNames[arg4][arg1 + 1]; - } - else - { - flags[0] = gSpeciesNames[arg4][nameLength - (arg1 + 2)]; - flags[1] = gSpeciesNames[arg4][nameLength - (arg1 + 1)]; - } - } - StringCopy(gUnknown_083D1464[arg0], flags); -} - -bool8 sub_80BF974(void) -{ - u8 i; - - for (i = 0; i < 5; i++) - { - if (gSaveBlock1.tvShows[i].common.var00 == gSpecialVar_0x8004) - return TRUE; - } - return FALSE; -} - -bool8 sub_80BF9B4(void) -{ - GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_NICKNAME, &gStringVar1); - if (!StringCompareWithoutExtCtrlCodes(gStringVar3, gStringVar1)) - return FALSE; - sub_80BE478(); - return TRUE; -} - -void c2_080CC144(void); - -void sub_80BF9F8(void) -{ - u16 spec; - u16 gender; - u32 pval; - - GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_NICKNAME, &gStringVar3); - GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_NICKNAME, &gStringVar2); - spec = GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_SPECIES, 0); - gender = GetMonGender(&(gPlayerParty[gSpecialVar_0x8004])); - pval = GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_PERSONALITY, 0); - DoNamingScreen(3, gStringVar2, spec, gender, pval, c2_080CC144); -} - -void c2_080CC144(void) -{ - SetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_NICKNAME, gStringVar2); - c2_exit_to_overworld_1_continue_scripts_restart_music(); -} - -void sub_80BFAE0(void) -{ - GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_NICKNAME, &gStringVar1); - StringGetEnd10(gStringVar1); -} - -void sub_80BFB10(void) -{ - if (GetPlayerTrainerId() == GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_OT_ID, 0)) - gScriptResult = 0; - else - gScriptResult = 1; -} - -u8 sub_80BFB54(u8 arg0) -{ - if (arg0 == 0) - return 0; - else if (arg0 > 0 && arg0 <= 20) - return 2; - else if (arg0 > 20 && arg0 <= 40) - return 3; - else if (arg0 > 40 && arg0 <= 60) - return 4; - else - return 0; -} - -u32 GetPlayerTrainerId(void) -{ - return (gSaveBlock2.playerTrainerId[3] << 24) | (gSaveBlock2.playerTrainerId[2] << 16) | (gSaveBlock2.playerTrainerId[1] << 8) | (gSaveBlock2.playerTrainerId[0]); -} - -u8 CheckForBigMovieOrEmergencyNewsOnTV(void) -{ - if (gSaveBlock1.location.mapGroup != MAP_GROUP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F) - return 0; - if (gSaveBlock2.playerGender == MALE) - { - if (gSaveBlock1.location.mapNum != MAP_ID_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F) - return 0; - } - else - { - if (gSaveBlock1.location.mapNum != MAP_ID_LITTLEROOT_TOWN_MAYS_HOUSE_1F) - return 0; - } - if (FlagGet(SYS_TV_LATI) == 1) - return 1; - if (FlagGet(SYS_TV_HOME) == 1) - return 2; - return 1; -} - -void GetMomOrDadStringForTVMessage(void) -{ - if (gSaveBlock1.location.mapGroup == MAP_GROUP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F) - { - if (gSaveBlock2.playerGender == MALE) - { - if (gSaveBlock1.location.mapNum == MAP_ID_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F) - { - StringCopy(gStringVar1, gOtherText_Mom); - VarSet(VAR_0x4003, 1); - } - } - else - { - if (gSaveBlock1.location.mapNum == MAP_ID_LITTLEROOT_TOWN_MAYS_HOUSE_1F) - { - StringCopy(gStringVar1, gOtherText_Mom); - VarSet(VAR_0x4003, 1); - } - } - } - if (VarGet(VAR_0x4003) == 1) - { - StringCopy(gStringVar1, gOtherText_Mom); - } - else if (VarGet(VAR_0x4003) == 2) - { - StringCopy(gStringVar1, gOtherText_Dad); - } - else if (VarGet(VAR_0x4003) > 2) - { - if (VarGet(VAR_0x4003) % 2 == 0) - StringCopy(gStringVar1, gOtherText_Mom); - else - StringCopy(gStringVar1, gOtherText_Dad); - } - else - { - if (Random() % 2 != 0) - { - StringCopy(gStringVar1, gOtherText_Mom); - VarSet(VAR_0x4003, 1); - } - else - { - StringCopy(gStringVar1, gOtherText_Dad); - VarSet(VAR_0x4003, 2); - } - } -} - -void sub_80BFD20(void) -{ - VarSet(VAR_0x40BC, 0); - RemoveFieldObjectByLocalIdAndMap(5, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); -} - -typedef union ewramStruct_02007000 -{ - TVShow tvshows[4][25]; - struct UnknownSaveStruct2ABC unknown_2abc[4][16]; -} ewramStruct_02007000; - -void sub_80BFE24(TVShow arg0[25], TVShow arg1[25], TVShow arg2[25], TVShow arg3[25]); - -void sub_80C04A0(void); -void sub_80C01D4(void); -void sub_80C0408(void); - -void sub_80BFD44(u8 *arg0, u32 arg1, u8 arg2) -{ - u8 i; - ewramStruct_02007000 *ewramTVShows; - - for (i = 0; i < 4; i++) - memcpy(&gUnknown_02007000.tvshows[i], &arg0[i * arg1], 25 * sizeof(TVShow)); - ewramTVShows = &gUnknown_02007000; - switch (arg2) - { - case 0: - sub_80BFE24(gSaveBlock1.tvShows, ewramTVShows->tvshows[1], ewramTVShows->tvshows[2], ewramTVShows->tvshows[3]); - break; - case 1: - sub_80BFE24(ewramTVShows->tvshows[0], gSaveBlock1.tvShows, ewramTVShows->tvshows[2], ewramTVShows->tvshows[3]); - break; - case 2: - sub_80BFE24(ewramTVShows->tvshows[0], ewramTVShows->tvshows[1], gSaveBlock1.tvShows, ewramTVShows->tvshows[3]); - break; - case 3: - sub_80BFE24(ewramTVShows->tvshows[0], ewramTVShows->tvshows[1], ewramTVShows->tvshows[2], gSaveBlock1.tvShows); - break; - } - sub_80BF588(gSaveBlock1.tvShows); - sub_80C04A0(); - sub_80BF588(gSaveBlock1.tvShows); - sub_80C01D4(); - sub_80C0408(); -} - -s8 sub_80C019C(TVShow tvShows[]); -bool8 sub_80BFF68(TVShow * tv1[25], TVShow * tv2[25], u8 idx); -u8 sub_80C004C(TVShow *tv1, TVShow *tv2, u8 idx); -u8 sub_80C00B4(TVShow *tv1, TVShow *tv2, u8 idx); -u8 sub_80C0134(TVShow *tv1, TVShow *tv2, u8 idx); - -void sub_80BFE24(TVShow arg0[25], TVShow arg1[25], TVShow arg2[25], TVShow arg3[25]) -{ - u8 i, j; - TVShow **argslist[4]; - - argslist[0] = &arg0; - argslist[1] = &arg1; - argslist[2] = &arg2; - argslist[3] = &arg3; - gUnknown_03000720 = GetLinkPlayerCount(); - while (1) - { - for (i=0; icommon.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.trainerIdHi) - return FALSE; - tv2->common.trainerIdLo = tv2->common.srcTrainerIdLo; - tv2->common.trainerIdHi = tv2->common.srcTrainerIdHi; - tv2->common.srcTrainerIdLo = linkTrainerId & 0xFF; - tv2->common.srcTrainerIdHi = linkTrainerId >> 8; - *tv1 = *tv2; - tv1->common.var01 = 1; - return TRUE; -} - -u8 sub_80C00B4(TVShow *tv1, TVShow *tv2, u8 idx) -{ - u32 linkTrainerId = GetLinkPlayerTrainerId(idx); - if ((linkTrainerId & 0xFF) == tv2->common.srcTrainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.srcTrainerIdHi) - return FALSE; - if ((linkTrainerId & 0xFF) == tv2->common.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.trainerIdHi) - return FALSE; - tv2->common.srcTrainerIdLo = tv2->common.srcTrainerId2Lo; - tv2->common.srcTrainerIdHi = tv2->common.srcTrainerId2Hi; - tv2->common.srcTrainerId2Lo = linkTrainerId & 0xFF; - tv2->common.srcTrainerId2Hi = linkTrainerId >> 8; - *tv1 = *tv2; - tv1->common.var01 = 1; - return TRUE; -} - -u8 sub_80C0134(TVShow *tv1, TVShow *tv2, u8 idx) -{ - u32 linkTrainerId = GetLinkPlayerTrainerId(idx); - if ((linkTrainerId & 0xFF) == tv2->common.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.trainerIdHi) - return FALSE; - tv2->common.trainerIdLo = tv2->common.srcTrainerIdLo; - tv2->common.trainerIdHi = tv2->common.srcTrainerIdHi; - tv2->common.srcTrainerIdLo = linkTrainerId & 0xFF; - tv2->common.srcTrainerIdHi = linkTrainerId >> 8; - *tv1 = *tv2; - tv1->common.var01 = 1; - tv1->common.var16[0] = 1; - return TRUE; -} - -s8 sub_80C019C(TVShow tvShows[]) -{ - u8 i; - for (i = 0; i < 24; i++) - { - if (tvShows[i].common.var01 == 0 && (u8)(tvShows[i].common.var00 - 1) < 60) - return i; - } - return -1; -} - -#ifdef NONMATCHING -void sub_80C01D4(void) -{ - u16 i; - for (i=0; i<24; i++) - { - switch (gSaveBlock1.tvShows[i].common.var00) - { - case 0: - case TVSHOW_RECENT_HAPPENINGS: - case TVSHOW_SMART_SHOPPER: - case TVSHOW_MASS_OUTBREAK: - break; - case TVSHOW_FAN_CLUB_LETTER: - sub_80C03C8((&gSaveBlock1.tvShows[i])->fanclubLetter.species, i); - break; - case TVSHOW_PKMN_FAN_CLUB_OPINIONS: - sub_80C03C8((&gSaveBlock1.tvShows[i])->fanclubOpinions.var02, i); - break; - case TVSHOW_UNKN_SHOWTYPE_04: - sub_80C03C8((&gSaveBlock1.tvShows[i])->unkShow04.var06, i); - break; - case TVSHOW_NAME_RATER_SHOW: - sub_80C03C8((&gSaveBlock1.tvShows[i])->nameRaterShow.species, i); - sub_80C03C8((&gSaveBlock1.tvShows[i])->nameRaterShow.var1C, i); - break; - case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: - sub_80C03C8((&gSaveBlock1.tvShows[i])->bravoTrainer.species, i); - break; - case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: - sub_80C03C8((&gSaveBlock1.tvShows[i])->bravoTrainerTower.species, i); - sub_80C03C8((&gSaveBlock1.tvShows[i])->bravoTrainerTower.defeatedSpecies, i); - break; - case TVSHOW_POKEMON_TODAY_CAUGHT: - sub_80C03C8((&gSaveBlock1.tvShows[i])->pokemonToday.species, i); - break; - case TVSHOW_POKEMON_TODAY_FAILED: - sub_80C03C8((&gSaveBlock1.tvShows[i])->pokemonTodayFailed.species, i); - sub_80C03C8((&gSaveBlock1.tvShows[i])->pokemonTodayFailed.species2, i); - break; - case TVSHOW_FISHING_ADVICE: - sub_80C03C8((&gSaveBlock1.tvShows[i])->pokemonAngler.var04, i); - break; - case TVSHOW_WORLD_OF_MASTERS: - sub_80C03C8((&gSaveBlock1.tvShows[i])->worldOfMasters.var08, i); - sub_80C03C8((&gSaveBlock1.tvShows[i])->worldOfMasters.var04, i); - break; - default: - sub_80C03A8(i); - } - } -} -#else -__attribute__((naked)) -void sub_80C01D4(void) { - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - movs r6, 0\n\ -_080C01D8:\n\ - ldr r0, _080C01F8 @ =gSaveBlock1\n\ - lsls r2, r6, 3\n\ - adds r1, r2, r6\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldr r0, _080C01FC @ =0x00002738\n\ - adds r1, r0\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x29\n\ - bls _080C01EE\n\ - b _default\n\ -_080C01EE:\n\ - lsls r0, 2\n\ - ldr r1, _080C0200 @ =_080C0204\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_080C01F8: .4byte gSaveBlock1\n\ -_080C01FC: .4byte 0x00002738\n\ -_080C0200: .4byte _080C0204\n\ - .align 2, 0\n\ -_080C0204:\n\ - .4byte _break\n\ - .4byte _fanclubLetter @ TVSHOW_FAN_CLUB_LETTER\n\ - .4byte _break @ TVSHOW_RECENT_HAPPENINGS\n\ - .4byte _fanclubOpinions @ TVSHOW_PKMN_FAN_CLUB_OPINIONS\n\ - .4byte _showtype4 @ TVSHOW_UNKN_SHOWTYPE_04\n\ - .4byte _nameRater @ TVSHOW_NAME_RATER_SHOW\n\ - .4byte _bravoTrainerContest @ TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE\n\ - .4byte _bravoTrainerTower @ TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _pokemonTodayS @ TVSHOW_POKEMON_TODAY_CAUGHT\n\ - .4byte _break @ TVSHOW_SMART_SHOPPER\n\ - .4byte _pokemonTodayF @ TVSHOW_POKEMON_TODAY_FAILED\n\ - .4byte _fishing @ TVSHOW_FISHING_ADVICE\n\ - .4byte _worldOfMasters @ TVSHOW_WORLD_OF_MASTERS\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _break @ TVSHOW_MASS_OUTBREAK\n\ -_fanclubLetter:\n\ - adds r0, r2, r6\n\ - lsls r0, 2\n\ - ldr r1, _080C02B8 @ =gSaveBlock1 + 0x2738\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x2]\n\ - b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C02B8: .4byte gSaveBlock1 + 0x2738\n\ -_fanclubOpinions:\n\ - adds r0, r2, r6\n\ - lsls r0, 2\n\ - ldr r1, _080C02C8 @ =gSaveBlock1 + 0x2738\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x2]\n\ - b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C02C8: .4byte gSaveBlock1 + 0x2738\n\ -_showtype4:\n\ - adds r0, r2, r6\n\ - lsls r0, 2\n\ - ldr r1, _080C02D8 @ =gSaveBlock1 + 0x2738\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x6]\n\ - b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C02D8: .4byte gSaveBlock1 + 0x2738\n\ -_nameRater:\n\ - adds r4, r2, r6\n\ - lsls r4, 2\n\ - ldr r0, _080C02F4 @ =gSaveBlock1 + 0x2738\n\ - adds r4, r0\n\ - ldrh r0, [r4, 0x2]\n\ - lsls r5, r6, 24\n\ - lsrs r5, 24\n\ - adds r1, r5, 0\n\ - bl sub_80C03C8\n\ - ldrh r0, [r4, 0x1C]\n\ - b _checkSpecies2 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C02F4: .4byte gSaveBlock1 + 0x2738\n\ -_bravoTrainerContest:\n\ - adds r0, r2, r6\n\ - lsls r0, 2\n\ - ldr r1, _080C0304 @ =gSaveBlock1 + 0x2738\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x2]\n\ - b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C0304: .4byte gSaveBlock1 + 0x2738\n\ -_bravoTrainerTower:\n\ - adds r4, r2, r6\n\ - lsls r4, 2\n\ - ldr r0, _080C0320 @ =gSaveBlock1 + 0x2738\n\ - adds r4, r0\n\ - ldrh r0, [r4, 0xA]\n\ - lsls r5, r6, 24\n\ - lsrs r5, 24\n\ - adds r1, r5, 0\n\ - bl sub_80C03C8\n\ - ldrh r0, [r4, 0x14]\n\ - b _checkSpecies2 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C0320: .4byte gSaveBlock1 + 0x2738\n\ -_pokemonTodayS:\n\ - adds r0, r2, r6\n\ - lsls r0, 2\n\ - ldr r1, _080C0330 @ =gSaveBlock1 + 0x2738\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x10]\n\ - b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C0330: .4byte gSaveBlock1 + 0x2738\n\ -_pokemonTodayF:\n\ - adds r4, r2, r6\n\ - lsls r4, 2\n\ - ldr r0, _080C034C @ =gSaveBlock1 + 0x2738\n\ - adds r4, r0\n\ - ldrh r0, [r4, 0xC]\n\ - lsls r5, r6, 24\n\ - lsrs r5, 24\n\ - adds r1, r5, 0\n\ - bl sub_80C03C8\n\ - ldrh r0, [r4, 0xE]\n\ - b _checkSpecies2 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C034C: .4byte gSaveBlock1 + 0x2738\n\ -_fishing:\n\ - adds r0, r2, r6\n\ - lsls r0, 2\n\ - ldr r1, _080C0364 @ =gSaveBlock1 + 0x2738\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x4]\n\ -_checkSpecies1:\n\ - lsls r1, r6, 24\n\ - lsrs r1, 24\n\ - bl sub_80C03C8\n\ - b _break\n\ - .align 2, 0\n\ -_080C0364: .4byte gSaveBlock1 + 0x2738\n\ -_worldOfMasters:\n\ - adds r4, r2, r6\n\ - lsls r4, 2\n\ - ldr r0, _080C0388 @ =gSaveBlock1 + 0x2738\n\ - adds r4, r0\n\ - ldrh r0, [r4, 0x8]\n\ - lsls r5, r6, 24\n\ - lsrs r5, 24\n\ - adds r1, r5, 0\n\ - bl sub_80C03C8\n\ - ldrh r0, [r4, 0x4]\n\ -_checkSpecies2:\n\ - adds r1, r5, 0\n\ - bl sub_80C03C8\n\ - b _break\n\ - .align 2, 0\n\ -_080C0388: .4byte gSaveBlock1 + 0x2738\n\ -_default:\n\ - lsls r0, r6, 24\n\ - lsrs r0, 24\n\ - bl sub_80C03A8\n\ -_break:\n\ - adds r0, r6, 0x1\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - cmp r6, 0x17\n\ - bhi _080C03A0\n\ - b _080C01D8\n\ -_080C03A0:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ -.syntax divided\n"); -} -#endif - -void sub_80C03A8(u8 showidx) -{ - gSaveBlock1.tvShows[showidx].common.var01 = 0; -} - -void sub_80C03C8(u16 species, u8 showidx) -{ - if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(species), 0) == 0) - gSaveBlock1.tvShows[showidx].common.var01 = 0; -} - -void sub_80C0408(void) -{ - u16 i; - - if (FlagGet(SYS_GAME_CLEAR) == TRUE) - return; - for (i = 0; i < 24; i++) - { - if (gSaveBlock1.tvShows[i].common.var00 == TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE) - gSaveBlock1.tvShows[i].common.var01 = 0; - else if (gSaveBlock1.tvShows[i].common.var00 == TVSHOW_MASS_OUTBREAK) - gSaveBlock1.tvShows[i].common.var01 = 0; - } -} - -void sub_80C045C(void) -{ - u8 i; - - for (i = 0; i < 5; i++) - { - if (sub_80BFB54(gSaveBlock1.tvShows[i].common.var00) == 2) - gSaveBlock1.tvShows[i].common.var01 = 0; - } -} - -void sub_80C04A0(void) -{ - s8 showIdx; - s8 count; - count = 0; - - for (showIdx = 5; showIdx < 24; showIdx++) - { - if (gSaveBlock1.tvShows[showIdx].common.var00 == 0) - count++; - } - for (showIdx = 0; showIdx < 5 - count; showIdx++) - sub_80BF55C(gSaveBlock1.tvShows, showIdx+5); -} - -void sub_80C05C4(struct UnknownSaveStruct2ABC[16], struct UnknownSaveStruct2ABC[16], struct UnknownSaveStruct2ABC[16], struct UnknownSaveStruct2ABC[16]); -void sub_80C0750(void); -void sub_80C0788(void); -s8 sub_80C0730(struct UnknownSaveStruct2ABC[16], u8); -void sub_80C06BC(struct UnknownSaveStruct2ABC *[16], struct UnknownSaveStruct2ABC *[16]); - -void sub_80C0514(void *a0, u32 a1, u8 a2) -{ - ewramStruct_02007000 *struct02007000; - u8 i; - - for (i = 0; i < 4; i++) - memcpy(gUnknown_02007000.unknown_2abc[i], a0 + i * a1, 64); - struct02007000 = &gUnknown_02007000; - switch (a2) - { - case 0: - sub_80C05C4(gSaveBlock1.unknown_2ABC, struct02007000->unknown_2abc[1], struct02007000->unknown_2abc[2], struct02007000->unknown_2abc[3]); - break; - case 1: - sub_80C05C4(struct02007000->unknown_2abc[0], gSaveBlock1.unknown_2ABC, struct02007000->unknown_2abc[2], struct02007000->unknown_2abc[3]); - break; - case 2: - sub_80C05C4(struct02007000->unknown_2abc[0], struct02007000->unknown_2abc[1], gSaveBlock1.unknown_2ABC, struct02007000->unknown_2abc[3]); - break; - case 3: - sub_80C05C4(struct02007000->unknown_2abc[0], struct02007000->unknown_2abc[1], struct02007000->unknown_2abc[2], gSaveBlock1.unknown_2ABC); - break; - } - sub_80C0750(); - sub_80C0788(); -} - -void sub_80C05C4(struct UnknownSaveStruct2ABC a0[16], struct UnknownSaveStruct2ABC a1[16], struct UnknownSaveStruct2ABC a2[16], struct UnknownSaveStruct2ABC a3[16]) -{ - u8 i; - u8 j; - u8 k; - struct UnknownSaveStruct2ABC ** arglist[4]; - - arglist[0] = &a0; - arglist[1] = &a1; - arglist[2] = &a2; - arglist[3] = &a3; - gUnknown_03000721 = GetLinkPlayerCount(); - for (i = 0; i < 16; i++) - { - for (j = 0; j < gUnknown_03000721; j++) - { - gUnknown_03000722 = sub_80C0730(*arglist[j], i); - if (gUnknown_03000722 != -1) - { - for (k = 0; k < gUnknown_03000721-1; k++) - { - gUnknown_03005D38.var0 = sub_80BEBC8(*arglist[(j + k + 1) % gUnknown_03000721]); - if (gUnknown_03005D38.var0 != -1) - sub_80C06BC(arglist[(j + k + 1) % gUnknown_03000721], arglist[j]); - } - } - } - } -} - -void sub_80C06BC(struct UnknownSaveStruct2ABC *arg0[16], struct UnknownSaveStruct2ABC *arg1[16]) -{ - struct UnknownSaveStruct2ABC *str0; - struct UnknownSaveStruct2ABC *str1; - - str0 = arg0[0]; - str1 = arg1[0]; - str1 += gUnknown_03000722; - sub_80C06E8(str0, str1, gUnknown_03005D38.var0); -} - -bool8 sub_80C06E8(struct UnknownSaveStruct2ABC *arg0, struct UnknownSaveStruct2ABC *arg1, s8 arg2) -{ - u8 i; - - if (arg1->val0 == 0) - return FALSE; - for (i = 0; i < 16; i++) - { - if (arg0[i].val0 == arg1->val0) - return FALSE; - } - arg0[arg2].val0 = arg1->val0; - arg0[arg2].val1 = 1; - arg0[arg2].val2 = arg1->val2; - return TRUE; -} - -s8 sub_80C0730(struct UnknownSaveStruct2ABC *arg0, u8 arg1) -{ - if (arg0[arg1].val0 == 0) - return -1; - return arg1; -} - -void sub_80C0750(void) -{ - u8 i; - - for (i = 0; i < 16; i++) - { - if (gSaveBlock1.unknown_2ABC[i].val0 > 3) - sub_80BEC10(i); - } - sub_80BEC40(); -} - -void sub_80C0788(void) -{ - u8 i; - - if (FlagGet(SYS_GAME_CLEAR) != 1) - { - for (i = 0; i < 16; i++) - gSaveBlock1.unknown_2ABC[i].val1 = 0; - } -} - -void DoTVShow(void) -{ - if (gSaveBlock1.tvShows[gSpecialVar_0x8004].common.var01 != 0) - { - switch (gSaveBlock1.tvShows[gSpecialVar_0x8004].common.var00) - { - case TVSHOW_FAN_CLUB_LETTER: - DoTVShowPokemonFanClubLetter(); - break; - case TVSHOW_RECENT_HAPPENINGS: - DoTVShowRecentHappenings(); - break; - case TVSHOW_PKMN_FAN_CLUB_OPINIONS: - DoTVShowPokemonFanClubOpinions(); - break; - case TVSHOW_UNKN_SHOWTYPE_04: - nullsub_22(); - break; - case TVSHOW_MASS_OUTBREAK: - DoTVShowPokemonNewsMassOutbreak(); - break; - case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: - DoTVShowBravoTrainerPokemonProfile(); - break; - case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: - DoTVShowBravoTrainerBattleTowerProfile(); - break; - case TVSHOW_POKEMON_TODAY_CAUGHT: - DoTVShowPokemonTodaySuccessfulCapture(); - break; - case TVSHOW_SMART_SHOPPER: - DoTVShowTodaysSmartShopper(); - break; - case TVSHOW_NAME_RATER_SHOW: - DoTVShowTheNameRaterShow(); - break; - case TVSHOW_POKEMON_TODAY_FAILED: - DoTVShowPokemonTodayFailedCapture(); - break; - case TVSHOW_FISHING_ADVICE: - DoTVShowPokemonAngler(); - break; - case TVSHOW_WORLD_OF_MASTERS: - DoTVShowTheWorldOfMasters(); - break; - } - } -} - -void TVShowConvertInternationalString(u8 *dest, u8 *src, u8 language) -{ - StringCopy(dest, src); - if (language < LANGUAGE_ENGLISH) - ConvertInternationalString(dest, LANGUAGE_JAPANESE); -} - -void DoTVShowBravoTrainerPokemonProfile(void) -{ - struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[gSpecialVar_0x8004].bravoTrainer; - u8 state; - - gScriptResult = 0; - state = gUnknown_020387E8; - switch(state) - { - case 0: - TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); - CopyContestCategoryToStringVar(1, bravoTrainer->contestCategory); - sub_80BEF10(2, bravoTrainer->contestRank); - if (!StringCompareWithoutExtCtrlCodes(gSpeciesNames[bravoTrainer->species], bravoTrainer->pokemonNickname)) - gUnknown_020387E8 = 8; - else - gUnknown_020387E8 = 1; - break; - case 1: - StringCopy(gStringVar1, gSpeciesNames[bravoTrainer->species]); - TVShowConvertInternationalString(gStringVar2, bravoTrainer->pokemonNickname, bravoTrainer->var1f); - CopyContestCategoryToStringVar(2, bravoTrainer->contestCategory); - gUnknown_020387E8 = 2; - break; - case 2: - TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); - if (bravoTrainer->contestResult == 0) // placed first - gUnknown_020387E8 = 3; - else - gUnknown_020387E8 = 4; - break; - case 3: - TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); - sub_80EB3FC(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]); - 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]); - if (bravoTrainer->var14) - gUnknown_020387E8 = 6; - else - gUnknown_020387E8 = 7; - break; - case 6: - StringCopy(gStringVar1, gSpeciesNames[bravoTrainer->species]); - StringCopy(gStringVar2, gMoveNames[bravoTrainer->var14]); - sub_80EB3FC(gStringVar3, bravoTrainer->var04[1]); - gUnknown_020387E8 = 7; - break; - case 7: - TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language); - StringCopy(gStringVar2, gSpeciesNames[bravoTrainer->species]); - TVShowDone(); - break; - case 8: - StringCopy(gStringVar1, gSpeciesNames[bravoTrainer->species]); - gUnknown_020387E8 = 2; - break; - } - ShowFieldMessage(gTVBravoTrainerTextGroup[state]); -} - -void DoTVShowBravoTrainerBattleTowerProfile(void) -{ - struct TVShowBravoTrainerBattleTowerSpotlight *bravoTrainerTower = &gSaveBlock1.tvShows[gSpecialVar_0x8004].bravoTrainerTower; - u8 state; - - gScriptResult = 0; - state = gUnknown_020387E8; - switch(state) - { - case 0: - TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->trainerName, bravoTrainerTower->language); - StringCopy(gStringVar2, gSpeciesNames[bravoTrainerTower->species]); - if (bravoTrainerTower->var16 >= 7) - gUnknown_020387E8 = 1; - else - gUnknown_020387E8 = 2; - break; - case 1: - sub_80BF088(0, bravoTrainerTower->btLevel); - sub_80BF088(1, bravoTrainerTower->var16); - if (bravoTrainerTower->var1c == 1) - gUnknown_020387E8 = 3; - else - gUnknown_020387E8 = 4; - break; - case 2: - TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); - sub_80BF088(1, bravoTrainerTower->var16 + 1); - if (bravoTrainerTower->var1b == 0) - gUnknown_020387E8 = 5; - else - gUnknown_020387E8 = 6; - break; - case 3: - TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); - StringCopy(gStringVar2, gSpeciesNames[bravoTrainerTower->defeatedSpecies]); - if (bravoTrainerTower->var1b == 0) - gUnknown_020387E8 = 5; - else - gUnknown_020387E8 = 6; - break; - case 4: - TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); - StringCopy(gStringVar2, gSpeciesNames[bravoTrainerTower->defeatedSpecies]); - if (bravoTrainerTower->var1b == 0) - gUnknown_020387E8 = 5; - else - gUnknown_020387E8 = 6; - break; - case 5: - TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); - gUnknown_020387E8 = 11; - break; - case 6: - TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->pokemonName, bravoTrainerTower->language); - gUnknown_020387E8 = 11; - break; - case 7: - gUnknown_020387E8 = 11; - break; - case 8: - case 9: - case 10: - TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->trainerName, bravoTrainerTower->language); - gUnknown_020387E8 = 11; - break; - case 11: - sub_80EB3FC(gStringVar1, bravoTrainerTower->var18[0]); - if (bravoTrainerTower->var1b == 0) - gUnknown_020387E8 = 12; - else - gUnknown_020387E8 = 13; - break; - case 12: - case 13: - sub_80EB3FC(gStringVar1, bravoTrainerTower->var18[0]); - TVShowConvertInternationalString(gStringVar2, bravoTrainerTower->trainerName, bravoTrainerTower->language); - TVShowConvertInternationalString(gStringVar3, bravoTrainerTower->pokemonName, bravoTrainerTower->language); - gUnknown_020387E8 = 14; - break; - case 14: - TVShowConvertInternationalString(gStringVar1, bravoTrainerTower->trainerName, bravoTrainerTower->language); - StringCopy(gStringVar2, gSpeciesNames[bravoTrainerTower->species]); - TVShowDone(); - break; - } - ShowFieldMessage(gTVBravoTrainerBattleTowerTextGroup[state]); -} - -void DoTVShowTodaysSmartShopper(void) -{ - struct TVShowSmartShopper *smartShopper = &gSaveBlock1.tvShows[gSpecialVar_0x8004].smartshopperShow; - u8 state; - - gScriptResult = 0; - state = gUnknown_020387E8; - switch(state) - { - case 0: - TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language); - GetMapSectionName(gStringVar2, smartShopper->shopLocation, 0); - if (smartShopper->itemAmounts[0] >= 0xff) - gUnknown_020387E8 = 11; - else - gUnknown_020387E8 = 1; - break; - case 1: - TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language); - StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[0])->name); - sub_80BF088(2, smartShopper->itemAmounts[0]); - gUnknown_020387E8 += (Random() % 4) + 1; - break; - case 2: - case 4: - case 5: - if (smartShopper->itemIds[1] != 0) - gUnknown_020387E8 = 6; - else - gUnknown_020387E8 = 10; - break; - case 3: - sub_80BF088(2, smartShopper->itemAmounts[0] + 1); - if (smartShopper->itemIds[1] != 0) - gUnknown_020387E8 = 6; - else - gUnknown_020387E8 = 10; - break; - case 6: - StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[1])->name); - sub_80BF088(2, smartShopper->itemAmounts[1]); - if (smartShopper->itemIds[2] != 0) - gUnknown_020387E8 = 7; - else if (smartShopper->priceReduced == 1) - gUnknown_020387E8 = 8; - else - gUnknown_020387E8 = 9; - break; - case 7: - StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[2])->name); - sub_80BF088(2, smartShopper->itemAmounts[2]); - if (smartShopper->priceReduced == 1) - gUnknown_020387E8 = 8; - else - gUnknown_020387E8 = 9; - break; - case 8: - if (smartShopper->itemAmounts[0] < 0xff) - gUnknown_020387E8 = 9; - else - gUnknown_020387E8 = 12; - break; - case 9: - sub_80BF154(1, smartShopper); - TVShowDone(); - break; - case 10: - if (smartShopper->priceReduced == 1) - gUnknown_020387E8 = 8; - else - gUnknown_020387E8 = 9; - break; - case 11: - TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language); - StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[0])->name); - if (smartShopper->priceReduced == 1) - gUnknown_020387E8 = 8; - else - gUnknown_020387E8 = 12; - break; - case 12: - TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language); - TVShowDone(); - break; - } - ShowFieldMessage(gTVSmartShopperTextGroup[state]); -} - -void DoTVShowTheNameRaterShow(void) -{ - struct TVShowNameRaterShow *nameRaterShow = &gSaveBlock1.tvShows[gSpecialVar_0x8004].nameRaterShow; - u8 state; - - gScriptResult = 0; - state = gUnknown_020387E8; - switch (state) - { - case 0: - TVShowConvertInternationalString(gStringVar1, nameRaterShow->trainerName, nameRaterShow->language); - StringCopy(gStringVar2, gSpeciesNames[nameRaterShow->species]); - TVShowConvertInternationalString(gStringVar3, nameRaterShow->pokemonName, nameRaterShow->pokemonNameLanguage); - gUnknown_020387E8 = sub_80BF7E8(nameRaterShow) + 1; - break; - case 1: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - if (nameRaterShow->random == 0) - gUnknown_020387E8 = 9; - else if (nameRaterShow->random == 1) - gUnknown_020387E8 = 10; - else if (nameRaterShow->random == 2) - gUnknown_020387E8 = 11; - break; - case 2: - TVShowConvertInternationalString(gStringVar1, nameRaterShow->trainerName, nameRaterShow->language); - if (nameRaterShow->random == 0) - gUnknown_020387E8 = 9; - else if (nameRaterShow->random == 1) - gUnknown_020387E8 = 10; - else if (nameRaterShow->random == 2) - gUnknown_020387E8 = 11; - break; - case 9: - case 10: - case 11: - sub_80BF820(0, 1, 0, 1, 0, nameRaterShow); - TVShowConvertInternationalString(gStringVar3, gStringVar1, nameRaterShow->pokemonNameLanguage); - sub_80BF820(0, 0, 0, 1, 0, nameRaterShow); - TVShowConvertInternationalString(gStringVar2, gStringVar1, nameRaterShow->pokemonNameLanguage); - TVShowConvertInternationalString(gStringVar1, nameRaterShow->pokemonName, nameRaterShow->pokemonNameLanguage); - gUnknown_020387E8 = 12; - break; - case 13: - sub_80BF820(0, 0, 3, 1, 0, nameRaterShow); - TVShowConvertInternationalString(gStringVar3, gStringVar1, nameRaterShow->pokemonNameLanguage); - sub_80BF820(0, 0, 2, 0, 0, nameRaterShow); - TVShowConvertInternationalString(gStringVar2, gStringVar1, nameRaterShow->language); - TVShowConvertInternationalString(gStringVar1, nameRaterShow->trainerName, nameRaterShow->language); - gUnknown_020387E8 = 14; - break; - case 14: - sub_80BF820(0, 0, 3, 0, 0, nameRaterShow); - TVShowConvertInternationalString(gStringVar3, gStringVar1, nameRaterShow->language); - sub_80BF820(0, 0, 2, 1, 0, nameRaterShow); - TVShowConvertInternationalString(gStringVar2, gStringVar1, nameRaterShow->pokemonNameLanguage); - TVShowConvertInternationalString(gStringVar1, nameRaterShow->trainerName, nameRaterShow->language); - gUnknown_020387E8 = 18; - break; - case 15: - sub_80BF820(1, 0, 2, 1, 0, nameRaterShow); - TVShowConvertInternationalString(gStringVar1, gStringVar2, nameRaterShow->pokemonNameLanguage); - StringCopy(gStringVar2, gSpeciesNames[nameRaterShow->species]); - sub_80BF820(2, 0, 3, 2, nameRaterShow->species, nameRaterShow); - gUnknown_020387E8 = 16; - break; - case 16: - sub_80BF820(0, 0, 3, 1, 0, nameRaterShow); - TVShowConvertInternationalString(gStringVar3, gStringVar1, nameRaterShow->pokemonNameLanguage); - sub_80BF820(0, 0, 2, 2, nameRaterShow->species, nameRaterShow); - gUnknown_020387E8 = 17; - break; - case 17: - sub_80BF820(1, 0, 2, 1, 0, nameRaterShow); - TVShowConvertInternationalString(gStringVar1, gStringVar2, nameRaterShow->pokemonNameLanguage); - sub_80BF820(2, 0, 3, 2, nameRaterShow->var1C, nameRaterShow); - StringCopy(gStringVar2, gSpeciesNames[nameRaterShow->var1C]); - gUnknown_020387E8 = 18; - break; - case 12: - state = 18; - gUnknown_020387E8 = 18; - case 18: - TVShowConvertInternationalString(gStringVar1, nameRaterShow->pokemonName, nameRaterShow->pokemonNameLanguage); - TVShowConvertInternationalString(gStringVar2, nameRaterShow->trainerName, nameRaterShow->language); - TVShowDone(); - break; - } - ShowFieldMessage(gTVNameRaterTextGroup[state]); -} - -void DoTVShowPokemonTodaySuccessfulCapture(void) -{ - struct TVShowPokemonToday *pokemonToday = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonToday; - u8 state; - - gScriptResult = 0; - state = gUnknown_020387E8; - switch (state) - { - case 0: - TVShowConvertInternationalString(gStringVar1, pokemonToday->playerName, pokemonToday->language); - StringCopy(gStringVar2, gSpeciesNames[pokemonToday->species]); - TVShowConvertInternationalString(gStringVar3, pokemonToday->nickname, pokemonToday->language2); - if (pokemonToday->ball == ITEM_MASTER_BALL) - gUnknown_020387E8 = 5; - else - gUnknown_020387E8 = 1; - break; - case 1: - gUnknown_020387E8 = 2; - break; - case 2: - StringCopy(gStringVar2, ItemId_GetItem(pokemonToday->ball)->name); - sub_80BF088(2, pokemonToday->var12); - if (pokemonToday->var12 < 4) - gUnknown_020387E8 = 3; - else - gUnknown_020387E8 = 4; - break; - case 3: - TVShowConvertInternationalString(gStringVar1, pokemonToday->playerName, pokemonToday->language); - StringCopy(gStringVar2, gSpeciesNames[pokemonToday->species]); - TVShowConvertInternationalString(gStringVar3, pokemonToday->nickname, pokemonToday->language2); - gUnknown_020387E8 = 6; - break; - case 4: - gUnknown_020387E8 = 6; - break; - case 5: - TVShowConvertInternationalString(gStringVar1, pokemonToday->playerName, pokemonToday->language); - StringCopy(gStringVar2, gSpeciesNames[pokemonToday->species]); - gUnknown_020387E8 = 6; - break; - case 6: - TVShowConvertInternationalString(gStringVar1, pokemonToday->playerName, pokemonToday->language); - StringCopy(gStringVar2, gSpeciesNames[pokemonToday->species]); - TVShowConvertInternationalString(gStringVar3, pokemonToday->nickname, pokemonToday->language2); - gUnknown_020387E8 += (Random() % 4) + 1; - break; - case 7: - case 8: - StringCopy(gStringVar1, gSpeciesNames[pokemonToday->species]); - TVShowConvertInternationalString(gStringVar2, pokemonToday->nickname, pokemonToday->language2); - sub_80BF638(2, pokemonToday->species); - gUnknown_020387E8 = 11; - break; - case 9: - case 10: - StringCopy(gStringVar1, gSpeciesNames[pokemonToday->species]); - TVShowConvertInternationalString(gStringVar2, pokemonToday->nickname, pokemonToday->language2); - gUnknown_020387E8 = 11; - break; - case 11: - TVShowDone(); - break; - } - ShowFieldMessage(gTVPokemonTodayTextGroup[state]); -} - -void DoTVShowPokemonTodayFailedCapture(void) -{ - struct TVShowPokemonTodayFailed *pokemonTodayFailed = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonTodayFailed; - u8 state; - - gScriptResult = 0; - state = gUnknown_020387E8; - switch (state) - { - case 0: - TVShowConvertInternationalString(gStringVar1, pokemonTodayFailed->playerName, pokemonTodayFailed->language); - StringCopy(gStringVar2, gSpeciesNames[pokemonTodayFailed->species]); - gUnknown_020387E8 = 1; - break; - case 1: - TVShowConvertInternationalString(gStringVar1, pokemonTodayFailed->playerName, pokemonTodayFailed->language); - GetMapSectionName(gStringVar2, pokemonTodayFailed->var12, 0); - StringCopy(gStringVar3, gSpeciesNames[pokemonTodayFailed->species2]); - if (pokemonTodayFailed->var11 == 1) - gUnknown_020387E8 = 3; - else - gUnknown_020387E8 = 2; - break; - case 2: - case 3: - TVShowConvertInternationalString(gStringVar1, pokemonTodayFailed->playerName, pokemonTodayFailed->language); - sub_80BF088(1, pokemonTodayFailed->var10); - if ((Random() % 3) == 0) - gUnknown_020387E8 = 5; - else - gUnknown_020387E8 = 4; - break; - case 4: - case 5: - TVShowConvertInternationalString(gStringVar1, pokemonTodayFailed->playerName, pokemonTodayFailed->language); - gUnknown_020387E8 = 6; - break; - case 6: - TVShowDone(); - break; - } - ShowFieldMessage(gTVPokemonTodayFailedCaptureTextGroup[state]); -} - -void DoTVShowPokemonFanClubLetter(void) -{ - struct TVShowFanClubLetter *fanclubLetter = &gSaveBlock1.tvShows[gSpecialVar_0x8004].fanclubLetter; - u8 state; - u16 rval; - - gScriptResult = 0; - state = gUnknown_020387E8; - switch (state) - { - case 0: - TVShowConvertInternationalString(gStringVar1, fanclubLetter->playerName, fanclubLetter->language); - StringCopy(gStringVar2, gSpeciesNames[fanclubLetter->species]); - gUnknown_020387E8 = 50; - break; - case 1: - rval = (Random() % 4) + 1; - if (rval == 1) - gUnknown_020387E8 = 2; - else - gUnknown_020387E8 = rval + 2; - break; - case 2: - gUnknown_020387E8 = 51; - break; - case 3: - gUnknown_020387E8 += (Random() % 3) + 1; - break; - case 4: - case 5: - case 6: - sub_80BF79C((TVShow *)fanclubLetter); - gUnknown_020387E8 = 7; - break; - case 7: - rval = (Random() % 0x1f) + 0x46; - sub_80BF088(2, rval); - TVShowDone(); - break; - case 50: - ConvertEasyChatWordsToString(gStringVar4, fanclubLetter->pad04, 2, 2); - ShowFieldMessage(gStringVar4); - gUnknown_020387E8 = 1; - return; - case 51: - ConvertEasyChatWordsToString(gStringVar4, fanclubLetter->pad04, 2, 2); - ShowFieldMessage(gStringVar4); - gUnknown_020387E8 = 3; - return; - } - ShowFieldMessage(gTVFanClubTextGroup[state]); -} - -void DoTVShowRecentHappenings(void) -{ - struct TVShowRecentHappenings *recentHappenings = &gSaveBlock1.tvShows[gSpecialVar_0x8004].recentHappenings; - u8 state; - - gScriptResult = 0; - state = gUnknown_020387E8; - switch (state) - { - case 0: - TVShowConvertInternationalString(gStringVar1, recentHappenings->playerName, recentHappenings->language); - sub_80BF79C((TVShow *)recentHappenings); - gUnknown_020387E8 = 50; - break; - case 1: - gUnknown_020387E8 += 1 + (Random() % 3); - break; - case 2: - case 3: - case 4: - gUnknown_020387E8 = 5; - break; - case 5: - TVShowDone(); - break; - case 50: - ConvertEasyChatWordsToString(gStringVar4, recentHappenings->var04, 2, 2); - ShowFieldMessage(gStringVar4); - gUnknown_020387E8 = 1; - return; - } - ShowFieldMessage(gTVRecentHappeningsTextGroup[state]); -} - -void DoTVShowPokemonFanClubOpinions(void) -{ - struct TVShowFanclubOpinions *fanclubOpinions = &gSaveBlock1.tvShows[gSpecialVar_0x8004].fanclubOpinions; - u8 state; - - gScriptResult = 0; - state = gUnknown_020387E8; - switch (state) - { - case 0: - TVShowConvertInternationalString(gStringVar1, fanclubOpinions->playerName, fanclubOpinions->language); - StringCopy(gStringVar2, gSpeciesNames[fanclubOpinions->var02]); - TVShowConvertInternationalString(gStringVar3, fanclubOpinions->var10, fanclubOpinions->var0E); - gUnknown_020387E8 = fanclubOpinions->var04B + 1; - break; - case 1: - case 2: - case 3: - TVShowConvertInternationalString(gStringVar1, fanclubOpinions->playerName, fanclubOpinions->language); - StringCopy(gStringVar2, gSpeciesNames[fanclubOpinions->var02]); - sub_80EB3FC(gStringVar3, fanclubOpinions->var1C[0]); - gUnknown_020387E8 = 4; - break; - case 4: - TVShowConvertInternationalString(gStringVar1, fanclubOpinions->playerName, fanclubOpinions->language); - sub_80EB3FC(gStringVar3, fanclubOpinions->var1C[1]); - TVShowDone(); - break; - } - ShowFieldMessage(gTVFanClubOpinionsTextGroup[state]); -} - -void nullsub_22(void) -{ -} - -void DoTVShowPokemonNewsMassOutbreak(void) -{ - struct TVShowMassOutbreak *massOutbreak = &gSaveBlock1.tvShows[gSpecialVar_0x8004].massOutbreak; - - GetMapSectionName(gStringVar1, massOutbreak->locationMapNum, 0); - StringCopy(gStringVar2, gSpeciesNames[massOutbreak->species]); - TVShowDone(); - StartMassOutbreak(); - ShowFieldMessage(gTVPokemonOutbreakTextGroup[gUnknown_020387E8]); -} - -void DoTVShowInSearchOfTrainers(void) -{ - u8 state; - - gScriptResult = 0; - state = gUnknown_020387E8; - switch (state) - { - case 0: - GetMapSectionName(gStringVar1, gSaveBlock1.gabbyAndTyData.mapnum, 0); - if (gSaveBlock1.gabbyAndTyData.battleNum > 1) - gUnknown_020387E8 = 1; - else - gUnknown_020387E8 = 2; - break; - case 1: - gUnknown_020387E8 = 2; - break; - case 2: - if (gSaveBlock1.gabbyAndTyData.valA_0 == 0) - gUnknown_020387E8 = 4; - else if (gSaveBlock1.gabbyAndTyData.valA_3 != 0) - gUnknown_020387E8 = 5; - else if (gSaveBlock1.gabbyAndTyData.valA_2 != 0) - gUnknown_020387E8 = 6; - else if (gSaveBlock1.gabbyAndTyData.valA_1 != 0) - gUnknown_020387E8 = 7; - else - gUnknown_020387E8 = 3; - break; - case 3: - StringCopy(gStringVar1, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon1]); - StringCopy(gStringVar2, gMoveNames[gSaveBlock1.gabbyAndTyData.lastMove]); - StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon2]); - gUnknown_020387E8 = 8; - break; - case 4: - case 5: - case 6: - case 7: - gUnknown_020387E8 = 8; - break; - case 8: - sub_80EB3FC(gStringVar1, gSaveBlock1.gabbyAndTyData.quote); - StringCopy(gStringVar2, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon1]); - StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon2]); - gScriptResult = 1; - gUnknown_020387E8 = 0;; - TakeTVShowInSearchOfTrainersOffTheAir(); - break; - } - ShowFieldMessage(gTVGabbyAndTyTextGroup[state]); -} - -void DoTVShowPokemonAngler(void) -{ - struct TVShowPokemonAngler *pokemonAngler = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonAngler; - u8 state; - - gScriptResult = 0; - if (pokemonAngler->var02 < pokemonAngler->var03) - gUnknown_020387E8 = 0; - else - gUnknown_020387E8 = 1; - state = gUnknown_020387E8; - switch (state) - { - case 0: - TVShowConvertInternationalString(gStringVar1, pokemonAngler->playerName, pokemonAngler->language); - StringCopy(gStringVar2, gSpeciesNames[pokemonAngler->var04]); - sub_80BF088(2, pokemonAngler->var03); - TVShowDone(); - break; - case 1: - TVShowConvertInternationalString(gStringVar1, pokemonAngler->playerName, pokemonAngler->language); - StringCopy(gStringVar2, gSpeciesNames[pokemonAngler->var04]); - sub_80BF088(2, pokemonAngler->var02); - TVShowDone(); - break; - } - ShowFieldMessage(gTVFishingGuruAdviceTextGroup[state]); -} - -void DoTVShowTheWorldOfMasters(void) -{ - struct TVShowWorldOfMasters *worldOfMasters = &gSaveBlock1.tvShows[gSpecialVar_0x8004].worldOfMasters; - u8 state; - - gScriptResult = 0; - state = gUnknown_020387E8; - switch (state) - { - case 0: - TVShowConvertInternationalString(gStringVar1, worldOfMasters->playerName, - worldOfMasters->language); - sub_80BF088(1, worldOfMasters->var06); - sub_80BF088(2, worldOfMasters->var02); - gUnknown_020387E8 = 1; - break; - case 1: - StringCopy(gStringVar1, gSpeciesNames[worldOfMasters->var08]); - gUnknown_020387E8 = 2; - break; - case 2: - TVShowConvertInternationalString(gStringVar1, worldOfMasters->playerName, - worldOfMasters->language); - GetMapSectionName(gStringVar2, worldOfMasters->var0a, 0); - StringCopy(gStringVar3, gSpeciesNames[worldOfMasters->var04]); - TVShowDone(); - break; - } - ShowFieldMessage(gTVWorldOfMastersTextGroup[state]); -} - -void TVShowDone(void) -{ - gScriptResult = 1; - gUnknown_020387E8 = 0; - gSaveBlock1.tvShows[gSpecialVar_0x8004].common.var01 = 0; -} - -void sub_80C2014(void) -{ - gUnknown_020387E8 = 0; -} diff --git a/src/unknown_debug_menu.c b/src/unknown_debug_menu.c deleted file mode 100644 index a81625f2a..000000000 --- a/src/unknown_debug_menu.c +++ /dev/null @@ -1,52 +0,0 @@ -#include "global.h" -#include "menu.h" - -extern u8 gBattleCommunication[]; - -extern u8 (*gCallback_03004AE8)(void); - -extern const struct MenuAction gUnknown_0842C29C[]; - -static u8 sub_814A464(void); - -int unref_sub_814A414(void) -{ - MenuZeroFillScreen(); - MenuDrawTextWindow(0, 0, 16, 18); - PrintMenuItems(2, 1, 8, gUnknown_0842C29C); - InitMenu(0, 1, 1, 8, 0, 15); - gCallback_03004AE8 = sub_814A464; - return 0; -} - -static u8 sub_814A464(void) -{ - s8 result = ProcessMenuInput(); - if (result == -2) - { - return 0; - } - else if (result == -1) - { - CloseMenu(); - return 1; - } - else - { - gBattleCommunication[0] = result; - gCallback_03004AE8 = gUnknown_0842C29C[result].func; - return 0; - } -} - -u8 sub_814A4B8(void) -{ - gSaveBlock2.filler_A8.var_4AE[0] = 3; - gSaveBlock2.filler_A8.var_4AE[1] = 3; - gSaveBlock2.filler_A8.var_4B4 = gBattleCommunication[0] + 1; - gSaveBlock2.filler_A8.var_4B6 = gBattleCommunication[0] + 1; - gSaveBlock2.filler_A8.var_4B0 = 1; - gSaveBlock2.filler_A8.var_4B2 = 1; - CloseMenu(); - return 1; -} diff --git a/src/unknown_task.c b/src/unknown_task.c deleted file mode 100644 index 81b89ef92..000000000 --- a/src/unknown_task.c +++ /dev/null @@ -1,255 +0,0 @@ -#include "global.h" -#include "data2.h" -#include "task.h" -#include "trig.h" - -struct UnknownStruct1 -{ - void *src[2]; - void *dest; - u32 unkC; - void (*unk10)(void); - u8 srcBank; - u8 unk15; - u8 unk16; - u8 unk17; - u8 taskId; - u8 filler19[0x7]; -}; - -struct UnknownStruct2 -{ - void *dest; - u32 control; - u8 unk8; - u8 unk9; -}; - -static void sub_80896F4(void); -static void sub_8089714(void); - -extern u16 gUnknown_030041B0; -extern u16 gUnknown_030041B4; -extern u16 gUnknown_030041B8; -extern u16 gUnknown_03004280; -extern u16 gUnknown_03004288; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; -extern u16 gUnknown_030042C0; - -extern u8 gUnknown_0202FFA4; - -extern struct UnknownStruct1 gUnknown_03004DC0; - -extern u16 gUnknown_03004DE0[][0x3C0]; - -void remove_some_task(void) -{ - gUnknown_03004DC0.unk15 = 0; - DmaStop(0); - if (gUnknown_03004DC0.taskId != 0xFF) - { - DestroyTask(gUnknown_03004DC0.taskId); - gUnknown_03004DC0.taskId = 0xFF; - } -} - -void dp12_8087EA4(void) -{ - CpuFill16(0, gUnknown_03004DE0, 0x780 * 2); - gUnknown_03004DC0.src[0] = 0; - gUnknown_03004DC0.src[1] = 0; - gUnknown_03004DC0.dest = 0; - gUnknown_03004DC0.unkC = 0; - gUnknown_03004DC0.srcBank = 0; - gUnknown_03004DC0.unk15 = 0; - gUnknown_03004DC0.unk16 = 0; - gUnknown_03004DC0.unk17 = 0; - gUnknown_03004DC0.taskId = 0xFF; -} - -void sub_80895F8(struct UnknownStruct2 unk) -{ - if (unk.control == (((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1)) - { - gUnknown_03004DC0.src[0] = &gUnknown_03004DE0[0][1]; - gUnknown_03004DC0.src[1] = &gUnknown_03004DE0[1][1]; - gUnknown_03004DC0.unk10 = sub_80896F4; - } - else - { - gUnknown_03004DC0.src[0] = &gUnknown_03004DE0[0][2]; - gUnknown_03004DC0.src[1] = &gUnknown_03004DE0[1][2]; - gUnknown_03004DC0.unk10 = sub_8089714; - } - - gUnknown_03004DC0.unkC = unk.control; - gUnknown_03004DC0.dest = unk.dest; - gUnknown_03004DC0.unk15 = unk.unk8; - gUnknown_03004DC0.unk16 = unk.unk9; - gUnknown_03004DC0.unk17 = unk.unk9; -} - -void sub_8089668(void) -{ - if (gUnknown_03004DC0.unk15) - { - if (gUnknown_03004DC0.unk15 == 3) - { - gUnknown_03004DC0.unk15 = 0; - DmaStop(0); - gUnknown_0202FFA4 = 1; - } - else - { - DmaStop(0); - DmaSet(0, gUnknown_03004DC0.src[gUnknown_03004DC0.srcBank], gUnknown_03004DC0.dest, gUnknown_03004DC0.unkC); - gUnknown_03004DC0.unk10(); - gUnknown_03004DC0.srcBank ^= 1; - } - } -} - -static void sub_80896F4(void) -{ - u16 *dest = (u16 *)gUnknown_03004DC0.dest; - u16 *src = (u16 *)&gUnknown_03004DE0[gUnknown_03004DC0.srcBank]; - *dest = *src; -} - -static void sub_8089714(void) -{ - u32 *dest = (u32 *)gUnknown_03004DC0.dest; - u32 *src = (u32 *)&gUnknown_03004DE0[gUnknown_03004DC0.srcBank]; - *dest = *src; -} - -static void task00_for_dp12(u8 taskId) -{ - int value = 0; - - if (gUnknown_0202FFA4) - { - DestroyTask(taskId); - gUnknown_03004DC0.taskId = 0xFF; - } - else - { - if (gTasks[taskId].data[7]) - { - switch (gTasks[taskId].data[6]) - { - case 0x0: - value = gUnknown_030042A4; - break; - case 0x2: - value = gUnknown_030042A0; - break; - case 0x4: - value = gUnknown_030042C0; - break; - case 0x6: - value = gUnknown_030041B4; - break; - case 0x8: - value = gUnknown_03004288; - break; - case 0xA: - value = gUnknown_03004280; - break; - case 0xC: - value = gUnknown_030041B0; - break; - case 0xE: - value = gUnknown_030041B8; - break; - } - } - if (gTasks[taskId].data[4]) - { - int i; - int offset; - gTasks[taskId].data[4]--; - offset = gTasks[taskId].data[3] + 320; - for (i = gTasks[taskId].data[0]; i < gTasks[taskId].data[1]; i++) - { - gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = gUnknown_03004DE0[0][offset] + value; - offset++; - } - } - else - { - int i; - int offset; - gTasks[taskId].data[4] = gTasks[taskId].data[5]; - offset = gTasks[taskId].data[3] + 320; - for (i = gTasks[taskId].data[0]; i < gTasks[taskId].data[1]; i++) - { - gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = gUnknown_03004DE0[0][offset] + value; - offset++; - } - gTasks[taskId].data[3]++; - if (gTasks[taskId].data[3] == gTasks[taskId].data[2]) - { - gTasks[taskId].data[3] = 0; - } - } - } -} - -static void sub_80898FC(u16 *a1, u8 a2, u8 a3, u8 a4) -{ - u16 i = 0; - u8 offset = 0; - - while (i < 0x100) - { - a1[i] = (gSineTable[offset] * a3) / 256; - offset += a2; - i++; - } -} - -u8 sub_8089944(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) -{ - int i; - int offset; - struct UnknownStruct2 unk; - u8 taskId; - - dp12_8087EA4(); - - unk.dest = (void *)(REG_ADDR_BG0HOFS + a6); - unk.control = ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1; - unk.unk8 = 1; - unk.unk9 = 0; - - sub_80895F8(unk); - - taskId = CreateTask(task00_for_dp12, 0); - - gTasks[taskId].data[0] = a1; - gTasks[taskId].data[1] = a2; - gTasks[taskId].data[2] = 256 / a3; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = a5; - gTasks[taskId].data[5] = a5; - gTasks[taskId].data[6] = a6; - gTasks[taskId].data[7] = a7; - - gUnknown_03004DC0.taskId = taskId; - gUnknown_0202FFA4 = 0; - - sub_80898FC(&gUnknown_03004DE0[0][320], a3, a4, a2 - a1); - - offset = 320; - - for (i = a1; i < a2; i++) - { - gUnknown_03004DE0[0][i] = gUnknown_03004DE0[0][offset]; - gUnknown_03004DE0[1][i] = gUnknown_03004DE0[0][offset]; - offset++; - } - - return taskId; -} diff --git a/src/unused_8124F94.c b/src/unused_8124F94.c deleted file mode 100644 index 93b569058..000000000 --- a/src/unused_8124F94.c +++ /dev/null @@ -1,126 +0,0 @@ -#include "global.h" -#include "decompress.h" -#include "palette.h" - -struct UnknownStruct2 -{ - void *src; - u8 unk4; - u8 unk5; - u8 unk6; - u16 unk8; -}; - -struct UnknownStruct3 -{ - u16 *paletteSrc; - u8 unk4; - u8 paletteCount; -}; - -struct UnknownStruct1 -{ - u8 paletteNum; - u8 unk1; - u16 unk2; - u8 *dest; - struct UnknownStruct3 unk8[16]; - struct UnknownStruct2 unk88[32]; -}; - -void unref_sub_8124F94(struct UnknownStruct1 *a) -{ - a->unk1 = 0; - a->paletteNum = 0; - a->unk2 = 0; - a->dest = (void *)VRAM; - DmaFill16(3, 0, a->unk8, sizeof(a->unk8)); - DmaFill16(3, 0, a->unk88, sizeof(a->unk88)); -} - -u8 unref_sub_8124FD8(struct UnknownStruct1 *a, const struct UnknownStruct2 *b) -{ - while (1) - { - s32 r6; - s32 temp; - - // Couldn't get it to match any other way - if (a->unk1 < 32 && b->src == NULL) - return 0; - if (a->unk1 >= 32) - break; - - a->unk88[a->unk1].src = b->src; - a->unk88[a->unk1].unk6 = b->unk6; - a->unk88[a->unk1].unk4 = b->unk4; - a->unk88[a->unk1].unk5 = b->unk5; - r6 = b->unk4 * b->unk5; - if (a->unk2 + r6 > 0x400) - return 2; - if (b->unk8 == 0) - { - DmaCopy16(3, b->src, a->dest + a->unk2 * 64, r6 * 32); - } - else - { - sub_800D238(b->src, a->dest + a->unk2 * 64); - } - a->unk88[a->unk1].unk8 = a->unk2; - temp = r6 + a->unk2; - a->unk2 = temp; - a->unk1++; - b++; - } - return 1; -} - -u8 unref_sub_81250A4(struct UnknownStruct1 *a, struct UnknownStruct3 *b) -{ - while (1) - { - // Couldn't get it to match any other way - if (a->paletteNum < 16 && b->paletteSrc == NULL) - return 0; - if (a->paletteNum >= 16) - break; - - a->unk8[a->paletteNum].paletteSrc = b->paletteSrc; - a->unk8[a->paletteNum].unk4 = b->unk4; - if (b->paletteCount == 0) - { - LoadPalette(b->paletteSrc, a->paletteNum * 16, 32); - } - else - { - u16 palette[16]; - - sub_800D238(b->paletteSrc, palette); - LoadPalette(palette, a->paletteNum * 16, 32); - } - a->unk8[a->paletteNum].paletteCount = a->paletteNum; - a->paletteNum = a->paletteNum + 1; - b++; - } - return 1; -} - -u8 unref_sub_8125118(struct UnknownStruct1 *a, struct UnknownStruct3 *b) -{ - u16 palettes[16][16] = {0}; - u8 r7 = b->paletteCount; - u8 i; - - sub_800D238(b->paletteSrc, palettes); - for (i = a->paletteNum; i < r7; i++) - { - if (a->paletteNum + i >= 16) - return 1; - a->unk8[i].paletteSrc = b->paletteSrc; - a->unk8[i].unk4 = b->unk4 + i; - a->unk8[i].paletteCount = a->paletteNum; - LoadPalette(palettes[i], a->paletteNum * 16, sizeof(palettes[i])); - a->paletteNum++; - } - return 0; -} diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c deleted file mode 100644 index 3aa2f1fa5..000000000 --- a/src/use_pokeblock.c +++ /dev/null @@ -1,965 +0,0 @@ -// -// Created by Scott Norton on 5/31/17. -// - -#include "global.h" -#include "main.h" -#include "rom4.h" -#include "string_util.h" -#include "strings.h" -#include "sprite.h" -#include "pokemon.h" -#include "pokenav.h" -#include "palette.h" -#include "text.h" -#include "menu.h" -#include "sound.h" -#include "songs.h" -#include "pokeblock.h" -#include "pokeblock_feed.h" -#include "use_pokeblock.h" - -#define GFX_TAG_CONDITIONUPDOWN 0 - -#ifdef GERMAN -extern const u16 ConditionUpDownPalette[16]; -extern const u32 ConditionUpDownTiles[0x80]; -#else -const u16 ConditionUpDownPalette[] = INCBIN_U16("graphics/misc/condition_up_down.gbapal"); -const u32 ConditionUpDownTiles[] = INCBIN_U32("graphics/misc/condition_up_down.4bpp"); -#endif - -const u32 gUnknown_08406118[] = { - MON_DATA_COOL, - MON_DATA_TOUGH, - MON_DATA_SMART, - MON_DATA_CUTE, - MON_DATA_BEAUTY -}; - -const u8 gUnknown_0840612C[] = { - 0, 4, 3, 2, 1 -}; - -const u8 *const gUnknown_08406134[] = { - OtherText_Coolness, - OtherText_Toughness, - OtherText_Smartness, - OtherText_Cuteness, - OtherText_Beauty -}; - -const struct SpriteSheet gSpriteSheet_ConditionUpDown = { - (u8 *)ConditionUpDownTiles, - sizeof ConditionUpDownTiles, - GFX_TAG_CONDITIONUPDOWN -}; - -const struct SpritePalette gSpritePalette_ConditionUpDown = { - ConditionUpDownPalette, - GFX_TAG_CONDITIONUPDOWN -}; - -const s16 gUnknown_08406158[][2] = { - {0x9c, 0x1e}, - {0x75, 0x35}, - {0x75, 0x70}, - {0xc5, 0x70}, - {0xc5, 0x35} -}; - -const struct OamData gOamData_840616C = { - .shape = 1, - .size = 2, - .priority = 1 -}; - -const union AnimCmd gSpriteAnim_8406174[] = { - ANIMCMD_FRAME(0, 5), - ANIMCMD_END -}; - -const union AnimCmd gSpriteAnim_840617C[] = { - ANIMCMD_FRAME(8, 5), - ANIMCMD_END -}; - -const union AnimCmd *const gSpriteAnimTable_8406184[] = { - gSpriteAnim_8406174, - gSpriteAnim_840617C -}; - -const struct SpriteTemplate gSpriteTemplate_840618C = { - GFX_TAG_CONDITIONUPDOWN, - GFX_TAG_CONDITIONUPDOWN, - &gOamData_840616C, - gSpriteAnimTable_8406184, - NULL, - gDummySpriteAffineAnimTable, - 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; -EWRAM_DATA u8 gUnknown_02039310 = 0; -EWRAM_DATA s16 gUnknown_02039312 = 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); -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 *); - -void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback) -{ - gUnknown_02039304 = &gUnknown_083DFEC4->unkD164; - gUnknown_02039304->pokeblock = pokeblock; - gUnknown_02039304->callback = callback; - gUnknown_083DFEC4->unkD162[0] = 2; - launch_c3_walk_stairs_and_run_once(sub_8136294); - SetMainCallback2(sub_8136244); -} - -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; - gUnknown_083DFEC4->unkD162[0] = 2; - launch_c3_walk_stairs_and_run_once(sub_8136294); - SetMainCallback2(sub_81361E4); -} - -void sub_81361E4(void) -{ - gUnknown_02039304->unk0(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); - if (gUnknown_02039304->unk0 == sub_81365C8) - { - REG_DISPCNT = 0; - gUnknown_02039304->unk50 = 0; - SetMainCallback2(sub_813622C); - } -} - -void sub_813622C(void) -{ - sub_81368A4(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_8136244(void) -{ - gUnknown_02039304->unk0(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_8136264(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - sub_80F5CDC(6); - sub_8089668(); -} - -void launch_c3_walk_stairs_and_run_once(void (*const func)(void)) -{ - gUnknown_02039304->unk0 = func; - gUnknown_02039304->unk50 = 0; -} - -void sub_8136294(void) -{ - bool32 c1LinkRelatedActive; - switch (gUnknown_02039304->unk50) - { - case 0: - c1LinkRelatedActive = is_c1_link_related_active(); - gUnknown_083DFEC4->unk6DAC = c1LinkRelatedActive; - if ((bool8)c1LinkRelatedActive == FALSE) - { - gUnknown_02039304->unk55 = 0; - launch_c3_walk_stairs_and_run_once(sub_81365A0); - gUnknown_02039304->unk50++; - } - break; - case 1: - ResetSpriteData(); - FreeAllSpritePalettes(); - gUnknown_02039304->unk50++; - break; - case 2: - SetVBlankCallback(NULL); - gUnknown_02039304->unk50++; - break; - case 3: - SetUpWindowConfig(&gWindowConfig_81E7080); - gUnknown_02039304->unk50++; - break; - case 4: - MultistepInitMenuWindowBegin(&gWindowConfig_81E7080); - gUnknown_02039304->unk50++; - break; - case 5: - if (MultistepInitMenuWindowContinue()) - { - gUnknown_02039304->unk50++; - } - break; - case 6: - gUnknown_083DFEC4->unk76AA = 0; - gUnknown_083DFEC4->unk87E0 = NULL; - gUnknown_083DFEC4->unk030C = 0x20; - gUnknown_02039304->unk50++; - break; - case 7: - sub_80F2688(); - gUnknown_02039304->unk50++; - // fallthrough - case 8: - if (!sub_80F26BC()) - { - gUnknown_02039304->unk50++; - } - break; - case 9: - sub_80F2C80(1); - gUnknown_02039304->unk50++; - // fallthrough - case 10: - if (!sub_80F2CBC(1)) - { - gUnknown_02039304->unk50++; - } - break; - case 11: - gKeyRepeatStartDelay = 20; - gUnknown_083DFEC4->unk8828 = CalculatePlayerPartyCount(); - gUnknown_083DFEC4->unk9344 = 0; - gUnknown_083DFEC4->unk8768 = NULL; - sub_80F4BD0(); - gUnknown_083DFEC4->unkD160 = 0; - gUnknown_02039304->unk50++; - break; - case 12: - if (!sub_80F1778()) - { - REG_BG2VOFS = 6; - REG_BG3VOFS = 6; - gUnknown_02039304->unk50++; - } - break; - case 13: - sub_80F2E18(0); - gUnknown_083DFEC4->unk8768->unk26 = 0xffd8; - gUnknown_02039304->unk50++; - break; - case 14: - if (!sub_80F170C()) - { - gUnknown_02039304->unk50++; - } - break; - case 15: - sub_80F33A8(); - gUnknown_02039304->unk50++; - break; - case 16: - DmaClear32(3, BG_SCREEN_ADDR(31), 0x800); - REG_BG1VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1CNT = BGCNT_SCREENBASE(31); - gUnknown_02039304->unk50++; - break; - case 17: - sub_80F567C(&gUnknown_083DFEC4->unk8ff0, gUnknown_083DFEC4->unk9004); - sub_80F5B38(); - gUnknown_02039304->unk50++; - break; - case 18: - if (!sub_80F5B50()) - { - gUnknown_02039304->unk50++; - } - break; - case 19: - sub_80F556C(gUnknown_083DFEC4->unk9004); - gUnknown_02039304->unk50++; - break; - case 20: - sub_80F1934(); - gUnknown_02039304->unk50++; - break; - case 21: - REG_WIN0H = 0xf0; - REG_WIN1H = 0x9b; - REG_WIN0V = 0x3273; - REG_WIN1V = 0x3273; - REG_WININ = 0x3f3f; - REG_WINOUT = 0x1b; - REG_BG0VOFS = 0x28; - REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON; - // fallthrough - case 22: - gUnknown_02039304->unk55 = 1; - launch_c3_walk_stairs_and_run_once(sub_81365C8); - break; - } -} - -void sub_81365A0(void) -{ - while (!gUnknown_02039304->unk55) - { - sub_8136294(); - } -} - -void sub_81365C8(void) -{ - switch (gUnknown_02039304->unk50) - { - case 0: - BeginNormalPaletteFade(-1, 0, 16, 0, 0); - SetVBlankCallback(sub_8136264); - gUnknown_02039304->unk50++; - break; - case 1: - if (!gPaletteFade.active) - { - sub_80F3C94(); - sub_80F3D00(); - launch_c3_walk_stairs_and_run_once(sub_8136638); - } - break; - } -} - -void sub_8136638(void) -{ - switch (gUnknown_02039304->unk50) - { - case 0: - if (gMain.heldKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - sub_80F5060(TRUE); - move_anim_execute(); - gUnknown_02039304->unk50 = 1; - } - else if (gMain.heldKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - sub_80F5060(FALSE); - move_anim_execute(); - gUnknown_02039304->unk50 = 1; - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - gUnknown_02039304->unk50 = 3; - } - else if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if (gUnknown_083DFEC4->unk87DC == gUnknown_083DFEC4->unk87DA - 1) - { - gUnknown_02039304->unk50 = 3; - } - else - { - gUnknown_02039304->unk50 = 5; - } - } - break; - case 1: - if (!gpu_sync_bg_show()) - { - gUnknown_02039304->unk50++; - } - break; - case 2: - if (!sub_8055870()) - { - sub_80F1934(); - sub_80F3D00(); - gUnknown_02039304->unk50 = 0; - } - break; - case 3: - launch_c3_walk_stairs_and_run_once(sub_8136B44); - break; - case 4: - break; - case 5: - sub_8136BB8(); - gUnknown_02039304->unk50++; - break; - case 6: - switch (sub_8136C40()) - { - case 1: - case -1: - gUnknown_02039304->unk50 = 0; - break; - case 0: - if (sub_8137058()) - { - sub_8136D60(); - gUnknown_02039304->unk50 = 7; - } - else - { - launch_c3_walk_stairs_and_run_once(sub_8136808); - } - break; - } - break; - case 7: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - sub_8136D8C(); - gUnknown_02039304->unk50 = 0; - } - break; - } -} - -void sub_8136808(void) -{ - switch (gUnknown_02039304->unk50) - { - case 0: - gUnknown_02039310 = sub_81370A4(gUnknown_083DFEC4->unk87DC); - gUnknown_02039308 = gUnknown_02039304->callback; - gUnknown_0203930C = gUnknown_02039304->pokeblock; - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gUnknown_02039304->unk50++; - break; - case 1: - if (!gPaletteFade.active) - { - gMain.savedCallback = sub_8136174; - SetMainCallback2(sub_8147ADC); - } - break; - } -} - -void sub_81368A4(void) -{ - switch (gUnknown_02039304->unk50) - { - case 0: - if (gUnknown_083DFEC4->unk87DC != gUnknown_02039310) - { - sub_80F5060(gUnknown_02039304->unk56); - gUnknown_02039304->unk50++; - } - else - { - gUnknown_02039304->unk50 = 3; - } - break; - case 1: - if (!gpu_sync_bg_show()) - { - gUnknown_02039304->unk50++; - } - break; - case 2: - if (!sub_8055870()) - { - sub_80F1934(); - gUnknown_02039304->unk50 = 0; - } - break; - case 3: - BlendPalettes(-1, 16, 0); - gUnknown_02039304->unk50++; - break; - case 4: - REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON; - gUnknown_02039304->unk50++; - break; - case 5: - SetVBlankCallback(sub_8136264); - BeginNormalPaletteFade(-1, 0, 16, 0, 0); - gUnknown_02039304->unk50++; - break; - case 6: - if (!gPaletteFade.active) - { - sub_80F3C94(); - sub_80F3D00(); - launch_c3_walk_stairs_and_run_once(sub_81369CC); - SetMainCallback2(sub_8136244); - } - break; - } -} - -void sub_81369CC(void) -{ - switch (gUnknown_02039304->unk50) - { - case 0: - gUnknown_02039304->pokemon = &gPlayerParty[0]; - gUnknown_02039304->pokemon = &gPlayerParty[gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx]; - move_anim_execute(); - gUnknown_02039304->unk50++; - break; - case 1: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - gUnknown_02039304->unk50++; - break; - case 2: - sub_8136EF0(); - sub_80F567C(gUnknown_02039304->unk5c, gUnknown_083DFEC4->unk9040); - sub_80F5550(gUnknown_083DFEC4->unk9004[gUnknown_083DFEC4->unk8fe9], gUnknown_083DFEC4->unk9040); - sub_8137138(); - gUnknown_02039304->unk50++; - break; - case 3: - if (!sub_80F555C()) - { - sub_80F7224(sub_81370A4(gUnknown_083DFEC4->unk87DC)); - sub_80F3D00(); - gUnknown_02039304->unk52 = 0; - gUnknown_02039304->unk50++; - } - break; - case 4: - if ((++gUnknown_02039304->unk52) > 16) - { - sub_8136C6C(); - gUnknown_02039304->unk50++; - } - break; - case 5: - if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8136D00()) - { - sub_810CA6C((u8)gScriptItemId); - launch_c3_walk_stairs_and_run_once(sub_8136B44); - } - break; - } -} - -void sub_8136B44(void) -{ - switch (gUnknown_02039304->unk50) - { - case 0: - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gUnknown_02039304->unk50++; - break; - case 1: - if (!gPaletteFade.active) - { - gUnknown_02039304->unk50 = 2; - } - break; - case 2: - sub_80F5BDC(); - gUnknown_02039304->unk50++; - break; - case 3: - SetMainCallback2(gUnknown_02039304->callback); - break; - } -} - -void sub_8136BB8(void) -{ - GetMonData(&gPlayerParty[sub_81370A4(gUnknown_083DFEC4->unk87DC)], MON_DATA_NICKNAME, gUnknown_02039304->stringBuffer); - StringGetEnd10(gUnknown_02039304->stringBuffer); - StringAppend(gUnknown_02039304->stringBuffer, gOtherText_GetsAPokeBlock); - BasicInitMenuWindow(&gWindowConfig_81E709C); - MenuDrawTextWindow(0, 16, 29, 19); - MenuPrint(gUnknown_02039304->stringBuffer, 1, 17); - DisplayYesNoMenu(23, 10, 1); - MoveMenuCursor(0); -} - -s8 sub_8136C40(void) -{ - s8 retval = ProcessMenuInputNoWrap(); - if ((u8)(retval + 1) < 3) - { - MenuZeroFillScreen(); - BasicInitMenuWindow(&gWindowConfig_81E7080); - } - return retval; -} - -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]); - } - else - { - sub_8136DC0(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, 0); - } - sub_8136DA0(gUnknown_02039304->stringBuffer); -} - -#ifdef NONMATCHING -bool8 sub_8136D00(void) -{ - while (1) - { - if (++gUnknown_02039304->unk53 >= 5) - { - break; - } - if (gUnknown_02039304->unk61[gUnknown_02039304->unk53] != 0) - { - 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; -} -#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) -{ - BasicInitMenuWindow(&gWindowConfig_81E709C); - MenuDrawTextWindow(0, 16, 29, 19); - MenuPrint(gOtherText_WontEat, 1, 17); -} - -void sub_8136D8C(void) -{ - MenuZeroFillScreen(); - BasicInitMenuWindow(&gWindowConfig_81E7080); -} - -void sub_8136DA0(const u8 *message) -{ - MenuDrawTextWindow(0, 16, 29, 19); - MenuPrint(message, 1, 17); -} - -#ifdef NONMATCHING -void sub_8136DC0(u8 *dest, u8 a1, s16 a2) -{ - u16 v0 = a2; - if (a2 != 0) - { - if ((v0 = max(a2, 0)) == 0); - StringCopy(dest, gUnknown_08406134[a1]); - StringAppend(dest, gOtherText_WasEnhanced); - } - else - { - StringCopy(dest, gOtherText_NothingChanged); - } -} -#else -__attribute__((naked)) -void sub_8136DC0(u8 *dest, u8 a1, s16 a2) -{ - asm_unified("\tpush {r4,lr}\n" - "\tadds r4, r0, 0\n" - "\tlsls r1, 24\n" - "\tlsrs r3, r1, 24\n" - "\tlsls r2, 16\n" - "\tlsrs r0, r2, 16\n" - "\tasrs r2, 16\n" - "\tcmp r2, 0\n" - "\tbeq _08136DFC\n" - "\tcmp r2, 0\n" - "\tble _08136DD8\n" - "\tmovs r0, 0\n" - "_08136DD8:\n" - "\tlsls r0, 16\n" - "\tldr r1, _08136DF4 @ =gUnknown_08406134\n" - "\tlsls r0, r3, 2\n" - "\tadds r0, r1\n" - "\tldr r1, [r0]\n" - "\tadds r0, r4, 0\n" - "\tbl StringCopy\n" - "\tldr r1, _08136DF8 @ =gOtherText_WasEnhanced\n" - "\tadds r0, r4, 0\n" - "\tbl StringAppend\n" - "\tb _08136E04\n" - "\t.align 2, 0\n" - "_08136DF4: .4byte gUnknown_08406134\n" - "_08136DF8: .4byte gOtherText_WasEnhanced\n" - "_08136DFC:\n" - "\tldr r1, _08136E0C @ =gOtherText_NothingChanged\n" - "\tadds r0, r4, 0\n" - "\tbl StringCopy\n" - "_08136E04:\n" - "\tpop {r4}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_08136E0C: .4byte gOtherText_NothingChanged"); -} -#endif - -void sub_8136E10(struct Pokemon *pokemon, u8 *data) -{ - u16 i; - for (i=0; i<5; i++) - { - data[i] = GetMonData(pokemon, gUnknown_08406118[i]); - } -} - -void sub_8136E40(struct Pokeblock *pokeblock, struct Pokemon *pokemon) -{ - u16 i; - s16 cstat; - u8 data; - if (GetMonData(pokemon, MON_DATA_SHEEN) != 255) - { - sub_8136F74(pokeblock, pokemon); - for (i=0; i<5; i++) - { - data = GetMonData(pokemon, gUnknown_08406118[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); - } - cstat = (u8)GetMonData(pokemon, MON_DATA_SHEEN); - cstat = cstat + pokeblock->feel; - if (cstat > 255) - cstat = 255; - data = cstat; - SetMonData(pokemon, MON_DATA_SHEEN, &data); - } -} - -void sub_8136EF0(void) -{ - u16 i; - struct Pokemon *pokemon = gPlayerParty; - pokemon += gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx; - sub_8136E10(pokemon, gUnknown_02039304->unk57); - sub_8136E40(gUnknown_02039304->pokeblock, pokemon); - sub_8136E10(pokemon, gUnknown_02039304->unk5c); - for (i=0; i<5; i++) - { - gUnknown_02039304->unk61[i] = gUnknown_02039304->unk5c[i] - gUnknown_02039304->unk57[i]; - } -} - -void sub_8136F74(struct Pokeblock *pokeblock, struct Pokemon *pokemon) -{ - s8 direction; - s8 i; - s16 amount; - s8 boost; - s8 taste; - gUnknown_02039304->unk66[0] = pokeblock->spicy; - gUnknown_02039304->unk66[1] = pokeblock->sour; - gUnknown_02039304->unk66[2] = pokeblock->bitter; - gUnknown_02039304->unk66[3] = pokeblock->sweet; - gUnknown_02039304->unk66[4] = pokeblock->dry; - if (gUnknown_02039312 > 0) - direction = 1; - else if (gUnknown_02039312 < 0) - direction = -1; - else - return; - for (i=0; i<5; i++) - { - amount = gUnknown_02039304->unk66[i]; - boost = amount / 10; - if (amount % 10 >= 5) // round to the nearest - boost++; - taste = sub_8040A54(pokemon, gUnknown_0840612C[i]); - if (taste == direction) - { - gUnknown_02039304->unk66[i] += boost * taste; - } - } -} - -bool8 sub_8137058(void) -{ - struct Pokemon *pokemon = gPlayerParty; - pokemon += gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx; - if (GetMonData(pokemon, MON_DATA_SHEEN) == 255) - return TRUE; - return FALSE; -} - -u8 sub_81370A4(u8 a0) -{ - u8 i; - for (i=0; iunk54 = 0; - for (flavor=0; flavor<5; flavor++) - { - if (gUnknown_02039304->unk61[flavor] != 0) - { - spriteidx = CreateSprite(&gSpriteTemplate_840618C, gUnknown_08406158[flavor][0], gUnknown_08406158[flavor][1], 0); - if (spriteidx != MAX_SPRITES) - { - if (gUnknown_02039304->unk61[flavor] != 0) - { - gSprites[spriteidx].callback = sub_81371DC; - } - gUnknown_02039304->unk54++; - } - } - } -} - -void sub_81371DC(struct Sprite *sprite) -{ - if (sprite->data0 <= 5) - sprite->pos2.y -= 2; - else if (sprite->data0 <= 11) - sprite->pos2.y += 2; - if ((++sprite->data0) > 60) - { - DestroySprite(sprite); - gUnknown_02039304->unk54--; - } -} diff --git a/src/util.c b/src/util.c deleted file mode 100644 index 582b9f806..000000000 --- a/src/util.c +++ /dev/null @@ -1,525 +0,0 @@ -#include "global.h" -#include "util.h" - -const u32 gBitTable[] = -{ - 1 << 0, - 1 << 1, - 1 << 2, - 1 << 3, - 1 << 4, - 1 << 5, - 1 << 6, - 1 << 7, - 1 << 8, - 1 << 9, - 1 << 10, - 1 << 11, - 1 << 12, - 1 << 13, - 1 << 14, - 1 << 15, - 1 << 16, - 1 << 17, - 1 << 18, - 1 << 19, - 1 << 20, - 1 << 21, - 1 << 22, - 1 << 23, - 1 << 24, - 1 << 25, - 1 << 26, - 1 << 27, - 1 << 28, - 1 << 29, - 1 << 30, - 1 << 31, -}; - -static const struct SpriteTemplate gInvisibleSpriteTemplate = -{ - .tileTag = 0, - .paletteTag = 0, - .oam = &gDummyOamData, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, -}; - -static const u8 gSpriteDimensions[3][4][2] = -{ - // square - { - {1, 1}, - {2, 2}, - {4, 4}, - {8, 8}, - }, - - // horizontal rectangle - { - {2, 1}, - {4, 1}, - {4, 2}, - {8, 4}, - }, - - // vertical rectangle - { - {1, 2}, - {1, 4}, - {2, 4}, - {4, 8}, - }, -}; - -static const u16 gCrc16Table[] = -{ - 0x0000, 0x1189, 0x2312, 0x329B, 0x4624, 0x57AD, 0x6536, 0x74BF, - 0x8C48, 0x9DC1, 0xAF5A, 0xBED3, 0xCA6C, 0xDBE5, 0xE97E, 0xF8F7, - 0x1081, 0x0108, 0x3393, 0x221A, 0x56A5, 0x472C, 0x75B7, 0x643E, - 0x9CC9, 0x8D40, 0xBFDB, 0xAE52, 0xDAED, 0xCB64, 0xF9FF, 0xE876, - 0x2102, 0x308B, 0x0210, 0x1399, 0x6726, 0x76AF, 0x4434, 0x55BD, - 0xAD4A, 0xBCC3, 0x8E58, 0x9FD1, 0xEB6E, 0xFAE7, 0xC87C, 0xD9F5, - 0x3183, 0x200A, 0x1291, 0x0318, 0x77A7, 0x662E, 0x54B5, 0x453C, - 0xBDCB, 0xAC42, 0x9ED9, 0x8F50, 0xFBEF, 0xEA66, 0xD8FD, 0xC974, - 0x4204, 0x538D, 0x6116, 0x709F, 0x0420, 0x15A9, 0x2732, 0x36BB, - 0xCE4C, 0xDFC5, 0xED5E, 0xFCD7, 0x8868, 0x99E1, 0xAB7A, 0xBAF3, - 0x5285, 0x430C, 0x7197, 0x601E, 0x14A1, 0x0528, 0x37B3, 0x263A, - 0xDECD, 0xCF44, 0xFDDF, 0xEC56, 0x98E9, 0x8960, 0xBBFB, 0xAA72, - 0x6306, 0x728F, 0x4014, 0x519D, 0x2522, 0x34AB, 0x0630, 0x17B9, - 0xEF4E, 0xFEC7, 0xCC5C, 0xDDD5, 0xA96A, 0xB8E3, 0x8A78, 0x9BF1, - 0x7387, 0x620E, 0x5095, 0x411C, 0x35A3, 0x242A, 0x16B1, 0x0738, - 0xFFCF, 0xEE46, 0xDCDD, 0xCD54, 0xB9EB, 0xA862, 0x9AF9, 0x8B70, - 0x8408, 0x9581, 0xA71A, 0xB693, 0xC22C, 0xD3A5, 0xE13E, 0xF0B7, - 0x0840, 0x19C9, 0x2B52, 0x3ADB, 0x4E64, 0x5FED, 0x6D76, 0x7CFF, - 0x9489, 0x8500, 0xB79B, 0xA612, 0xD2AD, 0xC324, 0xF1BF, 0xE036, - 0x18C1, 0x0948, 0x3BD3, 0x2A5A, 0x5EE5, 0x4F6C, 0x7DF7, 0x6C7E, - 0xA50A, 0xB483, 0x8618, 0x9791, 0xE32E, 0xF2A7, 0xC03C, 0xD1B5, - 0x2942, 0x38CB, 0x0A50, 0x1BD9, 0x6F66, 0x7EEF, 0x4C74, 0x5DFD, - 0xB58B, 0xA402, 0x9699, 0x8710, 0xF3AF, 0xE226, 0xD0BD, 0xC134, - 0x39C3, 0x284A, 0x1AD1, 0x0B58, 0x7FE7, 0x6E6E, 0x5CF5, 0x4D7C, - 0xC60C, 0xD785, 0xE51E, 0xF497, 0x8028, 0x91A1, 0xA33A, 0xB2B3, - 0x4A44, 0x5BCD, 0x6956, 0x78DF, 0x0C60, 0x1DE9, 0x2F72, 0x3EFB, - 0xD68D, 0xC704, 0xF59F, 0xE416, 0x90A9, 0x8120, 0xB3BB, 0xA232, - 0x5AC5, 0x4B4C, 0x79D7, 0x685E, 0x1CE1, 0x0D68, 0x3FF3, 0x2E7A, - 0xE70E, 0xF687, 0xC41C, 0xD595, 0xA12A, 0xB0A3, 0x8238, 0x93B1, - 0x6B46, 0x7ACF, 0x4854, 0x59DD, 0x2D62, 0x3CEB, 0x0E70, 0x1FF9, - 0xF78F, 0xE606, 0xD49D, 0xC514, 0xB1AB, 0xA022, 0x92B9, 0x8330, - 0x7BC7, 0x6A4E, 0x58D5, 0x495C, 0x3DE3, 0x2C6A, 0x1EF1, 0x0F78, -}; - -const u8 gMiscBlank_Gfx[] = INCBIN_U8("graphics/interface/blank.4bpp"); - - -u8 CreateInvisibleSpriteWithCallback(void (*callback)(struct Sprite *)) -{ - u8 sprite = CreateSprite(&gInvisibleSpriteTemplate, 248, 168, 14); - gSprites[sprite].invisible = TRUE; - gSprites[sprite].callback = callback; - return sprite; -} - -void StoreWordInTwoHalfwords(u16 *h, u32 w) -{ - h[0] = (u16)(w); - h[1] = (u16)(w >> 16); -} - -void LoadWordFromTwoHalfwords(u16 *h, u32 *w) -{ - *w = h[0] | (s16)h[1] << 16; -} - -void SetBgAffineStruct(struct BgAffineSrcData *src, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha) -{ - src->texX = texX; - src->texY = texY; - src->scrX = scrX; - src->scrY = scrY; - src->sx = sx; - src->sy = sy; - src->alpha = alpha; -} - -void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha) -{ - struct BgAffineSrcData src; - - SetBgAffineStruct(&src, texX, texY, scrX, scrY, sx, sy, alpha); - BgAffineSet(&src, dest, 1); -} - -#ifdef NONMATCHING - -// Functionally equivalent. -// Only the two yflip loops don't match. -void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output) -{ - u8 x, y; - s8 i, j; - u8 xflip[32]; - u8 h = gSpriteDimensions[shape][size][1]; - u8 w = gSpriteDimensions[shape][size][0]; - - for (y = 0; y < h; y++) - { - int filler = 32 - w; - - for (x = 0; x < w; x++) - { - int tile = (*tilemap & 0x3ff) * 32; - int attr = *tilemap & 0xc00; - - if (attr == 0) - { - void *src = tiles + tile; - void *dest = output; - int length = 32; - DmaCopy32(3, src, dest, length); - } - else if (attr == 0x800) // yflip - { - for (i = 0; i < 8; i++) - { - void *src = tiles; - void *dest = output; - int length = 4; - // this is likely wrong, but makes it closer to matching - src += tile + (7 - i) * 4; - dest += i * 4; - DmaCopy32(3, src, dest, length); - } - } - else // xflip - { - for (i = 0; i < 8; i++) - { - for (j = 0; j < 4; j++) - { - u8 i2 = i * 4; - xflip[i2 + (3-j)] = (tiles[tile + i2 + j] & 0xf) << 4; - xflip[i2 + (3-j)] |= tiles[tile + i2 + j] >> 4; - } - } - if (*tilemap & 0x800) // yflip - { - for (i = 0; i < 8; i++) - { - void *src = xflip + (7-i) * 4; - void *dest = output + i*4; - int length = 4; - DmaCopy32(3, src, dest, length); - } - } - else - { - void *src = xflip; - void *dest = output; - int length = 32; - DmaCopy32(3, src, dest, length); - } - } - tilemap++; - output += 32; - } - tilemap += filler; - } -} - -#else - -__attribute__((naked)) void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output) -{ - asm("\n" - " .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 r2, [sp, 0x20]\n" - " adds r4, r3, 0\n" - " ldr r7, [sp, 0x5C]\n" - " lsls r0, 24\n" - " lsls r1, 24\n" - " ldr r2, _08041008 @ =gSpriteDimensions\n" - " lsrs r1, 23\n" - " lsrs r0, 21\n" - " adds r1, r0\n" - " adds r0, r2, 0x1\n" - " adds r0, r1, r0\n" - " ldrb r0, [r0]\n" - " str r0, [sp, 0x24]\n" - " adds r1, r2\n" - " ldrb r1, [r1]\n" - " str r1, [sp, 0x28]\n" - " movs r1, 0\n" - " cmp r1, r0\n" - " bcc _08040FB4\n" - " b _08041136\n" - "_08040FB4:\n" - " movs r0, 0x20\n" - " ldr r2, [sp, 0x28]\n" - " subs r0, r2\n" - " lsls r0, 1\n" - " str r0, [sp, 0x2C]\n" - "_08040FBE:\n" - " movs r2, 0\n" - " adds r1, 0x1\n" - " str r1, [sp, 0x34]\n" - " ldr r3, [sp, 0x28]\n" - " cmp r2, r3\n" - " bcc _08040FCC\n" - " b _08041124\n" - "_08040FCC:\n" - " ldr r0, _0804100C @ =0x040000d4\n" - " mov r8, r0\n" - "_08040FD0:\n" - " ldrh r1, [r4]\n" - " ldr r0, _08041010 @ =0x000003ff\n" - " ands r0, r1\n" - " lsls r0, 5\n" - " mov r12, r0\n" - " movs r0, 0xC0\n" - " lsls r0, 4\n" - " ands r0, r1\n" - " mov r3, sp\n" - " strh r1, [r3, 0x38]\n" - " cmp r0, 0\n" - " bne _08041018\n" - " ldr r0, [sp, 0x20]\n" - " add r0, r12\n" - " mov r1, r8\n" - " str r0, [r1]\n" - " str r7, [r1, 0x4]\n" - " ldr r3, _08041014 @ =0x84000008\n" - " str r3, [r1, 0x8]\n" - " ldr r0, [r1, 0x8]\n" - " adds r4, 0x2\n" - " str r4, [sp, 0x30]\n" - " adds r7, 0x20\n" - " mov r10, r7\n" - " adds r2, 0x1\n" - " mov r9, r2\n" - " b _08041112\n" - " .align 2, 0\n" - "_08041008: .4byte gSpriteDimensions\n" - "_0804100C: .4byte 0x040000d4\n" - "_08041010: .4byte 0x000003ff\n" - "_08041014: .4byte 0x84000008\n" - "_08041018:\n" - " movs r1, 0x80\n" - " lsls r1, 4\n" - " cmp r0, r1\n" - " bne _08041068\n" - " movs r3, 0\n" - " adds r4, 0x2\n" - " str r4, [sp, 0x30]\n" - " movs r0, 0x20\n" - " adds r0, r7\n" - " mov r10, r0\n" - " adds r2, 0x1\n" - " mov r9, r2\n" - " ldr r4, _08041060 @ =0x040000d4\n" - " ldr r6, _08041064 @ =0x84000001\n" - " movs r5, 0x7\n" - "_08041036:\n" - " lsls r2, r3, 24\n" - " asrs r2, 24\n" - " subs r0, r5, r2\n" - " lsls r0, 2\n" - " add r0, r12\n" - " ldr r1, [sp, 0x20]\n" - " adds r0, r1, r0\n" - " lsls r1, r2, 2\n" - " adds r1, r7, r1\n" - " str r0, [r4]\n" - " str r1, [r4, 0x4]\n" - " str r6, [r4, 0x8]\n" - " ldr r0, [r4, 0x8]\n" - " adds r2, 0x1\n" - " lsls r2, 24\n" - " lsrs r3, r2, 24\n" - " asrs r2, 24\n" - " cmp r2, 0x7\n" - " ble _08041036\n" - " b _08041112\n" - " .align 2, 0\n" - "_08041060: .4byte 0x040000d4\n" - "_08041064: .4byte 0x84000001\n" - "_08041068:\n" - " movs r3, 0\n" - " adds r4, 0x2\n" - " str r4, [sp, 0x30]\n" - " movs r0, 0x20\n" - " adds r0, r7\n" - " mov r10, r0\n" - " adds r2, 0x1\n" - " mov r9, r2\n" - "_08041078:\n" - " movs r2, 0\n" - " lsls r4, r3, 24\n" - " lsls r0, r4, 2\n" - " lsrs r0, 24\n" - " adds r6, r0, 0x3\n" - " mov r1, r12\n" - " adds r5, r1, r0\n" - "_08041086:\n" - " lsls r1, r2, 24\n" - " asrs r1, 24\n" - " subs r0, r6, r1\n" - " mov r2, sp\n" - " adds r3, r2, r0\n" - " adds r0, r5, r1\n" - " ldr r2, [sp, 0x20]\n" - " adds r0, r2, r0\n" - " ldrb r2, [r0]\n" - " movs r0, 0xF\n" - " ands r0, r2\n" - " lsls r0, 4\n" - " lsrs r2, 4\n" - " orrs r0, r2\n" - " strb r0, [r3]\n" - " adds r1, 0x1\n" - " lsls r1, 24\n" - " lsrs r2, r1, 24\n" - " asrs r1, 24\n" - " cmp r1, 0x3\n" - " ble _08041086\n" - " movs r3, 0x80\n" - " lsls r3, 17\n" - " adds r0, r4, r3\n" - " lsrs r3, r0, 24\n" - " asrs r0, 24\n" - " cmp r0, 0x7\n" - " ble _08041078\n" - " movs r0, 0x80\n" - " lsls r0, 4\n" - " mov r1, sp\n" - " ldrh r1, [r1, 0x38]\n" - " ands r0, r1\n" - " cmp r0, 0\n" - " beq _08041104\n" - " movs r3, 0\n" - " ldr r4, _080410FC @ =0x040000d4\n" - " ldr r6, _08041100 @ =0x84000001\n" - " movs r5, 0x7\n" - "_080410D4:\n" - " lsls r1, r3, 24\n" - " asrs r1, 24\n" - " subs r0, r5, r1\n" - " lsls r0, 2\n" - " mov r3, sp\n" - " adds r2, r3, r0\n" - " lsls r0, r1, 2\n" - " adds r0, r7, r0\n" - " str r2, [r4]\n" - " str r0, [r4, 0x4]\n" - " str r6, [r4, 0x8]\n" - " ldr r0, [r4, 0x8]\n" - " adds r1, 0x1\n" - " lsls r1, 24\n" - " lsrs r3, r1, 24\n" - " asrs r1, 24\n" - " cmp r1, 0x7\n" - " ble _080410D4\n" - " b _08041112\n" - " .align 2, 0\n" - "_080410FC: .4byte 0x040000d4\n" - "_08041100: .4byte 0x84000001\n" - "_08041104:\n" - " mov r0, sp\n" - " mov r1, r8\n" - " str r0, [r1]\n" - " str r7, [r1, 0x4]\n" - " ldr r2, _08041148 @ =0x84000008\n" - " str r2, [r1, 0x8]\n" - " ldr r0, [r1, 0x8]\n" - "_08041112:\n" - " ldr r4, [sp, 0x30]\n" - " mov r7, r10\n" - " mov r3, r9\n" - " lsls r0, r3, 24\n" - " lsrs r2, r0, 24\n" - " ldr r0, [sp, 0x28]\n" - " cmp r2, r0\n" - " bcs _08041124\n" - " b _08040FD0\n" - "_08041124:\n" - " ldr r1, [sp, 0x2C]\n" - " adds r4, r1\n" - " ldr r2, [sp, 0x34]\n" - " lsls r0, r2, 24\n" - " lsrs r1, r0, 24\n" - " ldr r3, [sp, 0x24]\n" - " cmp r1, r3\n" - " bcs _08041136\n" - " b _08040FBE\n" - "_08041136:\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" - "_08041148: .4byte 0x84000008\n" - " .syntax divided\n" - ); -} - -#endif - -int CountTrailingZeroBits(u32 value) -{ - u8 i; - - for (i = 0; i < 32; i++) - { - if ((value & 1) == 0) - value >>= 1; - else - return i; - } - return 0; -} - -u16 CalcCRC16(u8 *data, int length) -{ - u16 i, j; - u16 crc = 0x1121; - - for (i = 0; i < length; i++) - { - crc ^= data[i]; - for (j = 0; j < 8; j++) - { - if (crc & 1) - crc = (crc >> 1) ^ 0x8408; - else - crc >>= 1; - } - } - return ~crc; -} - -u16 CalcCRC16WithTable(u8 *data, int length) -{ - u16 i; - u16 crc = 0x1121; - u8 byte; - - for (i = 0; i < length; i++) - { - byte = crc >> 8; - crc ^= data[i]; - crc = byte ^ gCrc16Table[(u8)crc]; - } - return ~crc; -} diff --git a/src/wallclock.c b/src/wallclock.c deleted file mode 100644 index 8db13dc2d..000000000 --- a/src/wallclock.c +++ /dev/null @@ -1,1061 +0,0 @@ -#include "global.h" -#include "wallclock.h" -#include "decompress.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "rtc.h" -#include "songs.h" -#include "sound.h" -#include "strings2.h" -#include "task.h" -#include "trig.h" -#include "unknown_task.h" - -extern u16 gSpecialVar_0x8004; -extern u8 gMiscClock_Gfx[]; -extern u8 gUnknown_08E95774[]; -extern u8 gUnknown_08E954B0[]; -extern u16 gMiscClockMale_Pal[]; -extern u16 gMiscClockFemale_Pal[]; - -//-------------------------------------------------- -// Graphics Data -//-------------------------------------------------- - -static const u8 ClockGfx_Misc[] = INCBIN_U8("graphics/misc/clock_misc.4bpp.lz"); -static const struct CompressedSpriteSheet gUnknown_083F7A90[] = -{ - {ClockGfx_Misc, 0x2000, 0x1000}, - {NULL}, -}; -static const struct SpritePalette gUnknown_083F7AA0[] = -{ - {gMiscClockMale_Pal, 0x1000}, - {gMiscClockFemale_Pal, 0x1001}, - {NULL}, -}; -static const struct OamData gOamData_83F7AB8 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_83F7AC0[] = -{ - ANIMCMD_FRAME(0, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83F7AC8[] = -{ - ANIMCMD_FRAME(64, 30), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_83F7AD0[] = -{ - gSpriteAnim_83F7AC0, -}; -static const union AnimCmd *const gSpriteAnimTable_83F7AD4[] = -{ - gSpriteAnim_83F7AC8, -}; -static void sub_810B05C(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_83F7AD8 = -{ - .tileTag = 0x1000, - .paletteTag = 0x1000, - .oam = &gOamData_83F7AB8, - .anims = gSpriteAnimTable_83F7AD0, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810B05C, -}; -static void sub_810B0F4(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_83F7AF0 = -{ - .tileTag = 0x1000, - .paletteTag = 0x1000, - .oam = &gOamData_83F7AB8, - .anims = gSpriteAnimTable_83F7AD4, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810B0F4, -}; -static const struct OamData gOamData_83F7B08 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_83F7B10[] = -{ - ANIMCMD_FRAME(132, 30), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_83F7B18[] = -{ - ANIMCMD_FRAME(128, 30), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_83F7B20[] = -{ - gSpriteAnim_83F7B10, -}; -static const union AnimCmd *const gSpriteAnimTable_83F7B24[] = -{ - gSpriteAnim_83F7B18, -}; -static void sub_810B18C(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_83F7B28 = -{ - .tileTag = 0x1000, - .paletteTag = 0x1000, - .oam = &gOamData_83F7B08, - .anims = gSpriteAnimTable_83F7B20, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810B18C, -}; -static void sub_810B230(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_83F7B40 = -{ - .tileTag = 0x1000, - .paletteTag = 0x1000, - .oam = &gOamData_83F7B08, - .anims = gSpriteAnimTable_83F7B24, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810B230, -}; - -static void WallClockVblankCallback(void); -static void LoadWallClockGraphics(void); -static void WallClockMainCallback(void); -static void WallClockInit(void); -static void Task_SetClock1(u8 taskId); -static void Task_SetClock2(u8 taskId); -static void Task_SetClock3(u8 taskId); -static void Task_SetClock4(u8 taskId); -static void Task_SetClock5(u8 taskId); -static void Task_SetClock6(u8 taskId); -static void Task_ViewClock1(u8 taskId); -static void Task_ViewClock2(u8 taskId); -static void Task_ViewClock3(u8 taskId); -static void Task_ViewClock4(u8 taskId); -static u8 CalcMinHandDelta(u16 speed); -static u16 CalcNewMinHandAngle(u16 angle, u8 direction, u8 speed); -static u8 AdvanceClock(u8 taskId, u8 direction); -static void UpdateClockPeriod(u8 taskId, u8 direction); -static void InitClockWithRtc(u8 taskId); - -enum -{ - PERIOD_AM, - PERIOD_PM, -}; - -enum -{ - MVMT_NONE, - MVMT_BACKWARD, - MVMT_FORWARD, -}; - -static void WallClockVblankCallback(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -static void LoadWallClockGraphics(void) -{ - u8 *addr; - u32 size; - - SetVBlankCallback(0); - REG_DISPCNT = 0; - REG_BG3CNT = 0; - REG_BG2CNT = 0; - REG_BG1CNT = 0; - REG_BG0CNT = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - - 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; - } - } - DmaClear32(3, OAM, OAM_SIZE); - DmaClear16(3, PLTT, PLTT_SIZE); - - LZ77UnCompVram(gMiscClock_Gfx, (void *)VRAM); - if (gSpecialVar_0x8004 == MALE) - LoadPalette(gMiscClockMale_Pal, 0, 32); - else - LoadPalette(gMiscClockFemale_Pal, 0, 32); - remove_some_task(); - ResetTasks(); - ResetSpriteData(); - ResetPaletteFade(); - FreeAllSpritePalettes(); - LoadCompressedObjectPic(&gUnknown_083F7A90[0]); - LoadSpritePalettes(gUnknown_083F7AA0); - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow(&gWindowConfig_81E6CE4); -} - -static void WallClockInit(void) -{ - u16 ime; - - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - ime = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = ime; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - SetVBlankCallback(WallClockVblankCallback); - SetMainCallback2(WallClockMainCallback); - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - REG_BG3CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | - DISPCNT_BG3_ON | DISPCNT_OBJ_ON; -} - -#define tMinuteHandAngle data[0] -#define tHourHandAngle data[1] -#define tHours data[2] -#define tMinutes data[3] -#define tMvmtDir data[4] -#define tPeriod data[5] -#define tMvmtSpeed data[6] - -//Allow player to set the clock -void CB2_StartWallClock(void) -{ - u8 taskId; - u8 spriteId; - - LoadWallClockGraphics(); - LZ77UnCompVram(&gUnknown_08E954B0, (void *)(VRAM + 0x3800)); - - taskId = CreateTask(Task_SetClock1, 0); - gTasks[taskId].tHours = 10; - gTasks[taskId].tMinutes = 0; - gTasks[taskId].tMvmtDir = MVMT_NONE; - gTasks[taskId].tPeriod = PERIOD_AM; - gTasks[taskId].tMvmtSpeed = 0; - gTasks[taskId].tMinuteHandAngle = 0; - gTasks[taskId].tHourHandAngle = 300; - - spriteId = CreateSprite(&gSpriteTemplate_83F7AD8, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 1); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].oam.matrixNum = 0; - - spriteId = CreateSprite(&gSpriteTemplate_83F7AF0, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 0); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].oam.matrixNum = 1; - - spriteId = CreateSprite(&gSpriteTemplate_83F7B28, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 2); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 45; - - spriteId = CreateSprite(&gSpriteTemplate_83F7B40, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 2); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 90; - - WallClockInit(); -} - -//View, but don't set, the clock -void CB2_ViewWallClock(void) -{ - u8 taskId; - s16 angle1; - s16 angle2; - u8 spriteId; - - LoadWallClockGraphics(); - LZ77UnCompVram(gUnknown_08E95774, (void *)(VRAM + 0x3800)); - - taskId = CreateTask(Task_ViewClock1, 0); - InitClockWithRtc(taskId); - if (gTasks[taskId].tPeriod == PERIOD_AM) - { - angle1 = 45; - angle2 = 90; - } - else - { - angle1 = 90; - angle2 = 135; - } - - spriteId = CreateSprite(&gSpriteTemplate_83F7AD8, 120, 80, 1); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].oam.matrixNum = 0; - - spriteId = CreateSprite(&gSpriteTemplate_83F7AF0, 120, 80, 0); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].oam.matrixNum = 1; - - spriteId = CreateSprite(&gSpriteTemplate_83F7B28, 120, 80, 2); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = angle1; - - spriteId = CreateSprite(&gSpriteTemplate_83F7B40, 120, 80, 2); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = angle2; - - WallClockInit(); -} - -static void WallClockMainCallback(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void Task_SetClock1(u8 taskId) -{ - if (!gPaletteFade.active) - gTasks[taskId].func = Task_SetClock2; -} - -//Handle keypresses when setting clock -static void Task_SetClock2(u8 taskId) -{ - if (gTasks[taskId].tMinuteHandAngle % 6) - { - gTasks[taskId].tMinuteHandAngle = CalcNewMinHandAngle( - gTasks[taskId].tMinuteHandAngle, - gTasks[taskId].tMvmtDir, - gTasks[taskId].tMvmtSpeed); - } - else - { - gTasks[taskId].tMinuteHandAngle = gTasks[taskId].tMinutes * 6; - gTasks[taskId].tHourHandAngle = (gTasks[taskId].tHours % 12) * 30 + (gTasks[taskId].tMinutes / 10) * 5; - if (gMain.newKeys & A_BUTTON) - { - gTasks[taskId].func = Task_SetClock3; - return; - } - else - { - gTasks[taskId].tMvmtDir = gMain.newKeys & A_BUTTON; - if (gMain.heldKeys & DPAD_LEFT) - gTasks[taskId].tMvmtDir = MVMT_BACKWARD; - if (gMain.heldKeys & DPAD_RIGHT) - gTasks[taskId].tMvmtDir = MVMT_FORWARD; - if (gTasks[taskId].tMvmtDir) - { - if (gTasks[taskId].tMvmtSpeed < 0xFF) - gTasks[taskId].tMvmtSpeed++; - gTasks[taskId].tMinuteHandAngle = CalcNewMinHandAngle( - gTasks[taskId].tMinuteHandAngle, - gTasks[taskId].tMvmtDir, - gTasks[taskId].tMvmtSpeed); - AdvanceClock(taskId, gTasks[taskId].tMvmtDir); - } - else - { - gTasks[taskId].tMvmtSpeed = 0; - } - } - } -} - -//Ask player "Is this the correct time?" -static void Task_SetClock3(u8 taskId) -{ - MenuDrawTextWindow(2, 16, 27, 19); - MenuPrint(gOtherText_CorrectTimePrompt, 3, 17); - MenuDrawTextWindow(23, 8, 29, 13); - PrintMenuItems(24, 9, 2, gMenuYesNoItems); - InitMenu(0, 24, 9, 2, 1, 5); - gTasks[taskId].func = Task_SetClock4; -} - -//Get menu selection -static void Task_SetClock4(u8 taskId) -{ - switch (ProcessMenuInputNoWrap_()) - { - case 0: //YES - PlaySE(SE_SELECT); - gTasks[taskId].func = Task_SetClock5; //Move on - return; - case -1: //B button - case 1: //NO - HandleDestroyMenuCursors(); - PlaySE(SE_SELECT); - MenuZeroFillWindowRect(23, 8, 29, 13); - MenuZeroFillWindowRect(2, 16, 27, 19); - gTasks[taskId].func = Task_SetClock2; //Go back and let player adjust clock - } -} - -//Set the time offset based on the wall clock's time -static void Task_SetClock5(u8 taskId) -{ - RtcInitLocalTimeOffset(gTasks[taskId].tHours, gTasks[taskId].tMinutes); - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskId].func = Task_SetClock6; -} - -static void Task_SetClock6(u8 taskId) -{ - if (!gPaletteFade.active) - SetMainCallback2((MainCallback)gMain.savedCallback); -} - -static void Task_ViewClock1(u8 taskId) -{ - if (!gPaletteFade.active) - gTasks[taskId].func = Task_ViewClock2; -} - -//Wait for A or B press -static void Task_ViewClock2(u8 taskId) -{ - InitClockWithRtc(taskId); - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - gTasks[taskId].func = Task_ViewClock3; -} - -static void Task_ViewClock3(u8 taskId) -{ - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskId].func = Task_ViewClock4; -} - -static void Task_ViewClock4(u8 taskId) -{ - if (!gPaletteFade.active) - SetMainCallback2((MainCallback)gMain.savedCallback); -} - -static u8 CalcMinHandDelta(u16 speed) -{ - if (speed > 60) - return 6; - else if (speed > 30) - return 3; - else if (speed > 10) - return 2; - else - return 1; -} - -//Calculates the new angle of the minute hand when setting the clock -static u16 CalcNewMinHandAngle(u16 angle, u8 direction, u8 speed) -{ - u8 delta = CalcMinHandDelta(speed); - - switch (direction) - { - case MVMT_BACKWARD: - if (angle) - angle = angle - delta; - else - angle = 360 - delta; - break; - case MVMT_FORWARD: - if (angle < 360 - delta) - angle = angle + delta; - else - angle = 0; - break; - } - return angle; -} - -//Advances clock forward or backward by 1 minute -static u8 AdvanceClock(u8 taskId, u8 direction) -{ - switch (direction) - { - case MVMT_BACKWARD: - if (gTasks[taskId].tMinutes > 0) - gTasks[taskId].tMinutes--; - else - { - gTasks[taskId].tMinutes = 59; - if (gTasks[taskId].tHours > 0) - gTasks[taskId].tHours--; - else - gTasks[taskId].tHours = 23; - UpdateClockPeriod(taskId, direction); - } - break; - case MVMT_FORWARD: - if (gTasks[taskId].tMinutes < 59) - gTasks[taskId].tMinutes++; - else - { - gTasks[taskId].tMinutes = 0; - if (gTasks[taskId].tHours < 23) - gTasks[taskId].tHours++; - else - gTasks[taskId].tHours = 0; - UpdateClockPeriod(taskId, direction); - } - break; - } - return 0; -} - -//Updates the clock period (AM/PM) if it needs to change -static void UpdateClockPeriod(u8 taskId, u8 direction) -{ - u8 hours = gTasks[taskId].tHours; - - switch (direction) - { - case MVMT_BACKWARD: - switch (hours) - { - case 11: - gTasks[taskId].tPeriod = PERIOD_AM; - break; - case 23: - gTasks[taskId].tPeriod = PERIOD_PM; - break; - } - break; - case MVMT_FORWARD: - switch (hours) - { - case 0: - gTasks[taskId].tPeriod = PERIOD_AM; - break; - case 12: - gTasks[taskId].tPeriod = PERIOD_PM; - break; - } - break; - } -} - -static void InitClockWithRtc(u8 taskId) -{ - RtcCalcLocalTime(); - gTasks[taskId].tHours = gLocalTime.hours; - gTasks[taskId].tMinutes = gLocalTime.minutes; - gTasks[taskId].tMinuteHandAngle = gTasks[taskId].tMinutes * 6; - gTasks[taskId].tHourHandAngle = (gTasks[taskId].tHours % 12) * 30 + (gTasks[taskId].tMinutes / 10) * 5; - if (gLocalTime.hours <= 11) - gTasks[taskId].tPeriod = PERIOD_AM; - else - gTasks[taskId].tPeriod = PERIOD_PM; -} - -static const s8 gClockHandCoords[][2] = -{ - { 0, -24}, - { 1, -25}, - { 1, -25}, - { 2, -25}, - { 2, -25}, - { 2, -25}, - { 3, -24}, - { 3, -25}, - { 4, -25}, - { 4, -25}, - { 4, -25}, - { 5, -25}, - { 5, -25}, - { 6, -24}, - { 6, -24}, - { 6, -24}, - { 7, -24}, - { 7, -24}, - { 7, -24}, - { 8, -24}, - { 8, -24}, - { 9, -24}, - { 9, -24}, - { 10, -23}, - { 10, -23}, - { 11, -22}, - { 11, -22}, - { 11, -22}, - { 12, -22}, - { 12, -21}, - { 13, -21}, - { 13, -21}, - { 13, -21}, - { 14, -21}, - { 14, -21}, - { 14, -20}, - { 14, -20}, - { 15, -20}, - { 15, -19}, - { 16, -19}, - { 16, -19}, - { 16, -19}, - { 16, -18}, - { 16, -18}, - { 17, -18}, - { 17, -17}, - { 17, -17}, - { 18, -17}, - { 18, -17}, - { 18, -16}, - { 18, -16}, - { 19, -16}, - { 19, -15}, - { 19, -15}, - { 20, -15}, - { 20, -14}, - { 20, -14}, - { 20, -13}, - { 20, -13}, - { 21, -13}, - { 21, -13}, - { 21, -12}, - { 22, -12}, - { 22, -12}, - { 22, -11}, - { 22, -11}, - { 22, -10}, - { 23, -10}, - { 23, -9}, - { 23, -9}, - { 23, -9}, - { 23, -9}, - { 23, -8}, - { 23, -8}, - { 23, -7}, - { 23, -7}, - { 23, -6}, - { 24, -6}, - { 24, -6}, - { 25, -5}, - { 25, -5}, - { 24, -4}, - { 25, -4}, - { 24, -3}, - { 25, -3}, - { 25, -3}, - { 25, -2}, - { 25, -2}, - { 24, -1}, - { 25, -1}, - { 24, 0}, - { 24, 0}, - { 24, 0}, - { 24, 1}, - { 24, 1}, - { 25, 2}, - { 24, 2}, - { 25, 2}, - { 24, 3}, - { 24, 3}, - { 25, 4}, - { 24, 4}, - { 24, 5}, - { 24, 5}, - { 24, 5}, - { 24, 6}, - { 23, 6}, - { 23, 6}, - { 23, 7}, - { 23, 8}, - { 23, 8}, - { 23, 8}, - { 23, 9}, - { 23, 9}, - { 23, 10}, - { 22, 10}, - { 22, 10}, - { 22, 11}, - { 22, 11}, - { 22, 11}, - { 22, 12}, - { 21, 12}, - { 21, 12}, - { 21, 13}, - { 20, 13}, - { 20, 13}, - { 19, 13}, - { 19, 13}, - { 19, 14}, - { 19, 14}, - { 19, 15}, - { 19, 15}, - { 18, 15}, - { 18, 16}, - { 17, 16}, - { 17, 16}, - { 17, 17}, - { 17, 17}, - { 16, 17}, - { 16, 18}, - { 16, 18}, - { 15, 18}, - { 14, 18}, - { 15, 19}, - { 14, 19}, - { 14, 19}, - { 13, 19}, - { 13, 20}, - { 13, 20}, - { 13, 20}, - { 12, 20}, - { 12, 20}, - { 12, 21}, - { 11, 21}, - { 11, 21}, - { 11, 21}, - { 10, 21}, - { 10, 22}, - { 10, 22}, - { 9, 22}, - { 9, 22}, - { 8, 22}, - { 7, 22}, - { 7, 23}, - { 7, 23}, - { 6, 23}, - { 6, 23}, - { 5, 23}, - { 5, 23}, - { 5, 24}, - { 4, 24}, - { 4, 24}, - { 4, 24}, - { 3, 24}, - { 2, 24}, - { 2, 24}, - { 1, 24}, - { 1, 24}, - { 0, 24}, - { 0, 24}, - { -1, 23}, - { 0, 24}, - { 0, 24}, - { -1, 24}, - { -1, 24}, - { -2, 24}, - { -2, 24}, - { -3, 24}, - { -3, 24}, - { -4, 24}, - { -4, 24}, - { -5, 24}, - { -5, 23}, - { -5, 23}, - { -6, 23}, - { -6, 23}, - { -7, 23}, - { -7, 23}, - { -7, 23}, - { -8, 23}, - { -8, 22}, - { -9, 22}, - { -9, 22}, - {-10, 22}, - {-10, 22}, - {-10, 21}, - {-11, 21}, - {-11, 21}, - {-11, 21}, - {-11, 20}, - {-12, 20}, - {-12, 20}, - {-13, 20}, - {-13, 20}, - {-13, 19}, - {-14, 19}, - {-14, 19}, - {-14, 19}, - {-14, 18}, - {-15, 18}, - {-15, 18}, - {-15, 17}, - {-16, 17}, - {-16, 17}, - {-17, 17}, - {-17, 16}, - {-17, 16}, - {-18, 16}, - {-17, 15}, - {-18, 15}, - {-18, 15}, - {-19, 15}, - {-19, 14}, - {-19, 14}, - {-19, 13}, - {-19, 13}, - {-20, 13}, - {-20, 12}, - {-20, 12}, - {-21, 12}, - {-21, 12}, - {-21, 11}, - {-21, 11}, - {-21, 10}, - {-21, 10}, - {-21, 9}, - {-22, 9}, - {-22, 9}, - {-22, 8}, - {-22, 8}, - {-22, 7}, - {-23, 7}, - {-23, 7}, - {-23, 6}, - {-23, 6}, - {-23, 5}, - {-24, 5}, - {-23, 4}, - {-23, 4}, - {-24, 4}, - {-24, 4}, - {-24, 3}, - {-24, 3}, - {-24, 2}, - {-24, 2}, - {-24, 1}, - {-24, 1}, - {-24, 1}, - {-24, 0}, - {-25, 0}, - {-24, -1}, - {-25, -1}, - {-24, -1}, - {-24, -2}, - {-24, -2}, - {-24, -3}, - {-24, -3}, - {-24, -4}, - {-24, -4}, - {-24, -4}, - {-24, -5}, - {-24, -5}, - {-24, -6}, - {-24, -6}, - {-23, -6}, - {-23, -7}, - {-23, -7}, - {-23, -8}, - {-23, -8}, - {-23, -9}, - {-23, -9}, - {-22, -9}, - {-22, -9}, - {-22, -10}, - {-22, -10}, - {-21, -10}, - {-21, -11}, - {-22, -11}, - {-22, -12}, - {-21, -12}, - {-21, -13}, - {-21, -13}, - {-20, -13}, - {-21, -14}, - {-20, -14}, - {-20, -14}, - {-19, -14}, - {-19, -15}, - {-19, -15}, - {-18, -16}, - {-18, -16}, - {-18, -16}, - {-18, -17}, - {-18, -17}, - {-17, -17}, - {-17, -18}, - {-17, -18}, - {-16, -18}, - {-16, -18}, - {-16, -19}, - {-16, -19}, - {-15, -19}, - {-15, -19}, - {-15, -20}, - {-14, -20}, - {-14, -20}, - {-14, -21}, - {-13, -21}, - {-13, -21}, - {-13, -21}, - {-12, -21}, - {-12, -22}, - {-11, -22}, - {-11, -22}, - {-11, -22}, - {-10, -22}, - {-10, -22}, - { -9, -22}, - { -9, -23}, - { -9, -23}, - { -8, -23}, - { -8, -23}, - { -7, -23}, - { -7, -23}, - { -7, -24}, - { -6, -24}, - { -6, -24}, - { -5, -24}, - { -5, -24}, - { -4, -24}, - { -4, -24}, - { -4, -24}, - { -4, -25}, - { -3, -25}, - { -2, -25}, - { -2, -24}, - { -2, -24}, - { -1, -25}, - { -1, -25}, - { 0, -25}, -}; - -static void sub_810B05C(struct Sprite *sprite) -{ - u16 angle; - s16 sin; - s16 cos; - u16 x; - u16 y; - - angle = gTasks[sprite->data0].tMinuteHandAngle; - sin = Sin2(angle) / 16; - cos = Cos2(angle) / 16; - SetOamMatrix(0, cos, sin, -sin, cos); - x = gClockHandCoords[angle][0]; - y = gClockHandCoords[angle][1]; - - //Manual sign extension - if (x > 0x80) - x |= 0xFF00; - if (y > 0x80) - y |= 0xFF00; - - sprite->pos2.x = x; - sprite->pos2.y = y; -} - -static void sub_810B0F4(struct Sprite *sprite) -{ - u16 angle; - s16 sin; - s16 cos; - u16 x; - u16 y; - - angle = gTasks[sprite->data0].tHourHandAngle; - sin = Sin2(angle) / 16; - cos = Cos2(angle) / 16; - SetOamMatrix(1, cos, sin, -sin, cos); - x = gClockHandCoords[angle][0]; - y = gClockHandCoords[angle][1]; - - //Manual sign extension - if (x > 0x80) - x |= 0xFF00; - if (y > 0x80) - y |= 0xFF00; - - sprite->pos2.x = x; - sprite->pos2.y = y; -} - -static void sub_810B18C(struct Sprite *sprite) -{ - s16 sin; - s16 cos; - - if (gTasks[sprite->data0].tPeriod != PERIOD_AM) - { - if (sprite->data1 >= 60 && sprite->data1 < 90) - sprite->data1 += 5; - if (sprite->data1 < 60) - sprite->data1++; - } - else - { - if (sprite->data1 > 45 && sprite->data1 <= 75) - sprite->data1 -= 5; - if (sprite->data1 > 75) - sprite->data1--; - } - cos = Cos2((u16)sprite->data1); - sprite->pos2.x = cos * 30 / 4096; - sin = Sin2((u16)sprite->data1); - sprite->pos2.y = sin * 30 / 4096; -} - -static void sub_810B230(struct Sprite *sprite) -{ - s16 sin; - s16 cos; - - if (gTasks[sprite->data0].tPeriod != PERIOD_AM) - { - if (sprite->data1 >= 105 && sprite->data1 < 135) - sprite->data1 += 5; - if (sprite->data1 < 105) - sprite->data1++; - } - else - { - if (sprite->data1 > 90 && sprite->data1 <= 120) - sprite->data1 -= 5; - if (sprite->data1 > 120) - sprite->data1--; - } - cos = Cos2((u16)sprite->data1); - sprite->pos2.x = cos * 30 / 4096; - sin = Sin2((u16)sprite->data1); - sprite->pos2.y = sin * 30 / 4096; -} diff --git a/src/wild_encounter.c b/src/wild_encounter.c deleted file mode 100644 index 96f47c067..000000000 --- a/src/wild_encounter.c +++ /dev/null @@ -1,3568 +0,0 @@ -#include "global.h" -#include "wild_encounter.h" -#include "abilities.h" -#include "battle_setup.h" -#include "event_data.h" -#include "field_player_avatar.h" -#include "fieldmap.h" -#include "metatile_behavior.h" -#include "pokeblock.h" -#include "rng.h" -#include "roamer.h" -#include "rom4.h" -#include "safari_zone.h" -#include "script.h" -#include "species.h" -#include "tv.h" - -const struct WildPokemon PetalburgCity_WaterMons [] = -{ - {20, 30, SPECIES_MARILL}, - {10, 20, SPECIES_MARILL}, - {30, 35, SPECIES_MARILL}, - {5, 10, SPECIES_MARILL}, - {5, 10, SPECIES_MARILL}, -}; -const struct WildPokemonInfo PetalburgCity_WaterMonsInfo = {1, PetalburgCity_WaterMons}; - -const struct WildPokemon PetalburgCity_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_CORPHISH}, - {25, 30, SPECIES_CORPHISH}, - {30, 35, SPECIES_CORPHISH}, - {20, 25, SPECIES_CORPHISH}, - {35, 40, SPECIES_CORPHISH}, - {40, 45, SPECIES_CORPHISH}, -}; -const struct WildPokemonInfo PetalburgCity_FishingMonsInfo = {10, PetalburgCity_FishingMons}; - -const struct WildPokemon SlateportCity_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo SlateportCity_WaterMonsInfo = {4, SlateportCity_WaterMons}; - -const struct WildPokemon SlateportCity_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo SlateportCity_FishingMonsInfo = {10, SlateportCity_FishingMons}; - -const struct WildPokemon LilycoveCity_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo LilycoveCity_WaterMonsInfo = {4, LilycoveCity_WaterMons}; - -const struct WildPokemon LilycoveCity_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_STARYU}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo LilycoveCity_FishingMonsInfo = {10, LilycoveCity_FishingMons}; - -const struct WildPokemon MossdeepCity_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo MossdeepCity_WaterMonsInfo = {4, MossdeepCity_WaterMons}; - -const struct WildPokemon MossdeepCity_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo MossdeepCity_FishingMonsInfo = {10, MossdeepCity_FishingMons}; - -const struct WildPokemon SootopolisCity_WaterMons [] = -{ - {5, 35, SPECIES_MAGIKARP}, - {10, 30, SPECIES_MAGIKARP}, - {15, 25, SPECIES_MAGIKARP}, - {25, 30, SPECIES_MAGIKARP}, - {25, 30, SPECIES_MAGIKARP}, -}; -const struct WildPokemonInfo SootopolisCity_WaterMonsInfo = {1, SootopolisCity_WaterMons}; - -const struct WildPokemon SootopolisCity_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, -#ifdef SAPPHIRE - {5, 10, SPECIES_TENTACOOL}, -#else - {10, 15, SPECIES_MAGIKARP}, -#endif - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_MAGIKARP}, - {30, 35, SPECIES_MAGIKARP}, - {30, 35, SPECIES_MAGIKARP}, - {35, 40, SPECIES_GYARADOS}, - {35, 45, SPECIES_GYARADOS}, - {5, 45, SPECIES_GYARADOS}, -}; -const struct WildPokemonInfo SootopolisCity_FishingMonsInfo = {10, SootopolisCity_FishingMons}; - -const struct WildPokemon EverGrandeCity_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo EverGrandeCity_WaterMonsInfo = {4, EverGrandeCity_WaterMons}; - -const struct WildPokemon EverGrandeCity_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_LUVDISC}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_LUVDISC}, - {30, 35, SPECIES_WAILMER}, - {30, 35, SPECIES_CORSOLA}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo EverGrandeCity_FishingMonsInfo = {10, EverGrandeCity_FishingMons}; - -const struct WildPokemon MeteorFalls_1F_1R_LandMons [] = -{ - {16, 16, SPECIES_ZUBAT}, - {17, 17, SPECIES_ZUBAT}, - {18, 18, SPECIES_ZUBAT}, - {15, 15, SPECIES_ZUBAT}, - {14, 14, SPECIES_ZUBAT}, -#ifdef SAPPHIRE - {16, 16, SPECIES_LUNATONE}, - {18, 18, SPECIES_LUNATONE}, - {14, 14, SPECIES_LUNATONE}, -#else - {16, 16, SPECIES_SOLROCK}, - {18, 18, SPECIES_SOLROCK}, - {14, 14, SPECIES_SOLROCK}, -#endif - {19, 19, SPECIES_ZUBAT}, - {20, 20, SPECIES_ZUBAT}, - {19, 19, SPECIES_ZUBAT}, - {20, 20, SPECIES_ZUBAT}, -}; -const struct WildPokemonInfo MeteorFalls_1F_1R_LandMonsInfo = {10, MeteorFalls_1F_1R_LandMons}; - -const struct WildPokemon MeteorFalls_1F_1R_WaterMons [] = -{ - {5, 35, SPECIES_ZUBAT}, - {30, 35, SPECIES_ZUBAT}, -#ifdef SAPPHIRE - {25, 35, SPECIES_LUNATONE}, - {15, 25, SPECIES_LUNATONE}, - {5, 15, SPECIES_LUNATONE}, -#else - {25, 35, SPECIES_SOLROCK}, - {15, 25, SPECIES_SOLROCK}, - {5, 15, SPECIES_SOLROCK}, -#endif -}; -const struct WildPokemonInfo MeteorFalls_1F_1R_WaterMonsInfo = {4, MeteorFalls_1F_1R_WaterMons}; - -const struct WildPokemon MeteorFalls_1F_1R_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {20, 25, SPECIES_BARBOACH}, - {35, 40, SPECIES_BARBOACH}, - {40, 45, SPECIES_BARBOACH}, -}; -const struct WildPokemonInfo MeteorFalls_1F_1R_FishingMonsInfo = {30, MeteorFalls_1F_1R_FishingMons}; - -const struct WildPokemon MeteorFalls_1F_2R_LandMons [] = -{ - {33, 33, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, -#ifdef SAPPHIRE - {35, 35, SPECIES_LUNATONE}, - {33, 33, SPECIES_LUNATONE}, - {37, 37, SPECIES_LUNATONE}, -#else - {35, 35, SPECIES_SOLROCK}, - {33, 33, SPECIES_SOLROCK}, - {37, 37, SPECIES_SOLROCK}, -#endif - {35, 35, SPECIES_GOLBAT}, -#ifdef SAPPHIRE - {39, 39, SPECIES_LUNATONE}, -#else - {39, 39, SPECIES_SOLROCK}, -#endif - {38, 38, SPECIES_GOLBAT}, - {40, 40, SPECIES_GOLBAT}, - {38, 38, SPECIES_GOLBAT}, - {40, 40, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo MeteorFalls_1F_2R_LandMonsInfo = {10, MeteorFalls_1F_2R_LandMons}; - -const struct WildPokemon MeteorFalls_1F_2R_WaterMons [] = -{ - {30, 35, SPECIES_GOLBAT}, - {30, 35, SPECIES_GOLBAT}, -#ifdef SAPPHIRE - {25, 35, SPECIES_LUNATONE}, - {15, 25, SPECIES_LUNATONE}, - {5, 15, SPECIES_LUNATONE}, -#else - {25, 35, SPECIES_SOLROCK}, - {15, 25, SPECIES_SOLROCK}, - {5, 15, SPECIES_SOLROCK}, -#endif -}; -const struct WildPokemonInfo MeteorFalls_1F_2R_WaterMonsInfo = {4, MeteorFalls_1F_2R_WaterMons}; - -const struct WildPokemon MeteorFalls_1F_2R_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {30, 35, SPECIES_WHISCASH}, - {35, 40, SPECIES_WHISCASH}, - {40, 45, SPECIES_WHISCASH}, -}; -const struct WildPokemonInfo MeteorFalls_1F_2R_FishingMonsInfo = {30, MeteorFalls_1F_2R_FishingMons}; - -const struct WildPokemon MeteorFalls_B1F_1R_LandMons [] = -{ - {33, 33, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, -#ifdef SAPPHIRE - {35, 35, SPECIES_LUNATONE}, - {33, 33, SPECIES_LUNATONE}, - {37, 37, SPECIES_LUNATONE}, -#else - {35, 35, SPECIES_SOLROCK}, - {33, 33, SPECIES_SOLROCK}, - {37, 37, SPECIES_SOLROCK}, -#endif - {35, 35, SPECIES_GOLBAT}, -#ifdef SAPPHIRE - {39, 39, SPECIES_LUNATONE}, -#else - {39, 39, SPECIES_SOLROCK}, -#endif - {38, 38, SPECIES_GOLBAT}, - {40, 40, SPECIES_GOLBAT}, - {38, 38, SPECIES_GOLBAT}, - {40, 40, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo MeteorFalls_B1F_1R_LandMonsInfo = {10, MeteorFalls_B1F_1R_LandMons}; - -const struct WildPokemon MeteorFalls_B1F_1R_WaterMons [] = -{ - {30, 35, SPECIES_GOLBAT}, - {30, 35, SPECIES_GOLBAT}, -#ifdef SAPPHIRE - {25, 35, SPECIES_LUNATONE}, - {15, 25, SPECIES_LUNATONE}, - {5, 15, SPECIES_LUNATONE}, -#else - {25, 35, SPECIES_SOLROCK}, - {15, 25, SPECIES_SOLROCK}, - {5, 15, SPECIES_SOLROCK}, -#endif -}; -const struct WildPokemonInfo MeteorFalls_B1F_1R_WaterMonsInfo = {4, MeteorFalls_B1F_1R_WaterMons}; - -const struct WildPokemon MeteorFalls_B1F_1R_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {30, 35, SPECIES_WHISCASH}, - {35, 40, SPECIES_WHISCASH}, - {40, 45, SPECIES_WHISCASH}, -}; -const struct WildPokemonInfo MeteorFalls_B1F_1R_FishingMonsInfo = {30, MeteorFalls_B1F_1R_FishingMons}; - -const struct WildPokemon MeteorFalls_B1F_2R_LandMons [] = -{ - {33, 33, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {30, 30, SPECIES_BAGON}, -#ifdef SAPPHIRE - {35, 35, SPECIES_LUNATONE}, -#else - {35, 35, SPECIES_SOLROCK}, -#endif - {35, 35, SPECIES_BAGON}, -#ifdef SAPPHIRE - {37, 37, SPECIES_LUNATONE}, -#else - {37, 37, SPECIES_SOLROCK}, -#endif - {25, 25, SPECIES_BAGON}, -#ifdef SAPPHIRE - {39, 39, SPECIES_LUNATONE}, -#else - {39, 39, SPECIES_SOLROCK}, -#endif - {38, 38, SPECIES_GOLBAT}, - {40, 40, SPECIES_GOLBAT}, - {38, 38, SPECIES_GOLBAT}, - {40, 40, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo MeteorFalls_B1F_2R_LandMonsInfo = {10, MeteorFalls_B1F_2R_LandMons}; - -const struct WildPokemon MeteorFalls_B1F_2R_WaterMons [] = -{ - {30, 35, SPECIES_GOLBAT}, - {30, 35, SPECIES_GOLBAT}, -#ifdef SAPPHIRE - {25, 35, SPECIES_LUNATONE}, - {15, 25, SPECIES_LUNATONE}, - {5, 15, SPECIES_LUNATONE}, -#else - {25, 35, SPECIES_SOLROCK}, - {15, 25, SPECIES_SOLROCK}, - {5, 15, SPECIES_SOLROCK}, -#endif -}; -const struct WildPokemonInfo MeteorFalls_B1F_2R_WaterMonsInfo = {4, MeteorFalls_B1F_2R_WaterMons}; - -const struct WildPokemon MeteorFalls_B1F_2R_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {30, 35, SPECIES_WHISCASH}, - {35, 40, SPECIES_WHISCASH}, - {40, 45, SPECIES_WHISCASH}, -}; -const struct WildPokemonInfo MeteorFalls_B1F_2R_FishingMonsInfo = {30, MeteorFalls_B1F_2R_FishingMons}; - -const struct WildPokemon RusturfTunnel_LandMons [] = -{ - {6, 6, SPECIES_WHISMUR}, - {7, 7, SPECIES_WHISMUR}, - {6, 6, SPECIES_WHISMUR}, - {6, 6, SPECIES_WHISMUR}, - {7, 7, SPECIES_WHISMUR}, - {7, 7, SPECIES_WHISMUR}, - {5, 5, SPECIES_WHISMUR}, - {8, 8, SPECIES_WHISMUR}, - {5, 5, SPECIES_WHISMUR}, - {8, 8, SPECIES_WHISMUR}, - {5, 5, SPECIES_WHISMUR}, - {8, 8, SPECIES_WHISMUR}, -}; -const struct WildPokemonInfo RusturfTunnel_LandMonsInfo = {10, RusturfTunnel_LandMons}; - -const struct WildPokemon GraniteCave_1F_LandMons [] = -{ - {7, 7, SPECIES_ZUBAT}, - {8, 8, SPECIES_MAKUHITA}, - {7, 7, SPECIES_MAKUHITA}, - {8, 8, SPECIES_ZUBAT}, - {9, 9, SPECIES_MAKUHITA}, - {8, 8, SPECIES_ABRA}, - {10, 10, SPECIES_MAKUHITA}, - {6, 6, SPECIES_MAKUHITA}, - {7, 7, SPECIES_GEODUDE}, - {8, 8, SPECIES_GEODUDE}, - {6, 6, SPECIES_GEODUDE}, - {9, 9, SPECIES_GEODUDE}, -}; -const struct WildPokemonInfo GraniteCave_1F_LandMonsInfo = {10, GraniteCave_1F_LandMons}; - -const struct WildPokemon GraniteCave_B1F_LandMons [] = -{ - {9, 9, SPECIES_ZUBAT}, - {10, 10, SPECIES_ARON}, - {9, 9, SPECIES_ARON}, - {11, 11, SPECIES_ARON}, - {10, 10, SPECIES_ZUBAT}, - {9, 9, SPECIES_ABRA}, - {10, 10, SPECIES_MAKUHITA}, - {11, 11, SPECIES_MAKUHITA}, -#ifdef SAPPHIRE - {10, 10, SPECIES_SABLEYE}, - {10, 10, SPECIES_SABLEYE}, - {9, 9, SPECIES_SABLEYE}, - {11, 11, SPECIES_SABLEYE}, -#else - {10, 10, SPECIES_MAWILE}, - {10, 10, SPECIES_MAWILE}, - {9, 9, SPECIES_MAWILE}, - {11, 11, SPECIES_MAWILE}, -#endif -}; -const struct WildPokemonInfo GraniteCave_B1F_LandMonsInfo = {10, GraniteCave_B1F_LandMons}; - -const struct WildPokemon GraniteCave_B2F_LandMons [] = -{ - {10, 10, SPECIES_ZUBAT}, - {11, 11, SPECIES_ARON}, - {10, 10, SPECIES_ARON}, - {11, 11, SPECIES_ZUBAT}, - {12, 12, SPECIES_ARON}, - {10, 10, SPECIES_ABRA}, -#ifdef SAPPHIRE - {10, 10, SPECIES_SABLEYE}, - {11, 11, SPECIES_SABLEYE}, - {12, 12, SPECIES_SABLEYE}, - {10, 10, SPECIES_SABLEYE}, - {12, 12, SPECIES_SABLEYE}, - {10, 10, SPECIES_SABLEYE}, -#else - {10, 10, SPECIES_MAWILE}, - {11, 11, SPECIES_MAWILE}, - {12, 12, SPECIES_MAWILE}, - {10, 10, SPECIES_MAWILE}, - {12, 12, SPECIES_MAWILE}, - {10, 10, SPECIES_MAWILE}, -#endif -}; -const struct WildPokemonInfo GraniteCave_B2F_LandMonsInfo = {10, GraniteCave_B2F_LandMons}; - -const struct WildPokemon GraniteCave_B2F_RockSmashMons [] = -{ - {10, 15, SPECIES_GEODUDE}, - {10, 20, SPECIES_NOSEPASS}, - {5, 10, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, -}; -const struct WildPokemonInfo GraniteCave_B2F_RockSmashMonsInfo = {20, GraniteCave_B2F_RockSmashMons}; - -const struct WildPokemon GraniteCave_StevensRoom_LandMons [] = -{ - {7, 7, SPECIES_ZUBAT}, - {8, 8, SPECIES_MAKUHITA}, - {7, 7, SPECIES_MAKUHITA}, - {8, 8, SPECIES_ZUBAT}, - {9, 9, SPECIES_MAKUHITA}, - {8, 8, SPECIES_ABRA}, - {10, 10, SPECIES_MAKUHITA}, - {6, 6, SPECIES_MAKUHITA}, - {7, 7, SPECIES_ARON}, - {8, 8, SPECIES_ARON}, - {7, 7, SPECIES_ARON}, - {8, 8, SPECIES_ARON}, -}; -const struct WildPokemonInfo GraniteCave_StevensRoom_LandMonsInfo = {10, GraniteCave_StevensRoom_LandMons}; - -const struct WildPokemon PetalburgWoods_LandMons [] = -{ - {5, 5, SPECIES_ZIGZAGOON}, - {5, 5, SPECIES_WURMPLE}, - {5, 5, SPECIES_SHROOMISH}, - {6, 6, SPECIES_ZIGZAGOON}, - {5, 5, SPECIES_SILCOON}, - {5, 5, SPECIES_CASCOON}, - {6, 6, SPECIES_WURMPLE}, - {6, 6, SPECIES_SHROOMISH}, - {5, 5, SPECIES_TAILLOW}, - {5, 5, SPECIES_SLAKOTH}, - {6, 6, SPECIES_TAILLOW}, - {6, 6, SPECIES_SLAKOTH}, -}; -const struct WildPokemonInfo PetalburgWoods_LandMonsInfo = {20, PetalburgWoods_LandMons}; - -//Jagged Pass Pokemon are 2 levels higher on Sapphire -#ifdef SAPPHIRE -#define JAGGED_PASS_LEVEL_DIFF 2 -#else -#define JAGGED_PASS_LEVEL_DIFF 0 -#endif - -const struct WildPokemon JaggedPass_LandMons [] = -{ - {19 + JAGGED_PASS_LEVEL_DIFF, 19 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, - {19 + JAGGED_PASS_LEVEL_DIFF, 19 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, - {19 + JAGGED_PASS_LEVEL_DIFF, 19 + JAGGED_PASS_LEVEL_DIFF, SPECIES_MACHOP}, - {18 + JAGGED_PASS_LEVEL_DIFF, 18 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, - {18 + JAGGED_PASS_LEVEL_DIFF, 18 + JAGGED_PASS_LEVEL_DIFF, SPECIES_SPOINK}, - {18 + JAGGED_PASS_LEVEL_DIFF, 18 + JAGGED_PASS_LEVEL_DIFF, SPECIES_MACHOP}, - {19 + JAGGED_PASS_LEVEL_DIFF, 19 + JAGGED_PASS_LEVEL_DIFF, SPECIES_SPOINK}, - {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_MACHOP}, - {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, - {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_SPOINK}, - {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, - {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_SPOINK}, -}; -const struct WildPokemonInfo JaggedPass_LandMonsInfo = {20, JaggedPass_LandMons}; - -const struct WildPokemon FieryPath_LandMons [] = -{ - {15, 15, SPECIES_NUMEL}, -#ifdef SAPPHIRE - {15, 15, SPECIES_GRIMER}, -#else - {15, 15, SPECIES_KOFFING}, -#endif - {16, 16, SPECIES_NUMEL}, - {15, 15, SPECIES_MACHOP}, - {15, 15, SPECIES_TORKOAL}, - {15, 15, SPECIES_SLUGMA}, -#ifdef SAPPHIRE - {16, 16, SPECIES_GRIMER}, -#else - {16, 16, SPECIES_KOFFING}, -#endif - {16, 16, SPECIES_MACHOP}, - {14, 14, SPECIES_TORKOAL}, - {16, 16, SPECIES_TORKOAL}, -#ifdef SAPPHIRE - {14, 14, SPECIES_KOFFING}, - {14, 14, SPECIES_KOFFING}, -#else - {14, 14, SPECIES_GRIMER}, - {14, 14, SPECIES_GRIMER}, -#endif -}; -const struct WildPokemonInfo FieryPath_LandMonsInfo = {10, FieryPath_LandMons}; - -const struct WildPokemon MtPyre_1F_LandMons [] = -{ -#ifdef SAPPHIRE - {27, 27, SPECIES_SHUPPET}, - {28, 28, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {23, 23, SPECIES_SHUPPET}, - {22, 22, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, -#else - {27, 27, SPECIES_DUSKULL}, - {28, 28, SPECIES_DUSKULL}, - {26, 26, SPECIES_DUSKULL}, - {25, 25, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, - {24, 24, SPECIES_DUSKULL}, - {23, 23, SPECIES_DUSKULL}, - {22, 22, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, - {24, 24, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, - {24, 24, SPECIES_DUSKULL}, -#endif -}; -const struct WildPokemonInfo MtPyre_1F_LandMonsInfo = {10, MtPyre_1F_LandMons}; - -const struct WildPokemon MtPyre_2F_LandMons [] = -{ -#ifdef SAPPHIRE - {27, 27, SPECIES_SHUPPET}, - {28, 28, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {23, 23, SPECIES_SHUPPET}, - {22, 22, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, -#else - {27, 27, SPECIES_DUSKULL}, - {28, 28, SPECIES_DUSKULL}, - {26, 26, SPECIES_DUSKULL}, - {25, 25, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, - {24, 24, SPECIES_DUSKULL}, - {23, 23, SPECIES_DUSKULL}, - {22, 22, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, - {24, 24, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, - {24, 24, SPECIES_DUSKULL}, -#endif -}; -const struct WildPokemonInfo MtPyre_2F_LandMonsInfo = {10, MtPyre_2F_LandMons}; - -const struct WildPokemon MtPyre_3F_LandMons [] = -{ -#ifdef SAPPHIRE - {27, 27, SPECIES_SHUPPET}, - {28, 28, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {23, 23, SPECIES_SHUPPET}, - {22, 22, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, -#else - {27, 27, SPECIES_DUSKULL}, - {28, 28, SPECIES_DUSKULL}, - {26, 26, SPECIES_DUSKULL}, - {25, 25, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, - {24, 24, SPECIES_DUSKULL}, - {23, 23, SPECIES_DUSKULL}, - {22, 22, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, - {24, 24, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, - {24, 24, SPECIES_DUSKULL}, -#endif -}; -const struct WildPokemonInfo MtPyre_3F_LandMonsInfo = {10, MtPyre_3F_LandMons}; - -const struct WildPokemon MtPyre_4F_LandMons [] = -{ -#ifdef SAPPHIRE - {27, 27, SPECIES_SHUPPET}, - {28, 28, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {23, 23, SPECIES_SHUPPET}, - {22, 22, SPECIES_SHUPPET}, - {27, 27, SPECIES_DUSKULL}, - {27, 27, SPECIES_DUSKULL}, - {25, 25, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, -#else - {27, 27, SPECIES_DUSKULL}, - {28, 28, SPECIES_DUSKULL}, - {26, 26, SPECIES_DUSKULL}, - {25, 25, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, - {24, 24, SPECIES_DUSKULL}, - {23, 23, SPECIES_DUSKULL}, - {22, 22, SPECIES_DUSKULL}, - {27, 27, SPECIES_SHUPPET}, - {27, 27, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, -#endif -}; -const struct WildPokemonInfo MtPyre_4F_LandMonsInfo = {10, MtPyre_4F_LandMons}; - -const struct WildPokemon MtPyre_5F_LandMons [] = -{ -#ifdef SAPPHIRE - {27, 27, SPECIES_SHUPPET}, - {28, 28, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {23, 23, SPECIES_SHUPPET}, - {22, 22, SPECIES_SHUPPET}, - {27, 27, SPECIES_DUSKULL}, - {27, 27, SPECIES_DUSKULL}, - {25, 25, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, -#else - {27, 27, SPECIES_DUSKULL}, - {28, 28, SPECIES_DUSKULL}, - {26, 26, SPECIES_DUSKULL}, - {25, 25, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, - {24, 24, SPECIES_DUSKULL}, - {23, 23, SPECIES_DUSKULL}, - {22, 22, SPECIES_DUSKULL}, - {27, 27, SPECIES_SHUPPET}, - {27, 27, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, -#endif -}; -const struct WildPokemonInfo MtPyre_5F_LandMonsInfo = {10, MtPyre_5F_LandMons}; - -const struct WildPokemon MtPyre_6F_LandMons [] = -{ -#ifdef SAPPHIRE - {27, 27, SPECIES_SHUPPET}, - {28, 28, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {23, 23, SPECIES_SHUPPET}, - {22, 22, SPECIES_SHUPPET}, - {27, 27, SPECIES_DUSKULL}, - {27, 27, SPECIES_DUSKULL}, - {25, 25, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, -#else - {27, 27, SPECIES_DUSKULL}, - {28, 28, SPECIES_DUSKULL}, - {26, 26, SPECIES_DUSKULL}, - {25, 25, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, - {24, 24, SPECIES_DUSKULL}, - {23, 23, SPECIES_DUSKULL}, - {22, 22, SPECIES_DUSKULL}, - {27, 27, SPECIES_SHUPPET}, - {27, 27, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, -#endif -}; -const struct WildPokemonInfo MtPyre_6F_LandMonsInfo = {10, MtPyre_6F_LandMons}; - -const struct WildPokemon MtPyre_Exterior_LandMons [] = -{ -#ifdef SAPPHIRE - {27, 27, SPECIES_SHUPPET}, -#else - {27, 27, SPECIES_DUSKULL}, -#endif - {27, 27, SPECIES_MEDITITE}, -#ifdef SAPPHIRE - {28, 28, SPECIES_SHUPPET}, -#else - {28, 28, SPECIES_DUSKULL}, -#endif - {29, 29, SPECIES_MEDITITE}, -#ifdef SAPPHIRE - {29, 29, SPECIES_SHUPPET}, -#else - {29, 29, SPECIES_DUSKULL}, -#endif - {27, 27, SPECIES_VULPIX}, - {29, 29, SPECIES_VULPIX}, - {25, 25, SPECIES_VULPIX}, - {27, 27, SPECIES_WINGULL}, - {27, 27, SPECIES_WINGULL}, - {26, 26, SPECIES_WINGULL}, - {28, 28, SPECIES_WINGULL}, -}; -const struct WildPokemonInfo MtPyre_Exterior_LandMonsInfo = {10, MtPyre_Exterior_LandMons}; - -const struct WildPokemon MtPyre_Summit_LandMons [] = -{ -#ifdef SAPPHIRE - {28, 28, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {27, 27, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {30, 30, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {28, 28, SPECIES_DUSKULL}, - {26, 26, SPECIES_DUSKULL}, - {30, 30, SPECIES_DUSKULL}, -#else - {28, 28, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, - {27, 27, SPECIES_DUSKULL}, - {26, 26, SPECIES_DUSKULL}, - {30, 30, SPECIES_DUSKULL}, - {25, 25, SPECIES_DUSKULL}, - {24, 24, SPECIES_DUSKULL}, - {28, 28, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {30, 30, SPECIES_SHUPPET}, -#endif - {28, 28, SPECIES_CHIMECHO}, - {28, 28, SPECIES_CHIMECHO}, -}; -const struct WildPokemonInfo MtPyre_Summit_LandMonsInfo = {10, MtPyre_Summit_LandMons}; - -const struct WildPokemon SeafloorCavern_Entrance_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_ZUBAT}, - {30, 35, SPECIES_ZUBAT}, - {30, 35, SPECIES_GOLBAT}, - {30, 35, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo SeafloorCavern_Entrance_WaterMonsInfo = {4, SeafloorCavern_Entrance_WaterMons}; - -const struct WildPokemon SeafloorCavern_Entrance_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo SeafloorCavern_Entrance_FishingMonsInfo = {10, SeafloorCavern_Entrance_FishingMons}; - -const struct WildPokemon SeafloorCavern_Room1_LandMons [] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo SeafloorCavern_Room1_LandMonsInfo = {4, SeafloorCavern_Room1_LandMons}; - -const struct WildPokemon SeafloorCavern_Room2_LandMons [] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo SeafloorCavern_Room2_LandMonsInfo = {4, SeafloorCavern_Room2_LandMons}; - -const struct WildPokemon SeafloorCavern_Room3_LandMons [] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo SeafloorCavern_Room3_LandMonsInfo = {4, SeafloorCavern_Room3_LandMons}; - -const struct WildPokemon SeafloorCavern_Room4_LandMons [] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo SeafloorCavern_Room4_LandMonsInfo = {4, SeafloorCavern_Room4_LandMons}; - -const struct WildPokemon SeafloorCavern_Room5_LandMons [] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo SeafloorCavern_Room5_LandMonsInfo = {4, SeafloorCavern_Room5_LandMons}; - -const struct WildPokemon SeafloorCavern_Room6_LandMons [] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo SeafloorCavern_Room6_LandMonsInfo = {4, SeafloorCavern_Room6_LandMons}; - -const struct WildPokemon SeafloorCavern_Room6_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_ZUBAT}, - {30, 35, SPECIES_ZUBAT}, - {30, 35, SPECIES_GOLBAT}, - {30, 35, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo SeafloorCavern_Room6_WaterMonsInfo = {4, SeafloorCavern_Room6_WaterMons}; - -const struct WildPokemon SeafloorCavern_Room6_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo SeafloorCavern_Room6_FishingMonsInfo = {10, SeafloorCavern_Room6_FishingMons}; - -const struct WildPokemon SeafloorCavern_Room7_LandMons [] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo SeafloorCavern_Room7_LandMonsInfo = {4, SeafloorCavern_Room7_LandMons}; - -const struct WildPokemon SeafloorCavern_Room7_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_ZUBAT}, - {30, 35, SPECIES_ZUBAT}, - {30, 35, SPECIES_GOLBAT}, - {30, 35, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo SeafloorCavern_Room7_WaterMonsInfo = {4, SeafloorCavern_Room7_WaterMons}; - -const struct WildPokemon SeafloorCavern_Room7_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo SeafloorCavern_Room7_FishingMonsInfo = {10, SeafloorCavern_Room7_FishingMons}; - -const struct WildPokemon SeafloorCavern_Room8_LandMons [] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo SeafloorCavern_Room8_LandMonsInfo = {4, SeafloorCavern_Room8_LandMons}; - -const struct WildPokemon CaveOfOrigin_Entrance_LandMons [] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo CaveOfOrigin_Entrance_LandMonsInfo = {4, CaveOfOrigin_Entrance_LandMons}; - -const struct WildPokemon CaveOfOrigin_1F_LandMons [] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, -#ifdef SAPPHIRE - {30, 30, SPECIES_SABLEYE}, - {32, 32, SPECIES_SABLEYE}, - {34, 34, SPECIES_SABLEYE}, -#else - {30, 30, SPECIES_MAWILE}, - {32, 32, SPECIES_MAWILE}, - {34, 34, SPECIES_MAWILE}, -#endif - {33, 33, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo CaveOfOrigin_1F_LandMonsInfo = {4, CaveOfOrigin_1F_LandMons}; - -const struct WildPokemon CaveOfOrigin_B1F_LandMons [] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, -#ifdef SAPPHIRE - {30, 30, SPECIES_SABLEYE}, - {32, 32, SPECIES_SABLEYE}, - {34, 34, SPECIES_SABLEYE}, -#else - {30, 30, SPECIES_MAWILE}, - {32, 32, SPECIES_MAWILE}, - {34, 34, SPECIES_MAWILE}, -#endif - {33, 33, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo CaveOfOrigin_B1F_LandMonsInfo = {4, CaveOfOrigin_B1F_LandMons}; - -const struct WildPokemon CaveOfOrigin_B2F_LandMons [] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, -#ifdef SAPPHIRE - {30, 30, SPECIES_SABLEYE}, - {32, 32, SPECIES_SABLEYE}, - {34, 34, SPECIES_SABLEYE}, -#else - {30, 30, SPECIES_MAWILE}, - {32, 32, SPECIES_MAWILE}, - {34, 34, SPECIES_MAWILE}, -#endif - {33, 33, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo CaveOfOrigin_B2F_LandMonsInfo = {4, CaveOfOrigin_B2F_LandMons}; - -const struct WildPokemon CaveOfOrigin_B3F_LandMons [] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, -#ifdef SAPPHIRE - {30, 30, SPECIES_SABLEYE}, - {32, 32, SPECIES_SABLEYE}, - {34, 34, SPECIES_SABLEYE}, -#else - {30, 30, SPECIES_MAWILE}, - {32, 32, SPECIES_MAWILE}, - {34, 34, SPECIES_MAWILE}, -#endif - {33, 33, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo CaveOfOrigin_B3F_LandMonsInfo = {4, CaveOfOrigin_B3F_LandMons}; - -const struct WildPokemon VictoryRoad_1F_LandMons [] = -{ - {40, 40, SPECIES_GOLBAT}, - {40, 40, SPECIES_HARIYAMA}, - {40, 40, SPECIES_LAIRON}, - {40, 40, SPECIES_LOUDRED}, - {36, 36, SPECIES_ZUBAT}, - {36, 36, SPECIES_MAKUHITA}, - {38, 38, SPECIES_GOLBAT}, - {38, 38, SPECIES_HARIYAMA}, - {36, 36, SPECIES_ARON}, - {36, 36, SPECIES_WHISMUR}, - {36, 36, SPECIES_ARON}, - {36, 36, SPECIES_WHISMUR}, -}; -const struct WildPokemonInfo VictoryRoad_1F_LandMonsInfo = {10, VictoryRoad_1F_LandMons}; - -const struct WildPokemon VictoryRoad_B1F_LandMons [] = -{ - {40, 40, SPECIES_GOLBAT}, - {40, 40, SPECIES_HARIYAMA}, - {40, 40, SPECIES_LAIRON}, - {40, 40, SPECIES_MEDICHAM}, - {38, 38, SPECIES_GOLBAT}, - {38, 38, SPECIES_HARIYAMA}, - {42, 42, SPECIES_GOLBAT}, - {42, 42, SPECIES_HARIYAMA}, - {42, 42, SPECIES_LAIRON}, - {38, 38, SPECIES_MEDITITE}, - {42, 42, SPECIES_LAIRON}, - {38, 38, SPECIES_MEDITITE}, -}; -const struct WildPokemonInfo VictoryRoad_B1F_LandMonsInfo = {10, VictoryRoad_B1F_LandMons}; - -const struct WildPokemon VictoryRoad_B1F_RockSmashMons [] = -{ - {30, 40, SPECIES_GRAVELER}, - {30, 40, SPECIES_GEODUDE}, - {35, 40, SPECIES_GRAVELER}, - {35, 40, SPECIES_GRAVELER}, - {35, 40, SPECIES_GRAVELER}, -}; -const struct WildPokemonInfo VictoryRoad_B1F_RockSmashMonsInfo = {20, VictoryRoad_B1F_RockSmashMons}; - -const struct WildPokemon VictoryRoad_B2F_LandMons [] = -{ - {40, 40, SPECIES_GOLBAT}, -#ifdef SAPPHIRE - {40, 40, SPECIES_SABLEYE}, -#else - {40, 40, SPECIES_MAWILE}, -#endif - {40, 40, SPECIES_LAIRON}, - {40, 40, SPECIES_MEDICHAM}, - {42, 42, SPECIES_GOLBAT}, -#ifdef SAPPHIRE - {42, 42, SPECIES_SABLEYE}, -#else - {42, 42, SPECIES_MAWILE}, -#endif - {44, 44, SPECIES_GOLBAT}, -#ifdef SAPPHIRE - {44, 44, SPECIES_SABLEYE}, -#else - {44, 44, SPECIES_MAWILE}, -#endif - {42, 42, SPECIES_LAIRON}, - {42, 42, SPECIES_MEDICHAM}, - {44, 44, SPECIES_LAIRON}, - {44, 44, SPECIES_MEDICHAM}, -}; -const struct WildPokemonInfo VictoryRoad_B2F_LandMonsInfo = {10, VictoryRoad_B2F_LandMons}; - -const struct WildPokemon VictoryRoad_B2F_WaterMons [] = -{ - {30, 35, SPECIES_GOLBAT}, - {25, 30, SPECIES_GOLBAT}, - {35, 40, SPECIES_GOLBAT}, - {35, 40, SPECIES_GOLBAT}, - {35, 40, SPECIES_GOLBAT}, -}; -const struct WildPokemonInfo VictoryRoad_B2F_WaterMonsInfo = {4, VictoryRoad_B2F_WaterMons}; - -const struct WildPokemon VictoryRoad_B2F_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {30, 35, SPECIES_WHISCASH}, - {35, 40, SPECIES_WHISCASH}, - {40, 45, SPECIES_WHISCASH}, -}; -const struct WildPokemonInfo VictoryRoad_B2F_FishingMonsInfo = {30, VictoryRoad_B2F_FishingMons}; - -const struct WildPokemon ShoalCave_LowTideEntranceRoom_LandMons [] = -{ - {26, 26, SPECIES_ZUBAT}, - {26, 26, SPECIES_SPHEAL}, - {28, 28, SPECIES_ZUBAT}, - {28, 28, SPECIES_SPHEAL}, - {30, 30, SPECIES_ZUBAT}, - {30, 30, SPECIES_SPHEAL}, - {32, 32, SPECIES_ZUBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, -}; -const struct WildPokemonInfo ShoalCave_LowTideEntranceRoom_LandMonsInfo = {10, ShoalCave_LowTideEntranceRoom_LandMons}; - -const struct WildPokemon ShoalCave_LowTideEntranceRoom_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_ZUBAT}, - {25, 30, SPECIES_SPHEAL}, - {25, 30, SPECIES_SPHEAL}, - {25, 35, SPECIES_SPHEAL}, -}; -const struct WildPokemonInfo ShoalCave_LowTideEntranceRoom_WaterMonsInfo = {4, ShoalCave_LowTideEntranceRoom_WaterMons}; - -const struct WildPokemon ShoalCave_LowTideEntranceRoom_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo ShoalCave_LowTideEntranceRoom_FishingMonsInfo = {10, ShoalCave_LowTideEntranceRoom_FishingMons}; - -const struct WildPokemon ShoalCave_LowTideInnerRoom_LandMons [] = -{ - {26, 26, SPECIES_ZUBAT}, - {26, 26, SPECIES_SPHEAL}, - {28, 28, SPECIES_ZUBAT}, - {28, 28, SPECIES_SPHEAL}, - {30, 30, SPECIES_ZUBAT}, - {30, 30, SPECIES_SPHEAL}, - {32, 32, SPECIES_ZUBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, -}; -const struct WildPokemonInfo ShoalCave_LowTideInnerRoom_LandMonsInfo = {10, ShoalCave_LowTideInnerRoom_LandMons}; - -const struct WildPokemon ShoalCave_LowTideInnerRoom_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_ZUBAT}, - {25, 30, SPECIES_SPHEAL}, - {25, 30, SPECIES_SPHEAL}, - {25, 35, SPECIES_SPHEAL}, -}; -const struct WildPokemonInfo ShoalCave_LowTideInnerRoom_WaterMonsInfo = {4, ShoalCave_LowTideInnerRoom_WaterMons}; - -const struct WildPokemon ShoalCave_LowTideInnerRoom_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo ShoalCave_LowTideInnerRoom_FishingMonsInfo = {10, ShoalCave_LowTideInnerRoom_FishingMons}; - -const struct WildPokemon ShoalCave_LowTideStairsRoom_LandMons [] = -{ - {26, 26, SPECIES_ZUBAT}, - {26, 26, SPECIES_SPHEAL}, - {28, 28, SPECIES_ZUBAT}, - {28, 28, SPECIES_SPHEAL}, - {30, 30, SPECIES_ZUBAT}, - {30, 30, SPECIES_SPHEAL}, - {32, 32, SPECIES_ZUBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, -}; -const struct WildPokemonInfo ShoalCave_LowTideStairsRoom_LandMonsInfo = {10, ShoalCave_LowTideStairsRoom_LandMons}; - -const struct WildPokemon ShoalCave_LowTideLowerRoom_LandMons [] = -{ - {26, 26, SPECIES_ZUBAT}, - {26, 26, SPECIES_SPHEAL}, - {28, 28, SPECIES_ZUBAT}, - {28, 28, SPECIES_SPHEAL}, - {30, 30, SPECIES_ZUBAT}, - {30, 30, SPECIES_SPHEAL}, - {32, 32, SPECIES_ZUBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, -}; -const struct WildPokemonInfo ShoalCave_LowTideLowerRoom_LandMonsInfo = {10, ShoalCave_LowTideLowerRoom_LandMons}; - -const struct WildPokemon ShoalCave_LowTideIceRoom_LandMons [] = -{ - {26, 26, SPECIES_ZUBAT}, - {26, 26, SPECIES_SPHEAL}, - {28, 28, SPECIES_ZUBAT}, - {28, 28, SPECIES_SPHEAL}, - {30, 30, SPECIES_ZUBAT}, - {30, 30, SPECIES_SPHEAL}, - {26, 26, SPECIES_SNORUNT}, - {32, 32, SPECIES_SPHEAL}, - {30, 30, SPECIES_GOLBAT}, - {28, 28, SPECIES_SNORUNT}, - {32, 32, SPECIES_GOLBAT}, - {30, 30, SPECIES_SNORUNT}, -}; -const struct WildPokemonInfo ShoalCave_LowTideIceRoom_LandMonsInfo = {10, ShoalCave_LowTideIceRoom_LandMons}; - -const struct WildPokemon NewMauville_Entrance_LandMons [] = -{ - {24, 24, SPECIES_VOLTORB}, - {24, 24, SPECIES_MAGNEMITE}, - {25, 25, SPECIES_VOLTORB}, - {25, 25, SPECIES_MAGNEMITE}, - {23, 23, SPECIES_VOLTORB}, - {23, 23, SPECIES_MAGNEMITE}, - {26, 26, SPECIES_VOLTORB}, - {26, 26, SPECIES_MAGNEMITE}, - {22, 22, SPECIES_VOLTORB}, - {22, 22, SPECIES_MAGNEMITE}, - {22, 22, SPECIES_VOLTORB}, - {22, 22, SPECIES_MAGNEMITE}, -}; -const struct WildPokemonInfo NewMauville_Entrance_LandMonsInfo = {10, NewMauville_Entrance_LandMons}; - -const struct WildPokemon NewMauville_Inside_LandMons [] = -{ - {24, 24, SPECIES_VOLTORB}, - {24, 24, SPECIES_MAGNEMITE}, - {25, 25, SPECIES_VOLTORB}, - {25, 25, SPECIES_MAGNEMITE}, - {23, 23, SPECIES_VOLTORB}, - {23, 23, SPECIES_MAGNEMITE}, - {26, 26, SPECIES_VOLTORB}, - {26, 26, SPECIES_MAGNEMITE}, - {22, 22, SPECIES_VOLTORB}, - {22, 22, SPECIES_MAGNEMITE}, - {26, 26, SPECIES_ELECTRODE}, - {26, 26, SPECIES_MAGNETON}, -}; -const struct WildPokemonInfo NewMauville_Inside_LandMonsInfo = {10, NewMauville_Inside_LandMons}; - -const struct WildPokemon AbandonedShip_Rooms_B1F_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_TENTACOOL}, - {30, 35, SPECIES_TENTACRUEL}, -}; -const struct WildPokemonInfo AbandonedShip_Rooms_B1F_WaterMonsInfo = {4, AbandonedShip_Rooms_B1F_WaterMons}; - -const struct WildPokemon AbandonedShip_Rooms_B1F_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_TENTACOOL}, - {25, 30, SPECIES_TENTACOOL}, - {30, 35, SPECIES_TENTACOOL}, - {30, 35, SPECIES_TENTACRUEL}, - {25, 30, SPECIES_TENTACRUEL}, - {20, 25, SPECIES_TENTACRUEL}, -}; -const struct WildPokemonInfo AbandonedShip_Rooms_B1F_FishingMonsInfo = {20, AbandonedShip_Rooms_B1F_FishingMons}; - -const struct WildPokemon AbandonedShip_HiddenFloorCorridors_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_TENTACOOL}, - {30, 35, SPECIES_TENTACRUEL}, -}; -const struct WildPokemonInfo AbandonedShip_HiddenFloorCorridors_WaterMonsInfo = {4, AbandonedShip_HiddenFloorCorridors_WaterMons}; - -const struct WildPokemon AbandonedShip_HiddenFloorCorridors_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_TENTACOOL}, - {25, 30, SPECIES_TENTACOOL}, - {30, 35, SPECIES_TENTACOOL}, - {30, 35, SPECIES_TENTACRUEL}, - {25, 30, SPECIES_TENTACRUEL}, - {20, 25, SPECIES_TENTACRUEL}, -}; -const struct WildPokemonInfo AbandonedShip_HiddenFloorCorridors_FishingMonsInfo = {20, AbandonedShip_HiddenFloorCorridors_FishingMons}; - -const struct WildPokemon SkyPillar_1F_LandMons [] = -{ -#ifdef SAPPHIRE - {48, 48, SPECIES_SABLEYE}, -#else - {48, 48, SPECIES_MAWILE}, -#endif - {48, 48, SPECIES_GOLBAT}, - {50, 50, SPECIES_GOLBAT}, -#ifdef SAPPHIRE - {50, 50, SPECIES_SABLEYE}, -#else - {50, 50, SPECIES_MAWILE}, -#endif - {48, 48, SPECIES_CLAYDOL}, -#ifdef SAPPHIRE - {48, 48, SPECIES_BANETTE}, - {50, 50, SPECIES_BANETTE}, -#else - {48, 48, SPECIES_DUSCLOPS}, - {50, 50, SPECIES_DUSCLOPS}, -#endif - {49, 49, SPECIES_CLAYDOL}, - {47, 47, SPECIES_CLAYDOL}, - {50, 50, SPECIES_CLAYDOL}, - {47, 47, SPECIES_CLAYDOL}, - {50, 50, SPECIES_CLAYDOL}, -}; -const struct WildPokemonInfo SkyPillar_1F_LandMonsInfo = {10, SkyPillar_1F_LandMons}; - -const struct WildPokemon SkyPillar_3F_LandMons [] = -{ -#ifdef SAPPHIRE - {51, 51, SPECIES_SABLEYE}, -#else - {51, 51, SPECIES_MAWILE}, -#endif - {51, 51, SPECIES_GOLBAT}, - {53, 53, SPECIES_GOLBAT}, -#ifdef SAPPHIRE - {53, 53, SPECIES_SABLEYE}, -#else - {53, 53, SPECIES_MAWILE}, -#endif - {51, 51, SPECIES_CLAYDOL}, -#ifdef SAPPHIRE - {51, 51, SPECIES_BANETTE}, - {53, 53, SPECIES_BANETTE}, -#else - {51, 51, SPECIES_DUSCLOPS}, - {53, 53, SPECIES_DUSCLOPS}, -#endif - {52, 52, SPECIES_CLAYDOL}, - {50, 50, SPECIES_CLAYDOL}, - {53, 53, SPECIES_CLAYDOL}, - {50, 50, SPECIES_CLAYDOL}, - {53, 53, SPECIES_CLAYDOL}, -}; -const struct WildPokemonInfo SkyPillar_3F_LandMonsInfo = {10, SkyPillar_3F_LandMons}; - -const struct WildPokemon SkyPillar_5F_LandMons [] = -{ -#ifdef SAPPHIRE - {54, 54, SPECIES_SABLEYE}, -#else - {54, 54, SPECIES_MAWILE}, -#endif - {54, 54, SPECIES_GOLBAT}, - {56, 56, SPECIES_GOLBAT}, -#ifdef SAPPHIRE - {56, 56, SPECIES_SABLEYE}, -#else - {56, 56, SPECIES_MAWILE}, -#endif - {54, 54, SPECIES_CLAYDOL}, -#ifdef SAPPHIRE - {54, 54, SPECIES_BANETTE}, - {56, 56, SPECIES_BANETTE}, -#else - {54, 54, SPECIES_DUSCLOPS}, - {56, 56, SPECIES_DUSCLOPS}, -#endif - {55, 55, SPECIES_CLAYDOL}, - {56, 56, SPECIES_CLAYDOL}, - {57, 57, SPECIES_ALTARIA}, - {54, 54, SPECIES_ALTARIA}, - {60, 60, SPECIES_ALTARIA}, -}; -const struct WildPokemonInfo SkyPillar_5F_LandMonsInfo = {10, SkyPillar_5F_LandMons}; - -const struct WildPokemon Route101_LandMons [] = -{ - {2, 2, SPECIES_WURMPLE}, - {2, 2, SPECIES_ZIGZAGOON}, - {2, 2, SPECIES_WURMPLE}, - {3, 3, SPECIES_WURMPLE}, - {3, 3, SPECIES_ZIGZAGOON}, - {3, 3, SPECIES_ZIGZAGOON}, - {3, 3, SPECIES_WURMPLE}, - {3, 3, SPECIES_ZIGZAGOON}, - {2, 2, SPECIES_POOCHYENA}, - {2, 2, SPECIES_POOCHYENA}, - {3, 3, SPECIES_POOCHYENA}, - {3, 3, SPECIES_POOCHYENA}, -}; -const struct WildPokemonInfo Route101_LandMonsInfo = {20, Route101_LandMons}; - -const struct WildPokemon Route102_LandMons [] = -{ - {3, 3, SPECIES_ZIGZAGOON}, - {3, 3, SPECIES_WURMPLE}, - {4, 4, SPECIES_ZIGZAGOON}, - {4, 4, SPECIES_WURMPLE}, -#ifdef SAPPHIRE - {3, 3, SPECIES_LOTAD}, - {4, 4, SPECIES_LOTAD}, -#else - {3, 3, SPECIES_SEEDOT}, - {4, 4, SPECIES_SEEDOT}, -#endif - {3, 3, SPECIES_POOCHYENA}, - {3, 3, SPECIES_POOCHYENA}, - {4, 4, SPECIES_POOCHYENA}, - {4, 4, SPECIES_RALTS}, - {4, 4, SPECIES_POOCHYENA}, - {3, 3, SPECIES_SURSKIT}, -}; -const struct WildPokemonInfo Route102_LandMonsInfo = {20, Route102_LandMons}; - -const struct WildPokemon Route102_WaterMons [] = -{ - {20, 30, SPECIES_MARILL}, - {10, 20, SPECIES_MARILL}, - {30, 35, SPECIES_MARILL}, - {5, 10, SPECIES_MARILL}, - {20, 30, SPECIES_SURSKIT}, -}; -const struct WildPokemonInfo Route102_WaterMonsInfo = {4, Route102_WaterMons}; - -const struct WildPokemon Route102_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_CORPHISH}, - {25, 30, SPECIES_CORPHISH}, - {30, 35, SPECIES_CORPHISH}, - {20, 25, SPECIES_CORPHISH}, - {35, 40, SPECIES_CORPHISH}, - {40, 45, SPECIES_CORPHISH}, -}; -const struct WildPokemonInfo Route102_FishingMonsInfo = {30, Route102_FishingMons}; - -const struct WildPokemon Route103_LandMons [] = -{ - {2, 2, SPECIES_ZIGZAGOON}, - {3, 3, SPECIES_ZIGZAGOON}, - {3, 3, SPECIES_ZIGZAGOON}, - {4, 4, SPECIES_ZIGZAGOON}, - {2, 2, SPECIES_POOCHYENA}, - {3, 3, SPECIES_POOCHYENA}, - {3, 3, SPECIES_POOCHYENA}, - {4, 4, SPECIES_POOCHYENA}, - {3, 3, SPECIES_WINGULL}, - {3, 3, SPECIES_WINGULL}, - {2, 2, SPECIES_WINGULL}, - {4, 4, SPECIES_WINGULL}, -}; -const struct WildPokemonInfo Route103_LandMonsInfo = {20, Route103_LandMons}; - -const struct WildPokemon Route103_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route103_WaterMonsInfo = {4, Route103_WaterMons}; - -const struct WildPokemon Route103_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route103_FishingMonsInfo = {30, Route103_FishingMons}; - -const struct WildPokemon Route104_LandMons [] = -{ - {4, 4, SPECIES_ZIGZAGOON}, - {4, 4, SPECIES_WURMPLE}, - {5, 5, SPECIES_ZIGZAGOON}, - {5, 5, SPECIES_WURMPLE}, - {4, 4, SPECIES_ZIGZAGOON}, - {5, 5, SPECIES_ZIGZAGOON}, - {4, 4, SPECIES_TAILLOW}, - {5, 5, SPECIES_TAILLOW}, - {4, 4, SPECIES_WINGULL}, - {4, 4, SPECIES_WINGULL}, - {3, 3, SPECIES_WINGULL}, - {5, 5, SPECIES_WINGULL}, -}; -const struct WildPokemonInfo Route104_LandMonsInfo = {20, Route104_LandMons}; - -const struct WildPokemon Route104_WaterMons [] = -{ - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route104_WaterMonsInfo = {4, Route104_WaterMons}; - -const struct WildPokemon Route104_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_MAGIKARP}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_MAGIKARP}, - {25, 30, SPECIES_MAGIKARP}, - {30, 35, SPECIES_MAGIKARP}, - {20, 25, SPECIES_MAGIKARP}, - {35, 40, SPECIES_MAGIKARP}, - {40, 45, SPECIES_MAGIKARP}, -}; -const struct WildPokemonInfo Route104_FishingMonsInfo = {30, Route104_FishingMons}; - -const struct WildPokemon Route105_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route105_WaterMonsInfo = {4, Route105_WaterMons}; - -const struct WildPokemon Route105_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route105_FishingMonsInfo = {30, Route105_FishingMons}; - -const struct WildPokemon Route106_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route106_WaterMonsInfo = {4, Route106_WaterMons}; - -const struct WildPokemon Route106_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route106_FishingMonsInfo = {30, Route106_FishingMons}; - -const struct WildPokemon Route107_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route107_WaterMonsInfo = {4, Route107_WaterMons}; - -const struct WildPokemon Route107_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route107_FishingMonsInfo = {30, Route107_FishingMons}; - -const struct WildPokemon Route108_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route108_WaterMonsInfo = {4, Route108_WaterMons}; - -const struct WildPokemon Route108_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route108_FishingMonsInfo = {30, Route108_FishingMons}; - -const struct WildPokemon Route109_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route109_WaterMonsInfo = {4, Route109_WaterMons}; - -const struct WildPokemon Route109_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route109_FishingMonsInfo = {30, Route109_FishingMons}; - -const struct WildPokemon Route110_LandMons [] = -{ - {12, 12, SPECIES_ZIGZAGOON}, - {12, 12, SPECIES_ELECTRIKE}, - {12, 12, SPECIES_GULPIN}, - {13, 13, SPECIES_ELECTRIKE}, -#ifdef SAPPHIRE - {13, 13, SPECIES_PLUSLE}, -#else - {13, 13, SPECIES_MINUN}, -#endif - {13, 13, SPECIES_ODDISH}, -#ifdef SAPPHIRE - {13, 13, SPECIES_PLUSLE}, -#else - {13, 13, SPECIES_MINUN}, -#endif - {13, 13, SPECIES_GULPIN}, - {12, 12, SPECIES_WINGULL}, - {12, 12, SPECIES_WINGULL}, -#ifdef SAPPHIRE - {12, 12, SPECIES_MINUN}, - {13, 13, SPECIES_MINUN}, -#else - {12, 12, SPECIES_PLUSLE}, - {13, 13, SPECIES_PLUSLE}, -#endif -}; -const struct WildPokemonInfo Route110_LandMonsInfo = {20, Route110_LandMons}; - -const struct WildPokemon Route110_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route110_WaterMonsInfo = {4, Route110_WaterMons}; - -const struct WildPokemon Route110_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route110_FishingMonsInfo = {30, Route110_FishingMons}; - -const struct WildPokemon Route111_LandMons [] = -{ - {20, 20, SPECIES_SANDSHREW}, - {20, 20, SPECIES_TRAPINCH}, - {21, 21, SPECIES_SANDSHREW}, - {21, 21, SPECIES_TRAPINCH}, - {19, 19, SPECIES_CACNEA}, - {21, 21, SPECIES_CACNEA}, - {19, 19, SPECIES_SANDSHREW}, - {19, 19, SPECIES_TRAPINCH}, - {20, 20, SPECIES_BALTOY}, - {20, 20, SPECIES_BALTOY}, - {22, 22, SPECIES_BALTOY}, - {22, 22, SPECIES_BALTOY}, -}; -const struct WildPokemonInfo Route111_LandMonsInfo = {10, Route111_LandMons}; - -const struct WildPokemon Route111_WaterMons [] = -{ - {20, 30, SPECIES_MARILL}, - {10, 20, SPECIES_MARILL}, - {30, 35, SPECIES_MARILL}, - {5, 10, SPECIES_MARILL}, - {20, 30, SPECIES_SURSKIT}, -}; -const struct WildPokemonInfo Route111_WaterMonsInfo = {4, Route111_WaterMons}; - -const struct WildPokemon Route111_RockSmashMons [] = -{ - {10, 15, SPECIES_GEODUDE}, - {5, 10, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, -}; -const struct WildPokemonInfo Route111_RockSmashMonsInfo = {20, Route111_RockSmashMons}; - -const struct WildPokemon Route111_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {20, 25, SPECIES_BARBOACH}, - {35, 40, SPECIES_BARBOACH}, - {40, 45, SPECIES_BARBOACH}, -}; -const struct WildPokemonInfo Route111_FishingMonsInfo = {30, Route111_FishingMons}; - -const struct WildPokemon Route112_LandMons [] = -{ - {15, 15, SPECIES_NUMEL}, - {15, 15, SPECIES_NUMEL}, - {15, 15, SPECIES_MACHOP}, - {14, 14, SPECIES_NUMEL}, - {14, 14, SPECIES_NUMEL}, - {14, 14, SPECIES_MACHOP}, - {16, 16, SPECIES_NUMEL}, - {16, 16, SPECIES_MACHOP}, - {16, 16, SPECIES_NUMEL}, - {16, 16, SPECIES_NUMEL}, - {16, 16, SPECIES_NUMEL}, - {16, 16, SPECIES_NUMEL}, -}; -const struct WildPokemonInfo Route112_LandMonsInfo = {20, Route112_LandMons}; - -const struct WildPokemon Route113_LandMons [] = -{ - {15, 15, SPECIES_SPINDA}, - {15, 15, SPECIES_SPINDA}, - {15, 15, SPECIES_SANDSHREW}, - {14, 14, SPECIES_SPINDA}, - {14, 14, SPECIES_SPINDA}, - {14, 14, SPECIES_SANDSHREW}, - {16, 16, SPECIES_SPINDA}, - {16, 16, SPECIES_SANDSHREW}, - {16, 16, SPECIES_SPINDA}, - {16, 16, SPECIES_SKARMORY}, - {16, 16, SPECIES_SPINDA}, - {16, 16, SPECIES_SKARMORY}, -}; -const struct WildPokemonInfo Route113_LandMonsInfo = {20, Route113_LandMons}; - -const struct WildPokemon Route114_LandMons [] = -{ - {16, 16, SPECIES_SWABLU}, -#ifdef SAPPHIRE - {16, 16, SPECIES_LOTAD}, -#else - {16, 16, SPECIES_SEEDOT}, -#endif - {17, 17, SPECIES_SWABLU}, - {15, 15, SPECIES_SWABLU}, -#ifdef SAPPHIRE - {15, 15, SPECIES_LOTAD}, - {16, 16, SPECIES_SEVIPER}, - {16, 16, SPECIES_LOMBRE}, - {18, 18, SPECIES_LOMBRE}, - {17, 17, SPECIES_SEVIPER}, - {15, 15, SPECIES_SEVIPER}, - {17, 17, SPECIES_SEVIPER}, -#else - {15, 15, SPECIES_SEEDOT}, - {16, 16, SPECIES_ZANGOOSE}, - {16, 16, SPECIES_NUZLEAF}, - {18, 18, SPECIES_NUZLEAF}, - {17, 17, SPECIES_ZANGOOSE}, - {15, 15, SPECIES_ZANGOOSE}, - {17, 17, SPECIES_ZANGOOSE}, -#endif - {15, 15, SPECIES_SURSKIT}, -}; -const struct WildPokemonInfo Route114_LandMonsInfo = {20, Route114_LandMons}; - -const struct WildPokemon Route114_WaterMons [] = -{ - {20, 30, SPECIES_MARILL}, - {10, 20, SPECIES_MARILL}, - {30, 35, SPECIES_MARILL}, - {5, 10, SPECIES_MARILL}, - {20, 30, SPECIES_SURSKIT}, -}; -const struct WildPokemonInfo Route114_WaterMonsInfo = {4, Route114_WaterMons}; - -const struct WildPokemon Route114_RockSmashMons [] = -{ - {10, 15, SPECIES_GEODUDE}, - {5, 10, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, -}; -const struct WildPokemonInfo Route114_RockSmashMonsInfo = {20, Route114_RockSmashMons}; - -const struct WildPokemon Route114_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {20, 25, SPECIES_BARBOACH}, - {35, 40, SPECIES_BARBOACH}, - {40, 45, SPECIES_BARBOACH}, -}; -const struct WildPokemonInfo Route114_FishingMonsInfo = {30, Route114_FishingMons}; - -const struct WildPokemon Route115_LandMons [] = -{ - {23, 23, SPECIES_SWABLU}, - {23, 23, SPECIES_TAILLOW}, - {25, 25, SPECIES_SWABLU}, - {24, 24, SPECIES_TAILLOW}, - {25, 25, SPECIES_TAILLOW}, - {25, 25, SPECIES_SWELLOW}, - {24, 24, SPECIES_JIGGLYPUFF}, - {25, 25, SPECIES_JIGGLYPUFF}, - {24, 24, SPECIES_WINGULL}, - {24, 24, SPECIES_WINGULL}, - {26, 26, SPECIES_WINGULL}, - {25, 25, SPECIES_WINGULL}, -}; -const struct WildPokemonInfo Route115_LandMonsInfo = {20, Route115_LandMons}; - -const struct WildPokemon Route115_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route115_WaterMonsInfo = {4, Route115_WaterMons}; - -const struct WildPokemon Route115_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route115_FishingMonsInfo = {30, Route115_FishingMons}; - -const struct WildPokemon Route116_LandMons [] = -{ - {6, 6, SPECIES_ZIGZAGOON}, - {6, 6, SPECIES_WHISMUR}, - {6, 6, SPECIES_NINCADA}, - {7, 7, SPECIES_WHISMUR}, - {7, 7, SPECIES_NINCADA}, - {6, 6, SPECIES_TAILLOW}, - {7, 7, SPECIES_TAILLOW}, - {8, 8, SPECIES_TAILLOW}, - {7, 7, SPECIES_ZIGZAGOON}, - {8, 8, SPECIES_ZIGZAGOON}, - {7, 7, SPECIES_SKITTY}, - {8, 8, SPECIES_SKITTY}, -}; -const struct WildPokemonInfo Route116_LandMonsInfo = {20, Route116_LandMons}; - -const struct WildPokemon Route117_LandMons [] = -{ - {13, 13, SPECIES_ZIGZAGOON}, - {13, 13, SPECIES_ROSELIA}, - {14, 14, SPECIES_ZIGZAGOON}, - {14, 14, SPECIES_ROSELIA}, - {13, 13, SPECIES_MARILL}, - {13, 13, SPECIES_ODDISH}, -#ifdef SAPPHIRE - {13, 13, SPECIES_VOLBEAT}, - {13, 13, SPECIES_VOLBEAT}, - {14, 14, SPECIES_VOLBEAT}, - {14, 14, SPECIES_VOLBEAT}, - {13, 13, SPECIES_ILLUMISE}, -#else - {13, 13, SPECIES_ILLUMISE}, - {13, 13, SPECIES_ILLUMISE}, - {14, 14, SPECIES_ILLUMISE}, - {14, 14, SPECIES_ILLUMISE}, - {13, 13, SPECIES_VOLBEAT}, -#endif - {13, 13, SPECIES_SURSKIT}, -}; -const struct WildPokemonInfo Route117_LandMonsInfo = {20, Route117_LandMons}; - -const struct WildPokemon Route117_WaterMons [] = -{ - {20, 30, SPECIES_MARILL}, - {10, 20, SPECIES_MARILL}, - {30, 35, SPECIES_MARILL}, - {5, 10, SPECIES_MARILL}, - {20, 30, SPECIES_SURSKIT}, -}; -const struct WildPokemonInfo Route117_WaterMonsInfo = {4, Route117_WaterMons}; - -const struct WildPokemon Route117_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_CORPHISH}, - {25, 30, SPECIES_CORPHISH}, - {30, 35, SPECIES_CORPHISH}, - {20, 25, SPECIES_CORPHISH}, - {35, 40, SPECIES_CORPHISH}, - {40, 45, SPECIES_CORPHISH}, -}; -const struct WildPokemonInfo Route117_FishingMonsInfo = {30, Route117_FishingMons}; - -const struct WildPokemon Route118_LandMons [] = -{ - {24, 24, SPECIES_ZIGZAGOON}, - {24, 24, SPECIES_ELECTRIKE}, - {26, 26, SPECIES_ZIGZAGOON}, - {26, 26, SPECIES_ELECTRIKE}, - {26, 26, SPECIES_LINOONE}, - {26, 26, SPECIES_MANECTRIC}, - {25, 25, SPECIES_WINGULL}, - {25, 25, SPECIES_WINGULL}, - {26, 26, SPECIES_WINGULL}, - {26, 26, SPECIES_WINGULL}, - {27, 27, SPECIES_WINGULL}, - {25, 25, SPECIES_KECLEON}, -}; -const struct WildPokemonInfo Route118_LandMonsInfo = {20, Route118_LandMons}; - -const struct WildPokemon Route118_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route118_WaterMonsInfo = {4, Route118_WaterMons}; - -const struct WildPokemon Route118_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_CARVANHA}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_CARVANHA}, - {20, 25, SPECIES_CARVANHA}, - {35, 40, SPECIES_CARVANHA}, - {40, 45, SPECIES_CARVANHA}, -}; -const struct WildPokemonInfo Route118_FishingMonsInfo = {30, Route118_FishingMons}; - -const struct WildPokemon Route119_LandMons [] = -{ - {25, 25, SPECIES_ZIGZAGOON}, - {25, 25, SPECIES_LINOONE}, - {27, 27, SPECIES_ZIGZAGOON}, - {25, 25, SPECIES_ODDISH}, - {27, 27, SPECIES_LINOONE}, - {26, 26, SPECIES_ODDISH}, - {27, 27, SPECIES_ODDISH}, - {24, 24, SPECIES_ODDISH}, - {25, 25, SPECIES_TROPIUS}, - {26, 26, SPECIES_TROPIUS}, - {27, 27, SPECIES_TROPIUS}, - {25, 25, SPECIES_KECLEON}, -}; -const struct WildPokemonInfo Route119_LandMonsInfo = {15, Route119_LandMons}; - -const struct WildPokemon Route119_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route119_WaterMonsInfo = {4, Route119_WaterMons}; - -const struct WildPokemon Route119_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_CARVANHA}, - {25, 30, SPECIES_CARVANHA}, - {30, 35, SPECIES_CARVANHA}, - {20, 25, SPECIES_CARVANHA}, - {35, 40, SPECIES_CARVANHA}, - {40, 45, SPECIES_CARVANHA}, -}; -const struct WildPokemonInfo Route119_FishingMonsInfo = {30, Route119_FishingMons}; - -const struct WildPokemon Route120_LandMons [] = -{ - {25, 25, SPECIES_ZIGZAGOON}, - {25, 25, SPECIES_LINOONE}, - {27, 27, SPECIES_LINOONE}, - {25, 25, SPECIES_ODDISH}, - {25, 25, SPECIES_MARILL}, - {26, 26, SPECIES_ODDISH}, - {27, 27, SPECIES_ODDISH}, - {27, 27, SPECIES_MARILL}, - {25, 25, SPECIES_ABSOL}, - {27, 27, SPECIES_ABSOL}, - {25, 25, SPECIES_KECLEON}, - {25, 25, SPECIES_SURSKIT}, -}; -const struct WildPokemonInfo Route120_LandMonsInfo = {20, Route120_LandMons}; - -const struct WildPokemon Route120_WaterMons [] = -{ - {20, 30, SPECIES_MARILL}, - {10, 20, SPECIES_MARILL}, - {30, 35, SPECIES_MARILL}, - {5, 10, SPECIES_MARILL}, - {20, 30, SPECIES_SURSKIT}, -}; -const struct WildPokemonInfo Route120_WaterMonsInfo = {4, Route120_WaterMons}; - -const struct WildPokemon Route120_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {20, 25, SPECIES_BARBOACH}, - {35, 40, SPECIES_BARBOACH}, - {40, 45, SPECIES_BARBOACH}, -}; -const struct WildPokemonInfo Route120_FishingMonsInfo = {30, Route120_FishingMons}; - -const struct WildPokemon Route121_LandMons [] = -{ - {26, 26, SPECIES_ZIGZAGOON}, -#ifdef SAPPHIRE - {26, 26, SPECIES_SHUPPET}, -#else - {26, 26, SPECIES_DUSKULL}, -#endif - {26, 26, SPECIES_LINOONE}, -#ifdef SAPPHIRE - {28, 28, SPECIES_SHUPPET}, -#else - {28, 28, SPECIES_DUSKULL}, -#endif - {28, 28, SPECIES_LINOONE}, - {26, 26, SPECIES_ODDISH}, - {28, 28, SPECIES_ODDISH}, - {28, 28, SPECIES_GLOOM}, - {26, 26, SPECIES_WINGULL}, - {27, 27, SPECIES_WINGULL}, - {28, 28, SPECIES_WINGULL}, - {25, 25, SPECIES_KECLEON}, -}; -const struct WildPokemonInfo Route121_LandMonsInfo = {20, Route121_LandMons}; - -const struct WildPokemon Route121_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route121_WaterMonsInfo = {4, Route121_WaterMons}; - -const struct WildPokemon Route121_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route121_FishingMonsInfo = {30, Route121_FishingMons}; - -const struct WildPokemon Route122_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route122_WaterMonsInfo = {4, Route122_WaterMons}; - -const struct WildPokemon Route122_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route122_FishingMonsInfo = {30, Route122_FishingMons}; - -const struct WildPokemon Route123_LandMons [] = -{ - {26, 26, SPECIES_ZIGZAGOON}, -#ifdef SAPPHIRE - {26, 26, SPECIES_SHUPPET}, -#else - {26, 26, SPECIES_DUSKULL}, -#endif - {26, 26, SPECIES_LINOONE}, -#ifdef SAPPHIRE - {28, 28, SPECIES_SHUPPET}, -#else - {28, 28, SPECIES_DUSKULL}, -#endif - {28, 28, SPECIES_LINOONE}, - {26, 26, SPECIES_ODDISH}, - {28, 28, SPECIES_ODDISH}, - {28, 28, SPECIES_GLOOM}, - {26, 26, SPECIES_WINGULL}, - {27, 27, SPECIES_WINGULL}, - {28, 28, SPECIES_WINGULL}, - {25, 25, SPECIES_KECLEON}, -}; -const struct WildPokemonInfo Route123_LandMonsInfo = {20, Route123_LandMons}; - -const struct WildPokemon Route123_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route123_WaterMonsInfo = {4, Route123_WaterMons}; - -const struct WildPokemon Route123_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route123_FishingMonsInfo = {30, Route123_FishingMons}; - -const struct WildPokemon Route124_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route124_WaterMonsInfo = {4, Route124_WaterMons}; - -const struct WildPokemon Route124_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route124_FishingMonsInfo = {30, Route124_FishingMons}; - -const struct WildPokemon Route125_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route125_WaterMonsInfo = {4, Route125_WaterMons}; - -const struct WildPokemon Route125_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route125_FishingMonsInfo = {30, Route125_FishingMons}; - -const struct WildPokemon Route126_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route126_WaterMonsInfo = {4, Route126_WaterMons}; - -const struct WildPokemon Route126_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route126_FishingMonsInfo = {30, Route126_FishingMons}; - -const struct WildPokemon Route127_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route127_WaterMonsInfo = {4, Route127_WaterMons}; - -const struct WildPokemon Route127_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route127_FishingMonsInfo = {30, Route127_FishingMons}; - -const struct WildPokemon Route128_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route128_WaterMonsInfo = {4, Route128_WaterMons}; - -const struct WildPokemon Route128_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_LUVDISC}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_LUVDISC}, - {30, 35, SPECIES_WAILMER}, - {30, 35, SPECIES_CORSOLA}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route128_FishingMonsInfo = {30, Route128_FishingMons}; - -const struct WildPokemon Route129_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, -#ifdef SAPPHIRE - {25, 30, SPECIES_WAILORD}, -#else - {35, 40, SPECIES_WAILORD}, -#endif -}; -const struct WildPokemonInfo Route129_WaterMonsInfo = {4, Route129_WaterMons}; - -const struct WildPokemon Route129_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route129_FishingMonsInfo = {30, Route129_FishingMons}; - -const struct WildPokemon Route130_LandMons [] = -{ - {30, 30, SPECIES_WYNAUT}, - {35, 35, SPECIES_WYNAUT}, - {25, 25, SPECIES_WYNAUT}, - {40, 40, SPECIES_WYNAUT}, - {20, 20, SPECIES_WYNAUT}, - {45, 45, SPECIES_WYNAUT}, - {15, 15, SPECIES_WYNAUT}, - {50, 50, SPECIES_WYNAUT}, - {10, 10, SPECIES_WYNAUT}, - {5, 5, SPECIES_WYNAUT}, - {10, 10, SPECIES_WYNAUT}, - {5, 5, SPECIES_WYNAUT}, -}; -const struct WildPokemonInfo Route130_LandMonsInfo = {20, Route130_LandMons}; - -const struct WildPokemon Route130_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route130_WaterMonsInfo = {4, Route130_WaterMons}; - -const struct WildPokemon Route130_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route130_FishingMonsInfo = {30, Route130_FishingMons}; - -const struct WildPokemon Route131_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route131_WaterMonsInfo = {4, Route131_WaterMons}; - -const struct WildPokemon Route131_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route131_FishingMonsInfo = {30, Route131_FishingMons}; - -const struct WildPokemon Route132_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route132_WaterMonsInfo = {4, Route132_WaterMons}; - -const struct WildPokemon Route132_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_HORSEA}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route132_FishingMonsInfo = {30, Route132_FishingMons}; - -const struct WildPokemon Route133_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route133_WaterMonsInfo = {4, Route133_WaterMons}; - -const struct WildPokemon Route133_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_HORSEA}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route133_FishingMonsInfo = {30, Route133_FishingMons}; - -const struct WildPokemon Route134_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo Route134_WaterMonsInfo = {4, Route134_WaterMons}; - -const struct WildPokemon Route134_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_HORSEA}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo Route134_FishingMonsInfo = {30, Route134_FishingMons}; - -const struct WildPokemon SafariZone_Northwest_LandMons [] = -{ - {27, 27, SPECIES_RHYHORN}, - {27, 27, SPECIES_ODDISH}, - {29, 29, SPECIES_RHYHORN}, - {29, 29, SPECIES_ODDISH}, - {27, 27, SPECIES_DODUO}, - {29, 29, SPECIES_GLOOM}, - {31, 31, SPECIES_GLOOM}, - {29, 29, SPECIES_DODUO}, - {29, 29, SPECIES_DODRIO}, - {27, 27, SPECIES_PINSIR}, - {31, 31, SPECIES_DODRIO}, - {29, 29, SPECIES_PINSIR}, -}; -const struct WildPokemonInfo SafariZone_Northwest_LandMonsInfo = {25, SafariZone_Northwest_LandMons}; - -const struct WildPokemon SafariZone_Northwest_WaterMons [] = -{ - {20, 30, SPECIES_PSYDUCK}, - {20, 30, SPECIES_PSYDUCK}, - {30, 35, SPECIES_PSYDUCK}, - {30, 35, SPECIES_GOLDUCK}, - {25, 40, SPECIES_GOLDUCK}, -}; -const struct WildPokemonInfo SafariZone_Northwest_WaterMonsInfo = {9, SafariZone_Northwest_WaterMons}; - -const struct WildPokemon SafariZone_Northwest_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 25, SPECIES_GOLDEEN}, - {10, 30, SPECIES_GOLDEEN}, - {25, 30, SPECIES_GOLDEEN}, - {30, 35, SPECIES_GOLDEEN}, - {30, 35, SPECIES_SEAKING}, - {35, 40, SPECIES_SEAKING}, - {25, 30, SPECIES_SEAKING}, -}; -const struct WildPokemonInfo SafariZone_Northwest_FishingMonsInfo = {35, SafariZone_Northwest_FishingMons}; - -const struct WildPokemon SafariZone_Northeast_LandMons [] = -{ - {27, 27, SPECIES_PHANPY}, - {27, 27, SPECIES_ODDISH}, - {29, 29, SPECIES_PHANPY}, - {29, 29, SPECIES_ODDISH}, - {27, 27, SPECIES_NATU}, - {29, 29, SPECIES_GLOOM}, - {31, 31, SPECIES_GLOOM}, - {29, 29, SPECIES_NATU}, - {29, 29, SPECIES_XATU}, - {27, 27, SPECIES_HERACROSS}, - {31, 31, SPECIES_XATU}, - {29, 29, SPECIES_HERACROSS}, -}; -const struct WildPokemonInfo SafariZone_Northeast_LandMonsInfo = {25, SafariZone_Northeast_LandMons}; - -const struct WildPokemon SafariZone_Northeast_RockSmashMons [] = -{ - {10, 15, SPECIES_GEODUDE}, - {5, 10, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, - {20, 25, SPECIES_GEODUDE}, - {25, 30, SPECIES_GEODUDE}, -}; -const struct WildPokemonInfo SafariZone_Northeast_RockSmashMonsInfo = {25, SafariZone_Northeast_RockSmashMons}; - -const struct WildPokemon SafariZone_Southwest_LandMons [] = -{ - {25, 25, SPECIES_ODDISH}, - {27, 27, SPECIES_ODDISH}, - {25, 25, SPECIES_GIRAFARIG}, - {27, 27, SPECIES_GIRAFARIG}, - {25, 25, SPECIES_NATU}, -#ifdef SAPPHIRE - {27, 27, SPECIES_DODUO}, -#else - {25, 25, SPECIES_DODUO}, -#endif - {25, 25, SPECIES_GLOOM}, - {27, 27, SPECIES_WOBBUFFET}, - {25, 25, SPECIES_PIKACHU}, - {27, 27, SPECIES_WOBBUFFET}, - {27, 27, SPECIES_PIKACHU}, - {29, 29, SPECIES_WOBBUFFET}, -}; -const struct WildPokemonInfo SafariZone_Southwest_LandMonsInfo = {25, SafariZone_Southwest_LandMons}; - -const struct WildPokemon SafariZone_Southwest_WaterMons [] = -{ - {20, 30, SPECIES_PSYDUCK}, - {20, 30, SPECIES_PSYDUCK}, - {30, 35, SPECIES_PSYDUCK}, - {30, 35, SPECIES_PSYDUCK}, - {30, 35, SPECIES_PSYDUCK}, -}; -const struct WildPokemonInfo SafariZone_Southwest_WaterMonsInfo = {9, SafariZone_Southwest_WaterMons}; - -const struct WildPokemon SafariZone_Southwest_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 25, SPECIES_GOLDEEN}, - {10, 30, SPECIES_GOLDEEN}, - {25, 30, SPECIES_GOLDEEN}, - {30, 35, SPECIES_GOLDEEN}, - {30, 35, SPECIES_SEAKING}, - {35, 40, SPECIES_SEAKING}, - {25, 30, SPECIES_SEAKING}, -}; -const struct WildPokemonInfo SafariZone_Southwest_FishingMonsInfo = {35, SafariZone_Southwest_FishingMons}; - -const struct WildPokemon SafariZone_Southeast_LandMons [] = -{ - {25, 25, SPECIES_ODDISH}, - {27, 27, SPECIES_ODDISH}, - {25, 25, SPECIES_GIRAFARIG}, - {27, 27, SPECIES_GIRAFARIG}, - {25, 25, SPECIES_NATU}, - {25, 25, SPECIES_DODUO}, - {25, 25, SPECIES_GLOOM}, - {27, 27, SPECIES_WOBBUFFET}, - {25, 25, SPECIES_PIKACHU}, - {27, 27, SPECIES_WOBBUFFET}, - {27, 27, SPECIES_PIKACHU}, - {29, 29, SPECIES_WOBBUFFET}, -}; -const struct WildPokemonInfo SafariZone_Southeast_LandMonsInfo = {25, SafariZone_Southeast_LandMons}; - -const struct WildPokemon DewfordTown_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo DewfordTown_WaterMonsInfo = {4, DewfordTown_WaterMons}; - -const struct WildPokemon DewfordTown_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo DewfordTown_FishingMonsInfo = {10, DewfordTown_FishingMons}; - -const struct WildPokemon PacifidlogTown_WaterMons [] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; -const struct WildPokemonInfo PacifidlogTown_WaterMonsInfo = {4, PacifidlogTown_WaterMons}; - -const struct WildPokemon PacifidlogTown_FishingMons [] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; -const struct WildPokemonInfo PacifidlogTown_FishingMonsInfo = {10, PacifidlogTown_FishingMons}; - -const struct WildPokemon Underwater1_WaterMons [] = -{ - {20, 30, SPECIES_CLAMPERL}, - {20, 30, SPECIES_CHINCHOU}, - {30, 35, SPECIES_CLAMPERL}, - {30, 35, SPECIES_RELICANTH}, - {30, 35, SPECIES_RELICANTH}, -}; -const struct WildPokemonInfo Underwater1_WaterMonsInfo = {4, Underwater1_WaterMons}; - -const struct WildPokemon Underwater2_WaterMons [] = -{ - {20, 30, SPECIES_CLAMPERL}, - {20, 30, SPECIES_CHINCHOU}, - {30, 35, SPECIES_CLAMPERL}, - {30, 35, SPECIES_RELICANTH}, - {30, 35, SPECIES_RELICANTH}, -}; -const struct WildPokemonInfo Underwater2_WaterMonsInfo = {4, Underwater2_WaterMons}; - - -extern u16 gRoute119WaterTileData[]; -extern u16 gScriptResult; -extern struct WildPokemon gWildFeebasRoute119Data; -extern u8 Event_RepelWoreOff[]; - -EWRAM_DATA static u8 sWildEncountersDisabled = 0; -EWRAM_DATA static u32 sFeebasRngValue = 0; - -#define NUM_FEEBAS_SPOTS 6 - -static u16 FeebasRandom(void); -static void FeebasSeedRng(u16 seed); - -static bool8 RepelCheck(u8 level); -static void ApplyFluteEncounterRateMod(u32 *encRate); -static void ApplyCleanseTagEncounterRateMod(u32 *encRate); - -void DisableWildEncounters(bool8 disabled) -{ - sWildEncountersDisabled = disabled; -} - -static u16 GetRoute119WaterTileNum(s16 x, s16 y, u8 section) -{ - u16 xCur; - u16 yCur; - u16 yMin = gRoute119WaterTileData[section * 3 + 0]; - u16 yMax = gRoute119WaterTileData[section * 3 + 1]; - u16 tileNum = gRoute119WaterTileData[section * 3 + 2]; - - for (yCur = yMin; yCur <= yMax; yCur++) - { - for (xCur = 0; xCur < gMapHeader.mapData->width; xCur++) - { - if (sub_805759C(MapGridGetMetatileBehaviorAt(xCur + 7, yCur + 7)) == TRUE) - { - tileNum++; - if (x == xCur && y == yCur) - return tileNum; - } - } - } - return tileNum + 1; -} - -static bool8 CheckFeebas(void) -{ - u8 i; - u16 feebasSpots[6]; - s16 x; - s16 y; - u8 route119section = 0; - u16 waterTileNum; - - if (gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 0x22) - { - GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - x -= 7; - y -= 7; - -#ifdef NONMATCHING - if (y >= gRoute119WaterTileData[3 * 1 + 0] && y <= gRoute119WaterTileData[3 * 1 + 1]) - route119section = 1; - if (y >= gRoute119WaterTileData[3 * 2 + 0] && y <= gRoute119WaterTileData[3 * 2 + 1]) - route119section = 2; -#else - { - register u16 *arr asm("r0"); - if (y >= (arr = gRoute119WaterTileData)[3 * 1 + 0] && y <= arr[3 * 1 + 1]) - route119section = 1; - if (y >= arr[3 * 2 + 0] && y <= arr[3 * 2 + 1]) - route119section = 2; - } -#endif - - if (Random() % 100 > 49) //50% chance of encountering Feebas - return FALSE; - - FeebasSeedRng(gSaveBlock1.easyChatPairs[0].unk2); - for (i = 0; i != NUM_FEEBAS_SPOTS;) - { - feebasSpots[i] = FeebasRandom() % 447; - if (feebasSpots[i] == 0) - feebasSpots[i] = 447; - if (feebasSpots[i] < 1 || feebasSpots[i] >= 4) - i++; - } - waterTileNum = GetRoute119WaterTileNum(x, y, route119section); - for (i = 0; i < NUM_FEEBAS_SPOTS; i++) - { - if (waterTileNum == feebasSpots[i]) - return TRUE; - } - } - return FALSE; -} - -static u16 FeebasRandom(void) -{ - sFeebasRngValue = 12345 + 0x41C64E6D * sFeebasRngValue; - return sFeebasRngValue >> 16; -} - -static void FeebasSeedRng(u16 seed) -{ - sFeebasRngValue = seed; -} - -static u8 ChooseWildMonIndex_Land(void) -{ - u8 rand = Random() % 100; - - if (rand < 20) //20% chance - return 0; - if (rand >= 20 && rand < 40) //20% chance - return 1; - if (rand >= 40 && rand < 50) //10% chance - return 2; - if (rand >= 50 && rand < 60) //10% chance - return 3; - if (rand >= 60 && rand < 70) //10% chance - return 4; - if (rand >= 70 && rand < 80) //10% chance - return 5; - if (rand >= 80 && rand < 85) //5% chance - return 6; - if (rand >= 85 && rand < 90) //5% chance - return 7; - if (rand >= 90 && rand < 94) //4% chance - return 8; - if (rand >= 94 && rand < 98) //4% chance - return 9; - if (rand == 98) //1% chance - return 10; - else //1% chance - return 11; -} - -static u8 ChooseWildMonIndex_Water(void) -{ - u8 rand = Random() % 100; - - if (rand < 60) //60% chance - return 0; - if (rand >= 60 && rand < 90) //30% chance - return 1; - if (rand >= 90 && rand < 95) //5% chance - return 2; - if (rand >= 95 && rand < 99) //4% chance - return 3; - else //1% chance - return 4; -} - -enum -{ - OLD_ROD, - GOOD_ROD, - SUPER_ROD -}; - -static u8 ChooseWildMonIndex_Fishing(u8 rod) -{ - u8 wildMonIndex = 0; - u8 rand = Random() % 100; - - switch (rod) - { - case OLD_ROD: - if (rand < 70) //70% chance - wildMonIndex = 0; - else //30% chance - wildMonIndex = 1; - break; - case GOOD_ROD: - if (rand < 60) //60% chance - wildMonIndex = 2; - if (rand >= 60 && rand < 80) //20% chance - wildMonIndex = 3; - if (rand >= 80 && rand < 100) //20% chance - wildMonIndex = 4; - break; - case SUPER_ROD: - if (rand < 40) //40% chance - wildMonIndex = 5; - if (rand >= 40 && rand < 80) //40% chance - wildMonIndex = 6; - if (rand >= 80 && rand < 95) //15% chance - wildMonIndex = 7; - if (rand >= 95 && rand < 99) //4% chance - wildMonIndex = 8; - if (rand == 99) //1% chance - wildMonIndex = 9; - break; - } - return wildMonIndex; -} - -static u8 ChooseWildMonLevel(const struct WildPokemon *wildPokemon) -{ - u8 min; - u8 max; - u8 range; - u8 rand; - - //Make sure minimum level is less than maximum level - if (wildPokemon->maxLevel >= wildPokemon->minLevel) - { - min = wildPokemon->minLevel; - max = wildPokemon->maxLevel; - } - else - { - min = wildPokemon->maxLevel; - max = wildPokemon->minLevel; - } - range = max - min + 1; - rand = Random() % range; - return min + rand; -} - -static u16 GetCurrentMapWildMonHeader(void) -{ - u16 i; - - for (i = 0; gWildMonHeaders[i].mapGroup != 0xFF; i++) - { - if (gWildMonHeaders[i].mapGroup == gSaveBlock1.location.mapGroup && - gWildMonHeaders[i].mapNum == gSaveBlock1.location.mapNum) - return i; - } - return -1; -} - -static u8 PickWildMonNature(void) -{ - u8 i; - u8 j; - struct Pokeblock *safariPokeblock; - u8 natures[25]; - - if (GetSafariZoneFlag() == TRUE && Random() % 100 < 80) - { - safariPokeblock = SafariZoneGetActivePokeblock(); - if (safariPokeblock != NULL) - { - for (i = 0; i < 25; i++) - natures[i] = i; - for (i = 0; i < 24; i++) - { - for (j = i + 1; j < 25; j++) - { - if (Random() & 1) - { - u8 temp = natures[i]; - - natures[i] = natures[j]; - natures[j] = temp; - } - } - } - for (i = 0; i < 25; i++) - { - if (sub_810CAE4(natures[i], safariPokeblock) > 0) - return natures[i]; - } - } - } - return Random() % 25; -} - -static void CreateWildMon(u16 species, u8 b) -{ - ZeroEnemyPartyMons(); - CreateMonWithNature(&gEnemyParty[0], species, b, 0x20, PickWildMonNature()); -} - -static bool8 GenerateWildMon(struct WildPokemonInfo *wildMonInfo, u8 area, bool8 checkRepel) -{ - u8 wildMonIndex = 0; - u8 level; - - switch (area) - { - case 0: - wildMonIndex = ChooseWildMonIndex_Land(); - break; - case 1: - wildMonIndex = ChooseWildMonIndex_Water(); - break; - case 2: - wildMonIndex = ChooseWildMonIndex_Water(); - break; - } - level = ChooseWildMonLevel(&wildMonInfo->wildPokemon[wildMonIndex]); - if (checkRepel == TRUE && RepelCheck(level) == FALSE) - return FALSE; - else - { - CreateWildMon(wildMonInfo->wildPokemon[wildMonIndex].species, level); - return TRUE; - } -} - -static u16 GenerateFishingWildMon(struct WildPokemonInfo *wildMonInfo, u8 rod) -{ - u8 wildMonIndex = ChooseWildMonIndex_Fishing(rod); - u8 level = ChooseWildMonLevel(&wildMonInfo->wildPokemon[wildMonIndex]); - - CreateWildMon(wildMonInfo->wildPokemon[wildMonIndex].species, level); - return wildMonInfo->wildPokemon[wildMonIndex].species; -} - -static bool8 SetUpMassOutbreakEncounter(bool8 checkRepel) -{ - u16 i; - - if (checkRepel == TRUE && RepelCheck(gSaveBlock1.outbreakPokemonLevel) == 0) - return FALSE; - else - { - CreateWildMon(gSaveBlock1.outbreakPokemonSpecies, gSaveBlock1.outbreakPokemonLevel); - for (i = 0; i < 4; i++) - SetMonMoveSlot(&gEnemyParty[0], gSaveBlock1.outbreakPokemonMoves[i], i); - return TRUE; - } -} - -static bool8 DoMassOutbreakEncounterTest(void) -{ - if (gSaveBlock1.outbreakPokemonSpecies != 0 - && gSaveBlock1.location.mapNum == gSaveBlock1.outbreakLocationMapNum - && gSaveBlock1.location.mapGroup == gSaveBlock1.outbreakLocationMapGroup) - { - if (Random() % 100 < gSaveBlock1.outbreakPokemonProbability) - return TRUE; - } - return FALSE; -} - -static bool8 DoWildEncounterRateDiceRoll(u16 encounterRate) -{ - if (Random() % 2880 < encounterRate) - return TRUE; - else - return FALSE; -} - -static bool8 DoWildEncounterTest(u32 encounterRate, bool8 ignoreAbility) -{ - encounterRate *= 16; - if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) - encounterRate = encounterRate * 80 / 100; - ApplyFluteEncounterRateMod(&encounterRate); - ApplyCleanseTagEncounterRateMod(&encounterRate); - if (!ignoreAbility) - { - // UB: Too few arguments for function 'GetMonData' - if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)) - { - u32 ability = GetMonAbility(&gPlayerParty[0]); - if (ability == ABILITY_STENCH) - encounterRate /= 2; - if (ability == ABILITY_ILLUMINATE) - encounterRate *= 2; - } - } - if (encounterRate > 2880) - encounterRate = 2880; - return DoWildEncounterRateDiceRoll(encounterRate); -} - -static bool8 DoGlobalWildEncounterDiceRoll(void) -{ - if (Random() % 100 >= 60) - return FALSE; - else - return TRUE; -} - -bool8 StandardWildEncounter(u16 a, u16 b) -{ - u16 headerNum; - struct Roamer *roamer; - - if (sWildEncountersDisabled == TRUE) - return 0; - else - { - headerNum = GetCurrentMapWildMonHeader(); - if (headerNum != 0xFFFF) - { - if (MetatileBehavior_IsLandWildEncounter(a) == TRUE) - { - if (gWildMonHeaders[headerNum].landMonsInfo) - { - if (b != a && !DoGlobalWildEncounterDiceRoll()) - return 0; - - if (DoWildEncounterTest(gWildMonHeaders[headerNum].landMonsInfo->encounterRate, 0) == TRUE) - { - if (TryStartRoamerEncounter() == TRUE) - { - roamer = &gSaveBlock1.roamer; - if (RepelCheck(roamer->level)) - { - StartBattle_Roamer(); - return 1; - } - } - else - { - if (DoMassOutbreakEncounterTest() == TRUE && SetUpMassOutbreakEncounter(1) == TRUE) - { - CheckForSafariZoneAndProceed(); - return 1; - } - if (GenerateWildMon(gWildMonHeaders[headerNum].landMonsInfo, 0, TRUE) == TRUE) - { - goto label; - } - } - } - } - } - else if (MetatileBehavior_IsWaterWildEncounter(a) == TRUE - || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridge(a) == TRUE)) - { - if (gWildMonHeaders[headerNum].waterMonsInfo) - { - if (b != a && !DoGlobalWildEncounterDiceRoll()) - return 0; - - if (DoWildEncounterTest(gWildMonHeaders[headerNum].waterMonsInfo->encounterRate, 0) == TRUE) - { - if (TryStartRoamerEncounter() == TRUE) - { - roamer = &gSaveBlock1.roamer; - if (RepelCheck(roamer->level)) - { - StartBattle_Roamer(); - return 1; - } - } - else - { - //_08085268 - if (GenerateWildMon(gWildMonHeaders[headerNum].waterMonsInfo, 1, TRUE) == TRUE) - { - label: - //_0808527A - CheckForSafariZoneAndProceed(); - return 1; - } - } - } - } - } - } - } - return 0; -} - -void RockSmashWildEncounter(void) -{ - u16 headerNum = GetCurrentMapWildMonHeader(); - - if (headerNum != 0xFFFF) - { - struct WildPokemonInfo *wildPokemonInfo = gWildMonHeaders[headerNum].rockSmashMonsInfo; - - if (wildPokemonInfo == NULL) - { - gScriptResult = 0; - return; - } - else if (DoWildEncounterTest(wildPokemonInfo->encounterRate, 1) == TRUE - && GenerateWildMon(wildPokemonInfo, 2, TRUE) == TRUE) - { - CheckForSafariZoneAndProceed(); - gScriptResult = 1; - return; - } - } - gScriptResult = 0; - return; -} - -bool8 SweetScentWildEncounter(void) -{ - s16 x; - s16 y; - u16 headerNum; - struct WildPokemonInfo *wildPokemonInfo; - - PlayerGetDestCoords(&x, &y); - if ((headerNum = GetCurrentMapWildMonHeader()) != 0xFFFF) - { - if (MetatileBehavior_IsLandWildEncounter(MapGridGetMetatileBehaviorAt(x, y)) == 1) - { - wildPokemonInfo = gWildMonHeaders[headerNum].landMonsInfo; - if (wildPokemonInfo == NULL) - return FALSE; - if (TryStartRoamerEncounter() == TRUE) - { - StartBattle_Roamer(); - return TRUE; - } - if (DoMassOutbreakEncounterTest() == TRUE) - SetUpMassOutbreakEncounter(0); - else - GenerateWildMon(wildPokemonInfo, 0, FALSE); - CheckForSafariZoneAndProceed(); - return TRUE; - } - else if (MetatileBehavior_IsWaterWildEncounter(MapGridGetMetatileBehaviorAt(x, y)) == 1) - { - wildPokemonInfo = gWildMonHeaders[headerNum].waterMonsInfo; - if (wildPokemonInfo == NULL) - return FALSE; - if (TryStartRoamerEncounter() == TRUE) - { - StartBattle_Roamer(); - return TRUE; - } - GenerateWildMon(wildPokemonInfo, 1, FALSE); - CheckForSafariZoneAndProceed(); - return TRUE; - } - } - return FALSE; -} - -bool8 GetFishingWildMonListHeader(void) -{ - u16 headerNum = GetCurrentMapWildMonHeader(); - - if (headerNum != 0xFFFF && gWildMonHeaders[headerNum].fishingMonsInfo != NULL) - return TRUE; - else - return FALSE; -} - -void FishingWildEncounter(u8 rod) -{ - u16 species; - - if (CheckFeebas() == TRUE) - { - u8 level = ChooseWildMonLevel(&gWildFeebasRoute119Data); - - species = gWildFeebasRoute119Data.species; - CreateWildMon(species, level); - } - else - { - species = GenerateFishingWildMon( - gWildMonHeaders[GetCurrentMapWildMonHeader()].fishingMonsInfo, - rod); - } - IncrementGameStat(12); - sub_80BEA50(species); - CheckForSafariZoneAndProceed(); -} - -u16 GetLocalWildMon(bool8 *isWaterMon) -{ - u16 headerNum; - struct WildPokemonInfo *landMonsInfo; - struct WildPokemonInfo *waterMonsInfo; - - *isWaterMon = FALSE; - headerNum = GetCurrentMapWildMonHeader(); - if (headerNum == 0xFFFF) - return 0; - landMonsInfo = gWildMonHeaders[headerNum].landMonsInfo; - waterMonsInfo = gWildMonHeaders[headerNum].waterMonsInfo; - //Neither - if (landMonsInfo == NULL && waterMonsInfo == NULL) - return 0; - //Land Pokemon - if (landMonsInfo != NULL && waterMonsInfo == NULL) - return landMonsInfo->wildPokemon[ChooseWildMonIndex_Land()].species; - //Water Pokemon - if (landMonsInfo == NULL && waterMonsInfo != NULL) - { - *isWaterMon = TRUE; - return waterMonsInfo->wildPokemon[ChooseWildMonIndex_Water()].species; - } - //Either land or water Pokemon - if ((Random() % 100) < 80) - return landMonsInfo->wildPokemon[ChooseWildMonIndex_Land()].species; - else - { - *isWaterMon = TRUE; - return waterMonsInfo->wildPokemon[ChooseWildMonIndex_Water()].species; - } -} - -u16 GetMirageIslandMon(void) -{ - u16 headerNum = GetCurrentMapWildMonHeader(); - - if (headerNum != 0xFFFF) - { - struct WildPokemonInfo *waterMonsInfo = gWildMonHeaders[headerNum].waterMonsInfo; - - if (waterMonsInfo) - return waterMonsInfo->wildPokemon[ChooseWildMonIndex_Water()].species; - } - return 0; -} - -bool8 UpdateRepelCounter(void) -{ - u16 steps = VarGet(VAR_REPEL_STEP_COUNT); - - if (steps != 0) - { - steps--; - VarSet(VAR_REPEL_STEP_COUNT, steps); - if (steps == 0) - { - ScriptContext1_SetupScript(Event_RepelWoreOff); - return TRUE; - } - } - return FALSE; -} - -//Returns FALSE if Repel prevents wild Pokemon at the specified level from appearing -static bool8 RepelCheck(u8 level) -{ - u8 i; - - if (!VarGet(VAR_REPEL_STEP_COUNT)) - return TRUE; - else - { - for (i = 0; i < 6; i++) - { - // UB: Too few arguments for function 'GetMonData' - if (GetMonData(&gPlayerParty[i], MON_DATA_HP) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) - { - if (level < (u8)GetMonData(&gPlayerParty[i], MON_DATA_LEVEL)) - return FALSE; - else - return TRUE; - } - } - return FALSE; - } -} - -static void ApplyFluteEncounterRateMod(u32 *encRate) -{ - if (FlagGet(SYS_ENC_UP_ITEM) == TRUE) - *encRate += *encRate / 2; - else if (FlagGet(SYS_ENC_DOWN_ITEM) == TRUE) - *encRate = *encRate / 2; -} - -static void ApplyCleanseTagEncounterRateMod(u32 *encRate) -{ - // UB: Too few arguments for function 'GetMonData' - if (GetMonData(&gPlayerParty[0], MON_DATA_HELD_ITEM) == 0xBE) - *encRate = *encRate * 2 / 3; -} diff --git a/sym_bss.txt b/sym_bss.txt index a6eaeefe1..95c5bc3cc 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -1,9 +1,9 @@ - .include "src/main.o" - .include "src/sprite.o" - .include "src/text.o" - .include "src/string_util.o" - .include "src/link.o" - .include "src/rtc.o" + .include "src/engine/main.o" + .include "src/engine/sprite.o" + .include "src/engine/text.o" + .include "src/engine/string_util.o" + .include "src/engine/link.o" + .include "src/engine/rtc.o" @ daycare @@ -54,38 +54,38 @@ gUnknown_0300055C: @ 300055C gUnknown_03000560: @ 3000560 .space 0x1C - .include "src/play_time.o" - .include "src/rom4.o" + .include "src/engine/play_time.o" + .include "src/misc/rom4.o" @ unused variable? .align 2 .space 0x4 - .include "src/field_camera.o" - .include "src/field_map_obj.o" - .include "src/field_message_box.o" - .include "src/text_window.o" - .include "src/script.o" - .include "src/start_menu.o" - .include "src/menu.o" - .include "src/tileset_anim.o" - .include "src/sound.o" + .include "src/field/field_camera.o" + .include "src/field/field_map_obj.o" + .include "src/field/field_message_box.o" + .include "src/engine/text_window.o" + .include "src/engine/script.o" + .include "src/field/start_menu.o" + .include "src/engine/menu.o" + .include "src/engine/tileset_anim.o" + .include "src/engine/sound.o" @ field_weather gUnknown_030006DC: @ 30006DC .space 0x4 - .include "src/field_effect.o" - .include "src/item_menu.o" + .include "src/field/field_effect.o" + .include "src/field/item_menu.o" @ shop gUnknown_03000708: @ 3000708 .space 0x10 - .include "src/record_mixing.o" - .include "src/tv.o" + .include "src/engine/record_mixing.o" + .include "src/field/tv.o" @ unused variable? .align 2 @@ -114,15 +114,15 @@ gUnknown_03000744: @ 3000744 gUnknown_03000748: @ 3000748 .space 0x4 - .include "src/menu_helpers.o" - .include "src/contest_painting.o" - .include "src/pokeblock.o" + .include "src/field/menu_helpers.o" + .include "src/scene/contest_painting.o" + .include "src/field/pokeblock.o" @ unused variable? .align 2 .space 0x4 - .include "src/field_specials.o" + .include "src/field/field_specials.o" @ learn_move @@ -130,9 +130,9 @@ gUnknown_03000748: @ 3000748 gUnknown_030007B0: @ 30007B0 .space 0x4 - .include "src/player_pc.o" + .include "src/field/player_pc.o" .include "asm/m4a_1.o" - .include "src/agb_flash.o" - .include "src/siirtc.o" + .include "src/engine/agb_flash.o" + .include "src/engine/siirtc.o" .include "tools/agbcc/lib/libgcc.a:dp-bit.o" .include "tools/agbcc/lib/libgcc.a:fp-bit.o" diff --git a/sym_common.txt b/sym_common.txt index fc729a587..e141f6899 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -1,9 +1,9 @@ - .include "main.o" - .include "sprite.o" - .include "string_util.o" - .include "link.o" - .include "rtc.o" - .include "rom3.o" + .include "engine/main.o" + .include "engine/sprite.o" + .include "engine/string_util.o" + .include "engine/link.o" + .include "engine/rtc.o" + .include "misc/rom3.o" @ battle @@ -104,8 +104,8 @@ gUnknown_03004348: @ 3004348 gUnknown_0300434C: @ 300434C .space 0x4 - .include "pokemon_1.o" - .include "rng.o" + .include "pokemon/pokemon_1.o" + .include "engine/rng.o" @ egg_hatch @@ -113,7 +113,7 @@ gUnknown_0300434C: @ 300434C gUnknown_0300481C: @ 300481C .space 0x4 - .include "load_save.o" + .include "engine/load_save.o" @ trade @@ -137,11 +137,11 @@ gUnknown_03004840: @ 3004840 gUnknown_03004854: @ 3004854 .space 0x4 - .include "rom4.o" - .include "fieldmap.o" - .include "field_camera.o" - .include "field_map_obj.o" - .include "field_control_avatar.o" + .include "misc/rom4.o" + .include "field/fieldmap.o" + .include "field/field_camera.o" + .include "field/field_map_obj.o" + .include "field/field_control_avatar.o" @ party_menu? @@ -149,11 +149,11 @@ gUnknown_03004854: @ 3004854 gUnknown_03004AE4: @ 3004AE4 .space 0x4 - .include "start_menu.o" - .include "sound.o" - .include "battle_anim.o" - .include "task.o" - .include "mori_debug_menu.o" + .include "field/start_menu.o" + .include "engine/sound.o" + .include "battle/battle_anim.o" + .include "engine/task.o" + .include "debug/mori_debug_menu.o" @ unknown_task @@ -187,7 +187,7 @@ gLastFieldPokeMenuOpened: @ 3005CE0 gUnknown_03005CE4: @ 3005CE4 .space 0x4 - .include "pokedex.o" + .include "pokemon/pokedex.o" @ pokemon_summary_screen @@ -213,14 +213,14 @@ gCurrentBagPocketItemSlots: @ 3005D24 gUnknown_03005D28: @ 3005D28 .space 0x4 - .include "record_mixing.o" - .include "sound_check_menu.o" + .include "engine/record_mixing.o" + .include "engine/sound_check_menu.o" .align 2 gUnknown_03005D34: @ 3005D34 .space 0x4 - .include "tv.o" + .include "field/tv.o" .space 0x64 @ unused variable? @@ -262,7 +262,7 @@ gUnknown_03005E08: @ 3005E08 gUnknown_03005E0C: @ 3005E0C .space 0x4 - .include "contest_painting.o" + .include "scene/contest_painting.o" @ evolution_scene @@ -275,11 +275,11 @@ gUnknown_03005E94: @ 3005E94 gUnknown_03005E98: @ 3005E98 .space 0x4 - .include "save.o" + .include "engine/save.o" .space 0x10 @ unused variable? - .include "intro.o" + .include "scene/intro.o" @ battle_anim_813F0F4 @@ -328,5 +328,5 @@ gUnknown_03005F94: @ 3005F94 gUnknown_03005FA0: @ 3005FA0 .space 0x30 - .include "m4a_2.o" - .include "agb_flash.o" + .include "engine/m4a_2.o" + .include "engine/agb_flash.o" diff --git a/sym_ewram.txt b/sym_ewram.txt index 0e8b25e28..902ac284b 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1,12 +1,12 @@ - .include "src/main.o" - .include "src/sprite.o" - .include "src/text.o" - .include "src/string_util.o" + .include "src/engine/main.o" + .include "src/engine/sprite.o" + .include "src/engine/text.o" + .include "src/engine/string_util.o" .space 0x2E8 - .include "src/link.o" - .include "src/rom3.o" + .include "src/engine/link.o" + .include "src/misc/rom3.o" @ battle @@ -293,9 +293,9 @@ word_2024E82: @ 2024E82 gBattleMonForms: @ 2024E84 .space 0x4 - .include "src/pokemon_1.o" - .include "src/pokemon_2.o" - .include "src/load_save.o" + .include "src/pokemon/pokemon_1.o" + .include "src/pokemon/pokemon_2.o" + .include "src/engine/load_save.o" @ trade @@ -322,16 +322,16 @@ gUnknown_020297E4: @ 20297E4 gUnknown_020297E8: @ 20297E8 .space 0x4 - .include "src/new_game.o" - .include "src/rom4.o" - .include "src/fieldmap.o" - .include "src/field_camera.o" - .include "src/field_player_avatar.o" - .include "src/field_message_box.o" - .include "src/script.o" - .include "src/scrcmd.o" - .include "src/field_control_avatar.o" - .include "src/event_data.o" + .include "src/scene/new_game.o" + .include "src/misc/rom4.o" + .include "src/field/fieldmap.o" + .include "src/field/field_camera.o" + .include "src/field/field_player_avatar.o" + .include "src/field/field_message_box.o" + .include "src/engine/script.o" + .include "src/field/scrcmd.o" + .include "src/field/field_control_avatar.o" + .include "src/field/event_data.o" @ party_menu @@ -351,14 +351,14 @@ gUnknown_0202E8F8: @ 202E8F8 gUnknown_0202E8FA: @ 202E8FA .space 0x2 - .include "src/start_menu.o" - .include "src/menu.o" - .include "src/tileset_anim.o" - .include "src/palette.o" - .include "src/sound.o" - .include "src/battle_anim.o" - .include "src/rom_8077ABC.o" - .include "src/title_screen.o" + .include "src/field/start_menu.o" + .include "src/engine/menu.o" + .include "src/engine/tileset_anim.o" + .include "src/engine/palette.o" + .include "src/engine/sound.o" + .include "src/battle/battle_anim.o" + .include "src/misc/rom_8077ABC.o" + .include "src/scene/title_screen.o" @ field_weather @@ -378,9 +378,9 @@ gUnknown_0202FF38: @ 202FF38 gUnknown_0202FF58: @ 202FF58 .space 0x4 - .include "src/battle_setup.o" - .include "src/wild_encounter.o" - .include "src/field_effect.o" + .include "src/battle/battle_setup.o" + .include "src/field/wild_encounter.o" + .include "src/field/field_effect.o" @ unknown_task @@ -398,9 +398,9 @@ gUnknown_0202FFA9: @ 202FFA9 gUnknown_0202FFAA: @ 202FFAA .space 0xA - .include "src/pokedex.o" - .include "src/trainer_card.o" - .include "src/pokemon_storage_system.o" + .include "src/pokemon/pokedex.o" + .include "src/engine/trainer_card.o" + .include "src/pokemon/pokemon_storage_system.o" @ still pokemon_storage_system @@ -464,9 +464,9 @@ gUnknown_020384F0: @ 20384F0 gUnknown_020384F4: @ 20384F4 .space 0x4 - .include "src/script_movement.o" - .include "src/map_name_popup.o" - .include "src/item_menu.o" + .include "src/field/script_movement.o" + .include "src/field/map_name_popup.o" + .include "src/field/item_menu.o" @ contest @@ -546,7 +546,7 @@ gUnknown_02038730: @ 2038730 gUnknown_02038731: @ 2038731 .space 0x3 - .include "src/money.o" + .include "src/field/money.o" @ record_mixing @@ -554,7 +554,7 @@ gUnknown_02038731: @ 2038731 gUnknown_02038738: @ 2038738 .space 0x78 - .include "src/sound_check_menu.o" + .include "src/engine/sound_check_menu.o" @ secret_base @@ -564,7 +564,7 @@ gUnknown_020387DC: @ 20387DC @ tv - .include "src/tv.o" + .include "src/field/tv.o" @ fldeff_80C5CD4 @@ -572,8 +572,8 @@ gUnknown_020387DC: @ 20387DC gUnknown_020387EC: @ 20387EC .space 0x4 - .include "src/rotating_gate.o" - .include "src/safari_zone.o" + .include "src/field/rotating_gate.o" + .include "src/field/safari_zone.o" @ easy_chat @@ -588,7 +588,7 @@ gUnknown_020388B0: @ 20388B0 gUnknown_020388B4: @ 20388B4 .space 0x4 - .include "src/mon_markings.o" + .include "src/pokemon/mon_markings.o" @ mauville_old_man @@ -596,13 +596,13 @@ gUnknown_020388B4: @ 20388B4 gUnknown_020388BC: @ 20388BC .space 0x4 - .include "src/menu_helpers.o" - .include "src/region_map.o" - .include "src/decoration.o" - .include "src/battle_ai.o" - .include "src/rom6.o" - .include "src/pokeblock.o" - .include "src/field_specials.o" + .include "src/field/menu_helpers.o" + .include "src/field/region_map.o" + .include "src/field/decoration.o" + .include "src/battle/battle_ai.o" + .include "src/misc/rom6.o" + .include "src/field/pokeblock.o" + .include "src/field/field_specials.o" @ pokedex_area_screen @@ -630,7 +630,7 @@ gUnknown_0203926A: @ 203926A gAbilitiesPerBank: @ 203926C .space 0x4 - .include "src/choose_party.o" + .include "src/field/choose_party.o" @ cable_car @@ -656,12 +656,12 @@ gUnknown_0203927C: @ 203927C gUnknown_0203927D: @ 203927D .space 0x7 - .include "src/save.o" - .include "src/mystery_event_script.o" - .include "src/roamer.o" - .include "src/use_pokeblock.o" - .include "src/player_pc.o" - .include "src/intro.o" + .include "src/engine/save.o" + .include "src/engine/mystery_event_script.o" + .include "src/field/roamer.o" + .include "src/field/use_pokeblock.o" + .include "src/field/player_pc.o" + .include "src/scene/intro.o" @ hall_of_fame @@ -669,11 +669,11 @@ gUnknown_0203927D: @ 203927D gUnknown_0203931C: @ 203931C .space 0x4 - .include "src/credits.o" - .include "src/lottery_corner.o" - .include "src/berry_tag_screen.o" - .include "src/mystery_event_menu.o" - .include "src/save_failed_screen.o" + .include "src/scene/credits.o" + .include "src/field/lottery_corner.o" + .include "src/field/berry_tag_screen.o" + .include "src/engine/mystery_event_menu.o" + .include "src/engine/save_failed_screen.o" @ pokeblock_feed @@ -706,4 +706,4 @@ gUnknown_02039760: @ 2039760 gUnknown_0203A360: @ 203A360 .space 0x20 - .include "src/menu_cursor.o" + .include "src/engine/menu_cursor.o" -- cgit v1.2.3 From 2fc46db68496ae03e99b5ae131fceba6ba0e2127 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 12 Aug 2017 01:40:31 -0400 Subject: german fix --- src/field/decoration.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/field/decoration.c b/src/field/decoration.c index da33b3ab7..dde364069 100644 --- a/src/field/decoration.c +++ b/src/field/decoration.c @@ -619,7 +619,7 @@ const u8 DecorDesc_REGISTEEL_DOLL[] = _( "Place it on a mat\n" "or a desk."); #elif GERMAN -#include "data/decoration/descriptions_de.h" +#include "../data/decoration/descriptions_de.h" #endif const u16 DecorGfx_SMALL_DESK[] = { @@ -1389,7 +1389,7 @@ const struct Decoration gDecorations[] = { {DECOR_REGISTEEL_DOLL, _("REGISTEEL DOLL"), DECORPERM_SOLID_MAT, DECORSHAPE_1x2, DECORCAT_DOLL, 10000, DecorDesc_REGISTEEL_DOLL, DecorGfx_REGISTEEL_DOLL} }; #elif GERMAN -#include "data/decoration/decorations.h" +#include "../data/decoration/decorations.h" #endif const u8 *const gUnknown_083EC5E4[] = { -- cgit v1.2.3 From 1657f5d190dd6a71f94da5fb3ffb7157392d49f2 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sun, 13 Aug 2017 21:09:52 -0400 Subject: readd commented out makefile outputs. --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 097f2f974..e779fbcb2 100644 --- a/Makefile +++ b/Makefile @@ -126,9 +126,9 @@ $$($1_C_OBJS): VERSION := $2 $$($1_C_OBJS): REVISION := $3 $$($1_C_OBJS): LANGUAGE := $4 build/$1/%.o : %.c $$$$(c_dep) - $$(CPP) $$(CPPFLAGS) -D $$(VERSION) -D REVISION=$$(REVISION) -D $$(LANGUAGE) $$< -o build/$1/$$*.i - $$(PREPROC) build/$1/$$*.i charmap.txt | $$(CC1) $$(CFLAGS) -o build/$1/$$*.s - printf ".text\n\t.align\t2, 0\n" >> build/$1/$$*.s + @$$(CPP) $$(CPPFLAGS) -D $$(VERSION) -D REVISION=$$(REVISION) -D $$(LANGUAGE) $$< -o build/$1/$$*.i + @$$(PREPROC) build/$1/$$*.i charmap.txt | $$(CC1) $$(CFLAGS) -o build/$1/$$*.s + @printf ".text\n\t.align\t2, 0\n" >> build/$1/$$*.s $$(AS) $$(ASFLAGS) -o $$@ build/$1/$$*.s $$($1_ASM_OBJS): VERSION := $2 -- cgit v1.2.3 From b9e96a1ffa69f8dc1ae74374954318b60a1aae48 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sun, 13 Aug 2017 21:30:35 -0400 Subject: move GBA library files to libs. --- Makefile | 18 +- common_syms/engine/agb_flash.txt | 10 - common_syms/engine/m4a_2.txt | 12 - common_syms/libs/agb_flash.txt | 10 + common_syms/libs/m4a_2.txt | 12 + ld_script.txt | 28 +- src/engine/agb_flash.c | 295 ------------- src/engine/agb_flash_1m.c | 86 ---- src/engine/agb_flash_le.c | 31 -- src/engine/agb_flash_mx.c | 197 --------- src/engine/libc.c | 143 ------ src/engine/m4a_2.c | 912 --------------------------------------- src/engine/m4a_4.c | 545 ----------------------- src/engine/m4a_tables.c | 307 ------------- src/engine/siirtc.c | 432 ------------------- src/libs/agb_flash.c | 295 +++++++++++++ src/libs/agb_flash_1m.c | 86 ++++ src/libs/agb_flash_le.c | 31 ++ src/libs/agb_flash_mx.c | 197 +++++++++ src/libs/libc.c | 143 ++++++ src/libs/m4a_2.c | 912 +++++++++++++++++++++++++++++++++++++++ src/libs/m4a_4.c | 545 +++++++++++++++++++++++ src/libs/m4a_tables.c | 307 +++++++++++++ src/libs/siirtc.c | 432 +++++++++++++++++++ sym_bss.txt | 4 +- sym_common.txt | 4 +- 26 files changed, 2997 insertions(+), 2997 deletions(-) delete mode 100644 common_syms/engine/agb_flash.txt delete mode 100644 common_syms/engine/m4a_2.txt create mode 100644 common_syms/libs/agb_flash.txt create mode 100644 common_syms/libs/m4a_2.txt delete mode 100644 src/engine/agb_flash.c delete mode 100644 src/engine/agb_flash_1m.c delete mode 100644 src/engine/agb_flash_le.c delete mode 100644 src/engine/agb_flash_mx.c delete mode 100644 src/engine/libc.c delete mode 100644 src/engine/m4a_2.c delete mode 100644 src/engine/m4a_4.c delete mode 100644 src/engine/m4a_tables.c delete mode 100644 src/engine/siirtc.c create mode 100644 src/libs/agb_flash.c create mode 100644 src/libs/agb_flash_1m.c create mode 100644 src/libs/agb_flash_le.c create mode 100644 src/libs/agb_flash_mx.c create mode 100644 src/libs/libc.c create mode 100644 src/libs/m4a_2.c create mode 100644 src/libs/m4a_4.c create mode 100644 src/libs/m4a_tables.c create mode 100644 src/libs/siirtc.c diff --git a/Makefile b/Makefile index e779fbcb2..0ba9cdee9 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ VERSIONS := ruby sapphire ruby_rev1 sapphire_rev1 ruby_rev2 sapphire_rev2 ruby_d $(VERSIONS) $(VERSIONS:%=compare_%) -$(shell mkdir -p build/ $(VERSIONS:%=build/%/{,asm,data,src{,/battle,/field,/debug,/misc,/scene,/pokemon,/engine}})) +$(shell mkdir -p build/ $(VERSIONS:%=build/%/{,asm,data,src{,/battle,/field,/debug,/misc,/scene,/pokemon,/engine,/libs}})) C_SRCS := $(wildcard src/*/*.c) $(wildcard src/*.c) ASM_SRCS := $(wildcard asm/*.s) @@ -90,17 +90,17 @@ sound/direct_sound_samples/cry_%.bin: sound/direct_sound_samples/cry_%.aif ; $(A sound/songs/%.s: sound/songs/%.mid cd $(@D) && ../../$(MID) $( /* .bss.code starts at 0x3000F60 */ - src/engine/m4a_2.o(.bss.code); + src/libs/m4a_2.o(.bss.code); /* COMMON starts at 0x3001760 */ @@ -293,13 +293,13 @@ SECTIONS { { asm/libgcnmultiboot.o(.text); asm/m4a_1.o(.text); - src/engine/m4a_2.o(.text); + src/libs/m4a_2.o(.text); asm/m4a_3.o(.text); - src/engine/m4a_4.o(.text); - src/engine/agb_flash.o(.text); - src/engine/agb_flash_1m.o(.text); - src/engine/agb_flash_mx.o(.text); - src/engine/siirtc.o(.text); + src/libs/m4a_4.o(.text); + src/libs/agb_flash.o(.text); + src/libs/agb_flash_1m.o(.text); + src/libs/agb_flash_mx.o(.text); + src/libs/siirtc.o(.text); asm/libagbsyscall.o(.text); tools/agbcc/lib/libgcc.a:_call_via_rX.o(.text); tools/agbcc/lib/libgcc.a:_divsi3.o(.text); @@ -315,7 +315,7 @@ SECTIONS { tools/agbcc/lib/libgcc.a:fp-bit.o(.text); tools/agbcc/lib/libgcc.a:_lshrdi3.o(.text); tools/agbcc/lib/libgcc.a:_negdi2.o(.text); - src/engine/libc.o(.text); + src/libs/libc.o(.text); } =0 .rodata : @@ -479,7 +479,7 @@ SECTIONS { data/strings2.o(.rodata); data/menu_cursor.o(.rodata); data/mystery_event_msg.o(.rodata); - src/engine/m4a_tables.o(.rodata); + src/libs/m4a_tables.o(.rodata); data/sound_data.o(.rodata); } =0 @@ -908,11 +908,11 @@ SECTIONS { lib_rodata : ALIGN(4) { - src/engine/agb_flash.o(.rodata); - src/engine/agb_flash_1m.o(.rodata); - src/engine/agb_flash_mx.o(.rodata); - src/engine/agb_flash_le.o(.rodata); - src/engine/siirtc.o(.rodata); + src/libs/agb_flash.o(.rodata); + src/libs/agb_flash_1m.o(.rodata); + src/libs/agb_flash_mx.o(.rodata); + src/libs/agb_flash_le.o(.rodata); + src/libs/siirtc.o(.rodata); tools/agbcc/lib/libgcc.a:_udivdi3.o(.rodata); } =0 diff --git a/src/engine/agb_flash.c b/src/engine/agb_flash.c deleted file mode 100644 index 340d469a7..000000000 --- a/src/engine/agb_flash.c +++ /dev/null @@ -1,295 +0,0 @@ -#include "gba/gba.h" -#include "gba/flash_internal.h" - -static u8 sTimerNum; -static u16 sTimerCount; -static vu16 *sTimerReg; -static u16 sSavedIme; - -u8 gFlashTimeoutFlag; -u8 (*PollFlashStatus)(u8 *); -u16 (*WaitForFlashWrite)(u8 phase, u8 *addr, u8 lastData); -u16 (*ProgramFlashSector)(u16 sectorNum, u8 *src); -const struct FlashType *gFlash; -u16 (*ProgramFlashByte)(u16 sectorNum, u32 offset, u8 data); -u16 gFlashNumRemainingBytes; -u16 (*EraseFlashChip)(); -u16 (*EraseFlashSector)(u16 sectorNum); -const u16 *gFlashMaxTime; - -void SetReadFlash1(u16 *dest); - -void SwitchFlashBank(u8 bankNum) -{ - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0xB0); - FLASH_WRITE(0x0000, bankNum); -} - -#define DELAY() \ -do { \ - vu16 i; \ - for (i = 20000; i != 0; i--) \ - ; \ -} while (0) - -u16 ReadFlashId(void) -{ - u16 flashId; - u16 readFlash1Buffer[0x20]; - u8 (*readFlash1)(u8 *); - - SetReadFlash1(readFlash1Buffer); - readFlash1 = (u8 (*)(u8 *))((s32)readFlash1Buffer + 1); - - // Enter ID mode. - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0x90); - DELAY(); - - flashId = readFlash1(FLASH_BASE + 1) << 8; - flashId |= readFlash1(FLASH_BASE); - - // Leave ID mode. - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0xF0); - FLASH_WRITE(0x5555, 0xF0); - DELAY(); - - return flashId; -} - -void FlashTimerIntr(void) -{ - if (sTimerCount != 0 && --sTimerCount == 0) - gFlashTimeoutFlag = 1; -} - -u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)) -{ - if (timerNum >= 4) - return 1; - - sTimerNum = timerNum; - sTimerReg = ®_TMCNT(sTimerNum); - *intrFunc = FlashTimerIntr; - return 0; -} - -void StartFlashTimer(u8 phase) -{ - const u16 *maxTime = &gFlashMaxTime[phase * 3]; - sSavedIme = REG_IME; - REG_IME = 0; - sTimerReg[1] = 0; - REG_IE |= (INTR_FLAG_TIMER0 << sTimerNum); - gFlashTimeoutFlag = 0; - sTimerCount = *maxTime++; - *sTimerReg++ = *maxTime++; - *sTimerReg-- = *maxTime++; - REG_IF = (INTR_FLAG_TIMER0 << sTimerNum); - REG_IME = 1; -} - -void StopFlashTimer(void) -{ - REG_IME = 0; - *sTimerReg++ = 0; - *sTimerReg-- = 0; - REG_IE &= ~(INTR_FLAG_TIMER0 << sTimerNum); - REG_IME = sSavedIme; -} - -u8 ReadFlash1(u8 *addr) -{ - return *addr; -} - -void SetReadFlash1(u16 *dest) -{ - u16 *src; - u16 i; - - PollFlashStatus = (u8 (*)(u8 *))((s32)dest + 1); - - src = (u16 *)ReadFlash1; - src = (u16 *)((s32)src ^ 1); - - i = ((s32)SetReadFlash1 - (s32)ReadFlash1) >> 1; - - while (i != 0) - { - *dest++ = *src++; - i--; - } -} - -void ReadFlash_Core(u8 *src, u8 *dest, u32 size) -{ - while (size-- != 0) - { - *dest++ = *src++; - } -} - -void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) -{ - u8 *src; - u16 i; - u16 readFlash_Core_Buffer[0x40]; - u16 *funcSrc; - u16 *funcDest; - void (*readFlash_Core)(u8 *, u8 *, u32); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - if (gFlash->romSize == FLASH_ROM_SIZE_1M) - { - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - } - - funcSrc = (u16 *)ReadFlash_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); - funcDest = readFlash_Core_Buffer; - - i = ((s32)ReadFlash - (s32)ReadFlash_Core) >> 1; - - while (i != 0) - { - *funcDest++ = *funcSrc++; - i--; - } - - readFlash_Core = (void (*)(u8 *, u8 *, u32))((s32)readFlash_Core_Buffer + 1); - - src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; - - readFlash_Core(src, dest, size); -} - -u32 VerifyFlashSector_Core(u8 *src, u8 *tgt, u32 size) -{ - while (size-- != 0) - { - if (*tgt++ != *src++) - return (u32)(tgt - 1); - } - - return 0; -} - -u32 VerifyFlashSector(u16 sectorNum, u8 *src) -{ - u16 i; - u16 verifyFlashSector_Core_Buffer[0x80]; - u16 *funcSrc; - u16 *funcDest; - u8 *tgt; - u16 size; - u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - if (gFlash->romSize == FLASH_ROM_SIZE_1M) - { - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - } - - funcSrc = (u16 *)VerifyFlashSector_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); - funcDest = verifyFlashSector_Core_Buffer; - - i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; - - while (i != 0) - { - *funcDest++ = *funcSrc++; - i--; - } - - verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); - - tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); - size = gFlash->sector.size; - - return verifyFlashSector_Core(src, tgt, size); // return 0 if verified. -} - -u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) -{ - u16 i; - u16 verifyFlashSector_Core_Buffer[0x80]; - u16 *funcSrc; - u16 *funcDest; - u8 *tgt; - u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32); - - if (gFlash->romSize == FLASH_ROM_SIZE_1M) - { - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - } - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - funcSrc = (u16 *)VerifyFlashSector_Core; - funcSrc = (u16 *)((s32)funcSrc ^ 1); - funcDest = verifyFlashSector_Core_Buffer; - - i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; - - while (i != 0) - { - *funcDest++ = *funcSrc++; - i--; - } - - verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); - - tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); - - return verifyFlashSector_Core(src, tgt, n); -} - -u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src) // 3rd is unused -{ - u8 i; - u32 result; - - for (i = 0; i < 3; i++) // 3 attempts - { - result = ProgramFlashSector(sectorNum, src); - if (result != 0) - continue; - - result = VerifyFlashSector(sectorNum, src); - if (result == 0) - break; - } - - return result; // return 0 if verified and programmed. -} - -u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, u8 *src, u32 n) -{ - u8 i; - u32 result; - - for (i = 0; i < 3; i++) - { - result = ProgramFlashSector(sectorNum, src); - if (result != 0) - continue; - - result = VerifyFlashSectorNBytes(sectorNum, src, n); - if (result == 0) - break; - } - - return result; -} diff --git a/src/engine/agb_flash_1m.c b/src/engine/agb_flash_1m.c deleted file mode 100644 index e249fab9a..000000000 --- a/src/engine/agb_flash_1m.c +++ /dev/null @@ -1,86 +0,0 @@ -#include "gba/gba.h" -#include "gba/flash_internal.h" - -static const char AgbLibFlashVersion[] = "FLASH1M_V103"; - -const struct FlashSetupInfo * const sSetupInfos[] = -{ - &MX29L010, - &LE26FV10N1TS, - &DefaultFlash -}; - -u16 IdentifyFlash(void) -{ - u16 result; - u16 flashId; - const struct FlashSetupInfo * const *setupInfo; - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - flashId = ReadFlashId(); - - setupInfo = sSetupInfos; - result = 1; - - for (;;) - { - if ((*setupInfo)->type.ids.separate.makerId == 0) - break; - - if (flashId == (*setupInfo)->type.ids.joined) - { - result = 0; - break; - } - - setupInfo++; - } - - ProgramFlashByte = (*setupInfo)->programFlashByte; - ProgramFlashSector = (*setupInfo)->programFlashSector; - EraseFlashChip = (*setupInfo)->eraseFlashChip; - EraseFlashSector = (*setupInfo)->eraseFlashSector; - WaitForFlashWrite = (*setupInfo)->WaitForFlashWrite; - gFlashMaxTime = (*setupInfo)->maxTime; - gFlash = &(*setupInfo)->type; - - return result; -} - -u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData) -{ - u16 result = 0; - u8 status; - - StartFlashTimer(phase); - - while ((status = PollFlashStatus(addr)) != lastData) - { - if (status & 0x20) - { - // The write operation exceeded the flash chip's time limit. - - if (PollFlashStatus(addr) == lastData) - break; - - FLASH_WRITE(0x5555, 0xF0); - result = phase | 0xA000u; - break; - } - - if (gFlashTimeoutFlag) - { - if (PollFlashStatus(addr) == lastData) - break; - - FLASH_WRITE(0x5555, 0xF0); - result = phase | 0xC000u; - break; - } - } - - StopFlashTimer(); - - return result; -} diff --git a/src/engine/agb_flash_le.c b/src/engine/agb_flash_le.c deleted file mode 100644 index 39d956e27..000000000 --- a/src/engine/agb_flash_le.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "gba/gba.h" -#include "gba/flash_internal.h" - -const u16 leMaxTime[] = -{ - 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, -}; - -const struct FlashSetupInfo LE26FV10N1TS = -{ - ProgramFlashByte_MX, - ProgramFlashSector_MX, - EraseFlashChip_MX, - EraseFlashSector_MX, - WaitForFlashWrite_Common, - leMaxTime, - { - 131072, // ROM size - { - 4096, // sector size - 12, // bit shift to multiply by sector size (4096 == 1 << 12) - 32, // number of sectors - 0 // appears to be unused - }, - { 3, 1 }, // wait state setup data - { { 0x62, 0x13 } } // ID - } -}; diff --git a/src/engine/agb_flash_mx.c b/src/engine/agb_flash_mx.c deleted file mode 100644 index 67348901f..000000000 --- a/src/engine/agb_flash_mx.c +++ /dev/null @@ -1,197 +0,0 @@ -#include "gba/gba.h" -#include "gba/flash_internal.h" - -const u16 mxMaxTime[] = -{ - 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, - 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, -}; - -const struct FlashSetupInfo MX29L010 = -{ - ProgramFlashByte_MX, - ProgramFlashSector_MX, - EraseFlashChip_MX, - EraseFlashSector_MX, - WaitForFlashWrite_Common, - mxMaxTime, - { - 131072, // ROM size - { - 4096, // sector size - 12, // bit shift to multiply by sector size (4096 == 1 << 12) - 32, // number of sectors - 0 // appears to be unused - }, - { 3, 1 }, // wait state setup data -#if defined(GERMAN) && defined(SAPPHIRE) - { { 0xBF, 0xD4 } } // ID -#else - { { 0xC2, 0x09 } } // ID -#endif - } -}; - -const struct FlashSetupInfo DefaultFlash = -{ - ProgramFlashByte_MX, - ProgramFlashSector_MX, - EraseFlashChip_MX, - EraseFlashSector_MX, - WaitForFlashWrite_Common, - mxMaxTime, - { - 131072, // ROM size - { - 4096, // sector size - 12, // bit shift to multiply by sector size (4096 == 1 << 12) - 32, // number of sectors - 0 // appears to be unused - }, - { 3, 1 }, // wait state setup data - { { 0x00, 0x00 } } // ID of 0 - } -}; - -u16 EraseFlashChip_MX(void) -{ - u16 result; - u16 readFlash1Buffer[0x20]; - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; - - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0x80); - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0x10); - - SetReadFlash1(readFlash1Buffer); - - result = WaitForFlashWrite(3, FLASH_BASE, 0xFF); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - return result; -} - -u16 EraseFlashSector_MX(u16 sectorNum) -{ - u16 numTries; - u16 result; - u8 *addr; - u16 readFlash1Buffer[0x20]; - - if (sectorNum >= gFlash->sector.count) - return 0x80FF; - - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - - numTries = 0; - -try_erase: - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; - - addr = FLASH_BASE + (sectorNum << gFlash->sector.shift); - - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0x80); - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - *addr = 0x30; - - SetReadFlash1(readFlash1Buffer); - - result = WaitForFlashWrite(2, addr, 0xFF); - - if (!(result & 0xA000) || numTries > 3) - goto done; - - numTries++; - - goto try_erase; - -done: - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; - - return result; -} - -u16 ProgramFlashByte_MX(u16 sectorNum, u32 offset, u8 data) -{ - u8 *addr; - u16 readFlash1Buffer[0x20]; - - if (offset >= gFlash->sector.size) - return 0x8000; - - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - - addr = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; - - SetReadFlash1(readFlash1Buffer); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; - - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0xA0); - *addr = data; - - return WaitForFlashWrite(1, addr, data); -} - -static u16 ProgramByte(u8 *src, u8 *dest) -{ - FLASH_WRITE(0x5555, 0xAA); - FLASH_WRITE(0x2AAA, 0x55); - FLASH_WRITE(0x5555, 0xA0); - *dest = *src; - - return WaitForFlashWrite(1, dest, *src); -} - -u16 ProgramFlashSector_MX(u16 sectorNum, u8 *src) -{ - u16 result; - u8 *dest; - u16 readFlash1Buffer[0x20]; - - if (sectorNum >= gFlash->sector.count) - return 0x80FF; - - result = EraseFlashSector_MX(sectorNum); - - if (result != 0) - return result; - - SwitchFlashBank(sectorNum / SECTORS_PER_BANK); - sectorNum %= SECTORS_PER_BANK; - - SetReadFlash1(readFlash1Buffer); - - REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; - - gFlashNumRemainingBytes = gFlash->sector.size; - dest = FLASH_BASE + (sectorNum << gFlash->sector.shift); - - while (gFlashNumRemainingBytes > 0) - { - result = ProgramByte(src, dest); - - if (result != 0) - break; - - gFlashNumRemainingBytes--; - src++; - dest++; - } - - return result; -} diff --git a/src/engine/libc.c b/src/engine/libc.c deleted file mode 100644 index 920673e3e..000000000 --- a/src/engine/libc.c +++ /dev/null @@ -1,143 +0,0 @@ -#include "global.h" -#include - -#define LBLOCKSIZE (sizeof(long)) - -// Nonzero if (long)X contains a NULL byte. -#define CONTAINSNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) - -// Nonzero if X is not aligned on a "long" boundary. -#define UNALIGNED(X) ((long)X & (LBLOCKSIZE - 1)) - -void *memcpy(void *dst0, const void *src0, size_t len0) -{ - char *dst = dst0; - const char *src = src0; - long *aligned_dst; - const long *aligned_src; - unsigned int len = len0; - - // If the size is small, or either src or dst is unaligned, - // then go to the byte copy loop. This should be rare. - if (len >= 16 && !(UNALIGNED(src) | UNALIGNED(dst))) - { - aligned_dst = (long *)dst; - aligned_src = (long *)src; - - // Copy 4X long words at a time if possible. - while (len >= 16) - { - *aligned_dst++ = *aligned_src++; - *aligned_dst++ = *aligned_src++; - *aligned_dst++ = *aligned_src++; - *aligned_dst++ = *aligned_src++; - len -= 16; - } - - // Copy one long word at a time if possible - while (len >= 4) - { - *aligned_dst++ = *aligned_src++; - len -= 4; - } - - dst = (char *)aligned_dst; - src = (char *)aligned_src; - } - - // Pick up any remaining bytes with a byte copier. - while (len--) - *dst++ = *src++; - - return dst0; -} - -void *memset(void *m, int c, size_t n) -{ - char *s = (char *)m; - int count, i; - unsigned long buffer; - unsigned long *aligned_addr; - unsigned char *unaligned_addr; - - // If the size is small or m is unaligned, - // then go to the byte copy loop. This should be rare. - if (n >= LBLOCKSIZE && !UNALIGNED(m)) - { - // We know that n is large and m is word-aligned. - aligned_addr = (unsigned long *)m; - - // Store C into each char sized location in buffer so that - // we can set large blocks quickly. - c &= 0xFF; - if (LBLOCKSIZE == 4) - { - buffer = (c << 8) | c; - buffer |= (buffer << 16); - } - else - { - buffer = 0; - for (i = 0; i < LBLOCKSIZE; i++) - buffer = (buffer << 8) | c; - } - - while (n >= LBLOCKSIZE * 4) - { - *aligned_addr++ = buffer; - *aligned_addr++ = buffer; - *aligned_addr++ = buffer; - *aligned_addr++ = buffer; - n -= LBLOCKSIZE * 4; - } - while (n >= LBLOCKSIZE) - { - *aligned_addr++ = buffer; - n -= LBLOCKSIZE; - } - - s = (char *)aligned_addr; - } - - // Pick up the remainder with a bytewise loop. - while (n--) - *s++ = (char)c; - - return m; -} - -int strcmp(const char *s1, const char *s2) -{ - unsigned long *a1; - unsigned long *a2; - - // If s1 or s2 are unaligned, then skip this and compare bytes. - if (!(UNALIGNED(s1) | UNALIGNED(s2))) - { - // Compare them a word at a time. - a1 = (unsigned long *)s1; - a2 = (unsigned long *)s2; - while (*a1 == *a2) - { - // If *a1 == *a2, and we find a null in *a1, - // then the strings must be equal, so return zero. - if (CONTAINSNULL(*a1)) - return 0; - - a1++; - a2++; - } - - s1 = (char *)a1; - s2 = (char *)a2; - } - - // Check the remaining few bytes. - while (*s1 != '\0' && *s1 == *s2) - { - s1++; - s2++; - } - - return (*(unsigned char *) s1) - (*(unsigned char *) s2); -} diff --git a/src/engine/m4a_2.c b/src/engine/m4a_2.c deleted file mode 100644 index 2d3c65848..000000000 --- a/src/engine/m4a_2.c +++ /dev/null @@ -1,912 +0,0 @@ -#include "gba/m4a_internal.h" - -#define BSS_CODE __attribute__((section(".bss.code"))) - -BSS_CODE ALIGNED(4) char SoundMainRAM_Buffer[0x800] = {0}; - -struct SoundInfo gSoundInfo; -struct PokemonCrySong gPokemonCrySongs[MAX_POKEMON_CRIES]; -struct MusicPlayerInfo gPokemonCryMusicPlayers[MAX_POKEMON_CRIES]; -void *gMPlayJumpTable[36]; -struct CgbChannel gCgbChans[4]; -struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2]; -struct PokemonCrySong gPokemonCrySong; -struct MusicPlayerInfo gMPlay_BGM; -struct MusicPlayerInfo gMPlay_SE1; -struct MusicPlayerInfo gMPlay_SE2; -struct MusicPlayerInfo gMPlay_SE3; -u8 gMPlayMemAccArea[0x10]; - -u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust) -{ - u32 val1; - u32 val2; - u32 fineAdjustShifted = fineAdjust << 24; - - if (key > 178) - { - key = 178; - fineAdjustShifted = 255 << 24; - } - - val1 = gScaleTable[key]; - val1 = gFreqTable[val1 & 0xF] >> (val1 >> 4); - - val2 = gScaleTable[key + 1]; - val2 = gFreqTable[val2 & 0xF] >> (val2 >> 4); - - return umul3232H32(wav->freq, val1 + umul3232H32(val2 - val1, fineAdjustShifted)); -} - -void UnusedDummyFunc() -{ -} - -void MPlayContinue(struct MusicPlayerInfo *mplayInfo) -{ - if (mplayInfo->ident == ID_NUMBER) - { - mplayInfo->ident++; - mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE; - mplayInfo->ident = ID_NUMBER; - } -} - -void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed) -{ - if (mplayInfo->ident == ID_NUMBER) - { - mplayInfo->ident++; - mplayInfo->fadeOC = speed; - mplayInfo->fadeOI = speed; - mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT); - mplayInfo->ident = ID_NUMBER; - } -} - -void m4aSoundInit(void) -{ - s32 i; - - CpuCopy32((void *)((s32)SoundMainRAM & ~1), SoundMainRAM_Buffer, sizeof(SoundMainRAM_Buffer)); - - SoundInit(&gSoundInfo); - MPlayExtender(gCgbChans); - m4aSoundMode(SOUND_MODE_DA_BIT_8 - | SOUND_MODE_FREQ_13379 - | (12 << SOUND_MODE_MASVOL_SHIFT) - | (5 << SOUND_MODE_MAXCHN_SHIFT)); - - for (i = 0; i < NUM_MUSIC_PLAYERS; i++) - { - struct MusicPlayerInfo *mplayInfo = gMPlayTable[i].info; - MPlayOpen(mplayInfo, gMPlayTable[i].track, gMPlayTable[i].unk_8); - mplayInfo->unk_B = gMPlayTable[i].unk_A; - mplayInfo->memAccArea = gMPlayMemAccArea; - } - - memcpy(&gPokemonCrySong, &gPokemonCrySongTemplate, sizeof(struct PokemonCrySong)); - - for (i = 0; i < MAX_POKEMON_CRIES; i++) - { - struct MusicPlayerInfo *mplayInfo = &gPokemonCryMusicPlayers[i]; - struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2]; - MPlayOpen(mplayInfo, track, 2); - track->chan = 0; - } -} - -void m4aSoundMain(void) -{ - SoundMain(); -} - -void m4aSongNumStart(u16 n) -{ - const struct MusicPlayer *mplayTable = gMPlayTable; - const struct Song *songTable = gSongTable; - const struct Song *song = &songTable[n]; - const struct MusicPlayer *mplay = &mplayTable[song->ms]; - - MPlayStart(mplay->info, song->header); -} - -void m4aSongNumStartOrChange(u16 n) -{ - const struct MusicPlayer *mplayTable = gMPlayTable; - const struct Song *songTable = gSongTable; - const struct Song *song = &songTable[n]; - const struct MusicPlayer *mplay = &mplayTable[song->ms]; - - if (mplay->info->songHeader != song->header) - { - MPlayStart(mplay->info, song->header); - } - else - { - if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0 - || (mplay->info->status & MUSICPLAYER_STATUS_PAUSE)) - { - MPlayStart(mplay->info, song->header); - } - } -} - -void m4aSongNumStartOrContinue(u16 n) -{ - const struct MusicPlayer *mplayTable = gMPlayTable; - const struct Song *songTable = gSongTable; - const struct Song *song = &songTable[n]; - const struct MusicPlayer *mplay = &mplayTable[song->ms]; - - if (mplay->info->songHeader != song->header) - MPlayStart(mplay->info, song->header); - else if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0) - MPlayStart(mplay->info, song->header); - else if (mplay->info->status & MUSICPLAYER_STATUS_PAUSE) - MPlayContinue(mplay->info); -} - -void m4aSongNumStop(u16 n) -{ - const struct MusicPlayer *mplayTable = gMPlayTable; - const struct Song *songTable = gSongTable; - const struct Song *song = &songTable[n]; - const struct MusicPlayer *mplay = &mplayTable[song->ms]; - - if (mplay->info->songHeader == song->header) - m4aMPlayStop(mplay->info); -} - -void m4aSongNumContinue(u16 n) -{ - const struct MusicPlayer *mplayTable = gMPlayTable; - const struct Song *songTable = gSongTable; - const struct Song *song = &songTable[n]; - const struct MusicPlayer *mplay = &mplayTable[song->ms]; - - if (mplay->info->songHeader == song->header) - MPlayContinue(mplay->info); -} - -void m4aMPlayAllStop(void) -{ - s32 i; - - for (i = 0; i < NUM_MUSIC_PLAYERS; i++) - m4aMPlayStop(gMPlayTable[i].info); - - for (i = 0; i < MAX_POKEMON_CRIES; i++) - m4aMPlayStop(&gPokemonCryMusicPlayers[i]); -} - -void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo) -{ - MPlayContinue(mplayInfo); -} - -void m4aMPlayAllContinue(void) -{ - s32 i; - - for (i = 0; i < NUM_MUSIC_PLAYERS; i++) - MPlayContinue(gMPlayTable[i].info); - - for (i = 0; i < MAX_POKEMON_CRIES; i++) - MPlayContinue(&gPokemonCryMusicPlayers[i]); -} - -void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed) -{ - MPlayFadeOut(mplayInfo, speed); -} - -void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed) -{ - if (mplayInfo->ident == ID_NUMBER) - { - mplayInfo->ident++; - mplayInfo->fadeOC = speed; - mplayInfo->fadeOI = speed; - mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT) | TEMPORARY_FADE; - mplayInfo->ident = ID_NUMBER; - } -} - -void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed) -{ - if (mplayInfo->ident == ID_NUMBER) - { - mplayInfo->ident++; - mplayInfo->fadeOC = speed; - mplayInfo->fadeOI = speed; - mplayInfo->fadeOV = (0 << FADE_VOL_SHIFT) | FADE_IN; - mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE; - mplayInfo->ident = ID_NUMBER; - } -} - -void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo) -{ - s32 trackCount = mplayInfo->trackCount; - struct MusicPlayerTrack *track = mplayInfo->tracks; - - while (trackCount > 0) - { - if (track->flags & MPT_FLG_EXIST) - { - if (track->flags & MPT_FLG_START) - { - Clear64byte(track); - track->flags = MPT_FLG_EXIST; - track->bendRange = 2; - track->volX = 64; - track->lfoSpeed = 22; - track->tone.type = 1; - } - } - - trackCount--; - track++; - } -} - -void MPlayExtender(struct CgbChannel *cgbChans) -{ - struct SoundInfo *soundInfo; - u32 ident; - - REG_SOUNDCNT_X = SOUND_MASTER_ENABLE - | SOUND_4_ON - | SOUND_3_ON - | SOUND_2_ON - | SOUND_1_ON; - REG_SOUNDCNT_L = 0; // set master volume to zero - REG_NR12 = 0x8; - REG_NR22 = 0x8; - REG_NR42 = 0x8; - REG_NR14 = 0x80; - REG_NR24 = 0x80; - REG_NR44 = 0x80; - REG_NR30 = 0; - REG_NR50 = 0x77; - - soundInfo = SOUND_INFO_PTR; - - ident = soundInfo->ident; - - if (ident != ID_NUMBER) - return; - - soundInfo->ident++; - - gMPlayJumpTable[8] = ply_memacc; - gMPlayJumpTable[17] = ply_lfos; - gMPlayJumpTable[19] = ply_mod; - gMPlayJumpTable[28] = ply_xcmd; - gMPlayJumpTable[29] = ply_endtie; - gMPlayJumpTable[30] = SampleFreqSet; - gMPlayJumpTable[31] = TrackStop; - gMPlayJumpTable[32] = FadeOutBody; - gMPlayJumpTable[33] = TrkVolPitSet; - - soundInfo->cgbChans = (struct CgbChannel *)cgbChans; - soundInfo->CgbSound = CgbSound; - soundInfo->CgbOscOff = CgbOscOff; - soundInfo->MidiKeyToCgbFreq = MidiKeyToCgbFreq; - soundInfo->maxLines = MAX_LINES; - - CpuFill32(0, cgbChans, sizeof(struct CgbChannel) * 4); - - cgbChans[0].ty = 1; - cgbChans[0].panMask = 0x11; - cgbChans[1].ty = 2; - cgbChans[1].panMask = 0x22; - cgbChans[2].ty = 3; - cgbChans[2].panMask = 0x44; - cgbChans[3].ty = 4; - cgbChans[3].panMask = 0x88; - - soundInfo->ident = ident; -} - -void MusicPlayerJumpTableCopy(void) -{ - asm("swi 0x2A"); -} - -void ClearChain(void *x) -{ - void (*func)(void *) = *(&gMPlayJumpTable[34]); - func(x); -} - -void Clear64byte(void *x) -{ - void (*func)(void *) = *(&gMPlayJumpTable[35]); - func(x); -} - -void SoundInit(struct SoundInfo *soundInfo) -{ - soundInfo->ident = 0; - - if (REG_DMA1CNT & (DMA_REPEAT << 16)) - REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; - - if (REG_DMA2CNT & (DMA_REPEAT << 16)) - REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; - - REG_DMA1CNT_H = DMA_32BIT; - REG_DMA2CNT_H = DMA_32BIT; - REG_SOUNDCNT_X = SOUND_MASTER_ENABLE - | SOUND_4_ON - | SOUND_3_ON - | SOUND_2_ON - | SOUND_1_ON; - REG_SOUNDCNT_H = SOUND_B_FIFO_RESET | SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT - | SOUND_A_FIFO_RESET | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT - | SOUND_ALL_MIX_FULL; - REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40; - - REG_DMA1SAD = (s32)soundInfo->pcmBuffer; - REG_DMA1DAD = (s32)®_FIFO_A; - REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE; - REG_DMA2DAD = (s32)®_FIFO_B; - - SOUND_INFO_PTR = soundInfo; - CpuFill32(0, soundInfo, sizeof(struct SoundInfo)); - - soundInfo->maxChans = 8; - soundInfo->masterVolume = 15; - soundInfo->plynote = (u32)ply_note; - soundInfo->CgbSound = DummyFunc; - soundInfo->CgbOscOff = (void (*)(u8))DummyFunc; - soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc; - soundInfo->ExtVolPit = (u32)DummyFunc; - - MPlayJumpTableCopy(gMPlayJumpTable); - - soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable; - - SampleFreqSet(SOUND_MODE_FREQ_13379); - - soundInfo->ident = ID_NUMBER; -} - -void SampleFreqSet(u32 freq) -{ - struct SoundInfo *soundInfo = SOUND_INFO_PTR; - - freq = (freq & 0xF0000) >> 16; - soundInfo->freq = freq; - soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1]; - soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank; - - // LCD refresh rate 59.7275Hz - soundInfo->pcmFreq = (597275 * soundInfo->pcmSamplesPerVBlank + 5000) / 10000; - - // CPU frequency 16.78Mhz - soundInfo->divFreq = (16777216 / soundInfo->pcmFreq + 1) >> 1; - - // Turn off timer 0. - REG_TM0CNT_H = 0; - - // cycles per LCD fresh 280896 - REG_TM0CNT_L = -(280896 / soundInfo->pcmSamplesPerVBlank); - - m4aSoundVSyncOn(); - - while (*(vu8 *)REG_ADDR_VCOUNT == 159) - ; - - while (*(vu8 *)REG_ADDR_VCOUNT != 159) - ; - - REG_TM0CNT_H = TIMER_ENABLE | TIMER_1CLK; -} - -void m4aSoundMode(u32 mode) -{ - struct SoundInfo *soundInfo = SOUND_INFO_PTR; - u32 temp; - - if (soundInfo->ident != ID_NUMBER) - return; - - soundInfo->ident++; - - temp = mode & (SOUND_MODE_REVERB_SET | SOUND_MODE_REVERB_VAL); - - if (temp) - soundInfo->reverb = temp & SOUND_MODE_REVERB_VAL; - - temp = mode & SOUND_MODE_MAXCHN; - - if (temp) - { - struct SoundChannel *chan; - - soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT; - - temp = MAX_DIRECTSOUND_CHANNELS; - chan = &soundInfo->chans[0]; - - while (temp != 0) - { - chan->status = 0; - temp--; - chan++; - } - } - - temp = mode & SOUND_MODE_MASVOL; - - if (temp) - soundInfo->masterVolume = temp >> SOUND_MODE_MASVOL_SHIFT; - - temp = mode & SOUND_MODE_DA_BIT; - - if (temp) - { - temp = (temp & 0x300000) >> 14; - REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | temp; - } - - temp = mode & SOUND_MODE_FREQ; - - if (temp) - { - m4aSoundVSyncOff(); - SampleFreqSet(temp); - } - - soundInfo->ident = ID_NUMBER; -} - -void SoundClear(void) -{ - struct SoundInfo *soundInfo = SOUND_INFO_PTR; - s32 i; - void *chan; - - if (soundInfo->ident != ID_NUMBER) - return; - - soundInfo->ident++; - - i = MAX_DIRECTSOUND_CHANNELS; - chan = &soundInfo->chans[0]; - - while (i > 0) - { - ((struct SoundChannel *)chan)->status = 0; - i--; - chan = (void *)((s32)chan + sizeof(struct SoundChannel)); - } - - chan = soundInfo->cgbChans; - - if (chan) - { - i = 1; - - while (i <= 4) - { - soundInfo->CgbOscOff(i); - ((struct CgbChannel *)chan)->sf = 0; - i++; - chan = (void *)((s32)chan + sizeof(struct CgbChannel)); - } - } - - soundInfo->ident = ID_NUMBER; -} - -void m4aSoundVSyncOff(void) -{ - struct SoundInfo *soundInfo = SOUND_INFO_PTR; - - if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1) - { - soundInfo->ident += 10; - - if (REG_DMA1CNT & (DMA_REPEAT << 16)) - REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; - - if (REG_DMA2CNT & (DMA_REPEAT << 16)) - REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; - - REG_DMA1CNT_H = DMA_32BIT; - REG_DMA2CNT_H = DMA_32BIT; - - CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer)); - } -} - -void m4aSoundVSyncOn(void) -{ - struct SoundInfo *soundInfo = SOUND_INFO_PTR; - u32 ident = soundInfo->ident; - - if (ident == ID_NUMBER) - return; - - REG_DMA1CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT; - REG_DMA2CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT; - - soundInfo->pcmDmaCounter = 0; - soundInfo->ident = ident - 10; -} - -void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tracks, u8 trackCount) -{ - struct SoundInfo *soundInfo; - - if (trackCount == 0) - return; - - if (trackCount > MAX_MUSICPLAYER_TRACKS) - trackCount = MAX_MUSICPLAYER_TRACKS; - - soundInfo = SOUND_INFO_PTR; - - if (soundInfo->ident != ID_NUMBER) - return; - - soundInfo->ident++; - - Clear64byte(mplayInfo); - - mplayInfo->tracks = tracks; - mplayInfo->trackCount = trackCount; - mplayInfo->status = MUSICPLAYER_STATUS_PAUSE; - - while (trackCount != 0) - { - tracks->flags = 0; - trackCount--; - tracks++; - } - - if (soundInfo->func != 0) - { - mplayInfo->func = soundInfo->func; - mplayInfo->intp = soundInfo->intp; - soundInfo->func = 0; - } - - soundInfo->intp = (u32)mplayInfo; - soundInfo->func = (u32)MPlayMain; - soundInfo->ident = ID_NUMBER; - mplayInfo->ident = ID_NUMBER; -} - -void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader) -{ - s32 i; - u8 unk_B; - struct MusicPlayerTrack *track; - - if (mplayInfo->ident != ID_NUMBER) - return; - - unk_B = mplayInfo->unk_B; - - if (!unk_B - || ((!mplayInfo->songHeader || !(mplayInfo->tracks[0].flags & MPT_FLG_START)) - && ((mplayInfo->status & MUSICPLAYER_STATUS_TRACK) == 0 - || (mplayInfo->status & MUSICPLAYER_STATUS_PAUSE))) - || (mplayInfo->priority <= songHeader->priority)) - { - mplayInfo->ident++; - mplayInfo->status = 0; - mplayInfo->songHeader = songHeader; - mplayInfo->tone = songHeader->tone; - mplayInfo->priority = songHeader->priority; - mplayInfo->clock = 0; - mplayInfo->tempoD = 150; - mplayInfo->tempoI = 150; - mplayInfo->tempoU = 0x100; - mplayInfo->tempoC = 0; - mplayInfo->fadeOI = 0; - - i = 0; - track = mplayInfo->tracks; - - while (i < songHeader->trackCount && i < mplayInfo->trackCount) - { - TrackStop(mplayInfo, track); - track->flags = MPT_FLG_EXIST | MPT_FLG_START; - track->chan = 0; - track->cmdPtr = songHeader->part[i]; - i++; - track++; - } - - while (i < mplayInfo->trackCount) - { - TrackStop(mplayInfo, track); - track->flags = 0; - i++; - track++; - } - - if (songHeader->reverb & 0x80) - m4aSoundMode(songHeader->reverb); - - mplayInfo->ident = ID_NUMBER; - } -} - -void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo) -{ - s32 i; - struct MusicPlayerTrack *track; - - if (mplayInfo->ident != ID_NUMBER) - return; - - mplayInfo->ident++; - mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE; - - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - - while (i > 0) - { - TrackStop(mplayInfo, track); - i--; - track++; - } - - mplayInfo->ident = ID_NUMBER; -} - -void FadeOutBody(struct MusicPlayerInfo *mplayInfo) -{ - s32 i; - struct MusicPlayerTrack *track; - u16 fadeOI = mplayInfo->fadeOI; - register u32 temp asm("r3"); - register u16 mask asm("r2"); - - if (fadeOI == 0) - return; - - mplayInfo->fadeOC--; - - temp = 0xFFFF; - mask = temp; - - if (mplayInfo->fadeOC != 0) - return; - - mplayInfo->fadeOC = fadeOI; - - if (mplayInfo->fadeOV & FADE_IN) - { - mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT); - - if ((u16)(mplayInfo->fadeOV & mask) >= (64 << FADE_VOL_SHIFT)) - { - mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT); - mplayInfo->fadeOI = 0; - } - } - else - { - mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT); - - if ((s16)(mplayInfo->fadeOV & mask) <= 0) - { - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - - while (i > 0) - { - register u32 fadeOV asm("r7"); - u32 val; - - TrackStop(mplayInfo, track); - - val = TEMPORARY_FADE; - fadeOV = mplayInfo->fadeOV; - val &= fadeOV; - - if (!val) - track->flags = 0; - - i--; - track++; - } - - if (mplayInfo->fadeOV & TEMPORARY_FADE) - mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE; - else - mplayInfo->status = MUSICPLAYER_STATUS_PAUSE; - - mplayInfo->fadeOI = 0; - return; - } - } - - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - - while (i > 0) - { - if (track->flags & MPT_FLG_EXIST) - { - track->volX = (mplayInfo->fadeOV >> FADE_VOL_SHIFT); - track->flags |= MPT_FLG_VOLCHG; - } - - i--; - track++; - } -} - -void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - if (track->flags & MPT_FLG_VOLSET) - { - s32 x; - s32 y; - - x = (u32)(track->vol * track->volX) >> 5; - - if (track->modT == 1) - x = (u32)(x * (track->modM + 128)) >> 7; - - y = 2 * track->pan + track->panX; - - if (track->modT == 2) - y += track->modM; - - if (y < -128) - y = -128; - else if (y > 127) - y = 127; - - track->volMR = (u32)((y + 128) * x) >> 8; - track->volML = (u32)((127 - y) * x) >> 8; - } - - if (track->flags & MPT_FLG_PITSET) - { - s32 bend = track->bend * track->bendRange; - register s32 x asm("r1") = track->tune; - x += bend; - x *= 4; - x += (track->keyShift << 8); - x += (track->keyShiftX << 8); - x += track->pitX; - - if (track->modT == 0) - x += 16 * track->modM; - - track->keyM = x >> 8; - track->pitM = x; - } - - track->flags &= ~(MPT_FLG_PITSET | MPT_FLG_VOLSET); -} - -u32 MidiKeyToCgbFreq(u8 chanNum, u8 key, u8 fineAdjust) -{ - if (chanNum == 4) - { - if (key <= 20) - { - key = 0; - } - else - { - key -= 21; - if (key > 59) - key = 59; - } - - return gNoiseTable[key]; - } - else - { - s32 val1; - s32 val2; - - if (key <= 35) - { - fineAdjust = 0; - key = 0; - } - else - { - key -= 36; - if (key > 130) - { - key = 130; - fineAdjust = 255; - } - } - - val1 = gCgbScaleTable[key]; - val1 = gCgbFreqTable[val1 & 0xF] >> (val1 >> 4); - - val2 = gCgbScaleTable[key + 1]; - val2 = gCgbFreqTable[val2 & 0xF] >> (val2 >> 4); - - return val1 + ((fineAdjust * (val2 - val1)) >> 8) + 2048; - } -} - -void CgbOscOff(u8 chanNum) -{ - switch (chanNum) - { - case 1: - REG_NR12 = 8; - REG_NR14 = 0x80; - break; - case 2: - REG_NR22 = 8; - REG_NR24 = 0x80; - break; - case 3: - REG_NR30 = 0; - break; - default: - REG_NR42 = 8; - REG_NR44 = 0x80; - } -} - -static inline int CgbPan(struct CgbChannel *chan) -{ - u32 rightVolume = chan->rightVolume; - u32 leftVolume = chan->leftVolume; - - if ((rightVolume = (u8)rightVolume) >= (leftVolume = (u8)leftVolume)) - { - if (rightVolume / 2 >= leftVolume) - { - chan->pan = 0x0F; - return 1; - } - } - else - { - if (leftVolume / 2 >= rightVolume) - { - chan->pan = 0xF0; - return 1; - } - } - - return 0; -} - -void CgbModVol(struct CgbChannel *chan) -{ - struct SoundInfo *soundInfo = SOUND_INFO_PTR; - - if ((soundInfo->mode & 1) || !CgbPan(chan)) - { - chan->pan = 0xFF; - chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4; - } - else - { - // Force chan->rightVolume and chan->leftVolume to be read from memory again, - // even though there is no reason to do so. - // The command line option "-fno-gcse" achieves the same result as this. - asm("" : : : "memory"); - - chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4; - if (chan->eg > 15) - chan->eg = 15; - } - - chan->sg = (chan->eg * chan->su + 15) >> 4; - chan->pan &= chan->panMask; -} diff --git a/src/engine/m4a_4.c b/src/engine/m4a_4.c deleted file mode 100644 index 99195ec00..000000000 --- a/src/engine/m4a_4.c +++ /dev/null @@ -1,545 +0,0 @@ -#include "gba/m4a_internal.h" - -void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo) -{ - if (mplayInfo->ident == ID_NUMBER) - { - mplayInfo->ident++; - mplayInfo->tempoU = tempo; - mplayInfo->tempoI = (mplayInfo->tempoD * mplayInfo->tempoU) >> 8; - mplayInfo->ident = ID_NUMBER; - } -} - -void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume) -{ - s32 i; - u32 bit; - struct MusicPlayerTrack *track; - - if (mplayInfo->ident != ID_NUMBER) - return; - - mplayInfo->ident++; - - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - bit = 1; - - while (i > 0) - { - if (trackBits & bit) - { - if (track->flags & MPT_FLG_EXIST) - { - track->volX = volume / 4; - track->flags |= MPT_FLG_VOLCHG; - } - } - - i--; - track++; - bit <<= 1; - } - - mplayInfo->ident = ID_NUMBER; -} - -void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 pitch) -{ - s32 i; - u32 bit; - struct MusicPlayerTrack *track; - - if (mplayInfo->ident != ID_NUMBER) - return; - - mplayInfo->ident++; - - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - bit = 1; - - while (i > 0) - { - if (trackBits & bit) - { - if (track->flags & MPT_FLG_EXIST) - { - track->keyShiftX = (s16)pitch >> 8; - track->pitX = pitch; - track->flags |= MPT_FLG_PITCHG; - } - } - - i--; - track++; - bit <<= 1; - } - - mplayInfo->ident = ID_NUMBER; -} - -void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan) -{ - s32 i; - u32 bit; - struct MusicPlayerTrack *track; - - if (mplayInfo->ident != ID_NUMBER) - return; - - mplayInfo->ident++; - - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - bit = 1; - - while (i > 0) - { - if (trackBits & bit) - { - if (track->flags & MPT_FLG_EXIST) - { - track->panX = pan; - track->flags |= MPT_FLG_VOLCHG; - } - } - - i--; - track++; - bit <<= 1; - } - - mplayInfo->ident = ID_NUMBER; -} - -void ClearModM(struct MusicPlayerTrack *track) -{ - track->lfoSpeedC = 0; - track->modM = 0; - - if (track->modT == 0) - track->flags |= MPT_FLG_PITCHG; - else - track->flags |= MPT_FLG_VOLCHG; -} - -void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth) -{ - s32 i; - u32 bit; - struct MusicPlayerTrack *track; - - if (mplayInfo->ident != ID_NUMBER) - return; - - mplayInfo->ident++; - - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - bit = 1; - - while (i > 0) - { - if (trackBits & bit) - { - if (track->flags & MPT_FLG_EXIST) - { - track->mod = modDepth; - - if (!track->mod) - ClearModM(track); - } - } - - i--; - track++; - bit <<= 1; - } - - mplayInfo->ident = ID_NUMBER; -} - -void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed) -{ - s32 i; - u32 bit; - struct MusicPlayerTrack *track; - - if (mplayInfo->ident != ID_NUMBER) - return; - - mplayInfo->ident++; - - i = mplayInfo->trackCount; - track = mplayInfo->tracks; - bit = 1; - - while (i > 0) - { - if (trackBits & bit) - { - if (track->flags & MPT_FLG_EXIST) - { - track->lfoSpeed = lfoSpeed; - - if (!track->lfoSpeed) - ClearModM(track); - } - } - - i--; - track++; - bit <<= 1; - } - - mplayInfo->ident = ID_NUMBER; -} - -#define MEMACC_COND_JUMP(cond) \ -if (cond) \ - goto cond_true; \ -else \ - goto cond_false; \ - -void ply_memacc(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - u32 op; - u8 *addr; - u8 data; - - op = *track->cmdPtr; - track->cmdPtr++; - - addr = mplayInfo->memAccArea + *track->cmdPtr; - track->cmdPtr++; - - data = *track->cmdPtr; - track->cmdPtr++; - - switch (op) - { - case 0: - *addr = data; - return; - case 1: - *addr += data; - return; - case 2: - *addr -= data; - return; - case 3: - *addr = mplayInfo->memAccArea[data]; - return; - case 4: - *addr += mplayInfo->memAccArea[data]; - return; - case 5: - *addr -= mplayInfo->memAccArea[data]; - return; - case 6: - MEMACC_COND_JUMP(*addr == data) - return; - case 7: - MEMACC_COND_JUMP(*addr != data) - return; - case 8: - MEMACC_COND_JUMP(*addr > data) - return; - case 9: - MEMACC_COND_JUMP(*addr >= data) - return; - case 10: - MEMACC_COND_JUMP(*addr <= data) - return; - case 11: - MEMACC_COND_JUMP(*addr < data) - return; - case 12: - MEMACC_COND_JUMP(*addr == mplayInfo->memAccArea[data]) - return; - case 13: - MEMACC_COND_JUMP(*addr != mplayInfo->memAccArea[data]) - return; - case 14: - MEMACC_COND_JUMP(*addr > mplayInfo->memAccArea[data]) - return; - case 15: - MEMACC_COND_JUMP(*addr >= mplayInfo->memAccArea[data]) - return; - case 16: - MEMACC_COND_JUMP(*addr <= mplayInfo->memAccArea[data]) - return; - case 17: - MEMACC_COND_JUMP(*addr < mplayInfo->memAccArea[data]) - return; - default: - return; - } - -cond_true: - { - void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[1]); - func(mplayInfo, track); - return; - } - -cond_false: - track->cmdPtr += 4; -} - -void ply_xcmd(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - u32 n = *track->cmdPtr; - track->cmdPtr++; - - gXcmdTable[n](mplayInfo, track); -} - -void ply_xxx(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[0]); - func(mplayInfo, track); -} - -#define READ_XCMD_BYTE(var, n) \ -{ \ - u32 byte = track->cmdPtr[(n)]; \ - byte <<= n * 8; \ - (var) &= ~(0xFF << (n * 8)); \ - (var) |= byte; \ -} - -void ply_xwave(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - u32 wav; - - READ_XCMD_BYTE(wav, 0) // UB: uninitialized variable - READ_XCMD_BYTE(wav, 1) - READ_XCMD_BYTE(wav, 2) - READ_XCMD_BYTE(wav, 3) - - track->tone.wav = (struct WaveData *)wav; - track->cmdPtr += 4; -} - -void ply_xtype(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->tone.type = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xatta(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->tone.attack = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xdeca(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->tone.decay = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xsust(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->tone.sustain = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xrele(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->tone.release = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xiecv(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->echoVolume = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xiecl(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->echoLength = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xleng(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->tone.length = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xswee(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - track->tone.pan_sweep = *track->cmdPtr; - track->cmdPtr++; -} - -void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - u32 unk; - - READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable - READ_XCMD_BYTE(unk, 1) - - if (track->unk_3A < (u16)unk) - { - track->unk_3A++; - track->cmdPtr -= 2; - track->wait = 1; - } - else - { - track->unk_3A = 0; - track->cmdPtr += 2; - } -} - -void ply_xcmd_0D(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) -{ - u32 unk; - - READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable - READ_XCMD_BYTE(unk, 1) - READ_XCMD_BYTE(unk, 2) - READ_XCMD_BYTE(unk, 3) - - track->unk_3C = unk; - track->cmdPtr += 4; -} - -void DummyFunc(void) -{ -} - -struct MusicPlayerInfo *SetPokemonCryTone(struct ToneData *tone) -{ - u32 maxClock = 0; - s32 maxClockIndex = 0; - s32 i; - struct MusicPlayerInfo *mplayInfo; - - for (i = 0; i < MAX_POKEMON_CRIES; i++) - { - struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2]; - - if (!track->flags && (!track->chan || track->chan->track != track)) - goto start_song; - - if (maxClock < gPokemonCryMusicPlayers[i].clock) - { - maxClock = gPokemonCryMusicPlayers[i].clock; - maxClockIndex = i; - } - } - - i = maxClockIndex; - -start_song: - mplayInfo = &gPokemonCryMusicPlayers[i]; - mplayInfo->ident++; - -#define CRY ((s32)&gPokemonCrySongs + i * sizeof(struct PokemonCrySong)) -#define CRY_OFS(field) offsetof(struct PokemonCrySong, field) - - memcpy((void *)CRY, &gPokemonCrySong, sizeof(struct PokemonCrySong)); - - *(u32 *)(CRY + CRY_OFS(tone)) = (u32)tone; - *(u32 *)(CRY + CRY_OFS(part)) = CRY + CRY_OFS(part0); - *(u32 *)(CRY + CRY_OFS(part) + 4) = CRY + CRY_OFS(part1); - *(u32 *)(CRY + CRY_OFS(gotoTarget)) = CRY + CRY_OFS(cont); - -#undef CRY_OFS -#undef CRY - - mplayInfo->ident = ID_NUMBER; - - MPlayStart(mplayInfo, (struct SongHeader *)(&gPokemonCrySongs[i])); - - return mplayInfo; -} - -void SetPokemonCryVolume(u8 val) -{ - gPokemonCrySong.volumeValue = val & 0x7F; -} - -void SetPokemonCryPanpot(s8 val) -{ - gPokemonCrySong.panValue = (val + C_V) & 0x7F; -} - -void SetPokemonCryPitch(s16 val) -{ - s16 b = val + 0x80; - u8 a = gPokemonCrySong.tuneValue2 - gPokemonCrySong.tuneValue; - gPokemonCrySong.tieKeyValue = (b >> 8) & 0x7F; - gPokemonCrySong.tuneValue = (b >> 1) & 0x7F; - gPokemonCrySong.tuneValue2 = (a + ((b >> 1) & 0x7F)) & 0x7F; -} - -void SetPokemonCryLength(u16 val) -{ - gPokemonCrySong.unkCmd0CParam = val; -} - -void SetPokemonCryRelease(u8 val) -{ - gPokemonCrySong.releaseValue = val; -} - -void SetPokemonCryProgress(u32 val) -{ - gPokemonCrySong.unkCmd0DParam = val; -} - -int IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo) -{ - struct MusicPlayerTrack *track = mplayInfo->tracks; - - if (track->chan && track->chan->track == track) - return 1; - else - return 0; -} - -void SetPokemonCryChorus(s8 val) -{ - if (val) - { - gPokemonCrySong.trackCount = 2; - gPokemonCrySong.tuneValue2 = (val + gPokemonCrySong.tuneValue) & 0x7F; - } - else - { - gPokemonCrySong.trackCount = 1; - } -} - -void SetPokemonCryStereo(u32 val) -{ - struct SoundInfo *soundInfo = SOUND_INFO_PTR; - - if (val) - { - REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT - | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT - | SOUND_ALL_MIX_FULL; - soundInfo->mode &= ~1; - } - else - { - REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT | SOUND_B_RIGHT_OUTPUT - | SOUND_A_TIMER_0 | SOUND_A_LEFT_OUTPUT | SOUND_A_RIGHT_OUTPUT - | SOUND_B_MIX_HALF | SOUND_A_MIX_HALF | SOUND_CGB_MIX_FULL; - soundInfo->mode |= 1; - } -} - -void SetPokemonCryPriority(u8 val) -{ - gPokemonCrySong.priority = val; -} diff --git a/src/engine/m4a_tables.c b/src/engine/m4a_tables.c deleted file mode 100644 index 91f00a31d..000000000 --- a/src/engine/m4a_tables.c +++ /dev/null @@ -1,307 +0,0 @@ -#include "gba/m4a_internal.h" - -// Some of these functions have different signatures, so we need to make this -// an array of void pointers or a struct. It's simpler to just make it an array -// for now. -void * const gMPlayJumpTableTemplate[] = -{ - ply_fine, - ply_goto, - ply_patt, - ply_pend, - ply_rept, - ply_fine, - ply_fine, - ply_fine, - ply_fine, - ply_prio, - ply_tempo, - ply_keysh, - ply_voice, - ply_vol, - ply_pan, - ply_bend, - ply_bendr, - ply_lfos, - ply_lfodl, - ply_mod, - ply_modt, - ply_fine, - ply_fine, - ply_tune, - ply_fine, - ply_fine, - ply_fine, - ply_port, - ply_fine, - ply_endtie, - SampleFreqSet, - TrackStop, - FadeOutBody, - TrkVolPitSet, - RealClearChain, - SoundMainBTM, -}; - -// This is a table of deltas between sample values in compressed PCM data. -const s8 gDeltaEncodingTable[] = -{ - 0, - 1, - 4, - 9, - 16, - 25, - 36, - 49, - -64, - -49, - -36, - -25, - -16, - -9, - -4, - -1, -}; - -const u8 gScaleTable[] = -{ - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, - 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, - 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, -}; - -const u32 gFreqTable[] = -{ - 2147483648u, - 2275179671u, - 2410468894u, - 2553802834u, - 2705659852u, - 2866546760u, - 3037000500u, - 3217589947u, - 3408917802u, - 3611622603u, - 3826380858u, - 4053909305u, -}; - -const u16 gPcmSamplesPerVBlankTable[] = -{ - 96, - 132, - 176, - 224, - 264, - 304, - 352, - 448, - 528, - 608, - 672, - 704, -}; - -const u8 gCgbScaleTable[] = -{ - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, - 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, -}; - -const s16 gCgbFreqTable[] = -{ - -2004, - -1891, - -1785, - -1685, - -1591, - -1501, - -1417, - -1337, - -1262, - -1192, - -1125, - -1062, -}; - -const u8 gNoiseTable[] = -{ - 0xD7, 0xD6, 0xD5, 0xD4, - 0xC7, 0xC6, 0xC5, 0xC4, - 0xB7, 0xB6, 0xB5, 0xB4, - 0xA7, 0xA6, 0xA5, 0xA4, - 0x97, 0x96, 0x95, 0x94, - 0x87, 0x86, 0x85, 0x84, - 0x77, 0x76, 0x75, 0x74, - 0x67, 0x66, 0x65, 0x64, - 0x57, 0x56, 0x55, 0x54, - 0x47, 0x46, 0x45, 0x44, - 0x37, 0x36, 0x35, 0x34, - 0x27, 0x26, 0x25, 0x24, - 0x17, 0x16, 0x15, 0x14, - 0x07, 0x06, 0x05, 0x04, - 0x03, 0x02, 0x01, 0x00, -}; - -const u8 gCgb3Vol[] = -{ - 0x00, 0x00, - 0x60, 0x60, 0x60, 0x60, - 0x40, 0x40, 0x40, 0x40, - 0x80, 0x80, 0x80, 0x80, - 0x20, 0x20, -}; - -const u8 gClockTable[] = -{ - 0x00, - 0x01, - 0x02, - 0x03, - 0x04, - 0x05, - 0x06, - 0x07, - 0x08, - 0x09, - 0x0A, - 0x0B, - 0x0C, - 0x0D, - 0x0E, - 0x0F, - 0x10, - 0x11, - 0x12, - 0x13, - 0x14, - 0x15, - 0x16, - 0x17, - 0x18, - 0x1C, - 0x1E, - 0x20, - 0x24, - 0x28, - 0x2A, - 0x2C, - 0x30, - 0x34, - 0x36, - 0x38, - 0x3C, - 0x40, - 0x42, - 0x44, - 0x48, - 0x4C, - 0x4E, - 0x50, - 0x54, - 0x58, - 0x5A, - 0x5C, - 0x60, -}; - -#define FINE 0xb1 -#define GOTO 0xb2 -#define PATT 0xb3 -#define PEND 0xb4 -#define REPT 0xb5 -#define MEMACC 0xb9 -#define PRIO 0xba -#define TEMPO 0xbb -#define KEYSH 0xbc -#define VOICE 0xbd -#define VOL 0xbe -#define PAN 0xbf -#define BEND 0xc0 -#define BENDR 0xc1 -#define LFOS 0xc2 -#define LFODL 0xc3 -#define MOD 0xc4 -#define MODT 0xc5 -#define TUNE 0xc8 - -#define XCMD 0xcd -#define xRELE 0x07 -#define xIECV 0x08 -#define xIECL 0x09 - -#define EOT 0xce -#define TIE 0xcf - -const struct PokemonCrySong gPokemonCrySongTemplate = -{ - 1, // track count - 0, // block count - 255, // priority - 0, // reverb - (struct ToneData *)&voicegroup_pokemon_cry, - NULL, - NULL, - 0, - TUNE, // part 0 - C_V, // TUNE value - GOTO, - 0, // GOTO target address - TUNE, // part 1 - C_V + 16, // TUNE value - {VOICE, 0}, // part 0 jumps here with GOTO - VOL, - 127, // volume - {XCMD, 0x0D}, - 0, // unk value - {XCMD, xRELE}, - 0, // release - PAN, - C_V, // PAN value - TIE, - 60, // TIE key (default is Cn3) - 127, // TIE velocity - {XCMD, 0x0C}, - 60, // unk value - {EOT, FINE} // end -}; - -const XcmdFunc gXcmdTable[] = -{ - ply_xxx, - ply_xwave, - ply_xtype, - ply_xxx, - ply_xatta, - ply_xdeca, - ply_xsust, - ply_xrele, - ply_xiecv, - ply_xiecl, - ply_xleng, - ply_xswee, - ply_xcmd_0C, - ply_xcmd_0D, -}; diff --git a/src/engine/siirtc.c b/src/engine/siirtc.c deleted file mode 100644 index 965a068f1..000000000 --- a/src/engine/siirtc.c +++ /dev/null @@ -1,432 +0,0 @@ -// Ruby/Sapphire/Emerald cartridges contain a Seiko Instruments Inc. (SII) -// S-3511A real-time clock (RTC). This library ("SIIRTC_V001") is for -// communicating with the RTC. - -#include "gba/gba.h" -#include "siirtc.h" - -#define STATUS_INTFE 0x02 // frequency interrupt enable -#define STATUS_INTME 0x08 // per-minute interrupt enable -#define STATUS_INTAE 0x20 // alarm interrupt enable -#define STATUS_24HOUR 0x40 // 0: 12-hour mode, 1: 24-hour mode -#define STATUS_POWER 0x80 // power on or power failure occurred - -#define TEST_MODE 0x80 // flag in the "second" byte - -#define ALARM_AM 0x00 -#define ALARM_PM 0x80 - -#define OFFSET_YEAR offsetof(struct SiiRtcInfo, year) -#define OFFSET_MONTH offsetof(struct SiiRtcInfo, month) -#define OFFSET_DAY offsetof(struct SiiRtcInfo, day) -#define OFFSET_DAY_OF_WEEK offsetof(struct SiiRtcInfo, dayOfWeek) -#define OFFSET_HOUR offsetof(struct SiiRtcInfo, hour) -#define OFFSET_MINUTE offsetof(struct SiiRtcInfo, minute) -#define OFFSET_SECOND offsetof(struct SiiRtcInfo, second) -#define OFFSET_STATUS offsetof(struct SiiRtcInfo, status) -#define OFFSET_ALARM_HOUR offsetof(struct SiiRtcInfo, alarmHour) -#define OFFSET_ALARM_MINUTE offsetof(struct SiiRtcInfo, alarmMinute) - -#define INFO_BUF(info, index) (*((u8 *)(info) + (index))) - -#define DATETIME_BUF(info, index) INFO_BUF(info, OFFSET_YEAR + index) -#define DATETIME_BUF_LEN (OFFSET_SECOND - OFFSET_YEAR + 1) - -#define TIME_BUF(info, index) INFO_BUF(info, OFFSET_HOUR + index) -#define TIME_BUF_LEN (OFFSET_SECOND - OFFSET_HOUR + 1) - -#define WR 0 // command for writing data -#define RD 1 // command for reading data - -#define CMD(n) (0x60 | (n << 1)) - -#define CMD_RESET CMD(0) -#define CMD_STATUS CMD(1) -#define CMD_DATETIME CMD(2) -#define CMD_TIME CMD(3) -#define CMD_ALARM CMD(4) - -#define GPIO_PORT_DATA (*(vu16 *)0x80000C4) -#define GPIO_PORT_DIRECTION (*(vu16 *)0x80000C6) -#define GPIO_PORT_READ_ENABLE (*(vu16 *)0x80000C8) - -extern vu16 GPIOPortDirection; - -static u16 sDummy; // unused variable -static bool8 sLocked; - -static int WriteCommand(u8 value); -static int WriteData(u8 value); -static u8 ReadData(); -static void EnableGpioPortRead(); -static void DisableGpioPortRead(); - -static const char AgbLibRtcVersion[] = "SIIRTC_V001"; - -void SiiRtcUnprotect() -{ - EnableGpioPortRead(); - sLocked = FALSE; -} - -void SiiRtcProtect() -{ - DisableGpioPortRead(); - sLocked = TRUE; -} - -u8 SiiRtcProbe() -{ - u8 errorCode; - struct SiiRtcInfo rtc; - - if (!SiiRtcGetStatus(&rtc)) - return 0; - - errorCode = 0; - - if ((rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == SIIRTCINFO_POWER - || (rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == 0) - { - // The RTC is in 12-hour mode. Reset it and switch to 24-hour mode. - - // Note that the conditions are redundant and equivalent to simply - // "(rtc.status & SIIRTCINFO_24HOUR) == 0". It's possible that this - // was also intended to handle resetting the clock after power failure - // but a mistake was made. - - if (!SiiRtcReset()) - return 0; - - errorCode++; - } - - SiiRtcGetTime(&rtc); - - if (rtc.second & TEST_MODE) - { - // The RTC is in test mode. Reset it to leave test mode. - - if (!SiiRtcReset()) - return (errorCode << 4) & 0xF0; - - errorCode++; - } - - return (errorCode << 4) | 1; -} - -bool8 SiiRtcReset() -{ - u8 result; - struct SiiRtcInfo rtc; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_RESET | WR); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - rtc.status = SIIRTCINFO_24HOUR; - - result = SiiRtcSetStatus(&rtc); - - return result; -} - -bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc) -{ - u8 statusData; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_STATUS | RD); - - GPIO_PORT_DIRECTION = 5; - - statusData = ReadData(); - - rtc->status = (statusData & (STATUS_POWER | STATUS_24HOUR)) - | ((statusData & STATUS_INTAE) >> 3) - | ((statusData & STATUS_INTME) >> 2) - | ((statusData & STATUS_INTFE) >> 1); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc) -{ - u8 statusData; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - statusData = STATUS_24HOUR - | ((rtc->status & SIIRTCINFO_INTAE) << 3) - | ((rtc->status & SIIRTCINFO_INTME) << 2) - | ((rtc->status & SIIRTCINFO_INTFE) << 1); - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_STATUS | WR); - - WriteData(statusData); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc) -{ - u8 i; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_DATETIME | RD); - - GPIO_PORT_DIRECTION = 5; - - for (i = 0; i < DATETIME_BUF_LEN; i++) - DATETIME_BUF(rtc, i) = ReadData(); - - INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc) -{ - u8 i; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_DATETIME | WR); - - for (i = 0; i < DATETIME_BUF_LEN; i++) - WriteData(DATETIME_BUF(rtc, i)); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc) -{ - u8 i; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_TIME | RD); - - GPIO_PORT_DIRECTION = 5; - - for (i = 0; i < TIME_BUF_LEN; i++) - TIME_BUF(rtc, i) = ReadData(); - - INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc) -{ - u8 i; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIO_PORT_DIRECTION = 7; - - WriteCommand(CMD_TIME | WR); - - for (i = 0; i < TIME_BUF_LEN; i++) - WriteData(TIME_BUF(rtc, i)); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc) -{ - u8 i; - u8 alarmData[2]; - - if (sLocked == TRUE) - return FALSE; - - sLocked = TRUE; - - // Decode BCD. - alarmData[0] = (rtc->alarmHour & 0xF) + 10 * ((rtc->alarmHour >> 4) & 0xF); - - // The AM/PM flag must be set correctly even in 24-hour mode. - - if (alarmData[0] < 12) - alarmData[0] = rtc->alarmHour | ALARM_AM; - else - alarmData[0] = rtc->alarmHour | ALARM_PM; - - alarmData[1] = rtc->alarmMinute; - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; - - GPIOPortDirection = 7; // Why is this the only instance that uses a symbol? - - WriteCommand(CMD_ALARM | WR); - - for (i = 0; i < 2; i++) - WriteData(alarmData[i]); - - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; - - sLocked = FALSE; - - return TRUE; -} - -static int WriteCommand(u8 value) -{ - u8 i; - u8 temp; - - for (i = 0; i < 8; i++) - { - temp = ((value >> (7 - i)) & 1); - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 5; - } - - // control reaches end of non-void function -} - -static int WriteData(u8 value) -{ - u8 i; - u8 temp; - - for (i = 0; i < 8; i++) - { - temp = ((value >> i) & 1); - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 5; - } - - // control reaches end of non-void function -} - -static u8 ReadData() -{ - u8 i; - u8 temp; - u8 value; - - for (i = 0; i < 8; i++) - { - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 5; - - temp = ((GPIO_PORT_DATA & 2) >> 1); - value = (value >> 1) | (temp << 7); // UB: accessing uninitialized var - } - - return value; -} - -static void EnableGpioPortRead() -{ - GPIO_PORT_READ_ENABLE = 1; -} - -static void DisableGpioPortRead() -{ - GPIO_PORT_READ_ENABLE = 0; -} diff --git a/src/libs/agb_flash.c b/src/libs/agb_flash.c new file mode 100644 index 000000000..340d469a7 --- /dev/null +++ b/src/libs/agb_flash.c @@ -0,0 +1,295 @@ +#include "gba/gba.h" +#include "gba/flash_internal.h" + +static u8 sTimerNum; +static u16 sTimerCount; +static vu16 *sTimerReg; +static u16 sSavedIme; + +u8 gFlashTimeoutFlag; +u8 (*PollFlashStatus)(u8 *); +u16 (*WaitForFlashWrite)(u8 phase, u8 *addr, u8 lastData); +u16 (*ProgramFlashSector)(u16 sectorNum, u8 *src); +const struct FlashType *gFlash; +u16 (*ProgramFlashByte)(u16 sectorNum, u32 offset, u8 data); +u16 gFlashNumRemainingBytes; +u16 (*EraseFlashChip)(); +u16 (*EraseFlashSector)(u16 sectorNum); +const u16 *gFlashMaxTime; + +void SetReadFlash1(u16 *dest); + +void SwitchFlashBank(u8 bankNum) +{ + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xB0); + FLASH_WRITE(0x0000, bankNum); +} + +#define DELAY() \ +do { \ + vu16 i; \ + for (i = 20000; i != 0; i--) \ + ; \ +} while (0) + +u16 ReadFlashId(void) +{ + u16 flashId; + u16 readFlash1Buffer[0x20]; + u8 (*readFlash1)(u8 *); + + SetReadFlash1(readFlash1Buffer); + readFlash1 = (u8 (*)(u8 *))((s32)readFlash1Buffer + 1); + + // Enter ID mode. + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x90); + DELAY(); + + flashId = readFlash1(FLASH_BASE + 1) << 8; + flashId |= readFlash1(FLASH_BASE); + + // Leave ID mode. + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xF0); + FLASH_WRITE(0x5555, 0xF0); + DELAY(); + + return flashId; +} + +void FlashTimerIntr(void) +{ + if (sTimerCount != 0 && --sTimerCount == 0) + gFlashTimeoutFlag = 1; +} + +u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)) +{ + if (timerNum >= 4) + return 1; + + sTimerNum = timerNum; + sTimerReg = ®_TMCNT(sTimerNum); + *intrFunc = FlashTimerIntr; + return 0; +} + +void StartFlashTimer(u8 phase) +{ + const u16 *maxTime = &gFlashMaxTime[phase * 3]; + sSavedIme = REG_IME; + REG_IME = 0; + sTimerReg[1] = 0; + REG_IE |= (INTR_FLAG_TIMER0 << sTimerNum); + gFlashTimeoutFlag = 0; + sTimerCount = *maxTime++; + *sTimerReg++ = *maxTime++; + *sTimerReg-- = *maxTime++; + REG_IF = (INTR_FLAG_TIMER0 << sTimerNum); + REG_IME = 1; +} + +void StopFlashTimer(void) +{ + REG_IME = 0; + *sTimerReg++ = 0; + *sTimerReg-- = 0; + REG_IE &= ~(INTR_FLAG_TIMER0 << sTimerNum); + REG_IME = sSavedIme; +} + +u8 ReadFlash1(u8 *addr) +{ + return *addr; +} + +void SetReadFlash1(u16 *dest) +{ + u16 *src; + u16 i; + + PollFlashStatus = (u8 (*)(u8 *))((s32)dest + 1); + + src = (u16 *)ReadFlash1; + src = (u16 *)((s32)src ^ 1); + + i = ((s32)SetReadFlash1 - (s32)ReadFlash1) >> 1; + + while (i != 0) + { + *dest++ = *src++; + i--; + } +} + +void ReadFlash_Core(u8 *src, u8 *dest, u32 size) +{ + while (size-- != 0) + { + *dest++ = *src++; + } +} + +void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) +{ + u8 *src; + u16 i; + u16 readFlash_Core_Buffer[0x40]; + u16 *funcSrc; + u16 *funcDest; + void (*readFlash_Core)(u8 *, u8 *, u32); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + if (gFlash->romSize == FLASH_ROM_SIZE_1M) + { + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + } + + funcSrc = (u16 *)ReadFlash_Core; + funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcDest = readFlash_Core_Buffer; + + i = ((s32)ReadFlash - (s32)ReadFlash_Core) >> 1; + + while (i != 0) + { + *funcDest++ = *funcSrc++; + i--; + } + + readFlash_Core = (void (*)(u8 *, u8 *, u32))((s32)readFlash_Core_Buffer + 1); + + src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; + + readFlash_Core(src, dest, size); +} + +u32 VerifyFlashSector_Core(u8 *src, u8 *tgt, u32 size) +{ + while (size-- != 0) + { + if (*tgt++ != *src++) + return (u32)(tgt - 1); + } + + return 0; +} + +u32 VerifyFlashSector(u16 sectorNum, u8 *src) +{ + u16 i; + u16 verifyFlashSector_Core_Buffer[0x80]; + u16 *funcSrc; + u16 *funcDest; + u8 *tgt; + u16 size; + u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + if (gFlash->romSize == FLASH_ROM_SIZE_1M) + { + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + } + + funcSrc = (u16 *)VerifyFlashSector_Core; + funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcDest = verifyFlashSector_Core_Buffer; + + i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; + + while (i != 0) + { + *funcDest++ = *funcSrc++; + i--; + } + + verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); + + tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); + size = gFlash->sector.size; + + return verifyFlashSector_Core(src, tgt, size); // return 0 if verified. +} + +u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) +{ + u16 i; + u16 verifyFlashSector_Core_Buffer[0x80]; + u16 *funcSrc; + u16 *funcDest; + u8 *tgt; + u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32); + + if (gFlash->romSize == FLASH_ROM_SIZE_1M) + { + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + } + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + funcSrc = (u16 *)VerifyFlashSector_Core; + funcSrc = (u16 *)((s32)funcSrc ^ 1); + funcDest = verifyFlashSector_Core_Buffer; + + i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; + + while (i != 0) + { + *funcDest++ = *funcSrc++; + i--; + } + + verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); + + tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); + + return verifyFlashSector_Core(src, tgt, n); +} + +u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src) // 3rd is unused +{ + u8 i; + u32 result; + + for (i = 0; i < 3; i++) // 3 attempts + { + result = ProgramFlashSector(sectorNum, src); + if (result != 0) + continue; + + result = VerifyFlashSector(sectorNum, src); + if (result == 0) + break; + } + + return result; // return 0 if verified and programmed. +} + +u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, u8 *src, u32 n) +{ + u8 i; + u32 result; + + for (i = 0; i < 3; i++) + { + result = ProgramFlashSector(sectorNum, src); + if (result != 0) + continue; + + result = VerifyFlashSectorNBytes(sectorNum, src, n); + if (result == 0) + break; + } + + return result; +} diff --git a/src/libs/agb_flash_1m.c b/src/libs/agb_flash_1m.c new file mode 100644 index 000000000..e249fab9a --- /dev/null +++ b/src/libs/agb_flash_1m.c @@ -0,0 +1,86 @@ +#include "gba/gba.h" +#include "gba/flash_internal.h" + +static const char AgbLibFlashVersion[] = "FLASH1M_V103"; + +const struct FlashSetupInfo * const sSetupInfos[] = +{ + &MX29L010, + &LE26FV10N1TS, + &DefaultFlash +}; + +u16 IdentifyFlash(void) +{ + u16 result; + u16 flashId; + const struct FlashSetupInfo * const *setupInfo; + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + flashId = ReadFlashId(); + + setupInfo = sSetupInfos; + result = 1; + + for (;;) + { + if ((*setupInfo)->type.ids.separate.makerId == 0) + break; + + if (flashId == (*setupInfo)->type.ids.joined) + { + result = 0; + break; + } + + setupInfo++; + } + + ProgramFlashByte = (*setupInfo)->programFlashByte; + ProgramFlashSector = (*setupInfo)->programFlashSector; + EraseFlashChip = (*setupInfo)->eraseFlashChip; + EraseFlashSector = (*setupInfo)->eraseFlashSector; + WaitForFlashWrite = (*setupInfo)->WaitForFlashWrite; + gFlashMaxTime = (*setupInfo)->maxTime; + gFlash = &(*setupInfo)->type; + + return result; +} + +u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData) +{ + u16 result = 0; + u8 status; + + StartFlashTimer(phase); + + while ((status = PollFlashStatus(addr)) != lastData) + { + if (status & 0x20) + { + // The write operation exceeded the flash chip's time limit. + + if (PollFlashStatus(addr) == lastData) + break; + + FLASH_WRITE(0x5555, 0xF0); + result = phase | 0xA000u; + break; + } + + if (gFlashTimeoutFlag) + { + if (PollFlashStatus(addr) == lastData) + break; + + FLASH_WRITE(0x5555, 0xF0); + result = phase | 0xC000u; + break; + } + } + + StopFlashTimer(); + + return result; +} diff --git a/src/libs/agb_flash_le.c b/src/libs/agb_flash_le.c new file mode 100644 index 000000000..39d956e27 --- /dev/null +++ b/src/libs/agb_flash_le.c @@ -0,0 +1,31 @@ +#include "gba/gba.h" +#include "gba/flash_internal.h" + +const u16 leMaxTime[] = +{ + 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, +}; + +const struct FlashSetupInfo LE26FV10N1TS = +{ + ProgramFlashByte_MX, + ProgramFlashSector_MX, + EraseFlashChip_MX, + EraseFlashSector_MX, + WaitForFlashWrite_Common, + leMaxTime, + { + 131072, // ROM size + { + 4096, // sector size + 12, // bit shift to multiply by sector size (4096 == 1 << 12) + 32, // number of sectors + 0 // appears to be unused + }, + { 3, 1 }, // wait state setup data + { { 0x62, 0x13 } } // ID + } +}; diff --git a/src/libs/agb_flash_mx.c b/src/libs/agb_flash_mx.c new file mode 100644 index 000000000..67348901f --- /dev/null +++ b/src/libs/agb_flash_mx.c @@ -0,0 +1,197 @@ +#include "gba/gba.h" +#include "gba/flash_internal.h" + +const u16 mxMaxTime[] = +{ + 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, + 2000, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, +}; + +const struct FlashSetupInfo MX29L010 = +{ + ProgramFlashByte_MX, + ProgramFlashSector_MX, + EraseFlashChip_MX, + EraseFlashSector_MX, + WaitForFlashWrite_Common, + mxMaxTime, + { + 131072, // ROM size + { + 4096, // sector size + 12, // bit shift to multiply by sector size (4096 == 1 << 12) + 32, // number of sectors + 0 // appears to be unused + }, + { 3, 1 }, // wait state setup data +#if defined(GERMAN) && defined(SAPPHIRE) + { { 0xBF, 0xD4 } } // ID +#else + { { 0xC2, 0x09 } } // ID +#endif + } +}; + +const struct FlashSetupInfo DefaultFlash = +{ + ProgramFlashByte_MX, + ProgramFlashSector_MX, + EraseFlashChip_MX, + EraseFlashSector_MX, + WaitForFlashWrite_Common, + mxMaxTime, + { + 131072, // ROM size + { + 4096, // sector size + 12, // bit shift to multiply by sector size (4096 == 1 << 12) + 32, // number of sectors + 0 // appears to be unused + }, + { 3, 1 }, // wait state setup data + { { 0x00, 0x00 } } // ID of 0 + } +}; + +u16 EraseFlashChip_MX(void) +{ + u16 result; + u16 readFlash1Buffer[0x20]; + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; + + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x80); + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x10); + + SetReadFlash1(readFlash1Buffer); + + result = WaitForFlashWrite(3, FLASH_BASE, 0xFF); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + return result; +} + +u16 EraseFlashSector_MX(u16 sectorNum) +{ + u16 numTries; + u16 result; + u8 *addr; + u16 readFlash1Buffer[0x20]; + + if (sectorNum >= gFlash->sector.count) + return 0x80FF; + + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + + numTries = 0; + +try_erase: + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; + + addr = FLASH_BASE + (sectorNum << gFlash->sector.shift); + + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x80); + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + *addr = 0x30; + + SetReadFlash1(readFlash1Buffer); + + result = WaitForFlashWrite(2, addr, 0xFF); + + if (!(result & 0xA000) || numTries > 3) + goto done; + + numTries++; + + goto try_erase; + +done: + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + return result; +} + +u16 ProgramFlashByte_MX(u16 sectorNum, u32 offset, u8 data) +{ + u8 *addr; + u16 readFlash1Buffer[0x20]; + + if (offset >= gFlash->sector.size) + return 0x8000; + + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + + addr = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; + + SetReadFlash1(readFlash1Buffer); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; + + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xA0); + *addr = data; + + return WaitForFlashWrite(1, addr, data); +} + +static u16 ProgramByte(u8 *src, u8 *dest) +{ + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xA0); + *dest = *src; + + return WaitForFlashWrite(1, dest, *src); +} + +u16 ProgramFlashSector_MX(u16 sectorNum, u8 *src) +{ + u16 result; + u8 *dest; + u16 readFlash1Buffer[0x20]; + + if (sectorNum >= gFlash->sector.count) + return 0x80FF; + + result = EraseFlashSector_MX(sectorNum); + + if (result != 0) + return result; + + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + + SetReadFlash1(readFlash1Buffer); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gFlash->wait[0]; + + gFlashNumRemainingBytes = gFlash->sector.size; + dest = FLASH_BASE + (sectorNum << gFlash->sector.shift); + + while (gFlashNumRemainingBytes > 0) + { + result = ProgramByte(src, dest); + + if (result != 0) + break; + + gFlashNumRemainingBytes--; + src++; + dest++; + } + + return result; +} diff --git a/src/libs/libc.c b/src/libs/libc.c new file mode 100644 index 000000000..920673e3e --- /dev/null +++ b/src/libs/libc.c @@ -0,0 +1,143 @@ +#include "global.h" +#include + +#define LBLOCKSIZE (sizeof(long)) + +// Nonzero if (long)X contains a NULL byte. +#define CONTAINSNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) + +// Nonzero if X is not aligned on a "long" boundary. +#define UNALIGNED(X) ((long)X & (LBLOCKSIZE - 1)) + +void *memcpy(void *dst0, const void *src0, size_t len0) +{ + char *dst = dst0; + const char *src = src0; + long *aligned_dst; + const long *aligned_src; + unsigned int len = len0; + + // If the size is small, or either src or dst is unaligned, + // then go to the byte copy loop. This should be rare. + if (len >= 16 && !(UNALIGNED(src) | UNALIGNED(dst))) + { + aligned_dst = (long *)dst; + aligned_src = (long *)src; + + // Copy 4X long words at a time if possible. + while (len >= 16) + { + *aligned_dst++ = *aligned_src++; + *aligned_dst++ = *aligned_src++; + *aligned_dst++ = *aligned_src++; + *aligned_dst++ = *aligned_src++; + len -= 16; + } + + // Copy one long word at a time if possible + while (len >= 4) + { + *aligned_dst++ = *aligned_src++; + len -= 4; + } + + dst = (char *)aligned_dst; + src = (char *)aligned_src; + } + + // Pick up any remaining bytes with a byte copier. + while (len--) + *dst++ = *src++; + + return dst0; +} + +void *memset(void *m, int c, size_t n) +{ + char *s = (char *)m; + int count, i; + unsigned long buffer; + unsigned long *aligned_addr; + unsigned char *unaligned_addr; + + // If the size is small or m is unaligned, + // then go to the byte copy loop. This should be rare. + if (n >= LBLOCKSIZE && !UNALIGNED(m)) + { + // We know that n is large and m is word-aligned. + aligned_addr = (unsigned long *)m; + + // Store C into each char sized location in buffer so that + // we can set large blocks quickly. + c &= 0xFF; + if (LBLOCKSIZE == 4) + { + buffer = (c << 8) | c; + buffer |= (buffer << 16); + } + else + { + buffer = 0; + for (i = 0; i < LBLOCKSIZE; i++) + buffer = (buffer << 8) | c; + } + + while (n >= LBLOCKSIZE * 4) + { + *aligned_addr++ = buffer; + *aligned_addr++ = buffer; + *aligned_addr++ = buffer; + *aligned_addr++ = buffer; + n -= LBLOCKSIZE * 4; + } + while (n >= LBLOCKSIZE) + { + *aligned_addr++ = buffer; + n -= LBLOCKSIZE; + } + + s = (char *)aligned_addr; + } + + // Pick up the remainder with a bytewise loop. + while (n--) + *s++ = (char)c; + + return m; +} + +int strcmp(const char *s1, const char *s2) +{ + unsigned long *a1; + unsigned long *a2; + + // If s1 or s2 are unaligned, then skip this and compare bytes. + if (!(UNALIGNED(s1) | UNALIGNED(s2))) + { + // Compare them a word at a time. + a1 = (unsigned long *)s1; + a2 = (unsigned long *)s2; + while (*a1 == *a2) + { + // If *a1 == *a2, and we find a null in *a1, + // then the strings must be equal, so return zero. + if (CONTAINSNULL(*a1)) + return 0; + + a1++; + a2++; + } + + s1 = (char *)a1; + s2 = (char *)a2; + } + + // Check the remaining few bytes. + while (*s1 != '\0' && *s1 == *s2) + { + s1++; + s2++; + } + + return (*(unsigned char *) s1) - (*(unsigned char *) s2); +} diff --git a/src/libs/m4a_2.c b/src/libs/m4a_2.c new file mode 100644 index 000000000..2d3c65848 --- /dev/null +++ b/src/libs/m4a_2.c @@ -0,0 +1,912 @@ +#include "gba/m4a_internal.h" + +#define BSS_CODE __attribute__((section(".bss.code"))) + +BSS_CODE ALIGNED(4) char SoundMainRAM_Buffer[0x800] = {0}; + +struct SoundInfo gSoundInfo; +struct PokemonCrySong gPokemonCrySongs[MAX_POKEMON_CRIES]; +struct MusicPlayerInfo gPokemonCryMusicPlayers[MAX_POKEMON_CRIES]; +void *gMPlayJumpTable[36]; +struct CgbChannel gCgbChans[4]; +struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2]; +struct PokemonCrySong gPokemonCrySong; +struct MusicPlayerInfo gMPlay_BGM; +struct MusicPlayerInfo gMPlay_SE1; +struct MusicPlayerInfo gMPlay_SE2; +struct MusicPlayerInfo gMPlay_SE3; +u8 gMPlayMemAccArea[0x10]; + +u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust) +{ + u32 val1; + u32 val2; + u32 fineAdjustShifted = fineAdjust << 24; + + if (key > 178) + { + key = 178; + fineAdjustShifted = 255 << 24; + } + + val1 = gScaleTable[key]; + val1 = gFreqTable[val1 & 0xF] >> (val1 >> 4); + + val2 = gScaleTable[key + 1]; + val2 = gFreqTable[val2 & 0xF] >> (val2 >> 4); + + return umul3232H32(wav->freq, val1 + umul3232H32(val2 - val1, fineAdjustShifted)); +} + +void UnusedDummyFunc() +{ +} + +void MPlayContinue(struct MusicPlayerInfo *mplayInfo) +{ + if (mplayInfo->ident == ID_NUMBER) + { + mplayInfo->ident++; + mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE; + mplayInfo->ident = ID_NUMBER; + } +} + +void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed) +{ + if (mplayInfo->ident == ID_NUMBER) + { + mplayInfo->ident++; + mplayInfo->fadeOC = speed; + mplayInfo->fadeOI = speed; + mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT); + mplayInfo->ident = ID_NUMBER; + } +} + +void m4aSoundInit(void) +{ + s32 i; + + CpuCopy32((void *)((s32)SoundMainRAM & ~1), SoundMainRAM_Buffer, sizeof(SoundMainRAM_Buffer)); + + SoundInit(&gSoundInfo); + MPlayExtender(gCgbChans); + m4aSoundMode(SOUND_MODE_DA_BIT_8 + | SOUND_MODE_FREQ_13379 + | (12 << SOUND_MODE_MASVOL_SHIFT) + | (5 << SOUND_MODE_MAXCHN_SHIFT)); + + for (i = 0; i < NUM_MUSIC_PLAYERS; i++) + { + struct MusicPlayerInfo *mplayInfo = gMPlayTable[i].info; + MPlayOpen(mplayInfo, gMPlayTable[i].track, gMPlayTable[i].unk_8); + mplayInfo->unk_B = gMPlayTable[i].unk_A; + mplayInfo->memAccArea = gMPlayMemAccArea; + } + + memcpy(&gPokemonCrySong, &gPokemonCrySongTemplate, sizeof(struct PokemonCrySong)); + + for (i = 0; i < MAX_POKEMON_CRIES; i++) + { + struct MusicPlayerInfo *mplayInfo = &gPokemonCryMusicPlayers[i]; + struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2]; + MPlayOpen(mplayInfo, track, 2); + track->chan = 0; + } +} + +void m4aSoundMain(void) +{ + SoundMain(); +} + +void m4aSongNumStart(u16 n) +{ + const struct MusicPlayer *mplayTable = gMPlayTable; + const struct Song *songTable = gSongTable; + const struct Song *song = &songTable[n]; + const struct MusicPlayer *mplay = &mplayTable[song->ms]; + + MPlayStart(mplay->info, song->header); +} + +void m4aSongNumStartOrChange(u16 n) +{ + const struct MusicPlayer *mplayTable = gMPlayTable; + const struct Song *songTable = gSongTable; + const struct Song *song = &songTable[n]; + const struct MusicPlayer *mplay = &mplayTable[song->ms]; + + if (mplay->info->songHeader != song->header) + { + MPlayStart(mplay->info, song->header); + } + else + { + if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0 + || (mplay->info->status & MUSICPLAYER_STATUS_PAUSE)) + { + MPlayStart(mplay->info, song->header); + } + } +} + +void m4aSongNumStartOrContinue(u16 n) +{ + const struct MusicPlayer *mplayTable = gMPlayTable; + const struct Song *songTable = gSongTable; + const struct Song *song = &songTable[n]; + const struct MusicPlayer *mplay = &mplayTable[song->ms]; + + if (mplay->info->songHeader != song->header) + MPlayStart(mplay->info, song->header); + else if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0) + MPlayStart(mplay->info, song->header); + else if (mplay->info->status & MUSICPLAYER_STATUS_PAUSE) + MPlayContinue(mplay->info); +} + +void m4aSongNumStop(u16 n) +{ + const struct MusicPlayer *mplayTable = gMPlayTable; + const struct Song *songTable = gSongTable; + const struct Song *song = &songTable[n]; + const struct MusicPlayer *mplay = &mplayTable[song->ms]; + + if (mplay->info->songHeader == song->header) + m4aMPlayStop(mplay->info); +} + +void m4aSongNumContinue(u16 n) +{ + const struct MusicPlayer *mplayTable = gMPlayTable; + const struct Song *songTable = gSongTable; + const struct Song *song = &songTable[n]; + const struct MusicPlayer *mplay = &mplayTable[song->ms]; + + if (mplay->info->songHeader == song->header) + MPlayContinue(mplay->info); +} + +void m4aMPlayAllStop(void) +{ + s32 i; + + for (i = 0; i < NUM_MUSIC_PLAYERS; i++) + m4aMPlayStop(gMPlayTable[i].info); + + for (i = 0; i < MAX_POKEMON_CRIES; i++) + m4aMPlayStop(&gPokemonCryMusicPlayers[i]); +} + +void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo) +{ + MPlayContinue(mplayInfo); +} + +void m4aMPlayAllContinue(void) +{ + s32 i; + + for (i = 0; i < NUM_MUSIC_PLAYERS; i++) + MPlayContinue(gMPlayTable[i].info); + + for (i = 0; i < MAX_POKEMON_CRIES; i++) + MPlayContinue(&gPokemonCryMusicPlayers[i]); +} + +void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed) +{ + MPlayFadeOut(mplayInfo, speed); +} + +void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed) +{ + if (mplayInfo->ident == ID_NUMBER) + { + mplayInfo->ident++; + mplayInfo->fadeOC = speed; + mplayInfo->fadeOI = speed; + mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT) | TEMPORARY_FADE; + mplayInfo->ident = ID_NUMBER; + } +} + +void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed) +{ + if (mplayInfo->ident == ID_NUMBER) + { + mplayInfo->ident++; + mplayInfo->fadeOC = speed; + mplayInfo->fadeOI = speed; + mplayInfo->fadeOV = (0 << FADE_VOL_SHIFT) | FADE_IN; + mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE; + mplayInfo->ident = ID_NUMBER; + } +} + +void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo) +{ + s32 trackCount = mplayInfo->trackCount; + struct MusicPlayerTrack *track = mplayInfo->tracks; + + while (trackCount > 0) + { + if (track->flags & MPT_FLG_EXIST) + { + if (track->flags & MPT_FLG_START) + { + Clear64byte(track); + track->flags = MPT_FLG_EXIST; + track->bendRange = 2; + track->volX = 64; + track->lfoSpeed = 22; + track->tone.type = 1; + } + } + + trackCount--; + track++; + } +} + +void MPlayExtender(struct CgbChannel *cgbChans) +{ + struct SoundInfo *soundInfo; + u32 ident; + + REG_SOUNDCNT_X = SOUND_MASTER_ENABLE + | SOUND_4_ON + | SOUND_3_ON + | SOUND_2_ON + | SOUND_1_ON; + REG_SOUNDCNT_L = 0; // set master volume to zero + REG_NR12 = 0x8; + REG_NR22 = 0x8; + REG_NR42 = 0x8; + REG_NR14 = 0x80; + REG_NR24 = 0x80; + REG_NR44 = 0x80; + REG_NR30 = 0; + REG_NR50 = 0x77; + + soundInfo = SOUND_INFO_PTR; + + ident = soundInfo->ident; + + if (ident != ID_NUMBER) + return; + + soundInfo->ident++; + + gMPlayJumpTable[8] = ply_memacc; + gMPlayJumpTable[17] = ply_lfos; + gMPlayJumpTable[19] = ply_mod; + gMPlayJumpTable[28] = ply_xcmd; + gMPlayJumpTable[29] = ply_endtie; + gMPlayJumpTable[30] = SampleFreqSet; + gMPlayJumpTable[31] = TrackStop; + gMPlayJumpTable[32] = FadeOutBody; + gMPlayJumpTable[33] = TrkVolPitSet; + + soundInfo->cgbChans = (struct CgbChannel *)cgbChans; + soundInfo->CgbSound = CgbSound; + soundInfo->CgbOscOff = CgbOscOff; + soundInfo->MidiKeyToCgbFreq = MidiKeyToCgbFreq; + soundInfo->maxLines = MAX_LINES; + + CpuFill32(0, cgbChans, sizeof(struct CgbChannel) * 4); + + cgbChans[0].ty = 1; + cgbChans[0].panMask = 0x11; + cgbChans[1].ty = 2; + cgbChans[1].panMask = 0x22; + cgbChans[2].ty = 3; + cgbChans[2].panMask = 0x44; + cgbChans[3].ty = 4; + cgbChans[3].panMask = 0x88; + + soundInfo->ident = ident; +} + +void MusicPlayerJumpTableCopy(void) +{ + asm("swi 0x2A"); +} + +void ClearChain(void *x) +{ + void (*func)(void *) = *(&gMPlayJumpTable[34]); + func(x); +} + +void Clear64byte(void *x) +{ + void (*func)(void *) = *(&gMPlayJumpTable[35]); + func(x); +} + +void SoundInit(struct SoundInfo *soundInfo) +{ + soundInfo->ident = 0; + + if (REG_DMA1CNT & (DMA_REPEAT << 16)) + REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; + + if (REG_DMA2CNT & (DMA_REPEAT << 16)) + REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; + + REG_DMA1CNT_H = DMA_32BIT; + REG_DMA2CNT_H = DMA_32BIT; + REG_SOUNDCNT_X = SOUND_MASTER_ENABLE + | SOUND_4_ON + | SOUND_3_ON + | SOUND_2_ON + | SOUND_1_ON; + REG_SOUNDCNT_H = SOUND_B_FIFO_RESET | SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT + | SOUND_A_FIFO_RESET | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT + | SOUND_ALL_MIX_FULL; + REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40; + + REG_DMA1SAD = (s32)soundInfo->pcmBuffer; + REG_DMA1DAD = (s32)®_FIFO_A; + REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE; + REG_DMA2DAD = (s32)®_FIFO_B; + + SOUND_INFO_PTR = soundInfo; + CpuFill32(0, soundInfo, sizeof(struct SoundInfo)); + + soundInfo->maxChans = 8; + soundInfo->masterVolume = 15; + soundInfo->plynote = (u32)ply_note; + soundInfo->CgbSound = DummyFunc; + soundInfo->CgbOscOff = (void (*)(u8))DummyFunc; + soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc; + soundInfo->ExtVolPit = (u32)DummyFunc; + + MPlayJumpTableCopy(gMPlayJumpTable); + + soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable; + + SampleFreqSet(SOUND_MODE_FREQ_13379); + + soundInfo->ident = ID_NUMBER; +} + +void SampleFreqSet(u32 freq) +{ + struct SoundInfo *soundInfo = SOUND_INFO_PTR; + + freq = (freq & 0xF0000) >> 16; + soundInfo->freq = freq; + soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1]; + soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank; + + // LCD refresh rate 59.7275Hz + soundInfo->pcmFreq = (597275 * soundInfo->pcmSamplesPerVBlank + 5000) / 10000; + + // CPU frequency 16.78Mhz + soundInfo->divFreq = (16777216 / soundInfo->pcmFreq + 1) >> 1; + + // Turn off timer 0. + REG_TM0CNT_H = 0; + + // cycles per LCD fresh 280896 + REG_TM0CNT_L = -(280896 / soundInfo->pcmSamplesPerVBlank); + + m4aSoundVSyncOn(); + + while (*(vu8 *)REG_ADDR_VCOUNT == 159) + ; + + while (*(vu8 *)REG_ADDR_VCOUNT != 159) + ; + + REG_TM0CNT_H = TIMER_ENABLE | TIMER_1CLK; +} + +void m4aSoundMode(u32 mode) +{ + struct SoundInfo *soundInfo = SOUND_INFO_PTR; + u32 temp; + + if (soundInfo->ident != ID_NUMBER) + return; + + soundInfo->ident++; + + temp = mode & (SOUND_MODE_REVERB_SET | SOUND_MODE_REVERB_VAL); + + if (temp) + soundInfo->reverb = temp & SOUND_MODE_REVERB_VAL; + + temp = mode & SOUND_MODE_MAXCHN; + + if (temp) + { + struct SoundChannel *chan; + + soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT; + + temp = MAX_DIRECTSOUND_CHANNELS; + chan = &soundInfo->chans[0]; + + while (temp != 0) + { + chan->status = 0; + temp--; + chan++; + } + } + + temp = mode & SOUND_MODE_MASVOL; + + if (temp) + soundInfo->masterVolume = temp >> SOUND_MODE_MASVOL_SHIFT; + + temp = mode & SOUND_MODE_DA_BIT; + + if (temp) + { + temp = (temp & 0x300000) >> 14; + REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | temp; + } + + temp = mode & SOUND_MODE_FREQ; + + if (temp) + { + m4aSoundVSyncOff(); + SampleFreqSet(temp); + } + + soundInfo->ident = ID_NUMBER; +} + +void SoundClear(void) +{ + struct SoundInfo *soundInfo = SOUND_INFO_PTR; + s32 i; + void *chan; + + if (soundInfo->ident != ID_NUMBER) + return; + + soundInfo->ident++; + + i = MAX_DIRECTSOUND_CHANNELS; + chan = &soundInfo->chans[0]; + + while (i > 0) + { + ((struct SoundChannel *)chan)->status = 0; + i--; + chan = (void *)((s32)chan + sizeof(struct SoundChannel)); + } + + chan = soundInfo->cgbChans; + + if (chan) + { + i = 1; + + while (i <= 4) + { + soundInfo->CgbOscOff(i); + ((struct CgbChannel *)chan)->sf = 0; + i++; + chan = (void *)((s32)chan + sizeof(struct CgbChannel)); + } + } + + soundInfo->ident = ID_NUMBER; +} + +void m4aSoundVSyncOff(void) +{ + struct SoundInfo *soundInfo = SOUND_INFO_PTR; + + if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1) + { + soundInfo->ident += 10; + + if (REG_DMA1CNT & (DMA_REPEAT << 16)) + REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; + + if (REG_DMA2CNT & (DMA_REPEAT << 16)) + REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; + + REG_DMA1CNT_H = DMA_32BIT; + REG_DMA2CNT_H = DMA_32BIT; + + CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer)); + } +} + +void m4aSoundVSyncOn(void) +{ + struct SoundInfo *soundInfo = SOUND_INFO_PTR; + u32 ident = soundInfo->ident; + + if (ident == ID_NUMBER) + return; + + REG_DMA1CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT; + REG_DMA2CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT; + + soundInfo->pcmDmaCounter = 0; + soundInfo->ident = ident - 10; +} + +void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tracks, u8 trackCount) +{ + struct SoundInfo *soundInfo; + + if (trackCount == 0) + return; + + if (trackCount > MAX_MUSICPLAYER_TRACKS) + trackCount = MAX_MUSICPLAYER_TRACKS; + + soundInfo = SOUND_INFO_PTR; + + if (soundInfo->ident != ID_NUMBER) + return; + + soundInfo->ident++; + + Clear64byte(mplayInfo); + + mplayInfo->tracks = tracks; + mplayInfo->trackCount = trackCount; + mplayInfo->status = MUSICPLAYER_STATUS_PAUSE; + + while (trackCount != 0) + { + tracks->flags = 0; + trackCount--; + tracks++; + } + + if (soundInfo->func != 0) + { + mplayInfo->func = soundInfo->func; + mplayInfo->intp = soundInfo->intp; + soundInfo->func = 0; + } + + soundInfo->intp = (u32)mplayInfo; + soundInfo->func = (u32)MPlayMain; + soundInfo->ident = ID_NUMBER; + mplayInfo->ident = ID_NUMBER; +} + +void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader) +{ + s32 i; + u8 unk_B; + struct MusicPlayerTrack *track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + unk_B = mplayInfo->unk_B; + + if (!unk_B + || ((!mplayInfo->songHeader || !(mplayInfo->tracks[0].flags & MPT_FLG_START)) + && ((mplayInfo->status & MUSICPLAYER_STATUS_TRACK) == 0 + || (mplayInfo->status & MUSICPLAYER_STATUS_PAUSE))) + || (mplayInfo->priority <= songHeader->priority)) + { + mplayInfo->ident++; + mplayInfo->status = 0; + mplayInfo->songHeader = songHeader; + mplayInfo->tone = songHeader->tone; + mplayInfo->priority = songHeader->priority; + mplayInfo->clock = 0; + mplayInfo->tempoD = 150; + mplayInfo->tempoI = 150; + mplayInfo->tempoU = 0x100; + mplayInfo->tempoC = 0; + mplayInfo->fadeOI = 0; + + i = 0; + track = mplayInfo->tracks; + + while (i < songHeader->trackCount && i < mplayInfo->trackCount) + { + TrackStop(mplayInfo, track); + track->flags = MPT_FLG_EXIST | MPT_FLG_START; + track->chan = 0; + track->cmdPtr = songHeader->part[i]; + i++; + track++; + } + + while (i < mplayInfo->trackCount) + { + TrackStop(mplayInfo, track); + track->flags = 0; + i++; + track++; + } + + if (songHeader->reverb & 0x80) + m4aSoundMode(songHeader->reverb); + + mplayInfo->ident = ID_NUMBER; + } +} + +void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo) +{ + s32 i; + struct MusicPlayerTrack *track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + mplayInfo->ident++; + mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE; + + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + + while (i > 0) + { + TrackStop(mplayInfo, track); + i--; + track++; + } + + mplayInfo->ident = ID_NUMBER; +} + +void FadeOutBody(struct MusicPlayerInfo *mplayInfo) +{ + s32 i; + struct MusicPlayerTrack *track; + u16 fadeOI = mplayInfo->fadeOI; + register u32 temp asm("r3"); + register u16 mask asm("r2"); + + if (fadeOI == 0) + return; + + mplayInfo->fadeOC--; + + temp = 0xFFFF; + mask = temp; + + if (mplayInfo->fadeOC != 0) + return; + + mplayInfo->fadeOC = fadeOI; + + if (mplayInfo->fadeOV & FADE_IN) + { + mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT); + + if ((u16)(mplayInfo->fadeOV & mask) >= (64 << FADE_VOL_SHIFT)) + { + mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT); + mplayInfo->fadeOI = 0; + } + } + else + { + mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT); + + if ((s16)(mplayInfo->fadeOV & mask) <= 0) + { + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + + while (i > 0) + { + register u32 fadeOV asm("r7"); + u32 val; + + TrackStop(mplayInfo, track); + + val = TEMPORARY_FADE; + fadeOV = mplayInfo->fadeOV; + val &= fadeOV; + + if (!val) + track->flags = 0; + + i--; + track++; + } + + if (mplayInfo->fadeOV & TEMPORARY_FADE) + mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE; + else + mplayInfo->status = MUSICPLAYER_STATUS_PAUSE; + + mplayInfo->fadeOI = 0; + return; + } + } + + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + + while (i > 0) + { + if (track->flags & MPT_FLG_EXIST) + { + track->volX = (mplayInfo->fadeOV >> FADE_VOL_SHIFT); + track->flags |= MPT_FLG_VOLCHG; + } + + i--; + track++; + } +} + +void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + if (track->flags & MPT_FLG_VOLSET) + { + s32 x; + s32 y; + + x = (u32)(track->vol * track->volX) >> 5; + + if (track->modT == 1) + x = (u32)(x * (track->modM + 128)) >> 7; + + y = 2 * track->pan + track->panX; + + if (track->modT == 2) + y += track->modM; + + if (y < -128) + y = -128; + else if (y > 127) + y = 127; + + track->volMR = (u32)((y + 128) * x) >> 8; + track->volML = (u32)((127 - y) * x) >> 8; + } + + if (track->flags & MPT_FLG_PITSET) + { + s32 bend = track->bend * track->bendRange; + register s32 x asm("r1") = track->tune; + x += bend; + x *= 4; + x += (track->keyShift << 8); + x += (track->keyShiftX << 8); + x += track->pitX; + + if (track->modT == 0) + x += 16 * track->modM; + + track->keyM = x >> 8; + track->pitM = x; + } + + track->flags &= ~(MPT_FLG_PITSET | MPT_FLG_VOLSET); +} + +u32 MidiKeyToCgbFreq(u8 chanNum, u8 key, u8 fineAdjust) +{ + if (chanNum == 4) + { + if (key <= 20) + { + key = 0; + } + else + { + key -= 21; + if (key > 59) + key = 59; + } + + return gNoiseTable[key]; + } + else + { + s32 val1; + s32 val2; + + if (key <= 35) + { + fineAdjust = 0; + key = 0; + } + else + { + key -= 36; + if (key > 130) + { + key = 130; + fineAdjust = 255; + } + } + + val1 = gCgbScaleTable[key]; + val1 = gCgbFreqTable[val1 & 0xF] >> (val1 >> 4); + + val2 = gCgbScaleTable[key + 1]; + val2 = gCgbFreqTable[val2 & 0xF] >> (val2 >> 4); + + return val1 + ((fineAdjust * (val2 - val1)) >> 8) + 2048; + } +} + +void CgbOscOff(u8 chanNum) +{ + switch (chanNum) + { + case 1: + REG_NR12 = 8; + REG_NR14 = 0x80; + break; + case 2: + REG_NR22 = 8; + REG_NR24 = 0x80; + break; + case 3: + REG_NR30 = 0; + break; + default: + REG_NR42 = 8; + REG_NR44 = 0x80; + } +} + +static inline int CgbPan(struct CgbChannel *chan) +{ + u32 rightVolume = chan->rightVolume; + u32 leftVolume = chan->leftVolume; + + if ((rightVolume = (u8)rightVolume) >= (leftVolume = (u8)leftVolume)) + { + if (rightVolume / 2 >= leftVolume) + { + chan->pan = 0x0F; + return 1; + } + } + else + { + if (leftVolume / 2 >= rightVolume) + { + chan->pan = 0xF0; + return 1; + } + } + + return 0; +} + +void CgbModVol(struct CgbChannel *chan) +{ + struct SoundInfo *soundInfo = SOUND_INFO_PTR; + + if ((soundInfo->mode & 1) || !CgbPan(chan)) + { + chan->pan = 0xFF; + chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4; + } + else + { + // Force chan->rightVolume and chan->leftVolume to be read from memory again, + // even though there is no reason to do so. + // The command line option "-fno-gcse" achieves the same result as this. + asm("" : : : "memory"); + + chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4; + if (chan->eg > 15) + chan->eg = 15; + } + + chan->sg = (chan->eg * chan->su + 15) >> 4; + chan->pan &= chan->panMask; +} diff --git a/src/libs/m4a_4.c b/src/libs/m4a_4.c new file mode 100644 index 000000000..99195ec00 --- /dev/null +++ b/src/libs/m4a_4.c @@ -0,0 +1,545 @@ +#include "gba/m4a_internal.h" + +void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo) +{ + if (mplayInfo->ident == ID_NUMBER) + { + mplayInfo->ident++; + mplayInfo->tempoU = tempo; + mplayInfo->tempoI = (mplayInfo->tempoD * mplayInfo->tempoU) >> 8; + mplayInfo->ident = ID_NUMBER; + } +} + +void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume) +{ + s32 i; + u32 bit; + struct MusicPlayerTrack *track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + mplayInfo->ident++; + + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + bit = 1; + + while (i > 0) + { + if (trackBits & bit) + { + if (track->flags & MPT_FLG_EXIST) + { + track->volX = volume / 4; + track->flags |= MPT_FLG_VOLCHG; + } + } + + i--; + track++; + bit <<= 1; + } + + mplayInfo->ident = ID_NUMBER; +} + +void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 pitch) +{ + s32 i; + u32 bit; + struct MusicPlayerTrack *track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + mplayInfo->ident++; + + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + bit = 1; + + while (i > 0) + { + if (trackBits & bit) + { + if (track->flags & MPT_FLG_EXIST) + { + track->keyShiftX = (s16)pitch >> 8; + track->pitX = pitch; + track->flags |= MPT_FLG_PITCHG; + } + } + + i--; + track++; + bit <<= 1; + } + + mplayInfo->ident = ID_NUMBER; +} + +void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan) +{ + s32 i; + u32 bit; + struct MusicPlayerTrack *track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + mplayInfo->ident++; + + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + bit = 1; + + while (i > 0) + { + if (trackBits & bit) + { + if (track->flags & MPT_FLG_EXIST) + { + track->panX = pan; + track->flags |= MPT_FLG_VOLCHG; + } + } + + i--; + track++; + bit <<= 1; + } + + mplayInfo->ident = ID_NUMBER; +} + +void ClearModM(struct MusicPlayerTrack *track) +{ + track->lfoSpeedC = 0; + track->modM = 0; + + if (track->modT == 0) + track->flags |= MPT_FLG_PITCHG; + else + track->flags |= MPT_FLG_VOLCHG; +} + +void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth) +{ + s32 i; + u32 bit; + struct MusicPlayerTrack *track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + mplayInfo->ident++; + + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + bit = 1; + + while (i > 0) + { + if (trackBits & bit) + { + if (track->flags & MPT_FLG_EXIST) + { + track->mod = modDepth; + + if (!track->mod) + ClearModM(track); + } + } + + i--; + track++; + bit <<= 1; + } + + mplayInfo->ident = ID_NUMBER; +} + +void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed) +{ + s32 i; + u32 bit; + struct MusicPlayerTrack *track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + mplayInfo->ident++; + + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + bit = 1; + + while (i > 0) + { + if (trackBits & bit) + { + if (track->flags & MPT_FLG_EXIST) + { + track->lfoSpeed = lfoSpeed; + + if (!track->lfoSpeed) + ClearModM(track); + } + } + + i--; + track++; + bit <<= 1; + } + + mplayInfo->ident = ID_NUMBER; +} + +#define MEMACC_COND_JUMP(cond) \ +if (cond) \ + goto cond_true; \ +else \ + goto cond_false; \ + +void ply_memacc(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + u32 op; + u8 *addr; + u8 data; + + op = *track->cmdPtr; + track->cmdPtr++; + + addr = mplayInfo->memAccArea + *track->cmdPtr; + track->cmdPtr++; + + data = *track->cmdPtr; + track->cmdPtr++; + + switch (op) + { + case 0: + *addr = data; + return; + case 1: + *addr += data; + return; + case 2: + *addr -= data; + return; + case 3: + *addr = mplayInfo->memAccArea[data]; + return; + case 4: + *addr += mplayInfo->memAccArea[data]; + return; + case 5: + *addr -= mplayInfo->memAccArea[data]; + return; + case 6: + MEMACC_COND_JUMP(*addr == data) + return; + case 7: + MEMACC_COND_JUMP(*addr != data) + return; + case 8: + MEMACC_COND_JUMP(*addr > data) + return; + case 9: + MEMACC_COND_JUMP(*addr >= data) + return; + case 10: + MEMACC_COND_JUMP(*addr <= data) + return; + case 11: + MEMACC_COND_JUMP(*addr < data) + return; + case 12: + MEMACC_COND_JUMP(*addr == mplayInfo->memAccArea[data]) + return; + case 13: + MEMACC_COND_JUMP(*addr != mplayInfo->memAccArea[data]) + return; + case 14: + MEMACC_COND_JUMP(*addr > mplayInfo->memAccArea[data]) + return; + case 15: + MEMACC_COND_JUMP(*addr >= mplayInfo->memAccArea[data]) + return; + case 16: + MEMACC_COND_JUMP(*addr <= mplayInfo->memAccArea[data]) + return; + case 17: + MEMACC_COND_JUMP(*addr < mplayInfo->memAccArea[data]) + return; + default: + return; + } + +cond_true: + { + void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[1]); + func(mplayInfo, track); + return; + } + +cond_false: + track->cmdPtr += 4; +} + +void ply_xcmd(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + u32 n = *track->cmdPtr; + track->cmdPtr++; + + gXcmdTable[n](mplayInfo, track); +} + +void ply_xxx(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[0]); + func(mplayInfo, track); +} + +#define READ_XCMD_BYTE(var, n) \ +{ \ + u32 byte = track->cmdPtr[(n)]; \ + byte <<= n * 8; \ + (var) &= ~(0xFF << (n * 8)); \ + (var) |= byte; \ +} + +void ply_xwave(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + u32 wav; + + READ_XCMD_BYTE(wav, 0) // UB: uninitialized variable + READ_XCMD_BYTE(wav, 1) + READ_XCMD_BYTE(wav, 2) + READ_XCMD_BYTE(wav, 3) + + track->tone.wav = (struct WaveData *)wav; + track->cmdPtr += 4; +} + +void ply_xtype(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->tone.type = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xatta(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->tone.attack = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xdeca(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->tone.decay = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xsust(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->tone.sustain = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xrele(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->tone.release = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xiecv(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->echoVolume = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xiecl(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->echoLength = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xleng(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->tone.length = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xswee(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + track->tone.pan_sweep = *track->cmdPtr; + track->cmdPtr++; +} + +void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + u32 unk; + + READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable + READ_XCMD_BYTE(unk, 1) + + if (track->unk_3A < (u16)unk) + { + track->unk_3A++; + track->cmdPtr -= 2; + track->wait = 1; + } + else + { + track->unk_3A = 0; + track->cmdPtr += 2; + } +} + +void ply_xcmd_0D(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +{ + u32 unk; + + READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable + READ_XCMD_BYTE(unk, 1) + READ_XCMD_BYTE(unk, 2) + READ_XCMD_BYTE(unk, 3) + + track->unk_3C = unk; + track->cmdPtr += 4; +} + +void DummyFunc(void) +{ +} + +struct MusicPlayerInfo *SetPokemonCryTone(struct ToneData *tone) +{ + u32 maxClock = 0; + s32 maxClockIndex = 0; + s32 i; + struct MusicPlayerInfo *mplayInfo; + + for (i = 0; i < MAX_POKEMON_CRIES; i++) + { + struct MusicPlayerTrack *track = &gPokemonCryTracks[i * 2]; + + if (!track->flags && (!track->chan || track->chan->track != track)) + goto start_song; + + if (maxClock < gPokemonCryMusicPlayers[i].clock) + { + maxClock = gPokemonCryMusicPlayers[i].clock; + maxClockIndex = i; + } + } + + i = maxClockIndex; + +start_song: + mplayInfo = &gPokemonCryMusicPlayers[i]; + mplayInfo->ident++; + +#define CRY ((s32)&gPokemonCrySongs + i * sizeof(struct PokemonCrySong)) +#define CRY_OFS(field) offsetof(struct PokemonCrySong, field) + + memcpy((void *)CRY, &gPokemonCrySong, sizeof(struct PokemonCrySong)); + + *(u32 *)(CRY + CRY_OFS(tone)) = (u32)tone; + *(u32 *)(CRY + CRY_OFS(part)) = CRY + CRY_OFS(part0); + *(u32 *)(CRY + CRY_OFS(part) + 4) = CRY + CRY_OFS(part1); + *(u32 *)(CRY + CRY_OFS(gotoTarget)) = CRY + CRY_OFS(cont); + +#undef CRY_OFS +#undef CRY + + mplayInfo->ident = ID_NUMBER; + + MPlayStart(mplayInfo, (struct SongHeader *)(&gPokemonCrySongs[i])); + + return mplayInfo; +} + +void SetPokemonCryVolume(u8 val) +{ + gPokemonCrySong.volumeValue = val & 0x7F; +} + +void SetPokemonCryPanpot(s8 val) +{ + gPokemonCrySong.panValue = (val + C_V) & 0x7F; +} + +void SetPokemonCryPitch(s16 val) +{ + s16 b = val + 0x80; + u8 a = gPokemonCrySong.tuneValue2 - gPokemonCrySong.tuneValue; + gPokemonCrySong.tieKeyValue = (b >> 8) & 0x7F; + gPokemonCrySong.tuneValue = (b >> 1) & 0x7F; + gPokemonCrySong.tuneValue2 = (a + ((b >> 1) & 0x7F)) & 0x7F; +} + +void SetPokemonCryLength(u16 val) +{ + gPokemonCrySong.unkCmd0CParam = val; +} + +void SetPokemonCryRelease(u8 val) +{ + gPokemonCrySong.releaseValue = val; +} + +void SetPokemonCryProgress(u32 val) +{ + gPokemonCrySong.unkCmd0DParam = val; +} + +int IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo) +{ + struct MusicPlayerTrack *track = mplayInfo->tracks; + + if (track->chan && track->chan->track == track) + return 1; + else + return 0; +} + +void SetPokemonCryChorus(s8 val) +{ + if (val) + { + gPokemonCrySong.trackCount = 2; + gPokemonCrySong.tuneValue2 = (val + gPokemonCrySong.tuneValue) & 0x7F; + } + else + { + gPokemonCrySong.trackCount = 1; + } +} + +void SetPokemonCryStereo(u32 val) +{ + struct SoundInfo *soundInfo = SOUND_INFO_PTR; + + if (val) + { + REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT + | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT + | SOUND_ALL_MIX_FULL; + soundInfo->mode &= ~1; + } + else + { + REG_SOUNDCNT_H = SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT | SOUND_B_RIGHT_OUTPUT + | SOUND_A_TIMER_0 | SOUND_A_LEFT_OUTPUT | SOUND_A_RIGHT_OUTPUT + | SOUND_B_MIX_HALF | SOUND_A_MIX_HALF | SOUND_CGB_MIX_FULL; + soundInfo->mode |= 1; + } +} + +void SetPokemonCryPriority(u8 val) +{ + gPokemonCrySong.priority = val; +} diff --git a/src/libs/m4a_tables.c b/src/libs/m4a_tables.c new file mode 100644 index 000000000..91f00a31d --- /dev/null +++ b/src/libs/m4a_tables.c @@ -0,0 +1,307 @@ +#include "gba/m4a_internal.h" + +// Some of these functions have different signatures, so we need to make this +// an array of void pointers or a struct. It's simpler to just make it an array +// for now. +void * const gMPlayJumpTableTemplate[] = +{ + ply_fine, + ply_goto, + ply_patt, + ply_pend, + ply_rept, + ply_fine, + ply_fine, + ply_fine, + ply_fine, + ply_prio, + ply_tempo, + ply_keysh, + ply_voice, + ply_vol, + ply_pan, + ply_bend, + ply_bendr, + ply_lfos, + ply_lfodl, + ply_mod, + ply_modt, + ply_fine, + ply_fine, + ply_tune, + ply_fine, + ply_fine, + ply_fine, + ply_port, + ply_fine, + ply_endtie, + SampleFreqSet, + TrackStop, + FadeOutBody, + TrkVolPitSet, + RealClearChain, + SoundMainBTM, +}; + +// This is a table of deltas between sample values in compressed PCM data. +const s8 gDeltaEncodingTable[] = +{ + 0, + 1, + 4, + 9, + 16, + 25, + 36, + 49, + -64, + -49, + -36, + -25, + -16, + -9, + -4, + -1, +}; + +const u8 gScaleTable[] = +{ + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, +}; + +const u32 gFreqTable[] = +{ + 2147483648u, + 2275179671u, + 2410468894u, + 2553802834u, + 2705659852u, + 2866546760u, + 3037000500u, + 3217589947u, + 3408917802u, + 3611622603u, + 3826380858u, + 4053909305u, +}; + +const u16 gPcmSamplesPerVBlankTable[] = +{ + 96, + 132, + 176, + 224, + 264, + 304, + 352, + 448, + 528, + 608, + 672, + 704, +}; + +const u8 gCgbScaleTable[] = +{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, +}; + +const s16 gCgbFreqTable[] = +{ + -2004, + -1891, + -1785, + -1685, + -1591, + -1501, + -1417, + -1337, + -1262, + -1192, + -1125, + -1062, +}; + +const u8 gNoiseTable[] = +{ + 0xD7, 0xD6, 0xD5, 0xD4, + 0xC7, 0xC6, 0xC5, 0xC4, + 0xB7, 0xB6, 0xB5, 0xB4, + 0xA7, 0xA6, 0xA5, 0xA4, + 0x97, 0x96, 0x95, 0x94, + 0x87, 0x86, 0x85, 0x84, + 0x77, 0x76, 0x75, 0x74, + 0x67, 0x66, 0x65, 0x64, + 0x57, 0x56, 0x55, 0x54, + 0x47, 0x46, 0x45, 0x44, + 0x37, 0x36, 0x35, 0x34, + 0x27, 0x26, 0x25, 0x24, + 0x17, 0x16, 0x15, 0x14, + 0x07, 0x06, 0x05, 0x04, + 0x03, 0x02, 0x01, 0x00, +}; + +const u8 gCgb3Vol[] = +{ + 0x00, 0x00, + 0x60, 0x60, 0x60, 0x60, + 0x40, 0x40, 0x40, 0x40, + 0x80, 0x80, 0x80, 0x80, + 0x20, 0x20, +}; + +const u8 gClockTable[] = +{ + 0x00, + 0x01, + 0x02, + 0x03, + 0x04, + 0x05, + 0x06, + 0x07, + 0x08, + 0x09, + 0x0A, + 0x0B, + 0x0C, + 0x0D, + 0x0E, + 0x0F, + 0x10, + 0x11, + 0x12, + 0x13, + 0x14, + 0x15, + 0x16, + 0x17, + 0x18, + 0x1C, + 0x1E, + 0x20, + 0x24, + 0x28, + 0x2A, + 0x2C, + 0x30, + 0x34, + 0x36, + 0x38, + 0x3C, + 0x40, + 0x42, + 0x44, + 0x48, + 0x4C, + 0x4E, + 0x50, + 0x54, + 0x58, + 0x5A, + 0x5C, + 0x60, +}; + +#define FINE 0xb1 +#define GOTO 0xb2 +#define PATT 0xb3 +#define PEND 0xb4 +#define REPT 0xb5 +#define MEMACC 0xb9 +#define PRIO 0xba +#define TEMPO 0xbb +#define KEYSH 0xbc +#define VOICE 0xbd +#define VOL 0xbe +#define PAN 0xbf +#define BEND 0xc0 +#define BENDR 0xc1 +#define LFOS 0xc2 +#define LFODL 0xc3 +#define MOD 0xc4 +#define MODT 0xc5 +#define TUNE 0xc8 + +#define XCMD 0xcd +#define xRELE 0x07 +#define xIECV 0x08 +#define xIECL 0x09 + +#define EOT 0xce +#define TIE 0xcf + +const struct PokemonCrySong gPokemonCrySongTemplate = +{ + 1, // track count + 0, // block count + 255, // priority + 0, // reverb + (struct ToneData *)&voicegroup_pokemon_cry, + NULL, + NULL, + 0, + TUNE, // part 0 + C_V, // TUNE value + GOTO, + 0, // GOTO target address + TUNE, // part 1 + C_V + 16, // TUNE value + {VOICE, 0}, // part 0 jumps here with GOTO + VOL, + 127, // volume + {XCMD, 0x0D}, + 0, // unk value + {XCMD, xRELE}, + 0, // release + PAN, + C_V, // PAN value + TIE, + 60, // TIE key (default is Cn3) + 127, // TIE velocity + {XCMD, 0x0C}, + 60, // unk value + {EOT, FINE} // end +}; + +const XcmdFunc gXcmdTable[] = +{ + ply_xxx, + ply_xwave, + ply_xtype, + ply_xxx, + ply_xatta, + ply_xdeca, + ply_xsust, + ply_xrele, + ply_xiecv, + ply_xiecl, + ply_xleng, + ply_xswee, + ply_xcmd_0C, + ply_xcmd_0D, +}; diff --git a/src/libs/siirtc.c b/src/libs/siirtc.c new file mode 100644 index 000000000..965a068f1 --- /dev/null +++ b/src/libs/siirtc.c @@ -0,0 +1,432 @@ +// Ruby/Sapphire/Emerald cartridges contain a Seiko Instruments Inc. (SII) +// S-3511A real-time clock (RTC). This library ("SIIRTC_V001") is for +// communicating with the RTC. + +#include "gba/gba.h" +#include "siirtc.h" + +#define STATUS_INTFE 0x02 // frequency interrupt enable +#define STATUS_INTME 0x08 // per-minute interrupt enable +#define STATUS_INTAE 0x20 // alarm interrupt enable +#define STATUS_24HOUR 0x40 // 0: 12-hour mode, 1: 24-hour mode +#define STATUS_POWER 0x80 // power on or power failure occurred + +#define TEST_MODE 0x80 // flag in the "second" byte + +#define ALARM_AM 0x00 +#define ALARM_PM 0x80 + +#define OFFSET_YEAR offsetof(struct SiiRtcInfo, year) +#define OFFSET_MONTH offsetof(struct SiiRtcInfo, month) +#define OFFSET_DAY offsetof(struct SiiRtcInfo, day) +#define OFFSET_DAY_OF_WEEK offsetof(struct SiiRtcInfo, dayOfWeek) +#define OFFSET_HOUR offsetof(struct SiiRtcInfo, hour) +#define OFFSET_MINUTE offsetof(struct SiiRtcInfo, minute) +#define OFFSET_SECOND offsetof(struct SiiRtcInfo, second) +#define OFFSET_STATUS offsetof(struct SiiRtcInfo, status) +#define OFFSET_ALARM_HOUR offsetof(struct SiiRtcInfo, alarmHour) +#define OFFSET_ALARM_MINUTE offsetof(struct SiiRtcInfo, alarmMinute) + +#define INFO_BUF(info, index) (*((u8 *)(info) + (index))) + +#define DATETIME_BUF(info, index) INFO_BUF(info, OFFSET_YEAR + index) +#define DATETIME_BUF_LEN (OFFSET_SECOND - OFFSET_YEAR + 1) + +#define TIME_BUF(info, index) INFO_BUF(info, OFFSET_HOUR + index) +#define TIME_BUF_LEN (OFFSET_SECOND - OFFSET_HOUR + 1) + +#define WR 0 // command for writing data +#define RD 1 // command for reading data + +#define CMD(n) (0x60 | (n << 1)) + +#define CMD_RESET CMD(0) +#define CMD_STATUS CMD(1) +#define CMD_DATETIME CMD(2) +#define CMD_TIME CMD(3) +#define CMD_ALARM CMD(4) + +#define GPIO_PORT_DATA (*(vu16 *)0x80000C4) +#define GPIO_PORT_DIRECTION (*(vu16 *)0x80000C6) +#define GPIO_PORT_READ_ENABLE (*(vu16 *)0x80000C8) + +extern vu16 GPIOPortDirection; + +static u16 sDummy; // unused variable +static bool8 sLocked; + +static int WriteCommand(u8 value); +static int WriteData(u8 value); +static u8 ReadData(); +static void EnableGpioPortRead(); +static void DisableGpioPortRead(); + +static const char AgbLibRtcVersion[] = "SIIRTC_V001"; + +void SiiRtcUnprotect() +{ + EnableGpioPortRead(); + sLocked = FALSE; +} + +void SiiRtcProtect() +{ + DisableGpioPortRead(); + sLocked = TRUE; +} + +u8 SiiRtcProbe() +{ + u8 errorCode; + struct SiiRtcInfo rtc; + + if (!SiiRtcGetStatus(&rtc)) + return 0; + + errorCode = 0; + + if ((rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == SIIRTCINFO_POWER + || (rtc.status & (SIIRTCINFO_POWER | SIIRTCINFO_24HOUR)) == 0) + { + // The RTC is in 12-hour mode. Reset it and switch to 24-hour mode. + + // Note that the conditions are redundant and equivalent to simply + // "(rtc.status & SIIRTCINFO_24HOUR) == 0". It's possible that this + // was also intended to handle resetting the clock after power failure + // but a mistake was made. + + if (!SiiRtcReset()) + return 0; + + errorCode++; + } + + SiiRtcGetTime(&rtc); + + if (rtc.second & TEST_MODE) + { + // The RTC is in test mode. Reset it to leave test mode. + + if (!SiiRtcReset()) + return (errorCode << 4) & 0xF0; + + errorCode++; + } + + return (errorCode << 4) | 1; +} + +bool8 SiiRtcReset() +{ + u8 result; + struct SiiRtcInfo rtc; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_RESET | WR); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + rtc.status = SIIRTCINFO_24HOUR; + + result = SiiRtcSetStatus(&rtc); + + return result; +} + +bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc) +{ + u8 statusData; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_STATUS | RD); + + GPIO_PORT_DIRECTION = 5; + + statusData = ReadData(); + + rtc->status = (statusData & (STATUS_POWER | STATUS_24HOUR)) + | ((statusData & STATUS_INTAE) >> 3) + | ((statusData & STATUS_INTME) >> 2) + | ((statusData & STATUS_INTFE) >> 1); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc) +{ + u8 statusData; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + statusData = STATUS_24HOUR + | ((rtc->status & SIIRTCINFO_INTAE) << 3) + | ((rtc->status & SIIRTCINFO_INTME) << 2) + | ((rtc->status & SIIRTCINFO_INTFE) << 1); + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_STATUS | WR); + + WriteData(statusData); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc) +{ + u8 i; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_DATETIME | RD); + + GPIO_PORT_DIRECTION = 5; + + for (i = 0; i < DATETIME_BUF_LEN; i++) + DATETIME_BUF(rtc, i) = ReadData(); + + INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc) +{ + u8 i; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_DATETIME | WR); + + for (i = 0; i < DATETIME_BUF_LEN; i++) + WriteData(DATETIME_BUF(rtc, i)); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc) +{ + u8 i; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_TIME | RD); + + GPIO_PORT_DIRECTION = 5; + + for (i = 0; i < TIME_BUF_LEN; i++) + TIME_BUF(rtc, i) = ReadData(); + + INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc) +{ + u8 i; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIO_PORT_DIRECTION = 7; + + WriteCommand(CMD_TIME | WR); + + for (i = 0; i < TIME_BUF_LEN; i++) + WriteData(TIME_BUF(rtc, i)); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc) +{ + u8 i; + u8 alarmData[2]; + + if (sLocked == TRUE) + return FALSE; + + sLocked = TRUE; + + // Decode BCD. + alarmData[0] = (rtc->alarmHour & 0xF) + 10 * ((rtc->alarmHour >> 4) & 0xF); + + // The AM/PM flag must be set correctly even in 24-hour mode. + + if (alarmData[0] < 12) + alarmData[0] = rtc->alarmHour | ALARM_AM; + else + alarmData[0] = rtc->alarmHour | ALARM_PM; + + alarmData[1] = rtc->alarmMinute; + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 5; + + GPIOPortDirection = 7; // Why is this the only instance that uses a symbol? + + WriteCommand(CMD_ALARM | WR); + + for (i = 0; i < 2; i++) + WriteData(alarmData[i]); + + GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = 1; + + sLocked = FALSE; + + return TRUE; +} + +static int WriteCommand(u8 value) +{ + u8 i; + u8 temp; + + for (i = 0; i < 8; i++) + { + temp = ((value >> (7 - i)) & 1); + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 5; + } + + // control reaches end of non-void function +} + +static int WriteData(u8 value) +{ + u8 i; + u8 temp; + + for (i = 0; i < 8; i++) + { + temp = ((value >> i) & 1); + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 4; + GPIO_PORT_DATA = (temp << 1) | 5; + } + + // control reaches end of non-void function +} + +static u8 ReadData() +{ + u8 i; + u8 temp; + u8 value; + + for (i = 0; i < 8; i++) + { + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 4; + GPIO_PORT_DATA = 5; + + temp = ((GPIO_PORT_DATA & 2) >> 1); + value = (value >> 1) | (temp << 7); // UB: accessing uninitialized var + } + + return value; +} + +static void EnableGpioPortRead() +{ + GPIO_PORT_READ_ENABLE = 1; +} + +static void DisableGpioPortRead() +{ + GPIO_PORT_READ_ENABLE = 0; +} diff --git a/sym_bss.txt b/sym_bss.txt index 95c5bc3cc..0e583c4e1 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -132,7 +132,7 @@ gUnknown_030007B0: @ 30007B0 .include "src/field/player_pc.o" .include "asm/m4a_1.o" - .include "src/engine/agb_flash.o" - .include "src/engine/siirtc.o" + .include "src/libs/agb_flash.o" + .include "src/libs/siirtc.o" .include "tools/agbcc/lib/libgcc.a:dp-bit.o" .include "tools/agbcc/lib/libgcc.a:fp-bit.o" diff --git a/sym_common.txt b/sym_common.txt index e141f6899..8a2f53869 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -328,5 +328,5 @@ gUnknown_03005F94: @ 3005F94 gUnknown_03005FA0: @ 3005FA0 .space 0x30 - .include "engine/m4a_2.o" - .include "engine/agb_flash.o" + .include "libs/m4a_2.o" + .include "libs/agb_flash.o" -- 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 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 4f36e317f9d2489e7c192f2a70c44a087e7d1998 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 23 Aug 2017 15:55:01 +0200 Subject: name labels --- asm/battle_2.s | 8 +- asm/battle_9.s | 48 +- asm/battle_anim_80CA710.s | 2172 ++++++++++++++++++------------------- asm/battle_anim_81258BC.s | 22 +- asm/battle_anim_812C144.s | 454 ++++---- asm/battle_anim_813F0F4.s | 120 +- asm/battle_tower.s | 4 +- asm/cable_car.s | 8 +- asm/contest.s | 2 +- asm/contest_link_80C2020.s | 4 +- asm/easy_chat.s | 2 +- asm/evolution_scene.s | 22 +- asm/pokeblock_feed.s | 4 +- asm/pokemon_storage_system.s | 4 +- asm/pokemon_summary_screen.s | 4 +- asm/pokenav.s | 2 +- asm/slot_machine.s | 4 +- asm/trade.s | 12 +- include/battle.h | 2 +- include/battle_anim.h | 4 +- include/decompress.h | 2 +- include/global.h | 14 +- include/pokedex.h | 12 +- include/pokemon.h | 8 +- include/rom_8077ABC.h | 16 +- src/battle_10.c | 10 +- src/battle_2.c | 8 +- src/battle_3.c | 2 +- src/battle_4.c | 10 +- src/battle_6.c | 10 +- src/battle_7.c | 42 +- src/battle_8.c | 10 +- src/battle_811DA74.c | 10 +- src/battle_ai.c | 4 +- src/battle_anim.c | 162 +-- src/battle_anim_807B69C.c | 14 +- src/battle_anim_80A7E7C.c | 92 +- src/battle_anim_8137220.c | 4 +- src/battle_interface.c | 2 +- src/berry_blender.c | 6 +- src/birch_pc.c | 8 +- src/contest_painting.c | 4 +- src/credits.c | 4 +- src/decompress.c | 2 +- src/easy_chat.c | 2 +- src/egg_hatch.c | 12 +- src/field_effect.c | 2 +- src/hall_of_fame.c | 2 +- src/intro.c | 2 +- src/item_menu.c | 2 +- src/mystery_event_script.c | 4 +- src/palette.c | 2 +- src/pokeblock.c | 2 +- src/pokedex.c | 99 +- src/pokemon_3.c | 24 +- src/rom_8077ABC.c | 204 ++-- src/script_pokemon_util_80C4BF0.c | 6 +- src/shop.c | 2 +- src/slot_machine.c | 2 +- src/tv.c | 4 +- src/unused_8124F94.c | 6 +- 61 files changed, 1879 insertions(+), 1856 deletions(-) diff --git a/asm/battle_2.s b/asm/battle_2.s index 804cefa76..d94dd5b8d 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -1514,8 +1514,8 @@ _08012FE8: .4byte gUnknown_02024A76 _08012FEC: .4byte gTurnOrder thumb_func_end sub_8012FBC - thumb_func_start b_first_side -b_first_side: @ 8012FF0 + thumb_func_start GetWhoStrikesFirst +GetWhoStrikesFirst: @ 8012FF0 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -2003,7 +2003,7 @@ _080133B6: pop {r4-r7} pop {r1} bx r1 - thumb_func_end b_first_side + thumb_func_end GetWhoStrikesFirst thumb_func_start sub_80133C8 sub_80133C8: @ 80133C8 @@ -2285,7 +2285,7 @@ _080135D0: beq _0801360C adds r0, r3, 0 movs r2, 0 - bl b_first_side + bl GetWhoStrikesFirst lsls r0, 24 cmp r0, 0 beq _0801360C diff --git a/asm/battle_9.s b/asm/battle_9.s index 1c5431afc..15d34e5b2 100644 --- a/asm/battle_9.s +++ b/asm/battle_9.s @@ -6,8 +6,8 @@ .text - thumb_func_start ai_switch_perish_song -ai_switch_perish_song: @ 8035FEC + thumb_func_start AI_SwitchIfPerishSong +AI_SwitchIfPerishSong: @ 8035FEC push {lr} ldr r1, _08036038 @ =gStatuses3 ldr r0, _0803603C @ =gActiveBank @@ -55,10 +55,10 @@ _0803604C: _0803604E: pop {r1} bx r1 - thumb_func_end ai_switch_perish_song + thumb_func_end AI_SwitchIfPerishSong - thumb_func_start sub_8036054 -sub_8036054: @ 8036054 + thumb_func_start AI_SwitchIfWonderguard +AI_SwitchIfWonderguard: @ 8036054 push {r4-r7,lr} mov r7, r9 mov r6, r8 @@ -250,7 +250,7 @@ _080361D8: .4byte gBattleMons _080361DC: .4byte gActiveBank _080361E0: .4byte gEnemyParty _080361E4: .4byte gBattlePartyID - thumb_func_end sub_8036054 + thumb_func_end AI_SwitchIfWonderguard thumb_func_start sub_80361E8 sub_80361E8: @ 80361E8 @@ -521,8 +521,8 @@ _08036402: bx r1 thumb_func_end sub_80361E8 - thumb_func_start ai_switchout_natural_cure -ai_switchout_natural_cure: @ 8036410 + thumb_func_start AI_SwitchIfNaturalCure +AI_SwitchIfNaturalCure: @ 8036410 push {r4,r5,lr} ldr r3, _08036468 @ =gBattleMons ldr r5, _0803646C @ =gActiveBank @@ -645,7 +645,7 @@ _08036500: _08036508: .4byte gActiveBank _0803650C: .4byte 0x02000000 _08036510: .4byte 0x000160c8 - thumb_func_end ai_switchout_natural_cure + thumb_func_end AI_SwitchIfNaturalCure thumb_func_start ai_has_super_effective_move_on_field ai_has_super_effective_move_on_field: @ 8036514 @@ -808,8 +808,8 @@ _08036654: .4byte gBattleMons _08036658: .4byte gActiveBank thumb_func_end ai_has_super_effective_move_on_field - thumb_func_start ai_is_too_invested_in_stat_buffs -ai_is_too_invested_in_stat_buffs: @ 803665C + thumb_func_start AI_AreStatsRaised +AI_AreStatsRaised: @ 803665C push {r4,lr} movs r4, 0 ldr r1, _0803669C @ =gBattleMons @@ -848,7 +848,7 @@ _08036696: .align 2, 0 _0803669C: .4byte gBattleMons _080366A0: .4byte gActiveBank - thumb_func_end ai_is_too_invested_in_stat_buffs + thumb_func_end AI_AreStatsRaised thumb_func_start sub_80366A4 sub_80366A4: @ 80366A4 @@ -1140,8 +1140,8 @@ _080368FC: .4byte gBattleMons _08036900: .4byte gEnemyParty thumb_func_end sub_80366A4 - thumb_func_start sub_8036904 -sub_8036904: @ 8036904 + thumb_func_start AI_ShouldSwitch +AI_ShouldSwitch: @ 8036904 push {r4-r7,lr} mov r7, r8 push {r7} @@ -1331,11 +1331,11 @@ _08036A7E: mov r2, r8 cmp r2, 0 beq _08036AFC - bl ai_switch_perish_song + bl AI_SwitchIfPerishSong lsls r0, 24 cmp r0, 0 bne _08036AE4 - bl sub_8036054 + bl AI_SwitchIfWonderguard lsls r0, 24 cmp r0, 0 bne _08036AE4 @@ -1343,7 +1343,7 @@ _08036A7E: lsls r0, 24 cmp r0, 0 bne _08036AE4 - bl ai_switchout_natural_cure + bl AI_SwitchIfNaturalCure lsls r0, 24 cmp r0, 0 bne _08036AE4 @@ -1352,7 +1352,7 @@ _08036A7E: lsls r0, 24 cmp r0, 0 bne _08036AFC - bl ai_is_too_invested_in_stat_buffs + bl AI_AreStatsRaised lsls r0, 24 cmp r0, 0 bne _08036AFC @@ -1386,7 +1386,7 @@ _08036AFE: pop {r4-r7} pop {r1} bx r1 - thumb_func_end sub_8036904 + thumb_func_end AI_ShouldSwitch thumb_func_start sub_8036B0C sub_8036B0C: @ 8036B0C @@ -1399,7 +1399,7 @@ sub_8036B0C: @ 8036B0C bne _08036B1C b _08036C2E _08036B1C: - bl sub_8036904 + bl AI_ShouldSwitch lsls r0, 24 cmp r0, 0 bne _08036B28 @@ -1521,7 +1521,7 @@ _08036C18: .4byte 0x00016068 _08036C1C: .4byte gActiveBank _08036C20: .4byte 0x000160c8 _08036C24: - bl sub_803708C + bl AI_ShouldUseItem lsls r0, 24 cmp r0, 0 bne _08036C40 @@ -2083,8 +2083,8 @@ _08037086: bx r1 thumb_func_end ai_identify_item_effect - thumb_func_start sub_803708C -sub_803708C: @ 803708C + thumb_func_start AI_ShouldUseItem +AI_ShouldUseItem: @ 803708C push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -2665,7 +2665,7 @@ _080374FA: pop {r4-r7} pop {r1} bx r1 - thumb_func_end sub_803708C + thumb_func_end AI_ShouldUseItem thumb_func_start nullsub_47 nullsub_47: @ 803750C diff --git a/asm/battle_anim_80CA710.s b/asm/battle_anim_80CA710.s index fd5b9fb88..7b506ac24 100644 --- a/asm/battle_anim_80CA710.s +++ b/asm/battle_anim_80CA710.s @@ -23,7 +23,7 @@ sub_80CA710: @ 80CA710 strh r0, [r4, 0x2E] ldrh r0, [r5, 0x6] strh r0, [r4, 0x30] - ldr r0, _080CA748 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CA748 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -34,7 +34,7 @@ sub_80CA710: @ 80CA710 b _080CA74E .align 2, 0 _080CA744: .4byte gBattleAnimArgs -_080CA748: .4byte gBattleAnimPlayerMonIndex +_080CA748: .4byte gBattleAnimBankAttacker _080CA74C: ldrh r0, [r5, 0x8] _080CA74E: @@ -101,7 +101,7 @@ sub_80CA7B0: @ 80CA7B0 ldr r0, _080CA7F0 @ =gBattleAnimArgs ldrh r0, [r0, 0x4] strh r0, [r4, 0x2E] - ldr r5, _080CA7F4 @ =gBattleAnimPlayerMonIndex + ldr r5, _080CA7F4 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -118,13 +118,13 @@ sub_80CA7B0: @ 80CA7B0 str r0, [r4, 0x1C] ldr r1, _080CA7FC @ =move_anim_8074EE0 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 .align 2, 0 _080CA7F0: .4byte gBattleAnimArgs -_080CA7F4: .4byte gBattleAnimPlayerMonIndex +_080CA7F4: .4byte gBattleAnimBankAttacker _080CA7F8: .4byte sub_8078B34 _080CA7FC: .4byte move_anim_8074EE0 thumb_func_end sub_80CA7B0 @@ -141,7 +141,7 @@ sub_80CA800: @ 80CA800 bl StartSpriteAnim ldrh r0, [r5, 0x4] strh r0, [r4, 0x2E] - ldr r5, _080CA84C @ =gBattleAnimEnemyMonIndex + ldr r5, _080CA84C @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -158,13 +158,13 @@ sub_80CA800: @ 80CA800 str r0, [r4, 0x1C] ldr r1, _080CA854 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 .align 2, 0 _080CA848: .4byte gBattleAnimArgs -_080CA84C: .4byte gBattleAnimEnemyMonIndex +_080CA84C: .4byte gBattleAnimBankTarget _080CA850: .4byte sub_8078B34 _080CA854: .4byte move_anim_8072740 thumb_func_end sub_80CA800 @@ -180,7 +180,7 @@ sub_80CA858: @ 80CA858 strh r0, [r4, 0x2E] ldrh r0, [r4, 0x20] strh r0, [r4, 0x30] - ldr r5, _080CA8AC @ =gBattleAnimEnemyMonIndex + ldr r5, _080CA8AC @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -208,7 +208,7 @@ sub_80CA858: @ 80CA858 bx r0 .align 2, 0 _080CA8A8: .4byte gBattleAnimArgs -_080CA8AC: .4byte gBattleAnimEnemyMonIndex +_080CA8AC: .4byte gBattleAnimBankTarget _080CA8B0: .4byte sub_80CA8B4 thumb_func_end sub_80CA858 @@ -228,15 +228,15 @@ _080CA8CA: ldrsh r0, [r4, r1] cmp r0, 0x7F ble _080CA8E4 - ldr r0, _080CA8E0 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CA8E0 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079E90 adds r0, 0x1 b _080CA8EE .align 2, 0 -_080CA8E0: .4byte gBattleAnimEnemyMonIndex +_080CA8E0: .4byte gBattleAnimBankTarget _080CA8E4: - ldr r0, _080CA924 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CA924 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079E90 adds r0, 0x6 @@ -268,7 +268,7 @@ _080CA91E: pop {r0} bx r0 .align 2, 0 -_080CA924: .4byte gBattleAnimEnemyMonIndex +_080CA924: .4byte gBattleAnimBankTarget thumb_func_end sub_80CA8B4 thumb_func_start sub_80CA928 @@ -305,7 +305,7 @@ sub_80CA928: @ 80CA928 strh r0, [r1, 0x4] strh r2, [r1, 0x6] ldr r4, _080CA9A0 @ =gSpriteTemplate_83D631C - ldr r0, _080CA9A4 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CA9A4 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079E90 adds r3, r0, 0 @@ -331,7 +331,7 @@ _080CA990: _080CA998: .4byte gTasks _080CA99C: .4byte gBattleAnimArgs _080CA9A0: .4byte gSpriteTemplate_83D631C -_080CA9A4: .4byte gBattleAnimEnemyMonIndex +_080CA9A4: .4byte gBattleAnimBankTarget thumb_func_end sub_80CA928 thumb_func_start sub_80CA9A8 @@ -343,7 +343,7 @@ sub_80CA9A8: @ 80CA9A8 ldr r6, _080CA9EC @ =gBattleAnimArgs ldrh r0, [r6, 0x6] strh r0, [r4, 0x2E] - ldr r5, _080CA9F0 @ =gBattleAnimPlayerMonIndex + ldr r5, _080CA9F0 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -367,7 +367,7 @@ sub_80CA9A8: @ 80CA9A8 bx r0 .align 2, 0 _080CA9EC: .4byte gBattleAnimArgs -_080CA9F0: .4byte gBattleAnimPlayerMonIndex +_080CA9F0: .4byte gBattleAnimBankAttacker _080CA9F4: .4byte sub_80CA9F8 thumb_func_end sub_80CA9A8 @@ -399,7 +399,7 @@ sub_80CAA14: @ 80CAA14 ands r1, r0 adds r0, r5, 0 bl StartSpriteAnim - ldr r4, _080CAA5C @ =gBattleAnimPlayerMonIndex + ldr r4, _080CAA5C @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -421,7 +421,7 @@ sub_80CAA14: @ 80CAA14 subs r0, 0x14 b _080CAA64 .align 2, 0 -_080CAA5C: .4byte gBattleAnimPlayerMonIndex +_080CAA5C: .4byte gBattleAnimBankAttacker _080CAA60: ldrh r0, [r5, 0x20] adds r0, 0x14 @@ -436,7 +436,7 @@ _080CAA64: strh r0, [r5, 0x2E] ldrh r0, [r5, 0x20] strh r0, [r5, 0x30] - ldr r4, _080CAAC4 @ =gBattleAnimEnemyMonIndex + ldr r4, _080CAAC4 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -469,7 +469,7 @@ _080CAA64: pop {r0} bx r0 .align 2, 0 -_080CAAC4: .4byte gBattleAnimEnemyMonIndex +_080CAAC4: .4byte gBattleAnimBankTarget _080CAAC8: .4byte sub_80CAACC thumb_func_end sub_80CAA14 @@ -522,7 +522,7 @@ sub_80CAB18: @ 80CAB18 adds r6, r0, 0 movs r1, 0x1 bl sub_80787B0 - ldr r0, _080CAB78 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CAB78 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -536,7 +536,7 @@ _080CAB38: ldr r4, _080CAB7C @ =gBattleAnimArgs ldrh r0, [r4, 0x8] strh r0, [r6, 0x2E] - ldr r5, _080CAB80 @ =gBattleAnimEnemyMonIndex + ldr r5, _080CAB80 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0 bl sub_8077ABC @@ -563,9 +563,9 @@ _080CAB38: pop {r0} bx r0 .align 2, 0 -_080CAB78: .4byte gBattleAnimPlayerMonIndex +_080CAB78: .4byte gBattleAnimBankAttacker _080CAB7C: .4byte gBattleAnimArgs -_080CAB80: .4byte gBattleAnimEnemyMonIndex +_080CAB80: .4byte gBattleAnimBankTarget _080CAB84: .4byte sub_80CAB88 thumb_func_end sub_80CAB18 @@ -589,7 +589,7 @@ sub_80CAB88: @ 80CAB88 str r0, [r4, 0x1C] ldr r1, _080CABBC @ =sub_80CABC0 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 _080CABB2: pop {r4} pop {r0} @@ -619,7 +619,7 @@ sub_80CABC0: @ 80CABC0 str r0, [r4, 0x1C] ldr r1, _080CABF4 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4} pop {r0} bx r0 @@ -693,7 +693,7 @@ sub_80CAC44: @ 80CAC44 lsrs r0, 16 cmp r0, 0x7F bhi _080CAC98 - ldr r0, _080CAC94 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CAC94 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079ED4 movs r1, 0x3 @@ -706,9 +706,9 @@ sub_80CAC44: @ 80CAC44 orrs r0, r1 b _080CACBC .align 2, 0 -_080CAC94: .4byte gBattleAnimEnemyMonIndex +_080CAC94: .4byte gBattleAnimBankTarget _080CAC98: - ldr r0, _080CACE8 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CACE8 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079ED4 adds r0, 0x1 @@ -749,7 +749,7 @@ _080CACE0: pop {r0} bx r0 .align 2, 0 -_080CACE8: .4byte gBattleAnimEnemyMonIndex +_080CACE8: .4byte gBattleAnimBankTarget thumb_func_end sub_80CAC44 thumb_func_start sub_80CACEC @@ -770,7 +770,7 @@ _080CAD06: bl DestroyAnimVisualTask b _080CAD4A _080CAD0E: - ldr r0, _080CAD2C @ =gBattleAnimEnemyMonIndex + ldr r0, _080CAD2C @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -784,7 +784,7 @@ _080CAD0E: strb r1, [r0] b _080CAD44 .align 2, 0 -_080CAD2C: .4byte gBattleAnimEnemyMonIndex +_080CAD2C: .4byte gBattleAnimBankTarget _080CAD30: .4byte REG_BG2CNT _080CAD34: ldr r2, _080CAD50 @ =REG_BG1CNT @@ -820,7 +820,7 @@ sub_80CAD54: @ 80CAD54 strh r0, [r4, 0x32] ldrh r0, [r4, 0x22] strh r0, [r4, 0x34] - ldr r0, _080CADA0 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CADA0 @ =gBattleAnimBankAttacker ldrb r0, [r0] movs r1, 0x3 bl sub_8077ABC @@ -842,7 +842,7 @@ sub_80CAD54: @ 80CAD54 bx r0 .align 2, 0 _080CAD9C: .4byte gBattleAnimArgs -_080CADA0: .4byte gBattleAnimPlayerMonIndex +_080CADA0: .4byte gBattleAnimBankAttacker _080CADA4: .4byte sub_80CADA8 thumb_func_end sub_80CAD54 @@ -875,15 +875,15 @@ sub_80CADA8: @ 80CADA8 lsrs r0, 16 cmp r0, 0x7F bhi _080CADF4 - ldr r0, _080CADF0 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CADF0 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl sub_8079E90 subs r0, 0x1 b _080CADFE .align 2, 0 -_080CADF0: .4byte gBattleAnimPlayerMonIndex +_080CADF0: .4byte gBattleAnimBankAttacker _080CADF4: - ldr r0, _080CAE10 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CAE10 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl sub_8079E90 adds r0, 0x1 @@ -898,7 +898,7 @@ _080CADFE: strh r0, [r4, 0x38] b _080CAE1A .align 2, 0 -_080CAE10: .4byte gBattleAnimPlayerMonIndex +_080CAE10: .4byte gBattleAnimBankAttacker _080CAE14: adds r0, r4, 0 bl move_anim_8072740 @@ -922,7 +922,7 @@ sub_80CAE20: @ 80CAE20 strh r0, [r4, 0x32] ldrh r0, [r4, 0x22] strh r0, [r4, 0x34] - ldr r0, _080CAE6C @ =gBattleAnimPlayerMonIndex + ldr r0, _080CAE6C @ =gBattleAnimBankAttacker ldrb r0, [r0] movs r1, 0x3 bl sub_8077ABC @@ -944,7 +944,7 @@ sub_80CAE20: @ 80CAE20 bx r0 .align 2, 0 _080CAE68: .4byte gBattleAnimArgs -_080CAE6C: .4byte gBattleAnimPlayerMonIndex +_080CAE6C: .4byte gBattleAnimBankAttacker _080CAE70: .4byte sub_80CAE74 thumb_func_end sub_80CAE20 @@ -1007,7 +1007,7 @@ _080CAED2: sub_80CAED8: @ 80CAED8 push {r4,r5,lr} adds r4, r0, 0 - ldr r5, _080CAF14 @ =gBattleAnimPlayerMonIndex + ldr r5, _080CAF14 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -1033,7 +1033,7 @@ sub_80CAED8: @ 80CAED8 pop {r0} bx r0 .align 2, 0 -_080CAF14: .4byte gBattleAnimPlayerMonIndex +_080CAF14: .4byte gBattleAnimBankAttacker _080CAF18: .4byte gBattleAnimArgs _080CAF1C: .4byte sub_80CAF20 thumb_func_end sub_80CAED8 @@ -1087,7 +1087,7 @@ _080CAF68: sub_80CAF6C: @ 80CAF6C push {r4,lr} adds r4, r0, 0 - ldr r0, _080CAF8C @ =gBattleAnimPlayerMonIndex + ldr r0, _080CAF8C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -1100,7 +1100,7 @@ sub_80CAF6C: @ 80CAF6C negs r0, r0 b _080CAF9A .align 2, 0 -_080CAF8C: .4byte gBattleAnimPlayerMonIndex +_080CAF8C: .4byte gBattleAnimBankAttacker _080CAF90: movs r1, 0x2E ldrsh r0, [r4, r1] @@ -1142,7 +1142,7 @@ sub_80CAFD0: @ 80CAFD0 adds r5, r0, 0 movs r1, 0x1 bl sub_80787B0 - ldr r0, _080CB024 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CB024 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -1160,7 +1160,7 @@ _080CAFF0: ldrsh r0, [r6, r1] cmp r0, 0 bne _080CB030 - ldr r4, _080CB02C @ =gBattleAnimEnemyMonIndex + ldr r4, _080CB02C @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -1178,11 +1178,11 @@ _080CAFF0: adds r0, r6 b _080CB050 .align 2, 0 -_080CB024: .4byte gBattleAnimPlayerMonIndex +_080CB024: .4byte gBattleAnimBankAttacker _080CB028: .4byte gBattleAnimArgs -_080CB02C: .4byte gBattleAnimEnemyMonIndex +_080CB02C: .4byte gBattleAnimBankTarget _080CB030: - ldr r0, _080CB07C @ =gBattleAnimEnemyMonIndex + ldr r0, _080CB07C @ =gBattleAnimBankTarget ldrb r0, [r0] adds r2, r5, 0 adds r2, 0x32 @@ -1204,11 +1204,11 @@ _080CB050: strh r0, [r5, 0x38] adds r0, r5, 0 bl sub_80786EC - ldr r0, _080CB084 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CB084 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide adds r4, r0, 0 - ldr r0, _080CB07C @ =gBattleAnimEnemyMonIndex + ldr r0, _080CB07C @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r4, 24 @@ -1218,9 +1218,9 @@ _080CB050: movs r0, 0x1 b _080CB08A .align 2, 0 -_080CB07C: .4byte gBattleAnimEnemyMonIndex +_080CB07C: .4byte gBattleAnimBankTarget _080CB080: .4byte gBattleAnimArgs -_080CB084: .4byte gBattleAnimPlayerMonIndex +_080CB084: .4byte gBattleAnimBankAttacker _080CB088: movs r0, 0 _080CB08A: @@ -1338,7 +1338,7 @@ sub_80CB144: @ 80CB144 lsrs r0, 24 cmp r0, 0x1 bne _080CB170 - ldr r0, _080CB198 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CB198 @ =gBattleAnimBankTarget ldrb r0, [r0] adds r2, r4, 0 adds r2, 0x20 @@ -1367,7 +1367,7 @@ _080CB170: pop {r0} bx r0 .align 2, 0 -_080CB198: .4byte gBattleAnimEnemyMonIndex +_080CB198: .4byte gBattleAnimBankTarget _080CB19C: .4byte gBattleAnimArgs _080CB1A0: .4byte sub_80CB1A4 thumb_func_end sub_80CB144 @@ -1426,7 +1426,7 @@ _080CB1E0: ldrsh r0, [r4, r1] cmp r0, 0x7F bgt _080CB220 - ldr r0, _080CB21C @ =gBattleAnimEnemyMonIndex + ldr r0, _080CB21C @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079ED4 lsls r0, 24 @@ -1434,9 +1434,9 @@ _080CB1E0: subs r0, 0x1 b _080CB22E .align 2, 0 -_080CB21C: .4byte gBattleAnimEnemyMonIndex +_080CB21C: .4byte gBattleAnimBankTarget _080CB220: - ldr r0, _080CB258 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CB258 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079ED4 lsls r0, 24 @@ -1465,7 +1465,7 @@ _080CB252: pop {r0} bx r0 .align 2, 0 -_080CB258: .4byte gBattleAnimEnemyMonIndex +_080CB258: .4byte gBattleAnimBankTarget thumb_func_end sub_80CB1A4 thumb_func_start sub_80CB25C @@ -1514,7 +1514,7 @@ sub_80CB298: @ 80CB298 ands r0, r1 strb r0, [r2] movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId movs r0, 0x80 lsls r0, 1 strh r0, [r4, 0x2E] @@ -1535,7 +1535,7 @@ sub_80CB2D4: @ 80CB2D4 push {r4,lr} adds r4, r0, 0 movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId movs r1, 0x32 ldrsh r0, [r4, r1] cmp r0, 0 @@ -1596,7 +1596,7 @@ sub_80CB340: @ 80CB340 lsls r0, 24 lsrs r4, r0, 24 movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r2, r0, 24 ldr r1, _080CB36C @ =gSprites @@ -1650,7 +1650,7 @@ sub_80CB3A8: @ 80CB3A8 lsls r4, 24 lsrs r4, 24 movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 adds r6, r0, 0 @@ -1671,7 +1671,7 @@ sub_80CB3A8: @ 80CB3A8 lsls r1, 16 asrs r1, 24 strh r1, [r5, 0x24] - ldr r0, _080CB430 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CB430 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -1709,7 +1709,7 @@ _080CB420: .align 2, 0 _080CB428: .4byte gTasks _080CB42C: .4byte gSprites -_080CB430: .4byte gBattleAnimEnemyMonIndex +_080CB430: .4byte gBattleAnimBankTarget _080CB434: .4byte sub_80CB438 thumb_func_end sub_80CB3A8 @@ -1734,7 +1734,7 @@ sub_80CB438: @ 80CB438 cmp r5, 0 bne _080CB4A8 movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 @@ -1800,7 +1800,7 @@ sub_80CB4CC: @ 80CB4CC beq _080CB538 b _080CB58A _080CB4DE: - ldr r6, _080CB530 @ =gBattleAnimEnemyMonIndex + ldr r6, _080CB530 @ =gBattleAnimBankTarget ldrb r0, [r6] bl GetBankSide lsls r0, 24 @@ -1840,7 +1840,7 @@ _080CB4F6: strh r0, [r5, 0x2E] b _080CB58A .align 2, 0 -_080CB530: .4byte gBattleAnimEnemyMonIndex +_080CB530: .4byte gBattleAnimBankTarget _080CB534: .4byte gBattleAnimArgs _080CB538: adds r2, r5, 0 @@ -1862,7 +1862,7 @@ _080CB538: bl ChangeSpriteAffineAnim movs r0, 0x19 strh r0, [r5, 0x2E] - ldr r4, _080CB590 @ =gBattleAnimPlayerMonIndex + ldr r4, _080CB590 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -1879,13 +1879,13 @@ _080CB538: str r0, [r5, 0x1C] ldr r1, _080CB598 @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 _080CB58A: pop {r4-r6} pop {r0} bx r0 .align 2, 0 -_080CB590: .4byte gBattleAnimPlayerMonIndex +_080CB590: .4byte gBattleAnimBankAttacker _080CB594: .4byte sub_8078CC0 _080CB598: .4byte move_anim_8072740 thumb_func_end sub_80CB4CC @@ -1898,7 +1898,7 @@ sub_80CB59C: @ 80CB59C ldrsh r0, [r5, r1] cmp r0, 0 bne _080CB608 - ldr r4, _080CB614 @ =gBattleAnimPlayerMonIndex + ldr r4, _080CB614 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -1950,7 +1950,7 @@ _080CB608: pop {r0} bx r0 .align 2, 0 -_080CB614: .4byte gBattleAnimPlayerMonIndex +_080CB614: .4byte gBattleAnimBankAttacker _080CB618: .4byte gBattleAnimArgs _080CB61C: .4byte sub_80CB710 thumb_func_end sub_80CB59C @@ -1964,7 +1964,7 @@ sub_80CB620: @ 80CB620 push {r4-r6} sub sp, 0x4 mov r9, r0 - ldr r4, _080CB6FC @ =gBattleAnimPlayerMonIndex + ldr r4, _080CB6FC @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -1979,7 +1979,7 @@ sub_80CB620: @ 80CB620 lsls r0, 24 lsrs r0, 24 mov r8, r0 - ldr r6, _080CB700 @ =gBattleAnimEnemyMonIndex + ldr r6, _080CB700 @ =gBattleAnimBankTarget ldrb r0, [r6] movs r1, 0x2 bl sub_8077ABC @@ -2060,8 +2060,8 @@ sub_80CB620: @ 80CB620 pop {r0} bx r0 .align 2, 0 -_080CB6FC: .4byte gBattleAnimPlayerMonIndex -_080CB700: .4byte gBattleAnimEnemyMonIndex +_080CB6FC: .4byte gBattleAnimBankAttacker +_080CB700: .4byte gBattleAnimBankTarget _080CB704: .4byte gBattleAnimArgs _080CB708: .4byte sub_80CB710 _080CB70C: .4byte gUnknown_03000728 @@ -2123,7 +2123,7 @@ sub_80CB768: @ 80CB768 ldrsh r0, [r6, r1] cmp r0, 0 bne _080CB7A8 - ldr r5, _080CB7E4 @ =gBattleAnimPlayerMonIndex + ldr r5, _080CB7E4 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -2178,7 +2178,7 @@ _080CB7DE: pop {r0} bx r0 .align 2, 0 -_080CB7E4: .4byte gBattleAnimPlayerMonIndex +_080CB7E4: .4byte gBattleAnimBankAttacker _080CB7E8: .4byte gBattleAnimArgs thumb_func_end sub_80CB768 @@ -2380,7 +2380,7 @@ sub_80CB94C: @ 80CB94C adds r5, r0, 0 movs r1, 0 bl sub_80787B0 - ldr r4, _080CB994 @ =gBattleAnimEnemyMonIndex + ldr r4, _080CB994 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -2391,7 +2391,7 @@ sub_80CB94C: @ 80CB94C bl sub_8077ABC lsls r0, 24 lsrs r2, r0, 24 - ldr r0, _080CB998 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CB998 @ =gBattleAnimBankAttacker ldrb r1, [r0] movs r0, 0x2 eors r0, r1 @@ -2408,8 +2408,8 @@ sub_80CB94C: @ 80CB94C movs r0, 0x1 b _080CB9AE .align 2, 0 -_080CB994: .4byte gBattleAnimEnemyMonIndex -_080CB998: .4byte gBattleAnimPlayerMonIndex +_080CB994: .4byte gBattleAnimBankTarget +_080CB998: .4byte gBattleAnimBankAttacker _080CB99C: strh r6, [r5, 0x3A] adds r0, r2, 0 @@ -2487,7 +2487,7 @@ _080CBA20: sub_80CBA28: @ 80CBA28 push {r4-r6,lr} adds r5, r0, 0 - ldr r4, _080CBA64 @ =gBattleAnimEnemyMonIndex + ldr r4, _080CBA64 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x1 bl sub_8077ABC @@ -2513,7 +2513,7 @@ sub_80CBA28: @ 80CBA28 ldr r0, _080CBA68 @ =sub_80CB8E8 b _080CBA96 .align 2, 0 -_080CBA64: .4byte gBattleAnimEnemyMonIndex +_080CBA64: .4byte gBattleAnimBankTarget _080CBA68: .4byte sub_80CB8E8 _080CBA6C: movs r0, 0xFF @@ -2589,7 +2589,7 @@ sub_80CBAE8: @ 80CBAE8 adds r5, r0, 0 movs r1, 0 bl sub_8078764 - ldr r4, _080CBB30 @ =gBattleAnimPlayerMonIndex + ldr r4, _080CBB30 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -2600,7 +2600,7 @@ sub_80CBAE8: @ 80CBAE8 bl sub_8077ABC lsls r0, 24 lsrs r2, r0, 24 - ldr r0, _080CBB34 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CBB34 @ =gBattleAnimBankTarget ldrb r1, [r0] movs r0, 0x2 eors r0, r1 @@ -2617,8 +2617,8 @@ sub_80CBAE8: @ 80CBAE8 movs r0, 0x1 b _080CBB4A .align 2, 0 -_080CBB30: .4byte gBattleAnimPlayerMonIndex -_080CBB34: .4byte gBattleAnimEnemyMonIndex +_080CBB30: .4byte gBattleAnimBankAttacker +_080CBB34: .4byte gBattleAnimBankTarget _080CBB38: strh r6, [r5, 0x3A] adds r0, r2, 0 @@ -3002,7 +3002,7 @@ sub_80CBDF4: @ 80CBDF4 lsls r0, 3 ldr r1, _080CBF48 @ =gTasks adds r5, r0, r1 - ldr r4, _080CBF4C @ =gBattleAnimEnemyMonIndex + ldr r4, _080CBF4C @ =gBattleAnimBankTarget ldrb r0, [r4] bl sub_8079E90 lsls r0, 24 @@ -3156,7 +3156,7 @@ _080CBE94: bx r0 .align 2, 0 _080CBF48: .4byte gTasks -_080CBF4C: .4byte gBattleAnimEnemyMonIndex +_080CBF4C: .4byte gBattleAnimBankTarget _080CBF50: .4byte gSpriteTemplate_83D6884 _080CBF54: .4byte gSprites _080CBF58: .4byte sub_80CBF5C @@ -3832,13 +3832,13 @@ sub_80CC474: @ 80CC474 ldrsh r0, [r0, r1] cmp r0, 0 bne _080CC490 - ldr r0, _080CC48C @ =gBattleAnimPlayerMonIndex + ldr r0, _080CC48C @ =gBattleAnimBankAttacker b _080CC492 .align 2, 0 _080CC488: .4byte gBattleAnimArgs -_080CC48C: .4byte gBattleAnimPlayerMonIndex +_080CC48C: .4byte gBattleAnimBankAttacker _080CC490: - ldr r0, _080CC4B0 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CC4B0 @ =gBattleAnimBankTarget _080CC492: ldrb r6, [r0] adds r0, r6, 0 @@ -3854,7 +3854,7 @@ _080CC492: ldr r0, _080CC4B8 @ =0x0000fff0 b _080CC4CC .align 2, 0 -_080CC4B0: .4byte gBattleAnimEnemyMonIndex +_080CC4B0: .4byte gBattleAnimBankTarget _080CC4B4: .4byte gBattleAnimArgs _080CC4B8: .4byte 0x0000fff0 _080CC4BC: @@ -3923,7 +3923,7 @@ _080CC518: strb r0, [r4, 0x5] b _080CC56C _080CC534: - ldr r0, _080CC578 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CC578 @ =gBattleAnimBankTarget ldrb r0, [r0] movs r1, 0x3 bl sub_8077ABC @@ -3933,7 +3933,7 @@ _080CC534: adds r0, r7 strh r0, [r4, 0x22] movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId _080CC54E: adds r0, r6, 0 bl sub_8079ED4 @@ -3956,7 +3956,7 @@ _080CC56C: pop {r0} bx r0 .align 2, 0 -_080CC578: .4byte gBattleAnimEnemyMonIndex +_080CC578: .4byte gBattleAnimBankTarget _080CC57C: .4byte sub_80CC580 thumb_func_end sub_80CC474 @@ -4149,12 +4149,12 @@ _080CC6E8: ldrsh r0, [r1, r3] cmp r0, 0 bne _080CC6F8 - ldr r4, _080CC6F4 @ =gBattleAnimPlayerMonIndex + ldr r4, _080CC6F4 @ =gBattleAnimBankAttacker b _080CC6FA .align 2, 0 -_080CC6F4: .4byte gBattleAnimPlayerMonIndex +_080CC6F4: .4byte gBattleAnimBankAttacker _080CC6F8: - ldr r4, _080CC734 @ =gBattleAnimEnemyMonIndex + ldr r4, _080CC734 @ =gBattleAnimBankTarget _080CC6FA: ldrb r0, [r4] movs r1, 0x2 @@ -4184,7 +4184,7 @@ _080CC6FA: strh r2, [r6, 0x3A] b _080CC74C .align 2, 0 -_080CC734: .4byte gBattleAnimEnemyMonIndex +_080CC734: .4byte gBattleAnimBankTarget _080CC738: .4byte gBattleAnimArgs _080CC73C: strh r5, [r6, 0x20] @@ -4317,7 +4317,7 @@ _080CC826: sub_80CC82C: @ 80CC82C push {r4,lr} adds r4, r0, 0 - ldr r0, _080CC84C @ =gBattleAnimPlayerMonIndex + ldr r0, _080CC84C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -4331,7 +4331,7 @@ sub_80CC82C: @ 80CC82C ldrh r0, [r2, 0x2] b _080CC860 .align 2, 0 -_080CC84C: .4byte gBattleAnimPlayerMonIndex +_080CC84C: .4byte gBattleAnimBankAttacker _080CC850: .4byte gBattleAnimArgs _080CC854: ldr r0, _080CC878 @ =gBattleAnimArgs @@ -4348,7 +4348,7 @@ _080CC860: str r0, [r4, 0x1C] ldr r1, _080CC880 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4} pop {r0} bx r0 @@ -4362,7 +4362,7 @@ _080CC880: .4byte move_anim_8072740 sub_80CC884: @ 80CC884 push {r4,r5,lr} adds r5, r0, 0 - ldr r0, _080CC8BC @ =gBattleAnimPlayerMonIndex + ldr r0, _080CC8BC @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -4387,7 +4387,7 @@ _080CC89E: pop {r0} bx r0 .align 2, 0 -_080CC8BC: .4byte gBattleAnimPlayerMonIndex +_080CC8BC: .4byte gBattleAnimBankAttacker _080CC8C0: .4byte sub_80CC810 _080CC8C4: .4byte gBattleAnimArgs thumb_func_end sub_80CC884 @@ -4418,7 +4418,7 @@ sub_80CC8C8: @ 80CC8C8 bl StartSpriteAffineAnim ldr r1, _080CC90C @ =move_anim_8074EE0 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080CC910 @ =sub_8078504 str r0, [r4, 0x1C] pop {r4} @@ -4434,7 +4434,7 @@ _080CC910: .4byte sub_8078504 sub_80CC914: @ 80CC914 push {r4,r5,lr} adds r5, r0, 0 - ldr r4, _080CC964 @ =gBattleAnimEnemyMonIndex + ldr r4, _080CC964 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -4470,7 +4470,7 @@ _080CC948: strh r0, [r5, 0x20] b _080CC984 .align 2, 0 -_080CC964: .4byte gBattleAnimEnemyMonIndex +_080CC964: .4byte gBattleAnimBankTarget _080CC968: .4byte sub_80CCB00 _080CC96C: .4byte gBattleAnimArgs _080CC970: @@ -4535,7 +4535,7 @@ sub_80CC9BC: @ 80CC9BC .align 2, 0 _080CC9D8: .4byte gBattleAnimArgs _080CC9DC: - ldr r5, _080CC9F8 @ =gBattleAnimEnemyMonIndex + ldr r5, _080CC9F8 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r4, 0x2 eors r0, r4 @@ -4548,9 +4548,9 @@ _080CC9DC: adds r0, r4, 0 b _080CCA68 .align 2, 0 -_080CC9F8: .4byte gBattleAnimEnemyMonIndex +_080CC9F8: .4byte gBattleAnimBankTarget _080CC9FC: - ldr r5, _080CCA54 @ =gBattleAnimEnemyMonIndex + ldr r5, _080CCA54 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0 bl sub_8077ABC @@ -4566,7 +4566,7 @@ _080CC9FC: mov r8, r2 mov r1, r8 eors r0, r1 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080CCA72 @@ -4590,9 +4590,9 @@ _080CC9FC: lsrs r4, r0, 1 b _080CCA72 .align 2, 0 -_080CCA54: .4byte gBattleAnimEnemyMonIndex +_080CCA54: .4byte gBattleAnimBankTarget _080CCA58: - ldr r4, _080CCAA4 @ =gBattleAnimEnemyMonIndex + ldr r4, _080CCAA4 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -4607,7 +4607,7 @@ _080CCA68: _080CCA72: strh r7, [r6, 0x20] strh r4, [r6, 0x22] - ldr r0, _080CCAA4 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CCAA4 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -4631,7 +4631,7 @@ _080CCA8A: strh r0, [r6, 0x20] b _080CCAC4 .align 2, 0 -_080CCAA4: .4byte gBattleAnimEnemyMonIndex +_080CCAA4: .4byte gBattleAnimBankTarget _080CCAA8: .4byte sub_80CCB00 _080CCAAC: .4byte gBattleAnimArgs _080CCAB0: @@ -4723,7 +4723,7 @@ _080CCB26: bne _080CCB5C ldr r1, _080CCB64 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 movs r0, 0x3 strh r0, [r4, 0x2E] ldr r0, _080CCB68 @ =sub_80782D8 @@ -4861,7 +4861,7 @@ sub_80CCC50: @ 80CCC50 ldr r4, _080CCC70 @ =gBattleAnimArgs ldrh r0, [r4, 0x4] strh r0, [r5, 0x2E] - ldr r0, _080CCC74 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CCC74 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -4873,7 +4873,7 @@ sub_80CCC50: @ 80CCC50 b _080CCC7E .align 2, 0 _080CCC70: .4byte gBattleAnimArgs -_080CCC74: .4byte gBattleAnimPlayerMonIndex +_080CCC74: .4byte gBattleAnimBankAttacker _080CCC78: ldrh r0, [r4] ldrh r1, [r5, 0x20] @@ -4977,7 +4977,7 @@ sub_80CCD24: @ 80CCD24 adds r0, 0x8 strh r0, [r1, 0x2] _080CCD3A: - ldr r6, _080CCD9C @ =gBattleAnimPlayerMonIndex + ldr r6, _080CCD9C @ =gBattleAnimBankAttacker ldrb r0, [r6] movs r1, 0 bl sub_8077EE4 @@ -5022,7 +5022,7 @@ _080CCD78: b _080CCDB8 .align 2, 0 _080CCD98: .4byte gBattleAnimArgs -_080CCD9C: .4byte gBattleAnimPlayerMonIndex +_080CCD9C: .4byte gBattleAnimBankAttacker _080CCDA0: ldrb r0, [r6] bl sub_8079ED4 @@ -5207,7 +5207,7 @@ _080CCF00: .4byte sub_807861C sub_80CCF04: @ 80CCF04 push {r4-r6,lr} adds r4, r0, 0 - ldr r6, _080CCF5C @ =gBattleAnimEnemyMonIndex + ldr r6, _080CCF5C @ =gBattleAnimBankTarget ldrb r0, [r6] movs r1, 0x2 bl sub_8077ABC @@ -5248,7 +5248,7 @@ sub_80CCF04: @ 80CCF04 pop {r0} bx r0 .align 2, 0 -_080CCF5C: .4byte gBattleAnimEnemyMonIndex +_080CCF5C: .4byte gBattleAnimBankTarget _080CCF60: .4byte 0x0000ffe8 _080CCF64: .4byte REG_BLDCNT _080CCF68: .4byte REG_BLDALPHA @@ -5531,7 +5531,7 @@ _080CD154: strh r0, [r4, 0x32] ldr r1, _080CD188 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080CD18C @ =sub_8078394 str r0, [r4, 0x1C] pop {r4,r5} @@ -5552,13 +5552,13 @@ sub_80CD190: @ 80CD190 ldrsh r0, [r0, r1] cmp r0, 0 bne _080CD1AC - ldr r0, _080CD1A8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CD1A8 @ =gBattleAnimBankAttacker b _080CD1AE .align 2, 0 _080CD1A4: .4byte gBattleAnimArgs -_080CD1A8: .4byte gBattleAnimPlayerMonIndex +_080CD1A8: .4byte gBattleAnimBankAttacker _080CD1AC: - ldr r0, _080CD1F0 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CD1F0 @ =gBattleAnimBankTarget _080CD1AE: ldrb r6, [r0] bl IsDoubleBattle @@ -5568,7 +5568,7 @@ _080CD1AE: movs r1, 0x2 adds r0, r6, 0 eors r0, r1 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080CD1F8 @@ -5590,7 +5590,7 @@ _080CD1AE: strh r0, [r5, 0x22] b _080CD248 .align 2, 0 -_080CD1F0: .4byte gBattleAnimEnemyMonIndex +_080CD1F0: .4byte gBattleAnimBankTarget _080CD1F4: .4byte gBattleAnimArgs _080CD1F8: ldr r4, _080CD218 @ =gBattleAnimArgs @@ -5640,7 +5640,7 @@ _080CD248: strh r0, [r5, 0x32] ldr r1, _080CD26C @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080CD270 @ =sub_8078394 str r0, [r5, 0x1C] pop {r4-r6} @@ -5657,7 +5657,7 @@ sub_80CD274: @ 80CD274 push {r4,lr} adds r4, r0, 0 bl sub_8078650 - ldr r0, _080CD2A0 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CD2A0 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -5674,7 +5674,7 @@ sub_80CD274: @ 80CD274 strh r0, [r4, 0x22] b _080CD2C2 .align 2, 0 -_080CD2A0: .4byte gBattleAnimPlayerMonIndex +_080CD2A0: .4byte gBattleAnimBankAttacker _080CD2A4: .4byte gBattleAnimArgs _080CD2A8: ldr r2, _080CD2CC @ =gBattleAnimArgs @@ -5749,7 +5749,7 @@ sub_80CD328: @ 80CD328 push {r4,lr} adds r4, r0, 0 bl sub_8078650 - ldr r0, _080CD358 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CD358 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -5768,7 +5768,7 @@ sub_80CD328: @ 80CD328 strh r0, [r4, 0x34] b _080CD37E .align 2, 0 -_080CD358: .4byte gBattleAnimPlayerMonIndex +_080CD358: .4byte gBattleAnimBankAttacker _080CD35C: .4byte gBattleAnimArgs _080CD360: ldr r2, _080CD388 @ =gBattleAnimArgs @@ -5850,7 +5850,7 @@ sub_80CD3E0: @ 80CD3E0 ldr r1, _080CD400 @ =sub_80782D8 str r1, [r0, 0x1C] ldr r1, _080CD404 @ =sub_80CD408 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r0} bx r0 .align 2, 0 @@ -5877,7 +5877,7 @@ _080CD41E: str r0, [r5, 0x1C] ldr r1, _080CD434 @ =sub_80CD408 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 b _080CD49E .align 2, 0 _080CD430: .4byte sub_80782D8 @@ -5917,7 +5917,7 @@ _080CD438: str r0, [r5, 0x1C] ldr r1, _080CD4B4 @ =sub_80CD4B8 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 movs r1, 0x80 lsls r1, 1 adds r0, r1, 0 @@ -5960,7 +5960,7 @@ sub_80CD4B8: @ 80CD4B8 str r0, [r2, 0x1C] ldr r1, _080CD4DC @ =sub_80CD4EC adds r0, r2, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 b _080CD4E4 .align 2, 0 _080CD4D8: .4byte sub_80782D8 @@ -5990,7 +5990,7 @@ sub_80CD4EC: @ 80CD4EC str r0, [r5, 0x1C] ldr r1, _080CD510 @ =sub_80CD5A8 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 b _080CD594 .align 2, 0 _080CD50C: .4byte sub_80782D8 @@ -6043,7 +6043,7 @@ _080CD54C: strh r1, [r5, 0x24] movs r0, 0x6 strh r0, [r5, 0x2E] - ldr r4, _080CD59C @ =gBattleAnimEnemyMonIndex + ldr r4, _080CD59C @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -6062,13 +6062,13 @@ _080CD54C: str r0, [r5, 0x1C] ldr r1, _080CD5A4 @ =sub_80CD654 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 _080CD594: pop {r4-r7} pop {r0} bx r0 .align 2, 0 -_080CD59C: .4byte gBattleAnimEnemyMonIndex +_080CD59C: .4byte gBattleAnimBankTarget _080CD5A0: .4byte sub_8078B34 _080CD5A4: .4byte sub_80CD654 thumb_func_end sub_80CD4EC @@ -6376,7 +6376,7 @@ sub_80CD7CC: @ 80CD7CC adds r4, r0, 0 movs r0, 0x6 strh r0, [r4, 0x2E] - ldr r5, _080CD80C @ =gBattleAnimPlayerMonIndex + ldr r5, _080CD80C @ =gBattleAnimBankAttacker ldrb r0, [r5] bl GetBankSide lsls r0, 24 @@ -6397,14 +6397,14 @@ _080CD7EA: strh r0, [r4, 0x34] ldr r1, _080CD814 @ =sub_80CD81C adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080CD818 @ =sub_8078458 str r0, [r4, 0x1C] pop {r4,r5} pop {r0} bx r0 .align 2, 0 -_080CD80C: .4byte gBattleAnimPlayerMonIndex +_080CD80C: .4byte gBattleAnimBankAttacker _080CD810: .4byte gObjectBankIDs _080CD814: .4byte sub_80CD81C _080CD818: .4byte sub_8078458 @@ -6419,7 +6419,7 @@ sub_80CD81C: @ 80CD81C cmp r6, 0 bne _080CD858 ldr r1, _080CD898 @ =gObjectBankIDs - ldr r4, _080CD89C @ =gBattleAnimPlayerMonIndex + ldr r4, _080CD89C @ =gBattleAnimBankAttacker ldrb r0, [r4] adds r0, r1 ldrb r0, [r0] @@ -6475,7 +6475,7 @@ _080CD892: bx r0 .align 2, 0 _080CD898: .4byte gObjectBankIDs -_080CD89C: .4byte gBattleAnimPlayerMonIndex +_080CD89C: .4byte gBattleAnimBankAttacker _080CD8A0: .4byte 0xfffffd00 _080CD8A4: .4byte sub_80CD9B8 thumb_func_end sub_80CD81C @@ -6486,7 +6486,7 @@ sub_80CD8A8: @ 80CD8A8 adds r4, r0, 0 movs r0, 0x4 strh r0, [r4, 0x2E] - ldr r5, _080CD8E8 @ =gBattleAnimPlayerMonIndex + ldr r5, _080CD8E8 @ =gBattleAnimBankAttacker ldrb r0, [r5] bl GetBankSide lsls r0, 24 @@ -6507,14 +6507,14 @@ _080CD8C6: strh r0, [r4, 0x34] ldr r1, _080CD8F0 @ =sub_80CD9B8 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080CD8F4 @ =sub_8078458 str r0, [r4, 0x1C] pop {r4,r5} pop {r0} bx r0 .align 2, 0 -_080CD8E8: .4byte gBattleAnimPlayerMonIndex +_080CD8E8: .4byte gBattleAnimBankAttacker _080CD8EC: .4byte gObjectBankIDs _080CD8F0: .4byte sub_80CD9B8 _080CD8F4: .4byte sub_8078458 @@ -6551,7 +6551,7 @@ sub_80CD91C: @ 80CD91C cmp r0, 0 bne _080CD96C ldr r1, _080CD958 @ =gObjectBankIDs - ldr r4, _080CD95C @ =gBattleAnimPlayerMonIndex + ldr r4, _080CD95C @ =gBattleAnimBankAttacker ldrb r0, [r4] adds r0, r1 ldrb r0, [r0] @@ -6574,7 +6574,7 @@ sub_80CD91C: @ 80CD91C b _080CD96A .align 2, 0 _080CD958: .4byte gObjectBankIDs -_080CD95C: .4byte gBattleAnimPlayerMonIndex +_080CD95C: .4byte gBattleAnimBankAttacker _080CD960: movs r0, 0x80 lsls r0, 3 @@ -6660,7 +6660,7 @@ _080CD9EA: _080CD9F0: strh r5, [r4, 0x30] ldr r1, _080CDA74 @ =gObjectBankIDs - ldr r2, _080CDA78 @ =gBattleAnimPlayerMonIndex + ldr r2, _080CDA78 @ =gBattleAnimBankAttacker ldrb r0, [r2] adds r0, r1 ldrb r0, [r0] @@ -6724,7 +6724,7 @@ _080CDA2E: b _080CDAC2 .align 2, 0 _080CDA74: .4byte gObjectBankIDs -_080CDA78: .4byte gBattleAnimPlayerMonIndex +_080CDA78: .4byte gBattleAnimBankAttacker _080CDA7C: .4byte 0xfffffe00 _080CDA80: ldrh r0, [r4, 0x36] @@ -6773,7 +6773,7 @@ sub_80CDAC8: @ 80CDAC8 lsls r0, 3 adds r5, r0, r1 ldr r1, _080CDB10 @ =gObjectBankIDs - ldr r2, _080CDB14 @ =gBattleAnimPlayerMonIndex + ldr r2, _080CDB14 @ =gBattleAnimBankAttacker ldrb r0, [r2] adds r0, r1 ldrb r0, [r0] @@ -6798,7 +6798,7 @@ sub_80CDAC8: @ 80CDAC8 .align 2, 0 _080CDB0C: .4byte gTasks _080CDB10: .4byte gObjectBankIDs -_080CDB14: .4byte gBattleAnimPlayerMonIndex +_080CDB14: .4byte gBattleAnimBankAttacker _080CDB18: .4byte gBattleAnimArgs _080CDB1C: strh r1, [r5, 0xC] @@ -7134,13 +7134,13 @@ sub_80CDD74: @ 80CDD74 ldrsh r0, [r6, r1] cmp r0, 0 bne _080CDD90 - ldr r4, _080CDD8C @ =gBattleAnimPlayerMonIndex + ldr r4, _080CDD8C @ =gBattleAnimBankAttacker b _080CDD92 .align 2, 0 _080CDD88: .4byte gBattleAnimArgs -_080CDD8C: .4byte gBattleAnimPlayerMonIndex +_080CDD8C: .4byte gBattleAnimBankAttacker _080CDD90: - ldr r4, _080CDDD0 @ =gBattleAnimEnemyMonIndex + ldr r4, _080CDDD0 @ =gBattleAnimBankTarget _080CDD92: ldrb r0, [r4] movs r1, 0x2 @@ -7163,14 +7163,14 @@ _080CDD92: strh r0, [r5, 0x30] ldr r1, _080CDDD4 @ =sub_80CDEC0 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080CDDD8 @ =sub_8078600 str r0, [r5, 0x1C] pop {r4-r6} pop {r0} bx r0 .align 2, 0 -_080CDDD0: .4byte gBattleAnimEnemyMonIndex +_080CDDD0: .4byte gBattleAnimBankTarget _080CDDD4: .4byte sub_80CDEC0 _080CDDD8: .4byte sub_8078600 thumb_func_end sub_80CDD74 @@ -7179,7 +7179,7 @@ _080CDDD8: .4byte sub_8078600 sub_80CDDDC: @ 80CDDDC push {r4,r5,lr} adds r4, r0, 0 - ldr r5, _080CDE14 @ =gBattleAnimEnemyMonIndex + ldr r5, _080CDE14 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -7196,14 +7196,14 @@ sub_80CDDDC: @ 80CDDDC strh r0, [r4, 0x22] ldr r1, _080CDE1C @ =sub_80CDE78 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080CDE20 @ =sub_8078600 str r0, [r4, 0x1C] pop {r4,r5} pop {r0} bx r0 .align 2, 0 -_080CDE14: .4byte gBattleAnimEnemyMonIndex +_080CDE14: .4byte gBattleAnimBankTarget _080CDE18: .4byte 0x0000ffd0 _080CDE1C: .4byte sub_80CDE78 _080CDE20: .4byte sub_8078600 @@ -7213,7 +7213,7 @@ _080CDE20: .4byte sub_8078600 sub_80CDE24: @ 80CDE24 push {r4-r6,lr} adds r4, r0, 0 - ldr r5, _080CDE68 @ =gBattleAnimEnemyMonIndex + ldr r5, _080CDE68 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -7243,7 +7243,7 @@ sub_80CDE24: @ 80CDE24 pop {r0} bx r0 .align 2, 0 -_080CDE68: .4byte gBattleAnimEnemyMonIndex +_080CDE68: .4byte gBattleAnimBankTarget _080CDE6C: .4byte gBattleAnimArgs _080CDE70: .4byte 0x0000ffd0 _080CDE74: .4byte sub_80CDEC0 @@ -7268,7 +7268,7 @@ sub_80CDE78: @ 80CDE78 strh r0, [r4, 0x32] ldr r1, _080CDEA8 @ =sub_80CDEB0 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080CDEAC @ =sub_8078364 str r0, [r4, 0x1C] _080CDEA2: @@ -7343,13 +7343,13 @@ sub_80CDF0C: @ 80CDF0C ldrsh r0, [r6, r1] cmp r0, 0 bne _080CDF28 - ldr r4, _080CDF24 @ =gBattleAnimPlayerMonIndex + ldr r4, _080CDF24 @ =gBattleAnimBankAttacker b _080CDF2A .align 2, 0 _080CDF20: .4byte gBattleAnimArgs -_080CDF24: .4byte gBattleAnimPlayerMonIndex +_080CDF24: .4byte gBattleAnimBankAttacker _080CDF28: - ldr r4, _080CDF64 @ =gBattleAnimEnemyMonIndex + ldr r4, _080CDF64 @ =gBattleAnimBankTarget _080CDF2A: ldrb r0, [r4] movs r1, 0 @@ -7378,7 +7378,7 @@ _080CDF2A: pop {r0} bx r0 .align 2, 0 -_080CDF64: .4byte gBattleAnimEnemyMonIndex +_080CDF64: .4byte gBattleAnimBankTarget _080CDF68: .4byte gBattleAnimArgs _080CDF6C: .4byte sub_80CDF70 thumb_func_end sub_80CDF0C @@ -7424,7 +7424,7 @@ _080CDFAC: sub_80CDFB0: @ 80CDFB0 push {r4-r6,lr} adds r4, r0, 0 - ldr r6, _080CDFF8 @ =gBattleAnimPlayerMonIndex + ldr r6, _080CDFF8 @ =gBattleAnimBankAttacker ldrb r0, [r6] movs r1, 0x2 bl sub_8077ABC @@ -7456,7 +7456,7 @@ sub_80CDFB0: @ 80CDFB0 pop {r0} bx r0 .align 2, 0 -_080CDFF8: .4byte gBattleAnimPlayerMonIndex +_080CDFF8: .4byte gBattleAnimBankAttacker _080CDFFC: .4byte sub_80CE000 thumb_func_end sub_80CDFB0 @@ -7551,7 +7551,7 @@ sub_80CE09C: @ 80CE09C ldrsh r0, [r6, r1] cmp r0, 0 bne _080CE0E6 - ldr r4, _080CE0FC @ =gBattleAnimPlayerMonIndex + ldr r4, _080CE0FC @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -7593,7 +7593,7 @@ _080CE0F6: pop {r0} bx r0 .align 2, 0 -_080CE0FC: .4byte gBattleAnimPlayerMonIndex +_080CE0FC: .4byte gBattleAnimBankAttacker _080CE100: .4byte gBattleAnimArgs _080CE104: .4byte 0x0000ffff thumb_func_end sub_80CE09C @@ -7708,7 +7708,7 @@ _080CE1C0: strb r0, [r2] movs r0, 0x1E strh r0, [r5, 0x2E] - ldr r4, _080CE204 @ =gBattleAnimPlayerMonIndex + ldr r4, _080CE204 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -7725,13 +7725,13 @@ _080CE1C0: str r0, [r5, 0x1C] ldr r1, _080CE20C @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 _080CE1FC: pop {r4,r5} pop {r0} bx r0 .align 2, 0 -_080CE204: .4byte gBattleAnimPlayerMonIndex +_080CE204: .4byte gBattleAnimBankAttacker _080CE208: .4byte sub_8078B34 _080CE20C: .4byte move_anim_8072740 thumb_func_end sub_80CE1AC @@ -7926,7 +7926,7 @@ _080CE366: sub_80CE36C: @ 80CE36C push {r4,lr} adds r4, r0, 0 - ldr r0, _080CE3A4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CE3A4 @ =gBattleAnimBankAttacker ldrb r0, [r0] movs r1, 0x2 bl sub_8077ABC @@ -7951,7 +7951,7 @@ sub_80CE36C: @ 80CE36C pop {r0} bx r0 .align 2, 0 -_080CE3A4: .4byte gBattleAnimPlayerMonIndex +_080CE3A4: .4byte gBattleAnimBankAttacker _080CE3A8: .4byte gBattleAnimArgs _080CE3AC: .4byte sub_80CE3B0 thumb_func_end sub_80CE36C @@ -8339,7 +8339,7 @@ _080CE68E: strh r0, [r5, 0x2E] ldrh r0, [r6, 0x4] strh r0, [r5, 0x30] - ldr r4, _080CE6F8 @ =gBattleAnimEnemyMonIndex + ldr r4, _080CE6F8 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -8384,10 +8384,10 @@ _080CE68E: b _080CE726 .align 2, 0 _080CE6F4: .4byte gBattleAnimArgs -_080CE6F8: .4byte gBattleAnimEnemyMonIndex +_080CE6F8: .4byte gBattleAnimBankTarget _080CE6FC: .4byte 0xffffec00 _080CE700: - ldr r0, _080CE740 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CE740 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -8417,7 +8417,7 @@ _080CE726: strh r0, [r5, 0x38] b _080CE784 .align 2, 0 -_080CE740: .4byte gBattleAnimPlayerMonIndex +_080CE740: .4byte gBattleAnimBankAttacker _080CE744: .4byte 0xfffff600 _080CE748: ldrh r0, [r5, 0x20] @@ -8515,7 +8515,7 @@ sub_80CE7E0: @ 80CE7E0 ldr r1, _080CE870 @ =gTasks adds r6, r0, r1 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r6, 0x8] @@ -8615,7 +8615,7 @@ _080CE8B4: _080CE8C6: ldr r0, _080CE8E8 @ =sub_80CE910 str r0, [r6] - ldr r0, _080CE8EC @ =gBattleAnimPlayerMonIndex + ldr r0, _080CE8EC @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -8630,7 +8630,7 @@ _080CE8C6: .align 2, 0 _080CE8E4: .4byte sub_80CE974 _080CE8E8: .4byte sub_80CE910 -_080CE8EC: .4byte gBattleAnimPlayerMonIndex +_080CE8EC: .4byte gBattleAnimBankAttacker _080CE8F0: .4byte 0x0000fdff _080CE8F4: movs r2, 0x80 @@ -8664,7 +8664,7 @@ sub_80CE910: @ 80CE910 ldrsh r0, [r0, r1] cmp r0, 0 bne _080CE968 - ldr r0, _080CE948 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CE948 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -8679,7 +8679,7 @@ sub_80CE910: @ 80CE910 b _080CE956 .align 2, 0 _080CE944: .4byte gTasks -_080CE948: .4byte gBattleAnimPlayerMonIndex +_080CE948: .4byte gBattleAnimBankAttacker _080CE94C: movs r0, 0x80 lsls r0, 19 @@ -8782,7 +8782,7 @@ sub_80CEA04: @ 80CEA04 push {r4,lr} adds r4, r0, 0 ldr r1, _080CEA18 @ =move_anim_8072740 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080CEA1C @ =sub_8078600 str r0, [r4, 0x1C] pop {r4} @@ -8964,7 +8964,7 @@ _080CEB48: _080CEB64: .4byte gBattleAnimArgs _080CEB68: .4byte gUnknown_083D712C _080CEB6C: - ldr r4, _080CEBBC @ =gBattleAnimEnemyMonIndex + ldr r4, _080CEBBC @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -9002,7 +9002,7 @@ _080CEB86: pop {r0} bx r0 .align 2, 0 -_080CEBBC: .4byte gBattleAnimEnemyMonIndex +_080CEBBC: .4byte gBattleAnimBankTarget _080CEBC0: .4byte sub_80CEC1C thumb_func_end sub_80CEB0C @@ -9165,7 +9165,7 @@ _080CECE4: .4byte gUnknown_083D712C sub_80CECE8: @ 80CECE8 push {r4-r7,lr} adds r6, r0, 0 - ldr r7, _080CED6C @ =gBattleAnimPlayerMonIndex + ldr r7, _080CED6C @ =gBattleAnimBankAttacker ldrb r0, [r7] bl GetBankSide lsls r0, 24 @@ -9225,7 +9225,7 @@ _080CED06: pop {r0} bx r0 .align 2, 0 -_080CED6C: .4byte gBattleAnimPlayerMonIndex +_080CED6C: .4byte gBattleAnimBankAttacker _080CED70: .4byte gBattleAnimArgs _080CED74: .4byte sub_80CED78 thumb_func_end sub_80CECE8 @@ -9316,7 +9316,7 @@ _080CEE10: .4byte gBattleAnimArgs _080CEE14: ldr r6, _080CEE50 @ =0x0000fff0 _080CEE16: - ldr r4, _080CEE54 @ =gBattleAnimPlayerMonIndex + ldr r4, _080CEE54 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -9337,13 +9337,13 @@ _080CEE16: str r0, [r5, 0x1C] ldr r1, _080CEE5C @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4-r6} pop {r0} bx r0 .align 2, 0 _080CEE50: .4byte 0x0000fff0 -_080CEE54: .4byte gBattleAnimPlayerMonIndex +_080CEE54: .4byte gBattleAnimBankAttacker _080CEE58: .4byte sub_80782D8 _080CEE5C: .4byte move_anim_8072740 thumb_func_end sub_80CEDF0 @@ -9519,13 +9519,13 @@ sub_80CEF9C: @ 80CEF9C ldrsh r0, [r0, r1] cmp r0, 0 bne _080CEFB8 - ldr r0, _080CEFB4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CEFB4 @ =gBattleAnimBankAttacker b _080CEFBA .align 2, 0 _080CEFB0: .4byte gBattleAnimArgs -_080CEFB4: .4byte gBattleAnimPlayerMonIndex +_080CEFB4: .4byte gBattleAnimBankAttacker _080CEFB8: - ldr r0, _080CEFF8 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CEFF8 @ =gBattleAnimBankTarget _080CEFBA: ldrb r4, [r0] adds r0, r4, 0 @@ -9547,14 +9547,14 @@ _080CEFBA: bl StartSpriteAnim ldr r1, _080CF000 @ =sub_80CF008 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080CF004 @ =sub_8078600 str r0, [r5, 0x1C] pop {r4,r5} pop {r0} bx r0 .align 2, 0 -_080CEFF8: .4byte gBattleAnimEnemyMonIndex +_080CEFF8: .4byte gBattleAnimBankTarget _080CEFFC: .4byte gBattleAnimArgs _080CF000: .4byte sub_80CF008 _080CF004: .4byte sub_8078600 @@ -9572,7 +9572,7 @@ sub_80CF008: @ 80CF008 bne _080CF030 ldr r1, _080CF038 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldrh r1, [r4, 0x30] lsls r1, 24 lsrs r1, 24 @@ -9598,13 +9598,13 @@ sub_80CF040: @ 80CF040 ldrsh r0, [r0, r1] cmp r0, 0 bne _080CF05C - ldr r0, _080CF058 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CF058 @ =gBattleAnimBankAttacker b _080CF05E .align 2, 0 _080CF054: .4byte gBattleAnimArgs -_080CF058: .4byte gBattleAnimPlayerMonIndex +_080CF058: .4byte gBattleAnimBankAttacker _080CF05C: - ldr r0, _080CF07C @ =gBattleAnimEnemyMonIndex + ldr r0, _080CF07C @ =gBattleAnimBankTarget _080CF05E: ldrb r0, [r0] adds r1, r4, 0 @@ -9613,14 +9613,14 @@ _080CF05E: strh r0, [r4, 0x2E] ldr r1, _080CF080 @ =sub_80CF088 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080CF084 @ =sub_80785E4 str r0, [r4, 0x1C] pop {r4} pop {r0} bx r0 .align 2, 0 -_080CF07C: .4byte gBattleAnimEnemyMonIndex +_080CF07C: .4byte gBattleAnimBankTarget _080CF080: .4byte sub_80CF088 _080CF084: .4byte sub_80785E4 thumb_func_end sub_80CF040 @@ -9641,7 +9641,7 @@ sub_80CF088: @ 80CF088 bl StartSpriteAffineAnim ldr r1, _080CF0B4 @ =move_anim_8074EE0 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080CF0B8 @ =sub_80785E4 str r0, [r4, 0x1C] _080CF0AE: @@ -9662,13 +9662,13 @@ sub_80CF0BC: @ 80CF0BC ldrsh r0, [r0, r1] cmp r0, 0 bne _080CF0D8 - ldr r0, _080CF0D4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CF0D4 @ =gBattleAnimBankAttacker b _080CF0DA .align 2, 0 _080CF0D0: .4byte gBattleAnimArgs -_080CF0D4: .4byte gBattleAnimPlayerMonIndex +_080CF0D4: .4byte gBattleAnimBankAttacker _080CF0D8: - ldr r0, _080CF12C @ =gBattleAnimEnemyMonIndex + ldr r0, _080CF12C @ =gBattleAnimBankTarget _080CF0DA: ldrb r5, [r0] adds r0, r5, 0 @@ -9702,14 +9702,14 @@ _080CF102: strh r6, [r4, 0x36] ldr r1, _080CF130 @ =sub_80CF138 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080CF134 @ =sub_80785E4 str r0, [r4, 0x1C] pop {r4-r6} pop {r0} bx r0 .align 2, 0 -_080CF12C: .4byte gBattleAnimEnemyMonIndex +_080CF12C: .4byte gBattleAnimBankTarget _080CF130: .4byte sub_80CF138 _080CF134: .4byte sub_80785E4 thumb_func_end sub_80CF0BC @@ -9808,13 +9808,13 @@ sub_80CF1C8: @ 80CF1C8 ldrsh r0, [r0, r1] cmp r0, 0 bne _080CF1E4 - ldr r0, _080CF1E0 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CF1E0 @ =gBattleAnimBankAttacker b _080CF1E6 .align 2, 0 _080CF1DC: .4byte gBattleAnimArgs -_080CF1E0: .4byte gBattleAnimPlayerMonIndex +_080CF1E0: .4byte gBattleAnimBankAttacker _080CF1E4: - ldr r0, _080CF208 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CF208 @ =gBattleAnimBankTarget _080CF1E6: ldrb r4, [r0] adds r0, r4, 0 @@ -9831,7 +9831,7 @@ _080CF1E6: movs r0, 0x2 b _080CF216 .align 2, 0 -_080CF208: .4byte gBattleAnimEnemyMonIndex +_080CF208: .4byte gBattleAnimBankTarget _080CF20C: adds r0, r5, 0 movs r1, 0x1 @@ -9868,7 +9868,7 @@ sub_80CF228: @ 80CF228 bl StartSpriteAnim ldr r1, _080CF25C @ =sub_80CF264 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080CF260 @ =sub_8078600 str r0, [r4, 0x1C] _080CF256: @@ -9922,7 +9922,7 @@ sub_80CF280: @ 80CF280 strh r0, [r4, 0x36] ldr r1, _080CF2C8 @ =move_anim_8074EE0 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r1, _080CF2CC @ =sub_8078278 str r1, [r4, 0x1C] adds r0, r4, 0 @@ -9945,13 +9945,13 @@ sub_80CF2D0: @ 80CF2D0 ldrsh r0, [r0, r1] cmp r0, 0 bne _080CF2EC - ldr r0, _080CF2E8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CF2E8 @ =gBattleAnimBankAttacker b _080CF2EE .align 2, 0 _080CF2E4: .4byte gBattleAnimArgs -_080CF2E8: .4byte gBattleAnimPlayerMonIndex +_080CF2E8: .4byte gBattleAnimBankAttacker _080CF2EC: - ldr r0, _080CF308 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CF308 @ =gBattleAnimBankTarget _080CF2EE: ldrb r0, [r0] adds r1, r4, 0 @@ -9965,7 +9965,7 @@ _080CF2EE: pop {r0} bx r0 .align 2, 0 -_080CF308: .4byte gBattleAnimEnemyMonIndex +_080CF308: .4byte gBattleAnimBankTarget _080CF30C: .4byte sub_80CF310 thumb_func_end sub_80CF2D0 @@ -10075,7 +10075,7 @@ _080CF3C0: .4byte gSprites sub_80CF3C4: @ 80CF3C4 push {r4-r6,lr} adds r5, r0, 0 - ldr r4, _080CF40C @ =gBattleAnimPlayerMonIndex + ldr r4, _080CF40C @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -10089,7 +10089,7 @@ sub_80CF3C4: @ 80CF3C4 lsrs r0, 24 strh r0, [r5, 0x22] ldr r1, _080CF410 @ =gObjectBankIDs - ldr r0, _080CF414 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CF414 @ =gBattleAnimBankTarget ldrb r0, [r0] adds r0, r1 ldrb r6, [r0] @@ -10106,9 +10106,9 @@ sub_80CF3C4: @ 80CF3C4 adds r1, r0, 0 b _080CF426 .align 2, 0 -_080CF40C: .4byte gBattleAnimPlayerMonIndex +_080CF40C: .4byte gBattleAnimBankAttacker _080CF410: .4byte gObjectBankIDs -_080CF414: .4byte gBattleAnimEnemyMonIndex +_080CF414: .4byte gBattleAnimBankTarget _080CF418: .4byte gBattleAnimArgs _080CF41C: ldr r1, _080CF450 @ =gBattleAnimArgs @@ -10159,7 +10159,7 @@ sub_80CF458: @ 80CF458 str r0, [r4, 0x1C] ldr r1, _080CF48C @ =sub_80CF490 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4} pop {r0} bx r0 @@ -10182,7 +10182,7 @@ sub_80CF490: @ 80CF490 ldr r1, _080CF4B0 @ =sub_8078B34 str r1, [r0, 0x1C] ldr r1, _080CF4B4 @ =sub_80CF4B8 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r0} bx r0 .align 2, 0 @@ -10217,7 +10217,7 @@ sub_80CF4D8: @ 80CF4D8 lsls r4, 24 lsrs r4, 24 ldr r1, _080CF504 @ =gObjectBankIDs - ldr r0, _080CF508 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CF508 @ =gBattleAnimBankAttacker ldrb r0, [r0] adds r0, r1 ldrb r0, [r0] @@ -10235,7 +10235,7 @@ sub_80CF4D8: @ 80CF4D8 bx r0 .align 2, 0 _080CF504: .4byte gObjectBankIDs -_080CF508: .4byte gBattleAnimPlayerMonIndex +_080CF508: .4byte gBattleAnimBankAttacker _080CF50C: .4byte gTasks _080CF510: .4byte sub_80CF514 thumb_func_end sub_80CF4D8 @@ -10246,7 +10246,7 @@ sub_80CF514: @ 80CF514 lsls r0, 24 lsrs r5, r0, 24 ldr r1, _080CF544 @ =gObjectBankIDs - ldr r0, _080CF548 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CF548 @ =gBattleAnimBankAttacker ldrb r0, [r0] adds r1, r0, r1 ldrb r4, [r1] @@ -10267,7 +10267,7 @@ sub_80CF514: @ 80CF514 b _080CF55E .align 2, 0 _080CF544: .4byte gObjectBankIDs -_080CF548: .4byte gBattleAnimPlayerMonIndex +_080CF548: .4byte gBattleAnimBankAttacker _080CF54C: .4byte gTasks _080CF550: ldr r2, _080CF590 @ =gTasks @@ -10382,7 +10382,7 @@ sub_80CF610: @ 80CF610 ldrh r1, [r4, 0x22] adds r0, r1 strh r0, [r4, 0x22] - ldr r0, _080CF65C @ =gBattleAnimPlayerMonIndex + ldr r0, _080CF65C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -10404,7 +10404,7 @@ sub_80CF610: @ 80CF610 b _080CF674 .align 2, 0 _080CF658: .4byte gBattleAnimArgs -_080CF65C: .4byte gBattleAnimPlayerMonIndex +_080CF65C: .4byte gBattleAnimBankAttacker _080CF660: movs r1, 0x4 ldrsh r0, [r5, r1] @@ -10421,7 +10421,7 @@ _080CF674: str r0, [r4, 0x1C] ldr r1, _080CF68C @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 @@ -10440,7 +10440,7 @@ sub_80CF690: @ 80CF690 str r0, [r4, 0x1C] ldr r1, _080CF6B0 @ =sub_80CF6B4 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4} pop {r0} bx r0 @@ -10462,7 +10462,7 @@ sub_80CF6B4: @ 80CF6B4 ldr r1, _080CF6D4 @ =sub_8078B34 str r1, [r0, 0x1C] ldr r1, _080CF6D8 @ =move_anim_8072740 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r0} bx r0 .align 2, 0 @@ -10489,7 +10489,7 @@ sub_80CF6DC: @ 80CF6DC .align 2, 0 _080CF6FC: .4byte gBattleAnimArgs _080CF700: - ldr r0, _080CF7C8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CF7C8 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -10509,7 +10509,7 @@ _080CF722: adds r0, r5, 0 movs r1, 0x1 bl sub_80787B0 - ldr r4, _080CF7D0 @ =gBattleAnimEnemyMonIndex + ldr r4, _080CF7D0 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -10575,7 +10575,7 @@ _080CF794: str r0, [r5, 0x1C] ldr r1, _080CF7DC @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 add sp, 0x4 pop {r3} mov r8, r3 @@ -10583,9 +10583,9 @@ _080CF794: pop {r0} bx r0 .align 2, 0 -_080CF7C8: .4byte gBattleAnimPlayerMonIndex +_080CF7C8: .4byte gBattleAnimBankAttacker _080CF7CC: .4byte gBattleAnimArgs -_080CF7D0: .4byte gBattleAnimEnemyMonIndex +_080CF7D0: .4byte gBattleAnimBankTarget _080CF7D4: .4byte 0xffffa000 _080CF7D8: .4byte sub_8078B34 _080CF7DC: .4byte move_anim_8072740 @@ -11068,7 +11068,7 @@ _080CFB68: b _080CFBCA _080CFB70: ldr r1, _080CFBB4 @ =gBanksBySide - ldr r0, _080CFBB8 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CFBB8 @ =gBattleAnimBankTarget ldrb r0, [r0] adds r0, r1 ldrb r1, [r0] @@ -11102,7 +11102,7 @@ _080CFB70: b _080CFBC8 .align 2, 0 _080CFBB4: .4byte gBanksBySide -_080CFBB8: .4byte gBattleAnimEnemyMonIndex +_080CFBB8: .4byte gBattleAnimBankTarget _080CFBBC: .4byte gTasks _080CFBC0: .4byte gBattleAnimArgs _080CFBC4: @@ -11111,7 +11111,7 @@ _080CFBC4: _080CFBC8: strh r0, [r2, 0x4] _080CFBCA: - ldr r5, _080CFC24 @ =gBattleAnimPlayerMonIndex + ldr r5, _080CFC24 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0 bl sub_8077ABC @@ -11137,11 +11137,11 @@ _080CFBCA: ands r0, r1 cmp r0, 0 beq _080CFC34 - ldr r4, _080CFC30 @ =gBattleAnimEnemyMonIndex + ldr r4, _080CFC30 @ =gBattleAnimBankTarget ldrb r1, [r4] movs r0, 0x2 eors r0, r1 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080CFC34 @@ -11152,13 +11152,13 @@ _080CFBCA: bl sub_807A3FC b _080CFC56 .align 2, 0 -_080CFC24: .4byte gBattleAnimPlayerMonIndex +_080CFC24: .4byte gBattleAnimBankAttacker _080CFC28: .4byte gTasks _080CFC2C: .4byte gBattleTypeFlags -_080CFC30: .4byte gBattleAnimEnemyMonIndex +_080CFC30: .4byte gBattleAnimBankTarget _080CFC34: mov r5, sp - ldr r4, _080CFC90 @ =gBattleAnimEnemyMonIndex + ldr r4, _080CFC90 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -11203,7 +11203,7 @@ _080CFC56: subs r0, r2, r1 b _080CFC9E .align 2, 0 -_080CFC90: .4byte gBattleAnimEnemyMonIndex +_080CFC90: .4byte gBattleAnimBankTarget _080CFC94: .4byte gTasks _080CFC98: .4byte gBattleAnimArgs _080CFC9C: @@ -11301,7 +11301,7 @@ _080CFD3C: asrs r0, 16 cmp r0, 0x3F ble _080CFDB4 - ldr r0, _080CFD84 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CFD84 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079E90 lsls r0, 24 @@ -11315,14 +11315,14 @@ _080CFD3C: .align 2, 0 _080CFD7C: .4byte gTasks _080CFD80: .4byte gBattleAnimArgs -_080CFD84: .4byte gBattleAnimEnemyMonIndex +_080CFD84: .4byte gBattleAnimBankTarget _080CFD88: .4byte 0x0000ffc0 _080CFD8C: lsls r0, r1, 16 asrs r0, 16 cmp r0, 0x3F ble _080CFDB4 - ldr r0, _080CFDAC @ =gBattleAnimEnemyMonIndex + ldr r0, _080CFDAC @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079E90 lsls r0, 24 @@ -11334,10 +11334,10 @@ _080CFD8C: adds r0, r1 b _080CFDC4 .align 2, 0 -_080CFDAC: .4byte gBattleAnimEnemyMonIndex +_080CFDAC: .4byte gBattleAnimBankTarget _080CFDB0: .4byte 0x0000ffc0 _080CFDB4: - ldr r0, _080CFDF0 @ =gBattleAnimEnemyMonIndex + ldr r0, _080CFDF0 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079E90 lsls r0, 24 @@ -11369,7 +11369,7 @@ _080CFDDC: pop {r0} bx r0 .align 2, 0 -_080CFDF0: .4byte gBattleAnimEnemyMonIndex +_080CFDF0: .4byte gBattleAnimBankTarget _080CFDF4: .4byte gTasks _080CFDF8: .4byte sub_80CFA20 thumb_func_end sub_80CFB04 @@ -11466,7 +11466,7 @@ sub_80CFE9C: @ 80CFE9C adds r5, r0, 0 movs r1, 0x1 bl sub_80787B0 - ldr r4, _080CFF3C @ =gBattleAnimEnemyMonIndex + ldr r4, _080CFF3C @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -11482,7 +11482,7 @@ sub_80CFE9C: @ 80CFE9C adds r0, r1 lsls r0, 16 lsrs r7, r0, 16 - ldr r0, _080CFF44 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CFF44 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -11530,15 +11530,15 @@ _080CFEE0: str r0, [r5, 0x1C] ldr r1, _080CFF4C @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 add sp, 0x4 pop {r4-r7} pop {r0} bx r0 .align 2, 0 -_080CFF3C: .4byte gBattleAnimEnemyMonIndex +_080CFF3C: .4byte gBattleAnimBankTarget _080CFF40: .4byte gBattleAnimArgs -_080CFF44: .4byte gBattleAnimPlayerMonIndex +_080CFF44: .4byte gBattleAnimBankAttacker _080CFF48: .4byte sub_8078C00 _080CFF4C: .4byte move_anim_8072740 thumb_func_end sub_80CFE9C @@ -11568,7 +11568,7 @@ sub_80CFF68: @ 80CFF68 lsls r0, 16 asrs r0, 24 strh r0, [r4, 0x24] - ldr r0, _080CFFD4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080CFFD4 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -11613,7 +11613,7 @@ _080CFFCC: pop {r0} bx r0 .align 2, 0 -_080CFFD4: .4byte gBattleAnimPlayerMonIndex +_080CFFD4: .4byte gBattleAnimBankAttacker thumb_func_end sub_80CFF68 thumb_func_start sub_80CFFD8 @@ -11624,7 +11624,7 @@ sub_80CFFD8: @ 80CFFD8 bl sub_80787B0 movs r0, 0x14 strh r0, [r4, 0x2E] - ldr r5, _080D0024 @ =gBattleAnimEnemyMonIndex + ldr r5, _080D0024 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -11647,12 +11647,12 @@ sub_80CFFD8: @ 80CFFD8 strb r0, [r2] ldr r1, _080D002C @ =sub_80D0030 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 .align 2, 0 -_080D0024: .4byte gBattleAnimEnemyMonIndex +_080D0024: .4byte gBattleAnimBankTarget _080D0028: .4byte sub_8078B34 _080D002C: .4byte sub_80D0030 thumb_func_end sub_80CFFD8 @@ -11781,7 +11781,7 @@ sub_80D0118: @ 80D0118 adds r4, r0, 0 movs r1, 0 bl sub_80787B0 - ldr r0, _080D0168 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D0168 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -11806,7 +11806,7 @@ _080D0136: str r0, [r4, 0x1C] ldr r1, _080D0174 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r1, [r4, 0x1C] adds r0, r4, 0 bl _call_via_r1 @@ -11814,7 +11814,7 @@ _080D0136: pop {r0} bx r0 .align 2, 0 -_080D0168: .4byte gBattleAnimPlayerMonIndex +_080D0168: .4byte gBattleAnimBankAttacker _080D016C: .4byte gBattleAnimArgs _080D0170: .4byte sub_8078114 _080D0174: .4byte move_anim_8072740 @@ -11856,7 +11856,7 @@ _080D01A4: strh r0, [r5, 0x22] movs r0, 0x6 strh r0, [r5, 0x2E] - ldr r4, _080D0200 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D0200 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -11875,7 +11875,7 @@ _080D01A4: str r0, [r5, 0x1C] ldr r1, _080D0208 @ =sub_80D020C adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r3} mov r8, r3 pop {r4-r7} @@ -11885,7 +11885,7 @@ _080D01A4: _080D01F4: .4byte 0x0000ffe0 _080D01F8: .4byte 0x0000fff0 _080D01FC: .4byte gBattleAnimArgs -_080D0200: .4byte gBattleAnimEnemyMonIndex +_080D0200: .4byte gBattleAnimBankTarget _080D0204: .4byte sub_8078B34 _080D0208: .4byte sub_80D020C thumb_func_end sub_80D0178 @@ -11949,7 +11949,7 @@ _080D025C: movs r0, 0x6 strh r0, [r5, 0x2E] strh r1, [r5, 0x30] - ldr r4, _080D02C8 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D02C8 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -11984,7 +11984,7 @@ _080D025C: _080D02BC: .4byte 0x0000ffe0 _080D02C0: .4byte 0x0000fff0 _080D02C4: .4byte gBattleAnimArgs -_080D02C8: .4byte gBattleAnimEnemyMonIndex +_080D02C8: .4byte gBattleAnimBankTarget _080D02CC: .4byte sub_80D02D0 thumb_func_end sub_80D0228 @@ -12125,7 +12125,7 @@ sub_80D03C4: @ 80D03C4 lsls r5, 24 lsrs r5, 24 movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 @@ -12185,7 +12185,7 @@ sub_80D0428: @ 80D0428 cmp r1, r0 bne _080D0478 movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 @@ -12223,7 +12223,7 @@ sub_80D0488: @ 80D0488 ldr r0, _080D04D4 @ =gTasks adds r4, r0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 movs r5, 0 @@ -12238,7 +12238,7 @@ sub_80D0488: @ 80D0488 strh r0, [r4, 0x10] strh r5, [r4, 0x12] strh r5, [r4, 0x14] - ldr r0, _080D04D8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D04D8 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl sub_8079E90 lsls r0, 24 @@ -12251,7 +12251,7 @@ sub_80D0488: @ 80D0488 bx r0 .align 2, 0 _080D04D4: .4byte gTasks -_080D04D8: .4byte gBattleAnimPlayerMonIndex +_080D04D8: .4byte gBattleAnimBankAttacker _080D04DC: .4byte sub_80D04E0 thumb_func_end sub_80D0488 @@ -12593,7 +12593,7 @@ _080D0770: .4byte gTasks _080D0774: .4byte gBattleAnimArgs _080D0778: ldrb r0, [r5] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -12775,7 +12775,7 @@ sub_80D08C8: @ 80D08C8 ldr r0, _080D08F8 @ =gTasks adds r4, r0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -12821,7 +12821,7 @@ _080D092C: .4byte gTasks sub_80D0930: @ 80D0930 push {r4,r5,lr} adds r4, r0, 0 - ldr r5, _080D0960 @ =gBattleAnimPlayerMonIndex + ldr r5, _080D0960 @ =gBattleAnimBankAttacker ldrb r0, [r5] bl GetBankSide lsls r0, 24 @@ -12840,7 +12840,7 @@ sub_80D0930: @ 80D0930 movs r0, 0x40 b _080D097E .align 2, 0 -_080D0960: .4byte gBattleAnimPlayerMonIndex +_080D0960: .4byte gBattleAnimBankAttacker _080D0964: adds r0, r4, 0 movs r1, 0x1 @@ -12855,7 +12855,7 @@ _080D0964: ldr r0, _080D09B0 @ =0x0000ffc0 _080D097E: strh r0, [r4, 0x30] - ldr r0, _080D09B4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D09B4 @ =gBattleAnimBankAttacker ldrb r0, [r0] movs r1, 0x3 bl sub_8077ABC @@ -12870,7 +12870,7 @@ _080D097E: strh r1, [r4, 0x36] ldr r1, _080D09B8 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080D09BC @ =sub_8078394 str r0, [r4, 0x1C] pop {r4,r5} @@ -12878,7 +12878,7 @@ _080D097E: bx r0 .align 2, 0 _080D09B0: .4byte 0x0000ffc0 -_080D09B4: .4byte gBattleAnimPlayerMonIndex +_080D09B4: .4byte gBattleAnimBankAttacker _080D09B8: .4byte move_anim_8072740 _080D09BC: .4byte sub_8078394 thumb_func_end sub_80D0930 @@ -12892,13 +12892,13 @@ sub_80D09C0: @ 80D09C0 ldrsh r0, [r0, r1] cmp r0, 0 bne _080D09DC - ldr r0, _080D09D8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D09D8 @ =gBattleAnimBankAttacker b _080D09DE .align 2, 0 _080D09D4: .4byte gBattleAnimArgs -_080D09D8: .4byte gBattleAnimPlayerMonIndex +_080D09D8: .4byte gBattleAnimBankAttacker _080D09DC: - ldr r0, _080D0A3C @ =gBattleAnimEnemyMonIndex + ldr r0, _080D0A3C @ =gBattleAnimBankTarget _080D09DE: ldrb r5, [r0] adds r0, r5, 0 @@ -12939,14 +12939,14 @@ _080D09F8: _080D0A2A: ldr r1, _080D0A44 @ =move_anim_8074EE0 adds r0, r6, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080D0A48 @ =sub_80785E4 str r0, [r6, 0x1C] pop {r4-r6} pop {r0} bx r0 .align 2, 0 -_080D0A3C: .4byte gBattleAnimEnemyMonIndex +_080D0A3C: .4byte gBattleAnimBankTarget _080D0A40: .4byte gBattleAnimArgs _080D0A44: .4byte move_anim_8074EE0 _080D0A48: .4byte sub_80785E4 @@ -12963,7 +12963,7 @@ sub_80D0A4C: @ 80D0A4C ldr r0, _080D0A80 @ =gTasks adds r4, r0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -13019,7 +13019,7 @@ sub_80D0AB8: @ 80D0AB8 ldr r0, _080D0B2C @ =gTasks adds r4, r1, r0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 movs r2, 0 @@ -13050,7 +13050,7 @@ sub_80D0AB8: @ 80D0AB8 strh r2, [r4, 0x18] movs r0, 0x2 strh r0, [r4, 0x1A] - ldr r0, _080D0B34 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D0B34 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -13070,7 +13070,7 @@ _080D0B22: .align 2, 0 _080D0B2C: .4byte gTasks _080D0B30: .4byte gSprites -_080D0B34: .4byte gBattleAnimPlayerMonIndex +_080D0B34: .4byte gBattleAnimBankAttacker _080D0B38: .4byte sub_80D0B3C thumb_func_end sub_80D0AB8 @@ -13260,7 +13260,7 @@ sub_80D0C88: @ 80D0C88 lsls r1, 3 ldr r0, _080D0CD8 @ =gTasks adds r5, r1, r0 - ldr r4, _080D0CDC @ =gBattleAnimEnemyMonIndex + ldr r4, _080D0CDC @ =gBattleAnimBankTarget ldrb r0, [r4] bl sub_8077FC0 lsls r0, 24 @@ -13290,7 +13290,7 @@ sub_80D0C88: @ 80D0C88 b _080D0CF0 .align 2, 0 _080D0CD8: .4byte gTasks -_080D0CDC: .4byte gBattleAnimEnemyMonIndex +_080D0CDC: .4byte gBattleAnimBankTarget _080D0CE0: .4byte gUnknown_030042C0 _080D0CE4: .4byte REG_BG1HOFS _080D0CE8: @@ -13472,7 +13472,7 @@ _080D0E2C: .4byte gUnknown_03004DC0 sub_80D0E30: @ 80D0E30 push {r4-r6,lr} adds r4, r0, 0 - ldr r6, _080D0E84 @ =gBattleAnimEnemyMonIndex + ldr r6, _080D0E84 @ =gBattleAnimBankTarget ldrb r0, [r6] movs r1, 0 bl sub_8077ABC @@ -13509,7 +13509,7 @@ sub_80D0E30: @ 80D0E30 pop {r0} bx r0 .align 2, 0 -_080D0E84: .4byte gBattleAnimEnemyMonIndex +_080D0E84: .4byte gBattleAnimBankTarget _080D0E88: .4byte sub_80D0E8C thumb_func_end sub_80D0E30 @@ -13709,13 +13709,13 @@ sub_80D0FD8: @ 80D0FD8 adds r1, r0, 0 cmp r2, 0 bne _080D1004 - ldr r0, _080D1000 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D1000 @ =gBattleAnimBankAttacker b _080D1006 .align 2, 0 _080D0FFC: .4byte gBattleAnimArgs -_080D1000: .4byte gBattleAnimPlayerMonIndex +_080D1000: .4byte gBattleAnimBankAttacker _080D1004: - ldr r0, _080D1040 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D1040 @ =gBattleAnimBankTarget _080D1006: ldrb r5, [r0] ldrb r1, [r1, 0x6] @@ -13729,7 +13729,7 @@ _080D1006: movs r1, 0x2 adds r0, r5, 0 eors r0, r1 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080D107E @@ -13744,7 +13744,7 @@ _080D1006: movs r1, 0 b _080D1048 .align 2, 0 -_080D1040: .4byte gBattleAnimEnemyMonIndex +_080D1040: .4byte gBattleAnimBankTarget _080D1044: adds r0, r5, 0 movs r1, 0x2 @@ -13826,18 +13826,18 @@ sub_80D10B8: @ 80D10B8 ldrsh r0, [r0, r2] cmp r0, 0 bne _080D10F0 - ldr r0, _080D10E8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D10E8 @ =gBattleAnimBankAttacker ldrb r7, [r0] - ldr r0, _080D10EC @ =gBattleAnimEnemyMonIndex + ldr r0, _080D10EC @ =gBattleAnimBankTarget b _080D10F6 .align 2, 0 _080D10E4: .4byte gBattleAnimArgs -_080D10E8: .4byte gBattleAnimPlayerMonIndex -_080D10EC: .4byte gBattleAnimEnemyMonIndex +_080D10E8: .4byte gBattleAnimBankAttacker +_080D10EC: .4byte gBattleAnimBankTarget _080D10F0: - ldr r0, _080D1110 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D1110 @ =gBattleAnimBankTarget ldrb r7, [r0] - ldr r0, _080D1114 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D1114 @ =gBattleAnimBankAttacker _080D10F6: ldrb r0, [r0] mov r8, r0 @@ -13852,8 +13852,8 @@ _080D10F6: str r1, [sp, 0x4] b _080D1124 .align 2, 0 -_080D1110: .4byte gBattleAnimEnemyMonIndex -_080D1114: .4byte gBattleAnimPlayerMonIndex +_080D1110: .4byte gBattleAnimBankTarget +_080D1114: .4byte gBattleAnimBankAttacker _080D1118: .4byte gBattleAnimArgs _080D111C: movs r2, 0x2 @@ -13881,7 +13881,7 @@ _080D1124: mov r4, r8 eors r4, r0 adds r0, r4, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080D1170 @@ -13925,7 +13925,7 @@ _080D1180: movs r0, 0x2 eors r4, r0 adds r0, r4, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080D1204 @@ -14002,7 +14002,7 @@ _080D121A: mov r0, r8 movs r1, 0x2 eors r0, r1 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080D127C @@ -14139,7 +14139,7 @@ sub_80D1368: @ 80D1368 adds r4, r0, 0 movs r1, 0 bl sub_80787B0 - ldr r0, _080D139C @ =gBattleAnimPlayerMonIndex + ldr r0, _080D139C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -14161,7 +14161,7 @@ _080D1384: pop {r0} bx r0 .align 2, 0 -_080D139C: .4byte gBattleAnimPlayerMonIndex +_080D139C: .4byte gBattleAnimBankAttacker _080D13A0: .4byte 0x0000ff60 _080D13A4: .4byte gBattleAnimArgs _080D13A8: .4byte sub_80D13AC @@ -14184,7 +14184,7 @@ sub_80D13AC: @ 80D13AC strh r0, [r4, 0x24] subs r2, 0x20 strh r2, [r4, 0x2E] - ldr r0, _080D1418 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D1418 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -14223,7 +14223,7 @@ _080D1410: pop {r0} bx r0 .align 2, 0 -_080D1418: .4byte gBattleAnimPlayerMonIndex +_080D1418: .4byte gBattleAnimBankAttacker _080D141C: .4byte 0x0000ff60 _080D1420: .4byte sub_80D1424 thumb_func_end sub_80D13AC @@ -14449,7 +14449,7 @@ sub_80D15A4: @ 80D15A4 ldr r0, _080D15D4 @ =gTasks adds r4, r0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -14531,7 +14531,7 @@ sub_80D1638: @ 80D1638 strh r0, [r4, 0xE] movs r0, 0x3 strh r0, [r4, 0x20] - ldr r0, _080D1670 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D1670 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -14543,7 +14543,7 @@ sub_80D1638: @ 80D1638 b _080D167E .align 2, 0 _080D166C: .4byte gTasks -_080D1670: .4byte gBattleAnimEnemyMonIndex +_080D1670: .4byte gBattleAnimBankTarget _080D1674: .4byte 0x0000ffff _080D1678: movs r0, 0x1 @@ -14552,7 +14552,7 @@ _080D1678: _080D167E: strh r0, [r4, 0x24] movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -14745,7 +14745,7 @@ sub_80D17C4: @ 80D17C4 movs r0, 0x2 strh r0, [r4, 0x24] movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -14888,7 +14888,7 @@ sub_80D18D4: @ 80D18D4 strh r0, [r4, 0x16] strh r0, [r4, 0x18] strh r0, [r4, 0x22] - ldr r5, _080D1928 @ =gBattleAnimPlayerMonIndex + ldr r5, _080D1928 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0 bl sub_8077ABC @@ -14908,7 +14908,7 @@ sub_80D18D4: @ 80D18D4 bx r0 .align 2, 0 _080D1924: .4byte gTasks -_080D1928: .4byte gBattleAnimPlayerMonIndex +_080D1928: .4byte gBattleAnimBankAttacker _080D192C: .4byte sub_80D1930 thumb_func_end sub_80D18D4 @@ -15171,7 +15171,7 @@ _080D1AF4: adds r1, r0 _080D1B1C: adds r0, r4, 0 - bl sub_800D238 + bl LZDecompressWram movs r5, 0 _080D1B24: lsls r4, r5, 5 @@ -15293,7 +15293,7 @@ sub_80D1C08: @ 80D1C08 adds r5, r0, 0 movs r1, 0 bl sub_80787B0 - ldr r6, _080D1C70 @ =gBattleAnimPlayerMonIndex + ldr r6, _080D1C70 @ =gBattleAnimBankAttacker ldrb r0, [r6] bl GetBankSide lsls r0, 24 @@ -15327,7 +15327,7 @@ _080D1C28: str r0, [r5, 0x1C] ldr r1, _080D1C7C @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldrb r1, [r4, 0xA] ldrb r2, [r4, 0xC] adds r0, r5, 0 @@ -15336,7 +15336,7 @@ _080D1C28: pop {r0} bx r0 .align 2, 0 -_080D1C70: .4byte gBattleAnimPlayerMonIndex +_080D1C70: .4byte gBattleAnimBankAttacker _080D1C74: .4byte gBattleAnimArgs _080D1C78: .4byte sub_8078B34 _080D1C7C: .4byte move_anim_8072740 @@ -15569,7 +15569,7 @@ sub_80D1E38: @ 80D1E38 lsrs r0, 24 adds r6, r0, 0 movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r4, r0, 24 ldr r1, _080D1E88 @ =gTasks @@ -15585,7 +15585,7 @@ sub_80D1E38: @ 80D1E38 cmp r0, 0x1 bne _080D1E94 movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -15638,7 +15638,7 @@ sub_80D1EC8: @ 80D1EC8 lsrs r0, 24 adds r6, r0, 0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r4, r0, 24 ldr r1, _080D1F18 @ =gTasks @@ -15654,7 +15654,7 @@ sub_80D1EC8: @ 80D1EC8 cmp r0, 0x1 bne _080D1F24 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -15710,7 +15710,7 @@ sub_80D1F58: @ 80D1F58 strh r0, [r4, 0x2E] ldrh r0, [r4, 0x20] strh r0, [r4, 0x30] - ldr r5, _080D1F9C @ =gBattleAnimEnemyMonIndex + ldr r5, _080D1F9C @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -15733,7 +15733,7 @@ sub_80D1F58: @ 80D1F58 pop {r0} bx r0 .align 2, 0 -_080D1F9C: .4byte gBattleAnimEnemyMonIndex +_080D1F9C: .4byte gBattleAnimBankTarget _080D1FA0: .4byte sub_80D1FA4 thumb_func_end sub_80D1F58 @@ -15853,7 +15853,7 @@ sub_80D2064: @ 80D2064 ldr r1, _080D208C @ =sub_80782D8 str r1, [r0, 0x1C] ldr r1, _080D2090 @ =sub_80D2094 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r0} bx r0 .align 2, 0 @@ -16330,7 +16330,7 @@ _080D2450: .4byte 0x040000d4 _080D2454: .4byte 0x85000400 _080D2458: .4byte gBattleAnimBackgroundTilemap_ScaryFaceContest _080D245C: - ldr r0, _080D2478 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D2478 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -16343,7 +16343,7 @@ _080D246E: bl LZDecompressVram b _080D2488 .align 2, 0 -_080D2478: .4byte gBattleAnimEnemyMonIndex +_080D2478: .4byte gBattleAnimBankTarget _080D247C: .4byte gBattleAnimBackgroundTilemap_ScaryFacePlayer _080D2480: ldr r0, _080D24CC @ =gBattleAnimBackgroundTilemap_ScaryFaceOpponent @@ -16621,7 +16621,7 @@ _080D26A0: .4byte REG_BLDCNT sub_80D26A4: @ 80D26A4 push {r4,r5,lr} adds r4, r0, 0 - ldr r5, _080D26F8 @ =gBattleAnimPlayerMonIndex + ldr r5, _080D26F8 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -16658,7 +16658,7 @@ sub_80D26A4: @ 80D26A4 pop {r0} bx r0 .align 2, 0 -_080D26F8: .4byte gBattleAnimPlayerMonIndex +_080D26F8: .4byte gBattleAnimBankAttacker _080D26FC: .4byte gBattleAnimArgs _080D2700: .4byte sub_80D2704 thumb_func_end sub_80D26A4 @@ -16779,7 +16779,7 @@ _080D27DC: .4byte 0x0000ffff sub_80D27E0: @ 80D27E0 push {r4,r5,lr} adds r5, r0, 0 - ldr r4, _080D2828 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D2828 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -16809,7 +16809,7 @@ sub_80D27E0: @ 80D27E0 pop {r0} bx r0 .align 2, 0 -_080D2828: .4byte gBattleAnimPlayerMonIndex +_080D2828: .4byte gBattleAnimBankAttacker _080D282C: .4byte gBattleAnimArgs _080D2830: .4byte sub_80D2834 thumb_func_end sub_80D27E0 @@ -16887,7 +16887,7 @@ _080D28A8: sub_80D28AC: @ 80D28AC push {r4,r5,lr} adds r5, r0, 0 - ldr r4, _080D28F8 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D28F8 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -16919,7 +16919,7 @@ sub_80D28AC: @ 80D28AC pop {r0} bx r0 .align 2, 0 -_080D28F8: .4byte gBattleAnimPlayerMonIndex +_080D28F8: .4byte gBattleAnimBankAttacker _080D28FC: .4byte gBattleAnimArgs _080D2900: .4byte sub_80D287C thumb_func_end sub_80D28AC @@ -17179,7 +17179,7 @@ sub_80D2ABC: @ 80D2ABC adds r0, r4, 0 movs r1, 0 bl StartSpriteAnim - ldr r0, _080D2BBC @ =gBattleAnimEnemyMonIndex + ldr r0, _080D2BBC @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079E90 subs r0, 0x1 @@ -17291,7 +17291,7 @@ _080D2B80: b _080D2BD2 .align 2, 0 _080D2BB8: .4byte gBattleAnimArgs -_080D2BBC: .4byte gBattleAnimEnemyMonIndex +_080D2BBC: .4byte gBattleAnimBankTarget _080D2BC0: .4byte 0x0000ffff _080D2BC4: adds r2, r4, 0 @@ -17375,12 +17375,12 @@ _080D2C54: ldrsh r0, [r1, r2] cmp r0, 0 bne _080D2C64 - ldr r4, _080D2C60 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D2C60 @ =gBattleAnimBankAttacker b _080D2C66 .align 2, 0 -_080D2C60: .4byte gBattleAnimPlayerMonIndex +_080D2C60: .4byte gBattleAnimBankAttacker _080D2C64: - ldr r4, _080D2C94 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D2C94 @ =gBattleAnimBankTarget _080D2C66: ldrb r0, [r4] movs r1, 0x2 @@ -17404,7 +17404,7 @@ _080D2C66: adds r0, 0x20 b _080D2CA0 .align 2, 0 -_080D2C94: .4byte gBattleAnimEnemyMonIndex +_080D2C94: .4byte gBattleAnimBankTarget _080D2C98: .4byte gBattleAnimArgs _080D2C9C: ldrh r0, [r5, 0x20] @@ -17467,7 +17467,7 @@ sub_80D2CF8: @ 80D2CF8 lsrs r5, 24 ldr r0, _080D2D2C @ =gBattleAnimArgs ldrb r0, [r0] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -17524,13 +17524,13 @@ sub_80D2D68: @ 80D2D68 ldrsh r0, [r0, r1] cmp r0, 0 bne _080D2D84 - ldr r0, _080D2D80 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D2D80 @ =gBattleAnimBankAttacker b _080D2D86 .align 2, 0 _080D2D7C: .4byte gBattleAnimArgs -_080D2D80: .4byte gBattleAnimPlayerMonIndex +_080D2D80: .4byte gBattleAnimBankAttacker _080D2D84: - ldr r0, _080D2E1C @ =gBattleAnimEnemyMonIndex + ldr r0, _080D2E1C @ =gBattleAnimBankTarget _080D2D86: ldrb r6, [r0] adds r0, r6, 0 @@ -17607,7 +17607,7 @@ _080D2DF0: pop {r0} bx r0 .align 2, 0 -_080D2E1C: .4byte gBattleAnimEnemyMonIndex +_080D2E1C: .4byte gBattleAnimBankTarget _080D2E20: .4byte gBattleAnimArgs _080D2E24: .4byte 0x000003ff _080D2E28: .4byte 0xfffffc00 @@ -17882,11 +17882,11 @@ sub_80D3014: @ 80D3014 ands r0, r1 cmp r0, 0 beq _080D3060 - ldr r4, _080D305C @ =gBattleAnimPlayerMonIndex + ldr r4, _080D305C @ =gBattleAnimBankAttacker ldrb r1, [r4] movs r0, 0x2 eors r0, r1 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080D3060 @@ -17906,9 +17906,9 @@ sub_80D3014: @ 80D3014 b _080D3080 .align 2, 0 _080D3058: .4byte gBattleTypeFlags -_080D305C: .4byte gBattleAnimPlayerMonIndex +_080D305C: .4byte gBattleAnimBankAttacker _080D3060: - ldr r4, _080D30A0 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D30A0 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -17934,12 +17934,12 @@ _080D3080: str r0, [r5, 0x1C] ldr r1, _080D30A8 @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 .align 2, 0 -_080D30A0: .4byte gBattleAnimPlayerMonIndex +_080D30A0: .4byte gBattleAnimBankAttacker _080D30A4: .4byte sub_8078B34 _080D30A8: .4byte move_anim_8072740 thumb_func_end sub_80D3014 @@ -18099,7 +18099,7 @@ _080D31C2: sub_80D31C8: @ 80D31C8 push {r4-r6,lr} adds r6, r0, 0 - ldr r5, _080D31F0 @ =gBattleAnimPlayerMonIndex + ldr r5, _080D31F0 @ =gBattleAnimBankAttacker ldrb r0, [r5] bl GetBankSide lsls r0, 24 @@ -18115,7 +18115,7 @@ sub_80D31C8: @ 80D31C8 subs r0, r1 b _080D320A .align 2, 0 -_080D31F0: .4byte gBattleAnimPlayerMonIndex +_080D31F0: .4byte gBattleAnimBankAttacker _080D31F4: .4byte gBattleAnimArgs _080D31F8: ldrb r0, [r5] @@ -18142,7 +18142,7 @@ _080D320A: movs r1, 0x40 orrs r0, r1 strb r0, [r2] - ldr r0, _080D32D4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D32D4 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -18158,7 +18158,7 @@ _080D3240: strh r0, [r6, 0x2E] ldrh r0, [r6, 0x20] strh r0, [r6, 0x30] - ldr r4, _080D32D8 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D32D8 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -18220,8 +18220,8 @@ _080D3240: bx r0 .align 2, 0 _080D32D0: .4byte gBattleAnimArgs -_080D32D4: .4byte gBattleAnimPlayerMonIndex -_080D32D8: .4byte gBattleAnimEnemyMonIndex +_080D32D4: .4byte gBattleAnimBankAttacker +_080D32D8: .4byte gBattleAnimBankTarget _080D32DC: .4byte SpriteCallbackDummy _080D32E0: .4byte gSprites _080D32E4: .4byte sub_80D32E8 @@ -18309,7 +18309,7 @@ sub_80D3370: @ 80D3370 ldr r1, _080D3390 @ =sub_8078600 str r1, [r0, 0x1C] ldr r1, _080D3394 @ =sub_80D3398 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r0} bx r0 .align 2, 0 @@ -18325,7 +18325,7 @@ sub_80D3398: @ 80D3398 ldr r1, _080D33AC @ =sub_80782D8 str r1, [r0, 0x1C] ldr r1, _080D33B0 @ =move_anim_8074EE0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r0} bx r0 .align 2, 0 @@ -18339,7 +18339,7 @@ sub_80D33B4: @ 80D33B4 adds r5, r0, 0 movs r1, 0x1 bl sub_80787B0 - ldr r0, _080D33DC @ =gBattleAnimPlayerMonIndex + ldr r0, _080D33DC @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -18353,7 +18353,7 @@ sub_80D33B4: @ 80D33B4 adds r7, r1, 0 b _080D33EA .align 2, 0 -_080D33DC: .4byte gBattleAnimPlayerMonIndex +_080D33DC: .4byte gBattleAnimBankAttacker _080D33E0: .4byte gBattleAnimArgs _080D33E4: ldr r0, _080D3440 @ =gBattleAnimArgs @@ -18364,7 +18364,7 @@ _080D33EA: strh r0, [r5, 0x2E] ldrh r0, [r5, 0x20] strh r0, [r5, 0x30] - ldr r4, _080D3444 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D3444 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -18400,7 +18400,7 @@ _080D33EA: bx r0 .align 2, 0 _080D3440: .4byte gBattleAnimArgs -_080D3444: .4byte gBattleAnimEnemyMonIndex +_080D3444: .4byte gBattleAnimBankTarget _080D3448: .4byte sub_80D344C thumb_func_end sub_80D33B4 @@ -18551,7 +18551,7 @@ sub_80D3554: @ 80D3554 strh r0, [r5, 0x2E] ldrh r0, [r5, 0x20] strh r0, [r5, 0x30] - ldr r4, _080D35BC @ =gBattleAnimEnemyMonIndex + ldr r4, _080D35BC @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -18590,7 +18590,7 @@ sub_80D3554: @ 80D3554 strh r0, [r5, 0x3C] b _080D35C8 .align 2, 0 -_080D35BC: .4byte gBattleAnimEnemyMonIndex +_080D35BC: .4byte gBattleAnimBankTarget _080D35C0: .4byte gBattleAnimArgs _080D35C4: lsls r0, r1, 8 @@ -18711,7 +18711,7 @@ _080D3694: .4byte gTasks sub_80D3698: @ 80D3698 push {r4-r7,lr} adds r4, r0, 0 - ldr r7, _080D36E4 @ =gBattleAnimPlayerMonIndex + ldr r7, _080D36E4 @ =gBattleAnimBankAttacker ldrb r0, [r7] movs r1, 0 bl sub_8077ABC @@ -18743,7 +18743,7 @@ sub_80D3698: @ 80D3698 strh r0, [r4, 0x24] b _080D36F4 .align 2, 0 -_080D36E4: .4byte gBattleAnimPlayerMonIndex +_080D36E4: .4byte gBattleAnimBankAttacker _080D36E8: .4byte 0x0000fff6 _080D36EC: strh r6, [r4, 0x24] @@ -18787,11 +18787,11 @@ _080D3722: sub_80D3728: @ 80D3728 push {r4-r7,lr} adds r6, r0, 0 - ldr r5, _080D37E8 @ =gBattleAnimPlayerMonIndex + ldr r5, _080D37E8 @ =gBattleAnimBankAttacker ldrb r0, [r5] bl GetBankSide adds r4, r0, 0 - ldr r0, _080D37EC @ =gBattleAnimEnemyMonIndex + ldr r0, _080D37EC @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r4, 24 @@ -18839,7 +18839,7 @@ _080D3786: _080D3790: adds r0, r6, 0 bl sub_80787B0 - ldr r0, _080D37E8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D37E8 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -18851,7 +18851,7 @@ _080D3790: _080D37AA: ldrh r0, [r5, 0x8] strh r0, [r6, 0x2E] - ldr r4, _080D37EC @ =gBattleAnimEnemyMonIndex + ldr r4, _080D37EC @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -18872,13 +18872,13 @@ _080D37AA: str r0, [r6, 0x1C] ldr r1, _080D37F8 @ =move_anim_8072740 adds r0, r6, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4-r7} pop {r0} bx r0 .align 2, 0 -_080D37E8: .4byte gBattleAnimPlayerMonIndex -_080D37EC: .4byte gBattleAnimEnemyMonIndex +_080D37E8: .4byte gBattleAnimBankAttacker +_080D37EC: .4byte gBattleAnimBankTarget _080D37F0: .4byte gBattleAnimArgs _080D37F4: .4byte sub_8078B34 _080D37F8: .4byte move_anim_8072740 @@ -18904,7 +18904,7 @@ sub_80D37FC: @ 80D37FC str r0, [r4, 0x1C] ldr r1, _080D3834 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4} pop {r0} bx r0 @@ -19080,7 +19080,7 @@ _080D3920: movs r1, 0x4 orrs r0, r1 strb r0, [r2] - ldr r0, _080D39A0 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D39A0 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -19095,7 +19095,7 @@ _080D3990: .4byte 0x00003f42 _080D3994: .4byte REG_BG1CNT _080D3998: .4byte 0x040000d4 _080D399C: .4byte 0x85000400 -_080D39A0: .4byte gBattleAnimPlayerMonIndex +_080D39A0: .4byte gBattleAnimBankAttacker _080D39A4: .4byte gUnknown_08E70968 _080D39A8: ldr r0, _080D39B4 @ =gUnknown_08E70C38 @@ -19203,7 +19203,7 @@ _080D3A88: .4byte gUnknown_030042C0 _080D3A8C: .4byte 0x0000ffd0 _080D3A90: .4byte gUnknown_030041B4 _080D3A94: - ldr r0, _080D3AC4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D3AC4 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -19226,7 +19226,7 @@ _080D3A94: strh r1, [r7, 0xE] b _080D3AEE .align 2, 0 -_080D3AC4: .4byte gBattleAnimPlayerMonIndex +_080D3AC4: .4byte gBattleAnimBankAttacker _080D3AC8: .4byte 0x0000ff20 _080D3ACC: .4byte gUnknown_030042C0 _080D3AD0: .4byte gUnknown_030041B4 @@ -20048,7 +20048,7 @@ sub_80D40F4: @ 80D40F4 ldr r0, _080D4144 @ =gTasks adds r4, r0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -20374,7 +20374,7 @@ _080D438A: thumb_func_start sub_80D4394 sub_80D4394: @ 80D4394 push {r4,r5,lr} - ldr r4, _080D43B8 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D43B8 @ =gBattleAnimBankAttacker ldrb r0, [r4] bl GetBankSide lsls r0, 24 @@ -20390,7 +20390,7 @@ sub_80D4394: @ 80D4394 ldr r0, _080D43C0 @ =gPlayerParty b _080D43D8 .align 2, 0 -_080D43B8: .4byte gBattleAnimPlayerMonIndex +_080D43B8: .4byte gBattleAnimBankAttacker _080D43BC: .4byte gBattlePartyID _080D43C0: .4byte gPlayerParty _080D43C4: @@ -20451,7 +20451,7 @@ sub_80D4418: @ 80D4418 lsls r1, 24 lsrs r1, 24 str r1, [sp] - ldr r4, _080D4520 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D4520 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -20571,7 +20571,7 @@ _080D44EA: pop {r0} bx r0 .align 2, 0 -_080D4520: .4byte gBattleAnimPlayerMonIndex +_080D4520: .4byte gBattleAnimBankAttacker _080D4524: .4byte gSpriteTemplate_83D9378 _080D4528: .4byte gSprites thumb_func_end sub_80D4418 @@ -20681,7 +20681,7 @@ sub_80D45D8: @ 80D45D8 lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0xA] - ldr r0, _080D460C @ =gBattleAnimPlayerMonIndex + ldr r0, _080D460C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -20693,7 +20693,7 @@ sub_80D45D8: @ 80D45D8 b _080D4616 .align 2, 0 _080D4608: .4byte gTasks -_080D460C: .4byte gBattleAnimPlayerMonIndex +_080D460C: .4byte gBattleAnimBankAttacker _080D4610: movs r0, 0x10 strh r0, [r4, 0x10] @@ -21079,7 +21079,7 @@ sub_80D48F4: @ 80D48F4 lsls r1, 3 ldr r0, _080D4978 @ =gTasks adds r5, r1, r0 - ldr r4, _080D497C @ =gBattleAnimPlayerMonIndex + ldr r4, _080D497C @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -21136,7 +21136,7 @@ _080D494C: bx r0 .align 2, 0 _080D4978: .4byte gTasks -_080D497C: .4byte gBattleAnimPlayerMonIndex +_080D497C: .4byte gBattleAnimBankAttacker _080D4980: .4byte 0x0000ffe0 _080D4984: .4byte sub_80D4988 thumb_func_end sub_80D48F4 @@ -21556,7 +21556,7 @@ sub_80D4CA4: @ 80D4CA4 adds r4, r0, 0 movs r1, 0x1 bl sub_80787B0 - ldr r5, _080D4CE0 @ =gBattleAnimEnemyMonIndex + ldr r5, _080D4CE0 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -21580,7 +21580,7 @@ sub_80D4CA4: @ 80D4CA4 pop {r0} bx r0 .align 2, 0 -_080D4CE0: .4byte gBattleAnimEnemyMonIndex +_080D4CE0: .4byte gBattleAnimBankTarget _080D4CE4: .4byte gBattleAnimArgs _080D4CE8: .4byte sub_80D4CEC thumb_func_end sub_80D4CA4 @@ -21734,7 +21734,7 @@ _080D4DF2: strh r0, [r4, 0x2E] mov r0, r9 strh r0, [r4, 0x30] - ldr r0, _080D4E3C @ =gBattleAnimPlayerMonIndex + ldr r0, _080D4E3C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl sub_8079E90 subs r0, 0x1 @@ -21750,7 +21750,7 @@ _080D4DF2: .align 2, 0 _080D4E34: .4byte gSpriteTemplate_83D9420 _080D4E38: .4byte gSprites -_080D4E3C: .4byte gBattleAnimPlayerMonIndex +_080D4E3C: .4byte gBattleAnimBankAttacker _080D4E40: strh r7, [r4, 0x32] _080D4E42: @@ -21792,7 +21792,7 @@ _080D4E68: strh r0, [r4, 0x2E] mov r0, r9 strh r0, [r4, 0x30] - ldr r0, _080D4EB4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D4EB4 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl sub_8079E90 subs r0, 0x1 @@ -21808,7 +21808,7 @@ _080D4E68: .align 2, 0 _080D4EAC: .4byte gSpriteTemplate_83D9420 _080D4EB0: .4byte gSprites -_080D4EB4: .4byte gBattleAnimPlayerMonIndex +_080D4EB4: .4byte gBattleAnimBankAttacker _080D4EB8: strh r7, [r4, 0x32] _080D4EBA: @@ -21847,7 +21847,7 @@ sub_80D4ED8: @ 80D4ED8 strh r0, [r4, 0x36] ldr r1, _080D4F10 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r1, _080D4F14 @ =sub_8078174 str r1, [r4, 0x1C] adds r0, r4, 0 @@ -21884,7 +21884,7 @@ sub_80D4F18: @ 80D4F18 str r0, [r4, 0x1C] ldr r1, _080D4F58 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 @@ -21899,7 +21899,7 @@ sub_80D4F5C: @ 80D4F5C push {r4,lr} adds r4, r0, 0 bl sub_8078650 - ldr r0, _080D4F90 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D4F90 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -21920,7 +21920,7 @@ sub_80D4F5C: @ 80D4F5C adds r1, r2, 0 b _080D4FAE .align 2, 0 -_080D4F90: .4byte gBattleAnimPlayerMonIndex +_080D4F90: .4byte gBattleAnimBankAttacker _080D4F94: .4byte gBattleAnimArgs _080D4F98: ldr r1, _080D4FC4 @ =gBattleAnimArgs @@ -21955,7 +21955,7 @@ _080D4FC8: .4byte sub_80D5038 sub_80D4FCC: @ 80D4FCC push {r4,lr} adds r4, r0, 0 - ldr r0, _080D4FF8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D4FF8 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -21975,7 +21975,7 @@ sub_80D4FCC: @ 80D4FCC adds r1, r2, 0 b _080D5018 .align 2, 0 -_080D4FF8: .4byte gBattleAnimPlayerMonIndex +_080D4FF8: .4byte gBattleAnimBankAttacker _080D4FFC: .4byte gBattleAnimArgs _080D5000: ldr r1, _080D5030 @ =gBattleAnimArgs @@ -22047,7 +22047,7 @@ sub_80D5074: @ 80D5074 push {r4,lr} adds r4, r0, 0 bl sub_8078650 - ldr r0, _080D5098 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D5098 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -22060,7 +22060,7 @@ sub_80D5074: @ 80D5074 strh r1, [r4, 0x20] b _080D50B2 .align 2, 0 -_080D5098: .4byte gBattleAnimPlayerMonIndex +_080D5098: .4byte gBattleAnimBankAttacker _080D509C: .4byte gBattleAnimArgs _080D50A0: ldr r0, _080D50E0 @ =gBattleAnimArgs @@ -22194,7 +22194,7 @@ sub_80D517C: @ 80D517C ldr r1, _080D51A0 @ =sub_8078B34 str r1, [r0, 0x1C] ldr r1, _080D51A4 @ =move_anim_8072740 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r0} bx r0 .align 2, 0 @@ -22206,11 +22206,11 @@ _080D51A4: .4byte move_anim_8072740 sub_80D51A8: @ 80D51A8 push {r4-r6,lr} adds r6, r0, 0 - ldr r5, _080D5200 @ =gBattleAnimPlayerMonIndex + ldr r5, _080D5200 @ =gBattleAnimBankAttacker ldrb r0, [r5] bl GetBankSide adds r4, r0, 0 - ldr r0, _080D5204 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D5204 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r4, 24 @@ -22245,8 +22245,8 @@ _080D51EE: pop {r0} bx r0 .align 2, 0 -_080D5200: .4byte gBattleAnimPlayerMonIndex -_080D5204: .4byte gBattleAnimEnemyMonIndex +_080D5200: .4byte gBattleAnimBankAttacker +_080D5204: .4byte gBattleAnimBankTarget _080D5208: .4byte gBattleAnimArgs _080D520C: .4byte sub_8079534 thumb_func_end sub_80D51A8 @@ -22305,7 +22305,7 @@ sub_80D5254: @ 80D5254 strh r0, [r5, 0x2E] ldrh r0, [r5, 0x20] strh r0, [r5, 0x30] - ldr r4, _080D52A4 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D52A4 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -22329,7 +22329,7 @@ _080D529E: pop {r0} bx r0 .align 2, 0 -_080D52A4: .4byte gBattleAnimEnemyMonIndex +_080D52A4: .4byte gBattleAnimBankTarget _080D52A8: .4byte sub_80D52AC thumb_func_end sub_80D5254 @@ -22343,7 +22343,7 @@ sub_80D52AC: @ 80D52AC beq _080D52F4 movs r4, 0 strh r4, [r6, 0x2E] - ldr r5, _080D52EC @ =gBattleAnimEnemyMonIndex + ldr r5, _080D52EC @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -22364,7 +22364,7 @@ sub_80D52AC: @ 80D52AC bl _call_via_r1 b _080D531E .align 2, 0 -_080D52EC: .4byte gBattleAnimEnemyMonIndex +_080D52EC: .4byte gBattleAnimBankTarget _080D52F0: .4byte sub_80D5324 _080D52F4: movs r1, 0x3C @@ -22457,7 +22457,7 @@ sub_80D5374: @ 80D5374 strh r0, [r4, 0x32] ldr r1, _080D53AC @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080D53B0 @ =sub_8078364 str r0, [r4, 0x1C] pop {r4} @@ -22490,7 +22490,7 @@ sub_80D53B4: @ 80D53B4 str r0, [r4, 0x1C] ldr r1, _080D53F0 @ =sub_80D53F4 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4} pop {r0} bx r0 @@ -22577,7 +22577,7 @@ sub_80D5470: @ 80D5470 ldr r0, _080D54D0 @ =gTasks adds r4, r0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 movs r5, 0 @@ -22595,7 +22595,7 @@ sub_80D5470: @ 80D5470 adds r0, r2 ldrh r0, [r0, 0x22] strh r0, [r4, 0x10] - ldr r0, _080D54D8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D54D8 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -22615,7 +22615,7 @@ sub_80D5470: @ 80D5470 .align 2, 0 _080D54D0: .4byte gTasks _080D54D4: .4byte gSprites -_080D54D8: .4byte gBattleAnimPlayerMonIndex +_080D54D8: .4byte gBattleAnimBankAttacker _080D54DC: .4byte sub_80D54E0 thumb_func_end sub_80D5470 @@ -23021,7 +23021,7 @@ sub_80D57C4: @ 80D57C4 lsls r0, 2 adds r0, r1 ldrh r4, [r0, 0x20] - ldr r0, _080D5818 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D5818 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -23035,7 +23035,7 @@ sub_80D57C4: @ 80D57C4 b _080D5826 .align 2, 0 _080D5814: .4byte gSprites -_080D5818: .4byte gBattleAnimPlayerMonIndex +_080D5818: .4byte gBattleAnimBankAttacker _080D581C: adds r0, r4, 0 adds r0, 0x10 @@ -23203,7 +23203,7 @@ sub_80D5940: @ 80D5940 adds r0, r2 lsls r0, 16 lsrs r4, r0, 16 - ldr r0, _080D597C @ =gBattleAnimPlayerMonIndex + ldr r0, _080D597C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -23215,7 +23215,7 @@ sub_80D5940: @ 80D5940 b _080D5986 .align 2, 0 _080D5978: .4byte gSprites -_080D597C: .4byte gBattleAnimPlayerMonIndex +_080D597C: .4byte gBattleAnimBankAttacker _080D5980: lsls r0, r4, 16 movs r1, 0xB0 @@ -23466,7 +23466,7 @@ _080D5B28: bl StartSpriteAnim ldrh r0, [r4, 0x4] strh r0, [r5, 0x3C] - ldr r0, _080D5B54 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D5B54 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -23476,12 +23476,12 @@ _080D5B28: b _080D5B5A .align 2, 0 _080D5B50: .4byte gBattleAnimArgs -_080D5B54: .4byte gBattleAnimPlayerMonIndex +_080D5B54: .4byte gBattleAnimBankAttacker _080D5B58: ldr r0, _080D5B78 @ =0x0000fffc _080D5B5A: strh r0, [r5, 0x36] - ldr r0, _080D5B7C @ =gBattleAnimEnemyMonIndex + ldr r0, _080D5B7C @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079ED4 movs r1, 0x3 @@ -23496,12 +23496,12 @@ _080D5B5A: b _080D5BD6 .align 2, 0 _080D5B78: .4byte 0x0000fffc -_080D5B7C: .4byte gBattleAnimEnemyMonIndex +_080D5B7C: .4byte gBattleAnimBankTarget _080D5B80: ldrh r0, [r5, 0x30] adds r0, 0xC0 strh r0, [r5, 0x30] - ldr r0, _080D5BA0 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D5BA0 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -23513,7 +23513,7 @@ _080D5B80: negs r0, r0 b _080D5BAA .align 2, 0 -_080D5BA0: .4byte gBattleAnimPlayerMonIndex +_080D5BA0: .4byte gBattleAnimBankAttacker _080D5BA4: ldrh r0, [r5, 0x30] lsls r0, 16 @@ -23579,7 +23579,7 @@ _080D5BDE: lsls r0, 1 strh r0, [r5, 0x2E] strh r1, [r5, 0x30] - ldr r4, _080D5C54 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D5C54 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -23603,7 +23603,7 @@ _080D5C4E: pop {r0} bx r0 .align 2, 0 -_080D5C54: .4byte gBattleAnimEnemyMonIndex +_080D5C54: .4byte gBattleAnimBankTarget _080D5C58: .4byte sub_80D5C5C thumb_func_end sub_80D5B0C @@ -23715,7 +23715,7 @@ _080D5CD8: lsrs r0, 16 cmp r0, 0x83 bls _080D5D5C - ldr r0, _080D5D58 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D5D58 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079ED4 movs r1, 0x3 @@ -23732,9 +23732,9 @@ _080D5CD8: _080D5D4C: .4byte gBattleAnimArgs _080D5D50: .4byte gMain _080D5D54: .4byte 0x0000043d -_080D5D58: .4byte gBattleAnimEnemyMonIndex +_080D5D58: .4byte gBattleAnimBankTarget _080D5D5C: - ldr r0, _080D5D80 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D5D80 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079ED4 lsls r0, 24 @@ -23751,7 +23751,7 @@ _080D5D5C: strb r1, [r4, 0x5] b _080D5DA0 .align 2, 0 -_080D5D80: .4byte gBattleAnimEnemyMonIndex +_080D5D80: .4byte gBattleAnimBankTarget _080D5D84: adds r0, r2, 0 subs r0, 0x40 @@ -23813,7 +23813,7 @@ sub_80D5DDC: @ 80D5DDC lsls r1, 3 ldr r0, _080D5E3C @ =gTasks adds r4, r1, r0 - ldr r0, _080D5E40 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D5E40 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -23825,22 +23825,22 @@ sub_80D5DDC: @ 80D5DDC movs r1, 0x1 _080D5E02: strh r1, [r4, 0x20] - ldr r0, _080D5E44 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D5E44 @ =gBattleAnimBankTarget ldrb r1, [r0] movs r0, 0x2 eors r0, r1 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 lsrs r0, 24 adds r0, 0x1 strh r0, [r4, 0x22] movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x24] movs r0, 0x3 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -23851,8 +23851,8 @@ _080D5E02: bx r0 .align 2, 0 _080D5E3C: .4byte gTasks -_080D5E40: .4byte gBattleAnimPlayerMonIndex -_080D5E44: .4byte gBattleAnimEnemyMonIndex +_080D5E40: .4byte gBattleAnimBankAttacker +_080D5E44: .4byte gBattleAnimBankTarget _080D5E48: .4byte sub_80D5E4C thumb_func_end sub_80D5DDC @@ -24222,7 +24222,7 @@ _080D60EA: adds r0, 0x1 strh r0, [r2, 0x8] ldr r1, _080D6114 @ =gObjectBankIDs - ldr r0, _080D6118 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D6118 @ =gBattleAnimBankTarget ldrb r0, [r0] adds r0, r1 ldrb r6, [r0] @@ -24238,7 +24238,7 @@ _080D60EA: _080D610C: .4byte gTasks _080D6110: .4byte gBattleAnimArgs _080D6114: .4byte gObjectBankIDs -_080D6118: .4byte gBattleAnimEnemyMonIndex +_080D6118: .4byte gBattleAnimBankTarget _080D611C: .4byte gUnknown_083D9794 _080D6120: ldr r4, _080D616C @ =gUnknown_083D97A4 @@ -24331,7 +24331,7 @@ _080D61C4: .4byte gSprites sub_80D61C8: @ 80D61C8 push {r4,lr} adds r4, r0, 0 - ldr r0, _080D61E8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D61E8 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -24344,7 +24344,7 @@ sub_80D61C8: @ 80D61C8 strh r1, [r4, 0x20] b _080D61FC .align 2, 0 -_080D61E8: .4byte gBattleAnimPlayerMonIndex +_080D61E8: .4byte gBattleAnimBankAttacker _080D61EC: .4byte gBattleAnimArgs _080D61F0: ldr r1, _080D6210 @ =gBattleAnimArgs @@ -24389,7 +24389,7 @@ _080D622E: sub_80D6234: @ 80D6234 push {r4,lr} adds r4, r0, 0 - ldr r0, _080D6254 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D6254 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -24402,7 +24402,7 @@ sub_80D6234: @ 80D6234 strh r1, [r4, 0x20] b _080D6266 .align 2, 0 -_080D6254: .4byte gBattleAnimPlayerMonIndex +_080D6254: .4byte gBattleAnimBankAttacker _080D6258: .4byte gBattleAnimArgs _080D625C: ldr r0, _080D6270 @ =gBattleAnimArgs @@ -24442,7 +24442,7 @@ _080D628E: sub_80D6294: @ 80D6294 push {r4,r5,lr} adds r5, r0, 0 - ldr r4, _080D62D8 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D62D8 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -24455,7 +24455,7 @@ sub_80D6294: @ 80D6294 lsls r0, 24 lsrs r0, 24 strh r0, [r5, 0x22] - ldr r0, _080D62DC @ =gBattleAnimPlayerMonIndex + ldr r0, _080D62DC @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -24472,8 +24472,8 @@ sub_80D6294: @ 80D6294 strh r0, [r5, 0x22] b _080D62F8 .align 2, 0 -_080D62D8: .4byte gBattleAnimEnemyMonIndex -_080D62DC: .4byte gBattleAnimPlayerMonIndex +_080D62D8: .4byte gBattleAnimBankTarget +_080D62DC: .4byte gBattleAnimBankAttacker _080D62E0: .4byte gBattleAnimArgs _080D62E4: ldr r0, _080D631C @ =gBattleAnimArgs @@ -24497,7 +24497,7 @@ _080D62F8: strh r0, [r5, 0x34] ldr r1, _080D6320 @ =move_anim_8074EE0 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080D6324 @ =sub_8078114 str r0, [r5, 0x1C] pop {r4,r5} @@ -24532,46 +24532,46 @@ _080D6344: beq _080D637C b _080D63A0 _080D634E: - ldr r0, _080D6354 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D6354 @ =gBattleAnimBankAttacker b _080D63A2 .align 2, 0 -_080D6354: .4byte gBattleAnimPlayerMonIndex +_080D6354: .4byte gBattleAnimBankAttacker _080D6358: - ldr r4, _080D6370 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D6370 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r6, 0x2 eors r0, r6 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 bne _080D6374 ldrb r4, [r4] b _080D63A4 .align 2, 0 -_080D6370: .4byte gBattleAnimPlayerMonIndex +_080D6370: .4byte gBattleAnimBankAttacker _080D6374: ldrb r0, [r4] adds r4, r6, 0 eors r4, r0 b _080D63A4 _080D637C: - ldr r0, _080D6398 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D6398 @ =gBattleAnimBankAttacker ldrb r0, [r0] movs r4, 0x2 eors r0, r4 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080D63A0 - ldr r0, _080D639C @ =gBattleAnimEnemyMonIndex + ldr r0, _080D639C @ =gBattleAnimBankTarget ldrb r0, [r0] eors r4, r0 b _080D63A4 .align 2, 0 -_080D6398: .4byte gBattleAnimPlayerMonIndex -_080D639C: .4byte gBattleAnimEnemyMonIndex +_080D6398: .4byte gBattleAnimBankAttacker +_080D639C: .4byte gBattleAnimBankTarget _080D63A0: - ldr r0, _080D63C4 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D63C4 @ =gBattleAnimBankTarget _080D63A2: ldrb r4, [r0] _080D63A4: @@ -24590,7 +24590,7 @@ _080D63A4: movs r1, 0x1 b _080D63DE .align 2, 0 -_080D63C4: .4byte gBattleAnimEnemyMonIndex +_080D63C4: .4byte gBattleAnimBankTarget _080D63C8: .4byte gBattleAnimArgs _080D63CC: adds r0, r4, 0 @@ -24698,7 +24698,7 @@ sub_80D648C: @ 80D648C strh r0, [r4, 0x2E] ldrh r0, [r4, 0x20] strh r0, [r4, 0x30] - ldr r6, _080D6504 @ =gBattleAnimEnemyMonIndex + ldr r6, _080D6504 @ =gBattleAnimBankTarget ldrb r0, [r6] movs r1, 0x2 bl sub_8077ABC @@ -24744,7 +24744,7 @@ sub_80D648C: @ 80D648C bx r0 .align 2, 0 _080D6500: .4byte gBattleAnimArgs -_080D6504: .4byte gBattleAnimEnemyMonIndex +_080D6504: .4byte gBattleAnimBankTarget _080D6508: .4byte 0x000003ff _080D650C: .4byte 0xfffffc00 _080D6510: .4byte sub_80D6514 @@ -24866,7 +24866,7 @@ sub_80D65DC: @ 80D65DC ands r0, r1 cmp r0, 0 beq _080D65FE - ldr r0, _080D664C @ =gBattleAnimEnemyMonIndex + ldr r0, _080D664C @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -24878,7 +24878,7 @@ _080D65FE: negs r0, r0 strh r0, [r1, 0x2] _080D6606: - ldr r5, _080D664C @ =gBattleAnimEnemyMonIndex + ldr r5, _080D664C @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -24909,7 +24909,7 @@ _080D6606: .align 2, 0 _080D6644: .4byte gMain _080D6648: .4byte 0x0000043d -_080D664C: .4byte gBattleAnimEnemyMonIndex +_080D664C: .4byte gBattleAnimBankTarget _080D6650: .4byte gBattleAnimArgs _080D6654: .4byte sub_80D658C thumb_func_end sub_80D65DC @@ -24928,13 +24928,13 @@ sub_80D6658: @ 80D6658 ands r0, r1 cmp r0, 0 beq _080D667C - ldr r0, _080D6678 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D6678 @ =gBattleAnimBankTarget b _080D667E .align 2, 0 _080D6674: .4byte gBattleAnimArgs -_080D6678: .4byte gBattleAnimEnemyMonIndex +_080D6678: .4byte gBattleAnimBankTarget _080D667C: - ldr r0, _080D670C @ =gBattleAnimPlayerMonIndex + ldr r0, _080D670C @ =gBattleAnimBankAttacker _080D667E: ldrb r6, [r0] ldr r0, _080D6710 @ =gMain @@ -25005,7 +25005,7 @@ _080D66A4: pop {r0} bx r0 .align 2, 0 -_080D670C: .4byte gBattleAnimPlayerMonIndex +_080D670C: .4byte gBattleAnimBankAttacker _080D6710: .4byte gMain _080D6714: .4byte 0x0000043d _080D6718: .4byte gBattleAnimArgs @@ -25126,7 +25126,7 @@ _080D67F6: str r0, [r4, 0x1C] ldr r1, _080D6818 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 @@ -25142,7 +25142,7 @@ sub_80D681C: @ 80D681C adds r5, r0, 0 lsls r5, 24 lsrs r5, 24 - ldr r6, _080D6864 @ =gBattleAnimEnemyMonIndex + ldr r6, _080D6864 @ =gBattleAnimBankTarget ldrb r0, [r6] movs r1, 0 bl sub_8077ABC @@ -25173,7 +25173,7 @@ sub_80D681C: @ 80D681C pop {r0} bx r0 .align 2, 0 -_080D6864: .4byte gBattleAnimEnemyMonIndex +_080D6864: .4byte gBattleAnimBankTarget _080D6868: .4byte gTasks _080D686C: .4byte gBattleAnimArgs _080D6870: .4byte sub_80D6874 @@ -25556,14 +25556,14 @@ sub_80D6B3C: @ 80D6B3C ldrsh r0, [r0, r1] cmp r0, 0 bne _080D6B68 - ldr r4, _080D6B64 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D6B64 @ =gBattleAnimBankAttacker b _080D6B6A .align 2, 0 _080D6B5C: .4byte gTasks _080D6B60: .4byte gBattleAnimArgs -_080D6B64: .4byte gBattleAnimPlayerMonIndex +_080D6B64: .4byte gBattleAnimBankAttacker _080D6B68: - ldr r4, _080D6BAC @ =gBattleAnimEnemyMonIndex + ldr r4, _080D6BAC @ =gBattleAnimBankTarget _080D6B6A: ldrb r0, [r4] movs r1, 0x2 @@ -25596,7 +25596,7 @@ _080D6B6A: pop {r0} bx r0 .align 2, 0 -_080D6BAC: .4byte gBattleAnimEnemyMonIndex +_080D6BAC: .4byte gBattleAnimBankTarget _080D6BB0: .4byte gBattleAnimArgs _080D6BB4: .4byte sub_80D6BB8 thumb_func_end sub_80D6B3C @@ -25681,7 +25681,7 @@ sub_80D6BB8: @ 80D6BB8 bl obj_translate_based_on_private_1_2_3_4 ldr r1, _080D6CB0 @ =sub_80D6D00 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080D6CB4 @ =sub_8078600 str r0, [r4, 0x1C] ldrh r0, [r5, 0x1A] @@ -25790,13 +25790,13 @@ sub_80D6D18: @ 80D6D18 ldrsh r0, [r0, r1] cmp r0, 0 bne _080D6D34 - ldr r4, _080D6D30 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D6D30 @ =gBattleAnimBankAttacker b _080D6D36 .align 2, 0 _080D6D2C: .4byte gBattleAnimArgs -_080D6D30: .4byte gBattleAnimPlayerMonIndex +_080D6D30: .4byte gBattleAnimBankAttacker _080D6D34: - ldr r4, _080D6D64 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D6D64 @ =gBattleAnimBankTarget _080D6D36: ldrb r0, [r4] movs r1, 0x2 @@ -25812,14 +25812,14 @@ _080D6D36: strh r0, [r5, 0x22] ldr r1, _080D6D68 @ =move_anim_8074EE0 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080D6D6C @ =sub_80785E4 str r0, [r5, 0x1C] pop {r4,r5} pop {r0} bx r0 .align 2, 0 -_080D6D64: .4byte gBattleAnimEnemyMonIndex +_080D6D64: .4byte gBattleAnimBankTarget _080D6D68: .4byte move_anim_8074EE0 _080D6D6C: .4byte sub_80785E4 thumb_func_end sub_80D6D18 @@ -25833,13 +25833,13 @@ sub_80D6D70: @ 80D6D70 ldrsh r0, [r0, r1] cmp r0, 0 bne _080D6D8C - ldr r4, _080D6D88 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D6D88 @ =gBattleAnimBankAttacker b _080D6D8E .align 2, 0 _080D6D84: .4byte gBattleAnimArgs -_080D6D88: .4byte gBattleAnimPlayerMonIndex +_080D6D88: .4byte gBattleAnimBankAttacker _080D6D8C: - ldr r4, _080D6DC8 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D6DC8 @ =gBattleAnimBankTarget _080D6D8E: ldrb r0, [r4] movs r1, 0x2 @@ -25860,14 +25860,14 @@ _080D6D8E: strh r0, [r5, 0x26] ldr r1, _080D6DD0 @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080D6DD4 @ =sub_8078600 str r0, [r5, 0x1C] pop {r4,r5} pop {r0} bx r0 .align 2, 0 -_080D6DC8: .4byte gBattleAnimEnemyMonIndex +_080D6DC8: .4byte gBattleAnimBankTarget _080D6DCC: .4byte gBattleAnimArgs _080D6DD0: .4byte move_anim_8072740 _080D6DD4: .4byte sub_8078600 @@ -25879,7 +25879,7 @@ sub_80D6DD8: @ 80D6DD8 adds r5, r0, 0 movs r1, 0x1 bl StartSpriteAffineAnim - ldr r4, _080D6E30 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D6E30 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -25893,7 +25893,7 @@ sub_80D6DD8: @ 80D6DD8 lsrs r0, 24 strh r0, [r5, 0x22] movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r5, 0x3A] @@ -25916,7 +25916,7 @@ _080D6E26: pop {r0} bx r0 .align 2, 0 -_080D6E30: .4byte gBattleAnimPlayerMonIndex +_080D6E30: .4byte gBattleAnimBankAttacker _080D6E34: .4byte sub_80D6E38 thumb_func_end sub_80D6DD8 @@ -26006,12 +26006,12 @@ _080D6ECE: b _080D7000 _080D6ED0: movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 movs r6, 0 strh r0, [r5, 0x26] - ldr r4, _080D6F04 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D6F04 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -26028,7 +26028,7 @@ _080D6ED0: movs r0, 0x2 b _080D6F12 .align 2, 0 -_080D6F04: .4byte gBattleAnimPlayerMonIndex +_080D6F04: .4byte gBattleAnimBankAttacker _080D6F08: .4byte 0x0000ffe0 _080D6F0C: movs r0, 0x20 @@ -26193,7 +26193,7 @@ _080D7034: _080D703A: b _080D718E _080D703C: - ldr r4, _080D707C @ =gBattleAnimPlayerMonIndex + ldr r4, _080D707C @ =gBattleAnimBankAttacker ldrb r0, [r4] bl GetBankSide lsls r0, 24 @@ -26225,7 +26225,7 @@ _080D7052: ldr r0, _080D7084 @ =0x0000fff0 b _080D70F0 .align 2, 0 -_080D707C: .4byte gBattleAnimPlayerMonIndex +_080D707C: .4byte gBattleAnimBankAttacker _080D7080: .4byte gBattleAnimArgs _080D7084: .4byte 0x0000fff0 _080D7088: @@ -26254,7 +26254,7 @@ _080D70B0: movs r0, 0x78 subs r0, r1 strh r0, [r5, 0xE] - ldr r4, _080D70E4 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D70E4 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x3 bl sub_8077ABC @@ -26273,7 +26273,7 @@ _080D70B0: strh r0, [r5, 0x10] b _080D7126 .align 2, 0 -_080D70E4: .4byte gBattleAnimEnemyMonIndex +_080D70E4: .4byte gBattleAnimBankTarget _080D70E8: ldr r0, _080D710C @ =0x0000fff0 strh r0, [r5, 0xE] @@ -26506,7 +26506,7 @@ sub_80D727C: @ 80D727C beq _080D72C0 b _080D72D4 _080D728E: - ldr r4, _080D72BC @ =gBattleAnimPlayerMonIndex + ldr r4, _080D72BC @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -26527,7 +26527,7 @@ _080D728E: strh r0, [r5, 0x2E] b _080D72D4 .align 2, 0 -_080D72BC: .4byte gBattleAnimPlayerMonIndex +_080D72BC: .4byte gBattleAnimBankAttacker _080D72C0: adds r0, r5, 0 adds r0, 0x3F @@ -26576,7 +26576,7 @@ _080D7308: .4byte _080D7444 .4byte _080D7454 _080D731C: - ldr r4, _080D73A0 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D73A0 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -26591,7 +26591,7 @@ _080D731C: strh r0, [r5, 0x16] movs r0, 0x4 strh r0, [r5, 0x18] - ldr r0, _080D73A4 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D73A4 @ =gBattleAnimBankTarget ldrb r0, [r0] movs r1, 0x2 bl sub_8077ABC @@ -26636,8 +26636,8 @@ _080D731C: adds r0, 0x1 b _080D7466 .align 2, 0 -_080D73A0: .4byte gBattleAnimPlayerMonIndex -_080D73A4: .4byte gBattleAnimEnemyMonIndex +_080D73A0: .4byte gBattleAnimBankAttacker +_080D73A4: .4byte gBattleAnimBankTarget _080D73A8: .4byte 0x0000ffff _080D73AC: ldrh r0, [r5, 0xA] @@ -26934,7 +26934,7 @@ _080D75C4: beq _080D7640 b _080D764E _080D75CA: - ldr r0, _080D7614 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D7614 @ =gBattleAnimBankTarget ldrb r0, [r0] movs r1, 0x1 bl sub_8077ABC @@ -26956,7 +26956,7 @@ _080D75E4: bgt _080D75E4 strh r1, [r5, 0x24] _080D75F4: - ldr r4, _080D7614 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D7614 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -26971,7 +26971,7 @@ _080D75F4: strh r0, [r5, 0x20] b _080D7638 .align 2, 0 -_080D7614: .4byte gBattleAnimEnemyMonIndex +_080D7614: .4byte gBattleAnimBankTarget _080D7618: ldrh r0, [r5, 0xA] adds r0, 0x1 @@ -27121,7 +27121,7 @@ sub_80D7704: @ 80D7704 ands r0, r2 orrs r0, r1 strh r0, [r5, 0x4] - ldr r4, _080D7814 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D7814 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -27134,7 +27134,7 @@ sub_80D7704: @ 80D7704 lsls r0, 24 lsrs r0, 24 mov r8, r0 - ldr r4, _080D7818 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D7818 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -27235,8 +27235,8 @@ _080D77DE: .align 2, 0 _080D780C: .4byte 0x000003ff _080D7810: .4byte 0xfffffc00 -_080D7814: .4byte gBattleAnimEnemyMonIndex -_080D7818: .4byte gBattleAnimPlayerMonIndex +_080D7814: .4byte gBattleAnimBankTarget +_080D7818: .4byte gBattleAnimBankAttacker _080D781C: .4byte gBattleAnimArgs _080D7820: lsls r1, r3, 16 @@ -27365,7 +27365,7 @@ sub_80D78EC: @ 80D78EC strh r0, [r4, 0x36] ldr r1, _080D7924 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r1, _080D7928 @ =sub_8078174 str r1, [r4, 0x1C] adds r0, r4, 0 @@ -27385,14 +27385,14 @@ sub_80D792C: @ 80D792C adds r4, r0, 0 movs r1, 0x1 bl sub_80787B0 - ldr r0, _080D7960 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D7960 @ =gBattleAnimBankTarget ldrb r0, [r0] movs r1, 0x2 bl sub_8077ABC lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x32] - ldr r0, _080D7964 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D7964 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -27405,8 +27405,8 @@ sub_80D792C: @ 80D792C strh r1, [r4, 0x32] b _080D7976 .align 2, 0 -_080D7960: .4byte gBattleAnimEnemyMonIndex -_080D7964: .4byte gBattleAnimPlayerMonIndex +_080D7960: .4byte gBattleAnimBankTarget +_080D7964: .4byte gBattleAnimBankAttacker _080D7968: .4byte gBattleAnimArgs _080D796C: ldr r0, _080D79A4 @ =gBattleAnimArgs @@ -27415,7 +27415,7 @@ _080D796C: adds r0, r1 strh r0, [r4, 0x32] _080D7976: - ldr r0, _080D79A8 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D79A8 @ =gBattleAnimBankTarget ldrb r0, [r0] movs r1, 0x3 bl sub_8077ABC @@ -27429,7 +27429,7 @@ _080D7976: strh r0, [r4, 0x2E] ldr r1, _080D79AC @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080D79B0 @ =sub_8078B34 str r0, [r4, 0x1C] pop {r4} @@ -27437,7 +27437,7 @@ _080D7976: bx r0 .align 2, 0 _080D79A4: .4byte gBattleAnimArgs -_080D79A8: .4byte gBattleAnimEnemyMonIndex +_080D79A8: .4byte gBattleAnimBankTarget _080D79AC: .4byte move_anim_8072740 _080D79B0: .4byte sub_8078B34 thumb_func_end sub_80D792C @@ -27458,7 +27458,7 @@ sub_80D79B4: @ 80D79B4 .align 2, 0 _080D79CC: .4byte gBattleAnimArgs _080D79D0: - ldr r0, _080D7A18 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D7A18 @ =gBattleAnimBankTarget ldrb r0, [r0] adds r2, r4, 0 adds r2, 0x20 @@ -27466,7 +27466,7 @@ _080D79D0: adds r3, 0x22 movs r1, 0x1 bl sub_807A3FC - ldr r0, _080D7A1C @ =gBattleAnimPlayerMonIndex + ldr r0, _080D7A1C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -27487,15 +27487,15 @@ _080D79F6: _080D7A06: ldr r1, _080D7A20 @ =sub_80D7A28 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080D7A24 @ =sub_80785E4 str r0, [r4, 0x1C] pop {r4,r5} pop {r0} bx r0 .align 2, 0 -_080D7A18: .4byte gBattleAnimEnemyMonIndex -_080D7A1C: .4byte gBattleAnimPlayerMonIndex +_080D7A18: .4byte gBattleAnimBankTarget +_080D7A1C: .4byte gBattleAnimBankAttacker _080D7A20: .4byte sub_80D7A28 _080D7A24: .4byte sub_80785E4 thumb_func_end sub_80D79B4 @@ -27551,7 +27551,7 @@ sub_80D7A64: @ 80D7A64 ldrsh r0, [r6, r1] cmp r0, 0 bne _080D7AB4 - ldr r4, _080D7AB0 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D7AB0 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -27569,9 +27569,9 @@ sub_80D7A64: @ 80D7A64 b _080D7AC6 .align 2, 0 _080D7AAC: .4byte gBattleAnimArgs -_080D7AB0: .4byte gBattleAnimEnemyMonIndex +_080D7AB0: .4byte gBattleAnimBankTarget _080D7AB4: - ldr r0, _080D7AE0 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D7AE0 @ =gBattleAnimBankTarget ldrb r0, [r0] adds r2, r5, 0 adds r2, 0x32 @@ -27580,7 +27580,7 @@ _080D7AB4: movs r1, 0x1 bl sub_807A3FC _080D7AC6: - ldr r0, _080D7AE4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D7AE4 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -27593,8 +27593,8 @@ _080D7AC6: strh r1, [r5, 0x32] b _080D7AF6 .align 2, 0 -_080D7AE0: .4byte gBattleAnimEnemyMonIndex -_080D7AE4: .4byte gBattleAnimPlayerMonIndex +_080D7AE0: .4byte gBattleAnimBankTarget +_080D7AE4: .4byte gBattleAnimBankAttacker _080D7AE8: .4byte gBattleAnimArgs _080D7AEC: ldr r0, _080D7B94 @ =gBattleAnimArgs @@ -27678,7 +27678,7 @@ _080D7B76: bge _080D7B76 str r6, [r5, 0x1C] adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 add sp, 0x10 pop {r4-r7} pop {r0} @@ -27706,7 +27706,7 @@ sub_80D7BA0: @ 80D7BA0 strh r5, [r4, 0x24] movs r0, 0x80 strh r0, [r4, 0x2E] - ldr r0, _080D7BFC @ =gBattleAnimPlayerMonIndex + ldr r0, _080D7BFC @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -27735,7 +27735,7 @@ _080D7BD0: pop {r0} bx r0 .align 2, 0 -_080D7BFC: .4byte gBattleAnimPlayerMonIndex +_080D7BFC: .4byte gBattleAnimBankAttacker _080D7C00: .4byte 0x0000ffec _080D7C04: .4byte sub_80D7C08 thumb_func_end sub_80D7BA0 @@ -27744,7 +27744,7 @@ _080D7C04: .4byte sub_80D7C08 sub_80D7C08: @ 80D7C08 push {r4,lr} adds r4, r0, 0 - ldr r0, _080D7C5C @ =gBattleAnimPlayerMonIndex + ldr r0, _080D7C5C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -27782,7 +27782,7 @@ _080D7C1E: strh r0, [r4, 0x38] b _080D7C82 .align 2, 0 -_080D7C5C: .4byte gBattleAnimPlayerMonIndex +_080D7C5C: .4byte gBattleAnimBankAttacker _080D7C60: .4byte 0x0000ffec _080D7C64: ldrh r0, [r4, 0x24] @@ -27866,7 +27866,7 @@ sub_80D7CD4: @ 80D7CD4 ldrsh r0, [r1, r2] cmp r0, 0 bne _080D7D20 - ldr r4, _080D7D1C @ =gBattleAnimEnemyMonIndex + ldr r4, _080D7D1C @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -27882,9 +27882,9 @@ sub_80D7CD4: @ 80D7CD4 b _080D7D32 .align 2, 0 _080D7D18: .4byte gBattleAnimArgs -_080D7D1C: .4byte gBattleAnimEnemyMonIndex +_080D7D1C: .4byte gBattleAnimBankTarget _080D7D20: - ldr r0, _080D7D50 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D7D50 @ =gBattleAnimBankTarget ldrb r0, [r0] adds r2, r5, 0 adds r2, 0x32 @@ -27893,7 +27893,7 @@ _080D7D20: movs r1, 0x1 bl sub_807A3FC _080D7D32: - ldr r0, _080D7D54 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D7D54 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -27907,8 +27907,8 @@ _080D7D32: adds r1, r0, 0 b _080D7D66 .align 2, 0 -_080D7D50: .4byte gBattleAnimEnemyMonIndex -_080D7D54: .4byte gBattleAnimPlayerMonIndex +_080D7D50: .4byte gBattleAnimBankTarget +_080D7D54: .4byte gBattleAnimBankAttacker _080D7D58: .4byte gBattleAnimArgs _080D7D5C: ldr r1, _080D7E10 @ =gBattleAnimArgs @@ -28088,7 +28088,7 @@ sub_80D7E88: @ 80D7E88 .align 2, 0 _080D7EA8: .4byte gBattleAnimArgs _080D7EAC: - ldr r0, _080D7EEC @ =gBattleAnimEnemyMonIndex + ldr r0, _080D7EEC @ =gBattleAnimBankTarget ldrb r0, [r0] adds r2, r4, 0 adds r2, 0x20 @@ -28096,7 +28096,7 @@ _080D7EAC: adds r3, 0x22 movs r1, 0 bl sub_807A3FC - ldr r0, _080D7EF0 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D7EF0 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -28120,8 +28120,8 @@ _080D7EE2: strh r0, [r4, 0x2E] b _080D7F08 .align 2, 0 -_080D7EEC: .4byte gBattleAnimEnemyMonIndex -_080D7EF0: .4byte gBattleAnimPlayerMonIndex +_080D7EEC: .4byte gBattleAnimBankTarget +_080D7EF0: .4byte gBattleAnimBankAttacker _080D7EF4: adds r0, r4, 0 adds r0, 0x3F @@ -28158,7 +28158,7 @@ sub_80D7F10: @ 80D7F10 .align 2, 0 _080D7F30: .4byte gBattleAnimArgs _080D7F34: - ldr r4, _080D7F5C @ =gBattleAnimPlayerMonIndex + ldr r4, _080D7F5C @ =gBattleAnimBankAttacker ldrb r0, [r4] adds r2, r5, 0 adds r2, 0x20 @@ -28176,7 +28176,7 @@ _080D7F34: subs r0, r1 b _080D7F66 .align 2, 0 -_080D7F5C: .4byte gBattleAnimPlayerMonIndex +_080D7F5C: .4byte gBattleAnimBankAttacker _080D7F60: ldrh r0, [r6] ldrh r1, [r5, 0x20] @@ -28189,11 +28189,11 @@ _080D7F66: adds r0, r1 strh r0, [r5, 0x22] _080D7F72: - ldr r0, _080D7F7C @ =gBattleAnimPlayerMonIndex + ldr r0, _080D7F7C @ =gBattleAnimBankAttacker b _080D7FD0 .align 2, 0 _080D7F78: .4byte gBattleAnimArgs -_080D7F7C: .4byte gBattleAnimPlayerMonIndex +_080D7F7C: .4byte gBattleAnimBankAttacker _080D7F80: movs r1, 0xA ldrsh r0, [r6, r1] @@ -28204,7 +28204,7 @@ _080D7F80: bl sub_8078764 b _080D7FCE _080D7F92: - ldr r4, _080D7FB8 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D7FB8 @ =gBattleAnimBankTarget ldrb r0, [r4] adds r2, r5, 0 adds r2, 0x20 @@ -28222,7 +28222,7 @@ _080D7F92: subs r0, r1 b _080D7FC2 .align 2, 0 -_080D7FB8: .4byte gBattleAnimEnemyMonIndex +_080D7FB8: .4byte gBattleAnimBankTarget _080D7FBC: ldrh r0, [r6] ldrh r1, [r5, 0x20] @@ -28235,7 +28235,7 @@ _080D7FC2: adds r0, r1 strh r0, [r5, 0x22] _080D7FCE: - ldr r0, _080D7FF0 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D7FF0 @ =gBattleAnimBankTarget _080D7FD0: ldrb r0, [r0] strh r0, [r5, 0x3C] @@ -28253,12 +28253,12 @@ _080D7FE8: b _080D7FF6 .align 2, 0 _080D7FEC: .4byte gBattleAnimArgs -_080D7FF0: .4byte gBattleAnimEnemyMonIndex +_080D7FF0: .4byte gBattleAnimBankTarget _080D7FF4: movs r0, 0x40 _080D7FF6: strh r0, [r5, 0x3A] - ldr r0, _080D803C @ =gBattleAnimEnemyMonIndex + ldr r0, _080D803C @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -28291,7 +28291,7 @@ _080D800C: pop {r0} bx r0 .align 2, 0 -_080D803C: .4byte gBattleAnimEnemyMonIndex +_080D803C: .4byte gBattleAnimBankTarget _080D8040: .4byte gBattleAnimArgs _080D8044: .4byte sub_80D8048 thumb_func_end sub_80D7F10 @@ -28742,7 +28742,7 @@ _080D83DC: .4byte REG_BLDCNT sub_80D83E0: @ 80D83E0 push {r4,r5,lr} adds r4, r0, 0 - ldr r5, _080D840C @ =gBattleAnimPlayerMonIndex + ldr r5, _080D840C @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -28761,7 +28761,7 @@ sub_80D83E0: @ 80D83E0 pop {r0} bx r0 .align 2, 0 -_080D840C: .4byte gBattleAnimPlayerMonIndex +_080D840C: .4byte gBattleAnimBankAttacker _080D8410: .4byte sub_807941C thumb_func_end sub_80D83E0 @@ -29129,13 +29129,13 @@ sub_80D8700: @ 80D8700 ldr r6, _080D87E8 @ =gBattleAnimArgs ldrh r0, [r6] strh r0, [r5, 0x2E] - ldr r0, _080D87EC @ =gBattleAnimPlayerMonIndex + ldr r0, _080D87EC @ =gBattleAnimBankAttacker mov r8, r0 ldrb r0, [r0] movs r1, 0x2 bl sub_8077ABC adds r4, r0, 0 - ldr r7, _080D87F0 @ =gBattleAnimEnemyMonIndex + ldr r7, _080D87F0 @ =gBattleAnimBankTarget ldrb r0, [r7] movs r1, 0x2 bl sub_8077ABC @@ -29178,7 +29178,7 @@ _080D8734: cmp r0, 0 bne _080D8790 movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId ldr r2, _080D87F8 @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -29196,7 +29196,7 @@ _080D8790: movs r0, 0x1 strh r0, [r5, 0x3A] _080D8794: - ldr r4, _080D87EC @ =gBattleAnimPlayerMonIndex + ldr r4, _080D87EC @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -29218,7 +29218,7 @@ _080D8794: ldrh r1, [r5, 0x20] adds r0, r1 strh r0, [r5, 0x30] - ldr r4, _080D87F0 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D87F0 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -29236,8 +29236,8 @@ _080D8794: b _080D8824 .align 2, 0 _080D87E8: .4byte gBattleAnimArgs -_080D87EC: .4byte gBattleAnimPlayerMonIndex -_080D87F0: .4byte gBattleAnimEnemyMonIndex +_080D87EC: .4byte gBattleAnimBankAttacker +_080D87F0: .4byte gBattleAnimBankTarget _080D87F4: .4byte gBanksBySide _080D87F8: .4byte gSprites _080D87FC: @@ -29245,7 +29245,7 @@ _080D87FC: ldrh r1, [r5, 0x20] adds r0, r1 strh r0, [r5, 0x30] - ldr r4, _080D886C @ =gBattleAnimEnemyMonIndex + ldr r4, _080D886C @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -29295,7 +29295,7 @@ _080D8858: pop {r0} bx r0 .align 2, 0 -_080D886C: .4byte gBattleAnimEnemyMonIndex +_080D886C: .4byte gBattleAnimBankTarget _080D8870: .4byte sub_80D8874 thumb_func_end sub_80D8700 @@ -29357,7 +29357,7 @@ _080D88C8: _080D88D6: movs r5, 0x50 strh r5, [r4, 0x2E] - ldr r6, _080D8928 @ =gBattleAnimEnemyMonIndex + ldr r6, _080D8928 @ =gBattleAnimBankTarget ldrb r0, [r6] movs r1, 0 bl sub_8077ABC @@ -29396,7 +29396,7 @@ _080D88D6: strh r0, [r4, 0x38] b _080D893A .align 2, 0 -_080D8928: .4byte gBattleAnimEnemyMonIndex +_080D8928: .4byte gBattleAnimBankTarget _080D892C: .4byte gMain _080D8930: .4byte 0x0000043d _080D8934: .4byte gBanksBySide @@ -29545,7 +29545,7 @@ _080D8A12: cmp r0, 0 beq _080D8A78 ldr r1, _080D8A70 @ =gBanksBySide - ldr r0, _080D8A74 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D8A74 @ =gBattleAnimBankTarget ldrb r0, [r0] adds r0, r1 ldrb r1, [r0] @@ -29560,7 +29560,7 @@ _080D8A12: _080D8A68: .4byte gMain _080D8A6C: .4byte 0x0000043d _080D8A70: .4byte gBanksBySide -_080D8A74: .4byte gBattleAnimEnemyMonIndex +_080D8A74: .4byte gBattleAnimBankTarget _080D8A78: ldr r0, _080D8A90 @ =0x0000fff0 _080D8A7A: @@ -29764,7 +29764,7 @@ sub_80D8BA8: @ 80D8BA8 lsls r0, 24 lsrs r5, r0, 24 adds r0, r5, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080D8C94 @@ -30089,7 +30089,7 @@ _080D8E6A: ldr r6, _080D8ED0 @ =gBattleAnimArgs ldrh r0, [r6, 0x8] strh r0, [r5, 0x2E] - ldr r0, _080D8ED4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D8ED4 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -30099,7 +30099,7 @@ _080D8E6A: negs r0, r0 strh r0, [r6, 0x4] _080D8E92: - ldr r4, _080D8ED8 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D8ED8 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -30128,8 +30128,8 @@ _080D8E92: .align 2, 0 _080D8ECC: .4byte gDisableStructMoveAnim _080D8ED0: .4byte gBattleAnimArgs -_080D8ED4: .4byte gBattleAnimPlayerMonIndex -_080D8ED8: .4byte gBattleAnimEnemyMonIndex +_080D8ED4: .4byte gBattleAnimBankAttacker +_080D8ED8: .4byte gBattleAnimBankTarget _080D8EDC: .4byte sub_80D8EE0 thumb_func_end unc_080B06FC @@ -30148,7 +30148,7 @@ sub_80D8EE0: @ 80D8EE0 str r0, [r4, 0x1C] ldr r1, _080D8F0C @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 _080D8F02: pop {r4} pop {r0} @@ -30296,7 +30296,7 @@ unc_080B08A0: @ 80D8FF0 str r0, [r4, 0x1C] ldr r1, _080D9028 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 @@ -30315,7 +30315,7 @@ sub_80D902C: @ 80D902C ldrsh r0, [r4, r1] cmp r0, 0x1 bne _080D9054 - ldr r0, _080D9074 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D9074 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -30341,7 +30341,7 @@ _080D9054: bx r0 .align 2, 0 _080D9070: .4byte gBattleAnimArgs -_080D9074: .4byte gBattleAnimPlayerMonIndex +_080D9074: .4byte gBattleAnimBankAttacker thumb_func_end sub_80D902C thumb_func_start sub_80D9078 @@ -30398,7 +30398,7 @@ _080D90D0: str r0, [r5, 0x1C] ldr r1, _080D90F0 @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 @@ -30421,13 +30421,13 @@ sub_80D90F4: @ 80D90F4 mov r9, r0 cmp r1, 0 bne _080D9118 - ldr r0, _080D9114 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D9114 @ =gBattleAnimBankAttacker b _080D911A .align 2, 0 _080D9110: .4byte gBattleAnimArgs -_080D9114: .4byte gBattleAnimPlayerMonIndex +_080D9114: .4byte gBattleAnimBankAttacker _080D9118: - ldr r0, _080D9260 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D9260 @ =gBattleAnimBankTarget _080D911A: ldrb r0, [r0] mov r8, r0 @@ -30584,7 +30584,7 @@ _080D9250: pop {r0} bx r0 .align 2, 0 -_080D9260: .4byte gBattleAnimEnemyMonIndex +_080D9260: .4byte gBattleAnimBankTarget _080D9264: .4byte gBanksBySide _080D9268: .4byte 0xfff00000 _080D926C: .4byte gBattleAnimSpriteTemplate_83DB4A8 @@ -30675,7 +30675,7 @@ _080D9306: str r0, [r4, 0x1C] ldr r1, _080D9324 @ =sub_80D9328 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4} pop {r0} bx r0 @@ -30716,7 +30716,7 @@ sub_80D9328: @ 80D9328 str r0, [r5, 0x1C] ldr r1, _080D9374 @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 _080D9368: pop {r4-r6} pop {r0} @@ -30730,10 +30730,10 @@ _080D9374: .4byte move_anim_8072740 sub_80D9378: @ 80D9378 push {r4-r6,lr} adds r6, r0, 0 - ldr r0, _080D93F4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D93F4 @ =gBattleAnimBankAttacker ldrb r1, [r0] movs r0, 0x2 - ldr r2, _080D93F8 @ =gBattleAnimEnemyMonIndex + ldr r2, _080D93F8 @ =gBattleAnimBankTarget eors r0, r1 ldrb r1, [r2] cmp r0, r1 @@ -30753,7 +30753,7 @@ _080D93A4: adds r0, r6, 0 movs r1, 0x1 bl sub_8078764 - ldr r0, _080D93F4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D93F4 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -30789,8 +30789,8 @@ _080D93C2: pop {r0} bx r0 .align 2, 0 -_080D93F4: .4byte gBattleAnimPlayerMonIndex -_080D93F8: .4byte gBattleAnimEnemyMonIndex +_080D93F4: .4byte gBattleAnimBankAttacker +_080D93F8: .4byte gBattleAnimBankTarget _080D93FC: .4byte gBattleAnimArgs _080D9400: .4byte sub_80D9404 thumb_func_end sub_80D9378 @@ -30842,7 +30842,7 @@ sub_80D943C: @ 80D943C str r0, [r4, 0x1C] ldr r1, _080D9470 @ =sub_80D9474 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 @@ -30870,7 +30870,7 @@ sub_80D9474: @ 80D9474 str r0, [r4, 0x1C] ldr r1, _080D94A4 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4} pop {r0} bx r0 @@ -30913,7 +30913,7 @@ sub_80D94CC: @ 80D94CC bne _080D9510 movs r0, 0x6 strh r0, [r5, 0x2E] - ldr r4, _080D9518 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D9518 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -30930,13 +30930,13 @@ sub_80D94CC: @ 80D94CC str r0, [r5, 0x1C] ldr r1, _080D9520 @ =sub_80D9524 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 _080D9510: pop {r4,r5} pop {r0} bx r0 .align 2, 0 -_080D9518: .4byte gBattleAnimEnemyMonIndex +_080D9518: .4byte gBattleAnimBankTarget _080D951C: .4byte sub_8078B34 _080D9520: .4byte sub_80D9524 thumb_func_end sub_80D94CC @@ -30949,7 +30949,7 @@ sub_80D9524: @ 80D9524 ldr r1, _080D9538 @ =sub_80782D8 str r1, [r0, 0x1C] ldr r1, _080D953C @ =move_anim_8072740 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r0} bx r0 .align 2, 0 @@ -31040,13 +31040,13 @@ sub_80D95D0: @ 80D95D0 ldrsh r0, [r0, r1] cmp r0, 0 bne _080D95EC - ldr r4, _080D95E8 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D95E8 @ =gBattleAnimBankAttacker b _080D95EE .align 2, 0 _080D95E4: .4byte gBattleAnimArgs -_080D95E8: .4byte gBattleAnimPlayerMonIndex +_080D95E8: .4byte gBattleAnimBankAttacker _080D95EC: - ldr r4, _080D9634 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D9634 @ =gBattleAnimBankTarget _080D95EE: ldrb r0, [r4] movs r1, 0 @@ -31082,7 +31082,7 @@ _080D95EE: pop {r0} bx r0 .align 2, 0 -_080D9634: .4byte gBattleAnimEnemyMonIndex +_080D9634: .4byte gBattleAnimBankTarget _080D9638: .4byte gBattleAnimArgs _080D963C: .4byte sub_80D9640 thumb_func_end sub_80D95D0 @@ -31165,7 +31165,7 @@ sub_80D96B8: @ 80D96B8 ldrsh r0, [r6, r1] cmp r0, 0 bne _080D96E4 - ldr r4, _080D96E0 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D96E0 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -31176,9 +31176,9 @@ sub_80D96B8: @ 80D96B8 b _080D96F6 .align 2, 0 _080D96DC: .4byte gBattleAnimArgs -_080D96E0: .4byte gBattleAnimPlayerMonIndex +_080D96E0: .4byte gBattleAnimBankAttacker _080D96E4: - ldr r4, _080D9740 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D9740 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -31224,7 +31224,7 @@ _080D96F6: beq _080D975A b _080D978A .align 2, 0 -_080D9740: .4byte gBattleAnimEnemyMonIndex +_080D9740: .4byte gBattleAnimBankTarget _080D9744: .4byte gBattleAnimArgs _080D9748: .4byte 0x000003ff _080D974C: .4byte 0xfffffc00 @@ -31322,7 +31322,7 @@ sub_80D97CC: @ 80D97CC lsls r0, 24 lsrs r0, 24 strh r0, [r5, 0x22] - ldr r0, _080D9820 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D9820 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl sub_8079ED4 movs r1, 0x3 @@ -31334,15 +31334,15 @@ sub_80D97CC: @ 80D97CC ands r0, r2 orrs r0, r1 strb r0, [r5, 0x5] - ldr r0, _080D9824 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D9824 @ =gBattleAnimBankTarget b _080D9844 .align 2, 0 _080D9818: .4byte gBattleAnimArgs _080D981C: .4byte gBankAttacker -_080D9820: .4byte gBattleAnimPlayerMonIndex -_080D9824: .4byte gBattleAnimEnemyMonIndex +_080D9820: .4byte gBattleAnimBankAttacker +_080D9824: .4byte gBattleAnimBankTarget _080D9828: - ldr r0, _080D9860 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D9860 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079ED4 movs r1, 0x3 @@ -31354,7 +31354,7 @@ _080D9828: ands r0, r2 orrs r0, r1 strb r0, [r5, 0x5] - ldr r0, _080D9864 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D9864 @ =gBattleAnimBankAttacker _080D9844: ldrb r0, [r0] strh r0, [r5, 0x3C] @@ -31370,8 +31370,8 @@ _080D9844: pop {r0} bx r0 .align 2, 0 -_080D9860: .4byte gBattleAnimEnemyMonIndex -_080D9864: .4byte gBattleAnimPlayerMonIndex +_080D9860: .4byte gBattleAnimBankTarget +_080D9864: .4byte gBattleAnimBankAttacker _080D9868: .4byte sub_80D986C thumb_func_end sub_80D97CC @@ -31415,7 +31415,7 @@ sub_80D986C: @ 80D986C bl obj_translate_based_on_private_1_2_3_4 ldr r1, _080D98D0 @ =move_anim_8074EE0 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080D98D4 @ =sub_8078BB8 str r0, [r4, 0x1C] _080D98C6: @@ -31515,7 +31515,7 @@ _080D997E: strh r0, [r7, 0x2E] b _080D99DC _080D9986: - ldr r4, _080D99E8 @ =gBattleAnimPlayerMonIndex + ldr r4, _080D99E8 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -31528,7 +31528,7 @@ _080D9986: adds r5, r0, 0 lsls r5, 24 lsrs r5, 24 - ldr r2, _080D99EC @ =gBattleAnimEnemyMonIndex + ldr r2, _080D99EC @ =gBattleAnimBankTarget mov r8, r2 ldrb r0, [r2] movs r1, 0x2 @@ -31561,8 +31561,8 @@ _080D99DC: pop {r0} bx r0 .align 2, 0 -_080D99E8: .4byte gBattleAnimPlayerMonIndex -_080D99EC: .4byte gBattleAnimEnemyMonIndex +_080D99E8: .4byte gBattleAnimBankAttacker +_080D99EC: .4byte gBattleAnimBankTarget _080D99F0: .4byte sub_80D99F4 thumb_func_end sub_80D9934 @@ -31627,19 +31627,19 @@ sub_80D9A38: @ 80D9A38 lsls r0, 24 lsrs r0, 24 strh r0, [r5, 0x22] - ldr r0, _080D9A74 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D9A74 @ =gBattleAnimBankTarget ldrb r4, [r0] - ldr r0, _080D9A78 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D9A78 @ =gBattleAnimBankAttacker b _080D9A82 .align 2, 0 _080D9A6C: .4byte gBattleAnimArgs _080D9A70: .4byte gBankAttacker -_080D9A74: .4byte gBattleAnimEnemyMonIndex -_080D9A78: .4byte gBattleAnimPlayerMonIndex +_080D9A74: .4byte gBattleAnimBankTarget +_080D9A78: .4byte gBattleAnimBankAttacker _080D9A7C: - ldr r0, _080D9AB4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D9AB4 @ =gBattleAnimBankAttacker ldrb r4, [r0] - ldr r0, _080D9AB8 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D9AB8 @ =gBattleAnimBankTarget _080D9A82: ldrb r0, [r0] bl sub_8079ED4 @@ -31665,8 +31665,8 @@ _080D9A82: subs r0, 0x47 b _080D9AD6 .align 2, 0 -_080D9AB4: .4byte gBattleAnimPlayerMonIndex -_080D9AB8: .4byte gBattleAnimEnemyMonIndex +_080D9AB4: .4byte gBattleAnimBankAttacker +_080D9AB8: .4byte gBattleAnimBankTarget _080D9ABC: adds r0, r4, 0 bl GetBankSide @@ -31707,7 +31707,7 @@ _080D9ADC: bl obj_translate_based_on_private_1_2_3_4 ldr r1, _080D9B1C @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080D9B20 @ =sub_8078BB8 str r0, [r5, 0x1C] pop {r4,r5} @@ -31743,7 +31743,7 @@ _080D9B3A: sub_80D9B48: @ 80D9B48 push {r4-r6,lr} adds r5, r0, 0 - ldr r4, _080D9BC4 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D9BC4 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -31802,7 +31802,7 @@ _080D9BA6: pop {r0} bx r0 .align 2, 0 -_080D9BC4: .4byte gBattleAnimEnemyMonIndex +_080D9BC4: .4byte gBattleAnimBankTarget _080D9BC8: .4byte gBattleAnimArgs _080D9BCC: .4byte gUnknown_0202F7C4 _080D9BD0: .4byte sub_80D9B24 @@ -31837,7 +31837,7 @@ _080D9BF8: bl StartSpriteAnim b _080D9C22 _080D9C0C: - ldr r0, _080D9C34 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D9C34 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -31851,12 +31851,12 @@ _080D9C22: str r0, [r4, 0x1C] ldr r1, _080D9C3C @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4} pop {r0} bx r0 .align 2, 0 -_080D9C34: .4byte gBattleAnimPlayerMonIndex +_080D9C34: .4byte gBattleAnimBankAttacker _080D9C38: .4byte sub_8078600 _080D9C3C: .4byte move_anim_8072740 thumb_func_end sub_80D9BD4 @@ -31952,7 +31952,7 @@ _080D9CDE: ldrh r1, [r4, 0x1C] adds r0, r1 strh r0, [r4, 0x1C] - ldr r0, _080D9D0C @ =gBattleAnimEnemyMonIndex + ldr r0, _080D9D0C @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -31968,7 +31968,7 @@ _080D9CDE: adds r7, r1, 0 b _080D9D24 .align 2, 0 -_080D9D0C: .4byte gBattleAnimEnemyMonIndex +_080D9D0C: .4byte gBattleAnimBankTarget _080D9D10: .4byte gUnknown_030041B0 _080D9D14: ldr r2, _080D9D64 @ =gUnknown_030041B0 @@ -32034,7 +32034,7 @@ _080D9D86: bl sub_80787B0 ldrh r0, [r4, 0x4] strh r0, [r5, 0x2E] - ldr r4, _080D9DC8 @ =gBattleAnimEnemyMonIndex + ldr r4, _080D9DC8 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -32058,7 +32058,7 @@ _080D9D86: bx r0 .align 2, 0 _080D9DC4: .4byte gBattleAnimArgs -_080D9DC8: .4byte gBattleAnimEnemyMonIndex +_080D9DC8: .4byte gBattleAnimBankTarget _080D9DCC: .4byte 0x0000ffe2 _080D9DD0: .4byte sub_80D9DD4 thumb_func_end sub_80D9D70 @@ -32096,7 +32096,7 @@ _080D9E08: adds r0, r4, 0 movs r1, 0x1 bl sub_80787B0 - ldr r0, _080D9E68 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D9E68 @ =gBattleAnimBankTarget ldrb r0, [r0] mov r6, sp adds r6, 0x2 @@ -32104,7 +32104,7 @@ _080D9E08: mov r2, sp adds r3, r6, 0 bl sub_807A3FC - ldr r0, _080D9E6C @ =gBattleAnimPlayerMonIndex + ldr r0, _080D9E6C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -32137,8 +32137,8 @@ _080D9E36: bx r0 .align 2, 0 _080D9E64: .4byte gBattleAnimArgs -_080D9E68: .4byte gBattleAnimEnemyMonIndex -_080D9E6C: .4byte gBattleAnimPlayerMonIndex +_080D9E68: .4byte gBattleAnimBankTarget +_080D9E6C: .4byte gBattleAnimBankAttacker _080D9E70: .4byte 0x0000ffe2 _080D9E74: .4byte sub_80D9E78 thumb_func_end sub_80D9DF0 @@ -32229,7 +32229,7 @@ _080D9F0E: sub_80D9F14: @ 80D9F14 push {r4,lr} adds r4, r0, 0 - ldr r0, _080D9F74 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D9F74 @ =gBattleAnimBankTarget ldrb r0, [r0] adds r2, r4, 0 adds r2, 0x20 @@ -32237,7 +32237,7 @@ sub_80D9F14: @ 80D9F14 adds r3, 0x22 movs r1, 0x1 bl sub_807A3FC - ldr r0, _080D9F78 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D9F78 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -32268,13 +32268,13 @@ _080D9F40: str r0, [r4, 0x1C] ldr r1, _080D9F84 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4} pop {r0} bx r0 .align 2, 0 -_080D9F74: .4byte gBattleAnimEnemyMonIndex -_080D9F78: .4byte gBattleAnimPlayerMonIndex +_080D9F74: .4byte gBattleAnimBankTarget +_080D9F78: .4byte gBattleAnimBankAttacker _080D9F7C: .4byte gBattleAnimArgs _080D9F80: .4byte sub_8078B34 _080D9F84: .4byte move_anim_8072740 @@ -32296,7 +32296,7 @@ sub_80D9F88: @ 80D9F88 .align 2, 0 _080D9FA0: .4byte gBattleAnimArgs _080D9FA4: - ldr r0, _080D9FE4 @ =gBattleAnimEnemyMonIndex + ldr r0, _080D9FE4 @ =gBattleAnimBankTarget ldrb r0, [r0] adds r2, r4, 0 adds r2, 0x20 @@ -32304,7 +32304,7 @@ _080D9FA4: adds r3, 0x22 movs r1, 0x1 bl sub_807A3FC - ldr r0, _080D9FE8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080D9FE8 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -32329,8 +32329,8 @@ _080D9FDA: pop {r0} bx r0 .align 2, 0 -_080D9FE4: .4byte gBattleAnimEnemyMonIndex -_080D9FE8: .4byte gBattleAnimPlayerMonIndex +_080D9FE4: .4byte gBattleAnimBankTarget +_080D9FE8: .4byte gBattleAnimBankAttacker _080D9FEC: .4byte sub_80D9FF0 thumb_func_end sub_80D9F88 @@ -32538,7 +32538,7 @@ sub_80DA16C: @ 80DA16C adds r6, r0, 0 movs r1, 0x1 bl sub_80787B0 - ldr r0, _080DA1D8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DA1D8 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -32554,7 +32554,7 @@ _080DA18C: strh r0, [r6, 0x2E] ldrh r0, [r6, 0x20] strh r0, [r6, 0x30] - ldr r5, _080DA1E0 @ =gBattleAnimEnemyMonIndex + ldr r5, _080DA1E0 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -32579,14 +32579,14 @@ _080DA18C: str r0, [r6, 0x1C] ldr r1, _080DA1E8 @ =sub_80DA1EC adds r0, r6, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4-r6} pop {r0} bx r0 .align 2, 0 -_080DA1D8: .4byte gBattleAnimPlayerMonIndex +_080DA1D8: .4byte gBattleAnimBankAttacker _080DA1DC: .4byte gBattleAnimArgs -_080DA1E0: .4byte gBattleAnimEnemyMonIndex +_080DA1E0: .4byte gBattleAnimBankTarget _080DA1E4: .4byte sub_80785E4 _080DA1E8: .4byte sub_80DA1EC thumb_func_end sub_80DA16C @@ -32611,7 +32611,7 @@ _080DA200: sub_80DA208: @ 80DA208 push {r4,r5,lr} adds r5, r0, 0 - ldr r4, _080DA2A4 @ =gBattleAnimPlayerMonIndex + ldr r4, _080DA2A4 @ =gBattleAnimBankAttacker ldrb r0, [r4] bl GetBankSide lsls r0, 24 @@ -32668,7 +32668,7 @@ _080DA24C: ldrsh r0, [r2, r3] cmp r0, 0 bne _080DA2B0 - ldr r4, _080DA2AC @ =gBattleAnimEnemyMonIndex + ldr r4, _080DA2AC @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -32683,11 +32683,11 @@ _080DA24C: strh r0, [r5, 0x36] b _080DA2C2 .align 2, 0 -_080DA2A4: .4byte gBattleAnimPlayerMonIndex +_080DA2A4: .4byte gBattleAnimBankAttacker _080DA2A8: .4byte gBattleAnimArgs -_080DA2AC: .4byte gBattleAnimEnemyMonIndex +_080DA2AC: .4byte gBattleAnimBankTarget _080DA2B0: - ldr r0, _080DA2F0 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DA2F0 @ =gBattleAnimBankTarget ldrb r0, [r0] adds r2, r5, 0 adds r2, 0x32 @@ -32709,7 +32709,7 @@ _080DA2C2: str r0, [r5, 0x1C] ldr r1, _080DA2FC @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldrb r1, [r4, 0xA] adds r0, r5, 0 bl SeekSpriteAnim @@ -32717,7 +32717,7 @@ _080DA2C2: pop {r0} bx r0 .align 2, 0 -_080DA2F0: .4byte gBattleAnimEnemyMonIndex +_080DA2F0: .4byte gBattleAnimBankTarget _080DA2F4: .4byte gBattleAnimArgs _080DA2F8: .4byte sub_8078B34 _080DA2FC: .4byte move_anim_8072740 @@ -32737,7 +32737,7 @@ sub_80DA300: @ 80DA300 ldr r0, _080DA340 @ =sub_80DA348 str r0, [r4, 0x1C] movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId ldr r2, _080DA344 @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -32802,7 +32802,7 @@ _080DA386: sub_80DA38C: @ 80DA38C push {r4,r5,lr} adds r5, r0, 0 - ldr r0, _080DA3B4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DA3B4 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -32818,7 +32818,7 @@ sub_80DA38C: @ 80DA38C bl StartSpriteAffineAnim b _080DA3C2 .align 2, 0 -_080DA3B4: .4byte gBattleAnimPlayerMonIndex +_080DA3B4: .4byte gBattleAnimBankAttacker _080DA3B8: .4byte 0x0000ffe0 _080DA3BC: ldr r0, _080DA400 @ =0x0000ffe0 @@ -32830,7 +32830,7 @@ _080DA3C2: strh r0, [r5, 0x2E] ldrh r0, [r5, 0x20] strh r0, [r5, 0x30] - ldr r4, _080DA408 @ =gBattleAnimEnemyMonIndex + ldr r4, _080DA408 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -32855,7 +32855,7 @@ _080DA3C2: .align 2, 0 _080DA400: .4byte 0x0000ffe0 _080DA404: .4byte gBattleAnimArgs -_080DA408: .4byte gBattleAnimEnemyMonIndex +_080DA408: .4byte gBattleAnimBankTarget _080DA40C: .4byte sub_80DA410 thumb_func_end sub_80DA38C @@ -32900,7 +32900,7 @@ _080DA438: ble _080DA480 _080DA45A: movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId ldr r2, _080DA488 @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -32980,13 +32980,13 @@ sub_80DA4D8: @ 80DA4D8 ands r0, r1 cmp r0, 0 beq _080DA500 - ldr r0, _080DA4FC @ =gBattleAnimPlayerMonIndex + ldr r0, _080DA4FC @ =gBattleAnimBankAttacker b _080DA502 .align 2, 0 _080DA4F8: .4byte gBattleAnimArgs -_080DA4FC: .4byte gBattleAnimPlayerMonIndex +_080DA4FC: .4byte gBattleAnimBankAttacker _080DA500: - ldr r0, _080DA5B0 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DA5B0 @ =gBattleAnimBankTarget _080DA502: ldrb r6, [r0] adds r0, r6, 0 @@ -33073,7 +33073,7 @@ _080DA518: strb r1, [r7, 0x5] b _080DA5D8 .align 2, 0 -_080DA5B0: .4byte gBattleAnimEnemyMonIndex +_080DA5B0: .4byte gBattleAnimBankTarget _080DA5B4: .4byte gBattleAnimArgs _080DA5B8: .4byte gMain _080DA5BC: .4byte 0x0000043d @@ -34081,7 +34081,7 @@ _080DAD2C: .4byte sub_80DA48C sub_80DAD30: @ 80DAD30 push {r4,r5,lr} adds r4, r0, 0 - ldr r0, _080DAD78 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DAD78 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079ED4 movs r1, 0x3 @@ -34093,7 +34093,7 @@ sub_80DAD30: @ 80DAD30 ands r0, r2 orrs r0, r1 strb r0, [r4, 0x5] - ldr r5, _080DAD7C @ =gBattleAnimPlayerMonIndex + ldr r5, _080DAD7C @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -34112,8 +34112,8 @@ sub_80DAD30: @ 80DAD30 pop {r0} bx r0 .align 2, 0 -_080DAD78: .4byte gBattleAnimEnemyMonIndex -_080DAD7C: .4byte gBattleAnimPlayerMonIndex +_080DAD78: .4byte gBattleAnimBankTarget +_080DAD7C: .4byte gBattleAnimBankAttacker _080DAD80: .4byte sub_807941C thumb_func_end sub_80DAD30 @@ -34137,7 +34137,7 @@ sub_80DAD84: @ 80DAD84 cmp r0, 0 beq _080DAE44 ldr r0, _080DADD8 @ =gBanksBySide - ldr r1, _080DADDC @ =gBattleAnimEnemyMonIndex + ldr r1, _080DADDC @ =gBattleAnimBankTarget ldrb r2, [r1] adds r0, r2, r0 ldrb r1, [r0] @@ -34158,7 +34158,7 @@ _080DADCC: .4byte gBattleAnimArgs _080DADD0: .4byte gMain _080DADD4: .4byte 0x0000043d _080DADD8: .4byte gBanksBySide -_080DADDC: .4byte gBattleAnimEnemyMonIndex +_080DADDC: .4byte gBattleAnimBankTarget _080DADE0: adds r0, r2, 0 movs r1, 0x1 @@ -34173,7 +34173,7 @@ _080DADEE: ldrsh r0, [r0, r1] cmp r0, 0 beq _080DAE24 - ldr r0, _080DAE20 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DAE20 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079ED4 lsls r0, 24 @@ -34191,9 +34191,9 @@ _080DADEE: b _080DAE58 .align 2, 0 _080DAE1C: .4byte gBattleAnimArgs -_080DAE20: .4byte gBattleAnimEnemyMonIndex +_080DAE20: .4byte gBattleAnimBankTarget _080DAE24: - ldr r0, _080DAE40 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DAE40 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8079ED4 movs r1, 0x3 @@ -34207,9 +34207,9 @@ _080DAE24: strb r0, [r4, 0x5] b _080DAE58 .align 2, 0 -_080DAE40: .4byte gBattleAnimEnemyMonIndex +_080DAE40: .4byte gBattleAnimBankTarget _080DAE44: - ldr r0, _080DAEFC @ =gBattleAnimEnemyMonIndex + ldr r0, _080DAEFC @ =gBattleAnimBankTarget ldrb r0, [r0] movs r1, 0x1 bl sub_8077ABC @@ -34303,7 +34303,7 @@ _080DAEF2: pop {r0} bx r0 .align 2, 0 -_080DAEFC: .4byte gBattleAnimEnemyMonIndex +_080DAEFC: .4byte gBattleAnimBankTarget _080DAF00: .4byte gSineTable _080DAF04: .4byte gOamMatrices _080DAF08: .4byte sub_80DAF0C @@ -34463,7 +34463,7 @@ _080DB024: ldrsh r0, [r4, r2] cmp r0, 0 bne _080DB03C - ldr r0, _080DB090 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DB090 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -34474,7 +34474,7 @@ _080DB03C: ldrsh r0, [r4, r1] cmp r0, 0x1 bne _080DB058 - ldr r0, _080DB094 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DB094 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -34512,8 +34512,8 @@ _080DB058: bx r0 .align 2, 0 _080DB08C: .4byte gBattleAnimArgs -_080DB090: .4byte gBattleAnimPlayerMonIndex -_080DB094: .4byte gBattleAnimEnemyMonIndex +_080DB090: .4byte gBattleAnimBankAttacker +_080DB094: .4byte gBattleAnimBankTarget _080DB098: .4byte 0x00000ccc _080DB09C: .4byte sub_80DB0A0 thumb_func_end sub_80DB000 @@ -34599,7 +34599,7 @@ sub_80DB0E8: @ 80DB0E8 strh r0, [r4, 0x6] ldr r0, _080DB18C @ =gBattleAnimSpriteTemplate_83DB538 mov r8, r0 - ldr r5, _080DB190 @ =gBattleAnimEnemyMonIndex + ldr r5, _080DB190 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -34637,7 +34637,7 @@ _080DB180: .4byte gTasks _080DB184: .4byte gAnimVisualTaskCount _080DB188: .4byte gBattleAnimArgs _080DB18C: .4byte gBattleAnimSpriteTemplate_83DB538 -_080DB190: .4byte gBattleAnimEnemyMonIndex +_080DB190: .4byte gBattleAnimBankTarget thumb_func_end sub_80DB0E8 thumb_func_start sub_80DB194 @@ -34656,7 +34656,7 @@ _080DB1A6: movs r1, 0x1 bl sub_80787B0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId ldr r2, _080DB1D4 @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -34709,7 +34709,7 @@ _080DB20A: beq _080DB240 b _080DB27E _080DB210: - ldr r0, _080DB228 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DB228 @ =gBattleAnimBankTarget ldrb r0, [r0] movs r1, 0x1 bl sub_8077ABC @@ -34721,7 +34721,7 @@ _080DB210: strh r0, [r4, 0x26] b _080DB238 .align 2, 0 -_080DB228: .4byte gBattleAnimEnemyMonIndex +_080DB228: .4byte gBattleAnimBankTarget _080DB22C: ldrh r0, [r4, 0x26] adds r0, 0xA @@ -34748,7 +34748,7 @@ _080DB240: cmp r0, r1 bge _080DB27E movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId ldr r2, _080DB284 @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -34786,7 +34786,7 @@ sub_80DB288: @ 80DB288 ldr r0, _080DB2C8 @ =sub_80DB2D0 str r0, [r4, 0x1C] movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId ldr r2, _080DB2CC @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -34919,13 +34919,13 @@ _080DB388: ldrsh r0, [r0, r2] cmp r0, 0 bne _080DB3A0 - ldr r4, _080DB39C @ =gBattleAnimPlayerMonIndex + ldr r4, _080DB39C @ =gBattleAnimBankAttacker b _080DB3A2 .align 2, 0 _080DB398: .4byte gBattleAnimArgs -_080DB39C: .4byte gBattleAnimPlayerMonIndex +_080DB39C: .4byte gBattleAnimBankAttacker _080DB3A0: - ldr r4, _080DB3DC @ =gBattleAnimEnemyMonIndex + ldr r4, _080DB3DC @ =gBattleAnimBankTarget _080DB3A2: ldrb r0, [r4] movs r1, 0 @@ -34954,7 +34954,7 @@ _080DB3A2: strh r0, [r5, 0x2E] b _080DB44C .align 2, 0 -_080DB3DC: .4byte gBattleAnimEnemyMonIndex +_080DB3DC: .4byte gBattleAnimBankTarget _080DB3E0: movs r1, 0x32 ldrsh r0, [r5, r1] @@ -35079,13 +35079,13 @@ _080DB4C0: ldrsh r0, [r2, r1] cmp r0, 0 bne _080DB4D4 - ldr r4, _080DB4D0 @ =gBattleAnimPlayerMonIndex + ldr r4, _080DB4D0 @ =gBattleAnimBankAttacker b _080DB4D6 .align 2, 0 _080DB4CC: .4byte gBattleAnimArgs -_080DB4D0: .4byte gBattleAnimPlayerMonIndex +_080DB4D0: .4byte gBattleAnimBankAttacker _080DB4D4: - ldr r4, _080DB500 @ =gBattleAnimEnemyMonIndex + ldr r4, _080DB500 @ =gBattleAnimBankTarget _080DB4D6: ldrb r0, [r4] movs r1, 0 @@ -35106,7 +35106,7 @@ _080DB4D6: pop {r0} bx r0 .align 2, 0 -_080DB500: .4byte gBattleAnimEnemyMonIndex +_080DB500: .4byte gBattleAnimBankTarget _080DB504: .4byte sub_80DB508 thumb_func_end sub_80DB458 @@ -35245,7 +35245,7 @@ sub_80DB5E4: @ 80DB5E4 mov r8, r0 ldrh r4, [r0, 0x20] ldrh r5, [r0, 0x22] - ldr r6, _080DB698 @ =gBattleAnimPlayerMonIndex + ldr r6, _080DB698 @ =gBattleAnimBankAttacker ldrb r0, [r6] movs r1, 0x2 bl sub_8077ABC @@ -35321,7 +35321,7 @@ sub_80DB5E4: @ 80DB5E4 pop {r0} bx r0 .align 2, 0 -_080DB698: .4byte gBattleAnimPlayerMonIndex +_080DB698: .4byte gBattleAnimBankAttacker _080DB69C: .4byte sub_80DB6A0 thumb_func_end sub_80DB5E4 @@ -35375,7 +35375,7 @@ unref_sub_80DB6E4: @ 80DB6E4 cmp r0, 0 bne _080DB71C movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 ldr r2, _080DB718 @ =gSprites @@ -35393,7 +35393,7 @@ _080DB714: .4byte gBattleAnimArgs _080DB718: .4byte gSprites _080DB71C: movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 ldr r2, _080DB748 @ =gSprites @@ -35421,7 +35421,7 @@ _080DB748: .4byte gSprites sub_80DB74C: @ 80DB74C push {r4-r7,lr} adds r6, r0, 0 - ldr r0, _080DB804 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DB804 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -35463,7 +35463,7 @@ _080DB77E: orrs r1, r0 lsrs r5, r1, 31 adds r0, r4, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080DB7BC @@ -35475,7 +35475,7 @@ _080DB7BC: adds r4, r0, 0 eors r4, r7 adds r0, r4, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080DB7DA @@ -35493,7 +35493,7 @@ _080DB7DA: lsls r0, 24 cmp r0, 0 beq _080DB810 - ldr r0, _080DB804 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DB804 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -35504,14 +35504,14 @@ _080DB7DA: movs r0, 0x50 b _080DB84A .align 2, 0 -_080DB804: .4byte gBattleAnimPlayerMonIndex +_080DB804: .4byte gBattleAnimBankAttacker _080DB808: movs r0, 0xB0 strh r0, [r6, 0x20] movs r0, 0x28 b _080DB84A _080DB810: - ldr r5, _080DB880 @ =gBattleAnimPlayerMonIndex + ldr r5, _080DB880 @ =gBattleAnimBankAttacker ldrb r0, [r5] bl GetBankSide lsls r0, 24 @@ -35565,7 +35565,7 @@ _080DB85C: pop {r0} bx r0 .align 2, 0 -_080DB880: .4byte gBattleAnimPlayerMonIndex +_080DB880: .4byte gBattleAnimBankAttacker _080DB884: .4byte gBattleAnimArgs _080DB888: .4byte sub_80DB88C thumb_func_end sub_80DB74C @@ -35689,7 +35689,7 @@ sub_80DB92C: @ 80DB92C lsrs r4, r0, 24 adds r6, r4, 0 adds r0, r4, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080DB98E @@ -35712,7 +35712,7 @@ _080DB98E: adds r4, r0, 0 eors r4, r6 adds r0, r4, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080DB9BC @@ -35772,7 +35772,7 @@ sub_80DB9E4: @ 80DB9E4 orrs r1, r0 lsrs r5, r1, 31 adds r0, r4, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080DBA22 @@ -35782,7 +35782,7 @@ _080DBA22: movs r0, 0x2 eors r4, r0 adds r0, r4, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080DBA3C @@ -35824,7 +35824,7 @@ _080DBA66: lsls r0, 24 cmp r0, 0 beq _080DBAAE - ldr r0, _080DBA9C @ =gBattleAnimPlayerMonIndex + ldr r0, _080DBA9C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -35840,7 +35840,7 @@ _080DBA66: b _080DBAD0 .align 2, 0 _080DBA98: .4byte gBattleAnimArgs -_080DBA9C: .4byte gBattleAnimPlayerMonIndex +_080DBA9C: .4byte gBattleAnimBankAttacker _080DBAA0: ldrh r0, [r5] adds r0, 0xB0 @@ -35890,7 +35890,7 @@ _080DBAEC: sub_80DBAF4: @ 80DBAF4 push {r4,r5,lr} adds r5, r0, 0 - ldr r4, _080DBB3C @ =gBattleAnimPlayerMonIndex + ldr r4, _080DBB3C @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -35920,7 +35920,7 @@ sub_80DBAF4: @ 80DBAF4 ldr r0, _080DBB40 @ =0x0000ffff b _080DBB52 .align 2, 0 -_080DBB3C: .4byte gBattleAnimPlayerMonIndex +_080DBB3C: .4byte gBattleAnimBankAttacker _080DBB40: .4byte 0x0000ffff _080DBB44: ldrh r0, [r5, 0x20] @@ -35934,7 +35934,7 @@ _080DBB52: strh r0, [r5, 0x30] ldr r1, _080DBB68 @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080DBB6C @ =sub_8078600 str r0, [r5, 0x1C] pop {r4,r5} @@ -35949,7 +35949,7 @@ _080DBB6C: .4byte sub_8078600 sub_80DBB70: @ 80DBB70 push {r4-r7,lr} adds r5, r0, 0 - ldr r6, _080DBBF4 @ =gBattleAnimPlayerMonIndex + ldr r6, _080DBBF4 @ =gBattleAnimBankAttacker ldrb r0, [r6] movs r1, 0x1 bl sub_807A100 @@ -36003,14 +36003,14 @@ _080DBBB6: _080DBBE2: ldr r1, _080DBBF8 @ =sub_80DBC00 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080DBBFC @ =sub_8078600 str r0, [r5, 0x1C] pop {r4-r7} pop {r0} bx r0 .align 2, 0 -_080DBBF4: .4byte gBattleAnimPlayerMonIndex +_080DBBF4: .4byte gBattleAnimBankAttacker _080DBBF8: .4byte sub_80DBC00 _080DBBFC: .4byte sub_8078600 thumb_func_end sub_80DBB70 @@ -36105,7 +36105,7 @@ sub_80DBC94: @ 80DBC94 ldr r0, _080DBCC4 @ =gTasks adds r4, r0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -36159,14 +36159,14 @@ sub_80DBCFC: @ 80DBCFC ldr r0, _080DBD48 @ =gTasks adds r4, r1, r0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 movs r1, 0 strh r0, [r4, 0x8] strh r1, [r4, 0xA] strh r1, [r4, 0xC] - ldr r0, _080DBD4C @ =gBattleAnimPlayerMonIndex + ldr r0, _080DBD4C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -36187,7 +36187,7 @@ _080DBD30: bx r0 .align 2, 0 _080DBD48: .4byte gTasks -_080DBD4C: .4byte gBattleAnimPlayerMonIndex +_080DBD4C: .4byte gBattleAnimBankAttacker _080DBD50: .4byte gUnknown_083DA8C4 _080DBD54: .4byte sub_80DBD58 thumb_func_end sub_80DBCFC @@ -36294,7 +36294,7 @@ sub_80DBE00: @ 80DBE00 movs r7, 0x10 strh r7, [r5, 0xE] strh r0, [r5, 0x10] - ldr r4, _080DBE88 @ =gBattleAnimPlayerMonIndex + ldr r4, _080DBE88 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -36345,7 +36345,7 @@ _080DBE6A: bx r0 .align 2, 0 _080DBE84: .4byte gTasks -_080DBE88: .4byte gBattleAnimPlayerMonIndex +_080DBE88: .4byte gBattleAnimBankAttacker _080DBE8C: .4byte REG_BLDCNT _080DBE90: .4byte REG_BLDALPHA _080DBE94: .4byte sub_80DBE98 @@ -36614,7 +36614,7 @@ sub_80DC068: @ 80DC068 ldrsh r0, [r6, r1] cmp r0, 0 bne _080DC094 - ldr r4, _080DC0A8 @ =gBattleAnimPlayerMonIndex + ldr r4, _080DC0A8 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -36637,7 +36637,7 @@ _080DC094: bx r0 .align 2, 0 _080DC0A4: .4byte gBattleAnimArgs -_080DC0A8: .4byte gBattleAnimPlayerMonIndex +_080DC0A8: .4byte gBattleAnimBankAttacker _080DC0AC: .4byte sub_80DC020 thumb_func_end sub_80DC068 @@ -36662,7 +36662,7 @@ sub_80DC0B0: @ 80DC0B0 bne _080DC120 ldr r0, _080DC114 @ =0x0000fff6 strh r0, [r5, 0x1C] - ldr r4, _080DC118 @ =gBattleAnimEnemyMonIndex + ldr r4, _080DC118 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x5 bl sub_807A100 @@ -36673,7 +36673,7 @@ sub_80DC0B0: @ 80DC0B0 bl sub_807A100 adds r0, 0x8 strh r0, [r5, 0x20] - ldr r4, _080DC11C @ =gBattleAnimPlayerMonIndex + ldr r4, _080DC11C @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x5 bl sub_807A100 @@ -36688,12 +36688,12 @@ sub_80DC0B0: @ 80DC0B0 _080DC10C: .4byte gTasks _080DC110: .4byte gBattleAnimArgs _080DC114: .4byte 0x0000fff6 -_080DC118: .4byte gBattleAnimEnemyMonIndex -_080DC11C: .4byte gBattleAnimPlayerMonIndex +_080DC118: .4byte gBattleAnimBankTarget +_080DC11C: .4byte gBattleAnimBankAttacker _080DC120: movs r0, 0xA strh r0, [r5, 0x1C] - ldr r4, _080DC14C @ =gBattleAnimPlayerMonIndex + ldr r4, _080DC14C @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x4 bl sub_807A100 @@ -36704,15 +36704,15 @@ _080DC120: bl sub_807A100 subs r0, 0x8 strh r0, [r5, 0x20] - ldr r4, _080DC150 @ =gBattleAnimEnemyMonIndex + ldr r4, _080DC150 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x4 bl sub_807A100 adds r0, 0x8 b _080DC1D2 .align 2, 0 -_080DC14C: .4byte gBattleAnimPlayerMonIndex -_080DC150: .4byte gBattleAnimEnemyMonIndex +_080DC14C: .4byte gBattleAnimBankAttacker +_080DC150: .4byte gBattleAnimBankTarget _080DC154: ldr r0, _080DC198 @ =gBattleAnimArgs movs r1, 0 @@ -36721,7 +36721,7 @@ _080DC154: bne _080DC1A8 ldr r0, _080DC19C @ =0x0000fff6 strh r0, [r5, 0x1C] - ldr r4, _080DC1A0 @ =gBattleAnimEnemyMonIndex + ldr r4, _080DC1A0 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x4 bl sub_807A100 @@ -36732,7 +36732,7 @@ _080DC154: bl sub_807A100 adds r0, 0x8 strh r0, [r5, 0x20] - ldr r4, _080DC1A4 @ =gBattleAnimPlayerMonIndex + ldr r4, _080DC1A4 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x4 bl sub_807A100 @@ -36746,12 +36746,12 @@ _080DC154: .align 2, 0 _080DC198: .4byte gBattleAnimArgs _080DC19C: .4byte 0x0000fff6 -_080DC1A0: .4byte gBattleAnimEnemyMonIndex -_080DC1A4: .4byte gBattleAnimPlayerMonIndex +_080DC1A0: .4byte gBattleAnimBankTarget +_080DC1A4: .4byte gBattleAnimBankAttacker _080DC1A8: movs r0, 0xA strh r0, [r5, 0x1C] - ldr r4, _080DC1F0 @ =gBattleAnimPlayerMonIndex + ldr r4, _080DC1F0 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x5 bl sub_807A100 @@ -36762,7 +36762,7 @@ _080DC1A8: bl sub_807A100 subs r0, 0x8 strh r0, [r5, 0x20] - ldr r4, _080DC1F4 @ =gBattleAnimEnemyMonIndex + ldr r4, _080DC1F4 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x5 bl sub_807A100 @@ -36783,8 +36783,8 @@ _080DC1DE: pop {r0} bx r0 .align 2, 0 -_080DC1F0: .4byte gBattleAnimPlayerMonIndex -_080DC1F4: .4byte gBattleAnimEnemyMonIndex +_080DC1F0: .4byte gBattleAnimBankAttacker +_080DC1F4: .4byte gBattleAnimBankTarget _080DC1F8: .4byte sub_80DC1FC thumb_func_end sub_80DC0B0 @@ -36909,7 +36909,7 @@ sub_80DC2D4: @ 80DC2D4 lsls r1, 3 ldr r0, _080DC30C @ =gTasks adds r4, r1, r0 - ldr r0, _080DC310 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DC310 @ =gBattleAnimBankTarget ldrb r0, [r0] bl sub_8077FC0 lsls r0, 24 @@ -36929,7 +36929,7 @@ sub_80DC2D4: @ 80DC2D4 b _080DC346 .align 2, 0 _080DC30C: .4byte gTasks -_080DC310: .4byte gBattleAnimEnemyMonIndex +_080DC310: .4byte gBattleAnimBankTarget _080DC314: .4byte gBattleAnimArgs _080DC318: cmp r0, 0x2 @@ -36967,7 +36967,7 @@ _080DC346: movs r0, 0 strh r0, [r4, 0x24] _080DC352: - ldr r0, _080DC36C @ =gBattleAnimEnemyMonIndex + ldr r0, _080DC36C @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -36980,7 +36980,7 @@ _080DC352: ldr r0, _080DC374 @ =REG_BG1HOFS b _080DC380 .align 2, 0 -_080DC36C: .4byte gBattleAnimEnemyMonIndex +_080DC36C: .4byte gBattleAnimBankTarget _080DC370: .4byte gUnknown_030042C0 _080DC374: .4byte REG_BG1HOFS _080DC378: @@ -37282,7 +37282,7 @@ _080DC554: bl CalcCenterToCornerVec ldr r1, _080DC5EC @ =gBattleAnimArgs ldrb r0, [r1] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r7, 0x22] @@ -37461,7 +37461,7 @@ _080DC716: beq _080DC808 b _080DC818 _080DC720: - ldr r4, _080DC76C @ =gBattleAnimPlayerMonIndex + ldr r4, _080DC76C @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -37498,7 +37498,7 @@ _080DC74E: strh r0, [r2] b _080DC7A2 .align 2, 0 -_080DC76C: .4byte gBattleAnimPlayerMonIndex +_080DC76C: .4byte gBattleAnimBankAttacker _080DC770: .4byte REG_BLDCNT _080DC774: .4byte REG_BLDALPHA _080DC778: @@ -37612,7 +37612,7 @@ sub_80DC824: @ 80DC824 .align 2, 0 _080DC84C: .4byte gBattleAnimArgs _080DC850: - ldr r0, _080DC8E4 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DC8E4 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -37635,7 +37635,7 @@ _080DC850: negs r0, r0 strh r0, [r1] _080DC880: - ldr r5, _080DC8E4 @ =gBattleAnimEnemyMonIndex + ldr r5, _080DC8E4 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077EE4 @@ -37675,12 +37675,12 @@ _080DC880: str r0, [r6, 0x1C] ldr r1, _080DC8F0 @ =move_anim_8072740 adds r0, r6, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4-r6} pop {r0} bx r0 .align 2, 0 -_080DC8E4: .4byte gBattleAnimEnemyMonIndex +_080DC8E4: .4byte gBattleAnimBankTarget _080DC8E8: .4byte gBattleAnimArgs _080DC8EC: .4byte sub_8078B34 _080DC8F0: .4byte move_anim_8072740 @@ -37705,7 +37705,7 @@ sub_80DC8F4: @ 80DC8F4 .align 2, 0 _080DC914: .4byte gBattleAnimArgs _080DC918: - ldr r0, _080DC990 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DC990 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -37719,7 +37719,7 @@ _080DC918: negs r1, r1 strh r1, [r0] _080DC934: - ldr r5, _080DC990 @ =gBattleAnimEnemyMonIndex + ldr r5, _080DC990 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077EE4 @@ -37755,12 +37755,12 @@ _080DC934: str r0, [r6, 0x1C] ldr r1, _080DC99C @ =move_anim_8072740 adds r0, r6, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4-r6} pop {r0} bx r0 .align 2, 0 -_080DC990: .4byte gBattleAnimEnemyMonIndex +_080DC990: .4byte gBattleAnimBankTarget _080DC994: .4byte gBattleAnimArgs _080DC998: .4byte sub_8078B34 _080DC99C: .4byte move_anim_8072740 @@ -37796,7 +37796,7 @@ _080DC9BC: ldrsh r0, [r1, r2] cmp r0, 0 bne _080DCA04 - ldr r4, _080DCA00 @ =gBattleAnimEnemyMonIndex + ldr r4, _080DCA00 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -37812,9 +37812,9 @@ _080DC9BC: b _080DCA16 .align 2, 0 _080DC9FC: .4byte gBattleAnimArgs -_080DCA00: .4byte gBattleAnimEnemyMonIndex +_080DCA00: .4byte gBattleAnimBankTarget _080DCA04: - ldr r0, _080DCA2C @ =gBattleAnimEnemyMonIndex + ldr r0, _080DCA2C @ =gBattleAnimBankTarget ldrb r0, [r0] adds r2, r5, 0 adds r2, 0x32 @@ -37834,7 +37834,7 @@ _080DCA16: pop {r0} bx r0 .align 2, 0 -_080DCA2C: .4byte gBattleAnimEnemyMonIndex +_080DCA2C: .4byte gBattleAnimBankTarget _080DCA30: .4byte gBattleAnimArgs _080DCA34: .4byte sub_80DCA38 thumb_func_end sub_80DC9A0 @@ -37874,7 +37874,7 @@ _080DCA6A: sub_80DCA70: @ 80DCA70 push {r4,lr} adds r4, r0, 0 - ldr r0, _080DCAA0 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DCAA0 @ =gBattleAnimBankTarget ldrb r0, [r0] adds r2, r4, 0 adds r2, 0x20 @@ -37882,7 +37882,7 @@ sub_80DCA70: @ 80DCA70 adds r3, 0x22 movs r1, 0 bl sub_807A3FC - ldr r0, _080DCAA4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DCAA4 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -37895,8 +37895,8 @@ sub_80DCA70: @ 80DCA70 strh r1, [r4, 0x20] b _080DCAB8 .align 2, 0 -_080DCAA0: .4byte gBattleAnimEnemyMonIndex -_080DCAA4: .4byte gBattleAnimPlayerMonIndex +_080DCAA0: .4byte gBattleAnimBankTarget +_080DCAA4: .4byte gBattleAnimBankAttacker _080DCAA8: .4byte gBattleAnimArgs _080DCAAC: ldr r1, _080DCAE0 @ =gBattleAnimArgs @@ -37910,7 +37910,7 @@ _080DCAB8: ldrh r1, [r4, 0x22] adds r0, r1 strh r0, [r4, 0x22] - ldr r0, _080DCAE4 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DCAE4 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -37927,7 +37927,7 @@ _080DCAD4: bx r0 .align 2, 0 _080DCAE0: .4byte gBattleAnimArgs -_080DCAE4: .4byte gBattleAnimEnemyMonIndex +_080DCAE4: .4byte gBattleAnimBankTarget _080DCAE8: .4byte sub_80DCAEC thumb_func_end sub_80DCA70 @@ -38075,7 +38075,7 @@ sub_80DCBCC: @ 80DCBCC .align 2, 0 _080DCBE8: .4byte gBattleAnimArgs _080DCBEC: - ldr r0, _080DCCE8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DCCE8 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -38096,11 +38096,11 @@ _080DCC0E: lsls r0, 24 cmp r0, 0 bne _080DCC5E - ldr r0, _080DCCE8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DCCE8 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide adds r4, r0, 0 - ldr r5, _080DCCF0 @ =gBattleAnimEnemyMonIndex + ldr r5, _080DCCF0 @ =gBattleAnimBankTarget ldrb r0, [r5] bl GetBankSide lsls r4, 24 @@ -38132,7 +38132,7 @@ _080DCC5E: adds r0, r7, 0 movs r1, 0x1 bl sub_80787B0 - ldr r5, _080DCCF0 @ =gBattleAnimEnemyMonIndex + ldr r5, _080DCCF0 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -38186,15 +38186,15 @@ _080DCC5E: str r0, [r7, 0x1C] ldr r1, _080DCCF8 @ =move_anim_8072740 adds r0, r7, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 add sp, 0x4 pop {r4-r7} pop {r0} bx r0 .align 2, 0 -_080DCCE8: .4byte gBattleAnimPlayerMonIndex +_080DCCE8: .4byte gBattleAnimBankAttacker _080DCCEC: .4byte gBattleAnimArgs -_080DCCF0: .4byte gBattleAnimEnemyMonIndex +_080DCCF0: .4byte gBattleAnimBankTarget _080DCCF4: .4byte sub_8078B34 _080DCCF8: .4byte move_anim_8072740 thumb_func_end sub_80DCBCC @@ -38205,7 +38205,7 @@ sub_80DCCFC: @ 80DCCFC adds r6, r0, 0 movs r1, 0x1 bl sub_80787B0 - ldr r0, _080DCD68 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DCD68 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -38219,7 +38219,7 @@ _080DCD1C: ldr r4, _080DCD6C @ =gBattleAnimArgs ldrh r0, [r4, 0x8] strh r0, [r6, 0x2E] - ldr r5, _080DCD70 @ =gBattleAnimEnemyMonIndex + ldr r5, _080DCD70 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -38252,9 +38252,9 @@ _080DCD1C: pop {r0} bx r0 .align 2, 0 -_080DCD68: .4byte gBattleAnimPlayerMonIndex +_080DCD68: .4byte gBattleAnimBankAttacker _080DCD6C: .4byte gBattleAnimArgs -_080DCD70: .4byte gBattleAnimEnemyMonIndex +_080DCD70: .4byte gBattleAnimBankTarget _080DCD74: .4byte sub_80DCD78 thumb_func_end sub_80DCCFC @@ -38370,13 +38370,13 @@ sub_80DCE40: @ 80DCE40 ldrsh r0, [r0, r1] cmp r0, 0 bne _080DCE5C - ldr r4, _080DCE58 @ =gBattleAnimPlayerMonIndex + ldr r4, _080DCE58 @ =gBattleAnimBankAttacker b _080DCE5E .align 2, 0 _080DCE54: .4byte gBattleAnimArgs -_080DCE58: .4byte gBattleAnimPlayerMonIndex +_080DCE58: .4byte gBattleAnimBankAttacker _080DCE5C: - ldr r4, _080DCE90 @ =gBattleAnimEnemyMonIndex + ldr r4, _080DCE90 @ =gBattleAnimBankTarget _080DCE5E: ldrb r0, [r4] movs r1, 0x2 @@ -38393,14 +38393,14 @@ _080DCE5E: strh r0, [r5, 0x22] ldr r1, _080DCE94 @ =move_anim_8074EE0 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080DCE98 @ =sub_80785E4 str r0, [r5, 0x1C] pop {r4,r5} pop {r0} bx r0 .align 2, 0 -_080DCE90: .4byte gBattleAnimEnemyMonIndex +_080DCE90: .4byte gBattleAnimBankTarget _080DCE94: .4byte move_anim_8074EE0 _080DCE98: .4byte sub_80785E4 thumb_func_end sub_80DCE40 @@ -38414,7 +38414,7 @@ sub_80DCE9C: @ 80DCE9C ldrsh r0, [r6, r1] cmp r0, 0 beq _080DCEBC - ldr r0, _080DCF0C @ =gBattleAnimEnemyMonIndex + ldr r0, _080DCF0C @ =gBattleAnimBankTarget ldrb r0, [r0] adds r2, r5, 0 adds r2, 0x20 @@ -38448,7 +38448,7 @@ _080DCEBC: strh r0, [r5, 0x38] ldr r1, _080DCF14 @ =sub_80DCF1C adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r1, _080DCF18 @ =sub_8078278 str r1, [r5, 0x1C] adds r0, r5, 0 @@ -38458,7 +38458,7 @@ _080DCEBC: bx r0 .align 2, 0 _080DCF08: .4byte gBattleAnimArgs -_080DCF0C: .4byte gBattleAnimEnemyMonIndex +_080DCF0C: .4byte gBattleAnimBankTarget _080DCF10: .4byte 0x0000ffba _080DCF14: .4byte sub_80DCF1C _080DCF18: .4byte sub_8078278 @@ -38483,7 +38483,7 @@ sub_80DCF1C: @ 80DCF1C strh r0, [r4, 0x36] ldr r1, _080DCF58 @ =move_anim_8074EE0 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r1, _080DCF5C @ =sub_8078278 str r1, [r4, 0x1C] adds r0, r4, 0 @@ -38506,7 +38506,7 @@ sub_80DCF60: @ 80DCF60 bl StartSpriteAnim adds r0, r5, 0 bl AnimateSprite - ldr r0, _080DCF8C @ =gBattleAnimPlayerMonIndex + ldr r0, _080DCF8C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -38518,7 +38518,7 @@ sub_80DCF60: @ 80DCF60 b _080DCF96 .align 2, 0 _080DCF88: .4byte gBattleAnimArgs -_080DCF8C: .4byte gBattleAnimPlayerMonIndex +_080DCF8C: .4byte gBattleAnimBankAttacker _080DCF90: ldrh r0, [r4] ldrh r1, [r5, 0x20] @@ -38550,7 +38550,7 @@ _080DCF96: str r0, [r5, 0x1C] ldr r1, _080DCFE0 @ =move_anim_8074EE0 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 @@ -38726,7 +38726,7 @@ _080DD120: ldrsh r0, [r0, r1] cmp r0, 0 beq _080DD13A - ldr r0, _080DD184 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DD184 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -38759,7 +38759,7 @@ _080DD174: .4byte gBattleAnimBackgroundTilemap_SandstormBrew _080DD178: .4byte gBattleAnimBackgroundImage_SandstormBrew _080DD17C: .4byte gBattleAnimSpritePalette_261 _080DD180: .4byte gBattleAnimArgs -_080DD184: .4byte gBattleAnimPlayerMonIndex +_080DD184: .4byte gBattleAnimBankAttacker _080DD188: .4byte gTasks _080DD18C: .4byte sub_80DD190 thumb_func_end do_boulder_dust @@ -39044,7 +39044,7 @@ sub_80DD3AC: @ 80DD3AC ldrsh r0, [r4, r2] cmp r0, 0 beq _080DD3F8 - ldr r0, _080DD3F4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DD3F4 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -39067,7 +39067,7 @@ sub_80DD3AC: @ 80DD3AC b _080DD3FC .align 2, 0 _080DD3F0: .4byte gBattleAnimArgs -_080DD3F4: .4byte gBattleAnimPlayerMonIndex +_080DD3F4: .4byte gBattleAnimBankAttacker _080DD3F8: ldr r0, _080DD41C @ =0x0000ffc0 strh r0, [r5, 0x20] @@ -39169,7 +39169,7 @@ sub_80DD490: @ 80DD490 str r0, [r4, 0x1C] ldr r1, _080DD4D0 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 @@ -39193,7 +39193,7 @@ sub_80DD4D4: @ 80DD4D4 lsls r1, 3 ldr r0, _080DD554 @ =gTasks adds r6, r1, r0 - ldr r5, _080DD558 @ =gBattleAnimPlayerMonIndex + ldr r5, _080DD558 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -39209,7 +39209,7 @@ sub_80DD4D4: @ 80DD4D4 lsls r1, 13 adds r0, r1 lsrs r7, r0, 16 - ldr r4, _080DD55C @ =gBattleAnimEnemyMonIndex + ldr r4, _080DD55C @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -39243,8 +39243,8 @@ _080DD544: b _080DD566 .align 2, 0 _080DD554: .4byte gTasks -_080DD558: .4byte gBattleAnimPlayerMonIndex -_080DD55C: .4byte gBattleAnimEnemyMonIndex +_080DD558: .4byte gBattleAnimBankAttacker +_080DD55C: .4byte gBattleAnimBankTarget _080DD560: lsls r1, r5, 3 movs r0, 0x30 @@ -39308,7 +39308,7 @@ _080DD57E: strh r0, [r6, 0x24] strh r5, [r6, 0xA] movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r6, 0x26] @@ -39787,7 +39787,7 @@ _080DD972: sub_80DD978: @ 80DD978 push {r4,lr} adds r4, r0, 0 - ldr r0, _080DD9A0 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DD9A0 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -39804,14 +39804,14 @@ _080DD994: pop {r0} bx r0 .align 2, 0 -_080DD9A0: .4byte gBattleAnimPlayerMonIndex +_080DD9A0: .4byte gBattleAnimBankAttacker thumb_func_end sub_80DD978 thumb_func_start sub_80DD9A4 sub_80DD9A4: @ 80DD9A4 push {r4,r5,lr} adds r4, r0, 0 - ldr r5, _080DD9F0 @ =gBattleAnimEnemyMonIndex + ldr r5, _080DD9F0 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0 bl sub_8077ABC @@ -39844,7 +39844,7 @@ sub_80DD9A4: @ 80DD9A4 pop {r0} bx r0 .align 2, 0 -_080DD9F0: .4byte gBattleAnimEnemyMonIndex +_080DD9F0: .4byte gBattleAnimBankTarget _080DD9F4: .4byte gBattleAnimArgs _080DD9F8: .4byte sub_80DD9FC thumb_func_end sub_80DD9A4 @@ -40049,7 +40049,7 @@ sub_80DDB6C: @ 80DDB6C strh r0, [r4, 0x2E] ldrh r0, [r4, 0x20] strh r0, [r4, 0x30] - ldr r5, _080DDBCC @ =gBattleAnimEnemyMonIndex + ldr r5, _080DDBCC @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -40083,7 +40083,7 @@ sub_80DDB6C: @ 80DDB6C bx r0 .align 2, 0 _080DDBC8: .4byte gBattleAnimArgs -_080DDBCC: .4byte gBattleAnimEnemyMonIndex +_080DDBCC: .4byte gBattleAnimBankTarget _080DDBD0: .4byte sub_80DDBD8 _080DDBD4: .4byte REG_BLDCNT thumb_func_end sub_80DDB6C @@ -40389,7 +40389,7 @@ sub_80DDDF0: @ 80DDDF0 adds r0, r2, 0 strh r0, [r1] movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 @@ -40506,7 +40506,7 @@ sub_80DDED0: @ 80DDED0 _080DDEF4: .4byte gTasks _080DDEF8: movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r1, r0, 24 ldrh r0, [r4, 0x8] @@ -40551,7 +40551,7 @@ sub_80DDF40: @ 80DDF40 adds r4, r0, 0 ldrh r5, [r4, 0x20] ldrh r6, [r4, 0x22] - ldr r0, _080DDFDC @ =gBattleAnimPlayerMonIndex + ldr r0, _080DDFDC @ =gBattleAnimBankAttacker mov r8, r0 ldrb r0, [r0] movs r1, 0x2 @@ -40618,7 +40618,7 @@ sub_80DDF40: @ 80DDF40 pop {r0} bx r0 .align 2, 0 -_080DDFDC: .4byte gBattleAnimPlayerMonIndex +_080DDFDC: .4byte gBattleAnimBankAttacker _080DDFE0: .4byte gBattleAnimArgs _080DDFE4: .4byte sub_80DDFE8 thumb_func_end sub_80DDF40 @@ -40671,7 +40671,7 @@ _080DE032: lsls r0, 16 cmp r0, 0 bgt _080DE0F6 - ldr r4, _080DE098 @ =gBattleAnimEnemyMonIndex + ldr r4, _080DE098 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -40712,7 +40712,7 @@ _080DE032: strh r0, [r5, 0x3C] b _080DE0E2 .align 2, 0 -_080DE098: .4byte gBattleAnimEnemyMonIndex +_080DE098: .4byte gBattleAnimBankTarget _080DE09C: ldrh r0, [r5, 0x3A] ldrh r1, [r5, 0x36] @@ -40734,7 +40734,7 @@ _080DE09C: lsls r0, 16 cmp r0, 0 bgt _080DE0F6 - ldr r4, _080DE0EC @ =gBattleAnimEnemyMonIndex + ldr r4, _080DE0EC @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -40753,7 +40753,7 @@ _080DE0E2: strh r0, [r5, 0x2E] b _080DE0F6 .align 2, 0 -_080DE0EC: .4byte gBattleAnimEnemyMonIndex +_080DE0EC: .4byte gBattleAnimBankTarget _080DE0F0: adds r0, r5, 0 bl move_anim_8074EE0 @@ -40917,7 +40917,7 @@ _080DE1E0: adds r0, r4 movs r1, 0x50 strh r1, [r0, 0x2E] - ldr r0, _080DE250 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DE250 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -40943,7 +40943,7 @@ _080DE1E0: _080DE244: .4byte REG_BLDCNT _080DE248: .4byte REG_BLDALPHA _080DE24C: .4byte gSprites -_080DE250: .4byte gBattleAnimEnemyMonIndex +_080DE250: .4byte gBattleAnimBankTarget _080DE254: .4byte 0x0000ff70 _080DE258: movs r2, 0x8 @@ -40986,7 +40986,7 @@ _080DE276: lsls r0, 2 adds r0, r4 ldr r1, _080DE2D0 @ =SpriteCallbackDummy - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 movs r0, 0x8 ldrsh r1, [r5, r0] lsls r0, r1, 4 @@ -41156,7 +41156,7 @@ sub_80DE3D4: @ 80DE3D4 lsls r0, 3 ldr r1, _080DE40C @ =gTasks adds r5, r0, r1 - ldr r0, _080DE410 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DE410 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -41174,7 +41174,7 @@ _080DE400: mov pc, r0 .align 2, 0 _080DE40C: .4byte gTasks -_080DE410: .4byte gBattleAnimEnemyMonIndex +_080DE410: .4byte gBattleAnimBankTarget _080DE414: .4byte _080DE418 .align 2, 0 _080DE418: @@ -41250,7 +41250,7 @@ _080DE464: movs r0, 0x10 strh r0, [r5, 0xE] movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r5, 0x22] @@ -41516,7 +41516,7 @@ sub_80DE6B0: @ 80DE6B0 lsls r0, 3 ldr r1, _080DE6E0 @ =gTasks adds r4, r0, r1 - ldr r0, _080DE6E4 @ =gBattleAnimEnemyMonIndex + ldr r0, _080DE6E4 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -41532,7 +41532,7 @@ sub_80DE6B0: @ 80DE6B0 b _080DE7AA .align 2, 0 _080DE6E0: .4byte gTasks -_080DE6E4: .4byte gBattleAnimEnemyMonIndex +_080DE6E4: .4byte gBattleAnimBankTarget _080DE6E8: cmp r0, 0x2 beq _080DE740 @@ -41542,7 +41542,7 @@ _080DE6EE: movs r0, 0x3 strb r0, [r1, 0x15] movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x24] @@ -41648,7 +41648,7 @@ sub_80DE7B8: @ 80DE7B8 ldrsh r0, [r0, r1] cmp r0, 0 bne _080DE800 - ldr r4, _080DE7F8 @ =gBattleAnimPlayerMonIndex + ldr r4, _080DE7F8 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -41663,14 +41663,14 @@ sub_80DE7B8: @ 80DE7B8 lsls r2, 13 adds r0, r2 lsrs r5, r0, 16 - ldr r4, _080DE7FC @ =gBattleAnimEnemyMonIndex + ldr r4, _080DE7FC @ =gBattleAnimBankTarget b _080DE824 .align 2, 0 _080DE7F4: .4byte gBattleAnimArgs -_080DE7F8: .4byte gBattleAnimPlayerMonIndex -_080DE7FC: .4byte gBattleAnimEnemyMonIndex +_080DE7F8: .4byte gBattleAnimBankAttacker +_080DE7FC: .4byte gBattleAnimBankTarget _080DE800: - ldr r4, _080DE8C8 @ =gBattleAnimEnemyMonIndex + ldr r4, _080DE8C8 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -41685,7 +41685,7 @@ _080DE800: lsls r2, 13 adds r0, r2 lsrs r5, r0, 16 - ldr r4, _080DE8CC @ =gBattleAnimPlayerMonIndex + ldr r4, _080DE8CC @ =gBattleAnimBankAttacker _080DE824: ldrb r0, [r4] movs r1, 0 @@ -41765,8 +41765,8 @@ _080DE824: pop {r0} bx r0 .align 2, 0 -_080DE8C8: .4byte gBattleAnimEnemyMonIndex -_080DE8CC: .4byte gBattleAnimPlayerMonIndex +_080DE8C8: .4byte gBattleAnimBankTarget +_080DE8CC: .4byte gBattleAnimBankAttacker _080DE8D0: .4byte gBattleAnimArgs _080DE8D4: .4byte sub_80DE8D8 thumb_func_end sub_80DE7B8 @@ -41844,7 +41844,7 @@ sub_80DE918: @ 80DE918 ldr r2, _080DEA70 @ =gBattleAnimArgs ldrh r0, [r2] strh r0, [r1, 0x1C] - ldr r4, _080DEA74 @ =gBattleAnimPlayerMonIndex + ldr r4, _080DEA74 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -41867,7 +41867,7 @@ _080DE988: _080DE98A: lsls r1, r4, 16 asrs r3, r1, 16 - ldr r0, _080DEA74 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DEA74 @ =gBattleAnimBankAttacker ldrb r2, [r0] str r1, [sp, 0x10] cmp r3, r2 @@ -41879,7 +41879,7 @@ _080DE98A: lsls r0, r4, 24 lsrs r4, r0, 24 adds r0, r4, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080DEA56 @@ -41975,7 +41975,7 @@ _080DEA56: _080DEA68: .4byte gTasks _080DEA6C: .4byte REG_BLDCNT _080DEA70: .4byte gBattleAnimArgs -_080DEA74: .4byte gBattleAnimPlayerMonIndex +_080DEA74: .4byte gBattleAnimBankAttacker _080DEA78: .4byte gSpriteTemplate_83DAF08 _080DEA7C: .4byte gSprites _080DEA80: .4byte gSprites + 0x1C @@ -42290,7 +42290,7 @@ sub_80DECB0: @ 80DECB0 adds r1, 0x4 movs r0, 0x10 strh r0, [r1] - ldr r0, _080DED08 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DED08 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -42308,7 +42308,7 @@ _080DECF8: .4byte gUnknown_030042C4 _080DECFC: .4byte gUnknown_03004240 _080DED00: .4byte REG_WININ _080DED04: .4byte 0x00003f3f -_080DED08: .4byte gBattleAnimPlayerMonIndex +_080DED08: .4byte gBattleAnimBankAttacker _080DED0C: movs r6, 0xC8 _080DED0E: @@ -42571,7 +42571,7 @@ sub_80DEF3C: @ 80DEF3C adds r4, r0, 0 movs r1, 0x1 bl sub_80787B0 - ldr r0, _080DEF68 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DEF68 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -42588,7 +42588,7 @@ sub_80DEF3C: @ 80DEF3C strb r1, [r4, 0x3] b _080DEF74 .align 2, 0 -_080DEF68: .4byte gBattleAnimPlayerMonIndex +_080DEF68: .4byte gBattleAnimBankAttacker _080DEF6C: .4byte 0x0000fffe _080DEF70: ldr r2, _080DEF90 @ =0x0000ffe8 @@ -42662,7 +42662,7 @@ _080DEFAA: str r0, [r3, 0x1C] ldr r1, _080DF008 @ =sub_80DF018 adds r0, r3, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 b _080DF010 .align 2, 0 _080DEFFC: .4byte 0x000003ff @@ -42775,7 +42775,7 @@ sub_80DF0B8: @ 80DF0B8 movs r1, 0xC bl Sin strh r0, [r4, 0x24] - ldr r0, _080DF120 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DF120 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -42819,7 +42819,7 @@ _080DF0DC: strh r0, [r1] b _080DF17E .align 2, 0 -_080DF120: .4byte gBattleAnimPlayerMonIndex +_080DF120: .4byte gBattleAnimBankAttacker _080DF124: .4byte 0x0000050b _080DF128: .4byte REG_BLDCNT _080DF12C: @@ -42908,7 +42908,7 @@ sub_80DF1A4: @ 80DF1A4 mov r8, r0 mov r2, r8 strh r2, [r4, 0xA] - ldr r5, _080DF240 @ =gBattleAnimPlayerMonIndex + ldr r5, _080DF240 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -42965,7 +42965,7 @@ sub_80DF1A4: @ 80DF1A4 bx r0 .align 2, 0 _080DF23C: .4byte gTasks -_080DF240: .4byte gBattleAnimPlayerMonIndex +_080DF240: .4byte gBattleAnimBankAttacker _080DF244: .4byte REG_BLDCNT _080DF248: .4byte sub_80DF24C thumb_func_end sub_80DF1A4 @@ -43022,7 +43022,7 @@ _080DF292: lsls r0, 2 adds r5, r0, r1 strh r7, [r5, 0x2E] - ldr r0, _080DF2FC @ =gBattleAnimPlayerMonIndex + ldr r0, _080DF2FC @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide movs r1, 0 @@ -43056,7 +43056,7 @@ _080DF2E6: .align 2, 0 _080DF2F4: .4byte gSpriteTemplate_83DAF80 _080DF2F8: .4byte gSprites -_080DF2FC: .4byte gBattleAnimPlayerMonIndex +_080DF2FC: .4byte gBattleAnimBankAttacker _080DF300: ldrh r0, [r4, 0xA] adds r0, 0x1 @@ -43289,7 +43289,7 @@ sub_80DF49C: @ 80DF49C orrs r1, r2 strb r1, [r3] ldr r2, _080DF4E0 @ =gObjectBankIDs - ldr r1, _080DF4E4 @ =gBattleAnimPlayerMonIndex + ldr r1, _080DF4E4 @ =gBattleAnimBankAttacker ldrb r1, [r1] adds r1, r2 ldrb r1, [r1] @@ -43318,7 +43318,7 @@ sub_80DF49C: @ 80DF49C bx lr .align 2, 0 _080DF4E0: .4byte gObjectBankIDs -_080DF4E4: .4byte gBattleAnimPlayerMonIndex +_080DF4E4: .4byte gBattleAnimBankAttacker _080DF4E8: .4byte gBattleAnimArgs _080DF4EC: .4byte sub_80DF4F4 _080DF4F0: .4byte gSprites @@ -43415,7 +43415,7 @@ _080DF59C: .4byte move_anim_8074EE0 sub_80DF5A0: @ 80DF5A0 push {r4,r5,lr} adds r5, r0, 0 - ldr r4, _080DF5E8 @ =gBattleAnimPlayerMonIndex + ldr r4, _080DF5E8 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -43447,7 +43447,7 @@ sub_80DF5A0: @ 80DF5A0 adds r1, r2, 0 b _080DF5FA .align 2, 0 -_080DF5E8: .4byte gBattleAnimPlayerMonIndex +_080DF5E8: .4byte gBattleAnimBankAttacker _080DF5EC: .4byte gBattleAnimArgs _080DF5F0: ldr r1, _080DF630 @ =gBattleAnimArgs @@ -43476,7 +43476,7 @@ _080DF5FA: strb r0, [r2] ldr r1, _080DF634 @ =move_anim_8074EE0 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080DF638 @ =sub_8078504 str r0, [r5, 0x1C] pop {r4,r5} @@ -43493,7 +43493,7 @@ sub_80DF63C: @ 80DF63C push {r4,r5,lr} adds r5, r0, 0 bl sub_8078650 - ldr r4, _080DF694 @ =gBattleAnimEnemyMonIndex + ldr r4, _080DF694 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -43506,7 +43506,7 @@ sub_80DF63C: @ 80DF63C lsls r0, 24 lsrs r0, 24 strh r0, [r5, 0x36] - ldr r0, _080DF698 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DF698 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -43530,8 +43530,8 @@ sub_80DF63C: @ 80DF63C strh r0, [r5, 0x36] b _080DF6CA .align 2, 0 -_080DF694: .4byte gBattleAnimEnemyMonIndex -_080DF698: .4byte gBattleAnimPlayerMonIndex +_080DF694: .4byte gBattleAnimBankTarget +_080DF698: .4byte gBattleAnimBankAttacker _080DF69C: .4byte gBattleAnimArgs _080DF6A0: ldr r1, _080DF6E4 @ =gBattleAnimArgs @@ -43562,7 +43562,7 @@ _080DF6CA: str r0, [r5, 0x1C] ldr r1, _080DF6EC @ =move_anim_8074EE0 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 @@ -43581,13 +43581,13 @@ sub_80DF6F0: @ 80DF6F0 ldrsh r0, [r0, r1] cmp r0, 0 bne _080DF70C - ldr r4, _080DF708 @ =gBattleAnimPlayerMonIndex + ldr r4, _080DF708 @ =gBattleAnimBankAttacker b _080DF70E .align 2, 0 _080DF704: .4byte gBattleAnimArgs -_080DF708: .4byte gBattleAnimPlayerMonIndex +_080DF708: .4byte gBattleAnimBankAttacker _080DF70C: - ldr r4, _080DF750 @ =gBattleAnimEnemyMonIndex + ldr r4, _080DF750 @ =gBattleAnimBankTarget _080DF70E: ldrb r0, [r4] movs r1, 0 @@ -43614,12 +43614,12 @@ _080DF70E: str r0, [r5, 0x1C] ldr r1, _080DF75C @ =move_anim_8074EE0 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 .align 2, 0 -_080DF750: .4byte gBattleAnimEnemyMonIndex +_080DF750: .4byte gBattleAnimBankTarget _080DF754: .4byte gBattleAnimArgs _080DF758: .4byte sub_8078600 _080DF75C: .4byte move_anim_8074EE0 @@ -43629,7 +43629,7 @@ _080DF75C: .4byte move_anim_8074EE0 sub_80DF760: @ 80DF760 push {r4,lr} adds r4, r0, 0 - ldr r0, _080DF788 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DF788 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -43645,14 +43645,14 @@ _080DF77A: pop {r0} bx r0 .align 2, 0 -_080DF788: .4byte gBattleAnimPlayerMonIndex +_080DF788: .4byte gBattleAnimBankAttacker thumb_func_end sub_80DF760 thumb_func_start sub_80DF78C sub_80DF78C: @ 80DF78C push {r4-r7,lr} adds r6, r0, 0 - ldr r4, _080DF7E0 @ =gBattleAnimPlayerMonIndex + ldr r4, _080DF7E0 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -43688,7 +43688,7 @@ sub_80DF78C: @ 80DF78C lsrs r0, r7, 17 b _080DF7EE .align 2, 0 -_080DF7E0: .4byte gBattleAnimPlayerMonIndex +_080DF7E0: .4byte gBattleAnimBankAttacker _080DF7E4: .4byte gBattleAnimArgs _080DF7E8: .4byte gBankAttacker _080DF7EC: @@ -43864,7 +43864,7 @@ sub_80DF924: @ 80DF924 lsls r1, 3 ldr r0, _080DF950 @ =gTasks adds r4, r1, r0 - ldr r0, _080DF954 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DF954 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -43877,7 +43877,7 @@ sub_80DF924: @ 80DF924 b _080DF966 .align 2, 0 _080DF950: .4byte gTasks -_080DF954: .4byte gBattleAnimPlayerMonIndex +_080DF954: .4byte gBattleAnimBankAttacker _080DF958: .4byte REG_BG1HOFS _080DF95C: .4byte gUnknown_030042C0 _080DF960: @@ -43895,7 +43895,7 @@ _080DF966: strb r0, [r1, 0x8] mov r0, sp strb r5, [r0, 0x9] - ldr r0, _080DF9E8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DF9E8 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl sub_8077FC0 lsls r0, 24 @@ -43948,7 +43948,7 @@ _080DF9C4: _080DF9DC: .4byte REG_BG2HOFS _080DF9E0: .4byte gUnknown_03004288 _080DF9E4: .4byte 0xa2600001 -_080DF9E8: .4byte gBattleAnimPlayerMonIndex +_080DF9E8: .4byte gBattleAnimBankAttacker _080DF9EC: .4byte gUnknown_03004DE0 _080DF9F0: .4byte sub_80DF9F4 thumb_func_end sub_80DF924 @@ -44128,7 +44128,7 @@ sub_80DFB28: @ 80DFB28 movs r1, 0x5 bl __divsi3 adds r6, r0, 0 - ldr r1, _080DFBCC @ =gBattleAnimPlayerMonIndex + ldr r1, _080DFBCC @ =gBattleAnimBankAttacker mov r8, r1 ldrb r0, [r1] movs r1, 0x2 @@ -44194,7 +44194,7 @@ _080DFBB0: bx r0 .align 2, 0 _080DFBC8: .4byte gBattleAnimArgs -_080DFBCC: .4byte gBattleAnimPlayerMonIndex +_080DFBCC: .4byte gBattleAnimBankAttacker _080DFBD0: .4byte sub_80DFBD8 _080DFBD4: .4byte gUnknown_03000730 thumb_func_end sub_80DFB28 @@ -44251,7 +44251,7 @@ sub_80DFC24: @ 80DFC24 ldr r0, _080DFC5C @ =gBattleAnimArgs ldrh r0, [r0] strh r0, [r1, 0x8] - ldr r0, _080DFC60 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DFC60 @ =gBattleAnimBankAttacker ldrb r0, [r0] movs r2, 0x10 strh r2, [r1, 0xA] @@ -44268,7 +44268,7 @@ sub_80DFC24: @ 80DFC24 .align 2, 0 _080DFC58: .4byte gTasks _080DFC5C: .4byte gBattleAnimArgs -_080DFC60: .4byte gBattleAnimPlayerMonIndex +_080DFC60: .4byte gBattleAnimBankAttacker _080DFC64: .4byte REG_BLDALPHA _080DFC68: .4byte REG_BLDCNT _080DFC6C: .4byte 0x00003f42 @@ -44331,7 +44331,7 @@ sub_80DFC9C: @ 80DFC9C bne _080DFD1E ldr r2, _080DFD0C @ =gSprites ldr r1, _080DFD10 @ =gObjectBankIDs - ldr r0, _080DFD14 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DFD14 @ =gBattleAnimBankAttacker ldrb r0, [r0] adds r0, r1 ldrb r1, [r0] @@ -44352,7 +44352,7 @@ _080DFD04: .4byte gTasks _080DFD08: .4byte REG_BLDALPHA _080DFD0C: .4byte gSprites _080DFD10: .4byte gObjectBankIDs -_080DFD14: .4byte gBattleAnimPlayerMonIndex +_080DFD14: .4byte gBattleAnimBankAttacker _080DFD18: ldrh r0, [r4, 0xC] adds r0, 0x1 @@ -44454,7 +44454,7 @@ sub_80DFDC0: @ 80DFDC0 lsls r2, 5 adds r0, r2, 0 strh r0, [r1] - ldr r0, _080DFDEC @ =gBattleAnimPlayerMonIndex + ldr r0, _080DFDEC @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -44466,7 +44466,7 @@ sub_80DFDC0: @ 80DFDC0 b _080DFDFC .align 2, 0 _080DFDE8: .4byte REG_BLDALPHA -_080DFDEC: .4byte gBattleAnimPlayerMonIndex +_080DFDEC: .4byte gBattleAnimBankAttacker _080DFDF0: .4byte REG_BLDCNT _080DFDF4: .4byte 0x00003f42 _080DFDF8: @@ -44489,14 +44489,14 @@ _080DFE10: .4byte 0x00003f44 sub_80DFE14: @ 80DFE14 push {r4-r6,lr} adds r4, r0, 0 - ldr r6, _080DFE80 @ =gBattleAnimEnemyMonIndex + ldr r6, _080DFE80 @ =gBattleAnimBankTarget ldrb r0, [r6] movs r1, 0x2 bl sub_8077ABC lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x30] - ldr r5, _080DFE84 @ =gBattleAnimPlayerMonIndex + ldr r5, _080DFE84 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -44535,8 +44535,8 @@ sub_80DFE14: @ 80DFE14 pop {r0} bx r0 .align 2, 0 -_080DFE80: .4byte gBattleAnimEnemyMonIndex -_080DFE84: .4byte gBattleAnimPlayerMonIndex +_080DFE80: .4byte gBattleAnimBankTarget +_080DFE84: .4byte gBattleAnimBankAttacker _080DFE88: .4byte 0x0000ffd8 _080DFE8C: .4byte sub_80DFE90 thumb_func_end sub_80DFE14 @@ -44724,13 +44724,13 @@ sub_80DFFD0: @ 80DFFD0 adds r3, r0, 0 cmp r1, 0 bne _080DFFEC - ldr r0, _080DFFE8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080DFFE8 @ =gBattleAnimBankAttacker b _080DFFEE .align 2, 0 _080DFFE4: .4byte gBattleAnimArgs -_080DFFE8: .4byte gBattleAnimPlayerMonIndex +_080DFFE8: .4byte gBattleAnimBankAttacker _080DFFEC: - ldr r0, _080E001C @ =gBattleAnimEnemyMonIndex + ldr r0, _080E001C @ =gBattleAnimBankTarget _080DFFEE: ldrb r5, [r0] movs r6, 0x14 @@ -44755,7 +44755,7 @@ _080DFFEE: beq _080E0032 b _080E00A0 .align 2, 0 -_080E001C: .4byte gBattleAnimEnemyMonIndex +_080E001C: .4byte gBattleAnimBankTarget _080E0020: .4byte 0x000003ff _080E0024: .4byte 0xfffffc00 _080E0028: @@ -44867,7 +44867,7 @@ sub_80E00EC: @ 80E00EC lsls r1, 3 ldr r0, _080E0150 @ =gTasks adds r5, r1, r0 - ldr r4, _080E0154 @ =gBattleAnimPlayerMonIndex + ldr r4, _080E0154 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x1 bl sub_8077ABC @@ -44906,13 +44906,13 @@ sub_80E00EC: @ 80E00EC b _080E015E .align 2, 0 _080E0150: .4byte gTasks -_080E0154: .4byte gBattleAnimPlayerMonIndex +_080E0154: .4byte gBattleAnimBankAttacker _080E0158: .4byte 0x0000fff4 _080E015C: ldr r0, _080E01A8 @ =0x0000ffc0 _080E015E: strh r0, [r5, 0x18] - ldr r0, _080E01AC @ =gBattleAnimPlayerMonIndex + ldr r0, _080E01AC @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -44946,7 +44946,7 @@ _080E015E: b _080E01EE .align 2, 0 _080E01A8: .4byte 0x0000ffc0 -_080E01AC: .4byte gBattleAnimPlayerMonIndex +_080E01AC: .4byte gBattleAnimBankAttacker _080E01B0: .4byte gUnknown_030041B4 _080E01B4: .4byte REG_BLDCNT _080E01B8: .4byte 0x00003f42 @@ -45260,7 +45260,7 @@ _080E0430: .4byte gUnknown_03004240 _080E0434: .4byte REG_WININ _080E0438: .4byte 0x00003f3f _080E043C: - ldr r0, _080E045C @ =gBattleAnimEnemyMonIndex + ldr r0, _080E045C @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -45275,7 +45275,7 @@ _080E043C: ldr r1, _080E0468 @ =gUnknown_03004288 b _080E0476 .align 2, 0 -_080E045C: .4byte gBattleAnimEnemyMonIndex +_080E045C: .4byte gBattleAnimBankTarget _080E0460: .4byte REG_BLDCNT _080E0464: .4byte 0x00003f42 _080E0468: .4byte gUnknown_03004288 @@ -45328,7 +45328,7 @@ _080E04C4: .align 2, 0 _080E04CC: .4byte gUnknown_03004280 _080E04D0: - ldr r4, _080E051C @ =gBattleAnimEnemyMonIndex + ldr r4, _080E051C @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x1 bl sub_8077ABC @@ -45363,7 +45363,7 @@ _080E04D0: ldr r0, _080E0520 @ =0x0000fff4 b _080E0526 .align 2, 0 -_080E051C: .4byte gBattleAnimEnemyMonIndex +_080E051C: .4byte gBattleAnimBankTarget _080E0520: .4byte 0x0000fff4 _080E0524: ldr r0, _080E0538 @ =0x0000ffc0 @@ -45865,7 +45865,7 @@ sub_80E08CC: @ 80E08CC _080E08E2: lsls r0, r4, 24 lsrs r0, 24 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 cmp r0, 0xFF @@ -45901,7 +45901,7 @@ sub_80E0918: @ 80E0918 lsls r0, 24 lsrs r0, 24 mov r10, r0 - ldr r6, _080E09B8 @ =gBattleAnimPlayerMonIndex + ldr r6, _080E09B8 @ =gBattleAnimBankAttacker ldrb r0, [r6] bl GetBankIdentity_permutated lsls r0, 24 @@ -45935,7 +45935,7 @@ sub_80E0918: @ 80E0918 ldrb r0, [r6] movs r5, 0x2 eors r0, r5 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080E09A2 @@ -45969,7 +45969,7 @@ _080E09A2: pop {r0} bx r0 .align 2, 0 -_080E09B8: .4byte gBattleAnimPlayerMonIndex +_080E09B8: .4byte gBattleAnimBankAttacker _080E09BC: .4byte gSprites _080E09C0: .4byte gObjectBankIDs thumb_func_end sub_80E0918 @@ -45979,7 +45979,7 @@ sub_80E09C4: @ 80E09C4 push {r4-r6,lr} lsls r0, 24 lsrs r6, r0, 24 - ldr r4, _080E0A0C @ =gBattleAnimPlayerMonIndex + ldr r4, _080E0A0C @ =gBattleAnimBankAttacker ldrb r0, [r4] bl GetBankIdentity_permutated lsls r0, 24 @@ -45994,7 +45994,7 @@ sub_80E09C4: @ 80E09C4 ldrb r1, [r4] movs r0, 0x2 eors r0, r1 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080E0A00 @@ -46009,7 +46009,7 @@ _080E0A00: pop {r0} bx r0 .align 2, 0 -_080E0A0C: .4byte gBattleAnimPlayerMonIndex +_080E0A0C: .4byte gBattleAnimBankAttacker thumb_func_end sub_80E09C4 thumb_func_start sub_80E0A10 @@ -46032,7 +46032,7 @@ sub_80E0A10: @ 80E0A10 str r0, [r4, 0x1C] ldr r1, _080E0A48 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4} pop {r0} bx r0 @@ -46112,7 +46112,7 @@ _080E0AC4: lsls r0, 24 cmp r0, 0 bne _080E0B40 - ldr r4, _080E0B74 @ =gBattleAnimPlayerMonIndex + ldr r4, _080E0B74 @ =gBattleAnimBankAttacker ldrb r0, [r4] bl GetBankIdentity lsls r0, 24 @@ -46128,7 +46128,7 @@ _080E0AF4: ldrb r0, [r4] movs r6, 0x2 eors r0, r6 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -46180,12 +46180,12 @@ _080E0B64: .4byte REG_BLDCNT _080E0B68: .4byte 0x00003f42 _080E0B6C: .4byte 0x00000c08 _080E0B70: .4byte REG_BG1CNT -_080E0B74: .4byte gBattleAnimPlayerMonIndex +_080E0B74: .4byte gBattleAnimBankAttacker _080E0B78: .4byte gSprites _080E0B7C: .4byte gObjectBankIDs _080E0B80: .4byte 0x02019348 _080E0B84: - ldr r4, _080E0BA4 @ =gBattleAnimPlayerMonIndex + ldr r4, _080E0BA4 @ =gBattleAnimBankAttacker ldrb r0, [r4] bl GetBankSide lsls r0, 24 @@ -46201,7 +46201,7 @@ _080E0B84: ldr r1, _080E0BAC @ =gEnemyParty b _080E0BC0 .align 2, 0 -_080E0BA4: .4byte gBattleAnimPlayerMonIndex +_080E0BA4: .4byte gBattleAnimBankAttacker _080E0BA8: .4byte gBattlePartyID _080E0BAC: .4byte gEnemyParty _080E0BB0: @@ -46221,11 +46221,11 @@ _080E0BC0: lsrs r5, r0, 16 _080E0BCC: movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r0, _080E0C60 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E0C60 @ =gBattleAnimBankAttacker ldrb r0, [r0] adds r1, r4, 0 adds r2, r5, 0 @@ -46286,7 +46286,7 @@ _080E0BCC: .align 2, 0 _080E0C58: .4byte gBattlePartyID _080E0C5C: .4byte gPlayerParty -_080E0C60: .4byte gBattleAnimPlayerMonIndex +_080E0C60: .4byte gBattleAnimBankAttacker _080E0C64: .4byte 0x040000d4 _080E0C68: .4byte 0x85000400 _080E0C6C: .4byte gUnknown_08D1D574 @@ -46403,7 +46403,7 @@ _080E0D40: adds r0, 0x2 strh r5, [r0] movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 ldr r6, _080E0E10 @ =gSprites @@ -46446,7 +46446,7 @@ _080E0D84: cmp r0, 0x1 bne _080E0DE2 ldr r2, _080E0E1C @ =gObjectBankIDs - ldr r0, _080E0E20 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E0E20 @ =gBattleAnimBankAttacker ldrb r1, [r0] movs r0, 0x2 eors r0, r1 @@ -46489,7 +46489,7 @@ _080E0E10: .4byte gSprites _080E0E14: .4byte 0x040000d4 _080E0E18: .4byte 0x85000200 _080E0E1C: .4byte gObjectBankIDs -_080E0E20: .4byte gBattleAnimPlayerMonIndex +_080E0E20: .4byte gBattleAnimBankAttacker thumb_func_end sub_80E0CD0 thumb_func_start sub_80E0E24 @@ -46524,7 +46524,7 @@ _080E0E4C: .4byte _080E0E84 _080E0E6C: ldrb r0, [r2] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r2, r0, 24 b _080E0E8A @@ -46552,7 +46552,7 @@ _080E0E90: lsls r0, 24 lsrs r4, r0, 24 adds r0, r4, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080E0EB4 @@ -46622,7 +46622,7 @@ _080E0F18: .4byte gBattleAnimArgs sub_80E0F1C: @ 80E0F1C push {r4,r5,lr} adds r4, r0, 0 - ldr r5, _080E0F74 @ =gBattleAnimPlayerMonIndex + ldr r5, _080E0F74 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -46637,7 +46637,7 @@ sub_80E0F1C: @ 80E0F1C strh r0, [r4, 0x22] movs r0, 0x14 strh r0, [r4, 0x2E] - ldr r5, _080E0F78 @ =gBattleAnimEnemyMonIndex + ldr r5, _080E0F78 @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -46660,8 +46660,8 @@ sub_80E0F1C: @ 80E0F1C pop {r0} bx r0 .align 2, 0 -_080E0F74: .4byte gBattleAnimPlayerMonIndex -_080E0F78: .4byte gBattleAnimEnemyMonIndex +_080E0F74: .4byte gBattleAnimBankAttacker +_080E0F78: .4byte gBattleAnimBankTarget _080E0F7C: .4byte 0x0000ffd8 _080E0F80: .4byte sub_80E0F84 thumb_func_end sub_80E0F1C @@ -46687,7 +46687,7 @@ sub_80E0F84: @ 80E0F84 strh r1, [r5, 0x24] movs r0, 0x14 strh r0, [r5, 0x2E] - ldr r4, _080E0FE0 @ =gBattleAnimPlayerMonIndex + ldr r4, _080E0FE0 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -46711,7 +46711,7 @@ _080E0FD8: pop {r0} bx r0 .align 2, 0 -_080E0FE0: .4byte gBattleAnimPlayerMonIndex +_080E0FE0: .4byte gBattleAnimBankAttacker _080E0FE4: .4byte sub_80E0FE8 thumb_func_end sub_80E0F84 @@ -46737,7 +46737,7 @@ sub_80E1004: @ 80E1004 adds r6, r0, 0 movs r1, 0x1 bl sub_8078764 - ldr r0, _080E1064 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E1064 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -46751,7 +46751,7 @@ _080E1024: ldr r4, _080E1068 @ =gBattleAnimArgs ldrh r0, [r4, 0x8] strh r0, [r6, 0x2E] - ldr r5, _080E106C @ =gBattleAnimEnemyMonIndex + ldr r5, _080E106C @ =gBattleAnimBankTarget ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -46772,14 +46772,14 @@ _080E1024: str r0, [r6, 0x1C] ldr r1, _080E1074 @ =move_anim_8072740 adds r0, r6, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4-r6} pop {r0} bx r0 .align 2, 0 -_080E1064: .4byte gBattleAnimPlayerMonIndex +_080E1064: .4byte gBattleAnimBankAttacker _080E1068: .4byte gBattleAnimArgs -_080E106C: .4byte gBattleAnimEnemyMonIndex +_080E106C: .4byte gBattleAnimBankTarget _080E1070: .4byte sub_8078B34 _080E1074: .4byte move_anim_8072740 thumb_func_end sub_80E1004 @@ -46792,7 +46792,7 @@ sub_80E1078: @ 80E1078 adds r6, r0, 0 movs r1, 0x1 bl sub_80787B0 - ldr r4, _080E10F8 @ =gBattleAnimEnemyMonIndex + ldr r4, _080E10F8 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077EE4 @@ -46839,14 +46839,14 @@ _080E10D0: str r0, [r6, 0x1C] ldr r1, _080E1104 @ =move_anim_8074EE0 adds r0, r6, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r3} mov r8, r3 pop {r4-r7} pop {r0} bx r0 .align 2, 0 -_080E10F8: .4byte gBattleAnimEnemyMonIndex +_080E10F8: .4byte gBattleAnimBankTarget _080E10FC: .4byte gBattleAnimArgs _080E1100: .4byte sub_8078B34 _080E1104: .4byte move_anim_8074EE0 @@ -46872,7 +46872,7 @@ sub_80E1108: @ 80E1108 ldrsh r0, [r6, r1] cmp r0, 0 bne _080E117C - ldr r4, _080E1174 @ =gBattleAnimPlayerMonIndex + ldr r4, _080E1174 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -46905,7 +46905,7 @@ _080E1162: _080E1168: .4byte 0x000003ff _080E116C: .4byte 0xfffffc00 _080E1170: .4byte gBattleAnimArgs -_080E1174: .4byte gBattleAnimPlayerMonIndex +_080E1174: .4byte gBattleAnimBankAttacker _080E1178: .4byte sub_80E1198 _080E117C: ldrh r0, [r6, 0x2] @@ -47086,11 +47086,11 @@ _080E12B0: .4byte _080E1414 _080E12C4: movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x1C] - ldr r0, _080E12EC @ =gBattleAnimPlayerMonIndex + ldr r0, _080E12EC @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -47104,7 +47104,7 @@ _080E12C4: ldr r0, _080E12F4 @ =gUnknown_030041B4 b _080E1300 .align 2, 0 -_080E12EC: .4byte gBattleAnimPlayerMonIndex +_080E12EC: .4byte gBattleAnimBankAttacker _080E12F0: .4byte gUnknown_030042C0 _080E12F4: .4byte gUnknown_030041B4 _080E12F8: @@ -47115,7 +47115,7 @@ _080E12F8: _080E1300: ldrh r0, [r0] strh r0, [r4, 0x22] - ldr r0, _080E1344 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E1344 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl sub_8077FC0 lsls r0, 24 @@ -47146,7 +47146,7 @@ _080E1322: .align 2, 0 _080E133C: .4byte gUnknown_03004288 _080E1340: .4byte gUnknown_03004280 -_080E1344: .4byte gBattleAnimPlayerMonIndex +_080E1344: .4byte gBattleAnimBankAttacker _080E1348: .4byte gSprites _080E134C: ldrb r0, [r4, 0x1E] @@ -47281,7 +47281,7 @@ sub_80E143C: @ 80E143C lsls r0, 24 lsrs r5, r0, 24 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 ldr r2, _080E147C @ =gSprites @@ -47298,7 +47298,7 @@ sub_80E143C: @ 80E143C movs r4, 0 strh r4, [r1, 0x24] strh r4, [r1, 0x26] - ldr r0, _080E1480 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E1480 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -47309,7 +47309,7 @@ sub_80E143C: @ 80E143C b _080E148A .align 2, 0 _080E147C: .4byte gSprites -_080E1480: .4byte gBattleAnimPlayerMonIndex +_080E1480: .4byte gBattleAnimBankAttacker _080E1484: .4byte gUnknown_030041B4 _080E1488: ldr r0, _080E1498 @ =gUnknown_03004280 @@ -47379,7 +47379,7 @@ sub_80E14DC: @ 80E14DC _080E14FC: .4byte gTasks _080E1500: movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x1C] @@ -47459,11 +47459,11 @@ _080E158C: .4byte _080E165C _080E15A0: movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x1C] - ldr r0, _080E15C4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E15C4 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -47474,14 +47474,14 @@ _080E15A0: ldr r0, _080E15C8 @ =gUnknown_030042C0 b _080E15CE .align 2, 0 -_080E15C4: .4byte gBattleAnimPlayerMonIndex +_080E15C4: .4byte gBattleAnimBankAttacker _080E15C8: .4byte gUnknown_030042C0 _080E15CC: ldr r0, _080E15EC @ =gUnknown_03004288 _080E15CE: ldrh r0, [r0] strh r0, [r4, 0x20] - ldr r0, _080E15F0 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E15F0 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl sub_8077FC0 lsls r0, 24 @@ -47494,7 +47494,7 @@ _080E15CE: b _080E164A .align 2, 0 _080E15EC: .4byte gUnknown_03004288 -_080E15F0: .4byte gBattleAnimPlayerMonIndex +_080E15F0: .4byte gBattleAnimBankAttacker _080E15F4: ldrb r0, [r4, 0x1E] movs r1, 0x26 @@ -47668,13 +47668,13 @@ sub_80E1728: @ 80E1728 adds r7, r0, 0 cmp r1, 0 bne _080E1744 - ldr r0, _080E1740 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E1740 @ =gBattleAnimBankAttacker b _080E1746 .align 2, 0 _080E173C: .4byte gBattleAnimArgs -_080E1740: .4byte gBattleAnimPlayerMonIndex +_080E1740: .4byte gBattleAnimBankAttacker _080E1744: - ldr r0, _080E17A8 @ =gBattleAnimEnemyMonIndex + ldr r0, _080E17A8 @ =gBattleAnimBankTarget _080E1746: ldrb r4, [r0] movs r6, 0x18 @@ -47723,7 +47723,7 @@ _080E1762: pop {r0} bx r0 .align 2, 0 -_080E17A8: .4byte gBattleAnimEnemyMonIndex +_080E17A8: .4byte gBattleAnimBankTarget _080E17AC: .4byte sub_80E17B0 thumb_func_end sub_80E1728 @@ -47752,13 +47752,13 @@ sub_80E17CC: @ 80E17CC ldrsh r0, [r0, r1] cmp r0, 0 bne _080E17E8 - ldr r0, _080E17E4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E17E4 @ =gBattleAnimBankAttacker b _080E17EA .align 2, 0 _080E17E0: .4byte gBattleAnimArgs -_080E17E4: .4byte gBattleAnimPlayerMonIndex +_080E17E4: .4byte gBattleAnimBankAttacker _080E17E8: - ldr r0, _080E1848 @ =gBattleAnimEnemyMonIndex + ldr r0, _080E1848 @ =gBattleAnimBankTarget _080E17EA: ldrb r5, [r0] adds r0, r5, 0 @@ -47796,7 +47796,7 @@ _080E17EA: strh r0, [r6, 0x4] ldr r1, _080E185C @ =move_anim_8072740 adds r0, r6, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldrh r0, [r4, 0x4] strh r0, [r6, 0x2E] ldr r0, _080E1860 @ =sub_80782D8 @@ -47805,7 +47805,7 @@ _080E17EA: pop {r0} bx r0 .align 2, 0 -_080E1848: .4byte gBattleAnimEnemyMonIndex +_080E1848: .4byte gBattleAnimBankTarget _080E184C: .4byte 0x0000fff0 _080E1850: .4byte gBattleAnimArgs _080E1854: .4byte 0x000003ff @@ -47870,7 +47870,7 @@ _080E18C8: _080E18CE: lsls r0, r5, 24 lsrs r0, 24 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080E18F8 @@ -47899,7 +47899,7 @@ _080E18F8: _080E1904: .4byte gObjectBankIDs _080E1908: ldrb r0, [r6] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x1A] @@ -48282,13 +48282,13 @@ sub_80E1BB0: @ 80E1BB0 adds r6, r2, 0 cmp r0, 0 beq _080E1BD0 - ldr r0, _080E1BCC @ =gBattleAnimEnemyMonIndex + ldr r0, _080E1BCC @ =gBattleAnimBankTarget b _080E1BD2 .align 2, 0 _080E1BC8: .4byte gBattleAnimArgs -_080E1BCC: .4byte gBattleAnimEnemyMonIndex +_080E1BCC: .4byte gBattleAnimBankTarget _080E1BD0: - ldr r0, _080E1C40 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E1C40 @ =gBattleAnimBankAttacker _080E1BD2: ldrb r0, [r0] adds r5, r0, 0 @@ -48343,7 +48343,7 @@ _080E1BE2: pop {r0} bx r0 .align 2, 0 -_080E1C40: .4byte gBattleAnimPlayerMonIndex +_080E1C40: .4byte gBattleAnimBankAttacker _080E1C44: .4byte sub_80E1C58 _080E1C48: .4byte gTasks _080E1C4C: .4byte 0x000001ff @@ -48412,7 +48412,7 @@ sub_80E1CB4: @ 80E1CB4 strh r0, [r4, 0x22] ldrh r0, [r5, 0x4] strh r0, [r4, 0x2E] - ldr r0, _080E1CF0 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E1CF0 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -48427,7 +48427,7 @@ sub_80E1CB4: @ 80E1CB4 b _080E1D02 .align 2, 0 _080E1CEC: .4byte gBattleAnimArgs -_080E1CF0: .4byte gBattleAnimPlayerMonIndex +_080E1CF0: .4byte gBattleAnimBankAttacker _080E1CF4: ldrh r0, [r5, 0x6] strh r0, [r4, 0x30] @@ -48763,7 +48763,7 @@ sub_80E1F3C: @ 80E1F3C strh r2, [r4, 0x38] ldr r1, _080E1F84 @ =move_anim_8074EE0 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r1, _080E1F88 @ =sub_8078174 str r1, [r4, 0x1C] adds r0, r4, 0 @@ -49265,9 +49265,9 @@ sub_80E2324: @ 80E2324 lsrs r0, 24 mov r8, r0 movs r2, 0 - ldr r0, _080E239C @ =gBattleAnimPlayerMonIndex + ldr r0, _080E239C @ =gBattleAnimBankAttacker ldrb r6, [r0] - ldr r0, _080E23A0 @ =gBattleAnimEnemyMonIndex + ldr r0, _080E23A0 @ =gBattleAnimBankTarget ldrb r7, [r0] ldr r4, _080E23A4 @ =gBattleAnimArgs ldrh r1, [r4] @@ -49317,8 +49317,8 @@ _080E2382: pop {r0} bx r0 .align 2, 0 -_080E239C: .4byte gBattleAnimPlayerMonIndex -_080E23A0: .4byte gBattleAnimEnemyMonIndex +_080E239C: .4byte gBattleAnimBankAttacker +_080E23A0: .4byte gBattleAnimBankTarget _080E23A4: .4byte gBattleAnimArgs thumb_func_end sub_80E2324 @@ -49361,10 +49361,10 @@ _080E23EA: ldrh r0, [r4, 0x8] adds r0, 0x1 strh r0, [r4, 0x8] - ldr r0, _080E24A4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E24A4 @ =gBattleAnimBankAttacker ldrb r0, [r0] mov r9, r0 - ldr r0, _080E24A8 @ =gBattleAnimEnemyMonIndex + ldr r0, _080E24A8 @ =gBattleAnimBankTarget ldrb r0, [r0] mov r10, r0 ldrh r1, [r4, 0xC] @@ -49451,8 +49451,8 @@ _080E248E: .align 2, 0 _080E249C: .4byte gTasks _080E24A0: .4byte gBattleAnimArgs -_080E24A4: .4byte gBattleAnimPlayerMonIndex -_080E24A8: .4byte gBattleAnimEnemyMonIndex +_080E24A4: .4byte gBattleAnimBankAttacker +_080E24A8: .4byte gBattleAnimBankTarget _080E24AC: .4byte 0x0000ffff _080E24B0: .4byte gSprites _080E24B4: .4byte gHealthboxIDs @@ -49506,14 +49506,14 @@ _080E2508: ldr r1, _080E2514 @ =gSpriteCoordOffsetX _080E250A: adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 b _080E2520 .align 2, 0 _080E2514: .4byte gSpriteCoordOffsetX _080E2518: ldr r1, _080E2550 @ =gSpriteCoordOffsetY adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 _080E2520: movs r0, 0x3A ldrsh r1, [r4, r0] @@ -49643,7 +49643,7 @@ sub_80E260C: @ 80E260C push {r4-r6,lr} ldr r6, _080E2680 @ =gSprites ldr r4, _080E2684 @ =gObjectBankIDs - ldr r5, _080E2688 @ =gBattleAnimPlayerMonIndex + ldr r5, _080E2688 @ =gBattleAnimBankAttacker ldrb r0, [r5] adds r0, r4 ldrb r0, [r0] @@ -49658,7 +49658,7 @@ sub_80E260C: @ 80E260C adds r0, r2, 0 ands r0, r3 strb r0, [r1] - ldr r3, _080E268C @ =gBattleAnimEnemyMonIndex + ldr r3, _080E268C @ =gBattleAnimBankTarget ldrb r0, [r3] adds r0, r4 ldrb r1, [r0] @@ -49700,8 +49700,8 @@ sub_80E260C: @ 80E260C .align 2, 0 _080E2680: .4byte gSprites _080E2684: .4byte gObjectBankIDs -_080E2688: .4byte gBattleAnimPlayerMonIndex -_080E268C: .4byte gBattleAnimEnemyMonIndex +_080E2688: .4byte gBattleAnimBankAttacker +_080E268C: .4byte gBattleAnimBankTarget _080E2690: .4byte gBattleAnimArgs _080E2694: cmp r0, 0 @@ -49874,7 +49874,7 @@ _080E27CC: str r0, [r5, 0x1C] ldr r1, _080E27E4 @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 @@ -49912,7 +49912,7 @@ _080E2814: str r0, [r5, 0x1C] ldr r1, _080E2834 @ =sub_80DA48C adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 @@ -49926,7 +49926,7 @@ _080E2834: .4byte sub_80DA48C sub_80E2838: @ 80E2838 push {r4,lr} adds r4, r0, 0 - ldr r0, _080E2868 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E2868 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -49947,7 +49947,7 @@ _080E285C: pop {r0} bx r0 .align 2, 0 -_080E2868: .4byte gBattleAnimPlayerMonIndex +_080E2868: .4byte gBattleAnimBankAttacker _080E286C: .4byte gBattleAnimArgs thumb_func_end sub_80E2838 @@ -50007,7 +50007,7 @@ _080E28B4: strh r0, [r4, 0x26] ldr r1, _080E2900 @ =move_anim_8074EE0 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080E2904 @ =sub_80785E4 str r0, [r4, 0x1C] pop {r4,r5} @@ -50026,7 +50026,7 @@ sub_80E2908: @ 80E2908 adds r4, r0, 0 ldr r5, _080E2968 @ =gBattleAnimArgs ldrb r0, [r5] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x2E] @@ -50060,7 +50060,7 @@ sub_80E2908: @ 80E2908 bl StartSpriteAffineAnim ldr r1, _080E2970 @ =move_anim_8074EE0 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080E2974 @ =sub_80785E4 str r0, [r4, 0x1C] pop {r4,r5} @@ -50098,7 +50098,7 @@ _080E299C: strh r0, [r4, 0x2E] ldr r1, _080E29B8 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _080E29BC @ =sub_80782D8 str r0, [r4, 0x1C] pop {r4} @@ -50247,33 +50247,33 @@ _080E2AD0: movs r5, 0 _080E2AD2: mov r0, sp - ldr r1, _080E2AD8 @ =gBattleAnimPlayerMonIndex + ldr r1, _080E2AD8 @ =gBattleAnimBankAttacker b _080E2AE2 .align 2, 0 -_080E2AD8: .4byte gBattleAnimPlayerMonIndex +_080E2AD8: .4byte gBattleAnimBankAttacker _080E2ADC: movs r5, 0 _080E2ADE: mov r0, sp - ldr r1, _080E2AE8 @ =gBattleAnimEnemyMonIndex + ldr r1, _080E2AE8 @ =gBattleAnimBankTarget _080E2AE2: ldrb r1, [r1] strb r1, [r0] b _080E2B26 .align 2, 0 -_080E2AE8: .4byte gBattleAnimEnemyMonIndex +_080E2AE8: .4byte gBattleAnimBankTarget _080E2AEC: mov r1, sp - ldr r0, _080E2AFC @ =gBattleAnimPlayerMonIndex + ldr r0, _080E2AFC @ =gBattleAnimBankAttacker ldrb r0, [r0] strb r0, [r1] - ldr r0, _080E2B00 @ =gBattleAnimEnemyMonIndex + ldr r0, _080E2B00 @ =gBattleAnimBankTarget ldrb r0, [r0] strb r0, [r1, 0x1] b _080E2B26 .align 2, 0 -_080E2AFC: .4byte gBattleAnimPlayerMonIndex -_080E2B00: .4byte gBattleAnimEnemyMonIndex +_080E2AFC: .4byte gBattleAnimBankAttacker +_080E2B00: .4byte gBattleAnimBankTarget _080E2B04: mov r1, sp movs r0, 0xFF @@ -50282,14 +50282,14 @@ _080E2B04: _080E2B0C: movs r5, 0 mov r2, sp - ldr r0, _080E2B14 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E2B14 @ =gBattleAnimBankAttacker b _080E2B1E .align 2, 0 -_080E2B14: .4byte gBattleAnimPlayerMonIndex +_080E2B14: .4byte gBattleAnimBankAttacker _080E2B18: movs r5, 0 mov r2, sp - ldr r0, _080E2B70 @ =gBattleAnimEnemyMonIndex + ldr r0, _080E2B70 @ =gBattleAnimBankTarget _080E2B1E: ldrb r0, [r0] movs r1, 0x2 @@ -50306,7 +50306,7 @@ _080E2B2A: cmp r4, r0 beq _080E2B54 adds r0, r4, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080E2B54 @@ -50332,7 +50332,7 @@ _080E2B54: pop {r0} bx r0 .align 2, 0 -_080E2B70: .4byte gBattleAnimEnemyMonIndex +_080E2B70: .4byte gBattleAnimBankTarget thumb_func_end sub_80E2A7C thumb_func_start sub_80E2B74 @@ -50900,7 +50900,7 @@ _080E2FAC: lsls r0, 24 cmp r0, 0 bne _080E3028 - ldr r5, _080E305C @ =gBattleAnimPlayerMonIndex + ldr r5, _080E305C @ =gBattleAnimBankAttacker ldrb r0, [r5] bl GetBankIdentity lsls r0, 24 @@ -50916,7 +50916,7 @@ _080E2FDC: ldrb r0, [r5] movs r6, 0x2 eors r0, r6 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -50968,12 +50968,12 @@ _080E304C: .4byte REG_BLDCNT _080E3050: .4byte 0x00003f42 _080E3054: .4byte 0x00000c08 _080E3058: .4byte REG_BG1CNT -_080E305C: .4byte gBattleAnimPlayerMonIndex +_080E305C: .4byte gBattleAnimBankAttacker _080E3060: .4byte gSprites _080E3064: .4byte gObjectBankIDs _080E3068: .4byte 0x02019348 _080E306C: - ldr r4, _080E308C @ =gBattleAnimPlayerMonIndex + ldr r4, _080E308C @ =gBattleAnimBankAttacker ldrb r0, [r4] bl GetBankSide lsls r0, 24 @@ -50989,7 +50989,7 @@ _080E306C: ldr r1, _080E3094 @ =gEnemyParty b _080E30A8 .align 2, 0 -_080E308C: .4byte gBattleAnimPlayerMonIndex +_080E308C: .4byte gBattleAnimBankAttacker _080E3090: .4byte gBattlePartyID _080E3094: .4byte gEnemyParty _080E3098: @@ -51009,10 +51009,10 @@ _080E30A8: lsrs r4, r0, 16 _080E30B4: movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r5, r0, 24 - ldr r0, _080E3168 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E3168 @ =gBattleAnimBankAttacker ldrb r0, [r0] adds r1, r5, 0 adds r2, r4, 0 @@ -51089,7 +51089,7 @@ _080E3106: .align 2, 0 _080E3160: .4byte gBattlePartyID _080E3164: .4byte gPlayerParty -_080E3168: .4byte gBattleAnimPlayerMonIndex +_080E3168: .4byte gBattleAnimBankAttacker _080E316C: .4byte 0x040000d4 _080E3170: .4byte 0x85000400 _080E3174: .4byte gUnknown_08D20A30 @@ -51174,7 +51174,7 @@ _080E3208: adds r0, 0x2 strh r5, [r0] movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId ldr r0, _080E32CC @ =gSprites mov r8, r0 movs r2, 0x8 @@ -51200,7 +51200,7 @@ _080E3208: cmp r0, 0x1 bne _080E3288 ldr r2, _080E32D8 @ =gObjectBankIDs - ldr r0, _080E32DC @ =gBattleAnimPlayerMonIndex + ldr r0, _080E32DC @ =gBattleAnimBankAttacker ldrb r1, [r0] movs r0, 0x2 eors r0, r1 @@ -51253,7 +51253,7 @@ _080E32CC: .4byte gSprites _080E32D0: .4byte 0x040000d4 _080E32D4: .4byte 0x85000200 _080E32D8: .4byte gObjectBankIDs -_080E32DC: .4byte gBattleAnimPlayerMonIndex +_080E32DC: .4byte gBattleAnimBankAttacker thumb_func_end sub_80E3194 thumb_func_start sub_80E32E0 @@ -51344,13 +51344,13 @@ _080E336C: ldrsh r0, [r7, r1] cmp r0, 0 bne _080E3390 - ldr r0, _080E338C @ =gBattleAnimPlayerMonIndex + ldr r0, _080E338C @ =gBattleAnimBankAttacker b _080E3392 .align 2, 0 _080E3388: .4byte gTasks -_080E338C: .4byte gBattleAnimPlayerMonIndex +_080E338C: .4byte gBattleAnimBankAttacker _080E3390: - ldr r0, _080E34B4 @ =gBattleAnimEnemyMonIndex + ldr r0, _080E34B4 @ =gBattleAnimBankTarget _080E3392: ldrb r5, [r0] movs r0, 0x2 @@ -51367,7 +51367,7 @@ _080E3392: cmp r0, 0 beq _080E33C0 mov r0, r8 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 bne _080E33C0 @@ -51453,7 +51453,7 @@ _080E3432: bne _080E34A4 _080E345E: mov r0, r8 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -51495,7 +51495,7 @@ _080E34A4: ldrh r4, [r0] b _080E3522 .align 2, 0 -_080E34B4: .4byte gBattleAnimEnemyMonIndex +_080E34B4: .4byte gBattleAnimBankTarget _080E34B8: .4byte gUnknown_030042C4 _080E34BC: .4byte gUnknown_03004240 _080E34C0: .4byte REG_WININ @@ -52181,7 +52181,7 @@ sub_80E3A08: @ 80E3A08 lsrs r6, r0, 24 movs r4, 0 movs r2, 0 - ldr r0, _080E3A50 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E3A50 @ =gBattleAnimBankAttacker ldrb r3, [r0] movs r5, 0x1 _080E3A18: @@ -52214,7 +52214,7 @@ _080E3A34: pop {r0} bx r0 .align 2, 0 -_080E3A50: .4byte gBattleAnimPlayerMonIndex +_080E3A50: .4byte gBattleAnimBankAttacker _080E3A54: .4byte gBattleAnimArgs thumb_func_end sub_80E3A08 @@ -52235,7 +52235,7 @@ sub_80E3A58: @ 80E3A58 ldrsh r0, [r4, r1] cmp r0, 0 beq _080E3A94 - ldr r0, _080E3AC8 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E3AC8 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -52271,7 +52271,7 @@ _080E3A94: .align 2, 0 _080E3AC0: .4byte sub_80E3AD0 _080E3AC4: .4byte gBattleAnimArgs -_080E3AC8: .4byte gBattleAnimPlayerMonIndex +_080E3AC8: .4byte gBattleAnimBankAttacker _080E3ACC: .4byte gTasks thumb_func_end sub_80E3A58 @@ -52343,7 +52343,7 @@ sub_80E3B4C: @ 80E3B4C adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r0, _080E3B70 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E3B70 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide ldr r1, _080E3B74 @ =gBattleAnimArgs @@ -52356,7 +52356,7 @@ sub_80E3B4C: @ 80E3B4C pop {r0} bx r0 .align 2, 0 -_080E3B70: .4byte gBattleAnimPlayerMonIndex +_080E3B70: .4byte gBattleAnimBankAttacker _080E3B74: .4byte gBattleAnimArgs thumb_func_end sub_80E3B4C @@ -52366,7 +52366,7 @@ sub_80E3B78: @ 80E3B78 adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r0, _080E3B9C @ =gBattleAnimEnemyMonIndex + ldr r0, _080E3B9C @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide ldr r1, _080E3BA0 @ =gBattleAnimArgs @@ -52379,7 +52379,7 @@ sub_80E3B78: @ 80E3B78 pop {r0} bx r0 .align 2, 0 -_080E3B9C: .4byte gBattleAnimEnemyMonIndex +_080E3B9C: .4byte gBattleAnimBankTarget _080E3BA0: .4byte gBattleAnimArgs thumb_func_end sub_80E3B78 @@ -52390,10 +52390,10 @@ sub_80E3BA4: @ 80E3BA4 lsrs r3, r0, 24 ldr r5, _080E3BD0 @ =gBattleAnimArgs movs r4, 0 - ldr r0, _080E3BD4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E3BD4 @ =gBattleAnimBankAttacker ldrb r2, [r0] movs r0, 0x2 - ldr r1, _080E3BD8 @ =gBattleAnimEnemyMonIndex + ldr r1, _080E3BD8 @ =gBattleAnimBankTarget eors r0, r2 ldrb r1, [r1] cmp r0, r1 @@ -52408,8 +52408,8 @@ _080E3BC0: bx r0 .align 2, 0 _080E3BD0: .4byte gBattleAnimArgs -_080E3BD4: .4byte gBattleAnimPlayerMonIndex -_080E3BD8: .4byte gBattleAnimEnemyMonIndex +_080E3BD4: .4byte gBattleAnimBankAttacker +_080E3BD8: .4byte gBattleAnimBankTarget thumb_func_end sub_80E3BA4 thumb_func_start sub_80E3BDC @@ -52420,13 +52420,13 @@ sub_80E3BDC: @ 80E3BDC movs r4, 0 ldr r6, _080E3C3C @ =gSprites _080E3BE6: - ldr r0, _080E3C40 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E3C40 @ =gBattleAnimBankAttacker ldrb r0, [r0] cmp r4, r0 beq _080E3C24 lsls r0, r4, 24 lsrs r0, 24 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _080E3C24 @@ -52463,7 +52463,7 @@ _080E3C24: bx r0 .align 2, 0 _080E3C3C: .4byte gSprites -_080E3C40: .4byte gBattleAnimPlayerMonIndex +_080E3C40: .4byte gBattleAnimBankAttacker _080E3C44: .4byte gObjectBankIDs _080E3C48: .4byte gBattleAnimArgs thumb_func_end sub_80E3BDC @@ -52513,7 +52513,7 @@ sub_80E3C4C: @ 80E3C4C cmp r1, 0 beq _080E3CB2 adds r0, r6, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 bne _080E3CB2 @@ -52986,14 +52986,14 @@ _080E4068: .4byte gBattleAnimArgs _080E406C: cmp r0, 0x1 bne _080E4078 - ldr r0, _080E4074 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E4074 @ =gBattleAnimBankAttacker b _080E407E .align 2, 0 -_080E4074: .4byte gBattleAnimPlayerMonIndex +_080E4074: .4byte gBattleAnimBankAttacker _080E4078: cmp r0, 0x2 bne _080E4084 - ldr r0, _080E409C @ =gBattleAnimEnemyMonIndex + ldr r0, _080E409C @ =gBattleAnimBankTarget _080E407E: ldrb r0, [r0] adds r4, r0, 0 @@ -53010,7 +53010,7 @@ _080E4084: ldr r0, _080E40A4 @ =0x02014800 b _080E40AA .align 2, 0 -_080E409C: .4byte gBattleAnimEnemyMonIndex +_080E409C: .4byte gBattleAnimBankTarget _080E40A0: .4byte gBattleAnimArgs _080E40A4: .4byte 0x02014800 _080E40A8: @@ -53073,14 +53073,14 @@ _080E4110: .4byte gBattleAnimArgs _080E4114: cmp r0, 0x1 bne _080E4120 - ldr r0, _080E411C @ =gBattleAnimPlayerMonIndex + ldr r0, _080E411C @ =gBattleAnimBankAttacker b _080E4126 .align 2, 0 -_080E411C: .4byte gBattleAnimPlayerMonIndex +_080E411C: .4byte gBattleAnimBankAttacker _080E4120: cmp r0, 0x2 bne _080E412C - ldr r0, _080E4148 @ =gBattleAnimEnemyMonIndex + ldr r0, _080E4148 @ =gBattleAnimBankTarget _080E4126: ldrb r0, [r0] adds r4, r0, 0 @@ -53100,7 +53100,7 @@ _080E412C: ldr r0, _080E4154 @ =0x02014800 b _080E415A .align 2, 0 -_080E4148: .4byte gBattleAnimEnemyMonIndex +_080E4148: .4byte gBattleAnimBankTarget _080E414C: .4byte gPlttBufferUnfaded _080E4150: .4byte gBattleAnimArgs _080E4154: .4byte 0x02014800 @@ -53160,14 +53160,14 @@ _080E41B8: .4byte gBattleAnimArgs _080E41BC: cmp r0, 0x1 bne _080E41C8 - ldr r0, _080E41C4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E41C4 @ =gBattleAnimBankAttacker b _080E41CE .align 2, 0 -_080E41C4: .4byte gBattleAnimPlayerMonIndex +_080E41C4: .4byte gBattleAnimBankAttacker _080E41C8: cmp r0, 0x2 bne _080E41D4 - ldr r0, _080E41F4 @ =gBattleAnimEnemyMonIndex + ldr r0, _080E41F4 @ =gBattleAnimBankTarget _080E41CE: ldrb r0, [r0] adds r4, r0, 0 @@ -53187,7 +53187,7 @@ _080E41D4: pop {r0} bx r0 .align 2, 0 -_080E41F4: .4byte gBattleAnimEnemyMonIndex +_080E41F4: .4byte gBattleAnimBankTarget _080E41F8: .4byte gPlttBufferUnfaded _080E41FC: .4byte gPlttBufferFaded thumb_func_end sub_80E4178 @@ -53226,11 +53226,11 @@ sub_80E4234: @ 80E4234 push {lr} lsls r0, 24 lsrs r0, 24 - ldr r2, _080E4254 @ =gBattleAnimPlayerMonIndex + ldr r2, _080E4254 @ =gBattleAnimBankAttacker ldr r1, _080E4258 @ =gBankTarget ldrb r1, [r1] strb r1, [r2] - ldr r2, _080E425C @ =gBattleAnimEnemyMonIndex + ldr r2, _080E425C @ =gBattleAnimBankTarget ldr r1, _080E4260 @ =gEffectBank ldrb r1, [r1] strb r1, [r2] @@ -53238,9 +53238,9 @@ sub_80E4234: @ 80E4234 pop {r0} bx r0 .align 2, 0 -_080E4254: .4byte gBattleAnimPlayerMonIndex +_080E4254: .4byte gBattleAnimBankAttacker _080E4258: .4byte gBankTarget -_080E425C: .4byte gBattleAnimEnemyMonIndex +_080E425C: .4byte gBattleAnimBankTarget _080E4260: .4byte gEffectBank thumb_func_end sub_80E4234 @@ -53249,11 +53249,11 @@ sub_80E4264: @ 80E4264 push {r4,r5,lr} lsls r0, 24 lsrs r5, r0, 24 - ldr r0, _080E428C @ =gBattleAnimPlayerMonIndex + ldr r0, _080E428C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide adds r4, r0, 0 - ldr r0, _080E4290 @ =gBattleAnimEnemyMonIndex + ldr r0, _080E4290 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r4, 24 @@ -53264,8 +53264,8 @@ sub_80E4264: @ 80E4264 movs r0, 0x1 b _080E429C .align 2, 0 -_080E428C: .4byte gBattleAnimPlayerMonIndex -_080E4290: .4byte gBattleAnimEnemyMonIndex +_080E428C: .4byte gBattleAnimBankAttacker +_080E4290: .4byte gBattleAnimBankTarget _080E4294: .4byte gBattleAnimArgs _080E4298: ldr r1, _080E42AC @ =gBattleAnimArgs @@ -53286,7 +53286,7 @@ sub_80E42B0: @ 80E42B0 push {lr} lsls r0, 24 lsrs r0, 24 - ldr r2, _080E42C8 @ =gBattleAnimEnemyMonIndex + ldr r2, _080E42C8 @ =gBattleAnimBankTarget ldr r1, _080E42CC @ =gBankTarget ldrb r1, [r1] strb r1, [r2] @@ -53294,7 +53294,7 @@ sub_80E42B0: @ 80E42B0 pop {r0} bx r0 .align 2, 0 -_080E42C8: .4byte gBattleAnimEnemyMonIndex +_080E42C8: .4byte gBattleAnimBankTarget _080E42CC: .4byte gBankTarget thumb_func_end sub_80E42B0 @@ -53303,11 +53303,11 @@ sub_80E42D0: @ 80E42D0 push {lr} lsls r0, 24 lsrs r0, 24 - ldr r2, _080E42F0 @ =gBattleAnimPlayerMonIndex + ldr r2, _080E42F0 @ =gBattleAnimBankAttacker ldr r1, _080E42F4 @ =gBankAttacker ldrb r1, [r1] strb r1, [r2] - ldr r2, _080E42F8 @ =gBattleAnimEnemyMonIndex + ldr r2, _080E42F8 @ =gBattleAnimBankTarget ldr r1, _080E42FC @ =gEffectBank ldrb r1, [r1] strb r1, [r2] @@ -53315,9 +53315,9 @@ sub_80E42D0: @ 80E42D0 pop {r0} bx r0 .align 2, 0 -_080E42F0: .4byte gBattleAnimPlayerMonIndex +_080E42F0: .4byte gBattleAnimBankAttacker _080E42F4: .4byte gBankAttacker -_080E42F8: .4byte gBattleAnimEnemyMonIndex +_080E42F8: .4byte gBattleAnimBankTarget _080E42FC: .4byte gEffectBank thumb_func_end sub_80E42D0 @@ -53339,7 +53339,7 @@ _080E4318: adds r3, r4 lsls r3, 3 adds r3, r0 - ldr r1, _080E4358 @ =gBattleAnimPlayerMonIndex + ldr r1, _080E4358 @ =gBattleAnimBankAttacker ldrb r0, [r1] lsls r0, 2 ldr r2, _080E435C @ =0x02017800 @@ -53367,7 +53367,7 @@ _080E434E: bx r0 .align 2, 0 _080E4354: .4byte gTasks -_080E4358: .4byte gBattleAnimPlayerMonIndex +_080E4358: .4byte gBattleAnimBankAttacker _080E435C: .4byte 0x02017800 _080E4360: .4byte sub_80E4368 _080E4364: .4byte gAnimVisualTaskCount @@ -53385,7 +53385,7 @@ sub_80E4368: @ 80E4368 lsls r0, 5 cmp r1, r0 bne _080E43A8 - ldr r0, _080E43B4 @ =gBattleAnimPlayerMonIndex + ldr r0, _080E43B4 @ =gBattleAnimBankAttacker ldrb r3, [r0] lsls r3, 2 ldr r0, _080E43B8 @ =0x02017800 @@ -53412,7 +53412,7 @@ _080E43A8: bx r0 .align 2, 0 _080E43B0: .4byte gBattleAnimArgs -_080E43B4: .4byte gBattleAnimPlayerMonIndex +_080E43B4: .4byte gBattleAnimBankAttacker _080E43B8: .4byte 0x02017800 _080E43BC: .4byte gTasks thumb_func_end sub_80E4368 diff --git a/asm/battle_anim_81258BC.s b/asm/battle_anim_81258BC.s index a50b089db..3c6193b3b 100644 --- a/asm/battle_anim_81258BC.s +++ b/asm/battle_anim_81258BC.s @@ -403,29 +403,29 @@ _0812B1CC: adds r2, r0, 0 cmp r1, 0 bne _0812B1E8 - ldr r0, _0812B1E4 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812B1E4 @ =gBattleAnimBankAttacker ldrb r4, [r0] b _0812B20E .align 2, 0 _0812B1E0: .4byte gBattleAnimArgs -_0812B1E4: .4byte gBattleAnimPlayerMonIndex +_0812B1E4: .4byte gBattleAnimBankAttacker _0812B1E8: cmp r1, 0x1 bne _0812B1F8 - ldr r0, _0812B1F4 @ =gBattleAnimEnemyMonIndex + ldr r0, _0812B1F4 @ =gBattleAnimBankTarget ldrb r4, [r0] b _0812B20E .align 2, 0 -_0812B1F4: .4byte gBattleAnimEnemyMonIndex +_0812B1F4: .4byte gBattleAnimBankTarget _0812B1F8: cmp r1, 0x2 bne _0812B204 - ldr r0, _0812B200 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812B200 @ =gBattleAnimBankAttacker b _0812B206 .align 2, 0 -_0812B200: .4byte gBattleAnimPlayerMonIndex +_0812B200: .4byte gBattleAnimBankAttacker _0812B204: - ldr r0, _0812B230 @ =gBattleAnimEnemyMonIndex + ldr r0, _0812B230 @ =gBattleAnimBankTarget _0812B206: ldrb r1, [r0] movs r0, 0x2 @@ -440,7 +440,7 @@ _0812B20E: bne _0812B234 _0812B21A: adds r0, r4, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 bne _0812B234 @@ -448,7 +448,7 @@ _0812B21A: bl DestroyAnimVisualTask b _0812B2B0 .align 2, 0 -_0812B230: .4byte gBattleAnimEnemyMonIndex +_0812B230: .4byte gBattleAnimBankTarget _0812B234: adds r0, r4, 0 bl GetBankSide @@ -534,7 +534,7 @@ sub_812B2B8: @ 812B2B8 _0812B2D8: .4byte 0x02019348 _0812B2DC: ldr r1, _0812B304 @ =gUnknown_0202F7CA - ldr r0, _0812B308 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812B308 @ =gBattleAnimBankAttacker ldrb r0, [r0] lsls r0, 1 adds r0, r1 @@ -554,7 +554,7 @@ _0812B2F6: bx r0 .align 2, 0 _0812B304: .4byte gUnknown_0202F7CA -_0812B308: .4byte gBattleAnimPlayerMonIndex +_0812B308: .4byte gBattleAnimBankAttacker thumb_func_end sub_812B2B8 thumb_func_start sub_812B30C diff --git a/asm/battle_anim_812C144.s b/asm/battle_anim_812C144.s index bae3d9bc2..4562ad2f5 100644 --- a/asm/battle_anim_812C144.s +++ b/asm/battle_anim_812C144.s @@ -90,7 +90,7 @@ sub_812C1D0: @ 812C1D0 adds r5, r0, 0 lsls r5, 24 lsrs r5, 24 - ldr r6, _0812C21C @ =gBattleAnimEnemyMonIndex + ldr r6, _0812C21C @ =gBattleAnimBankTarget ldrb r0, [r6] movs r1, 0x2 bl sub_8077ABC @@ -120,7 +120,7 @@ sub_812C1D0: @ 812C1D0 pop {r0} bx r0 .align 2, 0 -_0812C21C: .4byte gBattleAnimEnemyMonIndex +_0812C21C: .4byte gBattleAnimBankTarget thumb_func_end sub_812C1D0 thumb_func_start sub_812C220 @@ -135,7 +135,7 @@ sub_812C220: @ 812C220 strh r0, [r4, 0x30] ldr r1, _0812C25C @ =sub_812C268 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r1, _0812C260 @ =REG_BLDCNT movs r2, 0xFD lsls r2, 6 @@ -211,7 +211,7 @@ sub_812C2BC: @ 812C2BC push {r4-r7,lr} sub sp, 0x4 adds r5, r0, 0 - ldr r4, _0812C348 @ =gBattleAnimEnemyMonIndex + ldr r4, _0812C348 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -267,13 +267,13 @@ _0812C31A: str r0, [r5, 0x1C] ldr r1, _0812C354 @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 add sp, 0x4 pop {r4-r7} pop {r0} bx r0 .align 2, 0 -_0812C348: .4byte gBattleAnimEnemyMonIndex +_0812C348: .4byte gBattleAnimBankTarget _0812C34C: .4byte gBattleAnimArgs _0812C350: .4byte sub_8078B34 _0812C354: .4byte move_anim_8072740 @@ -797,7 +797,7 @@ sub_812C720: @ 812C720 adds r4, r0, 0 movs r1, 0x1 bl sub_80787B0 - ldr r0, _0812C784 @ =gBattleAnimEnemyMonIndex + ldr r0, _0812C784 @ =gBattleAnimBankTarget ldrb r0, [r0] mov r5, sp adds r5, 0x2 @@ -805,7 +805,7 @@ sub_812C720: @ 812C720 mov r2, sp adds r3, r5, 0 bl sub_807A3FC - ldr r0, _0812C788 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812C788 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -839,8 +839,8 @@ _0812C754: pop {r0} bx r0 .align 2, 0 -_0812C784: .4byte gBattleAnimEnemyMonIndex -_0812C788: .4byte gBattleAnimPlayerMonIndex +_0812C784: .4byte gBattleAnimBankTarget +_0812C788: .4byte gBattleAnimBankAttacker _0812C78C: .4byte gBattleAnimArgs _0812C790: .4byte 0x0000ffce _0812C794: .4byte sub_812C798 @@ -862,7 +862,7 @@ sub_812C798: @ 812C798 str r0, [r4, 0x1C] ldr r1, _0812C7C4 @ =sub_812C7C8 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 _0812C7BA: pop {r4} pop {r0} @@ -929,7 +929,7 @@ sub_812C80C: @ 812C80C str r0, [r4, 0x1C] ldr r1, _0812C844 @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 pop {r4,r5} pop {r0} bx r0 @@ -958,7 +958,7 @@ sub_812C848: @ 812C848 lsls r0, 24 cmp r0, 0 bne _0812C89C - ldr r0, _0812C888 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812C888 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -968,7 +968,7 @@ sub_812C848: @ 812C848 b _0812C8A2 .align 2, 0 _0812C884: .4byte gBattleAnimArgs -_0812C888: .4byte gBattleAnimPlayerMonIndex +_0812C888: .4byte gBattleAnimBankAttacker _0812C88C: movs r1, 0x4 ldrsh r0, [r5, r1] @@ -1058,7 +1058,7 @@ sub_812C924: @ 812C924 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - ldr r0, _0812C940 @ =gBattleAnimEnemyMonIndex + ldr r0, _0812C940 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -1069,7 +1069,7 @@ sub_812C924: @ 812C924 movs r0, 0 b _0812C94C .align 2, 0 -_0812C940: .4byte gBattleAnimEnemyMonIndex +_0812C940: .4byte gBattleAnimBankTarget _0812C944: .4byte gBattleAnimArgs _0812C948: ldr r1, _0812C95C @ =gBattleAnimArgs @@ -1307,7 +1307,7 @@ sub_812CAFC: @ 812CAFC ldrsh r0, [r6, r1] cmp r0, 0 bne _0812CB28 - ldr r4, _0812CB74 @ =gBattleAnimPlayerMonIndex + ldr r4, _0812CB74 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -1358,7 +1358,7 @@ _0812CB28: b _0812CB8A .align 2, 0 _0812CB70: .4byte gBattleAnimArgs -_0812CB74: .4byte gBattleAnimPlayerMonIndex +_0812CB74: .4byte gBattleAnimBankAttacker _0812CB78: .4byte 0x000003ff _0812CB7C: .4byte 0xfffffc00 _0812CB80: .4byte 0x0000fff4 @@ -1553,13 +1553,13 @@ sub_812CCE8: @ 812CCE8 ldrsh r0, [r6, r1] cmp r0, 0 bne _0812CD04 - ldr r4, _0812CD00 @ =gBattleAnimPlayerMonIndex + ldr r4, _0812CD00 @ =gBattleAnimBankAttacker b _0812CD06 .align 2, 0 _0812CCFC: .4byte gBattleAnimArgs -_0812CD00: .4byte gBattleAnimPlayerMonIndex +_0812CD00: .4byte gBattleAnimBankAttacker _0812CD04: - ldr r4, _0812CD58 @ =gBattleAnimEnemyMonIndex + ldr r4, _0812CD58 @ =gBattleAnimBankTarget _0812CD06: ldrb r0, [r4] movs r1, 0 @@ -1602,7 +1602,7 @@ _0812CD3E: pop {r0} bx r0 .align 2, 0 -_0812CD58: .4byte gBattleAnimEnemyMonIndex +_0812CD58: .4byte gBattleAnimBankTarget _0812CD5C: .4byte gBattleAnimArgs _0812CD60: .4byte sub_812CD64 thumb_func_end sub_812CCE8 @@ -1675,14 +1675,14 @@ sub_812CDC8: @ 812CDC8 ldrsh r0, [r0, r1] cmp r0, 0 bne _0812CDF4 - ldr r4, _0812CDF0 @ =gBattleAnimPlayerMonIndex + ldr r4, _0812CDF0 @ =gBattleAnimBankAttacker b _0812CDF6 .align 2, 0 _0812CDE8: .4byte gTasks _0812CDEC: .4byte gBattleAnimArgs -_0812CDF0: .4byte gBattleAnimPlayerMonIndex +_0812CDF0: .4byte gBattleAnimBankAttacker _0812CDF4: - ldr r4, _0812CE3C @ =gBattleAnimEnemyMonIndex + ldr r4, _0812CE3C @ =gBattleAnimBankTarget _0812CDF6: ldrb r0, [r4] bl sub_8077FC0 @@ -1718,7 +1718,7 @@ _0812CE20: ldr r0, _0812CE44 @ =gUnknown_030042C0 b _0812CE4A .align 2, 0 -_0812CE3C: .4byte gBattleAnimEnemyMonIndex +_0812CE3C: .4byte gBattleAnimBankTarget _0812CE40: .4byte gBattleAnimArgs _0812CE44: .4byte gUnknown_030042C0 _0812CE48: @@ -1975,7 +1975,7 @@ sub_812D008: @ 812D008 movs r5, 0 strh r5, [r4, 0x8] strh r5, [r4, 0xA] - ldr r6, _0812D060 @ =gBattleAnimPlayerMonIndex + ldr r6, _0812D060 @ =gBattleAnimBankAttacker ldrb r0, [r6] movs r1, 0x2 bl sub_8077ABC @@ -1994,7 +1994,7 @@ sub_812D008: @ 812D008 strh r0, [r4, 0x12] strh r5, [r4, 0x14] movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -2005,7 +2005,7 @@ sub_812D008: @ 812D008 bx r0 .align 2, 0 _0812D05C: .4byte gTasks -_0812D060: .4byte gBattleAnimPlayerMonIndex +_0812D060: .4byte gBattleAnimBankAttacker _0812D064: .4byte 0x0000ffec _0812D068: .4byte sub_812D06C thumb_func_end sub_812D008 @@ -2350,7 +2350,7 @@ _0812D2F0: bne _0812D33C ldr r1, _0812D344 @ =move_anim_8072740 adds r0, r5, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldrh r0, [r5, 0x24] ldrh r2, [r5, 0x20] adds r0, r2 @@ -2364,7 +2364,7 @@ _0812D2F0: strh r1, [r5, 0x26] movs r0, 0x14 strh r0, [r5, 0x2E] - ldr r4, _0812D348 @ =gBattleAnimEnemyMonIndex + ldr r4, _0812D348 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -2385,7 +2385,7 @@ _0812D33C: bx r0 .align 2, 0 _0812D344: .4byte move_anim_8072740 -_0812D348: .4byte gBattleAnimEnemyMonIndex +_0812D348: .4byte gBattleAnimBankTarget _0812D34C: .4byte sub_8078B34 thumb_func_end sub_812D294 @@ -2410,7 +2410,7 @@ sub_812D350: @ 812D350 _0812D370: .4byte gTasks _0812D374: movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -2442,7 +2442,7 @@ sub_812D3AC: @ 812D3AC push {r4-r6,lr} adds r5, r0, 0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r6, r0, 24 movs r1, 0x2E @@ -2461,7 +2461,7 @@ _0812D3CC: beq _0812D490 b _0812D4AE _0812D3D6: - ldr r4, _0812D408 @ =gBattleAnimPlayerMonIndex + ldr r4, _0812D408 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -2483,7 +2483,7 @@ _0812D3D6: strh r0, [r5, 0x32] b _0812D484 .align 2, 0 -_0812D408: .4byte gBattleAnimPlayerMonIndex +_0812D408: .4byte gBattleAnimBankAttacker _0812D40C: ldrh r0, [r5, 0x30] adds r0, 0x60 @@ -2575,7 +2575,7 @@ _0812D4AE: sub_812D4B4: @ 812D4B4 push {r4,lr} adds r4, r0, 0 - ldr r0, _0812D4CC @ =gBattleAnimPlayerMonIndex + ldr r0, _0812D4CC @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -2584,7 +2584,7 @@ sub_812D4B4: @ 812D4B4 ldr r0, _0812D4D0 @ =0x0000fff0 b _0812D4D8 .align 2, 0 -_0812D4CC: .4byte gBattleAnimPlayerMonIndex +_0812D4CC: .4byte gBattleAnimBankAttacker _0812D4D0: .4byte 0x0000fff0 _0812D4D4: movs r0, 0x80 @@ -2609,7 +2609,7 @@ sub_812D4EC: @ 812D4EC ldrh r0, [r4, 0x2E] adds r0, 0x48 strh r0, [r4, 0x2E] - ldr r0, _0812D50C @ =gBattleAnimPlayerMonIndex + ldr r0, _0812D50C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -2620,7 +2620,7 @@ sub_812D4EC: @ 812D4EC asrs r0, 20 b _0812D518 .align 2, 0 -_0812D50C: .4byte gBattleAnimPlayerMonIndex +_0812D50C: .4byte gBattleAnimBankAttacker _0812D510: ldrh r0, [r4, 0x2E] lsls r0, 16 @@ -2830,7 +2830,7 @@ sub_812D674: @ 812D674 cmp r0, 0 bne _0812D6B4 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -2874,7 +2874,7 @@ sub_812D6CC: @ 812D6CC cmp r0, 0 bne _0812D70C movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -2920,7 +2920,7 @@ _0812D736: movs r0, 0x90 lsls r0, 4 strh r0, [r4, 0x30] - ldr r0, _0812D75C @ =gBattleAnimPlayerMonIndex + ldr r0, _0812D75C @ =gBattleAnimBankAttacker ldrb r0, [r0] movs r1, 0x3 bl sub_8077ABC @@ -2932,7 +2932,7 @@ _0812D736: strh r0, [r4, 0x2E] b _0812D788 .align 2, 0 -_0812D75C: .4byte gBattleAnimPlayerMonIndex +_0812D75C: .4byte gBattleAnimBankAttacker _0812D760: ldrh r2, [r4, 0x30] lsls r1, r2, 16 @@ -2975,7 +2975,7 @@ sub_812D790: @ 812D790 cmp r0, 0 bne _0812D7D0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -3044,7 +3044,7 @@ _0812D834: ldr r1, _0812D850 @ =REG_MOSAIC movs r0, 0 strh r0, [r1] - ldr r0, _0812D854 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812D854 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -3055,7 +3055,7 @@ _0812D834: b _0812D85E .align 2, 0 _0812D850: .4byte REG_MOSAIC -_0812D854: .4byte gBattleAnimPlayerMonIndex +_0812D854: .4byte gBattleAnimBankAttacker _0812D858: .4byte REG_BG1CNT _0812D85C: ldr r0, _0812D87C @ =REG_BG2CNT @@ -3111,9 +3111,9 @@ _0812D8BC: .align 2, 0 _0812D8C0: .4byte REG_MOSAIC _0812D8C4: - ldr r5, _0812D8F4 @ =gBattleAnimPlayerMonIndex + ldr r5, _0812D8F4 @ =gBattleAnimBankAttacker ldrb r0, [r5] - ldr r1, _0812D8F8 @ =gBattleAnimEnemyMonIndex + ldr r1, _0812D8F8 @ =gBattleAnimBankTarget ldrb r1, [r1] mov r2, r8 lsls r4, r2, 2 @@ -3133,8 +3133,8 @@ _0812D8C4: movs r1, 0 b _0812D906 .align 2, 0 -_0812D8F4: .4byte gBattleAnimPlayerMonIndex -_0812D8F8: .4byte gBattleAnimEnemyMonIndex +_0812D8F4: .4byte gBattleAnimBankAttacker +_0812D8F8: .4byte gBattleAnimBankTarget _0812D8FC: ldrb r0, [r5] bl GetBankIdentity @@ -3145,7 +3145,7 @@ _0812D906: lsls r1, 2 adds r1, r0 ldr r2, _0812D9D0 @ =gBattleMonForms - ldr r0, _0812D9D4 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812D9D4 @ =gBattleAnimBankAttacker ldrb r0, [r0] adds r0, r2 ldrb r0, [r0] @@ -3229,7 +3229,7 @@ _0812D9A2: beq _0812D9F0 ldr r3, _0812D9E4 @ =gSprites ldr r4, _0812D9E8 @ =gObjectBankIDs - ldr r2, _0812D9D4 @ =gBattleAnimPlayerMonIndex + ldr r2, _0812D9D4 @ =gBattleAnimBankAttacker ldrb r0, [r2] adds r0, r4 ldrb r1, [r0] @@ -3244,7 +3244,7 @@ _0812D9A2: .align 2, 0 _0812D9CC: .4byte gUnknown_081FAF4C _0812D9D0: .4byte gBattleMonForms -_0812D9D4: .4byte gBattleAnimPlayerMonIndex +_0812D9D4: .4byte gBattleAnimBankAttacker _0812D9D8: .4byte 0x040000d4 _0812D9DC: .4byte 0x84000200 _0812D9E0: .4byte 0x02019348 @@ -3254,7 +3254,7 @@ _0812D9EC: .4byte gSpriteAffineAnimTable_81E7C18 _0812D9F0: ldr r3, _0812DA34 @ =gSprites ldr r4, _0812DA38 @ =gObjectBankIDs - ldr r2, _0812DA3C @ =gBattleAnimPlayerMonIndex + ldr r2, _0812DA3C @ =gBattleAnimBankAttacker ldrb r0, [r2] adds r0, r4 ldrb r1, [r0] @@ -3290,7 +3290,7 @@ _0812DA2A: .align 2, 0 _0812DA34: .4byte gSprites _0812DA38: .4byte gObjectBankIDs -_0812DA3C: .4byte gBattleAnimPlayerMonIndex +_0812DA3C: .4byte gBattleAnimBankAttacker _0812DA40: .4byte gSpriteAffineAnimTable_81E7BEC _0812DA44: .4byte gTasks _0812DA48: @@ -3329,7 +3329,7 @@ _0812DA84: ldr r1, _0812DAA0 @ =REG_MOSAIC movs r0, 0 strh r0, [r1] - ldr r0, _0812DAA4 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812DAA4 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -3340,7 +3340,7 @@ _0812DA84: b _0812DAAE .align 2, 0 _0812DAA0: .4byte REG_MOSAIC -_0812DAA4: .4byte gBattleAnimPlayerMonIndex +_0812DAA4: .4byte gBattleAnimBankAttacker _0812DAA8: .4byte REG_BG1CNT _0812DAAC: ldr r2, _0812DB08 @ =REG_BG2CNT @@ -3354,7 +3354,7 @@ _0812DAAE: lsls r0, 24 cmp r0, 0 bne _0812DAF4 - ldr r4, _0812DB0C @ =gBattleAnimPlayerMonIndex + ldr r4, _0812DB0C @ =gBattleAnimBankAttacker ldrb r0, [r4] bl GetBankSide lsls r0, 24 @@ -3390,7 +3390,7 @@ _0812DAFA: bx r0 .align 2, 0 _0812DB08: .4byte REG_BG2CNT -_0812DB0C: .4byte gBattleAnimPlayerMonIndex +_0812DB0C: .4byte gBattleAnimBankAttacker _0812DB10: .4byte gTasks _0812DB14: .4byte 0x02017800 thumb_func_end sub_812D7E8 @@ -3403,7 +3403,7 @@ c3_80DFBE4: @ 812DB18 ldr r4, _0812DB48 @ =gBattleAnimArgs ldr r3, _0812DB4C @ =gSprites ldr r2, _0812DB50 @ =gObjectBankIDs - ldr r1, _0812DB54 @ =gBattleAnimPlayerMonIndex + ldr r1, _0812DB54 @ =gBattleAnimBankAttacker ldrb r1, [r1] adds r1, r2 ldrb r2, [r1] @@ -3424,7 +3424,7 @@ c3_80DFBE4: @ 812DB18 _0812DB48: .4byte gBattleAnimArgs _0812DB4C: .4byte gSprites _0812DB50: .4byte gObjectBankIDs -_0812DB54: .4byte gBattleAnimPlayerMonIndex +_0812DB54: .4byte gBattleAnimBankAttacker thumb_func_end c3_80DFBE4 thumb_func_start sub_812DB58 @@ -3433,9 +3433,9 @@ sub_812DB58: @ 812DB58 adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r0, _0812DB7C @ =gBattleAnimPlayerMonIndex + ldr r0, _0812DB7C @ =gBattleAnimBankAttacker ldrb r0, [r0] - ldr r1, _0812DB80 @ =gBattleAnimEnemyMonIndex + ldr r1, _0812DB80 @ =gBattleAnimBankTarget ldrb r1, [r1] movs r2, 0x1 bl sub_8031FC4 @@ -3445,8 +3445,8 @@ sub_812DB58: @ 812DB58 pop {r0} bx r0 .align 2, 0 -_0812DB7C: .4byte gBattleAnimPlayerMonIndex -_0812DB80: .4byte gBattleAnimEnemyMonIndex +_0812DB7C: .4byte gBattleAnimBankAttacker +_0812DB80: .4byte gBattleAnimBankTarget thumb_func_end sub_812DB58 thumb_func_start sub_812DB84 @@ -3572,7 +3572,7 @@ _0812DC90: .4byte gUnknown_030042C0 _0812DC94: .4byte 0x0000ffc8 _0812DC98: .4byte gUnknown_030041B4 _0812DC9C: - ldr r0, _0812DCB4 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812DCB4 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -3583,7 +3583,7 @@ _0812DC9C: adds r0, r4, 0 b _0812DCC6 .align 2, 0 -_0812DCB4: .4byte gBattleAnimPlayerMonIndex +_0812DCB4: .4byte gBattleAnimBankAttacker _0812DCB8: .4byte gUnknown_030042C0 _0812DCBC: .4byte 0x0000ff79 _0812DCC0: @@ -3856,7 +3856,7 @@ sub_812DEAC: @ 812DEAC lsls r0, 16 lsrs r5, r0, 16 _0812DED6: - ldr r4, _0812DFD0 @ =gBattleAnimPlayerMonIndex + ldr r4, _0812DFD0 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0 bl sub_8077ABC @@ -3975,7 +3975,7 @@ _0812DED6: pop {r0} bx r0 .align 2, 0 -_0812DFD0: .4byte gBattleAnimPlayerMonIndex +_0812DFD0: .4byte gBattleAnimBankAttacker _0812DFD4: .4byte gBattleAnimArgs _0812DFD8: .4byte gBattleAnimSpriteTemplate_84025EC _0812DFDC: .4byte gSprites @@ -4292,7 +4292,7 @@ _0812E254: .4byte gUnknown_030042C0 _0812E258: .4byte 0x0000ffc8 _0812E25C: .4byte gUnknown_030041B4 _0812E260: - ldr r0, _0812E2A0 @ =gBattleAnimEnemyMonIndex + ldr r0, _0812E2A0 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankIdentity lsls r0, 24 @@ -4326,7 +4326,7 @@ _0812E296: ldr r2, _0812E2B0 @ =0x0000ffec b _0812E2C8 .align 2, 0 -_0812E2A0: .4byte gBattleAnimEnemyMonIndex +_0812E2A0: .4byte gBattleAnimBankTarget _0812E2A4: .4byte gUnknown_030042C0 _0812E2A8: .4byte 0x0000ff65 _0812E2AC: .4byte 0x0000ff8d @@ -4377,7 +4377,7 @@ _0812E300: adds r5, r0, r1 movs r0, 0 strh r0, [r5, 0xE] - ldr r0, _0812E338 @ =gBattleAnimEnemyMonIndex + ldr r0, _0812E338 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -4397,7 +4397,7 @@ _0812E300: b _0812E356 .align 2, 0 _0812E334: .4byte gTasks -_0812E338: .4byte gBattleAnimEnemyMonIndex +_0812E338: .4byte gBattleAnimBankTarget _0812E33C: .4byte gUnknown_030042C0 _0812E340: .4byte gUnknown_08402604 _0812E344: @@ -4588,7 +4588,7 @@ sub_812E498: @ 812E498 cmp r0, 0 bne _0812E4D8 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -4643,7 +4643,7 @@ _0812E50E: ldrh r0, [r4, 0x32] adds r0, 0x80 strh r0, [r4, 0x32] - ldr r0, _0812E53C @ =gBattleAnimPlayerMonIndex + ldr r0, _0812E53C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -4655,7 +4655,7 @@ _0812E50E: negs r0, r0 b _0812E546 .align 2, 0 -_0812E53C: .4byte gBattleAnimPlayerMonIndex +_0812E53C: .4byte gBattleAnimBankAttacker _0812E540: ldrh r0, [r4, 0x30] lsls r0, 16 @@ -4740,7 +4740,7 @@ _0812E5AC: subs r0, 0x1 strh r0, [r4, 0x14] ldrb r0, [r5] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -4748,12 +4748,12 @@ _0812E5AC: ldrsh r0, [r5, r1] cmp r0, 0 bne _0812E5F8 - ldr r0, _0812E5F4 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812E5F4 @ =gBattleAnimBankAttacker b _0812E5FA .align 2, 0 -_0812E5F4: .4byte gBattleAnimPlayerMonIndex +_0812E5F4: .4byte gBattleAnimBankAttacker _0812E5F8: - ldr r0, _0812E630 @ =gBattleAnimEnemyMonIndex + ldr r0, _0812E630 @ =gBattleAnimBankTarget _0812E5FA: ldrb r0, [r0] bl GetBankSide @@ -4782,7 +4782,7 @@ _0812E628: pop {r0} bx r0 .align 2, 0 -_0812E630: .4byte gBattleAnimEnemyMonIndex +_0812E630: .4byte gBattleAnimBankTarget _0812E634: .4byte sub_812E638 thumb_func_end sub_812E568 @@ -4971,7 +4971,7 @@ _0812E798: sub_812E7A0: @ 812E7A0 push {r4,lr} adds r4, r0, 0 - ldr r0, _0812E7BC @ =gBattleAnimPlayerMonIndex + ldr r0, _0812E7BC @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -4983,7 +4983,7 @@ sub_812E7A0: @ 812E7A0 ldrh r0, [r1] b _0812E7CE .align 2, 0 -_0812E7BC: .4byte gBattleAnimPlayerMonIndex +_0812E7BC: .4byte gBattleAnimBankAttacker _0812E7C0: .4byte gBattleAnimArgs _0812E7C4: movs r0, 0xF0 @@ -5015,7 +5015,7 @@ sub_812E7F0: @ 812E7F0 ldrh r0, [r4, 0x2E] adds r0, 0x3 strh r0, [r4, 0x2E] - ldr r0, _0812E830 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812E830 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -5041,7 +5041,7 @@ _0812E822: bl Sin b _0812E858 .align 2, 0 -_0812E830: .4byte gBattleAnimPlayerMonIndex +_0812E830: .4byte gBattleAnimBankAttacker _0812E834: ldrh r1, [r4, 0x20] subs r1, 0x5 @@ -5091,7 +5091,7 @@ sub_812E860: @ 812E860 strh r0, [r4, 0x24] ldr r0, _0812E8AC @ =gBattleAnimArgs ldrb r0, [r0] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -5330,7 +5330,7 @@ sub_812EA4C: @ 812EA4C ldrsh r0, [r6, r2] cmp r0, 0 bne _0812EA80 - ldr r4, _0812EAA8 @ =gBattleAnimPlayerMonIndex + ldr r4, _0812EAA8 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -5364,7 +5364,7 @@ _0812EA80: b _0812EB0A .align 2, 0 _0812EAA4: .4byte gBattleAnimArgs -_0812EAA8: .4byte gBattleAnimPlayerMonIndex +_0812EAA8: .4byte gBattleAnimBankAttacker _0812EAAC: ldrh r1, [r5, 0x30] lsls r0, r1, 16 @@ -5441,20 +5441,20 @@ sub_812EB10: @ 812EB10 mov r8, r0 cmp r1, 0 bne _0812EB4C - ldr r0, _0812EB48 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812EB48 @ =gBattleAnimBankAttacker b _0812EB4E .align 2, 0 _0812EB40: .4byte gTasks _0812EB44: .4byte gBattleAnimArgs -_0812EB48: .4byte gBattleAnimPlayerMonIndex +_0812EB48: .4byte gBattleAnimBankAttacker _0812EB4C: - ldr r0, _0812EB88 @ =gBattleAnimEnemyMonIndex + ldr r0, _0812EB88 @ =gBattleAnimBankTarget _0812EB4E: ldrb r0, [r0] strh r0, [r2, 0x1E] mov r1, r8 ldrb r0, [r1] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r5, r0, 24 ldr r1, _0812EB8C @ =gTasks @@ -5478,7 +5478,7 @@ _0812EB4E: lsls r2, r5, 4 b _0812EBF8 .align 2, 0 -_0812EB88: .4byte gBattleAnimEnemyMonIndex +_0812EB88: .4byte gBattleAnimBankTarget _0812EB8C: .4byte gTasks _0812EB90: cmp r0, 0x2 @@ -5893,7 +5893,7 @@ _0812EEA0: .4byte 0x00003f3f sub_812EEA4: @ 812EEA4 push {r4,r5,lr} adds r4, r0, 0 - ldr r5, _0812EEE0 @ =gBattleAnimPlayerMonIndex + ldr r5, _0812EEE0 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0x2 bl sub_8077ABC @@ -5919,7 +5919,7 @@ sub_812EEA4: @ 812EEA4 pop {r0} bx r0 .align 2, 0 -_0812EEE0: .4byte gBattleAnimPlayerMonIndex +_0812EEE0: .4byte gBattleAnimBankAttacker _0812EEE4: .4byte gBattleAnimArgs _0812EEE8: .4byte sub_812EEEC thumb_func_end sub_812EEA4 @@ -5954,15 +5954,15 @@ sub_812EEEC: @ 812EEEC cmp r0, 0xC3 ble _0812EF38 _0812EF26: - ldr r0, _0812EF34 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812EF34 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl sub_8079E90 subs r0, 0x1 b _0812EF42 .align 2, 0 -_0812EF34: .4byte gBattleAnimPlayerMonIndex +_0812EF34: .4byte gBattleAnimBankAttacker _0812EF38: - ldr r0, _0812EF84 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812EF84 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl sub_8079E90 adds r0, 0x1 @@ -6000,7 +6000,7 @@ _0812EF42: strh r0, [r4, 0x38] b _0812EFB8 .align 2, 0 -_0812EF84: .4byte gBattleAnimPlayerMonIndex +_0812EF84: .4byte gBattleAnimBankAttacker _0812EF88: cmp r2, 0x1 bne _0812EFB8 @@ -6046,7 +6046,7 @@ sub_812EFC8: @ 812EFC8 lsrs r0, 24 str r0, [sp, 0x10] movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId bl IsContest lsls r0, 24 cmp r0, 0 @@ -6064,7 +6064,7 @@ sub_812EFC8: @ 812EFC8 .align 2, 0 _0812F000: .4byte 0x02019348 _0812F004: - ldr r0, _0812F070 @ =gBattleAnimPlayerMonIndex + ldr r0, _0812F070 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -6073,7 +6073,7 @@ _0812F004: movs r0, 0 str r0, [sp, 0x14] ldr r6, _0812F074 @ =gBattlePartyID - ldr r4, _0812F078 @ =gBattleAnimEnemyMonIndex + ldr r4, _0812F078 @ =gBattleAnimBankTarget ldrb r0, [r4] lsls r0, 1 adds r0, r6 @@ -6114,9 +6114,9 @@ _0812F004: adds r0, r7 b _0812F092 .align 2, 0 -_0812F070: .4byte gBattleAnimPlayerMonIndex +_0812F070: .4byte gBattleAnimBankAttacker _0812F074: .4byte gBattlePartyID -_0812F078: .4byte gBattleAnimEnemyMonIndex +_0812F078: .4byte gBattleAnimBankTarget _0812F07C: .4byte gPlayerParty _0812F080: .4byte 0x02017800 _0812F084: @@ -6145,7 +6145,7 @@ _0812F0AC: movs r2, 0x1 str r2, [sp, 0x14] ldr r6, _0812F10C @ =gBattlePartyID - ldr r4, _0812F110 @ =gBattleAnimEnemyMonIndex + ldr r4, _0812F110 @ =gBattleAnimBankTarget ldrb r0, [r4] lsls r0, 1 adds r0, r6 @@ -6188,7 +6188,7 @@ _0812F0AC: b _0812F12C .align 2, 0 _0812F10C: .4byte gBattlePartyID -_0812F110: .4byte gBattleAnimEnemyMonIndex +_0812F110: .4byte gBattleAnimBankTarget _0812F114: .4byte gEnemyParty _0812F118: .4byte 0x02017800 _0812F11C: .4byte gPlayerParty @@ -6212,12 +6212,12 @@ _0812F13A: _0812F13C: mov r10, r3 _0812F13E: - ldr r0, _0812F21C @ =gBattleAnimPlayerMonIndex + ldr r0, _0812F21C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl sub_8079ED4 lsls r0, 24 lsrs r7, r0, 24 - ldr r5, _0812F21C @ =gBattleAnimPlayerMonIndex + ldr r5, _0812F21C @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0 bl sub_8077ABC @@ -6318,7 +6318,7 @@ _0812F13E: bx r0 .align 2, 0 _0812F218: .4byte 0x0000ffec -_0812F21C: .4byte gBattleAnimPlayerMonIndex +_0812F21C: .4byte gBattleAnimBankAttacker _0812F220: .4byte gSprites _0812F224: .4byte 0x00007fff _0812F228: .4byte REG_BLDCNT @@ -6455,14 +6455,14 @@ sub_812F314: @ 812F314 ldrsh r0, [r0, r1] cmp r0, 0 bne _0812F340 - ldr r0, _0812F33C @ =gBattleAnimPlayerMonIndex + ldr r0, _0812F33C @ =gBattleAnimBankAttacker b _0812F342 .align 2, 0 _0812F334: .4byte gTasks _0812F338: .4byte gBattleAnimArgs -_0812F33C: .4byte gBattleAnimPlayerMonIndex +_0812F33C: .4byte gBattleAnimBankAttacker _0812F340: - ldr r0, _0812F3C0 @ =gBattleAnimEnemyMonIndex + ldr r0, _0812F3C0 @ =gBattleAnimBankTarget _0812F342: ldrb r5, [r0] movs r6, 0 @@ -6504,7 +6504,7 @@ _0812F388: strh r0, [r4, 0x24] ldr r0, _0812F3C4 @ =gBattleAnimArgs ldrb r0, [r0] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -6525,7 +6525,7 @@ _0812F388: ldr r0, _0812F3D8 @ =gUnknown_030041B4 b _0812F3EE .align 2, 0 -_0812F3C0: .4byte gBattleAnimEnemyMonIndex +_0812F3C0: .4byte gBattleAnimBankTarget _0812F3C4: .4byte gBattleAnimArgs _0812F3C8: .4byte REG_BG1HOFS _0812F3CC: .4byte REG_BLDCNT @@ -6975,7 +6975,7 @@ sub_812F724: @ 812F724 strh r0, [r4, 0x8] ldr r0, _0812F760 @ =gBattleAnimArgs ldrb r0, [r0] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -7250,7 +7250,7 @@ sub_812F948: @ 812F948 ldrb r1, [r6] adds r0, r5, 0 bl StartSpriteAffineAnim - ldr r0, _0812F9A4 @ =gBattleAnimEnemyMonIndex + ldr r0, _0812F9A4 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -7260,7 +7260,7 @@ sub_812F948: @ 812F948 negs r0, r0 strh r0, [r6, 0x2] _0812F96E: - ldr r4, _0812F9A8 @ =gBattleAnimPlayerMonIndex + ldr r4, _0812F9A8 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -7284,8 +7284,8 @@ _0812F96E: bx r0 .align 2, 0 _0812F9A0: .4byte gBattleAnimArgs -_0812F9A4: .4byte gBattleAnimEnemyMonIndex -_0812F9A8: .4byte gBattleAnimPlayerMonIndex +_0812F9A4: .4byte gBattleAnimBankTarget +_0812F9A8: .4byte gBattleAnimBankAttacker _0812F9AC: .4byte sub_80DA48C thumb_func_end sub_812F948 @@ -7674,7 +7674,7 @@ sub_812FC68: @ 812FC68 mov r1, r8 adds r4, r0, r1 ldr r1, _0812FCCC @ =gObjectBankIDs - ldr r2, _0812FCD0 @ =gBattleAnimPlayerMonIndex + ldr r2, _0812FCD0 @ =gBattleAnimBankAttacker ldrb r0, [r2] adds r0, r1 ldrb r0, [r0] @@ -7711,7 +7711,7 @@ _0812FCAC: .align 2, 0 _0812FCC8: .4byte gTasks _0812FCCC: .4byte gObjectBankIDs -_0812FCD0: .4byte gBattleAnimPlayerMonIndex +_0812FCD0: .4byte gBattleAnimBankAttacker _0812FCD4: .4byte gBattleAnimArgs _0812FCD8: .4byte 0xffff8000 _0812FCDC: @@ -7822,14 +7822,14 @@ _0812FD9C: ldrsh r0, [r4, r1] cmp r0, 0 bne _0812FDC0 - ldr r0, _0812FDBC @ =gBattleAnimPlayerMonIndex + ldr r0, _0812FDBC @ =gBattleAnimBankAttacker b _0812FDC2 .align 2, 0 _0812FDB4: .4byte gTasks _0812FDB8: .4byte gBattleAnimArgs -_0812FDBC: .4byte gBattleAnimPlayerMonIndex +_0812FDBC: .4byte gBattleAnimBankAttacker _0812FDC0: - ldr r0, _0812FE10 @ =gBattleAnimEnemyMonIndex + ldr r0, _0812FE10 @ =gBattleAnimBankTarget _0812FDC2: ldrb r4, [r0] adds r0, r4, 0 @@ -7851,7 +7851,7 @@ _0812FDC2: strh r0, [r5, 0x14] ldr r0, _0812FE14 @ =gBattleAnimArgs ldrb r0, [r0] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -7865,7 +7865,7 @@ _0812FDC2: pop {r0} bx r0 .align 2, 0 -_0812FE10: .4byte gBattleAnimEnemyMonIndex +_0812FE10: .4byte gBattleAnimBankTarget _0812FE14: .4byte gBattleAnimArgs _0812FE18: .4byte gUnknown_084028AC _0812FE1C: .4byte sub_812FE20 @@ -8124,7 +8124,7 @@ sub_812FFE4: @ 812FFE4 ldrh r0, [r1, 0x2] strh r0, [r4, 0xA] ldrb r0, [r1] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 ldr r2, _08130034 @ =gSprites @@ -8215,7 +8215,7 @@ sub_81300A4: @ 81300A4 lsrs r0, 24 movs r2, 0xD0 lsls r2, 1 - ldr r1, _081300E0 @ =gBattleAnimPlayerMonIndex + ldr r1, _081300E0 @ =gBattleAnimBankAttacker ldrb r3, [r1] ldr r1, _081300E4 @ =gBattleAnimArgs ldrb r1, [r1] @@ -8238,7 +8238,7 @@ sub_81300A4: @ 81300A4 pop {r0} bx r0 .align 2, 0 -_081300E0: .4byte gBattleAnimPlayerMonIndex +_081300E0: .4byte gBattleAnimBankAttacker _081300E4: .4byte gBattleAnimArgs _081300E8: .4byte gUnknown_08D2E014 _081300EC: .4byte gUnknown_08D2E170 @@ -8249,7 +8249,7 @@ _081300F0: .4byte gUnknown_08D2E150 sub_81300F4: @ 81300F4 push {r4-r6,lr} adds r5, r0, 0 - ldr r6, _0813014C @ =gBattleAnimPlayerMonIndex + ldr r6, _0813014C @ =gBattleAnimBankAttacker ldrb r0, [r6] bl GetBankSide lsls r0, 24 @@ -8289,7 +8289,7 @@ _08130110: strh r0, [r5, 0x30] b _08130180 .align 2, 0 -_0813014C: .4byte gBattleAnimPlayerMonIndex +_0813014C: .4byte gBattleAnimBankAttacker _08130150: .4byte gBattleAnimArgs _08130154: .4byte 0x0000fd80 _08130158: @@ -8314,7 +8314,7 @@ _08130172: lsls r0, 2 strh r0, [r5, 0x2E] _08130180: - ldr r0, _081301AC @ =gBattleAnimPlayerMonIndex + ldr r0, _081301AC @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -8336,7 +8336,7 @@ _081301A0: pop {r0} bx r0 .align 2, 0 -_081301AC: .4byte gBattleAnimPlayerMonIndex +_081301AC: .4byte gBattleAnimBankAttacker _081301B0: .4byte sub_81301B4 thumb_func_end sub_81300F4 @@ -8403,7 +8403,7 @@ _0813021C: strh r0, [r6, 0x14] strh r1, [r6, 0x16] _08130226: - ldr r5, _0813025C @ =gBattleAnimPlayerMonIndex + ldr r5, _0813025C @ =gBattleAnimBankAttacker ldrb r0, [r5] bl GetBankSide lsls r0, 24 @@ -8428,7 +8428,7 @@ _08130254: adds r0, r4, r0 b _08130284 .align 2, 0 -_0813025C: .4byte gBattleAnimPlayerMonIndex +_0813025C: .4byte gBattleAnimBankAttacker _08130260: ldrb r0, [r5] movs r1, 0x2 @@ -8449,7 +8449,7 @@ _08130280: subs r0, r4, r0 _08130284: strh r0, [r6, 0x1E] - ldr r5, _081302D8 @ =gBattleAnimPlayerMonIndex + ldr r5, _081302D8 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0x3 bl sub_8077ABC @@ -8468,7 +8468,7 @@ _081302A8: asrs r0, 2 subs r0, r4, r0 strh r0, [r6, 0x20] - ldr r4, _081302DC @ =gBattleAnimEnemyMonIndex + ldr r4, _081302DC @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -8487,8 +8487,8 @@ _081302A8: pop {r0} bx r0 .align 2, 0 -_081302D8: .4byte gBattleAnimPlayerMonIndex -_081302DC: .4byte gBattleAnimEnemyMonIndex +_081302D8: .4byte gBattleAnimBankAttacker +_081302DC: .4byte gBattleAnimBankTarget _081302E0: .4byte sub_81302E4 thumb_func_end sub_81301EC @@ -8810,7 +8810,7 @@ sub_813051C: @ 813051C strh r0, [r4, 0x2E] ldr r1, _0813054C @ =move_anim_8072740 adds r0, r4, 0 - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r0, _08130550 @ =sub_8078CC0 str r0, [r4, 0x1C] pop {r4} @@ -8837,7 +8837,7 @@ sub_8130554: @ 8130554 lsls r0, 3 ldr r1, _08130674 @ =gTasks adds r7, r0, r1 - ldr r0, _08130678 @ =gBattleAnimPlayerMonIndex + ldr r0, _08130678 @ =gBattleAnimBankAttacker mov r10, r0 ldrb r0, [r0] movs r1, 0x2 @@ -8852,7 +8852,7 @@ sub_8130554: @ 8130554 lsls r0, 24 lsrs r0, 24 strh r0, [r7, 0x20] - ldr r0, _0813067C @ =gBattleAnimEnemyMonIndex + ldr r0, _0813067C @ =gBattleAnimBankTarget mov r8, r0 ldrb r0, [r0] movs r1, 0x2 @@ -8962,8 +8962,8 @@ _0813066E: b _08130696 .align 2, 0 _08130674: .4byte gTasks -_08130678: .4byte gBattleAnimPlayerMonIndex -_0813067C: .4byte gBattleAnimEnemyMonIndex +_08130678: .4byte gBattleAnimBankAttacker +_0813067C: .4byte gBattleAnimBankTarget _08130680: .4byte gSpriteTemplate_84029AC _08130684: .4byte gSprites _08130688: .4byte 0x0000ffe0 @@ -9129,13 +9129,13 @@ sub_81307B0: @ 81307B0 adds r6, r0, 0 cmp r1, 0 bne _081307CC - ldr r0, _081307C8 @ =gBattleAnimPlayerMonIndex + ldr r0, _081307C8 @ =gBattleAnimBankAttacker b _081307CE .align 2, 0 _081307C4: .4byte gBattleAnimArgs -_081307C8: .4byte gBattleAnimPlayerMonIndex +_081307C8: .4byte gBattleAnimBankAttacker _081307CC: - ldr r0, _08130834 @ =gBattleAnimEnemyMonIndex + ldr r0, _08130834 @ =gBattleAnimBankTarget _081307CE: ldrb r5, [r0] ldrh r2, [r4, 0x4] @@ -9188,7 +9188,7 @@ _081307FC: subs r0, 0x8 b _0813084A .align 2, 0 -_08130834: .4byte gBattleAnimEnemyMonIndex +_08130834: .4byte gBattleAnimBankTarget _08130838: .4byte 0x000003ff _0813083C: .4byte 0xfffffc00 _08130840: @@ -9337,7 +9337,7 @@ _08130934: ldrh r0, [r2, 0x2] strh r0, [r4, 0x8] ldrb r0, [r2] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -9461,13 +9461,13 @@ sub_8130A2C: @ 8130A2C ldrsh r0, [r0, r1] cmp r0, 0 bne _08130A48 - ldr r4, _08130A44 @ =gBattleAnimPlayerMonIndex + ldr r4, _08130A44 @ =gBattleAnimBankAttacker b _08130A4A .align 2, 0 _08130A40: .4byte gBattleAnimArgs -_08130A44: .4byte gBattleAnimPlayerMonIndex +_08130A44: .4byte gBattleAnimBankAttacker _08130A48: - ldr r4, _08130A88 @ =gBattleAnimEnemyMonIndex + ldr r4, _08130A88 @ =gBattleAnimBankTarget _08130A4A: ldrb r0, [r4] movs r1, 0x2 @@ -9500,7 +9500,7 @@ _08130A6E: pop {r0} bx r0 .align 2, 0 -_08130A88: .4byte gBattleAnimEnemyMonIndex +_08130A88: .4byte gBattleAnimBankTarget _08130A8C: .4byte gBattleAnimArgs _08130A90: .4byte sub_8130A94 thumb_func_end sub_8130A2C @@ -9859,7 +9859,7 @@ sub_8130D20: @ 8130D20 ldr r0, _08130D7C @ =gTasks adds r6, r1, r0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r6, 0x26] @@ -9872,7 +9872,7 @@ sub_8130D20: @ 8130D20 lsrs r7, r0, 24 cmp r7, 0x1 bne _08130D8C - ldr r5, _08130D80 @ =gBattleAnimPlayerMonIndex + ldr r5, _08130D80 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0 bl sub_8077ABC @@ -9892,14 +9892,14 @@ sub_8130D20: @ 8130D20 b _08130DAC .align 2, 0 _08130D7C: .4byte gTasks -_08130D80: .4byte gBattleAnimPlayerMonIndex +_08130D80: .4byte gBattleAnimBankAttacker _08130D84: ldr r0, _08130D88 @ =0x0000ffff b _08130DAA .align 2, 0 _08130D88: .4byte 0x0000ffff _08130D8C: - ldr r0, _08130DA0 @ =gBattleAnimPlayerMonIndex + ldr r0, _08130DA0 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -9908,7 +9908,7 @@ _08130D8C: ldr r0, _08130DA4 @ =0x0000ffff b _08130DAA .align 2, 0 -_08130DA0: .4byte gBattleAnimPlayerMonIndex +_08130DA0: .4byte gBattleAnimBankAttacker _08130DA4: .4byte 0x0000ffff _08130DA8: movs r0, 0x1 @@ -10153,13 +10153,13 @@ sub_8130F5C: @ 8130F5C adds r0, r4, 0 movs r1, 0x1 bl sub_80787B0 - ldr r0, _08130F7C @ =gBattleAnimPlayerMonIndex + ldr r0, _08130F7C @ =gBattleAnimBankAttacker b _08130F82 .align 2, 0 _08130F78: .4byte gBattleAnimArgs -_08130F7C: .4byte gBattleAnimPlayerMonIndex +_08130F7C: .4byte gBattleAnimBankAttacker _08130F80: - ldr r0, _08130FD8 @ =gBattleAnimEnemyMonIndex + ldr r0, _08130FD8 @ =gBattleAnimBankTarget _08130F82: ldrb r0, [r0] strh r0, [r4, 0x3C] @@ -10204,7 +10204,7 @@ _08130FA6: pop {r0} bx r0 .align 2, 0 -_08130FD8: .4byte gBattleAnimEnemyMonIndex +_08130FD8: .4byte gBattleAnimBankTarget _08130FDC: .4byte sub_8130FE0 thumb_func_end sub_8130F5C @@ -10545,7 +10545,7 @@ _08131260: .4byte gSpriteTemplate_8402500 sub_8131264: @ 8131264 push {r4,r5,lr} adds r5, r0, 0 - ldr r4, _081312A0 @ =gBattleAnimEnemyMonIndex + ldr r4, _081312A0 @ =gBattleAnimBankTarget ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -10571,7 +10571,7 @@ _08131290: subs r1, r0 b _081312B6 .align 2, 0 -_081312A0: .4byte gBattleAnimEnemyMonIndex +_081312A0: .4byte gBattleAnimBankTarget _081312A4: .4byte gBattleAnimArgs _081312A8: ldr r2, _081312DC @ =gBattleAnimArgs @@ -10615,7 +10615,7 @@ sub_81312E4: @ 81312E4 lsls r0, 24 lsrs r6, r0, 24 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r5, r0, 24 adds r2, r5, 0 @@ -10686,7 +10686,7 @@ _08131378: .align 2, 0 _08131380: .4byte gSprites _08131384: - ldr r4, _081313F4 @ =gBattleAnimPlayerMonIndex + ldr r4, _081313F4 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0 bl refresh_graphics_maybe @@ -10743,7 +10743,7 @@ _081313E8: pop {r0} bx r0 .align 2, 0 -_081313F4: .4byte gBattleAnimPlayerMonIndex +_081313F4: .4byte gBattleAnimBankAttacker _081313F8: .4byte gSprites _081313FC: .4byte gObjectBankIDs _08131400: .4byte gSpriteAffineAnimTable_81E7C18 @@ -10756,7 +10756,7 @@ sub_8131408: @ 8131408 lsls r0, 24 lsrs r6, r0, 24 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r3, r0, 24 ldr r1, _08131434 @ =gTasks @@ -10932,7 +10932,7 @@ _08131560: .4byte gSprites sub_8131564: @ 8131564 push {r4,r5,lr} adds r5, r0, 0 - ldr r4, _08131588 @ =gBattleAnimEnemyMonIndex + ldr r4, _08131588 @ =gBattleAnimBankTarget ldrb r0, [r4] bl GetBankSide lsls r0, 24 @@ -10947,7 +10947,7 @@ sub_8131564: @ 8131564 ldr r4, _0813158C @ =0x0000ff70 b _081315A0 .align 2, 0 -_08131588: .4byte gBattleAnimEnemyMonIndex +_08131588: .4byte gBattleAnimBankTarget _0813158C: .4byte 0x0000ff70 _08131590: ldrb r0, [r4] @@ -10958,7 +10958,7 @@ _08131590: strb r0, [r1] ldr r4, _081315BC @ =0x0000ffa0 _081315A0: - ldr r0, _081315C0 @ =gBattleAnimEnemyMonIndex + ldr r0, _081315C0 @ =gBattleAnimBankTarget ldrb r0, [r0] movs r1, 0x3 bl sub_8077ABC @@ -10973,7 +10973,7 @@ _081315A0: bx r0 .align 2, 0 _081315BC: .4byte 0x0000ffa0 -_081315C0: .4byte gBattleAnimEnemyMonIndex +_081315C0: .4byte gBattleAnimBankTarget _081315C4: .4byte sub_81315C8 thumb_func_end sub_8131564 @@ -11474,7 +11474,7 @@ _0813197C: .4byte _08131DC4 _08131990: movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r7, r0, 24 ldr r1, _081319DC @ =gTasks @@ -11489,7 +11489,7 @@ _08131990: ldrh r1, [r6, 0xA] adds r0, r1 strh r0, [r6, 0xA] - ldr r0, _081319E0 @ =gBattleAnimPlayerMonIndex + ldr r0, _081319E0 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -11510,7 +11510,7 @@ _08131990: b _08131A02 .align 2, 0 _081319DC: .4byte gTasks -_081319E0: .4byte gBattleAnimPlayerMonIndex +_081319E0: .4byte gBattleAnimBankAttacker _081319E4: .4byte gSprites _081319E8: ldr r3, _08131A3C @ =gSprites @@ -11570,7 +11570,7 @@ _08131A44: ldr r3, [r0, 0xC] mov r9, r3 ldrh r5, [r0] - ldr r0, _08131A70 @ =gBattleAnimPlayerMonIndex + ldr r0, _08131A70 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl sub_8079E90 lsls r0, 24 @@ -11579,9 +11579,9 @@ _08131A44: b _08131B92 .align 2, 0 _08131A6C: .4byte 0x02019348 -_08131A70: .4byte gBattleAnimPlayerMonIndex +_08131A70: .4byte gBattleAnimBankAttacker _08131A74: - ldr r4, _08131AD4 @ =gBattleAnimPlayerMonIndex + ldr r4, _08131AD4 @ =gBattleAnimBankAttacker ldrb r0, [r4] bl GetBankSide lsls r0, 24 @@ -11626,7 +11626,7 @@ _08131A74: lsrs r5, r0, 16 b _08131AE6 .align 2, 0 -_08131AD4: .4byte gBattleAnimPlayerMonIndex +_08131AD4: .4byte gBattleAnimBankAttacker _08131AD8: .4byte gBattlePartyID _08131ADC: .4byte gPlayerParty _08131AE0: .4byte 0x02017800 @@ -11634,7 +11634,7 @@ _08131AE4: ldrh r5, [r1, 0x2] _08131AE6: movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId ldr r2, _08131B0C @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -11700,7 +11700,7 @@ _08131B70: ldrh r5, [r1, 0x2] _08131B72: movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId ldr r2, _08131C04 @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -11717,7 +11717,7 @@ _08131B72: _08131B92: ldr r6, _08131C08 @ =0x0000ffe0 _08131B94: - ldr r0, _08131C0C @ =gBattleAnimEnemyMonIndex + ldr r0, _08131C0C @ =gBattleAnimBankTarget ldrb r0, [r0] movs r1, 0x1 bl sub_8077ABC @@ -11737,7 +11737,7 @@ _08131B94: bl sub_8079F44 lsls r0, 24 lsrs r5, r0, 24 - ldr r0, _08131C10 @ =gBattleAnimPlayerMonIndex + ldr r0, _08131C10 @ =gBattleAnimBankAttacker ldrb r0, [r0] lsls r0, 2 ldr r1, _08131C14 @ =0x02017800 @@ -11773,8 +11773,8 @@ _08131BF2: .align 2, 0 _08131C04: .4byte gSprites _08131C08: .4byte 0x0000ffe0 -_08131C0C: .4byte gBattleAnimEnemyMonIndex -_08131C10: .4byte gBattleAnimPlayerMonIndex +_08131C0C: .4byte gBattleAnimBankTarget +_08131C10: .4byte gBattleAnimBankAttacker _08131C14: .4byte 0x02017800 _08131C18: .4byte 0x00007fff _08131C1C: .4byte gTasks @@ -11794,7 +11794,7 @@ _08131C20: ldrh r2, [r6, 0xA] adds r0, r2 strh r0, [r6, 0xA] - ldr r0, _08131C70 @ =gBattleAnimPlayerMonIndex + ldr r0, _08131C70 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -11817,7 +11817,7 @@ _08131C20: b _08131C8E .align 2, 0 _08131C6C: .4byte gTasks -_08131C70: .4byte gBattleAnimPlayerMonIndex +_08131C70: .4byte gBattleAnimBankAttacker _08131C74: .4byte gSprites _08131C78: ldr r2, _08131CDC @ =gSprites @@ -11851,7 +11851,7 @@ _08131C8E: ldrsh r0, [r6, r1] cmp r0, 0 bne _08131D0E - ldr r0, _08131CE4 @ =gBattleAnimPlayerMonIndex + ldr r0, _08131CE4 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -11859,7 +11859,7 @@ _08131C8E: bne _08131CEC lsls r4, r5, 16 asrs r4, 16 - ldr r0, _08131CE8 @ =gBattleAnimEnemyMonIndex + ldr r0, _08131CE8 @ =gBattleAnimBankTarget ldrb r0, [r0] movs r1, 0 bl sub_8077ABC @@ -11871,12 +11871,12 @@ _08131C8E: .align 2, 0 _08131CDC: .4byte gSprites _08131CE0: .4byte gTasks -_08131CE4: .4byte gBattleAnimPlayerMonIndex -_08131CE8: .4byte gBattleAnimEnemyMonIndex +_08131CE4: .4byte gBattleAnimBankAttacker +_08131CE8: .4byte gBattleAnimBankTarget _08131CEC: lsls r4, r5, 16 asrs r4, 16 - ldr r0, _08131D30 @ =gBattleAnimEnemyMonIndex + ldr r0, _08131D30 @ =gBattleAnimBankTarget ldrb r0, [r0] movs r1, 0 bl sub_8077ABC @@ -11911,13 +11911,13 @@ _08131D20: strh r0, [r1, 0xA] b _08131DB6 .align 2, 0 -_08131D30: .4byte gBattleAnimEnemyMonIndex +_08131D30: .4byte gBattleAnimBankTarget _08131D34: .4byte gBattleAnimArgs _08131D38: .4byte 0x0000ffff _08131D3C: .4byte gTasks _08131D40: movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r7, r0, 24 ldr r1, _08131D8C @ =gTasks @@ -11935,7 +11935,7 @@ _08131D40: ldr r5, _08131D90 @ =gSprites adds r0, r5 bl sub_807A0F4 - ldr r0, _08131D94 @ =gBattleAnimPlayerMonIndex + ldr r0, _08131D94 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -11954,7 +11954,7 @@ _08131D40: .align 2, 0 _08131D8C: .4byte gTasks _08131D90: .4byte gSprites -_08131D94: .4byte gBattleAnimPlayerMonIndex +_08131D94: .4byte gBattleAnimBankAttacker _08131D98: lsls r0, r7, 4 adds r0, r7 @@ -11981,7 +11981,7 @@ _08131DB6: _08131DC0: .4byte gTasks _08131DC4: movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r7, r0, 24 ldr r1, _08131E38 @ =gTasks @@ -11996,7 +11996,7 @@ _08131DC4: ldrh r3, [r2, 0xA] adds r0, r3 strh r0, [r2, 0xA] - ldr r0, _08131E3C @ =gBattleAnimPlayerMonIndex + ldr r0, _08131E3C @ =gBattleAnimBankAttacker mov r10, r0 ldrb r0, [r0] str r2, [sp, 0x10] @@ -12036,7 +12036,7 @@ _08131DC4: b _08131E7C .align 2, 0 _08131E38: .4byte gTasks -_08131E3C: .4byte gBattleAnimPlayerMonIndex +_08131E3C: .4byte gBattleAnimBankAttacker _08131E40: .4byte gSprites _08131E44: ldr r1, _08131EB0 @ =gSprites @@ -12124,7 +12124,7 @@ _08131ECA: asrs r1, 24 movs r0, 0x7A bl PlaySE12WithPanning - ldr r0, _08131F54 @ =gBattleAnimEnemyMonIndex + ldr r0, _08131F54 @ =gBattleAnimBankTarget ldrb r0, [r0] movs r1, 0x1 bl sub_8077ABC @@ -12144,7 +12144,7 @@ _08131ECA: negs r0, r0 ands r0, r1 strb r0, [r2] - ldr r0, _08131F5C @ =gBattleAnimPlayerMonIndex + ldr r0, _08131F5C @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -12156,7 +12156,7 @@ _08131ECA: cmp r0, 0 bne _08131FF4 movs r0, 0x1 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId ldr r2, _08131F60 @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -12173,9 +12173,9 @@ _08131ECA: b _08131FF4 .align 2, 0 _08131F50: .4byte gBattleAnimArgs -_08131F54: .4byte gBattleAnimEnemyMonIndex +_08131F54: .4byte gBattleAnimBankTarget _08131F58: .4byte 0x0000ffe0 -_08131F5C: .4byte gBattleAnimPlayerMonIndex +_08131F5C: .4byte gBattleAnimBankAttacker _08131F60: .4byte gSprites _08131F64: adds r0, r4, 0 @@ -12218,7 +12218,7 @@ _08131FA6: ldrh r1, [r4, 0x32] adds r0, r1 strh r0, [r4, 0x32] - ldr r0, _08131FD0 @ =gBattleAnimPlayerMonIndex + ldr r0, _08131FD0 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -12233,7 +12233,7 @@ _08131FA6: adds r1, r2, 0 b _08131FE0 .align 2, 0 -_08131FD0: .4byte gBattleAnimPlayerMonIndex +_08131FD0: .4byte gBattleAnimBankAttacker _08131FD4: ldrh r1, [r4, 0x32] lsls r0, r1, 16 @@ -12290,14 +12290,14 @@ _0813202C: .4byte _08132104 .4byte _0813216A _08132040: - ldr r0, _08132084 @ =gBattleAnimPlayerMonIndex + ldr r0, _08132084 @ =gBattleAnimBankAttacker ldrb r0, [r0] movs r1, 0 bl sub_8077ABC lsls r0, 24 lsrs r0, 24 adds r5, r0, 0 - ldr r0, _08132088 @ =gBattleAnimEnemyMonIndex + ldr r0, _08132088 @ =gBattleAnimBankTarget ldrb r0, [r0] movs r1, 0 bl sub_8077ABC @@ -12323,12 +12323,12 @@ _08132076: strh r0, [r1, 0x26] b _08132188 .align 2, 0 -_08132084: .4byte gBattleAnimPlayerMonIndex -_08132088: .4byte gBattleAnimEnemyMonIndex +_08132084: .4byte gBattleAnimBankAttacker +_08132088: .4byte gBattleAnimBankTarget _0813208C: .4byte gTasks _08132090: ldr r1, _081320CC @ =gObjectBankIDs - ldr r0, _081320D0 @ =gBattleAnimPlayerMonIndex + ldr r0, _081320D0 @ =gBattleAnimBankAttacker ldrb r0, [r0] adds r0, r1 ldrb r2, [r0] @@ -12359,7 +12359,7 @@ _08132090: b _0813215E .align 2, 0 _081320CC: .4byte gObjectBankIDs -_081320D0: .4byte gBattleAnimPlayerMonIndex +_081320D0: .4byte gBattleAnimBankAttacker _081320D4: .4byte gSprites _081320D8: movs r3, 0x20 @@ -12387,7 +12387,7 @@ _081320EC: b _08132188 _08132104: ldr r1, _08132144 @ =gObjectBankIDs - ldr r0, _08132148 @ =gBattleAnimPlayerMonIndex + ldr r0, _08132148 @ =gBattleAnimBankAttacker ldrb r0, [r0] adds r0, r1 ldrb r2, [r0] @@ -12420,7 +12420,7 @@ _08132104: b _08132162 .align 2, 0 _08132144: .4byte gObjectBankIDs -_08132148: .4byte gBattleAnimPlayerMonIndex +_08132148: .4byte gBattleAnimBankAttacker _0813214C: .4byte gSprites _08132150: movs r3, 0x20 @@ -12440,7 +12440,7 @@ _08132162: b _08132188 _0813216A: ldr r1, _08132190 @ =gObjectBankIDs - ldr r0, _08132194 @ =gBattleAnimPlayerMonIndex + ldr r0, _08132194 @ =gBattleAnimBankAttacker ldrb r0, [r0] adds r0, r1 ldrb r2, [r0] @@ -12459,7 +12459,7 @@ _08132188: bx r0 .align 2, 0 _08132190: .4byte gObjectBankIDs -_08132194: .4byte gBattleAnimPlayerMonIndex +_08132194: .4byte gBattleAnimBankAttacker _08132198: .4byte gSprites thumb_func_end sub_8131FFC @@ -12474,12 +12474,12 @@ sub_813219C: @ 813219C ldr r0, _08132204 @ =gTasks adds r4, r1, r0 movs r0, 0 - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId lsls r0, 24 lsrs r0, 24 movs r5, 0 strh r0, [r4, 0xE] - ldr r0, _08132208 @ =gBattleAnimPlayerMonIndex + ldr r0, _08132208 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -12518,7 +12518,7 @@ _081321D0: bx r0 .align 2, 0 _08132204: .4byte gTasks -_08132208: .4byte gBattleAnimPlayerMonIndex +_08132208: .4byte gBattleAnimBankAttacker _0813220C: .4byte gSprites _08132210: .4byte sub_8132214 thumb_func_end sub_813219C @@ -12662,7 +12662,7 @@ _08132312: sub_8132318: @ 8132318 push {r4,lr} adds r4, r0, 0 - ldr r0, _0813236C @ =gBattleAnimEnemyMonIndex + ldr r0, _0813236C @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -12699,14 +12699,14 @@ _0813235E: pop {r0} bx r0 .align 2, 0 -_0813236C: .4byte gBattleAnimEnemyMonIndex +_0813236C: .4byte gBattleAnimBankTarget thumb_func_end sub_8132318 thumb_func_start sub_8132370 sub_8132370: @ 8132370 push {r4,lr} adds r4, r0, 0 - ldr r0, _081323A8 @ =gBattleAnimEnemyMonIndex + ldr r0, _081323A8 @ =gBattleAnimBankTarget ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -12730,7 +12730,7 @@ sub_8132370: @ 8132370 bl StartSpriteAffineAnim b _081323CE .align 2, 0 -_081323A8: .4byte gBattleAnimEnemyMonIndex +_081323A8: .4byte gBattleAnimBankTarget _081323AC: .4byte gBattleAnimArgs _081323B0: .4byte 0x0000fff5 _081323B4: @@ -12762,7 +12762,7 @@ _081323DC: .4byte sub_8132318 sub_81323E0: @ 81323E0 push {r4,r5,lr} adds r5, r0, 0 - ldr r4, _08132424 @ =gBattleAnimPlayerMonIndex + ldr r4, _08132424 @ =gBattleAnimBankAttacker ldrb r0, [r4] movs r1, 0x2 bl sub_8077ABC @@ -12793,7 +12793,7 @@ _0813240A: pop {r0} bx r0 .align 2, 0 -_08132424: .4byte gBattleAnimPlayerMonIndex +_08132424: .4byte gBattleAnimBankAttacker _08132428: .4byte sub_8132430 _0813242C: .4byte REG_BLDALPHA thumb_func_end sub_81323E0 @@ -12997,7 +12997,7 @@ sub_813257C: @ 813257C strh r0, [r4, 0x8] ldr r0, _081325B8 @ =gBattleAnimArgs ldrb r0, [r0] - bl obj_id_for_side_relative_to_move + bl GetAnimBankSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 diff --git a/asm/battle_anim_813F0F4.s b/asm/battle_anim_813F0F4.s index a5ab2fb83..ab8a222df 100644 --- a/asm/battle_anim_813F0F4.s +++ b/asm/battle_anim_813F0F4.s @@ -17,7 +17,7 @@ unref_sub_813F0F4: @ 813F0F4 lsls r0, 24 lsrs r0, 24 str r0, [sp, 0x10] - ldr r0, _0813F2AC @ =gBattleAnimPlayerMonIndex + ldr r0, _0813F2AC @ =gBattleAnimBankAttacker ldrb r3, [r0] ldr r0, _0813F2B0 @ =gUnknown_030042C4 movs r1, 0 @@ -220,7 +220,7 @@ unref_sub_813F0F4: @ 813F0F4 pop {r0} bx r0 .align 2, 0 -_0813F2AC: .4byte gBattleAnimPlayerMonIndex +_0813F2AC: .4byte gBattleAnimBankAttacker _0813F2B0: .4byte gUnknown_030042C4 _0813F2B4: .4byte gUnknown_03004240 _0813F2B8: .4byte REG_WININ @@ -252,7 +252,7 @@ sub_813F300: @ 813F300 sub sp, 0x10 lsls r0, 24 lsrs r7, r0, 24 - ldr r0, _0813F34C @ =gBattleAnimPlayerMonIndex + ldr r0, _0813F34C @ =gBattleAnimBankAttacker ldrb r0, [r0] mov r9, r0 ldr r1, _0813F350 @ =gTasks @@ -284,7 +284,7 @@ sub_813F300: @ 813F300 beq _0813F35E b _0813F4B2 .align 2, 0 -_0813F34C: .4byte gBattleAnimPlayerMonIndex +_0813F34C: .4byte gBattleAnimBankAttacker _0813F350: .4byte gTasks _0813F354: .4byte gUnknown_030041B4 _0813F358: @@ -495,7 +495,7 @@ sub_813F4EC: @ 813F4EC lsrs r0, 24 str r0, [sp] ldr r1, _0813F5D0 @ =gHealthboxIDs - ldr r0, _0813F5D4 @ =gBattleAnimPlayerMonIndex + ldr r0, _0813F5D4 @ =gBattleAnimBankAttacker ldrb r0, [r0] adds r0, r1 ldrb r0, [r0] @@ -595,7 +595,7 @@ sub_813F4EC: @ 813F4EC bx r0 .align 2, 0 _0813F5D0: .4byte gHealthboxIDs -_0813F5D4: .4byte gBattleAnimPlayerMonIndex +_0813F5D4: .4byte gBattleAnimBankAttacker _0813F5D8: .4byte gSprites _0813F5DC: .4byte 0x0000d709 _0813F5E0: .4byte 0x0000d70a @@ -614,7 +614,7 @@ sub_813F5E8: @ 813F5E8 lsrs r0, 24 mov r8, r0 ldr r1, _0813F684 @ =gHealthboxIDs - ldr r0, _0813F688 @ =gBattleAnimPlayerMonIndex + ldr r0, _0813F688 @ =gBattleAnimBankAttacker ldrb r0, [r0] adds r0, r1 ldrb r0, [r0] @@ -678,7 +678,7 @@ sub_813F5E8: @ 813F5E8 bx r0 .align 2, 0 _0813F684: .4byte gHealthboxIDs -_0813F688: .4byte gBattleAnimPlayerMonIndex +_0813F688: .4byte gBattleAnimBankAttacker _0813F68C: .4byte gSprites _0813F690: .4byte 0x0000d709 _0813F694: .4byte 0x0000d70a @@ -820,7 +820,7 @@ sub_813F798: @ 813F798 lsls r0, 24 lsrs r6, r0, 24 ldr r1, _0813F7C4 @ =gObjectBankIDs - ldr r0, _0813F7C8 @ =gBattleAnimPlayerMonIndex + ldr r0, _0813F7C8 @ =gBattleAnimBankAttacker ldrb r0, [r0] adds r0, r1 ldrb r5, [r0] @@ -840,7 +840,7 @@ sub_813F798: @ 813F798 b _0813F838 .align 2, 0 _0813F7C4: .4byte gObjectBankIDs -_0813F7C8: .4byte gBattleAnimPlayerMonIndex +_0813F7C8: .4byte gBattleAnimBankAttacker _0813F7CC: .4byte gTasks _0813F7D0: cmp r0, 0x2 @@ -911,7 +911,7 @@ sub_813F844: @ 813F844 lsls r0, 24 lsrs r5, r0, 24 ldr r1, _0813F87C @ =gObjectBankIDs - ldr r4, _0813F880 @ =gBattleAnimPlayerMonIndex + ldr r4, _0813F880 @ =gBattleAnimBankAttacker ldrb r0, [r4] adds r1, r0, r1 ldrb r1, [r1] @@ -931,7 +931,7 @@ sub_813F844: @ 813F844 b _0813F89C .align 2, 0 _0813F87C: .4byte gObjectBankIDs -_0813F880: .4byte gBattleAnimPlayerMonIndex +_0813F880: .4byte gBattleAnimBankAttacker _0813F884: .4byte gBattlePartyID _0813F888: .4byte gPlayerParty _0813F88C: @@ -970,7 +970,7 @@ _0813F8CC: .4byte gBattlePartyID _0813F8D0: .4byte gEnemyParty _0813F8D4: .4byte gTasks _0813F8D8: - ldr r5, _0813F950 @ =gBattleAnimPlayerMonIndex + ldr r5, _0813F950 @ =gBattleAnimBankAttacker ldrb r0, [r5] movs r1, 0 bl sub_8077ABC @@ -1025,7 +1025,7 @@ _0813F8D8: strh r0, [r6, 0x8] b _0813F982 .align 2, 0 -_0813F950: .4byte gBattleAnimPlayerMonIndex +_0813F950: .4byte gBattleAnimBankAttacker _0813F954: .4byte gSprites _0813F958: movs r1, 0x1C @@ -1235,7 +1235,7 @@ sub_813FA94: @ 813FA94 adds r6, r4, r1 movs r0, 0x22 strh r0, [r6, 0x2E] - ldr r2, _0813FB64 @ =gBattleAnimEnemyMonIndex + ldr r2, _0813FB64 @ =gBattleAnimBankTarget mov r8, r2 ldrb r0, [r2] movs r1, 0 @@ -1297,7 +1297,7 @@ sub_813FA94: @ 813FA94 _0813FB58: .4byte gLastUsedItem _0813FB5C: .4byte gBallSpriteTemplates _0813FB60: .4byte gSprites -_0813FB64: .4byte gBattleAnimEnemyMonIndex +_0813FB64: .4byte gBattleAnimBankTarget _0813FB68: .4byte sub_813FD90 _0813FB6C: .4byte 0x02017840 _0813FB70: .4byte gObjectBankIDs @@ -1397,7 +1397,7 @@ _0813FBE0: adds r6, r4, r0 movs r0, 0x22 strh r0, [r6, 0x2E] - ldr r1, _0813FCA8 @ =gBattleAnimEnemyMonIndex + ldr r1, _0813FCA8 @ =gBattleAnimBankTarget mov r8, r1 ldrb r0, [r1] movs r1, 0 @@ -1449,7 +1449,7 @@ _0813FBE0: _0813FC9C: .4byte gLastUsedItem _0813FCA0: .4byte gBallSpriteTemplates _0813FCA4: .4byte gSprites -_0813FCA8: .4byte gBattleAnimEnemyMonIndex +_0813FCA8: .4byte gBattleAnimBankTarget _0813FCAC: .4byte SpriteCallbackDummy _0813FCB0: .4byte gObjectBankIDs _0813FCB4: .4byte gTasks @@ -1652,7 +1652,7 @@ _0813FE10: movs r2, 0x1 movs r3, 0x1C bl sub_814086C - ldr r0, _0813FE6C @ =gBattleAnimEnemyMonIndex + ldr r0, _0813FE6C @ =gBattleAnimBankTarget ldrb r1, [r0] movs r0, 0 movs r2, 0xE @@ -1666,7 +1666,7 @@ _0813FE5A: .align 2, 0 _0813FE64: .4byte sub_813FE70 _0813FE68: .4byte gLastUsedItem -_0813FE6C: .4byte gBattleAnimEnemyMonIndex +_0813FE6C: .4byte gBattleAnimBankTarget thumb_func_end sub_813FDC0 thumb_func_start sub_813FE70 @@ -1690,7 +1690,7 @@ sub_813FE70: @ 813FE70 str r0, [r4, 0x1C] ldr r2, _0813FEBC @ =gSprites ldr r1, _0813FEC0 @ =gObjectBankIDs - ldr r0, _0813FEC4 @ =gBattleAnimEnemyMonIndex + ldr r0, _0813FEC4 @ =gBattleAnimBankTarget ldrb r0, [r0] adds r0, r1 ldrb r1, [r0] @@ -1709,7 +1709,7 @@ _0813FEB4: .4byte TaskDummy _0813FEB8: .4byte sub_813FEC8 _0813FEBC: .4byte gSprites _0813FEC0: .4byte gObjectBankIDs -_0813FEC4: .4byte gBattleAnimEnemyMonIndex +_0813FEC4: .4byte gBattleAnimBankTarget thumb_func_end sub_813FE70 thumb_func_start sub_813FEC8 @@ -1717,7 +1717,7 @@ sub_813FEC8: @ 813FEC8 push {r4-r7,lr} adds r7, r0, 0 ldr r1, _0813FF0C @ =gObjectBankIDs - ldr r0, _0813FF10 @ =gBattleAnimEnemyMonIndex + ldr r0, _0813FF10 @ =gBattleAnimBankTarget ldrb r0, [r0] adds r0, r1 ldrb r4, [r0] @@ -1750,7 +1750,7 @@ _0813FEFA: b _0813FFDC .align 2, 0 _0813FF0C: .4byte gObjectBankIDs -_0813FF10: .4byte gBattleAnimEnemyMonIndex +_0813FF10: .4byte gBattleAnimBankTarget _0813FF14: .4byte gTasks _0813FF18: cmp r0, 0x2 @@ -2451,7 +2451,7 @@ _08140450: .4byte sub_8140454 sub_8140454: @ 8140454 push {r4-r7,lr} adds r6, r0, 0 - ldr r7, _08140484 @ =gBattleAnimEnemyMonIndex + ldr r7, _08140484 @ =gBattleAnimBankTarget ldrh r0, [r6, 0x36] adds r0, 0x1 strh r0, [r6, 0x36] @@ -2471,7 +2471,7 @@ sub_8140454: @ 8140454 bl PlaySE b _081404CC .align 2, 0 -_08140484: .4byte gBattleAnimEnemyMonIndex +_08140484: .4byte gBattleAnimBankTarget _08140488: .4byte gDoingBattleAnim _0814048C: .4byte 0x00000173 _08140490: @@ -2690,7 +2690,7 @@ sub_81405F4: @ 81405F4 movs r2, 0x1 movs r3, 0x1C bl sub_814086C - ldr r0, _081406B0 @ =gBattleAnimEnemyMonIndex + ldr r0, _081406B0 @ =gBattleAnimBankTarget ldrb r1, [r0] movs r0, 0x1 movs r2, 0xE @@ -2699,7 +2699,7 @@ sub_81405F4: @ 81405F4 _08140646: ldr r6, _081406B4 @ =gSprites ldr r5, _081406B8 @ =gObjectBankIDs - ldr r4, _081406B0 @ =gBattleAnimEnemyMonIndex + ldr r4, _081406B0 @ =gBattleAnimBankTarget ldrb r0, [r4] adds r0, r5 ldrb r1, [r0] @@ -2747,7 +2747,7 @@ _08140646: .align 2, 0 _081406A8: .4byte sub_81406BC _081406AC: .4byte gLastUsedItem -_081406B0: .4byte gBattleAnimEnemyMonIndex +_081406B0: .4byte gBattleAnimBankTarget _081406B4: .4byte gSprites _081406B8: .4byte gObjectBankIDs thumb_func_end sub_81405F4 @@ -2772,7 +2772,7 @@ sub_81406BC: @ 81406BC _081406DA: ldr r4, _08140708 @ =gSprites ldr r3, _0814070C @ =gObjectBankIDs - ldr r2, _08140710 @ =gBattleAnimEnemyMonIndex + ldr r2, _08140710 @ =gBattleAnimBankTarget ldrb r0, [r2] adds r0, r3 ldrb r1, [r0] @@ -2794,7 +2794,7 @@ _081406DA: .align 2, 0 _08140708: .4byte gSprites _0814070C: .4byte gObjectBankIDs -_08140710: .4byte gBattleAnimEnemyMonIndex +_08140710: .4byte gBattleAnimBankTarget _08140714: ldr r6, _0814079C @ =0xfffffee0 adds r0, r6, 0 @@ -2824,7 +2824,7 @@ _08140734: beq _08140796 ldr r4, _081407A0 @ =gSprites ldr r3, _081407A4 @ =gObjectBankIDs - ldr r2, _081407A8 @ =gBattleAnimEnemyMonIndex + ldr r2, _081407A8 @ =gBattleAnimBankTarget ldrb r0, [r2] adds r0, r3 ldrb r1, [r0] @@ -2869,7 +2869,7 @@ _08140796: _0814079C: .4byte 0xfffffee0 _081407A0: .4byte gSprites _081407A4: .4byte gObjectBankIDs -_081407A8: .4byte gBattleAnimEnemyMonIndex +_081407A8: .4byte gBattleAnimBankTarget _081407AC: .4byte 0x02017840 _081407B0: .4byte sub_81405C8 _081407B4: .4byte gDoingBattleAnim @@ -4583,7 +4583,7 @@ sub_814151C: @ 814151C movs r0, 0 mov r8, r0 ldr r0, _08141550 @ =gObjectBankIDs - ldr r3, _08141554 @ =gBattleAnimPlayerMonIndex + ldr r3, _08141554 @ =gBattleAnimBankAttacker ldrb r2, [r3] adds r0, r2, r0 ldrb r6, [r0] @@ -4603,7 +4603,7 @@ sub_814151C: @ 814151C b _081416B6 .align 2, 0 _08141550: .4byte gObjectBankIDs -_08141554: .4byte gBattleAnimPlayerMonIndex +_08141554: .4byte gBattleAnimBankAttacker _08141558: .4byte gTasks _0814155C: cmp r0, 0x2 @@ -4738,7 +4738,7 @@ _08141654: adds r0, r1 ldrb r1, [r0, 0x8] strh r1, [r0, 0x8] - ldr r0, _08141690 @ =gBattleAnimPlayerMonIndex + ldr r0, _08141690 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankSide lsls r0, 24 @@ -4759,7 +4759,7 @@ _08141654: .align 2, 0 _08141688: .4byte gSprites _0814168C: .4byte gTasks -_08141690: .4byte gBattleAnimPlayerMonIndex +_08141690: .4byte gBattleAnimBankAttacker _08141694: ldr r0, _081416C0 @ =gSprites adds r1, r4, r6 @@ -4816,7 +4816,7 @@ _081416EC: beq _0814177C b _081417B8 _081416F2: - ldr r0, _08141708 @ =gBattleAnimPlayerMonIndex + ldr r0, _08141708 @ =gBattleAnimBankAttacker ldrb r0, [r0] bl GetBankIdentity_permutated lsls r0, 24 @@ -4827,7 +4827,7 @@ _081416F2: ldr r2, _08141710 @ =0x00003f42 b _08141718 .align 2, 0 -_08141708: .4byte gBattleAnimPlayerMonIndex +_08141708: .4byte gBattleAnimBankAttacker _0814170C: .4byte REG_BLDCNT _08141710: .4byte 0x00003f42 _08141714: @@ -4884,7 +4884,7 @@ _08141744: _08141778: .4byte REG_BLDALPHA _0814177C: ldr r1, _081417C0 @ =gObjectBankIDs - ldr r3, _081417C4 @ =gBattleAnimPlayerMonIndex + ldr r3, _081417C4 @ =gBattleAnimBankAttacker ldrb r0, [r3] adds r0, r1 ldrb r1, [r0] @@ -4918,7 +4918,7 @@ _081417B8: bx r0 .align 2, 0 _081417C0: .4byte gObjectBankIDs -_081417C4: .4byte gBattleAnimPlayerMonIndex +_081417C4: .4byte gBattleAnimBankAttacker _081417C8: .4byte gSprites _081417CC: .4byte 0x06010000 _081417D0: .4byte 0x040000d4 @@ -4931,7 +4931,7 @@ sub_81417D8: @ 81417D8 lsls r0, 24 lsrs r0, 24 ldr r3, _081417FC @ =gBattleAnimArgs - ldr r1, _08141800 @ =gBattleAnimPlayerMonIndex + ldr r1, _08141800 @ =gBattleAnimBankAttacker ldrb r1, [r1] lsls r1, 2 ldr r2, _08141804 @ =0x02017800 @@ -4945,7 +4945,7 @@ sub_81417D8: @ 81417D8 bx r0 .align 2, 0 _081417FC: .4byte gBattleAnimArgs -_08141800: .4byte gBattleAnimPlayerMonIndex +_08141800: .4byte gBattleAnimBankAttacker _08141804: .4byte 0x02017800 thumb_func_end sub_81417D8 @@ -4954,7 +4954,7 @@ sub_8141808: @ 8141808 push {lr} lsls r0, 24 lsrs r0, 24 - ldr r2, _08141820 @ =gBattleAnimEnemyMonIndex + ldr r2, _08141820 @ =gBattleAnimBankTarget ldr r1, _08141824 @ =gEffectBank ldrb r1, [r1] strb r1, [r2] @@ -4962,7 +4962,7 @@ sub_8141808: @ 8141808 pop {r0} bx r0 .align 2, 0 -_08141820: .4byte gBattleAnimEnemyMonIndex +_08141820: .4byte gBattleAnimBankTarget _08141824: .4byte gEffectBank thumb_func_end sub_8141808 @@ -4994,7 +4994,7 @@ sub_8141828: @ 8141828 bl GetMonData adds r4, r0, 0 adds r0, r6, 0 - bl b_side_obj__get_some_boolean + bl IsAnimBankSpriteVisible lsls r0, 24 cmp r0, 0 beq _081418FC @@ -5511,7 +5511,7 @@ sub_8141C30: @ 8141C30 adds r0, r4, 0 bl sub_80786EC ldr r1, _08141CAC @ =gObjectBankIDs - ldr r0, _08141CB0 @ =gBattleAnimPlayerMonIndex + ldr r0, _08141CB0 @ =gBattleAnimBankAttacker ldrb r0, [r0] adds r0, r1 ldrb r1, [r0] @@ -5531,7 +5531,7 @@ sub_8141C30: @ 8141C30 _08141CA4: .4byte gBattleAnimArgs _08141CA8: .4byte 0x0000ffe0 _08141CAC: .4byte gObjectBankIDs -_08141CB0: .4byte gBattleAnimPlayerMonIndex +_08141CB0: .4byte gBattleAnimBankAttacker _08141CB4: .4byte gSprites _08141CB8: .4byte sub_8141CBC thumb_func_end sub_8141C30 @@ -5542,7 +5542,7 @@ sub_8141CBC: @ 8141CBC adds r3, r0, 0 ldr r2, _08141CE4 @ =gSprites ldr r1, _08141CE8 @ =gObjectBankIDs - ldr r0, _08141CEC @ =gBattleAnimPlayerMonIndex + ldr r0, _08141CEC @ =gBattleAnimBankAttacker ldrb r0, [r0] adds r0, r1 ldrb r1, [r0] @@ -5562,7 +5562,7 @@ _08141CE0: .align 2, 0 _08141CE4: .4byte gSprites _08141CE8: .4byte gObjectBankIDs -_08141CEC: .4byte gBattleAnimPlayerMonIndex +_08141CEC: .4byte gBattleAnimBankAttacker _08141CF0: .4byte sub_8141CF4 thumb_func_end sub_8141CBC @@ -5598,7 +5598,7 @@ sub_8141D20: @ 8141D20 adds r4, r0, 0 ldr r5, _08141D70 @ =gSprites ldr r3, _08141D74 @ =gObjectBankIDs - ldr r2, _08141D78 @ =gBattleAnimPlayerMonIndex + ldr r2, _08141D78 @ =gBattleAnimBankAttacker ldrb r0, [r2] adds r0, r3 ldrb r1, [r0] @@ -5635,7 +5635,7 @@ _08141D68: .align 2, 0 _08141D70: .4byte gSprites _08141D74: .4byte gObjectBankIDs -_08141D78: .4byte gBattleAnimPlayerMonIndex +_08141D78: .4byte gBattleAnimBankAttacker thumb_func_end sub_8141D20 thumb_func_start sub_8141D7C @@ -5646,11 +5646,11 @@ sub_8141D7C: @ 8141D7C lsrs r4, 24 movs r0, 0 bl GetBankByPlayerAI - ldr r1, _08141DA4 @ =gBattleAnimPlayerMonIndex + ldr r1, _08141DA4 @ =gBattleAnimBankAttacker strb r0, [r1] movs r0, 0x1 bl GetBankByPlayerAI - ldr r1, _08141DA8 @ =gBattleAnimEnemyMonIndex + ldr r1, _08141DA8 @ =gBattleAnimBankTarget strb r0, [r1] adds r0, r4, 0 bl DestroyAnimVisualTask @@ -5658,8 +5658,8 @@ sub_8141D7C: @ 8141D7C pop {r0} bx r0 .align 2, 0 -_08141DA4: .4byte gBattleAnimPlayerMonIndex -_08141DA8: .4byte gBattleAnimEnemyMonIndex +_08141DA4: .4byte gBattleAnimBankAttacker +_08141DA8: .4byte gBattleAnimBankTarget thumb_func_end sub_8141D7C thumb_func_start sub_8141DAC @@ -5721,20 +5721,20 @@ sub_8141E10: @ 8141E10 push {lr} lsls r0, 24 lsrs r0, 24 - ldr r2, _08141E2C @ =gBattleAnimPlayerMonIndex + ldr r2, _08141E2C @ =gBattleAnimBankAttacker ldr r1, _08141E30 @ =0x02017840 ldrh r1, [r1] strb r1, [r2] - ldr r2, _08141E34 @ =gBattleAnimEnemyMonIndex + ldr r2, _08141E34 @ =gBattleAnimBankTarget lsrs r1, 8 strb r1, [r2] bl DestroyAnimVisualTask pop {r0} bx r0 .align 2, 0 -_08141E2C: .4byte gBattleAnimPlayerMonIndex +_08141E2C: .4byte gBattleAnimBankAttacker _08141E30: .4byte 0x02017840 -_08141E34: .4byte gBattleAnimEnemyMonIndex +_08141E34: .4byte gBattleAnimBankTarget thumb_func_end sub_8141E10 .align 2, 0 @ Don't pad with nop. diff --git a/asm/battle_tower.s b/asm/battle_tower.s index 15cb95854..1c1eb51a4 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -1522,7 +1522,7 @@ _081350AE: lsls r0, 16 lsrs r0, 16 movs r1, 0x1 - bl GetNationalPokedexFlag + bl GetSetPokedexFlag lsls r0, 24 cmp r0, 0 beq _081350C6 @@ -1555,7 +1555,7 @@ AppendBattleTowerBannedSpeciesName: @ 81350E0 lsls r0, 16 lsrs r0, 16 movs r1, 0x1 - bl GetNationalPokedexFlag + bl GetSetPokedexFlag lsls r0, 24 cmp r0, 0 beq _081351E6 diff --git a/asm/cable_car.s b/asm/cable_car.s index e4d989844..385cd404d 100644 --- a/asm/cable_car.s +++ b/asm/cable_car.s @@ -256,22 +256,22 @@ _081233EC: ldr r0, _0812345C @ =gCableCarMtChimneyTilemap ldr r4, _08123460 @ =0x02019000 adds r1, r4, 0 - bl sub_800D238 + bl LZDecompressWram ldr r0, _08123464 @ =gCableCarTreeTilemap movs r2, 0xB4 lsls r2, 1 adds r1, r4, r2 - bl sub_800D238 + bl LZDecompressWram ldr r0, _08123468 @ =gCableCarMountainTilemap movs r2, 0xA5 lsls r2, 3 adds r1, r4, r2 - bl sub_800D238 + bl LZDecompressWram ldr r0, _0812346C @ =gCableCarPylonStemTilemap ldr r1, _08123470 @ =0x000009d8 adds r4, r1 adds r1, r4, 0 - bl sub_800D238 + bl LZDecompressWram ldr r0, _08123474 @ =gCableCarBG_Pal movs r1, 0 movs r2, 0x80 diff --git a/asm/contest.s b/asm/contest.s index 4a85f3d16..c5dfe3e2e 100644 --- a/asm/contest.s +++ b/asm/contest.s @@ -6904,7 +6904,7 @@ sub_80AE9FC: @ 80AE9FC adds r0, r5, 0 mov r1, r8 adds r2, r6, 0 - bl species_and_otid_get_pal + bl GetMonSpritePalFromOtIdPersonality movs r1, 0x90 lsls r1, 1 movs r2, 0x20 diff --git a/asm/contest_link_80C2020.s b/asm/contest_link_80C2020.s index 93dd26eee..b91a9665b 100644 --- a/asm/contest_link_80C2020.s +++ b/asm/contest_link_80C2020.s @@ -1361,7 +1361,7 @@ _080C2B14: adds r0, r6, 0 ldr r1, [sp, 0xC] adds r2, r4, 0 - bl sub_80409C8 + bl GetMonSpritePalStructFromOtIdPersonality adds r4, r0, 0 bl LoadCompressedObjectPalette adds r0, r6, 0 @@ -1601,7 +1601,7 @@ _080C2D42: lsls r0, 16 lsrs r0, 16 movs r1, 0x2 - bl GetNationalPokedexFlag + bl GetSetPokedexFlag adds r5, 0x40 subs r4, 0x1 cmp r4, 0 diff --git a/asm/easy_chat.s b/asm/easy_chat.s index 6b85e1e76..7bb496641 100644 --- a/asm/easy_chat.s +++ b/asm/easy_chat.s @@ -9975,7 +9975,7 @@ _080EAE50: lsls r0, 16 lsrs r0, 16 movs r1, 0 - bl GetNationalPokedexFlag + bl GetSetPokedexFlag b _080EAE7C _080EAE62: ldr r0, _080EAE74 @ =gUnknown_083DB694 diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s index c6d3c0978..700464405 100644 --- a/asm/evolution_scene.s +++ b/asm/evolution_scene.s @@ -260,7 +260,7 @@ EvolutionScene: @ 8111984 adds r0, r6, 0 ldr r1, [sp, 0x2C] ldr r2, [sp, 0x30] - bl sub_80409C8 + bl GetMonSpritePalStructFromOtIdPersonality ldr r0, [r0] movs r1, 0x88 lsls r1, 1 @@ -326,7 +326,7 @@ EvolutionScene: @ 8111984 mov r0, r10 ldr r1, [sp, 0x2C] ldr r2, [sp, 0x30] - bl sub_80409C8 + bl GetMonSpritePalStructFromOtIdPersonality ldr r0, [r0] movs r1, 0x90 lsls r1, 1 @@ -568,7 +568,7 @@ CB2_EvolutionSceneLoadGraphics: @ 8111C90 adds r0, r6, 0 mov r1, r10 mov r2, r8 - bl sub_80409C8 + bl GetMonSpritePalStructFromOtIdPersonality ldr r0, [r0] movs r1, 0x90 lsls r1, 1 @@ -832,7 +832,7 @@ _08111FE2: adds r0, r7, 0 adds r1, r6, 0 adds r2, r5, 0 - bl sub_80409C8 + bl GetMonSpritePalStructFromOtIdPersonality ldr r0, [r0] movs r1, 0x90 lsls r1, 1 @@ -994,7 +994,7 @@ TradeEvolutionScene: @ 81120E4 adds r0, r5, 0 adds r1, r7, 0 adds r2, r6, 0 - bl sub_80409C8 + bl GetMonSpritePalStructFromOtIdPersonality ldr r0, [r0] movs r1, 0x90 lsls r1, 1 @@ -1233,13 +1233,13 @@ _08112354: lsls r0, 16 lsrs r0, 16 movs r1, 0x2 - bl GetNationalPokedexFlag + bl GetSetPokedexFlag ldrh r0, [r4, 0xC] bl SpeciesToNationalPokedexNum lsls r0, 16 lsrs r0, 16 movs r1, 0x3 - bl GetNationalPokedexFlag + bl GetSetPokedexFlag adds r0, r5, 0 movs r1, 0xB bl GetMonData @@ -1739,13 +1739,13 @@ _081127BE: lsls r0, 16 lsrs r0, 16 movs r1, 0x2 - bl GetNationalPokedexFlag + bl GetSetPokedexFlag ldrh r0, [r4, 0x10] bl SpeciesToNationalPokedexNum lsls r0, 16 lsrs r0, 16 movs r1, 0x3 - bl GetNationalPokedexFlag + bl GetSetPokedexFlag movs r0, 0xE bl IncrementGameStat b _08112FD0 @@ -3047,13 +3047,13 @@ _08113316: lsls r0, 16 lsrs r0, 16 movs r1, 0x2 - bl GetNationalPokedexFlag + bl GetSetPokedexFlag ldrh r0, [r4, 0x10] bl SpeciesToNationalPokedexNum lsls r0, 16 lsrs r0, 16 movs r1, 0x3 - bl GetNationalPokedexFlag + bl GetSetPokedexFlag movs r0, 0xE bl IncrementGameStat b _08113B3A diff --git a/asm/pokeblock_feed.s b/asm/pokeblock_feed.s index 7df634399..df6dd1e36 100644 --- a/asm/pokeblock_feed.s +++ b/asm/pokeblock_feed.s @@ -387,7 +387,7 @@ _08147BB8: adds r1, r0, 0 adds r0, r5, 0 adds r2, r6, 0 - bl sub_80409C8 + bl GetMonSpritePalStructFromOtIdPersonality adds r4, r0, 0 bl LoadCompressedObjectPalette ldrh r0, [r4, 0x4] @@ -881,7 +881,7 @@ sub_8147F84: @ 8147F84 mov r1, r9 strb r0, [r1] adds r0, r4, 0 - bl sub_8040A3C + bl IsPokeSpriteNotFlipped lsls r0, 24 cmp r0, 0 bne _08148016 diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index db16c2788..eaf44749b 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -12958,7 +12958,7 @@ _0809C08C: adds r1, r6, r2 str r0, [r1] adds r0, r7, 0 - bl pokemon_get_pal + bl GetMonSpritePal ldr r2, _0809C11C @ =0x000011e8 adds r1, r6, r2 str r0, [r1] @@ -13031,7 +13031,7 @@ _0809C120: str r2, [r4] ldrh r0, [r5] mov r1, r9 - bl species_and_otid_get_pal + bl GetMonSpritePalFromOtIdPersonality ldr r2, _0809C1D0 @ =0x000011e8 adds r1, r6, r2 str r0, [r1] diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index fea619ac8..859fd177f 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -3859,7 +3859,7 @@ _0809F718: adds r1, r0, 0 adds r0, r5, 0 adds r2, r6, 0 - bl sub_80409C8 + bl GetMonSpritePalStructFromOtIdPersonality adds r4, r0, 0 bl LoadCompressedObjectPalette ldrh r0, [r4, 0x4] @@ -7620,7 +7620,7 @@ sub_80A1808: @ 80A1808 ldr r0, _080A1868 @ =sub_80A1888 str r0, [r4] adds r0, r6, 0 - bl sub_8040A3C + bl IsPokeSpriteNotFlipped lsls r0, 24 cmp r0, 0 bne _080A186C diff --git a/asm/pokenav.s b/asm/pokenav.s index cb6a40450..ea5c0e315 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -17787,7 +17787,7 @@ sub_80F4824: @ 80F4824 adds r0, r5, 0 mov r1, r8 adds r2, r4, 0 - bl species_and_otid_get_pal + bl GetMonSpritePalFromOtIdPersonality mov r2, r9 lsls r1, r2, 7 adds r1, r7, r1 diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 46af5bc0f..bebe3633e 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -10098,13 +10098,13 @@ sub_81063C0: @ 81063C0 ldr r0, _081063F0 @ =gSlotMachineReelTimeLights_Gfx ldr r4, _081063F4 @ =0x02010000 adds r1, r4, 0 - bl sub_800D238 + bl LZDecompressWram ldr r0, _081063F8 @ =gUnknown_083EDE8C movs r1, 0xC8 lsls r1, 6 adds r4, r1 adds r1, r4, 0 - bl sub_800D238 + bl LZDecompressWram ldr r0, _081063FC @ =gUnknown_083EDC2C bl LoadSpriteSheets ldr r0, _08106400 @ =gSlotMachineSpritePalettes diff --git a/asm/trade.s b/asm/trade.s index 223f62474..32c5c60e6 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -4302,7 +4302,7 @@ _08049F8E: lsls r0, 2 adds r0, r7 ldr r1, _0804A0A0 @ =sub_809D62C - bl oamt_set_x3A_32 + bl StoreSpriteCallbackInData6 ldr r2, _0804A09C @ =gUnknown_03004824 ldr r1, [r2] adds r1, 0x80 @@ -6748,7 +6748,7 @@ _0804B330: str r4, [sp, 0x8] bl HandleLoadSpecialPokePic mov r0, r10 - bl sub_8040990 + bl GetMonSpritePalStruct bl LoadCompressedObjectPalette ldr r0, _0804B3A0 @ =gUnknown_03004828 ldr r0, [r0] @@ -6766,7 +6766,7 @@ _0804B39C: .4byte gUnknown_081FAF4C _0804B3A0: .4byte gUnknown_03004828 _0804B3A4: mov r0, r10 - bl sub_8040990 + bl GetMonSpritePalStruct ldrh r0, [r0, 0x4] adds r1, r4, 0 bl GetMonSpriteTemplate_803C56C @@ -7501,10 +7501,10 @@ sub_804BA18: @ 804BA18 lsrs r4, 16 adds r0, r4, 0 movs r1, 0x2 - bl GetNationalPokedexFlag + bl GetSetPokedexFlag adds r0, r4, 0 movs r1, 0x3 - bl GetNationalPokedexFlag + bl GetSetPokedexFlag _0804BA5A: pop {r4} pop {r0} @@ -9472,7 +9472,7 @@ _0804CC68: lsls r1, 1 adds r0, r1 ldrh r0, [r0] - bl sub_8040A3C + bl IsPokeSpriteNotFlipped lsls r0, 24 cmp r0, 0 bne _0804CCE4 diff --git a/include/battle.h b/include/battle.h index 9d8092197..669f65d0a 100644 --- a/include/battle.h +++ b/include/battle.h @@ -782,7 +782,7 @@ void BattleTurnPassed(void); // asm/battle_2.o void sub_8012324(void); void sub_8012FBC(u8, u8); -u8 b_first_side(u8, u8, u8); +u8 GetWhoStrikesFirst(u8, u8, u8); void TurnValuesCleanUp(u8); void SpecialStatusesClear(void); void sub_80138F0(void); diff --git a/include/battle_anim.h b/include/battle_anim.h index 48ceece21..2386c515c 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -53,14 +53,14 @@ struct UnknownStruct3 }; void DoMoveAnim(const u8 *const moveAnims[], u16 b, u8 c); -bool8 b_side_obj__get_some_boolean(u8 a); +bool8 IsAnimBankSpriteVisible(u8 a); void sub_8076034(u8, u8); bool8 IsContest(void); void battle_anim_clear_some_data(void); void move_anim_8072740(struct Sprite *sprite); void DestroyAnimVisualTask(u8 task); void DestroyAnimVisualTask(u8 task); -bool8 b_side_obj__get_some_boolean(u8); +bool8 IsAnimBankSpriteVisible(u8); u8 IsContest(); diff --git a/include/decompress.h b/include/decompress.h index 84c1f29c0..01f66971c 100644 --- a/include/decompress.h +++ b/include/decompress.h @@ -3,7 +3,7 @@ #include "sprite.h" -void sub_800D238(const void *src, void *dest); +void LZDecompressWram(const void *src, void *dest); void LZDecompressVram(const void *src, void *dest); void LoadCompressedObjectPic(const struct CompressedSpriteSheet *a); void LoadCompressedObjectPicOverrideBuffer(const struct CompressedSpriteSheet *a, void *buffer); diff --git a/include/global.h b/include/global.h index f076274cc..8f28c8c59 100644 --- a/include/global.h +++ b/include/global.h @@ -37,6 +37,7 @@ fndec\ #define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0])) +#define POKEMON_SLOTS_NUMBER 412 #define POKEMON_NAME_LENGTH 10 #define OT_NAME_LENGTH 7 @@ -571,6 +572,11 @@ struct RecordMixingGift struct RecordMixingGiftData data; }; +// there should be enough flags for all 412 slots +// each slot takes up 8 flags +// if the value is not divisible by 8, we need to account for the reminder as well +#define DEX_FLAGS_NO ((POKEMON_SLOTS_NUMBER / 8) + ((POKEMON_SLOTS_NUMBER % 8) ? 1 : 0)) + struct SaveBlock1 /* 0x02025734 */ { /*0x00*/ struct Coords16 pos; @@ -597,7 +603,7 @@ struct SaveBlock1 /* 0x02025734 */ /*0x640*/ struct ItemSlot bagPocket_TMHM[64]; /*0x740*/ struct ItemSlot bagPocket_Berries[46]; /*0x7F8*/ struct Pokeblock pokeblocks[40]; - /*0x938*/ u8 unk938[52]; // pokedex related + /*0x938*/ u8 dexSeen2[DEX_FLAGS_NO]; /*0x96C*/ u16 berryBlenderRecords[3]; /*0x972*/ u8 filler_972[0x6]; /*0x978*/ u16 trainerRematchStepCounter; @@ -657,7 +663,7 @@ struct SaveBlock1 /* 0x02025734 */ /*0x3160*/ struct EnigmaBerry enigmaBerry; /*0x3690*/ struct RamScript ramScript; /*0x3A7C*/ struct RecordMixingGift recordMixingGift; - /*0x3A8C*/ u8 unk3A8C[52]; //pokedex related + /*0x3A8C*/ u8 dexSeen3[DEX_FLAGS_NO]; }; extern struct SaveBlock1 gSaveBlock1; @@ -679,8 +685,8 @@ struct Pokedex /*0x04*/ u32 unownPersonality; // set when you first see Unown /*0x08*/ u32 spindaPersonality; // set when you first see Spinda /*0x0C*/ u32 unknown3; - /*0x10*/ u8 owned[52]; - /*0x44*/ u8 seen[52]; + /*0x10*/ u8 owned[DEX_FLAGS_NO]; + /*0x44*/ u8 seen[DEX_FLAGS_NO]; }; struct SaveBlock2_Sub diff --git a/include/pokedex.h b/include/pokedex.h index 1bc63a4ff..c47494e1f 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -9,7 +9,17 @@ void CB2_InitPokedex(void); u8 sub_809070C(u16 dexNum, u32 b, u32 c); const u8 *GetPokemonCategory(u16); u16 GetPokedexHeightWeight(u16 dexNum, u8 data); -s8 GetNationalPokedexFlag(u16, u8); + +enum +{ + FLAG_GET_SEEN, + FLAG_GET_CAUGHT, + FLAG_SET_SEEN, + FLAG_SET_CAUGHT +}; + +s8 GetSetPokedexFlag(u16, u8); + u16 GetNationalPokedexCount(u8); u16 GetHoennPokedexCount(u8); bool8 sub_8090FC0(void); diff --git a/include/pokemon.h b/include/pokemon.h index d0ceaf15e..e2c7bd60e 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -391,7 +391,7 @@ struct BaseStats /*0x17*/ u8 ability2; /*0x18*/ u8 safariZoneFleeRate; /*0x19*/ u8 bodyColor:7; - u8 unk19_7:1; + u8 noFlip:1; }; struct BattleMove @@ -588,9 +588,9 @@ u8 sub_8040574(struct Pokemon *party); void ClearBattleMonForms(void); void sub_80408BC(); void current_map_music_set__default_for_battle(u16); -const u8 *pokemon_get_pal(struct Pokemon *mon); -const u8 *species_and_otid_get_pal(u16, u32, u32); -const struct CompressedSpritePalette *sub_80409C8(u16, u32, u32); +const u8 *GetMonSpritePal(struct Pokemon *mon); +const u8 *GetMonSpritePalFromOtIdPersonality(u16, u32, u32); +const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16, u32, u32); bool8 IsOtherTrainer(u32, u8 *); void sub_8040B8C(void); void SetWildMonHeldItem(void); diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h index 11e94e1f5..7e2cf4cee 100644 --- a/include/rom_8077ABC.h +++ b/include/rom_8077ABC.h @@ -4,10 +4,18 @@ #include "sprite.h" #include "task.h" +enum +{ + ANIM_BANK_ATK, + ANIM_BANK_DEF, + ANIM_BANK_ATK_PARTNER, + ANIM_BANK_DEF_PARTNER +}; + u8 sub_8077ABC(u8, u8); u8 sub_8077E44(u8 slot, u16 species, u8 a3); -u8 obj_id_for_side_relative_to_move(u8 side); -void oamt_set_x3A_32(struct Sprite *sprite, void(*callback)(struct Sprite *)); +u8 GetAnimBankSpriteId(u8 side); +void StoreSpriteCallbackInData6(struct Sprite *sprite, void(*callback)(struct Sprite *)); void sub_8078314(struct Sprite *sprite); void sub_8078364(struct Sprite *sprite); void sub_8078458(struct Sprite *sprite); @@ -22,8 +30,8 @@ u8 GetBankIdentity(u8 slot); u8 GetBankByPlayerAI(u8); u8 GetBankByPlayerAI(u8); u8 GetBankByPlayerAI(u8 state); -u8 sub_8078874(u8); -bool8 sub_8078874(u8); +u8 AnimBankSpriteExists(u8); +bool8 AnimBankSpriteExists(u8); bool8 IsDoubleBattle(); u8 IsDoubleBattle(void); bool8 IsDoubleBattle(void); diff --git a/src/battle_10.c b/src/battle_10.c index 0237bab4b..81991f976 100644 --- a/src/battle_10.c +++ b/src/battle_10.c @@ -66,7 +66,7 @@ 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 StoreSpriteCallbackInData6(); extern void sub_8078B34(struct Sprite *); extern void sub_80375B4(void); extern void sub_8010384(struct Sprite *); @@ -94,7 +94,7 @@ extern void nullsub_47(void); extern bool8 IsDoubleBattle(void); extern void sub_8037840(void); extern void sub_8031B74(); -extern u8 sub_8078874(); +extern u8 AnimBankSpriteExists(); extern u8 move_anim_start_t3(); extern void sub_8037FD8(void); extern void sub_8037F34(void); @@ -826,7 +826,7 @@ void sub_80398B0(void) 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); + StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); gBattleBankFunc[gActiveBank] = sub_80375B4; } @@ -1177,7 +1177,7 @@ void sub_803A1B8(void) 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); + StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_803A3A8); taskId = CreateTask(sub_803A2C4, 5); gTasks[taskId].data[0] = gActiveBank; if (ewram17810[gActiveBank].unk0_0) @@ -1274,7 +1274,7 @@ void sub_803A56C(void) void sub_803A578(void) { - if (sub_8078874(gActiveBank) != 0) + if (AnimBankSpriteExists(gActiveBank) != 0) { gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; sub_8031F88(gActiveBank); diff --git a/src/battle_2.c b/src/battle_2.c index 7772444d7..a7668302b 100644 --- a/src/battle_2.c +++ b/src/battle_2.c @@ -1923,14 +1923,14 @@ void sub_8011384(void) } if (GetBankSide(gActiveBank) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) - GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); + GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); } else { if (GetBankSide(gActiveBank) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) { - GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); + GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); dp01_build_cmdbuf_x04_4_4_4(0); MarkBufferBankForExecution(gActiveBank); } @@ -2085,7 +2085,7 @@ void bc_801362C(void) { if (GetBankSide(gActiveBank) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) - GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); + GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); } gBattleMainFunc = sub_8011970; } @@ -2167,7 +2167,7 @@ void BattleBeginFirstTurn(void) { for (j = i + 1; j < gNoOfAllBanks; j++) { - if (b_first_side(gTurnOrder[i], gTurnOrder[j], 1) != 0) + if (GetWhoStrikesFirst(gTurnOrder[i], gTurnOrder[j], 1) != 0) sub_8012FBC(i, j); } } diff --git a/src/battle_3.c b/src/battle_3.c index 9bb9e333f..12a91810e 100644 --- a/src/battle_3.c +++ b/src/battle_3.c @@ -378,7 +378,7 @@ u8 UpdateTurnCounters(void) s32 j; for (j = i + 1; j < gNoOfAllBanks; j++) { - if (b_first_side(gTurnOrder[i], gTurnOrder[j], 0)) + if (GetWhoStrikesFirst(gTurnOrder[i], gTurnOrder[j], 0)) sub_8012FBC(i, j); } } diff --git a/src/battle_4.c b/src/battle_4.c index 6dd5d7df6..7464f0535 100644 --- a/src/battle_4.c +++ b/src/battle_4.c @@ -122,7 +122,7 @@ bool8 IsTradedMon(struct Pokemon*); void b_movescr_stack_pop_cursor(void); void SwitchInClearStructs(void); u8* ConvertIntToDecimalStringN(u8*, s32, u8, u8); -u8 GetNationalPokedexFlag(u16 nationalNum, u8 caseID); +u8 GetSetPokedexFlag(u16 nationalNum, u8 caseID); u16 SpeciesToNationalPokedexNum(u16 species); u8 sub_803FC34(u8 bank); u16 sub_803FBFC(u8 a); @@ -10122,7 +10122,7 @@ static void atk4E_switchin_anim(void) gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); if (GetBankSide(gActiveBank) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER))) { - GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); + GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); } gAbsentBankFlags &= ~(gBitTable[gActiveBank]); EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2)); @@ -17834,7 +17834,7 @@ void atkEF_pokeball_catch_calculation(void) ball_multiplier = 10; break; case ITEM_REPEAT_BALL: - if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) ball_multiplier = 30; else ball_multiplier = 10; @@ -17920,11 +17920,11 @@ static void atkF0_copy_caught_poke(void) static void atkF1_setpoke_as_caught(void) { - if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); else { - GetNationalPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 3); + GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 3); if (gBattleMons[gBankTarget].species == SPECIES_UNOWN) gSaveBlock2.pokedex.unownPersonality = gBattleMons[gBankTarget].personality; if (gBattleMons[gBankTarget].species == SPECIES_SPINDA) //else if diff --git a/src/battle_6.c b/src/battle_6.c index c833aef5e..66b08f82e 100644 --- a/src/battle_6.c +++ b/src/battle_6.c @@ -97,12 +97,12 @@ 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 StoreSpriteCallbackInData6(); extern void sub_80318FC(); extern bool8 IsDoubleBattle(void); extern void sub_802D500(void); extern void dp11b_obj_free(); -extern bool8 sub_8078874(u8); +extern bool8 AnimBankSpriteExists(u8); extern bool8 move_anim_start_t3(); extern void sub_802E460(void); extern void b_link_standby_message(void); @@ -866,7 +866,7 @@ void PlayerHandleTrainerSlideBack(void) 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); + StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); gBattleBankFunc[gActiveBank] = sub_802D274; } @@ -1337,7 +1337,7 @@ void PlayerHandleTrainerBallThrow(void) 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); + StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); paletteNum = AllocSpritePalette(0xD6F8); LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2.playerGender].data, 0x100 + paletteNum * 16, 32); @@ -1435,7 +1435,7 @@ void sub_80310F0(void) void PlayerHandleSpriteInvisibility(void) { - if (sub_8078874(gActiveBank)) + if (AnimBankSpriteExists(gActiveBank)) { gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; sub_8031F88(gActiveBank); diff --git a/src/battle_7.c b/src/battle_7.c index f2838467e..f81025409 100644 --- a/src/battle_7.c +++ b/src/battle_7.c @@ -49,8 +49,8 @@ extern struct MusicPlayerInfo gMPlay_BGM; extern u32 gBitTable[]; extern u16 gBattleTypeFlags; extern u8 gBattleMonForms[]; -extern u8 gBattleAnimPlayerMonIndex; -extern u8 gBattleAnimEnemyMonIndex; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; extern void (*gAnimScriptCallback)(void); extern u8 gAnimScriptActive; extern const u8 *const gBattleAnims_Unknown1[]; @@ -80,7 +80,7 @@ extern void sub_80440EC(); extern void sub_804777C(); extern void sub_8141828(); extern u8 sub_8077ABC(); -extern u8 sub_8078874(u8); +extern u8 AnimBankSpriteExists(u8); extern u8 sub_8077F68(u8); extern u8 sub_8077F7C(u8); extern void sub_8094958(void); @@ -190,8 +190,8 @@ bool8 move_anim_start_t3(u8 a, u8 b, u8 c, u8 d, u16 e) sub_80324E0(a); return TRUE; } - gBattleAnimPlayerMonIndex = b; - gBattleAnimEnemyMonIndex = c; + gBattleAnimBankAttacker = b; + gBattleAnimBankTarget = c; ewram17840.unk0 = e; DoMoveAnim(gBattleAnims_Unknown1, d, 0); taskId = CreateTask(sub_80315E8, 10); @@ -230,8 +230,8 @@ void move_anim_start_t4(u8 a, u8 b, u8 c, u8 d) { u8 taskId; - gBattleAnimPlayerMonIndex = b; - gBattleAnimEnemyMonIndex = c; + gBattleAnimBankAttacker = b; + gBattleAnimBankTarget = c; DoMoveAnim(gBattleAnims_Unknown2, d, 0); taskId = CreateTask(sub_80316CC, 10); gTasks[taskId].data[0] = a; @@ -306,16 +306,16 @@ void sub_8031794(struct Pokemon *pkmn, u8 b) r7); paletteOffset = 0x100 + b * 16; if (ewram17800[b].unk2 == 0) - lzPaletteData = pokemon_get_pal(pkmn); + lzPaletteData = GetMonSpritePal(pkmn); else - lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue); - sub_800D238(lzPaletteData, ewram); + lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue); + LZDecompressWram(lzPaletteData, ewram); LoadPalette(ewram, paletteOffset, 0x20); LoadPalette(ewram, 0x80 + b * 16, 0x20); if (species == SPECIES_CASTFORM) { paletteOffset = 0x100 + b * 16; - sub_800D238(lzPaletteData, ewram + 0x16400); + LZDecompressWram(lzPaletteData, ewram + 0x16400); LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); } if (ewram17800[b].unk2 != 0) @@ -358,16 +358,16 @@ void sub_80318FC(struct Pokemon *pkmn, u8 b) r7); paletteOffset = 0x100 + b * 16; if (ewram17800[b].unk2 == 0) - lzPaletteData = pokemon_get_pal(pkmn); + lzPaletteData = GetMonSpritePal(pkmn); else - lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue); - sub_800D238(lzPaletteData, ewram); + lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue); + LZDecompressWram(lzPaletteData, ewram); LoadPalette(ewram, paletteOffset, 0x20); LoadPalette(ewram, 0x80 + b * 16, 0x20); if (species == SPECIES_CASTFORM) { paletteOffset = 0x100 + b * 16; - sub_800D238(lzPaletteData, ewram + 0x16400); + LZDecompressWram(lzPaletteData, ewram + 0x16400); LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); } if (ewram17800[b].unk2 != 0) @@ -511,7 +511,7 @@ bool8 sub_8031C30(u8 a) void load_gfxc_health_bar(void) { - sub_800D238(gUnknown_08D09C48, (void *)0x02000000); + LZDecompressWram(gUnknown_08D09C48, (void *)0x02000000); } u8 battle_load_something(u8 *pState, u8 *b) @@ -695,14 +695,14 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[a]].oam.tileNum * 32); DmaCopy32(3, src, dst, 0x800); paletteOffset = 0x100 + a * 16; - lzPaletteData = species_and_otid_get_pal(species, otId, personalityValue); - sub_800D238(lzPaletteData, ewram); + lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue); + LZDecompressWram(lzPaletteData, ewram); LoadPalette(ewram, paletteOffset, 32); if (species == SPECIES_CASTFORM) { u16 *paletteSrc = (u16 *)(ewram + 0x16400); - sub_800D238(lzPaletteData, paletteSrc); + LZDecompressWram(lzPaletteData, paletteSrc); LoadPalette(paletteSrc + gBattleMonForms[b] * 16, paletteOffset, 32); } BlendPalette(paletteOffset, 16, 6, 0x7FFF); @@ -851,7 +851,7 @@ void sub_80326EC(u8 a) for (i = 0; i < gNoOfAllBanks; i++) { - if (sub_8078874(i) != 0) + if (AnimBankSpriteExists(i) != 0) { gSprites[gObjectBankIDs[i]].oam.affineMode = a; if (a == 0) @@ -889,7 +889,7 @@ void sub_80328A4(struct Sprite *sprite) u8 r4 = sprite->data0; struct Sprite *r7 = &gSprites[gObjectBankIDs[r4]]; - if (!r7->inUse || sub_8078874(r4) == 0) + if (!r7->inUse || AnimBankSpriteExists(r4) == 0) { sprite->callback = sub_8032978; return; diff --git a/src/battle_8.c b/src/battle_8.c index 75f10c4b1..d9a61c3d7 100644 --- a/src/battle_8.c +++ b/src/battle_8.c @@ -76,7 +76,7 @@ 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 StoreSpriteCallbackInData6(); extern void sub_803311C(void); extern void sub_8010384(struct Sprite *); extern bool8 mplay_80342A4(u8); @@ -104,7 +104,7 @@ extern void nullsub_45(void); extern void sub_8031B74(); extern bool8 IsDoubleBattle(void); extern void sub_8032E2C(void); -extern u8 sub_8078874(); +extern u8 AnimBankSpriteExists(); extern u8 move_anim_start_t3(); extern void sub_80334C0(void); extern void OpponentBufferExecCompleted(void); @@ -868,7 +868,7 @@ void OpponentHandleTrainerSlideBack(void) 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); + StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); gBattleBankFunc[gActiveBank] = sub_8032BBC; } @@ -1497,7 +1497,7 @@ void sub_8035B04(void) 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); + StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_8035C10); taskId = CreateTask(sub_8035C44, 5); gTasks[taskId].data[0] = gActiveBank; if (ewram17810[gActiveBank].unk0_0) @@ -1594,7 +1594,7 @@ void sub_8035EB8(void) void OpponentHandleSpriteInvisibility(void) { - if (sub_8078874(gActiveBank) != 0) + if (AnimBankSpriteExists(gActiveBank) != 0) { gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; sub_8031F88(gActiveBank); diff --git a/src/battle_811DA74.c b/src/battle_811DA74.c index 36a287efc..dc3a76eec 100644 --- a/src/battle_811DA74.c +++ b/src/battle_811DA74.c @@ -67,7 +67,7 @@ extern void (*gAnimScriptCallback)(void); extern void (*const gLinkPartnerBufferCommands[])(void); extern u8 move_anim_start_t3(); -extern u8 sub_8078874(); +extern u8 AnimBankSpriteExists(); extern void sub_8044CA0(u8); extern void sub_8030E38(struct Sprite *); extern void sub_80E43C0(); @@ -83,7 +83,7 @@ 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 StoreSpriteCallbackInData6(); extern void sub_8078B34(struct Sprite *); extern void sub_80105EC(struct Sprite *); extern s32 sub_803FC34(u16); @@ -1117,7 +1117,7 @@ void sub_811FC3C(void) 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); + StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); gBattleBankFunc[gActiveBank] = sub_811DB1C; } @@ -1470,7 +1470,7 @@ void sub_8120588(void) 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); + StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); r4 = AllocSpritePalette(0xD6F9); LoadCompressedPalette( @@ -1560,7 +1560,7 @@ void sub_812096C(void) void sub_8120978(void) { - if (sub_8078874(gActiveBank) != 0) + if (AnimBankSpriteExists(gActiveBank) != 0) { gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; sub_8031F88(gActiveBank); diff --git a/src/battle_ai.c b/src/battle_ai.c index 0e20c6b05..1869bbe36 100644 --- a/src/battle_ai.c +++ b/src/battle_ai.c @@ -1273,7 +1273,7 @@ static void BattleAICmd_if_arg_not_equal(void) static void BattleAICmd_if_would_go_first(void) { - if (b_first_side(gBankAttacker, gBankTarget, 1) == gAIScriptPtr[1]) + if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, 1) == gAIScriptPtr[1]) gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); else gAIScriptPtr += 6; @@ -1281,7 +1281,7 @@ static void BattleAICmd_if_would_go_first(void) static void BattleAICmd_if_would_not_go_first(void) { - if (b_first_side(gBankAttacker, gBankTarget, 1) != gAIScriptPtr[1]) + if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, 1) != gAIScriptPtr[1]) gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); else gAIScriptPtr += 6; diff --git a/src/battle_anim.c b/src/battle_anim.c index 6bd98099a..111d72813 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -37,8 +37,8 @@ EWRAM_DATA u8 gMonAnimTaskIdArray[2] = {0}; EWRAM_DATA u8 gUnknown_0202F7C4 = 0; EWRAM_DATA u8 gUnknown_0202F7C5 = 0; EWRAM_DATA u16 gAnimMoveIndex = 0; // set but unused. -EWRAM_DATA u8 gBattleAnimPlayerMonIndex = 0; -EWRAM_DATA u8 gBattleAnimEnemyMonIndex = 0; +EWRAM_DATA u8 gBattleAnimBankAttacker = 0; +EWRAM_DATA u8 gBattleAnimBankTarget = 0; EWRAM_DATA u16 gUnknown_0202F7CA[4] = {0}; EWRAM_DATA u8 gUnknown_0202F7D2 = 0; extern u16 gUnknown_030041B4; @@ -201,15 +201,15 @@ void battle_anim_clear_some_data(void) gUnknown_0202F7C4 = 0; gUnknown_0202F7C5 = 0; gAnimMoveIndex = 0; - gBattleAnimPlayerMonIndex = 0; - gBattleAnimEnemyMonIndex = 0; + gBattleAnimBankAttacker = 0; + gBattleAnimBankTarget = 0; gUnknown_0202F7D2 = 0; } void ExecuteMoveAnim(u16 move) { - gBattleAnimPlayerMonIndex = gBankAttacker; - gBattleAnimEnemyMonIndex = gBankTarget; + gBattleAnimBankAttacker = gBankAttacker; + gBattleAnimBankTarget = gBankTarget; DoMoveAnim(gBattleAnims_Moves, move, 1); } @@ -396,7 +396,7 @@ static void ScriptCmd_sprite(void) r4 -= 0x40; else r4 = -r4; - _r0 = sub_8079E90(gBattleAnimEnemyMonIndex); + _r0 = sub_8079E90(gBattleAnimBankTarget); r1 = r4; } @@ -407,15 +407,15 @@ static void ScriptCmd_sprite(void) r4 -= 0x40; else r4 = -r4; - _r0 = sub_8079E90(gBattleAnimPlayerMonIndex); + _r0 = sub_8079E90(gBattleAnimBankAttacker); r1 = r4; } r6 = _r0 + r1; if ((s16)r6 < 3) r6 = 3; - r4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); - r2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + r4 = sub_8077ABC(gBattleAnimBankTarget, 2); + r2 = sub_8077ABC(gBattleAnimBankTarget, 3); CreateSpriteAndAnimate(r7, r4, r2, r6); gAnimVisualTaskCount++; } @@ -485,10 +485,10 @@ _08075B34:\n\ _08075B36:\n\ lsls r0, 24\n\ lsrs r4, r0, 24\n\ - ldr r0, _08075B40 @ =gBattleAnimEnemyMonIndex\n\ + ldr r0, _08075B40 @ =gBattleAnimBankTarget\n\ b _08075B56\n\ .align 2, 0\n\ -_08075B40: .4byte gBattleAnimEnemyMonIndex\n\ +_08075B40: .4byte gBattleAnimBankTarget\n\ _08075B44:\n\ cmp r4, 0x3F\n\ bls _08075B4E\n\ @@ -500,7 +500,7 @@ _08075B4E:\n\ _08075B50:\n\ lsls r0, 24\n\ lsrs r4, r0, 24\n\ - ldr r0, _08075BAC @ =gBattleAnimPlayerMonIndex\n\ + ldr r0, _08075BAC @ =gBattleAnimBankAttacker\n\ _08075B56:\n\ ldrb r0, [r0]\n\ bl sub_8079E90\n\ @@ -517,7 +517,7 @@ _08075B56:\n\ bgt _08075B74\n\ movs r6, 0x3\n\ _08075B74:\n\ - ldr r5, _08075BB0 @ =gBattleAnimEnemyMonIndex\n\ + ldr r5, _08075BB0 @ =gBattleAnimBankTarget\n\ ldrb r0, [r5]\n\ movs r1, 0x2\n\ bl sub_8077ABC\n\ @@ -543,8 +543,8 @@ _08075B74:\n\ pop {r0}\n\ bx r0\n\ .align 2, 0\n\ -_08075BAC: .4byte gBattleAnimPlayerMonIndex\n\ -_08075BB0: .4byte gBattleAnimEnemyMonIndex\n\ +_08075BAC: .4byte gBattleAnimBankAttacker\n\ +_08075BB0: .4byte gBattleAnimBankTarget\n\ _08075BB4: .4byte gAnimVisualTaskCount\n\ .syntax divided\n"); } @@ -686,10 +686,10 @@ static void ScriptCmd_monbg(void) else if (r6 == 1) r6 = 3; if (r6 == 0 || r6 == 2) - r5 = gBattleAnimPlayerMonIndex; + r5 = gBattleAnimBankAttacker; else - r5 = gBattleAnimEnemyMonIndex; - if (b_side_obj__get_some_boolean(r5)) + r5 = gBattleAnimBankTarget; + if (IsAnimBankSpriteVisible(r5)) { r0 = GetBankIdentity(r5); r0 += 0xFF; @@ -719,7 +719,7 @@ static void ScriptCmd_monbg(void) } r5 ^= 2; - if (r6 > 1 && b_side_obj__get_some_boolean(r5)) + if (r6 > 1 && IsAnimBankSpriteVisible(r5)) { r0 = GetBankIdentity(r5); r0 += 0xFF; @@ -751,20 +751,20 @@ static void ScriptCmd_monbg(void) } #ifdef NONMATCHING -bool8 b_side_obj__get_some_boolean(u8 a) +bool8 IsAnimBankSpriteVisible(u8 a) { - if (IsContest() != 0) + if (IsContest()) { - if (a == gBattleAnimPlayerMonIndex) + if (a == gBattleAnimBankAttacker) return TRUE; else return FALSE; } - if (sub_8078874(a) == 0) + if (!AnimBankSpriteExists(a)) return FALSE; - if (IsContest() != 0) + if (IsContest()) return TRUE; // this line wont ever be reached. - if ((EWRAM_17800[a].unk0 & 1) == 0) + if (!(EWRAM_17800[a].unk0 & 1)) return TRUE; if (gSprites[gObjectBankIDs[a]].invisible) return FALSE; @@ -772,7 +772,7 @@ bool8 b_side_obj__get_some_boolean(u8 a) } #else __attribute__((naked)) -bool8 b_side_obj__get_some_boolean(u8 a) +bool8 IsAnimBankSpriteVisible(u8 a) { asm(".syntax unified\n\ push {r4,r5,lr}\n\ @@ -783,16 +783,16 @@ bool8 b_side_obj__get_some_boolean(u8 a) lsls r0, 24\n\ cmp r0, 0\n\ beq _08075FDC\n\ - ldr r0, _08075FD8 @ =gBattleAnimPlayerMonIndex\n\ + ldr r0, _08075FD8 @ =gBattleAnimBankAttacker\n\ ldrb r0, [r0]\n\ cmp r4, r0\n\ beq _0807601C\n\ b _0807602C\n\ .align 2, 0\n\ -_08075FD8: .4byte gBattleAnimPlayerMonIndex\n\ +_08075FD8: .4byte gBattleAnimBankAttacker\n\ _08075FDC:\n\ adds r0, r4, 0\n\ - bl sub_8078874\n\ + bl AnimBankSpriteExists\n\ lsls r0, 24\n\ cmp r0, 0\n\ beq _0807602C\n\ @@ -1096,9 +1096,9 @@ static void ScriptCmd_clearmonbg(void) else if (r4 == 1) r4 = 3; if (r4 == 0 || r4 == 2) - r5 = gBattleAnimPlayerMonIndex; + r5 = gBattleAnimBankAttacker; else - r5 = gBattleAnimEnemyMonIndex; + r5 = gBattleAnimBankTarget; if (gMonAnimTaskIdArray[0] != 0xFF) gSprites[gObjectBankIDs[r5]].invisible = FALSE; if (r4 > 1 && gMonAnimTaskIdArray[1] != 0xFF) @@ -1155,10 +1155,10 @@ static void ScriptCmd_monbg_22(void) else if (r5 == 1) r5 = 3; if (r5 == 0 || r5 == 2) - r4 = gBattleAnimPlayerMonIndex; + r4 = gBattleAnimBankAttacker; else - r4 = gBattleAnimEnemyMonIndex; - if (b_side_obj__get_some_boolean(r4)) + r4 = gBattleAnimBankTarget; + if (IsAnimBankSpriteVisible(r4)) { r0 = GetBankIdentity(r4); r0 += 0xFF; @@ -1170,7 +1170,7 @@ static void ScriptCmd_monbg_22(void) gSprites[gObjectBankIDs[r4]].invisible = FALSE; } r4 ^= 2; - if (r5 > 1 && b_side_obj__get_some_boolean(r4)) + if (r5 > 1 && IsAnimBankSpriteVisible(r4)) { r0 = GetBankIdentity(r4); r0 += 0xFF; @@ -1197,12 +1197,12 @@ static void ScriptCmd_clearmonbg_23(void) else if (r5 == 1) r5 = 3; if (r5 == 0 || r5 == 2) - r6 = gBattleAnimPlayerMonIndex; + r6 = gBattleAnimBankAttacker; else - r6 = gBattleAnimEnemyMonIndex; - if (b_side_obj__get_some_boolean(r6)) + r6 = gBattleAnimBankTarget; + if (IsAnimBankSpriteVisible(r6)) gSprites[gObjectBankIDs[r6]].invisible = FALSE; - if (r5 > 1 && b_side_obj__get_some_boolean(r6 ^ 2)) + if (r5 > 1 && IsAnimBankSpriteVisible(r6 ^ 2)) gSprites[gObjectBankIDs[r6 ^ 2]].invisible = FALSE; else r5 = 0; @@ -1228,9 +1228,9 @@ static void sub_80769A4(u8 taskId) r5 = 0; else r5 = 1; - if (b_side_obj__get_some_boolean(r4)) + if (IsAnimBankSpriteVisible(r4)) sub_8076464(r5); - if (gTasks[taskId].data[0] > 1 && b_side_obj__get_some_boolean(r4 ^ 2)) + if (gTasks[taskId].data[0] > 1 && IsAnimBankSpriteVisible(r4 ^ 2)) sub_8076464(r5 ^ 1); DestroyTask(taskId); } @@ -1371,7 +1371,7 @@ static void ScriptCmd_fadetobg_25(void) taskId = CreateTask(task_p5_load_battle_screen_elements, 5); if (IsContest() != 0) gTasks[taskId].data[0] = r6; - else if (GetBankSide(gBattleAnimEnemyMonIndex) == 0) + else if (GetBankSide(gBattleAnimBankTarget) == 0) gTasks[taskId].data[0] = r7; else gTasks[taskId].data[0] = r8; @@ -1422,7 +1422,7 @@ static void sub_8076DB8(u16 a) void *dmaSrc; void *dmaDest; - sub_800D238(tilemap, IsContest() ? EWRAM_14800 : EWRAM_18000); + LZDecompressWram(tilemap, IsContest() ? EWRAM_14800 : EWRAM_18000); sub_80763FC(sub_80789BC(), IsContest() ? EWRAM_14800 : EWRAM_18000, 0x100, 0); dmaSrc = IsContest() ? EWRAM_14800 : EWRAM_18000; dmaDest = (void *)(VRAM + 0xD000); @@ -1493,16 +1493,16 @@ static void ScriptCmd_changebg(void) /* s8 sub_8076F98(s8 a) { - if (!IsContest() && (EWRAM_17810[gBattleAnimPlayerMonIndex].unk0 & 0x10)) + if (!IsContest() && (EWRAM_17810[gBattleAnimBankAttacker].unk0 & 0x10)) { - a = GetBankSide(gBattleAnimPlayerMonIndex) ? 0xC0 : 0x3F; + a = GetBankSide(gBattleAnimBankAttacker) ? 0xC0 : 0x3F; } //_08076FDC else { if (IsContest()) { - if (gBattleAnimPlayerMonIndex == gBattleAnimEnemyMonIndex && gBattleAnimPlayerMonIndex == 2 + if (gBattleAnimBankAttacker == gBattleAnimBankTarget && gBattleAnimBankAttacker == 2 && a == 0x3F) { //jump to _0807707A @@ -1514,9 +1514,9 @@ s8 sub_8076F98(s8 a) //_08077004 else { - if (GetBankSide(gBattleAnimPlayerMonIndex) == 0) + if (GetBankSide(gBattleAnimBankAttacker) == 0) { - if (GetBankSide(gBattleAnimEnemyMonIndex) == 0) + if (GetBankSide(gBattleAnimBankTarget) == 0) } //_08077042 else @@ -1540,7 +1540,7 @@ s8 sub_8076F98(s8 a) lsls r0, 24\n\ cmp r0, 0\n\ bne _08076FDC\n\ - ldr r0, _08076FD4 @ =gBattleAnimPlayerMonIndex\n\ + ldr r0, _08076FD4 @ =gBattleAnimBankAttacker\n\ ldrb r2, [r0]\n\ lsls r0, r2, 1\n\ adds r0, r2\n\ @@ -1561,15 +1561,15 @@ s8 sub_8076F98(s8 a) movs r4, 0x3F\n\ b _0807706E\n\ .align 2, 0\n\ -_08076FD4: .4byte gBattleAnimPlayerMonIndex\n\ +_08076FD4: .4byte gBattleAnimBankAttacker\n\ _08076FD8: .4byte 0x02017810\n\ _08076FDC:\n\ bl IsContest\n\ lsls r0, 24\n\ cmp r0, 0\n\ beq _08077004\n\ - ldr r0, _08076FFC @ =gBattleAnimPlayerMonIndex\n\ - ldr r1, _08077000 @ =gBattleAnimEnemyMonIndex\n\ + ldr r0, _08076FFC @ =gBattleAnimBankAttacker\n\ + ldr r1, _08077000 @ =gBattleAnimBankTarget\n\ ldrb r0, [r0]\n\ ldrb r1, [r1]\n\ cmp r0, r1\n\ @@ -1580,16 +1580,16 @@ _08076FDC:\n\ beq _0807707A\n\ b _08077068\n\ .align 2, 0\n\ -_08076FFC: .4byte gBattleAnimPlayerMonIndex\n\ -_08077000: .4byte gBattleAnimEnemyMonIndex\n\ +_08076FFC: .4byte gBattleAnimBankAttacker\n\ +_08077000: .4byte gBattleAnimBankTarget\n\ _08077004:\n\ - ldr r0, _0807702C @ =gBattleAnimPlayerMonIndex\n\ + ldr r0, _0807702C @ =gBattleAnimBankAttacker\n\ ldrb r0, [r0]\n\ bl GetBankSide\n\ lsls r0, 24\n\ cmp r0, 0\n\ bne _08077042\n\ - ldr r0, _08077030 @ =gBattleAnimEnemyMonIndex\n\ + ldr r0, _08077030 @ =gBattleAnimBankTarget\n\ ldrb r0, [r0]\n\ bl GetBankSide\n\ lsls r0, 24\n\ @@ -1602,8 +1602,8 @@ _08077004:\n\ movs r4, 0xC0\n\ b _0807706E\n\ .align 2, 0\n\ -_0807702C: .4byte gBattleAnimPlayerMonIndex\n\ -_08077030: .4byte gBattleAnimEnemyMonIndex\n\ +_0807702C: .4byte gBattleAnimBankAttacker\n\ +_08077030: .4byte gBattleAnimBankTarget\n\ _08077034:\n\ movs r0, 0x40\n\ negs r0, r0\n\ @@ -1613,7 +1613,7 @@ _08077034:\n\ lsls r0, 24\n\ b _0807706C\n\ _08077042:\n\ - ldr r0, _08077064 @ =gBattleAnimEnemyMonIndex\n\ + ldr r0, _08077064 @ =gBattleAnimBankTarget\n\ ldrb r0, [r0]\n\ bl GetBankSide\n\ lsls r0, 24\n\ @@ -1629,7 +1629,7 @@ _08077042:\n\ movs r4, 0x3F\n\ b _0807706E\n\ .align 2, 0\n\ -_08077064: .4byte gBattleAnimEnemyMonIndex\n\ +_08077064: .4byte gBattleAnimBankTarget\n\ _08077068:\n\ lsls r0, r4, 24\n\ negs r0, r0\n\ @@ -1661,16 +1661,16 @@ _08077088:\n\ s8 sub_8077094(s8 a) { - if (!IsContest() && (EWRAM_17810[gBattleAnimPlayerMonIndex].unk0 & 0x10)) + if (!IsContest() && (EWRAM_17810[gBattleAnimBankAttacker].unk0 & 0x10)) { - if (GetBankSide(gBattleAnimPlayerMonIndex) != 0) + if (GetBankSide(gBattleAnimBankAttacker) != 0) a = 0x3F; else a = 0xC0; } else { - if (GetBankSide(gBattleAnimPlayerMonIndex) != 0 || IsContest() != 0) + if (GetBankSide(gBattleAnimBankAttacker) != 0 || IsContest() != 0) a = -a; } return a; @@ -2128,9 +2128,9 @@ static void ScriptCmd_monbgprio_28(void) r2 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); gBattleAnimScriptPtr += 2; if (r2 != 0) - r0 = gBattleAnimEnemyMonIndex; + r0 = gBattleAnimBankTarget; else - r0 = gBattleAnimPlayerMonIndex; + r0 = gBattleAnimBankAttacker; r4 = GetBankIdentity(r0); if (!IsContest() && (r4 == 0 || r4 == 3)) { @@ -2157,12 +2157,12 @@ static void ScriptCmd_monbgprio_2A(void) r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); gBattleAnimScriptPtr += 2; - if (GetBankSide(gBattleAnimPlayerMonIndex) != GetBankSide(gBattleAnimEnemyMonIndex)) + if (GetBankSide(gBattleAnimBankAttacker) != GetBankSide(gBattleAnimBankTarget)) { if (r6 != 0) - r0 = gBattleAnimEnemyMonIndex; + r0 = gBattleAnimBankTarget; else - r0 = gBattleAnimPlayerMonIndex; + r0 = gBattleAnimBankAttacker; r4 = GetBankIdentity(r0); if (!IsContest() && (r4 == 0 || r4 == 3)) { @@ -2178,7 +2178,7 @@ static void ScriptCmd_invisible(void) u8 spriteId; r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); - spriteId = obj_id_for_side_relative_to_move(r0); + spriteId = GetAnimBankSpriteId(r0); if (spriteId != 0xFF) { gSprites[spriteId].invisible = TRUE; @@ -2192,7 +2192,7 @@ static void ScriptCmd_visible(void) u8 spriteId; r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); - spriteId = obj_id_for_side_relative_to_move(r0); + spriteId = GetAnimBankSpriteId(r0); if (spriteId != 0xFF) { gSprites[spriteId].invisible = FALSE; @@ -2209,17 +2209,17 @@ static void ScriptCmd_doublebattle_2D(void) r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); gBattleAnimScriptPtr += 2; if (!IsContest() && IsDoubleBattle() - && GetBankSide(gBattleAnimPlayerMonIndex) == GetBankSide(gBattleAnimEnemyMonIndex)) + && GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) { if (r7 == 0) { - r4 = GetBankIdentity_permutated(gBattleAnimPlayerMonIndex); - spriteId = obj_id_for_side_relative_to_move(0); + r4 = GetBankIdentity_permutated(gBattleAnimBankAttacker); + spriteId = GetAnimBankSpriteId(0); } else { - r4 = GetBankIdentity_permutated(gBattleAnimEnemyMonIndex); - spriteId = obj_id_for_side_relative_to_move(1); + r4 = GetBankIdentity_permutated(gBattleAnimBankTarget); + spriteId = GetAnimBankSpriteId(1); } if (spriteId != 0xFF) { @@ -2243,17 +2243,17 @@ static void ScriptCmd_doublebattle_2E(void) r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); gBattleAnimScriptPtr += 2; if (!IsContest() && IsDoubleBattle() - && GetBankSide(gBattleAnimPlayerMonIndex) == GetBankSide(gBattleAnimEnemyMonIndex)) + && GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) { if (r7 == 0) { - r4 = GetBankIdentity_permutated(gBattleAnimPlayerMonIndex); - spriteId = obj_id_for_side_relative_to_move(0); + r4 = GetBankIdentity_permutated(gBattleAnimBankAttacker); + spriteId = GetAnimBankSpriteId(0); } else { - r4 = GetBankIdentity_permutated(gBattleAnimEnemyMonIndex); - spriteId = obj_id_for_side_relative_to_move(1); + r4 = GetBankIdentity_permutated(gBattleAnimBankTarget); + spriteId = GetAnimBankSpriteId(1); } if (spriteId != 0xFF && r4 == 2) { diff --git a/src/battle_anim_807B69C.c b/src/battle_anim_807B69C.c index 42932877b..bf3eb7ef1 100644 --- a/src/battle_anim_807B69C.c +++ b/src/battle_anim_807B69C.c @@ -8,12 +8,12 @@ #include "task.h" #include "trig.h" -extern u8 gBattleAnimPlayerMonIndex; -extern u8 gBattleAnimEnemyMonIndex; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; extern bool8 gAnimScriptActive; extern void (*gAnimScriptCallback)(void); extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimEnemyMonIndex; +extern u8 gBattleAnimBankTarget; extern u8 gObjectBankIDs[]; extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; @@ -179,8 +179,8 @@ static void sub_807B8A4(struct Sprite *sprite) void sub_807B920(u8 taskId) { - s16 x = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) - 32; - s16 y = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) - 36; + s16 x = sub_8077ABC(gBattleAnimBankTarget, 2) - 32; + s16 y = sub_8077ABC(gBattleAnimBankTarget, 3) - 36; u8 spriteId; if (IsContest()) @@ -335,8 +335,8 @@ void move_anim_start_t2(u8 a, u8 b) { u8 taskId; - gBattleAnimPlayerMonIndex = a; - gBattleAnimEnemyMonIndex = a; + gBattleAnimBankAttacker = a; + gBattleAnimBankTarget = a; DoMoveAnim(gBattleAnims_StatusConditions, b, 0); taskId = CreateTask(sub_807BDAC, 10); gTasks[taskId].data[0] = a; diff --git a/src/battle_anim_80A7E7C.c b/src/battle_anim_80A7E7C.c index 31984977f..e0c79dc8e 100644 --- a/src/battle_anim_80A7E7C.c +++ b/src/battle_anim_80A7E7C.c @@ -12,8 +12,8 @@ extern s16 gBattleAnimArgs[8]; extern u8 gObjectBankIDs[]; extern s32 gMoveDmgMoveAnim; extern u16 gMovePowerMoveAnim; -extern u8 gBattleAnimPlayerMonIndex; -extern u8 gBattleAnimEnemyMonIndex; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; static void sub_80A7EF0(u8 taskId); static void sub_80A808C(u8 taskId); @@ -34,7 +34,7 @@ static void sub_80A913C(u8 taskId); void sub_80A7E7C(u8 taskId) { u8 sprite; - sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]); if (sprite == 0xff) { DestroyAnimVisualTask(taskId); @@ -96,7 +96,7 @@ void sub_80A7FA0(u8 taskId) r6 = 0; if (gBattleAnimArgs[0] < 4) { - sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]); if (sprite == 0xff) { DestroyAnimVisualTask(taskId); @@ -121,7 +121,7 @@ void sub_80A7FA0(u8 taskId) side = GetBankByPlayerAI(3); break; } - if (b_side_obj__get_some_boolean(side) == FALSE) + if (IsAnimBankSpriteVisible(side) == FALSE) { r6 = 1; } @@ -129,7 +129,7 @@ void sub_80A7FA0(u8 taskId) } else { - sprite = gObjectBankIDs[gBattleAnimPlayerMonIndex]; + sprite = gObjectBankIDs[gBattleAnimBankAttacker]; } if (r6) { @@ -186,7 +186,7 @@ static void sub_80A808C(u8 taskId) void sub_80A8154(u8 taskId) { u8 sprite; - sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]); if (sprite == 0xff) { DestroyAnimVisualTask(taskId); @@ -244,7 +244,7 @@ static void sub_80A81D8(u8 taskId) void sub_80A8314(u8 taskId) { - u8 sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + u8 sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]); gSprites[sprite].pos2.x = gBattleAnimArgs[1]; TASK.data[0] = sprite; TASK.data[1] = gBattleAnimArgs[1]; @@ -286,7 +286,7 @@ void sub_80A8408(u8 taskId) u8 sprite; u8 v1; v1 = 1; - sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]); if (gBattleAnimArgs[4] > 5) { gBattleAnimArgs[4] = 5; @@ -328,7 +328,7 @@ static void sub_80A8488(u8 taskId) void sub_80A8500(u8 taskId) { - if (GetBankSide(gBattleAnimPlayerMonIndex)) + if (GetBankSide(gBattleAnimBankAttacker)) { gBattleAnimArgs[1] = -gBattleAnimArgs[1]; } @@ -338,7 +338,7 @@ void sub_80A8500(u8 taskId) void sub_80A8530(struct Sprite *sprite) { sprite->invisible = TRUE; - if (GetBankSide(gBattleAnimPlayerMonIndex)) + if (GetBankSide(gBattleAnimBankAttacker)) { sprite->data1 = -gBattleAnimArgs[1]; } @@ -348,9 +348,9 @@ void sub_80A8530(struct Sprite *sprite) } sprite->data0 = gBattleAnimArgs[0]; sprite->data2 = 0; - sprite->data3 = gObjectBankIDs[gBattleAnimPlayerMonIndex]; + sprite->data3 = gObjectBankIDs[gBattleAnimBankAttacker]; sprite->data4 = gBattleAnimArgs[0]; - oamt_set_x3A_32(sprite, sub_80A85A4); + StoreSpriteCallbackInData6(sprite, sub_80A85A4); sprite->callback = sub_8078458; } @@ -359,20 +359,20 @@ static void sub_80A85A4(struct Sprite *sprite) sprite->data0 = sprite->data4; sprite->data1 = -sprite->data1; sprite->callback = sub_8078458; - oamt_set_x3A_32(sprite, move_anim_8072740); + StoreSpriteCallbackInData6(sprite, move_anim_8072740); } void sub_80A85C8(struct Sprite *sprite) { u8 spriteId; sprite->invisible = TRUE; - spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[2]); + spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]); sprite->data0 = gBattleAnimArgs[0]; sprite->data1 = 0; sprite->data2 = gBattleAnimArgs[1]; sprite->data3 = spriteId; sprite->data4 = gBattleAnimArgs[0]; - oamt_set_x3A_32(sprite, sub_80A8614); + StoreSpriteCallbackInData6(sprite, sub_80A8614); sprite->callback = sub_8078458; } @@ -381,7 +381,7 @@ void sub_80A8614(struct Sprite *sprite) sprite->data0 = sprite->data4; sprite->data2 = -sprite->data2; sprite->callback = sub_8078458; - oamt_set_x3A_32(sprite, move_anim_8072740); + StoreSpriteCallbackInData6(sprite, move_anim_8072740); } void sub_80A8638(struct Sprite *sprite) @@ -390,11 +390,11 @@ void sub_80A8638(struct Sprite *sprite) int spriteId; if (!gBattleAnimArgs[0]) { - spriteId = gObjectBankIDs[gBattleAnimPlayerMonIndex]; + spriteId = gObjectBankIDs[gBattleAnimBankAttacker]; } else { - spriteId = gObjectBankIDs[gBattleAnimEnemyMonIndex]; + spriteId = gObjectBankIDs[gBattleAnimBankTarget]; } sprite->data0 = gBattleAnimArgs[2]; sprite->data1 = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; @@ -457,11 +457,11 @@ void sub_80A8764(struct Sprite *sprite) u8 spriteId; if (!gBattleAnimArgs[0]) { - v1 = gBattleAnimPlayerMonIndex; + v1 = gBattleAnimBankAttacker; } else { - v1 = gBattleAnimEnemyMonIndex; + v1 = gBattleAnimBankTarget; } spriteId = gObjectBankIDs[v1]; if (GetBankSide(v1)) @@ -482,7 +482,7 @@ void sub_80A8764(struct Sprite *sprite) sprite->data4 = 0; sprite->data5 = spriteId; sprite->invisible = TRUE; - oamt_set_x3A_32(sprite, move_anim_8072740); + StoreSpriteCallbackInData6(sprite, move_anim_8072740); sprite->callback = sub_80784A8; } @@ -493,11 +493,11 @@ void sub_80A8818(struct Sprite *sprite) sprite->invisible = TRUE; if (!gBattleAnimArgs[0]) { - v1 = gBattleAnimPlayerMonIndex; + v1 = gBattleAnimBankAttacker; } else { - v1 = gBattleAnimEnemyMonIndex; + v1 = gBattleAnimBankTarget; } spriteId = gObjectBankIDs[v1]; if (GetBankSide(v1)) @@ -520,11 +520,11 @@ void sub_80A8818(struct Sprite *sprite) sprite->data6 = gBattleAnimArgs[5]; if (!gBattleAnimArgs[5]) { - oamt_set_x3A_32(sprite, move_anim_8072740); + StoreSpriteCallbackInData6(sprite, move_anim_8072740); } else { - oamt_set_x3A_32(sprite, sub_80A88F0); + StoreSpriteCallbackInData6(sprite, sub_80A88F0); } sprite->callback = sub_80784A8; } @@ -541,12 +541,12 @@ void sub_80A8920(u8 taskId) { s16 r7; r7 = 0x8000 / gBattleAnimArgs[3]; - if (GetBankSide(gBattleAnimPlayerMonIndex)) + if (GetBankSide(gBattleAnimBankAttacker)) { gBattleAnimArgs[1] = -gBattleAnimArgs[1]; gBattleAnimArgs[5] = -gBattleAnimArgs[5]; } - TASK.data[0] = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + TASK.data[0] = GetAnimBankSpriteId(gBattleAnimArgs[0]); TASK.data[1] = (gBattleAnimArgs[1] << 8) / gBattleAnimArgs[3]; TASK.data[2] = gBattleAnimArgs[2]; TASK.data[3] = gBattleAnimArgs[3]; @@ -600,30 +600,30 @@ void sub_80A8A80(u8 taskId) { case 0: case 1: - spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); break; case 2: - if (!b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) + if (!IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) { DestroyAnimVisualTask(taskId); return; } - spriteId = gObjectBankIDs[gBattleAnimPlayerMonIndex ^ 2]; + spriteId = gObjectBankIDs[gBattleAnimBankAttacker ^ 2]; break; case 3: - if (!b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) + if (!IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) { DestroyAnimVisualTask(taskId); return; } - spriteId = gObjectBankIDs[gBattleAnimEnemyMonIndex ^ 2]; + spriteId = gObjectBankIDs[gBattleAnimBankTarget ^ 2]; break; default: DestroyAnimVisualTask(taskId); return; } TASK.data[0] = spriteId; - if (GetBankSide(gBattleAnimEnemyMonIndex)) + if (GetBankSide(gBattleAnimBankTarget)) { TASK.data[1] = gBattleAnimArgs[1]; } @@ -648,11 +648,11 @@ static void sub_80A8B3C(u8 taskId) void sub_80A8B88(u8 taskId) { u8 spriteId; - if (GetBankSide(gBattleAnimPlayerMonIndex)) + if (GetBankSide(gBattleAnimBankAttacker)) { gBattleAnimArgs[1] = -gBattleAnimArgs[1]; } - spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[4]); + spriteId = GetAnimBankSpriteId(gBattleAnimArgs[4]); TASK.data[0] = gBattleAnimArgs[0]; TASK.data[1] = gBattleAnimArgs[1]; TASK.data[2] = gBattleAnimArgs[2]; @@ -660,11 +660,11 @@ void sub_80A8B88(u8 taskId) TASK.data[4] = spriteId; if (gBattleAnimArgs[4] == 0) { - TASK.data[5] = gBattleAnimPlayerMonIndex; + TASK.data[5] = gBattleAnimBankAttacker; } else { - TASK.data[5] = gBattleAnimEnemyMonIndex; + TASK.data[5] = gBattleAnimBankTarget; } TASK.data[12] = 1; TASK.func = sub_80A8C0C; @@ -714,7 +714,7 @@ static void sub_80A8C0C(u8 taskId) void sub_80A8D34(u8 taskId) { u8 spriteId; - spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[3]); + spriteId = GetAnimBankSpriteId(gBattleAnimArgs[3]); sub_8078E70(spriteId, gBattleAnimArgs[4]); TASK.data[0] = gBattleAnimArgs[0]; TASK.data[1] = gBattleAnimArgs[1]; @@ -754,7 +754,7 @@ static void sub_80A8D8C(u8 taskId) void sub_80A8E04(u8 taskId) { u8 spriteId; - spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[2]); + spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]); sub_8078E70(spriteId, 0); TASK.data[1] = 0; TASK.data[2] = gBattleAnimArgs[0]; @@ -777,11 +777,11 @@ void sub_80A8E04(u8 taskId) { if (gBattleAnimArgs[2] == 0) { - TASK.data[7] = !GetBankSide(gBattleAnimPlayerMonIndex); + TASK.data[7] = !GetBankSide(gBattleAnimBankAttacker); } else { - TASK.data[7] = !GetBankSide(gBattleAnimEnemyMonIndex); + TASK.data[7] = !GetBankSide(gBattleAnimBankTarget); } } if (TASK.data[7]) @@ -798,20 +798,20 @@ void sub_80A8E04(u8 taskId) void sub_80A8EFC(u8 taskId) { u8 spriteId; - spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[2]); + spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]); sub_8078E70(spriteId, 0); TASK.data[1] = 0; TASK.data[2] = gBattleAnimArgs[0]; if (gBattleAnimArgs[2] == 0) { - if (GetBankSide(gBattleAnimPlayerMonIndex)) + if (GetBankSide(gBattleAnimBankAttacker)) { gBattleAnimArgs[1] = -gBattleAnimArgs[1]; } } else { - if (GetBankSide(gBattleAnimEnemyMonIndex)) + if (GetBankSide(gBattleAnimBankTarget)) { gBattleAnimArgs[1] = -gBattleAnimArgs[1]; } @@ -891,7 +891,7 @@ void sub_80A9058(u8 taskId) TASK.data[12] = 0; TASK.data[10] = gBattleAnimArgs[3]; TASK.data[11] = gBattleAnimArgs[4]; - TASK.data[7] = obj_id_for_side_relative_to_move(1); + TASK.data[7] = GetAnimBankSpriteId(1); TASK.data[8] = gSprites[TASK.data[7]].pos2.x; TASK.data[9] = gSprites[TASK.data[7]].pos2.y; TASK.data[0] = 0; diff --git a/src/battle_anim_8137220.c b/src/battle_anim_8137220.c index bb181d5fb..ebb3d8ae8 100644 --- a/src/battle_anim_8137220.c +++ b/src/battle_anim_8137220.c @@ -90,7 +90,7 @@ 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 void StoreSpriteCallbackInData6(); extern u8 sub_8046400(); extern u8 sub_8077ABC(); extern u8 sub_8077F68(); @@ -1365,7 +1365,7 @@ void sub_8139750(void) 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); + StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); paletteNum = AllocSpritePalette(0xD6F8); LoadCompressedPalette(gTrainerBackPicPaletteTable[2].data, 0x100 + paletteNum * 16, 32); diff --git a/src/battle_interface.c b/src/battle_interface.c index 246bda62b..0741ad33a 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -2501,7 +2501,7 @@ static void sub_8045458(u8 a, u8 b) if (GetBankSide(r4) != 0) { u16 species = GetMonData(&gEnemyParty[gBattlePartyID[r4]], MON_DATA_SPECIES); - if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(species), 1) != 0) + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), 1) != 0) { r4 = gSprites[a].data5; if (b != 0) diff --git a/src/berry_blender.c b/src/berry_blender.c index f54c6271d..d9753c52a 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -828,7 +828,7 @@ static bool8 sub_804E2EC(void) switch (gBerryBlenderData->field_1) { case 0: - sub_800D238(gUnknown_08E6C100, &ewram[0x10000]); + LZDecompressWram(gUnknown_08E6C100, &ewram[0x10000]); gBerryBlenderData->field_1++; break; case 1: @@ -862,11 +862,11 @@ static bool8 sub_804E2EC(void) } break; case 3: - sub_800D238(gUnknown_08E6C920, &ewram[0x10000]); + LZDecompressWram(gUnknown_08E6C920, &ewram[0x10000]); gBerryBlenderData->field_1++; break; case 4: - sub_800D238(gUnknown_08E6D354, &ewram[0x13000]); + LZDecompressWram(gUnknown_08E6D354, &ewram[0x13000]); gBerryBlenderData->field_1++; break; case 5: diff --git a/src/birch_pc.c b/src/birch_pc.c index 5fb6427c3..9872dd54d 100644 --- a/src/birch_pc.c +++ b/src/birch_pc.c @@ -91,15 +91,15 @@ const u8 *GetPokedexRatingText(u16 count) return gBirchDexRatingText_LessThan200; if (count == 200) { - if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1) - || GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // Jirachi or Deoxys is not counted towards the dex completion. If either of these flags are enabled, it means the actual count is less than 200. + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1) + || GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // Jirachi or Deoxys is not counted towards the dex completion. If either of these flags are enabled, it means the actual count is less than 200. return gBirchDexRatingText_LessThan200; return gBirchDexRatingText_DexCompleted; } if (count == 201) { - if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1) - && GetNationalPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // If both of these flags are enabled, it means the actual count is less than 200. + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1) + && GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // If both of these flags are enabled, it means the actual count is less than 200. return gBirchDexRatingText_LessThan200; return gBirchDexRatingText_DexCompleted; } diff --git a/src/contest_painting.c b/src/contest_painting.c index 391cbdfaa..3662efdec 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -353,7 +353,7 @@ static void sub_8106AC4(u16 species, u8 arg1) void *pal; // Unsure what gUnknown_03005E8C->var0 is supposed to be. - pal = species_and_otid_get_pal(species, gUnknown_03005E8C->var4, gUnknown_03005E8C->var0); + pal = GetMonSpritePalFromOtIdPersonality(species, gUnknown_03005E8C->var4, gUnknown_03005E8C->var0); LZDecompressVram(pal, gUnknown_03005E90); if (arg1 == 1) @@ -402,7 +402,7 @@ static void sub_8106AC4(u16 arg0, u8 arg2) ldr r1, [r0, 0x4]\n\ ldr r2, [r0]\n\ adds r0, r6, 0\n\ - bl species_and_otid_get_pal\n\ + bl GetMonSpritePalFromOtIdPersonality\n\ ldr r1, _08106B2C @ =gUnknown_03005E90\n\ mov r8, r1\n\ ldr r1, [r1]\n\ diff --git a/src/credits.c b/src/credits.c index df70674b6..cf10137c1 100644 --- a/src/credits.c +++ b/src/credits.c @@ -1387,7 +1387,7 @@ static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position) 1 ); - lzPaletteData = species_and_otid_get_pal(species, 0, 0xFFFF); + lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, 0, 0xFFFF); LoadCompressedPalette(lzPaletteData, 0x100 + (position * 16), 0x20); sub_8143648(position, position); @@ -1433,7 +1433,7 @@ static void sub_81458DC(void) for (dexNum = 1, seenTypesCount = 0; dexNum < 386; dexNum++) { - if (GetNationalPokedexFlag(dexNum, 1)) + if (GetSetPokedexFlag(dexNum, 1)) { unk201C000->unk90[seenTypesCount] = dexNum; seenTypesCount++; diff --git a/src/decompress.c b/src/decompress.c index d7f7087a7..3e5993118 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -6,7 +6,7 @@ #define WRAM 0x02000000 -void sub_800D238(const void *src, void *dest) +void LZDecompressWram(const void *src, void *dest) { LZ77UnCompWram(src, dest); } diff --git a/src/easy_chat.c b/src/easy_chat.c index cca8c1355..f46084e50 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -428,7 +428,7 @@ static u16 sub_80EB9D8(void) for (i = 0; i < gEasyChatGroupSizes[EC_GROUP_POKEMON]; i++) { const u16 dexNum = SpeciesToNationalPokedexNum(*speciesList); - const u8 local2 = GetNationalPokedexFlag(dexNum, 0); + const u8 local2 = GetSetPokedexFlag(dexNum, 0); if (local2) { diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 2b68d83e8..b7fbfa5a8 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -48,10 +48,10 @@ extern const struct SpriteSheet sUnknown_0820A3B0; extern const struct SpriteSheet sUnknown_0820A3B8; extern const struct SpritePalette sUnknown_0820A3C0; -bool8 GetNationalPokedexFlag(u16 nationalNum, u8 caseID); +bool8 GetSetPokedexFlag(u16 nationalNum, u8 caseID); u8* GetMonNick(struct Pokemon* mon, u8* dst); u8 sav1_map_get_name(void); -const struct CompressedSpritePalette* sub_8040990(struct Pokemon* mon); //gets pokemon palette address +const struct CompressedSpritePalette* GetMonSpritePalStruct(struct Pokemon* mon); //gets pokemon palette address void sub_8080990(void); static void Task_EggHatch(u8 taskID); @@ -289,8 +289,8 @@ static void AddHatchedMonToParty(u8 id) SetMonData(mon, MON_DATA_NICKNAME, name); pokeNum = SpeciesToNationalPokedexNum(pokeNum); - GetNationalPokedexFlag(pokeNum, 2); - GetNationalPokedexFlag(pokeNum, 3); + GetSetPokedexFlag(pokeNum, 2); + GetSetPokedexFlag(pokeNum, 3); GetMonNick(mon, gStringVar1); @@ -419,11 +419,11 @@ static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID) u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 pid = GetMonData(mon, MON_DATA_PERSONALITY); HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset,(u32)(&ewram[0]), gUnknown_081FAF4C[2 * a0 + 1], species, pid); - LoadCompressedObjectPalette(sub_8040990(mon)); + LoadCompressedObjectPalette(GetMonSpritePalStruct(mon)); } break; case 1: - GetMonSpriteTemplate_803C56C(sub_8040990(mon)->tag, r5); + GetMonSpriteTemplate_803C56C(GetMonSpritePalStruct(mon)->tag, r5); spriteID = CreateSprite(&gUnknown_02024E8C, 120, 70, 6); gSprites[spriteID].invisible = 1; gSprites[spriteID].callback = SpriteCallbackDummy; diff --git a/src/field_effect.c b/src/field_effect.c index 3632d7053..a5c088381 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -660,7 +660,7 @@ u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subprio const struct CompressedSpritePalette *spritePalette; HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)gUnknown_081FAF4C[3] /* this is actually u8* or something, pointing to ewram */, gUnknown_081FAF4C[3], species, g); - spritePalette = sub_80409C8(species, d, g); + spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g); LoadCompressedObjectPalette(spritePalette); GetMonSpriteTemplate_803C56C(species, 3); gUnknown_02024E8C.paletteTag = spritePalette->tag; diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index a04f9d65b..f940830f1 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -1347,7 +1347,7 @@ static u32 HallOfFame_LoadPokemonPic(u16 species, s16 posX, s16 posY, u16 pokeID LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[pokeID], species, pid, 1); - pokePal = species_and_otid_get_pal(species, tid, pid); + pokePal = GetMonSpritePalFromOtIdPersonality(species, tid, pid); LoadCompressedPalette(pokePal, 16 * pokeID + 256, 0x20); sub_8143648(pokeID, pokeID); diff --git a/src/intro.c b/src/intro.c index a43e0356c..dd7cc858c 100644 --- a/src/intro.c +++ b/src/intro.c @@ -1785,7 +1785,7 @@ static u16 sub_813CE88(u16 species, s16 x, s16 y, u16 d, u8 front) LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[d], species, 0, 1); else LoadSpecialPokePic(&gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[d], species, 0, 0); - lzPaletteData = species_and_otid_get_pal(species, 0, 0xFFFF); + lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, 0, 0xFFFF); LoadCompressedPalette(lzPaletteData, 0x100 + d * 0x10, 0x20); sub_8143648(d, d); spriteId = CreateSprite(&gUnknown_02024E8C, x, y, (d + 1) * 4); diff --git a/src/item_menu.c b/src/item_menu.c index fdc47ad67..8874bf151 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -4492,7 +4492,7 @@ static void LoadBerryPic(u8 berryId) spritePal.data = (u16 *)sBerryGraphicsTable[berryId].lzPalette; spritePal.tag = 0x7544; LoadCompressedObjectPalette((struct CompressedSpritePalette *)&spritePal); - sub_800D238(sBerryGraphicsTable[berryId].lzPic, ewramBerryPicTemp); + LZDecompressWram(sBerryGraphicsTable[berryId].lzPic, ewramBerryPicTemp); DrawBerryPic(ewramBerryPicTemp, ewramBerryPic); } } diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c index f507942a7..a6568f5de 100644 --- a/src/mystery_event_script.c +++ b/src/mystery_event_script.c @@ -401,8 +401,8 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) if (species != SPECIES_EGG) { u16 pokedexNum = SpeciesToNationalPokedexNum(species); - GetNationalPokedexFlag(pokedexNum, 2); - GetNationalPokedexFlag(pokedexNum, 3); + GetSetPokedexFlag(pokedexNum, 2); + GetSetPokedexFlag(pokedexNum, 3); } heldItem = GetMonData(&gPlayerParty[5], MON_DATA_HELD_ITEM); diff --git a/src/palette.c b/src/palette.c index 94a4f8092..17e9ca178 100644 --- a/src/palette.c +++ b/src/palette.c @@ -74,7 +74,7 @@ static bool8 IsSoftwarePaletteFadeFinishing(void); void LoadCompressedPalette(const void *src, u16 offset, u16 size) { - sub_800D238(src, sPaletteDecompressionBuffer); + LZDecompressWram(src, sPaletteDecompressionBuffer); CpuCopy16(sPaletteDecompressionBuffer, gPlttBufferUnfaded + offset, size); CpuCopy16(sPaletteDecompressionBuffer, gPlttBufferFaded + offset, size); } diff --git a/src/pokeblock.c b/src/pokeblock.c index 775280f6e..6b967d7fc 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -379,7 +379,7 @@ static bool8 sub_810B998(void) ewram[0x1ffff]++; break; case 1: - sub_800D238(gMenuPokeblock_Tilemap, gBGTilemapBuffers[2]); + LZDecompressWram(gMenuPokeblock_Tilemap, gBGTilemapBuffers[2]); ewram[0x1ffff]++; break; case 2: diff --git a/src/pokedex.c b/src/pokedex.c index c132635cb..d9659348d 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1,4 +1,3 @@ - #include "global.h" #include "gba/m4a_internal.h" #include "pokedex.h" @@ -1320,8 +1319,8 @@ void ResetPokedex(void) { gSaveBlock2.pokedex.owned[i] = 0; gSaveBlock2.pokedex.seen[i] = 0; - gSaveBlock1.unk938[i] = 0; - gSaveBlock1.unk3A8C[i] = 0; + gSaveBlock1.dexSeen2[i] = 0; + gSaveBlock1.dexSeen3[i] = 0; } } @@ -2030,8 +2029,8 @@ static void SortPokedex(u8 dexMode, u8 sortMode) { vars[2] = HoennToNationalOrder(i + 1); gPokedexView->unk0[i].dexNum = vars[2]; - gPokedexView->unk0[i].seen = GetNationalPokedexFlag(vars[2], 0); - gPokedexView->unk0[i].owned = GetNationalPokedexFlag(vars[2], 1); + gPokedexView->unk0[i].seen = GetSetPokedexFlag(vars[2], 0); + gPokedexView->unk0[i].owned = GetSetPokedexFlag(vars[2], 1); if (gPokedexView->unk0[i].seen) gPokedexView->pokemonListCount = i + 1; } @@ -2045,14 +2044,14 @@ static void SortPokedex(u8 dexMode, u8 sortMode) for (i = 0; i < vars[0]; i++) { vars[2] = i + 1; - if (GetNationalPokedexFlag(vars[2], 0)) + if (GetSetPokedexFlag(vars[2], 0)) r10 = 1; if (r10) { asm(""); //Needed to match for some reason gPokedexView->unk0[r5].dexNum = vars[2]; - gPokedexView->unk0[r5].seen = GetNationalPokedexFlag(vars[2], 0); - gPokedexView->unk0[r5].owned = GetNationalPokedexFlag(vars[2], 1); + gPokedexView->unk0[r5].seen = GetSetPokedexFlag(vars[2], 0); + gPokedexView->unk0[r5].owned = GetSetPokedexFlag(vars[2], 1); if (gPokedexView->unk0[r5].seen) gPokedexView->pokemonListCount = r5 + 1; r5++; @@ -2065,11 +2064,11 @@ static void SortPokedex(u8 dexMode, u8 sortMode) { vars[2] = gPokedexOrder_Alphabetical[i]; - if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 0)) + if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 0)) { gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = GetNationalPokedexFlag(vars[2], 1); + gPokedexView->unk0[gPokedexView->pokemonListCount].owned = GetSetPokedexFlag(vars[2], 1); gPokedexView->pokemonListCount++; } } @@ -2079,7 +2078,7 @@ static void SortPokedex(u8 dexMode, u8 sortMode) { vars[2] = gPokedexOrder_Weight[i]; - if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1)) + if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1)) { gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; @@ -2093,7 +2092,7 @@ static void SortPokedex(u8 dexMode, u8 sortMode) { vars[2] = gPokedexOrder_Weight[i]; - if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1)) + if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1)) { gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; @@ -2107,7 +2106,7 @@ static void SortPokedex(u8 dexMode, u8 sortMode) { vars[2] = gPokedexOrder_Height[i]; - if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1)) + if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1)) { gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; @@ -2121,7 +2120,7 @@ static void SortPokedex(u8 dexMode, u8 sortMode) { vars[2] = gPokedexOrder_Height[i]; - if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1)) + if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1)) { gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; @@ -3946,7 +3945,7 @@ static void sub_8090B8C(u8 taskId) otId = ((u16)gTasks[taskId].data[13] << 16) | (u16)gTasks[taskId].data[12]; personality = ((u16)gTasks[taskId].data[15] << 16) | (u16)gTasks[taskId].data[14]; paletteNum = gSprites[gTasks[taskId].data[3]].oam.paletteNum; - lzPaletteData = species_and_otid_get_pal(species, otId, personality); + lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personality); LoadCompressedPalette(lzPaletteData, 0x100 | paletteNum * 16, 32); DestroyTask(taskId); } @@ -4008,79 +4007,79 @@ u16 GetPokedexHeightWeight(u16 dexNum, u8 data) } } -s8 GetNationalPokedexFlag(u16 a, u8 b) +s8 GetSetPokedexFlag(u16 nationalDexNo, u8 caseID) { u8 index; u8 bit; u8 mask; s8 retVal; - a--; - index = a / 8; - bit = a % 8; + nationalDexNo--; + index = nationalDexNo / 8; + bit = nationalDexNo % 8; mask = 1 << bit; retVal = 0; - switch (b) + switch (caseID) { - case 0: + case FLAG_GET_SEEN: if (gSaveBlock2.pokedex.seen[index] & mask) { - if ((gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.unk938[index] & mask) - && (gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.unk3A8C[index] & mask)) + if ((gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.dexSeen2[index] & mask) + && (gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.dexSeen3[index] & mask)) retVal = 1; else { gSaveBlock2.pokedex.seen[index] &= ~mask; - gSaveBlock1.unk938[index] &= ~mask; - gSaveBlock1.unk3A8C[index] &= ~mask; + gSaveBlock1.dexSeen2[index] &= ~mask; + gSaveBlock1.dexSeen3[index] &= ~mask; retVal = 0; } } break; - case 1: + case FLAG_GET_CAUGHT: if (gSaveBlock2.pokedex.owned[index] & mask) { if ((gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock2.pokedex.seen[index] & mask) - && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.unk938[index] & mask) - && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.unk3A8C[index] & mask)) + && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.dexSeen2[index] & mask) + && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.dexSeen3[index] & mask)) retVal = 1; else { gSaveBlock2.pokedex.owned[index] &= ~mask; gSaveBlock2.pokedex.seen[index] &= ~mask; - gSaveBlock1.unk938[index] &= ~mask; - gSaveBlock1.unk3A8C[index] &= ~mask; + gSaveBlock1.dexSeen2[index] &= ~mask; + gSaveBlock1.dexSeen3[index] &= ~mask; retVal = 0; } } break; - case 2: + case FLAG_SET_SEEN: gSaveBlock2.pokedex.seen[index] |= mask; - gSaveBlock1.unk938[index] |= mask; - gSaveBlock1.unk3A8C[index] |= mask; + gSaveBlock1.dexSeen2[index] |= mask; + gSaveBlock1.dexSeen3[index] |= mask; break; - case 3: + case FLAG_SET_CAUGHT: gSaveBlock2.pokedex.owned[index] |= mask; break; } return retVal; } -u16 GetNationalPokedexCount(u8 a) +u16 GetNationalPokedexCount(u8 caseID) { u16 count = 0; u16 i; for (i = 0; i < NATIONAL_DEX_COUNT; i++) { - switch (a) + switch (caseID) { - case 0: - if (GetNationalPokedexFlag(i + 1, 0) != 0) + case FLAG_GET_SEEN: + if (GetSetPokedexFlag(i + 1, FLAG_GET_SEEN)) count++; break; - case 1: - if (GetNationalPokedexFlag(i + 1, 1) != 0) + case FLAG_GET_CAUGHT: + if (GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT)) count++; break; } @@ -4088,21 +4087,21 @@ u16 GetNationalPokedexCount(u8 a) return count; } -u16 GetHoennPokedexCount(u8 a) +u16 GetHoennPokedexCount(u8 caseID) { u16 count = 0; u16 i; for (i = 0; i < 202; i++) { - switch (a) + switch (caseID) { - case 0: - if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 0) != 0) + case FLAG_GET_SEEN: + if (GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_SEEN)) count++; break; - case 1: - if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 1) != 0) + case FLAG_GET_CAUGHT: + if (GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_CAUGHT)) count++; break; } @@ -4116,7 +4115,7 @@ bool8 sub_8090FC0(void) for (i = 0; i < 200; i++) { - if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 1) == 0) + if (!GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_CAUGHT)) return FALSE; } return TRUE; @@ -4128,17 +4127,17 @@ u16 sub_8090FF4(void) for (i = 0; i < 150; i++) { - if (GetNationalPokedexFlag(i + 1, 1) == 0) + if (GetSetPokedexFlag(i + 1, 1) == 0) return 0; } for (i = 152; i < 250; i++) { - if (GetNationalPokedexFlag(i + 1, 1) == 0) + if (GetSetPokedexFlag(i + 1, 1) == 0) return 0; } for (i = 252; i < 384; i++) { - if (GetNationalPokedexFlag(i + 1, 1) == 0) + if (GetSetPokedexFlag(i + 1, 1) == 0) return 0; } return 1; diff --git a/src/pokemon_3.c b/src/pokemon_3.c index e449af0a1..515d63c44 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -278,7 +278,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) else holdEffect = ItemId_GetHoldEffect(heldItem); - if (holdEffect == 38 && type != 3) + if (holdEffect == HOLD_EFFECT_PREVENT_EVOLVE && type != 3) return 0; switch (type) @@ -1096,7 +1096,7 @@ void ClearBattleMonForms(void) gBattleMonForms[i] = 0; } -u16 sub_8040728(void) +u16 GetBGM_ForBattle(void) { if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) return BGM_BATTLE34; @@ -1137,7 +1137,7 @@ void sub_80408BC(void) { ResetMapMusic(); m4aMPlayAllStop(); - PlayBGM(sub_8040728()); + PlayBGM(GetBGM_ForBattle()); } void current_map_music_set__default_for_battle(u16 song) @@ -1147,15 +1147,15 @@ void current_map_music_set__default_for_battle(u16 song) if (song) PlayNewMapMusic(song); else - PlayNewMapMusic(sub_8040728()); + PlayNewMapMusic(GetBGM_ForBattle()); } -const u8 *pokemon_get_pal(struct Pokemon *mon) +const u8 *GetMonSpritePal(struct Pokemon *mon) { u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); - return species_and_otid_get_pal(species, otId, personality); + return GetMonSpritePalFromOtIdPersonality(species, otId, personality); } //Extracts the upper 16 bits of a 32-bit number @@ -1164,7 +1164,7 @@ const u8 *pokemon_get_pal(struct Pokemon *mon) //Extracts the lower 16 bits of a 32-bit number #define LOHALF(n) ((n) & 0xFFFF) -const u8 *species_and_otid_get_pal(u16 species, u32 otId, u32 personality) +const u8 *GetMonSpritePalFromOtIdPersonality(u16 species, u32 otId, u32 personality) { u32 shinyValue; @@ -1178,15 +1178,15 @@ const u8 *species_and_otid_get_pal(u16 species, u32 otId, u32 personality) return gMonPaletteTable[species].data; } -const struct CompressedSpritePalette *sub_8040990(struct Pokemon *mon) +const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon) { u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); - return sub_80409C8(species, otId, personality); + return GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); } -const struct CompressedSpritePalette *sub_80409C8(u16 species, u32 otId , u32 personality) +const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u16 species, u32 otId , u32 personality) { u32 shinyValue; @@ -1208,9 +1208,9 @@ bool8 IsHMMove2(u16 move) return FALSE; } -bool8 sub_8040A3C(u16 species) +bool8 IsPokeSpriteNotFlipped(u16 species) { - return gBaseStats[species].unk19_7; + return gBaseStats[species].noFlip; } s8 sub_8040A54(struct Pokemon *mon, u8 a2) diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 249146b37..172233e6d 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -102,8 +102,8 @@ extern u32 gTransformPersonalities[NUM_BATTLE_SLOTS]; extern u8 gBattleMonForms[NUM_BATTLE_SLOTS]; extern u16 gUnknown_0202F7CA[]; extern u8 gBattleMonSprites[NUM_BATTLE_SLOTS]; -extern u8 gBattleAnimPlayerMonIndex; -extern u8 gBattleAnimEnemyMonIndex; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; extern s16 gBattleAnimArgs[8]; extern u8 gBanksBySide[NUM_BATTLE_SLOTS]; extern u8 gNoOfAllBanks; // gNumBattleMons? @@ -402,43 +402,43 @@ u8 sub_8077FC0(u8 slot) { return r6; } -u8 obj_id_for_side_relative_to_move(u8 a1) { +u8 GetAnimBankSpriteId(u8 whichBank) { u8 *sprites; - if (a1 == 0) { - if (sub_8078874(gBattleAnimPlayerMonIndex)) { + if (whichBank == ANIM_BANK_ATK) { + if (AnimBankSpriteExists(gBattleAnimBankAttacker)) { sprites = gBattleMonSprites; - return sprites[gBattleAnimPlayerMonIndex]; + return sprites[gBattleAnimBankAttacker]; } else { return 0xff; } - } else if (a1 == 1) { - if (sub_8078874(gBattleAnimEnemyMonIndex)) { + } else if (whichBank == ANIM_BANK_DEF) { + if (AnimBankSpriteExists(gBattleAnimBankTarget)) { sprites = gBattleMonSprites; - return sprites[gBattleAnimEnemyMonIndex]; + return sprites[gBattleAnimBankTarget]; } else { return 0xff; } - } else if (a1 == 2) { - if (!b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) { + } else if (whichBank == ANIM_BANK_ATK_PARTNER) { + if (!IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) { return 0xff; } else { - return gBattleMonSprites[gBattleAnimPlayerMonIndex ^ 2]; + return gBattleMonSprites[gBattleAnimBankAttacker ^ 2]; } } else { - if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) { - return gBattleMonSprites[gBattleAnimEnemyMonIndex ^ 2]; + if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) { + return gBattleMonSprites[gBattleAnimBankTarget ^ 2]; } else { return 0xff; } } } -void oamt_set_x3A_32(struct Sprite *sprite, void (*callback)(struct Sprite*)) { +void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*callback)(struct Sprite*)) { sprite->data6 = (u32)(callback) & 0xffff; sprite->data7 = (u32)(callback) >> 16; } -void sub_8078104(struct Sprite *sprite) { +void SetCallbackToStoredInData6(struct Sprite *sprite) { u32 callback = (u16)sprite->data6 | (sprite->data7 << 16); sprite->callback = (void (*)(struct Sprite *))callback; } @@ -455,7 +455,7 @@ void sub_8078114(struct Sprite *sprite) { } sprite->data3--; } else { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } } @@ -472,7 +472,7 @@ void sub_8078174(struct Sprite *sprite) { } sprite->data3--; } else { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } } @@ -494,7 +494,7 @@ void unref_sub_80781F0(struct Sprite *sprite) { } sprite->data3--; } else { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } } @@ -510,7 +510,7 @@ void sub_8078278(struct Sprite *sprite) { } sprite->data3--; } else { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } } @@ -518,7 +518,7 @@ void sub_80782D8(struct Sprite *sprite) { if (sprite->data0 > 0) { sprite->data0--; } else { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } } @@ -547,7 +547,7 @@ void sub_8078364(struct Sprite *sprite) { sprite->pos2.x += sprite->data1; sprite->pos2.y += sprite->data2; } else { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } } @@ -559,7 +559,7 @@ void sub_8078394(struct Sprite *sprite) { sprite->pos2.x = sprite->data3 >> 8; sprite->pos2.y = sprite->data4 >> 8; } else { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } } @@ -571,7 +571,7 @@ void sub_80783D0(struct Sprite *sprite) { sprite->pos2.x = sprite->data3 >> 8; sprite->pos2.y = sprite->data4 >> 8; } else { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } UpdateMonIconFrame(sprite); } @@ -579,8 +579,8 @@ void sub_80783D0(struct Sprite *sprite) { void unref_sub_8078414(struct Sprite *sprite) { sprite->data1 = sprite->pos1.x + sprite->pos2.x; sprite->data3 = sprite->pos1.y + sprite->pos2.y; - sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); - sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3); sprite->callback = sub_80782F8; } @@ -590,7 +590,7 @@ void sub_8078458(struct Sprite *sprite) { gSprites[sprite->data3].pos2.x += sprite->data1; gSprites[sprite->data3].pos2.y += sprite->data2; } else { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } } @@ -602,7 +602,7 @@ void sub_80784A8(struct Sprite *sprite) { gSprites[sprite->data5].pos2.x = sprite->data3 >> 8; gSprites[sprite->data5].pos2.y = sprite->data4 >> 8; } else { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } } @@ -619,7 +619,7 @@ void sub_8078504(struct Sprite *sprite) { } } } else { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } } @@ -631,8 +631,8 @@ void move_anim_8074EE0(struct Sprite *sprite) { void unref_sub_8078588(struct Sprite *sprite) { sprite->data1 = sprite->pos1.x + sprite->pos2.x; sprite->data3 = sprite->pos1.y + sprite->pos2.y; - sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3); sprite->callback = sub_80782F8; } @@ -643,13 +643,13 @@ void unref_sub_80785CC(struct Sprite *sprite) { void sub_80785E4(struct Sprite *sprite) { if (sprite->affineAnimEnded) { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } } void sub_8078600(struct Sprite *sprite) { if (sprite->animEnded) { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } } @@ -666,19 +666,19 @@ void sub_8078634(u8 task) { } void sub_8078650(struct Sprite *sprite) { - sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); } void sub_807867C(struct Sprite *sprite, s16 a2) { - u16 v1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 0); - u16 v2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 0); + u16 v1 = sub_8077ABC(gBattleAnimBankAttacker, 0); + u16 v2 = sub_8077ABC(gBattleAnimBankTarget, 0); if (v1 > v2) { sprite->pos1.x -= a2; } else if (v1 < v2) { sprite->pos1.x += a2; } else { - if (GetBankSide(gBattleAnimPlayerMonIndex)) { + if (GetBankSide(gBattleAnimBankAttacker)) { sprite->pos1.x -= a2; } else { sprite->pos1.x += a2; @@ -712,8 +712,8 @@ void oamt_add_pos2_onto_pos1(struct Sprite *sprite) { void sub_8078764(struct Sprite *sprite, u8 a2) { if (!a2) { - sprite->pos1.x = sub_8077EE4(gBattleAnimEnemyMonIndex, 0); - sprite->pos1.y = sub_8077EE4(gBattleAnimEnemyMonIndex, 1); + sprite->pos1.x = sub_8077EE4(gBattleAnimBankTarget, 0); + sprite->pos1.y = sub_8077EE4(gBattleAnimBankTarget, 1); } sub_807867C(sprite, gBattleAnimArgs[0]); sprite->pos1.y += gBattleAnimArgs[1]; @@ -721,11 +721,11 @@ void sub_8078764(struct Sprite *sprite, u8 a2) { void sub_80787B0(struct Sprite *sprite, u8 a2) { if (!a2) { - sprite->pos1.x = sub_8077EE4(gBattleAnimPlayerMonIndex, 0); - sprite->pos1.y = sub_8077EE4(gBattleAnimPlayerMonIndex, 1); + sprite->pos1.x = sub_8077EE4(gBattleAnimBankAttacker, 0); + sprite->pos1.y = sub_8077EE4(gBattleAnimBankAttacker, 1); } else { - sprite->pos1.x = sub_8077EE4(gBattleAnimPlayerMonIndex, 2); - sprite->pos1.y = sub_8077EE4(gBattleAnimPlayerMonIndex, 3); + sprite->pos1.x = sub_8077EE4(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077EE4(gBattleAnimBankAttacker, 3); } sub_807867C(sprite, gBattleAnimArgs[0]); sprite->pos1.y += gBattleAnimArgs[1]; @@ -749,12 +749,12 @@ u8 GetBankByPlayerAI(u8 slot) { return i; } -bool8 sub_8078874(u8 slot) { +bool8 AnimBankSpriteExists(u8 slot) { if (IsContest()) { - if (gBattleAnimPlayerMonIndex == slot) { + if (gBattleAnimBankAttacker == slot) { return TRUE; } - if (gBattleAnimEnemyMonIndex == slot) { + if (gBattleAnimBankTarget == slot) { return TRUE; } return FALSE; @@ -796,7 +796,7 @@ void sub_8078954(struct Struct_sub_8078914 *unk) { unk->field_0 = (u8 *)0x6008000; unk->field_4 = (u8 *)0x600f000; unk->field_8 = 0xe; - } else if (GetBankIdentity_permutated(gBattleAnimPlayerMonIndex) == 1) { + } else if (GetBankIdentity_permutated(gBattleAnimBankAttacker) == 1) { unk->field_0 = (u8 *)0x6004000; unk->field_4 = (u8 *)0x600e000; unk->field_8 = 0x8; @@ -906,7 +906,7 @@ bool8 sub_8078B5C(struct Sprite *sprite) { void sub_8078BB8(struct Sprite *sprite) { if (sub_8078B5C(sprite)) { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } } @@ -986,7 +986,7 @@ bool8 sub_8078CE8(struct Sprite *sprite) { void sub_8078D44(struct Sprite *sprite) { if (sub_8078CE8(sprite)) { - sub_8078104(sprite); + SetCallbackToStoredInData6(sprite); } } @@ -1024,7 +1024,7 @@ void obj_id_set_rotscale(u8 sprite, s16 xScale, s16 yScale, u16 rotation) { bool8 sub_8078E38() { if (IsContest()) { - if (gSprites[obj_id_for_side_relative_to_move(0)].data2 == 0xc9 /* XXX SPECIES_UNOWN? */) { + if (gSprites[GetAnimBankSpriteId(0)].data2 == 0xc9 /* XXX SPECIES_UNOWN? */) { return FALSE; } return TRUE; @@ -1035,7 +1035,7 @@ bool8 sub_8078E38() { void sub_8078E70(u8 sprite, u8 a2) { struct Struct_2017810 *unk; u8 r7 = gSprites[sprite].data0; - if (IsContest() || b_side_obj__get_some_boolean(r7)) { + if (IsContest() || IsAnimBankSpriteVisible(r7)) { gSprites[sprite].invisible = FALSE; } gSprites[sprite].oam.objMode = a2; @@ -1096,12 +1096,12 @@ void sub_8079098(struct Sprite *sprite) { CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); } -u16 sub_80790D8(s16 a, s16 b) { +static u16 ArcTan2_(s16 a, s16 b) { return ArcTan2(a, b); } u16 sub_80790F0(s16 a, s16 b) { - u16 var = sub_80790D8(a, b); + u16 var = ArcTan2_(a, b); return -var; } @@ -1140,22 +1140,22 @@ u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) { } } if (a2) { - shift = gBattleAnimPlayerMonIndex + 16; + shift = gBattleAnimBankAttacker + 16; var |= 1 << shift; } if (a3) { - shift = gBattleAnimEnemyMonIndex + 16; + shift = gBattleAnimBankTarget + 16; var |= 1 << shift; } if (a4) { - if (b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) { - shift = (gBattleAnimPlayerMonIndex ^ 2) + 16; + if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) { + shift = (gBattleAnimBankAttacker ^ 2) + 16; var |= 1 << shift; } } if (a5) { - if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) { - shift = (gBattleAnimEnemyMonIndex ^ 2) + 16; + if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) { + shift = (gBattleAnimBankTarget ^ 2) + 16; var |= 1 << shift; } } @@ -1184,24 +1184,24 @@ u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4) { } } else { if (a1) { - if (b_side_obj__get_some_boolean(GetBankByPlayerAI(0))) { + if (IsAnimBankSpriteVisible(GetBankByPlayerAI(0))) { var |= 1 << (GetBankByPlayerAI(0) + 16); } } if (a2) { - if (b_side_obj__get_some_boolean(GetBankByPlayerAI(2))) { + if (IsAnimBankSpriteVisible(GetBankByPlayerAI(2))) { shift = GetBankByPlayerAI(2) + 16; var |= 1 << shift; } } if (a3) { - if (b_side_obj__get_some_boolean(GetBankByPlayerAI(1))) { + if (IsAnimBankSpriteVisible(GetBankByPlayerAI(1))) { shift = GetBankByPlayerAI(1) + 16; var |= 1 << shift; } } if (a4) { - if (b_side_obj__get_some_boolean(GetBankByPlayerAI(3))) { + if (IsAnimBankSpriteVisible(GetBankByPlayerAI(3))) { shift = GetBankByPlayerAI(3) + 16; var |= 1 << shift; } @@ -1252,24 +1252,24 @@ void sub_807941C(struct Sprite *sprite) { v2 = 1; } sub_80787B0(sprite, v1); - if (GetBankSide(gBattleAnimPlayerMonIndex)) { + if (GetBankSide(gBattleAnimBankAttacker)) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, v2) + gBattleAnimArgs[3]; + sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, v2) + gBattleAnimArgs[3]; sprite->callback = sub_8078B34; - oamt_set_x3A_32(sprite, move_anim_8072740); + StoreSpriteCallbackInData6(sprite, move_anim_8072740); } void sub_80794A8(struct Sprite *sprite) { sub_80787B0(sprite, 1); - if (GetBankSide(gBattleAnimPlayerMonIndex)) { + if (GetBankSide(gBattleAnimBankAttacker)) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[3]; + sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; sprite->data5 = gBattleAnimArgs[5]; sub_80786EC(sprite); sprite->callback = sub_8079518; @@ -1292,12 +1292,12 @@ void sub_8079534(struct Sprite *sprite) { } if (!gBattleAnimArgs[5]) { sub_80787B0(sprite, r4); - slot = gBattleAnimPlayerMonIndex; + slot = gBattleAnimBankAttacker; } else { sub_8078764(sprite, r4); - slot = gBattleAnimEnemyMonIndex; + slot = gBattleAnimBankTarget; } - if (GetBankSide(gBattleAnimPlayerMonIndex)) { + if (GetBankSide(gBattleAnimBankAttacker)) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } sub_8078764(sprite, r4); @@ -1305,12 +1305,12 @@ void sub_8079534(struct Sprite *sprite) { sprite->data2 = sub_8077ABC(slot, 2) + gBattleAnimArgs[2]; sprite->data4 = sub_8077ABC(slot, r7) + gBattleAnimArgs[3]; sprite->callback = sub_8078B34; - oamt_set_x3A_32(sprite, move_anim_8072740); + StoreSpriteCallbackInData6(sprite, move_anim_8072740); } s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1) { u16 i; - u8 sprite = obj_id_for_side_relative_to_move(a1); + u8 sprite = GetAnimBankSpriteId(a1); if (sprite != 0xff) { for (i = 0; i < 0x40; i++) { if (gSprites[i].inUse) { @@ -1380,7 +1380,7 @@ void sub_80796F8(u8 taskId) { } void sub_8079790(u8 task) { - u8 sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + u8 sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]); if (sprite == 0xff) { DestroyAnimVisualTask(task); return; @@ -1624,24 +1624,24 @@ void sub_8079CEC(u8 task) { } void unref_sub_8079D20(u8 priority) { - if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex)) { - gSprites[gBattleMonSprites[gBattleAnimEnemyMonIndex]].oam.priority = priority; + if (IsAnimBankSpriteVisible(gBattleAnimBankTarget)) { + gSprites[gBattleMonSprites[gBattleAnimBankTarget]].oam.priority = priority; } - if (b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex)) { - gSprites[gBattleMonSprites[gBattleAnimPlayerMonIndex]].oam.priority = priority; + if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker)) { + gSprites[gBattleMonSprites[gBattleAnimBankAttacker]].oam.priority = priority; } - if (b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) { - gSprites[gBattleMonSprites[gBattleAnimEnemyMonIndex ^ 2]].oam.priority = priority; + if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) { + gSprites[gBattleMonSprites[gBattleAnimBankTarget ^ 2]].oam.priority = priority; } - if (b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) { - gSprites[gBattleMonSprites[gBattleAnimPlayerMonIndex ^ 2]].oam.priority = priority; + if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) { + gSprites[gBattleMonSprites[gBattleAnimBankAttacker ^ 2]].oam.priority = priority; } } void sub_8079E24() { int i; for (i = 0; i < gNoOfAllBanks; i++) { - if (b_side_obj__get_some_boolean(i)) { + if (IsAnimBankSpriteVisible(i)) { gSprites[gBattleMonSprites[i]].subpriority = sub_8079E90(i); gSprites[gBattleMonSprites[i]].oam.priority = 2; } @@ -1706,7 +1706,7 @@ u8 sub_8079F44(u16 species, u8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7, u16 sheet = LoadSpriteSheet(&gUnknown_0837F5E0[a3]); u16 palette = AllocSpritePalette(gSpriteTemplate_837F5B0[a3].paletteTag); if (!isBackpic) { - LoadCompressedPalette(species_and_otid_get_pal(species, a8, a7), (palette * 0x10) + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(species, a8, a7), (palette * 0x10) + 0x100, 0x20); LoadSpecialPokePic( &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, @@ -1719,7 +1719,7 @@ u8 sub_8079F44(u16 species, u8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7, ); } else { LoadCompressedPalette( - species_and_otid_get_pal(species, a8, a7), (palette * 0x10) + 0x100, 0x20); + GetMonSpritePalFromOtIdPersonality(species, a8, a7), (palette * 0x10) + 0x100, 0x20); LoadSpecialPokePic( &gMonBackPicTable[species], gMonBackPicCoords[species].coords, @@ -1892,7 +1892,7 @@ u8 sub_807A4A0(int a1, u8 sprite, int a3) { void sub_807A544(struct Sprite *sprite) { sub_8078650(sprite); - if (GetBankSide(gBattleAnimPlayerMonIndex)) { + if (GetBankSide(gBattleAnimBankAttacker)) { sprite->pos1.x -= gBattleAnimArgs[0]; gBattleAnimArgs[3] = -gBattleAnimArgs[3]; sprite->hFlip = TRUE; @@ -1904,12 +1904,12 @@ void sub_807A544(struct Sprite *sprite) { sprite->data1 = gBattleAnimArgs[3]; sprite->data3 = gBattleAnimArgs[4]; sprite->data5 = gBattleAnimArgs[5]; - oamt_set_x3A_32(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); sprite->callback = sub_8078504; } void sub_807A5C4(struct Sprite *sprite) { - if (GetBankSide(gBattleAnimPlayerMonIndex)) { + if (GetBankSide(gBattleAnimBankAttacker)) { sprite->pos1.x -= gBattleAnimArgs[0]; gBattleAnimArgs[3] *= -1; } else { @@ -1921,28 +1921,28 @@ void sub_807A5C4(struct Sprite *sprite) { sprite->data3 = gBattleAnimArgs[4]; sprite->data5 = gBattleAnimArgs[5]; StartSpriteAnim(sprite, gBattleAnimArgs[6]); - oamt_set_x3A_32(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); sprite->callback = sub_8078504; } void sub_807A63C(struct Sprite *sprite) { sub_8078650(sprite); - if (GetBankSide(gBattleAnimPlayerMonIndex)) { + if (GetBankSide(gBattleAnimBankAttacker)) { sprite->pos1.x -= gBattleAnimArgs[0]; } else { sprite->pos1.x += gBattleAnimArgs[0]; } sprite->pos1.y += gBattleAnimArgs[1]; sprite->callback = sub_8078600; - oamt_set_x3A_32(sprite, move_anim_8072740); + StoreSpriteCallbackInData6(sprite, move_anim_8072740); } void sub_807A69C(u8 taskId) { u16 src; u16 dest; struct Task *task = &gTasks[taskId]; - task->data[0] = obj_id_for_side_relative_to_move(0); - task->data[1] = (GetBankSide(gBattleAnimPlayerMonIndex)) ? -8 : 8; + task->data[0] = GetAnimBankSpriteId(0); + task->data[1] = (GetBankSide(gBattleAnimBankAttacker)) ? -8 : 8; task->data[2] = 0; task->data[3] = 0; gSprites[task->data[0]].pos2.x -= task->data[0]; @@ -1951,7 +1951,7 @@ void sub_807A69C(u8 taskId) { dest = (task->data[4] + 0x10) * 0x10; src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10; - task->data[6] = sub_8079E90(gBattleAnimPlayerMonIndex); + task->data[6] = sub_8079E90(gBattleAnimBankAttacker); if (task->data[6] == 20 || task->data[6] == 40) { task->data[6] = 2; } else { @@ -2012,9 +2012,9 @@ void sub_807A8D4(struct Sprite *sprite) { } void sub_807A908(struct Sprite *sprite) { - sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); - if (!GetBankSide(gBattleAnimPlayerMonIndex)) { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + if (!GetBankSide(gBattleAnimBankAttacker)) { sprite->data0 = 5; } else { sprite->data0 = -10; @@ -2041,7 +2041,7 @@ void sub_807A9BC(struct Sprite *sprite) { sprite->data0 = gBattleAnimArgs[2]; sprite->data2 = sprite->pos1.x + gBattleAnimArgs[4]; sprite->data4 = sprite->pos1.y + gBattleAnimArgs[5]; - if (!GetBankSide(gBattleAnimEnemyMonIndex)) { + if (!GetBankSide(gBattleAnimBankTarget)) { x = (u16)gBattleAnimArgs[4] + 30; sprite->pos1.x += x; sprite->pos1.y = gBattleAnimArgs[5] - 20; @@ -2051,5 +2051,5 @@ void sub_807A9BC(struct Sprite *sprite) { sprite->pos1.y = gBattleAnimArgs[5] - 80; } sprite->callback = sub_8078B34; - oamt_set_x3A_32(sprite, move_anim_8072740); + StoreSpriteCallbackInData6(sprite, move_anim_8072740); } diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c index cbca07011..943569d4f 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/script_pokemon_util_80C4BF0.c @@ -433,7 +433,7 @@ void ShowContestEntryMonPic(void) gUnknown_081FAF4C[1], species, var1); - palette = sub_80409C8(species, var2, var1); + palette = GetMonSpritePalStructFromOtIdPersonality(species, var2, var1); LoadCompressedObjectPalette(palette); GetMonSpriteTemplate_803C56C(species, 1); gUnknown_02024E8C.paletteTag = palette->tag; @@ -561,8 +561,8 @@ u8 ScriptGiveMon(u16 species, u8 var, u16 item, u32 var3, u32 var4, u8 var5) { case 0: case 1: - GetNationalPokedexFlag(nationalSpecies, 2); - GetNationalPokedexFlag(nationalSpecies, 3); + GetSetPokedexFlag(nationalSpecies, 2); + GetSetPokedexFlag(nationalSpecies, 3); return sentToPc; default: return sentToPc; diff --git a/src/shop.c b/src/shop.c index d53646a88..01d675638 100644 --- a/src/shop.c +++ b/src/shop.c @@ -244,7 +244,7 @@ void BuyMenuDrawGraphics(void) register const u32 zero asm("r6") = 0; DmaFill32(3, zero, addr, OAM_SIZE); LZDecompressVram(gBuyMenuFrame_Gfx, (void*)(VRAM + 0x7C00)); - sub_800D238(gBuyMenuFrame_Tilemap, (void *)0x02018000); + LZDecompressWram(gBuyMenuFrame_Tilemap, (void *)0x02018000); LoadCompressedPalette(gMenuMoneyPal, 0xC0, sizeof(gMenuMoneyPal)); FreeAllSpritePalettes(); ResetPaletteFade(); diff --git a/src/slot_machine.c b/src/slot_machine.c index c9a06a758..e8e4f271b 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -71,7 +71,7 @@ void sub_8106448(void) { u32 offsetRead, offsetWrite; u32 size; - sub_800D238(gSlotMachine_Gfx, (void *) 0x02010000); + LZDecompressWram(gSlotMachine_Gfx, (void *) 0x02010000); offsetRead = 0x02010000; offsetWrite = BG_VRAM; diff --git a/src/tv.c b/src/tv.c index a254bcd5f..760b6f176 100644 --- a/src/tv.c +++ b/src/tv.c @@ -1556,7 +1556,7 @@ u16 sub_80BF674(u16 species) rspecies = (Random() % (NUM_SPECIES - 1)) + 1; cspecies = rspecies; - while (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(cspecies), 0) != 1 || cspecies == species) + while (GetSetPokedexFlag(SpeciesToNationalPokedexNum(cspecies), 0) != 1 || cspecies == species) { if (cspecies == SPECIES_BULBASAUR) cspecies = NUM_SPECIES - 1; @@ -2320,7 +2320,7 @@ void sub_80C03A8(u8 showidx) void sub_80C03C8(u16 species, u8 showidx) { - if (GetNationalPokedexFlag(SpeciesToNationalPokedexNum(species), 0) == 0) + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), 0) == 0) gSaveBlock1.tvShows[showidx].common.var01 = 0; } diff --git a/src/unused_8124F94.c b/src/unused_8124F94.c index 93b569058..5f76fa92e 100644 --- a/src/unused_8124F94.c +++ b/src/unused_8124F94.c @@ -64,7 +64,7 @@ u8 unref_sub_8124FD8(struct UnknownStruct1 *a, const struct UnknownStruct2 *b) } else { - sub_800D238(b->src, a->dest + a->unk2 * 64); + LZDecompressWram(b->src, a->dest + a->unk2 * 64); } a->unk88[a->unk1].unk8 = a->unk2; temp = r6 + a->unk2; @@ -95,7 +95,7 @@ u8 unref_sub_81250A4(struct UnknownStruct1 *a, struct UnknownStruct3 *b) { u16 palette[16]; - sub_800D238(b->paletteSrc, palette); + LZDecompressWram(b->paletteSrc, palette); LoadPalette(palette, a->paletteNum * 16, 32); } a->unk8[a->paletteNum].paletteCount = a->paletteNum; @@ -111,7 +111,7 @@ u8 unref_sub_8125118(struct UnknownStruct1 *a, struct UnknownStruct3 *b) u8 r7 = b->paletteCount; u8 i; - sub_800D238(b->paletteSrc, palettes); + LZDecompressWram(b->paletteSrc, palettes); for (i = a->paletteNum; i < r7; i++) { if (a->paletteNum + i >= 16) -- cgit v1.2.3 From 55b3ca611273a456d93b445f10af98ae9e17fb17 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 23 Aug 2017 17:04:50 +0200 Subject: fix german build...hopefully --- asm-de/contest_link_80C2020.s | 2 +- asm-de/easy_chat.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/asm-de/contest_link_80C2020.s b/asm-de/contest_link_80C2020.s index 646851c2d..782808382 100644 --- a/asm-de/contest_link_80C2020.s +++ b/asm-de/contest_link_80C2020.s @@ -1601,7 +1601,7 @@ _080C2D42: lsls r0, 16 lsrs r0, 16 movs r1, 0x2 - bl GetNationalPokedexFlag + bl GetSetPokedexFlag adds r5, 0x40 subs r4, 0x1 cmp r4, 0 diff --git a/asm-de/easy_chat.s b/asm-de/easy_chat.s index 2f6c28fdb..1d93e36b4 100644 --- a/asm-de/easy_chat.s +++ b/asm-de/easy_chat.s @@ -9984,7 +9984,7 @@ _080EAE50: lsls r0, 16 lsrs r0, 16 movs r1, 0 - bl GetNationalPokedexFlag + bl GetSetPokedexFlag b _080EAE7C _080EAE62: ldr r0, _080EAE74 @ =gUnknown_083DB694 -- cgit v1.2.3 From aaa09d735451cced915bc6bacfce45ced8e33fa1 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 23 Aug 2017 17:28:31 +0200 Subject: fix german build try number 2 --- asm-de/contest_link_80C2020.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asm-de/contest_link_80C2020.s b/asm-de/contest_link_80C2020.s index 782808382..65bbf0f22 100644 --- a/asm-de/contest_link_80C2020.s +++ b/asm-de/contest_link_80C2020.s @@ -1361,7 +1361,7 @@ _080C2B14: adds r0, r6, 0 ldr r1, [sp, 0xC] adds r2, r4, 0 - bl sub_80409C8 + bl GetMonSpritePalStructFromOtIdPersonality adds r4, r0, 0 bl LoadCompressedObjectPalette adds r0, r6, 0 -- cgit v1.2.3 From 5598fc659b4616b1964b38c55cef97c83f615646 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 23 Sep 2017 22:06:05 -0500 Subject: script.c mode constants --- src/script.c | 68 +++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 30 deletions(-) diff --git a/src/script.c b/src/script.c index f049b96fc..8625cfdc2 100644 --- a/src/script.c +++ b/src/script.c @@ -3,6 +3,14 @@ #include "event_data.h" #define RAM_SCRIPT_MAGIC 51 +#define SCRIPT_STACK_SIZE 20 + +enum +{ + SCRIPT_MODE_STOPPED, + SCRIPT_MODE_BYTECODE, + SCRIPT_MODE_NATIVE, +}; EWRAM_DATA u8 *gUnknown_0202E8AC = NULL; @@ -19,66 +27,66 @@ void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTable { s32 i; - ctx->mode = 0; - ctx->scriptPtr = 0; + ctx->mode = SCRIPT_MODE_STOPPED; + ctx->scriptPtr = NULL; ctx->stackDepth = 0; - ctx->nativePtr = 0; + ctx->nativePtr = NULL; ctx->cmdTable = cmdTable; ctx->cmdTableEnd = cmdTableEnd; for (i = 0; i < 4; i++) ctx->data[i] = 0; - for (i = 0; i < 20; i++) + for (i = 0; i < SCRIPT_STACK_SIZE; i++) ctx->stack[i] = 0; } u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr) { ctx->scriptPtr = ptr; - ctx->mode = 1; + ctx->mode = SCRIPT_MODE_BYTECODE; return 1; } void SetupNativeScript(struct ScriptContext *ctx, bool8 (*ptr)(void)) { - ctx->mode = 2; + ctx->mode = SCRIPT_MODE_NATIVE; ctx->nativePtr = ptr; } void StopScript(struct ScriptContext *ctx) { - ctx->mode = 0; - ctx->scriptPtr = 0; + ctx->mode = SCRIPT_MODE_STOPPED; + ctx->scriptPtr = NULL; } -u8 RunScriptCommand(struct ScriptContext *ctx) +bool8 RunScriptCommand(struct ScriptContext *ctx) { - if (ctx->mode == 0) - return 0; + if (ctx->mode == SCRIPT_MODE_STOPPED) + return FALSE; switch (ctx->mode) { - case 0: - return 0; - case 2: + case SCRIPT_MODE_STOPPED: + return FALSE; + case SCRIPT_MODE_NATIVE: if (ctx->nativePtr) { if (ctx->nativePtr() == TRUE) - ctx->mode = 1; - return 1; + ctx->mode = SCRIPT_MODE_BYTECODE; + return TRUE; } - ctx->mode = 1; - case 1: + ctx->mode = SCRIPT_MODE_BYTECODE; + case SCRIPT_MODE_BYTECODE: while (1) { u8 cmdCode; - ScrCmdFunc *func; + ScrCmdFunc *cmdFunc; - if (!ctx->scriptPtr) + if (ctx->scriptPtr == NULL) { - ctx->mode = 0; - return 0; + ctx->mode = SCRIPT_MODE_STOPPED; + return FALSE; } if (ctx->scriptPtr == gNullScriptPtr) @@ -89,25 +97,25 @@ u8 RunScriptCommand(struct ScriptContext *ctx) cmdCode = *(ctx->scriptPtr); ctx->scriptPtr++; - func = &ctx->cmdTable[cmdCode]; + cmdFunc = &ctx->cmdTable[cmdCode]; - if (func >= ctx->cmdTableEnd) + if (cmdFunc >= ctx->cmdTableEnd) { - ctx->mode = 0; - return 0; + ctx->mode = SCRIPT_MODE_STOPPED; + return FALSE; } - if ((*func)(ctx) == 1) - return 1; + if ((*cmdFunc)(ctx) == TRUE) + return TRUE; } } - return 1; + return TRUE; } u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr) { - if (ctx->stackDepth + 1 >= 20) + if (ctx->stackDepth + 1 >= SCRIPT_STACK_SIZE) { return 1; } -- cgit v1.2.3 From cdc5d1b683dd89e80d3daaf13965cae916ed9f6c Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 23 Sep 2017 23:49:37 -0500 Subject: do some scrcmd/overworld labeling --- include/global.h | 2 +- include/overworld.h | 20 +++---- src/decoration.c | 2 +- src/field_effect.c | 4 +- src/field_special_scene.c | 2 +- src/field_specials.c | 4 +- src/item_menu.c | 4 +- src/item_use.c | 32 ++++++----- src/new_game.c | 2 +- src/overworld.c | 95 +++++++++++++++---------------- src/rom6.c | 2 +- src/scrcmd.c | 138 +++++++++++++++++++++++++--------------------- src/secret_base.c | 2 +- sym_common.txt | 2 +- 14 files changed, 163 insertions(+), 148 deletions(-) diff --git a/include/global.h b/include/global.h index 79269937f..2d049a412 100644 --- a/include/global.h +++ b/include/global.h @@ -603,7 +603,7 @@ struct SaveBlock1 /* 0x02025734 */ /*0x04*/ struct WarpData location; /*0x0C*/ struct WarpData warp1; /*0x14*/ struct WarpData warp2; - /*0x1C*/ struct WarpData warp3; + /*0x1C*/ struct WarpData lastHealLocation; /*0x24*/ struct WarpData warp4; /*0x2C*/ u16 battleMusic; /*0x2E*/ u8 weather; diff --git a/include/overworld.h b/include/overworld.h index fcdc8ed97..1a7151529 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -26,10 +26,10 @@ extern const struct UCoords32 gUnknown_0821664C[]; extern void (*gFieldCallback)(void); // sub_8052F5C -void flag_var_implications_of_teleport_(void); +void Overworld_ResetStateAfterFly(void); void Overworld_ResetStateAfterTeleport(void); -void sub_8053014(void); -void sub_8053050(void); +void Overworld_ResetStateAfterDigEscRope(void); +void Overworld_ResetStateAfterWhiteOut(void); // sub_805308C void ResetGameStats(void); void IncrementGameStat(u8 index); @@ -41,8 +41,8 @@ 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 +// ApplyCurrentWarp +// SetWarpData // warp_data_is_not_neg_1 struct MapHeader * const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum); struct MapHeader * const warp1_get_mapheader(void); @@ -50,14 +50,14 @@ struct MapHeader * const warp1_get_mapheader(void); // LoadSaveblockMapHeader // sub_80533CC void warp_in(void); -void warp1_set(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); +void Overworld_SetWarpDestination(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 Overworld_SetWarpDestToLastHealLoc(void); +void Overworld_SetHealLocationWarp(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); @@ -69,7 +69,7 @@ void sub_8053720(s16, s16); // unref_sub_8053790 void sub_80537CC(u8); void gpu_sync_bg_hide(); -// sub_8053818 +// GetMapConnection // sub_8053850 bool8 sub_80538B0(u16 x, u16 y); bool8 sub_80538D0(u16 x, u16 y); @@ -89,7 +89,7 @@ void sub_8053D14(u16); // sub_8053D30 // sub_8053D6C // GetLocationMusic -// sav1_map_get_music +// GetCurrLocationMusic // warp1_target_get_music // call_map_music_set_to_zero void sub_8053E90(void); diff --git a/src/decoration.c b/src/decoration.c index 1d48692c1..8e4d148ea 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -2199,7 +2199,7 @@ void sub_80FF0E0(u8 taskId) void sub_80FF114(u8 taskId) { DrawWholeMapView(); - warp1_set(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, gTasks[taskId].data[3], gTasks[taskId].data[4]); + Overworld_SetWarpDestination(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, gTasks[taskId].data[3], gTasks[taskId].data[4]); warp_in(); } void sub_80FF160(u8 taskId) diff --git a/src/field_effect.c b/src/field_effect.c index 0625e9d18..ba71c40d7 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1213,7 +1213,7 @@ void task00_8084310(u8 taskId) } if (!FieldEffectActiveListContains(FLDEFF_USE_FLY)) { - flag_var_implications_of_teleport_(); + Overworld_ResetStateAfterFly(); warp_in(); SetMainCallback2(CB2_LoadMap); gFieldCallback = mapldr_08084390; @@ -2267,7 +2267,7 @@ void sub_8087D78(struct Task *task) { if (!gPaletteFade.active && sub_8054034() == TRUE) { - sub_8053570(); + Overworld_SetWarpDestToLastHealLoc(); warp_in(); SetMainCallback2(CB2_LoadMap); gFieldCallback = mapldr_08085D88; diff --git a/src/field_special_scene.c b/src/field_special_scene.c index 38c076c51..d4b59c8a2 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -250,7 +250,7 @@ bool8 sub_80C7754(void) } else { - warp1_set(mapGroup, mapNum, -1, x, y); + Overworld_SetWarpDestination(mapGroup, mapNum, -1, x, y); return TRUE; } } diff --git a/src/field_specials.c b/src/field_specials.c index c23ea2ddc..2c68e105a 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -700,11 +700,11 @@ void CableCarWarp(void) { if (gSpecialVar_0x8004 != 0) { - warp1_set(MAP_GROUP_ROUTE112_CABLE_CAR_STATION, MAP_ID_ROUTE112_CABLE_CAR_STATION, -1, 6, 4); + Overworld_SetWarpDestination(MAP_GROUP_ROUTE112_CABLE_CAR_STATION, MAP_ID_ROUTE112_CABLE_CAR_STATION, -1, 6, 4); } else { - warp1_set(MAP_GROUP_MT_CHIMNEY_CABLE_CAR_STATION, MAP_ID_MT_CHIMNEY_CABLE_CAR_STATION, -1, 6, 4); + Overworld_SetWarpDestination(MAP_GROUP_MT_CHIMNEY_CABLE_CAR_STATION, MAP_ID_MT_CHIMNEY_CABLE_CAR_STATION, -1, 6, 4); } } diff --git a/src/item_menu.c b/src/item_menu.c index 891eb135f..cf4fccc14 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -152,7 +152,7 @@ static u8 sReturnLocation; static const u8 *sPopupMenuActionList; // common -void (*gUnknown_03005D00)(u8) = NULL; +void (*gFieldItemUseCallback)(u8) = NULL; extern u16 gUnknown_030041B4; extern struct PocketScrollState gBagPocketScrollStates[]; extern struct ItemSlot *gCurrentBagPocketItemSlots; // selected pocket item slots @@ -2718,7 +2718,7 @@ void ExecuteItemUseFromBlackPalette(void) static void Task_CallItemUseOnFieldCallback(u8 taskId) { if (sub_807D770() == TRUE) - gUnknown_03005D00(taskId); + gFieldItemUseCallback(taskId); } void sub_80A5D04(void) diff --git a/src/item_use.c b/src/item_use.c index 8bc83bdc6..633c4d817 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -36,7 +36,7 @@ #include "task.h" #include "vars.h" -extern void (*gUnknown_03005D00)(u8); +extern void (*gFieldItemUseCallback)(u8); extern void (*gFieldCallback)(void); extern void (*gUnknown_0300485C)(void); extern void (*gUnknown_03004AE4)(u8, u16, TaskFunc); @@ -106,11 +106,13 @@ void SetUpItemUseOnFieldCallback(u8 taskId) { if (gTasks[taskId].data[2] != 1) { - gFieldCallback = (void *)ExecuteItemUseFromBlackPalette; + gFieldCallback = ExecuteItemUseFromBlackPalette; ItemMenu_ConfirmNormalFade(taskId); } else - gUnknown_03005D00(taskId); + { + gFieldItemUseCallback(taskId); + } } void HandleDeniedItemUseMessage(u8 var1, u8 playerMenuStatus, const u8 *text) @@ -187,7 +189,7 @@ void ItemUseOutOfBattle_Bike(u8 taskId) { if (Overworld_IsBikeAllowedOnCurrentMap() == TRUE && IsBikingDisallowedByPlayer() == FALSE) { - gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Bike; + gFieldItemUseCallback = (void *)ItemUseOnFieldCB_Bike; SetUpItemUseOnFieldCallback(taskId); } else @@ -241,7 +243,7 @@ void ItemUseOutOfBattle_Rod(u8 taskId) { if (CanFish() == TRUE) { - gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Rod; + gFieldItemUseCallback = (void *)ItemUseOnFieldCB_Rod; SetUpItemUseOnFieldCallback(taskId); } else @@ -257,7 +259,7 @@ void ItemUseOnFieldCB_Rod(u8 taskId) void ItemUseOutOfBattle_Itemfinder(u8 var) { IncrementGameStat(0x27); - gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Itemfinder; + gFieldItemUseCallback = (void *)ItemUseOnFieldCB_Itemfinder; SetUpItemUseOnFieldCallback(var); } @@ -780,7 +782,7 @@ void sub_80C9C7C(u8 taskId) { if (IsPlayerFacingPlantedBerryTree() == TRUE) { - gUnknown_03005D00 = sub_80C9D00; + gFieldItemUseCallback = sub_80C9D00; gFieldCallback = ExecuteItemUseFromBlackPalette; gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch; @@ -805,7 +807,7 @@ void ItemUseOutOfBattle_WailmerPail(u8 taskId) { if (TryToWaterBerryTree() == TRUE) { - gUnknown_03005D00 = sub_80C9D74; + gFieldItemUseCallback = sub_80C9D74; SetUpItemUseOnFieldCallback(taskId); } else @@ -909,7 +911,7 @@ void sub_80C9FC0(u8 var) sub_80C9D98(var); } -void sub_80C9FDC(void) +static void PrepareItemUseMessage(void) { RemoveBagItem(gScriptItemId, 1); sub_80A3E0C(); @@ -922,7 +924,7 @@ void ItemUseOutOfBattle_Repel(u8 var) if (VarGet(VAR_REPEL_STEP_COUNT) == FALSE) { VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gScriptItemId)); - sub_80C9FDC(); + PrepareItemUseMessage(); DisplayItemMessageOnField(var, gStringVar4, CleanUpItemMenuMessage, 1); } else @@ -975,10 +977,10 @@ void task08_080A1C44(u8 taskId) DestroyTask(taskId); } -void sub_80CA18C(u8 taskId) +void EscapeRopeCallback(u8 taskId) { - sub_8053014(); - sub_80C9FDC(); + Overworld_ResetStateAfterDigEscRope(); + PrepareItemUseMessage(); gTasks[taskId].data[0] = 0; DisplayItemMessageOnField(taskId, gStringVar4, task08_080A1C44, 0); } @@ -995,7 +997,7 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId) { if (CanUseEscapeRopeOnCurrMap() == TRUE) { - gUnknown_03005D00 = sub_80CA18C; + gFieldItemUseCallback = EscapeRopeCallback; SetUpItemUseOnFieldCallback(taskId); } else @@ -1114,7 +1116,7 @@ void ItemUseInBattle_Escape(u8 taskId) if((gBattleTypeFlags & BATTLE_TYPE_TRAINER) == FALSE) { - sub_80C9FDC(); + PrepareItemUseMessage(); DisplayItemMessageOnField(taskId, gStringVar4, sub_80A7094, 1); } else diff --git a/src/new_game.c b/src/new_game.c index 3f9e9f5a1..6ab21c544 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -99,7 +99,7 @@ void sub_8052DE4(void) void WarpToTruck(void) { - warp1_set(25, 40, -1, -1, -1); // inside of truck + Overworld_SetWarpDestination(25, 40, -1, -1, -1); // inside of truck warp_in(); } diff --git a/src/overworld.c b/src/overworld.c index 9b41a262d..ac212747d 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -91,7 +91,7 @@ extern struct MapHeader * const * const gMapGroups[]; extern s32 gMaxFlashLevel; EWRAM_DATA struct WarpData gUnknown_020297F0 = {0}; -EWRAM_DATA struct WarpData gUnknown_020297F8 = {0}; +EWRAM_DATA struct WarpData gWarpDestination = {0}; // new warp position EWRAM_DATA struct WarpData gUnknown_02029800 = {0}; EWRAM_DATA struct WarpData gUnknown_02029808 = {0}; EWRAM_DATA struct UnkPlayerStruct gUnknown_02029810 = {0}; @@ -195,12 +195,12 @@ static void DoWhiteOut(void) ScriptContext2_RunNewScript(S_WhiteOut); gSaveBlock1.money /= 2; ScrSpecial_HealPlayerParty(); - sub_8053050(); - sub_8053570(); + Overworld_ResetStateAfterWhiteOut(); + Overworld_SetWarpDestToLastHealLoc(); warp_in(); } -void flag_var_implications_of_teleport_(void) +void Overworld_ResetStateAfterFly(void) { player_avatar_init_params_reset(); FlagClear(SYS_CYCLING_ROAD); @@ -221,7 +221,7 @@ void Overworld_ResetStateAfterTeleport(void) ScriptContext2_RunNewScript(gUnknown_0819FC9F); } -void sub_8053014(void) +void Overworld_ResetStateAfterDigEscRope(void) { player_avatar_init_params_reset(); FlagClear(SYS_CYCLING_ROAD); @@ -231,7 +231,7 @@ void sub_8053014(void) FlagClear(SYS_USE_FLASH); } -void sub_8053050(void) +void Overworld_ResetStateAfterWhiteOut(void) { player_avatar_init_params_reset(); FlagClear(SYS_CYCLING_ROAD); @@ -318,6 +318,7 @@ void Overworld_SaveMapObjCoords(u8 localId, s16 x, s16 y) void Overworld_SaveMapObjMovementType(u8 localId, u8 movementType) { s32 i; + for (i = 0; i < 64; i++) { struct MapObjectTemplate *mapObjectTemplate = &gSaveBlock1.mapObjectTemplates[i]; @@ -346,15 +347,15 @@ static struct MapData *get_mapdata_header(void) return NULL; } -static void warp_shift(void) +static void ApplyCurrentWarp(void) { gUnknown_020297F0 = gSaveBlock1.location; - gSaveBlock1.location = gUnknown_020297F8; + gSaveBlock1.location = gWarpDestination; gUnknown_02029800 = sDummyWarpData; gUnknown_02029808 = sDummyWarpData; } -static void warp_set(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) +static void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) { warp->mapGroup = mapGroup; warp->mapNum = mapNum; @@ -385,7 +386,7 @@ struct MapHeader *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 map struct MapHeader *const warp1_get_mapheader(void) { - return Overworld_GetMapHeaderByGroupAndId(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum); + return Overworld_GetMapHeaderByGroupAndId(gWarpDestination.mapGroup, gWarpDestination.mapNum); } static void set_current_map_header_from_sav1_save_old_name(void) @@ -422,34 +423,34 @@ void sub_80533CC(void) void warp_in(void) { - warp_shift(); + ApplyCurrentWarp(); set_current_map_header_from_sav1_save_old_name(); sub_80533CC(); } -void warp1_set(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) +void Overworld_SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) { - warp_set(&gUnknown_020297F8, mapGroup, mapNum, warpId, x, y); + SetWarpData(&gWarpDestination, mapGroup, mapNum, warpId, x, y); } void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId) { - warp1_set(mapGroup, mapNum, warpId, -1, -1); + Overworld_SetWarpDestination(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); + SetWarpData(&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); + SetWarpData(&gSaveBlock1.warp2, mapGroup, mapNum, warpId, x, y); } void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused) { - gUnknown_020297F8 = gSaveBlock1.warp2; + gWarpDestination = gSaveBlock1.warp2; } void sub_8053538(u8 a1) @@ -457,81 +458,82 @@ void sub_8053538(u8 a1) const struct HealLocation *warp = GetHealLocation(a1); if (warp) - warp1_set(warp->group, warp->map, -1, warp->x, warp->y); + Overworld_SetWarpDestination(warp->group, warp->map, -1, warp->x, warp->y); } -void sub_8053570(void) +void Overworld_SetWarpDestToLastHealLoc(void) { - gUnknown_020297F8 = gSaveBlock1.warp3; + gWarpDestination = gSaveBlock1.lastHealLocation; } -void sub_8053588(u8 a1) +void Overworld_SetHealLocationWarp(u8 healLocationId) { - const struct HealLocation *warp = GetHealLocation(a1); - if (warp) - warp_set(&gSaveBlock1.warp3, warp->group, warp->map, -1, warp->x, warp->y); + const struct HealLocation *healLocation = GetHealLocation(healLocationId); + + if (healLocation != NULL) + SetWarpData(&gSaveBlock1.lastHealLocation, healLocation->group, healLocation->map, -1, healLocation->x, healLocation->y); } void sub_80535C4(s16 a1, s16 a2) { u8 v4 = Overworld_GetMapTypeOfSaveblockLocation(); - u8 v5 = GetMapTypeByGroupAndId(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum); + u8 v5 = GetMapTypeByGroupAndId(gWarpDestination.mapGroup, gWarpDestination.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); + SetWarpData(&gSaveBlock1.warp4, mapGroup, mapNum, warpId, x, y); } void sub_8053678(void) { - gUnknown_020297F8 = gSaveBlock1.warp4; + gWarpDestination = gSaveBlock1.warp4; } void sub_8053690(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) { - warp_set(&gUnknown_02029800, mapGroup, mapNum, warpId, x, y); + SetWarpData(&gUnknown_02029800, mapGroup, mapNum, warpId, x, y); } -void warp1_set_to_warp2(void) +static void warp1_set_to_warp2(void) { - gUnknown_020297F8 = gUnknown_02029800; + gWarpDestination = gUnknown_02029800; } void sub_80536E4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y) { - warp_set(&gUnknown_02029808, mapGroup, mapNum, warpId, x, y); + SetWarpData(&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; + gWarpDestination = gUnknown_020297F0; } else { - warp1_set(gUnknown_02029808.mapGroup, gUnknown_02029808.mapNum, -1, x, y); + Overworld_SetWarpDestination(gUnknown_02029808.mapGroup, gUnknown_02029808.mapNum, -1, x, y); } } void sub_8053778(void) { - gUnknown_020297F8 = gSaveBlock1.warp1; + gWarpDestination = 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); + SetWarpData(&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); + SetWarpData(&gSaveBlock1.warp1, warp->group, warp->map, -1, warp->x, warp->y); } void gpu_sync_bg_hide() @@ -539,7 +541,7 @@ void gpu_sync_bg_hide() gSaveBlock1.warp1 = gSaveBlock1.warp2; } -struct MapConnection *sub_8053818(u8 dir) +struct MapConnection *GetMapConnection(u8 dir) { s32 i; s32 count = gMapHeader.connections->count; @@ -557,10 +559,11 @@ struct MapConnection *sub_8053818(u8 dir) bool8 sub_8053850(u8 dir, u16 x, u16 y) { - struct MapConnection *connection = sub_8053818(dir); + struct MapConnection *connection = GetMapConnection(dir); + if (connection != NULL) { - warp1_set(connection->mapGroup, connection->mapNum, -1, x, y); + Overworld_SetWarpDestination(connection->mapGroup, connection->mapNum, -1, x, y); } else { @@ -586,9 +589,9 @@ void sub_80538F0(u8 mapGroup, u8 mapNum) { s32 i; - warp1_set(mapGroup, mapNum, -1, -1, -1); + Overworld_SetWarpDestination(mapGroup, mapNum, -1, -1, -1); sub_8053F0C(); - warp_shift(); + ApplyCurrentWarp(); set_current_map_header_from_sav1_save_old_name(); sub_8053154(); ClearTempFieldEventData(); @@ -830,7 +833,7 @@ static u16 GetLocationMusic(struct WarpData *warp) return Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum)->music; } -u16 sav1_map_get_music(void) +u16 GetCurrLocationMusic(void) { u16 music; @@ -855,7 +858,7 @@ u16 sav1_map_get_music(void) u16 warp1_target_get_music(void) { - u16 music = GetLocationMusic(&gUnknown_020297F8); + u16 music = GetLocationMusic(&gWarpDestination); if (music != 0x7FFF) { return music; @@ -877,7 +880,7 @@ void call_map_music_set_to_zero(void) void sub_8053E90(void) { - u16 music = sav1_map_get_music(); + u16 music = GetCurrLocationMusic(); if (music != LEGENDARY_MUSIC) { @@ -929,8 +932,8 @@ void sub_8053F0C(void) void sub_8053F84(void) { u16 currentMusic = GetCurrentMapMusic(); - if (currentMusic != sav1_map_get_music()) - FadeOutAndPlayNewMapMusic(sav1_map_get_music(), 8); + if (currentMusic != GetCurrLocationMusic()) + FadeOutAndPlayNewMapMusic(GetCurrLocationMusic(), 8); } void Overworld_ChangeMusicTo(u16 newMusic) diff --git a/src/rom6.c b/src/rom6.c index 3a5071034..b91a9b2c0 100644 --- a/src/rom6.c +++ b/src/rom6.c @@ -169,7 +169,7 @@ int SetUpFieldMove_Dig(void) static void sub_810B5D8(void) { - sub_8053014(); + Overworld_ResetStateAfterDigEscRope(); FieldEffectStart(FLDEFF_USE_DIG); gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; } diff --git a/src/scrcmd.c b/src/scrcmd.c index 31a90158a..4f6e7e51b 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -670,12 +670,13 @@ bool8 ScrCmd_setmapfooter(struct ScriptContext *ctx) bool8 ScrCmd_warp(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - warp1_set(v1, v2, v3, v4, v5); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + u8 warpId = ScriptReadByte(ctx); + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + + Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y); sub_8080E88(); player_avatar_init_params_reset(); return TRUE; @@ -683,12 +684,13 @@ bool8 ScrCmd_warp(struct ScriptContext *ctx) bool8 ScrCmd_warpmuted(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - warp1_set(v1, v2, v3, v4, v5); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + u8 warpId = ScriptReadByte(ctx); + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + + Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y); sp13E_warp_to_last_warp(); player_avatar_init_params_reset(); return TRUE; @@ -696,12 +698,13 @@ bool8 ScrCmd_warpmuted(struct ScriptContext *ctx) bool8 ScrCmd_warpwalk(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - warp1_set(v1, v2, v3, v4, v5); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + u8 warpId = ScriptReadByte(ctx); + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + + Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y); sub_8080EF0(); player_avatar_init_params_reset(); return TRUE; @@ -709,17 +712,17 @@ bool8 ScrCmd_warpwalk(struct ScriptContext *ctx) bool8 ScrCmd_warphole(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); u16 x; u16 y; PlayerGetDestCoords(&x, &y); - if (v1 == 0xFF && v2 == 0xFF) + if (mapGroup == 0xFF && mapNum == 0xFF) sub_8053720(x - 7, y - 7); else - warp1_set(v1, v2, -1, x - 7, y - 7); + Overworld_SetWarpDestination(mapGroup, mapNum, -1, x - 7, y - 7); sp13F_fall_to_last_warp(); player_avatar_init_params_reset(); @@ -728,12 +731,13 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx) bool8 ScrCmd_warpteleport(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - warp1_set(v1, v2, v3, v4, v5); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + u8 warpId = ScriptReadByte(ctx); + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + + Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y); sub_8080F68(); player_avatar_init_params_reset(); return TRUE; @@ -741,65 +745,71 @@ bool8 ScrCmd_warpteleport(struct ScriptContext *ctx) bool8 ScrCmd_warp3(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - warp1_set(v1, v2, v3, v4, v5); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + u8 warpId = ScriptReadByte(ctx); + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + + Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y); return FALSE; } bool8 ScrCmd_warpplace(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - saved_warp2_set_2(0, v1, v2, v3, v4, v5); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + u8 warpId = ScriptReadByte(ctx); + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + + saved_warp2_set_2(0, mapGroup, mapNum, warpId, x, y); return FALSE; } bool8 ScrCmd_warp4(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - sub_8053690(v1, v2, v3, v4, v5); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + u8 warpId = ScriptReadByte(ctx); + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + + sub_8053690(mapGroup, mapNum, warpId, x, y); return FALSE; } bool8 ScrCmd_warp5(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - sub_80536E4(v1, v2, v3, v4, v5); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + u8 warpId = ScriptReadByte(ctx); + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + + sub_80536E4(mapGroup, mapNum, warpId, x, y); return FALSE; } bool8 ScrCmd_warp6(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u16 v4 = VarGet(ScriptReadHalfword(ctx)); - s8 v5 = VarGet(ScriptReadHalfword(ctx)); - sub_805363C(v1, v2, v3, v4, v5); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + u8 warpId = ScriptReadByte(ctx); + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + + sub_805363C(mapGroup, mapNum, warpId, x, y); return FALSE; } bool8 ScrCmd_getplayerxy(struct ScriptContext *ctx) { - u16 *ptr1 = GetVarPointer(ScriptReadHalfword(ctx)); - u16 *ptr2 = GetVarPointer(ScriptReadHalfword(ctx)); - *ptr1 = gSaveBlock1.pos.x; - *ptr2 = gSaveBlock1.pos.y; + u16 *pX = GetVarPointer(ScriptReadHalfword(ctx)); + u16 *pY = GetVarPointer(ScriptReadHalfword(ctx)); + + *pX = gSaveBlock1.pos.x; + *pY = gSaveBlock1.pos.y; return FALSE; } @@ -1748,8 +1758,8 @@ bool8 ScrCmd_checkanimation(struct ScriptContext *ctx) bool8 ScrCmd_sethealplace(struct ScriptContext *ctx) { - u16 v2 = VarGet(ScriptReadHalfword(ctx)); - sub_8053588(v2); + u16 healLocationId = VarGet(ScriptReadHalfword(ctx)); + Overworld_SetHealLocationWarp(healLocationId); return FALSE; } diff --git a/src/secret_base.c b/src/secret_base.c index b2cd1f094..f221d7f16 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -301,7 +301,7 @@ void sub_80BBBEC(u8 taskid) s8 idx; if (!gPaletteFade.active) { idx = 4 * (gUnknown_020387DC / 10); - warp1_set(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, gUnknown_083D1374[idx + 2], gUnknown_083D1374[idx + 3]); + Overworld_SetWarpDestination(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, gUnknown_083D1374[idx + 2], gUnknown_083D1374[idx + 3]); warp_in(); gFieldCallback = sub_80BBB90; SetMainCallback2(CB2_LoadMap); diff --git a/sym_common.txt b/sym_common.txt index d9da3ec3b..f374d053a 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -172,7 +172,7 @@ gUnknown_03005CF0: @ 3005CF0 @ item_menu .align 4 -gUnknown_03005D00: @ 3005D00 +gFieldItemUseCallback: @ 3005D00 .space 0x10 gBagPocketScrollStates: @ 3005D10 -- cgit v1.2.3 From 0c234d0929a6f7bb41277275f06abae1b3d7e823 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 24 Sep 2017 12:12:53 -0500 Subject: more renaming --- data/specials.inc | 2 +- include/global.h | 2 +- include/overworld.h | 24 ++--- src/battle_setup.c | 2 +- src/bike.c | 6 +- src/cable_club.c | 4 +- src/coins.c | 26 ++--- src/evolution_scene.c | 4 +- src/field_effect.c | 14 +-- src/field_fadetransition.c | 14 +-- src/field_map_obj.c | 22 ++-- src/field_player_avatar.c | 4 +- src/field_screen_effect.c | 2 +- src/field_specials.c | 2 +- src/hof_pc.c | 2 +- src/item_use.c | 2 +- src/overworld.c | 93 +++++++++-------- src/scrcmd.c | 250 +++++++++++++++++++++++++++++++++------------ src/sound.c | 2 - 19 files changed, 300 insertions(+), 177 deletions(-) diff --git a/data/specials.inc b/data/specials.inc index 3545d1dff..6ce9b5b1e 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -160,7 +160,7 @@ gSpecials:: def_special SetFlagInVar def_special CableCarWarp def_special sub_8123218 - def_special sub_8053E90 + def_special Overworld_PlaySpecialMapMusic def_special StartWallClock def_special ScrSpecial_ViewWallClock def_special ScrSpecial_ChooseStarter diff --git a/include/global.h b/include/global.h index 2d049a412..240f58ece 100644 --- a/include/global.h +++ b/include/global.h @@ -605,7 +605,7 @@ struct SaveBlock1 /* 0x02025734 */ /*0x14*/ struct WarpData warp2; /*0x1C*/ struct WarpData lastHealLocation; /*0x24*/ struct WarpData warp4; - /*0x2C*/ u16 battleMusic; + /*0x2C*/ u16 savedMusic; /*0x2E*/ u8 weather; /*0x2F*/ u8 filler_2F; /*0x30*/ u8 flashLevel; // flash level on current map, 0 being normal and 4 being the darkest diff --git a/include/overworld.h b/include/overworld.h index 1a7151529..7151f75ca 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -35,10 +35,10 @@ void ResetGameStats(void); void IncrementGameStat(u8 index); u32 GetGameStat(u8 index); void SetGameStat(u8, u32); -// sub_8053154 +// LoadMapObjTemplatesFromHeader // LoadSaveblockMapObjScripts -void Overworld_SaveMapObjCoords(u8, s16, s16); -void Overworld_SaveMapObjMovementType(u8, u8); +void Overworld_SetMapObjTemplateCoords(u8, s16, s16); +void Overworld_SetMapObjTemplateMovementType(u8, u8); // mapdata_load_assets_to_gpu_and_full_redraw // get_mapdata_header // ApplyCurrentWarp @@ -81,7 +81,7 @@ 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 Overworld_IsBikeAllowedOnCurrentMap(void); +bool32 Overworld_IsBikingAllowed(void); void SetDefaultFlashLevel(void); void Overworld_SetFlashLevel(s32 a1); u8 Overworld_GetFlashLevel(void); @@ -89,19 +89,19 @@ void sub_8053D14(u16); // sub_8053D30 // sub_8053D6C // GetLocationMusic -// GetCurrLocationMusic -// 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); +// GetCurrLocationDefaultMusic +// GetWarpDestinationMusic +// Overworld_ResetMapMusic +void Overworld_PlaySpecialMapMusic(void); +void Overworld_SetSavedMusic(u16); +void Overworld_ClearSavedMusic(void); void sub_8053F0C(void); -void sub_8053F84(void); +void Overworld_ChangeMusicToDefault(void); void Overworld_ChangeMusicTo(u16); // GetMapMusicFadeoutSpeed void sub_8053FF8(void); bool8 sub_8054034(void); -void sub_8054044(void); +void Overworld_FadeOutMapMusic(void); // PlayAmbientCry void UpdateAmbientCry(s16 *, u16 *); void ChooseAmbientCrySpecies(void); diff --git a/src/battle_setup.c b/src/battle_setup.c index 59e17e9eb..40949ed38 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -876,7 +876,7 @@ static void CB2_StartFirstBattle(void) static void CB2_EndFirstBattle(void) { - sav1_reset_battle_music_maybe(); + Overworld_ClearSavedMusic(); SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); } diff --git a/src/bike.c b/src/bike.c index 80cab0850..458230a95 100644 --- a/src/bike.c +++ b/src/bike.c @@ -937,13 +937,13 @@ void GetOnOffBike(u8 var) if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) { SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); - sav1_reset_battle_music_maybe(); - sub_8053E90(); + Overworld_ClearSavedMusic(); + Overworld_PlaySpecialMapMusic(); } else { SetPlayerAvatarTransitionFlags(var); - sav1_set_battle_music_maybe(BGM_CYCLING); + Overworld_SetSavedMusic(BGM_CYCLING); Overworld_ChangeMusicTo(BGM_CYCLING); } } diff --git a/src/cable_club.c b/src/cable_club.c index 7a85f2b6c..c61a1d01c 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -68,7 +68,7 @@ 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(void); +extern void Overworld_ResetMapMusic(void); extern void sub_810FEFC(void); extern void sub_8047CD8(void); extern void sub_805559C(void); @@ -708,7 +708,7 @@ static void sub_808382C(u8 taskId) static void sub_8083958(void) { - call_map_music_set_to_zero(); + Overworld_ResetMapMusic(); LoadPlayerParty(); SavePlayerBag(); sub_810FEFC(); diff --git a/src/coins.c b/src/coins.c index 3c6356612..91a4b508d 100644 --- a/src/coins.c +++ b/src/coins.c @@ -6,47 +6,47 @@ #define MAX_COINS 9999 -void UpdateCoinsWindow(s32 a, u8 b, u8 c) +void UpdateCoinsWindow(s32 coins, u8 x, u8 y) { - PrintCoins(a, 4, b + 2, c + 1); + PrintCoins(coins, 4, x + 2, y + 1); } -void ShowCoinsWindow(u32 a, u8 b, u8 c) +void ShowCoinsWindow(u32 coins, u8 x, u8 y) { - MenuDrawTextWindow(b, c, b + 9, c + 3); - UpdateCoinsWindow(a, b, c); + MenuDrawTextWindow(x, y, x + 9, y + 3); + UpdateCoinsWindow(coins, x, y); } -void HideCoinsWindow(u8 a, u8 b) +void HideCoinsWindow(u8 x, u8 y) { - MenuZeroFillWindowRect(a, b, a + 9, b + 3); + MenuZeroFillWindowRect(x, y, x + 9, y + 3); } -void PrintCoins(s32 a, u8 b, u8 c, u8 d) +void PrintCoins(s32 coins, u8 b, u8 x, u8 y) { u8 string[16]; u8 *ptr; u8 r1; u8 foo; - ConvertIntToDecimalString(string, a); + ConvertIntToDecimalString(string, coins); r1 = (b * 6 + 0x21 - 8 * (b + 2)); - c = c - r1 / 8; + x = x - r1 / 8; foo = r1 % 8; ptr = gStringVar1; if (foo) { - ptr[0] = 0xFC; + ptr[0] = EXT_CTRL_CODE_BEGIN; ptr[1] = 0x11; ptr[2] = 8 - (foo); ptr += 3; } - ptr[0] = 0xFC; + ptr[0] = EXT_CTRL_CODE_BEGIN; ptr[1] = 0x11; ptr[2] = (b - StringLength(string)) * 6; ptr += 3; StringCopy(ptr, string); - MenuPrint(gOtherText_Coins2, c, d); + MenuPrint(gOtherText_Coins2, x, y); } u16 GetCoins(void) diff --git a/src/evolution_scene.c b/src/evolution_scene.c index e312b081f..df474ad74 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -667,7 +667,7 @@ static void Task_EvolutionScene(u8 taskID) { u8 text[20]; - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE; gTasks[taskID].tLearnsFirstMove = FALSE; gTasks[taskID].tLearnMoveState = 0; @@ -691,7 +691,7 @@ static void Task_EvolutionScene(u8 taskID) if (!gPaletteFade.active) { if (!(gTasks[taskID].tBits & TASK_BIT_LEARN_MOVE)) - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); if (!gTasks[taskID].tEvoWasStopped) CreateShedinja(gTasks[taskID].tPreEvoSpecies, mon); DestroyTask(taskID); diff --git a/src/field_effect.c b/src/field_effect.c index ba71c40d7..a24f7c445 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1223,7 +1223,7 @@ void task00_8084310(u8 taskId) void mapldr_08084390(void) { - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); pal_fill_black(); CreateTask(c3_080843F8, 0); gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; @@ -1264,7 +1264,7 @@ extern void CameraObjectReset1(void); void sub_8086748(void) { - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); pal_fill_for_map_transition(); ScriptContext2_Enable(); FreezeMapObjects(); @@ -1533,7 +1533,7 @@ void sub_8086C40(void) void sub_8086C94(void) { - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); pal_fill_for_map_transition(); ScriptContext2_Enable(); CreateTask(sub_8086CBC, 0); @@ -1898,7 +1898,7 @@ extern u8 sub_80608A4(u8); void mapldr_080851BC(void) { - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); pal_fill_for_map_transition(); ScriptContext2_Enable(); gFieldCallback = NULL; @@ -2135,7 +2135,7 @@ void sub_8087A74(u8); void mapldr_080859D4(void) { - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); pal_fill_for_map_transition(); ScriptContext2_Enable(); FreezeMapObjects(); @@ -2279,7 +2279,7 @@ void sub_8087E1C(u8); void mapldr_08085D88(void) { - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); pal_fill_for_map_transition(); ScriptContext2_Enable(); FreezeMapObjects(); @@ -2880,7 +2880,7 @@ u8 FldEff_UseSurf(void) u8 taskId; taskId = CreateTask(sub_8088954, 0xff); gTasks[taskId].data[15] = gFieldEffectArguments[0]; - sav1_reset_battle_music_maybe(); + Overworld_ClearSavedMusic(); Overworld_ChangeMusicTo(0x016d); return FALSE; } diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index d95177821..82776d18c 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -89,7 +89,7 @@ void task0A_asap_script_env_2_enable_and_set_ctx_running(u8 taskID) void sub_8080990(void) { ScriptContext2_Enable(); - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); pal_fill_black(); CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10); } @@ -130,7 +130,7 @@ void task_mpl_807DD60(u8 taskId) void sub_8080A3C(void) { ScriptContext2_Enable(); - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); palette_bg_fill_black(); CreateTask(task_mpl_807DD60, 10); } @@ -165,7 +165,7 @@ void sub_8080A5C(u8 taskId) void sub_8080AC4(void) { ScriptContext2_Enable(); - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); palette_bg_fill_black(); CreateTask(sub_8080A5C, 10); } @@ -188,7 +188,7 @@ void sub_8080AE4(void) void mapldr_default(void) { - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); pal_fill_for_map_transition(); sub_8080AE4(); ScriptContext2_Enable(); @@ -196,7 +196,7 @@ void mapldr_default(void) void sub_8080B60(void) { - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); pal_fill_black(); sub_8080AE4(); ScriptContext2_Enable(); @@ -204,7 +204,7 @@ void sub_8080B60(void) void sub_8080B78(void) { - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); pal_fill_for_map_transition(); PlaySE(SE_TK_WARPOUT); CreateTask(task_map_chg_seq_0807E2CC, 10); @@ -354,7 +354,7 @@ void sub_8080E28(void) void sub_8080E44(void) { ScriptContext2_Enable(); - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); pal_fill_black(); CreateTask(task_mpl_807E3C8, 10); } diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 0e7cd7896..b6da956aa 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -2462,24 +2462,24 @@ extern void sub_8064970(struct Sprite *); extern void sub_8060470(s16 *, s16 *, s16, s16); extern void InitObjectPriorityByZCoord(); -u8 sub_805B410(u8 a, u8 b, s16 c, s16 d, u8 e, u8 f) +u8 sub_805B410(u8 graphicsId, u8 b, s16 x, s16 y, u8 elevation, u8 direction) { const struct MapObjectGraphicsInfo *gfxInfo; struct SpriteTemplate spriteTemplate; const struct SubspriteTable *subspriteTables; u8 spriteId; - gfxInfo = GetFieldObjectGraphicsInfo(a); - MakeObjectTemplateFromFieldObjectGraphicsInfo(a, sub_8064970, &spriteTemplate, &subspriteTables); + gfxInfo = GetFieldObjectGraphicsInfo(graphicsId); + MakeObjectTemplateFromFieldObjectGraphicsInfo(graphicsId, sub_8064970, &spriteTemplate, &subspriteTables); #ifdef NONMATCHING spriteTemplate.paletteTag = 0xFFFF; #else *(u16 *)&spriteTemplate.paletteTag = 0xFFFF; #endif - c += 7; - d += 7; - sub_8060470(&c, &d, 8, 16); - spriteId = CreateSpriteAtEnd(&spriteTemplate, c, d, 0); + x += 7; + y += 7; + sub_8060470(&x, &y, 8, 16); + spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0); if (spriteId != 64) { struct Sprite *sprite = &gSprites[spriteId]; @@ -2490,7 +2490,7 @@ u8 sub_805B410(u8 a, u8 b, s16 c, s16 d, u8 e, u8 f) sprite->oam.paletteNum = gfxInfo->paletteSlot; sprite->coordOffsetEnabled = TRUE; sprite->data0 = b; - sprite->data1 = e; + sprite->data1 = elevation; if (gfxInfo->paletteSlot == 10) npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); if (subspriteTables != NULL) @@ -2498,9 +2498,9 @@ u8 sub_805B410(u8 a, u8 b, s16 c, s16 d, u8 e, u8 f) SetSubspriteTables(sprite, subspriteTables); sprite->subspriteMode = 2; } - InitObjectPriorityByZCoord(sprite, e); - SetObjectSubpriorityByZCoord(e, sprite, 1); - StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(f)); + InitObjectPriorityByZCoord(sprite, elevation); + SetObjectSubpriorityByZCoord(elevation, sprite, 1); + StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(direction)); } return spriteId; } diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index c8099a73d..2aa534ebc 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -1365,8 +1365,8 @@ void sub_805A20C(u8 a) u8 taskId; ScriptContext2_Enable(); - sav1_reset_battle_music_maybe(); - sub_8053F84(); + Overworld_ClearSavedMusic(); + Overworld_ChangeMusicToDefault(); gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING; gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT; gPlayerAvatar.unk6 = 1; diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 1464a99b1..0c76d254d 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -327,7 +327,7 @@ static void task50_0807F0C8(u8); void sub_8081924(void) { - sub_8054044(); + Overworld_FadeOutMapMusic(); CreateTask(task50_0807F0C8, 80); } diff --git a/src/field_specials.c b/src/field_specials.c index 2c68e105a..36362d098 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -213,7 +213,7 @@ void UpdateCyclingRoadState(void) { if (VarGet(0x40a9) == 2 || VarGet(0x40a9) == 3) { VarSet(0x40a9, 0); - sav1_set_battle_music_maybe(SE_STOP); + Overworld_SetSavedMusic(SE_STOP); } } diff --git a/src/hof_pc.c b/src/hof_pc.c index aeeb7fe17..267ed4274 100644 --- a/src/hof_pc.c +++ b/src/hof_pc.c @@ -28,7 +28,7 @@ void ReturnFromHallOfFamePC(void) static void ReshowPCMenuAfterHallOfFamePC(void) { ScriptContext2_Enable(); - sub_8053E90(); + Overworld_PlaySpecialMapMusic(); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); ScrSpecial_CreatePCMenu(); ScriptMenu_DisplayPCStartupPrompt(); diff --git a/src/item_use.c b/src/item_use.c index 633c4d817..68da27fdb 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -187,7 +187,7 @@ void ItemUseOutOfBattle_Bike(u8 taskId) } else { - if (Overworld_IsBikeAllowedOnCurrentMap() == TRUE && IsBikingDisallowedByPlayer() == FALSE) + if (Overworld_IsBikingAllowed() == TRUE && IsBikingDisallowedByPlayer() == FALSE) { gFieldItemUseCallback = (void *)ItemUseOnFieldCB_Bike; SetUpItemUseOnFieldCallback(taskId); diff --git a/src/overworld.c b/src/overworld.c index ac212747d..d6f255409 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -283,9 +283,12 @@ void SetGameStat(u8 index, u32 value) gSaveBlock1.gameStats[index] = value; } -void sub_8053154(void) +void LoadMapObjTemplatesFromHeader(void) { + // Clear map object templates CpuFill32(0, gSaveBlock1.mapObjectTemplates, sizeof(gSaveBlock1.mapObjectTemplates)); + + // Copy map header events to save block CpuCopy32(gMapHeader.events->mapObjects, gSaveBlock1.mapObjectTemplates, gMapHeader.events->mapObjectCount * sizeof(struct MapObjectTemplate)); @@ -300,7 +303,7 @@ static void LoadSaveblockMapObjScripts(void) mapObjectTemplates[i].script = gMapHeader.events->mapObjects[i].script; } -void Overworld_SaveMapObjCoords(u8 localId, s16 x, s16 y) +void Overworld_SetMapObjTemplateCoords(u8 localId, s16 x, s16 y) { s32 i; for (i = 0; i < 64; i++) @@ -315,7 +318,7 @@ void Overworld_SaveMapObjCoords(u8 localId, s16 x, s16 y) } } -void Overworld_SaveMapObjMovementType(u8 localId, u8 movementType) +void Overworld_SetMapObjTemplateMovementType(u8 localId, u8 movementType) { s32 i; @@ -476,9 +479,9 @@ void Overworld_SetHealLocationWarp(u8 healLocationId) void sub_80535C4(s16 a1, s16 a2) { - u8 v4 = Overworld_GetMapTypeOfSaveblockLocation(); - u8 v5 = GetMapTypeByGroupAndId(gWarpDestination.mapGroup, gWarpDestination.mapNum); - if (is_map_type_1_2_3_5_or_6(v4) && is_map_type_1_2_3_5_or_6(v5) != TRUE) + u8 currMapType = Overworld_GetMapTypeOfSaveblockLocation(); + u8 destMapType = GetMapTypeByGroupAndId(gWarpDestination.mapGroup, gWarpDestination.mapNum); + if (is_map_type_1_2_3_5_or_6(currMapType) && is_map_type_1_2_3_5_or_6(destMapType) != TRUE) sub_805363C(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, a1 - 7, a2 - 6); } @@ -593,7 +596,7 @@ void sub_80538F0(u8 mapGroup, u8 mapNum) sub_8053F0C(); ApplyCurrentWarp(); set_current_map_header_from_sav1_save_old_name(); - sub_8053154(); + LoadMapObjTemplatesFromHeader(); ClearTempFieldEventData(); ResetCyclingRoadChallengeData(); prev_quest_postbuffer_cursor_backup_reset(); @@ -602,7 +605,7 @@ void sub_80538F0(u8 mapGroup, u8 mapNum) sub_80806E4(); ChooseAmbientCrySpecies(); SetDefaultFlashLevel(); - sav1_reset_battle_music_maybe(); + Overworld_ClearSavedMusic(); mapheader_run_script_with_tag_x3(); not_trainer_hill_battle_pyramid(); sub_8056D38(gMapHeader.mapData); @@ -626,7 +629,7 @@ void sub_8053994(u32 a1) bool8 v3; set_current_map_header_from_sav1_save_old_name(); - sub_8053154(); + LoadMapObjTemplatesFromHeader(); v2 = is_map_type_1_2_3_5_or_6(gMapHeader.mapType); v3 = Overworld_MapTypeIsIndoors(gMapHeader.mapType); ClearTempFieldEventData(); @@ -640,7 +643,7 @@ void sub_8053994(u32 a1) if (v2) FlagClear(SYS_USE_FLASH); SetDefaultFlashLevel(); - sav1_reset_battle_music_maybe(); + Overworld_ClearSavedMusic(); mapheader_run_script_with_tag_x3(); UpdateLocationHistoryForRoamer(); RoamerMoveToOtherLocationSet(); @@ -694,7 +697,7 @@ u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3) return 16; if (MetatileBehavior_IsSurfableWaterOrUnderwater(a2) == 1) return 8; - if (Overworld_IsBikeAllowedOnCurrentMap() != TRUE) + if (Overworld_IsBikingAllowed() != TRUE) return 1; if (playerStruct->player_field_0 == 2) return 2; @@ -732,7 +735,7 @@ 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) +bool32 Overworld_IsBikingAllowed(void) { // is player in cycling road entrance? if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE @@ -833,10 +836,11 @@ static u16 GetLocationMusic(struct WarpData *warp) return Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum)->music; } -u16 GetCurrLocationMusic(void) +u16 GetCurrLocationDefaultMusic(void) { u16 music; + // Play the desert music only when the sandstorm is active on Route 111. if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE111 && gSaveBlock1.location.mapNum == MAP_ID_ROUTE111 && GetSav1Weather() == 8) @@ -856,7 +860,7 @@ u16 GetCurrLocationMusic(void) } } -u16 warp1_target_get_music(void) +u16 GetWarpDestinationMusic(void) { u16 music = GetLocationMusic(&gWarpDestination); if (music != 0x7FFF) @@ -873,19 +877,19 @@ u16 warp1_target_get_music(void) } } -void call_map_music_set_to_zero(void) +void Overworld_ResetMapMusic(void) { ResetMapMusic(); } -void sub_8053E90(void) +void Overworld_PlaySpecialMapMusic(void) { - u16 music = GetCurrLocationMusic(); + u16 music = GetCurrLocationDefaultMusic(); if (music != LEGENDARY_MUSIC) { - if (gSaveBlock1.battleMusic) - music = gSaveBlock1.battleMusic; + if (gSaveBlock1.savedMusic) + music = gSaveBlock1.savedMusic; else if (Overworld_GetMapTypeOfSaveblockLocation() == MAP_TYPE_UNDERWATER) music = BGM_DEEPDEEP; else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) @@ -896,21 +900,21 @@ void sub_8053E90(void) PlayNewMapMusic(music); } -void sav1_set_battle_music_maybe(u16 songNum) +void Overworld_SetSavedMusic(u16 songNum) { - gSaveBlock1.battleMusic = songNum; + gSaveBlock1.savedMusic = songNum; } -void sav1_reset_battle_music_maybe(void) +void Overworld_ClearSavedMusic(void) { - gSaveBlock1.battleMusic = 0; + gSaveBlock1.savedMusic = 0; } void sub_8053F0C(void) { if (FlagGet(SPECIAL_FLAG_1) != TRUE) { - u16 newMusic = warp1_target_get_music(); + u16 newMusic = GetWarpDestinationMusic(); u16 currentMusic = GetCurrentMapMusic(); if (newMusic != LEGENDARY_MUSIC) { @@ -929,11 +933,11 @@ void sub_8053F0C(void) } } -void sub_8053F84(void) +void Overworld_ChangeMusicToDefault(void) { u16 currentMusic = GetCurrentMapMusic(); - if (currentMusic != GetCurrLocationMusic()) - FadeOutAndPlayNewMapMusic(GetCurrLocationMusic(), 8); + if (currentMusic != GetCurrLocationDefaultMusic()) + FadeOutAndPlayNewMapMusic(GetCurrLocationDefaultMusic(), 8); } void Overworld_ChangeMusicTo(u16 newMusic) @@ -954,7 +958,7 @@ u8 GetMapMusicFadeoutSpeed(void) void sub_8053FF8(void) { - u16 music = warp1_target_get_music(); + u16 music = GetWarpDestinationMusic(); if (FlagGet(SPECIAL_FLAG_1) != TRUE && music != GetCurrentMapMusic()) { u8 speed = GetMapMusicFadeoutSpeed(); @@ -967,7 +971,7 @@ bool8 sub_8054034(void) return IsNotWaitingForBGMStop(); } -void sub_8054044(void) +void Overworld_FadeOutMapMusic(void) { FadeOutMapMusic(4); } @@ -975,14 +979,16 @@ void sub_8054044(void) static void PlayAmbientCry(void) { s16 x, y; + s8 pan; + s8 volume; + 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); - } + if (sIsAmbientCryWaterMon == TRUE + && !MetatileBehavior_IsSurfableWaterOrUnderwater(MapGridGetMetatileBehaviorAt(x, y))) + return; + pan = (Random() % 88) + 212; + volume = (Random() % 30) + 50; + PlayCry2(sAmbientCrySpecies, pan, volume, 1); } void UpdateAmbientCry(s16 *state, u16 *delayCounter) @@ -1152,6 +1158,7 @@ void OverworldBasic(void) sub_8072EDC(); } +// This CB2 is used when starting void CB2_OverworldBasic(void) { OverworldBasic(); @@ -1179,7 +1186,7 @@ void sub_80543DC(u16 (*a1)(u32)) void sub_80543E8(void) { - if (gFieldCallback) + if (gFieldCallback != NULL) gFieldCallback(); else mapldr_default(); @@ -1980,27 +1987,27 @@ void sub_8055280(u16 a1) u16 sub_80552B0(u32 a1) { - if (gMain.heldKeys & 0x40) + if (gMain.heldKeys & DPAD_UP) { return 19; } - else if (gMain.heldKeys & 0x80) + else if (gMain.heldKeys & DPAD_DOWN) { return 18; } - else if (gMain.heldKeys & 0x20) + else if (gMain.heldKeys & DPAD_LEFT) { return 20; } - else if (gMain.heldKeys & 0x10) + else if (gMain.heldKeys & DPAD_RIGHT) { return 21; } - else if (gMain.newKeys & 8) + else if (gMain.newKeys & START_BUTTON) { return 24; } - else if (gMain.newKeys & 1) + else if (gMain.newKeys & A_BUTTON) { return 25; } diff --git a/src/scrcmd.c b/src/scrcmd.c index 4f6e7e51b..f45e57e02 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -110,6 +110,7 @@ bool8 ScrCmd_end(struct ScriptContext *ctx) bool8 ScrCmd_jumpasm(struct ScriptContext *ctx) { bool8 (*addr)(void) = (bool8 (*)(void))ScriptReadWord(ctx); + SetupNativeScript(ctx, addr); return TRUE; } @@ -117,6 +118,7 @@ bool8 ScrCmd_jumpasm(struct ScriptContext *ctx) bool8 ScrCmd_special(struct ScriptContext *ctx) { u16 index = ScriptReadHalfword(ctx); + gSpecials[index](); return FALSE; } @@ -124,6 +126,7 @@ bool8 ScrCmd_special(struct ScriptContext *ctx) bool8 ScrCmd_specialval(struct ScriptContext *ctx) { u16 *var = GetVarPointer(ScriptReadHalfword(ctx)); + *var = gSpecials[ScriptReadHalfword(ctx)](); return FALSE; } @@ -131,6 +134,7 @@ bool8 ScrCmd_specialval(struct ScriptContext *ctx) bool8 ScrCmd_callasm(struct ScriptContext *ctx) { NativeFunc func = (NativeFunc)ScriptReadWord(ctx); + func(); return FALSE; } @@ -144,6 +148,7 @@ bool8 ScrCmd_waitstate(struct ScriptContext *ctx) bool8 ScrCmd_jump(struct ScriptContext *ctx) { u8 *ptr = (u8 *)ScriptReadWord(ctx); + ScriptJump(ctx, ptr); return FALSE; } @@ -156,8 +161,8 @@ bool8 ScrCmd_return(struct ScriptContext *ctx) bool8 ScrCmd_call(struct ScriptContext *ctx) { - u8 *ptr = (u8 *)ScriptReadWord(ctx); + ScriptCall(ctx, ptr); return FALSE; } @@ -166,6 +171,7 @@ bool8 ScrCmd_jumpif(struct ScriptContext *ctx) { u8 condition = ScriptReadByte(ctx); u8 *ptr = (u8 *)ScriptReadWord(ctx); + if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) ScriptJump(ctx, ptr); return FALSE; @@ -175,6 +181,7 @@ bool8 ScrCmd_callif(struct ScriptContext *ctx) { u8 condition = ScriptReadByte(ctx); u8 *ptr = (u8 *)ScriptReadWord(ctx); + if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) ScriptCall(ctx, ptr); return FALSE; @@ -184,6 +191,7 @@ bool8 ScrCmd_setvaddress(struct ScriptContext *ctx) { u32 addr1 = (u32)ctx->scriptPtr - 1; u32 addr2 = ScriptReadWord(ctx); + gUnknown_0202E8B0 = addr2 - addr1; return FALSE; } @@ -191,6 +199,7 @@ bool8 ScrCmd_setvaddress(struct ScriptContext *ctx) bool8 ScrCmd_vjump(struct ScriptContext *ctx) { u32 addr = ScriptReadWord(ctx); + ScriptJump(ctx, (u8 *)(addr - gUnknown_0202E8B0)); return FALSE; } @@ -198,6 +207,7 @@ bool8 ScrCmd_vjump(struct ScriptContext *ctx) bool8 ScrCmd_vcall(struct ScriptContext *ctx) { u32 addr = ScriptReadWord(ctx); + ScriptCall(ctx, (u8 *)(addr - gUnknown_0202E8B0)); return FALSE; } @@ -206,6 +216,7 @@ bool8 ScrCmd_if5(struct ScriptContext *ctx) { u8 condition = ScriptReadByte(ctx); u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0); + if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) ScriptJump(ctx, ptr); return FALSE; @@ -215,6 +226,7 @@ bool8 ScrCmd_if6(struct ScriptContext *ctx) { u8 condition = ScriptReadByte(ctx); u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0); + if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) ScriptCall(ctx, ptr); return FALSE; @@ -224,6 +236,7 @@ bool8 ScrCmd_jumpstd(struct ScriptContext *ctx) { u8 index = ScriptReadByte(ctx); u8 **ptr = &gStdScripts[index]; + if (ptr < gStdScripts_End) ScriptJump(ctx, *ptr); return FALSE; @@ -233,6 +246,7 @@ bool8 ScrCmd_callstd(struct ScriptContext *ctx) { u8 index = ScriptReadByte(ctx); u8 **ptr = &gStdScripts[index]; + if (ptr < gStdScripts_End) ScriptCall(ctx, *ptr); return FALSE; @@ -242,6 +256,7 @@ bool8 ScrCmd_jumpstdif(struct ScriptContext *ctx) { u8 condition = ScriptReadByte(ctx); u8 index = ScriptReadByte(ctx); + if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) { u8 **ptr = &gStdScripts[index]; @@ -255,6 +270,7 @@ bool8 ScrCmd_callstdif(struct ScriptContext *ctx) { u8 condition = ScriptReadByte(ctx); u8 index = ScriptReadByte(ctx); + if (sScriptConditionTable[condition][ctx->comparisonResult] == 1) { u8 **ptr = &gStdScripts[index]; @@ -280,6 +296,7 @@ bool8 ScrCmd_die(struct ScriptContext *ctx) bool8 ScrCmd_setbyte(struct ScriptContext *ctx) { u8 value = ScriptReadByte(ctx); + SetMysteryEventScriptStatus(value); return FALSE; } @@ -287,6 +304,7 @@ bool8 ScrCmd_setbyte(struct ScriptContext *ctx) bool8 ScrCmd_loadptr(struct ScriptContext *ctx) { u8 index = ScriptReadByte(ctx); + ctx->data[index] = ScriptReadWord(ctx); return FALSE; } @@ -294,6 +312,7 @@ bool8 ScrCmd_loadptr(struct ScriptContext *ctx) bool8 ScrCmd_loadbytefrompointer(struct ScriptContext *ctx) { u8 index = ScriptReadByte(ctx); + ctx->data[index] = *(u8 *)ScriptReadWord(ctx); return FALSE; } @@ -301,6 +320,7 @@ bool8 ScrCmd_loadbytefrompointer(struct ScriptContext *ctx) bool8 ScrCmd_writebytetooffset(struct ScriptContext *ctx) { u8 value = ScriptReadByte(ctx); + *(u8 *)ScriptReadWord(ctx) = value; return FALSE; } @@ -308,6 +328,7 @@ bool8 ScrCmd_writebytetooffset(struct ScriptContext *ctx) bool8 ScrCmd_setbufferbyte(struct ScriptContext *ctx) { u8 index = ScriptReadByte(ctx); + ctx->data[index] = ScriptReadByte(ctx); return FALSE; } @@ -315,6 +336,7 @@ bool8 ScrCmd_setbufferbyte(struct ScriptContext *ctx) bool8 ScrCmd_setptrbyte(struct ScriptContext *ctx) { u8 index = ScriptReadByte(ctx); + *(u8 *)ScriptReadWord(ctx) = ctx->data[index]; return FALSE; } @@ -323,6 +345,7 @@ bool8 ScrCmd_copybuffers(struct ScriptContext *ctx) { u8 destIndex = ScriptReadByte(ctx); u8 srcIndex = ScriptReadByte(ctx); + ctx->data[destIndex] = ctx->data[srcIndex]; return FALSE; } @@ -359,10 +382,8 @@ u8 compare_012(u16 a1, u16 a2) { if (a1 < a2) return 0; - if (a1 == a2) return 1; - return 2; } @@ -370,6 +391,7 @@ bool8 ScrCmd_comparebuffers(struct ScriptContext *ctx) { u8 value1 = ctx->data[ScriptReadByte(ctx)]; u8 value2 = ctx->data[ScriptReadByte(ctx)]; + ctx->comparisonResult = compare_012(value1, value2); return FALSE; } @@ -378,6 +400,7 @@ bool8 ScrCmd_comparebuffertobyte(struct ScriptContext *ctx) { u8 value1 = ctx->data[ScriptReadByte(ctx)]; u8 value2 = ScriptReadByte(ctx); + ctx->comparisonResult = compare_012(value1, value2); return FALSE; } @@ -386,6 +409,7 @@ bool8 ScrCmd_comparebuffertoptrbyte(struct ScriptContext *ctx) { u8 value1 = ctx->data[ScriptReadByte(ctx)]; u8 value2 = *(u8 *)ScriptReadWord(ctx); + ctx->comparisonResult = compare_012(value1, value2); return FALSE; } @@ -394,6 +418,7 @@ bool8 ScrCmd_compareptrbytetobuffer(struct ScriptContext *ctx) { u8 value1 = *(u8 *)ScriptReadWord(ctx); u8 value2 = ctx->data[ScriptReadByte(ctx)]; + ctx->comparisonResult = compare_012(value1, value2); return FALSE; } @@ -402,6 +427,7 @@ bool8 ScrCmd_compareptrbytetobyte(struct ScriptContext *ctx) { u8 value1 = *(u8 *)ScriptReadWord(ctx); u8 value2 = ScriptReadByte(ctx); + ctx->comparisonResult = compare_012(value1, value2); return FALSE; } @@ -410,6 +436,7 @@ bool8 ScrCmd_compareptrbytes(struct ScriptContext *ctx) { u8 value1 = *(u8 *)ScriptReadWord(ctx); u8 value2 = *(u8 *)ScriptReadWord(ctx); + ctx->comparisonResult = compare_012(value1, value2); return FALSE; } @@ -418,6 +445,7 @@ bool8 ScrCmd_compare(struct ScriptContext *ctx) { u16 value1 = *GetVarPointer(ScriptReadHalfword(ctx)); u16 value2 = ScriptReadHalfword(ctx); + ctx->comparisonResult = compare_012(value1, value2); return FALSE; } @@ -426,6 +454,7 @@ bool8 ScrCmd_comparevars(struct ScriptContext *ctx) { u16 *ptr1 = GetVarPointer(ScriptReadHalfword(ctx)); u16 *ptr2 = GetVarPointer(ScriptReadHalfword(ctx)); + ctx->comparisonResult = compare_012(*ptr1, *ptr2); return FALSE; } @@ -447,6 +476,7 @@ bool8 ScrCmd_subvar(struct ScriptContext *ctx) bool8 ScrCmd_random(struct ScriptContext *ctx) { u16 max = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = Random() % max; return FALSE; } @@ -455,6 +485,7 @@ bool8 ScrCmd_additem(struct ScriptContext *ctx) { u16 itemId = VarGet(ScriptReadHalfword(ctx)); u32 quantity = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = AddBagItem(itemId, (u8)quantity); return FALSE; } @@ -463,6 +494,7 @@ bool8 ScrCmd_removeitem(struct ScriptContext *ctx) { u16 itemId = VarGet(ScriptReadHalfword(ctx)); u32 quantity = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = RemoveBagItem(itemId, (u8)quantity); return FALSE; } @@ -471,6 +503,7 @@ bool8 ScrCmd_checkitemspace(struct ScriptContext *ctx) { u16 itemId = VarGet(ScriptReadHalfword(ctx)); u32 quantity = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = CheckBagHasSpace(itemId, (u8)quantity); return FALSE; } @@ -479,6 +512,7 @@ bool8 ScrCmd_checkitem(struct ScriptContext *ctx) { u16 itemId = VarGet(ScriptReadHalfword(ctx)); u32 quantity = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = CheckBagHasItem(itemId, (u8)quantity); return FALSE; } @@ -486,6 +520,7 @@ bool8 ScrCmd_checkitem(struct ScriptContext *ctx) bool8 ScrCmd_checkitemtype(struct ScriptContext *ctx) { u16 itemId = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = GetPocketByItemId(itemId); return FALSE; } @@ -494,6 +529,7 @@ bool8 ScrCmd_addpcitem(struct ScriptContext *ctx) { u16 itemId = VarGet(ScriptReadHalfword(ctx)); u16 quantity = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = AddPCItem(itemId, quantity); return FALSE; } @@ -502,6 +538,7 @@ bool8 ScrCmd_checkpcitem(struct ScriptContext *ctx) { u16 itemId = VarGet(ScriptReadHalfword(ctx)); u16 quantity = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = CheckPCHasItem(itemId, quantity); return FALSE; } @@ -509,6 +546,7 @@ bool8 ScrCmd_checkpcitem(struct ScriptContext *ctx) bool8 ScrCmd_adddecor(struct ScriptContext *ctx) { u32 decorId = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = IsThereStorageSpaceForDecoration(decorId); return FALSE; } @@ -516,6 +554,7 @@ bool8 ScrCmd_adddecor(struct ScriptContext *ctx) bool8 ScrCmd_removedecor(struct ScriptContext *ctx) { u32 decorId = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = sub_81340A8(decorId); return FALSE; } @@ -523,6 +562,7 @@ bool8 ScrCmd_removedecor(struct ScriptContext *ctx) bool8 ScrCmd_checkdecor(struct ScriptContext *ctx) { u32 decorId = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = sub_8134074(decorId); return FALSE; } @@ -530,6 +570,7 @@ bool8 ScrCmd_checkdecor(struct ScriptContext *ctx) bool8 ScrCmd_testdecor(struct ScriptContext *ctx) { u32 decorId = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = sub_8133FE4(decorId); return FALSE; } @@ -568,6 +609,7 @@ bool8 ScrCmd_lighten(struct ScriptContext *ctx) bool8 ScrCmd_darken(struct ScriptContext *ctx) { u16 flashLevel = VarGet(ScriptReadHalfword(ctx)); + Overworld_SetFlashLevel(flashLevel); return FALSE; } @@ -591,6 +633,7 @@ bool8 ScrCmd_fadescreendelay(struct ScriptContext *ctx) { u8 duration = ScriptReadByte(ctx); u8 delay = ScriptReadByte(ctx); + fade_screen(duration, delay); SetupNativeScript(ctx, IsPaletteNotActive); return TRUE; @@ -617,6 +660,7 @@ bool8 ScrCmd_compareflags(struct ScriptContext *ctx) { u8 hour = VarGet(ScriptReadHalfword(ctx)); u8 minute = VarGet(ScriptReadHalfword(ctx)); + RtcInitLocalTimeOffset(hour, minute); return FALSE; } @@ -638,8 +682,9 @@ bool8 ScrCmd_resetvars(struct ScriptContext *ctx) bool8 ScrCmd_setweather(struct ScriptContext *ctx) { - u16 value = VarGet(ScriptReadHalfword(ctx)); - SetSav1Weather(value); + u16 weather = VarGet(ScriptReadHalfword(ctx)); + + SetSav1Weather(weather); return FALSE; } @@ -664,6 +709,7 @@ bool8 ScrCmd_tileeffect(struct ScriptContext *ctx) bool8 ScrCmd_setmapfooter(struct ScriptContext *ctx) { u16 value = VarGet(ScriptReadHalfword(ctx)); + sub_8053D14(value); return FALSE; } @@ -718,12 +764,10 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx) u16 y; PlayerGetDestCoords(&x, &y); - if (mapGroup == 0xFF && mapNum == 0xFF) sub_8053720(x - 7, y - 7); else Overworld_SetWarpDestination(mapGroup, mapNum, -1, x - 7, y - 7); - sp13F_fall_to_last_warp(); player_avatar_init_params_reset(); return TRUE; @@ -860,21 +904,22 @@ bool8 ScrCmd_playmusic(struct ScriptContext *ctx) { u16 songId = ScriptReadHalfword(ctx); bool8 val = ScriptReadByte(ctx); + if (val == TRUE) - sav1_set_battle_music_maybe(songId); + Overworld_SetSavedMusic(songId); PlayNewMapMusic(songId); return FALSE; } bool8 ScrCmd_playmusicbattle(struct ScriptContext *ctx) { - sav1_set_battle_music_maybe(ScriptReadHalfword(ctx)); + Overworld_SetSavedMusic(ScriptReadHalfword(ctx)); return FALSE; } bool8 ScrCmd_fadedefault(struct ScriptContext *ctx) { - sub_8053F84(); + Overworld_ChangeMusicToDefault(); return FALSE; } @@ -887,6 +932,7 @@ bool8 ScrCmd_fademusic(struct ScriptContext *ctx) bool8 ScrCmd_fadeout(struct ScriptContext *ctx) { u8 speed = ScriptReadByte(ctx); + if (speed != 0) FadeOutBGMTemporarily(4 * speed); else @@ -898,6 +944,7 @@ bool8 ScrCmd_fadeout(struct ScriptContext *ctx) bool8 ScrCmd_fadein(struct ScriptContext *ctx) { u8 speed = ScriptReadByte(ctx); + if (speed != 0) FadeInBGM(4 * speed); else @@ -963,6 +1010,7 @@ bool8 ScrCmd_waitmovexy(struct ScriptContext *ctx) bool8 ScrCmd_disappear(struct ScriptContext *ctx) { u16 objectId = VarGet(ScriptReadHalfword(ctx)); + RemoveFieldObjectByLocalIdAndMap(objectId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); return FALSE; } @@ -972,6 +1020,7 @@ bool8 ScrCmd_disappearxy(struct ScriptContext *ctx) u16 objectId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); + RemoveFieldObjectByLocalIdAndMap(objectId, mapNum, mapGroup); return FALSE; } @@ -979,6 +1028,7 @@ bool8 ScrCmd_disappearxy(struct ScriptContext *ctx) bool8 ScrCmd_reappear(struct ScriptContext *ctx) { u16 objectId = VarGet(ScriptReadHalfword(ctx)); + show_sprite(objectId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); return FALSE; } @@ -988,69 +1038,77 @@ bool8 ScrCmd_reappearxy(struct ScriptContext *ctx) u16 objectId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); + show_sprite(objectId, mapNum, mapGroup); return FALSE; } bool8 ScrCmd_movesprite(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u16 v2 = VarGet(ScriptReadHalfword(ctx)); - u32 v3 = VarGet(ScriptReadHalfword(ctx)); - sub_805C0F8(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, v2, v3); + u16 localId = VarGet(ScriptReadHalfword(ctx)); + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + + sub_805C0F8(localId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, x, y); return FALSE; } bool8 ScrCmd_movespriteperm(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u16 v2 = VarGet(ScriptReadHalfword(ctx)); - u32 v3 = VarGet(ScriptReadHalfword(ctx)); - Overworld_SaveMapObjCoords(v1, v2, v3); + u16 localId = VarGet(ScriptReadHalfword(ctx)); + u16 x = VarGet(ScriptReadHalfword(ctx)); + u16 y = VarGet(ScriptReadHalfword(ctx)); + + Overworld_SetMapObjTemplateCoords(localId, x, y); return FALSE; } bool8 ScrCmd_moveoffscreen(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - sub_805C78C(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + u16 localId = VarGet(ScriptReadHalfword(ctx)); + + sub_805C78C(localId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); return FALSE; } bool8 ScrCmd_spritevisible(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - npc_by_local_id_and_map_set_field_1_bit_x20(v1, v3, v2, 0); + u16 localId = VarGet(ScriptReadHalfword(ctx)); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + + npc_by_local_id_and_map_set_field_1_bit_x20(localId, mapNum, mapGroup, 0); return FALSE; } bool8 ScrCmd_spriteinvisible(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - npc_by_local_id_and_map_set_field_1_bit_x20(v1, v3, v2, 1); + u16 localId = VarGet(ScriptReadHalfword(ctx)); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + + npc_by_local_id_and_map_set_field_1_bit_x20(localId, mapNum, mapGroup, 1); return FALSE; } bool8 ScrCmd_spritelevelup(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - u8 v4 = ScriptReadByte(ctx); - sub_805BCF0(v1, v3, v2, v4 + 83); + u16 localId = VarGet(ScriptReadHalfword(ctx)); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + u8 priority = ScriptReadByte(ctx); + + sub_805BCF0(localId, mapNum, mapGroup, priority + 83); return FALSE; } bool8 ScrCmd_restorespritelevel(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - sub_805BD48(v1, v3, v2); + u16 localId = VarGet(ScriptReadHalfword(ctx)); + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + + sub_805BD48(localId, mapNum, mapGroup); return FALSE; } @@ -1068,35 +1126,39 @@ bool8 ScrCmd_spriteface(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 direction = ScriptReadByte(ctx); + FieldObjectTurnByLocalIdAndMap(localId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, direction); return FALSE; } bool8 ScrCmd_spritebehave(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = ScriptReadByte(ctx); - Overworld_SaveMapObjMovementType(v1, v2); + u16 localId = VarGet(ScriptReadHalfword(ctx)); + u8 movementType = ScriptReadByte(ctx); + + Overworld_SetMapObjTemplateMovementType(localId, movementType); return FALSE; } bool8 ScrCmd_createvsprite(struct ScriptContext *ctx) { - u8 v1 = ScriptReadByte(ctx); + u8 graphicsId = ScriptReadByte(ctx); u8 v2 = ScriptReadByte(ctx); - u16 v3 = VarGet(ScriptReadHalfword(ctx)); - u32 v4 = VarGet(ScriptReadHalfword(ctx)); - u8 v5 = ScriptReadByte(ctx); - u8 v6 = ScriptReadByte(ctx); - sub_805B410(v1, v2, v3, v4, v5, v6); + u16 x = VarGet(ScriptReadHalfword(ctx)); + u32 y = VarGet(ScriptReadHalfword(ctx)); + u8 elevation = ScriptReadByte(ctx); + u8 direction = ScriptReadByte(ctx); + + sub_805B410(graphicsId, v2, x, y, elevation, direction); return FALSE; } bool8 ScrCmd_vspriteface(struct ScriptContext *ctx) { u8 v1 = ScriptReadByte(ctx); - u8 v2 = ScriptReadByte(ctx); - sub_8064990(v1, v2); + u8 direction = ScriptReadByte(ctx); + + sub_8064990(v1, direction); return FALSE; } @@ -1132,7 +1194,6 @@ bool8 ScrCmd_lock(struct ScriptContext *ctx) ScriptFreezeMapObjects(); SetupNativeScript(ctx, sub_8064CFC); } - return TRUE; } } @@ -1166,7 +1227,8 @@ bool8 ScrCmd_release(struct ScriptContext *ctx) bool8 ScrCmd_message(struct ScriptContext *ctx) { u8 *msg = (u8 *)ScriptReadWord(ctx); - if (!msg) + + if (msg == NULL) msg = (u8 *)ctx->data[0]; ShowFieldMessage(msg); return FALSE; @@ -1175,7 +1237,8 @@ bool8 ScrCmd_message(struct ScriptContext *ctx) bool8 ScrCmd_message2(struct ScriptContext *ctx) { u8 *msg = (u8 *)ScriptReadWord(ctx); - if (!msg) + + if (msg == NULL) msg = (u8 *)ctx->data[0]; ShowFieldAutoScrollMessage(msg); return FALSE; @@ -1193,7 +1256,7 @@ bool8 ScrCmd_closebutton(struct ScriptContext *ctx) return FALSE; } -bool8 WaitForAorBPress(void) +static bool8 WaitForAorBPress(void) { if (gMain.newKeys & A_BUTTON) return TRUE; @@ -1212,6 +1275,7 @@ bool8 ScrCmd_yesnobox(struct ScriptContext *ctx) { u8 left = ScriptReadByte(ctx); u8 top = ScriptReadByte(ctx); + if (ScriptMenu_YesNo(left, top) == TRUE) { ScriptContext1_Stop(); @@ -1229,6 +1293,7 @@ bool8 ScrCmd_multichoice(struct ScriptContext *ctx) u8 top = ScriptReadByte(ctx); u8 multichoiceId = ScriptReadByte(ctx); u8 ignoreBPress = ScriptReadByte(ctx); + if (ScriptMenu_Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE) { ScriptContext1_Stop(); @@ -1247,6 +1312,7 @@ bool8 ScrCmd_multichoicedef(struct ScriptContext *ctx) u8 multichoiceId = ScriptReadByte(ctx); u8 defaultChoice = ScriptReadByte(ctx); u8 ignoreBPress = ScriptReadByte(ctx); + if (ScriptMenu_MultichoiceWithDefault(left, top, multichoiceId, ignoreBPress, defaultChoice) == TRUE) { ScriptContext1_Stop(); @@ -1264,6 +1330,7 @@ bool8 ScrCmd_showbox(struct ScriptContext *ctx) u8 top = ScriptReadByte(ctx); u8 right = ScriptReadByte(ctx); u8 bottom = ScriptReadByte(ctx); + MenuDrawTextWindow(left, top, right, bottom); return FALSE; } @@ -1275,6 +1342,7 @@ bool8 ScrCmd_multichoicerow(struct ScriptContext *ctx) u8 multichoiceId = ScriptReadByte(ctx); u8 numColumns = ScriptReadByte(ctx); u8 ignoreBPress = ScriptReadByte(ctx); + if (ScriptMenu_MultichoiceGrid(left, top, multichoiceId, ignoreBPress, numColumns) == TRUE) { ScriptContext1_Stop(); @@ -1292,6 +1360,7 @@ bool8 ScrCmd_hidebox(struct ScriptContext *ctx) u8 top = ScriptReadByte(ctx); u8 right = ScriptReadByte(ctx); u8 bottom = ScriptReadByte(ctx); + MenuZeroFillWindowRect(left, top, right, bottom); return FALSE; } @@ -1303,6 +1372,7 @@ bool8 ScrCmd_clearbox(struct ScriptContext *ctx) u8 top = ScriptReadByte(ctx); u8 multichoiceId = ScriptReadByte(ctx); u8 ignoreBPress = ScriptReadByte(ctx); + if (Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE) { ScriptContext1_Stop(); @@ -1319,6 +1389,7 @@ bool8 ScrCmd_showpokepic(struct ScriptContext *ctx) u16 species = VarGet(ScriptReadHalfword(ctx)); u8 x = ScriptReadByte(ctx); u8 y = ScriptReadByte(ctx); + ScriptMenu_ShowPokemonPic(species, x, y); return FALSE; } @@ -1336,6 +1407,7 @@ bool8 ScrCmd_hidepokepic(struct ScriptContext *ctx) bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx) { u8 v1 = ScriptReadByte(ctx); + if (v1) sub_8106630(v1); ShowContestWinner(); @@ -1346,6 +1418,7 @@ bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx) bool8 ScrCmd_braillemsg(struct ScriptContext *ctx) { u8 *ptr = (u8 *)ScriptReadWord(ctx); + u8 v2 = ptr[0]; u8 v3 = ptr[1]; u8 v4 = ptr[2]; @@ -1361,6 +1434,7 @@ bool8 ScrCmd_braillemsg(struct ScriptContext *ctx) bool8 ScrCmd_vtext(struct ScriptContext *ctx) { u32 v1 = ScriptReadWord(ctx); + ShowFieldMessage((u8 *)(v1 - gUnknown_0202E8B0)); return FALSE; } @@ -1369,6 +1443,7 @@ bool8 ScrCmd_bufferpoke(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 species = VarGet(ScriptReadHalfword(ctx)); + StringCopy(sScriptStringVars[stringVarIndex], gSpeciesNames[species]); return FALSE; } @@ -1376,6 +1451,7 @@ bool8 ScrCmd_bufferpoke(struct ScriptContext *ctx) bool8 ScrCmd_bufferfirstpoke(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); + u8 *dest = sScriptStringVars[stringVarIndex]; u8 partyIndex = GetLeadMonIndex(); u32 species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL); @@ -1387,6 +1463,7 @@ bool8 ScrCmd_bufferpartypoke(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); + GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, sScriptStringVars[stringVarIndex]); StringGetEnd10(sScriptStringVars[stringVarIndex]); return FALSE; @@ -1396,6 +1473,7 @@ bool8 ScrCmd_bufferitem(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 itemId = VarGet(ScriptReadHalfword(ctx)); + CopyItemName(itemId, sScriptStringVars[stringVarIndex]); return FALSE; } @@ -1404,6 +1482,7 @@ bool8 ScrCmd_bufferdecor(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 decorId = VarGet(ScriptReadHalfword(ctx)); + StringCopy(sScriptStringVars[stringVarIndex], gDecorations[decorId].name); return FALSE; } @@ -1412,6 +1491,7 @@ bool8 ScrCmd_bufferattack(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 moveId = VarGet(ScriptReadHalfword(ctx)); + StringCopy(sScriptStringVars[stringVarIndex], gMoveNames[moveId]); return FALSE; } @@ -1421,6 +1501,7 @@ bool8 ScrCmd_buffernum(struct ScriptContext *ctx) u8 stringVarIndex = ScriptReadByte(ctx); u16 v1 = VarGet(ScriptReadHalfword(ctx)); u8 v2 = sub_80BF0B8(v1); + ConvertIntToDecimalStringN(sScriptStringVars[stringVarIndex], v1, 0, v2); return FALSE; } @@ -1429,6 +1510,7 @@ bool8 ScrCmd_bufferstd(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 index = VarGet(ScriptReadHalfword(ctx)); + StringCopy(sScriptStringVars[stringVarIndex], gUnknown_083CE048[index]); return FALSE; } @@ -1437,6 +1519,7 @@ bool8 ScrCmd_buffertext(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u8 *text = (u8 *)ScriptReadWord(ctx); + StringCopy(sScriptStringVars[stringVarIndex], text); return FALSE; } @@ -1444,6 +1527,7 @@ bool8 ScrCmd_buffertext(struct ScriptContext *ctx) bool8 ScrCmd_vloadptr(struct ScriptContext *ctx) { u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0); + StringExpandPlaceholders(gStringVar4, ptr); return FALSE; } @@ -1452,6 +1536,7 @@ bool8 ScrCmd_vbuffer(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u32 addr = ScriptReadWord(ctx); + u8 *src = (u8 *)(addr - gUnknown_0202E8B0); u8 *dest = sScriptStringVars[stringVarIndex]; StringCopy(dest, src); @@ -1466,6 +1551,7 @@ bool8 ScrCmd_givepokemon(struct ScriptContext *ctx) u32 unkParam1 = ScriptReadWord(ctx); u32 unkParam2 = ScriptReadWord(ctx); u8 unkParam3 = ScriptReadByte(ctx); + gScriptResult = ScriptGiveMon(species, level, item, unkParam1, unkParam2, unkParam3); return FALSE; } @@ -1473,6 +1559,7 @@ bool8 ScrCmd_givepokemon(struct ScriptContext *ctx) bool8 ScrCmd_giveegg(struct ScriptContext *ctx) { u16 species = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = ScriptGiveEgg(species); return FALSE; } @@ -1482,6 +1569,7 @@ bool8 ScrCmd_setpokemove(struct ScriptContext *ctx) u8 partyIndex = ScriptReadByte(ctx); u8 slot = ScriptReadByte(ctx); u16 move = ScriptReadHalfword(ctx); + ScriptSetMonMoveSlot(partyIndex, move, slot); return FALSE; } @@ -1490,6 +1578,7 @@ bool8 ScrCmd_checkattack(struct ScriptContext *ctx) { u8 i; u16 moveId = ScriptReadHalfword(ctx); + gScriptResult = 6; for (i = 0; i < 6; i++) { @@ -1511,6 +1600,7 @@ bool8 ScrCmd_givemoney(struct ScriptContext *ctx) { u32 amount = ScriptReadWord(ctx); u8 ignore = ScriptReadByte(ctx); + if (!ignore) AddMoney(&gSaveBlock1.money, amount); return FALSE; @@ -1520,6 +1610,7 @@ bool8 ScrCmd_paymoney(struct ScriptContext *ctx) { u32 amount = ScriptReadWord(ctx); u8 ignore = ScriptReadByte(ctx); + if (!ignore) RemoveMoney(&gSaveBlock1.money, amount); return FALSE; @@ -1529,6 +1620,7 @@ bool8 ScrCmd_checkmoney(struct ScriptContext *ctx) { u32 amount = ScriptReadWord(ctx); u8 ignore = ScriptReadByte(ctx); + if (!ignore) gScriptResult = IsEnoughMoney(gSaveBlock1.money, amount); return FALSE; @@ -1539,6 +1631,7 @@ bool8 ScrCmd_showmoney(struct ScriptContext *ctx) u8 x = ScriptReadByte(ctx); u8 y = ScriptReadByte(ctx); u8 ignore = ScriptReadByte(ctx); + if (!ignore) OpenMoneyWindow(gSaveBlock1.money, x, y); return FALSE; @@ -1548,41 +1641,46 @@ bool8 ScrCmd_hidemoney(struct ScriptContext *ctx) { u8 x = ScriptReadByte(ctx); u8 y = ScriptReadByte(ctx); + CloseMoneyWindow(x, y); return FALSE; } bool8 ScrCmd_updatemoney(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) - UpdateMoneyWindow(gSaveBlock1.money, v2, v3); + UpdateMoneyWindow(gSaveBlock1.money, x, y); return FALSE; } bool8 ScrCmd_showcoins(struct ScriptContext *ctx) { - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - ShowCoinsWindow(gSaveBlock1.coins, v2, v3); + u8 x = ScriptReadByte(ctx); + u8 y = ScriptReadByte(ctx); + + ShowCoinsWindow(gSaveBlock1.coins, x, y); return FALSE; } bool8 ScrCmd_hidecoins(struct ScriptContext *ctx) { - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - HideCoinsWindow(v2, v3); + u8 x = ScriptReadByte(ctx); + u8 y = ScriptReadByte(ctx); + + HideCoinsWindow(x, y); return FALSE; } bool8 ScrCmd_updatecoins(struct ScriptContext *ctx) { - u8 v2 = ScriptReadByte(ctx); - u8 v3 = ScriptReadByte(ctx); - UpdateCoinsWindow(gSaveBlock1.coins, v2, v3); + u8 x = ScriptReadByte(ctx); + u8 y = ScriptReadByte(ctx); + + UpdateCoinsWindow(gSaveBlock1.coins, x, y); return FALSE; } @@ -1613,6 +1711,7 @@ bool8 ScrCmd_endtrainerbattle2(struct ScriptContext *ctx) bool8 ScrCmd_checktrainerflag(struct ScriptContext *ctx) { u16 index = VarGet(ScriptReadHalfword(ctx)); + ctx->comparisonResult = HasTrainerAlreadyBeenFought(index); return FALSE; } @@ -1620,6 +1719,7 @@ bool8 ScrCmd_checktrainerflag(struct ScriptContext *ctx) bool8 ScrCmd_cleartrainerflag(struct ScriptContext *ctx) { u16 index = VarGet(ScriptReadHalfword(ctx)); + trainer_flag_set(index); return FALSE; } @@ -1627,6 +1727,7 @@ bool8 ScrCmd_cleartrainerflag(struct ScriptContext *ctx) bool8 ScrCmd_settrainerflag(struct ScriptContext *ctx) { u16 index = VarGet(ScriptReadHalfword(ctx)); + trainer_flag_clear(index); return FALSE; } @@ -1636,6 +1737,7 @@ bool8 ScrCmd_setwildbattle(struct ScriptContext *ctx) u16 species = ScriptReadHalfword(ctx); u8 level = ScriptReadByte(ctx); u16 item = ScriptReadHalfword(ctx); + CreateScriptedWildMon(species, level, item); return FALSE; } @@ -1650,6 +1752,7 @@ bool8 ScrCmd_dowildbattle(struct ScriptContext *ctx) bool8 ScrCmd_pokemart(struct ScriptContext *ctx) { void *ptr = (void *)ScriptReadWord(ctx); + CreatePokemartMenu(ptr); ScriptContext1_Stop(); return TRUE; @@ -1658,6 +1761,7 @@ bool8 ScrCmd_pokemart(struct ScriptContext *ctx) bool8 ScrCmd_pokemartdecor(struct ScriptContext *ctx) { void *ptr = (void *)ScriptReadWord(ctx); + CreateDecorationShop1Menu(ptr); ScriptContext1_Stop(); return TRUE; @@ -1666,6 +1770,7 @@ bool8 ScrCmd_pokemartdecor(struct ScriptContext *ctx) bool8 ScrCmd_pokemartbp(struct ScriptContext *ctx) { void *ptr = (void *)ScriptReadWord(ctx); + CreateDecorationShop2Menu(ptr); ScriptContext1_Stop(); return TRUE; @@ -1674,6 +1779,7 @@ bool8 ScrCmd_pokemartbp(struct ScriptContext *ctx) bool8 ScrCmd_pokecasino(struct ScriptContext *ctx) { u8 v2 = VarGet(ScriptReadHalfword(ctx)); + PlaySlotMachine(v2, c2_exit_to_overworld_1_continue_scripts_restart_music); ScriptContext1_Stop(); return TRUE; @@ -1684,6 +1790,7 @@ bool8 ScrCmd_event_8a(struct ScriptContext *ctx) u8 treeId = ScriptReadByte(ctx); u8 berry = ScriptReadByte(ctx); u8 growthStage = ScriptReadByte(ctx); + if (berry == 0) PlantBerryTree(treeId, 0, growthStage, FALSE); else @@ -1694,6 +1801,7 @@ bool8 ScrCmd_event_8a(struct ScriptContext *ctx) bool8 ScrCmd_event_96(struct ScriptContext *ctx) { u16 value = VarGet(ScriptReadHalfword(ctx)); + gScriptResult = GetPriceReduction(value); return FALSE; } @@ -1729,6 +1837,7 @@ bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx) bool8 ScrCmd_doanimation(struct ScriptContext *ctx) { u16 effectId = VarGet(ScriptReadHalfword(ctx)); + sFieldEffectScriptId = effectId; FieldEffectStart(sFieldEffectScriptId); return FALSE; @@ -1737,6 +1846,7 @@ bool8 ScrCmd_doanimation(struct ScriptContext *ctx) bool8 ScrCmd_setanimation(struct ScriptContext *ctx) { u8 argNum = ScriptReadByte(ctx); + gFieldEffectArguments[argNum] = (s16)VarGet(ScriptReadHalfword(ctx)); return FALSE; } @@ -1759,6 +1869,7 @@ bool8 ScrCmd_checkanimation(struct ScriptContext *ctx) bool8 ScrCmd_sethealplace(struct ScriptContext *ctx) { u16 healLocationId = VarGet(ScriptReadHalfword(ctx)); + Overworld_SetHealLocationWarp(healLocationId); return FALSE; } @@ -1773,6 +1884,7 @@ bool8 ScrCmd_pokecry(struct ScriptContext *ctx) { u16 species = VarGet(ScriptReadHalfword(ctx)); u16 mode = VarGet(ScriptReadHalfword(ctx)); + PlayCry5(species, mode); return FALSE; } @@ -1789,6 +1901,7 @@ bool8 ScrCmd_setmaptile(struct ScriptContext *ctx) u16 y = VarGet(ScriptReadHalfword(ctx)); u16 tileId = VarGet(ScriptReadHalfword(ctx)); u16 v8 = VarGet(ScriptReadHalfword(ctx)); + x += 7; y += 7; if (!v8) @@ -1802,6 +1915,7 @@ bool8 ScrCmd_setdooropened(struct ScriptContext *ctx) { u16 x = VarGet(ScriptReadHalfword(ctx)); u16 y = VarGet(ScriptReadHalfword(ctx)); + x += 7; y += 7; PlaySE(GetDoorSoundEffect(x, y)); @@ -1813,6 +1927,7 @@ bool8 ScrCmd_setdoorclosed(struct ScriptContext *ctx) { u16 x = VarGet(ScriptReadHalfword(ctx)); u16 y = VarGet(ScriptReadHalfword(ctx)); + x += 7; y += 7; FieldAnimateDoorClose(x, y); @@ -1837,6 +1952,7 @@ bool8 ScrCmd_setdooropened2(struct ScriptContext *ctx) { u16 x = VarGet(ScriptReadHalfword(ctx)); u16 y = VarGet(ScriptReadHalfword(ctx)); + x += 7; y += 7; FieldSetDoorOpened(x, y); @@ -1847,6 +1963,7 @@ bool8 ScrCmd_setdoorclosed2(struct ScriptContext *ctx) { u16 x = VarGet(ScriptReadHalfword(ctx)); u16 y = VarGet(ScriptReadHalfword(ctx)); + x += 7; y += 7; FieldSetDoorClosed(x, y); @@ -1859,6 +1976,7 @@ bool8 ScrCmd_event_b1(struct ScriptContext *ctx) u16 v5 = VarGet(ScriptReadHalfword(ctx)); u16 v7 = VarGet(ScriptReadHalfword(ctx)); u16 v9 = VarGet(ScriptReadHalfword(ctx)); + ScriptAddElevatorMenuItem(v3, v5, v7, v9); return FALSE; } @@ -1880,21 +1998,21 @@ bool8 ScrCmd_checkcoins(struct ScriptContext *ctx) bool8 ScrCmd_givecoins(struct ScriptContext *ctx) { u16 coins = VarGet(ScriptReadHalfword(ctx)); + if (GiveCoins(coins) == TRUE) gScriptResult = 0; else gScriptResult = 1; - return FALSE; } bool8 ScrCmd_removecoins(struct ScriptContext *ctx) { u16 coins = VarGet(ScriptReadHalfword(ctx)); + if (TakeCoins(coins) == TRUE) gScriptResult = 0; else gScriptResult = 1; - return FALSE; } diff --git a/src/sound.c b/src/sound.c index 91f5e06a3..a6a61c0b5 100644 --- a/src/sound.c +++ b/src/sound.c @@ -81,8 +81,6 @@ void MapMusicMain(void) PlayBGM(sCurrentMapMusic); break; case 2: - case 3: - case 4: break; case 5: if (IsBGMStopped()) -- cgit v1.2.3 From ae5ec7f5b05218ba21c53ef632590a5243a7f647 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 24 Sep 2017 14:17:14 -0500 Subject: Replace script commands: snop -> nop, snop1 -> nop1, jump -> goto --- asm/macros/event.inc | 6 +- data/event_scripts.s | 118 ++++++++++----------- data/field_move_scripts.inc | 20 ++-- data/scripts/berry_tree.inc | 8 +- data/scripts/cable_club.inc | 16 +-- data/scripts/contest_hall.inc | 18 ++-- data/scripts/day_care.inc | 12 +-- data/scripts/gabby_and_ty.inc | 14 +-- data/scripts/maps/BattleTower_BattleRoom.inc | 2 +- data/scripts/maps/BattleTower_Corridor.inc | 2 +- data/scripts/maps/BattleTower_Lobby.inc | 8 +- data/scripts/maps/BattleTower_Outside.inc | 4 +- data/scripts/maps/DewfordTown.inc | 6 +- data/scripts/maps/DewfordTown_Gym.inc | 10 +- data/scripts/maps/DewfordTown_Hall.inc | 4 +- data/scripts/maps/EverGrandeCity_ChampionsRoom.inc | 8 +- data/scripts/maps/EverGrandeCity_DrakesRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_GlaciasRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_PhoebesRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_SidneysRoom.inc | 2 +- data/scripts/maps/FallarborTown_House2.inc | 12 +-- .../maps/FallarborTown_PokemonCenter_1F.inc | 4 +- data/scripts/maps/FortreeCity_Gym.inc | 6 +- data/scripts/maps/IslandCave.inc | 4 +- data/scripts/maps/LavaridgeTown.inc | 4 +- data/scripts/maps/LavaridgeTown_Gym_1F.inc | 6 +- data/scripts/maps/LilycoveCity.inc | 16 +-- data/scripts/maps/LilycoveCity_ContestLobby.inc | 20 ++-- .../scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc | 2 +- .../maps/LilycoveCity_DepartmentStoreElevator.inc | 10 +- .../maps/LilycoveCity_DepartmentStoreRooftop.inc | 22 ++-- .../maps/LilycoveCity_DepartmentStore_1F.inc | 6 +- data/scripts/maps/LilycoveCity_Harbor.inc | 6 +- .../maps/LilycoveCity_LilycoveMuseum_2F.inc | 18 ++-- data/scripts/maps/LittlerootTown.inc | 16 +-- .../maps/LittlerootTown_BrendansHouse_1F.inc | 6 +- data/scripts/maps/LittlerootTown_MaysHouse_1F.inc | 6 +- .../maps/LittlerootTown_ProfessorBirchsLab.inc | 4 +- data/scripts/maps/MauvilleCity.inc | 8 +- data/scripts/maps/MauvilleCity_BikeShop.inc | 26 ++--- data/scripts/maps/MauvilleCity_GameCorner.inc | 86 +++++++-------- data/scripts/maps/MauvilleCity_Gym.inc | 18 ++-- data/scripts/maps/MauvilleCity_House2.inc | 2 +- .../scripts/maps/MauvilleCity_PokemonCenter_1F.inc | 2 +- data/scripts/maps/MossdeepCity_Gym.inc | 34 +++--- data/scripts/maps/MtChimney.inc | 4 +- data/scripts/maps/MtPyre_Summit.inc | 12 +-- data/scripts/maps/OldaleTown.inc | 18 ++-- data/scripts/maps/PacifidlogTown_House2.inc | 2 +- data/scripts/maps/PetalburgCity.inc | 8 +- data/scripts/maps/PetalburgCity_Gym.inc | 14 +-- data/scripts/maps/PetalburgCity_WallysHouse.inc | 2 +- data/scripts/maps/PetalburgWoods.inc | 8 +- data/scripts/maps/Route103.inc | 20 ++-- data/scripts/maps/Route104.inc | 2 +- data/scripts/maps/Route104_MrBrineysHouse.inc | 8 +- data/scripts/maps/Route109.inc | 12 +-- data/scripts/maps/Route109_SeashoreHouse.inc | 4 +- data/scripts/maps/Route110.inc | 32 +++--- data/scripts/maps/Route110_TrickHousePuzzle1.inc | 4 +- data/scripts/maps/Route110_TrickHousePuzzle2.inc | 4 +- data/scripts/maps/Route110_TrickHousePuzzle3.inc | 20 ++-- data/scripts/maps/Route110_TrickHousePuzzle4.inc | 4 +- data/scripts/maps/Route110_TrickHousePuzzle5.inc | 74 ++++++------- data/scripts/maps/Route110_TrickHousePuzzle6.inc | 4 +- data/scripts/maps/Route110_TrickHousePuzzle7.inc | 4 +- data/scripts/maps/Route110_TrickHousePuzzle8.inc | 4 +- data/scripts/maps/Route111.inc | 8 +- .../maps/Route111_WinstrateFamilysHouse.inc | 12 +-- data/scripts/maps/Route113_GlassWorkshop.inc | 34 +++--- data/scripts/maps/Route116.inc | 8 +- data/scripts/maps/Route118.inc | 6 +- data/scripts/maps/Route119.inc | 20 ++-- data/scripts/maps/Route119_WeatherInstitute_2F.inc | 4 +- data/scripts/maps/Route120.inc | 18 ++-- data/scripts/maps/Route121_SafariZoneEntrance.inc | 12 +-- data/scripts/maps/Route123_BerryMastersHouse.inc | 12 +-- .../maps/Route124_DivingTreasureHuntersHouse.inc | 50 ++++----- data/scripts/maps/RustboroCity.inc | 28 ++--- data/scripts/maps/RustboroCity_Gym.inc | 6 +- data/scripts/maps/RustboroCity_PokemonSchool.inc | 12 +-- data/scripts/maps/SSTidalCorridor.inc | 2 +- data/scripts/maps/SafariZone_Southeast.inc | 4 +- .../scripts/maps/ShoalCave_LowTideEntranceRoom.inc | 2 +- data/scripts/maps/ShoalCave_LowTideInnerRoom.inc | 12 +-- data/scripts/maps/SlateportCity_Harbor.inc | 20 ++-- .../maps/SlateportCity_OceanicMuseum_1F.inc | 8 +- data/scripts/maps/SlateportCity_PokemonFanClub.inc | 4 +- data/scripts/maps/SootopolisCity_Gym_1F.inc | 6 +- data/scripts/maps/SouthernIsland_Interior.inc | 2 +- data/scripts/maps/Underwater_SealedChamber.inc | 2 +- data/scripts/maps/VictoryRoad_1F.inc | 6 +- data/scripts/mauville_man.inc | 18 ++-- data/scripts/mystery_event_club.inc | 8 +- data/scripts/players_house.inc | 10 +- data/scripts/pokeblocks.inc | 42 ++++---- data/scripts/safari_zone.inc | 6 +- data/scripts/tv.inc | 10 +- 98 files changed, 632 insertions(+), 632 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 9fddd9194..31103747b 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1,10 +1,10 @@ @ Does nothing. - .macro snop + .macro nop .byte 0x00 .endm @ Does nothing. - .macro snop1 + .macro nop1 .byte 0x01 .endm @@ -25,7 +25,7 @@ .endm @ Jumps to destination and continues script execution from there. - .macro jump destination + .macro goto destination .byte 0x05 .4byte \destination .endm diff --git a/data/event_scripts.s b/data/event_scripts.s index 0a8390a8f..0fc33c9ba 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -393,7 +393,7 @@ gUnknown_0815F36C:: @ 815F36C waittext waitbutton playsfx 5 - jump EventScript_15F384 + goto EventScript_15F384 end EventScript_15F384: @@ -401,12 +401,12 @@ EventScript_15F384: waittext checkflag 268 jumpeq EventScript_15F3A0 - jump EventScript_15F3E2 + goto EventScript_15F3E2 end gUnknown_0815F399:: @ 815F399 lockall - jump EventScript_15F384 + goto EventScript_15F384 end EventScript_15F3A0: @@ -454,7 +454,7 @@ gUnknown_0815F43A:: @ 815F43A waittext waitbutton playsfx 5 - jump EventScript_15F452 + goto EventScript_15F452 end EventScript_15F452: @@ -471,7 +471,7 @@ EventScript_15F452: gUnknown_0815F49A:: @ 815F49A lockall - jump EventScript_15F452 + goto EventScript_15F452 end EventScript_15F4A1: @@ -510,7 +510,7 @@ EventScript_15F503: EventScript_15F511: message UnknownString_81A3AA2 waittext - jump EventScript_15F452 + goto EventScript_15F452 end EventScript_15F51D: @@ -928,7 +928,7 @@ gUnknown_0819F80B:: @ 819F80B special PlayTrainerEncounterMusic special ScrSpecial_EndTrainerApproach waitstate - jump EventScript_19F8F2 + goto EventScript_19F8F2 gUnknown_0819F818:: @ 819F818 lock @@ -940,7 +940,7 @@ gUnknown_0819F818:: @ 819F818 jumpif 5, EventScript_19F83F special PlayTrainerEncounterMusic special sub_8082524 - jump EventScript_19F8F2 + goto EventScript_19F8F2 EventScript_19F83F: endtrainerbattle @@ -957,7 +957,7 @@ gUnknown_0819F840:: @ 819F840 jumpif 5, EventScript_19F870 special PlayTrainerEncounterMusic special sub_8082524 - jump EventScript_19F8F2 + goto EventScript_19F8F2 EventScript_19F870: special ScrSpecial_ShowTrainerNonBattlingSpeech @@ -1322,7 +1322,7 @@ EverGrandeCity_HallOfFame_EventScript_19FC70:: @ 819FC70 S_WhiteOut:: @ 819FC74 call EverGrandeCity_HallOfFame_EventScript_19FD09 call EventScript_19FC84 - jump gUnknown_0819FC9F + goto gUnknown_0819FC9F end EventScript_19FC84: @@ -1452,7 +1452,7 @@ do_heal_party:: @ 819FD7C special ScrSpecial_HealPlayerParty checkflag 273 jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_19FDCE - jump OldaleTown_PokemonCenter_1F_EventScript_19FDB0 + goto OldaleTown_PokemonCenter_1F_EventScript_19FDB0 end OldaleTown_PokemonCenter_1F_EventScript_19FDB0:: @ 819FDB0 @@ -1658,7 +1658,7 @@ UnusedMixRecordsScript: @ 819FFD5 jumpeq UnusedMixRecordsScript_Yes compare RESULT, 0 jumpeq UnusedMixRecordsScript_Done - jump UnusedMixRecordsScript_Done + goto UnusedMixRecordsScript_Done UnusedMixRecordsScript_Yes: @ 819FFFA special sub_80B929C waitstate @@ -1677,7 +1677,7 @@ gUnknown_081A0009:: @ 81A0009 special DoPCTurnOnEffect playsfx 4 msgbox UnknownString_81A09EC, 4 - jump EventScript_1A0023 + goto EventScript_1A0023 end EventScript_1A0023: @@ -1685,7 +1685,7 @@ EventScript_1A0023: waittext special ScrSpecial_CreatePCMenu waitstate - jump EventScript_1A0033 + goto EventScript_1A0033 end EventScript_1A0033: @@ -1702,7 +1702,7 @@ EventScript_1A0070: msgbox UnknownString_81A0A54, 4 special PlayerPC waitstate - jump EventScript_1A0023 + goto EventScript_1A0023 end EventScript_1A0085: @@ -1714,7 +1714,7 @@ EventScript_1A0085: msgbox UnknownString_81A0A35, 4 special ShowPokemonStorageSystem waitstate - jump EventScript_1A0023 + goto EventScript_1A0023 end EventScript_1A00AC: @@ -1738,7 +1738,7 @@ EventScript_1A00CB: playsfx 2 special AccessHallOfFamePC waitstate - jump EventScript_1A0033 + goto EventScript_1A0033 end FallarborTown_EventScript_1A00E1:: @ 81A00E1 @@ -2303,20 +2303,20 @@ CaveOfOrigin_B2F_EventScript_1A04AF:: @ 81A04AF CaveOfOrigin_B3F_EventScript_1A04AF:: @ 81A04AF lockall setvar 0x4001, 1 - jump CaveOfOrigin_1F_EventScript_1A04D3 + goto CaveOfOrigin_1F_EventScript_1A04D3 end CaveOfOrigin_B2F_EventScript_1A04BB:: @ 81A04BB CaveOfOrigin_B3F_EventScript_1A04BB:: @ 81A04BB lockall setvar 0x4002, 1 - jump CaveOfOrigin_B2F_EventScript_1A04D3 + goto CaveOfOrigin_B2F_EventScript_1A04D3 end @ 81A04C7 lockall setvar 0x4003, 1 - jump CaveOfOrigin_B2F_EventScript_1A04D3 + goto CaveOfOrigin_B2F_EventScript_1A04D3 end CaveOfOrigin_1F_EventScript_1A04D3:: @ 81A04D3 @@ -2376,49 +2376,49 @@ Route120_EventScript_1A0539:: @ 81A0539 lock faceplayer setvar 0x8004, 1 - jump Route120_EventScript_1A0594 + goto Route120_EventScript_1A0594 end Route120_EventScript_1A0546:: @ 81A0546 lock faceplayer setvar 0x8004, 2 - jump Route120_EventScript_1A0594 + goto Route120_EventScript_1A0594 end Route120_EventScript_1A0553:: @ 81A0553 lock faceplayer setvar 0x8004, 3 - jump Route120_EventScript_1A0594 + goto Route120_EventScript_1A0594 end Route120_EventScript_1A0560:: @ 81A0560 lock faceplayer setvar 0x8004, 4 - jump Route120_EventScript_1A0594 + goto Route120_EventScript_1A0594 end Route120_EventScript_1A056D:: @ 81A056D lock faceplayer setvar 0x8004, 5 - jump Route120_EventScript_1A0594 + goto Route120_EventScript_1A0594 end Route119_EventScript_1A057A:: @ 81A057A lock faceplayer setvar 0x8004, 6 - jump Route119_EventScript_1A0594 + goto Route119_EventScript_1A0594 end Route119_EventScript_1A0587:: @ 81A0587 lock faceplayer setvar 0x8004, 7 - jump Route119_EventScript_1A0594 + goto Route119_EventScript_1A0594 end Route119_EventScript_1A0594:: @ 81A0594 @@ -3628,14 +3628,14 @@ EventScript_1A2CB0: closebutton doanimation 11 waitstate - jump EventScript_1A2CFA + goto EventScript_1A2CFA end gUnknown_081A2CE6:: @ 81A2CE6 lockall doanimation 11 waitstate - jump EventScript_1A2CFA + goto EventScript_1A2CFA end EventScript_1A2CF1: @@ -3644,7 +3644,7 @@ EventScript_1A2CF1: EventScript_1A2CFA: msgbox UnknownString_8198F6E, 4 - jump EventScript_1A2DB8 + goto EventScript_1A2DB8 end EventScript_1A2D08: @@ -3659,14 +3659,14 @@ EventScript_1A2D08: closebutton doanimation 26 waitstate - jump EventScript_1A2D52 + goto EventScript_1A2D52 end gUnknown_081A2D3E:: @ 81A2D3E lockall doanimation 26 waitstate - jump EventScript_1A2D52 + goto EventScript_1A2D52 end EventScript_1A2D49: @@ -3675,7 +3675,7 @@ EventScript_1A2D49: EventScript_1A2D52: msgbox UnknownString_81A19C4, 4 - jump EventScript_1A2DB8 + goto EventScript_1A2DB8 end EventScript_1A2D60: @@ -3690,14 +3690,14 @@ EventScript_1A2D60: closebutton doanimation 27 waitstate - jump EventScript_1A2DAA + goto EventScript_1A2DAA end gUnknown_081A2D96:: @ 81A2D96 lockall doanimation 27 waitstate - jump EventScript_1A2DAA + goto EventScript_1A2DAA end EventScript_1A2DA1: @@ -3706,7 +3706,7 @@ EventScript_1A2DA1: EventScript_1A2DAA: msgbox UnknownString_81A1AA9, 4 - jump EventScript_1A2DB8 + goto EventScript_1A2DB8 end EventScript_1A2DB8: @@ -3858,7 +3858,7 @@ SecretBase_RedCave1_EventScript_1A2F68:: @ 81A2F68 gUnknown_081A2F7B:: @ 81A2F7B setvar 0x8005, 0 - jump EventScript_1A2F86 + goto EventScript_1A2F86 end EventScript_1A2F86: @@ -3867,7 +3867,7 @@ EventScript_1A2F86: gUnknown_081A2F8A:: @ 81A2F8A setvar 0x8004, 0 - jump EventScript_1A2F95 + goto EventScript_1A2F95 end EventScript_1A2F95: @@ -3879,7 +3879,7 @@ EventScript_1A2F95: jumpeq EventScript_1A2F95 disappear 0x8006 setflag 0x8005 - jump EventScript_1A2F95 + goto EventScript_1A2F95 end EventScript_1A2FBF: @@ -3949,7 +3949,7 @@ SecretBase_RedCave1_EventScript_1A3032:: @ 81A3032 jumpeq SecretBase_RedCave1_EventScript_1A308F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1B83, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A3086:: @ 81A3086 @@ -3984,7 +3984,7 @@ SecretBase_RedCave1_EventScript_1A30AE:: @ 81A30AE jumpeq SecretBase_RedCave1_EventScript_1A310B hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1F04, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A3102:: @ 81A3102 @@ -4019,7 +4019,7 @@ SecretBase_RedCave1_EventScript_1A312A:: @ 81A312A jumpeq SecretBase_RedCave1_EventScript_1A3187 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2220, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A317E:: @ 81A317E @@ -4054,7 +4054,7 @@ SecretBase_RedCave1_EventScript_1A31A6:: @ 81A31A6 jumpeq SecretBase_RedCave1_EventScript_1A3203 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A256F, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A31FA:: @ 81A31FA @@ -4089,7 +4089,7 @@ SecretBase_RedCave1_EventScript_1A3222:: @ 81A3222 jumpeq SecretBase_RedCave1_EventScript_1A327F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A28D7, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A3276:: @ 81A3276 @@ -4124,7 +4124,7 @@ SecretBase_RedCave1_EventScript_1A329E:: @ 81A329E jumpeq SecretBase_RedCave1_EventScript_1A32FB hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1D48, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A32F2:: @ 81A32F2 @@ -4159,7 +4159,7 @@ SecretBase_RedCave1_EventScript_1A331A:: @ 81A331A jumpeq SecretBase_RedCave1_EventScript_1A3377 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2095, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A336E:: @ 81A336E @@ -4194,7 +4194,7 @@ SecretBase_RedCave1_EventScript_1A3396:: @ 81A3396 jumpeq SecretBase_RedCave1_EventScript_1A33F3 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2405, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A33EA:: @ 81A33EA @@ -4229,7 +4229,7 @@ SecretBase_RedCave1_EventScript_1A3412:: @ 81A3412 jumpeq SecretBase_RedCave1_EventScript_1A346F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2710, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A3466:: @ 81A3466 @@ -4264,7 +4264,7 @@ SecretBase_RedCave1_EventScript_1A348E:: @ 81A348E jumpeq SecretBase_RedCave1_EventScript_1A34EB hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2AE2, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A34E2:: @ 81A34E2 @@ -4413,7 +4413,7 @@ SlateportCity_PokemonFanClub_EventScript_1ADEB9:: @ 81ADEB9 SlateportCity_PokemonFanClub_EventScript_1ADEC3:: @ 81ADEC3 msgbox SlateportCity_PokemonFanClub_Text_1A8818, 4 setvar 0x8005, 1 - jump SlateportCity_PokemonFanClub_EventScript_1ADE46 + goto SlateportCity_PokemonFanClub_EventScript_1ADE46 end SlateportCity_PokemonFanClub_EventScript_1ADED6:: @ 81ADED6 @@ -4469,7 +4469,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADF79:: @ 81ADF79 SlateportCity_OceanicMuseum_1F_EventScript_1ADF83:: @ 81ADF83 msgbox SlateportCity_OceanicMuseum_1F_Text_1A949A, 4 setvar 0x8005, 2 - jump SlateportCity_OceanicMuseum_1F_EventScript_1ADE46 + goto SlateportCity_OceanicMuseum_1F_EventScript_1ADE46 end SlateportCity_OceanicMuseum_1F_EventScript_1ADF96:: @ 81ADF96 @@ -4507,17 +4507,17 @@ SlateportCity_PokemonFanClub_EventScript_1ADFE9:: @ 81ADFE9 SlateportCity_PokemonFanClub_EventScript_1AE020:: @ 81AE020 msgbox SlateportCity_PokemonFanClub_Text_1A8414, 4 - jump SlateportCity_PokemonFanClub_EventScript_1AE04A + goto SlateportCity_PokemonFanClub_EventScript_1AE04A end SlateportCity_PokemonFanClub_EventScript_1AE02E:: @ 81AE02E msgbox SlateportCity_PokemonFanClub_Text_1A8470, 4 - jump SlateportCity_PokemonFanClub_EventScript_1AE04A + goto SlateportCity_PokemonFanClub_EventScript_1AE04A end SlateportCity_PokemonFanClub_EventScript_1AE03C:: @ 81AE03C msgbox SlateportCity_PokemonFanClub_Text_1A84D5, 4 - jump SlateportCity_PokemonFanClub_EventScript_1AE04A + goto SlateportCity_PokemonFanClub_EventScript_1AE04A end SlateportCity_PokemonFanClub_EventScript_1AE04A:: @ 81AE04A @@ -4539,7 +4539,7 @@ SlateportCity_PokemonFanClub_EventScript_1AE04A:: @ 81AE04A msgbox SlateportCity_PokemonFanClub_Text_1A85A6, 4 copyvar 0x8007, 0x800a setvar 0x8005, 3 - jump SlateportCity_PokemonFanClub_EventScript_1ADE46 + goto SlateportCity_PokemonFanClub_EventScript_1ADE46 end SlateportCity_PokemonFanClub_EventScript_1AE0A2:: @ 81AE0A2 @@ -4606,7 +4606,7 @@ FallarborTown_ContestLobby_EventScript_1AE137:: @ 81AE137 msgbox FallarborTown_ContestLobby_Text_1A7153, 4 setflag 2 setvar 0x8005, 6 - jump FallarborTown_ContestLobby_EventScript_1ADE46 + goto FallarborTown_ContestLobby_EventScript_1ADE46 end FallarborTown_ContestLobby_EventScript_1AE17E:: @ 81AE17E @@ -4710,7 +4710,7 @@ BattleTower_Lobby_EventScript_1AE2B3:: @ 81AE2B3 setflag 2 copyvar 0x8004, 0x8008 setvar 0x8005, 7 - jump BattleTower_Lobby_EventScript_1ADE46 + goto BattleTower_Lobby_EventScript_1ADE46 end BattleTower_Lobby_EventScript_1AE2D9:: @ 81AE2D9 @@ -4797,7 +4797,7 @@ MauvilleCity_GameCorner_EventScript_1C407E:: @ 81C407E compare RESULT, 0 jumpeq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 - jump MauvilleCity_GameCorner_EventScript_1C40DA + goto MauvilleCity_GameCorner_EventScript_1C40DA end MauvilleCity_GameCorner_EventScript_1C40AC:: @ 81C40AC @@ -4809,7 +4809,7 @@ MauvilleCity_GameCorner_EventScript_1C40AC:: @ 81C40AC compare RESULT, 0 jumpeq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 - jump MauvilleCity_GameCorner_EventScript_1C40DA + goto MauvilleCity_GameCorner_EventScript_1C40DA end MauvilleCity_GameCorner_EventScript_1C40DA:: @ 81C40DA diff --git a/data/field_move_scripts.inc b/data/field_move_scripts.inc index 9911dca3a..cdda2edcc 100644 --- a/data/field_move_scripts.inc +++ b/data/field_move_scripts.inc @@ -15,14 +15,14 @@ S_CuttableTree:: @ 81B0DCC closebutton doanimation 2 waitstate - jump DoTreeCutMovement + goto DoTreeCutMovement end S_UseCut:: @ 81B0E16 lockall doanimation 2 waitstate - jump DoTreeCutMovement + goto DoTreeCutMovement end DoTreeCutMovement: @ 81B0E21 @@ -73,14 +73,14 @@ S_BreakableRock:: @ 81B0EB7 closebutton doanimation 37 waitstate - jump DoRockSmashMovement + goto DoRockSmashMovement end S_UseRockSmash:: @ 81B0F01 lockall doanimation 37 waitstate - jump DoRockSmashMovement + goto DoRockSmashMovement end DoRockSmashMovement: @ 81B0F0C @@ -139,14 +139,14 @@ S_PushableBoulder:: @ 81B0FCB closebutton doanimation 40 waitstate - jump UsedStrength + goto UsedStrength end S_UseStrength:: @ 81B100E lockall doanimation 40 waitstate - jump UsedStrength + goto UsedStrength end UsedStrength: @ 81B1019 @@ -200,7 +200,7 @@ S_UseWaterfall:: @ 81B115A jumpeq Waterfall_Done msgbox UsedWaterfallText, 4 doanimation 43 - jump Waterfall_Done + goto Waterfall_Done S_CannotUseWaterfall:: @ 81B1194 lockall @@ -234,7 +234,7 @@ UseDiveScript:: @ 81B1220 jumpeq Dive_Done msgbox UsedDiveText, 4 doanimation 44 - jump Dive_Done + goto Dive_Done lockall CannotUseDive: @ 81B125F @@ -257,12 +257,12 @@ S_UseDiveUnderwater:: @ 81B1269 jumpeq UnderwaterDive_Done msgbox UsedDiveText, 4 doanimation 44 - jump UnderwaterDive_Done + goto UnderwaterDive_Done UnderwaterCannotUseDive: @ 81B12A7 lockall msgbox UnderwaterCannotUseDiveText, 4 - jump UnderwaterDive_Done + goto UnderwaterDive_Done @ not used SurfacingBlocked: @ 81B12B5 diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc index f4707d8cb..6c74fcca4 100644 --- a/data/scripts/berry_tree.inc +++ b/data/scripts/berry_tree.inc @@ -57,21 +57,21 @@ Route102_EventScript_1A1595:: @ 81A1595 message Route102_Text_1A172C waittext waitbutton - jump Route102_EventScript_1A165F + goto Route102_EventScript_1A165F Route102_EventScript_1A15A2:: @ 81A15A2 lockall message Route102_Text_1A174B waittext waitbutton - jump Route102_EventScript_1A165F + goto Route102_EventScript_1A165F Route102_EventScript_1A15AF:: @ 81A15AF lockall message Route102_Text_1A175C waittext waitbutton - jump Route102_EventScript_1A165F + goto Route102_EventScript_1A165F Route102_EventScript_1A15BC:: @ 81A15BC call Route102_EventScript_1A15CE @@ -79,7 +79,7 @@ Route102_EventScript_1A15BC:: @ 81A15BC message Route102_Text_1A177D waittext waitbutton - jump Route102_EventScript_1A165F + goto Route102_EventScript_1A165F Route102_EventScript_1A15CE:: @ 81A15CE compare 0x8005, 0 diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index 6507677e0..372ac5eb8 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -258,7 +258,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3FDD:: @ 81A3FDD waitbutton message OldaleTown_PokemonCenter_2F_Text_1A4826 waittext - jump OldaleTown_PokemonCenter_2F_EventScript_1A3EBC + goto OldaleTown_PokemonCenter_2F_EventScript_1A3EBC OldaleTown_PokemonCenter_2F_EventScript_1A3FEF:: @ 81A3FEF message OldaleTown_PokemonCenter_2F_Text_1A4840 @@ -290,7 +290,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4056:: @ 81A4056 message OldaleTown_PokemonCenter_2F_Text_1A486A waittext waitbutton - jump OldaleTown_PokemonCenter_2F_EventScript_1A3FEF + goto OldaleTown_PokemonCenter_2F_EventScript_1A3FEF OldaleTown_PokemonCenter_2F_EventScript_1A4062:: @ 81A4062 setvar 0x8004, 1 @@ -301,28 +301,28 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4068:: @ 81A4068 case 1, OldaleTown_PokemonCenter_2F_EventScript_1A40B1 case 2, OldaleTown_PokemonCenter_2F_EventScript_1A40A2 case 5, OldaleTown_PokemonCenter_2F_EventScript_1A4093 - jump OldaleTown_PokemonCenter_2F_EventScript_1A432D + goto OldaleTown_PokemonCenter_2F_EventScript_1A432D OldaleTown_PokemonCenter_2F_EventScript_1A4093:: @ 81A4093 special CloseLink message OldaleTown_PokemonCenter_2F_Text_1A4C03 waittext waitbutton - jump OldaleTown_PokemonCenter_2F_EventScript_1A40C0 + goto OldaleTown_PokemonCenter_2F_EventScript_1A40C0 OldaleTown_PokemonCenter_2F_EventScript_1A40A2:: @ 81A40A2 special CloseLink message OldaleTown_PokemonCenter_2F_Text_1A4BCC waittext waitbutton - jump OldaleTown_PokemonCenter_2F_EventScript_1A40C0 + goto OldaleTown_PokemonCenter_2F_EventScript_1A40C0 OldaleTown_PokemonCenter_2F_EventScript_1A40B1:: @ 81A40B1 special CloseLink message OldaleTown_PokemonCenter_2F_Text_1A4B95 waittext waitbutton - jump OldaleTown_PokemonCenter_2F_EventScript_1A40C0 + goto OldaleTown_PokemonCenter_2F_EventScript_1A40C0 OldaleTown_PokemonCenter_2F_EventScript_1A40C0:: @ 81A40C0 special CloseLink @@ -402,7 +402,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4166:: @ 81A4166 setdoorclosed 8, 1 doorchange release - jump OldaleTown_PokemonCenter_2F_EventScript_1A4325 + goto OldaleTown_PokemonCenter_2F_EventScript_1A4325 OldaleTown_PokemonCenter_2F_EventScript_1A41BB:: @ 81A41BB specialval RESULT, CalculatePlayerPartyCount @@ -500,7 +500,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4294:: @ 81A4294 setdoorclosed 11, 1 doorchange release - jump OldaleTown_PokemonCenter_2F_EventScript_1A4325 + goto OldaleTown_PokemonCenter_2F_EventScript_1A4325 OldaleTown_PokemonCenter_2F_EventScript_1A42E9:: @ 81A42E9 special CloseLink diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index 1952264d2..484607165 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -17,7 +17,7 @@ VerdanturfTown_ContestLobby_EventScript_1A4E92:: @ 81A4E92 compare RESULT, 0 jumpeq FallarborTown_ContestLobby_EventScript_1A4EE1 setflag 1 - jump FallarborTown_ContestLobby_EventScript_1A4F8F + goto FallarborTown_ContestLobby_EventScript_1A4F8F end FallarborTown_ContestLobby_EventScript_1A4EDD:: @ 81A4EDD @@ -47,7 +47,7 @@ FallarborTown_ContestLobby_EventScript_1A4F13:: @ 81A4F13 setflag 150 setflag 1 msgbox FallarborTown_ContestLobby_Text_1A5E98, 4 - jump FallarborTown_ContestLobby_EventScript_1A4F8F + goto FallarborTown_ContestLobby_EventScript_1A4F8F end FallarborTown_ContestLobby_EventScript_1A4F44:: @ 81A4F44 @@ -99,17 +99,17 @@ FallarborTown_ContestLobby_EventScript_1A4FCC:: @ 81A4FCC FallarborTown_ContestLobby_EventScript_1A5014:: @ 81A5014 msgbox FallarborTown_ContestLobby_Text_1A5E98, 4 - jump FallarborTown_ContestLobby_EventScript_1A4FCC + goto FallarborTown_ContestLobby_EventScript_1A4FCC end FallarborTown_ContestLobby_EventScript_1A5022:: @ 81A5022 msgbox FallarborTown_ContestLobby_Text_1A609B, 4 - jump FallarborTown_ContestLobby_EventScript_1A4FCC + goto FallarborTown_ContestLobby_EventScript_1A4FCC end FallarborTown_ContestLobby_EventScript_1A5030:: @ 81A5030 msgbox FallarborTown_ContestLobby_Text_1A613F, 4 - jump FallarborTown_ContestLobby_EventScript_1A4FCC + goto FallarborTown_ContestLobby_EventScript_1A4FCC end FallarborTown_ContestLobby_EventScript_1A503E:: @ 81A503E @@ -143,12 +143,12 @@ FallarborTown_ContestLobby_EventScript_1A5097:: @ 81A5097 case 5, FallarborTown_ContestLobby_EventScript_1A503E case 127, FallarborTown_ContestLobby_EventScript_1A503E copyvar CONTEST_CATEGORY, RESULT - jump FallarborTown_ContestLobby_EventScript_1A5048 + goto FallarborTown_ContestLobby_EventScript_1A5048 end FallarborTown_ContestLobby_EventScript_1A50C8:: @ 81A50C8 msgbox FallarborTown_ContestLobby_Text_1A664A, 4 - jump FallarborTown_ContestLobby_EventScript_1A5048 + goto FallarborTown_ContestLobby_EventScript_1A5048 release end @@ -168,13 +168,13 @@ FallarborTown_ContestLobby_EventScript_1A50FB:: @ 81A50FB FallarborTown_ContestLobby_EventScript_1A511F:: @ 81A511F msgbox FallarborTown_ContestLobby_Text_1A669F, 4 - jump FallarborTown_ContestLobby_EventScript_1A5048 + goto FallarborTown_ContestLobby_EventScript_1A5048 release end FallarborTown_ContestLobby_EventScript_1A512E:: @ 81A512E msgbox FallarborTown_ContestLobby_Text_1A66DC, 4 - jump FallarborTown_ContestLobby_EventScript_1A5048 + goto FallarborTown_ContestLobby_EventScript_1A5048 release end diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc index dcc4b44e7..d0e35203e 100644 --- a/data/scripts/day_care.inc +++ b/data/scripts/day_care.inc @@ -130,7 +130,7 @@ Route117_PokemonDayCare_EventScript_1B23DA:: @ 81B23DA msgbox Route117_PokemonDayCare_Text_1B29AD, 5 compare RESULT, 1 jumpeq Route117_PokemonDayCare_EventScript_1B236C - jump Route117_PokemonDayCare_EventScript_1B23D0 + goto Route117_PokemonDayCare_EventScript_1B23D0 end Route117_PokemonDayCare_EventScript_1B23F3:: @ 81B23F3 @@ -168,7 +168,7 @@ Route117_PokemonDayCare_EventScript_1B242B:: @ 81B242B msgbox Route117_PokemonDayCare_Text_1B2BF6, 5 compare RESULT, 1 jumpeq Route117_PokemonDayCare_EventScript_1B2469 - jump Route117_PokemonDayCare_EventScript_1B23D0 + goto Route117_PokemonDayCare_EventScript_1B23D0 end Route117_PokemonDayCare_EventScript_1B2469:: @ 81B2469 @@ -184,7 +184,7 @@ Route117_PokemonDayCare_EventScript_1B2469:: @ 81B2469 copyvar 0x8004, RESULT compare RESULT, 2 jumpeq Route117_PokemonDayCare_EventScript_1B23D0 - jump Route117_PokemonDayCare_EventScript_1B24A8 + goto Route117_PokemonDayCare_EventScript_1B24A8 end Route117_PokemonDayCare_EventScript_1B24A8:: @ 81B24A8 @@ -192,7 +192,7 @@ Route117_PokemonDayCare_EventScript_1B24A8:: @ 81B24A8 msgbox Route117_PokemonDayCare_Text_1B2B49, 5 compare RESULT, 1 jumpeq Route117_PokemonDayCare_EventScript_1B24C4 - jump Route117_PokemonDayCare_EventScript_1B23D0 + goto Route117_PokemonDayCare_EventScript_1B23D0 end Route117_PokemonDayCare_EventScript_1B24C4:: @ 81B24C4 @@ -217,14 +217,14 @@ Route117_PokemonDayCare_EventScript_1B24DE:: @ 81B24DE specialval RESULT, sp0B6_daycare compare RESULT, 2 jumpeq Route117_PokemonDayCare_EventScript_1B2520 - jump Route117_PokemonDayCare_EventScript_1B23D0 + goto Route117_PokemonDayCare_EventScript_1B23D0 end Route117_PokemonDayCare_EventScript_1B2520:: @ 81B2520 msgbox Route117_PokemonDayCare_Text_1B2A4F, 5 compare RESULT, 1 jumpeq Route117_PokemonDayCare_EventScript_1B2469 - jump Route117_PokemonDayCare_EventScript_1B23D0 + goto Route117_PokemonDayCare_EventScript_1B23D0 end Route117_PokemonDayCare_EventScript_1B2539:: @ 81B2539 diff --git a/data/scripts/gabby_and_ty.inc b/data/scripts/gabby_and_ty.inc index 67a0920fa..c88733bea 100644 --- a/data/scripts/gabby_and_ty.inc +++ b/data/scripts/gabby_and_ty.inc @@ -211,7 +211,7 @@ Route111_EventScript_1AE5A2:: @ 81AE5A2 checkflag 1 jumpeq Route111_EventScript_1AE73A msgbox Route111_Text_1AC015, 5 - jump Route111_EventScript_1AE6F3 + goto Route111_EventScript_1AE6F3 end Route111_EventScript_1AE5E0:: @ 81AE5E0 @@ -271,32 +271,32 @@ Route111_Movement_1AE69D:: @ 81AE69D Route111_EventScript_1AE69F:: @ 81AE69F msgbox Route111_Text_1AC60B, 5 - jump Route111_EventScript_1AE6F3 + goto Route111_EventScript_1AE6F3 end Route111_EventScript_1AE6AD:: @ 81AE6AD msgbox Route111_Text_1AC3CF, 5 - jump Route111_EventScript_1AE6F3 + goto Route111_EventScript_1AE6F3 end Route111_EventScript_1AE6BB:: @ 81AE6BB msgbox Route111_Text_1AC18D, 5 - jump Route111_EventScript_1AE6F3 + goto Route111_EventScript_1AE6F3 end Route111_EventScript_1AE6C9:: @ 81AE6C9 msgbox Route111_Text_1AC219, 5 - jump Route111_EventScript_1AE6F3 + goto Route111_EventScript_1AE6F3 end Route111_EventScript_1AE6D7:: @ 81AE6D7 msgbox Route111_Text_1AC2D6, 5 - jump Route111_EventScript_1AE6F3 + goto Route111_EventScript_1AE6F3 end Route111_EventScript_1AE6E5:: @ 81AE6E5 msgbox Route111_Text_1AC355, 5 - jump Route111_EventScript_1AE6F3 + goto Route111_EventScript_1AE6F3 end Route111_EventScript_1AE6F3:: @ 81AE6F3 diff --git a/data/scripts/maps/BattleTower_BattleRoom.inc b/data/scripts/maps/BattleTower_BattleRoom.inc index 2f0fb97b9..750c64b74 100644 --- a/data/scripts/maps/BattleTower_BattleRoom.inc +++ b/data/scripts/maps/BattleTower_BattleRoom.inc @@ -85,7 +85,7 @@ BattleTower_BattleRoom_EventScript_160A3C:: @ 8160A3C waitmove 0 move 2, BattleTower_BattleRoom_Movement_160AD0 waitmove 0 - jump BattleTower_BattleRoom_EventScript_1608FA + goto BattleTower_BattleRoom_EventScript_1608FA BattleTower_BattleRoom_EventScript_160A56:: @ 8160A56 special LoadPlayerParty diff --git a/data/scripts/maps/BattleTower_Corridor.inc b/data/scripts/maps/BattleTower_Corridor.inc index 4ccf2028c..f4f50d90b 100644 --- a/data/scripts/maps/BattleTower_Corridor.inc +++ b/data/scripts/maps/BattleTower_Corridor.inc @@ -26,7 +26,7 @@ BattleTower_Corridor_EventScript_16088B:: @ 816088B move 1, BattleTower_Corridor_Movement_1608D5 move 255, BattleTower_Corridor_Movement_1608D4 waitmove 0 - jump BattleTower_Corridor_EventScript_1608C2 + goto BattleTower_Corridor_EventScript_1608C2 BattleTower_Corridor_EventScript_1608B1:: @ 81608B1 move 1, BattleTower_Corridor_Movement_1608D2 diff --git a/data/scripts/maps/BattleTower_Lobby.inc b/data/scripts/maps/BattleTower_Lobby.inc index a1570ac13..50c9c9152 100644 --- a/data/scripts/maps/BattleTower_Lobby.inc +++ b/data/scripts/maps/BattleTower_Lobby.inc @@ -260,7 +260,7 @@ BattleTower_Lobby_EventScript_160587:: @ 8160587 BattleTower_Lobby_EventScript_160600:: @ 8160600 msgbox BattleTower_Lobby_Text_19A0D1, 4 - jump BattleTower_Lobby_EventScript_1604BE + goto BattleTower_Lobby_EventScript_1604BE BattleTower_Lobby_EventScript_16060D:: @ 816060D switch RESULT @@ -269,16 +269,16 @@ BattleTower_Lobby_EventScript_16060D:: @ 816060D BattleTower_Lobby_EventScript_160628:: @ 8160628 msgbox BattleTower_Lobby_Text_19A249, 4 - jump BattleTower_Lobby_EventScript_160662 + goto BattleTower_Lobby_EventScript_160662 BattleTower_Lobby_EventScript_160635:: @ 8160635 msgbox BattleTower_Lobby_Text_19A32D, 4 - jump BattleTower_Lobby_EventScript_160662 + goto BattleTower_Lobby_EventScript_160662 BattleTower_Lobby_EventScript_160642:: @ 8160642 setvar 0x8004, 12 special sub_8135668 - jump BattleTower_Lobby_EventScript_160652 + goto BattleTower_Lobby_EventScript_160652 BattleTower_Lobby_EventScript_16064F:: @ 816064F special LoadPlayerParty diff --git a/data/scripts/maps/BattleTower_Outside.inc b/data/scripts/maps/BattleTower_Outside.inc index 02c4e0c6f..01e10ebd3 100644 --- a/data/scripts/maps/BattleTower_Outside.inc +++ b/data/scripts/maps/BattleTower_Outside.inc @@ -17,7 +17,7 @@ BattleTower_Outside_EventScript_160168:: @ 8160168 jumpeq BattleTower_Outside_EventScript_1601C6 message BattleTower_Outside_Text_199D9D waittext - jump BattleTower_Outside_EventScript_16018E + goto BattleTower_Outside_EventScript_16018E end BattleTower_Outside_EventScript_16018E:: @ 816018E @@ -59,7 +59,7 @@ BattleTower_Outside_EventScript_1601FB:: @ 81601FB BattleTower_Outside_EventScript_160226:: @ 8160226 message BattleTower_Outside_Text_199E7A waittext - jump BattleTower_Outside_EventScript_16018E + goto BattleTower_Outside_EventScript_16018E end BattleTower_Outside_EventScript_160232:: @ 8160232 diff --git a/data/scripts/maps/DewfordTown.inc b/data/scripts/maps/DewfordTown.inc index 8ca2eb3df..9a914fcd8 100644 --- a/data/scripts/maps/DewfordTown.inc +++ b/data/scripts/maps/DewfordTown.inc @@ -24,14 +24,14 @@ DewfordTown_EventScript_14E002:: @ 814E002 DewfordTown_EventScript_14E04B:: @ 814E04B msgbox DewfordTown_Text_16B57D, 4 closebutton - jump DewfordTown_EventScript_14E151 + goto DewfordTown_EventScript_14E151 release end DewfordTown_EventScript_14E05B:: @ 814E05B msgbox DewfordTown_Text_16B5D2, 4 closebutton - jump DewfordTown_EventScript_14E1D8 + goto DewfordTown_EventScript_14E1D8 release end @@ -52,7 +52,7 @@ DewfordTown_EventScript_14E076:: @ 814E076 DewfordTown_EventScript_14E093:: @ 814E093 msgbox DewfordTown_Text_16B417, 4 closebutton - jump DewfordTown_EventScript_14E151 + goto DewfordTown_EventScript_14E151 end DewfordTown_EventScript_14E0A2:: @ 814E0A2 diff --git a/data/scripts/maps/DewfordTown_Gym.inc b/data/scripts/maps/DewfordTown_Gym.inc index 51d4f44ba..457f510f0 100644 --- a/data/scripts/maps/DewfordTown_Gym.inc +++ b/data/scripts/maps/DewfordTown_Gym.inc @@ -17,7 +17,7 @@ DewfordTown_Gym_EventScript_153071:: @ 8153071 jumpeq DewfordTown_Gym_EventScript_1530B6 compare 0x8000, 2 jumpeq DewfordTown_Gym_EventScript_1530B2 - jump DewfordTown_Gym_EventScript_1530AE + goto DewfordTown_Gym_EventScript_1530AE DewfordTown_Gym_EventScript_1530AA:: @ 81530AA darken 0 @@ -41,7 +41,7 @@ DewfordTown_Gym_EventScript_1530BA:: @ 81530BA DewfordTown_Gym_EventScript_1530BE:: @ 81530BE call DewfordTown_Gym_EventScript_153122 - snop1 + nop1 comparevars 0x8000, 0x8001 jumpeq DewfordTown_Gym_EventScript_1530F5 copyvar 0x8001, 0x8000 @@ -119,7 +119,7 @@ DewfordTown_Gym_EventScript_153177:: @ 8153177 callif 1, DewfordTown_Gym_EventScript_1A00FB setvar 0x8008, 2 call DewfordTown_Gym_EventScript_1A01C0 - jump DewfordTown_Gym_EventScript_1531B5 + goto DewfordTown_Gym_EventScript_1531B5 end DewfordTown_Gym_EventScript_1531B5:: @ 81531B5 @@ -179,14 +179,14 @@ DewfordTown_Gym_EventScript_15325E:: @ 815325E lockall checkflag 2056 jumpeq DewfordTown_Gym_EventScript_15327E - jump DewfordTown_Gym_EventScript_153288 + goto DewfordTown_Gym_EventScript_153288 end DewfordTown_Gym_EventScript_15326E:: @ 815326E lockall checkflag 2056 jumpeq DewfordTown_Gym_EventScript_15327E - jump DewfordTown_Gym_EventScript_153288 + goto DewfordTown_Gym_EventScript_153288 end DewfordTown_Gym_EventScript_15327E:: @ 815327E diff --git a/data/scripts/maps/DewfordTown_Hall.inc b/data/scripts/maps/DewfordTown_Hall.inc index 28d396a3e..70689f7ac 100644 --- a/data/scripts/maps/DewfordTown_Hall.inc +++ b/data/scripts/maps/DewfordTown_Hall.inc @@ -122,13 +122,13 @@ DewfordTown_Hall_EventScript_1533E8:: @ 81533E8 DewfordTown_Hall_EventScript_1533F2:: @ 81533F2 lockall setvar 0x8008, 0 - jump DewfordTown_Hall_EventScript_15340A + goto DewfordTown_Hall_EventScript_15340A end DewfordTown_Hall_EventScript_1533FE:: @ 81533FE lockall setvar 0x8008, 1 - jump DewfordTown_Hall_EventScript_15340A + goto DewfordTown_Hall_EventScript_15340A end DewfordTown_Hall_EventScript_15340A:: @ 815340A diff --git a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc index bddcfa74b..4d2179cc1 100644 --- a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc +++ b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc @@ -28,7 +28,7 @@ EverGrandeCity_ChampionsRoom_EventScript_15B7DE:: @ 815B7DE move 255, EverGrandeCity_ChampionsRoom_Movement_15B802 waitmove 0 setvar 0x4001, 1 - jump EverGrandeCity_ChampionsRoom_EventScript_15B805 + goto EverGrandeCity_ChampionsRoom_EventScript_15B805 releaseall end @@ -41,7 +41,7 @@ EverGrandeCity_ChampionsRoom_EventScript_15B805:: @ 815B805 playmusic 454, 0 msgbox EverGrandeCity_ChampionsRoom_Text_190F9C, 4 trainerbattle 3, OPPONENT_STEVEN, 0, EverGrandeCity_ChampionsRoom_Text_1910A0 - jump EverGrandeCity_ChampionsRoom_EventScript_15B821 + goto EverGrandeCity_ChampionsRoom_EventScript_15B821 end EverGrandeCity_ChampionsRoom_EventScript_15B821:: @ 815B821 @@ -84,7 +84,7 @@ EverGrandeCity_ChampionsRoom_EventScript_15B886:: @ 815B886 waitmove 0 call EverGrandeCity_ChampionsRoom_EventScript_15B9D2 msgbox EverGrandeCity_ChampionsRoom_Text_191268, 4 - jump EverGrandeCity_ChampionsRoom_EventScript_15B8F0 + goto EverGrandeCity_ChampionsRoom_EventScript_15B8F0 end EverGrandeCity_ChampionsRoom_EventScript_15B8BB:: @ 815B8BB @@ -97,7 +97,7 @@ EverGrandeCity_ChampionsRoom_EventScript_15B8BB:: @ 815B8BB waitmove 0 call EverGrandeCity_ChampionsRoom_EventScript_15B9D2 msgbox EverGrandeCity_ChampionsRoom_Text_191305, 4 - jump EverGrandeCity_ChampionsRoom_EventScript_15B8F0 + goto EverGrandeCity_ChampionsRoom_EventScript_15B8F0 end EverGrandeCity_ChampionsRoom_EventScript_15B8F0:: @ 815B8F0 diff --git a/data/scripts/maps/EverGrandeCity_DrakesRoom.inc b/data/scripts/maps/EverGrandeCity_DrakesRoom.inc index d10957a8e..55e38da15 100644 --- a/data/scripts/maps/EverGrandeCity_DrakesRoom.inc +++ b/data/scripts/maps/EverGrandeCity_DrakesRoom.inc @@ -46,7 +46,7 @@ EverGrandeCity_DrakesRoom_EventScript_15B764:: @ 815B764 playmusic 450, 0 msgbox EverGrandeCity_DrakesRoom_Text_190CEB, 4 trainerbattle 3, OPPONENT_DRAKE, 0, EverGrandeCity_DrakesRoom_Text_190E42 - jump EverGrandeCity_DrakesRoom_EventScript_15B795 + goto EverGrandeCity_DrakesRoom_EventScript_15B795 end EverGrandeCity_DrakesRoom_EventScript_15B78B:: @ 815B78B diff --git a/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc b/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc index 039b2a772..9271f3da9 100644 --- a/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc +++ b/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc @@ -46,7 +46,7 @@ EverGrandeCity_GlaciasRoom_EventScript_15B6CA:: @ 815B6CA playmusic 450, 0 msgbox EverGrandeCity_GlaciasRoom_Text_190AF9, 4 trainerbattle 3, OPPONENT_GLACIA, 0, EverGrandeCity_GlaciasRoom_Text_190C01 - jump EverGrandeCity_GlaciasRoom_EventScript_15B6FB + goto EverGrandeCity_GlaciasRoom_EventScript_15B6FB end EverGrandeCity_GlaciasRoom_EventScript_15B6F1:: @ 815B6F1 diff --git a/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc b/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc index 7e8ee131a..9b693c227 100644 --- a/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc +++ b/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc @@ -46,7 +46,7 @@ EverGrandeCity_PhoebesRoom_EventScript_15B630:: @ 815B630 playmusic 450, 0 msgbox EverGrandeCity_PhoebesRoom_Text_1908F5, 4 trainerbattle 3, OPPONENT_PHOEBE, 0, EverGrandeCity_PhoebesRoom_Text_190A0C - jump EverGrandeCity_PhoebesRoom_EventScript_15B661 + goto EverGrandeCity_PhoebesRoom_EventScript_15B661 end EverGrandeCity_PhoebesRoom_EventScript_15B657:: @ 815B657 diff --git a/data/scripts/maps/EverGrandeCity_SidneysRoom.inc b/data/scripts/maps/EverGrandeCity_SidneysRoom.inc index 84a6c3fdc..bbb95e0ad 100644 --- a/data/scripts/maps/EverGrandeCity_SidneysRoom.inc +++ b/data/scripts/maps/EverGrandeCity_SidneysRoom.inc @@ -47,7 +47,7 @@ EverGrandeCity_SidneysRoom_EventScript_15B596:: @ 815B596 playmusic 450, 0 msgbox EverGrandeCity_SidneysRoom_Text_190728, 4 trainerbattle 3, OPPONENT_SIDNEY, 0, EverGrandeCity_SidneysRoom_Text_190823 - jump EverGrandeCity_SidneysRoom_EventScript_15B5C7 + goto EverGrandeCity_SidneysRoom_EventScript_15B5C7 end EverGrandeCity_SidneysRoom_EventScript_15B5BD:: @ 815B5BD diff --git a/data/scripts/maps/FallarborTown_House2.inc b/data/scripts/maps/FallarborTown_House2.inc index 1351b96d3..c36036ce3 100644 --- a/data/scripts/maps/FallarborTown_House2.inc +++ b/data/scripts/maps/FallarborTown_House2.inc @@ -9,7 +9,7 @@ FallarborTown_House2_EventScript_153C91:: @ 8153C91 jumpeq FallarborTown_House2_EventScript_153CB6 msgbox FallarborTown_House2_Text_177AF4, 4 setflag 1 - jump FallarborTown_House2_EventScript_153CB6 + goto FallarborTown_House2_EventScript_153CB6 end FallarborTown_House2_EventScript_153CB6:: @ 8153CB6 @@ -19,7 +19,7 @@ FallarborTown_House2_EventScript_153CB6:: @ 8153CB6 msgbox FallarborTown_House2_Text_177BDB, 5 switch RESULT case 0, FallarborTown_House2_EventScript_153D60 - jump FallarborTown_House2_EventScript_153CE4 + goto FallarborTown_House2_EventScript_153CE4 end FallarborTown_House2_EventScript_153CE4:: @ 8153CE4 @@ -33,7 +33,7 @@ FallarborTown_House2_EventScript_153CE4:: @ 8153CE4 jumpeq FallarborTown_House2_EventScript_153D52 compare 0x8005, 0 jumpeq FallarborTown_House2_EventScript_153D44 - jump FallarborTown_House2_EventScript_153D1A + goto FallarborTown_House2_EventScript_153D1A end FallarborTown_House2_EventScript_153D1A:: @ 8153D1A @@ -44,17 +44,17 @@ FallarborTown_House2_EventScript_153D1A:: @ 8153D1A jumpeq FallarborTown_House2_EventScript_153CE4 msgbox FallarborTown_House2_Text_177CC3, 4 removeitem ITEM_HEART_SCALE, 1 - jump FallarborTown_House2_EventScript_153D60 + goto FallarborTown_House2_EventScript_153D60 end FallarborTown_House2_EventScript_153D44:: @ 8153D44 msgbox FallarborTown_House2_Text_177C78, 4 - jump FallarborTown_House2_EventScript_153CE4 + goto FallarborTown_House2_EventScript_153CE4 end FallarborTown_House2_EventScript_153D52:: @ 8153D52 msgbox FallarborTown_House2_Text_177D33, 4 - jump FallarborTown_House2_EventScript_153CE4 + goto FallarborTown_House2_EventScript_153CE4 end FallarborTown_House2_EventScript_153D60:: @ 8153D60 diff --git a/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc b/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc index 636cac8f1..bb924026c 100644 --- a/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc +++ b/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc @@ -36,13 +36,13 @@ FallarborTown_PokemonCenter_1F_EventScript_153B22:: @ 8153B22 FallarborTown_PokemonCenter_1F_EventScript_153B49:: @ 8153B49 move 4, FallarborTown_PokemonCenter_1F_Movement_153B74 waitmove 0 - jump FallarborTown_PokemonCenter_1F_EventScript_153B69 + goto FallarborTown_PokemonCenter_1F_EventScript_153B69 end FallarborTown_PokemonCenter_1F_EventScript_153B59:: @ 8153B59 move 4, FallarborTown_PokemonCenter_1F_Movement_153B81 waitmove 0 - jump FallarborTown_PokemonCenter_1F_EventScript_153B69 + goto FallarborTown_PokemonCenter_1F_EventScript_153B69 end FallarborTown_PokemonCenter_1F_EventScript_153B69:: @ 8153B69 diff --git a/data/scripts/maps/FortreeCity_Gym.inc b/data/scripts/maps/FortreeCity_Gym.inc index 44f5890a2..971b05f1b 100644 --- a/data/scripts/maps/FortreeCity_Gym.inc +++ b/data/scripts/maps/FortreeCity_Gym.inc @@ -32,7 +32,7 @@ FortreeCity_Gym_EventScript_157F15:: @ 8157F15 setflag 2060 setvar 0x8008, 6 call FortreeCity_Gym_EventScript_1A01C0 - jump FortreeCity_Gym_EventScript_157F3E + goto FortreeCity_Gym_EventScript_157F3E end FortreeCity_Gym_EventScript_157F3E:: @ 8157F3E @@ -82,14 +82,14 @@ FortreeCity_Gym_EventScript_157FDD:: @ 8157FDD lockall checkflag 2060 jumpeq FortreeCity_Gym_EventScript_157FFD - jump FortreeCity_Gym_EventScript_158007 + goto FortreeCity_Gym_EventScript_158007 end FortreeCity_Gym_EventScript_157FED:: @ 8157FED lockall checkflag 2060 jumpeq FortreeCity_Gym_EventScript_157FFD - jump FortreeCity_Gym_EventScript_158007 + goto FortreeCity_Gym_EventScript_158007 end FortreeCity_Gym_EventScript_157FFD:: @ 8157FFD diff --git a/data/scripts/maps/IslandCave.inc b/data/scripts/maps/IslandCave.inc index 2f8ba2121..e706914d7 100644 --- a/data/scripts/maps/IslandCave.inc +++ b/data/scripts/maps/IslandCave.inc @@ -50,7 +50,7 @@ IslandCave_EventScript_15EF59:: @ 815EF59 braillemsg IslandCave_Braille_1C54FC special DoBrailleWait waitstate - jump IslandCave_EventScript_15EF95 + goto IslandCave_EventScript_15EF95 end IslandCave_EventScript_15EF72:: @ 815EF72 @@ -65,7 +65,7 @@ IslandCave_EventScript_15EF7C:: @ 815EF7C jumpeq IslandCave_EventScript_15EF95 special DoBrailleWait waitstate - jump IslandCave_EventScript_15EF95 + goto IslandCave_EventScript_15EF95 end IslandCave_EventScript_15EF95:: @ 815EF95 diff --git a/data/scripts/maps/LavaridgeTown.inc b/data/scripts/maps/LavaridgeTown.inc index 685e44d58..125b2d42b 100644 --- a/data/scripts/maps/LavaridgeTown.inc +++ b/data/scripts/maps/LavaridgeTown.inc @@ -86,7 +86,7 @@ LavaridgeTown_EventScript_14E5AB:: @ 814E5AB giveitem ITEM_GO_GOGGLES setflag 221 msgbox LavaridgeTown_Text_16BE7D, 4 - jump LavaridgeTown_EventScript_14E5F5 + goto LavaridgeTown_EventScript_14E5F5 end LavaridgeTown_EventScript_14E5D0:: @ 814E5D0 @@ -94,7 +94,7 @@ LavaridgeTown_EventScript_14E5D0:: @ 814E5D0 giveitem ITEM_GO_GOGGLES setflag 221 msgbox LavaridgeTown_Text_16C020, 4 - jump LavaridgeTown_EventScript_14E5F5 + goto LavaridgeTown_EventScript_14E5F5 end LavaridgeTown_EventScript_14E5F5:: @ 814E5F5 diff --git a/data/scripts/maps/LavaridgeTown_Gym_1F.inc b/data/scripts/maps/LavaridgeTown_Gym_1F.inc index 57506bdb6..1f5810e7f 100644 --- a/data/scripts/maps/LavaridgeTown_Gym_1F.inc +++ b/data/scripts/maps/LavaridgeTown_Gym_1F.inc @@ -90,7 +90,7 @@ LavaridgeTown_Gym_1F_EventScript_153766:: @ 8153766 call LavaridgeTown_Gym_1F_EventScript_1A01C0 setflag 806 setvar 0x4053, 1 - jump LavaridgeTown_Gym_1F_EventScript_1537A7 + goto LavaridgeTown_Gym_1F_EventScript_1537A7 end LavaridgeTown_Gym_1F_EventScript_1537A7:: @ 81537A7 @@ -150,14 +150,14 @@ LavaridgeTown_Gym_1F_EventScript_153878:: @ 8153878 lockall checkflag 2058 jumpeq LavaridgeTown_Gym_1F_EventScript_153898 - jump LavaridgeTown_Gym_1F_EventScript_1538A2 + goto LavaridgeTown_Gym_1F_EventScript_1538A2 end LavaridgeTown_Gym_1F_EventScript_153888:: @ 8153888 lockall checkflag 2058 jumpeq LavaridgeTown_Gym_1F_EventScript_153898 - jump LavaridgeTown_Gym_1F_EventScript_1538A2 + goto LavaridgeTown_Gym_1F_EventScript_1538A2 end LavaridgeTown_Gym_1F_EventScript_153898:: @ 8153898 diff --git a/data/scripts/maps/LilycoveCity.inc b/data/scripts/maps/LilycoveCity.inc index b688107ce..082e88bd5 100644 --- a/data/scripts/maps/LilycoveCity.inc +++ b/data/scripts/maps/LilycoveCity.inc @@ -318,32 +318,32 @@ LilycoveCity_EventScript_14CE35:: @ 814CE35 LilycoveCity_EventScript_14CE46:: @ 814CE46 trainerbattle 3, OPPONENT_MAY_11, 0, LilycoveCity_Text_167BD5 - jump LilycoveCity_EventScript_14CEA6 + goto LilycoveCity_EventScript_14CEA6 end LilycoveCity_EventScript_14CE56:: @ 814CE56 trainerbattle 3, OPPONENT_MAY_12, 0, LilycoveCity_Text_167BD5 - jump LilycoveCity_EventScript_14CEA6 + goto LilycoveCity_EventScript_14CEA6 end LilycoveCity_EventScript_14CE66:: @ 814CE66 trainerbattle 3, OPPONENT_MAY_10, 0, LilycoveCity_Text_167BD5 - jump LilycoveCity_EventScript_14CEA6 + goto LilycoveCity_EventScript_14CEA6 end LilycoveCity_EventScript_14CE76:: @ 814CE76 trainerbattle 3, OPPONENT_BRENDAN_11, 0, LilycoveCity_Text_1680E4 - jump LilycoveCity_EventScript_14CF12 + goto LilycoveCity_EventScript_14CF12 end LilycoveCity_EventScript_14CE86:: @ 814CE86 trainerbattle 3, OPPONENT_BRENDAN_12, 0, LilycoveCity_Text_1680E4 - jump LilycoveCity_EventScript_14CF12 + goto LilycoveCity_EventScript_14CF12 end LilycoveCity_EventScript_14CE96:: @ 814CE96 trainerbattle 3, OPPONENT_BRENDAN_10, 0, LilycoveCity_Text_1680E4 - jump LilycoveCity_EventScript_14CF12 + goto LilycoveCity_EventScript_14CF12 end LilycoveCity_EventScript_14CEA6:: @ 814CEA6 @@ -357,7 +357,7 @@ LilycoveCity_EventScript_14CEA6:: @ 814CEA6 callif 1, LilycoveCity_EventScript_14CEF7 clearflag 722 clearflag 849 - jump LilycoveCity_EventScript_14CF6B + goto LilycoveCity_EventScript_14CF6B end LilycoveCity_EventScript_14CEDE:: @ 814CEDE @@ -393,7 +393,7 @@ LilycoveCity_EventScript_14CF12:: @ 814CF12 compare RESULT, 1 callif 1, LilycoveCity_EventScript_14CF50 clearflag 760 - jump LilycoveCity_EventScript_14CF6B + goto LilycoveCity_EventScript_14CF6B end LilycoveCity_EventScript_14CF47:: @ 814CF47 diff --git a/data/scripts/maps/LilycoveCity_ContestLobby.inc b/data/scripts/maps/LilycoveCity_ContestLobby.inc index 6bdcf55e2..ebd59cd91 100644 --- a/data/scripts/maps/LilycoveCity_ContestLobby.inc +++ b/data/scripts/maps/LilycoveCity_ContestLobby.inc @@ -312,13 +312,13 @@ LilycoveCity_ContestLobby_EventScript_158B85:: @ 8158B85 message LilycoveCity_ContestLobby_Text_18848C waittext setflag 2 - jump LilycoveCity_ContestLobby_EventScript_158BF0 + goto LilycoveCity_ContestLobby_EventScript_158BF0 end LilycoveCity_ContestLobby_EventScript_158BAE:: @ 8158BAE message LilycoveCity_ContestLobby_Text_188584 waittext - jump LilycoveCity_ContestLobby_EventScript_158BF0 + goto LilycoveCity_ContestLobby_EventScript_158BF0 end LilycoveCity_ContestLobby_EventScript_158BBA:: @ 8158BBA @@ -348,7 +348,7 @@ LilycoveCity_ContestLobby_EventScript_158BF0:: @ 8158BF0 LilycoveCity_ContestLobby_EventScript_158C27:: @ 8158C27 msgbox LilycoveCity_ContestLobby_Text_1885A7, 4 - jump LilycoveCity_ContestLobby_EventScript_158B85 + goto LilycoveCity_ContestLobby_EventScript_158B85 end LilycoveCity_ContestLobby_EventScript_158C35:: @ 8158C35 @@ -378,17 +378,17 @@ LilycoveCity_ContestLobby_EventScript_158C42:: @ 8158C42 LilycoveCity_ContestLobby_EventScript_158C96:: @ 8158C96 msgbox LilycoveCity_ContestLobby_Text_1A664A, 4 - jump LilycoveCity_ContestLobby_EventScript_158C42 + goto LilycoveCity_ContestLobby_EventScript_158C42 end LilycoveCity_ContestLobby_EventScript_158CA4:: @ 8158CA4 msgbox LilycoveCity_ContestLobby_Text_1A669F, 4 - jump LilycoveCity_ContestLobby_EventScript_158C42 + goto LilycoveCity_ContestLobby_EventScript_158C42 end LilycoveCity_ContestLobby_EventScript_158CB2:: @ 8158CB2 msgbox LilycoveCity_ContestLobby_Text_1A66DC, 4 - jump LilycoveCity_ContestLobby_EventScript_158C42 + goto LilycoveCity_ContestLobby_EventScript_158C42 end LilycoveCity_ContestLobby_EventScript_158CC0:: @ 8158CC0 @@ -411,7 +411,7 @@ LilycoveCity_ContestLobby_EventScript_158CEA:: @ 8158CEA case 5, LilycoveCity_ContestLobby_EventScript_158C35 case 127, LilycoveCity_ContestLobby_EventScript_158C35 copyvar CONTEST_CATEGORY, RESULT - jump LilycoveCity_ContestLobby_EventScript_158C42 + goto LilycoveCity_ContestLobby_EventScript_158C42 end LilycoveCity_ContestLobby_EventScript_158D24:: @ 8158D24 @@ -437,7 +437,7 @@ LilycoveCity_ContestLobby_EventScript_158D24:: @ 8158D24 LilycoveCity_ContestLobby_EventScript_158D82:: @ 8158D82 msgbox LilycoveCity_ContestLobby_Text_188750, 4 - jump LilycoveCity_ContestLobby_EventScript_158CEA + goto LilycoveCity_ContestLobby_EventScript_158CEA end LilycoveCity_ContestLobby_EventScript_158D90:: @ 8158D90 @@ -466,7 +466,7 @@ LilycoveCity_ContestLobby_EventScript_158DB2:: @ 8158DB2 LilycoveCity_ContestLobby_EventScript_158DC3:: @ 8158DC3 msgbox LilycoveCity_ContestLobby_Text_18873A, 4 - jump LilycoveCity_ContestLobby_EventScript_158CEA + goto LilycoveCity_ContestLobby_EventScript_158CEA end LilycoveCity_ContestLobby_EventScript_158DD1:: @ 8158DD1 @@ -476,7 +476,7 @@ LilycoveCity_ContestLobby_EventScript_158DD1:: @ 8158DD1 message2 LilycoveCity_ContestLobby_Text_188845 waittext addvar 0x8004, 65535 - jump LilycoveCity_ContestLobby_EventScript_158DEE + goto LilycoveCity_ContestLobby_EventScript_158DEE end LilycoveCity_ContestLobby_EventScript_158DEE:: @ 8158DEE diff --git a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc index 09d19c1c5..48758ac5c 100644 --- a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc +++ b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc @@ -22,7 +22,7 @@ LilycoveCity_CoveLilyMotel_2F_EventScript_1583D0:: @ 81583D0 setflag 2 fanfare 370 waitfanfare - jump LilycoveCity_CoveLilyMotel_2F_EventScript_1583DD + goto LilycoveCity_CoveLilyMotel_2F_EventScript_1583DD end LilycoveCity_CoveLilyMotel_2F_EventScript_1583DD:: @ 81583DD diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc index 74b746633..b28fe3a47 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc @@ -26,7 +26,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A402:: @ 815A402 jumpeq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 0 - jump LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 + goto LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 end LilycoveCity_DepartmentStoreElevator_EventScript_15A425:: @ 815A425 @@ -35,7 +35,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A425:: @ 815A425 jumpeq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 1 - jump LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 + goto LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 end LilycoveCity_DepartmentStoreElevator_EventScript_15A448:: @ 815A448 @@ -44,7 +44,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A448:: @ 815A448 jumpeq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 2 - jump LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 + goto LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 end LilycoveCity_DepartmentStoreElevator_EventScript_15A46B:: @ 815A46B @@ -53,7 +53,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A46B:: @ 815A46B jumpeq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 3 - jump LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 + goto LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 end LilycoveCity_DepartmentStoreElevator_EventScript_15A48E:: @ 815A48E @@ -62,7 +62,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A48E:: @ 815A48E jumpeq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 4 - jump LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 + goto LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 end LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1:: @ 815A4B1 diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc index f84c84201..c1be4bbe7 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc @@ -72,8 +72,8 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A1CD:: @ 815A1CD message LilycoveCity_DepartmentStoreRooftop_Text_18C72B waittext showmoney 0, 0 - snop - jump LilycoveCity_DepartmentStoreRooftop_EventScript_15A1DE + nop + goto LilycoveCity_DepartmentStoreRooftop_EventScript_15A1DE end LilycoveCity_DepartmentStoreRooftop_EventScript_15A1DE:: @ 815A1DE @@ -84,22 +84,22 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A1DE:: @ 815A1DE case 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A227 case 2, LilycoveCity_DepartmentStoreRooftop_EventScript_15A232 msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C7C3, 4 - jump LilycoveCity_DepartmentStoreRooftop_EventScript_15A396 + goto LilycoveCity_DepartmentStoreRooftop_EventScript_15A396 end LilycoveCity_DepartmentStoreRooftop_EventScript_15A21C:: @ 815A21C setvar 0x4000, 26 - jump LilycoveCity_DepartmentStoreRooftop_EventScript_15A267 + goto LilycoveCity_DepartmentStoreRooftop_EventScript_15A267 end LilycoveCity_DepartmentStoreRooftop_EventScript_15A227:: @ 815A227 setvar 0x4000, 27 - jump LilycoveCity_DepartmentStoreRooftop_EventScript_15A267 + goto LilycoveCity_DepartmentStoreRooftop_EventScript_15A267 end LilycoveCity_DepartmentStoreRooftop_EventScript_15A232:: @ 815A232 setvar 0x4000, 28 - jump LilycoveCity_DepartmentStoreRooftop_EventScript_15A267 + goto LilycoveCity_DepartmentStoreRooftop_EventScript_15A267 end LilycoveCity_DepartmentStoreRooftop_EventScript_15A23D:: @ 815A23D @@ -145,7 +145,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 compare 0x4001, 2 callif 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A260 updatemoney 0, 0 - snop + nop bufferitem 0, 0x4000 playsfx 106 msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C75F, 4 @@ -177,23 +177,23 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 bufferitem 1, 0x4000 bufferstd 2, 14 msgbox LilycoveCity_DepartmentStoreRooftop_Text_1A0C8C, 4 - jump LilycoveCity_DepartmentStoreRooftop_EventScript_15A36E + goto LilycoveCity_DepartmentStoreRooftop_EventScript_15A36E end LilycoveCity_DepartmentStoreRooftop_EventScript_15A36E:: @ 815A36E message LilycoveCity_DepartmentStoreRooftop_Text_18C72B waittext - jump LilycoveCity_DepartmentStoreRooftop_EventScript_15A1DE + goto LilycoveCity_DepartmentStoreRooftop_EventScript_15A1DE end LilycoveCity_DepartmentStoreRooftop_EventScript_15A37A:: @ 815A37A msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C7AF, 4 - jump LilycoveCity_DepartmentStoreRooftop_EventScript_15A396 + goto LilycoveCity_DepartmentStoreRooftop_EventScript_15A396 end LilycoveCity_DepartmentStoreRooftop_EventScript_15A388:: @ 815A388 msgbox LilycoveCity_DepartmentStoreRooftop_Text_1A0C79, 4 - jump LilycoveCity_DepartmentStoreRooftop_EventScript_15A396 + goto LilycoveCity_DepartmentStoreRooftop_EventScript_15A396 end LilycoveCity_DepartmentStoreRooftop_EventScript_15A396:: @ 815A396 diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc index feff49c42..ac1198aee 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc @@ -52,7 +52,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_159D5E:: @ 8159D5E giveitem 0x8005 compare RESULT, 0 jumpeq LilycoveCity_DepartmentStore_1F_EventScript_159E9C - jump LilycoveCity_DepartmentStore_1F_EventScript_159E6E + goto LilycoveCity_DepartmentStore_1F_EventScript_159E6E end LilycoveCity_DepartmentStore_1F_EventScript_159E3A:: @ 8159E3A @@ -75,7 +75,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_159E56:: @ 8159E56 LilycoveCity_DepartmentStore_1F_EventScript_159E60:: @ 8159E60 msgbox LilycoveCity_DepartmentStore_1F_Text_1C4E27, 4 - jump LilycoveCity_DepartmentStore_1F_EventScript_159E6E + goto LilycoveCity_DepartmentStore_1F_EventScript_159E6E end LilycoveCity_DepartmentStore_1F_EventScript_159E6E:: @ 8159E6E @@ -101,7 +101,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_159E93:: @ 8159E93 LilycoveCity_DepartmentStore_1F_EventScript_159E9C:: @ 8159E9C copyvar 0x4045, 0x8005 - jump LilycoveCity_DepartmentStore_1F_EventScript_159EA7 + goto LilycoveCity_DepartmentStore_1F_EventScript_159EA7 end LilycoveCity_DepartmentStore_1F_EventScript_159EA7:: @ 8159EA7 diff --git a/data/scripts/maps/LilycoveCity_Harbor.inc b/data/scripts/maps/LilycoveCity_Harbor.inc index aca6b16d4..471d1f8b5 100644 --- a/data/scripts/maps/LilycoveCity_Harbor.inc +++ b/data/scripts/maps/LilycoveCity_Harbor.inc @@ -12,7 +12,7 @@ LilycoveCity_Harbor_EventScript_1598A2:: @ 81598A2 checkitem ITEM_EON_TICKET, 1 compare RESULT, 1 jumpeq LilycoveCity_Harbor_EventScript_1599EE - jump LilycoveCity_Harbor_EventScript_1598BA + goto LilycoveCity_Harbor_EventScript_1598BA end LilycoveCity_Harbor_EventScript_1598BA:: @ 81598BA @@ -29,7 +29,7 @@ LilycoveCity_Harbor_EventScript_1598CD:: @ 81598CD jumpeq LilycoveCity_Harbor_EventScript_159929 message LilycoveCity_Harbor_Text_18B406 waittext - jump LilycoveCity_Harbor_EventScript_1598F1 + goto LilycoveCity_Harbor_EventScript_1598F1 end LilycoveCity_Harbor_EventScript_1598F1:: @ 81598F1 @@ -70,7 +70,7 @@ LilycoveCity_Harbor_EventScript_15995B:: @ 815995B LilycoveCity_Harbor_EventScript_15997E:: @ 815997E message LilycoveCity_Harbor_Text_18B4E2 waittext - jump LilycoveCity_Harbor_EventScript_1598F1 + goto LilycoveCity_Harbor_EventScript_1598F1 end LilycoveCity_Harbor_EventScript_15998A:: @ 815998A diff --git a/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc b/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc index b3564ebf5..06a3ae4ca 100644 --- a/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc +++ b/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc @@ -6,25 +6,25 @@ LilycoveCity_LilycoveMuseum_2F_MapScripts:: @ 81585AC LilycoveCity_LilycoveMuseum_2F_MapScript1_1585B7:: @ 81585B7 checkflag 160 jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_1585FD - jump LilycoveCity_LilycoveMuseum_2F_EventScript_1585C6 + goto LilycoveCity_LilycoveMuseum_2F_EventScript_1585C6 end LilycoveCity_LilycoveMuseum_2F_EventScript_1585C6:: @ 81585C6 checkflag 161 jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_158615 - jump LilycoveCity_LilycoveMuseum_2F_EventScript_1585D5 + goto LilycoveCity_LilycoveMuseum_2F_EventScript_1585D5 end LilycoveCity_LilycoveMuseum_2F_EventScript_1585D5:: @ 81585D5 checkflag 162 jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_15862D - jump LilycoveCity_LilycoveMuseum_2F_EventScript_1585E4 + goto LilycoveCity_LilycoveMuseum_2F_EventScript_1585E4 end LilycoveCity_LilycoveMuseum_2F_EventScript_1585E4:: @ 81585E4 checkflag 163 jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_158645 - jump LilycoveCity_LilycoveMuseum_2F_EventScript_1585F3 + goto LilycoveCity_LilycoveMuseum_2F_EventScript_1585F3 end LilycoveCity_LilycoveMuseum_2F_EventScript_1585F3:: @ 81585F3 @@ -35,25 +35,25 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_1585F3:: @ 81585F3 LilycoveCity_LilycoveMuseum_2F_EventScript_1585FD:: @ 81585FD setmaptile 10, 6, 606, 1 setmaptile 11, 6, 607, 1 - jump LilycoveCity_LilycoveMuseum_2F_EventScript_1585C6 + goto LilycoveCity_LilycoveMuseum_2F_EventScript_1585C6 end LilycoveCity_LilycoveMuseum_2F_EventScript_158615:: @ 8158615 setmaptile 18, 6, 604, 1 setmaptile 19, 6, 605, 1 - jump LilycoveCity_LilycoveMuseum_2F_EventScript_1585D5 + goto LilycoveCity_LilycoveMuseum_2F_EventScript_1585D5 end LilycoveCity_LilycoveMuseum_2F_EventScript_15862D:: @ 815862D setmaptile 14, 10, 608, 1 setmaptile 15, 10, 609, 1 - jump LilycoveCity_LilycoveMuseum_2F_EventScript_1585E4 + goto LilycoveCity_LilycoveMuseum_2F_EventScript_1585E4 end LilycoveCity_LilycoveMuseum_2F_EventScript_158645:: @ 8158645 setmaptile 6, 10, 602, 1 setmaptile 7, 10, 603, 1 - jump LilycoveCity_LilycoveMuseum_2F_EventScript_1585F3 + goto LilycoveCity_LilycoveMuseum_2F_EventScript_1585F3 end LilycoveCity_LilycoveMuseum_2F_EventScript_15865D:: @ 815865D @@ -118,7 +118,7 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_158735:: @ 8158735 msgbox LilycoveCity_LilycoveMuseum_2F_Text_18802F, 4 move 1, LilycoveCity_LilycoveMuseum_2F_Movement_1586D5 msgbox LilycoveCity_LilycoveMuseum_2F_Text_188041, 4 - jump LilycoveCity_LilycoveMuseum_2F_EventScript_15875C + goto LilycoveCity_LilycoveMuseum_2F_EventScript_15875C end LilycoveCity_LilycoveMuseum_2F_EventScript_15875C:: @ 815875C diff --git a/data/scripts/maps/LittlerootTown.inc b/data/scripts/maps/LittlerootTown.inc index 2a4f77529..2da725de7 100644 --- a/data/scripts/maps/LittlerootTown.inc +++ b/data/scripts/maps/LittlerootTown.inc @@ -371,38 +371,38 @@ LittlerootTown_EventScript_14D860:: @ 814D860 lockall setvar 0x8008, 0 movesprite 4, 10, 9 - jump LittlerootTown_EventScript_14D8B6 + goto LittlerootTown_EventScript_14D8B6 end LittlerootTown_EventScript_14D873:: @ 814D873 lockall setvar 0x8008, 1 movesprite 4, 11, 9 - jump LittlerootTown_EventScript_14D8B6 + goto LittlerootTown_EventScript_14D8B6 end LittlerootTown_EventScript_14D886:: @ 814D886 lockall setvar 0x8008, 2 - jump LittlerootTown_EventScript_14D8B6 + goto LittlerootTown_EventScript_14D8B6 end LittlerootTown_EventScript_14D892:: @ 814D892 lockall setvar 0x8008, 3 - jump LittlerootTown_EventScript_14D8B6 + goto LittlerootTown_EventScript_14D8B6 end LittlerootTown_EventScript_14D89E:: @ 814D89E lockall setvar 0x8008, 4 - jump LittlerootTown_EventScript_14D8B6 + goto LittlerootTown_EventScript_14D8B6 end LittlerootTown_EventScript_14D8AA:: @ 814D8AA lockall setvar 0x8008, 5 - jump LittlerootTown_EventScript_14D8B6 + goto LittlerootTown_EventScript_14D8B6 end LittlerootTown_EventScript_14D8B6:: @ 814D8B6 @@ -429,7 +429,7 @@ LittlerootTown_EventScript_14D8B6:: @ 814D8B6 callif 1, LittlerootTown_EventScript_14DAAA compare RESULT, 1 callif 1, LittlerootTown_EventScript_14DAED - jump LittlerootTown_EventScript_14DD2B + goto LittlerootTown_EventScript_14DD2B end LittlerootTown_EventScript_14D926:: @ 814D926 @@ -856,7 +856,7 @@ LittlerootTown_EventScript_14DCE2:: @ 814DCE2 spriteinvisible 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange - jump LittlerootTown_EventScript_14DD2B + goto LittlerootTown_EventScript_14DD2B end LittlerootTown_EventScript_14DD2B:: @ 814DD2B diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc index 69206566a..849115390 100644 --- a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc @@ -78,14 +78,14 @@ LittlerootTown_BrendansHouse_1F_EventScript_152722:: @ 8152722 lockall setvar 0x8004, 1 setvar 0x8005, 0 - jump LittlerootTown_BrendansHouse_1F_EventScript_1B6956 + goto LittlerootTown_BrendansHouse_1F_EventScript_1B6956 end LittlerootTown_BrendansHouse_1F_EventScript_152733:: @ 8152733 lockall setvar 0x8004, 0 setvar 0x8005, 1 - jump LittlerootTown_BrendansHouse_1F_EventScript_1B6ABF + goto LittlerootTown_BrendansHouse_1F_EventScript_1B6ABF end LittlerootTown_BrendansHouse_1F_EventScript_152744:: @ 8152744 @@ -120,5 +120,5 @@ LittlerootTown_BrendansHouse_1F_EventScript_152789:: @ 8152789 setvar 0x8005, 0 move 0x8004, LittlerootTown_BrendansHouse_1F_Movement_1A083F waitmove 0 - jump LittlerootTown_BrendansHouse_1F_EventScript_1B69B7 + goto LittlerootTown_BrendansHouse_1F_EventScript_1B69B7 end diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc index 5f7f20d63..b70dc0687 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc @@ -78,14 +78,14 @@ LittlerootTown_MaysHouse_1F_EventScript_152960:: @ 8152960 lockall setvar 0x8004, 1 setvar 0x8005, 1 - jump LittlerootTown_MaysHouse_1F_EventScript_1B6956 + goto LittlerootTown_MaysHouse_1F_EventScript_1B6956 end LittlerootTown_MaysHouse_1F_EventScript_152971:: @ 8152971 lockall setvar 0x8004, 1 setvar 0x8005, 1 - jump LittlerootTown_MaysHouse_1F_EventScript_1B6B2E + goto LittlerootTown_MaysHouse_1F_EventScript_1B6B2E end LittlerootTown_MaysHouse_1F_EventScript_152982:: @ 8152982 @@ -167,5 +167,5 @@ LittlerootTown_MaysHouse_1F_EventScript_152A35:: @ 8152A35 setvar 0x8005, 1 move 0x8004, LittlerootTown_MaysHouse_1F_Movement_1A0843 waitmove 0 - jump LittlerootTown_MaysHouse_1F_EventScript_1B69B7 + goto LittlerootTown_MaysHouse_1F_EventScript_1B69B7 end diff --git a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc index 94aeadfa6..80148ce08 100644 --- a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc +++ b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc @@ -39,7 +39,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152CBE:: @ 8152CBE LittlerootTown_ProfessorBirchsLab_EventScript_152CEA:: @ 8152CEA setvar 0x8004, 0 call LittlerootTown_ProfessorBirchsLab_EventScript_1A0678 - jump LittlerootTown_ProfessorBirchsLab_EventScript_152CFA + goto LittlerootTown_ProfessorBirchsLab_EventScript_152CFA end LittlerootTown_ProfessorBirchsLab_EventScript_152CFA:: @ 8152CFA @@ -69,7 +69,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152D4A:: @ 8152D4A lockall move 255, LittlerootTown_ProfessorBirchsLab_Movement_152D5B waitmove 0 - jump LittlerootTown_ProfessorBirchsLab_EventScript_152DBA + goto LittlerootTown_ProfessorBirchsLab_EventScript_152DBA end LittlerootTown_ProfessorBirchsLab_Movement_152D5B:: @ 8152D5B diff --git a/data/scripts/maps/MauvilleCity.inc b/data/scripts/maps/MauvilleCity.inc index 1b2827f2a..78d1961e5 100644 --- a/data/scripts/maps/MauvilleCity.inc +++ b/data/scripts/maps/MauvilleCity.inc @@ -101,7 +101,7 @@ MauvilleCity_EventScript_14C0F9:: @ 814C0F9 move 6, MauvilleCity_Movement_1A0835 waitmove 0 msgbox MauvilleCity_Text_165D50, 5 - jump MauvilleCity_EventScript_14C154 + goto MauvilleCity_EventScript_14C154 end MauvilleCity_EventScript_14C154:: @ 814C154 @@ -131,7 +131,7 @@ MauvilleCity_EventScript_14C187:: @ 814C187 move 6, MauvilleCity_Movement_14C2B6 move 7, MauvilleCity_Movement_14C2DF waitmove 0 - jump MauvilleCity_EventScript_14C22B + goto MauvilleCity_EventScript_14C22B end MauvilleCity_EventScript_14C1D9:: @ 814C1D9 @@ -150,7 +150,7 @@ MauvilleCity_EventScript_14C1D9:: @ 814C1D9 move 6, MauvilleCity_Movement_14C2C1 move 7, MauvilleCity_Movement_14C2E8 waitmove 0 - jump MauvilleCity_EventScript_14C22B + goto MauvilleCity_EventScript_14C22B end MauvilleCity_EventScript_14C22B:: @ 814C22B @@ -186,7 +186,7 @@ MauvilleCity_EventScript_14C292:: @ 814C292 move 6, MauvilleCity_Movement_1A0839 waitmove 0 msgbox MauvilleCity_Text_165EE2, 5 - jump MauvilleCity_EventScript_14C154 + goto MauvilleCity_EventScript_14C154 end MauvilleCity_Movement_14C2AA:: @ 814C2AA diff --git a/data/scripts/maps/MauvilleCity_BikeShop.inc b/data/scripts/maps/MauvilleCity_BikeShop.inc index 5436bf38a..e0faf85a0 100644 --- a/data/scripts/maps/MauvilleCity_BikeShop.inc +++ b/data/scripts/maps/MauvilleCity_BikeShop.inc @@ -41,19 +41,19 @@ MauvilleCity_BikeShop_EventScript_156817:: @ 8156817 MauvilleCity_BikeShop_EventScript_156824:: @ 8156824 setflag 90 - jump MauvilleCity_BikeShop_EventScript_1567F0 + goto MauvilleCity_BikeShop_EventScript_1567F0 end MauvilleCity_BikeShop_EventScript_15682D:: @ 815682D msgbox MauvilleCity_BikeShop_Text_181332, 4 giveitem ITEM_MACH_BIKE - jump MauvilleCity_BikeShop_EventScript_156861 + goto MauvilleCity_BikeShop_EventScript_156861 end MauvilleCity_BikeShop_EventScript_156847:: @ 8156847 msgbox MauvilleCity_BikeShop_Text_18134A, 4 giveitem ITEM_ACRO_BIKE - jump MauvilleCity_BikeShop_EventScript_156861 + goto MauvilleCity_BikeShop_EventScript_156861 end MauvilleCity_BikeShop_EventScript_156861:: @ 8156861 @@ -92,7 +92,7 @@ MauvilleCity_BikeShop_EventScript_1568C9:: @ 81568C9 msgbox MauvilleCity_BikeShop_Text_181439, 4 removeitem ITEM_ACRO_BIKE, 1 giveitem ITEM_MACH_BIKE - jump MauvilleCity_BikeShop_EventScript_156861 + goto MauvilleCity_BikeShop_EventScript_156861 end MauvilleCity_BikeShop_EventScript_1568EA:: @ 81568EA @@ -100,7 +100,7 @@ MauvilleCity_BikeShop_EventScript_1568EA:: @ 81568EA msgbox MauvilleCity_BikeShop_Text_181408, 4 removeitem ITEM_MACH_BIKE, 1 giveitem ITEM_ACRO_BIKE - jump MauvilleCity_BikeShop_EventScript_156861 + goto MauvilleCity_BikeShop_EventScript_156861 end MauvilleCity_BikeShop_EventScript_15690B:: @ 815690B @@ -110,7 +110,7 @@ MauvilleCity_BikeShop_EventScript_15690B:: @ 815690B MauvilleCity_BikeShop_EventScript_156914:: @ 8156914 message MauvilleCity_BikeShop_Text_1815EA waittext - jump MauvilleCity_BikeShop_EventScript_156920 + goto MauvilleCity_BikeShop_EventScript_156920 end MauvilleCity_BikeShop_EventScript_156920:: @ 8156920 @@ -126,19 +126,19 @@ MauvilleCity_BikeShop_EventScript_156920:: @ 8156920 MauvilleCity_BikeShop_EventScript_156962:: @ 8156962 message MauvilleCity_BikeShop_Text_18162C waittext - jump MauvilleCity_BikeShop_EventScript_156920 + goto MauvilleCity_BikeShop_EventScript_156920 end MauvilleCity_BikeShop_EventScript_15696E:: @ 815696E message MauvilleCity_BikeShop_Text_1816F5 waittext - jump MauvilleCity_BikeShop_EventScript_156920 + goto MauvilleCity_BikeShop_EventScript_156920 end MauvilleCity_BikeShop_EventScript_15697A:: @ 815697A message MauvilleCity_BikeShop_Text_1817BF waittext - jump MauvilleCity_BikeShop_EventScript_156920 + goto MauvilleCity_BikeShop_EventScript_156920 end MauvilleCity_BikeShop_EventScript_156986:: @ 8156986 @@ -148,7 +148,7 @@ MauvilleCity_BikeShop_EventScript_156986:: @ 8156986 MauvilleCity_BikeShop_EventScript_156988:: @ 8156988 message MauvilleCity_BikeShop_Text_181892 waittext - jump MauvilleCity_BikeShop_EventScript_156994 + goto MauvilleCity_BikeShop_EventScript_156994 end MauvilleCity_BikeShop_EventScript_156994:: @ 8156994 @@ -164,19 +164,19 @@ MauvilleCity_BikeShop_EventScript_156994:: @ 8156994 MauvilleCity_BikeShop_EventScript_1569D6:: @ 81569D6 message MauvilleCity_BikeShop_Text_1818D4 waittext - jump MauvilleCity_BikeShop_EventScript_156994 + goto MauvilleCity_BikeShop_EventScript_156994 end MauvilleCity_BikeShop_EventScript_1569E2:: @ 81569E2 message MauvilleCity_BikeShop_Text_18199A waittext - jump MauvilleCity_BikeShop_EventScript_156994 + goto MauvilleCity_BikeShop_EventScript_156994 end MauvilleCity_BikeShop_EventScript_1569EE:: @ 81569EE message MauvilleCity_BikeShop_Text_181A3D waittext - jump MauvilleCity_BikeShop_EventScript_156994 + goto MauvilleCity_BikeShop_EventScript_156994 end MauvilleCity_BikeShop_EventScript_1569FA:: @ 81569FA diff --git a/data/scripts/maps/MauvilleCity_GameCorner.inc b/data/scripts/maps/MauvilleCity_GameCorner.inc index f20a7dacd..fa5b58885 100644 --- a/data/scripts/maps/MauvilleCity_GameCorner.inc +++ b/data/scripts/maps/MauvilleCity_GameCorner.inc @@ -11,16 +11,16 @@ MauvilleCity_GameCorner_EventScript_156A34:: @ 8156A34 message MauvilleCity_GameCorner_Text_181CB4 waittext showmoney 0, 0 - snop + nop showcoins 0, 5 - jump MauvilleCity_GameCorner_EventScript_156A60 + goto MauvilleCity_GameCorner_EventScript_156A60 MauvilleCity_GameCorner_EventScript_156A60:: @ 8156A60 multichoicedef 15, 0, 49, 0, 0 switch RESULT case 0, MauvilleCity_GameCorner_EventScript_156AAE case 1, MauvilleCity_GameCorner_EventScript_156AF0 - jump MauvilleCity_GameCorner_EventScript_156B4C + goto MauvilleCity_GameCorner_EventScript_156B4C end @ 8156A87 @@ -28,7 +28,7 @@ MauvilleCity_GameCorner_EventScript_156A60:: @ 8156A60 switch RESULT case 0, MauvilleCity_GameCorner_EventScript_156AAE case 1, MauvilleCity_GameCorner_EventScript_156AF0 - jump MauvilleCity_GameCorner_EventScript_156B4C + goto MauvilleCity_GameCorner_EventScript_156B4C end MauvilleCity_GameCorner_EventScript_156AAE:: @ 8156AAE @@ -41,7 +41,7 @@ MauvilleCity_GameCorner_EventScript_156AAE:: @ 8156AAE givecoins 50 paymoney 0x3e8, 0 updatemoney 0, 0 - snop + nop updatecoins 0, 5 playsfx 95 msgbox MauvilleCity_GameCorner_Text_181CFE, 4 @@ -60,7 +60,7 @@ MauvilleCity_GameCorner_EventScript_156AF0:: @ 8156AF0 givecoins 500 paymoney 0x2710, 0 updatemoney 0, 0 - snop + nop updatecoins 0, 5 playsfx 95 msgbox MauvilleCity_GameCorner_Text_181CFE, 4 @@ -110,12 +110,12 @@ MauvilleCity_GameCorner_EventScript_156B88:: @ 8156B88 waittext showcoins 0, 0 setvar 0x4001, 0 - jump MauvilleCity_GameCorner_EventScript_156BA6 + goto MauvilleCity_GameCorner_EventScript_156BA6 MauvilleCity_GameCorner_EventScript_156B9B:: @ 8156B9B message MauvilleCity_GameCorner_Text_181E17 waittext - jump MauvilleCity_GameCorner_EventScript_156BA6 + goto MauvilleCity_GameCorner_EventScript_156BA6 MauvilleCity_GameCorner_EventScript_156BA6:: @ 8156BA6 multichoice 12, 0, 48, 0 @@ -124,23 +124,23 @@ MauvilleCity_GameCorner_EventScript_156BA6:: @ 8156BA6 case 1, MauvilleCity_GameCorner_EventScript_156BF0 case 2, MauvilleCity_GameCorner_EventScript_156BFE case 3, MauvilleCity_GameCorner_EventScript_156D0D - jump MauvilleCity_GameCorner_EventScript_156D0D + goto MauvilleCity_GameCorner_EventScript_156D0D end MauvilleCity_GameCorner_EventScript_156BE2:: @ 8156BE2 setvar 0x4001, 1 bufferdecor 0, 88 - jump MauvilleCity_GameCorner_EventScript_156C0C + goto MauvilleCity_GameCorner_EventScript_156C0C MauvilleCity_GameCorner_EventScript_156BF0:: @ 8156BF0 setvar 0x4001, 2 bufferdecor 0, 89 - jump MauvilleCity_GameCorner_EventScript_156C0C + goto MauvilleCity_GameCorner_EventScript_156C0C MauvilleCity_GameCorner_EventScript_156BFE:: @ 8156BFE setvar 0x4001, 3 bufferdecor 0, 90 - jump MauvilleCity_GameCorner_EventScript_156C0C + goto MauvilleCity_GameCorner_EventScript_156C0C MauvilleCity_GameCorner_EventScript_156C0C:: @ 8156C0C msgbox MauvilleCity_GameCorner_Text_181E33, 5 @@ -165,7 +165,7 @@ MauvilleCity_GameCorner_EventScript_156C46:: @ 8156C46 updatecoins 0, 0 playsfx 95 msgbox MauvilleCity_GameCorner_Text_181E49, 4 - jump MauvilleCity_GameCorner_EventScript_156B9B + goto MauvilleCity_GameCorner_EventScript_156B9B end MauvilleCity_GameCorner_EventScript_156C80:: @ 8156C80 @@ -181,7 +181,7 @@ MauvilleCity_GameCorner_EventScript_156C80:: @ 8156C80 updatecoins 0, 0 playsfx 95 msgbox MauvilleCity_GameCorner_Text_181E49, 4 - jump MauvilleCity_GameCorner_EventScript_156B9B + goto MauvilleCity_GameCorner_EventScript_156B9B end MauvilleCity_GameCorner_EventScript_156CBA:: @ 8156CBA @@ -197,17 +197,17 @@ MauvilleCity_GameCorner_EventScript_156CBA:: @ 8156CBA updatecoins 0, 0 playsfx 95 msgbox MauvilleCity_GameCorner_Text_181E49, 4 - jump MauvilleCity_GameCorner_EventScript_156B9B + goto MauvilleCity_GameCorner_EventScript_156B9B end MauvilleCity_GameCorner_EventScript_156CF4:: @ 8156CF4 msgbox MauvilleCity_GameCorner_Text_181E76, 4 - jump MauvilleCity_GameCorner_EventScript_156B9B + goto MauvilleCity_GameCorner_EventScript_156B9B end MauvilleCity_GameCorner_EventScript_156D02:: @ 8156D02 call MauvilleCity_GameCorner_EventScript_1A02B8 - jump MauvilleCity_GameCorner_EventScript_156B9B + goto MauvilleCity_GameCorner_EventScript_156B9B end MauvilleCity_GameCorner_EventScript_156D0D:: @ 8156D0D @@ -231,12 +231,12 @@ MauvilleCity_GameCorner_EventScript_156D36:: @ 8156D36 waittext showcoins 0, 0 setvar 0x4001, 0 - jump MauvilleCity_GameCorner_EventScript_156D54 + goto MauvilleCity_GameCorner_EventScript_156D54 MauvilleCity_GameCorner_EventScript_156D49:: @ 8156D49 message MauvilleCity_GameCorner_Text_181E17 waittext - jump MauvilleCity_GameCorner_EventScript_156D54 + goto MauvilleCity_GameCorner_EventScript_156D54 MauvilleCity_GameCorner_EventScript_156D54:: @ 8156D54 multichoice 12, 0, 55, 0 @@ -247,33 +247,33 @@ MauvilleCity_GameCorner_EventScript_156D54:: @ 8156D54 case 3, MauvilleCity_GameCorner_EventScript_156DD0 case 4, MauvilleCity_GameCorner_EventScript_156DDE case 5, MauvilleCity_GameCorner_EventScript_156F77 - jump MauvilleCity_GameCorner_EventScript_156F77 + goto MauvilleCity_GameCorner_EventScript_156F77 end MauvilleCity_GameCorner_EventScript_156DA6:: @ 8156DA6 setvar 0x4001, 1 bufferitem 0, ITEM_TM32 - jump MauvilleCity_GameCorner_EventScript_156DEC + goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DB4:: @ 8156DB4 setvar 0x4001, 2 bufferitem 0, ITEM_TM29 - jump MauvilleCity_GameCorner_EventScript_156DEC + goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DC2:: @ 8156DC2 setvar 0x4001, 3 bufferitem 0, ITEM_TM35 - jump MauvilleCity_GameCorner_EventScript_156DEC + goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DD0:: @ 8156DD0 setvar 0x4001, 4 bufferitem 0, ITEM_TM24 - jump MauvilleCity_GameCorner_EventScript_156DEC + goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DDE:: @ 8156DDE setvar 0x4001, 5 bufferitem 0, ITEM_TM13 - jump MauvilleCity_GameCorner_EventScript_156DEC + goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DEC:: @ 8156DEC msgbox MauvilleCity_GameCorner_Text_181E33, 5 @@ -299,7 +299,7 @@ MauvilleCity_GameCorner_EventScript_156E3C:: @ 8156E3C updatecoins 0, 0 playsfx 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 - jump MauvilleCity_GameCorner_EventScript_156D49 + goto MauvilleCity_GameCorner_EventScript_156D49 end MauvilleCity_GameCorner_EventScript_156E76:: @ 8156E76 @@ -314,7 +314,7 @@ MauvilleCity_GameCorner_EventScript_156E76:: @ 8156E76 updatecoins 0, 0 playsfx 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 - jump MauvilleCity_GameCorner_EventScript_156D49 + goto MauvilleCity_GameCorner_EventScript_156D49 end MauvilleCity_GameCorner_EventScript_156EB0:: @ 8156EB0 @@ -329,7 +329,7 @@ MauvilleCity_GameCorner_EventScript_156EB0:: @ 8156EB0 updatecoins 0, 0 playsfx 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 - jump MauvilleCity_GameCorner_EventScript_156D49 + goto MauvilleCity_GameCorner_EventScript_156D49 end MauvilleCity_GameCorner_EventScript_156EEA:: @ 8156EEA @@ -344,7 +344,7 @@ MauvilleCity_GameCorner_EventScript_156EEA:: @ 8156EEA updatecoins 0, 0 playsfx 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 - jump MauvilleCity_GameCorner_EventScript_156D49 + goto MauvilleCity_GameCorner_EventScript_156D49 end MauvilleCity_GameCorner_EventScript_156F24:: @ 8156F24 @@ -359,17 +359,17 @@ MauvilleCity_GameCorner_EventScript_156F24:: @ 8156F24 updatecoins 0, 0 playsfx 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 - jump MauvilleCity_GameCorner_EventScript_156D49 + goto MauvilleCity_GameCorner_EventScript_156D49 end MauvilleCity_GameCorner_EventScript_156F5E:: @ 8156F5E msgbox MauvilleCity_GameCorner_Text_181E76, 4 - jump MauvilleCity_GameCorner_EventScript_156D49 + goto MauvilleCity_GameCorner_EventScript_156D49 end MauvilleCity_GameCorner_EventScript_156F6C:: @ 8156F6C call MauvilleCity_GameCorner_EventScript_1A02A5 - jump MauvilleCity_GameCorner_EventScript_156D49 + goto MauvilleCity_GameCorner_EventScript_156D49 end MauvilleCity_GameCorner_EventScript_156F77:: @ 8156F77 @@ -408,7 +408,7 @@ MauvilleCity_GameCorner_EventScript_156FDB:: @ 8156FDB msgbox MauvilleCity_GameCorner_Text_181F89, 4 givedecoration 88 setflag 226 - jump MauvilleCity_GameCorner_EventScript_157072 + goto MauvilleCity_GameCorner_EventScript_157072 end MauvilleCity_GameCorner_EventScript_157005:: @ 8157005 @@ -419,7 +419,7 @@ MauvilleCity_GameCorner_EventScript_157005:: @ 8157005 msgbox MauvilleCity_GameCorner_Text_181F89, 4 givedecoration 89 setflag 226 - jump MauvilleCity_GameCorner_EventScript_157072 + goto MauvilleCity_GameCorner_EventScript_157072 end MauvilleCity_GameCorner_EventScript_15702F:: @ 815702F @@ -430,7 +430,7 @@ MauvilleCity_GameCorner_EventScript_15702F:: @ 815702F msgbox MauvilleCity_GameCorner_Text_181F89, 4 givedecoration 90 setflag 226 - jump MauvilleCity_GameCorner_EventScript_157072 + goto MauvilleCity_GameCorner_EventScript_157072 end MauvilleCity_GameCorner_EventScript_157059:: @ 8157059 @@ -456,7 +456,7 @@ MauvilleCity_GameCorner_EventScript_15707C:: @ 815707C compare RESULT, 1 jumpeq MauvilleCity_GameCorner_EventScript_15709C msgbox MauvilleCity_GameCorner_Text_18201E, 4 - jump MauvilleCity_GameCorner_EventScript_157108 + goto MauvilleCity_GameCorner_EventScript_157108 end MauvilleCity_GameCorner_EventScript_15709C:: @ 815709C @@ -469,33 +469,33 @@ MauvilleCity_GameCorner_EventScript_15709C:: @ 815709C givecoins 20 msgbox MauvilleCity_GameCorner_Text_18208E, 4 playsfx 95 - jump MauvilleCity_GameCorner_EventScript_1570CA + goto MauvilleCity_GameCorner_EventScript_1570CA end MauvilleCity_GameCorner_EventScript_1570CA:: @ 81570CA msgbox MauvilleCity_GameCorner_Text_1820DD, 4 - jump MauvilleCity_GameCorner_EventScript_157108 + goto MauvilleCity_GameCorner_EventScript_157108 end MauvilleCity_GameCorner_EventScript_1570D8:: @ 81570D8 lock faceplayer msgbox MauvilleCity_GameCorner_Text_182120, 4 - jump MauvilleCity_GameCorner_EventScript_157108 + goto MauvilleCity_GameCorner_EventScript_157108 end MauvilleCity_GameCorner_EventScript_1570E8:: @ 81570E8 lock faceplayer msgbox MauvilleCity_GameCorner_Text_18217C, 4 - jump MauvilleCity_GameCorner_EventScript_157108 + goto MauvilleCity_GameCorner_EventScript_157108 end MauvilleCity_GameCorner_EventScript_1570F8:: @ 81570F8 lock faceplayer msgbox MauvilleCity_GameCorner_Text_182241, 4 - jump MauvilleCity_GameCorner_EventScript_157108 + goto MauvilleCity_GameCorner_EventScript_157108 end MauvilleCity_GameCorner_EventScript_157108:: @ 8157108 @@ -509,14 +509,14 @@ MauvilleCity_GameCorner_EventScript_157115:: @ 8157115 lock faceplayer msgbox MauvilleCity_GameCorner_Text_182272, 4 - jump MauvilleCity_GameCorner_EventScript_157108 + goto MauvilleCity_GameCorner_EventScript_157108 end MauvilleCity_GameCorner_EventScript_157125:: @ 8157125 lock faceplayer msgbox MauvilleCity_GameCorner_Text_1822F4, 4 - jump MauvilleCity_GameCorner_EventScript_157108 + goto MauvilleCity_GameCorner_EventScript_157108 end MauvilleCity_GameCorner_EventScript_157135:: @ 8157135 diff --git a/data/scripts/maps/MauvilleCity_Gym.inc b/data/scripts/maps/MauvilleCity_Gym.inc index bd5c119f3..75136dcef 100644 --- a/data/scripts/maps/MauvilleCity_Gym.inc +++ b/data/scripts/maps/MauvilleCity_Gym.inc @@ -48,19 +48,19 @@ MauvilleCity_Gym_EventScript_15649B:: @ 815649B MauvilleCity_Gym_EventScript_15657D:: @ 815657D setvar 0x8004, 0 special MauvilleGymSpecial1 - jump MauvilleCity_Gym_EventScript_156491 + goto MauvilleCity_Gym_EventScript_156491 end MauvilleCity_Gym_EventScript_15658B:: @ 815658B setvar 0x8004, 1 special MauvilleGymSpecial1 - jump MauvilleCity_Gym_EventScript_156491 + goto MauvilleCity_Gym_EventScript_156491 end MauvilleCity_Gym_EventScript_156599:: @ 8156599 setvar 0x8004, 2 special MauvilleGymSpecial1 - jump MauvilleCity_Gym_EventScript_156491 + goto MauvilleCity_Gym_EventScript_156491 end MauvilleCity_Gym_EventScript_1565A7:: @ 81565A7 @@ -92,7 +92,7 @@ MauvilleCity_Gym_EventScript_1565DB:: @ 81565DB special MauvilleGymSpecial3 special DrawWholeMapView playsfx 44 - jump MauvilleCity_Gym_EventScript_15661D + goto MauvilleCity_Gym_EventScript_15661D end MauvilleCity_Gym_EventScript_15661D:: @ 815661D @@ -117,7 +117,7 @@ MauvilleCity_Gym_EventScript_15664B:: @ 815664B jumpeq MauvilleCity_Gym_EventScript_1566DA setvar 0x4093, 1 setvar 0x8004, 0 - jump MauvilleCity_Gym_EventScript_1566BA + goto MauvilleCity_Gym_EventScript_1566BA end MauvilleCity_Gym_EventScript_156670:: @ 8156670 @@ -128,7 +128,7 @@ MauvilleCity_Gym_EventScript_156670:: @ 8156670 jumpeq MauvilleCity_Gym_EventScript_1566DA setvar 0x4093, 2 setvar 0x8004, 1 - jump MauvilleCity_Gym_EventScript_1566BA + goto MauvilleCity_Gym_EventScript_1566BA end MauvilleCity_Gym_EventScript_156695:: @ 8156695 @@ -139,7 +139,7 @@ MauvilleCity_Gym_EventScript_156695:: @ 8156695 jumpeq MauvilleCity_Gym_EventScript_1566DA setvar 0x4093, 3 setvar 0x8004, 2 - jump MauvilleCity_Gym_EventScript_1566BA + goto MauvilleCity_Gym_EventScript_1566BA end MauvilleCity_Gym_EventScript_1566BA:: @ 81566BA @@ -206,14 +206,14 @@ MauvilleCity_Gym_EventScript_156761:: @ 8156761 lockall checkflag 2057 jumpeq MauvilleCity_Gym_EventScript_156781 - jump MauvilleCity_Gym_EventScript_15678B + goto MauvilleCity_Gym_EventScript_15678B end MauvilleCity_Gym_EventScript_156771:: @ 8156771 lockall checkflag 2057 jumpeq MauvilleCity_Gym_EventScript_156781 - jump MauvilleCity_Gym_EventScript_15678B + goto MauvilleCity_Gym_EventScript_15678B end MauvilleCity_Gym_EventScript_156781:: @ 8156781 diff --git a/data/scripts/maps/MauvilleCity_House2.inc b/data/scripts/maps/MauvilleCity_House2.inc index 8a73af034..edb74f9f9 100644 --- a/data/scripts/maps/MauvilleCity_House2.inc +++ b/data/scripts/maps/MauvilleCity_House2.inc @@ -31,7 +31,7 @@ MauvilleCity_House2_EventScript_15731B:: @ 815731B removeitem ITEM_HARBOR_MAIL, 1 giveitem ITEM_COIN_CASE setflag 258 - jump MauvilleCity_House2_EventScript_15733D + goto MauvilleCity_House2_EventScript_15733D end MauvilleCity_House2_EventScript_15733D:: @ 815733D diff --git a/data/scripts/maps/MauvilleCity_PokemonCenter_1F.inc b/data/scripts/maps/MauvilleCity_PokemonCenter_1F.inc index b2b5dabd4..0e9ba15ef 100644 --- a/data/scripts/maps/MauvilleCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/MauvilleCity_PokemonCenter_1F.inc @@ -5,7 +5,7 @@ MauvilleCity_PokemonCenter_1F_MapScripts:: @ 8157351 MauvilleCity_PokemonCenter_1F_MapScript1_157357:: @ 8157357 sethealplace 5 call MauvilleCity_PokemonCenter_1F_EventScript_19FD1B - jump MauvilleCity_PokemonCenter_1F_EventScript_157365 + goto MauvilleCity_PokemonCenter_1F_EventScript_157365 end MauvilleCity_PokemonCenter_1F_EventScript_157365:: @ 8157365 diff --git a/data/scripts/maps/MossdeepCity_Gym.inc b/data/scripts/maps/MossdeepCity_Gym.inc index 20f43a150..733f6816e 100644 --- a/data/scripts/maps/MossdeepCity_Gym.inc +++ b/data/scripts/maps/MossdeepCity_Gym.inc @@ -5,19 +5,19 @@ MossdeepCity_Gym_MapScripts:: @ 815A4D3 MossdeepCity_Gym_MapScript1_15A4D9:: @ 815A4D9 checkflag 100 jumpeq MossdeepCity_Gym_EventScript_15A510 - jump MossdeepCity_Gym_EventScript_15A4E8 + goto MossdeepCity_Gym_EventScript_15A4E8 end MossdeepCity_Gym_EventScript_15A4E8:: @ 815A4E8 checkflag 101 jumpeq MossdeepCity_Gym_EventScript_15A528 - jump MossdeepCity_Gym_EventScript_15A4F7 + goto MossdeepCity_Gym_EventScript_15A4F7 end MossdeepCity_Gym_EventScript_15A4F7:: @ 815A4F7 checkflag 102 jumpeq MossdeepCity_Gym_EventScript_15A540 - jump MossdeepCity_Gym_EventScript_15A506 + goto MossdeepCity_Gym_EventScript_15A506 end MossdeepCity_Gym_EventScript_15A506:: @ 815A506 @@ -28,19 +28,19 @@ MossdeepCity_Gym_EventScript_15A506:: @ 815A506 MossdeepCity_Gym_EventScript_15A510:: @ 815A510 setmaptile 5, 5, 516, 0 setmaptile 2, 7, 569, 1 - jump MossdeepCity_Gym_EventScript_15A4E8 + goto MossdeepCity_Gym_EventScript_15A4E8 end MossdeepCity_Gym_EventScript_15A528:: @ 815A528 setmaptile 8, 14, 516, 0 setmaptile 8, 10, 569, 1 - jump MossdeepCity_Gym_EventScript_15A4F7 + goto MossdeepCity_Gym_EventScript_15A4F7 end MossdeepCity_Gym_EventScript_15A540:: @ 815A540 setmaptile 15, 17, 524, 0 setmaptile 17, 15, 569, 1 - jump MossdeepCity_Gym_EventScript_15A506 + goto MossdeepCity_Gym_EventScript_15A506 end MossdeepCity_Gym_EventScript_15A558:: @ 815A558 @@ -68,7 +68,7 @@ MossdeepCity_Gym_EventScript_15A594:: @ 815A594 setvar 0x8008, 7 call MossdeepCity_Gym_EventScript_1A01C0 clearflag 905 - jump MossdeepCity_Gym_EventScript_15A5C6 + goto MossdeepCity_Gym_EventScript_15A5C6 end MossdeepCity_Gym_EventScript_15A5C6:: @ 815A5C6 @@ -89,7 +89,7 @@ MossdeepCity_Gym_EventScript_15A5EA:: @ 815A5EA waitmove 0 setmaptile 5, 5, 516, 0 setmaptile 2, 7, 569, 1 - jump MossdeepCity_Gym_EventScript_15A619 + goto MossdeepCity_Gym_EventScript_15A619 end MossdeepCity_Gym_EventScript_15A619:: @ 815A619 @@ -104,7 +104,7 @@ MossdeepCity_Gym_EventScript_15A621:: @ 815A621 waitmove 0 setmaptile 5, 5, 524, 0 setmaptile 2, 7, 568, 1 - jump MossdeepCity_Gym_EventScript_15A619 + goto MossdeepCity_Gym_EventScript_15A619 end MossdeepCity_Gym_EventScript_15A646:: @ 815A646 @@ -116,7 +116,7 @@ MossdeepCity_Gym_EventScript_15A646:: @ 815A646 waitmove 0 setmaptile 8, 14, 516, 0 setmaptile 8, 10, 569, 1 - jump MossdeepCity_Gym_EventScript_15A619 + goto MossdeepCity_Gym_EventScript_15A619 end MossdeepCity_Gym_EventScript_15A675:: @ 815A675 @@ -125,7 +125,7 @@ MossdeepCity_Gym_EventScript_15A675:: @ 815A675 waitmove 0 setmaptile 8, 14, 517, 0 setmaptile 8, 10, 568, 1 - jump MossdeepCity_Gym_EventScript_15A619 + goto MossdeepCity_Gym_EventScript_15A619 end MossdeepCity_Gym_EventScript_15A69A:: @ 815A69A @@ -137,7 +137,7 @@ MossdeepCity_Gym_EventScript_15A69A:: @ 815A69A waitmove 0 setmaptile 15, 17, 524, 0 setmaptile 17, 15, 569, 1 - jump MossdeepCity_Gym_EventScript_15A619 + goto MossdeepCity_Gym_EventScript_15A619 end MossdeepCity_Gym_EventScript_15A6C9:: @ 815A6C9 @@ -146,7 +146,7 @@ MossdeepCity_Gym_EventScript_15A6C9:: @ 815A6C9 waitmove 0 setmaptile 15, 17, 516, 0 setmaptile 17, 15, 568, 1 - jump MossdeepCity_Gym_EventScript_15A619 + goto MossdeepCity_Gym_EventScript_15A619 end MossdeepCity_Gym_EventScript_15A6EE:: @ 815A6EE @@ -158,7 +158,7 @@ MossdeepCity_Gym_EventScript_15A6EE:: @ 815A6EE waitmove 0 setmaptile 1, 23, 525, 0 setmaptile 5, 24, 569, 1 - jump MossdeepCity_Gym_EventScript_15A619 + goto MossdeepCity_Gym_EventScript_15A619 end MossdeepCity_Gym_EventScript_15A71D:: @ 815A71D @@ -167,7 +167,7 @@ MossdeepCity_Gym_EventScript_15A71D:: @ 815A71D waitmove 0 setmaptile 1, 23, 516, 0 setmaptile 5, 24, 568, 1 - jump MossdeepCity_Gym_EventScript_15A619 + goto MossdeepCity_Gym_EventScript_15A619 end MossdeepCity_Gym_EventScript_15A742:: @ 815A742 @@ -230,14 +230,14 @@ MossdeepCity_Gym_EventScript_15A7FA:: @ 815A7FA lockall checkflag 2061 jumpeq MossdeepCity_Gym_EventScript_15A81A - jump MossdeepCity_Gym_EventScript_15A824 + goto MossdeepCity_Gym_EventScript_15A824 end MossdeepCity_Gym_EventScript_15A80A:: @ 815A80A lockall checkflag 2061 jumpeq MossdeepCity_Gym_EventScript_15A81A - jump MossdeepCity_Gym_EventScript_15A824 + goto MossdeepCity_Gym_EventScript_15A824 end MossdeepCity_Gym_EventScript_15A81A:: @ 815A81A diff --git a/data/scripts/maps/MtChimney.inc b/data/scripts/maps/MtChimney.inc index fdebcf102..0134adbdf 100644 --- a/data/scripts/maps/MtChimney.inc +++ b/data/scripts/maps/MtChimney.inc @@ -16,7 +16,7 @@ MtChimney_EventScript_15CF95:: @ 815CF95 lock faceplayer showmoney 0, 0 - snop + nop msgbox MtChimney_Text_195760, 5 compare RESULT, 0 jumpeq MtChimney_EventScript_15D00B @@ -43,7 +43,7 @@ MtChimney_EventScript_15CFF3:: @ 815CFF3 MtChimney_EventScript_15D000:: @ 815D000 paymoney 0xc8, 0 updatemoney 0, 0 - snop + nop return MtChimney_EventScript_15D00B:: @ 815D00B diff --git a/data/scripts/maps/MtPyre_Summit.inc b/data/scripts/maps/MtPyre_Summit.inc index e352ac30e..f30b6fb9e 100644 --- a/data/scripts/maps/MtPyre_Summit.inc +++ b/data/scripts/maps/MtPyre_Summit.inc @@ -9,19 +9,19 @@ MtPyre_Summit_MapScript1_15D4B7:: @ 815D4B7 MtPyre_Summit_EventScript_15D4BD:: @ 815D4BD lockall setvar 0x8008, 0 - jump MtPyre_Summit_EventScript_15D4E1 + goto MtPyre_Summit_EventScript_15D4E1 end MtPyre_Summit_EventScript_15D4C9:: @ 815D4C9 lockall setvar 0x8008, 1 - jump MtPyre_Summit_EventScript_15D4E1 + goto MtPyre_Summit_EventScript_15D4E1 end MtPyre_Summit_EventScript_15D4D5:: @ 815D4D5 lockall setvar 0x8008, 2 - jump MtPyre_Summit_EventScript_15D4E1 + goto MtPyre_Summit_EventScript_15D4E1 end MtPyre_Summit_EventScript_15D4E1:: @ 815D4E1 @@ -247,19 +247,19 @@ MtPyre_Summit_EventScript_15D6C4:: @ 815D6C4 MtPyre_Summit_EventScript_15D6CE:: @ 815D6CE lockall setvar 0x8008, 0 - jump MtPyre_Summit_EventScript_15D6F2 + goto MtPyre_Summit_EventScript_15D6F2 end MtPyre_Summit_EventScript_15D6DA:: @ 815D6DA lockall setvar 0x8008, 1 - jump MtPyre_Summit_EventScript_15D6F2 + goto MtPyre_Summit_EventScript_15D6F2 end MtPyre_Summit_EventScript_15D6E6:: @ 815D6E6 lockall setvar 0x8008, 2 - jump MtPyre_Summit_EventScript_15D6F2 + goto MtPyre_Summit_EventScript_15D6F2 end MtPyre_Summit_EventScript_15D6F2:: @ 815D6F2 diff --git a/data/scripts/maps/OldaleTown.inc b/data/scripts/maps/OldaleTown.inc index 68ed80949..f1d554d87 100644 --- a/data/scripts/maps/OldaleTown.inc +++ b/data/scripts/maps/OldaleTown.inc @@ -56,21 +56,21 @@ OldaleTown_EventScript_14DE07:: @ 814DE07 move 2, OldaleTown_Movement_14DE97 move 255, OldaleTown_Movement_14DEC1 waitmove 0 - jump OldaleTown_EventScript_14DE4C + goto OldaleTown_EventScript_14DE4C end OldaleTown_EventScript_14DE1E:: @ 814DE1E move 2, OldaleTown_Movement_14DEA2 move 255, OldaleTown_Movement_14DECB waitmove 0 - jump OldaleTown_EventScript_14DE4C + goto OldaleTown_EventScript_14DE4C end OldaleTown_EventScript_14DE35:: @ 814DE35 move 255, OldaleTown_Movement_14DEB9 move 2, OldaleTown_Movement_14DE8E waitmove 0 - jump OldaleTown_EventScript_14DE4C + goto OldaleTown_EventScript_14DE4C end OldaleTown_EventScript_14DE4C:: @ 814DE4C @@ -225,7 +225,7 @@ OldaleTown_EventScript_14DF30:: @ 814DF30 lockall move 4, OldaleTown_Movement_1A0839 waitmove 0 - jump OldaleTown_EventScript_14DF92 + goto OldaleTown_EventScript_14DF92 end OldaleTown_EventScript_14DF41:: @ 814DF41 @@ -234,7 +234,7 @@ OldaleTown_EventScript_14DF41:: @ 814DF41 waitmove 0 move 255, OldaleTown_Movement_1A0843 waitmove 0 - jump OldaleTown_EventScript_14DF92 + goto OldaleTown_EventScript_14DF92 end OldaleTown_EventScript_14DF5C:: @ 814DF5C @@ -243,7 +243,7 @@ OldaleTown_EventScript_14DF5C:: @ 814DF5C waitmove 0 move 255, OldaleTown_Movement_1A0843 waitmove 0 - jump OldaleTown_EventScript_14DF92 + goto OldaleTown_EventScript_14DF92 end OldaleTown_EventScript_14DF77:: @ 814DF77 @@ -252,7 +252,7 @@ OldaleTown_EventScript_14DF77:: @ 814DF77 waitmove 0 move 255, OldaleTown_Movement_1A0843 waitmove 0 - jump OldaleTown_EventScript_14DF92 + goto OldaleTown_EventScript_14DF92 end OldaleTown_EventScript_14DF92:: @ 814DF92 @@ -265,12 +265,12 @@ OldaleTown_EventScript_14DF92:: @ 814DF92 OldaleTown_EventScript_14DFAA:: @ 814DFAA msgbox OldaleTown_Text_16B196, 4 - jump OldaleTown_EventScript_14DFC6 + goto OldaleTown_EventScript_14DFC6 end OldaleTown_EventScript_14DFB8:: @ 814DFB8 msgbox OldaleTown_Text_16B1BE, 4 - jump OldaleTown_EventScript_14DFC6 + goto OldaleTown_EventScript_14DFC6 end OldaleTown_EventScript_14DFC6:: @ 814DFC6 diff --git a/data/scripts/maps/PacifidlogTown_House2.inc b/data/scripts/maps/PacifidlogTown_House2.inc index e45f09de4..f2174441f 100644 --- a/data/scripts/maps/PacifidlogTown_House2.inc +++ b/data/scripts/maps/PacifidlogTown_House2.inc @@ -19,7 +19,7 @@ PacifidlogTown_House2_EventScript_154168:: @ 8154168 specialval RESULT, GetLeadMonFriendshipScore compare RESULT, 2 jumpif 4, PacifidlogTown_House2_EventScript_15421B - jump PacifidlogTown_House2_EventScript_154225 + goto PacifidlogTown_House2_EventScript_154225 end PacifidlogTown_House2_EventScript_1541B4:: @ 81541B4 diff --git a/data/scripts/maps/PetalburgCity.inc b/data/scripts/maps/PetalburgCity.inc index 123b099fe..ed575844c 100644 --- a/data/scripts/maps/PetalburgCity.inc +++ b/data/scripts/maps/PetalburgCity.inc @@ -157,25 +157,25 @@ PetalburgCity_EventScript_14B82D:: @ 814B82D PetalburgCity_EventScript_14B836:: @ 814B836 lockall setvar 0x8008, 0 - jump PetalburgCity_EventScript_14B866 + goto PetalburgCity_EventScript_14B866 end PetalburgCity_EventScript_14B842:: @ 814B842 lockall setvar 0x8008, 1 - jump PetalburgCity_EventScript_14B866 + goto PetalburgCity_EventScript_14B866 end PetalburgCity_EventScript_14B84E:: @ 814B84E lockall setvar 0x8008, 2 - jump PetalburgCity_EventScript_14B866 + goto PetalburgCity_EventScript_14B866 end PetalburgCity_EventScript_14B85A:: @ 814B85A lockall setvar 0x8008, 3 - jump PetalburgCity_EventScript_14B866 + goto PetalburgCity_EventScript_14B866 end PetalburgCity_EventScript_14B866:: @ 814B866 diff --git a/data/scripts/maps/PetalburgCity_Gym.inc b/data/scripts/maps/PetalburgCity_Gym.inc index c534cb538..f8dfb0a39 100644 --- a/data/scripts/maps/PetalburgCity_Gym.inc +++ b/data/scripts/maps/PetalburgCity_Gym.inc @@ -123,22 +123,22 @@ PetalburgCity_Gym_EventScript_1545B9:: @ 81545B9 PetalburgCity_Gym_EventScript_15463D:: @ 815463D setvar 0x8008, 0 - jump PetalburgCity_Gym_EventScript_154669 + goto PetalburgCity_Gym_EventScript_154669 end PetalburgCity_Gym_EventScript_154648:: @ 8154648 setvar 0x8008, 1 - jump PetalburgCity_Gym_EventScript_154669 + goto PetalburgCity_Gym_EventScript_154669 end PetalburgCity_Gym_EventScript_154653:: @ 8154653 setvar 0x8008, 2 - jump PetalburgCity_Gym_EventScript_154669 + goto PetalburgCity_Gym_EventScript_154669 end PetalburgCity_Gym_EventScript_15465E:: @ 815465E setvar 0x8008, 3 - jump PetalburgCity_Gym_EventScript_154669 + goto PetalburgCity_Gym_EventScript_154669 end PetalburgCity_Gym_EventScript_154669:: @ 8154669 @@ -408,7 +408,7 @@ PetalburgCity_Gym_EventScript_1549D6:: @ 81549D6 clearflag 940 call PetalburgCity_Gym_EventScript_1544ED special DrawWholeMapView - jump PetalburgCity_Gym_EventScript_154A2C + goto PetalburgCity_Gym_EventScript_154A2C end PetalburgCity_Gym_EventScript_154A2C:: @ 8154A2C @@ -1036,14 +1036,14 @@ PetalburgCity_Gym_EventScript_1551AA:: @ 81551AA lockall checkflag 2059 jumpeq PetalburgCity_Gym_EventScript_1551CA - jump PetalburgCity_Gym_EventScript_1551D4 + goto PetalburgCity_Gym_EventScript_1551D4 end PetalburgCity_Gym_EventScript_1551BA:: @ 81551BA lockall checkflag 2059 jumpeq PetalburgCity_Gym_EventScript_1551CA - jump PetalburgCity_Gym_EventScript_1551D4 + goto PetalburgCity_Gym_EventScript_1551D4 end PetalburgCity_Gym_EventScript_1551CA:: @ 81551CA diff --git a/data/scripts/maps/PetalburgCity_WallysHouse.inc b/data/scripts/maps/PetalburgCity_WallysHouse.inc index e8ac407dc..fb521aa46 100644 --- a/data/scripts/maps/PetalburgCity_WallysHouse.inc +++ b/data/scripts/maps/PetalburgCity_WallysHouse.inc @@ -20,7 +20,7 @@ PetalburgCity_WallysHouse_EventScript_1543C4:: @ 81543C4 PetalburgCity_WallysHouse_EventScript_1543F7:: @ 81543F7 checkflag 122 jumpeq PetalburgCity_WallysHouse_EventScript_154431 - jump PetalburgCity_WallysHouse_EventScript_154406 + goto PetalburgCity_WallysHouse_EventScript_154406 end PetalburgCity_WallysHouse_EventScript_154406:: @ 8154406 diff --git a/data/scripts/maps/PetalburgWoods.inc b/data/scripts/maps/PetalburgWoods.inc index c24f7c195..463fbec3c 100644 --- a/data/scripts/maps/PetalburgWoods.inc +++ b/data/scripts/maps/PetalburgWoods.inc @@ -36,7 +36,7 @@ PetalburgWoods_EventScript_15CCA8:: @ 815CCA8 call PetalburgWoods_EventScript_15CDFA move 4, PetalburgWoods_Movement_15CE80 waitmove 0 - jump PetalburgWoods_EventScript_15CE69 + goto PetalburgWoods_EventScript_15CE69 end PetalburgWoods_EventScript_15CD42:: @ 815CD42 @@ -71,7 +71,7 @@ PetalburgWoods_EventScript_15CD42:: @ 815CD42 call PetalburgWoods_EventScript_15CDFA move 4, PetalburgWoods_Movement_15CE95 waitmove 0 - jump PetalburgWoods_EventScript_15CE69 + goto PetalburgWoods_EventScript_15CE69 end PetalburgWoods_EventScript_15CDE6:: @ 815CDE6 @@ -93,12 +93,12 @@ PetalburgWoods_EventScript_15CDFA:: @ 815CDFA giveitem ITEM_GREAT_BALL compare RESULT, 0 jumpeq PetalburgWoods_EventScript_15CE3F - jump PetalburgWoods_EventScript_15CE4D + goto PetalburgWoods_EventScript_15CE4D end PetalburgWoods_EventScript_15CE3F:: @ 815CE3F msgbox PetalburgWoods_Text_195182, 4 - jump PetalburgWoods_EventScript_15CE4D + goto PetalburgWoods_EventScript_15CE4D end PetalburgWoods_EventScript_15CE4D:: @ 815CE4D diff --git a/data/scripts/maps/Route103.inc b/data/scripts/maps/Route103.inc index 4c7da3d0d..2d0c1c921 100644 --- a/data/scripts/maps/Route103.inc +++ b/data/scripts/maps/Route103.inc @@ -50,42 +50,42 @@ Route103_EventScript_14EC04:: @ 814EC04 Route103_EventScript_14EC5D:: @ 814EC5D trainerbattle 3, OPPONENT_MAY_4, 0, Route103_Text_16D65B - jump Route103_EventScript_14ECBD + goto Route103_EventScript_14ECBD end Route103_EventScript_14EC6D:: @ 814EC6D trainerbattle 3, OPPONENT_MAY_7, 0, Route103_Text_16D65B - jump Route103_EventScript_14ECBD + goto Route103_EventScript_14ECBD end Route103_EventScript_14EC7D:: @ 814EC7D trainerbattle 3, OPPONENT_MAY_1, 0, Route103_Text_16D65B - jump Route103_EventScript_14ECBD + goto Route103_EventScript_14ECBD end Route103_EventScript_14EC8D:: @ 814EC8D trainerbattle 3, OPPONENT_BRENDAN_4, 0, Route103_Text_16D836 - jump Route103_EventScript_14ECCB + goto Route103_EventScript_14ECCB end Route103_EventScript_14EC9D:: @ 814EC9D trainerbattle 3, OPPONENT_BRENDAN_7, 0, Route103_Text_16D836 - jump Route103_EventScript_14ECCB + goto Route103_EventScript_14ECCB end Route103_EventScript_14ECAD:: @ 814ECAD trainerbattle 3, OPPONENT_BRENDAN_1, 0, Route103_Text_16D836 - jump Route103_EventScript_14ECCB + goto Route103_EventScript_14ECCB end Route103_EventScript_14ECBD:: @ 814ECBD msgbox Route103_Text_16D688, 4 - jump Route103_EventScript_14ECD9 + goto Route103_EventScript_14ECD9 end Route103_EventScript_14ECCB:: @ 814ECCB msgbox Route103_Text_16D856, 4 - jump Route103_EventScript_14ECD9 + goto Route103_EventScript_14ECD9 end Route103_EventScript_14ECD9:: @ 814ECD9 @@ -103,7 +103,7 @@ Route103_EventScript_14ED0C:: @ 814ED0C playsfx 10 move 2, Route103_Movement_14ED6B waitmove 0 - jump Route103_EventScript_14ED46 + goto Route103_EventScript_14ED46 end Route103_EventScript_14ED29:: @ 814ED29 @@ -112,7 +112,7 @@ Route103_EventScript_14ED29:: @ 814ED29 playsfx 10 move 2, Route103_Movement_14ED74 waitmove 0 - jump Route103_EventScript_14ED46 + goto Route103_EventScript_14ED46 end Route103_EventScript_14ED46:: @ 814ED46 diff --git a/data/scripts/maps/Route104.inc b/data/scripts/maps/Route104.inc index b617767bf..d829c6a93 100644 --- a/data/scripts/maps/Route104.inc +++ b/data/scripts/maps/Route104.inc @@ -9,7 +9,7 @@ Route104_MapScript2_14EE97:: @ 814EE97 Route104_EventScript_14EEA1:: @ 814EEA1 lockall - jump Route104_EventScript_14EFD5 + goto Route104_EventScript_14EFD5 end Route104_MapScript1_14EEA8:: @ 814EEA8 diff --git a/data/scripts/maps/Route104_MrBrineysHouse.inc b/data/scripts/maps/Route104_MrBrineysHouse.inc index 5c6704e67..693939cf4 100644 --- a/data/scripts/maps/Route104_MrBrineysHouse.inc +++ b/data/scripts/maps/Route104_MrBrineysHouse.inc @@ -30,7 +30,7 @@ Route104_MrBrineysHouse_EventScript_15BCEB:: @ 815BCEB jumpif 0, Route104_MrBrineysHouse_EventScript_15BD65 checkflag 149 jumpif 0, Route104_MrBrineysHouse_EventScript_15BD7E - jump Route104_MrBrineysHouse_EventScript_15BD32 + goto Route104_MrBrineysHouse_EventScript_15BD32 end Route104_MrBrineysHouse_EventScript_15BD0E:: @ 815BD0E @@ -39,7 +39,7 @@ Route104_MrBrineysHouse_EventScript_15BD0E:: @ 815BD0E msgbox Route104_MrBrineysHouse_Text_191AAD, 5 compare RESULT, 0 jumpeq Route104_MrBrineysHouse_EventScript_15BD97 - jump Route104_MrBrineysHouse_EventScript_15BDAB + goto Route104_MrBrineysHouse_EventScript_15BDAB end Route104_MrBrineysHouse_EventScript_15BD32:: @ 815BD32 @@ -56,14 +56,14 @@ Route104_MrBrineysHouse_EventScript_15BD65:: @ 815BD65 msgbox Route104_MrBrineysHouse_Text_191CC3, 5 compare RESULT, 0 jumpeq Route104_MrBrineysHouse_EventScript_15BD97 - jump Route104_MrBrineysHouse_EventScript_15BDAB + goto Route104_MrBrineysHouse_EventScript_15BDAB end Route104_MrBrineysHouse_EventScript_15BD7E:: @ 815BD7E msgbox Route104_MrBrineysHouse_Text_191DA6, 5 compare RESULT, 0 jumpeq Route104_MrBrineysHouse_EventScript_15BD97 - jump Route104_MrBrineysHouse_EventScript_15BDAB + goto Route104_MrBrineysHouse_EventScript_15BDAB end Route104_MrBrineysHouse_EventScript_15BD97:: @ 815BD97 diff --git a/data/scripts/maps/Route109.inc b/data/scripts/maps/Route109.inc index 58c38173e..6e9d4adff 100644 --- a/data/scripts/maps/Route109.inc +++ b/data/scripts/maps/Route109.inc @@ -17,19 +17,19 @@ Route109_EventScript_14F4D3:: @ 814F4D3 Route109_EventScript_14F518:: @ 814F518 move 255, Route109_Movement_14F66D waitmove 0 - jump Route109_EventScript_14F548 + goto Route109_EventScript_14F548 end Route109_EventScript_14F528:: @ 814F528 move 255, Route109_Movement_14F675 waitmove 0 - jump Route109_EventScript_14F548 + goto Route109_EventScript_14F548 end Route109_EventScript_14F538:: @ 814F538 move 255, Route109_Movement_14F678 waitmove 0 - jump Route109_EventScript_14F548 + goto Route109_EventScript_14F548 end Route109_EventScript_14F548:: @ 814F548 @@ -273,7 +273,7 @@ Route109_EventScript_14F680:: @ 814F680 faceplayer checkflag 149 jumpif 0, Route109_EventScript_14F691 - jump Route109_EventScript_14F6AF + goto Route109_EventScript_14F6AF end Route109_EventScript_14F691:: @ 814F691 @@ -281,7 +281,7 @@ Route109_EventScript_14F691:: @ 814F691 msgbox Route109_Text_16E0F9, 5 compare RESULT, 0 jumpeq Route109_EventScript_14F6F1 - jump Route109_EventScript_14F6E2 + goto Route109_EventScript_14F6E2 end Route109_EventScript_14F6AF:: @ 814F6AF @@ -297,7 +297,7 @@ Route109_EventScript_14F6AF:: @ 814F6AF Route109_EventScript_14F6E2:: @ 814F6E2 msgbox Route109_Text_16E159, 4 closebutton - jump Route109_EventScript_14F4D3 + goto Route109_EventScript_14F4D3 end Route109_EventScript_14F6F1:: @ 814F6F1 diff --git a/data/scripts/maps/Route109_SeashoreHouse.inc b/data/scripts/maps/Route109_SeashoreHouse.inc index e1d9c380b..e8afb54fb 100644 --- a/data/scripts/maps/Route109_SeashoreHouse.inc +++ b/data/scripts/maps/Route109_SeashoreHouse.inc @@ -41,7 +41,7 @@ Route109_SeashoreHouse_EventScript_160E2C:: @ 8160E2C Route109_SeashoreHouse_EventScript_160E36:: @ 8160E36 showmoney 0, 0 - snop + nop msgbox Route109_SeashoreHouse_Text_19B702, 5 compare RESULT, 1 jumpeq Route109_SeashoreHouse_EventScript_160E5A @@ -60,7 +60,7 @@ Route109_SeashoreHouse_EventScript_160E5A:: @ 8160E5A msgbox Route109_SeashoreHouse_Text_19B74C, 4 paymoney 0x12c, 0 updatemoney 0, 0 - snop + nop giveitem ITEM_SODA_POP hidemoney 0, 0 release diff --git a/data/scripts/maps/Route110.inc b/data/scripts/maps/Route110.inc index a77feaa0f..745faaddf 100644 --- a/data/scripts/maps/Route110.inc +++ b/data/scripts/maps/Route110.inc @@ -279,27 +279,27 @@ Route110_EventScript_14FC39:: @ 814FC39 Route110_EventScript_14FCC3:: @ 814FCC3 msgbox Route110_Text_16EF9F, 4 - jump Route110_EventScript_14FD09 + goto Route110_EventScript_14FD09 end Route110_EventScript_14FCD1:: @ 814FCD1 msgbox Route110_Text_16F012, 4 - jump Route110_EventScript_14FD09 + goto Route110_EventScript_14FD09 end Route110_EventScript_14FCDF:: @ 814FCDF msgbox Route110_Text_16F069, 4 - jump Route110_EventScript_14FD09 + goto Route110_EventScript_14FD09 end Route110_EventScript_14FCED:: @ 814FCED msgbox Route110_Text_16F0D0, 4 - jump Route110_EventScript_14FD09 + goto Route110_EventScript_14FD09 end Route110_EventScript_14FCFB:: @ 814FCFB msgbox Route110_Text_16F139, 4 - jump Route110_EventScript_14FD09 + goto Route110_EventScript_14FD09 end Route110_EventScript_14FD09:: @ 814FD09 @@ -310,17 +310,17 @@ Route110_EventScript_14FD09:: @ 814FD09 Route110_EventScript_14FD13:: @ 814FD13 setvar 0x8008, 1 - jump Route110_EventScript_14FD34 + goto Route110_EventScript_14FD34 end Route110_EventScript_14FD1E:: @ 814FD1E setvar 0x8008, 2 - jump Route110_EventScript_14FD34 + goto Route110_EventScript_14FD34 end Route110_EventScript_14FD29:: @ 814FD29 setvar 0x8008, 3 - jump Route110_EventScript_14FD34 + goto Route110_EventScript_14FD34 end Route110_EventScript_14FD34:: @ 814FD34 @@ -369,24 +369,24 @@ Route110_EventScript_14FDB1:: @ 814FDB1 Route110_EventScript_14FDE0:: @ 814FDE0 trainerbattle 3, OPPONENT_MAY_5, 0, Route110_Text_16E826 - jump Route110_EventScript_14FE10 + goto Route110_EventScript_14FE10 end Route110_EventScript_14FDF0:: @ 814FDF0 trainerbattle 3, OPPONENT_MAY_8, 0, Route110_Text_16E826 - jump Route110_EventScript_14FE10 + goto Route110_EventScript_14FE10 end Route110_EventScript_14FE00:: @ 814FE00 trainerbattle 3, OPPONENT_MAY_2, 0, Route110_Text_16E826 - jump Route110_EventScript_14FE10 + goto Route110_EventScript_14FE10 end Route110_EventScript_14FE10:: @ 814FE10 msgbox Route110_Text_16E84C, 4 call Route110_EventScript_14FEA5 msgbox Route110_Text_16E8B3, 4 - jump Route110_EventScript_14FEB2 + goto Route110_EventScript_14FEB2 end Route110_EventScript_14FE2B:: @ 814FE2B @@ -399,24 +399,24 @@ Route110_EventScript_14FE2B:: @ 814FE2B Route110_EventScript_14FE5A:: @ 814FE5A trainerbattle 3, OPPONENT_BRENDAN_5, 0, Route110_Text_16EA0F - jump Route110_EventScript_14FE8A + goto Route110_EventScript_14FE8A end Route110_EventScript_14FE6A:: @ 814FE6A trainerbattle 3, OPPONENT_BRENDAN_8, 0, Route110_Text_16EA0F - jump Route110_EventScript_14FE8A + goto Route110_EventScript_14FE8A end Route110_EventScript_14FE7A:: @ 814FE7A trainerbattle 3, OPPONENT_BRENDAN_2, 0, Route110_Text_16EA0F - jump Route110_EventScript_14FE8A + goto Route110_EventScript_14FE8A end Route110_EventScript_14FE8A:: @ 814FE8A msgbox Route110_Text_16EA2A, 4 call Route110_EventScript_14FEA5 msgbox Route110_Text_16EA7B, 4 - jump Route110_EventScript_14FEB2 + goto Route110_EventScript_14FEB2 end Route110_EventScript_14FEA5:: @ 814FEA5 diff --git a/data/scripts/maps/Route110_TrickHousePuzzle1.inc b/data/scripts/maps/Route110_TrickHousePuzzle1.inc index 6b6d45af2..b4f800876 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle1.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle1.inc @@ -15,12 +15,12 @@ Route110_TrickHousePuzzle1_EventScript_161D14:: @ 8161D14 lockall compare 0x40ab, 0 jumpeq Route110_TrickHousePuzzle1_EventScript_161D26 - jump Route110_TrickHousePuzzle1_EventScript_161892 + goto Route110_TrickHousePuzzle1_EventScript_161892 end Route110_TrickHousePuzzle1_EventScript_161D26:: @ 8161D26 setvar 0x40ab, 1 - jump Route110_TrickHousePuzzle1_EventScript_16189C + goto Route110_TrickHousePuzzle1_EventScript_16189C end Route110_TrickHousePuzzle1_EventScript_161D31:: @ 8161D31 diff --git a/data/scripts/maps/Route110_TrickHousePuzzle2.inc b/data/scripts/maps/Route110_TrickHousePuzzle2.inc index 27ffad50d..96e9d8143 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle2.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle2.inc @@ -25,12 +25,12 @@ Route110_TrickHousePuzzle2_EventScript_161DC3:: @ 8161DC3 lockall compare 0x40ac, 0 jumpeq Route110_TrickHousePuzzle2_EventScript_161DD5 - jump Route110_TrickHousePuzzle2_EventScript_161892 + goto Route110_TrickHousePuzzle2_EventScript_161892 end Route110_TrickHousePuzzle2_EventScript_161DD5:: @ 8161DD5 setvar 0x40ac, 1 - jump Route110_TrickHousePuzzle2_EventScript_16189C + goto Route110_TrickHousePuzzle2_EventScript_16189C end Route110_TrickHousePuzzle2_EventScript_161DE0:: @ 8161DE0 diff --git a/data/scripts/maps/Route110_TrickHousePuzzle3.inc b/data/scripts/maps/Route110_TrickHousePuzzle3.inc index efd96ec44..c81c5dd1c 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle3.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle3.inc @@ -248,50 +248,50 @@ Route110_TrickHousePuzzle3_EventScript_1622C8:: @ 81622C8 Route110_TrickHousePuzzle3_EventScript_1625AB:: @ 81625AB lockall setvar 0x4008, 1 - jump Route110_TrickHousePuzzle3_EventScript_1625FF + goto Route110_TrickHousePuzzle3_EventScript_1625FF end Route110_TrickHousePuzzle3_EventScript_1625B7:: @ 81625B7 lockall setvar 0x4008, 2 - jump Route110_TrickHousePuzzle3_EventScript_1625FF + goto Route110_TrickHousePuzzle3_EventScript_1625FF end Route110_TrickHousePuzzle3_EventScript_1625C3:: @ 81625C3 lockall setvar 0x4008, 3 - jump Route110_TrickHousePuzzle3_EventScript_1625FF + goto Route110_TrickHousePuzzle3_EventScript_1625FF end Route110_TrickHousePuzzle3_EventScript_1625CF:: @ 81625CF lockall setvar 0x4008, 4 - jump Route110_TrickHousePuzzle3_EventScript_1625FF + goto Route110_TrickHousePuzzle3_EventScript_1625FF end Route110_TrickHousePuzzle3_EventScript_1625DB:: @ 81625DB lockall setvar 0x4008, 5 - jump Route110_TrickHousePuzzle3_EventScript_1625FF + goto Route110_TrickHousePuzzle3_EventScript_1625FF end Route110_TrickHousePuzzle3_EventScript_1625E7:: @ 81625E7 lockall setvar 0x4008, 6 - jump Route110_TrickHousePuzzle3_EventScript_1625FF + goto Route110_TrickHousePuzzle3_EventScript_1625FF end Route110_TrickHousePuzzle3_EventScript_1625F3:: @ 81625F3 lockall setvar 0x4008, 7 - jump Route110_TrickHousePuzzle3_EventScript_1625FF + goto Route110_TrickHousePuzzle3_EventScript_1625FF end Route110_TrickHousePuzzle3_EventScript_1625FF:: @ 81625FF call Route110_TrickHousePuzzle3_EventScript_162612 playsfx 21 call Route110_TrickHousePuzzle3_EventScript_161F12 - jump Route110_TrickHousePuzzle3_EventScript_1626AD + goto Route110_TrickHousePuzzle3_EventScript_1626AD end Route110_TrickHousePuzzle3_EventScript_162612:: @ 8162612 @@ -372,12 +372,12 @@ Route110_TrickHousePuzzle3_EventScript_1626EB:: @ 81626EB lockall compare 0x40ad, 0 jumpeq Route110_TrickHousePuzzle3_EventScript_1626FD - jump Route110_TrickHousePuzzle3_EventScript_161892 + goto Route110_TrickHousePuzzle3_EventScript_161892 end Route110_TrickHousePuzzle3_EventScript_1626FD:: @ 81626FD setvar 0x40ad, 1 - jump Route110_TrickHousePuzzle3_EventScript_16189C + goto Route110_TrickHousePuzzle3_EventScript_16189C end Route110_TrickHousePuzzle3_EventScript_162708:: @ 8162708 diff --git a/data/scripts/maps/Route110_TrickHousePuzzle4.inc b/data/scripts/maps/Route110_TrickHousePuzzle4.inc index 89d5e45c3..11c0074d9 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle4.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle4.inc @@ -5,12 +5,12 @@ Route110_TrickHousePuzzle4_EventScript_16274E:: @ 816274E lockall compare 0x40ae, 0 jumpeq Route110_TrickHousePuzzle4_EventScript_162760 - jump Route110_TrickHousePuzzle4_EventScript_161892 + goto Route110_TrickHousePuzzle4_EventScript_161892 end Route110_TrickHousePuzzle4_EventScript_162760:: @ 8162760 setvar 0x40ae, 1 - jump Route110_TrickHousePuzzle4_EventScript_16189C + goto Route110_TrickHousePuzzle4_EventScript_16189C end Route110_TrickHousePuzzle4_EventScript_16276B:: @ 816276B diff --git a/data/scripts/maps/Route110_TrickHousePuzzle5.inc b/data/scripts/maps/Route110_TrickHousePuzzle5.inc index cd5d2fbb9..be416e326 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle5.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle5.inc @@ -15,12 +15,12 @@ Route110_TrickHousePuzzle5_EventScript_1627D5:: @ 81627D5 lockall compare 0x40af, 0 jumpeq Route110_TrickHousePuzzle5_EventScript_1627E7 - jump Route110_TrickHousePuzzle5_EventScript_161892 + goto Route110_TrickHousePuzzle5_EventScript_161892 end Route110_TrickHousePuzzle5_EventScript_1627E7:: @ 81627E7 setvar 0x40af, 1 - jump Route110_TrickHousePuzzle5_EventScript_16189C + goto Route110_TrickHousePuzzle5_EventScript_16189C end Route110_TrickHousePuzzle5_EventScript_1627F2:: @ 81627F2 @@ -30,7 +30,7 @@ Route110_TrickHousePuzzle5_EventScript_1627F2:: @ 81627F2 compare 0x4001, 1 jumpeq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 - jump Route110_TrickHousePuzzle5_EventScript_16293F + goto Route110_TrickHousePuzzle5_EventScript_16293F end Route110_TrickHousePuzzle5_EventScript_162813:: @ 8162813 @@ -40,7 +40,7 @@ Route110_TrickHousePuzzle5_EventScript_162813:: @ 8162813 compare 0x4002, 1 jumpeq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 - jump Route110_TrickHousePuzzle5_EventScript_1629B3 + goto Route110_TrickHousePuzzle5_EventScript_1629B3 end Route110_TrickHousePuzzle5_EventScript_162834:: @ 8162834 @@ -50,7 +50,7 @@ Route110_TrickHousePuzzle5_EventScript_162834:: @ 8162834 compare 0x4003, 1 jumpeq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 - jump Route110_TrickHousePuzzle5_EventScript_162A27 + goto Route110_TrickHousePuzzle5_EventScript_162A27 end Route110_TrickHousePuzzle5_EventScript_162855:: @ 8162855 @@ -60,7 +60,7 @@ Route110_TrickHousePuzzle5_EventScript_162855:: @ 8162855 compare 0x4004, 1 jumpeq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 - jump Route110_TrickHousePuzzle5_EventScript_162A9B + goto Route110_TrickHousePuzzle5_EventScript_162A9B end Route110_TrickHousePuzzle5_EventScript_162876:: @ 8162876 @@ -70,91 +70,91 @@ Route110_TrickHousePuzzle5_EventScript_162876:: @ 8162876 compare 0x4005, 1 jumpeq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 - jump Route110_TrickHousePuzzle5_EventScript_162B0F + goto Route110_TrickHousePuzzle5_EventScript_162B0F end Route110_TrickHousePuzzle5_EventScript_162897:: @ 8162897 lockall setvar 0x4009, 0 - jump Route110_TrickHousePuzzle5_EventScript_16293F + goto Route110_TrickHousePuzzle5_EventScript_16293F end Route110_TrickHousePuzzle5_EventScript_1628A3:: @ 81628A3 lockall setvar 0x4009, 1 - jump Route110_TrickHousePuzzle5_EventScript_16293F + goto Route110_TrickHousePuzzle5_EventScript_16293F end Route110_TrickHousePuzzle5_EventScript_1628AF:: @ 81628AF lockall setvar 0x4009, 2 - jump Route110_TrickHousePuzzle5_EventScript_16293F + goto Route110_TrickHousePuzzle5_EventScript_16293F end Route110_TrickHousePuzzle5_EventScript_1628BB:: @ 81628BB lockall setvar 0x4009, 3 - jump Route110_TrickHousePuzzle5_EventScript_16293F + goto Route110_TrickHousePuzzle5_EventScript_16293F end Route110_TrickHousePuzzle5_EventScript_1628C7:: @ 81628C7 lockall setvar 0x4009, 0 - jump Route110_TrickHousePuzzle5_EventScript_1629B3 + goto Route110_TrickHousePuzzle5_EventScript_1629B3 end Route110_TrickHousePuzzle5_EventScript_1628D3:: @ 81628D3 lockall setvar 0x4009, 1 - jump Route110_TrickHousePuzzle5_EventScript_1629B3 + goto Route110_TrickHousePuzzle5_EventScript_1629B3 end Route110_TrickHousePuzzle5_EventScript_1628DF:: @ 81628DF lockall setvar 0x4009, 0 - jump Route110_TrickHousePuzzle5_EventScript_162A27 + goto Route110_TrickHousePuzzle5_EventScript_162A27 end Route110_TrickHousePuzzle5_EventScript_1628EB:: @ 81628EB lockall setvar 0x4009, 1 - jump Route110_TrickHousePuzzle5_EventScript_162A27 + goto Route110_TrickHousePuzzle5_EventScript_162A27 end Route110_TrickHousePuzzle5_EventScript_1628F7:: @ 81628F7 lockall setvar 0x4009, 2 - jump Route110_TrickHousePuzzle5_EventScript_162A27 + goto Route110_TrickHousePuzzle5_EventScript_162A27 end Route110_TrickHousePuzzle5_EventScript_162903:: @ 8162903 lockall setvar 0x4009, 0 - jump Route110_TrickHousePuzzle5_EventScript_162A9B + goto Route110_TrickHousePuzzle5_EventScript_162A9B end Route110_TrickHousePuzzle5_EventScript_16290F:: @ 816290F lockall setvar 0x4009, 1 - jump Route110_TrickHousePuzzle5_EventScript_162A9B + goto Route110_TrickHousePuzzle5_EventScript_162A9B end Route110_TrickHousePuzzle5_EventScript_16291B:: @ 816291B lockall setvar 0x4009, 0 - jump Route110_TrickHousePuzzle5_EventScript_162B0F + goto Route110_TrickHousePuzzle5_EventScript_162B0F end Route110_TrickHousePuzzle5_EventScript_162927:: @ 8162927 lockall setvar 0x4009, 1 - jump Route110_TrickHousePuzzle5_EventScript_162B0F + goto Route110_TrickHousePuzzle5_EventScript_162B0F end Route110_TrickHousePuzzle5_EventScript_162933:: @ 8162933 lockall setvar 0x4009, 2 - jump Route110_TrickHousePuzzle5_EventScript_162B0F + goto Route110_TrickHousePuzzle5_EventScript_162B0F end Route110_TrickHousePuzzle5_EventScript_16293F:: @ 816293F @@ -272,7 +272,7 @@ Route110_TrickHousePuzzle5_EventScript_162B83:: @ 8162B83 multichoice 0, 0, 25, 1 switch RESULT case 1, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162BA6:: @ 8162BA6 @@ -280,7 +280,7 @@ Route110_TrickHousePuzzle5_EventScript_162BA6:: @ 8162BA6 multichoice 0, 0, 26, 1 switch RESULT case 0, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162BC9:: @ 8162BC9 @@ -288,7 +288,7 @@ Route110_TrickHousePuzzle5_EventScript_162BC9:: @ 8162BC9 multichoice 0, 0, 27, 1 switch RESULT case 1, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162BEC:: @ 8162BEC @@ -296,7 +296,7 @@ Route110_TrickHousePuzzle5_EventScript_162BEC:: @ 8162BEC multichoice 0, 0, 28, 1 switch RESULT case 2, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162C0F:: @ 8162C0F @@ -304,7 +304,7 @@ Route110_TrickHousePuzzle5_EventScript_162C0F:: @ 8162C0F multichoice 0, 0, 29, 1 switch RESULT case 0, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162C32:: @ 8162C32 @@ -312,7 +312,7 @@ Route110_TrickHousePuzzle5_EventScript_162C32:: @ 8162C32 multichoice 0, 0, 30, 1 switch RESULT case 0, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162C55:: @ 8162C55 @@ -320,7 +320,7 @@ Route110_TrickHousePuzzle5_EventScript_162C55:: @ 8162C55 multichoice 0, 0, 31, 1 switch RESULT case 1, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162C78:: @ 8162C78 @@ -328,7 +328,7 @@ Route110_TrickHousePuzzle5_EventScript_162C78:: @ 8162C78 multichoice 0, 0, 32, 1 switch RESULT case 2, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162C9B:: @ 8162C9B @@ -336,7 +336,7 @@ Route110_TrickHousePuzzle5_EventScript_162C9B:: @ 8162C9B multichoice 0, 0, 33, 1 switch RESULT case 1, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162CBE:: @ 8162CBE @@ -344,7 +344,7 @@ Route110_TrickHousePuzzle5_EventScript_162CBE:: @ 8162CBE multichoice 0, 0, 34, 1 switch RESULT case 1, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162CE1:: @ 8162CE1 @@ -352,7 +352,7 @@ Route110_TrickHousePuzzle5_EventScript_162CE1:: @ 8162CE1 multichoice 0, 0, 35, 1 switch RESULT case 0, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162D04:: @ 8162D04 @@ -360,7 +360,7 @@ Route110_TrickHousePuzzle5_EventScript_162D04:: @ 8162D04 multichoice 0, 0, 36, 1 switch RESULT case 1, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162D27:: @ 8162D27 @@ -368,7 +368,7 @@ Route110_TrickHousePuzzle5_EventScript_162D27:: @ 8162D27 multichoice 0, 0, 37, 1 switch RESULT case 1, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162D4A:: @ 8162D4A @@ -376,7 +376,7 @@ Route110_TrickHousePuzzle5_EventScript_162D4A:: @ 8162D4A multichoice 0, 0, 38, 1 switch RESULT case 0, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162D6D:: @ 8162D6D @@ -384,7 +384,7 @@ Route110_TrickHousePuzzle5_EventScript_162D6D:: @ 8162D6D multichoice 0, 0, 39, 1 switch RESULT case 2, Route110_TrickHousePuzzle5_EventScript_162DDF - jump Route110_TrickHousePuzzle5_EventScript_162D90 + goto Route110_TrickHousePuzzle5_EventScript_162D90 end Route110_TrickHousePuzzle5_EventScript_162D90:: @ 8162D90 @@ -409,7 +409,7 @@ Route110_TrickHousePuzzle5_EventScript_162D90:: @ 8162D90 Route110_TrickHousePuzzle5_EventScript_162DDF:: @ 8162DDF checksound playsfx 31 - jump Route110_TrickHousePuzzle5_EventScript_162DE9 + goto Route110_TrickHousePuzzle5_EventScript_162DE9 end Route110_TrickHousePuzzle5_EventScript_162DE9:: @ 8162DE9 diff --git a/data/scripts/maps/Route110_TrickHousePuzzle6.inc b/data/scripts/maps/Route110_TrickHousePuzzle6.inc index 1e47bbd83..bd0a7c8d8 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle6.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle6.inc @@ -19,12 +19,12 @@ Route110_TrickHousePuzzle6_EventScript_1630EA:: @ 81630EA lockall compare 0x40b0, 0 jumpeq Route110_TrickHousePuzzle6_EventScript_1630FC - jump Route110_TrickHousePuzzle6_EventScript_161892 + goto Route110_TrickHousePuzzle6_EventScript_161892 end Route110_TrickHousePuzzle6_EventScript_1630FC:: @ 81630FC setvar 0x40b0, 1 - jump Route110_TrickHousePuzzle6_EventScript_16189C + goto Route110_TrickHousePuzzle6_EventScript_16189C end Route110_TrickHousePuzzle6_EventScript_163107:: @ 8163107 diff --git a/data/scripts/maps/Route110_TrickHousePuzzle7.inc b/data/scripts/maps/Route110_TrickHousePuzzle7.inc index 7f965b467..a4093c546 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle7.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle7.inc @@ -102,12 +102,12 @@ Route110_TrickHousePuzzle7_EventScript_16328B:: @ 816328B lockall compare 0x40b1, 0 jumpeq Route110_TrickHousePuzzle7_EventScript_16329D - jump Route110_TrickHousePuzzle7_EventScript_161892 + goto Route110_TrickHousePuzzle7_EventScript_161892 end Route110_TrickHousePuzzle7_EventScript_16329D:: @ 816329D setvar 0x40b1, 1 - jump Route110_TrickHousePuzzle7_EventScript_16189C + goto Route110_TrickHousePuzzle7_EventScript_16189C end Route110_TrickHousePuzzle7_EventScript_1632A8:: @ 81632A8 diff --git a/data/scripts/maps/Route110_TrickHousePuzzle8.inc b/data/scripts/maps/Route110_TrickHousePuzzle8.inc index a31c868be..d4afab4ea 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle8.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle8.inc @@ -5,12 +5,12 @@ Route110_TrickHousePuzzle8_EventScript_16341C:: @ 816341C lockall compare 0x40b2, 0 jumpeq Route110_TrickHousePuzzle8_EventScript_16342E - jump Route110_TrickHousePuzzle8_EventScript_161892 + goto Route110_TrickHousePuzzle8_EventScript_161892 end Route110_TrickHousePuzzle8_EventScript_16342E:: @ 816342E setvar 0x40b2, 1 - jump Route110_TrickHousePuzzle8_EventScript_16189C + goto Route110_TrickHousePuzzle8_EventScript_16189C end Route110_TrickHousePuzzle8_EventScript_163439:: @ 8163439 diff --git a/data/scripts/maps/Route111.inc b/data/scripts/maps/Route111.inc index 1358a44be..68be7e7d2 100644 --- a/data/scripts/maps/Route111.inc +++ b/data/scripts/maps/Route111.inc @@ -141,25 +141,25 @@ Route111_EventScript_150100:: @ 8150100 @ 815010A lockall setvar 0x8004, 0 - jump Route111_EventScript_15013A + goto Route111_EventScript_15013A end Route111_EventScript_150116:: @ 8150116 lockall setvar 0x8004, 1 - jump Route111_EventScript_15013A + goto Route111_EventScript_15013A end Route111_EventScript_150122:: @ 8150122 lockall setvar 0x8004, 2 - jump Route111_EventScript_15013A + goto Route111_EventScript_15013A end @ 815012E lockall setvar 0x8004, 3 - jump Route111_EventScript_15013A + goto Route111_EventScript_15013A end Route111_EventScript_15013A:: @ 815013A diff --git a/data/scripts/maps/Route111_WinstrateFamilysHouse.inc b/data/scripts/maps/Route111_WinstrateFamilysHouse.inc index 3eb514ad2..3fbaf7958 100644 --- a/data/scripts/maps/Route111_WinstrateFamilysHouse.inc +++ b/data/scripts/maps/Route111_WinstrateFamilysHouse.inc @@ -6,7 +6,7 @@ Route111_WinstrateFamilysHouse_EventScript_15BF25:: @ 815BF25 faceplayer setvar 0x8008, 2 msgbox Route111_WinstrateFamilysHouse_Text_191FCE, 4 - jump Route111_WinstrateFamilysHouse_EventScript_15BFC4 + goto Route111_WinstrateFamilysHouse_EventScript_15BFC4 end Route111_WinstrateFamilysHouse_EventScript_15BF3A:: @ 815BF3A @@ -20,12 +20,12 @@ Route111_WinstrateFamilysHouse_EventScript_15BF3A:: @ 815BF3A compare RESULT, 0 jumpeq Route111_WinstrateFamilysHouse_EventScript_1A029B setflag 277 - jump Route111_WinstrateFamilysHouse_EventScript_15BFC4 + goto Route111_WinstrateFamilysHouse_EventScript_15BFC4 end Route111_WinstrateFamilysHouse_EventScript_15BF72:: @ 815BF72 msgbox Route111_WinstrateFamilysHouse_Text_19214D, 4 - jump Route111_WinstrateFamilysHouse_EventScript_15BFC4 + goto Route111_WinstrateFamilysHouse_EventScript_15BFC4 end Route111_WinstrateFamilysHouse_EventScript_15BF80:: @ 815BF80 @@ -33,7 +33,7 @@ Route111_WinstrateFamilysHouse_EventScript_15BF80:: @ 815BF80 faceplayer setvar 0x8008, 1 msgbox Route111_WinstrateFamilysHouse_Text_192190, 4 - jump Route111_WinstrateFamilysHouse_EventScript_15BFC4 + goto Route111_WinstrateFamilysHouse_EventScript_15BFC4 end Route111_WinstrateFamilysHouse_EventScript_15BF95:: @ 815BF95 @@ -44,12 +44,12 @@ Route111_WinstrateFamilysHouse_EventScript_15BF95:: @ 815BF95 jumpeq Route111_WinstrateFamilysHouse_EventScript_15BFB6 msgbox Route111_WinstrateFamilysHouse_Text_192219, 4 setflag 4 - jump Route111_WinstrateFamilysHouse_EventScript_15BFC4 + goto Route111_WinstrateFamilysHouse_EventScript_15BFC4 end Route111_WinstrateFamilysHouse_EventScript_15BFB6:: @ 815BFB6 msgbox Route111_WinstrateFamilysHouse_Text_192334, 4 - jump Route111_WinstrateFamilysHouse_EventScript_15BFC4 + goto Route111_WinstrateFamilysHouse_EventScript_15BFC4 end Route111_WinstrateFamilysHouse_EventScript_15BFC4:: @ 815BFC4 diff --git a/data/scripts/maps/Route113_GlassWorkshop.inc b/data/scripts/maps/Route113_GlassWorkshop.inc index 83983f9bb..24f4803b2 100644 --- a/data/scripts/maps/Route113_GlassWorkshop.inc +++ b/data/scripts/maps/Route113_GlassWorkshop.inc @@ -42,7 +42,7 @@ Route113_GlassWorkshop_EventScript_1635B5:: @ 81635B5 jumpif 0, Route113_GlassWorkshop_EventScript_163818 message Route113_GlassWorkshop_Text_19E757 waittext - jump Route113_GlassWorkshop_EventScript_1635EE + goto Route113_GlassWorkshop_EventScript_1635EE end Route113_GlassWorkshop_EventScript_1635E4:: @ 81635E4 @@ -77,7 +77,7 @@ Route113_GlassWorkshop_EventScript_163660:: @ 8163660 jumpeq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 10 subvar 0x4048, 250 - jump Route113_GlassWorkshop_EventScript_163851 + goto Route113_GlassWorkshop_EventScript_163851 end Route113_GlassWorkshop_EventScript_16369C:: @ 816369C @@ -91,7 +91,7 @@ Route113_GlassWorkshop_EventScript_16369C:: @ 816369C jumpeq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 11 subvar 0x4048, 500 - jump Route113_GlassWorkshop_EventScript_163851 + goto Route113_GlassWorkshop_EventScript_163851 end Route113_GlassWorkshop_EventScript_1636D8:: @ 81636D8 @@ -105,7 +105,7 @@ Route113_GlassWorkshop_EventScript_1636D8:: @ 81636D8 jumpeq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 12 subvar 0x4048, 500 - jump Route113_GlassWorkshop_EventScript_163851 + goto Route113_GlassWorkshop_EventScript_163851 end Route113_GlassWorkshop_EventScript_163714:: @ 8163714 @@ -119,7 +119,7 @@ Route113_GlassWorkshop_EventScript_163714:: @ 8163714 jumpeq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 13 subvar 0x4048, 1000 - jump Route113_GlassWorkshop_EventScript_163851 + goto Route113_GlassWorkshop_EventScript_163851 end Route113_GlassWorkshop_EventScript_163750:: @ 8163750 @@ -133,7 +133,7 @@ Route113_GlassWorkshop_EventScript_163750:: @ 8163750 jumpeq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 14 subvar 0x4048, 1000 - jump Route113_GlassWorkshop_EventScript_163851 + goto Route113_GlassWorkshop_EventScript_163851 end Route113_GlassWorkshop_EventScript_16378C:: @ 816378C @@ -148,7 +148,7 @@ Route113_GlassWorkshop_EventScript_16378C:: @ 816378C jumpeq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 15 subvar 0x4048, 6000 - jump Route113_GlassWorkshop_EventScript_163851 + goto Route113_GlassWorkshop_EventScript_163851 end Route113_GlassWorkshop_EventScript_1637CD:: @ 81637CD @@ -163,7 +163,7 @@ Route113_GlassWorkshop_EventScript_1637CD:: @ 81637CD jumpeq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 16 subvar 0x4048, 8000 - jump Route113_GlassWorkshop_EventScript_163851 + goto Route113_GlassWorkshop_EventScript_163851 end Route113_GlassWorkshop_EventScript_16380E:: @ 816380E @@ -184,13 +184,13 @@ Route113_GlassWorkshop_EventScript_163830:: @ 8163830 buffernum 1, 32778 message Route113_GlassWorkshop_Text_19E890 waittext - jump Route113_GlassWorkshop_EventScript_1635EE + goto Route113_GlassWorkshop_EventScript_1635EE end Route113_GlassWorkshop_EventScript_163845:: @ 8163845 message Route113_GlassWorkshop_Text_19E802 waittext - jump Route113_GlassWorkshop_EventScript_1635EE + goto Route113_GlassWorkshop_EventScript_1635EE end Route113_GlassWorkshop_EventScript_163851:: @ 8163851 @@ -248,49 +248,49 @@ Route113_GlassWorkshop_EventScript_163925:: @ 8163925 setvar 0x8009, 0 setvar 0x8008, 39 bufferitem 0, 0x8008 - jump Route113_GlassWorkshop_EventScript_1639B1 + goto Route113_GlassWorkshop_EventScript_1639B1 end Route113_GlassWorkshop_EventScript_163939:: @ 8163939 setvar 0x8009, 0 setvar 0x8008, 40 bufferitem 0, 0x8008 - jump Route113_GlassWorkshop_EventScript_1639B1 + goto Route113_GlassWorkshop_EventScript_1639B1 end Route113_GlassWorkshop_EventScript_16394D:: @ 816394D setvar 0x8009, 0 setvar 0x8008, 41 bufferitem 0, 0x8008 - jump Route113_GlassWorkshop_EventScript_1639B1 + goto Route113_GlassWorkshop_EventScript_1639B1 end Route113_GlassWorkshop_EventScript_163961:: @ 8163961 setvar 0x8009, 0 setvar 0x8008, 43 bufferitem 0, 0x8008 - jump Route113_GlassWorkshop_EventScript_1639B1 + goto Route113_GlassWorkshop_EventScript_1639B1 end Route113_GlassWorkshop_EventScript_163975:: @ 8163975 setvar 0x8009, 0 setvar 0x8008, 42 bufferitem 0, 0x8008 - jump Route113_GlassWorkshop_EventScript_1639B1 + goto Route113_GlassWorkshop_EventScript_1639B1 end Route113_GlassWorkshop_EventScript_163989:: @ 8163989 setvar 0x8009, 1 setvar 0x8008, 13 bufferdecor 0, 13 - jump Route113_GlassWorkshop_EventScript_1639B1 + goto Route113_GlassWorkshop_EventScript_1639B1 end Route113_GlassWorkshop_EventScript_16399D:: @ 816399D setvar 0x8009, 1 setvar 0x8008, 6 bufferdecor 0, 6 - jump Route113_GlassWorkshop_EventScript_1639B1 + goto Route113_GlassWorkshop_EventScript_1639B1 end Route113_GlassWorkshop_EventScript_1639B1:: @ 81639B1 diff --git a/data/scripts/maps/Route116.inc b/data/scripts/maps/Route116.inc index f5ef82f8b..7b9a5162f 100644 --- a/data/scripts/maps/Route116.inc +++ b/data/scripts/maps/Route116.inc @@ -38,7 +38,7 @@ Route116_EventScript_150A7B:: @ 8150A7B checkflag 287 jumpeq Route116_EventScript_150B04 msgbox Route116_Text_1705AE, 4 - jump Route116_EventScript_150A94 + goto Route116_EventScript_150A94 end Route116_EventScript_150A94:: @ 8150A94 @@ -74,7 +74,7 @@ Route116_EventScript_150AF9:: @ 8150AF9 Route116_EventScript_150B04:: @ 8150B04 msgbox Route116_Text_170865, 4 - jump Route116_EventScript_150A94 + goto Route116_EventScript_150A94 end Route116_EventScript_150B12:: @ 8150B12 @@ -160,7 +160,7 @@ Route116_EventScript_150B8F:: @ 8150B8F Route116_EventScript_150BBB:: @ 8150BBB msgbox Route116_Text_1709B7, 4 closebutton - jump Route116_EventScript_150C03 + goto Route116_EventScript_150C03 end Route116_EventScript_150BCA:: @ 8150BCA @@ -176,7 +176,7 @@ Route116_EventScript_150BCA:: @ 8150BCA Route116_EventScript_150BF4:: @ 8150BF4 msgbox Route116_Text_17094D, 4 closebutton - jump Route116_EventScript_150C03 + goto Route116_EventScript_150C03 end Route116_EventScript_150C03:: @ 8150C03 diff --git a/data/scripts/maps/Route118.inc b/data/scripts/maps/Route118.inc index 0b5b4748e..a28352c94 100644 --- a/data/scripts/maps/Route118.inc +++ b/data/scripts/maps/Route118.inc @@ -55,7 +55,7 @@ Route118_EventScript_150FAE:: @ 8150FAE waitmove 0 move 19, Route118_Movement_151069 waitmove 0 - jump Route118_EventScript_151004 + goto Route118_EventScript_151004 end Route118_EventScript_150FCE:: @ 8150FCE @@ -63,7 +63,7 @@ Route118_EventScript_150FCE:: @ 8150FCE setvar 0x8008, 1 move 255, Route118_Movement_1A0841 waitmove 0 - jump Route118_EventScript_151004 + goto Route118_EventScript_151004 end Route118_EventScript_150FE4:: @ 8150FE4 @@ -73,7 +73,7 @@ Route118_EventScript_150FE4:: @ 8150FE4 waitmove 0 move 19, Route118_Movement_15106B waitmove 0 - jump Route118_EventScript_151004 + goto Route118_EventScript_151004 end Route118_EventScript_151004:: @ 8151004 diff --git a/data/scripts/maps/Route119.inc b/data/scripts/maps/Route119.inc index 55a3fb1dc..bd73bbf31 100644 --- a/data/scripts/maps/Route119.inc +++ b/data/scripts/maps/Route119.inc @@ -40,12 +40,12 @@ Route119_EventScript_1511B9:: @ 81511B9 Route119_EventScript_1511C5:: @ 81511C5 setvar 0x4001, 1 - jump Route119_EventScript_1511DB + goto Route119_EventScript_1511DB end Route119_EventScript_1511D0:: @ 81511D0 setvar 0x4001, 2 - jump Route119_EventScript_1511DB + goto Route119_EventScript_1511DB end Route119_EventScript_1511DB:: @ 81511DB @@ -97,24 +97,24 @@ Route119_EventScript_15125E:: @ 815125E Route119_EventScript_15128D:: @ 815128D trainerbattle 3, OPPONENT_MAY_6, 0, Route119_Text_171156 - jump Route119_EventScript_1512BD + goto Route119_EventScript_1512BD end Route119_EventScript_15129D:: @ 815129D trainerbattle 3, OPPONENT_MAY_9, 0, Route119_Text_171156 - jump Route119_EventScript_1512BD + goto Route119_EventScript_1512BD end Route119_EventScript_1512AD:: @ 81512AD trainerbattle 3, OPPONENT_MAY_3, 0, Route119_Text_171156 - jump Route119_EventScript_1512BD + goto Route119_EventScript_1512BD end Route119_EventScript_1512BD:: @ 81512BD msgbox Route119_Text_1711B1, 4 call Route119_EventScript_151352 msgbox Route119_Text_171214, 4 - jump Route119_EventScript_151362 + goto Route119_EventScript_151362 end Route119_EventScript_1512D8:: @ 81512D8 @@ -127,24 +127,24 @@ Route119_EventScript_1512D8:: @ 81512D8 Route119_EventScript_151307:: @ 8151307 trainerbattle 3, OPPONENT_BRENDAN_6, 0, Route119_Text_1713E2 - jump Route119_EventScript_151337 + goto Route119_EventScript_151337 end Route119_EventScript_151317:: @ 8151317 trainerbattle 3, OPPONENT_BRENDAN_9, 0, Route119_Text_1713E2 - jump Route119_EventScript_151337 + goto Route119_EventScript_151337 end Route119_EventScript_151327:: @ 8151327 trainerbattle 3, OPPONENT_BRENDAN_3, 0, Route119_Text_1713E2 - jump Route119_EventScript_151337 + goto Route119_EventScript_151337 end Route119_EventScript_151337:: @ 8151337 msgbox Route119_Text_17140B, 4 call Route119_EventScript_151352 msgbox Route119_Text_171475, 4 - jump Route119_EventScript_151362 + goto Route119_EventScript_151362 end Route119_EventScript_151352:: @ 8151352 diff --git a/data/scripts/maps/Route119_WeatherInstitute_2F.inc b/data/scripts/maps/Route119_WeatherInstitute_2F.inc index 37f8e9ec6..f88b97cfe 100644 --- a/data/scripts/maps/Route119_WeatherInstitute_2F.inc +++ b/data/scripts/maps/Route119_WeatherInstitute_2F.inc @@ -50,7 +50,7 @@ Route119_WeatherInstitute_2F_EventScript_163D45:: @ 8163D45 move 5, Route119_WeatherInstitute_2F_Movement_163DC8 waitmove 0 moveoffscreen 5 - jump Route119_WeatherInstitute_2F_EventScript_163D7A + goto Route119_WeatherInstitute_2F_EventScript_163D7A end Route119_WeatherInstitute_2F_EventScript_163D7A:: @ 8163D7A @@ -89,5 +89,5 @@ Route119_WeatherInstitute_2F_EventScript_163DCC:: @ 8163DCC faceplayer checkflag 151 jumpeq Route119_WeatherInstitute_2F_EventScript_163DBE - jump Route119_WeatherInstitute_2F_EventScript_163D7A + goto Route119_WeatherInstitute_2F_EventScript_163D7A end diff --git a/data/scripts/maps/Route120.inc b/data/scripts/maps/Route120.inc index 75385fe8f..74250fd0f 100644 --- a/data/scripts/maps/Route120.inc +++ b/data/scripts/maps/Route120.inc @@ -102,7 +102,7 @@ Route120_EventScript_151719:: @ 8151719 jumpif 3, Route120_EventScript_151735 compare 0x4000, 19 jumpif 3, Route120_EventScript_151715 - jump Route120_EventScript_151735 + goto Route120_EventScript_151735 end Route120_EventScript_151735:: @ 8151735 @@ -136,27 +136,27 @@ Route120_EventScript_151739:: @ 8151739 Route120_EventScript_1517DC:: @ 81517DC setvar 0x8004, 143 - jump Route120_EventScript_151813 + goto Route120_EventScript_151813 end Route120_EventScript_1517E7:: @ 81517E7 setvar 0x8004, 144 - jump Route120_EventScript_151813 + goto Route120_EventScript_151813 end Route120_EventScript_1517F2:: @ 81517F2 setvar 0x8004, 145 - jump Route120_EventScript_151813 + goto Route120_EventScript_151813 end Route120_EventScript_1517FD:: @ 81517FD setvar 0x8004, 146 - jump Route120_EventScript_151813 + goto Route120_EventScript_151813 end Route120_EventScript_151808:: @ 8151808 setvar 0x8004, 147 - jump Route120_EventScript_151813 + goto Route120_EventScript_151813 end Route120_EventScript_151813:: @ 8151813 @@ -189,7 +189,7 @@ Route120_EventScript_151853:: @ 8151853 msgbox Route120_Text_171827, 5 compare RESULT, 0 jumpeq Route120_EventScript_151877 - jump Route120_EventScript_15189D + goto Route120_EventScript_15189D end Route120_EventScript_151877:: @ 8151877 @@ -202,7 +202,7 @@ Route120_EventScript_151884:: @ 8151884 msgbox Route120_Text_17196F, 5 compare RESULT, 0 jumpeq Route120_EventScript_151877 - jump Route120_EventScript_15189D + goto Route120_EventScript_15189D end Route120_EventScript_15189D:: @ 815189D @@ -230,7 +230,7 @@ Route120_EventScript_15189D:: @ 815189D setflag 2145 dowildbattle clearflag 2145 - jump Route120_EventScript_151908 + goto Route120_EventScript_151908 end Route120_EventScript_151908:: @ 8151908 diff --git a/data/scripts/maps/Route121_SafariZoneEntrance.inc b/data/scripts/maps/Route121_SafariZoneEntrance.inc index 251b09c73..6850cdeb2 100644 --- a/data/scripts/maps/Route121_SafariZoneEntrance.inc +++ b/data/scripts/maps/Route121_SafariZoneEntrance.inc @@ -50,12 +50,12 @@ Route121_SafariZoneEntrance_EventScript_15C383:: @ 815C383 move 255, Route121_SafariZoneEntrance_Movement_1A0841 waitmove 0 showmoney 0, 0 - snop + nop msgbox Route121_SafariZoneEntrance_Text_1C3832, 5 compare RESULT, 1 jumpeq Route121_SafariZoneEntrance_EventScript_15C3B3 msgbox Route121_SafariZoneEntrance_Text_1C3895, 4 - jump Route121_SafariZoneEntrance_EventScript_15C46C + goto Route121_SafariZoneEntrance_EventScript_15C46C end Route121_SafariZoneEntrance_EventScript_15C3B3:: @ 815C3B3 @@ -69,7 +69,7 @@ Route121_SafariZoneEntrance_EventScript_15C3B3:: @ 815C3B3 msgbox Route121_SafariZoneEntrance_Text_1C38D9, 4 paymoney 0x1f4, 0 updatemoney 0, 0 - snop + nop msgbox Route121_SafariZoneEntrance_Text_1C38F4, 4 fanfare 370 message Route121_SafariZoneEntrance_Text_1C3910 @@ -94,7 +94,7 @@ Route121_SafariZoneEntrance_EventScript_15C425:: @ 815C425 compare RESULT, 1 jumpeq Route121_SafariZoneEntrance_EventScript_15C44F msgbox Route121_SafariZoneEntrance_Text_1C39A3, 4 - jump Route121_SafariZoneEntrance_EventScript_15C46C + goto Route121_SafariZoneEntrance_EventScript_15C46C end Route121_SafariZoneEntrance_EventScript_15C44F:: @ 815C44F @@ -102,12 +102,12 @@ Route121_SafariZoneEntrance_EventScript_15C44F:: @ 815C44F Route121_SafariZoneEntrance_EventScript_15C450:: @ 815C450 msgbox Route121_SafariZoneEntrance_Text_1C39C3, 4 - jump Route121_SafariZoneEntrance_EventScript_15C46C + goto Route121_SafariZoneEntrance_EventScript_15C46C end Route121_SafariZoneEntrance_EventScript_15C45E:: @ 815C45E msgbox Route121_SafariZoneEntrance_Text_1C38B5, 4 - jump Route121_SafariZoneEntrance_EventScript_15C46C + goto Route121_SafariZoneEntrance_EventScript_15C46C end Route121_SafariZoneEntrance_EventScript_15C46C:: @ 815C46C diff --git a/data/scripts/maps/Route123_BerryMastersHouse.inc b/data/scripts/maps/Route123_BerryMastersHouse.inc index 9290f845d..18e94034d 100644 --- a/data/scripts/maps/Route123_BerryMastersHouse.inc +++ b/data/scripts/maps/Route123_BerryMastersHouse.inc @@ -81,7 +81,7 @@ Route123_BerryMastersHouse_EventScript_163AF0:: @ 8163AF0 giveitem RESULT compare RESULT, 0 jumpeq Route123_BerryMastersHouse_EventScript_1A029B - jump Route123_BerryMastersHouse_EventScript_163C1D + goto Route123_BerryMastersHouse_EventScript_163C1D release end @@ -93,7 +93,7 @@ Route123_BerryMastersHouse_EventScript_163B1E:: @ 8163B1E compare RESULT, 0 jumpeq Route123_BerryMastersHouse_EventScript_1A029B setflag 248 - jump Route123_BerryMastersHouse_EventScript_163C1D + goto Route123_BerryMastersHouse_EventScript_163C1D end Route123_BerryMastersHouse_EventScript_163B4F:: @ 8163B4F @@ -104,7 +104,7 @@ Route123_BerryMastersHouse_EventScript_163B4F:: @ 8163B4F compare RESULT, 0 jumpeq Route123_BerryMastersHouse_EventScript_1A029B setflag 249 - jump Route123_BerryMastersHouse_EventScript_163C1D + goto Route123_BerryMastersHouse_EventScript_163C1D end Route123_BerryMastersHouse_EventScript_163B80:: @ 8163B80 @@ -115,7 +115,7 @@ Route123_BerryMastersHouse_EventScript_163B80:: @ 8163B80 compare RESULT, 0 jumpeq Route123_BerryMastersHouse_EventScript_1A029B setflag 250 - jump Route123_BerryMastersHouse_EventScript_163C1D + goto Route123_BerryMastersHouse_EventScript_163C1D end Route123_BerryMastersHouse_EventScript_163BB1:: @ 8163BB1 @@ -126,7 +126,7 @@ Route123_BerryMastersHouse_EventScript_163BB1:: @ 8163BB1 compare RESULT, 0 jumpeq Route123_BerryMastersHouse_EventScript_1A029B setflag 251 - jump Route123_BerryMastersHouse_EventScript_163C1D + goto Route123_BerryMastersHouse_EventScript_163C1D end Route123_BerryMastersHouse_EventScript_163BE2:: @ 8163BE2 @@ -137,7 +137,7 @@ Route123_BerryMastersHouse_EventScript_163BE2:: @ 8163BE2 compare RESULT, 0 jumpeq Route123_BerryMastersHouse_EventScript_1A029B setflag 252 - jump Route123_BerryMastersHouse_EventScript_163C1D + goto Route123_BerryMastersHouse_EventScript_163C1D end Route123_BerryMastersHouse_EventScript_163C13:: @ 8163C13 diff --git a/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc b/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc index e1049c8be..2d0d624c0 100644 --- a/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc +++ b/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc @@ -13,19 +13,19 @@ Route124_DivingTreasureHuntersHouse_EventScript_163E04:: @ 8163E04 jumpeq Route124_DivingTreasureHuntersHouse_EventScript_163E20 msgbox Route124_DivingTreasureHuntersHouse_Text_19F416, 4 setflag 217 - jump Route124_DivingTreasureHuntersHouse_EventScript_163E2E + goto Route124_DivingTreasureHuntersHouse_EventScript_163E2E end Route124_DivingTreasureHuntersHouse_EventScript_163E20:: @ 8163E20 msgbox Route124_DivingTreasureHuntersHouse_Text_19F48F, 4 - jump Route124_DivingTreasureHuntersHouse_EventScript_163E2E + goto Route124_DivingTreasureHuntersHouse_EventScript_163E2E end Route124_DivingTreasureHuntersHouse_EventScript_163E2E:: @ 8163E2E call Route124_DivingTreasureHuntersHouse_EventScript_163E44 compare 0x4001, 0 jumpeq Route124_DivingTreasureHuntersHouse_EventScript_164329 - jump Route124_DivingTreasureHuntersHouse_EventScript_163EA2 + goto Route124_DivingTreasureHuntersHouse_EventScript_163EA2 end Route124_DivingTreasureHuntersHouse_EventScript_163E44:: @ 8163E44 @@ -62,7 +62,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_163E9C:: @ 8163E9C Route124_DivingTreasureHuntersHouse_EventScript_163EA2:: @ 8163EA2 msgbox Route124_DivingTreasureHuntersHouse_Text_19F544, 4 - jump Route124_DivingTreasureHuntersHouse_EventScript_163EB0 + goto Route124_DivingTreasureHuntersHouse_EventScript_163EB0 end Route124_DivingTreasureHuntersHouse_EventScript_163EB0:: @ 8163EB0 @@ -91,7 +91,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_163F61:: @ 8163F61 switch RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_164256 case 1, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_163F87:: @ 8163F87 @@ -99,7 +99,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_163F87:: @ 8163F87 switch RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_164265 case 1, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_163FAD:: @ 8163FAD @@ -108,7 +108,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_163FAD:: @ 8163FAD case 0, Route124_DivingTreasureHuntersHouse_EventScript_164256 case 1, Route124_DivingTreasureHuntersHouse_EventScript_164265 case 2, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_163FDE:: @ 8163FDE @@ -116,7 +116,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_163FDE:: @ 8163FDE switch RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_164274 case 1, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_164004:: @ 8164004 @@ -125,7 +125,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_164004:: @ 8164004 case 0, Route124_DivingTreasureHuntersHouse_EventScript_164256 case 1, Route124_DivingTreasureHuntersHouse_EventScript_164274 case 2, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_164035:: @ 8164035 @@ -134,7 +134,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_164035:: @ 8164035 case 0, Route124_DivingTreasureHuntersHouse_EventScript_164265 case 1, Route124_DivingTreasureHuntersHouse_EventScript_164274 case 2, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_164066:: @ 8164066 @@ -144,7 +144,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_164066:: @ 8164066 case 1, Route124_DivingTreasureHuntersHouse_EventScript_164265 case 2, Route124_DivingTreasureHuntersHouse_EventScript_164274 case 3, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_1640A2:: @ 81640A2 @@ -152,7 +152,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_1640A2:: @ 81640A2 switch RESULT case 0, Route124_DivingTreasureHuntersHouse_EventScript_164283 case 1, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_1640C8:: @ 81640C8 @@ -161,7 +161,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_1640C8:: @ 81640C8 case 0, Route124_DivingTreasureHuntersHouse_EventScript_164256 case 1, Route124_DivingTreasureHuntersHouse_EventScript_164283 case 2, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_1640F9:: @ 81640F9 @@ -170,7 +170,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_1640F9:: @ 81640F9 case 0, Route124_DivingTreasureHuntersHouse_EventScript_164265 case 1, Route124_DivingTreasureHuntersHouse_EventScript_164283 case 2, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_16412A:: @ 816412A @@ -180,7 +180,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_16412A:: @ 816412A case 1, Route124_DivingTreasureHuntersHouse_EventScript_164265 case 2, Route124_DivingTreasureHuntersHouse_EventScript_164283 case 3, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_164166:: @ 8164166 @@ -189,7 +189,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_164166:: @ 8164166 case 0, Route124_DivingTreasureHuntersHouse_EventScript_164274 case 1, Route124_DivingTreasureHuntersHouse_EventScript_164283 case 2, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_164197:: @ 8164197 @@ -199,7 +199,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_164197:: @ 8164197 case 1, Route124_DivingTreasureHuntersHouse_EventScript_164274 case 2, Route124_DivingTreasureHuntersHouse_EventScript_164283 case 3, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_1641D3:: @ 81641D3 @@ -209,7 +209,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_1641D3:: @ 81641D3 case 1, Route124_DivingTreasureHuntersHouse_EventScript_164274 case 2, Route124_DivingTreasureHuntersHouse_EventScript_164283 case 3, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_16420F:: @ 816420F @@ -220,28 +220,28 @@ Route124_DivingTreasureHuntersHouse_EventScript_16420F:: @ 816420F case 2, Route124_DivingTreasureHuntersHouse_EventScript_164274 case 3, Route124_DivingTreasureHuntersHouse_EventScript_164283 case 4, Route124_DivingTreasureHuntersHouse_EventScript_16431F - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_164256:: @ 8164256 setvar 0x8008, 48 setvar 0x8009, 95 - jump Route124_DivingTreasureHuntersHouse_EventScript_164292 + goto Route124_DivingTreasureHuntersHouse_EventScript_164292 Route124_DivingTreasureHuntersHouse_EventScript_164265:: @ 8164265 setvar 0x8008, 50 setvar 0x8009, 96 - jump Route124_DivingTreasureHuntersHouse_EventScript_164292 + goto Route124_DivingTreasureHuntersHouse_EventScript_164292 Route124_DivingTreasureHuntersHouse_EventScript_164274:: @ 8164274 setvar 0x8008, 49 setvar 0x8009, 97 - jump Route124_DivingTreasureHuntersHouse_EventScript_164292 + goto Route124_DivingTreasureHuntersHouse_EventScript_164292 Route124_DivingTreasureHuntersHouse_EventScript_164283:: @ 8164283 setvar 0x8008, 51 setvar 0x8009, 98 - jump Route124_DivingTreasureHuntersHouse_EventScript_164292 + goto Route124_DivingTreasureHuntersHouse_EventScript_164292 Route124_DivingTreasureHuntersHouse_EventScript_164292:: @ 8164292 bufferitem 0, 0x8008 @@ -255,7 +255,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_164292:: @ 8164292 checkitem 0x8008, 2 compare RESULT, 0 jumpeq Route124_DivingTreasureHuntersHouse_EventScript_1642D3 - jump Route124_DivingTreasureHuntersHouse_EventScript_164315 + goto Route124_DivingTreasureHuntersHouse_EventScript_164315 end Route124_DivingTreasureHuntersHouse_EventScript_1642D3:: @ 81642D3 @@ -268,7 +268,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_1642D3:: @ 81642D3 msgbox Route124_DivingTreasureHuntersHouse_Text_19F629, 5 compare RESULT, 1 jumpeq Route124_DivingTreasureHuntersHouse_EventScript_163EB0 - jump Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end Route124_DivingTreasureHuntersHouse_EventScript_164315:: @ 8164315 diff --git a/data/scripts/maps/RustboroCity.inc b/data/scripts/maps/RustboroCity.inc index c338e8b67..77f0a5f6f 100644 --- a/data/scripts/maps/RustboroCity.inc +++ b/data/scripts/maps/RustboroCity.inc @@ -127,7 +127,7 @@ RustboroCity_EventScript_14C481:: @ 814C481 movespriteperm 9, 14, 21 spritebehave 9, 10 setvar 0x8004, 0 - jump RustboroCity_EventScript_14C4F4 + goto RustboroCity_EventScript_14C4F4 end RustboroCity_EventScript_14C498:: @ 814C498 @@ -135,7 +135,7 @@ RustboroCity_EventScript_14C498:: @ 814C498 movespriteperm 9, 14, 21 spritebehave 9, 10 setvar 0x8004, 1 - jump RustboroCity_EventScript_14C4F4 + goto RustboroCity_EventScript_14C4F4 end RustboroCity_EventScript_14C4AF:: @ 814C4AF @@ -143,7 +143,7 @@ RustboroCity_EventScript_14C4AF:: @ 814C4AF movespriteperm 9, 14, 21 spritebehave 9, 10 setvar 0x8004, 2 - jump RustboroCity_EventScript_14C4F4 + goto RustboroCity_EventScript_14C4F4 end RustboroCity_EventScript_14C4C6:: @ 814C4C6 @@ -151,7 +151,7 @@ RustboroCity_EventScript_14C4C6:: @ 814C4C6 movespriteperm 9, 14, 21 spritebehave 9, 10 setvar 0x8004, 3 - jump RustboroCity_EventScript_14C4F4 + goto RustboroCity_EventScript_14C4F4 end RustboroCity_EventScript_14C4DD:: @ 814C4DD @@ -159,7 +159,7 @@ RustboroCity_EventScript_14C4DD:: @ 814C4DD movespriteperm 9, 14, 21 spritebehave 9, 10 setvar 0x8004, 4 - jump RustboroCity_EventScript_14C4F4 + goto RustboroCity_EventScript_14C4F4 end RustboroCity_EventScript_14C4F4:: @ 814C4F4 @@ -335,31 +335,31 @@ RustboroCity_EventScript_14C5FF:: @ 814C5FF RustboroCity_EventScript_14C614:: @ 814C614 checksound setvar 0x4001, 4 - jump RustboroCity_EventScript_14C77D + goto RustboroCity_EventScript_14C77D end RustboroCity_EventScript_14C620:: @ 814C620 lockall setvar 0x4001, 0 - jump RustboroCity_EventScript_14C650 + goto RustboroCity_EventScript_14C650 end RustboroCity_EventScript_14C62C:: @ 814C62C lockall setvar 0x4001, 1 - jump RustboroCity_EventScript_14C650 + goto RustboroCity_EventScript_14C650 end RustboroCity_EventScript_14C638:: @ 814C638 lockall setvar 0x4001, 2 - jump RustboroCity_EventScript_14C650 + goto RustboroCity_EventScript_14C650 end RustboroCity_EventScript_14C644:: @ 814C644 lockall setvar 0x4001, 3 - jump RustboroCity_EventScript_14C650 + goto RustboroCity_EventScript_14C650 end RustboroCity_EventScript_14C650:: @ 814C650 @@ -435,25 +435,25 @@ RustboroCity_Movement_14C74B:: @ 814C74B RustboroCity_EventScript_14C74D:: @ 814C74D lockall setvar 0x4001, 0 - jump RustboroCity_EventScript_14C77D + goto RustboroCity_EventScript_14C77D end RustboroCity_EventScript_14C759:: @ 814C759 lockall setvar 0x4001, 1 - jump RustboroCity_EventScript_14C77D + goto RustboroCity_EventScript_14C77D end RustboroCity_EventScript_14C765:: @ 814C765 lockall setvar 0x4001, 2 - jump RustboroCity_EventScript_14C77D + goto RustboroCity_EventScript_14C77D end RustboroCity_EventScript_14C771:: @ 814C771 lockall setvar 0x4001, 3 - jump RustboroCity_EventScript_14C77D + goto RustboroCity_EventScript_14C77D end RustboroCity_EventScript_14C77D:: @ 814C77D diff --git a/data/scripts/maps/RustboroCity_Gym.inc b/data/scripts/maps/RustboroCity_Gym.inc index e4f91f82e..776cb5c0a 100644 --- a/data/scripts/maps/RustboroCity_Gym.inc +++ b/data/scripts/maps/RustboroCity_Gym.inc @@ -22,7 +22,7 @@ RustboroCity_Gym_EventScript_1578FE:: @ 81578FE call RustboroCity_Gym_EventScript_1A01C0 compare 0x4085, 6 callif 1, RustboroCity_Gym_EventScript_1A00FB - jump RustboroCity_Gym_EventScript_15793C + goto RustboroCity_Gym_EventScript_15793C end RustboroCity_Gym_EventScript_15793C:: @ 815793C @@ -62,14 +62,14 @@ RustboroCity_Gym_EventScript_1579AD:: @ 81579AD lockall checkflag 2055 jumpeq RustboroCity_Gym_EventScript_1579CD - jump RustboroCity_Gym_EventScript_1579D7 + goto RustboroCity_Gym_EventScript_1579D7 end RustboroCity_Gym_EventScript_1579BD:: @ 81579BD lockall checkflag 2055 jumpeq RustboroCity_Gym_EventScript_1579CD - jump RustboroCity_Gym_EventScript_1579D7 + goto RustboroCity_Gym_EventScript_1579D7 end RustboroCity_Gym_EventScript_1579CD:: @ 81579CD diff --git a/data/scripts/maps/RustboroCity_PokemonSchool.inc b/data/scripts/maps/RustboroCity_PokemonSchool.inc index 8b037a3e7..168c0aaa2 100644 --- a/data/scripts/maps/RustboroCity_PokemonSchool.inc +++ b/data/scripts/maps/RustboroCity_PokemonSchool.inc @@ -4,7 +4,7 @@ RustboroCity_PokemonSchool_MapScripts:: @ 81579E1 RustboroCity_PokemonSchool_EventScript_1579E2:: @ 81579E2 lockall msgbox RustboroCity_PokemonSchool_Text_184321, 4 - jump RustboroCity_PokemonSchool_EventScript_1579F1 + goto RustboroCity_PokemonSchool_EventScript_1579F1 end RustboroCity_PokemonSchool_EventScript_1579F1:: @ 81579F1 @@ -23,27 +23,27 @@ RustboroCity_PokemonSchool_EventScript_1579F1:: @ 81579F1 RustboroCity_PokemonSchool_EventScript_157A50:: @ 8157A50 msgbox RustboroCity_PokemonSchool_Text_184389, 4 - jump RustboroCity_PokemonSchool_EventScript_1579F1 + goto RustboroCity_PokemonSchool_EventScript_1579F1 end RustboroCity_PokemonSchool_EventScript_157A5E:: @ 8157A5E msgbox RustboroCity_PokemonSchool_Text_184447, 4 - jump RustboroCity_PokemonSchool_EventScript_1579F1 + goto RustboroCity_PokemonSchool_EventScript_1579F1 end RustboroCity_PokemonSchool_EventScript_157A6C:: @ 8157A6C msgbox RustboroCity_PokemonSchool_Text_1844EC, 4 - jump RustboroCity_PokemonSchool_EventScript_1579F1 + goto RustboroCity_PokemonSchool_EventScript_1579F1 end RustboroCity_PokemonSchool_EventScript_157A7A:: @ 8157A7A msgbox RustboroCity_PokemonSchool_Text_1845A5, 4 - jump RustboroCity_PokemonSchool_EventScript_1579F1 + goto RustboroCity_PokemonSchool_EventScript_1579F1 end RustboroCity_PokemonSchool_EventScript_157A88:: @ 8157A88 msgbox RustboroCity_PokemonSchool_Text_184627, 4 - jump RustboroCity_PokemonSchool_EventScript_1579F1 + goto RustboroCity_PokemonSchool_EventScript_1579F1 end RustboroCity_PokemonSchool_EventScript_157A96:: @ 8157A96 diff --git a/data/scripts/maps/SSTidalCorridor.inc b/data/scripts/maps/SSTidalCorridor.inc index 58cfbec47..a301bb6fe 100644 --- a/data/scripts/maps/SSTidalCorridor.inc +++ b/data/scripts/maps/SSTidalCorridor.inc @@ -193,7 +193,7 @@ SSTidalCorridor_EventScript_15FE84:: @ 815FE84 checktrainerflag OPPONENT_ANETTE jumpif 0, SSTidalCorridor_EventScript_15FED5 setflag 247 - jump SSTidalCorridor_EventScript_15FE7A + goto SSTidalCorridor_EventScript_15FE7A return SSTidalCorridor_EventScript_15FED5:: @ 815FED5 diff --git a/data/scripts/maps/SafariZone_Southeast.inc b/data/scripts/maps/SafariZone_Southeast.inc index 22fd5ec56..f0529fbec 100644 --- a/data/scripts/maps/SafariZone_Southeast.inc +++ b/data/scripts/maps/SafariZone_Southeast.inc @@ -80,7 +80,7 @@ SafariZone_Southeast_EventScript_160105:: @ 8160105 waitmove 0 move 255, SafariZone_Southeast_Movement_16014B waitmove 0 - jump SafariZone_Southeast_EventScript_160139 + goto SafariZone_Southeast_EventScript_160139 end SafariZone_Southeast_EventScript_16011F:: @ 816011F @@ -88,7 +88,7 @@ SafariZone_Southeast_EventScript_16011F:: @ 816011F waitmove 0 move 255, SafariZone_Southeast_Movement_16014D waitmove 0 - jump SafariZone_Southeast_EventScript_160139 + goto SafariZone_Southeast_EventScript_160139 end SafariZone_Southeast_EventScript_160139:: @ 8160139 diff --git a/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc b/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc index 38a1c9a74..6238e7f4a 100644 --- a/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc @@ -6,7 +6,7 @@ ShoalCave_LowTideEntranceRoom_MapScript1_15E05D:: @ 815E05D special UpdateShoalTideFlag checkflag 2106 jumpeq ShoalCave_LowTideEntranceRoom_EventScript_15E06E - jump ShoalCave_LowTideEntranceRoom_EventScript_15E072 + goto ShoalCave_LowTideEntranceRoom_EventScript_15E072 ShoalCave_LowTideEntranceRoom_EventScript_15E06E:: @ 815E06E setmapfooter 169 diff --git a/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc b/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc index 3078b4625..bed2d7b21 100644 --- a/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc @@ -6,7 +6,7 @@ ShoalCave_LowTideInnerRoom_MapScripts:: @ 815E192 ShoalCave_LowTideInnerRoom_MapScript1_15E19D:: @ 815E19D checkflag 2106 jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E1AB - jump ShoalCave_LowTideInnerRoom_EventScript_15E1AF + goto ShoalCave_LowTideInnerRoom_EventScript_15E1AF ShoalCave_LowTideInnerRoom_EventScript_15E1AB:: @ 815E1AB setmapfooter 170 @@ -26,7 +26,7 @@ ShoalCave_LowTideInnerRoom_EventScript_15E1B9:: @ 815E1B9 checkflag 2106 jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E1DA setmaptile 31, 8, 856, 1 - jump ShoalCave_LowTideInnerRoom_EventScript_15E1DA + goto ShoalCave_LowTideInnerRoom_EventScript_15E1DA end ShoalCave_LowTideInnerRoom_EventScript_15E1DA:: @ 815E1DA @@ -35,28 +35,28 @@ ShoalCave_LowTideInnerRoom_EventScript_15E1DA:: @ 815E1DA checkflag 2106 jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E1FB setmaptile 14, 26, 856, 1 - jump ShoalCave_LowTideInnerRoom_EventScript_15E1FB + goto ShoalCave_LowTideInnerRoom_EventScript_15E1FB end ShoalCave_LowTideInnerRoom_EventScript_15E1FB:: @ 815E1FB checkflag 956 jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E213 setmaptile 41, 20, 857, 1 - jump ShoalCave_LowTideInnerRoom_EventScript_15E213 + goto ShoalCave_LowTideInnerRoom_EventScript_15E213 end ShoalCave_LowTideInnerRoom_EventScript_15E213:: @ 815E213 checkflag 957 jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E22B setmaptile 41, 10, 857, 1 - jump ShoalCave_LowTideInnerRoom_EventScript_15E22B + goto ShoalCave_LowTideInnerRoom_EventScript_15E22B end ShoalCave_LowTideInnerRoom_EventScript_15E22B:: @ 815E22B checkflag 958 jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E243 setmaptile 6, 9, 857, 1 - jump ShoalCave_LowTideInnerRoom_EventScript_15E243 + goto ShoalCave_LowTideInnerRoom_EventScript_15E243 end ShoalCave_LowTideInnerRoom_EventScript_15E243:: @ 815E243 diff --git a/data/scripts/maps/SlateportCity_Harbor.inc b/data/scripts/maps/SlateportCity_Harbor.inc index d65d28877..d7769eb81 100644 --- a/data/scripts/maps/SlateportCity_Harbor.inc +++ b/data/scripts/maps/SlateportCity_Harbor.inc @@ -25,19 +25,19 @@ SlateportCity_Harbor_EventScript_155F89:: @ 8155F89 SlateportCity_Harbor_EventScript_155F9B:: @ 8155F9B lockall setvar 0x8008, 0 - jump SlateportCity_Harbor_EventScript_155FD5 + goto SlateportCity_Harbor_EventScript_155FD5 end SlateportCity_Harbor_EventScript_155FA7:: @ 8155FA7 lockall setvar 0x8008, 1 - jump SlateportCity_Harbor_EventScript_155FD5 + goto SlateportCity_Harbor_EventScript_155FD5 end SlateportCity_Harbor_EventScript_155FB3:: @ 8155FB3 lockall setvar 0x8008, 2 - jump SlateportCity_Harbor_EventScript_155FD5 + goto SlateportCity_Harbor_EventScript_155FD5 end SlateportCity_Harbor_EventScript_155FBF:: @ 8155FBF @@ -45,7 +45,7 @@ SlateportCity_Harbor_EventScript_155FBF:: @ 8155FBF setvar 0x8008, 3 move 255, SlateportCity_Harbor_Movement_1560C2 waitmove 0 - jump SlateportCity_Harbor_EventScript_155FD5 + goto SlateportCity_Harbor_EventScript_155FD5 end SlateportCity_Harbor_EventScript_155FD5:: @ 8155FD5 @@ -172,7 +172,7 @@ SlateportCity_Harbor_EventScript_1560D9:: @ 81560D9 jumpeq SlateportCity_Harbor_EventScript_156135 message SlateportCity_Harbor_Text_17FB0A waittext - jump SlateportCity_Harbor_EventScript_1560FD + goto SlateportCity_Harbor_EventScript_1560FD end SlateportCity_Harbor_EventScript_1560FD:: @ 81560FD @@ -213,7 +213,7 @@ SlateportCity_Harbor_EventScript_156167:: @ 8156167 SlateportCity_Harbor_EventScript_15618A:: @ 815618A message SlateportCity_Harbor_Text_17FBE5 waittext - jump SlateportCity_Harbor_EventScript_1560FD + goto SlateportCity_Harbor_EventScript_1560FD end SlateportCity_Harbor_EventScript_156196:: @ 8156196 @@ -319,7 +319,7 @@ SlateportCity_Harbor_EventScript_15629D:: @ 815629D SlateportCity_Harbor_EventScript_1562A7:: @ 81562A7 message SlateportCity_Harbor_Text_18028B waittext - jump SlateportCity_Harbor_EventScript_1562B3 + goto SlateportCity_Harbor_EventScript_1562B3 end SlateportCity_Harbor_EventScript_1562B3:: @ 81562B3 @@ -341,7 +341,7 @@ SlateportCity_Harbor_EventScript_1562EA:: @ 81562EA removeitem ITEM_SCANNER, 1 msgbox SlateportCity_Harbor_Text_18046B, 4 setflag 294 - jump SlateportCity_Harbor_EventScript_156380 + goto SlateportCity_Harbor_EventScript_156380 end SlateportCity_Harbor_EventScript_15632A:: @ 815632A @@ -354,7 +354,7 @@ SlateportCity_Harbor_EventScript_15632A:: @ 815632A removeitem ITEM_SCANNER, 1 msgbox SlateportCity_Harbor_Text_18046B, 4 setflag 294 - jump SlateportCity_Harbor_EventScript_156380 + goto SlateportCity_Harbor_EventScript_156380 end SlateportCity_Harbor_EventScript_15636A:: @ 815636A @@ -365,7 +365,7 @@ SlateportCity_Harbor_EventScript_15636A:: @ 815636A SlateportCity_Harbor_EventScript_156374:: @ 8156374 message SlateportCity_Harbor_Text_180447 waittext - jump SlateportCity_Harbor_EventScript_1562B3 + goto SlateportCity_Harbor_EventScript_1562B3 end SlateportCity_Harbor_EventScript_156380:: @ 8156380 diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc index e84f8ccc6..83cac24ef 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc @@ -20,19 +20,19 @@ SlateportCity_OceanicMuseum_1F_EventScript_155AE4:: @ 8155AE4 lockall move 255, SlateportCity_OceanicMuseum_1F_Movement_1A083F waitmove 0 - jump SlateportCity_OceanicMuseum_1F_EventScript_155B06 + goto SlateportCity_OceanicMuseum_1F_EventScript_155B06 end SlateportCity_OceanicMuseum_1F_EventScript_155AF5:: @ 8155AF5 lockall move 255, SlateportCity_OceanicMuseum_1F_Movement_1A0843 waitmove 0 - jump SlateportCity_OceanicMuseum_1F_EventScript_155B06 + goto SlateportCity_OceanicMuseum_1F_EventScript_155B06 end SlateportCity_OceanicMuseum_1F_EventScript_155B06:: @ 8155B06 showmoney 0, 0 - snop + nop msgbox SlateportCity_OceanicMuseum_1F_Text_17E18D, 5 compare RESULT, 1 jumpeq SlateportCity_OceanicMuseum_1F_EventScript_155B2D @@ -49,7 +49,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B2D:: @ 8155B2D jumpeq SlateportCity_OceanicMuseum_1F_EventScript_155B5A paymoney 0x32, 0 updatemoney 0, 0 - snop + nop msgbox SlateportCity_OceanicMuseum_1F_Text_17E1DE, 4 setvar 0x40aa, 1 hidemoney 0, 0 diff --git a/data/scripts/maps/SlateportCity_PokemonFanClub.inc b/data/scripts/maps/SlateportCity_PokemonFanClub.inc index 0a7466a3b..fa2aae4ab 100644 --- a/data/scripts/maps/SlateportCity_PokemonFanClub.inc +++ b/data/scripts/maps/SlateportCity_PokemonFanClub.inc @@ -18,7 +18,7 @@ SlateportCity_PokemonFanClub_EventScript_15576B:: @ 815576B SlateportCity_PokemonFanClub_EventScript_155795:: @ 8155795 setvar 0x40b7, 1 msgbox SlateportCity_PokemonFanClub_Text_17D773, 4 - jump SlateportCity_PokemonFanClub_EventScript_155808 + goto SlateportCity_PokemonFanClub_EventScript_155808 end SlateportCity_PokemonFanClub_EventScript_1557A8:: @ 81557A8 @@ -38,7 +38,7 @@ SlateportCity_PokemonFanClub_EventScript_1557A8:: @ 81557A8 compare 0x40b7, 2 jumpeq SlateportCity_PokemonFanClub_EventScript_1557FE msgbox SlateportCity_PokemonFanClub_Text_17DA14, 4 - jump SlateportCity_PokemonFanClub_EventScript_155808 + goto SlateportCity_PokemonFanClub_EventScript_155808 end SlateportCity_PokemonFanClub_EventScript_1557FE:: @ 81557FE diff --git a/data/scripts/maps/SootopolisCity_Gym_1F.inc b/data/scripts/maps/SootopolisCity_Gym_1F.inc index 32bf4d619..9fe6da43d 100644 --- a/data/scripts/maps/SootopolisCity_Gym_1F.inc +++ b/data/scripts/maps/SootopolisCity_Gym_1F.inc @@ -104,7 +104,7 @@ SootopolisCity_Gym_1F_EventScript_15B02D:: @ 815B02D setflag 2062 setvar 0x8008, 8 call SootopolisCity_Gym_1F_EventScript_1A01C0 - jump SootopolisCity_Gym_1F_EventScript_15B056 + goto SootopolisCity_Gym_1F_EventScript_15B056 end SootopolisCity_Gym_1F_EventScript_15B056:: @ 815B056 @@ -139,14 +139,14 @@ SootopolisCity_Gym_1F_EventScript_15B0A3:: @ 815B0A3 lockall checkflag 2062 jumpeq SootopolisCity_Gym_1F_EventScript_15B0C3 - jump SootopolisCity_Gym_1F_EventScript_15B0CD + goto SootopolisCity_Gym_1F_EventScript_15B0CD end SootopolisCity_Gym_1F_EventScript_15B0B3:: @ 815B0B3 lockall checkflag 2062 jumpeq SootopolisCity_Gym_1F_EventScript_15B0C3 - jump SootopolisCity_Gym_1F_EventScript_15B0CD + goto SootopolisCity_Gym_1F_EventScript_15B0CD end SootopolisCity_Gym_1F_EventScript_15B0C3:: @ 815B0C3 diff --git a/data/scripts/maps/SouthernIsland_Interior.inc b/data/scripts/maps/SouthernIsland_Interior.inc index e5eaadab5..f341f5aeb 100644 --- a/data/scripts/maps/SouthernIsland_Interior.inc +++ b/data/scripts/maps/SouthernIsland_Interior.inc @@ -40,7 +40,7 @@ SouthernIsland_Interior_EventScript_160B95:: @ 8160B95 SouthernIsland_Interior_EventScript_160B9B:: @ 8160B9B lockall setvar 0x8008, 12 - jump SouthernIsland_Interior_EventScript_160BA7 + goto SouthernIsland_Interior_EventScript_160BA7 end SouthernIsland_Interior_EventScript_160BA7:: @ 8160BA7 diff --git a/data/scripts/maps/Underwater_SealedChamber.inc b/data/scripts/maps/Underwater_SealedChamber.inc index d7e7aabcb..bbd0db9d9 100644 --- a/data/scripts/maps/Underwater_SealedChamber.inc +++ b/data/scripts/maps/Underwater_SealedChamber.inc @@ -8,7 +8,7 @@ Underwater_SealedChamber_MapScript1_15F086:: @ 815F086 jumpif 5, Underwater_SealedChamber_EventScript_15F0A6 compare 0x8005, 44 jumpif 5, Underwater_SealedChamber_EventScript_15F0A6 - jump Underwater_SealedChamber_EventScript_15F0AF + goto Underwater_SealedChamber_EventScript_15F0AF Underwater_SealedChamber_EventScript_15F0A6:: @ 815F0A6 warp4 Route134, 255, 60, 31 diff --git a/data/scripts/maps/VictoryRoad_1F.inc b/data/scripts/maps/VictoryRoad_1F.inc index f64ca20ab..3eae03f37 100644 --- a/data/scripts/maps/VictoryRoad_1F.inc +++ b/data/scripts/maps/VictoryRoad_1F.inc @@ -16,7 +16,7 @@ VictoryRoad_1F_EventScript_15DE97:: @ 815DE97 reappear 4 move 4, VictoryRoad_1F_Movement_15DF07 waitmove 0 - jump VictoryRoad_1F_EventScript_15DED3 + goto VictoryRoad_1F_EventScript_15DED3 end VictoryRoad_1F_EventScript_15DEAB:: @ 815DEAB @@ -24,7 +24,7 @@ VictoryRoad_1F_EventScript_15DEAB:: @ 815DEAB reappear 4 move 4, VictoryRoad_1F_Movement_15DF13 waitmove 0 - jump VictoryRoad_1F_EventScript_15DED3 + goto VictoryRoad_1F_EventScript_15DED3 end VictoryRoad_1F_EventScript_15DEBF:: @ 815DEBF @@ -32,7 +32,7 @@ VictoryRoad_1F_EventScript_15DEBF:: @ 815DEBF reappear 4 move 4, VictoryRoad_1F_Movement_15DF1E waitmove 0 - jump VictoryRoad_1F_EventScript_15DED3 + goto VictoryRoad_1F_EventScript_15DED3 end VictoryRoad_1F_EventScript_15DED3:: @ 815DED3 diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index 997b5a31c..38378eb2e 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -132,7 +132,7 @@ SpeakToTrader: jumpeq already_traded message gTextTrader_MenuPrompt waittext - jump do_trader_menu_get + goto do_trader_menu_get end dont_want_to_trade: @@ -156,7 +156,7 @@ do_trader_menu_get: special ScrSpecial_DoesPlayerHaveNoDecorations compare RESULT, TRUE jumpeq player_has_no_decorations - jump do_trader_menu_give + goto do_trader_menu_give end cancelled_get_menu: @@ -166,13 +166,13 @@ cancelled_get_menu: rare_item_cant_trade_away: message gTextTrader_ICantTradeThatOneAway waittext - jump do_trader_menu_get + goto do_trader_menu_get end dont_want_item: message gTextTrader_MenuPrompt waittext - jump do_trader_menu_get + goto do_trader_menu_get end player_has_no_decorations: @@ -203,7 +203,7 @@ cancelled_give_menu: decoration_is_in_use: msgbox gTextTrader_InUseYouCantTradeIt, 4 - jump do_trader_menu_give + goto do_trader_menu_give end decorations_full: @@ -244,11 +244,11 @@ choose_story: specialval RESULT, ScrSpecial_StorytellerUpdateStat compare RESULT, FALSE jumpeq no_stat_update - jump stat_update + goto stat_update cancel_story_menu: compare 0x8008, 0 jumpeq dont_hear_story - jump yes_hear_story + goto yes_hear_story no_stat_update: msgbox gTextStoryteller_CouldThereBeOtherTrainers, 4 msgbox gTextStoryteller_HearAnotherLegendaryTale, MSGBOX_YESNO @@ -261,7 +261,7 @@ yes_hear_story: specialval RESULT, ScrSpecial_StorytellerGetFreeStorySlot compare RESULT, 4 jumpeq cant_record_story @ story list is full - jump prompt_record_story + goto prompt_record_story no_stories_recorded: msgbox gTextStoryteller_ButIKnowOfNoLegendaryTrainers, 4 prompt_record_story: @@ -329,7 +329,7 @@ tell_another_giddy_tale: also_i_was_thinking: msgbox gTextGiddy_AlsoIWasThinking, 4 - jump tell_giddy_tale + goto tell_giddy_tale end tell_giddy_tale: diff --git a/data/scripts/mystery_event_club.inc b/data/scripts/mystery_event_club.inc index 5fd68beca..e3577debf 100644 --- a/data/scripts/mystery_event_club.inc +++ b/data/scripts/mystery_event_club.inc @@ -4,7 +4,7 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1B14:: @ 81B1B14 checkflag 2053 jumpeq PetalburgCity_PokemonCenter_1F_EventScript_1B1BDB msgbox PetalburgCity_PokemonCenter_1F_Text_1B1C97, 4 - jump PetalburgCity_PokemonCenter_1F_EventScript_1B1B2D + goto PetalburgCity_PokemonCenter_1F_EventScript_1B1B2D end PetalburgCity_PokemonCenter_1F_EventScript_1B1B2D:: @ 81B1B2D @@ -19,7 +19,7 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1B2D:: @ 81B1B2D PetalburgCity_PokemonCenter_1F_EventScript_1B1B6C:: @ 81B1B6C msgbox PetalburgCity_PokemonCenter_1F_Text_1B1D3A, 4 - jump PetalburgCity_PokemonCenter_1F_EventScript_1B1B2D + goto PetalburgCity_PokemonCenter_1F_EventScript_1B1B2D end PetalburgCity_PokemonCenter_1F_EventScript_1B1B7A:: @ 81B1B7A @@ -58,7 +58,7 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1BD1:: @ 81B1BD1 PetalburgCity_PokemonCenter_1F_EventScript_1B1BDB:: @ 81B1BDB msgbox PetalburgCity_PokemonCenter_1F_Text_1B202F, 4 - jump PetalburgCity_PokemonCenter_1F_EventScript_1B1BE9 + goto PetalburgCity_PokemonCenter_1F_EventScript_1B1BE9 end PetalburgCity_PokemonCenter_1F_EventScript_1B1BE9:: @ 81B1BE9 @@ -73,7 +73,7 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1BE9:: @ 81B1BE9 PetalburgCity_PokemonCenter_1F_EventScript_1B1C28:: @ 81B1C28 msgbox PetalburgCity_PokemonCenter_1F_Text_1B1D3A, 4 - jump PetalburgCity_PokemonCenter_1F_EventScript_1B1BE9 + goto PetalburgCity_PokemonCenter_1F_EventScript_1B1BE9 end PetalburgCity_PokemonCenter_1F_EventScript_1B1C36:: @ 81B1C36 diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index e9f379b24..776ba0a8b 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -48,13 +48,13 @@ LittlerootTown_MaysHouse_1F_EventScript_1B69B7:: @ 81B69B7 LittlerootTown_BrendansHouse_2F_EventScript_1B69D3:: @ 81B69D3 lockall setvar 0x8004, 0 - jump LittlerootTown_BrendansHouse_2F_EventScript_1B69EB + goto LittlerootTown_BrendansHouse_2F_EventScript_1B69EB end LittlerootTown_MaysHouse_2F_EventScript_1B69DF:: @ 81B69DF lockall setvar 0x8004, 1 - jump LittlerootTown_MaysHouse_2F_EventScript_1B69EB + goto LittlerootTown_MaysHouse_2F_EventScript_1B69EB end LittlerootTown_BrendansHouse_2F_EventScript_1B69EB:: @ 81B69EB @@ -176,7 +176,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6ABF:: @ 81B6ABF setvar 0x4001, 1 move 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1B6BE1 waitmove 0 - jump LittlerootTown_BrendansHouse_1F_EventScript_1B6AB8 + goto LittlerootTown_BrendansHouse_1F_EventScript_1B6AB8 end LittlerootTown_MaysHouse_1F_EventScript_1B6B2E:: @ 81B6B2E @@ -201,7 +201,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6B2E:: @ 81B6B2E setvar 0x4001, 1 move 0x8005, LittlerootTown_MaysHouse_1F_Movement_1B6BE5 waitmove 0 - jump LittlerootTown_MaysHouse_1F_EventScript_1B6AB8 + goto LittlerootTown_MaysHouse_1F_EventScript_1B6AB8 end LittlerootTown_BrendansHouse_1F_EventScript_1B6B9D:: @ 81B6B9D @@ -287,7 +287,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6C3D:: @ 81B6C3D LittlerootTown_BrendansHouse_1F_EventScript_1B6C72:: @ 81B6C72 msgbox LittlerootTown_BrendansHouse_1F_Text_172717, 4 - jump LittlerootTown_BrendansHouse_1F_EventScript_1B6C8A + goto LittlerootTown_BrendansHouse_1F_EventScript_1B6C8A end LittlerootTown_BrendansHouse_1F_EventScript_1B6C80:: @ 81B6C80 diff --git a/data/scripts/pokeblocks.inc b/data/scripts/pokeblocks.inc index 852acd292..05f91a3aa 100644 --- a/data/scripts/pokeblocks.inc +++ b/data/scripts/pokeblocks.inc @@ -3,7 +3,7 @@ FallarborTown_ContestLobby_EventScript_1B7604:: @ 81B7604 setvar 0x8009, 1 move 0x8008, FallarborTown_ContestLobby_Movement_1B7821 waitmove 0 - jump FallarborTown_ContestLobby_EventScript_1B7681 + goto FallarborTown_ContestLobby_EventScript_1B7681 end SlateportCity_ContestLobby_EventScript_1B761E:: @ 81B761E @@ -12,7 +12,7 @@ SlateportCity_ContestLobby_EventScript_1B761E:: @ 81B761E move 6, SlateportCity_ContestLobby_Movement_1A083D move 0x8008, SlateportCity_ContestLobby_Movement_1B7821 waitmove 0 - jump SlateportCity_ContestLobby_EventScript_1B7681 + goto SlateportCity_ContestLobby_EventScript_1B7681 end VerdanturfTown_ContestLobby_EventScript_1B763F:: @ 81B763F @@ -20,7 +20,7 @@ VerdanturfTown_ContestLobby_EventScript_1B763F:: @ 81B763F setvar 0x8009, 1 move 0x8008, VerdanturfTown_ContestLobby_Movement_1B7821 waitmove 0 - jump VerdanturfTown_ContestLobby_EventScript_1B7681 + goto VerdanturfTown_ContestLobby_EventScript_1B7681 end LilycoveCity_ContestLobby_EventScript_1B7659:: @ 81B7659 @@ -30,7 +30,7 @@ LilycoveCity_ContestLobby_EventScript_1B7659:: @ 81B7659 move 10, LilycoveCity_ContestLobby_Movement_1A083D move 0x8008, LilycoveCity_ContestLobby_Movement_1B7821 waitmove 0 - jump LilycoveCity_ContestLobby_EventScript_1B7681 + goto LilycoveCity_ContestLobby_EventScript_1B7681 end FallarborTown_ContestLobby_EventScript_1B7681:: @ 81B7681 @@ -78,17 +78,17 @@ FallarborTown_ContestLobby_EventScript_1B770E:: @ 81B770E checkdailyflags checkflag 2241 jumpeq FallarborTown_ContestLobby_EventScript_1B774F - jump FallarborTown_ContestLobby_EventScript_1B7759 + goto FallarborTown_ContestLobby_EventScript_1B7759 end FallarborTown_ContestLobby_EventScript_1B7726:: @ 81B7726 msgbox FallarborTown_ContestLobby_Text_1B6F1F, 4 - jump FallarborTown_ContestLobby_EventScript_1B7734 + goto FallarborTown_ContestLobby_EventScript_1B7734 end FallarborTown_ContestLobby_EventScript_1B7734:: @ 81B7734 msgbox FallarborTown_ContestLobby_Text_1B6EF1, 4 - jump FallarborTown_ContestLobby_EventScript_1B7742 + goto FallarborTown_ContestLobby_EventScript_1B7742 end FallarborTown_ContestLobby_EventScript_1B7742:: @ 81B7742 @@ -108,7 +108,7 @@ FallarborTown_ContestLobby_EventScript_1B7759:: @ 81B7759 msgbox FallarborTown_ContestLobby_Text_1B704A, 4 giveitem ITEM_PECHA_BERRY setflag 2241 - jump FallarborTown_ContestLobby_EventScript_1B76EF + goto FallarborTown_ContestLobby_EventScript_1B76EF end FallarborTown_ContestLobby_EventScript_1B7776:: @ 81B7776 @@ -123,22 +123,22 @@ FallarborTown_ContestLobby_EventScript_1B7780:: @ 81B7780 FallarborTown_ContestLobby_EventScript_1B778A:: @ 81B778A setvar 0x8008, 4 - jump FallarborTown_ContestLobby_EventScript_1B77B6 + goto FallarborTown_ContestLobby_EventScript_1B77B6 end SlateportCity_ContestLobby_EventScript_1B7795:: @ 81B7795 setvar 0x8008, 2 - jump SlateportCity_ContestLobby_EventScript_1B77B6 + goto SlateportCity_ContestLobby_EventScript_1B77B6 end VerdanturfTown_ContestLobby_EventScript_1B77A0:: @ 81B77A0 setvar 0x8008, 2 - jump VerdanturfTown_ContestLobby_EventScript_1B77B6 + goto VerdanturfTown_ContestLobby_EventScript_1B77B6 end LilycoveCity_ContestLobby_EventScript_1B77AB:: @ 81B77AB setvar 0x8008, 3 - jump LilycoveCity_ContestLobby_EventScript_1B77B6 + goto LilycoveCity_ContestLobby_EventScript_1B77B6 end FallarborTown_ContestLobby_EventScript_1B77B6:: @ 81B77B6 @@ -164,7 +164,7 @@ FallarborTown_ContestLobby_EventScript_1B77E6:: @ 81B77E6 checkdailyflags checkflag 2241 jumpeq FallarborTown_ContestLobby_EventScript_1B77F6 - jump FallarborTown_ContestLobby_EventScript_1B7800 + goto FallarborTown_ContestLobby_EventScript_1B7800 end FallarborTown_ContestLobby_EventScript_1B77F6:: @ 81B77F6 @@ -188,19 +188,19 @@ VerdanturfTown_ContestLobby_Movement_1B7821:: @ 81B7821 step_end FallarborTown_ContestLobby_EventScript_1B7823:: @ 81B7823 - jump FallarborTown_ContestLobby_EventScript_1B783B + goto FallarborTown_ContestLobby_EventScript_1B783B end SlateportCity_ContestLobby_EventScript_1B7829:: @ 81B7829 - jump SlateportCity_ContestLobby_EventScript_1B783B + goto SlateportCity_ContestLobby_EventScript_1B783B end VerdanturfTown_ContestLobby_EventScript_1B782F:: @ 81B782F - jump VerdanturfTown_ContestLobby_EventScript_1B783B + goto VerdanturfTown_ContestLobby_EventScript_1B783B end LilycoveCity_ContestLobby_EventScript_1B7835:: @ 81B7835 - jump LilycoveCity_ContestLobby_EventScript_1B783B + goto LilycoveCity_ContestLobby_EventScript_1B783B end FallarborTown_ContestLobby_EventScript_1B783B:: @ 81B783B @@ -256,17 +256,17 @@ FallarborTown_ContestLobby_EventScript_1B78A1:: @ 81B78A1 FallarborTown_ContestLobby_EventScript_1B78F3:: @ 81B78F3 msgbox FallarborTown_ContestLobby_Text_1B733B, 4 - jump FallarborTown_ContestLobby_EventScript_1B791D + goto FallarborTown_ContestLobby_EventScript_1B791D end FallarborTown_ContestLobby_EventScript_1B7901:: @ 81B7901 msgbox FallarborTown_ContestLobby_Text_1B7347, 4 - jump FallarborTown_ContestLobby_EventScript_1B791D + goto FallarborTown_ContestLobby_EventScript_1B791D end FallarborTown_ContestLobby_EventScript_1B790F:: @ 81B790F msgbox FallarborTown_ContestLobby_Text_1B735A, 4 - jump FallarborTown_ContestLobby_EventScript_1B791D + goto FallarborTown_ContestLobby_EventScript_1B791D end FallarborTown_ContestLobby_EventScript_1B791D:: @ 81B791D @@ -325,7 +325,7 @@ FallarborTown_ContestLobby_EventScript_1B7980:: @ 81B7980 copyvar 0x8008, RESULT copyvar 0x8004, 0x8008 special SpawnBerryBlenderLinkPlayerSprites - jump FallarborTown_ContestLobby_EventScript_1B799A + goto FallarborTown_ContestLobby_EventScript_1B799A end FallarborTown_ContestLobby_EventScript_1B799A:: @ 81B799A diff --git a/data/scripts/safari_zone.inc b/data/scripts/safari_zone.inc index 03293115b..0394329ee 100644 --- a/data/scripts/safari_zone.inc +++ b/data/scripts/safari_zone.inc @@ -20,7 +20,7 @@ gUnknown_081C342D:: @ 81C342D end EventScript_1C3443: - jump EventScript_1C341B + goto EventScript_1C341B gUnknown_081C3448:: @ 81C3448 lockall @@ -29,7 +29,7 @@ gUnknown_081C3448:: @ 81C3448 waittext waitbutton releaseall - jump EventScript_1C341B + goto EventScript_1C341B gUnknown_081C3459:: @ 81C3459 lockall @@ -38,7 +38,7 @@ gUnknown_081C3459:: @ 81C3459 waittext waitbutton releaseall - jump EventScript_1C341B + goto EventScript_1C341B gUnknown_081C346A:: @ 81C346A lockall diff --git a/data/scripts/tv.inc b/data/scripts/tv.inc index 1f8956811..f91295e49 100644 --- a/data/scripts/tv.inc +++ b/data/scripts/tv.inc @@ -14,7 +14,7 @@ Event_TV:: @ 81A6E72 specialval RESULT, IsTVShowInSearchOfTrainersAiring compare RESULT, 1 jumpeq EventScript_1A6F66 - jump EventScript_1A6F50 + goto EventScript_1A6F50 end EventScript_1A6EBB: @@ -61,7 +61,7 @@ EventScript_1A6F21: waitbutton compare RESULT, 1 jumpif 5, EventScript_1A6F21 - jump EventScript_1A6F37 + goto EventScript_1A6F37 end EventScript_1A6F37: @@ -73,7 +73,7 @@ EventScript_1A6F37: EventScript_1A6F3F: special GetMomOrDadStringForTVMessage msgbox UnknownString_81A0E68, 4 - jump EventScript_1A6F37 + goto EventScript_1A6F37 end EventScript_1A6F50: @@ -82,7 +82,7 @@ EventScript_1A6F50: jumpeq EventScript_1A6EBB waittext waitbutton - jump EventScript_1A6F37 + goto EventScript_1A6F37 end EventScript_1A6F66: @@ -91,5 +91,5 @@ EventScript_1A6F66: waitbutton compare RESULT, 0 jumpeq EventScript_1A6F66 - jump EventScript_1A6F37 + goto EventScript_1A6F37 end -- cgit v1.2.3 From 86e7bf1fd61b151011038cdb281db3de0a1d9e6a Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 24 Sep 2017 14:28:51 -0500 Subject: Replace more script commands and fix German build --- asm/macros/event.inc | 14 +- data-de/event_scripts.s | 544 ++++++++++----------- data-de/field_move_scripts.inc | 56 +-- data/event_scripts.s | 426 ++++++++-------- data/field_move_scripts.inc | 36 +- data/scripts/berry_tree.inc | 24 +- data/scripts/cable_club.inc | 106 ++-- data/scripts/contest_hall.inc | 216 ++++---- data/scripts/day_care.inc | 56 +-- data/scripts/gabby_and_ty.inc | 22 +- data/scripts/magma_chimney.inc | 12 +- data/scripts/maps/AbandonedShip_CaptainsOffice.inc | 6 +- data/scripts/maps/AbandonedShip_Corridors_B1F.inc | 8 +- .../maps/AbandonedShip_HiddenFloorCorridors.inc | 32 +- .../maps/AbandonedShip_HiddenFloorRooms.inc | 16 +- data/scripts/maps/AbandonedShip_Rooms2_1F.inc | 4 +- data/scripts/maps/AncientTomb.inc | 6 +- data/scripts/maps/AquaHideout_1F.inc | 4 +- data/scripts/maps/AquaHideout_B1F.inc | 2 +- data/scripts/maps/BattleTower_Corridor.inc | 4 +- data/scripts/maps/BattleTower_Lobby.inc | 38 +- data/scripts/maps/BattleTower_Outside.inc | 6 +- data/scripts/maps/CaveOfOrigin_1F.inc | 2 +- data/scripts/maps/CaveOfOrigin_B1F.inc | 2 +- data/scripts/maps/CaveOfOrigin_B2F.inc | 2 +- data/scripts/maps/CaveOfOrigin_B3F.inc | 2 +- data/scripts/maps/CaveOfOrigin_B4F.inc | 6 +- data/scripts/maps/DesertRuins.inc | 6 +- data/scripts/maps/DewfordTown.inc | 28 +- data/scripts/maps/DewfordTown_Gym.inc | 34 +- data/scripts/maps/DewfordTown_Hall.inc | 26 +- data/scripts/maps/DewfordTown_House2.inc | 4 +- data/scripts/maps/EverGrandeCity.inc | 2 +- data/scripts/maps/EverGrandeCity_ChampionsRoom.inc | 12 +- data/scripts/maps/EverGrandeCity_DrakesRoom.inc | 6 +- data/scripts/maps/EverGrandeCity_GlaciasRoom.inc | 6 +- data/scripts/maps/EverGrandeCity_HallOfFame.inc | 4 +- data/scripts/maps/EverGrandeCity_PhoebesRoom.inc | 6 +- data/scripts/maps/EverGrandeCity_PokemonLeague.inc | 10 +- data/scripts/maps/EverGrandeCity_SidneysRoom.inc | 6 +- data/scripts/maps/FallarborTown.inc | 2 +- data/scripts/maps/FallarborTown_ContestLobby.inc | 2 +- data/scripts/maps/FallarborTown_House1.inc | 16 +- data/scripts/maps/FallarborTown_House2.inc | 12 +- data/scripts/maps/FortreeCity.inc | 6 +- data/scripts/maps/FortreeCity_Gym.inc | 10 +- data/scripts/maps/FortreeCity_House1.inc | 8 +- data/scripts/maps/FortreeCity_House2.inc | 6 +- data/scripts/maps/FortreeCity_House4.inc | 8 +- data/scripts/maps/GraniteCave_1F.inc | 2 +- data/scripts/maps/GraniteCave_StevensRoom.inc | 10 +- data/scripts/maps/InsideOfTruck.inc | 4 +- data/scripts/maps/IslandCave.inc | 8 +- data/scripts/maps/JaggedPass.inc | 6 +- data/scripts/maps/LavaridgeTown.inc | 56 +-- data/scripts/maps/LavaridgeTown_Gym_1F.inc | 32 +- data/scripts/maps/LavaridgeTown_HerbShop.inc | 4 +- data/scripts/maps/LilycoveCity.inc | 56 +-- data/scripts/maps/LilycoveCity_ContestLobby.inc | 52 +- .../scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc | 4 +- .../scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc | 6 +- .../maps/LilycoveCity_DepartmentStoreElevator.inc | 12 +- .../maps/LilycoveCity_DepartmentStoreRooftop.inc | 30 +- .../maps/LilycoveCity_DepartmentStore_1F.inc | 24 +- data/scripts/maps/LilycoveCity_Harbor.inc | 26 +- data/scripts/maps/LilycoveCity_House2.inc | 4 +- data/scripts/maps/LilycoveCity_House3.inc | 2 +- .../maps/LilycoveCity_LilycoveMuseum_1F.inc | 8 +- .../maps/LilycoveCity_LilycoveMuseum_2F.inc | 24 +- .../maps/LilycoveCity_MoveDeletersHouse.inc | 8 +- .../scripts/maps/LilycoveCity_PokemonCenter_1F.inc | 2 +- .../maps/LilycoveCity_PokemonTrainerFanClub.inc | 76 +-- data/scripts/maps/LittlerootTown.inc | 102 ++-- .../maps/LittlerootTown_BrendansHouse_1F.inc | 12 +- .../maps/LittlerootTown_BrendansHouse_2F.inc | 14 +- data/scripts/maps/LittlerootTown_MaysHouse_1F.inc | 22 +- data/scripts/maps/LittlerootTown_MaysHouse_2F.inc | 36 +- .../maps/LittlerootTown_ProfessorBirchsLab.inc | 32 +- data/scripts/maps/MagmaHideout_B1F.inc | 2 +- data/scripts/maps/MauvilleCity.inc | 20 +- data/scripts/maps/MauvilleCity_BikeShop.inc | 20 +- data/scripts/maps/MauvilleCity_GameCorner.inc | 90 ++-- data/scripts/maps/MauvilleCity_Gym.inc | 34 +- data/scripts/maps/MauvilleCity_House1.inc | 2 +- data/scripts/maps/MauvilleCity_House2.inc | 8 +- data/scripts/maps/MeteorFalls_1F_1R.inc | 2 +- data/scripts/maps/MeteorFalls_1F_2R.inc | 6 +- data/scripts/maps/MossdeepCity.inc | 8 +- data/scripts/maps/MossdeepCity_GameCorner_1F.inc | 28 +- data/scripts/maps/MossdeepCity_GameCorner_B1F.inc | 6 +- data/scripts/maps/MossdeepCity_Gym.inc | 26 +- data/scripts/maps/MossdeepCity_House1.inc | 2 +- data/scripts/maps/MossdeepCity_House2.inc | 4 +- data/scripts/maps/MossdeepCity_House3.inc | 4 +- data/scripts/maps/MossdeepCity_House4.inc | 4 +- data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc | 8 +- data/scripts/maps/MossdeepCity_StevensHouse.inc | 12 +- data/scripts/maps/MtChimney.inc | 16 +- data/scripts/maps/MtChimney_CableCarStation.inc | 6 +- data/scripts/maps/MtPyre_1F.inc | 4 +- data/scripts/maps/MtPyre_6F.inc | 2 +- data/scripts/maps/MtPyre_Exterior.inc | 2 +- data/scripts/maps/MtPyre_Summit.inc | 42 +- data/scripts/maps/NewMauville_Entrance.inc | 6 +- data/scripts/maps/NewMauville_Inside.inc | 10 +- data/scripts/maps/OldaleTown.inc | 18 +- data/scripts/maps/OldaleTown_Mart.inc | 4 +- data/scripts/maps/OldaleTown_PokemonCenter_1F.inc | 2 +- data/scripts/maps/PacifidlogTown_House2.inc | 18 +- data/scripts/maps/PacifidlogTown_House3.inc | 8 +- data/scripts/maps/PacifidlogTown_House4.inc | 4 +- data/scripts/maps/PacifidlogTown_House5.inc | 2 +- data/scripts/maps/PetalburgCity.inc | 20 +- data/scripts/maps/PetalburgCity_Gym.inc | 230 ++++----- data/scripts/maps/PetalburgCity_Mart.inc | 2 +- .../maps/PetalburgCity_PokemonCenter_1F.inc | 8 +- data/scripts/maps/PetalburgCity_WallysHouse.inc | 14 +- data/scripts/maps/PetalburgWoods.inc | 8 +- data/scripts/maps/Route102.inc | 2 +- data/scripts/maps/Route103.inc | 10 +- data/scripts/maps/Route104.inc | 26 +- data/scripts/maps/Route104_MrBrineysHouse.inc | 16 +- .../maps/Route104_PrettyPetalFlowerShop.inc | 22 +- data/scripts/maps/Route104_Prototype.inc | 28 +- data/scripts/maps/Route105.inc | 2 +- data/scripts/maps/Route106.inc | 2 +- data/scripts/maps/Route107.inc | 2 +- data/scripts/maps/Route109.inc | 12 +- data/scripts/maps/Route109_SeashoreHouse.inc | 20 +- data/scripts/maps/Route110.inc | 42 +- .../Route110_SeasideCyclingRoadNorthEntrance.inc | 8 +- .../Route110_SeasideCyclingRoadSouthEntrance.inc | 2 +- data/scripts/maps/Route110_TrickHouseEnd.inc | 26 +- data/scripts/maps/Route110_TrickHouseEntrance.inc | 134 ++--- data/scripts/maps/Route110_TrickHousePuzzle1.inc | 4 +- data/scripts/maps/Route110_TrickHousePuzzle2.inc | 10 +- data/scripts/maps/Route110_TrickHousePuzzle3.inc | 42 +- data/scripts/maps/Route110_TrickHousePuzzle4.inc | 2 +- data/scripts/maps/Route110_TrickHousePuzzle5.inc | 102 ++-- data/scripts/maps/Route110_TrickHousePuzzle6.inc | 2 +- data/scripts/maps/Route110_TrickHousePuzzle7.inc | 56 +-- data/scripts/maps/Route110_TrickHousePuzzle8.inc | 2 +- data/scripts/maps/Route111.inc | 40 +- data/scripts/maps/Route111_OldLadysRestStop.inc | 8 +- .../maps/Route111_WinstrateFamilysHouse.inc | 6 +- data/scripts/maps/Route112.inc | 2 +- data/scripts/maps/Route112_CableCarStation.inc | 6 +- data/scripts/maps/Route113.inc | 8 +- data/scripts/maps/Route113_GlassWorkshop.inc | 52 +- data/scripts/maps/Route114.inc | 12 +- data/scripts/maps/Route114_FossilManiacsHouse.inc | 4 +- data/scripts/maps/Route114_FossilManiacsTunnel.inc | 6 +- data/scripts/maps/Route114_LanettesHouse.inc | 8 +- data/scripts/maps/Route115.inc | 6 +- data/scripts/maps/Route116.inc | 36 +- data/scripts/maps/Route116_TunnelersRestHouse.inc | 2 +- data/scripts/maps/Route117.inc | 14 +- data/scripts/maps/Route118.inc | 16 +- data/scripts/maps/Route119.inc | 36 +- data/scripts/maps/Route119_WeatherInstitute_1F.inc | 4 +- data/scripts/maps/Route119_WeatherInstitute_2F.inc | 8 +- data/scripts/maps/Route120.inc | 52 +- data/scripts/maps/Route121.inc | 4 +- data/scripts/maps/Route121_SafariZoneEntrance.inc | 12 +- data/scripts/maps/Route123.inc | 10 +- data/scripts/maps/Route123_BerryMastersHouse.inc | 46 +- data/scripts/maps/Route124.inc | 8 +- .../maps/Route124_DivingTreasureHuntersHouse.inc | 22 +- data/scripts/maps/Route125.inc | 4 +- data/scripts/maps/Route126.inc | 2 +- data/scripts/maps/Route127.inc | 2 +- data/scripts/maps/Route128.inc | 6 +- data/scripts/maps/Route130.inc | 2 +- data/scripts/maps/Route131.inc | 2 +- data/scripts/maps/RustboroCity.inc | 38 +- data/scripts/maps/RustboroCity_CuttersHouse.inc | 2 +- data/scripts/maps/RustboroCity_DevonCorp_1F.inc | 18 +- data/scripts/maps/RustboroCity_DevonCorp_2F.inc | 38 +- data/scripts/maps/RustboroCity_DevonCorp_3F.inc | 10 +- data/scripts/maps/RustboroCity_Flat2_2F.inc | 4 +- data/scripts/maps/RustboroCity_Gym.inc | 12 +- data/scripts/maps/RustboroCity_House1.inc | 8 +- data/scripts/maps/RustboroCity_Mart.inc | 4 +- data/scripts/maps/RustboroCity_PokemonSchool.inc | 8 +- data/scripts/maps/RusturfTunnel.inc | 26 +- data/scripts/maps/SSTidalCorridor.inc | 34 +- data/scripts/maps/SSTidalRooms.inc | 4 +- data/scripts/maps/SafariZone_Southeast.inc | 6 +- data/scripts/maps/SealedChamber_InnerRoom.inc | 4 +- data/scripts/maps/SealedChamber_OuterRoom.inc | 4 +- .../scripts/maps/ShoalCave_LowTideEntranceRoom.inc | 24 +- data/scripts/maps/ShoalCave_LowTideInnerRoom.inc | 42 +- data/scripts/maps/ShoalCave_LowTideLowerRoom.inc | 10 +- data/scripts/maps/ShoalCave_LowTideStairsRoom.inc | 6 +- data/scripts/maps/SkyPillar_Top.inc | 2 +- data/scripts/maps/SlateportCity.inc | 38 +- data/scripts/maps/SlateportCity_ContestHall.inc | 4 +- data/scripts/maps/SlateportCity_ContestLobby.inc | 2 +- data/scripts/maps/SlateportCity_Harbor.inc | 46 +- data/scripts/maps/SlateportCity_House1.inc | 20 +- data/scripts/maps/SlateportCity_House2.inc | 2 +- .../maps/SlateportCity_OceanicMuseum_1F.inc | 12 +- .../maps/SlateportCity_OceanicMuseum_2F.inc | 10 +- data/scripts/maps/SlateportCity_PokemonFanClub.inc | 50 +- .../maps/SlateportCity_SternsShipyard_1F.inc | 8 +- data/scripts/maps/SootopolisCity.inc | 38 +- data/scripts/maps/SootopolisCity_Gym_1F.inc | 18 +- data/scripts/maps/SootopolisCity_House1.inc | 2 +- data/scripts/maps/SootopolisCity_House2.inc | 4 +- data/scripts/maps/SootopolisCity_House3.inc | 2 +- data/scripts/maps/SootopolisCity_House6.inc | 6 +- data/scripts/maps/SootopolisCity_House8.inc | 20 +- data/scripts/maps/SootopolisCity_Mart.inc | 8 +- .../maps/SootopolisCity_PokemonCenter_1F.inc | 8 +- data/scripts/maps/SouthernIsland_Exterior.inc | 2 +- data/scripts/maps/SouthernIsland_Interior.inc | 10 +- data/scripts/maps/Underwater_SeafloorCavern.inc | 4 +- data/scripts/maps/Underwater_SealedChamber.inc | 4 +- data/scripts/maps/UnknownMap_25_34.inc | 18 +- data/scripts/maps/VerdanturfTown.inc | 4 +- data/scripts/maps/VerdanturfTown_ContestLobby.inc | 4 +- data/scripts/maps/VerdanturfTown_WandasHouse.inc | 16 +- data/scripts/maps/VictoryRoad_1F.inc | 4 +- data/scripts/mauville_man.inc | 74 +-- data/scripts/mystery_event_club.inc | 18 +- data/scripts/players_house.inc | 46 +- data/scripts/pokeblocks.inc | 48 +- data/scripts/safari_zone.inc | 8 +- data/scripts/secret_power_tm.inc | 10 +- data/scripts/tv.inc | 22 +- 230 files changed, 2586 insertions(+), 2586 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 31103747b..8aff02c04 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -31,21 +31,21 @@ .endm @ If the result of the last comparison matches condition (see Comparison operators), jumps to destination and continues script execution from there. - .macro jumpif condition, destination + .macro goto_if condition, destination .byte 0x06 .byte \condition .4byte \destination .endm @ If the result of the last comparison matches condition (see Comparison operators), calls destination. - .macro callif condition, destination + .macro call_if condition, destination .byte 0x07 .byte \condition .4byte \destination .endm @ Jumps to the standard function at index function. - .macro jumpstd function + .macro gotostd function .byte 0x08 .byte \function .endm @@ -57,7 +57,7 @@ .endm @ If the result of the last comparison matches condition (see Comparison operators), jumps to the standard function at index function. - .macro jumpstdif condition, function + .macro gotostd_if condition, function .byte 0x0a .byte \condition .byte \function @@ -1475,8 +1475,8 @@ @ Supplementary - .macro jumpeq dest - jumpif 1, \dest + .macro goto_if_eq dest + goto_if 1, \dest .endm .macro switch var @@ -1485,7 +1485,7 @@ .macro case condition, dest compare 0x8000, \condition - jumpeq \dest + goto_if_eq \dest .endm .macro msgbox text, type=4 diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index 114bc4d97..a06371e58 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -393,20 +393,20 @@ gUnknown_0815F36C:: @ 815F36C waittext waitbutton playsfx 5 - jump EventScript_15F384 + goto EventScript_15F384 end EventScript_15F384: message UnknownString_81A3A87 waittext checkflag 268 - jumpeq EventScript_15F3A0 - jump EventScript_15F3E2 + goto_if_eq EventScript_15F3A0 + goto EventScript_15F3E2 end gUnknown_0815F399:: @ 815F399 lockall - jump EventScript_15F384 + goto EventScript_15F384 end EventScript_15F3A0: @@ -431,7 +431,7 @@ EventScript_15F3E2: EventScript_15F419: msgbox UnknownString_81A38FB, 5 compare RESULT, 0 - jumpeq EventScript_15F384 + goto_if_eq EventScript_15F384 closebutton special SecretBasePC_PackUp releaseall @@ -454,7 +454,7 @@ gUnknown_0815F43A:: @ 815F43A waittext waitbutton playsfx 5 - jump EventScript_15F452 + goto EventScript_15F452 end EventScript_15F452: @@ -471,19 +471,19 @@ EventScript_15F452: gUnknown_0815F49A:: @ 815F49A lockall - jump EventScript_15F452 + goto EventScript_15F452 end EventScript_15F4A1: special sub_80BC56C compare RESULT, 1 - jumpeq EventScript_15F4E0 + goto_if_eq EventScript_15F4E0 compare RESULT, 2 - jumpeq EventScript_15F503 + goto_if_eq EventScript_15F503 special sub_80BC224 msgbox UnknownString_81A3958, 5 compare RESULT, 0 - jumpeq EventScript_15F452 + goto_if_eq EventScript_15F452 msgbox UnknownString_81A3A22, 3 special sub_80BC5BC special sub_80C683C @@ -493,7 +493,7 @@ EventScript_15F4A1: EventScript_15F4E0: msgbox UnknownString_81A3982, 5 compare RESULT, 0 - jumpeq EventScript_15F452 + goto_if_eq EventScript_15F452 msgbox UnknownString_81A3A3A, 3 special sub_80BC5BC special sub_80C683C @@ -510,7 +510,7 @@ EventScript_15F503: EventScript_15F511: message UnknownString_81A3AA2 waittext - jump EventScript_15F452 + goto EventScript_15F452 end EventScript_15F51D: @@ -527,13 +527,13 @@ gUnknown_0815F523:: @ 815F523 gUnknown_0815F528:: @ 815F528 special GetShieldToyTVDecorationInfo compare RESULT, 0 - jumpeq EventScript_15F558 + goto_if_eq EventScript_15F558 compare RESULT, 1 - jumpeq EventScript_15F561 + goto_if_eq EventScript_15F561 compare RESULT, 2 - jumpeq EventScript_15F56A + goto_if_eq EventScript_15F56A compare RESULT, 3 - jumpeq EventScript_15F573 + goto_if_eq EventScript_15F573 end EventScript_15F558: @@ -934,7 +934,7 @@ gUnknown_0819F80B:: @ 819F80B special PlayTrainerEncounterMusic special ScrSpecial_EndTrainerApproach waitstate - jump EventScript_19F8F2 + goto EventScript_19F8F2 gUnknown_0819F818:: @ 819F818 lock @@ -943,10 +943,10 @@ gUnknown_0819F818:: @ 819F818 waitmove 0 specialval RESULT, ScrSpecial_HasTrainerBeenFought compare RESULT, 0 - jumpif 5, EventScript_19F83F + goto_if 5, EventScript_19F83F special PlayTrainerEncounterMusic special sub_8082524 - jump EventScript_19F8F2 + goto EventScript_19F8F2 EventScript_19F83F: endtrainerbattle @@ -957,13 +957,13 @@ gUnknown_0819F840:: @ 819F840 call EventScript_19F8E5 specialval RESULT, ScrSpecial_HasTrainerBeenFought compare RESULT, 0 - jumpif 5, EventScript_19F877 + goto_if 5, EventScript_19F877 special CheckForAlivePartyMons compare RESULT, 0 - jumpif 5, EventScript_19F870 + goto_if 5, EventScript_19F870 special PlayTrainerEncounterMusic special sub_8082524 - jump EventScript_19F8F2 + goto EventScript_19F8F2 EventScript_19F870: special ScrSpecial_ShowTrainerNonBattlingSpeech @@ -986,7 +986,7 @@ gUnknown_0819F887:: @ 819F887 call EventScript_19F8E5 specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare RESULT, 0 - jumpeq EventScript_19F8AD + goto_if_eq EventScript_19F8AD special PlayTrainerEncounterMusic special sub_8082524 special ScrSpecial_ShowTrainerIntroSpeech @@ -1003,10 +1003,10 @@ EventScript_19F8AD: gUnknown_0819F8AE:: @ 819F8AE specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare RESULT, 0 - jumpeq EventScript_19F8DD + goto_if_eq EventScript_19F8DD special CheckForAlivePartyMons compare RESULT, 0 - jumpif 5, EventScript_19F8DE + goto_if 5, EventScript_19F8DE special PlayTrainerEncounterMusic special sub_8082524 special ScrSpecial_ShowTrainerIntroSpeech @@ -1043,15 +1043,15 @@ EventScript_19F8F2: reptrainerbattle specialval RESULT, ScrSpecial_GetTrainerBattleMode compare RESULT, 0 - jumpeq EventScript_19F934 + goto_if_eq EventScript_19F934 compare RESULT, 2 - jumpeq EventScript_19F936 + goto_if_eq EventScript_19F936 compare RESULT, 1 - jumpeq EventScript_19F936 + goto_if_eq EventScript_19F936 compare RESULT, 6 - jumpeq EventScript_19F936 + goto_if_eq EventScript_19F936 compare RESULT, 8 - jumpeq EventScript_19F936 + goto_if_eq EventScript_19F936 EventScript_19F934: releaseall @@ -1298,13 +1298,13 @@ EverGrandeCity_HallOfFame_EventScript_19FC13:: @ 819FC13 clearflag 861 special sub_810FAA0 checkflag 291 - callif 0, EverGrandeCity_HallOfFame_EventScript_19FC62 + call_if 0, EverGrandeCity_HallOfFame_EventScript_19FC62 checkflag 255 - callif 0, EverGrandeCity_HallOfFame_EventScript_19FC70 + call_if 0, EverGrandeCity_HallOfFame_EventScript_19FC70 checkflag 298 - callif 0, EverGrandeCity_HallOfFame_EventScript_19FC5A + call_if 0, EverGrandeCity_HallOfFame_EventScript_19FC5A checkflag 123 - callif 0, EverGrandeCity_HallOfFame_EventScript_19FC5E + call_if 0, EverGrandeCity_HallOfFame_EventScript_19FC5E return EverGrandeCity_HallOfFame_EventScript_19FC5A:: @ 819FC5A @@ -1328,25 +1328,25 @@ EverGrandeCity_HallOfFame_EventScript_19FC70:: @ 819FC70 S_WhiteOut:: @ 819FC74 call EverGrandeCity_HallOfFame_EventScript_19FD09 call EventScript_19FC84 - jump gUnknown_0819FC9F + goto gUnknown_0819FC9F end EventScript_19FC84: checkflag 221 - jumpeq Route101_EventScript_1A14DC + goto_if_eq Route101_EventScript_1A14DC checkflag 1213 - jumpif 0, Route101_EventScript_1A14DC + goto_if 0, Route101_EventScript_1A14DC clearflag 929 setvar 0x4053, 2 return gUnknown_0819FC9F:: @ 819FC9F compare 0x4096, 1 - jumpeq EventScript_19FCC1 + goto_if_eq EventScript_19FCC1 compare 0x4096, 2 - jumpeq EventScript_19FCD7 + goto_if_eq EventScript_19FCD7 compare 0x4096, 3 - jumpeq EventScript_19FCF0 + goto_if_eq EventScript_19FCF0 end EventScript_19FCC1: @@ -1399,15 +1399,15 @@ RustboroCity_PokemonCenter_1F_EventScript_19FD1B:: @ 819FD1B SlateportCity_PokemonCenter_1F_EventScript_19FD1B:: @ 819FD1B VerdanturfTown_PokemonCenter_1F_EventScript_19FD1B:: @ 819FD1B checkflag 188 - jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_1A14DC + goto_if 0, OldaleTown_PokemonCenter_1F_EventScript_1A14DC checkflag 1217 - jumpeq OldaleTown_PokemonCenter_1F_EventScript_1A14DC + goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_1A14DC checkflag 742 - jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_19FD49 + goto_if 0, OldaleTown_PokemonCenter_1F_EventScript_19FD49 checkflag 740 - jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_19FD4F + goto_if 0, OldaleTown_PokemonCenter_1F_EventScript_19FD4F checkflag 741 - jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_19FD55 + goto_if 0, OldaleTown_PokemonCenter_1F_EventScript_19FD55 return OldaleTown_PokemonCenter_1F_EventScript_19FD49:: @ 819FD49 @@ -1440,9 +1440,9 @@ VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B faceplayer msgbox gText_NurseJoy_Welcome, 5 compare RESULT, 1 - jumpeq OldaleTown_PokemonCenter_1F_EventScript_19FD7C + goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FD7C compare RESULT, 0 - jumpeq OldaleTown_PokemonCenter_1F_EventScript_19FDC7 + goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDC7 end OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C @@ -1457,8 +1457,8 @@ OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C waitmove 0 special ScrSpecial_HealPlayerParty checkflag 273 - jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_19FDCE - jump OldaleTown_PokemonCenter_1F_EventScript_19FDB0 + goto_if 0, OldaleTown_PokemonCenter_1F_EventScript_19FDCE + goto OldaleTown_PokemonCenter_1F_EventScript_19FDB0 end OldaleTown_PokemonCenter_1F_EventScript_19FDB0:: @ 819FDB0 @@ -1478,9 +1478,9 @@ OldaleTown_PokemonCenter_1F_EventScript_19FDC7:: @ 819FDC7 OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE specialval RESULT, IsPokerusInParty compare RESULT, 1 - jumpeq OldaleTown_PokemonCenter_1F_EventScript_19FDEA + goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDEA compare RESULT, 0 - jumpeq OldaleTown_PokemonCenter_1F_EventScript_19FDB0 + goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDB0 end OldaleTown_PokemonCenter_1F_EventScript_19FDEA:: @ 819FDEA @@ -1505,9 +1505,9 @@ Std_ObtainItem_: @ 819FE07 checkitemtype 0x8000 call GetItem_HandlePocket compare 0x8007, 0x1 - callif 1, Std_ObtainItem_Success + call_if 1, Std_ObtainItem_Success compare 0x8007, 0x0 - callif 1, Std_ObtainItem_Fail + call_if 1, Std_ObtainItem_Fail return GetItem_HandlePocket: @@ -1522,31 +1522,31 @@ GetItem_HandlePocket: GetItem_HandlePocket_Items: bufferstd 2, 0xE compare 0x8007, 1 - callif 1, PlayGetItemFanfare + call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_KeyItems: bufferstd 2, 0xF compare 0x8007, 1 - callif 1, PlayGetItemFanfare + call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_PokeBalls: bufferstd 2, 0x10 compare 0x8007, 1 - callif 1, PlayGetItemFanfare + call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_TMsHMs: bufferstd 2, 0x11 compare 0x8007, 1 - callif 1, PlayGetTMHMFanfare + call_if 1, PlayGetTMHMFanfare return GetItem_HandlePocket_Berries: bufferstd 2, 0x12 compare 0x8007, 1 - callif 1, PlayGetItemFanfare + call_if 1, PlayGetItemFanfare return Std_ObtainItem_Success: @ 819FEB7 @@ -1578,9 +1578,9 @@ Std_ObtainDecoration: @ 819FEDA Std_ObtainDecoration_: @ 819FEE8 bufferdecor 1, 0x8000 compare 0x8007, 1 - callif 1, Std_ObtainDecoration_Success + call_if 1, Std_ObtainDecoration_Success compare 0x8007, 0 - callif 1, Std_ObtainDecoration_Fail + call_if 1, Std_ObtainDecoration_Fail return Std_ObtainDecoration_Success: @ 819FF03 @@ -1606,9 +1606,9 @@ Std_FindItem: @ 819FF21 checkitemtype 0x8000 call GetItem_HandlePocket compare 0x8007, 1 - callif 1, Std_FindItem_Success + call_if 1, Std_FindItem_Success compare 0x8007, 0 - callif 1, Std_FindItem_Fail + call_if 1, Std_FindItem_Fail release return @@ -1635,9 +1635,9 @@ HiddenItemScript:: @ 819FF7B checkitemtype 0x8005 call GetItem_HandlePocket compare 0x8007, 1 - jumpeq HiddenItemScript_Success + goto_if_eq HiddenItemScript_Success compare 0x8007, 0 - jumpeq HiddenItemScript_Fail + goto_if_eq HiddenItemScript_Fail end HiddenItemScript_Success: @@ -1661,10 +1661,10 @@ UnusedMixRecordsScript: @ 819FFD5 faceplayer msgbox UnusedMixRecordsPromptText, 5 compare RESULT, 1 - jumpeq UnusedMixRecordsScript_Yes + goto_if_eq UnusedMixRecordsScript_Yes compare RESULT, 0 - jumpeq UnusedMixRecordsScript_Done - jump UnusedMixRecordsScript_Done + goto_if_eq UnusedMixRecordsScript_Done + goto UnusedMixRecordsScript_Done UnusedMixRecordsScript_Yes: @ 819FFFA special sub_80B929C waitstate @@ -1683,7 +1683,7 @@ gUnknown_081A0009:: @ 81A0009 special DoPCTurnOnEffect playsfx 4 msgbox UnknownString_81A09EC, 4 - jump EventScript_1A0023 + goto EventScript_1A0023 end EventScript_1A0023: @@ -1691,7 +1691,7 @@ EventScript_1A0023: waittext special ScrSpecial_CreatePCMenu waitstate - jump EventScript_1A0033 + goto EventScript_1A0033 end EventScript_1A0033: @@ -1708,19 +1708,19 @@ EventScript_1A0070: msgbox UnknownString_81A0A54, 4 special PlayerPC waitstate - jump EventScript_1A0023 + goto EventScript_1A0023 end EventScript_1A0085: playsfx 2 checkflag 2123 - callif 0, EventScript_1A00AC + call_if 0, EventScript_1A00AC checkflag 2123 - callif 1, EventScript_1A00B5 + call_if 1, EventScript_1A00B5 msgbox UnknownString_81A0A35, 4 special ShowPokemonStorageSystem waitstate - jump EventScript_1A0023 + goto EventScript_1A0023 end EventScript_1A00AC: @@ -1740,11 +1740,11 @@ EventScript_1A00BE: EventScript_1A00CB: checkflag 2052 - jumpif 0, EventScript_1A00BE + goto_if 0, EventScript_1A00BE playsfx 2 special AccessHallOfFamePC waitstate - jump EventScript_1A0033 + goto EventScript_1A0033 end FallarborTown_EventScript_1A00E1:: @ 81A00E1 @@ -1818,13 +1818,13 @@ Route109_EventScript_1A010C:: @ 81A010C UseSurfScript:: @ 81A0117 checkattack MOVE_SURF compare RESULT, 6 - jumpeq UseSurfScript_NoMon + goto_if_eq UseSurfScript_NoMon bufferpartypoke 0, RESULT setanimation 0, RESULT lockall msgbox UseSurfPromptText, 5 compare RESULT, 0 - jumpeq UseSurfScript_No + goto_if_eq UseSurfScript_No msgbox UsedSurfText, 4 doanimation 9 UseSurfScript_No: @ 81A014C @@ -1843,9 +1843,9 @@ Route119_EventScript_1A014E:: @ 81A014E RustboroCity_EventScript_1A014E:: @ 81A014E checkgender compare RESULT, 0 - jumpeq RustboroCity_EventScript_1A0166 + goto_if_eq RustboroCity_EventScript_1A0166 compare RESULT, 1 - jumpeq RustboroCity_EventScript_1A016C + goto_if_eq RustboroCity_EventScript_1A016C end RustboroCity_EventScript_1A0166:: @ 81A0166 @@ -1861,9 +1861,9 @@ Route110_EventScript_1A0172:: @ 81A0172 Route119_EventScript_1A0172:: @ 81A0172 checkgender compare RESULT, 0 - jumpeq LavaridgeTown_EventScript_1A018A + goto_if_eq LavaridgeTown_EventScript_1A018A compare RESULT, 1 - jumpeq LavaridgeTown_EventScript_1A0190 + goto_if_eq LavaridgeTown_EventScript_1A0190 end LavaridgeTown_EventScript_1A018A:: @ 81A018A @@ -2143,23 +2143,23 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1A02F4:: @ 81A02F4 Route101_EventScript_1A02F4:: @ 81A02F4 Route103_EventScript_1A02F4:: @ 81A02F4 compare 0x4085, 0 - jumpeq Route101_EventScript_1A14DC + goto_if_eq Route101_EventScript_1A14DC compare 0x4049, 0 - callif 1, Route101_EventScript_1A0358 + call_if 1, Route101_EventScript_1A0358 compare 0x4049, 1 - callif 1, Route101_EventScript_1A0358 + call_if 1, Route101_EventScript_1A0358 compare 0x4049, 2 - callif 1, Route101_EventScript_1A0365 + call_if 1, Route101_EventScript_1A0365 compare 0x4049, 3 - callif 1, Route101_EventScript_1A0365 + call_if 1, Route101_EventScript_1A0365 compare 0x4049, 4 - callif 1, Route101_EventScript_1A0372 + call_if 1, Route101_EventScript_1A0372 compare 0x4049, 5 - callif 1, Route101_EventScript_1A0372 + call_if 1, Route101_EventScript_1A0372 compare 0x4049, 6 - callif 1, Route101_EventScript_1A0358 + call_if 1, Route101_EventScript_1A0358 compare 0x4049, 7 - callif 1, Route101_EventScript_1A0358 + call_if 1, Route101_EventScript_1A0358 return Route101_EventScript_1A0358:: @ 81A0358 @@ -2190,7 +2190,7 @@ Route103_EventScript_1A037F:: @ 81A037F faceplayer msgbox Route101_Text_1C4449, 5 compare RESULT, 0 - jumpeq Route101_EventScript_1A039B + goto_if_eq Route101_EventScript_1A039B call Route101_EventScript_1A03B0 release end @@ -2219,7 +2219,7 @@ Route101_EventScript_1A03B0:: @ 81A03B0 msgbox Route101_Text_1C44DC, 4 call Route101_EventScript_1A03A5 compare 0x800a, 0 - jumpeq Route101_EventScript_1A14DC + goto_if_eq Route101_EventScript_1A14DC setvar 0x8004, 1 specialval RESULT, ScriptGetPokedexInfo copyvar 0x8008, 0x8005 @@ -2286,9 +2286,9 @@ Movement_1A047A: BattleTower_Outside_EventScript_1A047C:: @ 81A047C SouthernIsland_Exterior_EventScript_1A047C:: @ 81A047C compare FACING, 1 - callif 1, BattleTower_Outside_EventScript_160B2F + call_if 1, BattleTower_Outside_EventScript_160B2F compare FACING, 3 - callif 1, BattleTower_Outside_EventScript_160B3A + call_if 1, BattleTower_Outside_EventScript_160B3A pause 30 spriteinvisible 255, 0, 0 call BattleTower_Outside_EventScript_1A040E @@ -2309,20 +2309,20 @@ CaveOfOrigin_B2F_EventScript_1A04AF:: @ 81A04AF CaveOfOrigin_B3F_EventScript_1A04AF:: @ 81A04AF lockall setvar 0x4001, 1 - jump CaveOfOrigin_1F_EventScript_1A04D3 + goto CaveOfOrigin_1F_EventScript_1A04D3 end CaveOfOrigin_B2F_EventScript_1A04BB:: @ 81A04BB CaveOfOrigin_B3F_EventScript_1A04BB:: @ 81A04BB lockall setvar 0x4002, 1 - jump CaveOfOrigin_B2F_EventScript_1A04D3 + goto CaveOfOrigin_B2F_EventScript_1A04D3 end @ 81A04C7 lockall setvar 0x4003, 1 - jump CaveOfOrigin_B2F_EventScript_1A04D3 + goto CaveOfOrigin_B2F_EventScript_1A04D3 end CaveOfOrigin_1F_EventScript_1A04D3:: @ 81A04D3 @@ -2382,56 +2382,56 @@ Route120_EventScript_1A0539:: @ 81A0539 lock faceplayer setvar 0x8004, 1 - jump Route120_EventScript_1A0594 + goto Route120_EventScript_1A0594 end Route120_EventScript_1A0546:: @ 81A0546 lock faceplayer setvar 0x8004, 2 - jump Route120_EventScript_1A0594 + goto Route120_EventScript_1A0594 end Route120_EventScript_1A0553:: @ 81A0553 lock faceplayer setvar 0x8004, 3 - jump Route120_EventScript_1A0594 + goto Route120_EventScript_1A0594 end Route120_EventScript_1A0560:: @ 81A0560 lock faceplayer setvar 0x8004, 4 - jump Route120_EventScript_1A0594 + goto Route120_EventScript_1A0594 end Route120_EventScript_1A056D:: @ 81A056D lock faceplayer setvar 0x8004, 5 - jump Route120_EventScript_1A0594 + goto Route120_EventScript_1A0594 end Route119_EventScript_1A057A:: @ 81A057A lock faceplayer setvar 0x8004, 6 - jump Route119_EventScript_1A0594 + goto Route119_EventScript_1A0594 end Route119_EventScript_1A0587:: @ 81A0587 lock faceplayer setvar 0x8004, 7 - jump Route119_EventScript_1A0594 + goto Route119_EventScript_1A0594 end Route119_EventScript_1A0594:: @ 81A0594 Route120_EventScript_1A0594:: @ 81A0594 checkitem ITEM_DEVON_SCOPE, 1 compare RESULT, 1 - jumpeq Route119_EventScript_1A05AE + goto_if_eq Route119_EventScript_1A05AE msgbox Route119_Text_171B93, 4 release end @@ -2439,7 +2439,7 @@ Route120_EventScript_1A0594:: @ 81A0594 Route119_EventScript_1A05AE:: @ 81A05AE msgbox Route119_Text_171BB6, 5 compare RESULT, 1 - jumpeq Route119_EventScript_1A05C3 + goto_if_eq Route119_EventScript_1A05C3 release end @@ -2456,19 +2456,19 @@ Route119_EventScript_1A05C3:: @ 81A05C3 waitpokecry setwildbattle SPECIES_KECLEON, 30, ITEM_NONE compare 0x8004, 1 - callif 1, Route119_EventScript_1A0646 + call_if 1, Route119_EventScript_1A0646 compare 0x8004, 2 - callif 1, Route119_EventScript_1A064A + call_if 1, Route119_EventScript_1A064A compare 0x8004, 3 - callif 1, Route119_EventScript_1A064E + call_if 1, Route119_EventScript_1A064E compare 0x8004, 4 - callif 1, Route119_EventScript_1A0652 + call_if 1, Route119_EventScript_1A0652 compare 0x8004, 5 - callif 1, Route119_EventScript_1A0656 + call_if 1, Route119_EventScript_1A0656 compare 0x8004, 6 - callif 1, Route119_EventScript_1A065A + call_if 1, Route119_EventScript_1A065A compare 0x8004, 7 - callif 1, Route119_EventScript_1A065E + call_if 1, Route119_EventScript_1A065E setflag 2145 dowildbattle clearflag 2145 @@ -3264,7 +3264,7 @@ gUnknown_081A14B8:: @ 81A14B8 special ExecuteWhiteOut waitstate compare RESULT, 1 - jumpeq EventScript_1A14CA + goto_if_eq EventScript_1A14CA releaseall end @@ -3619,44 +3619,44 @@ gUnknown_081A2C51:: @ 81A2C51 special sub_80BB70C special sub_80BB63C compare RESULT, 1 - jumpeq EventScript_1A2E45 + goto_if_eq EventScript_1A2E45 checkattack MOVE_SECRET_POWER setanimation 0, RESULT bufferattack 1, MOVE_SECRET_POWER compare 0x8007, 1 - jumpeq EventScript_1A2CB0 + goto_if_eq EventScript_1A2CB0 compare 0x8007, 2 - jumpeq EventScript_1A2CB0 + goto_if_eq EventScript_1A2CB0 compare 0x8007, 3 - jumpeq EventScript_1A2CB0 + goto_if_eq EventScript_1A2CB0 compare 0x8007, 4 - jumpeq EventScript_1A2CB0 + goto_if_eq EventScript_1A2CB0 compare 0x8007, 5 - jumpeq EventScript_1A2D08 + goto_if_eq EventScript_1A2D08 compare 0x8007, 6 - jumpeq EventScript_1A2D60 + goto_if_eq EventScript_1A2D60 end EventScript_1A2CB0: lockall compare RESULT, 6 - jumpeq EventScript_1A2CF1 + goto_if_eq EventScript_1A2CF1 bufferpartypoke 0, RESULT msgbox UnknownString_8198F34, 5 compare RESULT, 0 - jumpeq EventScript_1A2F3A + goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton doanimation 11 waitstate - jump EventScript_1A2CFA + goto EventScript_1A2CFA end gUnknown_081A2CE6:: @ 81A2CE6 lockall doanimation 11 waitstate - jump EventScript_1A2CFA + goto EventScript_1A2CFA end EventScript_1A2CF1: @@ -3665,29 +3665,29 @@ EventScript_1A2CF1: EventScript_1A2CFA: msgbox UnknownString_8198F6E, 4 - jump EventScript_1A2DB8 + goto EventScript_1A2DB8 end EventScript_1A2D08: lockall compare RESULT, 6 - jumpeq EventScript_1A2D49 + goto_if_eq EventScript_1A2D49 bufferpartypoke 0, RESULT msgbox UnknownString_81A197B, 5 compare RESULT, 0 - jumpeq EventScript_1A2F3A + goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton doanimation 26 waitstate - jump EventScript_1A2D52 + goto EventScript_1A2D52 end gUnknown_081A2D3E:: @ 81A2D3E lockall doanimation 26 waitstate - jump EventScript_1A2D52 + goto EventScript_1A2D52 end EventScript_1A2D49: @@ -3696,29 +3696,29 @@ EventScript_1A2D49: EventScript_1A2D52: msgbox UnknownString_81A19C4, 4 - jump EventScript_1A2DB8 + goto EventScript_1A2DB8 end EventScript_1A2D60: lockall compare RESULT, 6 - jumpeq EventScript_1A2DA1 + goto_if_eq EventScript_1A2DA1 bufferpartypoke 0, RESULT msgbox UnknownString_81A1A4B, 5 compare RESULT, 0 - jumpeq EventScript_1A2F3A + goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton doanimation 27 waitstate - jump EventScript_1A2DAA + goto EventScript_1A2DAA end gUnknown_081A2D96:: @ 81A2D96 lockall doanimation 27 waitstate - jump EventScript_1A2DAA + goto EventScript_1A2DAA end EventScript_1A2DA1: @@ -3727,7 +3727,7 @@ EventScript_1A2DA1: EventScript_1A2DAA: msgbox UnknownString_81A1AA9, 4 - jump EventScript_1A2DB8 + goto EventScript_1A2DB8 end EventScript_1A2DB8: @@ -3750,7 +3750,7 @@ SecretBase_RedCave1_EventScript_1A2DDE:: @ 81A2DDE setvar 0x4097, 1 msgbox SecretBase_RedCave1_Text_198F89, 5 compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A2E08 + goto_if_eq SecretBase_RedCave1_EventScript_1A2E08 closebutton playsfx 9 special sub_80BC440 @@ -3774,7 +3774,7 @@ gUnknown_081A2E14:: @ 81A2E14 playsfx 9 special sub_80BC114 compare RESULT, 0 - jumpeq EventScript_1A2E38 + goto_if_eq EventScript_1A2E38 clearflag 173 special sub_80BBAF0 setvar 0x4089, 0 @@ -3791,57 +3791,57 @@ EventScript_1A2E38: EventScript_1A2E45: checkattack MOVE_SECRET_POWER compare RESULT, 6 - jumpeq EventScript_1A2EF7 + goto_if_eq EventScript_1A2EF7 setanimation 0, RESULT setorcopyvar 0x8004, RESULT lockall special GetSecretBaseNearbyMapName msgbox UnknownString_81A3C71, 5 compare RESULT, 0 - jumpeq EventScript_1A2F3A + goto_if_eq EventScript_1A2F3A msgbox UnknownString_81A38FB, 5 compare RESULT, 0 - jumpeq EventScript_1A2F3A + goto_if_eq EventScript_1A2F3A fadescreen 1 special sub_80BC50C closebutton fadescreen 0 msgbox UnknownString_81A3CC9, 5 compare RESULT, 0 - jumpeq EventScript_1A2F3A + goto_if_eq EventScript_1A2F3A bufferpartypoke 0, 0x8004 bufferattack 1, MOVE_SECRET_POWER msgbox UsedCutRockSmashText, 4 closebutton closebutton compare 0x8007, 1 - jumpeq gUnknown_081A2CE6 + goto_if_eq gUnknown_081A2CE6 compare 0x8007, 2 - jumpeq gUnknown_081A2CE6 + goto_if_eq gUnknown_081A2CE6 compare 0x8007, 3 - jumpeq gUnknown_081A2CE6 + goto_if_eq gUnknown_081A2CE6 compare 0x8007, 4 - jumpeq gUnknown_081A2CE6 + goto_if_eq gUnknown_081A2CE6 compare 0x8007, 5 - jumpeq gUnknown_081A2D3E + goto_if_eq gUnknown_081A2D3E compare 0x8007, 6 - jumpeq gUnknown_081A2D96 + goto_if_eq gUnknown_081A2D96 releaseall end EventScript_1A2EF7:: compare 0x8007, 1 - jumpeq EventScript_1A2CF1 + goto_if_eq EventScript_1A2CF1 compare 0x8007, 2 - jumpeq EventScript_1A2CF1 + goto_if_eq EventScript_1A2CF1 compare 0x8007, 3 - jumpeq EventScript_1A2CF1 + goto_if_eq EventScript_1A2CF1 compare 0x8007, 4 - jumpeq EventScript_1A2CF1 + goto_if_eq EventScript_1A2CF1 compare 0x8007, 5 - jumpeq EventScript_1A2D49 + goto_if_eq EventScript_1A2D49 compare 0x8007, 6 - jumpeq EventScript_1A2DA1 + goto_if_eq EventScript_1A2DA1 end EventScript_1A2F3A:: @@ -3879,7 +3879,7 @@ SecretBase_RedCave1_EventScript_1A2F68:: @ 81A2F68 gUnknown_081A2F7B:: @ 81A2F7B setvar 0x8005, 0 - jump EventScript_1A2F86 + goto EventScript_1A2F86 end EventScript_1A2F86: @@ -3888,19 +3888,19 @@ EventScript_1A2F86: gUnknown_081A2F8A:: @ 81A2F8A setvar 0x8004, 0 - jump EventScript_1A2F95 + goto EventScript_1A2F95 end EventScript_1A2F95: special sub_8100A7C compare RESULT, 1 - jumpeq EventScript_1A2FBF + goto_if_eq EventScript_1A2FBF addvar 0x8004, 1 compare 0x8005, 0 - jumpeq EventScript_1A2F95 + goto_if_eq EventScript_1A2F95 disappear 0x8006 setflag 0x8005 - jump EventScript_1A2F95 + goto EventScript_1A2F95 end EventScript_1A2FBF: @@ -3932,45 +3932,45 @@ SecretBase_YellowCave3_EventScript_1A2FC0:: @ 81A2FC0 SecretBase_YellowCave4_EventScript_1A2FC0:: @ 81A2FC0 special sub_80BCE90 compare 0x8004, 0 - jumpeq SecretBase_RedCave1_EventScript_1A3032 + goto_if_eq SecretBase_RedCave1_EventScript_1A3032 compare 0x8004, 1 - jumpeq SecretBase_RedCave1_EventScript_1A30AE + goto_if_eq SecretBase_RedCave1_EventScript_1A30AE compare 0x8004, 2 - jumpeq SecretBase_RedCave1_EventScript_1A312A + goto_if_eq SecretBase_RedCave1_EventScript_1A312A compare 0x8004, 3 - jumpeq SecretBase_RedCave1_EventScript_1A31A6 + goto_if_eq SecretBase_RedCave1_EventScript_1A31A6 compare 0x8004, 4 - jumpeq SecretBase_RedCave1_EventScript_1A3222 + goto_if_eq SecretBase_RedCave1_EventScript_1A3222 compare 0x8004, 5 - jumpeq SecretBase_RedCave1_EventScript_1A329E + goto_if_eq SecretBase_RedCave1_EventScript_1A329E compare 0x8004, 6 - jumpeq SecretBase_RedCave1_EventScript_1A331A + goto_if_eq SecretBase_RedCave1_EventScript_1A331A compare 0x8004, 7 - jumpeq SecretBase_RedCave1_EventScript_1A3396 + goto_if_eq SecretBase_RedCave1_EventScript_1A3396 compare 0x8004, 8 - jumpeq SecretBase_RedCave1_EventScript_1A3412 + goto_if_eq SecretBase_RedCave1_EventScript_1A3412 compare 0x8004, 9 - jumpeq SecretBase_RedCave1_EventScript_1A348E + goto_if_eq SecretBase_RedCave1_EventScript_1A348E end SecretBase_RedCave1_EventScript_1A3032:: @ 81A3032 checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A3086 + goto_if 0, SecretBase_RedCave1_EventScript_1A3086 compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A30A5 + goto_if_eq SecretBase_RedCave1_EventScript_1A30A5 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1AEA, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A308F + goto_if_eq SecretBase_RedCave1_EventScript_1A308F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A308F + goto_if_eq SecretBase_RedCave1_EventScript_1A308F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1B83, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A3086:: @ 81A3086 @@ -3990,22 +3990,22 @@ SecretBase_RedCave1_EventScript_1A30A5:: @ 81A30A5 SecretBase_RedCave1_EventScript_1A30AE:: @ 81A30AE checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A3102 + goto_if 0, SecretBase_RedCave1_EventScript_1A3102 compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A3121 + goto_if_eq SecretBase_RedCave1_EventScript_1A3121 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1E67, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A310B + goto_if_eq SecretBase_RedCave1_EventScript_1A310B setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A310B + goto_if_eq SecretBase_RedCave1_EventScript_1A310B hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1F04, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A3102:: @ 81A3102 @@ -4025,22 +4025,22 @@ SecretBase_RedCave1_EventScript_1A3121:: @ 81A3121 SecretBase_RedCave1_EventScript_1A312A:: @ 81A312A checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A317E + goto_if 0, SecretBase_RedCave1_EventScript_1A317E compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A319D + goto_if_eq SecretBase_RedCave1_EventScript_1A319D lock faceplayer msgbox SecretBase_RedCave1_Text_1A218F, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A3187 + goto_if_eq SecretBase_RedCave1_EventScript_1A3187 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A3187 + goto_if_eq SecretBase_RedCave1_EventScript_1A3187 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2220, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A317E:: @ 81A317E @@ -4060,22 +4060,22 @@ SecretBase_RedCave1_EventScript_1A319D:: @ 81A319D SecretBase_RedCave1_EventScript_1A31A6:: @ 81A31A6 checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A31FA + goto_if 0, SecretBase_RedCave1_EventScript_1A31FA compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A3219 + goto_if_eq SecretBase_RedCave1_EventScript_1A3219 lock faceplayer msgbox SecretBase_RedCave1_Text_1A24E1, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A3203 + goto_if_eq SecretBase_RedCave1_EventScript_1A3203 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A3203 + goto_if_eq SecretBase_RedCave1_EventScript_1A3203 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A256F, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A31FA:: @ 81A31FA @@ -4095,22 +4095,22 @@ SecretBase_RedCave1_EventScript_1A3219:: @ 81A3219 SecretBase_RedCave1_EventScript_1A3222:: @ 81A3222 checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A3276 + goto_if 0, SecretBase_RedCave1_EventScript_1A3276 compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A3295 + goto_if_eq SecretBase_RedCave1_EventScript_1A3295 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2830, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A327F + goto_if_eq SecretBase_RedCave1_EventScript_1A327F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A327F + goto_if_eq SecretBase_RedCave1_EventScript_1A327F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A28D7, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A3276:: @ 81A3276 @@ -4130,22 +4130,22 @@ SecretBase_RedCave1_EventScript_1A3295:: @ 81A3295 SecretBase_RedCave1_EventScript_1A329E:: @ 81A329E checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A32F2 + goto_if 0, SecretBase_RedCave1_EventScript_1A32F2 compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A3311 + goto_if_eq SecretBase_RedCave1_EventScript_1A3311 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1CB2, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A32FB + goto_if_eq SecretBase_RedCave1_EventScript_1A32FB setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A32FB + goto_if_eq SecretBase_RedCave1_EventScript_1A32FB hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1D48, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A32F2:: @ 81A32F2 @@ -4165,22 +4165,22 @@ SecretBase_RedCave1_EventScript_1A3311:: @ 81A3311 SecretBase_RedCave1_EventScript_1A331A:: @ 81A331A checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A336E + goto_if 0, SecretBase_RedCave1_EventScript_1A336E compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A338D + goto_if_eq SecretBase_RedCave1_EventScript_1A338D lock faceplayer msgbox SecretBase_RedCave1_Text_1A2026, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A3377 + goto_if_eq SecretBase_RedCave1_EventScript_1A3377 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A3377 + goto_if_eq SecretBase_RedCave1_EventScript_1A3377 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2095, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A336E:: @ 81A336E @@ -4200,22 +4200,22 @@ SecretBase_RedCave1_EventScript_1A338D:: @ 81A338D SecretBase_RedCave1_EventScript_1A3396:: @ 81A3396 checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A33EA + goto_if 0, SecretBase_RedCave1_EventScript_1A33EA compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A3409 + goto_if_eq SecretBase_RedCave1_EventScript_1A3409 lock faceplayer msgbox SecretBase_RedCave1_Text_1A236A, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A33F3 + goto_if_eq SecretBase_RedCave1_EventScript_1A33F3 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A33F3 + goto_if_eq SecretBase_RedCave1_EventScript_1A33F3 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2405, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A33EA:: @ 81A33EA @@ -4235,22 +4235,22 @@ SecretBase_RedCave1_EventScript_1A3409:: @ 81A3409 SecretBase_RedCave1_EventScript_1A3412:: @ 81A3412 checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A3466 + goto_if 0, SecretBase_RedCave1_EventScript_1A3466 compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A3485 + goto_if_eq SecretBase_RedCave1_EventScript_1A3485 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2663, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A346F + goto_if_eq SecretBase_RedCave1_EventScript_1A346F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A346F + goto_if_eq SecretBase_RedCave1_EventScript_1A346F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2710, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A3466:: @ 81A3466 @@ -4270,22 +4270,22 @@ SecretBase_RedCave1_EventScript_1A3485:: @ 81A3485 SecretBase_RedCave1_EventScript_1A348E:: @ 81A348E checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A34E2 + goto_if 0, SecretBase_RedCave1_EventScript_1A34E2 compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A3501 + goto_if_eq SecretBase_RedCave1_EventScript_1A3501 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2A13, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A34EB + goto_if_eq SecretBase_RedCave1_EventScript_1A34EB setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A34EB + goto_if_eq SecretBase_RedCave1_EventScript_1A34EB hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2AE2, 4 - jump SecretBase_RedCave1_EventScript_1A350A + goto SecretBase_RedCave1_EventScript_1A350A end SecretBase_RedCave1_EventScript_1A34E2:: @ 81A34E2 @@ -4414,13 +4414,13 @@ SlateportCity_PokemonFanClub_EventScript_1ADE4D:: @ 81ADE4D setvar 0x8005, 1 special sub_80BF2C4 compare RESULT, 1 - jumpeq SlateportCity_PokemonFanClub_EventScript_1ADED6 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADED6 copyvar 0x8009, 0x8006 msgbox SlateportCity_PokemonFanClub_Text_1A8704, 5 compare RESULT, 1 - jumpeq SlateportCity_PokemonFanClub_EventScript_1ADE84 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADE84 compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_1ADEB9 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEB9 end SlateportCity_PokemonFanClub_EventScript_1ADE84:: @ 81ADE84 @@ -4432,9 +4432,9 @@ SlateportCity_PokemonFanClub_EventScript_1ADE84:: @ 81ADE84 lock faceplayer compare RESULT, 1 - jumpeq SlateportCity_PokemonFanClub_EventScript_1ADEC3 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEC3 compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_1ADEB9 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEB9 end SlateportCity_PokemonFanClub_EventScript_1ADEB9:: @ 81ADEB9 @@ -4445,7 +4445,7 @@ SlateportCity_PokemonFanClub_EventScript_1ADEB9:: @ 81ADEB9 SlateportCity_PokemonFanClub_EventScript_1ADEC3:: @ 81ADEC3 msgbox SlateportCity_PokemonFanClub_Text_1A8818, 4 setvar 0x8005, 1 - jump SlateportCity_PokemonFanClub_EventScript_1ADE46 + goto SlateportCity_PokemonFanClub_EventScript_1ADE46 end SlateportCity_PokemonFanClub_EventScript_1ADED6:: @ 81ADED6 @@ -4459,24 +4459,24 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADEE0:: @ 81ADEE0 setvar 0x8005, 2 special sub_80BF2C4 compare RESULT, 1 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF96 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF96 copyvar 0x8009, 0x8006 checkflag 105 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF25 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF25 setflag 105 msgbox SlateportCity_OceanicMuseum_1F_Text_1A927F, 5 compare RESULT, 1 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 compare RESULT, 0 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end SlateportCity_OceanicMuseum_1F_EventScript_1ADF25:: @ 81ADF25 msgbox SlateportCity_OceanicMuseum_1F_Text_1A934C, 5 compare RESULT, 1 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 compare RESULT, 0 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end SlateportCity_OceanicMuseum_1F_EventScript_1ADF44:: @ 81ADF44 @@ -4488,9 +4488,9 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADF44:: @ 81ADF44 lock faceplayer compare RESULT, 1 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF83 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF83 compare RESULT, 0 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end SlateportCity_OceanicMuseum_1F_EventScript_1ADF79:: @ 81ADF79 @@ -4501,7 +4501,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADF79:: @ 81ADF79 SlateportCity_OceanicMuseum_1F_EventScript_1ADF83:: @ 81ADF83 msgbox SlateportCity_OceanicMuseum_1F_Text_1A949A, 4 setvar 0x8005, 2 - jump SlateportCity_OceanicMuseum_1F_EventScript_1ADE46 + goto SlateportCity_OceanicMuseum_1F_EventScript_1ADE46 end SlateportCity_OceanicMuseum_1F_EventScript_1ADF96:: @ 81ADF96 @@ -4514,17 +4514,17 @@ SlateportCity_PokemonFanClub_EventScript_1ADFA0:: @ 81ADFA0 faceplayer specialval RESULT, sub_80BF544 compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_1ADE4D + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADE4D setvar 0x8005, 3 special sub_80BF2C4 compare RESULT, 1 - jumpeq SlateportCity_PokemonFanClub_EventScript_1AE0AC + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0AC copyvar 0x8009, 0x8006 msgbox SlateportCity_PokemonFanClub_Text_1A82F1, 5 compare RESULT, 1 - jumpeq SlateportCity_PokemonFanClub_EventScript_1ADFE9 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADFE9 compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_1AE0A2 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 end SlateportCity_PokemonFanClub_EventScript_1ADFE9:: @ 81ADFE9 @@ -4539,17 +4539,17 @@ SlateportCity_PokemonFanClub_EventScript_1ADFE9:: @ 81ADFE9 SlateportCity_PokemonFanClub_EventScript_1AE020:: @ 81AE020 msgbox SlateportCity_PokemonFanClub_Text_1A8414, 4 - jump SlateportCity_PokemonFanClub_EventScript_1AE04A + goto SlateportCity_PokemonFanClub_EventScript_1AE04A end SlateportCity_PokemonFanClub_EventScript_1AE02E:: @ 81AE02E msgbox SlateportCity_PokemonFanClub_Text_1A8470, 4 - jump SlateportCity_PokemonFanClub_EventScript_1AE04A + goto SlateportCity_PokemonFanClub_EventScript_1AE04A end SlateportCity_PokemonFanClub_EventScript_1AE03C:: @ 81AE03C msgbox SlateportCity_PokemonFanClub_Text_1A84D5, 4 - jump SlateportCity_PokemonFanClub_EventScript_1AE04A + goto SlateportCity_PokemonFanClub_EventScript_1AE04A end SlateportCity_PokemonFanClub_EventScript_1AE04A:: @ 81AE04A @@ -4560,18 +4560,18 @@ SlateportCity_PokemonFanClub_EventScript_1AE04A:: @ 81AE04A lock faceplayer compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_1AE0A2 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 msgbox SlateportCity_PokemonFanClub_Text_1A852D, 4 setvar 0x8006, 1 call SlateportCity_PokemonFanClub_EventScript_1A00F3 lock faceplayer compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_1AE0A2 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 msgbox SlateportCity_PokemonFanClub_Text_1A85A6, 4 copyvar 0x8007, 0x800a setvar 0x8005, 3 - jump SlateportCity_PokemonFanClub_EventScript_1ADE46 + goto SlateportCity_PokemonFanClub_EventScript_1ADE46 end SlateportCity_PokemonFanClub_EventScript_1AE0A2:: @ 81AE0A2 @@ -4591,17 +4591,17 @@ VerdanturfTown_ContestLobby_EventScript_1AE0B6:: @ 81AE0B6 lock faceplayer checkflag 2 - jumpeq FallarborTown_ContestLobby_EventScript_1AE17E + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE17E setvar 0x8005, 6 special sub_80BF2C4 compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1AE17E + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE17E copyvar 0x8009, 0x8006 msgbox FallarborTown_ContestLobby_Text_1A6F7C, 5 compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1AE0F8 + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE0F8 compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1AE12D + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D end FallarborTown_ContestLobby_EventScript_1AE0F8:: @ 81AE0F8 @@ -4613,9 +4613,9 @@ FallarborTown_ContestLobby_EventScript_1AE0F8:: @ 81AE0F8 lock faceplayer compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1AE137 + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE137 compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1AE12D + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D end FallarborTown_ContestLobby_EventScript_1AE12D:: @ 81AE12D @@ -4634,11 +4634,11 @@ FallarborTown_ContestLobby_EventScript_1AE137:: @ 81AE137 lock faceplayer compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1AE12D + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D msgbox FallarborTown_ContestLobby_Text_1A7153, 4 setflag 2 setvar 0x8005, 6 - jump FallarborTown_ContestLobby_EventScript_1ADE46 + goto FallarborTown_ContestLobby_EventScript_1ADE46 end FallarborTown_ContestLobby_EventScript_1AE17E:: @ 81AE17E @@ -4651,11 +4651,11 @@ LilycoveCity_ContestLobby_EventScript_1AE188:: @ 81AE188 SlateportCity_ContestLobby_EventScript_1AE188:: @ 81AE188 VerdanturfTown_ContestLobby_EventScript_1AE188:: @ 81AE188 compare 0x4086, 2 - jumpif 5, FallarborTown_ContestLobby_EventScript_1AE1FE + goto_if 5, FallarborTown_ContestLobby_EventScript_1AE1FE setvar 0x8005, 6 special sub_80BF2C4 compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1AE1FE + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE1FE switch 0x4088 case 0, FallarborTown_ContestLobby_EventScript_1AE1FE case 2, FallarborTown_ContestLobby_EventScript_1AE1EE @@ -4688,17 +4688,17 @@ BattleTower_Lobby_EventScript_1AE1FF:: @ 81AE1FF lock faceplayer checkflag 2 - jumpeq BattleTower_Lobby_EventScript_1AE2E3 + goto_if_eq BattleTower_Lobby_EventScript_1AE2E3 setvar 0x8005, 7 special sub_80BF2C4 compare RESULT, 1 - jumpeq BattleTower_Lobby_EventScript_1AE2E3 + goto_if_eq BattleTower_Lobby_EventScript_1AE2E3 copyvar 0x8009, 0x8006 msgbox BattleTower_Lobby_Text_1A776D, 5 compare RESULT, 1 - jumpeq BattleTower_Lobby_EventScript_1AE241 + goto_if_eq BattleTower_Lobby_EventScript_1AE241 compare RESULT, 0 - jumpeq BattleTower_Lobby_EventScript_1AE297 + goto_if_eq BattleTower_Lobby_EventScript_1AE297 end BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 @@ -4707,9 +4707,9 @@ BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 multichoice 19, 8, 45, 1 copyvar 0x8008, RESULT compare RESULT, 0 - callif 1, BattleTower_Lobby_EventScript_1AE2A1 + call_if 1, BattleTower_Lobby_EventScript_1AE2A1 compare RESULT, 1 - callif 1, BattleTower_Lobby_EventScript_1AE2AA + call_if 1, BattleTower_Lobby_EventScript_1AE2AA msgbox BattleTower_Lobby_Text_1A79EB, 4 setvar 0x8004, 12 copyvar 0x8005, 0x8009 @@ -4717,9 +4717,9 @@ BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 lock faceplayer compare RESULT, 1 - jumpeq BattleTower_Lobby_EventScript_1AE2B3 + goto_if_eq BattleTower_Lobby_EventScript_1AE2B3 compare RESULT, 0 - jumpeq BattleTower_Lobby_EventScript_1AE2D9 + goto_if_eq BattleTower_Lobby_EventScript_1AE2D9 end BattleTower_Lobby_EventScript_1AE297:: @ 81AE297 @@ -4737,12 +4737,12 @@ BattleTower_Lobby_EventScript_1AE2AA:: @ 81AE2AA BattleTower_Lobby_EventScript_1AE2B3:: @ 81AE2B3 compare RESULT, 0 - jumpeq BattleTower_Lobby_EventScript_1AE2D9 + goto_if_eq BattleTower_Lobby_EventScript_1AE2D9 msgbox BattleTower_Lobby_Text_1A7A6E, 4 setflag 2 copyvar 0x8004, 0x8008 setvar 0x8005, 7 - jump BattleTower_Lobby_EventScript_1ADE46 + goto BattleTower_Lobby_EventScript_1ADE46 end BattleTower_Lobby_EventScript_1AE2D9:: @ 81AE2D9 @@ -4757,11 +4757,11 @@ BattleTower_Lobby_EventScript_1AE2E3:: @ 81AE2E3 BattleTower_Lobby_EventScript_1AE2ED:: @ 81AE2ED compare 0x40bc, 0 - jumpeq BattleTower_Lobby_EventScript_1AE30F + goto_if_eq BattleTower_Lobby_EventScript_1AE30F setvar 0x8005, 7 special sub_80BF2C4 compare RESULT, 1 - jumpeq BattleTower_Lobby_EventScript_1AE30F + goto_if_eq BattleTower_Lobby_EventScript_1AE30F clearflag 918 return @@ -4823,25 +4823,25 @@ Text_RepelWoreOff: @ 81C33EF MauvilleCity_GameCorner_EventScript_1C407E:: @ 81C407E checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 0 event_96 2 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1C40DA + goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 - jump MauvilleCity_GameCorner_EventScript_1C40DA + goto MauvilleCity_GameCorner_EventScript_1C40DA end MauvilleCity_GameCorner_EventScript_1C40AC:: @ 81C40AC checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 1 event_96 2 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1C40DA + goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 - jump MauvilleCity_GameCorner_EventScript_1C40DA + goto MauvilleCity_GameCorner_EventScript_1C40DA end MauvilleCity_GameCorner_EventScript_1C40DA:: @ 81C40DA diff --git a/data-de/field_move_scripts.inc b/data-de/field_move_scripts.inc index 017198c2d..8b005bf22 100644 --- a/data-de/field_move_scripts.inc +++ b/data-de/field_move_scripts.inc @@ -1,28 +1,28 @@ S_CuttableTree:: @ 81B0DCC lockall checkflag 2055 - jumpif 0, CannotUseCut + goto_if 0, CannotUseCut checkattack MOVE_CUT compare RESULT, 6 - jumpeq CannotUseCut + goto_if_eq CannotUseCut setanimation 0, RESULT bufferpartypoke 0, RESULT bufferattack 1, MOVE_CUT msgbox UseCutPromptText, 5 compare RESULT, 0 - jumpeq Cut_ChoseNo + goto_if_eq Cut_ChoseNo msgbox UsedCutRockSmashText, 4 closebutton doanimation 2 waitstate - jump DoTreeCutMovement + goto DoTreeCutMovement end S_UseCut:: @ 81B0E16 lockall doanimation 2 waitstate - jump DoTreeCutMovement + goto DoTreeCutMovement end DoTreeCutMovement: @ 81B0E21 @@ -62,28 +62,28 @@ CannotUseCutText: @ 81B0E8E S_BreakableRock:: @ 81B0EB7 lockall checkflag 2057 - jumpif 0, CannotUseRockSmash + goto_if 0, CannotUseRockSmash checkattack MOVE_ROCK_SMASH compare RESULT, 6 - jumpeq CannotUseRockSmash + goto_if_eq CannotUseRockSmash setanimation 0, RESULT bufferpartypoke 0, RESULT bufferattack 1, MOVE_ROCK_SMASH msgbox UseRockSmashPromptText, 5 compare RESULT, 0 - jumpeq RockSmash_ChoseNo + goto_if_eq RockSmash_ChoseNo msgbox UsedCutRockSmashText, 4 closebutton doanimation 37 waitstate - jump DoRockSmashMovement + goto DoRockSmashMovement end S_UseRockSmash:: @ 81B0F01 lockall doanimation 37 waitstate - jump DoRockSmashMovement + goto DoRockSmashMovement end DoRockSmashMovement: @ 81B0F0C @@ -92,10 +92,10 @@ DoRockSmashMovement: @ 81B0F0C disappear LAST_TALKED specialval RESULT, sub_810F5BC compare RESULT, 1 - jumpeq DoRockSmashMovement_Done + goto_if_eq DoRockSmashMovement_Done special ScrSpecial_RockSmashWildEncounter compare RESULT, 0 - jumpeq DoRockSmashMovement_Done + goto_if_eq DoRockSmashMovement_Done waitstate releaseall end @@ -129,27 +129,27 @@ CannotUseRockSmashText: @ 81B0F90 S_PushableBoulder:: @ 81B0FCB lockall checkflag 2058 - jumpif 0, CannotUseStrength + goto_if 0, CannotUseStrength checkflag 2089 - jumpeq AlreadyUsedStrength + goto_if_eq AlreadyUsedStrength checkattack 70 compare RESULT, 6 - jumpeq CannotUseStrength + goto_if_eq CannotUseStrength setanimation 0, RESULT msgbox UseStrengthPromptText, 5 compare RESULT, 0 - jumpeq Strength_ChoseNo + goto_if_eq Strength_ChoseNo closebutton doanimation 40 waitstate - jump UsedStrength + goto UsedStrength end S_UseStrength:: @ 81B100E lockall doanimation 40 waitstate - jump UsedStrength + goto UsedStrength end UsedStrength: @ 81B1019 @@ -195,15 +195,15 @@ S_UseWaterfall:: @ 81B115A lockall checkattack MOVE_WATERFALL compare RESULT, 6 - jumpeq Waterfall_NoMonKnows + goto_if_eq Waterfall_NoMonKnows bufferpartypoke 0, RESULT setanimation 0, RESULT msgbox UseWaterfallPromptText, 5 compare RESULT, 0 - jumpeq Waterfall_Done + goto_if_eq Waterfall_Done msgbox UsedWaterfallText, 4 doanimation 43 - jump Waterfall_Done + goto Waterfall_Done S_CannotUseWaterfall:: @ 81B1194 lockall @@ -228,16 +228,16 @@ UseDiveScript:: @ 81B1220 lockall checkattack MOVE_DIVE compare RESULT, 6 - jumpeq CannotUseDive + goto_if_eq CannotUseDive bufferpartypoke 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UseDivePromptText, 5 compare RESULT, 0 - jumpeq Dive_Done + goto_if_eq Dive_Done msgbox UsedDiveText, 4 doanimation 44 - jump Dive_Done + goto Dive_Done lockall CannotUseDive: @ 81B125F @@ -251,21 +251,21 @@ S_UseDiveUnderwater:: @ 81B1269 lockall checkattack MOVE_DIVE compare RESULT, 6 - jumpeq UnderwaterCannotUseDive + goto_if_eq UnderwaterCannotUseDive bufferpartypoke 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UnderwaterUseDivePromptText, 5 compare RESULT, 0 - jumpeq UnderwaterDive_Done + goto_if_eq UnderwaterDive_Done msgbox UsedDiveText, 4 doanimation 44 - jump UnderwaterDive_Done + goto UnderwaterDive_Done UnderwaterCannotUseDive: @ 81B12A7 lockall msgbox UnderwaterCannotUseDiveText, 4 - jump UnderwaterDive_Done + goto UnderwaterDive_Done @ not used SurfacingBlocked: @ 81B12B5 diff --git a/data/event_scripts.s b/data/event_scripts.s index 0fc33c9ba..037e8a1b0 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -400,7 +400,7 @@ EventScript_15F384: message UnknownString_81A3A87 waittext checkflag 268 - jumpeq EventScript_15F3A0 + goto_if_eq EventScript_15F3A0 goto EventScript_15F3E2 end @@ -431,7 +431,7 @@ EventScript_15F3E2: EventScript_15F419: msgbox UnknownString_81A38FB, 5 compare RESULT, 0 - jumpeq EventScript_15F384 + goto_if_eq EventScript_15F384 closebutton special SecretBasePC_PackUp releaseall @@ -477,13 +477,13 @@ gUnknown_0815F49A:: @ 815F49A EventScript_15F4A1: special sub_80BC56C compare RESULT, 1 - jumpeq EventScript_15F4E0 + goto_if_eq EventScript_15F4E0 compare RESULT, 2 - jumpeq EventScript_15F503 + goto_if_eq EventScript_15F503 special sub_80BC224 msgbox UnknownString_81A3958, 5 compare RESULT, 0 - jumpeq EventScript_15F452 + goto_if_eq EventScript_15F452 msgbox UnknownString_81A3A22, 3 special sub_80BC5BC special sub_80C683C @@ -493,7 +493,7 @@ EventScript_15F4A1: EventScript_15F4E0: msgbox UnknownString_81A3982, 5 compare RESULT, 0 - jumpeq EventScript_15F452 + goto_if_eq EventScript_15F452 msgbox UnknownString_81A3A3A, 3 special sub_80BC5BC special sub_80C683C @@ -527,13 +527,13 @@ gUnknown_0815F523:: @ 815F523 gUnknown_0815F528:: @ 815F528 special GetShieldToyTVDecorationInfo compare RESULT, 0 - jumpeq EventScript_15F558 + goto_if_eq EventScript_15F558 compare RESULT, 1 - jumpeq EventScript_15F561 + goto_if_eq EventScript_15F561 compare RESULT, 2 - jumpeq EventScript_15F56A + goto_if_eq EventScript_15F56A compare RESULT, 3 - jumpeq EventScript_15F573 + goto_if_eq EventScript_15F573 end EventScript_15F558: @@ -937,7 +937,7 @@ gUnknown_0819F818:: @ 819F818 waitmove 0 specialval RESULT, ScrSpecial_HasTrainerBeenFought compare RESULT, 0 - jumpif 5, EventScript_19F83F + goto_if 5, EventScript_19F83F special PlayTrainerEncounterMusic special sub_8082524 goto EventScript_19F8F2 @@ -951,10 +951,10 @@ gUnknown_0819F840:: @ 819F840 call EventScript_19F8E5 specialval RESULT, ScrSpecial_HasTrainerBeenFought compare RESULT, 0 - jumpif 5, EventScript_19F877 + goto_if 5, EventScript_19F877 special CheckForAlivePartyMons compare RESULT, 0 - jumpif 5, EventScript_19F870 + goto_if 5, EventScript_19F870 special PlayTrainerEncounterMusic special sub_8082524 goto EventScript_19F8F2 @@ -980,7 +980,7 @@ gUnknown_0819F887:: @ 819F887 call EventScript_19F8E5 specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare RESULT, 0 - jumpeq EventScript_19F8AD + goto_if_eq EventScript_19F8AD special PlayTrainerEncounterMusic special sub_8082524 special ScrSpecial_ShowTrainerIntroSpeech @@ -997,10 +997,10 @@ EventScript_19F8AD: gUnknown_0819F8AE:: @ 819F8AE specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare RESULT, 0 - jumpeq EventScript_19F8DD + goto_if_eq EventScript_19F8DD special CheckForAlivePartyMons compare RESULT, 0 - jumpif 5, EventScript_19F8DE + goto_if 5, EventScript_19F8DE special PlayTrainerEncounterMusic special sub_8082524 special ScrSpecial_ShowTrainerIntroSpeech @@ -1037,15 +1037,15 @@ EventScript_19F8F2: reptrainerbattle specialval RESULT, ScrSpecial_GetTrainerBattleMode compare RESULT, 0 - jumpeq EventScript_19F934 + goto_if_eq EventScript_19F934 compare RESULT, 2 - jumpeq EventScript_19F936 + goto_if_eq EventScript_19F936 compare RESULT, 1 - jumpeq EventScript_19F936 + goto_if_eq EventScript_19F936 compare RESULT, 6 - jumpeq EventScript_19F936 + goto_if_eq EventScript_19F936 compare RESULT, 8 - jumpeq EventScript_19F936 + goto_if_eq EventScript_19F936 EventScript_19F934: releaseall @@ -1292,13 +1292,13 @@ EverGrandeCity_HallOfFame_EventScript_19FC13:: @ 819FC13 clearflag 861 special sub_810FAA0 checkflag 291 - callif 0, EverGrandeCity_HallOfFame_EventScript_19FC62 + call_if 0, EverGrandeCity_HallOfFame_EventScript_19FC62 checkflag 255 - callif 0, EverGrandeCity_HallOfFame_EventScript_19FC70 + call_if 0, EverGrandeCity_HallOfFame_EventScript_19FC70 checkflag 298 - callif 0, EverGrandeCity_HallOfFame_EventScript_19FC5A + call_if 0, EverGrandeCity_HallOfFame_EventScript_19FC5A checkflag 123 - callif 0, EverGrandeCity_HallOfFame_EventScript_19FC5E + call_if 0, EverGrandeCity_HallOfFame_EventScript_19FC5E return EverGrandeCity_HallOfFame_EventScript_19FC5A:: @ 819FC5A @@ -1327,20 +1327,20 @@ S_WhiteOut:: @ 819FC74 EventScript_19FC84: checkflag 221 - jumpeq Route101_EventScript_1A14DC + goto_if_eq Route101_EventScript_1A14DC checkflag 1213 - jumpif 0, Route101_EventScript_1A14DC + goto_if 0, Route101_EventScript_1A14DC clearflag 929 setvar 0x4053, 2 return gUnknown_0819FC9F:: @ 819FC9F compare 0x4096, 1 - jumpeq EventScript_19FCC1 + goto_if_eq EventScript_19FCC1 compare 0x4096, 2 - jumpeq EventScript_19FCD7 + goto_if_eq EventScript_19FCD7 compare 0x4096, 3 - jumpeq EventScript_19FCF0 + goto_if_eq EventScript_19FCF0 end EventScript_19FCC1: @@ -1393,15 +1393,15 @@ RustboroCity_PokemonCenter_1F_EventScript_19FD1B:: @ 819FD1B SlateportCity_PokemonCenter_1F_EventScript_19FD1B:: @ 819FD1B VerdanturfTown_PokemonCenter_1F_EventScript_19FD1B:: @ 819FD1B checkflag 188 - jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_1A14DC + goto_if 0, OldaleTown_PokemonCenter_1F_EventScript_1A14DC checkflag 1217 - jumpeq OldaleTown_PokemonCenter_1F_EventScript_1A14DC + goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_1A14DC checkflag 742 - jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_19FD49 + goto_if 0, OldaleTown_PokemonCenter_1F_EventScript_19FD49 checkflag 740 - jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_19FD4F + goto_if 0, OldaleTown_PokemonCenter_1F_EventScript_19FD4F checkflag 741 - jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_19FD55 + goto_if 0, OldaleTown_PokemonCenter_1F_EventScript_19FD55 return OldaleTown_PokemonCenter_1F_EventScript_19FD49:: @ 819FD49 @@ -1434,9 +1434,9 @@ VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B faceplayer msgbox gText_NurseJoy_Welcome, MSGBOX_YESNO compare RESULT, 1 - jumpeq do_heal_party + goto_if_eq do_heal_party compare RESULT, 0 - jumpeq dont_heal_party + goto_if_eq dont_heal_party end do_heal_party:: @ 819FD7C @@ -1451,7 +1451,7 @@ do_heal_party:: @ 819FD7C waitmove 0 special ScrSpecial_HealPlayerParty checkflag 273 - jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_19FDCE + goto_if 0, OldaleTown_PokemonCenter_1F_EventScript_19FDCE goto OldaleTown_PokemonCenter_1F_EventScript_19FDB0 end @@ -1472,9 +1472,9 @@ dont_heal_party:: @ 819FDC7 OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE specialval RESULT, IsPokerusInParty compare RESULT, 1 - jumpeq OldaleTown_PokemonCenter_1F_EventScript_19FDEA + goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDEA compare RESULT, 0 - jumpeq OldaleTown_PokemonCenter_1F_EventScript_19FDB0 + goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDB0 end OldaleTown_PokemonCenter_1F_EventScript_19FDEA:: @ 819FDEA @@ -1499,9 +1499,9 @@ Std_ObtainItem_: @ 819FE07 checkitemtype 0x8000 call GetItem_HandlePocket compare 0x8007, 0x1 - callif 1, Std_ObtainItem_Success + call_if 1, Std_ObtainItem_Success compare 0x8007, 0x0 - callif 1, Std_ObtainItem_Fail + call_if 1, Std_ObtainItem_Fail return GetItem_HandlePocket: @@ -1516,31 +1516,31 @@ GetItem_HandlePocket: GetItem_HandlePocket_Items: bufferstd 2, 0xE compare 0x8007, 1 - callif 1, PlayGetItemFanfare + call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_KeyItems: bufferstd 2, 0xF compare 0x8007, 1 - callif 1, PlayGetItemFanfare + call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_PokeBalls: bufferstd 2, 0x10 compare 0x8007, 1 - callif 1, PlayGetItemFanfare + call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_TMsHMs: bufferstd 2, 0x11 compare 0x8007, 1 - callif 1, PlayGetTMHMFanfare + call_if 1, PlayGetTMHMFanfare return GetItem_HandlePocket_Berries: bufferstd 2, 0x12 compare 0x8007, 1 - callif 1, PlayGetItemFanfare + call_if 1, PlayGetItemFanfare return Std_ObtainItem_Success: @ 819FEB7 @@ -1572,9 +1572,9 @@ Std_ObtainDecoration: @ 819FEDA Std_ObtainDecoration_: @ 819FEE8 bufferdecor 1, 0x8000 compare 0x8007, 1 - callif 1, Std_ObtainDecoration_Success + call_if 1, Std_ObtainDecoration_Success compare 0x8007, 0 - callif 1, Std_ObtainDecoration_Fail + call_if 1, Std_ObtainDecoration_Fail return Std_ObtainDecoration_Success: @ 819FF03 @@ -1600,9 +1600,9 @@ Std_FindItem: @ 819FF21 checkitemtype 0x8000 call GetItem_HandlePocket compare 0x8007, 1 - callif 1, Std_FindItem_Success + call_if 1, Std_FindItem_Success compare 0x8007, 0 - callif 1, Std_FindItem_Fail + call_if 1, Std_FindItem_Fail release return @@ -1629,9 +1629,9 @@ HiddenItemScript:: @ 819FF7B checkitemtype 0x8005 call GetItem_HandlePocket compare 0x8007, 1 - jumpeq HiddenItemScript_Success + goto_if_eq HiddenItemScript_Success compare 0x8007, 0 - jumpeq HiddenItemScript_Fail + goto_if_eq HiddenItemScript_Fail end HiddenItemScript_Success: @@ -1655,9 +1655,9 @@ UnusedMixRecordsScript: @ 819FFD5 faceplayer msgbox UnusedMixRecordsPromptText, 5 compare RESULT, 1 - jumpeq UnusedMixRecordsScript_Yes + goto_if_eq UnusedMixRecordsScript_Yes compare RESULT, 0 - jumpeq UnusedMixRecordsScript_Done + goto_if_eq UnusedMixRecordsScript_Done goto UnusedMixRecordsScript_Done UnusedMixRecordsScript_Yes: @ 819FFFA special sub_80B929C @@ -1708,9 +1708,9 @@ EventScript_1A0070: EventScript_1A0085: playsfx 2 checkflag 2123 - callif 0, EventScript_1A00AC + call_if 0, EventScript_1A00AC checkflag 2123 - callif 1, EventScript_1A00B5 + call_if 1, EventScript_1A00B5 msgbox UnknownString_81A0A35, 4 special ShowPokemonStorageSystem waitstate @@ -1734,7 +1734,7 @@ EventScript_1A00BE: EventScript_1A00CB: checkflag 2052 - jumpif 0, EventScript_1A00BE + goto_if 0, EventScript_1A00BE playsfx 2 special AccessHallOfFamePC waitstate @@ -1812,13 +1812,13 @@ Route109_EventScript_1A010C:: @ 81A010C UseSurfScript:: @ 81A0117 checkattack MOVE_SURF compare RESULT, 6 - jumpeq UseSurfScript_NoMon + goto_if_eq UseSurfScript_NoMon bufferpartypoke 0, RESULT setanimation 0, RESULT lockall msgbox UseSurfPromptText, 5 compare RESULT, 0 - jumpeq UseSurfScript_No + goto_if_eq UseSurfScript_No msgbox UsedSurfText, 4 doanimation 9 UseSurfScript_No: @ 81A014C @@ -1837,9 +1837,9 @@ Route119_EventScript_1A014E:: @ 81A014E RustboroCity_EventScript_1A014E:: @ 81A014E checkgender compare RESULT, 0 - jumpeq RustboroCity_EventScript_1A0166 + goto_if_eq RustboroCity_EventScript_1A0166 compare RESULT, 1 - jumpeq RustboroCity_EventScript_1A016C + goto_if_eq RustboroCity_EventScript_1A016C end RustboroCity_EventScript_1A0166:: @ 81A0166 @@ -1855,9 +1855,9 @@ Route110_EventScript_1A0172:: @ 81A0172 Route119_EventScript_1A0172:: @ 81A0172 checkgender compare RESULT, 0 - jumpeq LavaridgeTown_EventScript_1A018A + goto_if_eq LavaridgeTown_EventScript_1A018A compare RESULT, 1 - jumpeq LavaridgeTown_EventScript_1A0190 + goto_if_eq LavaridgeTown_EventScript_1A0190 end LavaridgeTown_EventScript_1A018A:: @ 81A018A @@ -2137,23 +2137,23 @@ LittlerootTown_ProfessorBirchsLab_EventScript_1A02F4:: @ 81A02F4 Route101_EventScript_1A02F4:: @ 81A02F4 Route103_EventScript_1A02F4:: @ 81A02F4 compare 0x4085, 0 - jumpeq Route101_EventScript_1A14DC + goto_if_eq Route101_EventScript_1A14DC compare 0x4049, 0 - callif 1, Route101_EventScript_1A0358 + call_if 1, Route101_EventScript_1A0358 compare 0x4049, 1 - callif 1, Route101_EventScript_1A0358 + call_if 1, Route101_EventScript_1A0358 compare 0x4049, 2 - callif 1, Route101_EventScript_1A0365 + call_if 1, Route101_EventScript_1A0365 compare 0x4049, 3 - callif 1, Route101_EventScript_1A0365 + call_if 1, Route101_EventScript_1A0365 compare 0x4049, 4 - callif 1, Route101_EventScript_1A0372 + call_if 1, Route101_EventScript_1A0372 compare 0x4049, 5 - callif 1, Route101_EventScript_1A0372 + call_if 1, Route101_EventScript_1A0372 compare 0x4049, 6 - callif 1, Route101_EventScript_1A0358 + call_if 1, Route101_EventScript_1A0358 compare 0x4049, 7 - callif 1, Route101_EventScript_1A0358 + call_if 1, Route101_EventScript_1A0358 return Route101_EventScript_1A0358:: @ 81A0358 @@ -2184,7 +2184,7 @@ Route103_EventScript_1A037F:: @ 81A037F faceplayer msgbox Route101_Text_1C4449, 5 compare RESULT, 0 - jumpeq Route101_EventScript_1A039B + goto_if_eq Route101_EventScript_1A039B call Route101_EventScript_1A03B0 release end @@ -2213,7 +2213,7 @@ Route101_EventScript_1A03B0:: @ 81A03B0 msgbox Route101_Text_1C44DC, 4 call Route101_EventScript_1A03A5 compare 0x800a, 0 - jumpeq Route101_EventScript_1A14DC + goto_if_eq Route101_EventScript_1A14DC setvar 0x8004, 1 specialval RESULT, ScriptGetPokedexInfo copyvar 0x8008, 0x8005 @@ -2280,9 +2280,9 @@ Movement_1A047A: BattleTower_Outside_EventScript_1A047C:: @ 81A047C SouthernIsland_Exterior_EventScript_1A047C:: @ 81A047C compare FACING, 1 - callif 1, BattleTower_Outside_EventScript_160B2F + call_if 1, BattleTower_Outside_EventScript_160B2F compare FACING, 3 - callif 1, BattleTower_Outside_EventScript_160B3A + call_if 1, BattleTower_Outside_EventScript_160B3A pause 30 spriteinvisible 255, 0, 0 call BattleTower_Outside_EventScript_1A040E @@ -2425,7 +2425,7 @@ Route119_EventScript_1A0594:: @ 81A0594 Route120_EventScript_1A0594:: @ 81A0594 checkitem ITEM_DEVON_SCOPE, 1 compare RESULT, 1 - jumpeq Route119_EventScript_1A05AE + goto_if_eq Route119_EventScript_1A05AE msgbox Route119_Text_171B93, 4 release end @@ -2433,7 +2433,7 @@ Route120_EventScript_1A0594:: @ 81A0594 Route119_EventScript_1A05AE:: @ 81A05AE msgbox Route119_Text_171BB6, 5 compare RESULT, 1 - jumpeq Route119_EventScript_1A05C3 + goto_if_eq Route119_EventScript_1A05C3 release end @@ -2450,19 +2450,19 @@ Route119_EventScript_1A05C3:: @ 81A05C3 waitpokecry setwildbattle SPECIES_KECLEON, 30, ITEM_NONE compare 0x8004, 1 - callif 1, Route119_EventScript_1A0646 + call_if 1, Route119_EventScript_1A0646 compare 0x8004, 2 - callif 1, Route119_EventScript_1A064A + call_if 1, Route119_EventScript_1A064A compare 0x8004, 3 - callif 1, Route119_EventScript_1A064E + call_if 1, Route119_EventScript_1A064E compare 0x8004, 4 - callif 1, Route119_EventScript_1A0652 + call_if 1, Route119_EventScript_1A0652 compare 0x8004, 5 - callif 1, Route119_EventScript_1A0656 + call_if 1, Route119_EventScript_1A0656 compare 0x8004, 6 - callif 1, Route119_EventScript_1A065A + call_if 1, Route119_EventScript_1A065A compare 0x8004, 7 - callif 1, Route119_EventScript_1A065E + call_if 1, Route119_EventScript_1A065E setflag 2145 dowildbattle clearflag 2145 @@ -3254,7 +3254,7 @@ gUnknown_081A14B8:: @ 81A14B8 special ExecuteWhiteOut waitstate compare RESULT, 1 - jumpeq EventScript_1A14CA + goto_if_eq EventScript_1A14CA releaseall end @@ -3598,32 +3598,32 @@ gUnknown_081A2C51:: @ 81A2C51 special sub_80BB70C special sub_80BB63C compare RESULT, 1 - jumpeq EventScript_1A2E45 + goto_if_eq EventScript_1A2E45 checkattack MOVE_SECRET_POWER setanimation 0, RESULT bufferattack 1, MOVE_SECRET_POWER compare 0x8007, 1 - jumpeq EventScript_1A2CB0 + goto_if_eq EventScript_1A2CB0 compare 0x8007, 2 - jumpeq EventScript_1A2CB0 + goto_if_eq EventScript_1A2CB0 compare 0x8007, 3 - jumpeq EventScript_1A2CB0 + goto_if_eq EventScript_1A2CB0 compare 0x8007, 4 - jumpeq EventScript_1A2CB0 + goto_if_eq EventScript_1A2CB0 compare 0x8007, 5 - jumpeq EventScript_1A2D08 + goto_if_eq EventScript_1A2D08 compare 0x8007, 6 - jumpeq EventScript_1A2D60 + goto_if_eq EventScript_1A2D60 end EventScript_1A2CB0: lockall compare RESULT, 6 - jumpeq EventScript_1A2CF1 + goto_if_eq EventScript_1A2CF1 bufferpartypoke 0, RESULT msgbox UnknownString_8198F34, 5 compare RESULT, 0 - jumpeq EventScript_1A2F3A + goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton doanimation 11 @@ -3650,11 +3650,11 @@ EventScript_1A2CFA: EventScript_1A2D08: lockall compare RESULT, 6 - jumpeq EventScript_1A2D49 + goto_if_eq EventScript_1A2D49 bufferpartypoke 0, RESULT msgbox UnknownString_81A197B, 5 compare RESULT, 0 - jumpeq EventScript_1A2F3A + goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton doanimation 26 @@ -3681,11 +3681,11 @@ EventScript_1A2D52: EventScript_1A2D60: lockall compare RESULT, 6 - jumpeq EventScript_1A2DA1 + goto_if_eq EventScript_1A2DA1 bufferpartypoke 0, RESULT msgbox UnknownString_81A1A4B, 5 compare RESULT, 0 - jumpeq EventScript_1A2F3A + goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton doanimation 27 @@ -3729,7 +3729,7 @@ SecretBase_RedCave1_EventScript_1A2DDE:: @ 81A2DDE setvar 0x4097, 1 msgbox SecretBase_RedCave1_Text_198F89, 5 compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A2E08 + goto_if_eq SecretBase_RedCave1_EventScript_1A2E08 closebutton playsfx 9 special sub_80BC440 @@ -3753,7 +3753,7 @@ gUnknown_081A2E14:: @ 81A2E14 playsfx 9 special sub_80BC114 compare RESULT, 0 - jumpeq EventScript_1A2E38 + goto_if_eq EventScript_1A2E38 clearflag 173 special sub_80BBAF0 setvar 0x4089, 0 @@ -3770,57 +3770,57 @@ EventScript_1A2E38: EventScript_1A2E45: checkattack MOVE_SECRET_POWER compare RESULT, 6 - jumpeq EventScript_1A2EF7 + goto_if_eq EventScript_1A2EF7 setanimation 0, RESULT setorcopyvar 0x8004, RESULT lockall special GetSecretBaseNearbyMapName msgbox UnknownString_81A3C71, 5 compare RESULT, 0 - jumpeq EventScript_1A2F3A + goto_if_eq EventScript_1A2F3A msgbox UnknownString_81A38FB, 5 compare RESULT, 0 - jumpeq EventScript_1A2F3A + goto_if_eq EventScript_1A2F3A fadescreen 1 special sub_80BC50C closebutton fadescreen 0 msgbox UnknownString_81A3CC9, 5 compare RESULT, 0 - jumpeq EventScript_1A2F3A + goto_if_eq EventScript_1A2F3A bufferpartypoke 0, 0x8004 bufferattack 1, MOVE_SECRET_POWER msgbox UsedCutRockSmashText, 4 closebutton closebutton compare 0x8007, 1 - jumpeq gUnknown_081A2CE6 + goto_if_eq gUnknown_081A2CE6 compare 0x8007, 2 - jumpeq gUnknown_081A2CE6 + goto_if_eq gUnknown_081A2CE6 compare 0x8007, 3 - jumpeq gUnknown_081A2CE6 + goto_if_eq gUnknown_081A2CE6 compare 0x8007, 4 - jumpeq gUnknown_081A2CE6 + goto_if_eq gUnknown_081A2CE6 compare 0x8007, 5 - jumpeq gUnknown_081A2D3E + goto_if_eq gUnknown_081A2D3E compare 0x8007, 6 - jumpeq gUnknown_081A2D96 + goto_if_eq gUnknown_081A2D96 releaseall end EventScript_1A2EF7:: compare 0x8007, 1 - jumpeq EventScript_1A2CF1 + goto_if_eq EventScript_1A2CF1 compare 0x8007, 2 - jumpeq EventScript_1A2CF1 + goto_if_eq EventScript_1A2CF1 compare 0x8007, 3 - jumpeq EventScript_1A2CF1 + goto_if_eq EventScript_1A2CF1 compare 0x8007, 4 - jumpeq EventScript_1A2CF1 + goto_if_eq EventScript_1A2CF1 compare 0x8007, 5 - jumpeq EventScript_1A2D49 + goto_if_eq EventScript_1A2D49 compare 0x8007, 6 - jumpeq EventScript_1A2DA1 + goto_if_eq EventScript_1A2DA1 end EventScript_1A2F3A:: @@ -3873,10 +3873,10 @@ gUnknown_081A2F8A:: @ 81A2F8A EventScript_1A2F95: special sub_8100A7C compare RESULT, 1 - jumpeq EventScript_1A2FBF + goto_if_eq EventScript_1A2FBF addvar 0x8004, 1 compare 0x8005, 0 - jumpeq EventScript_1A2F95 + goto_if_eq EventScript_1A2F95 disappear 0x8006 setflag 0x8005 goto EventScript_1A2F95 @@ -3911,42 +3911,42 @@ SecretBase_YellowCave3_EventScript_1A2FC0:: @ 81A2FC0 SecretBase_YellowCave4_EventScript_1A2FC0:: @ 81A2FC0 special sub_80BCE90 compare 0x8004, 0 - jumpeq SecretBase_RedCave1_EventScript_1A3032 + goto_if_eq SecretBase_RedCave1_EventScript_1A3032 compare 0x8004, 1 - jumpeq SecretBase_RedCave1_EventScript_1A30AE + goto_if_eq SecretBase_RedCave1_EventScript_1A30AE compare 0x8004, 2 - jumpeq SecretBase_RedCave1_EventScript_1A312A + goto_if_eq SecretBase_RedCave1_EventScript_1A312A compare 0x8004, 3 - jumpeq SecretBase_RedCave1_EventScript_1A31A6 + goto_if_eq SecretBase_RedCave1_EventScript_1A31A6 compare 0x8004, 4 - jumpeq SecretBase_RedCave1_EventScript_1A3222 + goto_if_eq SecretBase_RedCave1_EventScript_1A3222 compare 0x8004, 5 - jumpeq SecretBase_RedCave1_EventScript_1A329E + goto_if_eq SecretBase_RedCave1_EventScript_1A329E compare 0x8004, 6 - jumpeq SecretBase_RedCave1_EventScript_1A331A + goto_if_eq SecretBase_RedCave1_EventScript_1A331A compare 0x8004, 7 - jumpeq SecretBase_RedCave1_EventScript_1A3396 + goto_if_eq SecretBase_RedCave1_EventScript_1A3396 compare 0x8004, 8 - jumpeq SecretBase_RedCave1_EventScript_1A3412 + goto_if_eq SecretBase_RedCave1_EventScript_1A3412 compare 0x8004, 9 - jumpeq SecretBase_RedCave1_EventScript_1A348E + goto_if_eq SecretBase_RedCave1_EventScript_1A348E end SecretBase_RedCave1_EventScript_1A3032:: @ 81A3032 checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A3086 + goto_if 0, SecretBase_RedCave1_EventScript_1A3086 compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A30A5 + goto_if_eq SecretBase_RedCave1_EventScript_1A30A5 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1AEA, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A308F + goto_if_eq SecretBase_RedCave1_EventScript_1A308F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A308F + goto_if_eq SecretBase_RedCave1_EventScript_1A308F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1B83, 4 goto SecretBase_RedCave1_EventScript_1A350A @@ -3969,19 +3969,19 @@ SecretBase_RedCave1_EventScript_1A30A5:: @ 81A30A5 SecretBase_RedCave1_EventScript_1A30AE:: @ 81A30AE checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A3102 + goto_if 0, SecretBase_RedCave1_EventScript_1A3102 compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A3121 + goto_if_eq SecretBase_RedCave1_EventScript_1A3121 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1E67, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A310B + goto_if_eq SecretBase_RedCave1_EventScript_1A310B setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A310B + goto_if_eq SecretBase_RedCave1_EventScript_1A310B hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1F04, 4 goto SecretBase_RedCave1_EventScript_1A350A @@ -4004,19 +4004,19 @@ SecretBase_RedCave1_EventScript_1A3121:: @ 81A3121 SecretBase_RedCave1_EventScript_1A312A:: @ 81A312A checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A317E + goto_if 0, SecretBase_RedCave1_EventScript_1A317E compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A319D + goto_if_eq SecretBase_RedCave1_EventScript_1A319D lock faceplayer msgbox SecretBase_RedCave1_Text_1A218F, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A3187 + goto_if_eq SecretBase_RedCave1_EventScript_1A3187 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A3187 + goto_if_eq SecretBase_RedCave1_EventScript_1A3187 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2220, 4 goto SecretBase_RedCave1_EventScript_1A350A @@ -4039,19 +4039,19 @@ SecretBase_RedCave1_EventScript_1A319D:: @ 81A319D SecretBase_RedCave1_EventScript_1A31A6:: @ 81A31A6 checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A31FA + goto_if 0, SecretBase_RedCave1_EventScript_1A31FA compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A3219 + goto_if_eq SecretBase_RedCave1_EventScript_1A3219 lock faceplayer msgbox SecretBase_RedCave1_Text_1A24E1, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A3203 + goto_if_eq SecretBase_RedCave1_EventScript_1A3203 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A3203 + goto_if_eq SecretBase_RedCave1_EventScript_1A3203 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A256F, 4 goto SecretBase_RedCave1_EventScript_1A350A @@ -4074,19 +4074,19 @@ SecretBase_RedCave1_EventScript_1A3219:: @ 81A3219 SecretBase_RedCave1_EventScript_1A3222:: @ 81A3222 checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A3276 + goto_if 0, SecretBase_RedCave1_EventScript_1A3276 compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A3295 + goto_if_eq SecretBase_RedCave1_EventScript_1A3295 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2830, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A327F + goto_if_eq SecretBase_RedCave1_EventScript_1A327F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A327F + goto_if_eq SecretBase_RedCave1_EventScript_1A327F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A28D7, 4 goto SecretBase_RedCave1_EventScript_1A350A @@ -4109,19 +4109,19 @@ SecretBase_RedCave1_EventScript_1A3295:: @ 81A3295 SecretBase_RedCave1_EventScript_1A329E:: @ 81A329E checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A32F2 + goto_if 0, SecretBase_RedCave1_EventScript_1A32F2 compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A3311 + goto_if_eq SecretBase_RedCave1_EventScript_1A3311 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1CB2, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A32FB + goto_if_eq SecretBase_RedCave1_EventScript_1A32FB setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A32FB + goto_if_eq SecretBase_RedCave1_EventScript_1A32FB hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1D48, 4 goto SecretBase_RedCave1_EventScript_1A350A @@ -4144,19 +4144,19 @@ SecretBase_RedCave1_EventScript_1A3311:: @ 81A3311 SecretBase_RedCave1_EventScript_1A331A:: @ 81A331A checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A336E + goto_if 0, SecretBase_RedCave1_EventScript_1A336E compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A338D + goto_if_eq SecretBase_RedCave1_EventScript_1A338D lock faceplayer msgbox SecretBase_RedCave1_Text_1A2026, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A3377 + goto_if_eq SecretBase_RedCave1_EventScript_1A3377 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A3377 + goto_if_eq SecretBase_RedCave1_EventScript_1A3377 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2095, 4 goto SecretBase_RedCave1_EventScript_1A350A @@ -4179,19 +4179,19 @@ SecretBase_RedCave1_EventScript_1A338D:: @ 81A338D SecretBase_RedCave1_EventScript_1A3396:: @ 81A3396 checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A33EA + goto_if 0, SecretBase_RedCave1_EventScript_1A33EA compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A3409 + goto_if_eq SecretBase_RedCave1_EventScript_1A3409 lock faceplayer msgbox SecretBase_RedCave1_Text_1A236A, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A33F3 + goto_if_eq SecretBase_RedCave1_EventScript_1A33F3 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A33F3 + goto_if_eq SecretBase_RedCave1_EventScript_1A33F3 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2405, 4 goto SecretBase_RedCave1_EventScript_1A350A @@ -4214,19 +4214,19 @@ SecretBase_RedCave1_EventScript_1A3409:: @ 81A3409 SecretBase_RedCave1_EventScript_1A3412:: @ 81A3412 checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A3466 + goto_if 0, SecretBase_RedCave1_EventScript_1A3466 compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A3485 + goto_if_eq SecretBase_RedCave1_EventScript_1A3485 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2663, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A346F + goto_if_eq SecretBase_RedCave1_EventScript_1A346F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A346F + goto_if_eq SecretBase_RedCave1_EventScript_1A346F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2710, 4 goto SecretBase_RedCave1_EventScript_1A350A @@ -4249,19 +4249,19 @@ SecretBase_RedCave1_EventScript_1A3485:: @ 81A3485 SecretBase_RedCave1_EventScript_1A348E:: @ 81A348E checkflag 2052 - jumpif 0, SecretBase_RedCave1_EventScript_1A34E2 + goto_if 0, SecretBase_RedCave1_EventScript_1A34E2 compare RESULT, 1 - jumpeq SecretBase_RedCave1_EventScript_1A3501 + goto_if_eq SecretBase_RedCave1_EventScript_1A3501 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2A13, 5 compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A34EB + goto_if_eq SecretBase_RedCave1_EventScript_1A34EB setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog compare RESULT, 0 - jumpeq SecretBase_RedCave1_EventScript_1A34EB + goto_if_eq SecretBase_RedCave1_EventScript_1A34EB hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2AE2, 4 goto SecretBase_RedCave1_EventScript_1A350A @@ -4382,13 +4382,13 @@ SlateportCity_PokemonFanClub_EventScript_1ADE4D:: @ 81ADE4D setvar 0x8005, 1 special sub_80BF2C4 compare RESULT, 1 - jumpeq SlateportCity_PokemonFanClub_EventScript_1ADED6 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADED6 copyvar 0x8009, 0x8006 msgbox SlateportCity_PokemonFanClub_Text_1A8704, 5 compare RESULT, 1 - jumpeq SlateportCity_PokemonFanClub_EventScript_1ADE84 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADE84 compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_1ADEB9 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEB9 end SlateportCity_PokemonFanClub_EventScript_1ADE84:: @ 81ADE84 @@ -4400,9 +4400,9 @@ SlateportCity_PokemonFanClub_EventScript_1ADE84:: @ 81ADE84 lock faceplayer compare RESULT, 1 - jumpeq SlateportCity_PokemonFanClub_EventScript_1ADEC3 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEC3 compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_1ADEB9 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEB9 end SlateportCity_PokemonFanClub_EventScript_1ADEB9:: @ 81ADEB9 @@ -4427,24 +4427,24 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADEE0:: @ 81ADEE0 setvar 0x8005, 2 special sub_80BF2C4 compare RESULT, 1 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF96 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF96 copyvar 0x8009, 0x8006 checkflag 105 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF25 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF25 setflag 105 msgbox SlateportCity_OceanicMuseum_1F_Text_1A927F, 5 compare RESULT, 1 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 compare RESULT, 0 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end SlateportCity_OceanicMuseum_1F_EventScript_1ADF25:: @ 81ADF25 msgbox SlateportCity_OceanicMuseum_1F_Text_1A934C, 5 compare RESULT, 1 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 compare RESULT, 0 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end SlateportCity_OceanicMuseum_1F_EventScript_1ADF44:: @ 81ADF44 @@ -4456,9 +4456,9 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADF44:: @ 81ADF44 lock faceplayer compare RESULT, 1 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF83 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF83 compare RESULT, 0 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end SlateportCity_OceanicMuseum_1F_EventScript_1ADF79:: @ 81ADF79 @@ -4482,17 +4482,17 @@ SlateportCity_PokemonFanClub_EventScript_1ADFA0:: @ 81ADFA0 faceplayer specialval RESULT, sub_80BF544 compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_1ADE4D + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADE4D setvar 0x8005, 3 special sub_80BF2C4 compare RESULT, 1 - jumpeq SlateportCity_PokemonFanClub_EventScript_1AE0AC + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0AC copyvar 0x8009, 0x8006 msgbox SlateportCity_PokemonFanClub_Text_1A82F1, 5 compare RESULT, 1 - jumpeq SlateportCity_PokemonFanClub_EventScript_1ADFE9 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADFE9 compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_1AE0A2 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 end SlateportCity_PokemonFanClub_EventScript_1ADFE9:: @ 81ADFE9 @@ -4528,14 +4528,14 @@ SlateportCity_PokemonFanClub_EventScript_1AE04A:: @ 81AE04A lock faceplayer compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_1AE0A2 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 msgbox SlateportCity_PokemonFanClub_Text_1A852D, 4 setvar 0x8006, 1 call SlateportCity_PokemonFanClub_EventScript_1A00F3 lock faceplayer compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_1AE0A2 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 msgbox SlateportCity_PokemonFanClub_Text_1A85A6, 4 copyvar 0x8007, 0x800a setvar 0x8005, 3 @@ -4559,17 +4559,17 @@ VerdanturfTown_ContestLobby_EventScript_1AE0B6:: @ 81AE0B6 lock faceplayer checkflag 2 - jumpeq FallarborTown_ContestLobby_EventScript_1AE17E + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE17E setvar 0x8005, 6 special sub_80BF2C4 compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1AE17E + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE17E copyvar 0x8009, 0x8006 msgbox FallarborTown_ContestLobby_Text_1A6F7C, 5 compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1AE0F8 + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE0F8 compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1AE12D + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D end FallarborTown_ContestLobby_EventScript_1AE0F8:: @ 81AE0F8 @@ -4581,9 +4581,9 @@ FallarborTown_ContestLobby_EventScript_1AE0F8:: @ 81AE0F8 lock faceplayer compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1AE137 + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE137 compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1AE12D + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D end FallarborTown_ContestLobby_EventScript_1AE12D:: @ 81AE12D @@ -4602,7 +4602,7 @@ FallarborTown_ContestLobby_EventScript_1AE137:: @ 81AE137 lock faceplayer compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1AE12D + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D msgbox FallarborTown_ContestLobby_Text_1A7153, 4 setflag 2 setvar 0x8005, 6 @@ -4619,11 +4619,11 @@ LilycoveCity_ContestLobby_EventScript_1AE188:: @ 81AE188 SlateportCity_ContestLobby_EventScript_1AE188:: @ 81AE188 VerdanturfTown_ContestLobby_EventScript_1AE188:: @ 81AE188 compare 0x4086, 2 - jumpif 5, FallarborTown_ContestLobby_EventScript_1AE1FE + goto_if 5, FallarborTown_ContestLobby_EventScript_1AE1FE setvar 0x8005, 6 special sub_80BF2C4 compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1AE1FE + goto_if_eq FallarborTown_ContestLobby_EventScript_1AE1FE switch 0x4088 case 0, FallarborTown_ContestLobby_EventScript_1AE1FE case 2, FallarborTown_ContestLobby_EventScript_1AE1EE @@ -4656,17 +4656,17 @@ BattleTower_Lobby_EventScript_1AE1FF:: @ 81AE1FF lock faceplayer checkflag 2 - jumpeq BattleTower_Lobby_EventScript_1AE2E3 + goto_if_eq BattleTower_Lobby_EventScript_1AE2E3 setvar 0x8005, 7 special sub_80BF2C4 compare RESULT, 1 - jumpeq BattleTower_Lobby_EventScript_1AE2E3 + goto_if_eq BattleTower_Lobby_EventScript_1AE2E3 copyvar 0x8009, 0x8006 msgbox BattleTower_Lobby_Text_1A776D, 5 compare RESULT, 1 - jumpeq BattleTower_Lobby_EventScript_1AE241 + goto_if_eq BattleTower_Lobby_EventScript_1AE241 compare RESULT, 0 - jumpeq BattleTower_Lobby_EventScript_1AE297 + goto_if_eq BattleTower_Lobby_EventScript_1AE297 end BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 @@ -4675,9 +4675,9 @@ BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 multichoice 19, 8, 45, 1 copyvar 0x8008, RESULT compare RESULT, 0 - callif 1, BattleTower_Lobby_EventScript_1AE2A1 + call_if 1, BattleTower_Lobby_EventScript_1AE2A1 compare RESULT, 1 - callif 1, BattleTower_Lobby_EventScript_1AE2AA + call_if 1, BattleTower_Lobby_EventScript_1AE2AA msgbox BattleTower_Lobby_Text_1A79EB, 4 setvar 0x8004, 12 copyvar 0x8005, 0x8009 @@ -4685,9 +4685,9 @@ BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 lock faceplayer compare RESULT, 1 - jumpeq BattleTower_Lobby_EventScript_1AE2B3 + goto_if_eq BattleTower_Lobby_EventScript_1AE2B3 compare RESULT, 0 - jumpeq BattleTower_Lobby_EventScript_1AE2D9 + goto_if_eq BattleTower_Lobby_EventScript_1AE2D9 end BattleTower_Lobby_EventScript_1AE297:: @ 81AE297 @@ -4705,7 +4705,7 @@ BattleTower_Lobby_EventScript_1AE2AA:: @ 81AE2AA BattleTower_Lobby_EventScript_1AE2B3:: @ 81AE2B3 compare RESULT, 0 - jumpeq BattleTower_Lobby_EventScript_1AE2D9 + goto_if_eq BattleTower_Lobby_EventScript_1AE2D9 msgbox BattleTower_Lobby_Text_1A7A6E, 4 setflag 2 copyvar 0x8004, 0x8008 @@ -4725,11 +4725,11 @@ BattleTower_Lobby_EventScript_1AE2E3:: @ 81AE2E3 BattleTower_Lobby_EventScript_1AE2ED:: @ 81AE2ED compare 0x40bc, 0 - jumpeq BattleTower_Lobby_EventScript_1AE30F + goto_if_eq BattleTower_Lobby_EventScript_1AE30F setvar 0x8005, 7 special sub_80BF2C4 compare RESULT, 1 - jumpeq BattleTower_Lobby_EventScript_1AE30F + goto_if_eq BattleTower_Lobby_EventScript_1AE30F clearflag 918 return @@ -4791,11 +4791,11 @@ Text_RepelWoreOff: @ 81C33EF MauvilleCity_GameCorner_EventScript_1C407E:: @ 81C407E checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 0 event_96 2 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1C40DA + goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 goto MauvilleCity_GameCorner_EventScript_1C40DA end @@ -4803,11 +4803,11 @@ MauvilleCity_GameCorner_EventScript_1C407E:: @ 81C407E MauvilleCity_GameCorner_EventScript_1C40AC:: @ 81C40AC checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 1 event_96 2 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1C40DA + goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 goto MauvilleCity_GameCorner_EventScript_1C40DA end diff --git a/data/field_move_scripts.inc b/data/field_move_scripts.inc index cdda2edcc..c3aeeab7a 100644 --- a/data/field_move_scripts.inc +++ b/data/field_move_scripts.inc @@ -1,16 +1,16 @@ S_CuttableTree:: @ 81B0DCC lockall checkflag 2055 - jumpif 0, CannotUseCut + goto_if 0, CannotUseCut checkattack MOVE_CUT compare RESULT, 6 - jumpeq CannotUseCut + goto_if_eq CannotUseCut setanimation 0, RESULT bufferpartypoke 0, RESULT bufferattack 1, MOVE_CUT msgbox UseCutPromptText, 5 compare RESULT, 0 - jumpeq Cut_ChoseNo + goto_if_eq Cut_ChoseNo msgbox UsedCutRockSmashText, 4 closebutton doanimation 2 @@ -59,16 +59,16 @@ CannotUseCutText: @ 81B0E8E S_BreakableRock:: @ 81B0EB7 lockall checkflag 2057 - jumpif 0, CannotUseRockSmash + goto_if 0, CannotUseRockSmash checkattack MOVE_ROCK_SMASH compare RESULT, 6 - jumpeq CannotUseRockSmash + goto_if_eq CannotUseRockSmash setanimation 0, RESULT bufferpartypoke 0, RESULT bufferattack 1, MOVE_ROCK_SMASH msgbox UseRockSmashPromptText, 5 compare RESULT, 0 - jumpeq RockSmash_ChoseNo + goto_if_eq RockSmash_ChoseNo msgbox UsedCutRockSmashText, 4 closebutton doanimation 37 @@ -89,10 +89,10 @@ DoRockSmashMovement: @ 81B0F0C disappear LAST_TALKED specialval RESULT, sub_810F5BC compare RESULT, 1 - jumpeq DoRockSmashMovement_Done + goto_if_eq DoRockSmashMovement_Done special ScrSpecial_RockSmashWildEncounter compare RESULT, 0 - jumpeq DoRockSmashMovement_Done + goto_if_eq DoRockSmashMovement_Done waitstate releaseall end @@ -126,16 +126,16 @@ CannotUseRockSmashText: @ 81B0F90 S_PushableBoulder:: @ 81B0FCB lockall checkflag 2058 - jumpif 0, CannotUseStrength + goto_if 0, CannotUseStrength checkflag 2089 - jumpeq AlreadyUsedStrength + goto_if_eq AlreadyUsedStrength checkattack 70 compare RESULT, 6 - jumpeq CannotUseStrength + goto_if_eq CannotUseStrength setanimation 0, RESULT msgbox UseStrengthPromptText, 5 compare RESULT, 0 - jumpeq Strength_ChoseNo + goto_if_eq Strength_ChoseNo closebutton doanimation 40 waitstate @@ -192,12 +192,12 @@ S_UseWaterfall:: @ 81B115A lockall checkattack MOVE_WATERFALL compare RESULT, 6 - jumpeq Waterfall_NoMonKnows + goto_if_eq Waterfall_NoMonKnows bufferpartypoke 0, RESULT setanimation 0, RESULT msgbox UseWaterfallPromptText, 5 compare RESULT, 0 - jumpeq Waterfall_Done + goto_if_eq Waterfall_Done msgbox UsedWaterfallText, 4 doanimation 43 goto Waterfall_Done @@ -225,13 +225,13 @@ UseDiveScript:: @ 81B1220 lockall checkattack MOVE_DIVE compare RESULT, 6 - jumpeq CannotUseDive + goto_if_eq CannotUseDive bufferpartypoke 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UseDivePromptText, 5 compare RESULT, 0 - jumpeq Dive_Done + goto_if_eq Dive_Done msgbox UsedDiveText, 4 doanimation 44 goto Dive_Done @@ -248,13 +248,13 @@ S_UseDiveUnderwater:: @ 81B1269 lockall checkattack MOVE_DIVE compare RESULT, 6 - jumpeq UnderwaterCannotUseDive + goto_if_eq UnderwaterCannotUseDive bufferpartypoke 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UnderwaterUseDivePromptText, 5 compare RESULT, 0 - jumpeq UnderwaterDive_Done + goto_if_eq UnderwaterDive_Done msgbox UsedDiveText, 4 doanimation 44 goto UnderwaterDive_Done diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc index 6c74fcca4..64d5f9b79 100644 --- a/data/scripts/berry_tree.inc +++ b/data/scripts/berry_tree.inc @@ -23,7 +23,7 @@ Route102_EventScript_1A153D:: @ 81A153D faceplayer specialval RESULT, PlayerHasBerries compare RESULT, 1 - jumpeq Route102_EventScript_1A1558 + goto_if_eq Route102_EventScript_1A1558 message Route102_Text_1A16B6 waittext waitbutton @@ -33,9 +33,9 @@ Route102_EventScript_1A153D:: @ 81A153D Route102_EventScript_1A1558:: @ 81A1558 msgbox Route102_Text_1A16CD, 5 compare RESULT, 1 - jumpeq Route102_EventScript_1A1577 + goto_if_eq Route102_EventScript_1A1577 compare RESULT, 0 - jumpeq Route102_EventScript_1A1593 + goto_if_eq Route102_EventScript_1A1593 end Route102_EventScript_1A1577:: @ 81A1577 @@ -44,7 +44,7 @@ Route102_EventScript_1A1577:: @ 81A1577 special sub_80B4EE4 waitstate compare ITEM_ID, 0 - jumpeq Route102_EventScript_1A1593 + goto_if_eq Route102_EventScript_1A1593 removeitem ITEM_ID, 1 call Route102_EventScript_1A16A9 @@ -83,9 +83,9 @@ Route102_EventScript_1A15BC:: @ 81A15BC Route102_EventScript_1A15CE:: @ 81A15CE compare 0x8005, 0 - jumpeq Route102_EventScript_1A15F2 + goto_if_eq Route102_EventScript_1A15F2 compare 0x8005, 4 - jumpeq Route102_EventScript_1A15EB + goto_if_eq Route102_EventScript_1A15EB buffertext 1, Route102_Text_1A17B7 return @@ -103,14 +103,14 @@ Route102_EventScript_1A15F9:: @ 81A15F9 faceplayer msgbox Route102_Text_1A17C0, 5 compare RESULT, 1 - jumpeq Route102_EventScript_1A161D + goto_if_eq Route102_EventScript_1A161D compare RESULT, 0 - jumpeq Route102_EventScript_1A164B + goto_if_eq Route102_EventScript_1A164B Route102_EventScript_1A161D:: @ 81A161D special FieldObjectInteractionPickBerryTree compare 0x8004, 0 - jumpeq Route102_EventScript_1A1642 + goto_if_eq Route102_EventScript_1A1642 special FieldObjectInteractionRemoveBerryTree message Route102_Text_1A17FD fanfare 387 @@ -147,12 +147,12 @@ gUnknown_081A1654:: @ 81A1654 Route102_EventScript_1A165F:: @ 81A165F checkitem ITEM_WAILMER_PAIL, 1 compare RESULT, 0 - jumpeq Route102_EventScript_1A168D + goto_if_eq Route102_EventScript_1A168D msgbox Route102_Text_1A18E6, 5 compare RESULT, 1 - jumpeq Route102_EventScript_1A1693 + goto_if_eq Route102_EventScript_1A1693 compare RESULT, 0 - jumpeq Route102_EventScript_1A168D + goto_if_eq Route102_EventScript_1A168D Route102_EventScript_1A168D:: @ 81A168D releaseall diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index 372ac5eb8..da3277ee3 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -40,15 +40,15 @@ SlateportCity_PokemonCenter_2F_MapScript1_1A3D32:: @ 81A3D32 SootopolisCity_PokemonCenter_2F_MapScript1_1A3D32:: @ 81A3D32 VerdanturfTown_PokemonCenter_2F_MapScript1_1A3D32:: @ 81A3D32 compare 0x4087, 1 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A3D6A + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D6A compare 0x4087, 2 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A3D6A + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D6A compare 0x4087, 5 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A3D6A + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D6A compare 0x4087, 3 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A3D74 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D74 compare 0x4087, 4 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A3D7E + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D7E end OldaleTown_PokemonCenter_2F_EventScript_1A3D6A:: @ 81A3D6A @@ -91,7 +91,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3DB2:: @ 81A3DB2 move 255, OldaleTown_PokemonCenter_2F_Movement_1A4358 waitmove 0 compare 0x8007, 0 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A3DD9 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3DD9 move 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4354 waitmove 0 @@ -102,7 +102,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3DDA:: @ 81A3DDA special CloseLink setvar 0x4087, 0 compare 0x8007, 0 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A3E0C + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3E0C move 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4356 waitmove 0 move 255, OldaleTown_PokemonCenter_2F_Movement_1A4358 @@ -129,7 +129,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3E30:: @ 81A3E30 special CloseLink setvar 0x4087, 0 compare 0x8007, 0 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A3E0C + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3E0C move 255, OldaleTown_PokemonCenter_2F_Movement_1A4361 waitmove 0 move 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4356 @@ -175,7 +175,7 @@ SlateportCity_PokemonCenter_2F_EventScript_1A3EA6:: @ 81A3EA6 SootopolisCity_PokemonCenter_2F_EventScript_1A3EA6:: @ 81A3EA6 VerdanturfTown_PokemonCenter_2F_EventScript_1A3EA6:: @ 81A3EA6 checkflag 2049 - jumpif 0, OldaleTown_PokemonCenter_2F_EventScript_1A4342 + goto_if 0, OldaleTown_PokemonCenter_2F_EventScript_1A4342 copyvar 0x8007, LAST_TALKED lock faceplayer @@ -193,26 +193,26 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3EBC:: @ 81A3EBC OldaleTown_PokemonCenter_2F_EventScript_1A3EF2:: @ 81A3EF2 call S_DoSaveDialog compare RESULT, 0 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 call OldaleTown_PokemonCenter_2F_EventScript_1A3FEF compare 0x8004, 0 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 message OldaleTown_PokemonCenter_2F_Text_1A490C waittext special sub_808347C waitstate compare RESULT, 1 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A3F5E + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3F5E compare RESULT, 2 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4301 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4301 compare RESULT, 3 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A430D + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A430D compare RESULT, 4 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4068 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4068 compare RESULT, 5 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 compare RESULT, 6 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A42F5 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A42F5 OldaleTown_PokemonCenter_2F_EventScript_1A3F5E:: @ 81A3F5E special ScrSpecial_HealPlayerParty @@ -238,7 +238,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3F5E:: @ 81A3F5E doorchange release compare 0x8004, 5 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A3FCD + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3FCD special SetCableClubWarp warp SingleBattleColosseum, 255, 6, 8 special DoCableClubWarp @@ -282,7 +282,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A403C:: @ 81A403C OldaleTown_PokemonCenter_2F_EventScript_1A4042:: @ 81A4042 special CheckForAlivePartyMons compare RESULT, 0 - jumpif 5, OldaleTown_PokemonCenter_2F_EventScript_1A4056 + goto_if 5, OldaleTown_PokemonCenter_2F_EventScript_1A4056 setvar 0x8004, 2 return @@ -347,39 +347,39 @@ SlateportCity_PokemonCenter_2F_EventScript_1A40CC:: @ 81A40CC SootopolisCity_PokemonCenter_2F_EventScript_1A40CC:: @ 81A40CC VerdanturfTown_PokemonCenter_2F_EventScript_1A40CC:: @ 81A40CC checkflag 2049 - jumpif 0, OldaleTown_PokemonCenter_2F_EventScript_1A4339 + goto_if 0, OldaleTown_PokemonCenter_2F_EventScript_1A4339 copyvar 0x8007, LAST_TALKED lock faceplayer msgbox OldaleTown_PokemonCenter_2F_Text_1A457E, 5 compare RESULT, 0 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 compare RESULT, 1 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A40FA + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A40FA OldaleTown_PokemonCenter_2F_EventScript_1A40FA:: @ 81A40FA call OldaleTown_PokemonCenter_2F_EventScript_1A41BB compare RESULT, 0 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 call S_DoSaveDialog compare RESULT, 0 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 message OldaleTown_PokemonCenter_2F_Text_1A490C waittext special sub_80834E4 waitstate compare RESULT, 1 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4166 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4166 compare RESULT, 2 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4301 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4301 compare RESULT, 3 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A430D + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A430D compare RESULT, 4 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A432D + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A432D compare RESULT, 5 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 compare RESULT, 6 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A42F5 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A42F5 OldaleTown_PokemonCenter_2F_EventScript_1A4166:: @ 81A4166 setvar 0x8004, 3 @@ -407,10 +407,10 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4166:: @ 81A4166 OldaleTown_PokemonCenter_2F_EventScript_1A41BB:: @ 81A41BB specialval RESULT, CalculatePlayerPartyCount compare RESULT, 2 - jumpif 0, OldaleTown_PokemonCenter_2F_EventScript_1A41E1 + goto_if 0, OldaleTown_PokemonCenter_2F_EventScript_1A41E1 specialval RESULT, GetNameOfEnigmaBerryInPlayerParty compare RESULT, 1 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A41EE + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A41EE setvar RESULT, 1 return @@ -444,20 +444,20 @@ SlateportCity_PokemonCenter_2F_EventScript_1A41FB:: @ 81A41FB SootopolisCity_PokemonCenter_2F_EventScript_1A41FB:: @ 81A41FB VerdanturfTown_PokemonCenter_2F_EventScript_1A41FB:: @ 81A41FB checkflag 2072 - jumpif 0, OldaleTown_PokemonCenter_2F_EventScript_1A434B + goto_if 0, OldaleTown_PokemonCenter_2F_EventScript_1A434B copyvar 0x8007, LAST_TALKED lock faceplayer msgbox OldaleTown_PokemonCenter_2F_Text_1A45FE, 5 compare RESULT, 0 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 compare RESULT, 1 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4229 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4229 OldaleTown_PokemonCenter_2F_EventScript_1A4229:: @ 81A4229 call S_DoSaveDialog compare RESULT, 0 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 message OldaleTown_PokemonCenter_2F_Text_1A490C waittext special sub_808350C @@ -465,19 +465,19 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4229:: @ 81A4229 special sub_80835D8 waitstate compare RESULT, 1 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4294 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4294 compare RESULT, 2 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4301 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4301 compare RESULT, 3 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A430D + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A430D compare RESULT, 4 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A432D + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A432D compare RESULT, 5 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 compare RESULT, 6 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A42F5 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A42F5 compare RESULT, 7 - jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A42E9 + goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A42E9 OldaleTown_PokemonCenter_2F_EventScript_1A4294:: @ 81A4294 setvar 0x8004, 4 @@ -620,7 +620,7 @@ DoubleBattleColosseum_EventScript_1A4383:: @ 81A4383 special sub_80C5568 waitstate compare RESULT, 0 - jumpeq DoubleBattleColosseum_EventScript_1A43EF + goto_if_eq DoubleBattleColosseum_EventScript_1A43EF setvar 0x8005, 0 special sub_8083B90 waitstate @@ -631,7 +631,7 @@ DoubleBattleColosseum_EventScript_1A439E:: @ 81A439E special sub_80C5568 waitstate compare RESULT, 0 - jumpeq DoubleBattleColosseum_EventScript_1A43EF + goto_if_eq DoubleBattleColosseum_EventScript_1A43EF setvar 0x8005, 1 special sub_8083B90 waitstate @@ -642,7 +642,7 @@ DoubleBattleColosseum_EventScript_1A43B9:: @ 81A43B9 special sub_80C5568 waitstate compare RESULT, 0 - jumpeq DoubleBattleColosseum_EventScript_1A43EF + goto_if_eq DoubleBattleColosseum_EventScript_1A43EF setvar 0x8005, 2 special sub_8083B90 waitstate @@ -653,7 +653,7 @@ DoubleBattleColosseum_EventScript_1A43D4:: @ 81A43D4 special sub_80C5568 waitstate compare RESULT, 0 - jumpeq DoubleBattleColosseum_EventScript_1A43EF + goto_if_eq DoubleBattleColosseum_EventScript_1A43EF setvar 0x8005, 3 special sub_8083B90 waitstate @@ -691,7 +691,7 @@ RecordCorner_EventScript_1A4418:: @ 81A4418 special sub_80B929C waitstate compare 0x4001, 0 - jumpif 5, RecordCorner_EventScript_1A446C + goto_if 5, RecordCorner_EventScript_1A446C end RecordCorner_EventScript_1A442D:: @ 81A442D @@ -699,7 +699,7 @@ RecordCorner_EventScript_1A442D:: @ 81A442D special sub_80B929C waitstate compare 0x4001, 0 - jumpif 5, RecordCorner_EventScript_1A446C + goto_if 5, RecordCorner_EventScript_1A446C end RecordCorner_EventScript_1A4442:: @ 81A4442 @@ -707,7 +707,7 @@ RecordCorner_EventScript_1A4442:: @ 81A4442 special sub_80B929C waitstate compare 0x4001, 0 - jumpif 5, RecordCorner_EventScript_1A446C + goto_if 5, RecordCorner_EventScript_1A446C end RecordCorner_EventScript_1A4457:: @ 81A4457 @@ -715,7 +715,7 @@ RecordCorner_EventScript_1A4457:: @ 81A4457 special sub_80B929C waitstate compare 0x4001, 0 - jumpif 5, RecordCorner_EventScript_1A446C + goto_if 5, RecordCorner_EventScript_1A446C end RecordCorner_EventScript_1A446C:: @ 81A446C @@ -771,7 +771,7 @@ TradeCenter_EventScript_1A44AD:: @ 81A44AD RecordCorner_EventScript_1A44BC:: @ 81A44BC compare 0x4000, 0 - jumpif 5, RecordCorner_EventScript_1A44D6 + goto_if 5, RecordCorner_EventScript_1A44D6 special sub_8064EAC message RecordCorner_Text_1A4DD7 waittext @@ -792,7 +792,7 @@ RecordCorner_EventScript_1A44D6:: @ 81A44D6 TradeRoom_PromptToCancelLink:: @ 81A44E5 msgbox TradeRoom_WillLinkBeTerminated, 5 compare RESULT, 1 - jumpeq TradeRoom_TerminateLink + goto_if_eq TradeRoom_TerminateLink hidebox 0, 0, 29, 19 end diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index 484607165..b41a40e14 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -6,16 +6,16 @@ VerdanturfTown_ContestLobby_EventScript_1A4E92:: @ 81A4E92 faceplayer checkitem ITEM_CONTEST_PASS, 1 compare RESULT, 0 - callif 1, FallarborTown_ContestLobby_EventScript_1A4EDD + call_if 1, FallarborTown_ContestLobby_EventScript_1A4EDD compare 0x408a, 0 - jumpif 5, FallarborTown_ContestLobby_EventScript_1A4F4E + goto_if 5, FallarborTown_ContestLobby_EventScript_1A4F4E checkflag 1 - jumpeq FallarborTown_ContestLobby_EventScript_1A4F8F + goto_if_eq FallarborTown_ContestLobby_EventScript_1A4F8F bufferstd 0, 0x800b msgbox FallarborTown_ContestLobby_Text_1A5DFC, 4 checkitem ITEM_CONTEST_PASS, 1 compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1A4EE1 + goto_if_eq FallarborTown_ContestLobby_EventScript_1A4EE1 setflag 1 goto FallarborTown_ContestLobby_EventScript_1A4F8F end @@ -26,7 +26,7 @@ FallarborTown_ContestLobby_EventScript_1A4EDD:: @ 81A4EDD FallarborTown_ContestLobby_EventScript_1A4EE1:: @ 81A4EE1 compare CONTEST_RANK, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1A4EF6 + goto_if_eq FallarborTown_ContestLobby_EventScript_1A4EF6 msgbox FallarborTown_ContestLobby_Text_1A6340, 4 releaseall end @@ -34,14 +34,14 @@ FallarborTown_ContestLobby_EventScript_1A4EE1:: @ 81A4EE1 FallarborTown_ContestLobby_EventScript_1A4EF6:: @ 81A4EF6 msgbox FallarborTown_ContestLobby_Text_1A64F4, 5 compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1A4F13 + goto_if_eq FallarborTown_ContestLobby_EventScript_1A4F13 msgbox FallarborTown_ContestLobby_Text_1A65EA, 4 releaseall end FallarborTown_ContestLobby_EventScript_1A4F13:: @ 81A4F13 checkflag 150 - jumpeq FallarborTown_ContestLobby_EventScript_1A4F44 + goto_if_eq FallarborTown_ContestLobby_EventScript_1A4F44 msgbox FallarborTown_ContestLobby_Text_1A6583, 4 giveitem ITEM_CONTEST_PASS setflag 150 @@ -64,7 +64,7 @@ FallarborTown_ContestLobby_EventScript_1A4F4E:: @ 81A4F4E FallarborTown_ContestLobby_EventScript_1A4F67:: @ 81A4F67 giveitem ITEM_LUXURY_BALL compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1A4F86 + goto_if_eq FallarborTown_ContestLobby_EventScript_1A4F86 setvar 0x408a, 0 closebutton release @@ -121,18 +121,18 @@ FallarborTown_ContestLobby_EventScript_1A5048:: @ 81A5048 msgbox FallarborTown_ContestLobby_Text_1A6319, 4 choosecontestpkmn compare 0x8004, 255 - jumpeq FallarborTown_ContestLobby_EventScript_1A5097 + goto_if_eq FallarborTown_ContestLobby_EventScript_1A5097 special sub_80C43F4 compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1A50C8 + goto_if_eq FallarborTown_ContestLobby_EventScript_1A50C8 compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1A50D7 + goto_if_eq FallarborTown_ContestLobby_EventScript_1A50D7 compare RESULT, 2 - jumpeq FallarborTown_ContestLobby_EventScript_1A50FB + goto_if_eq FallarborTown_ContestLobby_EventScript_1A50FB compare RESULT, 3 - jumpeq FallarborTown_ContestLobby_EventScript_1A511F + goto_if_eq FallarborTown_ContestLobby_EventScript_1A511F compare RESULT, 4 - jumpeq FallarborTown_ContestLobby_EventScript_1A512E + goto_if_eq FallarborTown_ContestLobby_EventScript_1A512E end FallarborTown_ContestLobby_EventScript_1A5097:: @ 81A5097 @@ -271,7 +271,7 @@ LinkContestRoom1_EventScript_1A5245:: @ 81A5245 LinkContestRoom1_EventScript_1A525F:: @ 81A525F compare 0x4088, 5 - jumpeq LinkContestRoom1_EventScript_1A5273 + goto_if_eq LinkContestRoom1_EventScript_1A5273 msgbox LinkContestRoom1_Text_1A68F0, 3 return @@ -288,20 +288,20 @@ LinkContestRoom1_EventScript_1A527A:: @ 81A527A call LinkContestRoom1_EventScript_1A5880 addvar 0x8006, 1 compare 0x8006, 4 - jumpif 5, LinkContestRoom1_EventScript_1A527A + goto_if 5, LinkContestRoom1_EventScript_1A527A call LinkContestRoom1_EventScript_1A5377 setvar 0x4001, 6 return LinkContestRoom1_EventScript_1A52AE:: @ 81A52AE compare 0x8006, 0 - jumpeq LinkContestRoom1_EventScript_1A52DB + goto_if_eq LinkContestRoom1_EventScript_1A52DB compare 0x8006, 1 - jumpeq LinkContestRoom1_EventScript_1A52ED + goto_if_eq LinkContestRoom1_EventScript_1A52ED compare 0x8006, 2 - jumpeq LinkContestRoom1_EventScript_1A52FF + goto_if_eq LinkContestRoom1_EventScript_1A52FF compare 0x8006, 3 - jumpeq LinkContestRoom1_EventScript_1A5311 + goto_if_eq LinkContestRoom1_EventScript_1A5311 return LinkContestRoom1_EventScript_1A52DB:: @ 81A52DB @@ -358,7 +358,7 @@ LinkContestRoom1_EventScript_1A5323:: @ 81A5323 LinkContestRoom1_EventScript_1A535E:: @ 81A535E compare 0x4088, 5 - jumpeq LinkContestRoom1_EventScript_1A5370 + goto_if_eq LinkContestRoom1_EventScript_1A5370 message LinkContestRoom1_Text_1A6A04 waittext return @@ -386,7 +386,7 @@ LinkContestRoom1_EventScript_1A5377:: @ 81A5377 LinkContestRoom1_EventScript_1A53B3:: @ 81A53B3 compare 0x4088, 5 - jumpeq LinkContestRoom1_EventScript_1A53C7 + goto_if_eq LinkContestRoom1_EventScript_1A53C7 msgbox LinkContestRoom1_Text_1A6A1F, 4 return @@ -397,7 +397,7 @@ LinkContestRoom1_EventScript_1A53C7:: @ 81A53C7 LinkContestRoom1_EventScript_1A53CE:: @ 81A53CE compare 0x4088, 5 - jumpeq LinkContestRoom1_EventScript_1A53DF + goto_if_eq LinkContestRoom1_EventScript_1A53DF message LinkContestRoom1_Text_1A6AE1 return @@ -432,15 +432,15 @@ LinkContestRoom1_EventScript_1A53E5:: @ 81A53E5 LinkContestRoom1_EventScript_1A5455:: @ 81A5455 special sub_80C47A0 compare 0x4088, 1 - callif 1, LinkContestRoom1_EventScript_1A555A + call_if 1, LinkContestRoom1_EventScript_1A555A compare 0x4088, 2 - callif 1, LinkContestRoom1_EventScript_1A55B8 + call_if 1, LinkContestRoom1_EventScript_1A55B8 compare 0x4088, 3 - callif 1, LinkContestRoom1_EventScript_1A5616 + call_if 1, LinkContestRoom1_EventScript_1A5616 compare 0x4088, 4 - callif 1, LinkContestRoom1_EventScript_1A5674 + call_if 1, LinkContestRoom1_EventScript_1A5674 compare 0x4088, 5 - callif 1, LinkContestRoom1_EventScript_1A56D2 + call_if 1, LinkContestRoom1_EventScript_1A56D2 setvar 0x4001, 9 setvar 0x4002, 9 setvar 0x4003, 9 @@ -450,7 +450,7 @@ LinkContestRoom1_EventScript_1A5455:: @ 81A5455 setvar 0x4007, 9 setvar 0x4008, 9 compare 0x4000, 0 - callif 2, LinkContestRoom1_EventScript_1A54EB + call_if 2, LinkContestRoom1_EventScript_1A54EB setvar 0x4001, 0 setvar 0x4002, 0 setvar 0x4003, 0 @@ -465,123 +465,123 @@ LinkContestRoom1_EventScript_1A54EB:: @ 81A54EB setvar RESULT, 8 special ScriptRandom compare RESULT, 0 - callif 1, LinkContestRoom1_EventScript_1A5760 + call_if 1, LinkContestRoom1_EventScript_1A5760 compare RESULT, 1 - callif 1, LinkContestRoom1_EventScript_1A5784 + call_if 1, LinkContestRoom1_EventScript_1A5784 compare RESULT, 2 - callif 1, LinkContestRoom1_EventScript_1A57A8 + call_if 1, LinkContestRoom1_EventScript_1A57A8 compare RESULT, 3 - callif 1, LinkContestRoom1_EventScript_1A57CC + call_if 1, LinkContestRoom1_EventScript_1A57CC compare RESULT, 4 - callif 1, LinkContestRoom1_EventScript_1A57F0 + call_if 1, LinkContestRoom1_EventScript_1A57F0 compare RESULT, 5 - callif 1, LinkContestRoom1_EventScript_1A5814 + call_if 1, LinkContestRoom1_EventScript_1A5814 compare RESULT, 6 - callif 1, LinkContestRoom1_EventScript_1A5838 + call_if 1, LinkContestRoom1_EventScript_1A5838 compare RESULT, 7 - callif 1, LinkContestRoom1_EventScript_1A585C + call_if 1, LinkContestRoom1_EventScript_1A585C compare 0x4000, 0 - jumpif 2, LinkContestRoom1_EventScript_1A54EB + goto_if 2, LinkContestRoom1_EventScript_1A54EB waitmove 0 return LinkContestRoom1_EventScript_1A555A:: @ 81A555A compare 0x8004, 80 - jumpif 2, LinkContestRoom1_EventScript_1A575A + goto_if 2, LinkContestRoom1_EventScript_1A575A compare 0x8004, 70 - jumpif 2, LinkContestRoom1_EventScript_1A5754 + goto_if 2, LinkContestRoom1_EventScript_1A5754 compare 0x8004, 60 - jumpif 2, LinkContestRoom1_EventScript_1A574E + goto_if 2, LinkContestRoom1_EventScript_1A574E compare 0x8004, 50 - jumpif 2, LinkContestRoom1_EventScript_1A5748 + goto_if 2, LinkContestRoom1_EventScript_1A5748 compare 0x8004, 40 - jumpif 2, LinkContestRoom1_EventScript_1A5742 + goto_if 2, LinkContestRoom1_EventScript_1A5742 compare 0x8004, 30 - jumpif 2, LinkContestRoom1_EventScript_1A573C + goto_if 2, LinkContestRoom1_EventScript_1A573C compare 0x8004, 20 - jumpif 2, LinkContestRoom1_EventScript_1A5736 + goto_if 2, LinkContestRoom1_EventScript_1A5736 compare 0x8004, 10 - jumpif 2, LinkContestRoom1_EventScript_1A5730 + goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return LinkContestRoom1_EventScript_1A55B8:: @ 81A55B8 compare 0x8004, 230 - jumpif 2, LinkContestRoom1_EventScript_1A575A + goto_if 2, LinkContestRoom1_EventScript_1A575A compare 0x8004, 210 - jumpif 2, LinkContestRoom1_EventScript_1A5754 + goto_if 2, LinkContestRoom1_EventScript_1A5754 compare 0x8004, 190 - jumpif 2, LinkContestRoom1_EventScript_1A574E + goto_if 2, LinkContestRoom1_EventScript_1A574E compare 0x8004, 170 - jumpif 2, LinkContestRoom1_EventScript_1A5748 + goto_if 2, LinkContestRoom1_EventScript_1A5748 compare 0x8004, 150 - jumpif 2, LinkContestRoom1_EventScript_1A5742 + goto_if 2, LinkContestRoom1_EventScript_1A5742 compare 0x8004, 130 - jumpif 2, LinkContestRoom1_EventScript_1A573C + goto_if 2, LinkContestRoom1_EventScript_1A573C compare 0x8004, 110 - jumpif 2, LinkContestRoom1_EventScript_1A5736 + goto_if 2, LinkContestRoom1_EventScript_1A5736 compare 0x8004, 90 - jumpif 2, LinkContestRoom1_EventScript_1A5730 + goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return LinkContestRoom1_EventScript_1A5616:: @ 81A5616 compare 0x8004, 380 - jumpif 2, LinkContestRoom1_EventScript_1A575A + goto_if 2, LinkContestRoom1_EventScript_1A575A compare 0x8004, 350 - jumpif 2, LinkContestRoom1_EventScript_1A5754 + goto_if 2, LinkContestRoom1_EventScript_1A5754 compare 0x8004, 320 - jumpif 2, LinkContestRoom1_EventScript_1A574E + goto_if 2, LinkContestRoom1_EventScript_1A574E compare 0x8004, 290 - jumpif 2, LinkContestRoom1_EventScript_1A5748 + goto_if 2, LinkContestRoom1_EventScript_1A5748 compare 0x8004, 260 - jumpif 2, LinkContestRoom1_EventScript_1A5742 + goto_if 2, LinkContestRoom1_EventScript_1A5742 compare 0x8004, 230 - jumpif 2, LinkContestRoom1_EventScript_1A573C + goto_if 2, LinkContestRoom1_EventScript_1A573C compare 0x8004, 200 - jumpif 2, LinkContestRoom1_EventScript_1A5736 + goto_if 2, LinkContestRoom1_EventScript_1A5736 compare 0x8004, 170 - jumpif 2, LinkContestRoom1_EventScript_1A5730 + goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return LinkContestRoom1_EventScript_1A5674:: @ 81A5674 compare 0x8004, 600 - jumpif 2, LinkContestRoom1_EventScript_1A575A + goto_if 2, LinkContestRoom1_EventScript_1A575A compare 0x8004, 560 - jumpif 2, LinkContestRoom1_EventScript_1A5754 + goto_if 2, LinkContestRoom1_EventScript_1A5754 compare 0x8004, 520 - jumpif 2, LinkContestRoom1_EventScript_1A574E + goto_if 2, LinkContestRoom1_EventScript_1A574E compare 0x8004, 480 - jumpif 2, LinkContestRoom1_EventScript_1A5748 + goto_if 2, LinkContestRoom1_EventScript_1A5748 compare 0x8004, 440 - jumpif 2, LinkContestRoom1_EventScript_1A5742 + goto_if 2, LinkContestRoom1_EventScript_1A5742 compare 0x8004, 400 - jumpif 2, LinkContestRoom1_EventScript_1A573C + goto_if 2, LinkContestRoom1_EventScript_1A573C compare 0x8004, 360 - jumpif 2, LinkContestRoom1_EventScript_1A5736 + goto_if 2, LinkContestRoom1_EventScript_1A5736 compare 0x8004, 320 - jumpif 2, LinkContestRoom1_EventScript_1A5730 + goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return LinkContestRoom1_EventScript_1A56D2:: @ 81A56D2 compare 0x8004, 600 - jumpif 2, LinkContestRoom1_EventScript_1A575A + goto_if 2, LinkContestRoom1_EventScript_1A575A compare 0x8004, 550 - jumpif 2, LinkContestRoom1_EventScript_1A5754 + goto_if 2, LinkContestRoom1_EventScript_1A5754 compare 0x8004, 500 - jumpif 2, LinkContestRoom1_EventScript_1A574E + goto_if 2, LinkContestRoom1_EventScript_1A574E compare 0x8004, 450 - jumpif 2, LinkContestRoom1_EventScript_1A5748 + goto_if 2, LinkContestRoom1_EventScript_1A5748 compare 0x8004, 400 - jumpif 2, LinkContestRoom1_EventScript_1A5742 + goto_if 2, LinkContestRoom1_EventScript_1A5742 compare 0x8004, 300 - jumpif 2, LinkContestRoom1_EventScript_1A573C + goto_if 2, LinkContestRoom1_EventScript_1A573C compare 0x8004, 200 - jumpif 2, LinkContestRoom1_EventScript_1A5736 + goto_if 2, LinkContestRoom1_EventScript_1A5736 compare 0x8004, 100 - jumpif 2, LinkContestRoom1_EventScript_1A5730 + goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return @@ -619,7 +619,7 @@ LinkContestRoom1_EventScript_1A575A:: @ 81A575A LinkContestRoom1_EventScript_1A5760:: @ 81A5760 compare 0x4001, 1 - jumpeq LinkContestRoom1_EventScript_1A5783 + goto_if_eq LinkContestRoom1_EventScript_1A5783 move 6, LinkContestRoom1_Movement_1A5D8D playsfx 21 pause 14 @@ -632,7 +632,7 @@ LinkContestRoom1_EventScript_1A5783:: @ 81A5783 LinkContestRoom1_EventScript_1A5784:: @ 81A5784 compare 0x4002, 1 - jumpeq LinkContestRoom1_EventScript_1A57A7 + goto_if_eq LinkContestRoom1_EventScript_1A57A7 move 12, LinkContestRoom1_Movement_1A5D8D playsfx 21 pause 14 @@ -645,7 +645,7 @@ LinkContestRoom1_EventScript_1A57A7:: @ 81A57A7 LinkContestRoom1_EventScript_1A57A8:: @ 81A57A8 compare 0x4003, 1 - jumpeq LinkContestRoom1_EventScript_1A57CB + goto_if_eq LinkContestRoom1_EventScript_1A57CB move 7, LinkContestRoom1_Movement_1A5D8D playsfx 21 pause 14 @@ -658,7 +658,7 @@ LinkContestRoom1_EventScript_1A57CB:: @ 81A57CB LinkContestRoom1_EventScript_1A57CC:: @ 81A57CC compare 0x4004, 1 - jumpeq LinkContestRoom1_EventScript_1A57EF + goto_if_eq LinkContestRoom1_EventScript_1A57EF move 8, LinkContestRoom1_Movement_1A5D8D playsfx 21 pause 14 @@ -671,7 +671,7 @@ LinkContestRoom1_EventScript_1A57EF:: @ 81A57EF LinkContestRoom1_EventScript_1A57F0:: @ 81A57F0 compare 0x4005, 1 - jumpeq LinkContestRoom1_EventScript_1A5813 + goto_if_eq LinkContestRoom1_EventScript_1A5813 move 9, LinkContestRoom1_Movement_1A5D8D playsfx 21 pause 14 @@ -684,7 +684,7 @@ LinkContestRoom1_EventScript_1A5813:: @ 81A5813 LinkContestRoom1_EventScript_1A5814:: @ 81A5814 compare 0x4006, 1 - jumpeq LinkContestRoom1_EventScript_1A5837 + goto_if_eq LinkContestRoom1_EventScript_1A5837 move 10, LinkContestRoom1_Movement_1A5D8D playsfx 21 pause 14 @@ -697,7 +697,7 @@ LinkContestRoom1_EventScript_1A5837:: @ 81A5837 LinkContestRoom1_EventScript_1A5838:: @ 81A5838 compare 0x4007, 1 - jumpeq LinkContestRoom1_EventScript_1A585B + goto_if_eq LinkContestRoom1_EventScript_1A585B move 11, LinkContestRoom1_Movement_1A5D8D playsfx 21 pause 14 @@ -710,7 +710,7 @@ LinkContestRoom1_EventScript_1A585B:: @ 81A585B LinkContestRoom1_EventScript_1A585C:: @ 81A585C compare 0x4008, 1 - jumpeq LinkContestRoom1_EventScript_1A587F + goto_if_eq LinkContestRoom1_EventScript_1A587F move 15, LinkContestRoom1_Movement_1A5D8D playsfx 21 pause 14 @@ -783,7 +783,7 @@ LinkContestRoom1_EventScript_1A58EE:: @ 81A58EE LinkContestRoom1_EventScript_1A5930:: @ 81A5930 compare 0x4088, 5 - jumpeq LinkContestRoom1_EventScript_1A5944 + goto_if_eq LinkContestRoom1_EventScript_1A5944 msgbox LinkContestRoom1_Text_1A6AF5, 3 return @@ -810,7 +810,7 @@ LinkContestRoom1_EventScript_1A594A:: @ 81A594A LinkContestRoom1_EventScript_1A5984:: @ 81A5984 compare 0x4088, 5 - jumpeq LinkContestRoom1_EventScript_1A5998 + goto_if_eq LinkContestRoom1_EventScript_1A5998 msgbox LinkContestRoom1_Text_1A6C06, 4 return @@ -822,7 +822,7 @@ LinkContestRoom1_EventScript_1A5998:: @ 81A5998 LinkContestRoom1_EventScript_1A59A2:: @ 81A59A2 compare 0x4088, 5 - jumpeq LinkContestRoom1_EventScript_1A59B6 + goto_if_eq LinkContestRoom1_EventScript_1A59B6 msgbox LinkContestRoom1_Text_1A6C21, 4 return @@ -834,7 +834,7 @@ LinkContestRoom1_EventScript_1A59B6:: @ 81A59B6 LinkContestRoom1_EventScript_1A59C0:: @ 81A59C0 compare 0x4088, 5 - jumpeq LinkContestRoom1_EventScript_1A59D4 + goto_if_eq LinkContestRoom1_EventScript_1A59D4 msgbox LinkContestRoom1_Text_1A6C9D, 4 return @@ -846,7 +846,7 @@ LinkContestRoom1_EventScript_1A59D4:: @ 81A59D4 LinkContestRoom1_EventScript_1A59DE:: @ 81A59DE compare 0x4088, 5 - jumpeq LinkContestRoom1_EventScript_1A59F2 + goto_if_eq LinkContestRoom1_EventScript_1A59F2 msgbox LinkContestRoom1_Text_1A6D16, 4 return @@ -896,7 +896,7 @@ LinkContestRoom1_EventScript_1A5A49:: @ 81A5A49 LinkContestRoom1_EventScript_1A5A75:: @ 81A5A75 compare 0x4088, 5 - jumpeq LinkContestRoom1_EventScript_1A5A89 + goto_if_eq LinkContestRoom1_EventScript_1A5A89 msgbox LinkContestRoom1_Text_1A6D3C, 4 return @@ -909,7 +909,7 @@ LinkContestRoom1_EventScript_1A5A90:: @ 81A5A90 addvar 0x4001, 1 lockall compare 0x4088, 1 - callif 2, LinkContestRoom1_EventScript_1A5AE4 + call_if 2, LinkContestRoom1_EventScript_1A5AE4 move 9, LinkContestRoom1_Movement_1A5DB7 move 12, LinkContestRoom1_Movement_1A5DBB move 7, LinkContestRoom1_Movement_1A5DB7 @@ -919,7 +919,7 @@ LinkContestRoom1_EventScript_1A5A90:: @ 81A5A90 move 6, LinkContestRoom1_Movement_1A5DB3 move 8, LinkContestRoom1_Movement_1A5DAF compare 0x4001, 4 - jumpif 5, LinkContestRoom1_EventScript_1A5A90 + goto_if 5, LinkContestRoom1_EventScript_1A5A90 pause 30 return @@ -994,10 +994,10 @@ LinkContestRoom1_EventScript_1A5AE4:: @ 81A5AE4 LinkContestRoom1_EventScript_1A5BAB:: @ 81A5BAB compare 0x4088, 5 - jumpeq LinkContestRoom1_EventScript_1A5C4C + goto_if_eq LinkContestRoom1_EventScript_1A5C4C call LinkContestRoom1_EventScript_1A5C12 checkflag 2 - jumpeq LinkContestRoom1_EventScript_1A5BF6 + goto_if_eq LinkContestRoom1_EventScript_1A5BF6 msgbox LinkContestRoom1_Text_1A6DC5, 3 waittext call LinkContestRoom1_EventScript_1A5C7F @@ -1008,7 +1008,7 @@ LinkContestRoom1_EventScript_1A5BAB:: @ 81A5BAB pause 30 special sub_80C4CF8 compare 0x8004, 1 - jumpeq LinkContestRoom1_EventScript_1A5C46 + goto_if_eq LinkContestRoom1_EventScript_1A5C46 return LinkContestRoom1_EventScript_1A5BF6:: @ 81A5BF6 @@ -1017,24 +1017,24 @@ LinkContestRoom1_EventScript_1A5BF6:: @ 81A5BF6 pause 90 special sub_80C4CF8 compare 0x8004, 1 - jumpeq LinkContestRoom1_EventScript_1A5C46 + goto_if_eq LinkContestRoom1_EventScript_1A5C46 return LinkContestRoom1_EventScript_1A5C12:: @ 81A5C12 specialval RESULT, sub_80C4440 compare RESULT, 1 - jumpeq LinkContestRoom1_EventScript_1A5C23 + goto_if_eq LinkContestRoom1_EventScript_1A5C23 return LinkContestRoom1_EventScript_1A5C23:: @ 81A5C23 special sub_80C47C0 compare 0x8005, 3 - jumpeq LinkContestRoom1_EventScript_1A5C32 + goto_if_eq LinkContestRoom1_EventScript_1A5C32 return LinkContestRoom1_EventScript_1A5C32:: @ 81A5C32 compare CONTEST_RANK, 3 - jumpeq LinkContestRoom1_EventScript_1A5C41 + goto_if_eq LinkContestRoom1_EventScript_1A5C41 setflag 2 return @@ -1054,7 +1054,7 @@ LinkContestRoom1_EventScript_1A5C4C:: @ 81A5C4C call LinkContestRoom1_EventScript_1A5C6A special sub_80C4CF8 compare 0x8004, 1 - jumpeq LinkContestRoom1_EventScript_1A5C64 + goto_if_eq LinkContestRoom1_EventScript_1A5C64 closebutton return @@ -1066,7 +1066,7 @@ LinkContestRoom1_EventScript_1A5C6A:: @ 81A5C6A special sub_80C496C special sub_80C47C0 comparevars 0x8004, 0x8005 - jumpeq LinkContestRoom1_EventScript_1A5C7C + goto_if_eq LinkContestRoom1_EventScript_1A5C7C return LinkContestRoom1_EventScript_1A5C7C:: @ 81A5C7C @@ -1112,19 +1112,19 @@ LinkContestRoom1_EventScript_1A5CD8:: @ 81A5CD8 LinkContestRoom1_EventScript_1A5CE5:: @ 81A5CE5 special sub_80C47C0 compare 0x8005, 3 - jumpeq LinkContestRoom1_EventScript_1A5CFC + goto_if_eq LinkContestRoom1_EventScript_1A5CFC msgbox LinkContestRoom1_Text_1A6DF1, 3 return LinkContestRoom1_EventScript_1A5CFC:: @ 81A5CFC compare 0x4088, 2 - callif 1, LinkContestRoom1_EventScript_1A5C42 + call_if 1, LinkContestRoom1_EventScript_1A5C42 inccounter GAME_STAT_WON_CONTEST specialval RESULT, sub_80C4440 compare RESULT, 0 - jumpeq LinkContestRoom1_EventScript_1A5D5B + goto_if_eq LinkContestRoom1_EventScript_1A5D5B compare CONTEST_RANK, 3 - jumpeq LinkContestRoom1_EventScript_1A5D3B + goto_if_eq LinkContestRoom1_EventScript_1A5D3B msgbox LinkContestRoom1_Text_1A6DF1, 3 return @@ -1136,7 +1136,7 @@ LinkContestRoom1_EventScript_1A5D2D:: @ 81A5D2D LinkContestRoom1_EventScript_1A5D3B:: @ 81A5D3B giveitem ITEM_LUXURY_BALL compare RESULT, 0 - jumpeq LinkContestRoom1_EventScript_1A5D2D + goto_if_eq LinkContestRoom1_EventScript_1A5D2D msgbox LinkContestRoom1_Text_1A6DF1, 3 return diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc index d0e35203e..4c57e0b9f 100644 --- a/data/scripts/day_care.inc +++ b/data/scripts/day_care.inc @@ -4,11 +4,11 @@ Route117_EventScript_1B222D:: @ 81B222D special sp0B5_daycare specialval RESULT, sp0B6_daycare compare RESULT, 1 - jumpeq Route117_EventScript_1B2262 + goto_if_eq Route117_EventScript_1B2262 compare RESULT, 2 - jumpeq Route117_EventScript_1B22E7 + goto_if_eq Route117_EventScript_1B22E7 compare RESULT, 3 - jumpeq Route117_EventScript_1B22FE + goto_if_eq Route117_EventScript_1B22FE msgbox Route117_Text_1B25CB, 4 release end @@ -16,10 +16,10 @@ Route117_EventScript_1B222D:: @ 81B222D Route117_EventScript_1B2262:: @ 81B2262 msgbox Route117_Text_1B2659, 5 compare RESULT, 1 - jumpeq Route117_EventScript_1B2298 + goto_if_eq Route117_EventScript_1B2298 msgbox Route117_Text_1B28C4, 5 compare RESULT, 1 - jumpeq Route117_EventScript_1B2298 + goto_if_eq Route117_EventScript_1B2298 msgbox Route117_Text_1B2745, 4 clearflag 134 special sub_8041E7C @@ -29,7 +29,7 @@ Route117_EventScript_1B2262:: @ 81B2262 Route117_EventScript_1B2298:: @ 81B2298 specialval RESULT, CalculatePlayerPartyCount compare RESULT, 6 - jumpif 5, Route117_EventScript_1B22B2 + goto_if 5, Route117_EventScript_1B22B2 msgbox Route117_Text_1B2766, 4 release end @@ -49,7 +49,7 @@ Route117_EventScript_1B22B2:: @ 81B22B2 Route117_EventScript_1B22CD:: @ 81B22CD specialval RESULT, sub_8042B4C compare RESULT, 1 - callif 1, Route117_EventScript_1B22DE + call_if 1, Route117_EventScript_1B22DE return Route117_EventScript_1B22DE:: @ 81B22DE @@ -83,14 +83,14 @@ Route117_PokemonDayCare_EventScript_1B2327:: @ 81B2327 faceplayer specialval RESULT, sp0B6_daycare compare RESULT, 1 - jumpeq Route117_PokemonDayCare_EventScript_1B2407 + goto_if_eq Route117_PokemonDayCare_EventScript_1B2407 compare RESULT, 2 - jumpeq Route117_PokemonDayCare_EventScript_1B242B + goto_if_eq Route117_PokemonDayCare_EventScript_1B242B compare RESULT, 3 - jumpeq Route117_PokemonDayCare_EventScript_1B2558 + goto_if_eq Route117_PokemonDayCare_EventScript_1B2558 msgbox Route117_PokemonDayCare_Text_1B28F2, 5 compare RESULT, 1 - jumpeq Route117_PokemonDayCare_EventScript_1B236C + goto_if_eq Route117_PokemonDayCare_EventScript_1B236C msgbox Route117_PokemonDayCare_Text_1B2A14, 4 release end @@ -98,16 +98,16 @@ Route117_PokemonDayCare_EventScript_1B2327:: @ 81B2327 Route117_PokemonDayCare_EventScript_1B236C:: @ 81B236C specialval RESULT, sub_8095B6C compare RESULT, 1 - jumpeq Route117_PokemonDayCare_EventScript_1B23F3 + goto_if_eq Route117_PokemonDayCare_EventScript_1B23F3 msgbox Route117_PokemonDayCare_Text_1B2947, 4 fadescreen 1 special ChooseSendDaycareMon waitstate compare 0x8004, 255 - jumpeq Route117_PokemonDayCare_EventScript_1B23D0 + goto_if_eq Route117_PokemonDayCare_EventScript_1B23D0 specialval RESULT, sub_8095C10 compare RESULT, 0 - jumpeq Route117_PokemonDayCare_EventScript_1B23FD + goto_if_eq Route117_PokemonDayCare_EventScript_1B23FD specialval 0x8005, sub_8042328 checksound pokecry 0x8005, 0 @@ -117,7 +117,7 @@ Route117_PokemonDayCare_EventScript_1B236C:: @ 81B236C inccounter GAME_STAT_USED_DAYCARE specialval RESULT, sp0B6_daycare compare RESULT, 2 - jumpeq Route117_PokemonDayCare_EventScript_1B23DA + goto_if_eq Route117_PokemonDayCare_EventScript_1B23DA release end @@ -129,7 +129,7 @@ Route117_PokemonDayCare_EventScript_1B23D0:: @ 81B23D0 Route117_PokemonDayCare_EventScript_1B23DA:: @ 81B23DA msgbox Route117_PokemonDayCare_Text_1B29AD, 5 compare RESULT, 1 - jumpeq Route117_PokemonDayCare_EventScript_1B236C + goto_if_eq Route117_PokemonDayCare_EventScript_1B236C goto Route117_PokemonDayCare_EventScript_1B23D0 end @@ -155,7 +155,7 @@ Route117_PokemonDayCare_EventScript_1B2411:: @ 81B2411 Route117_PokemonDayCare_EventScript_1B241A:: @ 81B241A specialval RESULT, sub_80417B8 compare RESULT, 0 - callif 5, Route117_PokemonDayCare_EventScript_1B2411 + call_if 5, Route117_PokemonDayCare_EventScript_1B2411 return Route117_PokemonDayCare_EventScript_1B242B:: @ 81B242B @@ -164,26 +164,26 @@ Route117_PokemonDayCare_EventScript_1B242B:: @ 81B242B call Route117_PokemonDayCare_EventScript_1B241A msgbox Route117_PokemonDayCare_Text_1B29AD, 5 compare RESULT, 1 - jumpeq Route117_PokemonDayCare_EventScript_1B236C + goto_if_eq Route117_PokemonDayCare_EventScript_1B236C msgbox Route117_PokemonDayCare_Text_1B2BF6, 5 compare RESULT, 1 - jumpeq Route117_PokemonDayCare_EventScript_1B2469 + goto_if_eq Route117_PokemonDayCare_EventScript_1B2469 goto Route117_PokemonDayCare_EventScript_1B23D0 end Route117_PokemonDayCare_EventScript_1B2469:: @ 81B2469 specialval RESULT, CalculatePlayerPartyCount compare RESULT, 6 - jumpeq Route117_PokemonDayCare_EventScript_1B2539 + goto_if_eq Route117_PokemonDayCare_EventScript_1B2539 specialval RESULT, sp0B6_daycare setvar 0x8004, 0 compare RESULT, 2 - jumpeq Route117_PokemonDayCare_EventScript_1B24A8 + goto_if_eq Route117_PokemonDayCare_EventScript_1B24A8 special ShowDaycareLevelMenu waitstate copyvar 0x8004, RESULT compare RESULT, 2 - jumpeq Route117_PokemonDayCare_EventScript_1B23D0 + goto_if_eq Route117_PokemonDayCare_EventScript_1B23D0 goto Route117_PokemonDayCare_EventScript_1B24A8 end @@ -191,14 +191,14 @@ Route117_PokemonDayCare_EventScript_1B24A8:: @ 81B24A8 special sub_8041770 msgbox Route117_PokemonDayCare_Text_1B2B49, 5 compare RESULT, 1 - jumpeq Route117_PokemonDayCare_EventScript_1B24C4 + goto_if_eq Route117_PokemonDayCare_EventScript_1B24C4 goto Route117_PokemonDayCare_EventScript_1B23D0 end Route117_PokemonDayCare_EventScript_1B24C4:: @ 81B24C4 specialval RESULT, sub_80B7CE8 compare RESULT, 1 - jumpeq Route117_PokemonDayCare_EventScript_1B24DE + goto_if_eq Route117_PokemonDayCare_EventScript_1B24DE msgbox Route117_PokemonDayCare_Text_1B2A30, 4 release end @@ -216,14 +216,14 @@ Route117_PokemonDayCare_EventScript_1B24DE:: @ 81B24DE waitpokecry specialval RESULT, sp0B6_daycare compare RESULT, 2 - jumpeq Route117_PokemonDayCare_EventScript_1B2520 + goto_if_eq Route117_PokemonDayCare_EventScript_1B2520 goto Route117_PokemonDayCare_EventScript_1B23D0 end Route117_PokemonDayCare_EventScript_1B2520:: @ 81B2520 msgbox Route117_PokemonDayCare_Text_1B2A4F, 5 compare RESULT, 1 - jumpeq Route117_PokemonDayCare_EventScript_1B2469 + goto_if_eq Route117_PokemonDayCare_EventScript_1B2469 goto Route117_PokemonDayCare_EventScript_1B23D0 end @@ -265,7 +265,7 @@ Route117_PokemonDayCare_EventScript_1B2558:: @ 81B2558 call Route117_PokemonDayCare_EventScript_1B241A msgbox Route117_PokemonDayCare_Text_1B2BF6, 5 compare RESULT, 1 - jumpeq Route117_PokemonDayCare_EventScript_1B2469 + goto_if_eq Route117_PokemonDayCare_EventScript_1B2469 msgbox Route117_PokemonDayCare_Text_1B2A76, 4 release end @@ -274,7 +274,7 @@ Route117_PokemonDayCare_EventScript_1B2558:: @ 81B2558 special ShowDaycareLevelMenu waitstate compare RESULT, 2 - jumpeq Route117_PokemonDayCare_EventScript_1B23D0 + goto_if_eq Route117_PokemonDayCare_EventScript_1B23D0 copyvar 0x8004, RESULT specialval RESULT, sub_8041648 msgbox Route117_PokemonDayCare_Text_1B2B75, 4 diff --git a/data/scripts/gabby_and_ty.inc b/data/scripts/gabby_and_ty.inc index c88733bea..2625ff573 100644 --- a/data/scripts/gabby_and_ty.inc +++ b/data/scripts/gabby_and_ty.inc @@ -203,13 +203,13 @@ Route111_EventScript_1AE5A2:: @ 81AE5A2 special GabbyAndTyBeforeInterview special GabbyAndTySetScriptVarsToFieldObjectLocalIds compare FACING, 2 - callif 1, Route111_EventScript_1AE5E0 + call_if 1, Route111_EventScript_1AE5E0 compare FACING, 1 - callif 1, Route111_EventScript_1AE5EB + call_if 1, Route111_EventScript_1AE5EB compare FACING, 4 - callif 1, Route111_EventScript_1AE5FD + call_if 1, Route111_EventScript_1AE5FD checkflag 1 - jumpeq Route111_EventScript_1AE73A + goto_if_eq Route111_EventScript_1AE73A msgbox Route111_Text_1AC015, 5 goto Route111_EventScript_1AE6F3 end @@ -237,16 +237,16 @@ Route120_EventScript_1AE60F:: @ 81AE60F special GabbyAndTyBeforeInterview special GabbyAndTySetScriptVarsToFieldObjectLocalIds compare FACING, 2 - callif 1, Route111_EventScript_1AE5E0 + call_if 1, Route111_EventScript_1AE5E0 compare FACING, 1 - callif 1, Route111_EventScript_1AE5EB + call_if 1, Route111_EventScript_1AE5EB compare FACING, 4 - callif 1, Route111_EventScript_1AE5FD + call_if 1, Route111_EventScript_1AE5FD checkflag 1 - jumpeq Route111_EventScript_1AE73A + goto_if_eq Route111_EventScript_1AE73A specialval RESULT, GabbyAndTyGetLastQuote compare RESULT, 0 - jumpeq Route111_EventScript_1AE69F + goto_if_eq Route111_EventScript_1AE69F msgbox Route111_Text_1AC10A, 4 specialval RESULT, sub_80BDD18 switch RESULT @@ -301,14 +301,14 @@ Route111_EventScript_1AE6E5:: @ 81AE6E5 Route111_EventScript_1AE6F3:: @ 81AE6F3 compare RESULT, 0 - jumpeq Route111_EventScript_1AE72D + goto_if_eq Route111_EventScript_1AE72D msgbox Route111_Text_1AC40F, 4 setvar 0x8004, 10 call Route111_EventScript_1A00F3 lock faceplayer compare RESULT, 0 - jumpeq Route111_EventScript_1AE72D + goto_if_eq Route111_EventScript_1AE72D msgbox Route111_Text_1AC487, 4 special sub_80BDC14 setflag 1 diff --git a/data/scripts/magma_chimney.inc b/data/scripts/magma_chimney.inc index a2f4f67b7..18bd1d53b 100644 --- a/data/scripts/magma_chimney.inc +++ b/data/scripts/magma_chimney.inc @@ -2,9 +2,9 @@ MtChimney_EventScript_1B2C95:: @ 81B2C95 lock faceplayer checkflag 219 - callif 0, MtChimney_EventScript_1B2CB9 + call_if 0, MtChimney_EventScript_1B2CB9 checkflag 219 - callif 1, MtChimney_EventScript_1B2CC2 + call_if 1, MtChimney_EventScript_1B2CC2 closebutton move 1, MtChimney_Movement_1A083D waitmove 0 @@ -68,9 +68,9 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB movespriteperm 1, 10, 12 reappear 1 compare FACING, 4 - callif 1, MtChimney_EventScript_1B2D7D + call_if 1, MtChimney_EventScript_1B2D7D compare FACING, 2 - callif 1, MtChimney_EventScript_1B2D88 + call_if 1, MtChimney_EventScript_1B2D88 move 255, MtChimney_Movement_1A083F waitmove 0 .ifdef SAPPHIRE @@ -80,9 +80,9 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB .endif closebutton compare FACING, 4 - callif 1, MtChimney_EventScript_1B2D93 + call_if 1, MtChimney_EventScript_1B2D93 compare FACING, 2 - callif 1, MtChimney_EventScript_1B2D9E + call_if 1, MtChimney_EventScript_1B2D9E disappear 1 setflag 927 setflag 139 diff --git a/data/scripts/maps/AbandonedShip_CaptainsOffice.inc b/data/scripts/maps/AbandonedShip_CaptainsOffice.inc index cf525003e..eb912028a 100644 --- a/data/scripts/maps/AbandonedShip_CaptainsOffice.inc +++ b/data/scripts/maps/AbandonedShip_CaptainsOffice.inc @@ -5,12 +5,12 @@ AbandonedShip_CaptainsOffice_EventScript_15EAF5:: @ 815EAF5 lock faceplayer checkflag 294 - jumpeq AbandonedShip_CaptainsOffice_EventScript_15EB2D + goto_if_eq AbandonedShip_CaptainsOffice_EventScript_15EB2D checkitem ITEM_SCANNER, 1 compare RESULT, 1 - jumpeq AbandonedShip_CaptainsOffice_EventScript_15EB23 + goto_if_eq AbandonedShip_CaptainsOffice_EventScript_15EB23 checkflag 1078 - jumpeq AbandonedShip_CaptainsOffice_EventScript_15EB2D + goto_if_eq AbandonedShip_CaptainsOffice_EventScript_15EB2D msgbox AbandonedShip_CaptainsOffice_Text_198C85, 4 release end diff --git a/data/scripts/maps/AbandonedShip_Corridors_B1F.inc b/data/scripts/maps/AbandonedShip_Corridors_B1F.inc index b0ae966ad..212d80416 100644 --- a/data/scripts/maps/AbandonedShip_Corridors_B1F.inc +++ b/data/scripts/maps/AbandonedShip_Corridors_B1F.inc @@ -9,9 +9,9 @@ AbandonedShip_Corridors_B1F_MapScript1_15E99A:: @ 815E99A AbandonedShip_Corridors_B1F_MapScript1_15E9A3:: @ 815E9A3 checkflag 239 - callif 0, AbandonedShip_Corridors_B1F_EventScript_15E9B6 + call_if 0, AbandonedShip_Corridors_B1F_EventScript_15E9B6 checkflag 239 - callif 1, AbandonedShip_Corridors_B1F_EventScript_15E9C0 + call_if 1, AbandonedShip_Corridors_B1F_EventScript_15E9C0 end AbandonedShip_Corridors_B1F_EventScript_15E9B6:: @ 815E9B6 @@ -29,10 +29,10 @@ AbandonedShip_Corridors_B1F_EventScript_15E9CA:: @ 815E9CA AbandonedShip_Corridors_B1F_EventScript_15E9D3:: @ 815E9D3 lockall checkflag 239 - jumpeq AbandonedShip_Corridors_B1F_EventScript_15EA14 + goto_if_eq AbandonedShip_Corridors_B1F_EventScript_15EA14 checkitem ITEM_STORAGE_KEY, 1 compare RESULT, 0 - jumpeq AbandonedShip_Corridors_B1F_EventScript_15EA0A + goto_if_eq AbandonedShip_Corridors_B1F_EventScript_15EA0A msgbox AbandonedShip_Corridors_B1F_Text_198692, 4 playsfx 21 removeitem ITEM_STORAGE_KEY, 1 diff --git a/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc b/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc index 8cb2aed22..9f0b5ca85 100644 --- a/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc +++ b/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc @@ -9,21 +9,21 @@ AbandonedShip_HiddenFloorCorridors_MapScript1_15EB51:: @ 815EB51 AbandonedShip_HiddenFloorCorridors_MapScript1_15EB5A:: @ 815EB5A checkflag 240 - callif 0, AbandonedShip_HiddenFloorCorridors_EventScript_15EBCB + call_if 0, AbandonedShip_HiddenFloorCorridors_EventScript_15EBCB checkflag 241 - callif 0, AbandonedShip_HiddenFloorCorridors_EventScript_15EBD5 + call_if 0, AbandonedShip_HiddenFloorCorridors_EventScript_15EBD5 checkflag 242 - callif 0, AbandonedShip_HiddenFloorCorridors_EventScript_15EBDF + call_if 0, AbandonedShip_HiddenFloorCorridors_EventScript_15EBDF checkflag 243 - callif 0, AbandonedShip_HiddenFloorCorridors_EventScript_15EBE9 + call_if 0, AbandonedShip_HiddenFloorCorridors_EventScript_15EBE9 checkflag 240 - callif 1, AbandonedShip_HiddenFloorCorridors_EventScript_15EBA3 + call_if 1, AbandonedShip_HiddenFloorCorridors_EventScript_15EBA3 checkflag 241 - callif 1, AbandonedShip_HiddenFloorCorridors_EventScript_15EBAD + call_if 1, AbandonedShip_HiddenFloorCorridors_EventScript_15EBAD checkflag 242 - callif 1, AbandonedShip_HiddenFloorCorridors_EventScript_15EBB7 + call_if 1, AbandonedShip_HiddenFloorCorridors_EventScript_15EBB7 checkflag 243 - callif 1, AbandonedShip_HiddenFloorCorridors_EventScript_15EBC1 + call_if 1, AbandonedShip_HiddenFloorCorridors_EventScript_15EBC1 end AbandonedShip_HiddenFloorCorridors_EventScript_15EBA3:: @ 815EBA3 @@ -61,10 +61,10 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EBE9:: @ 815EBE9 AbandonedShip_HiddenFloorCorridors_EventScript_15EBF3:: @ 815EBF3 lockall checkflag 240 - jumpeq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 + goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 checkitem ITEM_ROOM_1_KEY, 1 compare RESULT, 0 - jumpeq AbandonedShip_HiddenFloorCorridors_EventScript_15ECCF + goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECCF msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 playsfx 21 removeitem ITEM_ROOM_1_KEY, 1 @@ -77,10 +77,10 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EBF3:: @ 815EBF3 AbandonedShip_HiddenFloorCorridors_EventScript_15EC2A:: @ 815EC2A lockall checkflag 241 - jumpeq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 + goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 checkitem ITEM_ROOM_2_KEY, 1 compare RESULT, 0 - jumpeq AbandonedShip_HiddenFloorCorridors_EventScript_15ECD9 + goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECD9 msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 playsfx 21 removeitem ITEM_ROOM_2_KEY, 1 @@ -93,10 +93,10 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EC2A:: @ 815EC2A AbandonedShip_HiddenFloorCorridors_EventScript_15EC61:: @ 815EC61 lockall checkflag 242 - jumpeq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 + goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 checkitem ITEM_ROOM_4_KEY, 1 compare RESULT, 0 - jumpeq AbandonedShip_HiddenFloorCorridors_EventScript_15ECE3 + goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECE3 msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 playsfx 21 removeitem ITEM_ROOM_4_KEY, 1 @@ -109,10 +109,10 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EC61:: @ 815EC61 AbandonedShip_HiddenFloorCorridors_EventScript_15EC98:: @ 815EC98 lockall checkflag 243 - jumpeq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 + goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 checkitem ITEM_ROOM_6_KEY, 1 compare RESULT, 0 - jumpeq AbandonedShip_HiddenFloorCorridors_EventScript_15ECED + goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECED msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 playsfx 21 removeitem ITEM_ROOM_6_KEY, 1 diff --git a/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc b/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc index 5c4c050a0..d8ed3fe07 100644 --- a/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc +++ b/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc @@ -11,11 +11,11 @@ AbandonedShip_HiddenFloorRooms_EventScript_15ED11:: @ 815ED11 getplayerxy 0x4002, 0x4003 setvar 0x4004, 1 compare 0x4002, 21 - callif 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED89 + call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED89 compare 0x4002, 36 - callif 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED8F + call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED8F compare 0x4003, 2 - callif 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED95 + call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED95 switch 0x4004 case 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED9B case 2, AbandonedShip_HiddenFloorRooms_EventScript_15EDC4 @@ -45,7 +45,7 @@ AbandonedShip_HiddenFloorRooms_EventScript_15ED9B:: @ 815ED9B doanimation 54 specialval RESULT, sub_810F4D4 compare RESULT, 0 - callif 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE8B + call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE8B checkanimation 54 pause 10 end @@ -56,10 +56,10 @@ AbandonedShip_HiddenFloorRooms_EventScript_15EDC4:: @ 815EDC4 AbandonedShip_HiddenFloorRooms_EventScript_15EDC5:: @ 815EDC5 specialval RESULT, sub_810F488 compare RESULT, 1 - jumpeq AbandonedShip_HiddenFloorRooms_EventScript_15EDEA + goto_if_eq AbandonedShip_HiddenFloorRooms_EventScript_15EDEA pause 20 compare RESULT, 0 - callif 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE6B + call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE6B checkanimation 54 pause 10 end @@ -79,7 +79,7 @@ AbandonedShip_HiddenFloorRooms_EventScript_15EDEB:: @ 815EDEB doanimation 54 specialval RESULT, sub_810F4FC compare RESULT, 0 - callif 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE9B + call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE9B checkanimation 54 pause 10 end @@ -100,7 +100,7 @@ AbandonedShip_HiddenFloorRooms_EventScript_15EE23:: @ 815EE23 doanimation 54 specialval RESULT, sub_810F4B0 compare RESULT, 0 - callif 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE7B + call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE7B checkanimation 54 pause 10 end diff --git a/data/scripts/maps/AbandonedShip_Rooms2_1F.inc b/data/scripts/maps/AbandonedShip_Rooms2_1F.inc index a6ccdc43c..b7fe34b81 100644 --- a/data/scripts/maps/AbandonedShip_Rooms2_1F.inc +++ b/data/scripts/maps/AbandonedShip_Rooms2_1F.inc @@ -5,7 +5,7 @@ AbandonedShip_Rooms2_1F_EventScript_15EA68:: @ 815EA68 trainerbattle 4, OPPONENT_LOIS_AND_HAL_1, 0, AbandonedShip_Rooms2_1F_Text_1987C1, AbandonedShip_Rooms2_1F_Text_1987FE, AbandonedShip_Rooms2_1F_Text_19887F specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq AbandonedShip_Rooms2_1F_EventScript_15EA93 + goto_if_eq AbandonedShip_Rooms2_1F_EventScript_15EA93 msgbox AbandonedShip_Rooms2_1F_Text_198835, 6 end @@ -18,7 +18,7 @@ AbandonedShip_Rooms2_1F_EventScript_15EAAE:: @ 815EAAE trainerbattle 4, OPPONENT_LOIS_AND_HAL_1, 0, AbandonedShip_Rooms2_1F_Text_1988CC, AbandonedShip_Rooms2_1F_Text_198916, AbandonedShip_Rooms2_1F_Text_19899A specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq AbandonedShip_Rooms2_1F_EventScript_15EAD9 + goto_if_eq AbandonedShip_Rooms2_1F_EventScript_15EAD9 msgbox AbandonedShip_Rooms2_1F_Text_198934, 6 end diff --git a/data/scripts/maps/AncientTomb.inc b/data/scripts/maps/AncientTomb.inc index bfc5b6a79..deed30c5b 100644 --- a/data/scripts/maps/AncientTomb.inc +++ b/data/scripts/maps/AncientTomb.inc @@ -6,7 +6,7 @@ AncientTomb_MapScripts:: @ 815EFBE AncientTomb_MapScript1_15EFCE:: @ 815EFCE checkflag 2145 - callif 1, AncientTomb_EventScript_15EFD8 + call_if 1, AncientTomb_EventScript_15EFD8 end AncientTomb_EventScript_15EFD8:: @ 815EFD8 @@ -19,7 +19,7 @@ AncientTomb_MapScript1_15EFDC:: @ 815EFDC AncientTomb_MapScript1_15EFE0:: @ 815EFE0 checkflag 2130 - callif 0, AncientTomb_EventScript_15EFEA + call_if 0, AncientTomb_EventScript_15EFEA end AncientTomb_EventScript_15EFEA:: @ 815EFEA @@ -34,7 +34,7 @@ AncientTomb_EventScript_15EFEA:: @ 815EFEA AncientTomb_EventScript_15F021:: @ 815F021 lockall checkflag 2130 - jumpeq AncientTomb_EventScript_15F038 + goto_if_eq AncientTomb_EventScript_15F038 braillemsg AncientTomb_Braille_1C552E waitbutton hidebox 0, 0, 29, 19 diff --git a/data/scripts/maps/AquaHideout_1F.inc b/data/scripts/maps/AquaHideout_1F.inc index cc1ad33b1..2eb2ae7e9 100644 --- a/data/scripts/maps/AquaHideout_1F.inc +++ b/data/scripts/maps/AquaHideout_1F.inc @@ -11,7 +11,7 @@ MagmaHideout_1F_EventScript_15D7CE:: @ 815D7CE lock faceplayer checkflag 111 - jumpeq AquaHideout_1F_EventScript_15D7E3 + goto_if_eq AquaHideout_1F_EventScript_15D7E3 msgbox AquaHideout_1F_Text_196AFD, 4 release end @@ -26,7 +26,7 @@ MagmaHideout_1F_EventScript_15D7ED:: @ 815D7ED lock faceplayer checkflag 111 - jumpeq AquaHideout_1F_EventScript_15D802 + goto_if_eq AquaHideout_1F_EventScript_15D802 msgbox AquaHideout_1F_Text_196C83, 4 release end diff --git a/data/scripts/maps/AquaHideout_B1F.inc b/data/scripts/maps/AquaHideout_B1F.inc index 969d590e3..cad8e7481 100644 --- a/data/scripts/maps/AquaHideout_B1F.inc +++ b/data/scripts/maps/AquaHideout_B1F.inc @@ -5,7 +5,7 @@ AquaHideout_B1F_MapScripts:: @ 815D831 AquaHideout_B1F_MapScript1_15D83C:: @ 815D83C checkflag 2145 - callif 1, AquaHideout_B1F_EventScript_15D846 + call_if 1, AquaHideout_B1F_EventScript_15D846 end AquaHideout_B1F_EventScript_15D846:: @ 815D846 diff --git a/data/scripts/maps/BattleTower_Corridor.inc b/data/scripts/maps/BattleTower_Corridor.inc index f4f50d90b..cfb4ba855 100644 --- a/data/scripts/maps/BattleTower_Corridor.inc +++ b/data/scripts/maps/BattleTower_Corridor.inc @@ -5,7 +5,7 @@ BattleTower_Corridor_MapScripts:: @ 8160845 BattleTower_Corridor_MapScript1_160850:: @ 8160850 compare 0x8006, 1 - jumpeq BattleTower_Corridor_EventScript_16086E + goto_if_eq BattleTower_Corridor_EventScript_16086E setmaptile 12, 0, 519, 0 setmaptile 12, 1, 527, 0 end @@ -22,7 +22,7 @@ BattleTower_Corridor_MapScript2_160881:: @ 8160881 BattleTower_Corridor_EventScript_16088B:: @ 816088B setvar 0x4000, 1 compare 0x8006, 1 - jumpeq BattleTower_Corridor_EventScript_1608B1 + goto_if_eq BattleTower_Corridor_EventScript_1608B1 move 1, BattleTower_Corridor_Movement_1608D5 move 255, BattleTower_Corridor_Movement_1608D4 waitmove 0 diff --git a/data/scripts/maps/BattleTower_Lobby.inc b/data/scripts/maps/BattleTower_Lobby.inc index 50c9c9152..fc5cee29a 100644 --- a/data/scripts/maps/BattleTower_Lobby.inc +++ b/data/scripts/maps/BattleTower_Lobby.inc @@ -14,12 +14,12 @@ BattleTower_Lobby_EventScript_16029C:: @ 816029C setvar 0x8004, 10 special sub_8135668 checkflag 238 - jumpeq BattleTower_Lobby_EventScript_1602E4 + goto_if_eq BattleTower_Lobby_EventScript_1602E4 checkflag 237 - jumpeq BattleTower_Lobby_EventScript_1602CD + goto_if_eq BattleTower_Lobby_EventScript_1602CD specialval 0x8007, sub_810F404 compare 0x8007, 50 - jumpif 0, BattleTower_Lobby_EventScript_1602E4 + goto_if 0, BattleTower_Lobby_EventScript_1602E4 clearflag 941 special sub_810F8FC return @@ -27,7 +27,7 @@ BattleTower_Lobby_EventScript_16029C:: @ 816029C BattleTower_Lobby_EventScript_1602CD:: @ 81602CD specialval 0x8007, sub_810F404 compare 0x8007, 100 - jumpif 0, BattleTower_Lobby_EventScript_1602E4 + goto_if 0, BattleTower_Lobby_EventScript_1602E4 clearflag 941 special sub_810F8FC return @@ -78,10 +78,10 @@ BattleTower_Lobby_EventScript_160342:: @ 8160342 setvar 0x8004, 0 special sub_81358A4 compare RESULT, 6 - jumpeq BattleTower_Lobby_EventScript_16037D + goto_if_eq BattleTower_Lobby_EventScript_16037D special sub_8135E50 compare RESULT, 0 - jumpeq BattleTower_Lobby_EventScript_16037D + goto_if_eq BattleTower_Lobby_EventScript_16037D message BattleTower_Lobby_Text_19A6BE waittext fanfare 370 @@ -92,7 +92,7 @@ BattleTower_Lobby_EventScript_16037D:: @ 816037D setvar 0x8004, 8 special sub_81358A4 compare RESULT, 1 - jumpeq BattleTower_Lobby_EventScript_1603AD + goto_if_eq BattleTower_Lobby_EventScript_1603AD message BattleTower_Lobby_Text_19A589 waittext setvar 0x8004, 13 @@ -119,7 +119,7 @@ BattleTower_Lobby_EventScript_1603AD:: @ 81603AD setvar 0x8004, 9 special sub_81358A4 compare RESULT, 49 - jumpif 5, BattleTower_Lobby_EventScript_1603F8 + goto_if 5, BattleTower_Lobby_EventScript_1603F8 msgbox BattleTower_Lobby_Text_19A617, 4 BattleTower_Lobby_EventScript_1603F8:: @ 81603F8 @@ -187,7 +187,7 @@ BattleTower_Lobby_EventScript_16049E:: @ 816049E setvar 0x8004, 0 special sub_81358A4 compare RESULT, 6 - jumpeq BattleTower_Lobby_EventScript_160342 + goto_if_eq BattleTower_Lobby_EventScript_160342 special SavePlayerParty msgbox BattleTower_Lobby_Text_199F2C, 4 @@ -210,7 +210,7 @@ BattleTower_Lobby_EventScript_1604FA:: @ 81604FA case 127, BattleTower_Lobby_EventScript_160652 special CheckPartyBattleTowerBanlist compare 0x8004, 1 - jumpeq BattleTower_Lobby_EventScript_16060D + goto_if_eq BattleTower_Lobby_EventScript_16060D setvar 0x8004, 1 copyvar 0x8005, RESULT copyvar 0x8006, RESULT @@ -220,7 +220,7 @@ BattleTower_Lobby_EventScript_1604FA:: @ 81604FA special ChooseBattleTowerPlayerParty waitstate compare RESULT, 0 - jumpeq BattleTower_Lobby_EventScript_16064F + goto_if_eq BattleTower_Lobby_EventScript_16064F msgbox BattleTower_Lobby_Text_199FDA, 5 switch RESULT case 0, BattleTower_Lobby_EventScript_16064F @@ -246,7 +246,7 @@ BattleTower_Lobby_EventScript_160587:: @ 8160587 setvar 0x4000, 5 hidebox 0, 0, 15, 10 compare RESULT, 0 - jumpeq BattleTower_Lobby_EventScript_160642 + goto_if_eq BattleTower_Lobby_EventScript_160642 inccounter GAME_STAT_ENTERED_BATTLE_TOWER special SavePlayerParty special sub_8135A14 @@ -348,9 +348,9 @@ BattleTower_Lobby_EventScript_1606CC:: @ 81606CC lock faceplayer compare RESULT, 0 - jumpeq BattleTower_Lobby_EventScript_160701 + goto_if_eq BattleTower_Lobby_EventScript_160701 compare RESULT, 1 - jumpeq BattleTower_Lobby_EventScript_16070B + goto_if_eq BattleTower_Lobby_EventScript_16070B end BattleTower_Lobby_EventScript_1606F7:: @ 81606F7 @@ -388,14 +388,14 @@ BattleTower_Lobby_EventScript_160733:: @ 8160733 lock faceplayer checkflag 238 - jumpeq BattleTower_Lobby_EventScript_1607C5 + goto_if_eq BattleTower_Lobby_EventScript_1607C5 checkflag 237 - jumpeq BattleTower_Lobby_EventScript_160773 + goto_if_eq BattleTower_Lobby_EventScript_160773 msgbox BattleTower_Lobby_Text_19A9EE, 4 setvar 0x8008, 42 givedecoration 42 compare RESULT, 0 - jumpeq BattleTower_Lobby_EventScript_1607AF + goto_if_eq BattleTower_Lobby_EventScript_1607AF setflag 237 msgbox BattleTower_Lobby_Text_19ABAA, 4 release @@ -404,12 +404,12 @@ BattleTower_Lobby_EventScript_160733:: @ 8160733 BattleTower_Lobby_EventScript_160773:: @ 8160773 specialval RESULT, sub_810F404 compare RESULT, 100 - jumpif 0, BattleTower_Lobby_EventScript_1607C5 + goto_if 0, BattleTower_Lobby_EventScript_1607C5 msgbox BattleTower_Lobby_Text_19AAC4, 4 setvar 0x8008, 43 givedecoration 43 compare RESULT, 0 - jumpeq BattleTower_Lobby_EventScript_1607AF + goto_if_eq BattleTower_Lobby_EventScript_1607AF setflag 238 msgbox BattleTower_Lobby_Text_19ABAA, 4 release diff --git a/data/scripts/maps/BattleTower_Outside.inc b/data/scripts/maps/BattleTower_Outside.inc index 01e10ebd3..77f8b39b6 100644 --- a/data/scripts/maps/BattleTower_Outside.inc +++ b/data/scripts/maps/BattleTower_Outside.inc @@ -14,7 +14,7 @@ BattleTower_Outside_EventScript_160168:: @ 8160168 msgbox BattleTower_Outside_Text_199D06, 4 checkitem ITEM_SS_TICKET, 1 compare RESULT, 0 - jumpeq BattleTower_Outside_EventScript_1601C6 + goto_if_eq BattleTower_Outside_EventScript_1601C6 message BattleTower_Outside_Text_199D9D waittext goto BattleTower_Outside_EventScript_16018E @@ -37,7 +37,7 @@ BattleTower_Outside_EventScript_1601C6:: @ 81601C6 BattleTower_Outside_EventScript_1601D0:: @ 81601D0 msgbox BattleTower_Outside_Text_199DF2, 5 compare RESULT, 0 - jumpeq BattleTower_Outside_EventScript_160226 + goto_if_eq BattleTower_Outside_EventScript_160226 msgbox BattleTower_Outside_Text_199E4B, 4 call BattleTower_Outside_EventScript_160232 warp SlateportCity_Harbor, 255, 8, 11 @@ -48,7 +48,7 @@ BattleTower_Outside_EventScript_1601D0:: @ 81601D0 BattleTower_Outside_EventScript_1601FB:: @ 81601FB msgbox BattleTower_Outside_Text_199E0E, 5 compare RESULT, 0 - jumpeq BattleTower_Outside_EventScript_160226 + goto_if_eq BattleTower_Outside_EventScript_160226 msgbox BattleTower_Outside_Text_199E4B, 4 call BattleTower_Outside_EventScript_160232 warp LilycoveCity_Harbor, 255, 8, 11 diff --git a/data/scripts/maps/CaveOfOrigin_1F.inc b/data/scripts/maps/CaveOfOrigin_1F.inc index 7fd365b36..3ad36cc18 100644 --- a/data/scripts/maps/CaveOfOrigin_1F.inc +++ b/data/scripts/maps/CaveOfOrigin_1F.inc @@ -4,5 +4,5 @@ CaveOfOrigin_1F_MapScripts:: @ 815DD6C CaveOfOrigin_1F_MapScript1_15DD72:: @ 815DD72 checkflag 113 - callif 1, CaveOfOrigin_1F_EventScript_1A04E3 + call_if 1, CaveOfOrigin_1F_EventScript_1A04E3 end diff --git a/data/scripts/maps/CaveOfOrigin_B1F.inc b/data/scripts/maps/CaveOfOrigin_B1F.inc index 9603ae83b..c3bbdd45f 100644 --- a/data/scripts/maps/CaveOfOrigin_B1F.inc +++ b/data/scripts/maps/CaveOfOrigin_B1F.inc @@ -4,5 +4,5 @@ CaveOfOrigin_B1F_MapScripts:: @ 815DD7C CaveOfOrigin_B1F_MapScript1_15DD82:: @ 815DD82 checkflag 113 - callif 1, CaveOfOrigin_B1F_EventScript_1A04E3 + call_if 1, CaveOfOrigin_B1F_EventScript_1A04E3 end diff --git a/data/scripts/maps/CaveOfOrigin_B2F.inc b/data/scripts/maps/CaveOfOrigin_B2F.inc index 6b3a55648..fb65de171 100644 --- a/data/scripts/maps/CaveOfOrigin_B2F.inc +++ b/data/scripts/maps/CaveOfOrigin_B2F.inc @@ -4,5 +4,5 @@ CaveOfOrigin_B2F_MapScripts:: @ 815DD8C CaveOfOrigin_B2F_MapScript1_15DD92:: @ 815DD92 checkflag 113 - callif 1, CaveOfOrigin_B2F_EventScript_1A04E3 + call_if 1, CaveOfOrigin_B2F_EventScript_1A04E3 end diff --git a/data/scripts/maps/CaveOfOrigin_B3F.inc b/data/scripts/maps/CaveOfOrigin_B3F.inc index 8e61048d2..c21b04e91 100644 --- a/data/scripts/maps/CaveOfOrigin_B3F.inc +++ b/data/scripts/maps/CaveOfOrigin_B3F.inc @@ -4,5 +4,5 @@ CaveOfOrigin_B3F_MapScripts:: @ 815DD9C CaveOfOrigin_B3F_MapScript1_15DDA2:: @ 815DDA2 checkflag 113 - callif 1, CaveOfOrigin_B3F_EventScript_1A04E3 + call_if 1, CaveOfOrigin_B3F_EventScript_1A04E3 end diff --git a/data/scripts/maps/CaveOfOrigin_B4F.inc b/data/scripts/maps/CaveOfOrigin_B4F.inc index 5517a9c7e..f5ce8138f 100644 --- a/data/scripts/maps/CaveOfOrigin_B4F.inc +++ b/data/scripts/maps/CaveOfOrigin_B4F.inc @@ -5,7 +5,7 @@ CaveOfOrigin_B4F_MapScripts:: @ 815DDAC CaveOfOrigin_B4F_MapScript1_15DDB7:: @ 815DDB7 checkflag 2145 - callif 1, CaveOfOrigin_B4F_EventScript_15DDC1 + call_if 1, CaveOfOrigin_B4F_EventScript_15DDC1 end CaveOfOrigin_B4F_EventScript_15DDC1:: @ 815DDC1 @@ -20,7 +20,7 @@ CaveOfOrigin_B4F_MapScript1_15DDC5:: @ 815DDC5 .endif call CaveOfOrigin_B4F_EventScript_1A01B5 checkflag 113 - callif 1, CaveOfOrigin_B4F_EventScript_1A04E3 + call_if 1, CaveOfOrigin_B4F_EventScript_1A04E3 end CaveOfOrigin_B4F_EventScript_15DDD7:: @ 815DDD7 @@ -67,7 +67,7 @@ CaveOfOrigin_B4F_EventScript_15DDD7:: @ 815DDD7 clearflag 2145 specialval RESULT, sub_810E300 compare RESULT, 1 - callif 1, CaveOfOrigin_B4F_EventScript_15DE73 + call_if 1, CaveOfOrigin_B4F_EventScript_15DE73 setflag 816 setflag 855 setflag 856 diff --git a/data/scripts/maps/DesertRuins.inc b/data/scripts/maps/DesertRuins.inc index 97a22bae3..ab094c824 100644 --- a/data/scripts/maps/DesertRuins.inc +++ b/data/scripts/maps/DesertRuins.inc @@ -6,7 +6,7 @@ DesertRuins_MapScripts:: @ 815CAF3 DesertRuins_MapScript1_15CB03:: @ 815CB03 checkflag 2145 - callif 1, DesertRuins_EventScript_15CB0D + call_if 1, DesertRuins_EventScript_15CB0D end DesertRuins_EventScript_15CB0D:: @ 815CB0D @@ -15,7 +15,7 @@ DesertRuins_EventScript_15CB0D:: @ 815CB0D DesertRuins_MapScript1_15CB11:: @ 815CB11 checkflag 2128 - callif 0, DesertRuins_EventScript_15CB1B + call_if 0, DesertRuins_EventScript_15CB1B end DesertRuins_EventScript_15CB1B:: @ 815CB1B @@ -34,7 +34,7 @@ DesertRuins_MapScript1_15CB52:: @ 815CB52 DesertRuins_EventScript_15CB56:: @ 815CB56 lockall checkflag 2128 - jumpeq DesertRuins_EventScript_15CB6D + goto_if_eq DesertRuins_EventScript_15CB6D braillemsg DesertRuins_Braille_1C54C8 waitbutton hidebox 0, 0, 29, 19 diff --git a/data/scripts/maps/DewfordTown.inc b/data/scripts/maps/DewfordTown.inc index 9a914fcd8..f30c202c8 100644 --- a/data/scripts/maps/DewfordTown.inc +++ b/data/scripts/maps/DewfordTown.inc @@ -10,7 +10,7 @@ DewfordTown_EventScript_14E002:: @ 814E002 lock faceplayer checkflag 189 - jumpif 0, DewfordTown_EventScript_14E076 + goto_if 0, DewfordTown_EventScript_14E076 message DewfordTown_Text_16B522 waittext multichoicedef 21, 6, 0, 2, 0 @@ -44,7 +44,7 @@ DewfordTown_EventScript_14E06B:: @ 814E06B DewfordTown_EventScript_14E076:: @ 814E076 msgbox DewfordTown_Text_16B3BC, 5 compare RESULT, 1 - jumpeq DewfordTown_EventScript_14E093 + goto_if_eq DewfordTown_EventScript_14E093 msgbox DewfordTown_Text_16B471, 4 release end @@ -75,12 +75,12 @@ DewfordTown_EventScript_14E0C6:: @ 814E0C6 lock faceplayer checkflag 257 - jumpeq DewfordTown_EventScript_14E11B + goto_if_eq DewfordTown_EventScript_14E11B msgbox DewfordTown_Text_16B665, 5 compare RESULT, 1 - jumpeq DewfordTown_EventScript_14E0F0 + goto_if_eq DewfordTown_EventScript_14E0F0 compare RESULT, 0 - jumpeq DewfordTown_EventScript_14E111 + goto_if_eq DewfordTown_EventScript_14E111 end DewfordTown_EventScript_14E0F0:: @ 814E0F0 @@ -101,9 +101,9 @@ DewfordTown_EventScript_14E11B:: @ 814E11B waittext multichoice 20, 8, 50, 1 compare RESULT, 0 - jumpeq DewfordTown_EventScript_14E13D + goto_if_eq DewfordTown_EventScript_14E13D compare RESULT, 1 - jumpeq DewfordTown_EventScript_14E147 + goto_if_eq DewfordTown_EventScript_14E147 end DewfordTown_EventScript_14E13D:: @ 814E13D @@ -177,9 +177,9 @@ DewfordTown_EventScript_14E1D8:: @ 814E1D8 setflag 743 spriteinvisible 4, 0, 11 checkflag 149 - callif 0, DewfordTown_EventScript_14E281 + call_if 0, DewfordTown_EventScript_14E281 checkflag 149 - callif 1, DewfordTown_EventScript_14E28A + call_if 1, DewfordTown_EventScript_14E28A closebutton copyvar 0x4096, 0x8008 restorespritelevel 255, 0, 11 @@ -600,9 +600,9 @@ DewfordTown_EventScript_14E413:: @ 814E413 call DewfordTown_EventScript_1A0102 msgbox DewfordTown_Text_16B9CE, 5 compare RESULT, 1 - jumpeq DewfordTown_EventScript_14E439 + goto_if_eq DewfordTown_EventScript_14E439 compare RESULT, 0 - jumpeq DewfordTown_EventScript_14E443 + goto_if_eq DewfordTown_EventScript_14E443 end DewfordTown_EventScript_14E439:: @ 814E439 @@ -617,15 +617,15 @@ DewfordTown_EventScript_14E443:: @ 814E443 lock faceplayer compare RESULT, 1 - jumpeq DewfordTown_EventScript_14E46E + goto_if_eq DewfordTown_EventScript_14E46E compare RESULT, 0 - jumpeq DewfordTown_EventScript_14E485 + goto_if_eq DewfordTown_EventScript_14E485 end DewfordTown_EventScript_14E46E:: @ 814E46E inccounter GAME_STAT_STARTED_TRENDS compare 0x8004, 0 - jumpeq DewfordTown_EventScript_14E48F + goto_if_eq DewfordTown_EventScript_14E48F msgbox DewfordTown_Text_16BB44, 4 release end diff --git a/data/scripts/maps/DewfordTown_Gym.inc b/data/scripts/maps/DewfordTown_Gym.inc index 457f510f0..cf484a546 100644 --- a/data/scripts/maps/DewfordTown_Gym.inc +++ b/data/scripts/maps/DewfordTown_Gym.inc @@ -8,15 +8,15 @@ DewfordTown_Gym_MapScript1_15306B:: @ 815306B DewfordTown_Gym_EventScript_153071:: @ 8153071 checktrainerflag OPPONENT_BRAWLY - jumpeq DewfordTown_Gym_EventScript_1530AA + goto_if_eq DewfordTown_Gym_EventScript_1530AA call DewfordTown_Gym_EventScript_153122 copyvar 0x8001, 0x8000 compare 0x8000, 0 - jumpeq DewfordTown_Gym_EventScript_1530BA + goto_if_eq DewfordTown_Gym_EventScript_1530BA compare 0x8000, 1 - jumpeq DewfordTown_Gym_EventScript_1530B6 + goto_if_eq DewfordTown_Gym_EventScript_1530B6 compare 0x8000, 2 - jumpeq DewfordTown_Gym_EventScript_1530B2 + goto_if_eq DewfordTown_Gym_EventScript_1530B2 goto DewfordTown_Gym_EventScript_1530AE DewfordTown_Gym_EventScript_1530AA:: @ 81530AA @@ -43,14 +43,14 @@ DewfordTown_Gym_EventScript_1530BE:: @ 81530BE call DewfordTown_Gym_EventScript_153122 nop1 comparevars 0x8000, 0x8001 - jumpeq DewfordTown_Gym_EventScript_1530F5 + goto_if_eq DewfordTown_Gym_EventScript_1530F5 copyvar 0x8001, 0x8000 compare 0x8000, 1 - jumpeq DewfordTown_Gym_EventScript_1530F6 + goto_if_eq DewfordTown_Gym_EventScript_1530F6 compare 0x8000, 2 - jumpeq DewfordTown_Gym_EventScript_153101 + goto_if_eq DewfordTown_Gym_EventScript_153101 compare 0x8000, 3 - jumpeq DewfordTown_Gym_EventScript_15310C + goto_if_eq DewfordTown_Gym_EventScript_15310C DewfordTown_Gym_EventScript_1530F5:: @ 81530F5 return @@ -82,17 +82,17 @@ DewfordTown_Gym_EventScript_153117:: @ 8153117 DewfordTown_Gym_EventScript_153122:: @ 8153122 setvar 0x8000, 0 checktrainerflag OPPONENT_HIDEKI - jumpif 0, DewfordTown_Gym_EventScript_153135 + goto_if 0, DewfordTown_Gym_EventScript_153135 addvar 0x8000, 1 DewfordTown_Gym_EventScript_153135:: @ 8153135 checktrainerflag OPPONENT_TESSA - jumpif 0, DewfordTown_Gym_EventScript_153143 + goto_if 0, DewfordTown_Gym_EventScript_153143 addvar 0x8000, 1 DewfordTown_Gym_EventScript_153143:: @ 8153143 checktrainerflag OPPONENT_LAURA - jumpif 0, DewfordTown_Gym_EventScript_153151 + goto_if 0, DewfordTown_Gym_EventScript_153151 addvar 0x8000, 1 DewfordTown_Gym_EventScript_153151:: @ 8153151 @@ -101,7 +101,7 @@ DewfordTown_Gym_EventScript_153151:: @ 8153151 DewfordTown_Gym_EventScript_153152:: @ 8153152 trainerbattle 1, OPPONENT_BRAWLY, 0, DewfordTown_Gym_Text_175182, DewfordTown_Gym_Text_175246, DewfordTown_Gym_EventScript_153177 checkflag 166 - jumpif 0, DewfordTown_Gym_EventScript_1531B5 + goto_if 0, DewfordTown_Gym_EventScript_1531B5 msgbox DewfordTown_Gym_Text_175412, 4 release end @@ -116,7 +116,7 @@ DewfordTown_Gym_EventScript_153177:: @ 8153177 setflag 2056 addvar 0x4085, 1 compare 0x4085, 6 - callif 1, DewfordTown_Gym_EventScript_1A00FB + call_if 1, DewfordTown_Gym_EventScript_1A00FB setvar 0x8008, 2 call DewfordTown_Gym_EventScript_1A01C0 goto DewfordTown_Gym_EventScript_1531B5 @@ -125,7 +125,7 @@ DewfordTown_Gym_EventScript_153177:: @ 8153177 DewfordTown_Gym_EventScript_1531B5:: @ 81531B5 giveitem ITEM_TM08 compare RESULT, 0 - jumpeq DewfordTown_Gym_EventScript_1A029B + goto_if_eq DewfordTown_Gym_EventScript_1A029B msgbox DewfordTown_Gym_Text_1753BF, 4 setflag 166 release @@ -165,7 +165,7 @@ DewfordTown_Gym_EventScript_15323F:: @ 815323F lock faceplayer checkflag 1204 - jumpeq DewfordTown_Gym_EventScript_153254 + goto_if_eq DewfordTown_Gym_EventScript_153254 msgbox DewfordTown_Gym_Text_174D98, 4 release end @@ -178,14 +178,14 @@ DewfordTown_Gym_EventScript_153254:: @ 8153254 DewfordTown_Gym_EventScript_15325E:: @ 815325E lockall checkflag 2056 - jumpeq DewfordTown_Gym_EventScript_15327E + goto_if_eq DewfordTown_Gym_EventScript_15327E goto DewfordTown_Gym_EventScript_153288 end DewfordTown_Gym_EventScript_15326E:: @ 815326E lockall checkflag 2056 - jumpeq DewfordTown_Gym_EventScript_15327E + goto_if_eq DewfordTown_Gym_EventScript_15327E goto DewfordTown_Gym_EventScript_153288 end diff --git a/data/scripts/maps/DewfordTown_Hall.inc b/data/scripts/maps/DewfordTown_Hall.inc index 70689f7ac..cc096080e 100644 --- a/data/scripts/maps/DewfordTown_Hall.inc +++ b/data/scripts/maps/DewfordTown_Hall.inc @@ -7,7 +7,7 @@ DewfordTown_Hall_EventScript_153293:: @ 8153293 call DewfordTown_Hall_EventScript_1A0102 special sub_80FA5E4 compare RESULT, 1 - jumpeq DewfordTown_Hall_EventScript_1532B2 + goto_if_eq DewfordTown_Hall_EventScript_1532B2 msgbox DewfordTown_Hall_Text_1754C9, 4 release end @@ -32,9 +32,9 @@ DewfordTown_Hall_EventScript_1532CD:: @ 81532CD special sub_80EB83C msgbox DewfordTown_Hall_Text_1755F9, 5 compare RESULT, 1 - jumpeq DewfordTown_Hall_EventScript_1532F6 + goto_if_eq DewfordTown_Hall_EventScript_1532F6 compare RESULT, 0 - jumpeq DewfordTown_Hall_EventScript_153300 + goto_if_eq DewfordTown_Hall_EventScript_153300 end DewfordTown_Hall_EventScript_1532F6:: @ 81532F6 @@ -192,14 +192,14 @@ DewfordTown_Hall_EventScript_1534FD:: @ 81534FD move 8, DewfordTown_Hall_Movement_153599 waitmove 0 compare 0x8008, 0 - jumpeq DewfordTown_Hall_EventScript_15351E + goto_if_eq DewfordTown_Hall_EventScript_15351E compare 0x8008, 1 - jumpeq DewfordTown_Hall_EventScript_153534 + goto_if_eq DewfordTown_Hall_EventScript_153534 end DewfordTown_Hall_EventScript_15351E:: @ 815351E compare FACING, 4 - jumpeq DewfordTown_Hall_EventScript_1534FC + goto_if_eq DewfordTown_Hall_EventScript_1534FC move 255, DewfordTown_Hall_Movement_1A0843 waitmove 0 return @@ -211,16 +211,16 @@ DewfordTown_Hall_EventScript_153535:: @ 8153535 move 7, DewfordTown_Hall_Movement_15359B waitmove 0 compare 0x8008, 0 - jumpeq DewfordTown_Hall_EventScript_153556 + goto_if_eq DewfordTown_Hall_EventScript_153556 compare 0x8008, 1 - jumpeq DewfordTown_Hall_EventScript_153583 + goto_if_eq DewfordTown_Hall_EventScript_153583 end DewfordTown_Hall_EventScript_153556:: @ 8153556 compare FACING, 2 - callif 1, DewfordTown_Hall_EventScript_15356D + call_if 1, DewfordTown_Hall_EventScript_15356D compare FACING, 1 - callif 1, DewfordTown_Hall_EventScript_153578 + call_if 1, DewfordTown_Hall_EventScript_153578 return DewfordTown_Hall_EventScript_15356D:: @ 815356D @@ -235,7 +235,7 @@ DewfordTown_Hall_EventScript_153578:: @ 8153578 DewfordTown_Hall_EventScript_153583:: @ 8153583 compare FACING, 3 - jumpeq DewfordTown_Hall_EventScript_1534FC + goto_if_eq DewfordTown_Hall_EventScript_1534FC move 255, DewfordTown_Hall_Movement_1A083F waitmove 0 return @@ -253,11 +253,11 @@ DewfordTown_Hall_EventScript_15359D:: @ 815359D faceplayer call DewfordTown_Hall_EventScript_1A0102 checkflag 230 - jumpeq DewfordTown_Hall_EventScript_1535D1 + goto_if_eq DewfordTown_Hall_EventScript_1535D1 msgbox DewfordTown_Hall_Text_175E13, 4 giveitem ITEM_TM36 compare RESULT, 0 - jumpeq DewfordTown_Hall_EventScript_1A029B + goto_if_eq DewfordTown_Hall_EventScript_1A029B setflag 230 release end diff --git a/data/scripts/maps/DewfordTown_House2.inc b/data/scripts/maps/DewfordTown_House2.inc index 529f8bb24..befe47404 100644 --- a/data/scripts/maps/DewfordTown_House2.inc +++ b/data/scripts/maps/DewfordTown_House2.inc @@ -5,11 +5,11 @@ DewfordTown_House2_EventScript_1535DC:: @ 81535DC lock faceplayer checkflag 289 - jumpeq DewfordTown_House2_EventScript_153615 + goto_if_eq DewfordTown_House2_EventScript_153615 msgbox DewfordTown_House2_Text_175EFE, 4 giveitem ITEM_SILK_SCARF compare RESULT, 0 - jumpeq DewfordTown_House2_EventScript_15360B + goto_if_eq DewfordTown_House2_EventScript_15360B setflag 289 release end diff --git a/data/scripts/maps/EverGrandeCity.inc b/data/scripts/maps/EverGrandeCity.inc index 9b6d2a8b7..c9768d006 100644 --- a/data/scripts/maps/EverGrandeCity.inc +++ b/data/scripts/maps/EverGrandeCity.inc @@ -4,7 +4,7 @@ EverGrandeCity_MapScripts:: @ 814D4D5 EverGrandeCity_MapScript1_14D4DB:: @ 814D4DB checkflag 2090 - callif 1, EverGrandeCity_EventScript_1A02C1 + call_if 1, EverGrandeCity_EventScript_1A02C1 end EverGrandeCity_EventScript_14D4E5:: @ 814D4E5 diff --git a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc index 4d2179cc1..2b0f9545f 100644 --- a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc +++ b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc @@ -54,16 +54,16 @@ EverGrandeCity_ChampionsRoom_EventScript_15B821:: @ 815B821 playsfx 8 checkgender compare RESULT, 0 - callif 1, EverGrandeCity_ChampionsRoom_EventScript_15B87C + call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B87C compare RESULT, 1 - callif 1, EverGrandeCity_ChampionsRoom_EventScript_15B881 + call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B881 reappear 2 call EverGrandeCity_ChampionsRoom_EventScript_15B9BD checkgender compare RESULT, 0 - jumpeq EverGrandeCity_ChampionsRoom_EventScript_15B886 + goto_if_eq EverGrandeCity_ChampionsRoom_EventScript_15B886 compare RESULT, 1 - jumpeq EverGrandeCity_ChampionsRoom_EventScript_15B8BB + goto_if_eq EverGrandeCity_ChampionsRoom_EventScript_15B8BB end EverGrandeCity_ChampionsRoom_EventScript_15B87C:: @ 815B87C @@ -129,9 +129,9 @@ EverGrandeCity_ChampionsRoom_EventScript_15B8F0:: @ 815B8F0 msgbox EverGrandeCity_ChampionsRoom_Text_191546, 4 checkgender compare RESULT, 0 - callif 1, EverGrandeCity_ChampionsRoom_EventScript_15B9AB + call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B9AB compare RESULT, 1 - callif 1, EverGrandeCity_ChampionsRoom_EventScript_15B9B4 + call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B9B4 closebutton move 1, EverGrandeCity_ChampionsRoom_Movement_15B9FF move 255, EverGrandeCity_ChampionsRoom_Movement_15B9E0 diff --git a/data/scripts/maps/EverGrandeCity_DrakesRoom.inc b/data/scripts/maps/EverGrandeCity_DrakesRoom.inc index 55e38da15..3ddcb6ef3 100644 --- a/data/scripts/maps/EverGrandeCity_DrakesRoom.inc +++ b/data/scripts/maps/EverGrandeCity_DrakesRoom.inc @@ -25,9 +25,9 @@ EverGrandeCity_DrakesRoom_EventScript_15B736:: @ 815B736 EverGrandeCity_DrakesRoom_MapScript1_15B743:: @ 815B743 checkflag 1248 - callif 1, EverGrandeCity_DrakesRoom_EventScript_15B758 + call_if 1, EverGrandeCity_DrakesRoom_EventScript_15B758 compare 0x409c, 4 - callif 1, EverGrandeCity_DrakesRoom_EventScript_15B75E + call_if 1, EverGrandeCity_DrakesRoom_EventScript_15B75E end EverGrandeCity_DrakesRoom_EventScript_15B758:: @ 815B758 @@ -42,7 +42,7 @@ EverGrandeCity_DrakesRoom_EventScript_15B764:: @ 815B764 lock faceplayer checkflag 1248 - jumpeq EverGrandeCity_DrakesRoom_EventScript_15B78B + goto_if_eq EverGrandeCity_DrakesRoom_EventScript_15B78B playmusic 450, 0 msgbox EverGrandeCity_DrakesRoom_Text_190CEB, 4 trainerbattle 3, OPPONENT_DRAKE, 0, EverGrandeCity_DrakesRoom_Text_190E42 diff --git a/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc b/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc index 9271f3da9..2526b2ea6 100644 --- a/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc +++ b/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc @@ -25,9 +25,9 @@ EverGrandeCity_GlaciasRoom_EventScript_15B69C:: @ 815B69C EverGrandeCity_GlaciasRoom_MapScript1_15B6A9:: @ 815B6A9 checkflag 1247 - callif 1, EverGrandeCity_GlaciasRoom_EventScript_15B6BE + call_if 1, EverGrandeCity_GlaciasRoom_EventScript_15B6BE compare 0x409c, 3 - callif 1, EverGrandeCity_GlaciasRoom_EventScript_15B6C4 + call_if 1, EverGrandeCity_GlaciasRoom_EventScript_15B6C4 end EverGrandeCity_GlaciasRoom_EventScript_15B6BE:: @ 815B6BE @@ -42,7 +42,7 @@ EverGrandeCity_GlaciasRoom_EventScript_15B6CA:: @ 815B6CA lock faceplayer checkflag 1247 - jumpeq EverGrandeCity_GlaciasRoom_EventScript_15B6F1 + goto_if_eq EverGrandeCity_GlaciasRoom_EventScript_15B6F1 playmusic 450, 0 msgbox EverGrandeCity_GlaciasRoom_Text_190AF9, 4 trainerbattle 3, OPPONENT_GLACIA, 0, EverGrandeCity_GlaciasRoom_Text_190C01 diff --git a/data/scripts/maps/EverGrandeCity_HallOfFame.inc b/data/scripts/maps/EverGrandeCity_HallOfFame.inc index 175990328..0999f9a4d 100644 --- a/data/scripts/maps/EverGrandeCity_HallOfFame.inc +++ b/data/scripts/maps/EverGrandeCity_HallOfFame.inc @@ -45,9 +45,9 @@ EverGrandeCity_HallOfFame_EventScript_15BBA8:: @ 815BBA8 call EverGrandeCity_HallOfFame_EventScript_19FC13 checkgender compare RESULT, 0 - jumpeq EverGrandeCity_HallOfFame_EventScript_15BC41 + goto_if_eq EverGrandeCity_HallOfFame_EventScript_15BC41 compare RESULT, 1 - jumpeq EverGrandeCity_HallOfFame_EventScript_15BC4D + goto_if_eq EverGrandeCity_HallOfFame_EventScript_15BC4D end EverGrandeCity_HallOfFame_EventScript_15BC41:: @ 815BC41 diff --git a/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc b/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc index 9b693c227..9e2c4c0b7 100644 --- a/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc +++ b/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc @@ -25,9 +25,9 @@ EverGrandeCity_PhoebesRoom_EventScript_15B602:: @ 815B602 EverGrandeCity_PhoebesRoom_MapScript1_15B60F:: @ 815B60F checkflag 1246 - callif 1, EverGrandeCity_PhoebesRoom_EventScript_15B624 + call_if 1, EverGrandeCity_PhoebesRoom_EventScript_15B624 compare 0x409c, 2 - callif 1, EverGrandeCity_PhoebesRoom_EventScript_15B62A + call_if 1, EverGrandeCity_PhoebesRoom_EventScript_15B62A end EverGrandeCity_PhoebesRoom_EventScript_15B624:: @ 815B624 @@ -42,7 +42,7 @@ EverGrandeCity_PhoebesRoom_EventScript_15B630:: @ 815B630 lock faceplayer checkflag 1246 - jumpeq EverGrandeCity_PhoebesRoom_EventScript_15B657 + goto_if_eq EverGrandeCity_PhoebesRoom_EventScript_15B657 playmusic 450, 0 msgbox EverGrandeCity_PhoebesRoom_Text_1908F5, 4 trainerbattle 3, OPPONENT_PHOEBE, 0, EverGrandeCity_PhoebesRoom_Text_190A0C diff --git a/data/scripts/maps/EverGrandeCity_PokemonLeague.inc b/data/scripts/maps/EverGrandeCity_PokemonLeague.inc index bfb3cdc1b..7065bdefe 100644 --- a/data/scripts/maps/EverGrandeCity_PokemonLeague.inc +++ b/data/scripts/maps/EverGrandeCity_PokemonLeague.inc @@ -6,7 +6,7 @@ EverGrandeCity_PokemonLeague_MapScript1_15BA7B:: @ 815BA7B sethealplace 20 setflag 2132 checkflag 263 - callif 0, EverGrandeCity_PokemonLeague_EventScript_15BA8B + call_if 0, EverGrandeCity_PokemonLeague_EventScript_15BA8B end EverGrandeCity_PokemonLeague_EventScript_15BA8B:: @ 815BA8B @@ -48,17 +48,17 @@ EverGrandeCity_PokemonLeague_Items:: @ 815BAC0 EverGrandeCity_PokemonLeague_EventScript_15BAD2:: @ 815BAD2 lockall checkflag 263 - jumpeq EverGrandeCity_PokemonLeague_EventScript_15BB57 + goto_if_eq EverGrandeCity_PokemonLeague_EventScript_15BB57 getplayerxy 0x4000, 0x4001 compare 0x4000, 11 - callif 4, EverGrandeCity_PokemonLeague_EventScript_15BB34 + call_if 4, EverGrandeCity_PokemonLeague_EventScript_15BB34 compare 0x4000, 8 - callif 3, EverGrandeCity_PokemonLeague_EventScript_15BB3F + call_if 3, EverGrandeCity_PokemonLeague_EventScript_15BB3F message EverGrandeCity_PokemonLeague_Text_1916FD waittext pause 75 checkflag 2060 - jumpif 0, EverGrandeCity_PokemonLeague_EventScript_15BB4A + goto_if 0, EverGrandeCity_PokemonLeague_EventScript_15BB4A closebutton move 3, EverGrandeCity_PokemonLeague_Movement_15BB7E move 4, EverGrandeCity_PokemonLeague_Movement_15BB81 diff --git a/data/scripts/maps/EverGrandeCity_SidneysRoom.inc b/data/scripts/maps/EverGrandeCity_SidneysRoom.inc index bbb95e0ad..d9e7a8213 100644 --- a/data/scripts/maps/EverGrandeCity_SidneysRoom.inc +++ b/data/scripts/maps/EverGrandeCity_SidneysRoom.inc @@ -6,9 +6,9 @@ EverGrandeCity_SidneysRoom_MapScripts:: @ 815B53F EverGrandeCity_SidneysRoom_MapScript1_15B54F:: @ 815B54F checkflag 1245 - callif 1, EverGrandeCity_SidneysRoom_EventScript_15B564 + call_if 1, EverGrandeCity_SidneysRoom_EventScript_15B564 compare 0x409c, 1 - callif 1, EverGrandeCity_SidneysRoom_EventScript_15B56A + call_if 1, EverGrandeCity_SidneysRoom_EventScript_15B56A end EverGrandeCity_SidneysRoom_EventScript_15B564:: @ 815B564 @@ -43,7 +43,7 @@ EverGrandeCity_SidneysRoom_EventScript_15B596:: @ 815B596 lock faceplayer checkflag 1245 - jumpeq EverGrandeCity_SidneysRoom_EventScript_15B5BD + goto_if_eq EverGrandeCity_SidneysRoom_EventScript_15B5BD playmusic 450, 0 msgbox EverGrandeCity_SidneysRoom_Text_190728, 4 trainerbattle 3, OPPONENT_SIDNEY, 0, EverGrandeCity_SidneysRoom_Text_190823 diff --git a/data/scripts/maps/FallarborTown.inc b/data/scripts/maps/FallarborTown.inc index a48be5b24..043588ed5 100644 --- a/data/scripts/maps/FallarborTown.inc +++ b/data/scripts/maps/FallarborTown.inc @@ -13,7 +13,7 @@ FallarborTown_EventScript_14E7F5:: @ 814E7F5 lock faceplayer checkflag 139 - jumpeq FallarborTown_EventScript_14E80A + goto_if_eq FallarborTown_EventScript_14E80A msgbox FallarborTown_Text_16C7FF, 4 release end diff --git a/data/scripts/maps/FallarborTown_ContestLobby.inc b/data/scripts/maps/FallarborTown_ContestLobby.inc index ed67d922d..1dddf43de 100644 --- a/data/scripts/maps/FallarborTown_ContestLobby.inc +++ b/data/scripts/maps/FallarborTown_ContestLobby.inc @@ -93,7 +93,7 @@ FallarborTown_ContestLobby_EventScript_153A8E:: @ 8153A8E FallarborTown_ContestLobby_EventScript_153A97:: @ 8153A97 checkflag 270 - jumpeq FallarborTown_ContestLobby_EventScript_153AA9 + goto_if_eq FallarborTown_ContestLobby_EventScript_153AA9 msgbox FallarborTown_ContestLobby_Text_177246, 2 end diff --git a/data/scripts/maps/FallarborTown_House1.inc b/data/scripts/maps/FallarborTown_House1.inc index 8a44cdcfb..0228fe25d 100644 --- a/data/scripts/maps/FallarborTown_House1.inc +++ b/data/scripts/maps/FallarborTown_House1.inc @@ -9,25 +9,25 @@ FallarborTown_House1_EventScript_153BB5:: @ 8153BB5 lock faceplayer checkflag 229 - jumpeq FallarborTown_House1_EventScript_153C54 + goto_if_eq FallarborTown_House1_EventScript_153C54 checkitem ITEM_METEORITE, 1 compare RESULT, 1 - jumpeq FallarborTown_House1_EventScript_153BDA + goto_if_eq FallarborTown_House1_EventScript_153BDA msgbox FallarborTown_House1_Text_177755, 4 release end FallarborTown_House1_EventScript_153BDA:: @ 8153BDA checkflag 2 - callif 0, FallarborTown_House1_EventScript_153C2D + call_if 0, FallarborTown_House1_EventScript_153C2D checkflag 2 - callif 1, FallarborTown_House1_EventScript_153C3E + call_if 1, FallarborTown_House1_EventScript_153C3E compare RESULT, 0 - jumpeq FallarborTown_House1_EventScript_153C47 + goto_if_eq FallarborTown_House1_EventScript_153C47 msgbox FallarborTown_House1_Text_1778C4, 4 giveitem ITEM_TM27 compare RESULT, 0 - jumpeq FallarborTown_House1_EventScript_1A029B + goto_if_eq FallarborTown_House1_EventScript_1A029B setvar 0x8004, 280 call FallarborTown_House1_EventScript_1A067F setflag 229 @@ -59,9 +59,9 @@ FallarborTown_House1_EventScript_153C5E:: @ 8153C5E lock faceplayer checkflag 229 - jumpeq FallarborTown_House1_EventScript_153C86 + goto_if_eq FallarborTown_House1_EventScript_153C86 checkflag 139 - jumpeq FallarborTown_House1_EventScript_153C7C + goto_if_eq FallarborTown_House1_EventScript_153C7C msgbox FallarborTown_House1_Text_177A2B, 4 release end diff --git a/data/scripts/maps/FallarborTown_House2.inc b/data/scripts/maps/FallarborTown_House2.inc index c36036ce3..5ecc475ea 100644 --- a/data/scripts/maps/FallarborTown_House2.inc +++ b/data/scripts/maps/FallarborTown_House2.inc @@ -6,7 +6,7 @@ FallarborTown_House2_EventScript_153C91:: @ 8153C91 move 1, FallarborTown_House2_Movement_1A0839 waitmove 0 checkflag 1 - jumpeq FallarborTown_House2_EventScript_153CB6 + goto_if_eq FallarborTown_House2_EventScript_153CB6 msgbox FallarborTown_House2_Text_177AF4, 4 setflag 1 goto FallarborTown_House2_EventScript_153CB6 @@ -15,7 +15,7 @@ FallarborTown_House2_EventScript_153C91:: @ 8153C91 FallarborTown_House2_EventScript_153CB6:: @ 8153CB6 checkitem ITEM_HEART_SCALE, 1 compare RESULT, 0 - jumpeq FallarborTown_House2_EventScript_153D60 + goto_if_eq FallarborTown_House2_EventScript_153D60 msgbox FallarborTown_House2_Text_177BDB, 5 switch RESULT case 0, FallarborTown_House2_EventScript_153D60 @@ -27,12 +27,12 @@ FallarborTown_House2_EventScript_153CE4:: @ 8153CE4 special sub_80F9A4C waitstate compare 0x8004, 255 - jumpeq FallarborTown_House2_EventScript_153D60 + goto_if_eq FallarborTown_House2_EventScript_153D60 special sub_80FA148 compare RESULT, 1 - jumpeq FallarborTown_House2_EventScript_153D52 + goto_if_eq FallarborTown_House2_EventScript_153D52 compare 0x8005, 0 - jumpeq FallarborTown_House2_EventScript_153D44 + goto_if_eq FallarborTown_House2_EventScript_153D44 goto FallarborTown_House2_EventScript_153D1A end @@ -41,7 +41,7 @@ FallarborTown_House2_EventScript_153D1A:: @ 8153D1A special sub_8132670 waitstate compare 0x8004, 0 - jumpeq FallarborTown_House2_EventScript_153CE4 + goto_if_eq FallarborTown_House2_EventScript_153CE4 msgbox FallarborTown_House2_Text_177CC3, 4 removeitem ITEM_HEART_SCALE, 1 goto FallarborTown_House2_EventScript_153D60 diff --git a/data/scripts/maps/FortreeCity.inc b/data/scripts/maps/FortreeCity.inc index 7f9d5ae12..b5426de8e 100644 --- a/data/scripts/maps/FortreeCity.inc +++ b/data/scripts/maps/FortreeCity.inc @@ -19,7 +19,7 @@ FortreeCity_EventScript_14C95E:: @ 814C95E lock faceplayer checkflag 295 - jumpeq FortreeCity_EventScript_14C973 + goto_if_eq FortreeCity_EventScript_14C973 msgbox FortreeCity_Text_1675C2, 4 release end @@ -58,7 +58,7 @@ FortreeCity_EventScript_14C9B3:: @ 814C9B3 faceplayer checkitem ITEM_DEVON_SCOPE, 1 compare RESULT, 1 - jumpeq FortreeCity_EventScript_14C9CF + goto_if_eq FortreeCity_EventScript_14C9CF msgbox FortreeCity_Text_167868, 4 release end @@ -66,7 +66,7 @@ FortreeCity_EventScript_14C9B3:: @ 814C9B3 FortreeCity_EventScript_14C9CF:: @ 814C9CF msgbox FortreeCity_Text_16788B, 5 compare RESULT, 1 - jumpeq FortreeCity_EventScript_14C9E4 + goto_if_eq FortreeCity_EventScript_14C9E4 release end diff --git a/data/scripts/maps/FortreeCity_Gym.inc b/data/scripts/maps/FortreeCity_Gym.inc index 971b05f1b..8744141cb 100644 --- a/data/scripts/maps/FortreeCity_Gym.inc +++ b/data/scripts/maps/FortreeCity_Gym.inc @@ -18,7 +18,7 @@ FortreeCity_Gym_EventScript_157EEC:: @ 8157EEC FortreeCity_Gym_EventScript_157EF0:: @ 8157EF0 trainerbattle 1, OPPONENT_WINONA, 0, FortreeCity_Gym_Text_185CCB, FortreeCity_Gym_Text_185DBA, FortreeCity_Gym_EventScript_157F15 checkflag 170 - jumpif 0, FortreeCity_Gym_EventScript_157F3E + goto_if 0, FortreeCity_Gym_EventScript_157F3E msgbox FortreeCity_Gym_Text_185F98, 4 release end @@ -38,7 +38,7 @@ FortreeCity_Gym_EventScript_157F15:: @ 8157F15 FortreeCity_Gym_EventScript_157F3E:: @ 8157F3E giveitem ITEM_TM40 compare RESULT, 0 - jumpeq FortreeCity_Gym_EventScript_1A029B + goto_if_eq FortreeCity_Gym_EventScript_1A029B msgbox FortreeCity_Gym_Text_185F4A, 4 setflag 170 release @@ -68,7 +68,7 @@ FortreeCity_Gym_EventScript_157FBE:: @ 8157FBE lock faceplayer checkflag 1225 - jumpeq FortreeCity_Gym_EventScript_157FD3 + goto_if_eq FortreeCity_Gym_EventScript_157FD3 msgbox FortreeCity_Gym_Text_18589C, 4 release end @@ -81,14 +81,14 @@ FortreeCity_Gym_EventScript_157FD3:: @ 8157FD3 FortreeCity_Gym_EventScript_157FDD:: @ 8157FDD lockall checkflag 2060 - jumpeq FortreeCity_Gym_EventScript_157FFD + goto_if_eq FortreeCity_Gym_EventScript_157FFD goto FortreeCity_Gym_EventScript_158007 end FortreeCity_Gym_EventScript_157FED:: @ 8157FED lockall checkflag 2060 - jumpeq FortreeCity_Gym_EventScript_157FFD + goto_if_eq FortreeCity_Gym_EventScript_157FFD goto FortreeCity_Gym_EventScript_158007 end diff --git a/data/scripts/maps/FortreeCity_House1.inc b/data/scripts/maps/FortreeCity_House1.inc index f5bda05ab..446831c33 100644 --- a/data/scripts/maps/FortreeCity_House1.inc +++ b/data/scripts/maps/FortreeCity_House1.inc @@ -5,24 +5,24 @@ FortreeCity_House1_EventScript_157E13:: @ 8157E13 lock faceplayer checkflag 155 - jumpeq FortreeCity_House1_EventScript_157EAD + goto_if_eq FortreeCity_House1_EventScript_157EAD setvar 0x8008, 1 copyvar 0x8004, 0x8008 specialval RESULT, sub_804D89C copyvar 0x8009, RESULT msgbox FortreeCity_House1_Text_18568C, 5 compare RESULT, 0 - jumpeq FortreeCity_House1_EventScript_157E95 + goto_if_eq FortreeCity_House1_EventScript_157E95 special sub_80F9A0C waitstate copyvar 0x800a, 0x8004 compare 0x8004, 255 - jumpeq FortreeCity_House1_EventScript_157E95 + goto_if_eq FortreeCity_House1_EventScript_157E95 copyvar 0x8005, 0x800a specialval RESULT, sub_804DB2C copyvar 0x800b, RESULT comparevars RESULT, 0x8009 - jumpif 5, FortreeCity_House1_EventScript_157E9F + goto_if 5, FortreeCity_House1_EventScript_157E9F copyvar 0x8004, 0x8008 copyvar 0x8005, 0x800a special sub_804DB68 diff --git a/data/scripts/maps/FortreeCity_House2.inc b/data/scripts/maps/FortreeCity_House2.inc index ea4aad3d8..f210dd3ac 100644 --- a/data/scripts/maps/FortreeCity_House2.inc +++ b/data/scripts/maps/FortreeCity_House2.inc @@ -5,9 +5,9 @@ FortreeCity_House2_EventScript_1580B4:: @ 81580B4 lock faceplayer checkflag 264 - jumpeq FortreeCity_House2_EventScript_158157 + goto_if_eq FortreeCity_House2_EventScript_158157 checkflag 118 - callif 0, FortreeCity_House2_EventScript_15814B + call_if 0, FortreeCity_House2_EventScript_15814B msgbox FortreeCity_House2_Text_186360, 4 multichoice 21, 8, 54, 1 switch RESULT @@ -23,7 +23,7 @@ FortreeCity_House2_EventScript_1580B4:: @ 81580B4 msgbox FortreeCity_House2_Text_1864C6, 4 giveitem ITEM_TM10 compare RESULT, 0 - jumpeq FortreeCity_House2_EventScript_1A029B + goto_if_eq FortreeCity_House2_EventScript_1A029B setflag 264 msgbox FortreeCity_House2_Text_18652F, 4 release diff --git a/data/scripts/maps/FortreeCity_House4.inc b/data/scripts/maps/FortreeCity_House4.inc index 33d0ed1ae..5de611399 100644 --- a/data/scripts/maps/FortreeCity_House4.inc +++ b/data/scripts/maps/FortreeCity_House4.inc @@ -8,11 +8,11 @@ FortreeCity_House4_EventScript_15817F:: @ 815817F FortreeCity_House4_EventScript_158188:: @ 8158188 lockall checkflag 223 - jumpeq FortreeCity_House4_EventScript_158204 + goto_if_eq FortreeCity_House4_EventScript_158204 checkflag 224 - jumpeq FortreeCity_House4_EventScript_1581D6 + goto_if_eq FortreeCity_House4_EventScript_1581D6 checkflag 222 - jumpeq FortreeCity_House4_EventScript_1581C2 + goto_if_eq FortreeCity_House4_EventScript_1581C2 msgbox FortreeCity_House4_Text_186835, 4 closebutton setflag 222 @@ -36,7 +36,7 @@ FortreeCity_House4_EventScript_1581D6:: @ 81581D6 msgbox FortreeCity_House4_Text_186881, 4 giveitem ITEM_MENTAL_HERB compare RESULT, 0 - jumpeq FortreeCity_House4_EventScript_1A029B + goto_if_eq FortreeCity_House4_EventScript_1A029B setflag 223 releaseall end diff --git a/data/scripts/maps/GraniteCave_1F.inc b/data/scripts/maps/GraniteCave_1F.inc index 59aaa2fc3..f389a774e 100644 --- a/data/scripts/maps/GraniteCave_1F.inc +++ b/data/scripts/maps/GraniteCave_1F.inc @@ -5,7 +5,7 @@ GraniteCave_1F_EventScript_15CBA7:: @ 815CBA7 lock faceplayer checkflag 109 - jumpeq GraniteCave_1F_EventScript_15CBD3 + goto_if_eq GraniteCave_1F_EventScript_15CBD3 msgbox GraniteCave_1F_Text_194917, 4 giveitem ITEM_HM05 setflag 109 diff --git a/data/scripts/maps/GraniteCave_StevensRoom.inc b/data/scripts/maps/GraniteCave_StevensRoom.inc index 895241406..004c3d679 100644 --- a/data/scripts/maps/GraniteCave_StevensRoom.inc +++ b/data/scripts/maps/GraniteCave_StevensRoom.inc @@ -11,17 +11,17 @@ GraniteCave_StevensRoom_EventScript_15CBFA:: @ 815CBFA msgbox GraniteCave_StevensRoom_Text_194BDD, 4 giveitem ITEM_TM47 compare RESULT, 0 - callif 1, GraniteCave_StevensRoom_EventScript_15CC83 + call_if 1, GraniteCave_StevensRoom_EventScript_15CC83 msgbox GraniteCave_StevensRoom_Text_194C8D, 4 closebutton compare FACING, 2 - callif 1, GraniteCave_StevensRoom_EventScript_15CC6D + call_if 1, GraniteCave_StevensRoom_EventScript_15CC6D compare FACING, 1 - callif 1, GraniteCave_StevensRoom_EventScript_15CC78 + call_if 1, GraniteCave_StevensRoom_EventScript_15CC78 compare FACING, 3 - callif 1, GraniteCave_StevensRoom_EventScript_15CC6D + call_if 1, GraniteCave_StevensRoom_EventScript_15CC6D compare FACING, 4 - callif 1, GraniteCave_StevensRoom_EventScript_15CC6D + call_if 1, GraniteCave_StevensRoom_EventScript_15CC6D playsfx 9 disappear 1 release diff --git a/data/scripts/maps/InsideOfTruck.inc b/data/scripts/maps/InsideOfTruck.inc index 0c26f0f88..a265b97e1 100644 --- a/data/scripts/maps/InsideOfTruck.inc +++ b/data/scripts/maps/InsideOfTruck.inc @@ -18,9 +18,9 @@ InsideOfTruck_EventScript_15FC29:: @ 815FC29 setflag 0x4000 checkgender compare RESULT, 0 - jumpeq InsideOfTruck_EventScript_15FC45 + goto_if_eq InsideOfTruck_EventScript_15FC45 compare RESULT, 1 - jumpeq InsideOfTruck_EventScript_15FC68 + goto_if_eq InsideOfTruck_EventScript_15FC68 end InsideOfTruck_EventScript_15FC45:: @ 815FC45 diff --git a/data/scripts/maps/IslandCave.inc b/data/scripts/maps/IslandCave.inc index e706914d7..73523c460 100644 --- a/data/scripts/maps/IslandCave.inc +++ b/data/scripts/maps/IslandCave.inc @@ -6,7 +6,7 @@ IslandCave_MapScripts:: @ 815EEB6 IslandCave_MapScript1_15EEC6:: @ 815EEC6 checkflag 2145 - callif 1, IslandCave_EventScript_15EED0 + call_if 1, IslandCave_EventScript_15EED0 end IslandCave_EventScript_15EED0:: @ 815EED0 @@ -15,7 +15,7 @@ IslandCave_EventScript_15EED0:: @ 815EED0 IslandCave_MapScript1_15EED4:: @ 815EED4 checkflag 2129 - callif 0, IslandCave_EventScript_15EEDE + call_if 0, IslandCave_EventScript_15EEDE end IslandCave_EventScript_15EEDE:: @ 815EEDE @@ -46,7 +46,7 @@ S_OpenRegiceChamber:: @ 815EF19 IslandCave_EventScript_15EF59:: @ 815EF59 lockall checkflag 2129 - jumpeq IslandCave_EventScript_15EF72 + goto_if_eq IslandCave_EventScript_15EF72 braillemsg IslandCave_Braille_1C54FC special DoBrailleWait waitstate @@ -62,7 +62,7 @@ IslandCave_EventScript_15EF7C:: @ 815EF7C lockall braillemsg IslandCave_Braille_1C54FC checkflag 2129 - jumpeq IslandCave_EventScript_15EF95 + goto_if_eq IslandCave_EventScript_15EF95 special DoBrailleWait waitstate goto IslandCave_EventScript_15EF95 diff --git a/data/scripts/maps/JaggedPass.inc b/data/scripts/maps/JaggedPass.inc index 151f1ec79..e80894dc2 100644 --- a/data/scripts/maps/JaggedPass.inc +++ b/data/scripts/maps/JaggedPass.inc @@ -9,7 +9,7 @@ JaggedPass_MapScript1_15D271:: @ 815D271 JaggedPass_MapScript1_15D274:: @ 815D274 compare 0x40bd, 1 - callif 1, JaggedPass_EventScript_15D280 + call_if 1, JaggedPass_EventScript_15D280 end JaggedPass_EventScript_15D280:: @ 815D280 @@ -26,7 +26,7 @@ JaggedPass_EventScript_15D29C:: @ 815D29C trainerbattle 0, OPPONENT_DIANA_1, 0, JaggedPass_Text_195E9E, JaggedPass_Text_195EDF specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq JaggedPass_EventScript_15D2C3 + goto_if_eq JaggedPass_EventScript_15D2C3 msgbox JaggedPass_Text_195F04, 6 end @@ -39,7 +39,7 @@ JaggedPass_EventScript_15D2DA:: @ 815D2DA trainerbattle 0, OPPONENT_ETHAN_1, 0, JaggedPass_Text_195FF2, JaggedPass_Text_196032 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq JaggedPass_EventScript_15D301 + goto_if_eq JaggedPass_EventScript_15D301 msgbox JaggedPass_Text_196077, 6 end diff --git a/data/scripts/maps/LavaridgeTown.inc b/data/scripts/maps/LavaridgeTown.inc index 125b2d42b..ca476eb97 100644 --- a/data/scripts/maps/LavaridgeTown.inc +++ b/data/scripts/maps/LavaridgeTown.inc @@ -6,11 +6,11 @@ LavaridgeTown_MapScripts:: @ 814E4A3 LavaridgeTown_MapScript1_14E4AE:: @ 814E4AE setflag 2066 checkflag 139 - callif 1, LavaridgeTown_EventScript_14E4DF + call_if 1, LavaridgeTown_EventScript_14E4DF call LavaridgeTown_EventScript_1A014E call LavaridgeTown_EventScript_1A0172 compare 0x4053, 2 - callif 1, LavaridgeTown_EventScript_14E4D0 + call_if 1, LavaridgeTown_EventScript_14E4D0 end LavaridgeTown_EventScript_14E4D0:: @ 814E4D0 @@ -45,16 +45,16 @@ LavaridgeTown_EventScript_14E4ED:: @ 814E4ED waitmove 0 checkgender compare RESULT, 0 - callif 1, LavaridgeTown_EventScript_14E56B + call_if 1, LavaridgeTown_EventScript_14E56B compare RESULT, 1 - callif 1, LavaridgeTown_EventScript_14E570 + call_if 1, LavaridgeTown_EventScript_14E570 compare 0x8008, 1 - callif 1, LavaridgeTown_EventScript_14E68F + call_if 1, LavaridgeTown_EventScript_14E68F checkgender compare RESULT, 0 - jumpeq LavaridgeTown_EventScript_14E5AB + goto_if_eq LavaridgeTown_EventScript_14E5AB compare RESULT, 1 - jumpeq LavaridgeTown_EventScript_14E5D0 + goto_if_eq LavaridgeTown_EventScript_14E5D0 end LavaridgeTown_EventScript_14E56B:: @ 814E56B @@ -71,14 +71,14 @@ LavaridgeTown_EventScript_14E575:: @ 814E575 setvar 0x8008, 0 checkgender compare RESULT, 0 - callif 1, LavaridgeTown_EventScript_14E56B + call_if 1, LavaridgeTown_EventScript_14E56B compare RESULT, 1 - callif 1, LavaridgeTown_EventScript_14E570 + call_if 1, LavaridgeTown_EventScript_14E570 checkgender compare RESULT, 0 - jumpeq LavaridgeTown_EventScript_14E5AB + goto_if_eq LavaridgeTown_EventScript_14E5AB compare RESULT, 1 - jumpeq LavaridgeTown_EventScript_14E5D0 + goto_if_eq LavaridgeTown_EventScript_14E5D0 end LavaridgeTown_EventScript_14E5AB:: @ 814E5AB @@ -100,22 +100,22 @@ LavaridgeTown_EventScript_14E5D0:: @ 814E5D0 LavaridgeTown_EventScript_14E5F5:: @ 814E5F5 closebutton compare 0x8008, 1 - callif 1, LavaridgeTown_EventScript_14E646 + call_if 1, LavaridgeTown_EventScript_14E646 compare 0x8008, 0 - callif 1, LavaridgeTown_EventScript_14E64E + call_if 1, LavaridgeTown_EventScript_14E64E disappear 8 reappear 7 pause 30 compare 0x8008, 1 - callif 1, LavaridgeTown_EventScript_14E69A + call_if 1, LavaridgeTown_EventScript_14E69A compare 0x8008, 0 - callif 1, LavaridgeTown_EventScript_14E6A5 + call_if 1, LavaridgeTown_EventScript_14E6A5 disappear 7 setvar 0x4053, 2 playmusicbattle 0 fadedefault compare 0x8008, 0 - jumpeq LavaridgeTown_EventScript_14E644 + goto_if_eq LavaridgeTown_EventScript_14E644 releaseall end @@ -129,13 +129,13 @@ LavaridgeTown_EventScript_14E646:: @ 814E646 LavaridgeTown_EventScript_14E64E:: @ 814E64E compare FACING, 2 - callif 1, LavaridgeTown_EventScript_14E67B + call_if 1, LavaridgeTown_EventScript_14E67B compare FACING, 1 - callif 1, LavaridgeTown_EventScript_14E680 + call_if 1, LavaridgeTown_EventScript_14E680 compare FACING, 3 - callif 1, LavaridgeTown_EventScript_14E685 + call_if 1, LavaridgeTown_EventScript_14E685 compare FACING, 4 - callif 1, LavaridgeTown_EventScript_14E68A + call_if 1, LavaridgeTown_EventScript_14E68A return LavaridgeTown_EventScript_14E67B:: @ 814E67B @@ -166,13 +166,13 @@ LavaridgeTown_EventScript_14E69A:: @ 814E69A LavaridgeTown_EventScript_14E6A5:: @ 814E6A5 compare FACING, 2 - callif 1, LavaridgeTown_EventScript_14E6D2 + call_if 1, LavaridgeTown_EventScript_14E6D2 compare FACING, 1 - callif 1, LavaridgeTown_EventScript_14E6D2 + call_if 1, LavaridgeTown_EventScript_14E6D2 compare FACING, 3 - callif 1, LavaridgeTown_EventScript_14E6DD + call_if 1, LavaridgeTown_EventScript_14E6DD compare FACING, 4 - callif 1, LavaridgeTown_EventScript_14E6D2 + call_if 1, LavaridgeTown_EventScript_14E6D2 return LavaridgeTown_EventScript_14E6D2:: @ 814E6D2 @@ -238,7 +238,7 @@ LavaridgeTown_Movement_14E70E:: @ 814E70E LavaridgeTown_EventScript_14E710:: @ 814E710 specialval RESULT, player_get_direction_lower_nybble compare RESULT, 1 - jumpeq LavaridgeTown_EventScript_14E721 + goto_if_eq LavaridgeTown_EventScript_14E721 end LavaridgeTown_EventScript_14E721:: @ 814E721 @@ -273,13 +273,13 @@ LavaridgeTown_EventScript_14E75A:: @ 814E75A lock faceplayer checkflag 266 - jumpeq LavaridgeTown_EventScript_14E79E + goto_if_eq LavaridgeTown_EventScript_14E79E msgbox LavaridgeTown_Text_16C174, 5 compare RESULT, 0 - jumpeq LavaridgeTown_EventScript_14E7B2 + goto_if_eq LavaridgeTown_EventScript_14E7B2 countpokemon compare RESULT, 6 - jumpeq LavaridgeTown_EventScript_14E7A8 + goto_if_eq LavaridgeTown_EventScript_14E7A8 msgbox LavaridgeTown_Text_16C2B6, 4 setflag 266 fanfare 370 diff --git a/data/scripts/maps/LavaridgeTown_Gym_1F.inc b/data/scripts/maps/LavaridgeTown_Gym_1F.inc index 1f5810e7f..e22d4471f 100644 --- a/data/scripts/maps/LavaridgeTown_Gym_1F.inc +++ b/data/scripts/maps/LavaridgeTown_Gym_1F.inc @@ -14,27 +14,27 @@ LavaridgeTown_Gym_1F_EventScript_15369F:: @ 815369F setvar 0x400e, 0 setvar 0x400f, 0 checktrainerflag OPPONENT_COLE - jumpeq LavaridgeTown_Gym_1F_EventScript_1536C6 + goto_if_eq LavaridgeTown_Gym_1F_EventScript_1536C6 setvar 0x400b, 1 LavaridgeTown_Gym_1F_EventScript_1536C6:: @ 81536C6 checktrainerflag OPPONENT_ZANE - jumpeq LavaridgeTown_Gym_1F_EventScript_1536D4 + goto_if_eq LavaridgeTown_Gym_1F_EventScript_1536D4 setvar 0x400c, 1 LavaridgeTown_Gym_1F_EventScript_1536D4:: @ 81536D4 checktrainerflag OPPONENT_AXLE - jumpeq LavaridgeTown_Gym_1F_EventScript_1536E2 + goto_if_eq LavaridgeTown_Gym_1F_EventScript_1536E2 setvar 0x400d, 1 LavaridgeTown_Gym_1F_EventScript_1536E2:: @ 81536E2 checktrainerflag OPPONENT_SADIE - jumpeq LavaridgeTown_Gym_1F_EventScript_1536F0 + goto_if_eq LavaridgeTown_Gym_1F_EventScript_1536F0 setvar 0x400e, 1 LavaridgeTown_Gym_1F_EventScript_1536F0:: @ 81536F0 checktrainerflag OPPONENT_ANDY - jumpeq LavaridgeTown_Gym_1F_EventScript_1536FE + goto_if_eq LavaridgeTown_Gym_1F_EventScript_1536FE setvar 0x400f, 1 LavaridgeTown_Gym_1F_EventScript_1536FE:: @ 81536FE @@ -42,27 +42,27 @@ LavaridgeTown_Gym_1F_EventScript_1536FE:: @ 81536FE LavaridgeTown_Gym_1F_EventScript_1536FF:: @ 81536FF checktrainerflag OPPONENT_COLE - jumpeq LavaridgeTown_Gym_1F_EventScript_15370C + goto_if_eq LavaridgeTown_Gym_1F_EventScript_15370C spritebehave 2, 63 LavaridgeTown_Gym_1F_EventScript_15370C:: @ 815370C checktrainerflag OPPONENT_ZANE - jumpeq LavaridgeTown_Gym_1F_EventScript_153719 + goto_if_eq LavaridgeTown_Gym_1F_EventScript_153719 spritebehave 3, 63 LavaridgeTown_Gym_1F_EventScript_153719:: @ 8153719 checktrainerflag OPPONENT_AXLE - jumpeq LavaridgeTown_Gym_1F_EventScript_153726 + goto_if_eq LavaridgeTown_Gym_1F_EventScript_153726 spritebehave 4, 63 LavaridgeTown_Gym_1F_EventScript_153726:: @ 8153726 checktrainerflag OPPONENT_SADIE - jumpeq LavaridgeTown_Gym_1F_EventScript_153733 + goto_if_eq LavaridgeTown_Gym_1F_EventScript_153733 spritebehave 5, 63 LavaridgeTown_Gym_1F_EventScript_153733:: @ 8153733 checktrainerflag OPPONENT_ANDY - jumpeq LavaridgeTown_Gym_1F_EventScript_153740 + goto_if_eq LavaridgeTown_Gym_1F_EventScript_153740 spritebehave 7, 63 LavaridgeTown_Gym_1F_EventScript_153740:: @ 8153740 @@ -71,7 +71,7 @@ LavaridgeTown_Gym_1F_EventScript_153740:: @ 8153740 LavaridgeTown_Gym_1F_EventScript_153741:: @ 8153741 trainerbattle 1, OPPONENT_FLANNERY, 0, LavaridgeTown_Gym_1F_Text_176801, LavaridgeTown_Gym_1F_Text_176960, LavaridgeTown_Gym_1F_EventScript_153766 checkflag 168 - jumpif 0, LavaridgeTown_Gym_1F_EventScript_1537A7 + goto_if 0, LavaridgeTown_Gym_1F_EventScript_1537A7 msgbox LavaridgeTown_Gym_1F_Text_176C4A, 4 release end @@ -85,7 +85,7 @@ LavaridgeTown_Gym_1F_EventScript_153766:: @ 8153766 setflag 2058 addvar 0x4085, 1 compare 0x4085, 6 - callif 1, LavaridgeTown_Gym_1F_EventScript_1A00FB + call_if 1, LavaridgeTown_Gym_1F_EventScript_1A00FB setvar 0x8008, 4 call LavaridgeTown_Gym_1F_EventScript_1A01C0 setflag 806 @@ -96,7 +96,7 @@ LavaridgeTown_Gym_1F_EventScript_153766:: @ 8153766 LavaridgeTown_Gym_1F_EventScript_1537A7:: @ 81537A7 giveitem ITEM_TM50 compare RESULT, 0 - jumpeq LavaridgeTown_Gym_1F_EventScript_1A029B + goto_if_eq LavaridgeTown_Gym_1F_EventScript_1A029B msgbox LavaridgeTown_Gym_1F_Text_176B8F, 4 setflag 168 release @@ -136,7 +136,7 @@ LavaridgeTown_Gym_1F_EventScript_153859:: @ 8153859 lock faceplayer checkflag 1213 - jumpeq LavaridgeTown_Gym_1F_EventScript_15386E + goto_if_eq LavaridgeTown_Gym_1F_EventScript_15386E msgbox LavaridgeTown_Gym_1F_Text_176312, 4 release end @@ -149,14 +149,14 @@ LavaridgeTown_Gym_1F_EventScript_15386E:: @ 815386E LavaridgeTown_Gym_1F_EventScript_153878:: @ 8153878 lockall checkflag 2058 - jumpeq LavaridgeTown_Gym_1F_EventScript_153898 + goto_if_eq LavaridgeTown_Gym_1F_EventScript_153898 goto LavaridgeTown_Gym_1F_EventScript_1538A2 end LavaridgeTown_Gym_1F_EventScript_153888:: @ 8153888 lockall checkflag 2058 - jumpeq LavaridgeTown_Gym_1F_EventScript_153898 + goto_if_eq LavaridgeTown_Gym_1F_EventScript_153898 goto LavaridgeTown_Gym_1F_EventScript_1538A2 end diff --git a/data/scripts/maps/LavaridgeTown_HerbShop.inc b/data/scripts/maps/LavaridgeTown_HerbShop.inc index 6ff103ce3..c924684bc 100644 --- a/data/scripts/maps/LavaridgeTown_HerbShop.inc +++ b/data/scripts/maps/LavaridgeTown_HerbShop.inc @@ -29,11 +29,11 @@ LavaridgeTown_HerbShop_EventScript_153655:: @ 8153655 lock faceplayer checkflag 254 - jumpeq LavaridgeTown_HerbShop_EventScript_153684 + goto_if_eq LavaridgeTown_HerbShop_EventScript_153684 msgbox LavaridgeTown_HerbShop_Text_1761A2, 4 giveitem ITEM_CHARCOAL compare RESULT, 0 - jumpeq LavaridgeTown_HerbShop_EventScript_1A029B + goto_if_eq LavaridgeTown_HerbShop_EventScript_1A029B setflag 254 release end diff --git a/data/scripts/maps/LilycoveCity.inc b/data/scripts/maps/LilycoveCity.inc index 082e88bd5..f700988f9 100644 --- a/data/scripts/maps/LilycoveCity.inc +++ b/data/scripts/maps/LilycoveCity.inc @@ -8,7 +8,7 @@ LilycoveCity_MapScript1_14CA20:: @ 814CA20 setvar 0x4086, 0 setflag 802 checkflag 2090 - callif 1, LilycoveCity_EventScript_1A02C1 + call_if 1, LilycoveCity_EventScript_1A02C1 call LilycoveCity_EventScript_1A0196 call LilycoveCity_EventScript_1A014E end @@ -29,9 +29,9 @@ LilycoveCity_MapScript1_14CA3F:: @ 814CA3F setmaptile 72, 6, 445, 0 .endif checkflag 112 - callif 0, LilycoveCity_EventScript_14CABE + call_if 0, LilycoveCity_EventScript_14CABE checkflag 2061 - callif 1, LilycoveCity_EventScript_14CB2B + call_if 1, LilycoveCity_EventScript_14CB2B end LilycoveCity_EventScript_14CABE:: @ 814CABE @@ -65,13 +65,13 @@ LilycoveCity_EventScript_14CB74:: @ 814CB74 faceplayer checkdailyflags checkflag 2255 - jumpeq LilycoveCity_EventScript_14CBB4 + goto_if_eq LilycoveCity_EventScript_14CBB4 msgbox LilycoveCity_Text_1C5A7A, 4 random 10 addvar RESULT, 133 giveitem RESULT compare RESULT, 0 - jumpeq LilycoveCity_EventScript_1A029B + goto_if_eq LilycoveCity_EventScript_1A029B setflag 2255 msgbox LilycoveCity_Text_1C5B1D, 4 release @@ -90,7 +90,7 @@ LilycoveCity_EventScript_14CBC7:: @ 814CBC7 lock faceplayer checkflag 2061 - jumpeq LilycoveCity_EventScript_14CBDC + goto_if_eq LilycoveCity_EventScript_14CBDC msgbox LilycoveCity_Text_168750, 4 release end @@ -108,7 +108,7 @@ LilycoveCity_EventScript_14CBEF:: @ 814CBEF lock faceplayer checkflag 112 - jumpeq LilycoveCity_EventScript_14CC04 + goto_if_eq LilycoveCity_EventScript_14CC04 msgbox LilycoveCity_Text_1688C1, 4 release end @@ -122,7 +122,7 @@ LilycoveCity_EventScript_14CC0E:: @ 814CC0E lock faceplayer checkflag 112 - jumpeq LilycoveCity_EventScript_14CC23 + goto_if_eq LilycoveCity_EventScript_14CC23 msgbox LilycoveCity_Text_1689BF, 4 release end @@ -148,7 +148,7 @@ LilycoveCity_EventScript_14CC48:: @ 814CC48 lock faceplayer checkflag 2061 - jumpeq LilycoveCity_EventScript_14CC5D + goto_if_eq LilycoveCity_EventScript_14CC5D msgbox LilycoveCity_Text_168C16, 4 release end @@ -187,7 +187,7 @@ LilycoveCity_EventScript_14CCA2:: @ 814CCA2 LilycoveCity_EventScript_14CCAC:: @ 814CCAC lockall checkflag 2052 - jumpeq LilycoveCity_EventScript_14CCC0 + goto_if_eq LilycoveCity_EventScript_14CCC0 msgbox LilycoveCity_Text_168EDA, 4 releaseall end @@ -212,7 +212,7 @@ LilycoveCity_EventScript_14CCDC:: @ 814CCDC LilycoveCity_EventScript_14CCE5:: @ 814CCE5 lockall checkflag 218 - jumpeq LilycoveCity_EventScript_14CD18 + goto_if_eq LilycoveCity_EventScript_14CD18 msgbox LilycoveCity_Text_16864A, 4 move LAST_TALKED, LilycoveCity_Movement_1A0839 waitmove 0 @@ -249,19 +249,19 @@ LilycoveCity_EventScript_14CD46:: @ 814CD46 faceplayer checkgender compare RESULT, 0 - jumpeq LilycoveCity_EventScript_14CD60 + goto_if_eq LilycoveCity_EventScript_14CD60 compare RESULT, 1 - jumpeq LilycoveCity_EventScript_14CDD3 + goto_if_eq LilycoveCity_EventScript_14CDD3 end LilycoveCity_EventScript_14CD60:: @ 814CD60 playmusic 415, 1 checkflag 286 - callif 1, LilycoveCity_EventScript_14CDB0 + call_if 1, LilycoveCity_EventScript_14CDB0 checkflag 286 - callif 0, LilycoveCity_EventScript_14CDB9 + call_if 0, LilycoveCity_EventScript_14CDB9 compare RESULT, 0 - jumpeq LilycoveCity_EventScript_14CDC2 + goto_if_eq LilycoveCity_EventScript_14CDC2 msgbox LilycoveCity_Text_167B94, 4 switch 0x4023 case 0, LilycoveCity_EventScript_14CE46 @@ -288,11 +288,11 @@ LilycoveCity_EventScript_14CDC2:: @ 814CDC2 LilycoveCity_EventScript_14CDD3:: @ 814CDD3 playmusic 421, 1 checkflag 286 - callif 1, LilycoveCity_EventScript_14CE23 + call_if 1, LilycoveCity_EventScript_14CE23 checkflag 286 - callif 0, LilycoveCity_EventScript_14CE2C + call_if 0, LilycoveCity_EventScript_14CE2C compare RESULT, 0 - jumpeq LilycoveCity_EventScript_14CE35 + goto_if_eq LilycoveCity_EventScript_14CE35 msgbox LilycoveCity_Text_1680A9, 4 switch 0x4023 case 0, LilycoveCity_EventScript_14CE76 @@ -350,11 +350,11 @@ LilycoveCity_EventScript_14CEA6:: @ 814CEA6 msgbox LilycoveCity_Text_167C6B, 4 setvar RESULT, 0 checkflag 2060 - callif 1, LilycoveCity_EventScript_14CEDE + call_if 1, LilycoveCity_EventScript_14CEDE compare RESULT, 0 - callif 1, LilycoveCity_EventScript_14CEEE + call_if 1, LilycoveCity_EventScript_14CEEE compare RESULT, 1 - callif 1, LilycoveCity_EventScript_14CEF7 + call_if 1, LilycoveCity_EventScript_14CEF7 clearflag 722 clearflag 849 goto LilycoveCity_EventScript_14CF6B @@ -362,7 +362,7 @@ LilycoveCity_EventScript_14CEA6:: @ 814CEA6 LilycoveCity_EventScript_14CEDE:: @ 814CEDE checkflag 2062 - jumpeq LilycoveCity_EventScript_14CEE8 + goto_if_eq LilycoveCity_EventScript_14CEE8 return LilycoveCity_EventScript_14CEE8:: @ 814CEE8 @@ -375,7 +375,7 @@ LilycoveCity_EventScript_14CEEE:: @ 814CEEE LilycoveCity_EventScript_14CEF7:: @ 814CEF7 checkflag 2052 - jumpeq LilycoveCity_EventScript_14CF09 + goto_if_eq LilycoveCity_EventScript_14CF09 msgbox LilycoveCity_Text_167DDD, 4 return @@ -387,11 +387,11 @@ LilycoveCity_EventScript_14CF12:: @ 814CF12 msgbox LilycoveCity_Text_168149, 4 setvar RESULT, 0 checkflag 2060 - callif 1, LilycoveCity_EventScript_14CEDE + call_if 1, LilycoveCity_EventScript_14CEDE compare RESULT, 0 - callif 1, LilycoveCity_EventScript_14CF47 + call_if 1, LilycoveCity_EventScript_14CF47 compare RESULT, 1 - callif 1, LilycoveCity_EventScript_14CF50 + call_if 1, LilycoveCity_EventScript_14CF50 clearflag 760 goto LilycoveCity_EventScript_14CF6B end @@ -402,7 +402,7 @@ LilycoveCity_EventScript_14CF47:: @ 814CF47 LilycoveCity_EventScript_14CF50:: @ 814CF50 checkflag 2052 - jumpeq LilycoveCity_EventScript_14CF62 + goto_if_eq LilycoveCity_EventScript_14CF62 msgbox LilycoveCity_Text_168282, 4 return diff --git a/data/scripts/maps/LilycoveCity_ContestLobby.inc b/data/scripts/maps/LilycoveCity_ContestLobby.inc index ebd59cd91..1abc71238 100644 --- a/data/scripts/maps/LilycoveCity_ContestLobby.inc +++ b/data/scripts/maps/LilycoveCity_ContestLobby.inc @@ -14,7 +14,7 @@ LilycoveCity_ContestLobby_MapScript2_158877:: @ 8158877 LilycoveCity_ContestLobby_EventScript_158889:: @ 8158889 checkflag 775 - jumpeq LilycoveCity_ContestLobby_EventScript_158898 + goto_if_eq LilycoveCity_ContestLobby_EventScript_158898 setvar 0x4099, 0 end @@ -32,9 +32,9 @@ LilycoveCity_ContestLobby_EventScript_158898:: @ 8158898 lockall msgbox LilycoveCity_ContestLobby_Text_1889FD, 5 compare RESULT, 1 - jumpeq LilycoveCity_ContestLobby_EventScript_1588DE + goto_if_eq LilycoveCity_ContestLobby_EventScript_1588DE compare RESULT, 0 - jumpeq LilycoveCity_ContestLobby_EventScript_158918 + goto_if_eq LilycoveCity_ContestLobby_EventScript_158918 releaseall end @@ -45,7 +45,7 @@ LilycoveCity_ContestLobby_EventScript_1588DE:: @ 81588DE setvar 0x4099, 0 specialval RESULT, GiveMonArtistRibbon compare RESULT, 1 - callif 1, LilycoveCity_ContestLobby_EventScript_158948 + call_if 1, LilycoveCity_ContestLobby_EventScript_158948 move 4, LilycoveCity_ContestLobby_Movement_158A43 waitmove 0 disappear 4 @@ -57,7 +57,7 @@ LilycoveCity_ContestLobby_EventScript_1588DE:: @ 81588DE LilycoveCity_ContestLobby_EventScript_158918:: @ 8158918 msgbox LilycoveCity_ContestLobby_Text_188C41, 5 compare RESULT, 1 - jumpeq LilycoveCity_ContestLobby_EventScript_1588DE + goto_if_eq LilycoveCity_ContestLobby_EventScript_1588DE msgbox LilycoveCity_ContestLobby_Text_188CBD, 4 closebutton move 4, LilycoveCity_ContestLobby_Movement_158A43 @@ -189,7 +189,7 @@ LilycoveCity_ContestLobby_Movement_158A52:: @ 8158A52 LilycoveCity_ContestLobby_EventScript_158A5B:: @ 8158A5B checkflag 775 - jumpeq LilycoveCity_ContestLobby_EventScript_158A6A + goto_if_eq LilycoveCity_ContestLobby_EventScript_158A6A setvar 0x4099, 0 end @@ -206,9 +206,9 @@ LilycoveCity_ContestLobby_EventScript_158A6A:: @ 8158A6A showcontestwinner 0 msgbox LilycoveCity_ContestLobby_Text_1889FD, 5 compare RESULT, 1 - jumpeq LilycoveCity_ContestLobby_EventScript_158AAE + goto_if_eq LilycoveCity_ContestLobby_EventScript_158AAE compare RESULT, 0 - jumpeq LilycoveCity_ContestLobby_EventScript_158AE8 + goto_if_eq LilycoveCity_ContestLobby_EventScript_158AE8 end LilycoveCity_ContestLobby_EventScript_158AAE:: @ 8158AAE @@ -218,7 +218,7 @@ LilycoveCity_ContestLobby_EventScript_158AAE:: @ 8158AAE setvar 0x4099, 0 specialval RESULT, GiveMonArtistRibbon compare RESULT, 1 - callif 1, LilycoveCity_ContestLobby_EventScript_158B18 + call_if 1, LilycoveCity_ContestLobby_EventScript_158B18 move 11, LilycoveCity_ContestLobby_Movement_158B6D waitmove 0 disappear 11 @@ -230,7 +230,7 @@ LilycoveCity_ContestLobby_EventScript_158AAE:: @ 8158AAE LilycoveCity_ContestLobby_EventScript_158AE8:: @ 8158AE8 msgbox LilycoveCity_ContestLobby_Text_188C41, 5 compare RESULT, 1 - jumpeq LilycoveCity_ContestLobby_EventScript_158AAE + goto_if_eq LilycoveCity_ContestLobby_EventScript_158AAE msgbox LilycoveCity_ContestLobby_Text_188CBD, 4 closebutton move 11, LilycoveCity_ContestLobby_Movement_158B6D @@ -306,9 +306,9 @@ LilycoveCity_ContestLobby_EventScript_158B85:: @ 8158B85 lockall checkitem ITEM_CONTEST_PASS, 1 compare RESULT, 0 - jumpeq LilycoveCity_ContestLobby_EventScript_158BBA + goto_if_eq LilycoveCity_ContestLobby_EventScript_158BBA checkflag 2 - jumpeq LilycoveCity_ContestLobby_EventScript_158BAE + goto_if_eq LilycoveCity_ContestLobby_EventScript_158BAE message LilycoveCity_ContestLobby_Text_18848C waittext setflag 2 @@ -329,11 +329,11 @@ LilycoveCity_ContestLobby_EventScript_158BBA:: @ 8158BBA LilycoveCity_ContestLobby_EventScript_158BC4:: @ 8158BC4 msgbox LilycoveCity_ContestLobby_Text_188521, 5 compare RESULT, 0 - jumpeq LilycoveCity_ContestLobby_EventScript_158C35 + goto_if_eq LilycoveCity_ContestLobby_EventScript_158C35 call S_DoSaveDialog hidebox 0, 0, 15, 9 compare RESULT, 0 - jumpeq LilycoveCity_ContestLobby_EventScript_158C35 + goto_if_eq LilycoveCity_ContestLobby_EventScript_158C35 setflag 3 return @@ -362,18 +362,18 @@ LilycoveCity_ContestLobby_EventScript_158C42:: @ 8158C42 setvar CONTEST_RANK, 0 choosecontestpkmn compare 0x8004, 255 - jumpeq LilycoveCity_ContestLobby_EventScript_158CEA + goto_if_eq LilycoveCity_ContestLobby_EventScript_158CEA special sub_80C43F4 compare RESULT, 0 - jumpeq LilycoveCity_ContestLobby_EventScript_158C96 + goto_if_eq LilycoveCity_ContestLobby_EventScript_158C96 compare RESULT, 1 - jumpeq LilycoveCity_ContestLobby_EventScript_158CC0 + goto_if_eq LilycoveCity_ContestLobby_EventScript_158CC0 compare RESULT, 2 - jumpeq LilycoveCity_ContestLobby_EventScript_158CC0 + goto_if_eq LilycoveCity_ContestLobby_EventScript_158CC0 compare RESULT, 3 - jumpeq LilycoveCity_ContestLobby_EventScript_158CA4 + goto_if_eq LilycoveCity_ContestLobby_EventScript_158CA4 compare RESULT, 4 - jumpeq LilycoveCity_ContestLobby_EventScript_158CB2 + goto_if_eq LilycoveCity_ContestLobby_EventScript_158CB2 end LilycoveCity_ContestLobby_EventScript_158C96:: @ 8158C96 @@ -403,7 +403,7 @@ LilycoveCity_ContestLobby_EventScript_158CC0:: @ 8158CC0 LilycoveCity_ContestLobby_EventScript_158CEA:: @ 8158CEA checkflag 3 - callif 0, LilycoveCity_ContestLobby_EventScript_158BC4 + call_if 0, LilycoveCity_ContestLobby_EventScript_158BC4 message LilycoveCity_ContestLobby_Text_1886DC waittext multichoice 0, 0, 4, 0 @@ -421,11 +421,11 @@ LilycoveCity_ContestLobby_EventScript_158D24:: @ 8158D24 special sub_808363C waitstate compare RESULT, 3 - jumpeq LilycoveCity_ContestLobby_EventScript_158D90 + goto_if_eq LilycoveCity_ContestLobby_EventScript_158D90 compare RESULT, 5 - jumpeq LilycoveCity_ContestLobby_EventScript_158DA1 + goto_if_eq LilycoveCity_ContestLobby_EventScript_158DA1 compare RESULT, 6 - jumpeq LilycoveCity_ContestLobby_EventScript_158DB2 + goto_if_eq LilycoveCity_ContestLobby_EventScript_158DB2 message2 LilycoveCity_ContestLobby_Text_18872A waittext contestlinktransfer @@ -570,7 +570,7 @@ LilycoveCity_ContestLobby_Movement_158EAE:: @ 8158EAE LilycoveCity_ContestLobby_EventScript_158EB0:: @ 8158EB0 specialval RESULT, sub_80C5044 compare RESULT, 1 - jumpeq LilycoveCity_ContestLobby_EventScript_158EE8 + goto_if_eq LilycoveCity_ContestLobby_EventScript_158EE8 setvar 0x800b, 8 setvar CONTEST_RANK, 3 call LilycoveCity_ContestLobby_EventScript_1A4E92 @@ -708,7 +708,7 @@ LilycoveCity_ContestLobby_EventScript_15901E:: @ 815901E LilycoveCity_ContestLobby_EventScript_159027:: @ 8159027 checkflag 150 - jumpif 0, LilycoveCity_ContestLobby_EventScript_159039 + goto_if 0, LilycoveCity_ContestLobby_EventScript_159039 msgbox LilycoveCity_ContestLobby_Text_188DDA, 2 end diff --git a/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc b/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc index 95945a595..638bf8cf1 100644 --- a/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc +++ b/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc @@ -4,9 +4,9 @@ LilycoveCity_CoveLilyMotel_1F_MapScripts:: @ 81582C4 LilycoveCity_CoveLilyMotel_1F_EventScript_1582C5:: @ 81582C5 lockall checkflag 2052 - jumpeq LilycoveCity_CoveLilyMotel_1F_EventScript_158326 + goto_if_eq LilycoveCity_CoveLilyMotel_1F_EventScript_158326 checkflag 2061 - jumpeq LilycoveCity_CoveLilyMotel_1F_EventScript_1582FF + goto_if_eq LilycoveCity_CoveLilyMotel_1F_EventScript_1582FF msgbox LilycoveCity_CoveLilyMotel_1F_Text_186B71, 4 move 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0839 waitmove 0 diff --git a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc index 48758ac5c..f5c511179 100644 --- a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc +++ b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc @@ -5,12 +5,12 @@ LilycoveCity_CoveLilyMotel_2F_EventScript_1583A1:: @ 81583A1 lock faceplayer checkflag 2 - callif 0, LilycoveCity_CoveLilyMotel_2F_EventScript_1583C7 + call_if 0, LilycoveCity_CoveLilyMotel_2F_EventScript_1583C7 checkflag 2 - callif 1, LilycoveCity_CoveLilyMotel_2F_EventScript_1583DD + call_if 1, LilycoveCity_CoveLilyMotel_2F_EventScript_1583DD specialval RESULT, sub_8090FC0 compare RESULT, 1 - jumpeq LilycoveCity_CoveLilyMotel_2F_EventScript_1583D0 + goto_if_eq LilycoveCity_CoveLilyMotel_2F_EventScript_1583D0 release end diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc index b28fe3a47..9a9843053 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc @@ -5,7 +5,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A39C:: @ 815A39C lock faceplayer checkflag 2 - callif 0, LilycoveCity_DepartmentStoreElevator_EventScript_15A4CF + call_if 0, LilycoveCity_DepartmentStoreElevator_EventScript_15A4CF copyvar 0x8005, 0x4043 special sub_810E944 message LilycoveCity_DepartmentStoreElevator_Text_1A0EF6 @@ -23,7 +23,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A39C:: @ 815A39C LilycoveCity_DepartmentStoreElevator_EventScript_15A402:: @ 815A402 warpplace LilycoveCity_DepartmentStore_1F, 255, 2, 1 compare 0x4043, 0 - jumpeq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 + goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 0 goto LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 @@ -32,7 +32,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A402:: @ 815A402 LilycoveCity_DepartmentStoreElevator_EventScript_15A425:: @ 815A425 warpplace LilycoveCity_DepartmentStore_2F, 255, 2, 1 compare 0x4043, 1 - jumpeq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 + goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 1 goto LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 @@ -41,7 +41,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A425:: @ 815A425 LilycoveCity_DepartmentStoreElevator_EventScript_15A448:: @ 815A448 warpplace LilycoveCity_DepartmentStore_3F, 255, 2, 1 compare 0x4043, 2 - jumpeq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 + goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 2 goto LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 @@ -50,7 +50,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A448:: @ 815A448 LilycoveCity_DepartmentStoreElevator_EventScript_15A46B:: @ 815A46B warpplace LilycoveCity_DepartmentStore_4F, 255, 2, 1 compare 0x4043, 3 - jumpeq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 + goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 3 goto LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 @@ -59,7 +59,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A46B:: @ 815A46B LilycoveCity_DepartmentStoreElevator_EventScript_15A48E:: @ 815A48E warpplace LilycoveCity_DepartmentStore_5F, 255, 2, 1 compare 0x4043, 4 - jumpeq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 + goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 4 goto LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc index c1be4bbe7..f3989bc2a 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc @@ -5,9 +5,9 @@ LilycoveCity_DepartmentStoreRooftop_MapScripts:: @ 815A13F LilycoveCity_DepartmentStoreRooftop_MapScript1_15A145:: @ 815A145 event_96 3 compare RESULT, 1 - callif 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A15F + call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A15F compare RESULT, 0 - callif 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A163 + call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A163 end LilycoveCity_DepartmentStoreRooftop_EventScript_15A15F:: @ 815A15F @@ -53,7 +53,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A1A0:: @ 815A1A0 faceplayer event_96 3 compare RESULT, 1 - callif 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A1BA + call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A1BA msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C61F, 4 release end @@ -128,22 +128,22 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A260:: @ 815A260 LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 compare 0x4001, 0 - callif 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A23D + call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A23D compare 0x4001, 1 - callif 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A244 + call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A244 compare 0x4001, 2 - callif 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A24B + call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A24B compare RESULT, 0 - jumpeq LilycoveCity_DepartmentStoreRooftop_EventScript_15A37A + goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_15A37A checkitemspace 0x4000, 1 compare RESULT, 0 - jumpeq LilycoveCity_DepartmentStoreRooftop_EventScript_15A388 + goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_15A388 compare 0x4001, 0 - callif 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A252 + call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A252 compare 0x4001, 1 - callif 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A259 + call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A259 compare 0x4001, 2 - callif 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A260 + call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A260 updatemoney 0, 0 nop bufferitem 0, 0x4000 @@ -155,10 +155,10 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 msgbox LilycoveCity_DepartmentStoreRooftop_Text_1A0C8C, 4 random 64 compare RESULT, 0 - jumpif 5, LilycoveCity_DepartmentStoreRooftop_EventScript_15A36E + goto_if 5, LilycoveCity_DepartmentStoreRooftop_EventScript_15A36E checkitemspace 0x4000, 1 compare RESULT, 0 - jumpeq LilycoveCity_DepartmentStoreRooftop_EventScript_15A388 + goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_15A388 playsfx 106 msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C780, 4 additem 0x4000, 1 @@ -167,10 +167,10 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 msgbox LilycoveCity_DepartmentStoreRooftop_Text_1A0C8C, 4 random 64 compare RESULT, 0 - jumpif 5, LilycoveCity_DepartmentStoreRooftop_EventScript_15A36E + goto_if 5, LilycoveCity_DepartmentStoreRooftop_EventScript_15A36E checkitemspace 0x4000, 1 compare RESULT, 0 - jumpeq LilycoveCity_DepartmentStoreRooftop_EventScript_15A388 + goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_15A388 playsfx 106 msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C780, 4 additem 0x4000, 1 diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc index ac1198aee..5704a090b 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc @@ -10,12 +10,12 @@ LilycoveCity_DepartmentStore_1F_EventScript_159D5E:: @ 8159D5E faceplayer checkdailyflags compare 0x4045, 0 - jumpif 5, LilycoveCity_DepartmentStore_1F_EventScript_159EB1 + goto_if 5, LilycoveCity_DepartmentStore_1F_EventScript_159EB1 checkflag 2250 - jumpeq LilycoveCity_DepartmentStore_1F_EventScript_159E4C + goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E4C msgbox LilycoveCity_DepartmentStore_1F_Text_1C4B5E, 5 compare RESULT, 0 - jumpeq LilycoveCity_DepartmentStore_1F_EventScript_159E56 + goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E56 setflag 2250 message LilycoveCity_DepartmentStore_1F_Text_1C4CC6 waittext @@ -34,24 +34,24 @@ LilycoveCity_DepartmentStore_1F_EventScript_159D5E:: @ 8159D5E move 2, LilycoveCity_DepartmentStore_1F_Movement_1A0839 waitmove 0 compare 0x8004, 0 - jumpeq LilycoveCity_DepartmentStore_1F_EventScript_159E60 + goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E60 inccounter GAME_STAT_WON_POKEMON_LOTTERY compare 0x8006, 0 - callif 1, LilycoveCity_DepartmentStore_1F_EventScript_159E3A + call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E3A compare 0x8006, 1 - callif 1, LilycoveCity_DepartmentStore_1F_EventScript_159E43 + call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E43 bufferitem 0, 0x8005 compare 0x8004, 1 - callif 1, LilycoveCity_DepartmentStore_1F_EventScript_159E78 + call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E78 compare 0x8004, 2 - callif 1, LilycoveCity_DepartmentStore_1F_EventScript_159E81 + call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E81 compare 0x8004, 3 - callif 1, LilycoveCity_DepartmentStore_1F_EventScript_159E8A + call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E8A compare 0x8004, 4 - callif 1, LilycoveCity_DepartmentStore_1F_EventScript_159E93 + call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E93 giveitem 0x8005 compare RESULT, 0 - jumpeq LilycoveCity_DepartmentStore_1F_EventScript_159E9C + goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E9C goto LilycoveCity_DepartmentStore_1F_EventScript_159E6E end @@ -113,7 +113,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_159EB1:: @ 8159EB1 msgbox LilycoveCity_DepartmentStore_1F_Text_1C4FCC, 4 giveitem 0x4045 compare RESULT, 0 - jumpeq LilycoveCity_DepartmentStore_1F_EventScript_159EA7 + goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159EA7 setvar 0x4045, 0 release end diff --git a/data/scripts/maps/LilycoveCity_Harbor.inc b/data/scripts/maps/LilycoveCity_Harbor.inc index 471d1f8b5..884b43bb1 100644 --- a/data/scripts/maps/LilycoveCity_Harbor.inc +++ b/data/scripts/maps/LilycoveCity_Harbor.inc @@ -11,13 +11,13 @@ LilycoveCity_Harbor_EventScript_1598A2:: @ 81598A2 faceplayer checkitem ITEM_EON_TICKET, 1 compare RESULT, 1 - jumpeq LilycoveCity_Harbor_EventScript_1599EE + goto_if_eq LilycoveCity_Harbor_EventScript_1599EE goto LilycoveCity_Harbor_EventScript_1598BA end LilycoveCity_Harbor_EventScript_1598BA:: @ 81598BA checkflag 2052 - jumpeq LilycoveCity_Harbor_EventScript_1598CD + goto_if_eq LilycoveCity_Harbor_EventScript_1598CD msgbox LilycoveCity_Harbor_Text_18B306, 4 release end @@ -26,7 +26,7 @@ LilycoveCity_Harbor_EventScript_1598CD:: @ 81598CD msgbox LilycoveCity_Harbor_Text_18B36F, 4 checkitem ITEM_SS_TICKET, 1 compare RESULT, 0 - jumpeq LilycoveCity_Harbor_EventScript_159929 + goto_if_eq LilycoveCity_Harbor_EventScript_159929 message LilycoveCity_Harbor_Text_18B406 waittext goto LilycoveCity_Harbor_EventScript_1598F1 @@ -49,7 +49,7 @@ LilycoveCity_Harbor_EventScript_159929:: @ 8159929 LilycoveCity_Harbor_EventScript_159933:: @ 8159933 msgbox LilycoveCity_Harbor_Text_18B47D, 5 compare RESULT, 0 - jumpeq LilycoveCity_Harbor_EventScript_15997E + goto_if_eq LilycoveCity_Harbor_EventScript_15997E setvar 0x40b4, 5 call LilycoveCity_Harbor_EventScript_15998A warp SSTidalCorridor, 255, 1, 10 @@ -60,7 +60,7 @@ LilycoveCity_Harbor_EventScript_159933:: @ 8159933 LilycoveCity_Harbor_EventScript_15995B:: @ 815995B msgbox LilycoveCity_Harbor_Text_18B499, 5 compare RESULT, 0 - jumpeq LilycoveCity_Harbor_EventScript_15997E + goto_if_eq LilycoveCity_Harbor_EventScript_15997E call LilycoveCity_Harbor_EventScript_15998A warp BattleTower_Outside, 255, 19, 23 waitstate @@ -81,9 +81,9 @@ LilycoveCity_Harbor_EventScript_15998A:: @ 815998A pause 30 spriteinvisible LAST_TALKED, 13, 10 compare FACING, 2 - callif 1, LilycoveCity_Harbor_EventScript_1599D9 + call_if 1, LilycoveCity_Harbor_EventScript_1599D9 compare FACING, 4 - callif 1, LilycoveCity_Harbor_EventScript_1599CE + call_if 1, LilycoveCity_Harbor_EventScript_1599CE pause 30 spriteinvisible 255, 0, 0 setvar 0x8004, 2 @@ -107,11 +107,11 @@ LilycoveCity_Harbor_EventScript_1599E4:: @ 81599E4 LilycoveCity_Harbor_EventScript_1599EE:: @ 81599EE checkflag 2052 - jumpif 0, LilycoveCity_Harbor_EventScript_1598BA + goto_if 0, LilycoveCity_Harbor_EventScript_1598BA checkflag 206 - jumpeq LilycoveCity_Harbor_EventScript_1598BA + goto_if_eq LilycoveCity_Harbor_EventScript_1598BA checkflag 2131 - jumpif 0, LilycoveCity_Harbor_EventScript_1598BA + goto_if 0, LilycoveCity_Harbor_EventScript_1598BA msgbox LilycoveCity_Harbor_Text_1C50F2, 4 closebutton move LAST_TALKED, LilycoveCity_Harbor_Movement_1A0841 @@ -130,9 +130,9 @@ LilycoveCity_Harbor_EventScript_1599EE:: @ 81599EE pause 30 disappear 4 compare FACING, 2 - callif 1, LilycoveCity_Harbor_EventScript_1599D9 + call_if 1, LilycoveCity_Harbor_EventScript_1599D9 compare FACING, 4 - callif 1, LilycoveCity_Harbor_EventScript_1599CE + call_if 1, LilycoveCity_Harbor_EventScript_1599CE pause 30 spriteinvisible 255, 0, 0 special ScrSpecial_HealPlayerParty @@ -160,7 +160,7 @@ LilycoveCity_Harbor_EventScript_159A8D:: @ 8159A8D lock faceplayer checkflag 2052 - jumpeq LilycoveCity_Harbor_EventScript_159AA2 + goto_if_eq LilycoveCity_Harbor_EventScript_159AA2 msgbox LilycoveCity_Harbor_Text_18B504, 4 release end diff --git a/data/scripts/maps/LilycoveCity_House2.inc b/data/scripts/maps/LilycoveCity_House2.inc index 75780667d..d3399f5ac 100644 --- a/data/scripts/maps/LilycoveCity_House2.inc +++ b/data/scripts/maps/LilycoveCity_House2.inc @@ -5,11 +5,11 @@ LilycoveCity_House2_EventScript_159BA3:: @ 8159BA3 lock faceplayer checkflag 234 - jumpeq LilycoveCity_House2_EventScript_159BDA + goto_if_eq LilycoveCity_House2_EventScript_159BDA msgbox LilycoveCity_House2_Text_18B83C, 4 giveitem ITEM_TM44 compare RESULT, 0 - jumpeq LilycoveCity_House2_EventScript_1A029B + goto_if_eq LilycoveCity_House2_EventScript_1A029B setflag 234 msgbox LilycoveCity_House2_Text_18B883, 4 release diff --git a/data/scripts/maps/LilycoveCity_House3.inc b/data/scripts/maps/LilycoveCity_House3.inc index 51e4988b3..6926f4f45 100644 --- a/data/scripts/maps/LilycoveCity_House3.inc +++ b/data/scripts/maps/LilycoveCity_House3.inc @@ -12,7 +12,7 @@ LilycoveCity_House3_EventScript_159BF3:: @ 8159BF3 faceplayer msgbox LilycoveCity_House3_Text_18B8CC, 5 compare RESULT, 0 - jumpeq LilycoveCity_House3_EventScript_159C1D + goto_if_eq LilycoveCity_House3_EventScript_159C1D msgbox LilycoveCity_House3_Text_18BA2B, 4 closebutton move LAST_TALKED, LilycoveCity_House3_Movement_1A083D diff --git a/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc b/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc index a481f9c32..c0fa73360 100644 --- a/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc +++ b/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc @@ -12,9 +12,9 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_158425:: @ 8158425 waittext multichoice 20, 8, 16, 1 compare RESULT, 0 - jumpeq LilycoveCity_LilycoveMuseum_1F_EventScript_158458 + goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_158458 compare RESULT, 1 - jumpeq LilycoveCity_LilycoveMuseum_1F_EventScript_15844F + goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_15844F end LilycoveCity_LilycoveMuseum_1F_EventScript_15844F:: @ 815844F @@ -24,9 +24,9 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_15844F:: @ 815844F LilycoveCity_LilycoveMuseum_1F_EventScript_158458:: @ 8158458 msgbox LilycoveCity_LilycoveMuseum_1F_Text_187495, 5 compare RESULT, 0 - jumpeq LilycoveCity_LilycoveMuseum_1F_EventScript_158477 + goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_158477 compare RESULT, 1 - jumpeq LilycoveCity_LilycoveMuseum_1F_EventScript_158481 + goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_158481 end LilycoveCity_LilycoveMuseum_1F_EventScript_158477:: @ 8158477 diff --git a/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc b/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc index 06a3ae4ca..ec316b576 100644 --- a/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc +++ b/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc @@ -5,31 +5,31 @@ LilycoveCity_LilycoveMuseum_2F_MapScripts:: @ 81585AC LilycoveCity_LilycoveMuseum_2F_MapScript1_1585B7:: @ 81585B7 checkflag 160 - jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_1585FD + goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_1585FD goto LilycoveCity_LilycoveMuseum_2F_EventScript_1585C6 end LilycoveCity_LilycoveMuseum_2F_EventScript_1585C6:: @ 81585C6 checkflag 161 - jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_158615 + goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_158615 goto LilycoveCity_LilycoveMuseum_2F_EventScript_1585D5 end LilycoveCity_LilycoveMuseum_2F_EventScript_1585D5:: @ 81585D5 checkflag 162 - jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_15862D + goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_15862D goto LilycoveCity_LilycoveMuseum_2F_EventScript_1585E4 end LilycoveCity_LilycoveMuseum_2F_EventScript_1585E4:: @ 81585E4 checkflag 163 - jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_158645 + goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_158645 goto LilycoveCity_LilycoveMuseum_2F_EventScript_1585F3 end LilycoveCity_LilycoveMuseum_2F_EventScript_1585F3:: @ 81585F3 checkflag 164 - jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_15865D + goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_15865D end LilycoveCity_LilycoveMuseum_2F_EventScript_1585FD:: @ 81585FD @@ -97,7 +97,7 @@ LilycoveCity_LilycoveMuseum_2F_Movement_1586D5:: @ 81586D5 LilycoveCity_LilycoveMuseum_2F_EventScript_1586D8:: @ 81586D8 lockall checkflag 236 - jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_158793 + goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_158793 specialval 0x8004, sub_80C4D50 switch 0x8004 case 1, LilycoveCity_LilycoveMuseum_2F_EventScript_15872C @@ -126,7 +126,7 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_15875C:: @ 815875C msgbox LilycoveCity_LilycoveMuseum_2F_Text_188120, 4 givedecoration 44 compare RESULT, 0 - jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_158783 + goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_158783 setflag 236 closebutton releaseall @@ -147,35 +147,35 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_158793:: @ 8158793 LilycoveCity_LilycoveMuseum_2F_EventScript_15879D:: @ 815879D lockall checkflag 162 - jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_15883C + goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_15883C msgbox LilycoveCity_LilycoveMuseum_2F_Text_188219, 3 end LilycoveCity_LilycoveMuseum_2F_EventScript_1587B0:: @ 81587B0 lockall checkflag 164 - jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_158858 + goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_158858 msgbox LilycoveCity_LilycoveMuseum_2F_Text_18824C, 3 end LilycoveCity_LilycoveMuseum_2F_EventScript_1587C3:: @ 81587C3 lockall checkflag 160 - jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_158820 + goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_158820 msgbox LilycoveCity_LilycoveMuseum_2F_Text_1882B4, 3 end LilycoveCity_LilycoveMuseum_2F_EventScript_1587D6:: @ 81587D6 lockall checkflag 161 - jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_15882E + goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_15882E msgbox LilycoveCity_LilycoveMuseum_2F_Text_188281, 3 end LilycoveCity_LilycoveMuseum_2F_EventScript_1587E9:: @ 81587E9 lockall checkflag 163 - jumpeq LilycoveCity_LilycoveMuseum_2F_EventScript_15884A + goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_15884A msgbox LilycoveCity_LilycoveMuseum_2F_Text_1882E6, 3 end diff --git a/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc b/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc index 2786c930c..286ad055e 100644 --- a/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc +++ b/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc @@ -17,19 +17,19 @@ LilycoveCity_MoveDeletersHouse_EventScript_159ADE:: @ 8159ADE special sub_80F9A0C waitstate compare 0x8004, 255 - jumpeq LilycoveCity_MoveDeletersHouse_EventScript_159B7B + goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_159B7B special sub_80FA148 compare RESULT, 1 - jumpeq LilycoveCity_MoveDeletersHouse_EventScript_159B71 + goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_159B71 special ScrSpecial_CountPokemonMoves compare RESULT, 1 - jumpeq LilycoveCity_MoveDeletersHouse_EventScript_159B64 + goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_159B64 msgbox LilycoveCity_MoveDeletersHouse_Text_18B6B0, 4 fadescreen 1 special sub_80F9EEC fadescreen 0 compare 0x8005, 4 - jumpeq LilycoveCity_MoveDeletersHouse_EventScript_159ADE + goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_159ADE special ScrSpecial_GetPokemonNicknameAndMoveName msgbox LilycoveCity_MoveDeletersHouse_Text_18B6F2, 5 switch RESULT diff --git a/data/scripts/maps/LilycoveCity_PokemonCenter_1F.inc b/data/scripts/maps/LilycoveCity_PokemonCenter_1F.inc index 5809e28c8..b398076fa 100644 --- a/data/scripts/maps/LilycoveCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/LilycoveCity_PokemonCenter_1F.inc @@ -22,7 +22,7 @@ LilycoveCity_PokemonCenter_1F_EventScript_159348:: @ 8159348 lock faceplayer checkflag 2061 - jumpeq LilycoveCity_PokemonCenter_1F_EventScript_15935D + goto_if_eq LilycoveCity_PokemonCenter_1F_EventScript_15935D msgbox LilycoveCity_PokemonCenter_1F_Text_18A048, 4 release end diff --git a/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc b/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc index e503ef4ec..14806cba4 100644 --- a/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc +++ b/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc @@ -62,9 +62,9 @@ LilycoveCity_PokemonTrainerFanClub_Movement_15940C:: @ 815940C LilycoveCity_PokemonTrainerFanClub_MapScript1_159412:: @ 8159412 compare 0x4095, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159515 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159515 compare 0x4095, 2 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159429 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159429 end LilycoveCity_PokemonTrainerFanClub_EventScript_159429:: @ 8159429 @@ -72,35 +72,35 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159429:: @ 8159429 setvar 0x8004, 8 specialval RESULT, sub_810FD60 compare RESULT, 0 - callif 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594D5 + call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594D5 setvar 0x8004, 9 specialval RESULT, sub_810FD60 compare RESULT, 0 - callif 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594DD + call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594DD setvar 0x8004, 10 specialval RESULT, sub_810FD60 compare RESULT, 0 - callif 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594E5 + call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594E5 setvar 0x8004, 11 specialval RESULT, sub_810FD60 compare RESULT, 0 - callif 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594ED + call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594ED setvar 0x8004, 12 specialval RESULT, sub_810FD60 compare RESULT, 0 - callif 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594F5 + call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594F5 setvar 0x8004, 13 specialval RESULT, sub_810FD60 compare RESULT, 0 - callif 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594FD + call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594FD setvar 0x8004, 14 specialval RESULT, sub_810FD60 compare RESULT, 0 - callif 1, LilycoveCity_PokemonTrainerFanClub_EventScript_159505 + call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_159505 setvar 0x8004, 15 specialval RESULT, sub_810FD60 compare RESULT, 0 - callif 1, LilycoveCity_PokemonTrainerFanClub_EventScript_15950D + call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_15950D end LilycoveCity_PokemonTrainerFanClub_EventScript_1594D5:: @ 81594D5 @@ -149,13 +149,13 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15952F:: @ 815952F setvar 0x8004, 13 special sub_810FDAC compare 0x4095, 0 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_15959C + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15959C specialval RESULT, sub_810FD60 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_15956E + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15956E specialval RESULT, sub_810FCB0 compare RESULT, 7 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159592 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159592 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A400, 4 release end @@ -163,7 +163,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15952F:: @ 815952F LilycoveCity_PokemonTrainerFanClub_EventScript_15956E:: @ 815956E specialval RESULT, sub_810FCB0 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159588 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159588 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A36A, 4 release end @@ -189,13 +189,13 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1595A6:: @ 81595A6 setvar 0x8004, 8 special sub_810FDAC compare 0x4095, 0 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159613 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159613 specialval RESULT, sub_810FD60 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_1595E5 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1595E5 specialval RESULT, sub_810FCB0 compare RESULT, 7 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159609 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159609 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A629, 4 release end @@ -203,7 +203,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1595A6:: @ 81595A6 LilycoveCity_PokemonTrainerFanClub_EventScript_1595E5:: @ 81595E5 specialval RESULT, sub_810FCB0 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_1595FF + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1595FF msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A584, 4 release end @@ -229,13 +229,13 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15961D:: @ 815961D setvar 0x8004, 9 special sub_810FDAC compare 0x4095, 0 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_15968A + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15968A specialval RESULT, sub_810FD60 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_15965C + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15965C specialval RESULT, sub_810FCB0 compare RESULT, 7 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159680 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159680 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A814, 4 release end @@ -243,7 +243,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15961D:: @ 815961D LilycoveCity_PokemonTrainerFanClub_EventScript_15965C:: @ 815965C specialval RESULT, sub_810FCB0 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159676 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159676 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A71E, 4 release end @@ -269,13 +269,13 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159694:: @ 8159694 setvar 0x8004, 10 special sub_810FDAC compare 0x4095, 0 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159701 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159701 specialval RESULT, sub_810FD60 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_1596D3 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1596D3 specialval RESULT, sub_810FCB0 compare RESULT, 7 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_1596F7 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1596F7 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AB0A, 4 release end @@ -283,7 +283,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159694:: @ 8159694 LilycoveCity_PokemonTrainerFanClub_EventScript_1596D3:: @ 81596D3 specialval RESULT, sub_810FCB0 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_1596ED + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1596ED msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AA39, 4 release end @@ -310,10 +310,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15970B:: @ 815970B special sub_810FDAC specialval RESULT, sub_810FD60 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_15973F + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15973F specialval RESULT, sub_810FCB0 compare RESULT, 7 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159763 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159763 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18ACC7, 4 release end @@ -321,7 +321,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15970B:: @ 815970B LilycoveCity_PokemonTrainerFanClub_EventScript_15973F:: @ 815973F specialval RESULT, sub_810FCB0 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159759 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159759 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AC15, 4 release end @@ -343,10 +343,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15976D:: @ 815976D special sub_810FDAC specialval RESULT, sub_810FD60 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_1597A1 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1597A1 specialval RESULT, sub_810FCB0 compare RESULT, 7 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_1597C5 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1597C5 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AE63, 4 release end @@ -354,7 +354,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15976D:: @ 815976D LilycoveCity_PokemonTrainerFanClub_EventScript_1597A1:: @ 81597A1 specialval RESULT, sub_810FCB0 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_1597BB + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1597BB msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AD6D, 4 release end @@ -376,10 +376,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1597CF:: @ 81597CF special sub_810FDAC specialval RESULT, sub_810FD60 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159803 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159803 specialval RESULT, sub_810FCB0 compare RESULT, 7 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159827 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159827 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18B030, 4 release end @@ -387,7 +387,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1597CF:: @ 81597CF LilycoveCity_PokemonTrainerFanClub_EventScript_159803:: @ 8159803 specialval RESULT, sub_810FCB0 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_15981D + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15981D msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AF62, 4 release end @@ -409,10 +409,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159831:: @ 8159831 special sub_810FDAC specialval RESULT, sub_810FD60 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159865 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159865 specialval RESULT, sub_810FCB0 compare RESULT, 7 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_159889 + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159889 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18B1FD, 4 release end @@ -420,7 +420,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159831:: @ 8159831 LilycoveCity_PokemonTrainerFanClub_EventScript_159865:: @ 8159865 specialval RESULT, sub_810FCB0 compare RESULT, 1 - jumpeq LilycoveCity_PokemonTrainerFanClub_EventScript_15987F + goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15987F msgbox LilycoveCity_PokemonTrainerFanClub_Text_18B16E, 4 release end diff --git a/data/scripts/maps/LittlerootTown.inc b/data/scripts/maps/LittlerootTown.inc index 2da725de7..1c019e046 100644 --- a/data/scripts/maps/LittlerootTown.inc +++ b/data/scripts/maps/LittlerootTown.inc @@ -6,19 +6,19 @@ LittlerootTown_MapScripts:: @ 814D509 LittlerootTown_MapScript1_14D514:: @ 814D514 setflag 2063 compare 0x4092, 2 - callif 1, LittlerootTown_EventScript_14D57B + call_if 1, LittlerootTown_EventScript_14D57B checkflag 82 - callif 0, LittlerootTown_EventScript_14D583 + call_if 0, LittlerootTown_EventScript_14D583 compare 0x4050, 3 - callif 1, LittlerootTown_EventScript_14D5A6 + call_if 1, LittlerootTown_EventScript_14D5A6 compare 0x4082, 4 - callif 1, LittlerootTown_EventScript_14D570 + call_if 1, LittlerootTown_EventScript_14D570 compare 0x408c, 4 - callif 1, LittlerootTown_EventScript_14D570 + call_if 1, LittlerootTown_EventScript_14D570 compare 0x40c7, 1 - callif 1, LittlerootTown_EventScript_14D567 + call_if 1, LittlerootTown_EventScript_14D567 compare 0x408d, 3 - callif 1, LittlerootTown_EventScript_14D563 + call_if 1, LittlerootTown_EventScript_14D563 end LittlerootTown_EventScript_14D563:: @ 814D563 @@ -41,7 +41,7 @@ LittlerootTown_EventScript_14D57B:: @ 814D57B LittlerootTown_EventScript_14D583:: @ 814D583 compare 0x4050, 0 - jumpeq LittlerootTown_EventScript_14D59A + goto_if_eq LittlerootTown_EventScript_14D59A movespriteperm 1, 10, 1 spritebehave 1, 7 return @@ -56,9 +56,9 @@ LittlerootTown_EventScript_14D5A6:: @ 814D5A6 spritebehave 4, 8 checkgender compare RESULT, 0 - callif 1, LittlerootTown_EventScript_14D5C5 + call_if 1, LittlerootTown_EventScript_14D5C5 compare RESULT, 1 - callif 1, LittlerootTown_EventScript_14D5CD + call_if 1, LittlerootTown_EventScript_14D5CD return LittlerootTown_EventScript_14D5C5:: @ 814D5C5 @@ -188,11 +188,11 @@ LittlerootTown_EventScript_14D6DF:: @ 814D6DF lock faceplayer checkflag 116 - jumpeq LittlerootTown_EventScript_14D72F + goto_if_eq LittlerootTown_EventScript_14D72F checkflag 82 - jumpeq LittlerootTown_EventScript_14D722 + goto_if_eq LittlerootTown_EventScript_14D722 compare 0x4050, 0 - jumpif 5, LittlerootTown_EventScript_14D708 + goto_if 5, LittlerootTown_EventScript_14D708 msgbox LittlerootTown_Text_16ACEB, 4 release end @@ -335,9 +335,9 @@ LittlerootTown_EventScript_14D808:: @ 814D808 lockall checkgender compare RESULT, 0 - callif 1, LittlerootTown_EventScript_14D822 + call_if 1, LittlerootTown_EventScript_14D822 compare RESULT, 1 - callif 1, LittlerootTown_EventScript_14D82B + call_if 1, LittlerootTown_EventScript_14D82B releaseall end @@ -353,9 +353,9 @@ LittlerootTown_EventScript_14D834:: @ 814D834 lockall checkgender compare RESULT, 0 - callif 1, LittlerootTown_EventScript_14D84E + call_if 1, LittlerootTown_EventScript_14D84E compare RESULT, 1 - callif 1, LittlerootTown_EventScript_14D857 + call_if 1, LittlerootTown_EventScript_14D857 releaseall end @@ -408,27 +408,27 @@ LittlerootTown_EventScript_14D8AA:: @ 814D8AA LittlerootTown_EventScript_14D8B6:: @ 814D8B6 checkgender compare RESULT, 0 - callif 1, LittlerootTown_EventScript_14D93C + call_if 1, LittlerootTown_EventScript_14D93C compare RESULT, 1 - callif 1, LittlerootTown_EventScript_14D947 + call_if 1, LittlerootTown_EventScript_14D947 checkgender compare RESULT, 0 - callif 1, LittlerootTown_EventScript_14D926 + call_if 1, LittlerootTown_EventScript_14D926 compare RESULT, 1 - callif 1, LittlerootTown_EventScript_14D931 + call_if 1, LittlerootTown_EventScript_14D931 msgbox LittlerootTown_Text_16A8EE, 4 closebutton checkgender compare RESULT, 0 - callif 1, LittlerootTown_EventScript_14D952 + call_if 1, LittlerootTown_EventScript_14D952 compare RESULT, 1 - callif 1, LittlerootTown_EventScript_14D995 + call_if 1, LittlerootTown_EventScript_14D995 call LittlerootTown_EventScript_14DD38 checkgender compare RESULT, 0 - callif 1, LittlerootTown_EventScript_14DAAA + call_if 1, LittlerootTown_EventScript_14DAAA compare RESULT, 1 - callif 1, LittlerootTown_EventScript_14DAED + call_if 1, LittlerootTown_EventScript_14DAED goto LittlerootTown_EventScript_14DD2B end @@ -454,32 +454,32 @@ LittlerootTown_EventScript_14D947:: @ 814D947 LittlerootTown_EventScript_14D952:: @ 814D952 compare 0x8008, 0 - callif 1, LittlerootTown_EventScript_14D9D8 + call_if 1, LittlerootTown_EventScript_14D9D8 compare 0x8008, 1 - callif 1, LittlerootTown_EventScript_14D9ED + call_if 1, LittlerootTown_EventScript_14D9ED compare 0x8008, 2 - callif 1, LittlerootTown_EventScript_14DA02 + call_if 1, LittlerootTown_EventScript_14DA02 compare 0x8008, 3 - callif 1, LittlerootTown_EventScript_14DA17 + call_if 1, LittlerootTown_EventScript_14DA17 compare 0x8008, 4 - callif 1, LittlerootTown_EventScript_14DA2C + call_if 1, LittlerootTown_EventScript_14DA2C compare 0x8008, 5 - callif 1, LittlerootTown_EventScript_14DA41 + call_if 1, LittlerootTown_EventScript_14DA41 return LittlerootTown_EventScript_14D995:: @ 814D995 compare 0x8008, 0 - callif 1, LittlerootTown_EventScript_14D9D8 + call_if 1, LittlerootTown_EventScript_14D9D8 compare 0x8008, 1 - callif 1, LittlerootTown_EventScript_14D9ED + call_if 1, LittlerootTown_EventScript_14D9ED compare 0x8008, 2 - callif 1, LittlerootTown_EventScript_14DA56 + call_if 1, LittlerootTown_EventScript_14DA56 compare 0x8008, 3 - callif 1, LittlerootTown_EventScript_14DA6B + call_if 1, LittlerootTown_EventScript_14DA6B compare 0x8008, 4 - callif 1, LittlerootTown_EventScript_14DA80 + call_if 1, LittlerootTown_EventScript_14DA80 compare 0x8008, 5 - callif 1, LittlerootTown_EventScript_14DA95 + call_if 1, LittlerootTown_EventScript_14DA95 return LittlerootTown_EventScript_14D9D8:: @ 814D9D8 @@ -554,32 +554,32 @@ LittlerootTown_EventScript_14DA95:: @ 814DA95 LittlerootTown_EventScript_14DAAA:: @ 814DAAA compare 0x8008, 0 - callif 1, LittlerootTown_EventScript_14DB30 + call_if 1, LittlerootTown_EventScript_14DB30 compare 0x8008, 1 - callif 1, LittlerootTown_EventScript_14DB3B + call_if 1, LittlerootTown_EventScript_14DB3B compare 0x8008, 2 - callif 1, LittlerootTown_EventScript_14DB46 + call_if 1, LittlerootTown_EventScript_14DB46 compare 0x8008, 3 - callif 1, LittlerootTown_EventScript_14DB6C + call_if 1, LittlerootTown_EventScript_14DB6C compare 0x8008, 4 - callif 1, LittlerootTown_EventScript_14DB92 + call_if 1, LittlerootTown_EventScript_14DB92 compare 0x8008, 5 - callif 1, LittlerootTown_EventScript_14DBB8 + call_if 1, LittlerootTown_EventScript_14DBB8 return LittlerootTown_EventScript_14DAED:: @ 814DAED compare 0x8008, 0 - callif 1, LittlerootTown_EventScript_14DB30 + call_if 1, LittlerootTown_EventScript_14DB30 compare 0x8008, 1 - callif 1, LittlerootTown_EventScript_14DB3B + call_if 1, LittlerootTown_EventScript_14DB3B compare 0x8008, 2 - callif 1, LittlerootTown_EventScript_14DBDE + call_if 1, LittlerootTown_EventScript_14DBDE compare 0x8008, 3 - callif 1, LittlerootTown_EventScript_14DC04 + call_if 1, LittlerootTown_EventScript_14DC04 compare 0x8008, 4 - callif 1, LittlerootTown_EventScript_14DC2A + call_if 1, LittlerootTown_EventScript_14DC2A compare 0x8008, 5 - callif 1, LittlerootTown_EventScript_14DC50 + call_if 1, LittlerootTown_EventScript_14DC50 return LittlerootTown_EventScript_14DB30:: @ 814DB30 @@ -843,9 +843,9 @@ LittlerootTown_EventScript_14DCE2:: @ 814DCE2 faceplayer checkgender compare RESULT, 0 - callif 1, LittlerootTown_EventScript_14D926 + call_if 1, LittlerootTown_EventScript_14D926 compare RESULT, 1 - callif 1, LittlerootTown_EventScript_14D931 + call_if 1, LittlerootTown_EventScript_14D931 call LittlerootTown_EventScript_14DD38 move 4, LittlerootTown_Movement_1A0841 waitmove 0 diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc index 849115390..ca872ba0f 100644 --- a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc @@ -6,9 +6,9 @@ LittlerootTown_BrendansHouse_1F_MapScripts:: @ 815263B LittlerootTown_BrendansHouse_1F_MapScript1_15264B:: @ 815264B compare 0x4092, 6 - callif 0, LittlerootTown_BrendansHouse_1F_EventScript_152660 + call_if 0, LittlerootTown_BrendansHouse_1F_EventScript_152660 checkflag 274 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_152673 + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_152673 end LittlerootTown_BrendansHouse_1F_EventScript_152660:: @ 8152660 @@ -19,7 +19,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_152660:: @ 8152660 LittlerootTown_BrendansHouse_1F_EventScript_152673:: @ 8152673 checkgender compare RESULT, 0 - jumpeq LittlerootTown_BrendansHouse_1F_EventScript_152680 + goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_152680 return LittlerootTown_BrendansHouse_1F_EventScript_152680:: @ 8152680 @@ -28,11 +28,11 @@ LittlerootTown_BrendansHouse_1F_EventScript_152680:: @ 8152680 LittlerootTown_BrendansHouse_1F_MapScript1_15268A:: @ 815268A compare 0x4092, 3 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1526C4 + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1526C4 compare 0x4092, 5 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1526AC + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1526AC compare 0x4092, 6 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1526B8 + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1526B8 end LittlerootTown_BrendansHouse_1F_EventScript_1526AC:: @ 81526AC diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc index 0803cd512..0176db332 100644 --- a/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc +++ b/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc @@ -5,9 +5,9 @@ LittlerootTown_BrendansHouse_2F_MapScripts:: @ 81527A4 LittlerootTown_BrendansHouse_2F_MapScript1_1527AF:: @ 81527AF checkflag 130 - callif 0, LittlerootTown_BrendansHouse_2F_EventScript_1527CE + call_if 0, LittlerootTown_BrendansHouse_2F_EventScript_1527CE compare 0x4092, 4 - callif 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6950 + call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6950 call LittlerootTown_BrendansHouse_2F_EventScript_1A2F3D setvar 0x4089, 0 end @@ -24,16 +24,16 @@ LittlerootTown_BrendansHouse_2F_MapScript2_1527DA:: @ 81527DA LittlerootTown_BrendansHouse_2F_EventScript_1527E4:: @ 81527E4 checkgender compare RESULT, 0 - jumpeq LittlerootTown_BrendansHouse_2F_EventScript_1A2F68 + goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_1A2F68 end @ 81527F1 lockall checkgender compare RESULT, 0 - jumpeq LittlerootTown_BrendansHouse_2F_EventScript_15280A + goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_15280A compare RESULT, 1 - jumpeq LittlerootTown_BrendansHouse_2F_EventScript_152814 + goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_152814 end LittlerootTown_BrendansHouse_2F_EventScript_15280A:: @ 815280A @@ -52,9 +52,9 @@ LittlerootTown_BrendansHouse_2F_EventScript_15281E:: @ 815281E lockall checkgender compare RESULT, 0 - jumpeq LittlerootTown_BrendansHouse_2F_EventScript_152837 + goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_152837 compare RESULT, 1 - jumpeq LittlerootTown_BrendansHouse_2F_EventScript_15285D + goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_15285D end LittlerootTown_BrendansHouse_2F_EventScript_152837:: @ 8152837 diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc index b70dc0687..1d76bb6dc 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc @@ -6,9 +6,9 @@ LittlerootTown_MaysHouse_1F_MapScripts:: @ 8152879 LittlerootTown_MaysHouse_1F_MapScript1_152889:: @ 8152889 compare 0x4092, 6 - callif 0, LittlerootTown_MaysHouse_1F_EventScript_15289E + call_if 0, LittlerootTown_MaysHouse_1F_EventScript_15289E checkflag 274 - callif 1, LittlerootTown_MaysHouse_1F_EventScript_1528B1 + call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1528B1 end LittlerootTown_MaysHouse_1F_EventScript_15289E:: @ 815289E @@ -19,7 +19,7 @@ LittlerootTown_MaysHouse_1F_EventScript_15289E:: @ 815289E LittlerootTown_MaysHouse_1F_EventScript_1528B1:: @ 81528B1 checkgender compare RESULT, 1 - jumpeq LittlerootTown_MaysHouse_1F_EventScript_1528BE + goto_if_eq LittlerootTown_MaysHouse_1F_EventScript_1528BE return LittlerootTown_MaysHouse_1F_EventScript_1528BE:: @ 81528BE @@ -28,11 +28,11 @@ LittlerootTown_MaysHouse_1F_EventScript_1528BE:: @ 81528BE LittlerootTown_MaysHouse_1F_MapScript1_1528C8:: @ 81528C8 compare 0x4092, 3 - callif 1, LittlerootTown_MaysHouse_1F_EventScript_152902 + call_if 1, LittlerootTown_MaysHouse_1F_EventScript_152902 compare 0x4092, 5 - callif 1, LittlerootTown_MaysHouse_1F_EventScript_1528EA + call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1528EA compare 0x4092, 6 - callif 1, LittlerootTown_MaysHouse_1F_EventScript_1528F6 + call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1528F6 end LittlerootTown_MaysHouse_1F_EventScript_1528EA:: @ 81528EA @@ -118,9 +118,9 @@ LittlerootTown_MaysHouse_1F_Movement_1529C0:: @ 81529C0 lockall checkgender compare RESULT, 0 - callif 1, LittlerootTown_MaysHouse_1F_EventScript_1529E1 + call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1529E1 compare RESULT, 1 - callif 1, LittlerootTown_MaysHouse_1F_EventScript_1529E2 + call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1529E2 releaseall end @@ -136,11 +136,11 @@ LittlerootTown_MaysHouse_1F_EventScript_1529EB:: @ 81529EB lock faceplayer checkflag 130 - jumpeq LittlerootTown_BrendansHouse_1F_EventScript_152A21 + goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_152A21 checkflag 301 - jumpeq LittlerootTown_BrendansHouse_1F_EventScript_152A17 + goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_152A17 compare 0x408d, 3 - jumpeq LittlerootTown_BrendansHouse_1F_EventScript_152A2B + goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_152A2B special GetRivalSonDaughterString msgbox LittlerootTown_BrendansHouse_1F_Text_1731C6, 4 release diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc index 85a41caff..a0dda8b70 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc @@ -5,9 +5,9 @@ LittlerootTown_MaysHouse_2F_MapScripts:: @ 8152A50 LittlerootTown_MaysHouse_2F_MapScript1_152A5B:: @ 8152A5B checkflag 130 - callif 0, LittlerootTown_MaysHouse_2F_EventScript_152A7A + call_if 0, LittlerootTown_MaysHouse_2F_EventScript_152A7A compare 0x4092, 4 - callif 1, LittlerootTown_MaysHouse_2F_EventScript_1B6950 + call_if 1, LittlerootTown_MaysHouse_2F_EventScript_1B6950 call LittlerootTown_MaysHouse_2F_EventScript_1A2F3D setvar 0x4089, 0 end @@ -24,19 +24,19 @@ LittlerootTown_MaysHouse_2F_MapScript2_152A86:: @ 8152A86 LittlerootTown_MaysHouse_2F_EventScript_152A90:: @ 8152A90 checkgender compare RESULT, 1 - jumpeq LittlerootTown_MaysHouse_2F_EventScript_1A2F68 + goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_1A2F68 end LittlerootTown_BrendansHouse_2F_EventScript_152A9D:: @ 8152A9D LittlerootTown_MaysHouse_2F_EventScript_152A9D:: @ 8152A9D lockall checkflag 292 - jumpeq LittlerootTown_BrendansHouse_2F_EventScript_152BB5 + goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_152BB5 checkgender compare RESULT, 0 - callif 1, LittlerootTown_BrendansHouse_2F_EventScript_152AD4 + call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152AD4 compare RESULT, 1 - callif 1, LittlerootTown_BrendansHouse_2F_EventScript_152B4A + call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B4A playsfx 9 disappear LAST_TALKED setvar 0x408d, 3 @@ -58,11 +58,11 @@ LittlerootTown_BrendansHouse_2F_EventScript_152AD4:: @ 8152AD4 msgbox LittlerootTown_BrendansHouse_2F_Text_1733AF, 4 closebutton compare FACING, 4 - callif 1, LittlerootTown_BrendansHouse_2F_EventScript_152B29 + call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B29 compare FACING, 2 - callif 1, LittlerootTown_BrendansHouse_2F_EventScript_152B34 + call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B34 compare FACING, 3 - callif 1, LittlerootTown_BrendansHouse_2F_EventScript_152B3F + call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B3F return LittlerootTown_BrendansHouse_2F_EventScript_152B29:: @ 8152B29 @@ -92,11 +92,11 @@ LittlerootTown_BrendansHouse_2F_EventScript_152B4A:: @ 8152B4A msgbox LittlerootTown_BrendansHouse_2F_Text_1735FC, 4 closebutton compare FACING, 4 - callif 1, LittlerootTown_BrendansHouse_2F_EventScript_152B9F + call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B9F compare FACING, 2 - callif 1, LittlerootTown_BrendansHouse_2F_EventScript_152B9F + call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B9F compare FACING, 3 - callif 1, LittlerootTown_BrendansHouse_2F_EventScript_152BAA + call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152BAA return LittlerootTown_BrendansHouse_2F_EventScript_152B9F:: @ 8152B9F @@ -114,22 +114,22 @@ LittlerootTown_BrendansHouse_2F_EventScript_152BB5:: @ 8152BB5 waitmove 0 checkgender compare RESULT, 0 - callif 1, LittlerootTown_BrendansHouse_2F_EventScript_152BDB + call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152BDB compare RESULT, 1 - callif 1, LittlerootTown_BrendansHouse_2F_EventScript_152BED + call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152BED setflag 293 releaseall end LittlerootTown_BrendansHouse_2F_EventScript_152BDB:: @ 8152BDB checkflag 293 - jumpeq LittlerootTown_BrendansHouse_2F_EventScript_152BFF + goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_152BFF msgbox LittlerootTown_BrendansHouse_2F_Text_1737AE, 4 return LittlerootTown_BrendansHouse_2F_EventScript_152BED:: @ 8152BED checkflag 293 - jumpeq LittlerootTown_BrendansHouse_2F_EventScript_152C08 + goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_152C08 msgbox LittlerootTown_BrendansHouse_2F_Text_1738F2, 4 return @@ -195,9 +195,9 @@ LittlerootTown_MaysHouse_2F_EventScript_152C39:: @ 8152C39 lockall checkgender compare RESULT, 0 - jumpeq LittlerootTown_MaysHouse_2F_EventScript_152C52 + goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_152C52 compare RESULT, 1 - jumpeq LittlerootTown_MaysHouse_2F_EventScript_152C5C + goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_152C5C end LittlerootTown_MaysHouse_2F_EventScript_152C52:: @ 8152C52 diff --git a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc index 80148ce08..bd846b4fe 100644 --- a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc +++ b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc @@ -31,9 +31,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152CBE:: @ 8152CBE waitfanfare msgbox LittlerootTown_ProfessorBirchsLab_Text_173EF8, 5 compare RESULT, 1 - jumpeq LittlerootTown_ProfessorBirchsLab_EventScript_152CEA + goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152CEA compare RESULT, 0 - jumpeq LittlerootTown_ProfessorBirchsLab_EventScript_152CFA + goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152CFA end LittlerootTown_ProfessorBirchsLab_EventScript_152CEA:: @ 8152CEA @@ -45,9 +45,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152CEA:: @ 8152CEA LittlerootTown_ProfessorBirchsLab_EventScript_152CFA:: @ 8152CFA msgbox LittlerootTown_ProfessorBirchsLab_Text_173F3D, 5 compare RESULT, 1 - jumpeq LittlerootTown_ProfessorBirchsLab_EventScript_152D19 + goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D19 compare RESULT, 0 - jumpeq LittlerootTown_ProfessorBirchsLab_EventScript_152D2B + goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D2B end LittlerootTown_ProfessorBirchsLab_EventScript_152D19:: @ 8152D19 @@ -60,9 +60,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152D19:: @ 8152D19 LittlerootTown_ProfessorBirchsLab_EventScript_152D2B:: @ 8152D2B msgbox LittlerootTown_ProfessorBirchsLab_Text_174075, 5 compare RESULT, 1 - jumpeq LittlerootTown_ProfessorBirchsLab_EventScript_152D19 + goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D19 compare RESULT, 0 - jumpeq LittlerootTown_ProfessorBirchsLab_EventScript_152D2B + goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D2B end LittlerootTown_ProfessorBirchsLab_EventScript_152D4A:: @ 8152D4A @@ -86,9 +86,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152D63:: @ 8152D63 lock faceplayer compare 0x4084, 3 - jumpif 4, LittlerootTown_ProfessorBirchsLab_EventScript_152D90 + goto_if 4, LittlerootTown_ProfessorBirchsLab_EventScript_152D90 checkflag 88 - jumpeq LittlerootTown_ProfessorBirchsLab_EventScript_152D86 + goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D86 msgbox LittlerootTown_ProfessorBirchsLab_Text_173B29, 4 setflag 88 release @@ -108,9 +108,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152D9A:: @ 8152D9A lock faceplayer checkflag 896 - jumpif 0, LittlerootTown_ProfessorBirchsLab_EventScript_1A037F + goto_if 0, LittlerootTown_ProfessorBirchsLab_EventScript_1A037F compare 0x4084, 5 - jumpeq LittlerootTown_ProfessorBirchsLab_EventScript_152E7B + goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152E7B msgbox LittlerootTown_ProfessorBirchsLab_Text_1740B4, 4 release end @@ -125,9 +125,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152DBA:: @ 8152DBA waitmove 0 checkgender compare RESULT, 0 - callif 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E13 + call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E13 compare RESULT, 1 - callif 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E40 + call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E40 setvar 0x4084, 5 setflag 116 setvar 0x4051, 1 @@ -140,7 +140,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152E13:: @ 8152E13 msgbox LittlerootTown_ProfessorBirchsLab_Text_1743D4, 4 giveitem ITEM_POKE_BALL, 5 compare RESULT, 0 - callif 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E85 + call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E85 msgbox LittlerootTown_ProfessorBirchsLab_Text_17443D, 4 setvar RESULT, 0 return @@ -149,7 +149,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152E40:: @ 8152E40 msgbox LittlerootTown_ProfessorBirchsLab_Text_17453C, 4 giveitem ITEM_POKE_BALL, 5 compare RESULT, 0 - callif 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E8E + call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E8E msgbox LittlerootTown_ProfessorBirchsLab_Text_17458C, 4 setvar RESULT, 1 return @@ -189,9 +189,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152EA3:: @ 8152EA3 faceplayer checkgender compare RESULT, 0 - callif 1, LittlerootTown_ProfessorBirchsLab_EventScript_152EBE + call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152EBE compare RESULT, 1 - callif 1, LittlerootTown_ProfessorBirchsLab_EventScript_152EC7 + call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152EC7 release end diff --git a/data/scripts/maps/MagmaHideout_B1F.inc b/data/scripts/maps/MagmaHideout_B1F.inc index 0304181fb..63364c6e5 100644 --- a/data/scripts/maps/MagmaHideout_B1F.inc +++ b/data/scripts/maps/MagmaHideout_B1F.inc @@ -4,7 +4,7 @@ MagmaHideout_B1F_MapScripts:: @ 815F2A8 MagmaHideout_B1F_MapScript1_15F2AE:: @ 815F2AE checkflag 2145 - callif 1, MagmaHideout_B1F_EventScript_15F2B8 + call_if 1, MagmaHideout_B1F_EventScript_15F2B8 end MagmaHideout_B1F_EventScript_15F2B8:: @ 815F2B8 diff --git a/data/scripts/maps/MauvilleCity.inc b/data/scripts/maps/MauvilleCity.inc index 78d1961e5..cae65f41e 100644 --- a/data/scripts/maps/MauvilleCity.inc +++ b/data/scripts/maps/MauvilleCity.inc @@ -9,7 +9,7 @@ MauvilleCity_MapScript1_14C038:: @ 814C038 clearflag 99 setvar 0x4093, 0 checkflag 209 - callif 1, MauvilleCity_EventScript_14C053 + call_if 1, MauvilleCity_EventScript_14C053 end MauvilleCity_EventScript_14C053:: @ 814C053 @@ -53,7 +53,7 @@ MauvilleCity_EventScript_14C0A2:: @ 814C0A2 lock faceplayer checkflag 98 - jumpeq MauvilleCity_EventScript_14C0BA + goto_if_eq MauvilleCity_EventScript_14C0BA msgbox MauvilleCity_Text_16674A, 4 setflag 98 release @@ -68,7 +68,7 @@ MauvilleCity_EventScript_14C0C4:: @ 814C0C4 lock faceplayer checkflag 284 - jumpeq MauvilleCity_EventScript_14C0E4 + goto_if_eq MauvilleCity_EventScript_14C0E4 msgbox MauvilleCity_Text_165B76, 4 closebutton move 7, MauvilleCity_Movement_1A083D @@ -87,7 +87,7 @@ MauvilleCity_EventScript_14C0E4:: @ 814C0E4 MauvilleCity_EventScript_14C0F9:: @ 814C0F9 lockall checkflag 284 - jumpeq MauvilleCity_EventScript_14C292 + goto_if_eq MauvilleCity_EventScript_14C292 move 6, MauvilleCity_Movement_1A0843 waitmove 0 msgbox MauvilleCity_Text_165BE3, 4 @@ -106,9 +106,9 @@ MauvilleCity_EventScript_14C0F9:: @ 814C0F9 MauvilleCity_EventScript_14C154:: @ 814C154 compare RESULT, 1 - callif 1, MauvilleCity_EventScript_14C23C + call_if 1, MauvilleCity_EventScript_14C23C compare RESULT, 0 - jumpeq MauvilleCity_EventScript_14C285 + goto_if_eq MauvilleCity_EventScript_14C285 closebutton switch FACING case 2, MauvilleCity_EventScript_14C187 @@ -285,11 +285,11 @@ MauvilleCity_EventScript_14C2F2:: @ 814C2F2 lock faceplayer checkflag 209 - jumpeq MauvilleCity_EventScript_14C368 + goto_if_eq MauvilleCity_EventScript_14C368 compare 0x40ba, 2 - jumpeq MauvilleCity_EventScript_14C33C + goto_if_eq MauvilleCity_EventScript_14C33C checkflag 208 - jumpeq MauvilleCity_EventScript_14C332 + goto_if_eq MauvilleCity_EventScript_14C332 msgbox MauvilleCity_Text_1661C1, 4 giveitem ITEM_BASEMENT_KEY setflag 208 @@ -306,7 +306,7 @@ MauvilleCity_EventScript_14C33C:: @ 814C33C msgbox MauvilleCity_Text_1663EB, 4 giveitem ITEM_TM24 compare RESULT, 0 - jumpeq MauvilleCity_EventScript_1A029B + goto_if_eq MauvilleCity_EventScript_1A029B setflag 209 msgbox MauvilleCity_Text_166488, 4 release diff --git a/data/scripts/maps/MauvilleCity_BikeShop.inc b/data/scripts/maps/MauvilleCity_BikeShop.inc index e0faf85a0..0b577885e 100644 --- a/data/scripts/maps/MauvilleCity_BikeShop.inc +++ b/data/scripts/maps/MauvilleCity_BikeShop.inc @@ -5,23 +5,23 @@ MauvilleCity_BikeShop_EventScript_156796:: @ 8156796 lock faceplayer checkflag 90 - jumpeq MauvilleCity_BikeShop_EventScript_15686E + goto_if_eq MauvilleCity_BikeShop_EventScript_15686E checkflag 89 - jumpeq MauvilleCity_BikeShop_EventScript_1567D1 + goto_if_eq MauvilleCity_BikeShop_EventScript_1567D1 msgbox MauvilleCity_BikeShop_Text_180F9F, 4 msgbox MauvilleCity_BikeShop_Text_181016, 5 compare RESULT, 1 - jumpeq MauvilleCity_BikeShop_EventScript_156824 + goto_if_eq MauvilleCity_BikeShop_EventScript_156824 compare RESULT, 0 - jumpeq MauvilleCity_BikeShop_EventScript_156817 + goto_if_eq MauvilleCity_BikeShop_EventScript_156817 end MauvilleCity_BikeShop_EventScript_1567D1:: @ 81567D1 msgbox MauvilleCity_BikeShop_Text_181016, 5 compare RESULT, 1 - jumpeq MauvilleCity_BikeShop_EventScript_156824 + goto_if_eq MauvilleCity_BikeShop_EventScript_156824 compare RESULT, 0 - jumpeq MauvilleCity_BikeShop_EventScript_156817 + goto_if_eq MauvilleCity_BikeShop_EventScript_156817 end MauvilleCity_BikeShop_EventScript_1567F0:: @ 81567F0 @@ -65,19 +65,19 @@ MauvilleCity_BikeShop_EventScript_156861:: @ 8156861 MauvilleCity_BikeShop_EventScript_15686E:: @ 815686E msgbox MauvilleCity_BikeShop_Text_1813A0, 5 compare RESULT, 1 - jumpeq MauvilleCity_BikeShop_EventScript_15688D + goto_if_eq MauvilleCity_BikeShop_EventScript_15688D compare RESULT, 0 - jumpeq MauvilleCity_BikeShop_EventScript_1568BF + goto_if_eq MauvilleCity_BikeShop_EventScript_1568BF end MauvilleCity_BikeShop_EventScript_15688D:: @ 815688D msgbox MauvilleCity_BikeShop_Text_1813D4, 4 checkitem ITEM_ACRO_BIKE, 1 compare RESULT, 1 - jumpeq MauvilleCity_BikeShop_EventScript_1568C9 + goto_if_eq MauvilleCity_BikeShop_EventScript_1568C9 checkitem ITEM_MACH_BIKE, 1 compare RESULT, 1 - jumpeq MauvilleCity_BikeShop_EventScript_1568EA + goto_if_eq MauvilleCity_BikeShop_EventScript_1568EA msgbox MauvilleCity_BikeShop_Text_181498, 4 release end diff --git a/data/scripts/maps/MauvilleCity_GameCorner.inc b/data/scripts/maps/MauvilleCity_GameCorner.inc index fa5b58885..db6223400 100644 --- a/data/scripts/maps/MauvilleCity_GameCorner.inc +++ b/data/scripts/maps/MauvilleCity_GameCorner.inc @@ -7,7 +7,7 @@ MauvilleCity_GameCorner_EventScript_156A34:: @ 8156A34 msgbox MauvilleCity_GameCorner_Text_181C35, 4 checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_156B32 + goto_if_eq MauvilleCity_GameCorner_EventScript_156B32 message MauvilleCity_GameCorner_Text_181CB4 waittext showmoney 0, 0 @@ -34,10 +34,10 @@ MauvilleCity_GameCorner_EventScript_156A60:: @ 8156A60 MauvilleCity_GameCorner_EventScript_156AAE:: @ 8156AAE checkcoins 16385 compare 0x4001, 9950 - jumpif 4, MauvilleCity_GameCorner_EventScript_156B5C + goto_if 4, MauvilleCity_GameCorner_EventScript_156B5C checkmoney 0x3e8, 0 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_156B3C + goto_if_eq MauvilleCity_GameCorner_EventScript_156B3C givecoins 50 paymoney 0x3e8, 0 updatemoney 0, 0 @@ -53,10 +53,10 @@ MauvilleCity_GameCorner_EventScript_156AAE:: @ 8156AAE MauvilleCity_GameCorner_EventScript_156AF0:: @ 8156AF0 checkcoins 16385 compare 0x4001, 9500 - jumpif 4, MauvilleCity_GameCorner_EventScript_156B5C + goto_if 4, MauvilleCity_GameCorner_EventScript_156B5C checkmoney 0x2710, 0 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_156B3C + goto_if_eq MauvilleCity_GameCorner_EventScript_156B3C givecoins 500 paymoney 0x2710, 0 updatemoney 0, 0 @@ -101,7 +101,7 @@ MauvilleCity_GameCorner_EventScript_156B6C:: @ 8156B6C msgbox MauvilleCity_GameCorner_Text_181DE1, 4 checkitem ITEM_COIN_CASE, 1 compare RESULT, 1 - jumpeq MauvilleCity_GameCorner_EventScript_156B88 + goto_if_eq MauvilleCity_GameCorner_EventScript_156B88 release end @@ -145,7 +145,7 @@ MauvilleCity_GameCorner_EventScript_156BFE:: @ 8156BFE MauvilleCity_GameCorner_EventScript_156C0C:: @ 8156C0C msgbox MauvilleCity_GameCorner_Text_181E33, 5 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_156D0D + goto_if_eq MauvilleCity_GameCorner_EventScript_156D0D switch 0x4001 case 1, MauvilleCity_GameCorner_EventScript_156C46 case 2, MauvilleCity_GameCorner_EventScript_156C80 @@ -155,11 +155,11 @@ MauvilleCity_GameCorner_EventScript_156C0C:: @ 8156C0C MauvilleCity_GameCorner_EventScript_156C46:: @ 8156C46 checkcoins 16386 compare 0x4002, 1000 - jumpif 0, MauvilleCity_GameCorner_EventScript_156CF4 + goto_if 0, MauvilleCity_GameCorner_EventScript_156CF4 bufferdecor 1, 88 checkdecor 88 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_156D02 + goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 removecoins 1000 adddecor 88 updatecoins 0, 0 @@ -171,11 +171,11 @@ MauvilleCity_GameCorner_EventScript_156C46:: @ 8156C46 MauvilleCity_GameCorner_EventScript_156C80:: @ 8156C80 checkcoins 16386 compare 0x4002, 1000 - jumpif 0, MauvilleCity_GameCorner_EventScript_156CF4 + goto_if 0, MauvilleCity_GameCorner_EventScript_156CF4 bufferdecor 1, 89 checkdecor 89 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_156D02 + goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 removecoins 1000 adddecor 89 updatecoins 0, 0 @@ -187,11 +187,11 @@ MauvilleCity_GameCorner_EventScript_156C80:: @ 8156C80 MauvilleCity_GameCorner_EventScript_156CBA:: @ 8156CBA checkcoins 16386 compare 0x4002, 1000 - jumpif 0, MauvilleCity_GameCorner_EventScript_156CF4 + goto_if 0, MauvilleCity_GameCorner_EventScript_156CF4 bufferdecor 1, 90 checkdecor 90 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_156D02 + goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 removecoins 1000 adddecor 90 updatecoins 0, 0 @@ -222,7 +222,7 @@ MauvilleCity_GameCorner_EventScript_156D1A:: @ 8156D1A msgbox MauvilleCity_GameCorner_Text_181DE1, 4 checkitem ITEM_COIN_CASE, 1 compare RESULT, 1 - jumpeq MauvilleCity_GameCorner_EventScript_156D36 + goto_if_eq MauvilleCity_GameCorner_EventScript_156D36 release end @@ -278,7 +278,7 @@ MauvilleCity_GameCorner_EventScript_156DDE:: @ 8156DDE MauvilleCity_GameCorner_EventScript_156DEC:: @ 8156DEC msgbox MauvilleCity_GameCorner_Text_181E33, 5 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_156F77 + goto_if_eq MauvilleCity_GameCorner_EventScript_156F77 switch 0x4001 case 1, MauvilleCity_GameCorner_EventScript_156E3C case 2, MauvilleCity_GameCorner_EventScript_156E76 @@ -290,10 +290,10 @@ MauvilleCity_GameCorner_EventScript_156DEC:: @ 8156DEC MauvilleCity_GameCorner_EventScript_156E3C:: @ 8156E3C checkcoins 16386 compare 0x4002, 1500 - jumpif 0, MauvilleCity_GameCorner_EventScript_156F5E + goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM32, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_156F6C + goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 1500 additem ITEM_TM32, 1 updatecoins 0, 0 @@ -305,10 +305,10 @@ MauvilleCity_GameCorner_EventScript_156E3C:: @ 8156E3C MauvilleCity_GameCorner_EventScript_156E76:: @ 8156E76 checkcoins 16386 compare 0x4002, 3500 - jumpif 0, MauvilleCity_GameCorner_EventScript_156F5E + goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM29, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_156F6C + goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 3500 additem ITEM_TM29, 1 updatecoins 0, 0 @@ -320,10 +320,10 @@ MauvilleCity_GameCorner_EventScript_156E76:: @ 8156E76 MauvilleCity_GameCorner_EventScript_156EB0:: @ 8156EB0 checkcoins 16386 compare 0x4002, 4000 - jumpif 0, MauvilleCity_GameCorner_EventScript_156F5E + goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM35, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_156F6C + goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 4000 additem ITEM_TM35, 1 updatecoins 0, 0 @@ -335,10 +335,10 @@ MauvilleCity_GameCorner_EventScript_156EB0:: @ 8156EB0 MauvilleCity_GameCorner_EventScript_156EEA:: @ 8156EEA checkcoins 16386 compare 0x4002, 4000 - jumpif 0, MauvilleCity_GameCorner_EventScript_156F5E + goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM24, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_156F6C + goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 4000 additem ITEM_TM24, 1 updatecoins 0, 0 @@ -350,10 +350,10 @@ MauvilleCity_GameCorner_EventScript_156EEA:: @ 8156EEA MauvilleCity_GameCorner_EventScript_156F24:: @ 8156F24 checkcoins 16386 compare 0x4002, 4000 - jumpif 0, MauvilleCity_GameCorner_EventScript_156F5E + goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM13, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_156F6C + goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 4000 additem ITEM_TM13, 1 updatecoins 0, 0 @@ -390,10 +390,10 @@ MauvilleCity_GameCorner_EventScript_156F96:: @ 8156F96 lock faceplayer checkflag 226 - jumpeq MauvilleCity_GameCorner_EventScript_157072 + goto_if_eq MauvilleCity_GameCorner_EventScript_157072 msgbox MauvilleCity_GameCorner_Text_181F3D, 5 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_157068 + goto_if_eq MauvilleCity_GameCorner_EventScript_157068 switch 0x4023 case 0, MauvilleCity_GameCorner_EventScript_156FDB case 1, MauvilleCity_GameCorner_EventScript_157005 @@ -404,7 +404,7 @@ MauvilleCity_GameCorner_EventScript_156FDB:: @ 8156FDB bufferdecor 1, 88 checkdecor 88 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_157059 + goto_if_eq MauvilleCity_GameCorner_EventScript_157059 msgbox MauvilleCity_GameCorner_Text_181F89, 4 givedecoration 88 setflag 226 @@ -415,7 +415,7 @@ MauvilleCity_GameCorner_EventScript_157005:: @ 8157005 bufferdecor 1, 89 checkdecor 89 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_157059 + goto_if_eq MauvilleCity_GameCorner_EventScript_157059 msgbox MauvilleCity_GameCorner_Text_181F89, 4 givedecoration 89 setflag 226 @@ -426,7 +426,7 @@ MauvilleCity_GameCorner_EventScript_15702F:: @ 815702F bufferdecor 1, 90 checkdecor 90 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_157059 + goto_if_eq MauvilleCity_GameCorner_EventScript_157059 msgbox MauvilleCity_GameCorner_Text_181F89, 4 givedecoration 90 setflag 226 @@ -454,17 +454,17 @@ MauvilleCity_GameCorner_EventScript_15707C:: @ 815707C faceplayer checkitem ITEM_COIN_CASE, 1 compare RESULT, 1 - jumpeq MauvilleCity_GameCorner_EventScript_15709C + goto_if_eq MauvilleCity_GameCorner_EventScript_15709C msgbox MauvilleCity_GameCorner_Text_18201E, 4 goto MauvilleCity_GameCorner_EventScript_157108 end MauvilleCity_GameCorner_EventScript_15709C:: @ 815709C checkflag 225 - jumpeq MauvilleCity_GameCorner_EventScript_1570CA + goto_if_eq MauvilleCity_GameCorner_EventScript_1570CA checkcoins 16385 compare 0x4001, 1 - jumpif 4, MauvilleCity_GameCorner_EventScript_1570CA + goto_if 4, MauvilleCity_GameCorner_EventScript_1570CA setflag 225 givecoins 20 msgbox MauvilleCity_GameCorner_Text_18208E, 4 @@ -523,7 +523,7 @@ MauvilleCity_GameCorner_EventScript_157135:: @ 8157135 lockall checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 0 specialval RESULT, sub_810F424 pokecasino RESULT @@ -534,7 +534,7 @@ MauvilleCity_GameCorner_EventScript_157155:: @ 8157155 lockall checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 1 specialval RESULT, sub_810F424 pokecasino RESULT @@ -545,7 +545,7 @@ MauvilleCity_GameCorner_EventScript_157175:: @ 8157175 lockall checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 2 specialval RESULT, sub_810F424 pokecasino RESULT @@ -556,7 +556,7 @@ MauvilleCity_GameCorner_EventScript_157195:: @ 8157195 lockall checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 3 specialval RESULT, sub_810F424 pokecasino RESULT @@ -567,7 +567,7 @@ MauvilleCity_GameCorner_EventScript_1571B5:: @ 81571B5 lockall checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 4 specialval RESULT, sub_810F424 pokecasino RESULT @@ -578,7 +578,7 @@ MauvilleCity_GameCorner_EventScript_1571D5:: @ 81571D5 lockall checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 5 specialval RESULT, sub_810F424 pokecasino RESULT @@ -589,7 +589,7 @@ MauvilleCity_GameCorner_EventScript_1571F5:: @ 81571F5 lockall checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 6 specialval RESULT, sub_810F424 pokecasino RESULT @@ -600,7 +600,7 @@ MauvilleCity_GameCorner_EventScript_157215:: @ 8157215 lockall checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 7 specialval RESULT, sub_810F424 pokecasino RESULT @@ -611,7 +611,7 @@ MauvilleCity_GameCorner_EventScript_157235:: @ 8157235 lockall checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 8 specialval RESULT, sub_810F424 pokecasino RESULT @@ -622,7 +622,7 @@ MauvilleCity_GameCorner_EventScript_157255:: @ 8157255 lockall checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 9 specialval RESULT, sub_810F424 pokecasino RESULT @@ -633,7 +633,7 @@ MauvilleCity_GameCorner_EventScript_157275:: @ 8157275 lockall checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 10 specialval RESULT, sub_810F424 pokecasino RESULT @@ -644,7 +644,7 @@ MauvilleCity_GameCorner_EventScript_157295:: @ 8157295 lockall checkitem ITEM_COIN_CASE, 1 compare RESULT, 0 - jumpeq MauvilleCity_GameCorner_EventScript_1572B5 + goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 11 specialval RESULT, sub_810F424 pokecasino RESULT diff --git a/data/scripts/maps/MauvilleCity_Gym.inc b/data/scripts/maps/MauvilleCity_Gym.inc index 75136dcef..80a33ffb0 100644 --- a/data/scripts/maps/MauvilleCity_Gym.inc +++ b/data/scripts/maps/MauvilleCity_Gym.inc @@ -4,7 +4,7 @@ MauvilleCity_Gym_MapScripts:: @ 8156450 MauvilleCity_Gym_MapScript1_156456:: @ 8156456 checkflag 1208 - jumpeq MauvilleCity_Gym_EventScript_1565A7 + goto_if_eq MauvilleCity_Gym_EventScript_1565A7 switch 0x4093 case 0, MauvilleCity_Gym_EventScript_156491 case 1, MauvilleCity_Gym_EventScript_15657D @@ -14,7 +14,7 @@ MauvilleCity_Gym_MapScript1_156456:: @ 8156456 MauvilleCity_Gym_EventScript_156491:: @ 8156491 checkflag 99 - jumpeq MauvilleCity_Gym_EventScript_15649B + goto_if_eq MauvilleCity_Gym_EventScript_15649B end MauvilleCity_Gym_EventScript_15649B:: @ 815649B @@ -70,9 +70,9 @@ MauvilleCity_Gym_EventScript_1565A7:: @ 81565A7 MauvilleCity_Gym_EventScript_1565AB:: @ 81565AB trainerbattle 1, OPPONENT_WATTSON, 0, MauvilleCity_Gym_Text_180C32, MauvilleCity_Gym_Text_180D64, MauvilleCity_Gym_EventScript_1565DB checkflag 167 - jumpif 0, MauvilleCity_Gym_EventScript_15661D + goto_if 0, MauvilleCity_Gym_EventScript_15661D compare 0x40ba, 2 - jumpeq MauvilleCity_Gym_EventScript_156641 + goto_if_eq MauvilleCity_Gym_EventScript_156641 msgbox MauvilleCity_Gym_Text_180EDB, 4 release end @@ -86,7 +86,7 @@ MauvilleCity_Gym_EventScript_1565DB:: @ 81565DB setflag 2057 addvar 0x4085, 1 compare 0x4085, 6 - callif 1, MauvilleCity_Gym_EventScript_1A00FB + call_if 1, MauvilleCity_Gym_EventScript_1A00FB setvar 0x8008, 3 call MauvilleCity_Gym_EventScript_1A01C0 special MauvilleGymSpecial3 @@ -98,7 +98,7 @@ MauvilleCity_Gym_EventScript_1565DB:: @ 81565DB MauvilleCity_Gym_EventScript_15661D:: @ 815661D giveitem ITEM_TM34 compare RESULT, 0 - jumpeq MauvilleCity_Gym_EventScript_1A029B + goto_if_eq MauvilleCity_Gym_EventScript_1A029B msgbox MauvilleCity_Gym_Text_180E76, 4 setflag 167 release @@ -112,9 +112,9 @@ MauvilleCity_Gym_EventScript_156641:: @ 8156641 MauvilleCity_Gym_EventScript_15664B:: @ 815664B lockall checkflag 1208 - jumpeq MauvilleCity_Gym_EventScript_1566DA + goto_if_eq MauvilleCity_Gym_EventScript_1566DA compare 0x4093, 1 - jumpeq MauvilleCity_Gym_EventScript_1566DA + goto_if_eq MauvilleCity_Gym_EventScript_1566DA setvar 0x4093, 1 setvar 0x8004, 0 goto MauvilleCity_Gym_EventScript_1566BA @@ -123,9 +123,9 @@ MauvilleCity_Gym_EventScript_15664B:: @ 815664B MauvilleCity_Gym_EventScript_156670:: @ 8156670 lockall checkflag 1208 - jumpeq MauvilleCity_Gym_EventScript_1566DA + goto_if_eq MauvilleCity_Gym_EventScript_1566DA compare 0x4093, 2 - jumpeq MauvilleCity_Gym_EventScript_1566DA + goto_if_eq MauvilleCity_Gym_EventScript_1566DA setvar 0x4093, 2 setvar 0x8004, 1 goto MauvilleCity_Gym_EventScript_1566BA @@ -134,9 +134,9 @@ MauvilleCity_Gym_EventScript_156670:: @ 8156670 MauvilleCity_Gym_EventScript_156695:: @ 8156695 lockall checkflag 1208 - jumpeq MauvilleCity_Gym_EventScript_1566DA + goto_if_eq MauvilleCity_Gym_EventScript_1566DA compare 0x4093, 3 - jumpeq MauvilleCity_Gym_EventScript_1566DA + goto_if_eq MauvilleCity_Gym_EventScript_1566DA setvar 0x4093, 3 setvar 0x8004, 2 goto MauvilleCity_Gym_EventScript_1566BA @@ -148,9 +148,9 @@ MauvilleCity_Gym_EventScript_1566BA:: @ 81566BA special DrawWholeMapView playsfx 44 checkflag 99 - jumpeq MauvilleCity_Gym_EventScript_1566E1 + goto_if_eq MauvilleCity_Gym_EventScript_1566E1 checkflag 99 - jumpif 0, MauvilleCity_Gym_EventScript_1566DC + goto_if 0, MauvilleCity_Gym_EventScript_1566DC releaseall end @@ -192,7 +192,7 @@ MauvilleCity_Gym_EventScript_156742:: @ 8156742 lock faceplayer checkflag 1208 - jumpeq MauvilleCity_Gym_EventScript_156757 + goto_if_eq MauvilleCity_Gym_EventScript_156757 msgbox MauvilleCity_Gym_Text_180815, 4 release end @@ -205,14 +205,14 @@ MauvilleCity_Gym_EventScript_156757:: @ 8156757 MauvilleCity_Gym_EventScript_156761:: @ 8156761 lockall checkflag 2057 - jumpeq MauvilleCity_Gym_EventScript_156781 + goto_if_eq MauvilleCity_Gym_EventScript_156781 goto MauvilleCity_Gym_EventScript_15678B end MauvilleCity_Gym_EventScript_156771:: @ 8156771 lockall checkflag 2057 - jumpeq MauvilleCity_Gym_EventScript_156781 + goto_if_eq MauvilleCity_Gym_EventScript_156781 goto MauvilleCity_Gym_EventScript_15678B end diff --git a/data/scripts/maps/MauvilleCity_House1.inc b/data/scripts/maps/MauvilleCity_House1.inc index 48ee31be5..e76564847 100644 --- a/data/scripts/maps/MauvilleCity_House1.inc +++ b/data/scripts/maps/MauvilleCity_House1.inc @@ -5,7 +5,7 @@ MauvilleCity_House1_EventScript_1569FD:: @ 81569FD lock faceplayer checkflag 107 - jumpeq MauvilleCity_House1_EventScript_156A29 + goto_if_eq MauvilleCity_House1_EventScript_156A29 msgbox MauvilleCity_House1_Text_181B1A, 4 giveitem ITEM_HM06 setflag 107 diff --git a/data/scripts/maps/MauvilleCity_House2.inc b/data/scripts/maps/MauvilleCity_House2.inc index edb74f9f9..24236ede6 100644 --- a/data/scripts/maps/MauvilleCity_House2.inc +++ b/data/scripts/maps/MauvilleCity_House2.inc @@ -5,11 +5,11 @@ MauvilleCity_House2_EventScript_1572C0:: @ 81572C0 lock faceplayer checkflag 258 - jumpeq MauvilleCity_House2_EventScript_15733D + goto_if_eq MauvilleCity_House2_EventScript_15733D msgbox MauvilleCity_House2_Text_18244E, 4 checkitem ITEM_HARBOR_MAIL, 1 compare RESULT, 1 - jumpeq MauvilleCity_House2_EventScript_1572E5 + goto_if_eq MauvilleCity_House2_EventScript_1572E5 release end @@ -21,9 +21,9 @@ MauvilleCity_House2_EventScript_1572E5:: @ 81572E5 waitmove 0 msgbox MauvilleCity_House2_Text_1824D8, 5 compare RESULT, 1 - jumpeq MauvilleCity_House2_EventScript_15731B + goto_if_eq MauvilleCity_House2_EventScript_15731B compare RESULT, 0 - jumpeq MauvilleCity_House2_EventScript_157347 + goto_if_eq MauvilleCity_House2_EventScript_157347 end MauvilleCity_House2_EventScript_15731B:: @ 815731B diff --git a/data/scripts/maps/MeteorFalls_1F_1R.inc b/data/scripts/maps/MeteorFalls_1F_1R.inc index 3e7155955..d5e1574cc 100644 --- a/data/scripts/maps/MeteorFalls_1F_1R.inc +++ b/data/scripts/maps/MeteorFalls_1F_1R.inc @@ -216,7 +216,7 @@ MeteorFalls_1F_1R_EventScript_15C656:: @ 815C656 lock faceplayer checkflag 244 - jumpeq MeteorFalls_1F_1R_EventScript_15C66E + goto_if_eq MeteorFalls_1F_1R_EventScript_15C66E setflag 244 msgbox MeteorFalls_1F_1R_Text_1937EB, 4 release diff --git a/data/scripts/maps/MeteorFalls_1F_2R.inc b/data/scripts/maps/MeteorFalls_1F_2R.inc index 8e45c34ae..23d814855 100644 --- a/data/scripts/maps/MeteorFalls_1F_2R.inc +++ b/data/scripts/maps/MeteorFalls_1F_2R.inc @@ -5,7 +5,7 @@ MeteorFalls_1F_2R_EventScript_15C679:: @ 815C679 trainerbattle 0, OPPONENT_NICOLAS_1, 0, MeteorFalls_1F_2R_Text_1939C5, MeteorFalls_1F_2R_Text_193A35 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq MeteorFalls_1F_2R_EventScript_15C6A0 + goto_if_eq MeteorFalls_1F_2R_EventScript_15C6A0 msgbox MeteorFalls_1F_2R_Text_193A60, 6 end @@ -18,7 +18,7 @@ MeteorFalls_1F_2R_EventScript_15C6B7:: @ 815C6B7 trainerbattle 4, OPPONENT_JOHN_AND_JAY_1, 0, MeteorFalls_1F_2R_Text_193BB7, MeteorFalls_1F_2R_Text_193C10, MeteorFalls_1F_2R_Text_193C9F specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq MeteorFalls_1F_2R_EventScript_15C6E2 + goto_if_eq MeteorFalls_1F_2R_EventScript_15C6E2 msgbox MeteorFalls_1F_2R_Text_193C35, 6 end @@ -31,7 +31,7 @@ MeteorFalls_1F_2R_EventScript_15C6FD:: @ 815C6FD trainerbattle 4, OPPONENT_JOHN_AND_JAY_1, 0, MeteorFalls_1F_2R_Text_193D10, MeteorFalls_1F_2R_Text_193D6E, MeteorFalls_1F_2R_Text_193DFB specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq MeteorFalls_1F_2R_EventScript_15C728 + goto_if_eq MeteorFalls_1F_2R_EventScript_15C728 msgbox MeteorFalls_1F_2R_Text_193D9A, 6 end diff --git a/data/scripts/maps/MossdeepCity.inc b/data/scripts/maps/MossdeepCity.inc index ddb317364..d1b8e88b3 100644 --- a/data/scripts/maps/MossdeepCity.inc +++ b/data/scripts/maps/MossdeepCity.inc @@ -8,7 +8,7 @@ MossdeepCity_MapScript1_14CF98:: @ 814CF98 clearflag 102 clearflag 103 checkflag 2090 - callif 1, MossdeepCity_EventScript_1A02C1 + call_if 1, MossdeepCity_EventScript_1A02C1 end MossdeepCity_EventScript_14CFAE:: @ 814CFAE @@ -69,14 +69,14 @@ MossdeepCity_EventScript_14D027:: @ 814D027 lock faceplayer checkflag 276 - jumpeq MossdeepCity_EventScript_14D069 + goto_if_eq MossdeepCity_EventScript_14D069 msgbox MossdeepCity_Text_1690A9, 5 compare RESULT, 0 - jumpeq MossdeepCity_EventScript_14D073 + goto_if_eq MossdeepCity_EventScript_14D073 msgbox MossdeepCity_Text_169117, 4 giveitem ITEM_KINGS_ROCK compare RESULT, 0 - jumpeq MossdeepCity_EventScript_1A029B + goto_if_eq MossdeepCity_EventScript_1A029B setflag 276 release end diff --git a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc index 59669596a..f644e93cc 100644 --- a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc +++ b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc @@ -7,7 +7,7 @@ MossdeepCity_GameCorner_1F_MapScripts:: @ 815AC52 MossdeepCity_GameCorner_1F_MapScript1_15AC62:: @ 815AC62 special sub_813601C compare RESULT, 1 - callif 1, MossdeepCity_GameCorner_1F_EventScript_15AC71 + call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AC71 end MossdeepCity_GameCorner_1F_EventScript_15AC71:: @ 815AC71 @@ -18,9 +18,9 @@ MossdeepCity_GameCorner_1F_EventScript_15AC71:: @ 815AC71 MossdeepCity_GameCorner_1F_MapScript1_15AC84:: @ 815AC84 special sub_813601C compare RESULT, 0 - callif 1, MossdeepCity_GameCorner_1F_EventScript_15AC9E + call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AC9E compare 0x40c0, 0 - callif 5, MossdeepCity_GameCorner_1F_EventScript_15ACAF + call_if 5, MossdeepCity_GameCorner_1F_EventScript_15ACAF end MossdeepCity_GameCorner_1F_EventScript_15AC9E:: @ 815AC9E @@ -50,11 +50,11 @@ MossdeepCity_GameCorner_1F_EventScript_15ACD5:: @ 815ACD5 move 255, MossdeepCity_GameCorner_1F_Movement_1A0841 waitmove 0 compare 0x40c0, 1 - callif 1, MossdeepCity_GameCorner_1F_EventScript_15AD22 + call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AD22 compare 0x40c0, 2 - callif 1, MossdeepCity_GameCorner_1F_EventScript_15AD2B + call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AD2B compare 0x40c0, 3 - callif 1, MossdeepCity_GameCorner_1F_EventScript_15AD34 + call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AD34 special LoadPlayerParty setvar 0x40c0, 0 releaseall @@ -85,7 +85,7 @@ MossdeepCity_GameCorner_1F_EventScript_15AD42:: @ 815AD42 lock faceplayer compare 0x4001, 1 - jumpeq MossdeepCity_GameCorner_1F_EventScript_15AD59 + goto_if_eq MossdeepCity_GameCorner_1F_EventScript_15AD59 msgbox MossdeepCity_GameCorner_1F_Text_18E59A, 4 release end @@ -95,28 +95,28 @@ MossdeepCity_GameCorner_1F_EventScript_15AD59:: @ 815AD59 special sub_810F414 msgbox MossdeepCity_GameCorner_1F_Text_18E650, 5 compare RESULT, 0 - jumpeq MossdeepCity_GameCorner_1F_EventScript_15ADE8 + goto_if_eq MossdeepCity_GameCorner_1F_EventScript_15ADE8 call MossdeepCity_GameCorner_1F_EventScript_15ADF5 compare RESULT, 0 - jumpeq MossdeepCity_GameCorner_1F_EventScript_15ADE8 + goto_if_eq MossdeepCity_GameCorner_1F_EventScript_15ADE8 msgbox MossdeepCity_GameCorner_1F_Text_18E741, 5 compare RESULT, 0 - callif 1, MossdeepCity_GameCorner_1F_EventScript_15ADE8 + call_if 1, MossdeepCity_GameCorner_1F_EventScript_15ADE8 special LoadPlayerParty call S_DoSaveDialog compare RESULT, 0 - jumpeq MossdeepCity_GameCorner_1F_EventScript_15ADE8 + goto_if_eq MossdeepCity_GameCorner_1F_EventScript_15ADE8 hidebox 0, 0, 15, 10 special SavePlayerParty special ReducePlayerPartyToThree msgbox MossdeepCity_GameCorner_1F_Text_18E777, 4 closebutton compare FACING, 2 - callif 1, MossdeepCity_GameCorner_1F_EventScript_15AE04 + call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AE04 compare FACING, 4 - callif 1, MossdeepCity_GameCorner_1F_EventScript_15AE16 + call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AE16 compare FACING, 3 - callif 1, MossdeepCity_GameCorner_1F_EventScript_15AE28 + call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AE28 warp MossdeepCity_GameCorner_B1F, 255, 3, 1 waitstate release diff --git a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc index c7d1201fd..77cc96f4d 100644 --- a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc +++ b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc @@ -23,11 +23,11 @@ MossdeepCity_GameCorner_B1F_EventScript_15AE6E:: @ 815AE6E special sub_813556C waitstate compare RESULT, 3 - callif 1, MossdeepCity_GameCorner_B1F_EventScript_15AED5 + call_if 1, MossdeepCity_GameCorner_B1F_EventScript_15AED5 compare RESULT, 1 - callif 1, MossdeepCity_GameCorner_B1F_EventScript_15AEE3 + call_if 1, MossdeepCity_GameCorner_B1F_EventScript_15AEE3 compare RESULT, 2 - callif 1, MossdeepCity_GameCorner_B1F_EventScript_15AEEE + call_if 1, MossdeepCity_GameCorner_B1F_EventScript_15AEEE closebutton special ScrSpecial_HealPlayerParty move 255, MossdeepCity_GameCorner_B1F_Movement_15AEFF diff --git a/data/scripts/maps/MossdeepCity_Gym.inc b/data/scripts/maps/MossdeepCity_Gym.inc index 733f6816e..4c46ca334 100644 --- a/data/scripts/maps/MossdeepCity_Gym.inc +++ b/data/scripts/maps/MossdeepCity_Gym.inc @@ -4,25 +4,25 @@ MossdeepCity_Gym_MapScripts:: @ 815A4D3 MossdeepCity_Gym_MapScript1_15A4D9:: @ 815A4D9 checkflag 100 - jumpeq MossdeepCity_Gym_EventScript_15A510 + goto_if_eq MossdeepCity_Gym_EventScript_15A510 goto MossdeepCity_Gym_EventScript_15A4E8 end MossdeepCity_Gym_EventScript_15A4E8:: @ 815A4E8 checkflag 101 - jumpeq MossdeepCity_Gym_EventScript_15A528 + goto_if_eq MossdeepCity_Gym_EventScript_15A528 goto MossdeepCity_Gym_EventScript_15A4F7 end MossdeepCity_Gym_EventScript_15A4F7:: @ 815A4F7 checkflag 102 - jumpeq MossdeepCity_Gym_EventScript_15A540 + goto_if_eq MossdeepCity_Gym_EventScript_15A540 goto MossdeepCity_Gym_EventScript_15A506 end MossdeepCity_Gym_EventScript_15A506:: @ 815A506 checkflag 103 - jumpeq MossdeepCity_Gym_EventScript_15A558 + goto_if_eq MossdeepCity_Gym_EventScript_15A558 end MossdeepCity_Gym_EventScript_15A510:: @ 815A510 @@ -51,7 +51,7 @@ MossdeepCity_Gym_EventScript_15A558:: @ 815A558 MossdeepCity_Gym_EventScript_15A56B:: @ 815A56B trainerbattle 8, OPPONENT_TATE_AND_LIZA, 0, MossdeepCity_Gym_Text_18CF02, MossdeepCity_Gym_Text_18D077, MossdeepCity_Gym_Text_18D324, MossdeepCity_Gym_EventScript_15A594 checkflag 171 - jumpif 0, MossdeepCity_Gym_EventScript_15A5C6 + goto_if 0, MossdeepCity_Gym_EventScript_15A5C6 msgbox MossdeepCity_Gym_Text_18D273, 4 release end @@ -74,7 +74,7 @@ MossdeepCity_Gym_EventScript_15A594:: @ 815A594 MossdeepCity_Gym_EventScript_15A5C6:: @ 815A5C6 giveitem ITEM_TM04 compare RESULT, 0 - jumpeq MossdeepCity_Gym_EventScript_1A029B + goto_if_eq MossdeepCity_Gym_EventScript_1A029B msgbox MossdeepCity_Gym_Text_18D1CF, 4 setflag 171 release @@ -83,7 +83,7 @@ MossdeepCity_Gym_EventScript_15A5C6:: @ 815A5C6 MossdeepCity_Gym_EventScript_15A5EA:: @ 815A5EA lockall checkflag 100 - jumpeq MossdeepCity_Gym_EventScript_15A621 + goto_if_eq MossdeepCity_Gym_EventScript_15A621 setflag 100 move 255, MossdeepCity_Gym_Movement_15A7F7 waitmove 0 @@ -110,7 +110,7 @@ MossdeepCity_Gym_EventScript_15A621:: @ 815A621 MossdeepCity_Gym_EventScript_15A646:: @ 815A646 lockall checkflag 101 - jumpeq MossdeepCity_Gym_EventScript_15A675 + goto_if_eq MossdeepCity_Gym_EventScript_15A675 setflag 101 move 255, MossdeepCity_Gym_Movement_15A7F7 waitmove 0 @@ -131,7 +131,7 @@ MossdeepCity_Gym_EventScript_15A675:: @ 815A675 MossdeepCity_Gym_EventScript_15A69A:: @ 815A69A lockall checkflag 102 - jumpeq MossdeepCity_Gym_EventScript_15A6C9 + goto_if_eq MossdeepCity_Gym_EventScript_15A6C9 setflag 102 move 255, MossdeepCity_Gym_Movement_15A7F7 waitmove 0 @@ -152,7 +152,7 @@ MossdeepCity_Gym_EventScript_15A6C9:: @ 815A6C9 MossdeepCity_Gym_EventScript_15A6EE:: @ 815A6EE lockall checkflag 103 - jumpeq MossdeepCity_Gym_EventScript_15A71D + goto_if_eq MossdeepCity_Gym_EventScript_15A71D setflag 103 move 255, MossdeepCity_Gym_Movement_15A7F7 waitmove 0 @@ -211,7 +211,7 @@ MossdeepCity_Gym_EventScript_15A7D8:: @ 815A7D8 lock faceplayer checkflag 1229 - jumpeq MossdeepCity_Gym_EventScript_15A7ED + goto_if_eq MossdeepCity_Gym_EventScript_15A7ED msgbox MossdeepCity_Gym_Text_18C7E3, 4 release end @@ -229,14 +229,14 @@ MossdeepCity_Gym_Movement_15A7F7:: @ 815A7F7 MossdeepCity_Gym_EventScript_15A7FA:: @ 815A7FA lockall checkflag 2061 - jumpeq MossdeepCity_Gym_EventScript_15A81A + goto_if_eq MossdeepCity_Gym_EventScript_15A81A goto MossdeepCity_Gym_EventScript_15A824 end MossdeepCity_Gym_EventScript_15A80A:: @ 815A80A lockall checkflag 2061 - jumpeq MossdeepCity_Gym_EventScript_15A81A + goto_if_eq MossdeepCity_Gym_EventScript_15A81A goto MossdeepCity_Gym_EventScript_15A824 end diff --git a/data/scripts/maps/MossdeepCity_House1.inc b/data/scripts/maps/MossdeepCity_House1.inc index 319dfba8e..c8af8f886 100644 --- a/data/scripts/maps/MossdeepCity_House1.inc +++ b/data/scripts/maps/MossdeepCity_House1.inc @@ -8,7 +8,7 @@ MossdeepCity_House1_EventScript_15A82F:: @ 815A82F msgbox MossdeepCity_House1_Text_18D465, 4 specialval RESULT, GetPokeblockNameByMonNature compare RESULT, 0 - jumpeq MossdeepCity_House1_EventScript_15A855 + goto_if_eq MossdeepCity_House1_EventScript_15A855 msgbox MossdeepCity_House1_Text_18D475, 4 release end diff --git a/data/scripts/maps/MossdeepCity_House2.inc b/data/scripts/maps/MossdeepCity_House2.inc index f3d07b64e..3cf5a8ff4 100644 --- a/data/scripts/maps/MossdeepCity_House2.inc +++ b/data/scripts/maps/MossdeepCity_House2.inc @@ -20,9 +20,9 @@ MossdeepCity_House2_EventScript_15A87B:: @ 815A87B setflag 224 clearflag 933 compare FACING, 2 - callif 1, MossdeepCity_House2_EventScript_15A8AE + call_if 1, MossdeepCity_House2_EventScript_15A8AE compare FACING, 3 - callif 1, MossdeepCity_House2_EventScript_15A8B9 + call_if 1, MossdeepCity_House2_EventScript_15A8B9 disappear 3 release end diff --git a/data/scripts/maps/MossdeepCity_House3.inc b/data/scripts/maps/MossdeepCity_House3.inc index fd97ee598..8f9bf4dc5 100644 --- a/data/scripts/maps/MossdeepCity_House3.inc +++ b/data/scripts/maps/MossdeepCity_House3.inc @@ -5,10 +5,10 @@ MossdeepCity_House3_EventScript_15A972:: @ 815A972 lock faceplayer checkflag 152 - jumpeq MossdeepCity_House3_EventScript_15A9B1 + goto_if_eq MossdeepCity_House3_EventScript_15A9B1 msgbox MossdeepCity_House3_Text_18D909, 5 compare RESULT, 0 - jumpeq MossdeepCity_House3_EventScript_15A9BB + goto_if_eq MossdeepCity_House3_EventScript_15A9BB msgbox MossdeepCity_House3_Text_18D9A9, 4 giveitem ITEM_SUPER_ROD setflag 152 diff --git a/data/scripts/maps/MossdeepCity_House4.inc b/data/scripts/maps/MossdeepCity_House4.inc index 12dc941e7..215cf5e35 100644 --- a/data/scripts/maps/MossdeepCity_House4.inc +++ b/data/scripts/maps/MossdeepCity_House4.inc @@ -5,7 +5,7 @@ MossdeepCity_House4_EventScript_15AB31:: @ 815AB31 lock faceplayer checkflag 2052 - jumpeq MossdeepCity_House4_EventScript_15AB46 + goto_if_eq MossdeepCity_House4_EventScript_15AB46 msgbox MossdeepCity_House4_Text_18E0E3, 4 release end @@ -20,7 +20,7 @@ MossdeepCity_House4_EventScript_15AB50:: @ 815AB50 faceplayer special sub_80BB63C compare RESULT, 0 - jumpeq MossdeepCity_House4_EventScript_15AB6D + goto_if_eq MossdeepCity_House4_EventScript_15AB6D special GetSecretBaseNearbyMapName msgbox MossdeepCity_House4_Text_18E17E, 4 release diff --git a/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc b/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc index db31e4c62..369523b42 100644 --- a/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc +++ b/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc @@ -8,9 +8,9 @@ MossdeepCity_SpaceCenter_1F_EventScript_15AB8B:: @ 815AB8B specialval RESULT, GetWeekCount buffernum 0, RESULT compare RESULT, 0 - callif 1, MossdeepCity_SpaceCenter_1F_EventScript_15ABBA + call_if 1, MossdeepCity_SpaceCenter_1F_EventScript_15ABBA compare RESULT, 1 - callif 4, MossdeepCity_SpaceCenter_1F_EventScript_15ABC3 + call_if 4, MossdeepCity_SpaceCenter_1F_EventScript_15ABC3 closebutton move LAST_TALKED, MossdeepCity_SpaceCenter_1F_Movement_1A083D waitmove 0 @@ -33,11 +33,11 @@ MossdeepCity_SpaceCenter_1F_EventScript_15ABD5:: @ 815ABD5 lock faceplayer checkflag 192 - jumpeq MossdeepCity_SpaceCenter_1F_EventScript_15AC0C + goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_15AC0C msgbox MossdeepCity_SpaceCenter_1F_Text_18E335, 4 giveitem ITEM_SUN_STONE compare RESULT, 0 - jumpeq MossdeepCity_SpaceCenter_1F_EventScript_1A029B + goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_1A029B setflag 192 msgbox MossdeepCity_SpaceCenter_1F_Text_18E39B, 4 release diff --git a/data/scripts/maps/MossdeepCity_StevensHouse.inc b/data/scripts/maps/MossdeepCity_StevensHouse.inc index d4477bd39..f6ba77cb9 100644 --- a/data/scripts/maps/MossdeepCity_StevensHouse.inc +++ b/data/scripts/maps/MossdeepCity_StevensHouse.inc @@ -6,7 +6,7 @@ MossdeepCity_StevensHouse_MapScripts:: @ 815A9C5 MossdeepCity_StevensHouse_MapScript1_15A9D5:: @ 815A9D5 checkflag 2052 - callif 0, MossdeepCity_StevensHouse_EventScript_15A9DF + call_if 0, MossdeepCity_StevensHouse_EventScript_15A9DF end MossdeepCity_StevensHouse_EventScript_15A9DF:: @ 815A9DF @@ -15,7 +15,7 @@ MossdeepCity_StevensHouse_EventScript_15A9DF:: @ 815A9DF MossdeepCity_StevensHouse_MapScript1_15A9E9:: @ 815A9E9 compare 0x40c6, 1 - callif 1, MossdeepCity_StevensHouse_EventScript_15A9F5 + call_if 1, MossdeepCity_StevensHouse_EventScript_15A9F5 end MossdeepCity_StevensHouse_EventScript_15A9F5:: @ 815A9F5 @@ -73,10 +73,10 @@ MossdeepCity_StevensHouse_EventScript_15AA7C:: @ 815AA7C lockall msgbox MossdeepCity_StevensHouse_Text_18DD12, 5 compare RESULT, 0 - jumpeq MossdeepCity_StevensHouse_EventScript_15AAE6 + goto_if_eq MossdeepCity_StevensHouse_EventScript_15AAE6 countpokemon compare RESULT, 6 - jumpeq MossdeepCity_StevensHouse_EventScript_15AADC + goto_if_eq MossdeepCity_StevensHouse_EventScript_15AADC copyvar 0x8004, RESULT disappear 2 fanfare 370 @@ -87,7 +87,7 @@ MossdeepCity_StevensHouse_EventScript_15AA7C:: @ 815AA7C bufferpoke 1, SPECIES_BELDUM msgbox MossdeepCity_StevensHouse_Text_1A1102, 5 compare RESULT, 1 - callif 1, MossdeepCity_StevensHouse_EventScript_1A0678 + call_if 1, MossdeepCity_StevensHouse_EventScript_1A0678 setflag 968 setflag 298 releaseall @@ -114,7 +114,7 @@ MossdeepCity_StevensHouse_EventScript_15AAF9:: @ 815AAF9 MossdeepCity_StevensHouse_EventScript_15AB02:: @ 815AB02 lockall checkflag 302 - jumpeq MossdeepCity_StevensHouse_EventScript_15AB16 + goto_if_eq MossdeepCity_StevensHouse_EventScript_15AB16 msgbox MossdeepCity_StevensHouse_Text_18DF1A, 4 releaseall end diff --git a/data/scripts/maps/MtChimney.inc b/data/scripts/maps/MtChimney.inc index 0134adbdf..458e4a15b 100644 --- a/data/scripts/maps/MtChimney.inc +++ b/data/scripts/maps/MtChimney.inc @@ -19,17 +19,17 @@ MtChimney_EventScript_15CF95:: @ 815CF95 nop msgbox MtChimney_Text_195760, 5 compare RESULT, 0 - jumpeq MtChimney_EventScript_15D00B + goto_if_eq MtChimney_EventScript_15D00B checkmoney 0xc8, 0 compare RESULT, 0 - jumpeq MtChimney_EventScript_15D018 + goto_if_eq MtChimney_EventScript_15D018 msgbox MtChimney_Text_1957A9, 4 checkitemspace ITEM_LAVA_COOKIE, 1 compare RESULT, 1 - callif 1, MtChimney_EventScript_15D000 + call_if 1, MtChimney_EventScript_15D000 giveitem ITEM_LAVA_COOKIE compare RESULT, 0 - jumpeq MtChimney_EventScript_15CFF3 + goto_if_eq MtChimney_EventScript_15CFF3 hidemoney 0, 0 release end @@ -407,12 +407,12 @@ MtChimney_EventScript_15D174:: @ 815D174 MtChimney_EventScript_15D17D:: @ 815D17D lockall checkflag 139 - jumpif 0, MtChimney_EventScript_15D1D0 + goto_if 0, MtChimney_EventScript_15D1D0 checkflag 115 - jumpeq MtChimney_EventScript_15D1C6 + goto_if_eq MtChimney_EventScript_15D1C6 msgbox MtChimney_Text_195870, 5 compare RESULT, 0 - jumpeq MtChimney_EventScript_15D1BC + goto_if_eq MtChimney_EventScript_15D1BC msgbox MtChimney_Text_1958C6, 4 giveitem ITEM_METEORITE setflag 115 @@ -442,7 +442,7 @@ MtChimney_EventScript_15D1E3:: @ 815D1E3 trainerbattle 0, OPPONENT_SHELBY_1, 0, MtChimney_Text_19597F, MtChimney_Text_1959D8 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq MtChimney_EventScript_15D20A + goto_if_eq MtChimney_EventScript_15D20A msgbox MtChimney_Text_195A04, 6 end diff --git a/data/scripts/maps/MtChimney_CableCarStation.inc b/data/scripts/maps/MtChimney_CableCarStation.inc index 24101b0cb..6f4ea44a5 100644 --- a/data/scripts/maps/MtChimney_CableCarStation.inc +++ b/data/scripts/maps/MtChimney_CableCarStation.inc @@ -5,7 +5,7 @@ MtChimney_CableCarStation_MapScripts:: @ 815C0FA MtChimney_CableCarStation_MapScript1_15C105:: @ 815C105 compare 0x40a3, 1 - callif 1, MtChimney_CableCarStation_EventScript_15C111 + call_if 1, MtChimney_CableCarStation_EventScript_15C111 end MtChimney_CableCarStation_EventScript_15C111:: @ 815C111 @@ -33,9 +33,9 @@ MtChimney_CableCarStation_EventScript_15C14B:: @ 815C14B faceplayer msgbox MtChimney_CableCarStation_Text_19256A, 5 compare RESULT, 1 - jumpeq MtChimney_CableCarStation_EventScript_15C16C + goto_if_eq MtChimney_CableCarStation_EventScript_15C16C compare RESULT, 0 - jumpeq MtChimney_CableCarStation_EventScript_15C19B + goto_if_eq MtChimney_CableCarStation_EventScript_15C19B end MtChimney_CableCarStation_EventScript_15C16C:: @ 815C16C diff --git a/data/scripts/maps/MtPyre_1F.inc b/data/scripts/maps/MtPyre_1F.inc index 805c4a8d3..026d54bfe 100644 --- a/data/scripts/maps/MtPyre_1F.inc +++ b/data/scripts/maps/MtPyre_1F.inc @@ -5,11 +5,11 @@ MtPyre_1F_EventScript_15D323:: @ 815D323 lock faceplayer checkflag 282 - jumpeq MtPyre_1F_EventScript_15D352 + goto_if_eq MtPyre_1F_EventScript_15D352 msgbox MtPyre_1F_Text_196151, 4 giveitem ITEM_CLEANSE_TAG compare RESULT, 0 - jumpeq MtPyre_1F_EventScript_1A029B + goto_if_eq MtPyre_1F_EventScript_1A029B setflag 282 release end diff --git a/data/scripts/maps/MtPyre_6F.inc b/data/scripts/maps/MtPyre_6F.inc index 657b4ef15..4f8d99c5e 100644 --- a/data/scripts/maps/MtPyre_6F.inc +++ b/data/scripts/maps/MtPyre_6F.inc @@ -5,7 +5,7 @@ MtPyre_6F_EventScript_15D448:: @ 815D448 trainerbattle 0, OPPONENT_VALERIE_1, 0, MtPyre_6F_Text_1969FE, MtPyre_6F_Text_196A30 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq MtPyre_6F_EventScript_15D46F + goto_if_eq MtPyre_6F_EventScript_15D46F msgbox MtPyre_6F_Text_196A4C, 6 end diff --git a/data/scripts/maps/MtPyre_Exterior.inc b/data/scripts/maps/MtPyre_Exterior.inc index efffc7c3b..550f74d9a 100644 --- a/data/scripts/maps/MtPyre_Exterior.inc +++ b/data/scripts/maps/MtPyre_Exterior.inc @@ -9,7 +9,7 @@ MtPyre_Exterior_MapScript1_15D48C:: @ 815D48C MtPyre_Exterior_EventScript_15D492:: @ 815D492 getplayerxy 0x4000, 0x4001 compare 0x4001, 12 - jumpif 0, MtPyre_Exterior_EventScript_15D4A3 + goto_if 0, MtPyre_Exterior_EventScript_15D4A3 return MtPyre_Exterior_EventScript_15D4A3:: @ 815D4A3 diff --git a/data/scripts/maps/MtPyre_Summit.inc b/data/scripts/maps/MtPyre_Summit.inc index f30b6fb9e..31a83857b 100644 --- a/data/scripts/maps/MtPyre_Summit.inc +++ b/data/scripts/maps/MtPyre_Summit.inc @@ -31,11 +31,11 @@ MtPyre_Summit_EventScript_15D4E1:: @ 815D4E1 waitmove 0 pause 50 compare 0x8008, 0 - callif 1, MtPyre_Summit_EventScript_15D593 + call_if 1, MtPyre_Summit_EventScript_15D593 compare 0x8008, 1 - callif 1, MtPyre_Summit_EventScript_15D59E + call_if 1, MtPyre_Summit_EventScript_15D59E compare 0x8008, 2 - callif 1, MtPyre_Summit_EventScript_15D59F + call_if 1, MtPyre_Summit_EventScript_15D59F .ifdef SAPPHIRE msgbox UnknownString_81B52B0, 4 .else @@ -53,11 +53,11 @@ MtPyre_Summit_EventScript_15D4E1:: @ 815D4E1 pause 20 call MtPyre_Summit_EventScript_15D57A compare 0x8008, 0 - callif 1, MtPyre_Summit_EventScript_15D5AA + call_if 1, MtPyre_Summit_EventScript_15D5AA compare 0x8008, 1 - callif 1, MtPyre_Summit_EventScript_15D5BF + call_if 1, MtPyre_Summit_EventScript_15D5BF compare 0x8008, 2 - callif 1, MtPyre_Summit_EventScript_15D5CA + call_if 1, MtPyre_Summit_EventScript_15D5CA .ifdef SAPPHIRE msgbox UnknownString_81B53AB, 4 .else @@ -144,9 +144,9 @@ MtPyre_Summit_EventScript_15D5EF:: @ 815D5EF msgbox MtPyre_Summit_Text_1B64B3, 5 .endif compare RESULT, 1 - callif 1, MtPyre_Summit_EventScript_15D611 + call_if 1, MtPyre_Summit_EventScript_15D611 compare RESULT, 0 - callif 1, MtPyre_Summit_EventScript_15D61A + call_if 1, MtPyre_Summit_EventScript_15D61A release end @@ -170,11 +170,11 @@ MtPyre_Summit_EventScript_15D623:: @ 815D623 lock faceplayer checkflag 259 - jumpeq MtPyre_Summit_EventScript_15D6C4 + goto_if_eq MtPyre_Summit_EventScript_15D6C4 checkflag 113 - jumpeq MtPyre_Summit_EventScript_15D64A + goto_if_eq MtPyre_Summit_EventScript_15D64A checkflag 129 - jumpeq MtPyre_Summit_EventScript_15D6BA + goto_if_eq MtPyre_Summit_EventScript_15D6BA .ifdef SAPPHIRE msgbox UnknownString_81B54BE, 4 .else @@ -190,9 +190,9 @@ MtPyre_Summit_EventScript_15D64A:: @ 815D64A msgbox MtPyre_Summit_Text_1B6283, 5 .endif compare RESULT, 1 - jumpeq MtPyre_Summit_EventScript_15D669 + goto_if_eq MtPyre_Summit_EventScript_15D669 compare RESULT, 0 - jumpeq MtPyre_Summit_EventScript_15D69B + goto_if_eq MtPyre_Summit_EventScript_15D69B end MtPyre_Summit_EventScript_15D669:: @ 815D669 @@ -221,9 +221,9 @@ MtPyre_Summit_EventScript_15D69B:: @ 815D69B msgbox MtPyre_Summit_Text_1B62E7, 5 .endif compare RESULT, 1 - jumpeq MtPyre_Summit_EventScript_15D669 + goto_if_eq MtPyre_Summit_EventScript_15D669 compare RESULT, 0 - jumpeq MtPyre_Summit_EventScript_15D69B + goto_if_eq MtPyre_Summit_EventScript_15D69B end MtPyre_Summit_EventScript_15D6BA:: @ 815D6BA @@ -269,11 +269,11 @@ MtPyre_Summit_EventScript_15D6F2:: @ 815D6F2 waitmove 0 pause 50 compare 0x8008, 0 - callif 1, MtPyre_Summit_EventScript_15D75E + call_if 1, MtPyre_Summit_EventScript_15D75E compare 0x8008, 1 - callif 1, MtPyre_Summit_EventScript_15D769 + call_if 1, MtPyre_Summit_EventScript_15D769 compare 0x8008, 2 - callif 1, MtPyre_Summit_EventScript_15D774 + call_if 1, MtPyre_Summit_EventScript_15D774 .ifdef SAPPHIRE msgbox UnknownString_81B5BFC, 4 .else @@ -281,11 +281,11 @@ MtPyre_Summit_EventScript_15D6F2:: @ 815D6F2 .endif closebutton compare 0x8008, 0 - callif 1, MtPyre_Summit_EventScript_15D77F + call_if 1, MtPyre_Summit_EventScript_15D77F compare 0x8008, 1 - callif 1, MtPyre_Summit_EventScript_15D78A + call_if 1, MtPyre_Summit_EventScript_15D78A compare 0x8008, 2 - callif 1, MtPyre_Summit_EventScript_15D795 + call_if 1, MtPyre_Summit_EventScript_15D795 disappear 2 setvar 0x40b9, 3 releaseall diff --git a/data/scripts/maps/NewMauville_Entrance.inc b/data/scripts/maps/NewMauville_Entrance.inc index 547fc72e7..698f2f6cd 100644 --- a/data/scripts/maps/NewMauville_Entrance.inc +++ b/data/scripts/maps/NewMauville_Entrance.inc @@ -5,7 +5,7 @@ NewMauville_Entrance_MapScripts:: @ 815E48A NewMauville_Entrance_MapScript1_15E495:: @ 815E495 compare 0x40ba, 0 - callif 1, NewMauville_Entrance_EventScript_15E4A1 + call_if 1, NewMauville_Entrance_EventScript_15E4A1 end NewMauville_Entrance_EventScript_15E4A1:: @ 815E4A1 @@ -28,10 +28,10 @@ NewMauville_Entrance_EventScript_15E4DC:: @ 815E4DC msgbox NewMauville_Entrance_Text_1982C0, 4 checkitem ITEM_BASEMENT_KEY, 1 compare RESULT, 0 - jumpeq NewMauville_Entrance_EventScript_15E55D + goto_if_eq NewMauville_Entrance_EventScript_15E55D msgbox NewMauville_Entrance_Text_1982D4, 5 compare RESULT, 0 - jumpeq NewMauville_Entrance_EventScript_15E55D + goto_if_eq NewMauville_Entrance_EventScript_15E55D msgbox NewMauville_Entrance_Text_1982EA, 4 setmaptile 3, 0, 707, 0 setmaptile 4, 0, 708, 0 diff --git a/data/scripts/maps/NewMauville_Inside.inc b/data/scripts/maps/NewMauville_Inside.inc index b088b8e7d..352bb8a6d 100644 --- a/data/scripts/maps/NewMauville_Inside.inc +++ b/data/scripts/maps/NewMauville_Inside.inc @@ -6,11 +6,11 @@ NewMauville_Inside_MapScripts:: @ 815E55F NewMauville_Inside_MapScript1_15E56F:: @ 815E56F compare 0x4001, 1 - callif 1, NewMauville_Inside_EventScript_15E5DA + call_if 1, NewMauville_Inside_EventScript_15E5DA compare 0x4002, 1 - callif 1, NewMauville_Inside_EventScript_15E728 + call_if 1, NewMauville_Inside_EventScript_15E728 checkflag 2145 - callif 1, NewMauville_Inside_EventScript_15E58F + call_if 1, NewMauville_Inside_EventScript_15E58F end NewMauville_Inside_EventScript_15E58F:: @ 815E58F @@ -24,7 +24,7 @@ NewMauville_Inside_MapScript1_15E593:: @ 815E593 NewMauville_Inside_MapScript1_15E59E:: @ 815E59E compare 0x40ba, 2 - callif 1, NewMauville_Inside_EventScript_15E88B + call_if 1, NewMauville_Inside_EventScript_15E88B end NewMauville_Inside_EventScript_15E5AA:: @ 815E5AA @@ -151,7 +151,7 @@ NewMauville_Inside_EventScript_15E88B:: @ 815E88B NewMauville_Inside_EventScript_15E8E0:: @ 815E8E0 lockall compare 0x40ba, 2 - jumpeq NewMauville_Inside_EventScript_15E8F6 + goto_if_eq NewMauville_Inside_EventScript_15E8F6 msgbox NewMauville_Inside_Text_198315, 4 releaseall end diff --git a/data/scripts/maps/OldaleTown.inc b/data/scripts/maps/OldaleTown.inc index f1d554d87..d620df71e 100644 --- a/data/scripts/maps/OldaleTown.inc +++ b/data/scripts/maps/OldaleTown.inc @@ -6,11 +6,11 @@ OldaleTown_MapScript1_14DD68:: @ 814DD68 call OldaleTown_EventScript_1A014E setflag 2064 checkflag 116 - callif 0, OldaleTown_EventScript_14DD92 + call_if 0, OldaleTown_EventScript_14DD92 checkflag 132 - callif 0, OldaleTown_EventScript_14DD9E + call_if 0, OldaleTown_EventScript_14DD9E checkflag 116 - callif 1, OldaleTown_EventScript_14DD8C + call_if 1, OldaleTown_EventScript_14DD8C end OldaleTown_EventScript_14DD8C:: @ 814DD8C @@ -39,9 +39,9 @@ OldaleTown_EventScript_14DDBC:: @ 814DDBC lock faceplayer checkflag 132 - jumpeq OldaleTown_EventScript_14DE79 + goto_if_eq OldaleTown_EventScript_14DE79 checkflag 1 - jumpeq OldaleTown_EventScript_14DE79 + goto_if_eq OldaleTown_EventScript_14DE79 setflag 1 playmusic 420, 0 msgbox OldaleTown_Text_16AEF2, 4 @@ -77,7 +77,7 @@ OldaleTown_EventScript_14DE4C:: @ 814DE4C msgbox OldaleTown_Text_16AF2F, 4 giveitem ITEM_POTION compare RESULT, 0 - jumpeq OldaleTown_EventScript_14DE83 + goto_if_eq OldaleTown_EventScript_14DE83 msgbox OldaleTown_Text_16AFE1, 4 setflag 132 fadedefault @@ -196,7 +196,7 @@ OldaleTown_EventScript_14DEDF:: @ 814DEDF lock faceplayer checkflag 116 - jumpeq OldaleTown_EventScript_14DF26 + goto_if_eq OldaleTown_EventScript_14DF26 msgbox OldaleTown_Text_16B0CC, 4 closebutton move 3, OldaleTown_Movement_1A083D @@ -258,9 +258,9 @@ OldaleTown_EventScript_14DF77:: @ 814DF77 OldaleTown_EventScript_14DF92:: @ 814DF92 checkgender compare RESULT, 0 - jumpeq OldaleTown_EventScript_14DFAA + goto_if_eq OldaleTown_EventScript_14DFAA compare RESULT, 1 - jumpeq OldaleTown_EventScript_14DFB8 + goto_if_eq OldaleTown_EventScript_14DFB8 end OldaleTown_EventScript_14DFAA:: @ 814DFAA diff --git a/data/scripts/maps/OldaleTown_Mart.inc b/data/scripts/maps/OldaleTown_Mart.inc index 3f4994890..77d7eee4d 100644 --- a/data/scripts/maps/OldaleTown_Mart.inc +++ b/data/scripts/maps/OldaleTown_Mart.inc @@ -7,7 +7,7 @@ OldaleTown_Mart_EventScript_152F79:: @ 8152F79 message OldaleTown_Mart_Text_1A0BE4 waittext checkflag 116 - jumpeq OldaleTown_Mart_EventScript_152FA8 + goto_if_eq OldaleTown_Mart_EventScript_152FA8 pokemart OldaleTown_Mart_Items1 msgbox OldaleTown_Mart_Text_1A0C02, 4 release @@ -44,7 +44,7 @@ OldaleTown_Mart_EventScript_152FC6:: @ 8152FC6 lock faceplayer checkflag 116 - jumpeq OldaleTown_Mart_EventScript_152FDB + goto_if_eq OldaleTown_Mart_EventScript_152FDB msgbox OldaleTown_Mart_Text_174A8A, 4 release end diff --git a/data/scripts/maps/OldaleTown_PokemonCenter_1F.inc b/data/scripts/maps/OldaleTown_PokemonCenter_1F.inc index 4ba96ddc8..6d2fe54f0 100644 --- a/data/scripts/maps/OldaleTown_PokemonCenter_1F.inc +++ b/data/scripts/maps/OldaleTown_PokemonCenter_1F.inc @@ -27,7 +27,7 @@ OldaleTown_PokemonCenter_1F_EventScript_152F37:: @ 8152F37 lock faceplayer checkflag 2049 - jumpeq OldaleTown_PokemonCenter_1F_EventScript_152F4C + goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_152F4C msgbox OldaleTown_PokemonCenter_1F_Text_1749C0, 4 release end diff --git a/data/scripts/maps/PacifidlogTown_House2.inc b/data/scripts/maps/PacifidlogTown_House2.inc index f2174441f..aaeeb2453 100644 --- a/data/scripts/maps/PacifidlogTown_House2.inc +++ b/data/scripts/maps/PacifidlogTown_House2.inc @@ -7,27 +7,27 @@ PacifidlogTown_House2_EventScript_154168:: @ 8154168 checkdailyflags call PacifidlogTown_House2_EventScript_1541B4 checkflag 299 - jumpeq PacifidlogTown_House2_EventScript_154254 + goto_if_eq PacifidlogTown_House2_EventScript_154254 checkflag 300 - callif 1, PacifidlogTown_House2_EventScript_1541CE + call_if 1, PacifidlogTown_House2_EventScript_1541CE checkflag 300 - callif 0, PacifidlogTown_House2_EventScript_1541D7 + call_if 0, PacifidlogTown_House2_EventScript_1541D7 setflag 300 specialval RESULT, GetLeadMonFriendshipScore compare RESULT, 4 - jumpif 4, PacifidlogTown_House2_EventScript_1541EC + goto_if 4, PacifidlogTown_House2_EventScript_1541EC specialval RESULT, GetLeadMonFriendshipScore compare RESULT, 2 - jumpif 4, PacifidlogTown_House2_EventScript_15421B + goto_if 4, PacifidlogTown_House2_EventScript_15421B goto PacifidlogTown_House2_EventScript_154225 end PacifidlogTown_House2_EventScript_1541B4:: @ 81541B4 checkflag 299 - jumpif 0, PacifidlogTown_House2_EventScript_1A14DC + goto_if 0, PacifidlogTown_House2_EventScript_1A14DC specialval RESULT, sub_810F908 compare RESULT, 0 - callif 1, PacifidlogTown_House2_EventScript_1541E8 + call_if 1, PacifidlogTown_House2_EventScript_1541E8 return PacifidlogTown_House2_EventScript_1541CE:: @ 81541CE @@ -47,7 +47,7 @@ PacifidlogTown_House2_EventScript_1541EC:: @ 81541EC msgbox PacifidlogTown_House2_Text_179169, 4 giveitem ITEM_TM27 compare RESULT, 0 - jumpeq PacifidlogTown_House2_EventScript_1A029B + goto_if_eq PacifidlogTown_House2_EventScript_1A029B setflag 299 special sub_810F950 msgbox PacifidlogTown_House2_Text_179283, 4 @@ -63,7 +63,7 @@ PacifidlogTown_House2_EventScript_154225:: @ 8154225 msgbox PacifidlogTown_House2_Text_17922D, 4 giveitem ITEM_TM21 compare RESULT, 0 - jumpeq PacifidlogTown_House2_EventScript_1A029B + goto_if_eq PacifidlogTown_House2_EventScript_1A029B setflag 299 special sub_810F950 msgbox PacifidlogTown_House2_Text_179283, 4 diff --git a/data/scripts/maps/PacifidlogTown_House3.inc b/data/scripts/maps/PacifidlogTown_House3.inc index 6ab9a09b0..73f749400 100644 --- a/data/scripts/maps/PacifidlogTown_House3.inc +++ b/data/scripts/maps/PacifidlogTown_House3.inc @@ -5,24 +5,24 @@ PacifidlogTown_House3_EventScript_15429E:: @ 815429E lock faceplayer checkflag 154 - jumpeq PacifidlogTown_House3_EventScript_154338 + goto_if_eq PacifidlogTown_House3_EventScript_154338 setvar 0x8008, 2 copyvar 0x8004, 0x8008 specialval RESULT, sub_804D89C copyvar 0x8009, RESULT msgbox PacifidlogTown_House3_Text_17940E, 5 compare RESULT, 0 - jumpeq PacifidlogTown_House3_EventScript_154320 + goto_if_eq PacifidlogTown_House3_EventScript_154320 special sub_80F9A0C waitstate copyvar 0x800a, 0x8004 compare 0x8004, 255 - jumpeq PacifidlogTown_House3_EventScript_154320 + goto_if_eq PacifidlogTown_House3_EventScript_154320 copyvar 0x8005, 0x800a specialval RESULT, sub_804DB2C copyvar 0x800b, RESULT comparevars RESULT, 0x8009 - jumpif 5, PacifidlogTown_House3_EventScript_15432A + goto_if 5, PacifidlogTown_House3_EventScript_15432A copyvar 0x8004, 0x8008 copyvar 0x8005, 0x800a special sub_804DB68 diff --git a/data/scripts/maps/PacifidlogTown_House4.inc b/data/scripts/maps/PacifidlogTown_House4.inc index e48644beb..b7a6c9f86 100644 --- a/data/scripts/maps/PacifidlogTown_House4.inc +++ b/data/scripts/maps/PacifidlogTown_House4.inc @@ -14,9 +14,9 @@ PacifidlogTown_House4_EventScript_15435E:: @ 815435E faceplayer msgbox PacifidlogTown_House4_Text_17963D, 5 compare RESULT, 1 - jumpeq PacifidlogTown_House4_EventScript_15437F + goto_if_eq PacifidlogTown_House4_EventScript_15437F compare RESULT, 0 - jumpeq PacifidlogTown_House4_EventScript_154389 + goto_if_eq PacifidlogTown_House4_EventScript_154389 end PacifidlogTown_House4_EventScript_15437F:: @ 815437F diff --git a/data/scripts/maps/PacifidlogTown_House5.inc b/data/scripts/maps/PacifidlogTown_House5.inc index dca1a51b0..fdc496d1f 100644 --- a/data/scripts/maps/PacifidlogTown_House5.inc +++ b/data/scripts/maps/PacifidlogTown_House5.inc @@ -6,7 +6,7 @@ PacifidlogTown_House5_EventScript_154394:: @ 8154394 faceplayer specialval RESULT, IsMirageIslandPresent compare RESULT, 1 - jumpeq PacifidlogTown_House5_EventScript_1543B0 + goto_if_eq PacifidlogTown_House5_EventScript_1543B0 msgbox PacifidlogTown_House5_Text_179718, 4 release end diff --git a/data/scripts/maps/PetalburgCity.inc b/data/scripts/maps/PetalburgCity.inc index ed575844c..1ffc14144 100644 --- a/data/scripts/maps/PetalburgCity.inc +++ b/data/scripts/maps/PetalburgCity.inc @@ -6,9 +6,9 @@ PetalburgCity_MapScripts:: @ 814B70C PetalburgCity_MapScript1_14B717:: @ 814B717 setflag 2070 compare 0x4057, 0 - callif 1, PetalburgCity_EventScript_14B731 + call_if 1, PetalburgCity_EventScript_14B731 compare 0x4057, 2 - callif 1, PetalburgCity_EventScript_14B739 + call_if 1, PetalburgCity_EventScript_14B739 end PetalburgCity_EventScript_14B731:: @ 814B731 @@ -188,23 +188,23 @@ PetalburgCity_EventScript_14B866:: @ 814B866 move 9, PetalburgCity_Movement_1A0835 waitmove 0 compare 0x8008, 0 - callif 1, PetalburgCity_EventScript_14B91B + call_if 1, PetalburgCity_EventScript_14B91B compare 0x8008, 1 - callif 1, PetalburgCity_EventScript_14B930 + call_if 1, PetalburgCity_EventScript_14B930 compare 0x8008, 2 - callif 1, PetalburgCity_EventScript_14B93B + call_if 1, PetalburgCity_EventScript_14B93B compare 0x8008, 3 - callif 1, PetalburgCity_EventScript_14B950 + call_if 1, PetalburgCity_EventScript_14B950 msgbox PetalburgCity_Text_16438A, 4 closebutton compare 0x8008, 0 - callif 1, PetalburgCity_EventScript_14B965 + call_if 1, PetalburgCity_EventScript_14B965 compare 0x8008, 1 - callif 1, PetalburgCity_EventScript_14B977 + call_if 1, PetalburgCity_EventScript_14B977 compare 0x8008, 2 - callif 1, PetalburgCity_EventScript_14B989 + call_if 1, PetalburgCity_EventScript_14B989 compare 0x8008, 3 - callif 1, PetalburgCity_EventScript_14B99B + call_if 1, PetalburgCity_EventScript_14B99B msgbox PetalburgCity_Text_164426, 4 move 9, PetalburgCity_Movement_1A0843 move 255, PetalburgCity_Movement_1A0843 diff --git a/data/scripts/maps/PetalburgCity_Gym.inc b/data/scripts/maps/PetalburgCity_Gym.inc index f8dfb0a39..4b0757f63 100644 --- a/data/scripts/maps/PetalburgCity_Gym.inc +++ b/data/scripts/maps/PetalburgCity_Gym.inc @@ -7,28 +7,28 @@ PetalburgCity_Gym_MapScripts:: @ 8154477 PetalburgCity_Gym_MapScript1_15448C:: @ 815448C compare 0x4085, 6 - jumpeq PetalburgCity_Gym_EventScript_1544A3 + goto_if_eq PetalburgCity_Gym_EventScript_1544A3 compare 0x4085, 7 - callif 4, PetalburgCity_Gym_EventScript_1544ED + call_if 4, PetalburgCity_Gym_EventScript_1544ED end PetalburgCity_Gym_EventScript_1544A3:: @ 81544A3 setvar 0x8005, 1 call PetalburgCity_Gym_EventScript_154F9A checktrainerflag OPPONENT_RANDALL - callif 1, PetalburgCity_Gym_EventScript_154FBB + call_if 1, PetalburgCity_Gym_EventScript_154FBB checktrainerflag OPPONENT_MARY - callif 1, PetalburgCity_Gym_EventScript_154FDC + call_if 1, PetalburgCity_Gym_EventScript_154FDC checktrainerflag OPPONENT_PARKER - callif 1, PetalburgCity_Gym_EventScript_154FFD + call_if 1, PetalburgCity_Gym_EventScript_154FFD checktrainerflag OPPONENT_LORI - callif 1, PetalburgCity_Gym_EventScript_15501E + call_if 1, PetalburgCity_Gym_EventScript_15501E checktrainerflag OPPONENT_GEORGE - callif 1, PetalburgCity_Gym_EventScript_15503F + call_if 1, PetalburgCity_Gym_EventScript_15503F checktrainerflag OPPONENT_JODY - callif 1, PetalburgCity_Gym_EventScript_155060 + call_if 1, PetalburgCity_Gym_EventScript_155060 checktrainerflag OPPONENT_BERKE - callif 1, PetalburgCity_Gym_EventScript_155081 + call_if 1, PetalburgCity_Gym_EventScript_155081 end PetalburgCity_Gym_EventScript_1544ED:: @ 81544ED @@ -45,11 +45,11 @@ PetalburgCity_Gym_EventScript_1544ED:: @ 81544ED PetalburgCity_Gym_MapScript1_15451B:: @ 815451B compare 0x4085, 1 - callif 1, PetalburgCity_Gym_EventScript_15453B + call_if 1, PetalburgCity_Gym_EventScript_15453B compare 0x4085, 6 - callif 0, PetalburgCity_Gym_EventScript_154543 + call_if 0, PetalburgCity_Gym_EventScript_154543 checkflag 2052 - callif 1, PetalburgCity_Gym_EventScript_15454B + call_if 1, PetalburgCity_Gym_EventScript_15454B end PetalburgCity_Gym_EventScript_15453B:: @ 815453B @@ -145,65 +145,65 @@ PetalburgCity_Gym_EventScript_154669:: @ 8154669 reappear 10 playsfx 8 compare 0x8008, 0 - callif 1, PetalburgCity_Gym_EventScript_1547EE + call_if 1, PetalburgCity_Gym_EventScript_1547EE compare 0x8008, 1 - callif 1, PetalburgCity_Gym_EventScript_154800 + call_if 1, PetalburgCity_Gym_EventScript_154800 compare 0x8008, 2 - callif 1, PetalburgCity_Gym_EventScript_15481C + call_if 1, PetalburgCity_Gym_EventScript_15481C compare 0x8008, 3 - callif 1, PetalburgCity_Gym_EventScript_15481C + call_if 1, PetalburgCity_Gym_EventScript_15481C msgbox PetalburgCity_Gym_Text_179F07, 4 msgbox PetalburgCity_Gym_Text_179F37, 4 msgbox PetalburgCity_Gym_Text_179F70, 4 msgbox PetalburgCity_Gym_Text_17A03A, 4 compare 0x8008, 0 - callif 1, PetalburgCity_Gym_EventScript_154884 + call_if 1, PetalburgCity_Gym_EventScript_154884 compare 0x8008, 1 - callif 1, PetalburgCity_Gym_EventScript_15488F + call_if 1, PetalburgCity_Gym_EventScript_15488F compare 0x8008, 2 - callif 1, PetalburgCity_Gym_EventScript_1548A1 + call_if 1, PetalburgCity_Gym_EventScript_1548A1 compare 0x8008, 3 - callif 1, PetalburgCity_Gym_EventScript_1548B3 + call_if 1, PetalburgCity_Gym_EventScript_1548B3 msgbox PetalburgCity_Gym_Text_17A04A, 4 compare 0x8008, 0 - callif 1, PetalburgCity_Gym_EventScript_1548C5 + call_if 1, PetalburgCity_Gym_EventScript_1548C5 compare 0x8008, 1 - callif 1, PetalburgCity_Gym_EventScript_1548D0 + call_if 1, PetalburgCity_Gym_EventScript_1548D0 compare 0x8008, 2 - callif 1, PetalburgCity_Gym_EventScript_1548DB + call_if 1, PetalburgCity_Gym_EventScript_1548DB compare 0x8008, 3 - callif 1, PetalburgCity_Gym_EventScript_1548E6 + call_if 1, PetalburgCity_Gym_EventScript_1548E6 msgbox PetalburgCity_Gym_Text_17A0A8, 4 msgbox PetalburgCity_Gym_Text_17A0EB, 4 msgbox PetalburgCity_Gym_Text_17A156, 4 compare 0x8008, 0 - callif 1, PetalburgCity_Gym_EventScript_15492F + call_if 1, PetalburgCity_Gym_EventScript_15492F compare 0x8008, 1 - callif 1, PetalburgCity_Gym_EventScript_154930 + call_if 1, PetalburgCity_Gym_EventScript_154930 compare 0x8008, 2 - callif 1, PetalburgCity_Gym_EventScript_15493B + call_if 1, PetalburgCity_Gym_EventScript_15493B compare 0x8008, 3 - callif 1, PetalburgCity_Gym_EventScript_15493C + call_if 1, PetalburgCity_Gym_EventScript_15493C compare 0x8008, 0 - callif 1, PetalburgCity_Gym_EventScript_1548F1 + call_if 1, PetalburgCity_Gym_EventScript_1548F1 compare 0x8008, 1 - callif 1, PetalburgCity_Gym_EventScript_1548FC + call_if 1, PetalburgCity_Gym_EventScript_1548FC compare 0x8008, 2 - callif 1, PetalburgCity_Gym_EventScript_1548F1 + call_if 1, PetalburgCity_Gym_EventScript_1548F1 compare 0x8008, 3 - callif 1, PetalburgCity_Gym_EventScript_1548F1 + call_if 1, PetalburgCity_Gym_EventScript_1548F1 msgbox PetalburgCity_Gym_Text_17A171, 4 closebutton setflag 0x4001 playmusic 420, 0 compare 0x8008, 0 - callif 1, PetalburgCity_Gym_EventScript_154835 + call_if 1, PetalburgCity_Gym_EventScript_154835 compare 0x8008, 1 - callif 1, PetalburgCity_Gym_EventScript_15484E + call_if 1, PetalburgCity_Gym_EventScript_15484E compare 0x8008, 2 - callif 1, PetalburgCity_Gym_EventScript_154860 + call_if 1, PetalburgCity_Gym_EventScript_154860 compare 0x8008, 3 - callif 1, PetalburgCity_Gym_EventScript_154872 + call_if 1, PetalburgCity_Gym_EventScript_154872 disappear 10 setflag 728 setvar 0x4085, 1 @@ -353,11 +353,11 @@ PetalburgCity_Gym_EventScript_15493C:: @ 815493C PetalburgCity_Gym_EventScript_15493D:: @ 815493D call PetalburgCity_Gym_EventScript_154969 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_1549B8 + goto_if_eq PetalburgCity_Gym_EventScript_1549B8 checkflag 169 - jumpif 0, PetalburgCity_Gym_EventScript_154A2C + goto_if 0, PetalburgCity_Gym_EventScript_154A2C checkflag 2052 - jumpeq PetalburgCity_Gym_EventScript_154B69 + goto_if_eq PetalburgCity_Gym_EventScript_154B69 msgbox PetalburgCity_Gym_Text_17AA6B, 4 release end @@ -365,15 +365,15 @@ PetalburgCity_Gym_EventScript_15493D:: @ 815493D PetalburgCity_Gym_EventScript_154969:: @ 8154969 specialval RESULT, IsEnigmaBerryValid compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_1549B2 + goto_if_eq PetalburgCity_Gym_EventScript_1549B2 checkitem ITEM_ENIGMA_BERRY, 1 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_1549B2 + goto_if_eq PetalburgCity_Gym_EventScript_1549B2 checkpcitem ITEM_ENIGMA_BERRY, 1 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_1549B2 + goto_if_eq PetalburgCity_Gym_EventScript_1549B2 compare 0x402d, 0 - jumpeq PetalburgCity_Gym_EventScript_1549B2 + goto_if_eq PetalburgCity_Gym_EventScript_1549B2 msgbox PetalburgCity_Gym_Text_1C5570, 4 setvar RESULT, 1 return @@ -385,7 +385,7 @@ PetalburgCity_Gym_EventScript_1549B2:: @ 81549B2 PetalburgCity_Gym_EventScript_1549B8:: @ 81549B8 giveitem ITEM_ENIGMA_BERRY compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_1A029B + goto_if_eq PetalburgCity_Gym_EventScript_1A029B setvar 0x402d, 0 release end @@ -414,28 +414,28 @@ PetalburgCity_Gym_EventScript_1549D6:: @ 81549D6 PetalburgCity_Gym_EventScript_154A2C:: @ 8154A2C giveitem ITEM_TM42 compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_1A029B + goto_if_eq PetalburgCity_Gym_EventScript_1A029B setflag 169 msgbox PetalburgCity_Gym_Text_17A8CF, 4 msgbox PetalburgCity_Gym_Text_17A976, 4 closebutton compare FACING, 2 - callif 1, PetalburgCity_Gym_EventScript_154ABC + call_if 1, PetalburgCity_Gym_EventScript_154ABC compare FACING, 1 - callif 1, PetalburgCity_Gym_EventScript_154AC7 + call_if 1, PetalburgCity_Gym_EventScript_154AC7 compare FACING, 3 - callif 1, PetalburgCity_Gym_EventScript_154AD2 + call_if 1, PetalburgCity_Gym_EventScript_154AD2 compare FACING, 4 - callif 1, PetalburgCity_Gym_EventScript_154ADD + call_if 1, PetalburgCity_Gym_EventScript_154ADD pause 70 compare FACING, 2 - callif 1, PetalburgCity_Gym_EventScript_154AE8 + call_if 1, PetalburgCity_Gym_EventScript_154AE8 compare FACING, 1 - callif 1, PetalburgCity_Gym_EventScript_154AF3 + call_if 1, PetalburgCity_Gym_EventScript_154AF3 compare FACING, 3 - callif 1, PetalburgCity_Gym_EventScript_154AFE + call_if 1, PetalburgCity_Gym_EventScript_154AFE compare FACING, 4 - callif 1, PetalburgCity_Gym_EventScript_154B09 + call_if 1, PetalburgCity_Gym_EventScript_154B09 msgbox PetalburgCity_Gym_Text_17A9F6, 4 release end @@ -593,14 +593,14 @@ PetalburgCity_Gym_EventScript_154B69:: @ 8154B69 PetalburgCity_Gym_EventScript_154B73:: @ 8154B73 lockall compare 0x4085, 6 - jumpif 0, PetalburgCity_Gym_EventScript_154BB9 + goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 7 setvar 0x8009, 85 msgbox PetalburgCity_Gym_Text_17B870, 5 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_154BA8 + goto_if_eq PetalburgCity_Gym_EventScript_154BA8 compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_154BB7 + goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end PetalburgCity_Gym_EventScript_154BA8:: @ 8154BA8 @@ -623,150 +623,150 @@ PetalburgCity_Gym_EventScript_154BB9:: @ 8154BB9 PetalburgCity_Gym_EventScript_154BC3:: @ 8154BC3 lockall compare 0x4085, 6 - jumpif 0, PetalburgCity_Gym_EventScript_154BB9 + goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 1 setvar 0x8009, 98 msgbox PetalburgCity_Gym_Text_17B8D4, 5 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_154BA8 + goto_if_eq PetalburgCity_Gym_EventScript_154BA8 compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_154BB7 + goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end PetalburgCity_Gym_EventScript_154BF8:: @ 8154BF8 lockall checktrainerflag OPPONENT_RANDALL - jumpif 0, PetalburgCity_Gym_EventScript_154BB9 + goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 7 setvar 0x8009, 46 msgbox PetalburgCity_Gym_Text_17B90F, 5 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_154BA8 + goto_if_eq PetalburgCity_Gym_EventScript_154BA8 compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_154BB7 + goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end PetalburgCity_Gym_EventScript_154C2B:: @ 8154C2B lockall checktrainerflag OPPONENT_RANDALL - jumpif 0, PetalburgCity_Gym_EventScript_154BB9 + goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 1 setvar 0x8009, 59 msgbox PetalburgCity_Gym_Text_17B950, 5 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_154BA8 + goto_if_eq PetalburgCity_Gym_EventScript_154BA8 compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_154BB7 + goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end PetalburgCity_Gym_EventScript_154C5E:: @ 8154C5E lockall checktrainerflag OPPONENT_MARY - jumpif 0, PetalburgCity_Gym_EventScript_154BB9 + goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 7 setvar 0x8009, 59 msgbox PetalburgCity_Gym_Text_17B950, 5 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_154BA8 + goto_if_eq PetalburgCity_Gym_EventScript_154BA8 compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_154BB7 + goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end PetalburgCity_Gym_EventScript_154C91:: @ 8154C91 lockall checktrainerflag OPPONENT_MARY - jumpif 0, PetalburgCity_Gym_EventScript_154BB9 + goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 1 setvar 0x8009, 72 msgbox PetalburgCity_Gym_Text_17B98A, 5 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_154BA8 + goto_if_eq PetalburgCity_Gym_EventScript_154BA8 compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_154BB7 + goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end PetalburgCity_Gym_EventScript_154CC4:: @ 8154CC4 lockall checktrainerflag OPPONENT_PARKER - jumpif 0, PetalburgCity_Gym_EventScript_154BB9 + goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 1 setvar 0x8009, 20 msgbox PetalburgCity_Gym_Text_17B9C5, 5 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_154BA8 + goto_if_eq PetalburgCity_Gym_EventScript_154BA8 compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_154BB7 + goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end PetalburgCity_Gym_EventScript_154CF7:: @ 8154CF7 lockall checktrainerflag OPPONENT_LORI - jumpif 0, PetalburgCity_Gym_EventScript_154BB9 + goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 7 setvar 0x8009, 20 msgbox PetalburgCity_Gym_Text_17B9C5, 5 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_154BA8 + goto_if_eq PetalburgCity_Gym_EventScript_154BA8 compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_154BB7 + goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end PetalburgCity_Gym_EventScript_154D2A:: @ 8154D2A lockall checktrainerflag OPPONENT_LORI - jumpif 0, PetalburgCity_Gym_EventScript_154BB9 + goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 1 setvar 0x8009, 33 msgbox PetalburgCity_Gym_Text_17BA00, 5 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_154BA8 + goto_if_eq PetalburgCity_Gym_EventScript_154BA8 compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_154BB7 + goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end PetalburgCity_Gym_EventScript_154D5D:: @ 8154D5D lockall checktrainerflag OPPONENT_GEORGE - jumpif 0, PetalburgCity_Gym_EventScript_154BB9 + goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 7 setvar 0x8009, 33 msgbox PetalburgCity_Gym_Text_17BA00, 5 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_154BA8 + goto_if_eq PetalburgCity_Gym_EventScript_154BA8 compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_154BB7 + goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end PetalburgCity_Gym_EventScript_154D90:: @ 8154D90 lockall checktrainerflag OPPONENT_JODY - jumpif 0, PetalburgCity_Gym_EventScript_154BB9 + goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 1 setvar 0x8009, 7 msgbox PetalburgCity_Gym_Text_17BA3D, 5 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_154BA8 + goto_if_eq PetalburgCity_Gym_EventScript_154BA8 compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_154BB7 + goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end PetalburgCity_Gym_EventScript_154DC3:: @ 8154DC3 lockall checktrainerflag OPPONENT_BERKE - jumpif 0, PetalburgCity_Gym_EventScript_154BB9 + goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 7 setvar 0x8009, 7 msgbox PetalburgCity_Gym_Text_17BA3D, 5 compare RESULT, 1 - jumpeq PetalburgCity_Gym_EventScript_154BA8 + goto_if_eq PetalburgCity_Gym_EventScript_154BA8 compare RESULT, 0 - jumpeq PetalburgCity_Gym_EventScript_154BB7 + goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end PetalburgCity_Gym_EventScript_154DF6:: @ 8154DF6 trainerbattle 2, OPPONENT_RANDALL, 0, PetalburgCity_Gym_Text_17ADA5, PetalburgCity_Gym_Text_17AE11, PetalburgCity_Gym_EventScript_154E1A checkflag 1217 - jumpeq PetalburgCity_Gym_EventScript_154E29 + goto_if_eq PetalburgCity_Gym_EventScript_154E29 msgbox PetalburgCity_Gym_Text_17AE30, 6 end @@ -784,7 +784,7 @@ PetalburgCity_Gym_EventScript_154E29:: @ 8154E29 PetalburgCity_Gym_EventScript_154E32:: @ 8154E32 trainerbattle 2, OPPONENT_PARKER, 0, PetalburgCity_Gym_Text_17AF5A, PetalburgCity_Gym_Text_17AF98, PetalburgCity_Gym_EventScript_154E56 checkflag 1217 - jumpeq PetalburgCity_Gym_EventScript_154E65 + goto_if_eq PetalburgCity_Gym_EventScript_154E65 msgbox PetalburgCity_Gym_Text_17AFD3, 6 end @@ -802,7 +802,7 @@ PetalburgCity_Gym_EventScript_154E65:: @ 8154E65 PetalburgCity_Gym_EventScript_154E6E:: @ 8154E6E trainerbattle 2, OPPONENT_GEORGE, 0, PetalburgCity_Gym_Text_17B058, PetalburgCity_Gym_Text_17B0F7, PetalburgCity_Gym_EventScript_154E92 checkflag 1217 - jumpeq PetalburgCity_Gym_EventScript_154EA1 + goto_if_eq PetalburgCity_Gym_EventScript_154EA1 msgbox PetalburgCity_Gym_Text_17B12C, 6 end @@ -820,7 +820,7 @@ PetalburgCity_Gym_EventScript_154EA1:: @ 8154EA1 PetalburgCity_Gym_EventScript_154EAA:: @ 8154EAA trainerbattle 2, OPPONENT_BERKE, 0, PetalburgCity_Gym_Text_17B237, PetalburgCity_Gym_Text_17B2C0, PetalburgCity_Gym_EventScript_154ECE checkflag 1217 - jumpeq PetalburgCity_Gym_EventScript_154EDD + goto_if_eq PetalburgCity_Gym_EventScript_154EDD msgbox PetalburgCity_Gym_Text_17B2E4, 6 end @@ -838,7 +838,7 @@ PetalburgCity_Gym_EventScript_154EDD:: @ 8154EDD PetalburgCity_Gym_EventScript_154EE6:: @ 8154EE6 trainerbattle 2, OPPONENT_MARY, 0, PetalburgCity_Gym_Text_17B3F7, PetalburgCity_Gym_Text_17B454, PetalburgCity_Gym_EventScript_154F0A checkflag 1217 - jumpeq PetalburgCity_Gym_EventScript_154F19 + goto_if_eq PetalburgCity_Gym_EventScript_154F19 msgbox PetalburgCity_Gym_Text_17B46F, 6 end @@ -856,7 +856,7 @@ PetalburgCity_Gym_EventScript_154F19:: @ 8154F19 PetalburgCity_Gym_EventScript_154F22:: @ 8154F22 trainerbattle 2, OPPONENT_LORI, 0, PetalburgCity_Gym_Text_17B58D, PetalburgCity_Gym_Text_17B5CB, PetalburgCity_Gym_EventScript_154F46 checkflag 1217 - jumpeq PetalburgCity_Gym_EventScript_154F55 + goto_if_eq PetalburgCity_Gym_EventScript_154F55 msgbox PetalburgCity_Gym_Text_17B5EA, 6 end @@ -874,7 +874,7 @@ PetalburgCity_Gym_EventScript_154F55:: @ 8154F55 PetalburgCity_Gym_EventScript_154F5E:: @ 8154F5E trainerbattle 2, OPPONENT_JODY, 0, PetalburgCity_Gym_Text_17B6D4, PetalburgCity_Gym_Text_17B732, PetalburgCity_Gym_EventScript_154F82 checkflag 1217 - jumpeq PetalburgCity_Gym_EventScript_154F91 + goto_if_eq PetalburgCity_Gym_EventScript_154F91 msgbox PetalburgCity_Gym_Text_17B749, 6 end @@ -892,72 +892,72 @@ PetalburgCity_Gym_EventScript_154F91:: @ 8154F91 PetalburgCity_Gym_EventScript_154F9A:: @ 8154F9A setvar 0x8004, 1 compare 0x8005, 0 - callif 1, PetalburgCity_Gym_EventScript_155182 + call_if 1, PetalburgCity_Gym_EventScript_155182 compare 0x8005, 1 - callif 1, PetalburgCity_Gym_EventScript_155187 + call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_1550A2 return PetalburgCity_Gym_EventScript_154FBB:: @ 8154FBB setvar 0x8004, 2 compare 0x8005, 0 - callif 1, PetalburgCity_Gym_EventScript_155182 + call_if 1, PetalburgCity_Gym_EventScript_155182 compare 0x8005, 1 - callif 1, PetalburgCity_Gym_EventScript_155187 + call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_1550C7 return PetalburgCity_Gym_EventScript_154FDC:: @ 8154FDC setvar 0x8004, 3 compare 0x8005, 0 - callif 1, PetalburgCity_Gym_EventScript_155182 + call_if 1, PetalburgCity_Gym_EventScript_155182 compare 0x8005, 1 - callif 1, PetalburgCity_Gym_EventScript_155187 + call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_1550EC return PetalburgCity_Gym_EventScript_154FFD:: @ 8154FFD setvar 0x8004, 4 compare 0x8005, 0 - callif 1, PetalburgCity_Gym_EventScript_155182 + call_if 1, PetalburgCity_Gym_EventScript_155182 compare 0x8005, 1 - callif 1, PetalburgCity_Gym_EventScript_155187 + call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_155111 return PetalburgCity_Gym_EventScript_15501E:: @ 815501E setvar 0x8004, 5 compare 0x8005, 0 - callif 1, PetalburgCity_Gym_EventScript_155182 + call_if 1, PetalburgCity_Gym_EventScript_155182 compare 0x8005, 1 - callif 1, PetalburgCity_Gym_EventScript_155187 + call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_155124 return PetalburgCity_Gym_EventScript_15503F:: @ 815503F setvar 0x8004, 6 compare 0x8005, 0 - callif 1, PetalburgCity_Gym_EventScript_155182 + call_if 1, PetalburgCity_Gym_EventScript_155182 compare 0x8005, 1 - callif 1, PetalburgCity_Gym_EventScript_155187 + call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_155149 return PetalburgCity_Gym_EventScript_155060:: @ 8155060 setvar 0x8004, 7 compare 0x8005, 0 - callif 1, PetalburgCity_Gym_EventScript_155182 + call_if 1, PetalburgCity_Gym_EventScript_155182 compare 0x8005, 1 - callif 1, PetalburgCity_Gym_EventScript_155187 + call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_15515C return PetalburgCity_Gym_EventScript_155081:: @ 8155081 setvar 0x8004, 8 compare 0x8005, 0 - callif 1, PetalburgCity_Gym_EventScript_155182 + call_if 1, PetalburgCity_Gym_EventScript_155182 compare 0x8005, 1 - callif 1, PetalburgCity_Gym_EventScript_155187 + call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_15516F return @@ -1022,7 +1022,7 @@ PetalburgCity_Gym_EventScript_15518B:: @ 815518B lock faceplayer checkflag 1217 - jumpeq PetalburgCity_Gym_EventScript_1551A0 + goto_if_eq PetalburgCity_Gym_EventScript_1551A0 msgbox PetalburgCity_Gym_Text_17AB96, 4 release end @@ -1035,14 +1035,14 @@ PetalburgCity_Gym_EventScript_1551A0:: @ 81551A0 PetalburgCity_Gym_EventScript_1551AA:: @ 81551AA lockall checkflag 2059 - jumpeq PetalburgCity_Gym_EventScript_1551CA + goto_if_eq PetalburgCity_Gym_EventScript_1551CA goto PetalburgCity_Gym_EventScript_1551D4 end PetalburgCity_Gym_EventScript_1551BA:: @ 81551BA lockall checkflag 2059 - jumpeq PetalburgCity_Gym_EventScript_1551CA + goto_if_eq PetalburgCity_Gym_EventScript_1551CA goto PetalburgCity_Gym_EventScript_1551D4 end diff --git a/data/scripts/maps/PetalburgCity_Mart.inc b/data/scripts/maps/PetalburgCity_Mart.inc index 2eac03cac..ab7bb822a 100644 --- a/data/scripts/maps/PetalburgCity_Mart.inc +++ b/data/scripts/maps/PetalburgCity_Mart.inc @@ -7,7 +7,7 @@ PetalburgCity_Mart_EventScript_1552B0:: @ 81552B0 message PetalburgCity_Mart_Text_1A0BE4 waittext checkflag 296 - jumpeq PetalburgCity_Mart_EventScript_1552EA + goto_if_eq PetalburgCity_Mart_EventScript_1552EA pokemart PetalburgCity_Mart_Items1 msgbox PetalburgCity_Mart_Text_1A0C02, 4 release diff --git a/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc b/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc index 5ef99eee1..63dcaa6ca 100644 --- a/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc @@ -29,17 +29,17 @@ PetalburgCity_PokemonCenter_1F_EventScript_155233:: @ 8155233 msgbox PetalburgCity_PokemonCenter_1F_Text_17BDC5, 4 specialval RESULT, IsStarterInParty compare RESULT, 1 - jumpeq PetalburgCity_PokemonCenter_1F_EventScript_15524F + goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_15524F release end PetalburgCity_PokemonCenter_1F_EventScript_15524F:: @ 815524F compare 0x4023, 0 - callif 1, PetalburgCity_PokemonCenter_1F_EventScript_155272 + call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_155272 compare 0x4023, 1 - callif 1, PetalburgCity_PokemonCenter_1F_EventScript_15527B + call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_15527B compare 0x4023, 2 - callif 1, PetalburgCity_PokemonCenter_1F_EventScript_155284 + call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_155284 release end diff --git a/data/scripts/maps/PetalburgCity_WallysHouse.inc b/data/scripts/maps/PetalburgCity_WallysHouse.inc index fb521aa46..d8e95d8c6 100644 --- a/data/scripts/maps/PetalburgCity_WallysHouse.inc +++ b/data/scripts/maps/PetalburgCity_WallysHouse.inc @@ -5,13 +5,13 @@ PetalburgCity_WallysHouse_EventScript_1543C4:: @ 81543C4 lock faceplayer checkflag 126 - jumpeq PetalburgCity_WallysHouse_EventScript_1543F7 + goto_if_eq PetalburgCity_WallysHouse_EventScript_1543F7 checkflag 122 - jumpeq PetalburgCity_WallysHouse_EventScript_154427 + goto_if_eq PetalburgCity_WallysHouse_EventScript_154427 checkflag 1217 - jumpeq PetalburgCity_WallysHouse_EventScript_154406 + goto_if_eq PetalburgCity_WallysHouse_EventScript_154406 checkflag 135 - jumpeq PetalburgCity_WallysHouse_EventScript_15443B + goto_if_eq PetalburgCity_WallysHouse_EventScript_15443B msgbox PetalburgCity_WallysHouse_Text_179805, 4 setflag 135 release @@ -19,7 +19,7 @@ PetalburgCity_WallysHouse_EventScript_1543C4:: @ 81543C4 PetalburgCity_WallysHouse_EventScript_1543F7:: @ 81543F7 checkflag 122 - jumpeq PetalburgCity_WallysHouse_EventScript_154431 + goto_if_eq PetalburgCity_WallysHouse_EventScript_154431 goto PetalburgCity_WallysHouse_EventScript_154406 end @@ -50,9 +50,9 @@ PetalburgCity_WallysHouse_EventScript_154445:: @ 8154445 lock faceplayer checkflag 122 - jumpeq PetalburgCity_WallysHouse_EventScript_15446D + goto_if_eq PetalburgCity_WallysHouse_EventScript_15446D checkflag 1217 - jumpeq PetalburgCity_WallysHouse_EventScript_154463 + goto_if_eq PetalburgCity_WallysHouse_EventScript_154463 msgbox PetalburgCity_WallysHouse_Text_179C2C, 4 release end diff --git a/data/scripts/maps/PetalburgWoods.inc b/data/scripts/maps/PetalburgWoods.inc index 463fbec3c..d1d3a1b8a 100644 --- a/data/scripts/maps/PetalburgWoods.inc +++ b/data/scripts/maps/PetalburgWoods.inc @@ -92,7 +92,7 @@ PetalburgWoods_EventScript_15CDFA:: @ 815CDFA msgbox PetalburgWoods_Text_19507E, 4 giveitem ITEM_GREAT_BALL compare RESULT, 0 - jumpeq PetalburgWoods_EventScript_15CE3F + goto_if_eq PetalburgWoods_EventScript_15CE3F goto PetalburgWoods_EventScript_15CE4D end @@ -242,11 +242,11 @@ PetalburgWoods_EventScript_15CEDC:: @ 815CEDC lock faceplayer checkflag 297 - jumpeq PetalburgWoods_EventScript_15CF0B + goto_if_eq PetalburgWoods_EventScript_15CF0B msgbox PetalburgWoods_Text_19549E, 4 giveitem ITEM_MIRACLE_SEED compare RESULT, 0 - jumpeq PetalburgWoods_EventScript_1A029B + goto_if_eq PetalburgWoods_EventScript_1A029B setflag 297 release end @@ -273,7 +273,7 @@ PetalburgWoods_EventScript_15CF3E:: @ 815CF3E trainerbattle 0, OPPONENT_JAMES_1, 0, PetalburgWoods_Text_19526A, PetalburgWoods_Text_1952AE specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq PetalburgWoods_EventScript_15CF65 + goto_if_eq PetalburgWoods_EventScript_15CF65 msgbox PetalburgWoods_Text_1952CC, 6 end diff --git a/data/scripts/maps/Route102.inc b/data/scripts/maps/Route102.inc index b0a714763..5f9f76be2 100644 --- a/data/scripts/maps/Route102.inc +++ b/data/scripts/maps/Route102.inc @@ -21,7 +21,7 @@ Route102_EventScript_14EAFE:: @ 814EAFE trainerbattle 0, OPPONENT_CALVIN_1, 0, Route102_Text_1B79C3, Route102_Text_1B7A2C specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route102_EventScript_14EB25 + goto_if_eq Route102_EventScript_14EB25 msgbox Route102_Text_1B7A60, 6 end diff --git a/data/scripts/maps/Route103.inc b/data/scripts/maps/Route103.inc index 2d0c1c921..d12f8918f 100644 --- a/data/scripts/maps/Route103.inc +++ b/data/scripts/maps/Route103.inc @@ -11,9 +11,9 @@ Route103_EventScript_14EB92:: @ 814EB92 lockall checkgender compare RESULT, 0 - jumpeq Route103_EventScript_14EBAB + goto_if_eq Route103_EventScript_14EBAB compare RESULT, 1 - jumpeq Route103_EventScript_14EC04 + goto_if_eq Route103_EventScript_14EC04 end Route103_EventScript_14EBAB:: @ 814EBAB @@ -175,7 +175,7 @@ Route103_EventScript_14EDAB:: @ 814EDAB trainerbattle 4, OPPONENT_AMY_AND_LIV_1, 0, Route103_Text_1B7DF7, Route103_Text_1B7E3B, Route103_Text_1B7EAC specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route103_EventScript_14EDD6 + goto_if_eq Route103_EventScript_14EDD6 msgbox Route103_Text_1B7E50, 6 end @@ -188,7 +188,7 @@ Route103_EventScript_14EDF1:: @ 814EDF1 trainerbattle 4, OPPONENT_AMY_AND_LIV_1, 0, Route103_Text_1B7EFB, Route103_Text_1B7F20, Route103_Text_1B7F8E specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route103_EventScript_14EE1C + goto_if_eq Route103_EventScript_14EE1C msgbox Route103_Text_1B7F40, 6 end @@ -206,7 +206,7 @@ Route103_EventScript_14EE4E:: @ 814EE4E trainerbattle 0, OPPONENT_MIGUEL_1, 0, Route103_Text_1B82A9, Route103_Text_1B82EC specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route103_EventScript_14EE75 + goto_if_eq Route103_EventScript_14EE75 msgbox Route103_Text_1B830D, 6 end diff --git a/data/scripts/maps/Route104.inc b/data/scripts/maps/Route104.inc index d829c6a93..584ab47dd 100644 --- a/data/scripts/maps/Route104.inc +++ b/data/scripts/maps/Route104.inc @@ -18,9 +18,9 @@ Route104_MapScript1_14EEA8:: @ 814EEA8 Route104_EventScript_14EEAE:: @ 814EEAE checkflag 127 - jumpif 0, Route104_EventScript_14EEC4 + goto_if 0, Route104_EventScript_14EEC4 checkflag 2057 - jumpif 0, Route104_EventScript_14EEC4 + goto_if 0, Route104_EventScript_14EEC4 clearflag 906 return @@ -32,11 +32,11 @@ Route104_EventScript_14EEC8:: @ 814EEC8 lock faceplayer checkflag 246 - jumpeq Route104_EventScript_14EEFF + goto_if_eq Route104_EventScript_14EEFF msgbox Route104_Text_1C55B9, 4 giveitem ITEM_CHESTO_BERRY compare RESULT, 0 - jumpeq Route104_EventScript_1A029B + goto_if_eq Route104_EventScript_1A029B setflag 246 msgbox Route104_Text_1C5665, 4 release @@ -51,11 +51,11 @@ Route104_EventScript_14EF09:: @ 814EF09 lock faceplayer checkflag 279 - jumpeq Route104_EventScript_14EF38 + goto_if_eq Route104_EventScript_14EF38 msgbox Route104_Text_16DD91, 4 giveitem ITEM_WHITE_HERB compare RESULT, 0 - jumpeq Route104_EventScript_1A029B + goto_if_eq Route104_EventScript_1A029B setflag 279 release end @@ -105,11 +105,11 @@ Route104_EventScript_14EF93:: @ 814EF93 lock faceplayer checkflag 262 - jumpeq Route104_EventScript_14EFC2 + goto_if_eq Route104_EventScript_14EFC2 msgbox Route104_Text_16DC5F, 4 giveitem ITEM_TM09 compare RESULT, 0 - jumpeq Route104_EventScript_1A029B + goto_if_eq Route104_EventScript_1A029B setflag 262 release end @@ -159,9 +159,9 @@ Route104_EventScript_14EFD5:: @ 814EFD5 moveoffscreen 2 setvar 0x408e, 0 checkflag 189 - jumpif 0, Route104_EventScript_14F08B + goto_if 0, Route104_EventScript_14F08B checkflag 189 - jumpeq Route104_EventScript_14F095 + goto_if_eq Route104_EventScript_14F095 end Route104_EventScript_14F08B:: @ 814F08B @@ -411,7 +411,7 @@ Route104_EventScript_14F1A0:: @ 814F1A0 trainerbattle 0, OPPONENT_HALEY_1, 0, Route104_Text_1B8770, Route104_Text_1B87A7 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route104_EventScript_14F1C7 + goto_if_eq Route104_EventScript_14F1C7 msgbox Route104_Text_1B87C3, 6 end @@ -424,7 +424,7 @@ Route104_EventScript_14F1DE:: @ 814F1DE trainerbattle 0, OPPONENT_WINSTON_1, 0, Route104_Text_1B88D4, Route104_Text_1B8911 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route104_EventScript_14F205 + goto_if_eq Route104_EventScript_14F205 msgbox Route104_Text_1B8925, 6 end @@ -437,7 +437,7 @@ Route104_EventScript_14F21C:: @ 814F21C trainerbattle 0, OPPONENT_CINDY_1, 0, Route104_Text_1B8A24, Route104_Text_1B8A61 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route104_EventScript_14F243 + goto_if_eq Route104_EventScript_14F243 msgbox Route104_Text_1B8A69, 6 end diff --git a/data/scripts/maps/Route104_MrBrineysHouse.inc b/data/scripts/maps/Route104_MrBrineysHouse.inc index 693939cf4..ce32a544a 100644 --- a/data/scripts/maps/Route104_MrBrineysHouse.inc +++ b/data/scripts/maps/Route104_MrBrineysHouse.inc @@ -5,9 +5,9 @@ Route104_MrBrineysHouse_MapScripts:: @ 815BCB2 Route104_MrBrineysHouse_MapScript1_15BCB8:: @ 815BCB8 setflag 2109 compare 0x4090, 1 - callif 1, Route104_MrBrineysHouse_EventScript_15BCD4 + call_if 1, Route104_MrBrineysHouse_EventScript_15BCD4 checkflag 188 - callif 1, Route104_MrBrineysHouse_EventScript_15BCD0 + call_if 1, Route104_MrBrineysHouse_EventScript_15BCD0 end Route104_MrBrineysHouse_EventScript_15BCD0:: @ 815BCD0 @@ -25,11 +25,11 @@ Route104_MrBrineysHouse_EventScript_15BCEB:: @ 815BCEB lock faceplayer checkflag 147 - callif 0, Route104_MrBrineysHouse_EventScript_15BD0E + call_if 0, Route104_MrBrineysHouse_EventScript_15BD0E checkflag 189 - jumpif 0, Route104_MrBrineysHouse_EventScript_15BD65 + goto_if 0, Route104_MrBrineysHouse_EventScript_15BD65 checkflag 149 - jumpif 0, Route104_MrBrineysHouse_EventScript_15BD7E + goto_if 0, Route104_MrBrineysHouse_EventScript_15BD7E goto Route104_MrBrineysHouse_EventScript_15BD32 end @@ -38,7 +38,7 @@ Route104_MrBrineysHouse_EventScript_15BD0E:: @ 815BD0E msgbox Route104_MrBrineysHouse_Text_191A82, 4 msgbox Route104_MrBrineysHouse_Text_191AAD, 5 compare RESULT, 0 - jumpeq Route104_MrBrineysHouse_EventScript_15BD97 + goto_if_eq Route104_MrBrineysHouse_EventScript_15BD97 goto Route104_MrBrineysHouse_EventScript_15BDAB end @@ -55,14 +55,14 @@ Route104_MrBrineysHouse_EventScript_15BD32:: @ 815BD32 Route104_MrBrineysHouse_EventScript_15BD65:: @ 815BD65 msgbox Route104_MrBrineysHouse_Text_191CC3, 5 compare RESULT, 0 - jumpeq Route104_MrBrineysHouse_EventScript_15BD97 + goto_if_eq Route104_MrBrineysHouse_EventScript_15BD97 goto Route104_MrBrineysHouse_EventScript_15BDAB end Route104_MrBrineysHouse_EventScript_15BD7E:: @ 815BD7E msgbox Route104_MrBrineysHouse_Text_191DA6, 5 compare RESULT, 0 - jumpeq Route104_MrBrineysHouse_EventScript_15BD97 + goto_if_eq Route104_MrBrineysHouse_EventScript_15BD97 goto Route104_MrBrineysHouse_EventScript_15BDAB end diff --git a/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc b/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc index 02842c62d..d4d7b59cb 100644 --- a/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc +++ b/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc @@ -5,9 +5,9 @@ Route104_PrettyPetalFlowerShop_MapScripts:: @ 815BDE4 Route104_PrettyPetalFlowerShop_MapScript1_15BDEA:: @ 815BDEA setflag 2108 checkflag 127 - jumpif 0, Route104_PrettyPetalFlowerShop_EventScript_15BE03 + goto_if 0, Route104_PrettyPetalFlowerShop_EventScript_15BE03 checkflag 2057 - jumpif 0, Route104_PrettyPetalFlowerShop_EventScript_15BE03 + goto_if 0, Route104_PrettyPetalFlowerShop_EventScript_15BE03 setflag 1 end @@ -19,25 +19,25 @@ Route104_PrettyPetalFlowerShop_EventScript_15BE0B:: @ 815BE0B lock faceplayer checkflag 1 - jumpeq Route104_PrettyPetalFlowerShop_EventScript_15BE7C + goto_if_eq Route104_PrettyPetalFlowerShop_EventScript_15BE7C msgbox Route104_PrettyPetalFlowerShop_Text_1C5EC6, 4 checkflag 127 - jumpeq Route104_PrettyPetalFlowerShop_EventScript_15BE4A + goto_if_eq Route104_PrettyPetalFlowerShop_EventScript_15BE4A setflag 127 msgbox Route104_PrettyPetalFlowerShop_Text_1C5F48, 5 compare RESULT, 1 - callif 1, Route104_PrettyPetalFlowerShop_EventScript_15BE6A + call_if 1, Route104_PrettyPetalFlowerShop_EventScript_15BE6A compare RESULT, 0 - callif 1, Route104_PrettyPetalFlowerShop_EventScript_15BE73 + call_if 1, Route104_PrettyPetalFlowerShop_EventScript_15BE73 release end Route104_PrettyPetalFlowerShop_EventScript_15BE4A:: @ 815BE4A msgbox Route104_PrettyPetalFlowerShop_Text_1C5F1B, 5 compare RESULT, 1 - callif 1, Route104_PrettyPetalFlowerShop_EventScript_15BE6A + call_if 1, Route104_PrettyPetalFlowerShop_EventScript_15BE6A compare RESULT, 0 - callif 1, Route104_PrettyPetalFlowerShop_EventScript_15BE73 + call_if 1, Route104_PrettyPetalFlowerShop_EventScript_15BE73 release end @@ -73,7 +73,7 @@ Route104_PrettyPetalFlowerShop_EventScript_15BEA4:: @ 815BEA4 lock faceplayer checkflag 94 - jumpif 0, Route104_PrettyPetalFlowerShop_EventScript_15BEB9 + goto_if 0, Route104_PrettyPetalFlowerShop_EventScript_15BEB9 msgbox Route104_PrettyPetalFlowerShop_Text_1C61E8, 4 release end @@ -91,13 +91,13 @@ Route104_PrettyPetalFlowerShop_EventScript_15BEDA:: @ 815BEDA faceplayer checkdailyflags checkflag 2256 - jumpeq Route104_PrettyPetalFlowerShop_EventScript_15BF1A + goto_if_eq Route104_PrettyPetalFlowerShop_EventScript_15BF1A msgbox Route104_PrettyPetalFlowerShop_Text_1C62DA, 4 random 8 addvar RESULT, 133 giveitem RESULT compare RESULT, 0 - jumpeq Route104_PrettyPetalFlowerShop_EventScript_1A029B + goto_if_eq Route104_PrettyPetalFlowerShop_EventScript_1A029B setflag 2256 msgbox Route104_PrettyPetalFlowerShop_Text_1C6335, 4 release diff --git a/data/scripts/maps/Route104_Prototype.inc b/data/scripts/maps/Route104_Prototype.inc index ff1c9d258..e090c4bf2 100644 --- a/data/scripts/maps/Route104_Prototype.inc +++ b/data/scripts/maps/Route104_Prototype.inc @@ -5,21 +5,21 @@ Route104_Prototype_EventScript_160C4B:: @ 8160C4B lock faceplayer checktrainerflag OPPONENT_BRIANNA_1 - jumpif 0, Route104_Prototype_EventScript_160C99 + goto_if 0, Route104_Prototype_EventScript_160C99 checktrainerflag OPPONENT_CINDY_2 - jumpif 0, Route104_Prototype_EventScript_160C99 + goto_if 0, Route104_Prototype_EventScript_160C99 checktrainerflag OPPONENT_AMY_AND_LIV_3 - jumpif 0, Route104_Prototype_EventScript_160C99 + goto_if 0, Route104_Prototype_EventScript_160C99 checktrainerflag OPPONENT_GINA_AND_MIA_2 - jumpif 0, Route104_Prototype_EventScript_160C99 + goto_if 0, Route104_Prototype_EventScript_160C99 checktrainerflag OPPONENT_LUCAS_2 - jumpif 0, Route104_Prototype_EventScript_160C99 + goto_if 0, Route104_Prototype_EventScript_160C99 checktrainerflag OPPONENT_MIKE_1 - jumpif 0, Route104_Prototype_EventScript_160C99 + goto_if 0, Route104_Prototype_EventScript_160C99 setflag 215 msgbox Route104_Prototype_Text_19B267, 4 checkflag 216 - jumpeq Route104_Prototype_EventScript_160CFB + goto_if_eq Route104_Prototype_EventScript_160CFB release end @@ -32,21 +32,21 @@ Route104_Prototype_EventScript_160CA3:: @ 8160CA3 lock faceplayer checktrainerflag OPPONENT_BRIANNA_1 - jumpif 0, Route104_Prototype_EventScript_160CF1 + goto_if 0, Route104_Prototype_EventScript_160CF1 checktrainerflag OPPONENT_CINDY_2 - jumpif 0, Route104_Prototype_EventScript_160CF1 + goto_if 0, Route104_Prototype_EventScript_160CF1 checktrainerflag OPPONENT_AMY_AND_LIV_3 - jumpif 0, Route104_Prototype_EventScript_160CF1 + goto_if 0, Route104_Prototype_EventScript_160CF1 checktrainerflag OPPONENT_GINA_AND_MIA_2 - jumpif 0, Route104_Prototype_EventScript_160CF1 + goto_if 0, Route104_Prototype_EventScript_160CF1 checktrainerflag OPPONENT_LUCAS_2 - jumpif 0, Route104_Prototype_EventScript_160CF1 + goto_if 0, Route104_Prototype_EventScript_160CF1 checktrainerflag OPPONENT_MIKE_1 - jumpif 0, Route104_Prototype_EventScript_160CF1 + goto_if 0, Route104_Prototype_EventScript_160CF1 setflag 216 msgbox Route104_Prototype_Text_19B2E9, 4 checkflag 215 - jumpeq Route104_Prototype_EventScript_160CFB + goto_if_eq Route104_Prototype_EventScript_160CFB release end diff --git a/data/scripts/maps/Route105.inc b/data/scripts/maps/Route105.inc index c71e2ce05..1182dae7e 100644 --- a/data/scripts/maps/Route105.inc +++ b/data/scripts/maps/Route105.inc @@ -4,7 +4,7 @@ Route105_MapScripts:: @ 814F298 Route105_MapScript1_14F29E:: @ 814F29E checkflag 228 - callif 0, Route105_EventScript_14F2A8 + call_if 0, Route105_EventScript_14F2A8 end Route105_EventScript_14F2A8:: @ 814F2A8 diff --git a/data/scripts/maps/Route106.inc b/data/scripts/maps/Route106.inc index 0c25594c6..0acf70e64 100644 --- a/data/scripts/maps/Route106.inc +++ b/data/scripts/maps/Route106.inc @@ -19,7 +19,7 @@ Route106_EventScript_14F366:: @ 814F366 trainerbattle 0, OPPONENT_ELLIOT_1, 0, Route106_Text_1B8EF0, Route106_Text_1B8F25 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route106_EventScript_14F38D + goto_if_eq Route106_EventScript_14F38D msgbox Route106_Text_1B8F55, 6 end diff --git a/data/scripts/maps/Route107.inc b/data/scripts/maps/Route107.inc index a14bb7298..9daa57b7e 100644 --- a/data/scripts/maps/Route107.inc +++ b/data/scripts/maps/Route107.inc @@ -10,7 +10,7 @@ Route107_EventScript_14F3D3:: @ 814F3D3 trainerbattle 0, OPPONENT_TONY_1, 0, Route107_Text_1B933A, Route107_Text_1B9365 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route107_EventScript_14F3FA + goto_if_eq Route107_EventScript_14F3FA msgbox Route107_Text_1B938E, 6 end diff --git a/data/scripts/maps/Route109.inc b/data/scripts/maps/Route109.inc index 6e9d4adff..09be54c49 100644 --- a/data/scripts/maps/Route109.inc +++ b/data/scripts/maps/Route109.inc @@ -272,7 +272,7 @@ Route109_EventScript_14F680:: @ 814F680 lock faceplayer checkflag 149 - jumpif 0, Route109_EventScript_14F691 + goto_if 0, Route109_EventScript_14F691 goto Route109_EventScript_14F6AF end @@ -280,7 +280,7 @@ Route109_EventScript_14F691:: @ 814F691 message Route109_Text_16E0F9 msgbox Route109_Text_16E0F9, 5 compare RESULT, 0 - jumpeq Route109_EventScript_14F6F1 + goto_if_eq Route109_EventScript_14F6F1 goto Route109_EventScript_14F6E2 end @@ -329,11 +329,11 @@ Route109_EventScript_14F725:: @ 814F725 faceplayer special GetPlayerBigGuyGirlString checkflag 280 - jumpeq Route109_EventScript_14F762 + goto_if_eq Route109_EventScript_14F762 msgbox Route109_Text_16E433, 4 giveitem ITEM_SOFT_SAND compare RESULT, 0 - jumpeq Route109_EventScript_1A029B + goto_if_eq Route109_EventScript_1A029B closebutton move LAST_TALKED, Route109_Movement_1A083D waitmove 0 @@ -398,7 +398,7 @@ Route109_EventScript_14F809:: @ 814F809 trainerbattle 0, OPPONENT_RICKY_1, 0, Route109_Text_1B9C23, Route109_Text_1B9C65 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route109_EventScript_14F830 + goto_if_eq Route109_EventScript_14F830 msgbox Route109_Text_1B9C6E, 6 end @@ -411,7 +411,7 @@ Route109_EventScript_14F847:: @ 814F847 trainerbattle 0, OPPONENT_LOLA_1, 0, Route109_Text_1B9D54, Route109_Text_1B9D87 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route109_EventScript_14F86E + goto_if_eq Route109_EventScript_14F86E msgbox Route109_Text_1B9D8E, 6 end diff --git a/data/scripts/maps/Route109_SeashoreHouse.inc b/data/scripts/maps/Route109_SeashoreHouse.inc index e8afb54fb..789ee3e56 100644 --- a/data/scripts/maps/Route109_SeashoreHouse.inc +++ b/data/scripts/maps/Route109_SeashoreHouse.inc @@ -10,11 +10,11 @@ Route109_SeashoreHouse_EventScript_160DD4:: @ 8160DD4 lock faceplayer checkflag 140 - jumpeq Route109_SeashoreHouse_EventScript_160E36 + goto_if_eq Route109_SeashoreHouse_EventScript_160E36 checkflag 141 - jumpeq Route109_SeashoreHouse_EventScript_160E08 + goto_if_eq Route109_SeashoreHouse_EventScript_160E08 checkflag 2 - jumpeq Route109_SeashoreHouse_EventScript_160DFE + goto_if_eq Route109_SeashoreHouse_EventScript_160DFE msgbox Route109_SeashoreHouse_Text_19B4D9, 4 setflag 2 release @@ -29,7 +29,7 @@ Route109_SeashoreHouse_EventScript_160E08:: @ 8160E08 msgbox Route109_SeashoreHouse_Text_19B609, 4 giveitem ITEM_SODA_POP, 6 compare RESULT, 0 - jumpeq Route109_SeashoreHouse_EventScript_160E2C + goto_if_eq Route109_SeashoreHouse_EventScript_160E2C setflag 140 release end @@ -44,7 +44,7 @@ Route109_SeashoreHouse_EventScript_160E36:: @ 8160E36 nop msgbox Route109_SeashoreHouse_Text_19B702, 5 compare RESULT, 1 - jumpeq Route109_SeashoreHouse_EventScript_160E5A + goto_if_eq Route109_SeashoreHouse_EventScript_160E5A msgbox Route109_SeashoreHouse_Text_19B773, 4 hidemoney 0, 0 release @@ -53,10 +53,10 @@ Route109_SeashoreHouse_EventScript_160E36:: @ 8160E36 Route109_SeashoreHouse_EventScript_160E5A:: @ 8160E5A checkmoney 0x12c, 0 compare RESULT, 0 - jumpeq Route109_SeashoreHouse_EventScript_160E9E + goto_if_eq Route109_SeashoreHouse_EventScript_160E9E checkitemspace ITEM_SODA_POP, 1 compare RESULT, 0 - jumpeq Route109_SeashoreHouse_EventScript_160EAB + goto_if_eq Route109_SeashoreHouse_EventScript_160EAB msgbox Route109_SeashoreHouse_Text_19B74C, 4 paymoney 0x12c, 0 updatemoney 0, 0 @@ -95,11 +95,11 @@ Route109_SeashoreHouse_EventScript_160EEE:: @ 8160EEE Route109_SeashoreHouse_EventScript_160F09:: @ 8160F09 checktrainerflag OPPONENT_DWAYNE - jumpif 0, Route109_SeashoreHouse_EventScript_160F29 + goto_if 0, Route109_SeashoreHouse_EventScript_160F29 checktrainerflag OPPONENT_JOHANNA - jumpif 0, Route109_SeashoreHouse_EventScript_160F29 + goto_if 0, Route109_SeashoreHouse_EventScript_160F29 checktrainerflag OPPONENT_SIMON - jumpif 0, Route109_SeashoreHouse_EventScript_160F29 + goto_if 0, Route109_SeashoreHouse_EventScript_160F29 setflag 141 release end diff --git a/data/scripts/maps/Route110.inc b/data/scripts/maps/Route110.inc index 745faaddf..723c41e0c 100644 --- a/data/scripts/maps/Route110.inc +++ b/data/scripts/maps/Route110.inc @@ -13,7 +13,7 @@ Route110_MapScript1_14F914:: @ 814F914 call Route110_EventScript_1A014E call Route110_EventScript_1A0172 compare 0x40a9, 1 - callif 1, Route110_EventScript_14F92F + call_if 1, Route110_EventScript_14F92F end Route110_EventScript_14F92F:: @ 814F92F @@ -133,7 +133,7 @@ Route110_EventScript_14FA2E:: @ 814FA2E lockall specialval RESULT, GetRecordedCyclingRoadResults compare RESULT, 0 - jumpeq Route110_EventScript_14FA49 + goto_if_eq Route110_EventScript_14FA49 msgbox Route110_Text_16F53A, 4 releaseall end @@ -148,9 +148,9 @@ Route110_EventScript_14FA53:: @ 814FA53 faceplayer specialval RESULT, GetPlayerAvatarBike compare RESULT, 1 - jumpeq Route110_EventScript_14FA84 + goto_if_eq Route110_EventScript_14FA84 compare 0x40a9, 0 - jumpeq Route110_EventScript_14FA7A + goto_if_eq Route110_EventScript_14FA7A msgbox Route110_Text_16F26A, 4 release end @@ -179,7 +179,7 @@ Route110_EventScript_14FABC:: @ 814FABC trainerbattle 0, OPPONENT_EDWIN_1, 0, Route110_Text_1BA7D2, Route110_Text_1BA803 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route110_EventScript_14FAE3 + goto_if_eq Route110_EventScript_14FAE3 msgbox Route110_Text_1BA829, 6 end @@ -207,7 +207,7 @@ Route110_EventScript_14FB3F:: @ 814FB3F trainerbattle 0, OPPONENT_BENJAMIN_1, 0, Route110_Text_1BA352, Route110_Text_1BA379 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route110_EventScript_14FB66 + goto_if_eq Route110_EventScript_14FB66 msgbox Route110_Text_1BA3A5, 6 end @@ -225,7 +225,7 @@ Route110_EventScript_14FB94:: @ 814FB94 trainerbattle 0, OPPONENT_ABIGAIL_1, 0, Route110_Text_1BA4A0, Route110_Text_1BA50F specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route110_EventScript_14FBBB + goto_if_eq Route110_EventScript_14FBBB msgbox Route110_Text_1BA52E, 6 end @@ -238,7 +238,7 @@ Route110_EventScript_14FBD2:: @ 814FBD2 trainerbattle 0, OPPONENT_ISABEL_1, 0, Route110_Text_1BA990, Route110_Text_1BA9D0 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route110_EventScript_14FBF9 + goto_if_eq Route110_EventScript_14FBF9 msgbox Route110_Text_1BA9E9, 6 end @@ -327,9 +327,9 @@ Route110_EventScript_14FD34:: @ 814FD34 lockall checkgender compare RESULT, 0 - callif 1, Route110_EventScript_14FDA7 + call_if 1, Route110_EventScript_14FDA7 compare RESULT, 1 - callif 1, Route110_EventScript_14FDAC + call_if 1, Route110_EventScript_14FDAC move 28, Route110_Movement_1A0845 waitmove 0 move 28, Route110_Movement_1A0833 @@ -338,16 +338,16 @@ Route110_EventScript_14FD34:: @ 814FD34 waitmove 0 pause 30 compare 0x8008, 1 - callif 1, Route110_EventScript_14FF14 + call_if 1, Route110_EventScript_14FF14 compare 0x8008, 2 - callif 1, Route110_EventScript_14FF1F + call_if 1, Route110_EventScript_14FF1F compare 0x8008, 3 - callif 1, Route110_EventScript_14FF2A + call_if 1, Route110_EventScript_14FF2A checkgender compare RESULT, 0 - jumpeq Route110_EventScript_14FDB1 + goto_if_eq Route110_EventScript_14FDB1 compare RESULT, 1 - jumpeq Route110_EventScript_14FE2B + goto_if_eq Route110_EventScript_14FE2B releaseall end @@ -426,22 +426,22 @@ Route110_EventScript_14FEA5:: @ 814FEA5 Route110_EventScript_14FEB2:: @ 814FEB2 closebutton compare 0x8008, 1 - callif 1, Route110_EventScript_14FF56 + call_if 1, Route110_EventScript_14FF56 compare 0x8008, 2 - callif 1, Route110_EventScript_14FF5E + call_if 1, Route110_EventScript_14FF5E compare 0x8008, 3 - callif 1, Route110_EventScript_14FF66 + call_if 1, Route110_EventScript_14FF66 spritebehave 28, 10 spritebehave 29, 10 disappear 28 reappear 29 pause 45 compare 0x8008, 1 - callif 1, Route110_EventScript_14FF35 + call_if 1, Route110_EventScript_14FF35 compare 0x8008, 2 - callif 1, Route110_EventScript_14FF40 + call_if 1, Route110_EventScript_14FF40 compare 0x8008, 3 - callif 1, Route110_EventScript_14FF4B + call_if 1, Route110_EventScript_14FF4B disappear 29 setvar 0x4069, 1 playmusicbattle 0 diff --git a/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc b/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc index 96e492b39..32b3ae4fb 100644 --- a/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc +++ b/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc @@ -4,9 +4,9 @@ Route110_SeasideCyclingRoadNorthEntrance_MapScripts:: @ 81634C8 Route110_SeasideCyclingRoadNorthEntrance_MapScript1_1634CE:: @ 81634CE compare 0x40a9, 3 - callif 1, Route110_SeasideCyclingRoadNorthEntrance_EventScript_1634E5 + call_if 1, Route110_SeasideCyclingRoadNorthEntrance_EventScript_1634E5 compare 0x40a9, 2 - callif 1, Route110_SeasideCyclingRoadNorthEntrance_EventScript_1634E5 + call_if 1, Route110_SeasideCyclingRoadNorthEntrance_EventScript_1634E5 end Route110_SeasideCyclingRoadNorthEntrance_EventScript_1634E5:: @ 81634E5 @@ -25,9 +25,9 @@ Route110_SeasideCyclingRoadNorthEntrance_EventScript_1634F7:: @ 81634F7 lockall specialval RESULT, GetPlayerAvatarBike @ player state? compare RESULT, 2 - callif 1, Route110_SeasideCyclingRoadNorthEntrance_EventScript_16351D + call_if 1, Route110_SeasideCyclingRoadNorthEntrance_EventScript_16351D compare RESULT, 0 - jumpeq Route110_SeasideCyclingRoadNorthEntrance_EventScript_163523 + goto_if_eq Route110_SeasideCyclingRoadNorthEntrance_EventScript_163523 setflag 2091 setvar 0x4001, 1 releaseall diff --git a/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc b/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc index 08d6fb5f1..95ea7454e 100644 --- a/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc +++ b/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc @@ -12,7 +12,7 @@ Route110_SeasideCyclingRoadSouthEntrance_EventScript_16348B:: @ 816348B lockall specialval RESULT, GetPlayerAvatarBike compare RESULT, 0 - jumpeq Route110_SeasideCyclingRoadSouthEntrance_EventScript_1634A6 + goto_if_eq Route110_SeasideCyclingRoadSouthEntrance_EventScript_1634A6 setflag 2091 setvar 0x4001, 1 releaseall diff --git a/data/scripts/maps/Route110_TrickHouseEnd.inc b/data/scripts/maps/Route110_TrickHouseEnd.inc index 10e1a6865..d18f30a43 100644 --- a/data/scripts/maps/Route110_TrickHouseEnd.inc +++ b/data/scripts/maps/Route110_TrickHouseEnd.inc @@ -7,7 +7,7 @@ Route110_TrickHouseEnd_MapScripts:: @ 8161936 Route110_TrickHouseEnd_MapScript1_16194B:: @ 816194B compare 0x4001, 1 - callif 1, Route110_TrickHouseEnd_EventScript_161994 + call_if 1, Route110_TrickHouseEnd_EventScript_161994 end Route110_TrickHouseEnd_MapScript1_161957:: @ 8161957 @@ -62,7 +62,7 @@ Route110_TrickHouseEnd_EventScript_161A0B:: @ 8161A0B setvar 0x40c1, 0 giveitem ITEM_RARE_CANDY compare RESULT, 0 - callif 1, Route110_TrickHouseEnd_EventScript_161C4E + call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton call Route110_TrickHouseEnd_EventScript_161C2E @@ -75,7 +75,7 @@ Route110_TrickHouseEnd_EventScript_161A47:: @ 8161A47 setvar 0x40c1, 0 giveitem ITEM_TIMER_BALL compare RESULT, 0 - callif 1, Route110_TrickHouseEnd_EventScript_161C4E + call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton call Route110_TrickHouseEnd_EventScript_161C2E @@ -88,7 +88,7 @@ Route110_TrickHouseEnd_EventScript_161A83:: @ 8161A83 setvar 0x40c1, 0 giveitem ITEM_HARD_STONE compare RESULT, 0 - callif 1, Route110_TrickHouseEnd_EventScript_161C4E + call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton call Route110_TrickHouseEnd_EventScript_161C2E @@ -101,7 +101,7 @@ Route110_TrickHouseEnd_EventScript_161ABF:: @ 8161ABF setvar 0x40c1, 0 giveitem ITEM_SMOKE_BALL compare RESULT, 0 - callif 1, Route110_TrickHouseEnd_EventScript_161C4E + call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton call Route110_TrickHouseEnd_EventScript_161C2E @@ -114,7 +114,7 @@ Route110_TrickHouseEnd_EventScript_161AFB:: @ 8161AFB setvar 0x40c1, 0 giveitem ITEM_TM12 compare RESULT, 0 - callif 1, Route110_TrickHouseEnd_EventScript_161C4E + call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton call Route110_TrickHouseEnd_EventScript_161C2E @@ -127,7 +127,7 @@ Route110_TrickHouseEnd_EventScript_161B37:: @ 8161B37 setvar 0x40c1, 0 giveitem ITEM_MAGNET compare RESULT, 0 - callif 1, Route110_TrickHouseEnd_EventScript_161C4E + call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton call Route110_TrickHouseEnd_EventScript_161C2E @@ -140,7 +140,7 @@ Route110_TrickHouseEnd_EventScript_161B73:: @ 8161B73 setvar 0x40c1, 0 giveitem ITEM_PP_MAX compare RESULT, 0 - callif 1, Route110_TrickHouseEnd_EventScript_161C4E + call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton call Route110_TrickHouseEnd_EventScript_161C2E @@ -151,13 +151,13 @@ Route110_TrickHouseEnd_EventScript_161BAF:: @ 8161BAF msgbox Route110_TrickHouseEnd_Text_19C5AF, 4 closebutton compare FACING, 1 - callif 1, Route110_TrickHouseEnd_EventScript_161C74 + call_if 1, Route110_TrickHouseEnd_EventScript_161C74 compare FACING, 2 - callif 1, Route110_TrickHouseEnd_EventScript_161C7F + call_if 1, Route110_TrickHouseEnd_EventScript_161C7F compare FACING, 3 - callif 1, Route110_TrickHouseEnd_EventScript_161C8A + call_if 1, Route110_TrickHouseEnd_EventScript_161C8A compare FACING, 4 - callif 1, Route110_TrickHouseEnd_EventScript_161C95 + call_if 1, Route110_TrickHouseEnd_EventScript_161C95 pause 30 msgbox Route110_TrickHouseEnd_Text_19C602, 4 closebutton @@ -172,7 +172,7 @@ Route110_TrickHouseEnd_EventScript_161BAF:: @ 8161BAF givedecoration 31 .endc compare RESULT, 0 - callif 1, Route110_TrickHouseEnd_EventScript_161C61 + call_if 1, Route110_TrickHouseEnd_EventScript_161C61 msgbox Route110_TrickHouseEnd_Text_19C85C, 4 call Route110_TrickHouseEnd_EventScript_161C2E special ResetTrickHouseEndRoomFlag diff --git a/data/scripts/maps/Route110_TrickHouseEntrance.inc b/data/scripts/maps/Route110_TrickHouseEntrance.inc index 2601942be..81d6a44e0 100644 --- a/data/scripts/maps/Route110_TrickHouseEntrance.inc +++ b/data/scripts/maps/Route110_TrickHouseEntrance.inc @@ -7,17 +7,17 @@ Route110_TrickHouseEntrance_MapScripts:: @ 8160F2B Route110_TrickHouseEntrance_MapScript1_160F3B:: @ 8160F3B setflag 2114 compare 0x40b5, 1 - jumpeq Route110_TrickHouseEntrance_EventScript_160FCE + goto_if_eq Route110_TrickHouseEntrance_EventScript_160FCE compare 0x40c1, 1 - jumpeq Route110_TrickHouseEntrance_EventScript_160FB2 + goto_if_eq Route110_TrickHouseEntrance_EventScript_160FB2 compare 0x40a6, 1 - jumpeq Route110_TrickHouseEntrance_EventScript_16108E + goto_if_eq Route110_TrickHouseEntrance_EventScript_16108E compare 0x40a7, 5 - callif 1, Route110_TrickHouseEntrance_EventScript_160FDE + call_if 1, Route110_TrickHouseEntrance_EventScript_160FDE compare 0x40a7, 3 - callif 1, Route110_TrickHouseEntrance_EventScript_160FDE + call_if 1, Route110_TrickHouseEntrance_EventScript_160FDE compare 0x40a7, 0 - callif 1, Route110_TrickHouseEntrance_EventScript_160FDE + call_if 1, Route110_TrickHouseEntrance_EventScript_160FDE switch 0x40a7 case 0, Route110_TrickHouseEntrance_EventScript_16109A case 1, Route110_TrickHouseEntrance_EventScript_1610A0 @@ -28,7 +28,7 @@ Route110_TrickHouseEntrance_MapScript1_160F3B:: @ 8160F3B Route110_TrickHouseEntrance_EventScript_160FB2:: @ 8160FB2 setvar 0x40a5, 1 compare 0x4044, 8 - jumpeq Route110_TrickHouseEntrance_EventScript_160FC8 + goto_if_eq Route110_TrickHouseEntrance_EventScript_160FC8 setvar 0x40a7, 2 end @@ -45,56 +45,56 @@ Route110_TrickHouseEntrance_EventScript_160FCE:: @ 8160FCE Route110_TrickHouseEntrance_EventScript_160FDE:: @ 8160FDE setvar 0x40a7, 0 compare 0x4044, 1 - callif 1, Route110_TrickHouseEntrance_EventScript_16103C + call_if 1, Route110_TrickHouseEntrance_EventScript_16103C compare 0x4044, 2 - callif 1, Route110_TrickHouseEntrance_EventScript_161046 + call_if 1, Route110_TrickHouseEntrance_EventScript_161046 compare 0x4044, 3 - callif 1, Route110_TrickHouseEntrance_EventScript_161050 + call_if 1, Route110_TrickHouseEntrance_EventScript_161050 compare 0x4044, 4 - callif 1, Route110_TrickHouseEntrance_EventScript_16105A + call_if 1, Route110_TrickHouseEntrance_EventScript_16105A compare 0x4044, 5 - callif 1, Route110_TrickHouseEntrance_EventScript_161064 + call_if 1, Route110_TrickHouseEntrance_EventScript_161064 compare 0x4044, 6 - callif 1, Route110_TrickHouseEntrance_EventScript_16106E + call_if 1, Route110_TrickHouseEntrance_EventScript_16106E compare 0x4044, 7 - callif 1, Route110_TrickHouseEntrance_EventScript_161078 + call_if 1, Route110_TrickHouseEntrance_EventScript_161078 compare 0x4044, 8 - callif 1, Route110_TrickHouseEntrance_EventScript_161082 + call_if 1, Route110_TrickHouseEntrance_EventScript_161082 return Route110_TrickHouseEntrance_EventScript_16103C:: @ 816103C checkflag 2057 - callif 0, Route110_TrickHouseEntrance_EventScript_161088 + call_if 0, Route110_TrickHouseEntrance_EventScript_161088 return Route110_TrickHouseEntrance_EventScript_161046:: @ 8161046 checkflag 2058 - callif 0, Route110_TrickHouseEntrance_EventScript_161088 + call_if 0, Route110_TrickHouseEntrance_EventScript_161088 return Route110_TrickHouseEntrance_EventScript_161050:: @ 8161050 checkflag 2059 - callif 0, Route110_TrickHouseEntrance_EventScript_161088 + call_if 0, Route110_TrickHouseEntrance_EventScript_161088 return Route110_TrickHouseEntrance_EventScript_16105A:: @ 816105A checkflag 2060 - callif 0, Route110_TrickHouseEntrance_EventScript_161088 + call_if 0, Route110_TrickHouseEntrance_EventScript_161088 return Route110_TrickHouseEntrance_EventScript_161064:: @ 8161064 checkflag 2061 - callif 0, Route110_TrickHouseEntrance_EventScript_161088 + call_if 0, Route110_TrickHouseEntrance_EventScript_161088 return Route110_TrickHouseEntrance_EventScript_16106E:: @ 816106E checkflag 2062 - callif 0, Route110_TrickHouseEntrance_EventScript_161088 + call_if 0, Route110_TrickHouseEntrance_EventScript_161088 return Route110_TrickHouseEntrance_EventScript_161078:: @ 8161078 checkflag 2052 - callif 0, Route110_TrickHouseEntrance_EventScript_161088 + call_if 0, Route110_TrickHouseEntrance_EventScript_161088 return Route110_TrickHouseEntrance_EventScript_161082:: @ 8161082 @@ -214,7 +214,7 @@ Route110_TrickHouseEntrance_EventScript_1611D7:: @ 81611D7 lockall pause 20 compare 0x4044, 0 - callif 1, Route110_TrickHouseEntrance_EventScript_161327 + call_if 1, Route110_TrickHouseEntrance_EventScript_161327 msgbox Route110_TrickHouseEntrance_Text_19BD82, 4 closebutton pause 20 @@ -249,21 +249,21 @@ Route110_TrickHouseEntrance_EventScript_16124D:: @ 816124D move 255, Route110_TrickHouseEntrance_Movement_1A0835 waitmove 0 compare 0x4044, 0 - callif 1, Route110_TrickHouseEntrance_EventScript_1612CD + call_if 1, Route110_TrickHouseEntrance_EventScript_1612CD compare 0x4044, 1 - callif 1, Route110_TrickHouseEntrance_EventScript_1612D6 + call_if 1, Route110_TrickHouseEntrance_EventScript_1612D6 compare 0x4044, 2 - callif 1, Route110_TrickHouseEntrance_EventScript_1612DF + call_if 1, Route110_TrickHouseEntrance_EventScript_1612DF compare 0x4044, 3 - callif 1, Route110_TrickHouseEntrance_EventScript_1612E8 + call_if 1, Route110_TrickHouseEntrance_EventScript_1612E8 compare 0x4044, 4 - callif 1, Route110_TrickHouseEntrance_EventScript_1612F1 + call_if 1, Route110_TrickHouseEntrance_EventScript_1612F1 compare 0x4044, 5 - callif 1, Route110_TrickHouseEntrance_EventScript_1612FA + call_if 1, Route110_TrickHouseEntrance_EventScript_1612FA compare 0x4044, 6 - callif 1, Route110_TrickHouseEntrance_EventScript_161303 + call_if 1, Route110_TrickHouseEntrance_EventScript_161303 compare 0x4044, 7 - callif 1, Route110_TrickHouseEntrance_EventScript_16130C + call_if 1, Route110_TrickHouseEntrance_EventScript_16130C closebutton setvar 0x40a6, 1 warp Route110_TrickHouseEntrance, 255, 6, 2 @@ -352,27 +352,27 @@ Route110_TrickHouseEntrance_EventScript_16136E:: @ 816136E waitmove 0 msgbox Route110_TrickHouseEntrance_Text_19C07E, 4 compare 0x4044, 1 - jumpeq Route110_TrickHouseEntrance_EventScript_1613CE + goto_if_eq Route110_TrickHouseEntrance_EventScript_1613CE compare 0x4044, 2 - jumpeq Route110_TrickHouseEntrance_EventScript_1613FA + goto_if_eq Route110_TrickHouseEntrance_EventScript_1613FA compare 0x4044, 3 - jumpeq Route110_TrickHouseEntrance_EventScript_161426 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161426 compare 0x4044, 4 - jumpeq Route110_TrickHouseEntrance_EventScript_161452 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161452 compare 0x4044, 5 - jumpeq Route110_TrickHouseEntrance_EventScript_16147E + goto_if_eq Route110_TrickHouseEntrance_EventScript_16147E compare 0x4044, 6 - jumpeq Route110_TrickHouseEntrance_EventScript_1614AA + goto_if_eq Route110_TrickHouseEntrance_EventScript_1614AA compare 0x4044, 7 - jumpeq Route110_TrickHouseEntrance_EventScript_1614D6 + goto_if_eq Route110_TrickHouseEntrance_EventScript_1614D6 end Route110_TrickHouseEntrance_EventScript_1613CE:: @ 81613CE giveitem ITEM_RARE_CANDY compare RESULT, 1 - jumpeq Route110_TrickHouseEntrance_EventScript_161502 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 compare RESULT, 0 - callif 1, Route110_TrickHouseEntrance_EventScript_1A02A5 + call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall end @@ -380,9 +380,9 @@ Route110_TrickHouseEntrance_EventScript_1613CE:: @ 81613CE Route110_TrickHouseEntrance_EventScript_1613FA:: @ 81613FA giveitem ITEM_TIMER_BALL compare RESULT, 1 - jumpeq Route110_TrickHouseEntrance_EventScript_161502 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 compare RESULT, 0 - callif 1, Route110_TrickHouseEntrance_EventScript_1A02A5 + call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall end @@ -390,9 +390,9 @@ Route110_TrickHouseEntrance_EventScript_1613FA:: @ 81613FA Route110_TrickHouseEntrance_EventScript_161426:: @ 8161426 giveitem ITEM_HARD_STONE compare RESULT, 1 - jumpeq Route110_TrickHouseEntrance_EventScript_161502 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 compare RESULT, 0 - callif 1, Route110_TrickHouseEntrance_EventScript_1A02A5 + call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall end @@ -400,9 +400,9 @@ Route110_TrickHouseEntrance_EventScript_161426:: @ 8161426 Route110_TrickHouseEntrance_EventScript_161452:: @ 8161452 giveitem ITEM_SMOKE_BALL compare RESULT, 1 - jumpeq Route110_TrickHouseEntrance_EventScript_161502 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 compare RESULT, 0 - callif 1, Route110_TrickHouseEntrance_EventScript_1A02A5 + call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall end @@ -410,9 +410,9 @@ Route110_TrickHouseEntrance_EventScript_161452:: @ 8161452 Route110_TrickHouseEntrance_EventScript_16147E:: @ 816147E giveitem ITEM_TM12 compare RESULT, 1 - jumpeq Route110_TrickHouseEntrance_EventScript_161502 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 compare RESULT, 0 - callif 1, Route110_TrickHouseEntrance_EventScript_1A02A5 + call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall end @@ -420,9 +420,9 @@ Route110_TrickHouseEntrance_EventScript_16147E:: @ 816147E Route110_TrickHouseEntrance_EventScript_1614AA:: @ 81614AA giveitem ITEM_MAGNET compare RESULT, 1 - jumpeq Route110_TrickHouseEntrance_EventScript_161502 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 compare RESULT, 0 - callif 1, Route110_TrickHouseEntrance_EventScript_1A02A5 + call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall end @@ -430,9 +430,9 @@ Route110_TrickHouseEntrance_EventScript_1614AA:: @ 81614AA Route110_TrickHouseEntrance_EventScript_1614D6:: @ 81614D6 giveitem ITEM_PP_MAX compare RESULT, 1 - jumpeq Route110_TrickHouseEntrance_EventScript_161502 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 compare RESULT, 0 - callif 1, Route110_TrickHouseEntrance_EventScript_1A02A5 + call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall end @@ -455,9 +455,9 @@ Route110_TrickHouseEntrance_EventScript_161518:: @ 8161518 givedecoration 31 .endif compare RESULT, 1 - jumpeq Route110_TrickHouseEntrance_EventScript_161551 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161551 compare RESULT, 0 - callif 1, Route110_TrickHouseEntrance_EventScript_1A02B8 + call_if 1, Route110_TrickHouseEntrance_EventScript_1A02B8 msgbox Route110_TrickHouseEntrance_Text_19C18D, 4 releaseall end @@ -496,7 +496,7 @@ Route110_TrickHouseEntrance_EventScript_1615C7:: @ 81615C7 msgbox Route110_TrickHouseEntrance_Text_19BE7D, 5 closebutton compare RESULT, 1 - jumpeq Route110_TrickHouseEntrance_EventScript_1615DD + goto_if_eq Route110_TrickHouseEntrance_EventScript_1615DD releaseall end @@ -578,7 +578,7 @@ Route110_TrickHouseEntrance_EventScript_1616B8:: @ 81616B8 Route110_TrickHouseEntrance_EventScript_1616C2:: @ 81616C2 compare 0x4044, 8 - jumpeq Route110_TrickHouseEntrance_EventScript_1616D7 + goto_if_eq Route110_TrickHouseEntrance_EventScript_1616D7 msgbox Route110_TrickHouseEntrance_Text_19BE6E, 4 releaseall end @@ -603,7 +603,7 @@ gUnknown_081616E1:: @ 81616E1 Route110_TrickHouseEntrance_EventScript_161740:: @ 8161740 compare 0x40AB, 0 - jumpeq Route110_TrickHouseEntrance_EventScript_161888 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819CAD1, 4 playsfx SE_PIN setvar 0x40AB, 2 @@ -614,7 +614,7 @@ Route110_TrickHouseEntrance_EventScript_161740:: @ 8161740 Route110_TrickHouseEntrance_EventScript_161769:: @ 8161769 compare 0x40AC, 0 - jumpeq Route110_TrickHouseEntrance_EventScript_161888 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819CCCB, 4 playsfx SE_PIN setvar 0x40AC, 2 @@ -625,7 +625,7 @@ Route110_TrickHouseEntrance_EventScript_161769:: @ 8161769 Route110_TrickHouseEntrance_EventScript_161792:: @ 8161792 compare 0x40AD, 0 - jumpeq Route110_TrickHouseEntrance_EventScript_161888 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819CEF9, 4 playsfx SE_PIN setvar 0x40AD, 2 @@ -636,7 +636,7 @@ Route110_TrickHouseEntrance_EventScript_161792:: @ 8161792 Route110_TrickHouseEntrance_EventScript_1617BB:: @ 81617BB compare 0x40AE, 0 - jumpeq Route110_TrickHouseEntrance_EventScript_161888 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819D164, 4 playsfx SE_PIN setvar 0x40AE, 2 @@ -647,7 +647,7 @@ Route110_TrickHouseEntrance_EventScript_1617BB:: @ 81617BB Route110_TrickHouseEntrance_EventScript_1617E4:: @ 81617E4 compare 0x40AF, 0 - jumpeq Route110_TrickHouseEntrance_EventScript_161888 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819D3A5, 4 playsfx SE_PIN setvar 0x40AF, 2 @@ -658,7 +658,7 @@ Route110_TrickHouseEntrance_EventScript_1617E4:: @ 81617E4 Route110_TrickHouseEntrance_EventScript_16180D:: @ 816180D compare 0x40B0, 0 - jumpeq Route110_TrickHouseEntrance_EventScript_161888 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819DC0A, 4 playsfx SE_PIN setvar 0x40B0, 2 @@ -669,7 +669,7 @@ Route110_TrickHouseEntrance_EventScript_16180D:: @ 816180D Route110_TrickHouseEntrance_EventScript_161836:: @ 8161836 compare 0x40B1, 0 - jumpeq Route110_TrickHouseEntrance_EventScript_161888 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819DE8D, 4 playsfx SE_PIN setvar 0x40B1, 2 @@ -680,7 +680,7 @@ Route110_TrickHouseEntrance_EventScript_161836:: @ 8161836 Route110_TrickHouseEntrance_EventScript_16185F:: @ 816185F compare 0x40B2, 0 - jumpeq Route110_TrickHouseEntrance_EventScript_161888 + goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819E0FF, 4 playsfx SE_PIN setvar 0x40B2, 2 @@ -727,11 +727,11 @@ Route110_TrickHouseEntrance_EventScript_1618B0:: @ 81618B0 msgbox Route110_TrickHouseEntrance_Text_19BA56, 4 releaseall compare 0x4044, 0 - callif 1, Route110_TrickHouseEntrance_EventScript_1618E1 + call_if 1, Route110_TrickHouseEntrance_EventScript_1618E1 compare 0x4044, 1 - callif 1, Route110_TrickHouseEntrance_EventScript_1618F6 + call_if 1, Route110_TrickHouseEntrance_EventScript_1618F6 compare 0x4044, 2 - callif 1, Route110_TrickHouseEntrance_EventScript_16190B + call_if 1, Route110_TrickHouseEntrance_EventScript_16190B setvar 0x40a5, 1 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle1.inc b/data/scripts/maps/Route110_TrickHousePuzzle1.inc index b4f800876..3a89c2db1 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle1.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle1.inc @@ -4,7 +4,7 @@ Route110_TrickHousePuzzle1_MapScripts:: @ 8161CF8 Route110_TrickHousePuzzle1_MapScript1_161CFE:: @ 8161CFE compare 0x40ab, 2 - jumpeq Route110_TrickHousePuzzle1_EventScript_161D0A + goto_if_eq Route110_TrickHousePuzzle1_EventScript_161D0A end Route110_TrickHousePuzzle1_EventScript_161D0A:: @ 8161D0A @@ -14,7 +14,7 @@ Route110_TrickHousePuzzle1_EventScript_161D0A:: @ 8161D0A Route110_TrickHousePuzzle1_EventScript_161D14:: @ 8161D14 lockall compare 0x40ab, 0 - jumpeq Route110_TrickHousePuzzle1_EventScript_161D26 + goto_if_eq Route110_TrickHousePuzzle1_EventScript_161D26 goto Route110_TrickHousePuzzle1_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle2.inc b/data/scripts/maps/Route110_TrickHousePuzzle2.inc index 96e9d8143..a4731d329 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle2.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle2.inc @@ -5,13 +5,13 @@ Route110_TrickHousePuzzle2_MapScripts:: @ 8161D76 Route110_TrickHousePuzzle2_MapScript1_161D81:: @ 8161D81 compare 0x4001, 1 - callif 1, Route110_TrickHousePuzzle2_EventScript_161E2C + call_if 1, Route110_TrickHousePuzzle2_EventScript_161E2C compare 0x4002, 1 - callif 1, Route110_TrickHousePuzzle2_EventScript_161E3F + call_if 1, Route110_TrickHousePuzzle2_EventScript_161E3F compare 0x4003, 1 - callif 1, Route110_TrickHousePuzzle2_EventScript_161E52 + call_if 1, Route110_TrickHousePuzzle2_EventScript_161E52 compare 0x4004, 1 - callif 1, Route110_TrickHousePuzzle2_EventScript_161E65 + call_if 1, Route110_TrickHousePuzzle2_EventScript_161E65 end Route110_TrickHousePuzzle2_MapScript1_161DAE:: @ 8161DAE @@ -24,7 +24,7 @@ Route110_TrickHousePuzzle2_MapScript1_161DAE:: @ 8161DAE Route110_TrickHousePuzzle2_EventScript_161DC3:: @ 8161DC3 lockall compare 0x40ac, 0 - jumpeq Route110_TrickHousePuzzle2_EventScript_161DD5 + goto_if_eq Route110_TrickHousePuzzle2_EventScript_161DD5 goto Route110_TrickHousePuzzle2_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle3.inc b/data/scripts/maps/Route110_TrickHousePuzzle3.inc index c81c5dd1c..86d68a6ef 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle3.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle3.inc @@ -6,9 +6,9 @@ Route110_TrickHousePuzzle3_MapScripts:: @ 8161EBD Route110_TrickHousePuzzle3_MapScript1_161EC8:: @ 8161EC8 call Route110_TrickHousePuzzle3_EventScript_161F12 compare 0x4009, 0 - callif 1, Route110_TrickHousePuzzle3_EventScript_161FE5 + call_if 1, Route110_TrickHousePuzzle3_EventScript_161FE5 compare 0x4009, 1 - callif 1, Route110_TrickHousePuzzle3_EventScript_1622C8 + call_if 1, Route110_TrickHousePuzzle3_EventScript_1622C8 end Route110_TrickHousePuzzle3_MapScript1_161EE4:: @ 8161EE4 @@ -32,19 +32,19 @@ Route110_TrickHousePuzzle3_EventScript_161F12:: @ 8161F12 setmaptile 1, 3, 600, 0 setmaptile 10, 2, 600, 0 compare 0x4008, 1 - callif 1, Route110_TrickHousePuzzle3_EventScript_161F9F + call_if 1, Route110_TrickHousePuzzle3_EventScript_161F9F compare 0x4008, 2 - callif 1, Route110_TrickHousePuzzle3_EventScript_161FA9 + call_if 1, Route110_TrickHousePuzzle3_EventScript_161FA9 compare 0x4008, 3 - callif 1, Route110_TrickHousePuzzle3_EventScript_161FB3 + call_if 1, Route110_TrickHousePuzzle3_EventScript_161FB3 compare 0x4008, 4 - callif 1, Route110_TrickHousePuzzle3_EventScript_161FBD + call_if 1, Route110_TrickHousePuzzle3_EventScript_161FBD compare 0x4008, 5 - callif 1, Route110_TrickHousePuzzle3_EventScript_161FC7 + call_if 1, Route110_TrickHousePuzzle3_EventScript_161FC7 compare 0x4008, 6 - callif 1, Route110_TrickHousePuzzle3_EventScript_161FD1 + call_if 1, Route110_TrickHousePuzzle3_EventScript_161FD1 compare 0x4008, 7 - callif 1, Route110_TrickHousePuzzle3_EventScript_161FDB + call_if 1, Route110_TrickHousePuzzle3_EventScript_161FDB return Route110_TrickHousePuzzle3_EventScript_161F9F:: @ 8161F9F @@ -303,19 +303,19 @@ Route110_TrickHousePuzzle3_EventScript_162612:: @ 8162612 setvar 0x4006, 0 setvar 0x4007, 0 compare 0x4008, 1 - callif 1, Route110_TrickHousePuzzle3_EventScript_162683 + call_if 1, Route110_TrickHousePuzzle3_EventScript_162683 compare 0x4008, 2 - callif 1, Route110_TrickHousePuzzle3_EventScript_162689 + call_if 1, Route110_TrickHousePuzzle3_EventScript_162689 compare 0x4008, 3 - callif 1, Route110_TrickHousePuzzle3_EventScript_16268F + call_if 1, Route110_TrickHousePuzzle3_EventScript_16268F compare 0x4008, 4 - callif 1, Route110_TrickHousePuzzle3_EventScript_162695 + call_if 1, Route110_TrickHousePuzzle3_EventScript_162695 compare 0x4008, 5 - callif 1, Route110_TrickHousePuzzle3_EventScript_16269B + call_if 1, Route110_TrickHousePuzzle3_EventScript_16269B compare 0x4008, 6 - callif 1, Route110_TrickHousePuzzle3_EventScript_1626A1 + call_if 1, Route110_TrickHousePuzzle3_EventScript_1626A1 compare 0x4008, 7 - callif 1, Route110_TrickHousePuzzle3_EventScript_1626A7 + call_if 1, Route110_TrickHousePuzzle3_EventScript_1626A7 return Route110_TrickHousePuzzle3_EventScript_162683:: @ 8162683 @@ -348,14 +348,14 @@ Route110_TrickHousePuzzle3_EventScript_1626A7:: @ 81626A7 Route110_TrickHousePuzzle3_EventScript_1626AD:: @ 81626AD compare 0x4009, 1 - callif 1, Route110_TrickHousePuzzle3_EventScript_161FE5 + call_if 1, Route110_TrickHousePuzzle3_EventScript_161FE5 compare 0x4009, 0 - callif 1, Route110_TrickHousePuzzle3_EventScript_1622C8 + call_if 1, Route110_TrickHousePuzzle3_EventScript_1622C8 special DrawWholeMapView compare 0x4009, 1 - jumpeq Route110_TrickHousePuzzle3_EventScript_1626DD + goto_if_eq Route110_TrickHousePuzzle3_EventScript_1626DD compare 0x4009, 0 - jumpeq Route110_TrickHousePuzzle3_EventScript_1626E4 + goto_if_eq Route110_TrickHousePuzzle3_EventScript_1626E4 end Route110_TrickHousePuzzle3_EventScript_1626DD:: @ 81626DD @@ -371,7 +371,7 @@ Route110_TrickHousePuzzle3_EventScript_1626E4:: @ 81626E4 Route110_TrickHousePuzzle3_EventScript_1626EB:: @ 81626EB lockall compare 0x40ad, 0 - jumpeq Route110_TrickHousePuzzle3_EventScript_1626FD + goto_if_eq Route110_TrickHousePuzzle3_EventScript_1626FD goto Route110_TrickHousePuzzle3_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle4.inc b/data/scripts/maps/Route110_TrickHousePuzzle4.inc index 11c0074d9..0c9fc426f 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle4.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle4.inc @@ -4,7 +4,7 @@ Route110_TrickHousePuzzle4_MapScripts:: @ 816274D Route110_TrickHousePuzzle4_EventScript_16274E:: @ 816274E lockall compare 0x40ae, 0 - jumpeq Route110_TrickHousePuzzle4_EventScript_162760 + goto_if_eq Route110_TrickHousePuzzle4_EventScript_162760 goto Route110_TrickHousePuzzle4_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle5.inc b/data/scripts/maps/Route110_TrickHousePuzzle5.inc index be416e326..72268710b 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle5.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle5.inc @@ -14,7 +14,7 @@ Route110_TrickHousePuzzle5_MapScript1_1627B6:: @ 81627B6 Route110_TrickHousePuzzle5_EventScript_1627D5:: @ 81627D5 lockall compare 0x40af, 0 - jumpeq Route110_TrickHousePuzzle5_EventScript_1627E7 + goto_if_eq Route110_TrickHousePuzzle5_EventScript_1627E7 goto Route110_TrickHousePuzzle5_EventScript_161892 end @@ -28,7 +28,7 @@ Route110_TrickHousePuzzle5_EventScript_1627F2:: @ 81627F2 move 1, Route110_TrickHousePuzzle5_Movement_1A0839 waitmove 0 compare 0x4001, 1 - jumpeq Route110_TrickHousePuzzle5_EventScript_162DE9 + goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_16293F end @@ -38,7 +38,7 @@ Route110_TrickHousePuzzle5_EventScript_162813:: @ 8162813 move 2, Route110_TrickHousePuzzle5_Movement_1A0839 waitmove 0 compare 0x4002, 1 - jumpeq Route110_TrickHousePuzzle5_EventScript_162DE9 + goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_1629B3 end @@ -48,7 +48,7 @@ Route110_TrickHousePuzzle5_EventScript_162834:: @ 8162834 move 3, Route110_TrickHousePuzzle5_Movement_1A0839 waitmove 0 compare 0x4003, 1 - jumpeq Route110_TrickHousePuzzle5_EventScript_162DE9 + goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_162A27 end @@ -58,7 +58,7 @@ Route110_TrickHousePuzzle5_EventScript_162855:: @ 8162855 move 4, Route110_TrickHousePuzzle5_Movement_1A0839 waitmove 0 compare 0x4004, 1 - jumpeq Route110_TrickHousePuzzle5_EventScript_162DE9 + goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_162A9B end @@ -68,7 +68,7 @@ Route110_TrickHousePuzzle5_EventScript_162876:: @ 8162876 move 5, Route110_TrickHousePuzzle5_Movement_1A0839 waitmove 0 compare 0x4005, 1 - jumpeq Route110_TrickHousePuzzle5_EventScript_162DE9 + goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_162B0F end @@ -166,11 +166,11 @@ Route110_TrickHousePuzzle5_EventScript_16293F:: @ 816293F move 1, Route110_TrickHousePuzzle5_Movement_1A0835 waitmove 0 compare 0x4009, 1 - callif 1, Route110_TrickHousePuzzle5_EventScript_162DF3 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162DF3 compare 0x4009, 2 - callif 1, Route110_TrickHousePuzzle5_EventScript_162E2B + call_if 1, Route110_TrickHousePuzzle5_EventScript_162E2B compare 0x4009, 3 - callif 1, Route110_TrickHousePuzzle5_EventScript_162E63 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162E63 msgbox Route110_TrickHousePuzzle5_Text_19D423, 4 random 3 switch RESULT @@ -188,11 +188,11 @@ Route110_TrickHousePuzzle5_EventScript_1629B3:: @ 81629B3 move 2, Route110_TrickHousePuzzle5_Movement_1A0835 waitmove 0 compare 0x4009, 1 - callif 1, Route110_TrickHousePuzzle5_EventScript_162E9B + call_if 1, Route110_TrickHousePuzzle5_EventScript_162E9B compare 0x4009, 2 - callif 1, Route110_TrickHousePuzzle5_EventScript_162ED3 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162ED3 compare 0x4009, 3 - callif 1, Route110_TrickHousePuzzle5_EventScript_162F0B + call_if 1, Route110_TrickHousePuzzle5_EventScript_162F0B msgbox Route110_TrickHousePuzzle5_Text_19D636, 4 random 3 switch RESULT @@ -210,11 +210,11 @@ Route110_TrickHousePuzzle5_EventScript_162A27:: @ 8162A27 move 3, Route110_TrickHousePuzzle5_Movement_1A0835 waitmove 0 compare 0x4009, 1 - callif 1, Route110_TrickHousePuzzle5_EventScript_162DF3 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162DF3 compare 0x4009, 2 - callif 1, Route110_TrickHousePuzzle5_EventScript_162E2B + call_if 1, Route110_TrickHousePuzzle5_EventScript_162E2B compare 0x4009, 3 - callif 1, Route110_TrickHousePuzzle5_EventScript_162E63 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162E63 msgbox Route110_TrickHousePuzzle5_Text_19D7D3, 4 random 3 switch RESULT @@ -232,11 +232,11 @@ Route110_TrickHousePuzzle5_EventScript_162A9B:: @ 8162A9B move 4, Route110_TrickHousePuzzle5_Movement_1A0835 waitmove 0 compare 0x4009, 1 - callif 1, Route110_TrickHousePuzzle5_EventScript_162DF3 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162DF3 compare 0x4009, 2 - callif 1, Route110_TrickHousePuzzle5_EventScript_162E2B + call_if 1, Route110_TrickHousePuzzle5_EventScript_162E2B compare 0x4009, 3 - callif 1, Route110_TrickHousePuzzle5_EventScript_162E63 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162E63 msgbox Route110_TrickHousePuzzle5_Text_19D93D, 4 random 3 switch RESULT @@ -254,11 +254,11 @@ Route110_TrickHousePuzzle5_EventScript_162B0F:: @ 8162B0F move 5, Route110_TrickHousePuzzle5_Movement_1A0835 waitmove 0 compare 0x4009, 1 - callif 1, Route110_TrickHousePuzzle5_EventScript_162E9B + call_if 1, Route110_TrickHousePuzzle5_EventScript_162E9B compare 0x4009, 2 - callif 1, Route110_TrickHousePuzzle5_EventScript_162ED3 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162ED3 compare 0x4009, 3 - callif 1, Route110_TrickHousePuzzle5_EventScript_162F0B + call_if 1, Route110_TrickHousePuzzle5_EventScript_162F0B msgbox Route110_TrickHousePuzzle5_Text_19DA9A, 4 random 3 switch RESULT @@ -419,80 +419,80 @@ Route110_TrickHousePuzzle5_EventScript_162DE9:: @ 8162DE9 Route110_TrickHousePuzzle5_EventScript_162DF3:: @ 8162DF3 compare 0x4008, 1 - callif 1, Route110_TrickHousePuzzle5_EventScript_162F43 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162F43 compare 0x4008, 2 - callif 1, Route110_TrickHousePuzzle5_EventScript_162F4E + call_if 1, Route110_TrickHousePuzzle5_EventScript_162F4E compare 0x4008, 3 - callif 1, Route110_TrickHousePuzzle5_EventScript_162F59 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162F59 compare 0x4008, 4 - callif 1, Route110_TrickHousePuzzle5_EventScript_162F64 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162F64 compare 0x4008, 5 - callif 1, Route110_TrickHousePuzzle5_EventScript_162F6F + call_if 1, Route110_TrickHousePuzzle5_EventScript_162F6F return Route110_TrickHousePuzzle5_EventScript_162E2B:: @ 8162E2B compare 0x4008, 1 - callif 1, Route110_TrickHousePuzzle5_EventScript_162F7A + call_if 1, Route110_TrickHousePuzzle5_EventScript_162F7A compare 0x4008, 2 - callif 1, Route110_TrickHousePuzzle5_EventScript_162F85 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162F85 compare 0x4008, 3 - callif 1, Route110_TrickHousePuzzle5_EventScript_162F90 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162F90 compare 0x4008, 4 - callif 1, Route110_TrickHousePuzzle5_EventScript_162F9B + call_if 1, Route110_TrickHousePuzzle5_EventScript_162F9B compare 0x4008, 5 - callif 1, Route110_TrickHousePuzzle5_EventScript_162FA6 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162FA6 return Route110_TrickHousePuzzle5_EventScript_162E63:: @ 8162E63 compare 0x4008, 1 - callif 1, Route110_TrickHousePuzzle5_EventScript_162FB1 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162FB1 compare 0x4008, 2 - callif 1, Route110_TrickHousePuzzle5_EventScript_162FBC + call_if 1, Route110_TrickHousePuzzle5_EventScript_162FBC compare 0x4008, 3 - callif 1, Route110_TrickHousePuzzle5_EventScript_162FC7 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162FC7 compare 0x4009, 4 - callif 1, Route110_TrickHousePuzzle5_EventScript_162FD2 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162FD2 compare 0x4009, 5 - callif 1, Route110_TrickHousePuzzle5_EventScript_162FDD + call_if 1, Route110_TrickHousePuzzle5_EventScript_162FDD return Route110_TrickHousePuzzle5_EventScript_162E9B:: @ 8162E9B compare 0x4008, 1 - callif 1, Route110_TrickHousePuzzle5_EventScript_162FE8 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162FE8 compare 0x4008, 2 - callif 1, Route110_TrickHousePuzzle5_EventScript_162FF3 + call_if 1, Route110_TrickHousePuzzle5_EventScript_162FF3 compare 0x4008, 3 - callif 1, Route110_TrickHousePuzzle5_EventScript_162FFE + call_if 1, Route110_TrickHousePuzzle5_EventScript_162FFE compare 0x4008, 4 - callif 1, Route110_TrickHousePuzzle5_EventScript_163009 + call_if 1, Route110_TrickHousePuzzle5_EventScript_163009 compare 0x4008, 5 - callif 1, Route110_TrickHousePuzzle5_EventScript_163014 + call_if 1, Route110_TrickHousePuzzle5_EventScript_163014 return Route110_TrickHousePuzzle5_EventScript_162ED3:: @ 8162ED3 compare 0x4008, 1 - callif 1, Route110_TrickHousePuzzle5_EventScript_16301F + call_if 1, Route110_TrickHousePuzzle5_EventScript_16301F compare 0x4008, 2 - callif 1, Route110_TrickHousePuzzle5_EventScript_16302A + call_if 1, Route110_TrickHousePuzzle5_EventScript_16302A compare 0x4008, 3 - callif 1, Route110_TrickHousePuzzle5_EventScript_163035 + call_if 1, Route110_TrickHousePuzzle5_EventScript_163035 compare 0x4008, 4 - callif 1, Route110_TrickHousePuzzle5_EventScript_163040 + call_if 1, Route110_TrickHousePuzzle5_EventScript_163040 compare 0x4008, 5 - callif 1, Route110_TrickHousePuzzle5_EventScript_16304B + call_if 1, Route110_TrickHousePuzzle5_EventScript_16304B return Route110_TrickHousePuzzle5_EventScript_162F0B:: @ 8162F0B compare 0x4008, 1 - callif 1, Route110_TrickHousePuzzle5_EventScript_163056 + call_if 1, Route110_TrickHousePuzzle5_EventScript_163056 compare 0x4008, 2 - callif 1, Route110_TrickHousePuzzle5_EventScript_163061 + call_if 1, Route110_TrickHousePuzzle5_EventScript_163061 compare 0x4008, 3 - callif 1, Route110_TrickHousePuzzle5_EventScript_16306C + call_if 1, Route110_TrickHousePuzzle5_EventScript_16306C compare 0x4008, 4 - callif 1, Route110_TrickHousePuzzle5_EventScript_163077 + call_if 1, Route110_TrickHousePuzzle5_EventScript_163077 compare 0x4008, 5 - callif 1, Route110_TrickHousePuzzle5_EventScript_163082 + call_if 1, Route110_TrickHousePuzzle5_EventScript_163082 return Route110_TrickHousePuzzle5_EventScript_162F43:: @ 8162F43 diff --git a/data/scripts/maps/Route110_TrickHousePuzzle6.inc b/data/scripts/maps/Route110_TrickHousePuzzle6.inc index bd0a7c8d8..ddf845142 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle6.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle6.inc @@ -18,7 +18,7 @@ Route110_TrickHousePuzzle6_EventScript_1630E6:: @ 81630E6 Route110_TrickHousePuzzle6_EventScript_1630EA:: @ 81630EA lockall compare 0x40b0, 0 - jumpeq Route110_TrickHousePuzzle6_EventScript_1630FC + goto_if_eq Route110_TrickHousePuzzle6_EventScript_1630FC goto Route110_TrickHousePuzzle6_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle7.inc b/data/scripts/maps/Route110_TrickHousePuzzle7.inc index a4093c546..c9dcce5e3 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle7.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle7.inc @@ -11,15 +11,15 @@ Route110_TrickHousePuzzle7_MapScript1_163161:: @ 8163161 Route110_TrickHousePuzzle7_EventScript_163167:: @ 8163167 checkflag 194 - callif 1, Route110_TrickHousePuzzle7_EventScript_163195 + call_if 1, Route110_TrickHousePuzzle7_EventScript_163195 checkflag 195 - callif 1, Route110_TrickHousePuzzle7_EventScript_1631A8 + call_if 1, Route110_TrickHousePuzzle7_EventScript_1631A8 checkflag 196 - callif 1, Route110_TrickHousePuzzle7_EventScript_1631BB + call_if 1, Route110_TrickHousePuzzle7_EventScript_1631BB checkflag 197 - callif 1, Route110_TrickHousePuzzle7_EventScript_1631CE + call_if 1, Route110_TrickHousePuzzle7_EventScript_1631CE checkflag 198 - callif 1, Route110_TrickHousePuzzle7_EventScript_1631E1 + call_if 1, Route110_TrickHousePuzzle7_EventScript_1631E1 return Route110_TrickHousePuzzle7_EventScript_163195:: @ 8163195 @@ -74,7 +74,7 @@ Route110_TrickHousePuzzle7_EventScript_163240:: @ 8163240 Route110_TrickHousePuzzle7_MapScript1_163253:: @ 8163253 compare 0x40b6, 1 - jumpeq Route110_TrickHousePuzzle7_EventScript_16326E + goto_if_eq Route110_TrickHousePuzzle7_EventScript_16326E clearflag 194 clearflag 195 clearflag 196 @@ -87,7 +87,7 @@ Route110_TrickHousePuzzle7_EventScript_16326E:: @ 816326E Route110_TrickHousePuzzle7_MapScript1_16326F:: @ 816326F compare 0x40b6, 1 - callif 1, Route110_TrickHousePuzzle7_EventScript_163167 + call_if 1, Route110_TrickHousePuzzle7_EventScript_163167 end Route110_TrickHousePuzzle7_MapScript2_16327B:: @ 816327B @@ -101,7 +101,7 @@ Route110_TrickHousePuzzle7_EventScript_163285:: @ 8163285 Route110_TrickHousePuzzle7_EventScript_16328B:: @ 816328B lockall compare 0x40b1, 0 - jumpeq Route110_TrickHousePuzzle7_EventScript_16329D + goto_if_eq Route110_TrickHousePuzzle7_EventScript_16329D goto Route110_TrickHousePuzzle7_EventScript_161892 end @@ -122,75 +122,75 @@ Route110_TrickHousePuzzle7_EventScript_1632B9:: @ 81632B9 lockall pause 32 checkflag 194 - callif 0, Route110_TrickHousePuzzle7_EventScript_163195 + call_if 0, Route110_TrickHousePuzzle7_EventScript_163195 checkflag 194 - callif 1, Route110_TrickHousePuzzle7_EventScript_1631F4 + call_if 1, Route110_TrickHousePuzzle7_EventScript_1631F4 special DrawWholeMapView playsfx 36 checkflag 194 - jumpif 0, Route110_TrickHousePuzzle7_EventScript_1633A4 + goto_if 0, Route110_TrickHousePuzzle7_EventScript_1633A4 checkflag 194 - jumpeq Route110_TrickHousePuzzle7_EventScript_1633A9 + goto_if_eq Route110_TrickHousePuzzle7_EventScript_1633A9 end Route110_TrickHousePuzzle7_EventScript_1632E8:: @ 81632E8 lockall pause 32 checkflag 195 - callif 0, Route110_TrickHousePuzzle7_EventScript_1631A8 + call_if 0, Route110_TrickHousePuzzle7_EventScript_1631A8 checkflag 195 - callif 1, Route110_TrickHousePuzzle7_EventScript_163207 + call_if 1, Route110_TrickHousePuzzle7_EventScript_163207 special DrawWholeMapView playsfx 36 checkflag 195 - jumpif 0, Route110_TrickHousePuzzle7_EventScript_1633AE + goto_if 0, Route110_TrickHousePuzzle7_EventScript_1633AE checkflag 195 - jumpeq Route110_TrickHousePuzzle7_EventScript_1633B3 + goto_if_eq Route110_TrickHousePuzzle7_EventScript_1633B3 end Route110_TrickHousePuzzle7_EventScript_163317:: @ 8163317 lockall pause 32 checkflag 196 - callif 0, Route110_TrickHousePuzzle7_EventScript_1631BB + call_if 0, Route110_TrickHousePuzzle7_EventScript_1631BB checkflag 196 - callif 1, Route110_TrickHousePuzzle7_EventScript_16321A + call_if 1, Route110_TrickHousePuzzle7_EventScript_16321A special DrawWholeMapView playsfx 36 checkflag 196 - jumpif 0, Route110_TrickHousePuzzle7_EventScript_1633B8 + goto_if 0, Route110_TrickHousePuzzle7_EventScript_1633B8 checkflag 196 - jumpeq Route110_TrickHousePuzzle7_EventScript_1633BD + goto_if_eq Route110_TrickHousePuzzle7_EventScript_1633BD end Route110_TrickHousePuzzle7_EventScript_163346:: @ 8163346 lockall pause 32 checkflag 197 - callif 0, Route110_TrickHousePuzzle7_EventScript_1631CE + call_if 0, Route110_TrickHousePuzzle7_EventScript_1631CE checkflag 197 - callif 1, Route110_TrickHousePuzzle7_EventScript_16322D + call_if 1, Route110_TrickHousePuzzle7_EventScript_16322D special DrawWholeMapView playsfx 36 checkflag 197 - jumpif 0, Route110_TrickHousePuzzle7_EventScript_1633C2 + goto_if 0, Route110_TrickHousePuzzle7_EventScript_1633C2 checkflag 197 - jumpeq Route110_TrickHousePuzzle7_EventScript_1633C7 + goto_if_eq Route110_TrickHousePuzzle7_EventScript_1633C7 end Route110_TrickHousePuzzle7_EventScript_163375:: @ 8163375 lockall pause 32 checkflag 198 - callif 0, Route110_TrickHousePuzzle7_EventScript_1631E1 + call_if 0, Route110_TrickHousePuzzle7_EventScript_1631E1 checkflag 198 - callif 1, Route110_TrickHousePuzzle7_EventScript_163240 + call_if 1, Route110_TrickHousePuzzle7_EventScript_163240 special DrawWholeMapView playsfx 36 checkflag 198 - jumpif 0, Route110_TrickHousePuzzle7_EventScript_1633CC + goto_if 0, Route110_TrickHousePuzzle7_EventScript_1633CC checkflag 198 - jumpeq Route110_TrickHousePuzzle7_EventScript_1633D1 + goto_if_eq Route110_TrickHousePuzzle7_EventScript_1633D1 end Route110_TrickHousePuzzle7_EventScript_1633A4:: @ 81633A4 diff --git a/data/scripts/maps/Route110_TrickHousePuzzle8.inc b/data/scripts/maps/Route110_TrickHousePuzzle8.inc index d4afab4ea..5f0b00684 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle8.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle8.inc @@ -4,7 +4,7 @@ Route110_TrickHousePuzzle8_MapScripts:: @ 816341B Route110_TrickHousePuzzle8_EventScript_16341C:: @ 816341C lockall compare 0x40b2, 0 - jumpeq Route110_TrickHousePuzzle8_EventScript_16342E + goto_if_eq Route110_TrickHousePuzzle8_EventScript_16342E goto Route110_TrickHousePuzzle8_EventScript_161892 end diff --git a/data/scripts/maps/Route111.inc b/data/scripts/maps/Route111.inc index 68be7e7d2..2a69df98a 100644 --- a/data/scripts/maps/Route111.inc +++ b/data/scripts/maps/Route111.inc @@ -5,7 +5,7 @@ Route111_MapScripts:: @ 814FF91 Route111_MapScript1_14FF9C:: @ 814FF9C checkflag 228 - callif 0, Route111_EventScript_14FFA6 + call_if 0, Route111_EventScript_14FFA6 end Route111_EventScript_14FFA6:: @ 814FFA6 @@ -17,21 +17,21 @@ Route111_MapScript1_14FFB9:: @ 814FFB9 call Route111_EventScript_14FFCD call Route111_EventScript_1AE313 checktrainerflag OPPONENT_VICKY - jumpif 0, Route111_EventScript_15000D + goto_if 0, Route111_EventScript_15000D end Route111_EventScript_14FFCD:: @ 814FFCD getplayerxy 0x4000, 0x4001 compare 0x4001, 34 - jumpif 0, Route111_EventScript_15000C + goto_if 0, Route111_EventScript_15000C compare 0x4001, 107 - jumpif 2, Route111_EventScript_15000C + goto_if 2, Route111_EventScript_15000C compare 0x4001, 72 - jumpif 2, Route111_EventScript_150009 + goto_if 2, Route111_EventScript_150009 compare 0x4000, 2000 - jumpif 2, Route111_EventScript_15000C + goto_if 2, Route111_EventScript_15000C compare 0x4000, 8 - jumpif 0, Route111_EventScript_15000C + goto_if 0, Route111_EventScript_15000C Route111_EventScript_150009:: @ 8150009 setweather 8 @@ -53,7 +53,7 @@ Route111_EventScript_150023:: @ 8150023 lockall msgbox Route111_Text_16FA54, 5 compare RESULT, 0 - jumpeq Route111_EventScript_15005F + goto_if_eq Route111_EventScript_15005F giveitem ITEM_ROOT_FOSSIL closebutton setflag 963 @@ -75,7 +75,7 @@ Route111_EventScript_150069:: @ 8150069 lockall msgbox Route111_Text_16FAED, 5 compare RESULT, 0 - jumpeq Route111_EventScript_1500A5 + goto_if_eq Route111_EventScript_1500A5 giveitem ITEM_CLAW_FOSSIL closebutton setflag 964 @@ -122,11 +122,11 @@ Route111_EventScript_1500C5:: @ 81500C5 faceplayer checkdailyflags checkflag 2252 - jumpeq Route111_EventScript_150100 + goto_if_eq Route111_EventScript_150100 msgbox Route111_Text_1C56F0, 4 giveitem ITEM_RAZZ_BERRY compare RESULT, 0 - jumpeq Route111_EventScript_1A029B + goto_if_eq Route111_EventScript_1A029B setflag 2252 special GetPlayerBigGuyGirlString msgbox Route111_Text_1C5781, 4 @@ -165,7 +165,7 @@ Route111_EventScript_150122:: @ 8150122 Route111_EventScript_15013A:: @ 815013A checkitem ITEM_GO_GOGGLES, 1 compare RESULT, 0 - jumpeq Route111_EventScript_150151 + goto_if_eq Route111_EventScript_150151 setvar 0x4003, 1 releaseall end @@ -174,13 +174,13 @@ Route111_EventScript_150151:: @ 8150151 msgbox Route111_Text_1A0F93, 4 closebutton compare 0x8004, 0 - callif 1, Route111_EventScript_150188 + call_if 1, Route111_EventScript_150188 compare 0x8004, 1 - callif 1, Route111_EventScript_150193 + call_if 1, Route111_EventScript_150193 compare 0x8004, 2 - callif 1, Route111_EventScript_15019E + call_if 1, Route111_EventScript_15019E compare 0x8004, 3 - callif 1, Route111_EventScript_1501A9 + call_if 1, Route111_EventScript_1501A9 releaseall end @@ -239,7 +239,7 @@ Route111_EventScript_1501D1:: @ 81501D1 setflag 2115 msgbox Route111_Text_16F705, 5 compare RESULT, 1 - jumpeq Route111_EventScript_1501F3 + goto_if_eq Route111_EventScript_1501F3 msgbox Route111_Text_16F785, 4 release end @@ -394,7 +394,7 @@ Route111_EventScript_150403:: @ 8150403 trainerbattle 0, OPPONENT_DUSTY_1, 0, Route111_Text_1BAEC9, Route111_Text_1BAF14 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route111_EventScript_15042A + goto_if_eq Route111_EventScript_15042A msgbox Route111_Text_1BAF5B, 6 end @@ -422,7 +422,7 @@ Route111_EventScript_150486:: @ 8150486 trainerbattle 0, OPPONENT_WILTON_1, 0, Route111_Text_1BB2E3, Route111_Text_1BB313 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route111_EventScript_1504AD + goto_if_eq Route111_EventScript_1504AD msgbox Route111_Text_1BB33E, 6 end @@ -435,7 +435,7 @@ Route111_EventScript_1504C4:: @ 81504C4 trainerbattle 0, OPPONENT_BROOKE_1, 0, Route111_Text_1BB44F, Route111_Text_1BB49F specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route111_EventScript_1504EB + goto_if_eq Route111_EventScript_1504EB msgbox Route111_Text_1BB4CE, 6 end diff --git a/data/scripts/maps/Route111_OldLadysRestStop.inc b/data/scripts/maps/Route111_OldLadysRestStop.inc index 107026a4b..a33b436dc 100644 --- a/data/scripts/maps/Route111_OldLadysRestStop.inc +++ b/data/scripts/maps/Route111_OldLadysRestStop.inc @@ -11,9 +11,9 @@ Route111_OldLadysRestStop_EventScript_15BFDB:: @ 815BFDB faceplayer msgbox Route111_OldLadysRestStop_Text_1923AF, 5 compare RESULT, 1 - jumpeq Route111_OldLadysRestStop_EventScript_15BFFC + goto_if_eq Route111_OldLadysRestStop_EventScript_15BFFC compare RESULT, 0 - jumpeq Route111_OldLadysRestStop_EventScript_15C029 + goto_if_eq Route111_OldLadysRestStop_EventScript_15C029 end Route111_OldLadysRestStop_EventScript_15BFFC:: @ 815BFFC @@ -22,9 +22,9 @@ Route111_OldLadysRestStop_EventScript_15BFFC:: @ 815BFFC call Route111_OldLadysRestStop_EventScript_1A02CA msgbox Route111_OldLadysRestStop_Text_19244D, 5 compare RESULT, 1 - jumpeq Route111_OldLadysRestStop_EventScript_15BFFC + goto_if_eq Route111_OldLadysRestStop_EventScript_15BFFC compare RESULT, 0 - jumpeq Route111_OldLadysRestStop_EventScript_15C029 + goto_if_eq Route111_OldLadysRestStop_EventScript_15C029 end Route111_OldLadysRestStop_EventScript_15C029:: @ 815C029 diff --git a/data/scripts/maps/Route111_WinstrateFamilysHouse.inc b/data/scripts/maps/Route111_WinstrateFamilysHouse.inc index 3fbaf7958..39fc62eaf 100644 --- a/data/scripts/maps/Route111_WinstrateFamilysHouse.inc +++ b/data/scripts/maps/Route111_WinstrateFamilysHouse.inc @@ -14,11 +14,11 @@ Route111_WinstrateFamilysHouse_EventScript_15BF3A:: @ 815BF3A faceplayer setvar 0x8008, 3 checkflag 277 - jumpeq Route111_WinstrateFamilysHouse_EventScript_15BF72 + goto_if_eq Route111_WinstrateFamilysHouse_EventScript_15BF72 msgbox Route111_WinstrateFamilysHouse_Text_19208A, 4 giveitem ITEM_MACHO_BRACE compare RESULT, 0 - jumpeq Route111_WinstrateFamilysHouse_EventScript_1A029B + goto_if_eq Route111_WinstrateFamilysHouse_EventScript_1A029B setflag 277 goto Route111_WinstrateFamilysHouse_EventScript_15BFC4 end @@ -41,7 +41,7 @@ Route111_WinstrateFamilysHouse_EventScript_15BF95:: @ 815BF95 faceplayer setvar 0x8008, 4 checkflag 4 - jumpeq Route111_WinstrateFamilysHouse_EventScript_15BFB6 + goto_if_eq Route111_WinstrateFamilysHouse_EventScript_15BFB6 msgbox Route111_WinstrateFamilysHouse_Text_192219, 4 setflag 4 goto Route111_WinstrateFamilysHouse_EventScript_15BFC4 diff --git a/data/scripts/maps/Route112.inc b/data/scripts/maps/Route112.inc index 1c1e36838..22c055320 100644 --- a/data/scripts/maps/Route112.inc +++ b/data/scripts/maps/Route112.inc @@ -40,7 +40,7 @@ Route112_EventScript_150560:: @ 8150560 trainerbattle 0, OPPONENT_TRENT_1, 0, Route112_Text_1BB6A0, Route112_Text_1BB707 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route112_EventScript_150587 + goto_if_eq Route112_EventScript_150587 msgbox Route112_Text_1BB721, 6 end diff --git a/data/scripts/maps/Route112_CableCarStation.inc b/data/scripts/maps/Route112_CableCarStation.inc index 016b868a8..c4ab89f23 100644 --- a/data/scripts/maps/Route112_CableCarStation.inc +++ b/data/scripts/maps/Route112_CableCarStation.inc @@ -6,7 +6,7 @@ Route112_CableCarStation_MapScripts:: @ 815C033 Route112_CableCarStation_MapScript1_15C03E:: @ 815C03E warp6 Route112, 255, 28, 28 compare 0x40a3, 2 - callif 1, Route112_CableCarStation_EventScript_15C052 + call_if 1, Route112_CableCarStation_EventScript_15C052 end Route112_CableCarStation_EventScript_15C052:: @ 815C052 @@ -34,9 +34,9 @@ Route112_CableCarStation_EventScript_15C08C:: @ 815C08C faceplayer msgbox Route112_CableCarStation_Text_1924F5, 5 compare RESULT, 1 - jumpeq Route112_CableCarStation_EventScript_15C0AD + goto_if_eq Route112_CableCarStation_EventScript_15C0AD compare RESULT, 0 - jumpeq Route112_CableCarStation_EventScript_15C0DC + goto_if_eq Route112_CableCarStation_EventScript_15C0DC end Route112_CableCarStation_EventScript_15C0AD:: @ 815C0AD diff --git a/data/scripts/maps/Route113.inc b/data/scripts/maps/Route113.inc index 1fc5a9345..67d28e6df 100644 --- a/data/scripts/maps/Route113.inc +++ b/data/scripts/maps/Route113.inc @@ -15,9 +15,9 @@ Route113_MapScript1_1505DA:: @ 81505DA Route113_EventScript_1505E5:: @ 81505E5 getplayerxy 0x4000, 0x4001 compare 0x4000, 19 - jumpif 0, Route113_EventScript_150604 + goto_if 0, Route113_EventScript_150604 compare 0x4000, 84 - jumpif 2, Route113_EventScript_150604 + goto_if 2, Route113_EventScript_150604 setweather 7 return @@ -62,7 +62,7 @@ Route113_EventScript_150669:: @ 8150669 trainerbattle 0, OPPONENT_MADELINE_1, 0, Route113_Text_1BBB27, Route113_Text_1BBB7A specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route113_EventScript_150690 + goto_if_eq Route113_EventScript_150690 msgbox Route113_Text_1BBB9A, 6 end @@ -75,7 +75,7 @@ Route113_EventScript_1506A7:: @ 81506A7 trainerbattle 0, OPPONENT_LAO_1, 0, Route113_Text_1BBC59, Route113_Text_1BBC90 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route113_EventScript_1506CE + goto_if_eq Route113_EventScript_1506CE msgbox Route113_Text_1BBCAB, 6 end diff --git a/data/scripts/maps/Route113_GlassWorkshop.inc b/data/scripts/maps/Route113_GlassWorkshop.inc index 24f4803b2..2fec004e4 100644 --- a/data/scripts/maps/Route113_GlassWorkshop.inc +++ b/data/scripts/maps/Route113_GlassWorkshop.inc @@ -5,7 +5,7 @@ Route113_GlassWorkshop_MapScripts:: @ 816354A Route113_GlassWorkshop_MapScript1_163550:: @ 8163550 setflag 2116 compare 0x40be, 1 - callif 1, Route113_GlassWorkshop_EventScript_16355F + call_if 1, Route113_GlassWorkshop_EventScript_16355F end Route113_GlassWorkshop_EventScript_16355F:: @ 816355F @@ -16,11 +16,11 @@ Route113_GlassWorkshop_EventScript_163565:: @ 8163565 lock faceplayer compare 0x40be, 10 - jumpif 4, Route113_GlassWorkshop_EventScript_1638D2 + goto_if 4, Route113_GlassWorkshop_EventScript_1638D2 compare 0x40be, 2 - jumpeq Route113_GlassWorkshop_EventScript_1635B5 + goto_if_eq Route113_GlassWorkshop_EventScript_1635B5 compare 0x40be, 1 - jumpeq Route113_GlassWorkshop_EventScript_1635AB + goto_if_eq Route113_GlassWorkshop_EventScript_1635AB msgbox Route113_GlassWorkshop_Text_19E4E6, 4 giveitem ITEM_SOOT_SACK setvar 0x40be, 1 @@ -36,10 +36,10 @@ Route113_GlassWorkshop_EventScript_1635AB:: @ 81635AB Route113_GlassWorkshop_EventScript_1635B5:: @ 81635B5 checkitem ITEM_SOOT_SACK, 1 compare RESULT, 0 - jumpeq Route113_GlassWorkshop_EventScript_1635E4 + goto_if_eq Route113_GlassWorkshop_EventScript_1635E4 msgbox Route113_GlassWorkshop_Text_19E65B, 4 compare 0x4048, 250 - jumpif 0, Route113_GlassWorkshop_EventScript_163818 + goto_if 0, Route113_GlassWorkshop_EventScript_163818 message Route113_GlassWorkshop_Text_19E757 waittext goto Route113_GlassWorkshop_EventScript_1635EE @@ -71,10 +71,10 @@ Route113_GlassWorkshop_EventScript_163660:: @ 8163660 bufferitem 0, 0x8008 setvar 0x800a, 250 compare 0x4048, 250 - jumpif 0, Route113_GlassWorkshop_EventScript_163830 + goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 compare RESULT, 0 - jumpeq Route113_GlassWorkshop_EventScript_163845 + goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 10 subvar 0x4048, 250 goto Route113_GlassWorkshop_EventScript_163851 @@ -85,10 +85,10 @@ Route113_GlassWorkshop_EventScript_16369C:: @ 816369C bufferitem 0, 0x8008 setvar 0x800a, 500 compare 0x4048, 500 - jumpif 0, Route113_GlassWorkshop_EventScript_163830 + goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 compare RESULT, 0 - jumpeq Route113_GlassWorkshop_EventScript_163845 + goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 11 subvar 0x4048, 500 goto Route113_GlassWorkshop_EventScript_163851 @@ -99,10 +99,10 @@ Route113_GlassWorkshop_EventScript_1636D8:: @ 81636D8 bufferitem 0, 0x8008 setvar 0x800a, 500 compare 0x4048, 500 - jumpif 0, Route113_GlassWorkshop_EventScript_163830 + goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 compare RESULT, 0 - jumpeq Route113_GlassWorkshop_EventScript_163845 + goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 12 subvar 0x4048, 500 goto Route113_GlassWorkshop_EventScript_163851 @@ -113,10 +113,10 @@ Route113_GlassWorkshop_EventScript_163714:: @ 8163714 bufferitem 0, 0x8008 setvar 0x800a, 1000 compare 0x4048, 1000 - jumpif 0, Route113_GlassWorkshop_EventScript_163830 + goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 compare RESULT, 0 - jumpeq Route113_GlassWorkshop_EventScript_163845 + goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 13 subvar 0x4048, 1000 goto Route113_GlassWorkshop_EventScript_163851 @@ -127,10 +127,10 @@ Route113_GlassWorkshop_EventScript_163750:: @ 8163750 bufferitem 0, 0x8008 setvar 0x800a, 1000 compare 0x4048, 1000 - jumpif 0, Route113_GlassWorkshop_EventScript_163830 + goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 compare RESULT, 0 - jumpeq Route113_GlassWorkshop_EventScript_163845 + goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 14 subvar 0x4048, 1000 goto Route113_GlassWorkshop_EventScript_163851 @@ -142,10 +142,10 @@ Route113_GlassWorkshop_EventScript_16378C:: @ 816378C bufferdecor 0, 0x8008 setvar 0x800a, 6000 compare 0x4048, 6000 - jumpif 0, Route113_GlassWorkshop_EventScript_163830 + goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 compare RESULT, 0 - jumpeq Route113_GlassWorkshop_EventScript_163845 + goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 15 subvar 0x4048, 6000 goto Route113_GlassWorkshop_EventScript_163851 @@ -157,10 +157,10 @@ Route113_GlassWorkshop_EventScript_1637CD:: @ 81637CD bufferdecor 0, 0x8008 setvar 0x800a, 8000 compare 0x4048, 8000 - jumpif 0, Route113_GlassWorkshop_EventScript_163830 + goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 compare RESULT, 0 - jumpeq Route113_GlassWorkshop_EventScript_163845 + goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 16 subvar 0x4048, 8000 goto Route113_GlassWorkshop_EventScript_163851 @@ -202,9 +202,9 @@ Route113_GlassWorkshop_EventScript_163851:: @ 8163851 fadescreen 0 msgbox Route113_GlassWorkshop_Text_19E9D7, 4 compare 0x8009, 0 - callif 1, Route113_GlassWorkshop_EventScript_163889 + call_if 1, Route113_GlassWorkshop_EventScript_163889 compare 0x8009, 1 - callif 1, Route113_GlassWorkshop_EventScript_1638A1 + call_if 1, Route113_GlassWorkshop_EventScript_1638A1 setvar 0x40be, 2 release end @@ -212,13 +212,13 @@ Route113_GlassWorkshop_EventScript_163851:: @ 8163851 Route113_GlassWorkshop_EventScript_163889:: @ 8163889 giveitem 0x8008 compare RESULT, 0 - jumpeq Route113_GlassWorkshop_EventScript_1638B4 + goto_if_eq Route113_GlassWorkshop_EventScript_1638B4 return Route113_GlassWorkshop_EventScript_1638A1:: @ 81638A1 givedecoration 0x8008 compare RESULT, 0 - jumpeq Route113_GlassWorkshop_EventScript_1638C3 + goto_if_eq Route113_GlassWorkshop_EventScript_1638C3 return Route113_GlassWorkshop_EventScript_1638B4:: @ 81638B4 @@ -296,9 +296,9 @@ Route113_GlassWorkshop_EventScript_16399D:: @ 816399D Route113_GlassWorkshop_EventScript_1639B1:: @ 81639B1 msgbox Route113_GlassWorkshop_Text_19E9D7, 4 compare 0x8009, 0 - callif 1, Route113_GlassWorkshop_EventScript_163889 + call_if 1, Route113_GlassWorkshop_EventScript_163889 compare 0x8009, 1 - callif 1, Route113_GlassWorkshop_EventScript_1638A1 + call_if 1, Route113_GlassWorkshop_EventScript_1638A1 setvar 0x40be, 2 release end diff --git a/data/scripts/maps/Route114.inc b/data/scripts/maps/Route114.inc index cfe1dfe7d..6d28b87a4 100644 --- a/data/scripts/maps/Route114.inc +++ b/data/scripts/maps/Route114.inc @@ -6,14 +6,14 @@ Route114_EventScript_150733:: @ 8150733 faceplayer checkdailyflags checkflag 2251 - jumpeq Route114_EventScript_150778 + goto_if_eq Route114_EventScript_150778 msgbox Route114_Text_1C5803, 4 random 5 addvar RESULT, 15 addvar RESULT, 133 giveitem RESULT compare RESULT, 0 - jumpeq Route114_EventScript_1A029B + goto_if_eq Route114_EventScript_1A029B setflag 2251 msgbox Route114_Text_1C5861, 4 release @@ -28,11 +28,11 @@ Route114_EventScript_150782:: @ 8150782 lock faceplayer checkflag 231 - jumpeq Route114_EventScript_1507B9 + goto_if_eq Route114_EventScript_1507B9 msgbox Route114_Text_170154, 4 giveitem ITEM_TM05 compare RESULT, 0 - jumpeq Route114_EventScript_1A029B + goto_if_eq Route114_EventScript_1A029B setflag 231 msgbox Route114_Text_1701C5, 4 release @@ -89,7 +89,7 @@ Route114_EventScript_15084D:: @ 815084D trainerbattle 0, OPPONENT_STEVE_1, 0, Route114_Text_1BC2F5, Route114_Text_1BC327 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route114_EventScript_150874 + goto_if_eq Route114_EventScript_150874 msgbox Route114_Text_1BC337, 6 end @@ -102,7 +102,7 @@ Route114_EventScript_15088B:: @ 815088B trainerbattle 0, OPPONENT_BERNIE_1, 0, Route114_Text_1BC45A, Route114_Text_1BC499 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route114_EventScript_1508B2 + goto_if_eq Route114_EventScript_1508B2 msgbox Route114_Text_1BC4B5, 6 end diff --git a/data/scripts/maps/Route114_FossilManiacsHouse.inc b/data/scripts/maps/Route114_FossilManiacsHouse.inc index 50305dc04..b217f24c4 100644 --- a/data/scripts/maps/Route114_FossilManiacsHouse.inc +++ b/data/scripts/maps/Route114_FossilManiacsHouse.inc @@ -10,11 +10,11 @@ Route114_FossilManiacsHouse_EventScript_15C1C3:: @ 815C1C3 lock faceplayer checkflag 261 - jumpeq Route114_FossilManiacsHouse_EventScript_15C1F2 + goto_if_eq Route114_FossilManiacsHouse_EventScript_15C1F2 msgbox Route114_FossilManiacsHouse_Text_1925E1, 4 giveitem ITEM_TM28 compare RESULT, 0 - jumpeq Route114_FossilManiacsHouse_EventScript_1A029B + goto_if_eq Route114_FossilManiacsHouse_EventScript_1A029B setflag 261 release end diff --git a/data/scripts/maps/Route114_FossilManiacsTunnel.inc b/data/scripts/maps/Route114_FossilManiacsTunnel.inc index 7986a0436..13843f758 100644 --- a/data/scripts/maps/Route114_FossilManiacsTunnel.inc +++ b/data/scripts/maps/Route114_FossilManiacsTunnel.inc @@ -5,13 +5,13 @@ Route114_FossilManiacsTunnel_EventScript_15C20F:: @ 815C20F lock faceplayer checkflag 267 - jumpeq Route114_FossilManiacsTunnel_EventScript_15C24E + goto_if_eq Route114_FossilManiacsTunnel_EventScript_15C24E checkitem ITEM_ROOT_FOSSIL, 1 compare RESULT, 1 - jumpeq Route114_FossilManiacsTunnel_EventScript_15C244 + goto_if_eq Route114_FossilManiacsTunnel_EventScript_15C244 checkitem ITEM_CLAW_FOSSIL, 1 compare RESULT, 1 - jumpeq Route114_FossilManiacsTunnel_EventScript_15C244 + goto_if_eq Route114_FossilManiacsTunnel_EventScript_15C244 msgbox Route114_FossilManiacsTunnel_Text_192795, 4 release end diff --git a/data/scripts/maps/Route114_LanettesHouse.inc b/data/scripts/maps/Route114_LanettesHouse.inc index ff8a1c565..e4334647c 100644 --- a/data/scripts/maps/Route114_LanettesHouse.inc +++ b/data/scripts/maps/Route114_LanettesHouse.inc @@ -10,7 +10,7 @@ Route114_LanettesHouse_EventScript_15C262:: @ 815C262 lock faceplayer checkflag 131 - jumpeq Route114_LanettesHouse_EventScript_15C28F + goto_if_eq Route114_LanettesHouse_EventScript_15C28F setflag 2123 msgbox Route114_LanettesHouse_Text_192A0D, 4 .ifdef SAPPHIRE @@ -19,7 +19,7 @@ Route114_LanettesHouse_EventScript_15C262:: @ 815C262 givedecoration 100 .endif compare RESULT, 0 - jumpeq Route114_LanettesHouse_EventScript_1A02AE + goto_if_eq Route114_LanettesHouse_EventScript_1A02AE setflag 131 release end @@ -33,7 +33,7 @@ Route114_LanettesHouse_EventScript_15C299:: @ 815C299 lockall msgbox Route114_LanettesHouse_Text_192B4A, 5 compare RESULT, 1 - jumpeq Route114_LanettesHouse_EventScript_15C2B7 + goto_if_eq Route114_LanettesHouse_EventScript_15C2B7 msgbox Route114_LanettesHouse_Text_192DA9, 4 releaseall end @@ -41,7 +41,7 @@ Route114_LanettesHouse_EventScript_15C299:: @ 815C299 Route114_LanettesHouse_EventScript_15C2B7:: @ 815C2B7 msgbox Route114_LanettesHouse_Text_192C01, 5 compare RESULT, 1 - callif 1, Route114_LanettesHouse_EventScript_15C2CC + call_if 1, Route114_LanettesHouse_EventScript_15C2CC releaseall end diff --git a/data/scripts/maps/Route115.inc b/data/scripts/maps/Route115.inc index 2b0d744ca..3bacb06d1 100644 --- a/data/scripts/maps/Route115.inc +++ b/data/scripts/maps/Route115.inc @@ -17,7 +17,7 @@ Route115_EventScript_150949:: @ 8150949 trainerbattle 0, OPPONENT_TIMOTHY_1, 0, Route115_Text_1BC9AC, Route115_Text_1BC9E6 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route115_EventScript_150970 + goto_if_eq Route115_EventScript_150970 msgbox Route115_Text_1BCA0E, 6 end @@ -35,7 +35,7 @@ Route115_EventScript_15099E:: @ 815099E trainerbattle 0, OPPONENT_NOB_1, 0, Route115_Text_1BCB8A, Route115_Text_1BCBC1 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route115_EventScript_1509C5 + goto_if_eq Route115_EventScript_1509C5 msgbox Route115_Text_1BCBDE, 6 end @@ -48,7 +48,7 @@ Route115_EventScript_1509DC:: @ 81509DC trainerbattle 0, OPPONENT_CYNDY_1, 0, Route115_Text_1BCCF4, Route115_Text_1BCD32 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route115_EventScript_150A03 + goto_if_eq Route115_EventScript_150A03 msgbox Route115_Text_1BCD4C, 6 end diff --git a/data/scripts/maps/Route116.inc b/data/scripts/maps/Route116.inc index 7b9a5162f..94b7d25d6 100644 --- a/data/scripts/maps/Route116.inc +++ b/data/scripts/maps/Route116.inc @@ -4,7 +4,7 @@ Route116_MapScripts:: @ 8150A31 Route116_MapScript1_150A37:: @ 8150A37 checkflag 143 - callif 1, Route116_EventScript_150A41 + call_if 1, Route116_EventScript_150A41 end Route116_EventScript_150A41:: @ 8150A41 @@ -15,9 +15,9 @@ Route116_EventScript_150A49:: @ 8150A49 lock faceplayer checkflag 143 - jumpeq Route116_EventScript_150A67 + goto_if_eq Route116_EventScript_150A67 checkflag 142 - jumpeq Route116_EventScript_150A71 + goto_if_eq Route116_EventScript_150A71 msgbox Route116_Text_1703CF, 4 release end @@ -36,7 +36,7 @@ Route116_EventScript_150A7B:: @ 8150A7B lock faceplayer checkflag 287 - jumpeq Route116_EventScript_150B04 + goto_if_eq Route116_EventScript_150B04 msgbox Route116_Text_1705AE, 4 goto Route116_EventScript_150A94 end @@ -45,17 +45,17 @@ Route116_EventScript_150A94:: @ 8150A94 setflag 287 giveitem ITEM_REPEAT_BALL compare RESULT, 0 - jumpeq Route116_EventScript_150B12 + goto_if_eq Route116_EventScript_150B12 msgbox Route116_Text_1707B8, 4 closebutton compare FACING, 2 - callif 1, Route116_EventScript_150AEE + call_if 1, Route116_EventScript_150AEE compare FACING, 1 - callif 1, Route116_EventScript_150AEE + call_if 1, Route116_EventScript_150AEE compare FACING, 3 - callif 1, Route116_EventScript_150AEE + call_if 1, Route116_EventScript_150AEE compare FACING, 4 - callif 1, Route116_EventScript_150AF9 + call_if 1, Route116_EventScript_150AF9 disappear LAST_TALKED clearflag 949 setflag 256 @@ -149,10 +149,10 @@ Route116_EventScript_150B8F:: @ 8150B8F faceplayer checkitem ITEM_BLACK_GLASSES, 1 compare RESULT, 1 - jumpeq Route116_EventScript_150BCA + goto_if_eq Route116_EventScript_150BCA specialval RESULT, sub_810F828 compare RESULT, 1 - jumpeq Route116_EventScript_150BBB + goto_if_eq Route116_EventScript_150BBB msgbox Route116_Text_1708EE, 4 release end @@ -168,7 +168,7 @@ Route116_EventScript_150BCA:: @ 8150BCA msgbox Route116_Text_170921, 4 specialval RESULT, sub_810F828 compare RESULT, 1 - jumpeq Route116_EventScript_150BF4 + goto_if_eq Route116_EventScript_150BF4 msgbox Route116_Text_170A03, 4 release end @@ -182,13 +182,13 @@ Route116_EventScript_150BF4:: @ 8150BF4 Route116_EventScript_150C03:: @ 8150C03 pause 20 compare FACING, 2 - callif 1, Route116_EventScript_150C37 + call_if 1, Route116_EventScript_150C37 compare FACING, 1 - callif 1, Route116_EventScript_150C37 + call_if 1, Route116_EventScript_150C37 compare FACING, 3 - callif 1, Route116_EventScript_150C37 + call_if 1, Route116_EventScript_150C37 compare FACING, 4 - callif 1, Route116_EventScript_150C42 + call_if 1, Route116_EventScript_150C42 disappear LAST_TALKED release end @@ -242,7 +242,7 @@ Route116_EventScript_150C90:: @ 8150C90 trainerbattle 0, OPPONENT_JERRY_1, 0, Route116_Text_1BD1C0, Route116_Text_1BD21A specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route116_EventScript_150CB7 + goto_if_eq Route116_EventScript_150CB7 msgbox Route116_Text_1BD248, 6 end @@ -265,7 +265,7 @@ Route116_EventScript_150CFC:: @ 8150CFC trainerbattle 0, OPPONENT_KAREN_1, 0, Route116_Text_1BD377, Route116_Text_1BD3AC specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route116_EventScript_150D23 + goto_if_eq Route116_EventScript_150D23 msgbox Route116_Text_1BD3C3, 6 end diff --git a/data/scripts/maps/Route116_TunnelersRestHouse.inc b/data/scripts/maps/Route116_TunnelersRestHouse.inc index d141fae37..10991c38c 100644 --- a/data/scripts/maps/Route116_TunnelersRestHouse.inc +++ b/data/scripts/maps/Route116_TunnelersRestHouse.inc @@ -18,7 +18,7 @@ Route116_TunnelersRestHouse_EventScript_15C2FA:: @ 815C2FA lock faceplayer checkflag 199 - jumpeq Route116_TunnelersRestHouse_EventScript_15C30F + goto_if_eq Route116_TunnelersRestHouse_EventScript_15C30F msgbox Route116_TunnelersRestHouse_Text_193135, 4 release end diff --git a/data/scripts/maps/Route117.inc b/data/scripts/maps/Route117.inc index 61dbf6a30..a84d1eaf8 100644 --- a/data/scripts/maps/Route117.inc +++ b/data/scripts/maps/Route117.inc @@ -8,7 +8,7 @@ Route117_MapScript1_150D40:: @ 8150D40 Route117_EventScript_150D46:: @ 8150D46 checkflag 134 - jumpif 0, Route117_EventScript_150D56 + goto_if 0, Route117_EventScript_150D56 movespriteperm 3, 47, 6 Route117_EventScript_150D56:: @ 8150D56 @@ -42,7 +42,7 @@ Route117_EventScript_150D8D:: @ 8150D8D trainerbattle 0, OPPONENT_ISAAC_1, 0, Route117_Text_1BD49E, Route117_Text_1BD4D9 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route117_EventScript_150DB4 + goto_if_eq Route117_EventScript_150DB4 msgbox Route117_Text_1BD4F9, 6 end @@ -55,7 +55,7 @@ Route117_EventScript_150DCB:: @ 8150DCB trainerbattle 0, OPPONENT_LYDIA_1, 0, Route117_Text_1BD634, Route117_Text_1BD67B specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route117_EventScript_150DF2 + goto_if_eq Route117_EventScript_150DF2 msgbox Route117_Text_1BD69B, 6 end @@ -68,7 +68,7 @@ Route117_EventScript_150E09:: @ 8150E09 trainerbattle 0, OPPONENT_DYLAN_1, 0, Route117_Text_1BD79A, Route117_Text_1BD7E0 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route117_EventScript_150E30 + goto_if_eq Route117_EventScript_150E30 msgbox Route117_Text_1BD7F5, 6 end @@ -81,7 +81,7 @@ Route117_EventScript_150E47:: @ 8150E47 trainerbattle 0, OPPONENT_MARIA_1, 0, Route117_Text_1BD914, Route117_Text_1BD965 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route117_EventScript_150E6E + goto_if_eq Route117_EventScript_150E6E msgbox Route117_Text_1BD98F, 6 end @@ -99,7 +99,7 @@ Route117_EventScript_150E9C:: @ 8150E9C trainerbattle 4, OPPONENT_ANNA_AND_MEG_1, 0, Route117_Text_1BDBC3, Route117_Text_1BDC07, Route117_Text_1BDC96 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route117_EventScript_150EC7 + goto_if_eq Route117_EventScript_150EC7 msgbox Route117_Text_1BDC44, 6 end @@ -112,7 +112,7 @@ Route117_EventScript_150EE2:: @ 8150EE2 trainerbattle 4, OPPONENT_ANNA_AND_MEG_1, 0, Route117_Text_1BDCD2, Route117_Text_1BDD1E, Route117_Text_1BDD8B specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route117_EventScript_150F0D + goto_if_eq Route117_EventScript_150F0D msgbox Route117_Text_1BDD4E, 6 end diff --git a/data/scripts/maps/Route118.inc b/data/scripts/maps/Route118.inc index a28352c94..7d4109f59 100644 --- a/data/scripts/maps/Route118.inc +++ b/data/scripts/maps/Route118.inc @@ -10,12 +10,12 @@ Route118_EventScript_150F34:: @ 8150F34 lock faceplayer checkflag 227 - jumpeq Route118_EventScript_150F89 + goto_if_eq Route118_EventScript_150F89 msgbox Route118_Text_170F12, 5 compare RESULT, 1 - jumpeq Route118_EventScript_150F5E + goto_if_eq Route118_EventScript_150F5E compare RESULT, 0 - jumpeq Route118_EventScript_150F7F + goto_if_eq Route118_EventScript_150F7F end Route118_EventScript_150F5E:: @ 8150F5E @@ -84,11 +84,11 @@ Route118_EventScript_151004:: @ 8151004 msgbox Route118_Text_170D66, 4 closebutton compare 0x8008, 0 - callif 1, Route118_EventScript_151048 + call_if 1, Route118_EventScript_151048 compare 0x8008, 1 - callif 1, Route118_EventScript_151053 + call_if 1, Route118_EventScript_151053 compare 0x8008, 2 - callif 1, Route118_EventScript_15105E + call_if 1, Route118_EventScript_15105E setvar 0x4071, 1 disappear 19 releaseall @@ -163,7 +163,7 @@ Route118_EventScript_15108F:: @ 815108F trainerbattle 0, OPPONENT_ROSE_1, 0, Route118_Text_1BDFF4, Route118_Text_1BE03C specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route118_EventScript_1510B6 + goto_if_eq Route118_EventScript_1510B6 msgbox Route118_Text_1BE05E, 6 end @@ -186,7 +186,7 @@ Route118_EventScript_1510FB:: @ 81510FB trainerbattle 0, OPPONENT_DALTON_1, 0, Route118_Text_1BE3E8, Route118_Text_1BE406 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route118_EventScript_151122 + goto_if_eq Route118_EventScript_151122 msgbox Route118_Text_1BE413, 6 end diff --git a/data/scripts/maps/Route119.inc b/data/scripts/maps/Route119.inc index bd73bbf31..0d71ac056 100644 --- a/data/scripts/maps/Route119.inc +++ b/data/scripts/maps/Route119.inc @@ -5,14 +5,14 @@ Route119_MapScripts:: @ 8151167 Route119_MapScript1_151172:: @ 8151172 checkflag 2145 - callif 1, Route119_EventScript_15117C + call_if 1, Route119_EventScript_15117C end Route119_EventScript_15117C:: @ 815117C compare 0x8004, 6 - callif 1, Route119_EventScript_151193 + call_if 1, Route119_EventScript_151193 compare 0x8004, 7 - callif 1, Route119_EventScript_151197 + call_if 1, Route119_EventScript_151197 return Route119_EventScript_151193:: @ 8151193 @@ -28,7 +28,7 @@ Route119_MapScript1_15119B:: @ 815119B call Route119_EventScript_1A0172 call Route119_EventScript_1A0196 compare 0x40b3, 1 - callif 1, Route119_EventScript_1511B9 + call_if 1, Route119_EventScript_1511B9 special SetRoute119Weather end @@ -53,29 +53,29 @@ Route119_EventScript_1511DB:: @ 81511DB reappear 25 checkgender compare RESULT, 0 - callif 1, Route119_EventScript_151254 + call_if 1, Route119_EventScript_151254 compare RESULT, 1 - callif 1, Route119_EventScript_151259 + call_if 1, Route119_EventScript_151259 pause 65 compare 0x4001, 1 - callif 1, Route119_EventScript_1513A6 + call_if 1, Route119_EventScript_1513A6 compare 0x4001, 2 - callif 1, Route119_EventScript_1513B1 + call_if 1, Route119_EventScript_1513B1 move 255, Route119_Movement_1A0845 waitmove 0 pause 30 compare 0x4001, 1 - callif 1, Route119_EventScript_1513D2 + call_if 1, Route119_EventScript_1513D2 compare 0x4001, 2 - callif 1, Route119_EventScript_1513E1 + call_if 1, Route119_EventScript_1513E1 disappear 25 reappear 16 pause 30 checkgender compare RESULT, 0 - jumpeq Route119_EventScript_15125E + goto_if_eq Route119_EventScript_15125E compare RESULT, 1 - jumpeq Route119_EventScript_1512D8 + goto_if_eq Route119_EventScript_1512D8 releaseall end @@ -155,16 +155,16 @@ Route119_EventScript_151352:: @ 8151352 Route119_EventScript_151362:: @ 8151362 closebutton compare 0x4001, 1 - callif 1, Route119_EventScript_1513D2 + call_if 1, Route119_EventScript_1513D2 compare 0x4001, 2 - callif 1, Route119_EventScript_1513E1 + call_if 1, Route119_EventScript_1513E1 disappear 16 reappear 25 pause 30 compare 0x4001, 1 - callif 1, Route119_EventScript_1513BC + call_if 1, Route119_EventScript_1513BC compare 0x4001, 2 - callif 1, Route119_EventScript_1513C7 + call_if 1, Route119_EventScript_1513C7 disappear 25 setvar 0x4072, 1 playmusicbattle 0 @@ -298,7 +298,7 @@ Route119_EventScript_1514BF:: @ 81514BF trainerbattle 0, OPPONENT_JACKSON_1, 0, Route119_Text_1BE8BB, Route119_Text_1BE90E specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route119_EventScript_1514E6 + goto_if_eq Route119_EventScript_1514E6 msgbox Route119_Text_1BE937, 6 end @@ -311,7 +311,7 @@ Route119_EventScript_1514FD:: @ 81514FD trainerbattle 0, OPPONENT_CATHERINE_1, 0, Route119_Text_1BEA3A, Route119_Text_1BEA88 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route119_EventScript_151524 + goto_if_eq Route119_EventScript_151524 msgbox Route119_Text_1BEAB3, 6 end diff --git a/data/scripts/maps/Route119_WeatherInstitute_1F.inc b/data/scripts/maps/Route119_WeatherInstitute_1F.inc index 95ec39d61..762a6c299 100644 --- a/data/scripts/maps/Route119_WeatherInstitute_1F.inc +++ b/data/scripts/maps/Route119_WeatherInstitute_1F.inc @@ -5,7 +5,7 @@ Route119_WeatherInstitute_1F_MapScripts:: @ 8163C2A Route119_WeatherInstitute_1F_MapScript1_163C30:: @ 8163C30 call Route119_WeatherInstitute_1F_EventScript_1A0196 compare 0x40b3, 0 - callif 1, Route119_WeatherInstitute_1F_EventScript_163C41 + call_if 1, Route119_WeatherInstitute_1F_EventScript_163C41 end Route119_WeatherInstitute_1F_EventScript_163C41:: @ 8163C41 @@ -18,7 +18,7 @@ Route119_WeatherInstitute_1F_EventScript_163C4D:: @ 8163C4D faceplayer special GetPlayerBigGuyGirlString compare 0x40b3, 0 - jumpeq Route119_WeatherInstitute_1F_EventScript_163C67 + goto_if_eq Route119_WeatherInstitute_1F_EventScript_163C67 msgbox Route119_WeatherInstitute_1F_Text_19ED22, 4 release end diff --git a/data/scripts/maps/Route119_WeatherInstitute_2F.inc b/data/scripts/maps/Route119_WeatherInstitute_2F.inc index f88b97cfe..35e547f79 100644 --- a/data/scripts/maps/Route119_WeatherInstitute_2F.inc +++ b/data/scripts/maps/Route119_WeatherInstitute_2F.inc @@ -5,9 +5,9 @@ Route119_WeatherInstitute_2F_MapScripts:: @ 8163CC2 Route119_WeatherInstitute_2F_MapScript1_163CC8:: @ 8163CC8 call Route119_WeatherInstitute_2F_EventScript_1A0196 compare 0x40b3, 0 - callif 1, Route119_WeatherInstitute_2F_EventScript_163CE4 + call_if 1, Route119_WeatherInstitute_2F_EventScript_163CE4 compare 0x40b3, 1 - callif 1, Route119_WeatherInstitute_2F_EventScript_163CF0 + call_if 1, Route119_WeatherInstitute_2F_EventScript_163CF0 end Route119_WeatherInstitute_2F_EventScript_163CE4:: @ 8163CE4 @@ -57,7 +57,7 @@ Route119_WeatherInstitute_2F_EventScript_163D7A:: @ 8163D7A msgbox Route119_WeatherInstitute_2F_Text_19F1CF, 4 countpokemon compare RESULT, 6 - jumpeq Route119_WeatherInstitute_2F_EventScript_163DB4 + goto_if_eq Route119_WeatherInstitute_2F_EventScript_163DB4 fanfare 370 message Route119_WeatherInstitute_2F_Text_19F267 waitfanfare @@ -88,6 +88,6 @@ Route119_WeatherInstitute_2F_EventScript_163DCC:: @ 8163DCC lock faceplayer checkflag 151 - jumpeq Route119_WeatherInstitute_2F_EventScript_163DBE + goto_if_eq Route119_WeatherInstitute_2F_EventScript_163DBE goto Route119_WeatherInstitute_2F_EventScript_163D7A end diff --git a/data/scripts/maps/Route120.inc b/data/scripts/maps/Route120.inc index 74250fd0f..f0179d317 100644 --- a/data/scripts/maps/Route120.inc +++ b/data/scripts/maps/Route120.inc @@ -6,22 +6,22 @@ Route120_MapScripts:: @ 815160E Route120_MapScript1_15161E:: @ 815161E checkflag 2145 - callif 1, Route120_EventScript_151628 + call_if 1, Route120_EventScript_151628 end Route120_EventScript_151628:: @ 8151628 compare 0x8004, 0 - callif 1, Route120_EventScript_15166B + call_if 1, Route120_EventScript_15166B compare 0x8004, 1 - callif 1, Route120_EventScript_151672 + call_if 1, Route120_EventScript_151672 compare 0x8004, 2 - callif 1, Route120_EventScript_151676 + call_if 1, Route120_EventScript_151676 compare 0x8004, 3 - callif 1, Route120_EventScript_15167A + call_if 1, Route120_EventScript_15167A compare 0x8004, 4 - callif 1, Route120_EventScript_15167E + call_if 1, Route120_EventScript_15167E compare 0x8004, 5 - callif 1, Route120_EventScript_151682 + call_if 1, Route120_EventScript_151682 return Route120_EventScript_15166B:: @ 815166B @@ -51,11 +51,11 @@ Route120_EventScript_151682:: @ 8151682 Route120_MapScript1_151686:: @ 8151686 checkflag 228 - callif 0, Route120_EventScript_1516A2 + call_if 0, Route120_EventScript_1516A2 checkflag 285 - callif 1, Route120_EventScript_1516B5 + call_if 1, Route120_EventScript_1516B5 checkflag 285 - callif 0, Route120_EventScript_1516DA + call_if 0, Route120_EventScript_1516DA end Route120_EventScript_1516A2:: @ 81516A2 @@ -82,11 +82,11 @@ Route120_MapScript1_1516DF:: @ 81516DF Route120_EventScript_1516EA:: @ 81516EA getplayerxy 0x4000, 0x4001 compare 0x4001, 14 - jumpif 3, Route120_EventScript_151715 + goto_if 3, Route120_EventScript_151715 compare 0x4001, 60 - jumpif 3, Route120_EventScript_151719 + goto_if 3, Route120_EventScript_151719 compare 0x4001, 61 - jumpif 4, Route120_EventScript_151711 + goto_if 4, Route120_EventScript_151711 return Route120_EventScript_151711:: @ 8151711 @@ -99,9 +99,9 @@ Route120_EventScript_151715:: @ 8151715 Route120_EventScript_151719:: @ 8151719 compare 0x4000, 7 - jumpif 3, Route120_EventScript_151735 + goto_if 3, Route120_EventScript_151735 compare 0x4000, 19 - jumpif 3, Route120_EventScript_151715 + goto_if 3, Route120_EventScript_151715 goto Route120_EventScript_151735 end @@ -114,12 +114,12 @@ Route120_EventScript_151739:: @ 8151739 faceplayer checkdailyflags checkflag 2254 - jumpeq Route120_EventScript_151837 + goto_if_eq Route120_EventScript_151837 msgbox Route120_Text_1C58F1, 5 compare RESULT, 1 - callif 1, Route120_EventScript_151841 + call_if 1, Route120_EventScript_151841 compare RESULT, 0 - callif 1, Route120_EventScript_15184A + call_if 1, Route120_EventScript_15184A specialval RESULT, GetPlayerTrainerIdOnesDigit switch RESULT case 0, Route120_EventScript_1517DC @@ -162,7 +162,7 @@ Route120_EventScript_151808:: @ 8151808 Route120_EventScript_151813:: @ 8151813 giveitem 0x8004 compare RESULT, 0 - jumpeq Route120_EventScript_1A029B + goto_if_eq Route120_EventScript_1A029B setflag 2254 msgbox Route120_Text_1C5A0B, 4 release @@ -185,10 +185,10 @@ Route120_EventScript_151853:: @ 8151853 lock faceplayer checkflag 290 - jumpeq Route120_EventScript_151884 + goto_if_eq Route120_EventScript_151884 msgbox Route120_Text_171827, 5 compare RESULT, 0 - jumpeq Route120_EventScript_151877 + goto_if_eq Route120_EventScript_151877 goto Route120_EventScript_15189D end @@ -201,7 +201,7 @@ Route120_EventScript_151877:: @ 8151877 Route120_EventScript_151884:: @ 8151884 msgbox Route120_Text_17196F, 5 compare RESULT, 0 - jumpeq Route120_EventScript_151877 + goto_if_eq Route120_EventScript_151877 goto Route120_EventScript_15189D end @@ -209,9 +209,9 @@ Route120_EventScript_15189D:: @ 815189D msgbox Route120_Text_1719A0, 4 closebutton compare FACING, 2 - callif 1, Route120_EventScript_15197F + call_if 1, Route120_EventScript_15197F compare FACING, 3 - callif 1, Route120_EventScript_15198A + call_if 1, Route120_EventScript_15198A move 31, Route120_Movement_1A083F waitmove 0 pause 20 @@ -294,7 +294,7 @@ Route120_EventScript_1519CA:: @ 81519CA trainerbattle 0, OPPONENT_ROBERT_1, 0, Route120_Text_1BF07E, Route120_Text_1BF0A5 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route120_EventScript_1519F1 + goto_if_eq Route120_EventScript_1519F1 msgbox Route120_Text_1BF0C3, 6 end @@ -317,7 +317,7 @@ Route120_EventScript_151A36:: @ 8151A36 trainerbattle 0, OPPONENT_BRANDON_1, 0, Route120_Text_1BF32B, Route120_Text_1BF36B specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route120_EventScript_151A5D + goto_if_eq Route120_EventScript_151A5D msgbox Route120_Text_1BF38D, 6 end diff --git a/data/scripts/maps/Route121.inc b/data/scripts/maps/Route121.inc index e1aaec716..c87774cb8 100644 --- a/data/scripts/maps/Route121.inc +++ b/data/scripts/maps/Route121.inc @@ -75,7 +75,7 @@ Route121_EventScript_151B89:: @ 8151B89 trainerbattle 0, OPPONENT_WALTER_1, 0, Route121_Text_1BFA1B, Route121_Text_1BFA8C specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route121_EventScript_151BB0 + goto_if_eq Route121_EventScript_151BB0 msgbox Route121_Text_1BFA9D, 6 end @@ -103,7 +103,7 @@ Route121_EventScript_151C14:: @ 8151C14 trainerbattle 0, OPPONENT_JESSICA_1, 0, Route121_Text_1BFE51, Route121_Text_1BFE80 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route121_EventScript_151C3B + goto_if_eq Route121_EventScript_151C3B msgbox Route121_Text_1BFEAE, 6 end diff --git a/data/scripts/maps/Route121_SafariZoneEntrance.inc b/data/scripts/maps/Route121_SafariZoneEntrance.inc index 6850cdeb2..3724e9aeb 100644 --- a/data/scripts/maps/Route121_SafariZoneEntrance.inc +++ b/data/scripts/maps/Route121_SafariZoneEntrance.inc @@ -35,7 +35,7 @@ Route121_SafariZoneEntrance_EventScript_15C35A:: @ 815C35A faceplayer msgbox Route121_SafariZoneEntrance_Text_1C3704, 5 compare RESULT, 1 - jumpeq Route121_SafariZoneEntrance_EventScript_15C379 + goto_if_eq Route121_SafariZoneEntrance_EventScript_15C379 msgbox Route121_SafariZoneEntrance_Text_1C373C, 4 release end @@ -53,7 +53,7 @@ Route121_SafariZoneEntrance_EventScript_15C383:: @ 815C383 nop msgbox Route121_SafariZoneEntrance_Text_1C3832, 5 compare RESULT, 1 - jumpeq Route121_SafariZoneEntrance_EventScript_15C3B3 + goto_if_eq Route121_SafariZoneEntrance_EventScript_15C3B3 msgbox Route121_SafariZoneEntrance_Text_1C3895, 4 goto Route121_SafariZoneEntrance_EventScript_15C46C end @@ -61,11 +61,11 @@ Route121_SafariZoneEntrance_EventScript_15C383:: @ 815C383 Route121_SafariZoneEntrance_EventScript_15C3B3:: @ 815C3B3 checkitem ITEM_POKEBLOCK_CASE, 1 compare RESULT, 0 - jumpeq Route121_SafariZoneEntrance_EventScript_15C450 + goto_if_eq Route121_SafariZoneEntrance_EventScript_15C450 call Route121_SafariZoneEntrance_EventScript_15C425 checkmoney 0x1f4, 0 compare RESULT, 0 - jumpeq Route121_SafariZoneEntrance_EventScript_15C45E + goto_if_eq Route121_SafariZoneEntrance_EventScript_15C45E msgbox Route121_SafariZoneEntrance_Text_1C38D9, 4 paymoney 0x1f4, 0 updatemoney 0, 0 @@ -89,10 +89,10 @@ Route121_SafariZoneEntrance_EventScript_15C3B3:: @ 815C3B3 Route121_SafariZoneEntrance_EventScript_15C425:: @ 815C425 countpokemon compare RESULT, 6 - jumpif 5, Route121_SafariZoneEntrance_EventScript_15C44F + goto_if 5, Route121_SafariZoneEntrance_EventScript_15C44F specialval RESULT, CheckFreePokemonStorageSpace compare RESULT, 1 - jumpeq Route121_SafariZoneEntrance_EventScript_15C44F + goto_if_eq Route121_SafariZoneEntrance_EventScript_15C44F msgbox Route121_SafariZoneEntrance_Text_1C39A3, 4 goto Route121_SafariZoneEntrance_EventScript_15C46C end diff --git a/data/scripts/maps/Route123.inc b/data/scripts/maps/Route123.inc index 891a395f0..395eaa7c3 100644 --- a/data/scripts/maps/Route123.inc +++ b/data/scripts/maps/Route123.inc @@ -10,15 +10,15 @@ Route123_EventScript_151C5D:: @ 8151C5D lock faceplayer checkflag 232 - jumpeq Route123_EventScript_151CAC + goto_if_eq Route123_EventScript_151CAC msgbox Route123_Text_171D83, 4 special IsGrassTypeInParty compare RESULT, 0 - jumpeq Route123_EventScript_151CAA + goto_if_eq Route123_EventScript_151CAA msgbox Route123_Text_171DC2, 4 giveitem ITEM_TM19 compare RESULT, 0 - jumpeq Route123_EventScript_1A029B + goto_if_eq Route123_EventScript_1A029B setflag 232 msgbox Route123_Text_171E34, 4 release @@ -64,7 +64,7 @@ Route123_EventScript_151D16:: @ 8151D16 trainerbattle 0, OPPONENT_CAMERON_1, 0, Route123_Text_1C013F, Route123_Text_1C01A3 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route123_EventScript_151D3D + goto_if_eq Route123_EventScript_151D3D msgbox Route123_Text_1C01B1, 6 end @@ -77,7 +77,7 @@ Route123_EventScript_151D54:: @ 8151D54 trainerbattle 0, OPPONENT_JACKI_1, 0, Route123_Text_1C028C, Route123_Text_1C0303 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route123_EventScript_151D7B + goto_if_eq Route123_EventScript_151D7B msgbox Route123_Text_1C030F, 6 end diff --git a/data/scripts/maps/Route123_BerryMastersHouse.inc b/data/scripts/maps/Route123_BerryMastersHouse.inc index 18e94034d..4f7bad5f9 100644 --- a/data/scripts/maps/Route123_BerryMastersHouse.inc +++ b/data/scripts/maps/Route123_BerryMastersHouse.inc @@ -11,14 +11,14 @@ Route123_BerryMastersHouse_EventScript_1639E9:: @ 81639E9 faceplayer checkdailyflags checkflag 2253 - jumpeq Route123_BerryMastersHouse_EventScript_163A5A + goto_if_eq Route123_BerryMastersHouse_EventScript_163A5A msgbox Route123_BerryMastersHouse_Text_1C5BC4, 4 random 10 addvar RESULT, 20 addvar RESULT, 133 giveitem RESULT compare RESULT, 0 - jumpeq Route123_BerryMastersHouse_EventScript_1A029B + goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 2253 msgbox Route123_BerryMastersHouse_Text_1C5C66, 4 random 10 @@ -26,7 +26,7 @@ Route123_BerryMastersHouse_EventScript_1639E9:: @ 81639E9 addvar RESULT, 133 giveitem RESULT compare RESULT, 0 - jumpeq Route123_BerryMastersHouse_EventScript_1A029B + goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B msgbox Route123_BerryMastersHouse_Text_1C5C83, 4 release end @@ -41,16 +41,16 @@ Route123_BerryMastersHouse_EventScript_163A64:: @ 8163A64 faceplayer checkdailyflags checkflag 2257 - jumpeq Route123_BerryMastersHouse_EventScript_163C13 + goto_if_eq Route123_BerryMastersHouse_EventScript_163C13 msgbox Route123_BerryMastersHouse_Text_1C5D24, 4 setvar 0x8004, 13 call Route123_BerryMastersHouse_EventScript_1A00F3 lock faceplayer compare RESULT, 1 - jumpeq Route123_BerryMastersHouse_EventScript_163AAD + goto_if_eq Route123_BerryMastersHouse_EventScript_163AAD compare RESULT, 0 - jumpeq Route123_BerryMastersHouse_EventScript_163A9B + goto_if_eq Route123_BerryMastersHouse_EventScript_163A9B end Route123_BerryMastersHouse_EventScript_163A9B:: @ 8163A9B @@ -61,17 +61,17 @@ Route123_BerryMastersHouse_EventScript_163A9B:: @ 8163A9B Route123_BerryMastersHouse_EventScript_163AAD:: @ 8163AAD compare 0x8004, 0 - jumpeq Route123_BerryMastersHouse_EventScript_163AF0 + goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 compare 0x8004, 1 - jumpeq Route123_BerryMastersHouse_EventScript_163B1E + goto_if_eq Route123_BerryMastersHouse_EventScript_163B1E compare 0x8004, 2 - jumpeq Route123_BerryMastersHouse_EventScript_163B4F + goto_if_eq Route123_BerryMastersHouse_EventScript_163B4F compare 0x8004, 3 - jumpeq Route123_BerryMastersHouse_EventScript_163B80 + goto_if_eq Route123_BerryMastersHouse_EventScript_163B80 compare 0x8004, 4 - jumpeq Route123_BerryMastersHouse_EventScript_163BB1 + goto_if_eq Route123_BerryMastersHouse_EventScript_163BB1 compare 0x8004, 5 - jumpeq Route123_BerryMastersHouse_EventScript_163BE2 + goto_if_eq Route123_BerryMastersHouse_EventScript_163BE2 end Route123_BerryMastersHouse_EventScript_163AF0:: @ 8163AF0 @@ -80,62 +80,62 @@ Route123_BerryMastersHouse_EventScript_163AF0:: @ 8163AF0 addvar RESULT, 133 giveitem RESULT compare RESULT, 0 - jumpeq Route123_BerryMastersHouse_EventScript_1A029B + goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B goto Route123_BerryMastersHouse_EventScript_163C1D release end Route123_BerryMastersHouse_EventScript_163B1E:: @ 8163B1E checkflag 248 - jumpeq Route123_BerryMastersHouse_EventScript_163AF0 + goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_SPELON_BERRY compare RESULT, 0 - jumpeq Route123_BerryMastersHouse_EventScript_1A029B + goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 248 goto Route123_BerryMastersHouse_EventScript_163C1D end Route123_BerryMastersHouse_EventScript_163B4F:: @ 8163B4F checkflag 249 - jumpeq Route123_BerryMastersHouse_EventScript_163AF0 + goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_PAMTRE_BERRY compare RESULT, 0 - jumpeq Route123_BerryMastersHouse_EventScript_1A029B + goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 249 goto Route123_BerryMastersHouse_EventScript_163C1D end Route123_BerryMastersHouse_EventScript_163B80:: @ 8163B80 checkflag 250 - jumpeq Route123_BerryMastersHouse_EventScript_163AF0 + goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_WATMEL_BERRY compare RESULT, 0 - jumpeq Route123_BerryMastersHouse_EventScript_1A029B + goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 250 goto Route123_BerryMastersHouse_EventScript_163C1D end Route123_BerryMastersHouse_EventScript_163BB1:: @ 8163BB1 checkflag 251 - jumpeq Route123_BerryMastersHouse_EventScript_163AF0 + goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_DURIN_BERRY compare RESULT, 0 - jumpeq Route123_BerryMastersHouse_EventScript_1A029B + goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 251 goto Route123_BerryMastersHouse_EventScript_163C1D end Route123_BerryMastersHouse_EventScript_163BE2:: @ 8163BE2 checkflag 252 - jumpeq Route123_BerryMastersHouse_EventScript_163AF0 + goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_BELUE_BERRY compare RESULT, 0 - jumpeq Route123_BerryMastersHouse_EventScript_1A029B + goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 252 goto Route123_BerryMastersHouse_EventScript_163C1D end diff --git a/data/scripts/maps/Route124.inc b/data/scripts/maps/Route124.inc index 68f17b12a..a60b29b99 100644 --- a/data/scripts/maps/Route124.inc +++ b/data/scripts/maps/Route124.inc @@ -4,7 +4,7 @@ Route124_MapScripts:: @ 8151DDF Route124_MapScript1_151DE5:: @ 8151DE5 checkflag 2090 - callif 1, Route124_EventScript_1A02C1 + call_if 1, Route124_EventScript_1A02C1 end Route124_EventScript_151DEF:: @ 8151DEF @@ -25,7 +25,7 @@ Route124_EventScript_151E26:: @ 8151E26 trainerbattle 0, OPPONENT_JENNY_1, 0, Route124_Text_1C07B4, Route124_Text_1C07F9 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route124_EventScript_151E4D + goto_if_eq Route124_EventScript_151E4D msgbox Route124_Text_1C080E, 6 end @@ -48,7 +48,7 @@ Route124_EventScript_151E92:: @ 8151E92 trainerbattle 4, OPPONENT_RITA_AND_SAM_1, 0, Route124_Text_1C0ABD, Route124_Text_1C0B36, Route124_Text_1C0BC8 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route124_EventScript_151EBD + goto_if_eq Route124_EventScript_151EBD msgbox Route124_Text_1C0B72, 6 end @@ -61,7 +61,7 @@ Route124_EventScript_151ED8:: @ 8151ED8 trainerbattle 4, OPPONENT_RITA_AND_SAM_1, 0, Route124_Text_1C0C0E, Route124_Text_1C0C4F, Route124_Text_1C0CE0 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route124_EventScript_151F03 + goto_if_eq Route124_EventScript_151F03 msgbox Route124_Text_1C0C7F, 6 end diff --git a/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc b/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc index 2d0d624c0..b3e91e43c 100644 --- a/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc +++ b/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc @@ -10,7 +10,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_163E04:: @ 8163E04 lock faceplayer checkflag 217 - jumpeq Route124_DivingTreasureHuntersHouse_EventScript_163E20 + goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_163E20 msgbox Route124_DivingTreasureHuntersHouse_Text_19F416, 4 setflag 217 goto Route124_DivingTreasureHuntersHouse_EventScript_163E2E @@ -24,7 +24,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_163E20:: @ 8163E20 Route124_DivingTreasureHuntersHouse_EventScript_163E2E:: @ 8163E2E call Route124_DivingTreasureHuntersHouse_EventScript_163E44 compare 0x4001, 0 - jumpeq Route124_DivingTreasureHuntersHouse_EventScript_164329 + goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_164329 goto Route124_DivingTreasureHuntersHouse_EventScript_163EA2 end @@ -32,16 +32,16 @@ Route124_DivingTreasureHuntersHouse_EventScript_163E44:: @ 8163E44 setvar 0x4001, 0 checkitem ITEM_RED_SHARD, 1 compare RESULT, 1 - callif 1, Route124_DivingTreasureHuntersHouse_EventScript_163E8A + call_if 1, Route124_DivingTreasureHuntersHouse_EventScript_163E8A checkitem ITEM_YELLOW_SHARD, 1 compare RESULT, 1 - callif 1, Route124_DivingTreasureHuntersHouse_EventScript_163E90 + call_if 1, Route124_DivingTreasureHuntersHouse_EventScript_163E90 checkitem ITEM_BLUE_SHARD, 1 compare RESULT, 1 - callif 1, Route124_DivingTreasureHuntersHouse_EventScript_163E96 + call_if 1, Route124_DivingTreasureHuntersHouse_EventScript_163E96 checkitem ITEM_GREEN_SHARD, 1 compare RESULT, 1 - callif 1, Route124_DivingTreasureHuntersHouse_EventScript_163E9C + call_if 1, Route124_DivingTreasureHuntersHouse_EventScript_163E9C return Route124_DivingTreasureHuntersHouse_EventScript_163E8A:: @ 8163E8A @@ -248,13 +248,13 @@ Route124_DivingTreasureHuntersHouse_EventScript_164292:: @ 8164292 bufferitem 1, 0x8009 msgbox Route124_DivingTreasureHuntersHouse_Text_19F5E0, 5 compare RESULT, 0 - jumpeq Route124_DivingTreasureHuntersHouse_EventScript_16431F + goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_16431F checkitemspace 0x8009, 1 compare RESULT, 1 - jumpeq Route124_DivingTreasureHuntersHouse_EventScript_1642D3 + goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_1642D3 checkitem 0x8008, 2 compare RESULT, 0 - jumpeq Route124_DivingTreasureHuntersHouse_EventScript_1642D3 + goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_1642D3 goto Route124_DivingTreasureHuntersHouse_EventScript_164315 end @@ -264,10 +264,10 @@ Route124_DivingTreasureHuntersHouse_EventScript_1642D3:: @ 81642D3 msgbox Route124_DivingTreasureHuntersHouse_Text_19F606, 4 call Route124_DivingTreasureHuntersHouse_EventScript_163E44 compare 0x4001, 0 - jumpeq Route124_DivingTreasureHuntersHouse_EventScript_164333 + goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_164333 msgbox Route124_DivingTreasureHuntersHouse_Text_19F629, 5 compare RESULT, 1 - jumpeq Route124_DivingTreasureHuntersHouse_EventScript_163EB0 + goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_163EB0 goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end diff --git a/data/scripts/maps/Route125.inc b/data/scripts/maps/Route125.inc index a5d2457d5..045a55a11 100644 --- a/data/scripts/maps/Route125.inc +++ b/data/scripts/maps/Route125.inc @@ -4,7 +4,7 @@ Route125_MapScripts:: @ 8151F1E Route125_MapScript1_151F24:: @ 8151F24 checkflag 2090 - callif 1, Route125_EventScript_1A02C1 + call_if 1, Route125_EventScript_1A02C1 end Route125_EventScript_151F2E:: @ 8151F2E @@ -31,7 +31,7 @@ Route125_EventScript_151F8A:: @ 8151F8A trainerbattle 0, OPPONENT_ERNEST_1, 0, Route125_Text_1C11AF, Route125_Text_1C11ED specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route125_EventScript_151FB1 + goto_if_eq Route125_EventScript_151FB1 msgbox Route125_Text_1C1208, 6 end diff --git a/data/scripts/maps/Route126.inc b/data/scripts/maps/Route126.inc index f3d1a77f9..729922681 100644 --- a/data/scripts/maps/Route126.inc +++ b/data/scripts/maps/Route126.inc @@ -4,7 +4,7 @@ Route126_MapScripts:: @ 8151FFE Route126_MapScript1_152004:: @ 8152004 checkflag 2090 - callif 1, Route126_EventScript_1A02C1 + call_if 1, Route126_EventScript_1A02C1 end Route126_EventScript_15200E:: @ 815200E diff --git a/data/scripts/maps/Route127.inc b/data/scripts/maps/Route127.inc index b4461b253..284d1fbd4 100644 --- a/data/scripts/maps/Route127.inc +++ b/data/scripts/maps/Route127.inc @@ -4,7 +4,7 @@ Route127_MapScripts:: @ 815206A Route127_MapScript1_152070:: @ 8152070 checkflag 2090 - callif 1, Route127_EventScript_1A02C1 + call_if 1, Route127_EventScript_1A02C1 end Route127_EventScript_15207A:: @ 815207A diff --git a/data/scripts/maps/Route128.inc b/data/scripts/maps/Route128.inc index 011591400..7db99f7b3 100644 --- a/data/scripts/maps/Route128.inc +++ b/data/scripts/maps/Route128.inc @@ -5,7 +5,7 @@ Route128_MapScripts:: @ 815211B Route128_MapScript1_152126:: @ 8152126 checkflag 2090 - callif 1, Route128_EventScript_1A02C1 + call_if 1, Route128_EventScript_1A02C1 call Route128_EventScript_1A0196 end @@ -184,7 +184,7 @@ Route128_EventScript_1522A4:: @ 81522A4 trainerbattle 0, OPPONENT_ISAIAH_1, 0, Route128_Text_1C1C67, Route128_Text_1C1C95 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route128_EventScript_1522CB + goto_if_eq Route128_EventScript_1522CB msgbox Route128_Text_1C1CC3, 6 end @@ -197,7 +197,7 @@ Route128_EventScript_1522E2:: @ 81522E2 trainerbattle 0, OPPONENT_KATELYN_1, 0, Route128_Text_1C1DB0, Route128_Text_1C1E25 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq Route128_EventScript_152309 + goto_if_eq Route128_EventScript_152309 msgbox Route128_Text_1C1E4A, 6 end diff --git a/data/scripts/maps/Route130.inc b/data/scripts/maps/Route130.inc index bac6728a7..2c93c1bd6 100644 --- a/data/scripts/maps/Route130.inc +++ b/data/scripts/maps/Route130.inc @@ -5,7 +5,7 @@ Route130_MapScripts:: @ 81523C2 Route130_MapScript1_1523C8:: @ 81523C8 specialval RESULT, IsMirageIslandPresent compare RESULT, 1 - jumpeq Route130_EventScript_15240C + goto_if_eq Route130_EventScript_15240C setflag 17 setflag 18 setflag 19 diff --git a/data/scripts/maps/Route131.inc b/data/scripts/maps/Route131.inc index 81cb7dc02..124788a17 100644 --- a/data/scripts/maps/Route131.inc +++ b/data/scripts/maps/Route131.inc @@ -4,7 +4,7 @@ Route131_MapScripts:: @ 815243E Route131_MapScript1_152444:: @ 8152444 checkflag 2052 - callif 1, Route131_EventScript_15244E + call_if 1, Route131_EventScript_15244E end Route131_EventScript_15244E:: @ 815244E diff --git a/data/scripts/maps/RustboroCity.inc b/data/scripts/maps/RustboroCity.inc index 77f0a5f6f..13a4ce265 100644 --- a/data/scripts/maps/RustboroCity.inc +++ b/data/scripts/maps/RustboroCity.inc @@ -12,7 +12,7 @@ RustboroCity_EventScript_14C386:: @ 814C386 lock faceplayer checkflag 142 - jumpeq RustboroCity_EventScript_14C39B + goto_if_eq RustboroCity_EventScript_14C39B msgbox RustboroCity_Text_16689D, 4 release end @@ -37,7 +37,7 @@ RustboroCity_EventScript_14C3BA:: @ 814C3BA lock faceplayer checkflag 2055 - jumpeq RustboroCity_EventScript_14C3CF + goto_if_eq RustboroCity_EventScript_14C3CF msgbox RustboroCity_Text_16696D, 4 release end @@ -51,7 +51,7 @@ RustboroCity_EventScript_14C3D9:: @ 814C3D9 lock faceplayer checkflag 188 - jumpeq RustboroCity_EventScript_14C3EE + goto_if_eq RustboroCity_EventScript_14C3EE msgbox RustboroCity_Text_166B86, 4 release end @@ -327,7 +327,7 @@ RustboroCity_EventScript_14C5FF:: @ 814C5FF lock faceplayer checkflag 143 - jumpeq RustboroCity_EventScript_14C614 + goto_if_eq RustboroCity_EventScript_14C614 msgbox RustboroCity_Text_166F6B, 4 release end @@ -364,13 +364,13 @@ RustboroCity_EventScript_14C644:: @ 814C644 RustboroCity_EventScript_14C650:: @ 814C650 compare 0x4001, 0 - callif 1, RustboroCity_EventScript_14C691 + call_if 1, RustboroCity_EventScript_14C691 compare 0x4001, 1 - callif 1, RustboroCity_EventScript_14C6BD + call_if 1, RustboroCity_EventScript_14C6BD compare 0x4001, 2 - callif 1, RustboroCity_EventScript_14C6E9 + call_if 1, RustboroCity_EventScript_14C6E9 compare 0x4001, 3 - callif 1, RustboroCity_EventScript_14C715 + call_if 1, RustboroCity_EventScript_14C715 setflag 159 setvar 0x405a, 3 moveoffscreen 9 @@ -458,19 +458,19 @@ RustboroCity_EventScript_14C771:: @ 814C771 RustboroCity_EventScript_14C77D:: @ 814C77D compare 0x4001, 0 - callif 1, RustboroCity_EventScript_14C7FE + call_if 1, RustboroCity_EventScript_14C7FE compare 0x4001, 1 - callif 1, RustboroCity_EventScript_14C82A + call_if 1, RustboroCity_EventScript_14C82A compare 0x4001, 2 - callif 1, RustboroCity_EventScript_14C856 + call_if 1, RustboroCity_EventScript_14C856 compare 0x4001, 3 - callif 1, RustboroCity_EventScript_14C882 + call_if 1, RustboroCity_EventScript_14C882 compare 0x4001, 4 - callif 1, RustboroCity_EventScript_14C8B8 + call_if 1, RustboroCity_EventScript_14C8B8 msgbox RustboroCity_Text_166FB4, 4 giveitem ITEM_GREAT_BALL compare RESULT, 0 - callif 1, RustboroCity_EventScript_14C7F5 + call_if 1, RustboroCity_EventScript_14C7F5 msgbox RustboroCity_Text_16707F, 4 closebutton setflag 144 @@ -550,12 +550,12 @@ RustboroCity_EventScript_14C8DA:: @ 814C8DA lock faceplayer checkflag 288 - jumpeq RustboroCity_EventScript_14C917 + goto_if_eq RustboroCity_EventScript_14C917 checkgender compare RESULT, 0 - jumpeq RustboroCity_EventScript_14C8FD + goto_if_eq RustboroCity_EventScript_14C8FD compare RESULT, 1 - jumpeq RustboroCity_EventScript_14C90A + goto_if_eq RustboroCity_EventScript_14C90A end RustboroCity_EventScript_14C8FD:: @ 814C8FD @@ -573,9 +573,9 @@ RustboroCity_EventScript_14C90A:: @ 814C90A RustboroCity_EventScript_14C917:: @ 814C917 checkgender compare RESULT, 0 - jumpeq RustboroCity_EventScript_14C92F + goto_if_eq RustboroCity_EventScript_14C92F compare RESULT, 1 - jumpeq RustboroCity_EventScript_14C939 + goto_if_eq RustboroCity_EventScript_14C939 end RustboroCity_EventScript_14C92F:: @ 814C92F diff --git a/data/scripts/maps/RustboroCity_CuttersHouse.inc b/data/scripts/maps/RustboroCity_CuttersHouse.inc index d400de1ef..3e98746f3 100644 --- a/data/scripts/maps/RustboroCity_CuttersHouse.inc +++ b/data/scripts/maps/RustboroCity_CuttersHouse.inc @@ -5,7 +5,7 @@ RustboroCity_CuttersHouse_EventScript_157D27:: @ 8157D27 lock faceplayer checkflag 137 - jumpeq RustboroCity_CuttersHouse_EventScript_157D53 + goto_if_eq RustboroCity_CuttersHouse_EventScript_157D53 msgbox RustboroCity_CuttersHouse_Text_18509C, 4 giveitem ITEM_HM01 setflag 137 diff --git a/data/scripts/maps/RustboroCity_DevonCorp_1F.inc b/data/scripts/maps/RustboroCity_DevonCorp_1F.inc index 97a59257f..f5fb02c93 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_1F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_1F.inc @@ -4,7 +4,7 @@ RustboroCity_DevonCorp_1F_MapScripts:: @ 8157406 RustboroCity_DevonCorp_1F_MapScript1_15740C:: @ 815740C checkflag 144 - callif 0, RustboroCity_DevonCorp_1F_EventScript_157416 + call_if 0, RustboroCity_DevonCorp_1F_EventScript_157416 end RustboroCity_DevonCorp_1F_EventScript_157416:: @ 8157416 @@ -16,9 +16,9 @@ RustboroCity_DevonCorp_1F_EventScript_157422:: @ 8157422 lock faceplayer checkflag 144 - jumpeq RustboroCity_DevonCorp_1F_EventScript_15744A + goto_if_eq RustboroCity_DevonCorp_1F_EventScript_15744A checkflag 142 - jumpeq RustboroCity_DevonCorp_1F_EventScript_157440 + goto_if_eq RustboroCity_DevonCorp_1F_EventScript_157440 msgbox RustboroCity_DevonCorp_1F_Text_1829A4, 4 release end @@ -37,11 +37,11 @@ RustboroCity_DevonCorp_1F_EventScript_157454:: @ 8157454 lock faceplayer checkflag 144 - jumpeq RustboroCity_DevonCorp_1F_EventScript_15747B + goto_if_eq RustboroCity_DevonCorp_1F_EventScript_15747B checkflag 143 - jumpeq RustboroCity_DevonCorp_1F_EventScript_157485 + goto_if_eq RustboroCity_DevonCorp_1F_EventScript_157485 checkflag 142 - jumpeq RustboroCity_DevonCorp_1F_EventScript_157485 + goto_if_eq RustboroCity_DevonCorp_1F_EventScript_157485 msgbox RustboroCity_DevonCorp_1F_Text_182AF0, 4 release end @@ -60,11 +60,11 @@ RustboroCity_DevonCorp_1F_EventScript_15748F:: @ 815748F lock faceplayer checkflag 144 - jumpeq RustboroCity_DevonCorp_1F_EventScript_1574B6 + goto_if_eq RustboroCity_DevonCorp_1F_EventScript_1574B6 checkflag 143 - jumpeq RustboroCity_DevonCorp_1F_EventScript_1574C0 + goto_if_eq RustboroCity_DevonCorp_1F_EventScript_1574C0 checkflag 142 - jumpeq RustboroCity_DevonCorp_1F_EventScript_1574C0 + goto_if_eq RustboroCity_DevonCorp_1F_EventScript_1574C0 msgbox RustboroCity_DevonCorp_1F_Text_1828EE, 4 release end diff --git a/data/scripts/maps/RustboroCity_DevonCorp_2F.inc b/data/scripts/maps/RustboroCity_DevonCorp_2F.inc index e35015b3e..0c604c513 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_2F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_2F.inc @@ -4,7 +4,7 @@ RustboroCity_DevonCorp_2F_MapScripts:: @ 81574CA RustboroCity_DevonCorp_2F_MapScript1_1574D0:: @ 81574D0 compare 0x40c4, 1 - callif 1, RustboroCity_DevonCorp_2F_EventScript_1574DC + call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC end RustboroCity_DevonCorp_2F_EventScript_1574DC:: @ 81574DC @@ -15,7 +15,7 @@ RustboroCity_DevonCorp_2F_EventScript_1574E2:: @ 81574E2 lock faceplayer compare 0x40c4, 1 - callif 1, RustboroCity_DevonCorp_2F_EventScript_1574DC + call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC msgbox RustboroCity_DevonCorp_2F_Text_182B81, 4 release end @@ -24,9 +24,9 @@ RustboroCity_DevonCorp_2F_EventScript_1574F9:: @ 81574F9 lock faceplayer compare 0x40c4, 1 - callif 1, RustboroCity_DevonCorp_2F_EventScript_1574DC + call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC checkflag 287 - jumpeq RustboroCity_DevonCorp_2F_EventScript_157519 + goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157519 msgbox RustboroCity_DevonCorp_2F_Text_182BD8, 4 release end @@ -40,9 +40,9 @@ RustboroCity_DevonCorp_2F_EventScript_157523:: @ 8157523 lock faceplayer compare 0x40c4, 1 - callif 1, RustboroCity_DevonCorp_2F_EventScript_1574DC + call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC checkflag 188 - jumpeq RustboroCity_DevonCorp_2F_EventScript_157543 + goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157543 msgbox RustboroCity_DevonCorp_2F_Text_182D2A, 4 release end @@ -56,7 +56,7 @@ RustboroCity_DevonCorp_2F_EventScript_15754D:: @ 815754D lock faceplayer compare 0x40c4, 1 - callif 1, RustboroCity_DevonCorp_2F_EventScript_1574DC + call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC msgbox RustboroCity_DevonCorp_2F_Text_182E6B, 4 release end @@ -65,16 +65,16 @@ RustboroCity_DevonCorp_2F_EventScript_157564:: @ 8157564 lock faceplayer compare 0x40c4, 2 - jumpeq RustboroCity_DevonCorp_2F_EventScript_15764A + goto_if_eq RustboroCity_DevonCorp_2F_EventScript_15764A compare 0x40c4, 1 - jumpeq RustboroCity_DevonCorp_2F_EventScript_157640 + goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157640 msgbox RustboroCity_DevonCorp_2F_Text_182ED5, 4 checkitem ITEM_ROOT_FOSSIL, 1 compare RESULT, 1 - jumpeq RustboroCity_DevonCorp_2F_EventScript_1575A6 + goto_if_eq RustboroCity_DevonCorp_2F_EventScript_1575A6 checkitem ITEM_CLAW_FOSSIL, 1 compare RESULT, 1 - jumpeq RustboroCity_DevonCorp_2F_EventScript_1575EE + goto_if_eq RustboroCity_DevonCorp_2F_EventScript_1575EE release end @@ -87,7 +87,7 @@ RustboroCity_DevonCorp_2F_EventScript_1575A6:: @ 81575A6 waitmove 0 msgbox RustboroCity_DevonCorp_2F_Text_182F35, 5 compare RESULT, 0 - jumpeq RustboroCity_DevonCorp_2F_EventScript_157636 + goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157636 bufferitem 0, ITEM_ROOT_FOSSIL msgbox RustboroCity_DevonCorp_2F_Text_183023, 4 removeitem ITEM_ROOT_FOSSIL, 1 @@ -105,7 +105,7 @@ RustboroCity_DevonCorp_2F_EventScript_1575EE:: @ 81575EE waitmove 0 msgbox RustboroCity_DevonCorp_2F_Text_182F35, 5 compare RESULT, 0 - jumpeq RustboroCity_DevonCorp_2F_EventScript_157636 + goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157636 bufferitem 0, ITEM_CLAW_FOSSIL msgbox RustboroCity_DevonCorp_2F_Text_183023, 4 removeitem ITEM_CLAW_FOSSIL, 1 @@ -126,9 +126,9 @@ RustboroCity_DevonCorp_2F_EventScript_157640:: @ 8157640 RustboroCity_DevonCorp_2F_EventScript_15764A:: @ 815764A compare 0x40c5, 1 - jumpeq RustboroCity_DevonCorp_2F_EventScript_157661 + goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157661 compare 0x40c5, 2 - jumpeq RustboroCity_DevonCorp_2F_EventScript_1576B4 + goto_if_eq RustboroCity_DevonCorp_2F_EventScript_1576B4 end RustboroCity_DevonCorp_2F_EventScript_157661:: @ 8157661 @@ -136,7 +136,7 @@ RustboroCity_DevonCorp_2F_EventScript_157661:: @ 8157661 msgbox RustboroCity_DevonCorp_2F_Text_183124, 4 countpokemon compare RESULT, 6 - jumpeq RustboroCity_DevonCorp_2F_EventScript_157707 + goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157707 copyvar 0x8004, RESULT setvar 0x40c4, 0 setflag 267 @@ -147,7 +147,7 @@ RustboroCity_DevonCorp_2F_EventScript_157661:: @ 8157661 givepokemon SPECIES_LILEEP, 20, ITEM_NONE, 0x0, 0x0, 0 msgbox RustboroCity_DevonCorp_2F_Text_1A1102, 5 compare RESULT, 1 - callif 1, RustboroCity_DevonCorp_2F_EventScript_1A0678 + call_if 1, RustboroCity_DevonCorp_2F_EventScript_1A0678 release end @@ -156,7 +156,7 @@ RustboroCity_DevonCorp_2F_EventScript_1576B4:: @ 81576B4 msgbox RustboroCity_DevonCorp_2F_Text_183124, 4 countpokemon compare RESULT, 6 - jumpeq RustboroCity_DevonCorp_2F_EventScript_157707 + goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157707 copyvar 0x8004, RESULT setvar 0x40c4, 0 setflag 267 @@ -167,7 +167,7 @@ RustboroCity_DevonCorp_2F_EventScript_1576B4:: @ 81576B4 givepokemon SPECIES_ANORITH, 20, ITEM_NONE, 0x0, 0x0, 0 msgbox RustboroCity_DevonCorp_2F_Text_1A1102, 5 compare RESULT, 1 - callif 1, RustboroCity_DevonCorp_2F_EventScript_1A0678 + call_if 1, RustboroCity_DevonCorp_2F_EventScript_1A0678 release end diff --git a/data/scripts/maps/RustboroCity_DevonCorp_3F.inc b/data/scripts/maps/RustboroCity_DevonCorp_3F.inc index 2b749c873..fe39af9c4 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_3F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_3F.inc @@ -6,7 +6,7 @@ RustboroCity_DevonCorp_3F_MapScripts:: @ 8157711 RustboroCity_DevonCorp_3F_MapScript1_157721:: @ 8157721 compare 0x408f, 0 - callif 1, RustboroCity_DevonCorp_3F_EventScript_15772D + call_if 1, RustboroCity_DevonCorp_3F_EventScript_15772D end RustboroCity_DevonCorp_3F_EventScript_15772D:: @ 815772D @@ -147,9 +147,9 @@ RustboroCity_DevonCorp_3F_EventScript_15783B:: @ 815783B lock faceplayer checkflag 272 - jumpeq RustboroCity_DevonCorp_3F_EventScript_15789B + goto_if_eq RustboroCity_DevonCorp_3F_EventScript_15789B checkflag 189 - jumpeq RustboroCity_DevonCorp_3F_EventScript_157864 + goto_if_eq RustboroCity_DevonCorp_3F_EventScript_157864 msgbox RustboroCity_DevonCorp_3F_Text_18351E, 4 closebutton move LAST_TALKED, RustboroCity_DevonCorp_3F_Movement_1A083D @@ -161,7 +161,7 @@ RustboroCity_DevonCorp_3F_EventScript_157864:: @ 8157864 msgbox RustboroCity_DevonCorp_3F_Text_18353E, 4 giveitem ITEM_EXP_SHARE compare RESULT, 0 - jumpeq RustboroCity_DevonCorp_3F_EventScript_1A029B + goto_if_eq RustboroCity_DevonCorp_3F_EventScript_1A029B setflag 272 msgbox RustboroCity_DevonCorp_3F_Text_1835B3, 4 closebutton @@ -182,7 +182,7 @@ RustboroCity_DevonCorp_3F_EventScript_1578B0:: @ 81578B0 lock faceplayer checkflag 256 - jumpeq RustboroCity_DevonCorp_3F_EventScript_1578C5 + goto_if_eq RustboroCity_DevonCorp_3F_EventScript_1578C5 msgbox RustboroCity_DevonCorp_3F_Text_18395C, 4 release end diff --git a/data/scripts/maps/RustboroCity_Flat2_2F.inc b/data/scripts/maps/RustboroCity_Flat2_2F.inc index d6e0c92b3..0dfec5cfa 100644 --- a/data/scripts/maps/RustboroCity_Flat2_2F.inc +++ b/data/scripts/maps/RustboroCity_Flat2_2F.inc @@ -9,11 +9,11 @@ RustboroCity_Flat2_2F_EventScript_157DA0:: @ 8157DA0 lock faceplayer checkflag 213 - jumpeq RustboroCity_Flat2_2F_EventScript_157DCF + goto_if_eq RustboroCity_Flat2_2F_EventScript_157DCF msgbox RustboroCity_Flat2_2F_Text_185461, 4 giveitem ITEM_PREMIER_BALL compare RESULT, 0 - jumpeq RustboroCity_Flat2_2F_EventScript_1A029B + goto_if_eq RustboroCity_Flat2_2F_EventScript_1A029B setflag 213 release end diff --git a/data/scripts/maps/RustboroCity_Gym.inc b/data/scripts/maps/RustboroCity_Gym.inc index 776cb5c0a..6bb33b4dc 100644 --- a/data/scripts/maps/RustboroCity_Gym.inc +++ b/data/scripts/maps/RustboroCity_Gym.inc @@ -4,7 +4,7 @@ RustboroCity_Gym_MapScripts:: @ 81578D8 RustboroCity_Gym_EventScript_1578D9:: @ 81578D9 trainerbattle 1, OPPONENT_ROXANNE, 0, RustboroCity_Gym_Text_183EE5, RustboroCity_Gym_Text_183FC4, RustboroCity_Gym_EventScript_1578FE checkflag 165 - jumpif 0, RustboroCity_Gym_EventScript_15793C + goto_if 0, RustboroCity_Gym_EventScript_15793C msgbox RustboroCity_Gym_Text_184252, 4 release end @@ -21,14 +21,14 @@ RustboroCity_Gym_EventScript_1578FE:: @ 81578FE setvar 0x8008, 1 call RustboroCity_Gym_EventScript_1A01C0 compare 0x4085, 6 - callif 1, RustboroCity_Gym_EventScript_1A00FB + call_if 1, RustboroCity_Gym_EventScript_1A00FB goto RustboroCity_Gym_EventScript_15793C end RustboroCity_Gym_EventScript_15793C:: @ 815793C giveitem ITEM_TM39 compare RESULT, 0 - jumpeq RustboroCity_Gym_EventScript_1A029B + goto_if_eq RustboroCity_Gym_EventScript_1A029B setflag 165 msgbox RustboroCity_Gym_Text_184170, 4 release @@ -48,7 +48,7 @@ RustboroCity_Gym_EventScript_15798E:: @ 815798E lock faceplayer checkflag 1201 - jumpeq RustboroCity_Gym_EventScript_1579A3 + goto_if_eq RustboroCity_Gym_EventScript_1579A3 msgbox RustboroCity_Gym_Text_183A4B, 4 release end @@ -61,14 +61,14 @@ RustboroCity_Gym_EventScript_1579A3:: @ 81579A3 RustboroCity_Gym_EventScript_1579AD:: @ 81579AD lockall checkflag 2055 - jumpeq RustboroCity_Gym_EventScript_1579CD + goto_if_eq RustboroCity_Gym_EventScript_1579CD goto RustboroCity_Gym_EventScript_1579D7 end RustboroCity_Gym_EventScript_1579BD:: @ 81579BD lockall checkflag 2055 - jumpeq RustboroCity_Gym_EventScript_1579CD + goto_if_eq RustboroCity_Gym_EventScript_1579CD goto RustboroCity_Gym_EventScript_1579D7 end diff --git a/data/scripts/maps/RustboroCity_House1.inc b/data/scripts/maps/RustboroCity_House1.inc index 402fff1d3..e45bf2080 100644 --- a/data/scripts/maps/RustboroCity_House1.inc +++ b/data/scripts/maps/RustboroCity_House1.inc @@ -5,24 +5,24 @@ RustboroCity_House1_EventScript_157C7D:: @ 8157C7D lock faceplayer checkflag 153 - jumpeq RustboroCity_House1_EventScript_157D13 + goto_if_eq RustboroCity_House1_EventScript_157D13 setvar 0x8008, 0 copyvar 0x8004, 0x8008 specialval RESULT, sub_804D89C copyvar 0x8009, RESULT msgbox RustboroCity_House1_Text_184EBA, 5 compare RESULT, 0 - jumpeq RustboroCity_House1_EventScript_157CFB + goto_if_eq RustboroCity_House1_EventScript_157CFB special sub_80F9A0C waitstate copyvar 0x800a, 0x8004 compare 0x8004, 255 - jumpeq RustboroCity_House1_EventScript_157CFB + goto_if_eq RustboroCity_House1_EventScript_157CFB copyvar 0x8005, 0x800a specialval RESULT, sub_804DB2C copyvar 0x800b, RESULT comparevars RESULT, 0x8009 - jumpif 5, RustboroCity_House1_EventScript_157D05 + goto_if 5, RustboroCity_House1_EventScript_157D05 copyvar 0x8004, 0x8008 copyvar 0x8005, 0x800a special sub_804DB68 diff --git a/data/scripts/maps/RustboroCity_Mart.inc b/data/scripts/maps/RustboroCity_Mart.inc index 6b4ff3a77..7ee528ade 100644 --- a/data/scripts/maps/RustboroCity_Mart.inc +++ b/data/scripts/maps/RustboroCity_Mart.inc @@ -7,9 +7,9 @@ RustboroCity_Mart_EventScript_157BD4:: @ 8157BD4 message RustboroCity_Mart_Text_1A0BE4 waittext checkflag 287 - jumpif 0, RustboroCity_Mart_EventScript_157BEF + goto_if 0, RustboroCity_Mart_EventScript_157BEF checkflag 287 - jumpeq RustboroCity_Mart_EventScript_157C18 + goto_if_eq RustboroCity_Mart_EventScript_157C18 end RustboroCity_Mart_EventScript_157BEF:: @ 8157BEF diff --git a/data/scripts/maps/RustboroCity_PokemonSchool.inc b/data/scripts/maps/RustboroCity_PokemonSchool.inc index 168c0aaa2..e5a9622fb 100644 --- a/data/scripts/maps/RustboroCity_PokemonSchool.inc +++ b/data/scripts/maps/RustboroCity_PokemonSchool.inc @@ -78,15 +78,15 @@ RustboroCity_PokemonSchool_EventScript_157ACE:: @ 8157ACE lock faceplayer checkflag 275 - jumpeq RustboroCity_PokemonSchool_EventScript_157B34 + goto_if_eq RustboroCity_PokemonSchool_EventScript_157B34 compare FACING, 4 - callif 1, RustboroCity_PokemonSchool_EventScript_157B1E + call_if 1, RustboroCity_PokemonSchool_EventScript_157B1E compare FACING, 3 - callif 1, RustboroCity_PokemonSchool_EventScript_157B29 + call_if 1, RustboroCity_PokemonSchool_EventScript_157B29 msgbox RustboroCity_PokemonSchool_Text_1846A2, 4 giveitem ITEM_QUICK_CLAW compare RESULT, 0 - jumpeq RustboroCity_PokemonSchool_EventScript_1A029B + goto_if_eq RustboroCity_PokemonSchool_EventScript_1A029B closebutton move LAST_TALKED, RustboroCity_PokemonSchool_Movement_1A0845 waitmove 0 diff --git a/data/scripts/maps/RusturfTunnel.inc b/data/scripts/maps/RusturfTunnel.inc index 129bef7c9..bcc612511 100644 --- a/data/scripts/maps/RusturfTunnel.inc +++ b/data/scripts/maps/RusturfTunnel.inc @@ -11,7 +11,7 @@ RusturfTunnel_MapScript2_15C750:: @ 815C750 RusturfTunnel_MapScript1_15C762:: @ 815C762 call RusturfTunnel_EventScript_1A0196 compare 0x409a, 2 - callif 1, RusturfTunnel_EventScript_15C773 + call_if 1, RusturfTunnel_EventScript_15C773 end RusturfTunnel_EventScript_15C773:: @ 815C773 @@ -33,7 +33,7 @@ RusturfTunnel_EventScript_15C799:: @ 815C799 lock faceplayer checkflag 1 - jumpeq RusturfTunnel_EventScript_15C7BC + goto_if_eq RusturfTunnel_EventScript_15C7BC setflag 1 msgbox RusturfTunnel_Text_1944C5, 4 closebutton @@ -53,35 +53,35 @@ RusturfTunnel_EventScript_15C7BC:: @ 815C7BC RusturfTunnel_EventScript_15C7D1:: @ 815C7D1 lockall compare 0x4001, 1 - callif 1, RusturfTunnel_EventScript_15C8CA + call_if 1, RusturfTunnel_EventScript_15C8CA compare 0x4001, 2 - callif 1, RusturfTunnel_EventScript_15C8DF + call_if 1, RusturfTunnel_EventScript_15C8DF compare 0x4001, 3 - callif 1, RusturfTunnel_EventScript_15C8EA + call_if 1, RusturfTunnel_EventScript_15C8EA call RusturfTunnel_EventScript_15C92D msgbox RusturfTunnel_Text_19461D, 4 compare 0x4001, 2 - callif 1, RusturfTunnel_EventScript_15C8EB + call_if 1, RusturfTunnel_EventScript_15C8EB compare 0x4001, 3 - callif 1, RusturfTunnel_EventScript_15C8EB + call_if 1, RusturfTunnel_EventScript_15C8EB giveitem ITEM_HM04 setflag 106 msgbox RusturfTunnel_Text_194693, 4 closebutton compare 0x4001, 1 - callif 1, RusturfTunnel_EventScript_15C880 + call_if 1, RusturfTunnel_EventScript_15C880 compare 0x4001, 2 - callif 1, RusturfTunnel_EventScript_15C892 + call_if 1, RusturfTunnel_EventScript_15C892 compare 0x4001, 3 - callif 1, RusturfTunnel_EventScript_15C8AE + call_if 1, RusturfTunnel_EventScript_15C8AE msgbox RusturfTunnel_Text_194706, 4 closebutton compare 0x4001, 1 - callif 1, RusturfTunnel_EventScript_15C8F7 + call_if 1, RusturfTunnel_EventScript_15C8F7 compare 0x4001, 2 - callif 1, RusturfTunnel_EventScript_15C909 + call_if 1, RusturfTunnel_EventScript_15C909 compare 0x4001, 3 - callif 1, RusturfTunnel_EventScript_15C91B + call_if 1, RusturfTunnel_EventScript_15C91B call RusturfTunnel_EventScript_1A0442 releaseall end diff --git a/data/scripts/maps/SSTidalCorridor.inc b/data/scripts/maps/SSTidalCorridor.inc index a301bb6fe..d076510dc 100644 --- a/data/scripts/maps/SSTidalCorridor.inc +++ b/data/scripts/maps/SSTidalCorridor.inc @@ -42,9 +42,9 @@ SSTidalRooms_EventScript_15FCF9:: @ 815FCF9 gUnknown_0815FD0D:: @ 815FD0D compare 0x40B4, 2 - jumpeq SSTidalCorridor_EventScript_15FD24 + goto_if_eq SSTidalCorridor_EventScript_15FD24 compare 0x40B4, 7 - jumpeq SSTidalCorridor_EventScript_15FD3A + goto_if_eq SSTidalCorridor_EventScript_15FD3A end SSTidalCorridor_EventScript_15FD24:: @ 815FD24 @@ -114,9 +114,9 @@ SSTidalCorridor_EventScript_15FDD6:: @ 815FDD6 lock faceplayer compare 0x40b4, 4 - jumpeq SSTidalCorridor_EventScript_15FDF8 + goto_if_eq SSTidalCorridor_EventScript_15FDF8 compare 0x40b4, 8 - jumpeq SSTidalCorridor_EventScript_15FE17 + goto_if_eq SSTidalCorridor_EventScript_15FE17 msgbox SSTidalCorridor_Text_19913B, 4 release end @@ -125,7 +125,7 @@ SSTidalCorridor_EventScript_15FDF8:: @ 815FDF8 sethealplace 8 msgbox SSTidalCorridor_Text_1991F4, 4 checkflag 260 - callif 1, SSTidalCorridor_EventScript_15FE36 + call_if 1, SSTidalCorridor_EventScript_15FE36 warp LilycoveCity_Harbor, 255, 8, 11 waitstate release @@ -135,7 +135,7 @@ SSTidalCorridor_EventScript_15FE17:: @ 815FE17 sethealplace 4 msgbox SSTidalCorridor_Text_1991F4, 4 checkflag 260 - callif 1, SSTidalCorridor_EventScript_15FE36 + call_if 1, SSTidalCorridor_EventScript_15FE36 warp SlateportCity_Harbor, 255, 8, 11 waitstate release @@ -148,9 +148,9 @@ SSTidalCorridor_EventScript_15FE36:: @ 815FE36 SSTidalCorridor_EventScript_15FE3A:: @ 815FE3A lockall compare 0x40b4, 2 - jumpeq SSTidalCorridor_EventScript_15FE5B + goto_if_eq SSTidalCorridor_EventScript_15FE5B compare 0x40b4, 7 - jumpeq SSTidalCorridor_EventScript_15FE5B + goto_if_eq SSTidalCorridor_EventScript_15FE5B msgbox SSTidalCorridor_Text_199268, 4 releaseall end @@ -164,7 +164,7 @@ SSTidalCorridor_EventScript_15FE60:: @ 815FE60 lock faceplayer checkflag 247 - jumpeq SSTidalCorridor_EventScript_15FE7A + goto_if_eq SSTidalCorridor_EventScript_15FE7A call SSTidalCorridor_EventScript_15FE84 msgbox SSTidalCorridor_Text_199203, 4 release @@ -177,21 +177,21 @@ SSTidalCorridor_EventScript_15FE7A:: @ 815FE7A SSTidalCorridor_EventScript_15FE84:: @ 815FE84 checktrainerflag OPPONENT_PHILLIP - jumpif 0, SSTidalCorridor_EventScript_15FED5 + goto_if 0, SSTidalCorridor_EventScript_15FED5 checktrainerflag OPPONENT_LEONARD - jumpif 0, SSTidalCorridor_EventScript_15FED5 + goto_if 0, SSTidalCorridor_EventScript_15FED5 checktrainerflag OPPONENT_COLTON - jumpif 0, SSTidalCorridor_EventScript_15FED5 + goto_if 0, SSTidalCorridor_EventScript_15FED5 checktrainerflag OPPONENT_TUCKER - jumpif 0, SSTidalCorridor_EventScript_15FED5 + goto_if 0, SSTidalCorridor_EventScript_15FED5 checktrainerflag OPPONENT_THOMAS - jumpif 0, SSTidalCorridor_EventScript_15FED5 + goto_if 0, SSTidalCorridor_EventScript_15FED5 checktrainerflag OPPONENT_LEA_AND_JED - jumpif 0, SSTidalCorridor_EventScript_15FED5 + goto_if 0, SSTidalCorridor_EventScript_15FED5 checktrainerflag OPPONENT_GARRET - jumpif 0, SSTidalCorridor_EventScript_15FED5 + goto_if 0, SSTidalCorridor_EventScript_15FED5 checktrainerflag OPPONENT_ANETTE - jumpif 0, SSTidalCorridor_EventScript_15FED5 + goto_if 0, SSTidalCorridor_EventScript_15FED5 setflag 247 goto SSTidalCorridor_EventScript_15FE7A return diff --git a/data/scripts/maps/SSTidalRooms.inc b/data/scripts/maps/SSTidalRooms.inc index 4d588cd46..aa84b6b48 100644 --- a/data/scripts/maps/SSTidalRooms.inc +++ b/data/scripts/maps/SSTidalRooms.inc @@ -5,11 +5,11 @@ SSTidalRooms_EventScript_15FF06:: @ 815FF06 lock faceplayer checkflag 260 - jumpeq SSTidalRooms_EventScript_15FF3D + goto_if_eq SSTidalRooms_EventScript_15FF3D msgbox SSTidalRooms_Text_199B65, 4 giveitem ITEM_TM49 compare RESULT, 0 - jumpeq SSTidalRooms_EventScript_1A029B + goto_if_eq SSTidalRooms_EventScript_1A029B setflag 260 msgbox SSTidalRooms_Text_199C1A, 4 release diff --git a/data/scripts/maps/SafariZone_Southeast.inc b/data/scripts/maps/SafariZone_Southeast.inc index f0529fbec..9005bef3b 100644 --- a/data/scripts/maps/SafariZone_Southeast.inc +++ b/data/scripts/maps/SafariZone_Southeast.inc @@ -21,7 +21,7 @@ SafariZone_Southeast_EventScript_16004B:: @ 816004B SafariZone_Southeast_MapScript1_160073:: @ 8160073 compare 0x40a4, 2 - callif 1, SafariZone_Southeast_EventScript_16007F + call_if 1, SafariZone_Southeast_EventScript_16007F end SafariZone_Southeast_EventScript_16007F:: @ 816007F @@ -53,10 +53,10 @@ SafariZone_Southeast_EventScript_1600A7:: @ 81600A7 lock faceplayer compare 0x4001, 0 - jumpeq SafariZone_Southeast_EventScript_1600D1 + goto_if_eq SafariZone_Southeast_EventScript_1600D1 msgbox SafariZone_Southeast_Text_1C3A56, 5 compare RESULT, 1 - jumpeq SafariZone_Southeast_EventScript_1600E0 + goto_if_eq SafariZone_Southeast_EventScript_1600E0 msgbox SafariZone_Southeast_Text_1C3A9C, 4 release end diff --git a/data/scripts/maps/SealedChamber_InnerRoom.inc b/data/scripts/maps/SealedChamber_InnerRoom.inc index 76a930dc0..091db022c 100644 --- a/data/scripts/maps/SealedChamber_InnerRoom.inc +++ b/data/scripts/maps/SealedChamber_InnerRoom.inc @@ -7,10 +7,10 @@ SealedChamber_InnerRoom_EventScript_15F1E8:: @ 815F1E8 waitbutton hidebox 0, 0, 29, 19 checkflag 228 - jumpeq SealedChamber_InnerRoom_EventScript_15F247 + goto_if_eq SealedChamber_InnerRoom_EventScript_15F247 specialval RESULT, CheckRelicanthWailord compare RESULT, 0 - jumpeq SealedChamber_InnerRoom_EventScript_15F247 + goto_if_eq SealedChamber_InnerRoom_EventScript_15F247 fadeout 0 playsfx 49 special DoSealedChamberShakingEffect1 diff --git a/data/scripts/maps/SealedChamber_OuterRoom.inc b/data/scripts/maps/SealedChamber_OuterRoom.inc index 83ca4e4df..dfa4777fa 100644 --- a/data/scripts/maps/SealedChamber_OuterRoom.inc +++ b/data/scripts/maps/SealedChamber_OuterRoom.inc @@ -15,7 +15,7 @@ SealedChamber_OuterRoom_MapScript1_15F0E7:: @ 815F0E7 SealedChamber_OuterRoom_MapScript1_15F0EB:: @ 815F0EB checkflag 2127 - callif 0, SealedChamber_OuterRoom_EventScript_15F0F5 + call_if 0, SealedChamber_OuterRoom_EventScript_15F0F5 end SealedChamber_OuterRoom_EventScript_15F0F5:: @ 815F0F5 @@ -110,7 +110,7 @@ SealedChamber_OuterRoom_EventScript_15F1AA:: @ 815F1AA SealedChamber_OuterRoom_EventScript_15F1B8:: @ 815F1B8 lockall checkflag 2127 - jumpeq SealedChamber_OuterRoom_EventScript_15F1CF + goto_if_eq SealedChamber_OuterRoom_EventScript_15F1CF braillemsg SealedChamber_OuterRoom_Braille_1C53B1 waitbutton hidebox 0, 0, 29, 19 diff --git a/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc b/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc index 6238e7f4a..dc2b107e3 100644 --- a/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc @@ -5,7 +5,7 @@ ShoalCave_LowTideEntranceRoom_MapScripts:: @ 815E057 ShoalCave_LowTideEntranceRoom_MapScript1_15E05D:: @ 815E05D special UpdateShoalTideFlag checkflag 2106 - jumpeq ShoalCave_LowTideEntranceRoom_EventScript_15E06E + goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E06E goto ShoalCave_LowTideEntranceRoom_EventScript_15E072 ShoalCave_LowTideEntranceRoom_EventScript_15E06E:: @ 815E06E @@ -21,27 +21,27 @@ ShoalCave_LowTideEntranceRoom_EventScript_15E076:: @ 815E076 faceplayer checkdailyflags checkflag 2143 - callif 1, ShoalCave_LowTideEntranceRoom_EventScript_15E176 + call_if 1, ShoalCave_LowTideEntranceRoom_EventScript_15E176 checkitem ITEM_SHOAL_SALT, 4 compare RESULT, 0 - jumpeq ShoalCave_LowTideEntranceRoom_EventScript_15E138 + goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E138 checkitem ITEM_SHOAL_SHELL, 4 compare RESULT, 0 - jumpeq ShoalCave_LowTideEntranceRoom_EventScript_15E138 + goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E138 msgbox ShoalCave_LowTideEntranceRoom_Text_1C6793, 5 compare RESULT, 0 - jumpeq ShoalCave_LowTideEntranceRoom_EventScript_15E16C + goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E16C checkitemspace ITEM_SHELL_BELL, 1 compare RESULT, 0 - callif 1, ShoalCave_LowTideEntranceRoom_EventScript_15E106 + call_if 1, ShoalCave_LowTideEntranceRoom_EventScript_15E106 compare RESULT, 2 - jumpeq ShoalCave_LowTideEntranceRoom_EventScript_15E12E + goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E12E msgbox ShoalCave_LowTideEntranceRoom_Text_1C6808, 4 removeitem ITEM_SHOAL_SALT, 4 removeitem ITEM_SHOAL_SHELL, 4 giveitem ITEM_SHELL_BELL compare RESULT, 0 - jumpeq ShoalCave_LowTideEntranceRoom_EventScript_1A029B + goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_1A029B msgbox ShoalCave_LowTideEntranceRoom_Text_1C688E, 4 setflag 2 release @@ -50,13 +50,13 @@ ShoalCave_LowTideEntranceRoom_EventScript_15E076:: @ 815E076 ShoalCave_LowTideEntranceRoom_EventScript_15E106:: @ 815E106 checkitem ITEM_SHOAL_SALT, 5 compare RESULT, 1 - jumpeq ShoalCave_LowTideEntranceRoom_EventScript_15E117 + goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E117 return ShoalCave_LowTideEntranceRoom_EventScript_15E117:: @ 815E117 checkitem ITEM_SHOAL_SHELL, 5 compare RESULT, 1 - jumpeq ShoalCave_LowTideEntranceRoom_EventScript_15E128 + goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E128 return ShoalCave_LowTideEntranceRoom_EventScript_15E128:: @ 815E128 @@ -71,10 +71,10 @@ ShoalCave_LowTideEntranceRoom_EventScript_15E12E:: @ 815E12E ShoalCave_LowTideEntranceRoom_EventScript_15E138:: @ 815E138 checkitem ITEM_SHOAL_SALT, 1 compare RESULT, 1 - jumpeq ShoalCave_LowTideEntranceRoom_EventScript_15E162 + goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E162 checkitem ITEM_SHOAL_SHELL, 1 compare RESULT, 1 - jumpeq ShoalCave_LowTideEntranceRoom_EventScript_15E162 + goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E162 msgbox ShoalCave_LowTideEntranceRoom_Text_1C6668, 4 release end diff --git a/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc b/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc index bed2d7b21..05fc6a315 100644 --- a/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc @@ -5,7 +5,7 @@ ShoalCave_LowTideInnerRoom_MapScripts:: @ 815E192 ShoalCave_LowTideInnerRoom_MapScript1_15E19D:: @ 815E19D checkflag 2106 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E1AB + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E1AB goto ShoalCave_LowTideInnerRoom_EventScript_15E1AF ShoalCave_LowTideInnerRoom_EventScript_15E1AB:: @ 815E1AB @@ -22,46 +22,46 @@ ShoalCave_LowTideInnerRoom_MapScript1_15E1B3:: @ 815E1B3 ShoalCave_LowTideInnerRoom_EventScript_15E1B9:: @ 815E1B9 checkflag 952 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E1DA + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E1DA checkflag 2106 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E1DA + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E1DA setmaptile 31, 8, 856, 1 goto ShoalCave_LowTideInnerRoom_EventScript_15E1DA end ShoalCave_LowTideInnerRoom_EventScript_15E1DA:: @ 815E1DA checkflag 953 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E1FB + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E1FB checkflag 2106 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E1FB + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E1FB setmaptile 14, 26, 856, 1 goto ShoalCave_LowTideInnerRoom_EventScript_15E1FB end ShoalCave_LowTideInnerRoom_EventScript_15E1FB:: @ 815E1FB checkflag 956 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E213 + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E213 setmaptile 41, 20, 857, 1 goto ShoalCave_LowTideInnerRoom_EventScript_15E213 end ShoalCave_LowTideInnerRoom_EventScript_15E213:: @ 815E213 checkflag 957 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E22B + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E22B setmaptile 41, 10, 857, 1 goto ShoalCave_LowTideInnerRoom_EventScript_15E22B end ShoalCave_LowTideInnerRoom_EventScript_15E22B:: @ 815E22B checkflag 958 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E243 + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E243 setmaptile 6, 9, 857, 1 goto ShoalCave_LowTideInnerRoom_EventScript_15E243 end ShoalCave_LowTideInnerRoom_EventScript_15E243:: @ 815E243 checkflag 959 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E256 + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E256 setmaptile 16, 13, 857, 1 return @@ -71,10 +71,10 @@ ShoalCave_LowTideInnerRoom_EventScript_15E256:: @ 815E256 ShoalCave_LowTideInnerRoom_EventScript_15E257:: @ 815E257 lockall checkflag 956 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E289 + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E289 giveitem ITEM_SHOAL_SHELL compare RESULT, 0 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_1A029B + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 41, 20, 859, 0 special DrawWholeMapView setflag 956 @@ -89,10 +89,10 @@ ShoalCave_LowTideInnerRoom_EventScript_15E289:: @ 815E289 ShoalCave_LowTideInnerRoom_EventScript_15E293:: @ 815E293 lockall checkflag 957 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E289 + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E289 giveitem ITEM_SHOAL_SHELL compare RESULT, 0 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_1A029B + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 41, 10, 859, 0 special DrawWholeMapView setflag 957 @@ -102,10 +102,10 @@ ShoalCave_LowTideInnerRoom_EventScript_15E293:: @ 815E293 ShoalCave_LowTideInnerRoom_EventScript_15E2C5:: @ 815E2C5 lockall checkflag 958 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E289 + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E289 giveitem ITEM_SHOAL_SHELL compare RESULT, 0 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_1A029B + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 6, 9, 859, 0 special DrawWholeMapView setflag 958 @@ -115,10 +115,10 @@ ShoalCave_LowTideInnerRoom_EventScript_15E2C5:: @ 815E2C5 ShoalCave_LowTideInnerRoom_EventScript_15E2F7:: @ 815E2F7 lockall checkflag 959 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E289 + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E289 giveitem ITEM_SHOAL_SHELL compare RESULT, 0 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_1A029B + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 16, 13, 859, 0 special DrawWholeMapView setflag 959 @@ -128,10 +128,10 @@ ShoalCave_LowTideInnerRoom_EventScript_15E2F7:: @ 815E2F7 ShoalCave_LowTideInnerRoom_EventScript_15E329:: @ 815E329 lockall checkflag 952 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E35B + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E35B giveitem ITEM_SHOAL_SALT compare RESULT, 0 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_1A029B + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 31, 8, 858, 0 special DrawWholeMapView setflag 952 @@ -146,10 +146,10 @@ ShoalCave_LowTideInnerRoom_EventScript_15E35B:: @ 815E35B ShoalCave_LowTideInnerRoom_EventScript_15E365:: @ 815E365 lockall checkflag 953 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_15E35B + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E35B giveitem ITEM_SHOAL_SALT compare RESULT, 0 - jumpeq ShoalCave_LowTideInnerRoom_EventScript_1A029B + goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 14, 26, 858, 0 special DrawWholeMapView setflag 953 diff --git a/data/scripts/maps/ShoalCave_LowTideLowerRoom.inc b/data/scripts/maps/ShoalCave_LowTideLowerRoom.inc index 67de2676f..db5779efe 100644 --- a/data/scripts/maps/ShoalCave_LowTideLowerRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideLowerRoom.inc @@ -8,7 +8,7 @@ ShoalCave_LowTideLowerRoom_MapScript1_15E3F9:: @ 815E3F9 ShoalCave_LowTideLowerRoom_EventScript_15E3FF:: @ 815E3FF checkflag 955 - jumpeq ShoalCave_LowTideLowerRoom_EventScript_15E412 + goto_if_eq ShoalCave_LowTideLowerRoom_EventScript_15E412 setmaptile 18, 2, 856, 1 return @@ -18,10 +18,10 @@ ShoalCave_LowTideLowerRoom_EventScript_15E412:: @ 815E412 ShoalCave_LowTideLowerRoom_EventScript_15E413:: @ 815E413 lockall checkflag 955 - jumpeq ShoalCave_LowTideLowerRoom_EventScript_15E445 + goto_if_eq ShoalCave_LowTideLowerRoom_EventScript_15E445 giveitem ITEM_SHOAL_SALT compare RESULT, 0 - jumpeq ShoalCave_LowTideLowerRoom_EventScript_1A029B + goto_if_eq ShoalCave_LowTideLowerRoom_EventScript_1A029B setmaptile 18, 2, 858, 0 special DrawWholeMapView setflag 955 @@ -37,11 +37,11 @@ ShoalCave_LowTideLowerRoom_EventScript_15E44F:: @ 815E44F lock faceplayer checkflag 283 - jumpeq ShoalCave_LowTideLowerRoom_EventScript_15E47E + goto_if_eq ShoalCave_LowTideLowerRoom_EventScript_15E47E msgbox ShoalCave_LowTideLowerRoom_Text_198200, 4 giveitem ITEM_FOCUS_BAND compare RESULT, 0 - jumpeq ShoalCave_LowTideLowerRoom_EventScript_1A029B + goto_if_eq ShoalCave_LowTideLowerRoom_EventScript_1A029B setflag 283 release end diff --git a/data/scripts/maps/ShoalCave_LowTideStairsRoom.inc b/data/scripts/maps/ShoalCave_LowTideStairsRoom.inc index c46a2cb2d..bffb7bd49 100644 --- a/data/scripts/maps/ShoalCave_LowTideStairsRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideStairsRoom.inc @@ -8,7 +8,7 @@ ShoalCave_LowTideStairsRoom_MapScript1_15E39D:: @ 815E39D ShoalCave_LowTideStairsRoom_EventScript_15E3A3:: @ 815E3A3 checkflag 954 - jumpeq ShoalCave_LowTideStairsRoom_EventScript_15E3B6 + goto_if_eq ShoalCave_LowTideStairsRoom_EventScript_15E3B6 setmaptile 11, 11, 856, 1 return @@ -18,10 +18,10 @@ ShoalCave_LowTideStairsRoom_EventScript_15E3B6:: @ 815E3B6 ShoalCave_LowTideStairsRoom_EventScript_15E3B7:: @ 815E3B7 lockall checkflag 954 - jumpeq ShoalCave_LowTideStairsRoom_EventScript_15E3E9 + goto_if_eq ShoalCave_LowTideStairsRoom_EventScript_15E3E9 giveitem ITEM_SHOAL_SALT compare RESULT, 0 - jumpeq ShoalCave_LowTideStairsRoom_EventScript_1A029B + goto_if_eq ShoalCave_LowTideStairsRoom_EventScript_1A029B setmaptile 11, 11, 858, 0 special DrawWholeMapView setflag 954 diff --git a/data/scripts/maps/SkyPillar_Top.inc b/data/scripts/maps/SkyPillar_Top.inc index d659a23c1..e41d579c0 100644 --- a/data/scripts/maps/SkyPillar_Top.inc +++ b/data/scripts/maps/SkyPillar_Top.inc @@ -4,7 +4,7 @@ SkyPillar_Top_MapScripts:: @ 815F302 SkyPillar_Top_MapScript1_15F308:: @ 815F308 checkflag 2145 - callif 1, SkyPillar_Top_EventScript_15F312 + call_if 1, SkyPillar_Top_EventScript_15F312 end SkyPillar_Top_EventScript_15F312:: @ 815F312 diff --git a/data/scripts/maps/SlateportCity.inc b/data/scripts/maps/SlateportCity.inc index e156f8948..4b11b2f8d 100644 --- a/data/scripts/maps/SlateportCity.inc +++ b/data/scripts/maps/SlateportCity.inc @@ -13,7 +13,7 @@ SlateportCity_MapScript1_14BA3C:: @ 814BA3C setvar 0x40aa, 0 call SlateportCity_EventScript_14BA5C compare 0x4058, 1 - callif 1, SlateportCity_EventScript_14BA68 + call_if 1, SlateportCity_EventScript_14BA68 end SlateportCity_EventScript_14BA5C:: @ 814BA5C @@ -68,10 +68,10 @@ SlateportCity_EventScript_14BAE0:: @ 814BAE0 msgbox SlateportCity_Text_164682, 4 specialval RESULT, LeadMonHasEffortRibbon compare RESULT, 1 - callif 1, SlateportCity_EventScript_14BB35 + call_if 1, SlateportCity_EventScript_14BB35 specialval RESULT, ScrSpecial_AreLeadMonEVsMaxedOut compare RESULT, 0 - callif 1, SlateportCity_EventScript_14BB2B + call_if 1, SlateportCity_EventScript_14BB2B msgbox SlateportCity_Text_164691, 4 fanfare 370 message SlateportCity_Text_1646DD @@ -96,7 +96,7 @@ SlateportCity_EventScript_14BB3F:: @ 814BB3F lock faceplayer compare 0x4058, 1 - callif 1, SlateportCity_EventScript_14BB56 + call_if 1, SlateportCity_EventScript_14BB56 msgbox SlateportCity_Text_164814, 4 release end @@ -110,7 +110,7 @@ SlateportCity_EventScript_14BB60:: @ 814BB60 lock faceplayer compare 0x4058, 1 - callif 1, SlateportCity_EventScript_14BB77 + call_if 1, SlateportCity_EventScript_14BB77 msgbox SlateportCity_Text_1648A0, 4 release end @@ -124,9 +124,9 @@ SlateportCity_EventScript_14BB81:: @ 814BB81 lock faceplayer compare 0x4058, 1 - callif 1, SlateportCity_EventScript_14BBA1 + call_if 1, SlateportCity_EventScript_14BBA1 checkflag 96 - jumpeq SlateportCity_EventScript_14BBAB + goto_if_eq SlateportCity_EventScript_14BBAB msgbox SlateportCity_Text_164937, 4 release end @@ -145,7 +145,7 @@ SlateportCity_EventScript_14BBB5:: @ 814BBB5 lock faceplayer compare 0x4058, 1 - callif 1, SlateportCity_EventScript_14BBCC + call_if 1, SlateportCity_EventScript_14BBCC msgbox SlateportCity_Text_164A30, 4 release end @@ -157,7 +157,7 @@ SlateportCity_EventScript_14BBCC:: @ 814BBCC SlateportCity_EventScript_14BBD6:: @ 814BBD6 compare 0x4058, 1 - jumpeq SlateportCity_EventScript_14BBEA + goto_if_eq SlateportCity_EventScript_14BBEA msgbox SlateportCity_Text_164AA9, 2 end @@ -169,7 +169,7 @@ SlateportCity_EventScript_14BBF3:: @ 814BBF3 lock faceplayer compare 0x4058, 1 - callif 1, SlateportCity_EventScript_14BC0A + call_if 1, SlateportCity_EventScript_14BC0A msgbox SlateportCity_Text_164B34, 4 release end @@ -183,7 +183,7 @@ SlateportCity_EventScript_14BC14:: @ 814BC14 lock faceplayer checkflag 148 - jumpeq SlateportCity_EventScript_14BC29 + goto_if_eq SlateportCity_EventScript_14BC29 msgbox SlateportCity_Text_164BBF, 4 release end @@ -200,9 +200,9 @@ SlateportCity_EventScript_14BC33:: @ 814BC33 SlateportCity_EventScript_14BC3C:: @ 814BC3C lockall checkflag 2052 - jumpeq SlateportCity_EventScript_14BC63 + goto_if_eq SlateportCity_EventScript_14BC63 checkflag 2061 - jumpeq SlateportCity_EventScript_14BC59 + goto_if_eq SlateportCity_EventScript_14BC59 msgbox SlateportCity_Text_1658A0, 4 releaseall end @@ -236,7 +236,7 @@ SlateportCity_EventScript_14BC88:: @ 814BC88 SlateportCity_EventScript_14BC91:: @ 814BC91 lockall checkflag 2052 - jumpeq SlateportCity_EventScript_14BCA5 + goto_if_eq SlateportCity_EventScript_14BCA5 msgbox SlateportCity_Text_165A8B, 4 releaseall end @@ -254,7 +254,7 @@ SlateportCity_EventScript_14BCB8:: @ 814BCB8 lock faceplayer compare 0x4058, 1 - callif 1, SlateportCity_EventScript_14BCCF + call_if 1, SlateportCity_EventScript_14BCCF msgbox SlateportCity_Text_164F9E, 4 release end @@ -289,9 +289,9 @@ SlateportCity_EventScript_14BD06:: @ 814BD06 faceplayer msgbox SlateportCity_Text_1650F1, 5 compare RESULT, 1 - callif 1, SlateportCity_EventScript_14BD28 + call_if 1, SlateportCity_EventScript_14BD28 compare RESULT, 0 - callif 1, SlateportCity_EventScript_14BD31 + call_if 1, SlateportCity_EventScript_14BD31 release end @@ -411,7 +411,7 @@ SlateportCity_EventScript_14BE20:: @ 814BE20 lock faceplayer checkflag 96 - jumpif 0, SlateportCity_EventScript_14BE16 + goto_if 0, SlateportCity_EventScript_14BE16 message SlateportCity_Text_1A0BE4 waittext pokemartdecor SlateportCity_Decorations2 @@ -443,7 +443,7 @@ SlateportCity_Decorations2:: @ 814BE40 lock faceplayer checkflag 96 - jumpif 0, SlateportCity_EventScript_14BE16 + goto_if 0, SlateportCity_EventScript_14BE16 message SlateportCity_Text_1A0BE4 waittext pokemartdecor SlateportCity_Decorations3 diff --git a/data/scripts/maps/SlateportCity_ContestHall.inc b/data/scripts/maps/SlateportCity_ContestHall.inc index 559719583..b2963098c 100644 --- a/data/scripts/maps/SlateportCity_ContestHall.inc +++ b/data/scripts/maps/SlateportCity_ContestHall.inc @@ -13,11 +13,11 @@ SlateportCity_ContestHall_EventScript_15555E:: @ 815555E lock faceplayer checkflag 265 - jumpeq SlateportCity_ContestHall_EventScript_155595 + goto_if_eq SlateportCity_ContestHall_EventScript_155595 msgbox SlateportCity_ContestHall_Text_17CCE2, 4 giveitem ITEM_TM41 compare RESULT, 0 - jumpeq SlateportCity_ContestHall_EventScript_1A029B + goto_if_eq SlateportCity_ContestHall_EventScript_1A029B setflag 265 msgbox SlateportCity_ContestHall_Text_17CE28, 4 release diff --git a/data/scripts/maps/SlateportCity_ContestLobby.inc b/data/scripts/maps/SlateportCity_ContestLobby.inc index b1ce50815..b541fb0e8 100644 --- a/data/scripts/maps/SlateportCity_ContestLobby.inc +++ b/data/scripts/maps/SlateportCity_ContestLobby.inc @@ -102,7 +102,7 @@ SlateportCity_ContestLobby_EventScript_1554F0:: @ 81554F0 SlateportCity_ContestLobby_EventScript_1554F9:: @ 81554F9 lockall checkflag 95 - jumpeq SlateportCity_ContestLobby_EventScript_155526 + goto_if_eq SlateportCity_ContestLobby_EventScript_155526 move 7, SlateportCity_ContestLobby_Movement_1A0839 waitmove 0 msgbox SlateportCity_ContestLobby_Text_17CA67, 4 diff --git a/data/scripts/maps/SlateportCity_Harbor.inc b/data/scripts/maps/SlateportCity_Harbor.inc index d7769eb81..33a99b2a4 100644 --- a/data/scripts/maps/SlateportCity_Harbor.inc +++ b/data/scripts/maps/SlateportCity_Harbor.inc @@ -6,9 +6,9 @@ SlateportCity_Harbor_MapScript1_155F63:: @ 8155F63 warp6 SlateportCity, 255, 28, 13 setvar 0x4001, 0 compare 0x40a0, 1 - callif 1, SlateportCity_Harbor_EventScript_155F89 + call_if 1, SlateportCity_Harbor_EventScript_155F89 checkflag 2052 - callif 1, SlateportCity_Harbor_EventScript_155F85 + call_if 1, SlateportCity_Harbor_EventScript_155F85 end SlateportCity_Harbor_EventScript_155F85:: @ 8155F85 @@ -64,13 +64,13 @@ SlateportCity_Harbor_EventScript_155FD5:: @ 8155FD5 disappear 8 setvar 0x40a0, 2 compare 0x8008, 0 - callif 1, SlateportCity_Harbor_EventScript_15605C + call_if 1, SlateportCity_Harbor_EventScript_15605C compare 0x8008, 1 - callif 1, SlateportCity_Harbor_EventScript_156071 + call_if 1, SlateportCity_Harbor_EventScript_156071 compare 0x8008, 2 - callif 1, SlateportCity_Harbor_EventScript_156086 + call_if 1, SlateportCity_Harbor_EventScript_156086 compare 0x8008, 3 - callif 1, SlateportCity_Harbor_EventScript_156086 + call_if 1, SlateportCity_Harbor_EventScript_156086 msgbox SlateportCity_Harbor_Text_17FE60, 4 closebutton setflag 821 @@ -160,7 +160,7 @@ SlateportCity_Harbor_EventScript_1560C4:: @ 81560C4 lock faceplayer checkflag 2052 - jumpeq SlateportCity_Harbor_EventScript_1560D9 + goto_if_eq SlateportCity_Harbor_EventScript_1560D9 msgbox SlateportCity_Harbor_Text_17FA0A, 4 release end @@ -169,7 +169,7 @@ SlateportCity_Harbor_EventScript_1560D9:: @ 81560D9 msgbox SlateportCity_Harbor_Text_17FA73, 4 checkitem ITEM_SS_TICKET, 1 compare RESULT, 0 - jumpeq SlateportCity_Harbor_EventScript_156135 + goto_if_eq SlateportCity_Harbor_EventScript_156135 message SlateportCity_Harbor_Text_17FB0A waittext goto SlateportCity_Harbor_EventScript_1560FD @@ -192,7 +192,7 @@ SlateportCity_Harbor_EventScript_156135:: @ 8156135 SlateportCity_Harbor_EventScript_15613F:: @ 815613F msgbox SlateportCity_Harbor_Text_17FB81, 5 compare RESULT, 0 - jumpeq SlateportCity_Harbor_EventScript_15618A + goto_if_eq SlateportCity_Harbor_EventScript_15618A setvar 0x40b4, 1 call SlateportCity_Harbor_EventScript_156196 warp SSTidalCorridor, 255, 1, 10 @@ -203,7 +203,7 @@ SlateportCity_Harbor_EventScript_15613F:: @ 815613F SlateportCity_Harbor_EventScript_156167:: @ 8156167 msgbox SlateportCity_Harbor_Text_17FB9C, 5 compare RESULT, 0 - jumpeq SlateportCity_Harbor_EventScript_15618A + goto_if_eq SlateportCity_Harbor_EventScript_15618A call SlateportCity_Harbor_EventScript_156196 warp BattleTower_Outside, 255, 19, 23 waitstate @@ -224,9 +224,9 @@ SlateportCity_Harbor_EventScript_156196:: @ 8156196 pause 30 spriteinvisible LAST_TALKED, 9, 8 compare FACING, 2 - callif 1, SlateportCity_Harbor_EventScript_1561EF + call_if 1, SlateportCity_Harbor_EventScript_1561EF compare FACING, 4 - callif 1, SlateportCity_Harbor_EventScript_1561E4 + call_if 1, SlateportCity_Harbor_EventScript_1561E4 pause 30 spriteinvisible 255, 0, 0 setvar 0x8004, 5 @@ -269,13 +269,13 @@ SlateportCity_Harbor_EventScript_156211:: @ 8156211 lock faceplayer checkflag 2061 - jumpeq SlateportCity_Harbor_EventScript_15626F + goto_if_eq SlateportCity_Harbor_EventScript_15626F checkflag 271 - jumpeq SlateportCity_Harbor_EventScript_156265 + goto_if_eq SlateportCity_Harbor_EventScript_156265 checkflag 112 - jumpeq SlateportCity_Harbor_EventScript_156258 + goto_if_eq SlateportCity_Harbor_EventScript_156258 compare 0x40a0, 2 - jumpeq SlateportCity_Harbor_EventScript_15624E + goto_if_eq SlateportCity_Harbor_EventScript_15624E msgbox SlateportCity_Harbor_Text_17FD1C, 4 closebutton move LAST_TALKED, SlateportCity_Harbor_Movement_1A083D @@ -301,12 +301,12 @@ SlateportCity_Harbor_EventScript_156265:: @ 8156265 SlateportCity_Harbor_EventScript_15626F:: @ 815626F compare 0x4001, 1 - jumpeq SlateportCity_Harbor_EventScript_156380 + goto_if_eq SlateportCity_Harbor_EventScript_156380 checkitem ITEM_SCANNER, 1 compare RESULT, 1 - jumpeq SlateportCity_Harbor_EventScript_1562A7 + goto_if_eq SlateportCity_Harbor_EventScript_1562A7 checkflag 2052 - jumpeq SlateportCity_Harbor_EventScript_15629D + goto_if_eq SlateportCity_Harbor_EventScript_15629D msgbox SlateportCity_Harbor_Text_18017B, 4 release end @@ -334,10 +334,10 @@ SlateportCity_Harbor_EventScript_1562B3:: @ 81562B3 SlateportCity_Harbor_EventScript_1562EA:: @ 81562EA msgbox SlateportCity_Harbor_Text_1803DD, 5 compare RESULT, 0 - jumpeq SlateportCity_Harbor_EventScript_156374 + goto_if_eq SlateportCity_Harbor_EventScript_156374 giveitem ITEM_DEEP_SEA_TOOTH compare RESULT, 0 - jumpeq SlateportCity_Harbor_EventScript_1A029B + goto_if_eq SlateportCity_Harbor_EventScript_1A029B removeitem ITEM_SCANNER, 1 msgbox SlateportCity_Harbor_Text_18046B, 4 setflag 294 @@ -347,10 +347,10 @@ SlateportCity_Harbor_EventScript_1562EA:: @ 81562EA SlateportCity_Harbor_EventScript_15632A:: @ 815632A msgbox SlateportCity_Harbor_Text_180412, 5 compare RESULT, 0 - jumpeq SlateportCity_Harbor_EventScript_156374 + goto_if_eq SlateportCity_Harbor_EventScript_156374 giveitem ITEM_DEEP_SEA_SCALE compare RESULT, 0 - jumpeq SlateportCity_Harbor_EventScript_1A029B + goto_if_eq SlateportCity_Harbor_EventScript_1A029B removeitem ITEM_SCANNER, 1 msgbox SlateportCity_Harbor_Text_18046B, 4 setflag 294 diff --git a/data/scripts/maps/SlateportCity_House1.inc b/data/scripts/maps/SlateportCity_House1.inc index 4161889e1..f9ffba65f 100644 --- a/data/scripts/maps/SlateportCity_House1.inc +++ b/data/scripts/maps/SlateportCity_House1.inc @@ -6,9 +6,9 @@ SlateportCity_House1_EventScript_15567B:: @ 815567B faceplayer msgbox SlateportCity_House1_Text_17D46A, 5 compare RESULT, 1 - jumpeq SlateportCity_House1_EventScript_15569C + goto_if_eq SlateportCity_House1_EventScript_15569C compare RESULT, 0 - jumpeq SlateportCity_House1_EventScript_1556BF + goto_if_eq SlateportCity_House1_EventScript_1556BF end SlateportCity_House1_EventScript_15569C:: @ 815569C @@ -16,9 +16,9 @@ SlateportCity_House1_EventScript_15569C:: @ 815569C special sub_80F9A0C waitstate compare 0x8004, 255 - jumpif 5, SlateportCity_House1_EventScript_1556C9 + goto_if 5, SlateportCity_House1_EventScript_1556C9 compare 0x8004, 255 - jumpeq SlateportCity_House1_EventScript_1556BF + goto_if_eq SlateportCity_House1_EventScript_1556BF end SlateportCity_House1_EventScript_1556BF:: @ 81556BF @@ -29,20 +29,20 @@ SlateportCity_House1_EventScript_1556BF:: @ 81556BF SlateportCity_House1_EventScript_1556C9:: @ 81556C9 specialval RESULT, ScriptGetPartyMonSpecies compare RESULT, SPECIES_EGG - jumpeq SlateportCity_House1_EventScript_15571C + goto_if_eq SlateportCity_House1_EventScript_15571C special sub_80BFAE0 special sub_80BFB10 compare RESULT, 1 - jumpeq SlateportCity_House1_EventScript_155726 + goto_if_eq SlateportCity_House1_EventScript_155726 specialval RESULT, sub_810F96C special sub_80BFAE0 compare RESULT, 1 - jumpeq SlateportCity_House1_EventScript_155726 + goto_if_eq SlateportCity_House1_EventScript_155726 msgbox SlateportCity_House1_Text_17D505, 5 compare RESULT, 1 - jumpeq SlateportCity_House1_EventScript_155730 + goto_if_eq SlateportCity_House1_EventScript_155730 compare RESULT, 0 - jumpeq SlateportCity_House1_EventScript_1556BF + goto_if_eq SlateportCity_House1_EventScript_1556BF end SlateportCity_House1_EventScript_15571C:: @ 815571C @@ -61,7 +61,7 @@ SlateportCity_House1_EventScript_155730:: @ 8155730 specialval RESULT, sub_80BF9B4 special sub_80BFAE0 compare RESULT, 1 - jumpeq SlateportCity_House1_EventScript_15575A + goto_if_eq SlateportCity_House1_EventScript_15575A msgbox SlateportCity_House1_Text_17D63A, 4 release end diff --git a/data/scripts/maps/SlateportCity_House2.inc b/data/scripts/maps/SlateportCity_House2.inc index 2d50f0851..934fae153 100644 --- a/data/scripts/maps/SlateportCity_House2.inc +++ b/data/scripts/maps/SlateportCity_House2.inc @@ -10,7 +10,7 @@ SlateportCity_House2_EventScript_156399:: @ 8156399 faceplayer checkitem ITEM_CONTEST_PASS, 1 compare RESULT, 1 - jumpeq SlateportCity_House2_EventScript_1563B5 + goto_if_eq SlateportCity_House2_EventScript_1563B5 msgbox SlateportCity_House2_Text_180567, 4 release end diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc index 83cac24ef..45b69dff2 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc @@ -35,7 +35,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B06:: @ 8155B06 nop msgbox SlateportCity_OceanicMuseum_1F_Text_17E18D, 5 compare RESULT, 1 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_155B2D + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155B2D closebutton hidemoney 0, 0 move 255, SlateportCity_OceanicMuseum_1F_Movement_155B8D @@ -46,7 +46,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B06:: @ 8155B06 SlateportCity_OceanicMuseum_1F_EventScript_155B2D:: @ 8155B2D checkmoney 0x32, 0 compare RESULT, 0 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_155B5A + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155B5A paymoney 0x32, 0 updatemoney 0, 0 nop @@ -58,7 +58,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B2D:: @ 8155B2D SlateportCity_OceanicMuseum_1F_EventScript_155B5A:: @ 8155B5A checkflag 149 - jumpif 0, SlateportCity_OceanicMuseum_1F_EventScript_155B7B + goto_if 0, SlateportCity_OceanicMuseum_1F_EventScript_155B7B msgbox SlateportCity_OceanicMuseum_1F_Text_17E1F5, 4 closebutton hidemoney 0, 0 @@ -166,14 +166,14 @@ SlateportCity_OceanicMuseum_1F_EventScript_155C3A:: @ 8155C3A msgbox SlateportCity_OceanicMuseum_1F_Text_17E582, 4 giveitem ITEM_TM46 compare RESULT, 0 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_155CC2 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155CC2 setflag 269 msgbox SlateportCity_OceanicMuseum_1F_Text_17E606, 4 closebutton compare FACING, 2 - jumpeq SlateportCity_OceanicMuseum_1F_EventScript_155C98 + goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155C98 compare FACING, 2 - jumpif 5, SlateportCity_OceanicMuseum_1F_EventScript_155CAD + goto_if 5, SlateportCity_OceanicMuseum_1F_EventScript_155CAD end SlateportCity_OceanicMuseum_1F_EventScript_155C98:: @ 8155C98 diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc index 57bfbbd03..136054947 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc @@ -22,21 +22,21 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 move 4, SlateportCity_OceanicMuseum_2F_Movement_155EC5 waitmove 0 compare FACING, 1 - callif 1, SlateportCity_OceanicMuseum_2F_EventScript_155E62 + call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E62 compare FACING, 4 - callif 1, SlateportCity_OceanicMuseum_2F_EventScript_155E62 + call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E62 msgbox SlateportCity_OceanicMuseum_2F_Text_17EDAE, 4 compare FACING, 4 - callif 5, SlateportCity_OceanicMuseum_2F_EventScript_155E6D + call_if 5, SlateportCity_OceanicMuseum_2F_EventScript_155E6D msgbox SlateportCity_OceanicMuseum_2F_Text_17EDD7, 4 msgbox SlateportCity_OceanicMuseum_2F_Text_17EE01, 4 closebutton move 4, SlateportCity_OceanicMuseum_2F_Movement_155EB2 waitmove 0 compare FACING, 1 - callif 1, SlateportCity_OceanicMuseum_2F_EventScript_155E78 + call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E78 compare FACING, 3 - callif 1, SlateportCity_OceanicMuseum_2F_EventScript_155E83 + call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E83 trainerbattle 3, OPPONENT_MUSEUM_2F_GRUNT_1, 0, SlateportCity_OceanicMuseum_2F_Text_17EE4E msgbox SlateportCity_OceanicMuseum_2F_Text_17EE66, 4 closebutton diff --git a/data/scripts/maps/SlateportCity_PokemonFanClub.inc b/data/scripts/maps/SlateportCity_PokemonFanClub.inc index fa2aae4ab..6656e58a4 100644 --- a/data/scripts/maps/SlateportCity_PokemonFanClub.inc +++ b/data/scripts/maps/SlateportCity_PokemonFanClub.inc @@ -24,19 +24,19 @@ SlateportCity_PokemonFanClub_EventScript_155795:: @ 8155795 SlateportCity_PokemonFanClub_EventScript_1557A8:: @ 81557A8 setvar 0x4002, 0 checkflag 204 - callif 1, SlateportCity_PokemonFanClub_EventScript_155893 + call_if 1, SlateportCity_PokemonFanClub_EventScript_155893 checkflag 203 - callif 1, SlateportCity_PokemonFanClub_EventScript_155893 + call_if 1, SlateportCity_PokemonFanClub_EventScript_155893 checkflag 202 - callif 1, SlateportCity_PokemonFanClub_EventScript_155893 + call_if 1, SlateportCity_PokemonFanClub_EventScript_155893 checkflag 201 - callif 1, SlateportCity_PokemonFanClub_EventScript_155893 + call_if 1, SlateportCity_PokemonFanClub_EventScript_155893 checkflag 200 - callif 1, SlateportCity_PokemonFanClub_EventScript_155893 + call_if 1, SlateportCity_PokemonFanClub_EventScript_155893 compare 0x4002, 5 - callif 1, SlateportCity_PokemonFanClub_EventScript_15588D + call_if 1, SlateportCity_PokemonFanClub_EventScript_15588D compare 0x40b7, 2 - jumpeq SlateportCity_PokemonFanClub_EventScript_1557FE + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1557FE msgbox SlateportCity_PokemonFanClub_Text_17DA14, 4 goto SlateportCity_PokemonFanClub_EventScript_155808 end @@ -50,15 +50,15 @@ SlateportCity_PokemonFanClub_EventScript_155808:: @ 8155808 msgbox SlateportCity_PokemonFanClub_Text_17DA49, 4 setvar 0x4001, 0 checkflag 204 - callif 0, SlateportCity_PokemonFanClub_EventScript_1559FE + call_if 0, SlateportCity_PokemonFanClub_EventScript_1559FE checkflag 203 - callif 0, SlateportCity_PokemonFanClub_EventScript_1559E7 + call_if 0, SlateportCity_PokemonFanClub_EventScript_1559E7 checkflag 202 - callif 0, SlateportCity_PokemonFanClub_EventScript_1559D0 + call_if 0, SlateportCity_PokemonFanClub_EventScript_1559D0 checkflag 201 - callif 0, SlateportCity_PokemonFanClub_EventScript_1559B9 + call_if 0, SlateportCity_PokemonFanClub_EventScript_1559B9 checkflag 200 - callif 0, SlateportCity_PokemonFanClub_EventScript_1559A2 + call_if 0, SlateportCity_PokemonFanClub_EventScript_1559A2 bufferfirstpoke 0 switch 0x4001 case 0, SlateportCity_PokemonFanClub_EventScript_155899 @@ -86,7 +86,7 @@ SlateportCity_PokemonFanClub_EventScript_155899:: @ 8155899 SlateportCity_PokemonFanClub_EventScript_1558A3:: @ 81558A3 checkitemspace ITEM_RED_SCARF, 1 compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_155998 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 200 giveitem ITEM_RED_SCARF @@ -97,7 +97,7 @@ SlateportCity_PokemonFanClub_EventScript_1558A3:: @ 81558A3 SlateportCity_PokemonFanClub_EventScript_1558D4:: @ 81558D4 checkitemspace ITEM_BLUE_SCARF, 1 compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_155998 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 201 giveitem ITEM_BLUE_SCARF @@ -108,7 +108,7 @@ SlateportCity_PokemonFanClub_EventScript_1558D4:: @ 81558D4 SlateportCity_PokemonFanClub_EventScript_155905:: @ 8155905 checkitemspace ITEM_PINK_SCARF, 1 compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_155998 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 202 giveitem ITEM_PINK_SCARF @@ -119,7 +119,7 @@ SlateportCity_PokemonFanClub_EventScript_155905:: @ 8155905 SlateportCity_PokemonFanClub_EventScript_155936:: @ 8155936 checkitemspace ITEM_GREEN_SCARF, 1 compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_155998 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 203 giveitem ITEM_GREEN_SCARF @@ -130,7 +130,7 @@ SlateportCity_PokemonFanClub_EventScript_155936:: @ 8155936 SlateportCity_PokemonFanClub_EventScript_155967:: @ 8155967 checkitemspace ITEM_YELLOW_SCARF, 1 compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_155998 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 204 giveitem ITEM_YELLOW_SCARF @@ -146,7 +146,7 @@ SlateportCity_PokemonFanClub_EventScript_155998:: @ 8155998 SlateportCity_PokemonFanClub_EventScript_1559A2:: @ 81559A2 specialval RESULT, CheckLeadMonCool compare RESULT, 1 - callif 1, SlateportCity_PokemonFanClub_EventScript_1559B3 + call_if 1, SlateportCity_PokemonFanClub_EventScript_1559B3 return SlateportCity_PokemonFanClub_EventScript_1559B3:: @ 81559B3 @@ -156,7 +156,7 @@ SlateportCity_PokemonFanClub_EventScript_1559B3:: @ 81559B3 SlateportCity_PokemonFanClub_EventScript_1559B9:: @ 81559B9 specialval RESULT, CheckLeadMonBeauty compare RESULT, 1 - callif 1, SlateportCity_PokemonFanClub_EventScript_1559CA + call_if 1, SlateportCity_PokemonFanClub_EventScript_1559CA return SlateportCity_PokemonFanClub_EventScript_1559CA:: @ 81559CA @@ -166,7 +166,7 @@ SlateportCity_PokemonFanClub_EventScript_1559CA:: @ 81559CA SlateportCity_PokemonFanClub_EventScript_1559D0:: @ 81559D0 specialval RESULT, CheckLeadMonCute compare RESULT, 1 - callif 1, SlateportCity_PokemonFanClub_EventScript_1559E1 + call_if 1, SlateportCity_PokemonFanClub_EventScript_1559E1 return SlateportCity_PokemonFanClub_EventScript_1559E1:: @ 81559E1 @@ -176,7 +176,7 @@ SlateportCity_PokemonFanClub_EventScript_1559E1:: @ 81559E1 SlateportCity_PokemonFanClub_EventScript_1559E7:: @ 81559E7 specialval RESULT, CheckLeadMonSmart compare RESULT, 1 - callif 1, SlateportCity_PokemonFanClub_EventScript_1559F8 + call_if 1, SlateportCity_PokemonFanClub_EventScript_1559F8 return SlateportCity_PokemonFanClub_EventScript_1559F8:: @ 81559F8 @@ -186,7 +186,7 @@ SlateportCity_PokemonFanClub_EventScript_1559F8:: @ 81559F8 SlateportCity_PokemonFanClub_EventScript_1559FE:: @ 81559FE specialval RESULT, CheckLeadMonTough compare RESULT, 1 - callif 1, SlateportCity_PokemonFanClub_EventScript_155A0F + call_if 1, SlateportCity_PokemonFanClub_EventScript_155A0F return SlateportCity_PokemonFanClub_EventScript_155A0F:: @ 8155A0F @@ -197,11 +197,11 @@ SlateportCity_PokemonFanClub_EventScript_155A15:: @ 8155A15 lock faceplayer checkflag 278 - jumpeq SlateportCity_PokemonFanClub_EventScript_155A75 + goto_if_eq SlateportCity_PokemonFanClub_EventScript_155A75 msgbox SlateportCity_PokemonFanClub_Text_17DE6B, 4 specialval RESULT, GetLeadMonFriendshipScore compare RESULT, 4 - jumpif 4, SlateportCity_PokemonFanClub_EventScript_155A3A + goto_if 4, SlateportCity_PokemonFanClub_EventScript_155A3A release end @@ -214,7 +214,7 @@ SlateportCity_PokemonFanClub_EventScript_155A3A:: @ 8155A3A msgbox SlateportCity_PokemonFanClub_Text_17DF57, 4 giveitem ITEM_SOOTHE_BELL compare RESULT, 0 - jumpeq SlateportCity_PokemonFanClub_EventScript_1A029B + goto_if_eq SlateportCity_PokemonFanClub_EventScript_1A029B setflag 278 release end diff --git a/data/scripts/maps/SlateportCity_SternsShipyard_1F.inc b/data/scripts/maps/SlateportCity_SternsShipyard_1F.inc index 4c0596d29..d585fb94c 100644 --- a/data/scripts/maps/SlateportCity_SternsShipyard_1F.inc +++ b/data/scripts/maps/SlateportCity_SternsShipyard_1F.inc @@ -4,13 +4,13 @@ SlateportCity_SternsShipyard_1F_MapScripts:: @ 8155335 SlateportCity_SternsShipyard_1F_EventScript_155336:: @ 8155336 lockall checkflag 2052 - jumpeq SlateportCity_SternsShipyard_1F_EventScript_155388 + goto_if_eq SlateportCity_SternsShipyard_1F_EventScript_155388 checkflag 2061 - jumpeq SlateportCity_SternsShipyard_1F_EventScript_15539C + goto_if_eq SlateportCity_SternsShipyard_1F_EventScript_15539C checkflag 149 - jumpeq SlateportCity_SternsShipyard_1F_EventScript_1553CF + goto_if_eq SlateportCity_SternsShipyard_1F_EventScript_1553CF checkflag 148 - jumpeq SlateportCity_SternsShipyard_1F_EventScript_1553B0 + goto_if_eq SlateportCity_SternsShipyard_1F_EventScript_1553B0 msgbox SlateportCity_SternsShipyard_1F_Text_17C14B, 4 move 1, SlateportCity_SternsShipyard_1F_Movement_1A0839 waitmove 0 diff --git a/data/scripts/maps/SootopolisCity.inc b/data/scripts/maps/SootopolisCity.inc index 0c22fbc37..d718fed6e 100644 --- a/data/scripts/maps/SootopolisCity.inc +++ b/data/scripts/maps/SootopolisCity.inc @@ -6,9 +6,9 @@ SootopolisCity_MapScripts:: @ 814D07D SootopolisCity_MapScript1_14D08D:: @ 814D08D checkflag 129 - callif 0, SootopolisCity_EventScript_14D0A0 + call_if 0, SootopolisCity_EventScript_14D0A0 checkflag 129 - callif 1, SootopolisCity_EventScript_14D0B1 + call_if 1, SootopolisCity_EventScript_14D0B1 end SootopolisCity_EventScript_14D0A0:: @ 814D0A0 @@ -18,7 +18,7 @@ SootopolisCity_EventScript_14D0A0:: @ 814D0A0 SootopolisCity_EventScript_14D0B1:: @ 814D0B1 checkflag 113 - callif 0, SootopolisCity_EventScript_14D0BB + call_if 0, SootopolisCity_EventScript_14D0BB return SootopolisCity_EventScript_14D0BB:: @ 814D0BB @@ -36,9 +36,9 @@ SootopolisCity_EventScript_14D0BB:: @ 814D0BB SootopolisCity_MapScript1_14D10D:: @ 814D10D setflag 2077 checkflag 113 - callif 1, SootopolisCity_EventScript_14D159 + call_if 1, SootopolisCity_EventScript_14D159 checkflag 2090 - callif 1, SootopolisCity_EventScript_14D123 + call_if 1, SootopolisCity_EventScript_14D123 end SootopolisCity_EventScript_14D123:: @ 814D123 @@ -46,7 +46,7 @@ SootopolisCity_EventScript_14D123:: @ 814D123 movespriteperm 1, 29, 19 movespriteperm 2, 33, 19 compare 0x405e, 1 - callif 1, SootopolisCity_EventScript_14D142 + call_if 1, SootopolisCity_EventScript_14D142 return SootopolisCity_EventScript_14D142:: @ 814D142 @@ -69,7 +69,7 @@ SootopolisCity_EventScript_14D16E:: @ 814D16E lock faceplayer checkflag 113 - jumpeq SootopolisCity_EventScript_14D183 + goto_if_eq SootopolisCity_EventScript_14D183 msgbox SootopolisCity_Text_1696A4, 4 release end @@ -93,27 +93,27 @@ SootopolisCity_EventScript_14D19F:: @ 814D19F checkdailyflags special GetPlayerBigGuyGirlString checkflag 2258 - jumpeq SootopolisCity_EventScript_14D241 + goto_if_eq SootopolisCity_EventScript_14D241 msgbox SootopolisCity_Text_1C63F2, 4 random 10 addvar RESULT, 20 addvar RESULT, 133 giveitem RESULT compare RESULT, 0 - jumpeq SootopolisCity_EventScript_1A029B + goto_if_eq SootopolisCity_EventScript_1A029B setflag 2258 msgbox SootopolisCity_Text_1C64D0, 4 random 2 compare RESULT, 0 - jumpeq SootopolisCity_EventScript_14D1FF + goto_if_eq SootopolisCity_EventScript_14D1FF compare RESULT, 1 - jumpeq SootopolisCity_EventScript_14D220 + goto_if_eq SootopolisCity_EventScript_14D220 end SootopolisCity_EventScript_14D1FF:: @ 814D1FF giveitem ITEM_FIGY_BERRY compare RESULT, 0 - jumpeq SootopolisCity_EventScript_1A029B + goto_if_eq SootopolisCity_EventScript_1A029B msgbox SootopolisCity_Text_1C650B, 4 release end @@ -121,7 +121,7 @@ SootopolisCity_EventScript_14D1FF:: @ 814D1FF SootopolisCity_EventScript_14D220:: @ 814D220 giveitem ITEM_IAPAPA_BERRY compare RESULT, 0 - jumpeq SootopolisCity_EventScript_1A029B + goto_if_eq SootopolisCity_EventScript_1A029B msgbox SootopolisCity_Text_1C650B, 4 release end @@ -129,7 +129,7 @@ SootopolisCity_EventScript_14D220:: @ 814D220 SootopolisCity_EventScript_14D241:: @ 814D241 msgbox SootopolisCity_Text_1C6540, 5 compare RESULT, 1 - jumpeq SootopolisCity_EventScript_14D25E + goto_if_eq SootopolisCity_EventScript_14D25E msgbox SootopolisCity_Text_1C6626, 4 release end @@ -143,7 +143,7 @@ SootopolisCity_EventScript_14D268:: @ 814D268 lock faceplayer checkflag 1236 - jumpeq SootopolisCity_EventScript_14D27D + goto_if_eq SootopolisCity_EventScript_14D27D msgbox SootopolisCity_Text_16A4D6, 4 release end @@ -157,7 +157,7 @@ SootopolisCity_EventScript_14D287:: @ 814D287 lock faceplayer checkflag 113 - jumpeq SootopolisCity_EventScript_14D29C + goto_if_eq SootopolisCity_EventScript_14D29C msgbox SootopolisCity_Text_169813, 4 release end @@ -171,7 +171,7 @@ SootopolisCity_EventScript_14D2A6:: @ 814D2A6 lock faceplayer checkflag 113 - jumpeq SootopolisCity_EventScript_14D2BB + goto_if_eq SootopolisCity_EventScript_14D2BB msgbox SootopolisCity_Text_1698A0, 4 release end @@ -185,7 +185,7 @@ SootopolisCity_EventScript_14D2C5:: @ 814D2C5 lock faceplayer checkflag 113 - jumpeq SootopolisCity_EventScript_14D2DA + goto_if_eq SootopolisCity_EventScript_14D2DA msgbox SootopolisCity_Text_1697A7, 4 release end @@ -446,7 +446,7 @@ SootopolisCity_EventScript_14D498:: @ 814D498 lock faceplayer checkflag 113 - jumpeq SootopolisCity_EventScript_14D4AD + goto_if_eq SootopolisCity_EventScript_14D4AD .ifdef SAPPHIRE msgbox SootopolisCity_Text_169DA6, 4 .else diff --git a/data/scripts/maps/SootopolisCity_Gym_1F.inc b/data/scripts/maps/SootopolisCity_Gym_1F.inc index 9fe6da43d..d776e8ecf 100644 --- a/data/scripts/maps/SootopolisCity_Gym_1F.inc +++ b/data/scripts/maps/SootopolisCity_Gym_1F.inc @@ -20,11 +20,11 @@ SootopolisCity_Gym_1F_MapScript1_15AF25:: @ 815AF25 SootopolisCity_Gym_1F_EventScript_15AF2E:: @ 815AF2E compare 0x4022, 8 - jumpif 0, SootopolisCity_Gym_1F_EventScript_15AF85 + goto_if 0, SootopolisCity_Gym_1F_EventScript_15AF85 compare 0x4022, 28 - jumpif 0, SootopolisCity_Gym_1F_EventScript_15AF73 + goto_if 0, SootopolisCity_Gym_1F_EventScript_15AF73 compare 0x4022, 69 - jumpif 0, SootopolisCity_Gym_1F_EventScript_15AF61 + goto_if 0, SootopolisCity_Gym_1F_EventScript_15AF61 setmaptile 8, 4, 519, 0 setmaptile 8, 5, 519, 0 @@ -88,9 +88,9 @@ SootopolisCity_Gym_1F_Movement_15AFFD:: @ 815AFFD SootopolisCity_Gym_1F_EventScript_15AFFF:: @ 815AFFF trainerbattle 1, OPPONENT_WALLACE, 0, SootopolisCity_Gym_1F_Text_18F0CA, SootopolisCity_Gym_1F_Text_18F282, SootopolisCity_Gym_1F_EventScript_15B02D checkflag 172 - jumpif 0, SootopolisCity_Gym_1F_EventScript_15B056 + goto_if 0, SootopolisCity_Gym_1F_EventScript_15B056 checkflag 2060 - jumpif 0, SootopolisCity_Gym_1F_EventScript_15B07A + goto_if 0, SootopolisCity_Gym_1F_EventScript_15B07A msgbox SootopolisCity_Gym_1F_Text_18F4D7, 4 release end @@ -110,7 +110,7 @@ SootopolisCity_Gym_1F_EventScript_15B02D:: @ 815B02D SootopolisCity_Gym_1F_EventScript_15B056:: @ 815B056 giveitem ITEM_TM03 compare RESULT, 0 - jumpeq SootopolisCity_Gym_1F_EventScript_1A029B + goto_if_eq SootopolisCity_Gym_1F_EventScript_1A029B msgbox SootopolisCity_Gym_1F_Text_18F466, 4 setflag 172 release @@ -125,7 +125,7 @@ SootopolisCity_Gym_1F_EventScript_15B084:: @ 815B084 lock faceplayer checkflag 1236 - jumpeq SootopolisCity_Gym_1F_EventScript_15B099 + goto_if_eq SootopolisCity_Gym_1F_EventScript_15B099 msgbox SootopolisCity_Gym_1F_Text_18E8A5, 4 release end @@ -138,14 +138,14 @@ SootopolisCity_Gym_1F_EventScript_15B099:: @ 815B099 SootopolisCity_Gym_1F_EventScript_15B0A3:: @ 815B0A3 lockall checkflag 2062 - jumpeq SootopolisCity_Gym_1F_EventScript_15B0C3 + goto_if_eq SootopolisCity_Gym_1F_EventScript_15B0C3 goto SootopolisCity_Gym_1F_EventScript_15B0CD end SootopolisCity_Gym_1F_EventScript_15B0B3:: @ 815B0B3 lockall checkflag 2062 - jumpeq SootopolisCity_Gym_1F_EventScript_15B0C3 + goto_if_eq SootopolisCity_Gym_1F_EventScript_15B0C3 goto SootopolisCity_Gym_1F_EventScript_15B0CD end diff --git a/data/scripts/maps/SootopolisCity_House1.inc b/data/scripts/maps/SootopolisCity_House1.inc index 604f04c4f..e01a00d97 100644 --- a/data/scripts/maps/SootopolisCity_House1.inc +++ b/data/scripts/maps/SootopolisCity_House1.inc @@ -5,7 +5,7 @@ SootopolisCity_House1_EventScript_15B29B:: @ 815B29B lock faceplayer checkflag 121 - jumpeq SootopolisCity_House1_EventScript_15B2C7 + goto_if_eq SootopolisCity_House1_EventScript_15B2C7 msgbox SootopolisCity_House1_Text_18F991, 4 giveitem ITEM_TM31 setflag 121 diff --git a/data/scripts/maps/SootopolisCity_House2.inc b/data/scripts/maps/SootopolisCity_House2.inc index 409a871a8..011806291 100644 --- a/data/scripts/maps/SootopolisCity_House2.inc +++ b/data/scripts/maps/SootopolisCity_House2.inc @@ -6,9 +6,9 @@ SootopolisCity_House2_EventScript_15B2E5:: @ 815B2E5 faceplayer msgbox SootopolisCity_House2_Text_18FA66, 5 compare RESULT, 1 - callif 1, SootopolisCity_House2_EventScript_15B307 + call_if 1, SootopolisCity_House2_EventScript_15B307 compare RESULT, 0 - callif 1, SootopolisCity_House2_EventScript_15B310 + call_if 1, SootopolisCity_House2_EventScript_15B310 release end diff --git a/data/scripts/maps/SootopolisCity_House3.inc b/data/scripts/maps/SootopolisCity_House3.inc index 88e35730e..f1bf0bf19 100644 --- a/data/scripts/maps/SootopolisCity_House3.inc +++ b/data/scripts/maps/SootopolisCity_House3.inc @@ -6,7 +6,7 @@ SootopolisCity_House3_EventScript_15B31A:: @ 815B31A faceplayer msgbox SootopolisCity_House3_Text_18FB36, 5 compare RESULT, 1 - jumpeq SootopolisCity_House3_EventScript_15B339 + goto_if_eq SootopolisCity_House3_EventScript_15B339 msgbox SootopolisCity_House3_Text_18FBC0, 4 release end diff --git a/data/scripts/maps/SootopolisCity_House6.inc b/data/scripts/maps/SootopolisCity_House6.inc index cccfa78ee..1e1b53956 100644 --- a/data/scripts/maps/SootopolisCity_House6.inc +++ b/data/scripts/maps/SootopolisCity_House6.inc @@ -5,14 +5,14 @@ SootopolisCity_House6_EventScript_15B386:: @ 815B386 lock faceplayer checkflag 245 - jumpeq SootopolisCity_House6_EventScript_15B3CD + goto_if_eq SootopolisCity_House6_EventScript_15B3CD msgbox SootopolisCity_House6_Text_18FEA1, 5 compare RESULT, 0 - callif 1, SootopolisCity_House6_EventScript_15B3C3 + call_if 1, SootopolisCity_House6_EventScript_15B3C3 msgbox SootopolisCity_House6_Text_18FF12, 4 givedecoration 117 compare RESULT, 0 - jumpeq SootopolisCity_House6_EventScript_15B3D7 + goto_if_eq SootopolisCity_House6_EventScript_15B3D7 setflag 245 release end diff --git a/data/scripts/maps/SootopolisCity_House8.inc b/data/scripts/maps/SootopolisCity_House8.inc index 9d7618316..662117741 100644 --- a/data/scripts/maps/SootopolisCity_House8.inc +++ b/data/scripts/maps/SootopolisCity_House8.inc @@ -10,14 +10,14 @@ SootopolisCity_House8_EventScript_15B401:: @ 815B401 waitstate copyvar RESULT, 0x8004 compare RESULT, 255 - jumpeq SootopolisCity_House8_EventScript_15B448 + goto_if_eq SootopolisCity_House8_EventScript_15B448 special CompareShroomishSize compare RESULT, 1 - jumpeq SootopolisCity_House8_EventScript_15B452 + goto_if_eq SootopolisCity_House8_EventScript_15B452 compare RESULT, 2 - jumpeq SootopolisCity_House8_EventScript_15B45C + goto_if_eq SootopolisCity_House8_EventScript_15B45C compare RESULT, 3 - jumpeq SootopolisCity_House8_EventScript_15B466 + goto_if_eq SootopolisCity_House8_EventScript_15B466 release end @@ -40,7 +40,7 @@ SootopolisCity_House8_EventScript_15B466:: @ 815B466 msgbox SootopolisCity_House8_Text_19021D, 4 giveitem ITEM_ELIXIR compare RESULT, 0 - jumpeq SootopolisCity_House8_EventScript_15B488 + goto_if_eq SootopolisCity_House8_EventScript_15B488 closebutton release end @@ -59,14 +59,14 @@ SootopolisCity_House8_EventScript_15B492:: @ 815B492 waitstate copyvar RESULT, 0x8004 compare RESULT, 255 - jumpeq SootopolisCity_House8_EventScript_15B4D9 + goto_if_eq SootopolisCity_House8_EventScript_15B4D9 special CompareBarboachSize compare RESULT, 1 - jumpeq SootopolisCity_House8_EventScript_15B4E3 + goto_if_eq SootopolisCity_House8_EventScript_15B4E3 compare RESULT, 2 - jumpeq SootopolisCity_House8_EventScript_15B4ED + goto_if_eq SootopolisCity_House8_EventScript_15B4ED compare RESULT, 3 - jumpeq SootopolisCity_House8_EventScript_15B4F7 + goto_if_eq SootopolisCity_House8_EventScript_15B4F7 release end @@ -89,7 +89,7 @@ SootopolisCity_House8_EventScript_15B4F7:: @ 815B4F7 msgbox SootopolisCity_House8_Text_190536, 4 giveitem ITEM_ELIXIR compare RESULT, 0 - jumpeq SootopolisCity_House8_EventScript_15B519 + goto_if_eq SootopolisCity_House8_EventScript_15B519 closebutton release end diff --git a/data/scripts/maps/SootopolisCity_Mart.inc b/data/scripts/maps/SootopolisCity_Mart.inc index 9f37f9d0b..6cfb2ff79 100644 --- a/data/scripts/maps/SootopolisCity_Mart.inc +++ b/data/scripts/maps/SootopolisCity_Mart.inc @@ -30,9 +30,9 @@ SootopolisCity_Mart_EventScript_15B24A:: @ 815B24A lock faceplayer checkflag 113 - jumpeq SootopolisCity_Mart_EventScript_15B268 + goto_if_eq SootopolisCity_Mart_EventScript_15B268 checkflag 129 - jumpif 0, SootopolisCity_Mart_EventScript_15B268 + goto_if 0, SootopolisCity_Mart_EventScript_15B268 msgbox SootopolisCity_Mart_Text_18F8D7, 4 release end @@ -46,9 +46,9 @@ SootopolisCity_Mart_EventScript_15B272:: @ 815B272 lock faceplayer checkflag 113 - jumpeq SootopolisCity_Mart_EventScript_15B290 + goto_if_eq SootopolisCity_Mart_EventScript_15B290 checkflag 129 - jumpif 0, SootopolisCity_Mart_EventScript_15B290 + goto_if 0, SootopolisCity_Mart_EventScript_15B290 msgbox SootopolisCity_Mart_Text_18F96B, 4 release end diff --git a/data/scripts/maps/SootopolisCity_PokemonCenter_1F.inc b/data/scripts/maps/SootopolisCity_PokemonCenter_1F.inc index 29cc06584..00c9d3310 100644 --- a/data/scripts/maps/SootopolisCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/SootopolisCity_PokemonCenter_1F.inc @@ -18,9 +18,9 @@ SootopolisCity_PokemonCenter_1F_EventScript_15B1A8:: @ 815B1A8 lock faceplayer checkflag 113 - jumpeq SootopolisCity_PokemonCenter_1F_EventScript_15B1C6 + goto_if_eq SootopolisCity_PokemonCenter_1F_EventScript_15B1C6 checkflag 129 - jumpif 0, SootopolisCity_PokemonCenter_1F_EventScript_15B1C6 + goto_if 0, SootopolisCity_PokemonCenter_1F_EventScript_15B1C6 msgbox SootopolisCity_PokemonCenter_1F_Text_18F770, 4 release end @@ -34,9 +34,9 @@ SootopolisCity_PokemonCenter_1F_EventScript_15B1D0:: @ 815B1D0 lock faceplayer checkflag 113 - jumpeq SootopolisCity_PokemonCenter_1F_EventScript_15B1EE + goto_if_eq SootopolisCity_PokemonCenter_1F_EventScript_15B1EE checkflag 129 - jumpif 0, SootopolisCity_PokemonCenter_1F_EventScript_15B1EE + goto_if 0, SootopolisCity_PokemonCenter_1F_EventScript_15B1EE msgbox SootopolisCity_PokemonCenter_1F_Text_18F860, 4 release end diff --git a/data/scripts/maps/SouthernIsland_Exterior.inc b/data/scripts/maps/SouthernIsland_Exterior.inc index 9723647cd..fc7d811c4 100644 --- a/data/scripts/maps/SouthernIsland_Exterior.inc +++ b/data/scripts/maps/SouthernIsland_Exterior.inc @@ -11,7 +11,7 @@ SouthernIsland_Exterior_EventScript_160AE0:: @ 8160AE0 faceplayer msgbox SouthernIsland_Exterior_Text_1C5215, 5 compare RESULT, 0 - jumpeq SouthernIsland_Exterior_EventScript_160B25 + goto_if_eq SouthernIsland_Exterior_EventScript_160B25 msgbox SouthernIsland_Exterior_Text_1C5281, 4 closebutton move LAST_TALKED, SouthernIsland_Exterior_Movement_1A0845 diff --git a/data/scripts/maps/SouthernIsland_Interior.inc b/data/scripts/maps/SouthernIsland_Interior.inc index f341f5aeb..84e6b93c5 100644 --- a/data/scripts/maps/SouthernIsland_Interior.inc +++ b/data/scripts/maps/SouthernIsland_Interior.inc @@ -5,7 +5,7 @@ SouthernIsland_Interior_MapScripts:: @ 8160B53 SouthernIsland_Interior_MapScript1_160B5E:: @ 8160B5E checkflag 2145 - callif 1, SouthernIsland_Interior_EventScript_160B68 + call_if 1, SouthernIsland_Interior_EventScript_160B68 end SouthernIsland_Interior_EventScript_160B68:: @ 8160B68 @@ -24,9 +24,9 @@ SouthernIsland_Interior_MapScript1_160B6C:: @ 8160B6C SouthernIsland_Interior_EventScript_160B77:: @ 8160B77 checkgender compare RESULT, 0 - jumpeq SouthernIsland_Interior_EventScript_160B8F + goto_if_eq SouthernIsland_Interior_EventScript_160B8F compare RESULT, 1 - jumpeq SouthernIsland_Interior_EventScript_160B95 + goto_if_eq SouthernIsland_Interior_EventScript_160B95 end SouthernIsland_Interior_EventScript_160B8F:: @ 8160B8F @@ -45,9 +45,9 @@ SouthernIsland_Interior_EventScript_160B9B:: @ 8160B9B SouthernIsland_Interior_EventScript_160BA7:: @ 8160BA7 checkflag 206 - jumpeq SouthernIsland_Interior_EventScript_160C08 + goto_if_eq SouthernIsland_Interior_EventScript_160C08 checkflag 2131 - jumpif 0, SouthernIsland_Interior_EventScript_160C08 + goto_if 0, SouthernIsland_Interior_EventScript_160C08 setflag 206 special SpawnCameraDummy move 127, SouthernIsland_Interior_Movement_160C12 diff --git a/data/scripts/maps/Underwater_SeafloorCavern.inc b/data/scripts/maps/Underwater_SeafloorCavern.inc index c879ec609..8ef61d0f0 100644 --- a/data/scripts/maps/Underwater_SeafloorCavern.inc +++ b/data/scripts/maps/Underwater_SeafloorCavern.inc @@ -7,7 +7,7 @@ Underwater_SeafloorCavern_MapScripts:: @ 815D99E Underwater_SeafloorCavern_MapScript1_15D9AE:: @ 815D9AE setflag 2119 checkflag 129 - jumpeq Underwater_SeafloorCavern_EventScript_15D9BB + goto_if_eq Underwater_SeafloorCavern_EventScript_15D9BB end Underwater_SeafloorCavern_EventScript_15D9BB:: @ 815D9BB @@ -16,7 +16,7 @@ Underwater_SeafloorCavern_EventScript_15D9BB:: @ 815D9BB Underwater_SeafloorCavern_MapScript1_15D9BF:: @ 815D9BF checkflag 129 - callif 1, Underwater_SeafloorCavern_EventScript_15D9C9 + call_if 1, Underwater_SeafloorCavern_EventScript_15D9C9 end Underwater_SeafloorCavern_EventScript_15D9C9:: @ 815D9C9 diff --git a/data/scripts/maps/Underwater_SealedChamber.inc b/data/scripts/maps/Underwater_SealedChamber.inc index bbd0db9d9..4e2895166 100644 --- a/data/scripts/maps/Underwater_SealedChamber.inc +++ b/data/scripts/maps/Underwater_SealedChamber.inc @@ -5,9 +5,9 @@ Underwater_SealedChamber_MapScripts:: @ 815F080 Underwater_SealedChamber_MapScript1_15F086:: @ 815F086 getplayerxy 0x8004, 0x8005 compare 0x8004, 12 - jumpif 5, Underwater_SealedChamber_EventScript_15F0A6 + goto_if 5, Underwater_SealedChamber_EventScript_15F0A6 compare 0x8005, 44 - jumpif 5, Underwater_SealedChamber_EventScript_15F0A6 + goto_if 5, Underwater_SealedChamber_EventScript_15F0A6 goto Underwater_SealedChamber_EventScript_15F0AF Underwater_SealedChamber_EventScript_15F0A6:: @ 815F0A6 diff --git a/data/scripts/maps/UnknownMap_25_34.inc b/data/scripts/maps/UnknownMap_25_34.inc index cbd782f35..52aca6d12 100644 --- a/data/scripts/maps/UnknownMap_25_34.inc +++ b/data/scripts/maps/UnknownMap_25_34.inc @@ -14,15 +14,15 @@ LinkContestRoom1_MapScript1_15F595:: @ 815F595 LinkContestRoom1_EventScript_15F5A5:: @ 815F5A5 special ScriptGetMultiplayerId compare RESULT, 0 - callif 1, LinkContestRoom1_EventScript_15F5E0 + call_if 1, LinkContestRoom1_EventScript_15F5E0 compare RESULT, 1 - callif 1, LinkContestRoom1_EventScript_15F5E4 + call_if 1, LinkContestRoom1_EventScript_15F5E4 compare RESULT, 2 - callif 1, LinkContestRoom1_EventScript_15F5E8 + call_if 1, LinkContestRoom1_EventScript_15F5E8 compare RESULT, 3 - callif 1, LinkContestRoom1_EventScript_15F5EC + call_if 1, LinkContestRoom1_EventScript_15F5EC compare RESULT, 4 - callif 1, LinkContestRoom1_EventScript_15F5F0 + call_if 1, LinkContestRoom1_EventScript_15F5F0 return LinkContestRoom1_EventScript_15F5E0:: @ 815F5E0 @@ -47,7 +47,7 @@ LinkContestRoom1_EventScript_15F5F0:: @ 815F5F0 LinkContestRoom1_MapScript1_15F5F4:: @ 815F5F4 compare 0x4009, 1 - callif 1, LinkContestRoom1_EventScript_15F600 + call_if 1, LinkContestRoom1_EventScript_15F600 end LinkContestRoom1_EventScript_15F600:: @ 815F600 @@ -76,7 +76,7 @@ LinkContestRoom1_EventScript_15F630:: @ 815F630 call LinkContestRoom1_EventScript_15F6E6 call LinkContestRoom1_EventScript_15F646 compare 0x4000, 8 - jumpif 0, LinkContestRoom1_EventScript_15F630 + goto_if 0, LinkContestRoom1_EventScript_15F630 return LinkContestRoom1_EventScript_15F646:: @ 815F646 @@ -415,9 +415,9 @@ SlateportCity_ContestLobby_EventScript_15FBDB:: @ 815FBDB VerdanturfTown_ContestLobby_EventScript_15FBDB:: @ 815FBDB checkgender compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_15FBF3 + goto_if_eq FallarborTown_ContestLobby_EventScript_15FBF3 compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_15FBF9 + goto_if_eq FallarborTown_ContestLobby_EventScript_15FBF9 return FallarborTown_ContestLobby_EventScript_15FBF3:: @ 815FBF3 diff --git a/data/scripts/maps/VerdanturfTown.inc b/data/scripts/maps/VerdanturfTown.inc index 610643823..66aa080ba 100644 --- a/data/scripts/maps/VerdanturfTown.inc +++ b/data/scripts/maps/VerdanturfTown.inc @@ -12,7 +12,7 @@ VerdanturfTown_EventScript_14E866:: @ 814E866 lock faceplayer checkflag 199 - jumpeq VerdanturfTown_EventScript_14E885 + goto_if_eq VerdanturfTown_EventScript_14E885 msgbox VerdanturfTown_Text_16CAEB, 4 move 2, VerdanturfTown_Movement_1A083D waitmove 0 @@ -38,7 +38,7 @@ VerdanturfTown_EventScript_14E8AB:: @ 814E8AB lock faceplayer checkflag 199 - jumpeq VerdanturfTown_EventScript_14E8C0 + goto_if_eq VerdanturfTown_EventScript_14E8C0 msgbox VerdanturfTown_Text_16CD4D, 4 release end diff --git a/data/scripts/maps/VerdanturfTown_ContestLobby.inc b/data/scripts/maps/VerdanturfTown_ContestLobby.inc index 8fd4016d1..00454133d 100644 --- a/data/scripts/maps/VerdanturfTown_ContestLobby.inc +++ b/data/scripts/maps/VerdanturfTown_ContestLobby.inc @@ -102,11 +102,11 @@ VerdanturfTown_ContestLobby_EventScript_153E47:: @ 8153E47 lock faceplayer checkflag 235 - jumpeq VerdanturfTown_ContestLobby_EventScript_153E76 + goto_if_eq VerdanturfTown_ContestLobby_EventScript_153E76 msgbox VerdanturfTown_ContestLobby_Text_177DEC, 4 giveitem ITEM_TM45 compare RESULT, 0 - jumpeq VerdanturfTown_ContestLobby_EventScript_1A029B + goto_if_eq VerdanturfTown_ContestLobby_EventScript_1A029B setflag 235 release end diff --git a/data/scripts/maps/VerdanturfTown_WandasHouse.inc b/data/scripts/maps/VerdanturfTown_WandasHouse.inc index 80bd6151d..fad64292b 100644 --- a/data/scripts/maps/VerdanturfTown_WandasHouse.inc +++ b/data/scripts/maps/VerdanturfTown_WandasHouse.inc @@ -5,7 +5,7 @@ VerdanturfTown_WandasHouse_EventScript_153F5B:: @ 8153F5B lock faceplayer checkflag 193 - jumpeq VerdanturfTown_WandasHouse_EventScript_153F73 + goto_if_eq VerdanturfTown_WandasHouse_EventScript_153F73 msgbox VerdanturfTown_WandasHouse_Text_1783F6, 4 setflag 193 release @@ -20,9 +20,9 @@ VerdanturfTown_WandasHouse_EventScript_153F7D:: @ 8153F7D lock faceplayer checkflag 126 - jumpeq VerdanturfTown_WandasHouse_EventScript_153FA5 + goto_if_eq VerdanturfTown_WandasHouse_EventScript_153FA5 checkflag 1213 - jumpeq VerdanturfTown_WandasHouse_EventScript_153F9B + goto_if_eq VerdanturfTown_WandasHouse_EventScript_153F9B msgbox VerdanturfTown_WandasHouse_Text_17859A, 4 release end @@ -45,9 +45,9 @@ VerdanturfTown_WandasHouse_EventScript_153FB8:: @ 8153FB8 lock faceplayer checkflag 1213 - jumpeq VerdanturfTown_WandasHouse_EventScript_153FE0 + goto_if_eq VerdanturfTown_WandasHouse_EventScript_153FE0 checkflag 190 - jumpeq VerdanturfTown_WandasHouse_EventScript_153FD6 + goto_if_eq VerdanturfTown_WandasHouse_EventScript_153FD6 msgbox VerdanturfTown_WandasHouse_Text_1787FB, 4 release end @@ -66,11 +66,11 @@ VerdanturfTown_WandasHouse_EventScript_153FEA:: @ 8153FEA lock faceplayer checkflag 126 - jumpeq VerdanturfTown_WandasHouse_EventScript_154025 + goto_if_eq VerdanturfTown_WandasHouse_EventScript_154025 checkflag 1213 - jumpeq VerdanturfTown_WandasHouse_EventScript_15401B + goto_if_eq VerdanturfTown_WandasHouse_EventScript_15401B checkflag 199 - jumpeq VerdanturfTown_WandasHouse_EventScript_154011 + goto_if_eq VerdanturfTown_WandasHouse_EventScript_154011 msgbox VerdanturfTown_WandasHouse_Text_1788B1, 4 release end diff --git a/data/scripts/maps/VictoryRoad_1F.inc b/data/scripts/maps/VictoryRoad_1F.inc index 3eae03f37..7ea560d0d 100644 --- a/data/scripts/maps/VictoryRoad_1F.inc +++ b/data/scripts/maps/VictoryRoad_1F.inc @@ -4,7 +4,7 @@ VictoryRoad_1F_MapScripts:: @ 815DE83 VictoryRoad_1F_MapScript1_15DE89:: @ 815DE89 checkflag 126 - callif 1, VictoryRoad_1F_EventScript_15DE93 + call_if 1, VictoryRoad_1F_EventScript_15DE93 end VictoryRoad_1F_EventScript_15DE93:: @ 815DE93 @@ -95,7 +95,7 @@ VictoryRoad_1F_EventScript_15DF31:: @ 815DF31 trainerbattle 0, OPPONENT_WALLY_3, 0, VictoryRoad_1F_Text_1979BA, VictoryRoad_1F_Text_197A23 specialval RESULT, sub_8082C68 compare RESULT, 1 - jumpeq VictoryRoad_1F_EventScript_15DF58 + goto_if_eq VictoryRoad_1F_EventScript_15DF58 msgbox VictoryRoad_1F_Text_197A47, 6 end diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index 38378eb2e..6202a8acf 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -27,9 +27,9 @@ SpeakToBard: faceplayer msgbox gTextBard_HiImTheBard, MSGBOX_YESNO compare RESULT, YES - jumpeq yes_hear_song + goto_if_eq yes_hear_song compare RESULT, NO - jumpeq dont_hear_song + goto_if_eq dont_hear_song end yes_hear_song: @@ -40,7 +40,7 @@ yes_hear_song: special ScrSpecial_HasBardSongBeenChanged compare RESULT, FALSE @ Prompt new lyrics only if song hasn't been changed - jumpeq prompt_write_lyrics + goto_if_eq prompt_write_lyrics msgbox gTextBard_OhWhatAMovingSong, 4 release end @@ -53,9 +53,9 @@ dont_hear_song: prompt_write_lyrics: msgbox gTextBard_SoHowDoYouLikeMySong, MSGBOX_YESNO compare RESULT, YES - jumpeq write_lyrics + goto_if_eq write_lyrics compare RESULT, NO - jumpeq dont_write_lyrics + goto_if_eq dont_write_lyrics end write_lyrics: @@ -64,7 +64,7 @@ write_lyrics: lock faceplayer compare RESULT, NO - jumpeq dont_write_lyrics + goto_if_eq dont_write_lyrics msgbox gTextBard_ThankYouKindly, 4 setvar 0x8004, 1 @ Give the player ear rape again @@ -72,7 +72,7 @@ write_lyrics: pause 60 msgbox gTextBard_WasThatHowYouWanted, MSGBOX_YESNO compare RESULT, NO - jumpeq write_lyrics @ Keep looping until player responds YES + goto_if_eq write_lyrics @ Keep looping until player responds YES special ScrSpecial_SaveBardSongLyrics msgbox gTextBard_OkayThatsIt, 4 release @@ -95,7 +95,7 @@ SpeakToHipster: msgbox gTextHipster_TheyCallMeTheHipster, 4 special ScrSpecial_GetHipsterSpokenFlag compare RESULT, FALSE - jumpeq hipster_first_time + goto_if_eq hipster_first_time msgbox gTextHipster_TaughtYouAlready, 4 release end @@ -103,7 +103,7 @@ SpeakToHipster: hipster_first_time: special ScrSpecial_HipsterTeachWord compare RESULT, TRUE @ TRUE if player learned a new word - jumpeq teach_new_word + goto_if_eq teach_new_word msgbox gTextHipster_YouAlreadyKnowALot, 4 release end @@ -126,10 +126,10 @@ SpeakToTrader: faceplayer msgbox gTextTrader_Introduction, MSGBOX_YESNO compare RESULT, NO - jumpeq dont_want_to_trade + goto_if_eq dont_want_to_trade special ScrSpecial_GetTraderTradedFlag compare RESULT, TRUE - jumpeq already_traded + goto_if_eq already_traded message gTextTrader_MenuPrompt waittext goto do_trader_menu_get @@ -147,15 +147,15 @@ do_trader_menu_get: special ScrSpecial_TraderMenuGetDecoration waitstate compare 0x8004, 0 - jumpeq cancelled_get_menu + goto_if_eq cancelled_get_menu compare 0x8004, 65535 - jumpeq rare_item_cant_trade_away + goto_if_eq rare_item_cant_trade_away msgbox gTextTrader_ItemOnceBelongedTo, MSGBOX_YESNO compare RESULT, NO - jumpeq dont_want_item + goto_if_eq dont_want_item special ScrSpecial_DoesPlayerHaveNoDecorations compare RESULT, TRUE - jumpeq player_has_no_decorations + goto_if_eq player_has_no_decorations goto do_trader_menu_give end @@ -184,15 +184,15 @@ do_trader_menu_give: special ScrSpecial_TraderMenuGiveDecoration waitstate compare 0x8006, 0 - jumpeq cancelled_give_menu + goto_if_eq cancelled_give_menu compare 0x8006, 65535 - jumpeq decoration_is_in_use + goto_if_eq decoration_is_in_use special ScrSpecial_IsDecorationFull compare RESULT, 1 - jumpeq decorations_full + goto_if_eq decorations_full msgbox gTextTrader_SoWellTrade, MSGBOX_YESNO compare RESULT, NO - jumpeq do_trader_menu_give + goto_if_eq do_trader_menu_give special ScrSpecial_TraderDoDecorationTrade msgbox gTextTrader_ThenWellTrade, 2 end @@ -226,51 +226,51 @@ SpeakToStoryteller: faceplayer msgbox gTextStoryteller_Introduction, MSGBOX_YESNO compare RESULT, NO - jumpeq dont_hear_story + goto_if_eq dont_hear_story specialval RESULT, ScrSpecial_StorytellerGetFreeStorySlot compare RESULT, 0 @ If slot is 0, then the list is empty - jumpeq no_stories_recorded + goto_if_eq no_stories_recorded choose_story: message gTextStoryteller_WhichTale waittext special ScrSpecial_StorytellerStoryListMenu waitstate compare RESULT, FALSE - jumpeq cancel_story_menu + goto_if_eq cancel_story_menu setvar 0x8008, 1 special ScrSpecial_StorytellerDisplayStory waittext waitbutton specialval RESULT, ScrSpecial_StorytellerUpdateStat compare RESULT, FALSE - jumpeq no_stat_update + goto_if_eq no_stat_update goto stat_update cancel_story_menu: compare 0x8008, 0 - jumpeq dont_hear_story + goto_if_eq dont_hear_story goto yes_hear_story no_stat_update: msgbox gTextStoryteller_CouldThereBeOtherTrainers, 4 msgbox gTextStoryteller_HearAnotherLegendaryTale, MSGBOX_YESNO compare RESULT, YES - jumpeq choose_story + goto_if_eq choose_story yes_hear_story: specialval RESULT, ScrSpecial_HasStorytellerAlreadyRecorded compare RESULT, TRUE - jumpeq cant_record_story @ already recorded story + goto_if_eq cant_record_story @ already recorded story specialval RESULT, ScrSpecial_StorytellerGetFreeStorySlot compare RESULT, 4 - jumpeq cant_record_story @ story list is full + goto_if_eq cant_record_story @ story list is full goto prompt_record_story no_stories_recorded: msgbox gTextStoryteller_ButIKnowOfNoLegendaryTrainers, 4 prompt_record_story: msgbox gTextStoryteller_HaveYouAnyTales, MSGBOX_YESNO compare RESULT, NO - jumpeq dont_hear_story + goto_if_eq dont_hear_story specialval RESULT, ScrSpecial_StorytellerInitializeRandomStat compare RESULT, TRUE - jumpeq stat_update + goto_if_eq stat_update msgbox gTextStoryteller_ImNotSatisfied, 4 closebutton release @@ -306,25 +306,25 @@ SpeakToGiddy: faceplayer msgbox gTextGiddy_Introduction, MSGBOX_YESNO compare RESULT, YES - jumpeq yes_hear_giddy + goto_if_eq yes_hear_giddy compare RESULT, NO - jumpeq dont_hear_giddy + goto_if_eq dont_hear_giddy end yes_hear_giddy: special ScrSpecial_GiddyShouldTellAnotherTale compare RESULT, TRUE - jumpeq tell_giddy_tale + goto_if_eq tell_giddy_tale compare RESULT, FALSE - jumpeq bye_bye + goto_if_eq bye_bye end tell_another_giddy_tale: special ScrSpecial_GiddyShouldTellAnotherTale compare RESULT, TRUE - jumpeq also_i_was_thinking + goto_if_eq also_i_was_thinking compare RESULT, FALSE - jumpeq bye_bye + goto_if_eq bye_bye end also_i_was_thinking: @@ -338,9 +338,9 @@ tell_giddy_tale: waittext yesnobox 20, 8 compare RESULT, 1 - jumpeq tell_another_giddy_tale + goto_if_eq tell_another_giddy_tale compare RESULT, 0 - jumpeq tell_another_giddy_tale + goto_if_eq tell_another_giddy_tale end dont_hear_giddy: diff --git a/data/scripts/mystery_event_club.inc b/data/scripts/mystery_event_club.inc index e3577debf..97adca508 100644 --- a/data/scripts/mystery_event_club.inc +++ b/data/scripts/mystery_event_club.inc @@ -2,7 +2,7 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1B14:: @ 81B1B14 lock faceplayer checkflag 2053 - jumpeq PetalburgCity_PokemonCenter_1F_EventScript_1B1BDB + goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_1B1BDB msgbox PetalburgCity_PokemonCenter_1F_Text_1B1C97, 4 goto PetalburgCity_PokemonCenter_1F_EventScript_1B1B2D end @@ -30,11 +30,11 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1B7A:: @ 81B1B7A lock faceplayer compare 0x8004, 1 - callif 1, PetalburgCity_PokemonCenter_1F_EventScript_1B1C77 + call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_1B1C77 compare RESULT, 0 - jumpeq PetalburgCity_PokemonCenter_1F_EventScript_1B1BB1 + goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_1B1BB1 compare RESULT, 1 - jumpeq PetalburgCity_PokemonCenter_1F_EventScript_1B1BBB + goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_1B1BBB end PetalburgCity_PokemonCenter_1F_EventScript_1B1BB1:: @ 81B1BB1 @@ -84,11 +84,11 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1C36:: @ 81B1C36 lock faceplayer compare 0x8004, 1 - callif 1, PetalburgCity_PokemonCenter_1F_EventScript_1B1C77 + call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_1B1C77 compare RESULT, 0 - jumpeq PetalburgCity_PokemonCenter_1F_EventScript_1B1BB1 + goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_1B1BB1 compare RESULT, 1 - jumpeq PetalburgCity_PokemonCenter_1F_EventScript_1B1BBB + goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_1B1BBB end PetalburgCity_PokemonCenter_1F_EventScript_1B1C6D:: @ 81B1C6D @@ -98,9 +98,9 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1C6D:: @ 81B1C6D PetalburgCity_PokemonCenter_1F_EventScript_1B1C77:: @ 81B1C77 checkflag 2059 - jumpif 0, PetalburgCity_PokemonCenter_1F_EventScript_1B1C96 + goto_if 0, PetalburgCity_PokemonCenter_1F_EventScript_1B1C96 checkflag 2124 - jumpeq PetalburgCity_PokemonCenter_1F_EventScript_1B1C96 + goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_1B1C96 setflag 2124 msgbox PetalburgCity_PokemonCenter_1F_Text_1B21CC, 3 release diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index 776ba0a8b..bbbc0952d 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -9,9 +9,9 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6956:: @ 81B6956 move 0x8004, LittlerootTown_BrendansHouse_1F_Movement_1A0839 waitmove 0 compare 0x8005, 0 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1B699F + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B699F compare 0x8005, 1 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1B69AA + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B69AA msgbox LittlerootTown_BrendansHouse_1F_Text_172453, 4 closebutton setvar 0x4092, 4 @@ -60,7 +60,7 @@ LittlerootTown_MaysHouse_2F_EventScript_1B69DF:: @ 81B69DF LittlerootTown_BrendansHouse_2F_EventScript_1B69EB:: @ 81B69EB LittlerootTown_MaysHouse_2F_EventScript_1B69EB:: @ 81B69EB checkflag 81 - jumpeq LittlerootTown_BrendansHouse_2F_EventScript_1B6A91 + goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_1B6A91 msgbox LittlerootTown_BrendansHouse_2F_Text_172E18, 4 call LittlerootTown_BrendansHouse_2F_EventScript_1B6A9B pause 30 @@ -70,9 +70,9 @@ LittlerootTown_MaysHouse_2F_EventScript_1B69EB:: @ 81B69EB setflag 755 checkgender compare RESULT, 0 - callif 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6A31 + call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6A31 compare RESULT, 1 - callif 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6A61 + call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6A61 playsfx 9 disappear 0x8008 releaseall @@ -253,17 +253,17 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6BE9:: @ 81B6BE9 lock faceplayer compare 0x4082, 4 - jumpeq LittlerootTown_BrendansHouse_1F_EventScript_1B6C33 + goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C33 compare 0x408c, 4 - jumpeq LittlerootTown_BrendansHouse_1F_EventScript_1B6C33 + goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C33 checkflag 2059 - jumpeq LittlerootTown_BrendansHouse_1F_EventScript_1B6C3D + goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C3D checkflag 82 - jumpeq LittlerootTown_BrendansHouse_1F_EventScript_1B6C72 + goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C72 compare 0x4001, 1 - jumpeq LittlerootTown_BrendansHouse_1F_EventScript_1B6C80 + goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C80 compare 0x4092, 7 - jumpif 4, LittlerootTown_BrendansHouse_1F_EventScript_1B6C9C + goto_if 4, LittlerootTown_BrendansHouse_1F_EventScript_1B6C9C msgbox LittlerootTown_BrendansHouse_1F_Text_172429, 4 release end @@ -275,11 +275,11 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6C33:: @ 81B6C33 LittlerootTown_BrendansHouse_1F_EventScript_1B6C3D:: @ 81B6C3D checkflag 133 - jumpeq LittlerootTown_BrendansHouse_1F_EventScript_1B6C72 + goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C72 msgbox LittlerootTown_BrendansHouse_1F_Text_172782, 4 giveitem ITEM_AMULET_COIN compare RESULT, 0 - jumpeq LittlerootTown_BrendansHouse_1F_EventScript_1A029B + goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1A029B msgbox LittlerootTown_BrendansHouse_1F_Text_1727CD, 4 setflag 133 release @@ -363,13 +363,13 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6CDE:: @ 81B6CDE lockall checkgender compare RESULT, 0 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DAD + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DAD compare RESULT, 1 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DBD + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DBD compare 0x8008, 0 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E1D + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E1D compare 0x8008, 1 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E28 + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E28 move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1A0839 waitmove 0 playsfx 21 @@ -379,23 +379,23 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6CDE:: @ 81B6CDE waitmove 0 pause 20 compare 0x8008, 0 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DCD + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DCD compare 0x8008, 1 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DD8 + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DD8 msgbox LittlerootTown_BrendansHouse_1F_Text_17298B, 4 giveitem ITEM_SS_TICKET msgbox LittlerootTown_BrendansHouse_1F_Text_172A7D, 4 closebutton compare 0x8008, 0 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DE3 + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DE3 compare 0x8008, 1 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DEE + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DEE msgbox LittlerootTown_BrendansHouse_1F_Text_172B5E, 4 closebutton compare 0x8008, 0 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DF9 + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DF9 compare 0x8008, 1 - callif 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E0B + call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E0B playsfx 8 disappear 0x8009 setflag 291 diff --git a/data/scripts/pokeblocks.inc b/data/scripts/pokeblocks.inc index 05f91a3aa..0cf3163fd 100644 --- a/data/scripts/pokeblocks.inc +++ b/data/scripts/pokeblocks.inc @@ -40,24 +40,24 @@ VerdanturfTown_ContestLobby_EventScript_1B7681:: @ 81B7681 lockall msgbox FallarborTown_ContestLobby_Text_1B6E63, 5 compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1B76A1 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B76A1 compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1B76E5 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B76E5 end FallarborTown_ContestLobby_EventScript_1B76A1:: @ 81B76A1 checkitem ITEM_POKEBLOCK_CASE, 1 compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1B7780 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B7780 specialval RESULT, PlayerHasBerries compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1B770E + goto_if_eq FallarborTown_ContestLobby_EventScript_1B770E msgbox FallarborTown_ContestLobby_Text_1B6E9D, 4 specialval RESULT, sub_810CA00 compare RESULT, 65535 - jumpif 5, FallarborTown_ContestLobby_EventScript_1B76EF + goto_if 5, FallarborTown_ContestLobby_EventScript_1B76EF compare RESULT, 65535 - jumpeq FallarborTown_ContestLobby_EventScript_1B7776 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B7776 end FallarborTown_ContestLobby_EventScript_1B76E5:: @ 81B76E5 @@ -68,16 +68,16 @@ FallarborTown_ContestLobby_EventScript_1B76E5:: @ 81B76E5 FallarborTown_ContestLobby_EventScript_1B76EF:: @ 81B76EF msgbox FallarborTown_ContestLobby_Text_1B6ED0, 5 compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1B7734 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B7734 compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1B7726 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B7726 end FallarborTown_ContestLobby_EventScript_1B770E:: @ 81B770E msgbox FallarborTown_ContestLobby_Text_1B6FF0, 4 checkdailyflags checkflag 2241 - jumpeq FallarborTown_ContestLobby_EventScript_1B774F + goto_if_eq FallarborTown_ContestLobby_EventScript_1B774F goto FallarborTown_ContestLobby_EventScript_1B7759 end @@ -150,9 +150,9 @@ VerdanturfTown_ContestLobby_EventScript_1B77B6:: @ 81B77B6 msgbox FallarborTown_ContestLobby_Text_1B742F, 4 specialval RESULT, PlayerHasBerries compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1B77DC + goto_if_eq FallarborTown_ContestLobby_EventScript_1B77DC compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1B77E6 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B77E6 end FallarborTown_ContestLobby_EventScript_1B77DC:: @ 81B77DC @@ -163,7 +163,7 @@ FallarborTown_ContestLobby_EventScript_1B77DC:: @ 81B77DC FallarborTown_ContestLobby_EventScript_1B77E6:: @ 81B77E6 checkdailyflags checkflag 2241 - jumpeq FallarborTown_ContestLobby_EventScript_1B77F6 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B77F6 goto FallarborTown_ContestLobby_EventScript_1B7800 end @@ -210,23 +210,23 @@ VerdanturfTown_ContestLobby_EventScript_1B783B:: @ 81B783B lockall specialval RESULT, PlayerHasBerries compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1B7897 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B7897 checkitem ITEM_POKEBLOCK_CASE, 1 compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1B7942 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B7942 specialval RESULT, sub_810CA00 compare RESULT, 65535 - jumpif 5, FallarborTown_ContestLobby_EventScript_1B7878 + goto_if 5, FallarborTown_ContestLobby_EventScript_1B7878 compare RESULT, 65535 - jumpeq FallarborTown_ContestLobby_EventScript_1B7938 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B7938 end FallarborTown_ContestLobby_EventScript_1B7878:: @ 81B7878 msgbox FallarborTown_ContestLobby_Text_1B727C, 5 compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1B78A1 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B78A1 compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1B7936 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B7936 end FallarborTown_ContestLobby_EventScript_1B7897:: @ 81B7897 @@ -237,21 +237,21 @@ FallarborTown_ContestLobby_EventScript_1B7897:: @ 81B7897 FallarborTown_ContestLobby_EventScript_1B78A1:: @ 81B78A1 call S_DoSaveDialog compare RESULT, 0 - jumpeq FallarborTown_ContestLobby_EventScript_1B7936 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B7936 message FallarborTown_ContestLobby_Text_1B7304 waittext special sub_8083614 waitstate compare RESULT, 1 - jumpeq FallarborTown_ContestLobby_EventScript_1B7980 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B7980 compare RESULT, 2 - jumpeq FallarborTown_ContestLobby_EventScript_1B794C + goto_if_eq FallarborTown_ContestLobby_EventScript_1B794C compare RESULT, 3 - jumpeq FallarborTown_ContestLobby_EventScript_1B7959 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B7959 compare RESULT, 5 - jumpeq FallarborTown_ContestLobby_EventScript_1B7966 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B7966 compare RESULT, 6 - jumpeq FallarborTown_ContestLobby_EventScript_1B7973 + goto_if_eq FallarborTown_ContestLobby_EventScript_1B7973 end FallarborTown_ContestLobby_EventScript_1B78F3:: @ 81B78F3 diff --git a/data/scripts/safari_zone.inc b/data/scripts/safari_zone.inc index 0394329ee..6098c7dce 100644 --- a/data/scripts/safari_zone.inc +++ b/data/scripts/safari_zone.inc @@ -15,7 +15,7 @@ gUnknown_081C342D:: @ 81C342D lockall msgbox UnknownString_81C34B2, 5 compare RESULT, 1 - jumpeq EventScript_1C3443 + goto_if_eq EventScript_1C3443 releaseall end @@ -44,10 +44,10 @@ gUnknown_081C346A:: @ 81C346A lockall special SafariZoneGetPokeblockNameInFeeder compare RESULT, -1 - jumpif 5, EventScript_1C34A9 + goto_if 5, EventScript_1C34A9 msgbox UnknownString_81C354E, 5 compare RESULT, 1 - jumpeq EventScript_1C348E + goto_if_eq EventScript_1C348E releaseall end @@ -56,7 +56,7 @@ EventScript_1C348E: special sub_810BAF4 waitstate compare RESULT, -1 - jumpif 5, EventScript_1C34A0 + goto_if 5, EventScript_1C34A0 end EventScript_1C34A0: diff --git a/data/scripts/secret_power_tm.inc b/data/scripts/secret_power_tm.inc index 629125030..eae7db0c0 100644 --- a/data/scripts/secret_power_tm.inc +++ b/data/scripts/secret_power_tm.inc @@ -3,7 +3,7 @@ Route111_EventScript_1A3858:: @ 81A3858 faceplayer msgbox Route111_Text_1A3520, 5 compare RESULT, 1 - jumpeq Route111_EventScript_1A3877 + goto_if_eq Route111_EventScript_1A3877 msgbox Route111_Text_1A37B5, 4 release end @@ -11,17 +11,17 @@ Route111_EventScript_1A3858:: @ 81A3858 Route111_EventScript_1A3877:: @ 81A3877 giveitem ITEM_TM43 compare RESULT, 0 - jumpeq Route111_EventScript_1A38D9 + goto_if_eq Route111_EventScript_1A38D9 msgbox Route111_Text_1A35C5, 4 closebutton setflag 96 clearflag 948 compare FACING, 3 - callif 1, Route111_EventScript_1A38C3 + call_if 1, Route111_EventScript_1A38C3 compare FACING, 4 - callif 1, Route111_EventScript_1A38C3 + call_if 1, Route111_EventScript_1A38C3 compare FACING, 2 - callif 1, Route111_EventScript_1A38CE + call_if 1, Route111_EventScript_1A38CE disappear LAST_TALKED release end diff --git a/data/scripts/tv.inc b/data/scripts/tv.inc index f91295e49..66a923c5e 100644 --- a/data/scripts/tv.inc +++ b/data/scripts/tv.inc @@ -4,30 +4,30 @@ Event_TV:: @ 81A6E72 special sub_80C2014 specialval RESULT, CheckForBigMovieOrEmergencyNewsOnTV compare RESULT, 2 - jumpeq EventScript_1A6F01 + goto_if_eq EventScript_1A6F01 compare RESULT, 1 - jumpeq EventScript_1A6F0B + goto_if_eq EventScript_1A6F0B checkflag 2098 - jumpif 0, EventScript_1A6EF1 + goto_if 0, EventScript_1A6EF1 checkflag 2097 - jumpeq EventScript_1A6EF1 + goto_if_eq EventScript_1A6EF1 specialval RESULT, IsTVShowInSearchOfTrainersAiring compare RESULT, 1 - jumpeq EventScript_1A6F66 + goto_if_eq EventScript_1A6F66 goto EventScript_1A6F50 end EventScript_1A6EBB: specialval 0x8004, special_0x44 compare 0x8004, 255 - jumpeq EventScript_1A6F3F + goto_if_eq EventScript_1A6F3F specialval RESULT, special_0x4a compare RESULT, 255 - jumpeq EventScript_1A6F3F + goto_if_eq EventScript_1A6F3F copyvar 0x8004, RESULT specialval RESULT, sub_80BDA0C compare RESULT, 0 - jumpif 5, EventScript_1A6F21 + goto_if 5, EventScript_1A6F21 end EventScript_1A6EF1: @@ -60,7 +60,7 @@ EventScript_1A6F21: waittext waitbutton compare RESULT, 1 - jumpif 5, EventScript_1A6F21 + goto_if 5, EventScript_1A6F21 goto EventScript_1A6F37 end @@ -79,7 +79,7 @@ EventScript_1A6F3F: EventScript_1A6F50: special sub_80BECE8 compare RESULT, 0 - jumpeq EventScript_1A6EBB + goto_if_eq EventScript_1A6EBB waittext waitbutton goto EventScript_1A6F37 @@ -90,6 +90,6 @@ EventScript_1A6F66: waittext waitbutton compare RESULT, 0 - jumpeq EventScript_1A6F66 + goto_if_eq EventScript_1A6F66 goto EventScript_1A6F37 end -- cgit v1.2.3 From 1e2601a0287fdacfb8f0d680fbe82a274414ea65 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 24 Sep 2017 17:10:51 -0500 Subject: more script command renaming --- asm/macros/event.inc | 44 +-- data-de/event_scripts.s | 368 ++++++++++----------- data-de/field_move_scripts.inc | 28 +- data/event_scripts.s | 368 ++++++++++----------- data/field_move_scripts.inc | 28 +- data/scripts/berry_tree.inc | 24 +- data/scripts/cable_club.inc | 100 +++--- data/scripts/contest_hall.inc | 210 ++++++------ data/scripts/day_care.inc | 56 ++-- data/scripts/gabby_and_ty.inc | 18 +- data/scripts/magma_chimney.inc | 8 +- data/scripts/maps/AbandonedShip_CaptainsOffice.inc | 2 +- data/scripts/maps/AbandonedShip_Corridors_B1F.inc | 2 +- .../maps/AbandonedShip_HiddenFloorCorridors.inc | 8 +- .../maps/AbandonedShip_HiddenFloorRooms.inc | 16 +- data/scripts/maps/AbandonedShip_Rooms2_1F.inc | 4 +- data/scripts/maps/BattleTower_Corridor.inc | 4 +- data/scripts/maps/BattleTower_Lobby.inc | 30 +- data/scripts/maps/BattleTower_Outside.inc | 6 +- data/scripts/maps/CaveOfOrigin_B4F.inc | 2 +- data/scripts/maps/DewfordTown.inc | 20 +- data/scripts/maps/DewfordTown_Gym.inc | 18 +- data/scripts/maps/DewfordTown_Hall.inc | 24 +- data/scripts/maps/DewfordTown_House2.inc | 2 +- data/scripts/maps/EverGrandeCity_ChampionsRoom.inc | 12 +- data/scripts/maps/EverGrandeCity_DrakesRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_GlaciasRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_HallOfFame.inc | 4 +- data/scripts/maps/EverGrandeCity_PhoebesRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_PokemonLeague.inc | 4 +- data/scripts/maps/EverGrandeCity_SidneysRoom.inc | 2 +- data/scripts/maps/FallarborTown_House1.inc | 6 +- data/scripts/maps/FallarborTown_House2.inc | 10 +- data/scripts/maps/FortreeCity.inc | 4 +- data/scripts/maps/FortreeCity_Gym.inc | 2 +- data/scripts/maps/FortreeCity_House1.inc | 6 +- data/scripts/maps/FortreeCity_House2.inc | 2 +- data/scripts/maps/FortreeCity_House4.inc | 2 +- data/scripts/maps/GraniteCave_StevensRoom.inc | 10 +- data/scripts/maps/InsideOfTruck.inc | 4 +- data/scripts/maps/JaggedPass.inc | 6 +- data/scripts/maps/LavaridgeTown.inc | 52 +-- data/scripts/maps/LavaridgeTown_Gym_1F.inc | 4 +- data/scripts/maps/LavaridgeTown_HerbShop.inc | 2 +- data/scripts/maps/LilycoveCity.inc | 18 +- data/scripts/maps/LilycoveCity_ContestLobby.inc | 42 +-- .../scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc | 2 +- .../maps/LilycoveCity_DepartmentStoreElevator.inc | 10 +- .../maps/LilycoveCity_DepartmentStoreRooftop.inc | 30 +- .../maps/LilycoveCity_DepartmentStore_1F.inc | 22 +- data/scripts/maps/LilycoveCity_Harbor.inc | 16 +- data/scripts/maps/LilycoveCity_House2.inc | 2 +- data/scripts/maps/LilycoveCity_House3.inc | 2 +- .../maps/LilycoveCity_LilycoveMuseum_1F.inc | 8 +- .../maps/LilycoveCity_LilycoveMuseum_2F.inc | 2 +- .../maps/LilycoveCity_MoveDeletersHouse.inc | 8 +- .../maps/LilycoveCity_PokemonTrainerFanClub.inc | 76 ++--- data/scripts/maps/LittlerootTown.inc | 96 +++--- .../maps/LittlerootTown_BrendansHouse_1F.inc | 10 +- .../maps/LittlerootTown_BrendansHouse_2F.inc | 12 +- data/scripts/maps/LittlerootTown_MaysHouse_1F.inc | 16 +- data/scripts/maps/LittlerootTown_MaysHouse_2F.inc | 28 +- .../maps/LittlerootTown_ProfessorBirchsLab.inc | 28 +- data/scripts/maps/MauvilleCity.inc | 8 +- data/scripts/maps/MauvilleCity_BikeShop.inc | 16 +- data/scripts/maps/MauvilleCity_GameCorner.inc | 86 ++--- data/scripts/maps/MauvilleCity_Gym.inc | 12 +- data/scripts/maps/MauvilleCity_House2.inc | 6 +- data/scripts/maps/MeteorFalls_1F_2R.inc | 6 +- data/scripts/maps/MossdeepCity.inc | 4 +- data/scripts/maps/MossdeepCity_GameCorner_1F.inc | 28 +- data/scripts/maps/MossdeepCity_GameCorner_B1F.inc | 6 +- data/scripts/maps/MossdeepCity_Gym.inc | 2 +- data/scripts/maps/MossdeepCity_House1.inc | 2 +- data/scripts/maps/MossdeepCity_House2.inc | 4 +- data/scripts/maps/MossdeepCity_House3.inc | 2 +- data/scripts/maps/MossdeepCity_House4.inc | 2 +- data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc | 6 +- data/scripts/maps/MossdeepCity_StevensHouse.inc | 8 +- data/scripts/maps/MtChimney.inc | 12 +- data/scripts/maps/MtChimney_CableCarStation.inc | 6 +- data/scripts/maps/MtPyre_1F.inc | 2 +- data/scripts/maps/MtPyre_6F.inc | 2 +- data/scripts/maps/MtPyre_Exterior.inc | 2 +- data/scripts/maps/MtPyre_Summit.inc | 36 +- data/scripts/maps/NewMauville_Entrance.inc | 6 +- data/scripts/maps/NewMauville_Inside.inc | 8 +- data/scripts/maps/OldaleTown.inc | 6 +- data/scripts/maps/PacifidlogTown_House2.inc | 10 +- data/scripts/maps/PacifidlogTown_House3.inc | 6 +- data/scripts/maps/PacifidlogTown_House4.inc | 4 +- data/scripts/maps/PacifidlogTown_House5.inc | 2 +- data/scripts/maps/PetalburgCity.inc | 20 +- data/scripts/maps/PetalburgCity_Gym.inc | 170 +++++----- .../maps/PetalburgCity_PokemonCenter_1F.inc | 8 +- data/scripts/maps/PetalburgWoods.inc | 6 +- data/scripts/maps/Route102.inc | 2 +- data/scripts/maps/Route103.inc | 10 +- data/scripts/maps/Route104.inc | 12 +- data/scripts/maps/Route104_MrBrineysHouse.inc | 8 +- .../maps/Route104_PrettyPetalFlowerShop.inc | 10 +- data/scripts/maps/Route106.inc | 2 +- data/scripts/maps/Route107.inc | 2 +- data/scripts/maps/Route109.inc | 8 +- data/scripts/maps/Route109_SeashoreHouse.inc | 8 +- data/scripts/maps/Route110.inc | 42 +-- .../Route110_SeasideCyclingRoadNorthEntrance.inc | 8 +- .../Route110_SeasideCyclingRoadSouthEntrance.inc | 2 +- data/scripts/maps/Route110_TrickHouseEnd.inc | 26 +- data/scripts/maps/Route110_TrickHouseEntrance.inc | 120 +++---- data/scripts/maps/Route110_TrickHousePuzzle1.inc | 4 +- data/scripts/maps/Route110_TrickHousePuzzle2.inc | 10 +- data/scripts/maps/Route110_TrickHousePuzzle3.inc | 42 +-- data/scripts/maps/Route110_TrickHousePuzzle4.inc | 2 +- data/scripts/maps/Route110_TrickHousePuzzle5.inc | 102 +++--- data/scripts/maps/Route110_TrickHousePuzzle6.inc | 2 +- data/scripts/maps/Route110_TrickHousePuzzle7.inc | 6 +- data/scripts/maps/Route110_TrickHousePuzzle8.inc | 2 +- data/scripts/maps/Route111.inc | 34 +- data/scripts/maps/Route111_OldLadysRestStop.inc | 8 +- .../maps/Route111_WinstrateFamilysHouse.inc | 2 +- data/scripts/maps/Route112.inc | 2 +- data/scripts/maps/Route112_CableCarStation.inc | 6 +- data/scripts/maps/Route113.inc | 8 +- data/scripts/maps/Route113_GlassWorkshop.inc | 52 +-- data/scripts/maps/Route114.inc | 8 +- data/scripts/maps/Route114_FossilManiacsHouse.inc | 2 +- data/scripts/maps/Route114_FossilManiacsTunnel.inc | 4 +- data/scripts/maps/Route114_LanettesHouse.inc | 6 +- data/scripts/maps/Route115.inc | 6 +- data/scripts/maps/Route116.inc | 28 +- data/scripts/maps/Route117.inc | 12 +- data/scripts/maps/Route118.inc | 14 +- data/scripts/maps/Route119.inc | 34 +- data/scripts/maps/Route119_WeatherInstitute_1F.inc | 4 +- data/scripts/maps/Route119_WeatherInstitute_2F.inc | 6 +- data/scripts/maps/Route120.inc | 40 +-- data/scripts/maps/Route121.inc | 4 +- data/scripts/maps/Route121_SafariZoneEntrance.inc | 12 +- data/scripts/maps/Route123.inc | 8 +- data/scripts/maps/Route123_BerryMastersHouse.inc | 32 +- data/scripts/maps/Route124.inc | 6 +- .../maps/Route124_DivingTreasureHuntersHouse.inc | 20 +- data/scripts/maps/Route125.inc | 2 +- data/scripts/maps/Route128.inc | 4 +- data/scripts/maps/Route130.inc | 2 +- data/scripts/maps/RustboroCity.inc | 28 +- data/scripts/maps/RustboroCity_DevonCorp_2F.inc | 34 +- data/scripts/maps/RustboroCity_DevonCorp_3F.inc | 4 +- data/scripts/maps/RustboroCity_Flat2_2F.inc | 2 +- data/scripts/maps/RustboroCity_Gym.inc | 4 +- data/scripts/maps/RustboroCity_House1.inc | 6 +- data/scripts/maps/RustboroCity_PokemonSchool.inc | 6 +- data/scripts/maps/RusturfTunnel.inc | 24 +- data/scripts/maps/SSTidalCorridor.inc | 12 +- data/scripts/maps/SSTidalRooms.inc | 2 +- data/scripts/maps/SafariZone_Southeast.inc | 6 +- data/scripts/maps/SealedChamber_InnerRoom.inc | 2 +- .../scripts/maps/ShoalCave_LowTideEntranceRoom.inc | 20 +- data/scripts/maps/ShoalCave_LowTideInnerRoom.inc | 12 +- data/scripts/maps/ShoalCave_LowTideLowerRoom.inc | 4 +- data/scripts/maps/ShoalCave_LowTideStairsRoom.inc | 2 +- data/scripts/maps/SlateportCity.inc | 24 +- data/scripts/maps/SlateportCity_ContestHall.inc | 2 +- data/scripts/maps/SlateportCity_Harbor.inc | 34 +- data/scripts/maps/SlateportCity_House1.inc | 20 +- data/scripts/maps/SlateportCity_House2.inc | 2 +- .../maps/SlateportCity_OceanicMuseum_1F.inc | 10 +- .../maps/SlateportCity_OceanicMuseum_2F.inc | 10 +- data/scripts/maps/SlateportCity_PokemonFanClub.inc | 28 +- data/scripts/maps/SootopolisCity.inc | 14 +- data/scripts/maps/SootopolisCity_Gym_1F.inc | 8 +- data/scripts/maps/SootopolisCity_House2.inc | 4 +- data/scripts/maps/SootopolisCity_House3.inc | 2 +- data/scripts/maps/SootopolisCity_House6.inc | 4 +- data/scripts/maps/SootopolisCity_House8.inc | 20 +- data/scripts/maps/SouthernIsland_Exterior.inc | 2 +- data/scripts/maps/SouthernIsland_Interior.inc | 4 +- data/scripts/maps/Underwater_SealedChamber.inc | 4 +- data/scripts/maps/UnknownMap_25_34.inc | 18 +- data/scripts/maps/VerdanturfTown_ContestLobby.inc | 2 +- data/scripts/maps/VictoryRoad_1F.inc | 2 +- data/scripts/mauville_man.inc | 74 ++--- data/scripts/mystery_event_club.inc | 12 +- data/scripts/players_house.inc | 38 +-- data/scripts/pokeblocks.inc | 44 +-- data/scripts/safari_zone.inc | 8 +- data/scripts/secret_power_tm.inc | 10 +- data/scripts/tv.inc | 18 +- src/event_data.c | 4 +- src/scrcmd.c | 2 + 191 files changed, 1924 insertions(+), 1924 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 8aff02c04..685e53363 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -64,51 +64,51 @@ .endm @ If the result of the last comparison matches condition (see Comparison operators), calls the standard function at index function. - .macro callstdif condition, function + .macro callstd_if condition, function .byte 0x0b .byte \condition .byte \function .endm @ Executes a script stored in a default RAM location. - .macro jumpram + .macro gotoram .byte 0x0c .endm @ Terminates script execution and "resets the script RAM". - .macro die + .macro killscript .byte 0x0d .endm - @ Pads the specified value to a dword, and then writes that dword to a predefined address (0x0203AAA8). - .macro setbyte value + @ Sets mystery event status + .macro setmestatus value .byte 0x0e .byte \value .endm - @ Sets the specified script bank to value. - .macro loadptr destination, value + @ Sets the specified script bank to immediate value. + .macro loadword destination, value .byte 0x0f .byte \destination .4byte \value .endm - @ Sets the specified script bank to value. - .macro setbufferbyte destination, value + @ Sets the specified script bank to immediate value. + .macro loadbyte destination, value .byte 0x10 .byte \destination .byte \value .endm @ Sets the byte at offset to value. - .macro writebytetooffset value, offset + .macro writebytetoaddr value, offset .byte 0x11 .byte \value .4byte \offset .endm @ Copies the byte value at source into the specified script bank. - .macro loadbytefrompointer destination, source + .macro loadbytefromaddr destination, source .byte 0x12 .byte \destination .4byte \source @@ -122,7 +122,7 @@ .endm @ Copies the contents of bank source into bank destination. - .macro copybuffers destination, source + .macro copylocal destination, source .byte 0x14 .byte \destination .byte \source @@ -171,56 +171,56 @@ .endm @ Compares the values of script banks a and b, after forcing the values to bytes. - .macro comparebuffers byte1, byte2 + .macro compare_local_to_local byte1, byte2 .byte 0x1b .byte \byte1 .byte \byte2 .endm @ Compares the least-significant byte of the value of script bank a to a fixed byte value (b). - .macro comparebuffertobyte a, b + .macro compare_local_to_imm a, b .byte 0x1c .byte \a .byte \b .endm @ Compares the least-significant byte of the value of script bank a to the byte located at offset b. - .macro comparebuffertoptrbyte a, b + .macro compare_local_to_addr a, b .byte 0x1d .byte \a .4byte \b .endm @ Compares the byte located at offset a to the least-significant byte of the value of script bank b. - .macro compareptrbytetobuffer a, b + .macro compare_addr_to_local a, b .byte 0x1e .4byte \a .byte \b .endm @ Compares the byte located at offset a to a fixed byte value (b). - .macro compareptrbytetobyte a, b + .macro compare_addr_to_imm a, b .byte 0x1f .4byte \a .byte \b .endm @ Compares the byte located at offset a to the byte located at offset b. - .macro compareptrbytes a, b + .macro compare_addr_to_addr a, b .byte 0x20 .4byte \a .4byte \b .endm @ Compares the value of `var` to a fixed word value (b). - .macro compare var, value + .macro compare_var_to_imm var, value .byte 0x21 .2byte \var .2byte \value .endm @ Compares the value of `var` to the value of `var2`. - .macro comparevars var1, var2 + .macro compare_var_to_var var1, var2 .byte 0x22 .2byte \var1 .2byte \var2 @@ -1484,12 +1484,12 @@ .endm .macro case condition, dest - compare 0x8000, \condition + compare_var_to_imm 0x8000, \condition goto_if_eq \dest .endm .macro msgbox text, type=4 - loadptr 0, \text + loadword 0, \text callstd \type .endm diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index a06371e58..59d69d8bd 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -430,7 +430,7 @@ EventScript_15F3E2: EventScript_15F419: msgbox UnknownString_81A38FB, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_15F384 closebutton special SecretBasePC_PackUp @@ -476,13 +476,13 @@ gUnknown_0815F49A:: @ 815F49A EventScript_15F4A1: special sub_80BC56C - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_15F4E0 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq EventScript_15F503 special sub_80BC224 msgbox UnknownString_81A3958, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_15F452 msgbox UnknownString_81A3A22, 3 special sub_80BC5BC @@ -492,7 +492,7 @@ EventScript_15F4A1: EventScript_15F4E0: msgbox UnknownString_81A3982, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_15F452 msgbox UnknownString_81A3A3A, 3 special sub_80BC5BC @@ -526,13 +526,13 @@ gUnknown_0815F523:: @ 815F523 gUnknown_0815F528:: @ 815F528 special GetShieldToyTVDecorationInfo - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_15F558 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_15F561 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq EventScript_15F56A - compare RESULT, 3 + compare_var_to_imm RESULT, 3 goto_if_eq EventScript_15F573 end @@ -942,7 +942,7 @@ gUnknown_0819F818:: @ 819F818 move LAST_TALKED, Movement_19F8F0 waitmove 0 specialval RESULT, ScrSpecial_HasTrainerBeenFought - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if 5, EventScript_19F83F special PlayTrainerEncounterMusic special sub_8082524 @@ -956,10 +956,10 @@ gUnknown_0819F840:: @ 819F840 faceplayer call EventScript_19F8E5 specialval RESULT, ScrSpecial_HasTrainerBeenFought - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if 5, EventScript_19F877 special CheckForAlivePartyMons - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if 5, EventScript_19F870 special PlayTrainerEncounterMusic special sub_8082524 @@ -985,7 +985,7 @@ gUnknown_0819F878:: @ 819F878 gUnknown_0819F887:: @ 819F887 call EventScript_19F8E5 specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_19F8AD special PlayTrainerEncounterMusic special sub_8082524 @@ -1002,10 +1002,10 @@ EventScript_19F8AD: gUnknown_0819F8AE:: @ 819F8AE specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_19F8DD special CheckForAlivePartyMons - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if 5, EventScript_19F8DE special PlayTrainerEncounterMusic special sub_8082524 @@ -1042,15 +1042,15 @@ EventScript_19F8F2: waitbutton reptrainerbattle specialval RESULT, ScrSpecial_GetTrainerBattleMode - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_19F934 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq EventScript_19F936 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_19F936 - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq EventScript_19F936 - compare RESULT, 8 + compare_var_to_imm RESULT, 8 goto_if_eq EventScript_19F936 EventScript_19F934: @@ -1341,11 +1341,11 @@ EventScript_19FC84: return gUnknown_0819FC9F:: @ 819FC9F - compare 0x4096, 1 + compare_var_to_imm 0x4096, 1 goto_if_eq EventScript_19FCC1 - compare 0x4096, 2 + compare_var_to_imm 0x4096, 2 goto_if_eq EventScript_19FCD7 - compare 0x4096, 3 + compare_var_to_imm 0x4096, 3 goto_if_eq EventScript_19FCF0 end @@ -1439,9 +1439,9 @@ VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B lock faceplayer msgbox gText_NurseJoy_Welcome, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FD7C - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDC7 end @@ -1477,9 +1477,9 @@ OldaleTown_PokemonCenter_1F_EventScript_19FDC7:: @ 819FDC7 OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE specialval RESULT, IsPokerusInParty - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDEA - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDB0 end @@ -1504,9 +1504,9 @@ Std_ObtainItem_: @ 819FE07 bufferitem 1, 0x8000 checkitemtype 0x8000 call GetItem_HandlePocket - compare 0x8007, 0x1 + compare_var_to_imm 0x8007, 0x1 call_if 1, Std_ObtainItem_Success - compare 0x8007, 0x0 + compare_var_to_imm 0x8007, 0x0 call_if 1, Std_ObtainItem_Fail return @@ -1521,31 +1521,31 @@ GetItem_HandlePocket: GetItem_HandlePocket_Items: bufferstd 2, 0xE - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_KeyItems: bufferstd 2, 0xF - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_PokeBalls: bufferstd 2, 0x10 - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_TMsHMs: bufferstd 2, 0x11 - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 call_if 1, PlayGetTMHMFanfare return GetItem_HandlePocket_Berries: bufferstd 2, 0x12 - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 call_if 1, PlayGetItemFanfare return @@ -1577,9 +1577,9 @@ Std_ObtainDecoration: @ 819FEDA Std_ObtainDecoration_: @ 819FEE8 bufferdecor 1, 0x8000 - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 call_if 1, Std_ObtainDecoration_Success - compare 0x8007, 0 + compare_var_to_imm 0x8007, 0 call_if 1, Std_ObtainDecoration_Fail return @@ -1605,9 +1605,9 @@ Std_FindItem: @ 819FF21 bufferitem 1, 0x8000 checkitemtype 0x8000 call GetItem_HandlePocket - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 call_if 1, Std_FindItem_Success - compare 0x8007, 0 + compare_var_to_imm 0x8007, 0 call_if 1, Std_FindItem_Fail release return @@ -1634,9 +1634,9 @@ HiddenItemScript:: @ 819FF7B bufferitem 0x1, 0x8005 checkitemtype 0x8005 call GetItem_HandlePocket - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 goto_if_eq HiddenItemScript_Success - compare 0x8007, 0 + compare_var_to_imm 0x8007, 0 goto_if_eq HiddenItemScript_Fail end @@ -1660,9 +1660,9 @@ UnusedMixRecordsScript: @ 819FFD5 lock faceplayer msgbox UnusedMixRecordsPromptText, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq UnusedMixRecordsScript_Yes - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq UnusedMixRecordsScript_Done goto UnusedMixRecordsScript_Done UnusedMixRecordsScript_Yes: @ 819FFFA @@ -1817,13 +1817,13 @@ Route109_EventScript_1A010C:: @ 81A010C UseSurfScript:: @ 81A0117 checkattack MOVE_SURF - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq UseSurfScript_NoMon bufferpartypoke 0, RESULT setanimation 0, RESULT lockall msgbox UseSurfPromptText, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq UseSurfScript_No msgbox UsedSurfText, 4 doanimation 9 @@ -1842,9 +1842,9 @@ Route110_EventScript_1A014E:: @ 81A014E Route119_EventScript_1A014E:: @ 81A014E RustboroCity_EventScript_1A014E:: @ 81A014E checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq RustboroCity_EventScript_1A0166 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq RustboroCity_EventScript_1A016C end @@ -1860,9 +1860,9 @@ LavaridgeTown_EventScript_1A0172:: @ 81A0172 Route110_EventScript_1A0172:: @ 81A0172 Route119_EventScript_1A0172:: @ 81A0172 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LavaridgeTown_EventScript_1A018A - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LavaridgeTown_EventScript_1A0190 end @@ -2142,23 +2142,23 @@ Route109_EventScript_1A02EF:: @ 81A02EF LittlerootTown_ProfessorBirchsLab_EventScript_1A02F4:: @ 81A02F4 Route101_EventScript_1A02F4:: @ 81A02F4 Route103_EventScript_1A02F4:: @ 81A02F4 - compare 0x4085, 0 + compare_var_to_imm 0x4085, 0 goto_if_eq Route101_EventScript_1A14DC - compare 0x4049, 0 + compare_var_to_imm 0x4049, 0 call_if 1, Route101_EventScript_1A0358 - compare 0x4049, 1 + compare_var_to_imm 0x4049, 1 call_if 1, Route101_EventScript_1A0358 - compare 0x4049, 2 + compare_var_to_imm 0x4049, 2 call_if 1, Route101_EventScript_1A0365 - compare 0x4049, 3 + compare_var_to_imm 0x4049, 3 call_if 1, Route101_EventScript_1A0365 - compare 0x4049, 4 + compare_var_to_imm 0x4049, 4 call_if 1, Route101_EventScript_1A0372 - compare 0x4049, 5 + compare_var_to_imm 0x4049, 5 call_if 1, Route101_EventScript_1A0372 - compare 0x4049, 6 + compare_var_to_imm 0x4049, 6 call_if 1, Route101_EventScript_1A0358 - compare 0x4049, 7 + compare_var_to_imm 0x4049, 7 call_if 1, Route101_EventScript_1A0358 return @@ -2189,7 +2189,7 @@ Route103_EventScript_1A037F:: @ 81A037F lock faceplayer msgbox Route101_Text_1C4449, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route101_EventScript_1A039B call Route101_EventScript_1A03B0 release @@ -2218,7 +2218,7 @@ Route101_EventScript_1A03B0:: @ 81A03B0 buffernum 1, 0x8009 msgbox Route101_Text_1C44DC, 4 call Route101_EventScript_1A03A5 - compare 0x800a, 0 + compare_var_to_imm 0x800a, 0 goto_if_eq Route101_EventScript_1A14DC setvar 0x8004, 1 specialval RESULT, ScriptGetPokedexInfo @@ -2285,9 +2285,9 @@ Movement_1A047A: BattleTower_Outside_EventScript_1A047C:: @ 81A047C SouthernIsland_Exterior_EventScript_1A047C:: @ 81A047C - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, BattleTower_Outside_EventScript_160B2F - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, BattleTower_Outside_EventScript_160B3A pause 30 spriteinvisible 255, 0, 0 @@ -2430,7 +2430,7 @@ Route119_EventScript_1A0587:: @ 81A0587 Route119_EventScript_1A0594:: @ 81A0594 Route120_EventScript_1A0594:: @ 81A0594 checkitem ITEM_DEVON_SCOPE, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route119_EventScript_1A05AE msgbox Route119_Text_171B93, 4 release @@ -2438,7 +2438,7 @@ Route120_EventScript_1A0594:: @ 81A0594 Route119_EventScript_1A05AE:: @ 81A05AE msgbox Route119_Text_171BB6, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route119_EventScript_1A05C3 release end @@ -2455,19 +2455,19 @@ Route119_EventScript_1A05C3:: @ 81A05C3 pause 40 waitpokecry setwildbattle SPECIES_KECLEON, 30, ITEM_NONE - compare 0x8004, 1 + compare_var_to_imm 0x8004, 1 call_if 1, Route119_EventScript_1A0646 - compare 0x8004, 2 + compare_var_to_imm 0x8004, 2 call_if 1, Route119_EventScript_1A064A - compare 0x8004, 3 + compare_var_to_imm 0x8004, 3 call_if 1, Route119_EventScript_1A064E - compare 0x8004, 4 + compare_var_to_imm 0x8004, 4 call_if 1, Route119_EventScript_1A0652 - compare 0x8004, 5 + compare_var_to_imm 0x8004, 5 call_if 1, Route119_EventScript_1A0656 - compare 0x8004, 6 + compare_var_to_imm 0x8004, 6 call_if 1, Route119_EventScript_1A065A - compare 0x8004, 7 + compare_var_to_imm 0x8004, 7 call_if 1, Route119_EventScript_1A065E setflag 2145 dowildbattle @@ -3263,7 +3263,7 @@ gUnknown_081A14B8:: @ 81A14B8 lockall special ExecuteWhiteOut waitstate - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_1A14CA releaseall end @@ -3618,32 +3618,32 @@ SecretBase_RedCave1_Text_1A2BA4:: @ 81A2BA4 gUnknown_081A2C51:: @ 81A2C51 special sub_80BB70C special sub_80BB63C - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_1A2E45 checkattack MOVE_SECRET_POWER setanimation 0, RESULT bufferattack 1, MOVE_SECRET_POWER - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 goto_if_eq EventScript_1A2CB0 - compare 0x8007, 2 + compare_var_to_imm 0x8007, 2 goto_if_eq EventScript_1A2CB0 - compare 0x8007, 3 + compare_var_to_imm 0x8007, 3 goto_if_eq EventScript_1A2CB0 - compare 0x8007, 4 + compare_var_to_imm 0x8007, 4 goto_if_eq EventScript_1A2CB0 - compare 0x8007, 5 + compare_var_to_imm 0x8007, 5 goto_if_eq EventScript_1A2D08 - compare 0x8007, 6 + compare_var_to_imm 0x8007, 6 goto_if_eq EventScript_1A2D60 end EventScript_1A2CB0: lockall - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq EventScript_1A2CF1 bufferpartypoke 0, RESULT msgbox UnknownString_8198F34, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton @@ -3670,11 +3670,11 @@ EventScript_1A2CFA: EventScript_1A2D08: lockall - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq EventScript_1A2D49 bufferpartypoke 0, RESULT msgbox UnknownString_81A197B, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton @@ -3701,11 +3701,11 @@ EventScript_1A2D52: EventScript_1A2D60: lockall - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq EventScript_1A2DA1 bufferpartypoke 0, RESULT msgbox UnknownString_81A1A4B, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton @@ -3749,7 +3749,7 @@ SecretBase_RedCave1_EventScript_1A2DDE:: @ 81A2DDE waitmove 0 setvar 0x4097, 1 msgbox SecretBase_RedCave1_Text_198F89, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A2E08 closebutton playsfx 9 @@ -3773,7 +3773,7 @@ gUnknown_081A2E14:: @ 81A2E14 setvar 0x4097, 1 playsfx 9 special sub_80BC114 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2E38 clearflag 173 special sub_80BBAF0 @@ -3790,57 +3790,57 @@ EventScript_1A2E38: EventScript_1A2E45: checkattack MOVE_SECRET_POWER - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq EventScript_1A2EF7 setanimation 0, RESULT setorcopyvar 0x8004, RESULT lockall special GetSecretBaseNearbyMapName msgbox UnknownString_81A3C71, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UnknownString_81A38FB, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2F3A fadescreen 1 special sub_80BC50C closebutton fadescreen 0 msgbox UnknownString_81A3CC9, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2F3A bufferpartypoke 0, 0x8004 bufferattack 1, MOVE_SECRET_POWER msgbox UsedCutRockSmashText, 4 closebutton closebutton - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 goto_if_eq gUnknown_081A2CE6 - compare 0x8007, 2 + compare_var_to_imm 0x8007, 2 goto_if_eq gUnknown_081A2CE6 - compare 0x8007, 3 + compare_var_to_imm 0x8007, 3 goto_if_eq gUnknown_081A2CE6 - compare 0x8007, 4 + compare_var_to_imm 0x8007, 4 goto_if_eq gUnknown_081A2CE6 - compare 0x8007, 5 + compare_var_to_imm 0x8007, 5 goto_if_eq gUnknown_081A2D3E - compare 0x8007, 6 + compare_var_to_imm 0x8007, 6 goto_if_eq gUnknown_081A2D96 releaseall end EventScript_1A2EF7:: - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 goto_if_eq EventScript_1A2CF1 - compare 0x8007, 2 + compare_var_to_imm 0x8007, 2 goto_if_eq EventScript_1A2CF1 - compare 0x8007, 3 + compare_var_to_imm 0x8007, 3 goto_if_eq EventScript_1A2CF1 - compare 0x8007, 4 + compare_var_to_imm 0x8007, 4 goto_if_eq EventScript_1A2CF1 - compare 0x8007, 5 + compare_var_to_imm 0x8007, 5 goto_if_eq EventScript_1A2D49 - compare 0x8007, 6 + compare_var_to_imm 0x8007, 6 goto_if_eq EventScript_1A2DA1 end @@ -3893,10 +3893,10 @@ gUnknown_081A2F8A:: @ 81A2F8A EventScript_1A2F95: special sub_8100A7C - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_1A2FBF addvar 0x8004, 1 - compare 0x8005, 0 + compare_var_to_imm 0x8005, 0 goto_if_eq EventScript_1A2F95 disappear 0x8006 setflag 0x8005 @@ -3931,42 +3931,42 @@ SecretBase_YellowCave2_EventScript_1A2FC0:: @ 81A2FC0 SecretBase_YellowCave3_EventScript_1A2FC0:: @ 81A2FC0 SecretBase_YellowCave4_EventScript_1A2FC0:: @ 81A2FC0 special sub_80BCE90 - compare 0x8004, 0 + compare_var_to_imm 0x8004, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3032 - compare 0x8004, 1 + compare_var_to_imm 0x8004, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A30AE - compare 0x8004, 2 + compare_var_to_imm 0x8004, 2 goto_if_eq SecretBase_RedCave1_EventScript_1A312A - compare 0x8004, 3 + compare_var_to_imm 0x8004, 3 goto_if_eq SecretBase_RedCave1_EventScript_1A31A6 - compare 0x8004, 4 + compare_var_to_imm 0x8004, 4 goto_if_eq SecretBase_RedCave1_EventScript_1A3222 - compare 0x8004, 5 + compare_var_to_imm 0x8004, 5 goto_if_eq SecretBase_RedCave1_EventScript_1A329E - compare 0x8004, 6 + compare_var_to_imm 0x8004, 6 goto_if_eq SecretBase_RedCave1_EventScript_1A331A - compare 0x8004, 7 + compare_var_to_imm 0x8004, 7 goto_if_eq SecretBase_RedCave1_EventScript_1A3396 - compare 0x8004, 8 + compare_var_to_imm 0x8004, 8 goto_if_eq SecretBase_RedCave1_EventScript_1A3412 - compare 0x8004, 9 + compare_var_to_imm 0x8004, 9 goto_if_eq SecretBase_RedCave1_EventScript_1A348E end SecretBase_RedCave1_EventScript_1A3032:: @ 81A3032 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3086 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A30A5 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1AEA, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A308F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A308F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1B83, 4 @@ -3991,17 +3991,17 @@ SecretBase_RedCave1_EventScript_1A30A5:: @ 81A30A5 SecretBase_RedCave1_EventScript_1A30AE:: @ 81A30AE checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3102 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3121 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1E67, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A310B setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A310B hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1F04, 4 @@ -4026,17 +4026,17 @@ SecretBase_RedCave1_EventScript_1A3121:: @ 81A3121 SecretBase_RedCave1_EventScript_1A312A:: @ 81A312A checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A317E - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A319D lock faceplayer msgbox SecretBase_RedCave1_Text_1A218F, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3187 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3187 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2220, 4 @@ -4061,17 +4061,17 @@ SecretBase_RedCave1_EventScript_1A319D:: @ 81A319D SecretBase_RedCave1_EventScript_1A31A6:: @ 81A31A6 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A31FA - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3219 lock faceplayer msgbox SecretBase_RedCave1_Text_1A24E1, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3203 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3203 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A256F, 4 @@ -4096,17 +4096,17 @@ SecretBase_RedCave1_EventScript_1A3219:: @ 81A3219 SecretBase_RedCave1_EventScript_1A3222:: @ 81A3222 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3276 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3295 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2830, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A327F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A327F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A28D7, 4 @@ -4131,17 +4131,17 @@ SecretBase_RedCave1_EventScript_1A3295:: @ 81A3295 SecretBase_RedCave1_EventScript_1A329E:: @ 81A329E checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A32F2 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3311 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1CB2, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A32FB setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A32FB hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1D48, 4 @@ -4166,17 +4166,17 @@ SecretBase_RedCave1_EventScript_1A3311:: @ 81A3311 SecretBase_RedCave1_EventScript_1A331A:: @ 81A331A checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A336E - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A338D lock faceplayer msgbox SecretBase_RedCave1_Text_1A2026, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3377 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3377 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2095, 4 @@ -4201,17 +4201,17 @@ SecretBase_RedCave1_EventScript_1A338D:: @ 81A338D SecretBase_RedCave1_EventScript_1A3396:: @ 81A3396 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A33EA - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3409 lock faceplayer msgbox SecretBase_RedCave1_Text_1A236A, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A33F3 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A33F3 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2405, 4 @@ -4236,17 +4236,17 @@ SecretBase_RedCave1_EventScript_1A3409:: @ 81A3409 SecretBase_RedCave1_EventScript_1A3412:: @ 81A3412 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3466 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3485 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2663, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A346F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A346F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2710, 4 @@ -4271,17 +4271,17 @@ SecretBase_RedCave1_EventScript_1A3485:: @ 81A3485 SecretBase_RedCave1_EventScript_1A348E:: @ 81A348E checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A34E2 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3501 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2A13, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A34EB setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A34EB hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2AE2, 4 @@ -4413,13 +4413,13 @@ SlateportCity_PokemonFanClub_EventScript_1ADE46:: @ 81ADE46 SlateportCity_PokemonFanClub_EventScript_1ADE4D:: @ 81ADE4D setvar 0x8005, 1 special sub_80BF2C4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADED6 copyvar 0x8009, 0x8006 msgbox SlateportCity_PokemonFanClub_Text_1A8704, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADE84 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEB9 end @@ -4431,9 +4431,9 @@ SlateportCity_PokemonFanClub_EventScript_1ADE84:: @ 81ADE84 call SlateportCity_PokemonFanClub_EventScript_1A00F3 lock faceplayer - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEC3 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEB9 end @@ -4458,24 +4458,24 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADEE0:: @ 81ADEE0 faceplayer setvar 0x8005, 2 special sub_80BF2C4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF96 copyvar 0x8009, 0x8006 checkflag 105 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF25 setflag 105 msgbox SlateportCity_OceanicMuseum_1F_Text_1A927F, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end SlateportCity_OceanicMuseum_1F_EventScript_1ADF25:: @ 81ADF25 msgbox SlateportCity_OceanicMuseum_1F_Text_1A934C, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end @@ -4487,9 +4487,9 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADF44:: @ 81ADF44 call SlateportCity_OceanicMuseum_1F_EventScript_1A00F3 lock faceplayer - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF83 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end @@ -4513,17 +4513,17 @@ SlateportCity_PokemonFanClub_EventScript_1ADFA0:: @ 81ADFA0 lock faceplayer specialval RESULT, sub_80BF544 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADE4D setvar 0x8005, 3 special sub_80BF2C4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0AC copyvar 0x8009, 0x8006 msgbox SlateportCity_PokemonFanClub_Text_1A82F1, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADFE9 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 end @@ -4559,14 +4559,14 @@ SlateportCity_PokemonFanClub_EventScript_1AE04A:: @ 81AE04A call SlateportCity_PokemonFanClub_EventScript_1A00F3 lock faceplayer - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 msgbox SlateportCity_PokemonFanClub_Text_1A852D, 4 setvar 0x8006, 1 call SlateportCity_PokemonFanClub_EventScript_1A00F3 lock faceplayer - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 msgbox SlateportCity_PokemonFanClub_Text_1A85A6, 4 copyvar 0x8007, 0x800a @@ -4594,13 +4594,13 @@ VerdanturfTown_ContestLobby_EventScript_1AE0B6:: @ 81AE0B6 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE17E setvar 0x8005, 6 special sub_80BF2C4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE17E copyvar 0x8009, 0x8006 msgbox FallarborTown_ContestLobby_Text_1A6F7C, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE0F8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D end @@ -4612,9 +4612,9 @@ FallarborTown_ContestLobby_EventScript_1AE0F8:: @ 81AE0F8 call FallarborTown_ContestLobby_EventScript_1A00F3 lock faceplayer - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE137 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D end @@ -4633,7 +4633,7 @@ FallarborTown_ContestLobby_EventScript_1AE137:: @ 81AE137 call FallarborTown_ContestLobby_EventScript_1A00F3 lock faceplayer - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D msgbox FallarborTown_ContestLobby_Text_1A7153, 4 setflag 2 @@ -4650,11 +4650,11 @@ FallarborTown_ContestLobby_EventScript_1AE188:: @ 81AE188 LilycoveCity_ContestLobby_EventScript_1AE188:: @ 81AE188 SlateportCity_ContestLobby_EventScript_1AE188:: @ 81AE188 VerdanturfTown_ContestLobby_EventScript_1AE188:: @ 81AE188 - compare 0x4086, 2 + compare_var_to_imm 0x4086, 2 goto_if 5, FallarborTown_ContestLobby_EventScript_1AE1FE setvar 0x8005, 6 special sub_80BF2C4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE1FE switch 0x4088 case 0, FallarborTown_ContestLobby_EventScript_1AE1FE @@ -4691,13 +4691,13 @@ BattleTower_Lobby_EventScript_1AE1FF:: @ 81AE1FF goto_if_eq BattleTower_Lobby_EventScript_1AE2E3 setvar 0x8005, 7 special sub_80BF2C4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE2E3 copyvar 0x8009, 0x8006 msgbox BattleTower_Lobby_Text_1A776D, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE241 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE297 end @@ -4706,9 +4706,9 @@ BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 waittext multichoice 19, 8, 45, 1 copyvar 0x8008, RESULT - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, BattleTower_Lobby_EventScript_1AE2A1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, BattleTower_Lobby_EventScript_1AE2AA msgbox BattleTower_Lobby_Text_1A79EB, 4 setvar 0x8004, 12 @@ -4716,9 +4716,9 @@ BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 call BattleTower_Lobby_EventScript_1A00F3 lock faceplayer - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE2B3 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE2D9 end @@ -4736,7 +4736,7 @@ BattleTower_Lobby_EventScript_1AE2AA:: @ 81AE2AA return BattleTower_Lobby_EventScript_1AE2B3:: @ 81AE2B3 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE2D9 msgbox BattleTower_Lobby_Text_1A7A6E, 4 setflag 2 @@ -4756,11 +4756,11 @@ BattleTower_Lobby_EventScript_1AE2E3:: @ 81AE2E3 end BattleTower_Lobby_EventScript_1AE2ED:: @ 81AE2ED - compare 0x40bc, 0 + compare_var_to_imm 0x40bc, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE30F setvar 0x8005, 7 special sub_80BF2C4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE30F clearflag 918 return @@ -4822,11 +4822,11 @@ Text_RepelWoreOff: @ 81C33EF MauvilleCity_GameCorner_EventScript_1C407E:: @ 81C407E checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 0 event_96 2 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 goto MauvilleCity_GameCorner_EventScript_1C40DA @@ -4834,11 +4834,11 @@ MauvilleCity_GameCorner_EventScript_1C407E:: @ 81C407E MauvilleCity_GameCorner_EventScript_1C40AC:: @ 81C40AC checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 1 event_96 2 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 goto MauvilleCity_GameCorner_EventScript_1C40DA diff --git a/data-de/field_move_scripts.inc b/data-de/field_move_scripts.inc index 8b005bf22..c5dae9c50 100644 --- a/data-de/field_move_scripts.inc +++ b/data-de/field_move_scripts.inc @@ -3,13 +3,13 @@ S_CuttableTree:: @ 81B0DCC checkflag 2055 goto_if 0, CannotUseCut checkattack MOVE_CUT - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq CannotUseCut setanimation 0, RESULT bufferpartypoke 0, RESULT bufferattack 1, MOVE_CUT msgbox UseCutPromptText, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Cut_ChoseNo msgbox UsedCutRockSmashText, 4 closebutton @@ -64,13 +64,13 @@ S_BreakableRock:: @ 81B0EB7 checkflag 2057 goto_if 0, CannotUseRockSmash checkattack MOVE_ROCK_SMASH - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq CannotUseRockSmash setanimation 0, RESULT bufferpartypoke 0, RESULT bufferattack 1, MOVE_ROCK_SMASH msgbox UseRockSmashPromptText, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq RockSmash_ChoseNo msgbox UsedCutRockSmashText, 4 closebutton @@ -91,10 +91,10 @@ DoRockSmashMovement: @ 81B0F0C waitmove 0 disappear LAST_TALKED specialval RESULT, sub_810F5BC - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq DoRockSmashMovement_Done special ScrSpecial_RockSmashWildEncounter - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq DoRockSmashMovement_Done waitstate releaseall @@ -133,11 +133,11 @@ S_PushableBoulder:: @ 81B0FCB checkflag 2089 goto_if_eq AlreadyUsedStrength checkattack 70 - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq CannotUseStrength setanimation 0, RESULT msgbox UseStrengthPromptText, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Strength_ChoseNo closebutton doanimation 40 @@ -194,12 +194,12 @@ AlreadyUsedStrengthText: @ 81B1127 S_UseWaterfall:: @ 81B115A lockall checkattack MOVE_WATERFALL - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq Waterfall_NoMonKnows bufferpartypoke 0, RESULT setanimation 0, RESULT msgbox UseWaterfallPromptText, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Waterfall_Done msgbox UsedWaterfallText, 4 doanimation 43 @@ -227,13 +227,13 @@ UsedWaterfallText: @ 81B120D UseDiveScript:: @ 81B1220 lockall checkattack MOVE_DIVE - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq CannotUseDive bufferpartypoke 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UseDivePromptText, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Dive_Done msgbox UsedDiveText, 4 doanimation 44 @@ -250,13 +250,13 @@ Dive_Done: @ 81B1267 S_UseDiveUnderwater:: @ 81B1269 lockall checkattack MOVE_DIVE - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq UnderwaterCannotUseDive bufferpartypoke 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UnderwaterUseDivePromptText, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq UnderwaterDive_Done msgbox UsedDiveText, 4 doanimation 44 diff --git a/data/event_scripts.s b/data/event_scripts.s index 037e8a1b0..dae57cfd6 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -430,7 +430,7 @@ EventScript_15F3E2: EventScript_15F419: msgbox UnknownString_81A38FB, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_15F384 closebutton special SecretBasePC_PackUp @@ -476,13 +476,13 @@ gUnknown_0815F49A:: @ 815F49A EventScript_15F4A1: special sub_80BC56C - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_15F4E0 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq EventScript_15F503 special sub_80BC224 msgbox UnknownString_81A3958, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_15F452 msgbox UnknownString_81A3A22, 3 special sub_80BC5BC @@ -492,7 +492,7 @@ EventScript_15F4A1: EventScript_15F4E0: msgbox UnknownString_81A3982, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_15F452 msgbox UnknownString_81A3A3A, 3 special sub_80BC5BC @@ -526,13 +526,13 @@ gUnknown_0815F523:: @ 815F523 gUnknown_0815F528:: @ 815F528 special GetShieldToyTVDecorationInfo - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_15F558 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_15F561 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq EventScript_15F56A - compare RESULT, 3 + compare_var_to_imm RESULT, 3 goto_if_eq EventScript_15F573 end @@ -936,7 +936,7 @@ gUnknown_0819F818:: @ 819F818 move LAST_TALKED, Movement_19F8F0 waitmove 0 specialval RESULT, ScrSpecial_HasTrainerBeenFought - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if 5, EventScript_19F83F special PlayTrainerEncounterMusic special sub_8082524 @@ -950,10 +950,10 @@ gUnknown_0819F840:: @ 819F840 faceplayer call EventScript_19F8E5 specialval RESULT, ScrSpecial_HasTrainerBeenFought - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if 5, EventScript_19F877 special CheckForAlivePartyMons - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if 5, EventScript_19F870 special PlayTrainerEncounterMusic special sub_8082524 @@ -979,7 +979,7 @@ gUnknown_0819F878:: @ 819F878 gUnknown_0819F887:: @ 819F887 call EventScript_19F8E5 specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_19F8AD special PlayTrainerEncounterMusic special sub_8082524 @@ -996,10 +996,10 @@ EventScript_19F8AD: gUnknown_0819F8AE:: @ 819F8AE specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_19F8DD special CheckForAlivePartyMons - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if 5, EventScript_19F8DE special PlayTrainerEncounterMusic special sub_8082524 @@ -1036,15 +1036,15 @@ EventScript_19F8F2: waitbutton reptrainerbattle specialval RESULT, ScrSpecial_GetTrainerBattleMode - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_19F934 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq EventScript_19F936 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_19F936 - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq EventScript_19F936 - compare RESULT, 8 + compare_var_to_imm RESULT, 8 goto_if_eq EventScript_19F936 EventScript_19F934: @@ -1335,11 +1335,11 @@ EventScript_19FC84: return gUnknown_0819FC9F:: @ 819FC9F - compare 0x4096, 1 + compare_var_to_imm 0x4096, 1 goto_if_eq EventScript_19FCC1 - compare 0x4096, 2 + compare_var_to_imm 0x4096, 2 goto_if_eq EventScript_19FCD7 - compare 0x4096, 3 + compare_var_to_imm 0x4096, 3 goto_if_eq EventScript_19FCF0 end @@ -1433,9 +1433,9 @@ VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B lock faceplayer msgbox gText_NurseJoy_Welcome, MSGBOX_YESNO - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq do_heal_party - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq dont_heal_party end @@ -1471,9 +1471,9 @@ dont_heal_party:: @ 819FDC7 OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE specialval RESULT, IsPokerusInParty - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDEA - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDB0 end @@ -1498,9 +1498,9 @@ Std_ObtainItem_: @ 819FE07 bufferitem 1, 0x8000 checkitemtype 0x8000 call GetItem_HandlePocket - compare 0x8007, 0x1 + compare_var_to_imm 0x8007, 0x1 call_if 1, Std_ObtainItem_Success - compare 0x8007, 0x0 + compare_var_to_imm 0x8007, 0x0 call_if 1, Std_ObtainItem_Fail return @@ -1515,31 +1515,31 @@ GetItem_HandlePocket: GetItem_HandlePocket_Items: bufferstd 2, 0xE - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_KeyItems: bufferstd 2, 0xF - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_PokeBalls: bufferstd 2, 0x10 - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_TMsHMs: bufferstd 2, 0x11 - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 call_if 1, PlayGetTMHMFanfare return GetItem_HandlePocket_Berries: bufferstd 2, 0x12 - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 call_if 1, PlayGetItemFanfare return @@ -1571,9 +1571,9 @@ Std_ObtainDecoration: @ 819FEDA Std_ObtainDecoration_: @ 819FEE8 bufferdecor 1, 0x8000 - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 call_if 1, Std_ObtainDecoration_Success - compare 0x8007, 0 + compare_var_to_imm 0x8007, 0 call_if 1, Std_ObtainDecoration_Fail return @@ -1599,9 +1599,9 @@ Std_FindItem: @ 819FF21 bufferitem 1, 0x8000 checkitemtype 0x8000 call GetItem_HandlePocket - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 call_if 1, Std_FindItem_Success - compare 0x8007, 0 + compare_var_to_imm 0x8007, 0 call_if 1, Std_FindItem_Fail release return @@ -1628,9 +1628,9 @@ HiddenItemScript:: @ 819FF7B bufferitem 0x1, 0x8005 checkitemtype 0x8005 call GetItem_HandlePocket - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 goto_if_eq HiddenItemScript_Success - compare 0x8007, 0 + compare_var_to_imm 0x8007, 0 goto_if_eq HiddenItemScript_Fail end @@ -1654,9 +1654,9 @@ UnusedMixRecordsScript: @ 819FFD5 lock faceplayer msgbox UnusedMixRecordsPromptText, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq UnusedMixRecordsScript_Yes - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq UnusedMixRecordsScript_Done goto UnusedMixRecordsScript_Done UnusedMixRecordsScript_Yes: @ 819FFFA @@ -1811,13 +1811,13 @@ Route109_EventScript_1A010C:: @ 81A010C UseSurfScript:: @ 81A0117 checkattack MOVE_SURF - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq UseSurfScript_NoMon bufferpartypoke 0, RESULT setanimation 0, RESULT lockall msgbox UseSurfPromptText, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq UseSurfScript_No msgbox UsedSurfText, 4 doanimation 9 @@ -1836,9 +1836,9 @@ Route110_EventScript_1A014E:: @ 81A014E Route119_EventScript_1A014E:: @ 81A014E RustboroCity_EventScript_1A014E:: @ 81A014E checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq RustboroCity_EventScript_1A0166 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq RustboroCity_EventScript_1A016C end @@ -1854,9 +1854,9 @@ LavaridgeTown_EventScript_1A0172:: @ 81A0172 Route110_EventScript_1A0172:: @ 81A0172 Route119_EventScript_1A0172:: @ 81A0172 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LavaridgeTown_EventScript_1A018A - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LavaridgeTown_EventScript_1A0190 end @@ -2136,23 +2136,23 @@ Route109_EventScript_1A02EF:: @ 81A02EF LittlerootTown_ProfessorBirchsLab_EventScript_1A02F4:: @ 81A02F4 Route101_EventScript_1A02F4:: @ 81A02F4 Route103_EventScript_1A02F4:: @ 81A02F4 - compare 0x4085, 0 + compare_var_to_imm 0x4085, 0 goto_if_eq Route101_EventScript_1A14DC - compare 0x4049, 0 + compare_var_to_imm 0x4049, 0 call_if 1, Route101_EventScript_1A0358 - compare 0x4049, 1 + compare_var_to_imm 0x4049, 1 call_if 1, Route101_EventScript_1A0358 - compare 0x4049, 2 + compare_var_to_imm 0x4049, 2 call_if 1, Route101_EventScript_1A0365 - compare 0x4049, 3 + compare_var_to_imm 0x4049, 3 call_if 1, Route101_EventScript_1A0365 - compare 0x4049, 4 + compare_var_to_imm 0x4049, 4 call_if 1, Route101_EventScript_1A0372 - compare 0x4049, 5 + compare_var_to_imm 0x4049, 5 call_if 1, Route101_EventScript_1A0372 - compare 0x4049, 6 + compare_var_to_imm 0x4049, 6 call_if 1, Route101_EventScript_1A0358 - compare 0x4049, 7 + compare_var_to_imm 0x4049, 7 call_if 1, Route101_EventScript_1A0358 return @@ -2183,7 +2183,7 @@ Route103_EventScript_1A037F:: @ 81A037F lock faceplayer msgbox Route101_Text_1C4449, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route101_EventScript_1A039B call Route101_EventScript_1A03B0 release @@ -2212,7 +2212,7 @@ Route101_EventScript_1A03B0:: @ 81A03B0 buffernum 1, 0x8009 msgbox Route101_Text_1C44DC, 4 call Route101_EventScript_1A03A5 - compare 0x800a, 0 + compare_var_to_imm 0x800a, 0 goto_if_eq Route101_EventScript_1A14DC setvar 0x8004, 1 specialval RESULT, ScriptGetPokedexInfo @@ -2279,9 +2279,9 @@ Movement_1A047A: BattleTower_Outside_EventScript_1A047C:: @ 81A047C SouthernIsland_Exterior_EventScript_1A047C:: @ 81A047C - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, BattleTower_Outside_EventScript_160B2F - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, BattleTower_Outside_EventScript_160B3A pause 30 spriteinvisible 255, 0, 0 @@ -2424,7 +2424,7 @@ Route119_EventScript_1A0587:: @ 81A0587 Route119_EventScript_1A0594:: @ 81A0594 Route120_EventScript_1A0594:: @ 81A0594 checkitem ITEM_DEVON_SCOPE, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route119_EventScript_1A05AE msgbox Route119_Text_171B93, 4 release @@ -2432,7 +2432,7 @@ Route120_EventScript_1A0594:: @ 81A0594 Route119_EventScript_1A05AE:: @ 81A05AE msgbox Route119_Text_171BB6, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route119_EventScript_1A05C3 release end @@ -2449,19 +2449,19 @@ Route119_EventScript_1A05C3:: @ 81A05C3 pause 40 waitpokecry setwildbattle SPECIES_KECLEON, 30, ITEM_NONE - compare 0x8004, 1 + compare_var_to_imm 0x8004, 1 call_if 1, Route119_EventScript_1A0646 - compare 0x8004, 2 + compare_var_to_imm 0x8004, 2 call_if 1, Route119_EventScript_1A064A - compare 0x8004, 3 + compare_var_to_imm 0x8004, 3 call_if 1, Route119_EventScript_1A064E - compare 0x8004, 4 + compare_var_to_imm 0x8004, 4 call_if 1, Route119_EventScript_1A0652 - compare 0x8004, 5 + compare_var_to_imm 0x8004, 5 call_if 1, Route119_EventScript_1A0656 - compare 0x8004, 6 + compare_var_to_imm 0x8004, 6 call_if 1, Route119_EventScript_1A065A - compare 0x8004, 7 + compare_var_to_imm 0x8004, 7 call_if 1, Route119_EventScript_1A065E setflag 2145 dowildbattle @@ -3253,7 +3253,7 @@ gUnknown_081A14B8:: @ 81A14B8 lockall special ExecuteWhiteOut waitstate - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_1A14CA releaseall end @@ -3597,32 +3597,32 @@ SecretBase_RedCave1_Text_1A2BA4:: @ 81A2BA4 gUnknown_081A2C51:: @ 81A2C51 special sub_80BB70C special sub_80BB63C - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_1A2E45 checkattack MOVE_SECRET_POWER setanimation 0, RESULT bufferattack 1, MOVE_SECRET_POWER - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 goto_if_eq EventScript_1A2CB0 - compare 0x8007, 2 + compare_var_to_imm 0x8007, 2 goto_if_eq EventScript_1A2CB0 - compare 0x8007, 3 + compare_var_to_imm 0x8007, 3 goto_if_eq EventScript_1A2CB0 - compare 0x8007, 4 + compare_var_to_imm 0x8007, 4 goto_if_eq EventScript_1A2CB0 - compare 0x8007, 5 + compare_var_to_imm 0x8007, 5 goto_if_eq EventScript_1A2D08 - compare 0x8007, 6 + compare_var_to_imm 0x8007, 6 goto_if_eq EventScript_1A2D60 end EventScript_1A2CB0: lockall - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq EventScript_1A2CF1 bufferpartypoke 0, RESULT msgbox UnknownString_8198F34, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton @@ -3649,11 +3649,11 @@ EventScript_1A2CFA: EventScript_1A2D08: lockall - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq EventScript_1A2D49 bufferpartypoke 0, RESULT msgbox UnknownString_81A197B, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton @@ -3680,11 +3680,11 @@ EventScript_1A2D52: EventScript_1A2D60: lockall - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq EventScript_1A2DA1 bufferpartypoke 0, RESULT msgbox UnknownString_81A1A4B, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton @@ -3728,7 +3728,7 @@ SecretBase_RedCave1_EventScript_1A2DDE:: @ 81A2DDE waitmove 0 setvar 0x4097, 1 msgbox SecretBase_RedCave1_Text_198F89, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A2E08 closebutton playsfx 9 @@ -3752,7 +3752,7 @@ gUnknown_081A2E14:: @ 81A2E14 setvar 0x4097, 1 playsfx 9 special sub_80BC114 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2E38 clearflag 173 special sub_80BBAF0 @@ -3769,57 +3769,57 @@ EventScript_1A2E38: EventScript_1A2E45: checkattack MOVE_SECRET_POWER - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq EventScript_1A2EF7 setanimation 0, RESULT setorcopyvar 0x8004, RESULT lockall special GetSecretBaseNearbyMapName msgbox UnknownString_81A3C71, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UnknownString_81A38FB, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2F3A fadescreen 1 special sub_80BC50C closebutton fadescreen 0 msgbox UnknownString_81A3CC9, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2F3A bufferpartypoke 0, 0x8004 bufferattack 1, MOVE_SECRET_POWER msgbox UsedCutRockSmashText, 4 closebutton closebutton - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 goto_if_eq gUnknown_081A2CE6 - compare 0x8007, 2 + compare_var_to_imm 0x8007, 2 goto_if_eq gUnknown_081A2CE6 - compare 0x8007, 3 + compare_var_to_imm 0x8007, 3 goto_if_eq gUnknown_081A2CE6 - compare 0x8007, 4 + compare_var_to_imm 0x8007, 4 goto_if_eq gUnknown_081A2CE6 - compare 0x8007, 5 + compare_var_to_imm 0x8007, 5 goto_if_eq gUnknown_081A2D3E - compare 0x8007, 6 + compare_var_to_imm 0x8007, 6 goto_if_eq gUnknown_081A2D96 releaseall end EventScript_1A2EF7:: - compare 0x8007, 1 + compare_var_to_imm 0x8007, 1 goto_if_eq EventScript_1A2CF1 - compare 0x8007, 2 + compare_var_to_imm 0x8007, 2 goto_if_eq EventScript_1A2CF1 - compare 0x8007, 3 + compare_var_to_imm 0x8007, 3 goto_if_eq EventScript_1A2CF1 - compare 0x8007, 4 + compare_var_to_imm 0x8007, 4 goto_if_eq EventScript_1A2CF1 - compare 0x8007, 5 + compare_var_to_imm 0x8007, 5 goto_if_eq EventScript_1A2D49 - compare 0x8007, 6 + compare_var_to_imm 0x8007, 6 goto_if_eq EventScript_1A2DA1 end @@ -3872,10 +3872,10 @@ gUnknown_081A2F8A:: @ 81A2F8A EventScript_1A2F95: special sub_8100A7C - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_1A2FBF addvar 0x8004, 1 - compare 0x8005, 0 + compare_var_to_imm 0x8005, 0 goto_if_eq EventScript_1A2F95 disappear 0x8006 setflag 0x8005 @@ -3910,42 +3910,42 @@ SecretBase_YellowCave2_EventScript_1A2FC0:: @ 81A2FC0 SecretBase_YellowCave3_EventScript_1A2FC0:: @ 81A2FC0 SecretBase_YellowCave4_EventScript_1A2FC0:: @ 81A2FC0 special sub_80BCE90 - compare 0x8004, 0 + compare_var_to_imm 0x8004, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3032 - compare 0x8004, 1 + compare_var_to_imm 0x8004, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A30AE - compare 0x8004, 2 + compare_var_to_imm 0x8004, 2 goto_if_eq SecretBase_RedCave1_EventScript_1A312A - compare 0x8004, 3 + compare_var_to_imm 0x8004, 3 goto_if_eq SecretBase_RedCave1_EventScript_1A31A6 - compare 0x8004, 4 + compare_var_to_imm 0x8004, 4 goto_if_eq SecretBase_RedCave1_EventScript_1A3222 - compare 0x8004, 5 + compare_var_to_imm 0x8004, 5 goto_if_eq SecretBase_RedCave1_EventScript_1A329E - compare 0x8004, 6 + compare_var_to_imm 0x8004, 6 goto_if_eq SecretBase_RedCave1_EventScript_1A331A - compare 0x8004, 7 + compare_var_to_imm 0x8004, 7 goto_if_eq SecretBase_RedCave1_EventScript_1A3396 - compare 0x8004, 8 + compare_var_to_imm 0x8004, 8 goto_if_eq SecretBase_RedCave1_EventScript_1A3412 - compare 0x8004, 9 + compare_var_to_imm 0x8004, 9 goto_if_eq SecretBase_RedCave1_EventScript_1A348E end SecretBase_RedCave1_EventScript_1A3032:: @ 81A3032 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3086 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A30A5 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1AEA, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A308F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A308F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1B83, 4 @@ -3970,17 +3970,17 @@ SecretBase_RedCave1_EventScript_1A30A5:: @ 81A30A5 SecretBase_RedCave1_EventScript_1A30AE:: @ 81A30AE checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3102 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3121 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1E67, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A310B setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A310B hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1F04, 4 @@ -4005,17 +4005,17 @@ SecretBase_RedCave1_EventScript_1A3121:: @ 81A3121 SecretBase_RedCave1_EventScript_1A312A:: @ 81A312A checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A317E - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A319D lock faceplayer msgbox SecretBase_RedCave1_Text_1A218F, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3187 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3187 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2220, 4 @@ -4040,17 +4040,17 @@ SecretBase_RedCave1_EventScript_1A319D:: @ 81A319D SecretBase_RedCave1_EventScript_1A31A6:: @ 81A31A6 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A31FA - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3219 lock faceplayer msgbox SecretBase_RedCave1_Text_1A24E1, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3203 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3203 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A256F, 4 @@ -4075,17 +4075,17 @@ SecretBase_RedCave1_EventScript_1A3219:: @ 81A3219 SecretBase_RedCave1_EventScript_1A3222:: @ 81A3222 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3276 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3295 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2830, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A327F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A327F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A28D7, 4 @@ -4110,17 +4110,17 @@ SecretBase_RedCave1_EventScript_1A3295:: @ 81A3295 SecretBase_RedCave1_EventScript_1A329E:: @ 81A329E checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A32F2 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3311 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1CB2, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A32FB setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A32FB hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1D48, 4 @@ -4145,17 +4145,17 @@ SecretBase_RedCave1_EventScript_1A3311:: @ 81A3311 SecretBase_RedCave1_EventScript_1A331A:: @ 81A331A checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A336E - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A338D lock faceplayer msgbox SecretBase_RedCave1_Text_1A2026, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3377 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3377 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2095, 4 @@ -4180,17 +4180,17 @@ SecretBase_RedCave1_EventScript_1A338D:: @ 81A338D SecretBase_RedCave1_EventScript_1A3396:: @ 81A3396 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A33EA - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3409 lock faceplayer msgbox SecretBase_RedCave1_Text_1A236A, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A33F3 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A33F3 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2405, 4 @@ -4215,17 +4215,17 @@ SecretBase_RedCave1_EventScript_1A3409:: @ 81A3409 SecretBase_RedCave1_EventScript_1A3412:: @ 81A3412 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3466 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3485 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2663, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A346F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A346F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2710, 4 @@ -4250,17 +4250,17 @@ SecretBase_RedCave1_EventScript_1A3485:: @ 81A3485 SecretBase_RedCave1_EventScript_1A348E:: @ 81A348E checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A34E2 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3501 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2A13, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A34EB setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A34EB hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2AE2, 4 @@ -4381,13 +4381,13 @@ SlateportCity_PokemonFanClub_EventScript_1ADE46:: @ 81ADE46 SlateportCity_PokemonFanClub_EventScript_1ADE4D:: @ 81ADE4D setvar 0x8005, 1 special sub_80BF2C4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADED6 copyvar 0x8009, 0x8006 msgbox SlateportCity_PokemonFanClub_Text_1A8704, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADE84 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEB9 end @@ -4399,9 +4399,9 @@ SlateportCity_PokemonFanClub_EventScript_1ADE84:: @ 81ADE84 call SlateportCity_PokemonFanClub_EventScript_1A00F3 lock faceplayer - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEC3 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEB9 end @@ -4426,24 +4426,24 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADEE0:: @ 81ADEE0 faceplayer setvar 0x8005, 2 special sub_80BF2C4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF96 copyvar 0x8009, 0x8006 checkflag 105 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF25 setflag 105 msgbox SlateportCity_OceanicMuseum_1F_Text_1A927F, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end SlateportCity_OceanicMuseum_1F_EventScript_1ADF25:: @ 81ADF25 msgbox SlateportCity_OceanicMuseum_1F_Text_1A934C, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end @@ -4455,9 +4455,9 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADF44:: @ 81ADF44 call SlateportCity_OceanicMuseum_1F_EventScript_1A00F3 lock faceplayer - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF83 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end @@ -4481,17 +4481,17 @@ SlateportCity_PokemonFanClub_EventScript_1ADFA0:: @ 81ADFA0 lock faceplayer specialval RESULT, sub_80BF544 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADE4D setvar 0x8005, 3 special sub_80BF2C4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0AC copyvar 0x8009, 0x8006 msgbox SlateportCity_PokemonFanClub_Text_1A82F1, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADFE9 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 end @@ -4527,14 +4527,14 @@ SlateportCity_PokemonFanClub_EventScript_1AE04A:: @ 81AE04A call SlateportCity_PokemonFanClub_EventScript_1A00F3 lock faceplayer - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 msgbox SlateportCity_PokemonFanClub_Text_1A852D, 4 setvar 0x8006, 1 call SlateportCity_PokemonFanClub_EventScript_1A00F3 lock faceplayer - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 msgbox SlateportCity_PokemonFanClub_Text_1A85A6, 4 copyvar 0x8007, 0x800a @@ -4562,13 +4562,13 @@ VerdanturfTown_ContestLobby_EventScript_1AE0B6:: @ 81AE0B6 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE17E setvar 0x8005, 6 special sub_80BF2C4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE17E copyvar 0x8009, 0x8006 msgbox FallarborTown_ContestLobby_Text_1A6F7C, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE0F8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D end @@ -4580,9 +4580,9 @@ FallarborTown_ContestLobby_EventScript_1AE0F8:: @ 81AE0F8 call FallarborTown_ContestLobby_EventScript_1A00F3 lock faceplayer - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE137 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D end @@ -4601,7 +4601,7 @@ FallarborTown_ContestLobby_EventScript_1AE137:: @ 81AE137 call FallarborTown_ContestLobby_EventScript_1A00F3 lock faceplayer - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D msgbox FallarborTown_ContestLobby_Text_1A7153, 4 setflag 2 @@ -4618,11 +4618,11 @@ FallarborTown_ContestLobby_EventScript_1AE188:: @ 81AE188 LilycoveCity_ContestLobby_EventScript_1AE188:: @ 81AE188 SlateportCity_ContestLobby_EventScript_1AE188:: @ 81AE188 VerdanturfTown_ContestLobby_EventScript_1AE188:: @ 81AE188 - compare 0x4086, 2 + compare_var_to_imm 0x4086, 2 goto_if 5, FallarborTown_ContestLobby_EventScript_1AE1FE setvar 0x8005, 6 special sub_80BF2C4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE1FE switch 0x4088 case 0, FallarborTown_ContestLobby_EventScript_1AE1FE @@ -4659,13 +4659,13 @@ BattleTower_Lobby_EventScript_1AE1FF:: @ 81AE1FF goto_if_eq BattleTower_Lobby_EventScript_1AE2E3 setvar 0x8005, 7 special sub_80BF2C4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE2E3 copyvar 0x8009, 0x8006 msgbox BattleTower_Lobby_Text_1A776D, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE241 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE297 end @@ -4674,9 +4674,9 @@ BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 waittext multichoice 19, 8, 45, 1 copyvar 0x8008, RESULT - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, BattleTower_Lobby_EventScript_1AE2A1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, BattleTower_Lobby_EventScript_1AE2AA msgbox BattleTower_Lobby_Text_1A79EB, 4 setvar 0x8004, 12 @@ -4684,9 +4684,9 @@ BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 call BattleTower_Lobby_EventScript_1A00F3 lock faceplayer - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE2B3 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE2D9 end @@ -4704,7 +4704,7 @@ BattleTower_Lobby_EventScript_1AE2AA:: @ 81AE2AA return BattleTower_Lobby_EventScript_1AE2B3:: @ 81AE2B3 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE2D9 msgbox BattleTower_Lobby_Text_1A7A6E, 4 setflag 2 @@ -4724,11 +4724,11 @@ BattleTower_Lobby_EventScript_1AE2E3:: @ 81AE2E3 end BattleTower_Lobby_EventScript_1AE2ED:: @ 81AE2ED - compare 0x40bc, 0 + compare_var_to_imm 0x40bc, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE30F setvar 0x8005, 7 special sub_80BF2C4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE30F clearflag 918 return @@ -4790,11 +4790,11 @@ Text_RepelWoreOff: @ 81C33EF MauvilleCity_GameCorner_EventScript_1C407E:: @ 81C407E checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 0 event_96 2 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 goto MauvilleCity_GameCorner_EventScript_1C40DA @@ -4802,11 +4802,11 @@ MauvilleCity_GameCorner_EventScript_1C407E:: @ 81C407E MauvilleCity_GameCorner_EventScript_1C40AC:: @ 81C40AC checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 1 event_96 2 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 goto MauvilleCity_GameCorner_EventScript_1C40DA diff --git a/data/field_move_scripts.inc b/data/field_move_scripts.inc index c3aeeab7a..3716eab3c 100644 --- a/data/field_move_scripts.inc +++ b/data/field_move_scripts.inc @@ -3,13 +3,13 @@ S_CuttableTree:: @ 81B0DCC checkflag 2055 goto_if 0, CannotUseCut checkattack MOVE_CUT - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq CannotUseCut setanimation 0, RESULT bufferpartypoke 0, RESULT bufferattack 1, MOVE_CUT msgbox UseCutPromptText, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Cut_ChoseNo msgbox UsedCutRockSmashText, 4 closebutton @@ -61,13 +61,13 @@ S_BreakableRock:: @ 81B0EB7 checkflag 2057 goto_if 0, CannotUseRockSmash checkattack MOVE_ROCK_SMASH - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq CannotUseRockSmash setanimation 0, RESULT bufferpartypoke 0, RESULT bufferattack 1, MOVE_ROCK_SMASH msgbox UseRockSmashPromptText, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq RockSmash_ChoseNo msgbox UsedCutRockSmashText, 4 closebutton @@ -88,10 +88,10 @@ DoRockSmashMovement: @ 81B0F0C waitmove 0 disappear LAST_TALKED specialval RESULT, sub_810F5BC - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq DoRockSmashMovement_Done special ScrSpecial_RockSmashWildEncounter - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq DoRockSmashMovement_Done waitstate releaseall @@ -130,11 +130,11 @@ S_PushableBoulder:: @ 81B0FCB checkflag 2089 goto_if_eq AlreadyUsedStrength checkattack 70 - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq CannotUseStrength setanimation 0, RESULT msgbox UseStrengthPromptText, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Strength_ChoseNo closebutton doanimation 40 @@ -191,12 +191,12 @@ AlreadyUsedStrengthText: @ 81B1127 S_UseWaterfall:: @ 81B115A lockall checkattack MOVE_WATERFALL - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq Waterfall_NoMonKnows bufferpartypoke 0, RESULT setanimation 0, RESULT msgbox UseWaterfallPromptText, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Waterfall_Done msgbox UsedWaterfallText, 4 doanimation 43 @@ -224,13 +224,13 @@ UsedWaterfallText: @ 81B120D UseDiveScript:: @ 81B1220 lockall checkattack MOVE_DIVE - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq CannotUseDive bufferpartypoke 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UseDivePromptText, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Dive_Done msgbox UsedDiveText, 4 doanimation 44 @@ -247,13 +247,13 @@ Dive_Done: @ 81B1267 S_UseDiveUnderwater:: @ 81B1269 lockall checkattack MOVE_DIVE - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq UnderwaterCannotUseDive bufferpartypoke 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UnderwaterUseDivePromptText, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq UnderwaterDive_Done msgbox UsedDiveText, 4 doanimation 44 diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc index 64d5f9b79..92c5f83b3 100644 --- a/data/scripts/berry_tree.inc +++ b/data/scripts/berry_tree.inc @@ -22,7 +22,7 @@ Route102_EventScript_1A153D:: @ 81A153D lock faceplayer specialval RESULT, PlayerHasBerries - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route102_EventScript_1A1558 message Route102_Text_1A16B6 waittext @@ -32,9 +32,9 @@ Route102_EventScript_1A153D:: @ 81A153D Route102_EventScript_1A1558:: @ 81A1558 msgbox Route102_Text_1A16CD, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route102_EventScript_1A1577 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route102_EventScript_1A1593 end @@ -43,7 +43,7 @@ Route102_EventScript_1A1577:: @ 81A1577 closebutton special sub_80B4EE4 waitstate - compare ITEM_ID, 0 + compare_var_to_imm ITEM_ID, 0 goto_if_eq Route102_EventScript_1A1593 removeitem ITEM_ID, 1 call Route102_EventScript_1A16A9 @@ -82,9 +82,9 @@ Route102_EventScript_1A15BC:: @ 81A15BC goto Route102_EventScript_1A165F Route102_EventScript_1A15CE:: @ 81A15CE - compare 0x8005, 0 + compare_var_to_imm 0x8005, 0 goto_if_eq Route102_EventScript_1A15F2 - compare 0x8005, 4 + compare_var_to_imm 0x8005, 4 goto_if_eq Route102_EventScript_1A15EB buffertext 1, Route102_Text_1A17B7 return @@ -102,14 +102,14 @@ Route102_EventScript_1A15F9:: @ 81A15F9 lock faceplayer msgbox Route102_Text_1A17C0, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route102_EventScript_1A161D - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route102_EventScript_1A164B Route102_EventScript_1A161D:: @ 81A161D special FieldObjectInteractionPickBerryTree - compare 0x8004, 0 + compare_var_to_imm 0x8004, 0 goto_if_eq Route102_EventScript_1A1642 special FieldObjectInteractionRemoveBerryTree message Route102_Text_1A17FD @@ -146,12 +146,12 @@ gUnknown_081A1654:: @ 81A1654 Route102_EventScript_1A165F:: @ 81A165F checkitem ITEM_WAILMER_PAIL, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route102_EventScript_1A168D msgbox Route102_Text_1A18E6, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route102_EventScript_1A1693 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route102_EventScript_1A168D Route102_EventScript_1A168D:: @ 81A168D diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index da3277ee3..a93a5f044 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -39,15 +39,15 @@ RustboroCity_PokemonCenter_2F_MapScript1_1A3D32:: @ 81A3D32 SlateportCity_PokemonCenter_2F_MapScript1_1A3D32:: @ 81A3D32 SootopolisCity_PokemonCenter_2F_MapScript1_1A3D32:: @ 81A3D32 VerdanturfTown_PokemonCenter_2F_MapScript1_1A3D32:: @ 81A3D32 - compare 0x4087, 1 + compare_var_to_imm 0x4087, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D6A - compare 0x4087, 2 + compare_var_to_imm 0x4087, 2 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D6A - compare 0x4087, 5 + compare_var_to_imm 0x4087, 5 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D6A - compare 0x4087, 3 + compare_var_to_imm 0x4087, 3 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D74 - compare 0x4087, 4 + compare_var_to_imm 0x4087, 4 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D7E end @@ -90,7 +90,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3DB2:: @ 81A3DB2 setvar 0x4087, 0 move 255, OldaleTown_PokemonCenter_2F_Movement_1A4358 waitmove 0 - compare 0x8007, 0 + compare_var_to_imm 0x8007, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3DD9 move 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4354 waitmove 0 @@ -101,7 +101,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3DD9:: @ 81A3DD9 OldaleTown_PokemonCenter_2F_EventScript_1A3DDA:: @ 81A3DDA special CloseLink setvar 0x4087, 0 - compare 0x8007, 0 + compare_var_to_imm 0x8007, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3E0C move 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4356 waitmove 0 @@ -128,7 +128,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3E17:: @ 81A3E17 OldaleTown_PokemonCenter_2F_EventScript_1A3E30:: @ 81A3E30 special CloseLink setvar 0x4087, 0 - compare 0x8007, 0 + compare_var_to_imm 0x8007, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3E0C move 255, OldaleTown_PokemonCenter_2F_Movement_1A4361 waitmove 0 @@ -192,26 +192,26 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3EBC:: @ 81A3EBC OldaleTown_PokemonCenter_2F_EventScript_1A3EF2:: @ 81A3EF2 call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 call OldaleTown_PokemonCenter_2F_EventScript_1A3FEF - compare 0x8004, 0 + compare_var_to_imm 0x8004, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 message OldaleTown_PokemonCenter_2F_Text_1A490C waittext special sub_808347C waitstate - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3F5E - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4301 - compare RESULT, 3 + compare_var_to_imm RESULT, 3 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A430D - compare RESULT, 4 + compare_var_to_imm RESULT, 4 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4068 - compare RESULT, 5 + compare_var_to_imm RESULT, 5 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A42F5 OldaleTown_PokemonCenter_2F_EventScript_1A3F5E:: @ 81A3F5E @@ -237,7 +237,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3F5E:: @ 81A3F5E setdoorclosed 5, 1 doorchange release - compare 0x8004, 5 + compare_var_to_imm 0x8004, 5 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3FCD special SetCableClubWarp warp SingleBattleColosseum, 255, 6, 8 @@ -281,7 +281,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A403C:: @ 81A403C OldaleTown_PokemonCenter_2F_EventScript_1A4042:: @ 81A4042 special CheckForAlivePartyMons - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if 5, OldaleTown_PokemonCenter_2F_EventScript_1A4056 setvar 0x8004, 2 return @@ -352,33 +352,33 @@ VerdanturfTown_PokemonCenter_2F_EventScript_1A40CC:: @ 81A40CC lock faceplayer msgbox OldaleTown_PokemonCenter_2F_Text_1A457E, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A40FA OldaleTown_PokemonCenter_2F_EventScript_1A40FA:: @ 81A40FA call OldaleTown_PokemonCenter_2F_EventScript_1A41BB - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 message OldaleTown_PokemonCenter_2F_Text_1A490C waittext special sub_80834E4 waitstate - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4166 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4301 - compare RESULT, 3 + compare_var_to_imm RESULT, 3 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A430D - compare RESULT, 4 + compare_var_to_imm RESULT, 4 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A432D - compare RESULT, 5 + compare_var_to_imm RESULT, 5 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A42F5 OldaleTown_PokemonCenter_2F_EventScript_1A4166:: @ 81A4166 @@ -406,10 +406,10 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4166:: @ 81A4166 OldaleTown_PokemonCenter_2F_EventScript_1A41BB:: @ 81A41BB specialval RESULT, CalculatePlayerPartyCount - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if 0, OldaleTown_PokemonCenter_2F_EventScript_1A41E1 specialval RESULT, GetNameOfEnigmaBerryInPlayerParty - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A41EE setvar RESULT, 1 return @@ -449,14 +449,14 @@ VerdanturfTown_PokemonCenter_2F_EventScript_1A41FB:: @ 81A41FB lock faceplayer msgbox OldaleTown_PokemonCenter_2F_Text_1A45FE, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4229 OldaleTown_PokemonCenter_2F_EventScript_1A4229:: @ 81A4229 call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 message OldaleTown_PokemonCenter_2F_Text_1A490C waittext @@ -464,19 +464,19 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4229:: @ 81A4229 waitstate special sub_80835D8 waitstate - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4294 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4301 - compare RESULT, 3 + compare_var_to_imm RESULT, 3 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A430D - compare RESULT, 4 + compare_var_to_imm RESULT, 4 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A432D - compare RESULT, 5 + compare_var_to_imm RESULT, 5 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A42F5 - compare RESULT, 7 + compare_var_to_imm RESULT, 7 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A42E9 OldaleTown_PokemonCenter_2F_EventScript_1A4294:: @ 81A4294 @@ -619,7 +619,7 @@ DoubleBattleColosseum_EventScript_1A4383:: @ 81A4383 fadescreen 1 special sub_80C5568 waitstate - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq DoubleBattleColosseum_EventScript_1A43EF setvar 0x8005, 0 special sub_8083B90 @@ -630,7 +630,7 @@ DoubleBattleColosseum_EventScript_1A439E:: @ 81A439E fadescreen 1 special sub_80C5568 waitstate - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq DoubleBattleColosseum_EventScript_1A43EF setvar 0x8005, 1 special sub_8083B90 @@ -641,7 +641,7 @@ DoubleBattleColosseum_EventScript_1A43B9:: @ 81A43B9 fadescreen 1 special sub_80C5568 waitstate - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq DoubleBattleColosseum_EventScript_1A43EF setvar 0x8005, 2 special sub_8083B90 @@ -652,7 +652,7 @@ DoubleBattleColosseum_EventScript_1A43D4:: @ 81A43D4 fadescreen 1 special sub_80C5568 waitstate - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq DoubleBattleColosseum_EventScript_1A43EF setvar 0x8005, 3 special sub_8083B90 @@ -690,7 +690,7 @@ RecordCorner_EventScript_1A4418:: @ 81A4418 setvar 0x8005, 0 special sub_80B929C waitstate - compare 0x4001, 0 + compare_var_to_imm 0x4001, 0 goto_if 5, RecordCorner_EventScript_1A446C end @@ -698,7 +698,7 @@ RecordCorner_EventScript_1A442D:: @ 81A442D setvar 0x8005, 1 special sub_80B929C waitstate - compare 0x4001, 0 + compare_var_to_imm 0x4001, 0 goto_if 5, RecordCorner_EventScript_1A446C end @@ -706,7 +706,7 @@ RecordCorner_EventScript_1A4442:: @ 81A4442 setvar 0x8005, 2 special sub_80B929C waitstate - compare 0x4001, 0 + compare_var_to_imm 0x4001, 0 goto_if 5, RecordCorner_EventScript_1A446C end @@ -714,7 +714,7 @@ RecordCorner_EventScript_1A4457:: @ 81A4457 setvar 0x8005, 3 special sub_80B929C waitstate - compare 0x4001, 0 + compare_var_to_imm 0x4001, 0 goto_if 5, RecordCorner_EventScript_1A446C end @@ -770,7 +770,7 @@ TradeCenter_EventScript_1A44AD:: @ 81A44AD end RecordCorner_EventScript_1A44BC:: @ 81A44BC - compare 0x4000, 0 + compare_var_to_imm 0x4000, 0 goto_if 5, RecordCorner_EventScript_1A44D6 special sub_8064EAC message RecordCorner_Text_1A4DD7 @@ -791,7 +791,7 @@ RecordCorner_EventScript_1A44D6:: @ 81A44D6 TradeRoom_PromptToCancelLink:: @ 81A44E5 msgbox TradeRoom_WillLinkBeTerminated, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq TradeRoom_TerminateLink hidebox 0, 0, 29, 19 end diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index b41a40e14..afac5e6ed 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -5,16 +5,16 @@ VerdanturfTown_ContestLobby_EventScript_1A4E92:: @ 81A4E92 lock faceplayer checkitem ITEM_CONTEST_PASS, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, FallarborTown_ContestLobby_EventScript_1A4EDD - compare 0x408a, 0 + compare_var_to_imm 0x408a, 0 goto_if 5, FallarborTown_ContestLobby_EventScript_1A4F4E checkflag 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1A4F8F bufferstd 0, 0x800b msgbox FallarborTown_ContestLobby_Text_1A5DFC, 4 checkitem ITEM_CONTEST_PASS, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1A4EE1 setflag 1 goto FallarborTown_ContestLobby_EventScript_1A4F8F @@ -25,7 +25,7 @@ FallarborTown_ContestLobby_EventScript_1A4EDD:: @ 81A4EDD return FallarborTown_ContestLobby_EventScript_1A4EE1:: @ 81A4EE1 - compare CONTEST_RANK, 0 + compare_var_to_imm CONTEST_RANK, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1A4EF6 msgbox FallarborTown_ContestLobby_Text_1A6340, 4 releaseall @@ -33,7 +33,7 @@ FallarborTown_ContestLobby_EventScript_1A4EE1:: @ 81A4EE1 FallarborTown_ContestLobby_EventScript_1A4EF6:: @ 81A4EF6 msgbox FallarborTown_ContestLobby_Text_1A64F4, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1A4F13 msgbox FallarborTown_ContestLobby_Text_1A65EA, 4 releaseall @@ -63,7 +63,7 @@ FallarborTown_ContestLobby_EventScript_1A4F4E:: @ 81A4F4E FallarborTown_ContestLobby_EventScript_1A4F67:: @ 81A4F67 giveitem ITEM_LUXURY_BALL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1A4F86 setvar 0x408a, 0 closebutton @@ -120,18 +120,18 @@ FallarborTown_ContestLobby_EventScript_1A503E:: @ 81A503E FallarborTown_ContestLobby_EventScript_1A5048:: @ 81A5048 msgbox FallarborTown_ContestLobby_Text_1A6319, 4 choosecontestpkmn - compare 0x8004, 255 + compare_var_to_imm 0x8004, 255 goto_if_eq FallarborTown_ContestLobby_EventScript_1A5097 special sub_80C43F4 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1A50C8 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1A50D7 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq FallarborTown_ContestLobby_EventScript_1A50FB - compare RESULT, 3 + compare_var_to_imm RESULT, 3 goto_if_eq FallarborTown_ContestLobby_EventScript_1A511F - compare RESULT, 4 + compare_var_to_imm RESULT, 4 goto_if_eq FallarborTown_ContestLobby_EventScript_1A512E end @@ -270,7 +270,7 @@ LinkContestRoom1_EventScript_1A5245:: @ 81A5245 return LinkContestRoom1_EventScript_1A525F:: @ 81A525F - compare 0x4088, 5 + compare_var_to_imm 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A5273 msgbox LinkContestRoom1_Text_1A68F0, 3 return @@ -287,20 +287,20 @@ LinkContestRoom1_EventScript_1A527A:: @ 81A527A call LinkContestRoom1_EventScript_1A53E5 call LinkContestRoom1_EventScript_1A5880 addvar 0x8006, 1 - compare 0x8006, 4 + compare_var_to_imm 0x8006, 4 goto_if 5, LinkContestRoom1_EventScript_1A527A call LinkContestRoom1_EventScript_1A5377 setvar 0x4001, 6 return LinkContestRoom1_EventScript_1A52AE:: @ 81A52AE - compare 0x8006, 0 + compare_var_to_imm 0x8006, 0 goto_if_eq LinkContestRoom1_EventScript_1A52DB - compare 0x8006, 1 + compare_var_to_imm 0x8006, 1 goto_if_eq LinkContestRoom1_EventScript_1A52ED - compare 0x8006, 2 + compare_var_to_imm 0x8006, 2 goto_if_eq LinkContestRoom1_EventScript_1A52FF - compare 0x8006, 3 + compare_var_to_imm 0x8006, 3 goto_if_eq LinkContestRoom1_EventScript_1A5311 return @@ -357,7 +357,7 @@ LinkContestRoom1_EventScript_1A5323:: @ 81A5323 return LinkContestRoom1_EventScript_1A535E:: @ 81A535E - compare 0x4088, 5 + compare_var_to_imm 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A5370 message LinkContestRoom1_Text_1A6A04 waittext @@ -385,7 +385,7 @@ LinkContestRoom1_EventScript_1A5377:: @ 81A5377 return LinkContestRoom1_EventScript_1A53B3:: @ 81A53B3 - compare 0x4088, 5 + compare_var_to_imm 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A53C7 msgbox LinkContestRoom1_Text_1A6A1F, 4 return @@ -396,7 +396,7 @@ LinkContestRoom1_EventScript_1A53C7:: @ 81A53C7 return LinkContestRoom1_EventScript_1A53CE:: @ 81A53CE - compare 0x4088, 5 + compare_var_to_imm 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A53DF message LinkContestRoom1_Text_1A6AE1 return @@ -431,15 +431,15 @@ LinkContestRoom1_EventScript_1A53E5:: @ 81A53E5 LinkContestRoom1_EventScript_1A5455:: @ 81A5455 special sub_80C47A0 - compare 0x4088, 1 + compare_var_to_imm 0x4088, 1 call_if 1, LinkContestRoom1_EventScript_1A555A - compare 0x4088, 2 + compare_var_to_imm 0x4088, 2 call_if 1, LinkContestRoom1_EventScript_1A55B8 - compare 0x4088, 3 + compare_var_to_imm 0x4088, 3 call_if 1, LinkContestRoom1_EventScript_1A5616 - compare 0x4088, 4 + compare_var_to_imm 0x4088, 4 call_if 1, LinkContestRoom1_EventScript_1A5674 - compare 0x4088, 5 + compare_var_to_imm 0x4088, 5 call_if 1, LinkContestRoom1_EventScript_1A56D2 setvar 0x4001, 9 setvar 0x4002, 9 @@ -449,7 +449,7 @@ LinkContestRoom1_EventScript_1A5455:: @ 81A5455 setvar 0x4006, 9 setvar 0x4007, 9 setvar 0x4008, 9 - compare 0x4000, 0 + compare_var_to_imm 0x4000, 0 call_if 2, LinkContestRoom1_EventScript_1A54EB setvar 0x4001, 0 setvar 0x4002, 0 @@ -464,123 +464,123 @@ LinkContestRoom1_EventScript_1A5455:: @ 81A5455 LinkContestRoom1_EventScript_1A54EB:: @ 81A54EB setvar RESULT, 8 special ScriptRandom - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LinkContestRoom1_EventScript_1A5760 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LinkContestRoom1_EventScript_1A5784 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 call_if 1, LinkContestRoom1_EventScript_1A57A8 - compare RESULT, 3 + compare_var_to_imm RESULT, 3 call_if 1, LinkContestRoom1_EventScript_1A57CC - compare RESULT, 4 + compare_var_to_imm RESULT, 4 call_if 1, LinkContestRoom1_EventScript_1A57F0 - compare RESULT, 5 + compare_var_to_imm RESULT, 5 call_if 1, LinkContestRoom1_EventScript_1A5814 - compare RESULT, 6 + compare_var_to_imm RESULT, 6 call_if 1, LinkContestRoom1_EventScript_1A5838 - compare RESULT, 7 + compare_var_to_imm RESULT, 7 call_if 1, LinkContestRoom1_EventScript_1A585C - compare 0x4000, 0 + compare_var_to_imm 0x4000, 0 goto_if 2, LinkContestRoom1_EventScript_1A54EB waitmove 0 return LinkContestRoom1_EventScript_1A555A:: @ 81A555A - compare 0x8004, 80 + compare_var_to_imm 0x8004, 80 goto_if 2, LinkContestRoom1_EventScript_1A575A - compare 0x8004, 70 + compare_var_to_imm 0x8004, 70 goto_if 2, LinkContestRoom1_EventScript_1A5754 - compare 0x8004, 60 + compare_var_to_imm 0x8004, 60 goto_if 2, LinkContestRoom1_EventScript_1A574E - compare 0x8004, 50 + compare_var_to_imm 0x8004, 50 goto_if 2, LinkContestRoom1_EventScript_1A5748 - compare 0x8004, 40 + compare_var_to_imm 0x8004, 40 goto_if 2, LinkContestRoom1_EventScript_1A5742 - compare 0x8004, 30 + compare_var_to_imm 0x8004, 30 goto_if 2, LinkContestRoom1_EventScript_1A573C - compare 0x8004, 20 + compare_var_to_imm 0x8004, 20 goto_if 2, LinkContestRoom1_EventScript_1A5736 - compare 0x8004, 10 + compare_var_to_imm 0x8004, 10 goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return LinkContestRoom1_EventScript_1A55B8:: @ 81A55B8 - compare 0x8004, 230 + compare_var_to_imm 0x8004, 230 goto_if 2, LinkContestRoom1_EventScript_1A575A - compare 0x8004, 210 + compare_var_to_imm 0x8004, 210 goto_if 2, LinkContestRoom1_EventScript_1A5754 - compare 0x8004, 190 + compare_var_to_imm 0x8004, 190 goto_if 2, LinkContestRoom1_EventScript_1A574E - compare 0x8004, 170 + compare_var_to_imm 0x8004, 170 goto_if 2, LinkContestRoom1_EventScript_1A5748 - compare 0x8004, 150 + compare_var_to_imm 0x8004, 150 goto_if 2, LinkContestRoom1_EventScript_1A5742 - compare 0x8004, 130 + compare_var_to_imm 0x8004, 130 goto_if 2, LinkContestRoom1_EventScript_1A573C - compare 0x8004, 110 + compare_var_to_imm 0x8004, 110 goto_if 2, LinkContestRoom1_EventScript_1A5736 - compare 0x8004, 90 + compare_var_to_imm 0x8004, 90 goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return LinkContestRoom1_EventScript_1A5616:: @ 81A5616 - compare 0x8004, 380 + compare_var_to_imm 0x8004, 380 goto_if 2, LinkContestRoom1_EventScript_1A575A - compare 0x8004, 350 + compare_var_to_imm 0x8004, 350 goto_if 2, LinkContestRoom1_EventScript_1A5754 - compare 0x8004, 320 + compare_var_to_imm 0x8004, 320 goto_if 2, LinkContestRoom1_EventScript_1A574E - compare 0x8004, 290 + compare_var_to_imm 0x8004, 290 goto_if 2, LinkContestRoom1_EventScript_1A5748 - compare 0x8004, 260 + compare_var_to_imm 0x8004, 260 goto_if 2, LinkContestRoom1_EventScript_1A5742 - compare 0x8004, 230 + compare_var_to_imm 0x8004, 230 goto_if 2, LinkContestRoom1_EventScript_1A573C - compare 0x8004, 200 + compare_var_to_imm 0x8004, 200 goto_if 2, LinkContestRoom1_EventScript_1A5736 - compare 0x8004, 170 + compare_var_to_imm 0x8004, 170 goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return LinkContestRoom1_EventScript_1A5674:: @ 81A5674 - compare 0x8004, 600 + compare_var_to_imm 0x8004, 600 goto_if 2, LinkContestRoom1_EventScript_1A575A - compare 0x8004, 560 + compare_var_to_imm 0x8004, 560 goto_if 2, LinkContestRoom1_EventScript_1A5754 - compare 0x8004, 520 + compare_var_to_imm 0x8004, 520 goto_if 2, LinkContestRoom1_EventScript_1A574E - compare 0x8004, 480 + compare_var_to_imm 0x8004, 480 goto_if 2, LinkContestRoom1_EventScript_1A5748 - compare 0x8004, 440 + compare_var_to_imm 0x8004, 440 goto_if 2, LinkContestRoom1_EventScript_1A5742 - compare 0x8004, 400 + compare_var_to_imm 0x8004, 400 goto_if 2, LinkContestRoom1_EventScript_1A573C - compare 0x8004, 360 + compare_var_to_imm 0x8004, 360 goto_if 2, LinkContestRoom1_EventScript_1A5736 - compare 0x8004, 320 + compare_var_to_imm 0x8004, 320 goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return LinkContestRoom1_EventScript_1A56D2:: @ 81A56D2 - compare 0x8004, 600 + compare_var_to_imm 0x8004, 600 goto_if 2, LinkContestRoom1_EventScript_1A575A - compare 0x8004, 550 + compare_var_to_imm 0x8004, 550 goto_if 2, LinkContestRoom1_EventScript_1A5754 - compare 0x8004, 500 + compare_var_to_imm 0x8004, 500 goto_if 2, LinkContestRoom1_EventScript_1A574E - compare 0x8004, 450 + compare_var_to_imm 0x8004, 450 goto_if 2, LinkContestRoom1_EventScript_1A5748 - compare 0x8004, 400 + compare_var_to_imm 0x8004, 400 goto_if 2, LinkContestRoom1_EventScript_1A5742 - compare 0x8004, 300 + compare_var_to_imm 0x8004, 300 goto_if 2, LinkContestRoom1_EventScript_1A573C - compare 0x8004, 200 + compare_var_to_imm 0x8004, 200 goto_if 2, LinkContestRoom1_EventScript_1A5736 - compare 0x8004, 100 + compare_var_to_imm 0x8004, 100 goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return @@ -618,7 +618,7 @@ LinkContestRoom1_EventScript_1A575A:: @ 81A575A return LinkContestRoom1_EventScript_1A5760:: @ 81A5760 - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 goto_if_eq LinkContestRoom1_EventScript_1A5783 move 6, LinkContestRoom1_Movement_1A5D8D playsfx 21 @@ -631,7 +631,7 @@ LinkContestRoom1_EventScript_1A5783:: @ 81A5783 return LinkContestRoom1_EventScript_1A5784:: @ 81A5784 - compare 0x4002, 1 + compare_var_to_imm 0x4002, 1 goto_if_eq LinkContestRoom1_EventScript_1A57A7 move 12, LinkContestRoom1_Movement_1A5D8D playsfx 21 @@ -644,7 +644,7 @@ LinkContestRoom1_EventScript_1A57A7:: @ 81A57A7 return LinkContestRoom1_EventScript_1A57A8:: @ 81A57A8 - compare 0x4003, 1 + compare_var_to_imm 0x4003, 1 goto_if_eq LinkContestRoom1_EventScript_1A57CB move 7, LinkContestRoom1_Movement_1A5D8D playsfx 21 @@ -657,7 +657,7 @@ LinkContestRoom1_EventScript_1A57CB:: @ 81A57CB return LinkContestRoom1_EventScript_1A57CC:: @ 81A57CC - compare 0x4004, 1 + compare_var_to_imm 0x4004, 1 goto_if_eq LinkContestRoom1_EventScript_1A57EF move 8, LinkContestRoom1_Movement_1A5D8D playsfx 21 @@ -670,7 +670,7 @@ LinkContestRoom1_EventScript_1A57EF:: @ 81A57EF return LinkContestRoom1_EventScript_1A57F0:: @ 81A57F0 - compare 0x4005, 1 + compare_var_to_imm 0x4005, 1 goto_if_eq LinkContestRoom1_EventScript_1A5813 move 9, LinkContestRoom1_Movement_1A5D8D playsfx 21 @@ -683,7 +683,7 @@ LinkContestRoom1_EventScript_1A5813:: @ 81A5813 return LinkContestRoom1_EventScript_1A5814:: @ 81A5814 - compare 0x4006, 1 + compare_var_to_imm 0x4006, 1 goto_if_eq LinkContestRoom1_EventScript_1A5837 move 10, LinkContestRoom1_Movement_1A5D8D playsfx 21 @@ -696,7 +696,7 @@ LinkContestRoom1_EventScript_1A5837:: @ 81A5837 return LinkContestRoom1_EventScript_1A5838:: @ 81A5838 - compare 0x4007, 1 + compare_var_to_imm 0x4007, 1 goto_if_eq LinkContestRoom1_EventScript_1A585B move 11, LinkContestRoom1_Movement_1A5D8D playsfx 21 @@ -709,7 +709,7 @@ LinkContestRoom1_EventScript_1A585B:: @ 81A585B return LinkContestRoom1_EventScript_1A585C:: @ 81A585C - compare 0x4008, 1 + compare_var_to_imm 0x4008, 1 goto_if_eq LinkContestRoom1_EventScript_1A587F move 15, LinkContestRoom1_Movement_1A5D8D playsfx 21 @@ -782,7 +782,7 @@ LinkContestRoom1_EventScript_1A58EE:: @ 81A58EE return LinkContestRoom1_EventScript_1A5930:: @ 81A5930 - compare 0x4088, 5 + compare_var_to_imm 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A5944 msgbox LinkContestRoom1_Text_1A6AF5, 3 return @@ -809,7 +809,7 @@ LinkContestRoom1_EventScript_1A594A:: @ 81A594A return LinkContestRoom1_EventScript_1A5984:: @ 81A5984 - compare 0x4088, 5 + compare_var_to_imm 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A5998 msgbox LinkContestRoom1_Text_1A6C06, 4 return @@ -821,7 +821,7 @@ LinkContestRoom1_EventScript_1A5998:: @ 81A5998 return LinkContestRoom1_EventScript_1A59A2:: @ 81A59A2 - compare 0x4088, 5 + compare_var_to_imm 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A59B6 msgbox LinkContestRoom1_Text_1A6C21, 4 return @@ -833,7 +833,7 @@ LinkContestRoom1_EventScript_1A59B6:: @ 81A59B6 return LinkContestRoom1_EventScript_1A59C0:: @ 81A59C0 - compare 0x4088, 5 + compare_var_to_imm 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A59D4 msgbox LinkContestRoom1_Text_1A6C9D, 4 return @@ -845,7 +845,7 @@ LinkContestRoom1_EventScript_1A59D4:: @ 81A59D4 return LinkContestRoom1_EventScript_1A59DE:: @ 81A59DE - compare 0x4088, 5 + compare_var_to_imm 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A59F2 msgbox LinkContestRoom1_Text_1A6D16, 4 return @@ -895,7 +895,7 @@ LinkContestRoom1_EventScript_1A5A49:: @ 81A5A49 return LinkContestRoom1_EventScript_1A5A75:: @ 81A5A75 - compare 0x4088, 5 + compare_var_to_imm 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A5A89 msgbox LinkContestRoom1_Text_1A6D3C, 4 return @@ -908,7 +908,7 @@ LinkContestRoom1_EventScript_1A5A89:: @ 81A5A89 LinkContestRoom1_EventScript_1A5A90:: @ 81A5A90 addvar 0x4001, 1 lockall - compare 0x4088, 1 + compare_var_to_imm 0x4088, 1 call_if 2, LinkContestRoom1_EventScript_1A5AE4 move 9, LinkContestRoom1_Movement_1A5DB7 move 12, LinkContestRoom1_Movement_1A5DBB @@ -918,7 +918,7 @@ LinkContestRoom1_EventScript_1A5A90:: @ 81A5A90 move 11, LinkContestRoom1_Movement_1A5DBB move 6, LinkContestRoom1_Movement_1A5DB3 move 8, LinkContestRoom1_Movement_1A5DAF - compare 0x4001, 4 + compare_var_to_imm 0x4001, 4 goto_if 5, LinkContestRoom1_EventScript_1A5A90 pause 30 return @@ -993,7 +993,7 @@ LinkContestRoom1_EventScript_1A5AE4:: @ 81A5AE4 return LinkContestRoom1_EventScript_1A5BAB:: @ 81A5BAB - compare 0x4088, 5 + compare_var_to_imm 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A5C4C call LinkContestRoom1_EventScript_1A5C12 checkflag 2 @@ -1007,7 +1007,7 @@ LinkContestRoom1_EventScript_1A5BAB:: @ 81A5BAB call LinkContestRoom1_EventScript_1A5A90 pause 30 special sub_80C4CF8 - compare 0x8004, 1 + compare_var_to_imm 0x8004, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C46 return @@ -1016,24 +1016,24 @@ LinkContestRoom1_EventScript_1A5BF6:: @ 81A5BF6 msgbox LinkContestRoom1_Text_1A6DF1, 3 pause 90 special sub_80C4CF8 - compare 0x8004, 1 + compare_var_to_imm 0x8004, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C46 return LinkContestRoom1_EventScript_1A5C12:: @ 81A5C12 specialval RESULT, sub_80C4440 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C23 return LinkContestRoom1_EventScript_1A5C23:: @ 81A5C23 special sub_80C47C0 - compare 0x8005, 3 + compare_var_to_imm 0x8005, 3 goto_if_eq LinkContestRoom1_EventScript_1A5C32 return LinkContestRoom1_EventScript_1A5C32:: @ 81A5C32 - compare CONTEST_RANK, 3 + compare_var_to_imm CONTEST_RANK, 3 goto_if_eq LinkContestRoom1_EventScript_1A5C41 setflag 2 return @@ -1053,7 +1053,7 @@ LinkContestRoom1_EventScript_1A5C4C:: @ 81A5C4C pause 60 call LinkContestRoom1_EventScript_1A5C6A special sub_80C4CF8 - compare 0x8004, 1 + compare_var_to_imm 0x8004, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C64 closebutton return @@ -1065,7 +1065,7 @@ LinkContestRoom1_EventScript_1A5C64:: @ 81A5C64 LinkContestRoom1_EventScript_1A5C6A:: @ 81A5C6A special sub_80C496C special sub_80C47C0 - comparevars 0x8004, 0x8005 + compare_var_to_var 0x8004, 0x8005 goto_if_eq LinkContestRoom1_EventScript_1A5C7C return @@ -1111,19 +1111,19 @@ LinkContestRoom1_EventScript_1A5CD8:: @ 81A5CD8 LinkContestRoom1_EventScript_1A5CE5:: @ 81A5CE5 special sub_80C47C0 - compare 0x8005, 3 + compare_var_to_imm 0x8005, 3 goto_if_eq LinkContestRoom1_EventScript_1A5CFC msgbox LinkContestRoom1_Text_1A6DF1, 3 return LinkContestRoom1_EventScript_1A5CFC:: @ 81A5CFC - compare 0x4088, 2 + compare_var_to_imm 0x4088, 2 call_if 1, LinkContestRoom1_EventScript_1A5C42 inccounter GAME_STAT_WON_CONTEST specialval RESULT, sub_80C4440 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LinkContestRoom1_EventScript_1A5D5B - compare CONTEST_RANK, 3 + compare_var_to_imm CONTEST_RANK, 3 goto_if_eq LinkContestRoom1_EventScript_1A5D3B msgbox LinkContestRoom1_Text_1A6DF1, 3 return @@ -1135,7 +1135,7 @@ LinkContestRoom1_EventScript_1A5D2D:: @ 81A5D2D LinkContestRoom1_EventScript_1A5D3B:: @ 81A5D3B giveitem ITEM_LUXURY_BALL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LinkContestRoom1_EventScript_1A5D2D msgbox LinkContestRoom1_Text_1A6DF1, 3 return diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc index 4c57e0b9f..acb87170a 100644 --- a/data/scripts/day_care.inc +++ b/data/scripts/day_care.inc @@ -3,11 +3,11 @@ Route117_EventScript_1B222D:: @ 81B222D faceplayer special sp0B5_daycare specialval RESULT, sp0B6_daycare - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_1B2262 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq Route117_EventScript_1B22E7 - compare RESULT, 3 + compare_var_to_imm RESULT, 3 goto_if_eq Route117_EventScript_1B22FE msgbox Route117_Text_1B25CB, 4 release @@ -15,10 +15,10 @@ Route117_EventScript_1B222D:: @ 81B222D Route117_EventScript_1B2262:: @ 81B2262 msgbox Route117_Text_1B2659, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_1B2298 msgbox Route117_Text_1B28C4, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_1B2298 msgbox Route117_Text_1B2745, 4 clearflag 134 @@ -28,7 +28,7 @@ Route117_EventScript_1B2262:: @ 81B2262 Route117_EventScript_1B2298:: @ 81B2298 specialval RESULT, CalculatePlayerPartyCount - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if 5, Route117_EventScript_1B22B2 msgbox Route117_Text_1B2766, 4 release @@ -48,7 +48,7 @@ Route117_EventScript_1B22B2:: @ 81B22B2 Route117_EventScript_1B22CD:: @ 81B22CD specialval RESULT, sub_8042B4C - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, Route117_EventScript_1B22DE return @@ -82,14 +82,14 @@ Route117_PokemonDayCare_EventScript_1B2327:: @ 81B2327 lock faceplayer specialval RESULT, sp0B6_daycare - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B2407 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B242B - compare RESULT, 3 + compare_var_to_imm RESULT, 3 goto_if_eq Route117_PokemonDayCare_EventScript_1B2558 msgbox Route117_PokemonDayCare_Text_1B28F2, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B236C msgbox Route117_PokemonDayCare_Text_1B2A14, 4 release @@ -97,16 +97,16 @@ Route117_PokemonDayCare_EventScript_1B2327:: @ 81B2327 Route117_PokemonDayCare_EventScript_1B236C:: @ 81B236C specialval RESULT, sub_8095B6C - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B23F3 msgbox Route117_PokemonDayCare_Text_1B2947, 4 fadescreen 1 special ChooseSendDaycareMon waitstate - compare 0x8004, 255 + compare_var_to_imm 0x8004, 255 goto_if_eq Route117_PokemonDayCare_EventScript_1B23D0 specialval RESULT, sub_8095C10 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route117_PokemonDayCare_EventScript_1B23FD specialval 0x8005, sub_8042328 checksound @@ -116,7 +116,7 @@ Route117_PokemonDayCare_EventScript_1B236C:: @ 81B236C special Daycare_SendPokemon_Special inccounter GAME_STAT_USED_DAYCARE specialval RESULT, sp0B6_daycare - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B23DA release end @@ -128,7 +128,7 @@ Route117_PokemonDayCare_EventScript_1B23D0:: @ 81B23D0 Route117_PokemonDayCare_EventScript_1B23DA:: @ 81B23DA msgbox Route117_PokemonDayCare_Text_1B29AD, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B236C goto Route117_PokemonDayCare_EventScript_1B23D0 end @@ -154,7 +154,7 @@ Route117_PokemonDayCare_EventScript_1B2411:: @ 81B2411 Route117_PokemonDayCare_EventScript_1B241A:: @ 81B241A specialval RESULT, sub_80417B8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 5, Route117_PokemonDayCare_EventScript_1B2411 return @@ -163,26 +163,26 @@ Route117_PokemonDayCare_EventScript_1B242B:: @ 81B242B setvar 0x8004, 0 call Route117_PokemonDayCare_EventScript_1B241A msgbox Route117_PokemonDayCare_Text_1B29AD, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B236C msgbox Route117_PokemonDayCare_Text_1B2BF6, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B2469 goto Route117_PokemonDayCare_EventScript_1B23D0 end Route117_PokemonDayCare_EventScript_1B2469:: @ 81B2469 specialval RESULT, CalculatePlayerPartyCount - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq Route117_PokemonDayCare_EventScript_1B2539 specialval RESULT, sp0B6_daycare setvar 0x8004, 0 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B24A8 special ShowDaycareLevelMenu waitstate copyvar 0x8004, RESULT - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B23D0 goto Route117_PokemonDayCare_EventScript_1B24A8 end @@ -190,14 +190,14 @@ Route117_PokemonDayCare_EventScript_1B2469:: @ 81B2469 Route117_PokemonDayCare_EventScript_1B24A8:: @ 81B24A8 special sub_8041770 msgbox Route117_PokemonDayCare_Text_1B2B49, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B24C4 goto Route117_PokemonDayCare_EventScript_1B23D0 end Route117_PokemonDayCare_EventScript_1B24C4:: @ 81B24C4 specialval RESULT, sub_80B7CE8 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B24DE msgbox Route117_PokemonDayCare_Text_1B2A30, 4 release @@ -215,14 +215,14 @@ Route117_PokemonDayCare_EventScript_1B24DE:: @ 81B24DE msgbox Route117_PokemonDayCare_Text_1B2B93, 4 waitpokecry specialval RESULT, sp0B6_daycare - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B2520 goto Route117_PokemonDayCare_EventScript_1B23D0 end Route117_PokemonDayCare_EventScript_1B2520:: @ 81B2520 msgbox Route117_PokemonDayCare_Text_1B2A4F, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B2469 goto Route117_PokemonDayCare_EventScript_1B23D0 end @@ -264,7 +264,7 @@ Route117_PokemonDayCare_EventScript_1B2558:: @ 81B2558 setvar 0x8004, 1 call Route117_PokemonDayCare_EventScript_1B241A msgbox Route117_PokemonDayCare_Text_1B2BF6, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B2469 msgbox Route117_PokemonDayCare_Text_1B2A76, 4 release @@ -273,7 +273,7 @@ Route117_PokemonDayCare_EventScript_1B2558:: @ 81B2558 @ 81B2591 special ShowDaycareLevelMenu waitstate - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B23D0 copyvar 0x8004, RESULT specialval RESULT, sub_8041648 diff --git a/data/scripts/gabby_and_ty.inc b/data/scripts/gabby_and_ty.inc index 2625ff573..a2bae7c46 100644 --- a/data/scripts/gabby_and_ty.inc +++ b/data/scripts/gabby_and_ty.inc @@ -202,11 +202,11 @@ Route120_EventScript_1AE582:: @ 81AE582 Route111_EventScript_1AE5A2:: @ 81AE5A2 special GabbyAndTyBeforeInterview special GabbyAndTySetScriptVarsToFieldObjectLocalIds - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, Route111_EventScript_1AE5E0 - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, Route111_EventScript_1AE5EB - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, Route111_EventScript_1AE5FD checkflag 1 goto_if_eq Route111_EventScript_1AE73A @@ -236,16 +236,16 @@ Route118_EventScript_1AE60F:: @ 81AE60F Route120_EventScript_1AE60F:: @ 81AE60F special GabbyAndTyBeforeInterview special GabbyAndTySetScriptVarsToFieldObjectLocalIds - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, Route111_EventScript_1AE5E0 - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, Route111_EventScript_1AE5EB - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, Route111_EventScript_1AE5FD checkflag 1 goto_if_eq Route111_EventScript_1AE73A specialval RESULT, GabbyAndTyGetLastQuote - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route111_EventScript_1AE69F msgbox Route111_Text_1AC10A, 4 specialval RESULT, sub_80BDD18 @@ -300,14 +300,14 @@ Route111_EventScript_1AE6E5:: @ 81AE6E5 end Route111_EventScript_1AE6F3:: @ 81AE6F3 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route111_EventScript_1AE72D msgbox Route111_Text_1AC40F, 4 setvar 0x8004, 10 call Route111_EventScript_1A00F3 lock faceplayer - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route111_EventScript_1AE72D msgbox Route111_Text_1AC487, 4 special sub_80BDC14 diff --git a/data/scripts/magma_chimney.inc b/data/scripts/magma_chimney.inc index 18bd1d53b..248c9622e 100644 --- a/data/scripts/magma_chimney.inc +++ b/data/scripts/magma_chimney.inc @@ -67,9 +67,9 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB fadescreen 0 movespriteperm 1, 10, 12 reappear 1 - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, MtChimney_EventScript_1B2D7D - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, MtChimney_EventScript_1B2D88 move 255, MtChimney_Movement_1A083F waitmove 0 @@ -79,9 +79,9 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB msgbox MtChimney_Text_1B3FFE, 4 .endif closebutton - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, MtChimney_EventScript_1B2D93 - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, MtChimney_EventScript_1B2D9E disappear 1 setflag 927 diff --git a/data/scripts/maps/AbandonedShip_CaptainsOffice.inc b/data/scripts/maps/AbandonedShip_CaptainsOffice.inc index eb912028a..97871a9f5 100644 --- a/data/scripts/maps/AbandonedShip_CaptainsOffice.inc +++ b/data/scripts/maps/AbandonedShip_CaptainsOffice.inc @@ -7,7 +7,7 @@ AbandonedShip_CaptainsOffice_EventScript_15EAF5:: @ 815EAF5 checkflag 294 goto_if_eq AbandonedShip_CaptainsOffice_EventScript_15EB2D checkitem ITEM_SCANNER, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq AbandonedShip_CaptainsOffice_EventScript_15EB23 checkflag 1078 goto_if_eq AbandonedShip_CaptainsOffice_EventScript_15EB2D diff --git a/data/scripts/maps/AbandonedShip_Corridors_B1F.inc b/data/scripts/maps/AbandonedShip_Corridors_B1F.inc index 212d80416..c2f813e88 100644 --- a/data/scripts/maps/AbandonedShip_Corridors_B1F.inc +++ b/data/scripts/maps/AbandonedShip_Corridors_B1F.inc @@ -31,7 +31,7 @@ AbandonedShip_Corridors_B1F_EventScript_15E9D3:: @ 815E9D3 checkflag 239 goto_if_eq AbandonedShip_Corridors_B1F_EventScript_15EA14 checkitem ITEM_STORAGE_KEY, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq AbandonedShip_Corridors_B1F_EventScript_15EA0A msgbox AbandonedShip_Corridors_B1F_Text_198692, 4 playsfx 21 diff --git a/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc b/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc index 9f0b5ca85..c3a48f55d 100644 --- a/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc +++ b/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc @@ -63,7 +63,7 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EBF3:: @ 815EBF3 checkflag 240 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 checkitem ITEM_ROOM_1_KEY, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECCF msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 playsfx 21 @@ -79,7 +79,7 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EC2A:: @ 815EC2A checkflag 241 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 checkitem ITEM_ROOM_2_KEY, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECD9 msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 playsfx 21 @@ -95,7 +95,7 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EC61:: @ 815EC61 checkflag 242 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 checkitem ITEM_ROOM_4_KEY, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECE3 msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 playsfx 21 @@ -111,7 +111,7 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EC98:: @ 815EC98 checkflag 243 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 checkitem ITEM_ROOM_6_KEY, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECED msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 playsfx 21 diff --git a/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc b/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc index d8ed3fe07..bda0e9603 100644 --- a/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc +++ b/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc @@ -10,11 +10,11 @@ AbandonedShip_HiddenFloorRooms_EventScript_15ED11:: @ 815ED11 setvar 0x4001, 1 getplayerxy 0x4002, 0x4003 setvar 0x4004, 1 - compare 0x4002, 21 + compare_var_to_imm 0x4002, 21 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED89 - compare 0x4002, 36 + compare_var_to_imm 0x4002, 36 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED8F - compare 0x4003, 2 + compare_var_to_imm 0x4003, 2 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED95 switch 0x4004 case 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED9B @@ -44,7 +44,7 @@ AbandonedShip_HiddenFloorRooms_EventScript_15ED9B:: @ 815ED9B setanimation 2, 0 doanimation 54 specialval RESULT, sub_810F4D4 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE8B checkanimation 54 pause 10 @@ -55,10 +55,10 @@ AbandonedShip_HiddenFloorRooms_EventScript_15EDC4:: @ 815EDC4 AbandonedShip_HiddenFloorRooms_EventScript_15EDC5:: @ 815EDC5 specialval RESULT, sub_810F488 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq AbandonedShip_HiddenFloorRooms_EventScript_15EDEA pause 20 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE6B checkanimation 54 pause 10 @@ -78,7 +78,7 @@ AbandonedShip_HiddenFloorRooms_EventScript_15EDEB:: @ 815EDEB setanimation 2, 0 doanimation 54 specialval RESULT, sub_810F4FC - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE9B checkanimation 54 pause 10 @@ -99,7 +99,7 @@ AbandonedShip_HiddenFloorRooms_EventScript_15EE23:: @ 815EE23 setanimation 2, 0 doanimation 54 specialval RESULT, sub_810F4B0 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE7B checkanimation 54 pause 10 diff --git a/data/scripts/maps/AbandonedShip_Rooms2_1F.inc b/data/scripts/maps/AbandonedShip_Rooms2_1F.inc index b7fe34b81..0c223cbaa 100644 --- a/data/scripts/maps/AbandonedShip_Rooms2_1F.inc +++ b/data/scripts/maps/AbandonedShip_Rooms2_1F.inc @@ -4,7 +4,7 @@ AbandonedShip_Rooms2_1F_MapScripts:: @ 815EA67 AbandonedShip_Rooms2_1F_EventScript_15EA68:: @ 815EA68 trainerbattle 4, OPPONENT_LOIS_AND_HAL_1, 0, AbandonedShip_Rooms2_1F_Text_1987C1, AbandonedShip_Rooms2_1F_Text_1987FE, AbandonedShip_Rooms2_1F_Text_19887F specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq AbandonedShip_Rooms2_1F_EventScript_15EA93 msgbox AbandonedShip_Rooms2_1F_Text_198835, 6 end @@ -17,7 +17,7 @@ AbandonedShip_Rooms2_1F_EventScript_15EA93:: @ 815EA93 AbandonedShip_Rooms2_1F_EventScript_15EAAE:: @ 815EAAE trainerbattle 4, OPPONENT_LOIS_AND_HAL_1, 0, AbandonedShip_Rooms2_1F_Text_1988CC, AbandonedShip_Rooms2_1F_Text_198916, AbandonedShip_Rooms2_1F_Text_19899A specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq AbandonedShip_Rooms2_1F_EventScript_15EAD9 msgbox AbandonedShip_Rooms2_1F_Text_198934, 6 end diff --git a/data/scripts/maps/BattleTower_Corridor.inc b/data/scripts/maps/BattleTower_Corridor.inc index cfb4ba855..4b3dae8f8 100644 --- a/data/scripts/maps/BattleTower_Corridor.inc +++ b/data/scripts/maps/BattleTower_Corridor.inc @@ -4,7 +4,7 @@ BattleTower_Corridor_MapScripts:: @ 8160845 .byte 0 BattleTower_Corridor_MapScript1_160850:: @ 8160850 - compare 0x8006, 1 + compare_var_to_imm 0x8006, 1 goto_if_eq BattleTower_Corridor_EventScript_16086E setmaptile 12, 0, 519, 0 setmaptile 12, 1, 527, 0 @@ -21,7 +21,7 @@ BattleTower_Corridor_MapScript2_160881:: @ 8160881 BattleTower_Corridor_EventScript_16088B:: @ 816088B setvar 0x4000, 1 - compare 0x8006, 1 + compare_var_to_imm 0x8006, 1 goto_if_eq BattleTower_Corridor_EventScript_1608B1 move 1, BattleTower_Corridor_Movement_1608D5 move 255, BattleTower_Corridor_Movement_1608D4 diff --git a/data/scripts/maps/BattleTower_Lobby.inc b/data/scripts/maps/BattleTower_Lobby.inc index fc5cee29a..4caffb405 100644 --- a/data/scripts/maps/BattleTower_Lobby.inc +++ b/data/scripts/maps/BattleTower_Lobby.inc @@ -18,7 +18,7 @@ BattleTower_Lobby_EventScript_16029C:: @ 816029C checkflag 237 goto_if_eq BattleTower_Lobby_EventScript_1602CD specialval 0x8007, sub_810F404 - compare 0x8007, 50 + compare_var_to_imm 0x8007, 50 goto_if 0, BattleTower_Lobby_EventScript_1602E4 clearflag 941 special sub_810F8FC @@ -26,7 +26,7 @@ BattleTower_Lobby_EventScript_16029C:: @ 816029C BattleTower_Lobby_EventScript_1602CD:: @ 81602CD specialval 0x8007, sub_810F404 - compare 0x8007, 100 + compare_var_to_imm 0x8007, 100 goto_if 0, BattleTower_Lobby_EventScript_1602E4 clearflag 941 special sub_810F8FC @@ -77,10 +77,10 @@ BattleTower_Lobby_EventScript_160342:: @ 8160342 waittext setvar 0x8004, 0 special sub_81358A4 - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq BattleTower_Lobby_EventScript_16037D special sub_8135E50 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_16037D message BattleTower_Lobby_Text_19A6BE waittext @@ -91,7 +91,7 @@ BattleTower_Lobby_EventScript_160342:: @ 8160342 BattleTower_Lobby_EventScript_16037D:: @ 816037D setvar 0x8004, 8 special sub_81358A4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1603AD message BattleTower_Lobby_Text_19A589 waittext @@ -118,7 +118,7 @@ BattleTower_Lobby_EventScript_1603AD:: @ 81603AD waitfanfare setvar 0x8004, 9 special sub_81358A4 - compare RESULT, 49 + compare_var_to_imm RESULT, 49 goto_if 5, BattleTower_Lobby_EventScript_1603F8 msgbox BattleTower_Lobby_Text_19A617, 4 @@ -186,7 +186,7 @@ BattleTower_Lobby_EventScript_16049E:: @ 816049E faceplayer setvar 0x8004, 0 special sub_81358A4 - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq BattleTower_Lobby_EventScript_160342 special SavePlayerParty msgbox BattleTower_Lobby_Text_199F2C, 4 @@ -209,7 +209,7 @@ BattleTower_Lobby_EventScript_1604FA:: @ 81604FA case 2, BattleTower_Lobby_EventScript_160652 case 127, BattleTower_Lobby_EventScript_160652 special CheckPartyBattleTowerBanlist - compare 0x8004, 1 + compare_var_to_imm 0x8004, 1 goto_if_eq BattleTower_Lobby_EventScript_16060D setvar 0x8004, 1 copyvar 0x8005, RESULT @@ -219,7 +219,7 @@ BattleTower_Lobby_EventScript_1604FA:: @ 81604FA fadescreen 1 special ChooseBattleTowerPlayerParty waitstate - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_16064F msgbox BattleTower_Lobby_Text_199FDA, 5 switch RESULT @@ -245,7 +245,7 @@ BattleTower_Lobby_EventScript_160587:: @ 8160587 call S_DoSaveDialog setvar 0x4000, 5 hidebox 0, 0, 15, 10 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_160642 inccounter GAME_STAT_ENTERED_BATTLE_TOWER special SavePlayerParty @@ -347,9 +347,9 @@ BattleTower_Lobby_EventScript_1606CC:: @ 81606CC call BattleTower_Lobby_EventScript_1A00F3 lock faceplayer - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_160701 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_16070B end @@ -394,7 +394,7 @@ BattleTower_Lobby_EventScript_160733:: @ 8160733 msgbox BattleTower_Lobby_Text_19A9EE, 4 setvar 0x8008, 42 givedecoration 42 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1607AF setflag 237 msgbox BattleTower_Lobby_Text_19ABAA, 4 @@ -403,12 +403,12 @@ BattleTower_Lobby_EventScript_160733:: @ 8160733 BattleTower_Lobby_EventScript_160773:: @ 8160773 specialval RESULT, sub_810F404 - compare RESULT, 100 + compare_var_to_imm RESULT, 100 goto_if 0, BattleTower_Lobby_EventScript_1607C5 msgbox BattleTower_Lobby_Text_19AAC4, 4 setvar 0x8008, 43 givedecoration 43 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1607AF setflag 238 msgbox BattleTower_Lobby_Text_19ABAA, 4 diff --git a/data/scripts/maps/BattleTower_Outside.inc b/data/scripts/maps/BattleTower_Outside.inc index 77f8b39b6..beb9ed690 100644 --- a/data/scripts/maps/BattleTower_Outside.inc +++ b/data/scripts/maps/BattleTower_Outside.inc @@ -13,7 +13,7 @@ BattleTower_Outside_EventScript_160168:: @ 8160168 faceplayer msgbox BattleTower_Outside_Text_199D06, 4 checkitem ITEM_SS_TICKET, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Outside_EventScript_1601C6 message BattleTower_Outside_Text_199D9D waittext @@ -36,7 +36,7 @@ BattleTower_Outside_EventScript_1601C6:: @ 81601C6 BattleTower_Outside_EventScript_1601D0:: @ 81601D0 msgbox BattleTower_Outside_Text_199DF2, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Outside_EventScript_160226 msgbox BattleTower_Outside_Text_199E4B, 4 call BattleTower_Outside_EventScript_160232 @@ -47,7 +47,7 @@ BattleTower_Outside_EventScript_1601D0:: @ 81601D0 BattleTower_Outside_EventScript_1601FB:: @ 81601FB msgbox BattleTower_Outside_Text_199E0E, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq BattleTower_Outside_EventScript_160226 msgbox BattleTower_Outside_Text_199E4B, 4 call BattleTower_Outside_EventScript_160232 diff --git a/data/scripts/maps/CaveOfOrigin_B4F.inc b/data/scripts/maps/CaveOfOrigin_B4F.inc index f5ce8138f..e79dfb3ff 100644 --- a/data/scripts/maps/CaveOfOrigin_B4F.inc +++ b/data/scripts/maps/CaveOfOrigin_B4F.inc @@ -66,7 +66,7 @@ CaveOfOrigin_B4F_EventScript_15DDD7:: @ 815DDD7 waitstate clearflag 2145 specialval RESULT, sub_810E300 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, CaveOfOrigin_B4F_EventScript_15DE73 setflag 816 setflag 855 diff --git a/data/scripts/maps/DewfordTown.inc b/data/scripts/maps/DewfordTown.inc index f30c202c8..8e442e46f 100644 --- a/data/scripts/maps/DewfordTown.inc +++ b/data/scripts/maps/DewfordTown.inc @@ -43,7 +43,7 @@ DewfordTown_EventScript_14E06B:: @ 814E06B DewfordTown_EventScript_14E076:: @ 814E076 msgbox DewfordTown_Text_16B3BC, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq DewfordTown_EventScript_14E093 msgbox DewfordTown_Text_16B471, 4 release @@ -77,9 +77,9 @@ DewfordTown_EventScript_14E0C6:: @ 814E0C6 checkflag 257 goto_if_eq DewfordTown_EventScript_14E11B msgbox DewfordTown_Text_16B665, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq DewfordTown_EventScript_14E0F0 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq DewfordTown_EventScript_14E111 end @@ -100,9 +100,9 @@ DewfordTown_EventScript_14E11B:: @ 814E11B message DewfordTown_Text_16B84E waittext multichoice 20, 8, 50, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq DewfordTown_EventScript_14E13D - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq DewfordTown_EventScript_14E147 end @@ -599,9 +599,9 @@ DewfordTown_EventScript_14E413:: @ 814E413 faceplayer call DewfordTown_EventScript_1A0102 msgbox DewfordTown_Text_16B9CE, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq DewfordTown_EventScript_14E439 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq DewfordTown_EventScript_14E443 end @@ -616,15 +616,15 @@ DewfordTown_EventScript_14E443:: @ 814E443 call DewfordTown_EventScript_1A00F3 lock faceplayer - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq DewfordTown_EventScript_14E46E - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq DewfordTown_EventScript_14E485 end DewfordTown_EventScript_14E46E:: @ 814E46E inccounter GAME_STAT_STARTED_TRENDS - compare 0x8004, 0 + compare_var_to_imm 0x8004, 0 goto_if_eq DewfordTown_EventScript_14E48F msgbox DewfordTown_Text_16BB44, 4 release diff --git a/data/scripts/maps/DewfordTown_Gym.inc b/data/scripts/maps/DewfordTown_Gym.inc index cf484a546..4168acd0c 100644 --- a/data/scripts/maps/DewfordTown_Gym.inc +++ b/data/scripts/maps/DewfordTown_Gym.inc @@ -11,11 +11,11 @@ DewfordTown_Gym_EventScript_153071:: @ 8153071 goto_if_eq DewfordTown_Gym_EventScript_1530AA call DewfordTown_Gym_EventScript_153122 copyvar 0x8001, 0x8000 - compare 0x8000, 0 + compare_var_to_imm 0x8000, 0 goto_if_eq DewfordTown_Gym_EventScript_1530BA - compare 0x8000, 1 + compare_var_to_imm 0x8000, 1 goto_if_eq DewfordTown_Gym_EventScript_1530B6 - compare 0x8000, 2 + compare_var_to_imm 0x8000, 2 goto_if_eq DewfordTown_Gym_EventScript_1530B2 goto DewfordTown_Gym_EventScript_1530AE @@ -42,14 +42,14 @@ DewfordTown_Gym_EventScript_1530BA:: @ 81530BA DewfordTown_Gym_EventScript_1530BE:: @ 81530BE call DewfordTown_Gym_EventScript_153122 nop1 - comparevars 0x8000, 0x8001 + compare_var_to_var 0x8000, 0x8001 goto_if_eq DewfordTown_Gym_EventScript_1530F5 copyvar 0x8001, 0x8000 - compare 0x8000, 1 + compare_var_to_imm 0x8000, 1 goto_if_eq DewfordTown_Gym_EventScript_1530F6 - compare 0x8000, 2 + compare_var_to_imm 0x8000, 2 goto_if_eq DewfordTown_Gym_EventScript_153101 - compare 0x8000, 3 + compare_var_to_imm 0x8000, 3 goto_if_eq DewfordTown_Gym_EventScript_15310C DewfordTown_Gym_EventScript_1530F5:: @ 81530F5 @@ -115,7 +115,7 @@ DewfordTown_Gym_EventScript_153177:: @ 8153177 setflag 1204 setflag 2056 addvar 0x4085, 1 - compare 0x4085, 6 + compare_var_to_imm 0x4085, 6 call_if 1, DewfordTown_Gym_EventScript_1A00FB setvar 0x8008, 2 call DewfordTown_Gym_EventScript_1A01C0 @@ -124,7 +124,7 @@ DewfordTown_Gym_EventScript_153177:: @ 8153177 DewfordTown_Gym_EventScript_1531B5:: @ 81531B5 giveitem ITEM_TM08 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq DewfordTown_Gym_EventScript_1A029B msgbox DewfordTown_Gym_Text_1753BF, 4 setflag 166 diff --git a/data/scripts/maps/DewfordTown_Hall.inc b/data/scripts/maps/DewfordTown_Hall.inc index cc096080e..39bcb0236 100644 --- a/data/scripts/maps/DewfordTown_Hall.inc +++ b/data/scripts/maps/DewfordTown_Hall.inc @@ -6,7 +6,7 @@ DewfordTown_Hall_EventScript_153293:: @ 8153293 faceplayer call DewfordTown_Hall_EventScript_1A0102 special sub_80FA5E4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq DewfordTown_Hall_EventScript_1532B2 msgbox DewfordTown_Hall_Text_1754C9, 4 release @@ -31,9 +31,9 @@ DewfordTown_Hall_EventScript_1532CD:: @ 81532CD call DewfordTown_Hall_EventScript_1A0102 special sub_80EB83C msgbox DewfordTown_Hall_Text_1755F9, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq DewfordTown_Hall_EventScript_1532F6 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq DewfordTown_Hall_EventScript_153300 end @@ -191,14 +191,14 @@ DewfordTown_Hall_EventScript_1534FC:: @ 81534FC DewfordTown_Hall_EventScript_1534FD:: @ 81534FD move 8, DewfordTown_Hall_Movement_153599 waitmove 0 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 goto_if_eq DewfordTown_Hall_EventScript_15351E - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 goto_if_eq DewfordTown_Hall_EventScript_153534 end DewfordTown_Hall_EventScript_15351E:: @ 815351E - compare FACING, 4 + compare_var_to_imm FACING, 4 goto_if_eq DewfordTown_Hall_EventScript_1534FC move 255, DewfordTown_Hall_Movement_1A0843 waitmove 0 @@ -210,16 +210,16 @@ DewfordTown_Hall_EventScript_153534:: @ 8153534 DewfordTown_Hall_EventScript_153535:: @ 8153535 move 7, DewfordTown_Hall_Movement_15359B waitmove 0 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 goto_if_eq DewfordTown_Hall_EventScript_153556 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 goto_if_eq DewfordTown_Hall_EventScript_153583 end DewfordTown_Hall_EventScript_153556:: @ 8153556 - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, DewfordTown_Hall_EventScript_15356D - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, DewfordTown_Hall_EventScript_153578 return @@ -234,7 +234,7 @@ DewfordTown_Hall_EventScript_153578:: @ 8153578 return DewfordTown_Hall_EventScript_153583:: @ 8153583 - compare FACING, 3 + compare_var_to_imm FACING, 3 goto_if_eq DewfordTown_Hall_EventScript_1534FC move 255, DewfordTown_Hall_Movement_1A083F waitmove 0 @@ -256,7 +256,7 @@ DewfordTown_Hall_EventScript_15359D:: @ 815359D goto_if_eq DewfordTown_Hall_EventScript_1535D1 msgbox DewfordTown_Hall_Text_175E13, 4 giveitem ITEM_TM36 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq DewfordTown_Hall_EventScript_1A029B setflag 230 release diff --git a/data/scripts/maps/DewfordTown_House2.inc b/data/scripts/maps/DewfordTown_House2.inc index befe47404..b3b3eef34 100644 --- a/data/scripts/maps/DewfordTown_House2.inc +++ b/data/scripts/maps/DewfordTown_House2.inc @@ -8,7 +8,7 @@ DewfordTown_House2_EventScript_1535DC:: @ 81535DC goto_if_eq DewfordTown_House2_EventScript_153615 msgbox DewfordTown_House2_Text_175EFE, 4 giveitem ITEM_SILK_SCARF - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq DewfordTown_House2_EventScript_15360B setflag 289 release diff --git a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc index 2b0f9545f..be3557c22 100644 --- a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc +++ b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc @@ -53,16 +53,16 @@ EverGrandeCity_ChampionsRoom_EventScript_15B821:: @ 815B821 closebutton playsfx 8 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B87C - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B881 reappear 2 call EverGrandeCity_ChampionsRoom_EventScript_15B9BD checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EverGrandeCity_ChampionsRoom_EventScript_15B886 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EverGrandeCity_ChampionsRoom_EventScript_15B8BB end @@ -128,9 +128,9 @@ EverGrandeCity_ChampionsRoom_EventScript_15B8F0:: @ 815B8F0 waitmove 0 msgbox EverGrandeCity_ChampionsRoom_Text_191546, 4 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B9AB - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B9B4 closebutton move 1, EverGrandeCity_ChampionsRoom_Movement_15B9FF diff --git a/data/scripts/maps/EverGrandeCity_DrakesRoom.inc b/data/scripts/maps/EverGrandeCity_DrakesRoom.inc index 3ddcb6ef3..1e32394d9 100644 --- a/data/scripts/maps/EverGrandeCity_DrakesRoom.inc +++ b/data/scripts/maps/EverGrandeCity_DrakesRoom.inc @@ -26,7 +26,7 @@ EverGrandeCity_DrakesRoom_EventScript_15B736:: @ 815B736 EverGrandeCity_DrakesRoom_MapScript1_15B743:: @ 815B743 checkflag 1248 call_if 1, EverGrandeCity_DrakesRoom_EventScript_15B758 - compare 0x409c, 4 + compare_var_to_imm 0x409c, 4 call_if 1, EverGrandeCity_DrakesRoom_EventScript_15B75E end diff --git a/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc b/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc index 2526b2ea6..71e80287b 100644 --- a/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc +++ b/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc @@ -26,7 +26,7 @@ EverGrandeCity_GlaciasRoom_EventScript_15B69C:: @ 815B69C EverGrandeCity_GlaciasRoom_MapScript1_15B6A9:: @ 815B6A9 checkflag 1247 call_if 1, EverGrandeCity_GlaciasRoom_EventScript_15B6BE - compare 0x409c, 3 + compare_var_to_imm 0x409c, 3 call_if 1, EverGrandeCity_GlaciasRoom_EventScript_15B6C4 end diff --git a/data/scripts/maps/EverGrandeCity_HallOfFame.inc b/data/scripts/maps/EverGrandeCity_HallOfFame.inc index 0999f9a4d..123a7cbe2 100644 --- a/data/scripts/maps/EverGrandeCity_HallOfFame.inc +++ b/data/scripts/maps/EverGrandeCity_HallOfFame.inc @@ -44,9 +44,9 @@ EverGrandeCity_HallOfFame_EventScript_15BBA8:: @ 815BBA8 setvar 0x4001, 1 call EverGrandeCity_HallOfFame_EventScript_19FC13 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EverGrandeCity_HallOfFame_EventScript_15BC41 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EverGrandeCity_HallOfFame_EventScript_15BC4D end diff --git a/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc b/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc index 9e2c4c0b7..6fb0d7ba4 100644 --- a/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc +++ b/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc @@ -26,7 +26,7 @@ EverGrandeCity_PhoebesRoom_EventScript_15B602:: @ 815B602 EverGrandeCity_PhoebesRoom_MapScript1_15B60F:: @ 815B60F checkflag 1246 call_if 1, EverGrandeCity_PhoebesRoom_EventScript_15B624 - compare 0x409c, 2 + compare_var_to_imm 0x409c, 2 call_if 1, EverGrandeCity_PhoebesRoom_EventScript_15B62A end diff --git a/data/scripts/maps/EverGrandeCity_PokemonLeague.inc b/data/scripts/maps/EverGrandeCity_PokemonLeague.inc index 7065bdefe..0f0efbd26 100644 --- a/data/scripts/maps/EverGrandeCity_PokemonLeague.inc +++ b/data/scripts/maps/EverGrandeCity_PokemonLeague.inc @@ -50,9 +50,9 @@ EverGrandeCity_PokemonLeague_EventScript_15BAD2:: @ 815BAD2 checkflag 263 goto_if_eq EverGrandeCity_PokemonLeague_EventScript_15BB57 getplayerxy 0x4000, 0x4001 - compare 0x4000, 11 + compare_var_to_imm 0x4000, 11 call_if 4, EverGrandeCity_PokemonLeague_EventScript_15BB34 - compare 0x4000, 8 + compare_var_to_imm 0x4000, 8 call_if 3, EverGrandeCity_PokemonLeague_EventScript_15BB3F message EverGrandeCity_PokemonLeague_Text_1916FD waittext diff --git a/data/scripts/maps/EverGrandeCity_SidneysRoom.inc b/data/scripts/maps/EverGrandeCity_SidneysRoom.inc index d9e7a8213..bc8ad9f5a 100644 --- a/data/scripts/maps/EverGrandeCity_SidneysRoom.inc +++ b/data/scripts/maps/EverGrandeCity_SidneysRoom.inc @@ -7,7 +7,7 @@ EverGrandeCity_SidneysRoom_MapScripts:: @ 815B53F EverGrandeCity_SidneysRoom_MapScript1_15B54F:: @ 815B54F checkflag 1245 call_if 1, EverGrandeCity_SidneysRoom_EventScript_15B564 - compare 0x409c, 1 + compare_var_to_imm 0x409c, 1 call_if 1, EverGrandeCity_SidneysRoom_EventScript_15B56A end diff --git a/data/scripts/maps/FallarborTown_House1.inc b/data/scripts/maps/FallarborTown_House1.inc index 0228fe25d..1971593cb 100644 --- a/data/scripts/maps/FallarborTown_House1.inc +++ b/data/scripts/maps/FallarborTown_House1.inc @@ -11,7 +11,7 @@ FallarborTown_House1_EventScript_153BB5:: @ 8153BB5 checkflag 229 goto_if_eq FallarborTown_House1_EventScript_153C54 checkitem ITEM_METEORITE, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_House1_EventScript_153BDA msgbox FallarborTown_House1_Text_177755, 4 release @@ -22,11 +22,11 @@ FallarborTown_House1_EventScript_153BDA:: @ 8153BDA call_if 0, FallarborTown_House1_EventScript_153C2D checkflag 2 call_if 1, FallarborTown_House1_EventScript_153C3E - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_House1_EventScript_153C47 msgbox FallarborTown_House1_Text_1778C4, 4 giveitem ITEM_TM27 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_House1_EventScript_1A029B setvar 0x8004, 280 call FallarborTown_House1_EventScript_1A067F diff --git a/data/scripts/maps/FallarborTown_House2.inc b/data/scripts/maps/FallarborTown_House2.inc index 5ecc475ea..74674d3df 100644 --- a/data/scripts/maps/FallarborTown_House2.inc +++ b/data/scripts/maps/FallarborTown_House2.inc @@ -14,7 +14,7 @@ FallarborTown_House2_EventScript_153C91:: @ 8153C91 FallarborTown_House2_EventScript_153CB6:: @ 8153CB6 checkitem ITEM_HEART_SCALE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_House2_EventScript_153D60 msgbox FallarborTown_House2_Text_177BDB, 5 switch RESULT @@ -26,12 +26,12 @@ FallarborTown_House2_EventScript_153CE4:: @ 8153CE4 msgbox FallarborTown_House2_Text_177C3F, 4 special sub_80F9A4C waitstate - compare 0x8004, 255 + compare_var_to_imm 0x8004, 255 goto_if_eq FallarborTown_House2_EventScript_153D60 special sub_80FA148 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_House2_EventScript_153D52 - compare 0x8005, 0 + compare_var_to_imm 0x8005, 0 goto_if_eq FallarborTown_House2_EventScript_153D44 goto FallarborTown_House2_EventScript_153D1A end @@ -40,7 +40,7 @@ FallarborTown_House2_EventScript_153D1A:: @ 8153D1A msgbox FallarborTown_House2_Text_177C5D, 4 special sub_8132670 waitstate - compare 0x8004, 0 + compare_var_to_imm 0x8004, 0 goto_if_eq FallarborTown_House2_EventScript_153CE4 msgbox FallarborTown_House2_Text_177CC3, 4 removeitem ITEM_HEART_SCALE, 1 diff --git a/data/scripts/maps/FortreeCity.inc b/data/scripts/maps/FortreeCity.inc index b5426de8e..565effc66 100644 --- a/data/scripts/maps/FortreeCity.inc +++ b/data/scripts/maps/FortreeCity.inc @@ -57,7 +57,7 @@ FortreeCity_EventScript_14C9B3:: @ 814C9B3 lock faceplayer checkitem ITEM_DEVON_SCOPE, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FortreeCity_EventScript_14C9CF msgbox FortreeCity_Text_167868, 4 release @@ -65,7 +65,7 @@ FortreeCity_EventScript_14C9B3:: @ 814C9B3 FortreeCity_EventScript_14C9CF:: @ 814C9CF msgbox FortreeCity_Text_16788B, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FortreeCity_EventScript_14C9E4 release end diff --git a/data/scripts/maps/FortreeCity_Gym.inc b/data/scripts/maps/FortreeCity_Gym.inc index 8744141cb..d601aabab 100644 --- a/data/scripts/maps/FortreeCity_Gym.inc +++ b/data/scripts/maps/FortreeCity_Gym.inc @@ -37,7 +37,7 @@ FortreeCity_Gym_EventScript_157F15:: @ 8157F15 FortreeCity_Gym_EventScript_157F3E:: @ 8157F3E giveitem ITEM_TM40 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FortreeCity_Gym_EventScript_1A029B msgbox FortreeCity_Gym_Text_185F4A, 4 setflag 170 diff --git a/data/scripts/maps/FortreeCity_House1.inc b/data/scripts/maps/FortreeCity_House1.inc index 446831c33..e0942354d 100644 --- a/data/scripts/maps/FortreeCity_House1.inc +++ b/data/scripts/maps/FortreeCity_House1.inc @@ -11,17 +11,17 @@ FortreeCity_House1_EventScript_157E13:: @ 8157E13 specialval RESULT, sub_804D89C copyvar 0x8009, RESULT msgbox FortreeCity_House1_Text_18568C, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FortreeCity_House1_EventScript_157E95 special sub_80F9A0C waitstate copyvar 0x800a, 0x8004 - compare 0x8004, 255 + compare_var_to_imm 0x8004, 255 goto_if_eq FortreeCity_House1_EventScript_157E95 copyvar 0x8005, 0x800a specialval RESULT, sub_804DB2C copyvar 0x800b, RESULT - comparevars RESULT, 0x8009 + compare_var_to_var RESULT, 0x8009 goto_if 5, FortreeCity_House1_EventScript_157E9F copyvar 0x8004, 0x8008 copyvar 0x8005, 0x800a diff --git a/data/scripts/maps/FortreeCity_House2.inc b/data/scripts/maps/FortreeCity_House2.inc index f210dd3ac..ce1dd2344 100644 --- a/data/scripts/maps/FortreeCity_House2.inc +++ b/data/scripts/maps/FortreeCity_House2.inc @@ -22,7 +22,7 @@ FortreeCity_House2_EventScript_1580B4:: @ 81580B4 case 0, FortreeCity_House2_EventScript_158161 msgbox FortreeCity_House2_Text_1864C6, 4 giveitem ITEM_TM10 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FortreeCity_House2_EventScript_1A029B setflag 264 msgbox FortreeCity_House2_Text_18652F, 4 diff --git a/data/scripts/maps/FortreeCity_House4.inc b/data/scripts/maps/FortreeCity_House4.inc index 5de611399..c4284b722 100644 --- a/data/scripts/maps/FortreeCity_House4.inc +++ b/data/scripts/maps/FortreeCity_House4.inc @@ -35,7 +35,7 @@ FortreeCity_House4_EventScript_1581D6:: @ 81581D6 waitmove 0 msgbox FortreeCity_House4_Text_186881, 4 giveitem ITEM_MENTAL_HERB - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FortreeCity_House4_EventScript_1A029B setflag 223 releaseall diff --git a/data/scripts/maps/GraniteCave_StevensRoom.inc b/data/scripts/maps/GraniteCave_StevensRoom.inc index 004c3d679..9473cbe8e 100644 --- a/data/scripts/maps/GraniteCave_StevensRoom.inc +++ b/data/scripts/maps/GraniteCave_StevensRoom.inc @@ -10,17 +10,17 @@ GraniteCave_StevensRoom_EventScript_15CBFA:: @ 815CBFA setflag 189 msgbox GraniteCave_StevensRoom_Text_194BDD, 4 giveitem ITEM_TM47 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, GraniteCave_StevensRoom_EventScript_15CC83 msgbox GraniteCave_StevensRoom_Text_194C8D, 4 closebutton - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, GraniteCave_StevensRoom_EventScript_15CC6D - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, GraniteCave_StevensRoom_EventScript_15CC78 - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, GraniteCave_StevensRoom_EventScript_15CC6D - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, GraniteCave_StevensRoom_EventScript_15CC6D playsfx 9 disappear 1 diff --git a/data/scripts/maps/InsideOfTruck.inc b/data/scripts/maps/InsideOfTruck.inc index a265b97e1..9eedd4e05 100644 --- a/data/scripts/maps/InsideOfTruck.inc +++ b/data/scripts/maps/InsideOfTruck.inc @@ -17,9 +17,9 @@ InsideOfTruck_EventScript_15FC29:: @ 815FC29 lockall setflag 0x4000 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq InsideOfTruck_EventScript_15FC45 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq InsideOfTruck_EventScript_15FC68 end diff --git a/data/scripts/maps/JaggedPass.inc b/data/scripts/maps/JaggedPass.inc index e80894dc2..333ccbaad 100644 --- a/data/scripts/maps/JaggedPass.inc +++ b/data/scripts/maps/JaggedPass.inc @@ -8,7 +8,7 @@ JaggedPass_MapScript1_15D271:: @ 815D271 end JaggedPass_MapScript1_15D274:: @ 815D274 - compare 0x40bd, 1 + compare_var_to_imm 0x40bd, 1 call_if 1, JaggedPass_EventScript_15D280 end @@ -25,7 +25,7 @@ JaggedPass_EventScript_15D285:: @ 815D285 JaggedPass_EventScript_15D29C:: @ 815D29C trainerbattle 0, OPPONENT_DIANA_1, 0, JaggedPass_Text_195E9E, JaggedPass_Text_195EDF specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq JaggedPass_EventScript_15D2C3 msgbox JaggedPass_Text_195F04, 6 end @@ -38,7 +38,7 @@ JaggedPass_EventScript_15D2C3:: @ 815D2C3 JaggedPass_EventScript_15D2DA:: @ 815D2DA trainerbattle 0, OPPONENT_ETHAN_1, 0, JaggedPass_Text_195FF2, JaggedPass_Text_196032 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq JaggedPass_EventScript_15D301 msgbox JaggedPass_Text_196077, 6 end diff --git a/data/scripts/maps/LavaridgeTown.inc b/data/scripts/maps/LavaridgeTown.inc index ca476eb97..e091ed372 100644 --- a/data/scripts/maps/LavaridgeTown.inc +++ b/data/scripts/maps/LavaridgeTown.inc @@ -9,7 +9,7 @@ LavaridgeTown_MapScript1_14E4AE:: @ 814E4AE call_if 1, LavaridgeTown_EventScript_14E4DF call LavaridgeTown_EventScript_1A014E call LavaridgeTown_EventScript_1A0172 - compare 0x4053, 2 + compare_var_to_imm 0x4053, 2 call_if 1, LavaridgeTown_EventScript_14E4D0 end @@ -44,16 +44,16 @@ LavaridgeTown_EventScript_14E4ED:: @ 814E4ED move 8, LavaridgeTown_Movement_1A0835 waitmove 0 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LavaridgeTown_EventScript_14E56B - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LavaridgeTown_EventScript_14E570 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, LavaridgeTown_EventScript_14E68F checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LavaridgeTown_EventScript_14E5AB - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LavaridgeTown_EventScript_14E5D0 end @@ -70,14 +70,14 @@ LavaridgeTown_EventScript_14E575:: @ 814E575 faceplayer setvar 0x8008, 0 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LavaridgeTown_EventScript_14E56B - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LavaridgeTown_EventScript_14E570 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LavaridgeTown_EventScript_14E5AB - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LavaridgeTown_EventScript_14E5D0 end @@ -99,22 +99,22 @@ LavaridgeTown_EventScript_14E5D0:: @ 814E5D0 LavaridgeTown_EventScript_14E5F5:: @ 814E5F5 closebutton - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, LavaridgeTown_EventScript_14E646 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, LavaridgeTown_EventScript_14E64E disappear 8 reappear 7 pause 30 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, LavaridgeTown_EventScript_14E69A - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, LavaridgeTown_EventScript_14E6A5 disappear 7 setvar 0x4053, 2 playmusicbattle 0 fadedefault - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 goto_if_eq LavaridgeTown_EventScript_14E644 releaseall end @@ -128,13 +128,13 @@ LavaridgeTown_EventScript_14E646:: @ 814E646 return LavaridgeTown_EventScript_14E64E:: @ 814E64E - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, LavaridgeTown_EventScript_14E67B - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, LavaridgeTown_EventScript_14E680 - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, LavaridgeTown_EventScript_14E685 - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, LavaridgeTown_EventScript_14E68A return @@ -165,13 +165,13 @@ LavaridgeTown_EventScript_14E69A:: @ 814E69A return LavaridgeTown_EventScript_14E6A5:: @ 814E6A5 - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, LavaridgeTown_EventScript_14E6D2 - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, LavaridgeTown_EventScript_14E6D2 - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, LavaridgeTown_EventScript_14E6DD - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, LavaridgeTown_EventScript_14E6D2 return @@ -237,7 +237,7 @@ LavaridgeTown_Movement_14E70E:: @ 814E70E LavaridgeTown_EventScript_14E710:: @ 814E710 specialval RESULT, player_get_direction_lower_nybble - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LavaridgeTown_EventScript_14E721 end @@ -275,10 +275,10 @@ LavaridgeTown_EventScript_14E75A:: @ 814E75A checkflag 266 goto_if_eq LavaridgeTown_EventScript_14E79E msgbox LavaridgeTown_Text_16C174, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LavaridgeTown_EventScript_14E7B2 countpokemon - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq LavaridgeTown_EventScript_14E7A8 msgbox LavaridgeTown_Text_16C2B6, 4 setflag 266 diff --git a/data/scripts/maps/LavaridgeTown_Gym_1F.inc b/data/scripts/maps/LavaridgeTown_Gym_1F.inc index e22d4471f..68f93443a 100644 --- a/data/scripts/maps/LavaridgeTown_Gym_1F.inc +++ b/data/scripts/maps/LavaridgeTown_Gym_1F.inc @@ -84,7 +84,7 @@ LavaridgeTown_Gym_1F_EventScript_153766:: @ 8153766 setflag 1213 setflag 2058 addvar 0x4085, 1 - compare 0x4085, 6 + compare_var_to_imm 0x4085, 6 call_if 1, LavaridgeTown_Gym_1F_EventScript_1A00FB setvar 0x8008, 4 call LavaridgeTown_Gym_1F_EventScript_1A01C0 @@ -95,7 +95,7 @@ LavaridgeTown_Gym_1F_EventScript_153766:: @ 8153766 LavaridgeTown_Gym_1F_EventScript_1537A7:: @ 81537A7 giveitem ITEM_TM50 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LavaridgeTown_Gym_1F_EventScript_1A029B msgbox LavaridgeTown_Gym_1F_Text_176B8F, 4 setflag 168 diff --git a/data/scripts/maps/LavaridgeTown_HerbShop.inc b/data/scripts/maps/LavaridgeTown_HerbShop.inc index c924684bc..bf148186a 100644 --- a/data/scripts/maps/LavaridgeTown_HerbShop.inc +++ b/data/scripts/maps/LavaridgeTown_HerbShop.inc @@ -32,7 +32,7 @@ LavaridgeTown_HerbShop_EventScript_153655:: @ 8153655 goto_if_eq LavaridgeTown_HerbShop_EventScript_153684 msgbox LavaridgeTown_HerbShop_Text_1761A2, 4 giveitem ITEM_CHARCOAL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LavaridgeTown_HerbShop_EventScript_1A029B setflag 254 release diff --git a/data/scripts/maps/LilycoveCity.inc b/data/scripts/maps/LilycoveCity.inc index f700988f9..801e25396 100644 --- a/data/scripts/maps/LilycoveCity.inc +++ b/data/scripts/maps/LilycoveCity.inc @@ -70,7 +70,7 @@ LilycoveCity_EventScript_14CB74:: @ 814CB74 random 10 addvar RESULT, 133 giveitem RESULT - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_EventScript_1A029B setflag 2255 msgbox LilycoveCity_Text_1C5B1D, 4 @@ -248,9 +248,9 @@ LilycoveCity_EventScript_14CD46:: @ 814CD46 lock faceplayer checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_EventScript_14CD60 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_EventScript_14CDD3 end @@ -260,7 +260,7 @@ LilycoveCity_EventScript_14CD60:: @ 814CD60 call_if 1, LilycoveCity_EventScript_14CDB0 checkflag 286 call_if 0, LilycoveCity_EventScript_14CDB9 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_EventScript_14CDC2 msgbox LilycoveCity_Text_167B94, 4 switch 0x4023 @@ -291,7 +291,7 @@ LilycoveCity_EventScript_14CDD3:: @ 814CDD3 call_if 1, LilycoveCity_EventScript_14CE23 checkflag 286 call_if 0, LilycoveCity_EventScript_14CE2C - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_EventScript_14CE35 msgbox LilycoveCity_Text_1680A9, 4 switch 0x4023 @@ -351,9 +351,9 @@ LilycoveCity_EventScript_14CEA6:: @ 814CEA6 setvar RESULT, 0 checkflag 2060 call_if 1, LilycoveCity_EventScript_14CEDE - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_EventScript_14CEEE - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LilycoveCity_EventScript_14CEF7 clearflag 722 clearflag 849 @@ -388,9 +388,9 @@ LilycoveCity_EventScript_14CF12:: @ 814CF12 setvar RESULT, 0 checkflag 2060 call_if 1, LilycoveCity_EventScript_14CEDE - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_EventScript_14CF47 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LilycoveCity_EventScript_14CF50 clearflag 760 goto LilycoveCity_EventScript_14CF6B diff --git a/data/scripts/maps/LilycoveCity_ContestLobby.inc b/data/scripts/maps/LilycoveCity_ContestLobby.inc index 1abc71238..4785ffbbb 100644 --- a/data/scripts/maps/LilycoveCity_ContestLobby.inc +++ b/data/scripts/maps/LilycoveCity_ContestLobby.inc @@ -31,9 +31,9 @@ LilycoveCity_ContestLobby_EventScript_158898:: @ 8158898 showcontestwinner 0 lockall msgbox LilycoveCity_ContestLobby_Text_1889FD, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_1588DE - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_ContestLobby_EventScript_158918 releaseall end @@ -44,7 +44,7 @@ LilycoveCity_ContestLobby_EventScript_1588DE:: @ 81588DE special sub_80C4CEC setvar 0x4099, 0 specialval RESULT, GiveMonArtistRibbon - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LilycoveCity_ContestLobby_EventScript_158948 move 4, LilycoveCity_ContestLobby_Movement_158A43 waitmove 0 @@ -56,7 +56,7 @@ LilycoveCity_ContestLobby_EventScript_1588DE:: @ 81588DE LilycoveCity_ContestLobby_EventScript_158918:: @ 8158918 msgbox LilycoveCity_ContestLobby_Text_188C41, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_1588DE msgbox LilycoveCity_ContestLobby_Text_188CBD, 4 closebutton @@ -205,9 +205,9 @@ LilycoveCity_ContestLobby_EventScript_158A6A:: @ 8158A6A fadescreen 1 showcontestwinner 0 msgbox LilycoveCity_ContestLobby_Text_1889FD, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_158AAE - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_ContestLobby_EventScript_158AE8 end @@ -217,7 +217,7 @@ LilycoveCity_ContestLobby_EventScript_158AAE:: @ 8158AAE special sub_80C4CEC setvar 0x4099, 0 specialval RESULT, GiveMonArtistRibbon - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LilycoveCity_ContestLobby_EventScript_158B18 move 11, LilycoveCity_ContestLobby_Movement_158B6D waitmove 0 @@ -229,7 +229,7 @@ LilycoveCity_ContestLobby_EventScript_158AAE:: @ 8158AAE LilycoveCity_ContestLobby_EventScript_158AE8:: @ 8158AE8 msgbox LilycoveCity_ContestLobby_Text_188C41, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_158AAE msgbox LilycoveCity_ContestLobby_Text_188CBD, 4 closebutton @@ -305,7 +305,7 @@ LilycoveCity_ContestLobby_Movement_158B7C:: @ 8158B7C LilycoveCity_ContestLobby_EventScript_158B85:: @ 8158B85 lockall checkitem ITEM_CONTEST_PASS, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_ContestLobby_EventScript_158BBA checkflag 2 goto_if_eq LilycoveCity_ContestLobby_EventScript_158BAE @@ -328,11 +328,11 @@ LilycoveCity_ContestLobby_EventScript_158BBA:: @ 8158BBA LilycoveCity_ContestLobby_EventScript_158BC4:: @ 8158BC4 msgbox LilycoveCity_ContestLobby_Text_188521, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_ContestLobby_EventScript_158C35 call S_DoSaveDialog hidebox 0, 0, 15, 9 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_ContestLobby_EventScript_158C35 setflag 3 return @@ -361,18 +361,18 @@ LilycoveCity_ContestLobby_EventScript_158C42:: @ 8158C42 msgbox LilycoveCity_ContestLobby_Text_188703, 4 setvar CONTEST_RANK, 0 choosecontestpkmn - compare 0x8004, 255 + compare_var_to_imm 0x8004, 255 goto_if_eq LilycoveCity_ContestLobby_EventScript_158CEA special sub_80C43F4 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_ContestLobby_EventScript_158C96 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_158CC0 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq LilycoveCity_ContestLobby_EventScript_158CC0 - compare RESULT, 3 + compare_var_to_imm RESULT, 3 goto_if_eq LilycoveCity_ContestLobby_EventScript_158CA4 - compare RESULT, 4 + compare_var_to_imm RESULT, 4 goto_if_eq LilycoveCity_ContestLobby_EventScript_158CB2 end @@ -420,11 +420,11 @@ LilycoveCity_ContestLobby_EventScript_158D24:: @ 8158D24 copyvar 0x8004, RESULT special sub_808363C waitstate - compare RESULT, 3 + compare_var_to_imm RESULT, 3 goto_if_eq LilycoveCity_ContestLobby_EventScript_158D90 - compare RESULT, 5 + compare_var_to_imm RESULT, 5 goto_if_eq LilycoveCity_ContestLobby_EventScript_158DA1 - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq LilycoveCity_ContestLobby_EventScript_158DB2 message2 LilycoveCity_ContestLobby_Text_18872A waittext @@ -569,7 +569,7 @@ LilycoveCity_ContestLobby_Movement_158EAE:: @ 8158EAE LilycoveCity_ContestLobby_EventScript_158EB0:: @ 8158EB0 specialval RESULT, sub_80C5044 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_158EE8 setvar 0x800b, 8 setvar CONTEST_RANK, 3 diff --git a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc index f5c511179..5bdaa610a 100644 --- a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc +++ b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc @@ -9,7 +9,7 @@ LilycoveCity_CoveLilyMotel_2F_EventScript_1583A1:: @ 81583A1 checkflag 2 call_if 1, LilycoveCity_CoveLilyMotel_2F_EventScript_1583DD specialval RESULT, sub_8090FC0 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_CoveLilyMotel_2F_EventScript_1583D0 release end diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc index 9a9843053..2ee04505e 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc @@ -22,7 +22,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A39C:: @ 815A39C LilycoveCity_DepartmentStoreElevator_EventScript_15A402:: @ 815A402 warpplace LilycoveCity_DepartmentStore_1F, 255, 2, 1 - compare 0x4043, 0 + compare_var_to_imm 0x4043, 0 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 0 @@ -31,7 +31,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A402:: @ 815A402 LilycoveCity_DepartmentStoreElevator_EventScript_15A425:: @ 815A425 warpplace LilycoveCity_DepartmentStore_2F, 255, 2, 1 - compare 0x4043, 1 + compare_var_to_imm 0x4043, 1 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 1 @@ -40,7 +40,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A425:: @ 815A425 LilycoveCity_DepartmentStoreElevator_EventScript_15A448:: @ 815A448 warpplace LilycoveCity_DepartmentStore_3F, 255, 2, 1 - compare 0x4043, 2 + compare_var_to_imm 0x4043, 2 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 2 @@ -49,7 +49,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A448:: @ 815A448 LilycoveCity_DepartmentStoreElevator_EventScript_15A46B:: @ 815A46B warpplace LilycoveCity_DepartmentStore_4F, 255, 2, 1 - compare 0x4043, 3 + compare_var_to_imm 0x4043, 3 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 3 @@ -58,7 +58,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A46B:: @ 815A46B LilycoveCity_DepartmentStoreElevator_EventScript_15A48E:: @ 815A48E warpplace LilycoveCity_DepartmentStore_5F, 255, 2, 1 - compare 0x4043, 4 + compare_var_to_imm 0x4043, 4 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 4 diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc index f3989bc2a..27d217b40 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc @@ -4,9 +4,9 @@ LilycoveCity_DepartmentStoreRooftop_MapScripts:: @ 815A13F LilycoveCity_DepartmentStoreRooftop_MapScript1_15A145:: @ 815A145 event_96 3 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A15F - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A163 end @@ -52,7 +52,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A1A0:: @ 815A1A0 lock faceplayer event_96 3 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A1BA msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C61F, 4 release @@ -127,22 +127,22 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A260:: @ 815A260 return LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 - compare 0x4001, 0 + compare_var_to_imm 0x4001, 0 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A23D - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A244 - compare 0x4001, 2 + compare_var_to_imm 0x4001, 2 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A24B - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_15A37A checkitemspace 0x4000, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_15A388 - compare 0x4001, 0 + compare_var_to_imm 0x4001, 0 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A252 - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A259 - compare 0x4001, 2 + compare_var_to_imm 0x4001, 2 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A260 updatemoney 0, 0 nop @@ -154,10 +154,10 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 bufferstd 2, 14 msgbox LilycoveCity_DepartmentStoreRooftop_Text_1A0C8C, 4 random 64 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if 5, LilycoveCity_DepartmentStoreRooftop_EventScript_15A36E checkitemspace 0x4000, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_15A388 playsfx 106 msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C780, 4 @@ -166,10 +166,10 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 bufferstd 2, 14 msgbox LilycoveCity_DepartmentStoreRooftop_Text_1A0C8C, 4 random 64 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if 5, LilycoveCity_DepartmentStoreRooftop_EventScript_15A36E checkitemspace 0x4000, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_15A388 playsfx 106 msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C780, 4 diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc index 5704a090b..6c1ecbc1d 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc @@ -9,12 +9,12 @@ LilycoveCity_DepartmentStore_1F_EventScript_159D5E:: @ 8159D5E lock faceplayer checkdailyflags - compare 0x4045, 0 + compare_var_to_imm 0x4045, 0 goto_if 5, LilycoveCity_DepartmentStore_1F_EventScript_159EB1 checkflag 2250 goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E4C msgbox LilycoveCity_DepartmentStore_1F_Text_1C4B5E, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E56 setflag 2250 message LilycoveCity_DepartmentStore_1F_Text_1C4CC6 @@ -33,24 +33,24 @@ LilycoveCity_DepartmentStore_1F_EventScript_159D5E:: @ 8159D5E pause 10 move 2, LilycoveCity_DepartmentStore_1F_Movement_1A0839 waitmove 0 - compare 0x8004, 0 + compare_var_to_imm 0x8004, 0 goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E60 inccounter GAME_STAT_WON_POKEMON_LOTTERY - compare 0x8006, 0 + compare_var_to_imm 0x8006, 0 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E3A - compare 0x8006, 1 + compare_var_to_imm 0x8006, 1 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E43 bufferitem 0, 0x8005 - compare 0x8004, 1 + compare_var_to_imm 0x8004, 1 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E78 - compare 0x8004, 2 + compare_var_to_imm 0x8004, 2 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E81 - compare 0x8004, 3 + compare_var_to_imm 0x8004, 3 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E8A - compare 0x8004, 4 + compare_var_to_imm 0x8004, 4 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E93 giveitem 0x8005 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E9C goto LilycoveCity_DepartmentStore_1F_EventScript_159E6E end @@ -112,7 +112,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_159EA7:: @ 8159EA7 LilycoveCity_DepartmentStore_1F_EventScript_159EB1:: @ 8159EB1 msgbox LilycoveCity_DepartmentStore_1F_Text_1C4FCC, 4 giveitem 0x4045 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159EA7 setvar 0x4045, 0 release diff --git a/data/scripts/maps/LilycoveCity_Harbor.inc b/data/scripts/maps/LilycoveCity_Harbor.inc index 884b43bb1..12c880d31 100644 --- a/data/scripts/maps/LilycoveCity_Harbor.inc +++ b/data/scripts/maps/LilycoveCity_Harbor.inc @@ -10,7 +10,7 @@ LilycoveCity_Harbor_EventScript_1598A2:: @ 81598A2 lock faceplayer checkitem ITEM_EON_TICKET, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_Harbor_EventScript_1599EE goto LilycoveCity_Harbor_EventScript_1598BA end @@ -25,7 +25,7 @@ LilycoveCity_Harbor_EventScript_1598BA:: @ 81598BA LilycoveCity_Harbor_EventScript_1598CD:: @ 81598CD msgbox LilycoveCity_Harbor_Text_18B36F, 4 checkitem ITEM_SS_TICKET, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_Harbor_EventScript_159929 message LilycoveCity_Harbor_Text_18B406 waittext @@ -48,7 +48,7 @@ LilycoveCity_Harbor_EventScript_159929:: @ 8159929 LilycoveCity_Harbor_EventScript_159933:: @ 8159933 msgbox LilycoveCity_Harbor_Text_18B47D, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_Harbor_EventScript_15997E setvar 0x40b4, 5 call LilycoveCity_Harbor_EventScript_15998A @@ -59,7 +59,7 @@ LilycoveCity_Harbor_EventScript_159933:: @ 8159933 LilycoveCity_Harbor_EventScript_15995B:: @ 815995B msgbox LilycoveCity_Harbor_Text_18B499, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_Harbor_EventScript_15997E call LilycoveCity_Harbor_EventScript_15998A warp BattleTower_Outside, 255, 19, 23 @@ -80,9 +80,9 @@ LilycoveCity_Harbor_EventScript_15998A:: @ 815998A waitmove 0 pause 30 spriteinvisible LAST_TALKED, 13, 10 - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, LilycoveCity_Harbor_EventScript_1599D9 - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, LilycoveCity_Harbor_EventScript_1599CE pause 30 spriteinvisible 255, 0, 0 @@ -129,9 +129,9 @@ LilycoveCity_Harbor_EventScript_1599EE:: @ 81599EE waitmove 0 pause 30 disappear 4 - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, LilycoveCity_Harbor_EventScript_1599D9 - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, LilycoveCity_Harbor_EventScript_1599CE pause 30 spriteinvisible 255, 0, 0 diff --git a/data/scripts/maps/LilycoveCity_House2.inc b/data/scripts/maps/LilycoveCity_House2.inc index d3399f5ac..cbf015eb3 100644 --- a/data/scripts/maps/LilycoveCity_House2.inc +++ b/data/scripts/maps/LilycoveCity_House2.inc @@ -8,7 +8,7 @@ LilycoveCity_House2_EventScript_159BA3:: @ 8159BA3 goto_if_eq LilycoveCity_House2_EventScript_159BDA msgbox LilycoveCity_House2_Text_18B83C, 4 giveitem ITEM_TM44 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_House2_EventScript_1A029B setflag 234 msgbox LilycoveCity_House2_Text_18B883, 4 diff --git a/data/scripts/maps/LilycoveCity_House3.inc b/data/scripts/maps/LilycoveCity_House3.inc index 6926f4f45..62455f547 100644 --- a/data/scripts/maps/LilycoveCity_House3.inc +++ b/data/scripts/maps/LilycoveCity_House3.inc @@ -11,7 +11,7 @@ LilycoveCity_House3_EventScript_159BF3:: @ 8159BF3 lock faceplayer msgbox LilycoveCity_House3_Text_18B8CC, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_House3_EventScript_159C1D msgbox LilycoveCity_House3_Text_18BA2B, 4 closebutton diff --git a/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc b/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc index c0fa73360..236d48f65 100644 --- a/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc +++ b/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc @@ -11,9 +11,9 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_158425:: @ 8158425 message LilycoveCity_LilycoveMuseum_1F_Text_1873B9 waittext multichoice 20, 8, 16, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_158458 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_15844F end @@ -23,9 +23,9 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_15844F:: @ 815844F LilycoveCity_LilycoveMuseum_1F_EventScript_158458:: @ 8158458 msgbox LilycoveCity_LilycoveMuseum_1F_Text_187495, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_158477 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_158481 end diff --git a/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc b/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc index ec316b576..e41d61fe8 100644 --- a/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc +++ b/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc @@ -125,7 +125,7 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_15875C:: @ 815875C move 1, LilycoveCity_LilycoveMuseum_2F_Movement_1A0839 msgbox LilycoveCity_LilycoveMuseum_2F_Text_188120, 4 givedecoration 44 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_158783 setflag 236 closebutton diff --git a/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc b/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc index 286ad055e..0127761a7 100644 --- a/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc +++ b/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc @@ -16,19 +16,19 @@ LilycoveCity_MoveDeletersHouse_EventScript_159ADE:: @ 8159ADE msgbox LilycoveCity_MoveDeletersHouse_Text_18B68C, 4 special sub_80F9A0C waitstate - compare 0x8004, 255 + compare_var_to_imm 0x8004, 255 goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_159B7B special sub_80FA148 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_159B71 special ScrSpecial_CountPokemonMoves - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_159B64 msgbox LilycoveCity_MoveDeletersHouse_Text_18B6B0, 4 fadescreen 1 special sub_80F9EEC fadescreen 0 - compare 0x8005, 4 + compare_var_to_imm 0x8005, 4 goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_159ADE special ScrSpecial_GetPokemonNicknameAndMoveName msgbox LilycoveCity_MoveDeletersHouse_Text_18B6F2, 5 diff --git a/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc b/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc index 14806cba4..e097504cf 100644 --- a/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc +++ b/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc @@ -61,9 +61,9 @@ LilycoveCity_PokemonTrainerFanClub_Movement_15940C:: @ 815940C step_end LilycoveCity_PokemonTrainerFanClub_MapScript1_159412:: @ 8159412 - compare 0x4095, 1 + compare_var_to_imm 0x4095, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159515 - compare 0x4095, 2 + compare_var_to_imm 0x4095, 2 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159429 end @@ -71,35 +71,35 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159429:: @ 8159429 special sub_810FCE8 setvar 0x8004, 8 specialval RESULT, sub_810FD60 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594D5 setvar 0x8004, 9 specialval RESULT, sub_810FD60 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594DD setvar 0x8004, 10 specialval RESULT, sub_810FD60 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594E5 setvar 0x8004, 11 specialval RESULT, sub_810FD60 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594ED setvar 0x8004, 12 specialval RESULT, sub_810FD60 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594F5 setvar 0x8004, 13 specialval RESULT, sub_810FD60 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594FD setvar 0x8004, 14 specialval RESULT, sub_810FD60 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_159505 setvar 0x8004, 15 specialval RESULT, sub_810FD60 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_15950D end @@ -148,13 +148,13 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15952F:: @ 815952F faceplayer setvar 0x8004, 13 special sub_810FDAC - compare 0x4095, 0 + compare_var_to_imm 0x4095, 0 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15959C specialval RESULT, sub_810FD60 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15956E specialval RESULT, sub_810FCB0 - compare RESULT, 7 + compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159592 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A400, 4 release @@ -162,7 +162,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15952F:: @ 815952F LilycoveCity_PokemonTrainerFanClub_EventScript_15956E:: @ 815956E specialval RESULT, sub_810FCB0 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159588 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A36A, 4 release @@ -188,13 +188,13 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1595A6:: @ 81595A6 faceplayer setvar 0x8004, 8 special sub_810FDAC - compare 0x4095, 0 + compare_var_to_imm 0x4095, 0 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159613 specialval RESULT, sub_810FD60 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1595E5 specialval RESULT, sub_810FCB0 - compare RESULT, 7 + compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159609 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A629, 4 release @@ -202,7 +202,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1595A6:: @ 81595A6 LilycoveCity_PokemonTrainerFanClub_EventScript_1595E5:: @ 81595E5 specialval RESULT, sub_810FCB0 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1595FF msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A584, 4 release @@ -228,13 +228,13 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15961D:: @ 815961D faceplayer setvar 0x8004, 9 special sub_810FDAC - compare 0x4095, 0 + compare_var_to_imm 0x4095, 0 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15968A specialval RESULT, sub_810FD60 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15965C specialval RESULT, sub_810FCB0 - compare RESULT, 7 + compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159680 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A814, 4 release @@ -242,7 +242,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15961D:: @ 815961D LilycoveCity_PokemonTrainerFanClub_EventScript_15965C:: @ 815965C specialval RESULT, sub_810FCB0 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159676 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A71E, 4 release @@ -268,13 +268,13 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159694:: @ 8159694 faceplayer setvar 0x8004, 10 special sub_810FDAC - compare 0x4095, 0 + compare_var_to_imm 0x4095, 0 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159701 specialval RESULT, sub_810FD60 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1596D3 specialval RESULT, sub_810FCB0 - compare RESULT, 7 + compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1596F7 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AB0A, 4 release @@ -282,7 +282,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159694:: @ 8159694 LilycoveCity_PokemonTrainerFanClub_EventScript_1596D3:: @ 81596D3 specialval RESULT, sub_810FCB0 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1596ED msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AA39, 4 release @@ -309,10 +309,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15970B:: @ 815970B setvar 0x8004, 11 special sub_810FDAC specialval RESULT, sub_810FD60 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15973F specialval RESULT, sub_810FCB0 - compare RESULT, 7 + compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159763 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18ACC7, 4 release @@ -320,7 +320,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15970B:: @ 815970B LilycoveCity_PokemonTrainerFanClub_EventScript_15973F:: @ 815973F specialval RESULT, sub_810FCB0 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159759 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AC15, 4 release @@ -342,10 +342,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15976D:: @ 815976D setvar 0x8004, 12 special sub_810FDAC specialval RESULT, sub_810FD60 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1597A1 specialval RESULT, sub_810FCB0 - compare RESULT, 7 + compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1597C5 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AE63, 4 release @@ -353,7 +353,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15976D:: @ 815976D LilycoveCity_PokemonTrainerFanClub_EventScript_1597A1:: @ 81597A1 specialval RESULT, sub_810FCB0 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1597BB msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AD6D, 4 release @@ -375,10 +375,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1597CF:: @ 81597CF setvar 0x8004, 14 special sub_810FDAC specialval RESULT, sub_810FD60 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159803 specialval RESULT, sub_810FCB0 - compare RESULT, 7 + compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159827 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18B030, 4 release @@ -386,7 +386,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1597CF:: @ 81597CF LilycoveCity_PokemonTrainerFanClub_EventScript_159803:: @ 8159803 specialval RESULT, sub_810FCB0 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15981D msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AF62, 4 release @@ -408,10 +408,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159831:: @ 8159831 setvar 0x8004, 15 special sub_810FDAC specialval RESULT, sub_810FD60 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159865 specialval RESULT, sub_810FCB0 - compare RESULT, 7 + compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159889 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18B1FD, 4 release @@ -419,7 +419,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159831:: @ 8159831 LilycoveCity_PokemonTrainerFanClub_EventScript_159865:: @ 8159865 specialval RESULT, sub_810FCB0 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15987F msgbox LilycoveCity_PokemonTrainerFanClub_Text_18B16E, 4 release diff --git a/data/scripts/maps/LittlerootTown.inc b/data/scripts/maps/LittlerootTown.inc index 1c019e046..936437fb9 100644 --- a/data/scripts/maps/LittlerootTown.inc +++ b/data/scripts/maps/LittlerootTown.inc @@ -5,19 +5,19 @@ LittlerootTown_MapScripts:: @ 814D509 LittlerootTown_MapScript1_14D514:: @ 814D514 setflag 2063 - compare 0x4092, 2 + compare_var_to_imm 0x4092, 2 call_if 1, LittlerootTown_EventScript_14D57B checkflag 82 call_if 0, LittlerootTown_EventScript_14D583 - compare 0x4050, 3 + compare_var_to_imm 0x4050, 3 call_if 1, LittlerootTown_EventScript_14D5A6 - compare 0x4082, 4 + compare_var_to_imm 0x4082, 4 call_if 1, LittlerootTown_EventScript_14D570 - compare 0x408c, 4 + compare_var_to_imm 0x408c, 4 call_if 1, LittlerootTown_EventScript_14D570 - compare 0x40c7, 1 + compare_var_to_imm 0x40c7, 1 call_if 1, LittlerootTown_EventScript_14D567 - compare 0x408d, 3 + compare_var_to_imm 0x408d, 3 call_if 1, LittlerootTown_EventScript_14D563 end @@ -40,7 +40,7 @@ LittlerootTown_EventScript_14D57B:: @ 814D57B return LittlerootTown_EventScript_14D583:: @ 814D583 - compare 0x4050, 0 + compare_var_to_imm 0x4050, 0 goto_if_eq LittlerootTown_EventScript_14D59A movespriteperm 1, 10, 1 spritebehave 1, 7 @@ -55,9 +55,9 @@ LittlerootTown_EventScript_14D5A6:: @ 814D5A6 clearflag 752 spritebehave 4, 8 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_EventScript_14D5C5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_EventScript_14D5CD return @@ -191,7 +191,7 @@ LittlerootTown_EventScript_14D6DF:: @ 814D6DF goto_if_eq LittlerootTown_EventScript_14D72F checkflag 82 goto_if_eq LittlerootTown_EventScript_14D722 - compare 0x4050, 0 + compare_var_to_imm 0x4050, 0 goto_if 5, LittlerootTown_EventScript_14D708 msgbox LittlerootTown_Text_16ACEB, 4 release @@ -334,9 +334,9 @@ LittlerootTown_EventScript_14D7FF:: @ 814D7FF LittlerootTown_EventScript_14D808:: @ 814D808 lockall checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_EventScript_14D822 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_EventScript_14D82B releaseall end @@ -352,9 +352,9 @@ LittlerootTown_EventScript_14D82B:: @ 814D82B LittlerootTown_EventScript_14D834:: @ 814D834 lockall checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_EventScript_14D84E - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_EventScript_14D857 releaseall end @@ -407,27 +407,27 @@ LittlerootTown_EventScript_14D8AA:: @ 814D8AA LittlerootTown_EventScript_14D8B6:: @ 814D8B6 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_EventScript_14D93C - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_EventScript_14D947 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_EventScript_14D926 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_EventScript_14D931 msgbox LittlerootTown_Text_16A8EE, 4 closebutton checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_EventScript_14D952 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_EventScript_14D995 call LittlerootTown_EventScript_14DD38 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_EventScript_14DAAA - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_EventScript_14DAED goto LittlerootTown_EventScript_14DD2B end @@ -453,32 +453,32 @@ LittlerootTown_EventScript_14D947:: @ 814D947 return LittlerootTown_EventScript_14D952:: @ 814D952 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, LittlerootTown_EventScript_14D9D8 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, LittlerootTown_EventScript_14D9ED - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, LittlerootTown_EventScript_14DA02 - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, LittlerootTown_EventScript_14DA17 - compare 0x8008, 4 + compare_var_to_imm 0x8008, 4 call_if 1, LittlerootTown_EventScript_14DA2C - compare 0x8008, 5 + compare_var_to_imm 0x8008, 5 call_if 1, LittlerootTown_EventScript_14DA41 return LittlerootTown_EventScript_14D995:: @ 814D995 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, LittlerootTown_EventScript_14D9D8 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, LittlerootTown_EventScript_14D9ED - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, LittlerootTown_EventScript_14DA56 - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, LittlerootTown_EventScript_14DA6B - compare 0x8008, 4 + compare_var_to_imm 0x8008, 4 call_if 1, LittlerootTown_EventScript_14DA80 - compare 0x8008, 5 + compare_var_to_imm 0x8008, 5 call_if 1, LittlerootTown_EventScript_14DA95 return @@ -553,32 +553,32 @@ LittlerootTown_EventScript_14DA95:: @ 814DA95 return LittlerootTown_EventScript_14DAAA:: @ 814DAAA - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, LittlerootTown_EventScript_14DB30 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, LittlerootTown_EventScript_14DB3B - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, LittlerootTown_EventScript_14DB46 - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, LittlerootTown_EventScript_14DB6C - compare 0x8008, 4 + compare_var_to_imm 0x8008, 4 call_if 1, LittlerootTown_EventScript_14DB92 - compare 0x8008, 5 + compare_var_to_imm 0x8008, 5 call_if 1, LittlerootTown_EventScript_14DBB8 return LittlerootTown_EventScript_14DAED:: @ 814DAED - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, LittlerootTown_EventScript_14DB30 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, LittlerootTown_EventScript_14DB3B - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, LittlerootTown_EventScript_14DBDE - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, LittlerootTown_EventScript_14DC04 - compare 0x8008, 4 + compare_var_to_imm 0x8008, 4 call_if 1, LittlerootTown_EventScript_14DC2A - compare 0x8008, 5 + compare_var_to_imm 0x8008, 5 call_if 1, LittlerootTown_EventScript_14DC50 return @@ -842,9 +842,9 @@ LittlerootTown_EventScript_14DCE2:: @ 814DCE2 lock faceplayer checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_EventScript_14D926 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_EventScript_14D931 call LittlerootTown_EventScript_14DD38 move 4, LittlerootTown_Movement_1A0841 diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc index ca872ba0f..63e717a51 100644 --- a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc @@ -5,7 +5,7 @@ LittlerootTown_BrendansHouse_1F_MapScripts:: @ 815263B .byte 0 LittlerootTown_BrendansHouse_1F_MapScript1_15264B:: @ 815264B - compare 0x4092, 6 + compare_var_to_imm 0x4092, 6 call_if 0, LittlerootTown_BrendansHouse_1F_EventScript_152660 checkflag 274 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_152673 @@ -18,7 +18,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_152660:: @ 8152660 LittlerootTown_BrendansHouse_1F_EventScript_152673:: @ 8152673 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_152680 return @@ -27,11 +27,11 @@ LittlerootTown_BrendansHouse_1F_EventScript_152680:: @ 8152680 return LittlerootTown_BrendansHouse_1F_MapScript1_15268A:: @ 815268A - compare 0x4092, 3 + compare_var_to_imm 0x4092, 3 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1526C4 - compare 0x4092, 5 + compare_var_to_imm 0x4092, 5 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1526AC - compare 0x4092, 6 + compare_var_to_imm 0x4092, 6 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1526B8 end diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc index 0176db332..8c0133625 100644 --- a/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc +++ b/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc @@ -6,7 +6,7 @@ LittlerootTown_BrendansHouse_2F_MapScripts:: @ 81527A4 LittlerootTown_BrendansHouse_2F_MapScript1_1527AF:: @ 81527AF checkflag 130 call_if 0, LittlerootTown_BrendansHouse_2F_EventScript_1527CE - compare 0x4092, 4 + compare_var_to_imm 0x4092, 4 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6950 call LittlerootTown_BrendansHouse_2F_EventScript_1A2F3D setvar 0x4089, 0 @@ -23,16 +23,16 @@ LittlerootTown_BrendansHouse_2F_MapScript2_1527DA:: @ 81527DA LittlerootTown_BrendansHouse_2F_EventScript_1527E4:: @ 81527E4 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_1A2F68 end @ 81527F1 lockall checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_15280A - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_152814 end @@ -51,9 +51,9 @@ gUnknown_0815281E:: @ 815281E LittlerootTown_BrendansHouse_2F_EventScript_15281E:: @ 815281E lockall checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_152837 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_15285D end diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc index 1d76bb6dc..73060a055 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc @@ -5,7 +5,7 @@ LittlerootTown_MaysHouse_1F_MapScripts:: @ 8152879 .byte 0 LittlerootTown_MaysHouse_1F_MapScript1_152889:: @ 8152889 - compare 0x4092, 6 + compare_var_to_imm 0x4092, 6 call_if 0, LittlerootTown_MaysHouse_1F_EventScript_15289E checkflag 274 call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1528B1 @@ -18,7 +18,7 @@ LittlerootTown_MaysHouse_1F_EventScript_15289E:: @ 815289E LittlerootTown_MaysHouse_1F_EventScript_1528B1:: @ 81528B1 checkgender - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LittlerootTown_MaysHouse_1F_EventScript_1528BE return @@ -27,11 +27,11 @@ LittlerootTown_MaysHouse_1F_EventScript_1528BE:: @ 81528BE return LittlerootTown_MaysHouse_1F_MapScript1_1528C8:: @ 81528C8 - compare 0x4092, 3 + compare_var_to_imm 0x4092, 3 call_if 1, LittlerootTown_MaysHouse_1F_EventScript_152902 - compare 0x4092, 5 + compare_var_to_imm 0x4092, 5 call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1528EA - compare 0x4092, 6 + compare_var_to_imm 0x4092, 6 call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1528F6 end @@ -117,9 +117,9 @@ LittlerootTown_MaysHouse_1F_Movement_1529C0:: @ 81529C0 @ 81529C7 lockall checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1529E1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1529E2 releaseall end @@ -139,7 +139,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1529EB:: @ 81529EB goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_152A21 checkflag 301 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_152A17 - compare 0x408d, 3 + compare_var_to_imm 0x408d, 3 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_152A2B special GetRivalSonDaughterString msgbox LittlerootTown_BrendansHouse_1F_Text_1731C6, 4 diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc index a0dda8b70..ea6869b1b 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc @@ -6,7 +6,7 @@ LittlerootTown_MaysHouse_2F_MapScripts:: @ 8152A50 LittlerootTown_MaysHouse_2F_MapScript1_152A5B:: @ 8152A5B checkflag 130 call_if 0, LittlerootTown_MaysHouse_2F_EventScript_152A7A - compare 0x4092, 4 + compare_var_to_imm 0x4092, 4 call_if 1, LittlerootTown_MaysHouse_2F_EventScript_1B6950 call LittlerootTown_MaysHouse_2F_EventScript_1A2F3D setvar 0x4089, 0 @@ -23,7 +23,7 @@ LittlerootTown_MaysHouse_2F_MapScript2_152A86:: @ 8152A86 LittlerootTown_MaysHouse_2F_EventScript_152A90:: @ 8152A90 checkgender - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_1A2F68 end @@ -33,9 +33,9 @@ LittlerootTown_MaysHouse_2F_EventScript_152A9D:: @ 8152A9D checkflag 292 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_152BB5 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152AD4 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B4A playsfx 9 disappear LAST_TALKED @@ -57,11 +57,11 @@ LittlerootTown_BrendansHouse_2F_EventScript_152AD4:: @ 8152AD4 waitmove 0 msgbox LittlerootTown_BrendansHouse_2F_Text_1733AF, 4 closebutton - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B29 - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B34 - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B3F return @@ -91,11 +91,11 @@ LittlerootTown_BrendansHouse_2F_EventScript_152B4A:: @ 8152B4A waitmove 0 msgbox LittlerootTown_BrendansHouse_2F_Text_1735FC, 4 closebutton - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B9F - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B9F - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152BAA return @@ -113,9 +113,9 @@ LittlerootTown_BrendansHouse_2F_EventScript_152BB5:: @ 8152BB5 move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0839 waitmove 0 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152BDB - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152BED setflag 293 releaseall @@ -194,9 +194,9 @@ gUnknown_08152C39:: @ 8152C39 LittlerootTown_MaysHouse_2F_EventScript_152C39:: @ 8152C39 lockall checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_152C52 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_152C5C end diff --git a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc index bd846b4fe..d34e52f7f 100644 --- a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc +++ b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc @@ -30,9 +30,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152CBE:: @ 8152CBE fanfare 370 waitfanfare msgbox LittlerootTown_ProfessorBirchsLab_Text_173EF8, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152CEA - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152CFA end @@ -44,9 +44,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152CEA:: @ 8152CEA LittlerootTown_ProfessorBirchsLab_EventScript_152CFA:: @ 8152CFA msgbox LittlerootTown_ProfessorBirchsLab_Text_173F3D, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D19 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D2B end @@ -59,9 +59,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152D19:: @ 8152D19 LittlerootTown_ProfessorBirchsLab_EventScript_152D2B:: @ 8152D2B msgbox LittlerootTown_ProfessorBirchsLab_Text_174075, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D19 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D2B end @@ -85,7 +85,7 @@ LittlerootTown_ProfessorBirchsLab_Movement_152D5B:: @ 8152D5B LittlerootTown_ProfessorBirchsLab_EventScript_152D63:: @ 8152D63 lock faceplayer - compare 0x4084, 3 + compare_var_to_imm 0x4084, 3 goto_if 4, LittlerootTown_ProfessorBirchsLab_EventScript_152D90 checkflag 88 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D86 @@ -109,7 +109,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152D9A:: @ 8152D9A faceplayer checkflag 896 goto_if 0, LittlerootTown_ProfessorBirchsLab_EventScript_1A037F - compare 0x4084, 5 + compare_var_to_imm 0x4084, 5 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152E7B msgbox LittlerootTown_ProfessorBirchsLab_Text_1740B4, 4 release @@ -124,9 +124,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152DBA:: @ 8152DBA move 255, LittlerootTown_ProfessorBirchsLab_Movement_1A0843 waitmove 0 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E13 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E40 setvar 0x4084, 5 setflag 116 @@ -139,7 +139,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152DBA:: @ 8152DBA LittlerootTown_ProfessorBirchsLab_EventScript_152E13:: @ 8152E13 msgbox LittlerootTown_ProfessorBirchsLab_Text_1743D4, 4 giveitem ITEM_POKE_BALL, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E85 msgbox LittlerootTown_ProfessorBirchsLab_Text_17443D, 4 setvar RESULT, 0 @@ -148,7 +148,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152E13:: @ 8152E13 LittlerootTown_ProfessorBirchsLab_EventScript_152E40:: @ 8152E40 msgbox LittlerootTown_ProfessorBirchsLab_Text_17453C, 4 giveitem ITEM_POKE_BALL, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E8E msgbox LittlerootTown_ProfessorBirchsLab_Text_17458C, 4 setvar RESULT, 1 @@ -188,9 +188,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152EA3:: @ 8152EA3 lock faceplayer checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152EBE - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152EC7 release end diff --git a/data/scripts/maps/MauvilleCity.inc b/data/scripts/maps/MauvilleCity.inc index cae65f41e..d6cade75d 100644 --- a/data/scripts/maps/MauvilleCity.inc +++ b/data/scripts/maps/MauvilleCity.inc @@ -105,9 +105,9 @@ MauvilleCity_EventScript_14C0F9:: @ 814C0F9 end MauvilleCity_EventScript_14C154:: @ 814C154 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, MauvilleCity_EventScript_14C23C - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_EventScript_14C285 closebutton switch FACING @@ -286,7 +286,7 @@ MauvilleCity_EventScript_14C2F2:: @ 814C2F2 faceplayer checkflag 209 goto_if_eq MauvilleCity_EventScript_14C368 - compare 0x40ba, 2 + compare_var_to_imm 0x40ba, 2 goto_if_eq MauvilleCity_EventScript_14C33C checkflag 208 goto_if_eq MauvilleCity_EventScript_14C332 @@ -305,7 +305,7 @@ MauvilleCity_EventScript_14C332:: @ 814C332 MauvilleCity_EventScript_14C33C:: @ 814C33C msgbox MauvilleCity_Text_1663EB, 4 giveitem ITEM_TM24 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_EventScript_1A029B setflag 209 msgbox MauvilleCity_Text_166488, 4 diff --git a/data/scripts/maps/MauvilleCity_BikeShop.inc b/data/scripts/maps/MauvilleCity_BikeShop.inc index 0b577885e..b418e8a79 100644 --- a/data/scripts/maps/MauvilleCity_BikeShop.inc +++ b/data/scripts/maps/MauvilleCity_BikeShop.inc @@ -10,17 +10,17 @@ MauvilleCity_BikeShop_EventScript_156796:: @ 8156796 goto_if_eq MauvilleCity_BikeShop_EventScript_1567D1 msgbox MauvilleCity_BikeShop_Text_180F9F, 4 msgbox MauvilleCity_BikeShop_Text_181016, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MauvilleCity_BikeShop_EventScript_156824 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_BikeShop_EventScript_156817 end MauvilleCity_BikeShop_EventScript_1567D1:: @ 81567D1 msgbox MauvilleCity_BikeShop_Text_181016, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MauvilleCity_BikeShop_EventScript_156824 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_BikeShop_EventScript_156817 end @@ -64,19 +64,19 @@ MauvilleCity_BikeShop_EventScript_156861:: @ 8156861 MauvilleCity_BikeShop_EventScript_15686E:: @ 815686E msgbox MauvilleCity_BikeShop_Text_1813A0, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MauvilleCity_BikeShop_EventScript_15688D - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_BikeShop_EventScript_1568BF end MauvilleCity_BikeShop_EventScript_15688D:: @ 815688D msgbox MauvilleCity_BikeShop_Text_1813D4, 4 checkitem ITEM_ACRO_BIKE, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MauvilleCity_BikeShop_EventScript_1568C9 checkitem ITEM_MACH_BIKE, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MauvilleCity_BikeShop_EventScript_1568EA msgbox MauvilleCity_BikeShop_Text_181498, 4 release diff --git a/data/scripts/maps/MauvilleCity_GameCorner.inc b/data/scripts/maps/MauvilleCity_GameCorner.inc index db6223400..02b0c4bbb 100644 --- a/data/scripts/maps/MauvilleCity_GameCorner.inc +++ b/data/scripts/maps/MauvilleCity_GameCorner.inc @@ -6,7 +6,7 @@ MauvilleCity_GameCorner_EventScript_156A34:: @ 8156A34 faceplayer msgbox MauvilleCity_GameCorner_Text_181C35, 4 checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156B32 message MauvilleCity_GameCorner_Text_181CB4 waittext @@ -33,10 +33,10 @@ MauvilleCity_GameCorner_EventScript_156A60:: @ 8156A60 MauvilleCity_GameCorner_EventScript_156AAE:: @ 8156AAE checkcoins 16385 - compare 0x4001, 9950 + compare_var_to_imm 0x4001, 9950 goto_if 4, MauvilleCity_GameCorner_EventScript_156B5C checkmoney 0x3e8, 0 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156B3C givecoins 50 paymoney 0x3e8, 0 @@ -52,10 +52,10 @@ MauvilleCity_GameCorner_EventScript_156AAE:: @ 8156AAE MauvilleCity_GameCorner_EventScript_156AF0:: @ 8156AF0 checkcoins 16385 - compare 0x4001, 9500 + compare_var_to_imm 0x4001, 9500 goto_if 4, MauvilleCity_GameCorner_EventScript_156B5C checkmoney 0x2710, 0 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156B3C givecoins 500 paymoney 0x2710, 0 @@ -100,7 +100,7 @@ MauvilleCity_GameCorner_EventScript_156B6C:: @ 8156B6C faceplayer msgbox MauvilleCity_GameCorner_Text_181DE1, 4 checkitem ITEM_COIN_CASE, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MauvilleCity_GameCorner_EventScript_156B88 release end @@ -144,7 +144,7 @@ MauvilleCity_GameCorner_EventScript_156BFE:: @ 8156BFE MauvilleCity_GameCorner_EventScript_156C0C:: @ 8156C0C msgbox MauvilleCity_GameCorner_Text_181E33, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156D0D switch 0x4001 case 1, MauvilleCity_GameCorner_EventScript_156C46 @@ -154,11 +154,11 @@ MauvilleCity_GameCorner_EventScript_156C0C:: @ 8156C0C MauvilleCity_GameCorner_EventScript_156C46:: @ 8156C46 checkcoins 16386 - compare 0x4002, 1000 + compare_var_to_imm 0x4002, 1000 goto_if 0, MauvilleCity_GameCorner_EventScript_156CF4 bufferdecor 1, 88 checkdecor 88 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 removecoins 1000 adddecor 88 @@ -170,11 +170,11 @@ MauvilleCity_GameCorner_EventScript_156C46:: @ 8156C46 MauvilleCity_GameCorner_EventScript_156C80:: @ 8156C80 checkcoins 16386 - compare 0x4002, 1000 + compare_var_to_imm 0x4002, 1000 goto_if 0, MauvilleCity_GameCorner_EventScript_156CF4 bufferdecor 1, 89 checkdecor 89 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 removecoins 1000 adddecor 89 @@ -186,11 +186,11 @@ MauvilleCity_GameCorner_EventScript_156C80:: @ 8156C80 MauvilleCity_GameCorner_EventScript_156CBA:: @ 8156CBA checkcoins 16386 - compare 0x4002, 1000 + compare_var_to_imm 0x4002, 1000 goto_if 0, MauvilleCity_GameCorner_EventScript_156CF4 bufferdecor 1, 90 checkdecor 90 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 removecoins 1000 adddecor 90 @@ -221,7 +221,7 @@ MauvilleCity_GameCorner_EventScript_156D1A:: @ 8156D1A faceplayer msgbox MauvilleCity_GameCorner_Text_181DE1, 4 checkitem ITEM_COIN_CASE, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MauvilleCity_GameCorner_EventScript_156D36 release end @@ -277,7 +277,7 @@ MauvilleCity_GameCorner_EventScript_156DDE:: @ 8156DDE MauvilleCity_GameCorner_EventScript_156DEC:: @ 8156DEC msgbox MauvilleCity_GameCorner_Text_181E33, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F77 switch 0x4001 case 1, MauvilleCity_GameCorner_EventScript_156E3C @@ -289,10 +289,10 @@ MauvilleCity_GameCorner_EventScript_156DEC:: @ 8156DEC MauvilleCity_GameCorner_EventScript_156E3C:: @ 8156E3C checkcoins 16386 - compare 0x4002, 1500 + compare_var_to_imm 0x4002, 1500 goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM32, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 1500 additem ITEM_TM32, 1 @@ -304,10 +304,10 @@ MauvilleCity_GameCorner_EventScript_156E3C:: @ 8156E3C MauvilleCity_GameCorner_EventScript_156E76:: @ 8156E76 checkcoins 16386 - compare 0x4002, 3500 + compare_var_to_imm 0x4002, 3500 goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM29, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 3500 additem ITEM_TM29, 1 @@ -319,10 +319,10 @@ MauvilleCity_GameCorner_EventScript_156E76:: @ 8156E76 MauvilleCity_GameCorner_EventScript_156EB0:: @ 8156EB0 checkcoins 16386 - compare 0x4002, 4000 + compare_var_to_imm 0x4002, 4000 goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM35, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 4000 additem ITEM_TM35, 1 @@ -334,10 +334,10 @@ MauvilleCity_GameCorner_EventScript_156EB0:: @ 8156EB0 MauvilleCity_GameCorner_EventScript_156EEA:: @ 8156EEA checkcoins 16386 - compare 0x4002, 4000 + compare_var_to_imm 0x4002, 4000 goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM24, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 4000 additem ITEM_TM24, 1 @@ -349,10 +349,10 @@ MauvilleCity_GameCorner_EventScript_156EEA:: @ 8156EEA MauvilleCity_GameCorner_EventScript_156F24:: @ 8156F24 checkcoins 16386 - compare 0x4002, 4000 + compare_var_to_imm 0x4002, 4000 goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM13, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 4000 additem ITEM_TM13, 1 @@ -392,7 +392,7 @@ MauvilleCity_GameCorner_EventScript_156F96:: @ 8156F96 checkflag 226 goto_if_eq MauvilleCity_GameCorner_EventScript_157072 msgbox MauvilleCity_GameCorner_Text_181F3D, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_157068 switch 0x4023 case 0, MauvilleCity_GameCorner_EventScript_156FDB @@ -403,7 +403,7 @@ MauvilleCity_GameCorner_EventScript_156F96:: @ 8156F96 MauvilleCity_GameCorner_EventScript_156FDB:: @ 8156FDB bufferdecor 1, 88 checkdecor 88 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_157059 msgbox MauvilleCity_GameCorner_Text_181F89, 4 givedecoration 88 @@ -414,7 +414,7 @@ MauvilleCity_GameCorner_EventScript_156FDB:: @ 8156FDB MauvilleCity_GameCorner_EventScript_157005:: @ 8157005 bufferdecor 1, 89 checkdecor 89 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_157059 msgbox MauvilleCity_GameCorner_Text_181F89, 4 givedecoration 89 @@ -425,7 +425,7 @@ MauvilleCity_GameCorner_EventScript_157005:: @ 8157005 MauvilleCity_GameCorner_EventScript_15702F:: @ 815702F bufferdecor 1, 90 checkdecor 90 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_157059 msgbox MauvilleCity_GameCorner_Text_181F89, 4 givedecoration 90 @@ -453,7 +453,7 @@ MauvilleCity_GameCorner_EventScript_15707C:: @ 815707C lock faceplayer checkitem ITEM_COIN_CASE, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MauvilleCity_GameCorner_EventScript_15709C msgbox MauvilleCity_GameCorner_Text_18201E, 4 goto MauvilleCity_GameCorner_EventScript_157108 @@ -463,7 +463,7 @@ MauvilleCity_GameCorner_EventScript_15709C:: @ 815709C checkflag 225 goto_if_eq MauvilleCity_GameCorner_EventScript_1570CA checkcoins 16385 - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 goto_if 4, MauvilleCity_GameCorner_EventScript_1570CA setflag 225 givecoins 20 @@ -522,7 +522,7 @@ MauvilleCity_GameCorner_EventScript_157125:: @ 8157125 MauvilleCity_GameCorner_EventScript_157135:: @ 8157135 lockall checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 0 specialval RESULT, sub_810F424 @@ -533,7 +533,7 @@ MauvilleCity_GameCorner_EventScript_157135:: @ 8157135 MauvilleCity_GameCorner_EventScript_157155:: @ 8157155 lockall checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 1 specialval RESULT, sub_810F424 @@ -544,7 +544,7 @@ MauvilleCity_GameCorner_EventScript_157155:: @ 8157155 MauvilleCity_GameCorner_EventScript_157175:: @ 8157175 lockall checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 2 specialval RESULT, sub_810F424 @@ -555,7 +555,7 @@ MauvilleCity_GameCorner_EventScript_157175:: @ 8157175 MauvilleCity_GameCorner_EventScript_157195:: @ 8157195 lockall checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 3 specialval RESULT, sub_810F424 @@ -566,7 +566,7 @@ MauvilleCity_GameCorner_EventScript_157195:: @ 8157195 MauvilleCity_GameCorner_EventScript_1571B5:: @ 81571B5 lockall checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 4 specialval RESULT, sub_810F424 @@ -577,7 +577,7 @@ MauvilleCity_GameCorner_EventScript_1571B5:: @ 81571B5 MauvilleCity_GameCorner_EventScript_1571D5:: @ 81571D5 lockall checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 5 specialval RESULT, sub_810F424 @@ -588,7 +588,7 @@ MauvilleCity_GameCorner_EventScript_1571D5:: @ 81571D5 MauvilleCity_GameCorner_EventScript_1571F5:: @ 81571F5 lockall checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 6 specialval RESULT, sub_810F424 @@ -599,7 +599,7 @@ MauvilleCity_GameCorner_EventScript_1571F5:: @ 81571F5 MauvilleCity_GameCorner_EventScript_157215:: @ 8157215 lockall checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 7 specialval RESULT, sub_810F424 @@ -610,7 +610,7 @@ MauvilleCity_GameCorner_EventScript_157215:: @ 8157215 MauvilleCity_GameCorner_EventScript_157235:: @ 8157235 lockall checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 8 specialval RESULT, sub_810F424 @@ -621,7 +621,7 @@ MauvilleCity_GameCorner_EventScript_157235:: @ 8157235 MauvilleCity_GameCorner_EventScript_157255:: @ 8157255 lockall checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 9 specialval RESULT, sub_810F424 @@ -632,7 +632,7 @@ MauvilleCity_GameCorner_EventScript_157255:: @ 8157255 MauvilleCity_GameCorner_EventScript_157275:: @ 8157275 lockall checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 10 specialval RESULT, sub_810F424 @@ -643,7 +643,7 @@ MauvilleCity_GameCorner_EventScript_157275:: @ 8157275 MauvilleCity_GameCorner_EventScript_157295:: @ 8157295 lockall checkitem ITEM_COIN_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 11 specialval RESULT, sub_810F424 diff --git a/data/scripts/maps/MauvilleCity_Gym.inc b/data/scripts/maps/MauvilleCity_Gym.inc index 80a33ffb0..3255f8459 100644 --- a/data/scripts/maps/MauvilleCity_Gym.inc +++ b/data/scripts/maps/MauvilleCity_Gym.inc @@ -71,7 +71,7 @@ MauvilleCity_Gym_EventScript_1565AB:: @ 81565AB trainerbattle 1, OPPONENT_WATTSON, 0, MauvilleCity_Gym_Text_180C32, MauvilleCity_Gym_Text_180D64, MauvilleCity_Gym_EventScript_1565DB checkflag 167 goto_if 0, MauvilleCity_Gym_EventScript_15661D - compare 0x40ba, 2 + compare_var_to_imm 0x40ba, 2 goto_if_eq MauvilleCity_Gym_EventScript_156641 msgbox MauvilleCity_Gym_Text_180EDB, 4 release @@ -85,7 +85,7 @@ MauvilleCity_Gym_EventScript_1565DB:: @ 81565DB setflag 1208 setflag 2057 addvar 0x4085, 1 - compare 0x4085, 6 + compare_var_to_imm 0x4085, 6 call_if 1, MauvilleCity_Gym_EventScript_1A00FB setvar 0x8008, 3 call MauvilleCity_Gym_EventScript_1A01C0 @@ -97,7 +97,7 @@ MauvilleCity_Gym_EventScript_1565DB:: @ 81565DB MauvilleCity_Gym_EventScript_15661D:: @ 815661D giveitem ITEM_TM34 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_Gym_EventScript_1A029B msgbox MauvilleCity_Gym_Text_180E76, 4 setflag 167 @@ -113,7 +113,7 @@ MauvilleCity_Gym_EventScript_15664B:: @ 815664B lockall checkflag 1208 goto_if_eq MauvilleCity_Gym_EventScript_1566DA - compare 0x4093, 1 + compare_var_to_imm 0x4093, 1 goto_if_eq MauvilleCity_Gym_EventScript_1566DA setvar 0x4093, 1 setvar 0x8004, 0 @@ -124,7 +124,7 @@ MauvilleCity_Gym_EventScript_156670:: @ 8156670 lockall checkflag 1208 goto_if_eq MauvilleCity_Gym_EventScript_1566DA - compare 0x4093, 2 + compare_var_to_imm 0x4093, 2 goto_if_eq MauvilleCity_Gym_EventScript_1566DA setvar 0x4093, 2 setvar 0x8004, 1 @@ -135,7 +135,7 @@ MauvilleCity_Gym_EventScript_156695:: @ 8156695 lockall checkflag 1208 goto_if_eq MauvilleCity_Gym_EventScript_1566DA - compare 0x4093, 3 + compare_var_to_imm 0x4093, 3 goto_if_eq MauvilleCity_Gym_EventScript_1566DA setvar 0x4093, 3 setvar 0x8004, 2 diff --git a/data/scripts/maps/MauvilleCity_House2.inc b/data/scripts/maps/MauvilleCity_House2.inc index 24236ede6..7182a59aa 100644 --- a/data/scripts/maps/MauvilleCity_House2.inc +++ b/data/scripts/maps/MauvilleCity_House2.inc @@ -8,7 +8,7 @@ MauvilleCity_House2_EventScript_1572C0:: @ 81572C0 goto_if_eq MauvilleCity_House2_EventScript_15733D msgbox MauvilleCity_House2_Text_18244E, 4 checkitem ITEM_HARBOR_MAIL, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MauvilleCity_House2_EventScript_1572E5 release end @@ -20,9 +20,9 @@ MauvilleCity_House2_EventScript_1572E5:: @ 81572E5 move LAST_TALKED, MauvilleCity_House2_Movement_1A0835 waitmove 0 msgbox MauvilleCity_House2_Text_1824D8, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MauvilleCity_House2_EventScript_15731B - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_House2_EventScript_157347 end diff --git a/data/scripts/maps/MeteorFalls_1F_2R.inc b/data/scripts/maps/MeteorFalls_1F_2R.inc index 23d814855..e6225bba0 100644 --- a/data/scripts/maps/MeteorFalls_1F_2R.inc +++ b/data/scripts/maps/MeteorFalls_1F_2R.inc @@ -4,7 +4,7 @@ MeteorFalls_1F_2R_MapScripts:: @ 815C678 MeteorFalls_1F_2R_EventScript_15C679:: @ 815C679 trainerbattle 0, OPPONENT_NICOLAS_1, 0, MeteorFalls_1F_2R_Text_1939C5, MeteorFalls_1F_2R_Text_193A35 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MeteorFalls_1F_2R_EventScript_15C6A0 msgbox MeteorFalls_1F_2R_Text_193A60, 6 end @@ -17,7 +17,7 @@ MeteorFalls_1F_2R_EventScript_15C6A0:: @ 815C6A0 MeteorFalls_1F_2R_EventScript_15C6B7:: @ 815C6B7 trainerbattle 4, OPPONENT_JOHN_AND_JAY_1, 0, MeteorFalls_1F_2R_Text_193BB7, MeteorFalls_1F_2R_Text_193C10, MeteorFalls_1F_2R_Text_193C9F specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MeteorFalls_1F_2R_EventScript_15C6E2 msgbox MeteorFalls_1F_2R_Text_193C35, 6 end @@ -30,7 +30,7 @@ MeteorFalls_1F_2R_EventScript_15C6E2:: @ 815C6E2 MeteorFalls_1F_2R_EventScript_15C6FD:: @ 815C6FD trainerbattle 4, OPPONENT_JOHN_AND_JAY_1, 0, MeteorFalls_1F_2R_Text_193D10, MeteorFalls_1F_2R_Text_193D6E, MeteorFalls_1F_2R_Text_193DFB specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MeteorFalls_1F_2R_EventScript_15C728 msgbox MeteorFalls_1F_2R_Text_193D9A, 6 end diff --git a/data/scripts/maps/MossdeepCity.inc b/data/scripts/maps/MossdeepCity.inc index d1b8e88b3..d01c85ff3 100644 --- a/data/scripts/maps/MossdeepCity.inc +++ b/data/scripts/maps/MossdeepCity.inc @@ -71,11 +71,11 @@ MossdeepCity_EventScript_14D027:: @ 814D027 checkflag 276 goto_if_eq MossdeepCity_EventScript_14D069 msgbox MossdeepCity_Text_1690A9, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MossdeepCity_EventScript_14D073 msgbox MossdeepCity_Text_169117, 4 giveitem ITEM_KINGS_ROCK - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MossdeepCity_EventScript_1A029B setflag 276 release diff --git a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc index f644e93cc..453b611cc 100644 --- a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc +++ b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc @@ -6,7 +6,7 @@ MossdeepCity_GameCorner_1F_MapScripts:: @ 815AC52 MossdeepCity_GameCorner_1F_MapScript1_15AC62:: @ 815AC62 special sub_813601C - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AC71 end @@ -17,9 +17,9 @@ MossdeepCity_GameCorner_1F_EventScript_15AC71:: @ 815AC71 MossdeepCity_GameCorner_1F_MapScript1_15AC84:: @ 815AC84 special sub_813601C - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AC9E - compare 0x40c0, 0 + compare_var_to_imm 0x40c0, 0 call_if 5, MossdeepCity_GameCorner_1F_EventScript_15ACAF end @@ -49,11 +49,11 @@ MossdeepCity_GameCorner_1F_EventScript_15ACD5:: @ 815ACD5 moveoffscreen 1 move 255, MossdeepCity_GameCorner_1F_Movement_1A0841 waitmove 0 - compare 0x40c0, 1 + compare_var_to_imm 0x40c0, 1 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AD22 - compare 0x40c0, 2 + compare_var_to_imm 0x40c0, 2 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AD2B - compare 0x40c0, 3 + compare_var_to_imm 0x40c0, 3 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AD34 special LoadPlayerParty setvar 0x40c0, 0 @@ -84,7 +84,7 @@ MossdeepCity_GameCorner_1F_Movement_15AD3F:: @ 815AD3F MossdeepCity_GameCorner_1F_EventScript_15AD42:: @ 815AD42 lock faceplayer - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 goto_if_eq MossdeepCity_GameCorner_1F_EventScript_15AD59 msgbox MossdeepCity_GameCorner_1F_Text_18E59A, 4 release @@ -94,28 +94,28 @@ MossdeepCity_GameCorner_1F_EventScript_15AD59:: @ 815AD59 special SavePlayerParty special sub_810F414 msgbox MossdeepCity_GameCorner_1F_Text_18E650, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MossdeepCity_GameCorner_1F_EventScript_15ADE8 call MossdeepCity_GameCorner_1F_EventScript_15ADF5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MossdeepCity_GameCorner_1F_EventScript_15ADE8 msgbox MossdeepCity_GameCorner_1F_Text_18E741, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15ADE8 special LoadPlayerParty call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MossdeepCity_GameCorner_1F_EventScript_15ADE8 hidebox 0, 0, 15, 10 special SavePlayerParty special ReducePlayerPartyToThree msgbox MossdeepCity_GameCorner_1F_Text_18E777, 4 closebutton - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AE04 - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AE16 - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AE28 warp MossdeepCity_GameCorner_B1F, 255, 3, 1 waitstate diff --git a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc index 77cc96f4d..a7ae2f947 100644 --- a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc +++ b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc @@ -22,11 +22,11 @@ MossdeepCity_GameCorner_B1F_EventScript_15AE6E:: @ 815AE6E setvar 0x8005, 0 special sub_813556C waitstate - compare RESULT, 3 + compare_var_to_imm RESULT, 3 call_if 1, MossdeepCity_GameCorner_B1F_EventScript_15AED5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, MossdeepCity_GameCorner_B1F_EventScript_15AEE3 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 call_if 1, MossdeepCity_GameCorner_B1F_EventScript_15AEEE closebutton special ScrSpecial_HealPlayerParty diff --git a/data/scripts/maps/MossdeepCity_Gym.inc b/data/scripts/maps/MossdeepCity_Gym.inc index 4c46ca334..4112a3b15 100644 --- a/data/scripts/maps/MossdeepCity_Gym.inc +++ b/data/scripts/maps/MossdeepCity_Gym.inc @@ -73,7 +73,7 @@ MossdeepCity_Gym_EventScript_15A594:: @ 815A594 MossdeepCity_Gym_EventScript_15A5C6:: @ 815A5C6 giveitem ITEM_TM04 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MossdeepCity_Gym_EventScript_1A029B msgbox MossdeepCity_Gym_Text_18D1CF, 4 setflag 171 diff --git a/data/scripts/maps/MossdeepCity_House1.inc b/data/scripts/maps/MossdeepCity_House1.inc index c8af8f886..8f3d2ebfc 100644 --- a/data/scripts/maps/MossdeepCity_House1.inc +++ b/data/scripts/maps/MossdeepCity_House1.inc @@ -7,7 +7,7 @@ MossdeepCity_House1_EventScript_15A82F:: @ 815A82F bufferfirstpoke 0 msgbox MossdeepCity_House1_Text_18D465, 4 specialval RESULT, GetPokeblockNameByMonNature - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MossdeepCity_House1_EventScript_15A855 msgbox MossdeepCity_House1_Text_18D475, 4 release diff --git a/data/scripts/maps/MossdeepCity_House2.inc b/data/scripts/maps/MossdeepCity_House2.inc index 3cf5a8ff4..9be55e8d0 100644 --- a/data/scripts/maps/MossdeepCity_House2.inc +++ b/data/scripts/maps/MossdeepCity_House2.inc @@ -19,9 +19,9 @@ MossdeepCity_House2_EventScript_15A87B:: @ 815A87B closebutton setflag 224 clearflag 933 - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, MossdeepCity_House2_EventScript_15A8AE - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, MossdeepCity_House2_EventScript_15A8B9 disappear 3 release diff --git a/data/scripts/maps/MossdeepCity_House3.inc b/data/scripts/maps/MossdeepCity_House3.inc index 8f9bf4dc5..b94e0ec19 100644 --- a/data/scripts/maps/MossdeepCity_House3.inc +++ b/data/scripts/maps/MossdeepCity_House3.inc @@ -7,7 +7,7 @@ MossdeepCity_House3_EventScript_15A972:: @ 815A972 checkflag 152 goto_if_eq MossdeepCity_House3_EventScript_15A9B1 msgbox MossdeepCity_House3_Text_18D909, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MossdeepCity_House3_EventScript_15A9BB msgbox MossdeepCity_House3_Text_18D9A9, 4 giveitem ITEM_SUPER_ROD diff --git a/data/scripts/maps/MossdeepCity_House4.inc b/data/scripts/maps/MossdeepCity_House4.inc index 215cf5e35..6db52bc42 100644 --- a/data/scripts/maps/MossdeepCity_House4.inc +++ b/data/scripts/maps/MossdeepCity_House4.inc @@ -19,7 +19,7 @@ MossdeepCity_House4_EventScript_15AB50:: @ 815AB50 lock faceplayer special sub_80BB63C - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MossdeepCity_House4_EventScript_15AB6D special GetSecretBaseNearbyMapName msgbox MossdeepCity_House4_Text_18E17E, 4 diff --git a/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc b/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc index 369523b42..f5927aa77 100644 --- a/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc +++ b/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc @@ -7,9 +7,9 @@ MossdeepCity_SpaceCenter_1F_EventScript_15AB8B:: @ 815AB8B checkdailyflags specialval RESULT, GetWeekCount buffernum 0, RESULT - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, MossdeepCity_SpaceCenter_1F_EventScript_15ABBA - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 4, MossdeepCity_SpaceCenter_1F_EventScript_15ABC3 closebutton move LAST_TALKED, MossdeepCity_SpaceCenter_1F_Movement_1A083D @@ -36,7 +36,7 @@ MossdeepCity_SpaceCenter_1F_EventScript_15ABD5:: @ 815ABD5 goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_15AC0C msgbox MossdeepCity_SpaceCenter_1F_Text_18E335, 4 giveitem ITEM_SUN_STONE - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_1A029B setflag 192 msgbox MossdeepCity_SpaceCenter_1F_Text_18E39B, 4 diff --git a/data/scripts/maps/MossdeepCity_StevensHouse.inc b/data/scripts/maps/MossdeepCity_StevensHouse.inc index f6ba77cb9..c283d0532 100644 --- a/data/scripts/maps/MossdeepCity_StevensHouse.inc +++ b/data/scripts/maps/MossdeepCity_StevensHouse.inc @@ -14,7 +14,7 @@ MossdeepCity_StevensHouse_EventScript_15A9DF:: @ 815A9DF return MossdeepCity_StevensHouse_MapScript1_15A9E9:: @ 815A9E9 - compare 0x40c6, 1 + compare_var_to_imm 0x40c6, 1 call_if 1, MossdeepCity_StevensHouse_EventScript_15A9F5 end @@ -72,10 +72,10 @@ MossdeepCity_StevensHouse_Movement_15AA76:: @ 815AA76 MossdeepCity_StevensHouse_EventScript_15AA7C:: @ 815AA7C lockall msgbox MossdeepCity_StevensHouse_Text_18DD12, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MossdeepCity_StevensHouse_EventScript_15AAE6 countpokemon - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq MossdeepCity_StevensHouse_EventScript_15AADC copyvar 0x8004, RESULT disappear 2 @@ -86,7 +86,7 @@ MossdeepCity_StevensHouse_EventScript_15AA7C:: @ 815AA7C givepokemon SPECIES_BELDUM, 5, ITEM_NONE, 0x0, 0x0, 0 bufferpoke 1, SPECIES_BELDUM msgbox MossdeepCity_StevensHouse_Text_1A1102, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, MossdeepCity_StevensHouse_EventScript_1A0678 setflag 968 setflag 298 diff --git a/data/scripts/maps/MtChimney.inc b/data/scripts/maps/MtChimney.inc index 458e4a15b..9fa2b77de 100644 --- a/data/scripts/maps/MtChimney.inc +++ b/data/scripts/maps/MtChimney.inc @@ -18,17 +18,17 @@ MtChimney_EventScript_15CF95:: @ 815CF95 showmoney 0, 0 nop msgbox MtChimney_Text_195760, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MtChimney_EventScript_15D00B checkmoney 0xc8, 0 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MtChimney_EventScript_15D018 msgbox MtChimney_Text_1957A9, 4 checkitemspace ITEM_LAVA_COOKIE, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, MtChimney_EventScript_15D000 giveitem ITEM_LAVA_COOKIE - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MtChimney_EventScript_15CFF3 hidemoney 0, 0 release @@ -411,7 +411,7 @@ MtChimney_EventScript_15D17D:: @ 815D17D checkflag 115 goto_if_eq MtChimney_EventScript_15D1C6 msgbox MtChimney_Text_195870, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MtChimney_EventScript_15D1BC msgbox MtChimney_Text_1958C6, 4 giveitem ITEM_METEORITE @@ -441,7 +441,7 @@ MtChimney_EventScript_15D1DA:: @ 815D1DA MtChimney_EventScript_15D1E3:: @ 815D1E3 trainerbattle 0, OPPONENT_SHELBY_1, 0, MtChimney_Text_19597F, MtChimney_Text_1959D8 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MtChimney_EventScript_15D20A msgbox MtChimney_Text_195A04, 6 end diff --git a/data/scripts/maps/MtChimney_CableCarStation.inc b/data/scripts/maps/MtChimney_CableCarStation.inc index 6f4ea44a5..b61097fdc 100644 --- a/data/scripts/maps/MtChimney_CableCarStation.inc +++ b/data/scripts/maps/MtChimney_CableCarStation.inc @@ -4,7 +4,7 @@ MtChimney_CableCarStation_MapScripts:: @ 815C0FA .byte 0 MtChimney_CableCarStation_MapScript1_15C105:: @ 815C105 - compare 0x40a3, 1 + compare_var_to_imm 0x40a3, 1 call_if 1, MtChimney_CableCarStation_EventScript_15C111 end @@ -32,9 +32,9 @@ MtChimney_CableCarStation_EventScript_15C14B:: @ 815C14B lock faceplayer msgbox MtChimney_CableCarStation_Text_19256A, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MtChimney_CableCarStation_EventScript_15C16C - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MtChimney_CableCarStation_EventScript_15C19B end diff --git a/data/scripts/maps/MtPyre_1F.inc b/data/scripts/maps/MtPyre_1F.inc index 026d54bfe..3f012780d 100644 --- a/data/scripts/maps/MtPyre_1F.inc +++ b/data/scripts/maps/MtPyre_1F.inc @@ -8,7 +8,7 @@ MtPyre_1F_EventScript_15D323:: @ 815D323 goto_if_eq MtPyre_1F_EventScript_15D352 msgbox MtPyre_1F_Text_196151, 4 giveitem ITEM_CLEANSE_TAG - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MtPyre_1F_EventScript_1A029B setflag 282 release diff --git a/data/scripts/maps/MtPyre_6F.inc b/data/scripts/maps/MtPyre_6F.inc index 4f8d99c5e..6b85a88c3 100644 --- a/data/scripts/maps/MtPyre_6F.inc +++ b/data/scripts/maps/MtPyre_6F.inc @@ -4,7 +4,7 @@ MtPyre_6F_MapScripts:: @ 815D447 MtPyre_6F_EventScript_15D448:: @ 815D448 trainerbattle 0, OPPONENT_VALERIE_1, 0, MtPyre_6F_Text_1969FE, MtPyre_6F_Text_196A30 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MtPyre_6F_EventScript_15D46F msgbox MtPyre_6F_Text_196A4C, 6 end diff --git a/data/scripts/maps/MtPyre_Exterior.inc b/data/scripts/maps/MtPyre_Exterior.inc index 550f74d9a..787315320 100644 --- a/data/scripts/maps/MtPyre_Exterior.inc +++ b/data/scripts/maps/MtPyre_Exterior.inc @@ -8,7 +8,7 @@ MtPyre_Exterior_MapScript1_15D48C:: @ 815D48C MtPyre_Exterior_EventScript_15D492:: @ 815D492 getplayerxy 0x4000, 0x4001 - compare 0x4001, 12 + compare_var_to_imm 0x4001, 12 goto_if 0, MtPyre_Exterior_EventScript_15D4A3 return diff --git a/data/scripts/maps/MtPyre_Summit.inc b/data/scripts/maps/MtPyre_Summit.inc index 31a83857b..cc66242e3 100644 --- a/data/scripts/maps/MtPyre_Summit.inc +++ b/data/scripts/maps/MtPyre_Summit.inc @@ -30,11 +30,11 @@ MtPyre_Summit_EventScript_15D4E1:: @ 815D4E1 move 2, MtPyre_Summit_Movement_1A0845 waitmove 0 pause 50 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, MtPyre_Summit_EventScript_15D593 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, MtPyre_Summit_EventScript_15D59E - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, MtPyre_Summit_EventScript_15D59F .ifdef SAPPHIRE msgbox UnknownString_81B52B0, 4 @@ -52,11 +52,11 @@ MtPyre_Summit_EventScript_15D4E1:: @ 815D4E1 fadescreen 0 pause 20 call MtPyre_Summit_EventScript_15D57A - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, MtPyre_Summit_EventScript_15D5AA - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, MtPyre_Summit_EventScript_15D5BF - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, MtPyre_Summit_EventScript_15D5CA .ifdef SAPPHIRE msgbox UnknownString_81B53AB, 4 @@ -143,9 +143,9 @@ MtPyre_Summit_EventScript_15D5EF:: @ 815D5EF .else msgbox MtPyre_Summit_Text_1B64B3, 5 .endif - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, MtPyre_Summit_EventScript_15D611 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, MtPyre_Summit_EventScript_15D61A release end @@ -189,9 +189,9 @@ MtPyre_Summit_EventScript_15D64A:: @ 815D64A .else msgbox MtPyre_Summit_Text_1B6283, 5 .endif - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MtPyre_Summit_EventScript_15D669 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MtPyre_Summit_EventScript_15D69B end @@ -220,9 +220,9 @@ MtPyre_Summit_EventScript_15D69B:: @ 815D69B .else msgbox MtPyre_Summit_Text_1B62E7, 5 .endif - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq MtPyre_Summit_EventScript_15D669 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq MtPyre_Summit_EventScript_15D69B end @@ -268,11 +268,11 @@ MtPyre_Summit_EventScript_15D6F2:: @ 815D6F2 move 2, MtPyre_Summit_Movement_1A0845 waitmove 0 pause 50 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, MtPyre_Summit_EventScript_15D75E - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, MtPyre_Summit_EventScript_15D769 - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, MtPyre_Summit_EventScript_15D774 .ifdef SAPPHIRE msgbox UnknownString_81B5BFC, 4 @@ -280,11 +280,11 @@ MtPyre_Summit_EventScript_15D6F2:: @ 815D6F2 msgbox MtPyre_Summit_Text_1B6848, 4 .endif closebutton - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, MtPyre_Summit_EventScript_15D77F - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, MtPyre_Summit_EventScript_15D78A - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, MtPyre_Summit_EventScript_15D795 disappear 2 setvar 0x40b9, 3 diff --git a/data/scripts/maps/NewMauville_Entrance.inc b/data/scripts/maps/NewMauville_Entrance.inc index 698f2f6cd..94836d8c4 100644 --- a/data/scripts/maps/NewMauville_Entrance.inc +++ b/data/scripts/maps/NewMauville_Entrance.inc @@ -4,7 +4,7 @@ NewMauville_Entrance_MapScripts:: @ 815E48A .byte 0 NewMauville_Entrance_MapScript1_15E495:: @ 815E495 - compare 0x40ba, 0 + compare_var_to_imm 0x40ba, 0 call_if 1, NewMauville_Entrance_EventScript_15E4A1 end @@ -27,10 +27,10 @@ NewMauville_Entrance_EventScript_15E4DC:: @ 815E4DC waitmove 0 msgbox NewMauville_Entrance_Text_1982C0, 4 checkitem ITEM_BASEMENT_KEY, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq NewMauville_Entrance_EventScript_15E55D msgbox NewMauville_Entrance_Text_1982D4, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq NewMauville_Entrance_EventScript_15E55D msgbox NewMauville_Entrance_Text_1982EA, 4 setmaptile 3, 0, 707, 0 diff --git a/data/scripts/maps/NewMauville_Inside.inc b/data/scripts/maps/NewMauville_Inside.inc index 352bb8a6d..3407c8a01 100644 --- a/data/scripts/maps/NewMauville_Inside.inc +++ b/data/scripts/maps/NewMauville_Inside.inc @@ -5,9 +5,9 @@ NewMauville_Inside_MapScripts:: @ 815E55F .byte 0 NewMauville_Inside_MapScript1_15E56F:: @ 815E56F - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 call_if 1, NewMauville_Inside_EventScript_15E5DA - compare 0x4002, 1 + compare_var_to_imm 0x4002, 1 call_if 1, NewMauville_Inside_EventScript_15E728 checkflag 2145 call_if 1, NewMauville_Inside_EventScript_15E58F @@ -23,7 +23,7 @@ NewMauville_Inside_MapScript1_15E593:: @ 815E593 end NewMauville_Inside_MapScript1_15E59E:: @ 815E59E - compare 0x40ba, 2 + compare_var_to_imm 0x40ba, 2 call_if 1, NewMauville_Inside_EventScript_15E88B end @@ -150,7 +150,7 @@ NewMauville_Inside_EventScript_15E88B:: @ 815E88B NewMauville_Inside_EventScript_15E8E0:: @ 815E8E0 lockall - compare 0x40ba, 2 + compare_var_to_imm 0x40ba, 2 goto_if_eq NewMauville_Inside_EventScript_15E8F6 msgbox NewMauville_Inside_Text_198315, 4 releaseall diff --git a/data/scripts/maps/OldaleTown.inc b/data/scripts/maps/OldaleTown.inc index d620df71e..eef21daa7 100644 --- a/data/scripts/maps/OldaleTown.inc +++ b/data/scripts/maps/OldaleTown.inc @@ -76,7 +76,7 @@ OldaleTown_EventScript_14DE35:: @ 814DE35 OldaleTown_EventScript_14DE4C:: @ 814DE4C msgbox OldaleTown_Text_16AF2F, 4 giveitem ITEM_POTION - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq OldaleTown_EventScript_14DE83 msgbox OldaleTown_Text_16AFE1, 4 setflag 132 @@ -257,9 +257,9 @@ OldaleTown_EventScript_14DF77:: @ 814DF77 OldaleTown_EventScript_14DF92:: @ 814DF92 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq OldaleTown_EventScript_14DFAA - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq OldaleTown_EventScript_14DFB8 end diff --git a/data/scripts/maps/PacifidlogTown_House2.inc b/data/scripts/maps/PacifidlogTown_House2.inc index aaeeb2453..07b6150d7 100644 --- a/data/scripts/maps/PacifidlogTown_House2.inc +++ b/data/scripts/maps/PacifidlogTown_House2.inc @@ -14,10 +14,10 @@ PacifidlogTown_House2_EventScript_154168:: @ 8154168 call_if 0, PacifidlogTown_House2_EventScript_1541D7 setflag 300 specialval RESULT, GetLeadMonFriendshipScore - compare RESULT, 4 + compare_var_to_imm RESULT, 4 goto_if 4, PacifidlogTown_House2_EventScript_1541EC specialval RESULT, GetLeadMonFriendshipScore - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if 4, PacifidlogTown_House2_EventScript_15421B goto PacifidlogTown_House2_EventScript_154225 end @@ -26,7 +26,7 @@ PacifidlogTown_House2_EventScript_1541B4:: @ 81541B4 checkflag 299 goto_if 0, PacifidlogTown_House2_EventScript_1A14DC specialval RESULT, sub_810F908 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, PacifidlogTown_House2_EventScript_1541E8 return @@ -46,7 +46,7 @@ PacifidlogTown_House2_EventScript_1541E8:: @ 81541E8 PacifidlogTown_House2_EventScript_1541EC:: @ 81541EC msgbox PacifidlogTown_House2_Text_179169, 4 giveitem ITEM_TM27 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PacifidlogTown_House2_EventScript_1A029B setflag 299 special sub_810F950 @@ -62,7 +62,7 @@ PacifidlogTown_House2_EventScript_15421B:: @ 815421B PacifidlogTown_House2_EventScript_154225:: @ 8154225 msgbox PacifidlogTown_House2_Text_17922D, 4 giveitem ITEM_TM21 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PacifidlogTown_House2_EventScript_1A029B setflag 299 special sub_810F950 diff --git a/data/scripts/maps/PacifidlogTown_House3.inc b/data/scripts/maps/PacifidlogTown_House3.inc index 73f749400..3a8dc3b1d 100644 --- a/data/scripts/maps/PacifidlogTown_House3.inc +++ b/data/scripts/maps/PacifidlogTown_House3.inc @@ -11,17 +11,17 @@ PacifidlogTown_House3_EventScript_15429E:: @ 815429E specialval RESULT, sub_804D89C copyvar 0x8009, RESULT msgbox PacifidlogTown_House3_Text_17940E, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PacifidlogTown_House3_EventScript_154320 special sub_80F9A0C waitstate copyvar 0x800a, 0x8004 - compare 0x8004, 255 + compare_var_to_imm 0x8004, 255 goto_if_eq PacifidlogTown_House3_EventScript_154320 copyvar 0x8005, 0x800a specialval RESULT, sub_804DB2C copyvar 0x800b, RESULT - comparevars RESULT, 0x8009 + compare_var_to_var RESULT, 0x8009 goto_if 5, PacifidlogTown_House3_EventScript_15432A copyvar 0x8004, 0x8008 copyvar 0x8005, 0x800a diff --git a/data/scripts/maps/PacifidlogTown_House4.inc b/data/scripts/maps/PacifidlogTown_House4.inc index b7a6c9f86..bba0ede14 100644 --- a/data/scripts/maps/PacifidlogTown_House4.inc +++ b/data/scripts/maps/PacifidlogTown_House4.inc @@ -13,9 +13,9 @@ PacifidlogTown_House4_EventScript_15435E:: @ 815435E lock faceplayer msgbox PacifidlogTown_House4_Text_17963D, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PacifidlogTown_House4_EventScript_15437F - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PacifidlogTown_House4_EventScript_154389 end diff --git a/data/scripts/maps/PacifidlogTown_House5.inc b/data/scripts/maps/PacifidlogTown_House5.inc index fdc496d1f..008c2f800 100644 --- a/data/scripts/maps/PacifidlogTown_House5.inc +++ b/data/scripts/maps/PacifidlogTown_House5.inc @@ -5,7 +5,7 @@ PacifidlogTown_House5_EventScript_154394:: @ 8154394 lock faceplayer specialval RESULT, IsMirageIslandPresent - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PacifidlogTown_House5_EventScript_1543B0 msgbox PacifidlogTown_House5_Text_179718, 4 release diff --git a/data/scripts/maps/PetalburgCity.inc b/data/scripts/maps/PetalburgCity.inc index 1ffc14144..f5b683b34 100644 --- a/data/scripts/maps/PetalburgCity.inc +++ b/data/scripts/maps/PetalburgCity.inc @@ -5,9 +5,9 @@ PetalburgCity_MapScripts:: @ 814B70C PetalburgCity_MapScript1_14B717:: @ 814B717 setflag 2070 - compare 0x4057, 0 + compare_var_to_imm 0x4057, 0 call_if 1, PetalburgCity_EventScript_14B731 - compare 0x4057, 2 + compare_var_to_imm 0x4057, 2 call_if 1, PetalburgCity_EventScript_14B739 end @@ -187,23 +187,23 @@ PetalburgCity_EventScript_14B866:: @ 814B866 waitmove 0 move 9, PetalburgCity_Movement_1A0835 waitmove 0 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, PetalburgCity_EventScript_14B91B - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, PetalburgCity_EventScript_14B930 - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, PetalburgCity_EventScript_14B93B - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, PetalburgCity_EventScript_14B950 msgbox PetalburgCity_Text_16438A, 4 closebutton - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, PetalburgCity_EventScript_14B965 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, PetalburgCity_EventScript_14B977 - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, PetalburgCity_EventScript_14B989 - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, PetalburgCity_EventScript_14B99B msgbox PetalburgCity_Text_164426, 4 move 9, PetalburgCity_Movement_1A0843 diff --git a/data/scripts/maps/PetalburgCity_Gym.inc b/data/scripts/maps/PetalburgCity_Gym.inc index 4b0757f63..e22f02b50 100644 --- a/data/scripts/maps/PetalburgCity_Gym.inc +++ b/data/scripts/maps/PetalburgCity_Gym.inc @@ -6,9 +6,9 @@ PetalburgCity_Gym_MapScripts:: @ 8154477 .byte 0 PetalburgCity_Gym_MapScript1_15448C:: @ 815448C - compare 0x4085, 6 + compare_var_to_imm 0x4085, 6 goto_if_eq PetalburgCity_Gym_EventScript_1544A3 - compare 0x4085, 7 + compare_var_to_imm 0x4085, 7 call_if 4, PetalburgCity_Gym_EventScript_1544ED end @@ -44,9 +44,9 @@ PetalburgCity_Gym_EventScript_1544ED:: @ 81544ED return PetalburgCity_Gym_MapScript1_15451B:: @ 815451B - compare 0x4085, 1 + compare_var_to_imm 0x4085, 1 call_if 1, PetalburgCity_Gym_EventScript_15453B - compare 0x4085, 6 + compare_var_to_imm 0x4085, 6 call_if 0, PetalburgCity_Gym_EventScript_154543 checkflag 2052 call_if 1, PetalburgCity_Gym_EventScript_15454B @@ -144,65 +144,65 @@ PetalburgCity_Gym_EventScript_15465E:: @ 815465E PetalburgCity_Gym_EventScript_154669:: @ 8154669 reappear 10 playsfx 8 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_1547EE - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, PetalburgCity_Gym_EventScript_154800 - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, PetalburgCity_Gym_EventScript_15481C - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, PetalburgCity_Gym_EventScript_15481C msgbox PetalburgCity_Gym_Text_179F07, 4 msgbox PetalburgCity_Gym_Text_179F37, 4 msgbox PetalburgCity_Gym_Text_179F70, 4 msgbox PetalburgCity_Gym_Text_17A03A, 4 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_154884 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, PetalburgCity_Gym_EventScript_15488F - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, PetalburgCity_Gym_EventScript_1548A1 - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, PetalburgCity_Gym_EventScript_1548B3 msgbox PetalburgCity_Gym_Text_17A04A, 4 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_1548C5 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, PetalburgCity_Gym_EventScript_1548D0 - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, PetalburgCity_Gym_EventScript_1548DB - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, PetalburgCity_Gym_EventScript_1548E6 msgbox PetalburgCity_Gym_Text_17A0A8, 4 msgbox PetalburgCity_Gym_Text_17A0EB, 4 msgbox PetalburgCity_Gym_Text_17A156, 4 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_15492F - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, PetalburgCity_Gym_EventScript_154930 - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, PetalburgCity_Gym_EventScript_15493B - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, PetalburgCity_Gym_EventScript_15493C - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_1548F1 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, PetalburgCity_Gym_EventScript_1548FC - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, PetalburgCity_Gym_EventScript_1548F1 - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, PetalburgCity_Gym_EventScript_1548F1 msgbox PetalburgCity_Gym_Text_17A171, 4 closebutton setflag 0x4001 playmusic 420, 0 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_154835 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, PetalburgCity_Gym_EventScript_15484E - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, PetalburgCity_Gym_EventScript_154860 - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, PetalburgCity_Gym_EventScript_154872 disappear 10 setflag 728 @@ -352,7 +352,7 @@ PetalburgCity_Gym_EventScript_15493C:: @ 815493C PetalburgCity_Gym_EventScript_15493D:: @ 815493D call PetalburgCity_Gym_EventScript_154969 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_1549B8 checkflag 169 goto_if 0, PetalburgCity_Gym_EventScript_154A2C @@ -364,15 +364,15 @@ PetalburgCity_Gym_EventScript_15493D:: @ 815493D PetalburgCity_Gym_EventScript_154969:: @ 8154969 specialval RESULT, IsEnigmaBerryValid - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_1549B2 checkitem ITEM_ENIGMA_BERRY, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_1549B2 checkpcitem ITEM_ENIGMA_BERRY, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_1549B2 - compare 0x402d, 0 + compare_var_to_imm 0x402d, 0 goto_if_eq PetalburgCity_Gym_EventScript_1549B2 msgbox PetalburgCity_Gym_Text_1C5570, 4 setvar RESULT, 1 @@ -384,7 +384,7 @@ PetalburgCity_Gym_EventScript_1549B2:: @ 81549B2 PetalburgCity_Gym_EventScript_1549B8:: @ 81549B8 giveitem ITEM_ENIGMA_BERRY - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_1A029B setvar 0x402d, 0 release @@ -413,28 +413,28 @@ PetalburgCity_Gym_EventScript_1549D6:: @ 81549D6 PetalburgCity_Gym_EventScript_154A2C:: @ 8154A2C giveitem ITEM_TM42 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_1A029B setflag 169 msgbox PetalburgCity_Gym_Text_17A8CF, 4 msgbox PetalburgCity_Gym_Text_17A976, 4 closebutton - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, PetalburgCity_Gym_EventScript_154ABC - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, PetalburgCity_Gym_EventScript_154AC7 - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, PetalburgCity_Gym_EventScript_154AD2 - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, PetalburgCity_Gym_EventScript_154ADD pause 70 - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, PetalburgCity_Gym_EventScript_154AE8 - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, PetalburgCity_Gym_EventScript_154AF3 - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, PetalburgCity_Gym_EventScript_154AFE - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, PetalburgCity_Gym_EventScript_154B09 msgbox PetalburgCity_Gym_Text_17A9F6, 4 release @@ -592,14 +592,14 @@ PetalburgCity_Gym_EventScript_154B69:: @ 8154B69 PetalburgCity_Gym_EventScript_154B73:: @ 8154B73 lockall - compare 0x4085, 6 + compare_var_to_imm 0x4085, 6 goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 7 setvar 0x8009, 85 msgbox PetalburgCity_Gym_Text_17B870, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -622,14 +622,14 @@ PetalburgCity_Gym_EventScript_154BB9:: @ 8154BB9 PetalburgCity_Gym_EventScript_154BC3:: @ 8154BC3 lockall - compare 0x4085, 6 + compare_var_to_imm 0x4085, 6 goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 1 setvar 0x8009, 98 msgbox PetalburgCity_Gym_Text_17B8D4, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -640,9 +640,9 @@ PetalburgCity_Gym_EventScript_154BF8:: @ 8154BF8 setvar 0x8008, 7 setvar 0x8009, 46 msgbox PetalburgCity_Gym_Text_17B90F, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -653,9 +653,9 @@ PetalburgCity_Gym_EventScript_154C2B:: @ 8154C2B setvar 0x8008, 1 setvar 0x8009, 59 msgbox PetalburgCity_Gym_Text_17B950, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -666,9 +666,9 @@ PetalburgCity_Gym_EventScript_154C5E:: @ 8154C5E setvar 0x8008, 7 setvar 0x8009, 59 msgbox PetalburgCity_Gym_Text_17B950, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -679,9 +679,9 @@ PetalburgCity_Gym_EventScript_154C91:: @ 8154C91 setvar 0x8008, 1 setvar 0x8009, 72 msgbox PetalburgCity_Gym_Text_17B98A, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -692,9 +692,9 @@ PetalburgCity_Gym_EventScript_154CC4:: @ 8154CC4 setvar 0x8008, 1 setvar 0x8009, 20 msgbox PetalburgCity_Gym_Text_17B9C5, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -705,9 +705,9 @@ PetalburgCity_Gym_EventScript_154CF7:: @ 8154CF7 setvar 0x8008, 7 setvar 0x8009, 20 msgbox PetalburgCity_Gym_Text_17B9C5, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -718,9 +718,9 @@ PetalburgCity_Gym_EventScript_154D2A:: @ 8154D2A setvar 0x8008, 1 setvar 0x8009, 33 msgbox PetalburgCity_Gym_Text_17BA00, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -731,9 +731,9 @@ PetalburgCity_Gym_EventScript_154D5D:: @ 8154D5D setvar 0x8008, 7 setvar 0x8009, 33 msgbox PetalburgCity_Gym_Text_17BA00, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -744,9 +744,9 @@ PetalburgCity_Gym_EventScript_154D90:: @ 8154D90 setvar 0x8008, 1 setvar 0x8009, 7 msgbox PetalburgCity_Gym_Text_17BA3D, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -757,9 +757,9 @@ PetalburgCity_Gym_EventScript_154DC3:: @ 8154DC3 setvar 0x8008, 7 setvar 0x8009, 7 msgbox PetalburgCity_Gym_Text_17BA3D, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -891,72 +891,72 @@ PetalburgCity_Gym_EventScript_154F91:: @ 8154F91 PetalburgCity_Gym_EventScript_154F9A:: @ 8154F9A setvar 0x8004, 1 - compare 0x8005, 0 + compare_var_to_imm 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare 0x8005, 1 + compare_var_to_imm 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_1550A2 return PetalburgCity_Gym_EventScript_154FBB:: @ 8154FBB setvar 0x8004, 2 - compare 0x8005, 0 + compare_var_to_imm 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare 0x8005, 1 + compare_var_to_imm 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_1550C7 return PetalburgCity_Gym_EventScript_154FDC:: @ 8154FDC setvar 0x8004, 3 - compare 0x8005, 0 + compare_var_to_imm 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare 0x8005, 1 + compare_var_to_imm 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_1550EC return PetalburgCity_Gym_EventScript_154FFD:: @ 8154FFD setvar 0x8004, 4 - compare 0x8005, 0 + compare_var_to_imm 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare 0x8005, 1 + compare_var_to_imm 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_155111 return PetalburgCity_Gym_EventScript_15501E:: @ 815501E setvar 0x8004, 5 - compare 0x8005, 0 + compare_var_to_imm 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare 0x8005, 1 + compare_var_to_imm 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_155124 return PetalburgCity_Gym_EventScript_15503F:: @ 815503F setvar 0x8004, 6 - compare 0x8005, 0 + compare_var_to_imm 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare 0x8005, 1 + compare_var_to_imm 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_155149 return PetalburgCity_Gym_EventScript_155060:: @ 8155060 setvar 0x8004, 7 - compare 0x8005, 0 + compare_var_to_imm 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare 0x8005, 1 + compare_var_to_imm 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_15515C return PetalburgCity_Gym_EventScript_155081:: @ 8155081 setvar 0x8004, 8 - compare 0x8005, 0 + compare_var_to_imm 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare 0x8005, 1 + compare_var_to_imm 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_15516F return diff --git a/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc b/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc index 63dcaa6ca..0884db479 100644 --- a/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc @@ -28,17 +28,17 @@ PetalburgCity_PokemonCenter_1F_EventScript_155233:: @ 8155233 faceplayer msgbox PetalburgCity_PokemonCenter_1F_Text_17BDC5, 4 specialval RESULT, IsStarterInParty - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_15524F release end PetalburgCity_PokemonCenter_1F_EventScript_15524F:: @ 815524F - compare 0x4023, 0 + compare_var_to_imm 0x4023, 0 call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_155272 - compare 0x4023, 1 + compare_var_to_imm 0x4023, 1 call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_15527B - compare 0x4023, 2 + compare_var_to_imm 0x4023, 2 call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_155284 release end diff --git a/data/scripts/maps/PetalburgWoods.inc b/data/scripts/maps/PetalburgWoods.inc index d1d3a1b8a..dcf0a27cf 100644 --- a/data/scripts/maps/PetalburgWoods.inc +++ b/data/scripts/maps/PetalburgWoods.inc @@ -91,7 +91,7 @@ PetalburgWoods_EventScript_15CDFA:: @ 815CDFA waitmove 0 msgbox PetalburgWoods_Text_19507E, 4 giveitem ITEM_GREAT_BALL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgWoods_EventScript_15CE3F goto PetalburgWoods_EventScript_15CE4D end @@ -245,7 +245,7 @@ PetalburgWoods_EventScript_15CEDC:: @ 815CEDC goto_if_eq PetalburgWoods_EventScript_15CF0B msgbox PetalburgWoods_Text_19549E, 4 giveitem ITEM_MIRACLE_SEED - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgWoods_EventScript_1A029B setflag 297 release @@ -272,7 +272,7 @@ PetalburgWoods_EventScript_15CF27:: @ 815CF27 PetalburgWoods_EventScript_15CF3E:: @ 815CF3E trainerbattle 0, OPPONENT_JAMES_1, 0, PetalburgWoods_Text_19526A, PetalburgWoods_Text_1952AE specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgWoods_EventScript_15CF65 msgbox PetalburgWoods_Text_1952CC, 6 end diff --git a/data/scripts/maps/Route102.inc b/data/scripts/maps/Route102.inc index 5f9f76be2..6d6b1c2da 100644 --- a/data/scripts/maps/Route102.inc +++ b/data/scripts/maps/Route102.inc @@ -20,7 +20,7 @@ Route102_EventScript_14EAF5:: @ 814EAF5 Route102_EventScript_14EAFE:: @ 814EAFE trainerbattle 0, OPPONENT_CALVIN_1, 0, Route102_Text_1B79C3, Route102_Text_1B7A2C specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route102_EventScript_14EB25 msgbox Route102_Text_1B7A60, 6 end diff --git a/data/scripts/maps/Route103.inc b/data/scripts/maps/Route103.inc index d12f8918f..328021785 100644 --- a/data/scripts/maps/Route103.inc +++ b/data/scripts/maps/Route103.inc @@ -10,9 +10,9 @@ Route103_MapScript1_14EB87:: @ 814EB87 Route103_EventScript_14EB92:: @ 814EB92 lockall checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route103_EventScript_14EBAB - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route103_EventScript_14EC04 end @@ -174,7 +174,7 @@ Route103_EventScript_14ED94:: @ 814ED94 Route103_EventScript_14EDAB:: @ 814EDAB trainerbattle 4, OPPONENT_AMY_AND_LIV_1, 0, Route103_Text_1B7DF7, Route103_Text_1B7E3B, Route103_Text_1B7EAC specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route103_EventScript_14EDD6 msgbox Route103_Text_1B7E50, 6 end @@ -187,7 +187,7 @@ Route103_EventScript_14EDD6:: @ 814EDD6 Route103_EventScript_14EDF1:: @ 814EDF1 trainerbattle 4, OPPONENT_AMY_AND_LIV_1, 0, Route103_Text_1B7EFB, Route103_Text_1B7F20, Route103_Text_1B7F8E specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route103_EventScript_14EE1C msgbox Route103_Text_1B7F40, 6 end @@ -205,7 +205,7 @@ Route103_EventScript_14EE37:: @ 814EE37 Route103_EventScript_14EE4E:: @ 814EE4E trainerbattle 0, OPPONENT_MIGUEL_1, 0, Route103_Text_1B82A9, Route103_Text_1B82EC specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route103_EventScript_14EE75 msgbox Route103_Text_1B830D, 6 end diff --git a/data/scripts/maps/Route104.inc b/data/scripts/maps/Route104.inc index 584ab47dd..8ab1999e6 100644 --- a/data/scripts/maps/Route104.inc +++ b/data/scripts/maps/Route104.inc @@ -35,7 +35,7 @@ Route104_EventScript_14EEC8:: @ 814EEC8 goto_if_eq Route104_EventScript_14EEFF msgbox Route104_Text_1C55B9, 4 giveitem ITEM_CHESTO_BERRY - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route104_EventScript_1A029B setflag 246 msgbox Route104_Text_1C5665, 4 @@ -54,7 +54,7 @@ Route104_EventScript_14EF09:: @ 814EF09 goto_if_eq Route104_EventScript_14EF38 msgbox Route104_Text_16DD91, 4 giveitem ITEM_WHITE_HERB - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route104_EventScript_1A029B setflag 279 release @@ -108,7 +108,7 @@ Route104_EventScript_14EF93:: @ 814EF93 goto_if_eq Route104_EventScript_14EFC2 msgbox Route104_Text_16DC5F, 4 giveitem ITEM_TM09 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route104_EventScript_1A029B setflag 262 release @@ -410,7 +410,7 @@ Route104_EventScript_14F189:: @ 814F189 Route104_EventScript_14F1A0:: @ 814F1A0 trainerbattle 0, OPPONENT_HALEY_1, 0, Route104_Text_1B8770, Route104_Text_1B87A7 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route104_EventScript_14F1C7 msgbox Route104_Text_1B87C3, 6 end @@ -423,7 +423,7 @@ Route104_EventScript_14F1C7:: @ 814F1C7 Route104_EventScript_14F1DE:: @ 814F1DE trainerbattle 0, OPPONENT_WINSTON_1, 0, Route104_Text_1B88D4, Route104_Text_1B8911 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route104_EventScript_14F205 msgbox Route104_Text_1B8925, 6 end @@ -436,7 +436,7 @@ Route104_EventScript_14F205:: @ 814F205 Route104_EventScript_14F21C:: @ 814F21C trainerbattle 0, OPPONENT_CINDY_1, 0, Route104_Text_1B8A24, Route104_Text_1B8A61 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route104_EventScript_14F243 msgbox Route104_Text_1B8A69, 6 end diff --git a/data/scripts/maps/Route104_MrBrineysHouse.inc b/data/scripts/maps/Route104_MrBrineysHouse.inc index ce32a544a..751c86825 100644 --- a/data/scripts/maps/Route104_MrBrineysHouse.inc +++ b/data/scripts/maps/Route104_MrBrineysHouse.inc @@ -4,7 +4,7 @@ Route104_MrBrineysHouse_MapScripts:: @ 815BCB2 Route104_MrBrineysHouse_MapScript1_15BCB8:: @ 815BCB8 setflag 2109 - compare 0x4090, 1 + compare_var_to_imm 0x4090, 1 call_if 1, Route104_MrBrineysHouse_EventScript_15BCD4 checkflag 188 call_if 1, Route104_MrBrineysHouse_EventScript_15BCD0 @@ -37,7 +37,7 @@ Route104_MrBrineysHouse_EventScript_15BD0E:: @ 815BD0E setflag 147 msgbox Route104_MrBrineysHouse_Text_191A82, 4 msgbox Route104_MrBrineysHouse_Text_191AAD, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route104_MrBrineysHouse_EventScript_15BD97 goto Route104_MrBrineysHouse_EventScript_15BDAB end @@ -54,14 +54,14 @@ Route104_MrBrineysHouse_EventScript_15BD32:: @ 815BD32 Route104_MrBrineysHouse_EventScript_15BD65:: @ 815BD65 msgbox Route104_MrBrineysHouse_Text_191CC3, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route104_MrBrineysHouse_EventScript_15BD97 goto Route104_MrBrineysHouse_EventScript_15BDAB end Route104_MrBrineysHouse_EventScript_15BD7E:: @ 815BD7E msgbox Route104_MrBrineysHouse_Text_191DA6, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route104_MrBrineysHouse_EventScript_15BD97 goto Route104_MrBrineysHouse_EventScript_15BDAB end diff --git a/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc b/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc index d4d7b59cb..097e99357 100644 --- a/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc +++ b/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc @@ -25,18 +25,18 @@ Route104_PrettyPetalFlowerShop_EventScript_15BE0B:: @ 815BE0B goto_if_eq Route104_PrettyPetalFlowerShop_EventScript_15BE4A setflag 127 msgbox Route104_PrettyPetalFlowerShop_Text_1C5F48, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, Route104_PrettyPetalFlowerShop_EventScript_15BE6A - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route104_PrettyPetalFlowerShop_EventScript_15BE73 release end Route104_PrettyPetalFlowerShop_EventScript_15BE4A:: @ 815BE4A msgbox Route104_PrettyPetalFlowerShop_Text_1C5F1B, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, Route104_PrettyPetalFlowerShop_EventScript_15BE6A - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route104_PrettyPetalFlowerShop_EventScript_15BE73 release end @@ -96,7 +96,7 @@ Route104_PrettyPetalFlowerShop_EventScript_15BEDA:: @ 815BEDA random 8 addvar RESULT, 133 giveitem RESULT - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route104_PrettyPetalFlowerShop_EventScript_1A029B setflag 2256 msgbox Route104_PrettyPetalFlowerShop_Text_1C6335, 4 diff --git a/data/scripts/maps/Route106.inc b/data/scripts/maps/Route106.inc index 0acf70e64..a1a13a003 100644 --- a/data/scripts/maps/Route106.inc +++ b/data/scripts/maps/Route106.inc @@ -18,7 +18,7 @@ Route106_EventScript_14F34F:: @ 814F34F Route106_EventScript_14F366:: @ 814F366 trainerbattle 0, OPPONENT_ELLIOT_1, 0, Route106_Text_1B8EF0, Route106_Text_1B8F25 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route106_EventScript_14F38D msgbox Route106_Text_1B8F55, 6 end diff --git a/data/scripts/maps/Route107.inc b/data/scripts/maps/Route107.inc index 9daa57b7e..c33bb7d19 100644 --- a/data/scripts/maps/Route107.inc +++ b/data/scripts/maps/Route107.inc @@ -9,7 +9,7 @@ Route107_EventScript_14F3BC:: @ 814F3BC Route107_EventScript_14F3D3:: @ 814F3D3 trainerbattle 0, OPPONENT_TONY_1, 0, Route107_Text_1B933A, Route107_Text_1B9365 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route107_EventScript_14F3FA msgbox Route107_Text_1B938E, 6 end diff --git a/data/scripts/maps/Route109.inc b/data/scripts/maps/Route109.inc index 09be54c49..d3baeea34 100644 --- a/data/scripts/maps/Route109.inc +++ b/data/scripts/maps/Route109.inc @@ -279,7 +279,7 @@ Route109_EventScript_14F680:: @ 814F680 Route109_EventScript_14F691:: @ 814F691 message Route109_Text_16E0F9 msgbox Route109_Text_16E0F9, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route109_EventScript_14F6F1 goto Route109_EventScript_14F6E2 end @@ -332,7 +332,7 @@ Route109_EventScript_14F725:: @ 814F725 goto_if_eq Route109_EventScript_14F762 msgbox Route109_Text_16E433, 4 giveitem ITEM_SOFT_SAND - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route109_EventScript_1A029B closebutton move LAST_TALKED, Route109_Movement_1A083D @@ -397,7 +397,7 @@ Route109_EventScript_14F7F2:: @ 814F7F2 Route109_EventScript_14F809:: @ 814F809 trainerbattle 0, OPPONENT_RICKY_1, 0, Route109_Text_1B9C23, Route109_Text_1B9C65 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route109_EventScript_14F830 msgbox Route109_Text_1B9C6E, 6 end @@ -410,7 +410,7 @@ Route109_EventScript_14F830:: @ 814F830 Route109_EventScript_14F847:: @ 814F847 trainerbattle 0, OPPONENT_LOLA_1, 0, Route109_Text_1B9D54, Route109_Text_1B9D87 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route109_EventScript_14F86E msgbox Route109_Text_1B9D8E, 6 end diff --git a/data/scripts/maps/Route109_SeashoreHouse.inc b/data/scripts/maps/Route109_SeashoreHouse.inc index 789ee3e56..2a69242c2 100644 --- a/data/scripts/maps/Route109_SeashoreHouse.inc +++ b/data/scripts/maps/Route109_SeashoreHouse.inc @@ -28,7 +28,7 @@ Route109_SeashoreHouse_EventScript_160DFE:: @ 8160DFE Route109_SeashoreHouse_EventScript_160E08:: @ 8160E08 msgbox Route109_SeashoreHouse_Text_19B609, 4 giveitem ITEM_SODA_POP, 6 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route109_SeashoreHouse_EventScript_160E2C setflag 140 release @@ -43,7 +43,7 @@ Route109_SeashoreHouse_EventScript_160E36:: @ 8160E36 showmoney 0, 0 nop msgbox Route109_SeashoreHouse_Text_19B702, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route109_SeashoreHouse_EventScript_160E5A msgbox Route109_SeashoreHouse_Text_19B773, 4 hidemoney 0, 0 @@ -52,10 +52,10 @@ Route109_SeashoreHouse_EventScript_160E36:: @ 8160E36 Route109_SeashoreHouse_EventScript_160E5A:: @ 8160E5A checkmoney 0x12c, 0 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route109_SeashoreHouse_EventScript_160E9E checkitemspace ITEM_SODA_POP, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route109_SeashoreHouse_EventScript_160EAB msgbox Route109_SeashoreHouse_Text_19B74C, 4 paymoney 0x12c, 0 diff --git a/data/scripts/maps/Route110.inc b/data/scripts/maps/Route110.inc index 723c41e0c..68a2c6613 100644 --- a/data/scripts/maps/Route110.inc +++ b/data/scripts/maps/Route110.inc @@ -12,7 +12,7 @@ Route110_MapScript1_14F914:: @ 814F914 call Route110_EventScript_1A0196 call Route110_EventScript_1A014E call Route110_EventScript_1A0172 - compare 0x40a9, 1 + compare_var_to_imm 0x40a9, 1 call_if 1, Route110_EventScript_14F92F end @@ -132,7 +132,7 @@ Route110_EventScript_14FA25:: @ 814FA25 Route110_EventScript_14FA2E:: @ 814FA2E lockall specialval RESULT, GetRecordedCyclingRoadResults - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route110_EventScript_14FA49 msgbox Route110_Text_16F53A, 4 releaseall @@ -147,9 +147,9 @@ Route110_EventScript_14FA53:: @ 814FA53 lock faceplayer specialval RESULT, GetPlayerAvatarBike - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_EventScript_14FA84 - compare 0x40a9, 0 + compare_var_to_imm 0x40a9, 0 goto_if_eq Route110_EventScript_14FA7A msgbox Route110_Text_16F26A, 4 release @@ -178,7 +178,7 @@ Route110_EventScript_14FAA5:: @ 814FAA5 Route110_EventScript_14FABC:: @ 814FABC trainerbattle 0, OPPONENT_EDWIN_1, 0, Route110_Text_1BA7D2, Route110_Text_1BA803 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_EventScript_14FAE3 msgbox Route110_Text_1BA829, 6 end @@ -206,7 +206,7 @@ Route110_EventScript_14FB28:: @ 814FB28 Route110_EventScript_14FB3F:: @ 814FB3F trainerbattle 0, OPPONENT_BENJAMIN_1, 0, Route110_Text_1BA352, Route110_Text_1BA379 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_EventScript_14FB66 msgbox Route110_Text_1BA3A5, 6 end @@ -224,7 +224,7 @@ Route110_EventScript_14FB7D:: @ 814FB7D Route110_EventScript_14FB94:: @ 814FB94 trainerbattle 0, OPPONENT_ABIGAIL_1, 0, Route110_Text_1BA4A0, Route110_Text_1BA50F specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_EventScript_14FBBB msgbox Route110_Text_1BA52E, 6 end @@ -237,7 +237,7 @@ Route110_EventScript_14FBBB:: @ 814FBBB Route110_EventScript_14FBD2:: @ 814FBD2 trainerbattle 0, OPPONENT_ISABEL_1, 0, Route110_Text_1BA990, Route110_Text_1BA9D0 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_EventScript_14FBF9 msgbox Route110_Text_1BA9E9, 6 end @@ -326,9 +326,9 @@ Route110_EventScript_14FD29:: @ 814FD29 Route110_EventScript_14FD34:: @ 814FD34 lockall checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_EventScript_14FDA7 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, Route110_EventScript_14FDAC move 28, Route110_Movement_1A0845 waitmove 0 @@ -337,16 +337,16 @@ Route110_EventScript_14FD34:: @ 814FD34 move 28, Route110_Movement_1A0835 waitmove 0 pause 30 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, Route110_EventScript_14FF14 - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, Route110_EventScript_14FF1F - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, Route110_EventScript_14FF2A checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route110_EventScript_14FDB1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_EventScript_14FE2B releaseall end @@ -425,22 +425,22 @@ Route110_EventScript_14FEA5:: @ 814FEA5 Route110_EventScript_14FEB2:: @ 814FEB2 closebutton - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, Route110_EventScript_14FF56 - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, Route110_EventScript_14FF5E - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, Route110_EventScript_14FF66 spritebehave 28, 10 spritebehave 29, 10 disappear 28 reappear 29 pause 45 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, Route110_EventScript_14FF35 - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, Route110_EventScript_14FF40 - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, Route110_EventScript_14FF4B disappear 29 setvar 0x4069, 1 diff --git a/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc b/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc index 32b3ae4fb..daa55dc7f 100644 --- a/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc +++ b/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc @@ -3,9 +3,9 @@ Route110_SeasideCyclingRoadNorthEntrance_MapScripts:: @ 81634C8 .byte 0 Route110_SeasideCyclingRoadNorthEntrance_MapScript1_1634CE:: @ 81634CE - compare 0x40a9, 3 + compare_var_to_imm 0x40a9, 3 call_if 1, Route110_SeasideCyclingRoadNorthEntrance_EventScript_1634E5 - compare 0x40a9, 2 + compare_var_to_imm 0x40a9, 2 call_if 1, Route110_SeasideCyclingRoadNorthEntrance_EventScript_1634E5 end @@ -24,9 +24,9 @@ Route110_SeasideCyclingRoadNorthEntrance_EventScript_1634F7:: @ 81634F7 @ Coord event directly in front of the gatesman heading left to right lockall specialval RESULT, GetPlayerAvatarBike @ player state? - compare RESULT, 2 + compare_var_to_imm RESULT, 2 call_if 1, Route110_SeasideCyclingRoadNorthEntrance_EventScript_16351D - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route110_SeasideCyclingRoadNorthEntrance_EventScript_163523 setflag 2091 setvar 0x4001, 1 diff --git a/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc b/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc index 95ea7454e..63e8df87c 100644 --- a/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc +++ b/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc @@ -11,7 +11,7 @@ Route110_SeasideCyclingRoadSouthEntrance_EventScript_16347F:: @ 816347F Route110_SeasideCyclingRoadSouthEntrance_EventScript_16348B:: @ 816348B lockall specialval RESULT, GetPlayerAvatarBike - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route110_SeasideCyclingRoadSouthEntrance_EventScript_1634A6 setflag 2091 setvar 0x4001, 1 diff --git a/data/scripts/maps/Route110_TrickHouseEnd.inc b/data/scripts/maps/Route110_TrickHouseEnd.inc index d18f30a43..7f4ffdddd 100644 --- a/data/scripts/maps/Route110_TrickHouseEnd.inc +++ b/data/scripts/maps/Route110_TrickHouseEnd.inc @@ -6,7 +6,7 @@ Route110_TrickHouseEnd_MapScripts:: @ 8161936 .byte 0 Route110_TrickHouseEnd_MapScript1_16194B:: @ 816194B - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 call_if 1, Route110_TrickHouseEnd_EventScript_161994 end @@ -61,7 +61,7 @@ Route110_TrickHouseEnd_EventScript_161A0B:: @ 8161A0B msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar 0x40c1, 0 giveitem ITEM_RARE_CANDY - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton @@ -74,7 +74,7 @@ Route110_TrickHouseEnd_EventScript_161A47:: @ 8161A47 msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar 0x40c1, 0 giveitem ITEM_TIMER_BALL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton @@ -87,7 +87,7 @@ Route110_TrickHouseEnd_EventScript_161A83:: @ 8161A83 msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar 0x40c1, 0 giveitem ITEM_HARD_STONE - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton @@ -100,7 +100,7 @@ Route110_TrickHouseEnd_EventScript_161ABF:: @ 8161ABF msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar 0x40c1, 0 giveitem ITEM_SMOKE_BALL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton @@ -113,7 +113,7 @@ Route110_TrickHouseEnd_EventScript_161AFB:: @ 8161AFB msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar 0x40c1, 0 giveitem ITEM_TM12 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton @@ -126,7 +126,7 @@ Route110_TrickHouseEnd_EventScript_161B37:: @ 8161B37 msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar 0x40c1, 0 giveitem ITEM_MAGNET - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton @@ -139,7 +139,7 @@ Route110_TrickHouseEnd_EventScript_161B73:: @ 8161B73 msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar 0x40c1, 0 giveitem ITEM_PP_MAX - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton @@ -150,13 +150,13 @@ Route110_TrickHouseEnd_EventScript_161B73:: @ 8161B73 Route110_TrickHouseEnd_EventScript_161BAF:: @ 8161BAF msgbox Route110_TrickHouseEnd_Text_19C5AF, 4 closebutton - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, Route110_TrickHouseEnd_EventScript_161C74 - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, Route110_TrickHouseEnd_EventScript_161C7F - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, Route110_TrickHouseEnd_EventScript_161C8A - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, Route110_TrickHouseEnd_EventScript_161C95 pause 30 msgbox Route110_TrickHouseEnd_Text_19C602, 4 @@ -171,7 +171,7 @@ Route110_TrickHouseEnd_EventScript_161BAF:: @ 8161BAF .else givedecoration 31 .endc - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C61 msgbox Route110_TrickHouseEnd_Text_19C85C, 4 call Route110_TrickHouseEnd_EventScript_161C2E diff --git a/data/scripts/maps/Route110_TrickHouseEntrance.inc b/data/scripts/maps/Route110_TrickHouseEntrance.inc index 81d6a44e0..28b1eb0de 100644 --- a/data/scripts/maps/Route110_TrickHouseEntrance.inc +++ b/data/scripts/maps/Route110_TrickHouseEntrance.inc @@ -6,17 +6,17 @@ Route110_TrickHouseEntrance_MapScripts:: @ 8160F2B Route110_TrickHouseEntrance_MapScript1_160F3B:: @ 8160F3B setflag 2114 - compare 0x40b5, 1 + compare_var_to_imm 0x40b5, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_160FCE - compare 0x40c1, 1 + compare_var_to_imm 0x40c1, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_160FB2 - compare 0x40a6, 1 + compare_var_to_imm 0x40a6, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_16108E - compare 0x40a7, 5 + compare_var_to_imm 0x40a7, 5 call_if 1, Route110_TrickHouseEntrance_EventScript_160FDE - compare 0x40a7, 3 + compare_var_to_imm 0x40a7, 3 call_if 1, Route110_TrickHouseEntrance_EventScript_160FDE - compare 0x40a7, 0 + compare_var_to_imm 0x40a7, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_160FDE switch 0x40a7 case 0, Route110_TrickHouseEntrance_EventScript_16109A @@ -27,7 +27,7 @@ Route110_TrickHouseEntrance_MapScript1_160F3B:: @ 8160F3B Route110_TrickHouseEntrance_EventScript_160FB2:: @ 8160FB2 setvar 0x40a5, 1 - compare 0x4044, 8 + compare_var_to_imm 0x4044, 8 goto_if_eq Route110_TrickHouseEntrance_EventScript_160FC8 setvar 0x40a7, 2 end @@ -44,21 +44,21 @@ Route110_TrickHouseEntrance_EventScript_160FCE:: @ 8160FCE Route110_TrickHouseEntrance_EventScript_160FDE:: @ 8160FDE setvar 0x40a7, 0 - compare 0x4044, 1 + compare_var_to_imm 0x4044, 1 call_if 1, Route110_TrickHouseEntrance_EventScript_16103C - compare 0x4044, 2 + compare_var_to_imm 0x4044, 2 call_if 1, Route110_TrickHouseEntrance_EventScript_161046 - compare 0x4044, 3 + compare_var_to_imm 0x4044, 3 call_if 1, Route110_TrickHouseEntrance_EventScript_161050 - compare 0x4044, 4 + compare_var_to_imm 0x4044, 4 call_if 1, Route110_TrickHouseEntrance_EventScript_16105A - compare 0x4044, 5 + compare_var_to_imm 0x4044, 5 call_if 1, Route110_TrickHouseEntrance_EventScript_161064 - compare 0x4044, 6 + compare_var_to_imm 0x4044, 6 call_if 1, Route110_TrickHouseEntrance_EventScript_16106E - compare 0x4044, 7 + compare_var_to_imm 0x4044, 7 call_if 1, Route110_TrickHouseEntrance_EventScript_161078 - compare 0x4044, 8 + compare_var_to_imm 0x4044, 8 call_if 1, Route110_TrickHouseEntrance_EventScript_161082 return @@ -213,7 +213,7 @@ Route110_TrickHouseEntrance_MapScript2_1611CD:: @ 81611CD Route110_TrickHouseEntrance_EventScript_1611D7:: @ 81611D7 lockall pause 20 - compare 0x4044, 0 + compare_var_to_imm 0x4044, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_161327 msgbox Route110_TrickHouseEntrance_Text_19BD82, 4 closebutton @@ -248,21 +248,21 @@ Route110_TrickHouseEntrance_EventScript_16124D:: @ 816124D waitmove 0 move 255, Route110_TrickHouseEntrance_Movement_1A0835 waitmove 0 - compare 0x4044, 0 + compare_var_to_imm 0x4044, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1612CD - compare 0x4044, 1 + compare_var_to_imm 0x4044, 1 call_if 1, Route110_TrickHouseEntrance_EventScript_1612D6 - compare 0x4044, 2 + compare_var_to_imm 0x4044, 2 call_if 1, Route110_TrickHouseEntrance_EventScript_1612DF - compare 0x4044, 3 + compare_var_to_imm 0x4044, 3 call_if 1, Route110_TrickHouseEntrance_EventScript_1612E8 - compare 0x4044, 4 + compare_var_to_imm 0x4044, 4 call_if 1, Route110_TrickHouseEntrance_EventScript_1612F1 - compare 0x4044, 5 + compare_var_to_imm 0x4044, 5 call_if 1, Route110_TrickHouseEntrance_EventScript_1612FA - compare 0x4044, 6 + compare_var_to_imm 0x4044, 6 call_if 1, Route110_TrickHouseEntrance_EventScript_161303 - compare 0x4044, 7 + compare_var_to_imm 0x4044, 7 call_if 1, Route110_TrickHouseEntrance_EventScript_16130C closebutton setvar 0x40a6, 1 @@ -351,27 +351,27 @@ Route110_TrickHouseEntrance_EventScript_16136E:: @ 816136E move 1, Route110_TrickHouseEntrance_Movement_1A0839 waitmove 0 msgbox Route110_TrickHouseEntrance_Text_19C07E, 4 - compare 0x4044, 1 + compare_var_to_imm 0x4044, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_1613CE - compare 0x4044, 2 + compare_var_to_imm 0x4044, 2 goto_if_eq Route110_TrickHouseEntrance_EventScript_1613FA - compare 0x4044, 3 + compare_var_to_imm 0x4044, 3 goto_if_eq Route110_TrickHouseEntrance_EventScript_161426 - compare 0x4044, 4 + compare_var_to_imm 0x4044, 4 goto_if_eq Route110_TrickHouseEntrance_EventScript_161452 - compare 0x4044, 5 + compare_var_to_imm 0x4044, 5 goto_if_eq Route110_TrickHouseEntrance_EventScript_16147E - compare 0x4044, 6 + compare_var_to_imm 0x4044, 6 goto_if_eq Route110_TrickHouseEntrance_EventScript_1614AA - compare 0x4044, 7 + compare_var_to_imm 0x4044, 7 goto_if_eq Route110_TrickHouseEntrance_EventScript_1614D6 end Route110_TrickHouseEntrance_EventScript_1613CE:: @ 81613CE giveitem ITEM_RARE_CANDY - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall @@ -379,9 +379,9 @@ Route110_TrickHouseEntrance_EventScript_1613CE:: @ 81613CE Route110_TrickHouseEntrance_EventScript_1613FA:: @ 81613FA giveitem ITEM_TIMER_BALL - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall @@ -389,9 +389,9 @@ Route110_TrickHouseEntrance_EventScript_1613FA:: @ 81613FA Route110_TrickHouseEntrance_EventScript_161426:: @ 8161426 giveitem ITEM_HARD_STONE - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall @@ -399,9 +399,9 @@ Route110_TrickHouseEntrance_EventScript_161426:: @ 8161426 Route110_TrickHouseEntrance_EventScript_161452:: @ 8161452 giveitem ITEM_SMOKE_BALL - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall @@ -409,9 +409,9 @@ Route110_TrickHouseEntrance_EventScript_161452:: @ 8161452 Route110_TrickHouseEntrance_EventScript_16147E:: @ 816147E giveitem ITEM_TM12 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall @@ -419,9 +419,9 @@ Route110_TrickHouseEntrance_EventScript_16147E:: @ 816147E Route110_TrickHouseEntrance_EventScript_1614AA:: @ 81614AA giveitem ITEM_MAGNET - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall @@ -429,9 +429,9 @@ Route110_TrickHouseEntrance_EventScript_1614AA:: @ 81614AA Route110_TrickHouseEntrance_EventScript_1614D6:: @ 81614D6 giveitem ITEM_PP_MAX - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall @@ -454,9 +454,9 @@ Route110_TrickHouseEntrance_EventScript_161518:: @ 8161518 .else givedecoration 31 .endif - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161551 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02B8 msgbox Route110_TrickHouseEntrance_Text_19C18D, 4 releaseall @@ -495,7 +495,7 @@ Route110_TrickHouseEntrance_EventScript_1615BD:: @ 81615BD Route110_TrickHouseEntrance_EventScript_1615C7:: @ 81615C7 msgbox Route110_TrickHouseEntrance_Text_19BE7D, 5 closebutton - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_1615DD releaseall end @@ -577,7 +577,7 @@ Route110_TrickHouseEntrance_EventScript_1616B8:: @ 81616B8 end Route110_TrickHouseEntrance_EventScript_1616C2:: @ 81616C2 - compare 0x4044, 8 + compare_var_to_imm 0x4044, 8 goto_if_eq Route110_TrickHouseEntrance_EventScript_1616D7 msgbox Route110_TrickHouseEntrance_Text_19BE6E, 4 releaseall @@ -602,7 +602,7 @@ gUnknown_081616E1:: @ 81616E1 end Route110_TrickHouseEntrance_EventScript_161740:: @ 8161740 - compare 0x40AB, 0 + compare_var_to_imm 0x40AB, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819CAD1, 4 playsfx SE_PIN @@ -613,7 +613,7 @@ Route110_TrickHouseEntrance_EventScript_161740:: @ 8161740 end Route110_TrickHouseEntrance_EventScript_161769:: @ 8161769 - compare 0x40AC, 0 + compare_var_to_imm 0x40AC, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819CCCB, 4 playsfx SE_PIN @@ -624,7 +624,7 @@ Route110_TrickHouseEntrance_EventScript_161769:: @ 8161769 end Route110_TrickHouseEntrance_EventScript_161792:: @ 8161792 - compare 0x40AD, 0 + compare_var_to_imm 0x40AD, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819CEF9, 4 playsfx SE_PIN @@ -635,7 +635,7 @@ Route110_TrickHouseEntrance_EventScript_161792:: @ 8161792 end Route110_TrickHouseEntrance_EventScript_1617BB:: @ 81617BB - compare 0x40AE, 0 + compare_var_to_imm 0x40AE, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819D164, 4 playsfx SE_PIN @@ -646,7 +646,7 @@ Route110_TrickHouseEntrance_EventScript_1617BB:: @ 81617BB end Route110_TrickHouseEntrance_EventScript_1617E4:: @ 81617E4 - compare 0x40AF, 0 + compare_var_to_imm 0x40AF, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819D3A5, 4 playsfx SE_PIN @@ -657,7 +657,7 @@ Route110_TrickHouseEntrance_EventScript_1617E4:: @ 81617E4 end Route110_TrickHouseEntrance_EventScript_16180D:: @ 816180D - compare 0x40B0, 0 + compare_var_to_imm 0x40B0, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819DC0A, 4 playsfx SE_PIN @@ -668,7 +668,7 @@ Route110_TrickHouseEntrance_EventScript_16180D:: @ 816180D end Route110_TrickHouseEntrance_EventScript_161836:: @ 8161836 - compare 0x40B1, 0 + compare_var_to_imm 0x40B1, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819DE8D, 4 playsfx SE_PIN @@ -679,7 +679,7 @@ Route110_TrickHouseEntrance_EventScript_161836:: @ 8161836 end Route110_TrickHouseEntrance_EventScript_16185F:: @ 816185F - compare 0x40B2, 0 + compare_var_to_imm 0x40B2, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819E0FF, 4 playsfx SE_PIN @@ -726,11 +726,11 @@ Route110_TrickHouseEntrance_EventScript_1618B0:: @ 81618B0 lockall msgbox Route110_TrickHouseEntrance_Text_19BA56, 4 releaseall - compare 0x4044, 0 + compare_var_to_imm 0x4044, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1618E1 - compare 0x4044, 1 + compare_var_to_imm 0x4044, 1 call_if 1, Route110_TrickHouseEntrance_EventScript_1618F6 - compare 0x4044, 2 + compare_var_to_imm 0x4044, 2 call_if 1, Route110_TrickHouseEntrance_EventScript_16190B setvar 0x40a5, 1 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle1.inc b/data/scripts/maps/Route110_TrickHousePuzzle1.inc index 3a89c2db1..d9536edde 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle1.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle1.inc @@ -3,7 +3,7 @@ Route110_TrickHousePuzzle1_MapScripts:: @ 8161CF8 .byte 0 Route110_TrickHousePuzzle1_MapScript1_161CFE:: @ 8161CFE - compare 0x40ab, 2 + compare_var_to_imm 0x40ab, 2 goto_if_eq Route110_TrickHousePuzzle1_EventScript_161D0A end @@ -13,7 +13,7 @@ Route110_TrickHousePuzzle1_EventScript_161D0A:: @ 8161D0A Route110_TrickHousePuzzle1_EventScript_161D14:: @ 8161D14 lockall - compare 0x40ab, 0 + compare_var_to_imm 0x40ab, 0 goto_if_eq Route110_TrickHousePuzzle1_EventScript_161D26 goto Route110_TrickHousePuzzle1_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle2.inc b/data/scripts/maps/Route110_TrickHousePuzzle2.inc index a4731d329..4102bd9ec 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle2.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle2.inc @@ -4,13 +4,13 @@ Route110_TrickHousePuzzle2_MapScripts:: @ 8161D76 .byte 0 Route110_TrickHousePuzzle2_MapScript1_161D81:: @ 8161D81 - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 call_if 1, Route110_TrickHousePuzzle2_EventScript_161E2C - compare 0x4002, 1 + compare_var_to_imm 0x4002, 1 call_if 1, Route110_TrickHousePuzzle2_EventScript_161E3F - compare 0x4003, 1 + compare_var_to_imm 0x4003, 1 call_if 1, Route110_TrickHousePuzzle2_EventScript_161E52 - compare 0x4004, 1 + compare_var_to_imm 0x4004, 1 call_if 1, Route110_TrickHousePuzzle2_EventScript_161E65 end @@ -23,7 +23,7 @@ Route110_TrickHousePuzzle2_MapScript1_161DAE:: @ 8161DAE Route110_TrickHousePuzzle2_EventScript_161DC3:: @ 8161DC3 lockall - compare 0x40ac, 0 + compare_var_to_imm 0x40ac, 0 goto_if_eq Route110_TrickHousePuzzle2_EventScript_161DD5 goto Route110_TrickHousePuzzle2_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle3.inc b/data/scripts/maps/Route110_TrickHousePuzzle3.inc index 86d68a6ef..377791261 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle3.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle3.inc @@ -5,9 +5,9 @@ Route110_TrickHousePuzzle3_MapScripts:: @ 8161EBD Route110_TrickHousePuzzle3_MapScript1_161EC8:: @ 8161EC8 call Route110_TrickHousePuzzle3_EventScript_161F12 - compare 0x4009, 0 + compare_var_to_imm 0x4009, 0 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FE5 - compare 0x4009, 1 + compare_var_to_imm 0x4009, 1 call_if 1, Route110_TrickHousePuzzle3_EventScript_1622C8 end @@ -31,19 +31,19 @@ Route110_TrickHousePuzzle3_EventScript_161F12:: @ 8161F12 setmaptile 13, 7, 600, 0 setmaptile 1, 3, 600, 0 setmaptile 10, 2, 600, 0 - compare 0x4008, 1 + compare_var_to_imm 0x4008, 1 call_if 1, Route110_TrickHousePuzzle3_EventScript_161F9F - compare 0x4008, 2 + compare_var_to_imm 0x4008, 2 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FA9 - compare 0x4008, 3 + compare_var_to_imm 0x4008, 3 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FB3 - compare 0x4008, 4 + compare_var_to_imm 0x4008, 4 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FBD - compare 0x4008, 5 + compare_var_to_imm 0x4008, 5 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FC7 - compare 0x4008, 6 + compare_var_to_imm 0x4008, 6 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FD1 - compare 0x4008, 7 + compare_var_to_imm 0x4008, 7 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FDB return @@ -302,19 +302,19 @@ Route110_TrickHousePuzzle3_EventScript_162612:: @ 8162612 setvar 0x4005, 0 setvar 0x4006, 0 setvar 0x4007, 0 - compare 0x4008, 1 + compare_var_to_imm 0x4008, 1 call_if 1, Route110_TrickHousePuzzle3_EventScript_162683 - compare 0x4008, 2 + compare_var_to_imm 0x4008, 2 call_if 1, Route110_TrickHousePuzzle3_EventScript_162689 - compare 0x4008, 3 + compare_var_to_imm 0x4008, 3 call_if 1, Route110_TrickHousePuzzle3_EventScript_16268F - compare 0x4008, 4 + compare_var_to_imm 0x4008, 4 call_if 1, Route110_TrickHousePuzzle3_EventScript_162695 - compare 0x4008, 5 + compare_var_to_imm 0x4008, 5 call_if 1, Route110_TrickHousePuzzle3_EventScript_16269B - compare 0x4008, 6 + compare_var_to_imm 0x4008, 6 call_if 1, Route110_TrickHousePuzzle3_EventScript_1626A1 - compare 0x4008, 7 + compare_var_to_imm 0x4008, 7 call_if 1, Route110_TrickHousePuzzle3_EventScript_1626A7 return @@ -347,14 +347,14 @@ Route110_TrickHousePuzzle3_EventScript_1626A7:: @ 81626A7 return Route110_TrickHousePuzzle3_EventScript_1626AD:: @ 81626AD - compare 0x4009, 1 + compare_var_to_imm 0x4009, 1 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FE5 - compare 0x4009, 0 + compare_var_to_imm 0x4009, 0 call_if 1, Route110_TrickHousePuzzle3_EventScript_1622C8 special DrawWholeMapView - compare 0x4009, 1 + compare_var_to_imm 0x4009, 1 goto_if_eq Route110_TrickHousePuzzle3_EventScript_1626DD - compare 0x4009, 0 + compare_var_to_imm 0x4009, 0 goto_if_eq Route110_TrickHousePuzzle3_EventScript_1626E4 end @@ -370,7 +370,7 @@ Route110_TrickHousePuzzle3_EventScript_1626E4:: @ 81626E4 Route110_TrickHousePuzzle3_EventScript_1626EB:: @ 81626EB lockall - compare 0x40ad, 0 + compare_var_to_imm 0x40ad, 0 goto_if_eq Route110_TrickHousePuzzle3_EventScript_1626FD goto Route110_TrickHousePuzzle3_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle4.inc b/data/scripts/maps/Route110_TrickHousePuzzle4.inc index 0c9fc426f..0bff3f526 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle4.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle4.inc @@ -3,7 +3,7 @@ Route110_TrickHousePuzzle4_MapScripts:: @ 816274D Route110_TrickHousePuzzle4_EventScript_16274E:: @ 816274E lockall - compare 0x40ae, 0 + compare_var_to_imm 0x40ae, 0 goto_if_eq Route110_TrickHousePuzzle4_EventScript_162760 goto Route110_TrickHousePuzzle4_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle5.inc b/data/scripts/maps/Route110_TrickHousePuzzle5.inc index 72268710b..67f5bc469 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle5.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle5.inc @@ -13,7 +13,7 @@ Route110_TrickHousePuzzle5_MapScript1_1627B6:: @ 81627B6 Route110_TrickHousePuzzle5_EventScript_1627D5:: @ 81627D5 lockall - compare 0x40af, 0 + compare_var_to_imm 0x40af, 0 goto_if_eq Route110_TrickHousePuzzle5_EventScript_1627E7 goto Route110_TrickHousePuzzle5_EventScript_161892 end @@ -27,7 +27,7 @@ Route110_TrickHousePuzzle5_EventScript_1627F2:: @ 81627F2 lockall move 1, Route110_TrickHousePuzzle5_Movement_1A0839 waitmove 0 - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_16293F @@ -37,7 +37,7 @@ Route110_TrickHousePuzzle5_EventScript_162813:: @ 8162813 lockall move 2, Route110_TrickHousePuzzle5_Movement_1A0839 waitmove 0 - compare 0x4002, 1 + compare_var_to_imm 0x4002, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_1629B3 @@ -47,7 +47,7 @@ Route110_TrickHousePuzzle5_EventScript_162834:: @ 8162834 lockall move 3, Route110_TrickHousePuzzle5_Movement_1A0839 waitmove 0 - compare 0x4003, 1 + compare_var_to_imm 0x4003, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_162A27 @@ -57,7 +57,7 @@ Route110_TrickHousePuzzle5_EventScript_162855:: @ 8162855 lockall move 4, Route110_TrickHousePuzzle5_Movement_1A0839 waitmove 0 - compare 0x4004, 1 + compare_var_to_imm 0x4004, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_162A9B @@ -67,7 +67,7 @@ Route110_TrickHousePuzzle5_EventScript_162876:: @ 8162876 lockall move 5, Route110_TrickHousePuzzle5_Movement_1A0839 waitmove 0 - compare 0x4005, 1 + compare_var_to_imm 0x4005, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_162B0F @@ -165,11 +165,11 @@ Route110_TrickHousePuzzle5_EventScript_16293F:: @ 816293F waitmove 0 move 1, Route110_TrickHousePuzzle5_Movement_1A0835 waitmove 0 - compare 0x4009, 1 + compare_var_to_imm 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162DF3 - compare 0x4009, 2 + compare_var_to_imm 0x4009, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E2B - compare 0x4009, 3 + compare_var_to_imm 0x4009, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E63 msgbox Route110_TrickHousePuzzle5_Text_19D423, 4 random 3 @@ -187,11 +187,11 @@ Route110_TrickHousePuzzle5_EventScript_1629B3:: @ 81629B3 waitmove 0 move 2, Route110_TrickHousePuzzle5_Movement_1A0835 waitmove 0 - compare 0x4009, 1 + compare_var_to_imm 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E9B - compare 0x4009, 2 + compare_var_to_imm 0x4009, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162ED3 - compare 0x4009, 3 + compare_var_to_imm 0x4009, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F0B msgbox Route110_TrickHousePuzzle5_Text_19D636, 4 random 3 @@ -209,11 +209,11 @@ Route110_TrickHousePuzzle5_EventScript_162A27:: @ 8162A27 waitmove 0 move 3, Route110_TrickHousePuzzle5_Movement_1A0835 waitmove 0 - compare 0x4009, 1 + compare_var_to_imm 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162DF3 - compare 0x4009, 2 + compare_var_to_imm 0x4009, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E2B - compare 0x4009, 3 + compare_var_to_imm 0x4009, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E63 msgbox Route110_TrickHousePuzzle5_Text_19D7D3, 4 random 3 @@ -231,11 +231,11 @@ Route110_TrickHousePuzzle5_EventScript_162A9B:: @ 8162A9B waitmove 0 move 4, Route110_TrickHousePuzzle5_Movement_1A0835 waitmove 0 - compare 0x4009, 1 + compare_var_to_imm 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162DF3 - compare 0x4009, 2 + compare_var_to_imm 0x4009, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E2B - compare 0x4009, 3 + compare_var_to_imm 0x4009, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E63 msgbox Route110_TrickHousePuzzle5_Text_19D93D, 4 random 3 @@ -253,11 +253,11 @@ Route110_TrickHousePuzzle5_EventScript_162B0F:: @ 8162B0F waitmove 0 move 5, Route110_TrickHousePuzzle5_Movement_1A0835 waitmove 0 - compare 0x4009, 1 + compare_var_to_imm 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E9B - compare 0x4009, 2 + compare_var_to_imm 0x4009, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162ED3 - compare 0x4009, 3 + compare_var_to_imm 0x4009, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F0B msgbox Route110_TrickHousePuzzle5_Text_19DA9A, 4 random 3 @@ -418,80 +418,80 @@ Route110_TrickHousePuzzle5_EventScript_162DE9:: @ 8162DE9 end Route110_TrickHousePuzzle5_EventScript_162DF3:: @ 8162DF3 - compare 0x4008, 1 + compare_var_to_imm 0x4008, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F43 - compare 0x4008, 2 + compare_var_to_imm 0x4008, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F4E - compare 0x4008, 3 + compare_var_to_imm 0x4008, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F59 - compare 0x4008, 4 + compare_var_to_imm 0x4008, 4 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F64 - compare 0x4008, 5 + compare_var_to_imm 0x4008, 5 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F6F return Route110_TrickHousePuzzle5_EventScript_162E2B:: @ 8162E2B - compare 0x4008, 1 + compare_var_to_imm 0x4008, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F7A - compare 0x4008, 2 + compare_var_to_imm 0x4008, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F85 - compare 0x4008, 3 + compare_var_to_imm 0x4008, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F90 - compare 0x4008, 4 + compare_var_to_imm 0x4008, 4 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F9B - compare 0x4008, 5 + compare_var_to_imm 0x4008, 5 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FA6 return Route110_TrickHousePuzzle5_EventScript_162E63:: @ 8162E63 - compare 0x4008, 1 + compare_var_to_imm 0x4008, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FB1 - compare 0x4008, 2 + compare_var_to_imm 0x4008, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FBC - compare 0x4008, 3 + compare_var_to_imm 0x4008, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FC7 - compare 0x4009, 4 + compare_var_to_imm 0x4009, 4 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FD2 - compare 0x4009, 5 + compare_var_to_imm 0x4009, 5 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FDD return Route110_TrickHousePuzzle5_EventScript_162E9B:: @ 8162E9B - compare 0x4008, 1 + compare_var_to_imm 0x4008, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FE8 - compare 0x4008, 2 + compare_var_to_imm 0x4008, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FF3 - compare 0x4008, 3 + compare_var_to_imm 0x4008, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FFE - compare 0x4008, 4 + compare_var_to_imm 0x4008, 4 call_if 1, Route110_TrickHousePuzzle5_EventScript_163009 - compare 0x4008, 5 + compare_var_to_imm 0x4008, 5 call_if 1, Route110_TrickHousePuzzle5_EventScript_163014 return Route110_TrickHousePuzzle5_EventScript_162ED3:: @ 8162ED3 - compare 0x4008, 1 + compare_var_to_imm 0x4008, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_16301F - compare 0x4008, 2 + compare_var_to_imm 0x4008, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_16302A - compare 0x4008, 3 + compare_var_to_imm 0x4008, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_163035 - compare 0x4008, 4 + compare_var_to_imm 0x4008, 4 call_if 1, Route110_TrickHousePuzzle5_EventScript_163040 - compare 0x4008, 5 + compare_var_to_imm 0x4008, 5 call_if 1, Route110_TrickHousePuzzle5_EventScript_16304B return Route110_TrickHousePuzzle5_EventScript_162F0B:: @ 8162F0B - compare 0x4008, 1 + compare_var_to_imm 0x4008, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_163056 - compare 0x4008, 2 + compare_var_to_imm 0x4008, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_163061 - compare 0x4008, 3 + compare_var_to_imm 0x4008, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_16306C - compare 0x4008, 4 + compare_var_to_imm 0x4008, 4 call_if 1, Route110_TrickHousePuzzle5_EventScript_163077 - compare 0x4008, 5 + compare_var_to_imm 0x4008, 5 call_if 1, Route110_TrickHousePuzzle5_EventScript_163082 return diff --git a/data/scripts/maps/Route110_TrickHousePuzzle6.inc b/data/scripts/maps/Route110_TrickHousePuzzle6.inc index ddf845142..e4ce617c9 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle6.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle6.inc @@ -17,7 +17,7 @@ Route110_TrickHousePuzzle6_EventScript_1630E6:: @ 81630E6 Route110_TrickHousePuzzle6_EventScript_1630EA:: @ 81630EA lockall - compare 0x40b0, 0 + compare_var_to_imm 0x40b0, 0 goto_if_eq Route110_TrickHousePuzzle6_EventScript_1630FC goto Route110_TrickHousePuzzle6_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle7.inc b/data/scripts/maps/Route110_TrickHousePuzzle7.inc index c9dcce5e3..5d635e2c5 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle7.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle7.inc @@ -73,7 +73,7 @@ Route110_TrickHousePuzzle7_EventScript_163240:: @ 8163240 return Route110_TrickHousePuzzle7_MapScript1_163253:: @ 8163253 - compare 0x40b6, 1 + compare_var_to_imm 0x40b6, 1 goto_if_eq Route110_TrickHousePuzzle7_EventScript_16326E clearflag 194 clearflag 195 @@ -86,7 +86,7 @@ Route110_TrickHousePuzzle7_EventScript_16326E:: @ 816326E end Route110_TrickHousePuzzle7_MapScript1_16326F:: @ 816326F - compare 0x40b6, 1 + compare_var_to_imm 0x40b6, 1 call_if 1, Route110_TrickHousePuzzle7_EventScript_163167 end @@ -100,7 +100,7 @@ Route110_TrickHousePuzzle7_EventScript_163285:: @ 8163285 Route110_TrickHousePuzzle7_EventScript_16328B:: @ 816328B lockall - compare 0x40b1, 0 + compare_var_to_imm 0x40b1, 0 goto_if_eq Route110_TrickHousePuzzle7_EventScript_16329D goto Route110_TrickHousePuzzle7_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle8.inc b/data/scripts/maps/Route110_TrickHousePuzzle8.inc index 5f0b00684..1c6a9847f 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle8.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle8.inc @@ -3,7 +3,7 @@ Route110_TrickHousePuzzle8_MapScripts:: @ 816341B Route110_TrickHousePuzzle8_EventScript_16341C:: @ 816341C lockall - compare 0x40b2, 0 + compare_var_to_imm 0x40b2, 0 goto_if_eq Route110_TrickHousePuzzle8_EventScript_16342E goto Route110_TrickHousePuzzle8_EventScript_161892 end diff --git a/data/scripts/maps/Route111.inc b/data/scripts/maps/Route111.inc index 2a69df98a..7231b427a 100644 --- a/data/scripts/maps/Route111.inc +++ b/data/scripts/maps/Route111.inc @@ -22,15 +22,15 @@ Route111_MapScript1_14FFB9:: @ 814FFB9 Route111_EventScript_14FFCD:: @ 814FFCD getplayerxy 0x4000, 0x4001 - compare 0x4001, 34 + compare_var_to_imm 0x4001, 34 goto_if 0, Route111_EventScript_15000C - compare 0x4001, 107 + compare_var_to_imm 0x4001, 107 goto_if 2, Route111_EventScript_15000C - compare 0x4001, 72 + compare_var_to_imm 0x4001, 72 goto_if 2, Route111_EventScript_150009 - compare 0x4000, 2000 + compare_var_to_imm 0x4000, 2000 goto_if 2, Route111_EventScript_15000C - compare 0x4000, 8 + compare_var_to_imm 0x4000, 8 goto_if 0, Route111_EventScript_15000C Route111_EventScript_150009:: @ 8150009 @@ -52,7 +52,7 @@ Route111_EventScript_15000D:: @ 815000D Route111_EventScript_150023:: @ 8150023 lockall msgbox Route111_Text_16FA54, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route111_EventScript_15005F giveitem ITEM_ROOT_FOSSIL closebutton @@ -74,7 +74,7 @@ Route111_EventScript_15005F:: @ 815005F Route111_EventScript_150069:: @ 8150069 lockall msgbox Route111_Text_16FAED, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route111_EventScript_1500A5 giveitem ITEM_CLAW_FOSSIL closebutton @@ -125,7 +125,7 @@ Route111_EventScript_1500C5:: @ 81500C5 goto_if_eq Route111_EventScript_150100 msgbox Route111_Text_1C56F0, 4 giveitem ITEM_RAZZ_BERRY - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route111_EventScript_1A029B setflag 2252 special GetPlayerBigGuyGirlString @@ -164,7 +164,7 @@ Route111_EventScript_150122:: @ 8150122 Route111_EventScript_15013A:: @ 815013A checkitem ITEM_GO_GOGGLES, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route111_EventScript_150151 setvar 0x4003, 1 releaseall @@ -173,13 +173,13 @@ Route111_EventScript_15013A:: @ 815013A Route111_EventScript_150151:: @ 8150151 msgbox Route111_Text_1A0F93, 4 closebutton - compare 0x8004, 0 + compare_var_to_imm 0x8004, 0 call_if 1, Route111_EventScript_150188 - compare 0x8004, 1 + compare_var_to_imm 0x8004, 1 call_if 1, Route111_EventScript_150193 - compare 0x8004, 2 + compare_var_to_imm 0x8004, 2 call_if 1, Route111_EventScript_15019E - compare 0x8004, 3 + compare_var_to_imm 0x8004, 3 call_if 1, Route111_EventScript_1501A9 releaseall end @@ -238,7 +238,7 @@ Route111_EventScript_1501D1:: @ 81501D1 faceplayer setflag 2115 msgbox Route111_Text_16F705, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route111_EventScript_1501F3 msgbox Route111_Text_16F785, 4 release @@ -393,7 +393,7 @@ Route111_EventScript_1503EC:: @ 81503EC Route111_EventScript_150403:: @ 8150403 trainerbattle 0, OPPONENT_DUSTY_1, 0, Route111_Text_1BAEC9, Route111_Text_1BAF14 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route111_EventScript_15042A msgbox Route111_Text_1BAF5B, 6 end @@ -421,7 +421,7 @@ Route111_EventScript_15046F:: @ 815046F Route111_EventScript_150486:: @ 8150486 trainerbattle 0, OPPONENT_WILTON_1, 0, Route111_Text_1BB2E3, Route111_Text_1BB313 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route111_EventScript_1504AD msgbox Route111_Text_1BB33E, 6 end @@ -434,7 +434,7 @@ Route111_EventScript_1504AD:: @ 81504AD Route111_EventScript_1504C4:: @ 81504C4 trainerbattle 0, OPPONENT_BROOKE_1, 0, Route111_Text_1BB44F, Route111_Text_1BB49F specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route111_EventScript_1504EB msgbox Route111_Text_1BB4CE, 6 end diff --git a/data/scripts/maps/Route111_OldLadysRestStop.inc b/data/scripts/maps/Route111_OldLadysRestStop.inc index a33b436dc..fdd0078ed 100644 --- a/data/scripts/maps/Route111_OldLadysRestStop.inc +++ b/data/scripts/maps/Route111_OldLadysRestStop.inc @@ -10,9 +10,9 @@ Route111_OldLadysRestStop_EventScript_15BFDB:: @ 815BFDB lock faceplayer msgbox Route111_OldLadysRestStop_Text_1923AF, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route111_OldLadysRestStop_EventScript_15BFFC - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route111_OldLadysRestStop_EventScript_15C029 end @@ -21,9 +21,9 @@ Route111_OldLadysRestStop_EventScript_15BFFC:: @ 815BFFC closebutton call Route111_OldLadysRestStop_EventScript_1A02CA msgbox Route111_OldLadysRestStop_Text_19244D, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route111_OldLadysRestStop_EventScript_15BFFC - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route111_OldLadysRestStop_EventScript_15C029 end diff --git a/data/scripts/maps/Route111_WinstrateFamilysHouse.inc b/data/scripts/maps/Route111_WinstrateFamilysHouse.inc index 39fc62eaf..b5b6056f4 100644 --- a/data/scripts/maps/Route111_WinstrateFamilysHouse.inc +++ b/data/scripts/maps/Route111_WinstrateFamilysHouse.inc @@ -17,7 +17,7 @@ Route111_WinstrateFamilysHouse_EventScript_15BF3A:: @ 815BF3A goto_if_eq Route111_WinstrateFamilysHouse_EventScript_15BF72 msgbox Route111_WinstrateFamilysHouse_Text_19208A, 4 giveitem ITEM_MACHO_BRACE - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route111_WinstrateFamilysHouse_EventScript_1A029B setflag 277 goto Route111_WinstrateFamilysHouse_EventScript_15BFC4 diff --git a/data/scripts/maps/Route112.inc b/data/scripts/maps/Route112.inc index 22c055320..9a4c85158 100644 --- a/data/scripts/maps/Route112.inc +++ b/data/scripts/maps/Route112.inc @@ -39,7 +39,7 @@ Route112_EventScript_150549:: @ 8150549 Route112_EventScript_150560:: @ 8150560 trainerbattle 0, OPPONENT_TRENT_1, 0, Route112_Text_1BB6A0, Route112_Text_1BB707 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route112_EventScript_150587 msgbox Route112_Text_1BB721, 6 end diff --git a/data/scripts/maps/Route112_CableCarStation.inc b/data/scripts/maps/Route112_CableCarStation.inc index c4ab89f23..d2d01f253 100644 --- a/data/scripts/maps/Route112_CableCarStation.inc +++ b/data/scripts/maps/Route112_CableCarStation.inc @@ -5,7 +5,7 @@ Route112_CableCarStation_MapScripts:: @ 815C033 Route112_CableCarStation_MapScript1_15C03E:: @ 815C03E warp6 Route112, 255, 28, 28 - compare 0x40a3, 2 + compare_var_to_imm 0x40a3, 2 call_if 1, Route112_CableCarStation_EventScript_15C052 end @@ -33,9 +33,9 @@ Route112_CableCarStation_EventScript_15C08C:: @ 815C08C lock faceplayer msgbox Route112_CableCarStation_Text_1924F5, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route112_CableCarStation_EventScript_15C0AD - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route112_CableCarStation_EventScript_15C0DC end diff --git a/data/scripts/maps/Route113.inc b/data/scripts/maps/Route113.inc index 67d28e6df..ae08ff5bb 100644 --- a/data/scripts/maps/Route113.inc +++ b/data/scripts/maps/Route113.inc @@ -14,9 +14,9 @@ Route113_MapScript1_1505DA:: @ 81505DA Route113_EventScript_1505E5:: @ 81505E5 getplayerxy 0x4000, 0x4001 - compare 0x4000, 19 + compare_var_to_imm 0x4000, 19 goto_if 0, Route113_EventScript_150604 - compare 0x4000, 84 + compare_var_to_imm 0x4000, 84 goto_if 2, Route113_EventScript_150604 setweather 7 return @@ -61,7 +61,7 @@ Route113_EventScript_150652:: @ 8150652 Route113_EventScript_150669:: @ 8150669 trainerbattle 0, OPPONENT_MADELINE_1, 0, Route113_Text_1BBB27, Route113_Text_1BBB7A specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route113_EventScript_150690 msgbox Route113_Text_1BBB9A, 6 end @@ -74,7 +74,7 @@ Route113_EventScript_150690:: @ 8150690 Route113_EventScript_1506A7:: @ 81506A7 trainerbattle 0, OPPONENT_LAO_1, 0, Route113_Text_1BBC59, Route113_Text_1BBC90 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route113_EventScript_1506CE msgbox Route113_Text_1BBCAB, 6 end diff --git a/data/scripts/maps/Route113_GlassWorkshop.inc b/data/scripts/maps/Route113_GlassWorkshop.inc index 2fec004e4..f83c5cf23 100644 --- a/data/scripts/maps/Route113_GlassWorkshop.inc +++ b/data/scripts/maps/Route113_GlassWorkshop.inc @@ -4,7 +4,7 @@ Route113_GlassWorkshop_MapScripts:: @ 816354A Route113_GlassWorkshop_MapScript1_163550:: @ 8163550 setflag 2116 - compare 0x40be, 1 + compare_var_to_imm 0x40be, 1 call_if 1, Route113_GlassWorkshop_EventScript_16355F end @@ -15,11 +15,11 @@ Route113_GlassWorkshop_EventScript_16355F:: @ 816355F Route113_GlassWorkshop_EventScript_163565:: @ 8163565 lock faceplayer - compare 0x40be, 10 + compare_var_to_imm 0x40be, 10 goto_if 4, Route113_GlassWorkshop_EventScript_1638D2 - compare 0x40be, 2 + compare_var_to_imm 0x40be, 2 goto_if_eq Route113_GlassWorkshop_EventScript_1635B5 - compare 0x40be, 1 + compare_var_to_imm 0x40be, 1 goto_if_eq Route113_GlassWorkshop_EventScript_1635AB msgbox Route113_GlassWorkshop_Text_19E4E6, 4 giveitem ITEM_SOOT_SACK @@ -35,10 +35,10 @@ Route113_GlassWorkshop_EventScript_1635AB:: @ 81635AB Route113_GlassWorkshop_EventScript_1635B5:: @ 81635B5 checkitem ITEM_SOOT_SACK, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_1635E4 msgbox Route113_GlassWorkshop_Text_19E65B, 4 - compare 0x4048, 250 + compare_var_to_imm 0x4048, 250 goto_if 0, Route113_GlassWorkshop_EventScript_163818 message Route113_GlassWorkshop_Text_19E757 waittext @@ -70,10 +70,10 @@ Route113_GlassWorkshop_EventScript_163660:: @ 8163660 setvar 0x8008, 39 bufferitem 0, 0x8008 setvar 0x800a, 250 - compare 0x4048, 250 + compare_var_to_imm 0x4048, 250 goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 10 subvar 0x4048, 250 @@ -84,10 +84,10 @@ Route113_GlassWorkshop_EventScript_16369C:: @ 816369C setvar 0x8008, 40 bufferitem 0, 0x8008 setvar 0x800a, 500 - compare 0x4048, 500 + compare_var_to_imm 0x4048, 500 goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 11 subvar 0x4048, 500 @@ -98,10 +98,10 @@ Route113_GlassWorkshop_EventScript_1636D8:: @ 81636D8 setvar 0x8008, 41 bufferitem 0, 0x8008 setvar 0x800a, 500 - compare 0x4048, 500 + compare_var_to_imm 0x4048, 500 goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 12 subvar 0x4048, 500 @@ -112,10 +112,10 @@ Route113_GlassWorkshop_EventScript_163714:: @ 8163714 setvar 0x8008, 43 bufferitem 0, 0x8008 setvar 0x800a, 1000 - compare 0x4048, 1000 + compare_var_to_imm 0x4048, 1000 goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 13 subvar 0x4048, 1000 @@ -126,10 +126,10 @@ Route113_GlassWorkshop_EventScript_163750:: @ 8163750 setvar 0x8008, 42 bufferitem 0, 0x8008 setvar 0x800a, 1000 - compare 0x4048, 1000 + compare_var_to_imm 0x4048, 1000 goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 14 subvar 0x4048, 1000 @@ -141,10 +141,10 @@ Route113_GlassWorkshop_EventScript_16378C:: @ 816378C setvar 0x8008, 13 bufferdecor 0, 0x8008 setvar 0x800a, 6000 - compare 0x4048, 6000 + compare_var_to_imm 0x4048, 6000 goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 15 subvar 0x4048, 6000 @@ -156,10 +156,10 @@ Route113_GlassWorkshop_EventScript_1637CD:: @ 81637CD setvar 0x8008, 6 bufferdecor 0, 0x8008 setvar 0x800a, 8000 - compare 0x4048, 8000 + compare_var_to_imm 0x4048, 8000 goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 16 subvar 0x4048, 8000 @@ -201,9 +201,9 @@ Route113_GlassWorkshop_EventScript_163851:: @ 8163851 pause 30 fadescreen 0 msgbox Route113_GlassWorkshop_Text_19E9D7, 4 - compare 0x8009, 0 + compare_var_to_imm 0x8009, 0 call_if 1, Route113_GlassWorkshop_EventScript_163889 - compare 0x8009, 1 + compare_var_to_imm 0x8009, 1 call_if 1, Route113_GlassWorkshop_EventScript_1638A1 setvar 0x40be, 2 release @@ -211,13 +211,13 @@ Route113_GlassWorkshop_EventScript_163851:: @ 8163851 Route113_GlassWorkshop_EventScript_163889:: @ 8163889 giveitem 0x8008 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_1638B4 return Route113_GlassWorkshop_EventScript_1638A1:: @ 81638A1 givedecoration 0x8008 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_1638C3 return @@ -295,9 +295,9 @@ Route113_GlassWorkshop_EventScript_16399D:: @ 816399D Route113_GlassWorkshop_EventScript_1639B1:: @ 81639B1 msgbox Route113_GlassWorkshop_Text_19E9D7, 4 - compare 0x8009, 0 + compare_var_to_imm 0x8009, 0 call_if 1, Route113_GlassWorkshop_EventScript_163889 - compare 0x8009, 1 + compare_var_to_imm 0x8009, 1 call_if 1, Route113_GlassWorkshop_EventScript_1638A1 setvar 0x40be, 2 release diff --git a/data/scripts/maps/Route114.inc b/data/scripts/maps/Route114.inc index 6d28b87a4..d910d3e16 100644 --- a/data/scripts/maps/Route114.inc +++ b/data/scripts/maps/Route114.inc @@ -12,7 +12,7 @@ Route114_EventScript_150733:: @ 8150733 addvar RESULT, 15 addvar RESULT, 133 giveitem RESULT - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route114_EventScript_1A029B setflag 2251 msgbox Route114_Text_1C5861, 4 @@ -31,7 +31,7 @@ Route114_EventScript_150782:: @ 8150782 goto_if_eq Route114_EventScript_1507B9 msgbox Route114_Text_170154, 4 giveitem ITEM_TM05 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route114_EventScript_1A029B setflag 231 msgbox Route114_Text_1701C5, 4 @@ -88,7 +88,7 @@ Route114_EventScript_150836:: @ 8150836 Route114_EventScript_15084D:: @ 815084D trainerbattle 0, OPPONENT_STEVE_1, 0, Route114_Text_1BC2F5, Route114_Text_1BC327 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route114_EventScript_150874 msgbox Route114_Text_1BC337, 6 end @@ -101,7 +101,7 @@ Route114_EventScript_150874:: @ 8150874 Route114_EventScript_15088B:: @ 815088B trainerbattle 0, OPPONENT_BERNIE_1, 0, Route114_Text_1BC45A, Route114_Text_1BC499 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route114_EventScript_1508B2 msgbox Route114_Text_1BC4B5, 6 end diff --git a/data/scripts/maps/Route114_FossilManiacsHouse.inc b/data/scripts/maps/Route114_FossilManiacsHouse.inc index b217f24c4..3406a78f6 100644 --- a/data/scripts/maps/Route114_FossilManiacsHouse.inc +++ b/data/scripts/maps/Route114_FossilManiacsHouse.inc @@ -13,7 +13,7 @@ Route114_FossilManiacsHouse_EventScript_15C1C3:: @ 815C1C3 goto_if_eq Route114_FossilManiacsHouse_EventScript_15C1F2 msgbox Route114_FossilManiacsHouse_Text_1925E1, 4 giveitem ITEM_TM28 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route114_FossilManiacsHouse_EventScript_1A029B setflag 261 release diff --git a/data/scripts/maps/Route114_FossilManiacsTunnel.inc b/data/scripts/maps/Route114_FossilManiacsTunnel.inc index 13843f758..71c627728 100644 --- a/data/scripts/maps/Route114_FossilManiacsTunnel.inc +++ b/data/scripts/maps/Route114_FossilManiacsTunnel.inc @@ -7,10 +7,10 @@ Route114_FossilManiacsTunnel_EventScript_15C20F:: @ 815C20F checkflag 267 goto_if_eq Route114_FossilManiacsTunnel_EventScript_15C24E checkitem ITEM_ROOT_FOSSIL, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route114_FossilManiacsTunnel_EventScript_15C244 checkitem ITEM_CLAW_FOSSIL, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route114_FossilManiacsTunnel_EventScript_15C244 msgbox Route114_FossilManiacsTunnel_Text_192795, 4 release diff --git a/data/scripts/maps/Route114_LanettesHouse.inc b/data/scripts/maps/Route114_LanettesHouse.inc index e4334647c..fbc4976ab 100644 --- a/data/scripts/maps/Route114_LanettesHouse.inc +++ b/data/scripts/maps/Route114_LanettesHouse.inc @@ -18,7 +18,7 @@ Route114_LanettesHouse_EventScript_15C262:: @ 815C262 .else givedecoration 100 .endif - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route114_LanettesHouse_EventScript_1A02AE setflag 131 release @@ -32,7 +32,7 @@ Route114_LanettesHouse_EventScript_15C28F:: @ 815C28F Route114_LanettesHouse_EventScript_15C299:: @ 815C299 lockall msgbox Route114_LanettesHouse_Text_192B4A, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route114_LanettesHouse_EventScript_15C2B7 msgbox Route114_LanettesHouse_Text_192DA9, 4 releaseall @@ -40,7 +40,7 @@ Route114_LanettesHouse_EventScript_15C299:: @ 815C299 Route114_LanettesHouse_EventScript_15C2B7:: @ 815C2B7 msgbox Route114_LanettesHouse_Text_192C01, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, Route114_LanettesHouse_EventScript_15C2CC releaseall end diff --git a/data/scripts/maps/Route115.inc b/data/scripts/maps/Route115.inc index 3bacb06d1..711a62e40 100644 --- a/data/scripts/maps/Route115.inc +++ b/data/scripts/maps/Route115.inc @@ -16,7 +16,7 @@ Route115_EventScript_150940:: @ 8150940 Route115_EventScript_150949:: @ 8150949 trainerbattle 0, OPPONENT_TIMOTHY_1, 0, Route115_Text_1BC9AC, Route115_Text_1BC9E6 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route115_EventScript_150970 msgbox Route115_Text_1BCA0E, 6 end @@ -34,7 +34,7 @@ Route115_EventScript_150987:: @ 8150987 Route115_EventScript_15099E:: @ 815099E trainerbattle 0, OPPONENT_NOB_1, 0, Route115_Text_1BCB8A, Route115_Text_1BCBC1 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route115_EventScript_1509C5 msgbox Route115_Text_1BCBDE, 6 end @@ -47,7 +47,7 @@ Route115_EventScript_1509C5:: @ 81509C5 Route115_EventScript_1509DC:: @ 81509DC trainerbattle 0, OPPONENT_CYNDY_1, 0, Route115_Text_1BCCF4, Route115_Text_1BCD32 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route115_EventScript_150A03 msgbox Route115_Text_1BCD4C, 6 end diff --git a/data/scripts/maps/Route116.inc b/data/scripts/maps/Route116.inc index 94b7d25d6..838ebe814 100644 --- a/data/scripts/maps/Route116.inc +++ b/data/scripts/maps/Route116.inc @@ -44,17 +44,17 @@ Route116_EventScript_150A7B:: @ 8150A7B Route116_EventScript_150A94:: @ 8150A94 setflag 287 giveitem ITEM_REPEAT_BALL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route116_EventScript_150B12 msgbox Route116_Text_1707B8, 4 closebutton - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, Route116_EventScript_150AEE - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, Route116_EventScript_150AEE - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, Route116_EventScript_150AEE - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, Route116_EventScript_150AF9 disappear LAST_TALKED clearflag 949 @@ -148,10 +148,10 @@ Route116_EventScript_150B8F:: @ 8150B8F lock faceplayer checkitem ITEM_BLACK_GLASSES, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route116_EventScript_150BCA specialval RESULT, sub_810F828 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route116_EventScript_150BBB msgbox Route116_Text_1708EE, 4 release @@ -167,7 +167,7 @@ Route116_EventScript_150BCA:: @ 8150BCA msgbox Route116_Text_1708EE, 4 msgbox Route116_Text_170921, 4 specialval RESULT, sub_810F828 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route116_EventScript_150BF4 msgbox Route116_Text_170A03, 4 release @@ -181,13 +181,13 @@ Route116_EventScript_150BF4:: @ 8150BF4 Route116_EventScript_150C03:: @ 8150C03 pause 20 - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, Route116_EventScript_150C37 - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, Route116_EventScript_150C37 - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, Route116_EventScript_150C37 - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, Route116_EventScript_150C42 disappear LAST_TALKED release @@ -241,7 +241,7 @@ Route116_EventScript_150C79:: @ 8150C79 Route116_EventScript_150C90:: @ 8150C90 trainerbattle 0, OPPONENT_JERRY_1, 0, Route116_Text_1BD1C0, Route116_Text_1BD21A specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route116_EventScript_150CB7 msgbox Route116_Text_1BD248, 6 end @@ -264,7 +264,7 @@ Route116_EventScript_150CE5:: @ 8150CE5 Route116_EventScript_150CFC:: @ 8150CFC trainerbattle 0, OPPONENT_KAREN_1, 0, Route116_Text_1BD377, Route116_Text_1BD3AC specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route116_EventScript_150D23 msgbox Route116_Text_1BD3C3, 6 end diff --git a/data/scripts/maps/Route117.inc b/data/scripts/maps/Route117.inc index a84d1eaf8..2a27c01d7 100644 --- a/data/scripts/maps/Route117.inc +++ b/data/scripts/maps/Route117.inc @@ -41,7 +41,7 @@ Route117_EventScript_150D84:: @ 8150D84 Route117_EventScript_150D8D:: @ 8150D8D trainerbattle 0, OPPONENT_ISAAC_1, 0, Route117_Text_1BD49E, Route117_Text_1BD4D9 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_150DB4 msgbox Route117_Text_1BD4F9, 6 end @@ -54,7 +54,7 @@ Route117_EventScript_150DB4:: @ 8150DB4 Route117_EventScript_150DCB:: @ 8150DCB trainerbattle 0, OPPONENT_LYDIA_1, 0, Route117_Text_1BD634, Route117_Text_1BD67B specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_150DF2 msgbox Route117_Text_1BD69B, 6 end @@ -67,7 +67,7 @@ Route117_EventScript_150DF2:: @ 8150DF2 Route117_EventScript_150E09:: @ 8150E09 trainerbattle 0, OPPONENT_DYLAN_1, 0, Route117_Text_1BD79A, Route117_Text_1BD7E0 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_150E30 msgbox Route117_Text_1BD7F5, 6 end @@ -80,7 +80,7 @@ Route117_EventScript_150E30:: @ 8150E30 Route117_EventScript_150E47:: @ 8150E47 trainerbattle 0, OPPONENT_MARIA_1, 0, Route117_Text_1BD914, Route117_Text_1BD965 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_150E6E msgbox Route117_Text_1BD98F, 6 end @@ -98,7 +98,7 @@ Route117_EventScript_150E85:: @ 8150E85 Route117_EventScript_150E9C:: @ 8150E9C trainerbattle 4, OPPONENT_ANNA_AND_MEG_1, 0, Route117_Text_1BDBC3, Route117_Text_1BDC07, Route117_Text_1BDC96 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_150EC7 msgbox Route117_Text_1BDC44, 6 end @@ -111,7 +111,7 @@ Route117_EventScript_150EC7:: @ 8150EC7 Route117_EventScript_150EE2:: @ 8150EE2 trainerbattle 4, OPPONENT_ANNA_AND_MEG_1, 0, Route117_Text_1BDCD2, Route117_Text_1BDD1E, Route117_Text_1BDD8B specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_150F0D msgbox Route117_Text_1BDD4E, 6 end diff --git a/data/scripts/maps/Route118.inc b/data/scripts/maps/Route118.inc index 7d4109f59..e1b4fd345 100644 --- a/data/scripts/maps/Route118.inc +++ b/data/scripts/maps/Route118.inc @@ -12,9 +12,9 @@ Route118_EventScript_150F34:: @ 8150F34 checkflag 227 goto_if_eq Route118_EventScript_150F89 msgbox Route118_Text_170F12, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route118_EventScript_150F5E - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route118_EventScript_150F7F end @@ -83,11 +83,11 @@ Route118_EventScript_151004:: @ 8151004 pause 30 msgbox Route118_Text_170D66, 4 closebutton - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, Route118_EventScript_151048 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, Route118_EventScript_151053 - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, Route118_EventScript_15105E setvar 0x4071, 1 disappear 19 @@ -162,7 +162,7 @@ Route118_Movement_151086:: @ 8151086 Route118_EventScript_15108F:: @ 815108F trainerbattle 0, OPPONENT_ROSE_1, 0, Route118_Text_1BDFF4, Route118_Text_1BE03C specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route118_EventScript_1510B6 msgbox Route118_Text_1BE05E, 6 end @@ -185,7 +185,7 @@ Route118_EventScript_1510E4:: @ 81510E4 Route118_EventScript_1510FB:: @ 81510FB trainerbattle 0, OPPONENT_DALTON_1, 0, Route118_Text_1BE3E8, Route118_Text_1BE406 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route118_EventScript_151122 msgbox Route118_Text_1BE413, 6 end diff --git a/data/scripts/maps/Route119.inc b/data/scripts/maps/Route119.inc index 0d71ac056..cae90cd12 100644 --- a/data/scripts/maps/Route119.inc +++ b/data/scripts/maps/Route119.inc @@ -9,9 +9,9 @@ Route119_MapScript1_151172:: @ 8151172 end Route119_EventScript_15117C:: @ 815117C - compare 0x8004, 6 + compare_var_to_imm 0x8004, 6 call_if 1, Route119_EventScript_151193 - compare 0x8004, 7 + compare_var_to_imm 0x8004, 7 call_if 1, Route119_EventScript_151197 return @@ -27,7 +27,7 @@ Route119_MapScript1_15119B:: @ 815119B call Route119_EventScript_1A014E call Route119_EventScript_1A0172 call Route119_EventScript_1A0196 - compare 0x40b3, 1 + compare_var_to_imm 0x40b3, 1 call_if 1, Route119_EventScript_1511B9 special SetRoute119Weather end @@ -52,29 +52,29 @@ Route119_EventScript_1511DB:: @ 81511DB lockall reappear 25 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route119_EventScript_151254 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, Route119_EventScript_151259 pause 65 - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 call_if 1, Route119_EventScript_1513A6 - compare 0x4001, 2 + compare_var_to_imm 0x4001, 2 call_if 1, Route119_EventScript_1513B1 move 255, Route119_Movement_1A0845 waitmove 0 pause 30 - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 call_if 1, Route119_EventScript_1513D2 - compare 0x4001, 2 + compare_var_to_imm 0x4001, 2 call_if 1, Route119_EventScript_1513E1 disappear 25 reappear 16 pause 30 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route119_EventScript_15125E - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route119_EventScript_1512D8 releaseall end @@ -154,16 +154,16 @@ Route119_EventScript_151352:: @ 8151352 Route119_EventScript_151362:: @ 8151362 closebutton - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 call_if 1, Route119_EventScript_1513D2 - compare 0x4001, 2 + compare_var_to_imm 0x4001, 2 call_if 1, Route119_EventScript_1513E1 disappear 16 reappear 25 pause 30 - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 call_if 1, Route119_EventScript_1513BC - compare 0x4001, 2 + compare_var_to_imm 0x4001, 2 call_if 1, Route119_EventScript_1513C7 disappear 25 setvar 0x4072, 1 @@ -297,7 +297,7 @@ Route119_EventScript_1514A8:: @ 81514A8 Route119_EventScript_1514BF:: @ 81514BF trainerbattle 0, OPPONENT_JACKSON_1, 0, Route119_Text_1BE8BB, Route119_Text_1BE90E specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route119_EventScript_1514E6 msgbox Route119_Text_1BE937, 6 end @@ -310,7 +310,7 @@ Route119_EventScript_1514E6:: @ 81514E6 Route119_EventScript_1514FD:: @ 81514FD trainerbattle 0, OPPONENT_CATHERINE_1, 0, Route119_Text_1BEA3A, Route119_Text_1BEA88 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route119_EventScript_151524 msgbox Route119_Text_1BEAB3, 6 end diff --git a/data/scripts/maps/Route119_WeatherInstitute_1F.inc b/data/scripts/maps/Route119_WeatherInstitute_1F.inc index 762a6c299..aa918bc34 100644 --- a/data/scripts/maps/Route119_WeatherInstitute_1F.inc +++ b/data/scripts/maps/Route119_WeatherInstitute_1F.inc @@ -4,7 +4,7 @@ Route119_WeatherInstitute_1F_MapScripts:: @ 8163C2A Route119_WeatherInstitute_1F_MapScript1_163C30:: @ 8163C30 call Route119_WeatherInstitute_1F_EventScript_1A0196 - compare 0x40b3, 0 + compare_var_to_imm 0x40b3, 0 call_if 1, Route119_WeatherInstitute_1F_EventScript_163C41 end @@ -17,7 +17,7 @@ Route119_WeatherInstitute_1F_EventScript_163C4D:: @ 8163C4D lock faceplayer special GetPlayerBigGuyGirlString - compare 0x40b3, 0 + compare_var_to_imm 0x40b3, 0 goto_if_eq Route119_WeatherInstitute_1F_EventScript_163C67 msgbox Route119_WeatherInstitute_1F_Text_19ED22, 4 release diff --git a/data/scripts/maps/Route119_WeatherInstitute_2F.inc b/data/scripts/maps/Route119_WeatherInstitute_2F.inc index 35e547f79..a8fd671bd 100644 --- a/data/scripts/maps/Route119_WeatherInstitute_2F.inc +++ b/data/scripts/maps/Route119_WeatherInstitute_2F.inc @@ -4,9 +4,9 @@ Route119_WeatherInstitute_2F_MapScripts:: @ 8163CC2 Route119_WeatherInstitute_2F_MapScript1_163CC8:: @ 8163CC8 call Route119_WeatherInstitute_2F_EventScript_1A0196 - compare 0x40b3, 0 + compare_var_to_imm 0x40b3, 0 call_if 1, Route119_WeatherInstitute_2F_EventScript_163CE4 - compare 0x40b3, 1 + compare_var_to_imm 0x40b3, 1 call_if 1, Route119_WeatherInstitute_2F_EventScript_163CF0 end @@ -56,7 +56,7 @@ Route119_WeatherInstitute_2F_EventScript_163D45:: @ 8163D45 Route119_WeatherInstitute_2F_EventScript_163D7A:: @ 8163D7A msgbox Route119_WeatherInstitute_2F_Text_19F1CF, 4 countpokemon - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq Route119_WeatherInstitute_2F_EventScript_163DB4 fanfare 370 message Route119_WeatherInstitute_2F_Text_19F267 diff --git a/data/scripts/maps/Route120.inc b/data/scripts/maps/Route120.inc index f0179d317..e736722b5 100644 --- a/data/scripts/maps/Route120.inc +++ b/data/scripts/maps/Route120.inc @@ -10,17 +10,17 @@ Route120_MapScript1_15161E:: @ 815161E end Route120_EventScript_151628:: @ 8151628 - compare 0x8004, 0 + compare_var_to_imm 0x8004, 0 call_if 1, Route120_EventScript_15166B - compare 0x8004, 1 + compare_var_to_imm 0x8004, 1 call_if 1, Route120_EventScript_151672 - compare 0x8004, 2 + compare_var_to_imm 0x8004, 2 call_if 1, Route120_EventScript_151676 - compare 0x8004, 3 + compare_var_to_imm 0x8004, 3 call_if 1, Route120_EventScript_15167A - compare 0x8004, 4 + compare_var_to_imm 0x8004, 4 call_if 1, Route120_EventScript_15167E - compare 0x8004, 5 + compare_var_to_imm 0x8004, 5 call_if 1, Route120_EventScript_151682 return @@ -81,11 +81,11 @@ Route120_MapScript1_1516DF:: @ 81516DF Route120_EventScript_1516EA:: @ 81516EA getplayerxy 0x4000, 0x4001 - compare 0x4001, 14 + compare_var_to_imm 0x4001, 14 goto_if 3, Route120_EventScript_151715 - compare 0x4001, 60 + compare_var_to_imm 0x4001, 60 goto_if 3, Route120_EventScript_151719 - compare 0x4001, 61 + compare_var_to_imm 0x4001, 61 goto_if 4, Route120_EventScript_151711 return @@ -98,9 +98,9 @@ Route120_EventScript_151715:: @ 8151715 return Route120_EventScript_151719:: @ 8151719 - compare 0x4000, 7 + compare_var_to_imm 0x4000, 7 goto_if 3, Route120_EventScript_151735 - compare 0x4000, 19 + compare_var_to_imm 0x4000, 19 goto_if 3, Route120_EventScript_151715 goto Route120_EventScript_151735 end @@ -116,9 +116,9 @@ Route120_EventScript_151739:: @ 8151739 checkflag 2254 goto_if_eq Route120_EventScript_151837 msgbox Route120_Text_1C58F1, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, Route120_EventScript_151841 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, Route120_EventScript_15184A specialval RESULT, GetPlayerTrainerIdOnesDigit switch RESULT @@ -161,7 +161,7 @@ Route120_EventScript_151808:: @ 8151808 Route120_EventScript_151813:: @ 8151813 giveitem 0x8004 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route120_EventScript_1A029B setflag 2254 msgbox Route120_Text_1C5A0B, 4 @@ -187,7 +187,7 @@ Route120_EventScript_151853:: @ 8151853 checkflag 290 goto_if_eq Route120_EventScript_151884 msgbox Route120_Text_171827, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route120_EventScript_151877 goto Route120_EventScript_15189D end @@ -200,7 +200,7 @@ Route120_EventScript_151877:: @ 8151877 Route120_EventScript_151884:: @ 8151884 msgbox Route120_Text_17196F, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route120_EventScript_151877 goto Route120_EventScript_15189D end @@ -208,9 +208,9 @@ Route120_EventScript_151884:: @ 8151884 Route120_EventScript_15189D:: @ 815189D msgbox Route120_Text_1719A0, 4 closebutton - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, Route120_EventScript_15197F - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, Route120_EventScript_15198A move 31, Route120_Movement_1A083F waitmove 0 @@ -293,7 +293,7 @@ Route120_EventScript_1519B3:: @ 81519B3 Route120_EventScript_1519CA:: @ 81519CA trainerbattle 0, OPPONENT_ROBERT_1, 0, Route120_Text_1BF07E, Route120_Text_1BF0A5 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route120_EventScript_1519F1 msgbox Route120_Text_1BF0C3, 6 end @@ -316,7 +316,7 @@ Route120_EventScript_151A1F:: @ 8151A1F Route120_EventScript_151A36:: @ 8151A36 trainerbattle 0, OPPONENT_BRANDON_1, 0, Route120_Text_1BF32B, Route120_Text_1BF36B specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route120_EventScript_151A5D msgbox Route120_Text_1BF38D, 6 end diff --git a/data/scripts/maps/Route121.inc b/data/scripts/maps/Route121.inc index c87774cb8..3af8ff7cf 100644 --- a/data/scripts/maps/Route121.inc +++ b/data/scripts/maps/Route121.inc @@ -74,7 +74,7 @@ Route121_EventScript_151B72:: @ 8151B72 Route121_EventScript_151B89:: @ 8151B89 trainerbattle 0, OPPONENT_WALTER_1, 0, Route121_Text_1BFA1B, Route121_Text_1BFA8C specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route121_EventScript_151BB0 msgbox Route121_Text_1BFA9D, 6 end @@ -102,7 +102,7 @@ Route121_EventScript_151BF9:: @ 8151BF9 Route121_EventScript_151C14:: @ 8151C14 trainerbattle 0, OPPONENT_JESSICA_1, 0, Route121_Text_1BFE51, Route121_Text_1BFE80 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route121_EventScript_151C3B msgbox Route121_Text_1BFEAE, 6 end diff --git a/data/scripts/maps/Route121_SafariZoneEntrance.inc b/data/scripts/maps/Route121_SafariZoneEntrance.inc index 3724e9aeb..efc2ab4fb 100644 --- a/data/scripts/maps/Route121_SafariZoneEntrance.inc +++ b/data/scripts/maps/Route121_SafariZoneEntrance.inc @@ -34,7 +34,7 @@ Route121_SafariZoneEntrance_EventScript_15C35A:: @ 815C35A lock faceplayer msgbox Route121_SafariZoneEntrance_Text_1C3704, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route121_SafariZoneEntrance_EventScript_15C379 msgbox Route121_SafariZoneEntrance_Text_1C373C, 4 release @@ -52,7 +52,7 @@ Route121_SafariZoneEntrance_EventScript_15C383:: @ 815C383 showmoney 0, 0 nop msgbox Route121_SafariZoneEntrance_Text_1C3832, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route121_SafariZoneEntrance_EventScript_15C3B3 msgbox Route121_SafariZoneEntrance_Text_1C3895, 4 goto Route121_SafariZoneEntrance_EventScript_15C46C @@ -60,11 +60,11 @@ Route121_SafariZoneEntrance_EventScript_15C383:: @ 815C383 Route121_SafariZoneEntrance_EventScript_15C3B3:: @ 815C3B3 checkitem ITEM_POKEBLOCK_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route121_SafariZoneEntrance_EventScript_15C450 call Route121_SafariZoneEntrance_EventScript_15C425 checkmoney 0x1f4, 0 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route121_SafariZoneEntrance_EventScript_15C45E msgbox Route121_SafariZoneEntrance_Text_1C38D9, 4 paymoney 0x1f4, 0 @@ -88,10 +88,10 @@ Route121_SafariZoneEntrance_EventScript_15C3B3:: @ 815C3B3 Route121_SafariZoneEntrance_EventScript_15C425:: @ 815C425 countpokemon - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if 5, Route121_SafariZoneEntrance_EventScript_15C44F specialval RESULT, CheckFreePokemonStorageSpace - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route121_SafariZoneEntrance_EventScript_15C44F msgbox Route121_SafariZoneEntrance_Text_1C39A3, 4 goto Route121_SafariZoneEntrance_EventScript_15C46C diff --git a/data/scripts/maps/Route123.inc b/data/scripts/maps/Route123.inc index 395eaa7c3..f4ba11b0d 100644 --- a/data/scripts/maps/Route123.inc +++ b/data/scripts/maps/Route123.inc @@ -13,11 +13,11 @@ Route123_EventScript_151C5D:: @ 8151C5D goto_if_eq Route123_EventScript_151CAC msgbox Route123_Text_171D83, 4 special IsGrassTypeInParty - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route123_EventScript_151CAA msgbox Route123_Text_171DC2, 4 giveitem ITEM_TM19 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route123_EventScript_1A029B setflag 232 msgbox Route123_Text_171E34, 4 @@ -63,7 +63,7 @@ Route123_EventScript_151CFF:: @ 8151CFF Route123_EventScript_151D16:: @ 8151D16 trainerbattle 0, OPPONENT_CAMERON_1, 0, Route123_Text_1C013F, Route123_Text_1C01A3 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route123_EventScript_151D3D msgbox Route123_Text_1C01B1, 6 end @@ -76,7 +76,7 @@ Route123_EventScript_151D3D:: @ 8151D3D Route123_EventScript_151D54:: @ 8151D54 trainerbattle 0, OPPONENT_JACKI_1, 0, Route123_Text_1C028C, Route123_Text_1C0303 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route123_EventScript_151D7B msgbox Route123_Text_1C030F, 6 end diff --git a/data/scripts/maps/Route123_BerryMastersHouse.inc b/data/scripts/maps/Route123_BerryMastersHouse.inc index 4f7bad5f9..4c35b52ec 100644 --- a/data/scripts/maps/Route123_BerryMastersHouse.inc +++ b/data/scripts/maps/Route123_BerryMastersHouse.inc @@ -17,7 +17,7 @@ Route123_BerryMastersHouse_EventScript_1639E9:: @ 81639E9 addvar RESULT, 20 addvar RESULT, 133 giveitem RESULT - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 2253 msgbox Route123_BerryMastersHouse_Text_1C5C66, 4 @@ -25,7 +25,7 @@ Route123_BerryMastersHouse_EventScript_1639E9:: @ 81639E9 addvar RESULT, 20 addvar RESULT, 133 giveitem RESULT - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B msgbox Route123_BerryMastersHouse_Text_1C5C83, 4 release @@ -47,9 +47,9 @@ Route123_BerryMastersHouse_EventScript_163A64:: @ 8163A64 call Route123_BerryMastersHouse_EventScript_1A00F3 lock faceplayer - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route123_BerryMastersHouse_EventScript_163AAD - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_163A9B end @@ -60,17 +60,17 @@ Route123_BerryMastersHouse_EventScript_163A9B:: @ 8163A9B end Route123_BerryMastersHouse_EventScript_163AAD:: @ 8163AAD - compare 0x8004, 0 + compare_var_to_imm 0x8004, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 - compare 0x8004, 1 + compare_var_to_imm 0x8004, 1 goto_if_eq Route123_BerryMastersHouse_EventScript_163B1E - compare 0x8004, 2 + compare_var_to_imm 0x8004, 2 goto_if_eq Route123_BerryMastersHouse_EventScript_163B4F - compare 0x8004, 3 + compare_var_to_imm 0x8004, 3 goto_if_eq Route123_BerryMastersHouse_EventScript_163B80 - compare 0x8004, 4 + compare_var_to_imm 0x8004, 4 goto_if_eq Route123_BerryMastersHouse_EventScript_163BB1 - compare 0x8004, 5 + compare_var_to_imm 0x8004, 5 goto_if_eq Route123_BerryMastersHouse_EventScript_163BE2 end @@ -79,7 +79,7 @@ Route123_BerryMastersHouse_EventScript_163AF0:: @ 8163AF0 random 10 addvar RESULT, 133 giveitem RESULT - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B goto Route123_BerryMastersHouse_EventScript_163C1D release @@ -90,7 +90,7 @@ Route123_BerryMastersHouse_EventScript_163B1E:: @ 8163B1E goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_SPELON_BERRY - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 248 goto Route123_BerryMastersHouse_EventScript_163C1D @@ -101,7 +101,7 @@ Route123_BerryMastersHouse_EventScript_163B4F:: @ 8163B4F goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_PAMTRE_BERRY - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 249 goto Route123_BerryMastersHouse_EventScript_163C1D @@ -112,7 +112,7 @@ Route123_BerryMastersHouse_EventScript_163B80:: @ 8163B80 goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_WATMEL_BERRY - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 250 goto Route123_BerryMastersHouse_EventScript_163C1D @@ -123,7 +123,7 @@ Route123_BerryMastersHouse_EventScript_163BB1:: @ 8163BB1 goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_DURIN_BERRY - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 251 goto Route123_BerryMastersHouse_EventScript_163C1D @@ -134,7 +134,7 @@ Route123_BerryMastersHouse_EventScript_163BE2:: @ 8163BE2 goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_BELUE_BERRY - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 252 goto Route123_BerryMastersHouse_EventScript_163C1D diff --git a/data/scripts/maps/Route124.inc b/data/scripts/maps/Route124.inc index a60b29b99..ef9f0ebed 100644 --- a/data/scripts/maps/Route124.inc +++ b/data/scripts/maps/Route124.inc @@ -24,7 +24,7 @@ Route124_EventScript_151E0F:: @ 8151E0F Route124_EventScript_151E26:: @ 8151E26 trainerbattle 0, OPPONENT_JENNY_1, 0, Route124_Text_1C07B4, Route124_Text_1C07F9 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route124_EventScript_151E4D msgbox Route124_Text_1C080E, 6 end @@ -47,7 +47,7 @@ Route124_EventScript_151E7B:: @ 8151E7B Route124_EventScript_151E92:: @ 8151E92 trainerbattle 4, OPPONENT_RITA_AND_SAM_1, 0, Route124_Text_1C0ABD, Route124_Text_1C0B36, Route124_Text_1C0BC8 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route124_EventScript_151EBD msgbox Route124_Text_1C0B72, 6 end @@ -60,7 +60,7 @@ Route124_EventScript_151EBD:: @ 8151EBD Route124_EventScript_151ED8:: @ 8151ED8 trainerbattle 4, OPPONENT_RITA_AND_SAM_1, 0, Route124_Text_1C0C0E, Route124_Text_1C0C4F, Route124_Text_1C0CE0 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route124_EventScript_151F03 msgbox Route124_Text_1C0C7F, 6 end diff --git a/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc b/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc index b3e91e43c..1deeb9e34 100644 --- a/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc +++ b/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc @@ -23,7 +23,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_163E20:: @ 8163E20 Route124_DivingTreasureHuntersHouse_EventScript_163E2E:: @ 8163E2E call Route124_DivingTreasureHuntersHouse_EventScript_163E44 - compare 0x4001, 0 + compare_var_to_imm 0x4001, 0 goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_164329 goto Route124_DivingTreasureHuntersHouse_EventScript_163EA2 end @@ -31,16 +31,16 @@ Route124_DivingTreasureHuntersHouse_EventScript_163E2E:: @ 8163E2E Route124_DivingTreasureHuntersHouse_EventScript_163E44:: @ 8163E44 setvar 0x4001, 0 checkitem ITEM_RED_SHARD, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, Route124_DivingTreasureHuntersHouse_EventScript_163E8A checkitem ITEM_YELLOW_SHARD, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, Route124_DivingTreasureHuntersHouse_EventScript_163E90 checkitem ITEM_BLUE_SHARD, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, Route124_DivingTreasureHuntersHouse_EventScript_163E96 checkitem ITEM_GREEN_SHARD, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, Route124_DivingTreasureHuntersHouse_EventScript_163E9C return @@ -247,13 +247,13 @@ Route124_DivingTreasureHuntersHouse_EventScript_164292:: @ 8164292 bufferitem 0, 0x8008 bufferitem 1, 0x8009 msgbox Route124_DivingTreasureHuntersHouse_Text_19F5E0, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_16431F checkitemspace 0x8009, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_1642D3 checkitem 0x8008, 2 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_1642D3 goto Route124_DivingTreasureHuntersHouse_EventScript_164315 end @@ -263,10 +263,10 @@ Route124_DivingTreasureHuntersHouse_EventScript_1642D3:: @ 81642D3 giveitem 0x8009 msgbox Route124_DivingTreasureHuntersHouse_Text_19F606, 4 call Route124_DivingTreasureHuntersHouse_EventScript_163E44 - compare 0x4001, 0 + compare_var_to_imm 0x4001, 0 goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_164333 msgbox Route124_DivingTreasureHuntersHouse_Text_19F629, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_163EB0 goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end diff --git a/data/scripts/maps/Route125.inc b/data/scripts/maps/Route125.inc index 045a55a11..7d5fc0376 100644 --- a/data/scripts/maps/Route125.inc +++ b/data/scripts/maps/Route125.inc @@ -30,7 +30,7 @@ Route125_EventScript_151F73:: @ 8151F73 Route125_EventScript_151F8A:: @ 8151F8A trainerbattle 0, OPPONENT_ERNEST_1, 0, Route125_Text_1C11AF, Route125_Text_1C11ED specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route125_EventScript_151FB1 msgbox Route125_Text_1C1208, 6 end diff --git a/data/scripts/maps/Route128.inc b/data/scripts/maps/Route128.inc index 7db99f7b3..10bb0a1cc 100644 --- a/data/scripts/maps/Route128.inc +++ b/data/scripts/maps/Route128.inc @@ -183,7 +183,7 @@ Route128_Movement_1522A1:: @ 81522A1 Route128_EventScript_1522A4:: @ 81522A4 trainerbattle 0, OPPONENT_ISAIAH_1, 0, Route128_Text_1C1C67, Route128_Text_1C1C95 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route128_EventScript_1522CB msgbox Route128_Text_1C1CC3, 6 end @@ -196,7 +196,7 @@ Route128_EventScript_1522CB:: @ 81522CB Route128_EventScript_1522E2:: @ 81522E2 trainerbattle 0, OPPONENT_KATELYN_1, 0, Route128_Text_1C1DB0, Route128_Text_1C1E25 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route128_EventScript_152309 msgbox Route128_Text_1C1E4A, 6 end diff --git a/data/scripts/maps/Route130.inc b/data/scripts/maps/Route130.inc index 2c93c1bd6..83b972dbf 100644 --- a/data/scripts/maps/Route130.inc +++ b/data/scripts/maps/Route130.inc @@ -4,7 +4,7 @@ Route130_MapScripts:: @ 81523C2 Route130_MapScript1_1523C8:: @ 81523C8 specialval RESULT, IsMirageIslandPresent - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route130_EventScript_15240C setflag 17 setflag 18 diff --git a/data/scripts/maps/RustboroCity.inc b/data/scripts/maps/RustboroCity.inc index 13a4ce265..1a2afe16d 100644 --- a/data/scripts/maps/RustboroCity.inc +++ b/data/scripts/maps/RustboroCity.inc @@ -363,13 +363,13 @@ RustboroCity_EventScript_14C644:: @ 814C644 end RustboroCity_EventScript_14C650:: @ 814C650 - compare 0x4001, 0 + compare_var_to_imm 0x4001, 0 call_if 1, RustboroCity_EventScript_14C691 - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 call_if 1, RustboroCity_EventScript_14C6BD - compare 0x4001, 2 + compare_var_to_imm 0x4001, 2 call_if 1, RustboroCity_EventScript_14C6E9 - compare 0x4001, 3 + compare_var_to_imm 0x4001, 3 call_if 1, RustboroCity_EventScript_14C715 setflag 159 setvar 0x405a, 3 @@ -457,19 +457,19 @@ RustboroCity_EventScript_14C771:: @ 814C771 end RustboroCity_EventScript_14C77D:: @ 814C77D - compare 0x4001, 0 + compare_var_to_imm 0x4001, 0 call_if 1, RustboroCity_EventScript_14C7FE - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 call_if 1, RustboroCity_EventScript_14C82A - compare 0x4001, 2 + compare_var_to_imm 0x4001, 2 call_if 1, RustboroCity_EventScript_14C856 - compare 0x4001, 3 + compare_var_to_imm 0x4001, 3 call_if 1, RustboroCity_EventScript_14C882 - compare 0x4001, 4 + compare_var_to_imm 0x4001, 4 call_if 1, RustboroCity_EventScript_14C8B8 msgbox RustboroCity_Text_166FB4, 4 giveitem ITEM_GREAT_BALL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, RustboroCity_EventScript_14C7F5 msgbox RustboroCity_Text_16707F, 4 closebutton @@ -552,9 +552,9 @@ RustboroCity_EventScript_14C8DA:: @ 814C8DA checkflag 288 goto_if_eq RustboroCity_EventScript_14C917 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq RustboroCity_EventScript_14C8FD - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq RustboroCity_EventScript_14C90A end @@ -572,9 +572,9 @@ RustboroCity_EventScript_14C90A:: @ 814C90A RustboroCity_EventScript_14C917:: @ 814C917 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq RustboroCity_EventScript_14C92F - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq RustboroCity_EventScript_14C939 end diff --git a/data/scripts/maps/RustboroCity_DevonCorp_2F.inc b/data/scripts/maps/RustboroCity_DevonCorp_2F.inc index 0c604c513..352850d9e 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_2F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_2F.inc @@ -3,7 +3,7 @@ RustboroCity_DevonCorp_2F_MapScripts:: @ 81574CA .byte 0 RustboroCity_DevonCorp_2F_MapScript1_1574D0:: @ 81574D0 - compare 0x40c4, 1 + compare_var_to_imm 0x40c4, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC end @@ -14,7 +14,7 @@ RustboroCity_DevonCorp_2F_EventScript_1574DC:: @ 81574DC RustboroCity_DevonCorp_2F_EventScript_1574E2:: @ 81574E2 lock faceplayer - compare 0x40c4, 1 + compare_var_to_imm 0x40c4, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC msgbox RustboroCity_DevonCorp_2F_Text_182B81, 4 release @@ -23,7 +23,7 @@ RustboroCity_DevonCorp_2F_EventScript_1574E2:: @ 81574E2 RustboroCity_DevonCorp_2F_EventScript_1574F9:: @ 81574F9 lock faceplayer - compare 0x40c4, 1 + compare_var_to_imm 0x40c4, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC checkflag 287 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157519 @@ -39,7 +39,7 @@ RustboroCity_DevonCorp_2F_EventScript_157519:: @ 8157519 RustboroCity_DevonCorp_2F_EventScript_157523:: @ 8157523 lock faceplayer - compare 0x40c4, 1 + compare_var_to_imm 0x40c4, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC checkflag 188 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157543 @@ -55,7 +55,7 @@ RustboroCity_DevonCorp_2F_EventScript_157543:: @ 8157543 RustboroCity_DevonCorp_2F_EventScript_15754D:: @ 815754D lock faceplayer - compare 0x40c4, 1 + compare_var_to_imm 0x40c4, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC msgbox RustboroCity_DevonCorp_2F_Text_182E6B, 4 release @@ -64,16 +64,16 @@ RustboroCity_DevonCorp_2F_EventScript_15754D:: @ 815754D RustboroCity_DevonCorp_2F_EventScript_157564:: @ 8157564 lock faceplayer - compare 0x40c4, 2 + compare_var_to_imm 0x40c4, 2 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_15764A - compare 0x40c4, 1 + compare_var_to_imm 0x40c4, 1 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157640 msgbox RustboroCity_DevonCorp_2F_Text_182ED5, 4 checkitem ITEM_ROOT_FOSSIL, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_1575A6 checkitem ITEM_CLAW_FOSSIL, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_1575EE release end @@ -86,7 +86,7 @@ RustboroCity_DevonCorp_2F_EventScript_1575A6:: @ 81575A6 move 5, RustboroCity_DevonCorp_2F_Movement_1A0835 waitmove 0 msgbox RustboroCity_DevonCorp_2F_Text_182F35, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157636 bufferitem 0, ITEM_ROOT_FOSSIL msgbox RustboroCity_DevonCorp_2F_Text_183023, 4 @@ -104,7 +104,7 @@ RustboroCity_DevonCorp_2F_EventScript_1575EE:: @ 81575EE move 5, RustboroCity_DevonCorp_2F_Movement_1A0835 waitmove 0 msgbox RustboroCity_DevonCorp_2F_Text_182F35, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157636 bufferitem 0, ITEM_CLAW_FOSSIL msgbox RustboroCity_DevonCorp_2F_Text_183023, 4 @@ -125,9 +125,9 @@ RustboroCity_DevonCorp_2F_EventScript_157640:: @ 8157640 end RustboroCity_DevonCorp_2F_EventScript_15764A:: @ 815764A - compare 0x40c5, 1 + compare_var_to_imm 0x40c5, 1 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157661 - compare 0x40c5, 2 + compare_var_to_imm 0x40c5, 2 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_1576B4 end @@ -135,7 +135,7 @@ RustboroCity_DevonCorp_2F_EventScript_157661:: @ 8157661 bufferpoke 1, SPECIES_LILEEP msgbox RustboroCity_DevonCorp_2F_Text_183124, 4 countpokemon - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157707 copyvar 0x8004, RESULT setvar 0x40c4, 0 @@ -146,7 +146,7 @@ RustboroCity_DevonCorp_2F_EventScript_157661:: @ 8157661 waittext givepokemon SPECIES_LILEEP, 20, ITEM_NONE, 0x0, 0x0, 0 msgbox RustboroCity_DevonCorp_2F_Text_1A1102, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1A0678 release end @@ -155,7 +155,7 @@ RustboroCity_DevonCorp_2F_EventScript_1576B4:: @ 81576B4 bufferpoke 1, SPECIES_ANORITH msgbox RustboroCity_DevonCorp_2F_Text_183124, 4 countpokemon - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157707 copyvar 0x8004, RESULT setvar 0x40c4, 0 @@ -166,7 +166,7 @@ RustboroCity_DevonCorp_2F_EventScript_1576B4:: @ 81576B4 waittext givepokemon SPECIES_ANORITH, 20, ITEM_NONE, 0x0, 0x0, 0 msgbox RustboroCity_DevonCorp_2F_Text_1A1102, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1A0678 release end diff --git a/data/scripts/maps/RustboroCity_DevonCorp_3F.inc b/data/scripts/maps/RustboroCity_DevonCorp_3F.inc index fe39af9c4..78feb0ce5 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_3F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_3F.inc @@ -5,7 +5,7 @@ RustboroCity_DevonCorp_3F_MapScripts:: @ 8157711 .byte 0 RustboroCity_DevonCorp_3F_MapScript1_157721:: @ 8157721 - compare 0x408f, 0 + compare_var_to_imm 0x408f, 0 call_if 1, RustboroCity_DevonCorp_3F_EventScript_15772D end @@ -160,7 +160,7 @@ RustboroCity_DevonCorp_3F_EventScript_15783B:: @ 815783B RustboroCity_DevonCorp_3F_EventScript_157864:: @ 8157864 msgbox RustboroCity_DevonCorp_3F_Text_18353E, 4 giveitem ITEM_EXP_SHARE - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq RustboroCity_DevonCorp_3F_EventScript_1A029B setflag 272 msgbox RustboroCity_DevonCorp_3F_Text_1835B3, 4 diff --git a/data/scripts/maps/RustboroCity_Flat2_2F.inc b/data/scripts/maps/RustboroCity_Flat2_2F.inc index 0dfec5cfa..fefc67d0f 100644 --- a/data/scripts/maps/RustboroCity_Flat2_2F.inc +++ b/data/scripts/maps/RustboroCity_Flat2_2F.inc @@ -12,7 +12,7 @@ RustboroCity_Flat2_2F_EventScript_157DA0:: @ 8157DA0 goto_if_eq RustboroCity_Flat2_2F_EventScript_157DCF msgbox RustboroCity_Flat2_2F_Text_185461, 4 giveitem ITEM_PREMIER_BALL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq RustboroCity_Flat2_2F_EventScript_1A029B setflag 213 release diff --git a/data/scripts/maps/RustboroCity_Gym.inc b/data/scripts/maps/RustboroCity_Gym.inc index 6bb33b4dc..353ac8fe3 100644 --- a/data/scripts/maps/RustboroCity_Gym.inc +++ b/data/scripts/maps/RustboroCity_Gym.inc @@ -20,14 +20,14 @@ RustboroCity_Gym_EventScript_1578FE:: @ 81578FE addvar 0x4085, 1 setvar 0x8008, 1 call RustboroCity_Gym_EventScript_1A01C0 - compare 0x4085, 6 + compare_var_to_imm 0x4085, 6 call_if 1, RustboroCity_Gym_EventScript_1A00FB goto RustboroCity_Gym_EventScript_15793C end RustboroCity_Gym_EventScript_15793C:: @ 815793C giveitem ITEM_TM39 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq RustboroCity_Gym_EventScript_1A029B setflag 165 msgbox RustboroCity_Gym_Text_184170, 4 diff --git a/data/scripts/maps/RustboroCity_House1.inc b/data/scripts/maps/RustboroCity_House1.inc index e45bf2080..0dd47d2d3 100644 --- a/data/scripts/maps/RustboroCity_House1.inc +++ b/data/scripts/maps/RustboroCity_House1.inc @@ -11,17 +11,17 @@ RustboroCity_House1_EventScript_157C7D:: @ 8157C7D specialval RESULT, sub_804D89C copyvar 0x8009, RESULT msgbox RustboroCity_House1_Text_184EBA, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq RustboroCity_House1_EventScript_157CFB special sub_80F9A0C waitstate copyvar 0x800a, 0x8004 - compare 0x8004, 255 + compare_var_to_imm 0x8004, 255 goto_if_eq RustboroCity_House1_EventScript_157CFB copyvar 0x8005, 0x800a specialval RESULT, sub_804DB2C copyvar 0x800b, RESULT - comparevars RESULT, 0x8009 + compare_var_to_var RESULT, 0x8009 goto_if 5, RustboroCity_House1_EventScript_157D05 copyvar 0x8004, 0x8008 copyvar 0x8005, 0x800a diff --git a/data/scripts/maps/RustboroCity_PokemonSchool.inc b/data/scripts/maps/RustboroCity_PokemonSchool.inc index e5a9622fb..5f4de010e 100644 --- a/data/scripts/maps/RustboroCity_PokemonSchool.inc +++ b/data/scripts/maps/RustboroCity_PokemonSchool.inc @@ -79,13 +79,13 @@ RustboroCity_PokemonSchool_EventScript_157ACE:: @ 8157ACE faceplayer checkflag 275 goto_if_eq RustboroCity_PokemonSchool_EventScript_157B34 - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, RustboroCity_PokemonSchool_EventScript_157B1E - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, RustboroCity_PokemonSchool_EventScript_157B29 msgbox RustboroCity_PokemonSchool_Text_1846A2, 4 giveitem ITEM_QUICK_CLAW - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq RustboroCity_PokemonSchool_EventScript_1A029B closebutton move LAST_TALKED, RustboroCity_PokemonSchool_Movement_1A0845 diff --git a/data/scripts/maps/RusturfTunnel.inc b/data/scripts/maps/RusturfTunnel.inc index bcc612511..b4546e27a 100644 --- a/data/scripts/maps/RusturfTunnel.inc +++ b/data/scripts/maps/RusturfTunnel.inc @@ -10,7 +10,7 @@ RusturfTunnel_MapScript2_15C750:: @ 815C750 RusturfTunnel_MapScript1_15C762:: @ 815C762 call RusturfTunnel_EventScript_1A0196 - compare 0x409a, 2 + compare_var_to_imm 0x409a, 2 call_if 1, RusturfTunnel_EventScript_15C773 end @@ -52,35 +52,35 @@ RusturfTunnel_EventScript_15C7BC:: @ 815C7BC RusturfTunnel_EventScript_15C7D1:: @ 815C7D1 lockall - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 call_if 1, RusturfTunnel_EventScript_15C8CA - compare 0x4001, 2 + compare_var_to_imm 0x4001, 2 call_if 1, RusturfTunnel_EventScript_15C8DF - compare 0x4001, 3 + compare_var_to_imm 0x4001, 3 call_if 1, RusturfTunnel_EventScript_15C8EA call RusturfTunnel_EventScript_15C92D msgbox RusturfTunnel_Text_19461D, 4 - compare 0x4001, 2 + compare_var_to_imm 0x4001, 2 call_if 1, RusturfTunnel_EventScript_15C8EB - compare 0x4001, 3 + compare_var_to_imm 0x4001, 3 call_if 1, RusturfTunnel_EventScript_15C8EB giveitem ITEM_HM04 setflag 106 msgbox RusturfTunnel_Text_194693, 4 closebutton - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 call_if 1, RusturfTunnel_EventScript_15C880 - compare 0x4001, 2 + compare_var_to_imm 0x4001, 2 call_if 1, RusturfTunnel_EventScript_15C892 - compare 0x4001, 3 + compare_var_to_imm 0x4001, 3 call_if 1, RusturfTunnel_EventScript_15C8AE msgbox RusturfTunnel_Text_194706, 4 closebutton - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 call_if 1, RusturfTunnel_EventScript_15C8F7 - compare 0x4001, 2 + compare_var_to_imm 0x4001, 2 call_if 1, RusturfTunnel_EventScript_15C909 - compare 0x4001, 3 + compare_var_to_imm 0x4001, 3 call_if 1, RusturfTunnel_EventScript_15C91B call RusturfTunnel_EventScript_1A0442 releaseall diff --git a/data/scripts/maps/SSTidalCorridor.inc b/data/scripts/maps/SSTidalCorridor.inc index d076510dc..da9d31cca 100644 --- a/data/scripts/maps/SSTidalCorridor.inc +++ b/data/scripts/maps/SSTidalCorridor.inc @@ -41,9 +41,9 @@ SSTidalRooms_EventScript_15FCF9:: @ 815FCF9 return gUnknown_0815FD0D:: @ 815FD0D - compare 0x40B4, 2 + compare_var_to_imm 0x40B4, 2 goto_if_eq SSTidalCorridor_EventScript_15FD24 - compare 0x40B4, 7 + compare_var_to_imm 0x40B4, 7 goto_if_eq SSTidalCorridor_EventScript_15FD3A end @@ -113,9 +113,9 @@ SSTidalCorridor_EventScript_15FDCD:: @ 815FDCD SSTidalCorridor_EventScript_15FDD6:: @ 815FDD6 lock faceplayer - compare 0x40b4, 4 + compare_var_to_imm 0x40b4, 4 goto_if_eq SSTidalCorridor_EventScript_15FDF8 - compare 0x40b4, 8 + compare_var_to_imm 0x40b4, 8 goto_if_eq SSTidalCorridor_EventScript_15FE17 msgbox SSTidalCorridor_Text_19913B, 4 release @@ -147,9 +147,9 @@ SSTidalCorridor_EventScript_15FE36:: @ 815FE36 SSTidalCorridor_EventScript_15FE3A:: @ 815FE3A lockall - compare 0x40b4, 2 + compare_var_to_imm 0x40b4, 2 goto_if_eq SSTidalCorridor_EventScript_15FE5B - compare 0x40b4, 7 + compare_var_to_imm 0x40b4, 7 goto_if_eq SSTidalCorridor_EventScript_15FE5B msgbox SSTidalCorridor_Text_199268, 4 releaseall diff --git a/data/scripts/maps/SSTidalRooms.inc b/data/scripts/maps/SSTidalRooms.inc index aa84b6b48..f9e815d1f 100644 --- a/data/scripts/maps/SSTidalRooms.inc +++ b/data/scripts/maps/SSTidalRooms.inc @@ -8,7 +8,7 @@ SSTidalRooms_EventScript_15FF06:: @ 815FF06 goto_if_eq SSTidalRooms_EventScript_15FF3D msgbox SSTidalRooms_Text_199B65, 4 giveitem ITEM_TM49 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SSTidalRooms_EventScript_1A029B setflag 260 msgbox SSTidalRooms_Text_199C1A, 4 diff --git a/data/scripts/maps/SafariZone_Southeast.inc b/data/scripts/maps/SafariZone_Southeast.inc index 9005bef3b..8cc342f88 100644 --- a/data/scripts/maps/SafariZone_Southeast.inc +++ b/data/scripts/maps/SafariZone_Southeast.inc @@ -20,7 +20,7 @@ SafariZone_Southeast_EventScript_16004B:: @ 816004B end SafariZone_Southeast_MapScript1_160073:: @ 8160073 - compare 0x40a4, 2 + compare_var_to_imm 0x40a4, 2 call_if 1, SafariZone_Southeast_EventScript_16007F end @@ -52,10 +52,10 @@ SafariZone_Southeast_EventScript_16009E:: @ 816009E SafariZone_Southeast_EventScript_1600A7:: @ 81600A7 lock faceplayer - compare 0x4001, 0 + compare_var_to_imm 0x4001, 0 goto_if_eq SafariZone_Southeast_EventScript_1600D1 msgbox SafariZone_Southeast_Text_1C3A56, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SafariZone_Southeast_EventScript_1600E0 msgbox SafariZone_Southeast_Text_1C3A9C, 4 release diff --git a/data/scripts/maps/SealedChamber_InnerRoom.inc b/data/scripts/maps/SealedChamber_InnerRoom.inc index 091db022c..2650f4ab5 100644 --- a/data/scripts/maps/SealedChamber_InnerRoom.inc +++ b/data/scripts/maps/SealedChamber_InnerRoom.inc @@ -9,7 +9,7 @@ SealedChamber_InnerRoom_EventScript_15F1E8:: @ 815F1E8 checkflag 228 goto_if_eq SealedChamber_InnerRoom_EventScript_15F247 specialval RESULT, CheckRelicanthWailord - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SealedChamber_InnerRoom_EventScript_15F247 fadeout 0 playsfx 49 diff --git a/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc b/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc index dc2b107e3..bad7397c0 100644 --- a/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc @@ -23,24 +23,24 @@ ShoalCave_LowTideEntranceRoom_EventScript_15E076:: @ 815E076 checkflag 2143 call_if 1, ShoalCave_LowTideEntranceRoom_EventScript_15E176 checkitem ITEM_SHOAL_SALT, 4 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E138 checkitem ITEM_SHOAL_SHELL, 4 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E138 msgbox ShoalCave_LowTideEntranceRoom_Text_1C6793, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E16C checkitemspace ITEM_SHELL_BELL, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, ShoalCave_LowTideEntranceRoom_EventScript_15E106 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E12E msgbox ShoalCave_LowTideEntranceRoom_Text_1C6808, 4 removeitem ITEM_SHOAL_SALT, 4 removeitem ITEM_SHOAL_SHELL, 4 giveitem ITEM_SHELL_BELL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_1A029B msgbox ShoalCave_LowTideEntranceRoom_Text_1C688E, 4 setflag 2 @@ -49,13 +49,13 @@ ShoalCave_LowTideEntranceRoom_EventScript_15E076:: @ 815E076 ShoalCave_LowTideEntranceRoom_EventScript_15E106:: @ 815E106 checkitem ITEM_SHOAL_SALT, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E117 return ShoalCave_LowTideEntranceRoom_EventScript_15E117:: @ 815E117 checkitem ITEM_SHOAL_SHELL, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E128 return @@ -70,10 +70,10 @@ ShoalCave_LowTideEntranceRoom_EventScript_15E12E:: @ 815E12E ShoalCave_LowTideEntranceRoom_EventScript_15E138:: @ 815E138 checkitem ITEM_SHOAL_SALT, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E162 checkitem ITEM_SHOAL_SHELL, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E162 msgbox ShoalCave_LowTideEntranceRoom_Text_1C6668, 4 release diff --git a/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc b/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc index 05fc6a315..8dec3b212 100644 --- a/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc @@ -73,7 +73,7 @@ ShoalCave_LowTideInnerRoom_EventScript_15E257:: @ 815E257 checkflag 956 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E289 giveitem ITEM_SHOAL_SHELL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 41, 20, 859, 0 special DrawWholeMapView @@ -91,7 +91,7 @@ ShoalCave_LowTideInnerRoom_EventScript_15E293:: @ 815E293 checkflag 957 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E289 giveitem ITEM_SHOAL_SHELL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 41, 10, 859, 0 special DrawWholeMapView @@ -104,7 +104,7 @@ ShoalCave_LowTideInnerRoom_EventScript_15E2C5:: @ 815E2C5 checkflag 958 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E289 giveitem ITEM_SHOAL_SHELL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 6, 9, 859, 0 special DrawWholeMapView @@ -117,7 +117,7 @@ ShoalCave_LowTideInnerRoom_EventScript_15E2F7:: @ 815E2F7 checkflag 959 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E289 giveitem ITEM_SHOAL_SHELL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 16, 13, 859, 0 special DrawWholeMapView @@ -130,7 +130,7 @@ ShoalCave_LowTideInnerRoom_EventScript_15E329:: @ 815E329 checkflag 952 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E35B giveitem ITEM_SHOAL_SALT - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 31, 8, 858, 0 special DrawWholeMapView @@ -148,7 +148,7 @@ ShoalCave_LowTideInnerRoom_EventScript_15E365:: @ 815E365 checkflag 953 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E35B giveitem ITEM_SHOAL_SALT - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 14, 26, 858, 0 special DrawWholeMapView diff --git a/data/scripts/maps/ShoalCave_LowTideLowerRoom.inc b/data/scripts/maps/ShoalCave_LowTideLowerRoom.inc index db5779efe..01719a9cf 100644 --- a/data/scripts/maps/ShoalCave_LowTideLowerRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideLowerRoom.inc @@ -20,7 +20,7 @@ ShoalCave_LowTideLowerRoom_EventScript_15E413:: @ 815E413 checkflag 955 goto_if_eq ShoalCave_LowTideLowerRoom_EventScript_15E445 giveitem ITEM_SHOAL_SALT - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq ShoalCave_LowTideLowerRoom_EventScript_1A029B setmaptile 18, 2, 858, 0 special DrawWholeMapView @@ -40,7 +40,7 @@ ShoalCave_LowTideLowerRoom_EventScript_15E44F:: @ 815E44F goto_if_eq ShoalCave_LowTideLowerRoom_EventScript_15E47E msgbox ShoalCave_LowTideLowerRoom_Text_198200, 4 giveitem ITEM_FOCUS_BAND - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq ShoalCave_LowTideLowerRoom_EventScript_1A029B setflag 283 release diff --git a/data/scripts/maps/ShoalCave_LowTideStairsRoom.inc b/data/scripts/maps/ShoalCave_LowTideStairsRoom.inc index bffb7bd49..1c5cde842 100644 --- a/data/scripts/maps/ShoalCave_LowTideStairsRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideStairsRoom.inc @@ -20,7 +20,7 @@ ShoalCave_LowTideStairsRoom_EventScript_15E3B7:: @ 815E3B7 checkflag 954 goto_if_eq ShoalCave_LowTideStairsRoom_EventScript_15E3E9 giveitem ITEM_SHOAL_SALT - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq ShoalCave_LowTideStairsRoom_EventScript_1A029B setmaptile 11, 11, 858, 0 special DrawWholeMapView diff --git a/data/scripts/maps/SlateportCity.inc b/data/scripts/maps/SlateportCity.inc index 4b11b2f8d..c43ddfaee 100644 --- a/data/scripts/maps/SlateportCity.inc +++ b/data/scripts/maps/SlateportCity.inc @@ -12,7 +12,7 @@ SlateportCity_MapScript1_14BA3C:: @ 814BA3C .endif setvar 0x40aa, 0 call SlateportCity_EventScript_14BA5C - compare 0x4058, 1 + compare_var_to_imm 0x4058, 1 call_if 1, SlateportCity_EventScript_14BA68 end @@ -67,10 +67,10 @@ SlateportCity_EventScript_14BAE0:: @ 814BAE0 bufferfirstpoke 0 msgbox SlateportCity_Text_164682, 4 specialval RESULT, LeadMonHasEffortRibbon - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, SlateportCity_EventScript_14BB35 specialval RESULT, ScrSpecial_AreLeadMonEVsMaxedOut - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, SlateportCity_EventScript_14BB2B msgbox SlateportCity_Text_164691, 4 fanfare 370 @@ -95,7 +95,7 @@ SlateportCity_EventScript_14BB35:: @ 814BB35 SlateportCity_EventScript_14BB3F:: @ 814BB3F lock faceplayer - compare 0x4058, 1 + compare_var_to_imm 0x4058, 1 call_if 1, SlateportCity_EventScript_14BB56 msgbox SlateportCity_Text_164814, 4 release @@ -109,7 +109,7 @@ SlateportCity_EventScript_14BB56:: @ 814BB56 SlateportCity_EventScript_14BB60:: @ 814BB60 lock faceplayer - compare 0x4058, 1 + compare_var_to_imm 0x4058, 1 call_if 1, SlateportCity_EventScript_14BB77 msgbox SlateportCity_Text_1648A0, 4 release @@ -123,7 +123,7 @@ SlateportCity_EventScript_14BB77:: @ 814BB77 SlateportCity_EventScript_14BB81:: @ 814BB81 lock faceplayer - compare 0x4058, 1 + compare_var_to_imm 0x4058, 1 call_if 1, SlateportCity_EventScript_14BBA1 checkflag 96 goto_if_eq SlateportCity_EventScript_14BBAB @@ -144,7 +144,7 @@ SlateportCity_EventScript_14BBAB:: @ 814BBAB SlateportCity_EventScript_14BBB5:: @ 814BBB5 lock faceplayer - compare 0x4058, 1 + compare_var_to_imm 0x4058, 1 call_if 1, SlateportCity_EventScript_14BBCC msgbox SlateportCity_Text_164A30, 4 release @@ -156,7 +156,7 @@ SlateportCity_EventScript_14BBCC:: @ 814BBCC end SlateportCity_EventScript_14BBD6:: @ 814BBD6 - compare 0x4058, 1 + compare_var_to_imm 0x4058, 1 goto_if_eq SlateportCity_EventScript_14BBEA msgbox SlateportCity_Text_164AA9, 2 end @@ -168,7 +168,7 @@ SlateportCity_EventScript_14BBEA:: @ 814BBEA SlateportCity_EventScript_14BBF3:: @ 814BBF3 lock faceplayer - compare 0x4058, 1 + compare_var_to_imm 0x4058, 1 call_if 1, SlateportCity_EventScript_14BC0A msgbox SlateportCity_Text_164B34, 4 release @@ -253,7 +253,7 @@ SlateportCity_EventScript_14BCAF:: @ 814BCAF SlateportCity_EventScript_14BCB8:: @ 814BCB8 lock faceplayer - compare 0x4058, 1 + compare_var_to_imm 0x4058, 1 call_if 1, SlateportCity_EventScript_14BCCF msgbox SlateportCity_Text_164F9E, 4 release @@ -288,9 +288,9 @@ SlateportCity_EventScript_14BD06:: @ 814BD06 lock faceplayer msgbox SlateportCity_Text_1650F1, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, SlateportCity_EventScript_14BD28 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, SlateportCity_EventScript_14BD31 release end diff --git a/data/scripts/maps/SlateportCity_ContestHall.inc b/data/scripts/maps/SlateportCity_ContestHall.inc index b2963098c..d30089fbb 100644 --- a/data/scripts/maps/SlateportCity_ContestHall.inc +++ b/data/scripts/maps/SlateportCity_ContestHall.inc @@ -16,7 +16,7 @@ SlateportCity_ContestHall_EventScript_15555E:: @ 815555E goto_if_eq SlateportCity_ContestHall_EventScript_155595 msgbox SlateportCity_ContestHall_Text_17CCE2, 4 giveitem ITEM_TM41 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_ContestHall_EventScript_1A029B setflag 265 msgbox SlateportCity_ContestHall_Text_17CE28, 4 diff --git a/data/scripts/maps/SlateportCity_Harbor.inc b/data/scripts/maps/SlateportCity_Harbor.inc index 33a99b2a4..be1504415 100644 --- a/data/scripts/maps/SlateportCity_Harbor.inc +++ b/data/scripts/maps/SlateportCity_Harbor.inc @@ -5,7 +5,7 @@ SlateportCity_Harbor_MapScripts:: @ 8155F5D SlateportCity_Harbor_MapScript1_155F63:: @ 8155F63 warp6 SlateportCity, 255, 28, 13 setvar 0x4001, 0 - compare 0x40a0, 1 + compare_var_to_imm 0x40a0, 1 call_if 1, SlateportCity_Harbor_EventScript_155F89 checkflag 2052 call_if 1, SlateportCity_Harbor_EventScript_155F85 @@ -63,13 +63,13 @@ SlateportCity_Harbor_EventScript_155FD5:: @ 8155FD5 disappear 7 disappear 8 setvar 0x40a0, 2 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, SlateportCity_Harbor_EventScript_15605C - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, SlateportCity_Harbor_EventScript_156071 - compare 0x8008, 2 + compare_var_to_imm 0x8008, 2 call_if 1, SlateportCity_Harbor_EventScript_156086 - compare 0x8008, 3 + compare_var_to_imm 0x8008, 3 call_if 1, SlateportCity_Harbor_EventScript_156086 msgbox SlateportCity_Harbor_Text_17FE60, 4 closebutton @@ -168,7 +168,7 @@ SlateportCity_Harbor_EventScript_1560C4:: @ 81560C4 SlateportCity_Harbor_EventScript_1560D9:: @ 81560D9 msgbox SlateportCity_Harbor_Text_17FA73, 4 checkitem ITEM_SS_TICKET, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_156135 message SlateportCity_Harbor_Text_17FB0A waittext @@ -191,7 +191,7 @@ SlateportCity_Harbor_EventScript_156135:: @ 8156135 SlateportCity_Harbor_EventScript_15613F:: @ 815613F msgbox SlateportCity_Harbor_Text_17FB81, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_15618A setvar 0x40b4, 1 call SlateportCity_Harbor_EventScript_156196 @@ -202,7 +202,7 @@ SlateportCity_Harbor_EventScript_15613F:: @ 815613F SlateportCity_Harbor_EventScript_156167:: @ 8156167 msgbox SlateportCity_Harbor_Text_17FB9C, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_15618A call SlateportCity_Harbor_EventScript_156196 warp BattleTower_Outside, 255, 19, 23 @@ -223,9 +223,9 @@ SlateportCity_Harbor_EventScript_156196:: @ 8156196 waitmove 0 pause 30 spriteinvisible LAST_TALKED, 9, 8 - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, SlateportCity_Harbor_EventScript_1561EF - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, SlateportCity_Harbor_EventScript_1561E4 pause 30 spriteinvisible 255, 0, 0 @@ -274,7 +274,7 @@ SlateportCity_Harbor_EventScript_156211:: @ 8156211 goto_if_eq SlateportCity_Harbor_EventScript_156265 checkflag 112 goto_if_eq SlateportCity_Harbor_EventScript_156258 - compare 0x40a0, 2 + compare_var_to_imm 0x40a0, 2 goto_if_eq SlateportCity_Harbor_EventScript_15624E msgbox SlateportCity_Harbor_Text_17FD1C, 4 closebutton @@ -300,10 +300,10 @@ SlateportCity_Harbor_EventScript_156265:: @ 8156265 end SlateportCity_Harbor_EventScript_15626F:: @ 815626F - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 goto_if_eq SlateportCity_Harbor_EventScript_156380 checkitem ITEM_SCANNER, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_Harbor_EventScript_1562A7 checkflag 2052 goto_if_eq SlateportCity_Harbor_EventScript_15629D @@ -333,10 +333,10 @@ SlateportCity_Harbor_EventScript_1562B3:: @ 81562B3 SlateportCity_Harbor_EventScript_1562EA:: @ 81562EA msgbox SlateportCity_Harbor_Text_1803DD, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_156374 giveitem ITEM_DEEP_SEA_TOOTH - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_1A029B removeitem ITEM_SCANNER, 1 msgbox SlateportCity_Harbor_Text_18046B, 4 @@ -346,10 +346,10 @@ SlateportCity_Harbor_EventScript_1562EA:: @ 81562EA SlateportCity_Harbor_EventScript_15632A:: @ 815632A msgbox SlateportCity_Harbor_Text_180412, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_156374 giveitem ITEM_DEEP_SEA_SCALE - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_1A029B removeitem ITEM_SCANNER, 1 msgbox SlateportCity_Harbor_Text_18046B, 4 diff --git a/data/scripts/maps/SlateportCity_House1.inc b/data/scripts/maps/SlateportCity_House1.inc index f9ffba65f..731b3385b 100644 --- a/data/scripts/maps/SlateportCity_House1.inc +++ b/data/scripts/maps/SlateportCity_House1.inc @@ -5,9 +5,9 @@ SlateportCity_House1_EventScript_15567B:: @ 815567B lock faceplayer msgbox SlateportCity_House1_Text_17D46A, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_House1_EventScript_15569C - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_House1_EventScript_1556BF end @@ -15,9 +15,9 @@ SlateportCity_House1_EventScript_15569C:: @ 815569C msgbox SlateportCity_House1_Text_17D4DB, 4 special sub_80F9A0C waitstate - compare 0x8004, 255 + compare_var_to_imm 0x8004, 255 goto_if 5, SlateportCity_House1_EventScript_1556C9 - compare 0x8004, 255 + compare_var_to_imm 0x8004, 255 goto_if_eq SlateportCity_House1_EventScript_1556BF end @@ -28,20 +28,20 @@ SlateportCity_House1_EventScript_1556BF:: @ 81556BF SlateportCity_House1_EventScript_1556C9:: @ 81556C9 specialval RESULT, ScriptGetPartyMonSpecies - compare RESULT, SPECIES_EGG + compare_var_to_imm RESULT, SPECIES_EGG goto_if_eq SlateportCity_House1_EventScript_15571C special sub_80BFAE0 special sub_80BFB10 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_House1_EventScript_155726 specialval RESULT, sub_810F96C special sub_80BFAE0 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_House1_EventScript_155726 msgbox SlateportCity_House1_Text_17D505, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_House1_EventScript_155730 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_House1_EventScript_1556BF end @@ -60,7 +60,7 @@ SlateportCity_House1_EventScript_155730:: @ 8155730 call SlateportCity_House1_EventScript_1A0678 specialval RESULT, sub_80BF9B4 special sub_80BFAE0 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_House1_EventScript_15575A msgbox SlateportCity_House1_Text_17D63A, 4 release diff --git a/data/scripts/maps/SlateportCity_House2.inc b/data/scripts/maps/SlateportCity_House2.inc index 934fae153..6f267d31f 100644 --- a/data/scripts/maps/SlateportCity_House2.inc +++ b/data/scripts/maps/SlateportCity_House2.inc @@ -9,7 +9,7 @@ SlateportCity_House2_EventScript_156399:: @ 8156399 lock faceplayer checkitem ITEM_CONTEST_PASS, 1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_House2_EventScript_1563B5 msgbox SlateportCity_House2_Text_180567, 4 release diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc index 45b69dff2..e8f6d45ac 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc @@ -34,7 +34,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B06:: @ 8155B06 showmoney 0, 0 nop msgbox SlateportCity_OceanicMuseum_1F_Text_17E18D, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155B2D closebutton hidemoney 0, 0 @@ -45,7 +45,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B06:: @ 8155B06 SlateportCity_OceanicMuseum_1F_EventScript_155B2D:: @ 8155B2D checkmoney 0x32, 0 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155B5A paymoney 0x32, 0 updatemoney 0, 0 @@ -165,14 +165,14 @@ SlateportCity_OceanicMuseum_1F_EventScript_155C3A:: @ 8155C3A waitmove 0 msgbox SlateportCity_OceanicMuseum_1F_Text_17E582, 4 giveitem ITEM_TM46 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155CC2 setflag 269 msgbox SlateportCity_OceanicMuseum_1F_Text_17E606, 4 closebutton - compare FACING, 2 + compare_var_to_imm FACING, 2 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155C98 - compare FACING, 2 + compare_var_to_imm FACING, 2 goto_if 5, SlateportCity_OceanicMuseum_1F_EventScript_155CAD end diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc index 136054947..3a08fcc2a 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc @@ -21,21 +21,21 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 move 3, SlateportCity_OceanicMuseum_2F_Movement_155EB8 move 4, SlateportCity_OceanicMuseum_2F_Movement_155EC5 waitmove 0 - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E62 - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E62 msgbox SlateportCity_OceanicMuseum_2F_Text_17EDAE, 4 - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 5, SlateportCity_OceanicMuseum_2F_EventScript_155E6D msgbox SlateportCity_OceanicMuseum_2F_Text_17EDD7, 4 msgbox SlateportCity_OceanicMuseum_2F_Text_17EE01, 4 closebutton move 4, SlateportCity_OceanicMuseum_2F_Movement_155EB2 waitmove 0 - compare FACING, 1 + compare_var_to_imm FACING, 1 call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E78 - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E83 trainerbattle 3, OPPONENT_MUSEUM_2F_GRUNT_1, 0, SlateportCity_OceanicMuseum_2F_Text_17EE4E msgbox SlateportCity_OceanicMuseum_2F_Text_17EE66, 4 diff --git a/data/scripts/maps/SlateportCity_PokemonFanClub.inc b/data/scripts/maps/SlateportCity_PokemonFanClub.inc index 6656e58a4..4a7fc8474 100644 --- a/data/scripts/maps/SlateportCity_PokemonFanClub.inc +++ b/data/scripts/maps/SlateportCity_PokemonFanClub.inc @@ -33,9 +33,9 @@ SlateportCity_PokemonFanClub_EventScript_1557A8:: @ 81557A8 call_if 1, SlateportCity_PokemonFanClub_EventScript_155893 checkflag 200 call_if 1, SlateportCity_PokemonFanClub_EventScript_155893 - compare 0x4002, 5 + compare_var_to_imm 0x4002, 5 call_if 1, SlateportCity_PokemonFanClub_EventScript_15588D - compare 0x40b7, 2 + compare_var_to_imm 0x40b7, 2 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1557FE msgbox SlateportCity_PokemonFanClub_Text_17DA14, 4 goto SlateportCity_PokemonFanClub_EventScript_155808 @@ -85,7 +85,7 @@ SlateportCity_PokemonFanClub_EventScript_155899:: @ 8155899 SlateportCity_PokemonFanClub_EventScript_1558A3:: @ 81558A3 checkitemspace ITEM_RED_SCARF, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 200 @@ -96,7 +96,7 @@ SlateportCity_PokemonFanClub_EventScript_1558A3:: @ 81558A3 SlateportCity_PokemonFanClub_EventScript_1558D4:: @ 81558D4 checkitemspace ITEM_BLUE_SCARF, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 201 @@ -107,7 +107,7 @@ SlateportCity_PokemonFanClub_EventScript_1558D4:: @ 81558D4 SlateportCity_PokemonFanClub_EventScript_155905:: @ 8155905 checkitemspace ITEM_PINK_SCARF, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 202 @@ -118,7 +118,7 @@ SlateportCity_PokemonFanClub_EventScript_155905:: @ 8155905 SlateportCity_PokemonFanClub_EventScript_155936:: @ 8155936 checkitemspace ITEM_GREEN_SCARF, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 203 @@ -129,7 +129,7 @@ SlateportCity_PokemonFanClub_EventScript_155936:: @ 8155936 SlateportCity_PokemonFanClub_EventScript_155967:: @ 8155967 checkitemspace ITEM_YELLOW_SCARF, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 204 @@ -145,7 +145,7 @@ SlateportCity_PokemonFanClub_EventScript_155998:: @ 8155998 SlateportCity_PokemonFanClub_EventScript_1559A2:: @ 81559A2 specialval RESULT, CheckLeadMonCool - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_1559B3 return @@ -155,7 +155,7 @@ SlateportCity_PokemonFanClub_EventScript_1559B3:: @ 81559B3 SlateportCity_PokemonFanClub_EventScript_1559B9:: @ 81559B9 specialval RESULT, CheckLeadMonBeauty - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_1559CA return @@ -165,7 +165,7 @@ SlateportCity_PokemonFanClub_EventScript_1559CA:: @ 81559CA SlateportCity_PokemonFanClub_EventScript_1559D0:: @ 81559D0 specialval RESULT, CheckLeadMonCute - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_1559E1 return @@ -175,7 +175,7 @@ SlateportCity_PokemonFanClub_EventScript_1559E1:: @ 81559E1 SlateportCity_PokemonFanClub_EventScript_1559E7:: @ 81559E7 specialval RESULT, CheckLeadMonSmart - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_1559F8 return @@ -185,7 +185,7 @@ SlateportCity_PokemonFanClub_EventScript_1559F8:: @ 81559F8 SlateportCity_PokemonFanClub_EventScript_1559FE:: @ 81559FE specialval RESULT, CheckLeadMonTough - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_155A0F return @@ -200,7 +200,7 @@ SlateportCity_PokemonFanClub_EventScript_155A15:: @ 8155A15 goto_if_eq SlateportCity_PokemonFanClub_EventScript_155A75 msgbox SlateportCity_PokemonFanClub_Text_17DE6B, 4 specialval RESULT, GetLeadMonFriendshipScore - compare RESULT, 4 + compare_var_to_imm RESULT, 4 goto_if 4, SlateportCity_PokemonFanClub_EventScript_155A3A release end @@ -213,7 +213,7 @@ SlateportCity_PokemonFanClub_EventScript_155A3A:: @ 8155A3A waitmove 0 msgbox SlateportCity_PokemonFanClub_Text_17DF57, 4 giveitem ITEM_SOOTHE_BELL - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1A029B setflag 278 release diff --git a/data/scripts/maps/SootopolisCity.inc b/data/scripts/maps/SootopolisCity.inc index d718fed6e..44ee245fd 100644 --- a/data/scripts/maps/SootopolisCity.inc +++ b/data/scripts/maps/SootopolisCity.inc @@ -45,7 +45,7 @@ SootopolisCity_EventScript_14D123:: @ 814D123 call SootopolisCity_EventScript_1A02C1 movespriteperm 1, 29, 19 movespriteperm 2, 33, 19 - compare 0x405e, 1 + compare_var_to_imm 0x405e, 1 call_if 1, SootopolisCity_EventScript_14D142 return @@ -99,20 +99,20 @@ SootopolisCity_EventScript_14D19F:: @ 814D19F addvar RESULT, 20 addvar RESULT, 133 giveitem RESULT - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SootopolisCity_EventScript_1A029B setflag 2258 msgbox SootopolisCity_Text_1C64D0, 4 random 2 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SootopolisCity_EventScript_14D1FF - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SootopolisCity_EventScript_14D220 end SootopolisCity_EventScript_14D1FF:: @ 814D1FF giveitem ITEM_FIGY_BERRY - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SootopolisCity_EventScript_1A029B msgbox SootopolisCity_Text_1C650B, 4 release @@ -120,7 +120,7 @@ SootopolisCity_EventScript_14D1FF:: @ 814D1FF SootopolisCity_EventScript_14D220:: @ 814D220 giveitem ITEM_IAPAPA_BERRY - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SootopolisCity_EventScript_1A029B msgbox SootopolisCity_Text_1C650B, 4 release @@ -128,7 +128,7 @@ SootopolisCity_EventScript_14D220:: @ 814D220 SootopolisCity_EventScript_14D241:: @ 814D241 msgbox SootopolisCity_Text_1C6540, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SootopolisCity_EventScript_14D25E msgbox SootopolisCity_Text_1C6626, 4 release diff --git a/data/scripts/maps/SootopolisCity_Gym_1F.inc b/data/scripts/maps/SootopolisCity_Gym_1F.inc index d776e8ecf..39bc2d4db 100644 --- a/data/scripts/maps/SootopolisCity_Gym_1F.inc +++ b/data/scripts/maps/SootopolisCity_Gym_1F.inc @@ -19,11 +19,11 @@ SootopolisCity_Gym_1F_MapScript1_15AF25:: @ 815AF25 end SootopolisCity_Gym_1F_EventScript_15AF2E:: @ 815AF2E - compare 0x4022, 8 + compare_var_to_imm 0x4022, 8 goto_if 0, SootopolisCity_Gym_1F_EventScript_15AF85 - compare 0x4022, 28 + compare_var_to_imm 0x4022, 28 goto_if 0, SootopolisCity_Gym_1F_EventScript_15AF73 - compare 0x4022, 69 + compare_var_to_imm 0x4022, 69 goto_if 0, SootopolisCity_Gym_1F_EventScript_15AF61 setmaptile 8, 4, 519, 0 setmaptile 8, 5, 519, 0 @@ -109,7 +109,7 @@ SootopolisCity_Gym_1F_EventScript_15B02D:: @ 815B02D SootopolisCity_Gym_1F_EventScript_15B056:: @ 815B056 giveitem ITEM_TM03 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SootopolisCity_Gym_1F_EventScript_1A029B msgbox SootopolisCity_Gym_1F_Text_18F466, 4 setflag 172 diff --git a/data/scripts/maps/SootopolisCity_House2.inc b/data/scripts/maps/SootopolisCity_House2.inc index 011806291..6315cee85 100644 --- a/data/scripts/maps/SootopolisCity_House2.inc +++ b/data/scripts/maps/SootopolisCity_House2.inc @@ -5,9 +5,9 @@ SootopolisCity_House2_EventScript_15B2E5:: @ 815B2E5 lock faceplayer msgbox SootopolisCity_House2_Text_18FA66, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, SootopolisCity_House2_EventScript_15B307 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, SootopolisCity_House2_EventScript_15B310 release end diff --git a/data/scripts/maps/SootopolisCity_House3.inc b/data/scripts/maps/SootopolisCity_House3.inc index f1bf0bf19..156ee232d 100644 --- a/data/scripts/maps/SootopolisCity_House3.inc +++ b/data/scripts/maps/SootopolisCity_House3.inc @@ -5,7 +5,7 @@ SootopolisCity_House3_EventScript_15B31A:: @ 815B31A lock faceplayer msgbox SootopolisCity_House3_Text_18FB36, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SootopolisCity_House3_EventScript_15B339 msgbox SootopolisCity_House3_Text_18FBC0, 4 release diff --git a/data/scripts/maps/SootopolisCity_House6.inc b/data/scripts/maps/SootopolisCity_House6.inc index 1e1b53956..2d6add92d 100644 --- a/data/scripts/maps/SootopolisCity_House6.inc +++ b/data/scripts/maps/SootopolisCity_House6.inc @@ -7,11 +7,11 @@ SootopolisCity_House6_EventScript_15B386:: @ 815B386 checkflag 245 goto_if_eq SootopolisCity_House6_EventScript_15B3CD msgbox SootopolisCity_House6_Text_18FEA1, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, SootopolisCity_House6_EventScript_15B3C3 msgbox SootopolisCity_House6_Text_18FF12, 4 givedecoration 117 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SootopolisCity_House6_EventScript_15B3D7 setflag 245 release diff --git a/data/scripts/maps/SootopolisCity_House8.inc b/data/scripts/maps/SootopolisCity_House8.inc index 662117741..e7ddaa39d 100644 --- a/data/scripts/maps/SootopolisCity_House8.inc +++ b/data/scripts/maps/SootopolisCity_House8.inc @@ -9,14 +9,14 @@ SootopolisCity_House8_EventScript_15B401:: @ 815B401 special sub_80F9A0C waitstate copyvar RESULT, 0x8004 - compare RESULT, 255 + compare_var_to_imm RESULT, 255 goto_if_eq SootopolisCity_House8_EventScript_15B448 special CompareShroomishSize - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SootopolisCity_House8_EventScript_15B452 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq SootopolisCity_House8_EventScript_15B45C - compare RESULT, 3 + compare_var_to_imm RESULT, 3 goto_if_eq SootopolisCity_House8_EventScript_15B466 release end @@ -39,7 +39,7 @@ SootopolisCity_House8_EventScript_15B45C:: @ 815B45C SootopolisCity_House8_EventScript_15B466:: @ 815B466 msgbox SootopolisCity_House8_Text_19021D, 4 giveitem ITEM_ELIXIR - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SootopolisCity_House8_EventScript_15B488 closebutton release @@ -58,14 +58,14 @@ SootopolisCity_House8_EventScript_15B492:: @ 815B492 special sub_80F9A0C waitstate copyvar RESULT, 0x8004 - compare RESULT, 255 + compare_var_to_imm RESULT, 255 goto_if_eq SootopolisCity_House8_EventScript_15B4D9 special CompareBarboachSize - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SootopolisCity_House8_EventScript_15B4E3 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq SootopolisCity_House8_EventScript_15B4ED - compare RESULT, 3 + compare_var_to_imm RESULT, 3 goto_if_eq SootopolisCity_House8_EventScript_15B4F7 release end @@ -88,7 +88,7 @@ SootopolisCity_House8_EventScript_15B4ED:: @ 815B4ED SootopolisCity_House8_EventScript_15B4F7:: @ 815B4F7 msgbox SootopolisCity_House8_Text_190536, 4 giveitem ITEM_ELIXIR - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SootopolisCity_House8_EventScript_15B519 closebutton release diff --git a/data/scripts/maps/SouthernIsland_Exterior.inc b/data/scripts/maps/SouthernIsland_Exterior.inc index fc7d811c4..72a11a88b 100644 --- a/data/scripts/maps/SouthernIsland_Exterior.inc +++ b/data/scripts/maps/SouthernIsland_Exterior.inc @@ -10,7 +10,7 @@ SouthernIsland_Exterior_EventScript_160AE0:: @ 8160AE0 lock faceplayer msgbox SouthernIsland_Exterior_Text_1C5215, 5 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SouthernIsland_Exterior_EventScript_160B25 msgbox SouthernIsland_Exterior_Text_1C5281, 4 closebutton diff --git a/data/scripts/maps/SouthernIsland_Interior.inc b/data/scripts/maps/SouthernIsland_Interior.inc index 84e6b93c5..368e26794 100644 --- a/data/scripts/maps/SouthernIsland_Interior.inc +++ b/data/scripts/maps/SouthernIsland_Interior.inc @@ -23,9 +23,9 @@ SouthernIsland_Interior_MapScript1_160B6C:: @ 8160B6C SouthernIsland_Interior_EventScript_160B77:: @ 8160B77 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq SouthernIsland_Interior_EventScript_160B8F - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq SouthernIsland_Interior_EventScript_160B95 end diff --git a/data/scripts/maps/Underwater_SealedChamber.inc b/data/scripts/maps/Underwater_SealedChamber.inc index 4e2895166..cbb45993a 100644 --- a/data/scripts/maps/Underwater_SealedChamber.inc +++ b/data/scripts/maps/Underwater_SealedChamber.inc @@ -4,9 +4,9 @@ Underwater_SealedChamber_MapScripts:: @ 815F080 Underwater_SealedChamber_MapScript1_15F086:: @ 815F086 getplayerxy 0x8004, 0x8005 - compare 0x8004, 12 + compare_var_to_imm 0x8004, 12 goto_if 5, Underwater_SealedChamber_EventScript_15F0A6 - compare 0x8005, 44 + compare_var_to_imm 0x8005, 44 goto_if 5, Underwater_SealedChamber_EventScript_15F0A6 goto Underwater_SealedChamber_EventScript_15F0AF diff --git a/data/scripts/maps/UnknownMap_25_34.inc b/data/scripts/maps/UnknownMap_25_34.inc index 52aca6d12..fee3b1498 100644 --- a/data/scripts/maps/UnknownMap_25_34.inc +++ b/data/scripts/maps/UnknownMap_25_34.inc @@ -13,15 +13,15 @@ LinkContestRoom1_MapScript1_15F595:: @ 815F595 LinkContestRoom1_EventScript_15F5A5:: @ 815F5A5 special ScriptGetMultiplayerId - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LinkContestRoom1_EventScript_15F5E0 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LinkContestRoom1_EventScript_15F5E4 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 call_if 1, LinkContestRoom1_EventScript_15F5E8 - compare RESULT, 3 + compare_var_to_imm RESULT, 3 call_if 1, LinkContestRoom1_EventScript_15F5EC - compare RESULT, 4 + compare_var_to_imm RESULT, 4 call_if 1, LinkContestRoom1_EventScript_15F5F0 return @@ -46,7 +46,7 @@ LinkContestRoom1_EventScript_15F5F0:: @ 815F5F0 return LinkContestRoom1_MapScript1_15F5F4:: @ 815F5F4 - compare 0x4009, 1 + compare_var_to_imm 0x4009, 1 call_if 1, LinkContestRoom1_EventScript_15F600 end @@ -75,7 +75,7 @@ LinkContestRoom1_EventScript_15F625:: @ 815F625 LinkContestRoom1_EventScript_15F630:: @ 815F630 call LinkContestRoom1_EventScript_15F6E6 call LinkContestRoom1_EventScript_15F646 - compare 0x4000, 8 + compare_var_to_imm 0x4000, 8 goto_if 0, LinkContestRoom1_EventScript_15F630 return @@ -414,9 +414,9 @@ LilycoveCity_ContestLobby_EventScript_15FBDB:: @ 815FBDB SlateportCity_ContestLobby_EventScript_15FBDB:: @ 815FBDB VerdanturfTown_ContestLobby_EventScript_15FBDB:: @ 815FBDB checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_15FBF3 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_15FBF9 return diff --git a/data/scripts/maps/VerdanturfTown_ContestLobby.inc b/data/scripts/maps/VerdanturfTown_ContestLobby.inc index 00454133d..2443b01b0 100644 --- a/data/scripts/maps/VerdanturfTown_ContestLobby.inc +++ b/data/scripts/maps/VerdanturfTown_ContestLobby.inc @@ -105,7 +105,7 @@ VerdanturfTown_ContestLobby_EventScript_153E47:: @ 8153E47 goto_if_eq VerdanturfTown_ContestLobby_EventScript_153E76 msgbox VerdanturfTown_ContestLobby_Text_177DEC, 4 giveitem ITEM_TM45 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq VerdanturfTown_ContestLobby_EventScript_1A029B setflag 235 release diff --git a/data/scripts/maps/VictoryRoad_1F.inc b/data/scripts/maps/VictoryRoad_1F.inc index 7ea560d0d..95b82f46a 100644 --- a/data/scripts/maps/VictoryRoad_1F.inc +++ b/data/scripts/maps/VictoryRoad_1F.inc @@ -94,7 +94,7 @@ VictoryRoad_1F_EventScript_15DF28:: @ 815DF28 VictoryRoad_1F_EventScript_15DF31:: @ 815DF31 trainerbattle 0, OPPONENT_WALLY_3, 0, VictoryRoad_1F_Text_1979BA, VictoryRoad_1F_Text_197A23 specialval RESULT, sub_8082C68 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq VictoryRoad_1F_EventScript_15DF58 msgbox VictoryRoad_1F_Text_197A47, 6 end diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index 6202a8acf..0a74b3c9a 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -26,9 +26,9 @@ SpeakToBard: lock faceplayer msgbox gTextBard_HiImTheBard, MSGBOX_YESNO - compare RESULT, YES + compare_var_to_imm RESULT, YES goto_if_eq yes_hear_song - compare RESULT, NO + compare_var_to_imm RESULT, NO goto_if_eq dont_hear_song end @@ -38,7 +38,7 @@ yes_hear_song: special ScrSpecial_PlayBardSong pause 60 special ScrSpecial_HasBardSongBeenChanged - compare RESULT, FALSE + compare_var_to_imm RESULT, FALSE @ Prompt new lyrics only if song hasn't been changed goto_if_eq prompt_write_lyrics msgbox gTextBard_OhWhatAMovingSong, 4 @@ -52,9 +52,9 @@ dont_hear_song: prompt_write_lyrics: msgbox gTextBard_SoHowDoYouLikeMySong, MSGBOX_YESNO - compare RESULT, YES + compare_var_to_imm RESULT, YES goto_if_eq write_lyrics - compare RESULT, NO + compare_var_to_imm RESULT, NO goto_if_eq dont_write_lyrics end @@ -63,7 +63,7 @@ write_lyrics: call MauvilleCity_PokemonCenter_1F_EventScript_1A00F3 lock faceplayer - compare RESULT, NO + compare_var_to_imm RESULT, NO goto_if_eq dont_write_lyrics msgbox gTextBard_ThankYouKindly, 4 setvar 0x8004, 1 @@ -71,7 +71,7 @@ write_lyrics: special ScrSpecial_PlayBardSong pause 60 msgbox gTextBard_WasThatHowYouWanted, MSGBOX_YESNO - compare RESULT, NO + compare_var_to_imm RESULT, NO goto_if_eq write_lyrics @ Keep looping until player responds YES special ScrSpecial_SaveBardSongLyrics msgbox gTextBard_OkayThatsIt, 4 @@ -94,7 +94,7 @@ SpeakToHipster: setflag 2054 msgbox gTextHipster_TheyCallMeTheHipster, 4 special ScrSpecial_GetHipsterSpokenFlag - compare RESULT, FALSE + compare_var_to_imm RESULT, FALSE goto_if_eq hipster_first_time msgbox gTextHipster_TaughtYouAlready, 4 release @@ -102,7 +102,7 @@ SpeakToHipster: hipster_first_time: special ScrSpecial_HipsterTeachWord - compare RESULT, TRUE @ TRUE if player learned a new word + compare_var_to_imm RESULT, TRUE @ TRUE if player learned a new word goto_if_eq teach_new_word msgbox gTextHipster_YouAlreadyKnowALot, 4 release @@ -125,10 +125,10 @@ SpeakToTrader: lock faceplayer msgbox gTextTrader_Introduction, MSGBOX_YESNO - compare RESULT, NO + compare_var_to_imm RESULT, NO goto_if_eq dont_want_to_trade special ScrSpecial_GetTraderTradedFlag - compare RESULT, TRUE + compare_var_to_imm RESULT, TRUE goto_if_eq already_traded message gTextTrader_MenuPrompt waittext @@ -146,15 +146,15 @@ already_traded: do_trader_menu_get: special ScrSpecial_TraderMenuGetDecoration waitstate - compare 0x8004, 0 + compare_var_to_imm 0x8004, 0 goto_if_eq cancelled_get_menu - compare 0x8004, 65535 + compare_var_to_imm 0x8004, 65535 goto_if_eq rare_item_cant_trade_away msgbox gTextTrader_ItemOnceBelongedTo, MSGBOX_YESNO - compare RESULT, NO + compare_var_to_imm RESULT, NO goto_if_eq dont_want_item special ScrSpecial_DoesPlayerHaveNoDecorations - compare RESULT, TRUE + compare_var_to_imm RESULT, TRUE goto_if_eq player_has_no_decorations goto do_trader_menu_give end @@ -183,15 +183,15 @@ do_trader_menu_give: msgbox gTextTrader_PickDecorationYoullTrade, 4 special ScrSpecial_TraderMenuGiveDecoration waitstate - compare 0x8006, 0 + compare_var_to_imm 0x8006, 0 goto_if_eq cancelled_give_menu - compare 0x8006, 65535 + compare_var_to_imm 0x8006, 65535 goto_if_eq decoration_is_in_use special ScrSpecial_IsDecorationFull - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq decorations_full msgbox gTextTrader_SoWellTrade, MSGBOX_YESNO - compare RESULT, NO + compare_var_to_imm RESULT, NO goto_if_eq do_trader_menu_give special ScrSpecial_TraderDoDecorationTrade msgbox gTextTrader_ThenWellTrade, 2 @@ -225,51 +225,51 @@ SpeakToStoryteller: lock faceplayer msgbox gTextStoryteller_Introduction, MSGBOX_YESNO - compare RESULT, NO + compare_var_to_imm RESULT, NO goto_if_eq dont_hear_story specialval RESULT, ScrSpecial_StorytellerGetFreeStorySlot - compare RESULT, 0 @ If slot is 0, then the list is empty + compare_var_to_imm RESULT, 0 @ If slot is 0, then the list is empty goto_if_eq no_stories_recorded choose_story: message gTextStoryteller_WhichTale waittext special ScrSpecial_StorytellerStoryListMenu waitstate - compare RESULT, FALSE + compare_var_to_imm RESULT, FALSE goto_if_eq cancel_story_menu setvar 0x8008, 1 special ScrSpecial_StorytellerDisplayStory waittext waitbutton specialval RESULT, ScrSpecial_StorytellerUpdateStat - compare RESULT, FALSE + compare_var_to_imm RESULT, FALSE goto_if_eq no_stat_update goto stat_update cancel_story_menu: - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 goto_if_eq dont_hear_story goto yes_hear_story no_stat_update: msgbox gTextStoryteller_CouldThereBeOtherTrainers, 4 msgbox gTextStoryteller_HearAnotherLegendaryTale, MSGBOX_YESNO - compare RESULT, YES + compare_var_to_imm RESULT, YES goto_if_eq choose_story yes_hear_story: specialval RESULT, ScrSpecial_HasStorytellerAlreadyRecorded - compare RESULT, TRUE + compare_var_to_imm RESULT, TRUE goto_if_eq cant_record_story @ already recorded story specialval RESULT, ScrSpecial_StorytellerGetFreeStorySlot - compare RESULT, 4 + compare_var_to_imm RESULT, 4 goto_if_eq cant_record_story @ story list is full goto prompt_record_story no_stories_recorded: msgbox gTextStoryteller_ButIKnowOfNoLegendaryTrainers, 4 prompt_record_story: msgbox gTextStoryteller_HaveYouAnyTales, MSGBOX_YESNO - compare RESULT, NO + compare_var_to_imm RESULT, NO goto_if_eq dont_hear_story specialval RESULT, ScrSpecial_StorytellerInitializeRandomStat - compare RESULT, TRUE + compare_var_to_imm RESULT, TRUE goto_if_eq stat_update msgbox gTextStoryteller_ImNotSatisfied, 4 closebutton @@ -305,25 +305,25 @@ SpeakToGiddy: lock faceplayer msgbox gTextGiddy_Introduction, MSGBOX_YESNO - compare RESULT, YES + compare_var_to_imm RESULT, YES goto_if_eq yes_hear_giddy - compare RESULT, NO + compare_var_to_imm RESULT, NO goto_if_eq dont_hear_giddy end yes_hear_giddy: special ScrSpecial_GiddyShouldTellAnotherTale - compare RESULT, TRUE + compare_var_to_imm RESULT, TRUE goto_if_eq tell_giddy_tale - compare RESULT, FALSE + compare_var_to_imm RESULT, FALSE goto_if_eq bye_bye end tell_another_giddy_tale: special ScrSpecial_GiddyShouldTellAnotherTale - compare RESULT, TRUE + compare_var_to_imm RESULT, TRUE goto_if_eq also_i_was_thinking - compare RESULT, FALSE + compare_var_to_imm RESULT, FALSE goto_if_eq bye_bye end @@ -337,9 +337,9 @@ tell_giddy_tale: special ShowFieldMessageStringVar4 waittext yesnobox 20, 8 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq tell_another_giddy_tale - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq tell_another_giddy_tale end diff --git a/data/scripts/mystery_event_club.inc b/data/scripts/mystery_event_club.inc index 97adca508..4ed0cef11 100644 --- a/data/scripts/mystery_event_club.inc +++ b/data/scripts/mystery_event_club.inc @@ -29,11 +29,11 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1B7A:: @ 81B1B7A call PetalburgCity_PokemonCenter_1F_EventScript_1A00F3 lock faceplayer - compare 0x8004, 1 + compare_var_to_imm 0x8004, 1 call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_1B1C77 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_1B1BB1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_1B1BBB end @@ -83,11 +83,11 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1C36:: @ 81B1C36 call PetalburgCity_PokemonCenter_1F_EventScript_1A00F3 lock faceplayer - compare 0x8004, 1 + compare_var_to_imm 0x8004, 1 call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_1B1C77 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_1B1BB1 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_1B1BBB end diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index bbbc0952d..868873eec 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -8,9 +8,9 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6956:: @ 81B6956 msgbox LittlerootTown_BrendansHouse_1F_Text_172429, 4 move 0x8004, LittlerootTown_BrendansHouse_1F_Movement_1A0839 waitmove 0 - compare 0x8005, 0 + compare_var_to_imm 0x8005, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B699F - compare 0x8005, 1 + compare_var_to_imm 0x8005, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B69AA msgbox LittlerootTown_BrendansHouse_1F_Text_172453, 4 closebutton @@ -69,9 +69,9 @@ LittlerootTown_MaysHouse_2F_EventScript_1B69EB:: @ 81B69EB setflag 754 setflag 755 checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6A31 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6A61 playsfx 9 disappear 0x8008 @@ -252,17 +252,17 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6BE9:: @ 81B6BE9 LittlerootTown_MaysHouse_1F_EventScript_1B6BE9:: @ 81B6BE9 lock faceplayer - compare 0x4082, 4 + compare_var_to_imm 0x4082, 4 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C33 - compare 0x408c, 4 + compare_var_to_imm 0x408c, 4 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C33 checkflag 2059 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C3D checkflag 82 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C72 - compare 0x4001, 1 + compare_var_to_imm 0x4001, 1 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C80 - compare 0x4092, 7 + compare_var_to_imm 0x4092, 7 goto_if 4, LittlerootTown_BrendansHouse_1F_EventScript_1B6C9C msgbox LittlerootTown_BrendansHouse_1F_Text_172429, 4 release @@ -278,7 +278,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6C3D:: @ 81B6C3D goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C72 msgbox LittlerootTown_BrendansHouse_1F_Text_172782, 4 giveitem ITEM_AMULET_COIN - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1A029B msgbox LittlerootTown_BrendansHouse_1F_Text_1727CD, 4 setflag 133 @@ -362,13 +362,13 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6CDE:: @ 81B6CDE LittlerootTown_MaysHouse_1F_EventScript_1B6CDE:: @ 81B6CDE lockall checkgender - compare RESULT, 0 + compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DAD - compare RESULT, 1 + compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DBD - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E1D - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E28 move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1A0839 waitmove 0 @@ -378,23 +378,23 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6CDE:: @ 81B6CDE move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1A0835 waitmove 0 pause 20 - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DCD - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DD8 msgbox LittlerootTown_BrendansHouse_1F_Text_17298B, 4 giveitem ITEM_SS_TICKET msgbox LittlerootTown_BrendansHouse_1F_Text_172A7D, 4 closebutton - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DE3 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DEE msgbox LittlerootTown_BrendansHouse_1F_Text_172B5E, 4 closebutton - compare 0x8008, 0 + compare_var_to_imm 0x8008, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DF9 - compare 0x8008, 1 + compare_var_to_imm 0x8008, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E0B playsfx 8 disappear 0x8009 diff --git a/data/scripts/pokeblocks.inc b/data/scripts/pokeblocks.inc index 0cf3163fd..8badf3aab 100644 --- a/data/scripts/pokeblocks.inc +++ b/data/scripts/pokeblocks.inc @@ -39,24 +39,24 @@ SlateportCity_ContestLobby_EventScript_1B7681:: @ 81B7681 VerdanturfTown_ContestLobby_EventScript_1B7681:: @ 81B7681 lockall msgbox FallarborTown_ContestLobby_Text_1B6E63, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1B76A1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B76E5 end FallarborTown_ContestLobby_EventScript_1B76A1:: @ 81B76A1 checkitem ITEM_POKEBLOCK_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7780 specialval RESULT, PlayerHasBerries - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B770E msgbox FallarborTown_ContestLobby_Text_1B6E9D, 4 specialval RESULT, sub_810CA00 - compare RESULT, 65535 + compare_var_to_imm RESULT, 65535 goto_if 5, FallarborTown_ContestLobby_EventScript_1B76EF - compare RESULT, 65535 + compare_var_to_imm RESULT, 65535 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7776 end @@ -67,9 +67,9 @@ FallarborTown_ContestLobby_EventScript_1B76E5:: @ 81B76E5 FallarborTown_ContestLobby_EventScript_1B76EF:: @ 81B76EF msgbox FallarborTown_ContestLobby_Text_1B6ED0, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7734 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7726 end @@ -149,9 +149,9 @@ VerdanturfTown_ContestLobby_EventScript_1B77B6:: @ 81B77B6 faceplayer msgbox FallarborTown_ContestLobby_Text_1B742F, 4 specialval RESULT, PlayerHasBerries - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1B77DC - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B77E6 end @@ -209,23 +209,23 @@ SlateportCity_ContestLobby_EventScript_1B783B:: @ 81B783B VerdanturfTown_ContestLobby_EventScript_1B783B:: @ 81B783B lockall specialval RESULT, PlayerHasBerries - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7897 checkitem ITEM_POKEBLOCK_CASE, 1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7942 specialval RESULT, sub_810CA00 - compare RESULT, 65535 + compare_var_to_imm RESULT, 65535 goto_if 5, FallarborTown_ContestLobby_EventScript_1B7878 - compare RESULT, 65535 + compare_var_to_imm RESULT, 65535 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7938 end FallarborTown_ContestLobby_EventScript_1B7878:: @ 81B7878 msgbox FallarborTown_ContestLobby_Text_1B727C, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1B78A1 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7936 end @@ -236,21 +236,21 @@ FallarborTown_ContestLobby_EventScript_1B7897:: @ 81B7897 FallarborTown_ContestLobby_EventScript_1B78A1:: @ 81B78A1 call S_DoSaveDialog - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7936 message FallarborTown_ContestLobby_Text_1B7304 waittext special sub_8083614 waitstate - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7980 - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq FallarborTown_ContestLobby_EventScript_1B794C - compare RESULT, 3 + compare_var_to_imm RESULT, 3 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7959 - compare RESULT, 5 + compare_var_to_imm RESULT, 5 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7966 - compare RESULT, 6 + compare_var_to_imm RESULT, 6 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7973 end diff --git a/data/scripts/safari_zone.inc b/data/scripts/safari_zone.inc index 6098c7dce..97572220d 100644 --- a/data/scripts/safari_zone.inc +++ b/data/scripts/safari_zone.inc @@ -14,7 +14,7 @@ EventScript_1C341B: @ 81C341B gUnknown_081C342D:: @ 81C342D lockall msgbox UnknownString_81C34B2, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_1C3443 releaseall end @@ -43,10 +43,10 @@ gUnknown_081C3459:: @ 81C3459 gUnknown_081C346A:: @ 81C346A lockall special SafariZoneGetPokeblockNameInFeeder - compare RESULT, -1 + compare_var_to_imm RESULT, -1 goto_if 5, EventScript_1C34A9 msgbox UnknownString_81C354E, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_1C348E releaseall end @@ -55,7 +55,7 @@ EventScript_1C348E: fadescreen 1 special sub_810BAF4 waitstate - compare RESULT, -1 + compare_var_to_imm RESULT, -1 goto_if 5, EventScript_1C34A0 end diff --git a/data/scripts/secret_power_tm.inc b/data/scripts/secret_power_tm.inc index eae7db0c0..80c51484a 100644 --- a/data/scripts/secret_power_tm.inc +++ b/data/scripts/secret_power_tm.inc @@ -2,7 +2,7 @@ Route111_EventScript_1A3858:: @ 81A3858 lock faceplayer msgbox Route111_Text_1A3520, 5 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq Route111_EventScript_1A3877 msgbox Route111_Text_1A37B5, 4 release @@ -10,17 +10,17 @@ Route111_EventScript_1A3858:: @ 81A3858 Route111_EventScript_1A3877:: @ 81A3877 giveitem ITEM_TM43 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq Route111_EventScript_1A38D9 msgbox Route111_Text_1A35C5, 4 closebutton setflag 96 clearflag 948 - compare FACING, 3 + compare_var_to_imm FACING, 3 call_if 1, Route111_EventScript_1A38C3 - compare FACING, 4 + compare_var_to_imm FACING, 4 call_if 1, Route111_EventScript_1A38C3 - compare FACING, 2 + compare_var_to_imm FACING, 2 call_if 1, Route111_EventScript_1A38CE disappear LAST_TALKED release diff --git a/data/scripts/tv.inc b/data/scripts/tv.inc index 66a923c5e..9b8dafa9b 100644 --- a/data/scripts/tv.inc +++ b/data/scripts/tv.inc @@ -3,30 +3,30 @@ Event_TV:: @ 81A6E72 inccounter GAME_STAT_WATCHED_TV special sub_80C2014 specialval RESULT, CheckForBigMovieOrEmergencyNewsOnTV - compare RESULT, 2 + compare_var_to_imm RESULT, 2 goto_if_eq EventScript_1A6F01 - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_1A6F0B checkflag 2098 goto_if 0, EventScript_1A6EF1 checkflag 2097 goto_if_eq EventScript_1A6EF1 specialval RESULT, IsTVShowInSearchOfTrainersAiring - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if_eq EventScript_1A6F66 goto EventScript_1A6F50 end EventScript_1A6EBB: specialval 0x8004, special_0x44 - compare 0x8004, 255 + compare_var_to_imm 0x8004, 255 goto_if_eq EventScript_1A6F3F specialval RESULT, special_0x4a - compare RESULT, 255 + compare_var_to_imm RESULT, 255 goto_if_eq EventScript_1A6F3F copyvar 0x8004, RESULT specialval RESULT, sub_80BDA0C - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if 5, EventScript_1A6F21 end @@ -59,7 +59,7 @@ EventScript_1A6F21: special DoTVShow waittext waitbutton - compare RESULT, 1 + compare_var_to_imm RESULT, 1 goto_if 5, EventScript_1A6F21 goto EventScript_1A6F37 end @@ -78,7 +78,7 @@ EventScript_1A6F3F: EventScript_1A6F50: special sub_80BECE8 - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A6EBB waittext waitbutton @@ -89,7 +89,7 @@ EventScript_1A6F66: special DoTVShowInSearchOfTrainers waittext waitbutton - compare RESULT, 0 + compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A6F66 goto EventScript_1A6F37 end diff --git a/src/event_data.c b/src/event_data.c index ee475343f..43d49c417 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -114,10 +114,8 @@ u16 *GetVarPointer(u16 id) { if (id < 0x4000) return NULL; - - if ((s16)id >= 0) + if (id < 0x8000) return &gSaveBlock1.vars[id - 0x4000]; - return gSpecialVars[id - 0x8000]; } diff --git a/src/scrcmd.c b/src/scrcmd.c index f45e57e02..d44fa53e2 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -387,6 +387,7 @@ u8 compare_012(u16 a1, u16 a2) return 2; } +// comparelocaltolocal bool8 ScrCmd_comparebuffers(struct ScriptContext *ctx) { u8 value1 = ctx->data[ScriptReadByte(ctx)]; @@ -396,6 +397,7 @@ bool8 ScrCmd_comparebuffers(struct ScriptContext *ctx) return FALSE; } +// comparelocaltoimm bool8 ScrCmd_comparebuffertobyte(struct ScriptContext *ctx) { u8 value1 = ctx->data[ScriptReadByte(ctx)]; -- cgit v1.2.3 From 207f8e6a76f6b13855780bb2608be9d8c1f14b15 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 24 Sep 2017 17:36:39 -0500 Subject: more script command renaming --- asm/macros/event.inc | 56 +++++------ data-de/event_scripts.s | 104 ++++++++++----------- data-de/field_move_scripts.inc | 2 +- data/event_scripts.s | 104 ++++++++++----------- data/field_move_scripts.inc | 2 +- data/scripts/berry_tree.inc | 4 +- data/scripts/cable_club.inc | 12 +-- data/scripts/contest_hall.inc | 80 ++++++++-------- data/scripts/day_care.inc | 38 ++++---- data/scripts/gabby_and_ty.inc | 6 +- data/scripts/magma_chimney.inc | 4 +- data/scripts/maps/AbandonedShip_Corridors_B1F.inc | 4 +- .../maps/AbandonedShip_HiddenFloorCorridors.inc | 10 +- .../maps/AbandonedShip_HiddenFloorRooms.inc | 24 ++--- data/scripts/maps/AbandonedShip_Rooms2_1F.inc | 4 +- data/scripts/maps/AbandonedShip_Rooms_B1F.inc | 2 +- data/scripts/maps/AbandonedShip_Underwater1.inc | 2 +- data/scripts/maps/AbandonedShip_Underwater2.inc | 2 +- data/scripts/maps/AncientTomb.inc | 4 +- data/scripts/maps/AquaHideout_B2F.inc | 6 +- data/scripts/maps/BattleTower_BattleRoom.inc | 8 +- data/scripts/maps/BattleTower_Elevator.inc | 2 +- data/scripts/maps/BattleTower_Lobby.inc | 24 ++--- data/scripts/maps/BattleTower_Outside.inc | 2 +- data/scripts/maps/CaveOfOrigin_B4F.inc | 12 +-- data/scripts/maps/DesertRuins.inc | 4 +- data/scripts/maps/DewfordTown_Gym.inc | 8 +- data/scripts/maps/DewfordTown_House1.inc | 2 +- data/scripts/maps/EverGrandeCity_ChampionsRoom.inc | 26 +++--- data/scripts/maps/EverGrandeCity_DrakesRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_GlaciasRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_HallOfFame.inc | 6 +- data/scripts/maps/EverGrandeCity_PhoebesRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_PokemonLeague.inc | 8 +- data/scripts/maps/EverGrandeCity_SidneysRoom.inc | 2 +- data/scripts/maps/FallarborTown.inc | 2 +- data/scripts/maps/FallarborTown_ContestLobby.inc | 6 +- data/scripts/maps/FallarborTown_Mart.inc | 2 +- .../maps/FallarborTown_PokemonCenter_1F.inc | 2 +- data/scripts/maps/FortreeCity.inc | 4 +- data/scripts/maps/FortreeCity_House1.inc | 6 +- data/scripts/maps/FortreeCity_House4.inc | 2 +- data/scripts/maps/FortreeCity_House5.inc | 2 +- data/scripts/maps/GraniteCave_B1F.inc | 2 +- data/scripts/maps/GraniteCave_StevensRoom.inc | 2 +- data/scripts/maps/InsideOfTruck.inc | 4 +- data/scripts/maps/IslandCave.inc | 6 +- data/scripts/maps/JaggedPass.inc | 4 +- data/scripts/maps/LavaridgeTown.inc | 14 +-- data/scripts/maps/LavaridgeTown_House.inc | 2 +- data/scripts/maps/LilycoveCity.inc | 24 ++--- data/scripts/maps/LilycoveCity_ContestHall.inc | 2 +- data/scripts/maps/LilycoveCity_ContestLobby.inc | 42 ++++----- .../scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc | 2 +- .../scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc | 4 +- .../maps/LilycoveCity_DepartmentStoreElevator.inc | 10 +- .../maps/LilycoveCity_DepartmentStoreRooftop.inc | 6 +- .../maps/LilycoveCity_DepartmentStore_1F.inc | 10 +- data/scripts/maps/LilycoveCity_Harbor.inc | 14 +-- data/scripts/maps/LilycoveCity_House1.inc | 2 +- .../maps/LilycoveCity_LilycoveMuseum_2F.inc | 2 +- .../maps/LilycoveCity_MoveDeletersHouse.inc | 2 +- .../maps/LilycoveCity_PokemonTrainerFanClub.inc | 64 ++++++------- data/scripts/maps/LittlerootTown.inc | 14 +-- .../maps/LittlerootTown_BrendansHouse_1F.inc | 2 +- .../maps/LittlerootTown_BrendansHouse_2F.inc | 4 +- data/scripts/maps/LittlerootTown_MaysHouse_1F.inc | 2 +- data/scripts/maps/LittlerootTown_MaysHouse_2F.inc | 14 +-- .../maps/LittlerootTown_ProfessorBirchsLab.inc | 4 +- data/scripts/maps/MauvilleCity.inc | 6 +- data/scripts/maps/MauvilleCity_GameCorner.inc | 46 ++++----- data/scripts/maps/MauvilleCity_Gym.inc | 4 +- data/scripts/maps/MauvilleCity_House2.inc | 2 +- data/scripts/maps/MeteorFalls_1F_1R.inc | 4 +- data/scripts/maps/MeteorFalls_1F_2R.inc | 6 +- data/scripts/maps/MossdeepCity_Gym.inc | 2 +- data/scripts/maps/MossdeepCity_House1.inc | 2 +- data/scripts/maps/MossdeepCity_House2.inc | 2 +- data/scripts/maps/MossdeepCity_House4.inc | 2 +- data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc | 4 +- data/scripts/maps/MossdeepCity_StevensHouse.inc | 6 +- data/scripts/maps/MtChimney.inc | 2 +- data/scripts/maps/MtPyre_2F.inc | 2 +- data/scripts/maps/MtPyre_6F.inc | 2 +- data/scripts/maps/MtPyre_Summit.inc | 10 +- data/scripts/maps/NewMauville_Entrance.inc | 2 +- data/scripts/maps/NewMauville_Inside.inc | 16 ++-- data/scripts/maps/OldaleTown.inc | 6 +- data/scripts/maps/PacifidlogTown_House2.inc | 14 +-- data/scripts/maps/PacifidlogTown_House3.inc | 4 +- data/scripts/maps/PacifidlogTown_House5.inc | 2 +- data/scripts/maps/PetalburgCity.inc | 10 +- data/scripts/maps/PetalburgCity_Gym.inc | 16 ++-- .../maps/PetalburgCity_PokemonCenter_1F.inc | 2 +- data/scripts/maps/PetalburgWoods.inc | 6 +- data/scripts/maps/Route101.inc | 2 +- data/scripts/maps/Route102.inc | 2 +- data/scripts/maps/Route103.inc | 18 ++-- data/scripts/maps/Route104.inc | 6 +- data/scripts/maps/Route104_MrBrineysHouse.inc | 2 +- .../maps/Route104_PrettyPetalFlowerShop.inc | 2 +- data/scripts/maps/Route104_Prototype.inc | 4 +- data/scripts/maps/Route106.inc | 2 +- data/scripts/maps/Route107.inc | 2 +- data/scripts/maps/Route109.inc | 6 +- data/scripts/maps/Route110.inc | 30 +++--- .../Route110_SeasideCyclingRoadNorthEntrance.inc | 2 +- .../Route110_SeasideCyclingRoadSouthEntrance.inc | 2 +- data/scripts/maps/Route110_TrickHouseEnd.inc | 14 +-- data/scripts/maps/Route110_TrickHouseEntrance.inc | 34 +++---- data/scripts/maps/Route110_TrickHousePuzzle2.inc | 8 +- data/scripts/maps/Route110_TrickHousePuzzle3.inc | 2 +- data/scripts/maps/Route110_TrickHousePuzzle5.inc | 18 ++-- data/scripts/maps/Route110_TrickHousePuzzle7.inc | 20 ++-- data/scripts/maps/Route111.inc | 16 ++-- data/scripts/maps/Route112.inc | 2 +- data/scripts/maps/Route113.inc | 4 +- data/scripts/maps/Route113_GlassWorkshop.inc | 4 +- data/scripts/maps/Route114.inc | 8 +- data/scripts/maps/Route115.inc | 6 +- data/scripts/maps/Route116.inc | 10 +- data/scripts/maps/Route117.inc | 12 +-- data/scripts/maps/Route118.inc | 8 +- data/scripts/maps/Route119.inc | 20 ++-- data/scripts/maps/Route119_House.inc | 2 +- data/scripts/maps/Route119_WeatherInstitute_2F.inc | 4 +- data/scripts/maps/Route120.inc | 18 ++-- data/scripts/maps/Route121.inc | 4 +- data/scripts/maps/Route121_SafariZoneEntrance.inc | 4 +- data/scripts/maps/Route123.inc | 4 +- data/scripts/maps/Route123_BerryMastersHouse.inc | 4 +- data/scripts/maps/Route124.inc | 6 +- data/scripts/maps/Route125.inc | 2 +- data/scripts/maps/Route128.inc | 14 +-- data/scripts/maps/Route130.inc | 2 +- data/scripts/maps/Route134.inc | 2 +- data/scripts/maps/RustboroCity.inc | 22 ++--- data/scripts/maps/RustboroCity_DevonCorp_2F.inc | 8 +- data/scripts/maps/RustboroCity_DevonCorp_3F.inc | 8 +- data/scripts/maps/RustboroCity_Flat2_1F.inc | 2 +- data/scripts/maps/RustboroCity_House1.inc | 4 +- data/scripts/maps/RustboroCity_House3.inc | 2 +- data/scripts/maps/RusturfTunnel.inc | 10 +- data/scripts/maps/SSTidalCorridor.inc | 16 ++-- data/scripts/maps/SafariZone_Southeast.inc | 2 +- data/scripts/maps/SeafloorCavern_Entrance.inc | 2 +- data/scripts/maps/SeafloorCavern_Room9.inc | 22 ++--- data/scripts/maps/SealedChamber_InnerRoom.inc | 22 ++--- data/scripts/maps/SealedChamber_OuterRoom.inc | 2 +- .../scripts/maps/ShoalCave_LowTideEntranceRoom.inc | 2 +- data/scripts/maps/SkyPillar_2F.inc | 2 +- data/scripts/maps/SkyPillar_4F.inc | 2 +- data/scripts/maps/SkyPillar_Top.inc | 4 +- data/scripts/maps/SlateportCity.inc | 14 +-- data/scripts/maps/SlateportCity_ContestLobby.inc | 6 +- data/scripts/maps/SlateportCity_Harbor.inc | 6 +- data/scripts/maps/SlateportCity_House1.inc | 6 +- .../maps/SlateportCity_OceanicMuseum_1F.inc | 8 +- .../maps/SlateportCity_OceanicMuseum_2F.inc | 10 +- data/scripts/maps/SlateportCity_PokemonFanClub.inc | 20 ++-- data/scripts/maps/SootopolisCity.inc | 18 ++-- data/scripts/maps/SootopolisCity_Gym_1F.inc | 18 ++-- data/scripts/maps/SootopolisCity_House1.inc | 2 +- data/scripts/maps/SootopolisCity_House4.inc | 2 +- data/scripts/maps/SouthernIsland_Exterior.inc | 2 +- data/scripts/maps/SouthernIsland_Interior.inc | 10 +- data/scripts/maps/Underwater_Route134.inc | 2 +- data/scripts/maps/Underwater_SeafloorCavern.inc | 2 +- data/scripts/maps/Underwater_SealedChamber.inc | 4 +- data/scripts/maps/Underwater_SootopolisCity.inc | 2 +- data/scripts/maps/UnknownMap_25_34.inc | 10 +- data/scripts/maps/VerdanturfTown_ContestLobby.inc | 6 +- .../maps/VerdanturfTown_FriendshipRatersHouse.inc | 4 +- data/scripts/maps/VictoryRoad_1F.inc | 2 +- data/scripts/mauville_man.inc | 14 +-- data/scripts/mystery_event_club.inc | 2 +- data/scripts/players_house.inc | 24 ++--- data/scripts/pokeblocks.inc | 16 ++-- data/scripts/safari_zone.inc | 6 +- data/scripts/tv.inc | 10 +- 180 files changed, 868 insertions(+), 866 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 685e53363..7e3408dfb 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -226,16 +226,16 @@ .2byte \var2 .endm - @ Calls the ASM routine stored at code. Script execution is blocked until the ASM returns (bx lr, mov pc, lr, etc.). Remember to add 1 to the offset when calling THUMB code. - .macro callasm code + @ Calls the native C function stored at `func`. + .macro callnative func .byte 0x23 - .4byte \code + .4byte \func .endm - @ Replaces a pointer in the script engine RAM with asm_pointer. - .macro jumpasm asm_pointer + @ Replaces the script with the function stored at `func`. Execution returns to the bytecode script when func returns TRUE. + .macro gotonative func .byte 0x24 - .4byte \asm_pointer + .4byte \func .endm @ Calls a special function; that is, a piece of ASM code designed for use by scripts and listed in a table of pointers. @@ -245,7 +245,7 @@ .endm @ Calls a special function. That function's output (if any) will be written to the variable you specify. - .macro specialval output, function + .macro specialvar output, function .byte 0x26 .2byte \output .2byte SPECIAL_\function @@ -257,7 +257,7 @@ .endm @ Blocks script execution for time (frames? milliseconds?). - .macro pause time + .macro delay time .byte 0x28 .2byte \time .endm @@ -281,33 +281,35 @@ .endm @ In FireRed, this command is a nop. - .macro compareflags + .macro initclock hour minute .byte 0x2c + .byte \hour + .byte \minute .endm @ In FireRed, this command is a nop. - .macro checkdailyflags + .macro dodailyevents .byte 0x2d .endm @ Resets the values of variables 0x8000, 0x8001, and 0x8002. Related to RTC in RSE? - .macro resetvars + .macro gettime .byte 0x2e .endm @ Plays the specified (sound_number) sound. Only one sound may play at a time, with newer ones interrupting older ones. - .macro playsfx sound_number + .macro playse sound_number .byte 0x2f .2byte \sound_number .endm @ Blocks script execution until the currently-playing sound (triggered by sound) finishes playing. - .macro checksound + .macro waitse .byte 0x30 .endm @ Plays the specified (fanfare_number) fanfare. - .macro fanfare fanfare_number + .macro playfanfare fanfare_number .byte 0x31 .2byte \fanfare_number .endm @@ -318,37 +320,37 @@ .endm @ Plays the specified (song_number) song. The byte is apparently supposed to be 0x00. - .macro playmusic song_number, unknown + .macro playbgm song_number, unknown .byte 0x33 .2byte \song_number .byte \unknown .endm @ Plays the specified (song_number) song. - .macro playmusicbattle song_number + .macro savebgm song_number .byte 0x34 .2byte \song_number .endm @ Crossfades the currently-playing song into the map's default song. - .macro fadedefault + .macro fadedefaultbgm .byte 0x35 .endm @ Crossfades the currently-playng song into the specified (song_number) song. - .macro fademusic song_number + .macro fadenewbgm song_number .byte 0x36 .2byte \song_number .endm @ Fades out the currently-playing song. - .macro fadeout speed + .macro fadeoutbgm speed .byte 0x37 .byte \speed .endm @ Fades the currently-playing song back in. - .macro fadein speed + .macro fadeinbgm speed .byte 0x38 .byte \speed .endm @@ -363,7 +365,7 @@ .endm @ Clone of warp that does not play a sound effect. - .macro warpmuted map, warp, X, Y + .macro warpsilent map, warp, X, Y .byte 0x3a map \map .byte \warp @@ -372,7 +374,7 @@ .endm @ Clone of warp that uses "a walking effect". - .macro warpwalk map, warp, X, Y + .macro warpdoor map, warp, X, Y .byte 0x3b map \map .byte \warp @@ -396,7 +398,7 @@ .endm @ Clone of warp. Used by an (unused?) Safari Zone script to return the player to the gatehouse and end the Safari Game. - .macro warp3 map, warp, X, Y + .macro setwarp map, warp, X, Y .byte 0x3e map \map .byte \warp @@ -405,7 +407,7 @@ .endm @ Sets a default warp place. If a warp tries to send the player to Warp 127 on Map 127.127, they will instead be sent here. Useful when a map has warps that need to go to script-controlled locations (i.e. elevators). - .macro warpplace map, warp, X, Y + .macro setdynamicwarp map, warp, X, Y .byte 0x3f map \map .byte \warp @@ -414,7 +416,7 @@ .endm @ Clone of warp3, except that this writes data to different offsets... - .macro warp4 map, warp, X, Y + .macro setdivewarp map, warp, X, Y .byte 0x40 map \map .byte \warp @@ -423,7 +425,7 @@ .endm @ Clone of warp3, except that this writes data to different offsets... - .macro warp5 map, warp, X, Y + .macro setholewarp map, warp, X, Y .byte 0x41 map \map .byte \warp @@ -504,7 +506,7 @@ .endm @ In FireRed, this command is a nop. (The argument is read, but not used for anything.) - .macro testdecor a + .macro hasdecor a .byte 0x4d .2byte \a .endm diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index 59d69d8bd..4277f1e6d 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -386,13 +386,13 @@ gStdScripts_End:: gUnknown_0815F36C:: @ 815F36C lockall - playsfx 2 + playse 2 message UnknownString_81A3A72 doanimation 61 waitstate waittext waitbutton - playsfx 5 + playse 5 goto EventScript_15F384 end @@ -448,12 +448,12 @@ EventScript_15F436: gUnknown_0815F43A:: @ 815F43A lockall message UnknownString_81A3A72 - playsfx 2 + playse 2 doanimation 61 waitstate waittext waitbutton - playsfx 5 + playse 5 goto EventScript_15F452 end @@ -941,7 +941,7 @@ gUnknown_0819F818:: @ 819F818 faceplayer move LAST_TALKED, Movement_19F8F0 waitmove 0 - specialval RESULT, ScrSpecial_HasTrainerBeenFought + specialvar RESULT, ScrSpecial_HasTrainerBeenFought compare_var_to_imm RESULT, 0 goto_if 5, EventScript_19F83F special PlayTrainerEncounterMusic @@ -955,7 +955,7 @@ gUnknown_0819F840:: @ 819F840 lock faceplayer call EventScript_19F8E5 - specialval RESULT, ScrSpecial_HasTrainerBeenFought + specialvar RESULT, ScrSpecial_HasTrainerBeenFought compare_var_to_imm RESULT, 0 goto_if 5, EventScript_19F877 special CheckForAlivePartyMons @@ -984,7 +984,7 @@ gUnknown_0819F878:: @ 819F878 gUnknown_0819F887:: @ 819F887 call EventScript_19F8E5 - specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag + specialvar RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare_var_to_imm RESULT, 0 goto_if_eq EventScript_19F8AD special PlayTrainerEncounterMusic @@ -1001,7 +1001,7 @@ EventScript_19F8AD: endtrainerbattle gUnknown_0819F8AE:: @ 819F8AE - specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag + specialvar RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare_var_to_imm RESULT, 0 goto_if_eq EventScript_19F8DD special CheckForAlivePartyMons @@ -1041,7 +1041,7 @@ EventScript_19F8F2: waittext waitbutton reptrainerbattle - specialval RESULT, ScrSpecial_GetTrainerBattleMode + specialvar RESULT, ScrSpecial_GetTrainerBattleMode compare_var_to_imm RESULT, 0 goto_if_eq EventScript_19F934 compare_var_to_imm RESULT, 2 @@ -1476,7 +1476,7 @@ OldaleTown_PokemonCenter_1F_EventScript_19FDC7:: @ 819FDC7 return OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE - specialval RESULT, IsPokerusInParty + specialvar RESULT, IsPokerusInParty compare_var_to_imm RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDEA compare_var_to_imm RESULT, 0 @@ -1562,11 +1562,11 @@ Std_ObtainItem_Fail: @ 819FECC return PlayGetItemFanfare: - fanfare 0x172 + playfanfare 0x172 return PlayGetTMHMFanfare: - fanfare 0x174 + playfanfare 0x174 return Std_ObtainDecoration: @ 819FEDA @@ -1584,7 +1584,7 @@ Std_ObtainDecoration_: @ 819FEE8 return Std_ObtainDecoration_Success: @ 819FF03 - fanfare 0x172 + playfanfare 0x172 message Message_ObtainedDecoration waitfanfare waittext @@ -1599,7 +1599,7 @@ Std_ObtainDecoration_Fail: @ 819FF1B Std_FindItem: @ 819FF21 lock faceplayer - checksound + waitse additem 0x8000, 0x8001 copyvar 0x8007, RESULT bufferitem 1, 0x8000 @@ -1628,7 +1628,7 @@ Std_FindItem_Fail: @ 819FF65 HiddenItemScript:: @ 819FF7B lockall - checksound + waitse additem 0x8005, 1 copyvar 0x8007, RESULT bufferitem 0x1, 0x8005 @@ -1681,7 +1681,7 @@ gUnknown_081A0009:: @ 81A0009 lockall setvar 0x8004, 0 special DoPCTurnOnEffect - playsfx 4 + playse 4 msgbox UnknownString_81A09EC, 4 goto EventScript_1A0023 end @@ -1704,7 +1704,7 @@ EventScript_1A0033: end EventScript_1A0070: - playsfx 2 + playse 2 msgbox UnknownString_81A0A54, 4 special PlayerPC waitstate @@ -1712,7 +1712,7 @@ EventScript_1A0070: end EventScript_1A0085: - playsfx 2 + playse 2 checkflag 2123 call_if 0, EventScript_1A00AC checkflag 2123 @@ -1733,7 +1733,7 @@ EventScript_1A00B5: EventScript_1A00BE: setvar 0x8004, 0 - playsfx 3 + playse 3 special DoPCTurnOffEffect releaseall end @@ -1741,7 +1741,7 @@ EventScript_1A00BE: EventScript_1A00CB: checkflag 2052 goto_if 0, EventScript_1A00BE - playsfx 2 + playse 2 special AccessHallOfFamePC waitstate goto EventScript_1A0033 @@ -1803,7 +1803,7 @@ RustboroCity_Gym_EventScript_1A00FB:: @ 81A00FB DewfordTown_EventScript_1A0102:: @ 81A0102 DewfordTown_Hall_EventScript_1A0102:: @ 81A0102 - checkdailyflags + dodailyevents setvar 0x8004, 0 special sub_80FA5BC return @@ -2101,7 +2101,7 @@ MossdeepCity_Gym_EventScript_1A02C5:: @ 81A02C5 PetalburgCity_Gym_EventScript_1A02C5:: @ 81A02C5 RustboroCity_Gym_EventScript_1A02C5:: @ 81A02C5 SootopolisCity_Gym_1F_EventScript_1A02C5:: @ 81A02C5 - fanfare 369 + playfanfare 369 waitfanfare return @@ -2110,7 +2110,7 @@ Route111_OldLadysRestStop_EventScript_1A02CA:: @ 81A02CA Route119_WeatherInstitute_1F_EventScript_1A02CA:: @ 81A02CA SSTidalRooms_EventScript_1A02CA:: @ 81A02CA fadescreen 1 - fanfare 368 + playfanfare 368 waitfanfare special ScrSpecial_HealPlayerParty fadescreen 0 @@ -2129,14 +2129,14 @@ DewfordTown_EventScript_1A02E7:: @ 81A02E7 Route104_EventScript_1A02E7:: @ 81A02E7 Route109_EventScript_1A02E7:: @ 81A02E7 setflag 0x4001 - playmusic 431, 0 + playbgm 431, 0 return DewfordTown_EventScript_1A02EF:: @ 81A02EF Route104_EventScript_1A02EF:: @ 81A02EF Route109_EventScript_1A02EF:: @ 81A02EF clearflag 0x4001 - fadedefault + fadedefaultbgm return LittlerootTown_ProfessorBirchsLab_EventScript_1A02F4:: @ 81A02F4 @@ -2210,7 +2210,7 @@ Route101_EventScript_1A03A5:: @ 81A03A5 EverGrandeCity_ChampionsRoom_EventScript_1A03B0:: @ 81A03B0 Route101_EventScript_1A03B0:: @ 81A03B0 setvar 0x8004, 0 - specialval RESULT, ScriptGetPokedexInfo + specialvar RESULT, ScriptGetPokedexInfo copyvar 0x8008, 0x8005 copyvar 0x8009, 0x8006 copyvar 0x800a, RESULT @@ -2221,7 +2221,7 @@ Route101_EventScript_1A03B0:: @ 81A03B0 compare_var_to_imm 0x800a, 0 goto_if_eq Route101_EventScript_1A14DC setvar 0x8004, 1 - specialval RESULT, ScriptGetPokedexInfo + specialvar RESULT, ScriptGetPokedexInfo copyvar 0x8008, 0x8005 copyvar 0x8009, 0x8006 buffernum 0, 0x8008 @@ -2232,7 +2232,7 @@ Route101_EventScript_1A03B0:: @ 81A03B0 BattleTower_Outside_EventScript_1A040E:: @ 81A040E LilycoveCity_Harbor_EventScript_1A040E:: @ 81A040E SlateportCity_Harbor_EventScript_1A040E:: @ 81A040E - pause 60 + delay 60 move 0x8004, SlateportCity_Harbor_Movement_1A041C waitmove 0 return @@ -2269,14 +2269,14 @@ RusturfTunnel_EventScript_1A0442:: @ 81A0442 return EventScript_1A0457: @ unreferenced? - pause 30 + delay 30 move 255, SlateportCity_OceanicMuseum_2F_Movement_1A0841 waitmove 0 spritevisible 255, 0, 0 - pause 30 + delay 30 move 255, Movement_1A047A waitmove 0 - pause 30 + delay 30 return Movement_1A047A: @@ -2289,14 +2289,14 @@ SouthernIsland_Exterior_EventScript_1A047C:: @ 81A047C call_if 1, BattleTower_Outside_EventScript_160B2F compare_var_to_imm FACING, 3 call_if 1, BattleTower_Outside_EventScript_160B3A - pause 30 + delay 30 spriteinvisible 255, 0, 0 call BattleTower_Outside_EventScript_1A040E return CaveOfOrigin_B4F_EventScript_1A04A0:: @ 81A04A0 lockall - checksound + waitse pokecry SPECIES_GROUDON_OR_KYOGRE, 2 waitpokecry setvar 0x4005, 1 @@ -2351,9 +2351,9 @@ MagmaHideout_B1F_EventScript_1A04FD:: @ 81A04FD lock faceplayer setwildbattle SPECIES_ELECTRODE, 30, ITEM_NONE - checksound + waitse pokecry SPECIES_ELECTRODE, 2 - pause 40 + delay 40 waitpokecry setflag 977 setflag 2145 @@ -2367,9 +2367,9 @@ MagmaHideout_B1F_EventScript_1A051B:: @ 81A051B lock faceplayer setwildbattle SPECIES_ELECTRODE, 30, ITEM_NONE - checksound + waitse pokecry SPECIES_ELECTRODE, 2 - pause 40 + delay 40 waitpokecry setflag 978 setflag 2145 @@ -2450,9 +2450,9 @@ Route119_EventScript_1A05C3:: @ 81A05C3 waitmove 0 move LAST_TALKED, Route119_Movement_1A0662 waitmove 0 - checksound + waitse pokecry SPECIES_KECLEON, 2 - pause 40 + delay 40 waitpokecry setwildbattle SPECIES_KECLEON, 30, ITEM_NONE compare_var_to_imm 0x8004, 1 @@ -2543,7 +2543,7 @@ GraniteCave_StevensRoom_EventScript_1A067F:: @ 81A067F MtPyre_Summit_EventScript_1A067F:: @ 81A067F SlateportCity_OceanicMuseum_2F_EventScript_1A067F:: @ 81A067F bufferitem 0, 0x8004 - fanfare 372 + playfanfare 372 message FallarborTown_House1_Text_1A1498 waittext waitfanfare @@ -2556,7 +2556,7 @@ EverGrandeCity_PhoebesRoom_EventScript_1A0693:: @ 81A0693 EverGrandeCity_SidneysRoom_EventScript_1A0693:: @ 81A0693 move 255, EverGrandeCity_SidneysRoom_Movement_1A0853 waitmove 0 - playsfx 8 + playse 8 setmaptile 6, 1, 836, 0 setmaptile 6, 2, 837, 0 setmaptile 0, 2, 734, 1 @@ -2578,7 +2578,7 @@ EverGrandeCity_PhoebesRoom_EventScript_1A0710:: @ 81A0710 EverGrandeCity_SidneysRoom_EventScript_1A0710:: @ 81A0710 move 255, EverGrandeCity_SidneysRoom_Movement_1A0847 waitmove 0 - playsfx 52 + playse 52 setmaptile 5, 12, 518, 1 setmaptile 6, 12, 518, 1 setmaptile 7, 12, 518, 1 @@ -3732,7 +3732,7 @@ EventScript_1A2DAA: EventScript_1A2DB8: closebutton - playsfx 9 + playse 9 setvar 0x4097, 0 setflag 173 special sub_80BB8CC @@ -3752,7 +3752,7 @@ SecretBase_RedCave1_EventScript_1A2DDE:: @ 81A2DDE compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A2E08 closebutton - playsfx 9 + playse 9 special sub_80BC440 end @@ -3771,7 +3771,7 @@ SecretBase_RedCave1_Movement_1A2E11:: @ 81A2E11 gUnknown_081A2E14:: @ 81A2E14 lockall setvar 0x4097, 1 - playsfx 9 + playse 9 special sub_80BC114 compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2E38 @@ -4512,7 +4512,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADF96:: @ 81ADF96 SlateportCity_PokemonFanClub_EventScript_1ADFA0:: @ 81ADFA0 lock faceplayer - specialval RESULT, sub_80BF544 + specialvar RESULT, sub_80BF544 compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADE4D setvar 0x8005, 3 @@ -4902,22 +4902,22 @@ SkyPillar_4F_MapScript1_1C6BBF:: @ 81C6BBF S_FallDownHole:: @ 81C6BC5 lockall - pause 20 + delay 20 move 255, GraniteCave_B1F_Movement_1C6BF7 waitmove 0 - playsfx 43 - pause 60 + playse 43 + delay 60 warphole UNDEFINED waitstate end gUnknown_081C6BDE:: @ 81C6BDE lockall - pause 20 + delay 20 move 255, GraniteCave_B1F_Movement_1C6BF7 waitmove 0 - playsfx 43 - pause 60 + playse 43 + delay 60 special sp13F_fall_to_last_warp waitstate end diff --git a/data-de/field_move_scripts.inc b/data-de/field_move_scripts.inc index c5dae9c50..503aa53e5 100644 --- a/data-de/field_move_scripts.inc +++ b/data-de/field_move_scripts.inc @@ -90,7 +90,7 @@ DoRockSmashMovement: @ 81B0F0C move LAST_TALKED, RockSmashMovement waitmove 0 disappear LAST_TALKED - specialval RESULT, sub_810F5BC + specialvar RESULT, sub_810F5BC compare_var_to_imm RESULT, 1 goto_if_eq DoRockSmashMovement_Done special ScrSpecial_RockSmashWildEncounter diff --git a/data/event_scripts.s b/data/event_scripts.s index dae57cfd6..bd14ae5d3 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -386,13 +386,13 @@ gStdScripts_End:: gUnknown_0815F36C:: @ 815F36C lockall - playsfx 2 + playse 2 message UnknownString_81A3A72 doanimation 61 waitstate waittext waitbutton - playsfx 5 + playse 5 goto EventScript_15F384 end @@ -448,12 +448,12 @@ EventScript_15F436: gUnknown_0815F43A:: @ 815F43A lockall message UnknownString_81A3A72 - playsfx 2 + playse 2 doanimation 61 waitstate waittext waitbutton - playsfx 5 + playse 5 goto EventScript_15F452 end @@ -935,7 +935,7 @@ gUnknown_0819F818:: @ 819F818 faceplayer move LAST_TALKED, Movement_19F8F0 waitmove 0 - specialval RESULT, ScrSpecial_HasTrainerBeenFought + specialvar RESULT, ScrSpecial_HasTrainerBeenFought compare_var_to_imm RESULT, 0 goto_if 5, EventScript_19F83F special PlayTrainerEncounterMusic @@ -949,7 +949,7 @@ gUnknown_0819F840:: @ 819F840 lock faceplayer call EventScript_19F8E5 - specialval RESULT, ScrSpecial_HasTrainerBeenFought + specialvar RESULT, ScrSpecial_HasTrainerBeenFought compare_var_to_imm RESULT, 0 goto_if 5, EventScript_19F877 special CheckForAlivePartyMons @@ -978,7 +978,7 @@ gUnknown_0819F878:: @ 819F878 gUnknown_0819F887:: @ 819F887 call EventScript_19F8E5 - specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag + specialvar RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare_var_to_imm RESULT, 0 goto_if_eq EventScript_19F8AD special PlayTrainerEncounterMusic @@ -995,7 +995,7 @@ EventScript_19F8AD: endtrainerbattle gUnknown_0819F8AE:: @ 819F8AE - specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag + specialvar RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare_var_to_imm RESULT, 0 goto_if_eq EventScript_19F8DD special CheckForAlivePartyMons @@ -1035,7 +1035,7 @@ EventScript_19F8F2: waittext waitbutton reptrainerbattle - specialval RESULT, ScrSpecial_GetTrainerBattleMode + specialvar RESULT, ScrSpecial_GetTrainerBattleMode compare_var_to_imm RESULT, 0 goto_if_eq EventScript_19F934 compare_var_to_imm RESULT, 2 @@ -1470,7 +1470,7 @@ dont_heal_party:: @ 819FDC7 return OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE - specialval RESULT, IsPokerusInParty + specialvar RESULT, IsPokerusInParty compare_var_to_imm RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDEA compare_var_to_imm RESULT, 0 @@ -1556,11 +1556,11 @@ Std_ObtainItem_Fail: @ 819FECC return PlayGetItemFanfare: - fanfare 0x172 + playfanfare 0x172 return PlayGetTMHMFanfare: - fanfare 0x174 + playfanfare 0x174 return Std_ObtainDecoration: @ 819FEDA @@ -1578,7 +1578,7 @@ Std_ObtainDecoration_: @ 819FEE8 return Std_ObtainDecoration_Success: @ 819FF03 - fanfare 0x172 + playfanfare 0x172 message Message_ObtainedDecoration waitfanfare waittext @@ -1593,7 +1593,7 @@ Std_ObtainDecoration_Fail: @ 819FF1B Std_FindItem: @ 819FF21 lock faceplayer - checksound + waitse additem 0x8000, 0x8001 copyvar 0x8007, RESULT bufferitem 1, 0x8000 @@ -1622,7 +1622,7 @@ Std_FindItem_Fail: @ 819FF65 HiddenItemScript:: @ 819FF7B lockall - checksound + waitse additem 0x8005, 1 copyvar 0x8007, RESULT bufferitem 0x1, 0x8005 @@ -1675,7 +1675,7 @@ gUnknown_081A0009:: @ 81A0009 lockall setvar 0x8004, 0 special DoPCTurnOnEffect - playsfx 4 + playse 4 msgbox UnknownString_81A09EC, 4 goto EventScript_1A0023 end @@ -1698,7 +1698,7 @@ EventScript_1A0033: end EventScript_1A0070: - playsfx 2 + playse 2 msgbox UnknownString_81A0A54, 4 special PlayerPC waitstate @@ -1706,7 +1706,7 @@ EventScript_1A0070: end EventScript_1A0085: - playsfx 2 + playse 2 checkflag 2123 call_if 0, EventScript_1A00AC checkflag 2123 @@ -1727,7 +1727,7 @@ EventScript_1A00B5: EventScript_1A00BE: setvar 0x8004, 0 - playsfx 3 + playse 3 special DoPCTurnOffEffect releaseall end @@ -1735,7 +1735,7 @@ EventScript_1A00BE: EventScript_1A00CB: checkflag 2052 goto_if 0, EventScript_1A00BE - playsfx 2 + playse 2 special AccessHallOfFamePC waitstate goto EventScript_1A0033 @@ -1797,7 +1797,7 @@ RustboroCity_Gym_EventScript_1A00FB:: @ 81A00FB DewfordTown_EventScript_1A0102:: @ 81A0102 DewfordTown_Hall_EventScript_1A0102:: @ 81A0102 - checkdailyflags + dodailyevents setvar 0x8004, 0 special sub_80FA5BC return @@ -2095,7 +2095,7 @@ MossdeepCity_Gym_EventScript_1A02C5:: @ 81A02C5 PetalburgCity_Gym_EventScript_1A02C5:: @ 81A02C5 RustboroCity_Gym_EventScript_1A02C5:: @ 81A02C5 SootopolisCity_Gym_1F_EventScript_1A02C5:: @ 81A02C5 - fanfare 369 + playfanfare 369 waitfanfare return @@ -2104,7 +2104,7 @@ Route111_OldLadysRestStop_EventScript_1A02CA:: @ 81A02CA Route119_WeatherInstitute_1F_EventScript_1A02CA:: @ 81A02CA SSTidalRooms_EventScript_1A02CA:: @ 81A02CA fadescreen 1 - fanfare 368 + playfanfare 368 waitfanfare special ScrSpecial_HealPlayerParty fadescreen 0 @@ -2123,14 +2123,14 @@ DewfordTown_EventScript_1A02E7:: @ 81A02E7 Route104_EventScript_1A02E7:: @ 81A02E7 Route109_EventScript_1A02E7:: @ 81A02E7 setflag 0x4001 - playmusic 431, 0 + playbgm 431, 0 return DewfordTown_EventScript_1A02EF:: @ 81A02EF Route104_EventScript_1A02EF:: @ 81A02EF Route109_EventScript_1A02EF:: @ 81A02EF clearflag 0x4001 - fadedefault + fadedefaultbgm return LittlerootTown_ProfessorBirchsLab_EventScript_1A02F4:: @ 81A02F4 @@ -2204,7 +2204,7 @@ Route101_EventScript_1A03A5:: @ 81A03A5 EverGrandeCity_ChampionsRoom_EventScript_1A03B0:: @ 81A03B0 Route101_EventScript_1A03B0:: @ 81A03B0 setvar 0x8004, 0 - specialval RESULT, ScriptGetPokedexInfo + specialvar RESULT, ScriptGetPokedexInfo copyvar 0x8008, 0x8005 copyvar 0x8009, 0x8006 copyvar 0x800a, RESULT @@ -2215,7 +2215,7 @@ Route101_EventScript_1A03B0:: @ 81A03B0 compare_var_to_imm 0x800a, 0 goto_if_eq Route101_EventScript_1A14DC setvar 0x8004, 1 - specialval RESULT, ScriptGetPokedexInfo + specialvar RESULT, ScriptGetPokedexInfo copyvar 0x8008, 0x8005 copyvar 0x8009, 0x8006 buffernum 0, 0x8008 @@ -2226,7 +2226,7 @@ Route101_EventScript_1A03B0:: @ 81A03B0 BattleTower_Outside_EventScript_1A040E:: @ 81A040E LilycoveCity_Harbor_EventScript_1A040E:: @ 81A040E SlateportCity_Harbor_EventScript_1A040E:: @ 81A040E - pause 60 + delay 60 move 0x8004, SlateportCity_Harbor_Movement_1A041C waitmove 0 return @@ -2263,14 +2263,14 @@ RusturfTunnel_EventScript_1A0442:: @ 81A0442 return EventScript_1A0457: @ unreferenced? - pause 30 + delay 30 move 255, SlateportCity_OceanicMuseum_2F_Movement_1A0841 waitmove 0 spritevisible 255, 0, 0 - pause 30 + delay 30 move 255, Movement_1A047A waitmove 0 - pause 30 + delay 30 return Movement_1A047A: @@ -2283,14 +2283,14 @@ SouthernIsland_Exterior_EventScript_1A047C:: @ 81A047C call_if 1, BattleTower_Outside_EventScript_160B2F compare_var_to_imm FACING, 3 call_if 1, BattleTower_Outside_EventScript_160B3A - pause 30 + delay 30 spriteinvisible 255, 0, 0 call BattleTower_Outside_EventScript_1A040E return CaveOfOrigin_B4F_EventScript_1A04A0:: @ 81A04A0 lockall - checksound + waitse pokecry SPECIES_GROUDON_OR_KYOGRE, 2 waitpokecry setvar 0x4005, 1 @@ -2345,9 +2345,9 @@ MagmaHideout_B1F_EventScript_1A04FD:: @ 81A04FD lock faceplayer setwildbattle SPECIES_ELECTRODE, 30, ITEM_NONE - checksound + waitse pokecry SPECIES_ELECTRODE, 2 - pause 40 + delay 40 waitpokecry setflag 977 setflag 2145 @@ -2361,9 +2361,9 @@ MagmaHideout_B1F_EventScript_1A051B:: @ 81A051B lock faceplayer setwildbattle SPECIES_ELECTRODE, 30, ITEM_NONE - checksound + waitse pokecry SPECIES_ELECTRODE, 2 - pause 40 + delay 40 waitpokecry setflag 978 setflag 2145 @@ -2444,9 +2444,9 @@ Route119_EventScript_1A05C3:: @ 81A05C3 waitmove 0 move LAST_TALKED, Route119_Movement_1A0662 waitmove 0 - checksound + waitse pokecry SPECIES_KECLEON, 2 - pause 40 + delay 40 waitpokecry setwildbattle SPECIES_KECLEON, 30, ITEM_NONE compare_var_to_imm 0x8004, 1 @@ -2537,7 +2537,7 @@ GraniteCave_StevensRoom_EventScript_1A067F:: @ 81A067F MtPyre_Summit_EventScript_1A067F:: @ 81A067F SlateportCity_OceanicMuseum_2F_EventScript_1A067F:: @ 81A067F bufferitem 0, 0x8004 - fanfare 372 + playfanfare 372 message FallarborTown_House1_Text_1A1498 waittext waitfanfare @@ -2550,7 +2550,7 @@ EverGrandeCity_PhoebesRoom_EventScript_1A0693:: @ 81A0693 EverGrandeCity_SidneysRoom_EventScript_1A0693:: @ 81A0693 move 255, EverGrandeCity_SidneysRoom_Movement_1A0853 waitmove 0 - playsfx 8 + playse 8 setmaptile 6, 1, 836, 0 setmaptile 6, 2, 837, 0 setmaptile 0, 2, 734, 1 @@ -2572,7 +2572,7 @@ EverGrandeCity_PhoebesRoom_EventScript_1A0710:: @ 81A0710 EverGrandeCity_SidneysRoom_EventScript_1A0710:: @ 81A0710 move 255, EverGrandeCity_SidneysRoom_Movement_1A0847 waitmove 0 - playsfx 52 + playse 52 setmaptile 5, 12, 518, 1 setmaptile 6, 12, 518, 1 setmaptile 7, 12, 518, 1 @@ -3711,7 +3711,7 @@ EventScript_1A2DAA: EventScript_1A2DB8: closebutton - playsfx 9 + playse 9 setvar 0x4097, 0 setflag 173 special sub_80BB8CC @@ -3731,7 +3731,7 @@ SecretBase_RedCave1_EventScript_1A2DDE:: @ 81A2DDE compare_var_to_imm RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A2E08 closebutton - playsfx 9 + playse 9 special sub_80BC440 end @@ -3750,7 +3750,7 @@ SecretBase_RedCave1_Movement_1A2E11:: @ 81A2E11 gUnknown_081A2E14:: @ 81A2E14 lockall setvar 0x4097, 1 - playsfx 9 + playse 9 special sub_80BC114 compare_var_to_imm RESULT, 0 goto_if_eq EventScript_1A2E38 @@ -4480,7 +4480,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADF96:: @ 81ADF96 SlateportCity_PokemonFanClub_EventScript_1ADFA0:: @ 81ADFA0 lock faceplayer - specialval RESULT, sub_80BF544 + specialvar RESULT, sub_80BF544 compare_var_to_imm RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADE4D setvar 0x8005, 3 @@ -4870,22 +4870,22 @@ SkyPillar_4F_MapScript1_1C6BBF:: @ 81C6BBF S_FallDownHole:: @ 81C6BC5 lockall - pause 20 + delay 20 move 255, GraniteCave_B1F_Movement_1C6BF7 waitmove 0 - playsfx 43 - pause 60 + playse 43 + delay 60 warphole UNDEFINED waitstate end gUnknown_081C6BDE:: @ 81C6BDE lockall - pause 20 + delay 20 move 255, GraniteCave_B1F_Movement_1C6BF7 waitmove 0 - playsfx 43 - pause 60 + playse 43 + delay 60 special sp13F_fall_to_last_warp waitstate end diff --git a/data/field_move_scripts.inc b/data/field_move_scripts.inc index 3716eab3c..ad87919b5 100644 --- a/data/field_move_scripts.inc +++ b/data/field_move_scripts.inc @@ -87,7 +87,7 @@ DoRockSmashMovement: @ 81B0F0C move LAST_TALKED, RockSmashMovement waitmove 0 disappear LAST_TALKED - specialval RESULT, sub_810F5BC + specialvar RESULT, sub_810F5BC compare_var_to_imm RESULT, 1 goto_if_eq DoRockSmashMovement_Done special ScrSpecial_RockSmashWildEncounter diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc index 92c5f83b3..573144019 100644 --- a/data/scripts/berry_tree.inc +++ b/data/scripts/berry_tree.inc @@ -21,7 +21,7 @@ Route102_EventScript_1A1533:: @ 81A1533 Route102_EventScript_1A153D:: @ 81A153D lock faceplayer - specialval RESULT, PlayerHasBerries + specialvar RESULT, PlayerHasBerries compare_var_to_imm RESULT, 1 goto_if_eq Route102_EventScript_1A1558 message Route102_Text_1A16B6 @@ -113,7 +113,7 @@ Route102_EventScript_1A161D:: @ 81A161D goto_if_eq Route102_EventScript_1A1642 special FieldObjectInteractionRemoveBerryTree message Route102_Text_1A17FD - fanfare 387 + playfanfare 387 waittext waitfanfare waitbutton diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index a93a5f044..937ede6cf 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -136,7 +136,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3E30:: @ 81A3E30 waitmove 0 message OldaleTown_PokemonCenter_2F_Text_1A4E50 waittext - playsfx 21 + playse 21 message OldaleTown_PokemonCenter_2F_Text_1A4E79 waittext move 255, OldaleTown_PokemonCenter_2F_Movement_1A4358 @@ -223,7 +223,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3F5E:: @ 81A3F5E waittext setmaptile 5, 3, 514, 0 special DrawWholeMapView - pause 60 + delay 60 move LAST_TALKED, OldaleTown_PokemonCenter_2F_Movement_1A4356 waitmove 0 closebutton @@ -388,7 +388,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4166:: @ 81A4166 waittext setmaptile 8, 3, 514, 0 special DrawWholeMapView - pause 60 + delay 60 move LAST_TALKED, OldaleTown_PokemonCenter_2F_Movement_1A4356 waitmove 0 closebutton @@ -405,10 +405,10 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4166:: @ 81A4166 goto OldaleTown_PokemonCenter_2F_EventScript_1A4325 OldaleTown_PokemonCenter_2F_EventScript_1A41BB:: @ 81A41BB - specialval RESULT, CalculatePlayerPartyCount + specialvar RESULT, CalculatePlayerPartyCount compare_var_to_imm RESULT, 2 goto_if 0, OldaleTown_PokemonCenter_2F_EventScript_1A41E1 - specialval RESULT, GetNameOfEnigmaBerryInPlayerParty + specialvar RESULT, GetNameOfEnigmaBerryInPlayerParty compare_var_to_imm RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A41EE setvar RESULT, 1 @@ -486,7 +486,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4294:: @ 81A4294 waittext setmaptile 11, 3, 514, 0 special DrawWholeMapView - pause 60 + delay 60 move LAST_TALKED, OldaleTown_PokemonCenter_2F_Movement_1A4356 waitmove 0 closebutton diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index afac5e6ed..3588aff89 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -345,13 +345,13 @@ LinkContestRoom1_EventScript_1A5323:: @ 81A5323 waitmove 0 releaseall reappear 13 - playsfx 10 + playse 10 lockall move 0x800b, LinkContestRoom1_Movement_1A5D9C waitmove 0 releaseall addvar 0x8006, -1 - playsfx 15 + playse 15 special ShowContestEntryMonPic call LinkContestRoom1_EventScript_1A535E return @@ -371,14 +371,14 @@ LinkContestRoom1_EventScript_1A5370:: @ 81A5370 LinkContestRoom1_EventScript_1A5377:: @ 81A5377 call LinkContestRoom1_EventScript_1A53B3 call LinkContestRoom1_EventScript_1A53CE - playsfx 223 + playse 223 waittext call LinkContestRoom1_EventScript_1A5A90 move 1, LinkContestRoom1_Movement_1A5D9F waitmove 0 move 2, LinkContestRoom1_Movement_1A5DA1 waitmove 0 - pause 20 + delay 20 move 1, LinkContestRoom1_Movement_1A5D8F move 2, LinkContestRoom1_Movement_1A5D8F waitmove 0 @@ -408,7 +408,7 @@ LinkContestRoom1_EventScript_1A53DF:: @ 81A53DF LinkContestRoom1_EventScript_1A53E5:: @ 81A53E5 move 1, LinkContestRoom1_Movement_1A5DAF waitmove 0 - playsfx 223 + playse 223 call LinkContestRoom1_EventScript_1A5AE4 move 9, LinkContestRoom1_Movement_1A5DB7 move 12, LinkContestRoom1_Movement_1A5DBB @@ -621,8 +621,8 @@ LinkContestRoom1_EventScript_1A5760:: @ 81A5760 compare_var_to_imm 0x4001, 1 goto_if_eq LinkContestRoom1_EventScript_1A5783 move 6, LinkContestRoom1_Movement_1A5D8D - playsfx 21 - pause 14 + playse 21 + delay 14 setvar 0x4001, 1 addvar 0x4000, 65535 return @@ -634,8 +634,8 @@ LinkContestRoom1_EventScript_1A5784:: @ 81A5784 compare_var_to_imm 0x4002, 1 goto_if_eq LinkContestRoom1_EventScript_1A57A7 move 12, LinkContestRoom1_Movement_1A5D8D - playsfx 21 - pause 14 + playse 21 + delay 14 setvar 0x4002, 1 addvar 0x4000, 65535 return @@ -647,8 +647,8 @@ LinkContestRoom1_EventScript_1A57A8:: @ 81A57A8 compare_var_to_imm 0x4003, 1 goto_if_eq LinkContestRoom1_EventScript_1A57CB move 7, LinkContestRoom1_Movement_1A5D8D - playsfx 21 - pause 14 + playse 21 + delay 14 setvar 0x4003, 1 addvar 0x4000, 65535 return @@ -660,8 +660,8 @@ LinkContestRoom1_EventScript_1A57CC:: @ 81A57CC compare_var_to_imm 0x4004, 1 goto_if_eq LinkContestRoom1_EventScript_1A57EF move 8, LinkContestRoom1_Movement_1A5D8D - playsfx 21 - pause 14 + playse 21 + delay 14 setvar 0x4004, 1 addvar 0x4000, 65535 return @@ -673,8 +673,8 @@ LinkContestRoom1_EventScript_1A57F0:: @ 81A57F0 compare_var_to_imm 0x4005, 1 goto_if_eq LinkContestRoom1_EventScript_1A5813 move 9, LinkContestRoom1_Movement_1A5D8D - playsfx 21 - pause 14 + playse 21 + delay 14 setvar 0x4005, 1 addvar 0x4000, 65535 return @@ -686,8 +686,8 @@ LinkContestRoom1_EventScript_1A5814:: @ 81A5814 compare_var_to_imm 0x4006, 1 goto_if_eq LinkContestRoom1_EventScript_1A5837 move 10, LinkContestRoom1_Movement_1A5D8D - playsfx 21 - pause 14 + playse 21 + delay 14 setvar 0x4006, 1 addvar 0x4000, 65535 return @@ -699,8 +699,8 @@ LinkContestRoom1_EventScript_1A5838:: @ 81A5838 compare_var_to_imm 0x4007, 1 goto_if_eq LinkContestRoom1_EventScript_1A585B move 11, LinkContestRoom1_Movement_1A5D8D - playsfx 21 - pause 14 + playse 21 + delay 14 setvar 0x4007, 1 addvar 0x4000, 65535 return @@ -712,8 +712,8 @@ LinkContestRoom1_EventScript_1A585C:: @ 81A585C compare_var_to_imm 0x4008, 1 goto_if_eq LinkContestRoom1_EventScript_1A587F move 15, LinkContestRoom1_Movement_1A5D8D - playsfx 21 - pause 14 + playse 21 + delay 14 setvar 0x4008, 1 addvar 0x4000, 65535 return @@ -805,7 +805,7 @@ LinkContestRoom1_EventScript_1A594A:: @ 81A594A setvar 0x4009, 1 showcontestresults setvar 0x4009, 0 - playmusic 439, 0 + playbgm 439, 0 return LinkContestRoom1_EventScript_1A5984:: @ 81A5984 @@ -817,7 +817,7 @@ LinkContestRoom1_EventScript_1A5984:: @ 81A5984 LinkContestRoom1_EventScript_1A5998:: @ 81A5998 message2 LinkContestRoom1_Text_1A6C06 waittext - pause 30 + delay 30 return LinkContestRoom1_EventScript_1A59A2:: @ 81A59A2 @@ -829,7 +829,7 @@ LinkContestRoom1_EventScript_1A59A2:: @ 81A59A2 LinkContestRoom1_EventScript_1A59B6:: @ 81A59B6 message2 LinkContestRoom1_Text_1A6C21 waittext - pause 30 + delay 30 return LinkContestRoom1_EventScript_1A59C0:: @ 81A59C0 @@ -841,7 +841,7 @@ LinkContestRoom1_EventScript_1A59C0:: @ 81A59C0 LinkContestRoom1_EventScript_1A59D4:: @ 81A59D4 message2 LinkContestRoom1_Text_1A6C9D waittext - pause 30 + delay 30 return LinkContestRoom1_EventScript_1A59DE:: @ 81A59DE @@ -853,7 +853,7 @@ LinkContestRoom1_EventScript_1A59DE:: @ 81A59DE LinkContestRoom1_EventScript_1A59F2:: @ 81A59F2 message2 LinkContestRoom1_Text_1A6D16 waittext - pause 30 + delay 30 return LinkContestRoom1_EventScript_1A59FC:: @ 81A59FC @@ -890,7 +890,7 @@ LinkContestRoom1_EventScript_1A5A49:: @ 81A5A49 call LinkContestRoom1_EventScript_1A5A75 move 0x4003, LinkContestRoom1_Movement_1A5D99 waitmove 0 - playsfx 223 + playse 223 setvar 0x4001, 0 return @@ -913,14 +913,14 @@ LinkContestRoom1_EventScript_1A5A90:: @ 81A5A90 move 9, LinkContestRoom1_Movement_1A5DB7 move 12, LinkContestRoom1_Movement_1A5DBB move 7, LinkContestRoom1_Movement_1A5DB7 - pause 30 + delay 30 move 10, LinkContestRoom1_Movement_1A5DAF move 11, LinkContestRoom1_Movement_1A5DBB move 6, LinkContestRoom1_Movement_1A5DB3 move 8, LinkContestRoom1_Movement_1A5DAF compare_var_to_imm 0x4001, 4 goto_if 5, LinkContestRoom1_EventScript_1A5A90 - pause 30 + delay 30 return LinkContestRoom1_EventScript_1A5AE4:: @ 81A5AE4 @@ -939,7 +939,7 @@ LinkContestRoom1_EventScript_1A5AE4:: @ 81A5AE4 vspriteface 25, 4 vspriteface 27, 3 vspriteface 28, 4 - pause 10 + delay 10 vspriteface 0, 4 vspriteface 2, 4 vspriteface 4, 4 @@ -955,7 +955,7 @@ LinkContestRoom1_EventScript_1A5AE4:: @ 81A5AE4 vspriteface 25, 2 vspriteface 27, 2 vspriteface 28, 2 - pause 10 + delay 10 vspriteface 1, 2 vspriteface 3, 2 vspriteface 5, 2 @@ -972,7 +972,7 @@ LinkContestRoom1_EventScript_1A5AE4:: @ 81A5AE4 vspriteface 26, 4 vspriteface 29, 3 vspriteface 30, 3 - pause 10 + delay 10 vspriteface 1, 4 vspriteface 3, 4 vspriteface 5, 4 @@ -989,7 +989,7 @@ LinkContestRoom1_EventScript_1A5AE4:: @ 81A5AE4 vspriteface 26, 2 vspriteface 29, 2 vspriteface 30, 2 - pause 10 + delay 10 return LinkContestRoom1_EventScript_1A5BAB:: @ 81A5BAB @@ -1002,10 +1002,10 @@ LinkContestRoom1_EventScript_1A5BAB:: @ 81A5BAB waittext call LinkContestRoom1_EventScript_1A5C7F call LinkContestRoom1_EventScript_1A5CE5 - playsfx 223 + playse 223 setvar 0x4001, 0 call LinkContestRoom1_EventScript_1A5A90 - pause 30 + delay 30 special sub_80C4CF8 compare_var_to_imm 0x8004, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C46 @@ -1014,14 +1014,14 @@ LinkContestRoom1_EventScript_1A5BAB:: @ 81A5BAB LinkContestRoom1_EventScript_1A5BF6:: @ 81A5BF6 inccounter GAME_STAT_WON_CONTEST msgbox LinkContestRoom1_Text_1A6DF1, 3 - pause 90 + delay 90 special sub_80C4CF8 compare_var_to_imm 0x8004, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C46 return LinkContestRoom1_EventScript_1A5C12:: @ 81A5C12 - specialval RESULT, sub_80C4440 + specialvar RESULT, sub_80C4440 compare_var_to_imm RESULT, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C23 return @@ -1050,7 +1050,7 @@ LinkContestRoom1_EventScript_1A5C46:: @ 81A5C46 return LinkContestRoom1_EventScript_1A5C4C:: @ 81A5C4C - pause 60 + delay 60 call LinkContestRoom1_EventScript_1A5C6A special sub_80C4CF8 compare_var_to_imm 0x8004, 1 @@ -1120,7 +1120,7 @@ LinkContestRoom1_EventScript_1A5CFC:: @ 81A5CFC compare_var_to_imm 0x4088, 2 call_if 1, LinkContestRoom1_EventScript_1A5C42 inccounter GAME_STAT_WON_CONTEST - specialval RESULT, sub_80C4440 + specialvar RESULT, sub_80C4440 compare_var_to_imm RESULT, 0 goto_if_eq LinkContestRoom1_EventScript_1A5D5B compare_var_to_imm CONTEST_RANK, 3 @@ -1146,7 +1146,7 @@ LinkContestRoom1_EventScript_1A5D5B:: @ 81A5D5B setflag 2107 lockall msgbox LinkContestRoom1_Text_1A6D6A, 4 - fanfare 370 + playfanfare 370 msgbox LinkContestRoom1_Text_1A6D96, 4 waitfanfare special sub_80C4858 diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc index acb87170a..b2d83196e 100644 --- a/data/scripts/day_care.inc +++ b/data/scripts/day_care.inc @@ -2,7 +2,7 @@ Route117_EventScript_1B222D:: @ 81B222D lock faceplayer special sp0B5_daycare - specialval RESULT, sp0B6_daycare + specialvar RESULT, sp0B6_daycare compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_1B2262 compare_var_to_imm RESULT, 2 @@ -27,7 +27,7 @@ Route117_EventScript_1B2262:: @ 81B2262 end Route117_EventScript_1B2298:: @ 81B2298 - specialval RESULT, CalculatePlayerPartyCount + specialvar RESULT, CalculatePlayerPartyCount compare_var_to_imm RESULT, 6 goto_if 5, Route117_EventScript_1B22B2 msgbox Route117_Text_1B2766, 4 @@ -36,7 +36,7 @@ Route117_EventScript_1B2298:: @ 81B2298 Route117_EventScript_1B22B2:: @ 81B22B2 message Route117_Text_1B27A2 - fanfare 367 + playfanfare 367 waitfanfare waittext waitbutton @@ -47,7 +47,7 @@ Route117_EventScript_1B22B2:: @ 81B22B2 end Route117_EventScript_1B22CD:: @ 81B22CD - specialval RESULT, sub_8042B4C + specialvar RESULT, sub_8042B4C compare_var_to_imm RESULT, 1 call_if 1, Route117_EventScript_1B22DE return @@ -81,7 +81,7 @@ Route117_EventScript_1B22FE:: @ 81B22FE Route117_PokemonDayCare_EventScript_1B2327:: @ 81B2327 lock faceplayer - specialval RESULT, sp0B6_daycare + specialvar RESULT, sp0B6_daycare compare_var_to_imm RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B2407 compare_var_to_imm RESULT, 2 @@ -96,7 +96,7 @@ Route117_PokemonDayCare_EventScript_1B2327:: @ 81B2327 end Route117_PokemonDayCare_EventScript_1B236C:: @ 81B236C - specialval RESULT, sub_8095B6C + specialvar RESULT, sub_8095B6C compare_var_to_imm RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B23F3 msgbox Route117_PokemonDayCare_Text_1B2947, 4 @@ -105,17 +105,17 @@ Route117_PokemonDayCare_EventScript_1B236C:: @ 81B236C waitstate compare_var_to_imm 0x8004, 255 goto_if_eq Route117_PokemonDayCare_EventScript_1B23D0 - specialval RESULT, sub_8095C10 + specialvar RESULT, sub_8095C10 compare_var_to_imm RESULT, 0 goto_if_eq Route117_PokemonDayCare_EventScript_1B23FD - specialval 0x8005, sub_8042328 - checksound + specialvar 0x8005, sub_8042328 + waitse pokecry 0x8005, 0 msgbox Route117_PokemonDayCare_Text_1B296E, 4 waitpokecry special Daycare_SendPokemon_Special inccounter GAME_STAT_USED_DAYCARE - specialval RESULT, sp0B6_daycare + specialvar RESULT, sp0B6_daycare compare_var_to_imm RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B23DA release @@ -153,7 +153,7 @@ Route117_PokemonDayCare_EventScript_1B2411:: @ 81B2411 return Route117_PokemonDayCare_EventScript_1B241A:: @ 81B241A - specialval RESULT, sub_80417B8 + specialvar RESULT, sub_80417B8 compare_var_to_imm RESULT, 0 call_if 5, Route117_PokemonDayCare_EventScript_1B2411 return @@ -172,10 +172,10 @@ Route117_PokemonDayCare_EventScript_1B242B:: @ 81B242B end Route117_PokemonDayCare_EventScript_1B2469:: @ 81B2469 - specialval RESULT, CalculatePlayerPartyCount + specialvar RESULT, CalculatePlayerPartyCount compare_var_to_imm RESULT, 6 goto_if_eq Route117_PokemonDayCare_EventScript_1B2539 - specialval RESULT, sp0B6_daycare + specialvar RESULT, sp0B6_daycare setvar 0x8004, 0 compare_var_to_imm RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B24A8 @@ -196,7 +196,7 @@ Route117_PokemonDayCare_EventScript_1B24A8:: @ 81B24A8 end Route117_PokemonDayCare_EventScript_1B24C4:: @ 81B24C4 - specialval RESULT, sub_80B7CE8 + specialvar RESULT, sub_80B7CE8 compare_var_to_imm RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B24DE msgbox Route117_PokemonDayCare_Text_1B2A30, 4 @@ -206,15 +206,15 @@ Route117_PokemonDayCare_EventScript_1B24C4:: @ 81B24C4 Route117_PokemonDayCare_EventScript_1B24DE:: @ 81B24DE move 1, Route117_PokemonDayCare_Movement_1B2543 waitmove 0 - specialval RESULT, sub_8041648 + specialvar RESULT, sub_8041648 special sub_80B7D0C - playsfx 95 + playse 95 msgbox Route117_PokemonDayCare_Text_1B2B75, 4 - checksound + waitse pokecry RESULT, 0 msgbox Route117_PokemonDayCare_Text_1B2B93, 4 waitpokecry - specialval RESULT, sp0B6_daycare + specialvar RESULT, sp0B6_daycare compare_var_to_imm RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B2520 goto Route117_PokemonDayCare_EventScript_1B23D0 @@ -276,7 +276,7 @@ Route117_PokemonDayCare_EventScript_1B2558:: @ 81B2558 compare_var_to_imm RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B23D0 copyvar 0x8004, RESULT - specialval RESULT, sub_8041648 + specialvar RESULT, sub_8041648 msgbox Route117_PokemonDayCare_Text_1B2B75, 4 msgbox Route117_PokemonDayCare_Text_1B2A76, 4 release diff --git a/data/scripts/gabby_and_ty.inc b/data/scripts/gabby_and_ty.inc index a2bae7c46..69580a835 100644 --- a/data/scripts/gabby_and_ty.inc +++ b/data/scripts/gabby_and_ty.inc @@ -2,7 +2,7 @@ Route111_EventScript_1AE313:: @ 81AE313 Route118_EventScript_1AE313:: @ 81AE313 Route120_EventScript_1AE313:: @ 81AE313 settrainerflag OPPONENT_GABBY_AND_TY_6 - specialval RESULT, GabbyAndTyGetBattleNum + specialvar RESULT, GabbyAndTyGetBattleNum switch RESULT case 0, Route111_EventScript_1AE384 case 1, Route111_EventScript_1AE38A @@ -244,11 +244,11 @@ Route120_EventScript_1AE60F:: @ 81AE60F call_if 1, Route111_EventScript_1AE5FD checkflag 1 goto_if_eq Route111_EventScript_1AE73A - specialval RESULT, GabbyAndTyGetLastQuote + specialvar RESULT, GabbyAndTyGetLastQuote compare_var_to_imm RESULT, 0 goto_if_eq Route111_EventScript_1AE69F msgbox Route111_Text_1AC10A, 4 - specialval RESULT, sub_80BDD18 + specialvar RESULT, sub_80BDD18 switch RESULT case 0, Route111_EventScript_1AE6AD case 1, Route111_EventScript_1AE6BB diff --git a/data/scripts/magma_chimney.inc b/data/scripts/magma_chimney.inc index 248c9622e..2b3bd61df 100644 --- a/data/scripts/magma_chimney.inc +++ b/data/scripts/magma_chimney.inc @@ -37,7 +37,7 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB .endif move 2, MtChimney_Movement_1A0839 waitmove 0 - playsfx 21 + playse 21 move 2, MtChimney_Movement_1A0833 waitmove 0 move 2, MtChimney_Movement_1A0835 @@ -58,7 +58,7 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB msgbox MtChimney_Text_1B3A90, 4 .endif closebutton - pause 30 + delay 30 fadescreen 1 disappear 2 disappear 3 diff --git a/data/scripts/maps/AbandonedShip_Corridors_B1F.inc b/data/scripts/maps/AbandonedShip_Corridors_B1F.inc index c2f813e88..85531be99 100644 --- a/data/scripts/maps/AbandonedShip_Corridors_B1F.inc +++ b/data/scripts/maps/AbandonedShip_Corridors_B1F.inc @@ -4,7 +4,7 @@ AbandonedShip_Corridors_B1F_MapScripts:: @ 815E98F .byte 0 AbandonedShip_Corridors_B1F_MapScript1_15E99A:: @ 815E99A - warp4 AbandonedShip_Underwater1, 255, 5, 4 + setdivewarp AbandonedShip_Underwater1, 255, 5, 4 end AbandonedShip_Corridors_B1F_MapScript1_15E9A3:: @ 815E9A3 @@ -34,7 +34,7 @@ AbandonedShip_Corridors_B1F_EventScript_15E9D3:: @ 815E9D3 compare_var_to_imm RESULT, 0 goto_if_eq AbandonedShip_Corridors_B1F_EventScript_15EA0A msgbox AbandonedShip_Corridors_B1F_Text_198692, 4 - playsfx 21 + playse 21 removeitem ITEM_STORAGE_KEY, 1 setflag 239 call AbandonedShip_Corridors_B1F_EventScript_15E9C0 diff --git a/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc b/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc index c3a48f55d..fe833b47c 100644 --- a/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc +++ b/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc @@ -4,7 +4,7 @@ AbandonedShip_HiddenFloorCorridors_MapScripts:: @ 815EB46 .byte 0 AbandonedShip_HiddenFloorCorridors_MapScript1_15EB51:: @ 815EB51 - warp4 AbandonedShip_Underwater1, 255, 5, 4 + setdivewarp AbandonedShip_Underwater1, 255, 5, 4 end AbandonedShip_HiddenFloorCorridors_MapScript1_15EB5A:: @ 815EB5A @@ -66,7 +66,7 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EBF3:: @ 815EBF3 compare_var_to_imm RESULT, 0 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECCF msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 - playsfx 21 + playse 21 removeitem ITEM_ROOM_1_KEY, 1 setflag 240 call AbandonedShip_HiddenFloorCorridors_EventScript_15EBA3 @@ -82,7 +82,7 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EC2A:: @ 815EC2A compare_var_to_imm RESULT, 0 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECD9 msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 - playsfx 21 + playse 21 removeitem ITEM_ROOM_2_KEY, 1 setflag 241 call AbandonedShip_HiddenFloorCorridors_EventScript_15EBAD @@ -98,7 +98,7 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EC61:: @ 815EC61 compare_var_to_imm RESULT, 0 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECE3 msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 - playsfx 21 + playse 21 removeitem ITEM_ROOM_4_KEY, 1 setflag 242 call AbandonedShip_HiddenFloorCorridors_EventScript_15EBB7 @@ -114,7 +114,7 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EC98:: @ 815EC98 compare_var_to_imm RESULT, 0 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECED msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 - playsfx 21 + playse 21 removeitem ITEM_ROOM_6_KEY, 1 setflag 243 call AbandonedShip_HiddenFloorCorridors_EventScript_15EBC1 diff --git a/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc b/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc index bda0e9603..4f3e0f099 100644 --- a/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc +++ b/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc @@ -38,37 +38,37 @@ AbandonedShip_HiddenFloorRooms_EventScript_15ED95:: @ 815ED95 return AbandonedShip_HiddenFloorRooms_EventScript_15ED9B:: @ 815ED9B - pause 20 + delay 20 setanimation 0, 10 setanimation 1, 10 setanimation 2, 0 doanimation 54 - specialval RESULT, sub_810F4D4 + specialvar RESULT, sub_810F4D4 compare_var_to_imm RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE8B checkanimation 54 - pause 10 + delay 10 end AbandonedShip_HiddenFloorRooms_EventScript_15EDC4:: @ 815EDC4 end AbandonedShip_HiddenFloorRooms_EventScript_15EDC5:: @ 815EDC5 - specialval RESULT, sub_810F488 + specialvar RESULT, sub_810F488 compare_var_to_imm RESULT, 1 goto_if_eq AbandonedShip_HiddenFloorRooms_EventScript_15EDEA - pause 20 + delay 20 compare_var_to_imm RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE6B checkanimation 54 - pause 10 + delay 10 end AbandonedShip_HiddenFloorRooms_EventScript_15EDEA:: @ 815EDEA end AbandonedShip_HiddenFloorRooms_EventScript_15EDEB:: @ 815EDEB - pause 20 + delay 20 setanimation 0, 8 setanimation 1, 5 setanimation 2, 0 @@ -77,15 +77,15 @@ AbandonedShip_HiddenFloorRooms_EventScript_15EDEB:: @ 815EDEB setanimation 1, 3 setanimation 2, 0 doanimation 54 - specialval RESULT, sub_810F4FC + specialvar RESULT, sub_810F4FC compare_var_to_imm RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE9B checkanimation 54 - pause 10 + delay 10 end AbandonedShip_HiddenFloorRooms_EventScript_15EE23:: @ 815EE23 - pause 20 + delay 20 setanimation 0, 16 setanimation 1, 3 setanimation 2, 0 @@ -98,11 +98,11 @@ AbandonedShip_HiddenFloorRooms_EventScript_15EE23:: @ 815EE23 setanimation 1, 6 setanimation 2, 0 doanimation 54 - specialval RESULT, sub_810F4B0 + specialvar RESULT, sub_810F4B0 compare_var_to_imm RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE7B checkanimation 54 - pause 10 + delay 10 end AbandonedShip_HiddenFloorRooms_EventScript_15EE6A:: @ 815EE6A diff --git a/data/scripts/maps/AbandonedShip_Rooms2_1F.inc b/data/scripts/maps/AbandonedShip_Rooms2_1F.inc index 0c223cbaa..4feecded6 100644 --- a/data/scripts/maps/AbandonedShip_Rooms2_1F.inc +++ b/data/scripts/maps/AbandonedShip_Rooms2_1F.inc @@ -3,7 +3,7 @@ AbandonedShip_Rooms2_1F_MapScripts:: @ 815EA67 AbandonedShip_Rooms2_1F_EventScript_15EA68:: @ 815EA68 trainerbattle 4, OPPONENT_LOIS_AND_HAL_1, 0, AbandonedShip_Rooms2_1F_Text_1987C1, AbandonedShip_Rooms2_1F_Text_1987FE, AbandonedShip_Rooms2_1F_Text_19887F - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq AbandonedShip_Rooms2_1F_EventScript_15EA93 msgbox AbandonedShip_Rooms2_1F_Text_198835, 6 @@ -16,7 +16,7 @@ AbandonedShip_Rooms2_1F_EventScript_15EA93:: @ 815EA93 AbandonedShip_Rooms2_1F_EventScript_15EAAE:: @ 815EAAE trainerbattle 4, OPPONENT_LOIS_AND_HAL_1, 0, AbandonedShip_Rooms2_1F_Text_1988CC, AbandonedShip_Rooms2_1F_Text_198916, AbandonedShip_Rooms2_1F_Text_19899A - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq AbandonedShip_Rooms2_1F_EventScript_15EAD9 msgbox AbandonedShip_Rooms2_1F_Text_198934, 6 diff --git a/data/scripts/maps/AbandonedShip_Rooms_B1F.inc b/data/scripts/maps/AbandonedShip_Rooms_B1F.inc index 44b8c5f20..218f1a2ca 100644 --- a/data/scripts/maps/AbandonedShip_Rooms_B1F.inc +++ b/data/scripts/maps/AbandonedShip_Rooms_B1F.inc @@ -3,7 +3,7 @@ AbandonedShip_Rooms_B1F_MapScripts:: @ 815EA35 .byte 0 AbandonedShip_Rooms_B1F_MapScript1_15EA3B:: @ 815EA3B - warp4 AbandonedShip_Underwater2, 255, 17, 4 + setdivewarp AbandonedShip_Underwater2, 255, 17, 4 end AbandonedShip_Rooms_B1F_EventScript_15EA44:: @ 815EA44 diff --git a/data/scripts/maps/AbandonedShip_Underwater1.inc b/data/scripts/maps/AbandonedShip_Underwater1.inc index 71d903682..afac470ea 100644 --- a/data/scripts/maps/AbandonedShip_Underwater1.inc +++ b/data/scripts/maps/AbandonedShip_Underwater1.inc @@ -3,5 +3,5 @@ AbandonedShip_Underwater1_MapScripts:: @ 815EA57 .byte 0 AbandonedShip_Underwater1_MapScript1_15EA5D:: @ 815EA5D - warp4 AbandonedShip_HiddenFloorCorridors, 255, 0, 10 + setdivewarp AbandonedShip_HiddenFloorCorridors, 255, 0, 10 end diff --git a/data/scripts/maps/AbandonedShip_Underwater2.inc b/data/scripts/maps/AbandonedShip_Underwater2.inc index f7b434c07..b8facc4ec 100644 --- a/data/scripts/maps/AbandonedShip_Underwater2.inc +++ b/data/scripts/maps/AbandonedShip_Underwater2.inc @@ -3,5 +3,5 @@ AbandonedShip_Underwater2_MapScripts:: @ 815EB37 .byte 0 AbandonedShip_Underwater2_MapScript1_15EB3D:: @ 815EB3D - warp4 AbandonedShip_Rooms_B1F, 255, 13, 7 + setdivewarp AbandonedShip_Rooms_B1F, 255, 13, 7 end diff --git a/data/scripts/maps/AncientTomb.inc b/data/scripts/maps/AncientTomb.inc index deed30c5b..a0f00e877 100644 --- a/data/scripts/maps/AncientTomb.inc +++ b/data/scripts/maps/AncientTomb.inc @@ -57,9 +57,9 @@ AncientTomb_EventScript_15F042:: @ 815F042 AncientTomb_EventScript_15F050:: @ 815F050 lock faceplayer - checksound + waitse pokecry SPECIES_REGISTEEL, 2 - pause 40 + delay 40 waitpokecry setwildbattle SPECIES_REGISTEEL, 40, ITEM_NONE setflag 937 diff --git a/data/scripts/maps/AquaHideout_B2F.inc b/data/scripts/maps/AquaHideout_B2F.inc index 845b755b7..9ed2d102c 100644 --- a/data/scripts/maps/AquaHideout_B2F.inc +++ b/data/scripts/maps/AquaHideout_B2F.inc @@ -10,7 +10,7 @@ AquaHideout_B2F_EventScript_15D8BD:: @ 815D8BD MagmaHideout_B2F_EventScript_15D8BD:: @ 815D8BD lockall setvar 0x8008, 1 - playsfx 21 + playse 21 move 0x8008, AquaHideout_B2F_Movement_1A0833 waitmove 0 .ifdef SAPPHIRE @@ -43,7 +43,7 @@ AquaHideout_B2F_EventScript_15D8FD:: @ 815D8FD move 0x8008, AquaHideout_B2F_Movement_1A0843 .endif waitmove 0 - pause 20 + delay 20 move 0x8008, AquaHideout_B2F_Movement_1A0839 waitmove 0 msgbox AquaHideout_B2F_Text_197162, 4 @@ -60,7 +60,7 @@ AquaHideout_B2F_EventScript_15D8FD:: @ 815D8FD .endif waitmove 0 disappear 0x8009 - pause 20 + delay 20 move 0x8008, AquaHideout_B2F_Movement_1A0839 waitmove 0 msgbox AquaHideout_B2F_Text_1971AE, 4 diff --git a/data/scripts/maps/BattleTower_BattleRoom.inc b/data/scripts/maps/BattleTower_BattleRoom.inc index 750c64b74..60685adad 100644 --- a/data/scripts/maps/BattleTower_BattleRoom.inc +++ b/data/scripts/maps/BattleTower_BattleRoom.inc @@ -54,7 +54,7 @@ BattleTower_BattleRoom_EventScript_160961:: @ 8160961 special LoadPlayerParty special SavePlayerParty special sub_8135A14 - fanfare 368 + playfanfare 368 waitfanfare special ScrSpecial_HealPlayerParty @@ -108,10 +108,10 @@ BattleTower_BattleRoom_EventScript_160A94:: @ 8160A94 setvar 0x8004, 2 special sub_8135BA0 message BattleTower_BattleRoom_Text_1C6CE1 - pause 60 + delay 60 waittext - playsfx 55 - checksound + playse 55 + waitse msgbox BattleTower_BattleRoom_Text_1C6D05, 4 BattleTower_BattleRoom_EventScript_160AB1:: @ 8160AB1 diff --git a/data/scripts/maps/BattleTower_Elevator.inc b/data/scripts/maps/BattleTower_Elevator.inc index 408e7485e..2c9f12a6e 100644 --- a/data/scripts/maps/BattleTower_Elevator.inc +++ b/data/scripts/maps/BattleTower_Elevator.inc @@ -14,7 +14,7 @@ BattleTower_Elevator_EventScript_1607E4:: @ 81607E4 waitmove 0 special sub_810EBEC waitstate - pause 64 + delay 64 move 1, BattleTower_Elevator_Movement_16083D move 255, BattleTower_Elevator_Movement_160841 waitmove 0 diff --git a/data/scripts/maps/BattleTower_Lobby.inc b/data/scripts/maps/BattleTower_Lobby.inc index 4caffb405..c4ffe4c32 100644 --- a/data/scripts/maps/BattleTower_Lobby.inc +++ b/data/scripts/maps/BattleTower_Lobby.inc @@ -17,7 +17,7 @@ BattleTower_Lobby_EventScript_16029C:: @ 816029C goto_if_eq BattleTower_Lobby_EventScript_1602E4 checkflag 237 goto_if_eq BattleTower_Lobby_EventScript_1602CD - specialval 0x8007, sub_810F404 + specialvar 0x8007, sub_810F404 compare_var_to_imm 0x8007, 50 goto_if 0, BattleTower_Lobby_EventScript_1602E4 clearflag 941 @@ -25,7 +25,7 @@ BattleTower_Lobby_EventScript_16029C:: @ 816029C return BattleTower_Lobby_EventScript_1602CD:: @ 81602CD - specialval 0x8007, sub_810F404 + specialvar 0x8007, sub_810F404 compare_var_to_imm 0x8007, 100 goto_if 0, BattleTower_Lobby_EventScript_1602E4 clearflag 941 @@ -84,7 +84,7 @@ BattleTower_Lobby_EventScript_160342:: @ 8160342 goto_if_eq BattleTower_Lobby_EventScript_16037D message BattleTower_Lobby_Text_19A6BE waittext - fanfare 370 + playfanfare 370 waitfanfare msgbox BattleTower_Lobby_Text_19A719, 4 @@ -100,8 +100,8 @@ BattleTower_Lobby_EventScript_16037D:: @ 816037D special sub_8135D84 setvar 0x8004, 3 special sub_8135BA0 - playsfx 55 - checksound + playse 55 + waitse BattleTower_Lobby_EventScript_1603AD:: @ 81603AD setvar 0x8004, 0 @@ -114,7 +114,7 @@ BattleTower_Lobby_EventScript_1603AD:: @ 81603AD case 0, BattleTower_Lobby_EventScript_160408 message BattleTower_Lobby_Text_19A506 waittext - fanfare 370 + playfanfare 370 waitfanfare setvar 0x8004, 9 special sub_81358A4 @@ -148,8 +148,8 @@ BattleTower_Lobby_EventScript_160419:: @ 8160419 special sub_8135668 setvar 0x8004, 0 special sub_8135BA0 - playsfx 55 - checksound + playse 55 + waitse msgbox BattleTower_Lobby_Text_199FA9, 4 closebutton setvar 0x4000, 5 @@ -166,8 +166,8 @@ BattleTower_Lobby_EventScript_16044B:: @ 816044B waittext setvar 0x8004, 1 special sub_8135BA0 - playsfx 55 - checksound + playse 55 + waitse setvar 0x8004, 8 setvar 0x8005, 0 special sub_8135668 @@ -241,7 +241,7 @@ BattleTower_Lobby_EventScript_160587:: @ 8160587 special sub_8135668 special LoadPlayerParty closebutton - pause 2 + delay 2 call S_DoSaveDialog setvar 0x4000, 5 hidebox 0, 0, 15, 10 @@ -402,7 +402,7 @@ BattleTower_Lobby_EventScript_160733:: @ 8160733 end BattleTower_Lobby_EventScript_160773:: @ 8160773 - specialval RESULT, sub_810F404 + specialvar RESULT, sub_810F404 compare_var_to_imm RESULT, 100 goto_if 0, BattleTower_Lobby_EventScript_1607C5 msgbox BattleTower_Lobby_Text_19AAC4, 4 diff --git a/data/scripts/maps/BattleTower_Outside.inc b/data/scripts/maps/BattleTower_Outside.inc index beb9ed690..8ef5dc0ad 100644 --- a/data/scripts/maps/BattleTower_Outside.inc +++ b/data/scripts/maps/BattleTower_Outside.inc @@ -66,7 +66,7 @@ BattleTower_Outside_EventScript_160232:: @ 8160232 closebutton move LAST_TALKED, BattleTower_Outside_Movement_1A0845 waitmove 0 - pause 30 + delay 30 spriteinvisible 5, 26, 4 setvar 0x8004, 4 call BattleTower_Outside_EventScript_1A047C diff --git a/data/scripts/maps/CaveOfOrigin_B4F.inc b/data/scripts/maps/CaveOfOrigin_B4F.inc index e79dfb3ff..aad189887 100644 --- a/data/scripts/maps/CaveOfOrigin_B4F.inc +++ b/data/scripts/maps/CaveOfOrigin_B4F.inc @@ -37,7 +37,7 @@ CaveOfOrigin_B4F_EventScript_15DDD7:: @ 815DDD7 doweather special WaitWeather waitstate - playsfx 209 + playse 209 setanimation 0, 9 setanimation 1, 13 setanimation 2, 0 @@ -48,24 +48,24 @@ CaveOfOrigin_B4F_EventScript_15DDD7:: @ 815DDD7 .else setvar RESULT, 2 .endif - playsfx 107 + playse 107 special sub_80818A4 waitstate special sub_80818FC waitstate move 1, CaveOfOrigin_B4F_Movement_15DE7D waitmove 0 - pause 60 + delay 60 setwildbattle SPECIES_GROUDON_OR_KYOGRE, 45, ITEM_NONE - checksound + waitse pokecry SPECIES_GROUDON_OR_KYOGRE, 2 - pause 40 + delay 40 waitpokecry setflag 2145 special ScrSpecial_StartGroudonKyogreBattle waitstate clearflag 2145 - specialval RESULT, sub_810E300 + specialvar RESULT, sub_810E300 compare_var_to_imm RESULT, 1 call_if 1, CaveOfOrigin_B4F_EventScript_15DE73 setflag 816 diff --git a/data/scripts/maps/DesertRuins.inc b/data/scripts/maps/DesertRuins.inc index ab094c824..d63398d78 100644 --- a/data/scripts/maps/DesertRuins.inc +++ b/data/scripts/maps/DesertRuins.inc @@ -57,9 +57,9 @@ DesertRuins_EventScript_15CB77:: @ 815CB77 DesertRuins_EventScript_15CB85:: @ 815CB85 lock faceplayer - checksound + waitse pokecry SPECIES_REGIROCK, 2 - pause 40 + delay 40 waitpokecry setwildbattle SPECIES_REGIROCK, 40, ITEM_NONE setflag 935 diff --git a/data/scripts/maps/DewfordTown_Gym.inc b/data/scripts/maps/DewfordTown_Gym.inc index 4168acd0c..8f57e549a 100644 --- a/data/scripts/maps/DewfordTown_Gym.inc +++ b/data/scripts/maps/DewfordTown_Gym.inc @@ -56,25 +56,25 @@ DewfordTown_Gym_EventScript_1530F5:: @ 81530F5 return DewfordTown_Gym_EventScript_1530F6:: @ 81530F6 - playsfx 35 + playse 35 lighten 3 call DewfordTown_Gym_EventScript_153071 return DewfordTown_Gym_EventScript_153101:: @ 8153101 - playsfx 35 + playse 35 lighten 2 call DewfordTown_Gym_EventScript_153071 return DewfordTown_Gym_EventScript_15310C:: @ 815310C - playsfx 35 + playse 35 lighten 1 call DewfordTown_Gym_EventScript_153071 return DewfordTown_Gym_EventScript_153117:: @ 8153117 - playsfx 35 + playse 35 lighten 0 call DewfordTown_Gym_EventScript_153071 return diff --git a/data/scripts/maps/DewfordTown_House1.inc b/data/scripts/maps/DewfordTown_House1.inc index 40e06357c..321e376bd 100644 --- a/data/scripts/maps/DewfordTown_House1.inc +++ b/data/scripts/maps/DewfordTown_House1.inc @@ -12,7 +12,7 @@ DewfordTown_House1_EventScript_152FF8:: @ 8152FF8 DewfordTown_House1_EventScript_153001:: @ 8153001 lock faceplayer - checksound + waitse pokecry SPECIES_ZIGZAGOON, 0 msgbox DewfordTown_House1_Text_174CC8, 4 waitpokecry diff --git a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc index be3557c22..6726686ca 100644 --- a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc +++ b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc @@ -24,7 +24,7 @@ EverGrandeCity_ChampionsRoom_EventScript_15B7DE:: @ 815B7DE lockall move 255, EverGrandeCity_ChampionsRoom_Movement_1A084E waitmove 0 - pause 40 + delay 40 move 255, EverGrandeCity_ChampionsRoom_Movement_15B802 waitmove 0 setvar 0x4001, 1 @@ -38,20 +38,20 @@ EverGrandeCity_ChampionsRoom_Movement_15B802:: @ 815B802 step_end EverGrandeCity_ChampionsRoom_EventScript_15B805:: @ 815B805 - playmusic 454, 0 + playbgm 454, 0 msgbox EverGrandeCity_ChampionsRoom_Text_190F9C, 4 trainerbattle 3, OPPONENT_STEVEN, 0, EverGrandeCity_ChampionsRoom_Text_1910A0 goto EverGrandeCity_ChampionsRoom_EventScript_15B821 end EverGrandeCity_ChampionsRoom_EventScript_15B821:: @ 815B821 - playsfx 8 + playse 8 setmaptile 6, 1, 838, 0 setmaptile 6, 2, 839, 0 special DrawWholeMapView msgbox EverGrandeCity_ChampionsRoom_Text_1910FE, 4 closebutton - playsfx 8 + playse 8 checkgender compare_var_to_imm RESULT, 0 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B87C @@ -67,17 +67,17 @@ EverGrandeCity_ChampionsRoom_EventScript_15B821:: @ 815B821 end EverGrandeCity_ChampionsRoom_EventScript_15B87C:: @ 815B87C - playmusic 415, 0 + playbgm 415, 0 return EverGrandeCity_ChampionsRoom_EventScript_15B881:: @ 815B881 - playmusic 421, 0 + playbgm 421, 0 return EverGrandeCity_ChampionsRoom_EventScript_15B886:: @ 815B886 msgbox EverGrandeCity_ChampionsRoom_Text_191225, 4 - pause 40 - playsfx 21 + delay 40 + playse 21 move 2, EverGrandeCity_ChampionsRoom_Movement_1A0833 waitmove 0 move 2, EverGrandeCity_ChampionsRoom_Movement_1A0835 @@ -89,8 +89,8 @@ EverGrandeCity_ChampionsRoom_EventScript_15B886:: @ 815B886 EverGrandeCity_ChampionsRoom_EventScript_15B8BB:: @ 815B8BB msgbox EverGrandeCity_ChampionsRoom_Text_1912B3, 4 - pause 40 - playsfx 21 + delay 40 + playse 21 move 2, EverGrandeCity_ChampionsRoom_Movement_1A0833 waitmove 0 move 2, EverGrandeCity_ChampionsRoom_Movement_1A0835 @@ -112,18 +112,18 @@ EverGrandeCity_ChampionsRoom_EventScript_15B8F0:: @ 815B8F0 msgbox EverGrandeCity_ChampionsRoom_Text_1914C6, 4 move 1, EverGrandeCity_ChampionsRoom_Movement_1A0841 waitmove 0 - pause 20 + delay 20 move 1, EverGrandeCity_ChampionsRoom_Movement_1A0845 waitmove 0 msgbox EverGrandeCity_ChampionsRoom_Text_191512, 4 closebutton - pause 30 + delay 30 move 1, EverGrandeCity_ChampionsRoom_Movement_15B9FB move 255, EverGrandeCity_ChampionsRoom_Movement_15B9DD move 3, EverGrandeCity_ChampionsRoom_Movement_1A0841 move 2, EverGrandeCity_ChampionsRoom_Movement_15B9F8 waitmove 0 - pause 20 + delay 20 move 255, EverGrandeCity_ChampionsRoom_Movement_1A0845 waitmove 0 msgbox EverGrandeCity_ChampionsRoom_Text_191546, 4 diff --git a/data/scripts/maps/EverGrandeCity_DrakesRoom.inc b/data/scripts/maps/EverGrandeCity_DrakesRoom.inc index 1e32394d9..a283c4c2a 100644 --- a/data/scripts/maps/EverGrandeCity_DrakesRoom.inc +++ b/data/scripts/maps/EverGrandeCity_DrakesRoom.inc @@ -43,7 +43,7 @@ EverGrandeCity_DrakesRoom_EventScript_15B764:: @ 815B764 faceplayer checkflag 1248 goto_if_eq EverGrandeCity_DrakesRoom_EventScript_15B78B - playmusic 450, 0 + playbgm 450, 0 msgbox EverGrandeCity_DrakesRoom_Text_190CEB, 4 trainerbattle 3, OPPONENT_DRAKE, 0, EverGrandeCity_DrakesRoom_Text_190E42 goto EverGrandeCity_DrakesRoom_EventScript_15B795 diff --git a/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc b/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc index 71e80287b..f00f82f2e 100644 --- a/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc +++ b/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc @@ -43,7 +43,7 @@ EverGrandeCity_GlaciasRoom_EventScript_15B6CA:: @ 815B6CA faceplayer checkflag 1247 goto_if_eq EverGrandeCity_GlaciasRoom_EventScript_15B6F1 - playmusic 450, 0 + playbgm 450, 0 msgbox EverGrandeCity_GlaciasRoom_Text_190AF9, 4 trainerbattle 3, OPPONENT_GLACIA, 0, EverGrandeCity_GlaciasRoom_Text_190C01 goto EverGrandeCity_GlaciasRoom_EventScript_15B6FB diff --git a/data/scripts/maps/EverGrandeCity_HallOfFame.inc b/data/scripts/maps/EverGrandeCity_HallOfFame.inc index 123a7cbe2..458796e0c 100644 --- a/data/scripts/maps/EverGrandeCity_HallOfFame.inc +++ b/data/scripts/maps/EverGrandeCity_HallOfFame.inc @@ -28,7 +28,7 @@ EverGrandeCity_HallOfFame_EventScript_15BBA8:: @ 815BBA8 move 1, EverGrandeCity_HallOfFame_Movement_15BC60 move 255, EverGrandeCity_HallOfFame_Movement_15BC60 waitmove 0 - pause 20 + delay 20 move 1, EverGrandeCity_HallOfFame_Movement_1A0843 move 255, EverGrandeCity_HallOfFame_Movement_1A083F waitmove 0 @@ -37,10 +37,10 @@ EverGrandeCity_HallOfFame_EventScript_15BBA8:: @ 815BBA8 move 1, EverGrandeCity_HallOfFame_Movement_1A0841 move 255, EverGrandeCity_HallOfFame_Movement_1A0841 waitmove 0 - pause 20 + delay 20 doanimation 62 checkanimation 62 - pause 40 + delay 40 setvar 0x4001, 1 call EverGrandeCity_HallOfFame_EventScript_19FC13 checkgender diff --git a/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc b/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc index 6fb0d7ba4..2b5266ade 100644 --- a/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc +++ b/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc @@ -43,7 +43,7 @@ EverGrandeCity_PhoebesRoom_EventScript_15B630:: @ 815B630 faceplayer checkflag 1246 goto_if_eq EverGrandeCity_PhoebesRoom_EventScript_15B657 - playmusic 450, 0 + playbgm 450, 0 msgbox EverGrandeCity_PhoebesRoom_Text_1908F5, 4 trainerbattle 3, OPPONENT_PHOEBE, 0, EverGrandeCity_PhoebesRoom_Text_190A0C goto EverGrandeCity_PhoebesRoom_EventScript_15B661 diff --git a/data/scripts/maps/EverGrandeCity_PokemonLeague.inc b/data/scripts/maps/EverGrandeCity_PokemonLeague.inc index 0f0efbd26..04a8b701a 100644 --- a/data/scripts/maps/EverGrandeCity_PokemonLeague.inc +++ b/data/scripts/maps/EverGrandeCity_PokemonLeague.inc @@ -56,15 +56,15 @@ EverGrandeCity_PokemonLeague_EventScript_15BAD2:: @ 815BAD2 call_if 3, EverGrandeCity_PokemonLeague_EventScript_15BB3F message EverGrandeCity_PokemonLeague_Text_1916FD waittext - pause 75 + delay 75 checkflag 2060 goto_if 0, EverGrandeCity_PokemonLeague_EventScript_15BB4A closebutton move 3, EverGrandeCity_PokemonLeague_Movement_15BB7E move 4, EverGrandeCity_PokemonLeague_Movement_15BB81 waitmove 0 - pause 10 - fanfare 369 + delay 10 + playfanfare 369 message EverGrandeCity_PokemonLeague_Text_191804 waittext waitfanfare @@ -86,7 +86,7 @@ EverGrandeCity_PokemonLeague_EventScript_15BB3F:: @ 815BB3F return EverGrandeCity_PokemonLeague_EventScript_15BB4A:: @ 815BB4A - playsfx 32 + playse 32 msgbox EverGrandeCity_PokemonLeague_Text_19179C, 4 releaseall end diff --git a/data/scripts/maps/EverGrandeCity_SidneysRoom.inc b/data/scripts/maps/EverGrandeCity_SidneysRoom.inc index bc8ad9f5a..564b2b806 100644 --- a/data/scripts/maps/EverGrandeCity_SidneysRoom.inc +++ b/data/scripts/maps/EverGrandeCity_SidneysRoom.inc @@ -44,7 +44,7 @@ EverGrandeCity_SidneysRoom_EventScript_15B596:: @ 815B596 faceplayer checkflag 1245 goto_if_eq EverGrandeCity_SidneysRoom_EventScript_15B5BD - playmusic 450, 0 + playbgm 450, 0 msgbox EverGrandeCity_SidneysRoom_Text_190728, 4 trainerbattle 3, OPPONENT_SIDNEY, 0, EverGrandeCity_SidneysRoom_Text_190823 goto EverGrandeCity_SidneysRoom_EventScript_15B5C7 diff --git a/data/scripts/maps/FallarborTown.inc b/data/scripts/maps/FallarborTown.inc index 043588ed5..d6d4ffd3b 100644 --- a/data/scripts/maps/FallarborTown.inc +++ b/data/scripts/maps/FallarborTown.inc @@ -34,7 +34,7 @@ FallarborTown_EventScript_14E81D:: @ 814E81D FallarborTown_EventScript_14E826:: @ 814E826 lock faceplayer - checksound + waitse pokecry SPECIES_AZURILL, 0 msgbox FallarborTown_Text_16C92C, 4 waitpokecry diff --git a/data/scripts/maps/FallarborTown_ContestLobby.inc b/data/scripts/maps/FallarborTown_ContestLobby.inc index 1dddf43de..7a3a8a7c8 100644 --- a/data/scripts/maps/FallarborTown_ContestLobby.inc +++ b/data/scripts/maps/FallarborTown_ContestLobby.inc @@ -22,17 +22,17 @@ FallarborTown_ContestLobby_EventScript_1539F8:: @ 81539F8 lockall move 1, FallarborTown_ContestLobby_Movement_153A7C waitmove 0 - playsfx 71 + playse 71 setmaptile 4, 2, 545, 1 setmaptile 4, 3, 609, 1 special DrawWholeMapView move 1, FallarborTown_ContestLobby_Movement_153A7F waitmove 0 - playsfx 71 + playse 71 setmaptile 4, 2, 721, 1 setmaptile 4, 3, 729, 1 special DrawWholeMapView - pause 20 + delay 20 move 1, FallarborTown_ContestLobby_Movement_153A8C waitmove 0 move 255, FallarborTown_ContestLobby_Movement_153A7A diff --git a/data/scripts/maps/FallarborTown_Mart.inc b/data/scripts/maps/FallarborTown_Mart.inc index 4b66546e8..05a3704fe 100644 --- a/data/scripts/maps/FallarborTown_Mart.inc +++ b/data/scripts/maps/FallarborTown_Mart.inc @@ -40,7 +40,7 @@ FallarborTown_Mart_EventScript_1539A5:: @ 81539A5 FallarborTown_Mart_EventScript_1539AE:: @ 81539AE lock faceplayer - checksound + waitse pokecry SPECIES_SKITTY, 0 msgbox FallarborTown_Mart_Text_1770D3, 4 waitpokecry diff --git a/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc b/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc index bb924026c..320ba0a3a 100644 --- a/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc +++ b/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc @@ -46,7 +46,7 @@ FallarborTown_PokemonCenter_1F_EventScript_153B59:: @ 8153B59 end FallarborTown_PokemonCenter_1F_EventScript_153B69:: @ 8153B69 - playsfx 18 + playse 18 disappear 4 clearflag 870 release diff --git a/data/scripts/maps/FortreeCity.inc b/data/scripts/maps/FortreeCity.inc index 565effc66..57405986b 100644 --- a/data/scripts/maps/FortreeCity.inc +++ b/data/scripts/maps/FortreeCity.inc @@ -75,9 +75,9 @@ FortreeCity_EventScript_14C9E4:: @ 814C9E4 closebutton move LAST_TALKED, FortreeCity_Movement_1A0662 waitmove 0 - checksound + waitse pokecry SPECIES_KECLEON, 2 - pause 40 + delay 40 waitpokecry move LAST_TALKED, FortreeCity_Movement_14CA13 waitmove 0 diff --git a/data/scripts/maps/FortreeCity_House1.inc b/data/scripts/maps/FortreeCity_House1.inc index e0942354d..d21b82e51 100644 --- a/data/scripts/maps/FortreeCity_House1.inc +++ b/data/scripts/maps/FortreeCity_House1.inc @@ -8,7 +8,7 @@ FortreeCity_House1_EventScript_157E13:: @ 8157E13 goto_if_eq FortreeCity_House1_EventScript_157EAD setvar 0x8008, 1 copyvar 0x8004, 0x8008 - specialval RESULT, sub_804D89C + specialvar RESULT, sub_804D89C copyvar 0x8009, RESULT msgbox FortreeCity_House1_Text_18568C, 5 compare_var_to_imm RESULT, 0 @@ -19,7 +19,7 @@ FortreeCity_House1_EventScript_157E13:: @ 8157E13 compare_var_to_imm 0x8004, 255 goto_if_eq FortreeCity_House1_EventScript_157E95 copyvar 0x8005, 0x800a - specialval RESULT, sub_804DB2C + specialvar RESULT, sub_804DB2C copyvar 0x800b, RESULT compare_var_to_var RESULT, 0x8009 goto_if 5, FortreeCity_House1_EventScript_157E9F @@ -57,7 +57,7 @@ FortreeCity_House1_EventScript_157EB7:: @ 8157EB7 FortreeCity_House1_EventScript_157EC0:: @ 8157EC0 lock faceplayer - checksound + waitse pokecry SPECIES_ZIGZAGOON, 0 msgbox FortreeCity_House1_Text_185888, 4 waitpokecry diff --git a/data/scripts/maps/FortreeCity_House4.inc b/data/scripts/maps/FortreeCity_House4.inc index c4284b722..bcf2bcd49 100644 --- a/data/scripts/maps/FortreeCity_House4.inc +++ b/data/scripts/maps/FortreeCity_House4.inc @@ -59,7 +59,7 @@ FortreeCity_House4_Movement_158218:: @ 8158218 FortreeCity_House4_EventScript_15821E:: @ 815821E lock faceplayer - checksound + waitse pokecry SPECIES_WINGULL, 0 msgbox FortreeCity_House4_Text_18695C, 4 waitpokecry diff --git a/data/scripts/maps/FortreeCity_House5.inc b/data/scripts/maps/FortreeCity_House5.inc index 1144a8e81..59f80917e 100644 --- a/data/scripts/maps/FortreeCity_House5.inc +++ b/data/scripts/maps/FortreeCity_House5.inc @@ -12,7 +12,7 @@ FortreeCity_House5_EventScript_15823B:: @ 815823B FortreeCity_House5_EventScript_158244:: @ 8158244 lock faceplayer - checksound + waitse pokecry SPECIES_ZIGZAGOON, 0 msgbox FortreeCity_House5_Text_186A4F, 4 waitpokecry diff --git a/data/scripts/maps/GraniteCave_B1F.inc b/data/scripts/maps/GraniteCave_B1F.inc index 240de1d98..aa8d705c7 100644 --- a/data/scripts/maps/GraniteCave_B1F.inc +++ b/data/scripts/maps/GraniteCave_B1F.inc @@ -6,5 +6,5 @@ GraniteCave_B1F_MapScripts:: @ 815CBDD GraniteCave_B1F_MapScript1_15CBED:: @ 815CBED tileeffect 7 - warp5 GraniteCave_B2F, 255, 0, 0 + setholewarp GraniteCave_B2F, 255, 0, 0 end diff --git a/data/scripts/maps/GraniteCave_StevensRoom.inc b/data/scripts/maps/GraniteCave_StevensRoom.inc index 9473cbe8e..ee1c37dae 100644 --- a/data/scripts/maps/GraniteCave_StevensRoom.inc +++ b/data/scripts/maps/GraniteCave_StevensRoom.inc @@ -22,7 +22,7 @@ GraniteCave_StevensRoom_EventScript_15CBFA:: @ 815CBFA call_if 1, GraniteCave_StevensRoom_EventScript_15CC6D compare_var_to_imm FACING, 4 call_if 1, GraniteCave_StevensRoom_EventScript_15CC6D - playsfx 9 + playse 9 disappear 1 release end diff --git a/data/scripts/maps/InsideOfTruck.inc b/data/scripts/maps/InsideOfTruck.inc index 9eedd4e05..e5782b63e 100644 --- a/data/scripts/maps/InsideOfTruck.inc +++ b/data/scripts/maps/InsideOfTruck.inc @@ -31,7 +31,7 @@ InsideOfTruck_EventScript_15FC45:: @ 815FC45 setflag 784 setflag 760 setvar 0x408c, 1 - warpplace LittlerootTown, 255, 3, 10 + setdynamicwarp LittlerootTown, 255, 3, 10 releaseall end @@ -43,7 +43,7 @@ InsideOfTruck_EventScript_15FC68:: @ 815FC68 setflag 785 setflag 722 setvar 0x4082, 1 - warpplace LittlerootTown, 255, 12, 10 + setdynamicwarp LittlerootTown, 255, 12, 10 releaseall end diff --git a/data/scripts/maps/IslandCave.inc b/data/scripts/maps/IslandCave.inc index 73523c460..06524f95e 100644 --- a/data/scripts/maps/IslandCave.inc +++ b/data/scripts/maps/IslandCave.inc @@ -39,7 +39,7 @@ S_OpenRegiceChamber:: @ 815EF19 setmaptile 8, 20, 563, 0 setmaptile 9, 20, 564, 1 special DrawWholeMapView - playsfx SE_BAN + playse SE_BAN setflag 2129 end @@ -77,9 +77,9 @@ IslandCave_EventScript_15EF95:: @ 815EF95 IslandCave_EventScript_15EF9D:: @ 815EF9D lock faceplayer - checksound + waitse pokecry SPECIES_REGICE, 2 - pause 40 + delay 40 waitpokecry setwildbattle SPECIES_REGICE, 40, ITEM_NONE setflag 936 diff --git a/data/scripts/maps/JaggedPass.inc b/data/scripts/maps/JaggedPass.inc index 333ccbaad..98b367006 100644 --- a/data/scripts/maps/JaggedPass.inc +++ b/data/scripts/maps/JaggedPass.inc @@ -24,7 +24,7 @@ JaggedPass_EventScript_15D285:: @ 815D285 JaggedPass_EventScript_15D29C:: @ 815D29C trainerbattle 0, OPPONENT_DIANA_1, 0, JaggedPass_Text_195E9E, JaggedPass_Text_195EDF - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq JaggedPass_EventScript_15D2C3 msgbox JaggedPass_Text_195F04, 6 @@ -37,7 +37,7 @@ JaggedPass_EventScript_15D2C3:: @ 815D2C3 JaggedPass_EventScript_15D2DA:: @ 815D2DA trainerbattle 0, OPPONENT_ETHAN_1, 0, JaggedPass_Text_195FF2, JaggedPass_Text_196032 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq JaggedPass_EventScript_15D301 msgbox JaggedPass_Text_196077, 6 diff --git a/data/scripts/maps/LavaridgeTown.inc b/data/scripts/maps/LavaridgeTown.inc index e091ed372..e40a9252a 100644 --- a/data/scripts/maps/LavaridgeTown.inc +++ b/data/scripts/maps/LavaridgeTown.inc @@ -58,11 +58,11 @@ LavaridgeTown_EventScript_14E4ED:: @ 814E4ED end LavaridgeTown_EventScript_14E56B:: @ 814E56B - playmusic 415, 1 + playbgm 415, 1 return LavaridgeTown_EventScript_14E570:: @ 814E570 - playmusic 421, 1 + playbgm 421, 1 return LavaridgeTown_EventScript_14E575:: @ 814E575 @@ -105,15 +105,15 @@ LavaridgeTown_EventScript_14E5F5:: @ 814E5F5 call_if 1, LavaridgeTown_EventScript_14E64E disappear 8 reappear 7 - pause 30 + delay 30 compare_var_to_imm 0x8008, 1 call_if 1, LavaridgeTown_EventScript_14E69A compare_var_to_imm 0x8008, 0 call_if 1, LavaridgeTown_EventScript_14E6A5 disappear 7 setvar 0x4053, 2 - playmusicbattle 0 - fadedefault + savebgm 0 + fadedefaultbgm compare_var_to_imm 0x8008, 0 goto_if_eq LavaridgeTown_EventScript_14E644 releaseall @@ -236,7 +236,7 @@ LavaridgeTown_Movement_14E70E:: @ 814E70E step_end LavaridgeTown_EventScript_14E710:: @ 814E710 - specialval RESULT, player_get_direction_lower_nybble + specialvar RESULT, player_get_direction_lower_nybble compare_var_to_imm RESULT, 1 goto_if_eq LavaridgeTown_EventScript_14E721 end @@ -282,7 +282,7 @@ LavaridgeTown_EventScript_14E75A:: @ 814E75A goto_if_eq LavaridgeTown_EventScript_14E7A8 msgbox LavaridgeTown_Text_16C2B6, 4 setflag 266 - fanfare 370 + playfanfare 370 message LavaridgeTown_Text_16C2EA waitfanfare waittext diff --git a/data/scripts/maps/LavaridgeTown_House.inc b/data/scripts/maps/LavaridgeTown_House.inc index 944427bb6..dd5a9cc2b 100644 --- a/data/scripts/maps/LavaridgeTown_House.inc +++ b/data/scripts/maps/LavaridgeTown_House.inc @@ -8,7 +8,7 @@ LavaridgeTown_House_EventScript_1538AE:: @ 81538AE LavaridgeTown_House_EventScript_1538B7:: @ 81538B7 lock faceplayer - checksound + waitse pokecry SPECIES_ZIGZAGOON, 0 msgbox LavaridgeTown_House_Text_176D94, 4 waitpokecry diff --git a/data/scripts/maps/LilycoveCity.inc b/data/scripts/maps/LilycoveCity.inc index 801e25396..5b53435d4 100644 --- a/data/scripts/maps/LilycoveCity.inc +++ b/data/scripts/maps/LilycoveCity.inc @@ -63,7 +63,7 @@ LilycoveCity_EventScript_14CB2B:: @ 814CB2B LilycoveCity_EventScript_14CB74:: @ 814CB74 lock faceplayer - checkdailyflags + dodailyevents checkflag 2255 goto_if_eq LilycoveCity_EventScript_14CBB4 msgbox LilycoveCity_Text_1C5A7A, 4 @@ -172,7 +172,7 @@ LilycoveCity_EventScript_14CC79:: @ 814CC79 LilycoveCity_EventScript_14CC82:: @ 814CC82 lockall - specialval 0x8004, sub_80C4D50 + specialvar 0x8004, sub_80C4D50 switch 0x8004 case 0, LilycoveCity_EventScript_14CCA2 msgbox LilycoveCity_Text_168EA4, 4 @@ -255,7 +255,7 @@ LilycoveCity_EventScript_14CD46:: @ 814CD46 end LilycoveCity_EventScript_14CD60:: @ 814CD60 - playmusic 415, 1 + playbgm 415, 1 checkflag 286 call_if 1, LilycoveCity_EventScript_14CDB0 checkflag 286 @@ -280,13 +280,13 @@ LilycoveCity_EventScript_14CDB9:: @ 814CDB9 LilycoveCity_EventScript_14CDC2:: @ 814CDC2 setflag 286 msgbox LilycoveCity_Text_167AEB, 4 - playmusicbattle 0 - fadedefault + savebgm 0 + fadedefaultbgm release end LilycoveCity_EventScript_14CDD3:: @ 814CDD3 - playmusic 421, 1 + playbgm 421, 1 checkflag 286 call_if 1, LilycoveCity_EventScript_14CE23 checkflag 286 @@ -311,8 +311,8 @@ LilycoveCity_EventScript_14CE2C:: @ 814CE2C LilycoveCity_EventScript_14CE35:: @ 814CE35 setflag 286 msgbox LilycoveCity_Text_16802C, 4 - playmusicbattle 0 - fadedefault + savebgm 0 + fadedefaultbgm release end @@ -414,14 +414,14 @@ LilycoveCity_EventScript_14CF6B:: @ 814CF6B closebutton move LAST_TALKED, LilycoveCity_Movement_1A0845 waitmove 0 - pause 50 + delay 50 setanimation 0, 1 doanimation 30 - pause 15 + delay 15 disappear LAST_TALKED checkanimation 30 - playmusicbattle 0 - fadedefault + savebgm 0 + fadedefaultbgm setflag 292 release end diff --git a/data/scripts/maps/LilycoveCity_ContestHall.inc b/data/scripts/maps/LilycoveCity_ContestHall.inc index 3601cb455..525d57a71 100644 --- a/data/scripts/maps/LilycoveCity_ContestHall.inc +++ b/data/scripts/maps/LilycoveCity_ContestHall.inc @@ -219,7 +219,7 @@ LilycoveCity_ContestHall_EventScript_1592C0:: @ 81592C0 lockall move 29, LilycoveCity_ContestHall_Movement_1A0839 waitmove 0 - pause 25 + delay 25 move 29, LilycoveCity_ContestHall_Movement_1A083D waitmove 0 msgbox LilycoveCity_ContestHall_Text_189DA2, 3 diff --git a/data/scripts/maps/LilycoveCity_ContestLobby.inc b/data/scripts/maps/LilycoveCity_ContestLobby.inc index 4785ffbbb..881a842f1 100644 --- a/data/scripts/maps/LilycoveCity_ContestLobby.inc +++ b/data/scripts/maps/LilycoveCity_ContestLobby.inc @@ -43,7 +43,7 @@ LilycoveCity_ContestLobby_EventScript_1588DE:: @ 81588DE closebutton special sub_80C4CEC setvar 0x4099, 0 - specialval RESULT, GiveMonArtistRibbon + specialvar RESULT, GiveMonArtistRibbon compare_var_to_imm RESULT, 1 call_if 1, LilycoveCity_ContestLobby_EventScript_158948 move 4, LilycoveCity_ContestLobby_Movement_158A43 @@ -72,13 +72,13 @@ LilycoveCity_ContestLobby_EventScript_158948:: @ 8158948 special sub_80C4858 move 4, LilycoveCity_ContestLobby_Movement_158A4E waitmove 0 - playsfx 21 + playse 21 move 4, LilycoveCity_ContestLobby_Movement_1A0833 waitmove 0 move 4, LilycoveCity_ContestLobby_Movement_158A52 waitmove 0 msgbox LilycoveCity_ContestLobby_Text_188BB5, 4 - fanfare 370 + playfanfare 370 msgbox LilycoveCity_ContestLobby_Text_188C03, 4 waitfanfare msgbox LilycoveCity_ContestLobby_Text_188C19, 4 @@ -87,7 +87,7 @@ LilycoveCity_ContestLobby_EventScript_158948:: @ 8158948 return LilycoveCity_ContestLobby_EventScript_158994:: @ 8158994 - specialval 0x8004, sub_80C4D50 + specialvar 0x8004, sub_80C4D50 switch 0x8004 case 1, LilycoveCity_ContestLobby_EventScript_1589D6 case 2, LilycoveCity_ContestLobby_EventScript_1589DA @@ -216,7 +216,7 @@ LilycoveCity_ContestLobby_EventScript_158AAE:: @ 8158AAE closebutton special sub_80C4CEC setvar 0x4099, 0 - specialval RESULT, GiveMonArtistRibbon + specialvar RESULT, GiveMonArtistRibbon compare_var_to_imm RESULT, 1 call_if 1, LilycoveCity_ContestLobby_EventScript_158B18 move 11, LilycoveCity_ContestLobby_Movement_158B6D @@ -245,13 +245,13 @@ LilycoveCity_ContestLobby_EventScript_158B18:: @ 8158B18 special sub_80C4858 move 11, LilycoveCity_ContestLobby_Movement_158B78 waitmove 0 - playsfx 21 + playse 21 move 11, LilycoveCity_ContestLobby_Movement_1A0833 waitmove 0 move 11, LilycoveCity_ContestLobby_Movement_158B7C waitmove 0 msgbox LilycoveCity_ContestLobby_Text_188BB5, 4 - fanfare 370 + playfanfare 370 msgbox LilycoveCity_ContestLobby_Text_188C03, 4 waitfanfare msgbox LilycoveCity_ContestLobby_Text_188C19, 4 @@ -492,28 +492,28 @@ LilycoveCity_ContestLobby_EventScript_158E0B:: @ 8158E0B lockall message2 LilycoveCity_ContestLobby_Text_1888C6 waittext - pause 20 + delay 20 closebutton move 2, LilycoveCity_ContestLobby_Movement_158E9C waitmove 0 - playsfx 71 + playse 71 setmaptile 9, 2, 545, 1 setmaptile 9, 3, 609, 1 special DrawWholeMapView move 2, LilycoveCity_ContestLobby_Movement_158EA0 waitmove 0 - playsfx 71 + playse 71 setmaptile 9, 2, 721, 1 setmaptile 9, 3, 729, 1 special DrawWholeMapView - pause 20 + delay 20 move 2, LilycoveCity_ContestLobby_Movement_158EAE waitmove 0 move 255, LilycoveCity_ContestLobby_Movement_158E99 waitmove 0 message2 LilycoveCity_ContestLobby_Text_1A6832 waittext - pause 20 + delay 20 closebutton move 2, LilycoveCity_ContestLobby_Movement_158EA4 move 255, LilycoveCity_ContestLobby_Movement_158E8E @@ -568,7 +568,7 @@ LilycoveCity_ContestLobby_Movement_158EAE:: @ 8158EAE step_end LilycoveCity_ContestLobby_EventScript_158EB0:: @ 8158EB0 - specialval RESULT, sub_80C5044 + specialvar RESULT, sub_80C5044 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_158EE8 setvar 0x800b, 8 @@ -602,31 +602,31 @@ LilycoveCity_ContestLobby_EventScript_158F08:: @ 8158F08 return LilycoveCity_ContestLobby_EventScript_158F45:: @ 8158F45 - warp3 LinkContestRoom4, 255, 7, 5 + setwarp LinkContestRoom4, 255, 7, 5 special sub_8081334 waitstate return LilycoveCity_ContestLobby_EventScript_158F52:: @ 8158F52 - warp3 LinkContestRoom2, 255, 7, 5 + setwarp LinkContestRoom2, 255, 7, 5 special sub_8081334 waitstate return LilycoveCity_ContestLobby_EventScript_158F5F:: @ 8158F5F - warp3 LinkContestRoom6, 255, 7, 5 + setwarp LinkContestRoom6, 255, 7, 5 special sub_8081334 waitstate return LilycoveCity_ContestLobby_EventScript_158F6C:: @ 8158F6C - warp3 LinkContestRoom5, 255, 7, 5 + setwarp LinkContestRoom5, 255, 7, 5 special sub_8081334 waitstate return LilycoveCity_ContestLobby_EventScript_158F79:: @ 8158F79 - warp3 LinkContestRoom3, 255, 7, 5 + setwarp LinkContestRoom3, 255, 7, 5 special sub_8081334 waitstate return @@ -635,17 +635,17 @@ LilycoveCity_ContestLobby_EventScript_158F86:: @ 8158F86 lockall move 1, LilycoveCity_ContestLobby_Movement_15900B waitmove 0 - playsfx 71 + playse 71 setmaptile 4, 2, 545, 1 setmaptile 4, 3, 609, 1 special DrawWholeMapView move 1, LilycoveCity_ContestLobby_Movement_15900F waitmove 0 - playsfx 71 + playse 71 setmaptile 4, 2, 721, 1 setmaptile 4, 3, 729, 1 special DrawWholeMapView - pause 20 + delay 20 move 1, LilycoveCity_ContestLobby_Movement_15901C waitmove 0 move 255, LilycoveCity_ContestLobby_Movement_159008 diff --git a/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc b/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc index 638bf8cf1..aef4bc74a 100644 --- a/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc +++ b/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc @@ -41,7 +41,7 @@ LilycoveCity_CoveLilyMotel_1F_EventScript_158326:: @ 8158326 LilycoveCity_CoveLilyMotel_1F_EventScript_15834D:: @ 815834D lockall - playsfx 21 + playse 21 move 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0833 waitmove 0 move 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0835 diff --git a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc index 5bdaa610a..98aec1d7a 100644 --- a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc +++ b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc @@ -8,7 +8,7 @@ LilycoveCity_CoveLilyMotel_2F_EventScript_1583A1:: @ 81583A1 call_if 0, LilycoveCity_CoveLilyMotel_2F_EventScript_1583C7 checkflag 2 call_if 1, LilycoveCity_CoveLilyMotel_2F_EventScript_1583DD - specialval RESULT, sub_8090FC0 + specialvar RESULT, sub_8090FC0 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_CoveLilyMotel_2F_EventScript_1583D0 release @@ -20,7 +20,7 @@ LilycoveCity_CoveLilyMotel_2F_EventScript_1583C7:: @ 81583C7 LilycoveCity_CoveLilyMotel_2F_EventScript_1583D0:: @ 81583D0 setflag 2 - fanfare 370 + playfanfare 370 waitfanfare goto LilycoveCity_CoveLilyMotel_2F_EventScript_1583DD end diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc index 2ee04505e..1dd8d5869 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc @@ -21,7 +21,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A39C:: @ 815A39C end LilycoveCity_DepartmentStoreElevator_EventScript_15A402:: @ 815A402 - warpplace LilycoveCity_DepartmentStore_1F, 255, 2, 1 + setdynamicwarp LilycoveCity_DepartmentStore_1F, 255, 2, 1 compare_var_to_imm 0x4043, 0 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 @@ -30,7 +30,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A402:: @ 815A402 end LilycoveCity_DepartmentStoreElevator_EventScript_15A425:: @ 815A425 - warpplace LilycoveCity_DepartmentStore_2F, 255, 2, 1 + setdynamicwarp LilycoveCity_DepartmentStore_2F, 255, 2, 1 compare_var_to_imm 0x4043, 1 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 @@ -39,7 +39,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A425:: @ 815A425 end LilycoveCity_DepartmentStoreElevator_EventScript_15A448:: @ 815A448 - warpplace LilycoveCity_DepartmentStore_3F, 255, 2, 1 + setdynamicwarp LilycoveCity_DepartmentStore_3F, 255, 2, 1 compare_var_to_imm 0x4043, 2 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 @@ -48,7 +48,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A448:: @ 815A448 end LilycoveCity_DepartmentStoreElevator_EventScript_15A46B:: @ 815A46B - warpplace LilycoveCity_DepartmentStore_4F, 255, 2, 1 + setdynamicwarp LilycoveCity_DepartmentStore_4F, 255, 2, 1 compare_var_to_imm 0x4043, 3 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 @@ -57,7 +57,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A46B:: @ 815A46B end LilycoveCity_DepartmentStoreElevator_EventScript_15A48E:: @ 815A48E - warpplace LilycoveCity_DepartmentStore_5F, 255, 2, 1 + setdynamicwarp LilycoveCity_DepartmentStore_5F, 255, 2, 1 compare_var_to_imm 0x4043, 4 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc index 27d217b40..3295bf6ee 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc @@ -147,7 +147,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 updatemoney 0, 0 nop bufferitem 0, 0x4000 - playsfx 106 + playse 106 msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C75F, 4 additem 0x4000, 1 bufferitem 1, 0x4000 @@ -159,7 +159,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 checkitemspace 0x4000, 1 compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_15A388 - playsfx 106 + playse 106 msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C780, 4 additem 0x4000, 1 bufferitem 1, 0x4000 @@ -171,7 +171,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 checkitemspace 0x4000, 1 compare_var_to_imm RESULT, 0 goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_15A388 - playsfx 106 + playse 106 msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C780, 4 additem 0x4000, 1 bufferitem 1, 0x4000 diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc index 6c1ecbc1d..9d22e6055 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc @@ -8,7 +8,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_159D55:: @ 8159D55 LilycoveCity_DepartmentStore_1F_EventScript_159D5E:: @ 8159D5E lock faceplayer - checkdailyflags + dodailyevents compare_var_to_imm 0x4045, 0 goto_if 5, LilycoveCity_DepartmentStore_1F_EventScript_159EB1 checkflag 2250 @@ -25,12 +25,12 @@ LilycoveCity_DepartmentStore_1F_EventScript_159D5E:: @ 8159D5E msgbox LilycoveCity_DepartmentStore_1F_Text_1C4CF6, 4 move 2, LilycoveCity_DepartmentStore_1F_Movement_1A0843 waitmove 0 - playsfx 4 + playse 4 special DoLotteryCornerComputerEffect special PickLotteryCornerTicket - pause 220 + delay 220 special EndLotteryCornerComputerEffect - pause 10 + delay 10 move 2, LilycoveCity_DepartmentStore_1F_Movement_1A0839 waitmove 0 compare_var_to_imm 0x8004, 0 @@ -133,7 +133,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_159EE9:: @ 8159EE9 LilycoveCity_DepartmentStore_1F_EventScript_159EF2:: @ 8159EF2 lock faceplayer - checksound + waitse pokecry SPECIES_AZUMARILL, 0 msgbox LilycoveCity_DepartmentStore_1F_Text_18C0C3, 4 waitpokecry diff --git a/data/scripts/maps/LilycoveCity_Harbor.inc b/data/scripts/maps/LilycoveCity_Harbor.inc index 12c880d31..0d9e70a15 100644 --- a/data/scripts/maps/LilycoveCity_Harbor.inc +++ b/data/scripts/maps/LilycoveCity_Harbor.inc @@ -78,13 +78,13 @@ LilycoveCity_Harbor_EventScript_15998A:: @ 815998A closebutton move LAST_TALKED, LilycoveCity_Harbor_Movement_1A0841 waitmove 0 - pause 30 + delay 30 spriteinvisible LAST_TALKED, 13, 10 compare_var_to_imm FACING, 2 call_if 1, LilycoveCity_Harbor_EventScript_1599D9 compare_var_to_imm FACING, 4 call_if 1, LilycoveCity_Harbor_EventScript_1599CE - pause 30 + delay 30 spriteinvisible 255, 0, 0 setvar 0x8004, 2 call LilycoveCity_Harbor_EventScript_1A040E @@ -116,24 +116,24 @@ LilycoveCity_Harbor_EventScript_1599EE:: @ 81599EE closebutton move LAST_TALKED, LilycoveCity_Harbor_Movement_1A0841 waitmove 0 - pause 30 + delay 30 spriteinvisible LAST_TALKED, 13, 10 - pause 60 + delay 60 reappear 4 - pause 30 + delay 30 move 4, LilycoveCity_Harbor_Movement_1A0839 waitmove 0 msgbox LilycoveCity_Harbor_Text_1C5120, 4 closebutton move 4, LilycoveCity_Harbor_Movement_1A0841 waitmove 0 - pause 30 + delay 30 disappear 4 compare_var_to_imm FACING, 2 call_if 1, LilycoveCity_Harbor_EventScript_1599D9 compare_var_to_imm FACING, 4 call_if 1, LilycoveCity_Harbor_EventScript_1599CE - pause 30 + delay 30 spriteinvisible 255, 0, 0 special ScrSpecial_HealPlayerParty setvar 0x8004, 2 diff --git a/data/scripts/maps/LilycoveCity_House1.inc b/data/scripts/maps/LilycoveCity_House1.inc index 3dae362c1..6440f6d3d 100644 --- a/data/scripts/maps/LilycoveCity_House1.inc +++ b/data/scripts/maps/LilycoveCity_House1.inc @@ -8,7 +8,7 @@ LilycoveCity_House1_EventScript_159B86:: @ 8159B86 LilycoveCity_House1_EventScript_159B8F:: @ 8159B8F lock faceplayer - checksound + waitse pokecry SPECIES_KECLEON, 0 msgbox LilycoveCity_House1_Text_18B82B, 4 waitpokecry diff --git a/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc b/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc index e41d61fe8..663b1f25b 100644 --- a/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc +++ b/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc @@ -98,7 +98,7 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_1586D8:: @ 81586D8 lockall checkflag 236 goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_158793 - specialval 0x8004, sub_80C4D50 + specialvar 0x8004, sub_80C4D50 switch 0x8004 case 1, LilycoveCity_LilycoveMuseum_2F_EventScript_15872C case 2, LilycoveCity_LilycoveMuseum_2F_EventScript_15872C diff --git a/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc b/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc index 0127761a7..01781f3ca 100644 --- a/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc +++ b/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc @@ -40,7 +40,7 @@ LilycoveCity_MoveDeletersHouse_EventScript_159ADE:: @ 8159ADE LilycoveCity_MoveDeletersHouse_EventScript_159B53:: @ 8159B53 special sub_80FA0DC - fanfare 378 + playfanfare 378 waitfanfare msgbox LilycoveCity_MoveDeletersHouse_Text_18B71E, 4 releaseall diff --git a/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc b/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc index e097504cf..dba3cf57a 100644 --- a/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc +++ b/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc @@ -70,35 +70,35 @@ LilycoveCity_PokemonTrainerFanClub_MapScript1_159412:: @ 8159412 LilycoveCity_PokemonTrainerFanClub_EventScript_159429:: @ 8159429 special sub_810FCE8 setvar 0x8004, 8 - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594D5 setvar 0x8004, 9 - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594DD setvar 0x8004, 10 - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594E5 setvar 0x8004, 11 - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594ED setvar 0x8004, 12 - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594F5 setvar 0x8004, 13 - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594FD setvar 0x8004, 14 - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_159505 setvar 0x8004, 15 - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_15950D end @@ -150,10 +150,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15952F:: @ 815952F special sub_810FDAC compare_var_to_imm 0x4095, 0 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15959C - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15956E - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159592 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A400, 4 @@ -161,7 +161,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15952F:: @ 815952F end LilycoveCity_PokemonTrainerFanClub_EventScript_15956E:: @ 815956E - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159588 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A36A, 4 @@ -190,10 +190,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1595A6:: @ 81595A6 special sub_810FDAC compare_var_to_imm 0x4095, 0 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159613 - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1595E5 - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159609 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A629, 4 @@ -201,7 +201,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1595A6:: @ 81595A6 end LilycoveCity_PokemonTrainerFanClub_EventScript_1595E5:: @ 81595E5 - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1595FF msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A584, 4 @@ -230,10 +230,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15961D:: @ 815961D special sub_810FDAC compare_var_to_imm 0x4095, 0 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15968A - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15965C - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159680 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A814, 4 @@ -241,7 +241,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15961D:: @ 815961D end LilycoveCity_PokemonTrainerFanClub_EventScript_15965C:: @ 815965C - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159676 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A71E, 4 @@ -270,10 +270,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159694:: @ 8159694 special sub_810FDAC compare_var_to_imm 0x4095, 0 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159701 - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1596D3 - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1596F7 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AB0A, 4 @@ -281,7 +281,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159694:: @ 8159694 end LilycoveCity_PokemonTrainerFanClub_EventScript_1596D3:: @ 81596D3 - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1596ED msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AA39, 4 @@ -308,10 +308,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15970B:: @ 815970B faceplayer setvar 0x8004, 11 special sub_810FDAC - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15973F - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159763 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18ACC7, 4 @@ -319,7 +319,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15970B:: @ 815970B end LilycoveCity_PokemonTrainerFanClub_EventScript_15973F:: @ 815973F - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159759 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AC15, 4 @@ -341,10 +341,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15976D:: @ 815976D faceplayer setvar 0x8004, 12 special sub_810FDAC - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1597A1 - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1597C5 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AE63, 4 @@ -352,7 +352,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15976D:: @ 815976D end LilycoveCity_PokemonTrainerFanClub_EventScript_1597A1:: @ 81597A1 - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1597BB msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AD6D, 4 @@ -374,10 +374,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1597CF:: @ 81597CF faceplayer setvar 0x8004, 14 special sub_810FDAC - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159803 - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159827 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18B030, 4 @@ -385,7 +385,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1597CF:: @ 81597CF end LilycoveCity_PokemonTrainerFanClub_EventScript_159803:: @ 8159803 - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15981D msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AF62, 4 @@ -407,10 +407,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159831:: @ 8159831 faceplayer setvar 0x8004, 15 special sub_810FDAC - specialval RESULT, sub_810FD60 + specialvar RESULT, sub_810FD60 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159865 - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159889 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18B1FD, 4 @@ -418,7 +418,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159831:: @ 8159831 end LilycoveCity_PokemonTrainerFanClub_EventScript_159865:: @ 8159865 - specialval RESULT, sub_810FCB0 + specialvar RESULT, sub_810FCB0 compare_var_to_imm RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15987F msgbox LilycoveCity_PokemonTrainerFanClub_Text_18B16E, 4 diff --git a/data/scripts/maps/LittlerootTown.inc b/data/scripts/maps/LittlerootTown.inc index 936437fb9..79b89e157 100644 --- a/data/scripts/maps/LittlerootTown.inc +++ b/data/scripts/maps/LittlerootTown.inc @@ -81,7 +81,7 @@ LittlerootTown_EventScript_14D5EF:: @ 814D5EF setvar 0x8005, 8 call LittlerootTown_EventScript_14D62B setflag 761 - warpmuted LittlerootTown_BrendansHouse_1F, 255, 8, 8 + warpsilent LittlerootTown_BrendansHouse_1F, 255, 8, 8 waitstate releaseall end @@ -92,14 +92,14 @@ LittlerootTown_EventScript_14D60D:: @ 814D60D setvar 0x8005, 8 call LittlerootTown_EventScript_14D62B setflag 762 - warpmuted LittlerootTown_MaysHouse_1F, 255, 2, 8 + warpsilent LittlerootTown_MaysHouse_1F, 255, 2, 8 waitstate releaseall end LittlerootTown_EventScript_14D62B:: @ 814D62B - pause 15 - playsfx 10 + delay 15 + playse 10 move 255, LittlerootTown_Movement_14D6C0 waitmove 0 setdooropened 0x8004, 0x8005 @@ -109,7 +109,7 @@ LittlerootTown_EventScript_14D62B:: @ 814D62B waitmove 0 setdoorclosed 0x8004, 0x8005 doorchange - pause 10 + delay 10 move 4, LittlerootTown_Movement_14D6AE waitmove 0 msgbox LittlerootTown_Text_16A7C9, 4 @@ -868,7 +868,7 @@ LittlerootTown_EventScript_14DD2B:: @ 814DD2B LittlerootTown_EventScript_14DD38:: @ 814DD38 msgbox LittlerootTown_Text_16A8FD, 4 - fanfare 370 + playfanfare 370 message LittlerootTown_Text_16AA32 waitfanfare waittext @@ -876,5 +876,5 @@ LittlerootTown_EventScript_14DD38:: @ 814DD38 msgbox LittlerootTown_Text_16AA5C, 4 msgbox LittlerootTown_Text_16AB10, 4 closebutton - pause 30 + delay 30 return diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc index 63e717a51..f0440a49e 100644 --- a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc @@ -90,7 +90,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_152733:: @ 8152733 LittlerootTown_BrendansHouse_1F_EventScript_152744:: @ 8152744 lockall - playsfx 21 + playse 21 move 4, LittlerootTown_BrendansHouse_1F_Movement_1A0833 waitmove 0 move 4, LittlerootTown_BrendansHouse_1F_Movement_1A0835 diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc index 8c0133625..61b981995 100644 --- a/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc +++ b/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc @@ -60,7 +60,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_15281E:: @ 815281E LittlerootTown_BrendansHouse_2F_EventScript_152837:: @ 8152837 setvar 0x8004, 1 special DoPCTurnOnEffect - playsfx SE_PC_ON + playse SE_PC_ON msgbox LittlerootTown_BrendansHouse_2F_Text_1A10D6, 4 special BedroomPC waitstate @@ -69,7 +69,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_152837:: @ 8152837 gBrendanHouse_TurnPCOff:: @ 8152850 setvar 0x8004, 1 - playsfx SE_PC_OFF + playse SE_PC_OFF special DoPCTurnOffEffect releaseall end diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc index 73060a055..882c5ede3 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc @@ -90,7 +90,7 @@ LittlerootTown_MaysHouse_1F_EventScript_152971:: @ 8152971 LittlerootTown_MaysHouse_1F_EventScript_152982:: @ 8152982 lockall - playsfx 21 + playse 21 move 4, LittlerootTown_MaysHouse_1F_Movement_1A0833 waitmove 0 move 4, LittlerootTown_MaysHouse_1F_Movement_1A0835 diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc index ea6869b1b..b9dca087f 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc @@ -37,18 +37,18 @@ LittlerootTown_MaysHouse_2F_EventScript_152A9D:: @ 8152A9D call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152AD4 compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B4A - playsfx 9 + playse 9 disappear LAST_TALKED setvar 0x408d, 3 setvar 0x4050, 1 - playmusicbattle 0 - fadedefault + savebgm 0 + fadedefaultbgm releaseall end LittlerootTown_BrendansHouse_2F_EventScript_152AD4:: @ 8152AD4 msgbox LittlerootTown_BrendansHouse_2F_Text_17337E, 4 - playmusic 415, 1 + playbgm 415, 1 move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0839 waitmove 0 move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0833 @@ -82,7 +82,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_152B3F:: @ 8152B3F LittlerootTown_BrendansHouse_2F_EventScript_152B4A:: @ 8152B4A msgbox LittlerootTown_BrendansHouse_2F_Text_1735C9, 4 - playmusic 421, 1 + playbgm 421, 1 move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0839 waitmove 0 move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0833 @@ -208,7 +208,7 @@ LittlerootTown_MaysHouse_2F_EventScript_152C52:: @ 8152C52 LittlerootTown_MaysHouse_2F_EventScript_152C5C:: @ 8152C5C setvar 0x8004, 2 special DoPCTurnOnEffect - playsfx SE_PC_ON + playse SE_PC_ON msgbox LittlerootTown_MaysHouse_2F_Text_1A10D6, 4 special BedroomPC waitstate @@ -217,7 +217,7 @@ LittlerootTown_MaysHouse_2F_EventScript_152C5C:: @ 8152C5C gMayHouse_TurnPCOff:: @ 8152C75 setvar 0x8004, 2 - playsfx SE_PC_OFF + playse SE_PC_OFF special DoPCTurnOffEffect releaseall end diff --git a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc index d34e52f7f..092d50545 100644 --- a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc +++ b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc @@ -27,7 +27,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152CBE:: @ 8152CBE bufferfirstpoke 0 message LittlerootTown_ProfessorBirchsLab_Text_173D94 waittext - fanfare 370 + playfanfare 370 waitfanfare msgbox LittlerootTown_ProfessorBirchsLab_Text_173EF8, 5 compare_var_to_imm RESULT, 1 @@ -155,7 +155,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152E40:: @ 8152E40 return LittlerootTown_ProfessorBirchsLab_EventScript_152E6D:: @ 8152E6D - fanfare 370 + playfanfare 370 message LittlerootTown_ProfessorBirchsLab_Text_17422F waitfanfare waittext diff --git a/data/scripts/maps/MauvilleCity.inc b/data/scripts/maps/MauvilleCity.inc index d6cade75d..da0ff3a62 100644 --- a/data/scripts/maps/MauvilleCity.inc +++ b/data/scripts/maps/MauvilleCity.inc @@ -95,7 +95,7 @@ MauvilleCity_EventScript_14C0F9:: @ 814C0F9 msgbox MauvilleCity_Text_165D01, 4 move 6, MauvilleCity_Movement_1A0839 waitmove 0 - playsfx 21 + playse 21 move 6, MauvilleCity_Movement_1A0833 waitmove 0 move 6, MauvilleCity_Movement_1A0835 @@ -121,7 +121,7 @@ MauvilleCity_EventScript_14C187:: @ 814C187 waitmove 0 move 6, MauvilleCity_Movement_1A0843 waitmove 0 - pause 30 + delay 30 move 7, MauvilleCity_Movement_14C2D8 waitmove 0 move 255, MauvilleCity_Movement_1A0845 @@ -140,7 +140,7 @@ MauvilleCity_EventScript_14C1D9:: @ 814C1D9 waitmove 0 move 6, MauvilleCity_Movement_1A0843 waitmove 0 - pause 30 + delay 30 move 7, MauvilleCity_Movement_14C2DC waitmove 0 move 255, MauvilleCity_Movement_1A0845 diff --git a/data/scripts/maps/MauvilleCity_GameCorner.inc b/data/scripts/maps/MauvilleCity_GameCorner.inc index 02b0c4bbb..63476bb1a 100644 --- a/data/scripts/maps/MauvilleCity_GameCorner.inc +++ b/data/scripts/maps/MauvilleCity_GameCorner.inc @@ -43,7 +43,7 @@ MauvilleCity_GameCorner_EventScript_156AAE:: @ 8156AAE updatemoney 0, 0 nop updatecoins 0, 5 - playsfx 95 + playse 95 msgbox MauvilleCity_GameCorner_Text_181CFE, 4 hidemoney 0, 0 hidecoins 0, 5 @@ -62,7 +62,7 @@ MauvilleCity_GameCorner_EventScript_156AF0:: @ 8156AF0 updatemoney 0, 0 nop updatecoins 0, 5 - playsfx 95 + playse 95 msgbox MauvilleCity_GameCorner_Text_181CFE, 4 hidemoney 0, 0 hidecoins 0, 5 @@ -163,7 +163,7 @@ MauvilleCity_GameCorner_EventScript_156C46:: @ 8156C46 removecoins 1000 adddecor 88 updatecoins 0, 0 - playsfx 95 + playse 95 msgbox MauvilleCity_GameCorner_Text_181E49, 4 goto MauvilleCity_GameCorner_EventScript_156B9B end @@ -179,7 +179,7 @@ MauvilleCity_GameCorner_EventScript_156C80:: @ 8156C80 removecoins 1000 adddecor 89 updatecoins 0, 0 - playsfx 95 + playse 95 msgbox MauvilleCity_GameCorner_Text_181E49, 4 goto MauvilleCity_GameCorner_EventScript_156B9B end @@ -195,7 +195,7 @@ MauvilleCity_GameCorner_EventScript_156CBA:: @ 8156CBA removecoins 1000 adddecor 90 updatecoins 0, 0 - playsfx 95 + playse 95 msgbox MauvilleCity_GameCorner_Text_181E49, 4 goto MauvilleCity_GameCorner_EventScript_156B9B end @@ -297,7 +297,7 @@ MauvilleCity_GameCorner_EventScript_156E3C:: @ 8156E3C removecoins 1500 additem ITEM_TM32, 1 updatecoins 0, 0 - playsfx 95 + playse 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 goto MauvilleCity_GameCorner_EventScript_156D49 end @@ -312,7 +312,7 @@ MauvilleCity_GameCorner_EventScript_156E76:: @ 8156E76 removecoins 3500 additem ITEM_TM29, 1 updatecoins 0, 0 - playsfx 95 + playse 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 goto MauvilleCity_GameCorner_EventScript_156D49 end @@ -327,7 +327,7 @@ MauvilleCity_GameCorner_EventScript_156EB0:: @ 8156EB0 removecoins 4000 additem ITEM_TM35, 1 updatecoins 0, 0 - playsfx 95 + playse 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 goto MauvilleCity_GameCorner_EventScript_156D49 end @@ -342,7 +342,7 @@ MauvilleCity_GameCorner_EventScript_156EEA:: @ 8156EEA removecoins 4000 additem ITEM_TM24, 1 updatecoins 0, 0 - playsfx 95 + playse 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 goto MauvilleCity_GameCorner_EventScript_156D49 end @@ -357,7 +357,7 @@ MauvilleCity_GameCorner_EventScript_156F24:: @ 8156F24 removecoins 4000 additem ITEM_TM13, 1 updatecoins 0, 0 - playsfx 95 + playse 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 goto MauvilleCity_GameCorner_EventScript_156D49 end @@ -468,7 +468,7 @@ MauvilleCity_GameCorner_EventScript_15709C:: @ 815709C setflag 225 givecoins 20 msgbox MauvilleCity_GameCorner_Text_18208E, 4 - playsfx 95 + playse 95 goto MauvilleCity_GameCorner_EventScript_1570CA end @@ -525,7 +525,7 @@ MauvilleCity_GameCorner_EventScript_157135:: @ 8157135 compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 0 - specialval RESULT, sub_810F424 + specialvar RESULT, sub_810F424 pokecasino RESULT releaseall end @@ -536,7 +536,7 @@ MauvilleCity_GameCorner_EventScript_157155:: @ 8157155 compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 1 - specialval RESULT, sub_810F424 + specialvar RESULT, sub_810F424 pokecasino RESULT releaseall end @@ -547,7 +547,7 @@ MauvilleCity_GameCorner_EventScript_157175:: @ 8157175 compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 2 - specialval RESULT, sub_810F424 + specialvar RESULT, sub_810F424 pokecasino RESULT releaseall end @@ -558,7 +558,7 @@ MauvilleCity_GameCorner_EventScript_157195:: @ 8157195 compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 3 - specialval RESULT, sub_810F424 + specialvar RESULT, sub_810F424 pokecasino RESULT releaseall end @@ -569,7 +569,7 @@ MauvilleCity_GameCorner_EventScript_1571B5:: @ 81571B5 compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 4 - specialval RESULT, sub_810F424 + specialvar RESULT, sub_810F424 pokecasino RESULT releaseall end @@ -580,7 +580,7 @@ MauvilleCity_GameCorner_EventScript_1571D5:: @ 81571D5 compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 5 - specialval RESULT, sub_810F424 + specialvar RESULT, sub_810F424 pokecasino RESULT releaseall end @@ -591,7 +591,7 @@ MauvilleCity_GameCorner_EventScript_1571F5:: @ 81571F5 compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 6 - specialval RESULT, sub_810F424 + specialvar RESULT, sub_810F424 pokecasino RESULT releaseall end @@ -602,7 +602,7 @@ MauvilleCity_GameCorner_EventScript_157215:: @ 8157215 compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 7 - specialval RESULT, sub_810F424 + specialvar RESULT, sub_810F424 pokecasino RESULT releaseall end @@ -613,7 +613,7 @@ MauvilleCity_GameCorner_EventScript_157235:: @ 8157235 compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 8 - specialval RESULT, sub_810F424 + specialvar RESULT, sub_810F424 pokecasino RESULT releaseall end @@ -624,7 +624,7 @@ MauvilleCity_GameCorner_EventScript_157255:: @ 8157255 compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 9 - specialval RESULT, sub_810F424 + specialvar RESULT, sub_810F424 pokecasino RESULT releaseall end @@ -635,7 +635,7 @@ MauvilleCity_GameCorner_EventScript_157275:: @ 8157275 compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 10 - specialval RESULT, sub_810F424 + specialvar RESULT, sub_810F424 pokecasino RESULT releaseall end @@ -646,7 +646,7 @@ MauvilleCity_GameCorner_EventScript_157295:: @ 8157295 compare_var_to_imm RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 11 - specialval RESULT, sub_810F424 + specialvar RESULT, sub_810F424 pokecasino RESULT releaseall end diff --git a/data/scripts/maps/MauvilleCity_Gym.inc b/data/scripts/maps/MauvilleCity_Gym.inc index 3255f8459..1030d8f68 100644 --- a/data/scripts/maps/MauvilleCity_Gym.inc +++ b/data/scripts/maps/MauvilleCity_Gym.inc @@ -91,7 +91,7 @@ MauvilleCity_Gym_EventScript_1565DB:: @ 81565DB call MauvilleCity_Gym_EventScript_1A01C0 special MauvilleGymSpecial3 special DrawWholeMapView - playsfx 44 + playse 44 goto MauvilleCity_Gym_EventScript_15661D end @@ -146,7 +146,7 @@ MauvilleCity_Gym_EventScript_1566BA:: @ 81566BA special MauvilleGymSpecial2 special MauvilleGymSpecial1 special DrawWholeMapView - playsfx 44 + playse 44 checkflag 99 goto_if_eq MauvilleCity_Gym_EventScript_1566E1 checkflag 99 diff --git a/data/scripts/maps/MauvilleCity_House2.inc b/data/scripts/maps/MauvilleCity_House2.inc index 7182a59aa..4308fd5ab 100644 --- a/data/scripts/maps/MauvilleCity_House2.inc +++ b/data/scripts/maps/MauvilleCity_House2.inc @@ -14,7 +14,7 @@ MauvilleCity_House2_EventScript_1572C0:: @ 81572C0 end MauvilleCity_House2_EventScript_1572E5:: @ 81572E5 - playsfx 21 + playse 21 move LAST_TALKED, MauvilleCity_House2_Movement_1A0833 waitmove 0 move LAST_TALKED, MauvilleCity_House2_Movement_1A0835 diff --git a/data/scripts/maps/MeteorFalls_1F_1R.inc b/data/scripts/maps/MeteorFalls_1F_1R.inc index d5e1574cc..07e264fa8 100644 --- a/data/scripts/maps/MeteorFalls_1F_1R.inc +++ b/data/scripts/maps/MeteorFalls_1F_1R.inc @@ -10,7 +10,7 @@ MeteorFalls_1F_1R_EventScript_15C49C:: @ 815C49C lockall move 255, MeteorFalls_1F_1R_Movement_1A0845 waitmove 0 - pause 30 + delay 30 move 5, MeteorFalls_1F_1R_Movement_1A0845 waitmove 0 msgbox MeteorFalls_1F_1R_Text_193237, 4 @@ -18,7 +18,7 @@ MeteorFalls_1F_1R_EventScript_15C49C:: @ 815C49C move 5, MeteorFalls_1F_1R_Movement_1A0841 move 6, MeteorFalls_1F_1R_Movement_1A0841 waitmove 0 - playsfx 21 + playse 21 move 5, MeteorFalls_1F_1R_Movement_1A0833 waitmove 0 move 5, MeteorFalls_1F_1R_Movement_1A0835 diff --git a/data/scripts/maps/MeteorFalls_1F_2R.inc b/data/scripts/maps/MeteorFalls_1F_2R.inc index e6225bba0..a5c89055b 100644 --- a/data/scripts/maps/MeteorFalls_1F_2R.inc +++ b/data/scripts/maps/MeteorFalls_1F_2R.inc @@ -3,7 +3,7 @@ MeteorFalls_1F_2R_MapScripts:: @ 815C678 MeteorFalls_1F_2R_EventScript_15C679:: @ 815C679 trainerbattle 0, OPPONENT_NICOLAS_1, 0, MeteorFalls_1F_2R_Text_1939C5, MeteorFalls_1F_2R_Text_193A35 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq MeteorFalls_1F_2R_EventScript_15C6A0 msgbox MeteorFalls_1F_2R_Text_193A60, 6 @@ -16,7 +16,7 @@ MeteorFalls_1F_2R_EventScript_15C6A0:: @ 815C6A0 MeteorFalls_1F_2R_EventScript_15C6B7:: @ 815C6B7 trainerbattle 4, OPPONENT_JOHN_AND_JAY_1, 0, MeteorFalls_1F_2R_Text_193BB7, MeteorFalls_1F_2R_Text_193C10, MeteorFalls_1F_2R_Text_193C9F - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq MeteorFalls_1F_2R_EventScript_15C6E2 msgbox MeteorFalls_1F_2R_Text_193C35, 6 @@ -29,7 +29,7 @@ MeteorFalls_1F_2R_EventScript_15C6E2:: @ 815C6E2 MeteorFalls_1F_2R_EventScript_15C6FD:: @ 815C6FD trainerbattle 4, OPPONENT_JOHN_AND_JAY_1, 0, MeteorFalls_1F_2R_Text_193D10, MeteorFalls_1F_2R_Text_193D6E, MeteorFalls_1F_2R_Text_193DFB - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq MeteorFalls_1F_2R_EventScript_15C728 msgbox MeteorFalls_1F_2R_Text_193D9A, 6 diff --git a/data/scripts/maps/MossdeepCity_Gym.inc b/data/scripts/maps/MossdeepCity_Gym.inc index 4112a3b15..de38e8fd0 100644 --- a/data/scripts/maps/MossdeepCity_Gym.inc +++ b/data/scripts/maps/MossdeepCity_Gym.inc @@ -94,7 +94,7 @@ MossdeepCity_Gym_EventScript_15A5EA:: @ 815A5EA MossdeepCity_Gym_EventScript_15A619:: @ 815A619 special DrawWholeMapView - playsfx 36 + playse 36 releaseall end diff --git a/data/scripts/maps/MossdeepCity_House1.inc b/data/scripts/maps/MossdeepCity_House1.inc index 8f3d2ebfc..b6fe4fd6e 100644 --- a/data/scripts/maps/MossdeepCity_House1.inc +++ b/data/scripts/maps/MossdeepCity_House1.inc @@ -6,7 +6,7 @@ MossdeepCity_House1_EventScript_15A82F:: @ 815A82F faceplayer bufferfirstpoke 0 msgbox MossdeepCity_House1_Text_18D465, 4 - specialval RESULT, GetPokeblockNameByMonNature + specialvar RESULT, GetPokeblockNameByMonNature compare_var_to_imm RESULT, 0 goto_if_eq MossdeepCity_House1_EventScript_15A855 msgbox MossdeepCity_House1_Text_18D475, 4 diff --git a/data/scripts/maps/MossdeepCity_House2.inc b/data/scripts/maps/MossdeepCity_House2.inc index 9be55e8d0..e3485ae0d 100644 --- a/data/scripts/maps/MossdeepCity_House2.inc +++ b/data/scripts/maps/MossdeepCity_House2.inc @@ -12,7 +12,7 @@ MossdeepCity_House2_EventScript_15A872:: @ 815A872 MossdeepCity_House2_EventScript_15A87B:: @ 815A87B lock faceplayer - checksound + waitse pokecry SPECIES_WINGULL, 0 msgbox MossdeepCity_House2_Text_18D61E, 4 waitpokecry diff --git a/data/scripts/maps/MossdeepCity_House4.inc b/data/scripts/maps/MossdeepCity_House4.inc index 6db52bc42..9b1b17c69 100644 --- a/data/scripts/maps/MossdeepCity_House4.inc +++ b/data/scripts/maps/MossdeepCity_House4.inc @@ -34,7 +34,7 @@ MossdeepCity_House4_EventScript_15AB6D:: @ 815AB6D MossdeepCity_House4_EventScript_15AB77:: @ 815AB77 lock faceplayer - checksound + waitse pokecry SPECIES_SKITTY, 0 msgbox MossdeepCity_House4_Text_18E1E1, 4 waitpokecry diff --git a/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc b/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc index f5927aa77..40ed4f4ef 100644 --- a/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc +++ b/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc @@ -4,8 +4,8 @@ MossdeepCity_SpaceCenter_1F_MapScripts:: @ 815AB8A MossdeepCity_SpaceCenter_1F_EventScript_15AB8B:: @ 815AB8B lock faceplayer - checkdailyflags - specialval RESULT, GetWeekCount + dodailyevents + specialvar RESULT, GetWeekCount buffernum 0, RESULT compare_var_to_imm RESULT, 0 call_if 1, MossdeepCity_SpaceCenter_1F_EventScript_15ABBA diff --git a/data/scripts/maps/MossdeepCity_StevensHouse.inc b/data/scripts/maps/MossdeepCity_StevensHouse.inc index c283d0532..d5004c644 100644 --- a/data/scripts/maps/MossdeepCity_StevensHouse.inc +++ b/data/scripts/maps/MossdeepCity_StevensHouse.inc @@ -31,7 +31,7 @@ MossdeepCity_StevensHouse_EventScript_15AA0B:: @ 815AA0B lockall move 1, MossdeepCity_StevensHouse_Movement_1A083F waitmove 0 - playsfx 21 + playse 21 move 1, MossdeepCity_StevensHouse_Movement_1A0833 waitmove 0 move 1, MossdeepCity_StevensHouse_Movement_1A0835 @@ -44,7 +44,7 @@ MossdeepCity_StevensHouse_EventScript_15AA0B:: @ 815AA0B setflag 302 msgbox MossdeepCity_StevensHouse_Text_18DB22, 4 closebutton - pause 20 + delay 20 move 1, MossdeepCity_StevensHouse_Movement_15AA76 waitmove 0 setvar 0x40c6, 1 @@ -79,7 +79,7 @@ MossdeepCity_StevensHouse_EventScript_15AA7C:: @ 815AA7C goto_if_eq MossdeepCity_StevensHouse_EventScript_15AADC copyvar 0x8004, RESULT disappear 2 - fanfare 370 + playfanfare 370 message MossdeepCity_StevensHouse_Text_18DD61 waitfanfare waittext diff --git a/data/scripts/maps/MtChimney.inc b/data/scripts/maps/MtChimney.inc index 9fa2b77de..578743995 100644 --- a/data/scripts/maps/MtChimney.inc +++ b/data/scripts/maps/MtChimney.inc @@ -440,7 +440,7 @@ MtChimney_EventScript_15D1DA:: @ 815D1DA MtChimney_EventScript_15D1E3:: @ 815D1E3 trainerbattle 0, OPPONENT_SHELBY_1, 0, MtChimney_Text_19597F, MtChimney_Text_1959D8 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq MtChimney_EventScript_15D20A msgbox MtChimney_Text_195A04, 6 diff --git a/data/scripts/maps/MtPyre_2F.inc b/data/scripts/maps/MtPyre_2F.inc index c44251af7..8d48dac84 100644 --- a/data/scripts/maps/MtPyre_2F.inc +++ b/data/scripts/maps/MtPyre_2F.inc @@ -6,7 +6,7 @@ MtPyre_2F_MapScripts:: @ 815D36E MtPyre_2F_MapScript1_15D37E:: @ 815D37E tileeffect 7 - warp5 MtPyre_1F, 255, 0, 0 + setholewarp MtPyre_1F, 255, 0, 0 end MtPyre_2F_EventScript_15D389:: @ 815D389 diff --git a/data/scripts/maps/MtPyre_6F.inc b/data/scripts/maps/MtPyre_6F.inc index 6b85a88c3..5d650a8a6 100644 --- a/data/scripts/maps/MtPyre_6F.inc +++ b/data/scripts/maps/MtPyre_6F.inc @@ -3,7 +3,7 @@ MtPyre_6F_MapScripts:: @ 815D447 MtPyre_6F_EventScript_15D448:: @ 815D448 trainerbattle 0, OPPONENT_VALERIE_1, 0, MtPyre_6F_Text_1969FE, MtPyre_6F_Text_196A30 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq MtPyre_6F_EventScript_15D46F msgbox MtPyre_6F_Text_196A4C, 6 diff --git a/data/scripts/maps/MtPyre_Summit.inc b/data/scripts/maps/MtPyre_Summit.inc index cc66242e3..a558475c5 100644 --- a/data/scripts/maps/MtPyre_Summit.inc +++ b/data/scripts/maps/MtPyre_Summit.inc @@ -29,7 +29,7 @@ MtPyre_Summit_EventScript_15D4E1:: @ 815D4E1 waitmove 0 move 2, MtPyre_Summit_Movement_1A0845 waitmove 0 - pause 50 + delay 50 compare_var_to_imm 0x8008, 0 call_if 1, MtPyre_Summit_EventScript_15D593 compare_var_to_imm 0x8008, 1 @@ -50,7 +50,7 @@ MtPyre_Summit_EventScript_15D4E1:: @ 815D4E1 setflag 916 setflag 917 fadescreen 0 - pause 20 + delay 20 call MtPyre_Summit_EventScript_15D57A compare_var_to_imm 0x8008, 0 call_if 1, MtPyre_Summit_EventScript_15D5AA @@ -201,10 +201,10 @@ MtPyre_Summit_EventScript_15D669:: @ 815D669 closebutton move LAST_TALKED, MtPyre_Summit_Movement_1A0841 waitmove 0 - pause 40 + delay 40 move LAST_TALKED, MtPyre_Summit_Movement_1A0839 waitmove 0 - pause 10 + delay 10 .ifdef SAPPHIRE msgbox UnknownString_81B5762, 4 .else @@ -267,7 +267,7 @@ MtPyre_Summit_EventScript_15D6F2:: @ 815D6F2 waitmove 0 move 2, MtPyre_Summit_Movement_1A0845 waitmove 0 - pause 50 + delay 50 compare_var_to_imm 0x8008, 0 call_if 1, MtPyre_Summit_EventScript_15D75E compare_var_to_imm 0x8008, 1 diff --git a/data/scripts/maps/NewMauville_Entrance.inc b/data/scripts/maps/NewMauville_Entrance.inc index 94836d8c4..eb3f63225 100644 --- a/data/scripts/maps/NewMauville_Entrance.inc +++ b/data/scripts/maps/NewMauville_Entrance.inc @@ -40,7 +40,7 @@ NewMauville_Entrance_EventScript_15E4DC:: @ 815E4DC setmaptile 4, 1, 716, 0 setmaptile 5, 1, 717, 1 special DrawWholeMapView - playsfx 20 + playse 20 setvar 0x40ba, 1 releaseall end diff --git a/data/scripts/maps/NewMauville_Inside.inc b/data/scripts/maps/NewMauville_Inside.inc index 3407c8a01..4fdf02d15 100644 --- a/data/scripts/maps/NewMauville_Inside.inc +++ b/data/scripts/maps/NewMauville_Inside.inc @@ -31,7 +31,7 @@ NewMauville_Inside_EventScript_15E5AA:: @ 815E5AA lockall setvar 0x4001, 1 setvar 0x4002, 0 - playsfx 21 + playse 21 call NewMauville_Inside_EventScript_15E5DA special DrawWholeMapView releaseall @@ -41,7 +41,7 @@ NewMauville_Inside_EventScript_15E5C2:: @ 815E5C2 lockall setvar 0x4001, 0 setvar 0x4002, 1 - playsfx 21 + playse 21 call NewMauville_Inside_EventScript_15E728 special DrawWholeMapView releaseall @@ -165,9 +165,9 @@ NewMauville_Inside_EventScript_15E900:: @ 815E900 lock faceplayer setwildbattle SPECIES_VOLTORB, 25, ITEM_NONE - checksound + waitse pokecry SPECIES_VOLTORB, 2 - pause 40 + delay 40 waitpokecry setflag 974 setflag 2145 @@ -180,9 +180,9 @@ NewMauville_Inside_EventScript_15E91E:: @ 815E91E lock faceplayer setwildbattle SPECIES_VOLTORB, 25, ITEM_NONE - checksound + waitse pokecry SPECIES_VOLTORB, 2 - pause 40 + delay 40 waitpokecry setflag 975 setflag 2145 @@ -195,9 +195,9 @@ NewMauville_Inside_EventScript_15E93C:: @ 815E93C lock faceplayer setwildbattle SPECIES_VOLTORB, 25, ITEM_NONE - checksound + waitse pokecry SPECIES_VOLTORB, 2 - pause 40 + delay 40 waitpokecry setflag 976 setflag 2145 diff --git a/data/scripts/maps/OldaleTown.inc b/data/scripts/maps/OldaleTown.inc index eef21daa7..7cac8011a 100644 --- a/data/scripts/maps/OldaleTown.inc +++ b/data/scripts/maps/OldaleTown.inc @@ -43,7 +43,7 @@ OldaleTown_EventScript_14DDBC:: @ 814DDBC checkflag 1 goto_if_eq OldaleTown_EventScript_14DE79 setflag 1 - playmusic 420, 0 + playbgm 420, 0 msgbox OldaleTown_Text_16AEF2, 4 closebutton switch FACING @@ -80,7 +80,7 @@ OldaleTown_EventScript_14DE4C:: @ 814DE4C goto_if_eq OldaleTown_EventScript_14DE83 msgbox OldaleTown_Text_16AFE1, 4 setflag 132 - fadedefault + fadedefaultbgm release end @@ -91,7 +91,7 @@ OldaleTown_EventScript_14DE79:: @ 814DE79 OldaleTown_EventScript_14DE83:: @ 814DE83 msgbox OldaleTown_Text_1A0CC2, 4 - fadedefault + fadedefaultbgm release end diff --git a/data/scripts/maps/PacifidlogTown_House2.inc b/data/scripts/maps/PacifidlogTown_House2.inc index 07b6150d7..e604a4f33 100644 --- a/data/scripts/maps/PacifidlogTown_House2.inc +++ b/data/scripts/maps/PacifidlogTown_House2.inc @@ -4,7 +4,7 @@ PacifidlogTown_House2_MapScripts:: @ 8154167 PacifidlogTown_House2_EventScript_154168:: @ 8154168 lock faceplayer - checkdailyflags + dodailyevents call PacifidlogTown_House2_EventScript_1541B4 checkflag 299 goto_if_eq PacifidlogTown_House2_EventScript_154254 @@ -13,10 +13,10 @@ PacifidlogTown_House2_EventScript_154168:: @ 8154168 checkflag 300 call_if 0, PacifidlogTown_House2_EventScript_1541D7 setflag 300 - specialval RESULT, GetLeadMonFriendshipScore + specialvar RESULT, GetLeadMonFriendshipScore compare_var_to_imm RESULT, 4 goto_if 4, PacifidlogTown_House2_EventScript_1541EC - specialval RESULT, GetLeadMonFriendshipScore + specialvar RESULT, GetLeadMonFriendshipScore compare_var_to_imm RESULT, 2 goto_if 4, PacifidlogTown_House2_EventScript_15421B goto PacifidlogTown_House2_EventScript_154225 @@ -25,7 +25,7 @@ PacifidlogTown_House2_EventScript_154168:: @ 8154168 PacifidlogTown_House2_EventScript_1541B4:: @ 81541B4 checkflag 299 goto_if 0, PacifidlogTown_House2_EventScript_1A14DC - specialval RESULT, sub_810F908 + specialvar RESULT, sub_810F908 compare_var_to_imm RESULT, 0 call_if 1, PacifidlogTown_House2_EventScript_1541E8 return @@ -71,7 +71,7 @@ PacifidlogTown_House2_EventScript_154225:: @ 8154225 end PacifidlogTown_House2_EventScript_154254:: @ 8154254 - specialval RESULT, sub_810F908 + specialvar RESULT, sub_810F908 buffernum 0, RESULT msgbox PacifidlogTown_House2_Text_1792F2, 4 release @@ -80,7 +80,7 @@ PacifidlogTown_House2_EventScript_154254:: @ 8154254 PacifidlogTown_House2_EventScript_154267:: @ 8154267 lock faceplayer - checksound + waitse pokecry SPECIES_AZURILL, 0 msgbox PacifidlogTown_House2_Text_17938B, 4 waitpokecry @@ -91,7 +91,7 @@ PacifidlogTown_House2_EventScript_154267:: @ 8154267 PacifidlogTown_House2_EventScript_154282:: @ 8154282 lock faceplayer - checksound + waitse pokecry SPECIES_AZURILL, 2 msgbox PacifidlogTown_House2_Text_1793CC, 4 waitpokecry diff --git a/data/scripts/maps/PacifidlogTown_House3.inc b/data/scripts/maps/PacifidlogTown_House3.inc index 3a8dc3b1d..e39db3921 100644 --- a/data/scripts/maps/PacifidlogTown_House3.inc +++ b/data/scripts/maps/PacifidlogTown_House3.inc @@ -8,7 +8,7 @@ PacifidlogTown_House3_EventScript_15429E:: @ 815429E goto_if_eq PacifidlogTown_House3_EventScript_154338 setvar 0x8008, 2 copyvar 0x8004, 0x8008 - specialval RESULT, sub_804D89C + specialvar RESULT, sub_804D89C copyvar 0x8009, RESULT msgbox PacifidlogTown_House3_Text_17940E, 5 compare_var_to_imm RESULT, 0 @@ -19,7 +19,7 @@ PacifidlogTown_House3_EventScript_15429E:: @ 815429E compare_var_to_imm 0x8004, 255 goto_if_eq PacifidlogTown_House3_EventScript_154320 copyvar 0x8005, 0x800a - specialval RESULT, sub_804DB2C + specialvar RESULT, sub_804DB2C copyvar 0x800b, RESULT compare_var_to_var RESULT, 0x8009 goto_if 5, PacifidlogTown_House3_EventScript_15432A diff --git a/data/scripts/maps/PacifidlogTown_House5.inc b/data/scripts/maps/PacifidlogTown_House5.inc index 008c2f800..abbf81dd8 100644 --- a/data/scripts/maps/PacifidlogTown_House5.inc +++ b/data/scripts/maps/PacifidlogTown_House5.inc @@ -4,7 +4,7 @@ PacifidlogTown_House5_MapScripts:: @ 8154393 PacifidlogTown_House5_EventScript_154394:: @ 8154394 lock faceplayer - specialval RESULT, IsMirageIslandPresent + specialvar RESULT, IsMirageIslandPresent compare_var_to_imm RESULT, 1 goto_if_eq PacifidlogTown_House5_EventScript_1543B0 msgbox PacifidlogTown_House5_Text_179718, 4 diff --git a/data/scripts/maps/PetalburgCity.inc b/data/scripts/maps/PetalburgCity.inc index f5b683b34..e1e49096a 100644 --- a/data/scripts/maps/PetalburgCity.inc +++ b/data/scripts/maps/PetalburgCity.inc @@ -16,7 +16,7 @@ PetalburgCity_EventScript_14B731:: @ 814B731 return PetalburgCity_EventScript_14B739:: @ 814B739 - playmusicbattle 420 + savebgm 420 return PetalburgCity_MapScript2_14B73D:: @ 814B73D @@ -41,7 +41,7 @@ PetalburgCity_EventScript_14B747:: @ 814B747 closebutton clearflag 0x4000 setvar 0x4057, 3 - fadedefault + fadedefaultbgm clearflag 0x4001 special LoadPlayerParty setvar 0x4085, 1 @@ -181,8 +181,8 @@ PetalburgCity_EventScript_14B85A:: @ 814B85A PetalburgCity_EventScript_14B866:: @ 814B866 move 9, PetalburgCity_Movement_1A0839 waitmove 0 - playmusic 420, 0 - playsfx 21 + playbgm 420, 0 + playse 21 move 9, PetalburgCity_Movement_1A0833 waitmove 0 move 9, PetalburgCity_Movement_1A0835 @@ -213,7 +213,7 @@ PetalburgCity_EventScript_14B866:: @ 814B866 closebutton move 9, PetalburgCity_Movement_14B9F4 waitmove 0 - fadedefault + fadedefaultbgm releaseall end diff --git a/data/scripts/maps/PetalburgCity_Gym.inc b/data/scripts/maps/PetalburgCity_Gym.inc index e22f02b50..489a3f8fd 100644 --- a/data/scripts/maps/PetalburgCity_Gym.inc +++ b/data/scripts/maps/PetalburgCity_Gym.inc @@ -84,10 +84,10 @@ PetalburgCity_Gym_EventScript_15456C:: @ 815456C move 255, PetalburgCity_Gym_Movement_1A0845 move 10, PetalburgCity_Gym_Movement_1545B4 waitmove 0 - playsfx 9 + playse 9 disappear 10 setflag 726 - pause 30 + delay 30 move 255, PetalburgCity_Gym_Movement_1A0841 waitmove 0 msgbox PetalburgCity_Gym_Text_17A2A4, 4 @@ -143,7 +143,7 @@ PetalburgCity_Gym_EventScript_15465E:: @ 815465E PetalburgCity_Gym_EventScript_154669:: @ 8154669 reappear 10 - playsfx 8 + playse 8 compare_var_to_imm 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_1547EE compare_var_to_imm 0x8008, 1 @@ -195,7 +195,7 @@ PetalburgCity_Gym_EventScript_154669:: @ 8154669 msgbox PetalburgCity_Gym_Text_17A171, 4 closebutton setflag 0x4001 - playmusic 420, 0 + playbgm 420, 0 compare_var_to_imm 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_154835 compare_var_to_imm 0x8008, 1 @@ -363,7 +363,7 @@ PetalburgCity_Gym_EventScript_15493D:: @ 815493D end PetalburgCity_Gym_EventScript_154969:: @ 8154969 - specialval RESULT, IsEnigmaBerryValid + specialvar RESULT, IsEnigmaBerryValid compare_var_to_imm RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_1549B2 checkitem ITEM_ENIGMA_BERRY, 1 @@ -427,7 +427,7 @@ PetalburgCity_Gym_EventScript_154A2C:: @ 8154A2C call_if 1, PetalburgCity_Gym_EventScript_154AD2 compare_var_to_imm FACING, 4 call_if 1, PetalburgCity_Gym_EventScript_154ADD - pause 70 + delay 70 compare_var_to_imm FACING, 2 call_if 1, PetalburgCity_Gym_EventScript_154AE8 compare_var_to_imm FACING, 1 @@ -605,8 +605,8 @@ PetalburgCity_Gym_EventScript_154B73:: @ 8154B73 PetalburgCity_Gym_EventScript_154BA8:: @ 8154BA8 closebutton - pause 30 - warpwalk PetalburgCity_Gym, 255, 32776, 32777 + delay 30 + warpdoor PetalburgCity_Gym, 255, 32776, 32777 waitstate releaseall end diff --git a/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc b/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc index 0884db479..25783cf33 100644 --- a/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc @@ -27,7 +27,7 @@ PetalburgCity_PokemonCenter_1F_EventScript_155233:: @ 8155233 lock faceplayer msgbox PetalburgCity_PokemonCenter_1F_Text_17BDC5, 4 - specialval RESULT, IsStarterInParty + specialvar RESULT, IsStarterInParty compare_var_to_imm RESULT, 1 goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_15524F release diff --git a/data/scripts/maps/PetalburgWoods.inc b/data/scripts/maps/PetalburgWoods.inc index dcf0a27cf..8c90aa09c 100644 --- a/data/scripts/maps/PetalburgWoods.inc +++ b/data/scripts/maps/PetalburgWoods.inc @@ -13,7 +13,7 @@ PetalburgWoods_EventScript_15CCA8:: @ 815CCA8 waitmove 0 msgbox PetalburgWoods_Text_194D92, 4 closebutton - playmusic BGM_EVIL_TEAM, 0 + playbgm BGM_EVIL_TEAM, 0 move 3, PetalburgWoods_Movement_15CEC3 waitmove 0 msgbox PetalburgWoods_Text_194DED, 4 @@ -48,7 +48,7 @@ PetalburgWoods_EventScript_15CD42:: @ 815CD42 waitmove 0 msgbox PetalburgWoods_Text_194D92, 4 closebutton - playmusic BGM_EVIL_TEAM, 0 + playbgm BGM_EVIL_TEAM, 0 move 3, PetalburgWoods_Movement_15CEC3 waitmove 0 msgbox PetalburgWoods_Text_194DED, 4 @@ -271,7 +271,7 @@ PetalburgWoods_EventScript_15CF27:: @ 815CF27 PetalburgWoods_EventScript_15CF3E:: @ 815CF3E trainerbattle 0, OPPONENT_JAMES_1, 0, PetalburgWoods_Text_19526A, PetalburgWoods_Text_1952AE - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq PetalburgWoods_EventScript_15CF65 msgbox PetalburgWoods_Text_1952CC, 6 diff --git a/data/scripts/maps/Route101.inc b/data/scripts/maps/Route101.inc index d945aadfc..bfbc9f2bd 100644 --- a/data/scripts/maps/Route101.inc +++ b/data/scripts/maps/Route101.inc @@ -18,7 +18,7 @@ Route101_EventScript_14E93F:: @ 814E93F Route101_EventScript_14E948:: @ 814E948 lockall - playmusic 410, 1 + playbgm 410, 1 msgbox Route101_Text_16D10E, 4 closebutton movesprite 2, 0, 15 diff --git a/data/scripts/maps/Route102.inc b/data/scripts/maps/Route102.inc index 6d6b1c2da..70b750aef 100644 --- a/data/scripts/maps/Route102.inc +++ b/data/scripts/maps/Route102.inc @@ -19,7 +19,7 @@ Route102_EventScript_14EAF5:: @ 814EAF5 Route102_EventScript_14EAFE:: @ 814EAFE trainerbattle 0, OPPONENT_CALVIN_1, 0, Route102_Text_1B79C3, Route102_Text_1B7A2C - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route102_EventScript_14EB25 msgbox Route102_Text_1B7A60, 6 diff --git a/data/scripts/maps/Route103.inc b/data/scripts/maps/Route103.inc index 328021785..586075465 100644 --- a/data/scripts/maps/Route103.inc +++ b/data/scripts/maps/Route103.inc @@ -18,7 +18,7 @@ Route103_EventScript_14EB92:: @ 814EB92 Route103_EventScript_14EBAB:: @ 814EBAB msgbox Route103_Text_16D57A, 4 - playmusic 415, 1 + playbgm 415, 1 move 2, Route103_Movement_1A0839 waitmove 0 move 2, Route103_Movement_1A0833 @@ -34,7 +34,7 @@ Route103_EventScript_14EBAB:: @ 814EBAB Route103_EventScript_14EC04:: @ 814EC04 msgbox Route103_Text_16D762, 4 - playmusic 421, 1 + playbgm 421, 1 move 2, Route103_Movement_1A0839 waitmove 0 move 2, Route103_Movement_1A0833 @@ -100,7 +100,7 @@ Route103_EventScript_14ECD9:: @ 814ECD9 Route103_EventScript_14ED0C:: @ 814ED0C move 2, Route103_Movement_14ED67 waitmove 0 - playsfx 10 + playse 10 move 2, Route103_Movement_14ED6B waitmove 0 goto Route103_EventScript_14ED46 @@ -109,7 +109,7 @@ Route103_EventScript_14ED0C:: @ 814ED0C Route103_EventScript_14ED29:: @ 814ED29 move 2, Route103_Movement_14ED71 waitmove 0 - playsfx 10 + playse 10 move 2, Route103_Movement_14ED74 waitmove 0 goto Route103_EventScript_14ED46 @@ -123,8 +123,8 @@ Route103_EventScript_14ED46:: @ 814ED46 setflag 130 setvar 0x40c7, 1 clearflag 979 - playmusicbattle 0 - fadedefault + savebgm 0 + fadedefaultbgm releaseall end @@ -173,7 +173,7 @@ Route103_EventScript_14ED94:: @ 814ED94 Route103_EventScript_14EDAB:: @ 814EDAB trainerbattle 4, OPPONENT_AMY_AND_LIV_1, 0, Route103_Text_1B7DF7, Route103_Text_1B7E3B, Route103_Text_1B7EAC - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route103_EventScript_14EDD6 msgbox Route103_Text_1B7E50, 6 @@ -186,7 +186,7 @@ Route103_EventScript_14EDD6:: @ 814EDD6 Route103_EventScript_14EDF1:: @ 814EDF1 trainerbattle 4, OPPONENT_AMY_AND_LIV_1, 0, Route103_Text_1B7EFB, Route103_Text_1B7F20, Route103_Text_1B7F8E - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route103_EventScript_14EE1C msgbox Route103_Text_1B7F40, 6 @@ -204,7 +204,7 @@ Route103_EventScript_14EE37:: @ 814EE37 Route103_EventScript_14EE4E:: @ 814EE4E trainerbattle 0, OPPONENT_MIGUEL_1, 0, Route103_Text_1B82A9, Route103_Text_1B82EC - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route103_EventScript_14EE75 msgbox Route103_Text_1B830D, 6 diff --git a/data/scripts/maps/Route104.inc b/data/scripts/maps/Route104.inc index 8ab1999e6..58a6704bf 100644 --- a/data/scripts/maps/Route104.inc +++ b/data/scripts/maps/Route104.inc @@ -409,7 +409,7 @@ Route104_EventScript_14F189:: @ 814F189 Route104_EventScript_14F1A0:: @ 814F1A0 trainerbattle 0, OPPONENT_HALEY_1, 0, Route104_Text_1B8770, Route104_Text_1B87A7 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route104_EventScript_14F1C7 msgbox Route104_Text_1B87C3, 6 @@ -422,7 +422,7 @@ Route104_EventScript_14F1C7:: @ 814F1C7 Route104_EventScript_14F1DE:: @ 814F1DE trainerbattle 0, OPPONENT_WINSTON_1, 0, Route104_Text_1B88D4, Route104_Text_1B8911 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route104_EventScript_14F205 msgbox Route104_Text_1B8925, 6 @@ -435,7 +435,7 @@ Route104_EventScript_14F205:: @ 814F205 Route104_EventScript_14F21C:: @ 814F21C trainerbattle 0, OPPONENT_CINDY_1, 0, Route104_Text_1B8A24, Route104_Text_1B8A61 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route104_EventScript_14F243 msgbox Route104_Text_1B8A69, 6 diff --git a/data/scripts/maps/Route104_MrBrineysHouse.inc b/data/scripts/maps/Route104_MrBrineysHouse.inc index 751c86825..6428e018b 100644 --- a/data/scripts/maps/Route104_MrBrineysHouse.inc +++ b/data/scripts/maps/Route104_MrBrineysHouse.inc @@ -91,7 +91,7 @@ Route104_MrBrineysHouse_EventScript_15BDAB:: @ 815BDAB Route104_MrBrineysHouse_EventScript_15BDD1:: @ 815BDD1 lock faceplayer - checksound + waitse pokecry SPECIES_WINGULL, 0 msgbox Route104_MrBrineysHouse_Text_191FB9, 4 waitpokecry diff --git a/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc b/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc index 097e99357..44fb9a082 100644 --- a/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc +++ b/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc @@ -89,7 +89,7 @@ Route104_PrettyPetalFlowerShop_EventScript_15BEB9:: @ 815BEB9 Route104_PrettyPetalFlowerShop_EventScript_15BEDA:: @ 815BEDA lock faceplayer - checkdailyflags + dodailyevents checkflag 2256 goto_if_eq Route104_PrettyPetalFlowerShop_EventScript_15BF1A msgbox Route104_PrettyPetalFlowerShop_Text_1C62DA, 4 diff --git a/data/scripts/maps/Route104_Prototype.inc b/data/scripts/maps/Route104_Prototype.inc index e090c4bf2..6103d19ac 100644 --- a/data/scripts/maps/Route104_Prototype.inc +++ b/data/scripts/maps/Route104_Prototype.inc @@ -57,9 +57,9 @@ Route104_Prototype_EventScript_160CF1:: @ 8160CF1 Route104_Prototype_EventScript_160CFB:: @ 8160CFB closebutton - pause 60 + delay 60 fadescreen 1 - pause 60 + delay 60 special DoSoftReset waitstate release diff --git a/data/scripts/maps/Route106.inc b/data/scripts/maps/Route106.inc index a1a13a003..6a0eea00f 100644 --- a/data/scripts/maps/Route106.inc +++ b/data/scripts/maps/Route106.inc @@ -17,7 +17,7 @@ Route106_EventScript_14F34F:: @ 814F34F Route106_EventScript_14F366:: @ 814F366 trainerbattle 0, OPPONENT_ELLIOT_1, 0, Route106_Text_1B8EF0, Route106_Text_1B8F25 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route106_EventScript_14F38D msgbox Route106_Text_1B8F55, 6 diff --git a/data/scripts/maps/Route107.inc b/data/scripts/maps/Route107.inc index c33bb7d19..907ac93a2 100644 --- a/data/scripts/maps/Route107.inc +++ b/data/scripts/maps/Route107.inc @@ -8,7 +8,7 @@ Route107_EventScript_14F3BC:: @ 814F3BC Route107_EventScript_14F3D3:: @ 814F3D3 trainerbattle 0, OPPONENT_TONY_1, 0, Route107_Text_1B933A, Route107_Text_1B9365 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route107_EventScript_14F3FA msgbox Route107_Text_1B938E, 6 diff --git a/data/scripts/maps/Route109.inc b/data/scripts/maps/Route109.inc index d3baeea34..1846cb2ff 100644 --- a/data/scripts/maps/Route109.inc +++ b/data/scripts/maps/Route109.inc @@ -359,7 +359,7 @@ Route109_EventScript_14F77F:: @ 814F77F Route109_EventScript_14F788:: @ 814F788 lock faceplayer - checksound + waitse pokecry SPECIES_ZIGZAGOON, 0 msgbox Route109_Text_16E5CA, 4 waitpokecry @@ -396,7 +396,7 @@ Route109_EventScript_14F7F2:: @ 814F7F2 Route109_EventScript_14F809:: @ 814F809 trainerbattle 0, OPPONENT_RICKY_1, 0, Route109_Text_1B9C23, Route109_Text_1B9C65 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route109_EventScript_14F830 msgbox Route109_Text_1B9C6E, 6 @@ -409,7 +409,7 @@ Route109_EventScript_14F830:: @ 814F830 Route109_EventScript_14F847:: @ 814F847 trainerbattle 0, OPPONENT_LOLA_1, 0, Route109_Text_1B9D54, Route109_Text_1B9D87 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route109_EventScript_14F86E msgbox Route109_Text_1B9D8E, 6 diff --git a/data/scripts/maps/Route110.inc b/data/scripts/maps/Route110.inc index 68a2c6613..9fba68693 100644 --- a/data/scripts/maps/Route110.inc +++ b/data/scripts/maps/Route110.inc @@ -17,7 +17,7 @@ Route110_MapScript1_14F914:: @ 814F914 end Route110_EventScript_14F92F:: @ 814F92F - playmusicbattle 403 @ Bicycle music + savebgm 403 @ Bicycle music return Route110_MapScript2_14F933:: @ 814F933 @@ -131,7 +131,7 @@ Route110_EventScript_14FA25:: @ 814FA25 Route110_EventScript_14FA2E:: @ 814FA2E lockall - specialval RESULT, GetRecordedCyclingRoadResults + specialvar RESULT, GetRecordedCyclingRoadResults compare_var_to_imm RESULT, 0 goto_if_eq Route110_EventScript_14FA49 msgbox Route110_Text_16F53A, 4 @@ -146,7 +146,7 @@ Route110_EventScript_14FA49:: @ 814FA49 Route110_EventScript_14FA53:: @ 814FA53 lock faceplayer - specialval RESULT, GetPlayerAvatarBike + specialvar RESULT, GetPlayerAvatarBike compare_var_to_imm RESULT, 1 goto_if_eq Route110_EventScript_14FA84 compare_var_to_imm 0x40a9, 0 @@ -177,7 +177,7 @@ Route110_EventScript_14FAA5:: @ 814FAA5 Route110_EventScript_14FABC:: @ 814FABC trainerbattle 0, OPPONENT_EDWIN_1, 0, Route110_Text_1BA7D2, Route110_Text_1BA803 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route110_EventScript_14FAE3 msgbox Route110_Text_1BA829, 6 @@ -205,7 +205,7 @@ Route110_EventScript_14FB28:: @ 814FB28 Route110_EventScript_14FB3F:: @ 814FB3F trainerbattle 0, OPPONENT_BENJAMIN_1, 0, Route110_Text_1BA352, Route110_Text_1BA379 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route110_EventScript_14FB66 msgbox Route110_Text_1BA3A5, 6 @@ -223,7 +223,7 @@ Route110_EventScript_14FB7D:: @ 814FB7D Route110_EventScript_14FB94:: @ 814FB94 trainerbattle 0, OPPONENT_ABIGAIL_1, 0, Route110_Text_1BA4A0, Route110_Text_1BA50F - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route110_EventScript_14FBBB msgbox Route110_Text_1BA52E, 6 @@ -236,7 +236,7 @@ Route110_EventScript_14FBBB:: @ 814FBBB Route110_EventScript_14FBD2:: @ 814FBD2 trainerbattle 0, OPPONENT_ISABEL_1, 0, Route110_Text_1BA990, Route110_Text_1BA9D0 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route110_EventScript_14FBF9 msgbox Route110_Text_1BA9E9, 6 @@ -304,8 +304,8 @@ Route110_EventScript_14FCFB:: @ 814FCFB Route110_EventScript_14FD09:: @ 814FD09 setvar 0x40a9, 3 - playmusicbattle 0 - fadedefault + savebgm 0 + fadedefaultbgm return Route110_EventScript_14FD13:: @ 814FD13 @@ -336,7 +336,7 @@ Route110_EventScript_14FD34:: @ 814FD34 waitmove 0 move 28, Route110_Movement_1A0835 waitmove 0 - pause 30 + delay 30 compare_var_to_imm 0x8008, 1 call_if 1, Route110_EventScript_14FF14 compare_var_to_imm 0x8008, 2 @@ -352,11 +352,11 @@ Route110_EventScript_14FD34:: @ 814FD34 end Route110_EventScript_14FDA7:: @ 814FDA7 - playmusic 415, 1 + playbgm 415, 1 return Route110_EventScript_14FDAC:: @ 814FDAC - playmusic 421, 1 + playbgm 421, 1 return Route110_EventScript_14FDB1:: @ 814FDB1 @@ -435,7 +435,7 @@ Route110_EventScript_14FEB2:: @ 814FEB2 spritebehave 29, 10 disappear 28 reappear 29 - pause 45 + delay 45 compare_var_to_imm 0x8008, 1 call_if 1, Route110_EventScript_14FF35 compare_var_to_imm 0x8008, 2 @@ -444,8 +444,8 @@ Route110_EventScript_14FEB2:: @ 814FEB2 call_if 1, Route110_EventScript_14FF4B disappear 29 setvar 0x4069, 1 - playmusicbattle 0 - fadedefault + savebgm 0 + fadedefaultbgm releaseall end diff --git a/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc b/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc index daa55dc7f..d98662e78 100644 --- a/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc +++ b/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc @@ -23,7 +23,7 @@ Route110_SeasideCyclingRoadNorthEntrance_EventScript_1634EB:: @ 81634EB Route110_SeasideCyclingRoadNorthEntrance_EventScript_1634F7:: @ 81634F7 @ Coord event directly in front of the gatesman heading left to right lockall - specialval RESULT, GetPlayerAvatarBike @ player state? + specialvar RESULT, GetPlayerAvatarBike @ player state? compare_var_to_imm RESULT, 2 call_if 1, Route110_SeasideCyclingRoadNorthEntrance_EventScript_16351D compare_var_to_imm RESULT, 0 diff --git a/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc b/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc index 63e8df87c..204ccc64d 100644 --- a/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc +++ b/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc @@ -10,7 +10,7 @@ Route110_SeasideCyclingRoadSouthEntrance_EventScript_16347F:: @ 816347F Route110_SeasideCyclingRoadSouthEntrance_EventScript_16348B:: @ 816348B lockall - specialval RESULT, GetPlayerAvatarBike + specialvar RESULT, GetPlayerAvatarBike compare_var_to_imm RESULT, 0 goto_if_eq Route110_SeasideCyclingRoadSouthEntrance_EventScript_1634A6 setflag 2091 diff --git a/data/scripts/maps/Route110_TrickHouseEnd.inc b/data/scripts/maps/Route110_TrickHouseEnd.inc index 7f4ffdddd..e70dcd749 100644 --- a/data/scripts/maps/Route110_TrickHouseEnd.inc +++ b/data/scripts/maps/Route110_TrickHouseEnd.inc @@ -158,12 +158,12 @@ Route110_TrickHouseEnd_EventScript_161BAF:: @ 8161BAF call_if 1, Route110_TrickHouseEnd_EventScript_161C8A compare_var_to_imm FACING, 4 call_if 1, Route110_TrickHouseEnd_EventScript_161C95 - pause 30 + delay 30 msgbox Route110_TrickHouseEnd_Text_19C602, 4 closebutton move 1, Route110_TrickHouseEnd_Movement_1A0839 waitmove 0 - pause 30 + delay 30 msgbox Route110_TrickHouseEnd_Text_19C691, 4 setvar 0x40c1, 0 .ifdef SAPPHIRE @@ -182,7 +182,7 @@ Route110_TrickHouseEnd_EventScript_161BAF:: @ 8161BAF Route110_TrickHouseEnd_EventScript_161C2E:: @ 8161C2E move 1, Route110_TrickHouseEnd_Movement_161315 waitmove 0 - playsfx 178 + playse 178 move 1, Route110_TrickHouseEnd_Movement_16131E waitmove 0 disappear 1 @@ -224,20 +224,20 @@ Route110_TrickHouseEnd_EventScript_161C95:: @ 8161C95 Route110_TrickHouseEnd_EventScript_161CA0:: @ 8161CA0 lockall spriteface 1, 3 - playsfx 21 + playse 21 move 1, Route110_TrickHouseEnd_Movement_1A0833 waitmove 0 - pause 20 + delay 20 move 1, Route110_TrickHouseEnd_Movement_161CEA waitmove 0 - playsfx 178 + playse 178 move 255, Route110_TrickHouseEnd_Movement_1A0845 waitmove 0 msgbox Route110_TrickHouseEnd_Text_19CA8B, 4 closebutton move 255, Route110_TrickHouseEnd_Movement_161CE8 waitmove 0 - pause 4 + delay 4 spriteface 1, 4 releaseall end diff --git a/data/scripts/maps/Route110_TrickHouseEntrance.inc b/data/scripts/maps/Route110_TrickHouseEntrance.inc index 28b1eb0de..6a515e6f3 100644 --- a/data/scripts/maps/Route110_TrickHouseEntrance.inc +++ b/data/scripts/maps/Route110_TrickHouseEntrance.inc @@ -212,15 +212,15 @@ Route110_TrickHouseEntrance_MapScript2_1611CD:: @ 81611CD Route110_TrickHouseEntrance_EventScript_1611D7:: @ 81611D7 lockall - pause 20 + delay 20 compare_var_to_imm 0x4044, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_161327 msgbox Route110_TrickHouseEntrance_Text_19BD82, 4 closebutton - pause 20 + delay 20 move 1, Route110_TrickHouseEntrance_Movement_161315 waitmove 0 - playsfx 178 + playse 178 move 1, Route110_TrickHouseEntrance_Movement_16131E waitmove 0 disappear 1 @@ -243,7 +243,7 @@ Route110_TrickHouseEntrance_EventScript_16121A:: @ 816121A end Route110_TrickHouseEntrance_EventScript_16124D:: @ 816124D - playsfx 21 + playse 21 move 255, Route110_TrickHouseEntrance_Movement_1A0833 waitmove 0 move 255, Route110_TrickHouseEntrance_Movement_1A0835 @@ -336,7 +336,7 @@ Route110_TrickHouseEntrance_EventScript_161330:: @ 8161330 closebutton move 1, Route110_TrickHouseEntrance_Movement_1A0839 waitmove 0 - playsfx 21 + playse 21 move 1, Route110_TrickHouseEntrance_Movement_1A0833 waitmove 0 move 1, Route110_TrickHouseEntrance_Movement_1A0835 @@ -469,7 +469,7 @@ Route110_TrickHouseEntrance_EventScript_161551:: @ 8161551 waitmove 0 move 1, Route110_TrickHouseEntrance_Movement_161315 waitmove 0 - playsfx 178 + playse 178 move 1, Route110_TrickHouseEntrance_Movement_16131E waitmove 0 disappear 1 @@ -503,7 +503,7 @@ Route110_TrickHouseEntrance_EventScript_1615C7:: @ 81615C7 Route110_TrickHouseEntrance_EventScript_1615DD:: @ 81615DD setmaptile 5, 1, 537, 0 special DrawWholeMapView - pause 20 + delay 20 move 255, Route110_TrickHouseEntrance_Movement_1A0856 waitmove 0 move 255, Route110_TrickHouseEntrance_Movement_16165E @@ -605,7 +605,7 @@ Route110_TrickHouseEntrance_EventScript_161740:: @ 8161740 compare_var_to_imm 0x40AB, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819CAD1, 4 - playsfx SE_PIN + playse SE_PIN setvar 0x40AB, 2 setmaptile 13, 1, 523, 0 special DrawWholeMapView @@ -616,7 +616,7 @@ Route110_TrickHouseEntrance_EventScript_161769:: @ 8161769 compare_var_to_imm 0x40AC, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819CCCB, 4 - playsfx SE_PIN + playse SE_PIN setvar 0x40AC, 2 setmaptile 13, 1, 523, 0 special DrawWholeMapView @@ -627,7 +627,7 @@ Route110_TrickHouseEntrance_EventScript_161792:: @ 8161792 compare_var_to_imm 0x40AD, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819CEF9, 4 - playsfx SE_PIN + playse SE_PIN setvar 0x40AD, 2 setmaptile 13, 1, 523, 0 special DrawWholeMapView @@ -638,7 +638,7 @@ Route110_TrickHouseEntrance_EventScript_1617BB:: @ 81617BB compare_var_to_imm 0x40AE, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819D164, 4 - playsfx SE_PIN + playse SE_PIN setvar 0x40AE, 2 setmaptile 13, 1, 523, 0 special DrawWholeMapView @@ -649,7 +649,7 @@ Route110_TrickHouseEntrance_EventScript_1617E4:: @ 81617E4 compare_var_to_imm 0x40AF, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819D3A5, 4 - playsfx SE_PIN + playse SE_PIN setvar 0x40AF, 2 setmaptile 13, 1, 523, 0 special DrawWholeMapView @@ -660,7 +660,7 @@ Route110_TrickHouseEntrance_EventScript_16180D:: @ 816180D compare_var_to_imm 0x40B0, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819DC0A, 4 - playsfx SE_PIN + playse SE_PIN setvar 0x40B0, 2 setmaptile 13, 1, 523, 0 special DrawWholeMapView @@ -671,7 +671,7 @@ Route110_TrickHouseEntrance_EventScript_161836:: @ 8161836 compare_var_to_imm 0x40B1, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819DE8D, 4 - playsfx SE_PIN + playse SE_PIN setvar 0x40B1, 2 setmaptile 13, 1, 523, 0 special DrawWholeMapView @@ -682,7 +682,7 @@ Route110_TrickHouseEntrance_EventScript_16185F:: @ 816185F compare_var_to_imm 0x40B2, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819E0FF, 4 - playsfx SE_PIN + playse SE_PIN setvar 0x40B2, 2 setmaptile 13, 1, 523, 0 special DrawWholeMapView @@ -714,7 +714,7 @@ Route110_TrickHousePuzzle5_EventScript_16189C:: @ 816189C Route110_TrickHousePuzzle6_EventScript_16189C:: @ 816189C Route110_TrickHousePuzzle7_EventScript_16189C:: @ 816189C Route110_TrickHousePuzzle8_EventScript_16189C:: @ 816189C - fanfare 370 + playfanfare 370 message Route110_TrickHousePuzzle1_Text_19C1B8 waitfanfare waittext @@ -762,5 +762,5 @@ Route110_TrickHouseEntrance_EventScript_161920:: @ 8161920 setanimation 2, 32774 doanimation 54 checkanimation 54 - pause 10 + delay 10 return diff --git a/data/scripts/maps/Route110_TrickHousePuzzle2.inc b/data/scripts/maps/Route110_TrickHousePuzzle2.inc index 4102bd9ec..6252a96d6 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle2.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle2.inc @@ -36,7 +36,7 @@ Route110_TrickHousePuzzle2_EventScript_161DD5:: @ 8161DD5 Route110_TrickHousePuzzle2_EventScript_161DE0:: @ 8161DE0 lockall setvar 0x4001, 1 - playsfx 21 + playse 21 call Route110_TrickHousePuzzle2_EventScript_161E2C special DrawWholeMapView releaseall @@ -45,7 +45,7 @@ Route110_TrickHousePuzzle2_EventScript_161DE0:: @ 8161DE0 Route110_TrickHousePuzzle2_EventScript_161DF3:: @ 8161DF3 lockall setvar 0x4002, 1 - playsfx 21 + playse 21 call Route110_TrickHousePuzzle2_EventScript_161E3F special DrawWholeMapView releaseall @@ -54,7 +54,7 @@ Route110_TrickHousePuzzle2_EventScript_161DF3:: @ 8161DF3 Route110_TrickHousePuzzle2_EventScript_161E06:: @ 8161E06 lockall setvar 0x4003, 1 - playsfx 21 + playse 21 call Route110_TrickHousePuzzle2_EventScript_161E52 special DrawWholeMapView releaseall @@ -63,7 +63,7 @@ Route110_TrickHousePuzzle2_EventScript_161E06:: @ 8161E06 Route110_TrickHousePuzzle2_EventScript_161E19:: @ 8161E19 lockall setvar 0x4004, 1 - playsfx 21 + playse 21 call Route110_TrickHousePuzzle2_EventScript_161E65 special DrawWholeMapView releaseall diff --git a/data/scripts/maps/Route110_TrickHousePuzzle3.inc b/data/scripts/maps/Route110_TrickHousePuzzle3.inc index 377791261..705f52455 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle3.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle3.inc @@ -289,7 +289,7 @@ Route110_TrickHousePuzzle3_EventScript_1625F3:: @ 81625F3 Route110_TrickHousePuzzle3_EventScript_1625FF:: @ 81625FF call Route110_TrickHousePuzzle3_EventScript_162612 - playsfx 21 + playse 21 call Route110_TrickHousePuzzle3_EventScript_161F12 goto Route110_TrickHousePuzzle3_EventScript_1626AD end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle5.inc b/data/scripts/maps/Route110_TrickHousePuzzle5.inc index 67f5bc469..d0ced1ecb 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle5.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle5.inc @@ -160,7 +160,7 @@ Route110_TrickHousePuzzle5_EventScript_162933:: @ 8162933 Route110_TrickHousePuzzle5_EventScript_16293F:: @ 816293F setvar 0x4001, 1 setvar 0x4008, 1 - playsfx 21 + playse 21 move 1, Route110_TrickHousePuzzle5_Movement_1A0833 waitmove 0 move 1, Route110_TrickHousePuzzle5_Movement_1A0835 @@ -182,7 +182,7 @@ Route110_TrickHousePuzzle5_EventScript_16293F:: @ 816293F Route110_TrickHousePuzzle5_EventScript_1629B3:: @ 81629B3 setvar 0x4002, 1 setvar 0x4008, 2 - playsfx 21 + playse 21 move 2, Route110_TrickHousePuzzle5_Movement_1A0833 waitmove 0 move 2, Route110_TrickHousePuzzle5_Movement_1A0835 @@ -204,7 +204,7 @@ Route110_TrickHousePuzzle5_EventScript_1629B3:: @ 81629B3 Route110_TrickHousePuzzle5_EventScript_162A27:: @ 8162A27 setvar 0x4003, 1 setvar 0x4008, 3 - playsfx 21 + playse 21 move 3, Route110_TrickHousePuzzle5_Movement_1A0833 waitmove 0 move 3, Route110_TrickHousePuzzle5_Movement_1A0835 @@ -226,7 +226,7 @@ Route110_TrickHousePuzzle5_EventScript_162A27:: @ 8162A27 Route110_TrickHousePuzzle5_EventScript_162A9B:: @ 8162A9B setvar 0x4004, 1 setvar 0x4008, 4 - playsfx 21 + playse 21 move 4, Route110_TrickHousePuzzle5_Movement_1A0833 waitmove 0 move 4, Route110_TrickHousePuzzle5_Movement_1A0835 @@ -248,7 +248,7 @@ Route110_TrickHousePuzzle5_EventScript_162A9B:: @ 8162A9B Route110_TrickHousePuzzle5_EventScript_162B0F:: @ 8162B0F setvar 0x4005, 1 setvar 0x4008, 5 - playsfx 21 + playse 21 move 5, Route110_TrickHousePuzzle5_Movement_1A0833 waitmove 0 move 5, Route110_TrickHousePuzzle5_Movement_1A0835 @@ -388,8 +388,8 @@ Route110_TrickHousePuzzle5_EventScript_162D6D:: @ 8162D6D end Route110_TrickHousePuzzle5_EventScript_162D90:: @ 8162D90 - checksound - playsfx 32 + waitse + playse 32 msgbox Route110_TrickHousePuzzle5_Text_19D5CF, 4 move 1, Route110_TrickHousePuzzle5_Movement_16309F move 2, Route110_TrickHousePuzzle5_Movement_16309F @@ -407,8 +407,8 @@ Route110_TrickHousePuzzle5_EventScript_162D90:: @ 8162D90 end Route110_TrickHousePuzzle5_EventScript_162DDF:: @ 8162DDF - checksound - playsfx 31 + waitse + playse 31 goto Route110_TrickHousePuzzle5_EventScript_162DE9 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle7.inc b/data/scripts/maps/Route110_TrickHousePuzzle7.inc index 5d635e2c5..ae55a4316 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle7.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle7.inc @@ -120,13 +120,13 @@ Route110_TrickHousePuzzle7_EventScript_1632A8:: @ 81632A8 Route110_TrickHousePuzzle7_EventScript_1632B9:: @ 81632B9 lockall - pause 32 + delay 32 checkflag 194 call_if 0, Route110_TrickHousePuzzle7_EventScript_163195 checkflag 194 call_if 1, Route110_TrickHousePuzzle7_EventScript_1631F4 special DrawWholeMapView - playsfx 36 + playse 36 checkflag 194 goto_if 0, Route110_TrickHousePuzzle7_EventScript_1633A4 checkflag 194 @@ -135,13 +135,13 @@ Route110_TrickHousePuzzle7_EventScript_1632B9:: @ 81632B9 Route110_TrickHousePuzzle7_EventScript_1632E8:: @ 81632E8 lockall - pause 32 + delay 32 checkflag 195 call_if 0, Route110_TrickHousePuzzle7_EventScript_1631A8 checkflag 195 call_if 1, Route110_TrickHousePuzzle7_EventScript_163207 special DrawWholeMapView - playsfx 36 + playse 36 checkflag 195 goto_if 0, Route110_TrickHousePuzzle7_EventScript_1633AE checkflag 195 @@ -150,13 +150,13 @@ Route110_TrickHousePuzzle7_EventScript_1632E8:: @ 81632E8 Route110_TrickHousePuzzle7_EventScript_163317:: @ 8163317 lockall - pause 32 + delay 32 checkflag 196 call_if 0, Route110_TrickHousePuzzle7_EventScript_1631BB checkflag 196 call_if 1, Route110_TrickHousePuzzle7_EventScript_16321A special DrawWholeMapView - playsfx 36 + playse 36 checkflag 196 goto_if 0, Route110_TrickHousePuzzle7_EventScript_1633B8 checkflag 196 @@ -165,13 +165,13 @@ Route110_TrickHousePuzzle7_EventScript_163317:: @ 8163317 Route110_TrickHousePuzzle7_EventScript_163346:: @ 8163346 lockall - pause 32 + delay 32 checkflag 197 call_if 0, Route110_TrickHousePuzzle7_EventScript_1631CE checkflag 197 call_if 1, Route110_TrickHousePuzzle7_EventScript_16322D special DrawWholeMapView - playsfx 36 + playse 36 checkflag 197 goto_if 0, Route110_TrickHousePuzzle7_EventScript_1633C2 checkflag 197 @@ -180,13 +180,13 @@ Route110_TrickHousePuzzle7_EventScript_163346:: @ 8163346 Route110_TrickHousePuzzle7_EventScript_163375:: @ 8163375 lockall - pause 32 + delay 32 checkflag 198 call_if 0, Route110_TrickHousePuzzle7_EventScript_1631E1 checkflag 198 call_if 1, Route110_TrickHousePuzzle7_EventScript_163240 special DrawWholeMapView - playsfx 36 + playse 36 checkflag 198 goto_if 0, Route110_TrickHousePuzzle7_EventScript_1633CC checkflag 198 diff --git a/data/scripts/maps/Route111.inc b/data/scripts/maps/Route111.inc index 7231b427a..fc73716eb 100644 --- a/data/scripts/maps/Route111.inc +++ b/data/scripts/maps/Route111.inc @@ -59,7 +59,7 @@ Route111_EventScript_150023:: @ 8150023 setflag 963 setflag 964 disappear 34 - pause 30 + delay 30 move 35, Route111_Movement_1500AF waitmove 0 disappear 35 @@ -81,7 +81,7 @@ Route111_EventScript_150069:: @ 8150069 setflag 964 setflag 963 disappear 35 - pause 30 + delay 30 move 34, Route111_Movement_1500AF waitmove 0 disappear 34 @@ -120,7 +120,7 @@ Route111_Movement_1500AF:: @ 81500AF Route111_EventScript_1500C5:: @ 81500C5 lock faceplayer - checkdailyflags + dodailyevents checkflag 2252 goto_if_eq Route111_EventScript_150100 msgbox Route111_Text_1C56F0, 4 @@ -222,14 +222,14 @@ Route111_Movement_1501BA:: @ 81501BA Route111_EventScript_1501BC:: @ 81501BC setweather 2 - fademusic 360 + fadenewbgm 360 doweather setvar 0x4003, 0 end Route111_EventScript_1501C9:: @ 81501C9 setweather 8 - fademusic 409 + fadenewbgm 409 doweather end @@ -392,7 +392,7 @@ Route111_EventScript_1503EC:: @ 81503EC Route111_EventScript_150403:: @ 8150403 trainerbattle 0, OPPONENT_DUSTY_1, 0, Route111_Text_1BAEC9, Route111_Text_1BAF14 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route111_EventScript_15042A msgbox Route111_Text_1BAF5B, 6 @@ -420,7 +420,7 @@ Route111_EventScript_15046F:: @ 815046F Route111_EventScript_150486:: @ 8150486 trainerbattle 0, OPPONENT_WILTON_1, 0, Route111_Text_1BB2E3, Route111_Text_1BB313 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route111_EventScript_1504AD msgbox Route111_Text_1BB33E, 6 @@ -433,7 +433,7 @@ Route111_EventScript_1504AD:: @ 81504AD Route111_EventScript_1504C4:: @ 81504C4 trainerbattle 0, OPPONENT_BROOKE_1, 0, Route111_Text_1BB44F, Route111_Text_1BB49F - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route111_EventScript_1504EB msgbox Route111_Text_1BB4CE, 6 diff --git a/data/scripts/maps/Route112.inc b/data/scripts/maps/Route112.inc index 9a4c85158..70a6a2869 100644 --- a/data/scripts/maps/Route112.inc +++ b/data/scripts/maps/Route112.inc @@ -38,7 +38,7 @@ Route112_EventScript_150549:: @ 8150549 Route112_EventScript_150560:: @ 8150560 trainerbattle 0, OPPONENT_TRENT_1, 0, Route112_Text_1BB6A0, Route112_Text_1BB707 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route112_EventScript_150587 msgbox Route112_Text_1BB721, 6 diff --git a/data/scripts/maps/Route113.inc b/data/scripts/maps/Route113.inc index ae08ff5bb..06519867e 100644 --- a/data/scripts/maps/Route113.inc +++ b/data/scripts/maps/Route113.inc @@ -60,7 +60,7 @@ Route113_EventScript_150652:: @ 8150652 Route113_EventScript_150669:: @ 8150669 trainerbattle 0, OPPONENT_MADELINE_1, 0, Route113_Text_1BBB27, Route113_Text_1BBB7A - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route113_EventScript_150690 msgbox Route113_Text_1BBB9A, 6 @@ -73,7 +73,7 @@ Route113_EventScript_150690:: @ 8150690 Route113_EventScript_1506A7:: @ 81506A7 trainerbattle 0, OPPONENT_LAO_1, 0, Route113_Text_1BBC59, Route113_Text_1BBC90 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route113_EventScript_1506CE msgbox Route113_Text_1BBCAB, 6 diff --git a/data/scripts/maps/Route113_GlassWorkshop.inc b/data/scripts/maps/Route113_GlassWorkshop.inc index f83c5cf23..9774a3a5f 100644 --- a/data/scripts/maps/Route113_GlassWorkshop.inc +++ b/data/scripts/maps/Route113_GlassWorkshop.inc @@ -197,8 +197,8 @@ Route113_GlassWorkshop_EventScript_163851:: @ 8163851 msgbox Route113_GlassWorkshop_Text_19E827, 4 closebutton fadescreen 1 - playsfx 5 - pause 30 + playse 5 + delay 30 fadescreen 0 msgbox Route113_GlassWorkshop_Text_19E9D7, 4 compare_var_to_imm 0x8009, 0 diff --git a/data/scripts/maps/Route114.inc b/data/scripts/maps/Route114.inc index d910d3e16..799a115b7 100644 --- a/data/scripts/maps/Route114.inc +++ b/data/scripts/maps/Route114.inc @@ -4,7 +4,7 @@ Route114_MapScripts:: @ 8150732 Route114_EventScript_150733:: @ 8150733 lock faceplayer - checkdailyflags + dodailyevents checkflag 2251 goto_if_eq Route114_EventScript_150778 msgbox Route114_Text_1C5803, 4 @@ -46,7 +46,7 @@ Route114_EventScript_1507B9:: @ 81507B9 Route114_EventScript_1507C3:: @ 81507C3 lock faceplayer - checksound + waitse pokecry SPECIES_POOCHYENA, 2 msgbox Route114_Text_1701F9, 4 waitpokecry @@ -87,7 +87,7 @@ Route114_EventScript_150836:: @ 8150836 Route114_EventScript_15084D:: @ 815084D trainerbattle 0, OPPONENT_STEVE_1, 0, Route114_Text_1BC2F5, Route114_Text_1BC327 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route114_EventScript_150874 msgbox Route114_Text_1BC337, 6 @@ -100,7 +100,7 @@ Route114_EventScript_150874:: @ 8150874 Route114_EventScript_15088B:: @ 815088B trainerbattle 0, OPPONENT_BERNIE_1, 0, Route114_Text_1BC45A, Route114_Text_1BC499 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route114_EventScript_1508B2 msgbox Route114_Text_1BC4B5, 6 diff --git a/data/scripts/maps/Route115.inc b/data/scripts/maps/Route115.inc index 711a62e40..64b0a7497 100644 --- a/data/scripts/maps/Route115.inc +++ b/data/scripts/maps/Route115.inc @@ -15,7 +15,7 @@ Route115_EventScript_150940:: @ 8150940 Route115_EventScript_150949:: @ 8150949 trainerbattle 0, OPPONENT_TIMOTHY_1, 0, Route115_Text_1BC9AC, Route115_Text_1BC9E6 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route115_EventScript_150970 msgbox Route115_Text_1BCA0E, 6 @@ -33,7 +33,7 @@ Route115_EventScript_150987:: @ 8150987 Route115_EventScript_15099E:: @ 815099E trainerbattle 0, OPPONENT_NOB_1, 0, Route115_Text_1BCB8A, Route115_Text_1BCBC1 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route115_EventScript_1509C5 msgbox Route115_Text_1BCBDE, 6 @@ -46,7 +46,7 @@ Route115_EventScript_1509C5:: @ 81509C5 Route115_EventScript_1509DC:: @ 81509DC trainerbattle 0, OPPONENT_CYNDY_1, 0, Route115_Text_1BCCF4, Route115_Text_1BCD32 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route115_EventScript_150A03 msgbox Route115_Text_1BCD4C, 6 diff --git a/data/scripts/maps/Route116.inc b/data/scripts/maps/Route116.inc index 838ebe814..c58a3dfb9 100644 --- a/data/scripts/maps/Route116.inc +++ b/data/scripts/maps/Route116.inc @@ -150,7 +150,7 @@ Route116_EventScript_150B8F:: @ 8150B8F checkitem ITEM_BLACK_GLASSES, 1 compare_var_to_imm RESULT, 1 goto_if_eq Route116_EventScript_150BCA - specialval RESULT, sub_810F828 + specialvar RESULT, sub_810F828 compare_var_to_imm RESULT, 1 goto_if_eq Route116_EventScript_150BBB msgbox Route116_Text_1708EE, 4 @@ -166,7 +166,7 @@ Route116_EventScript_150BBB:: @ 8150BBB Route116_EventScript_150BCA:: @ 8150BCA msgbox Route116_Text_1708EE, 4 msgbox Route116_Text_170921, 4 - specialval RESULT, sub_810F828 + specialvar RESULT, sub_810F828 compare_var_to_imm RESULT, 1 goto_if_eq Route116_EventScript_150BF4 msgbox Route116_Text_170A03, 4 @@ -180,7 +180,7 @@ Route116_EventScript_150BF4:: @ 8150BF4 end Route116_EventScript_150C03:: @ 8150C03 - pause 20 + delay 20 compare_var_to_imm FACING, 2 call_if 1, Route116_EventScript_150C37 compare_var_to_imm FACING, 1 @@ -240,7 +240,7 @@ Route116_EventScript_150C79:: @ 8150C79 Route116_EventScript_150C90:: @ 8150C90 trainerbattle 0, OPPONENT_JERRY_1, 0, Route116_Text_1BD1C0, Route116_Text_1BD21A - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route116_EventScript_150CB7 msgbox Route116_Text_1BD248, 6 @@ -263,7 +263,7 @@ Route116_EventScript_150CE5:: @ 8150CE5 Route116_EventScript_150CFC:: @ 8150CFC trainerbattle 0, OPPONENT_KAREN_1, 0, Route116_Text_1BD377, Route116_Text_1BD3AC - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route116_EventScript_150D23 msgbox Route116_Text_1BD3C3, 6 diff --git a/data/scripts/maps/Route117.inc b/data/scripts/maps/Route117.inc index 2a27c01d7..6d538a872 100644 --- a/data/scripts/maps/Route117.inc +++ b/data/scripts/maps/Route117.inc @@ -40,7 +40,7 @@ Route117_EventScript_150D84:: @ 8150D84 Route117_EventScript_150D8D:: @ 8150D8D trainerbattle 0, OPPONENT_ISAAC_1, 0, Route117_Text_1BD49E, Route117_Text_1BD4D9 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_150DB4 msgbox Route117_Text_1BD4F9, 6 @@ -53,7 +53,7 @@ Route117_EventScript_150DB4:: @ 8150DB4 Route117_EventScript_150DCB:: @ 8150DCB trainerbattle 0, OPPONENT_LYDIA_1, 0, Route117_Text_1BD634, Route117_Text_1BD67B - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_150DF2 msgbox Route117_Text_1BD69B, 6 @@ -66,7 +66,7 @@ Route117_EventScript_150DF2:: @ 8150DF2 Route117_EventScript_150E09:: @ 8150E09 trainerbattle 0, OPPONENT_DYLAN_1, 0, Route117_Text_1BD79A, Route117_Text_1BD7E0 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_150E30 msgbox Route117_Text_1BD7F5, 6 @@ -79,7 +79,7 @@ Route117_EventScript_150E30:: @ 8150E30 Route117_EventScript_150E47:: @ 8150E47 trainerbattle 0, OPPONENT_MARIA_1, 0, Route117_Text_1BD914, Route117_Text_1BD965 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_150E6E msgbox Route117_Text_1BD98F, 6 @@ -97,7 +97,7 @@ Route117_EventScript_150E85:: @ 8150E85 Route117_EventScript_150E9C:: @ 8150E9C trainerbattle 4, OPPONENT_ANNA_AND_MEG_1, 0, Route117_Text_1BDBC3, Route117_Text_1BDC07, Route117_Text_1BDC96 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_150EC7 msgbox Route117_Text_1BDC44, 6 @@ -110,7 +110,7 @@ Route117_EventScript_150EC7:: @ 8150EC7 Route117_EventScript_150EE2:: @ 8150EE2 trainerbattle 4, OPPONENT_ANNA_AND_MEG_1, 0, Route117_Text_1BDCD2, Route117_Text_1BDD1E, Route117_Text_1BDD8B - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route117_EventScript_150F0D msgbox Route117_Text_1BDD4E, 6 diff --git a/data/scripts/maps/Route118.inc b/data/scripts/maps/Route118.inc index e1b4fd345..7e6543d7f 100644 --- a/data/scripts/maps/Route118.inc +++ b/data/scripts/maps/Route118.inc @@ -77,10 +77,10 @@ Route118_EventScript_150FE4:: @ 8150FE4 end Route118_EventScript_151004:: @ 8151004 - playsfx 10 + playse 10 move 19, Route118_Movement_15106D waitmove 0 - pause 30 + delay 30 msgbox Route118_Text_170D66, 4 closebutton compare_var_to_imm 0x8008, 0 @@ -161,7 +161,7 @@ Route118_Movement_151086:: @ 8151086 Route118_EventScript_15108F:: @ 815108F trainerbattle 0, OPPONENT_ROSE_1, 0, Route118_Text_1BDFF4, Route118_Text_1BE03C - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route118_EventScript_1510B6 msgbox Route118_Text_1BE05E, 6 @@ -184,7 +184,7 @@ Route118_EventScript_1510E4:: @ 81510E4 Route118_EventScript_1510FB:: @ 81510FB trainerbattle 0, OPPONENT_DALTON_1, 0, Route118_Text_1BE3E8, Route118_Text_1BE406 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route118_EventScript_151122 msgbox Route118_Text_1BE413, 6 diff --git a/data/scripts/maps/Route119.inc b/data/scripts/maps/Route119.inc index cae90cd12..9abb8adf9 100644 --- a/data/scripts/maps/Route119.inc +++ b/data/scripts/maps/Route119.inc @@ -56,21 +56,21 @@ Route119_EventScript_1511DB:: @ 81511DB call_if 1, Route119_EventScript_151254 compare_var_to_imm RESULT, 1 call_if 1, Route119_EventScript_151259 - pause 65 + delay 65 compare_var_to_imm 0x4001, 1 call_if 1, Route119_EventScript_1513A6 compare_var_to_imm 0x4001, 2 call_if 1, Route119_EventScript_1513B1 move 255, Route119_Movement_1A0845 waitmove 0 - pause 30 + delay 30 compare_var_to_imm 0x4001, 1 call_if 1, Route119_EventScript_1513D2 compare_var_to_imm 0x4001, 2 call_if 1, Route119_EventScript_1513E1 disappear 25 reappear 16 - pause 30 + delay 30 checkgender compare_var_to_imm RESULT, 0 goto_if_eq Route119_EventScript_15125E @@ -80,11 +80,11 @@ Route119_EventScript_1511DB:: @ 81511DB end Route119_EventScript_151254:: @ 8151254 - playmusic 415, 1 + playbgm 415, 1 return Route119_EventScript_151259:: @ 8151259 - playmusic 421, 1 + playbgm 421, 1 return Route119_EventScript_15125E:: @ 815125E @@ -160,15 +160,15 @@ Route119_EventScript_151362:: @ 8151362 call_if 1, Route119_EventScript_1513E1 disappear 16 reappear 25 - pause 30 + delay 30 compare_var_to_imm 0x4001, 1 call_if 1, Route119_EventScript_1513BC compare_var_to_imm 0x4001, 2 call_if 1, Route119_EventScript_1513C7 disappear 25 setvar 0x4072, 1 - playmusicbattle 0 - fadedefault + savebgm 0 + fadedefaultbgm releaseall end @@ -296,7 +296,7 @@ Route119_EventScript_1514A8:: @ 81514A8 Route119_EventScript_1514BF:: @ 81514BF trainerbattle 0, OPPONENT_JACKSON_1, 0, Route119_Text_1BE8BB, Route119_Text_1BE90E - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route119_EventScript_1514E6 msgbox Route119_Text_1BE937, 6 @@ -309,7 +309,7 @@ Route119_EventScript_1514E6:: @ 81514E6 Route119_EventScript_1514FD:: @ 81514FD trainerbattle 0, OPPONENT_CATHERINE_1, 0, Route119_Text_1BEA3A, Route119_Text_1BEA88 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route119_EventScript_151524 msgbox Route119_Text_1BEAB3, 6 diff --git a/data/scripts/maps/Route119_House.inc b/data/scripts/maps/Route119_House.inc index 6395e40eb..ea963dee0 100644 --- a/data/scripts/maps/Route119_House.inc +++ b/data/scripts/maps/Route119_House.inc @@ -8,7 +8,7 @@ Route119_House_EventScript_163DDE:: @ 8163DDE Route119_House_EventScript_163DE7:: @ 8163DE7 lock faceplayer - checksound + waitse pokecry SPECIES_WINGULL, 0 msgbox Route119_House_Text_19F406, 4 waitpokecry diff --git a/data/scripts/maps/Route119_WeatherInstitute_2F.inc b/data/scripts/maps/Route119_WeatherInstitute_2F.inc index a8fd671bd..54b54dd18 100644 --- a/data/scripts/maps/Route119_WeatherInstitute_2F.inc +++ b/data/scripts/maps/Route119_WeatherInstitute_2F.inc @@ -40,7 +40,7 @@ Route119_WeatherInstitute_2F_EventScript_163D45:: @ 8163D45 closebutton setvar 0x40b3, 1 clearflag 893 - fadedefault + fadedefaultbgm fadescreen 1 setflag 890 disappear 1 @@ -58,7 +58,7 @@ Route119_WeatherInstitute_2F_EventScript_163D7A:: @ 8163D7A countpokemon compare_var_to_imm RESULT, 6 goto_if_eq Route119_WeatherInstitute_2F_EventScript_163DB4 - fanfare 370 + playfanfare 370 message Route119_WeatherInstitute_2F_Text_19F267 waitfanfare waittext diff --git a/data/scripts/maps/Route120.inc b/data/scripts/maps/Route120.inc index e736722b5..2e6ae94e5 100644 --- a/data/scripts/maps/Route120.inc +++ b/data/scripts/maps/Route120.inc @@ -112,7 +112,7 @@ Route120_EventScript_151735:: @ 8151735 Route120_EventScript_151739:: @ 8151739 lock faceplayer - checkdailyflags + dodailyevents checkflag 2254 goto_if_eq Route120_EventScript_151837 msgbox Route120_Text_1C58F1, 5 @@ -120,7 +120,7 @@ Route120_EventScript_151739:: @ 8151739 call_if 1, Route120_EventScript_151841 compare_var_to_imm RESULT, 0 call_if 1, Route120_EventScript_15184A - specialval RESULT, GetPlayerTrainerIdOnesDigit + specialvar RESULT, GetPlayerTrainerIdOnesDigit switch RESULT case 0, Route120_EventScript_1517DC case 5, Route120_EventScript_1517DC @@ -214,16 +214,16 @@ Route120_EventScript_15189D:: @ 815189D call_if 1, Route120_EventScript_15198A move 31, Route120_Movement_1A083F waitmove 0 - pause 20 + delay 20 msgbox Route120_Text_1719D4, 4 closebutton move 30, Route120_Movement_1A0843 waitmove 0 move 30, Route120_Movement_1A0662 waitmove 0 - checksound + waitse pokecry SPECIES_KECLEON, 2 - pause 40 + delay 40 waitpokecry setwildbattle SPECIES_KECLEON, 30, ITEM_NONE setvar 0x8004, 0 @@ -244,10 +244,10 @@ Route120_EventScript_151908:: @ 8151908 closebutton move 31, Route120_Movement_1A0845 waitmove 0 - pause 50 + delay 50 setanimation 0, 1 doanimation 30 - pause 15 + delay 15 disappear 31 checkanimation 30 setmaptile 13, 15, 663, 0 @@ -292,7 +292,7 @@ Route120_EventScript_1519B3:: @ 81519B3 Route120_EventScript_1519CA:: @ 81519CA trainerbattle 0, OPPONENT_ROBERT_1, 0, Route120_Text_1BF07E, Route120_Text_1BF0A5 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route120_EventScript_1519F1 msgbox Route120_Text_1BF0C3, 6 @@ -315,7 +315,7 @@ Route120_EventScript_151A1F:: @ 8151A1F Route120_EventScript_151A36:: @ 8151A36 trainerbattle 0, OPPONENT_BRANDON_1, 0, Route120_Text_1BF32B, Route120_Text_1BF36B - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route120_EventScript_151A5D msgbox Route120_Text_1BF38D, 6 diff --git a/data/scripts/maps/Route121.inc b/data/scripts/maps/Route121.inc index 3af8ff7cf..68c04762f 100644 --- a/data/scripts/maps/Route121.inc +++ b/data/scripts/maps/Route121.inc @@ -73,7 +73,7 @@ Route121_EventScript_151B72:: @ 8151B72 Route121_EventScript_151B89:: @ 8151B89 trainerbattle 0, OPPONENT_WALTER_1, 0, Route121_Text_1BFA1B, Route121_Text_1BFA8C - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route121_EventScript_151BB0 msgbox Route121_Text_1BFA9D, 6 @@ -101,7 +101,7 @@ Route121_EventScript_151BF9:: @ 8151BF9 Route121_EventScript_151C14:: @ 8151C14 trainerbattle 0, OPPONENT_JESSICA_1, 0, Route121_Text_1BFE51, Route121_Text_1BFE80 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route121_EventScript_151C3B msgbox Route121_Text_1BFEAE, 6 diff --git a/data/scripts/maps/Route121_SafariZoneEntrance.inc b/data/scripts/maps/Route121_SafariZoneEntrance.inc index efc2ab4fb..2fd6e54f6 100644 --- a/data/scripts/maps/Route121_SafariZoneEntrance.inc +++ b/data/scripts/maps/Route121_SafariZoneEntrance.inc @@ -71,7 +71,7 @@ Route121_SafariZoneEntrance_EventScript_15C3B3:: @ 815C3B3 updatemoney 0, 0 nop msgbox Route121_SafariZoneEntrance_Text_1C38F4, 4 - fanfare 370 + playfanfare 370 message Route121_SafariZoneEntrance_Text_1C3910 waitfanfare waittext @@ -90,7 +90,7 @@ Route121_SafariZoneEntrance_EventScript_15C425:: @ 815C425 countpokemon compare_var_to_imm RESULT, 6 goto_if 5, Route121_SafariZoneEntrance_EventScript_15C44F - specialval RESULT, CheckFreePokemonStorageSpace + specialvar RESULT, CheckFreePokemonStorageSpace compare_var_to_imm RESULT, 1 goto_if_eq Route121_SafariZoneEntrance_EventScript_15C44F msgbox Route121_SafariZoneEntrance_Text_1C39A3, 4 diff --git a/data/scripts/maps/Route123.inc b/data/scripts/maps/Route123.inc index f4ba11b0d..6e6cbd506 100644 --- a/data/scripts/maps/Route123.inc +++ b/data/scripts/maps/Route123.inc @@ -62,7 +62,7 @@ Route123_EventScript_151CFF:: @ 8151CFF Route123_EventScript_151D16:: @ 8151D16 trainerbattle 0, OPPONENT_CAMERON_1, 0, Route123_Text_1C013F, Route123_Text_1C01A3 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route123_EventScript_151D3D msgbox Route123_Text_1C01B1, 6 @@ -75,7 +75,7 @@ Route123_EventScript_151D3D:: @ 8151D3D Route123_EventScript_151D54:: @ 8151D54 trainerbattle 0, OPPONENT_JACKI_1, 0, Route123_Text_1C028C, Route123_Text_1C0303 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route123_EventScript_151D7B msgbox Route123_Text_1C030F, 6 diff --git a/data/scripts/maps/Route123_BerryMastersHouse.inc b/data/scripts/maps/Route123_BerryMastersHouse.inc index 4c35b52ec..ee7bc80cf 100644 --- a/data/scripts/maps/Route123_BerryMastersHouse.inc +++ b/data/scripts/maps/Route123_BerryMastersHouse.inc @@ -9,7 +9,7 @@ Route123_BerryMastersHouse_MapScript1_1639E5:: @ 81639E5 Route123_BerryMastersHouse_EventScript_1639E9:: @ 81639E9 lock faceplayer - checkdailyflags + dodailyevents checkflag 2253 goto_if_eq Route123_BerryMastersHouse_EventScript_163A5A msgbox Route123_BerryMastersHouse_Text_1C5BC4, 4 @@ -39,7 +39,7 @@ Route123_BerryMastersHouse_EventScript_163A5A:: @ 8163A5A Route123_BerryMastersHouse_EventScript_163A64:: @ 8163A64 lock faceplayer - checkdailyflags + dodailyevents checkflag 2257 goto_if_eq Route123_BerryMastersHouse_EventScript_163C13 msgbox Route123_BerryMastersHouse_Text_1C5D24, 4 diff --git a/data/scripts/maps/Route124.inc b/data/scripts/maps/Route124.inc index ef9f0ebed..7d7d38ceb 100644 --- a/data/scripts/maps/Route124.inc +++ b/data/scripts/maps/Route124.inc @@ -23,7 +23,7 @@ Route124_EventScript_151E0F:: @ 8151E0F Route124_EventScript_151E26:: @ 8151E26 trainerbattle 0, OPPONENT_JENNY_1, 0, Route124_Text_1C07B4, Route124_Text_1C07F9 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route124_EventScript_151E4D msgbox Route124_Text_1C080E, 6 @@ -46,7 +46,7 @@ Route124_EventScript_151E7B:: @ 8151E7B Route124_EventScript_151E92:: @ 8151E92 trainerbattle 4, OPPONENT_RITA_AND_SAM_1, 0, Route124_Text_1C0ABD, Route124_Text_1C0B36, Route124_Text_1C0BC8 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route124_EventScript_151EBD msgbox Route124_Text_1C0B72, 6 @@ -59,7 +59,7 @@ Route124_EventScript_151EBD:: @ 8151EBD Route124_EventScript_151ED8:: @ 8151ED8 trainerbattle 4, OPPONENT_RITA_AND_SAM_1, 0, Route124_Text_1C0C0E, Route124_Text_1C0C4F, Route124_Text_1C0CE0 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route124_EventScript_151F03 msgbox Route124_Text_1C0C7F, 6 diff --git a/data/scripts/maps/Route125.inc b/data/scripts/maps/Route125.inc index 7d5fc0376..c62d49117 100644 --- a/data/scripts/maps/Route125.inc +++ b/data/scripts/maps/Route125.inc @@ -29,7 +29,7 @@ Route125_EventScript_151F73:: @ 8151F73 Route125_EventScript_151F8A:: @ 8151F8A trainerbattle 0, OPPONENT_ERNEST_1, 0, Route125_Text_1C11AF, Route125_Text_1C11ED - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route125_EventScript_151FB1 msgbox Route125_Text_1C1208, 6 diff --git a/data/scripts/maps/Route128.inc b/data/scripts/maps/Route128.inc index 10bb0a1cc..21927ec0f 100644 --- a/data/scripts/maps/Route128.inc +++ b/data/scripts/maps/Route128.inc @@ -15,7 +15,7 @@ Route128_MapScript2_152135:: @ 8152135 Route128_EventScript_15213F:: @ 815213F lockall - pause 20 + delay 20 .ifndef SAPPHIRE special sub_807E25C waitstate @@ -45,13 +45,13 @@ Route128_EventScript_15213F:: @ 815213F waitmove 0 msgbox Route128_Text_17210B, 4 closebutton - pause 40 + delay 40 move 5, Route128_Movement_152296 move 4, Route128_Movement_152283 waitmove 0 disappear 5 disappear 4 - pause 100 + delay 100 setanimation 0, 1 doanimation 30 checkanimation 30 @@ -76,10 +76,10 @@ Route128_EventScript_15213F:: @ 815213F closebutton move 3, Route128_Movement_1A0845 waitmove 0 - pause 50 + delay 50 setanimation 0, 1 doanimation 30 - pause 15 + delay 15 disappear 3 checkanimation 30 setvar 0x407b, 2 @@ -182,7 +182,7 @@ Route128_Movement_1522A1:: @ 81522A1 Route128_EventScript_1522A4:: @ 81522A4 trainerbattle 0, OPPONENT_ISAIAH_1, 0, Route128_Text_1C1C67, Route128_Text_1C1C95 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route128_EventScript_1522CB msgbox Route128_Text_1C1CC3, 6 @@ -195,7 +195,7 @@ Route128_EventScript_1522CB:: @ 81522CB Route128_EventScript_1522E2:: @ 81522E2 trainerbattle 0, OPPONENT_KATELYN_1, 0, Route128_Text_1C1DB0, Route128_Text_1C1E25 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq Route128_EventScript_152309 msgbox Route128_Text_1C1E4A, 6 diff --git a/data/scripts/maps/Route130.inc b/data/scripts/maps/Route130.inc index 83b972dbf..3e234667a 100644 --- a/data/scripts/maps/Route130.inc +++ b/data/scripts/maps/Route130.inc @@ -3,7 +3,7 @@ Route130_MapScripts:: @ 81523C2 .byte 0 Route130_MapScript1_1523C8:: @ 81523C8 - specialval RESULT, IsMirageIslandPresent + specialvar RESULT, IsMirageIslandPresent compare_var_to_imm RESULT, 1 goto_if_eq Route130_EventScript_15240C setflag 17 diff --git a/data/scripts/maps/Route134.inc b/data/scripts/maps/Route134.inc index b1f77fac1..6b4d330d1 100644 --- a/data/scripts/maps/Route134.inc +++ b/data/scripts/maps/Route134.inc @@ -3,7 +3,7 @@ Route134_MapScripts:: @ 81525B5 .byte 0 Route134_MapScript1_1525BB:: @ 81525BB - warp4 Underwater_Route134, 255, 8, 6 + setdivewarp Underwater_Route134, 255, 8, 6 end Route134_EventScript_1525C4:: @ 81525C4 diff --git a/data/scripts/maps/RustboroCity.inc b/data/scripts/maps/RustboroCity.inc index 1a2afe16d..677838f8a 100644 --- a/data/scripts/maps/RustboroCity.inc +++ b/data/scripts/maps/RustboroCity.inc @@ -333,7 +333,7 @@ RustboroCity_EventScript_14C5FF:: @ 814C5FF end RustboroCity_EventScript_14C614:: @ 814C614 - checksound + waitse setvar 0x4001, 4 goto RustboroCity_EventScript_14C77D end @@ -381,7 +381,7 @@ RustboroCity_EventScript_14C650:: @ 814C650 RustboroCity_EventScript_14C691:: @ 814C691 move 9, RustboroCity_Movement_1A0841 waitmove 0 - playsfx 21 + playse 21 move 9, RustboroCity_Movement_1A0833 waitmove 0 move 9, RustboroCity_Movement_1A0835 @@ -393,7 +393,7 @@ RustboroCity_EventScript_14C691:: @ 814C691 RustboroCity_EventScript_14C6BD:: @ 814C6BD move 9, RustboroCity_Movement_1A083F waitmove 0 - playsfx 21 + playse 21 move 9, RustboroCity_Movement_1A0833 waitmove 0 move 9, RustboroCity_Movement_1A0835 @@ -405,7 +405,7 @@ RustboroCity_EventScript_14C6BD:: @ 814C6BD RustboroCity_EventScript_14C6E9:: @ 814C6E9 move 9, RustboroCity_Movement_1A0845 waitmove 0 - playsfx 21 + playse 21 move 9, RustboroCity_Movement_1A0833 waitmove 0 move 9, RustboroCity_Movement_1A0835 @@ -417,7 +417,7 @@ RustboroCity_EventScript_14C6E9:: @ 814C6E9 RustboroCity_EventScript_14C715:: @ 814C715 move 9, RustboroCity_Movement_1A0845 waitmove 0 - playsfx 21 + playse 21 move 9, RustboroCity_Movement_1A0833 waitmove 0 move 9, RustboroCity_Movement_1A0835 @@ -476,7 +476,7 @@ RustboroCity_EventScript_14C77D:: @ 814C77D setflag 144 setflag 732 setvar 0x405a, 5 - pause 30 + delay 30 warp RustboroCity_DevonCorp_3F, 255, 2, 2 waitstate releaseall @@ -489,7 +489,7 @@ RustboroCity_EventScript_14C7F5:: @ 814C7F5 RustboroCity_EventScript_14C7FE:: @ 814C7FE move 9, RustboroCity_Movement_1A0841 waitmove 0 - playsfx 21 + playse 21 move 9, RustboroCity_Movement_1A0833 waitmove 0 move 9, RustboroCity_Movement_1A0835 @@ -501,7 +501,7 @@ RustboroCity_EventScript_14C7FE:: @ 814C7FE RustboroCity_EventScript_14C82A:: @ 814C82A move 9, RustboroCity_Movement_1A0843 waitmove 0 - playsfx 21 + playse 21 move 9, RustboroCity_Movement_1A0833 waitmove 0 move 9, RustboroCity_Movement_1A0835 @@ -513,7 +513,7 @@ RustboroCity_EventScript_14C82A:: @ 814C82A RustboroCity_EventScript_14C856:: @ 814C856 move 9, RustboroCity_Movement_1A0845 waitmove 0 - playsfx 21 + playse 21 move 9, RustboroCity_Movement_1A0833 waitmove 0 move 9, RustboroCity_Movement_1A0835 @@ -525,7 +525,7 @@ RustboroCity_EventScript_14C856:: @ 814C856 RustboroCity_EventScript_14C882:: @ 814C882 move 9, RustboroCity_Movement_1A0845 waitmove 0 - playsfx 21 + playse 21 move 9, RustboroCity_Movement_1A0833 waitmove 0 move 9, RustboroCity_Movement_1A0835 @@ -539,7 +539,7 @@ RustboroCity_EventScript_14C882:: @ 814C882 RustboroCity_EventScript_14C8B8:: @ 814C8B8 move 9, RustboroCity_Movement_1A083F waitmove 0 - playsfx 21 + playse 21 move 9, RustboroCity_Movement_1A0833 waitmove 0 move 9, RustboroCity_Movement_1A0835 diff --git a/data/scripts/maps/RustboroCity_DevonCorp_2F.inc b/data/scripts/maps/RustboroCity_DevonCorp_2F.inc index 352850d9e..2f3fd5927 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_2F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_2F.inc @@ -80,7 +80,7 @@ RustboroCity_DevonCorp_2F_EventScript_157564:: @ 8157564 RustboroCity_DevonCorp_2F_EventScript_1575A6:: @ 81575A6 closebutton - playsfx 21 + playse 21 move 5, RustboroCity_DevonCorp_2F_Movement_1A0833 waitmove 0 move 5, RustboroCity_DevonCorp_2F_Movement_1A0835 @@ -98,7 +98,7 @@ RustboroCity_DevonCorp_2F_EventScript_1575A6:: @ 81575A6 RustboroCity_DevonCorp_2F_EventScript_1575EE:: @ 81575EE closebutton - playsfx 21 + playse 21 move 5, RustboroCity_DevonCorp_2F_Movement_1A0833 waitmove 0 move 5, RustboroCity_DevonCorp_2F_Movement_1A0835 @@ -140,7 +140,7 @@ RustboroCity_DevonCorp_2F_EventScript_157661:: @ 8157661 copyvar 0x8004, RESULT setvar 0x40c4, 0 setflag 267 - fanfare 370 + playfanfare 370 message RustboroCity_DevonCorp_2F_Text_18319E waitfanfare waittext @@ -160,7 +160,7 @@ RustboroCity_DevonCorp_2F_EventScript_1576B4:: @ 81576B4 copyvar 0x8004, RESULT setvar 0x40c4, 0 setflag 267 - fanfare 370 + playfanfare 370 message RustboroCity_DevonCorp_2F_Text_18319E waitfanfare waittext diff --git a/data/scripts/maps/RustboroCity_DevonCorp_3F.inc b/data/scripts/maps/RustboroCity_DevonCorp_3F.inc index 78feb0ce5..887299933 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_3F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_3F.inc @@ -32,25 +32,25 @@ RustboroCity_DevonCorp_3F_EventScript_157752:: @ 8157752 closebutton move 2, RustboroCity_DevonCorp_3F_Movement_157815 waitmove 0 - pause 80 + delay 80 move 2, RustboroCity_DevonCorp_3F_Movement_15781E waitmove 0 msgbox RustboroCity_DevonCorp_3F_Text_183903, 4 closebutton - playmusic 420, 0 + playbgm 420, 0 move 2, RustboroCity_DevonCorp_3F_Movement_157803 move 255, RustboroCity_DevonCorp_3F_Movement_157827 waitmove 0 msgbox RustboroCity_DevonCorp_3F_Text_18394A, 4 closebutton - fadedefault + fadedefaultbgm move 2, RustboroCity_DevonCorp_3F_Movement_157812 move 255, RustboroCity_DevonCorp_3F_Movement_157835 waitmove 0 msgbox RustboroCity_DevonCorp_3F_Text_18320B, 4 giveitem ITEM_LETTER msgbox RustboroCity_DevonCorp_3F_Text_18337E, 4 - fanfare 370 + playfanfare 370 message RustboroCity_DevonCorp_3F_Text_183422 waitfanfare waittext diff --git a/data/scripts/maps/RustboroCity_Flat2_1F.inc b/data/scripts/maps/RustboroCity_Flat2_1F.inc index 5aa91d5d1..f22f6cc90 100644 --- a/data/scripts/maps/RustboroCity_Flat2_1F.inc +++ b/data/scripts/maps/RustboroCity_Flat2_1F.inc @@ -8,7 +8,7 @@ RustboroCity_Flat2_1F_EventScript_157D7A:: @ 8157D7A RustboroCity_Flat2_1F_EventScript_157D83:: @ 8157D83 lock faceplayer - checksound + waitse pokecry SPECIES_SKITTY, 0 msgbox RustboroCity_Flat2_1F_Text_185410, 4 waitpokecry diff --git a/data/scripts/maps/RustboroCity_House1.inc b/data/scripts/maps/RustboroCity_House1.inc index 0dd47d2d3..080fc7e18 100644 --- a/data/scripts/maps/RustboroCity_House1.inc +++ b/data/scripts/maps/RustboroCity_House1.inc @@ -8,7 +8,7 @@ RustboroCity_House1_EventScript_157C7D:: @ 8157C7D goto_if_eq RustboroCity_House1_EventScript_157D13 setvar 0x8008, 0 copyvar 0x8004, 0x8008 - specialval RESULT, sub_804D89C + specialvar RESULT, sub_804D89C copyvar 0x8009, RESULT msgbox RustboroCity_House1_Text_184EBA, 5 compare_var_to_imm RESULT, 0 @@ -19,7 +19,7 @@ RustboroCity_House1_EventScript_157C7D:: @ 8157C7D compare_var_to_imm 0x8004, 255 goto_if_eq RustboroCity_House1_EventScript_157CFB copyvar 0x8005, 0x800a - specialval RESULT, sub_804DB2C + specialvar RESULT, sub_804DB2C copyvar 0x800b, RESULT compare_var_to_var RESULT, 0x8009 goto_if 5, RustboroCity_House1_EventScript_157D05 diff --git a/data/scripts/maps/RustboroCity_House3.inc b/data/scripts/maps/RustboroCity_House3.inc index 0e81ed158..b219563be 100644 --- a/data/scripts/maps/RustboroCity_House3.inc +++ b/data/scripts/maps/RustboroCity_House3.inc @@ -12,7 +12,7 @@ RustboroCity_House3_EventScript_157DF6:: @ 8157DF6 RustboroCity_House3_EventScript_157DFF:: @ 8157DFF lock faceplayer - checksound + waitse pokecry SPECIES_PIKACHU, 0 msgbox RustboroCity_House3_Text_18567D, 4 waitpokecry diff --git a/data/scripts/maps/RusturfTunnel.inc b/data/scripts/maps/RusturfTunnel.inc index b4546e27a..cfa319bf3 100644 --- a/data/scripts/maps/RusturfTunnel.inc +++ b/data/scripts/maps/RusturfTunnel.inc @@ -148,7 +148,7 @@ RusturfTunnel_EventScript_15C91B:: @ 815C91B return RusturfTunnel_EventScript_15C92D:: @ 815C92D - playsfx 21 + playse 21 move 1, RusturfTunnel_Movement_1A0833 waitmove 0 move 1, RusturfTunnel_Movement_1A0835 @@ -299,7 +299,7 @@ RusturfTunnel_Movement_15C9D3:: @ 815C9D3 RusturfTunnel_EventScript_15C9D7:: @ 815C9D7 lock faceplayer - checksound + waitse pokecry SPECIES_WINGULL, 0 msgbox RusturfTunnel_Text_194188, 4 waitpokecry @@ -309,7 +309,7 @@ RusturfTunnel_EventScript_15C9D7:: @ 815C9D7 RusturfTunnel_EventScript_15C9EA:: @ 815C9EA lock faceplayer - playmusic BGM_EVIL_TEAM, 0 + playbgm BGM_EVIL_TEAM, 0 msgbox RusturfTunnel_Text_19419B, 4 trainerbattle 3, OPPONENT_RUSTURF_TUNNEL_GRUNT, 0, RusturfTunnel_Text_194243 msgbox RusturfTunnel_Text_194274, 4 @@ -319,7 +319,7 @@ RusturfTunnel_EventScript_15C9EA:: @ 815C9EA move 6, RusturfTunnel_Movement_15CAA2 waitmove 0 disappear 6 - pause 50 + delay 50 reappear 5 move 5, RusturfTunnel_Movement_15CAAC waitmove 0 @@ -331,7 +331,7 @@ RusturfTunnel_EventScript_15C9EA:: @ 815C9EA waitmove 0 message RusturfTunnel_Text_19434F waittext - checksound + waitse pokecry SPECIES_WINGULL, 0 waitbutton waitpokecry diff --git a/data/scripts/maps/SSTidalCorridor.inc b/data/scripts/maps/SSTidalCorridor.inc index da9d31cca..9f86473be 100644 --- a/data/scripts/maps/SSTidalCorridor.inc +++ b/data/scripts/maps/SSTidalCorridor.inc @@ -13,7 +13,7 @@ SSTidalCorridor_EventScript_15FCBC:: @ 815FCBC special SetSSTidalFlag setvar 0x40b4, 2 lockall - playsfx 73 + playse 73 msgbox SSTidalCorridor_Text_199007, 4 releaseall end @@ -21,7 +21,7 @@ SSTidalCorridor_EventScript_15FCBC:: @ 815FCBC SSTidalCorridor_EventScript_15FCD2:: @ 815FCD2 setvar 0x40b4, 6 lockall - playsfx 73 + playse 73 msgbox SSTidalCorridor_Text_199088, 4 releaseall end @@ -29,14 +29,14 @@ SSTidalCorridor_EventScript_15FCD2:: @ 815FCD2 SSTidalRooms_EventScript_15FCE5:: @ 815FCE5 special SetSSTidalFlag setvar 0x40b4, 7 - playsfx 73 + playse 73 msgbox SSTidalRooms_Text_199007, 4 return SSTidalRooms_EventScript_15FCF9:: @ 815FCF9 special ResetSSTidalFlag setvar 0x40b4, 4 - playsfx 73 + playse 73 msgbox SSTidalRooms_Text_1990F8, 4 return @@ -51,7 +51,7 @@ SSTidalCorridor_EventScript_15FD24:: @ 815FD24 special ResetSSTidalFlag setvar 0x40b4, 3 lockall - playsfx 73 + playse 73 msgbox SSTidalCorridor_Text_199088, 4 releaseall end @@ -60,7 +60,7 @@ SSTidalCorridor_EventScript_15FD3A:: @ 815FD3A special ResetSSTidalFlag setvar 0x40b4, 8 lockall - playsfx 73 + playse 73 msgbox SSTidalCorridor_Text_1990B4, 4 releaseall end @@ -68,7 +68,7 @@ SSTidalCorridor_EventScript_15FD3A:: @ 815FD3A SSTidalRooms_EventScript_15FD50:: @ 815FD50 special ResetSSTidalFlag setvar 0x40b4, 8 - playsfx 73 + playse 73 msgbox SSTidalRooms_Text_1990B4, 4 return @@ -87,7 +87,7 @@ SSTidalCorridor_EventScript_15FD96:: @ 815FD96 SSTidalCorridor_EventScript_15FD9F:: @ 815FD9F lock faceplayer - checksound + waitse pokecry SPECIES_WINGULL, 0 msgbox SSTidalCorridor_Text_199388, 4 waitpokecry diff --git a/data/scripts/maps/SafariZone_Southeast.inc b/data/scripts/maps/SafariZone_Southeast.inc index 8cc342f88..f1c37be5b 100644 --- a/data/scripts/maps/SafariZone_Southeast.inc +++ b/data/scripts/maps/SafariZone_Southeast.inc @@ -94,7 +94,7 @@ SafariZone_Southeast_EventScript_16011F:: @ 816011F SafariZone_Southeast_EventScript_160139:: @ 8160139 setvar 0x40a4, 1 special ExitSafariMode - warpwalk Route121_SafariZoneEntrance, 255, 2, 5 + warpdoor Route121_SafariZoneEntrance, 255, 2, 5 waitstate end diff --git a/data/scripts/maps/SeafloorCavern_Entrance.inc b/data/scripts/maps/SeafloorCavern_Entrance.inc index 0bf99d2ad..787ac6605 100644 --- a/data/scripts/maps/SeafloorCavern_Entrance.inc +++ b/data/scripts/maps/SeafloorCavern_Entrance.inc @@ -3,6 +3,6 @@ SeafloorCavern_Entrance_MapScripts:: @ 815DA4A .byte 0 SeafloorCavern_Entrance_MapScript1_15DA50:: @ 815DA50 - warp4 Underwater_SeafloorCavern, 255, 6, 5 + setdivewarp Underwater_SeafloorCavern, 255, 6, 5 warp6 Underwater_SeafloorCavern, 255, 6, 5 end diff --git a/data/scripts/maps/SeafloorCavern_Room9.inc b/data/scripts/maps/SeafloorCavern_Room9.inc index 71184346f..fe13664d9 100644 --- a/data/scripts/maps/SeafloorCavern_Room9.inc +++ b/data/scripts/maps/SeafloorCavern_Room9.inc @@ -78,7 +78,7 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA .else setvar RESULT, 0 .endif - playsfx 209 + playse 209 setanimation 0, 16 setanimation 1, 42 setanimation 2, 0 @@ -89,17 +89,17 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA .else setvar RESULT, 1 .endif - fanfare 388 - playsfx 107 + playfanfare 388 + playse 107 special sub_80818A4 move 0x8004, SeafloorCavern_Room9_Movement_1A0841 move 255, SeafloorCavern_Room9_Movement_1A0841 waitmove 0 - pause 150 + delay 150 disappear 7 reappear 1 waitstate - pause 60 + delay 60 move 1, SeafloorCavern_Room9_Movement_15DD4C waitmove 0 special sub_80818FC @@ -111,12 +111,12 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA move 1, SeafloorCavern_Room9_Movement_15DD57 waitmove 0 disappear 1 - pause 4 + delay 4 setvar 0x8004, 2 setvar 0x8005, 2 special sub_810F758 waitstate - pause 30 + delay 30 setvar 0x8004, 2 setvar 0x8005, 3 setvar 0x8006, 4 @@ -126,7 +126,7 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA .else msgbox SeafloorCavern_Room9_Text_1B4A89, 4 .endif - playsfx 2 + playse 2 move 255, SeafloorCavern_Room9_Movement_1A083F waitmove 0 .ifdef SAPPHIRE @@ -143,8 +143,8 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA msgbox SeafloorCavern_Room9_Text_1B4B11, 4 .endif closebutton - playsfx 3 - pause 20 + playse 3 + delay 20 move 0x8004, SeafloorCavern_Room9_Movement_1A0845 waitmove 0 .ifdef SAPPHIRE @@ -167,7 +167,7 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA .else msgbox SeafloorCavern_Room9_Text_1B4D02, 4 .endif - playsfx 21 + playse 21 move 0x8004, SeafloorCavern_Room9_Movement_1A0833 waitmove 0 move 0x8004, SeafloorCavern_Room9_Movement_1A0835 diff --git a/data/scripts/maps/SealedChamber_InnerRoom.inc b/data/scripts/maps/SealedChamber_InnerRoom.inc index 2650f4ab5..929b4d0ca 100644 --- a/data/scripts/maps/SealedChamber_InnerRoom.inc +++ b/data/scripts/maps/SealedChamber_InnerRoom.inc @@ -8,29 +8,29 @@ SealedChamber_InnerRoom_EventScript_15F1E8:: @ 815F1E8 hidebox 0, 0, 29, 19 checkflag 228 goto_if_eq SealedChamber_InnerRoom_EventScript_15F247 - specialval RESULT, CheckRelicanthWailord + specialvar RESULT, CheckRelicanthWailord compare_var_to_imm RESULT, 0 goto_if_eq SealedChamber_InnerRoom_EventScript_15F247 - fadeout 0 - playsfx 49 + fadeoutbgm 0 + playse 49 special DoSealedChamberShakingEffect1 waitstate - pause 40 + delay 40 special DoSealedChamberShakingEffect2 waitstate - playsfx 8 - pause 40 + playse 8 + delay 40 special DoSealedChamberShakingEffect2 waitstate - playsfx 8 - pause 40 + playse 8 + delay 40 special DoSealedChamberShakingEffect2 waitstate - playsfx 8 - pause 40 + playse 8 + delay 40 msgbox SealedChamber_InnerRoom_Text_1A138B, 4 closebutton - fadein 0 + fadeinbgm 0 setflag 228 releaseall end diff --git a/data/scripts/maps/SealedChamber_OuterRoom.inc b/data/scripts/maps/SealedChamber_OuterRoom.inc index dfa4777fa..091c0e8a4 100644 --- a/data/scripts/maps/SealedChamber_OuterRoom.inc +++ b/data/scripts/maps/SealedChamber_OuterRoom.inc @@ -5,7 +5,7 @@ SealedChamber_OuterRoom_MapScripts:: @ 815F0C6 .byte 0 SealedChamber_OuterRoom_MapScript1_15F0D6:: @ 815F0D6 - warp4 Underwater_SealedChamber, 255, 12, 44 + setdivewarp Underwater_SealedChamber, 255, 12, 44 warp6 Underwater_SealedChamber, 255, 12, 44 end diff --git a/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc b/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc index bad7397c0..e51817e27 100644 --- a/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc @@ -19,7 +19,7 @@ ShoalCave_LowTideEntranceRoom_EventScript_15E072:: @ 815E072 ShoalCave_LowTideEntranceRoom_EventScript_15E076:: @ 815E076 lock faceplayer - checkdailyflags + dodailyevents checkflag 2143 call_if 1, ShoalCave_LowTideEntranceRoom_EventScript_15E176 checkitem ITEM_SHOAL_SALT, 4 diff --git a/data/scripts/maps/SkyPillar_2F.inc b/data/scripts/maps/SkyPillar_2F.inc index 62cb389f2..3b3585bf8 100644 --- a/data/scripts/maps/SkyPillar_2F.inc +++ b/data/scripts/maps/SkyPillar_2F.inc @@ -6,5 +6,5 @@ SkyPillar_2F_MapScripts:: @ 815F2C9 SkyPillar_2F_MapScript1_15F2D9:: @ 815F2D9 tileeffect 7 - warp5 SkyPillar_1F, 255, 0, 0 + setholewarp SkyPillar_1F, 255, 0, 0 end diff --git a/data/scripts/maps/SkyPillar_4F.inc b/data/scripts/maps/SkyPillar_4F.inc index 5e1f7f4e6..3d535a25a 100644 --- a/data/scripts/maps/SkyPillar_4F.inc +++ b/data/scripts/maps/SkyPillar_4F.inc @@ -6,5 +6,5 @@ SkyPillar_4F_MapScripts:: @ 815F2E5 SkyPillar_4F_MapScript1_15F2F5:: @ 815F2F5 tileeffect 7 - warp5 SkyPillar_3F, 255, 0, 0 + setholewarp SkyPillar_3F, 255, 0, 0 end diff --git a/data/scripts/maps/SkyPillar_Top.inc b/data/scripts/maps/SkyPillar_Top.inc index e41d579c0..9a8a57e3f 100644 --- a/data/scripts/maps/SkyPillar_Top.inc +++ b/data/scripts/maps/SkyPillar_Top.inc @@ -15,9 +15,9 @@ SkyPillar_Top_EventScript_15F316:: @ 815F316 lock faceplayer setwildbattle SPECIES_RAYQUAZA, 70, ITEM_NONE - checksound + waitse pokecry SPECIES_RAYQUAZA, 2 - pause 40 + delay 40 waitpokecry setflag 773 setflag 2145 diff --git a/data/scripts/maps/SlateportCity.inc b/data/scripts/maps/SlateportCity.inc index c43ddfaee..69bd90d75 100644 --- a/data/scripts/maps/SlateportCity.inc +++ b/data/scripts/maps/SlateportCity.inc @@ -66,14 +66,14 @@ SlateportCity_EventScript_14BAE0:: @ 814BAE0 faceplayer bufferfirstpoke 0 msgbox SlateportCity_Text_164682, 4 - specialval RESULT, LeadMonHasEffortRibbon + specialvar RESULT, LeadMonHasEffortRibbon compare_var_to_imm RESULT, 1 call_if 1, SlateportCity_EventScript_14BB35 - specialval RESULT, ScrSpecial_AreLeadMonEVsMaxedOut + specialvar RESULT, ScrSpecial_AreLeadMonEVsMaxedOut compare_var_to_imm RESULT, 0 call_if 1, SlateportCity_EventScript_14BB2B msgbox SlateportCity_Text_164691, 4 - fanfare 370 + playfanfare 370 message SlateportCity_Text_1646DD waitfanfare waittext @@ -493,10 +493,10 @@ SlateportCity_EventScript_14BEBC:: @ 814BEBC closebutton move 10, SlateportCity_Movement_1A0843 waitmove 0 - pause 10 + delay 10 move 9, SlateportCity_Movement_1A0845 waitmove 0 - pause 25 + delay 25 move 11, SlateportCity_Movement_14C000 move 255, SlateportCity_Movement_14C00E move 10, SlateportCity_Movement_14BFDD @@ -508,7 +508,7 @@ SlateportCity_EventScript_14BEBC:: @ 814BEBC move 11, SlateportCity_Movement_1A0841 waitmove 0 msgbox SlateportCity_Text_1655E7, 4 - playmusic BGM_EVIL_TEAM, 0 + playbgm BGM_EVIL_TEAM, 0 msgbox SlateportCity_Text_1656BC, 4 move 6, SlateportCity_Movement_1A083F move 1, SlateportCity_Movement_1A083F @@ -519,7 +519,7 @@ SlateportCity_EventScript_14BEBC:: @ 814BEBC move 11, SlateportCity_Movement_1A0845 waitmove 0 msgbox SlateportCity_Text_16578F, 4 - playsfx 21 + playse 21 move 11, SlateportCity_Movement_1A0833 waitmove 0 move 11, SlateportCity_Movement_1A0835 diff --git a/data/scripts/maps/SlateportCity_ContestLobby.inc b/data/scripts/maps/SlateportCity_ContestLobby.inc index b541fb0e8..0f2d03a5a 100644 --- a/data/scripts/maps/SlateportCity_ContestLobby.inc +++ b/data/scripts/maps/SlateportCity_ContestLobby.inc @@ -22,17 +22,17 @@ SlateportCity_ContestLobby_EventScript_155448:: @ 8155448 lockall move 1, SlateportCity_ContestLobby_Movement_1554CC waitmove 0 - playsfx 71 + playse 71 setmaptile 4, 2, 545, 1 setmaptile 4, 3, 609, 1 special DrawWholeMapView move 1, SlateportCity_ContestLobby_Movement_1554CF waitmove 0 - playsfx 71 + playse 71 setmaptile 4, 2, 721, 1 setmaptile 4, 3, 729, 1 special DrawWholeMapView - pause 20 + delay 20 move 1, SlateportCity_ContestLobby_Movement_1554DC waitmove 0 move 255, SlateportCity_ContestLobby_Movement_1554CA diff --git a/data/scripts/maps/SlateportCity_Harbor.inc b/data/scripts/maps/SlateportCity_Harbor.inc index be1504415..802906f25 100644 --- a/data/scripts/maps/SlateportCity_Harbor.inc +++ b/data/scripts/maps/SlateportCity_Harbor.inc @@ -16,7 +16,7 @@ SlateportCity_Harbor_EventScript_155F85:: @ 8155F85 return SlateportCity_Harbor_EventScript_155F89:: @ 8155F89 - playmusicbattle BGM_EVIL_TEAM + savebgm BGM_EVIL_TEAM movespriteperm 4, 12, 13 spritebehave 4, 9 setflag 905 @@ -221,13 +221,13 @@ SlateportCity_Harbor_EventScript_156196:: @ 8156196 closebutton move LAST_TALKED, SlateportCity_Harbor_Movement_1A0841 waitmove 0 - pause 30 + delay 30 spriteinvisible LAST_TALKED, 9, 8 compare_var_to_imm FACING, 2 call_if 1, SlateportCity_Harbor_EventScript_1561EF compare_var_to_imm FACING, 4 call_if 1, SlateportCity_Harbor_EventScript_1561E4 - pause 30 + delay 30 spriteinvisible 255, 0, 0 setvar 0x8004, 5 call SlateportCity_Harbor_EventScript_1A040E diff --git a/data/scripts/maps/SlateportCity_House1.inc b/data/scripts/maps/SlateportCity_House1.inc index 731b3385b..e932a58ab 100644 --- a/data/scripts/maps/SlateportCity_House1.inc +++ b/data/scripts/maps/SlateportCity_House1.inc @@ -27,14 +27,14 @@ SlateportCity_House1_EventScript_1556BF:: @ 81556BF end SlateportCity_House1_EventScript_1556C9:: @ 81556C9 - specialval RESULT, ScriptGetPartyMonSpecies + specialvar RESULT, ScriptGetPartyMonSpecies compare_var_to_imm RESULT, SPECIES_EGG goto_if_eq SlateportCity_House1_EventScript_15571C special sub_80BFAE0 special sub_80BFB10 compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_House1_EventScript_155726 - specialval RESULT, sub_810F96C + specialvar RESULT, sub_810F96C special sub_80BFAE0 compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_House1_EventScript_155726 @@ -58,7 +58,7 @@ SlateportCity_House1_EventScript_155726:: @ 8155726 SlateportCity_House1_EventScript_155730:: @ 8155730 msgbox SlateportCity_House1_Text_17D580, 4 call SlateportCity_House1_EventScript_1A0678 - specialval RESULT, sub_80BF9B4 + specialvar RESULT, sub_80BF9B4 special sub_80BFAE0 compare_var_to_imm RESULT, 1 goto_if_eq SlateportCity_House1_EventScript_15575A diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc index e8f6d45ac..0c75b2b9d 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc @@ -157,8 +157,8 @@ SlateportCity_OceanicMuseum_1F_EventScript_155C31:: @ 8155C31 SlateportCity_OceanicMuseum_1F_EventScript_155C3A:: @ 8155C3A lock faceplayer - pause 8 - playsfx 21 + delay 8 + playse 21 move 13, SlateportCity_OceanicMuseum_1F_Movement_1A0833 waitmove 0 move 13, SlateportCity_OceanicMuseum_1F_Movement_1A0835 @@ -180,7 +180,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155C98:: @ 8155C98 move 13, SlateportCity_OceanicMuseum_1F_Movement_155CD3 waitmove 0 setflag 965 - playsfx 9 + playse 9 disappear 13 release end @@ -189,7 +189,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155CAD:: @ 8155CAD move 13, SlateportCity_OceanicMuseum_1F_Movement_155CCC waitmove 0 setflag 965 - playsfx 9 + playse 9 disappear 13 release end diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc index 3a08fcc2a..709d3f1d6 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc @@ -11,7 +11,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 faceplayer msgbox SlateportCity_OceanicMuseum_2F_Text_17ECFD, 4 closebutton - playmusic BGM_EVIL_TEAM, 1 + playbgm BGM_EVIL_TEAM, 1 reappear 3 move 3, SlateportCity_OceanicMuseum_2F_Movement_155EB4 waitmove 0 @@ -45,7 +45,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 move 3, SlateportCity_OceanicMuseum_2F_Movement_155EB2 waitmove 0 msgbox SlateportCity_OceanicMuseum_2F_Text_17EEA5, 4 - playmusicbattle 0 + savebgm 0 trainerbattle 3, OPPONENT_MUSEUM_2F_GRUNT_2, 0, SlateportCity_OceanicMuseum_2F_Text_17EED6 move 3, SlateportCity_OceanicMuseum_2F_Movement_155EBF waitmove 0 @@ -54,7 +54,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 waitmove 0 msgbox SlateportCity_OceanicMuseum_2F_Text_17EEEA, 4 closebutton - pause 35 + delay 35 reappear 2 move 2, SlateportCity_OceanicMuseum_2F_Movement_155EA8 move 4, SlateportCity_OceanicMuseum_2F_Movement_155ECE @@ -73,7 +73,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 disappear 3 disappear 4 fadescreen 0 - pause 30 + delay 30 setflag 883 move 255, SlateportCity_OceanicMuseum_2F_Movement_1A0843 waitmove 0 @@ -84,7 +84,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 closebutton move 1, SlateportCity_OceanicMuseum_2F_Movement_155E98 waitmove 0 - playsfx 9 + playse 9 disappear 1 setflag 900 setflag 149 diff --git a/data/scripts/maps/SlateportCity_PokemonFanClub.inc b/data/scripts/maps/SlateportCity_PokemonFanClub.inc index 4a7fc8474..80ee23d43 100644 --- a/data/scripts/maps/SlateportCity_PokemonFanClub.inc +++ b/data/scripts/maps/SlateportCity_PokemonFanClub.inc @@ -144,7 +144,7 @@ SlateportCity_PokemonFanClub_EventScript_155998:: @ 8155998 end SlateportCity_PokemonFanClub_EventScript_1559A2:: @ 81559A2 - specialval RESULT, CheckLeadMonCool + specialvar RESULT, CheckLeadMonCool compare_var_to_imm RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_1559B3 return @@ -154,7 +154,7 @@ SlateportCity_PokemonFanClub_EventScript_1559B3:: @ 81559B3 return SlateportCity_PokemonFanClub_EventScript_1559B9:: @ 81559B9 - specialval RESULT, CheckLeadMonBeauty + specialvar RESULT, CheckLeadMonBeauty compare_var_to_imm RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_1559CA return @@ -164,7 +164,7 @@ SlateportCity_PokemonFanClub_EventScript_1559CA:: @ 81559CA return SlateportCity_PokemonFanClub_EventScript_1559D0:: @ 81559D0 - specialval RESULT, CheckLeadMonCute + specialvar RESULT, CheckLeadMonCute compare_var_to_imm RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_1559E1 return @@ -174,7 +174,7 @@ SlateportCity_PokemonFanClub_EventScript_1559E1:: @ 81559E1 return SlateportCity_PokemonFanClub_EventScript_1559E7:: @ 81559E7 - specialval RESULT, CheckLeadMonSmart + specialvar RESULT, CheckLeadMonSmart compare_var_to_imm RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_1559F8 return @@ -184,7 +184,7 @@ SlateportCity_PokemonFanClub_EventScript_1559F8:: @ 81559F8 return SlateportCity_PokemonFanClub_EventScript_1559FE:: @ 81559FE - specialval RESULT, CheckLeadMonTough + specialvar RESULT, CheckLeadMonTough compare_var_to_imm RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_155A0F return @@ -199,14 +199,14 @@ SlateportCity_PokemonFanClub_EventScript_155A15:: @ 8155A15 checkflag 278 goto_if_eq SlateportCity_PokemonFanClub_EventScript_155A75 msgbox SlateportCity_PokemonFanClub_Text_17DE6B, 4 - specialval RESULT, GetLeadMonFriendshipScore + specialvar RESULT, GetLeadMonFriendshipScore compare_var_to_imm RESULT, 4 goto_if 4, SlateportCity_PokemonFanClub_EventScript_155A3A release end SlateportCity_PokemonFanClub_EventScript_155A3A:: @ 8155A3A - playsfx 21 + playse 21 move LAST_TALKED, SlateportCity_PokemonFanClub_Movement_1A0833 waitmove 0 move LAST_TALKED, SlateportCity_PokemonFanClub_Movement_1A0835 @@ -235,7 +235,7 @@ SlateportCity_PokemonFanClub_EventScript_155A88:: @ 8155A88 SlateportCity_PokemonFanClub_EventScript_155A91:: @ 8155A91 lock faceplayer - checksound + waitse pokecry SPECIES_SKITTY, 0 msgbox SlateportCity_PokemonFanClub_Text_17E14E, 4 waitpokecry @@ -245,7 +245,7 @@ SlateportCity_PokemonFanClub_EventScript_155A91:: @ 8155A91 SlateportCity_PokemonFanClub_EventScript_155AA4:: @ 8155AA4 lock faceplayer - checksound + waitse pokecry SPECIES_ZIGZAGOON, 0 msgbox SlateportCity_PokemonFanClub_Text_17E164, 4 waitpokecry @@ -255,7 +255,7 @@ SlateportCity_PokemonFanClub_EventScript_155AA4:: @ 8155AA4 SlateportCity_PokemonFanClub_EventScript_155AB7:: @ 8155AB7 lock faceplayer - checksound + waitse pokecry SPECIES_AZUMARILL, 0 msgbox SlateportCity_PokemonFanClub_Text_17E178, 4 waitpokecry diff --git a/data/scripts/maps/SootopolisCity.inc b/data/scripts/maps/SootopolisCity.inc index 44ee245fd..14bece069 100644 --- a/data/scripts/maps/SootopolisCity.inc +++ b/data/scripts/maps/SootopolisCity.inc @@ -62,7 +62,7 @@ SootopolisCity_EventScript_14D159:: @ 814D159 return SootopolisCity_MapScript1_14D165:: @ 814D165 - warp4 Underwater_SootopolisCity, 255, 9, 6 + setdivewarp Underwater_SootopolisCity, 255, 9, 6 end SootopolisCity_EventScript_14D16E:: @ 814D16E @@ -90,7 +90,7 @@ SootopolisCity_EventScript_14D196:: @ 814D196 SootopolisCity_EventScript_14D19F:: @ 814D19F lock faceplayer - checkdailyflags + dodailyevents special GetPlayerBigGuyGirlString checkflag 2258 goto_if_eq SootopolisCity_EventScript_14D241 @@ -216,7 +216,7 @@ SootopolisCity_EventScript_14D308:: @ 814D308 move 10, SootopolisCity_Movement_1A083F move 255, SootopolisCity_Movement_1A0843 waitmove 0 - playsfx 21 + playse 21 move 10, SootopolisCity_Movement_1A0833 waitmove 0 move 10, SootopolisCity_Movement_1A0835 @@ -237,7 +237,7 @@ SootopolisCity_EventScript_14D308:: @ 814D308 .else msgbox SootopolisCity_Text_169E82, 4 .endif - playsfx 21 + playse 21 move 5, SootopolisCity_Movement_1A0833 waitmove 0 move 5, SootopolisCity_Movement_1A0835 @@ -248,7 +248,7 @@ SootopolisCity_EventScript_14D308:: @ 814D308 msgbox SootopolisCity_Text_169F3C, 4 .endif closebutton - pause 30 + delay 30 move 5, SootopolisCity_Movement_14D46A move 10, SootopolisCity_Movement_14D41D move 255, SootopolisCity_Movement_14D445 @@ -256,7 +256,7 @@ SootopolisCity_EventScript_14D308:: @ 814D308 move 5, SootopolisCity_Movement_1A0843 move 255, SootopolisCity_Movement_1A0843 waitmove 0 - pause 30 + delay 30 move 10, SootopolisCity_Movement_1A0845 waitmove 0 .ifdef SAPPHIRE @@ -265,7 +265,7 @@ SootopolisCity_EventScript_14D308:: @ 814D308 msgbox SootopolisCity_Text_169F6B, 4 .endif closebutton - pause 30 + delay 30 move 5, SootopolisCity_Movement_14D47C move 255, SootopolisCity_Movement_14D457 move 10, SootopolisCity_Movement_14D42D @@ -460,10 +460,10 @@ SootopolisCity_EventScript_14D4AD:: @ 814D4AD closebutton move LAST_TALKED, SootopolisCity_Movement_1A0845 waitmove 0 - pause 50 + delay 50 setanimation 0, 1 doanimation 30 - pause 15 + delay 15 disappear LAST_TALKED checkanimation 30 release diff --git a/data/scripts/maps/SootopolisCity_Gym_1F.inc b/data/scripts/maps/SootopolisCity_Gym_1F.inc index 39bc2d4db..1df729aad 100644 --- a/data/scripts/maps/SootopolisCity_Gym_1F.inc +++ b/data/scripts/maps/SootopolisCity_Gym_1F.inc @@ -48,35 +48,35 @@ SootopolisCity_Gym_1F_MapScript2_15AF86:: @ 815AF86 SootopolisCity_Gym_1F_EventScript_15AFA8:: @ 815AFA8 addvar 0x4022, 1 - pause 40 - playsfx 40 + delay 40 + playse 40 call SootopolisCity_Gym_1F_EventScript_15AF2E special DrawWholeMapView end SootopolisCity_Gym_1F_EventScript_15AFBC:: @ 815AFBC addvar 0x4022, 1 - pause 40 - playsfx 40 + delay 40 + playse 40 call SootopolisCity_Gym_1F_EventScript_15AF2E special DrawWholeMapView end SootopolisCity_Gym_1F_EventScript_15AFD0:: @ 815AFD0 addvar 0x4022, 1 - pause 40 - playsfx 40 + delay 40 + playse 40 call SootopolisCity_Gym_1F_EventScript_15AF2E special DrawWholeMapView end SootopolisCity_Gym_1F_EventScript_15AFE4:: @ 815AFE4 lockall - pause 20 + delay 20 move 255, SootopolisCity_Gym_1F_Movement_15AFFD waitmove 0 - playsfx 43 - pause 60 + playse 43 + delay 60 warphole SootopolisCity_Gym_B1F waitstate end diff --git a/data/scripts/maps/SootopolisCity_House1.inc b/data/scripts/maps/SootopolisCity_House1.inc index e01a00d97..ccfec8036 100644 --- a/data/scripts/maps/SootopolisCity_House1.inc +++ b/data/scripts/maps/SootopolisCity_House1.inc @@ -21,7 +21,7 @@ SootopolisCity_House1_EventScript_15B2C7:: @ 815B2C7 SootopolisCity_House1_EventScript_15B2D1:: @ 815B2D1 lock faceplayer - checksound + waitse pokecry SPECIES_KECLEON, 0 msgbox SootopolisCity_House1_Text_18FA50, 4 waitpokecry diff --git a/data/scripts/maps/SootopolisCity_House4.inc b/data/scripts/maps/SootopolisCity_House4.inc index ee3bfe61b..ac9a641d6 100644 --- a/data/scripts/maps/SootopolisCity_House4.inc +++ b/data/scripts/maps/SootopolisCity_House4.inc @@ -12,7 +12,7 @@ SootopolisCity_House4_EventScript_15B356:: @ 815B356 SootopolisCity_House4_EventScript_15B35F:: @ 815B35F lock faceplayer - checksound + waitse pokecry SPECIES_AZUMARILL, 0 msgbox SootopolisCity_House4_Text_18FDD8, 4 waitpokecry diff --git a/data/scripts/maps/SouthernIsland_Exterior.inc b/data/scripts/maps/SouthernIsland_Exterior.inc index 72a11a88b..2965b6748 100644 --- a/data/scripts/maps/SouthernIsland_Exterior.inc +++ b/data/scripts/maps/SouthernIsland_Exterior.inc @@ -16,7 +16,7 @@ SouthernIsland_Exterior_EventScript_160AE0:: @ 8160AE0 closebutton move LAST_TALKED, SouthernIsland_Exterior_Movement_1A0845 waitmove 0 - pause 30 + delay 30 spriteinvisible 1, 26, 9 setvar 0x8004, 2 call SouthernIsland_Exterior_EventScript_1A047C diff --git a/data/scripts/maps/SouthernIsland_Interior.inc b/data/scripts/maps/SouthernIsland_Interior.inc index 368e26794..e50b29d76 100644 --- a/data/scripts/maps/SouthernIsland_Interior.inc +++ b/data/scripts/maps/SouthernIsland_Interior.inc @@ -52,17 +52,17 @@ SouthernIsland_Interior_EventScript_160BA7:: @ 8160BA7 special SpawnCameraDummy move 127, SouthernIsland_Interior_Movement_160C12 waitmove 0 - pause 50 - checksound + delay 50 + waitse pokecry SPECIES_LATIAS_OR_LATIOS, 0 - pause 30 + delay 30 waitpokecry reappear 2 - pause 30 + delay 30 move 127, SouthernIsland_Interior_Movement_160C16 move 2, SouthernIsland_Interior_Movement_160C22 waitmove 0 - pause 50 + delay 50 special RemoveCameraDummy setwildbattle SPECIES_LATIAS_OR_LATIOS, 50, ITEM_SOUL_DEW setflag 911 diff --git a/data/scripts/maps/Underwater_Route134.inc b/data/scripts/maps/Underwater_Route134.inc index ee79f9799..bbe7e1ce2 100644 --- a/data/scripts/maps/Underwater_Route134.inc +++ b/data/scripts/maps/Underwater_Route134.inc @@ -3,5 +3,5 @@ Underwater_Route134_MapScripts:: @ 815F071 .byte 0 Underwater_Route134_MapScript1_15F077:: @ 815F077 - warp4 Route134, 255, 60, 31 + setdivewarp Route134, 255, 60, 31 end diff --git a/data/scripts/maps/Underwater_SeafloorCavern.inc b/data/scripts/maps/Underwater_SeafloorCavern.inc index 8ef61d0f0..3d2fe81b2 100644 --- a/data/scripts/maps/Underwater_SeafloorCavern.inc +++ b/data/scripts/maps/Underwater_SeafloorCavern.inc @@ -35,7 +35,7 @@ Underwater_SeafloorCavern_EventScript_15D9C9:: @ 815D9C9 return Underwater_SeafloorCavern_MapScript1_15DA36:: @ 815DA36 - warp4 SeafloorCavern_Entrance, 255, 10, 17 + setdivewarp SeafloorCavern_Entrance, 255, 10, 17 end Underwater_SeafloorCavern_EventScript_15DA3F:: @ 815DA3F diff --git a/data/scripts/maps/Underwater_SealedChamber.inc b/data/scripts/maps/Underwater_SealedChamber.inc index cbb45993a..6d263690d 100644 --- a/data/scripts/maps/Underwater_SealedChamber.inc +++ b/data/scripts/maps/Underwater_SealedChamber.inc @@ -11,11 +11,11 @@ Underwater_SealedChamber_MapScript1_15F086:: @ 815F086 goto Underwater_SealedChamber_EventScript_15F0AF Underwater_SealedChamber_EventScript_15F0A6:: @ 815F0A6 - warp4 Route134, 255, 60, 31 + setdivewarp Route134, 255, 60, 31 end Underwater_SealedChamber_EventScript_15F0AF:: @ 815F0AF - warp4 SealedChamber_OuterRoom, 255, 10, 19 + setdivewarp SealedChamber_OuterRoom, 255, 10, 19 end Underwater_SealedChamber_EventScript_15F0B8:: @ 815F0B8 diff --git a/data/scripts/maps/Underwater_SootopolisCity.inc b/data/scripts/maps/Underwater_SootopolisCity.inc index 624c2c83e..c9405dfd7 100644 --- a/data/scripts/maps/Underwater_SootopolisCity.inc +++ b/data/scripts/maps/Underwater_SootopolisCity.inc @@ -3,5 +3,5 @@ Underwater_SootopolisCity_MapScripts:: @ 815CAE4 .byte 0 Underwater_SootopolisCity_MapScript1_15CAEA:: @ 815CAEA - warp4 SootopolisCity, 255, 29, 53 + setdivewarp SootopolisCity, 255, 29, 53 end diff --git a/data/scripts/maps/UnknownMap_25_34.inc b/data/scripts/maps/UnknownMap_25_34.inc index fee3b1498..0bf09e41e 100644 --- a/data/scripts/maps/UnknownMap_25_34.inc +++ b/data/scripts/maps/UnknownMap_25_34.inc @@ -26,23 +26,23 @@ LinkContestRoom1_EventScript_15F5A5:: @ 815F5A5 return LinkContestRoom1_EventScript_15F5E0:: @ 815F5E0 - playmusicbattle 393 + savebgm 393 return LinkContestRoom1_EventScript_15F5E4:: @ 815F5E4 - playmusicbattle 394 + savebgm 394 return LinkContestRoom1_EventScript_15F5E8:: @ 815F5E8 - playmusicbattle 395 + savebgm 395 return LinkContestRoom1_EventScript_15F5EC:: @ 815F5EC - playmusicbattle 396 + savebgm 396 return LinkContestRoom1_EventScript_15F5F0:: @ 815F5F0 - playmusicbattle 440 + savebgm 440 return LinkContestRoom1_MapScript1_15F5F4:: @ 815F5F4 diff --git a/data/scripts/maps/VerdanturfTown_ContestLobby.inc b/data/scripts/maps/VerdanturfTown_ContestLobby.inc index 2443b01b0..e3aa13eb2 100644 --- a/data/scripts/maps/VerdanturfTown_ContestLobby.inc +++ b/data/scripts/maps/VerdanturfTown_ContestLobby.inc @@ -22,17 +22,17 @@ VerdanturfTown_ContestLobby_EventScript_153DA1:: @ 8153DA1 lockall move 1, VerdanturfTown_ContestLobby_Movement_153E25 waitmove 0 - playsfx 71 + playse 71 setmaptile 4, 2, 545, 1 setmaptile 4, 3, 609, 1 special DrawWholeMapView move 1, VerdanturfTown_ContestLobby_Movement_153E28 waitmove 0 - playsfx 71 + playse 71 setmaptile 4, 2, 721, 1 setmaptile 4, 3, 729, 1 special DrawWholeMapView - pause 20 + delay 20 move 1, VerdanturfTown_ContestLobby_Movement_153E35 waitmove 0 move 255, VerdanturfTown_ContestLobby_Movement_153E23 diff --git a/data/scripts/maps/VerdanturfTown_FriendshipRatersHouse.inc b/data/scripts/maps/VerdanturfTown_FriendshipRatersHouse.inc index 5453fb42c..0dcad8f62 100644 --- a/data/scripts/maps/VerdanturfTown_FriendshipRatersHouse.inc +++ b/data/scripts/maps/VerdanturfTown_FriendshipRatersHouse.inc @@ -5,7 +5,7 @@ VerdanturfTown_FriendshipRatersHouse_EventScript_154030:: @ 8154030 lock faceplayer msgbox VerdanturfTown_FriendshipRatersHouse_Text_178A9C, 4 - specialval RESULT, GetLeadMonFriendshipScore + specialvar RESULT, GetLeadMonFriendshipScore switch RESULT case 0, VerdanturfTown_FriendshipRatersHouse_EventScript_154093 case 1, VerdanturfTown_FriendshipRatersHouse_EventScript_15409D @@ -55,7 +55,7 @@ VerdanturfTown_FriendshipRatersHouse_EventScript_1540CF:: @ 81540CF VerdanturfTown_FriendshipRatersHouse_EventScript_1540D9:: @ 81540D9 lock faceplayer - checksound + waitse pokecry SPECIES_PIKACHU, 0 msgbox VerdanturfTown_FriendshipRatersHouse_Text_178CFD, 4 waitpokecry diff --git a/data/scripts/maps/VictoryRoad_1F.inc b/data/scripts/maps/VictoryRoad_1F.inc index 95b82f46a..78c246eb0 100644 --- a/data/scripts/maps/VictoryRoad_1F.inc +++ b/data/scripts/maps/VictoryRoad_1F.inc @@ -93,7 +93,7 @@ VictoryRoad_1F_EventScript_15DF28:: @ 815DF28 VictoryRoad_1F_EventScript_15DF31:: @ 815DF31 trainerbattle 0, OPPONENT_WALLY_3, 0, VictoryRoad_1F_Text_1979BA, VictoryRoad_1F_Text_197A23 - specialval RESULT, sub_8082C68 + specialvar RESULT, sub_8082C68 compare_var_to_imm RESULT, 1 goto_if_eq VictoryRoad_1F_EventScript_15DF58 msgbox VictoryRoad_1F_Text_197A47, 6 diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index 0a74b3c9a..1881bc242 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -36,7 +36,7 @@ yes_hear_song: setvar 0x8004, 0 @ Give the player ear rape special ScrSpecial_PlayBardSong - pause 60 + delay 60 special ScrSpecial_HasBardSongBeenChanged compare_var_to_imm RESULT, FALSE @ Prompt new lyrics only if song hasn't been changed @@ -69,7 +69,7 @@ write_lyrics: setvar 0x8004, 1 @ Give the player ear rape again special ScrSpecial_PlayBardSong - pause 60 + delay 60 msgbox gTextBard_WasThatHowYouWanted, MSGBOX_YESNO compare_var_to_imm RESULT, NO goto_if_eq write_lyrics @ Keep looping until player responds YES @@ -227,7 +227,7 @@ SpeakToStoryteller: msgbox gTextStoryteller_Introduction, MSGBOX_YESNO compare_var_to_imm RESULT, NO goto_if_eq dont_hear_story - specialval RESULT, ScrSpecial_StorytellerGetFreeStorySlot + specialvar RESULT, ScrSpecial_StorytellerGetFreeStorySlot compare_var_to_imm RESULT, 0 @ If slot is 0, then the list is empty goto_if_eq no_stories_recorded choose_story: @@ -241,7 +241,7 @@ choose_story: special ScrSpecial_StorytellerDisplayStory waittext waitbutton - specialval RESULT, ScrSpecial_StorytellerUpdateStat + specialvar RESULT, ScrSpecial_StorytellerUpdateStat compare_var_to_imm RESULT, FALSE goto_if_eq no_stat_update goto stat_update @@ -255,10 +255,10 @@ no_stat_update: compare_var_to_imm RESULT, YES goto_if_eq choose_story yes_hear_story: - specialval RESULT, ScrSpecial_HasStorytellerAlreadyRecorded + specialvar RESULT, ScrSpecial_HasStorytellerAlreadyRecorded compare_var_to_imm RESULT, TRUE goto_if_eq cant_record_story @ already recorded story - specialval RESULT, ScrSpecial_StorytellerGetFreeStorySlot + specialvar RESULT, ScrSpecial_StorytellerGetFreeStorySlot compare_var_to_imm RESULT, 4 goto_if_eq cant_record_story @ story list is full goto prompt_record_story @@ -268,7 +268,7 @@ prompt_record_story: msgbox gTextStoryteller_HaveYouAnyTales, MSGBOX_YESNO compare_var_to_imm RESULT, NO goto_if_eq dont_hear_story - specialval RESULT, ScrSpecial_StorytellerInitializeRandomStat + specialvar RESULT, ScrSpecial_StorytellerInitializeRandomStat compare_var_to_imm RESULT, TRUE goto_if_eq stat_update msgbox gTextStoryteller_ImNotSatisfied, 4 diff --git a/data/scripts/mystery_event_club.inc b/data/scripts/mystery_event_club.inc index 4ed0cef11..ed21a1869 100644 --- a/data/scripts/mystery_event_club.inc +++ b/data/scripts/mystery_event_club.inc @@ -46,7 +46,7 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1BBB:: @ 81B1BBB setvar 0x8004, 0 special sub_80EB7C4 waittext - pause 80 + delay 80 msgbox PetalburgCity_PokemonCenter_1F_Text_1B2137, 4 release end diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index 868873eec..512272e05 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -63,7 +63,7 @@ LittlerootTown_MaysHouse_2F_EventScript_1B69EB:: @ 81B69EB goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_1B6A91 msgbox LittlerootTown_BrendansHouse_2F_Text_172E18, 4 call LittlerootTown_BrendansHouse_2F_EventScript_1B6A9B - pause 30 + delay 30 setvar 0x4092, 6 setflag 81 setflag 754 @@ -73,7 +73,7 @@ LittlerootTown_MaysHouse_2F_EventScript_1B69EB:: @ 81B69EB call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6A31 compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6A61 - playsfx 9 + playse 9 disappear 0x8008 releaseall end @@ -160,7 +160,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6ABF:: @ 81B6ABF call LittlerootTown_BrendansHouse_1F_EventScript_1B6B9D move 255, LittlerootTown_BrendansHouse_1F_Movement_1B6CCC waitmove 0 - playmusic 453, 0 + playbgm 453, 0 msgbox LittlerootTown_BrendansHouse_1F_Text_1725C9, 4 closebutton move 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1B6BDB @@ -185,7 +185,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6B2E:: @ 81B6B2E call LittlerootTown_MaysHouse_1F_EventScript_1B6B9D move 255, LittlerootTown_MaysHouse_1F_Movement_1B6CD4 waitmove 0 - playmusic 453, 0 + playbgm 453, 0 msgbox LittlerootTown_MaysHouse_1F_Text_1725C9, 4 closebutton move 0x8005, LittlerootTown_MaysHouse_1F_Movement_1B6BDE @@ -206,7 +206,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6B2E:: @ 81B6B2E LittlerootTown_BrendansHouse_1F_EventScript_1B6B9D:: @ 81B6B9D LittlerootTown_MaysHouse_1F_EventScript_1B6B9D:: @ 81B6B9D - playsfx 21 + playse 21 move 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1A0833 waitmove 0 move 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1A0835 @@ -220,10 +220,10 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6BBE:: @ 81B6BBE move 255, LittlerootTown_BrendansHouse_1F_Movement_1A0841 waitmove 0 msgbox LittlerootTown_BrendansHouse_1F_Text_172841, 4 - fadedefault + fadedefaultbgm special TurnOffTVScreen setflag 2096 - pause 35 + delay 35 return LittlerootTown_BrendansHouse_1F_Movement_1B6BDB:: @ 81B6BDB @@ -312,7 +312,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6CA6:: @ 81B6CA6 LittlerootTown_MaysHouse_1F_EventScript_1B6CA6:: @ 81B6CA6 lock faceplayer - checksound + waitse pokecry SPECIES_MACHOKE, 0 msgbox LittlerootTown_BrendansHouse_1F_Text_17281D, 4 waitpokecry @@ -323,7 +323,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6CB9:: @ 81B6CB9 LittlerootTown_MaysHouse_1F_EventScript_1B6CB9:: @ 81B6CB9 lock faceplayer - checksound + waitse pokecry SPECIES_MACHOKE, 0 msgbox LittlerootTown_BrendansHouse_1F_Text_172831, 4 waitpokecry @@ -372,12 +372,12 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6CDE:: @ 81B6CDE call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E28 move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1A0839 waitmove 0 - playsfx 21 + playse 21 move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1A0833 waitmove 0 move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1A0835 waitmove 0 - pause 20 + delay 20 compare_var_to_imm 0x8008, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DCD compare_var_to_imm 0x8008, 1 @@ -396,7 +396,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6CDE:: @ 81B6CDE call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DF9 compare_var_to_imm 0x8008, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E0B - playsfx 8 + playse 8 disappear 0x8009 setflag 291 setvar 0x4082, 4 diff --git a/data/scripts/pokeblocks.inc b/data/scripts/pokeblocks.inc index 8badf3aab..61a484b4c 100644 --- a/data/scripts/pokeblocks.inc +++ b/data/scripts/pokeblocks.inc @@ -49,11 +49,11 @@ FallarborTown_ContestLobby_EventScript_1B76A1:: @ 81B76A1 checkitem ITEM_POKEBLOCK_CASE, 1 compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7780 - specialval RESULT, PlayerHasBerries + specialvar RESULT, PlayerHasBerries compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B770E msgbox FallarborTown_ContestLobby_Text_1B6E9D, 4 - specialval RESULT, sub_810CA00 + specialvar RESULT, sub_810CA00 compare_var_to_imm RESULT, 65535 goto_if 5, FallarborTown_ContestLobby_EventScript_1B76EF compare_var_to_imm RESULT, 65535 @@ -75,7 +75,7 @@ FallarborTown_ContestLobby_EventScript_1B76EF:: @ 81B76EF FallarborTown_ContestLobby_EventScript_1B770E:: @ 81B770E msgbox FallarborTown_ContestLobby_Text_1B6FF0, 4 - checkdailyflags + dodailyevents checkflag 2241 goto_if_eq FallarborTown_ContestLobby_EventScript_1B774F goto FallarborTown_ContestLobby_EventScript_1B7759 @@ -148,7 +148,7 @@ VerdanturfTown_ContestLobby_EventScript_1B77B6:: @ 81B77B6 lock faceplayer msgbox FallarborTown_ContestLobby_Text_1B742F, 4 - specialval RESULT, PlayerHasBerries + specialvar RESULT, PlayerHasBerries compare_var_to_imm RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1B77DC compare_var_to_imm RESULT, 0 @@ -161,7 +161,7 @@ FallarborTown_ContestLobby_EventScript_1B77DC:: @ 81B77DC end FallarborTown_ContestLobby_EventScript_1B77E6:: @ 81B77E6 - checkdailyflags + dodailyevents checkflag 2241 goto_if_eq FallarborTown_ContestLobby_EventScript_1B77F6 goto FallarborTown_ContestLobby_EventScript_1B7800 @@ -208,13 +208,13 @@ LilycoveCity_ContestLobby_EventScript_1B783B:: @ 81B783B SlateportCity_ContestLobby_EventScript_1B783B:: @ 81B783B VerdanturfTown_ContestLobby_EventScript_1B783B:: @ 81B783B lockall - specialval RESULT, PlayerHasBerries + specialvar RESULT, PlayerHasBerries compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7897 checkitem ITEM_POKEBLOCK_CASE, 1 compare_var_to_imm RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7942 - specialval RESULT, sub_810CA00 + specialvar RESULT, sub_810CA00 compare_var_to_imm RESULT, 65535 goto_if 5, FallarborTown_ContestLobby_EventScript_1B7878 compare_var_to_imm RESULT, 65535 @@ -321,7 +321,7 @@ FallarborTown_ContestLobby_EventScript_1B7973:: @ 81B7973 FallarborTown_ContestLobby_EventScript_1B7980:: @ 81B7980 fadescreen 1 - specialval RESULT, GetLinkPartnerNames + specialvar RESULT, GetLinkPartnerNames copyvar 0x8008, RESULT copyvar 0x8004, 0x8008 special SpawnBerryBlenderLinkPlayerSprites diff --git a/data/scripts/safari_zone.inc b/data/scripts/safari_zone.inc index 97572220d..01fdf3c03 100644 --- a/data/scripts/safari_zone.inc +++ b/data/scripts/safari_zone.inc @@ -1,7 +1,7 @@ gUnknown_081C340A:: @ 81C340A setvar 0x40a4, 1 special ExitSafariMode - warp3 Route121_SafariZoneEntrance, 255, 2, 5 + setwarp Route121_SafariZoneEntrance, 255, 2, 5 end EventScript_1C341B: @ 81C341B @@ -24,7 +24,7 @@ EventScript_1C3443: gUnknown_081C3448:: @ 81C3448 lockall - playsfx 73 + playse 73 message UnknownString_81C34E4 waittext waitbutton @@ -33,7 +33,7 @@ gUnknown_081C3448:: @ 81C3448 gUnknown_081C3459:: @ 81C3459 lockall - playsfx 73 + playse 73 message UnknownString_81C3514 waittext waitbutton diff --git a/data/scripts/tv.inc b/data/scripts/tv.inc index 9b8dafa9b..a2348315f 100644 --- a/data/scripts/tv.inc +++ b/data/scripts/tv.inc @@ -2,7 +2,7 @@ Event_TV:: @ 81A6E72 lockall inccounter GAME_STAT_WATCHED_TV special sub_80C2014 - specialval RESULT, CheckForBigMovieOrEmergencyNewsOnTV + specialvar RESULT, CheckForBigMovieOrEmergencyNewsOnTV compare_var_to_imm RESULT, 2 goto_if_eq EventScript_1A6F01 compare_var_to_imm RESULT, 1 @@ -11,21 +11,21 @@ Event_TV:: @ 81A6E72 goto_if 0, EventScript_1A6EF1 checkflag 2097 goto_if_eq EventScript_1A6EF1 - specialval RESULT, IsTVShowInSearchOfTrainersAiring + specialvar RESULT, IsTVShowInSearchOfTrainersAiring compare_var_to_imm RESULT, 1 goto_if_eq EventScript_1A6F66 goto EventScript_1A6F50 end EventScript_1A6EBB: - specialval 0x8004, special_0x44 + specialvar 0x8004, special_0x44 compare_var_to_imm 0x8004, 255 goto_if_eq EventScript_1A6F3F - specialval RESULT, special_0x4a + specialvar RESULT, special_0x4a compare_var_to_imm RESULT, 255 goto_if_eq EventScript_1A6F3F copyvar 0x8004, RESULT - specialval RESULT, sub_80BDA0C + specialvar RESULT, sub_80BDA0C compare_var_to_imm RESULT, 0 goto_if 5, EventScript_1A6F21 end -- cgit v1.2.3 From 598756eaa47b523bd557a619e05cb23399ac02e5 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 24 Sep 2017 17:57:54 -0500 Subject: more script command renaming --- asm/macros/event.inc | 46 ++--- data-de/event_scripts.s | 64 +++--- data-de/field_move_scripts.inc | 8 +- data/event_scripts.s | 64 +++--- data/field_move_scripts.inc | 8 +- data/scripts/cable_club.inc | 76 +++---- data/scripts/contest_hall.inc | 178 ++++++++-------- data/scripts/day_care.inc | 4 +- data/scripts/gabby_and_ty.inc | 16 +- data/scripts/magma_chimney.inc | 36 ++-- data/scripts/maps/AquaHideout_B2F.inc | 34 +-- data/scripts/maps/BattleTower_BattleRoom.inc | 28 +-- data/scripts/maps/BattleTower_Corridor.inc | 12 +- data/scripts/maps/BattleTower_Elevator.inc | 12 +- data/scripts/maps/BattleTower_Lobby.inc | 12 +- data/scripts/maps/BattleTower_Outside.inc | 4 +- data/scripts/maps/CaveOfOrigin_B4F.inc | 8 +- data/scripts/maps/DewfordTown.inc | 40 ++-- data/scripts/maps/DewfordTown_Hall.inc | 32 +-- data/scripts/maps/EverGrandeCity_ChampionsRoom.inc | 72 +++---- data/scripts/maps/EverGrandeCity_HallOfFame.inc | 30 +-- data/scripts/maps/EverGrandeCity_PokemonLeague.inc | 22 +- data/scripts/maps/FallarborTown_ContestLobby.inc | 22 +- data/scripts/maps/FallarborTown_House2.inc | 4 +- .../maps/FallarborTown_PokemonCenter_1F.inc | 8 +- data/scripts/maps/FortreeCity.inc | 8 +- data/scripts/maps/FortreeCity_House4.inc | 16 +- data/scripts/maps/GraniteCave_StevensRoom.inc | 8 +- data/scripts/maps/LavaridgeTown.inc | 34 +-- data/scripts/maps/LilycoveCity.inc | 12 +- data/scripts/maps/LilycoveCity_ContestHall.inc | 112 +++++----- data/scripts/maps/LilycoveCity_ContestLobby.inc | 100 ++++----- .../scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc | 46 ++--- .../maps/LilycoveCity_DepartmentStoreElevator.inc | 4 +- .../maps/LilycoveCity_DepartmentStore_1F.inc | 8 +- data/scripts/maps/LilycoveCity_Harbor.inc | 24 +-- data/scripts/maps/LilycoveCity_House3.inc | 12 +- .../maps/LilycoveCity_LilycoveMuseum_1F.inc | 22 +- .../maps/LilycoveCity_LilycoveMuseum_2F.inc | 30 +-- .../maps/LilycoveCity_MoveDeletersHouse.inc | 4 +- .../maps/LilycoveCity_PokemonTrainerFanClub.inc | 26 +-- data/scripts/maps/LittlerootTown.inc | 230 ++++++++++----------- .../maps/LittlerootTown_BrendansHouse_1F.inc | 24 +-- data/scripts/maps/LittlerootTown_MaysHouse_1F.inc | 24 +-- data/scripts/maps/LittlerootTown_MaysHouse_2F.inc | 48 ++--- .../maps/LittlerootTown_ProfessorBirchsLab.inc | 12 +- data/scripts/maps/MauvilleCity.inc | 88 ++++---- data/scripts/maps/MauvilleCity_GameCorner.inc | 4 +- data/scripts/maps/MauvilleCity_House2.inc | 8 +- data/scripts/maps/MeteorFalls_1F_1R.inc | 82 ++++---- data/scripts/maps/MossdeepCity.inc | 4 +- data/scripts/maps/MossdeepCity_GameCorner_1F.inc | 30 +-- data/scripts/maps/MossdeepCity_GameCorner_B1F.inc | 8 +- data/scripts/maps/MossdeepCity_Gym.inc | 32 +-- data/scripts/maps/MossdeepCity_House2.inc | 8 +- data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc | 8 +- data/scripts/maps/MossdeepCity_StevensHouse.inc | 20 +- data/scripts/maps/MtChimney_CableCarStation.inc | 12 +- data/scripts/maps/MtPyre_Summit.inc | 76 +++---- data/scripts/maps/NewMauville_Entrance.inc | 4 +- data/scripts/maps/OldaleTown.inc | 64 +++--- data/scripts/maps/PetalburgCity.inc | 88 ++++---- data/scripts/maps/PetalburgCity_Gym.inc | 142 ++++++------- data/scripts/maps/PetalburgWoods.inc | 84 ++++---- data/scripts/maps/Route101.inc | 44 ++-- data/scripts/maps/Route103.inc | 40 ++-- data/scripts/maps/Route104.inc | 26 +-- data/scripts/maps/Route109.inc | 42 ++-- data/scripts/maps/Route110.inc | 56 ++--- .../Route110_SeasideCyclingRoadNorthEntrance.inc | 4 +- .../Route110_SeasideCyclingRoadSouthEntrance.inc | 4 +- data/scripts/maps/Route110_TrickHouseEnd.inc | 44 ++-- data/scripts/maps/Route110_TrickHouseEntrance.inc | 64 +++--- data/scripts/maps/Route110_TrickHousePuzzle5.inc | 192 ++++++++--------- data/scripts/maps/Route111.inc | 80 +++---- .../maps/Route111_WinstrateFamilysHouse.inc | 4 +- data/scripts/maps/Route112_CableCarStation.inc | 12 +- data/scripts/maps/Route116.inc | 22 +- data/scripts/maps/Route118.inc | 36 ++-- data/scripts/maps/Route119.inc | 28 +-- data/scripts/maps/Route119_WeatherInstitute_2F.inc | 4 +- data/scripts/maps/Route120.inc | 30 +-- data/scripts/maps/Route121.inc | 8 +- data/scripts/maps/Route121_SafariZoneEntrance.inc | 16 +- data/scripts/maps/Route128.inc | 60 +++--- data/scripts/maps/RustboroCity.inc | 192 ++++++++--------- data/scripts/maps/RustboroCity_DevonCorp_2F.inc | 16 +- data/scripts/maps/RustboroCity_DevonCorp_3F.inc | 32 +-- data/scripts/maps/RustboroCity_PokemonSchool.inc | 16 +- data/scripts/maps/RusturfTunnel.inc | 112 +++++----- data/scripts/maps/SafariZone_Southeast.inc | 24 +-- data/scripts/maps/SeafloorCavern_Room9.inc | 76 +++---- data/scripts/maps/SlateportCity.inc | 88 ++++---- data/scripts/maps/SlateportCity_ContestHall.inc | 40 ++-- data/scripts/maps/SlateportCity_ContestLobby.inc | 26 +-- data/scripts/maps/SlateportCity_Harbor.inc | 60 +++--- .../maps/SlateportCity_OceanicMuseum_1F.inc | 32 +-- .../maps/SlateportCity_OceanicMuseum_2F.inc | 74 +++---- data/scripts/maps/SlateportCity_PokemonFanClub.inc | 8 +- .../maps/SlateportCity_SternsShipyard_1F.inc | 28 +-- data/scripts/maps/SootopolisCity.inc | 70 +++---- data/scripts/maps/SootopolisCity_Gym_1F.inc | 4 +- data/scripts/maps/SouthernIsland_Exterior.inc | 12 +- data/scripts/maps/SouthernIsland_Interior.inc | 10 +- data/scripts/maps/VerdanturfTown.inc | 8 +- data/scripts/maps/VerdanturfTown_ContestLobby.inc | 22 +- data/scripts/maps/VictoryRoad_1F.inc | 16 +- data/scripts/players_house.inc | 156 +++++++------- data/scripts/pokeblocks.inc | 22 +- data/scripts/secret_power_tm.inc | 8 +- 110 files changed, 2186 insertions(+), 2188 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 7e3408dfb..c29d886ec 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -518,34 +518,32 @@ .endm @ Applies the movement data at movements to the specified (index) Person event. Also closes any standard message boxes that are still open. - .macro move index, movements - .byte 0x4f - .2byte \index - .4byte \movements - .endm - - @ Apparent clone of applymovement. Oddly, it doesn't seem to work at all if applied to any Person other than the player (0xFF), and the X and Y arguments don't seem to do anything. @ This command in fact uses variables to access the Person event ID. So, for example, if you setvar 0x8000 to 0x3, and then use applymovementpos 0x8000 @move1, Person event 3 will have the movements at @move1 applied to them. Thank you Shiny Quagsire for bringing this to my attention. - .macro movecoords variable, movements, x, y - .byte 0x50 - .2byte \variable - .4byte \movements - .byte \x - .byte \y + .macro applymovement index, movements, mapGroup, mapNum + .ifb \mapGroup + .byte 0x4f + .2byte \index + .4byte \movements + .else + .byte 0x50 + .2byte \index + .4byte \movements + .byte \mapGroup + .byte \mapNum + .endif .endm @ Blocks script execution until the movements being applied to the specified (index) Person event finish. If the specified Person event is 0x0000, then the command will block script execution until all Person events affected by applymovement finish their movements. If the specified Person event is not currently being manipulated with applymovement, then this command does nothing. - .macro waitmove index - .byte 0x51 - .2byte \index - .endm - - @ Apparent clone of waitmovement. Oddly, it doesn't seem to work at all if applied to any Person other than the player (0xFF), and the X and Y arguments don't seem to do anything. - .macro waitmovexy index, X, Y - .byte 0x52 - .2byte \index - .byte \X - .byte \Y + .macro waitmovement index, mapBank, mapNum + .ifb \mapBank + .byte 0x51 + .2byte \index + .else + .byte 0x52 + .2byte \index + .byte \mapBank + .byte \mapNum + .endif .endm @ Attempts to hide the specified (local_ID, a local ID) Person event on the current map, by setting its visibility flag if it has a valid one. If the Person does not have a valid visibility flag, this command does nothing. diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index 4277f1e6d..1885e00f0 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -939,8 +939,8 @@ gUnknown_0819F80B:: @ 819F80B gUnknown_0819F818:: @ 819F818 lock faceplayer - move LAST_TALKED, Movement_19F8F0 - waitmove 0 + applymovement LAST_TALKED, Movement_19F8F0 + waitmovement 0 specialvar RESULT, ScrSpecial_HasTrainerBeenFought compare_var_to_imm RESULT, 0 goto_if 5, EventScript_19F83F @@ -976,8 +976,8 @@ EventScript_19F877: endtrainerbattle gUnknown_0819F878:: @ 819F878 - move LAST_TALKED, Movement_19F8F0 - waitmove 0 + applymovement LAST_TALKED, Movement_19F8F0 + waitmovement 0 special PlayTrainerEncounterMusic reptrainerbattle endtrainerbattle @@ -1028,8 +1028,8 @@ EventScript_19F8DE: end EventScript_19F8E5: - move LAST_TALKED, Movement_19F8F0 - waitmove 0 + applymovement LAST_TALKED, Movement_19F8F0 + waitmovement 0 return Movement_19F8F0:: @@ -1449,12 +1449,12 @@ OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C inccounter GAME_STAT_USED_POKECENTER message gText_NurseJoy_OkayIllTakeYourPokemon waittext - move 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A083F - waitmove 0 + applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A083F + waitmovement 0 doanimation 25 checkanimation 25 - move 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A0845 - waitmove 0 + applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A0845 + waitmovement 0 special ScrSpecial_HealPlayerParty checkflag 273 goto_if 0, OldaleTown_PokemonCenter_1F_EventScript_19FDCE @@ -1464,8 +1464,8 @@ OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C OldaleTown_PokemonCenter_1F_EventScript_19FDB0:: @ 819FDB0 message gText_NurseJoy_ThankYouForWaiting waittext - move 0x800b, OldaleTown_PokemonCenter_1F_Movement_19FDF4 - waitmove 0 + applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_19FDF4 + waitmovement 0 message gText_NurseJoy_WeHopeToSeeYouAgain waittext return @@ -2233,8 +2233,8 @@ BattleTower_Outside_EventScript_1A040E:: @ 81A040E LilycoveCity_Harbor_EventScript_1A040E:: @ 81A040E SlateportCity_Harbor_EventScript_1A040E:: @ 81A040E delay 60 - move 0x8004, SlateportCity_Harbor_Movement_1A041C - waitmove 0 + applymovement 0x8004, SlateportCity_Harbor_Movement_1A041C + waitmovement 0 return SlateportCity_Harbor_Movement_1A041C:: @ 81A041C @@ -2270,12 +2270,12 @@ RusturfTunnel_EventScript_1A0442:: @ 81A0442 EventScript_1A0457: @ unreferenced? delay 30 - move 255, SlateportCity_OceanicMuseum_2F_Movement_1A0841 - waitmove 0 + applymovement 255, SlateportCity_OceanicMuseum_2F_Movement_1A0841 + waitmovement 0 spritevisible 255, 0, 0 delay 30 - move 255, Movement_1A047A - waitmove 0 + applymovement 255, Movement_1A047A + waitmovement 0 delay 30 return @@ -2446,10 +2446,10 @@ Route119_EventScript_1A05AE:: @ 81A05AE Route119_EventScript_1A05C3:: @ 81A05C3 msgbox Route119_Text_171BF6, 4 closebutton - move LAST_TALKED, Route119_Movement_1A0839 - waitmove 0 - move LAST_TALKED, Route119_Movement_1A0662 - waitmove 0 + applymovement LAST_TALKED, Route119_Movement_1A0839 + waitmovement 0 + applymovement LAST_TALKED, Route119_Movement_1A0662 + waitmovement 0 waitse pokecry SPECIES_KECLEON, 2 delay 40 @@ -2554,8 +2554,8 @@ EverGrandeCity_DrakesRoom_EventScript_1A0693:: @ 81A0693 EverGrandeCity_GlaciasRoom_EventScript_1A0693:: @ 81A0693 EverGrandeCity_PhoebesRoom_EventScript_1A0693:: @ 81A0693 EverGrandeCity_SidneysRoom_EventScript_1A0693:: @ 81A0693 - move 255, EverGrandeCity_SidneysRoom_Movement_1A0853 - waitmove 0 + applymovement 255, EverGrandeCity_SidneysRoom_Movement_1A0853 + waitmovement 0 playse 8 setmaptile 6, 1, 836, 0 setmaptile 6, 2, 837, 0 @@ -2576,8 +2576,8 @@ EverGrandeCity_DrakesRoom_EventScript_1A0710:: @ 81A0710 EverGrandeCity_GlaciasRoom_EventScript_1A0710:: @ 81A0710 EverGrandeCity_PhoebesRoom_EventScript_1A0710:: @ 81A0710 EverGrandeCity_SidneysRoom_EventScript_1A0710:: @ 81A0710 - move 255, EverGrandeCity_SidneysRoom_Movement_1A0847 - waitmove 0 + applymovement 255, EverGrandeCity_SidneysRoom_Movement_1A0847 + waitmovement 0 playse 52 setmaptile 5, 12, 518, 1 setmaptile 6, 12, 518, 1 @@ -3745,8 +3745,8 @@ EventScript_1A2DB8: end SecretBase_RedCave1_EventScript_1A2DDE:: @ 81A2DDE - move 255, SecretBase_RedCave1_Movement_1A2E11 - waitmove 0 + applymovement 255, SecretBase_RedCave1_Movement_1A2E11 + waitmovement 0 setvar 0x4097, 1 msgbox SecretBase_RedCave1_Text_198F89, 5 compare_var_to_imm RESULT, 1 @@ -4903,8 +4903,8 @@ SkyPillar_4F_MapScript1_1C6BBF:: @ 81C6BBF S_FallDownHole:: @ 81C6BC5 lockall delay 20 - move 255, GraniteCave_B1F_Movement_1C6BF7 - waitmove 0 + applymovement 255, GraniteCave_B1F_Movement_1C6BF7 + waitmovement 0 playse 43 delay 60 warphole UNDEFINED @@ -4914,8 +4914,8 @@ S_FallDownHole:: @ 81C6BC5 gUnknown_081C6BDE:: @ 81C6BDE lockall delay 20 - move 255, GraniteCave_B1F_Movement_1C6BF7 - waitmove 0 + applymovement 255, GraniteCave_B1F_Movement_1C6BF7 + waitmovement 0 playse 43 delay 60 special sp13F_fall_to_last_warp diff --git a/data-de/field_move_scripts.inc b/data-de/field_move_scripts.inc index 503aa53e5..40748401b 100644 --- a/data-de/field_move_scripts.inc +++ b/data-de/field_move_scripts.inc @@ -26,8 +26,8 @@ S_UseCut:: @ 81B0E16 end DoTreeCutMovement: @ 81B0E21 - move LAST_TALKED, TreeCutMovement @ tree cut animation - waitmove 0 + applymovement LAST_TALKED, TreeCutMovement @ tree cut animation + waitmovement 0 disappear LAST_TALKED @ tree disappears releaseall end @@ -87,8 +87,8 @@ S_UseRockSmash:: @ 81B0F01 end DoRockSmashMovement: @ 81B0F0C - move LAST_TALKED, RockSmashMovement - waitmove 0 + applymovement LAST_TALKED, RockSmashMovement + waitmovement 0 disappear LAST_TALKED specialvar RESULT, sub_810F5BC compare_var_to_imm RESULT, 1 diff --git a/data/event_scripts.s b/data/event_scripts.s index bd14ae5d3..f31a00e2a 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -933,8 +933,8 @@ gUnknown_0819F80B:: @ 819F80B gUnknown_0819F818:: @ 819F818 lock faceplayer - move LAST_TALKED, Movement_19F8F0 - waitmove 0 + applymovement LAST_TALKED, Movement_19F8F0 + waitmovement 0 specialvar RESULT, ScrSpecial_HasTrainerBeenFought compare_var_to_imm RESULT, 0 goto_if 5, EventScript_19F83F @@ -970,8 +970,8 @@ EventScript_19F877: endtrainerbattle gUnknown_0819F878:: @ 819F878 - move LAST_TALKED, Movement_19F8F0 - waitmove 0 + applymovement LAST_TALKED, Movement_19F8F0 + waitmovement 0 special PlayTrainerEncounterMusic reptrainerbattle endtrainerbattle @@ -1022,8 +1022,8 @@ EventScript_19F8DE: end EventScript_19F8E5: - move LAST_TALKED, Movement_19F8F0 - waitmove 0 + applymovement LAST_TALKED, Movement_19F8F0 + waitmovement 0 return Movement_19F8F0:: @@ -1443,12 +1443,12 @@ do_heal_party:: @ 819FD7C inccounter GAME_STAT_USED_POKECENTER message gText_NurseJoy_OkayIllTakeYourPokemon waittext - move 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A083F - waitmove 0 + applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A083F + waitmovement 0 doanimation 25 checkanimation 25 - move 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A0845 - waitmove 0 + applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A0845 + waitmovement 0 special ScrSpecial_HealPlayerParty checkflag 273 goto_if 0, OldaleTown_PokemonCenter_1F_EventScript_19FDCE @@ -1458,8 +1458,8 @@ do_heal_party:: @ 819FD7C OldaleTown_PokemonCenter_1F_EventScript_19FDB0:: @ 819FDB0 message gText_NurseJoy_ThankYouForWaiting waittext - move 0x800b, OldaleTown_PokemonCenter_1F_Movement_19FDF4 - waitmove 0 + applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_19FDF4 + waitmovement 0 message gText_NurseJoy_WeHopeToSeeYouAgain waittext return @@ -2227,8 +2227,8 @@ BattleTower_Outside_EventScript_1A040E:: @ 81A040E LilycoveCity_Harbor_EventScript_1A040E:: @ 81A040E SlateportCity_Harbor_EventScript_1A040E:: @ 81A040E delay 60 - move 0x8004, SlateportCity_Harbor_Movement_1A041C - waitmove 0 + applymovement 0x8004, SlateportCity_Harbor_Movement_1A041C + waitmovement 0 return SlateportCity_Harbor_Movement_1A041C:: @ 81A041C @@ -2264,12 +2264,12 @@ RusturfTunnel_EventScript_1A0442:: @ 81A0442 EventScript_1A0457: @ unreferenced? delay 30 - move 255, SlateportCity_OceanicMuseum_2F_Movement_1A0841 - waitmove 0 + applymovement 255, SlateportCity_OceanicMuseum_2F_Movement_1A0841 + waitmovement 0 spritevisible 255, 0, 0 delay 30 - move 255, Movement_1A047A - waitmove 0 + applymovement 255, Movement_1A047A + waitmovement 0 delay 30 return @@ -2440,10 +2440,10 @@ Route119_EventScript_1A05AE:: @ 81A05AE Route119_EventScript_1A05C3:: @ 81A05C3 msgbox Route119_Text_171BF6, 4 closebutton - move LAST_TALKED, Route119_Movement_1A0839 - waitmove 0 - move LAST_TALKED, Route119_Movement_1A0662 - waitmove 0 + applymovement LAST_TALKED, Route119_Movement_1A0839 + waitmovement 0 + applymovement LAST_TALKED, Route119_Movement_1A0662 + waitmovement 0 waitse pokecry SPECIES_KECLEON, 2 delay 40 @@ -2548,8 +2548,8 @@ EverGrandeCity_DrakesRoom_EventScript_1A0693:: @ 81A0693 EverGrandeCity_GlaciasRoom_EventScript_1A0693:: @ 81A0693 EverGrandeCity_PhoebesRoom_EventScript_1A0693:: @ 81A0693 EverGrandeCity_SidneysRoom_EventScript_1A0693:: @ 81A0693 - move 255, EverGrandeCity_SidneysRoom_Movement_1A0853 - waitmove 0 + applymovement 255, EverGrandeCity_SidneysRoom_Movement_1A0853 + waitmovement 0 playse 8 setmaptile 6, 1, 836, 0 setmaptile 6, 2, 837, 0 @@ -2570,8 +2570,8 @@ EverGrandeCity_DrakesRoom_EventScript_1A0710:: @ 81A0710 EverGrandeCity_GlaciasRoom_EventScript_1A0710:: @ 81A0710 EverGrandeCity_PhoebesRoom_EventScript_1A0710:: @ 81A0710 EverGrandeCity_SidneysRoom_EventScript_1A0710:: @ 81A0710 - move 255, EverGrandeCity_SidneysRoom_Movement_1A0847 - waitmove 0 + applymovement 255, EverGrandeCity_SidneysRoom_Movement_1A0847 + waitmovement 0 playse 52 setmaptile 5, 12, 518, 1 setmaptile 6, 12, 518, 1 @@ -3724,8 +3724,8 @@ EventScript_1A2DB8: end SecretBase_RedCave1_EventScript_1A2DDE:: @ 81A2DDE - move 255, SecretBase_RedCave1_Movement_1A2E11 - waitmove 0 + applymovement 255, SecretBase_RedCave1_Movement_1A2E11 + waitmovement 0 setvar 0x4097, 1 msgbox SecretBase_RedCave1_Text_198F89, 5 compare_var_to_imm RESULT, 1 @@ -4871,8 +4871,8 @@ SkyPillar_4F_MapScript1_1C6BBF:: @ 81C6BBF S_FallDownHole:: @ 81C6BC5 lockall delay 20 - move 255, GraniteCave_B1F_Movement_1C6BF7 - waitmove 0 + applymovement 255, GraniteCave_B1F_Movement_1C6BF7 + waitmovement 0 playse 43 delay 60 warphole UNDEFINED @@ -4882,8 +4882,8 @@ S_FallDownHole:: @ 81C6BC5 gUnknown_081C6BDE:: @ 81C6BDE lockall delay 20 - move 255, GraniteCave_B1F_Movement_1C6BF7 - waitmove 0 + applymovement 255, GraniteCave_B1F_Movement_1C6BF7 + waitmovement 0 playse 43 delay 60 special sp13F_fall_to_last_warp diff --git a/data/field_move_scripts.inc b/data/field_move_scripts.inc index ad87919b5..ac70163aa 100644 --- a/data/field_move_scripts.inc +++ b/data/field_move_scripts.inc @@ -26,8 +26,8 @@ S_UseCut:: @ 81B0E16 end DoTreeCutMovement: @ 81B0E21 - move LAST_TALKED, TreeCutMovement @ tree cut animation - waitmove 0 + applymovement LAST_TALKED, TreeCutMovement @ tree cut animation + waitmovement 0 disappear LAST_TALKED @ tree disappears releaseall end @@ -84,8 +84,8 @@ S_UseRockSmash:: @ 81B0F01 end DoRockSmashMovement: @ 81B0F0C - move LAST_TALKED, RockSmashMovement - waitmove 0 + applymovement LAST_TALKED, RockSmashMovement + waitmovement 0 disappear LAST_TALKED specialvar RESULT, sub_810F5BC compare_var_to_imm RESULT, 1 diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index 937ede6cf..605846334 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -88,12 +88,12 @@ VerdanturfTown_PokemonCenter_2F_MapScript2_1A3D88:: @ 81A3D88 OldaleTown_PokemonCenter_2F_EventScript_1A3DB2:: @ 81A3DB2 special CloseLink setvar 0x4087, 0 - move 255, OldaleTown_PokemonCenter_2F_Movement_1A4358 - waitmove 0 + applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A4358 + waitmovement 0 compare_var_to_imm 0x8007, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3DD9 - move 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4354 - waitmove 0 + applymovement 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4354 + waitmovement 0 OldaleTown_PokemonCenter_2F_EventScript_1A3DD9:: @ 81A3DD9 return @@ -103,17 +103,17 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3DDA:: @ 81A3DDA setvar 0x4087, 0 compare_var_to_imm 0x8007, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3E0C - move 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4356 - waitmove 0 - move 255, OldaleTown_PokemonCenter_2F_Movement_1A4358 - waitmove 0 - move 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4354 - waitmove 0 + applymovement 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4356 + waitmovement 0 + applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A4358 + waitmovement 0 + applymovement 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4354 + waitmovement 0 return OldaleTown_PokemonCenter_2F_EventScript_1A3E0C:: @ 81A3E0C - move 255, OldaleTown_PokemonCenter_2F_Movement_1A4358 - waitmove 0 + applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A4358 + waitmovement 0 return OldaleTown_PokemonCenter_2F_EventScript_1A3E17:: @ 81A3E17 @@ -130,19 +130,19 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3E30:: @ 81A3E30 setvar 0x4087, 0 compare_var_to_imm 0x8007, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3E0C - move 255, OldaleTown_PokemonCenter_2F_Movement_1A4361 - waitmove 0 - move 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4356 - waitmove 0 + applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A4361 + waitmovement 0 + applymovement 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4356 + waitmovement 0 message OldaleTown_PokemonCenter_2F_Text_1A4E50 waittext playse 21 message OldaleTown_PokemonCenter_2F_Text_1A4E79 waittext - move 255, OldaleTown_PokemonCenter_2F_Movement_1A4358 - waitmove 0 - move 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4354 - waitmove 0 + applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A4358 + waitmovement 0 + applymovement 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4354 + waitmovement 0 return OldaleTown_PokemonCenter_2F_EventScript_1A3E7B:: @ 81A3E7B @@ -224,15 +224,15 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3F5E:: @ 81A3F5E setmaptile 5, 3, 514, 0 special DrawWholeMapView delay 60 - move LAST_TALKED, OldaleTown_PokemonCenter_2F_Movement_1A4356 - waitmove 0 + applymovement LAST_TALKED, OldaleTown_PokemonCenter_2F_Movement_1A4356 + waitmovement 0 closebutton - move 255, OldaleTown_PokemonCenter_2F_Movement_1A435B - waitmove 0 + applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435B + waitmovement 0 setdooropened 5, 1 doorchange - move 255, OldaleTown_PokemonCenter_2F_Movement_1A435F - waitmove 0 + applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435F + waitmovement 0 spriteinvisible 255, 0, 0 setdoorclosed 5, 1 doorchange @@ -389,15 +389,15 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4166:: @ 81A4166 setmaptile 8, 3, 514, 0 special DrawWholeMapView delay 60 - move LAST_TALKED, OldaleTown_PokemonCenter_2F_Movement_1A4356 - waitmove 0 + applymovement LAST_TALKED, OldaleTown_PokemonCenter_2F_Movement_1A4356 + waitmovement 0 closebutton - move 255, OldaleTown_PokemonCenter_2F_Movement_1A435B - waitmove 0 + applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435B + waitmovement 0 setdooropened 8, 1 doorchange - move 255, OldaleTown_PokemonCenter_2F_Movement_1A435F - waitmove 0 + applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435F + waitmovement 0 spriteinvisible 255, 0, 0 setdoorclosed 8, 1 doorchange @@ -487,15 +487,15 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4294:: @ 81A4294 setmaptile 11, 3, 514, 0 special DrawWholeMapView delay 60 - move LAST_TALKED, OldaleTown_PokemonCenter_2F_Movement_1A4356 - waitmove 0 + applymovement LAST_TALKED, OldaleTown_PokemonCenter_2F_Movement_1A4356 + waitmovement 0 closebutton - move 255, OldaleTown_PokemonCenter_2F_Movement_1A435B - waitmove 0 + applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435B + waitmovement 0 setdooropened 11, 1 doorchange - move 255, OldaleTown_PokemonCenter_2F_Movement_1A435F - waitmove 0 + applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435F + waitmovement 0 spriteinvisible 255, 0, 0 setdoorclosed 11, 1 doorchange diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index 3588aff89..836fa10dd 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -188,10 +188,10 @@ FallarborTown_ContestLobby_EventScript_1A513D:: @ 81A513D LinkContestRoom1_EventScript_1A514D:: @ 81A514D setvar 0x8006, 0 lockall - move 14, LinkContestRoom1_Movement_1A5DBF - waitmove 0 - move 1, LinkContestRoom1_Movement_1A5D85 - waitmove 0 + applymovement 14, LinkContestRoom1_Movement_1A5DBF + waitmovement 0 + applymovement 1, LinkContestRoom1_Movement_1A5D85 + waitmovement 0 releaseall call LinkContestRoom1_EventScript_1A51A0 call LinkContestRoom1_EventScript_1A51EA @@ -264,8 +264,8 @@ LinkContestRoom1_EventScript_1A5245:: @ 81A5245 bufferstd 2, 0x8009 call LinkContestRoom1_EventScript_1A525F lockall - move 1, LinkContestRoom1_Movement_1A5D87 - waitmove 0 + applymovement 1, LinkContestRoom1_Movement_1A5D87 + waitmovement 0 releaseall return @@ -306,32 +306,32 @@ LinkContestRoom1_EventScript_1A52AE:: @ 81A52AE LinkContestRoom1_EventScript_1A52DB:: @ 81A52DB lockall - move 3, LinkContestRoom1_Movement_1A5DCE - waitmove 0 + applymovement 3, LinkContestRoom1_Movement_1A5DCE + waitmovement 0 releaseall setvar 0x800b, 3 return LinkContestRoom1_EventScript_1A52ED:: @ 81A52ED lockall - move 4, LinkContestRoom1_Movement_1A5DDA - waitmove 0 + applymovement 4, LinkContestRoom1_Movement_1A5DDA + waitmovement 0 releaseall setvar 0x800b, 4 return LinkContestRoom1_EventScript_1A52FF:: @ 81A52FF lockall - move 5, LinkContestRoom1_Movement_1A5DE2 - waitmove 0 + applymovement 5, LinkContestRoom1_Movement_1A5DE2 + waitmovement 0 releaseall setvar 0x800b, 5 return LinkContestRoom1_EventScript_1A5311:: @ 81A5311 lockall - move 14, LinkContestRoom1_Movement_1A5DEA - waitmove 0 + applymovement 14, LinkContestRoom1_Movement_1A5DEA + waitmovement 0 releaseall setvar 0x800b, 14 return @@ -341,14 +341,14 @@ LinkContestRoom1_EventScript_1A5323:: @ 81A5323 addvar 0x8006, 1 buffernum 1, 0x8006 lockall - move 0x800b, LinkContestRoom1_Movement_1A5D9C - waitmove 0 + applymovement 0x800b, LinkContestRoom1_Movement_1A5D9C + waitmovement 0 releaseall reappear 13 playse 10 lockall - move 0x800b, LinkContestRoom1_Movement_1A5D9C - waitmove 0 + applymovement 0x800b, LinkContestRoom1_Movement_1A5D9C + waitmovement 0 releaseall addvar 0x8006, -1 playse 15 @@ -374,14 +374,14 @@ LinkContestRoom1_EventScript_1A5377:: @ 81A5377 playse 223 waittext call LinkContestRoom1_EventScript_1A5A90 - move 1, LinkContestRoom1_Movement_1A5D9F - waitmove 0 - move 2, LinkContestRoom1_Movement_1A5DA1 - waitmove 0 + applymovement 1, LinkContestRoom1_Movement_1A5D9F + waitmovement 0 + applymovement 2, LinkContestRoom1_Movement_1A5DA1 + waitmovement 0 delay 20 - move 1, LinkContestRoom1_Movement_1A5D8F - move 2, LinkContestRoom1_Movement_1A5D8F - waitmove 0 + applymovement 1, LinkContestRoom1_Movement_1A5D8F + applymovement 2, LinkContestRoom1_Movement_1A5D8F + waitmovement 0 return LinkContestRoom1_EventScript_1A53B3:: @ 81A53B3 @@ -406,26 +406,26 @@ LinkContestRoom1_EventScript_1A53DF:: @ 81A53DF return LinkContestRoom1_EventScript_1A53E5:: @ 81A53E5 - move 1, LinkContestRoom1_Movement_1A5DAF - waitmove 0 + applymovement 1, LinkContestRoom1_Movement_1A5DAF + waitmovement 0 playse 223 call LinkContestRoom1_EventScript_1A5AE4 - move 9, LinkContestRoom1_Movement_1A5DB7 - move 12, LinkContestRoom1_Movement_1A5DBB - move 7, LinkContestRoom1_Movement_1A5DB7 - waitmove 0 - move 1, LinkContestRoom1_Movement_1A5DB7 - waitmove 0 - move 10, LinkContestRoom1_Movement_1A5DAF - move 11, LinkContestRoom1_Movement_1A5DBB - move 6, LinkContestRoom1_Movement_1A5DB3 - move 8, LinkContestRoom1_Movement_1A5DAF - waitmove 0 - move 1, LinkContestRoom1_Movement_1A5DC1 - waitmove 0 - move 1, LinkContestRoom1_Movement_1A5DCA - move 2, LinkContestRoom1_Movement_1A5DC5 - waitmove 0 + applymovement 9, LinkContestRoom1_Movement_1A5DB7 + applymovement 12, LinkContestRoom1_Movement_1A5DBB + applymovement 7, LinkContestRoom1_Movement_1A5DB7 + waitmovement 0 + applymovement 1, LinkContestRoom1_Movement_1A5DB7 + waitmovement 0 + applymovement 10, LinkContestRoom1_Movement_1A5DAF + applymovement 11, LinkContestRoom1_Movement_1A5DBB + applymovement 6, LinkContestRoom1_Movement_1A5DB3 + applymovement 8, LinkContestRoom1_Movement_1A5DAF + waitmovement 0 + applymovement 1, LinkContestRoom1_Movement_1A5DC1 + waitmovement 0 + applymovement 1, LinkContestRoom1_Movement_1A5DCA + applymovement 2, LinkContestRoom1_Movement_1A5DC5 + waitmovement 0 releaseall return @@ -482,7 +482,7 @@ LinkContestRoom1_EventScript_1A54EB:: @ 81A54EB call_if 1, LinkContestRoom1_EventScript_1A585C compare_var_to_imm 0x4000, 0 goto_if 2, LinkContestRoom1_EventScript_1A54EB - waitmove 0 + waitmovement 0 return LinkContestRoom1_EventScript_1A555A:: @ 81A555A @@ -620,7 +620,7 @@ LinkContestRoom1_EventScript_1A575A:: @ 81A575A LinkContestRoom1_EventScript_1A5760:: @ 81A5760 compare_var_to_imm 0x4001, 1 goto_if_eq LinkContestRoom1_EventScript_1A5783 - move 6, LinkContestRoom1_Movement_1A5D8D + applymovement 6, LinkContestRoom1_Movement_1A5D8D playse 21 delay 14 setvar 0x4001, 1 @@ -633,7 +633,7 @@ LinkContestRoom1_EventScript_1A5783:: @ 81A5783 LinkContestRoom1_EventScript_1A5784:: @ 81A5784 compare_var_to_imm 0x4002, 1 goto_if_eq LinkContestRoom1_EventScript_1A57A7 - move 12, LinkContestRoom1_Movement_1A5D8D + applymovement 12, LinkContestRoom1_Movement_1A5D8D playse 21 delay 14 setvar 0x4002, 1 @@ -646,7 +646,7 @@ LinkContestRoom1_EventScript_1A57A7:: @ 81A57A7 LinkContestRoom1_EventScript_1A57A8:: @ 81A57A8 compare_var_to_imm 0x4003, 1 goto_if_eq LinkContestRoom1_EventScript_1A57CB - move 7, LinkContestRoom1_Movement_1A5D8D + applymovement 7, LinkContestRoom1_Movement_1A5D8D playse 21 delay 14 setvar 0x4003, 1 @@ -659,7 +659,7 @@ LinkContestRoom1_EventScript_1A57CB:: @ 81A57CB LinkContestRoom1_EventScript_1A57CC:: @ 81A57CC compare_var_to_imm 0x4004, 1 goto_if_eq LinkContestRoom1_EventScript_1A57EF - move 8, LinkContestRoom1_Movement_1A5D8D + applymovement 8, LinkContestRoom1_Movement_1A5D8D playse 21 delay 14 setvar 0x4004, 1 @@ -672,7 +672,7 @@ LinkContestRoom1_EventScript_1A57EF:: @ 81A57EF LinkContestRoom1_EventScript_1A57F0:: @ 81A57F0 compare_var_to_imm 0x4005, 1 goto_if_eq LinkContestRoom1_EventScript_1A5813 - move 9, LinkContestRoom1_Movement_1A5D8D + applymovement 9, LinkContestRoom1_Movement_1A5D8D playse 21 delay 14 setvar 0x4005, 1 @@ -685,7 +685,7 @@ LinkContestRoom1_EventScript_1A5813:: @ 81A5813 LinkContestRoom1_EventScript_1A5814:: @ 81A5814 compare_var_to_imm 0x4006, 1 goto_if_eq LinkContestRoom1_EventScript_1A5837 - move 10, LinkContestRoom1_Movement_1A5D8D + applymovement 10, LinkContestRoom1_Movement_1A5D8D playse 21 delay 14 setvar 0x4006, 1 @@ -698,7 +698,7 @@ LinkContestRoom1_EventScript_1A5837:: @ 81A5837 LinkContestRoom1_EventScript_1A5838:: @ 81A5838 compare_var_to_imm 0x4007, 1 goto_if_eq LinkContestRoom1_EventScript_1A585B - move 11, LinkContestRoom1_Movement_1A5D8D + applymovement 11, LinkContestRoom1_Movement_1A5D8D playse 21 delay 14 setvar 0x4007, 1 @@ -711,7 +711,7 @@ LinkContestRoom1_EventScript_1A585B:: @ 81A585B LinkContestRoom1_EventScript_1A585C:: @ 81A585C compare_var_to_imm 0x4008, 1 goto_if_eq LinkContestRoom1_EventScript_1A587F - move 15, LinkContestRoom1_Movement_1A5D8D + applymovement 15, LinkContestRoom1_Movement_1A5D8D playse 21 delay 14 setvar 0x4008, 1 @@ -735,49 +735,49 @@ LinkContestRoom1_EventScript_1A5880:: @ 81A5880 LinkContestRoom1_EventScript_1A58BA:: @ 81A58BA lockall - move 0x800b, LinkContestRoom1_Movement_1A5DD4 - waitmove 0 + applymovement 0x800b, LinkContestRoom1_Movement_1A5DD4 + waitmovement 0 releaseall return LinkContestRoom1_EventScript_1A58C7:: @ 81A58C7 lockall - move 0x800b, LinkContestRoom1_Movement_1A5DDE - waitmove 0 + applymovement 0x800b, LinkContestRoom1_Movement_1A5DDE + waitmovement 0 releaseall return LinkContestRoom1_EventScript_1A58D4:: @ 81A58D4 lockall - move 0x800b, LinkContestRoom1_Movement_1A5DE6 - waitmove 0 + applymovement 0x800b, LinkContestRoom1_Movement_1A5DE6 + waitmovement 0 releaseall return LinkContestRoom1_EventScript_1A58E1:: @ 81A58E1 lockall - move 0x800b, LinkContestRoom1_Movement_1A5DF0 - waitmove 0 + applymovement 0x800b, LinkContestRoom1_Movement_1A5DF0 + waitmovement 0 releaseall return LinkContestRoom1_EventScript_1A58EE:: @ 81A58EE lockall - move 1, LinkContestRoom1_Movement_1A5DA3 - waitmove 0 + applymovement 1, LinkContestRoom1_Movement_1A5DA3 + waitmovement 0 call LinkContestRoom1_EventScript_1A5930 waittext - move 1, LinkContestRoom1_Movement_1A5D91 - move 2, LinkContestRoom1_Movement_1A5D95 - waitmove 0 + applymovement 1, LinkContestRoom1_Movement_1A5D91 + applymovement 2, LinkContestRoom1_Movement_1A5D95 + waitmovement 0 releaseall setvar 0x4009, 1 startcontest setvar 0x4009, 0 lockall - move 1, LinkContestRoom1_Movement_1A5D95 - move 2, LinkContestRoom1_Movement_1A5D91 - waitmove 0 + applymovement 1, LinkContestRoom1_Movement_1A5D95 + applymovement 2, LinkContestRoom1_Movement_1A5D91 + waitmovement 0 releaseall return @@ -794,12 +794,12 @@ LinkContestRoom1_EventScript_1A5944:: @ 81A5944 LinkContestRoom1_EventScript_1A594A:: @ 81A594A call LinkContestRoom1_EventScript_1A5984 call LinkContestRoom1_EventScript_1A59A2 - move 1, LinkContestRoom1_Movement_1A5D8B - waitmove 0 + applymovement 1, LinkContestRoom1_Movement_1A5D8B + waitmovement 0 call LinkContestRoom1_EventScript_1A59C0 call LinkContestRoom1_EventScript_1A59DE - move 1, LinkContestRoom1_Movement_1A5D8F - waitmove 0 + applymovement 1, LinkContestRoom1_Movement_1A5D8F + waitmovement 0 closebutton releaseall setvar 0x4009, 1 @@ -888,8 +888,8 @@ LinkContestRoom1_EventScript_1A5A49:: @ 81A5A49 buffernum 1, 0x8005 addvar 0x8005, -1 call LinkContestRoom1_EventScript_1A5A75 - move 0x4003, LinkContestRoom1_Movement_1A5D99 - waitmove 0 + applymovement 0x4003, LinkContestRoom1_Movement_1A5D99 + waitmovement 0 playse 223 setvar 0x4001, 0 return @@ -910,14 +910,14 @@ LinkContestRoom1_EventScript_1A5A90:: @ 81A5A90 lockall compare_var_to_imm 0x4088, 1 call_if 2, LinkContestRoom1_EventScript_1A5AE4 - move 9, LinkContestRoom1_Movement_1A5DB7 - move 12, LinkContestRoom1_Movement_1A5DBB - move 7, LinkContestRoom1_Movement_1A5DB7 + applymovement 9, LinkContestRoom1_Movement_1A5DB7 + applymovement 12, LinkContestRoom1_Movement_1A5DBB + applymovement 7, LinkContestRoom1_Movement_1A5DB7 delay 30 - move 10, LinkContestRoom1_Movement_1A5DAF - move 11, LinkContestRoom1_Movement_1A5DBB - move 6, LinkContestRoom1_Movement_1A5DB3 - move 8, LinkContestRoom1_Movement_1A5DAF + applymovement 10, LinkContestRoom1_Movement_1A5DAF + applymovement 11, LinkContestRoom1_Movement_1A5DBB + applymovement 6, LinkContestRoom1_Movement_1A5DB3 + applymovement 8, LinkContestRoom1_Movement_1A5DAF compare_var_to_imm 0x4001, 4 goto_if 5, LinkContestRoom1_EventScript_1A5A90 delay 30 @@ -1083,29 +1083,29 @@ LinkContestRoom1_EventScript_1A5C7F:: @ 81A5C7F LinkContestRoom1_EventScript_1A5CB1:: @ 81A5CB1 lockall - move 0x4003, LinkContestRoom1_Movement_1A5DF6 - waitmove 0 + applymovement 0x4003, LinkContestRoom1_Movement_1A5DF6 + waitmovement 0 releaseall return LinkContestRoom1_EventScript_1A5CBE:: @ 81A5CBE lockall - move 0x4003, LinkContestRoom1_Movement_1A5DFA - waitmove 0 + applymovement 0x4003, LinkContestRoom1_Movement_1A5DFA + waitmovement 0 releaseall return LinkContestRoom1_EventScript_1A5CCB:: @ 81A5CCB lockall - move 0x4003, LinkContestRoom1_Movement_1A5DA5 - waitmove 0 + applymovement 0x4003, LinkContestRoom1_Movement_1A5DA5 + waitmovement 0 releaseall return LinkContestRoom1_EventScript_1A5CD8:: @ 81A5CD8 lockall - move 0x4003, LinkContestRoom1_Movement_1A5DA9 - waitmove 0 + applymovement 0x4003, LinkContestRoom1_Movement_1A5DA9 + waitmovement 0 releaseall return diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc index b2d83196e..ed515d15b 100644 --- a/data/scripts/day_care.inc +++ b/data/scripts/day_care.inc @@ -204,8 +204,8 @@ Route117_PokemonDayCare_EventScript_1B24C4:: @ 81B24C4 end Route117_PokemonDayCare_EventScript_1B24DE:: @ 81B24DE - move 1, Route117_PokemonDayCare_Movement_1B2543 - waitmove 0 + applymovement 1, Route117_PokemonDayCare_Movement_1B2543 + waitmovement 0 specialvar RESULT, sub_8041648 special sub_80B7D0C playse 95 diff --git a/data/scripts/gabby_and_ty.inc b/data/scripts/gabby_and_ty.inc index 69580a835..b8c284fec 100644 --- a/data/scripts/gabby_and_ty.inc +++ b/data/scripts/gabby_and_ty.inc @@ -215,20 +215,20 @@ Route111_EventScript_1AE5A2:: @ 81AE5A2 end Route111_EventScript_1AE5E0:: @ 81AE5E0 - move 0x8004, Route111_Movement_1AE699 - waitmove 0 + applymovement 0x8004, Route111_Movement_1AE699 + waitmovement 0 return Route111_EventScript_1AE5EB:: @ 81AE5EB - move 0x8004, Route111_Movement_1AE69B - move 0x8005, Route111_Movement_1A0841 - waitmove 0 + applymovement 0x8004, Route111_Movement_1AE69B + applymovement 0x8005, Route111_Movement_1A0841 + waitmovement 0 return Route111_EventScript_1AE5FD:: @ 81AE5FD - move 0x8004, Route111_Movement_1AE69D - move 0x8005, Route111_Movement_1A083F - waitmove 0 + applymovement 0x8004, Route111_Movement_1AE69D + applymovement 0x8005, Route111_Movement_1A083F + waitmovement 0 return Route111_EventScript_1AE60F:: @ 81AE60F diff --git a/data/scripts/magma_chimney.inc b/data/scripts/magma_chimney.inc index 2b3bd61df..f373a76a6 100644 --- a/data/scripts/magma_chimney.inc +++ b/data/scripts/magma_chimney.inc @@ -6,8 +6,8 @@ MtChimney_EventScript_1B2C95:: @ 81B2C95 checkflag 219 call_if 1, MtChimney_EventScript_1B2CC2 closebutton - move 1, MtChimney_Movement_1A083D - waitmove 0 + applymovement 1, MtChimney_Movement_1A083D + waitmovement 0 setflag 219 release end @@ -35,13 +35,13 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB .else msgbox MtChimney_Text_1B37BB, 4 .endif - move 2, MtChimney_Movement_1A0839 - waitmove 0 + applymovement 2, MtChimney_Movement_1A0839 + waitmovement 0 playse 21 - move 2, MtChimney_Movement_1A0833 - waitmove 0 - move 2, MtChimney_Movement_1A0835 - waitmove 0 + applymovement 2, MtChimney_Movement_1A0833 + waitmovement 0 + applymovement 2, MtChimney_Movement_1A0835 + waitmovement 0 .ifdef SAPPHIRE msgbox MtChimney_Text_1B2ED9, 4 .else @@ -71,8 +71,8 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB call_if 1, MtChimney_EventScript_1B2D7D compare_var_to_imm FACING, 2 call_if 1, MtChimney_EventScript_1B2D88 - move 255, MtChimney_Movement_1A083F - waitmove 0 + applymovement 255, MtChimney_Movement_1A083F + waitmovement 0 .ifdef SAPPHIRE msgbox MtChimney_Text_1B3608, 4 .else @@ -92,21 +92,21 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB end MtChimney_EventScript_1B2D7D:: @ 81B2D7D - move 1, MtChimney_Movement_15D025 - waitmove 0 + applymovement 1, MtChimney_Movement_15D025 + waitmovement 0 return MtChimney_EventScript_1B2D88:: @ 81B2D88 - move 1, MtChimney_Movement_15D036 - waitmove 0 + applymovement 1, MtChimney_Movement_15D036 + waitmovement 0 return MtChimney_EventScript_1B2D93:: @ 81B2D93 - move 1, MtChimney_Movement_15D02D - waitmove 0 + applymovement 1, MtChimney_Movement_15D02D + waitmovement 0 return MtChimney_EventScript_1B2D9E:: @ 81B2D9E - move 1, MtChimney_Movement_15D03E - waitmove 0 + applymovement 1, MtChimney_Movement_15D03E + waitmovement 0 return diff --git a/data/scripts/maps/AquaHideout_B2F.inc b/data/scripts/maps/AquaHideout_B2F.inc index 9ed2d102c..b08a68d1b 100644 --- a/data/scripts/maps/AquaHideout_B2F.inc +++ b/data/scripts/maps/AquaHideout_B2F.inc @@ -11,14 +11,14 @@ MagmaHideout_B2F_EventScript_15D8BD:: @ 815D8BD lockall setvar 0x8008, 1 playse 21 - move 0x8008, AquaHideout_B2F_Movement_1A0833 - waitmove 0 + applymovement 0x8008, AquaHideout_B2F_Movement_1A0833 + waitmovement 0 .ifdef SAPPHIRE - move 0x8008, AquaHideout_B2F_Movement_1A0839 + applymovement 0x8008, AquaHideout_B2F_Movement_1A0839 .else - move 0x8008, AquaHideout_B2F_Movement_1A0841 + applymovement 0x8008, AquaHideout_B2F_Movement_1A0841 .endif - waitmove 0 + waitmovement 0 setvar 0x4001, 1 releaseall end @@ -38,31 +38,31 @@ AquaHideout_B2F_EventScript_15D8FD:: @ 815D8FD setvar 0x8009, 3 .endif .ifdef SAPPHIRE - move 0x8008, Movement_1A083F + applymovement 0x8008, Movement_1A083F .else - move 0x8008, AquaHideout_B2F_Movement_1A0843 + applymovement 0x8008, AquaHideout_B2F_Movement_1A0843 .endif - waitmove 0 + waitmovement 0 delay 20 - move 0x8008, AquaHideout_B2F_Movement_1A0839 - waitmove 0 + applymovement 0x8008, AquaHideout_B2F_Movement_1A0839 + waitmovement 0 msgbox AquaHideout_B2F_Text_197162, 4 closebutton .ifdef SAPPHIRE - move 0x8008, Movement_1A083F + applymovement 0x8008, Movement_1A083F .else - move 0x8008, AquaHideout_B2F_Movement_1A0843 + applymovement 0x8008, AquaHideout_B2F_Movement_1A0843 .endif .ifdef SAPPHIRE - move 0x8009, AquaHideout_B2F_Movement_15D958 + applymovement 0x8009, AquaHideout_B2F_Movement_15D958 .else - move 0x8009, AquaHideout_B2F_Movement_15D95D + applymovement 0x8009, AquaHideout_B2F_Movement_15D95D .endif - waitmove 0 + waitmovement 0 disappear 0x8009 delay 20 - move 0x8008, AquaHideout_B2F_Movement_1A0839 - waitmove 0 + applymovement 0x8008, AquaHideout_B2F_Movement_1A0839 + waitmovement 0 msgbox AquaHideout_B2F_Text_1971AE, 4 setflag 112 setflag 852 diff --git a/data/scripts/maps/BattleTower_BattleRoom.inc b/data/scripts/maps/BattleTower_BattleRoom.inc index 60685adad..bbc3360a8 100644 --- a/data/scripts/maps/BattleTower_BattleRoom.inc +++ b/data/scripts/maps/BattleTower_BattleRoom.inc @@ -8,14 +8,14 @@ BattleTower_BattleRoom_MapScript2_1608E1:: @ 81608E1 BattleTower_BattleRoom_EventScript_1608EB:: @ 81608EB setvar 0x4000, 1 - move 255, BattleTower_BattleRoom_Movement_160AB7 - waitmove 0 + applymovement 255, BattleTower_BattleRoom_Movement_160AB7 + waitmovement 0 BattleTower_BattleRoom_EventScript_1608FA:: @ 81608FA special sub_81347F8 reappear 1 - move 1, BattleTower_BattleRoom_Movement_160AC0 - waitmove 0 + applymovement 1, BattleTower_BattleRoom_Movement_160AC0 + waitmovement 0 special sub_8135474 msgbox 0x20234cc, 4 waittext @@ -43,13 +43,13 @@ BattleTower_BattleRoom_EventScript_160961:: @ 8160961 special sub_8135668 switch RESULT case 8, BattleTower_BattleRoom_EventScript_160A56 - move 1, BattleTower_BattleRoom_Movement_160AC6 - waitmove 0 + applymovement 1, BattleTower_BattleRoom_Movement_160AC6 + waitmovement 0 disappear 1 - move 2, BattleTower_BattleRoom_Movement_160ACB - waitmove 0 - move 255, BattleTower_BattleRoom_Movement_160ABC - waitmove 0 + applymovement 2, BattleTower_BattleRoom_Movement_160ACB + waitmovement 0 + applymovement 255, BattleTower_BattleRoom_Movement_160ABC + waitmovement 0 msgbox BattleTower_BattleRoom_Text_19ACDC, 4 special LoadPlayerParty special SavePlayerParty @@ -81,10 +81,10 @@ BattleTower_BattleRoom_EventScript_160A0E:: @ 8160A0E BattleTower_BattleRoom_EventScript_160A3C:: @ 8160A3C closebutton - move 255, BattleTower_BattleRoom_Movement_160ABE - waitmove 0 - move 2, BattleTower_BattleRoom_Movement_160AD0 - waitmove 0 + applymovement 255, BattleTower_BattleRoom_Movement_160ABE + waitmovement 0 + applymovement 2, BattleTower_BattleRoom_Movement_160AD0 + waitmovement 0 goto BattleTower_BattleRoom_EventScript_1608FA BattleTower_BattleRoom_EventScript_160A56:: @ 8160A56 diff --git a/data/scripts/maps/BattleTower_Corridor.inc b/data/scripts/maps/BattleTower_Corridor.inc index 4b3dae8f8..26570cd66 100644 --- a/data/scripts/maps/BattleTower_Corridor.inc +++ b/data/scripts/maps/BattleTower_Corridor.inc @@ -23,15 +23,15 @@ BattleTower_Corridor_EventScript_16088B:: @ 816088B setvar 0x4000, 1 compare_var_to_imm 0x8006, 1 goto_if_eq BattleTower_Corridor_EventScript_1608B1 - move 1, BattleTower_Corridor_Movement_1608D5 - move 255, BattleTower_Corridor_Movement_1608D4 - waitmove 0 + applymovement 1, BattleTower_Corridor_Movement_1608D5 + applymovement 255, BattleTower_Corridor_Movement_1608D4 + waitmovement 0 goto BattleTower_Corridor_EventScript_1608C2 BattleTower_Corridor_EventScript_1608B1:: @ 81608B1 - move 1, BattleTower_Corridor_Movement_1608D2 - move 255, BattleTower_Corridor_Movement_1608D1 - waitmove 0 + applymovement 1, BattleTower_Corridor_Movement_1608D2 + applymovement 255, BattleTower_Corridor_Movement_1608D1 + waitmovement 0 BattleTower_Corridor_EventScript_1608C2:: @ 81608C2 setvar 0x4000, 0 diff --git a/data/scripts/maps/BattleTower_Elevator.inc b/data/scripts/maps/BattleTower_Elevator.inc index 2c9f12a6e..fe55b50db 100644 --- a/data/scripts/maps/BattleTower_Elevator.inc +++ b/data/scripts/maps/BattleTower_Elevator.inc @@ -9,15 +9,15 @@ BattleTower_Elevator_MapScript2_1607DA:: @ 81607DA BattleTower_Elevator_EventScript_1607E4:: @ 81607E4 setvar 0x4000, 1 - move 1, BattleTower_Elevator_Movement_160835 - move 255, BattleTower_Elevator_Movement_160839 - waitmove 0 + applymovement 1, BattleTower_Elevator_Movement_160835 + applymovement 255, BattleTower_Elevator_Movement_160839 + waitmovement 0 special sub_810EBEC waitstate delay 64 - move 1, BattleTower_Elevator_Movement_16083D - move 255, BattleTower_Elevator_Movement_160841 - waitmove 0 + applymovement 1, BattleTower_Elevator_Movement_16083D + applymovement 255, BattleTower_Elevator_Movement_160841 + waitmovement 0 setvar 0x4000, 0 warp BattleTower_Corridor, 255, 8, 1 waitstate diff --git a/data/scripts/maps/BattleTower_Lobby.inc b/data/scripts/maps/BattleTower_Lobby.inc index c4ffe4c32..bd4f4ecd1 100644 --- a/data/scripts/maps/BattleTower_Lobby.inc +++ b/data/scripts/maps/BattleTower_Lobby.inc @@ -293,14 +293,14 @@ BattleTower_Lobby_EventScript_160662:: @ 8160662 end BattleTower_Lobby_EventScript_160664:: @ 8160664 - move 1, BattleTower_Lobby_Movement_160693 - move 255, BattleTower_Lobby_Movement_160693 - waitmove 0 + applymovement 1, BattleTower_Lobby_Movement_160693 + applymovement 255, BattleTower_Lobby_Movement_160693 + waitmovement 0 setdooropened 6, 1 doorchange - move 1, BattleTower_Lobby_Movement_160697 - move 255, BattleTower_Lobby_Movement_16069A - waitmove 0 + applymovement 1, BattleTower_Lobby_Movement_160697 + applymovement 255, BattleTower_Lobby_Movement_16069A + waitmovement 0 setdoorclosed 6, 1 doorchange return diff --git a/data/scripts/maps/BattleTower_Outside.inc b/data/scripts/maps/BattleTower_Outside.inc index 8ef5dc0ad..2f88db2db 100644 --- a/data/scripts/maps/BattleTower_Outside.inc +++ b/data/scripts/maps/BattleTower_Outside.inc @@ -64,8 +64,8 @@ BattleTower_Outside_EventScript_160226:: @ 8160226 BattleTower_Outside_EventScript_160232:: @ 8160232 closebutton - move LAST_TALKED, BattleTower_Outside_Movement_1A0845 - waitmove 0 + applymovement LAST_TALKED, BattleTower_Outside_Movement_1A0845 + waitmovement 0 delay 30 spriteinvisible 5, 26, 4 setvar 0x8004, 4 diff --git a/data/scripts/maps/CaveOfOrigin_B4F.inc b/data/scripts/maps/CaveOfOrigin_B4F.inc index aad189887..4d27844a7 100644 --- a/data/scripts/maps/CaveOfOrigin_B4F.inc +++ b/data/scripts/maps/CaveOfOrigin_B4F.inc @@ -25,8 +25,8 @@ CaveOfOrigin_B4F_MapScript1_15DDC5:: @ 815DDC5 CaveOfOrigin_B4F_EventScript_15DDD7:: @ 815DDD7 lockall - move 255, CaveOfOrigin_B4F_Movement_1A0841 - waitmove 0 + applymovement 255, CaveOfOrigin_B4F_Movement_1A0841 + waitmovement 0 .ifdef SAPPHIRE msgbox UnknownString_81B4F03, 4 .else @@ -53,8 +53,8 @@ CaveOfOrigin_B4F_EventScript_15DDD7:: @ 815DDD7 waitstate special sub_80818FC waitstate - move 1, CaveOfOrigin_B4F_Movement_15DE7D - waitmove 0 + applymovement 1, CaveOfOrigin_B4F_Movement_15DE7D + waitmovement 0 delay 60 setwildbattle SPECIES_GROUDON_OR_KYOGRE, 45, ITEM_NONE waitse diff --git a/data/scripts/maps/DewfordTown.inc b/data/scripts/maps/DewfordTown.inc index 8e442e46f..f8265d1cf 100644 --- a/data/scripts/maps/DewfordTown.inc +++ b/data/scripts/maps/DewfordTown.inc @@ -120,20 +120,20 @@ DewfordTown_EventScript_14E151:: @ 814E151 call DewfordTown_EventScript_1A010C spritelevelup 2, 0, 11, 0 spritelevelup 255, 0, 11, 0 - move 2, DewfordTown_Movement_14E40E - waitmove 0 + applymovement 2, DewfordTown_Movement_14E40E + waitmovement 0 disappear 2 - move 255, DewfordTown_Movement_14E402 - waitmove 0 + applymovement 255, DewfordTown_Movement_14E402 + waitmovement 0 spriteinvisible 255, 0, 11 call DewfordTown_EventScript_1A02E7 - move 4, DewfordTown_Movement_14E293 - move 255, DewfordTown_Movement_14E293 - waitmove 0 + applymovement 4, DewfordTown_Movement_14E293 + applymovement 255, DewfordTown_Movement_14E293 + waitmovement 0 spritevisible 255, 0, 19 call DewfordTown_EventScript_1A02EF - move 255, DewfordTown_Movement_14E405 - waitmove 0 + applymovement 255, DewfordTown_Movement_14E405 + waitmovement 0 spritevisible 255, 0, 19 clearflag 739 clearflag 881 @@ -152,25 +152,25 @@ DewfordTown_EventScript_14E1D8:: @ 814E1D8 call DewfordTown_EventScript_1A010C spritelevelup 2, 0, 11, 0 spritelevelup 255, 0, 11, 1 - move 2, DewfordTown_Movement_14E40E - waitmove 0 + applymovement 2, DewfordTown_Movement_14E40E + waitmovement 0 disappear 2 - move 255, DewfordTown_Movement_14E402 - waitmove 0 + applymovement 255, DewfordTown_Movement_14E402 + waitmovement 0 spriteinvisible 255, 0, 11 call DewfordTown_EventScript_1A02E7 - move 4, DewfordTown_Movement_14E356 - move 255, DewfordTown_Movement_14E356 - waitmove 0 + applymovement 4, DewfordTown_Movement_14E356 + applymovement 255, DewfordTown_Movement_14E356 + waitmovement 0 call DewfordTown_EventScript_1A02EF spritevisible 255, 0, 24 - move 255, DewfordTown_Movement_14E409 - waitmove 0 + applymovement 255, DewfordTown_Movement_14E409 + waitmovement 0 movespriteperm 2, 21, 26 reappear 2 spritelevelup 2, 0, 24, 0 - move 2, DewfordTown_Movement_14E410 - waitmove 0 + applymovement 2, DewfordTown_Movement_14E410 + waitmovement 0 clearflag 741 reappear 1 clearflag 744 diff --git a/data/scripts/maps/DewfordTown_Hall.inc b/data/scripts/maps/DewfordTown_Hall.inc index 39bcb0236..0b19ef92d 100644 --- a/data/scripts/maps/DewfordTown_Hall.inc +++ b/data/scripts/maps/DewfordTown_Hall.inc @@ -53,8 +53,8 @@ DewfordTown_Hall_EventScript_15330A:: @ 815330A call DewfordTown_Hall_EventScript_1A0102 msgbox DewfordTown_Hall_Text_17570D, 4 closebutton - move 4, DewfordTown_Hall_Movement_1A0841 - waitmove 0 + applymovement 4, DewfordTown_Hall_Movement_1A0841 + waitmovement 0 release end @@ -64,8 +64,8 @@ DewfordTown_Hall_EventScript_153326:: @ 8153326 call DewfordTown_Hall_EventScript_1A0102 msgbox DewfordTown_Hall_Text_17574C, 4 closebutton - move 5, DewfordTown_Hall_Movement_1A0841 - waitmove 0 + applymovement 5, DewfordTown_Hall_Movement_1A0841 + waitmovement 0 release end @@ -189,8 +189,8 @@ DewfordTown_Hall_EventScript_1534FC:: @ 81534FC return DewfordTown_Hall_EventScript_1534FD:: @ 81534FD - move 8, DewfordTown_Hall_Movement_153599 - waitmove 0 + applymovement 8, DewfordTown_Hall_Movement_153599 + waitmovement 0 compare_var_to_imm 0x8008, 0 goto_if_eq DewfordTown_Hall_EventScript_15351E compare_var_to_imm 0x8008, 1 @@ -200,16 +200,16 @@ DewfordTown_Hall_EventScript_1534FD:: @ 81534FD DewfordTown_Hall_EventScript_15351E:: @ 815351E compare_var_to_imm FACING, 4 goto_if_eq DewfordTown_Hall_EventScript_1534FC - move 255, DewfordTown_Hall_Movement_1A0843 - waitmove 0 + applymovement 255, DewfordTown_Hall_Movement_1A0843 + waitmovement 0 return DewfordTown_Hall_EventScript_153534:: @ 8153534 return DewfordTown_Hall_EventScript_153535:: @ 8153535 - move 7, DewfordTown_Hall_Movement_15359B - waitmove 0 + applymovement 7, DewfordTown_Hall_Movement_15359B + waitmovement 0 compare_var_to_imm 0x8008, 0 goto_if_eq DewfordTown_Hall_EventScript_153556 compare_var_to_imm 0x8008, 1 @@ -224,20 +224,20 @@ DewfordTown_Hall_EventScript_153556:: @ 8153556 return DewfordTown_Hall_EventScript_15356D:: @ 815356D - move 255, DewfordTown_Hall_Movement_1A0841 - waitmove 0 + applymovement 255, DewfordTown_Hall_Movement_1A0841 + waitmovement 0 return DewfordTown_Hall_EventScript_153578:: @ 8153578 - move 255, DewfordTown_Hall_Movement_1A0845 - waitmove 0 + applymovement 255, DewfordTown_Hall_Movement_1A0845 + waitmovement 0 return DewfordTown_Hall_EventScript_153583:: @ 8153583 compare_var_to_imm FACING, 3 goto_if_eq DewfordTown_Hall_EventScript_1534FC - move 255, DewfordTown_Hall_Movement_1A083F - waitmove 0 + applymovement 255, DewfordTown_Hall_Movement_1A083F + waitmovement 0 return DewfordTown_Hall_Movement_153599:: @ 8153599 diff --git a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc index 6726686ca..45df01e78 100644 --- a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc +++ b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc @@ -22,11 +22,11 @@ EverGrandeCity_ChampionsRoom_MapScript2_15B7D4:: @ 815B7D4 EverGrandeCity_ChampionsRoom_EventScript_15B7DE:: @ 815B7DE lockall - move 255, EverGrandeCity_ChampionsRoom_Movement_1A084E - waitmove 0 + applymovement 255, EverGrandeCity_ChampionsRoom_Movement_1A084E + waitmovement 0 delay 40 - move 255, EverGrandeCity_ChampionsRoom_Movement_15B802 - waitmove 0 + applymovement 255, EverGrandeCity_ChampionsRoom_Movement_15B802 + waitmovement 0 setvar 0x4001, 1 goto EverGrandeCity_ChampionsRoom_EventScript_15B805 releaseall @@ -78,10 +78,10 @@ EverGrandeCity_ChampionsRoom_EventScript_15B886:: @ 815B886 msgbox EverGrandeCity_ChampionsRoom_Text_191225, 4 delay 40 playse 21 - move 2, EverGrandeCity_ChampionsRoom_Movement_1A0833 - waitmove 0 - move 2, EverGrandeCity_ChampionsRoom_Movement_1A0835 - waitmove 0 + applymovement 2, EverGrandeCity_ChampionsRoom_Movement_1A0833 + waitmovement 0 + applymovement 2, EverGrandeCity_ChampionsRoom_Movement_1A0835 + waitmovement 0 call EverGrandeCity_ChampionsRoom_EventScript_15B9D2 msgbox EverGrandeCity_ChampionsRoom_Text_191268, 4 goto EverGrandeCity_ChampionsRoom_EventScript_15B8F0 @@ -91,10 +91,10 @@ EverGrandeCity_ChampionsRoom_EventScript_15B8BB:: @ 815B8BB msgbox EverGrandeCity_ChampionsRoom_Text_1912B3, 4 delay 40 playse 21 - move 2, EverGrandeCity_ChampionsRoom_Movement_1A0833 - waitmove 0 - move 2, EverGrandeCity_ChampionsRoom_Movement_1A0835 - waitmove 0 + applymovement 2, EverGrandeCity_ChampionsRoom_Movement_1A0833 + waitmovement 0 + applymovement 2, EverGrandeCity_ChampionsRoom_Movement_1A0835 + waitmovement 0 call EverGrandeCity_ChampionsRoom_EventScript_15B9D2 msgbox EverGrandeCity_ChampionsRoom_Text_191305, 4 goto EverGrandeCity_ChampionsRoom_EventScript_15B8F0 @@ -103,29 +103,29 @@ EverGrandeCity_ChampionsRoom_EventScript_15B8BB:: @ 815B8BB EverGrandeCity_ChampionsRoom_EventScript_15B8F0:: @ 815B8F0 closebutton reappear 3 - move 3, EverGrandeCity_ChampionsRoom_Movement_15BA03 - waitmove 0 - move 255, EverGrandeCity_ChampionsRoom_Movement_1A0843 - waitmove 0 + applymovement 3, EverGrandeCity_ChampionsRoom_Movement_15BA03 + waitmovement 0 + applymovement 255, EverGrandeCity_ChampionsRoom_Movement_1A0843 + waitmovement 0 msgbox EverGrandeCity_ChampionsRoom_Text_19134D, 4 call EverGrandeCity_ChampionsRoom_EventScript_1A03B0 msgbox EverGrandeCity_ChampionsRoom_Text_1914C6, 4 - move 1, EverGrandeCity_ChampionsRoom_Movement_1A0841 - waitmove 0 + applymovement 1, EverGrandeCity_ChampionsRoom_Movement_1A0841 + waitmovement 0 delay 20 - move 1, EverGrandeCity_ChampionsRoom_Movement_1A0845 - waitmove 0 + applymovement 1, EverGrandeCity_ChampionsRoom_Movement_1A0845 + waitmovement 0 msgbox EverGrandeCity_ChampionsRoom_Text_191512, 4 closebutton delay 30 - move 1, EverGrandeCity_ChampionsRoom_Movement_15B9FB - move 255, EverGrandeCity_ChampionsRoom_Movement_15B9DD - move 3, EverGrandeCity_ChampionsRoom_Movement_1A0841 - move 2, EverGrandeCity_ChampionsRoom_Movement_15B9F8 - waitmove 0 + applymovement 1, EverGrandeCity_ChampionsRoom_Movement_15B9FB + applymovement 255, EverGrandeCity_ChampionsRoom_Movement_15B9DD + applymovement 3, EverGrandeCity_ChampionsRoom_Movement_1A0841 + applymovement 2, EverGrandeCity_ChampionsRoom_Movement_15B9F8 + waitmovement 0 delay 20 - move 255, EverGrandeCity_ChampionsRoom_Movement_1A0845 - waitmove 0 + applymovement 255, EverGrandeCity_ChampionsRoom_Movement_1A0845 + waitmovement 0 msgbox EverGrandeCity_ChampionsRoom_Text_191546, 4 checkgender compare_var_to_imm RESULT, 0 @@ -133,9 +133,9 @@ EverGrandeCity_ChampionsRoom_EventScript_15B8F0:: @ 815B8F0 compare_var_to_imm RESULT, 1 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B9B4 closebutton - move 1, EverGrandeCity_ChampionsRoom_Movement_15B9FF - move 255, EverGrandeCity_ChampionsRoom_Movement_15B9E0 - waitmove 0 + applymovement 1, EverGrandeCity_ChampionsRoom_Movement_15B9FF + applymovement 255, EverGrandeCity_ChampionsRoom_Movement_15B9E0 + waitmovement 0 setflag 781 warp EverGrandeCity_HallOfFame, 255, 7, 16 waitstate @@ -151,15 +151,15 @@ EverGrandeCity_ChampionsRoom_EventScript_15B9B4:: @ 815B9B4 return EverGrandeCity_ChampionsRoom_EventScript_15B9BD:: @ 815B9BD - move 2, EverGrandeCity_ChampionsRoom_Movement_15B9E6 - waitmove 0 - move 255, EverGrandeCity_ChampionsRoom_Movement_1A083F - waitmove 0 + applymovement 2, EverGrandeCity_ChampionsRoom_Movement_15B9E6 + waitmovement 0 + applymovement 255, EverGrandeCity_ChampionsRoom_Movement_1A083F + waitmovement 0 return EverGrandeCity_ChampionsRoom_EventScript_15B9D2:: @ 815B9D2 - move 2, EverGrandeCity_ChampionsRoom_Movement_15B9EF - waitmove 0 + applymovement 2, EverGrandeCity_ChampionsRoom_Movement_15B9EF + waitmovement 0 return EverGrandeCity_ChampionsRoom_Movement_15B9DD:: @ 815B9DD diff --git a/data/scripts/maps/EverGrandeCity_HallOfFame.inc b/data/scripts/maps/EverGrandeCity_HallOfFame.inc index 458796e0c..0bb327fd4 100644 --- a/data/scripts/maps/EverGrandeCity_HallOfFame.inc +++ b/data/scripts/maps/EverGrandeCity_HallOfFame.inc @@ -17,26 +17,26 @@ EverGrandeCity_HallOfFame_MapScript2_15BB9E:: @ 815BB9E EverGrandeCity_HallOfFame_EventScript_15BBA8:: @ 815BBA8 lockall - move 1, EverGrandeCity_HallOfFame_Movement_15BC59 - move 255, EverGrandeCity_HallOfFame_Movement_15BC59 - waitmove 0 - move 1, EverGrandeCity_HallOfFame_Movement_1A0843 - move 255, EverGrandeCity_HallOfFame_Movement_1A083F - waitmove 0 + applymovement 1, EverGrandeCity_HallOfFame_Movement_15BC59 + applymovement 255, EverGrandeCity_HallOfFame_Movement_15BC59 + waitmovement 0 + applymovement 1, EverGrandeCity_HallOfFame_Movement_1A0843 + applymovement 255, EverGrandeCity_HallOfFame_Movement_1A083F + waitmovement 0 msgbox EverGrandeCity_HallOfFame_Text_191841, 4 closebutton - move 1, EverGrandeCity_HallOfFame_Movement_15BC60 - move 255, EverGrandeCity_HallOfFame_Movement_15BC60 - waitmove 0 + applymovement 1, EverGrandeCity_HallOfFame_Movement_15BC60 + applymovement 255, EverGrandeCity_HallOfFame_Movement_15BC60 + waitmovement 0 delay 20 - move 1, EverGrandeCity_HallOfFame_Movement_1A0843 - move 255, EverGrandeCity_HallOfFame_Movement_1A083F - waitmove 0 + applymovement 1, EverGrandeCity_HallOfFame_Movement_1A0843 + applymovement 255, EverGrandeCity_HallOfFame_Movement_1A083F + waitmovement 0 msgbox EverGrandeCity_HallOfFame_Text_1918D7, 4 closebutton - move 1, EverGrandeCity_HallOfFame_Movement_1A0841 - move 255, EverGrandeCity_HallOfFame_Movement_1A0841 - waitmove 0 + applymovement 1, EverGrandeCity_HallOfFame_Movement_1A0841 + applymovement 255, EverGrandeCity_HallOfFame_Movement_1A0841 + waitmovement 0 delay 20 doanimation 62 checkanimation 62 diff --git a/data/scripts/maps/EverGrandeCity_PokemonLeague.inc b/data/scripts/maps/EverGrandeCity_PokemonLeague.inc index 04a8b701a..93f9c5fcb 100644 --- a/data/scripts/maps/EverGrandeCity_PokemonLeague.inc +++ b/data/scripts/maps/EverGrandeCity_PokemonLeague.inc @@ -60,9 +60,9 @@ EverGrandeCity_PokemonLeague_EventScript_15BAD2:: @ 815BAD2 checkflag 2060 goto_if 0, EverGrandeCity_PokemonLeague_EventScript_15BB4A closebutton - move 3, EverGrandeCity_PokemonLeague_Movement_15BB7E - move 4, EverGrandeCity_PokemonLeague_Movement_15BB81 - waitmove 0 + applymovement 3, EverGrandeCity_PokemonLeague_Movement_15BB7E + applymovement 4, EverGrandeCity_PokemonLeague_Movement_15BB81 + waitmovement 0 delay 10 playfanfare 369 message EverGrandeCity_PokemonLeague_Text_191804 @@ -76,13 +76,13 @@ EverGrandeCity_PokemonLeague_EventScript_15BAD2:: @ 815BAD2 end EverGrandeCity_PokemonLeague_EventScript_15BB34:: @ 815BB34 - move 255, EverGrandeCity_PokemonLeague_Movement_15BB76 - waitmove 0 + applymovement 255, EverGrandeCity_PokemonLeague_Movement_15BB76 + waitmovement 0 return EverGrandeCity_PokemonLeague_EventScript_15BB3F:: @ 815BB3F - move 255, EverGrandeCity_PokemonLeague_Movement_15BB7A - waitmove 0 + applymovement 255, EverGrandeCity_PokemonLeague_Movement_15BB7A + waitmovement 0 return EverGrandeCity_PokemonLeague_EventScript_15BB4A:: @ 815BB4A @@ -92,12 +92,12 @@ EverGrandeCity_PokemonLeague_EventScript_15BB4A:: @ 815BB4A end EverGrandeCity_PokemonLeague_EventScript_15BB57:: @ 815BB57 - move LAST_TALKED, EverGrandeCity_PokemonLeague_Movement_1A0839 - waitmove 0 + applymovement LAST_TALKED, EverGrandeCity_PokemonLeague_Movement_1A0839 + waitmovement 0 msgbox EverGrandeCity_PokemonLeague_Text_191804, 4 closebutton - move LAST_TALKED, EverGrandeCity_PokemonLeague_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, EverGrandeCity_PokemonLeague_Movement_1A083D + waitmovement 0 releaseall end diff --git a/data/scripts/maps/FallarborTown_ContestLobby.inc b/data/scripts/maps/FallarborTown_ContestLobby.inc index 7a3a8a7c8..a629acaf9 100644 --- a/data/scripts/maps/FallarborTown_ContestLobby.inc +++ b/data/scripts/maps/FallarborTown_ContestLobby.inc @@ -20,28 +20,28 @@ FallarborTown_ContestLobby_EventScript_1539CD:: @ 81539CD FallarborTown_ContestLobby_EventScript_1539F8:: @ 81539F8 lockall - move 1, FallarborTown_ContestLobby_Movement_153A7C - waitmove 0 + applymovement 1, FallarborTown_ContestLobby_Movement_153A7C + waitmovement 0 playse 71 setmaptile 4, 2, 545, 1 setmaptile 4, 3, 609, 1 special DrawWholeMapView - move 1, FallarborTown_ContestLobby_Movement_153A7F - waitmove 0 + applymovement 1, FallarborTown_ContestLobby_Movement_153A7F + waitmovement 0 playse 71 setmaptile 4, 2, 721, 1 setmaptile 4, 3, 729, 1 special DrawWholeMapView delay 20 - move 1, FallarborTown_ContestLobby_Movement_153A8C - waitmove 0 - move 255, FallarborTown_ContestLobby_Movement_153A7A - waitmove 0 + applymovement 1, FallarborTown_ContestLobby_Movement_153A8C + waitmovement 0 + applymovement 255, FallarborTown_ContestLobby_Movement_153A7A + waitmovement 0 msgbox FallarborTown_ContestLobby_Text_1A6832, 4 closebutton - move 1, FallarborTown_ContestLobby_Movement_153A83 - move 255, FallarborTown_ContestLobby_Movement_153A70 - waitmove 0 + applymovement 1, FallarborTown_ContestLobby_Movement_153A83 + applymovement 255, FallarborTown_ContestLobby_Movement_153A70 + waitmovement 0 releaseall return diff --git a/data/scripts/maps/FallarborTown_House2.inc b/data/scripts/maps/FallarborTown_House2.inc index 74674d3df..f25f02da5 100644 --- a/data/scripts/maps/FallarborTown_House2.inc +++ b/data/scripts/maps/FallarborTown_House2.inc @@ -3,8 +3,8 @@ FallarborTown_House2_MapScripts:: @ 8153C90 FallarborTown_House2_EventScript_153C91:: @ 8153C91 lockall - move 1, FallarborTown_House2_Movement_1A0839 - waitmove 0 + applymovement 1, FallarborTown_House2_Movement_1A0839 + waitmovement 0 checkflag 1 goto_if_eq FallarborTown_House2_EventScript_153CB6 msgbox FallarborTown_House2_Text_177AF4, 4 diff --git a/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc b/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc index 320ba0a3a..abe0ac7c6 100644 --- a/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc +++ b/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc @@ -34,14 +34,14 @@ FallarborTown_PokemonCenter_1F_EventScript_153B22:: @ 8153B22 end FallarborTown_PokemonCenter_1F_EventScript_153B49:: @ 8153B49 - move 4, FallarborTown_PokemonCenter_1F_Movement_153B74 - waitmove 0 + applymovement 4, FallarborTown_PokemonCenter_1F_Movement_153B74 + waitmovement 0 goto FallarborTown_PokemonCenter_1F_EventScript_153B69 end FallarborTown_PokemonCenter_1F_EventScript_153B59:: @ 8153B59 - move 4, FallarborTown_PokemonCenter_1F_Movement_153B81 - waitmove 0 + applymovement 4, FallarborTown_PokemonCenter_1F_Movement_153B81 + waitmovement 0 goto FallarborTown_PokemonCenter_1F_EventScript_153B69 end diff --git a/data/scripts/maps/FortreeCity.inc b/data/scripts/maps/FortreeCity.inc index 57405986b..c63273d5b 100644 --- a/data/scripts/maps/FortreeCity.inc +++ b/data/scripts/maps/FortreeCity.inc @@ -73,14 +73,14 @@ FortreeCity_EventScript_14C9CF:: @ 814C9CF FortreeCity_EventScript_14C9E4:: @ 814C9E4 msgbox FortreeCity_Text_1678CB, 4 closebutton - move LAST_TALKED, FortreeCity_Movement_1A0662 - waitmove 0 + applymovement LAST_TALKED, FortreeCity_Movement_1A0662 + waitmovement 0 waitse pokecry SPECIES_KECLEON, 2 delay 40 waitpokecry - move LAST_TALKED, FortreeCity_Movement_14CA13 - waitmove 0 + applymovement LAST_TALKED, FortreeCity_Movement_14CA13 + waitmovement 0 disappear LAST_TALKED setflag 295 release diff --git a/data/scripts/maps/FortreeCity_House4.inc b/data/scripts/maps/FortreeCity_House4.inc index bcf2bcd49..f13b29249 100644 --- a/data/scripts/maps/FortreeCity_House4.inc +++ b/data/scripts/maps/FortreeCity_House4.inc @@ -17,22 +17,22 @@ FortreeCity_House4_EventScript_158188:: @ 8158188 closebutton setflag 222 clearflag 934 - move 3, FortreeCity_House4_Movement_158218 - waitmove 0 + applymovement 3, FortreeCity_House4_Movement_158218 + waitmovement 0 disappear 3 releaseall end FortreeCity_House4_EventScript_1581C2:: @ 81581C2 - move LAST_TALKED, FortreeCity_House4_Movement_1A0839 - waitmove 0 + applymovement LAST_TALKED, FortreeCity_House4_Movement_1A0839 + waitmovement 0 msgbox FortreeCity_House4_Text_18684E, 4 releaseall end FortreeCity_House4_EventScript_1581D6:: @ 81581D6 - move LAST_TALKED, FortreeCity_House4_Movement_1A0839 - waitmove 0 + applymovement LAST_TALKED, FortreeCity_House4_Movement_1A0839 + waitmovement 0 msgbox FortreeCity_House4_Text_186881, 4 giveitem ITEM_MENTAL_HERB compare_var_to_imm RESULT, 0 @@ -42,8 +42,8 @@ FortreeCity_House4_EventScript_1581D6:: @ 81581D6 end FortreeCity_House4_EventScript_158204:: @ 8158204 - move LAST_TALKED, FortreeCity_House4_Movement_1A0839 - waitmove 0 + applymovement LAST_TALKED, FortreeCity_House4_Movement_1A0839 + waitmovement 0 msgbox FortreeCity_House4_Text_186924, 4 releaseall end diff --git a/data/scripts/maps/GraniteCave_StevensRoom.inc b/data/scripts/maps/GraniteCave_StevensRoom.inc index ee1c37dae..ed6a1a784 100644 --- a/data/scripts/maps/GraniteCave_StevensRoom.inc +++ b/data/scripts/maps/GraniteCave_StevensRoom.inc @@ -28,13 +28,13 @@ GraniteCave_StevensRoom_EventScript_15CBFA:: @ 815CBFA end GraniteCave_StevensRoom_EventScript_15CC6D:: @ 815CC6D - move 1, GraniteCave_StevensRoom_Movement_15CC8C - waitmove 0 + applymovement 1, GraniteCave_StevensRoom_Movement_15CC8C + waitmovement 0 return GraniteCave_StevensRoom_EventScript_15CC78:: @ 815CC78 - move 1, GraniteCave_StevensRoom_Movement_15CC93 - waitmove 0 + applymovement 1, GraniteCave_StevensRoom_Movement_15CC93 + waitmovement 0 return GraniteCave_StevensRoom_EventScript_15CC83:: @ 815CC83 diff --git a/data/scripts/maps/LavaridgeTown.inc b/data/scripts/maps/LavaridgeTown.inc index e40a9252a..d35fcaae5 100644 --- a/data/scripts/maps/LavaridgeTown.inc +++ b/data/scripts/maps/LavaridgeTown.inc @@ -32,17 +32,17 @@ LavaridgeTown_EventScript_14E4ED:: @ 814E4ED setdooropened 12, 15 doorchange reappear 8 - move 8, LavaridgeTown_Movement_14E70E - waitmove 0 + applymovement 8, LavaridgeTown_Movement_14E70E + waitmovement 0 setdoorclosed 12, 15 doorchange - move 8, LavaridgeTown_Movement_1A083F - waitmove 0 - move 255, LavaridgeTown_Movement_1A0843 - move 8, LavaridgeTown_Movement_1A0833 - waitmove 0 - move 8, LavaridgeTown_Movement_1A0835 - waitmove 0 + applymovement 8, LavaridgeTown_Movement_1A083F + waitmovement 0 + applymovement 255, LavaridgeTown_Movement_1A0843 + applymovement 8, LavaridgeTown_Movement_1A0833 + waitmovement 0 + applymovement 8, LavaridgeTown_Movement_1A0835 + waitmovement 0 checkgender compare_var_to_imm RESULT, 0 call_if 1, LavaridgeTown_EventScript_14E56B @@ -155,13 +155,13 @@ LavaridgeTown_EventScript_14E68A:: @ 814E68A return LavaridgeTown_EventScript_14E68F:: @ 814E68F - move 8, LavaridgeTown_Movement_14E6E8 - waitmove 0 + applymovement 8, LavaridgeTown_Movement_14E6E8 + waitmovement 0 return LavaridgeTown_EventScript_14E69A:: @ 814E69A - move 7, LavaridgeTown_Movement_14E6EF - waitmove 0 + applymovement 7, LavaridgeTown_Movement_14E6EF + waitmovement 0 return LavaridgeTown_EventScript_14E6A5:: @ 814E6A5 @@ -176,13 +176,13 @@ LavaridgeTown_EventScript_14E6A5:: @ 814E6A5 return LavaridgeTown_EventScript_14E6D2:: @ 814E6D2 - move 7, LavaridgeTown_Movement_14E6FA - waitmove 0 + applymovement 7, LavaridgeTown_Movement_14E6FA + waitmovement 0 return LavaridgeTown_EventScript_14E6DD:: @ 814E6DD - move 7, LavaridgeTown_Movement_14E703 - waitmove 0 + applymovement 7, LavaridgeTown_Movement_14E703 + waitmovement 0 return LavaridgeTown_Movement_14E6E8:: @ 814E6E8 diff --git a/data/scripts/maps/LilycoveCity.inc b/data/scripts/maps/LilycoveCity.inc index 5b53435d4..b8410429b 100644 --- a/data/scripts/maps/LilycoveCity.inc +++ b/data/scripts/maps/LilycoveCity.inc @@ -214,11 +214,11 @@ LilycoveCity_EventScript_14CCE5:: @ 814CCE5 checkflag 218 goto_if_eq LilycoveCity_EventScript_14CD18 msgbox LilycoveCity_Text_16864A, 4 - move LAST_TALKED, LilycoveCity_Movement_1A0839 - waitmove 0 + applymovement LAST_TALKED, LilycoveCity_Movement_1A0839 + waitmovement 0 msgbox LilycoveCity_Text_168675, 4 - move LAST_TALKED, LilycoveCity_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, LilycoveCity_Movement_1A083D + waitmovement 0 setflag 218 releaseall end @@ -412,8 +412,8 @@ LilycoveCity_EventScript_14CF62:: @ 814CF62 LilycoveCity_EventScript_14CF6B:: @ 814CF6B closebutton - move LAST_TALKED, LilycoveCity_Movement_1A0845 - waitmove 0 + applymovement LAST_TALKED, LilycoveCity_Movement_1A0845 + waitmovement 0 delay 50 setanimation 0, 1 doanimation 30 diff --git a/data/scripts/maps/LilycoveCity_ContestHall.inc b/data/scripts/maps/LilycoveCity_ContestHall.inc index 525d57a71..944857a21 100644 --- a/data/scripts/maps/LilycoveCity_ContestHall.inc +++ b/data/scripts/maps/LilycoveCity_ContestHall.inc @@ -22,48 +22,48 @@ LilycoveCity_ContestHall_EventScript_1590B6:: @ 81590B6 LilycoveCity_ContestHall_EventScript_1590BF:: @ 81590BF msgbox LilycoveCity_ContestHall_Text_189301, 2 lockall - move 4, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 4, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_1590D4:: @ 81590D4 msgbox LilycoveCity_ContestHall_Text_189366, 2 lockall - move 5, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 5, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_1590E9:: @ 81590E9 msgbox LilycoveCity_ContestHall_Text_1893CE, 2 lockall - move 6, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 6, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_1590FE:: @ 81590FE msgbox LilycoveCity_ContestHall_Text_189463, 2 lockall - move 7, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 7, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_159113:: @ 8159113 msgbox LilycoveCity_ContestHall_Text_189512, 2 lockall - move 8, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 8, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_159128:: @ 8159128 msgbox LilycoveCity_ContestHall_Text_18956B, 2 lockall - move 9, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 9, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end @@ -74,154 +74,154 @@ LilycoveCity_ContestHall_EventScript_15913D:: @ 815913D LilycoveCity_ContestHall_EventScript_159146:: @ 8159146 msgbox LilycoveCity_ContestHall_Text_189617, 2 lockall - move 12, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 12, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_15915B:: @ 815915B msgbox LilycoveCity_ContestHall_Text_1896BE, 2 lockall - move 22, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 22, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_159170:: @ 8159170 msgbox LilycoveCity_ContestHall_Text_1896FE, 2 lockall - move 11, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 11, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_159185:: @ 8159185 msgbox LilycoveCity_ContestHall_Text_189771, 2 lockall - move 13, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 13, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_15919A:: @ 815919A msgbox LilycoveCity_ContestHall_Text_1897AA, 2 lockall - move 14, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 14, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_1591AF:: @ 81591AF msgbox LilycoveCity_ContestHall_Text_18980B, 2 lockall - move 15, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 15, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_1591C4:: @ 81591C4 msgbox LilycoveCity_ContestHall_Text_189874, 2 lockall - move 16, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 16, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_1591D9:: @ 81591D9 msgbox LilycoveCity_ContestHall_Text_18990A, 2 lockall - move 17, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 17, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_1591EE:: @ 81591EE msgbox LilycoveCity_ContestHall_Text_189981, 2 lockall - move 18, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 18, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_159203:: @ 8159203 msgbox LilycoveCity_ContestHall_Text_189A1D, 2 lockall - move 19, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 19, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_159218:: @ 8159218 msgbox LilycoveCity_ContestHall_Text_189A82, 2 lockall - move 21, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 21, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_15922D:: @ 815922D msgbox LilycoveCity_ContestHall_Text_189AE1, 2 lockall - move 20, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 20, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_159242:: @ 8159242 msgbox LilycoveCity_ContestHall_Text_189B4E, 2 lockall - move 23, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 23, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_159257:: @ 8159257 msgbox LilycoveCity_ContestHall_Text_189BBF, 2 lockall - move 24, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 24, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_15926C:: @ 815926C msgbox LilycoveCity_ContestHall_Text_189C29, 2 lockall - move 25, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 25, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_159281:: @ 8159281 msgbox LilycoveCity_ContestHall_Text_189C67, 2 lockall - move 26, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 26, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_159296:: @ 8159296 msgbox LilycoveCity_ContestHall_Text_189CB3, 2 lockall - move 27, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 27, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_1592AB:: @ 81592AB msgbox LilycoveCity_ContestHall_Text_189D11, 2 lockall - move 28, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 28, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_1592C0:: @ 81592C0 lockall - move 29, LilycoveCity_ContestHall_Movement_1A0839 - waitmove 0 + applymovement 29, LilycoveCity_ContestHall_Movement_1A0839 + waitmovement 0 delay 25 - move 29, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 29, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 msgbox LilycoveCity_ContestHall_Text_189DA2, 3 releaseall end @@ -229,16 +229,16 @@ LilycoveCity_ContestHall_EventScript_1592C0:: @ 81592C0 LilycoveCity_ContestHall_EventScript_1592E2:: @ 81592E2 msgbox LilycoveCity_ContestHall_Text_189E5F, 2 lockall - move 31, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 31, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_ContestHall_EventScript_1592F7:: @ 81592F7 msgbox LilycoveCity_ContestHall_Text_189DF3, 2 lockall - move 30, LilycoveCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 30, LilycoveCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end diff --git a/data/scripts/maps/LilycoveCity_ContestLobby.inc b/data/scripts/maps/LilycoveCity_ContestLobby.inc index 881a842f1..d775fd440 100644 --- a/data/scripts/maps/LilycoveCity_ContestLobby.inc +++ b/data/scripts/maps/LilycoveCity_ContestLobby.inc @@ -21,10 +21,10 @@ LilycoveCity_ContestLobby_EventScript_158889:: @ 8158889 LilycoveCity_ContestLobby_EventScript_158898:: @ 8158898 lockall reappear 4 - move 4, LilycoveCity_ContestLobby_Movement_158A3B - waitmove 4 - move 255, LilycoveCity_ContestLobby_Movement_158A4C - waitmove 0 + applymovement 4, LilycoveCity_ContestLobby_Movement_158A3B + waitmovement 4 + applymovement 255, LilycoveCity_ContestLobby_Movement_158A4C + waitmovement 0 msgbox LilycoveCity_ContestLobby_Text_18890F, 4 lockall fadescreen 1 @@ -46,8 +46,8 @@ LilycoveCity_ContestLobby_EventScript_1588DE:: @ 81588DE specialvar RESULT, GiveMonArtistRibbon compare_var_to_imm RESULT, 1 call_if 1, LilycoveCity_ContestLobby_EventScript_158948 - move 4, LilycoveCity_ContestLobby_Movement_158A43 - waitmove 0 + applymovement 4, LilycoveCity_ContestLobby_Movement_158A43 + waitmovement 0 disappear 4 call LilycoveCity_ContestLobby_EventScript_158994 call LilycoveCity_ContestLobby_EventScript_1589EA @@ -60,8 +60,8 @@ LilycoveCity_ContestLobby_EventScript_158918:: @ 8158918 goto_if_eq LilycoveCity_ContestLobby_EventScript_1588DE msgbox LilycoveCity_ContestLobby_Text_188CBD, 4 closebutton - move 4, LilycoveCity_ContestLobby_Movement_158A43 - waitmove 0 + applymovement 4, LilycoveCity_ContestLobby_Movement_158A43 + waitmovement 0 setvar 0x4099, 0 disappear 4 releaseall @@ -70,13 +70,13 @@ LilycoveCity_ContestLobby_EventScript_158918:: @ 8158918 LilycoveCity_ContestLobby_EventScript_158948:: @ 8158948 inccounter GAME_STAT_RECEIVED_RIBBONS special sub_80C4858 - move 4, LilycoveCity_ContestLobby_Movement_158A4E - waitmove 0 + applymovement 4, LilycoveCity_ContestLobby_Movement_158A4E + waitmovement 0 playse 21 - move 4, LilycoveCity_ContestLobby_Movement_1A0833 - waitmove 0 - move 4, LilycoveCity_ContestLobby_Movement_158A52 - waitmove 0 + applymovement 4, LilycoveCity_ContestLobby_Movement_1A0833 + waitmovement 0 + applymovement 4, LilycoveCity_ContestLobby_Movement_158A52 + waitmovement 0 msgbox LilycoveCity_ContestLobby_Text_188BB5, 4 playfanfare 370 msgbox LilycoveCity_ContestLobby_Text_188C03, 4 @@ -196,10 +196,10 @@ LilycoveCity_ContestLobby_EventScript_158A5B:: @ 8158A5B LilycoveCity_ContestLobby_EventScript_158A6A:: @ 8158A6A lockall reappear 11 - move 11, LilycoveCity_ContestLobby_Movement_158B64 - waitmove 11 - move 255, LilycoveCity_ContestLobby_Movement_158B76 - waitmove 0 + applymovement 11, LilycoveCity_ContestLobby_Movement_158B64 + waitmovement 11 + applymovement 255, LilycoveCity_ContestLobby_Movement_158B76 + waitmovement 0 msgbox LilycoveCity_ContestLobby_Text_18890F, 4 lockall fadescreen 1 @@ -219,8 +219,8 @@ LilycoveCity_ContestLobby_EventScript_158AAE:: @ 8158AAE specialvar RESULT, GiveMonArtistRibbon compare_var_to_imm RESULT, 1 call_if 1, LilycoveCity_ContestLobby_EventScript_158B18 - move 11, LilycoveCity_ContestLobby_Movement_158B6D - waitmove 0 + applymovement 11, LilycoveCity_ContestLobby_Movement_158B6D + waitmovement 0 disappear 11 call LilycoveCity_ContestLobby_EventScript_158994 call LilycoveCity_ContestLobby_EventScript_1589EA @@ -233,8 +233,8 @@ LilycoveCity_ContestLobby_EventScript_158AE8:: @ 8158AE8 goto_if_eq LilycoveCity_ContestLobby_EventScript_158AAE msgbox LilycoveCity_ContestLobby_Text_188CBD, 4 closebutton - move 11, LilycoveCity_ContestLobby_Movement_158B6D - waitmove 0 + applymovement 11, LilycoveCity_ContestLobby_Movement_158B6D + waitmovement 0 setvar 0x4099, 0 disappear 11 releaseall @@ -243,13 +243,13 @@ LilycoveCity_ContestLobby_EventScript_158AE8:: @ 8158AE8 LilycoveCity_ContestLobby_EventScript_158B18:: @ 8158B18 inccounter GAME_STAT_RECEIVED_RIBBONS special sub_80C4858 - move 11, LilycoveCity_ContestLobby_Movement_158B78 - waitmove 0 + applymovement 11, LilycoveCity_ContestLobby_Movement_158B78 + waitmovement 0 playse 21 - move 11, LilycoveCity_ContestLobby_Movement_1A0833 - waitmove 0 - move 11, LilycoveCity_ContestLobby_Movement_158B7C - waitmove 0 + applymovement 11, LilycoveCity_ContestLobby_Movement_1A0833 + waitmovement 0 + applymovement 11, LilycoveCity_ContestLobby_Movement_158B7C + waitmovement 0 msgbox LilycoveCity_ContestLobby_Text_188BB5, 4 playfanfare 370 msgbox LilycoveCity_ContestLobby_Text_188C03, 4 @@ -494,30 +494,30 @@ LilycoveCity_ContestLobby_EventScript_158E0B:: @ 8158E0B waittext delay 20 closebutton - move 2, LilycoveCity_ContestLobby_Movement_158E9C - waitmove 0 + applymovement 2, LilycoveCity_ContestLobby_Movement_158E9C + waitmovement 0 playse 71 setmaptile 9, 2, 545, 1 setmaptile 9, 3, 609, 1 special DrawWholeMapView - move 2, LilycoveCity_ContestLobby_Movement_158EA0 - waitmove 0 + applymovement 2, LilycoveCity_ContestLobby_Movement_158EA0 + waitmovement 0 playse 71 setmaptile 9, 2, 721, 1 setmaptile 9, 3, 729, 1 special DrawWholeMapView delay 20 - move 2, LilycoveCity_ContestLobby_Movement_158EAE - waitmove 0 - move 255, LilycoveCity_ContestLobby_Movement_158E99 - waitmove 0 + applymovement 2, LilycoveCity_ContestLobby_Movement_158EAE + waitmovement 0 + applymovement 255, LilycoveCity_ContestLobby_Movement_158E99 + waitmovement 0 message2 LilycoveCity_ContestLobby_Text_1A6832 waittext delay 20 closebutton - move 2, LilycoveCity_ContestLobby_Movement_158EA4 - move 255, LilycoveCity_ContestLobby_Movement_158E8E - waitmove 0 + applymovement 2, LilycoveCity_ContestLobby_Movement_158EA4 + applymovement 255, LilycoveCity_ContestLobby_Movement_158E8E + waitmovement 0 releaseall return @@ -633,28 +633,28 @@ LilycoveCity_ContestLobby_EventScript_158F79:: @ 8158F79 LilycoveCity_ContestLobby_EventScript_158F86:: @ 8158F86 lockall - move 1, LilycoveCity_ContestLobby_Movement_15900B - waitmove 0 + applymovement 1, LilycoveCity_ContestLobby_Movement_15900B + waitmovement 0 playse 71 setmaptile 4, 2, 545, 1 setmaptile 4, 3, 609, 1 special DrawWholeMapView - move 1, LilycoveCity_ContestLobby_Movement_15900F - waitmove 0 + applymovement 1, LilycoveCity_ContestLobby_Movement_15900F + waitmovement 0 playse 71 setmaptile 4, 2, 721, 1 setmaptile 4, 3, 729, 1 special DrawWholeMapView delay 20 - move 1, LilycoveCity_ContestLobby_Movement_15901C - waitmove 0 - move 255, LilycoveCity_ContestLobby_Movement_159008 - waitmove 0 + applymovement 1, LilycoveCity_ContestLobby_Movement_15901C + waitmovement 0 + applymovement 255, LilycoveCity_ContestLobby_Movement_159008 + waitmovement 0 msgbox LilycoveCity_ContestLobby_Text_1A6832, 4 closebutton - move 1, LilycoveCity_ContestLobby_Movement_159013 - move 255, LilycoveCity_ContestLobby_Movement_158FFE - waitmove 0 + applymovement 1, LilycoveCity_ContestLobby_Movement_159013 + applymovement 255, LilycoveCity_ContestLobby_Movement_158FFE + waitmovement 0 releaseall return diff --git a/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc b/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc index aef4bc74a..f6fb499a3 100644 --- a/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc +++ b/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc @@ -8,53 +8,53 @@ LilycoveCity_CoveLilyMotel_1F_EventScript_1582C5:: @ 81582C5 checkflag 2061 goto_if_eq LilycoveCity_CoveLilyMotel_1F_EventScript_1582FF msgbox LilycoveCity_CoveLilyMotel_1F_Text_186B71, 4 - move 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0839 - waitmove 0 + applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0839 + waitmovement 0 msgbox LilycoveCity_CoveLilyMotel_1F_Text_186C2B, 4 closebutton - move 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A083D - waitmove 0 + applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_CoveLilyMotel_1F_EventScript_1582FF:: @ 81582FF msgbox LilycoveCity_CoveLilyMotel_1F_Text_186CCE, 4 - move 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0839 - waitmove 0 + applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0839 + waitmovement 0 msgbox LilycoveCity_CoveLilyMotel_1F_Text_186D7F, 4 closebutton - move 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A083D - waitmove 0 + applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_CoveLilyMotel_1F_EventScript_158326:: @ 8158326 msgbox LilycoveCity_CoveLilyMotel_1F_Text_186E57, 4 - move 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0839 - waitmove 0 + applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0839 + waitmovement 0 msgbox LilycoveCity_CoveLilyMotel_1F_Text_186F09, 4 closebutton - move 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A083D - waitmove 0 + applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A083D + waitmovement 0 releaseall end LilycoveCity_CoveLilyMotel_1F_EventScript_15834D:: @ 815834D lockall playse 21 - move 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0833 - waitmove 0 - move 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0835 - waitmove 0 - move 255, LilycoveCity_CoveLilyMotel_1F_Movement_1A0845 - waitmove 0 + applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0833 + waitmovement 0 + applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0835 + waitmovement 0 + applymovement 255, LilycoveCity_CoveLilyMotel_1F_Movement_1A0845 + waitmovement 0 msgbox LilycoveCity_CoveLilyMotel_1F_Text_186CA6, 4 closebutton - move 255, LilycoveCity_CoveLilyMotel_1F_Movement_158395 - move 1, LilycoveCity_CoveLilyMotel_1F_Movement_15839A - waitmove 0 - move 1, LilycoveCity_CoveLilyMotel_1F_Movement_15839C - waitmove 0 + applymovement 255, LilycoveCity_CoveLilyMotel_1F_Movement_158395 + applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_15839A + waitmovement 0 + applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_15839C + waitmovement 0 release end diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc index 1dd8d5869..fdf1c76e3 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc @@ -72,8 +72,8 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1:: @ 815A4B1 LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8:: @ 815A4B8 hidebox 0, 0, 29, 19 - move LAST_TALKED, LilycoveCity_DepartmentStoreElevator_Movement_1A0845 - waitmove 0 + applymovement LAST_TALKED, LilycoveCity_DepartmentStoreElevator_Movement_1A0845 + waitmovement 0 special sub_810EBEC waitstate setflag 2 diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc index 9d22e6055..4ee36a21d 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc @@ -23,16 +23,16 @@ LilycoveCity_DepartmentStore_1F_EventScript_159D5E:: @ 8159D5E copyvar 0x8008, RESULT special sub_810F9AC msgbox LilycoveCity_DepartmentStore_1F_Text_1C4CF6, 4 - move 2, LilycoveCity_DepartmentStore_1F_Movement_1A0843 - waitmove 0 + applymovement 2, LilycoveCity_DepartmentStore_1F_Movement_1A0843 + waitmovement 0 playse 4 special DoLotteryCornerComputerEffect special PickLotteryCornerTicket delay 220 special EndLotteryCornerComputerEffect delay 10 - move 2, LilycoveCity_DepartmentStore_1F_Movement_1A0839 - waitmove 0 + applymovement 2, LilycoveCity_DepartmentStore_1F_Movement_1A0839 + waitmovement 0 compare_var_to_imm 0x8004, 0 goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E60 inccounter GAME_STAT_WON_POKEMON_LOTTERY diff --git a/data/scripts/maps/LilycoveCity_Harbor.inc b/data/scripts/maps/LilycoveCity_Harbor.inc index 0d9e70a15..8998d6268 100644 --- a/data/scripts/maps/LilycoveCity_Harbor.inc +++ b/data/scripts/maps/LilycoveCity_Harbor.inc @@ -76,8 +76,8 @@ LilycoveCity_Harbor_EventScript_15997E:: @ 815997E LilycoveCity_Harbor_EventScript_15998A:: @ 815998A msgbox LilycoveCity_Harbor_Text_18B4B3, 4 closebutton - move LAST_TALKED, LilycoveCity_Harbor_Movement_1A0841 - waitmove 0 + applymovement LAST_TALKED, LilycoveCity_Harbor_Movement_1A0841 + waitmovement 0 delay 30 spriteinvisible LAST_TALKED, 13, 10 compare_var_to_imm FACING, 2 @@ -91,13 +91,13 @@ LilycoveCity_Harbor_EventScript_15998A:: @ 815998A return LilycoveCity_Harbor_EventScript_1599CE:: @ 81599CE - move 255, LilycoveCity_Harbor_Movement_159A86 - waitmove 0 + applymovement 255, LilycoveCity_Harbor_Movement_159A86 + waitmovement 0 return LilycoveCity_Harbor_EventScript_1599D9:: @ 81599D9 - move 255, LilycoveCity_Harbor_Movement_159A89 - waitmove 0 + applymovement 255, LilycoveCity_Harbor_Movement_159A89 + waitmovement 0 return LilycoveCity_Harbor_EventScript_1599E4:: @ 81599E4 @@ -114,19 +114,19 @@ LilycoveCity_Harbor_EventScript_1599EE:: @ 81599EE goto_if 0, LilycoveCity_Harbor_EventScript_1598BA msgbox LilycoveCity_Harbor_Text_1C50F2, 4 closebutton - move LAST_TALKED, LilycoveCity_Harbor_Movement_1A0841 - waitmove 0 + applymovement LAST_TALKED, LilycoveCity_Harbor_Movement_1A0841 + waitmovement 0 delay 30 spriteinvisible LAST_TALKED, 13, 10 delay 60 reappear 4 delay 30 - move 4, LilycoveCity_Harbor_Movement_1A0839 - waitmove 0 + applymovement 4, LilycoveCity_Harbor_Movement_1A0839 + waitmovement 0 msgbox LilycoveCity_Harbor_Text_1C5120, 4 closebutton - move 4, LilycoveCity_Harbor_Movement_1A0841 - waitmove 0 + applymovement 4, LilycoveCity_Harbor_Movement_1A0841 + waitmovement 0 delay 30 disappear 4 compare_var_to_imm FACING, 2 diff --git a/data/scripts/maps/LilycoveCity_House3.inc b/data/scripts/maps/LilycoveCity_House3.inc index 62455f547..452c0567f 100644 --- a/data/scripts/maps/LilycoveCity_House3.inc +++ b/data/scripts/maps/LilycoveCity_House3.inc @@ -15,16 +15,16 @@ LilycoveCity_House3_EventScript_159BF3:: @ 8159BF3 goto_if_eq LilycoveCity_House3_EventScript_159C1D msgbox LilycoveCity_House3_Text_18BA2B, 4 closebutton - move LAST_TALKED, LilycoveCity_House3_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, LilycoveCity_House3_Movement_1A083D + waitmovement 0 release end LilycoveCity_House3_EventScript_159C1D:: @ 8159C1D msgbox LilycoveCity_House3_Text_18B9DC, 4 closebutton - move LAST_TALKED, LilycoveCity_House3_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, LilycoveCity_House3_Movement_1A083D + waitmovement 0 release end @@ -33,8 +33,8 @@ LilycoveCity_House3_EventScript_159C32:: @ 8159C32 faceplayer msgbox LilycoveCity_House3_Text_18BD64, 4 closebutton - move LAST_TALKED, LilycoveCity_House3_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, LilycoveCity_House3_Movement_1A083D + waitmovement 0 release end diff --git a/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc b/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc index 236d48f65..7611b0ef5 100644 --- a/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc +++ b/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc @@ -7,7 +7,7 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_15841C:: @ 815841C LilycoveCity_LilycoveMuseum_1F_EventScript_158425:: @ 8158425 lockall - move 2, LilycoveCity_LilycoveMuseum_1F_Movement_1A0839 + applymovement 2, LilycoveCity_LilycoveMuseum_1F_Movement_1A0839 message LilycoveCity_LilycoveMuseum_1F_Text_1873B9 waittext multichoice 20, 8, 16, 1 @@ -36,8 +36,8 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_158477:: @ 8158477 LilycoveCity_LilycoveMuseum_1F_EventScript_158481:: @ 8158481 msgbox LilycoveCity_LilycoveMuseum_1F_Text_187534, 3 - move 2, LilycoveCity_LilycoveMuseum_1F_Movement_1584FC - waitmove 0 + applymovement 2, LilycoveCity_LilycoveMuseum_1F_Movement_1584FC + waitmovement 0 disappear 2 switch FACING case 2, LilycoveCity_LilycoveMuseum_1F_EventScript_1584BD @@ -47,24 +47,24 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_158481:: @ 8158481 LilycoveCity_LilycoveMuseum_1F_EventScript_1584BD:: @ 81584BD lockall - move 255, LilycoveCity_LilycoveMuseum_1F_Movement_158504 - waitmove 0 + applymovement 255, LilycoveCity_LilycoveMuseum_1F_Movement_158504 + waitmovement 0 warp LilycoveCity_LilycoveMuseum_2F, 255, 11, 8 waitstate end LilycoveCity_LilycoveMuseum_1F_EventScript_1584D2:: @ 81584D2 lockall - move 255, LilycoveCity_LilycoveMuseum_1F_Movement_1584FE - waitmove 0 + applymovement 255, LilycoveCity_LilycoveMuseum_1F_Movement_1584FE + waitmovement 0 warp LilycoveCity_LilycoveMuseum_2F, 255, 11, 8 waitstate end LilycoveCity_LilycoveMuseum_1F_EventScript_1584E7:: @ 81584E7 lockall - move 255, LilycoveCity_LilycoveMuseum_1F_Movement_158501 - waitmove 0 + applymovement 255, LilycoveCity_LilycoveMuseum_1F_Movement_158501 + waitmovement 0 warp LilycoveCity_LilycoveMuseum_2F, 255, 11, 8 waitstate end @@ -152,8 +152,8 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_158585:: @ 8158585 LilycoveCity_LilycoveMuseum_1F_EventScript_15858E:: @ 815858E msgbox LilycoveCity_LilycoveMuseum_1F_Text_187B04, 2 lockall - move 8, LilycoveCity_LilycoveMuseum_1F_Movement_1A083D - waitmove 0 + applymovement 8, LilycoveCity_LilycoveMuseum_1F_Movement_1A083D + waitmovement 0 releaseall end diff --git a/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc b/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc index 663b1f25b..6fb0f07b1 100644 --- a/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc +++ b/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc @@ -67,19 +67,19 @@ LilycoveCity_LilycoveMuseum_2F_MapScript2_158670:: @ 8158670 LilycoveCity_LilycoveMuseum_2F_EventScript_15867A:: @ 815867A lockall - move 1, LilycoveCity_LilycoveMuseum_2F_Movement_1A0839 - move 255, LilycoveCity_LilycoveMuseum_2F_Movement_1586D3 - waitmove 0 + applymovement 1, LilycoveCity_LilycoveMuseum_2F_Movement_1A0839 + applymovement 255, LilycoveCity_LilycoveMuseum_2F_Movement_1586D3 + waitmovement 0 msgbox LilycoveCity_LilycoveMuseum_2F_Text_187C42, 3 - move 1, LilycoveCity_LilycoveMuseum_2F_Movement_1586D5 - waitmove 0 - move 255, LilycoveCity_LilycoveMuseum_2F_Movement_1586D5 - waitmove 0 + applymovement 1, LilycoveCity_LilycoveMuseum_2F_Movement_1586D5 + waitmovement 0 + applymovement 255, LilycoveCity_LilycoveMuseum_2F_Movement_1586D5 + waitmovement 0 msgbox LilycoveCity_LilycoveMuseum_2F_Text_187C64, 3 - move 1, LilycoveCity_LilycoveMuseum_2F_Movement_1A0839 - waitmove 0 - move 255, LilycoveCity_LilycoveMuseum_2F_Movement_1586D3 - waitmove 0 + applymovement 1, LilycoveCity_LilycoveMuseum_2F_Movement_1A0839 + waitmovement 0 + applymovement 255, LilycoveCity_LilycoveMuseum_2F_Movement_1586D3 + waitmovement 0 msgbox LilycoveCity_LilycoveMuseum_2F_Text_187E1D, 3 copyvar 0x4094, 0x1 releaseall @@ -113,16 +113,16 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_15872C:: @ 815872C end LilycoveCity_LilycoveMuseum_2F_EventScript_158735:: @ 8158735 - move 1, LilycoveCity_LilycoveMuseum_2F_Movement_1A0839 - waitmove 0 + applymovement 1, LilycoveCity_LilycoveMuseum_2F_Movement_1A0839 + waitmovement 0 msgbox LilycoveCity_LilycoveMuseum_2F_Text_18802F, 4 - move 1, LilycoveCity_LilycoveMuseum_2F_Movement_1586D5 + applymovement 1, LilycoveCity_LilycoveMuseum_2F_Movement_1586D5 msgbox LilycoveCity_LilycoveMuseum_2F_Text_188041, 4 goto LilycoveCity_LilycoveMuseum_2F_EventScript_15875C end LilycoveCity_LilycoveMuseum_2F_EventScript_15875C:: @ 815875C - move 1, LilycoveCity_LilycoveMuseum_2F_Movement_1A0839 + applymovement 1, LilycoveCity_LilycoveMuseum_2F_Movement_1A0839 msgbox LilycoveCity_LilycoveMuseum_2F_Text_188120, 4 givedecoration 44 compare_var_to_imm RESULT, 0 diff --git a/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc b/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc index 01781f3ca..978eb6569 100644 --- a/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc +++ b/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc @@ -3,8 +3,8 @@ LilycoveCity_MoveDeletersHouse_MapScripts:: @ 8159AAD LilycoveCity_MoveDeletersHouse_EventScript_159AAE:: @ 8159AAE lockall - move 1, LilycoveCity_MoveDeletersHouse_Movement_1A0839 - waitmove 0 + applymovement 1, LilycoveCity_MoveDeletersHouse_Movement_1A0839 + waitmovement 0 msgbox LilycoveCity_MoveDeletersHouse_Text_18B622, 5 switch RESULT case 1, LilycoveCity_MoveDeletersHouse_EventScript_159ADE diff --git a/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc b/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc index dba3cf57a..eb1882043 100644 --- a/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc +++ b/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc @@ -9,21 +9,21 @@ LilycoveCity_PokemonTrainerFanClub_MapScript2_159395:: @ 8159395 LilycoveCity_PokemonTrainerFanClub_EventScript_15939F:: @ 815939F lockall - move 1, LilycoveCity_PokemonTrainerFanClub_Movement_1A0845 - waitmove 0 + applymovement 1, LilycoveCity_PokemonTrainerFanClub_Movement_1A0845 + waitmovement 0 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A1D6, 4 - move 4, LilycoveCity_PokemonTrainerFanClub_Movement_159402 - move 2, LilycoveCity_PokemonTrainerFanClub_Movement_1593FA - waitmove 0 - move 255, LilycoveCity_PokemonTrainerFanClub_Movement_1A0843 - waitmove 0 + applymovement 4, LilycoveCity_PokemonTrainerFanClub_Movement_159402 + applymovement 2, LilycoveCity_PokemonTrainerFanClub_Movement_1593FA + waitmovement 0 + applymovement 255, LilycoveCity_PokemonTrainerFanClub_Movement_1A0843 + waitmovement 0 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A1E8, 4 - move 4, LilycoveCity_PokemonTrainerFanClub_Movement_159409 - waitmove 0 - move 255, LilycoveCity_PokemonTrainerFanClub_Movement_1A083F - waitmove 0 - move 4, LilycoveCity_PokemonTrainerFanClub_Movement_15940C - waitmove 0 + applymovement 4, LilycoveCity_PokemonTrainerFanClub_Movement_159409 + waitmovement 0 + applymovement 255, LilycoveCity_PokemonTrainerFanClub_Movement_1A083F + waitmovement 0 + applymovement 4, LilycoveCity_PokemonTrainerFanClub_Movement_15940C + waitmovement 0 setvar 0x4095, 2 releaseall end diff --git a/data/scripts/maps/LittlerootTown.inc b/data/scripts/maps/LittlerootTown.inc index 79b89e157..e3f9b1dc7 100644 --- a/data/scripts/maps/LittlerootTown.inc +++ b/data/scripts/maps/LittlerootTown.inc @@ -100,28 +100,28 @@ LittlerootTown_EventScript_14D60D:: @ 814D60D LittlerootTown_EventScript_14D62B:: @ 814D62B delay 15 playse 10 - move 255, LittlerootTown_Movement_14D6C0 - waitmove 0 + applymovement 255, LittlerootTown_Movement_14D6C0 + waitmovement 0 setdooropened 0x8004, 0x8005 doorchange reappear 4 - move 4, LittlerootTown_Movement_14D6AC - waitmove 0 + applymovement 4, LittlerootTown_Movement_14D6AC + waitmovement 0 setdoorclosed 0x8004, 0x8005 doorchange delay 10 - move 4, LittlerootTown_Movement_14D6AE - waitmove 0 + applymovement 4, LittlerootTown_Movement_14D6AE + waitmovement 0 msgbox LittlerootTown_Text_16A7C9, 4 closebutton - move 4, LittlerootTown_Movement_14D6B1 - move 255, LittlerootTown_Movement_14D6B8 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14D6B1 + applymovement 255, LittlerootTown_Movement_14D6B8 + waitmovement 0 setdooropened 0x8004, 0x8005 doorchange - move 4, LittlerootTown_Movement_14D6B5 - move 255, LittlerootTown_Movement_14D6BD - waitmove 0 + applymovement 4, LittlerootTown_Movement_14D6B5 + applymovement 255, LittlerootTown_Movement_14D6BD + waitmovement 0 setflag 752 setvar 0x4092, 3 spriteinvisible 255, 0, 0 @@ -200,8 +200,8 @@ LittlerootTown_EventScript_14D6DF:: @ 814D6DF LittlerootTown_EventScript_14D708:: @ 814D708 msgbox LittlerootTown_Text_16AD82, 4 closebutton - move 1, LittlerootTown_Movement_1A083D - waitmove 0 + applymovement 1, LittlerootTown_Movement_1A083D + waitmovement 0 setvar 0x4050, 2 release end @@ -219,20 +219,20 @@ LittlerootTown_EventScript_14D72F:: @ 814D72F LittlerootTown_EventScript_14D739:: @ 814D739 lockall - move 1, LittlerootTown_Movement_14D779 - waitmove 0 + applymovement 1, LittlerootTown_Movement_14D779 + waitmovement 0 call LittlerootTown_EventScript_14D755 - move 1, LittlerootTown_Movement_14D789 - waitmove 0 + applymovement 1, LittlerootTown_Movement_14D789 + waitmovement 0 releaseall end LittlerootTown_EventScript_14D755:: @ 814D755 msgbox LittlerootTown_Text_16ACEB, 4 closebutton - move 1, LittlerootTown_Movement_14D787 - move 255, LittlerootTown_Movement_14D793 - waitmove 0 + applymovement 1, LittlerootTown_Movement_14D787 + applymovement 255, LittlerootTown_Movement_14D793 + waitmovement 0 msgbox LittlerootTown_Text_16AD3C, 4 closebutton return @@ -277,11 +277,11 @@ LittlerootTown_Movement_14D793:: @ 814D793 LittlerootTown_EventScript_14D797:: @ 814D797 lockall - move 1, LittlerootTown_Movement_14D7B3 - waitmove 0 + applymovement 1, LittlerootTown_Movement_14D7B3 + waitmovement 0 call LittlerootTown_EventScript_14D755 - move 1, LittlerootTown_Movement_14D7C0 - waitmove 0 + applymovement 1, LittlerootTown_Movement_14D7C0 + waitmovement 0 releaseall end @@ -311,14 +311,14 @@ LittlerootTown_Movement_14D7C0:: @ 814D7C0 LittlerootTown_EventScript_14D7C7:: @ 814D7C7 lockall - move 1, LittlerootTown_Movement_1A0843 - waitmove 0 - move 255, LittlerootTown_Movement_1A083F - waitmove 0 + applymovement 1, LittlerootTown_Movement_1A0843 + waitmovement 0 + applymovement 255, LittlerootTown_Movement_1A083F + waitmovement 0 msgbox LittlerootTown_Text_16AD82, 4 closebutton - move 1, LittlerootTown_Movement_1A083D - waitmove 0 + applymovement 1, LittlerootTown_Movement_1A083D + waitmovement 0 setvar 0x4050, 2 releaseall end @@ -443,13 +443,13 @@ LittlerootTown_EventScript_14D931:: @ 814D931 return LittlerootTown_EventScript_14D93C:: @ 814D93C - move 4, LittlerootTown_Movement_1A0843 - waitmove 0 + applymovement 4, LittlerootTown_Movement_1A0843 + waitmovement 0 return LittlerootTown_EventScript_14D947:: @ 814D947 - move 4, LittlerootTown_Movement_1A083F - waitmove 0 + applymovement 4, LittlerootTown_Movement_1A083F + waitmovement 0 return LittlerootTown_EventScript_14D952:: @ 814D952 @@ -483,73 +483,73 @@ LittlerootTown_EventScript_14D995:: @ 814D995 return LittlerootTown_EventScript_14D9D8:: @ 814D9D8 - move 255, LittlerootTown_Movement_1A0845 - waitmove 0 - move 4, LittlerootTown_Movement_14DC76 - waitmove 0 + applymovement 255, LittlerootTown_Movement_1A0845 + waitmovement 0 + applymovement 4, LittlerootTown_Movement_14DC76 + waitmovement 0 return LittlerootTown_EventScript_14D9ED:: @ 814D9ED - move 255, LittlerootTown_Movement_1A0845 - waitmove 0 - move 4, LittlerootTown_Movement_14DC7D - waitmove 0 + applymovement 255, LittlerootTown_Movement_1A0845 + waitmovement 0 + applymovement 4, LittlerootTown_Movement_14DC7D + waitmovement 0 return LittlerootTown_EventScript_14DA02:: @ 814DA02 - move 255, LittlerootTown_Movement_1A083F - waitmove 0 - move 4, LittlerootTown_Movement_14DC84 - waitmove 0 + applymovement 255, LittlerootTown_Movement_1A083F + waitmovement 0 + applymovement 4, LittlerootTown_Movement_14DC84 + waitmovement 0 return LittlerootTown_EventScript_14DA17:: @ 814DA17 - move 255, LittlerootTown_Movement_1A083F - waitmove 0 - move 4, LittlerootTown_Movement_14DC89 - waitmove 0 + applymovement 255, LittlerootTown_Movement_1A083F + waitmovement 0 + applymovement 4, LittlerootTown_Movement_14DC89 + waitmovement 0 return LittlerootTown_EventScript_14DA2C:: @ 814DA2C - move 255, LittlerootTown_Movement_1A083F - waitmove 0 - move 4, LittlerootTown_Movement_14DC8F - waitmove 0 + applymovement 255, LittlerootTown_Movement_1A083F + waitmovement 0 + applymovement 4, LittlerootTown_Movement_14DC8F + waitmovement 0 return LittlerootTown_EventScript_14DA41:: @ 814DA41 - move 255, LittlerootTown_Movement_1A083F - waitmove 0 - move 4, LittlerootTown_Movement_14DC92 - waitmove 0 + applymovement 255, LittlerootTown_Movement_1A083F + waitmovement 0 + applymovement 4, LittlerootTown_Movement_14DC92 + waitmovement 0 return LittlerootTown_EventScript_14DA56:: @ 814DA56 - move 255, LittlerootTown_Movement_1A0843 - waitmove 0 - move 4, LittlerootTown_Movement_14DC96 - waitmove 0 + applymovement 255, LittlerootTown_Movement_1A0843 + waitmovement 0 + applymovement 4, LittlerootTown_Movement_14DC96 + waitmovement 0 return LittlerootTown_EventScript_14DA6B:: @ 814DA6B - move 255, LittlerootTown_Movement_1A0843 - waitmove 0 - move 4, LittlerootTown_Movement_14DC9A - waitmove 0 + applymovement 255, LittlerootTown_Movement_1A0843 + waitmovement 0 + applymovement 4, LittlerootTown_Movement_14DC9A + waitmovement 0 return LittlerootTown_EventScript_14DA80:: @ 814DA80 - move 255, LittlerootTown_Movement_1A0843 - waitmove 0 - move 4, LittlerootTown_Movement_14DC9D - waitmove 0 + applymovement 255, LittlerootTown_Movement_1A0843 + waitmovement 0 + applymovement 4, LittlerootTown_Movement_14DC9D + waitmovement 0 return LittlerootTown_EventScript_14DA95:: @ 814DA95 - move 255, LittlerootTown_Movement_1A0843 - waitmove 0 - move 4, LittlerootTown_Movement_14DCA3 - waitmove 0 + applymovement 255, LittlerootTown_Movement_1A0843 + waitmovement 0 + applymovement 4, LittlerootTown_Movement_14DCA3 + waitmovement 0 return LittlerootTown_EventScript_14DAAA:: @ 814DAAA @@ -583,106 +583,106 @@ LittlerootTown_EventScript_14DAED:: @ 814DAED return LittlerootTown_EventScript_14DB30:: @ 814DB30 - move 4, LittlerootTown_Movement_14DCA8 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCA8 + waitmovement 0 return LittlerootTown_EventScript_14DB3B:: @ 814DB3B - move 4, LittlerootTown_Movement_14DCAE - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCAE + waitmovement 0 return LittlerootTown_EventScript_14DB46:: @ 814DB46 - move 4, LittlerootTown_Movement_14DCB4 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCB4 + waitmovement 0 setdooropened 0x8009, 0x800a doorchange - move 4, LittlerootTown_Movement_14DCE0 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCE0 + waitmovement 0 spriteinvisible 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return LittlerootTown_EventScript_14DB6C:: @ 814DB6C - move 4, LittlerootTown_Movement_14DCBA - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCBA + waitmovement 0 setdooropened 0x8009, 0x800a doorchange - move 4, LittlerootTown_Movement_14DCE0 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCE0 + waitmovement 0 spriteinvisible 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return LittlerootTown_EventScript_14DB92:: @ 814DB92 - move 4, LittlerootTown_Movement_14DCC1 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCC1 + waitmovement 0 setdooropened 0x8009, 0x800a doorchange - move 4, LittlerootTown_Movement_14DCE0 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCE0 + waitmovement 0 spriteinvisible 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return LittlerootTown_EventScript_14DBB8:: @ 814DBB8 - move 4, LittlerootTown_Movement_14DCC5 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCC5 + waitmovement 0 setdooropened 0x8009, 0x800a doorchange - move 4, LittlerootTown_Movement_14DCE0 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCE0 + waitmovement 0 spriteinvisible 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return LittlerootTown_EventScript_14DBDE:: @ 814DBDE - move 4, LittlerootTown_Movement_14DCCA - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCCA + waitmovement 0 setdooropened 0x8009, 0x800a doorchange - move 4, LittlerootTown_Movement_14DCE0 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCE0 + waitmovement 0 spriteinvisible 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return LittlerootTown_EventScript_14DC04:: @ 814DC04 - move 4, LittlerootTown_Movement_14DCCF - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCCF + waitmovement 0 setdooropened 0x8009, 0x800a doorchange - move 4, LittlerootTown_Movement_14DCE0 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCE0 + waitmovement 0 spriteinvisible 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return LittlerootTown_EventScript_14DC2A:: @ 814DC2A - move 4, LittlerootTown_Movement_14DCD3 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCD3 + waitmovement 0 setdooropened 0x8009, 0x800a doorchange - move 4, LittlerootTown_Movement_14DCE0 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCE0 + waitmovement 0 spriteinvisible 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return LittlerootTown_EventScript_14DC50:: @ 814DC50 - move 4, LittlerootTown_Movement_14DCDA - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCDA + waitmovement 0 setdooropened 0x8009, 0x800a doorchange - move 4, LittlerootTown_Movement_14DCE0 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCE0 + waitmovement 0 spriteinvisible 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange @@ -847,12 +847,12 @@ LittlerootTown_EventScript_14DCE2:: @ 814DCE2 compare_var_to_imm RESULT, 1 call_if 1, LittlerootTown_EventScript_14D931 call LittlerootTown_EventScript_14DD38 - move 4, LittlerootTown_Movement_1A0841 - waitmove 0 + applymovement 4, LittlerootTown_Movement_1A0841 + waitmovement 0 setdooropened 0x8009, 0x800a doorchange - move 4, LittlerootTown_Movement_14DCE0 - waitmove 0 + applymovement 4, LittlerootTown_Movement_14DCE0 + waitmovement 0 spriteinvisible 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc index f0440a49e..7f3f3f5cf 100644 --- a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc @@ -62,9 +62,9 @@ LittlerootTown_BrendansHouse_1F_EventScript_1526FA:: @ 81526FA lockall msgbox LittlerootTown_BrendansHouse_1F_Text_172574, 4 closebutton - move 255, LittlerootTown_BrendansHouse_1F_Movement_152720 - move 1, LittlerootTown_BrendansHouse_1F_Movement_152720 - waitmove 0 + applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_152720 + applymovement 1, LittlerootTown_BrendansHouse_1F_Movement_152720 + waitmovement 0 warp LittlerootTown_BrendansHouse_2F, 255, 7, 1 waitstate releaseall @@ -91,13 +91,13 @@ LittlerootTown_BrendansHouse_1F_EventScript_152733:: @ 8152733 LittlerootTown_BrendansHouse_1F_EventScript_152744:: @ 8152744 lockall playse 21 - move 4, LittlerootTown_BrendansHouse_1F_Movement_1A0833 - waitmove 0 - move 4, LittlerootTown_BrendansHouse_1F_Movement_1A0835 - waitmove 0 - move 255, LittlerootTown_BrendansHouse_1F_Movement_1A083F - move 4, LittlerootTown_BrendansHouse_1F_Movement_152782 - waitmove 0 + applymovement 4, LittlerootTown_BrendansHouse_1F_Movement_1A0833 + waitmovement 0 + applymovement 4, LittlerootTown_BrendansHouse_1F_Movement_1A0835 + waitmovement 0 + applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1A083F + applymovement 4, LittlerootTown_BrendansHouse_1F_Movement_152782 + waitmovement 0 special GetRivalSonDaughterString msgbox LittlerootTown_BrendansHouse_1F_Text_1730C2, 4 setflag 87 @@ -118,7 +118,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_152789:: @ 8152789 lockall setvar 0x8004, 1 setvar 0x8005, 0 - move 0x8004, LittlerootTown_BrendansHouse_1F_Movement_1A083F - waitmove 0 + applymovement 0x8004, LittlerootTown_BrendansHouse_1F_Movement_1A083F + waitmovement 0 goto LittlerootTown_BrendansHouse_1F_EventScript_1B69B7 end diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc index 882c5ede3..022e98b2a 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc @@ -62,9 +62,9 @@ LittlerootTown_MaysHouse_1F_EventScript_152938:: @ 8152938 lockall msgbox LittlerootTown_MaysHouse_1F_Text_172574, 4 closebutton - move 255, LittlerootTown_MaysHouse_1F_Movement_15295E - move 1, LittlerootTown_MaysHouse_1F_Movement_15295E - waitmove 0 + applymovement 255, LittlerootTown_MaysHouse_1F_Movement_15295E + applymovement 1, LittlerootTown_MaysHouse_1F_Movement_15295E + waitmovement 0 warp LittlerootTown_MaysHouse_2F, 255, 1, 1 waitstate releaseall @@ -91,13 +91,13 @@ LittlerootTown_MaysHouse_1F_EventScript_152971:: @ 8152971 LittlerootTown_MaysHouse_1F_EventScript_152982:: @ 8152982 lockall playse 21 - move 4, LittlerootTown_MaysHouse_1F_Movement_1A0833 - waitmove 0 - move 4, LittlerootTown_MaysHouse_1F_Movement_1A0835 - waitmove 0 - move 255, LittlerootTown_MaysHouse_1F_Movement_1A0843 - move 4, LittlerootTown_MaysHouse_1F_Movement_1529C0 - waitmove 0 + applymovement 4, LittlerootTown_MaysHouse_1F_Movement_1A0833 + waitmovement 0 + applymovement 4, LittlerootTown_MaysHouse_1F_Movement_1A0835 + waitmovement 0 + applymovement 255, LittlerootTown_MaysHouse_1F_Movement_1A0843 + applymovement 4, LittlerootTown_MaysHouse_1F_Movement_1529C0 + waitmovement 0 special GetRivalSonDaughterString msgbox LittlerootTown_MaysHouse_1F_Text_1730C2, 4 setflag 87 @@ -165,7 +165,7 @@ LittlerootTown_MaysHouse_1F_EventScript_152A35:: @ 8152A35 lockall setvar 0x8004, 1 setvar 0x8005, 1 - move 0x8004, LittlerootTown_MaysHouse_1F_Movement_1A0843 - waitmove 0 + applymovement 0x8004, LittlerootTown_MaysHouse_1F_Movement_1A0843 + waitmovement 0 goto LittlerootTown_MaysHouse_1F_EventScript_1B69B7 end diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc index b9dca087f..cf2033919 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc @@ -49,12 +49,12 @@ LittlerootTown_MaysHouse_2F_EventScript_152A9D:: @ 8152A9D LittlerootTown_BrendansHouse_2F_EventScript_152AD4:: @ 8152AD4 msgbox LittlerootTown_BrendansHouse_2F_Text_17337E, 4 playbgm 415, 1 - move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0839 - waitmove 0 - move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0833 - waitmove 0 - move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0835 - waitmove 0 + applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0839 + waitmovement 0 + applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0833 + waitmovement 0 + applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0835 + waitmovement 0 msgbox LittlerootTown_BrendansHouse_2F_Text_1733AF, 4 closebutton compare_var_to_imm FACING, 4 @@ -66,29 +66,29 @@ LittlerootTown_BrendansHouse_2F_EventScript_152AD4:: @ 8152AD4 return LittlerootTown_BrendansHouse_2F_EventScript_152B29:: @ 8152B29 - move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_152C11 - waitmove 0 + applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_152C11 + waitmovement 0 return LittlerootTown_BrendansHouse_2F_EventScript_152B34:: @ 8152B34 - move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_152C1C - waitmove 0 + applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_152C1C + waitmovement 0 return LittlerootTown_BrendansHouse_2F_EventScript_152B3F:: @ 8152B3F - move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_152C1C - waitmove 0 + applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_152C1C + waitmovement 0 return LittlerootTown_BrendansHouse_2F_EventScript_152B4A:: @ 8152B4A msgbox LittlerootTown_BrendansHouse_2F_Text_1735C9, 4 playbgm 421, 1 - move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0839 - waitmove 0 - move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0833 - waitmove 0 - move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0835 - waitmove 0 + applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0839 + waitmovement 0 + applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0833 + waitmovement 0 + applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0835 + waitmovement 0 msgbox LittlerootTown_BrendansHouse_2F_Text_1735FC, 4 closebutton compare_var_to_imm FACING, 4 @@ -100,18 +100,18 @@ LittlerootTown_BrendansHouse_2F_EventScript_152B4A:: @ 8152B4A return LittlerootTown_BrendansHouse_2F_EventScript_152B9F:: @ 8152B9F - move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_152C30 - waitmove 0 + applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_152C30 + waitmovement 0 return LittlerootTown_BrendansHouse_2F_EventScript_152BAA:: @ 8152BAA - move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_152C25 - waitmove 0 + applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_152C25 + waitmovement 0 return LittlerootTown_BrendansHouse_2F_EventScript_152BB5:: @ 8152BB5 - move LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0839 - waitmove 0 + applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0839 + waitmovement 0 checkgender compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152BDB diff --git a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc index 092d50545..d6576be92 100644 --- a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc +++ b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc @@ -67,8 +67,8 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152D2B:: @ 8152D2B LittlerootTown_ProfessorBirchsLab_EventScript_152D4A:: @ 8152D4A lockall - move 255, LittlerootTown_ProfessorBirchsLab_Movement_152D5B - waitmove 0 + applymovement 255, LittlerootTown_ProfessorBirchsLab_Movement_152D5B + waitmovement 0 goto LittlerootTown_ProfessorBirchsLab_EventScript_152DBA end @@ -119,10 +119,10 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152DBA:: @ 8152DBA msgbox LittlerootTown_ProfessorBirchsLab_Text_17411F, 4 call LittlerootTown_ProfessorBirchsLab_EventScript_152E6D msgbox LittlerootTown_ProfessorBirchsLab_Text_174248, 4 - move 3, LittlerootTown_ProfessorBirchsLab_Movement_152E97 - waitmove 0 - move 255, LittlerootTown_ProfessorBirchsLab_Movement_1A0843 - waitmove 0 + applymovement 3, LittlerootTown_ProfessorBirchsLab_Movement_152E97 + waitmovement 0 + applymovement 255, LittlerootTown_ProfessorBirchsLab_Movement_1A0843 + waitmovement 0 checkgender compare_var_to_imm RESULT, 0 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E13 diff --git a/data/scripts/maps/MauvilleCity.inc b/data/scripts/maps/MauvilleCity.inc index da0ff3a62..6ebd36749 100644 --- a/data/scripts/maps/MauvilleCity.inc +++ b/data/scripts/maps/MauvilleCity.inc @@ -71,16 +71,16 @@ MauvilleCity_EventScript_14C0C4:: @ 814C0C4 goto_if_eq MauvilleCity_EventScript_14C0E4 msgbox MauvilleCity_Text_165B76, 4 closebutton - move 7, MauvilleCity_Movement_1A083D - waitmove 0 + applymovement 7, MauvilleCity_Movement_1A083D + waitmovement 0 release end MauvilleCity_EventScript_14C0E4:: @ 814C0E4 msgbox MauvilleCity_Text_165E45, 4 closebutton - move 7, MauvilleCity_Movement_1A083D - waitmove 0 + applymovement 7, MauvilleCity_Movement_1A083D + waitmovement 0 release end @@ -88,18 +88,18 @@ MauvilleCity_EventScript_14C0F9:: @ 814C0F9 lockall checkflag 284 goto_if_eq MauvilleCity_EventScript_14C292 - move 6, MauvilleCity_Movement_1A0843 - waitmove 0 + applymovement 6, MauvilleCity_Movement_1A0843 + waitmovement 0 msgbox MauvilleCity_Text_165BE3, 4 msgbox MauvilleCity_Text_165C57, 4 msgbox MauvilleCity_Text_165D01, 4 - move 6, MauvilleCity_Movement_1A0839 - waitmove 0 + applymovement 6, MauvilleCity_Movement_1A0839 + waitmovement 0 playse 21 - move 6, MauvilleCity_Movement_1A0833 - waitmove 0 - move 6, MauvilleCity_Movement_1A0835 - waitmove 0 + applymovement 6, MauvilleCity_Movement_1A0833 + waitmovement 0 + applymovement 6, MauvilleCity_Movement_1A0835 + waitmovement 0 msgbox MauvilleCity_Text_165D50, 5 goto MauvilleCity_EventScript_14C154 end @@ -116,40 +116,40 @@ MauvilleCity_EventScript_14C154:: @ 814C154 end MauvilleCity_EventScript_14C187:: @ 814C187 - move 6, MauvilleCity_Movement_14C2AA - move 7, MauvilleCity_Movement_14C2CC - waitmove 0 - move 6, MauvilleCity_Movement_1A0843 - waitmove 0 + applymovement 6, MauvilleCity_Movement_14C2AA + applymovement 7, MauvilleCity_Movement_14C2CC + waitmovement 0 + applymovement 6, MauvilleCity_Movement_1A0843 + waitmovement 0 delay 30 - move 7, MauvilleCity_Movement_14C2D8 - waitmove 0 - move 255, MauvilleCity_Movement_1A0845 - waitmove 0 + applymovement 7, MauvilleCity_Movement_14C2D8 + waitmovement 0 + applymovement 255, MauvilleCity_Movement_1A0845 + waitmovement 0 msgbox MauvilleCity_Text_1660FA, 4 closebutton - move 6, MauvilleCity_Movement_14C2B6 - move 7, MauvilleCity_Movement_14C2DF - waitmove 0 + applymovement 6, MauvilleCity_Movement_14C2B6 + applymovement 7, MauvilleCity_Movement_14C2DF + waitmovement 0 goto MauvilleCity_EventScript_14C22B end MauvilleCity_EventScript_14C1D9:: @ 814C1D9 - move 6, MauvilleCity_Movement_14C2B0 - move 7, MauvilleCity_Movement_14C2D2 - waitmove 0 - move 6, MauvilleCity_Movement_1A0843 - waitmove 0 + applymovement 6, MauvilleCity_Movement_14C2B0 + applymovement 7, MauvilleCity_Movement_14C2D2 + waitmovement 0 + applymovement 6, MauvilleCity_Movement_1A0843 + waitmovement 0 delay 30 - move 7, MauvilleCity_Movement_14C2DC - waitmove 0 - move 255, MauvilleCity_Movement_1A0845 - waitmove 0 + applymovement 7, MauvilleCity_Movement_14C2DC + waitmovement 0 + applymovement 255, MauvilleCity_Movement_1A0845 + waitmovement 0 msgbox MauvilleCity_Text_1660FA, 4 closebutton - move 6, MauvilleCity_Movement_14C2C1 - move 7, MauvilleCity_Movement_14C2E8 - waitmove 0 + applymovement 6, MauvilleCity_Movement_14C2C1 + applymovement 7, MauvilleCity_Movement_14C2E8 + waitmovement 0 goto MauvilleCity_EventScript_14C22B end @@ -165,14 +165,14 @@ MauvilleCity_EventScript_14C22B:: @ 814C22B MauvilleCity_EventScript_14C23C:: @ 814C23C msgbox MauvilleCity_Text_165F0D, 4 trainerbattle 3, OPPONENT_WALLY_2, 0, MauvilleCity_Text_165F38 - move 6, MauvilleCity_Movement_1A0843 - waitmove 0 + applymovement 6, MauvilleCity_Movement_1A0843 + waitmovement 0 msgbox MauvilleCity_Text_165F85, 4 - move 6, MauvilleCity_Movement_1A0839 - waitmove 0 + applymovement 6, MauvilleCity_Movement_1A0839 + waitmovement 0 msgbox MauvilleCity_Text_165FB3, 4 - move 6, MauvilleCity_Movement_1A0843 - waitmove 0 + applymovement 6, MauvilleCity_Movement_1A0843 + waitmovement 0 msgbox MauvilleCity_Text_166050, 4 return @@ -183,8 +183,8 @@ MauvilleCity_EventScript_14C285:: @ 814C285 end MauvilleCity_EventScript_14C292:: @ 814C292 - move 6, MauvilleCity_Movement_1A0839 - waitmove 0 + applymovement 6, MauvilleCity_Movement_1A0839 + waitmovement 0 msgbox MauvilleCity_Text_165EE2, 5 goto MauvilleCity_EventScript_14C154 end diff --git a/data/scripts/maps/MauvilleCity_GameCorner.inc b/data/scripts/maps/MauvilleCity_GameCorner.inc index 63476bb1a..bc49cd481 100644 --- a/data/scripts/maps/MauvilleCity_GameCorner.inc +++ b/data/scripts/maps/MauvilleCity_GameCorner.inc @@ -500,8 +500,8 @@ MauvilleCity_GameCorner_EventScript_1570F8:: @ 81570F8 MauvilleCity_GameCorner_EventScript_157108:: @ 8157108 closebutton - move LAST_TALKED, MauvilleCity_GameCorner_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, MauvilleCity_GameCorner_Movement_1A083D + waitmovement 0 release end diff --git a/data/scripts/maps/MauvilleCity_House2.inc b/data/scripts/maps/MauvilleCity_House2.inc index 4308fd5ab..3f9ba59f3 100644 --- a/data/scripts/maps/MauvilleCity_House2.inc +++ b/data/scripts/maps/MauvilleCity_House2.inc @@ -15,10 +15,10 @@ MauvilleCity_House2_EventScript_1572C0:: @ 81572C0 MauvilleCity_House2_EventScript_1572E5:: @ 81572E5 playse 21 - move LAST_TALKED, MauvilleCity_House2_Movement_1A0833 - waitmove 0 - move LAST_TALKED, MauvilleCity_House2_Movement_1A0835 - waitmove 0 + applymovement LAST_TALKED, MauvilleCity_House2_Movement_1A0833 + waitmovement 0 + applymovement LAST_TALKED, MauvilleCity_House2_Movement_1A0835 + waitmovement 0 msgbox MauvilleCity_House2_Text_1824D8, 5 compare_var_to_imm RESULT, 1 goto_if_eq MauvilleCity_House2_EventScript_15731B diff --git a/data/scripts/maps/MeteorFalls_1F_1R.inc b/data/scripts/maps/MeteorFalls_1F_1R.inc index 07e264fa8..8d78d1496 100644 --- a/data/scripts/maps/MeteorFalls_1F_1R.inc +++ b/data/scripts/maps/MeteorFalls_1F_1R.inc @@ -8,72 +8,72 @@ MeteorFalls_1F_1R_MapScript1_15C496:: @ 815C496 MeteorFalls_1F_1R_EventScript_15C49C:: @ 815C49C lockall - move 255, MeteorFalls_1F_1R_Movement_1A0845 - waitmove 0 + applymovement 255, MeteorFalls_1F_1R_Movement_1A0845 + waitmovement 0 delay 30 - move 5, MeteorFalls_1F_1R_Movement_1A0845 - waitmove 0 + applymovement 5, MeteorFalls_1F_1R_Movement_1A0845 + waitmovement 0 msgbox MeteorFalls_1F_1R_Text_193237, 4 closebutton - move 5, MeteorFalls_1F_1R_Movement_1A0841 - move 6, MeteorFalls_1F_1R_Movement_1A0841 - waitmove 0 + applymovement 5, MeteorFalls_1F_1R_Movement_1A0841 + applymovement 6, MeteorFalls_1F_1R_Movement_1A0841 + waitmovement 0 playse 21 - move 5, MeteorFalls_1F_1R_Movement_1A0833 - waitmove 0 - move 5, MeteorFalls_1F_1R_Movement_1A0835 - waitmove 0 + applymovement 5, MeteorFalls_1F_1R_Movement_1A0833 + waitmovement 0 + applymovement 5, MeteorFalls_1F_1R_Movement_1A0835 + waitmovement 0 msgbox MeteorFalls_1F_1R_Text_193268, 4 closebutton - move 5, MeteorFalls_1F_1R_Movement_15C5EE - waitmove 0 + applymovement 5, MeteorFalls_1F_1R_Movement_15C5EE + waitmovement 0 msgbox MeteorFalls_1F_1R_Text_1932C5, 4 closebutton - move 255, MeteorFalls_1F_1R_Movement_1A083F - move 5, MeteorFalls_1F_1R_Movement_1A083F - move 6, MeteorFalls_1F_1R_Movement_1A083F - waitmove 0 + applymovement 255, MeteorFalls_1F_1R_Movement_1A083F + applymovement 5, MeteorFalls_1F_1R_Movement_1A083F + applymovement 6, MeteorFalls_1F_1R_Movement_1A083F + waitmovement 0 reappear 7 reappear 8 reappear 9 - move 7, MeteorFalls_1F_1R_Movement_15C608 - move 8, MeteorFalls_1F_1R_Movement_15C60F - move 9, MeteorFalls_1F_1R_Movement_15C617 - waitmove 0 - move 5, MeteorFalls_1F_1R_Movement_1A083F - move 6, MeteorFalls_1F_1R_Movement_1A083F - waitmove 0 + applymovement 7, MeteorFalls_1F_1R_Movement_15C608 + applymovement 8, MeteorFalls_1F_1R_Movement_15C60F + applymovement 9, MeteorFalls_1F_1R_Movement_15C617 + waitmovement 0 + applymovement 5, MeteorFalls_1F_1R_Movement_1A083F + applymovement 6, MeteorFalls_1F_1R_Movement_1A083F + waitmovement 0 msgbox MeteorFalls_1F_1R_Text_193320, 4 closebutton - move 255, MeteorFalls_1F_1R_Movement_15C64F - move 5, MeteorFalls_1F_1R_Movement_15C5F1 - move 6, MeteorFalls_1F_1R_Movement_15C5FC - waitmove 0 + applymovement 255, MeteorFalls_1F_1R_Movement_15C64F + applymovement 5, MeteorFalls_1F_1R_Movement_15C5F1 + applymovement 6, MeteorFalls_1F_1R_Movement_15C5FC + waitmovement 0 disappear 5 disappear 6 - move 7, MeteorFalls_1F_1R_Movement_15C628 - waitmove 0 + applymovement 7, MeteorFalls_1F_1R_Movement_15C628 + waitmovement 0 .ifdef SAPPHIRE msgbox MeteorFalls_1F_1R_Text_1933EC, 4 .else msgbox MeteorFalls_1F_1R_Text_193584, 4 .endif closebutton - move 8, MeteorFalls_1F_1R_Movement_15C639 - move 9, MeteorFalls_1F_1R_Movement_15C64A - waitmove 0 + applymovement 8, MeteorFalls_1F_1R_Movement_15C639 + applymovement 9, MeteorFalls_1F_1R_Movement_15C64A + waitmovement 0 msgbox MeteorFalls_1F_1R_Text_193720, 4 - move 7, MeteorFalls_1F_1R_Movement_1A0845 - waitmove 0 + applymovement 7, MeteorFalls_1F_1R_Movement_1A0845 + waitmovement 0 msgbox MeteorFalls_1F_1R_Text_193747, 4 - move 7, MeteorFalls_1F_1R_Movement_1A083F - waitmove 0 + applymovement 7, MeteorFalls_1F_1R_Movement_1A083F + waitmovement 0 msgbox MeteorFalls_1F_1R_Text_1937AA, 4 closebutton - move 7, MeteorFalls_1F_1R_Movement_15C61F - move 8, MeteorFalls_1F_1R_Movement_15C62E - move 9, MeteorFalls_1F_1R_Movement_15C63E - waitmove 0 + applymovement 7, MeteorFalls_1F_1R_Movement_15C61F + applymovement 8, MeteorFalls_1F_1R_Movement_15C62E + applymovement 9, MeteorFalls_1F_1R_Movement_15C63E + waitmovement 0 disappear 7 disappear 8 disappear 9 diff --git a/data/scripts/maps/MossdeepCity.inc b/data/scripts/maps/MossdeepCity.inc index d01c85ff3..cd5d9840f 100644 --- a/data/scripts/maps/MossdeepCity.inc +++ b/data/scripts/maps/MossdeepCity.inc @@ -60,8 +60,8 @@ MossdeepCity_EventScript_14D011:: @ 814D011 lock faceplayer msgbox MossdeepCity_Text_16944E, 4 - move LAST_TALKED, MossdeepCity_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, MossdeepCity_Movement_1A083D + waitmovement 0 release end diff --git a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc index 453b611cc..8d889a7d6 100644 --- a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc +++ b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc @@ -42,13 +42,13 @@ MossdeepCity_GameCorner_1F_MapScript2_15ACBB:: @ 815ACBB MossdeepCity_GameCorner_1F_EventScript_15ACD5:: @ 815ACD5 lockall - move 255, MossdeepCity_GameCorner_1F_Movement_15AD3D - waitmove 0 - move 1, MossdeepCity_GameCorner_1F_Movement_15AD3F - waitmove 0 + applymovement 255, MossdeepCity_GameCorner_1F_Movement_15AD3D + waitmovement 0 + applymovement 1, MossdeepCity_GameCorner_1F_Movement_15AD3F + waitmovement 0 moveoffscreen 1 - move 255, MossdeepCity_GameCorner_1F_Movement_1A0841 - waitmove 0 + applymovement 255, MossdeepCity_GameCorner_1F_Movement_1A0841 + waitmovement 0 compare_var_to_imm 0x40c0, 1 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AD22 compare_var_to_imm 0x40c0, 2 @@ -136,21 +136,21 @@ MossdeepCity_GameCorner_1F_EventScript_15ADF5:: @ 815ADF5 return MossdeepCity_GameCorner_1F_EventScript_15AE04:: @ 815AE04 - move LAST_TALKED, MossdeepCity_GameCorner_1F_Movement_15AE46 - move 255, MossdeepCity_GameCorner_1F_Movement_15AE3A - waitmove 0 + applymovement LAST_TALKED, MossdeepCity_GameCorner_1F_Movement_15AE46 + applymovement 255, MossdeepCity_GameCorner_1F_Movement_15AE3A + waitmovement 0 return MossdeepCity_GameCorner_1F_EventScript_15AE16:: @ 815AE16 - move LAST_TALKED, MossdeepCity_GameCorner_1F_Movement_15AE49 - move 255, MossdeepCity_GameCorner_1F_Movement_15AE3E - waitmove 0 + applymovement LAST_TALKED, MossdeepCity_GameCorner_1F_Movement_15AE49 + applymovement 255, MossdeepCity_GameCorner_1F_Movement_15AE3E + waitmovement 0 return MossdeepCity_GameCorner_1F_EventScript_15AE28:: @ 815AE28 - move LAST_TALKED, MossdeepCity_GameCorner_1F_Movement_15AE46 - move 255, MossdeepCity_GameCorner_1F_Movement_15AE42 - waitmove 0 + applymovement LAST_TALKED, MossdeepCity_GameCorner_1F_Movement_15AE46 + applymovement 255, MossdeepCity_GameCorner_1F_Movement_15AE42 + waitmovement 0 return MossdeepCity_GameCorner_1F_Movement_15AE3A:: @ 815AE3A diff --git a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc index a7ae2f947..29400a80b 100644 --- a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc +++ b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc @@ -13,8 +13,8 @@ MossdeepCity_GameCorner_B1F_MapScript2_15AE64:: @ 815AE64 MossdeepCity_GameCorner_B1F_EventScript_15AE6E:: @ 815AE6E lockall - move 255, MossdeepCity_GameCorner_B1F_Movement_15AEF9 - waitmove 0 + applymovement 255, MossdeepCity_GameCorner_B1F_Movement_15AEF9 + waitmovement 0 special sub_81360C0 msgbox 0x20234cc, 4 closebutton @@ -30,8 +30,8 @@ MossdeepCity_GameCorner_B1F_EventScript_15AE6E:: @ 815AE6E call_if 1, MossdeepCity_GameCorner_B1F_EventScript_15AEEE closebutton special ScrSpecial_HealPlayerParty - move 255, MossdeepCity_GameCorner_B1F_Movement_15AEFF - waitmove 0 + applymovement 255, MossdeepCity_GameCorner_B1F_Movement_15AEFF + waitmovement 0 special LoadPlayerParty setvar 0x4001, 1 warp MossdeepCity_GameCorner_1F, 255, 3, 1 diff --git a/data/scripts/maps/MossdeepCity_Gym.inc b/data/scripts/maps/MossdeepCity_Gym.inc index de38e8fd0..838b7fd14 100644 --- a/data/scripts/maps/MossdeepCity_Gym.inc +++ b/data/scripts/maps/MossdeepCity_Gym.inc @@ -85,8 +85,8 @@ MossdeepCity_Gym_EventScript_15A5EA:: @ 815A5EA checkflag 100 goto_if_eq MossdeepCity_Gym_EventScript_15A621 setflag 100 - move 255, MossdeepCity_Gym_Movement_15A7F7 - waitmove 0 + applymovement 255, MossdeepCity_Gym_Movement_15A7F7 + waitmovement 0 setmaptile 5, 5, 516, 0 setmaptile 2, 7, 569, 1 goto MossdeepCity_Gym_EventScript_15A619 @@ -100,8 +100,8 @@ MossdeepCity_Gym_EventScript_15A619:: @ 815A619 MossdeepCity_Gym_EventScript_15A621:: @ 815A621 clearflag 100 - move 255, MossdeepCity_Gym_Movement_15A7F7 - waitmove 0 + applymovement 255, MossdeepCity_Gym_Movement_15A7F7 + waitmovement 0 setmaptile 5, 5, 524, 0 setmaptile 2, 7, 568, 1 goto MossdeepCity_Gym_EventScript_15A619 @@ -112,8 +112,8 @@ MossdeepCity_Gym_EventScript_15A646:: @ 815A646 checkflag 101 goto_if_eq MossdeepCity_Gym_EventScript_15A675 setflag 101 - move 255, MossdeepCity_Gym_Movement_15A7F7 - waitmove 0 + applymovement 255, MossdeepCity_Gym_Movement_15A7F7 + waitmovement 0 setmaptile 8, 14, 516, 0 setmaptile 8, 10, 569, 1 goto MossdeepCity_Gym_EventScript_15A619 @@ -121,8 +121,8 @@ MossdeepCity_Gym_EventScript_15A646:: @ 815A646 MossdeepCity_Gym_EventScript_15A675:: @ 815A675 clearflag 101 - move 255, MossdeepCity_Gym_Movement_15A7F7 - waitmove 0 + applymovement 255, MossdeepCity_Gym_Movement_15A7F7 + waitmovement 0 setmaptile 8, 14, 517, 0 setmaptile 8, 10, 568, 1 goto MossdeepCity_Gym_EventScript_15A619 @@ -133,8 +133,8 @@ MossdeepCity_Gym_EventScript_15A69A:: @ 815A69A checkflag 102 goto_if_eq MossdeepCity_Gym_EventScript_15A6C9 setflag 102 - move 255, MossdeepCity_Gym_Movement_15A7F7 - waitmove 0 + applymovement 255, MossdeepCity_Gym_Movement_15A7F7 + waitmovement 0 setmaptile 15, 17, 524, 0 setmaptile 17, 15, 569, 1 goto MossdeepCity_Gym_EventScript_15A619 @@ -142,8 +142,8 @@ MossdeepCity_Gym_EventScript_15A69A:: @ 815A69A MossdeepCity_Gym_EventScript_15A6C9:: @ 815A6C9 clearflag 102 - move 255, MossdeepCity_Gym_Movement_15A7F7 - waitmove 0 + applymovement 255, MossdeepCity_Gym_Movement_15A7F7 + waitmovement 0 setmaptile 15, 17, 516, 0 setmaptile 17, 15, 568, 1 goto MossdeepCity_Gym_EventScript_15A619 @@ -154,8 +154,8 @@ MossdeepCity_Gym_EventScript_15A6EE:: @ 815A6EE checkflag 103 goto_if_eq MossdeepCity_Gym_EventScript_15A71D setflag 103 - move 255, MossdeepCity_Gym_Movement_15A7F7 - waitmove 0 + applymovement 255, MossdeepCity_Gym_Movement_15A7F7 + waitmovement 0 setmaptile 1, 23, 525, 0 setmaptile 5, 24, 569, 1 goto MossdeepCity_Gym_EventScript_15A619 @@ -163,8 +163,8 @@ MossdeepCity_Gym_EventScript_15A6EE:: @ 815A6EE MossdeepCity_Gym_EventScript_15A71D:: @ 815A71D clearflag 103 - move 255, MossdeepCity_Gym_Movement_15A7F7 - waitmove 0 + applymovement 255, MossdeepCity_Gym_Movement_15A7F7 + waitmovement 0 setmaptile 1, 23, 516, 0 setmaptile 5, 24, 568, 1 goto MossdeepCity_Gym_EventScript_15A619 diff --git a/data/scripts/maps/MossdeepCity_House2.inc b/data/scripts/maps/MossdeepCity_House2.inc index e3485ae0d..660bc2c06 100644 --- a/data/scripts/maps/MossdeepCity_House2.inc +++ b/data/scripts/maps/MossdeepCity_House2.inc @@ -28,13 +28,13 @@ MossdeepCity_House2_EventScript_15A87B:: @ 815A87B end MossdeepCity_House2_EventScript_15A8AE:: @ 815A8AE - move 3, MossdeepCity_House2_Movement_15A8C4 - waitmove 0 + applymovement 3, MossdeepCity_House2_Movement_15A8C4 + waitmovement 0 return MossdeepCity_House2_EventScript_15A8B9:: @ 815A8B9 - move 3, MossdeepCity_House2_Movement_15A8CB - waitmove 0 + applymovement 3, MossdeepCity_House2_Movement_15A8CB + waitmovement 0 return MossdeepCity_House2_Movement_15A8C4:: @ 815A8C4 diff --git a/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc b/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc index 40ed4f4ef..b328a6784 100644 --- a/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc +++ b/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc @@ -12,8 +12,8 @@ MossdeepCity_SpaceCenter_1F_EventScript_15AB8B:: @ 815AB8B compare_var_to_imm RESULT, 1 call_if 4, MossdeepCity_SpaceCenter_1F_EventScript_15ABC3 closebutton - move LAST_TALKED, MossdeepCity_SpaceCenter_1F_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, MossdeepCity_SpaceCenter_1F_Movement_1A083D + waitmovement 0 release end @@ -57,7 +57,7 @@ MossdeepCity_SpaceCenter_1F_EventScript_15AC1F:: @ 815AC1F faceplayer msgbox MossdeepCity_SpaceCenter_1F_Text_18E427, 4 closebutton - move LAST_TALKED, MossdeepCity_SpaceCenter_1F_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, MossdeepCity_SpaceCenter_1F_Movement_1A083D + waitmovement 0 release end diff --git a/data/scripts/maps/MossdeepCity_StevensHouse.inc b/data/scripts/maps/MossdeepCity_StevensHouse.inc index d5004c644..31a9efcea 100644 --- a/data/scripts/maps/MossdeepCity_StevensHouse.inc +++ b/data/scripts/maps/MossdeepCity_StevensHouse.inc @@ -29,15 +29,15 @@ MossdeepCity_StevensHouse_MapScript2_15AA01:: @ 815AA01 MossdeepCity_StevensHouse_EventScript_15AA0B:: @ 815AA0B lockall - move 1, MossdeepCity_StevensHouse_Movement_1A083F - waitmove 0 + applymovement 1, MossdeepCity_StevensHouse_Movement_1A083F + waitmovement 0 playse 21 - move 1, MossdeepCity_StevensHouse_Movement_1A0833 - waitmove 0 - move 1, MossdeepCity_StevensHouse_Movement_1A0835 - waitmove 0 - move 1, MossdeepCity_StevensHouse_Movement_15AA6E - waitmove 0 + applymovement 1, MossdeepCity_StevensHouse_Movement_1A0833 + waitmovement 0 + applymovement 1, MossdeepCity_StevensHouse_Movement_1A0835 + waitmovement 0 + applymovement 1, MossdeepCity_StevensHouse_Movement_15AA6E + waitmovement 0 msgbox MossdeepCity_StevensHouse_Text_18DA77, 4 giveitem ITEM_HM08 setflag 123 @@ -45,8 +45,8 @@ MossdeepCity_StevensHouse_EventScript_15AA0B:: @ 815AA0B msgbox MossdeepCity_StevensHouse_Text_18DB22, 4 closebutton delay 20 - move 1, MossdeepCity_StevensHouse_Movement_15AA76 - waitmove 0 + applymovement 1, MossdeepCity_StevensHouse_Movement_15AA76 + waitmovement 0 setvar 0x40c6, 1 releaseall end diff --git a/data/scripts/maps/MtChimney_CableCarStation.inc b/data/scripts/maps/MtChimney_CableCarStation.inc index b61097fdc..43dee22b4 100644 --- a/data/scripts/maps/MtChimney_CableCarStation.inc +++ b/data/scripts/maps/MtChimney_CableCarStation.inc @@ -19,9 +19,9 @@ MtChimney_CableCarStation_MapScript2_15C11D:: @ 815C11D MtChimney_CableCarStation_EventScript_15C127:: @ 815C127 lockall - move 255, MtChimney_CableCarStation_Movement_15C1B4 - move 1, MtChimney_CableCarStation_Movement_15C1AA - waitmove 0 + applymovement 255, MtChimney_CableCarStation_Movement_15C1B4 + applymovement 1, MtChimney_CableCarStation_Movement_15C1AA + waitmovement 0 setvar 0x40a3, 0 movespriteperm 1, 6, 7 spritebehave 1, 8 @@ -41,9 +41,9 @@ MtChimney_CableCarStation_EventScript_15C14B:: @ 815C14B MtChimney_CableCarStation_EventScript_15C16C:: @ 815C16C msgbox MtChimney_CableCarStation_Text_1925A9, 4 closebutton - move 1, MtChimney_CableCarStation_Movement_15C1A5 - move 255, MtChimney_CableCarStation_Movement_15C1AF - waitmove 0 + applymovement 1, MtChimney_CableCarStation_Movement_15C1A5 + applymovement 255, MtChimney_CableCarStation_Movement_15C1AF + waitmovement 0 setvar 0x8004, 1 setvar 0x40a3, 2 inccounter GAME_STAT_RODE_CABLE_CAR diff --git a/data/scripts/maps/MtPyre_Summit.inc b/data/scripts/maps/MtPyre_Summit.inc index a558475c5..44d0760df 100644 --- a/data/scripts/maps/MtPyre_Summit.inc +++ b/data/scripts/maps/MtPyre_Summit.inc @@ -25,10 +25,10 @@ MtPyre_Summit_EventScript_15D4D5:: @ 815D4D5 end MtPyre_Summit_EventScript_15D4E1:: @ 815D4E1 - move 255, MtPyre_Summit_Movement_1A0841 - waitmove 0 - move 2, MtPyre_Summit_Movement_1A0845 - waitmove 0 + applymovement 255, MtPyre_Summit_Movement_1A0841 + waitmovement 0 + applymovement 2, MtPyre_Summit_Movement_1A0845 + waitmovement 0 delay 50 compare_var_to_imm 0x8008, 0 call_if 1, MtPyre_Summit_EventScript_15D593 @@ -78,35 +78,35 @@ MtPyre_Summit_EventScript_15D57A:: @ 815D57A return MtPyre_Summit_EventScript_15D593:: @ 815D593 - move 2, MtPyre_Summit_Movement_15D5E9 - waitmove 0 + applymovement 2, MtPyre_Summit_Movement_15D5E9 + waitmovement 0 return MtPyre_Summit_EventScript_15D59E:: @ 815D59E return MtPyre_Summit_EventScript_15D59F:: @ 815D59F - move 2, MtPyre_Summit_Movement_15D5EC - waitmove 0 + applymovement 2, MtPyre_Summit_Movement_15D5EC + waitmovement 0 return MtPyre_Summit_EventScript_15D5AA:: @ 815D5AA - move 3, MtPyre_Summit_Movement_15D5DF - waitmove 0 - move 255, MtPyre_Summit_Movement_1A0843 - waitmove 0 + applymovement 3, MtPyre_Summit_Movement_15D5DF + waitmovement 0 + applymovement 255, MtPyre_Summit_Movement_1A0843 + waitmovement 0 return MtPyre_Summit_EventScript_15D5BF:: @ 815D5BF - move 3, MtPyre_Summit_Movement_15D5E3 - waitmove 0 + applymovement 3, MtPyre_Summit_Movement_15D5E3 + waitmovement 0 return MtPyre_Summit_EventScript_15D5CA:: @ 815D5CA - move 3, MtPyre_Summit_Movement_15D5E5 - waitmove 0 - move 255, MtPyre_Summit_Movement_1A083F - waitmove 0 + applymovement 3, MtPyre_Summit_Movement_15D5E5 + waitmovement 0 + applymovement 255, MtPyre_Summit_Movement_1A083F + waitmovement 0 return MtPyre_Summit_Movement_15D5DF:: @ 815D5DF @@ -199,11 +199,11 @@ MtPyre_Summit_EventScript_15D669:: @ 815D669 setvar 0x8004, ITEM_RED_OR_BLUE_ORB call MtPyre_Summit_EventScript_1A067F closebutton - move LAST_TALKED, MtPyre_Summit_Movement_1A0841 - waitmove 0 + applymovement LAST_TALKED, MtPyre_Summit_Movement_1A0841 + waitmovement 0 delay 40 - move LAST_TALKED, MtPyre_Summit_Movement_1A0839 - waitmove 0 + applymovement LAST_TALKED, MtPyre_Summit_Movement_1A0839 + waitmovement 0 delay 10 .ifdef SAPPHIRE msgbox UnknownString_81B5762, 4 @@ -263,10 +263,10 @@ MtPyre_Summit_EventScript_15D6E6:: @ 815D6E6 end MtPyre_Summit_EventScript_15D6F2:: @ 815D6F2 - move 255, MtPyre_Summit_Movement_1A0841 - waitmove 0 - move 2, MtPyre_Summit_Movement_1A0845 - waitmove 0 + applymovement 255, MtPyre_Summit_Movement_1A0841 + waitmovement 0 + applymovement 2, MtPyre_Summit_Movement_1A0845 + waitmovement 0 delay 50 compare_var_to_imm 0x8008, 0 call_if 1, MtPyre_Summit_EventScript_15D75E @@ -292,33 +292,33 @@ MtPyre_Summit_EventScript_15D6F2:: @ 815D6F2 end MtPyre_Summit_EventScript_15D75E:: @ 815D75E - move 2, MtPyre_Summit_Movement_15D7A0 - waitmove 0 + applymovement 2, MtPyre_Summit_Movement_15D7A0 + waitmovement 0 return MtPyre_Summit_EventScript_15D769:: @ 815D769 - move 2, MtPyre_Summit_Movement_15D7A3 - waitmove 0 + applymovement 2, MtPyre_Summit_Movement_15D7A3 + waitmovement 0 return MtPyre_Summit_EventScript_15D774:: @ 815D774 - move 2, MtPyre_Summit_Movement_15D7A4 - waitmove 0 + applymovement 2, MtPyre_Summit_Movement_15D7A4 + waitmovement 0 return MtPyre_Summit_EventScript_15D77F:: @ 815D77F - move 2, MtPyre_Summit_Movement_15D7A7 - waitmove 0 + applymovement 2, MtPyre_Summit_Movement_15D7A7 + waitmovement 0 return MtPyre_Summit_EventScript_15D78A:: @ 815D78A - move 2, MtPyre_Summit_Movement_15D7B0 - waitmove 0 + applymovement 2, MtPyre_Summit_Movement_15D7B0 + waitmovement 0 return MtPyre_Summit_EventScript_15D795:: @ 815D795 - move 2, MtPyre_Summit_Movement_15D7B9 - waitmove 0 + applymovement 2, MtPyre_Summit_Movement_15D7B9 + waitmovement 0 return MtPyre_Summit_Movement_15D7A0:: @ 815D7A0 diff --git a/data/scripts/maps/NewMauville_Entrance.inc b/data/scripts/maps/NewMauville_Entrance.inc index eb3f63225..7eb3769cc 100644 --- a/data/scripts/maps/NewMauville_Entrance.inc +++ b/data/scripts/maps/NewMauville_Entrance.inc @@ -23,8 +23,8 @@ NewMauville_Entrance_MapScript1_15E4D8:: @ 815E4D8 NewMauville_Entrance_EventScript_15E4DC:: @ 815E4DC lockall - move 255, NewMauville_Entrance_Movement_1A0841 - waitmove 0 + applymovement 255, NewMauville_Entrance_Movement_1A0841 + waitmovement 0 msgbox NewMauville_Entrance_Text_1982C0, 4 checkitem ITEM_BASEMENT_KEY, 1 compare_var_to_imm RESULT, 0 diff --git a/data/scripts/maps/OldaleTown.inc b/data/scripts/maps/OldaleTown.inc index 7cac8011a..0afc63220 100644 --- a/data/scripts/maps/OldaleTown.inc +++ b/data/scripts/maps/OldaleTown.inc @@ -53,23 +53,23 @@ OldaleTown_EventScript_14DDBC:: @ 814DDBC end OldaleTown_EventScript_14DE07:: @ 814DE07 - move 2, OldaleTown_Movement_14DE97 - move 255, OldaleTown_Movement_14DEC1 - waitmove 0 + applymovement 2, OldaleTown_Movement_14DE97 + applymovement 255, OldaleTown_Movement_14DEC1 + waitmovement 0 goto OldaleTown_EventScript_14DE4C end OldaleTown_EventScript_14DE1E:: @ 814DE1E - move 2, OldaleTown_Movement_14DEA2 - move 255, OldaleTown_Movement_14DECB - waitmove 0 + applymovement 2, OldaleTown_Movement_14DEA2 + applymovement 255, OldaleTown_Movement_14DECB + waitmovement 0 goto OldaleTown_EventScript_14DE4C end OldaleTown_EventScript_14DE35:: @ 814DE35 - move 255, OldaleTown_Movement_14DEB9 - move 2, OldaleTown_Movement_14DE8E - waitmove 0 + applymovement 255, OldaleTown_Movement_14DEB9 + applymovement 2, OldaleTown_Movement_14DE8E + waitmovement 0 goto OldaleTown_EventScript_14DE4C end @@ -199,20 +199,20 @@ OldaleTown_EventScript_14DEDF:: @ 814DEDF goto_if_eq OldaleTown_EventScript_14DF26 msgbox OldaleTown_Text_16B0CC, 4 closebutton - move 3, OldaleTown_Movement_1A083D - waitmove 0 + applymovement 3, OldaleTown_Movement_1A083D + waitmovement 0 release end OldaleTown_EventScript_14DEFF:: @ 814DEFF lockall - move 255, OldaleTown_Movement_14DFEC - move 3, OldaleTown_Movement_14DFEF - waitmove 0 + applymovement 255, OldaleTown_Movement_14DFEC + applymovement 3, OldaleTown_Movement_14DFEF + waitmovement 0 msgbox OldaleTown_Text_16B045, 4 closebutton - move 3, OldaleTown_Movement_14DFF5 - waitmove 0 + applymovement 3, OldaleTown_Movement_14DFF5 + waitmovement 0 releaseall end @@ -223,35 +223,35 @@ OldaleTown_EventScript_14DF26:: @ 814DF26 OldaleTown_EventScript_14DF30:: @ 814DF30 lockall - move 4, OldaleTown_Movement_1A0839 - waitmove 0 + applymovement 4, OldaleTown_Movement_1A0839 + waitmovement 0 goto OldaleTown_EventScript_14DF92 end OldaleTown_EventScript_14DF41:: @ 814DF41 lockall - move 4, OldaleTown_Movement_14DFDE - waitmove 0 - move 255, OldaleTown_Movement_1A0843 - waitmove 0 + applymovement 4, OldaleTown_Movement_14DFDE + waitmovement 0 + applymovement 255, OldaleTown_Movement_1A0843 + waitmovement 0 goto OldaleTown_EventScript_14DF92 end OldaleTown_EventScript_14DF5C:: @ 814DF5C lockall - move 4, OldaleTown_Movement_14DFE1 - waitmove 0 - move 255, OldaleTown_Movement_1A0843 - waitmove 0 + applymovement 4, OldaleTown_Movement_14DFE1 + waitmovement 0 + applymovement 255, OldaleTown_Movement_1A0843 + waitmovement 0 goto OldaleTown_EventScript_14DF92 end OldaleTown_EventScript_14DF77:: @ 814DF77 lockall - move 4, OldaleTown_Movement_14DFE3 - waitmove 0 - move 255, OldaleTown_Movement_1A0843 - waitmove 0 + applymovement 4, OldaleTown_Movement_14DFE3 + waitmovement 0 + applymovement 255, OldaleTown_Movement_1A0843 + waitmovement 0 goto OldaleTown_EventScript_14DF92 end @@ -275,8 +275,8 @@ OldaleTown_EventScript_14DFB8:: @ 814DFB8 OldaleTown_EventScript_14DFC6:: @ 814DFC6 closebutton - move 4, OldaleTown_Movement_14DFE5 - waitmove 0 + applymovement 4, OldaleTown_Movement_14DFE5 + waitmovement 0 disappear 4 setvar 0x40c7, 2 setflag 979 diff --git a/data/scripts/maps/PetalburgCity.inc b/data/scripts/maps/PetalburgCity.inc index e1e49096a..4dca1fdb8 100644 --- a/data/scripts/maps/PetalburgCity.inc +++ b/data/scripts/maps/PetalburgCity.inc @@ -28,15 +28,15 @@ PetalburgCity_EventScript_14B747:: @ 814B747 setflag 0x4000 special SavePlayerParty special PutZigzagoonInPlayerParty - move 2, PetalburgCity_Movement_14B7ED - move 255, PetalburgCity_Movement_14B7CC - waitmove 0 + applymovement 2, PetalburgCity_Movement_14B7ED + applymovement 255, PetalburgCity_Movement_14B7CC + waitmovement 0 msgbox PetalburgCity_Text_16D361, 4 special ScrSpecial_StartWallyTutorialBattle waitstate msgbox PetalburgCity_Text_16D3DE, 4 - movecoords 2, PetalburgCity_Movement_1A083F, 0, 0 - waitmovexy 0, 0, 2 + applymovement 2, PetalburgCity_Movement_1A083F, 0, 0 + waitmovement 0, 0, 2 msgbox PetalburgCity_Text_16D408, 4 closebutton clearflag 0x4000 @@ -55,8 +55,8 @@ PetalburgCity_EventScript_14B7AC:: @ 814B7AC faceplayer msgbox PetalburgCity_Text_164490, 4 closebutton - move 3, PetalburgCity_Movement_1A083D - waitmove 0 + applymovement 3, PetalburgCity_Movement_1A083D + waitmovement 0 release end @@ -179,14 +179,14 @@ PetalburgCity_EventScript_14B85A:: @ 814B85A end PetalburgCity_EventScript_14B866:: @ 814B866 - move 9, PetalburgCity_Movement_1A0839 - waitmove 0 + applymovement 9, PetalburgCity_Movement_1A0839 + waitmovement 0 playbgm 420, 0 playse 21 - move 9, PetalburgCity_Movement_1A0833 - waitmove 0 - move 9, PetalburgCity_Movement_1A0835 - waitmove 0 + applymovement 9, PetalburgCity_Movement_1A0833 + waitmovement 0 + applymovement 9, PetalburgCity_Movement_1A0835 + waitmovement 0 compare_var_to_imm 0x8008, 0 call_if 1, PetalburgCity_EventScript_14B91B compare_var_to_imm 0x8008, 1 @@ -206,65 +206,65 @@ PetalburgCity_EventScript_14B866:: @ 814B866 compare_var_to_imm 0x8008, 3 call_if 1, PetalburgCity_EventScript_14B99B msgbox PetalburgCity_Text_164426, 4 - move 9, PetalburgCity_Movement_1A0843 - move 255, PetalburgCity_Movement_1A0843 - waitmove 0 + applymovement 9, PetalburgCity_Movement_1A0843 + applymovement 255, PetalburgCity_Movement_1A0843 + waitmovement 0 msgbox PetalburgCity_Text_164449, 4 closebutton - move 9, PetalburgCity_Movement_14B9F4 - waitmove 0 + applymovement 9, PetalburgCity_Movement_14B9F4 + waitmovement 0 fadedefaultbgm releaseall end PetalburgCity_EventScript_14B91B:: @ 814B91B - move 9, PetalburgCity_Movement_14B9B1 - waitmove 0 - move 255, PetalburgCity_Movement_1A0845 - waitmove 0 + applymovement 9, PetalburgCity_Movement_14B9B1 + waitmovement 0 + applymovement 255, PetalburgCity_Movement_1A0845 + waitmovement 0 return PetalburgCity_EventScript_14B930:: @ 814B930 - move 9, PetalburgCity_Movement_14B9B6 - waitmove 0 + applymovement 9, PetalburgCity_Movement_14B9B6 + waitmovement 0 return PetalburgCity_EventScript_14B93B:: @ 814B93B - move 9, PetalburgCity_Movement_14B9B9 - waitmove 0 - move 255, PetalburgCity_Movement_1A0841 - waitmove 0 + applymovement 9, PetalburgCity_Movement_14B9B9 + waitmovement 0 + applymovement 255, PetalburgCity_Movement_1A0841 + waitmovement 0 return PetalburgCity_EventScript_14B950:: @ 814B950 - move 9, PetalburgCity_Movement_14B9BE - waitmove 0 - move 255, PetalburgCity_Movement_1A0841 - waitmove 0 + applymovement 9, PetalburgCity_Movement_14B9BE + waitmovement 0 + applymovement 255, PetalburgCity_Movement_1A0841 + waitmovement 0 return PetalburgCity_EventScript_14B965:: @ 814B965 - move 9, PetalburgCity_Movement_14B9C4 - move 255, PetalburgCity_Movement_14BA01 - waitmove 0 + applymovement 9, PetalburgCity_Movement_14B9C4 + applymovement 255, PetalburgCity_Movement_14BA01 + waitmovement 0 return PetalburgCity_EventScript_14B977:: @ 814B977 - move 9, PetalburgCity_Movement_14B9CF - move 255, PetalburgCity_Movement_14BA0B - waitmove 0 + applymovement 9, PetalburgCity_Movement_14B9CF + applymovement 255, PetalburgCity_Movement_14BA0B + waitmovement 0 return PetalburgCity_EventScript_14B989:: @ 814B989 - move 9, PetalburgCity_Movement_14B9DD - move 255, PetalburgCity_Movement_14BA18 - waitmove 0 + applymovement 9, PetalburgCity_Movement_14B9DD + applymovement 255, PetalburgCity_Movement_14BA18 + waitmovement 0 return PetalburgCity_EventScript_14B99B:: @ 814B99B - move 9, PetalburgCity_Movement_14B9E8 - move 255, PetalburgCity_Movement_14BA22 - waitmove 0 + applymovement 9, PetalburgCity_Movement_14B9E8 + applymovement 255, PetalburgCity_Movement_14BA22 + waitmovement 0 return @ 814B9AD diff --git a/data/scripts/maps/PetalburgCity_Gym.inc b/data/scripts/maps/PetalburgCity_Gym.inc index 489a3f8fd..f4598403f 100644 --- a/data/scripts/maps/PetalburgCity_Gym.inc +++ b/data/scripts/maps/PetalburgCity_Gym.inc @@ -81,15 +81,15 @@ PetalburgCity_Gym_EventScript_15456C:: @ 815456C msgbox PetalburgCity_Gym_Text_17A196, 4 msgbox PetalburgCity_Gym_Text_17A1B0, 4 closebutton - move 255, PetalburgCity_Gym_Movement_1A0845 - move 10, PetalburgCity_Gym_Movement_1545B4 - waitmove 0 + applymovement 255, PetalburgCity_Gym_Movement_1A0845 + applymovement 10, PetalburgCity_Gym_Movement_1545B4 + waitmovement 0 playse 9 disappear 10 setflag 726 delay 30 - move 255, PetalburgCity_Gym_Movement_1A0841 - waitmove 0 + applymovement 255, PetalburgCity_Gym_Movement_1A0841 + waitmovement 0 msgbox PetalburgCity_Gym_Text_17A2A4, 4 setvar 0x4085, 2 releaseall @@ -218,102 +218,102 @@ PetalburgCity_Gym_EventScript_154669:: @ 8154669 end PetalburgCity_Gym_EventScript_1547EE:: @ 81547EE - move 1, PetalburgCity_Gym_Movement_1A0845 - move 10, PetalburgCity_Gym_Movement_154B27 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0845 + applymovement 10, PetalburgCity_Gym_Movement_154B27 + waitmovement 0 return PetalburgCity_Gym_EventScript_154800:: @ 8154800 - move 10, PetalburgCity_Gym_Movement_154B1D - waitmove 0 - move 1, PetalburgCity_Gym_Movement_1A0843 - move 255, PetalburgCity_Gym_Movement_1A0843 - waitmove 0 + applymovement 10, PetalburgCity_Gym_Movement_154B1D + waitmovement 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0843 + applymovement 255, PetalburgCity_Gym_Movement_1A0843 + waitmovement 0 return PetalburgCity_Gym_EventScript_15481C:: @ 815481C - move 1, PetalburgCity_Gym_Movement_1A0845 - move 255, PetalburgCity_Gym_Movement_1A0845 - move 10, PetalburgCity_Gym_Movement_154B27 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0845 + applymovement 255, PetalburgCity_Gym_Movement_1A0845 + applymovement 10, PetalburgCity_Gym_Movement_154B27 + waitmovement 0 return PetalburgCity_Gym_EventScript_154835:: @ 8154835 - move 1, PetalburgCity_Gym_Movement_1A0845 - move 10, PetalburgCity_Gym_Movement_154B3E - move 255, PetalburgCity_Gym_Movement_154B4D - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0845 + applymovement 10, PetalburgCity_Gym_Movement_154B3E + applymovement 255, PetalburgCity_Gym_Movement_154B4D + waitmovement 0 return PetalburgCity_Gym_EventScript_15484E:: @ 815484E - move 10, PetalburgCity_Gym_Movement_154B2E - move 255, PetalburgCity_Gym_Movement_154B45 - waitmove 0 + applymovement 10, PetalburgCity_Gym_Movement_154B2E + applymovement 255, PetalburgCity_Gym_Movement_154B45 + waitmovement 0 return PetalburgCity_Gym_EventScript_154860:: @ 8154860 - move 10, PetalburgCity_Gym_Movement_154B3E - move 255, PetalburgCity_Gym_Movement_154B57 - waitmove 0 + applymovement 10, PetalburgCity_Gym_Movement_154B3E + applymovement 255, PetalburgCity_Gym_Movement_154B57 + waitmovement 0 return PetalburgCity_Gym_EventScript_154872:: @ 8154872 - move 10, PetalburgCity_Gym_Movement_154B36 - move 255, PetalburgCity_Gym_Movement_154B5F - waitmove 0 + applymovement 10, PetalburgCity_Gym_Movement_154B36 + applymovement 255, PetalburgCity_Gym_Movement_154B5F + waitmovement 0 return PetalburgCity_Gym_EventScript_154884:: @ 8154884 - move 1, PetalburgCity_Gym_Movement_1A0841 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0841 + waitmovement 0 return PetalburgCity_Gym_EventScript_15488F:: @ 815488F - move 1, PetalburgCity_Gym_Movement_1A0845 - move 255, PetalburgCity_Gym_Movement_1A0841 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0845 + applymovement 255, PetalburgCity_Gym_Movement_1A0841 + waitmovement 0 return PetalburgCity_Gym_EventScript_1548A1:: @ 81548A1 - move 1, PetalburgCity_Gym_Movement_1A0843 - move 255, PetalburgCity_Gym_Movement_1A083F - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0843 + applymovement 255, PetalburgCity_Gym_Movement_1A083F + waitmovement 0 return PetalburgCity_Gym_EventScript_1548B3:: @ 81548B3 - move 1, PetalburgCity_Gym_Movement_1A083F - move 255, PetalburgCity_Gym_Movement_1A0843 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A083F + applymovement 255, PetalburgCity_Gym_Movement_1A0843 + waitmovement 0 return PetalburgCity_Gym_EventScript_1548C5:: @ 81548C5 - move 1, PetalburgCity_Gym_Movement_1A0845 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0845 + waitmovement 0 return PetalburgCity_Gym_EventScript_1548D0:: @ 81548D0 - move 1, PetalburgCity_Gym_Movement_1A0843 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0843 + waitmovement 0 return PetalburgCity_Gym_EventScript_1548DB:: @ 81548DB - move 1, PetalburgCity_Gym_Movement_1A0845 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0845 + waitmovement 0 return PetalburgCity_Gym_EventScript_1548E6:: @ 81548E6 - move 1, PetalburgCity_Gym_Movement_1A0845 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0845 + waitmovement 0 return PetalburgCity_Gym_EventScript_1548F1:: @ 81548F1 - move 10, PetalburgCity_Gym_Movement_1A0839 - waitmove 0 + applymovement 10, PetalburgCity_Gym_Movement_1A0839 + waitmovement 0 return PetalburgCity_Gym_EventScript_1548FC:: @ 81548FC - move 10, PetalburgCity_Gym_Movement_1A0845 - waitmove 0 + applymovement 10, PetalburgCity_Gym_Movement_1A0845 + waitmovement 0 return PetalburgCity_Gym_EventScript_154907:: @ 8154907 @@ -340,8 +340,8 @@ PetalburgCity_Gym_EventScript_15492F:: @ 815492F return PetalburgCity_Gym_EventScript_154930:: @ 8154930 - move 1, PetalburgCity_Gym_Movement_1A0845 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0845 + waitmovement 0 return PetalburgCity_Gym_EventScript_15493B:: @ 815493B @@ -441,43 +441,43 @@ PetalburgCity_Gym_EventScript_154A2C:: @ 8154A2C end PetalburgCity_Gym_EventScript_154ABC:: @ 8154ABC - move 1, PetalburgCity_Gym_Movement_1A0841 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0841 + waitmovement 0 return PetalburgCity_Gym_EventScript_154AC7:: @ 8154AC7 - move 1, PetalburgCity_Gym_Movement_1A0845 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0845 + waitmovement 0 return PetalburgCity_Gym_EventScript_154AD2:: @ 8154AD2 - move 1, PetalburgCity_Gym_Movement_1A083F - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A083F + waitmovement 0 return PetalburgCity_Gym_EventScript_154ADD:: @ 8154ADD - move 1, PetalburgCity_Gym_Movement_1A0843 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0843 + waitmovement 0 return PetalburgCity_Gym_EventScript_154AE8:: @ 8154AE8 - move 1, PetalburgCity_Gym_Movement_1A0845 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0845 + waitmovement 0 return PetalburgCity_Gym_EventScript_154AF3:: @ 8154AF3 - move 1, PetalburgCity_Gym_Movement_1A0841 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0841 + waitmovement 0 return PetalburgCity_Gym_EventScript_154AFE:: @ 8154AFE - move 1, PetalburgCity_Gym_Movement_1A0843 - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A0843 + waitmovement 0 return PetalburgCity_Gym_EventScript_154B09:: @ 8154B09 - move 1, PetalburgCity_Gym_Movement_1A083F - waitmove 0 + applymovement 1, PetalburgCity_Gym_Movement_1A083F + waitmovement 0 return @ 8154B14 diff --git a/data/scripts/maps/PetalburgWoods.inc b/data/scripts/maps/PetalburgWoods.inc index 8c90aa09c..8f34eecc6 100644 --- a/data/scripts/maps/PetalburgWoods.inc +++ b/data/scripts/maps/PetalburgWoods.inc @@ -9,74 +9,74 @@ PetalburgWoods_MapScript1_15CCA2:: @ 815CCA2 PetalburgWoods_EventScript_15CCA8:: @ 815CCA8 lockall call PetalburgWoods_EventScript_15CDE6 - move 4, PetalburgWoods_Movement_15CE89 - waitmove 0 + applymovement 4, PetalburgWoods_Movement_15CE89 + waitmovement 0 msgbox PetalburgWoods_Text_194D92, 4 closebutton playbgm BGM_EVIL_TEAM, 0 - move 3, PetalburgWoods_Movement_15CEC3 - waitmove 0 + applymovement 3, PetalburgWoods_Movement_15CEC3 + waitmovement 0 msgbox PetalburgWoods_Text_194DED, 4 closebutton - move 3, PetalburgWoods_Movement_15CEB0 - waitmove 0 - move 4, PetalburgWoods_Movement_1A0841 - waitmove 0 + applymovement 3, PetalburgWoods_Movement_15CEB0 + waitmovement 0 + applymovement 4, PetalburgWoods_Movement_1A0841 + waitmovement 0 msgbox PetalburgWoods_Text_194E6B, 4 closebutton - move 4, PetalburgWoods_Movement_15CE9E - waitmove 0 + applymovement 4, PetalburgWoods_Movement_15CE9E + waitmovement 0 msgbox PetalburgWoods_Text_194E9A, 4 - move 3, PetalburgWoods_Movement_15CEC8 - waitmove 0 + applymovement 3, PetalburgWoods_Movement_15CEC8 + waitmovement 0 msgbox PetalburgWoods_Text_194EE8, 4 trainerbattle 3, OPPONENT_PETALBURG_WOODS_GRUNT, 0, PetalburgWoods_Text_194F83 - move 3, PetalburgWoods_Movement_15CEB3 - waitmove 0 + applymovement 3, PetalburgWoods_Movement_15CEB3 + waitmovement 0 call PetalburgWoods_EventScript_15CDFA - move 4, PetalburgWoods_Movement_15CE80 - waitmove 0 + applymovement 4, PetalburgWoods_Movement_15CE80 + waitmovement 0 goto PetalburgWoods_EventScript_15CE69 end PetalburgWoods_EventScript_15CD42:: @ 815CD42 lockall call PetalburgWoods_EventScript_15CDE6 - move 4, PetalburgWoods_Movement_15CE8E - waitmove 0 - move 255, PetalburgWoods_Movement_1A083F - waitmove 0 + applymovement 4, PetalburgWoods_Movement_15CE8E + waitmovement 0 + applymovement 255, PetalburgWoods_Movement_1A083F + waitmovement 0 msgbox PetalburgWoods_Text_194D92, 4 closebutton playbgm BGM_EVIL_TEAM, 0 - move 3, PetalburgWoods_Movement_15CEC3 - waitmove 0 + applymovement 3, PetalburgWoods_Movement_15CEC3 + waitmovement 0 msgbox PetalburgWoods_Text_194DED, 4 closebutton - move 3, PetalburgWoods_Movement_15CEBF - waitmove 0 - move 4, PetalburgWoods_Movement_1A0841 - waitmove 0 + applymovement 3, PetalburgWoods_Movement_15CEBF + waitmovement 0 + applymovement 4, PetalburgWoods_Movement_1A0841 + waitmovement 0 msgbox PetalburgWoods_Text_194E6B, 4 closebutton - move 4, PetalburgWoods_Movement_15CEA4 - waitmove 0 + applymovement 4, PetalburgWoods_Movement_15CEA4 + waitmovement 0 msgbox PetalburgWoods_Text_194E9A, 4 - move 255, PetalburgWoods_Movement_1A0841 - waitmove 0 + applymovement 255, PetalburgWoods_Movement_1A0841 + waitmovement 0 msgbox PetalburgWoods_Text_194EE8, 4 trainerbattle 3, OPPONENT_PETALBURG_WOODS_GRUNT, 0, PetalburgWoods_Text_194F83 - move 3, PetalburgWoods_Movement_15CEB3 - waitmove 0 + applymovement 3, PetalburgWoods_Movement_15CEB3 + waitmovement 0 call PetalburgWoods_EventScript_15CDFA - move 4, PetalburgWoods_Movement_15CE95 - waitmove 0 + applymovement 4, PetalburgWoods_Movement_15CE95 + waitmovement 0 goto PetalburgWoods_EventScript_15CE69 end PetalburgWoods_EventScript_15CDE6:: @ 815CDE6 - move 4, PetalburgWoods_Movement_15CE73 - waitmove 0 + applymovement 4, PetalburgWoods_Movement_15CE73 + waitmovement 0 msgbox PetalburgWoods_Text_194D71, 4 closebutton return @@ -84,11 +84,11 @@ PetalburgWoods_EventScript_15CDE6:: @ 815CDE6 PetalburgWoods_EventScript_15CDFA:: @ 815CDFA msgbox PetalburgWoods_Text_194FA4, 4 closebutton - move 3, PetalburgWoods_Movement_15CEB7 - waitmove 0 + applymovement 3, PetalburgWoods_Movement_15CEB7 + waitmovement 0 disappear 3 - move 255, PetalburgWoods_Movement_1A0845 - waitmove 0 + applymovement 255, PetalburgWoods_Movement_1A0845 + waitmovement 0 msgbox PetalburgWoods_Text_19507E, 4 giveitem ITEM_GREAT_BALL compare_var_to_imm RESULT, 0 @@ -103,8 +103,8 @@ PetalburgWoods_EventScript_15CE3F:: @ 815CE3F PetalburgWoods_EventScript_15CE4D:: @ 815CE4D msgbox PetalburgWoods_Text_19510A, 4 - move 4, PetalburgWoods_Movement_15CEA8 - waitmove 0 + applymovement 4, PetalburgWoods_Movement_15CEA8 + waitmovement 0 msgbox PetalburgWoods_Text_195153, 4 closebutton return diff --git a/data/scripts/maps/Route101.inc b/data/scripts/maps/Route101.inc index bfbc9f2bd..35fbaf744 100644 --- a/data/scripts/maps/Route101.inc +++ b/data/scripts/maps/Route101.inc @@ -23,18 +23,18 @@ Route101_EventScript_14E948:: @ 814E948 closebutton movesprite 2, 0, 15 movesprite 4, 0, 16 - move 255, Route101_Movement_14EA2C - move 2, Route101_Movement_14EA50 - move 4, Route101_Movement_14EA1F - waitmove 0 - move 4, Route101_Movement_14EA00 - move 2, Route101_Movement_14EA31 - waitmove 0 - move 2, Route101_Movement_1A0843 - waitmove 0 - move 4, Route101_Movement_14EA27 - move 2, Route101_Movement_14EA58 - waitmove 0 + applymovement 255, Route101_Movement_14EA2C + applymovement 2, Route101_Movement_14EA50 + applymovement 4, Route101_Movement_14EA1F + waitmovement 0 + applymovement 4, Route101_Movement_14EA00 + applymovement 2, Route101_Movement_14EA31 + waitmovement 0 + applymovement 2, Route101_Movement_1A0843 + waitmovement 0 + applymovement 4, Route101_Movement_14EA27 + applymovement 2, Route101_Movement_14EA58 + waitmovement 0 msgbox Route101_Text_16D119, 4 closebutton setvar 0x4060, 2 @@ -45,8 +45,8 @@ Route101_EventScript_14E9B8:: @ 814E9B8 lockall msgbox Route101_Text_16D15E, 4 closebutton - move 255, Route101_Movement_14E9FA - waitmove 0 + applymovement 255, Route101_Movement_14E9FA + waitmovement 0 releaseall end @@ -54,8 +54,8 @@ Route101_EventScript_14E9CE:: @ 814E9CE lockall msgbox Route101_Text_16D15E, 4 closebutton - move 255, Route101_Movement_14E9FC - waitmove 0 + applymovement 255, Route101_Movement_14E9FC + waitmovement 0 releaseall end @@ -63,8 +63,8 @@ Route101_EventScript_14E9E4:: @ 814E9E4 lockall msgbox Route101_Text_16D15E, 4 closebutton - move 255, Route101_Movement_14E9FE - waitmove 0 + applymovement 255, Route101_Movement_14E9FE + waitmovement 0 releaseall end @@ -222,12 +222,12 @@ Route101_EventScript_14EA7F:: @ 814EA7F fadescreen 1 disappear 4 movesprite 255, 6, 13 - move 255, Route101_Movement_1A083F - waitmove 0 + applymovement 255, Route101_Movement_1A083F + waitmovement 0 special ScrSpecial_ChooseStarter waitstate - move 2, Route101_Movement_14EAD7 - waitmove 0 + applymovement 2, Route101_Movement_14EAD7 + waitmovement 0 msgbox Route101_Text_16D191, 4 special ScrSpecial_HealPlayerParty setflag 720 diff --git a/data/scripts/maps/Route103.inc b/data/scripts/maps/Route103.inc index 586075465..102d2aa0c 100644 --- a/data/scripts/maps/Route103.inc +++ b/data/scripts/maps/Route103.inc @@ -19,12 +19,12 @@ Route103_EventScript_14EB92:: @ 814EB92 Route103_EventScript_14EBAB:: @ 814EBAB msgbox Route103_Text_16D57A, 4 playbgm 415, 1 - move 2, Route103_Movement_1A0839 - waitmove 0 - move 2, Route103_Movement_1A0833 - waitmove 0 - move 2, Route103_Movement_1A0835 - waitmove 0 + applymovement 2, Route103_Movement_1A0839 + waitmovement 0 + applymovement 2, Route103_Movement_1A0833 + waitmovement 0 + applymovement 2, Route103_Movement_1A0835 + waitmovement 0 msgbox Route103_Text_16D5B6, 4 switch 0x4023 case 0, Route103_EventScript_14EC5D @@ -35,12 +35,12 @@ Route103_EventScript_14EBAB:: @ 814EBAB Route103_EventScript_14EC04:: @ 814EC04 msgbox Route103_Text_16D762, 4 playbgm 421, 1 - move 2, Route103_Movement_1A0839 - waitmove 0 - move 2, Route103_Movement_1A0833 - waitmove 0 - move 2, Route103_Movement_1A0835 - waitmove 0 + applymovement 2, Route103_Movement_1A0839 + waitmovement 0 + applymovement 2, Route103_Movement_1A0833 + waitmovement 0 + applymovement 2, Route103_Movement_1A0835 + waitmovement 0 msgbox Route103_Text_16D7A9, 4 switch 0x4023 case 0, Route103_EventScript_14EC8D @@ -98,20 +98,20 @@ Route103_EventScript_14ECD9:: @ 814ECD9 end Route103_EventScript_14ED0C:: @ 814ED0C - move 2, Route103_Movement_14ED67 - waitmove 0 + applymovement 2, Route103_Movement_14ED67 + waitmovement 0 playse 10 - move 2, Route103_Movement_14ED6B - waitmove 0 + applymovement 2, Route103_Movement_14ED6B + waitmovement 0 goto Route103_EventScript_14ED46 end Route103_EventScript_14ED29:: @ 814ED29 - move 2, Route103_Movement_14ED71 - waitmove 0 + applymovement 2, Route103_Movement_14ED71 + waitmovement 0 playse 10 - move 2, Route103_Movement_14ED74 - waitmove 0 + applymovement 2, Route103_Movement_14ED74 + waitmovement 0 goto Route103_EventScript_14ED46 end diff --git a/data/scripts/maps/Route104.inc b/data/scripts/maps/Route104.inc index 58a6704bf..d9f65a382 100644 --- a/data/scripts/maps/Route104.inc +++ b/data/scripts/maps/Route104.inc @@ -126,28 +126,28 @@ Route104_EventScript_14EFCC:: @ 814EFCC Route104_EventScript_14EFD5:: @ 814EFD5 spritelevelup 8, 0, 19, 0 spritelevelup 255, 0, 19, 0 - move 8, Route104_Movement_14F16C - waitmove 0 + applymovement 8, Route104_Movement_14F16C + waitmovement 0 disappear 8 - move 255, Route104_Movement_14F162 - waitmove 0 + applymovement 255, Route104_Movement_14F162 + waitmovement 0 spriteinvisible 255, 0, 19 call Route104_EventScript_1A02E7 - move 7, Route104_Movement_14F09F - move 255, Route104_Movement_14F09F - waitmove 0 - move 255, Route104_Movement_14F166 - waitmove 0 + applymovement 7, Route104_Movement_14F09F + applymovement 255, Route104_Movement_14F09F + waitmovement 0 + applymovement 255, Route104_Movement_14F166 + waitmovement 0 call Route104_EventScript_1A02EF spritevisible 255, 0, 11 - move 255, Route104_Movement_14F168 - waitmove 0 + applymovement 255, Route104_Movement_14F168 + waitmovement 0 movespriteperm 2, 12, 8 reappear 2 spritelevelup 2, 0, 11, 0 clearflag 740 - move 2, Route104_Movement_14F16F - waitmove 0 + applymovement 2, Route104_Movement_14F16F + waitmovement 0 reappear 4 clearflag 743 call Route104_EventScript_1A02EF diff --git a/data/scripts/maps/Route109.inc b/data/scripts/maps/Route109.inc index 1846cb2ff..bd5116a43 100644 --- a/data/scripts/maps/Route109.inc +++ b/data/scripts/maps/Route109.inc @@ -5,8 +5,8 @@ Route109_EventScript_14F4D3:: @ 814F4D3 call Route109_EventScript_1A010C spritelevelup 2, 0, 24, 0 spritelevelup 255, 0, 24, 0 - move 2, Route109_Movement_14F67B - waitmove 0 + applymovement 2, Route109_Movement_14F67B + waitmovement 0 disappear 2 switch FACING case 1, Route109_EventScript_14F518 @@ -15,40 +15,40 @@ Route109_EventScript_14F4D3:: @ 814F4D3 end Route109_EventScript_14F518:: @ 814F518 - move 255, Route109_Movement_14F66D - waitmove 0 + applymovement 255, Route109_Movement_14F66D + waitmovement 0 goto Route109_EventScript_14F548 end Route109_EventScript_14F528:: @ 814F528 - move 255, Route109_Movement_14F675 - waitmove 0 + applymovement 255, Route109_Movement_14F675 + waitmovement 0 goto Route109_EventScript_14F548 end Route109_EventScript_14F538:: @ 814F538 - move 255, Route109_Movement_14F678 - waitmove 0 + applymovement 255, Route109_Movement_14F678 + waitmovement 0 goto Route109_EventScript_14F548 end Route109_EventScript_14F548:: @ 814F548 spriteinvisible 255, 0, 24 call Route109_EventScript_1A02E7 - move 1, Route109_Movement_14F5BF - move 255, Route109_Movement_14F5BF - waitmove 0 + applymovement 1, Route109_Movement_14F5BF + applymovement 255, Route109_Movement_14F5BF + waitmovement 0 call Route109_EventScript_1A02EF spritevisible 255, 0, 11 - move 255, Route109_Movement_14F670 - waitmove 0 + applymovement 255, Route109_Movement_14F670 + waitmovement 0 reappear 4 clearflag 743 movespriteperm 2, 12, 8 reappear 2 spritelevelup 2, 0, 11, 0 - move 2, Route109_Movement_14F67D - waitmove 0 + applymovement 2, Route109_Movement_14F67D + waitmovement 0 clearflag 740 setflag 744 spriteinvisible 1, 0, 24 @@ -319,8 +319,8 @@ Route109_EventScript_14F70E:: @ 814F70E faceplayer msgbox Route109_Text_16E405, 4 closebutton - move LAST_TALKED, Route109_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, Route109_Movement_1A083D + waitmovement 0 release end @@ -335,16 +335,16 @@ Route109_EventScript_14F725:: @ 814F725 compare_var_to_imm RESULT, 0 goto_if_eq Route109_EventScript_1A029B closebutton - move LAST_TALKED, Route109_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, Route109_Movement_1A083D + waitmovement 0 setflag 280 release end Route109_EventScript_14F762:: @ 814F762 msgbox Route109_Text_16E446, 4 - move LAST_TALKED, Route109_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, Route109_Movement_1A083D + waitmovement 0 release end diff --git a/data/scripts/maps/Route110.inc b/data/scripts/maps/Route110.inc index 9fba68693..e4582e08e 100644 --- a/data/scripts/maps/Route110.inc +++ b/data/scripts/maps/Route110.inc @@ -33,8 +33,8 @@ Route110_EventScript_14F946:: @ 814F946 lock faceplayer msgbox Route110_Text_16E6C0, 4 - move LAST_TALKED, Route110_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, Route110_Movement_1A083D + waitmovement 0 release end @@ -42,8 +42,8 @@ Route110_EventScript_14F95C:: @ 814F95C lock faceplayer msgbox Route110_Text_16E6F2, 4 - move LAST_TALKED, Route110_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, Route110_Movement_1A083D + waitmovement 0 release end @@ -51,8 +51,8 @@ Route110_EventScript_14F972:: @ 814F972 lock faceplayer msgbox Route110_Text_16E729, 4 - move LAST_TALKED, Route110_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, Route110_Movement_1A083D + waitmovement 0 release end @@ -60,8 +60,8 @@ Route110_EventScript_14F988:: @ 814F988 lock faceplayer msgbox Route110_Text_16E76A, 4 - move LAST_TALKED, Route110_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, Route110_Movement_1A083D + waitmovement 0 release end @@ -254,8 +254,8 @@ Route110_EventScript_14FC10:: @ 814FC10 Route110_EventScript_14FC27:: @ 814FC27 lockall - move 21, Route110_Movement_1A0843 - waitmove 0 + applymovement 21, Route110_Movement_1A0843 + waitmovement 0 call Route110_EventScript_14FC39 releaseall end @@ -330,12 +330,12 @@ Route110_EventScript_14FD34:: @ 814FD34 call_if 1, Route110_EventScript_14FDA7 compare_var_to_imm RESULT, 1 call_if 1, Route110_EventScript_14FDAC - move 28, Route110_Movement_1A0845 - waitmove 0 - move 28, Route110_Movement_1A0833 - waitmove 0 - move 28, Route110_Movement_1A0835 - waitmove 0 + applymovement 28, Route110_Movement_1A0845 + waitmovement 0 + applymovement 28, Route110_Movement_1A0833 + waitmovement 0 + applymovement 28, Route110_Movement_1A0835 + waitmovement 0 delay 30 compare_var_to_imm 0x8008, 1 call_if 1, Route110_EventScript_14FF14 @@ -450,33 +450,33 @@ Route110_EventScript_14FEB2:: @ 814FEB2 end Route110_EventScript_14FF14:: @ 814FF14 - move 28, Route110_Movement_14FF6E - waitmove 0 + applymovement 28, Route110_Movement_14FF6E + waitmovement 0 return Route110_EventScript_14FF1F:: @ 814FF1F - move 28, Route110_Movement_14FF72 - waitmove 0 + applymovement 28, Route110_Movement_14FF72 + waitmovement 0 return Route110_EventScript_14FF2A:: @ 814FF2A - move 28, Route110_Movement_14FF74 - waitmove 0 + applymovement 28, Route110_Movement_14FF74 + waitmovement 0 return Route110_EventScript_14FF35:: @ 814FF35 - move 29, Route110_Movement_14FF78 - waitmove 0 + applymovement 29, Route110_Movement_14FF78 + waitmovement 0 return Route110_EventScript_14FF40:: @ 814FF40 - move 29, Route110_Movement_14FF80 - waitmove 0 + applymovement 29, Route110_Movement_14FF80 + waitmovement 0 return Route110_EventScript_14FF4B:: @ 814FF4B - move 29, Route110_Movement_14FF89 - waitmove 0 + applymovement 29, Route110_Movement_14FF89 + waitmovement 0 return Route110_EventScript_14FF56:: @ 814FF56 diff --git a/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc b/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc index d98662e78..c2900de22 100644 --- a/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc +++ b/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc @@ -42,8 +42,8 @@ Route110_SeasideCyclingRoadNorthEntrance_EventScript_163523:: @ 8163523 @ You don't have a bike! msgbox Route110_SeasideCyclingRoadNorthEntrance_Text_19E3AD, 4 closebutton - move 255, Route110_SeasideCyclingRoadNorthEntrance_Movement_163538 - waitmove 0 + applymovement 255, Route110_SeasideCyclingRoadNorthEntrance_Movement_163538 + waitmovement 0 releaseall end diff --git a/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc b/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc index 204ccc64d..c385a7bc9 100644 --- a/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc +++ b/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc @@ -21,8 +21,8 @@ Route110_SeasideCyclingRoadSouthEntrance_EventScript_16348B:: @ 816348B Route110_SeasideCyclingRoadSouthEntrance_EventScript_1634A6:: @ 81634A6 msgbox Route110_SeasideCyclingRoadSouthEntrance_Text_19E3AD, 4 closebutton - move 255, Route110_SeasideCyclingRoadSouthEntrance_Movement_1634BB - waitmove 0 + applymovement 255, Route110_SeasideCyclingRoadSouthEntrance_Movement_1634BB + waitmovement 0 releaseall end diff --git a/data/scripts/maps/Route110_TrickHouseEnd.inc b/data/scripts/maps/Route110_TrickHouseEnd.inc index e70dcd749..61c0e65a6 100644 --- a/data/scripts/maps/Route110_TrickHouseEnd.inc +++ b/data/scripts/maps/Route110_TrickHouseEnd.inc @@ -161,8 +161,8 @@ Route110_TrickHouseEnd_EventScript_161BAF:: @ 8161BAF delay 30 msgbox Route110_TrickHouseEnd_Text_19C602, 4 closebutton - move 1, Route110_TrickHouseEnd_Movement_1A0839 - waitmove 0 + applymovement 1, Route110_TrickHouseEnd_Movement_1A0839 + waitmovement 0 delay 30 msgbox Route110_TrickHouseEnd_Text_19C691, 4 setvar 0x40c1, 0 @@ -180,11 +180,11 @@ Route110_TrickHouseEnd_EventScript_161BAF:: @ 8161BAF end Route110_TrickHouseEnd_EventScript_161C2E:: @ 8161C2E - move 1, Route110_TrickHouseEnd_Movement_161315 - waitmove 0 + applymovement 1, Route110_TrickHouseEnd_Movement_161315 + waitmovement 0 playse 178 - move 1, Route110_TrickHouseEnd_Movement_16131E - waitmove 0 + applymovement 1, Route110_TrickHouseEnd_Movement_16131E + waitmovement 0 disappear 1 addvar 0x4044, 1 return @@ -202,41 +202,41 @@ Route110_TrickHouseEnd_EventScript_161C61:: @ 8161C61 return Route110_TrickHouseEnd_EventScript_161C74:: @ 8161C74 - move 1, Route110_TrickHouseEnd_Movement_1A0845 - waitmove 0 + applymovement 1, Route110_TrickHouseEnd_Movement_1A0845 + waitmovement 0 return Route110_TrickHouseEnd_EventScript_161C7F:: @ 8161C7F - move 1, Route110_TrickHouseEnd_Movement_1A0841 - waitmove 0 + applymovement 1, Route110_TrickHouseEnd_Movement_1A0841 + waitmovement 0 return Route110_TrickHouseEnd_EventScript_161C8A:: @ 8161C8A - move 1, Route110_TrickHouseEnd_Movement_1A083F - waitmove 0 + applymovement 1, Route110_TrickHouseEnd_Movement_1A083F + waitmovement 0 return Route110_TrickHouseEnd_EventScript_161C95:: @ 8161C95 - move 1, Route110_TrickHouseEnd_Movement_1A0843 - waitmove 0 + applymovement 1, Route110_TrickHouseEnd_Movement_1A0843 + waitmovement 0 return Route110_TrickHouseEnd_EventScript_161CA0:: @ 8161CA0 lockall spriteface 1, 3 playse 21 - move 1, Route110_TrickHouseEnd_Movement_1A0833 - waitmove 0 + applymovement 1, Route110_TrickHouseEnd_Movement_1A0833 + waitmovement 0 delay 20 - move 1, Route110_TrickHouseEnd_Movement_161CEA - waitmove 0 + applymovement 1, Route110_TrickHouseEnd_Movement_161CEA + waitmovement 0 playse 178 - move 255, Route110_TrickHouseEnd_Movement_1A0845 - waitmove 0 + applymovement 255, Route110_TrickHouseEnd_Movement_1A0845 + waitmovement 0 msgbox Route110_TrickHouseEnd_Text_19CA8B, 4 closebutton - move 255, Route110_TrickHouseEnd_Movement_161CE8 - waitmove 0 + applymovement 255, Route110_TrickHouseEnd_Movement_161CE8 + waitmovement 0 delay 4 spriteface 1, 4 releaseall diff --git a/data/scripts/maps/Route110_TrickHouseEntrance.inc b/data/scripts/maps/Route110_TrickHouseEntrance.inc index 6a515e6f3..4e60c9fc1 100644 --- a/data/scripts/maps/Route110_TrickHouseEntrance.inc +++ b/data/scripts/maps/Route110_TrickHouseEntrance.inc @@ -218,11 +218,11 @@ Route110_TrickHouseEntrance_EventScript_1611D7:: @ 81611D7 msgbox Route110_TrickHouseEntrance_Text_19BD82, 4 closebutton delay 20 - move 1, Route110_TrickHouseEntrance_Movement_161315 - waitmove 0 + applymovement 1, Route110_TrickHouseEntrance_Movement_161315 + waitmovement 0 playse 178 - move 1, Route110_TrickHouseEntrance_Movement_16131E - waitmove 0 + applymovement 1, Route110_TrickHouseEntrance_Movement_16131E + waitmovement 0 disappear 1 setvar 0x40a7, 1 setvar 0x40a6, 0 @@ -244,10 +244,10 @@ Route110_TrickHouseEntrance_EventScript_16121A:: @ 816121A Route110_TrickHouseEntrance_EventScript_16124D:: @ 816124D playse 21 - move 255, Route110_TrickHouseEntrance_Movement_1A0833 - waitmove 0 - move 255, Route110_TrickHouseEntrance_Movement_1A0835 - waitmove 0 + applymovement 255, Route110_TrickHouseEntrance_Movement_1A0833 + waitmovement 0 + applymovement 255, Route110_TrickHouseEntrance_Movement_1A0835 + waitmovement 0 compare_var_to_imm 0x4044, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1612CD compare_var_to_imm 0x4044, 1 @@ -334,22 +334,22 @@ Route110_TrickHouseEntrance_EventScript_161327:: @ 8161327 Route110_TrickHouseEntrance_EventScript_161330:: @ 8161330 msgbox Route110_TrickHouseEntrance_Text_19BF19, 4 closebutton - move 1, Route110_TrickHouseEntrance_Movement_1A0839 - waitmove 0 + applymovement 1, Route110_TrickHouseEntrance_Movement_1A0839 + waitmovement 0 playse 21 - move 1, Route110_TrickHouseEntrance_Movement_1A0833 - waitmove 0 - move 1, Route110_TrickHouseEntrance_Movement_1A0835 - waitmove 0 + applymovement 1, Route110_TrickHouseEntrance_Movement_1A0833 + waitmovement 0 + applymovement 1, Route110_TrickHouseEntrance_Movement_1A0835 + waitmovement 0 msgbox Route110_TrickHouseEntrance_Text_19BFAB, 4 - move 1, Route110_TrickHouseEntrance_Movement_1A0841 - waitmove 0 + applymovement 1, Route110_TrickHouseEntrance_Movement_1A0841 + waitmovement 0 releaseall end Route110_TrickHouseEntrance_EventScript_16136E:: @ 816136E - move 1, Route110_TrickHouseEntrance_Movement_1A0839 - waitmove 0 + applymovement 1, Route110_TrickHouseEntrance_Movement_1A0839 + waitmovement 0 msgbox Route110_TrickHouseEntrance_Text_19C07E, 4 compare_var_to_imm 0x4044, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_1613CE @@ -440,14 +440,14 @@ Route110_TrickHouseEntrance_EventScript_1614D6:: @ 81614D6 Route110_TrickHouseEntrance_EventScript_161502:: @ 8161502 setvar 0x40c1, 0 setvar 0x40a7, 3 - move 1, Route110_TrickHouseEntrance_Movement_1A0841 - waitmove 0 + applymovement 1, Route110_TrickHouseEntrance_Movement_1A0841 + waitmovement 0 releaseall end Route110_TrickHouseEntrance_EventScript_161518:: @ 8161518 - move 1, Route110_TrickHouseEntrance_Movement_1A0839 - waitmove 0 + applymovement 1, Route110_TrickHouseEntrance_Movement_1A0839 + waitmovement 0 msgbox Route110_TrickHouseEntrance_Text_19C128, 4 .ifdef SAPPHIRE givedecoration 32 @@ -465,13 +465,13 @@ Route110_TrickHouseEntrance_EventScript_161518:: @ 8161518 Route110_TrickHouseEntrance_EventScript_161551:: @ 8161551 msgbox Route110_TrickHouseEntrance_Text_19C17E, 4 closebutton - move 1, Route110_TrickHouseEntrance_Movement_16309F - waitmove 0 - move 1, Route110_TrickHouseEntrance_Movement_161315 - waitmove 0 + applymovement 1, Route110_TrickHouseEntrance_Movement_16309F + waitmovement 0 + applymovement 1, Route110_TrickHouseEntrance_Movement_161315 + waitmovement 0 playse 178 - move 1, Route110_TrickHouseEntrance_Movement_16131E - waitmove 0 + applymovement 1, Route110_TrickHouseEntrance_Movement_16131E + waitmovement 0 disappear 1 setvar 0x40c1, 0 setvar 0x40a7, 5 @@ -504,10 +504,10 @@ Route110_TrickHouseEntrance_EventScript_1615DD:: @ 81615DD setmaptile 5, 1, 537, 0 special DrawWholeMapView delay 20 - move 255, Route110_TrickHouseEntrance_Movement_1A0856 - waitmove 0 - move 255, Route110_TrickHouseEntrance_Movement_16165E - waitmove 0 + applymovement 255, Route110_TrickHouseEntrance_Movement_1A0856 + waitmovement 0 + applymovement 255, Route110_TrickHouseEntrance_Movement_16165E + waitmovement 0 switch 0x4044 case 0, Route110_TrickHouseEntrance_EventScript_161660 case 1, Route110_TrickHouseEntrance_EventScript_16166B diff --git a/data/scripts/maps/Route110_TrickHousePuzzle5.inc b/data/scripts/maps/Route110_TrickHousePuzzle5.inc index d0ced1ecb..c99158dbd 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle5.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle5.inc @@ -25,8 +25,8 @@ Route110_TrickHousePuzzle5_EventScript_1627E7:: @ 81627E7 Route110_TrickHousePuzzle5_EventScript_1627F2:: @ 81627F2 lockall - move 1, Route110_TrickHousePuzzle5_Movement_1A0839 - waitmove 0 + applymovement 1, Route110_TrickHousePuzzle5_Movement_1A0839 + waitmovement 0 compare_var_to_imm 0x4001, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 @@ -35,8 +35,8 @@ Route110_TrickHousePuzzle5_EventScript_1627F2:: @ 81627F2 Route110_TrickHousePuzzle5_EventScript_162813:: @ 8162813 lockall - move 2, Route110_TrickHousePuzzle5_Movement_1A0839 - waitmove 0 + applymovement 2, Route110_TrickHousePuzzle5_Movement_1A0839 + waitmovement 0 compare_var_to_imm 0x4002, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 @@ -45,8 +45,8 @@ Route110_TrickHousePuzzle5_EventScript_162813:: @ 8162813 Route110_TrickHousePuzzle5_EventScript_162834:: @ 8162834 lockall - move 3, Route110_TrickHousePuzzle5_Movement_1A0839 - waitmove 0 + applymovement 3, Route110_TrickHousePuzzle5_Movement_1A0839 + waitmovement 0 compare_var_to_imm 0x4003, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 @@ -55,8 +55,8 @@ Route110_TrickHousePuzzle5_EventScript_162834:: @ 8162834 Route110_TrickHousePuzzle5_EventScript_162855:: @ 8162855 lockall - move 4, Route110_TrickHousePuzzle5_Movement_1A0839 - waitmove 0 + applymovement 4, Route110_TrickHousePuzzle5_Movement_1A0839 + waitmovement 0 compare_var_to_imm 0x4004, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 @@ -65,8 +65,8 @@ Route110_TrickHousePuzzle5_EventScript_162855:: @ 8162855 Route110_TrickHousePuzzle5_EventScript_162876:: @ 8162876 lockall - move 5, Route110_TrickHousePuzzle5_Movement_1A0839 - waitmove 0 + applymovement 5, Route110_TrickHousePuzzle5_Movement_1A0839 + waitmovement 0 compare_var_to_imm 0x4005, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 @@ -161,10 +161,10 @@ Route110_TrickHousePuzzle5_EventScript_16293F:: @ 816293F setvar 0x4001, 1 setvar 0x4008, 1 playse 21 - move 1, Route110_TrickHousePuzzle5_Movement_1A0833 - waitmove 0 - move 1, Route110_TrickHousePuzzle5_Movement_1A0835 - waitmove 0 + applymovement 1, Route110_TrickHousePuzzle5_Movement_1A0833 + waitmovement 0 + applymovement 1, Route110_TrickHousePuzzle5_Movement_1A0835 + waitmovement 0 compare_var_to_imm 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162DF3 compare_var_to_imm 0x4009, 2 @@ -183,10 +183,10 @@ Route110_TrickHousePuzzle5_EventScript_1629B3:: @ 81629B3 setvar 0x4002, 1 setvar 0x4008, 2 playse 21 - move 2, Route110_TrickHousePuzzle5_Movement_1A0833 - waitmove 0 - move 2, Route110_TrickHousePuzzle5_Movement_1A0835 - waitmove 0 + applymovement 2, Route110_TrickHousePuzzle5_Movement_1A0833 + waitmovement 0 + applymovement 2, Route110_TrickHousePuzzle5_Movement_1A0835 + waitmovement 0 compare_var_to_imm 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E9B compare_var_to_imm 0x4009, 2 @@ -205,10 +205,10 @@ Route110_TrickHousePuzzle5_EventScript_162A27:: @ 8162A27 setvar 0x4003, 1 setvar 0x4008, 3 playse 21 - move 3, Route110_TrickHousePuzzle5_Movement_1A0833 - waitmove 0 - move 3, Route110_TrickHousePuzzle5_Movement_1A0835 - waitmove 0 + applymovement 3, Route110_TrickHousePuzzle5_Movement_1A0833 + waitmovement 0 + applymovement 3, Route110_TrickHousePuzzle5_Movement_1A0835 + waitmovement 0 compare_var_to_imm 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162DF3 compare_var_to_imm 0x4009, 2 @@ -227,10 +227,10 @@ Route110_TrickHousePuzzle5_EventScript_162A9B:: @ 8162A9B setvar 0x4004, 1 setvar 0x4008, 4 playse 21 - move 4, Route110_TrickHousePuzzle5_Movement_1A0833 - waitmove 0 - move 4, Route110_TrickHousePuzzle5_Movement_1A0835 - waitmove 0 + applymovement 4, Route110_TrickHousePuzzle5_Movement_1A0833 + waitmovement 0 + applymovement 4, Route110_TrickHousePuzzle5_Movement_1A0835 + waitmovement 0 compare_var_to_imm 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162DF3 compare_var_to_imm 0x4009, 2 @@ -249,10 +249,10 @@ Route110_TrickHousePuzzle5_EventScript_162B0F:: @ 8162B0F setvar 0x4005, 1 setvar 0x4008, 5 playse 21 - move 5, Route110_TrickHousePuzzle5_Movement_1A0833 - waitmove 0 - move 5, Route110_TrickHousePuzzle5_Movement_1A0835 - waitmove 0 + applymovement 5, Route110_TrickHousePuzzle5_Movement_1A0833 + waitmovement 0 + applymovement 5, Route110_TrickHousePuzzle5_Movement_1A0835 + waitmovement 0 compare_var_to_imm 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E9B compare_var_to_imm 0x4009, 2 @@ -391,13 +391,13 @@ Route110_TrickHousePuzzle5_EventScript_162D90:: @ 8162D90 waitse playse 32 msgbox Route110_TrickHousePuzzle5_Text_19D5CF, 4 - move 1, Route110_TrickHousePuzzle5_Movement_16309F - move 2, Route110_TrickHousePuzzle5_Movement_16309F - move 3, Route110_TrickHousePuzzle5_Movement_16309F - move 4, Route110_TrickHousePuzzle5_Movement_16309F - move 5, Route110_TrickHousePuzzle5_Movement_16309F + applymovement 1, Route110_TrickHousePuzzle5_Movement_16309F + applymovement 2, Route110_TrickHousePuzzle5_Movement_16309F + applymovement 3, Route110_TrickHousePuzzle5_Movement_16309F + applymovement 4, Route110_TrickHousePuzzle5_Movement_16309F + applymovement 5, Route110_TrickHousePuzzle5_Movement_16309F msgbox Route110_TrickHousePuzzle5_Text_19D5ED, 4 - waitmove 0 + waitmovement 0 closebutton msgbox Route110_TrickHousePuzzle5_Text_19D615, 4 closebutton @@ -496,153 +496,153 @@ Route110_TrickHousePuzzle5_EventScript_162F0B:: @ 8162F0B return Route110_TrickHousePuzzle5_EventScript_162F43:: @ 8162F43 - move 1, Route110_TrickHousePuzzle5_Movement_16308D - waitmove 0 + applymovement 1, Route110_TrickHousePuzzle5_Movement_16308D + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162F4E:: @ 8162F4E - move 2, Route110_TrickHousePuzzle5_Movement_16308D - waitmove 0 + applymovement 2, Route110_TrickHousePuzzle5_Movement_16308D + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162F59:: @ 8162F59 - move 3, Route110_TrickHousePuzzle5_Movement_16308D - waitmove 0 + applymovement 3, Route110_TrickHousePuzzle5_Movement_16308D + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162F64:: @ 8162F64 - move 4, Route110_TrickHousePuzzle5_Movement_16308D - waitmove 0 + applymovement 4, Route110_TrickHousePuzzle5_Movement_16308D + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162F6F:: @ 8162F6F - move 5, Route110_TrickHousePuzzle5_Movement_16308D - waitmove 0 + applymovement 5, Route110_TrickHousePuzzle5_Movement_16308D + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162F7A:: @ 8162F7A - move 1, Route110_TrickHousePuzzle5_Movement_16308F - waitmove 0 + applymovement 1, Route110_TrickHousePuzzle5_Movement_16308F + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162F85:: @ 8162F85 - move 2, Route110_TrickHousePuzzle5_Movement_16308F - waitmove 0 + applymovement 2, Route110_TrickHousePuzzle5_Movement_16308F + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162F90:: @ 8162F90 - move 3, Route110_TrickHousePuzzle5_Movement_16308F - waitmove 0 + applymovement 3, Route110_TrickHousePuzzle5_Movement_16308F + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162F9B:: @ 8162F9B - move 4, Route110_TrickHousePuzzle5_Movement_16308F - waitmove 0 + applymovement 4, Route110_TrickHousePuzzle5_Movement_16308F + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162FA6:: @ 8162FA6 - move 5, Route110_TrickHousePuzzle5_Movement_16308F - waitmove 0 + applymovement 5, Route110_TrickHousePuzzle5_Movement_16308F + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162FB1:: @ 8162FB1 - move 1, Route110_TrickHousePuzzle5_Movement_163092 - waitmove 0 + applymovement 1, Route110_TrickHousePuzzle5_Movement_163092 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162FBC:: @ 8162FBC - move 2, Route110_TrickHousePuzzle5_Movement_163092 - waitmove 0 + applymovement 2, Route110_TrickHousePuzzle5_Movement_163092 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162FC7:: @ 8162FC7 - move 3, Route110_TrickHousePuzzle5_Movement_163092 - waitmove 0 + applymovement 3, Route110_TrickHousePuzzle5_Movement_163092 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162FD2:: @ 8162FD2 - move 4, Route110_TrickHousePuzzle5_Movement_163092 - waitmove 0 + applymovement 4, Route110_TrickHousePuzzle5_Movement_163092 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162FDD:: @ 8162FDD - move 5, Route110_TrickHousePuzzle5_Movement_163092 - waitmove 0 + applymovement 5, Route110_TrickHousePuzzle5_Movement_163092 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162FE8:: @ 8162FE8 - move 1, Route110_TrickHousePuzzle5_Movement_163096 - waitmove 0 + applymovement 1, Route110_TrickHousePuzzle5_Movement_163096 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162FF3:: @ 8162FF3 - move 2, Route110_TrickHousePuzzle5_Movement_163096 - waitmove 0 + applymovement 2, Route110_TrickHousePuzzle5_Movement_163096 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_162FFE:: @ 8162FFE - move 3, Route110_TrickHousePuzzle5_Movement_163096 - waitmove 0 + applymovement 3, Route110_TrickHousePuzzle5_Movement_163096 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_163009:: @ 8163009 - move 4, Route110_TrickHousePuzzle5_Movement_163096 - waitmove 0 + applymovement 4, Route110_TrickHousePuzzle5_Movement_163096 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_163014:: @ 8163014 - move 5, Route110_TrickHousePuzzle5_Movement_163096 - waitmove 0 + applymovement 5, Route110_TrickHousePuzzle5_Movement_163096 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_16301F:: @ 816301F - move 1, Route110_TrickHousePuzzle5_Movement_163098 - waitmove 0 + applymovement 1, Route110_TrickHousePuzzle5_Movement_163098 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_16302A:: @ 816302A - move 2, Route110_TrickHousePuzzle5_Movement_163098 - waitmove 0 + applymovement 2, Route110_TrickHousePuzzle5_Movement_163098 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_163035:: @ 8163035 - move 3, Route110_TrickHousePuzzle5_Movement_163098 - waitmove 0 + applymovement 3, Route110_TrickHousePuzzle5_Movement_163098 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_163040:: @ 8163040 - move 4, Route110_TrickHousePuzzle5_Movement_163098 - waitmove 0 + applymovement 4, Route110_TrickHousePuzzle5_Movement_163098 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_16304B:: @ 816304B - move 5, Route110_TrickHousePuzzle5_Movement_163098 - waitmove 0 + applymovement 5, Route110_TrickHousePuzzle5_Movement_163098 + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_163056:: @ 8163056 - move 1, Route110_TrickHousePuzzle5_Movement_16309B - waitmove 0 + applymovement 1, Route110_TrickHousePuzzle5_Movement_16309B + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_163061:: @ 8163061 - move 2, Route110_TrickHousePuzzle5_Movement_16309B - waitmove 0 + applymovement 2, Route110_TrickHousePuzzle5_Movement_16309B + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_16306C:: @ 816306C - move 3, Route110_TrickHousePuzzle5_Movement_16309B - waitmove 0 + applymovement 3, Route110_TrickHousePuzzle5_Movement_16309B + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_163077:: @ 8163077 - move 4, Route110_TrickHousePuzzle5_Movement_16309B - waitmove 0 + applymovement 4, Route110_TrickHousePuzzle5_Movement_16309B + waitmovement 0 return Route110_TrickHousePuzzle5_EventScript_163082:: @ 8163082 - move 5, Route110_TrickHousePuzzle5_Movement_16309B - waitmove 0 + applymovement 5, Route110_TrickHousePuzzle5_Movement_16309B + waitmovement 0 return Route110_TrickHousePuzzle5_Movement_16308D:: @ 816308D diff --git a/data/scripts/maps/Route111.inc b/data/scripts/maps/Route111.inc index fc73716eb..35c60cf8f 100644 --- a/data/scripts/maps/Route111.inc +++ b/data/scripts/maps/Route111.inc @@ -60,8 +60,8 @@ Route111_EventScript_150023:: @ 8150023 setflag 964 disappear 34 delay 30 - move 35, Route111_Movement_1500AF - waitmove 0 + applymovement 35, Route111_Movement_1500AF + waitmovement 0 disappear 35 releaseall end @@ -82,8 +82,8 @@ Route111_EventScript_150069:: @ 8150069 setflag 963 disappear 35 delay 30 - move 34, Route111_Movement_1500AF - waitmove 0 + applymovement 34, Route111_Movement_1500AF + waitmovement 0 disappear 34 releaseall end @@ -185,23 +185,23 @@ Route111_EventScript_150151:: @ 8150151 end Route111_EventScript_150188:: @ 8150188 - move 255, Route111_Movement_1501B4 - waitmove 0 + applymovement 255, Route111_Movement_1501B4 + waitmovement 0 return Route111_EventScript_150193:: @ 8150193 - move 255, Route111_Movement_1501B6 - waitmove 0 + applymovement 255, Route111_Movement_1501B6 + waitmovement 0 return Route111_EventScript_15019E:: @ 815019E - move 255, Route111_Movement_1501B8 - waitmove 0 + applymovement 255, Route111_Movement_1501B8 + waitmovement 0 return Route111_EventScript_1501A9:: @ 81501A9 - move 255, Route111_Movement_1501BA - waitmove 0 + applymovement 255, Route111_Movement_1501BA + waitmovement 0 return Route111_Movement_1501B4:: @ 81501B4 @@ -247,67 +247,67 @@ Route111_EventScript_1501D1:: @ 81501D1 Route111_EventScript_1501F3:: @ 81501F3 msgbox Route111_Text_16F7B3, 4 trainerbattle 3, OPPONENT_VICTOR, 0, Route111_Text_16F7D2 - move 1, Route111_Movement_1A0841 - waitmove 0 + applymovement 1, Route111_Movement_1A0841 + waitmovement 0 call Route111_EventScript_150348 msgbox Route111_Text_16F7FF, 4 closebutton - move 1, Route111_Movement_150356 - waitmove 0 + applymovement 1, Route111_Movement_150356 + waitmovement 0 disappear 1 call Route111_EventScript_15034F - move 255, Route111_Movement_15035B - waitmove 0 + applymovement 255, Route111_Movement_15035B + waitmovement 0 call Route111_EventScript_150348 reappear 2 - move 2, Route111_Movement_150359 - waitmove 0 + applymovement 2, Route111_Movement_150359 + waitmovement 0 call Route111_EventScript_15034F msgbox Route111_Text_16F82D, 4 trainerbattle 3, OPPONENT_VICTORIA, 0, Route111_Text_16F8A6 - move 2, Route111_Movement_1A0841 - waitmove 0 + applymovement 2, Route111_Movement_1A0841 + waitmovement 0 call Route111_EventScript_150348 msgbox Route111_Text_16F8D5, 4 closebutton - move 2, Route111_Movement_150356 - waitmove 0 + applymovement 2, Route111_Movement_150356 + waitmovement 0 disappear 2 call Route111_EventScript_15034F - move 255, Route111_Movement_15035B - waitmove 0 + applymovement 255, Route111_Movement_15035B + waitmovement 0 call Route111_EventScript_150348 reappear 3 - move 3, Route111_Movement_150359 - waitmove 0 + applymovement 3, Route111_Movement_150359 + waitmovement 0 call Route111_EventScript_15034F msgbox Route111_Text_16F90E, 4 trainerbattle 3, OPPONENT_VIVI, 0, Route111_Text_16F956 - move 3, Route111_Movement_1A0841 - waitmove 0 + applymovement 3, Route111_Movement_1A0841 + waitmovement 0 call Route111_EventScript_150348 msgbox Route111_Text_16F96C, 4 closebutton - move 3, Route111_Movement_150356 - waitmove 0 + applymovement 3, Route111_Movement_150356 + waitmovement 0 disappear 3 call Route111_EventScript_15034F - move 255, Route111_Movement_15035B - waitmove 0 + applymovement 255, Route111_Movement_15035B + waitmovement 0 call Route111_EventScript_150348 reappear 4 - move 4, Route111_Movement_150359 - waitmove 0 + applymovement 4, Route111_Movement_150359 + waitmovement 0 call Route111_EventScript_15034F msgbox Route111_Text_16F991, 4 trainerbattle 3, OPPONENT_VICKY, 0, Route111_Text_16F9EC msgbox Route111_Text_16FA22, 4 closebutton - move 4, Route111_Movement_1A0841 - waitmove 0 + applymovement 4, Route111_Movement_1A0841 + waitmovement 0 call Route111_EventScript_150348 - move 4, Route111_Movement_150356 - waitmove 0 + applymovement 4, Route111_Movement_150356 + waitmovement 0 disappear 4 call Route111_EventScript_15034F release diff --git a/data/scripts/maps/Route111_WinstrateFamilysHouse.inc b/data/scripts/maps/Route111_WinstrateFamilysHouse.inc index b5b6056f4..7742d3507 100644 --- a/data/scripts/maps/Route111_WinstrateFamilysHouse.inc +++ b/data/scripts/maps/Route111_WinstrateFamilysHouse.inc @@ -54,7 +54,7 @@ Route111_WinstrateFamilysHouse_EventScript_15BFB6:: @ 815BFB6 Route111_WinstrateFamilysHouse_EventScript_15BFC4:: @ 815BFC4 closebutton - move 0x8008, Route111_WinstrateFamilysHouse_Movement_1A083D - waitmove 0 + applymovement 0x8008, Route111_WinstrateFamilysHouse_Movement_1A083D + waitmovement 0 release end diff --git a/data/scripts/maps/Route112_CableCarStation.inc b/data/scripts/maps/Route112_CableCarStation.inc index d2d01f253..dfa1fecd6 100644 --- a/data/scripts/maps/Route112_CableCarStation.inc +++ b/data/scripts/maps/Route112_CableCarStation.inc @@ -20,9 +20,9 @@ Route112_CableCarStation_MapScript2_15C05E:: @ 815C05E Route112_CableCarStation_EventScript_15C068:: @ 815C068 lockall - move 255, Route112_CableCarStation_Movement_15C0F5 - move 1, Route112_CableCarStation_Movement_15C0EB - waitmove 0 + applymovement 255, Route112_CableCarStation_Movement_15C0F5 + applymovement 1, Route112_CableCarStation_Movement_15C0EB + waitmovement 0 setvar 0x40a3, 0 movespriteperm 1, 6, 7 spritebehave 1, 8 @@ -42,9 +42,9 @@ Route112_CableCarStation_EventScript_15C08C:: @ 815C08C Route112_CableCarStation_EventScript_15C0AD:: @ 815C0AD msgbox Route112_CableCarStation_Text_1925A9, 4 closebutton - move 1, Route112_CableCarStation_Movement_15C0E6 - move 255, Route112_CableCarStation_Movement_15C0F0 - waitmove 0 + applymovement 1, Route112_CableCarStation_Movement_15C0E6 + applymovement 255, Route112_CableCarStation_Movement_15C0F0 + waitmovement 0 setvar 0x8004, 0 setvar 0x40a3, 1 inccounter GAME_STAT_RODE_CABLE_CAR diff --git a/data/scripts/maps/Route116.inc b/data/scripts/maps/Route116.inc index c58a3dfb9..61ccb6632 100644 --- a/data/scripts/maps/Route116.inc +++ b/data/scripts/maps/Route116.inc @@ -63,13 +63,13 @@ Route116_EventScript_150A94:: @ 8150A94 end Route116_EventScript_150AEE:: @ 8150AEE - move LAST_TALKED, Route116_Movement_150B1C - waitmove 0 + applymovement LAST_TALKED, Route116_Movement_150B1C + waitmovement 0 return Route116_EventScript_150AF9:: @ 8150AF9 - move LAST_TALKED, Route116_Movement_150B25 - waitmove 0 + applymovement LAST_TALKED, Route116_Movement_150B25 + waitmovement 0 return Route116_EventScript_150B04:: @ 8150B04 @@ -136,9 +136,9 @@ Route116_EventScript_150B5D:: @ 8150B5D Route116_EventScript_150B6E:: @ 8150B6E lockall - move 11, Route116_Movement_1A0843 - move 255, Route116_Movement_1A083F - waitmove 0 + applymovement 11, Route116_Movement_1A0843 + applymovement 255, Route116_Movement_1A083F + waitmovement 0 msgbox Route116_Text_17032A, 4 setvar 0x406f, 2 releaseall @@ -194,13 +194,13 @@ Route116_EventScript_150C03:: @ 8150C03 end Route116_EventScript_150C37:: @ 8150C37 - move LAST_TALKED, Route116_Movement_150C4D - waitmove 0 + applymovement LAST_TALKED, Route116_Movement_150C4D + waitmovement 0 return Route116_EventScript_150C42:: @ 8150C42 - move LAST_TALKED, Route116_Movement_150C57 - waitmove 0 + applymovement LAST_TALKED, Route116_Movement_150C57 + waitmovement 0 return Route116_Movement_150C4D:: @ 8150C4D diff --git a/data/scripts/maps/Route118.inc b/data/scripts/maps/Route118.inc index 7e6543d7f..8c91e7da4 100644 --- a/data/scripts/maps/Route118.inc +++ b/data/scripts/maps/Route118.inc @@ -51,35 +51,35 @@ Route118_EventScript_150FA5:: @ 8150FA5 Route118_EventScript_150FAE:: @ 8150FAE lockall setvar 0x8008, 0 - move 255, Route118_Movement_1A0841 - waitmove 0 - move 19, Route118_Movement_151069 - waitmove 0 + applymovement 255, Route118_Movement_1A0841 + waitmovement 0 + applymovement 19, Route118_Movement_151069 + waitmovement 0 goto Route118_EventScript_151004 end Route118_EventScript_150FCE:: @ 8150FCE lockall setvar 0x8008, 1 - move 255, Route118_Movement_1A0841 - waitmove 0 + applymovement 255, Route118_Movement_1A0841 + waitmovement 0 goto Route118_EventScript_151004 end Route118_EventScript_150FE4:: @ 8150FE4 lockall setvar 0x8008, 2 - move 255, Route118_Movement_1A0841 - waitmove 0 - move 19, Route118_Movement_15106B - waitmove 0 + applymovement 255, Route118_Movement_1A0841 + waitmovement 0 + applymovement 19, Route118_Movement_15106B + waitmovement 0 goto Route118_EventScript_151004 end Route118_EventScript_151004:: @ 8151004 playse 10 - move 19, Route118_Movement_15106D - waitmove 0 + applymovement 19, Route118_Movement_15106D + waitmovement 0 delay 30 msgbox Route118_Text_170D66, 4 closebutton @@ -95,18 +95,18 @@ Route118_EventScript_151004:: @ 8151004 end Route118_EventScript_151048:: @ 8151048 - move 19, Route118_Movement_151071 - waitmove 0 + applymovement 19, Route118_Movement_151071 + waitmovement 0 return Route118_EventScript_151053:: @ 8151053 - move 19, Route118_Movement_15107C - waitmove 0 + applymovement 19, Route118_Movement_15107C + waitmovement 0 return Route118_EventScript_15105E:: @ 815105E - move 19, Route118_Movement_151086 - waitmove 0 + applymovement 19, Route118_Movement_151086 + waitmovement 0 return Route118_Movement_151069:: @ 8151069 diff --git a/data/scripts/maps/Route119.inc b/data/scripts/maps/Route119.inc index 9abb8adf9..5b0f61387 100644 --- a/data/scripts/maps/Route119.inc +++ b/data/scripts/maps/Route119.inc @@ -61,8 +61,8 @@ Route119_EventScript_1511DB:: @ 81511DB call_if 1, Route119_EventScript_1513A6 compare_var_to_imm 0x4001, 2 call_if 1, Route119_EventScript_1513B1 - move 255, Route119_Movement_1A0845 - waitmove 0 + applymovement 255, Route119_Movement_1A0845 + waitmovement 0 delay 30 compare_var_to_imm 0x4001, 1 call_if 1, Route119_EventScript_1513D2 @@ -173,23 +173,23 @@ Route119_EventScript_151362:: @ 8151362 end Route119_EventScript_1513A6:: @ 81513A6 - move 25, Route119_Movement_1513F0 - waitmove 0 + applymovement 25, Route119_Movement_1513F0 + waitmovement 0 return Route119_EventScript_1513B1:: @ 81513B1 - move 25, Route119_Movement_1513FA - waitmove 0 + applymovement 25, Route119_Movement_1513FA + waitmovement 0 return Route119_EventScript_1513BC:: @ 81513BC - move 25, Route119_Movement_151405 - waitmove 0 + applymovement 25, Route119_Movement_151405 + waitmovement 0 return Route119_EventScript_1513C7:: @ 81513C7 - move 25, Route119_Movement_15140F - waitmove 0 + applymovement 25, Route119_Movement_15140F + waitmovement 0 return Route119_EventScript_1513D2:: @ 81513D2 @@ -355,8 +355,8 @@ Route119_EventScript_1515C5:: @ 81515C5 faceplayer msgbox Route119_Text_171520, 4 closebutton - move LAST_TALKED, Route119_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, Route119_Movement_1A083D + waitmovement 0 release end @@ -365,8 +365,8 @@ Route119_EventScript_1515DC:: @ 81515DC faceplayer msgbox Route119_Text_17157C, 4 closebutton - move LAST_TALKED, Route119_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, Route119_Movement_1A083D + waitmovement 0 release end diff --git a/data/scripts/maps/Route119_WeatherInstitute_2F.inc b/data/scripts/maps/Route119_WeatherInstitute_2F.inc index 54b54dd18..b903d7063 100644 --- a/data/scripts/maps/Route119_WeatherInstitute_2F.inc +++ b/data/scripts/maps/Route119_WeatherInstitute_2F.inc @@ -47,8 +47,8 @@ Route119_WeatherInstitute_2F_EventScript_163D45:: @ 8163D45 disappear 2 disappear 3 fadescreen 0 - move 5, Route119_WeatherInstitute_2F_Movement_163DC8 - waitmove 0 + applymovement 5, Route119_WeatherInstitute_2F_Movement_163DC8 + waitmovement 0 moveoffscreen 5 goto Route119_WeatherInstitute_2F_EventScript_163D7A end diff --git a/data/scripts/maps/Route120.inc b/data/scripts/maps/Route120.inc index 2e6ae94e5..7c1968aa5 100644 --- a/data/scripts/maps/Route120.inc +++ b/data/scripts/maps/Route120.inc @@ -212,15 +212,15 @@ Route120_EventScript_15189D:: @ 815189D call_if 1, Route120_EventScript_15197F compare_var_to_imm FACING, 3 call_if 1, Route120_EventScript_15198A - move 31, Route120_Movement_1A083F - waitmove 0 + applymovement 31, Route120_Movement_1A083F + waitmovement 0 delay 20 msgbox Route120_Text_1719D4, 4 closebutton - move 30, Route120_Movement_1A0843 - waitmove 0 - move 30, Route120_Movement_1A0662 - waitmove 0 + applymovement 30, Route120_Movement_1A0843 + waitmovement 0 + applymovement 30, Route120_Movement_1A0662 + waitmovement 0 waitse pokecry SPECIES_KECLEON, 2 delay 40 @@ -234,16 +234,16 @@ Route120_EventScript_15189D:: @ 815189D end Route120_EventScript_151908:: @ 8151908 - move 31, Route120_Movement_1A0845 - move 255, Route120_Movement_1A0841 - waitmove 0 + applymovement 31, Route120_Movement_1A0845 + applymovement 255, Route120_Movement_1A0841 + waitmovement 0 msgbox Route120_Text_171A40, 4 giveitem ITEM_DEVON_SCOPE setflag 285 msgbox Route120_Text_171B0E, 4 closebutton - move 31, Route120_Movement_1A0845 - waitmove 0 + applymovement 31, Route120_Movement_1A0845 + waitmovement 0 delay 50 setanimation 0, 1 doanimation 30 @@ -259,13 +259,13 @@ Route120_EventScript_151908:: @ 8151908 end Route120_EventScript_15197F:: @ 815197F - move 255, Route120_Movement_1A083F - waitmove 0 + applymovement 255, Route120_Movement_1A083F + waitmovement 0 return Route120_EventScript_15198A:: @ 815198A - move 255, Route120_Movement_151995 - waitmove 0 + applymovement 255, Route120_Movement_151995 + waitmovement 0 return Route120_Movement_151995:: @ 8151995 diff --git a/data/scripts/maps/Route121.inc b/data/scripts/maps/Route121.inc index 68c04762f..562f122e3 100644 --- a/data/scripts/maps/Route121.inc +++ b/data/scripts/maps/Route121.inc @@ -22,10 +22,10 @@ Route121_EventScript_151B25:: @ 8151B25 lockall msgbox Route121_Text_171C8F, 4 closebutton - move 12, Route121_Movement_151B57 - move 13, Route121_Movement_151B60 - move 14, Route121_Movement_151B69 - waitmove 0 + applymovement 12, Route121_Movement_151B57 + applymovement 13, Route121_Movement_151B60 + applymovement 14, Route121_Movement_151B69 + waitmovement 0 disappear 12 disappear 13 disappear 14 diff --git a/data/scripts/maps/Route121_SafariZoneEntrance.inc b/data/scripts/maps/Route121_SafariZoneEntrance.inc index 2fd6e54f6..52f0e5c44 100644 --- a/data/scripts/maps/Route121_SafariZoneEntrance.inc +++ b/data/scripts/maps/Route121_SafariZoneEntrance.inc @@ -8,8 +8,8 @@ Route121_SafariZoneEntrance_MapScript2_15C329:: @ 815C329 Route121_SafariZoneEntrance_EventScript_15C333:: @ 815C333 lockall - move 255, Route121_SafariZoneEntrance_Movement_15C348 - waitmove 0 + applymovement 255, Route121_SafariZoneEntrance_Movement_15C348 + waitmovement 0 special ExitSafariMode setvar 0x40a4, 0 releaseall @@ -47,8 +47,8 @@ Route121_SafariZoneEntrance_EventScript_15C379:: @ 815C379 Route121_SafariZoneEntrance_EventScript_15C383:: @ 815C383 lockall - move 255, Route121_SafariZoneEntrance_Movement_1A0841 - waitmove 0 + applymovement 255, Route121_SafariZoneEntrance_Movement_1A0841 + waitmovement 0 showmoney 0, 0 nop msgbox Route121_SafariZoneEntrance_Text_1C3832, 5 @@ -78,8 +78,8 @@ Route121_SafariZoneEntrance_EventScript_15C3B3:: @ 815C3B3 msgbox Route121_SafariZoneEntrance_Text_1C392D, 4 closebutton hidemoney 0, 0 - move 255, Route121_SafariZoneEntrance_Movement_15C47E - waitmove 0 + applymovement 255, Route121_SafariZoneEntrance_Movement_15C47E + waitmovement 0 special EnterSafariMode setvar 0x40a4, 2 warp SafariZone_Southeast, 255, 32, 33 @@ -113,8 +113,8 @@ Route121_SafariZoneEntrance_EventScript_15C45E:: @ 815C45E Route121_SafariZoneEntrance_EventScript_15C46C:: @ 815C46C closebutton hidemoney 0, 0 - move 255, Route121_SafariZoneEntrance_Movement_15C47C - waitmove 0 + applymovement 255, Route121_SafariZoneEntrance_Movement_15C47C + waitmovement 0 releaseall end diff --git a/data/scripts/maps/Route128.inc b/data/scripts/maps/Route128.inc index 21927ec0f..0ce76670f 100644 --- a/data/scripts/maps/Route128.inc +++ b/data/scripts/maps/Route128.inc @@ -20,35 +20,35 @@ Route128_EventScript_15213F:: @ 815213F special sub_807E25C waitstate .endif - move 4, Route128_Movement_152271 - waitmove 0 + applymovement 4, Route128_Movement_152271 + waitmovement 0 msgbox Route128_Text_171EE0, 4 - move 4, Route128_Movement_152279 - waitmove 0 + applymovement 4, Route128_Movement_152279 + waitmovement 0 msgbox Route128_Text_171F35, 4 closebutton - move 5, Route128_Movement_152293 - waitmove 0 - move 4, Route128_Movement_1A0841 - waitmove 0 + applymovement 5, Route128_Movement_152293 + waitmovement 0 + applymovement 4, Route128_Movement_1A0841 + waitmovement 0 msgbox Route128_Text_171F4B, 4 closebutton - move 5, Route128_Movement_1522A1 - waitmove 0 - move 255, Route128_Movement_1A0841 - waitmove 0 + applymovement 5, Route128_Movement_1522A1 + waitmovement 0 + applymovement 255, Route128_Movement_1A0841 + waitmovement 0 msgbox Route128_Text_172008, 4 closebutton - move 4, Route128_Movement_15227E - move 255, Route128_Movement_1A083F - move 5, Route128_Movement_152290 - waitmove 0 + applymovement 4, Route128_Movement_15227E + applymovement 255, Route128_Movement_1A083F + applymovement 5, Route128_Movement_152290 + waitmovement 0 msgbox Route128_Text_17210B, 4 closebutton delay 40 - move 5, Route128_Movement_152296 - move 4, Route128_Movement_152283 - waitmove 0 + applymovement 5, Route128_Movement_152296 + applymovement 4, Route128_Movement_152283 + waitmovement 0 disappear 5 disappear 4 delay 100 @@ -56,26 +56,26 @@ Route128_EventScript_15213F:: @ 815213F doanimation 30 checkanimation 30 reappear 3 - move 3, Route128_Movement_15226F - waitmove 0 - move 255, Route128_Movement_1A0843 - waitmove 0 + applymovement 3, Route128_Movement_15226F + waitmovement 0 + applymovement 255, Route128_Movement_1A0843 + waitmovement 0 msgbox Route128_Text_172181, 4 closebutton - move 3, Route128_Movement_15226D - move 255, Route128_Movement_1A0841 - waitmove 0 + applymovement 3, Route128_Movement_15226D + applymovement 255, Route128_Movement_1A0841 + waitmovement 0 .ifdef SAPPHIRE msgbox Route128_Text_1721A2, 4 .else msgbox Route128_Text_1722A1, 4 .endif - move 3, Route128_Movement_1A0845 - waitmove 0 + applymovement 3, Route128_Movement_1A0845 + waitmovement 0 msgbox Route128_Text_1723BE, 4 closebutton - move 3, Route128_Movement_1A0845 - waitmove 0 + applymovement 3, Route128_Movement_1A0845 + waitmovement 0 delay 50 setanimation 0, 1 doanimation 30 diff --git a/data/scripts/maps/RustboroCity.inc b/data/scripts/maps/RustboroCity.inc index 677838f8a..ddd58be1a 100644 --- a/data/scripts/maps/RustboroCity.inc +++ b/data/scripts/maps/RustboroCity.inc @@ -101,8 +101,8 @@ RustboroCity_EventScript_14C449:: @ 814C449 lock faceplayer msgbox RustboroCity_Text_166D59, 4 - move 7, RustboroCity_Movement_1A083D - waitmove 0 + applymovement 7, RustboroCity_Movement_1A083D + waitmovement 0 release end @@ -110,8 +110,8 @@ RustboroCity_EventScript_14C45F:: @ 814C45F lock faceplayer msgbox RustboroCity_Text_166DB0, 4 - move 8, RustboroCity_Movement_1A083D - waitmove 0 + applymovement 8, RustboroCity_Movement_1A083D + waitmovement 0 release end @@ -167,15 +167,15 @@ RustboroCity_EventScript_14C4F4:: @ 814C4F4 closebutton reappear 10 reappear 9 - move 10, RustboroCity_Movement_14C5C2 - waitmove 0 + applymovement 10, RustboroCity_Movement_14C5C2 + waitmovement 0 disappear 10 - move 9, RustboroCity_Movement_14C5D3 - waitmove 0 + applymovement 9, RustboroCity_Movement_14C5D3 + waitmovement 0 msgbox RustboroCity_Text_166E7E, 4 closebutton - move 9, RustboroCity_Movement_14C5DB - waitmove 0 + applymovement 9, RustboroCity_Movement_14C5DB + waitmovement 0 disappear 9 movespriteperm 9, 30, 10 clearflag 732 @@ -200,30 +200,30 @@ RustboroCity_EventScript_14C4F4:: @ 814C4F4 return @ 814C56F - move 9, RustboroCity_Movement_14C5E3 - waitmove 0 + applymovement 9, RustboroCity_Movement_14C5E3 + waitmovement 0 return @ 814C57A - move 9, RustboroCity_Movement_14C5E7 - waitmove 0 + applymovement 9, RustboroCity_Movement_14C5E7 + waitmovement 0 return @ 814C585 - move 9, RustboroCity_Movement_14C5EC - waitmove 0 + applymovement 9, RustboroCity_Movement_14C5EC + waitmovement 0 return @ 814C590 - move 9, RustboroCity_Movement_14C5F1 - waitmove 0 + applymovement 9, RustboroCity_Movement_14C5F1 + waitmovement 0 return @ 814C59B - move 9, RustboroCity_Movement_14C5F7 - waitmove 0 - move 255, RustboroCity_Movement_1A0841 - waitmove 0 + applymovement 9, RustboroCity_Movement_14C5F7 + waitmovement 0 + applymovement 255, RustboroCity_Movement_1A0841 + waitmovement 0 return @ 814C5B0 @@ -379,53 +379,53 @@ RustboroCity_EventScript_14C650:: @ 814C650 end RustboroCity_EventScript_14C691:: @ 814C691 - move 9, RustboroCity_Movement_1A0841 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0841 + waitmovement 0 playse 21 - move 9, RustboroCity_Movement_1A0833 - waitmove 0 - move 9, RustboroCity_Movement_1A0835 - waitmove 0 - move 255, RustboroCity_Movement_1A0845 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0833 + waitmovement 0 + applymovement 9, RustboroCity_Movement_1A0835 + waitmovement 0 + applymovement 255, RustboroCity_Movement_1A0845 + waitmovement 0 return RustboroCity_EventScript_14C6BD:: @ 814C6BD - move 9, RustboroCity_Movement_1A083F - waitmove 0 + applymovement 9, RustboroCity_Movement_1A083F + waitmovement 0 playse 21 - move 9, RustboroCity_Movement_1A0833 - waitmove 0 - move 9, RustboroCity_Movement_1A0835 - waitmove 0 - move 255, RustboroCity_Movement_1A0843 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0833 + waitmovement 0 + applymovement 9, RustboroCity_Movement_1A0835 + waitmovement 0 + applymovement 255, RustboroCity_Movement_1A0843 + waitmovement 0 return RustboroCity_EventScript_14C6E9:: @ 814C6E9 - move 9, RustboroCity_Movement_1A0845 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0845 + waitmovement 0 playse 21 - move 9, RustboroCity_Movement_1A0833 - waitmove 0 - move 9, RustboroCity_Movement_1A0835 - waitmove 0 - move 255, RustboroCity_Movement_1A0841 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0833 + waitmovement 0 + applymovement 9, RustboroCity_Movement_1A0835 + waitmovement 0 + applymovement 255, RustboroCity_Movement_1A0841 + waitmovement 0 return RustboroCity_EventScript_14C715:: @ 814C715 - move 9, RustboroCity_Movement_1A0845 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0845 + waitmovement 0 playse 21 - move 9, RustboroCity_Movement_1A0833 - waitmove 0 - move 9, RustboroCity_Movement_1A0835 - waitmove 0 - move 9, RustboroCity_Movement_14C74B - waitmove 0 - move 255, RustboroCity_Movement_1A0841 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0833 + waitmovement 0 + applymovement 9, RustboroCity_Movement_1A0835 + waitmovement 0 + applymovement 9, RustboroCity_Movement_14C74B + waitmovement 0 + applymovement 255, RustboroCity_Movement_1A0841 + waitmovement 0 return RustboroCity_Movement_14C74B:: @ 814C74B @@ -487,63 +487,63 @@ RustboroCity_EventScript_14C7F5:: @ 814C7F5 return RustboroCity_EventScript_14C7FE:: @ 814C7FE - move 9, RustboroCity_Movement_1A0841 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0841 + waitmovement 0 playse 21 - move 9, RustboroCity_Movement_1A0833 - waitmove 0 - move 9, RustboroCity_Movement_1A0835 - waitmove 0 - move 255, RustboroCity_Movement_1A0845 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0833 + waitmovement 0 + applymovement 9, RustboroCity_Movement_1A0835 + waitmovement 0 + applymovement 255, RustboroCity_Movement_1A0845 + waitmovement 0 return RustboroCity_EventScript_14C82A:: @ 814C82A - move 9, RustboroCity_Movement_1A0843 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0843 + waitmovement 0 playse 21 - move 9, RustboroCity_Movement_1A0833 - waitmove 0 - move 9, RustboroCity_Movement_1A0835 - waitmove 0 - move 255, RustboroCity_Movement_1A083F - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0833 + waitmovement 0 + applymovement 9, RustboroCity_Movement_1A0835 + waitmovement 0 + applymovement 255, RustboroCity_Movement_1A083F + waitmovement 0 return RustboroCity_EventScript_14C856:: @ 814C856 - move 9, RustboroCity_Movement_1A0845 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0845 + waitmovement 0 playse 21 - move 9, RustboroCity_Movement_1A0833 - waitmove 0 - move 9, RustboroCity_Movement_1A0835 - waitmove 0 - move 255, RustboroCity_Movement_1A0841 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0833 + waitmovement 0 + applymovement 9, RustboroCity_Movement_1A0835 + waitmovement 0 + applymovement 255, RustboroCity_Movement_1A0841 + waitmovement 0 return RustboroCity_EventScript_14C882:: @ 814C882 - move 9, RustboroCity_Movement_1A0845 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0845 + waitmovement 0 playse 21 - move 9, RustboroCity_Movement_1A0833 - waitmove 0 - move 9, RustboroCity_Movement_1A0835 - waitmove 0 - move 9, RustboroCity_Movement_14C74B - waitmove 0 - move 255, RustboroCity_Movement_1A0841 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0833 + waitmovement 0 + applymovement 9, RustboroCity_Movement_1A0835 + waitmovement 0 + applymovement 9, RustboroCity_Movement_14C74B + waitmovement 0 + applymovement 255, RustboroCity_Movement_1A0841 + waitmovement 0 return RustboroCity_EventScript_14C8B8:: @ 814C8B8 - move 9, RustboroCity_Movement_1A083F - waitmove 0 + applymovement 9, RustboroCity_Movement_1A083F + waitmovement 0 playse 21 - move 9, RustboroCity_Movement_1A0833 - waitmove 0 - move 9, RustboroCity_Movement_1A0835 - waitmove 0 + applymovement 9, RustboroCity_Movement_1A0833 + waitmovement 0 + applymovement 9, RustboroCity_Movement_1A0835 + waitmovement 0 return RustboroCity_EventScript_14C8DA:: @ 814C8DA diff --git a/data/scripts/maps/RustboroCity_DevonCorp_2F.inc b/data/scripts/maps/RustboroCity_DevonCorp_2F.inc index 2f3fd5927..d5b3b03c7 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_2F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_2F.inc @@ -81,10 +81,10 @@ RustboroCity_DevonCorp_2F_EventScript_157564:: @ 8157564 RustboroCity_DevonCorp_2F_EventScript_1575A6:: @ 81575A6 closebutton playse 21 - move 5, RustboroCity_DevonCorp_2F_Movement_1A0833 - waitmove 0 - move 5, RustboroCity_DevonCorp_2F_Movement_1A0835 - waitmove 0 + applymovement 5, RustboroCity_DevonCorp_2F_Movement_1A0833 + waitmovement 0 + applymovement 5, RustboroCity_DevonCorp_2F_Movement_1A0835 + waitmovement 0 msgbox RustboroCity_DevonCorp_2F_Text_182F35, 5 compare_var_to_imm RESULT, 0 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157636 @@ -99,10 +99,10 @@ RustboroCity_DevonCorp_2F_EventScript_1575A6:: @ 81575A6 RustboroCity_DevonCorp_2F_EventScript_1575EE:: @ 81575EE closebutton playse 21 - move 5, RustboroCity_DevonCorp_2F_Movement_1A0833 - waitmove 0 - move 5, RustboroCity_DevonCorp_2F_Movement_1A0835 - waitmove 0 + applymovement 5, RustboroCity_DevonCorp_2F_Movement_1A0833 + waitmovement 0 + applymovement 5, RustboroCity_DevonCorp_2F_Movement_1A0835 + waitmovement 0 msgbox RustboroCity_DevonCorp_2F_Text_182F35, 5 compare_var_to_imm RESULT, 0 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157636 diff --git a/data/scripts/maps/RustboroCity_DevonCorp_3F.inc b/data/scripts/maps/RustboroCity_DevonCorp_3F.inc index 887299933..12cf2f6c8 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_3F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_3F.inc @@ -30,23 +30,23 @@ RustboroCity_DevonCorp_3F_EventScript_157752:: @ 8157752 lockall msgbox RustboroCity_DevonCorp_3F_Text_18374C, 4 closebutton - move 2, RustboroCity_DevonCorp_3F_Movement_157815 - waitmove 0 + applymovement 2, RustboroCity_DevonCorp_3F_Movement_157815 + waitmovement 0 delay 80 - move 2, RustboroCity_DevonCorp_3F_Movement_15781E - waitmove 0 + applymovement 2, RustboroCity_DevonCorp_3F_Movement_15781E + waitmovement 0 msgbox RustboroCity_DevonCorp_3F_Text_183903, 4 closebutton playbgm 420, 0 - move 2, RustboroCity_DevonCorp_3F_Movement_157803 - move 255, RustboroCity_DevonCorp_3F_Movement_157827 - waitmove 0 + applymovement 2, RustboroCity_DevonCorp_3F_Movement_157803 + applymovement 255, RustboroCity_DevonCorp_3F_Movement_157827 + waitmovement 0 msgbox RustboroCity_DevonCorp_3F_Text_18394A, 4 closebutton fadedefaultbgm - move 2, RustboroCity_DevonCorp_3F_Movement_157812 - move 255, RustboroCity_DevonCorp_3F_Movement_157835 - waitmove 0 + applymovement 2, RustboroCity_DevonCorp_3F_Movement_157812 + applymovement 255, RustboroCity_DevonCorp_3F_Movement_157835 + waitmovement 0 msgbox RustboroCity_DevonCorp_3F_Text_18320B, 4 giveitem ITEM_LETTER msgbox RustboroCity_DevonCorp_3F_Text_18337E, 4 @@ -152,8 +152,8 @@ RustboroCity_DevonCorp_3F_EventScript_15783B:: @ 815783B goto_if_eq RustboroCity_DevonCorp_3F_EventScript_157864 msgbox RustboroCity_DevonCorp_3F_Text_18351E, 4 closebutton - move LAST_TALKED, RustboroCity_DevonCorp_3F_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, RustboroCity_DevonCorp_3F_Movement_1A083D + waitmovement 0 release end @@ -165,16 +165,16 @@ RustboroCity_DevonCorp_3F_EventScript_157864:: @ 8157864 setflag 272 msgbox RustboroCity_DevonCorp_3F_Text_1835B3, 4 closebutton - move LAST_TALKED, RustboroCity_DevonCorp_3F_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, RustboroCity_DevonCorp_3F_Movement_1A083D + waitmovement 0 release end RustboroCity_DevonCorp_3F_EventScript_15789B:: @ 815789B msgbox RustboroCity_DevonCorp_3F_Text_18368D, 4 closebutton - move LAST_TALKED, RustboroCity_DevonCorp_3F_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, RustboroCity_DevonCorp_3F_Movement_1A083D + waitmovement 0 release end diff --git a/data/scripts/maps/RustboroCity_PokemonSchool.inc b/data/scripts/maps/RustboroCity_PokemonSchool.inc index 5f4de010e..cd71e8bba 100644 --- a/data/scripts/maps/RustboroCity_PokemonSchool.inc +++ b/data/scripts/maps/RustboroCity_PokemonSchool.inc @@ -88,27 +88,27 @@ RustboroCity_PokemonSchool_EventScript_157ACE:: @ 8157ACE compare_var_to_imm RESULT, 0 goto_if_eq RustboroCity_PokemonSchool_EventScript_1A029B closebutton - move LAST_TALKED, RustboroCity_PokemonSchool_Movement_1A0845 - waitmove 0 + applymovement LAST_TALKED, RustboroCity_PokemonSchool_Movement_1A0845 + waitmovement 0 setflag 275 release end RustboroCity_PokemonSchool_EventScript_157B1E:: @ 8157B1E - move LAST_TALKED, RustboroCity_PokemonSchool_Movement_157B60 - waitmove 0 + applymovement LAST_TALKED, RustboroCity_PokemonSchool_Movement_157B60 + waitmovement 0 return RustboroCity_PokemonSchool_EventScript_157B29:: @ 8157B29 - move LAST_TALKED, RustboroCity_PokemonSchool_Movement_157B49 - waitmove 0 + applymovement LAST_TALKED, RustboroCity_PokemonSchool_Movement_157B49 + waitmovement 0 return RustboroCity_PokemonSchool_EventScript_157B34:: @ 8157B34 msgbox RustboroCity_PokemonSchool_Text_184737, 4 closebutton - move LAST_TALKED, RustboroCity_PokemonSchool_Movement_1A0845 - waitmove 0 + applymovement LAST_TALKED, RustboroCity_PokemonSchool_Movement_1A0845 + waitmovement 0 release end diff --git a/data/scripts/maps/RusturfTunnel.inc b/data/scripts/maps/RusturfTunnel.inc index cfa319bf3..922ad27e1 100644 --- a/data/scripts/maps/RusturfTunnel.inc +++ b/data/scripts/maps/RusturfTunnel.inc @@ -24,8 +24,8 @@ RusturfTunnel_EventScript_15C782:: @ 815C782 faceplayer msgbox RusturfTunnel_Text_194766, 4 closebutton - move LAST_TALKED, RusturfTunnel_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, RusturfTunnel_Movement_1A083D + waitmovement 0 release end @@ -37,16 +37,16 @@ RusturfTunnel_EventScript_15C799:: @ 815C799 setflag 1 msgbox RusturfTunnel_Text_1944C5, 4 closebutton - move LAST_TALKED, RusturfTunnel_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, RusturfTunnel_Movement_1A083D + waitmovement 0 release end RusturfTunnel_EventScript_15C7BC:: @ 815C7BC msgbox RusturfTunnel_Text_1945B2, 4 closebutton - move LAST_TALKED, RusturfTunnel_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, RusturfTunnel_Movement_1A083D + waitmovement 0 release end @@ -87,37 +87,37 @@ RusturfTunnel_EventScript_15C7D1:: @ 815C7D1 end RusturfTunnel_EventScript_15C880:: @ 815C880 - move 255, RusturfTunnel_Movement_15C96A - move 1, RusturfTunnel_Movement_15C98F - waitmove 0 + applymovement 255, RusturfTunnel_Movement_15C96A + applymovement 1, RusturfTunnel_Movement_15C98F + waitmovement 0 return RusturfTunnel_EventScript_15C892:: @ 815C892 - move 255, RusturfTunnel_Movement_15C96D - move 1, RusturfTunnel_Movement_15C994 - waitmove 0 - move 10, RusturfTunnel_Movement_1A0845 - waitmove 0 + applymovement 255, RusturfTunnel_Movement_15C96D + applymovement 1, RusturfTunnel_Movement_15C994 + waitmovement 0 + applymovement 10, RusturfTunnel_Movement_1A0845 + waitmovement 0 return RusturfTunnel_EventScript_15C8AE:: @ 815C8AE - move 255, RusturfTunnel_Movement_15C96D - move 1, RusturfTunnel_Movement_15C994 - waitmove 0 - move 10, RusturfTunnel_Movement_1A0845 - waitmove 0 + applymovement 255, RusturfTunnel_Movement_15C96D + applymovement 1, RusturfTunnel_Movement_15C994 + waitmovement 0 + applymovement 10, RusturfTunnel_Movement_1A0845 + waitmovement 0 return RusturfTunnel_EventScript_15C8CA:: @ 815C8CA - move 1, RusturfTunnel_Movement_1A0841 - waitmove 0 - move 255, RusturfTunnel_Movement_1A0845 - waitmove 0 + applymovement 1, RusturfTunnel_Movement_1A0841 + waitmovement 0 + applymovement 255, RusturfTunnel_Movement_1A0845 + waitmovement 0 return RusturfTunnel_EventScript_15C8DF:: @ 815C8DF - move 1, RusturfTunnel_Movement_15C970 - waitmove 0 + applymovement 1, RusturfTunnel_Movement_15C970 + waitmovement 0 return RusturfTunnel_EventScript_15C8EA:: @ 815C8EA @@ -125,34 +125,34 @@ RusturfTunnel_EventScript_15C8EA:: @ 815C8EA RusturfTunnel_EventScript_15C8EB:: @ 815C8EB closebutton - move 1, RusturfTunnel_Movement_15C98D - waitmove 0 + applymovement 1, RusturfTunnel_Movement_15C98D + waitmovement 0 return RusturfTunnel_EventScript_15C8F7:: @ 815C8F7 - move 10, RusturfTunnel_Movement_15C945 - move 1, RusturfTunnel_Movement_15C973 - waitmove 0 + applymovement 10, RusturfTunnel_Movement_15C945 + applymovement 1, RusturfTunnel_Movement_15C973 + waitmovement 0 return RusturfTunnel_EventScript_15C909:: @ 815C909 - move 10, RusturfTunnel_Movement_15C951 - move 1, RusturfTunnel_Movement_15C980 - waitmove 0 + applymovement 10, RusturfTunnel_Movement_15C951 + applymovement 1, RusturfTunnel_Movement_15C980 + waitmovement 0 return RusturfTunnel_EventScript_15C91B:: @ 815C91B - move 10, RusturfTunnel_Movement_15C951 - move 1, RusturfTunnel_Movement_15C980 - waitmove 0 + applymovement 10, RusturfTunnel_Movement_15C951 + applymovement 1, RusturfTunnel_Movement_15C980 + waitmovement 0 return RusturfTunnel_EventScript_15C92D:: @ 815C92D playse 21 - move 1, RusturfTunnel_Movement_1A0833 - waitmove 0 - move 1, RusturfTunnel_Movement_1A0835 - waitmove 0 + applymovement 1, RusturfTunnel_Movement_1A0833 + waitmovement 0 + applymovement 1, RusturfTunnel_Movement_1A0835 + waitmovement 0 return RusturfTunnel_Movement_15C945:: @ 815C945 @@ -281,9 +281,9 @@ RusturfTunnel_EventScript_15C9AB:: @ 815C9AB lockall msgbox RusturfTunnel_Text_194159, 4 closebutton - move 6, RusturfTunnel_Movement_15C9D3 - move 7, RusturfTunnel_Movement_15C9D3 - waitmove 0 + applymovement 6, RusturfTunnel_Movement_15C9D3 + applymovement 7, RusturfTunnel_Movement_15C9D3 + waitmovement 0 moveoffscreen 6 moveoffscreen 7 setvar 0x409a, 3 @@ -315,20 +315,20 @@ RusturfTunnel_EventScript_15C9EA:: @ 815C9EA msgbox RusturfTunnel_Text_194274, 4 giveitem ITEM_DEVON_GOODS closebutton - move 255, RusturfTunnel_Movement_15CA99 - move 6, RusturfTunnel_Movement_15CAA2 - waitmove 0 + applymovement 255, RusturfTunnel_Movement_15CA99 + applymovement 6, RusturfTunnel_Movement_15CAA2 + waitmovement 0 disappear 6 delay 50 reappear 5 - move 5, RusturfTunnel_Movement_15CAAC - waitmove 0 - move 255, RusturfTunnel_Movement_15CA9F - move 5, RusturfTunnel_Movement_15CAC0 - waitmove 0 + applymovement 5, RusturfTunnel_Movement_15CAAC + waitmovement 0 + applymovement 255, RusturfTunnel_Movement_15CA9F + applymovement 5, RusturfTunnel_Movement_15CAC0 + waitmovement 0 msgbox RusturfTunnel_Text_19432A, 4 - move 5, RusturfTunnel_Movement_1A0839 - waitmove 0 + applymovement 5, RusturfTunnel_Movement_1A0839 + waitmovement 0 message RusturfTunnel_Text_19434F waittext waitse @@ -336,9 +336,9 @@ RusturfTunnel_EventScript_15C9EA:: @ 815C9EA waitbutton waitpokecry closebutton - move 5, RusturfTunnel_Movement_15CAB4 - move 7, RusturfTunnel_Movement_15CAC3 - waitmove 0 + applymovement 5, RusturfTunnel_Movement_15CAB4 + applymovement 7, RusturfTunnel_Movement_15CAC3 + waitmovement 0 disappear 5 disappear 7 clearflag 142 diff --git a/data/scripts/maps/SafariZone_Southeast.inc b/data/scripts/maps/SafariZone_Southeast.inc index f1c37be5b..b735a87b2 100644 --- a/data/scripts/maps/SafariZone_Southeast.inc +++ b/data/scripts/maps/SafariZone_Southeast.inc @@ -10,10 +10,10 @@ SafariZone_Southeast_MapScript2_160041:: @ 8160041 SafariZone_Southeast_EventScript_16004B:: @ 816004B lockall setvar 0x4001, 0 - move 255, SafariZone_Southeast_Movement_160087 - waitmove 0 - move 1, SafariZone_Southeast_Movement_160089 - waitmove 0 + applymovement 255, SafariZone_Southeast_Movement_160087 + waitmovement 0 + applymovement 1, SafariZone_Southeast_Movement_160089 + waitmovement 0 movespriteperm 1, 32, 34 setvar 0x40a4, 0 releaseall @@ -76,18 +76,18 @@ SafariZone_Southeast_EventScript_1600E0:: @ 81600E0 end SafariZone_Southeast_EventScript_160105:: @ 8160105 - move 1, SafariZone_Southeast_Movement_160150 - waitmove 0 - move 255, SafariZone_Southeast_Movement_16014B - waitmove 0 + applymovement 1, SafariZone_Southeast_Movement_160150 + waitmovement 0 + applymovement 255, SafariZone_Southeast_Movement_16014B + waitmovement 0 goto SafariZone_Southeast_EventScript_160139 end SafariZone_Southeast_EventScript_16011F:: @ 816011F - move 1, SafariZone_Southeast_Movement_160153 - waitmove 0 - move 255, SafariZone_Southeast_Movement_16014D - waitmove 0 + applymovement 1, SafariZone_Southeast_Movement_160153 + waitmovement 0 + applymovement 255, SafariZone_Southeast_Movement_16014D + waitmovement 0 goto SafariZone_Southeast_EventScript_160139 end diff --git a/data/scripts/maps/SeafloorCavern_Room9.inc b/data/scripts/maps/SeafloorCavern_Room9.inc index fe13664d9..087c1caf7 100644 --- a/data/scripts/maps/SeafloorCavern_Room9.inc +++ b/data/scripts/maps/SeafloorCavern_Room9.inc @@ -18,10 +18,10 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA setvar 0x8005, 3 setvar 0x8006, 4 setvar 0x8007, 5 - move 255, SeafloorCavern_Room9_Movement_1A0841 - waitmove 0 - move 255, SeafloorCavern_Room9_Movement_15DD68 - waitmove 0 + applymovement 255, SeafloorCavern_Room9_Movement_1A0841 + waitmovement 0 + applymovement 255, SeafloorCavern_Room9_Movement_15DD68 + waitmovement 0 .ifdef SAPPHIRE msgbox UnknownString_81B41B8, 4 .else @@ -29,24 +29,24 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA .endif closebutton reappear 0x8004 - move 255, SeafloorCavern_Room9_Movement_1A083F - waitmove 0 - move 0x8004, SeafloorCavern_Room9_Movement_15DD36 - waitmove 0 + applymovement 255, SeafloorCavern_Room9_Movement_1A083F + waitmovement 0 + applymovement 0x8004, SeafloorCavern_Room9_Movement_15DD36 + waitmovement 0 .ifdef SAPPHIRE msgbox UnknownString_81B41D5, 4 .else msgbox SeafloorCavern_Room9_Text_1B486C, 4 .endif - move 0x8004, SeafloorCavern_Room9_Movement_1A0841 - waitmove 0 + applymovement 0x8004, SeafloorCavern_Room9_Movement_1A0841 + waitmovement 0 .ifdef SAPPHIRE msgbox UnknownString_81B4201, 4 .else msgbox SeafloorCavern_Room9_Text_1B4897, 4 .endif - move 0x8004, SeafloorCavern_Room9_Movement_1A0839 - waitmove 0 + applymovement 0x8004, SeafloorCavern_Room9_Movement_1A0839 + waitmovement 0 .ifdef SAPPHIRE msgbox UnknownString_81B4289, 4 .else @@ -92,24 +92,24 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA playfanfare 388 playse 107 special sub_80818A4 - move 0x8004, SeafloorCavern_Room9_Movement_1A0841 - move 255, SeafloorCavern_Room9_Movement_1A0841 - waitmove 0 + applymovement 0x8004, SeafloorCavern_Room9_Movement_1A0841 + applymovement 255, SeafloorCavern_Room9_Movement_1A0841 + waitmovement 0 delay 150 disappear 7 reappear 1 waitstate delay 60 - move 1, SeafloorCavern_Room9_Movement_15DD4C - waitmove 0 + applymovement 1, SeafloorCavern_Room9_Movement_15DD4C + waitmovement 0 special sub_80818FC waitstate setvar 0x8004, 1 setvar 0x8005, 1 special sub_810F758 waitstate - move 1, SeafloorCavern_Room9_Movement_15DD57 - waitmove 0 + applymovement 1, SeafloorCavern_Room9_Movement_15DD57 + waitmovement 0 disappear 1 delay 4 setvar 0x8004, 2 @@ -127,16 +127,16 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA msgbox SeafloorCavern_Room9_Text_1B4A89, 4 .endif playse 2 - move 255, SeafloorCavern_Room9_Movement_1A083F - waitmove 0 + applymovement 255, SeafloorCavern_Room9_Movement_1A083F + waitmovement 0 .ifdef SAPPHIRE msgbox UnknownString_81B4443, 4 .else msgbox SeafloorCavern_Room9_Text_1B4ADB, 4 .endif closebutton - move 0x8004, SeafloorCavern_Room9_Movement_15DD41 - waitmove 0 + applymovement 0x8004, SeafloorCavern_Room9_Movement_15DD41 + waitmovement 0 .ifdef SAPPHIRE msgbox UnknownString_81B447A, 4 .else @@ -145,8 +145,8 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA closebutton playse 3 delay 20 - move 0x8004, SeafloorCavern_Room9_Movement_1A0845 - waitmove 0 + applymovement 0x8004, SeafloorCavern_Room9_Movement_1A0845 + waitmovement 0 .ifdef SAPPHIRE msgbox UnknownString_81B45C6, 4 .else @@ -156,22 +156,22 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA reappear 0x8005 reappear 0x8006 reappear 0x8007 - move 0x8007, SeafloorCavern_Room9_Movement_15DD63 - move 0x8006, SeafloorCavern_Room9_Movement_15DD63 - move 0x8005, SeafloorCavern_Room9_Movement_15DD5A - waitmove 0 - move 0x8004, SeafloorCavern_Room9_Movement_1A083F - waitmove 0 + applymovement 0x8007, SeafloorCavern_Room9_Movement_15DD63 + applymovement 0x8006, SeafloorCavern_Room9_Movement_15DD63 + applymovement 0x8005, SeafloorCavern_Room9_Movement_15DD5A + waitmovement 0 + applymovement 0x8004, SeafloorCavern_Room9_Movement_1A083F + waitmovement 0 .ifdef SAPPHIRE msgbox UnknownString_81B464D, 4 .else msgbox SeafloorCavern_Room9_Text_1B4D02, 4 .endif playse 21 - move 0x8004, SeafloorCavern_Room9_Movement_1A0833 - waitmove 0 - move 0x8004, SeafloorCavern_Room9_Movement_1A0835 - waitmove 0 + applymovement 0x8004, SeafloorCavern_Room9_Movement_1A0833 + waitmovement 0 + applymovement 0x8004, SeafloorCavern_Room9_Movement_1A0835 + waitmovement 0 .ifdef SAPPHIRE msgbox UnknownString_81B4723, 4 .else @@ -183,9 +183,9 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA msgbox SeafloorCavern_Room9_Text_1B4E37, 4 .endif closebutton - move 0x8005, SeafloorCavern_Room9_Movement_15DD60 - move 0x8004, SeafloorCavern_Room9_Movement_15DD46 - waitmove 0 + applymovement 0x8005, SeafloorCavern_Room9_Movement_15DD60 + applymovement 0x8004, SeafloorCavern_Room9_Movement_15DD46 + waitmovement 0 .ifdef SAPPHIRE msgbox UnknownString_81B4818, 4 .else diff --git a/data/scripts/maps/SlateportCity.inc b/data/scripts/maps/SlateportCity.inc index 69bd90d75..02ab6c28c 100644 --- a/data/scripts/maps/SlateportCity.inc +++ b/data/scripts/maps/SlateportCity.inc @@ -308,8 +308,8 @@ SlateportCity_EventScript_14BD3A:: @ 814BD3A faceplayer msgbox SlateportCity_Text_164C64, 4 closebutton - move 5, SlateportCity_Movement_1A083D - waitmove 0 + applymovement 5, SlateportCity_Movement_1A083D + waitmovement 0 release end @@ -318,8 +318,8 @@ SlateportCity_EventScript_14BD51:: @ 814BD51 faceplayer msgbox SlateportCity_Text_164C9F, 4 closebutton - move 19, SlateportCity_Movement_1A083D - waitmove 0 + applymovement 19, SlateportCity_Movement_1A083D + waitmovement 0 release end @@ -328,8 +328,8 @@ SlateportCity_EventScript_14BD68:: @ 814BD68 faceplayer msgbox SlateportCity_Text_164CE8, 4 closebutton - move 20, SlateportCity_Movement_1A083D - waitmove 0 + applymovement 20, SlateportCity_Movement_1A083D + waitmovement 0 release end @@ -338,8 +338,8 @@ SlateportCity_EventScript_14BD7F:: @ 814BD7F faceplayer msgbox SlateportCity_Text_164D2B, 4 closebutton - move 27, SlateportCity_Movement_1A083D - waitmove 0 + applymovement 27, SlateportCity_Movement_1A083D + waitmovement 0 release end @@ -348,8 +348,8 @@ SlateportCity_EventScript_14BD96:: @ 814BD96 faceplayer msgbox SlateportCity_Text_164D92, 4 closebutton - move 28, SlateportCity_Movement_1A083D - waitmove 0 + applymovement 28, SlateportCity_Movement_1A083D + waitmovement 0 release end @@ -358,8 +358,8 @@ SlateportCity_EventScript_14BDAD:: @ 814BDAD faceplayer msgbox SlateportCity_Text_164DD5, 4 closebutton - move 29, SlateportCity_Movement_1A083D - waitmove 0 + applymovement 29, SlateportCity_Movement_1A083D + waitmovement 0 release end @@ -368,8 +368,8 @@ SlateportCity_EventScript_14BDC4:: @ 814BDC4 faceplayer msgbox SlateportCity_Text_164DF4, 4 closebutton - move 30, SlateportCity_Movement_1A083D - waitmove 0 + applymovement 30, SlateportCity_Movement_1A083D + waitmovement 0 release end @@ -378,8 +378,8 @@ SlateportCity_EventScript_14BDDB:: @ 814BDDB faceplayer msgbox SlateportCity_Text_164E46, 4 closebutton - move 31, SlateportCity_Movement_1A083D - waitmove 0 + applymovement 31, SlateportCity_Movement_1A083D + waitmovement 0 release end @@ -491,47 +491,47 @@ SlateportCity_EventScript_14BEBC:: @ 814BEBC msgbox SlateportCity_Text_165498, 4 msgbox SlateportCity_Text_1654E0, 4 closebutton - move 10, SlateportCity_Movement_1A0843 - waitmove 0 + applymovement 10, SlateportCity_Movement_1A0843 + waitmovement 0 delay 10 - move 9, SlateportCity_Movement_1A0845 - waitmove 0 + applymovement 9, SlateportCity_Movement_1A0845 + waitmovement 0 delay 25 - move 11, SlateportCity_Movement_14C000 - move 255, SlateportCity_Movement_14C00E - move 10, SlateportCity_Movement_14BFDD - move 9, SlateportCity_Movement_14BFEA - waitmove 0 + applymovement 11, SlateportCity_Movement_14C000 + applymovement 255, SlateportCity_Movement_14C00E + applymovement 10, SlateportCity_Movement_14BFDD + applymovement 9, SlateportCity_Movement_14BFEA + waitmovement 0 disappear 10 disappear 9 msgbox SlateportCity_Text_16558D, 4 - move 11, SlateportCity_Movement_1A0841 - waitmove 0 + applymovement 11, SlateportCity_Movement_1A0841 + waitmovement 0 msgbox SlateportCity_Text_1655E7, 4 playbgm BGM_EVIL_TEAM, 0 msgbox SlateportCity_Text_1656BC, 4 - move 6, SlateportCity_Movement_1A083F - move 1, SlateportCity_Movement_1A083F - move 7, SlateportCity_Movement_14BFCD - move 3, SlateportCity_Movement_1A0831 - move 2, SlateportCity_Movement_14BFD5 - waitmove 0 - move 11, SlateportCity_Movement_1A0845 - waitmove 0 + applymovement 6, SlateportCity_Movement_1A083F + applymovement 1, SlateportCity_Movement_1A083F + applymovement 7, SlateportCity_Movement_14BFCD + applymovement 3, SlateportCity_Movement_1A0831 + applymovement 2, SlateportCity_Movement_14BFD5 + waitmovement 0 + applymovement 11, SlateportCity_Movement_1A0845 + waitmovement 0 msgbox SlateportCity_Text_16578F, 4 playse 21 - move 11, SlateportCity_Movement_1A0833 - waitmove 0 - move 11, SlateportCity_Movement_1A0835 - waitmove 0 + applymovement 11, SlateportCity_Movement_1A0833 + waitmovement 0 + applymovement 11, SlateportCity_Movement_1A0835 + waitmovement 0 msgbox SlateportCity_Text_1657FA, 4 - move 11, SlateportCity_Movement_1A0839 - waitmove 0 + applymovement 11, SlateportCity_Movement_1A0839 + waitmovement 0 msgbox SlateportCity_Text_16583A, 4 closebutton - move 11, SlateportCity_Movement_14BFFB - move 255, SlateportCity_Movement_14C008 - waitmove 0 + applymovement 11, SlateportCity_Movement_14BFFB + applymovement 255, SlateportCity_Movement_14C008 + waitmovement 0 disappear 11 clearflag 841 clearflag 848 diff --git a/data/scripts/maps/SlateportCity_ContestHall.inc b/data/scripts/maps/SlateportCity_ContestHall.inc index d30089fbb..74eaf27fe 100644 --- a/data/scripts/maps/SlateportCity_ContestHall.inc +++ b/data/scripts/maps/SlateportCity_ContestHall.inc @@ -31,80 +31,80 @@ SlateportCity_ContestHall_EventScript_155595:: @ 8155595 SlateportCity_ContestHall_EventScript_15559F:: @ 815559F msgbox SlateportCity_ContestHall_Text_17CEF3, 2 lockall - move 3, SlateportCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 3, SlateportCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end SlateportCity_ContestHall_EventScript_1555B4:: @ 81555B4 msgbox SlateportCity_ContestHall_Text_17CFA7, 2 lockall - move 4, SlateportCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 4, SlateportCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end SlateportCity_ContestHall_EventScript_1555C9:: @ 81555C9 msgbox SlateportCity_ContestHall_Text_17D054, 2 lockall - move 5, SlateportCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 5, SlateportCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end SlateportCity_ContestHall_EventScript_1555DE:: @ 81555DE msgbox SlateportCity_ContestHall_Text_17D07F, 2 lockall - move 6, SlateportCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 6, SlateportCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end SlateportCity_ContestHall_EventScript_1555F3:: @ 81555F3 msgbox SlateportCity_ContestHall_Text_17D0F9, 2 lockall - move 7, SlateportCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 7, SlateportCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end SlateportCity_ContestHall_EventScript_155608:: @ 8155608 msgbox SlateportCity_ContestHall_Text_17D222, 2 lockall - move 8, SlateportCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 8, SlateportCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end SlateportCity_ContestHall_EventScript_15561D:: @ 815561D msgbox SlateportCity_ContestHall_Text_17D39A, 2 lockall - move 9, SlateportCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 9, SlateportCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end SlateportCity_ContestHall_EventScript_155632:: @ 8155632 msgbox SlateportCity_ContestHall_Text_17D3F0, 2 lockall - move 10, SlateportCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 10, SlateportCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end SlateportCity_ContestHall_EventScript_155647:: @ 8155647 msgbox SlateportCity_ContestHall_Text_17D300, 2 lockall - move 12, SlateportCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 12, SlateportCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end SlateportCity_ContestHall_EventScript_15565C:: @ 815565C msgbox SlateportCity_ContestHall_Text_17D27F, 2 lockall - move 11, SlateportCity_ContestHall_Movement_1A083D - waitmove 0 + applymovement 11, SlateportCity_ContestHall_Movement_1A083D + waitmovement 0 releaseall end diff --git a/data/scripts/maps/SlateportCity_ContestLobby.inc b/data/scripts/maps/SlateportCity_ContestLobby.inc index 0f2d03a5a..c43b64288 100644 --- a/data/scripts/maps/SlateportCity_ContestLobby.inc +++ b/data/scripts/maps/SlateportCity_ContestLobby.inc @@ -20,28 +20,28 @@ SlateportCity_ContestLobby_EventScript_15541D:: @ 815541D SlateportCity_ContestLobby_EventScript_155448:: @ 8155448 lockall - move 1, SlateportCity_ContestLobby_Movement_1554CC - waitmove 0 + applymovement 1, SlateportCity_ContestLobby_Movement_1554CC + waitmovement 0 playse 71 setmaptile 4, 2, 545, 1 setmaptile 4, 3, 609, 1 special DrawWholeMapView - move 1, SlateportCity_ContestLobby_Movement_1554CF - waitmove 0 + applymovement 1, SlateportCity_ContestLobby_Movement_1554CF + waitmovement 0 playse 71 setmaptile 4, 2, 721, 1 setmaptile 4, 3, 729, 1 special DrawWholeMapView delay 20 - move 1, SlateportCity_ContestLobby_Movement_1554DC - waitmove 0 - move 255, SlateportCity_ContestLobby_Movement_1554CA - waitmove 0 + applymovement 1, SlateportCity_ContestLobby_Movement_1554DC + waitmovement 0 + applymovement 255, SlateportCity_ContestLobby_Movement_1554CA + waitmovement 0 msgbox SlateportCity_ContestLobby_Text_1A6832, 4 closebutton - move 1, SlateportCity_ContestLobby_Movement_1554D3 - move 255, SlateportCity_ContestLobby_Movement_1554C0 - waitmove 0 + applymovement 1, SlateportCity_ContestLobby_Movement_1554D3 + applymovement 255, SlateportCity_ContestLobby_Movement_1554C0 + waitmovement 0 releaseall return @@ -103,8 +103,8 @@ SlateportCity_ContestLobby_EventScript_1554F9:: @ 81554F9 lockall checkflag 95 goto_if_eq SlateportCity_ContestLobby_EventScript_155526 - move 7, SlateportCity_ContestLobby_Movement_1A0839 - waitmove 0 + applymovement 7, SlateportCity_ContestLobby_Movement_1A0839 + waitmovement 0 msgbox SlateportCity_ContestLobby_Text_17CA67, 4 giveitem ITEM_POKEBLOCK_CASE setflag 95 diff --git a/data/scripts/maps/SlateportCity_Harbor.inc b/data/scripts/maps/SlateportCity_Harbor.inc index 802906f25..0e0b5da1f 100644 --- a/data/scripts/maps/SlateportCity_Harbor.inc +++ b/data/scripts/maps/SlateportCity_Harbor.inc @@ -43,22 +43,22 @@ SlateportCity_Harbor_EventScript_155FB3:: @ 8155FB3 SlateportCity_Harbor_EventScript_155FBF:: @ 8155FBF lockall setvar 0x8008, 3 - move 255, SlateportCity_Harbor_Movement_1560C2 - waitmove 0 + applymovement 255, SlateportCity_Harbor_Movement_1560C2 + waitmovement 0 goto SlateportCity_Harbor_EventScript_155FD5 end SlateportCity_Harbor_EventScript_155FD5:: @ 8155FD5 - move 7, SlateportCity_Harbor_Movement_1A0845 - waitmove 0 - move 255, SlateportCity_Harbor_Movement_1A0841 - waitmove 0 + applymovement 7, SlateportCity_Harbor_Movement_1A0845 + waitmovement 0 + applymovement 255, SlateportCity_Harbor_Movement_1A0841 + waitmovement 0 msgbox SlateportCity_Harbor_Text_17FD7D, 4 closebutton - move 6, SlateportCity_Harbor_Movement_15609B - move 7, SlateportCity_Harbor_Movement_15609B - move 8, SlateportCity_Harbor_Movement_1560A5 - waitmove 0 + applymovement 6, SlateportCity_Harbor_Movement_15609B + applymovement 7, SlateportCity_Harbor_Movement_15609B + applymovement 8, SlateportCity_Harbor_Movement_1560A5 + waitmovement 0 disappear 6 disappear 7 disappear 8 @@ -81,24 +81,24 @@ SlateportCity_Harbor_EventScript_155FD5:: @ 8155FD5 end SlateportCity_Harbor_EventScript_15605C:: @ 815605C - move 4, SlateportCity_Harbor_Movement_1560B3 - waitmove 0 - move 255, SlateportCity_Harbor_Movement_1A0845 - waitmove 0 + applymovement 4, SlateportCity_Harbor_Movement_1560B3 + waitmovement 0 + applymovement 255, SlateportCity_Harbor_Movement_1A0845 + waitmovement 0 return SlateportCity_Harbor_EventScript_156071:: @ 8156071 - move 4, SlateportCity_Harbor_Movement_1560B9 - waitmove 0 - move 255, SlateportCity_Harbor_Movement_1A0843 - waitmove 0 + applymovement 4, SlateportCity_Harbor_Movement_1560B9 + waitmovement 0 + applymovement 255, SlateportCity_Harbor_Movement_1A0843 + waitmovement 0 return SlateportCity_Harbor_EventScript_156086:: @ 8156086 - move 4, SlateportCity_Harbor_Movement_1560BE - waitmove 0 - move 255, SlateportCity_Harbor_Movement_1A0843 - waitmove 0 + applymovement 4, SlateportCity_Harbor_Movement_1560BE + waitmovement 0 + applymovement 255, SlateportCity_Harbor_Movement_1A0843 + waitmovement 0 return SlateportCity_Harbor_Movement_15609B:: @ 815609B @@ -219,8 +219,8 @@ SlateportCity_Harbor_EventScript_15618A:: @ 815618A SlateportCity_Harbor_EventScript_156196:: @ 8156196 msgbox SlateportCity_Harbor_Text_17FBB6, 4 closebutton - move LAST_TALKED, SlateportCity_Harbor_Movement_1A0841 - waitmove 0 + applymovement LAST_TALKED, SlateportCity_Harbor_Movement_1A0841 + waitmovement 0 delay 30 spriteinvisible LAST_TALKED, 9, 8 compare_var_to_imm FACING, 2 @@ -239,13 +239,13 @@ SlateportCity_Harbor_EventScript_1561DA:: @ 81561DA end SlateportCity_Harbor_EventScript_1561E4:: @ 81561E4 - move 255, SlateportCity_Harbor_Movement_1561FA - waitmove 0 + applymovement 255, SlateportCity_Harbor_Movement_1561FA + waitmovement 0 return SlateportCity_Harbor_EventScript_1561EF:: @ 81561EF - move 255, SlateportCity_Harbor_Movement_1561FD - waitmove 0 + applymovement 255, SlateportCity_Harbor_Movement_1561FD + waitmovement 0 return SlateportCity_Harbor_Movement_1561FA:: @ 81561FA @@ -278,8 +278,8 @@ SlateportCity_Harbor_EventScript_156211:: @ 8156211 goto_if_eq SlateportCity_Harbor_EventScript_15624E msgbox SlateportCity_Harbor_Text_17FD1C, 4 closebutton - move LAST_TALKED, SlateportCity_Harbor_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, SlateportCity_Harbor_Movement_1A083D + waitmovement 0 release end diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc index 0c75b2b9d..575538286 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc @@ -18,15 +18,15 @@ SlateportCity_OceanicMuseum_1F_EventScript_155ADB:: @ 8155ADB SlateportCity_OceanicMuseum_1F_EventScript_155AE4:: @ 8155AE4 lockall - move 255, SlateportCity_OceanicMuseum_1F_Movement_1A083F - waitmove 0 + applymovement 255, SlateportCity_OceanicMuseum_1F_Movement_1A083F + waitmovement 0 goto SlateportCity_OceanicMuseum_1F_EventScript_155B06 end SlateportCity_OceanicMuseum_1F_EventScript_155AF5:: @ 8155AF5 lockall - move 255, SlateportCity_OceanicMuseum_1F_Movement_1A0843 - waitmove 0 + applymovement 255, SlateportCity_OceanicMuseum_1F_Movement_1A0843 + waitmovement 0 goto SlateportCity_OceanicMuseum_1F_EventScript_155B06 end @@ -38,8 +38,8 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B06:: @ 8155B06 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155B2D closebutton hidemoney 0, 0 - move 255, SlateportCity_OceanicMuseum_1F_Movement_155B8D - waitmove 0 + applymovement 255, SlateportCity_OceanicMuseum_1F_Movement_155B8D + waitmovement 0 releaseall end @@ -62,8 +62,8 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B5A:: @ 8155B5A msgbox SlateportCity_OceanicMuseum_1F_Text_17E1F5, 4 closebutton hidemoney 0, 0 - move 255, SlateportCity_OceanicMuseum_1F_Movement_155B8D - waitmove 0 + applymovement 255, SlateportCity_OceanicMuseum_1F_Movement_155B8D + waitmovement 0 releaseall end @@ -159,10 +159,10 @@ SlateportCity_OceanicMuseum_1F_EventScript_155C3A:: @ 8155C3A faceplayer delay 8 playse 21 - move 13, SlateportCity_OceanicMuseum_1F_Movement_1A0833 - waitmove 0 - move 13, SlateportCity_OceanicMuseum_1F_Movement_1A0835 - waitmove 0 + applymovement 13, SlateportCity_OceanicMuseum_1F_Movement_1A0833 + waitmovement 0 + applymovement 13, SlateportCity_OceanicMuseum_1F_Movement_1A0835 + waitmovement 0 msgbox SlateportCity_OceanicMuseum_1F_Text_17E582, 4 giveitem ITEM_TM46 compare_var_to_imm RESULT, 0 @@ -177,8 +177,8 @@ SlateportCity_OceanicMuseum_1F_EventScript_155C3A:: @ 8155C3A end SlateportCity_OceanicMuseum_1F_EventScript_155C98:: @ 8155C98 - move 13, SlateportCity_OceanicMuseum_1F_Movement_155CD3 - waitmove 0 + applymovement 13, SlateportCity_OceanicMuseum_1F_Movement_155CD3 + waitmovement 0 setflag 965 playse 9 disappear 13 @@ -186,8 +186,8 @@ SlateportCity_OceanicMuseum_1F_EventScript_155C98:: @ 8155C98 end SlateportCity_OceanicMuseum_1F_EventScript_155CAD:: @ 8155CAD - move 13, SlateportCity_OceanicMuseum_1F_Movement_155CCC - waitmove 0 + applymovement 13, SlateportCity_OceanicMuseum_1F_Movement_155CCC + waitmovement 0 setflag 965 playse 9 disappear 13 diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc index 709d3f1d6..1f6aa3c2d 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc @@ -13,14 +13,14 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 closebutton playbgm BGM_EVIL_TEAM, 1 reappear 3 - move 3, SlateportCity_OceanicMuseum_2F_Movement_155EB4 - waitmove 0 + applymovement 3, SlateportCity_OceanicMuseum_2F_Movement_155EB4 + waitmovement 0 reappear 4 - move 4, SlateportCity_OceanicMuseum_2F_Movement_155EC3 - waitmove 0 - move 3, SlateportCity_OceanicMuseum_2F_Movement_155EB8 - move 4, SlateportCity_OceanicMuseum_2F_Movement_155EC5 - waitmove 0 + applymovement 4, SlateportCity_OceanicMuseum_2F_Movement_155EC3 + waitmovement 0 + applymovement 3, SlateportCity_OceanicMuseum_2F_Movement_155EB8 + applymovement 4, SlateportCity_OceanicMuseum_2F_Movement_155EC5 + waitmovement 0 compare_var_to_imm FACING, 1 call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E62 compare_var_to_imm FACING, 4 @@ -31,8 +31,8 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 msgbox SlateportCity_OceanicMuseum_2F_Text_17EDD7, 4 msgbox SlateportCity_OceanicMuseum_2F_Text_17EE01, 4 closebutton - move 4, SlateportCity_OceanicMuseum_2F_Movement_155EB2 - waitmove 0 + applymovement 4, SlateportCity_OceanicMuseum_2F_Movement_155EB2 + waitmovement 0 compare_var_to_imm FACING, 1 call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E78 compare_var_to_imm FACING, 3 @@ -40,28 +40,28 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 trainerbattle 3, OPPONENT_MUSEUM_2F_GRUNT_1, 0, SlateportCity_OceanicMuseum_2F_Text_17EE4E msgbox SlateportCity_OceanicMuseum_2F_Text_17EE66, 4 closebutton - move 4, SlateportCity_OceanicMuseum_2F_Movement_155EBF - waitmove 0 - move 3, SlateportCity_OceanicMuseum_2F_Movement_155EB2 - waitmove 0 + applymovement 4, SlateportCity_OceanicMuseum_2F_Movement_155EBF + waitmovement 0 + applymovement 3, SlateportCity_OceanicMuseum_2F_Movement_155EB2 + waitmovement 0 msgbox SlateportCity_OceanicMuseum_2F_Text_17EEA5, 4 savebgm 0 trainerbattle 3, OPPONENT_MUSEUM_2F_GRUNT_2, 0, SlateportCity_OceanicMuseum_2F_Text_17EED6 - move 3, SlateportCity_OceanicMuseum_2F_Movement_155EBF - waitmove 0 - move 3, SlateportCity_OceanicMuseum_2F_Movement_1A0845 - move 4, SlateportCity_OceanicMuseum_2F_Movement_1A0841 - waitmove 0 + applymovement 3, SlateportCity_OceanicMuseum_2F_Movement_155EBF + waitmovement 0 + applymovement 3, SlateportCity_OceanicMuseum_2F_Movement_1A0845 + applymovement 4, SlateportCity_OceanicMuseum_2F_Movement_1A0841 + waitmovement 0 msgbox SlateportCity_OceanicMuseum_2F_Text_17EEEA, 4 closebutton delay 35 reappear 2 - move 2, SlateportCity_OceanicMuseum_2F_Movement_155EA8 - move 4, SlateportCity_OceanicMuseum_2F_Movement_155ECE - waitmove 0 + applymovement 2, SlateportCity_OceanicMuseum_2F_Movement_155EA8 + applymovement 4, SlateportCity_OceanicMuseum_2F_Movement_155ECE + waitmovement 0 msgbox SlateportCity_OceanicMuseum_2F_Text_17EF62, 4 - move 2, SlateportCity_OceanicMuseum_2F_Movement_155EA6 - waitmove 0 + applymovement 2, SlateportCity_OceanicMuseum_2F_Movement_155EA6 + waitmovement 0 .ifdef SAPPHIRE msgbox SlateportCity_OceanicMuseum_2F_Text_17EFC9, 4 .else @@ -75,15 +75,15 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 fadescreen 0 delay 30 setflag 883 - move 255, SlateportCity_OceanicMuseum_2F_Movement_1A0843 - waitmove 0 + applymovement 255, SlateportCity_OceanicMuseum_2F_Movement_1A0843 + waitmovement 0 msgbox SlateportCity_OceanicMuseum_2F_Text_17F352, 4 setvar 0x8004, 269 call SlateportCity_OceanicMuseum_2F_EventScript_1A067F msgbox SlateportCity_OceanicMuseum_2F_Text_17F433, 4 closebutton - move 1, SlateportCity_OceanicMuseum_2F_Movement_155E98 - waitmove 0 + applymovement 1, SlateportCity_OceanicMuseum_2F_Movement_155E98 + waitmovement 0 playse 9 disappear 1 setflag 900 @@ -94,23 +94,23 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 end SlateportCity_OceanicMuseum_2F_EventScript_155E62:: @ 8155E62 - move 255, SlateportCity_OceanicMuseum_2F_Movement_1A083F - waitmove 0 + applymovement 255, SlateportCity_OceanicMuseum_2F_Movement_1A083F + waitmovement 0 return SlateportCity_OceanicMuseum_2F_EventScript_155E6D:: @ 8155E6D - move 1, SlateportCity_OceanicMuseum_2F_Movement_1A083F - waitmove 0 + applymovement 1, SlateportCity_OceanicMuseum_2F_Movement_1A083F + waitmovement 0 return SlateportCity_OceanicMuseum_2F_EventScript_155E78:: @ 8155E78 - move 255, SlateportCity_OceanicMuseum_2F_Movement_155E8E - waitmove 0 + applymovement 255, SlateportCity_OceanicMuseum_2F_Movement_155E8E + waitmovement 0 return SlateportCity_OceanicMuseum_2F_EventScript_155E83:: @ 8155E83 - move 255, SlateportCity_OceanicMuseum_2F_Movement_155E92 - waitmove 0 + applymovement 255, SlateportCity_OceanicMuseum_2F_Movement_155E92 + waitmovement 0 return SlateportCity_OceanicMuseum_2F_Movement_155E8E:: @ 8155E8E @@ -266,7 +266,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155F46:: @ 8155F46 faceplayer msgbox SlateportCity_OceanicMuseum_2F_Text_17F53B, 4 closebutton - move LAST_TALKED, SlateportCity_OceanicMuseum_2F_Movement_1A083D - waitmove 0 + applymovement LAST_TALKED, SlateportCity_OceanicMuseum_2F_Movement_1A083D + waitmovement 0 release end diff --git a/data/scripts/maps/SlateportCity_PokemonFanClub.inc b/data/scripts/maps/SlateportCity_PokemonFanClub.inc index 80ee23d43..882e865ee 100644 --- a/data/scripts/maps/SlateportCity_PokemonFanClub.inc +++ b/data/scripts/maps/SlateportCity_PokemonFanClub.inc @@ -207,10 +207,10 @@ SlateportCity_PokemonFanClub_EventScript_155A15:: @ 8155A15 SlateportCity_PokemonFanClub_EventScript_155A3A:: @ 8155A3A playse 21 - move LAST_TALKED, SlateportCity_PokemonFanClub_Movement_1A0833 - waitmove 0 - move LAST_TALKED, SlateportCity_PokemonFanClub_Movement_1A0835 - waitmove 0 + applymovement LAST_TALKED, SlateportCity_PokemonFanClub_Movement_1A0833 + waitmovement 0 + applymovement LAST_TALKED, SlateportCity_PokemonFanClub_Movement_1A0835 + waitmovement 0 msgbox SlateportCity_PokemonFanClub_Text_17DF57, 4 giveitem ITEM_SOOTHE_BELL compare_var_to_imm RESULT, 0 diff --git a/data/scripts/maps/SlateportCity_SternsShipyard_1F.inc b/data/scripts/maps/SlateportCity_SternsShipyard_1F.inc index d585fb94c..3c988d084 100644 --- a/data/scripts/maps/SlateportCity_SternsShipyard_1F.inc +++ b/data/scripts/maps/SlateportCity_SternsShipyard_1F.inc @@ -12,44 +12,44 @@ SlateportCity_SternsShipyard_1F_EventScript_155336:: @ 8155336 checkflag 148 goto_if_eq SlateportCity_SternsShipyard_1F_EventScript_1553B0 msgbox SlateportCity_SternsShipyard_1F_Text_17C14B, 4 - move 1, SlateportCity_SternsShipyard_1F_Movement_1A0839 - waitmove 0 + applymovement 1, SlateportCity_SternsShipyard_1F_Movement_1A0839 + waitmovement 0 msgbox SlateportCity_SternsShipyard_1F_Text_17C1EC, 4 closebutton - move 1, SlateportCity_SternsShipyard_1F_Movement_1A083D - waitmove 0 + applymovement 1, SlateportCity_SternsShipyard_1F_Movement_1A083D + waitmovement 0 setflag 148 setflag 882 releaseall end SlateportCity_SternsShipyard_1F_EventScript_155388:: @ 8155388 - move 1, SlateportCity_SternsShipyard_1F_Movement_1A0839 - waitmove 0 + applymovement 1, SlateportCity_SternsShipyard_1F_Movement_1A0839 + waitmovement 0 msgbox SlateportCity_SternsShipyard_1F_Text_17C472, 4 releaseall end SlateportCity_SternsShipyard_1F_EventScript_15539C:: @ 815539C - move 1, SlateportCity_SternsShipyard_1F_Movement_1A0839 - waitmove 0 + applymovement 1, SlateportCity_SternsShipyard_1F_Movement_1A0839 + waitmovement 0 msgbox SlateportCity_SternsShipyard_1F_Text_17C3F7, 4 releaseall end SlateportCity_SternsShipyard_1F_EventScript_1553B0:: @ 81553B0 - move 1, SlateportCity_SternsShipyard_1F_Movement_1A0839 - waitmove 0 + applymovement 1, SlateportCity_SternsShipyard_1F_Movement_1A0839 + waitmovement 0 msgbox SlateportCity_SternsShipyard_1F_Text_17C2F2, 4 closebutton - move 1, SlateportCity_SternsShipyard_1F_Movement_1A083D - waitmove 0 + applymovement 1, SlateportCity_SternsShipyard_1F_Movement_1A083D + waitmovement 0 releaseall end SlateportCity_SternsShipyard_1F_EventScript_1553CF:: @ 81553CF - move 1, SlateportCity_SternsShipyard_1F_Movement_1A0839 - waitmove 0 + applymovement 1, SlateportCity_SternsShipyard_1F_Movement_1A0839 + waitmovement 0 msgbox SlateportCity_SternsShipyard_1F_Text_17C360, 4 releaseall end diff --git a/data/scripts/maps/SootopolisCity.inc b/data/scripts/maps/SootopolisCity.inc index 14bece069..6006ac2ef 100644 --- a/data/scripts/maps/SootopolisCity.inc +++ b/data/scripts/maps/SootopolisCity.inc @@ -213,35 +213,35 @@ ClosedSootopolisGymDoorScript:: @ 814D2FF SootopolisCity_EventScript_14D308:: @ 814D308 lockall - move 10, SootopolisCity_Movement_1A083F - move 255, SootopolisCity_Movement_1A0843 - waitmove 0 + applymovement 10, SootopolisCity_Movement_1A083F + applymovement 255, SootopolisCity_Movement_1A0843 + waitmovement 0 playse 21 - move 10, SootopolisCity_Movement_1A0833 - waitmove 0 - move 10, SootopolisCity_Movement_1A0835 - waitmove 0 - move 10, SootopolisCity_Movement_14D413 - waitmove 0 + applymovement 10, SootopolisCity_Movement_1A0833 + waitmovement 0 + applymovement 10, SootopolisCity_Movement_1A0835 + waitmovement 0 + applymovement 10, SootopolisCity_Movement_14D413 + waitmovement 0 .ifdef SAPPHIRE msgbox SootopolisCity_Text_169988, 4 .else msgbox SootopolisCity_Text_169E0F, 4 .endif closebutton - move 10, SootopolisCity_Movement_14D417 - move 255, SootopolisCity_Movement_14D440 - waitmove 10 + applymovement 10, SootopolisCity_Movement_14D417 + applymovement 255, SootopolisCity_Movement_14D440 + waitmovement 10 .ifdef SAPPHIRE msgbox SootopolisCity_Text_1699FD, 4 .else msgbox SootopolisCity_Text_169E82, 4 .endif playse 21 - move 5, SootopolisCity_Movement_1A0833 - waitmove 0 - move 5, SootopolisCity_Movement_1A0835 - waitmove 0 + applymovement 5, SootopolisCity_Movement_1A0833 + waitmovement 0 + applymovement 5, SootopolisCity_Movement_1A0835 + waitmovement 0 .ifdef SAPPHIRE msgbox SootopolisCity_Text_169AB7, 4 .else @@ -249,16 +249,16 @@ SootopolisCity_EventScript_14D308:: @ 814D308 .endif closebutton delay 30 - move 5, SootopolisCity_Movement_14D46A - move 10, SootopolisCity_Movement_14D41D - move 255, SootopolisCity_Movement_14D445 - waitmove 0 - move 5, SootopolisCity_Movement_1A0843 - move 255, SootopolisCity_Movement_1A0843 - waitmove 0 + applymovement 5, SootopolisCity_Movement_14D46A + applymovement 10, SootopolisCity_Movement_14D41D + applymovement 255, SootopolisCity_Movement_14D445 + waitmovement 0 + applymovement 5, SootopolisCity_Movement_1A0843 + applymovement 255, SootopolisCity_Movement_1A0843 + waitmovement 0 delay 30 - move 10, SootopolisCity_Movement_1A0845 - waitmove 0 + applymovement 10, SootopolisCity_Movement_1A0845 + waitmovement 0 .ifdef SAPPHIRE msgbox SootopolisCity_Text_169AE7, 4 .else @@ -266,19 +266,19 @@ SootopolisCity_EventScript_14D308:: @ 814D308 .endif closebutton delay 30 - move 5, SootopolisCity_Movement_14D47C - move 255, SootopolisCity_Movement_14D457 - move 10, SootopolisCity_Movement_14D42D - waitmove 0 - move 5, SootopolisCity_Movement_1A083F - waitmove 0 + applymovement 5, SootopolisCity_Movement_14D47C + applymovement 255, SootopolisCity_Movement_14D457 + applymovement 10, SootopolisCity_Movement_14D42D + waitmovement 0 + applymovement 5, SootopolisCity_Movement_1A083F + waitmovement 0 .ifdef SAPPHIRE msgbox SootopolisCity_Text_169BC7, 4 .else msgbox SootopolisCity_Text_16A06C, 4 .endif - move 255, SootopolisCity_Movement_1A083F - waitmove 0 + applymovement 255, SootopolisCity_Movement_1A083F + waitmovement 0 .ifdef SAPPHIRE msgbox SootopolisCity_Text_169C99, 4 .else @@ -458,8 +458,8 @@ SootopolisCity_EventScript_14D498:: @ 814D498 SootopolisCity_EventScript_14D4AD:: @ 814D4AD msgbox SootopolisCity_Text_16A33E, 4 closebutton - move LAST_TALKED, SootopolisCity_Movement_1A0845 - waitmove 0 + applymovement LAST_TALKED, SootopolisCity_Movement_1A0845 + waitmovement 0 delay 50 setanimation 0, 1 doanimation 30 diff --git a/data/scripts/maps/SootopolisCity_Gym_1F.inc b/data/scripts/maps/SootopolisCity_Gym_1F.inc index 1df729aad..d6c7958b6 100644 --- a/data/scripts/maps/SootopolisCity_Gym_1F.inc +++ b/data/scripts/maps/SootopolisCity_Gym_1F.inc @@ -73,8 +73,8 @@ SootopolisCity_Gym_1F_EventScript_15AFD0:: @ 815AFD0 SootopolisCity_Gym_1F_EventScript_15AFE4:: @ 815AFE4 lockall delay 20 - move 255, SootopolisCity_Gym_1F_Movement_15AFFD - waitmove 0 + applymovement 255, SootopolisCity_Gym_1F_Movement_15AFFD + waitmovement 0 playse 43 delay 60 warphole SootopolisCity_Gym_B1F diff --git a/data/scripts/maps/SouthernIsland_Exterior.inc b/data/scripts/maps/SouthernIsland_Exterior.inc index 2965b6748..a45b0b556 100644 --- a/data/scripts/maps/SouthernIsland_Exterior.inc +++ b/data/scripts/maps/SouthernIsland_Exterior.inc @@ -14,8 +14,8 @@ SouthernIsland_Exterior_EventScript_160AE0:: @ 8160AE0 goto_if_eq SouthernIsland_Exterior_EventScript_160B25 msgbox SouthernIsland_Exterior_Text_1C5281, 4 closebutton - move LAST_TALKED, SouthernIsland_Exterior_Movement_1A0845 - waitmove 0 + applymovement LAST_TALKED, SouthernIsland_Exterior_Movement_1A0845 + waitmovement 0 delay 30 spriteinvisible 1, 26, 9 setvar 0x8004, 2 @@ -31,13 +31,13 @@ SouthernIsland_Exterior_EventScript_160B25:: @ 8160B25 end BattleTower_Outside_EventScript_160B2F:: @ 8160B2F - move 255, BattleTower_Outside_Movement_160B45 - waitmove 0 + applymovement 255, BattleTower_Outside_Movement_160B45 + waitmovement 0 return BattleTower_Outside_EventScript_160B3A:: @ 8160B3A - move 255, BattleTower_Outside_Movement_160B47 - waitmove 0 + applymovement 255, BattleTower_Outside_Movement_160B47 + waitmovement 0 return BattleTower_Outside_Movement_160B45:: @ 8160B45 diff --git a/data/scripts/maps/SouthernIsland_Interior.inc b/data/scripts/maps/SouthernIsland_Interior.inc index e50b29d76..d30f8cee4 100644 --- a/data/scripts/maps/SouthernIsland_Interior.inc +++ b/data/scripts/maps/SouthernIsland_Interior.inc @@ -50,8 +50,8 @@ SouthernIsland_Interior_EventScript_160BA7:: @ 8160BA7 goto_if 0, SouthernIsland_Interior_EventScript_160C08 setflag 206 special SpawnCameraDummy - move 127, SouthernIsland_Interior_Movement_160C12 - waitmove 0 + applymovement 127, SouthernIsland_Interior_Movement_160C12 + waitmovement 0 delay 50 waitse pokecry SPECIES_LATIAS_OR_LATIOS, 0 @@ -59,9 +59,9 @@ SouthernIsland_Interior_EventScript_160BA7:: @ 8160BA7 waitpokecry reappear 2 delay 30 - move 127, SouthernIsland_Interior_Movement_160C16 - move 2, SouthernIsland_Interior_Movement_160C22 - waitmove 0 + applymovement 127, SouthernIsland_Interior_Movement_160C16 + applymovement 2, SouthernIsland_Interior_Movement_160C22 + waitmovement 0 delay 50 special RemoveCameraDummy setwildbattle SPECIES_LATIAS_OR_LATIOS, 50, ITEM_SOUL_DEW diff --git a/data/scripts/maps/VerdanturfTown.inc b/data/scripts/maps/VerdanturfTown.inc index 66aa080ba..3e8f02302 100644 --- a/data/scripts/maps/VerdanturfTown.inc +++ b/data/scripts/maps/VerdanturfTown.inc @@ -14,15 +14,15 @@ VerdanturfTown_EventScript_14E866:: @ 814E866 checkflag 199 goto_if_eq VerdanturfTown_EventScript_14E885 msgbox VerdanturfTown_Text_16CAEB, 4 - move 2, VerdanturfTown_Movement_1A083D - waitmove 0 + applymovement 2, VerdanturfTown_Movement_1A083D + waitmovement 0 release end VerdanturfTown_EventScript_14E885:: @ 814E885 msgbox VerdanturfTown_Text_16CBCE, 4 - move 2, VerdanturfTown_Movement_1A083D - waitmove 0 + applymovement 2, VerdanturfTown_Movement_1A083D + waitmovement 0 release end diff --git a/data/scripts/maps/VerdanturfTown_ContestLobby.inc b/data/scripts/maps/VerdanturfTown_ContestLobby.inc index e3aa13eb2..52de0db78 100644 --- a/data/scripts/maps/VerdanturfTown_ContestLobby.inc +++ b/data/scripts/maps/VerdanturfTown_ContestLobby.inc @@ -20,28 +20,28 @@ VerdanturfTown_ContestLobby_EventScript_153D76:: @ 8153D76 VerdanturfTown_ContestLobby_EventScript_153DA1:: @ 8153DA1 lockall - move 1, VerdanturfTown_ContestLobby_Movement_153E25 - waitmove 0 + applymovement 1, VerdanturfTown_ContestLobby_Movement_153E25 + waitmovement 0 playse 71 setmaptile 4, 2, 545, 1 setmaptile 4, 3, 609, 1 special DrawWholeMapView - move 1, VerdanturfTown_ContestLobby_Movement_153E28 - waitmove 0 + applymovement 1, VerdanturfTown_ContestLobby_Movement_153E28 + waitmovement 0 playse 71 setmaptile 4, 2, 721, 1 setmaptile 4, 3, 729, 1 special DrawWholeMapView delay 20 - move 1, VerdanturfTown_ContestLobby_Movement_153E35 - waitmove 0 - move 255, VerdanturfTown_ContestLobby_Movement_153E23 - waitmove 0 + applymovement 1, VerdanturfTown_ContestLobby_Movement_153E35 + waitmovement 0 + applymovement 255, VerdanturfTown_ContestLobby_Movement_153E23 + waitmovement 0 msgbox VerdanturfTown_ContestLobby_Text_1A6832, 4 closebutton - move 1, VerdanturfTown_ContestLobby_Movement_153E2C - move 255, VerdanturfTown_ContestLobby_Movement_153E19 - waitmove 0 + applymovement 1, VerdanturfTown_ContestLobby_Movement_153E2C + applymovement 255, VerdanturfTown_ContestLobby_Movement_153E19 + waitmovement 0 releaseall return diff --git a/data/scripts/maps/VictoryRoad_1F.inc b/data/scripts/maps/VictoryRoad_1F.inc index 78c246eb0..7bbcf6a41 100644 --- a/data/scripts/maps/VictoryRoad_1F.inc +++ b/data/scripts/maps/VictoryRoad_1F.inc @@ -14,30 +14,30 @@ VictoryRoad_1F_EventScript_15DE93:: @ 815DE93 VictoryRoad_1F_EventScript_15DE97:: @ 815DE97 lockall reappear 4 - move 4, VictoryRoad_1F_Movement_15DF07 - waitmove 0 + applymovement 4, VictoryRoad_1F_Movement_15DF07 + waitmovement 0 goto VictoryRoad_1F_EventScript_15DED3 end VictoryRoad_1F_EventScript_15DEAB:: @ 815DEAB lockall reappear 4 - move 4, VictoryRoad_1F_Movement_15DF13 - waitmove 0 + applymovement 4, VictoryRoad_1F_Movement_15DF13 + waitmovement 0 goto VictoryRoad_1F_EventScript_15DED3 end VictoryRoad_1F_EventScript_15DEBF:: @ 815DEBF lockall reappear 4 - move 4, VictoryRoad_1F_Movement_15DF1E - waitmove 0 + applymovement 4, VictoryRoad_1F_Movement_15DF1E + waitmovement 0 goto VictoryRoad_1F_EventScript_15DED3 end VictoryRoad_1F_EventScript_15DED3:: @ 815DED3 - move 255, VictoryRoad_1F_Movement_1A083F - waitmove 0 + applymovement 255, VictoryRoad_1F_Movement_1A083F + waitmovement 0 msgbox VictoryRoad_1F_Text_19782B, 4 trainerbattle 3, OPPONENT_WALLY_1, 0, VictoryRoad_1F_Text_197943 msgbox VictoryRoad_1F_Text_197967, 4 diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index 512272e05..bb890ebcb 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -6,8 +6,8 @@ LittlerootTown_MaysHouse_2F_EventScript_1B6950:: @ 81B6950 LittlerootTown_BrendansHouse_1F_EventScript_1B6956:: @ 81B6956 LittlerootTown_MaysHouse_1F_EventScript_1B6956:: @ 81B6956 msgbox LittlerootTown_BrendansHouse_1F_Text_172429, 4 - move 0x8004, LittlerootTown_BrendansHouse_1F_Movement_1A0839 - waitmove 0 + applymovement 0x8004, LittlerootTown_BrendansHouse_1F_Movement_1A0839 + waitmovement 0 compare_var_to_imm 0x8005, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B699F compare_var_to_imm 0x8005, 1 @@ -15,20 +15,20 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6956:: @ 81B6956 msgbox LittlerootTown_BrendansHouse_1F_Text_172453, 4 closebutton setvar 0x4092, 4 - move 255, LittlerootTown_BrendansHouse_1F_Movement_1B69B5 - move 0x8004, LittlerootTown_BrendansHouse_1F_Movement_1A0841 - waitmove 0 + applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1B69B5 + applymovement 0x8004, LittlerootTown_BrendansHouse_1F_Movement_1A0841 + waitmovement 0 releaseall end LittlerootTown_BrendansHouse_1F_EventScript_1B699F:: @ 81B699F - move 255, LittlerootTown_BrendansHouse_1F_Movement_1A0843 - waitmove 0 + applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1A0843 + waitmovement 0 return LittlerootTown_BrendansHouse_1F_EventScript_1B69AA:: @ 81B69AA - move 255, LittlerootTown_BrendansHouse_1F_Movement_1A083F - waitmove 0 + applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1A083F + waitmovement 0 return LittlerootTown_BrendansHouse_1F_Movement_1B69B5:: @ 81B69B5 @@ -39,9 +39,9 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B69B7:: @ 81B69B7 LittlerootTown_MaysHouse_1F_EventScript_1B69B7:: @ 81B69B7 msgbox LittlerootTown_BrendansHouse_1F_Text_172531, 4 closebutton - move 0x8004, LittlerootTown_BrendansHouse_1F_Movement_1A0841 - move 255, LittlerootTown_BrendansHouse_1F_Movement_1B6CDC - waitmove 0 + applymovement 0x8004, LittlerootTown_BrendansHouse_1F_Movement_1A0841 + applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1B6CDC + waitmovement 0 releaseall end @@ -81,27 +81,27 @@ LittlerootTown_MaysHouse_2F_EventScript_1B69EB:: @ 81B69EB LittlerootTown_BrendansHouse_2F_EventScript_1B6A31:: @ 81B6A31 setvar 0x8008, 14 reappear 0x8008 - move 0x8008, LittlerootTown_BrendansHouse_2F_Movement_1B6AA2 - waitmove 0 - move 255, LittlerootTown_BrendansHouse_2F_Movement_1A0843 - waitmove 0 + applymovement 0x8008, LittlerootTown_BrendansHouse_2F_Movement_1B6AA2 + waitmovement 0 + applymovement 255, LittlerootTown_BrendansHouse_2F_Movement_1A0843 + waitmovement 0 msgbox LittlerootTown_BrendansHouse_2F_Text_172E4C, 4 closebutton - move 0x8008, LittlerootTown_BrendansHouse_2F_Movement_1B6AA9 - waitmove 0 + applymovement 0x8008, LittlerootTown_BrendansHouse_2F_Movement_1B6AA9 + waitmovement 0 return LittlerootTown_BrendansHouse_2F_EventScript_1B6A61:: @ 81B6A61 setvar 0x8008, 14 reappear 0x8008 - move 0x8008, LittlerootTown_BrendansHouse_2F_Movement_1B6AAD - waitmove 0 - move 255, LittlerootTown_BrendansHouse_2F_Movement_1A083F - waitmove 0 + applymovement 0x8008, LittlerootTown_BrendansHouse_2F_Movement_1B6AAD + waitmovement 0 + applymovement 255, LittlerootTown_BrendansHouse_2F_Movement_1A083F + waitmovement 0 msgbox LittlerootTown_BrendansHouse_2F_Text_172E4C, 4 closebutton - move 0x8008, LittlerootTown_BrendansHouse_2F_Movement_1B6AB4 - waitmove 0 + applymovement 0x8008, LittlerootTown_BrendansHouse_2F_Movement_1B6AB4 + waitmovement 0 return LittlerootTown_BrendansHouse_2F_EventScript_1B6A91:: @ 81B6A91 @@ -155,70 +155,70 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6AB8:: @ 81B6AB8 end LittlerootTown_BrendansHouse_1F_EventScript_1B6ABF:: @ 81B6ABF - move 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1A0843 - waitmove 0 + applymovement 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1A0843 + waitmovement 0 call LittlerootTown_BrendansHouse_1F_EventScript_1B6B9D - move 255, LittlerootTown_BrendansHouse_1F_Movement_1B6CCC - waitmove 0 + applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1B6CCC + waitmovement 0 playbgm 453, 0 msgbox LittlerootTown_BrendansHouse_1F_Text_1725C9, 4 closebutton - move 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1B6BDB - waitmove 0 - move 255, LittlerootTown_BrendansHouse_1F_Movement_1B6CD2 - waitmove 0 + applymovement 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1B6BDB + waitmovement 0 + applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1B6CD2 + waitmovement 0 call LittlerootTown_BrendansHouse_1F_EventScript_1B6BBE - move 255, LittlerootTown_BrendansHouse_1F_Movement_1A083F - waitmove 0 + applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1A083F + waitmovement 0 msgbox LittlerootTown_BrendansHouse_1F_Text_1725FE, 4 msgbox LittlerootTown_BrendansHouse_1F_Text_172644, 4 closebutton setvar 0x4001, 1 - move 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1B6BE1 - waitmove 0 + applymovement 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1B6BE1 + waitmovement 0 goto LittlerootTown_BrendansHouse_1F_EventScript_1B6AB8 end LittlerootTown_MaysHouse_1F_EventScript_1B6B2E:: @ 81B6B2E - move 0x8005, LittlerootTown_MaysHouse_1F_Movement_1A083F - waitmove 0 + applymovement 0x8005, LittlerootTown_MaysHouse_1F_Movement_1A083F + waitmovement 0 call LittlerootTown_MaysHouse_1F_EventScript_1B6B9D - move 255, LittlerootTown_MaysHouse_1F_Movement_1B6CD4 - waitmove 0 + applymovement 255, LittlerootTown_MaysHouse_1F_Movement_1B6CD4 + waitmovement 0 playbgm 453, 0 msgbox LittlerootTown_MaysHouse_1F_Text_1725C9, 4 closebutton - move 0x8005, LittlerootTown_MaysHouse_1F_Movement_1B6BDE - waitmove 0 - move 255, LittlerootTown_MaysHouse_1F_Movement_1B6CDA - waitmove 0 + applymovement 0x8005, LittlerootTown_MaysHouse_1F_Movement_1B6BDE + waitmovement 0 + applymovement 255, LittlerootTown_MaysHouse_1F_Movement_1B6CDA + waitmovement 0 call LittlerootTown_MaysHouse_1F_EventScript_1B6BBE - move 255, LittlerootTown_MaysHouse_1F_Movement_1A0843 - waitmove 0 + applymovement 255, LittlerootTown_MaysHouse_1F_Movement_1A0843 + waitmovement 0 msgbox LittlerootTown_MaysHouse_1F_Text_1725FE, 4 msgbox LittlerootTown_MaysHouse_1F_Text_172644, 4 closebutton setvar 0x4001, 1 - move 0x8005, LittlerootTown_MaysHouse_1F_Movement_1B6BE5 - waitmove 0 + applymovement 0x8005, LittlerootTown_MaysHouse_1F_Movement_1B6BE5 + waitmovement 0 goto LittlerootTown_MaysHouse_1F_EventScript_1B6AB8 end LittlerootTown_BrendansHouse_1F_EventScript_1B6B9D:: @ 81B6B9D LittlerootTown_MaysHouse_1F_EventScript_1B6B9D:: @ 81B6B9D playse 21 - move 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1A0833 - waitmove 0 - move 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1A0835 - waitmove 0 + applymovement 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1A0833 + waitmovement 0 + applymovement 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1A0835 + waitmovement 0 msgbox LittlerootTown_BrendansHouse_1F_Text_1725A3, 4 closebutton return LittlerootTown_BrendansHouse_1F_EventScript_1B6BBE:: @ 81B6BBE LittlerootTown_MaysHouse_1F_EventScript_1B6BBE:: @ 81B6BBE - move 255, LittlerootTown_BrendansHouse_1F_Movement_1A0841 - waitmove 0 + applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1A0841 + waitmovement 0 msgbox LittlerootTown_BrendansHouse_1F_Text_172841, 4 fadedefaultbgm special TurnOffTVScreen @@ -370,13 +370,13 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6CDE:: @ 81B6CDE call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E1D compare_var_to_imm 0x8008, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E28 - move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1A0839 - waitmove 0 + applymovement 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1A0839 + waitmovement 0 playse 21 - move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1A0833 - waitmove 0 - move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1A0835 - waitmove 0 + applymovement 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1A0833 + waitmovement 0 + applymovement 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1A0835 + waitmovement 0 delay 20 compare_var_to_imm 0x8008, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DCD @@ -417,45 +417,45 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6DBD:: @ 81B6DBD return LittlerootTown_BrendansHouse_1F_EventScript_1B6DCD:: @ 81B6DCD - move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1B6E33 - waitmove 0 + applymovement 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1B6E33 + waitmovement 0 return LittlerootTown_BrendansHouse_1F_EventScript_1B6DD8:: @ 81B6DD8 - move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1B6E36 - waitmove 0 + applymovement 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1B6E36 + waitmovement 0 return LittlerootTown_BrendansHouse_1F_EventScript_1B6DE3:: @ 81B6DE3 - move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1B6E39 - waitmove 0 + applymovement 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1B6E39 + waitmovement 0 return LittlerootTown_BrendansHouse_1F_EventScript_1B6DEE:: @ 81B6DEE - move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1B6E3B - waitmove 0 + applymovement 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1B6E3B + waitmovement 0 return LittlerootTown_BrendansHouse_1F_EventScript_1B6DF9:: @ 81B6DF9 - move 255, LittlerootTown_BrendansHouse_1F_Movement_1B6E4F - move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1B6E3D - waitmove 0 + applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1B6E4F + applymovement 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1B6E3D + waitmovement 0 return LittlerootTown_BrendansHouse_1F_EventScript_1B6E0B:: @ 81B6E0B - move 255, LittlerootTown_BrendansHouse_1F_Movement_1B6E4F - move 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1B6E43 - waitmove 0 + applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1B6E4F + applymovement 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1B6E43 + waitmovement 0 return LittlerootTown_BrendansHouse_1F_EventScript_1B6E1D:: @ 81B6E1D - move 255, LittlerootTown_BrendansHouse_1F_Movement_1B6E49 - waitmove 0 + applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1B6E49 + waitmovement 0 return LittlerootTown_BrendansHouse_1F_EventScript_1B6E28:: @ 81B6E28 - move 255, LittlerootTown_BrendansHouse_1F_Movement_1B6E54 - waitmove 0 + applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1B6E54 + waitmovement 0 return LittlerootTown_BrendansHouse_1F_Movement_1B6E33:: @ 81B6E33 diff --git a/data/scripts/pokeblocks.inc b/data/scripts/pokeblocks.inc index 61a484b4c..5f185c8ff 100644 --- a/data/scripts/pokeblocks.inc +++ b/data/scripts/pokeblocks.inc @@ -1,35 +1,35 @@ FallarborTown_ContestLobby_EventScript_1B7604:: @ 81B7604 setvar 0x8008, 4 setvar 0x8009, 1 - move 0x8008, FallarborTown_ContestLobby_Movement_1B7821 - waitmove 0 + applymovement 0x8008, FallarborTown_ContestLobby_Movement_1B7821 + waitmovement 0 goto FallarborTown_ContestLobby_EventScript_1B7681 end SlateportCity_ContestLobby_EventScript_1B761E:: @ 81B761E setvar 0x8008, 2 setvar 0x8009, 2 - move 6, SlateportCity_ContestLobby_Movement_1A083D - move 0x8008, SlateportCity_ContestLobby_Movement_1B7821 - waitmove 0 + applymovement 6, SlateportCity_ContestLobby_Movement_1A083D + applymovement 0x8008, SlateportCity_ContestLobby_Movement_1B7821 + waitmovement 0 goto SlateportCity_ContestLobby_EventScript_1B7681 end VerdanturfTown_ContestLobby_EventScript_1B763F:: @ 81B763F setvar 0x8008, 2 setvar 0x8009, 1 - move 0x8008, VerdanturfTown_ContestLobby_Movement_1B7821 - waitmove 0 + applymovement 0x8008, VerdanturfTown_ContestLobby_Movement_1B7821 + waitmovement 0 goto VerdanturfTown_ContestLobby_EventScript_1B7681 end LilycoveCity_ContestLobby_EventScript_1B7659:: @ 81B7659 setvar 0x8008, 3 setvar 0x8009, 3 - move 9, LilycoveCity_ContestLobby_Movement_1A083D - move 10, LilycoveCity_ContestLobby_Movement_1A083D - move 0x8008, LilycoveCity_ContestLobby_Movement_1B7821 - waitmove 0 + applymovement 9, LilycoveCity_ContestLobby_Movement_1A083D + applymovement 10, LilycoveCity_ContestLobby_Movement_1A083D + applymovement 0x8008, LilycoveCity_ContestLobby_Movement_1B7821 + waitmovement 0 goto LilycoveCity_ContestLobby_EventScript_1B7681 end diff --git a/data/scripts/secret_power_tm.inc b/data/scripts/secret_power_tm.inc index 80c51484a..ac033506b 100644 --- a/data/scripts/secret_power_tm.inc +++ b/data/scripts/secret_power_tm.inc @@ -27,13 +27,13 @@ Route111_EventScript_1A3877:: @ 81A3877 end Route111_EventScript_1A38C3:: @ 81A38C3 - move LAST_TALKED, Route111_Movement_1A38E3 - waitmove 0 + applymovement LAST_TALKED, Route111_Movement_1A38E3 + waitmovement 0 return Route111_EventScript_1A38CE:: @ 81A38CE - move LAST_TALKED, Route111_Movement_1A38EF - waitmove 0 + applymovement LAST_TALKED, Route111_Movement_1A38EF + waitmovement 0 return Route111_EventScript_1A38D9:: @ 81A38D9 -- cgit v1.2.3 From 9458b3fad18eea3fbd9168a88dd33e8aa10abcda Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 26 Sep 2017 14:09:41 -0500 Subject: single compare macro --- asm/macros/event.inc | 15 + data-de/event_scripts.s | 368 ++++++++++----------- data-de/field_move_scripts.inc | 28 +- data/event_scripts.s | 368 ++++++++++----------- data/field_move_scripts.inc | 28 +- data/scripts/berry_tree.inc | 24 +- data/scripts/cable_club.inc | 100 +++--- data/scripts/contest_hall.inc | 210 ++++++------ data/scripts/day_care.inc | 56 ++-- data/scripts/gabby_and_ty.inc | 18 +- data/scripts/magma_chimney.inc | 8 +- data/scripts/maps/AbandonedShip_CaptainsOffice.inc | 2 +- data/scripts/maps/AbandonedShip_Corridors_B1F.inc | 2 +- .../maps/AbandonedShip_HiddenFloorCorridors.inc | 8 +- .../maps/AbandonedShip_HiddenFloorRooms.inc | 16 +- data/scripts/maps/AbandonedShip_Rooms2_1F.inc | 4 +- data/scripts/maps/BattleTower_Corridor.inc | 4 +- data/scripts/maps/BattleTower_Lobby.inc | 30 +- data/scripts/maps/BattleTower_Outside.inc | 6 +- data/scripts/maps/CaveOfOrigin_B4F.inc | 2 +- data/scripts/maps/DewfordTown.inc | 20 +- data/scripts/maps/DewfordTown_Gym.inc | 18 +- data/scripts/maps/DewfordTown_Hall.inc | 24 +- data/scripts/maps/DewfordTown_House2.inc | 2 +- data/scripts/maps/EverGrandeCity_ChampionsRoom.inc | 12 +- data/scripts/maps/EverGrandeCity_DrakesRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_GlaciasRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_HallOfFame.inc | 4 +- data/scripts/maps/EverGrandeCity_PhoebesRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_PokemonLeague.inc | 4 +- data/scripts/maps/EverGrandeCity_SidneysRoom.inc | 2 +- data/scripts/maps/FallarborTown_House1.inc | 6 +- data/scripts/maps/FallarborTown_House2.inc | 10 +- data/scripts/maps/FortreeCity.inc | 4 +- data/scripts/maps/FortreeCity_Gym.inc | 2 +- data/scripts/maps/FortreeCity_House1.inc | 6 +- data/scripts/maps/FortreeCity_House2.inc | 2 +- data/scripts/maps/FortreeCity_House4.inc | 2 +- data/scripts/maps/GraniteCave_StevensRoom.inc | 10 +- data/scripts/maps/InsideOfTruck.inc | 4 +- data/scripts/maps/JaggedPass.inc | 6 +- data/scripts/maps/LavaridgeTown.inc | 52 +-- data/scripts/maps/LavaridgeTown_Gym_1F.inc | 4 +- data/scripts/maps/LavaridgeTown_HerbShop.inc | 2 +- data/scripts/maps/LilycoveCity.inc | 18 +- data/scripts/maps/LilycoveCity_ContestLobby.inc | 42 +-- .../scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc | 2 +- .../maps/LilycoveCity_DepartmentStoreElevator.inc | 10 +- .../maps/LilycoveCity_DepartmentStoreRooftop.inc | 30 +- .../maps/LilycoveCity_DepartmentStore_1F.inc | 22 +- data/scripts/maps/LilycoveCity_Harbor.inc | 16 +- data/scripts/maps/LilycoveCity_House2.inc | 2 +- data/scripts/maps/LilycoveCity_House3.inc | 2 +- .../maps/LilycoveCity_LilycoveMuseum_1F.inc | 8 +- .../maps/LilycoveCity_LilycoveMuseum_2F.inc | 2 +- .../maps/LilycoveCity_MoveDeletersHouse.inc | 8 +- .../maps/LilycoveCity_PokemonTrainerFanClub.inc | 76 ++--- data/scripts/maps/LittlerootTown.inc | 96 +++--- .../maps/LittlerootTown_BrendansHouse_1F.inc | 10 +- .../maps/LittlerootTown_BrendansHouse_2F.inc | 12 +- data/scripts/maps/LittlerootTown_MaysHouse_1F.inc | 16 +- data/scripts/maps/LittlerootTown_MaysHouse_2F.inc | 28 +- .../maps/LittlerootTown_ProfessorBirchsLab.inc | 28 +- data/scripts/maps/MauvilleCity.inc | 8 +- data/scripts/maps/MauvilleCity_BikeShop.inc | 16 +- data/scripts/maps/MauvilleCity_GameCorner.inc | 86 ++--- data/scripts/maps/MauvilleCity_Gym.inc | 12 +- data/scripts/maps/MauvilleCity_House2.inc | 6 +- data/scripts/maps/MeteorFalls_1F_2R.inc | 6 +- data/scripts/maps/MossdeepCity.inc | 4 +- data/scripts/maps/MossdeepCity_GameCorner_1F.inc | 28 +- data/scripts/maps/MossdeepCity_GameCorner_B1F.inc | 6 +- data/scripts/maps/MossdeepCity_Gym.inc | 2 +- data/scripts/maps/MossdeepCity_House1.inc | 2 +- data/scripts/maps/MossdeepCity_House2.inc | 4 +- data/scripts/maps/MossdeepCity_House3.inc | 2 +- data/scripts/maps/MossdeepCity_House4.inc | 2 +- data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc | 6 +- data/scripts/maps/MossdeepCity_StevensHouse.inc | 8 +- data/scripts/maps/MtChimney.inc | 12 +- data/scripts/maps/MtChimney_CableCarStation.inc | 6 +- data/scripts/maps/MtPyre_1F.inc | 2 +- data/scripts/maps/MtPyre_6F.inc | 2 +- data/scripts/maps/MtPyre_Exterior.inc | 2 +- data/scripts/maps/MtPyre_Summit.inc | 36 +- data/scripts/maps/NewMauville_Entrance.inc | 6 +- data/scripts/maps/NewMauville_Inside.inc | 8 +- data/scripts/maps/OldaleTown.inc | 6 +- data/scripts/maps/PacifidlogTown_House2.inc | 10 +- data/scripts/maps/PacifidlogTown_House3.inc | 6 +- data/scripts/maps/PacifidlogTown_House4.inc | 4 +- data/scripts/maps/PacifidlogTown_House5.inc | 2 +- data/scripts/maps/PetalburgCity.inc | 20 +- data/scripts/maps/PetalburgCity_Gym.inc | 170 +++++----- .../maps/PetalburgCity_PokemonCenter_1F.inc | 8 +- data/scripts/maps/PetalburgWoods.inc | 6 +- data/scripts/maps/Route102.inc | 2 +- data/scripts/maps/Route103.inc | 10 +- data/scripts/maps/Route104.inc | 12 +- data/scripts/maps/Route104_MrBrineysHouse.inc | 8 +- .../maps/Route104_PrettyPetalFlowerShop.inc | 10 +- data/scripts/maps/Route106.inc | 2 +- data/scripts/maps/Route107.inc | 2 +- data/scripts/maps/Route109.inc | 8 +- data/scripts/maps/Route109_SeashoreHouse.inc | 8 +- data/scripts/maps/Route110.inc | 42 +-- .../Route110_SeasideCyclingRoadNorthEntrance.inc | 8 +- .../Route110_SeasideCyclingRoadSouthEntrance.inc | 2 +- data/scripts/maps/Route110_TrickHouseEnd.inc | 26 +- data/scripts/maps/Route110_TrickHouseEntrance.inc | 120 +++---- data/scripts/maps/Route110_TrickHousePuzzle1.inc | 4 +- data/scripts/maps/Route110_TrickHousePuzzle2.inc | 10 +- data/scripts/maps/Route110_TrickHousePuzzle3.inc | 42 +-- data/scripts/maps/Route110_TrickHousePuzzle4.inc | 2 +- data/scripts/maps/Route110_TrickHousePuzzle5.inc | 102 +++--- data/scripts/maps/Route110_TrickHousePuzzle6.inc | 2 +- data/scripts/maps/Route110_TrickHousePuzzle7.inc | 6 +- data/scripts/maps/Route110_TrickHousePuzzle8.inc | 2 +- data/scripts/maps/Route111.inc | 34 +- data/scripts/maps/Route111_OldLadysRestStop.inc | 8 +- .../maps/Route111_WinstrateFamilysHouse.inc | 2 +- data/scripts/maps/Route112.inc | 2 +- data/scripts/maps/Route112_CableCarStation.inc | 6 +- data/scripts/maps/Route113.inc | 8 +- data/scripts/maps/Route113_GlassWorkshop.inc | 52 +-- data/scripts/maps/Route114.inc | 8 +- data/scripts/maps/Route114_FossilManiacsHouse.inc | 2 +- data/scripts/maps/Route114_FossilManiacsTunnel.inc | 4 +- data/scripts/maps/Route114_LanettesHouse.inc | 6 +- data/scripts/maps/Route115.inc | 6 +- data/scripts/maps/Route116.inc | 28 +- data/scripts/maps/Route117.inc | 12 +- data/scripts/maps/Route118.inc | 14 +- data/scripts/maps/Route119.inc | 34 +- data/scripts/maps/Route119_WeatherInstitute_1F.inc | 4 +- data/scripts/maps/Route119_WeatherInstitute_2F.inc | 6 +- data/scripts/maps/Route120.inc | 40 +-- data/scripts/maps/Route121.inc | 4 +- data/scripts/maps/Route121_SafariZoneEntrance.inc | 12 +- data/scripts/maps/Route123.inc | 8 +- data/scripts/maps/Route123_BerryMastersHouse.inc | 32 +- data/scripts/maps/Route124.inc | 6 +- .../maps/Route124_DivingTreasureHuntersHouse.inc | 20 +- data/scripts/maps/Route125.inc | 2 +- data/scripts/maps/Route128.inc | 4 +- data/scripts/maps/Route130.inc | 2 +- data/scripts/maps/RustboroCity.inc | 28 +- data/scripts/maps/RustboroCity_DevonCorp_2F.inc | 34 +- data/scripts/maps/RustboroCity_DevonCorp_3F.inc | 4 +- data/scripts/maps/RustboroCity_Flat2_2F.inc | 2 +- data/scripts/maps/RustboroCity_Gym.inc | 4 +- data/scripts/maps/RustboroCity_House1.inc | 6 +- data/scripts/maps/RustboroCity_PokemonSchool.inc | 6 +- data/scripts/maps/RusturfTunnel.inc | 24 +- data/scripts/maps/SSTidalCorridor.inc | 12 +- data/scripts/maps/SSTidalRooms.inc | 2 +- data/scripts/maps/SafariZone_Southeast.inc | 6 +- data/scripts/maps/SealedChamber_InnerRoom.inc | 2 +- .../scripts/maps/ShoalCave_LowTideEntranceRoom.inc | 20 +- data/scripts/maps/ShoalCave_LowTideInnerRoom.inc | 12 +- data/scripts/maps/ShoalCave_LowTideLowerRoom.inc | 4 +- data/scripts/maps/ShoalCave_LowTideStairsRoom.inc | 2 +- data/scripts/maps/SlateportCity.inc | 24 +- data/scripts/maps/SlateportCity_ContestHall.inc | 2 +- data/scripts/maps/SlateportCity_Harbor.inc | 34 +- data/scripts/maps/SlateportCity_House1.inc | 20 +- data/scripts/maps/SlateportCity_House2.inc | 2 +- .../maps/SlateportCity_OceanicMuseum_1F.inc | 10 +- .../maps/SlateportCity_OceanicMuseum_2F.inc | 10 +- data/scripts/maps/SlateportCity_PokemonFanClub.inc | 28 +- data/scripts/maps/SootopolisCity.inc | 14 +- data/scripts/maps/SootopolisCity_Gym_1F.inc | 8 +- data/scripts/maps/SootopolisCity_House2.inc | 4 +- data/scripts/maps/SootopolisCity_House3.inc | 2 +- data/scripts/maps/SootopolisCity_House6.inc | 4 +- data/scripts/maps/SootopolisCity_House8.inc | 20 +- data/scripts/maps/SouthernIsland_Exterior.inc | 2 +- data/scripts/maps/SouthernIsland_Interior.inc | 4 +- data/scripts/maps/Underwater_SealedChamber.inc | 4 +- data/scripts/maps/UnknownMap_25_34.inc | 18 +- data/scripts/maps/VerdanturfTown_ContestLobby.inc | 2 +- data/scripts/maps/VictoryRoad_1F.inc | 2 +- data/scripts/mauville_man.inc | 74 ++--- data/scripts/mystery_event_club.inc | 12 +- data/scripts/players_house.inc | 38 +-- data/scripts/pokeblocks.inc | 44 +-- data/scripts/safari_zone.inc | 8 +- data/scripts/secret_power_tm.inc | 10 +- data/scripts/tv.inc | 18 +- 189 files changed, 1914 insertions(+), 1899 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index c29d886ec..d2164c72f 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -226,6 +226,21 @@ .2byte \var2 .endm + @ Generic compare macro which attempts to deduce argument types based on their values + @ Any negative values are considered local variable indentifiers + @ Any values between 0x4000 to 0x4FFF and 0x8000 to 0x8FFF are considered event variable identifiers + .macro compare arg1, arg2 + .if (\arg1 < 0) && (\arg2 >= 0 && \arg2 < 0xFF) + compare_local_to_imm -\arg1, \arg2 + .elseif ((\arg1 >> 12) == 4 || (\arg1 >> 12) == 8) && ((\arg2 >> 12) == 4 || (\arg2 >> 12) == 8) + compare_var_to_var \arg1, \arg2 + .elseif ((\arg1 >> 12) == 4 || (\arg1 >> 12) == 8) && (\arg2 >= 0 && \arg2 <= 0xFFFF) + compare_var_to_imm \arg1, \arg2 + .else + .error "Invalid arguments for 'compare'" + .endif + .endm + @ Calls the native C function stored at `func`. .macro callnative func .byte 0x23 diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index 1885e00f0..5751e440d 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -430,7 +430,7 @@ EventScript_15F3E2: EventScript_15F419: msgbox UnknownString_81A38FB, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_15F384 closebutton special SecretBasePC_PackUp @@ -476,13 +476,13 @@ gUnknown_0815F49A:: @ 815F49A EventScript_15F4A1: special sub_80BC56C - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_15F4E0 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq EventScript_15F503 special sub_80BC224 msgbox UnknownString_81A3958, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_15F452 msgbox UnknownString_81A3A22, 3 special sub_80BC5BC @@ -492,7 +492,7 @@ EventScript_15F4A1: EventScript_15F4E0: msgbox UnknownString_81A3982, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_15F452 msgbox UnknownString_81A3A3A, 3 special sub_80BC5BC @@ -526,13 +526,13 @@ gUnknown_0815F523:: @ 815F523 gUnknown_0815F528:: @ 815F528 special GetShieldToyTVDecorationInfo - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_15F558 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_15F561 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq EventScript_15F56A - compare_var_to_imm RESULT, 3 + compare RESULT, 3 goto_if_eq EventScript_15F573 end @@ -942,7 +942,7 @@ gUnknown_0819F818:: @ 819F818 applymovement LAST_TALKED, Movement_19F8F0 waitmovement 0 specialvar RESULT, ScrSpecial_HasTrainerBeenFought - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if 5, EventScript_19F83F special PlayTrainerEncounterMusic special sub_8082524 @@ -956,10 +956,10 @@ gUnknown_0819F840:: @ 819F840 faceplayer call EventScript_19F8E5 specialvar RESULT, ScrSpecial_HasTrainerBeenFought - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if 5, EventScript_19F877 special CheckForAlivePartyMons - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if 5, EventScript_19F870 special PlayTrainerEncounterMusic special sub_8082524 @@ -985,7 +985,7 @@ gUnknown_0819F878:: @ 819F878 gUnknown_0819F887:: @ 819F887 call EventScript_19F8E5 specialvar RESULT, ScrSpecial_GetTrainerEyeRematchFlag - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_19F8AD special PlayTrainerEncounterMusic special sub_8082524 @@ -1002,10 +1002,10 @@ EventScript_19F8AD: gUnknown_0819F8AE:: @ 819F8AE specialvar RESULT, ScrSpecial_GetTrainerEyeRematchFlag - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_19F8DD special CheckForAlivePartyMons - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if 5, EventScript_19F8DE special PlayTrainerEncounterMusic special sub_8082524 @@ -1042,15 +1042,15 @@ EventScript_19F8F2: waitbutton reptrainerbattle specialvar RESULT, ScrSpecial_GetTrainerBattleMode - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_19F934 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq EventScript_19F936 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_19F936 - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq EventScript_19F936 - compare_var_to_imm RESULT, 8 + compare RESULT, 8 goto_if_eq EventScript_19F936 EventScript_19F934: @@ -1341,11 +1341,11 @@ EventScript_19FC84: return gUnknown_0819FC9F:: @ 819FC9F - compare_var_to_imm 0x4096, 1 + compare 0x4096, 1 goto_if_eq EventScript_19FCC1 - compare_var_to_imm 0x4096, 2 + compare 0x4096, 2 goto_if_eq EventScript_19FCD7 - compare_var_to_imm 0x4096, 3 + compare 0x4096, 3 goto_if_eq EventScript_19FCF0 end @@ -1439,9 +1439,9 @@ VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B lock faceplayer msgbox gText_NurseJoy_Welcome, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FD7C - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDC7 end @@ -1477,9 +1477,9 @@ OldaleTown_PokemonCenter_1F_EventScript_19FDC7:: @ 819FDC7 OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE specialvar RESULT, IsPokerusInParty - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDEA - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDB0 end @@ -1504,9 +1504,9 @@ Std_ObtainItem_: @ 819FE07 bufferitem 1, 0x8000 checkitemtype 0x8000 call GetItem_HandlePocket - compare_var_to_imm 0x8007, 0x1 + compare 0x8007, 0x1 call_if 1, Std_ObtainItem_Success - compare_var_to_imm 0x8007, 0x0 + compare 0x8007, 0x0 call_if 1, Std_ObtainItem_Fail return @@ -1521,31 +1521,31 @@ GetItem_HandlePocket: GetItem_HandlePocket_Items: bufferstd 2, 0xE - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_KeyItems: bufferstd 2, 0xF - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_PokeBalls: bufferstd 2, 0x10 - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_TMsHMs: bufferstd 2, 0x11 - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 call_if 1, PlayGetTMHMFanfare return GetItem_HandlePocket_Berries: bufferstd 2, 0x12 - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 call_if 1, PlayGetItemFanfare return @@ -1577,9 +1577,9 @@ Std_ObtainDecoration: @ 819FEDA Std_ObtainDecoration_: @ 819FEE8 bufferdecor 1, 0x8000 - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 call_if 1, Std_ObtainDecoration_Success - compare_var_to_imm 0x8007, 0 + compare 0x8007, 0 call_if 1, Std_ObtainDecoration_Fail return @@ -1605,9 +1605,9 @@ Std_FindItem: @ 819FF21 bufferitem 1, 0x8000 checkitemtype 0x8000 call GetItem_HandlePocket - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 call_if 1, Std_FindItem_Success - compare_var_to_imm 0x8007, 0 + compare 0x8007, 0 call_if 1, Std_FindItem_Fail release return @@ -1634,9 +1634,9 @@ HiddenItemScript:: @ 819FF7B bufferitem 0x1, 0x8005 checkitemtype 0x8005 call GetItem_HandlePocket - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 goto_if_eq HiddenItemScript_Success - compare_var_to_imm 0x8007, 0 + compare 0x8007, 0 goto_if_eq HiddenItemScript_Fail end @@ -1660,9 +1660,9 @@ UnusedMixRecordsScript: @ 819FFD5 lock faceplayer msgbox UnusedMixRecordsPromptText, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq UnusedMixRecordsScript_Yes - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq UnusedMixRecordsScript_Done goto UnusedMixRecordsScript_Done UnusedMixRecordsScript_Yes: @ 819FFFA @@ -1817,13 +1817,13 @@ Route109_EventScript_1A010C:: @ 81A010C UseSurfScript:: @ 81A0117 checkattack MOVE_SURF - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq UseSurfScript_NoMon bufferpartypoke 0, RESULT setanimation 0, RESULT lockall msgbox UseSurfPromptText, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq UseSurfScript_No msgbox UsedSurfText, 4 doanimation 9 @@ -1842,9 +1842,9 @@ Route110_EventScript_1A014E:: @ 81A014E Route119_EventScript_1A014E:: @ 81A014E RustboroCity_EventScript_1A014E:: @ 81A014E checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq RustboroCity_EventScript_1A0166 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq RustboroCity_EventScript_1A016C end @@ -1860,9 +1860,9 @@ LavaridgeTown_EventScript_1A0172:: @ 81A0172 Route110_EventScript_1A0172:: @ 81A0172 Route119_EventScript_1A0172:: @ 81A0172 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LavaridgeTown_EventScript_1A018A - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LavaridgeTown_EventScript_1A0190 end @@ -2142,23 +2142,23 @@ Route109_EventScript_1A02EF:: @ 81A02EF LittlerootTown_ProfessorBirchsLab_EventScript_1A02F4:: @ 81A02F4 Route101_EventScript_1A02F4:: @ 81A02F4 Route103_EventScript_1A02F4:: @ 81A02F4 - compare_var_to_imm 0x4085, 0 + compare 0x4085, 0 goto_if_eq Route101_EventScript_1A14DC - compare_var_to_imm 0x4049, 0 + compare 0x4049, 0 call_if 1, Route101_EventScript_1A0358 - compare_var_to_imm 0x4049, 1 + compare 0x4049, 1 call_if 1, Route101_EventScript_1A0358 - compare_var_to_imm 0x4049, 2 + compare 0x4049, 2 call_if 1, Route101_EventScript_1A0365 - compare_var_to_imm 0x4049, 3 + compare 0x4049, 3 call_if 1, Route101_EventScript_1A0365 - compare_var_to_imm 0x4049, 4 + compare 0x4049, 4 call_if 1, Route101_EventScript_1A0372 - compare_var_to_imm 0x4049, 5 + compare 0x4049, 5 call_if 1, Route101_EventScript_1A0372 - compare_var_to_imm 0x4049, 6 + compare 0x4049, 6 call_if 1, Route101_EventScript_1A0358 - compare_var_to_imm 0x4049, 7 + compare 0x4049, 7 call_if 1, Route101_EventScript_1A0358 return @@ -2189,7 +2189,7 @@ Route103_EventScript_1A037F:: @ 81A037F lock faceplayer msgbox Route101_Text_1C4449, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route101_EventScript_1A039B call Route101_EventScript_1A03B0 release @@ -2218,7 +2218,7 @@ Route101_EventScript_1A03B0:: @ 81A03B0 buffernum 1, 0x8009 msgbox Route101_Text_1C44DC, 4 call Route101_EventScript_1A03A5 - compare_var_to_imm 0x800a, 0 + compare 0x800a, 0 goto_if_eq Route101_EventScript_1A14DC setvar 0x8004, 1 specialvar RESULT, ScriptGetPokedexInfo @@ -2285,9 +2285,9 @@ Movement_1A047A: BattleTower_Outside_EventScript_1A047C:: @ 81A047C SouthernIsland_Exterior_EventScript_1A047C:: @ 81A047C - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, BattleTower_Outside_EventScript_160B2F - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, BattleTower_Outside_EventScript_160B3A delay 30 spriteinvisible 255, 0, 0 @@ -2430,7 +2430,7 @@ Route119_EventScript_1A0587:: @ 81A0587 Route119_EventScript_1A0594:: @ 81A0594 Route120_EventScript_1A0594:: @ 81A0594 checkitem ITEM_DEVON_SCOPE, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route119_EventScript_1A05AE msgbox Route119_Text_171B93, 4 release @@ -2438,7 +2438,7 @@ Route120_EventScript_1A0594:: @ 81A0594 Route119_EventScript_1A05AE:: @ 81A05AE msgbox Route119_Text_171BB6, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route119_EventScript_1A05C3 release end @@ -2455,19 +2455,19 @@ Route119_EventScript_1A05C3:: @ 81A05C3 delay 40 waitpokecry setwildbattle SPECIES_KECLEON, 30, ITEM_NONE - compare_var_to_imm 0x8004, 1 + compare 0x8004, 1 call_if 1, Route119_EventScript_1A0646 - compare_var_to_imm 0x8004, 2 + compare 0x8004, 2 call_if 1, Route119_EventScript_1A064A - compare_var_to_imm 0x8004, 3 + compare 0x8004, 3 call_if 1, Route119_EventScript_1A064E - compare_var_to_imm 0x8004, 4 + compare 0x8004, 4 call_if 1, Route119_EventScript_1A0652 - compare_var_to_imm 0x8004, 5 + compare 0x8004, 5 call_if 1, Route119_EventScript_1A0656 - compare_var_to_imm 0x8004, 6 + compare 0x8004, 6 call_if 1, Route119_EventScript_1A065A - compare_var_to_imm 0x8004, 7 + compare 0x8004, 7 call_if 1, Route119_EventScript_1A065E setflag 2145 dowildbattle @@ -3263,7 +3263,7 @@ gUnknown_081A14B8:: @ 81A14B8 lockall special ExecuteWhiteOut waitstate - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_1A14CA releaseall end @@ -3618,32 +3618,32 @@ SecretBase_RedCave1_Text_1A2BA4:: @ 81A2BA4 gUnknown_081A2C51:: @ 81A2C51 special sub_80BB70C special sub_80BB63C - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_1A2E45 checkattack MOVE_SECRET_POWER setanimation 0, RESULT bufferattack 1, MOVE_SECRET_POWER - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 goto_if_eq EventScript_1A2CB0 - compare_var_to_imm 0x8007, 2 + compare 0x8007, 2 goto_if_eq EventScript_1A2CB0 - compare_var_to_imm 0x8007, 3 + compare 0x8007, 3 goto_if_eq EventScript_1A2CB0 - compare_var_to_imm 0x8007, 4 + compare 0x8007, 4 goto_if_eq EventScript_1A2CB0 - compare_var_to_imm 0x8007, 5 + compare 0x8007, 5 goto_if_eq EventScript_1A2D08 - compare_var_to_imm 0x8007, 6 + compare 0x8007, 6 goto_if_eq EventScript_1A2D60 end EventScript_1A2CB0: lockall - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq EventScript_1A2CF1 bufferpartypoke 0, RESULT msgbox UnknownString_8198F34, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton @@ -3670,11 +3670,11 @@ EventScript_1A2CFA: EventScript_1A2D08: lockall - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq EventScript_1A2D49 bufferpartypoke 0, RESULT msgbox UnknownString_81A197B, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton @@ -3701,11 +3701,11 @@ EventScript_1A2D52: EventScript_1A2D60: lockall - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq EventScript_1A2DA1 bufferpartypoke 0, RESULT msgbox UnknownString_81A1A4B, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton @@ -3749,7 +3749,7 @@ SecretBase_RedCave1_EventScript_1A2DDE:: @ 81A2DDE waitmovement 0 setvar 0x4097, 1 msgbox SecretBase_RedCave1_Text_198F89, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A2E08 closebutton playse 9 @@ -3773,7 +3773,7 @@ gUnknown_081A2E14:: @ 81A2E14 setvar 0x4097, 1 playse 9 special sub_80BC114 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A2E38 clearflag 173 special sub_80BBAF0 @@ -3790,57 +3790,57 @@ EventScript_1A2E38: EventScript_1A2E45: checkattack MOVE_SECRET_POWER - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq EventScript_1A2EF7 setanimation 0, RESULT setorcopyvar 0x8004, RESULT lockall special GetSecretBaseNearbyMapName msgbox UnknownString_81A3C71, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UnknownString_81A38FB, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A2F3A fadescreen 1 special sub_80BC50C closebutton fadescreen 0 msgbox UnknownString_81A3CC9, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A2F3A bufferpartypoke 0, 0x8004 bufferattack 1, MOVE_SECRET_POWER msgbox UsedCutRockSmashText, 4 closebutton closebutton - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 goto_if_eq gUnknown_081A2CE6 - compare_var_to_imm 0x8007, 2 + compare 0x8007, 2 goto_if_eq gUnknown_081A2CE6 - compare_var_to_imm 0x8007, 3 + compare 0x8007, 3 goto_if_eq gUnknown_081A2CE6 - compare_var_to_imm 0x8007, 4 + compare 0x8007, 4 goto_if_eq gUnknown_081A2CE6 - compare_var_to_imm 0x8007, 5 + compare 0x8007, 5 goto_if_eq gUnknown_081A2D3E - compare_var_to_imm 0x8007, 6 + compare 0x8007, 6 goto_if_eq gUnknown_081A2D96 releaseall end EventScript_1A2EF7:: - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 goto_if_eq EventScript_1A2CF1 - compare_var_to_imm 0x8007, 2 + compare 0x8007, 2 goto_if_eq EventScript_1A2CF1 - compare_var_to_imm 0x8007, 3 + compare 0x8007, 3 goto_if_eq EventScript_1A2CF1 - compare_var_to_imm 0x8007, 4 + compare 0x8007, 4 goto_if_eq EventScript_1A2CF1 - compare_var_to_imm 0x8007, 5 + compare 0x8007, 5 goto_if_eq EventScript_1A2D49 - compare_var_to_imm 0x8007, 6 + compare 0x8007, 6 goto_if_eq EventScript_1A2DA1 end @@ -3893,10 +3893,10 @@ gUnknown_081A2F8A:: @ 81A2F8A EventScript_1A2F95: special sub_8100A7C - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_1A2FBF addvar 0x8004, 1 - compare_var_to_imm 0x8005, 0 + compare 0x8005, 0 goto_if_eq EventScript_1A2F95 disappear 0x8006 setflag 0x8005 @@ -3931,42 +3931,42 @@ SecretBase_YellowCave2_EventScript_1A2FC0:: @ 81A2FC0 SecretBase_YellowCave3_EventScript_1A2FC0:: @ 81A2FC0 SecretBase_YellowCave4_EventScript_1A2FC0:: @ 81A2FC0 special sub_80BCE90 - compare_var_to_imm 0x8004, 0 + compare 0x8004, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3032 - compare_var_to_imm 0x8004, 1 + compare 0x8004, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A30AE - compare_var_to_imm 0x8004, 2 + compare 0x8004, 2 goto_if_eq SecretBase_RedCave1_EventScript_1A312A - compare_var_to_imm 0x8004, 3 + compare 0x8004, 3 goto_if_eq SecretBase_RedCave1_EventScript_1A31A6 - compare_var_to_imm 0x8004, 4 + compare 0x8004, 4 goto_if_eq SecretBase_RedCave1_EventScript_1A3222 - compare_var_to_imm 0x8004, 5 + compare 0x8004, 5 goto_if_eq SecretBase_RedCave1_EventScript_1A329E - compare_var_to_imm 0x8004, 6 + compare 0x8004, 6 goto_if_eq SecretBase_RedCave1_EventScript_1A331A - compare_var_to_imm 0x8004, 7 + compare 0x8004, 7 goto_if_eq SecretBase_RedCave1_EventScript_1A3396 - compare_var_to_imm 0x8004, 8 + compare 0x8004, 8 goto_if_eq SecretBase_RedCave1_EventScript_1A3412 - compare_var_to_imm 0x8004, 9 + compare 0x8004, 9 goto_if_eq SecretBase_RedCave1_EventScript_1A348E end SecretBase_RedCave1_EventScript_1A3032:: @ 81A3032 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3086 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A30A5 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1AEA, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A308F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A308F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1B83, 4 @@ -3991,17 +3991,17 @@ SecretBase_RedCave1_EventScript_1A30A5:: @ 81A30A5 SecretBase_RedCave1_EventScript_1A30AE:: @ 81A30AE checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3102 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3121 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1E67, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A310B setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A310B hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1F04, 4 @@ -4026,17 +4026,17 @@ SecretBase_RedCave1_EventScript_1A3121:: @ 81A3121 SecretBase_RedCave1_EventScript_1A312A:: @ 81A312A checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A317E - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A319D lock faceplayer msgbox SecretBase_RedCave1_Text_1A218F, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3187 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3187 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2220, 4 @@ -4061,17 +4061,17 @@ SecretBase_RedCave1_EventScript_1A319D:: @ 81A319D SecretBase_RedCave1_EventScript_1A31A6:: @ 81A31A6 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A31FA - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3219 lock faceplayer msgbox SecretBase_RedCave1_Text_1A24E1, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3203 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3203 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A256F, 4 @@ -4096,17 +4096,17 @@ SecretBase_RedCave1_EventScript_1A3219:: @ 81A3219 SecretBase_RedCave1_EventScript_1A3222:: @ 81A3222 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3276 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3295 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2830, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A327F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A327F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A28D7, 4 @@ -4131,17 +4131,17 @@ SecretBase_RedCave1_EventScript_1A3295:: @ 81A3295 SecretBase_RedCave1_EventScript_1A329E:: @ 81A329E checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A32F2 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3311 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1CB2, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A32FB setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A32FB hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1D48, 4 @@ -4166,17 +4166,17 @@ SecretBase_RedCave1_EventScript_1A3311:: @ 81A3311 SecretBase_RedCave1_EventScript_1A331A:: @ 81A331A checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A336E - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A338D lock faceplayer msgbox SecretBase_RedCave1_Text_1A2026, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3377 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3377 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2095, 4 @@ -4201,17 +4201,17 @@ SecretBase_RedCave1_EventScript_1A338D:: @ 81A338D SecretBase_RedCave1_EventScript_1A3396:: @ 81A3396 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A33EA - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3409 lock faceplayer msgbox SecretBase_RedCave1_Text_1A236A, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A33F3 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A33F3 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2405, 4 @@ -4236,17 +4236,17 @@ SecretBase_RedCave1_EventScript_1A3409:: @ 81A3409 SecretBase_RedCave1_EventScript_1A3412:: @ 81A3412 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3466 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3485 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2663, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A346F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A346F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2710, 4 @@ -4271,17 +4271,17 @@ SecretBase_RedCave1_EventScript_1A3485:: @ 81A3485 SecretBase_RedCave1_EventScript_1A348E:: @ 81A348E checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A34E2 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3501 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2A13, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A34EB setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A34EB hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2AE2, 4 @@ -4413,13 +4413,13 @@ SlateportCity_PokemonFanClub_EventScript_1ADE46:: @ 81ADE46 SlateportCity_PokemonFanClub_EventScript_1ADE4D:: @ 81ADE4D setvar 0x8005, 1 special sub_80BF2C4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADED6 copyvar 0x8009, 0x8006 msgbox SlateportCity_PokemonFanClub_Text_1A8704, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADE84 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEB9 end @@ -4431,9 +4431,9 @@ SlateportCity_PokemonFanClub_EventScript_1ADE84:: @ 81ADE84 call SlateportCity_PokemonFanClub_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEC3 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEB9 end @@ -4458,24 +4458,24 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADEE0:: @ 81ADEE0 faceplayer setvar 0x8005, 2 special sub_80BF2C4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF96 copyvar 0x8009, 0x8006 checkflag 105 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF25 setflag 105 msgbox SlateportCity_OceanicMuseum_1F_Text_1A927F, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end SlateportCity_OceanicMuseum_1F_EventScript_1ADF25:: @ 81ADF25 msgbox SlateportCity_OceanicMuseum_1F_Text_1A934C, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end @@ -4487,9 +4487,9 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADF44:: @ 81ADF44 call SlateportCity_OceanicMuseum_1F_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF83 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end @@ -4513,17 +4513,17 @@ SlateportCity_PokemonFanClub_EventScript_1ADFA0:: @ 81ADFA0 lock faceplayer specialvar RESULT, sub_80BF544 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADE4D setvar 0x8005, 3 special sub_80BF2C4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0AC copyvar 0x8009, 0x8006 msgbox SlateportCity_PokemonFanClub_Text_1A82F1, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADFE9 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 end @@ -4559,14 +4559,14 @@ SlateportCity_PokemonFanClub_EventScript_1AE04A:: @ 81AE04A call SlateportCity_PokemonFanClub_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 msgbox SlateportCity_PokemonFanClub_Text_1A852D, 4 setvar 0x8006, 1 call SlateportCity_PokemonFanClub_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 msgbox SlateportCity_PokemonFanClub_Text_1A85A6, 4 copyvar 0x8007, 0x800a @@ -4594,13 +4594,13 @@ VerdanturfTown_ContestLobby_EventScript_1AE0B6:: @ 81AE0B6 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE17E setvar 0x8005, 6 special sub_80BF2C4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE17E copyvar 0x8009, 0x8006 msgbox FallarborTown_ContestLobby_Text_1A6F7C, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE0F8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D end @@ -4612,9 +4612,9 @@ FallarborTown_ContestLobby_EventScript_1AE0F8:: @ 81AE0F8 call FallarborTown_ContestLobby_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE137 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D end @@ -4633,7 +4633,7 @@ FallarborTown_ContestLobby_EventScript_1AE137:: @ 81AE137 call FallarborTown_ContestLobby_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D msgbox FallarborTown_ContestLobby_Text_1A7153, 4 setflag 2 @@ -4650,11 +4650,11 @@ FallarborTown_ContestLobby_EventScript_1AE188:: @ 81AE188 LilycoveCity_ContestLobby_EventScript_1AE188:: @ 81AE188 SlateportCity_ContestLobby_EventScript_1AE188:: @ 81AE188 VerdanturfTown_ContestLobby_EventScript_1AE188:: @ 81AE188 - compare_var_to_imm 0x4086, 2 + compare 0x4086, 2 goto_if 5, FallarborTown_ContestLobby_EventScript_1AE1FE setvar 0x8005, 6 special sub_80BF2C4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE1FE switch 0x4088 case 0, FallarborTown_ContestLobby_EventScript_1AE1FE @@ -4691,13 +4691,13 @@ BattleTower_Lobby_EventScript_1AE1FF:: @ 81AE1FF goto_if_eq BattleTower_Lobby_EventScript_1AE2E3 setvar 0x8005, 7 special sub_80BF2C4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE2E3 copyvar 0x8009, 0x8006 msgbox BattleTower_Lobby_Text_1A776D, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE241 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE297 end @@ -4706,9 +4706,9 @@ BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 waittext multichoice 19, 8, 45, 1 copyvar 0x8008, RESULT - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, BattleTower_Lobby_EventScript_1AE2A1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, BattleTower_Lobby_EventScript_1AE2AA msgbox BattleTower_Lobby_Text_1A79EB, 4 setvar 0x8004, 12 @@ -4716,9 +4716,9 @@ BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 call BattleTower_Lobby_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE2B3 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE2D9 end @@ -4736,7 +4736,7 @@ BattleTower_Lobby_EventScript_1AE2AA:: @ 81AE2AA return BattleTower_Lobby_EventScript_1AE2B3:: @ 81AE2B3 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE2D9 msgbox BattleTower_Lobby_Text_1A7A6E, 4 setflag 2 @@ -4756,11 +4756,11 @@ BattleTower_Lobby_EventScript_1AE2E3:: @ 81AE2E3 end BattleTower_Lobby_EventScript_1AE2ED:: @ 81AE2ED - compare_var_to_imm 0x40bc, 0 + compare 0x40bc, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE30F setvar 0x8005, 7 special sub_80BF2C4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE30F clearflag 918 return @@ -4822,11 +4822,11 @@ Text_RepelWoreOff: @ 81C33EF MauvilleCity_GameCorner_EventScript_1C407E:: @ 81C407E checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 0 event_96 2 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 goto MauvilleCity_GameCorner_EventScript_1C40DA @@ -4834,11 +4834,11 @@ MauvilleCity_GameCorner_EventScript_1C407E:: @ 81C407E MauvilleCity_GameCorner_EventScript_1C40AC:: @ 81C40AC checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 1 event_96 2 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 goto MauvilleCity_GameCorner_EventScript_1C40DA diff --git a/data-de/field_move_scripts.inc b/data-de/field_move_scripts.inc index 40748401b..59635ee4f 100644 --- a/data-de/field_move_scripts.inc +++ b/data-de/field_move_scripts.inc @@ -3,13 +3,13 @@ S_CuttableTree:: @ 81B0DCC checkflag 2055 goto_if 0, CannotUseCut checkattack MOVE_CUT - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq CannotUseCut setanimation 0, RESULT bufferpartypoke 0, RESULT bufferattack 1, MOVE_CUT msgbox UseCutPromptText, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Cut_ChoseNo msgbox UsedCutRockSmashText, 4 closebutton @@ -64,13 +64,13 @@ S_BreakableRock:: @ 81B0EB7 checkflag 2057 goto_if 0, CannotUseRockSmash checkattack MOVE_ROCK_SMASH - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq CannotUseRockSmash setanimation 0, RESULT bufferpartypoke 0, RESULT bufferattack 1, MOVE_ROCK_SMASH msgbox UseRockSmashPromptText, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq RockSmash_ChoseNo msgbox UsedCutRockSmashText, 4 closebutton @@ -91,10 +91,10 @@ DoRockSmashMovement: @ 81B0F0C waitmovement 0 disappear LAST_TALKED specialvar RESULT, sub_810F5BC - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq DoRockSmashMovement_Done special ScrSpecial_RockSmashWildEncounter - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq DoRockSmashMovement_Done waitstate releaseall @@ -133,11 +133,11 @@ S_PushableBoulder:: @ 81B0FCB checkflag 2089 goto_if_eq AlreadyUsedStrength checkattack 70 - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq CannotUseStrength setanimation 0, RESULT msgbox UseStrengthPromptText, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Strength_ChoseNo closebutton doanimation 40 @@ -194,12 +194,12 @@ AlreadyUsedStrengthText: @ 81B1127 S_UseWaterfall:: @ 81B115A lockall checkattack MOVE_WATERFALL - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq Waterfall_NoMonKnows bufferpartypoke 0, RESULT setanimation 0, RESULT msgbox UseWaterfallPromptText, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Waterfall_Done msgbox UsedWaterfallText, 4 doanimation 43 @@ -227,13 +227,13 @@ UsedWaterfallText: @ 81B120D UseDiveScript:: @ 81B1220 lockall checkattack MOVE_DIVE - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq CannotUseDive bufferpartypoke 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UseDivePromptText, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Dive_Done msgbox UsedDiveText, 4 doanimation 44 @@ -250,13 +250,13 @@ Dive_Done: @ 81B1267 S_UseDiveUnderwater:: @ 81B1269 lockall checkattack MOVE_DIVE - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq UnderwaterCannotUseDive bufferpartypoke 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UnderwaterUseDivePromptText, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq UnderwaterDive_Done msgbox UsedDiveText, 4 doanimation 44 diff --git a/data/event_scripts.s b/data/event_scripts.s index f31a00e2a..0db608cd5 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -430,7 +430,7 @@ EventScript_15F3E2: EventScript_15F419: msgbox UnknownString_81A38FB, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_15F384 closebutton special SecretBasePC_PackUp @@ -476,13 +476,13 @@ gUnknown_0815F49A:: @ 815F49A EventScript_15F4A1: special sub_80BC56C - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_15F4E0 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq EventScript_15F503 special sub_80BC224 msgbox UnknownString_81A3958, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_15F452 msgbox UnknownString_81A3A22, 3 special sub_80BC5BC @@ -492,7 +492,7 @@ EventScript_15F4A1: EventScript_15F4E0: msgbox UnknownString_81A3982, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_15F452 msgbox UnknownString_81A3A3A, 3 special sub_80BC5BC @@ -526,13 +526,13 @@ gUnknown_0815F523:: @ 815F523 gUnknown_0815F528:: @ 815F528 special GetShieldToyTVDecorationInfo - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_15F558 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_15F561 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq EventScript_15F56A - compare_var_to_imm RESULT, 3 + compare RESULT, 3 goto_if_eq EventScript_15F573 end @@ -936,7 +936,7 @@ gUnknown_0819F818:: @ 819F818 applymovement LAST_TALKED, Movement_19F8F0 waitmovement 0 specialvar RESULT, ScrSpecial_HasTrainerBeenFought - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if 5, EventScript_19F83F special PlayTrainerEncounterMusic special sub_8082524 @@ -950,10 +950,10 @@ gUnknown_0819F840:: @ 819F840 faceplayer call EventScript_19F8E5 specialvar RESULT, ScrSpecial_HasTrainerBeenFought - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if 5, EventScript_19F877 special CheckForAlivePartyMons - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if 5, EventScript_19F870 special PlayTrainerEncounterMusic special sub_8082524 @@ -979,7 +979,7 @@ gUnknown_0819F878:: @ 819F878 gUnknown_0819F887:: @ 819F887 call EventScript_19F8E5 specialvar RESULT, ScrSpecial_GetTrainerEyeRematchFlag - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_19F8AD special PlayTrainerEncounterMusic special sub_8082524 @@ -996,10 +996,10 @@ EventScript_19F8AD: gUnknown_0819F8AE:: @ 819F8AE specialvar RESULT, ScrSpecial_GetTrainerEyeRematchFlag - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_19F8DD special CheckForAlivePartyMons - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if 5, EventScript_19F8DE special PlayTrainerEncounterMusic special sub_8082524 @@ -1036,15 +1036,15 @@ EventScript_19F8F2: waitbutton reptrainerbattle specialvar RESULT, ScrSpecial_GetTrainerBattleMode - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_19F934 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq EventScript_19F936 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_19F936 - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq EventScript_19F936 - compare_var_to_imm RESULT, 8 + compare RESULT, 8 goto_if_eq EventScript_19F936 EventScript_19F934: @@ -1335,11 +1335,11 @@ EventScript_19FC84: return gUnknown_0819FC9F:: @ 819FC9F - compare_var_to_imm 0x4096, 1 + compare 0x4096, 1 goto_if_eq EventScript_19FCC1 - compare_var_to_imm 0x4096, 2 + compare 0x4096, 2 goto_if_eq EventScript_19FCD7 - compare_var_to_imm 0x4096, 3 + compare 0x4096, 3 goto_if_eq EventScript_19FCF0 end @@ -1433,9 +1433,9 @@ VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B lock faceplayer msgbox gText_NurseJoy_Welcome, MSGBOX_YESNO - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq do_heal_party - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq dont_heal_party end @@ -1471,9 +1471,9 @@ dont_heal_party:: @ 819FDC7 OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE specialvar RESULT, IsPokerusInParty - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDEA - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_1F_EventScript_19FDB0 end @@ -1498,9 +1498,9 @@ Std_ObtainItem_: @ 819FE07 bufferitem 1, 0x8000 checkitemtype 0x8000 call GetItem_HandlePocket - compare_var_to_imm 0x8007, 0x1 + compare 0x8007, 0x1 call_if 1, Std_ObtainItem_Success - compare_var_to_imm 0x8007, 0x0 + compare 0x8007, 0x0 call_if 1, Std_ObtainItem_Fail return @@ -1515,31 +1515,31 @@ GetItem_HandlePocket: GetItem_HandlePocket_Items: bufferstd 2, 0xE - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_KeyItems: bufferstd 2, 0xF - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_PokeBalls: bufferstd 2, 0x10 - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_TMsHMs: bufferstd 2, 0x11 - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 call_if 1, PlayGetTMHMFanfare return GetItem_HandlePocket_Berries: bufferstd 2, 0x12 - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 call_if 1, PlayGetItemFanfare return @@ -1571,9 +1571,9 @@ Std_ObtainDecoration: @ 819FEDA Std_ObtainDecoration_: @ 819FEE8 bufferdecor 1, 0x8000 - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 call_if 1, Std_ObtainDecoration_Success - compare_var_to_imm 0x8007, 0 + compare 0x8007, 0 call_if 1, Std_ObtainDecoration_Fail return @@ -1599,9 +1599,9 @@ Std_FindItem: @ 819FF21 bufferitem 1, 0x8000 checkitemtype 0x8000 call GetItem_HandlePocket - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 call_if 1, Std_FindItem_Success - compare_var_to_imm 0x8007, 0 + compare 0x8007, 0 call_if 1, Std_FindItem_Fail release return @@ -1628,9 +1628,9 @@ HiddenItemScript:: @ 819FF7B bufferitem 0x1, 0x8005 checkitemtype 0x8005 call GetItem_HandlePocket - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 goto_if_eq HiddenItemScript_Success - compare_var_to_imm 0x8007, 0 + compare 0x8007, 0 goto_if_eq HiddenItemScript_Fail end @@ -1654,9 +1654,9 @@ UnusedMixRecordsScript: @ 819FFD5 lock faceplayer msgbox UnusedMixRecordsPromptText, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq UnusedMixRecordsScript_Yes - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq UnusedMixRecordsScript_Done goto UnusedMixRecordsScript_Done UnusedMixRecordsScript_Yes: @ 819FFFA @@ -1811,13 +1811,13 @@ Route109_EventScript_1A010C:: @ 81A010C UseSurfScript:: @ 81A0117 checkattack MOVE_SURF - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq UseSurfScript_NoMon bufferpartypoke 0, RESULT setanimation 0, RESULT lockall msgbox UseSurfPromptText, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq UseSurfScript_No msgbox UsedSurfText, 4 doanimation 9 @@ -1836,9 +1836,9 @@ Route110_EventScript_1A014E:: @ 81A014E Route119_EventScript_1A014E:: @ 81A014E RustboroCity_EventScript_1A014E:: @ 81A014E checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq RustboroCity_EventScript_1A0166 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq RustboroCity_EventScript_1A016C end @@ -1854,9 +1854,9 @@ LavaridgeTown_EventScript_1A0172:: @ 81A0172 Route110_EventScript_1A0172:: @ 81A0172 Route119_EventScript_1A0172:: @ 81A0172 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LavaridgeTown_EventScript_1A018A - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LavaridgeTown_EventScript_1A0190 end @@ -2136,23 +2136,23 @@ Route109_EventScript_1A02EF:: @ 81A02EF LittlerootTown_ProfessorBirchsLab_EventScript_1A02F4:: @ 81A02F4 Route101_EventScript_1A02F4:: @ 81A02F4 Route103_EventScript_1A02F4:: @ 81A02F4 - compare_var_to_imm 0x4085, 0 + compare 0x4085, 0 goto_if_eq Route101_EventScript_1A14DC - compare_var_to_imm 0x4049, 0 + compare 0x4049, 0 call_if 1, Route101_EventScript_1A0358 - compare_var_to_imm 0x4049, 1 + compare 0x4049, 1 call_if 1, Route101_EventScript_1A0358 - compare_var_to_imm 0x4049, 2 + compare 0x4049, 2 call_if 1, Route101_EventScript_1A0365 - compare_var_to_imm 0x4049, 3 + compare 0x4049, 3 call_if 1, Route101_EventScript_1A0365 - compare_var_to_imm 0x4049, 4 + compare 0x4049, 4 call_if 1, Route101_EventScript_1A0372 - compare_var_to_imm 0x4049, 5 + compare 0x4049, 5 call_if 1, Route101_EventScript_1A0372 - compare_var_to_imm 0x4049, 6 + compare 0x4049, 6 call_if 1, Route101_EventScript_1A0358 - compare_var_to_imm 0x4049, 7 + compare 0x4049, 7 call_if 1, Route101_EventScript_1A0358 return @@ -2183,7 +2183,7 @@ Route103_EventScript_1A037F:: @ 81A037F lock faceplayer msgbox Route101_Text_1C4449, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route101_EventScript_1A039B call Route101_EventScript_1A03B0 release @@ -2212,7 +2212,7 @@ Route101_EventScript_1A03B0:: @ 81A03B0 buffernum 1, 0x8009 msgbox Route101_Text_1C44DC, 4 call Route101_EventScript_1A03A5 - compare_var_to_imm 0x800a, 0 + compare 0x800a, 0 goto_if_eq Route101_EventScript_1A14DC setvar 0x8004, 1 specialvar RESULT, ScriptGetPokedexInfo @@ -2279,9 +2279,9 @@ Movement_1A047A: BattleTower_Outside_EventScript_1A047C:: @ 81A047C SouthernIsland_Exterior_EventScript_1A047C:: @ 81A047C - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, BattleTower_Outside_EventScript_160B2F - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, BattleTower_Outside_EventScript_160B3A delay 30 spriteinvisible 255, 0, 0 @@ -2424,7 +2424,7 @@ Route119_EventScript_1A0587:: @ 81A0587 Route119_EventScript_1A0594:: @ 81A0594 Route120_EventScript_1A0594:: @ 81A0594 checkitem ITEM_DEVON_SCOPE, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route119_EventScript_1A05AE msgbox Route119_Text_171B93, 4 release @@ -2432,7 +2432,7 @@ Route120_EventScript_1A0594:: @ 81A0594 Route119_EventScript_1A05AE:: @ 81A05AE msgbox Route119_Text_171BB6, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route119_EventScript_1A05C3 release end @@ -2449,19 +2449,19 @@ Route119_EventScript_1A05C3:: @ 81A05C3 delay 40 waitpokecry setwildbattle SPECIES_KECLEON, 30, ITEM_NONE - compare_var_to_imm 0x8004, 1 + compare 0x8004, 1 call_if 1, Route119_EventScript_1A0646 - compare_var_to_imm 0x8004, 2 + compare 0x8004, 2 call_if 1, Route119_EventScript_1A064A - compare_var_to_imm 0x8004, 3 + compare 0x8004, 3 call_if 1, Route119_EventScript_1A064E - compare_var_to_imm 0x8004, 4 + compare 0x8004, 4 call_if 1, Route119_EventScript_1A0652 - compare_var_to_imm 0x8004, 5 + compare 0x8004, 5 call_if 1, Route119_EventScript_1A0656 - compare_var_to_imm 0x8004, 6 + compare 0x8004, 6 call_if 1, Route119_EventScript_1A065A - compare_var_to_imm 0x8004, 7 + compare 0x8004, 7 call_if 1, Route119_EventScript_1A065E setflag 2145 dowildbattle @@ -3253,7 +3253,7 @@ gUnknown_081A14B8:: @ 81A14B8 lockall special ExecuteWhiteOut waitstate - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_1A14CA releaseall end @@ -3597,32 +3597,32 @@ SecretBase_RedCave1_Text_1A2BA4:: @ 81A2BA4 gUnknown_081A2C51:: @ 81A2C51 special sub_80BB70C special sub_80BB63C - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_1A2E45 checkattack MOVE_SECRET_POWER setanimation 0, RESULT bufferattack 1, MOVE_SECRET_POWER - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 goto_if_eq EventScript_1A2CB0 - compare_var_to_imm 0x8007, 2 + compare 0x8007, 2 goto_if_eq EventScript_1A2CB0 - compare_var_to_imm 0x8007, 3 + compare 0x8007, 3 goto_if_eq EventScript_1A2CB0 - compare_var_to_imm 0x8007, 4 + compare 0x8007, 4 goto_if_eq EventScript_1A2CB0 - compare_var_to_imm 0x8007, 5 + compare 0x8007, 5 goto_if_eq EventScript_1A2D08 - compare_var_to_imm 0x8007, 6 + compare 0x8007, 6 goto_if_eq EventScript_1A2D60 end EventScript_1A2CB0: lockall - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq EventScript_1A2CF1 bufferpartypoke 0, RESULT msgbox UnknownString_8198F34, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton @@ -3649,11 +3649,11 @@ EventScript_1A2CFA: EventScript_1A2D08: lockall - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq EventScript_1A2D49 bufferpartypoke 0, RESULT msgbox UnknownString_81A197B, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton @@ -3680,11 +3680,11 @@ EventScript_1A2D52: EventScript_1A2D60: lockall - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq EventScript_1A2DA1 bufferpartypoke 0, RESULT msgbox UnknownString_81A1A4B, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closebutton @@ -3728,7 +3728,7 @@ SecretBase_RedCave1_EventScript_1A2DDE:: @ 81A2DDE waitmovement 0 setvar 0x4097, 1 msgbox SecretBase_RedCave1_Text_198F89, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A2E08 closebutton playse 9 @@ -3752,7 +3752,7 @@ gUnknown_081A2E14:: @ 81A2E14 setvar 0x4097, 1 playse 9 special sub_80BC114 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A2E38 clearflag 173 special sub_80BBAF0 @@ -3769,57 +3769,57 @@ EventScript_1A2E38: EventScript_1A2E45: checkattack MOVE_SECRET_POWER - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq EventScript_1A2EF7 setanimation 0, RESULT setorcopyvar 0x8004, RESULT lockall special GetSecretBaseNearbyMapName msgbox UnknownString_81A3C71, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UnknownString_81A38FB, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A2F3A fadescreen 1 special sub_80BC50C closebutton fadescreen 0 msgbox UnknownString_81A3CC9, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A2F3A bufferpartypoke 0, 0x8004 bufferattack 1, MOVE_SECRET_POWER msgbox UsedCutRockSmashText, 4 closebutton closebutton - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 goto_if_eq gUnknown_081A2CE6 - compare_var_to_imm 0x8007, 2 + compare 0x8007, 2 goto_if_eq gUnknown_081A2CE6 - compare_var_to_imm 0x8007, 3 + compare 0x8007, 3 goto_if_eq gUnknown_081A2CE6 - compare_var_to_imm 0x8007, 4 + compare 0x8007, 4 goto_if_eq gUnknown_081A2CE6 - compare_var_to_imm 0x8007, 5 + compare 0x8007, 5 goto_if_eq gUnknown_081A2D3E - compare_var_to_imm 0x8007, 6 + compare 0x8007, 6 goto_if_eq gUnknown_081A2D96 releaseall end EventScript_1A2EF7:: - compare_var_to_imm 0x8007, 1 + compare 0x8007, 1 goto_if_eq EventScript_1A2CF1 - compare_var_to_imm 0x8007, 2 + compare 0x8007, 2 goto_if_eq EventScript_1A2CF1 - compare_var_to_imm 0x8007, 3 + compare 0x8007, 3 goto_if_eq EventScript_1A2CF1 - compare_var_to_imm 0x8007, 4 + compare 0x8007, 4 goto_if_eq EventScript_1A2CF1 - compare_var_to_imm 0x8007, 5 + compare 0x8007, 5 goto_if_eq EventScript_1A2D49 - compare_var_to_imm 0x8007, 6 + compare 0x8007, 6 goto_if_eq EventScript_1A2DA1 end @@ -3872,10 +3872,10 @@ gUnknown_081A2F8A:: @ 81A2F8A EventScript_1A2F95: special sub_8100A7C - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_1A2FBF addvar 0x8004, 1 - compare_var_to_imm 0x8005, 0 + compare 0x8005, 0 goto_if_eq EventScript_1A2F95 disappear 0x8006 setflag 0x8005 @@ -3910,42 +3910,42 @@ SecretBase_YellowCave2_EventScript_1A2FC0:: @ 81A2FC0 SecretBase_YellowCave3_EventScript_1A2FC0:: @ 81A2FC0 SecretBase_YellowCave4_EventScript_1A2FC0:: @ 81A2FC0 special sub_80BCE90 - compare_var_to_imm 0x8004, 0 + compare 0x8004, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3032 - compare_var_to_imm 0x8004, 1 + compare 0x8004, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A30AE - compare_var_to_imm 0x8004, 2 + compare 0x8004, 2 goto_if_eq SecretBase_RedCave1_EventScript_1A312A - compare_var_to_imm 0x8004, 3 + compare 0x8004, 3 goto_if_eq SecretBase_RedCave1_EventScript_1A31A6 - compare_var_to_imm 0x8004, 4 + compare 0x8004, 4 goto_if_eq SecretBase_RedCave1_EventScript_1A3222 - compare_var_to_imm 0x8004, 5 + compare 0x8004, 5 goto_if_eq SecretBase_RedCave1_EventScript_1A329E - compare_var_to_imm 0x8004, 6 + compare 0x8004, 6 goto_if_eq SecretBase_RedCave1_EventScript_1A331A - compare_var_to_imm 0x8004, 7 + compare 0x8004, 7 goto_if_eq SecretBase_RedCave1_EventScript_1A3396 - compare_var_to_imm 0x8004, 8 + compare 0x8004, 8 goto_if_eq SecretBase_RedCave1_EventScript_1A3412 - compare_var_to_imm 0x8004, 9 + compare 0x8004, 9 goto_if_eq SecretBase_RedCave1_EventScript_1A348E end SecretBase_RedCave1_EventScript_1A3032:: @ 81A3032 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3086 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A30A5 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1AEA, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A308F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A308F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1B83, 4 @@ -3970,17 +3970,17 @@ SecretBase_RedCave1_EventScript_1A30A5:: @ 81A30A5 SecretBase_RedCave1_EventScript_1A30AE:: @ 81A30AE checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3102 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3121 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1E67, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A310B setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A310B hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1F04, 4 @@ -4005,17 +4005,17 @@ SecretBase_RedCave1_EventScript_1A3121:: @ 81A3121 SecretBase_RedCave1_EventScript_1A312A:: @ 81A312A checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A317E - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A319D lock faceplayer msgbox SecretBase_RedCave1_Text_1A218F, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3187 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3187 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2220, 4 @@ -4040,17 +4040,17 @@ SecretBase_RedCave1_EventScript_1A319D:: @ 81A319D SecretBase_RedCave1_EventScript_1A31A6:: @ 81A31A6 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A31FA - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3219 lock faceplayer msgbox SecretBase_RedCave1_Text_1A24E1, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3203 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3203 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A256F, 4 @@ -4075,17 +4075,17 @@ SecretBase_RedCave1_EventScript_1A3219:: @ 81A3219 SecretBase_RedCave1_EventScript_1A3222:: @ 81A3222 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3276 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3295 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2830, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A327F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A327F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A28D7, 4 @@ -4110,17 +4110,17 @@ SecretBase_RedCave1_EventScript_1A3295:: @ 81A3295 SecretBase_RedCave1_EventScript_1A329E:: @ 81A329E checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A32F2 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3311 lock faceplayer msgbox SecretBase_RedCave1_Text_1A1CB2, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A32FB setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A32FB hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1D48, 4 @@ -4145,17 +4145,17 @@ SecretBase_RedCave1_EventScript_1A3311:: @ 81A3311 SecretBase_RedCave1_EventScript_1A331A:: @ 81A331A checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A336E - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A338D lock faceplayer msgbox SecretBase_RedCave1_Text_1A2026, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3377 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3377 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2095, 4 @@ -4180,17 +4180,17 @@ SecretBase_RedCave1_EventScript_1A338D:: @ 81A338D SecretBase_RedCave1_EventScript_1A3396:: @ 81A3396 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A33EA - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3409 lock faceplayer msgbox SecretBase_RedCave1_Text_1A236A, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A33F3 setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A33F3 hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2405, 4 @@ -4215,17 +4215,17 @@ SecretBase_RedCave1_EventScript_1A3409:: @ 81A3409 SecretBase_RedCave1_EventScript_1A3412:: @ 81A3412 checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A3466 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3485 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2663, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A346F setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A346F hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2710, 4 @@ -4250,17 +4250,17 @@ SecretBase_RedCave1_EventScript_1A3485:: @ 81A3485 SecretBase_RedCave1_EventScript_1A348E:: @ 81A348E checkflag 2052 goto_if 0, SecretBase_RedCave1_EventScript_1A34E2 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A3501 lock faceplayer msgbox SecretBase_RedCave1_Text_1A2A13, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A34EB setvar RESULT, 1 special sub_80BCE4C call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A34EB hidebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2AE2, 4 @@ -4381,13 +4381,13 @@ SlateportCity_PokemonFanClub_EventScript_1ADE46:: @ 81ADE46 SlateportCity_PokemonFanClub_EventScript_1ADE4D:: @ 81ADE4D setvar 0x8005, 1 special sub_80BF2C4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADED6 copyvar 0x8009, 0x8006 msgbox SlateportCity_PokemonFanClub_Text_1A8704, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADE84 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEB9 end @@ -4399,9 +4399,9 @@ SlateportCity_PokemonFanClub_EventScript_1ADE84:: @ 81ADE84 call SlateportCity_PokemonFanClub_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEC3 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADEB9 end @@ -4426,24 +4426,24 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADEE0:: @ 81ADEE0 faceplayer setvar 0x8005, 2 special sub_80BF2C4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF96 copyvar 0x8009, 0x8006 checkflag 105 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF25 setflag 105 msgbox SlateportCity_OceanicMuseum_1F_Text_1A927F, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end SlateportCity_OceanicMuseum_1F_EventScript_1ADF25:: @ 81ADF25 msgbox SlateportCity_OceanicMuseum_1F_Text_1A934C, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF44 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end @@ -4455,9 +4455,9 @@ SlateportCity_OceanicMuseum_1F_EventScript_1ADF44:: @ 81ADF44 call SlateportCity_OceanicMuseum_1F_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF83 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_1ADF79 end @@ -4481,17 +4481,17 @@ SlateportCity_PokemonFanClub_EventScript_1ADFA0:: @ 81ADFA0 lock faceplayer specialvar RESULT, sub_80BF544 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADE4D setvar 0x8005, 3 special sub_80BF2C4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0AC copyvar 0x8009, 0x8006 msgbox SlateportCity_PokemonFanClub_Text_1A82F1, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1ADFE9 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 end @@ -4527,14 +4527,14 @@ SlateportCity_PokemonFanClub_EventScript_1AE04A:: @ 81AE04A call SlateportCity_PokemonFanClub_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 msgbox SlateportCity_PokemonFanClub_Text_1A852D, 4 setvar 0x8006, 1 call SlateportCity_PokemonFanClub_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1AE0A2 msgbox SlateportCity_PokemonFanClub_Text_1A85A6, 4 copyvar 0x8007, 0x800a @@ -4562,13 +4562,13 @@ VerdanturfTown_ContestLobby_EventScript_1AE0B6:: @ 81AE0B6 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE17E setvar 0x8005, 6 special sub_80BF2C4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE17E copyvar 0x8009, 0x8006 msgbox FallarborTown_ContestLobby_Text_1A6F7C, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE0F8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D end @@ -4580,9 +4580,9 @@ FallarborTown_ContestLobby_EventScript_1AE0F8:: @ 81AE0F8 call FallarborTown_ContestLobby_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE137 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D end @@ -4601,7 +4601,7 @@ FallarborTown_ContestLobby_EventScript_1AE137:: @ 81AE137 call FallarborTown_ContestLobby_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE12D msgbox FallarborTown_ContestLobby_Text_1A7153, 4 setflag 2 @@ -4618,11 +4618,11 @@ FallarborTown_ContestLobby_EventScript_1AE188:: @ 81AE188 LilycoveCity_ContestLobby_EventScript_1AE188:: @ 81AE188 SlateportCity_ContestLobby_EventScript_1AE188:: @ 81AE188 VerdanturfTown_ContestLobby_EventScript_1AE188:: @ 81AE188 - compare_var_to_imm 0x4086, 2 + compare 0x4086, 2 goto_if 5, FallarborTown_ContestLobby_EventScript_1AE1FE setvar 0x8005, 6 special sub_80BF2C4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1AE1FE switch 0x4088 case 0, FallarborTown_ContestLobby_EventScript_1AE1FE @@ -4659,13 +4659,13 @@ BattleTower_Lobby_EventScript_1AE1FF:: @ 81AE1FF goto_if_eq BattleTower_Lobby_EventScript_1AE2E3 setvar 0x8005, 7 special sub_80BF2C4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE2E3 copyvar 0x8009, 0x8006 msgbox BattleTower_Lobby_Text_1A776D, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE241 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE297 end @@ -4674,9 +4674,9 @@ BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 waittext multichoice 19, 8, 45, 1 copyvar 0x8008, RESULT - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, BattleTower_Lobby_EventScript_1AE2A1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, BattleTower_Lobby_EventScript_1AE2AA msgbox BattleTower_Lobby_Text_1A79EB, 4 setvar 0x8004, 12 @@ -4684,9 +4684,9 @@ BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 call BattleTower_Lobby_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE2B3 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE2D9 end @@ -4704,7 +4704,7 @@ BattleTower_Lobby_EventScript_1AE2AA:: @ 81AE2AA return BattleTower_Lobby_EventScript_1AE2B3:: @ 81AE2B3 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE2D9 msgbox BattleTower_Lobby_Text_1A7A6E, 4 setflag 2 @@ -4724,11 +4724,11 @@ BattleTower_Lobby_EventScript_1AE2E3:: @ 81AE2E3 end BattleTower_Lobby_EventScript_1AE2ED:: @ 81AE2ED - compare_var_to_imm 0x40bc, 0 + compare 0x40bc, 0 goto_if_eq BattleTower_Lobby_EventScript_1AE30F setvar 0x8005, 7 special sub_80BF2C4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1AE30F clearflag 918 return @@ -4790,11 +4790,11 @@ Text_RepelWoreOff: @ 81C33EF MauvilleCity_GameCorner_EventScript_1C407E:: @ 81C407E checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 0 event_96 2 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 goto MauvilleCity_GameCorner_EventScript_1C40DA @@ -4802,11 +4802,11 @@ MauvilleCity_GameCorner_EventScript_1C407E:: @ 81C407E MauvilleCity_GameCorner_EventScript_1C40AC:: @ 81C40AC checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 1 event_96 2 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 goto MauvilleCity_GameCorner_EventScript_1C40DA diff --git a/data/field_move_scripts.inc b/data/field_move_scripts.inc index ac70163aa..7df5ac90f 100644 --- a/data/field_move_scripts.inc +++ b/data/field_move_scripts.inc @@ -3,13 +3,13 @@ S_CuttableTree:: @ 81B0DCC checkflag 2055 goto_if 0, CannotUseCut checkattack MOVE_CUT - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq CannotUseCut setanimation 0, RESULT bufferpartypoke 0, RESULT bufferattack 1, MOVE_CUT msgbox UseCutPromptText, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Cut_ChoseNo msgbox UsedCutRockSmashText, 4 closebutton @@ -61,13 +61,13 @@ S_BreakableRock:: @ 81B0EB7 checkflag 2057 goto_if 0, CannotUseRockSmash checkattack MOVE_ROCK_SMASH - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq CannotUseRockSmash setanimation 0, RESULT bufferpartypoke 0, RESULT bufferattack 1, MOVE_ROCK_SMASH msgbox UseRockSmashPromptText, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq RockSmash_ChoseNo msgbox UsedCutRockSmashText, 4 closebutton @@ -88,10 +88,10 @@ DoRockSmashMovement: @ 81B0F0C waitmovement 0 disappear LAST_TALKED specialvar RESULT, sub_810F5BC - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq DoRockSmashMovement_Done special ScrSpecial_RockSmashWildEncounter - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq DoRockSmashMovement_Done waitstate releaseall @@ -130,11 +130,11 @@ S_PushableBoulder:: @ 81B0FCB checkflag 2089 goto_if_eq AlreadyUsedStrength checkattack 70 - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq CannotUseStrength setanimation 0, RESULT msgbox UseStrengthPromptText, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Strength_ChoseNo closebutton doanimation 40 @@ -191,12 +191,12 @@ AlreadyUsedStrengthText: @ 81B1127 S_UseWaterfall:: @ 81B115A lockall checkattack MOVE_WATERFALL - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq Waterfall_NoMonKnows bufferpartypoke 0, RESULT setanimation 0, RESULT msgbox UseWaterfallPromptText, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Waterfall_Done msgbox UsedWaterfallText, 4 doanimation 43 @@ -224,13 +224,13 @@ UsedWaterfallText: @ 81B120D UseDiveScript:: @ 81B1220 lockall checkattack MOVE_DIVE - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq CannotUseDive bufferpartypoke 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UseDivePromptText, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Dive_Done msgbox UsedDiveText, 4 doanimation 44 @@ -247,13 +247,13 @@ Dive_Done: @ 81B1267 S_UseDiveUnderwater:: @ 81B1269 lockall checkattack MOVE_DIVE - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq UnderwaterCannotUseDive bufferpartypoke 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UnderwaterUseDivePromptText, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq UnderwaterDive_Done msgbox UsedDiveText, 4 doanimation 44 diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc index 573144019..0ed7749bc 100644 --- a/data/scripts/berry_tree.inc +++ b/data/scripts/berry_tree.inc @@ -22,7 +22,7 @@ Route102_EventScript_1A153D:: @ 81A153D lock faceplayer specialvar RESULT, PlayerHasBerries - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route102_EventScript_1A1558 message Route102_Text_1A16B6 waittext @@ -32,9 +32,9 @@ Route102_EventScript_1A153D:: @ 81A153D Route102_EventScript_1A1558:: @ 81A1558 msgbox Route102_Text_1A16CD, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route102_EventScript_1A1577 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route102_EventScript_1A1593 end @@ -43,7 +43,7 @@ Route102_EventScript_1A1577:: @ 81A1577 closebutton special sub_80B4EE4 waitstate - compare_var_to_imm ITEM_ID, 0 + compare ITEM_ID, 0 goto_if_eq Route102_EventScript_1A1593 removeitem ITEM_ID, 1 call Route102_EventScript_1A16A9 @@ -82,9 +82,9 @@ Route102_EventScript_1A15BC:: @ 81A15BC goto Route102_EventScript_1A165F Route102_EventScript_1A15CE:: @ 81A15CE - compare_var_to_imm 0x8005, 0 + compare 0x8005, 0 goto_if_eq Route102_EventScript_1A15F2 - compare_var_to_imm 0x8005, 4 + compare 0x8005, 4 goto_if_eq Route102_EventScript_1A15EB buffertext 1, Route102_Text_1A17B7 return @@ -102,14 +102,14 @@ Route102_EventScript_1A15F9:: @ 81A15F9 lock faceplayer msgbox Route102_Text_1A17C0, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route102_EventScript_1A161D - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route102_EventScript_1A164B Route102_EventScript_1A161D:: @ 81A161D special FieldObjectInteractionPickBerryTree - compare_var_to_imm 0x8004, 0 + compare 0x8004, 0 goto_if_eq Route102_EventScript_1A1642 special FieldObjectInteractionRemoveBerryTree message Route102_Text_1A17FD @@ -146,12 +146,12 @@ gUnknown_081A1654:: @ 81A1654 Route102_EventScript_1A165F:: @ 81A165F checkitem ITEM_WAILMER_PAIL, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route102_EventScript_1A168D msgbox Route102_Text_1A18E6, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route102_EventScript_1A1693 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route102_EventScript_1A168D Route102_EventScript_1A168D:: @ 81A168D diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index 605846334..b25bc12bd 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -39,15 +39,15 @@ RustboroCity_PokemonCenter_2F_MapScript1_1A3D32:: @ 81A3D32 SlateportCity_PokemonCenter_2F_MapScript1_1A3D32:: @ 81A3D32 SootopolisCity_PokemonCenter_2F_MapScript1_1A3D32:: @ 81A3D32 VerdanturfTown_PokemonCenter_2F_MapScript1_1A3D32:: @ 81A3D32 - compare_var_to_imm 0x4087, 1 + compare 0x4087, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D6A - compare_var_to_imm 0x4087, 2 + compare 0x4087, 2 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D6A - compare_var_to_imm 0x4087, 5 + compare 0x4087, 5 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D6A - compare_var_to_imm 0x4087, 3 + compare 0x4087, 3 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D74 - compare_var_to_imm 0x4087, 4 + compare 0x4087, 4 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3D7E end @@ -90,7 +90,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3DB2:: @ 81A3DB2 setvar 0x4087, 0 applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A4358 waitmovement 0 - compare_var_to_imm 0x8007, 0 + compare 0x8007, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3DD9 applymovement 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4354 waitmovement 0 @@ -101,7 +101,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3DD9:: @ 81A3DD9 OldaleTown_PokemonCenter_2F_EventScript_1A3DDA:: @ 81A3DDA special CloseLink setvar 0x4087, 0 - compare_var_to_imm 0x8007, 0 + compare 0x8007, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3E0C applymovement 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4356 waitmovement 0 @@ -128,7 +128,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3E17:: @ 81A3E17 OldaleTown_PokemonCenter_2F_EventScript_1A3E30:: @ 81A3E30 special CloseLink setvar 0x4087, 0 - compare_var_to_imm 0x8007, 0 + compare 0x8007, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3E0C applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A4361 waitmovement 0 @@ -192,26 +192,26 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3EBC:: @ 81A3EBC OldaleTown_PokemonCenter_2F_EventScript_1A3EF2:: @ 81A3EF2 call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 call OldaleTown_PokemonCenter_2F_EventScript_1A3FEF - compare_var_to_imm 0x8004, 0 + compare 0x8004, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 message OldaleTown_PokemonCenter_2F_Text_1A490C waittext special sub_808347C waitstate - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3F5E - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4301 - compare_var_to_imm RESULT, 3 + compare RESULT, 3 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A430D - compare_var_to_imm RESULT, 4 + compare RESULT, 4 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4068 - compare_var_to_imm RESULT, 5 + compare RESULT, 5 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A42F5 OldaleTown_PokemonCenter_2F_EventScript_1A3F5E:: @ 81A3F5E @@ -237,7 +237,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3F5E:: @ 81A3F5E setdoorclosed 5, 1 doorchange release - compare_var_to_imm 0x8004, 5 + compare 0x8004, 5 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3FCD special SetCableClubWarp warp SingleBattleColosseum, 255, 6, 8 @@ -281,7 +281,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A403C:: @ 81A403C OldaleTown_PokemonCenter_2F_EventScript_1A4042:: @ 81A4042 special CheckForAlivePartyMons - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if 5, OldaleTown_PokemonCenter_2F_EventScript_1A4056 setvar 0x8004, 2 return @@ -352,33 +352,33 @@ VerdanturfTown_PokemonCenter_2F_EventScript_1A40CC:: @ 81A40CC lock faceplayer msgbox OldaleTown_PokemonCenter_2F_Text_1A457E, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A40FA OldaleTown_PokemonCenter_2F_EventScript_1A40FA:: @ 81A40FA call OldaleTown_PokemonCenter_2F_EventScript_1A41BB - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 message OldaleTown_PokemonCenter_2F_Text_1A490C waittext special sub_80834E4 waitstate - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4166 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4301 - compare_var_to_imm RESULT, 3 + compare RESULT, 3 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A430D - compare_var_to_imm RESULT, 4 + compare RESULT, 4 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A432D - compare_var_to_imm RESULT, 5 + compare RESULT, 5 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A42F5 OldaleTown_PokemonCenter_2F_EventScript_1A4166:: @ 81A4166 @@ -406,10 +406,10 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4166:: @ 81A4166 OldaleTown_PokemonCenter_2F_EventScript_1A41BB:: @ 81A41BB specialvar RESULT, CalculatePlayerPartyCount - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if 0, OldaleTown_PokemonCenter_2F_EventScript_1A41E1 specialvar RESULT, GetNameOfEnigmaBerryInPlayerParty - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A41EE setvar RESULT, 1 return @@ -449,14 +449,14 @@ VerdanturfTown_PokemonCenter_2F_EventScript_1A41FB:: @ 81A41FB lock faceplayer msgbox OldaleTown_PokemonCenter_2F_Text_1A45FE, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4229 OldaleTown_PokemonCenter_2F_EventScript_1A4229:: @ 81A4229 call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 message OldaleTown_PokemonCenter_2F_Text_1A490C waittext @@ -464,19 +464,19 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4229:: @ 81A4229 waitstate special sub_80835D8 waitstate - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4294 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4301 - compare_var_to_imm RESULT, 3 + compare RESULT, 3 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A430D - compare_var_to_imm RESULT, 4 + compare RESULT, 4 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A432D - compare_var_to_imm RESULT, 5 + compare RESULT, 5 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A42F5 - compare_var_to_imm RESULT, 7 + compare RESULT, 7 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A42E9 OldaleTown_PokemonCenter_2F_EventScript_1A4294:: @ 81A4294 @@ -619,7 +619,7 @@ DoubleBattleColosseum_EventScript_1A4383:: @ 81A4383 fadescreen 1 special sub_80C5568 waitstate - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq DoubleBattleColosseum_EventScript_1A43EF setvar 0x8005, 0 special sub_8083B90 @@ -630,7 +630,7 @@ DoubleBattleColosseum_EventScript_1A439E:: @ 81A439E fadescreen 1 special sub_80C5568 waitstate - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq DoubleBattleColosseum_EventScript_1A43EF setvar 0x8005, 1 special sub_8083B90 @@ -641,7 +641,7 @@ DoubleBattleColosseum_EventScript_1A43B9:: @ 81A43B9 fadescreen 1 special sub_80C5568 waitstate - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq DoubleBattleColosseum_EventScript_1A43EF setvar 0x8005, 2 special sub_8083B90 @@ -652,7 +652,7 @@ DoubleBattleColosseum_EventScript_1A43D4:: @ 81A43D4 fadescreen 1 special sub_80C5568 waitstate - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq DoubleBattleColosseum_EventScript_1A43EF setvar 0x8005, 3 special sub_8083B90 @@ -690,7 +690,7 @@ RecordCorner_EventScript_1A4418:: @ 81A4418 setvar 0x8005, 0 special sub_80B929C waitstate - compare_var_to_imm 0x4001, 0 + compare 0x4001, 0 goto_if 5, RecordCorner_EventScript_1A446C end @@ -698,7 +698,7 @@ RecordCorner_EventScript_1A442D:: @ 81A442D setvar 0x8005, 1 special sub_80B929C waitstate - compare_var_to_imm 0x4001, 0 + compare 0x4001, 0 goto_if 5, RecordCorner_EventScript_1A446C end @@ -706,7 +706,7 @@ RecordCorner_EventScript_1A4442:: @ 81A4442 setvar 0x8005, 2 special sub_80B929C waitstate - compare_var_to_imm 0x4001, 0 + compare 0x4001, 0 goto_if 5, RecordCorner_EventScript_1A446C end @@ -714,7 +714,7 @@ RecordCorner_EventScript_1A4457:: @ 81A4457 setvar 0x8005, 3 special sub_80B929C waitstate - compare_var_to_imm 0x4001, 0 + compare 0x4001, 0 goto_if 5, RecordCorner_EventScript_1A446C end @@ -770,7 +770,7 @@ TradeCenter_EventScript_1A44AD:: @ 81A44AD end RecordCorner_EventScript_1A44BC:: @ 81A44BC - compare_var_to_imm 0x4000, 0 + compare 0x4000, 0 goto_if 5, RecordCorner_EventScript_1A44D6 special sub_8064EAC message RecordCorner_Text_1A4DD7 @@ -791,7 +791,7 @@ RecordCorner_EventScript_1A44D6:: @ 81A44D6 TradeRoom_PromptToCancelLink:: @ 81A44E5 msgbox TradeRoom_WillLinkBeTerminated, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq TradeRoom_TerminateLink hidebox 0, 0, 29, 19 end diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index 836fa10dd..acf5597ea 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -5,16 +5,16 @@ VerdanturfTown_ContestLobby_EventScript_1A4E92:: @ 81A4E92 lock faceplayer checkitem ITEM_CONTEST_PASS, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, FallarborTown_ContestLobby_EventScript_1A4EDD - compare_var_to_imm 0x408a, 0 + compare 0x408a, 0 goto_if 5, FallarborTown_ContestLobby_EventScript_1A4F4E checkflag 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1A4F8F bufferstd 0, 0x800b msgbox FallarborTown_ContestLobby_Text_1A5DFC, 4 checkitem ITEM_CONTEST_PASS, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1A4EE1 setflag 1 goto FallarborTown_ContestLobby_EventScript_1A4F8F @@ -25,7 +25,7 @@ FallarborTown_ContestLobby_EventScript_1A4EDD:: @ 81A4EDD return FallarborTown_ContestLobby_EventScript_1A4EE1:: @ 81A4EE1 - compare_var_to_imm CONTEST_RANK, 0 + compare CONTEST_RANK, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1A4EF6 msgbox FallarborTown_ContestLobby_Text_1A6340, 4 releaseall @@ -33,7 +33,7 @@ FallarborTown_ContestLobby_EventScript_1A4EE1:: @ 81A4EE1 FallarborTown_ContestLobby_EventScript_1A4EF6:: @ 81A4EF6 msgbox FallarborTown_ContestLobby_Text_1A64F4, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1A4F13 msgbox FallarborTown_ContestLobby_Text_1A65EA, 4 releaseall @@ -63,7 +63,7 @@ FallarborTown_ContestLobby_EventScript_1A4F4E:: @ 81A4F4E FallarborTown_ContestLobby_EventScript_1A4F67:: @ 81A4F67 giveitem ITEM_LUXURY_BALL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1A4F86 setvar 0x408a, 0 closebutton @@ -120,18 +120,18 @@ FallarborTown_ContestLobby_EventScript_1A503E:: @ 81A503E FallarborTown_ContestLobby_EventScript_1A5048:: @ 81A5048 msgbox FallarborTown_ContestLobby_Text_1A6319, 4 choosecontestpkmn - compare_var_to_imm 0x8004, 255 + compare 0x8004, 255 goto_if_eq FallarborTown_ContestLobby_EventScript_1A5097 special sub_80C43F4 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1A50C8 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1A50D7 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq FallarborTown_ContestLobby_EventScript_1A50FB - compare_var_to_imm RESULT, 3 + compare RESULT, 3 goto_if_eq FallarborTown_ContestLobby_EventScript_1A511F - compare_var_to_imm RESULT, 4 + compare RESULT, 4 goto_if_eq FallarborTown_ContestLobby_EventScript_1A512E end @@ -270,7 +270,7 @@ LinkContestRoom1_EventScript_1A5245:: @ 81A5245 return LinkContestRoom1_EventScript_1A525F:: @ 81A525F - compare_var_to_imm 0x4088, 5 + compare 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A5273 msgbox LinkContestRoom1_Text_1A68F0, 3 return @@ -287,20 +287,20 @@ LinkContestRoom1_EventScript_1A527A:: @ 81A527A call LinkContestRoom1_EventScript_1A53E5 call LinkContestRoom1_EventScript_1A5880 addvar 0x8006, 1 - compare_var_to_imm 0x8006, 4 + compare 0x8006, 4 goto_if 5, LinkContestRoom1_EventScript_1A527A call LinkContestRoom1_EventScript_1A5377 setvar 0x4001, 6 return LinkContestRoom1_EventScript_1A52AE:: @ 81A52AE - compare_var_to_imm 0x8006, 0 + compare 0x8006, 0 goto_if_eq LinkContestRoom1_EventScript_1A52DB - compare_var_to_imm 0x8006, 1 + compare 0x8006, 1 goto_if_eq LinkContestRoom1_EventScript_1A52ED - compare_var_to_imm 0x8006, 2 + compare 0x8006, 2 goto_if_eq LinkContestRoom1_EventScript_1A52FF - compare_var_to_imm 0x8006, 3 + compare 0x8006, 3 goto_if_eq LinkContestRoom1_EventScript_1A5311 return @@ -357,7 +357,7 @@ LinkContestRoom1_EventScript_1A5323:: @ 81A5323 return LinkContestRoom1_EventScript_1A535E:: @ 81A535E - compare_var_to_imm 0x4088, 5 + compare 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A5370 message LinkContestRoom1_Text_1A6A04 waittext @@ -385,7 +385,7 @@ LinkContestRoom1_EventScript_1A5377:: @ 81A5377 return LinkContestRoom1_EventScript_1A53B3:: @ 81A53B3 - compare_var_to_imm 0x4088, 5 + compare 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A53C7 msgbox LinkContestRoom1_Text_1A6A1F, 4 return @@ -396,7 +396,7 @@ LinkContestRoom1_EventScript_1A53C7:: @ 81A53C7 return LinkContestRoom1_EventScript_1A53CE:: @ 81A53CE - compare_var_to_imm 0x4088, 5 + compare 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A53DF message LinkContestRoom1_Text_1A6AE1 return @@ -431,15 +431,15 @@ LinkContestRoom1_EventScript_1A53E5:: @ 81A53E5 LinkContestRoom1_EventScript_1A5455:: @ 81A5455 special sub_80C47A0 - compare_var_to_imm 0x4088, 1 + compare 0x4088, 1 call_if 1, LinkContestRoom1_EventScript_1A555A - compare_var_to_imm 0x4088, 2 + compare 0x4088, 2 call_if 1, LinkContestRoom1_EventScript_1A55B8 - compare_var_to_imm 0x4088, 3 + compare 0x4088, 3 call_if 1, LinkContestRoom1_EventScript_1A5616 - compare_var_to_imm 0x4088, 4 + compare 0x4088, 4 call_if 1, LinkContestRoom1_EventScript_1A5674 - compare_var_to_imm 0x4088, 5 + compare 0x4088, 5 call_if 1, LinkContestRoom1_EventScript_1A56D2 setvar 0x4001, 9 setvar 0x4002, 9 @@ -449,7 +449,7 @@ LinkContestRoom1_EventScript_1A5455:: @ 81A5455 setvar 0x4006, 9 setvar 0x4007, 9 setvar 0x4008, 9 - compare_var_to_imm 0x4000, 0 + compare 0x4000, 0 call_if 2, LinkContestRoom1_EventScript_1A54EB setvar 0x4001, 0 setvar 0x4002, 0 @@ -464,123 +464,123 @@ LinkContestRoom1_EventScript_1A5455:: @ 81A5455 LinkContestRoom1_EventScript_1A54EB:: @ 81A54EB setvar RESULT, 8 special ScriptRandom - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LinkContestRoom1_EventScript_1A5760 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LinkContestRoom1_EventScript_1A5784 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 call_if 1, LinkContestRoom1_EventScript_1A57A8 - compare_var_to_imm RESULT, 3 + compare RESULT, 3 call_if 1, LinkContestRoom1_EventScript_1A57CC - compare_var_to_imm RESULT, 4 + compare RESULT, 4 call_if 1, LinkContestRoom1_EventScript_1A57F0 - compare_var_to_imm RESULT, 5 + compare RESULT, 5 call_if 1, LinkContestRoom1_EventScript_1A5814 - compare_var_to_imm RESULT, 6 + compare RESULT, 6 call_if 1, LinkContestRoom1_EventScript_1A5838 - compare_var_to_imm RESULT, 7 + compare RESULT, 7 call_if 1, LinkContestRoom1_EventScript_1A585C - compare_var_to_imm 0x4000, 0 + compare 0x4000, 0 goto_if 2, LinkContestRoom1_EventScript_1A54EB waitmovement 0 return LinkContestRoom1_EventScript_1A555A:: @ 81A555A - compare_var_to_imm 0x8004, 80 + compare 0x8004, 80 goto_if 2, LinkContestRoom1_EventScript_1A575A - compare_var_to_imm 0x8004, 70 + compare 0x8004, 70 goto_if 2, LinkContestRoom1_EventScript_1A5754 - compare_var_to_imm 0x8004, 60 + compare 0x8004, 60 goto_if 2, LinkContestRoom1_EventScript_1A574E - compare_var_to_imm 0x8004, 50 + compare 0x8004, 50 goto_if 2, LinkContestRoom1_EventScript_1A5748 - compare_var_to_imm 0x8004, 40 + compare 0x8004, 40 goto_if 2, LinkContestRoom1_EventScript_1A5742 - compare_var_to_imm 0x8004, 30 + compare 0x8004, 30 goto_if 2, LinkContestRoom1_EventScript_1A573C - compare_var_to_imm 0x8004, 20 + compare 0x8004, 20 goto_if 2, LinkContestRoom1_EventScript_1A5736 - compare_var_to_imm 0x8004, 10 + compare 0x8004, 10 goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return LinkContestRoom1_EventScript_1A55B8:: @ 81A55B8 - compare_var_to_imm 0x8004, 230 + compare 0x8004, 230 goto_if 2, LinkContestRoom1_EventScript_1A575A - compare_var_to_imm 0x8004, 210 + compare 0x8004, 210 goto_if 2, LinkContestRoom1_EventScript_1A5754 - compare_var_to_imm 0x8004, 190 + compare 0x8004, 190 goto_if 2, LinkContestRoom1_EventScript_1A574E - compare_var_to_imm 0x8004, 170 + compare 0x8004, 170 goto_if 2, LinkContestRoom1_EventScript_1A5748 - compare_var_to_imm 0x8004, 150 + compare 0x8004, 150 goto_if 2, LinkContestRoom1_EventScript_1A5742 - compare_var_to_imm 0x8004, 130 + compare 0x8004, 130 goto_if 2, LinkContestRoom1_EventScript_1A573C - compare_var_to_imm 0x8004, 110 + compare 0x8004, 110 goto_if 2, LinkContestRoom1_EventScript_1A5736 - compare_var_to_imm 0x8004, 90 + compare 0x8004, 90 goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return LinkContestRoom1_EventScript_1A5616:: @ 81A5616 - compare_var_to_imm 0x8004, 380 + compare 0x8004, 380 goto_if 2, LinkContestRoom1_EventScript_1A575A - compare_var_to_imm 0x8004, 350 + compare 0x8004, 350 goto_if 2, LinkContestRoom1_EventScript_1A5754 - compare_var_to_imm 0x8004, 320 + compare 0x8004, 320 goto_if 2, LinkContestRoom1_EventScript_1A574E - compare_var_to_imm 0x8004, 290 + compare 0x8004, 290 goto_if 2, LinkContestRoom1_EventScript_1A5748 - compare_var_to_imm 0x8004, 260 + compare 0x8004, 260 goto_if 2, LinkContestRoom1_EventScript_1A5742 - compare_var_to_imm 0x8004, 230 + compare 0x8004, 230 goto_if 2, LinkContestRoom1_EventScript_1A573C - compare_var_to_imm 0x8004, 200 + compare 0x8004, 200 goto_if 2, LinkContestRoom1_EventScript_1A5736 - compare_var_to_imm 0x8004, 170 + compare 0x8004, 170 goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return LinkContestRoom1_EventScript_1A5674:: @ 81A5674 - compare_var_to_imm 0x8004, 600 + compare 0x8004, 600 goto_if 2, LinkContestRoom1_EventScript_1A575A - compare_var_to_imm 0x8004, 560 + compare 0x8004, 560 goto_if 2, LinkContestRoom1_EventScript_1A5754 - compare_var_to_imm 0x8004, 520 + compare 0x8004, 520 goto_if 2, LinkContestRoom1_EventScript_1A574E - compare_var_to_imm 0x8004, 480 + compare 0x8004, 480 goto_if 2, LinkContestRoom1_EventScript_1A5748 - compare_var_to_imm 0x8004, 440 + compare 0x8004, 440 goto_if 2, LinkContestRoom1_EventScript_1A5742 - compare_var_to_imm 0x8004, 400 + compare 0x8004, 400 goto_if 2, LinkContestRoom1_EventScript_1A573C - compare_var_to_imm 0x8004, 360 + compare 0x8004, 360 goto_if 2, LinkContestRoom1_EventScript_1A5736 - compare_var_to_imm 0x8004, 320 + compare 0x8004, 320 goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return LinkContestRoom1_EventScript_1A56D2:: @ 81A56D2 - compare_var_to_imm 0x8004, 600 + compare 0x8004, 600 goto_if 2, LinkContestRoom1_EventScript_1A575A - compare_var_to_imm 0x8004, 550 + compare 0x8004, 550 goto_if 2, LinkContestRoom1_EventScript_1A5754 - compare_var_to_imm 0x8004, 500 + compare 0x8004, 500 goto_if 2, LinkContestRoom1_EventScript_1A574E - compare_var_to_imm 0x8004, 450 + compare 0x8004, 450 goto_if 2, LinkContestRoom1_EventScript_1A5748 - compare_var_to_imm 0x8004, 400 + compare 0x8004, 400 goto_if 2, LinkContestRoom1_EventScript_1A5742 - compare_var_to_imm 0x8004, 300 + compare 0x8004, 300 goto_if 2, LinkContestRoom1_EventScript_1A573C - compare_var_to_imm 0x8004, 200 + compare 0x8004, 200 goto_if 2, LinkContestRoom1_EventScript_1A5736 - compare_var_to_imm 0x8004, 100 + compare 0x8004, 100 goto_if 2, LinkContestRoom1_EventScript_1A5730 setvar 0x4000, 0 return @@ -618,7 +618,7 @@ LinkContestRoom1_EventScript_1A575A:: @ 81A575A return LinkContestRoom1_EventScript_1A5760:: @ 81A5760 - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 goto_if_eq LinkContestRoom1_EventScript_1A5783 applymovement 6, LinkContestRoom1_Movement_1A5D8D playse 21 @@ -631,7 +631,7 @@ LinkContestRoom1_EventScript_1A5783:: @ 81A5783 return LinkContestRoom1_EventScript_1A5784:: @ 81A5784 - compare_var_to_imm 0x4002, 1 + compare 0x4002, 1 goto_if_eq LinkContestRoom1_EventScript_1A57A7 applymovement 12, LinkContestRoom1_Movement_1A5D8D playse 21 @@ -644,7 +644,7 @@ LinkContestRoom1_EventScript_1A57A7:: @ 81A57A7 return LinkContestRoom1_EventScript_1A57A8:: @ 81A57A8 - compare_var_to_imm 0x4003, 1 + compare 0x4003, 1 goto_if_eq LinkContestRoom1_EventScript_1A57CB applymovement 7, LinkContestRoom1_Movement_1A5D8D playse 21 @@ -657,7 +657,7 @@ LinkContestRoom1_EventScript_1A57CB:: @ 81A57CB return LinkContestRoom1_EventScript_1A57CC:: @ 81A57CC - compare_var_to_imm 0x4004, 1 + compare 0x4004, 1 goto_if_eq LinkContestRoom1_EventScript_1A57EF applymovement 8, LinkContestRoom1_Movement_1A5D8D playse 21 @@ -670,7 +670,7 @@ LinkContestRoom1_EventScript_1A57EF:: @ 81A57EF return LinkContestRoom1_EventScript_1A57F0:: @ 81A57F0 - compare_var_to_imm 0x4005, 1 + compare 0x4005, 1 goto_if_eq LinkContestRoom1_EventScript_1A5813 applymovement 9, LinkContestRoom1_Movement_1A5D8D playse 21 @@ -683,7 +683,7 @@ LinkContestRoom1_EventScript_1A5813:: @ 81A5813 return LinkContestRoom1_EventScript_1A5814:: @ 81A5814 - compare_var_to_imm 0x4006, 1 + compare 0x4006, 1 goto_if_eq LinkContestRoom1_EventScript_1A5837 applymovement 10, LinkContestRoom1_Movement_1A5D8D playse 21 @@ -696,7 +696,7 @@ LinkContestRoom1_EventScript_1A5837:: @ 81A5837 return LinkContestRoom1_EventScript_1A5838:: @ 81A5838 - compare_var_to_imm 0x4007, 1 + compare 0x4007, 1 goto_if_eq LinkContestRoom1_EventScript_1A585B applymovement 11, LinkContestRoom1_Movement_1A5D8D playse 21 @@ -709,7 +709,7 @@ LinkContestRoom1_EventScript_1A585B:: @ 81A585B return LinkContestRoom1_EventScript_1A585C:: @ 81A585C - compare_var_to_imm 0x4008, 1 + compare 0x4008, 1 goto_if_eq LinkContestRoom1_EventScript_1A587F applymovement 15, LinkContestRoom1_Movement_1A5D8D playse 21 @@ -782,7 +782,7 @@ LinkContestRoom1_EventScript_1A58EE:: @ 81A58EE return LinkContestRoom1_EventScript_1A5930:: @ 81A5930 - compare_var_to_imm 0x4088, 5 + compare 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A5944 msgbox LinkContestRoom1_Text_1A6AF5, 3 return @@ -809,7 +809,7 @@ LinkContestRoom1_EventScript_1A594A:: @ 81A594A return LinkContestRoom1_EventScript_1A5984:: @ 81A5984 - compare_var_to_imm 0x4088, 5 + compare 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A5998 msgbox LinkContestRoom1_Text_1A6C06, 4 return @@ -821,7 +821,7 @@ LinkContestRoom1_EventScript_1A5998:: @ 81A5998 return LinkContestRoom1_EventScript_1A59A2:: @ 81A59A2 - compare_var_to_imm 0x4088, 5 + compare 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A59B6 msgbox LinkContestRoom1_Text_1A6C21, 4 return @@ -833,7 +833,7 @@ LinkContestRoom1_EventScript_1A59B6:: @ 81A59B6 return LinkContestRoom1_EventScript_1A59C0:: @ 81A59C0 - compare_var_to_imm 0x4088, 5 + compare 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A59D4 msgbox LinkContestRoom1_Text_1A6C9D, 4 return @@ -845,7 +845,7 @@ LinkContestRoom1_EventScript_1A59D4:: @ 81A59D4 return LinkContestRoom1_EventScript_1A59DE:: @ 81A59DE - compare_var_to_imm 0x4088, 5 + compare 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A59F2 msgbox LinkContestRoom1_Text_1A6D16, 4 return @@ -895,7 +895,7 @@ LinkContestRoom1_EventScript_1A5A49:: @ 81A5A49 return LinkContestRoom1_EventScript_1A5A75:: @ 81A5A75 - compare_var_to_imm 0x4088, 5 + compare 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A5A89 msgbox LinkContestRoom1_Text_1A6D3C, 4 return @@ -908,7 +908,7 @@ LinkContestRoom1_EventScript_1A5A89:: @ 81A5A89 LinkContestRoom1_EventScript_1A5A90:: @ 81A5A90 addvar 0x4001, 1 lockall - compare_var_to_imm 0x4088, 1 + compare 0x4088, 1 call_if 2, LinkContestRoom1_EventScript_1A5AE4 applymovement 9, LinkContestRoom1_Movement_1A5DB7 applymovement 12, LinkContestRoom1_Movement_1A5DBB @@ -918,7 +918,7 @@ LinkContestRoom1_EventScript_1A5A90:: @ 81A5A90 applymovement 11, LinkContestRoom1_Movement_1A5DBB applymovement 6, LinkContestRoom1_Movement_1A5DB3 applymovement 8, LinkContestRoom1_Movement_1A5DAF - compare_var_to_imm 0x4001, 4 + compare 0x4001, 4 goto_if 5, LinkContestRoom1_EventScript_1A5A90 delay 30 return @@ -993,7 +993,7 @@ LinkContestRoom1_EventScript_1A5AE4:: @ 81A5AE4 return LinkContestRoom1_EventScript_1A5BAB:: @ 81A5BAB - compare_var_to_imm 0x4088, 5 + compare 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A5C4C call LinkContestRoom1_EventScript_1A5C12 checkflag 2 @@ -1007,7 +1007,7 @@ LinkContestRoom1_EventScript_1A5BAB:: @ 81A5BAB call LinkContestRoom1_EventScript_1A5A90 delay 30 special sub_80C4CF8 - compare_var_to_imm 0x8004, 1 + compare 0x8004, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C46 return @@ -1016,24 +1016,24 @@ LinkContestRoom1_EventScript_1A5BF6:: @ 81A5BF6 msgbox LinkContestRoom1_Text_1A6DF1, 3 delay 90 special sub_80C4CF8 - compare_var_to_imm 0x8004, 1 + compare 0x8004, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C46 return LinkContestRoom1_EventScript_1A5C12:: @ 81A5C12 specialvar RESULT, sub_80C4440 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C23 return LinkContestRoom1_EventScript_1A5C23:: @ 81A5C23 special sub_80C47C0 - compare_var_to_imm 0x8005, 3 + compare 0x8005, 3 goto_if_eq LinkContestRoom1_EventScript_1A5C32 return LinkContestRoom1_EventScript_1A5C32:: @ 81A5C32 - compare_var_to_imm CONTEST_RANK, 3 + compare CONTEST_RANK, 3 goto_if_eq LinkContestRoom1_EventScript_1A5C41 setflag 2 return @@ -1053,7 +1053,7 @@ LinkContestRoom1_EventScript_1A5C4C:: @ 81A5C4C delay 60 call LinkContestRoom1_EventScript_1A5C6A special sub_80C4CF8 - compare_var_to_imm 0x8004, 1 + compare 0x8004, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C64 closebutton return @@ -1065,7 +1065,7 @@ LinkContestRoom1_EventScript_1A5C64:: @ 81A5C64 LinkContestRoom1_EventScript_1A5C6A:: @ 81A5C6A special sub_80C496C special sub_80C47C0 - compare_var_to_var 0x8004, 0x8005 + compare 0x8004, 0x8005 goto_if_eq LinkContestRoom1_EventScript_1A5C7C return @@ -1111,19 +1111,19 @@ LinkContestRoom1_EventScript_1A5CD8:: @ 81A5CD8 LinkContestRoom1_EventScript_1A5CE5:: @ 81A5CE5 special sub_80C47C0 - compare_var_to_imm 0x8005, 3 + compare 0x8005, 3 goto_if_eq LinkContestRoom1_EventScript_1A5CFC msgbox LinkContestRoom1_Text_1A6DF1, 3 return LinkContestRoom1_EventScript_1A5CFC:: @ 81A5CFC - compare_var_to_imm 0x4088, 2 + compare 0x4088, 2 call_if 1, LinkContestRoom1_EventScript_1A5C42 inccounter GAME_STAT_WON_CONTEST specialvar RESULT, sub_80C4440 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LinkContestRoom1_EventScript_1A5D5B - compare_var_to_imm CONTEST_RANK, 3 + compare CONTEST_RANK, 3 goto_if_eq LinkContestRoom1_EventScript_1A5D3B msgbox LinkContestRoom1_Text_1A6DF1, 3 return @@ -1135,7 +1135,7 @@ LinkContestRoom1_EventScript_1A5D2D:: @ 81A5D2D LinkContestRoom1_EventScript_1A5D3B:: @ 81A5D3B giveitem ITEM_LUXURY_BALL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LinkContestRoom1_EventScript_1A5D2D msgbox LinkContestRoom1_Text_1A6DF1, 3 return diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc index ed515d15b..62a2d6224 100644 --- a/data/scripts/day_care.inc +++ b/data/scripts/day_care.inc @@ -3,11 +3,11 @@ Route117_EventScript_1B222D:: @ 81B222D faceplayer special sp0B5_daycare specialvar RESULT, sp0B6_daycare - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_EventScript_1B2262 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq Route117_EventScript_1B22E7 - compare_var_to_imm RESULT, 3 + compare RESULT, 3 goto_if_eq Route117_EventScript_1B22FE msgbox Route117_Text_1B25CB, 4 release @@ -15,10 +15,10 @@ Route117_EventScript_1B222D:: @ 81B222D Route117_EventScript_1B2262:: @ 81B2262 msgbox Route117_Text_1B2659, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_EventScript_1B2298 msgbox Route117_Text_1B28C4, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_EventScript_1B2298 msgbox Route117_Text_1B2745, 4 clearflag 134 @@ -28,7 +28,7 @@ Route117_EventScript_1B2262:: @ 81B2262 Route117_EventScript_1B2298:: @ 81B2298 specialvar RESULT, CalculatePlayerPartyCount - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if 5, Route117_EventScript_1B22B2 msgbox Route117_Text_1B2766, 4 release @@ -48,7 +48,7 @@ Route117_EventScript_1B22B2:: @ 81B22B2 Route117_EventScript_1B22CD:: @ 81B22CD specialvar RESULT, sub_8042B4C - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, Route117_EventScript_1B22DE return @@ -82,14 +82,14 @@ Route117_PokemonDayCare_EventScript_1B2327:: @ 81B2327 lock faceplayer specialvar RESULT, sp0B6_daycare - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B2407 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B242B - compare_var_to_imm RESULT, 3 + compare RESULT, 3 goto_if_eq Route117_PokemonDayCare_EventScript_1B2558 msgbox Route117_PokemonDayCare_Text_1B28F2, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B236C msgbox Route117_PokemonDayCare_Text_1B2A14, 4 release @@ -97,16 +97,16 @@ Route117_PokemonDayCare_EventScript_1B2327:: @ 81B2327 Route117_PokemonDayCare_EventScript_1B236C:: @ 81B236C specialvar RESULT, sub_8095B6C - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B23F3 msgbox Route117_PokemonDayCare_Text_1B2947, 4 fadescreen 1 special ChooseSendDaycareMon waitstate - compare_var_to_imm 0x8004, 255 + compare 0x8004, 255 goto_if_eq Route117_PokemonDayCare_EventScript_1B23D0 specialvar RESULT, sub_8095C10 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route117_PokemonDayCare_EventScript_1B23FD specialvar 0x8005, sub_8042328 waitse @@ -116,7 +116,7 @@ Route117_PokemonDayCare_EventScript_1B236C:: @ 81B236C special Daycare_SendPokemon_Special inccounter GAME_STAT_USED_DAYCARE specialvar RESULT, sp0B6_daycare - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B23DA release end @@ -128,7 +128,7 @@ Route117_PokemonDayCare_EventScript_1B23D0:: @ 81B23D0 Route117_PokemonDayCare_EventScript_1B23DA:: @ 81B23DA msgbox Route117_PokemonDayCare_Text_1B29AD, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B236C goto Route117_PokemonDayCare_EventScript_1B23D0 end @@ -154,7 +154,7 @@ Route117_PokemonDayCare_EventScript_1B2411:: @ 81B2411 Route117_PokemonDayCare_EventScript_1B241A:: @ 81B241A specialvar RESULT, sub_80417B8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 5, Route117_PokemonDayCare_EventScript_1B2411 return @@ -163,26 +163,26 @@ Route117_PokemonDayCare_EventScript_1B242B:: @ 81B242B setvar 0x8004, 0 call Route117_PokemonDayCare_EventScript_1B241A msgbox Route117_PokemonDayCare_Text_1B29AD, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B236C msgbox Route117_PokemonDayCare_Text_1B2BF6, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B2469 goto Route117_PokemonDayCare_EventScript_1B23D0 end Route117_PokemonDayCare_EventScript_1B2469:: @ 81B2469 specialvar RESULT, CalculatePlayerPartyCount - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq Route117_PokemonDayCare_EventScript_1B2539 specialvar RESULT, sp0B6_daycare setvar 0x8004, 0 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B24A8 special ShowDaycareLevelMenu waitstate copyvar 0x8004, RESULT - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B23D0 goto Route117_PokemonDayCare_EventScript_1B24A8 end @@ -190,14 +190,14 @@ Route117_PokemonDayCare_EventScript_1B2469:: @ 81B2469 Route117_PokemonDayCare_EventScript_1B24A8:: @ 81B24A8 special sub_8041770 msgbox Route117_PokemonDayCare_Text_1B2B49, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B24C4 goto Route117_PokemonDayCare_EventScript_1B23D0 end Route117_PokemonDayCare_EventScript_1B24C4:: @ 81B24C4 specialvar RESULT, sub_80B7CE8 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B24DE msgbox Route117_PokemonDayCare_Text_1B2A30, 4 release @@ -215,14 +215,14 @@ Route117_PokemonDayCare_EventScript_1B24DE:: @ 81B24DE msgbox Route117_PokemonDayCare_Text_1B2B93, 4 waitpokecry specialvar RESULT, sp0B6_daycare - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B2520 goto Route117_PokemonDayCare_EventScript_1B23D0 end Route117_PokemonDayCare_EventScript_1B2520:: @ 81B2520 msgbox Route117_PokemonDayCare_Text_1B2A4F, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B2469 goto Route117_PokemonDayCare_EventScript_1B23D0 end @@ -264,7 +264,7 @@ Route117_PokemonDayCare_EventScript_1B2558:: @ 81B2558 setvar 0x8004, 1 call Route117_PokemonDayCare_EventScript_1B241A msgbox Route117_PokemonDayCare_Text_1B2BF6, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_PokemonDayCare_EventScript_1B2469 msgbox Route117_PokemonDayCare_Text_1B2A76, 4 release @@ -273,7 +273,7 @@ Route117_PokemonDayCare_EventScript_1B2558:: @ 81B2558 @ 81B2591 special ShowDaycareLevelMenu waitstate - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B23D0 copyvar 0x8004, RESULT specialvar RESULT, sub_8041648 diff --git a/data/scripts/gabby_and_ty.inc b/data/scripts/gabby_and_ty.inc index b8c284fec..cad2c6a48 100644 --- a/data/scripts/gabby_and_ty.inc +++ b/data/scripts/gabby_and_ty.inc @@ -202,11 +202,11 @@ Route120_EventScript_1AE582:: @ 81AE582 Route111_EventScript_1AE5A2:: @ 81AE5A2 special GabbyAndTyBeforeInterview special GabbyAndTySetScriptVarsToFieldObjectLocalIds - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, Route111_EventScript_1AE5E0 - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, Route111_EventScript_1AE5EB - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, Route111_EventScript_1AE5FD checkflag 1 goto_if_eq Route111_EventScript_1AE73A @@ -236,16 +236,16 @@ Route118_EventScript_1AE60F:: @ 81AE60F Route120_EventScript_1AE60F:: @ 81AE60F special GabbyAndTyBeforeInterview special GabbyAndTySetScriptVarsToFieldObjectLocalIds - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, Route111_EventScript_1AE5E0 - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, Route111_EventScript_1AE5EB - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, Route111_EventScript_1AE5FD checkflag 1 goto_if_eq Route111_EventScript_1AE73A specialvar RESULT, GabbyAndTyGetLastQuote - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route111_EventScript_1AE69F msgbox Route111_Text_1AC10A, 4 specialvar RESULT, sub_80BDD18 @@ -300,14 +300,14 @@ Route111_EventScript_1AE6E5:: @ 81AE6E5 end Route111_EventScript_1AE6F3:: @ 81AE6F3 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route111_EventScript_1AE72D msgbox Route111_Text_1AC40F, 4 setvar 0x8004, 10 call Route111_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route111_EventScript_1AE72D msgbox Route111_Text_1AC487, 4 special sub_80BDC14 diff --git a/data/scripts/magma_chimney.inc b/data/scripts/magma_chimney.inc index f373a76a6..01bdb7c31 100644 --- a/data/scripts/magma_chimney.inc +++ b/data/scripts/magma_chimney.inc @@ -67,9 +67,9 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB fadescreen 0 movespriteperm 1, 10, 12 reappear 1 - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, MtChimney_EventScript_1B2D7D - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, MtChimney_EventScript_1B2D88 applymovement 255, MtChimney_Movement_1A083F waitmovement 0 @@ -79,9 +79,9 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB msgbox MtChimney_Text_1B3FFE, 4 .endif closebutton - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, MtChimney_EventScript_1B2D93 - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, MtChimney_EventScript_1B2D9E disappear 1 setflag 927 diff --git a/data/scripts/maps/AbandonedShip_CaptainsOffice.inc b/data/scripts/maps/AbandonedShip_CaptainsOffice.inc index 97871a9f5..eb912028a 100644 --- a/data/scripts/maps/AbandonedShip_CaptainsOffice.inc +++ b/data/scripts/maps/AbandonedShip_CaptainsOffice.inc @@ -7,7 +7,7 @@ AbandonedShip_CaptainsOffice_EventScript_15EAF5:: @ 815EAF5 checkflag 294 goto_if_eq AbandonedShip_CaptainsOffice_EventScript_15EB2D checkitem ITEM_SCANNER, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq AbandonedShip_CaptainsOffice_EventScript_15EB23 checkflag 1078 goto_if_eq AbandonedShip_CaptainsOffice_EventScript_15EB2D diff --git a/data/scripts/maps/AbandonedShip_Corridors_B1F.inc b/data/scripts/maps/AbandonedShip_Corridors_B1F.inc index 85531be99..f3c3c0aa0 100644 --- a/data/scripts/maps/AbandonedShip_Corridors_B1F.inc +++ b/data/scripts/maps/AbandonedShip_Corridors_B1F.inc @@ -31,7 +31,7 @@ AbandonedShip_Corridors_B1F_EventScript_15E9D3:: @ 815E9D3 checkflag 239 goto_if_eq AbandonedShip_Corridors_B1F_EventScript_15EA14 checkitem ITEM_STORAGE_KEY, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq AbandonedShip_Corridors_B1F_EventScript_15EA0A msgbox AbandonedShip_Corridors_B1F_Text_198692, 4 playse 21 diff --git a/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc b/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc index fe833b47c..29a89a620 100644 --- a/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc +++ b/data/scripts/maps/AbandonedShip_HiddenFloorCorridors.inc @@ -63,7 +63,7 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EBF3:: @ 815EBF3 checkflag 240 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 checkitem ITEM_ROOM_1_KEY, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECCF msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 playse 21 @@ -79,7 +79,7 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EC2A:: @ 815EC2A checkflag 241 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 checkitem ITEM_ROOM_2_KEY, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECD9 msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 playse 21 @@ -95,7 +95,7 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EC61:: @ 815EC61 checkflag 242 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 checkitem ITEM_ROOM_4_KEY, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECE3 msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 playse 21 @@ -111,7 +111,7 @@ AbandonedShip_HiddenFloorCorridors_EventScript_15EC98:: @ 815EC98 checkflag 243 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECF7 checkitem ITEM_ROOM_6_KEY, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq AbandonedShip_HiddenFloorCorridors_EventScript_15ECED msgbox AbandonedShip_HiddenFloorCorridors_Text_198E90, 4 playse 21 diff --git a/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc b/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc index 4f3e0f099..cc9074e35 100644 --- a/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc +++ b/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc @@ -10,11 +10,11 @@ AbandonedShip_HiddenFloorRooms_EventScript_15ED11:: @ 815ED11 setvar 0x4001, 1 getplayerxy 0x4002, 0x4003 setvar 0x4004, 1 - compare_var_to_imm 0x4002, 21 + compare 0x4002, 21 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED89 - compare_var_to_imm 0x4002, 36 + compare 0x4002, 36 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED8F - compare_var_to_imm 0x4003, 2 + compare 0x4003, 2 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED95 switch 0x4004 case 1, AbandonedShip_HiddenFloorRooms_EventScript_15ED9B @@ -44,7 +44,7 @@ AbandonedShip_HiddenFloorRooms_EventScript_15ED9B:: @ 815ED9B setanimation 2, 0 doanimation 54 specialvar RESULT, sub_810F4D4 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE8B checkanimation 54 delay 10 @@ -55,10 +55,10 @@ AbandonedShip_HiddenFloorRooms_EventScript_15EDC4:: @ 815EDC4 AbandonedShip_HiddenFloorRooms_EventScript_15EDC5:: @ 815EDC5 specialvar RESULT, sub_810F488 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq AbandonedShip_HiddenFloorRooms_EventScript_15EDEA delay 20 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE6B checkanimation 54 delay 10 @@ -78,7 +78,7 @@ AbandonedShip_HiddenFloorRooms_EventScript_15EDEB:: @ 815EDEB setanimation 2, 0 doanimation 54 specialvar RESULT, sub_810F4FC - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE9B checkanimation 54 delay 10 @@ -99,7 +99,7 @@ AbandonedShip_HiddenFloorRooms_EventScript_15EE23:: @ 815EE23 setanimation 2, 0 doanimation 54 specialvar RESULT, sub_810F4B0 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE7B checkanimation 54 delay 10 diff --git a/data/scripts/maps/AbandonedShip_Rooms2_1F.inc b/data/scripts/maps/AbandonedShip_Rooms2_1F.inc index 4feecded6..5e8ab1062 100644 --- a/data/scripts/maps/AbandonedShip_Rooms2_1F.inc +++ b/data/scripts/maps/AbandonedShip_Rooms2_1F.inc @@ -4,7 +4,7 @@ AbandonedShip_Rooms2_1F_MapScripts:: @ 815EA67 AbandonedShip_Rooms2_1F_EventScript_15EA68:: @ 815EA68 trainerbattle 4, OPPONENT_LOIS_AND_HAL_1, 0, AbandonedShip_Rooms2_1F_Text_1987C1, AbandonedShip_Rooms2_1F_Text_1987FE, AbandonedShip_Rooms2_1F_Text_19887F specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq AbandonedShip_Rooms2_1F_EventScript_15EA93 msgbox AbandonedShip_Rooms2_1F_Text_198835, 6 end @@ -17,7 +17,7 @@ AbandonedShip_Rooms2_1F_EventScript_15EA93:: @ 815EA93 AbandonedShip_Rooms2_1F_EventScript_15EAAE:: @ 815EAAE trainerbattle 4, OPPONENT_LOIS_AND_HAL_1, 0, AbandonedShip_Rooms2_1F_Text_1988CC, AbandonedShip_Rooms2_1F_Text_198916, AbandonedShip_Rooms2_1F_Text_19899A specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq AbandonedShip_Rooms2_1F_EventScript_15EAD9 msgbox AbandonedShip_Rooms2_1F_Text_198934, 6 end diff --git a/data/scripts/maps/BattleTower_Corridor.inc b/data/scripts/maps/BattleTower_Corridor.inc index 26570cd66..9d4fbc844 100644 --- a/data/scripts/maps/BattleTower_Corridor.inc +++ b/data/scripts/maps/BattleTower_Corridor.inc @@ -4,7 +4,7 @@ BattleTower_Corridor_MapScripts:: @ 8160845 .byte 0 BattleTower_Corridor_MapScript1_160850:: @ 8160850 - compare_var_to_imm 0x8006, 1 + compare 0x8006, 1 goto_if_eq BattleTower_Corridor_EventScript_16086E setmaptile 12, 0, 519, 0 setmaptile 12, 1, 527, 0 @@ -21,7 +21,7 @@ BattleTower_Corridor_MapScript2_160881:: @ 8160881 BattleTower_Corridor_EventScript_16088B:: @ 816088B setvar 0x4000, 1 - compare_var_to_imm 0x8006, 1 + compare 0x8006, 1 goto_if_eq BattleTower_Corridor_EventScript_1608B1 applymovement 1, BattleTower_Corridor_Movement_1608D5 applymovement 255, BattleTower_Corridor_Movement_1608D4 diff --git a/data/scripts/maps/BattleTower_Lobby.inc b/data/scripts/maps/BattleTower_Lobby.inc index bd4f4ecd1..61b2da5e7 100644 --- a/data/scripts/maps/BattleTower_Lobby.inc +++ b/data/scripts/maps/BattleTower_Lobby.inc @@ -18,7 +18,7 @@ BattleTower_Lobby_EventScript_16029C:: @ 816029C checkflag 237 goto_if_eq BattleTower_Lobby_EventScript_1602CD specialvar 0x8007, sub_810F404 - compare_var_to_imm 0x8007, 50 + compare 0x8007, 50 goto_if 0, BattleTower_Lobby_EventScript_1602E4 clearflag 941 special sub_810F8FC @@ -26,7 +26,7 @@ BattleTower_Lobby_EventScript_16029C:: @ 816029C BattleTower_Lobby_EventScript_1602CD:: @ 81602CD specialvar 0x8007, sub_810F404 - compare_var_to_imm 0x8007, 100 + compare 0x8007, 100 goto_if 0, BattleTower_Lobby_EventScript_1602E4 clearflag 941 special sub_810F8FC @@ -77,10 +77,10 @@ BattleTower_Lobby_EventScript_160342:: @ 8160342 waittext setvar 0x8004, 0 special sub_81358A4 - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq BattleTower_Lobby_EventScript_16037D special sub_8135E50 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_16037D message BattleTower_Lobby_Text_19A6BE waittext @@ -91,7 +91,7 @@ BattleTower_Lobby_EventScript_160342:: @ 8160342 BattleTower_Lobby_EventScript_16037D:: @ 816037D setvar 0x8004, 8 special sub_81358A4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1603AD message BattleTower_Lobby_Text_19A589 waittext @@ -118,7 +118,7 @@ BattleTower_Lobby_EventScript_1603AD:: @ 81603AD waitfanfare setvar 0x8004, 9 special sub_81358A4 - compare_var_to_imm RESULT, 49 + compare RESULT, 49 goto_if 5, BattleTower_Lobby_EventScript_1603F8 msgbox BattleTower_Lobby_Text_19A617, 4 @@ -186,7 +186,7 @@ BattleTower_Lobby_EventScript_16049E:: @ 816049E faceplayer setvar 0x8004, 0 special sub_81358A4 - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq BattleTower_Lobby_EventScript_160342 special SavePlayerParty msgbox BattleTower_Lobby_Text_199F2C, 4 @@ -209,7 +209,7 @@ BattleTower_Lobby_EventScript_1604FA:: @ 81604FA case 2, BattleTower_Lobby_EventScript_160652 case 127, BattleTower_Lobby_EventScript_160652 special CheckPartyBattleTowerBanlist - compare_var_to_imm 0x8004, 1 + compare 0x8004, 1 goto_if_eq BattleTower_Lobby_EventScript_16060D setvar 0x8004, 1 copyvar 0x8005, RESULT @@ -219,7 +219,7 @@ BattleTower_Lobby_EventScript_1604FA:: @ 81604FA fadescreen 1 special ChooseBattleTowerPlayerParty waitstate - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_16064F msgbox BattleTower_Lobby_Text_199FDA, 5 switch RESULT @@ -245,7 +245,7 @@ BattleTower_Lobby_EventScript_160587:: @ 8160587 call S_DoSaveDialog setvar 0x4000, 5 hidebox 0, 0, 15, 10 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_160642 inccounter GAME_STAT_ENTERED_BATTLE_TOWER special SavePlayerParty @@ -347,9 +347,9 @@ BattleTower_Lobby_EventScript_1606CC:: @ 81606CC call BattleTower_Lobby_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_160701 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_16070B end @@ -394,7 +394,7 @@ BattleTower_Lobby_EventScript_160733:: @ 8160733 msgbox BattleTower_Lobby_Text_19A9EE, 4 setvar 0x8008, 42 givedecoration 42 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1607AF setflag 237 msgbox BattleTower_Lobby_Text_19ABAA, 4 @@ -403,12 +403,12 @@ BattleTower_Lobby_EventScript_160733:: @ 8160733 BattleTower_Lobby_EventScript_160773:: @ 8160773 specialvar RESULT, sub_810F404 - compare_var_to_imm RESULT, 100 + compare RESULT, 100 goto_if 0, BattleTower_Lobby_EventScript_1607C5 msgbox BattleTower_Lobby_Text_19AAC4, 4 setvar 0x8008, 43 givedecoration 43 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_1607AF setflag 238 msgbox BattleTower_Lobby_Text_19ABAA, 4 diff --git a/data/scripts/maps/BattleTower_Outside.inc b/data/scripts/maps/BattleTower_Outside.inc index 2f88db2db..f577f39fa 100644 --- a/data/scripts/maps/BattleTower_Outside.inc +++ b/data/scripts/maps/BattleTower_Outside.inc @@ -13,7 +13,7 @@ BattleTower_Outside_EventScript_160168:: @ 8160168 faceplayer msgbox BattleTower_Outside_Text_199D06, 4 checkitem ITEM_SS_TICKET, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Outside_EventScript_1601C6 message BattleTower_Outside_Text_199D9D waittext @@ -36,7 +36,7 @@ BattleTower_Outside_EventScript_1601C6:: @ 81601C6 BattleTower_Outside_EventScript_1601D0:: @ 81601D0 msgbox BattleTower_Outside_Text_199DF2, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Outside_EventScript_160226 msgbox BattleTower_Outside_Text_199E4B, 4 call BattleTower_Outside_EventScript_160232 @@ -47,7 +47,7 @@ BattleTower_Outside_EventScript_1601D0:: @ 81601D0 BattleTower_Outside_EventScript_1601FB:: @ 81601FB msgbox BattleTower_Outside_Text_199E0E, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq BattleTower_Outside_EventScript_160226 msgbox BattleTower_Outside_Text_199E4B, 4 call BattleTower_Outside_EventScript_160232 diff --git a/data/scripts/maps/CaveOfOrigin_B4F.inc b/data/scripts/maps/CaveOfOrigin_B4F.inc index 4d27844a7..dcd97f069 100644 --- a/data/scripts/maps/CaveOfOrigin_B4F.inc +++ b/data/scripts/maps/CaveOfOrigin_B4F.inc @@ -66,7 +66,7 @@ CaveOfOrigin_B4F_EventScript_15DDD7:: @ 815DDD7 waitstate clearflag 2145 specialvar RESULT, sub_810E300 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, CaveOfOrigin_B4F_EventScript_15DE73 setflag 816 setflag 855 diff --git a/data/scripts/maps/DewfordTown.inc b/data/scripts/maps/DewfordTown.inc index f8265d1cf..09835c0b9 100644 --- a/data/scripts/maps/DewfordTown.inc +++ b/data/scripts/maps/DewfordTown.inc @@ -43,7 +43,7 @@ DewfordTown_EventScript_14E06B:: @ 814E06B DewfordTown_EventScript_14E076:: @ 814E076 msgbox DewfordTown_Text_16B3BC, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq DewfordTown_EventScript_14E093 msgbox DewfordTown_Text_16B471, 4 release @@ -77,9 +77,9 @@ DewfordTown_EventScript_14E0C6:: @ 814E0C6 checkflag 257 goto_if_eq DewfordTown_EventScript_14E11B msgbox DewfordTown_Text_16B665, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq DewfordTown_EventScript_14E0F0 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq DewfordTown_EventScript_14E111 end @@ -100,9 +100,9 @@ DewfordTown_EventScript_14E11B:: @ 814E11B message DewfordTown_Text_16B84E waittext multichoice 20, 8, 50, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq DewfordTown_EventScript_14E13D - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq DewfordTown_EventScript_14E147 end @@ -599,9 +599,9 @@ DewfordTown_EventScript_14E413:: @ 814E413 faceplayer call DewfordTown_EventScript_1A0102 msgbox DewfordTown_Text_16B9CE, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq DewfordTown_EventScript_14E439 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq DewfordTown_EventScript_14E443 end @@ -616,15 +616,15 @@ DewfordTown_EventScript_14E443:: @ 814E443 call DewfordTown_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq DewfordTown_EventScript_14E46E - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq DewfordTown_EventScript_14E485 end DewfordTown_EventScript_14E46E:: @ 814E46E inccounter GAME_STAT_STARTED_TRENDS - compare_var_to_imm 0x8004, 0 + compare 0x8004, 0 goto_if_eq DewfordTown_EventScript_14E48F msgbox DewfordTown_Text_16BB44, 4 release diff --git a/data/scripts/maps/DewfordTown_Gym.inc b/data/scripts/maps/DewfordTown_Gym.inc index 8f57e549a..034bca1bc 100644 --- a/data/scripts/maps/DewfordTown_Gym.inc +++ b/data/scripts/maps/DewfordTown_Gym.inc @@ -11,11 +11,11 @@ DewfordTown_Gym_EventScript_153071:: @ 8153071 goto_if_eq DewfordTown_Gym_EventScript_1530AA call DewfordTown_Gym_EventScript_153122 copyvar 0x8001, 0x8000 - compare_var_to_imm 0x8000, 0 + compare 0x8000, 0 goto_if_eq DewfordTown_Gym_EventScript_1530BA - compare_var_to_imm 0x8000, 1 + compare 0x8000, 1 goto_if_eq DewfordTown_Gym_EventScript_1530B6 - compare_var_to_imm 0x8000, 2 + compare 0x8000, 2 goto_if_eq DewfordTown_Gym_EventScript_1530B2 goto DewfordTown_Gym_EventScript_1530AE @@ -42,14 +42,14 @@ DewfordTown_Gym_EventScript_1530BA:: @ 81530BA DewfordTown_Gym_EventScript_1530BE:: @ 81530BE call DewfordTown_Gym_EventScript_153122 nop1 - compare_var_to_var 0x8000, 0x8001 + compare 0x8000, 0x8001 goto_if_eq DewfordTown_Gym_EventScript_1530F5 copyvar 0x8001, 0x8000 - compare_var_to_imm 0x8000, 1 + compare 0x8000, 1 goto_if_eq DewfordTown_Gym_EventScript_1530F6 - compare_var_to_imm 0x8000, 2 + compare 0x8000, 2 goto_if_eq DewfordTown_Gym_EventScript_153101 - compare_var_to_imm 0x8000, 3 + compare 0x8000, 3 goto_if_eq DewfordTown_Gym_EventScript_15310C DewfordTown_Gym_EventScript_1530F5:: @ 81530F5 @@ -115,7 +115,7 @@ DewfordTown_Gym_EventScript_153177:: @ 8153177 setflag 1204 setflag 2056 addvar 0x4085, 1 - compare_var_to_imm 0x4085, 6 + compare 0x4085, 6 call_if 1, DewfordTown_Gym_EventScript_1A00FB setvar 0x8008, 2 call DewfordTown_Gym_EventScript_1A01C0 @@ -124,7 +124,7 @@ DewfordTown_Gym_EventScript_153177:: @ 8153177 DewfordTown_Gym_EventScript_1531B5:: @ 81531B5 giveitem ITEM_TM08 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq DewfordTown_Gym_EventScript_1A029B msgbox DewfordTown_Gym_Text_1753BF, 4 setflag 166 diff --git a/data/scripts/maps/DewfordTown_Hall.inc b/data/scripts/maps/DewfordTown_Hall.inc index 0b19ef92d..78b5f5044 100644 --- a/data/scripts/maps/DewfordTown_Hall.inc +++ b/data/scripts/maps/DewfordTown_Hall.inc @@ -6,7 +6,7 @@ DewfordTown_Hall_EventScript_153293:: @ 8153293 faceplayer call DewfordTown_Hall_EventScript_1A0102 special sub_80FA5E4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq DewfordTown_Hall_EventScript_1532B2 msgbox DewfordTown_Hall_Text_1754C9, 4 release @@ -31,9 +31,9 @@ DewfordTown_Hall_EventScript_1532CD:: @ 81532CD call DewfordTown_Hall_EventScript_1A0102 special sub_80EB83C msgbox DewfordTown_Hall_Text_1755F9, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq DewfordTown_Hall_EventScript_1532F6 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq DewfordTown_Hall_EventScript_153300 end @@ -191,14 +191,14 @@ DewfordTown_Hall_EventScript_1534FC:: @ 81534FC DewfordTown_Hall_EventScript_1534FD:: @ 81534FD applymovement 8, DewfordTown_Hall_Movement_153599 waitmovement 0 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 goto_if_eq DewfordTown_Hall_EventScript_15351E - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 goto_if_eq DewfordTown_Hall_EventScript_153534 end DewfordTown_Hall_EventScript_15351E:: @ 815351E - compare_var_to_imm FACING, 4 + compare FACING, 4 goto_if_eq DewfordTown_Hall_EventScript_1534FC applymovement 255, DewfordTown_Hall_Movement_1A0843 waitmovement 0 @@ -210,16 +210,16 @@ DewfordTown_Hall_EventScript_153534:: @ 8153534 DewfordTown_Hall_EventScript_153535:: @ 8153535 applymovement 7, DewfordTown_Hall_Movement_15359B waitmovement 0 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 goto_if_eq DewfordTown_Hall_EventScript_153556 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 goto_if_eq DewfordTown_Hall_EventScript_153583 end DewfordTown_Hall_EventScript_153556:: @ 8153556 - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, DewfordTown_Hall_EventScript_15356D - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, DewfordTown_Hall_EventScript_153578 return @@ -234,7 +234,7 @@ DewfordTown_Hall_EventScript_153578:: @ 8153578 return DewfordTown_Hall_EventScript_153583:: @ 8153583 - compare_var_to_imm FACING, 3 + compare FACING, 3 goto_if_eq DewfordTown_Hall_EventScript_1534FC applymovement 255, DewfordTown_Hall_Movement_1A083F waitmovement 0 @@ -256,7 +256,7 @@ DewfordTown_Hall_EventScript_15359D:: @ 815359D goto_if_eq DewfordTown_Hall_EventScript_1535D1 msgbox DewfordTown_Hall_Text_175E13, 4 giveitem ITEM_TM36 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq DewfordTown_Hall_EventScript_1A029B setflag 230 release diff --git a/data/scripts/maps/DewfordTown_House2.inc b/data/scripts/maps/DewfordTown_House2.inc index b3b3eef34..befe47404 100644 --- a/data/scripts/maps/DewfordTown_House2.inc +++ b/data/scripts/maps/DewfordTown_House2.inc @@ -8,7 +8,7 @@ DewfordTown_House2_EventScript_1535DC:: @ 81535DC goto_if_eq DewfordTown_House2_EventScript_153615 msgbox DewfordTown_House2_Text_175EFE, 4 giveitem ITEM_SILK_SCARF - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq DewfordTown_House2_EventScript_15360B setflag 289 release diff --git a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc index 45df01e78..669da34f9 100644 --- a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc +++ b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc @@ -53,16 +53,16 @@ EverGrandeCity_ChampionsRoom_EventScript_15B821:: @ 815B821 closebutton playse 8 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B87C - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B881 reappear 2 call EverGrandeCity_ChampionsRoom_EventScript_15B9BD checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EverGrandeCity_ChampionsRoom_EventScript_15B886 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EverGrandeCity_ChampionsRoom_EventScript_15B8BB end @@ -128,9 +128,9 @@ EverGrandeCity_ChampionsRoom_EventScript_15B8F0:: @ 815B8F0 waitmovement 0 msgbox EverGrandeCity_ChampionsRoom_Text_191546, 4 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B9AB - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B9B4 closebutton applymovement 1, EverGrandeCity_ChampionsRoom_Movement_15B9FF diff --git a/data/scripts/maps/EverGrandeCity_DrakesRoom.inc b/data/scripts/maps/EverGrandeCity_DrakesRoom.inc index a283c4c2a..ee171824f 100644 --- a/data/scripts/maps/EverGrandeCity_DrakesRoom.inc +++ b/data/scripts/maps/EverGrandeCity_DrakesRoom.inc @@ -26,7 +26,7 @@ EverGrandeCity_DrakesRoom_EventScript_15B736:: @ 815B736 EverGrandeCity_DrakesRoom_MapScript1_15B743:: @ 815B743 checkflag 1248 call_if 1, EverGrandeCity_DrakesRoom_EventScript_15B758 - compare_var_to_imm 0x409c, 4 + compare 0x409c, 4 call_if 1, EverGrandeCity_DrakesRoom_EventScript_15B75E end diff --git a/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc b/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc index f00f82f2e..8ebf7939f 100644 --- a/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc +++ b/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc @@ -26,7 +26,7 @@ EverGrandeCity_GlaciasRoom_EventScript_15B69C:: @ 815B69C EverGrandeCity_GlaciasRoom_MapScript1_15B6A9:: @ 815B6A9 checkflag 1247 call_if 1, EverGrandeCity_GlaciasRoom_EventScript_15B6BE - compare_var_to_imm 0x409c, 3 + compare 0x409c, 3 call_if 1, EverGrandeCity_GlaciasRoom_EventScript_15B6C4 end diff --git a/data/scripts/maps/EverGrandeCity_HallOfFame.inc b/data/scripts/maps/EverGrandeCity_HallOfFame.inc index 0bb327fd4..d0fb7922f 100644 --- a/data/scripts/maps/EverGrandeCity_HallOfFame.inc +++ b/data/scripts/maps/EverGrandeCity_HallOfFame.inc @@ -44,9 +44,9 @@ EverGrandeCity_HallOfFame_EventScript_15BBA8:: @ 815BBA8 setvar 0x4001, 1 call EverGrandeCity_HallOfFame_EventScript_19FC13 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EverGrandeCity_HallOfFame_EventScript_15BC41 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EverGrandeCity_HallOfFame_EventScript_15BC4D end diff --git a/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc b/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc index 2b5266ade..b8fe90a01 100644 --- a/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc +++ b/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc @@ -26,7 +26,7 @@ EverGrandeCity_PhoebesRoom_EventScript_15B602:: @ 815B602 EverGrandeCity_PhoebesRoom_MapScript1_15B60F:: @ 815B60F checkflag 1246 call_if 1, EverGrandeCity_PhoebesRoom_EventScript_15B624 - compare_var_to_imm 0x409c, 2 + compare 0x409c, 2 call_if 1, EverGrandeCity_PhoebesRoom_EventScript_15B62A end diff --git a/data/scripts/maps/EverGrandeCity_PokemonLeague.inc b/data/scripts/maps/EverGrandeCity_PokemonLeague.inc index 93f9c5fcb..f15f05904 100644 --- a/data/scripts/maps/EverGrandeCity_PokemonLeague.inc +++ b/data/scripts/maps/EverGrandeCity_PokemonLeague.inc @@ -50,9 +50,9 @@ EverGrandeCity_PokemonLeague_EventScript_15BAD2:: @ 815BAD2 checkflag 263 goto_if_eq EverGrandeCity_PokemonLeague_EventScript_15BB57 getplayerxy 0x4000, 0x4001 - compare_var_to_imm 0x4000, 11 + compare 0x4000, 11 call_if 4, EverGrandeCity_PokemonLeague_EventScript_15BB34 - compare_var_to_imm 0x4000, 8 + compare 0x4000, 8 call_if 3, EverGrandeCity_PokemonLeague_EventScript_15BB3F message EverGrandeCity_PokemonLeague_Text_1916FD waittext diff --git a/data/scripts/maps/EverGrandeCity_SidneysRoom.inc b/data/scripts/maps/EverGrandeCity_SidneysRoom.inc index 564b2b806..3f472ca3f 100644 --- a/data/scripts/maps/EverGrandeCity_SidneysRoom.inc +++ b/data/scripts/maps/EverGrandeCity_SidneysRoom.inc @@ -7,7 +7,7 @@ EverGrandeCity_SidneysRoom_MapScripts:: @ 815B53F EverGrandeCity_SidneysRoom_MapScript1_15B54F:: @ 815B54F checkflag 1245 call_if 1, EverGrandeCity_SidneysRoom_EventScript_15B564 - compare_var_to_imm 0x409c, 1 + compare 0x409c, 1 call_if 1, EverGrandeCity_SidneysRoom_EventScript_15B56A end diff --git a/data/scripts/maps/FallarborTown_House1.inc b/data/scripts/maps/FallarborTown_House1.inc index 1971593cb..0228fe25d 100644 --- a/data/scripts/maps/FallarborTown_House1.inc +++ b/data/scripts/maps/FallarborTown_House1.inc @@ -11,7 +11,7 @@ FallarborTown_House1_EventScript_153BB5:: @ 8153BB5 checkflag 229 goto_if_eq FallarborTown_House1_EventScript_153C54 checkitem ITEM_METEORITE, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_House1_EventScript_153BDA msgbox FallarborTown_House1_Text_177755, 4 release @@ -22,11 +22,11 @@ FallarborTown_House1_EventScript_153BDA:: @ 8153BDA call_if 0, FallarborTown_House1_EventScript_153C2D checkflag 2 call_if 1, FallarborTown_House1_EventScript_153C3E - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_House1_EventScript_153C47 msgbox FallarborTown_House1_Text_1778C4, 4 giveitem ITEM_TM27 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_House1_EventScript_1A029B setvar 0x8004, 280 call FallarborTown_House1_EventScript_1A067F diff --git a/data/scripts/maps/FallarborTown_House2.inc b/data/scripts/maps/FallarborTown_House2.inc index f25f02da5..3b215a697 100644 --- a/data/scripts/maps/FallarborTown_House2.inc +++ b/data/scripts/maps/FallarborTown_House2.inc @@ -14,7 +14,7 @@ FallarborTown_House2_EventScript_153C91:: @ 8153C91 FallarborTown_House2_EventScript_153CB6:: @ 8153CB6 checkitem ITEM_HEART_SCALE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_House2_EventScript_153D60 msgbox FallarborTown_House2_Text_177BDB, 5 switch RESULT @@ -26,12 +26,12 @@ FallarborTown_House2_EventScript_153CE4:: @ 8153CE4 msgbox FallarborTown_House2_Text_177C3F, 4 special sub_80F9A4C waitstate - compare_var_to_imm 0x8004, 255 + compare 0x8004, 255 goto_if_eq FallarborTown_House2_EventScript_153D60 special sub_80FA148 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_House2_EventScript_153D52 - compare_var_to_imm 0x8005, 0 + compare 0x8005, 0 goto_if_eq FallarborTown_House2_EventScript_153D44 goto FallarborTown_House2_EventScript_153D1A end @@ -40,7 +40,7 @@ FallarborTown_House2_EventScript_153D1A:: @ 8153D1A msgbox FallarborTown_House2_Text_177C5D, 4 special sub_8132670 waitstate - compare_var_to_imm 0x8004, 0 + compare 0x8004, 0 goto_if_eq FallarborTown_House2_EventScript_153CE4 msgbox FallarborTown_House2_Text_177CC3, 4 removeitem ITEM_HEART_SCALE, 1 diff --git a/data/scripts/maps/FortreeCity.inc b/data/scripts/maps/FortreeCity.inc index c63273d5b..e0bac8007 100644 --- a/data/scripts/maps/FortreeCity.inc +++ b/data/scripts/maps/FortreeCity.inc @@ -57,7 +57,7 @@ FortreeCity_EventScript_14C9B3:: @ 814C9B3 lock faceplayer checkitem ITEM_DEVON_SCOPE, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FortreeCity_EventScript_14C9CF msgbox FortreeCity_Text_167868, 4 release @@ -65,7 +65,7 @@ FortreeCity_EventScript_14C9B3:: @ 814C9B3 FortreeCity_EventScript_14C9CF:: @ 814C9CF msgbox FortreeCity_Text_16788B, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FortreeCity_EventScript_14C9E4 release end diff --git a/data/scripts/maps/FortreeCity_Gym.inc b/data/scripts/maps/FortreeCity_Gym.inc index d601aabab..8744141cb 100644 --- a/data/scripts/maps/FortreeCity_Gym.inc +++ b/data/scripts/maps/FortreeCity_Gym.inc @@ -37,7 +37,7 @@ FortreeCity_Gym_EventScript_157F15:: @ 8157F15 FortreeCity_Gym_EventScript_157F3E:: @ 8157F3E giveitem ITEM_TM40 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FortreeCity_Gym_EventScript_1A029B msgbox FortreeCity_Gym_Text_185F4A, 4 setflag 170 diff --git a/data/scripts/maps/FortreeCity_House1.inc b/data/scripts/maps/FortreeCity_House1.inc index d21b82e51..3809e1f01 100644 --- a/data/scripts/maps/FortreeCity_House1.inc +++ b/data/scripts/maps/FortreeCity_House1.inc @@ -11,17 +11,17 @@ FortreeCity_House1_EventScript_157E13:: @ 8157E13 specialvar RESULT, sub_804D89C copyvar 0x8009, RESULT msgbox FortreeCity_House1_Text_18568C, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FortreeCity_House1_EventScript_157E95 special sub_80F9A0C waitstate copyvar 0x800a, 0x8004 - compare_var_to_imm 0x8004, 255 + compare 0x8004, 255 goto_if_eq FortreeCity_House1_EventScript_157E95 copyvar 0x8005, 0x800a specialvar RESULT, sub_804DB2C copyvar 0x800b, RESULT - compare_var_to_var RESULT, 0x8009 + compare RESULT, 0x8009 goto_if 5, FortreeCity_House1_EventScript_157E9F copyvar 0x8004, 0x8008 copyvar 0x8005, 0x800a diff --git a/data/scripts/maps/FortreeCity_House2.inc b/data/scripts/maps/FortreeCity_House2.inc index ce1dd2344..f210dd3ac 100644 --- a/data/scripts/maps/FortreeCity_House2.inc +++ b/data/scripts/maps/FortreeCity_House2.inc @@ -22,7 +22,7 @@ FortreeCity_House2_EventScript_1580B4:: @ 81580B4 case 0, FortreeCity_House2_EventScript_158161 msgbox FortreeCity_House2_Text_1864C6, 4 giveitem ITEM_TM10 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FortreeCity_House2_EventScript_1A029B setflag 264 msgbox FortreeCity_House2_Text_18652F, 4 diff --git a/data/scripts/maps/FortreeCity_House4.inc b/data/scripts/maps/FortreeCity_House4.inc index f13b29249..f7f8391d4 100644 --- a/data/scripts/maps/FortreeCity_House4.inc +++ b/data/scripts/maps/FortreeCity_House4.inc @@ -35,7 +35,7 @@ FortreeCity_House4_EventScript_1581D6:: @ 81581D6 waitmovement 0 msgbox FortreeCity_House4_Text_186881, 4 giveitem ITEM_MENTAL_HERB - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FortreeCity_House4_EventScript_1A029B setflag 223 releaseall diff --git a/data/scripts/maps/GraniteCave_StevensRoom.inc b/data/scripts/maps/GraniteCave_StevensRoom.inc index ed6a1a784..06f234f28 100644 --- a/data/scripts/maps/GraniteCave_StevensRoom.inc +++ b/data/scripts/maps/GraniteCave_StevensRoom.inc @@ -10,17 +10,17 @@ GraniteCave_StevensRoom_EventScript_15CBFA:: @ 815CBFA setflag 189 msgbox GraniteCave_StevensRoom_Text_194BDD, 4 giveitem ITEM_TM47 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, GraniteCave_StevensRoom_EventScript_15CC83 msgbox GraniteCave_StevensRoom_Text_194C8D, 4 closebutton - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, GraniteCave_StevensRoom_EventScript_15CC6D - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, GraniteCave_StevensRoom_EventScript_15CC78 - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, GraniteCave_StevensRoom_EventScript_15CC6D - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, GraniteCave_StevensRoom_EventScript_15CC6D playse 9 disappear 1 diff --git a/data/scripts/maps/InsideOfTruck.inc b/data/scripts/maps/InsideOfTruck.inc index e5782b63e..7a13cbe78 100644 --- a/data/scripts/maps/InsideOfTruck.inc +++ b/data/scripts/maps/InsideOfTruck.inc @@ -17,9 +17,9 @@ InsideOfTruck_EventScript_15FC29:: @ 815FC29 lockall setflag 0x4000 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq InsideOfTruck_EventScript_15FC45 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq InsideOfTruck_EventScript_15FC68 end diff --git a/data/scripts/maps/JaggedPass.inc b/data/scripts/maps/JaggedPass.inc index 98b367006..6f910d0ad 100644 --- a/data/scripts/maps/JaggedPass.inc +++ b/data/scripts/maps/JaggedPass.inc @@ -8,7 +8,7 @@ JaggedPass_MapScript1_15D271:: @ 815D271 end JaggedPass_MapScript1_15D274:: @ 815D274 - compare_var_to_imm 0x40bd, 1 + compare 0x40bd, 1 call_if 1, JaggedPass_EventScript_15D280 end @@ -25,7 +25,7 @@ JaggedPass_EventScript_15D285:: @ 815D285 JaggedPass_EventScript_15D29C:: @ 815D29C trainerbattle 0, OPPONENT_DIANA_1, 0, JaggedPass_Text_195E9E, JaggedPass_Text_195EDF specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq JaggedPass_EventScript_15D2C3 msgbox JaggedPass_Text_195F04, 6 end @@ -38,7 +38,7 @@ JaggedPass_EventScript_15D2C3:: @ 815D2C3 JaggedPass_EventScript_15D2DA:: @ 815D2DA trainerbattle 0, OPPONENT_ETHAN_1, 0, JaggedPass_Text_195FF2, JaggedPass_Text_196032 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq JaggedPass_EventScript_15D301 msgbox JaggedPass_Text_196077, 6 end diff --git a/data/scripts/maps/LavaridgeTown.inc b/data/scripts/maps/LavaridgeTown.inc index d35fcaae5..d24280efa 100644 --- a/data/scripts/maps/LavaridgeTown.inc +++ b/data/scripts/maps/LavaridgeTown.inc @@ -9,7 +9,7 @@ LavaridgeTown_MapScript1_14E4AE:: @ 814E4AE call_if 1, LavaridgeTown_EventScript_14E4DF call LavaridgeTown_EventScript_1A014E call LavaridgeTown_EventScript_1A0172 - compare_var_to_imm 0x4053, 2 + compare 0x4053, 2 call_if 1, LavaridgeTown_EventScript_14E4D0 end @@ -44,16 +44,16 @@ LavaridgeTown_EventScript_14E4ED:: @ 814E4ED applymovement 8, LavaridgeTown_Movement_1A0835 waitmovement 0 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LavaridgeTown_EventScript_14E56B - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LavaridgeTown_EventScript_14E570 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, LavaridgeTown_EventScript_14E68F checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LavaridgeTown_EventScript_14E5AB - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LavaridgeTown_EventScript_14E5D0 end @@ -70,14 +70,14 @@ LavaridgeTown_EventScript_14E575:: @ 814E575 faceplayer setvar 0x8008, 0 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LavaridgeTown_EventScript_14E56B - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LavaridgeTown_EventScript_14E570 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LavaridgeTown_EventScript_14E5AB - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LavaridgeTown_EventScript_14E5D0 end @@ -99,22 +99,22 @@ LavaridgeTown_EventScript_14E5D0:: @ 814E5D0 LavaridgeTown_EventScript_14E5F5:: @ 814E5F5 closebutton - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, LavaridgeTown_EventScript_14E646 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, LavaridgeTown_EventScript_14E64E disappear 8 reappear 7 delay 30 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, LavaridgeTown_EventScript_14E69A - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, LavaridgeTown_EventScript_14E6A5 disappear 7 setvar 0x4053, 2 savebgm 0 fadedefaultbgm - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 goto_if_eq LavaridgeTown_EventScript_14E644 releaseall end @@ -128,13 +128,13 @@ LavaridgeTown_EventScript_14E646:: @ 814E646 return LavaridgeTown_EventScript_14E64E:: @ 814E64E - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, LavaridgeTown_EventScript_14E67B - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, LavaridgeTown_EventScript_14E680 - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, LavaridgeTown_EventScript_14E685 - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, LavaridgeTown_EventScript_14E68A return @@ -165,13 +165,13 @@ LavaridgeTown_EventScript_14E69A:: @ 814E69A return LavaridgeTown_EventScript_14E6A5:: @ 814E6A5 - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, LavaridgeTown_EventScript_14E6D2 - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, LavaridgeTown_EventScript_14E6D2 - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, LavaridgeTown_EventScript_14E6DD - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, LavaridgeTown_EventScript_14E6D2 return @@ -237,7 +237,7 @@ LavaridgeTown_Movement_14E70E:: @ 814E70E LavaridgeTown_EventScript_14E710:: @ 814E710 specialvar RESULT, player_get_direction_lower_nybble - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LavaridgeTown_EventScript_14E721 end @@ -275,10 +275,10 @@ LavaridgeTown_EventScript_14E75A:: @ 814E75A checkflag 266 goto_if_eq LavaridgeTown_EventScript_14E79E msgbox LavaridgeTown_Text_16C174, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LavaridgeTown_EventScript_14E7B2 countpokemon - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq LavaridgeTown_EventScript_14E7A8 msgbox LavaridgeTown_Text_16C2B6, 4 setflag 266 diff --git a/data/scripts/maps/LavaridgeTown_Gym_1F.inc b/data/scripts/maps/LavaridgeTown_Gym_1F.inc index 68f93443a..e22d4471f 100644 --- a/data/scripts/maps/LavaridgeTown_Gym_1F.inc +++ b/data/scripts/maps/LavaridgeTown_Gym_1F.inc @@ -84,7 +84,7 @@ LavaridgeTown_Gym_1F_EventScript_153766:: @ 8153766 setflag 1213 setflag 2058 addvar 0x4085, 1 - compare_var_to_imm 0x4085, 6 + compare 0x4085, 6 call_if 1, LavaridgeTown_Gym_1F_EventScript_1A00FB setvar 0x8008, 4 call LavaridgeTown_Gym_1F_EventScript_1A01C0 @@ -95,7 +95,7 @@ LavaridgeTown_Gym_1F_EventScript_153766:: @ 8153766 LavaridgeTown_Gym_1F_EventScript_1537A7:: @ 81537A7 giveitem ITEM_TM50 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LavaridgeTown_Gym_1F_EventScript_1A029B msgbox LavaridgeTown_Gym_1F_Text_176B8F, 4 setflag 168 diff --git a/data/scripts/maps/LavaridgeTown_HerbShop.inc b/data/scripts/maps/LavaridgeTown_HerbShop.inc index bf148186a..c924684bc 100644 --- a/data/scripts/maps/LavaridgeTown_HerbShop.inc +++ b/data/scripts/maps/LavaridgeTown_HerbShop.inc @@ -32,7 +32,7 @@ LavaridgeTown_HerbShop_EventScript_153655:: @ 8153655 goto_if_eq LavaridgeTown_HerbShop_EventScript_153684 msgbox LavaridgeTown_HerbShop_Text_1761A2, 4 giveitem ITEM_CHARCOAL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LavaridgeTown_HerbShop_EventScript_1A029B setflag 254 release diff --git a/data/scripts/maps/LilycoveCity.inc b/data/scripts/maps/LilycoveCity.inc index b8410429b..7031eb530 100644 --- a/data/scripts/maps/LilycoveCity.inc +++ b/data/scripts/maps/LilycoveCity.inc @@ -70,7 +70,7 @@ LilycoveCity_EventScript_14CB74:: @ 814CB74 random 10 addvar RESULT, 133 giveitem RESULT - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_EventScript_1A029B setflag 2255 msgbox LilycoveCity_Text_1C5B1D, 4 @@ -248,9 +248,9 @@ LilycoveCity_EventScript_14CD46:: @ 814CD46 lock faceplayer checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_EventScript_14CD60 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_EventScript_14CDD3 end @@ -260,7 +260,7 @@ LilycoveCity_EventScript_14CD60:: @ 814CD60 call_if 1, LilycoveCity_EventScript_14CDB0 checkflag 286 call_if 0, LilycoveCity_EventScript_14CDB9 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_EventScript_14CDC2 msgbox LilycoveCity_Text_167B94, 4 switch 0x4023 @@ -291,7 +291,7 @@ LilycoveCity_EventScript_14CDD3:: @ 814CDD3 call_if 1, LilycoveCity_EventScript_14CE23 checkflag 286 call_if 0, LilycoveCity_EventScript_14CE2C - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_EventScript_14CE35 msgbox LilycoveCity_Text_1680A9, 4 switch 0x4023 @@ -351,9 +351,9 @@ LilycoveCity_EventScript_14CEA6:: @ 814CEA6 setvar RESULT, 0 checkflag 2060 call_if 1, LilycoveCity_EventScript_14CEDE - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LilycoveCity_EventScript_14CEEE - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LilycoveCity_EventScript_14CEF7 clearflag 722 clearflag 849 @@ -388,9 +388,9 @@ LilycoveCity_EventScript_14CF12:: @ 814CF12 setvar RESULT, 0 checkflag 2060 call_if 1, LilycoveCity_EventScript_14CEDE - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LilycoveCity_EventScript_14CF47 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LilycoveCity_EventScript_14CF50 clearflag 760 goto LilycoveCity_EventScript_14CF6B diff --git a/data/scripts/maps/LilycoveCity_ContestLobby.inc b/data/scripts/maps/LilycoveCity_ContestLobby.inc index d775fd440..1020e9d2b 100644 --- a/data/scripts/maps/LilycoveCity_ContestLobby.inc +++ b/data/scripts/maps/LilycoveCity_ContestLobby.inc @@ -31,9 +31,9 @@ LilycoveCity_ContestLobby_EventScript_158898:: @ 8158898 showcontestwinner 0 lockall msgbox LilycoveCity_ContestLobby_Text_1889FD, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_1588DE - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_ContestLobby_EventScript_158918 releaseall end @@ -44,7 +44,7 @@ LilycoveCity_ContestLobby_EventScript_1588DE:: @ 81588DE special sub_80C4CEC setvar 0x4099, 0 specialvar RESULT, GiveMonArtistRibbon - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LilycoveCity_ContestLobby_EventScript_158948 applymovement 4, LilycoveCity_ContestLobby_Movement_158A43 waitmovement 0 @@ -56,7 +56,7 @@ LilycoveCity_ContestLobby_EventScript_1588DE:: @ 81588DE LilycoveCity_ContestLobby_EventScript_158918:: @ 8158918 msgbox LilycoveCity_ContestLobby_Text_188C41, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_1588DE msgbox LilycoveCity_ContestLobby_Text_188CBD, 4 closebutton @@ -205,9 +205,9 @@ LilycoveCity_ContestLobby_EventScript_158A6A:: @ 8158A6A fadescreen 1 showcontestwinner 0 msgbox LilycoveCity_ContestLobby_Text_1889FD, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_158AAE - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_ContestLobby_EventScript_158AE8 end @@ -217,7 +217,7 @@ LilycoveCity_ContestLobby_EventScript_158AAE:: @ 8158AAE special sub_80C4CEC setvar 0x4099, 0 specialvar RESULT, GiveMonArtistRibbon - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LilycoveCity_ContestLobby_EventScript_158B18 applymovement 11, LilycoveCity_ContestLobby_Movement_158B6D waitmovement 0 @@ -229,7 +229,7 @@ LilycoveCity_ContestLobby_EventScript_158AAE:: @ 8158AAE LilycoveCity_ContestLobby_EventScript_158AE8:: @ 8158AE8 msgbox LilycoveCity_ContestLobby_Text_188C41, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_158AAE msgbox LilycoveCity_ContestLobby_Text_188CBD, 4 closebutton @@ -305,7 +305,7 @@ LilycoveCity_ContestLobby_Movement_158B7C:: @ 8158B7C LilycoveCity_ContestLobby_EventScript_158B85:: @ 8158B85 lockall checkitem ITEM_CONTEST_PASS, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_ContestLobby_EventScript_158BBA checkflag 2 goto_if_eq LilycoveCity_ContestLobby_EventScript_158BAE @@ -328,11 +328,11 @@ LilycoveCity_ContestLobby_EventScript_158BBA:: @ 8158BBA LilycoveCity_ContestLobby_EventScript_158BC4:: @ 8158BC4 msgbox LilycoveCity_ContestLobby_Text_188521, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_ContestLobby_EventScript_158C35 call S_DoSaveDialog hidebox 0, 0, 15, 9 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_ContestLobby_EventScript_158C35 setflag 3 return @@ -361,18 +361,18 @@ LilycoveCity_ContestLobby_EventScript_158C42:: @ 8158C42 msgbox LilycoveCity_ContestLobby_Text_188703, 4 setvar CONTEST_RANK, 0 choosecontestpkmn - compare_var_to_imm 0x8004, 255 + compare 0x8004, 255 goto_if_eq LilycoveCity_ContestLobby_EventScript_158CEA special sub_80C43F4 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_ContestLobby_EventScript_158C96 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_158CC0 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq LilycoveCity_ContestLobby_EventScript_158CC0 - compare_var_to_imm RESULT, 3 + compare RESULT, 3 goto_if_eq LilycoveCity_ContestLobby_EventScript_158CA4 - compare_var_to_imm RESULT, 4 + compare RESULT, 4 goto_if_eq LilycoveCity_ContestLobby_EventScript_158CB2 end @@ -420,11 +420,11 @@ LilycoveCity_ContestLobby_EventScript_158D24:: @ 8158D24 copyvar 0x8004, RESULT special sub_808363C waitstate - compare_var_to_imm RESULT, 3 + compare RESULT, 3 goto_if_eq LilycoveCity_ContestLobby_EventScript_158D90 - compare_var_to_imm RESULT, 5 + compare RESULT, 5 goto_if_eq LilycoveCity_ContestLobby_EventScript_158DA1 - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq LilycoveCity_ContestLobby_EventScript_158DB2 message2 LilycoveCity_ContestLobby_Text_18872A waittext @@ -569,7 +569,7 @@ LilycoveCity_ContestLobby_Movement_158EAE:: @ 8158EAE LilycoveCity_ContestLobby_EventScript_158EB0:: @ 8158EB0 specialvar RESULT, sub_80C5044 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_158EE8 setvar 0x800b, 8 setvar CONTEST_RANK, 3 diff --git a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc index 98aec1d7a..0a51aff26 100644 --- a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc +++ b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc @@ -9,7 +9,7 @@ LilycoveCity_CoveLilyMotel_2F_EventScript_1583A1:: @ 81583A1 checkflag 2 call_if 1, LilycoveCity_CoveLilyMotel_2F_EventScript_1583DD specialvar RESULT, sub_8090FC0 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_CoveLilyMotel_2F_EventScript_1583D0 release end diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc index fdf1c76e3..43f110577 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc @@ -22,7 +22,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A39C:: @ 815A39C LilycoveCity_DepartmentStoreElevator_EventScript_15A402:: @ 815A402 setdynamicwarp LilycoveCity_DepartmentStore_1F, 255, 2, 1 - compare_var_to_imm 0x4043, 0 + compare 0x4043, 0 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 0 @@ -31,7 +31,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A402:: @ 815A402 LilycoveCity_DepartmentStoreElevator_EventScript_15A425:: @ 815A425 setdynamicwarp LilycoveCity_DepartmentStore_2F, 255, 2, 1 - compare_var_to_imm 0x4043, 1 + compare 0x4043, 1 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 1 @@ -40,7 +40,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A425:: @ 815A425 LilycoveCity_DepartmentStoreElevator_EventScript_15A448:: @ 815A448 setdynamicwarp LilycoveCity_DepartmentStore_3F, 255, 2, 1 - compare_var_to_imm 0x4043, 2 + compare 0x4043, 2 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 2 @@ -49,7 +49,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A448:: @ 815A448 LilycoveCity_DepartmentStoreElevator_EventScript_15A46B:: @ 815A46B setdynamicwarp LilycoveCity_DepartmentStore_4F, 255, 2, 1 - compare_var_to_imm 0x4043, 3 + compare 0x4043, 3 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 3 @@ -58,7 +58,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A46B:: @ 815A46B LilycoveCity_DepartmentStoreElevator_EventScript_15A48E:: @ 815A48E setdynamicwarp LilycoveCity_DepartmentStore_5F, 255, 2, 1 - compare_var_to_imm 0x4043, 4 + compare 0x4043, 4 goto_if_eq LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1 call LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8 setvar 0x4043, 4 diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc index 3295bf6ee..b01d74129 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc @@ -4,9 +4,9 @@ LilycoveCity_DepartmentStoreRooftop_MapScripts:: @ 815A13F LilycoveCity_DepartmentStoreRooftop_MapScript1_15A145:: @ 815A145 event_96 3 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A15F - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A163 end @@ -52,7 +52,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A1A0:: @ 815A1A0 lock faceplayer event_96 3 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A1BA msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C61F, 4 release @@ -127,22 +127,22 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A260:: @ 815A260 return LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 - compare_var_to_imm 0x4001, 0 + compare 0x4001, 0 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A23D - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A244 - compare_var_to_imm 0x4001, 2 + compare 0x4001, 2 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A24B - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_15A37A checkitemspace 0x4000, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_15A388 - compare_var_to_imm 0x4001, 0 + compare 0x4001, 0 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A252 - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A259 - compare_var_to_imm 0x4001, 2 + compare 0x4001, 2 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A260 updatemoney 0, 0 nop @@ -154,10 +154,10 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 bufferstd 2, 14 msgbox LilycoveCity_DepartmentStoreRooftop_Text_1A0C8C, 4 random 64 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if 5, LilycoveCity_DepartmentStoreRooftop_EventScript_15A36E checkitemspace 0x4000, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_15A388 playse 106 msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C780, 4 @@ -166,10 +166,10 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 bufferstd 2, 14 msgbox LilycoveCity_DepartmentStoreRooftop_Text_1A0C8C, 4 random 64 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if 5, LilycoveCity_DepartmentStoreRooftop_EventScript_15A36E checkitemspace 0x4000, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_DepartmentStoreRooftop_EventScript_15A388 playse 106 msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C780, 4 diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc index 4ee36a21d..311dac1ab 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc @@ -9,12 +9,12 @@ LilycoveCity_DepartmentStore_1F_EventScript_159D5E:: @ 8159D5E lock faceplayer dodailyevents - compare_var_to_imm 0x4045, 0 + compare 0x4045, 0 goto_if 5, LilycoveCity_DepartmentStore_1F_EventScript_159EB1 checkflag 2250 goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E4C msgbox LilycoveCity_DepartmentStore_1F_Text_1C4B5E, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E56 setflag 2250 message LilycoveCity_DepartmentStore_1F_Text_1C4CC6 @@ -33,24 +33,24 @@ LilycoveCity_DepartmentStore_1F_EventScript_159D5E:: @ 8159D5E delay 10 applymovement 2, LilycoveCity_DepartmentStore_1F_Movement_1A0839 waitmovement 0 - compare_var_to_imm 0x8004, 0 + compare 0x8004, 0 goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E60 inccounter GAME_STAT_WON_POKEMON_LOTTERY - compare_var_to_imm 0x8006, 0 + compare 0x8006, 0 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E3A - compare_var_to_imm 0x8006, 1 + compare 0x8006, 1 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E43 bufferitem 0, 0x8005 - compare_var_to_imm 0x8004, 1 + compare 0x8004, 1 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E78 - compare_var_to_imm 0x8004, 2 + compare 0x8004, 2 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E81 - compare_var_to_imm 0x8004, 3 + compare 0x8004, 3 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E8A - compare_var_to_imm 0x8004, 4 + compare 0x8004, 4 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E93 giveitem 0x8005 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E9C goto LilycoveCity_DepartmentStore_1F_EventScript_159E6E end @@ -112,7 +112,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_159EA7:: @ 8159EA7 LilycoveCity_DepartmentStore_1F_EventScript_159EB1:: @ 8159EB1 msgbox LilycoveCity_DepartmentStore_1F_Text_1C4FCC, 4 giveitem 0x4045 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159EA7 setvar 0x4045, 0 release diff --git a/data/scripts/maps/LilycoveCity_Harbor.inc b/data/scripts/maps/LilycoveCity_Harbor.inc index 8998d6268..94b2d53a9 100644 --- a/data/scripts/maps/LilycoveCity_Harbor.inc +++ b/data/scripts/maps/LilycoveCity_Harbor.inc @@ -10,7 +10,7 @@ LilycoveCity_Harbor_EventScript_1598A2:: @ 81598A2 lock faceplayer checkitem ITEM_EON_TICKET, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_Harbor_EventScript_1599EE goto LilycoveCity_Harbor_EventScript_1598BA end @@ -25,7 +25,7 @@ LilycoveCity_Harbor_EventScript_1598BA:: @ 81598BA LilycoveCity_Harbor_EventScript_1598CD:: @ 81598CD msgbox LilycoveCity_Harbor_Text_18B36F, 4 checkitem ITEM_SS_TICKET, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_Harbor_EventScript_159929 message LilycoveCity_Harbor_Text_18B406 waittext @@ -48,7 +48,7 @@ LilycoveCity_Harbor_EventScript_159929:: @ 8159929 LilycoveCity_Harbor_EventScript_159933:: @ 8159933 msgbox LilycoveCity_Harbor_Text_18B47D, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_Harbor_EventScript_15997E setvar 0x40b4, 5 call LilycoveCity_Harbor_EventScript_15998A @@ -59,7 +59,7 @@ LilycoveCity_Harbor_EventScript_159933:: @ 8159933 LilycoveCity_Harbor_EventScript_15995B:: @ 815995B msgbox LilycoveCity_Harbor_Text_18B499, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_Harbor_EventScript_15997E call LilycoveCity_Harbor_EventScript_15998A warp BattleTower_Outside, 255, 19, 23 @@ -80,9 +80,9 @@ LilycoveCity_Harbor_EventScript_15998A:: @ 815998A waitmovement 0 delay 30 spriteinvisible LAST_TALKED, 13, 10 - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, LilycoveCity_Harbor_EventScript_1599D9 - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, LilycoveCity_Harbor_EventScript_1599CE delay 30 spriteinvisible 255, 0, 0 @@ -129,9 +129,9 @@ LilycoveCity_Harbor_EventScript_1599EE:: @ 81599EE waitmovement 0 delay 30 disappear 4 - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, LilycoveCity_Harbor_EventScript_1599D9 - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, LilycoveCity_Harbor_EventScript_1599CE delay 30 spriteinvisible 255, 0, 0 diff --git a/data/scripts/maps/LilycoveCity_House2.inc b/data/scripts/maps/LilycoveCity_House2.inc index cbf015eb3..d3399f5ac 100644 --- a/data/scripts/maps/LilycoveCity_House2.inc +++ b/data/scripts/maps/LilycoveCity_House2.inc @@ -8,7 +8,7 @@ LilycoveCity_House2_EventScript_159BA3:: @ 8159BA3 goto_if_eq LilycoveCity_House2_EventScript_159BDA msgbox LilycoveCity_House2_Text_18B83C, 4 giveitem ITEM_TM44 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_House2_EventScript_1A029B setflag 234 msgbox LilycoveCity_House2_Text_18B883, 4 diff --git a/data/scripts/maps/LilycoveCity_House3.inc b/data/scripts/maps/LilycoveCity_House3.inc index 452c0567f..fa5a30862 100644 --- a/data/scripts/maps/LilycoveCity_House3.inc +++ b/data/scripts/maps/LilycoveCity_House3.inc @@ -11,7 +11,7 @@ LilycoveCity_House3_EventScript_159BF3:: @ 8159BF3 lock faceplayer msgbox LilycoveCity_House3_Text_18B8CC, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_House3_EventScript_159C1D msgbox LilycoveCity_House3_Text_18BA2B, 4 closebutton diff --git a/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc b/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc index 7611b0ef5..db55695e6 100644 --- a/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc +++ b/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc @@ -11,9 +11,9 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_158425:: @ 8158425 message LilycoveCity_LilycoveMuseum_1F_Text_1873B9 waittext multichoice 20, 8, 16, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_158458 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_15844F end @@ -23,9 +23,9 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_15844F:: @ 815844F LilycoveCity_LilycoveMuseum_1F_EventScript_158458:: @ 8158458 msgbox LilycoveCity_LilycoveMuseum_1F_Text_187495, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_158477 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_158481 end diff --git a/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc b/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc index 6fb0f07b1..f63068d74 100644 --- a/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc +++ b/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc @@ -125,7 +125,7 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_15875C:: @ 815875C applymovement 1, LilycoveCity_LilycoveMuseum_2F_Movement_1A0839 msgbox LilycoveCity_LilycoveMuseum_2F_Text_188120, 4 givedecoration 44 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_158783 setflag 236 closebutton diff --git a/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc b/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc index 978eb6569..02558e9d3 100644 --- a/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc +++ b/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc @@ -16,19 +16,19 @@ LilycoveCity_MoveDeletersHouse_EventScript_159ADE:: @ 8159ADE msgbox LilycoveCity_MoveDeletersHouse_Text_18B68C, 4 special sub_80F9A0C waitstate - compare_var_to_imm 0x8004, 255 + compare 0x8004, 255 goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_159B7B special sub_80FA148 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_159B71 special ScrSpecial_CountPokemonMoves - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_159B64 msgbox LilycoveCity_MoveDeletersHouse_Text_18B6B0, 4 fadescreen 1 special sub_80F9EEC fadescreen 0 - compare_var_to_imm 0x8005, 4 + compare 0x8005, 4 goto_if_eq LilycoveCity_MoveDeletersHouse_EventScript_159ADE special ScrSpecial_GetPokemonNicknameAndMoveName msgbox LilycoveCity_MoveDeletersHouse_Text_18B6F2, 5 diff --git a/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc b/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc index eb1882043..4d6401502 100644 --- a/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc +++ b/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc @@ -61,9 +61,9 @@ LilycoveCity_PokemonTrainerFanClub_Movement_15940C:: @ 815940C step_end LilycoveCity_PokemonTrainerFanClub_MapScript1_159412:: @ 8159412 - compare_var_to_imm 0x4095, 1 + compare 0x4095, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159515 - compare_var_to_imm 0x4095, 2 + compare 0x4095, 2 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159429 end @@ -71,35 +71,35 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159429:: @ 8159429 special sub_810FCE8 setvar 0x8004, 8 specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594D5 setvar 0x8004, 9 specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594DD setvar 0x8004, 10 specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594E5 setvar 0x8004, 11 specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594ED setvar 0x8004, 12 specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594F5 setvar 0x8004, 13 specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_1594FD setvar 0x8004, 14 specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_159505 setvar 0x8004, 15 specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LilycoveCity_PokemonTrainerFanClub_EventScript_15950D end @@ -148,13 +148,13 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15952F:: @ 815952F faceplayer setvar 0x8004, 13 special sub_810FDAC - compare_var_to_imm 0x4095, 0 + compare 0x4095, 0 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15959C specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15956E specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 7 + compare RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159592 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A400, 4 release @@ -162,7 +162,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15952F:: @ 815952F LilycoveCity_PokemonTrainerFanClub_EventScript_15956E:: @ 815956E specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159588 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A36A, 4 release @@ -188,13 +188,13 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1595A6:: @ 81595A6 faceplayer setvar 0x8004, 8 special sub_810FDAC - compare_var_to_imm 0x4095, 0 + compare 0x4095, 0 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159613 specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1595E5 specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 7 + compare RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159609 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A629, 4 release @@ -202,7 +202,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1595A6:: @ 81595A6 LilycoveCity_PokemonTrainerFanClub_EventScript_1595E5:: @ 81595E5 specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1595FF msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A584, 4 release @@ -228,13 +228,13 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15961D:: @ 815961D faceplayer setvar 0x8004, 9 special sub_810FDAC - compare_var_to_imm 0x4095, 0 + compare 0x4095, 0 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15968A specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15965C specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 7 + compare RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159680 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A814, 4 release @@ -242,7 +242,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15961D:: @ 815961D LilycoveCity_PokemonTrainerFanClub_EventScript_15965C:: @ 815965C specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159676 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18A71E, 4 release @@ -268,13 +268,13 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159694:: @ 8159694 faceplayer setvar 0x8004, 10 special sub_810FDAC - compare_var_to_imm 0x4095, 0 + compare 0x4095, 0 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159701 specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1596D3 specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 7 + compare RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1596F7 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AB0A, 4 release @@ -282,7 +282,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159694:: @ 8159694 LilycoveCity_PokemonTrainerFanClub_EventScript_1596D3:: @ 81596D3 specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1596ED msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AA39, 4 release @@ -309,10 +309,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15970B:: @ 815970B setvar 0x8004, 11 special sub_810FDAC specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15973F specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 7 + compare RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159763 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18ACC7, 4 release @@ -320,7 +320,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15970B:: @ 815970B LilycoveCity_PokemonTrainerFanClub_EventScript_15973F:: @ 815973F specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159759 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AC15, 4 release @@ -342,10 +342,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15976D:: @ 815976D setvar 0x8004, 12 special sub_810FDAC specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1597A1 specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 7 + compare RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1597C5 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AE63, 4 release @@ -353,7 +353,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_15976D:: @ 815976D LilycoveCity_PokemonTrainerFanClub_EventScript_1597A1:: @ 81597A1 specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_1597BB msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AD6D, 4 release @@ -375,10 +375,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1597CF:: @ 81597CF setvar 0x8004, 14 special sub_810FDAC specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159803 specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 7 + compare RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159827 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18B030, 4 release @@ -386,7 +386,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_1597CF:: @ 81597CF LilycoveCity_PokemonTrainerFanClub_EventScript_159803:: @ 8159803 specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15981D msgbox LilycoveCity_PokemonTrainerFanClub_Text_18AF62, 4 release @@ -408,10 +408,10 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159831:: @ 8159831 setvar 0x8004, 15 special sub_810FDAC specialvar RESULT, sub_810FD60 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159865 specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 7 + compare RESULT, 7 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_159889 msgbox LilycoveCity_PokemonTrainerFanClub_Text_18B1FD, 4 release @@ -419,7 +419,7 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159831:: @ 8159831 LilycoveCity_PokemonTrainerFanClub_EventScript_159865:: @ 8159865 specialvar RESULT, sub_810FCB0 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LilycoveCity_PokemonTrainerFanClub_EventScript_15987F msgbox LilycoveCity_PokemonTrainerFanClub_Text_18B16E, 4 release diff --git a/data/scripts/maps/LittlerootTown.inc b/data/scripts/maps/LittlerootTown.inc index e3f9b1dc7..0f1dc96d9 100644 --- a/data/scripts/maps/LittlerootTown.inc +++ b/data/scripts/maps/LittlerootTown.inc @@ -5,19 +5,19 @@ LittlerootTown_MapScripts:: @ 814D509 LittlerootTown_MapScript1_14D514:: @ 814D514 setflag 2063 - compare_var_to_imm 0x4092, 2 + compare 0x4092, 2 call_if 1, LittlerootTown_EventScript_14D57B checkflag 82 call_if 0, LittlerootTown_EventScript_14D583 - compare_var_to_imm 0x4050, 3 + compare 0x4050, 3 call_if 1, LittlerootTown_EventScript_14D5A6 - compare_var_to_imm 0x4082, 4 + compare 0x4082, 4 call_if 1, LittlerootTown_EventScript_14D570 - compare_var_to_imm 0x408c, 4 + compare 0x408c, 4 call_if 1, LittlerootTown_EventScript_14D570 - compare_var_to_imm 0x40c7, 1 + compare 0x40c7, 1 call_if 1, LittlerootTown_EventScript_14D567 - compare_var_to_imm 0x408d, 3 + compare 0x408d, 3 call_if 1, LittlerootTown_EventScript_14D563 end @@ -40,7 +40,7 @@ LittlerootTown_EventScript_14D57B:: @ 814D57B return LittlerootTown_EventScript_14D583:: @ 814D583 - compare_var_to_imm 0x4050, 0 + compare 0x4050, 0 goto_if_eq LittlerootTown_EventScript_14D59A movespriteperm 1, 10, 1 spritebehave 1, 7 @@ -55,9 +55,9 @@ LittlerootTown_EventScript_14D5A6:: @ 814D5A6 clearflag 752 spritebehave 4, 8 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D5C5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_EventScript_14D5CD return @@ -191,7 +191,7 @@ LittlerootTown_EventScript_14D6DF:: @ 814D6DF goto_if_eq LittlerootTown_EventScript_14D72F checkflag 82 goto_if_eq LittlerootTown_EventScript_14D722 - compare_var_to_imm 0x4050, 0 + compare 0x4050, 0 goto_if 5, LittlerootTown_EventScript_14D708 msgbox LittlerootTown_Text_16ACEB, 4 release @@ -334,9 +334,9 @@ LittlerootTown_EventScript_14D7FF:: @ 814D7FF LittlerootTown_EventScript_14D808:: @ 814D808 lockall checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D822 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_EventScript_14D82B releaseall end @@ -352,9 +352,9 @@ LittlerootTown_EventScript_14D82B:: @ 814D82B LittlerootTown_EventScript_14D834:: @ 814D834 lockall checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D84E - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_EventScript_14D857 releaseall end @@ -407,27 +407,27 @@ LittlerootTown_EventScript_14D8AA:: @ 814D8AA LittlerootTown_EventScript_14D8B6:: @ 814D8B6 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D93C - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_EventScript_14D947 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D926 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_EventScript_14D931 msgbox LittlerootTown_Text_16A8EE, 4 closebutton checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D952 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_EventScript_14D995 call LittlerootTown_EventScript_14DD38 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14DAAA - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_EventScript_14DAED goto LittlerootTown_EventScript_14DD2B end @@ -453,32 +453,32 @@ LittlerootTown_EventScript_14D947:: @ 814D947 return LittlerootTown_EventScript_14D952:: @ 814D952 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, LittlerootTown_EventScript_14D9D8 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, LittlerootTown_EventScript_14D9ED - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, LittlerootTown_EventScript_14DA02 - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, LittlerootTown_EventScript_14DA17 - compare_var_to_imm 0x8008, 4 + compare 0x8008, 4 call_if 1, LittlerootTown_EventScript_14DA2C - compare_var_to_imm 0x8008, 5 + compare 0x8008, 5 call_if 1, LittlerootTown_EventScript_14DA41 return LittlerootTown_EventScript_14D995:: @ 814D995 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, LittlerootTown_EventScript_14D9D8 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, LittlerootTown_EventScript_14D9ED - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, LittlerootTown_EventScript_14DA56 - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, LittlerootTown_EventScript_14DA6B - compare_var_to_imm 0x8008, 4 + compare 0x8008, 4 call_if 1, LittlerootTown_EventScript_14DA80 - compare_var_to_imm 0x8008, 5 + compare 0x8008, 5 call_if 1, LittlerootTown_EventScript_14DA95 return @@ -553,32 +553,32 @@ LittlerootTown_EventScript_14DA95:: @ 814DA95 return LittlerootTown_EventScript_14DAAA:: @ 814DAAA - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, LittlerootTown_EventScript_14DB30 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, LittlerootTown_EventScript_14DB3B - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, LittlerootTown_EventScript_14DB46 - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, LittlerootTown_EventScript_14DB6C - compare_var_to_imm 0x8008, 4 + compare 0x8008, 4 call_if 1, LittlerootTown_EventScript_14DB92 - compare_var_to_imm 0x8008, 5 + compare 0x8008, 5 call_if 1, LittlerootTown_EventScript_14DBB8 return LittlerootTown_EventScript_14DAED:: @ 814DAED - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, LittlerootTown_EventScript_14DB30 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, LittlerootTown_EventScript_14DB3B - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, LittlerootTown_EventScript_14DBDE - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, LittlerootTown_EventScript_14DC04 - compare_var_to_imm 0x8008, 4 + compare 0x8008, 4 call_if 1, LittlerootTown_EventScript_14DC2A - compare_var_to_imm 0x8008, 5 + compare 0x8008, 5 call_if 1, LittlerootTown_EventScript_14DC50 return @@ -842,9 +842,9 @@ LittlerootTown_EventScript_14DCE2:: @ 814DCE2 lock faceplayer checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D926 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_EventScript_14D931 call LittlerootTown_EventScript_14DD38 applymovement 4, LittlerootTown_Movement_1A0841 diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc index 7f3f3f5cf..e878d7e2e 100644 --- a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc @@ -5,7 +5,7 @@ LittlerootTown_BrendansHouse_1F_MapScripts:: @ 815263B .byte 0 LittlerootTown_BrendansHouse_1F_MapScript1_15264B:: @ 815264B - compare_var_to_imm 0x4092, 6 + compare 0x4092, 6 call_if 0, LittlerootTown_BrendansHouse_1F_EventScript_152660 checkflag 274 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_152673 @@ -18,7 +18,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_152660:: @ 8152660 LittlerootTown_BrendansHouse_1F_EventScript_152673:: @ 8152673 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_152680 return @@ -27,11 +27,11 @@ LittlerootTown_BrendansHouse_1F_EventScript_152680:: @ 8152680 return LittlerootTown_BrendansHouse_1F_MapScript1_15268A:: @ 815268A - compare_var_to_imm 0x4092, 3 + compare 0x4092, 3 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1526C4 - compare_var_to_imm 0x4092, 5 + compare 0x4092, 5 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1526AC - compare_var_to_imm 0x4092, 6 + compare 0x4092, 6 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1526B8 end diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc index 61b981995..3b39fe2ed 100644 --- a/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc +++ b/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc @@ -6,7 +6,7 @@ LittlerootTown_BrendansHouse_2F_MapScripts:: @ 81527A4 LittlerootTown_BrendansHouse_2F_MapScript1_1527AF:: @ 81527AF checkflag 130 call_if 0, LittlerootTown_BrendansHouse_2F_EventScript_1527CE - compare_var_to_imm 0x4092, 4 + compare 0x4092, 4 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6950 call LittlerootTown_BrendansHouse_2F_EventScript_1A2F3D setvar 0x4089, 0 @@ -23,16 +23,16 @@ LittlerootTown_BrendansHouse_2F_MapScript2_1527DA:: @ 81527DA LittlerootTown_BrendansHouse_2F_EventScript_1527E4:: @ 81527E4 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_1A2F68 end @ 81527F1 lockall checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_15280A - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_152814 end @@ -51,9 +51,9 @@ gUnknown_0815281E:: @ 815281E LittlerootTown_BrendansHouse_2F_EventScript_15281E:: @ 815281E lockall checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_152837 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_15285D end diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc index 022e98b2a..9b5a372fa 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc @@ -5,7 +5,7 @@ LittlerootTown_MaysHouse_1F_MapScripts:: @ 8152879 .byte 0 LittlerootTown_MaysHouse_1F_MapScript1_152889:: @ 8152889 - compare_var_to_imm 0x4092, 6 + compare 0x4092, 6 call_if 0, LittlerootTown_MaysHouse_1F_EventScript_15289E checkflag 274 call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1528B1 @@ -18,7 +18,7 @@ LittlerootTown_MaysHouse_1F_EventScript_15289E:: @ 815289E LittlerootTown_MaysHouse_1F_EventScript_1528B1:: @ 81528B1 checkgender - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LittlerootTown_MaysHouse_1F_EventScript_1528BE return @@ -27,11 +27,11 @@ LittlerootTown_MaysHouse_1F_EventScript_1528BE:: @ 81528BE return LittlerootTown_MaysHouse_1F_MapScript1_1528C8:: @ 81528C8 - compare_var_to_imm 0x4092, 3 + compare 0x4092, 3 call_if 1, LittlerootTown_MaysHouse_1F_EventScript_152902 - compare_var_to_imm 0x4092, 5 + compare 0x4092, 5 call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1528EA - compare_var_to_imm 0x4092, 6 + compare 0x4092, 6 call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1528F6 end @@ -117,9 +117,9 @@ LittlerootTown_MaysHouse_1F_Movement_1529C0:: @ 81529C0 @ 81529C7 lockall checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1529E1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1529E2 releaseall end @@ -139,7 +139,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1529EB:: @ 81529EB goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_152A21 checkflag 301 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_152A17 - compare_var_to_imm 0x408d, 3 + compare 0x408d, 3 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_152A2B special GetRivalSonDaughterString msgbox LittlerootTown_BrendansHouse_1F_Text_1731C6, 4 diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc index cf2033919..712bebf03 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc @@ -6,7 +6,7 @@ LittlerootTown_MaysHouse_2F_MapScripts:: @ 8152A50 LittlerootTown_MaysHouse_2F_MapScript1_152A5B:: @ 8152A5B checkflag 130 call_if 0, LittlerootTown_MaysHouse_2F_EventScript_152A7A - compare_var_to_imm 0x4092, 4 + compare 0x4092, 4 call_if 1, LittlerootTown_MaysHouse_2F_EventScript_1B6950 call LittlerootTown_MaysHouse_2F_EventScript_1A2F3D setvar 0x4089, 0 @@ -23,7 +23,7 @@ LittlerootTown_MaysHouse_2F_MapScript2_152A86:: @ 8152A86 LittlerootTown_MaysHouse_2F_EventScript_152A90:: @ 8152A90 checkgender - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_1A2F68 end @@ -33,9 +33,9 @@ LittlerootTown_MaysHouse_2F_EventScript_152A9D:: @ 8152A9D checkflag 292 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_152BB5 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152AD4 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B4A playse 9 disappear LAST_TALKED @@ -57,11 +57,11 @@ LittlerootTown_BrendansHouse_2F_EventScript_152AD4:: @ 8152AD4 waitmovement 0 msgbox LittlerootTown_BrendansHouse_2F_Text_1733AF, 4 closebutton - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B29 - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B34 - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B3F return @@ -91,11 +91,11 @@ LittlerootTown_BrendansHouse_2F_EventScript_152B4A:: @ 8152B4A waitmovement 0 msgbox LittlerootTown_BrendansHouse_2F_Text_1735FC, 4 closebutton - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B9F - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B9F - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152BAA return @@ -113,9 +113,9 @@ LittlerootTown_BrendansHouse_2F_EventScript_152BB5:: @ 8152BB5 applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0839 waitmovement 0 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152BDB - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152BED setflag 293 releaseall @@ -194,9 +194,9 @@ gUnknown_08152C39:: @ 8152C39 LittlerootTown_MaysHouse_2F_EventScript_152C39:: @ 8152C39 lockall checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_152C52 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_152C5C end diff --git a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc index d6576be92..834ae8521 100644 --- a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc +++ b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc @@ -30,9 +30,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152CBE:: @ 8152CBE playfanfare 370 waitfanfare msgbox LittlerootTown_ProfessorBirchsLab_Text_173EF8, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152CEA - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152CFA end @@ -44,9 +44,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152CEA:: @ 8152CEA LittlerootTown_ProfessorBirchsLab_EventScript_152CFA:: @ 8152CFA msgbox LittlerootTown_ProfessorBirchsLab_Text_173F3D, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D19 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D2B end @@ -59,9 +59,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152D19:: @ 8152D19 LittlerootTown_ProfessorBirchsLab_EventScript_152D2B:: @ 8152D2B msgbox LittlerootTown_ProfessorBirchsLab_Text_174075, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D19 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D2B end @@ -85,7 +85,7 @@ LittlerootTown_ProfessorBirchsLab_Movement_152D5B:: @ 8152D5B LittlerootTown_ProfessorBirchsLab_EventScript_152D63:: @ 8152D63 lock faceplayer - compare_var_to_imm 0x4084, 3 + compare 0x4084, 3 goto_if 4, LittlerootTown_ProfessorBirchsLab_EventScript_152D90 checkflag 88 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152D86 @@ -109,7 +109,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152D9A:: @ 8152D9A faceplayer checkflag 896 goto_if 0, LittlerootTown_ProfessorBirchsLab_EventScript_1A037F - compare_var_to_imm 0x4084, 5 + compare 0x4084, 5 goto_if_eq LittlerootTown_ProfessorBirchsLab_EventScript_152E7B msgbox LittlerootTown_ProfessorBirchsLab_Text_1740B4, 4 release @@ -124,9 +124,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152DBA:: @ 8152DBA applymovement 255, LittlerootTown_ProfessorBirchsLab_Movement_1A0843 waitmovement 0 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E13 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E40 setvar 0x4084, 5 setflag 116 @@ -139,7 +139,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152DBA:: @ 8152DBA LittlerootTown_ProfessorBirchsLab_EventScript_152E13:: @ 8152E13 msgbox LittlerootTown_ProfessorBirchsLab_Text_1743D4, 4 giveitem ITEM_POKE_BALL, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E85 msgbox LittlerootTown_ProfessorBirchsLab_Text_17443D, 4 setvar RESULT, 0 @@ -148,7 +148,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152E13:: @ 8152E13 LittlerootTown_ProfessorBirchsLab_EventScript_152E40:: @ 8152E40 msgbox LittlerootTown_ProfessorBirchsLab_Text_17453C, 4 giveitem ITEM_POKE_BALL, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E8E msgbox LittlerootTown_ProfessorBirchsLab_Text_17458C, 4 setvar RESULT, 1 @@ -188,9 +188,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152EA3:: @ 8152EA3 lock faceplayer checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152EBE - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152EC7 release end diff --git a/data/scripts/maps/MauvilleCity.inc b/data/scripts/maps/MauvilleCity.inc index 6ebd36749..5dd9983f4 100644 --- a/data/scripts/maps/MauvilleCity.inc +++ b/data/scripts/maps/MauvilleCity.inc @@ -105,9 +105,9 @@ MauvilleCity_EventScript_14C0F9:: @ 814C0F9 end MauvilleCity_EventScript_14C154:: @ 814C154 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, MauvilleCity_EventScript_14C23C - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_EventScript_14C285 closebutton switch FACING @@ -286,7 +286,7 @@ MauvilleCity_EventScript_14C2F2:: @ 814C2F2 faceplayer checkflag 209 goto_if_eq MauvilleCity_EventScript_14C368 - compare_var_to_imm 0x40ba, 2 + compare 0x40ba, 2 goto_if_eq MauvilleCity_EventScript_14C33C checkflag 208 goto_if_eq MauvilleCity_EventScript_14C332 @@ -305,7 +305,7 @@ MauvilleCity_EventScript_14C332:: @ 814C332 MauvilleCity_EventScript_14C33C:: @ 814C33C msgbox MauvilleCity_Text_1663EB, 4 giveitem ITEM_TM24 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_EventScript_1A029B setflag 209 msgbox MauvilleCity_Text_166488, 4 diff --git a/data/scripts/maps/MauvilleCity_BikeShop.inc b/data/scripts/maps/MauvilleCity_BikeShop.inc index b418e8a79..0b577885e 100644 --- a/data/scripts/maps/MauvilleCity_BikeShop.inc +++ b/data/scripts/maps/MauvilleCity_BikeShop.inc @@ -10,17 +10,17 @@ MauvilleCity_BikeShop_EventScript_156796:: @ 8156796 goto_if_eq MauvilleCity_BikeShop_EventScript_1567D1 msgbox MauvilleCity_BikeShop_Text_180F9F, 4 msgbox MauvilleCity_BikeShop_Text_181016, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MauvilleCity_BikeShop_EventScript_156824 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_BikeShop_EventScript_156817 end MauvilleCity_BikeShop_EventScript_1567D1:: @ 81567D1 msgbox MauvilleCity_BikeShop_Text_181016, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MauvilleCity_BikeShop_EventScript_156824 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_BikeShop_EventScript_156817 end @@ -64,19 +64,19 @@ MauvilleCity_BikeShop_EventScript_156861:: @ 8156861 MauvilleCity_BikeShop_EventScript_15686E:: @ 815686E msgbox MauvilleCity_BikeShop_Text_1813A0, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MauvilleCity_BikeShop_EventScript_15688D - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_BikeShop_EventScript_1568BF end MauvilleCity_BikeShop_EventScript_15688D:: @ 815688D msgbox MauvilleCity_BikeShop_Text_1813D4, 4 checkitem ITEM_ACRO_BIKE, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MauvilleCity_BikeShop_EventScript_1568C9 checkitem ITEM_MACH_BIKE, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MauvilleCity_BikeShop_EventScript_1568EA msgbox MauvilleCity_BikeShop_Text_181498, 4 release diff --git a/data/scripts/maps/MauvilleCity_GameCorner.inc b/data/scripts/maps/MauvilleCity_GameCorner.inc index bc49cd481..6e9b11947 100644 --- a/data/scripts/maps/MauvilleCity_GameCorner.inc +++ b/data/scripts/maps/MauvilleCity_GameCorner.inc @@ -6,7 +6,7 @@ MauvilleCity_GameCorner_EventScript_156A34:: @ 8156A34 faceplayer msgbox MauvilleCity_GameCorner_Text_181C35, 4 checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156B32 message MauvilleCity_GameCorner_Text_181CB4 waittext @@ -33,10 +33,10 @@ MauvilleCity_GameCorner_EventScript_156A60:: @ 8156A60 MauvilleCity_GameCorner_EventScript_156AAE:: @ 8156AAE checkcoins 16385 - compare_var_to_imm 0x4001, 9950 + compare 0x4001, 9950 goto_if 4, MauvilleCity_GameCorner_EventScript_156B5C checkmoney 0x3e8, 0 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156B3C givecoins 50 paymoney 0x3e8, 0 @@ -52,10 +52,10 @@ MauvilleCity_GameCorner_EventScript_156AAE:: @ 8156AAE MauvilleCity_GameCorner_EventScript_156AF0:: @ 8156AF0 checkcoins 16385 - compare_var_to_imm 0x4001, 9500 + compare 0x4001, 9500 goto_if 4, MauvilleCity_GameCorner_EventScript_156B5C checkmoney 0x2710, 0 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156B3C givecoins 500 paymoney 0x2710, 0 @@ -100,7 +100,7 @@ MauvilleCity_GameCorner_EventScript_156B6C:: @ 8156B6C faceplayer msgbox MauvilleCity_GameCorner_Text_181DE1, 4 checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MauvilleCity_GameCorner_EventScript_156B88 release end @@ -144,7 +144,7 @@ MauvilleCity_GameCorner_EventScript_156BFE:: @ 8156BFE MauvilleCity_GameCorner_EventScript_156C0C:: @ 8156C0C msgbox MauvilleCity_GameCorner_Text_181E33, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156D0D switch 0x4001 case 1, MauvilleCity_GameCorner_EventScript_156C46 @@ -154,11 +154,11 @@ MauvilleCity_GameCorner_EventScript_156C0C:: @ 8156C0C MauvilleCity_GameCorner_EventScript_156C46:: @ 8156C46 checkcoins 16386 - compare_var_to_imm 0x4002, 1000 + compare 0x4002, 1000 goto_if 0, MauvilleCity_GameCorner_EventScript_156CF4 bufferdecor 1, 88 checkdecor 88 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 removecoins 1000 adddecor 88 @@ -170,11 +170,11 @@ MauvilleCity_GameCorner_EventScript_156C46:: @ 8156C46 MauvilleCity_GameCorner_EventScript_156C80:: @ 8156C80 checkcoins 16386 - compare_var_to_imm 0x4002, 1000 + compare 0x4002, 1000 goto_if 0, MauvilleCity_GameCorner_EventScript_156CF4 bufferdecor 1, 89 checkdecor 89 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 removecoins 1000 adddecor 89 @@ -186,11 +186,11 @@ MauvilleCity_GameCorner_EventScript_156C80:: @ 8156C80 MauvilleCity_GameCorner_EventScript_156CBA:: @ 8156CBA checkcoins 16386 - compare_var_to_imm 0x4002, 1000 + compare 0x4002, 1000 goto_if 0, MauvilleCity_GameCorner_EventScript_156CF4 bufferdecor 1, 90 checkdecor 90 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 removecoins 1000 adddecor 90 @@ -221,7 +221,7 @@ MauvilleCity_GameCorner_EventScript_156D1A:: @ 8156D1A faceplayer msgbox MauvilleCity_GameCorner_Text_181DE1, 4 checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MauvilleCity_GameCorner_EventScript_156D36 release end @@ -277,7 +277,7 @@ MauvilleCity_GameCorner_EventScript_156DDE:: @ 8156DDE MauvilleCity_GameCorner_EventScript_156DEC:: @ 8156DEC msgbox MauvilleCity_GameCorner_Text_181E33, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F77 switch 0x4001 case 1, MauvilleCity_GameCorner_EventScript_156E3C @@ -289,10 +289,10 @@ MauvilleCity_GameCorner_EventScript_156DEC:: @ 8156DEC MauvilleCity_GameCorner_EventScript_156E3C:: @ 8156E3C checkcoins 16386 - compare_var_to_imm 0x4002, 1500 + compare 0x4002, 1500 goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM32, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 1500 additem ITEM_TM32, 1 @@ -304,10 +304,10 @@ MauvilleCity_GameCorner_EventScript_156E3C:: @ 8156E3C MauvilleCity_GameCorner_EventScript_156E76:: @ 8156E76 checkcoins 16386 - compare_var_to_imm 0x4002, 3500 + compare 0x4002, 3500 goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM29, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 3500 additem ITEM_TM29, 1 @@ -319,10 +319,10 @@ MauvilleCity_GameCorner_EventScript_156E76:: @ 8156E76 MauvilleCity_GameCorner_EventScript_156EB0:: @ 8156EB0 checkcoins 16386 - compare_var_to_imm 0x4002, 4000 + compare 0x4002, 4000 goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM35, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 4000 additem ITEM_TM35, 1 @@ -334,10 +334,10 @@ MauvilleCity_GameCorner_EventScript_156EB0:: @ 8156EB0 MauvilleCity_GameCorner_EventScript_156EEA:: @ 8156EEA checkcoins 16386 - compare_var_to_imm 0x4002, 4000 + compare 0x4002, 4000 goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM24, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 4000 additem ITEM_TM24, 1 @@ -349,10 +349,10 @@ MauvilleCity_GameCorner_EventScript_156EEA:: @ 8156EEA MauvilleCity_GameCorner_EventScript_156F24:: @ 8156F24 checkcoins 16386 - compare_var_to_imm 0x4002, 4000 + compare 0x4002, 4000 goto_if 0, MauvilleCity_GameCorner_EventScript_156F5E checkitemspace ITEM_TM13, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C removecoins 4000 additem ITEM_TM13, 1 @@ -392,7 +392,7 @@ MauvilleCity_GameCorner_EventScript_156F96:: @ 8156F96 checkflag 226 goto_if_eq MauvilleCity_GameCorner_EventScript_157072 msgbox MauvilleCity_GameCorner_Text_181F3D, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_157068 switch 0x4023 case 0, MauvilleCity_GameCorner_EventScript_156FDB @@ -403,7 +403,7 @@ MauvilleCity_GameCorner_EventScript_156F96:: @ 8156F96 MauvilleCity_GameCorner_EventScript_156FDB:: @ 8156FDB bufferdecor 1, 88 checkdecor 88 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_157059 msgbox MauvilleCity_GameCorner_Text_181F89, 4 givedecoration 88 @@ -414,7 +414,7 @@ MauvilleCity_GameCorner_EventScript_156FDB:: @ 8156FDB MauvilleCity_GameCorner_EventScript_157005:: @ 8157005 bufferdecor 1, 89 checkdecor 89 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_157059 msgbox MauvilleCity_GameCorner_Text_181F89, 4 givedecoration 89 @@ -425,7 +425,7 @@ MauvilleCity_GameCorner_EventScript_157005:: @ 8157005 MauvilleCity_GameCorner_EventScript_15702F:: @ 815702F bufferdecor 1, 90 checkdecor 90 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_157059 msgbox MauvilleCity_GameCorner_Text_181F89, 4 givedecoration 90 @@ -453,7 +453,7 @@ MauvilleCity_GameCorner_EventScript_15707C:: @ 815707C lock faceplayer checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MauvilleCity_GameCorner_EventScript_15709C msgbox MauvilleCity_GameCorner_Text_18201E, 4 goto MauvilleCity_GameCorner_EventScript_157108 @@ -463,7 +463,7 @@ MauvilleCity_GameCorner_EventScript_15709C:: @ 815709C checkflag 225 goto_if_eq MauvilleCity_GameCorner_EventScript_1570CA checkcoins 16385 - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 goto_if 4, MauvilleCity_GameCorner_EventScript_1570CA setflag 225 givecoins 20 @@ -522,7 +522,7 @@ MauvilleCity_GameCorner_EventScript_157125:: @ 8157125 MauvilleCity_GameCorner_EventScript_157135:: @ 8157135 lockall checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 0 specialvar RESULT, sub_810F424 @@ -533,7 +533,7 @@ MauvilleCity_GameCorner_EventScript_157135:: @ 8157135 MauvilleCity_GameCorner_EventScript_157155:: @ 8157155 lockall checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 1 specialvar RESULT, sub_810F424 @@ -544,7 +544,7 @@ MauvilleCity_GameCorner_EventScript_157155:: @ 8157155 MauvilleCity_GameCorner_EventScript_157175:: @ 8157175 lockall checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 2 specialvar RESULT, sub_810F424 @@ -555,7 +555,7 @@ MauvilleCity_GameCorner_EventScript_157175:: @ 8157175 MauvilleCity_GameCorner_EventScript_157195:: @ 8157195 lockall checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 3 specialvar RESULT, sub_810F424 @@ -566,7 +566,7 @@ MauvilleCity_GameCorner_EventScript_157195:: @ 8157195 MauvilleCity_GameCorner_EventScript_1571B5:: @ 81571B5 lockall checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 4 specialvar RESULT, sub_810F424 @@ -577,7 +577,7 @@ MauvilleCity_GameCorner_EventScript_1571B5:: @ 81571B5 MauvilleCity_GameCorner_EventScript_1571D5:: @ 81571D5 lockall checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 5 specialvar RESULT, sub_810F424 @@ -588,7 +588,7 @@ MauvilleCity_GameCorner_EventScript_1571D5:: @ 81571D5 MauvilleCity_GameCorner_EventScript_1571F5:: @ 81571F5 lockall checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 6 specialvar RESULT, sub_810F424 @@ -599,7 +599,7 @@ MauvilleCity_GameCorner_EventScript_1571F5:: @ 81571F5 MauvilleCity_GameCorner_EventScript_157215:: @ 8157215 lockall checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 7 specialvar RESULT, sub_810F424 @@ -610,7 +610,7 @@ MauvilleCity_GameCorner_EventScript_157215:: @ 8157215 MauvilleCity_GameCorner_EventScript_157235:: @ 8157235 lockall checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 8 specialvar RESULT, sub_810F424 @@ -621,7 +621,7 @@ MauvilleCity_GameCorner_EventScript_157235:: @ 8157235 MauvilleCity_GameCorner_EventScript_157255:: @ 8157255 lockall checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 9 specialvar RESULT, sub_810F424 @@ -632,7 +632,7 @@ MauvilleCity_GameCorner_EventScript_157255:: @ 8157255 MauvilleCity_GameCorner_EventScript_157275:: @ 8157275 lockall checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 10 specialvar RESULT, sub_810F424 @@ -643,7 +643,7 @@ MauvilleCity_GameCorner_EventScript_157275:: @ 8157275 MauvilleCity_GameCorner_EventScript_157295:: @ 8157295 lockall checkitem ITEM_COIN_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 11 specialvar RESULT, sub_810F424 diff --git a/data/scripts/maps/MauvilleCity_Gym.inc b/data/scripts/maps/MauvilleCity_Gym.inc index 1030d8f68..e5791d521 100644 --- a/data/scripts/maps/MauvilleCity_Gym.inc +++ b/data/scripts/maps/MauvilleCity_Gym.inc @@ -71,7 +71,7 @@ MauvilleCity_Gym_EventScript_1565AB:: @ 81565AB trainerbattle 1, OPPONENT_WATTSON, 0, MauvilleCity_Gym_Text_180C32, MauvilleCity_Gym_Text_180D64, MauvilleCity_Gym_EventScript_1565DB checkflag 167 goto_if 0, MauvilleCity_Gym_EventScript_15661D - compare_var_to_imm 0x40ba, 2 + compare 0x40ba, 2 goto_if_eq MauvilleCity_Gym_EventScript_156641 msgbox MauvilleCity_Gym_Text_180EDB, 4 release @@ -85,7 +85,7 @@ MauvilleCity_Gym_EventScript_1565DB:: @ 81565DB setflag 1208 setflag 2057 addvar 0x4085, 1 - compare_var_to_imm 0x4085, 6 + compare 0x4085, 6 call_if 1, MauvilleCity_Gym_EventScript_1A00FB setvar 0x8008, 3 call MauvilleCity_Gym_EventScript_1A01C0 @@ -97,7 +97,7 @@ MauvilleCity_Gym_EventScript_1565DB:: @ 81565DB MauvilleCity_Gym_EventScript_15661D:: @ 815661D giveitem ITEM_TM34 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_Gym_EventScript_1A029B msgbox MauvilleCity_Gym_Text_180E76, 4 setflag 167 @@ -113,7 +113,7 @@ MauvilleCity_Gym_EventScript_15664B:: @ 815664B lockall checkflag 1208 goto_if_eq MauvilleCity_Gym_EventScript_1566DA - compare_var_to_imm 0x4093, 1 + compare 0x4093, 1 goto_if_eq MauvilleCity_Gym_EventScript_1566DA setvar 0x4093, 1 setvar 0x8004, 0 @@ -124,7 +124,7 @@ MauvilleCity_Gym_EventScript_156670:: @ 8156670 lockall checkflag 1208 goto_if_eq MauvilleCity_Gym_EventScript_1566DA - compare_var_to_imm 0x4093, 2 + compare 0x4093, 2 goto_if_eq MauvilleCity_Gym_EventScript_1566DA setvar 0x4093, 2 setvar 0x8004, 1 @@ -135,7 +135,7 @@ MauvilleCity_Gym_EventScript_156695:: @ 8156695 lockall checkflag 1208 goto_if_eq MauvilleCity_Gym_EventScript_1566DA - compare_var_to_imm 0x4093, 3 + compare 0x4093, 3 goto_if_eq MauvilleCity_Gym_EventScript_1566DA setvar 0x4093, 3 setvar 0x8004, 2 diff --git a/data/scripts/maps/MauvilleCity_House2.inc b/data/scripts/maps/MauvilleCity_House2.inc index 3f9ba59f3..a500a246e 100644 --- a/data/scripts/maps/MauvilleCity_House2.inc +++ b/data/scripts/maps/MauvilleCity_House2.inc @@ -8,7 +8,7 @@ MauvilleCity_House2_EventScript_1572C0:: @ 81572C0 goto_if_eq MauvilleCity_House2_EventScript_15733D msgbox MauvilleCity_House2_Text_18244E, 4 checkitem ITEM_HARBOR_MAIL, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MauvilleCity_House2_EventScript_1572E5 release end @@ -20,9 +20,9 @@ MauvilleCity_House2_EventScript_1572E5:: @ 81572E5 applymovement LAST_TALKED, MauvilleCity_House2_Movement_1A0835 waitmovement 0 msgbox MauvilleCity_House2_Text_1824D8, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MauvilleCity_House2_EventScript_15731B - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MauvilleCity_House2_EventScript_157347 end diff --git a/data/scripts/maps/MeteorFalls_1F_2R.inc b/data/scripts/maps/MeteorFalls_1F_2R.inc index a5c89055b..b3a0c51fe 100644 --- a/data/scripts/maps/MeteorFalls_1F_2R.inc +++ b/data/scripts/maps/MeteorFalls_1F_2R.inc @@ -4,7 +4,7 @@ MeteorFalls_1F_2R_MapScripts:: @ 815C678 MeteorFalls_1F_2R_EventScript_15C679:: @ 815C679 trainerbattle 0, OPPONENT_NICOLAS_1, 0, MeteorFalls_1F_2R_Text_1939C5, MeteorFalls_1F_2R_Text_193A35 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MeteorFalls_1F_2R_EventScript_15C6A0 msgbox MeteorFalls_1F_2R_Text_193A60, 6 end @@ -17,7 +17,7 @@ MeteorFalls_1F_2R_EventScript_15C6A0:: @ 815C6A0 MeteorFalls_1F_2R_EventScript_15C6B7:: @ 815C6B7 trainerbattle 4, OPPONENT_JOHN_AND_JAY_1, 0, MeteorFalls_1F_2R_Text_193BB7, MeteorFalls_1F_2R_Text_193C10, MeteorFalls_1F_2R_Text_193C9F specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MeteorFalls_1F_2R_EventScript_15C6E2 msgbox MeteorFalls_1F_2R_Text_193C35, 6 end @@ -30,7 +30,7 @@ MeteorFalls_1F_2R_EventScript_15C6E2:: @ 815C6E2 MeteorFalls_1F_2R_EventScript_15C6FD:: @ 815C6FD trainerbattle 4, OPPONENT_JOHN_AND_JAY_1, 0, MeteorFalls_1F_2R_Text_193D10, MeteorFalls_1F_2R_Text_193D6E, MeteorFalls_1F_2R_Text_193DFB specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MeteorFalls_1F_2R_EventScript_15C728 msgbox MeteorFalls_1F_2R_Text_193D9A, 6 end diff --git a/data/scripts/maps/MossdeepCity.inc b/data/scripts/maps/MossdeepCity.inc index cd5d9840f..44deb9d63 100644 --- a/data/scripts/maps/MossdeepCity.inc +++ b/data/scripts/maps/MossdeepCity.inc @@ -71,11 +71,11 @@ MossdeepCity_EventScript_14D027:: @ 814D027 checkflag 276 goto_if_eq MossdeepCity_EventScript_14D069 msgbox MossdeepCity_Text_1690A9, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MossdeepCity_EventScript_14D073 msgbox MossdeepCity_Text_169117, 4 giveitem ITEM_KINGS_ROCK - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MossdeepCity_EventScript_1A029B setflag 276 release diff --git a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc index 8d889a7d6..7861d0c4d 100644 --- a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc +++ b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc @@ -6,7 +6,7 @@ MossdeepCity_GameCorner_1F_MapScripts:: @ 815AC52 MossdeepCity_GameCorner_1F_MapScript1_15AC62:: @ 815AC62 special sub_813601C - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AC71 end @@ -17,9 +17,9 @@ MossdeepCity_GameCorner_1F_EventScript_15AC71:: @ 815AC71 MossdeepCity_GameCorner_1F_MapScript1_15AC84:: @ 815AC84 special sub_813601C - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AC9E - compare_var_to_imm 0x40c0, 0 + compare 0x40c0, 0 call_if 5, MossdeepCity_GameCorner_1F_EventScript_15ACAF end @@ -49,11 +49,11 @@ MossdeepCity_GameCorner_1F_EventScript_15ACD5:: @ 815ACD5 moveoffscreen 1 applymovement 255, MossdeepCity_GameCorner_1F_Movement_1A0841 waitmovement 0 - compare_var_to_imm 0x40c0, 1 + compare 0x40c0, 1 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AD22 - compare_var_to_imm 0x40c0, 2 + compare 0x40c0, 2 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AD2B - compare_var_to_imm 0x40c0, 3 + compare 0x40c0, 3 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AD34 special LoadPlayerParty setvar 0x40c0, 0 @@ -84,7 +84,7 @@ MossdeepCity_GameCorner_1F_Movement_15AD3F:: @ 815AD3F MossdeepCity_GameCorner_1F_EventScript_15AD42:: @ 815AD42 lock faceplayer - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 goto_if_eq MossdeepCity_GameCorner_1F_EventScript_15AD59 msgbox MossdeepCity_GameCorner_1F_Text_18E59A, 4 release @@ -94,28 +94,28 @@ MossdeepCity_GameCorner_1F_EventScript_15AD59:: @ 815AD59 special SavePlayerParty special sub_810F414 msgbox MossdeepCity_GameCorner_1F_Text_18E650, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MossdeepCity_GameCorner_1F_EventScript_15ADE8 call MossdeepCity_GameCorner_1F_EventScript_15ADF5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MossdeepCity_GameCorner_1F_EventScript_15ADE8 msgbox MossdeepCity_GameCorner_1F_Text_18E741, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15ADE8 special LoadPlayerParty call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MossdeepCity_GameCorner_1F_EventScript_15ADE8 hidebox 0, 0, 15, 10 special SavePlayerParty special ReducePlayerPartyToThree msgbox MossdeepCity_GameCorner_1F_Text_18E777, 4 closebutton - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AE04 - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AE16 - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AE28 warp MossdeepCity_GameCorner_B1F, 255, 3, 1 waitstate diff --git a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc index 29400a80b..46b9dcfea 100644 --- a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc +++ b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc @@ -22,11 +22,11 @@ MossdeepCity_GameCorner_B1F_EventScript_15AE6E:: @ 815AE6E setvar 0x8005, 0 special sub_813556C waitstate - compare_var_to_imm RESULT, 3 + compare RESULT, 3 call_if 1, MossdeepCity_GameCorner_B1F_EventScript_15AED5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, MossdeepCity_GameCorner_B1F_EventScript_15AEE3 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 call_if 1, MossdeepCity_GameCorner_B1F_EventScript_15AEEE closebutton special ScrSpecial_HealPlayerParty diff --git a/data/scripts/maps/MossdeepCity_Gym.inc b/data/scripts/maps/MossdeepCity_Gym.inc index 838b7fd14..4365ba74a 100644 --- a/data/scripts/maps/MossdeepCity_Gym.inc +++ b/data/scripts/maps/MossdeepCity_Gym.inc @@ -73,7 +73,7 @@ MossdeepCity_Gym_EventScript_15A594:: @ 815A594 MossdeepCity_Gym_EventScript_15A5C6:: @ 815A5C6 giveitem ITEM_TM04 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MossdeepCity_Gym_EventScript_1A029B msgbox MossdeepCity_Gym_Text_18D1CF, 4 setflag 171 diff --git a/data/scripts/maps/MossdeepCity_House1.inc b/data/scripts/maps/MossdeepCity_House1.inc index b6fe4fd6e..6098cc617 100644 --- a/data/scripts/maps/MossdeepCity_House1.inc +++ b/data/scripts/maps/MossdeepCity_House1.inc @@ -7,7 +7,7 @@ MossdeepCity_House1_EventScript_15A82F:: @ 815A82F bufferfirstpoke 0 msgbox MossdeepCity_House1_Text_18D465, 4 specialvar RESULT, GetPokeblockNameByMonNature - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MossdeepCity_House1_EventScript_15A855 msgbox MossdeepCity_House1_Text_18D475, 4 release diff --git a/data/scripts/maps/MossdeepCity_House2.inc b/data/scripts/maps/MossdeepCity_House2.inc index 660bc2c06..b8388376a 100644 --- a/data/scripts/maps/MossdeepCity_House2.inc +++ b/data/scripts/maps/MossdeepCity_House2.inc @@ -19,9 +19,9 @@ MossdeepCity_House2_EventScript_15A87B:: @ 815A87B closebutton setflag 224 clearflag 933 - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, MossdeepCity_House2_EventScript_15A8AE - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, MossdeepCity_House2_EventScript_15A8B9 disappear 3 release diff --git a/data/scripts/maps/MossdeepCity_House3.inc b/data/scripts/maps/MossdeepCity_House3.inc index b94e0ec19..8f9bf4dc5 100644 --- a/data/scripts/maps/MossdeepCity_House3.inc +++ b/data/scripts/maps/MossdeepCity_House3.inc @@ -7,7 +7,7 @@ MossdeepCity_House3_EventScript_15A972:: @ 815A972 checkflag 152 goto_if_eq MossdeepCity_House3_EventScript_15A9B1 msgbox MossdeepCity_House3_Text_18D909, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MossdeepCity_House3_EventScript_15A9BB msgbox MossdeepCity_House3_Text_18D9A9, 4 giveitem ITEM_SUPER_ROD diff --git a/data/scripts/maps/MossdeepCity_House4.inc b/data/scripts/maps/MossdeepCity_House4.inc index 9b1b17c69..205f10313 100644 --- a/data/scripts/maps/MossdeepCity_House4.inc +++ b/data/scripts/maps/MossdeepCity_House4.inc @@ -19,7 +19,7 @@ MossdeepCity_House4_EventScript_15AB50:: @ 815AB50 lock faceplayer special sub_80BB63C - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MossdeepCity_House4_EventScript_15AB6D special GetSecretBaseNearbyMapName msgbox MossdeepCity_House4_Text_18E17E, 4 diff --git a/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc b/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc index b328a6784..a407bd5b9 100644 --- a/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc +++ b/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc @@ -7,9 +7,9 @@ MossdeepCity_SpaceCenter_1F_EventScript_15AB8B:: @ 815AB8B dodailyevents specialvar RESULT, GetWeekCount buffernum 0, RESULT - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, MossdeepCity_SpaceCenter_1F_EventScript_15ABBA - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 4, MossdeepCity_SpaceCenter_1F_EventScript_15ABC3 closebutton applymovement LAST_TALKED, MossdeepCity_SpaceCenter_1F_Movement_1A083D @@ -36,7 +36,7 @@ MossdeepCity_SpaceCenter_1F_EventScript_15ABD5:: @ 815ABD5 goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_15AC0C msgbox MossdeepCity_SpaceCenter_1F_Text_18E335, 4 giveitem ITEM_SUN_STONE - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MossdeepCity_SpaceCenter_1F_EventScript_1A029B setflag 192 msgbox MossdeepCity_SpaceCenter_1F_Text_18E39B, 4 diff --git a/data/scripts/maps/MossdeepCity_StevensHouse.inc b/data/scripts/maps/MossdeepCity_StevensHouse.inc index 31a9efcea..aebb51c9c 100644 --- a/data/scripts/maps/MossdeepCity_StevensHouse.inc +++ b/data/scripts/maps/MossdeepCity_StevensHouse.inc @@ -14,7 +14,7 @@ MossdeepCity_StevensHouse_EventScript_15A9DF:: @ 815A9DF return MossdeepCity_StevensHouse_MapScript1_15A9E9:: @ 815A9E9 - compare_var_to_imm 0x40c6, 1 + compare 0x40c6, 1 call_if 1, MossdeepCity_StevensHouse_EventScript_15A9F5 end @@ -72,10 +72,10 @@ MossdeepCity_StevensHouse_Movement_15AA76:: @ 815AA76 MossdeepCity_StevensHouse_EventScript_15AA7C:: @ 815AA7C lockall msgbox MossdeepCity_StevensHouse_Text_18DD12, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MossdeepCity_StevensHouse_EventScript_15AAE6 countpokemon - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq MossdeepCity_StevensHouse_EventScript_15AADC copyvar 0x8004, RESULT disappear 2 @@ -86,7 +86,7 @@ MossdeepCity_StevensHouse_EventScript_15AA7C:: @ 815AA7C givepokemon SPECIES_BELDUM, 5, ITEM_NONE, 0x0, 0x0, 0 bufferpoke 1, SPECIES_BELDUM msgbox MossdeepCity_StevensHouse_Text_1A1102, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, MossdeepCity_StevensHouse_EventScript_1A0678 setflag 968 setflag 298 diff --git a/data/scripts/maps/MtChimney.inc b/data/scripts/maps/MtChimney.inc index 578743995..d206f927e 100644 --- a/data/scripts/maps/MtChimney.inc +++ b/data/scripts/maps/MtChimney.inc @@ -18,17 +18,17 @@ MtChimney_EventScript_15CF95:: @ 815CF95 showmoney 0, 0 nop msgbox MtChimney_Text_195760, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MtChimney_EventScript_15D00B checkmoney 0xc8, 0 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MtChimney_EventScript_15D018 msgbox MtChimney_Text_1957A9, 4 checkitemspace ITEM_LAVA_COOKIE, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, MtChimney_EventScript_15D000 giveitem ITEM_LAVA_COOKIE - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MtChimney_EventScript_15CFF3 hidemoney 0, 0 release @@ -411,7 +411,7 @@ MtChimney_EventScript_15D17D:: @ 815D17D checkflag 115 goto_if_eq MtChimney_EventScript_15D1C6 msgbox MtChimney_Text_195870, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MtChimney_EventScript_15D1BC msgbox MtChimney_Text_1958C6, 4 giveitem ITEM_METEORITE @@ -441,7 +441,7 @@ MtChimney_EventScript_15D1DA:: @ 815D1DA MtChimney_EventScript_15D1E3:: @ 815D1E3 trainerbattle 0, OPPONENT_SHELBY_1, 0, MtChimney_Text_19597F, MtChimney_Text_1959D8 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MtChimney_EventScript_15D20A msgbox MtChimney_Text_195A04, 6 end diff --git a/data/scripts/maps/MtChimney_CableCarStation.inc b/data/scripts/maps/MtChimney_CableCarStation.inc index 43dee22b4..8a66f75ee 100644 --- a/data/scripts/maps/MtChimney_CableCarStation.inc +++ b/data/scripts/maps/MtChimney_CableCarStation.inc @@ -4,7 +4,7 @@ MtChimney_CableCarStation_MapScripts:: @ 815C0FA .byte 0 MtChimney_CableCarStation_MapScript1_15C105:: @ 815C105 - compare_var_to_imm 0x40a3, 1 + compare 0x40a3, 1 call_if 1, MtChimney_CableCarStation_EventScript_15C111 end @@ -32,9 +32,9 @@ MtChimney_CableCarStation_EventScript_15C14B:: @ 815C14B lock faceplayer msgbox MtChimney_CableCarStation_Text_19256A, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MtChimney_CableCarStation_EventScript_15C16C - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MtChimney_CableCarStation_EventScript_15C19B end diff --git a/data/scripts/maps/MtPyre_1F.inc b/data/scripts/maps/MtPyre_1F.inc index 3f012780d..026d54bfe 100644 --- a/data/scripts/maps/MtPyre_1F.inc +++ b/data/scripts/maps/MtPyre_1F.inc @@ -8,7 +8,7 @@ MtPyre_1F_EventScript_15D323:: @ 815D323 goto_if_eq MtPyre_1F_EventScript_15D352 msgbox MtPyre_1F_Text_196151, 4 giveitem ITEM_CLEANSE_TAG - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MtPyre_1F_EventScript_1A029B setflag 282 release diff --git a/data/scripts/maps/MtPyre_6F.inc b/data/scripts/maps/MtPyre_6F.inc index 5d650a8a6..433b533b3 100644 --- a/data/scripts/maps/MtPyre_6F.inc +++ b/data/scripts/maps/MtPyre_6F.inc @@ -4,7 +4,7 @@ MtPyre_6F_MapScripts:: @ 815D447 MtPyre_6F_EventScript_15D448:: @ 815D448 trainerbattle 0, OPPONENT_VALERIE_1, 0, MtPyre_6F_Text_1969FE, MtPyre_6F_Text_196A30 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MtPyre_6F_EventScript_15D46F msgbox MtPyre_6F_Text_196A4C, 6 end diff --git a/data/scripts/maps/MtPyre_Exterior.inc b/data/scripts/maps/MtPyre_Exterior.inc index 787315320..550f74d9a 100644 --- a/data/scripts/maps/MtPyre_Exterior.inc +++ b/data/scripts/maps/MtPyre_Exterior.inc @@ -8,7 +8,7 @@ MtPyre_Exterior_MapScript1_15D48C:: @ 815D48C MtPyre_Exterior_EventScript_15D492:: @ 815D492 getplayerxy 0x4000, 0x4001 - compare_var_to_imm 0x4001, 12 + compare 0x4001, 12 goto_if 0, MtPyre_Exterior_EventScript_15D4A3 return diff --git a/data/scripts/maps/MtPyre_Summit.inc b/data/scripts/maps/MtPyre_Summit.inc index 44d0760df..e60c40cae 100644 --- a/data/scripts/maps/MtPyre_Summit.inc +++ b/data/scripts/maps/MtPyre_Summit.inc @@ -30,11 +30,11 @@ MtPyre_Summit_EventScript_15D4E1:: @ 815D4E1 applymovement 2, MtPyre_Summit_Movement_1A0845 waitmovement 0 delay 50 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, MtPyre_Summit_EventScript_15D593 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, MtPyre_Summit_EventScript_15D59E - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, MtPyre_Summit_EventScript_15D59F .ifdef SAPPHIRE msgbox UnknownString_81B52B0, 4 @@ -52,11 +52,11 @@ MtPyre_Summit_EventScript_15D4E1:: @ 815D4E1 fadescreen 0 delay 20 call MtPyre_Summit_EventScript_15D57A - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, MtPyre_Summit_EventScript_15D5AA - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, MtPyre_Summit_EventScript_15D5BF - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, MtPyre_Summit_EventScript_15D5CA .ifdef SAPPHIRE msgbox UnknownString_81B53AB, 4 @@ -143,9 +143,9 @@ MtPyre_Summit_EventScript_15D5EF:: @ 815D5EF .else msgbox MtPyre_Summit_Text_1B64B3, 5 .endif - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, MtPyre_Summit_EventScript_15D611 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, MtPyre_Summit_EventScript_15D61A release end @@ -189,9 +189,9 @@ MtPyre_Summit_EventScript_15D64A:: @ 815D64A .else msgbox MtPyre_Summit_Text_1B6283, 5 .endif - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MtPyre_Summit_EventScript_15D669 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MtPyre_Summit_EventScript_15D69B end @@ -220,9 +220,9 @@ MtPyre_Summit_EventScript_15D69B:: @ 815D69B .else msgbox MtPyre_Summit_Text_1B62E7, 5 .endif - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq MtPyre_Summit_EventScript_15D669 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq MtPyre_Summit_EventScript_15D69B end @@ -268,11 +268,11 @@ MtPyre_Summit_EventScript_15D6F2:: @ 815D6F2 applymovement 2, MtPyre_Summit_Movement_1A0845 waitmovement 0 delay 50 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, MtPyre_Summit_EventScript_15D75E - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, MtPyre_Summit_EventScript_15D769 - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, MtPyre_Summit_EventScript_15D774 .ifdef SAPPHIRE msgbox UnknownString_81B5BFC, 4 @@ -280,11 +280,11 @@ MtPyre_Summit_EventScript_15D6F2:: @ 815D6F2 msgbox MtPyre_Summit_Text_1B6848, 4 .endif closebutton - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, MtPyre_Summit_EventScript_15D77F - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, MtPyre_Summit_EventScript_15D78A - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, MtPyre_Summit_EventScript_15D795 disappear 2 setvar 0x40b9, 3 diff --git a/data/scripts/maps/NewMauville_Entrance.inc b/data/scripts/maps/NewMauville_Entrance.inc index 7eb3769cc..6429ff2f9 100644 --- a/data/scripts/maps/NewMauville_Entrance.inc +++ b/data/scripts/maps/NewMauville_Entrance.inc @@ -4,7 +4,7 @@ NewMauville_Entrance_MapScripts:: @ 815E48A .byte 0 NewMauville_Entrance_MapScript1_15E495:: @ 815E495 - compare_var_to_imm 0x40ba, 0 + compare 0x40ba, 0 call_if 1, NewMauville_Entrance_EventScript_15E4A1 end @@ -27,10 +27,10 @@ NewMauville_Entrance_EventScript_15E4DC:: @ 815E4DC waitmovement 0 msgbox NewMauville_Entrance_Text_1982C0, 4 checkitem ITEM_BASEMENT_KEY, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq NewMauville_Entrance_EventScript_15E55D msgbox NewMauville_Entrance_Text_1982D4, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq NewMauville_Entrance_EventScript_15E55D msgbox NewMauville_Entrance_Text_1982EA, 4 setmaptile 3, 0, 707, 0 diff --git a/data/scripts/maps/NewMauville_Inside.inc b/data/scripts/maps/NewMauville_Inside.inc index 4fdf02d15..ef016f261 100644 --- a/data/scripts/maps/NewMauville_Inside.inc +++ b/data/scripts/maps/NewMauville_Inside.inc @@ -5,9 +5,9 @@ NewMauville_Inside_MapScripts:: @ 815E55F .byte 0 NewMauville_Inside_MapScript1_15E56F:: @ 815E56F - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 call_if 1, NewMauville_Inside_EventScript_15E5DA - compare_var_to_imm 0x4002, 1 + compare 0x4002, 1 call_if 1, NewMauville_Inside_EventScript_15E728 checkflag 2145 call_if 1, NewMauville_Inside_EventScript_15E58F @@ -23,7 +23,7 @@ NewMauville_Inside_MapScript1_15E593:: @ 815E593 end NewMauville_Inside_MapScript1_15E59E:: @ 815E59E - compare_var_to_imm 0x40ba, 2 + compare 0x40ba, 2 call_if 1, NewMauville_Inside_EventScript_15E88B end @@ -150,7 +150,7 @@ NewMauville_Inside_EventScript_15E88B:: @ 815E88B NewMauville_Inside_EventScript_15E8E0:: @ 815E8E0 lockall - compare_var_to_imm 0x40ba, 2 + compare 0x40ba, 2 goto_if_eq NewMauville_Inside_EventScript_15E8F6 msgbox NewMauville_Inside_Text_198315, 4 releaseall diff --git a/data/scripts/maps/OldaleTown.inc b/data/scripts/maps/OldaleTown.inc index 0afc63220..0ece240c6 100644 --- a/data/scripts/maps/OldaleTown.inc +++ b/data/scripts/maps/OldaleTown.inc @@ -76,7 +76,7 @@ OldaleTown_EventScript_14DE35:: @ 814DE35 OldaleTown_EventScript_14DE4C:: @ 814DE4C msgbox OldaleTown_Text_16AF2F, 4 giveitem ITEM_POTION - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq OldaleTown_EventScript_14DE83 msgbox OldaleTown_Text_16AFE1, 4 setflag 132 @@ -257,9 +257,9 @@ OldaleTown_EventScript_14DF77:: @ 814DF77 OldaleTown_EventScript_14DF92:: @ 814DF92 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq OldaleTown_EventScript_14DFAA - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq OldaleTown_EventScript_14DFB8 end diff --git a/data/scripts/maps/PacifidlogTown_House2.inc b/data/scripts/maps/PacifidlogTown_House2.inc index e604a4f33..cef40ecd3 100644 --- a/data/scripts/maps/PacifidlogTown_House2.inc +++ b/data/scripts/maps/PacifidlogTown_House2.inc @@ -14,10 +14,10 @@ PacifidlogTown_House2_EventScript_154168:: @ 8154168 call_if 0, PacifidlogTown_House2_EventScript_1541D7 setflag 300 specialvar RESULT, GetLeadMonFriendshipScore - compare_var_to_imm RESULT, 4 + compare RESULT, 4 goto_if 4, PacifidlogTown_House2_EventScript_1541EC specialvar RESULT, GetLeadMonFriendshipScore - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if 4, PacifidlogTown_House2_EventScript_15421B goto PacifidlogTown_House2_EventScript_154225 end @@ -26,7 +26,7 @@ PacifidlogTown_House2_EventScript_1541B4:: @ 81541B4 checkflag 299 goto_if 0, PacifidlogTown_House2_EventScript_1A14DC specialvar RESULT, sub_810F908 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, PacifidlogTown_House2_EventScript_1541E8 return @@ -46,7 +46,7 @@ PacifidlogTown_House2_EventScript_1541E8:: @ 81541E8 PacifidlogTown_House2_EventScript_1541EC:: @ 81541EC msgbox PacifidlogTown_House2_Text_179169, 4 giveitem ITEM_TM27 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PacifidlogTown_House2_EventScript_1A029B setflag 299 special sub_810F950 @@ -62,7 +62,7 @@ PacifidlogTown_House2_EventScript_15421B:: @ 815421B PacifidlogTown_House2_EventScript_154225:: @ 8154225 msgbox PacifidlogTown_House2_Text_17922D, 4 giveitem ITEM_TM21 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PacifidlogTown_House2_EventScript_1A029B setflag 299 special sub_810F950 diff --git a/data/scripts/maps/PacifidlogTown_House3.inc b/data/scripts/maps/PacifidlogTown_House3.inc index e39db3921..1edd445fc 100644 --- a/data/scripts/maps/PacifidlogTown_House3.inc +++ b/data/scripts/maps/PacifidlogTown_House3.inc @@ -11,17 +11,17 @@ PacifidlogTown_House3_EventScript_15429E:: @ 815429E specialvar RESULT, sub_804D89C copyvar 0x8009, RESULT msgbox PacifidlogTown_House3_Text_17940E, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PacifidlogTown_House3_EventScript_154320 special sub_80F9A0C waitstate copyvar 0x800a, 0x8004 - compare_var_to_imm 0x8004, 255 + compare 0x8004, 255 goto_if_eq PacifidlogTown_House3_EventScript_154320 copyvar 0x8005, 0x800a specialvar RESULT, sub_804DB2C copyvar 0x800b, RESULT - compare_var_to_var RESULT, 0x8009 + compare RESULT, 0x8009 goto_if 5, PacifidlogTown_House3_EventScript_15432A copyvar 0x8004, 0x8008 copyvar 0x8005, 0x800a diff --git a/data/scripts/maps/PacifidlogTown_House4.inc b/data/scripts/maps/PacifidlogTown_House4.inc index bba0ede14..b7a6c9f86 100644 --- a/data/scripts/maps/PacifidlogTown_House4.inc +++ b/data/scripts/maps/PacifidlogTown_House4.inc @@ -13,9 +13,9 @@ PacifidlogTown_House4_EventScript_15435E:: @ 815435E lock faceplayer msgbox PacifidlogTown_House4_Text_17963D, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PacifidlogTown_House4_EventScript_15437F - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PacifidlogTown_House4_EventScript_154389 end diff --git a/data/scripts/maps/PacifidlogTown_House5.inc b/data/scripts/maps/PacifidlogTown_House5.inc index abbf81dd8..46b1990df 100644 --- a/data/scripts/maps/PacifidlogTown_House5.inc +++ b/data/scripts/maps/PacifidlogTown_House5.inc @@ -5,7 +5,7 @@ PacifidlogTown_House5_EventScript_154394:: @ 8154394 lock faceplayer specialvar RESULT, IsMirageIslandPresent - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PacifidlogTown_House5_EventScript_1543B0 msgbox PacifidlogTown_House5_Text_179718, 4 release diff --git a/data/scripts/maps/PetalburgCity.inc b/data/scripts/maps/PetalburgCity.inc index 4dca1fdb8..8b7d4f313 100644 --- a/data/scripts/maps/PetalburgCity.inc +++ b/data/scripts/maps/PetalburgCity.inc @@ -5,9 +5,9 @@ PetalburgCity_MapScripts:: @ 814B70C PetalburgCity_MapScript1_14B717:: @ 814B717 setflag 2070 - compare_var_to_imm 0x4057, 0 + compare 0x4057, 0 call_if 1, PetalburgCity_EventScript_14B731 - compare_var_to_imm 0x4057, 2 + compare 0x4057, 2 call_if 1, PetalburgCity_EventScript_14B739 end @@ -187,23 +187,23 @@ PetalburgCity_EventScript_14B866:: @ 814B866 waitmovement 0 applymovement 9, PetalburgCity_Movement_1A0835 waitmovement 0 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, PetalburgCity_EventScript_14B91B - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, PetalburgCity_EventScript_14B930 - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, PetalburgCity_EventScript_14B93B - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, PetalburgCity_EventScript_14B950 msgbox PetalburgCity_Text_16438A, 4 closebutton - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, PetalburgCity_EventScript_14B965 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, PetalburgCity_EventScript_14B977 - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, PetalburgCity_EventScript_14B989 - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, PetalburgCity_EventScript_14B99B msgbox PetalburgCity_Text_164426, 4 applymovement 9, PetalburgCity_Movement_1A0843 diff --git a/data/scripts/maps/PetalburgCity_Gym.inc b/data/scripts/maps/PetalburgCity_Gym.inc index f4598403f..1eff4d6c4 100644 --- a/data/scripts/maps/PetalburgCity_Gym.inc +++ b/data/scripts/maps/PetalburgCity_Gym.inc @@ -6,9 +6,9 @@ PetalburgCity_Gym_MapScripts:: @ 8154477 .byte 0 PetalburgCity_Gym_MapScript1_15448C:: @ 815448C - compare_var_to_imm 0x4085, 6 + compare 0x4085, 6 goto_if_eq PetalburgCity_Gym_EventScript_1544A3 - compare_var_to_imm 0x4085, 7 + compare 0x4085, 7 call_if 4, PetalburgCity_Gym_EventScript_1544ED end @@ -44,9 +44,9 @@ PetalburgCity_Gym_EventScript_1544ED:: @ 81544ED return PetalburgCity_Gym_MapScript1_15451B:: @ 815451B - compare_var_to_imm 0x4085, 1 + compare 0x4085, 1 call_if 1, PetalburgCity_Gym_EventScript_15453B - compare_var_to_imm 0x4085, 6 + compare 0x4085, 6 call_if 0, PetalburgCity_Gym_EventScript_154543 checkflag 2052 call_if 1, PetalburgCity_Gym_EventScript_15454B @@ -144,65 +144,65 @@ PetalburgCity_Gym_EventScript_15465E:: @ 815465E PetalburgCity_Gym_EventScript_154669:: @ 8154669 reappear 10 playse 8 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_1547EE - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, PetalburgCity_Gym_EventScript_154800 - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, PetalburgCity_Gym_EventScript_15481C - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, PetalburgCity_Gym_EventScript_15481C msgbox PetalburgCity_Gym_Text_179F07, 4 msgbox PetalburgCity_Gym_Text_179F37, 4 msgbox PetalburgCity_Gym_Text_179F70, 4 msgbox PetalburgCity_Gym_Text_17A03A, 4 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_154884 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, PetalburgCity_Gym_EventScript_15488F - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, PetalburgCity_Gym_EventScript_1548A1 - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, PetalburgCity_Gym_EventScript_1548B3 msgbox PetalburgCity_Gym_Text_17A04A, 4 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_1548C5 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, PetalburgCity_Gym_EventScript_1548D0 - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, PetalburgCity_Gym_EventScript_1548DB - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, PetalburgCity_Gym_EventScript_1548E6 msgbox PetalburgCity_Gym_Text_17A0A8, 4 msgbox PetalburgCity_Gym_Text_17A0EB, 4 msgbox PetalburgCity_Gym_Text_17A156, 4 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_15492F - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, PetalburgCity_Gym_EventScript_154930 - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, PetalburgCity_Gym_EventScript_15493B - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, PetalburgCity_Gym_EventScript_15493C - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_1548F1 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, PetalburgCity_Gym_EventScript_1548FC - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, PetalburgCity_Gym_EventScript_1548F1 - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, PetalburgCity_Gym_EventScript_1548F1 msgbox PetalburgCity_Gym_Text_17A171, 4 closebutton setflag 0x4001 playbgm 420, 0 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_154835 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, PetalburgCity_Gym_EventScript_15484E - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, PetalburgCity_Gym_EventScript_154860 - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, PetalburgCity_Gym_EventScript_154872 disappear 10 setflag 728 @@ -352,7 +352,7 @@ PetalburgCity_Gym_EventScript_15493C:: @ 815493C PetalburgCity_Gym_EventScript_15493D:: @ 815493D call PetalburgCity_Gym_EventScript_154969 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_1549B8 checkflag 169 goto_if 0, PetalburgCity_Gym_EventScript_154A2C @@ -364,15 +364,15 @@ PetalburgCity_Gym_EventScript_15493D:: @ 815493D PetalburgCity_Gym_EventScript_154969:: @ 8154969 specialvar RESULT, IsEnigmaBerryValid - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_1549B2 checkitem ITEM_ENIGMA_BERRY, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_1549B2 checkpcitem ITEM_ENIGMA_BERRY, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_1549B2 - compare_var_to_imm 0x402d, 0 + compare 0x402d, 0 goto_if_eq PetalburgCity_Gym_EventScript_1549B2 msgbox PetalburgCity_Gym_Text_1C5570, 4 setvar RESULT, 1 @@ -384,7 +384,7 @@ PetalburgCity_Gym_EventScript_1549B2:: @ 81549B2 PetalburgCity_Gym_EventScript_1549B8:: @ 81549B8 giveitem ITEM_ENIGMA_BERRY - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_1A029B setvar 0x402d, 0 release @@ -413,28 +413,28 @@ PetalburgCity_Gym_EventScript_1549D6:: @ 81549D6 PetalburgCity_Gym_EventScript_154A2C:: @ 8154A2C giveitem ITEM_TM42 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_1A029B setflag 169 msgbox PetalburgCity_Gym_Text_17A8CF, 4 msgbox PetalburgCity_Gym_Text_17A976, 4 closebutton - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, PetalburgCity_Gym_EventScript_154ABC - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, PetalburgCity_Gym_EventScript_154AC7 - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, PetalburgCity_Gym_EventScript_154AD2 - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, PetalburgCity_Gym_EventScript_154ADD delay 70 - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, PetalburgCity_Gym_EventScript_154AE8 - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, PetalburgCity_Gym_EventScript_154AF3 - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, PetalburgCity_Gym_EventScript_154AFE - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, PetalburgCity_Gym_EventScript_154B09 msgbox PetalburgCity_Gym_Text_17A9F6, 4 release @@ -592,14 +592,14 @@ PetalburgCity_Gym_EventScript_154B69:: @ 8154B69 PetalburgCity_Gym_EventScript_154B73:: @ 8154B73 lockall - compare_var_to_imm 0x4085, 6 + compare 0x4085, 6 goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 7 setvar 0x8009, 85 msgbox PetalburgCity_Gym_Text_17B870, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -622,14 +622,14 @@ PetalburgCity_Gym_EventScript_154BB9:: @ 8154BB9 PetalburgCity_Gym_EventScript_154BC3:: @ 8154BC3 lockall - compare_var_to_imm 0x4085, 6 + compare 0x4085, 6 goto_if 0, PetalburgCity_Gym_EventScript_154BB9 setvar 0x8008, 1 setvar 0x8009, 98 msgbox PetalburgCity_Gym_Text_17B8D4, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -640,9 +640,9 @@ PetalburgCity_Gym_EventScript_154BF8:: @ 8154BF8 setvar 0x8008, 7 setvar 0x8009, 46 msgbox PetalburgCity_Gym_Text_17B90F, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -653,9 +653,9 @@ PetalburgCity_Gym_EventScript_154C2B:: @ 8154C2B setvar 0x8008, 1 setvar 0x8009, 59 msgbox PetalburgCity_Gym_Text_17B950, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -666,9 +666,9 @@ PetalburgCity_Gym_EventScript_154C5E:: @ 8154C5E setvar 0x8008, 7 setvar 0x8009, 59 msgbox PetalburgCity_Gym_Text_17B950, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -679,9 +679,9 @@ PetalburgCity_Gym_EventScript_154C91:: @ 8154C91 setvar 0x8008, 1 setvar 0x8009, 72 msgbox PetalburgCity_Gym_Text_17B98A, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -692,9 +692,9 @@ PetalburgCity_Gym_EventScript_154CC4:: @ 8154CC4 setvar 0x8008, 1 setvar 0x8009, 20 msgbox PetalburgCity_Gym_Text_17B9C5, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -705,9 +705,9 @@ PetalburgCity_Gym_EventScript_154CF7:: @ 8154CF7 setvar 0x8008, 7 setvar 0x8009, 20 msgbox PetalburgCity_Gym_Text_17B9C5, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -718,9 +718,9 @@ PetalburgCity_Gym_EventScript_154D2A:: @ 8154D2A setvar 0x8008, 1 setvar 0x8009, 33 msgbox PetalburgCity_Gym_Text_17BA00, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -731,9 +731,9 @@ PetalburgCity_Gym_EventScript_154D5D:: @ 8154D5D setvar 0x8008, 7 setvar 0x8009, 33 msgbox PetalburgCity_Gym_Text_17BA00, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -744,9 +744,9 @@ PetalburgCity_Gym_EventScript_154D90:: @ 8154D90 setvar 0x8008, 1 setvar 0x8009, 7 msgbox PetalburgCity_Gym_Text_17BA3D, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -757,9 +757,9 @@ PetalburgCity_Gym_EventScript_154DC3:: @ 8154DC3 setvar 0x8008, 7 setvar 0x8009, 7 msgbox PetalburgCity_Gym_Text_17BA3D, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_Gym_EventScript_154BA8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_154BB7 end @@ -891,72 +891,72 @@ PetalburgCity_Gym_EventScript_154F91:: @ 8154F91 PetalburgCity_Gym_EventScript_154F9A:: @ 8154F9A setvar 0x8004, 1 - compare_var_to_imm 0x8005, 0 + compare 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare_var_to_imm 0x8005, 1 + compare 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_1550A2 return PetalburgCity_Gym_EventScript_154FBB:: @ 8154FBB setvar 0x8004, 2 - compare_var_to_imm 0x8005, 0 + compare 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare_var_to_imm 0x8005, 1 + compare 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_1550C7 return PetalburgCity_Gym_EventScript_154FDC:: @ 8154FDC setvar 0x8004, 3 - compare_var_to_imm 0x8005, 0 + compare 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare_var_to_imm 0x8005, 1 + compare 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_1550EC return PetalburgCity_Gym_EventScript_154FFD:: @ 8154FFD setvar 0x8004, 4 - compare_var_to_imm 0x8005, 0 + compare 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare_var_to_imm 0x8005, 1 + compare 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_155111 return PetalburgCity_Gym_EventScript_15501E:: @ 815501E setvar 0x8004, 5 - compare_var_to_imm 0x8005, 0 + compare 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare_var_to_imm 0x8005, 1 + compare 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_155124 return PetalburgCity_Gym_EventScript_15503F:: @ 815503F setvar 0x8004, 6 - compare_var_to_imm 0x8005, 0 + compare 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare_var_to_imm 0x8005, 1 + compare 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_155149 return PetalburgCity_Gym_EventScript_155060:: @ 8155060 setvar 0x8004, 7 - compare_var_to_imm 0x8005, 0 + compare 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare_var_to_imm 0x8005, 1 + compare 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_15515C return PetalburgCity_Gym_EventScript_155081:: @ 8155081 setvar 0x8004, 8 - compare_var_to_imm 0x8005, 0 + compare 0x8005, 0 call_if 1, PetalburgCity_Gym_EventScript_155182 - compare_var_to_imm 0x8005, 1 + compare 0x8005, 1 call_if 1, PetalburgCity_Gym_EventScript_155187 call PetalburgCity_Gym_EventScript_15516F return diff --git a/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc b/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc index 25783cf33..a70035fef 100644 --- a/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc @@ -28,17 +28,17 @@ PetalburgCity_PokemonCenter_1F_EventScript_155233:: @ 8155233 faceplayer msgbox PetalburgCity_PokemonCenter_1F_Text_17BDC5, 4 specialvar RESULT, IsStarterInParty - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_15524F release end PetalburgCity_PokemonCenter_1F_EventScript_15524F:: @ 815524F - compare_var_to_imm 0x4023, 0 + compare 0x4023, 0 call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_155272 - compare_var_to_imm 0x4023, 1 + compare 0x4023, 1 call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_15527B - compare_var_to_imm 0x4023, 2 + compare 0x4023, 2 call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_155284 release end diff --git a/data/scripts/maps/PetalburgWoods.inc b/data/scripts/maps/PetalburgWoods.inc index 8f34eecc6..48eb53a50 100644 --- a/data/scripts/maps/PetalburgWoods.inc +++ b/data/scripts/maps/PetalburgWoods.inc @@ -91,7 +91,7 @@ PetalburgWoods_EventScript_15CDFA:: @ 815CDFA waitmovement 0 msgbox PetalburgWoods_Text_19507E, 4 giveitem ITEM_GREAT_BALL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgWoods_EventScript_15CE3F goto PetalburgWoods_EventScript_15CE4D end @@ -245,7 +245,7 @@ PetalburgWoods_EventScript_15CEDC:: @ 815CEDC goto_if_eq PetalburgWoods_EventScript_15CF0B msgbox PetalburgWoods_Text_19549E, 4 giveitem ITEM_MIRACLE_SEED - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgWoods_EventScript_1A029B setflag 297 release @@ -272,7 +272,7 @@ PetalburgWoods_EventScript_15CF27:: @ 815CF27 PetalburgWoods_EventScript_15CF3E:: @ 815CF3E trainerbattle 0, OPPONENT_JAMES_1, 0, PetalburgWoods_Text_19526A, PetalburgWoods_Text_1952AE specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgWoods_EventScript_15CF65 msgbox PetalburgWoods_Text_1952CC, 6 end diff --git a/data/scripts/maps/Route102.inc b/data/scripts/maps/Route102.inc index 70b750aef..95a0a4a1f 100644 --- a/data/scripts/maps/Route102.inc +++ b/data/scripts/maps/Route102.inc @@ -20,7 +20,7 @@ Route102_EventScript_14EAF5:: @ 814EAF5 Route102_EventScript_14EAFE:: @ 814EAFE trainerbattle 0, OPPONENT_CALVIN_1, 0, Route102_Text_1B79C3, Route102_Text_1B7A2C specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route102_EventScript_14EB25 msgbox Route102_Text_1B7A60, 6 end diff --git a/data/scripts/maps/Route103.inc b/data/scripts/maps/Route103.inc index 102d2aa0c..b46545050 100644 --- a/data/scripts/maps/Route103.inc +++ b/data/scripts/maps/Route103.inc @@ -10,9 +10,9 @@ Route103_MapScript1_14EB87:: @ 814EB87 Route103_EventScript_14EB92:: @ 814EB92 lockall checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route103_EventScript_14EBAB - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route103_EventScript_14EC04 end @@ -174,7 +174,7 @@ Route103_EventScript_14ED94:: @ 814ED94 Route103_EventScript_14EDAB:: @ 814EDAB trainerbattle 4, OPPONENT_AMY_AND_LIV_1, 0, Route103_Text_1B7DF7, Route103_Text_1B7E3B, Route103_Text_1B7EAC specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route103_EventScript_14EDD6 msgbox Route103_Text_1B7E50, 6 end @@ -187,7 +187,7 @@ Route103_EventScript_14EDD6:: @ 814EDD6 Route103_EventScript_14EDF1:: @ 814EDF1 trainerbattle 4, OPPONENT_AMY_AND_LIV_1, 0, Route103_Text_1B7EFB, Route103_Text_1B7F20, Route103_Text_1B7F8E specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route103_EventScript_14EE1C msgbox Route103_Text_1B7F40, 6 end @@ -205,7 +205,7 @@ Route103_EventScript_14EE37:: @ 814EE37 Route103_EventScript_14EE4E:: @ 814EE4E trainerbattle 0, OPPONENT_MIGUEL_1, 0, Route103_Text_1B82A9, Route103_Text_1B82EC specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route103_EventScript_14EE75 msgbox Route103_Text_1B830D, 6 end diff --git a/data/scripts/maps/Route104.inc b/data/scripts/maps/Route104.inc index d9f65a382..c954ac972 100644 --- a/data/scripts/maps/Route104.inc +++ b/data/scripts/maps/Route104.inc @@ -35,7 +35,7 @@ Route104_EventScript_14EEC8:: @ 814EEC8 goto_if_eq Route104_EventScript_14EEFF msgbox Route104_Text_1C55B9, 4 giveitem ITEM_CHESTO_BERRY - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route104_EventScript_1A029B setflag 246 msgbox Route104_Text_1C5665, 4 @@ -54,7 +54,7 @@ Route104_EventScript_14EF09:: @ 814EF09 goto_if_eq Route104_EventScript_14EF38 msgbox Route104_Text_16DD91, 4 giveitem ITEM_WHITE_HERB - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route104_EventScript_1A029B setflag 279 release @@ -108,7 +108,7 @@ Route104_EventScript_14EF93:: @ 814EF93 goto_if_eq Route104_EventScript_14EFC2 msgbox Route104_Text_16DC5F, 4 giveitem ITEM_TM09 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route104_EventScript_1A029B setflag 262 release @@ -410,7 +410,7 @@ Route104_EventScript_14F189:: @ 814F189 Route104_EventScript_14F1A0:: @ 814F1A0 trainerbattle 0, OPPONENT_HALEY_1, 0, Route104_Text_1B8770, Route104_Text_1B87A7 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route104_EventScript_14F1C7 msgbox Route104_Text_1B87C3, 6 end @@ -423,7 +423,7 @@ Route104_EventScript_14F1C7:: @ 814F1C7 Route104_EventScript_14F1DE:: @ 814F1DE trainerbattle 0, OPPONENT_WINSTON_1, 0, Route104_Text_1B88D4, Route104_Text_1B8911 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route104_EventScript_14F205 msgbox Route104_Text_1B8925, 6 end @@ -436,7 +436,7 @@ Route104_EventScript_14F205:: @ 814F205 Route104_EventScript_14F21C:: @ 814F21C trainerbattle 0, OPPONENT_CINDY_1, 0, Route104_Text_1B8A24, Route104_Text_1B8A61 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route104_EventScript_14F243 msgbox Route104_Text_1B8A69, 6 end diff --git a/data/scripts/maps/Route104_MrBrineysHouse.inc b/data/scripts/maps/Route104_MrBrineysHouse.inc index 6428e018b..cc3dad35a 100644 --- a/data/scripts/maps/Route104_MrBrineysHouse.inc +++ b/data/scripts/maps/Route104_MrBrineysHouse.inc @@ -4,7 +4,7 @@ Route104_MrBrineysHouse_MapScripts:: @ 815BCB2 Route104_MrBrineysHouse_MapScript1_15BCB8:: @ 815BCB8 setflag 2109 - compare_var_to_imm 0x4090, 1 + compare 0x4090, 1 call_if 1, Route104_MrBrineysHouse_EventScript_15BCD4 checkflag 188 call_if 1, Route104_MrBrineysHouse_EventScript_15BCD0 @@ -37,7 +37,7 @@ Route104_MrBrineysHouse_EventScript_15BD0E:: @ 815BD0E setflag 147 msgbox Route104_MrBrineysHouse_Text_191A82, 4 msgbox Route104_MrBrineysHouse_Text_191AAD, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route104_MrBrineysHouse_EventScript_15BD97 goto Route104_MrBrineysHouse_EventScript_15BDAB end @@ -54,14 +54,14 @@ Route104_MrBrineysHouse_EventScript_15BD32:: @ 815BD32 Route104_MrBrineysHouse_EventScript_15BD65:: @ 815BD65 msgbox Route104_MrBrineysHouse_Text_191CC3, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route104_MrBrineysHouse_EventScript_15BD97 goto Route104_MrBrineysHouse_EventScript_15BDAB end Route104_MrBrineysHouse_EventScript_15BD7E:: @ 815BD7E msgbox Route104_MrBrineysHouse_Text_191DA6, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route104_MrBrineysHouse_EventScript_15BD97 goto Route104_MrBrineysHouse_EventScript_15BDAB end diff --git a/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc b/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc index 44fb9a082..876af8650 100644 --- a/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc +++ b/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc @@ -25,18 +25,18 @@ Route104_PrettyPetalFlowerShop_EventScript_15BE0B:: @ 815BE0B goto_if_eq Route104_PrettyPetalFlowerShop_EventScript_15BE4A setflag 127 msgbox Route104_PrettyPetalFlowerShop_Text_1C5F48, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, Route104_PrettyPetalFlowerShop_EventScript_15BE6A - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route104_PrettyPetalFlowerShop_EventScript_15BE73 release end Route104_PrettyPetalFlowerShop_EventScript_15BE4A:: @ 815BE4A msgbox Route104_PrettyPetalFlowerShop_Text_1C5F1B, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, Route104_PrettyPetalFlowerShop_EventScript_15BE6A - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route104_PrettyPetalFlowerShop_EventScript_15BE73 release end @@ -96,7 +96,7 @@ Route104_PrettyPetalFlowerShop_EventScript_15BEDA:: @ 815BEDA random 8 addvar RESULT, 133 giveitem RESULT - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route104_PrettyPetalFlowerShop_EventScript_1A029B setflag 2256 msgbox Route104_PrettyPetalFlowerShop_Text_1C6335, 4 diff --git a/data/scripts/maps/Route106.inc b/data/scripts/maps/Route106.inc index 6a0eea00f..2ec903363 100644 --- a/data/scripts/maps/Route106.inc +++ b/data/scripts/maps/Route106.inc @@ -18,7 +18,7 @@ Route106_EventScript_14F34F:: @ 814F34F Route106_EventScript_14F366:: @ 814F366 trainerbattle 0, OPPONENT_ELLIOT_1, 0, Route106_Text_1B8EF0, Route106_Text_1B8F25 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route106_EventScript_14F38D msgbox Route106_Text_1B8F55, 6 end diff --git a/data/scripts/maps/Route107.inc b/data/scripts/maps/Route107.inc index 907ac93a2..b6973407b 100644 --- a/data/scripts/maps/Route107.inc +++ b/data/scripts/maps/Route107.inc @@ -9,7 +9,7 @@ Route107_EventScript_14F3BC:: @ 814F3BC Route107_EventScript_14F3D3:: @ 814F3D3 trainerbattle 0, OPPONENT_TONY_1, 0, Route107_Text_1B933A, Route107_Text_1B9365 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route107_EventScript_14F3FA msgbox Route107_Text_1B938E, 6 end diff --git a/data/scripts/maps/Route109.inc b/data/scripts/maps/Route109.inc index bd5116a43..45ff1d3ed 100644 --- a/data/scripts/maps/Route109.inc +++ b/data/scripts/maps/Route109.inc @@ -279,7 +279,7 @@ Route109_EventScript_14F680:: @ 814F680 Route109_EventScript_14F691:: @ 814F691 message Route109_Text_16E0F9 msgbox Route109_Text_16E0F9, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route109_EventScript_14F6F1 goto Route109_EventScript_14F6E2 end @@ -332,7 +332,7 @@ Route109_EventScript_14F725:: @ 814F725 goto_if_eq Route109_EventScript_14F762 msgbox Route109_Text_16E433, 4 giveitem ITEM_SOFT_SAND - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route109_EventScript_1A029B closebutton applymovement LAST_TALKED, Route109_Movement_1A083D @@ -397,7 +397,7 @@ Route109_EventScript_14F7F2:: @ 814F7F2 Route109_EventScript_14F809:: @ 814F809 trainerbattle 0, OPPONENT_RICKY_1, 0, Route109_Text_1B9C23, Route109_Text_1B9C65 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route109_EventScript_14F830 msgbox Route109_Text_1B9C6E, 6 end @@ -410,7 +410,7 @@ Route109_EventScript_14F830:: @ 814F830 Route109_EventScript_14F847:: @ 814F847 trainerbattle 0, OPPONENT_LOLA_1, 0, Route109_Text_1B9D54, Route109_Text_1B9D87 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route109_EventScript_14F86E msgbox Route109_Text_1B9D8E, 6 end diff --git a/data/scripts/maps/Route109_SeashoreHouse.inc b/data/scripts/maps/Route109_SeashoreHouse.inc index 2a69242c2..789ee3e56 100644 --- a/data/scripts/maps/Route109_SeashoreHouse.inc +++ b/data/scripts/maps/Route109_SeashoreHouse.inc @@ -28,7 +28,7 @@ Route109_SeashoreHouse_EventScript_160DFE:: @ 8160DFE Route109_SeashoreHouse_EventScript_160E08:: @ 8160E08 msgbox Route109_SeashoreHouse_Text_19B609, 4 giveitem ITEM_SODA_POP, 6 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route109_SeashoreHouse_EventScript_160E2C setflag 140 release @@ -43,7 +43,7 @@ Route109_SeashoreHouse_EventScript_160E36:: @ 8160E36 showmoney 0, 0 nop msgbox Route109_SeashoreHouse_Text_19B702, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route109_SeashoreHouse_EventScript_160E5A msgbox Route109_SeashoreHouse_Text_19B773, 4 hidemoney 0, 0 @@ -52,10 +52,10 @@ Route109_SeashoreHouse_EventScript_160E36:: @ 8160E36 Route109_SeashoreHouse_EventScript_160E5A:: @ 8160E5A checkmoney 0x12c, 0 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route109_SeashoreHouse_EventScript_160E9E checkitemspace ITEM_SODA_POP, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route109_SeashoreHouse_EventScript_160EAB msgbox Route109_SeashoreHouse_Text_19B74C, 4 paymoney 0x12c, 0 diff --git a/data/scripts/maps/Route110.inc b/data/scripts/maps/Route110.inc index e4582e08e..56d4ff196 100644 --- a/data/scripts/maps/Route110.inc +++ b/data/scripts/maps/Route110.inc @@ -12,7 +12,7 @@ Route110_MapScript1_14F914:: @ 814F914 call Route110_EventScript_1A0196 call Route110_EventScript_1A014E call Route110_EventScript_1A0172 - compare_var_to_imm 0x40a9, 1 + compare 0x40a9, 1 call_if 1, Route110_EventScript_14F92F end @@ -132,7 +132,7 @@ Route110_EventScript_14FA25:: @ 814FA25 Route110_EventScript_14FA2E:: @ 814FA2E lockall specialvar RESULT, GetRecordedCyclingRoadResults - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route110_EventScript_14FA49 msgbox Route110_Text_16F53A, 4 releaseall @@ -147,9 +147,9 @@ Route110_EventScript_14FA53:: @ 814FA53 lock faceplayer specialvar RESULT, GetPlayerAvatarBike - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_EventScript_14FA84 - compare_var_to_imm 0x40a9, 0 + compare 0x40a9, 0 goto_if_eq Route110_EventScript_14FA7A msgbox Route110_Text_16F26A, 4 release @@ -178,7 +178,7 @@ Route110_EventScript_14FAA5:: @ 814FAA5 Route110_EventScript_14FABC:: @ 814FABC trainerbattle 0, OPPONENT_EDWIN_1, 0, Route110_Text_1BA7D2, Route110_Text_1BA803 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_EventScript_14FAE3 msgbox Route110_Text_1BA829, 6 end @@ -206,7 +206,7 @@ Route110_EventScript_14FB28:: @ 814FB28 Route110_EventScript_14FB3F:: @ 814FB3F trainerbattle 0, OPPONENT_BENJAMIN_1, 0, Route110_Text_1BA352, Route110_Text_1BA379 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_EventScript_14FB66 msgbox Route110_Text_1BA3A5, 6 end @@ -224,7 +224,7 @@ Route110_EventScript_14FB7D:: @ 814FB7D Route110_EventScript_14FB94:: @ 814FB94 trainerbattle 0, OPPONENT_ABIGAIL_1, 0, Route110_Text_1BA4A0, Route110_Text_1BA50F specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_EventScript_14FBBB msgbox Route110_Text_1BA52E, 6 end @@ -237,7 +237,7 @@ Route110_EventScript_14FBBB:: @ 814FBBB Route110_EventScript_14FBD2:: @ 814FBD2 trainerbattle 0, OPPONENT_ISABEL_1, 0, Route110_Text_1BA990, Route110_Text_1BA9D0 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_EventScript_14FBF9 msgbox Route110_Text_1BA9E9, 6 end @@ -326,9 +326,9 @@ Route110_EventScript_14FD29:: @ 814FD29 Route110_EventScript_14FD34:: @ 814FD34 lockall checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_EventScript_14FDA7 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, Route110_EventScript_14FDAC applymovement 28, Route110_Movement_1A0845 waitmovement 0 @@ -337,16 +337,16 @@ Route110_EventScript_14FD34:: @ 814FD34 applymovement 28, Route110_Movement_1A0835 waitmovement 0 delay 30 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, Route110_EventScript_14FF14 - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, Route110_EventScript_14FF1F - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, Route110_EventScript_14FF2A checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route110_EventScript_14FDB1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_EventScript_14FE2B releaseall end @@ -425,22 +425,22 @@ Route110_EventScript_14FEA5:: @ 814FEA5 Route110_EventScript_14FEB2:: @ 814FEB2 closebutton - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, Route110_EventScript_14FF56 - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, Route110_EventScript_14FF5E - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, Route110_EventScript_14FF66 spritebehave 28, 10 spritebehave 29, 10 disappear 28 reappear 29 delay 45 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, Route110_EventScript_14FF35 - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, Route110_EventScript_14FF40 - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, Route110_EventScript_14FF4B disappear 29 setvar 0x4069, 1 diff --git a/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc b/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc index c2900de22..a7db7e0ee 100644 --- a/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc +++ b/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc @@ -3,9 +3,9 @@ Route110_SeasideCyclingRoadNorthEntrance_MapScripts:: @ 81634C8 .byte 0 Route110_SeasideCyclingRoadNorthEntrance_MapScript1_1634CE:: @ 81634CE - compare_var_to_imm 0x40a9, 3 + compare 0x40a9, 3 call_if 1, Route110_SeasideCyclingRoadNorthEntrance_EventScript_1634E5 - compare_var_to_imm 0x40a9, 2 + compare 0x40a9, 2 call_if 1, Route110_SeasideCyclingRoadNorthEntrance_EventScript_1634E5 end @@ -24,9 +24,9 @@ Route110_SeasideCyclingRoadNorthEntrance_EventScript_1634F7:: @ 81634F7 @ Coord event directly in front of the gatesman heading left to right lockall specialvar RESULT, GetPlayerAvatarBike @ player state? - compare_var_to_imm RESULT, 2 + compare RESULT, 2 call_if 1, Route110_SeasideCyclingRoadNorthEntrance_EventScript_16351D - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route110_SeasideCyclingRoadNorthEntrance_EventScript_163523 setflag 2091 setvar 0x4001, 1 diff --git a/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc b/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc index c385a7bc9..1cb046a99 100644 --- a/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc +++ b/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc @@ -11,7 +11,7 @@ Route110_SeasideCyclingRoadSouthEntrance_EventScript_16347F:: @ 816347F Route110_SeasideCyclingRoadSouthEntrance_EventScript_16348B:: @ 816348B lockall specialvar RESULT, GetPlayerAvatarBike - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route110_SeasideCyclingRoadSouthEntrance_EventScript_1634A6 setflag 2091 setvar 0x4001, 1 diff --git a/data/scripts/maps/Route110_TrickHouseEnd.inc b/data/scripts/maps/Route110_TrickHouseEnd.inc index 61c0e65a6..f99869648 100644 --- a/data/scripts/maps/Route110_TrickHouseEnd.inc +++ b/data/scripts/maps/Route110_TrickHouseEnd.inc @@ -6,7 +6,7 @@ Route110_TrickHouseEnd_MapScripts:: @ 8161936 .byte 0 Route110_TrickHouseEnd_MapScript1_16194B:: @ 816194B - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 call_if 1, Route110_TrickHouseEnd_EventScript_161994 end @@ -61,7 +61,7 @@ Route110_TrickHouseEnd_EventScript_161A0B:: @ 8161A0B msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar 0x40c1, 0 giveitem ITEM_RARE_CANDY - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton @@ -74,7 +74,7 @@ Route110_TrickHouseEnd_EventScript_161A47:: @ 8161A47 msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar 0x40c1, 0 giveitem ITEM_TIMER_BALL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton @@ -87,7 +87,7 @@ Route110_TrickHouseEnd_EventScript_161A83:: @ 8161A83 msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar 0x40c1, 0 giveitem ITEM_HARD_STONE - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton @@ -100,7 +100,7 @@ Route110_TrickHouseEnd_EventScript_161ABF:: @ 8161ABF msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar 0x40c1, 0 giveitem ITEM_SMOKE_BALL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton @@ -113,7 +113,7 @@ Route110_TrickHouseEnd_EventScript_161AFB:: @ 8161AFB msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar 0x40c1, 0 giveitem ITEM_TM12 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton @@ -126,7 +126,7 @@ Route110_TrickHouseEnd_EventScript_161B37:: @ 8161B37 msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar 0x40c1, 0 giveitem ITEM_MAGNET - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton @@ -139,7 +139,7 @@ Route110_TrickHouseEnd_EventScript_161B73:: @ 8161B73 msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar 0x40c1, 0 giveitem ITEM_PP_MAX - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 closebutton @@ -150,13 +150,13 @@ Route110_TrickHouseEnd_EventScript_161B73:: @ 8161B73 Route110_TrickHouseEnd_EventScript_161BAF:: @ 8161BAF msgbox Route110_TrickHouseEnd_Text_19C5AF, 4 closebutton - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, Route110_TrickHouseEnd_EventScript_161C74 - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, Route110_TrickHouseEnd_EventScript_161C7F - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, Route110_TrickHouseEnd_EventScript_161C8A - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, Route110_TrickHouseEnd_EventScript_161C95 delay 30 msgbox Route110_TrickHouseEnd_Text_19C602, 4 @@ -171,7 +171,7 @@ Route110_TrickHouseEnd_EventScript_161BAF:: @ 8161BAF .else givedecoration 31 .endc - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C61 msgbox Route110_TrickHouseEnd_Text_19C85C, 4 call Route110_TrickHouseEnd_EventScript_161C2E diff --git a/data/scripts/maps/Route110_TrickHouseEntrance.inc b/data/scripts/maps/Route110_TrickHouseEntrance.inc index 4e60c9fc1..129cc7d6a 100644 --- a/data/scripts/maps/Route110_TrickHouseEntrance.inc +++ b/data/scripts/maps/Route110_TrickHouseEntrance.inc @@ -6,17 +6,17 @@ Route110_TrickHouseEntrance_MapScripts:: @ 8160F2B Route110_TrickHouseEntrance_MapScript1_160F3B:: @ 8160F3B setflag 2114 - compare_var_to_imm 0x40b5, 1 + compare 0x40b5, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_160FCE - compare_var_to_imm 0x40c1, 1 + compare 0x40c1, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_160FB2 - compare_var_to_imm 0x40a6, 1 + compare 0x40a6, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_16108E - compare_var_to_imm 0x40a7, 5 + compare 0x40a7, 5 call_if 1, Route110_TrickHouseEntrance_EventScript_160FDE - compare_var_to_imm 0x40a7, 3 + compare 0x40a7, 3 call_if 1, Route110_TrickHouseEntrance_EventScript_160FDE - compare_var_to_imm 0x40a7, 0 + compare 0x40a7, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_160FDE switch 0x40a7 case 0, Route110_TrickHouseEntrance_EventScript_16109A @@ -27,7 +27,7 @@ Route110_TrickHouseEntrance_MapScript1_160F3B:: @ 8160F3B Route110_TrickHouseEntrance_EventScript_160FB2:: @ 8160FB2 setvar 0x40a5, 1 - compare_var_to_imm 0x4044, 8 + compare 0x4044, 8 goto_if_eq Route110_TrickHouseEntrance_EventScript_160FC8 setvar 0x40a7, 2 end @@ -44,21 +44,21 @@ Route110_TrickHouseEntrance_EventScript_160FCE:: @ 8160FCE Route110_TrickHouseEntrance_EventScript_160FDE:: @ 8160FDE setvar 0x40a7, 0 - compare_var_to_imm 0x4044, 1 + compare 0x4044, 1 call_if 1, Route110_TrickHouseEntrance_EventScript_16103C - compare_var_to_imm 0x4044, 2 + compare 0x4044, 2 call_if 1, Route110_TrickHouseEntrance_EventScript_161046 - compare_var_to_imm 0x4044, 3 + compare 0x4044, 3 call_if 1, Route110_TrickHouseEntrance_EventScript_161050 - compare_var_to_imm 0x4044, 4 + compare 0x4044, 4 call_if 1, Route110_TrickHouseEntrance_EventScript_16105A - compare_var_to_imm 0x4044, 5 + compare 0x4044, 5 call_if 1, Route110_TrickHouseEntrance_EventScript_161064 - compare_var_to_imm 0x4044, 6 + compare 0x4044, 6 call_if 1, Route110_TrickHouseEntrance_EventScript_16106E - compare_var_to_imm 0x4044, 7 + compare 0x4044, 7 call_if 1, Route110_TrickHouseEntrance_EventScript_161078 - compare_var_to_imm 0x4044, 8 + compare 0x4044, 8 call_if 1, Route110_TrickHouseEntrance_EventScript_161082 return @@ -213,7 +213,7 @@ Route110_TrickHouseEntrance_MapScript2_1611CD:: @ 81611CD Route110_TrickHouseEntrance_EventScript_1611D7:: @ 81611D7 lockall delay 20 - compare_var_to_imm 0x4044, 0 + compare 0x4044, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_161327 msgbox Route110_TrickHouseEntrance_Text_19BD82, 4 closebutton @@ -248,21 +248,21 @@ Route110_TrickHouseEntrance_EventScript_16124D:: @ 816124D waitmovement 0 applymovement 255, Route110_TrickHouseEntrance_Movement_1A0835 waitmovement 0 - compare_var_to_imm 0x4044, 0 + compare 0x4044, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1612CD - compare_var_to_imm 0x4044, 1 + compare 0x4044, 1 call_if 1, Route110_TrickHouseEntrance_EventScript_1612D6 - compare_var_to_imm 0x4044, 2 + compare 0x4044, 2 call_if 1, Route110_TrickHouseEntrance_EventScript_1612DF - compare_var_to_imm 0x4044, 3 + compare 0x4044, 3 call_if 1, Route110_TrickHouseEntrance_EventScript_1612E8 - compare_var_to_imm 0x4044, 4 + compare 0x4044, 4 call_if 1, Route110_TrickHouseEntrance_EventScript_1612F1 - compare_var_to_imm 0x4044, 5 + compare 0x4044, 5 call_if 1, Route110_TrickHouseEntrance_EventScript_1612FA - compare_var_to_imm 0x4044, 6 + compare 0x4044, 6 call_if 1, Route110_TrickHouseEntrance_EventScript_161303 - compare_var_to_imm 0x4044, 7 + compare 0x4044, 7 call_if 1, Route110_TrickHouseEntrance_EventScript_16130C closebutton setvar 0x40a6, 1 @@ -351,27 +351,27 @@ Route110_TrickHouseEntrance_EventScript_16136E:: @ 816136E applymovement 1, Route110_TrickHouseEntrance_Movement_1A0839 waitmovement 0 msgbox Route110_TrickHouseEntrance_Text_19C07E, 4 - compare_var_to_imm 0x4044, 1 + compare 0x4044, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_1613CE - compare_var_to_imm 0x4044, 2 + compare 0x4044, 2 goto_if_eq Route110_TrickHouseEntrance_EventScript_1613FA - compare_var_to_imm 0x4044, 3 + compare 0x4044, 3 goto_if_eq Route110_TrickHouseEntrance_EventScript_161426 - compare_var_to_imm 0x4044, 4 + compare 0x4044, 4 goto_if_eq Route110_TrickHouseEntrance_EventScript_161452 - compare_var_to_imm 0x4044, 5 + compare 0x4044, 5 goto_if_eq Route110_TrickHouseEntrance_EventScript_16147E - compare_var_to_imm 0x4044, 6 + compare 0x4044, 6 goto_if_eq Route110_TrickHouseEntrance_EventScript_1614AA - compare_var_to_imm 0x4044, 7 + compare 0x4044, 7 goto_if_eq Route110_TrickHouseEntrance_EventScript_1614D6 end Route110_TrickHouseEntrance_EventScript_1613CE:: @ 81613CE giveitem ITEM_RARE_CANDY - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall @@ -379,9 +379,9 @@ Route110_TrickHouseEntrance_EventScript_1613CE:: @ 81613CE Route110_TrickHouseEntrance_EventScript_1613FA:: @ 81613FA giveitem ITEM_TIMER_BALL - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall @@ -389,9 +389,9 @@ Route110_TrickHouseEntrance_EventScript_1613FA:: @ 81613FA Route110_TrickHouseEntrance_EventScript_161426:: @ 8161426 giveitem ITEM_HARD_STONE - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall @@ -399,9 +399,9 @@ Route110_TrickHouseEntrance_EventScript_161426:: @ 8161426 Route110_TrickHouseEntrance_EventScript_161452:: @ 8161452 giveitem ITEM_SMOKE_BALL - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall @@ -409,9 +409,9 @@ Route110_TrickHouseEntrance_EventScript_161452:: @ 8161452 Route110_TrickHouseEntrance_EventScript_16147E:: @ 816147E giveitem ITEM_TM12 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall @@ -419,9 +419,9 @@ Route110_TrickHouseEntrance_EventScript_16147E:: @ 816147E Route110_TrickHouseEntrance_EventScript_1614AA:: @ 81614AA giveitem ITEM_MAGNET - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall @@ -429,9 +429,9 @@ Route110_TrickHouseEntrance_EventScript_1614AA:: @ 81614AA Route110_TrickHouseEntrance_EventScript_1614D6:: @ 81614D6 giveitem ITEM_PP_MAX - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02A5 msgbox Route110_TrickHouseEntrance_Text_19C0FC, 4 releaseall @@ -454,9 +454,9 @@ Route110_TrickHouseEntrance_EventScript_161518:: @ 8161518 .else givedecoration 31 .endif - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161551 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1A02B8 msgbox Route110_TrickHouseEntrance_Text_19C18D, 4 releaseall @@ -495,7 +495,7 @@ Route110_TrickHouseEntrance_EventScript_1615BD:: @ 81615BD Route110_TrickHouseEntrance_EventScript_1615C7:: @ 81615C7 msgbox Route110_TrickHouseEntrance_Text_19BE7D, 5 closebutton - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_1615DD releaseall end @@ -577,7 +577,7 @@ Route110_TrickHouseEntrance_EventScript_1616B8:: @ 81616B8 end Route110_TrickHouseEntrance_EventScript_1616C2:: @ 81616C2 - compare_var_to_imm 0x4044, 8 + compare 0x4044, 8 goto_if_eq Route110_TrickHouseEntrance_EventScript_1616D7 msgbox Route110_TrickHouseEntrance_Text_19BE6E, 4 releaseall @@ -602,7 +602,7 @@ gUnknown_081616E1:: @ 81616E1 end Route110_TrickHouseEntrance_EventScript_161740:: @ 8161740 - compare_var_to_imm 0x40AB, 0 + compare 0x40AB, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819CAD1, 4 playse SE_PIN @@ -613,7 +613,7 @@ Route110_TrickHouseEntrance_EventScript_161740:: @ 8161740 end Route110_TrickHouseEntrance_EventScript_161769:: @ 8161769 - compare_var_to_imm 0x40AC, 0 + compare 0x40AC, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819CCCB, 4 playse SE_PIN @@ -624,7 +624,7 @@ Route110_TrickHouseEntrance_EventScript_161769:: @ 8161769 end Route110_TrickHouseEntrance_EventScript_161792:: @ 8161792 - compare_var_to_imm 0x40AD, 0 + compare 0x40AD, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819CEF9, 4 playse SE_PIN @@ -635,7 +635,7 @@ Route110_TrickHouseEntrance_EventScript_161792:: @ 8161792 end Route110_TrickHouseEntrance_EventScript_1617BB:: @ 81617BB - compare_var_to_imm 0x40AE, 0 + compare 0x40AE, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819D164, 4 playse SE_PIN @@ -646,7 +646,7 @@ Route110_TrickHouseEntrance_EventScript_1617BB:: @ 81617BB end Route110_TrickHouseEntrance_EventScript_1617E4:: @ 81617E4 - compare_var_to_imm 0x40AF, 0 + compare 0x40AF, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819D3A5, 4 playse SE_PIN @@ -657,7 +657,7 @@ Route110_TrickHouseEntrance_EventScript_1617E4:: @ 81617E4 end Route110_TrickHouseEntrance_EventScript_16180D:: @ 816180D - compare_var_to_imm 0x40B0, 0 + compare 0x40B0, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819DC0A, 4 playse SE_PIN @@ -668,7 +668,7 @@ Route110_TrickHouseEntrance_EventScript_16180D:: @ 816180D end Route110_TrickHouseEntrance_EventScript_161836:: @ 8161836 - compare_var_to_imm 0x40B1, 0 + compare 0x40B1, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819DE8D, 4 playse SE_PIN @@ -679,7 +679,7 @@ Route110_TrickHouseEntrance_EventScript_161836:: @ 8161836 end Route110_TrickHouseEntrance_EventScript_16185F:: @ 816185F - compare_var_to_imm 0x40B2, 0 + compare 0x40B2, 0 goto_if_eq Route110_TrickHouseEntrance_EventScript_161888 msgbox UnknownString_819E0FF, 4 playse SE_PIN @@ -726,11 +726,11 @@ Route110_TrickHouseEntrance_EventScript_1618B0:: @ 81618B0 lockall msgbox Route110_TrickHouseEntrance_Text_19BA56, 4 releaseall - compare_var_to_imm 0x4044, 0 + compare 0x4044, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_1618E1 - compare_var_to_imm 0x4044, 1 + compare 0x4044, 1 call_if 1, Route110_TrickHouseEntrance_EventScript_1618F6 - compare_var_to_imm 0x4044, 2 + compare 0x4044, 2 call_if 1, Route110_TrickHouseEntrance_EventScript_16190B setvar 0x40a5, 1 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle1.inc b/data/scripts/maps/Route110_TrickHousePuzzle1.inc index d9536edde..3a89c2db1 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle1.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle1.inc @@ -3,7 +3,7 @@ Route110_TrickHousePuzzle1_MapScripts:: @ 8161CF8 .byte 0 Route110_TrickHousePuzzle1_MapScript1_161CFE:: @ 8161CFE - compare_var_to_imm 0x40ab, 2 + compare 0x40ab, 2 goto_if_eq Route110_TrickHousePuzzle1_EventScript_161D0A end @@ -13,7 +13,7 @@ Route110_TrickHousePuzzle1_EventScript_161D0A:: @ 8161D0A Route110_TrickHousePuzzle1_EventScript_161D14:: @ 8161D14 lockall - compare_var_to_imm 0x40ab, 0 + compare 0x40ab, 0 goto_if_eq Route110_TrickHousePuzzle1_EventScript_161D26 goto Route110_TrickHousePuzzle1_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle2.inc b/data/scripts/maps/Route110_TrickHousePuzzle2.inc index 6252a96d6..f71a9611a 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle2.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle2.inc @@ -4,13 +4,13 @@ Route110_TrickHousePuzzle2_MapScripts:: @ 8161D76 .byte 0 Route110_TrickHousePuzzle2_MapScript1_161D81:: @ 8161D81 - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 call_if 1, Route110_TrickHousePuzzle2_EventScript_161E2C - compare_var_to_imm 0x4002, 1 + compare 0x4002, 1 call_if 1, Route110_TrickHousePuzzle2_EventScript_161E3F - compare_var_to_imm 0x4003, 1 + compare 0x4003, 1 call_if 1, Route110_TrickHousePuzzle2_EventScript_161E52 - compare_var_to_imm 0x4004, 1 + compare 0x4004, 1 call_if 1, Route110_TrickHousePuzzle2_EventScript_161E65 end @@ -23,7 +23,7 @@ Route110_TrickHousePuzzle2_MapScript1_161DAE:: @ 8161DAE Route110_TrickHousePuzzle2_EventScript_161DC3:: @ 8161DC3 lockall - compare_var_to_imm 0x40ac, 0 + compare 0x40ac, 0 goto_if_eq Route110_TrickHousePuzzle2_EventScript_161DD5 goto Route110_TrickHousePuzzle2_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle3.inc b/data/scripts/maps/Route110_TrickHousePuzzle3.inc index 705f52455..a50ecd3ce 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle3.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle3.inc @@ -5,9 +5,9 @@ Route110_TrickHousePuzzle3_MapScripts:: @ 8161EBD Route110_TrickHousePuzzle3_MapScript1_161EC8:: @ 8161EC8 call Route110_TrickHousePuzzle3_EventScript_161F12 - compare_var_to_imm 0x4009, 0 + compare 0x4009, 0 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FE5 - compare_var_to_imm 0x4009, 1 + compare 0x4009, 1 call_if 1, Route110_TrickHousePuzzle3_EventScript_1622C8 end @@ -31,19 +31,19 @@ Route110_TrickHousePuzzle3_EventScript_161F12:: @ 8161F12 setmaptile 13, 7, 600, 0 setmaptile 1, 3, 600, 0 setmaptile 10, 2, 600, 0 - compare_var_to_imm 0x4008, 1 + compare 0x4008, 1 call_if 1, Route110_TrickHousePuzzle3_EventScript_161F9F - compare_var_to_imm 0x4008, 2 + compare 0x4008, 2 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FA9 - compare_var_to_imm 0x4008, 3 + compare 0x4008, 3 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FB3 - compare_var_to_imm 0x4008, 4 + compare 0x4008, 4 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FBD - compare_var_to_imm 0x4008, 5 + compare 0x4008, 5 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FC7 - compare_var_to_imm 0x4008, 6 + compare 0x4008, 6 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FD1 - compare_var_to_imm 0x4008, 7 + compare 0x4008, 7 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FDB return @@ -302,19 +302,19 @@ Route110_TrickHousePuzzle3_EventScript_162612:: @ 8162612 setvar 0x4005, 0 setvar 0x4006, 0 setvar 0x4007, 0 - compare_var_to_imm 0x4008, 1 + compare 0x4008, 1 call_if 1, Route110_TrickHousePuzzle3_EventScript_162683 - compare_var_to_imm 0x4008, 2 + compare 0x4008, 2 call_if 1, Route110_TrickHousePuzzle3_EventScript_162689 - compare_var_to_imm 0x4008, 3 + compare 0x4008, 3 call_if 1, Route110_TrickHousePuzzle3_EventScript_16268F - compare_var_to_imm 0x4008, 4 + compare 0x4008, 4 call_if 1, Route110_TrickHousePuzzle3_EventScript_162695 - compare_var_to_imm 0x4008, 5 + compare 0x4008, 5 call_if 1, Route110_TrickHousePuzzle3_EventScript_16269B - compare_var_to_imm 0x4008, 6 + compare 0x4008, 6 call_if 1, Route110_TrickHousePuzzle3_EventScript_1626A1 - compare_var_to_imm 0x4008, 7 + compare 0x4008, 7 call_if 1, Route110_TrickHousePuzzle3_EventScript_1626A7 return @@ -347,14 +347,14 @@ Route110_TrickHousePuzzle3_EventScript_1626A7:: @ 81626A7 return Route110_TrickHousePuzzle3_EventScript_1626AD:: @ 81626AD - compare_var_to_imm 0x4009, 1 + compare 0x4009, 1 call_if 1, Route110_TrickHousePuzzle3_EventScript_161FE5 - compare_var_to_imm 0x4009, 0 + compare 0x4009, 0 call_if 1, Route110_TrickHousePuzzle3_EventScript_1622C8 special DrawWholeMapView - compare_var_to_imm 0x4009, 1 + compare 0x4009, 1 goto_if_eq Route110_TrickHousePuzzle3_EventScript_1626DD - compare_var_to_imm 0x4009, 0 + compare 0x4009, 0 goto_if_eq Route110_TrickHousePuzzle3_EventScript_1626E4 end @@ -370,7 +370,7 @@ Route110_TrickHousePuzzle3_EventScript_1626E4:: @ 81626E4 Route110_TrickHousePuzzle3_EventScript_1626EB:: @ 81626EB lockall - compare_var_to_imm 0x40ad, 0 + compare 0x40ad, 0 goto_if_eq Route110_TrickHousePuzzle3_EventScript_1626FD goto Route110_TrickHousePuzzle3_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle4.inc b/data/scripts/maps/Route110_TrickHousePuzzle4.inc index 0bff3f526..0c9fc426f 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle4.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle4.inc @@ -3,7 +3,7 @@ Route110_TrickHousePuzzle4_MapScripts:: @ 816274D Route110_TrickHousePuzzle4_EventScript_16274E:: @ 816274E lockall - compare_var_to_imm 0x40ae, 0 + compare 0x40ae, 0 goto_if_eq Route110_TrickHousePuzzle4_EventScript_162760 goto Route110_TrickHousePuzzle4_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle5.inc b/data/scripts/maps/Route110_TrickHousePuzzle5.inc index c99158dbd..dc3f9f725 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle5.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle5.inc @@ -13,7 +13,7 @@ Route110_TrickHousePuzzle5_MapScript1_1627B6:: @ 81627B6 Route110_TrickHousePuzzle5_EventScript_1627D5:: @ 81627D5 lockall - compare_var_to_imm 0x40af, 0 + compare 0x40af, 0 goto_if_eq Route110_TrickHousePuzzle5_EventScript_1627E7 goto Route110_TrickHousePuzzle5_EventScript_161892 end @@ -27,7 +27,7 @@ Route110_TrickHousePuzzle5_EventScript_1627F2:: @ 81627F2 lockall applymovement 1, Route110_TrickHousePuzzle5_Movement_1A0839 waitmovement 0 - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_16293F @@ -37,7 +37,7 @@ Route110_TrickHousePuzzle5_EventScript_162813:: @ 8162813 lockall applymovement 2, Route110_TrickHousePuzzle5_Movement_1A0839 waitmovement 0 - compare_var_to_imm 0x4002, 1 + compare 0x4002, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_1629B3 @@ -47,7 +47,7 @@ Route110_TrickHousePuzzle5_EventScript_162834:: @ 8162834 lockall applymovement 3, Route110_TrickHousePuzzle5_Movement_1A0839 waitmovement 0 - compare_var_to_imm 0x4003, 1 + compare 0x4003, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_162A27 @@ -57,7 +57,7 @@ Route110_TrickHousePuzzle5_EventScript_162855:: @ 8162855 lockall applymovement 4, Route110_TrickHousePuzzle5_Movement_1A0839 waitmovement 0 - compare_var_to_imm 0x4004, 1 + compare 0x4004, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_162A9B @@ -67,7 +67,7 @@ Route110_TrickHousePuzzle5_EventScript_162876:: @ 8162876 lockall applymovement 5, Route110_TrickHousePuzzle5_Movement_1A0839 waitmovement 0 - compare_var_to_imm 0x4005, 1 + compare 0x4005, 1 goto_if_eq Route110_TrickHousePuzzle5_EventScript_162DE9 setvar 0x4009, 0 goto Route110_TrickHousePuzzle5_EventScript_162B0F @@ -165,11 +165,11 @@ Route110_TrickHousePuzzle5_EventScript_16293F:: @ 816293F waitmovement 0 applymovement 1, Route110_TrickHousePuzzle5_Movement_1A0835 waitmovement 0 - compare_var_to_imm 0x4009, 1 + compare 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162DF3 - compare_var_to_imm 0x4009, 2 + compare 0x4009, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E2B - compare_var_to_imm 0x4009, 3 + compare 0x4009, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E63 msgbox Route110_TrickHousePuzzle5_Text_19D423, 4 random 3 @@ -187,11 +187,11 @@ Route110_TrickHousePuzzle5_EventScript_1629B3:: @ 81629B3 waitmovement 0 applymovement 2, Route110_TrickHousePuzzle5_Movement_1A0835 waitmovement 0 - compare_var_to_imm 0x4009, 1 + compare 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E9B - compare_var_to_imm 0x4009, 2 + compare 0x4009, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162ED3 - compare_var_to_imm 0x4009, 3 + compare 0x4009, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F0B msgbox Route110_TrickHousePuzzle5_Text_19D636, 4 random 3 @@ -209,11 +209,11 @@ Route110_TrickHousePuzzle5_EventScript_162A27:: @ 8162A27 waitmovement 0 applymovement 3, Route110_TrickHousePuzzle5_Movement_1A0835 waitmovement 0 - compare_var_to_imm 0x4009, 1 + compare 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162DF3 - compare_var_to_imm 0x4009, 2 + compare 0x4009, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E2B - compare_var_to_imm 0x4009, 3 + compare 0x4009, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E63 msgbox Route110_TrickHousePuzzle5_Text_19D7D3, 4 random 3 @@ -231,11 +231,11 @@ Route110_TrickHousePuzzle5_EventScript_162A9B:: @ 8162A9B waitmovement 0 applymovement 4, Route110_TrickHousePuzzle5_Movement_1A0835 waitmovement 0 - compare_var_to_imm 0x4009, 1 + compare 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162DF3 - compare_var_to_imm 0x4009, 2 + compare 0x4009, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E2B - compare_var_to_imm 0x4009, 3 + compare 0x4009, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E63 msgbox Route110_TrickHousePuzzle5_Text_19D93D, 4 random 3 @@ -253,11 +253,11 @@ Route110_TrickHousePuzzle5_EventScript_162B0F:: @ 8162B0F waitmovement 0 applymovement 5, Route110_TrickHousePuzzle5_Movement_1A0835 waitmovement 0 - compare_var_to_imm 0x4009, 1 + compare 0x4009, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162E9B - compare_var_to_imm 0x4009, 2 + compare 0x4009, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162ED3 - compare_var_to_imm 0x4009, 3 + compare 0x4009, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F0B msgbox Route110_TrickHousePuzzle5_Text_19DA9A, 4 random 3 @@ -418,80 +418,80 @@ Route110_TrickHousePuzzle5_EventScript_162DE9:: @ 8162DE9 end Route110_TrickHousePuzzle5_EventScript_162DF3:: @ 8162DF3 - compare_var_to_imm 0x4008, 1 + compare 0x4008, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F43 - compare_var_to_imm 0x4008, 2 + compare 0x4008, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F4E - compare_var_to_imm 0x4008, 3 + compare 0x4008, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F59 - compare_var_to_imm 0x4008, 4 + compare 0x4008, 4 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F64 - compare_var_to_imm 0x4008, 5 + compare 0x4008, 5 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F6F return Route110_TrickHousePuzzle5_EventScript_162E2B:: @ 8162E2B - compare_var_to_imm 0x4008, 1 + compare 0x4008, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F7A - compare_var_to_imm 0x4008, 2 + compare 0x4008, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F85 - compare_var_to_imm 0x4008, 3 + compare 0x4008, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F90 - compare_var_to_imm 0x4008, 4 + compare 0x4008, 4 call_if 1, Route110_TrickHousePuzzle5_EventScript_162F9B - compare_var_to_imm 0x4008, 5 + compare 0x4008, 5 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FA6 return Route110_TrickHousePuzzle5_EventScript_162E63:: @ 8162E63 - compare_var_to_imm 0x4008, 1 + compare 0x4008, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FB1 - compare_var_to_imm 0x4008, 2 + compare 0x4008, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FBC - compare_var_to_imm 0x4008, 3 + compare 0x4008, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FC7 - compare_var_to_imm 0x4009, 4 + compare 0x4009, 4 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FD2 - compare_var_to_imm 0x4009, 5 + compare 0x4009, 5 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FDD return Route110_TrickHousePuzzle5_EventScript_162E9B:: @ 8162E9B - compare_var_to_imm 0x4008, 1 + compare 0x4008, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FE8 - compare_var_to_imm 0x4008, 2 + compare 0x4008, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FF3 - compare_var_to_imm 0x4008, 3 + compare 0x4008, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_162FFE - compare_var_to_imm 0x4008, 4 + compare 0x4008, 4 call_if 1, Route110_TrickHousePuzzle5_EventScript_163009 - compare_var_to_imm 0x4008, 5 + compare 0x4008, 5 call_if 1, Route110_TrickHousePuzzle5_EventScript_163014 return Route110_TrickHousePuzzle5_EventScript_162ED3:: @ 8162ED3 - compare_var_to_imm 0x4008, 1 + compare 0x4008, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_16301F - compare_var_to_imm 0x4008, 2 + compare 0x4008, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_16302A - compare_var_to_imm 0x4008, 3 + compare 0x4008, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_163035 - compare_var_to_imm 0x4008, 4 + compare 0x4008, 4 call_if 1, Route110_TrickHousePuzzle5_EventScript_163040 - compare_var_to_imm 0x4008, 5 + compare 0x4008, 5 call_if 1, Route110_TrickHousePuzzle5_EventScript_16304B return Route110_TrickHousePuzzle5_EventScript_162F0B:: @ 8162F0B - compare_var_to_imm 0x4008, 1 + compare 0x4008, 1 call_if 1, Route110_TrickHousePuzzle5_EventScript_163056 - compare_var_to_imm 0x4008, 2 + compare 0x4008, 2 call_if 1, Route110_TrickHousePuzzle5_EventScript_163061 - compare_var_to_imm 0x4008, 3 + compare 0x4008, 3 call_if 1, Route110_TrickHousePuzzle5_EventScript_16306C - compare_var_to_imm 0x4008, 4 + compare 0x4008, 4 call_if 1, Route110_TrickHousePuzzle5_EventScript_163077 - compare_var_to_imm 0x4008, 5 + compare 0x4008, 5 call_if 1, Route110_TrickHousePuzzle5_EventScript_163082 return diff --git a/data/scripts/maps/Route110_TrickHousePuzzle6.inc b/data/scripts/maps/Route110_TrickHousePuzzle6.inc index e4ce617c9..ddf845142 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle6.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle6.inc @@ -17,7 +17,7 @@ Route110_TrickHousePuzzle6_EventScript_1630E6:: @ 81630E6 Route110_TrickHousePuzzle6_EventScript_1630EA:: @ 81630EA lockall - compare_var_to_imm 0x40b0, 0 + compare 0x40b0, 0 goto_if_eq Route110_TrickHousePuzzle6_EventScript_1630FC goto Route110_TrickHousePuzzle6_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle7.inc b/data/scripts/maps/Route110_TrickHousePuzzle7.inc index ae55a4316..3361e3e9d 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle7.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle7.inc @@ -73,7 +73,7 @@ Route110_TrickHousePuzzle7_EventScript_163240:: @ 8163240 return Route110_TrickHousePuzzle7_MapScript1_163253:: @ 8163253 - compare_var_to_imm 0x40b6, 1 + compare 0x40b6, 1 goto_if_eq Route110_TrickHousePuzzle7_EventScript_16326E clearflag 194 clearflag 195 @@ -86,7 +86,7 @@ Route110_TrickHousePuzzle7_EventScript_16326E:: @ 816326E end Route110_TrickHousePuzzle7_MapScript1_16326F:: @ 816326F - compare_var_to_imm 0x40b6, 1 + compare 0x40b6, 1 call_if 1, Route110_TrickHousePuzzle7_EventScript_163167 end @@ -100,7 +100,7 @@ Route110_TrickHousePuzzle7_EventScript_163285:: @ 8163285 Route110_TrickHousePuzzle7_EventScript_16328B:: @ 816328B lockall - compare_var_to_imm 0x40b1, 0 + compare 0x40b1, 0 goto_if_eq Route110_TrickHousePuzzle7_EventScript_16329D goto Route110_TrickHousePuzzle7_EventScript_161892 end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle8.inc b/data/scripts/maps/Route110_TrickHousePuzzle8.inc index 1c6a9847f..5f0b00684 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle8.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle8.inc @@ -3,7 +3,7 @@ Route110_TrickHousePuzzle8_MapScripts:: @ 816341B Route110_TrickHousePuzzle8_EventScript_16341C:: @ 816341C lockall - compare_var_to_imm 0x40b2, 0 + compare 0x40b2, 0 goto_if_eq Route110_TrickHousePuzzle8_EventScript_16342E goto Route110_TrickHousePuzzle8_EventScript_161892 end diff --git a/data/scripts/maps/Route111.inc b/data/scripts/maps/Route111.inc index 35c60cf8f..617509938 100644 --- a/data/scripts/maps/Route111.inc +++ b/data/scripts/maps/Route111.inc @@ -22,15 +22,15 @@ Route111_MapScript1_14FFB9:: @ 814FFB9 Route111_EventScript_14FFCD:: @ 814FFCD getplayerxy 0x4000, 0x4001 - compare_var_to_imm 0x4001, 34 + compare 0x4001, 34 goto_if 0, Route111_EventScript_15000C - compare_var_to_imm 0x4001, 107 + compare 0x4001, 107 goto_if 2, Route111_EventScript_15000C - compare_var_to_imm 0x4001, 72 + compare 0x4001, 72 goto_if 2, Route111_EventScript_150009 - compare_var_to_imm 0x4000, 2000 + compare 0x4000, 2000 goto_if 2, Route111_EventScript_15000C - compare_var_to_imm 0x4000, 8 + compare 0x4000, 8 goto_if 0, Route111_EventScript_15000C Route111_EventScript_150009:: @ 8150009 @@ -52,7 +52,7 @@ Route111_EventScript_15000D:: @ 815000D Route111_EventScript_150023:: @ 8150023 lockall msgbox Route111_Text_16FA54, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route111_EventScript_15005F giveitem ITEM_ROOT_FOSSIL closebutton @@ -74,7 +74,7 @@ Route111_EventScript_15005F:: @ 815005F Route111_EventScript_150069:: @ 8150069 lockall msgbox Route111_Text_16FAED, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route111_EventScript_1500A5 giveitem ITEM_CLAW_FOSSIL closebutton @@ -125,7 +125,7 @@ Route111_EventScript_1500C5:: @ 81500C5 goto_if_eq Route111_EventScript_150100 msgbox Route111_Text_1C56F0, 4 giveitem ITEM_RAZZ_BERRY - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route111_EventScript_1A029B setflag 2252 special GetPlayerBigGuyGirlString @@ -164,7 +164,7 @@ Route111_EventScript_150122:: @ 8150122 Route111_EventScript_15013A:: @ 815013A checkitem ITEM_GO_GOGGLES, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route111_EventScript_150151 setvar 0x4003, 1 releaseall @@ -173,13 +173,13 @@ Route111_EventScript_15013A:: @ 815013A Route111_EventScript_150151:: @ 8150151 msgbox Route111_Text_1A0F93, 4 closebutton - compare_var_to_imm 0x8004, 0 + compare 0x8004, 0 call_if 1, Route111_EventScript_150188 - compare_var_to_imm 0x8004, 1 + compare 0x8004, 1 call_if 1, Route111_EventScript_150193 - compare_var_to_imm 0x8004, 2 + compare 0x8004, 2 call_if 1, Route111_EventScript_15019E - compare_var_to_imm 0x8004, 3 + compare 0x8004, 3 call_if 1, Route111_EventScript_1501A9 releaseall end @@ -238,7 +238,7 @@ Route111_EventScript_1501D1:: @ 81501D1 faceplayer setflag 2115 msgbox Route111_Text_16F705, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route111_EventScript_1501F3 msgbox Route111_Text_16F785, 4 release @@ -393,7 +393,7 @@ Route111_EventScript_1503EC:: @ 81503EC Route111_EventScript_150403:: @ 8150403 trainerbattle 0, OPPONENT_DUSTY_1, 0, Route111_Text_1BAEC9, Route111_Text_1BAF14 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route111_EventScript_15042A msgbox Route111_Text_1BAF5B, 6 end @@ -421,7 +421,7 @@ Route111_EventScript_15046F:: @ 815046F Route111_EventScript_150486:: @ 8150486 trainerbattle 0, OPPONENT_WILTON_1, 0, Route111_Text_1BB2E3, Route111_Text_1BB313 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route111_EventScript_1504AD msgbox Route111_Text_1BB33E, 6 end @@ -434,7 +434,7 @@ Route111_EventScript_1504AD:: @ 81504AD Route111_EventScript_1504C4:: @ 81504C4 trainerbattle 0, OPPONENT_BROOKE_1, 0, Route111_Text_1BB44F, Route111_Text_1BB49F specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route111_EventScript_1504EB msgbox Route111_Text_1BB4CE, 6 end diff --git a/data/scripts/maps/Route111_OldLadysRestStop.inc b/data/scripts/maps/Route111_OldLadysRestStop.inc index fdd0078ed..a33b436dc 100644 --- a/data/scripts/maps/Route111_OldLadysRestStop.inc +++ b/data/scripts/maps/Route111_OldLadysRestStop.inc @@ -10,9 +10,9 @@ Route111_OldLadysRestStop_EventScript_15BFDB:: @ 815BFDB lock faceplayer msgbox Route111_OldLadysRestStop_Text_1923AF, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route111_OldLadysRestStop_EventScript_15BFFC - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route111_OldLadysRestStop_EventScript_15C029 end @@ -21,9 +21,9 @@ Route111_OldLadysRestStop_EventScript_15BFFC:: @ 815BFFC closebutton call Route111_OldLadysRestStop_EventScript_1A02CA msgbox Route111_OldLadysRestStop_Text_19244D, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route111_OldLadysRestStop_EventScript_15BFFC - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route111_OldLadysRestStop_EventScript_15C029 end diff --git a/data/scripts/maps/Route111_WinstrateFamilysHouse.inc b/data/scripts/maps/Route111_WinstrateFamilysHouse.inc index 7742d3507..ea70af41f 100644 --- a/data/scripts/maps/Route111_WinstrateFamilysHouse.inc +++ b/data/scripts/maps/Route111_WinstrateFamilysHouse.inc @@ -17,7 +17,7 @@ Route111_WinstrateFamilysHouse_EventScript_15BF3A:: @ 815BF3A goto_if_eq Route111_WinstrateFamilysHouse_EventScript_15BF72 msgbox Route111_WinstrateFamilysHouse_Text_19208A, 4 giveitem ITEM_MACHO_BRACE - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route111_WinstrateFamilysHouse_EventScript_1A029B setflag 277 goto Route111_WinstrateFamilysHouse_EventScript_15BFC4 diff --git a/data/scripts/maps/Route112.inc b/data/scripts/maps/Route112.inc index 70a6a2869..d0d464207 100644 --- a/data/scripts/maps/Route112.inc +++ b/data/scripts/maps/Route112.inc @@ -39,7 +39,7 @@ Route112_EventScript_150549:: @ 8150549 Route112_EventScript_150560:: @ 8150560 trainerbattle 0, OPPONENT_TRENT_1, 0, Route112_Text_1BB6A0, Route112_Text_1BB707 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route112_EventScript_150587 msgbox Route112_Text_1BB721, 6 end diff --git a/data/scripts/maps/Route112_CableCarStation.inc b/data/scripts/maps/Route112_CableCarStation.inc index dfa1fecd6..5254b7beb 100644 --- a/data/scripts/maps/Route112_CableCarStation.inc +++ b/data/scripts/maps/Route112_CableCarStation.inc @@ -5,7 +5,7 @@ Route112_CableCarStation_MapScripts:: @ 815C033 Route112_CableCarStation_MapScript1_15C03E:: @ 815C03E warp6 Route112, 255, 28, 28 - compare_var_to_imm 0x40a3, 2 + compare 0x40a3, 2 call_if 1, Route112_CableCarStation_EventScript_15C052 end @@ -33,9 +33,9 @@ Route112_CableCarStation_EventScript_15C08C:: @ 815C08C lock faceplayer msgbox Route112_CableCarStation_Text_1924F5, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route112_CableCarStation_EventScript_15C0AD - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route112_CableCarStation_EventScript_15C0DC end diff --git a/data/scripts/maps/Route113.inc b/data/scripts/maps/Route113.inc index 06519867e..2eb34cdf3 100644 --- a/data/scripts/maps/Route113.inc +++ b/data/scripts/maps/Route113.inc @@ -14,9 +14,9 @@ Route113_MapScript1_1505DA:: @ 81505DA Route113_EventScript_1505E5:: @ 81505E5 getplayerxy 0x4000, 0x4001 - compare_var_to_imm 0x4000, 19 + compare 0x4000, 19 goto_if 0, Route113_EventScript_150604 - compare_var_to_imm 0x4000, 84 + compare 0x4000, 84 goto_if 2, Route113_EventScript_150604 setweather 7 return @@ -61,7 +61,7 @@ Route113_EventScript_150652:: @ 8150652 Route113_EventScript_150669:: @ 8150669 trainerbattle 0, OPPONENT_MADELINE_1, 0, Route113_Text_1BBB27, Route113_Text_1BBB7A specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route113_EventScript_150690 msgbox Route113_Text_1BBB9A, 6 end @@ -74,7 +74,7 @@ Route113_EventScript_150690:: @ 8150690 Route113_EventScript_1506A7:: @ 81506A7 trainerbattle 0, OPPONENT_LAO_1, 0, Route113_Text_1BBC59, Route113_Text_1BBC90 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route113_EventScript_1506CE msgbox Route113_Text_1BBCAB, 6 end diff --git a/data/scripts/maps/Route113_GlassWorkshop.inc b/data/scripts/maps/Route113_GlassWorkshop.inc index 9774a3a5f..48c2965fd 100644 --- a/data/scripts/maps/Route113_GlassWorkshop.inc +++ b/data/scripts/maps/Route113_GlassWorkshop.inc @@ -4,7 +4,7 @@ Route113_GlassWorkshop_MapScripts:: @ 816354A Route113_GlassWorkshop_MapScript1_163550:: @ 8163550 setflag 2116 - compare_var_to_imm 0x40be, 1 + compare 0x40be, 1 call_if 1, Route113_GlassWorkshop_EventScript_16355F end @@ -15,11 +15,11 @@ Route113_GlassWorkshop_EventScript_16355F:: @ 816355F Route113_GlassWorkshop_EventScript_163565:: @ 8163565 lock faceplayer - compare_var_to_imm 0x40be, 10 + compare 0x40be, 10 goto_if 4, Route113_GlassWorkshop_EventScript_1638D2 - compare_var_to_imm 0x40be, 2 + compare 0x40be, 2 goto_if_eq Route113_GlassWorkshop_EventScript_1635B5 - compare_var_to_imm 0x40be, 1 + compare 0x40be, 1 goto_if_eq Route113_GlassWorkshop_EventScript_1635AB msgbox Route113_GlassWorkshop_Text_19E4E6, 4 giveitem ITEM_SOOT_SACK @@ -35,10 +35,10 @@ Route113_GlassWorkshop_EventScript_1635AB:: @ 81635AB Route113_GlassWorkshop_EventScript_1635B5:: @ 81635B5 checkitem ITEM_SOOT_SACK, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_1635E4 msgbox Route113_GlassWorkshop_Text_19E65B, 4 - compare_var_to_imm 0x4048, 250 + compare 0x4048, 250 goto_if 0, Route113_GlassWorkshop_EventScript_163818 message Route113_GlassWorkshop_Text_19E757 waittext @@ -70,10 +70,10 @@ Route113_GlassWorkshop_EventScript_163660:: @ 8163660 setvar 0x8008, 39 bufferitem 0, 0x8008 setvar 0x800a, 250 - compare_var_to_imm 0x4048, 250 + compare 0x4048, 250 goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 10 subvar 0x4048, 250 @@ -84,10 +84,10 @@ Route113_GlassWorkshop_EventScript_16369C:: @ 816369C setvar 0x8008, 40 bufferitem 0, 0x8008 setvar 0x800a, 500 - compare_var_to_imm 0x4048, 500 + compare 0x4048, 500 goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 11 subvar 0x4048, 500 @@ -98,10 +98,10 @@ Route113_GlassWorkshop_EventScript_1636D8:: @ 81636D8 setvar 0x8008, 41 bufferitem 0, 0x8008 setvar 0x800a, 500 - compare_var_to_imm 0x4048, 500 + compare 0x4048, 500 goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 12 subvar 0x4048, 500 @@ -112,10 +112,10 @@ Route113_GlassWorkshop_EventScript_163714:: @ 8163714 setvar 0x8008, 43 bufferitem 0, 0x8008 setvar 0x800a, 1000 - compare_var_to_imm 0x4048, 1000 + compare 0x4048, 1000 goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 13 subvar 0x4048, 1000 @@ -126,10 +126,10 @@ Route113_GlassWorkshop_EventScript_163750:: @ 8163750 setvar 0x8008, 42 bufferitem 0, 0x8008 setvar 0x800a, 1000 - compare_var_to_imm 0x4048, 1000 + compare 0x4048, 1000 goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 14 subvar 0x4048, 1000 @@ -141,10 +141,10 @@ Route113_GlassWorkshop_EventScript_16378C:: @ 816378C setvar 0x8008, 13 bufferdecor 0, 0x8008 setvar 0x800a, 6000 - compare_var_to_imm 0x4048, 6000 + compare 0x4048, 6000 goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 15 subvar 0x4048, 6000 @@ -156,10 +156,10 @@ Route113_GlassWorkshop_EventScript_1637CD:: @ 81637CD setvar 0x8008, 6 bufferdecor 0, 0x8008 setvar 0x800a, 8000 - compare_var_to_imm 0x4048, 8000 + compare 0x4048, 8000 goto_if 0, Route113_GlassWorkshop_EventScript_163830 msgbox Route113_GlassWorkshop_Text_19E7CD, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_163845 setvar 0x40be, 16 subvar 0x4048, 8000 @@ -201,9 +201,9 @@ Route113_GlassWorkshop_EventScript_163851:: @ 8163851 delay 30 fadescreen 0 msgbox Route113_GlassWorkshop_Text_19E9D7, 4 - compare_var_to_imm 0x8009, 0 + compare 0x8009, 0 call_if 1, Route113_GlassWorkshop_EventScript_163889 - compare_var_to_imm 0x8009, 1 + compare 0x8009, 1 call_if 1, Route113_GlassWorkshop_EventScript_1638A1 setvar 0x40be, 2 release @@ -211,13 +211,13 @@ Route113_GlassWorkshop_EventScript_163851:: @ 8163851 Route113_GlassWorkshop_EventScript_163889:: @ 8163889 giveitem 0x8008 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_1638B4 return Route113_GlassWorkshop_EventScript_1638A1:: @ 81638A1 givedecoration 0x8008 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route113_GlassWorkshop_EventScript_1638C3 return @@ -295,9 +295,9 @@ Route113_GlassWorkshop_EventScript_16399D:: @ 816399D Route113_GlassWorkshop_EventScript_1639B1:: @ 81639B1 msgbox Route113_GlassWorkshop_Text_19E9D7, 4 - compare_var_to_imm 0x8009, 0 + compare 0x8009, 0 call_if 1, Route113_GlassWorkshop_EventScript_163889 - compare_var_to_imm 0x8009, 1 + compare 0x8009, 1 call_if 1, Route113_GlassWorkshop_EventScript_1638A1 setvar 0x40be, 2 release diff --git a/data/scripts/maps/Route114.inc b/data/scripts/maps/Route114.inc index 799a115b7..95d321e0b 100644 --- a/data/scripts/maps/Route114.inc +++ b/data/scripts/maps/Route114.inc @@ -12,7 +12,7 @@ Route114_EventScript_150733:: @ 8150733 addvar RESULT, 15 addvar RESULT, 133 giveitem RESULT - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route114_EventScript_1A029B setflag 2251 msgbox Route114_Text_1C5861, 4 @@ -31,7 +31,7 @@ Route114_EventScript_150782:: @ 8150782 goto_if_eq Route114_EventScript_1507B9 msgbox Route114_Text_170154, 4 giveitem ITEM_TM05 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route114_EventScript_1A029B setflag 231 msgbox Route114_Text_1701C5, 4 @@ -88,7 +88,7 @@ Route114_EventScript_150836:: @ 8150836 Route114_EventScript_15084D:: @ 815084D trainerbattle 0, OPPONENT_STEVE_1, 0, Route114_Text_1BC2F5, Route114_Text_1BC327 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route114_EventScript_150874 msgbox Route114_Text_1BC337, 6 end @@ -101,7 +101,7 @@ Route114_EventScript_150874:: @ 8150874 Route114_EventScript_15088B:: @ 815088B trainerbattle 0, OPPONENT_BERNIE_1, 0, Route114_Text_1BC45A, Route114_Text_1BC499 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route114_EventScript_1508B2 msgbox Route114_Text_1BC4B5, 6 end diff --git a/data/scripts/maps/Route114_FossilManiacsHouse.inc b/data/scripts/maps/Route114_FossilManiacsHouse.inc index 3406a78f6..b217f24c4 100644 --- a/data/scripts/maps/Route114_FossilManiacsHouse.inc +++ b/data/scripts/maps/Route114_FossilManiacsHouse.inc @@ -13,7 +13,7 @@ Route114_FossilManiacsHouse_EventScript_15C1C3:: @ 815C1C3 goto_if_eq Route114_FossilManiacsHouse_EventScript_15C1F2 msgbox Route114_FossilManiacsHouse_Text_1925E1, 4 giveitem ITEM_TM28 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route114_FossilManiacsHouse_EventScript_1A029B setflag 261 release diff --git a/data/scripts/maps/Route114_FossilManiacsTunnel.inc b/data/scripts/maps/Route114_FossilManiacsTunnel.inc index 71c627728..13843f758 100644 --- a/data/scripts/maps/Route114_FossilManiacsTunnel.inc +++ b/data/scripts/maps/Route114_FossilManiacsTunnel.inc @@ -7,10 +7,10 @@ Route114_FossilManiacsTunnel_EventScript_15C20F:: @ 815C20F checkflag 267 goto_if_eq Route114_FossilManiacsTunnel_EventScript_15C24E checkitem ITEM_ROOT_FOSSIL, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route114_FossilManiacsTunnel_EventScript_15C244 checkitem ITEM_CLAW_FOSSIL, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route114_FossilManiacsTunnel_EventScript_15C244 msgbox Route114_FossilManiacsTunnel_Text_192795, 4 release diff --git a/data/scripts/maps/Route114_LanettesHouse.inc b/data/scripts/maps/Route114_LanettesHouse.inc index fbc4976ab..e4334647c 100644 --- a/data/scripts/maps/Route114_LanettesHouse.inc +++ b/data/scripts/maps/Route114_LanettesHouse.inc @@ -18,7 +18,7 @@ Route114_LanettesHouse_EventScript_15C262:: @ 815C262 .else givedecoration 100 .endif - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route114_LanettesHouse_EventScript_1A02AE setflag 131 release @@ -32,7 +32,7 @@ Route114_LanettesHouse_EventScript_15C28F:: @ 815C28F Route114_LanettesHouse_EventScript_15C299:: @ 815C299 lockall msgbox Route114_LanettesHouse_Text_192B4A, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route114_LanettesHouse_EventScript_15C2B7 msgbox Route114_LanettesHouse_Text_192DA9, 4 releaseall @@ -40,7 +40,7 @@ Route114_LanettesHouse_EventScript_15C299:: @ 815C299 Route114_LanettesHouse_EventScript_15C2B7:: @ 815C2B7 msgbox Route114_LanettesHouse_Text_192C01, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, Route114_LanettesHouse_EventScript_15C2CC releaseall end diff --git a/data/scripts/maps/Route115.inc b/data/scripts/maps/Route115.inc index 64b0a7497..8e0eb7855 100644 --- a/data/scripts/maps/Route115.inc +++ b/data/scripts/maps/Route115.inc @@ -16,7 +16,7 @@ Route115_EventScript_150940:: @ 8150940 Route115_EventScript_150949:: @ 8150949 trainerbattle 0, OPPONENT_TIMOTHY_1, 0, Route115_Text_1BC9AC, Route115_Text_1BC9E6 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route115_EventScript_150970 msgbox Route115_Text_1BCA0E, 6 end @@ -34,7 +34,7 @@ Route115_EventScript_150987:: @ 8150987 Route115_EventScript_15099E:: @ 815099E trainerbattle 0, OPPONENT_NOB_1, 0, Route115_Text_1BCB8A, Route115_Text_1BCBC1 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route115_EventScript_1509C5 msgbox Route115_Text_1BCBDE, 6 end @@ -47,7 +47,7 @@ Route115_EventScript_1509C5:: @ 81509C5 Route115_EventScript_1509DC:: @ 81509DC trainerbattle 0, OPPONENT_CYNDY_1, 0, Route115_Text_1BCCF4, Route115_Text_1BCD32 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route115_EventScript_150A03 msgbox Route115_Text_1BCD4C, 6 end diff --git a/data/scripts/maps/Route116.inc b/data/scripts/maps/Route116.inc index 61ccb6632..5a328f198 100644 --- a/data/scripts/maps/Route116.inc +++ b/data/scripts/maps/Route116.inc @@ -44,17 +44,17 @@ Route116_EventScript_150A7B:: @ 8150A7B Route116_EventScript_150A94:: @ 8150A94 setflag 287 giveitem ITEM_REPEAT_BALL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route116_EventScript_150B12 msgbox Route116_Text_1707B8, 4 closebutton - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, Route116_EventScript_150AEE - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, Route116_EventScript_150AEE - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, Route116_EventScript_150AEE - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, Route116_EventScript_150AF9 disappear LAST_TALKED clearflag 949 @@ -148,10 +148,10 @@ Route116_EventScript_150B8F:: @ 8150B8F lock faceplayer checkitem ITEM_BLACK_GLASSES, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route116_EventScript_150BCA specialvar RESULT, sub_810F828 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route116_EventScript_150BBB msgbox Route116_Text_1708EE, 4 release @@ -167,7 +167,7 @@ Route116_EventScript_150BCA:: @ 8150BCA msgbox Route116_Text_1708EE, 4 msgbox Route116_Text_170921, 4 specialvar RESULT, sub_810F828 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route116_EventScript_150BF4 msgbox Route116_Text_170A03, 4 release @@ -181,13 +181,13 @@ Route116_EventScript_150BF4:: @ 8150BF4 Route116_EventScript_150C03:: @ 8150C03 delay 20 - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, Route116_EventScript_150C37 - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, Route116_EventScript_150C37 - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, Route116_EventScript_150C37 - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, Route116_EventScript_150C42 disappear LAST_TALKED release @@ -241,7 +241,7 @@ Route116_EventScript_150C79:: @ 8150C79 Route116_EventScript_150C90:: @ 8150C90 trainerbattle 0, OPPONENT_JERRY_1, 0, Route116_Text_1BD1C0, Route116_Text_1BD21A specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route116_EventScript_150CB7 msgbox Route116_Text_1BD248, 6 end @@ -264,7 +264,7 @@ Route116_EventScript_150CE5:: @ 8150CE5 Route116_EventScript_150CFC:: @ 8150CFC trainerbattle 0, OPPONENT_KAREN_1, 0, Route116_Text_1BD377, Route116_Text_1BD3AC specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route116_EventScript_150D23 msgbox Route116_Text_1BD3C3, 6 end diff --git a/data/scripts/maps/Route117.inc b/data/scripts/maps/Route117.inc index 6d538a872..6ba9519eb 100644 --- a/data/scripts/maps/Route117.inc +++ b/data/scripts/maps/Route117.inc @@ -41,7 +41,7 @@ Route117_EventScript_150D84:: @ 8150D84 Route117_EventScript_150D8D:: @ 8150D8D trainerbattle 0, OPPONENT_ISAAC_1, 0, Route117_Text_1BD49E, Route117_Text_1BD4D9 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_EventScript_150DB4 msgbox Route117_Text_1BD4F9, 6 end @@ -54,7 +54,7 @@ Route117_EventScript_150DB4:: @ 8150DB4 Route117_EventScript_150DCB:: @ 8150DCB trainerbattle 0, OPPONENT_LYDIA_1, 0, Route117_Text_1BD634, Route117_Text_1BD67B specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_EventScript_150DF2 msgbox Route117_Text_1BD69B, 6 end @@ -67,7 +67,7 @@ Route117_EventScript_150DF2:: @ 8150DF2 Route117_EventScript_150E09:: @ 8150E09 trainerbattle 0, OPPONENT_DYLAN_1, 0, Route117_Text_1BD79A, Route117_Text_1BD7E0 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_EventScript_150E30 msgbox Route117_Text_1BD7F5, 6 end @@ -80,7 +80,7 @@ Route117_EventScript_150E30:: @ 8150E30 Route117_EventScript_150E47:: @ 8150E47 trainerbattle 0, OPPONENT_MARIA_1, 0, Route117_Text_1BD914, Route117_Text_1BD965 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_EventScript_150E6E msgbox Route117_Text_1BD98F, 6 end @@ -98,7 +98,7 @@ Route117_EventScript_150E85:: @ 8150E85 Route117_EventScript_150E9C:: @ 8150E9C trainerbattle 4, OPPONENT_ANNA_AND_MEG_1, 0, Route117_Text_1BDBC3, Route117_Text_1BDC07, Route117_Text_1BDC96 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_EventScript_150EC7 msgbox Route117_Text_1BDC44, 6 end @@ -111,7 +111,7 @@ Route117_EventScript_150EC7:: @ 8150EC7 Route117_EventScript_150EE2:: @ 8150EE2 trainerbattle 4, OPPONENT_ANNA_AND_MEG_1, 0, Route117_Text_1BDCD2, Route117_Text_1BDD1E, Route117_Text_1BDD8B specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route117_EventScript_150F0D msgbox Route117_Text_1BDD4E, 6 end diff --git a/data/scripts/maps/Route118.inc b/data/scripts/maps/Route118.inc index 8c91e7da4..86e5f9045 100644 --- a/data/scripts/maps/Route118.inc +++ b/data/scripts/maps/Route118.inc @@ -12,9 +12,9 @@ Route118_EventScript_150F34:: @ 8150F34 checkflag 227 goto_if_eq Route118_EventScript_150F89 msgbox Route118_Text_170F12, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route118_EventScript_150F5E - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route118_EventScript_150F7F end @@ -83,11 +83,11 @@ Route118_EventScript_151004:: @ 8151004 delay 30 msgbox Route118_Text_170D66, 4 closebutton - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, Route118_EventScript_151048 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, Route118_EventScript_151053 - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, Route118_EventScript_15105E setvar 0x4071, 1 disappear 19 @@ -162,7 +162,7 @@ Route118_Movement_151086:: @ 8151086 Route118_EventScript_15108F:: @ 815108F trainerbattle 0, OPPONENT_ROSE_1, 0, Route118_Text_1BDFF4, Route118_Text_1BE03C specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route118_EventScript_1510B6 msgbox Route118_Text_1BE05E, 6 end @@ -185,7 +185,7 @@ Route118_EventScript_1510E4:: @ 81510E4 Route118_EventScript_1510FB:: @ 81510FB trainerbattle 0, OPPONENT_DALTON_1, 0, Route118_Text_1BE3E8, Route118_Text_1BE406 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route118_EventScript_151122 msgbox Route118_Text_1BE413, 6 end diff --git a/data/scripts/maps/Route119.inc b/data/scripts/maps/Route119.inc index 5b0f61387..fff294ca9 100644 --- a/data/scripts/maps/Route119.inc +++ b/data/scripts/maps/Route119.inc @@ -9,9 +9,9 @@ Route119_MapScript1_151172:: @ 8151172 end Route119_EventScript_15117C:: @ 815117C - compare_var_to_imm 0x8004, 6 + compare 0x8004, 6 call_if 1, Route119_EventScript_151193 - compare_var_to_imm 0x8004, 7 + compare 0x8004, 7 call_if 1, Route119_EventScript_151197 return @@ -27,7 +27,7 @@ Route119_MapScript1_15119B:: @ 815119B call Route119_EventScript_1A014E call Route119_EventScript_1A0172 call Route119_EventScript_1A0196 - compare_var_to_imm 0x40b3, 1 + compare 0x40b3, 1 call_if 1, Route119_EventScript_1511B9 special SetRoute119Weather end @@ -52,29 +52,29 @@ Route119_EventScript_1511DB:: @ 81511DB lockall reappear 25 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route119_EventScript_151254 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, Route119_EventScript_151259 delay 65 - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 call_if 1, Route119_EventScript_1513A6 - compare_var_to_imm 0x4001, 2 + compare 0x4001, 2 call_if 1, Route119_EventScript_1513B1 applymovement 255, Route119_Movement_1A0845 waitmovement 0 delay 30 - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 call_if 1, Route119_EventScript_1513D2 - compare_var_to_imm 0x4001, 2 + compare 0x4001, 2 call_if 1, Route119_EventScript_1513E1 disappear 25 reappear 16 delay 30 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route119_EventScript_15125E - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route119_EventScript_1512D8 releaseall end @@ -154,16 +154,16 @@ Route119_EventScript_151352:: @ 8151352 Route119_EventScript_151362:: @ 8151362 closebutton - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 call_if 1, Route119_EventScript_1513D2 - compare_var_to_imm 0x4001, 2 + compare 0x4001, 2 call_if 1, Route119_EventScript_1513E1 disappear 16 reappear 25 delay 30 - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 call_if 1, Route119_EventScript_1513BC - compare_var_to_imm 0x4001, 2 + compare 0x4001, 2 call_if 1, Route119_EventScript_1513C7 disappear 25 setvar 0x4072, 1 @@ -297,7 +297,7 @@ Route119_EventScript_1514A8:: @ 81514A8 Route119_EventScript_1514BF:: @ 81514BF trainerbattle 0, OPPONENT_JACKSON_1, 0, Route119_Text_1BE8BB, Route119_Text_1BE90E specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route119_EventScript_1514E6 msgbox Route119_Text_1BE937, 6 end @@ -310,7 +310,7 @@ Route119_EventScript_1514E6:: @ 81514E6 Route119_EventScript_1514FD:: @ 81514FD trainerbattle 0, OPPONENT_CATHERINE_1, 0, Route119_Text_1BEA3A, Route119_Text_1BEA88 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route119_EventScript_151524 msgbox Route119_Text_1BEAB3, 6 end diff --git a/data/scripts/maps/Route119_WeatherInstitute_1F.inc b/data/scripts/maps/Route119_WeatherInstitute_1F.inc index aa918bc34..762a6c299 100644 --- a/data/scripts/maps/Route119_WeatherInstitute_1F.inc +++ b/data/scripts/maps/Route119_WeatherInstitute_1F.inc @@ -4,7 +4,7 @@ Route119_WeatherInstitute_1F_MapScripts:: @ 8163C2A Route119_WeatherInstitute_1F_MapScript1_163C30:: @ 8163C30 call Route119_WeatherInstitute_1F_EventScript_1A0196 - compare_var_to_imm 0x40b3, 0 + compare 0x40b3, 0 call_if 1, Route119_WeatherInstitute_1F_EventScript_163C41 end @@ -17,7 +17,7 @@ Route119_WeatherInstitute_1F_EventScript_163C4D:: @ 8163C4D lock faceplayer special GetPlayerBigGuyGirlString - compare_var_to_imm 0x40b3, 0 + compare 0x40b3, 0 goto_if_eq Route119_WeatherInstitute_1F_EventScript_163C67 msgbox Route119_WeatherInstitute_1F_Text_19ED22, 4 release diff --git a/data/scripts/maps/Route119_WeatherInstitute_2F.inc b/data/scripts/maps/Route119_WeatherInstitute_2F.inc index b903d7063..5f9cf9888 100644 --- a/data/scripts/maps/Route119_WeatherInstitute_2F.inc +++ b/data/scripts/maps/Route119_WeatherInstitute_2F.inc @@ -4,9 +4,9 @@ Route119_WeatherInstitute_2F_MapScripts:: @ 8163CC2 Route119_WeatherInstitute_2F_MapScript1_163CC8:: @ 8163CC8 call Route119_WeatherInstitute_2F_EventScript_1A0196 - compare_var_to_imm 0x40b3, 0 + compare 0x40b3, 0 call_if 1, Route119_WeatherInstitute_2F_EventScript_163CE4 - compare_var_to_imm 0x40b3, 1 + compare 0x40b3, 1 call_if 1, Route119_WeatherInstitute_2F_EventScript_163CF0 end @@ -56,7 +56,7 @@ Route119_WeatherInstitute_2F_EventScript_163D45:: @ 8163D45 Route119_WeatherInstitute_2F_EventScript_163D7A:: @ 8163D7A msgbox Route119_WeatherInstitute_2F_Text_19F1CF, 4 countpokemon - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq Route119_WeatherInstitute_2F_EventScript_163DB4 playfanfare 370 message Route119_WeatherInstitute_2F_Text_19F267 diff --git a/data/scripts/maps/Route120.inc b/data/scripts/maps/Route120.inc index 7c1968aa5..cb8ebb2cc 100644 --- a/data/scripts/maps/Route120.inc +++ b/data/scripts/maps/Route120.inc @@ -10,17 +10,17 @@ Route120_MapScript1_15161E:: @ 815161E end Route120_EventScript_151628:: @ 8151628 - compare_var_to_imm 0x8004, 0 + compare 0x8004, 0 call_if 1, Route120_EventScript_15166B - compare_var_to_imm 0x8004, 1 + compare 0x8004, 1 call_if 1, Route120_EventScript_151672 - compare_var_to_imm 0x8004, 2 + compare 0x8004, 2 call_if 1, Route120_EventScript_151676 - compare_var_to_imm 0x8004, 3 + compare 0x8004, 3 call_if 1, Route120_EventScript_15167A - compare_var_to_imm 0x8004, 4 + compare 0x8004, 4 call_if 1, Route120_EventScript_15167E - compare_var_to_imm 0x8004, 5 + compare 0x8004, 5 call_if 1, Route120_EventScript_151682 return @@ -81,11 +81,11 @@ Route120_MapScript1_1516DF:: @ 81516DF Route120_EventScript_1516EA:: @ 81516EA getplayerxy 0x4000, 0x4001 - compare_var_to_imm 0x4001, 14 + compare 0x4001, 14 goto_if 3, Route120_EventScript_151715 - compare_var_to_imm 0x4001, 60 + compare 0x4001, 60 goto_if 3, Route120_EventScript_151719 - compare_var_to_imm 0x4001, 61 + compare 0x4001, 61 goto_if 4, Route120_EventScript_151711 return @@ -98,9 +98,9 @@ Route120_EventScript_151715:: @ 8151715 return Route120_EventScript_151719:: @ 8151719 - compare_var_to_imm 0x4000, 7 + compare 0x4000, 7 goto_if 3, Route120_EventScript_151735 - compare_var_to_imm 0x4000, 19 + compare 0x4000, 19 goto_if 3, Route120_EventScript_151715 goto Route120_EventScript_151735 end @@ -116,9 +116,9 @@ Route120_EventScript_151739:: @ 8151739 checkflag 2254 goto_if_eq Route120_EventScript_151837 msgbox Route120_Text_1C58F1, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, Route120_EventScript_151841 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, Route120_EventScript_15184A specialvar RESULT, GetPlayerTrainerIdOnesDigit switch RESULT @@ -161,7 +161,7 @@ Route120_EventScript_151808:: @ 8151808 Route120_EventScript_151813:: @ 8151813 giveitem 0x8004 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route120_EventScript_1A029B setflag 2254 msgbox Route120_Text_1C5A0B, 4 @@ -187,7 +187,7 @@ Route120_EventScript_151853:: @ 8151853 checkflag 290 goto_if_eq Route120_EventScript_151884 msgbox Route120_Text_171827, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route120_EventScript_151877 goto Route120_EventScript_15189D end @@ -200,7 +200,7 @@ Route120_EventScript_151877:: @ 8151877 Route120_EventScript_151884:: @ 8151884 msgbox Route120_Text_17196F, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route120_EventScript_151877 goto Route120_EventScript_15189D end @@ -208,9 +208,9 @@ Route120_EventScript_151884:: @ 8151884 Route120_EventScript_15189D:: @ 815189D msgbox Route120_Text_1719A0, 4 closebutton - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, Route120_EventScript_15197F - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, Route120_EventScript_15198A applymovement 31, Route120_Movement_1A083F waitmovement 0 @@ -293,7 +293,7 @@ Route120_EventScript_1519B3:: @ 81519B3 Route120_EventScript_1519CA:: @ 81519CA trainerbattle 0, OPPONENT_ROBERT_1, 0, Route120_Text_1BF07E, Route120_Text_1BF0A5 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route120_EventScript_1519F1 msgbox Route120_Text_1BF0C3, 6 end @@ -316,7 +316,7 @@ Route120_EventScript_151A1F:: @ 8151A1F Route120_EventScript_151A36:: @ 8151A36 trainerbattle 0, OPPONENT_BRANDON_1, 0, Route120_Text_1BF32B, Route120_Text_1BF36B specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route120_EventScript_151A5D msgbox Route120_Text_1BF38D, 6 end diff --git a/data/scripts/maps/Route121.inc b/data/scripts/maps/Route121.inc index 562f122e3..efaf251b1 100644 --- a/data/scripts/maps/Route121.inc +++ b/data/scripts/maps/Route121.inc @@ -74,7 +74,7 @@ Route121_EventScript_151B72:: @ 8151B72 Route121_EventScript_151B89:: @ 8151B89 trainerbattle 0, OPPONENT_WALTER_1, 0, Route121_Text_1BFA1B, Route121_Text_1BFA8C specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route121_EventScript_151BB0 msgbox Route121_Text_1BFA9D, 6 end @@ -102,7 +102,7 @@ Route121_EventScript_151BF9:: @ 8151BF9 Route121_EventScript_151C14:: @ 8151C14 trainerbattle 0, OPPONENT_JESSICA_1, 0, Route121_Text_1BFE51, Route121_Text_1BFE80 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route121_EventScript_151C3B msgbox Route121_Text_1BFEAE, 6 end diff --git a/data/scripts/maps/Route121_SafariZoneEntrance.inc b/data/scripts/maps/Route121_SafariZoneEntrance.inc index 52f0e5c44..5fdb749f3 100644 --- a/data/scripts/maps/Route121_SafariZoneEntrance.inc +++ b/data/scripts/maps/Route121_SafariZoneEntrance.inc @@ -34,7 +34,7 @@ Route121_SafariZoneEntrance_EventScript_15C35A:: @ 815C35A lock faceplayer msgbox Route121_SafariZoneEntrance_Text_1C3704, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route121_SafariZoneEntrance_EventScript_15C379 msgbox Route121_SafariZoneEntrance_Text_1C373C, 4 release @@ -52,7 +52,7 @@ Route121_SafariZoneEntrance_EventScript_15C383:: @ 815C383 showmoney 0, 0 nop msgbox Route121_SafariZoneEntrance_Text_1C3832, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route121_SafariZoneEntrance_EventScript_15C3B3 msgbox Route121_SafariZoneEntrance_Text_1C3895, 4 goto Route121_SafariZoneEntrance_EventScript_15C46C @@ -60,11 +60,11 @@ Route121_SafariZoneEntrance_EventScript_15C383:: @ 815C383 Route121_SafariZoneEntrance_EventScript_15C3B3:: @ 815C3B3 checkitem ITEM_POKEBLOCK_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route121_SafariZoneEntrance_EventScript_15C450 call Route121_SafariZoneEntrance_EventScript_15C425 checkmoney 0x1f4, 0 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route121_SafariZoneEntrance_EventScript_15C45E msgbox Route121_SafariZoneEntrance_Text_1C38D9, 4 paymoney 0x1f4, 0 @@ -88,10 +88,10 @@ Route121_SafariZoneEntrance_EventScript_15C3B3:: @ 815C3B3 Route121_SafariZoneEntrance_EventScript_15C425:: @ 815C425 countpokemon - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if 5, Route121_SafariZoneEntrance_EventScript_15C44F specialvar RESULT, CheckFreePokemonStorageSpace - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route121_SafariZoneEntrance_EventScript_15C44F msgbox Route121_SafariZoneEntrance_Text_1C39A3, 4 goto Route121_SafariZoneEntrance_EventScript_15C46C diff --git a/data/scripts/maps/Route123.inc b/data/scripts/maps/Route123.inc index 6e6cbd506..14c5a2dba 100644 --- a/data/scripts/maps/Route123.inc +++ b/data/scripts/maps/Route123.inc @@ -13,11 +13,11 @@ Route123_EventScript_151C5D:: @ 8151C5D goto_if_eq Route123_EventScript_151CAC msgbox Route123_Text_171D83, 4 special IsGrassTypeInParty - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route123_EventScript_151CAA msgbox Route123_Text_171DC2, 4 giveitem ITEM_TM19 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route123_EventScript_1A029B setflag 232 msgbox Route123_Text_171E34, 4 @@ -63,7 +63,7 @@ Route123_EventScript_151CFF:: @ 8151CFF Route123_EventScript_151D16:: @ 8151D16 trainerbattle 0, OPPONENT_CAMERON_1, 0, Route123_Text_1C013F, Route123_Text_1C01A3 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route123_EventScript_151D3D msgbox Route123_Text_1C01B1, 6 end @@ -76,7 +76,7 @@ Route123_EventScript_151D3D:: @ 8151D3D Route123_EventScript_151D54:: @ 8151D54 trainerbattle 0, OPPONENT_JACKI_1, 0, Route123_Text_1C028C, Route123_Text_1C0303 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route123_EventScript_151D7B msgbox Route123_Text_1C030F, 6 end diff --git a/data/scripts/maps/Route123_BerryMastersHouse.inc b/data/scripts/maps/Route123_BerryMastersHouse.inc index ee7bc80cf..64888759d 100644 --- a/data/scripts/maps/Route123_BerryMastersHouse.inc +++ b/data/scripts/maps/Route123_BerryMastersHouse.inc @@ -17,7 +17,7 @@ Route123_BerryMastersHouse_EventScript_1639E9:: @ 81639E9 addvar RESULT, 20 addvar RESULT, 133 giveitem RESULT - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 2253 msgbox Route123_BerryMastersHouse_Text_1C5C66, 4 @@ -25,7 +25,7 @@ Route123_BerryMastersHouse_EventScript_1639E9:: @ 81639E9 addvar RESULT, 20 addvar RESULT, 133 giveitem RESULT - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B msgbox Route123_BerryMastersHouse_Text_1C5C83, 4 release @@ -47,9 +47,9 @@ Route123_BerryMastersHouse_EventScript_163A64:: @ 8163A64 call Route123_BerryMastersHouse_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route123_BerryMastersHouse_EventScript_163AAD - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_163A9B end @@ -60,17 +60,17 @@ Route123_BerryMastersHouse_EventScript_163A9B:: @ 8163A9B end Route123_BerryMastersHouse_EventScript_163AAD:: @ 8163AAD - compare_var_to_imm 0x8004, 0 + compare 0x8004, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 - compare_var_to_imm 0x8004, 1 + compare 0x8004, 1 goto_if_eq Route123_BerryMastersHouse_EventScript_163B1E - compare_var_to_imm 0x8004, 2 + compare 0x8004, 2 goto_if_eq Route123_BerryMastersHouse_EventScript_163B4F - compare_var_to_imm 0x8004, 3 + compare 0x8004, 3 goto_if_eq Route123_BerryMastersHouse_EventScript_163B80 - compare_var_to_imm 0x8004, 4 + compare 0x8004, 4 goto_if_eq Route123_BerryMastersHouse_EventScript_163BB1 - compare_var_to_imm 0x8004, 5 + compare 0x8004, 5 goto_if_eq Route123_BerryMastersHouse_EventScript_163BE2 end @@ -79,7 +79,7 @@ Route123_BerryMastersHouse_EventScript_163AF0:: @ 8163AF0 random 10 addvar RESULT, 133 giveitem RESULT - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B goto Route123_BerryMastersHouse_EventScript_163C1D release @@ -90,7 +90,7 @@ Route123_BerryMastersHouse_EventScript_163B1E:: @ 8163B1E goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_SPELON_BERRY - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 248 goto Route123_BerryMastersHouse_EventScript_163C1D @@ -101,7 +101,7 @@ Route123_BerryMastersHouse_EventScript_163B4F:: @ 8163B4F goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_PAMTRE_BERRY - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 249 goto Route123_BerryMastersHouse_EventScript_163C1D @@ -112,7 +112,7 @@ Route123_BerryMastersHouse_EventScript_163B80:: @ 8163B80 goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_WATMEL_BERRY - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 250 goto Route123_BerryMastersHouse_EventScript_163C1D @@ -123,7 +123,7 @@ Route123_BerryMastersHouse_EventScript_163BB1:: @ 8163BB1 goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_DURIN_BERRY - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 251 goto Route123_BerryMastersHouse_EventScript_163C1D @@ -134,7 +134,7 @@ Route123_BerryMastersHouse_EventScript_163BE2:: @ 8163BE2 goto_if_eq Route123_BerryMastersHouse_EventScript_163AF0 msgbox Route123_BerryMastersHouse_Text_1C5DC1, 4 giveitem ITEM_BELUE_BERRY - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route123_BerryMastersHouse_EventScript_1A029B setflag 252 goto Route123_BerryMastersHouse_EventScript_163C1D diff --git a/data/scripts/maps/Route124.inc b/data/scripts/maps/Route124.inc index 7d7d38ceb..ffe4cef97 100644 --- a/data/scripts/maps/Route124.inc +++ b/data/scripts/maps/Route124.inc @@ -24,7 +24,7 @@ Route124_EventScript_151E0F:: @ 8151E0F Route124_EventScript_151E26:: @ 8151E26 trainerbattle 0, OPPONENT_JENNY_1, 0, Route124_Text_1C07B4, Route124_Text_1C07F9 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route124_EventScript_151E4D msgbox Route124_Text_1C080E, 6 end @@ -47,7 +47,7 @@ Route124_EventScript_151E7B:: @ 8151E7B Route124_EventScript_151E92:: @ 8151E92 trainerbattle 4, OPPONENT_RITA_AND_SAM_1, 0, Route124_Text_1C0ABD, Route124_Text_1C0B36, Route124_Text_1C0BC8 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route124_EventScript_151EBD msgbox Route124_Text_1C0B72, 6 end @@ -60,7 +60,7 @@ Route124_EventScript_151EBD:: @ 8151EBD Route124_EventScript_151ED8:: @ 8151ED8 trainerbattle 4, OPPONENT_RITA_AND_SAM_1, 0, Route124_Text_1C0C0E, Route124_Text_1C0C4F, Route124_Text_1C0CE0 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route124_EventScript_151F03 msgbox Route124_Text_1C0C7F, 6 end diff --git a/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc b/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc index 1deeb9e34..b3e91e43c 100644 --- a/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc +++ b/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc @@ -23,7 +23,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_163E20:: @ 8163E20 Route124_DivingTreasureHuntersHouse_EventScript_163E2E:: @ 8163E2E call Route124_DivingTreasureHuntersHouse_EventScript_163E44 - compare_var_to_imm 0x4001, 0 + compare 0x4001, 0 goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_164329 goto Route124_DivingTreasureHuntersHouse_EventScript_163EA2 end @@ -31,16 +31,16 @@ Route124_DivingTreasureHuntersHouse_EventScript_163E2E:: @ 8163E2E Route124_DivingTreasureHuntersHouse_EventScript_163E44:: @ 8163E44 setvar 0x4001, 0 checkitem ITEM_RED_SHARD, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, Route124_DivingTreasureHuntersHouse_EventScript_163E8A checkitem ITEM_YELLOW_SHARD, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, Route124_DivingTreasureHuntersHouse_EventScript_163E90 checkitem ITEM_BLUE_SHARD, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, Route124_DivingTreasureHuntersHouse_EventScript_163E96 checkitem ITEM_GREEN_SHARD, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, Route124_DivingTreasureHuntersHouse_EventScript_163E9C return @@ -247,13 +247,13 @@ Route124_DivingTreasureHuntersHouse_EventScript_164292:: @ 8164292 bufferitem 0, 0x8008 bufferitem 1, 0x8009 msgbox Route124_DivingTreasureHuntersHouse_Text_19F5E0, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_16431F checkitemspace 0x8009, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_1642D3 checkitem 0x8008, 2 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_1642D3 goto Route124_DivingTreasureHuntersHouse_EventScript_164315 end @@ -263,10 +263,10 @@ Route124_DivingTreasureHuntersHouse_EventScript_1642D3:: @ 81642D3 giveitem 0x8009 msgbox Route124_DivingTreasureHuntersHouse_Text_19F606, 4 call Route124_DivingTreasureHuntersHouse_EventScript_163E44 - compare_var_to_imm 0x4001, 0 + compare 0x4001, 0 goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_164333 msgbox Route124_DivingTreasureHuntersHouse_Text_19F629, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_163EB0 goto Route124_DivingTreasureHuntersHouse_EventScript_16431F end diff --git a/data/scripts/maps/Route125.inc b/data/scripts/maps/Route125.inc index c62d49117..489a7314b 100644 --- a/data/scripts/maps/Route125.inc +++ b/data/scripts/maps/Route125.inc @@ -30,7 +30,7 @@ Route125_EventScript_151F73:: @ 8151F73 Route125_EventScript_151F8A:: @ 8151F8A trainerbattle 0, OPPONENT_ERNEST_1, 0, Route125_Text_1C11AF, Route125_Text_1C11ED specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route125_EventScript_151FB1 msgbox Route125_Text_1C1208, 6 end diff --git a/data/scripts/maps/Route128.inc b/data/scripts/maps/Route128.inc index 0ce76670f..158313a1b 100644 --- a/data/scripts/maps/Route128.inc +++ b/data/scripts/maps/Route128.inc @@ -183,7 +183,7 @@ Route128_Movement_1522A1:: @ 81522A1 Route128_EventScript_1522A4:: @ 81522A4 trainerbattle 0, OPPONENT_ISAIAH_1, 0, Route128_Text_1C1C67, Route128_Text_1C1C95 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route128_EventScript_1522CB msgbox Route128_Text_1C1CC3, 6 end @@ -196,7 +196,7 @@ Route128_EventScript_1522CB:: @ 81522CB Route128_EventScript_1522E2:: @ 81522E2 trainerbattle 0, OPPONENT_KATELYN_1, 0, Route128_Text_1C1DB0, Route128_Text_1C1E25 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route128_EventScript_152309 msgbox Route128_Text_1C1E4A, 6 end diff --git a/data/scripts/maps/Route130.inc b/data/scripts/maps/Route130.inc index 3e234667a..7c3c575dc 100644 --- a/data/scripts/maps/Route130.inc +++ b/data/scripts/maps/Route130.inc @@ -4,7 +4,7 @@ Route130_MapScripts:: @ 81523C2 Route130_MapScript1_1523C8:: @ 81523C8 specialvar RESULT, IsMirageIslandPresent - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route130_EventScript_15240C setflag 17 setflag 18 diff --git a/data/scripts/maps/RustboroCity.inc b/data/scripts/maps/RustboroCity.inc index ddd58be1a..dcbb75886 100644 --- a/data/scripts/maps/RustboroCity.inc +++ b/data/scripts/maps/RustboroCity.inc @@ -363,13 +363,13 @@ RustboroCity_EventScript_14C644:: @ 814C644 end RustboroCity_EventScript_14C650:: @ 814C650 - compare_var_to_imm 0x4001, 0 + compare 0x4001, 0 call_if 1, RustboroCity_EventScript_14C691 - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 call_if 1, RustboroCity_EventScript_14C6BD - compare_var_to_imm 0x4001, 2 + compare 0x4001, 2 call_if 1, RustboroCity_EventScript_14C6E9 - compare_var_to_imm 0x4001, 3 + compare 0x4001, 3 call_if 1, RustboroCity_EventScript_14C715 setflag 159 setvar 0x405a, 3 @@ -457,19 +457,19 @@ RustboroCity_EventScript_14C771:: @ 814C771 end RustboroCity_EventScript_14C77D:: @ 814C77D - compare_var_to_imm 0x4001, 0 + compare 0x4001, 0 call_if 1, RustboroCity_EventScript_14C7FE - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 call_if 1, RustboroCity_EventScript_14C82A - compare_var_to_imm 0x4001, 2 + compare 0x4001, 2 call_if 1, RustboroCity_EventScript_14C856 - compare_var_to_imm 0x4001, 3 + compare 0x4001, 3 call_if 1, RustboroCity_EventScript_14C882 - compare_var_to_imm 0x4001, 4 + compare 0x4001, 4 call_if 1, RustboroCity_EventScript_14C8B8 msgbox RustboroCity_Text_166FB4, 4 giveitem ITEM_GREAT_BALL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, RustboroCity_EventScript_14C7F5 msgbox RustboroCity_Text_16707F, 4 closebutton @@ -552,9 +552,9 @@ RustboroCity_EventScript_14C8DA:: @ 814C8DA checkflag 288 goto_if_eq RustboroCity_EventScript_14C917 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq RustboroCity_EventScript_14C8FD - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq RustboroCity_EventScript_14C90A end @@ -572,9 +572,9 @@ RustboroCity_EventScript_14C90A:: @ 814C90A RustboroCity_EventScript_14C917:: @ 814C917 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq RustboroCity_EventScript_14C92F - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq RustboroCity_EventScript_14C939 end diff --git a/data/scripts/maps/RustboroCity_DevonCorp_2F.inc b/data/scripts/maps/RustboroCity_DevonCorp_2F.inc index d5b3b03c7..e7c966c08 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_2F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_2F.inc @@ -3,7 +3,7 @@ RustboroCity_DevonCorp_2F_MapScripts:: @ 81574CA .byte 0 RustboroCity_DevonCorp_2F_MapScript1_1574D0:: @ 81574D0 - compare_var_to_imm 0x40c4, 1 + compare 0x40c4, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC end @@ -14,7 +14,7 @@ RustboroCity_DevonCorp_2F_EventScript_1574DC:: @ 81574DC RustboroCity_DevonCorp_2F_EventScript_1574E2:: @ 81574E2 lock faceplayer - compare_var_to_imm 0x40c4, 1 + compare 0x40c4, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC msgbox RustboroCity_DevonCorp_2F_Text_182B81, 4 release @@ -23,7 +23,7 @@ RustboroCity_DevonCorp_2F_EventScript_1574E2:: @ 81574E2 RustboroCity_DevonCorp_2F_EventScript_1574F9:: @ 81574F9 lock faceplayer - compare_var_to_imm 0x40c4, 1 + compare 0x40c4, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC checkflag 287 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157519 @@ -39,7 +39,7 @@ RustboroCity_DevonCorp_2F_EventScript_157519:: @ 8157519 RustboroCity_DevonCorp_2F_EventScript_157523:: @ 8157523 lock faceplayer - compare_var_to_imm 0x40c4, 1 + compare 0x40c4, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC checkflag 188 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157543 @@ -55,7 +55,7 @@ RustboroCity_DevonCorp_2F_EventScript_157543:: @ 8157543 RustboroCity_DevonCorp_2F_EventScript_15754D:: @ 815754D lock faceplayer - compare_var_to_imm 0x40c4, 1 + compare 0x40c4, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1574DC msgbox RustboroCity_DevonCorp_2F_Text_182E6B, 4 release @@ -64,16 +64,16 @@ RustboroCity_DevonCorp_2F_EventScript_15754D:: @ 815754D RustboroCity_DevonCorp_2F_EventScript_157564:: @ 8157564 lock faceplayer - compare_var_to_imm 0x40c4, 2 + compare 0x40c4, 2 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_15764A - compare_var_to_imm 0x40c4, 1 + compare 0x40c4, 1 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157640 msgbox RustboroCity_DevonCorp_2F_Text_182ED5, 4 checkitem ITEM_ROOT_FOSSIL, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_1575A6 checkitem ITEM_CLAW_FOSSIL, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_1575EE release end @@ -86,7 +86,7 @@ RustboroCity_DevonCorp_2F_EventScript_1575A6:: @ 81575A6 applymovement 5, RustboroCity_DevonCorp_2F_Movement_1A0835 waitmovement 0 msgbox RustboroCity_DevonCorp_2F_Text_182F35, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157636 bufferitem 0, ITEM_ROOT_FOSSIL msgbox RustboroCity_DevonCorp_2F_Text_183023, 4 @@ -104,7 +104,7 @@ RustboroCity_DevonCorp_2F_EventScript_1575EE:: @ 81575EE applymovement 5, RustboroCity_DevonCorp_2F_Movement_1A0835 waitmovement 0 msgbox RustboroCity_DevonCorp_2F_Text_182F35, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157636 bufferitem 0, ITEM_CLAW_FOSSIL msgbox RustboroCity_DevonCorp_2F_Text_183023, 4 @@ -125,9 +125,9 @@ RustboroCity_DevonCorp_2F_EventScript_157640:: @ 8157640 end RustboroCity_DevonCorp_2F_EventScript_15764A:: @ 815764A - compare_var_to_imm 0x40c5, 1 + compare 0x40c5, 1 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157661 - compare_var_to_imm 0x40c5, 2 + compare 0x40c5, 2 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_1576B4 end @@ -135,7 +135,7 @@ RustboroCity_DevonCorp_2F_EventScript_157661:: @ 8157661 bufferpoke 1, SPECIES_LILEEP msgbox RustboroCity_DevonCorp_2F_Text_183124, 4 countpokemon - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157707 copyvar 0x8004, RESULT setvar 0x40c4, 0 @@ -146,7 +146,7 @@ RustboroCity_DevonCorp_2F_EventScript_157661:: @ 8157661 waittext givepokemon SPECIES_LILEEP, 20, ITEM_NONE, 0x0, 0x0, 0 msgbox RustboroCity_DevonCorp_2F_Text_1A1102, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1A0678 release end @@ -155,7 +155,7 @@ RustboroCity_DevonCorp_2F_EventScript_1576B4:: @ 81576B4 bufferpoke 1, SPECIES_ANORITH msgbox RustboroCity_DevonCorp_2F_Text_183124, 4 countpokemon - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157707 copyvar 0x8004, RESULT setvar 0x40c4, 0 @@ -166,7 +166,7 @@ RustboroCity_DevonCorp_2F_EventScript_1576B4:: @ 81576B4 waittext givepokemon SPECIES_ANORITH, 20, ITEM_NONE, 0x0, 0x0, 0 msgbox RustboroCity_DevonCorp_2F_Text_1A1102, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1A0678 release end diff --git a/data/scripts/maps/RustboroCity_DevonCorp_3F.inc b/data/scripts/maps/RustboroCity_DevonCorp_3F.inc index 12cf2f6c8..88f1c377a 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_3F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_3F.inc @@ -5,7 +5,7 @@ RustboroCity_DevonCorp_3F_MapScripts:: @ 8157711 .byte 0 RustboroCity_DevonCorp_3F_MapScript1_157721:: @ 8157721 - compare_var_to_imm 0x408f, 0 + compare 0x408f, 0 call_if 1, RustboroCity_DevonCorp_3F_EventScript_15772D end @@ -160,7 +160,7 @@ RustboroCity_DevonCorp_3F_EventScript_15783B:: @ 815783B RustboroCity_DevonCorp_3F_EventScript_157864:: @ 8157864 msgbox RustboroCity_DevonCorp_3F_Text_18353E, 4 giveitem ITEM_EXP_SHARE - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq RustboroCity_DevonCorp_3F_EventScript_1A029B setflag 272 msgbox RustboroCity_DevonCorp_3F_Text_1835B3, 4 diff --git a/data/scripts/maps/RustboroCity_Flat2_2F.inc b/data/scripts/maps/RustboroCity_Flat2_2F.inc index fefc67d0f..0dfec5cfa 100644 --- a/data/scripts/maps/RustboroCity_Flat2_2F.inc +++ b/data/scripts/maps/RustboroCity_Flat2_2F.inc @@ -12,7 +12,7 @@ RustboroCity_Flat2_2F_EventScript_157DA0:: @ 8157DA0 goto_if_eq RustboroCity_Flat2_2F_EventScript_157DCF msgbox RustboroCity_Flat2_2F_Text_185461, 4 giveitem ITEM_PREMIER_BALL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq RustboroCity_Flat2_2F_EventScript_1A029B setflag 213 release diff --git a/data/scripts/maps/RustboroCity_Gym.inc b/data/scripts/maps/RustboroCity_Gym.inc index 353ac8fe3..6bb33b4dc 100644 --- a/data/scripts/maps/RustboroCity_Gym.inc +++ b/data/scripts/maps/RustboroCity_Gym.inc @@ -20,14 +20,14 @@ RustboroCity_Gym_EventScript_1578FE:: @ 81578FE addvar 0x4085, 1 setvar 0x8008, 1 call RustboroCity_Gym_EventScript_1A01C0 - compare_var_to_imm 0x4085, 6 + compare 0x4085, 6 call_if 1, RustboroCity_Gym_EventScript_1A00FB goto RustboroCity_Gym_EventScript_15793C end RustboroCity_Gym_EventScript_15793C:: @ 815793C giveitem ITEM_TM39 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq RustboroCity_Gym_EventScript_1A029B setflag 165 msgbox RustboroCity_Gym_Text_184170, 4 diff --git a/data/scripts/maps/RustboroCity_House1.inc b/data/scripts/maps/RustboroCity_House1.inc index 080fc7e18..a344738a8 100644 --- a/data/scripts/maps/RustboroCity_House1.inc +++ b/data/scripts/maps/RustboroCity_House1.inc @@ -11,17 +11,17 @@ RustboroCity_House1_EventScript_157C7D:: @ 8157C7D specialvar RESULT, sub_804D89C copyvar 0x8009, RESULT msgbox RustboroCity_House1_Text_184EBA, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq RustboroCity_House1_EventScript_157CFB special sub_80F9A0C waitstate copyvar 0x800a, 0x8004 - compare_var_to_imm 0x8004, 255 + compare 0x8004, 255 goto_if_eq RustboroCity_House1_EventScript_157CFB copyvar 0x8005, 0x800a specialvar RESULT, sub_804DB2C copyvar 0x800b, RESULT - compare_var_to_var RESULT, 0x8009 + compare RESULT, 0x8009 goto_if 5, RustboroCity_House1_EventScript_157D05 copyvar 0x8004, 0x8008 copyvar 0x8005, 0x800a diff --git a/data/scripts/maps/RustboroCity_PokemonSchool.inc b/data/scripts/maps/RustboroCity_PokemonSchool.inc index cd71e8bba..156b437a0 100644 --- a/data/scripts/maps/RustboroCity_PokemonSchool.inc +++ b/data/scripts/maps/RustboroCity_PokemonSchool.inc @@ -79,13 +79,13 @@ RustboroCity_PokemonSchool_EventScript_157ACE:: @ 8157ACE faceplayer checkflag 275 goto_if_eq RustboroCity_PokemonSchool_EventScript_157B34 - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, RustboroCity_PokemonSchool_EventScript_157B1E - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, RustboroCity_PokemonSchool_EventScript_157B29 msgbox RustboroCity_PokemonSchool_Text_1846A2, 4 giveitem ITEM_QUICK_CLAW - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq RustboroCity_PokemonSchool_EventScript_1A029B closebutton applymovement LAST_TALKED, RustboroCity_PokemonSchool_Movement_1A0845 diff --git a/data/scripts/maps/RusturfTunnel.inc b/data/scripts/maps/RusturfTunnel.inc index 922ad27e1..81bfcd27d 100644 --- a/data/scripts/maps/RusturfTunnel.inc +++ b/data/scripts/maps/RusturfTunnel.inc @@ -10,7 +10,7 @@ RusturfTunnel_MapScript2_15C750:: @ 815C750 RusturfTunnel_MapScript1_15C762:: @ 815C762 call RusturfTunnel_EventScript_1A0196 - compare_var_to_imm 0x409a, 2 + compare 0x409a, 2 call_if 1, RusturfTunnel_EventScript_15C773 end @@ -52,35 +52,35 @@ RusturfTunnel_EventScript_15C7BC:: @ 815C7BC RusturfTunnel_EventScript_15C7D1:: @ 815C7D1 lockall - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 call_if 1, RusturfTunnel_EventScript_15C8CA - compare_var_to_imm 0x4001, 2 + compare 0x4001, 2 call_if 1, RusturfTunnel_EventScript_15C8DF - compare_var_to_imm 0x4001, 3 + compare 0x4001, 3 call_if 1, RusturfTunnel_EventScript_15C8EA call RusturfTunnel_EventScript_15C92D msgbox RusturfTunnel_Text_19461D, 4 - compare_var_to_imm 0x4001, 2 + compare 0x4001, 2 call_if 1, RusturfTunnel_EventScript_15C8EB - compare_var_to_imm 0x4001, 3 + compare 0x4001, 3 call_if 1, RusturfTunnel_EventScript_15C8EB giveitem ITEM_HM04 setflag 106 msgbox RusturfTunnel_Text_194693, 4 closebutton - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 call_if 1, RusturfTunnel_EventScript_15C880 - compare_var_to_imm 0x4001, 2 + compare 0x4001, 2 call_if 1, RusturfTunnel_EventScript_15C892 - compare_var_to_imm 0x4001, 3 + compare 0x4001, 3 call_if 1, RusturfTunnel_EventScript_15C8AE msgbox RusturfTunnel_Text_194706, 4 closebutton - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 call_if 1, RusturfTunnel_EventScript_15C8F7 - compare_var_to_imm 0x4001, 2 + compare 0x4001, 2 call_if 1, RusturfTunnel_EventScript_15C909 - compare_var_to_imm 0x4001, 3 + compare 0x4001, 3 call_if 1, RusturfTunnel_EventScript_15C91B call RusturfTunnel_EventScript_1A0442 releaseall diff --git a/data/scripts/maps/SSTidalCorridor.inc b/data/scripts/maps/SSTidalCorridor.inc index 9f86473be..3edfdd7bb 100644 --- a/data/scripts/maps/SSTidalCorridor.inc +++ b/data/scripts/maps/SSTidalCorridor.inc @@ -41,9 +41,9 @@ SSTidalRooms_EventScript_15FCF9:: @ 815FCF9 return gUnknown_0815FD0D:: @ 815FD0D - compare_var_to_imm 0x40B4, 2 + compare 0x40B4, 2 goto_if_eq SSTidalCorridor_EventScript_15FD24 - compare_var_to_imm 0x40B4, 7 + compare 0x40B4, 7 goto_if_eq SSTidalCorridor_EventScript_15FD3A end @@ -113,9 +113,9 @@ SSTidalCorridor_EventScript_15FDCD:: @ 815FDCD SSTidalCorridor_EventScript_15FDD6:: @ 815FDD6 lock faceplayer - compare_var_to_imm 0x40b4, 4 + compare 0x40b4, 4 goto_if_eq SSTidalCorridor_EventScript_15FDF8 - compare_var_to_imm 0x40b4, 8 + compare 0x40b4, 8 goto_if_eq SSTidalCorridor_EventScript_15FE17 msgbox SSTidalCorridor_Text_19913B, 4 release @@ -147,9 +147,9 @@ SSTidalCorridor_EventScript_15FE36:: @ 815FE36 SSTidalCorridor_EventScript_15FE3A:: @ 815FE3A lockall - compare_var_to_imm 0x40b4, 2 + compare 0x40b4, 2 goto_if_eq SSTidalCorridor_EventScript_15FE5B - compare_var_to_imm 0x40b4, 7 + compare 0x40b4, 7 goto_if_eq SSTidalCorridor_EventScript_15FE5B msgbox SSTidalCorridor_Text_199268, 4 releaseall diff --git a/data/scripts/maps/SSTidalRooms.inc b/data/scripts/maps/SSTidalRooms.inc index f9e815d1f..aa84b6b48 100644 --- a/data/scripts/maps/SSTidalRooms.inc +++ b/data/scripts/maps/SSTidalRooms.inc @@ -8,7 +8,7 @@ SSTidalRooms_EventScript_15FF06:: @ 815FF06 goto_if_eq SSTidalRooms_EventScript_15FF3D msgbox SSTidalRooms_Text_199B65, 4 giveitem ITEM_TM49 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SSTidalRooms_EventScript_1A029B setflag 260 msgbox SSTidalRooms_Text_199C1A, 4 diff --git a/data/scripts/maps/SafariZone_Southeast.inc b/data/scripts/maps/SafariZone_Southeast.inc index b735a87b2..0632a2dda 100644 --- a/data/scripts/maps/SafariZone_Southeast.inc +++ b/data/scripts/maps/SafariZone_Southeast.inc @@ -20,7 +20,7 @@ SafariZone_Southeast_EventScript_16004B:: @ 816004B end SafariZone_Southeast_MapScript1_160073:: @ 8160073 - compare_var_to_imm 0x40a4, 2 + compare 0x40a4, 2 call_if 1, SafariZone_Southeast_EventScript_16007F end @@ -52,10 +52,10 @@ SafariZone_Southeast_EventScript_16009E:: @ 816009E SafariZone_Southeast_EventScript_1600A7:: @ 81600A7 lock faceplayer - compare_var_to_imm 0x4001, 0 + compare 0x4001, 0 goto_if_eq SafariZone_Southeast_EventScript_1600D1 msgbox SafariZone_Southeast_Text_1C3A56, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SafariZone_Southeast_EventScript_1600E0 msgbox SafariZone_Southeast_Text_1C3A9C, 4 release diff --git a/data/scripts/maps/SealedChamber_InnerRoom.inc b/data/scripts/maps/SealedChamber_InnerRoom.inc index 929b4d0ca..70821d183 100644 --- a/data/scripts/maps/SealedChamber_InnerRoom.inc +++ b/data/scripts/maps/SealedChamber_InnerRoom.inc @@ -9,7 +9,7 @@ SealedChamber_InnerRoom_EventScript_15F1E8:: @ 815F1E8 checkflag 228 goto_if_eq SealedChamber_InnerRoom_EventScript_15F247 specialvar RESULT, CheckRelicanthWailord - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SealedChamber_InnerRoom_EventScript_15F247 fadeoutbgm 0 playse 49 diff --git a/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc b/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc index e51817e27..983ab69d9 100644 --- a/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc @@ -23,24 +23,24 @@ ShoalCave_LowTideEntranceRoom_EventScript_15E076:: @ 815E076 checkflag 2143 call_if 1, ShoalCave_LowTideEntranceRoom_EventScript_15E176 checkitem ITEM_SHOAL_SALT, 4 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E138 checkitem ITEM_SHOAL_SHELL, 4 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E138 msgbox ShoalCave_LowTideEntranceRoom_Text_1C6793, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E16C checkitemspace ITEM_SHELL_BELL, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, ShoalCave_LowTideEntranceRoom_EventScript_15E106 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E12E msgbox ShoalCave_LowTideEntranceRoom_Text_1C6808, 4 removeitem ITEM_SHOAL_SALT, 4 removeitem ITEM_SHOAL_SHELL, 4 giveitem ITEM_SHELL_BELL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_1A029B msgbox ShoalCave_LowTideEntranceRoom_Text_1C688E, 4 setflag 2 @@ -49,13 +49,13 @@ ShoalCave_LowTideEntranceRoom_EventScript_15E076:: @ 815E076 ShoalCave_LowTideEntranceRoom_EventScript_15E106:: @ 815E106 checkitem ITEM_SHOAL_SALT, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E117 return ShoalCave_LowTideEntranceRoom_EventScript_15E117:: @ 815E117 checkitem ITEM_SHOAL_SHELL, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E128 return @@ -70,10 +70,10 @@ ShoalCave_LowTideEntranceRoom_EventScript_15E12E:: @ 815E12E ShoalCave_LowTideEntranceRoom_EventScript_15E138:: @ 815E138 checkitem ITEM_SHOAL_SALT, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E162 checkitem ITEM_SHOAL_SHELL, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq ShoalCave_LowTideEntranceRoom_EventScript_15E162 msgbox ShoalCave_LowTideEntranceRoom_Text_1C6668, 4 release diff --git a/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc b/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc index 8dec3b212..05fc6a315 100644 --- a/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc @@ -73,7 +73,7 @@ ShoalCave_LowTideInnerRoom_EventScript_15E257:: @ 815E257 checkflag 956 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E289 giveitem ITEM_SHOAL_SHELL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 41, 20, 859, 0 special DrawWholeMapView @@ -91,7 +91,7 @@ ShoalCave_LowTideInnerRoom_EventScript_15E293:: @ 815E293 checkflag 957 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E289 giveitem ITEM_SHOAL_SHELL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 41, 10, 859, 0 special DrawWholeMapView @@ -104,7 +104,7 @@ ShoalCave_LowTideInnerRoom_EventScript_15E2C5:: @ 815E2C5 checkflag 958 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E289 giveitem ITEM_SHOAL_SHELL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 6, 9, 859, 0 special DrawWholeMapView @@ -117,7 +117,7 @@ ShoalCave_LowTideInnerRoom_EventScript_15E2F7:: @ 815E2F7 checkflag 959 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E289 giveitem ITEM_SHOAL_SHELL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 16, 13, 859, 0 special DrawWholeMapView @@ -130,7 +130,7 @@ ShoalCave_LowTideInnerRoom_EventScript_15E329:: @ 815E329 checkflag 952 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E35B giveitem ITEM_SHOAL_SALT - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 31, 8, 858, 0 special DrawWholeMapView @@ -148,7 +148,7 @@ ShoalCave_LowTideInnerRoom_EventScript_15E365:: @ 815E365 checkflag 953 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_15E35B giveitem ITEM_SHOAL_SALT - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq ShoalCave_LowTideInnerRoom_EventScript_1A029B setmaptile 14, 26, 858, 0 special DrawWholeMapView diff --git a/data/scripts/maps/ShoalCave_LowTideLowerRoom.inc b/data/scripts/maps/ShoalCave_LowTideLowerRoom.inc index 01719a9cf..db5779efe 100644 --- a/data/scripts/maps/ShoalCave_LowTideLowerRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideLowerRoom.inc @@ -20,7 +20,7 @@ ShoalCave_LowTideLowerRoom_EventScript_15E413:: @ 815E413 checkflag 955 goto_if_eq ShoalCave_LowTideLowerRoom_EventScript_15E445 giveitem ITEM_SHOAL_SALT - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq ShoalCave_LowTideLowerRoom_EventScript_1A029B setmaptile 18, 2, 858, 0 special DrawWholeMapView @@ -40,7 +40,7 @@ ShoalCave_LowTideLowerRoom_EventScript_15E44F:: @ 815E44F goto_if_eq ShoalCave_LowTideLowerRoom_EventScript_15E47E msgbox ShoalCave_LowTideLowerRoom_Text_198200, 4 giveitem ITEM_FOCUS_BAND - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq ShoalCave_LowTideLowerRoom_EventScript_1A029B setflag 283 release diff --git a/data/scripts/maps/ShoalCave_LowTideStairsRoom.inc b/data/scripts/maps/ShoalCave_LowTideStairsRoom.inc index 1c5cde842..bffb7bd49 100644 --- a/data/scripts/maps/ShoalCave_LowTideStairsRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideStairsRoom.inc @@ -20,7 +20,7 @@ ShoalCave_LowTideStairsRoom_EventScript_15E3B7:: @ 815E3B7 checkflag 954 goto_if_eq ShoalCave_LowTideStairsRoom_EventScript_15E3E9 giveitem ITEM_SHOAL_SALT - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq ShoalCave_LowTideStairsRoom_EventScript_1A029B setmaptile 11, 11, 858, 0 special DrawWholeMapView diff --git a/data/scripts/maps/SlateportCity.inc b/data/scripts/maps/SlateportCity.inc index 02ab6c28c..aba9ee235 100644 --- a/data/scripts/maps/SlateportCity.inc +++ b/data/scripts/maps/SlateportCity.inc @@ -12,7 +12,7 @@ SlateportCity_MapScript1_14BA3C:: @ 814BA3C .endif setvar 0x40aa, 0 call SlateportCity_EventScript_14BA5C - compare_var_to_imm 0x4058, 1 + compare 0x4058, 1 call_if 1, SlateportCity_EventScript_14BA68 end @@ -67,10 +67,10 @@ SlateportCity_EventScript_14BAE0:: @ 814BAE0 bufferfirstpoke 0 msgbox SlateportCity_Text_164682, 4 specialvar RESULT, LeadMonHasEffortRibbon - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, SlateportCity_EventScript_14BB35 specialvar RESULT, ScrSpecial_AreLeadMonEVsMaxedOut - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, SlateportCity_EventScript_14BB2B msgbox SlateportCity_Text_164691, 4 playfanfare 370 @@ -95,7 +95,7 @@ SlateportCity_EventScript_14BB35:: @ 814BB35 SlateportCity_EventScript_14BB3F:: @ 814BB3F lock faceplayer - compare_var_to_imm 0x4058, 1 + compare 0x4058, 1 call_if 1, SlateportCity_EventScript_14BB56 msgbox SlateportCity_Text_164814, 4 release @@ -109,7 +109,7 @@ SlateportCity_EventScript_14BB56:: @ 814BB56 SlateportCity_EventScript_14BB60:: @ 814BB60 lock faceplayer - compare_var_to_imm 0x4058, 1 + compare 0x4058, 1 call_if 1, SlateportCity_EventScript_14BB77 msgbox SlateportCity_Text_1648A0, 4 release @@ -123,7 +123,7 @@ SlateportCity_EventScript_14BB77:: @ 814BB77 SlateportCity_EventScript_14BB81:: @ 814BB81 lock faceplayer - compare_var_to_imm 0x4058, 1 + compare 0x4058, 1 call_if 1, SlateportCity_EventScript_14BBA1 checkflag 96 goto_if_eq SlateportCity_EventScript_14BBAB @@ -144,7 +144,7 @@ SlateportCity_EventScript_14BBAB:: @ 814BBAB SlateportCity_EventScript_14BBB5:: @ 814BBB5 lock faceplayer - compare_var_to_imm 0x4058, 1 + compare 0x4058, 1 call_if 1, SlateportCity_EventScript_14BBCC msgbox SlateportCity_Text_164A30, 4 release @@ -156,7 +156,7 @@ SlateportCity_EventScript_14BBCC:: @ 814BBCC end SlateportCity_EventScript_14BBD6:: @ 814BBD6 - compare_var_to_imm 0x4058, 1 + compare 0x4058, 1 goto_if_eq SlateportCity_EventScript_14BBEA msgbox SlateportCity_Text_164AA9, 2 end @@ -168,7 +168,7 @@ SlateportCity_EventScript_14BBEA:: @ 814BBEA SlateportCity_EventScript_14BBF3:: @ 814BBF3 lock faceplayer - compare_var_to_imm 0x4058, 1 + compare 0x4058, 1 call_if 1, SlateportCity_EventScript_14BC0A msgbox SlateportCity_Text_164B34, 4 release @@ -253,7 +253,7 @@ SlateportCity_EventScript_14BCAF:: @ 814BCAF SlateportCity_EventScript_14BCB8:: @ 814BCB8 lock faceplayer - compare_var_to_imm 0x4058, 1 + compare 0x4058, 1 call_if 1, SlateportCity_EventScript_14BCCF msgbox SlateportCity_Text_164F9E, 4 release @@ -288,9 +288,9 @@ SlateportCity_EventScript_14BD06:: @ 814BD06 lock faceplayer msgbox SlateportCity_Text_1650F1, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, SlateportCity_EventScript_14BD28 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, SlateportCity_EventScript_14BD31 release end diff --git a/data/scripts/maps/SlateportCity_ContestHall.inc b/data/scripts/maps/SlateportCity_ContestHall.inc index 74eaf27fe..f8070f1a1 100644 --- a/data/scripts/maps/SlateportCity_ContestHall.inc +++ b/data/scripts/maps/SlateportCity_ContestHall.inc @@ -16,7 +16,7 @@ SlateportCity_ContestHall_EventScript_15555E:: @ 815555E goto_if_eq SlateportCity_ContestHall_EventScript_155595 msgbox SlateportCity_ContestHall_Text_17CCE2, 4 giveitem ITEM_TM41 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_ContestHall_EventScript_1A029B setflag 265 msgbox SlateportCity_ContestHall_Text_17CE28, 4 diff --git a/data/scripts/maps/SlateportCity_Harbor.inc b/data/scripts/maps/SlateportCity_Harbor.inc index 0e0b5da1f..184586d94 100644 --- a/data/scripts/maps/SlateportCity_Harbor.inc +++ b/data/scripts/maps/SlateportCity_Harbor.inc @@ -5,7 +5,7 @@ SlateportCity_Harbor_MapScripts:: @ 8155F5D SlateportCity_Harbor_MapScript1_155F63:: @ 8155F63 warp6 SlateportCity, 255, 28, 13 setvar 0x4001, 0 - compare_var_to_imm 0x40a0, 1 + compare 0x40a0, 1 call_if 1, SlateportCity_Harbor_EventScript_155F89 checkflag 2052 call_if 1, SlateportCity_Harbor_EventScript_155F85 @@ -63,13 +63,13 @@ SlateportCity_Harbor_EventScript_155FD5:: @ 8155FD5 disappear 7 disappear 8 setvar 0x40a0, 2 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, SlateportCity_Harbor_EventScript_15605C - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, SlateportCity_Harbor_EventScript_156071 - compare_var_to_imm 0x8008, 2 + compare 0x8008, 2 call_if 1, SlateportCity_Harbor_EventScript_156086 - compare_var_to_imm 0x8008, 3 + compare 0x8008, 3 call_if 1, SlateportCity_Harbor_EventScript_156086 msgbox SlateportCity_Harbor_Text_17FE60, 4 closebutton @@ -168,7 +168,7 @@ SlateportCity_Harbor_EventScript_1560C4:: @ 81560C4 SlateportCity_Harbor_EventScript_1560D9:: @ 81560D9 msgbox SlateportCity_Harbor_Text_17FA73, 4 checkitem ITEM_SS_TICKET, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_156135 message SlateportCity_Harbor_Text_17FB0A waittext @@ -191,7 +191,7 @@ SlateportCity_Harbor_EventScript_156135:: @ 8156135 SlateportCity_Harbor_EventScript_15613F:: @ 815613F msgbox SlateportCity_Harbor_Text_17FB81, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_15618A setvar 0x40b4, 1 call SlateportCity_Harbor_EventScript_156196 @@ -202,7 +202,7 @@ SlateportCity_Harbor_EventScript_15613F:: @ 815613F SlateportCity_Harbor_EventScript_156167:: @ 8156167 msgbox SlateportCity_Harbor_Text_17FB9C, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_15618A call SlateportCity_Harbor_EventScript_156196 warp BattleTower_Outside, 255, 19, 23 @@ -223,9 +223,9 @@ SlateportCity_Harbor_EventScript_156196:: @ 8156196 waitmovement 0 delay 30 spriteinvisible LAST_TALKED, 9, 8 - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, SlateportCity_Harbor_EventScript_1561EF - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, SlateportCity_Harbor_EventScript_1561E4 delay 30 spriteinvisible 255, 0, 0 @@ -274,7 +274,7 @@ SlateportCity_Harbor_EventScript_156211:: @ 8156211 goto_if_eq SlateportCity_Harbor_EventScript_156265 checkflag 112 goto_if_eq SlateportCity_Harbor_EventScript_156258 - compare_var_to_imm 0x40a0, 2 + compare 0x40a0, 2 goto_if_eq SlateportCity_Harbor_EventScript_15624E msgbox SlateportCity_Harbor_Text_17FD1C, 4 closebutton @@ -300,10 +300,10 @@ SlateportCity_Harbor_EventScript_156265:: @ 8156265 end SlateportCity_Harbor_EventScript_15626F:: @ 815626F - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 goto_if_eq SlateportCity_Harbor_EventScript_156380 checkitem ITEM_SCANNER, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_Harbor_EventScript_1562A7 checkflag 2052 goto_if_eq SlateportCity_Harbor_EventScript_15629D @@ -333,10 +333,10 @@ SlateportCity_Harbor_EventScript_1562B3:: @ 81562B3 SlateportCity_Harbor_EventScript_1562EA:: @ 81562EA msgbox SlateportCity_Harbor_Text_1803DD, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_156374 giveitem ITEM_DEEP_SEA_TOOTH - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_1A029B removeitem ITEM_SCANNER, 1 msgbox SlateportCity_Harbor_Text_18046B, 4 @@ -346,10 +346,10 @@ SlateportCity_Harbor_EventScript_1562EA:: @ 81562EA SlateportCity_Harbor_EventScript_15632A:: @ 815632A msgbox SlateportCity_Harbor_Text_180412, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_156374 giveitem ITEM_DEEP_SEA_SCALE - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_1A029B removeitem ITEM_SCANNER, 1 msgbox SlateportCity_Harbor_Text_18046B, 4 diff --git a/data/scripts/maps/SlateportCity_House1.inc b/data/scripts/maps/SlateportCity_House1.inc index e932a58ab..c72aa229a 100644 --- a/data/scripts/maps/SlateportCity_House1.inc +++ b/data/scripts/maps/SlateportCity_House1.inc @@ -5,9 +5,9 @@ SlateportCity_House1_EventScript_15567B:: @ 815567B lock faceplayer msgbox SlateportCity_House1_Text_17D46A, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_House1_EventScript_15569C - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_House1_EventScript_1556BF end @@ -15,9 +15,9 @@ SlateportCity_House1_EventScript_15569C:: @ 815569C msgbox SlateportCity_House1_Text_17D4DB, 4 special sub_80F9A0C waitstate - compare_var_to_imm 0x8004, 255 + compare 0x8004, 255 goto_if 5, SlateportCity_House1_EventScript_1556C9 - compare_var_to_imm 0x8004, 255 + compare 0x8004, 255 goto_if_eq SlateportCity_House1_EventScript_1556BF end @@ -28,20 +28,20 @@ SlateportCity_House1_EventScript_1556BF:: @ 81556BF SlateportCity_House1_EventScript_1556C9:: @ 81556C9 specialvar RESULT, ScriptGetPartyMonSpecies - compare_var_to_imm RESULT, SPECIES_EGG + compare RESULT, SPECIES_EGG goto_if_eq SlateportCity_House1_EventScript_15571C special sub_80BFAE0 special sub_80BFB10 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_House1_EventScript_155726 specialvar RESULT, sub_810F96C special sub_80BFAE0 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_House1_EventScript_155726 msgbox SlateportCity_House1_Text_17D505, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_House1_EventScript_155730 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_House1_EventScript_1556BF end @@ -60,7 +60,7 @@ SlateportCity_House1_EventScript_155730:: @ 8155730 call SlateportCity_House1_EventScript_1A0678 specialvar RESULT, sub_80BF9B4 special sub_80BFAE0 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_House1_EventScript_15575A msgbox SlateportCity_House1_Text_17D63A, 4 release diff --git a/data/scripts/maps/SlateportCity_House2.inc b/data/scripts/maps/SlateportCity_House2.inc index 6f267d31f..934fae153 100644 --- a/data/scripts/maps/SlateportCity_House2.inc +++ b/data/scripts/maps/SlateportCity_House2.inc @@ -9,7 +9,7 @@ SlateportCity_House2_EventScript_156399:: @ 8156399 lock faceplayer checkitem ITEM_CONTEST_PASS, 1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_House2_EventScript_1563B5 msgbox SlateportCity_House2_Text_180567, 4 release diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc index 575538286..7fe5865a4 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc @@ -34,7 +34,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B06:: @ 8155B06 showmoney 0, 0 nop msgbox SlateportCity_OceanicMuseum_1F_Text_17E18D, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155B2D closebutton hidemoney 0, 0 @@ -45,7 +45,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B06:: @ 8155B06 SlateportCity_OceanicMuseum_1F_EventScript_155B2D:: @ 8155B2D checkmoney 0x32, 0 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155B5A paymoney 0x32, 0 updatemoney 0, 0 @@ -165,14 +165,14 @@ SlateportCity_OceanicMuseum_1F_EventScript_155C3A:: @ 8155C3A waitmovement 0 msgbox SlateportCity_OceanicMuseum_1F_Text_17E582, 4 giveitem ITEM_TM46 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155CC2 setflag 269 msgbox SlateportCity_OceanicMuseum_1F_Text_17E606, 4 closebutton - compare_var_to_imm FACING, 2 + compare FACING, 2 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155C98 - compare_var_to_imm FACING, 2 + compare FACING, 2 goto_if 5, SlateportCity_OceanicMuseum_1F_EventScript_155CAD end diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc index 1f6aa3c2d..c1398e579 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc @@ -21,21 +21,21 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 applymovement 3, SlateportCity_OceanicMuseum_2F_Movement_155EB8 applymovement 4, SlateportCity_OceanicMuseum_2F_Movement_155EC5 waitmovement 0 - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E62 - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E62 msgbox SlateportCity_OceanicMuseum_2F_Text_17EDAE, 4 - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 5, SlateportCity_OceanicMuseum_2F_EventScript_155E6D msgbox SlateportCity_OceanicMuseum_2F_Text_17EDD7, 4 msgbox SlateportCity_OceanicMuseum_2F_Text_17EE01, 4 closebutton applymovement 4, SlateportCity_OceanicMuseum_2F_Movement_155EB2 waitmovement 0 - compare_var_to_imm FACING, 1 + compare FACING, 1 call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E78 - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E83 trainerbattle 3, OPPONENT_MUSEUM_2F_GRUNT_1, 0, SlateportCity_OceanicMuseum_2F_Text_17EE4E msgbox SlateportCity_OceanicMuseum_2F_Text_17EE66, 4 diff --git a/data/scripts/maps/SlateportCity_PokemonFanClub.inc b/data/scripts/maps/SlateportCity_PokemonFanClub.inc index 882e865ee..cd71d8d51 100644 --- a/data/scripts/maps/SlateportCity_PokemonFanClub.inc +++ b/data/scripts/maps/SlateportCity_PokemonFanClub.inc @@ -33,9 +33,9 @@ SlateportCity_PokemonFanClub_EventScript_1557A8:: @ 81557A8 call_if 1, SlateportCity_PokemonFanClub_EventScript_155893 checkflag 200 call_if 1, SlateportCity_PokemonFanClub_EventScript_155893 - compare_var_to_imm 0x4002, 5 + compare 0x4002, 5 call_if 1, SlateportCity_PokemonFanClub_EventScript_15588D - compare_var_to_imm 0x40b7, 2 + compare 0x40b7, 2 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1557FE msgbox SlateportCity_PokemonFanClub_Text_17DA14, 4 goto SlateportCity_PokemonFanClub_EventScript_155808 @@ -85,7 +85,7 @@ SlateportCity_PokemonFanClub_EventScript_155899:: @ 8155899 SlateportCity_PokemonFanClub_EventScript_1558A3:: @ 81558A3 checkitemspace ITEM_RED_SCARF, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 200 @@ -96,7 +96,7 @@ SlateportCity_PokemonFanClub_EventScript_1558A3:: @ 81558A3 SlateportCity_PokemonFanClub_EventScript_1558D4:: @ 81558D4 checkitemspace ITEM_BLUE_SCARF, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 201 @@ -107,7 +107,7 @@ SlateportCity_PokemonFanClub_EventScript_1558D4:: @ 81558D4 SlateportCity_PokemonFanClub_EventScript_155905:: @ 8155905 checkitemspace ITEM_PINK_SCARF, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 202 @@ -118,7 +118,7 @@ SlateportCity_PokemonFanClub_EventScript_155905:: @ 8155905 SlateportCity_PokemonFanClub_EventScript_155936:: @ 8155936 checkitemspace ITEM_GREEN_SCARF, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 203 @@ -129,7 +129,7 @@ SlateportCity_PokemonFanClub_EventScript_155936:: @ 8155936 SlateportCity_PokemonFanClub_EventScript_155967:: @ 8155967 checkitemspace ITEM_YELLOW_SCARF, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_155998 msgbox SlateportCity_PokemonFanClub_Text_17DB89, 4 setflag 204 @@ -145,7 +145,7 @@ SlateportCity_PokemonFanClub_EventScript_155998:: @ 8155998 SlateportCity_PokemonFanClub_EventScript_1559A2:: @ 81559A2 specialvar RESULT, CheckLeadMonCool - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_1559B3 return @@ -155,7 +155,7 @@ SlateportCity_PokemonFanClub_EventScript_1559B3:: @ 81559B3 SlateportCity_PokemonFanClub_EventScript_1559B9:: @ 81559B9 specialvar RESULT, CheckLeadMonBeauty - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_1559CA return @@ -165,7 +165,7 @@ SlateportCity_PokemonFanClub_EventScript_1559CA:: @ 81559CA SlateportCity_PokemonFanClub_EventScript_1559D0:: @ 81559D0 specialvar RESULT, CheckLeadMonCute - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_1559E1 return @@ -175,7 +175,7 @@ SlateportCity_PokemonFanClub_EventScript_1559E1:: @ 81559E1 SlateportCity_PokemonFanClub_EventScript_1559E7:: @ 81559E7 specialvar RESULT, CheckLeadMonSmart - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_1559F8 return @@ -185,7 +185,7 @@ SlateportCity_PokemonFanClub_EventScript_1559F8:: @ 81559F8 SlateportCity_PokemonFanClub_EventScript_1559FE:: @ 81559FE specialvar RESULT, CheckLeadMonTough - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, SlateportCity_PokemonFanClub_EventScript_155A0F return @@ -200,7 +200,7 @@ SlateportCity_PokemonFanClub_EventScript_155A15:: @ 8155A15 goto_if_eq SlateportCity_PokemonFanClub_EventScript_155A75 msgbox SlateportCity_PokemonFanClub_Text_17DE6B, 4 specialvar RESULT, GetLeadMonFriendshipScore - compare_var_to_imm RESULT, 4 + compare RESULT, 4 goto_if 4, SlateportCity_PokemonFanClub_EventScript_155A3A release end @@ -213,7 +213,7 @@ SlateportCity_PokemonFanClub_EventScript_155A3A:: @ 8155A3A waitmovement 0 msgbox SlateportCity_PokemonFanClub_Text_17DF57, 4 giveitem ITEM_SOOTHE_BELL - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SlateportCity_PokemonFanClub_EventScript_1A029B setflag 278 release diff --git a/data/scripts/maps/SootopolisCity.inc b/data/scripts/maps/SootopolisCity.inc index 6006ac2ef..936b859e5 100644 --- a/data/scripts/maps/SootopolisCity.inc +++ b/data/scripts/maps/SootopolisCity.inc @@ -45,7 +45,7 @@ SootopolisCity_EventScript_14D123:: @ 814D123 call SootopolisCity_EventScript_1A02C1 movespriteperm 1, 29, 19 movespriteperm 2, 33, 19 - compare_var_to_imm 0x405e, 1 + compare 0x405e, 1 call_if 1, SootopolisCity_EventScript_14D142 return @@ -99,20 +99,20 @@ SootopolisCity_EventScript_14D19F:: @ 814D19F addvar RESULT, 20 addvar RESULT, 133 giveitem RESULT - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SootopolisCity_EventScript_1A029B setflag 2258 msgbox SootopolisCity_Text_1C64D0, 4 random 2 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SootopolisCity_EventScript_14D1FF - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SootopolisCity_EventScript_14D220 end SootopolisCity_EventScript_14D1FF:: @ 814D1FF giveitem ITEM_FIGY_BERRY - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SootopolisCity_EventScript_1A029B msgbox SootopolisCity_Text_1C650B, 4 release @@ -120,7 +120,7 @@ SootopolisCity_EventScript_14D1FF:: @ 814D1FF SootopolisCity_EventScript_14D220:: @ 814D220 giveitem ITEM_IAPAPA_BERRY - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SootopolisCity_EventScript_1A029B msgbox SootopolisCity_Text_1C650B, 4 release @@ -128,7 +128,7 @@ SootopolisCity_EventScript_14D220:: @ 814D220 SootopolisCity_EventScript_14D241:: @ 814D241 msgbox SootopolisCity_Text_1C6540, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SootopolisCity_EventScript_14D25E msgbox SootopolisCity_Text_1C6626, 4 release diff --git a/data/scripts/maps/SootopolisCity_Gym_1F.inc b/data/scripts/maps/SootopolisCity_Gym_1F.inc index d6c7958b6..bd0af12be 100644 --- a/data/scripts/maps/SootopolisCity_Gym_1F.inc +++ b/data/scripts/maps/SootopolisCity_Gym_1F.inc @@ -19,11 +19,11 @@ SootopolisCity_Gym_1F_MapScript1_15AF25:: @ 815AF25 end SootopolisCity_Gym_1F_EventScript_15AF2E:: @ 815AF2E - compare_var_to_imm 0x4022, 8 + compare 0x4022, 8 goto_if 0, SootopolisCity_Gym_1F_EventScript_15AF85 - compare_var_to_imm 0x4022, 28 + compare 0x4022, 28 goto_if 0, SootopolisCity_Gym_1F_EventScript_15AF73 - compare_var_to_imm 0x4022, 69 + compare 0x4022, 69 goto_if 0, SootopolisCity_Gym_1F_EventScript_15AF61 setmaptile 8, 4, 519, 0 setmaptile 8, 5, 519, 0 @@ -109,7 +109,7 @@ SootopolisCity_Gym_1F_EventScript_15B02D:: @ 815B02D SootopolisCity_Gym_1F_EventScript_15B056:: @ 815B056 giveitem ITEM_TM03 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SootopolisCity_Gym_1F_EventScript_1A029B msgbox SootopolisCity_Gym_1F_Text_18F466, 4 setflag 172 diff --git a/data/scripts/maps/SootopolisCity_House2.inc b/data/scripts/maps/SootopolisCity_House2.inc index 6315cee85..011806291 100644 --- a/data/scripts/maps/SootopolisCity_House2.inc +++ b/data/scripts/maps/SootopolisCity_House2.inc @@ -5,9 +5,9 @@ SootopolisCity_House2_EventScript_15B2E5:: @ 815B2E5 lock faceplayer msgbox SootopolisCity_House2_Text_18FA66, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, SootopolisCity_House2_EventScript_15B307 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, SootopolisCity_House2_EventScript_15B310 release end diff --git a/data/scripts/maps/SootopolisCity_House3.inc b/data/scripts/maps/SootopolisCity_House3.inc index 156ee232d..f1bf0bf19 100644 --- a/data/scripts/maps/SootopolisCity_House3.inc +++ b/data/scripts/maps/SootopolisCity_House3.inc @@ -5,7 +5,7 @@ SootopolisCity_House3_EventScript_15B31A:: @ 815B31A lock faceplayer msgbox SootopolisCity_House3_Text_18FB36, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SootopolisCity_House3_EventScript_15B339 msgbox SootopolisCity_House3_Text_18FBC0, 4 release diff --git a/data/scripts/maps/SootopolisCity_House6.inc b/data/scripts/maps/SootopolisCity_House6.inc index 2d6add92d..1e1b53956 100644 --- a/data/scripts/maps/SootopolisCity_House6.inc +++ b/data/scripts/maps/SootopolisCity_House6.inc @@ -7,11 +7,11 @@ SootopolisCity_House6_EventScript_15B386:: @ 815B386 checkflag 245 goto_if_eq SootopolisCity_House6_EventScript_15B3CD msgbox SootopolisCity_House6_Text_18FEA1, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, SootopolisCity_House6_EventScript_15B3C3 msgbox SootopolisCity_House6_Text_18FF12, 4 givedecoration 117 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SootopolisCity_House6_EventScript_15B3D7 setflag 245 release diff --git a/data/scripts/maps/SootopolisCity_House8.inc b/data/scripts/maps/SootopolisCity_House8.inc index e7ddaa39d..662117741 100644 --- a/data/scripts/maps/SootopolisCity_House8.inc +++ b/data/scripts/maps/SootopolisCity_House8.inc @@ -9,14 +9,14 @@ SootopolisCity_House8_EventScript_15B401:: @ 815B401 special sub_80F9A0C waitstate copyvar RESULT, 0x8004 - compare_var_to_imm RESULT, 255 + compare RESULT, 255 goto_if_eq SootopolisCity_House8_EventScript_15B448 special CompareShroomishSize - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SootopolisCity_House8_EventScript_15B452 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq SootopolisCity_House8_EventScript_15B45C - compare_var_to_imm RESULT, 3 + compare RESULT, 3 goto_if_eq SootopolisCity_House8_EventScript_15B466 release end @@ -39,7 +39,7 @@ SootopolisCity_House8_EventScript_15B45C:: @ 815B45C SootopolisCity_House8_EventScript_15B466:: @ 815B466 msgbox SootopolisCity_House8_Text_19021D, 4 giveitem ITEM_ELIXIR - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SootopolisCity_House8_EventScript_15B488 closebutton release @@ -58,14 +58,14 @@ SootopolisCity_House8_EventScript_15B492:: @ 815B492 special sub_80F9A0C waitstate copyvar RESULT, 0x8004 - compare_var_to_imm RESULT, 255 + compare RESULT, 255 goto_if_eq SootopolisCity_House8_EventScript_15B4D9 special CompareBarboachSize - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SootopolisCity_House8_EventScript_15B4E3 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq SootopolisCity_House8_EventScript_15B4ED - compare_var_to_imm RESULT, 3 + compare RESULT, 3 goto_if_eq SootopolisCity_House8_EventScript_15B4F7 release end @@ -88,7 +88,7 @@ SootopolisCity_House8_EventScript_15B4ED:: @ 815B4ED SootopolisCity_House8_EventScript_15B4F7:: @ 815B4F7 msgbox SootopolisCity_House8_Text_190536, 4 giveitem ITEM_ELIXIR - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SootopolisCity_House8_EventScript_15B519 closebutton release diff --git a/data/scripts/maps/SouthernIsland_Exterior.inc b/data/scripts/maps/SouthernIsland_Exterior.inc index a45b0b556..358e2277c 100644 --- a/data/scripts/maps/SouthernIsland_Exterior.inc +++ b/data/scripts/maps/SouthernIsland_Exterior.inc @@ -10,7 +10,7 @@ SouthernIsland_Exterior_EventScript_160AE0:: @ 8160AE0 lock faceplayer msgbox SouthernIsland_Exterior_Text_1C5215, 5 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SouthernIsland_Exterior_EventScript_160B25 msgbox SouthernIsland_Exterior_Text_1C5281, 4 closebutton diff --git a/data/scripts/maps/SouthernIsland_Interior.inc b/data/scripts/maps/SouthernIsland_Interior.inc index d30f8cee4..37af5e140 100644 --- a/data/scripts/maps/SouthernIsland_Interior.inc +++ b/data/scripts/maps/SouthernIsland_Interior.inc @@ -23,9 +23,9 @@ SouthernIsland_Interior_MapScript1_160B6C:: @ 8160B6C SouthernIsland_Interior_EventScript_160B77:: @ 8160B77 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq SouthernIsland_Interior_EventScript_160B8F - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq SouthernIsland_Interior_EventScript_160B95 end diff --git a/data/scripts/maps/Underwater_SealedChamber.inc b/data/scripts/maps/Underwater_SealedChamber.inc index 6d263690d..5bbe8e3b6 100644 --- a/data/scripts/maps/Underwater_SealedChamber.inc +++ b/data/scripts/maps/Underwater_SealedChamber.inc @@ -4,9 +4,9 @@ Underwater_SealedChamber_MapScripts:: @ 815F080 Underwater_SealedChamber_MapScript1_15F086:: @ 815F086 getplayerxy 0x8004, 0x8005 - compare_var_to_imm 0x8004, 12 + compare 0x8004, 12 goto_if 5, Underwater_SealedChamber_EventScript_15F0A6 - compare_var_to_imm 0x8005, 44 + compare 0x8005, 44 goto_if 5, Underwater_SealedChamber_EventScript_15F0A6 goto Underwater_SealedChamber_EventScript_15F0AF diff --git a/data/scripts/maps/UnknownMap_25_34.inc b/data/scripts/maps/UnknownMap_25_34.inc index 0bf09e41e..994f37b63 100644 --- a/data/scripts/maps/UnknownMap_25_34.inc +++ b/data/scripts/maps/UnknownMap_25_34.inc @@ -13,15 +13,15 @@ LinkContestRoom1_MapScript1_15F595:: @ 815F595 LinkContestRoom1_EventScript_15F5A5:: @ 815F5A5 special ScriptGetMultiplayerId - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LinkContestRoom1_EventScript_15F5E0 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LinkContestRoom1_EventScript_15F5E4 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 call_if 1, LinkContestRoom1_EventScript_15F5E8 - compare_var_to_imm RESULT, 3 + compare RESULT, 3 call_if 1, LinkContestRoom1_EventScript_15F5EC - compare_var_to_imm RESULT, 4 + compare RESULT, 4 call_if 1, LinkContestRoom1_EventScript_15F5F0 return @@ -46,7 +46,7 @@ LinkContestRoom1_EventScript_15F5F0:: @ 815F5F0 return LinkContestRoom1_MapScript1_15F5F4:: @ 815F5F4 - compare_var_to_imm 0x4009, 1 + compare 0x4009, 1 call_if 1, LinkContestRoom1_EventScript_15F600 end @@ -75,7 +75,7 @@ LinkContestRoom1_EventScript_15F625:: @ 815F625 LinkContestRoom1_EventScript_15F630:: @ 815F630 call LinkContestRoom1_EventScript_15F6E6 call LinkContestRoom1_EventScript_15F646 - compare_var_to_imm 0x4000, 8 + compare 0x4000, 8 goto_if 0, LinkContestRoom1_EventScript_15F630 return @@ -414,9 +414,9 @@ LilycoveCity_ContestLobby_EventScript_15FBDB:: @ 815FBDB SlateportCity_ContestLobby_EventScript_15FBDB:: @ 815FBDB VerdanturfTown_ContestLobby_EventScript_15FBDB:: @ 815FBDB checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_15FBF3 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_15FBF9 return diff --git a/data/scripts/maps/VerdanturfTown_ContestLobby.inc b/data/scripts/maps/VerdanturfTown_ContestLobby.inc index 52de0db78..5d7c6de18 100644 --- a/data/scripts/maps/VerdanturfTown_ContestLobby.inc +++ b/data/scripts/maps/VerdanturfTown_ContestLobby.inc @@ -105,7 +105,7 @@ VerdanturfTown_ContestLobby_EventScript_153E47:: @ 8153E47 goto_if_eq VerdanturfTown_ContestLobby_EventScript_153E76 msgbox VerdanturfTown_ContestLobby_Text_177DEC, 4 giveitem ITEM_TM45 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq VerdanturfTown_ContestLobby_EventScript_1A029B setflag 235 release diff --git a/data/scripts/maps/VictoryRoad_1F.inc b/data/scripts/maps/VictoryRoad_1F.inc index 7bbcf6a41..a0173e720 100644 --- a/data/scripts/maps/VictoryRoad_1F.inc +++ b/data/scripts/maps/VictoryRoad_1F.inc @@ -94,7 +94,7 @@ VictoryRoad_1F_EventScript_15DF28:: @ 815DF28 VictoryRoad_1F_EventScript_15DF31:: @ 815DF31 trainerbattle 0, OPPONENT_WALLY_3, 0, VictoryRoad_1F_Text_1979BA, VictoryRoad_1F_Text_197A23 specialvar RESULT, sub_8082C68 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq VictoryRoad_1F_EventScript_15DF58 msgbox VictoryRoad_1F_Text_197A47, 6 end diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index 1881bc242..215fb3948 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -26,9 +26,9 @@ SpeakToBard: lock faceplayer msgbox gTextBard_HiImTheBard, MSGBOX_YESNO - compare_var_to_imm RESULT, YES + compare RESULT, YES goto_if_eq yes_hear_song - compare_var_to_imm RESULT, NO + compare RESULT, NO goto_if_eq dont_hear_song end @@ -38,7 +38,7 @@ yes_hear_song: special ScrSpecial_PlayBardSong delay 60 special ScrSpecial_HasBardSongBeenChanged - compare_var_to_imm RESULT, FALSE + compare RESULT, FALSE @ Prompt new lyrics only if song hasn't been changed goto_if_eq prompt_write_lyrics msgbox gTextBard_OhWhatAMovingSong, 4 @@ -52,9 +52,9 @@ dont_hear_song: prompt_write_lyrics: msgbox gTextBard_SoHowDoYouLikeMySong, MSGBOX_YESNO - compare_var_to_imm RESULT, YES + compare RESULT, YES goto_if_eq write_lyrics - compare_var_to_imm RESULT, NO + compare RESULT, NO goto_if_eq dont_write_lyrics end @@ -63,7 +63,7 @@ write_lyrics: call MauvilleCity_PokemonCenter_1F_EventScript_1A00F3 lock faceplayer - compare_var_to_imm RESULT, NO + compare RESULT, NO goto_if_eq dont_write_lyrics msgbox gTextBard_ThankYouKindly, 4 setvar 0x8004, 1 @@ -71,7 +71,7 @@ write_lyrics: special ScrSpecial_PlayBardSong delay 60 msgbox gTextBard_WasThatHowYouWanted, MSGBOX_YESNO - compare_var_to_imm RESULT, NO + compare RESULT, NO goto_if_eq write_lyrics @ Keep looping until player responds YES special ScrSpecial_SaveBardSongLyrics msgbox gTextBard_OkayThatsIt, 4 @@ -94,7 +94,7 @@ SpeakToHipster: setflag 2054 msgbox gTextHipster_TheyCallMeTheHipster, 4 special ScrSpecial_GetHipsterSpokenFlag - compare_var_to_imm RESULT, FALSE + compare RESULT, FALSE goto_if_eq hipster_first_time msgbox gTextHipster_TaughtYouAlready, 4 release @@ -102,7 +102,7 @@ SpeakToHipster: hipster_first_time: special ScrSpecial_HipsterTeachWord - compare_var_to_imm RESULT, TRUE @ TRUE if player learned a new word + compare RESULT, TRUE @ TRUE if player learned a new word goto_if_eq teach_new_word msgbox gTextHipster_YouAlreadyKnowALot, 4 release @@ -125,10 +125,10 @@ SpeakToTrader: lock faceplayer msgbox gTextTrader_Introduction, MSGBOX_YESNO - compare_var_to_imm RESULT, NO + compare RESULT, NO goto_if_eq dont_want_to_trade special ScrSpecial_GetTraderTradedFlag - compare_var_to_imm RESULT, TRUE + compare RESULT, TRUE goto_if_eq already_traded message gTextTrader_MenuPrompt waittext @@ -146,15 +146,15 @@ already_traded: do_trader_menu_get: special ScrSpecial_TraderMenuGetDecoration waitstate - compare_var_to_imm 0x8004, 0 + compare 0x8004, 0 goto_if_eq cancelled_get_menu - compare_var_to_imm 0x8004, 65535 + compare 0x8004, 65535 goto_if_eq rare_item_cant_trade_away msgbox gTextTrader_ItemOnceBelongedTo, MSGBOX_YESNO - compare_var_to_imm RESULT, NO + compare RESULT, NO goto_if_eq dont_want_item special ScrSpecial_DoesPlayerHaveNoDecorations - compare_var_to_imm RESULT, TRUE + compare RESULT, TRUE goto_if_eq player_has_no_decorations goto do_trader_menu_give end @@ -183,15 +183,15 @@ do_trader_menu_give: msgbox gTextTrader_PickDecorationYoullTrade, 4 special ScrSpecial_TraderMenuGiveDecoration waitstate - compare_var_to_imm 0x8006, 0 + compare 0x8006, 0 goto_if_eq cancelled_give_menu - compare_var_to_imm 0x8006, 65535 + compare 0x8006, 65535 goto_if_eq decoration_is_in_use special ScrSpecial_IsDecorationFull - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq decorations_full msgbox gTextTrader_SoWellTrade, MSGBOX_YESNO - compare_var_to_imm RESULT, NO + compare RESULT, NO goto_if_eq do_trader_menu_give special ScrSpecial_TraderDoDecorationTrade msgbox gTextTrader_ThenWellTrade, 2 @@ -225,51 +225,51 @@ SpeakToStoryteller: lock faceplayer msgbox gTextStoryteller_Introduction, MSGBOX_YESNO - compare_var_to_imm RESULT, NO + compare RESULT, NO goto_if_eq dont_hear_story specialvar RESULT, ScrSpecial_StorytellerGetFreeStorySlot - compare_var_to_imm RESULT, 0 @ If slot is 0, then the list is empty + compare RESULT, 0 @ If slot is 0, then the list is empty goto_if_eq no_stories_recorded choose_story: message gTextStoryteller_WhichTale waittext special ScrSpecial_StorytellerStoryListMenu waitstate - compare_var_to_imm RESULT, FALSE + compare RESULT, FALSE goto_if_eq cancel_story_menu setvar 0x8008, 1 special ScrSpecial_StorytellerDisplayStory waittext waitbutton specialvar RESULT, ScrSpecial_StorytellerUpdateStat - compare_var_to_imm RESULT, FALSE + compare RESULT, FALSE goto_if_eq no_stat_update goto stat_update cancel_story_menu: - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 goto_if_eq dont_hear_story goto yes_hear_story no_stat_update: msgbox gTextStoryteller_CouldThereBeOtherTrainers, 4 msgbox gTextStoryteller_HearAnotherLegendaryTale, MSGBOX_YESNO - compare_var_to_imm RESULT, YES + compare RESULT, YES goto_if_eq choose_story yes_hear_story: specialvar RESULT, ScrSpecial_HasStorytellerAlreadyRecorded - compare_var_to_imm RESULT, TRUE + compare RESULT, TRUE goto_if_eq cant_record_story @ already recorded story specialvar RESULT, ScrSpecial_StorytellerGetFreeStorySlot - compare_var_to_imm RESULT, 4 + compare RESULT, 4 goto_if_eq cant_record_story @ story list is full goto prompt_record_story no_stories_recorded: msgbox gTextStoryteller_ButIKnowOfNoLegendaryTrainers, 4 prompt_record_story: msgbox gTextStoryteller_HaveYouAnyTales, MSGBOX_YESNO - compare_var_to_imm RESULT, NO + compare RESULT, NO goto_if_eq dont_hear_story specialvar RESULT, ScrSpecial_StorytellerInitializeRandomStat - compare_var_to_imm RESULT, TRUE + compare RESULT, TRUE goto_if_eq stat_update msgbox gTextStoryteller_ImNotSatisfied, 4 closebutton @@ -305,25 +305,25 @@ SpeakToGiddy: lock faceplayer msgbox gTextGiddy_Introduction, MSGBOX_YESNO - compare_var_to_imm RESULT, YES + compare RESULT, YES goto_if_eq yes_hear_giddy - compare_var_to_imm RESULT, NO + compare RESULT, NO goto_if_eq dont_hear_giddy end yes_hear_giddy: special ScrSpecial_GiddyShouldTellAnotherTale - compare_var_to_imm RESULT, TRUE + compare RESULT, TRUE goto_if_eq tell_giddy_tale - compare_var_to_imm RESULT, FALSE + compare RESULT, FALSE goto_if_eq bye_bye end tell_another_giddy_tale: special ScrSpecial_GiddyShouldTellAnotherTale - compare_var_to_imm RESULT, TRUE + compare RESULT, TRUE goto_if_eq also_i_was_thinking - compare_var_to_imm RESULT, FALSE + compare RESULT, FALSE goto_if_eq bye_bye end @@ -337,9 +337,9 @@ tell_giddy_tale: special ShowFieldMessageStringVar4 waittext yesnobox 20, 8 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq tell_another_giddy_tale - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq tell_another_giddy_tale end diff --git a/data/scripts/mystery_event_club.inc b/data/scripts/mystery_event_club.inc index ed21a1869..7f29be0d8 100644 --- a/data/scripts/mystery_event_club.inc +++ b/data/scripts/mystery_event_club.inc @@ -29,11 +29,11 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1B7A:: @ 81B1B7A call PetalburgCity_PokemonCenter_1F_EventScript_1A00F3 lock faceplayer - compare_var_to_imm 0x8004, 1 + compare 0x8004, 1 call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_1B1C77 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_1B1BB1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_1B1BBB end @@ -83,11 +83,11 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1C36:: @ 81B1C36 call PetalburgCity_PokemonCenter_1F_EventScript_1A00F3 lock faceplayer - compare_var_to_imm 0x8004, 1 + compare 0x8004, 1 call_if 1, PetalburgCity_PokemonCenter_1F_EventScript_1B1C77 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_1B1BB1 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq PetalburgCity_PokemonCenter_1F_EventScript_1B1BBB end diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index bb890ebcb..432ba8f65 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -8,9 +8,9 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6956:: @ 81B6956 msgbox LittlerootTown_BrendansHouse_1F_Text_172429, 4 applymovement 0x8004, LittlerootTown_BrendansHouse_1F_Movement_1A0839 waitmovement 0 - compare_var_to_imm 0x8005, 0 + compare 0x8005, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B699F - compare_var_to_imm 0x8005, 1 + compare 0x8005, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B69AA msgbox LittlerootTown_BrendansHouse_1F_Text_172453, 4 closebutton @@ -69,9 +69,9 @@ LittlerootTown_MaysHouse_2F_EventScript_1B69EB:: @ 81B69EB setflag 754 setflag 755 checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6A31 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6A61 playse 9 disappear 0x8008 @@ -252,17 +252,17 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6BE9:: @ 81B6BE9 LittlerootTown_MaysHouse_1F_EventScript_1B6BE9:: @ 81B6BE9 lock faceplayer - compare_var_to_imm 0x4082, 4 + compare 0x4082, 4 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C33 - compare_var_to_imm 0x408c, 4 + compare 0x408c, 4 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C33 checkflag 2059 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C3D checkflag 82 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C72 - compare_var_to_imm 0x4001, 1 + compare 0x4001, 1 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C80 - compare_var_to_imm 0x4092, 7 + compare 0x4092, 7 goto_if 4, LittlerootTown_BrendansHouse_1F_EventScript_1B6C9C msgbox LittlerootTown_BrendansHouse_1F_Text_172429, 4 release @@ -278,7 +278,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6C3D:: @ 81B6C3D goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1B6C72 msgbox LittlerootTown_BrendansHouse_1F_Text_172782, 4 giveitem ITEM_AMULET_COIN - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_1A029B msgbox LittlerootTown_BrendansHouse_1F_Text_1727CD, 4 setflag 133 @@ -362,13 +362,13 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6CDE:: @ 81B6CDE LittlerootTown_MaysHouse_1F_EventScript_1B6CDE:: @ 81B6CDE lockall checkgender - compare_var_to_imm RESULT, 0 + compare RESULT, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DAD - compare_var_to_imm RESULT, 1 + compare RESULT, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DBD - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E1D - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E28 applymovement 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1A0839 waitmovement 0 @@ -378,23 +378,23 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6CDE:: @ 81B6CDE applymovement 0x8009, LittlerootTown_BrendansHouse_1F_Movement_1A0835 waitmovement 0 delay 20 - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DCD - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DD8 msgbox LittlerootTown_BrendansHouse_1F_Text_17298B, 4 giveitem ITEM_SS_TICKET msgbox LittlerootTown_BrendansHouse_1F_Text_172A7D, 4 closebutton - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DE3 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DEE msgbox LittlerootTown_BrendansHouse_1F_Text_172B5E, 4 closebutton - compare_var_to_imm 0x8008, 0 + compare 0x8008, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DF9 - compare_var_to_imm 0x8008, 1 + compare 0x8008, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E0B playse 8 disappear 0x8009 diff --git a/data/scripts/pokeblocks.inc b/data/scripts/pokeblocks.inc index 5f185c8ff..dde0d0400 100644 --- a/data/scripts/pokeblocks.inc +++ b/data/scripts/pokeblocks.inc @@ -39,24 +39,24 @@ SlateportCity_ContestLobby_EventScript_1B7681:: @ 81B7681 VerdanturfTown_ContestLobby_EventScript_1B7681:: @ 81B7681 lockall msgbox FallarborTown_ContestLobby_Text_1B6E63, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1B76A1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B76E5 end FallarborTown_ContestLobby_EventScript_1B76A1:: @ 81B76A1 checkitem ITEM_POKEBLOCK_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7780 specialvar RESULT, PlayerHasBerries - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B770E msgbox FallarborTown_ContestLobby_Text_1B6E9D, 4 specialvar RESULT, sub_810CA00 - compare_var_to_imm RESULT, 65535 + compare RESULT, 65535 goto_if 5, FallarborTown_ContestLobby_EventScript_1B76EF - compare_var_to_imm RESULT, 65535 + compare RESULT, 65535 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7776 end @@ -67,9 +67,9 @@ FallarborTown_ContestLobby_EventScript_1B76E5:: @ 81B76E5 FallarborTown_ContestLobby_EventScript_1B76EF:: @ 81B76EF msgbox FallarborTown_ContestLobby_Text_1B6ED0, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7734 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7726 end @@ -149,9 +149,9 @@ VerdanturfTown_ContestLobby_EventScript_1B77B6:: @ 81B77B6 faceplayer msgbox FallarborTown_ContestLobby_Text_1B742F, 4 specialvar RESULT, PlayerHasBerries - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1B77DC - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B77E6 end @@ -209,23 +209,23 @@ SlateportCity_ContestLobby_EventScript_1B783B:: @ 81B783B VerdanturfTown_ContestLobby_EventScript_1B783B:: @ 81B783B lockall specialvar RESULT, PlayerHasBerries - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7897 checkitem ITEM_POKEBLOCK_CASE, 1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7942 specialvar RESULT, sub_810CA00 - compare_var_to_imm RESULT, 65535 + compare RESULT, 65535 goto_if 5, FallarborTown_ContestLobby_EventScript_1B7878 - compare_var_to_imm RESULT, 65535 + compare RESULT, 65535 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7938 end FallarborTown_ContestLobby_EventScript_1B7878:: @ 81B7878 msgbox FallarborTown_ContestLobby_Text_1B727C, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1B78A1 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7936 end @@ -236,21 +236,21 @@ FallarborTown_ContestLobby_EventScript_1B7897:: @ 81B7897 FallarborTown_ContestLobby_EventScript_1B78A1:: @ 81B78A1 call S_DoSaveDialog - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7936 message FallarborTown_ContestLobby_Text_1B7304 waittext special sub_8083614 waitstate - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7980 - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq FallarborTown_ContestLobby_EventScript_1B794C - compare_var_to_imm RESULT, 3 + compare RESULT, 3 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7959 - compare_var_to_imm RESULT, 5 + compare RESULT, 5 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7966 - compare_var_to_imm RESULT, 6 + compare RESULT, 6 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7973 end diff --git a/data/scripts/safari_zone.inc b/data/scripts/safari_zone.inc index 01fdf3c03..b7c4d1a43 100644 --- a/data/scripts/safari_zone.inc +++ b/data/scripts/safari_zone.inc @@ -14,7 +14,7 @@ EventScript_1C341B: @ 81C341B gUnknown_081C342D:: @ 81C342D lockall msgbox UnknownString_81C34B2, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_1C3443 releaseall end @@ -43,10 +43,10 @@ gUnknown_081C3459:: @ 81C3459 gUnknown_081C346A:: @ 81C346A lockall special SafariZoneGetPokeblockNameInFeeder - compare_var_to_imm RESULT, -1 + compare RESULT, 0xFFFF goto_if 5, EventScript_1C34A9 msgbox UnknownString_81C354E, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_1C348E releaseall end @@ -55,7 +55,7 @@ EventScript_1C348E: fadescreen 1 special sub_810BAF4 waitstate - compare_var_to_imm RESULT, -1 + compare RESULT, 0xFFFF goto_if 5, EventScript_1C34A0 end diff --git a/data/scripts/secret_power_tm.inc b/data/scripts/secret_power_tm.inc index ac033506b..2c1524e5b 100644 --- a/data/scripts/secret_power_tm.inc +++ b/data/scripts/secret_power_tm.inc @@ -2,7 +2,7 @@ Route111_EventScript_1A3858:: @ 81A3858 lock faceplayer msgbox Route111_Text_1A3520, 5 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq Route111_EventScript_1A3877 msgbox Route111_Text_1A37B5, 4 release @@ -10,17 +10,17 @@ Route111_EventScript_1A3858:: @ 81A3858 Route111_EventScript_1A3877:: @ 81A3877 giveitem ITEM_TM43 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq Route111_EventScript_1A38D9 msgbox Route111_Text_1A35C5, 4 closebutton setflag 96 clearflag 948 - compare_var_to_imm FACING, 3 + compare FACING, 3 call_if 1, Route111_EventScript_1A38C3 - compare_var_to_imm FACING, 4 + compare FACING, 4 call_if 1, Route111_EventScript_1A38C3 - compare_var_to_imm FACING, 2 + compare FACING, 2 call_if 1, Route111_EventScript_1A38CE disappear LAST_TALKED release diff --git a/data/scripts/tv.inc b/data/scripts/tv.inc index a2348315f..41e55929d 100644 --- a/data/scripts/tv.inc +++ b/data/scripts/tv.inc @@ -3,30 +3,30 @@ Event_TV:: @ 81A6E72 inccounter GAME_STAT_WATCHED_TV special sub_80C2014 specialvar RESULT, CheckForBigMovieOrEmergencyNewsOnTV - compare_var_to_imm RESULT, 2 + compare RESULT, 2 goto_if_eq EventScript_1A6F01 - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_1A6F0B checkflag 2098 goto_if 0, EventScript_1A6EF1 checkflag 2097 goto_if_eq EventScript_1A6EF1 specialvar RESULT, IsTVShowInSearchOfTrainersAiring - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if_eq EventScript_1A6F66 goto EventScript_1A6F50 end EventScript_1A6EBB: specialvar 0x8004, special_0x44 - compare_var_to_imm 0x8004, 255 + compare 0x8004, 255 goto_if_eq EventScript_1A6F3F specialvar RESULT, special_0x4a - compare_var_to_imm RESULT, 255 + compare RESULT, 255 goto_if_eq EventScript_1A6F3F copyvar 0x8004, RESULT specialvar RESULT, sub_80BDA0C - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if 5, EventScript_1A6F21 end @@ -59,7 +59,7 @@ EventScript_1A6F21: special DoTVShow waittext waitbutton - compare_var_to_imm RESULT, 1 + compare RESULT, 1 goto_if 5, EventScript_1A6F21 goto EventScript_1A6F37 end @@ -78,7 +78,7 @@ EventScript_1A6F3F: EventScript_1A6F50: special sub_80BECE8 - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A6EBB waittext waitbutton @@ -89,7 +89,7 @@ EventScript_1A6F66: special DoTVShowInSearchOfTrainers waittext waitbutton - compare_var_to_imm RESULT, 0 + compare RESULT, 0 goto_if_eq EventScript_1A6F66 goto EventScript_1A6F37 end -- cgit v1.2.3 From b4ba35a54c0f6204e34d2814351162c79ea4c0ba Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 26 Sep 2017 14:33:52 -0500 Subject: more command renaming --- asm/macros/event.inc | 124 ++++++++++----------- data-de/event_scripts.s | 12 +- data-de/field_move_scripts.inc | 4 +- data/event_scripts.s | 12 +- data/field_move_scripts.inc | 4 +- data/scripts/cable_club.inc | 8 +- data/scripts/contest_hall.inc | 4 +- data/scripts/magma_chimney.inc | 10 +- data/scripts/maps/AncientTomb.inc | 2 +- data/scripts/maps/AquaHideout_B1F.inc | 2 +- data/scripts/maps/AquaHideout_B2F.inc | 2 +- data/scripts/maps/BattleTower_BattleRoom.inc | 4 +- data/scripts/maps/BattleTower_Elevator.inc | 2 +- data/scripts/maps/BattleTower_Lobby.inc | 2 +- data/scripts/maps/BattleTower_Outside.inc | 2 +- data/scripts/maps/CaveOfOrigin_B4F.inc | 2 +- data/scripts/maps/DesertRuins.inc | 2 +- data/scripts/maps/DewfordTown.inc | 22 ++-- data/scripts/maps/EverGrandeCity_ChampionsRoom.inc | 6 +- data/scripts/maps/EverGrandeCity_Corridor1.inc | 2 +- data/scripts/maps/EverGrandeCity_Corridor2.inc | 2 +- data/scripts/maps/EverGrandeCity_Corridor3.inc | 2 +- data/scripts/maps/EverGrandeCity_Corridor4.inc | 2 +- data/scripts/maps/EverGrandeCity_Corridor5.inc | 2 +- data/scripts/maps/EverGrandeCity_DrakesRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_GlaciasRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_HallOfFame.inc | 2 +- data/scripts/maps/EverGrandeCity_PhoebesRoom.inc | 2 +- data/scripts/maps/EverGrandeCity_SidneysRoom.inc | 2 +- .../maps/FallarborTown_PokemonCenter_1F.inc | 2 +- data/scripts/maps/FortreeCity.inc | 2 +- data/scripts/maps/FortreeCity_House4.inc | 2 +- data/scripts/maps/GraniteCave_StevensRoom.inc | 2 +- data/scripts/maps/IslandCave.inc | 2 +- data/scripts/maps/LavaridgeTown.inc | 8 +- data/scripts/maps/LilycoveCity.inc | 2 +- data/scripts/maps/LilycoveCity_ContestLobby.inc | 12 +- data/scripts/maps/LilycoveCity_Harbor.inc | 12 +- .../maps/LilycoveCity_LilycoveMuseum_1F.inc | 2 +- data/scripts/maps/LittlerootTown.inc | 28 ++--- data/scripts/maps/LittlerootTown_MaysHouse_2F.inc | 2 +- .../maps/LittlerootTown_ProfessorBirchsLab.inc | 2 +- data/scripts/maps/MagmaHideout_B1F.inc | 2 +- data/scripts/maps/MauvilleCity.inc | 4 +- data/scripts/maps/MeteorFalls_1F_1R.inc | 16 +-- data/scripts/maps/MossdeepCity_House2.inc | 2 +- data/scripts/maps/MossdeepCity_StevensHouse.inc | 2 +- data/scripts/maps/MtPyre_Summit.inc | 10 +- data/scripts/maps/NewMauville_Inside.inc | 2 +- data/scripts/maps/OldaleTown.inc | 2 +- data/scripts/maps/PetalburgCity_Gym.inc | 8 +- data/scripts/maps/PetalburgWoods.inc | 4 +- data/scripts/maps/Route101.inc | 8 +- data/scripts/maps/Route103.inc | 2 +- data/scripts/maps/Route104.inc | 12 +- data/scripts/maps/Route109.inc | 12 +- data/scripts/maps/Route110.inc | 6 +- data/scripts/maps/Route110_TrickHouseEnd.inc | 12 +- data/scripts/maps/Route110_TrickHouseEntrance.inc | 46 ++++---- data/scripts/maps/Route111.inc | 22 ++-- data/scripts/maps/Route116.inc | 4 +- data/scripts/maps/Route118.inc | 2 +- data/scripts/maps/Route119.inc | 16 +-- data/scripts/maps/Route119_WeatherInstitute_2F.inc | 6 +- data/scripts/maps/Route120.inc | 16 +-- data/scripts/maps/Route121.inc | 6 +- data/scripts/maps/Route128.inc | 8 +- data/scripts/maps/RustboroCity.inc | 8 +- data/scripts/maps/RustboroCity_DevonCorp_3F.inc | 2 +- data/scripts/maps/RusturfTunnel.inc | 8 +- data/scripts/maps/SeafloorCavern_Room9.inc | 14 +-- data/scripts/maps/SkyPillar_Top.inc | 2 +- data/scripts/maps/SlateportCity.inc | 6 +- data/scripts/maps/SlateportCity_Harbor.inc | 10 +- .../maps/SlateportCity_OceanicMuseum_1F.inc | 4 +- .../maps/SlateportCity_OceanicMuseum_2F.inc | 14 +-- data/scripts/maps/SootopolisCity.inc | 2 +- data/scripts/maps/SouthernIsland_Exterior.inc | 2 +- data/scripts/maps/SouthernIsland_Interior.inc | 4 +- data/scripts/maps/UnknownMap_25_34.inc | 2 +- data/scripts/maps/VictoryRoad_1F.inc | 6 +- data/scripts/players_house.inc | 8 +- data/scripts/pokeblocks.inc | 8 +- data/scripts/secret_power_tm.inc | 2 +- src/scrcmd.c | 4 +- 85 files changed, 330 insertions(+), 330 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index d2164c72f..29b715e7f 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -535,88 +535,88 @@ @ Applies the movement data at movements to the specified (index) Person event. Also closes any standard message boxes that are still open. @ This command in fact uses variables to access the Person event ID. So, for example, if you setvar 0x8000 to 0x3, and then use applymovementpos 0x8000 @move1, Person event 3 will have the movements at @move1 applied to them. Thank you Shiny Quagsire for bringing this to my attention. .macro applymovement index, movements, mapGroup, mapNum - .ifb \mapGroup - .byte 0x4f - .2byte \index - .4byte \movements - .else - .byte 0x50 - .2byte \index - .4byte \movements - .byte \mapGroup - .byte \mapNum - .endif + .ifb \mapGroup + .byte 0x4f + .2byte \index + .4byte \movements + .else + .byte 0x50 + .2byte \index + .4byte \movements + .byte \mapGroup + .byte \mapNum + .endif .endm @ Blocks script execution until the movements being applied to the specified (index) Person event finish. If the specified Person event is 0x0000, then the command will block script execution until all Person events affected by applymovement finish their movements. If the specified Person event is not currently being manipulated with applymovement, then this command does nothing. .macro waitmovement index, mapBank, mapNum - .ifb \mapBank - .byte 0x51 - .2byte \index - .else - .byte 0x52 - .2byte \index - .byte \mapBank - .byte \mapNum - .endif - .endm - - @ Attempts to hide the specified (local_ID, a local ID) Person event on the current map, by setting its visibility flag if it has a valid one. If the Person does not have a valid visibility flag, this command does nothing. - .macro disappear local_ID - .byte 0x53 - .2byte \local_ID - .endm - - @ Clone of hidesprite that also moves the Person? Test it! - .macro disappearxy index, X, Y - .byte 0x54 - .2byte \index - .byte \X - .byte \Y + .ifb \mapBank + .byte 0x51 + .2byte \index + .else + .byte 0x52 + .2byte \index + .byte \mapBank + .byte \mapNum + .endif .endm - .macro reappear word - .byte 0x55 - .2byte \word + @ Attempts to hide the specified (local_ID, a local ID) Person event on the specified map, by setting its visibility flag if it has a valid one. If the Person does not have a valid visibility flag, this command does nothing. + @ If no map is specified, then the current map is used + .macro removeobject localId, mapGroup, mapNum + .ifb \mapGroup + .byte 0x53 + .2byte \localId + .else + .byte 0x54 + .2byte \localId + .byte \mapGroup + .byte \mapNum + .endif .endm - .macro reappearxy word, byte1, byte2 - .byte 0x56 - .2byte \word - .byte \byte1 - .byte \byte2 + .macro addobject localId, mapGroup, mapNum + .ifb \mapGroup + .byte 0x55 + .2byte \localId + .else + .byte 0x56 + .2byte \localId + .byte \mapGroup + .byte \mapNum + .endif .endm - .macro movesprite word1, word2, word3 - .byte 0x57 - .2byte \word1 - .2byte \word2 - .2byte \word3 + .macro setobjectxy word1, word2, word3 + .byte 0x57 + .2byte \word1 + .2byte \word2 + .2byte \word3 .endm - .macro spritevisible word, byte1, byte2 - .byte 0x58 - .2byte \word - .byte \byte1 - .byte \byte2 + .macro showobject word, byte1, byte2 + .byte 0x58 + .2byte \word + .byte \byte1 + .byte \byte2 .endm - .macro spriteinvisible word, byte1, byte2 - .byte 0x59 - .2byte \word - .byte \byte1 - .byte \byte2 + .macro hideobject word, byte1, byte2 + .byte 0x59 + .2byte \word + .byte \byte1 + .byte \byte2 .endm @ If the script was called by a Person event, then that Person will turn to face toward the tile that the player is stepping off of. .macro faceplayer - .byte 0x5a + .byte 0x5a .endm - .macro spriteface word, byte - .byte 0x5b - .2byte \word - .byte \byte + .macro turnobject word, byte + .byte 0x5b + .2byte \word + .byte \byte .endm @ If the Trainer flag for Trainer index is not set, this command does absolutely nothing. diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index 5751e440d..1ec043aa0 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -1613,7 +1613,7 @@ Std_FindItem: @ 819FF21 return Std_FindItem_Success: @ 819FF52 - disappear LAST_TALKED + removeobject LAST_TALKED message Message_FoundOneItem waitfanfare waittext @@ -2260,8 +2260,8 @@ PetalburgCity_Gym_EventScript_1A0424:: @ 81A0424 return RusturfTunnel_EventScript_1A0442:: @ 81A0442 - disappear 1 - disappear 10 + removeobject 1 + removeobject 10 clearflag 808 clearflag 984 setvar 0x409a, 6 @@ -2272,7 +2272,7 @@ EventScript_1A0457: @ unreferenced? delay 30 applymovement 255, SlateportCity_OceanicMuseum_2F_Movement_1A0841 waitmovement 0 - spritevisible 255, 0, 0 + showobject 255, 0, 0 delay 30 applymovement 255, Movement_1A047A waitmovement 0 @@ -2290,7 +2290,7 @@ SouthernIsland_Exterior_EventScript_1A047C:: @ 81A047C compare FACING, 3 call_if 1, BattleTower_Outside_EventScript_160B3A delay 30 - spriteinvisible 255, 0, 0 + hideobject 255, 0, 0 call BattleTower_Outside_EventScript_1A040E return @@ -3898,7 +3898,7 @@ EventScript_1A2F95: addvar 0x8004, 1 compare 0x8005, 0 goto_if_eq EventScript_1A2F95 - disappear 0x8006 + removeobject 0x8006 setflag 0x8005 goto EventScript_1A2F95 end diff --git a/data-de/field_move_scripts.inc b/data-de/field_move_scripts.inc index 59635ee4f..d218d834d 100644 --- a/data-de/field_move_scripts.inc +++ b/data-de/field_move_scripts.inc @@ -28,7 +28,7 @@ S_UseCut:: @ 81B0E16 DoTreeCutMovement: @ 81B0E21 applymovement LAST_TALKED, TreeCutMovement @ tree cut animation waitmovement 0 - disappear LAST_TALKED @ tree disappears + removeobject LAST_TALKED @ tree disappears releaseall end @@ -89,7 +89,7 @@ S_UseRockSmash:: @ 81B0F01 DoRockSmashMovement: @ 81B0F0C applymovement LAST_TALKED, RockSmashMovement waitmovement 0 - disappear LAST_TALKED + removeobject LAST_TALKED specialvar RESULT, sub_810F5BC compare RESULT, 1 goto_if_eq DoRockSmashMovement_Done diff --git a/data/event_scripts.s b/data/event_scripts.s index 0db608cd5..32cb8d233 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1607,7 +1607,7 @@ Std_FindItem: @ 819FF21 return Std_FindItem_Success: @ 819FF52 - disappear LAST_TALKED + removeobject LAST_TALKED message Message_FoundOneItem waitfanfare waittext @@ -2254,8 +2254,8 @@ PetalburgCity_Gym_EventScript_1A0424:: @ 81A0424 return RusturfTunnel_EventScript_1A0442:: @ 81A0442 - disappear 1 - disappear 10 + removeobject 1 + removeobject 10 clearflag 808 clearflag 984 setvar 0x409a, 6 @@ -2266,7 +2266,7 @@ EventScript_1A0457: @ unreferenced? delay 30 applymovement 255, SlateportCity_OceanicMuseum_2F_Movement_1A0841 waitmovement 0 - spritevisible 255, 0, 0 + showobject 255, 0, 0 delay 30 applymovement 255, Movement_1A047A waitmovement 0 @@ -2284,7 +2284,7 @@ SouthernIsland_Exterior_EventScript_1A047C:: @ 81A047C compare FACING, 3 call_if 1, BattleTower_Outside_EventScript_160B3A delay 30 - spriteinvisible 255, 0, 0 + hideobject 255, 0, 0 call BattleTower_Outside_EventScript_1A040E return @@ -3877,7 +3877,7 @@ EventScript_1A2F95: addvar 0x8004, 1 compare 0x8005, 0 goto_if_eq EventScript_1A2F95 - disappear 0x8006 + removeobject 0x8006 setflag 0x8005 goto EventScript_1A2F95 end diff --git a/data/field_move_scripts.inc b/data/field_move_scripts.inc index 7df5ac90f..592dd7003 100644 --- a/data/field_move_scripts.inc +++ b/data/field_move_scripts.inc @@ -28,7 +28,7 @@ S_UseCut:: @ 81B0E16 DoTreeCutMovement: @ 81B0E21 applymovement LAST_TALKED, TreeCutMovement @ tree cut animation waitmovement 0 - disappear LAST_TALKED @ tree disappears + removeobject LAST_TALKED @ tree disappears releaseall end @@ -86,7 +86,7 @@ S_UseRockSmash:: @ 81B0F01 DoRockSmashMovement: @ 81B0F0C applymovement LAST_TALKED, RockSmashMovement waitmovement 0 - disappear LAST_TALKED + removeobject LAST_TALKED specialvar RESULT, sub_810F5BC compare RESULT, 1 goto_if_eq DoRockSmashMovement_Done diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index b25bc12bd..078d6444f 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -21,7 +21,7 @@ VerdanturfTown_PokemonCenter_2F_MapScript2_1A3D03:: @ 81A3D03 .2byte 0 OldaleTown_PokemonCenter_2F_EventScript_1A3D2D:: @ 81A3D2D - spriteface 0x8007, 4 + turnobject 0x8007, 4 end DewfordTown_PokemonCenter_2F_MapScript1_1A3D32:: @ 81A3D32 @@ -233,7 +233,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3F5E:: @ 81A3F5E doorchange applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435F waitmovement 0 - spriteinvisible 255, 0, 0 + hideobject 255, 0, 0 setdoorclosed 5, 1 doorchange release @@ -398,7 +398,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4166:: @ 81A4166 doorchange applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435F waitmovement 0 - spriteinvisible 255, 0, 0 + hideobject 255, 0, 0 setdoorclosed 8, 1 doorchange release @@ -496,7 +496,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4294:: @ 81A4294 doorchange applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435F waitmovement 0 - spriteinvisible 255, 0, 0 + hideobject 255, 0, 0 setdoorclosed 11, 1 doorchange release diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index acf5597ea..10314c462 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -344,7 +344,7 @@ LinkContestRoom1_EventScript_1A5323:: @ 81A5323 applymovement 0x800b, LinkContestRoom1_Movement_1A5D9C waitmovement 0 releaseall - reappear 13 + addobject 13 playse 10 lockall applymovement 0x800b, LinkContestRoom1_Movement_1A5D9C @@ -724,7 +724,7 @@ LinkContestRoom1_EventScript_1A587F:: @ 81A587F LinkContestRoom1_EventScript_1A5880:: @ 81A5880 closebutton release - disappear 13 + removeobject 13 special sub_80C5164 switch 0x8006 case 0, LinkContestRoom1_EventScript_1A58BA diff --git a/data/scripts/magma_chimney.inc b/data/scripts/magma_chimney.inc index 01bdb7c31..998da7380 100644 --- a/data/scripts/magma_chimney.inc +++ b/data/scripts/magma_chimney.inc @@ -60,13 +60,13 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB closebutton delay 30 fadescreen 1 - disappear 2 - disappear 3 - disappear 22 + removeobject 2 + removeobject 3 + removeobject 22 setflag 926 fadescreen 0 movespriteperm 1, 10, 12 - reappear 1 + addobject 1 compare FACING, 4 call_if 1, MtChimney_EventScript_1B2D7D compare FACING, 2 @@ -83,7 +83,7 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB call_if 1, MtChimney_EventScript_1B2D93 compare FACING, 2 call_if 1, MtChimney_EventScript_1B2D9E - disappear 1 + removeobject 1 setflag 927 setflag 139 clearflag 928 diff --git a/data/scripts/maps/AncientTomb.inc b/data/scripts/maps/AncientTomb.inc index a0f00e877..5a0b4014a 100644 --- a/data/scripts/maps/AncientTomb.inc +++ b/data/scripts/maps/AncientTomb.inc @@ -10,7 +10,7 @@ AncientTomb_MapScript1_15EFCE:: @ 815EFCE end AncientTomb_EventScript_15EFD8:: @ 815EFD8 - disappear LAST_TALKED + removeobject LAST_TALKED return AncientTomb_MapScript1_15EFDC:: @ 815EFDC diff --git a/data/scripts/maps/AquaHideout_B1F.inc b/data/scripts/maps/AquaHideout_B1F.inc index cad8e7481..0001d7574 100644 --- a/data/scripts/maps/AquaHideout_B1F.inc +++ b/data/scripts/maps/AquaHideout_B1F.inc @@ -9,7 +9,7 @@ AquaHideout_B1F_MapScript1_15D83C:: @ 815D83C end AquaHideout_B1F_EventScript_15D846:: @ 815D846 - disappear LAST_TALKED + removeobject LAST_TALKED return AquaHideout_B1F_MapScript1_15D84A:: @ 815D84A diff --git a/data/scripts/maps/AquaHideout_B2F.inc b/data/scripts/maps/AquaHideout_B2F.inc index b08a68d1b..9fd81f121 100644 --- a/data/scripts/maps/AquaHideout_B2F.inc +++ b/data/scripts/maps/AquaHideout_B2F.inc @@ -59,7 +59,7 @@ AquaHideout_B2F_EventScript_15D8FD:: @ 815D8FD applymovement 0x8009, AquaHideout_B2F_Movement_15D95D .endif waitmovement 0 - disappear 0x8009 + removeobject 0x8009 delay 20 applymovement 0x8008, AquaHideout_B2F_Movement_1A0839 waitmovement 0 diff --git a/data/scripts/maps/BattleTower_BattleRoom.inc b/data/scripts/maps/BattleTower_BattleRoom.inc index bbc3360a8..3223deba4 100644 --- a/data/scripts/maps/BattleTower_BattleRoom.inc +++ b/data/scripts/maps/BattleTower_BattleRoom.inc @@ -13,7 +13,7 @@ BattleTower_BattleRoom_EventScript_1608EB:: @ 81608EB BattleTower_BattleRoom_EventScript_1608FA:: @ 81608FA special sub_81347F8 - reappear 1 + addobject 1 applymovement 1, BattleTower_BattleRoom_Movement_160AC0 waitmovement 0 special sub_8135474 @@ -45,7 +45,7 @@ BattleTower_BattleRoom_EventScript_160961:: @ 8160961 case 8, BattleTower_BattleRoom_EventScript_160A56 applymovement 1, BattleTower_BattleRoom_Movement_160AC6 waitmovement 0 - disappear 1 + removeobject 1 applymovement 2, BattleTower_BattleRoom_Movement_160ACB waitmovement 0 applymovement 255, BattleTower_BattleRoom_Movement_160ABC diff --git a/data/scripts/maps/BattleTower_Elevator.inc b/data/scripts/maps/BattleTower_Elevator.inc index fe55b50db..a147a3b5a 100644 --- a/data/scripts/maps/BattleTower_Elevator.inc +++ b/data/scripts/maps/BattleTower_Elevator.inc @@ -29,7 +29,7 @@ BattleTower_Elevator_MapScript2_160821:: @ 8160821 BattleTower_Elevator_EventScript_16082B:: @ 816082B setvar 0x4001, 1 - spriteface 255, 2 + turnobject 255, 2 end BattleTower_Elevator_Movement_160835:: @ 8160835 diff --git a/data/scripts/maps/BattleTower_Lobby.inc b/data/scripts/maps/BattleTower_Lobby.inc index 61b2da5e7..61ac04810 100644 --- a/data/scripts/maps/BattleTower_Lobby.inc +++ b/data/scripts/maps/BattleTower_Lobby.inc @@ -46,7 +46,7 @@ BattleTower_Lobby_MapScript2_1602EE:: @ 81602EE BattleTower_Lobby_EventScript_1602F8:: @ 81602F8 setvar 0x4001, 1 - spriteface 255, 2 + turnobject 255, 2 end BattleTower_Lobby_MapScript2_160302:: @ 8160302 diff --git a/data/scripts/maps/BattleTower_Outside.inc b/data/scripts/maps/BattleTower_Outside.inc index f577f39fa..53e693f71 100644 --- a/data/scripts/maps/BattleTower_Outside.inc +++ b/data/scripts/maps/BattleTower_Outside.inc @@ -67,7 +67,7 @@ BattleTower_Outside_EventScript_160232:: @ 8160232 applymovement LAST_TALKED, BattleTower_Outside_Movement_1A0845 waitmovement 0 delay 30 - spriteinvisible 5, 26, 4 + hideobject 5, 26, 4 setvar 0x8004, 4 call BattleTower_Outside_EventScript_1A047C return diff --git a/data/scripts/maps/CaveOfOrigin_B4F.inc b/data/scripts/maps/CaveOfOrigin_B4F.inc index dcd97f069..3b2e7802d 100644 --- a/data/scripts/maps/CaveOfOrigin_B4F.inc +++ b/data/scripts/maps/CaveOfOrigin_B4F.inc @@ -9,7 +9,7 @@ CaveOfOrigin_B4F_MapScript1_15DDB7:: @ 815DDB7 end CaveOfOrigin_B4F_EventScript_15DDC1:: @ 815DDC1 - disappear 1 + removeobject 1 return CaveOfOrigin_B4F_MapScript1_15DDC5:: @ 815DDC5 diff --git a/data/scripts/maps/DesertRuins.inc b/data/scripts/maps/DesertRuins.inc index d63398d78..b549cf127 100644 --- a/data/scripts/maps/DesertRuins.inc +++ b/data/scripts/maps/DesertRuins.inc @@ -10,7 +10,7 @@ DesertRuins_MapScript1_15CB03:: @ 815CB03 end DesertRuins_EventScript_15CB0D:: @ 815CB0D - disappear LAST_TALKED + removeobject LAST_TALKED return DesertRuins_MapScript1_15CB11:: @ 815CB11 diff --git a/data/scripts/maps/DewfordTown.inc b/data/scripts/maps/DewfordTown.inc index 09835c0b9..c8f20f4ac 100644 --- a/data/scripts/maps/DewfordTown.inc +++ b/data/scripts/maps/DewfordTown.inc @@ -122,24 +122,24 @@ DewfordTown_EventScript_14E151:: @ 814E151 spritelevelup 255, 0, 11, 0 applymovement 2, DewfordTown_Movement_14E40E waitmovement 0 - disappear 2 + removeobject 2 applymovement 255, DewfordTown_Movement_14E402 waitmovement 0 - spriteinvisible 255, 0, 11 + hideobject 255, 0, 11 call DewfordTown_EventScript_1A02E7 applymovement 4, DewfordTown_Movement_14E293 applymovement 255, DewfordTown_Movement_14E293 waitmovement 0 - spritevisible 255, 0, 19 + showobject 255, 0, 19 call DewfordTown_EventScript_1A02EF applymovement 255, DewfordTown_Movement_14E405 waitmovement 0 - spritevisible 255, 0, 19 + showobject 255, 0, 19 clearflag 739 clearflag 881 clearflag 742 setflag 743 - spriteinvisible 4, 0, 11 + hideobject 4, 0, 11 setvar 0x408e, 2 restorespritelevel 255, 0, 11 warp Route104_MrBrineysHouse, 255, 5, 4 @@ -154,28 +154,28 @@ DewfordTown_EventScript_14E1D8:: @ 814E1D8 spritelevelup 255, 0, 11, 1 applymovement 2, DewfordTown_Movement_14E40E waitmovement 0 - disappear 2 + removeobject 2 applymovement 255, DewfordTown_Movement_14E402 waitmovement 0 - spriteinvisible 255, 0, 11 + hideobject 255, 0, 11 call DewfordTown_EventScript_1A02E7 applymovement 4, DewfordTown_Movement_14E356 applymovement 255, DewfordTown_Movement_14E356 waitmovement 0 call DewfordTown_EventScript_1A02EF - spritevisible 255, 0, 24 + showobject 255, 0, 24 applymovement 255, DewfordTown_Movement_14E409 waitmovement 0 movespriteperm 2, 21, 26 - reappear 2 + addobject 2 spritelevelup 2, 0, 24, 0 applymovement 2, DewfordTown_Movement_14E410 waitmovement 0 clearflag 741 - reappear 1 + addobject 1 clearflag 744 setflag 743 - spriteinvisible 4, 0, 11 + hideobject 4, 0, 11 checkflag 149 call_if 0, DewfordTown_EventScript_14E281 checkflag 149 diff --git a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc index 669da34f9..adfbca1bf 100644 --- a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc +++ b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc @@ -13,7 +13,7 @@ EverGrandeCity_ChampionsRoom_MapScript2_15B7C5:: @ 815B7C5 .2byte 0 EverGrandeCity_ChampionsRoom_EventScript_15B7CF:: @ 815B7CF - spriteface 255, 2 + turnobject 255, 2 end EverGrandeCity_ChampionsRoom_MapScript2_15B7D4:: @ 815B7D4 @@ -57,7 +57,7 @@ EverGrandeCity_ChampionsRoom_EventScript_15B821:: @ 815B821 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B87C compare RESULT, 1 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B881 - reappear 2 + addobject 2 call EverGrandeCity_ChampionsRoom_EventScript_15B9BD checkgender compare RESULT, 0 @@ -102,7 +102,7 @@ EverGrandeCity_ChampionsRoom_EventScript_15B8BB:: @ 815B8BB EverGrandeCity_ChampionsRoom_EventScript_15B8F0:: @ 815B8F0 closebutton - reappear 3 + addobject 3 applymovement 3, EverGrandeCity_ChampionsRoom_Movement_15BA03 waitmovement 0 applymovement 255, EverGrandeCity_ChampionsRoom_Movement_1A0843 diff --git a/data/scripts/maps/EverGrandeCity_Corridor1.inc b/data/scripts/maps/EverGrandeCity_Corridor1.inc index 499ad673f..104504960 100644 --- a/data/scripts/maps/EverGrandeCity_Corridor1.inc +++ b/data/scripts/maps/EverGrandeCity_Corridor1.inc @@ -7,5 +7,5 @@ EverGrandeCity_Corridor1_MapScript2_15BA12:: @ 815BA12 .2byte 0 EverGrandeCity_Corridor1_EventScript_15BA1C:: @ 815BA1C - spriteface 255, 2 + turnobject 255, 2 end diff --git a/data/scripts/maps/EverGrandeCity_Corridor2.inc b/data/scripts/maps/EverGrandeCity_Corridor2.inc index 692de1ed9..c7c049020 100644 --- a/data/scripts/maps/EverGrandeCity_Corridor2.inc +++ b/data/scripts/maps/EverGrandeCity_Corridor2.inc @@ -7,5 +7,5 @@ EverGrandeCity_Corridor2_MapScript2_15BA27:: @ 815BA27 .2byte 0 EverGrandeCity_Corridor2_EventScript_15BA31:: @ 815BA31 - spriteface 255, 2 + turnobject 255, 2 end diff --git a/data/scripts/maps/EverGrandeCity_Corridor3.inc b/data/scripts/maps/EverGrandeCity_Corridor3.inc index f8ed19669..1714db5cc 100644 --- a/data/scripts/maps/EverGrandeCity_Corridor3.inc +++ b/data/scripts/maps/EverGrandeCity_Corridor3.inc @@ -7,5 +7,5 @@ EverGrandeCity_Corridor3_MapScript2_15BA3C:: @ 815BA3C .2byte 0 EverGrandeCity_Corridor3_EventScript_15BA46:: @ 815BA46 - spriteface 255, 2 + turnobject 255, 2 end diff --git a/data/scripts/maps/EverGrandeCity_Corridor4.inc b/data/scripts/maps/EverGrandeCity_Corridor4.inc index 616a25ec5..64cc234eb 100644 --- a/data/scripts/maps/EverGrandeCity_Corridor4.inc +++ b/data/scripts/maps/EverGrandeCity_Corridor4.inc @@ -7,5 +7,5 @@ EverGrandeCity_Corridor4_MapScript2_15BA51:: @ 815BA51 .2byte 0 EverGrandeCity_Corridor4_EventScript_15BA5B:: @ 815BA5B - spriteface 255, 2 + turnobject 255, 2 end diff --git a/data/scripts/maps/EverGrandeCity_Corridor5.inc b/data/scripts/maps/EverGrandeCity_Corridor5.inc index 783b03aec..73c0b5a84 100644 --- a/data/scripts/maps/EverGrandeCity_Corridor5.inc +++ b/data/scripts/maps/EverGrandeCity_Corridor5.inc @@ -7,5 +7,5 @@ EverGrandeCity_Corridor5_MapScript2_15BA66:: @ 815BA66 .2byte 0 EverGrandeCity_Corridor5_EventScript_15BA70:: @ 815BA70 - spriteface 255, 2 + turnobject 255, 2 end diff --git a/data/scripts/maps/EverGrandeCity_DrakesRoom.inc b/data/scripts/maps/EverGrandeCity_DrakesRoom.inc index ee171824f..3d3d56ff9 100644 --- a/data/scripts/maps/EverGrandeCity_DrakesRoom.inc +++ b/data/scripts/maps/EverGrandeCity_DrakesRoom.inc @@ -9,7 +9,7 @@ EverGrandeCity_DrakesRoom_MapScripts:: @ 815B70D .2byte 0 EverGrandeCity_DrakesRoom_EventScript_15B727:: @ 815B727 - spriteface 255, 2 + turnobject 255, 2 end EverGrandeCity_DrakesRoom_MapScript2_15B72C:: @ 815B72C diff --git a/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc b/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc index 8ebf7939f..07f6e8877 100644 --- a/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc +++ b/data/scripts/maps/EverGrandeCity_GlaciasRoom.inc @@ -9,7 +9,7 @@ EverGrandeCity_GlaciasRoom_MapScript2_15B683:: @ 815B683 .2byte 0 EverGrandeCity_GlaciasRoom_EventScript_15B68D:: @ 815B68D - spriteface 255, 2 + turnobject 255, 2 end EverGrandeCity_GlaciasRoom_MapScript2_15B692:: @ 815B692 diff --git a/data/scripts/maps/EverGrandeCity_HallOfFame.inc b/data/scripts/maps/EverGrandeCity_HallOfFame.inc index d0fb7922f..523a337cc 100644 --- a/data/scripts/maps/EverGrandeCity_HallOfFame.inc +++ b/data/scripts/maps/EverGrandeCity_HallOfFame.inc @@ -8,7 +8,7 @@ EverGrandeCity_HallOfFame_MapScript2_15BB8F:: @ 815BB8F .2byte 0 EverGrandeCity_HallOfFame_EventScript_15BB99:: @ 815BB99 - spriteface 255, 2 + turnobject 255, 2 end EverGrandeCity_HallOfFame_MapScript2_15BB9E:: @ 815BB9E diff --git a/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc b/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc index b8fe90a01..b7c1618ba 100644 --- a/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc +++ b/data/scripts/maps/EverGrandeCity_PhoebesRoom.inc @@ -9,7 +9,7 @@ EverGrandeCity_PhoebesRoom_MapScript2_15B5E9:: @ 815B5E9 .2byte 0 EverGrandeCity_PhoebesRoom_EventScript_15B5F3:: @ 815B5F3 - spriteface 255, 2 + turnobject 255, 2 end EverGrandeCity_PhoebesRoom_MapScript2_15B5F8:: @ 815B5F8 diff --git a/data/scripts/maps/EverGrandeCity_SidneysRoom.inc b/data/scripts/maps/EverGrandeCity_SidneysRoom.inc index 3f472ca3f..daca98176 100644 --- a/data/scripts/maps/EverGrandeCity_SidneysRoom.inc +++ b/data/scripts/maps/EverGrandeCity_SidneysRoom.inc @@ -25,7 +25,7 @@ EverGrandeCity_SidneysRoom_MapScript2_15B570:: @ 815B570 .2byte 0 EverGrandeCity_SidneysRoom_EventScript_15B57A:: @ 815B57A - spriteface 255, 2 + turnobject 255, 2 end EverGrandeCity_SidneysRoom_MapScript2_15B57F:: @ 815B57F diff --git a/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc b/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc index abe0ac7c6..3b33c5a41 100644 --- a/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc +++ b/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc @@ -47,7 +47,7 @@ FallarborTown_PokemonCenter_1F_EventScript_153B59:: @ 8153B59 FallarborTown_PokemonCenter_1F_EventScript_153B69:: @ 8153B69 playse 18 - disappear 4 + removeobject 4 clearflag 870 release end diff --git a/data/scripts/maps/FortreeCity.inc b/data/scripts/maps/FortreeCity.inc index e0bac8007..a7c548b1f 100644 --- a/data/scripts/maps/FortreeCity.inc +++ b/data/scripts/maps/FortreeCity.inc @@ -81,7 +81,7 @@ FortreeCity_EventScript_14C9E4:: @ 814C9E4 waitpokecry applymovement LAST_TALKED, FortreeCity_Movement_14CA13 waitmovement 0 - disappear LAST_TALKED + removeobject LAST_TALKED setflag 295 release end diff --git a/data/scripts/maps/FortreeCity_House4.inc b/data/scripts/maps/FortreeCity_House4.inc index f7f8391d4..f90c080f8 100644 --- a/data/scripts/maps/FortreeCity_House4.inc +++ b/data/scripts/maps/FortreeCity_House4.inc @@ -19,7 +19,7 @@ FortreeCity_House4_EventScript_158188:: @ 8158188 clearflag 934 applymovement 3, FortreeCity_House4_Movement_158218 waitmovement 0 - disappear 3 + removeobject 3 releaseall end diff --git a/data/scripts/maps/GraniteCave_StevensRoom.inc b/data/scripts/maps/GraniteCave_StevensRoom.inc index 06f234f28..9afe54091 100644 --- a/data/scripts/maps/GraniteCave_StevensRoom.inc +++ b/data/scripts/maps/GraniteCave_StevensRoom.inc @@ -23,7 +23,7 @@ GraniteCave_StevensRoom_EventScript_15CBFA:: @ 815CBFA compare FACING, 4 call_if 1, GraniteCave_StevensRoom_EventScript_15CC6D playse 9 - disappear 1 + removeobject 1 release end diff --git a/data/scripts/maps/IslandCave.inc b/data/scripts/maps/IslandCave.inc index 06524f95e..b59500625 100644 --- a/data/scripts/maps/IslandCave.inc +++ b/data/scripts/maps/IslandCave.inc @@ -10,7 +10,7 @@ IslandCave_MapScript1_15EEC6:: @ 815EEC6 end IslandCave_EventScript_15EED0:: @ 815EED0 - disappear LAST_TALKED + removeobject LAST_TALKED return IslandCave_MapScript1_15EED4:: @ 815EED4 diff --git a/data/scripts/maps/LavaridgeTown.inc b/data/scripts/maps/LavaridgeTown.inc index d24280efa..afad309a9 100644 --- a/data/scripts/maps/LavaridgeTown.inc +++ b/data/scripts/maps/LavaridgeTown.inc @@ -31,7 +31,7 @@ LavaridgeTown_EventScript_14E4ED:: @ 814E4ED setvar 0x8008, 1 setdooropened 12, 15 doorchange - reappear 8 + addobject 8 applymovement 8, LavaridgeTown_Movement_14E70E waitmovement 0 setdoorclosed 12, 15 @@ -103,14 +103,14 @@ LavaridgeTown_EventScript_14E5F5:: @ 814E5F5 call_if 1, LavaridgeTown_EventScript_14E646 compare 0x8008, 0 call_if 1, LavaridgeTown_EventScript_14E64E - disappear 8 - reappear 7 + removeobject 8 + addobject 7 delay 30 compare 0x8008, 1 call_if 1, LavaridgeTown_EventScript_14E69A compare 0x8008, 0 call_if 1, LavaridgeTown_EventScript_14E6A5 - disappear 7 + removeobject 7 setvar 0x4053, 2 savebgm 0 fadedefaultbgm diff --git a/data/scripts/maps/LilycoveCity.inc b/data/scripts/maps/LilycoveCity.inc index 7031eb530..af353e824 100644 --- a/data/scripts/maps/LilycoveCity.inc +++ b/data/scripts/maps/LilycoveCity.inc @@ -418,7 +418,7 @@ LilycoveCity_EventScript_14CF6B:: @ 814CF6B setanimation 0, 1 doanimation 30 delay 15 - disappear LAST_TALKED + removeobject LAST_TALKED checkanimation 30 savebgm 0 fadedefaultbgm diff --git a/data/scripts/maps/LilycoveCity_ContestLobby.inc b/data/scripts/maps/LilycoveCity_ContestLobby.inc index 1020e9d2b..7746eac01 100644 --- a/data/scripts/maps/LilycoveCity_ContestLobby.inc +++ b/data/scripts/maps/LilycoveCity_ContestLobby.inc @@ -20,7 +20,7 @@ LilycoveCity_ContestLobby_EventScript_158889:: @ 8158889 LilycoveCity_ContestLobby_EventScript_158898:: @ 8158898 lockall - reappear 4 + addobject 4 applymovement 4, LilycoveCity_ContestLobby_Movement_158A3B waitmovement 4 applymovement 255, LilycoveCity_ContestLobby_Movement_158A4C @@ -48,7 +48,7 @@ LilycoveCity_ContestLobby_EventScript_1588DE:: @ 81588DE call_if 1, LilycoveCity_ContestLobby_EventScript_158948 applymovement 4, LilycoveCity_ContestLobby_Movement_158A43 waitmovement 0 - disappear 4 + removeobject 4 call LilycoveCity_ContestLobby_EventScript_158994 call LilycoveCity_ContestLobby_EventScript_1589EA releaseall @@ -63,7 +63,7 @@ LilycoveCity_ContestLobby_EventScript_158918:: @ 8158918 applymovement 4, LilycoveCity_ContestLobby_Movement_158A43 waitmovement 0 setvar 0x4099, 0 - disappear 4 + removeobject 4 releaseall end @@ -195,7 +195,7 @@ LilycoveCity_ContestLobby_EventScript_158A5B:: @ 8158A5B LilycoveCity_ContestLobby_EventScript_158A6A:: @ 8158A6A lockall - reappear 11 + addobject 11 applymovement 11, LilycoveCity_ContestLobby_Movement_158B64 waitmovement 11 applymovement 255, LilycoveCity_ContestLobby_Movement_158B76 @@ -221,7 +221,7 @@ LilycoveCity_ContestLobby_EventScript_158AAE:: @ 8158AAE call_if 1, LilycoveCity_ContestLobby_EventScript_158B18 applymovement 11, LilycoveCity_ContestLobby_Movement_158B6D waitmovement 0 - disappear 11 + removeobject 11 call LilycoveCity_ContestLobby_EventScript_158994 call LilycoveCity_ContestLobby_EventScript_1589EA releaseall @@ -236,7 +236,7 @@ LilycoveCity_ContestLobby_EventScript_158AE8:: @ 8158AE8 applymovement 11, LilycoveCity_ContestLobby_Movement_158B6D waitmovement 0 setvar 0x4099, 0 - disappear 11 + removeobject 11 releaseall end diff --git a/data/scripts/maps/LilycoveCity_Harbor.inc b/data/scripts/maps/LilycoveCity_Harbor.inc index 94b2d53a9..cbcac6f6e 100644 --- a/data/scripts/maps/LilycoveCity_Harbor.inc +++ b/data/scripts/maps/LilycoveCity_Harbor.inc @@ -79,13 +79,13 @@ LilycoveCity_Harbor_EventScript_15998A:: @ 815998A applymovement LAST_TALKED, LilycoveCity_Harbor_Movement_1A0841 waitmovement 0 delay 30 - spriteinvisible LAST_TALKED, 13, 10 + hideobject LAST_TALKED, 13, 10 compare FACING, 2 call_if 1, LilycoveCity_Harbor_EventScript_1599D9 compare FACING, 4 call_if 1, LilycoveCity_Harbor_EventScript_1599CE delay 30 - spriteinvisible 255, 0, 0 + hideobject 255, 0, 0 setvar 0x8004, 2 call LilycoveCity_Harbor_EventScript_1A040E return @@ -117,9 +117,9 @@ LilycoveCity_Harbor_EventScript_1599EE:: @ 81599EE applymovement LAST_TALKED, LilycoveCity_Harbor_Movement_1A0841 waitmovement 0 delay 30 - spriteinvisible LAST_TALKED, 13, 10 + hideobject LAST_TALKED, 13, 10 delay 60 - reappear 4 + addobject 4 delay 30 applymovement 4, LilycoveCity_Harbor_Movement_1A0839 waitmovement 0 @@ -128,13 +128,13 @@ LilycoveCity_Harbor_EventScript_1599EE:: @ 81599EE applymovement 4, LilycoveCity_Harbor_Movement_1A0841 waitmovement 0 delay 30 - disappear 4 + removeobject 4 compare FACING, 2 call_if 1, LilycoveCity_Harbor_EventScript_1599D9 compare FACING, 4 call_if 1, LilycoveCity_Harbor_EventScript_1599CE delay 30 - spriteinvisible 255, 0, 0 + hideobject 255, 0, 0 special ScrSpecial_HealPlayerParty setvar 0x8004, 2 call LilycoveCity_Harbor_EventScript_1A040E diff --git a/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc b/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc index db55695e6..548c80a96 100644 --- a/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc +++ b/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc @@ -38,7 +38,7 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_158481:: @ 8158481 msgbox LilycoveCity_LilycoveMuseum_1F_Text_187534, 3 applymovement 2, LilycoveCity_LilycoveMuseum_1F_Movement_1584FC waitmovement 0 - disappear 2 + removeobject 2 switch FACING case 2, LilycoveCity_LilycoveMuseum_1F_EventScript_1584BD case 3, LilycoveCity_LilycoveMuseum_1F_EventScript_1584D2 diff --git a/data/scripts/maps/LittlerootTown.inc b/data/scripts/maps/LittlerootTown.inc index 0f1dc96d9..06508fd02 100644 --- a/data/scripts/maps/LittlerootTown.inc +++ b/data/scripts/maps/LittlerootTown.inc @@ -104,7 +104,7 @@ LittlerootTown_EventScript_14D62B:: @ 814D62B waitmovement 0 setdooropened 0x8004, 0x8005 doorchange - reappear 4 + addobject 4 applymovement 4, LittlerootTown_Movement_14D6AC waitmovement 0 setdoorclosed 0x8004, 0x8005 @@ -124,7 +124,7 @@ LittlerootTown_EventScript_14D62B:: @ 814D62B waitmovement 0 setflag 752 setvar 0x4092, 3 - spriteinvisible 255, 0, 0 + hideobject 255, 0, 0 setdoorclosed 0x8004, 0x8005 doorchange clearflag 868 @@ -370,14 +370,14 @@ LittlerootTown_EventScript_14D857:: @ 814D857 LittlerootTown_EventScript_14D860:: @ 814D860 lockall setvar 0x8008, 0 - movesprite 4, 10, 9 + setobjectxy 4, 10, 9 goto LittlerootTown_EventScript_14D8B6 end LittlerootTown_EventScript_14D873:: @ 814D873 lockall setvar 0x8008, 1 - movesprite 4, 11, 9 + setobjectxy 4, 11, 9 goto LittlerootTown_EventScript_14D8B6 end @@ -599,7 +599,7 @@ LittlerootTown_EventScript_14DB46:: @ 814DB46 doorchange applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 - spriteinvisible 4, 0, 9 + hideobject 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return @@ -611,7 +611,7 @@ LittlerootTown_EventScript_14DB6C:: @ 814DB6C doorchange applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 - spriteinvisible 4, 0, 9 + hideobject 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return @@ -623,7 +623,7 @@ LittlerootTown_EventScript_14DB92:: @ 814DB92 doorchange applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 - spriteinvisible 4, 0, 9 + hideobject 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return @@ -635,7 +635,7 @@ LittlerootTown_EventScript_14DBB8:: @ 814DBB8 doorchange applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 - spriteinvisible 4, 0, 9 + hideobject 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return @@ -647,7 +647,7 @@ LittlerootTown_EventScript_14DBDE:: @ 814DBDE doorchange applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 - spriteinvisible 4, 0, 9 + hideobject 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return @@ -659,7 +659,7 @@ LittlerootTown_EventScript_14DC04:: @ 814DC04 doorchange applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 - spriteinvisible 4, 0, 9 + hideobject 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return @@ -671,7 +671,7 @@ LittlerootTown_EventScript_14DC2A:: @ 814DC2A doorchange applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 - spriteinvisible 4, 0, 9 + hideobject 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return @@ -683,7 +683,7 @@ LittlerootTown_EventScript_14DC50:: @ 814DC50 doorchange applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 - spriteinvisible 4, 0, 9 + hideobject 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange return @@ -853,14 +853,14 @@ LittlerootTown_EventScript_14DCE2:: @ 814DCE2 doorchange applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 - spriteinvisible 4, 0, 9 + hideobject 4, 0, 9 setdoorclosed 0x8009, 0x800a doorchange goto LittlerootTown_EventScript_14DD2B end LittlerootTown_EventScript_14DD2B:: @ 814DD2B - disappear 4 + removeobject 4 setflag 2144 setvar 0x4050, 4 release diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc index 712bebf03..84fb4e69b 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc @@ -38,7 +38,7 @@ LittlerootTown_MaysHouse_2F_EventScript_152A9D:: @ 8152A9D compare RESULT, 1 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B4A playse 9 - disappear LAST_TALKED + removeobject LAST_TALKED setvar 0x408d, 3 setvar 0x4050, 1 savebgm 0 diff --git a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc index 834ae8521..7e3386d7a 100644 --- a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc +++ b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc @@ -14,7 +14,7 @@ LittlerootTown_ProfessorBirchsLab_MapScript2_152C9D:: @ 8152C9D .2byte 0 LittlerootTown_ProfessorBirchsLab_EventScript_152CA7:: @ 8152CA7 - spriteface 255, 2 + turnobject 255, 2 end LittlerootTown_ProfessorBirchsLab_MapScript2_152CAC:: @ 8152CAC diff --git a/data/scripts/maps/MagmaHideout_B1F.inc b/data/scripts/maps/MagmaHideout_B1F.inc index 63364c6e5..780eea4f5 100644 --- a/data/scripts/maps/MagmaHideout_B1F.inc +++ b/data/scripts/maps/MagmaHideout_B1F.inc @@ -8,5 +8,5 @@ MagmaHideout_B1F_MapScript1_15F2AE:: @ 815F2AE end MagmaHideout_B1F_EventScript_15F2B8:: @ 815F2B8 - disappear LAST_TALKED + removeobject LAST_TALKED return diff --git a/data/scripts/maps/MauvilleCity.inc b/data/scripts/maps/MauvilleCity.inc index 5dd9983f4..da406e2f7 100644 --- a/data/scripts/maps/MauvilleCity.inc +++ b/data/scripts/maps/MauvilleCity.inc @@ -154,8 +154,8 @@ MauvilleCity_EventScript_14C1D9:: @ 814C1D9 end MauvilleCity_EventScript_14C22B:: @ 814C22B - disappear 6 - disappear 7 + removeobject 6 + removeobject 7 clearflag 806 clearflag 809 setflag 190 diff --git a/data/scripts/maps/MeteorFalls_1F_1R.inc b/data/scripts/maps/MeteorFalls_1F_1R.inc index 8d78d1496..c7aa8fb10 100644 --- a/data/scripts/maps/MeteorFalls_1F_1R.inc +++ b/data/scripts/maps/MeteorFalls_1F_1R.inc @@ -33,9 +33,9 @@ MeteorFalls_1F_1R_EventScript_15C49C:: @ 815C49C applymovement 5, MeteorFalls_1F_1R_Movement_1A083F applymovement 6, MeteorFalls_1F_1R_Movement_1A083F waitmovement 0 - reappear 7 - reappear 8 - reappear 9 + addobject 7 + addobject 8 + addobject 9 applymovement 7, MeteorFalls_1F_1R_Movement_15C608 applymovement 8, MeteorFalls_1F_1R_Movement_15C60F applymovement 9, MeteorFalls_1F_1R_Movement_15C617 @@ -49,8 +49,8 @@ MeteorFalls_1F_1R_EventScript_15C49C:: @ 815C49C applymovement 5, MeteorFalls_1F_1R_Movement_15C5F1 applymovement 6, MeteorFalls_1F_1R_Movement_15C5FC waitmovement 0 - disappear 5 - disappear 6 + removeobject 5 + removeobject 6 applymovement 7, MeteorFalls_1F_1R_Movement_15C628 waitmovement 0 .ifdef SAPPHIRE @@ -74,9 +74,9 @@ MeteorFalls_1F_1R_EventScript_15C49C:: @ 815C49C applymovement 8, MeteorFalls_1F_1R_Movement_15C62E applymovement 9, MeteorFalls_1F_1R_Movement_15C63E waitmovement 0 - disappear 7 - disappear 8 - disappear 9 + removeobject 7 + removeobject 8 + removeobject 9 setflag 819 setvar 0x40bf, 1 releaseall diff --git a/data/scripts/maps/MossdeepCity_House2.inc b/data/scripts/maps/MossdeepCity_House2.inc index b8388376a..c34eb9391 100644 --- a/data/scripts/maps/MossdeepCity_House2.inc +++ b/data/scripts/maps/MossdeepCity_House2.inc @@ -23,7 +23,7 @@ MossdeepCity_House2_EventScript_15A87B:: @ 815A87B call_if 1, MossdeepCity_House2_EventScript_15A8AE compare FACING, 3 call_if 1, MossdeepCity_House2_EventScript_15A8B9 - disappear 3 + removeobject 3 release end diff --git a/data/scripts/maps/MossdeepCity_StevensHouse.inc b/data/scripts/maps/MossdeepCity_StevensHouse.inc index aebb51c9c..8648487c9 100644 --- a/data/scripts/maps/MossdeepCity_StevensHouse.inc +++ b/data/scripts/maps/MossdeepCity_StevensHouse.inc @@ -78,7 +78,7 @@ MossdeepCity_StevensHouse_EventScript_15AA7C:: @ 815AA7C compare RESULT, 6 goto_if_eq MossdeepCity_StevensHouse_EventScript_15AADC copyvar 0x8004, RESULT - disappear 2 + removeobject 2 playfanfare 370 message MossdeepCity_StevensHouse_Text_18DD61 waitfanfare diff --git a/data/scripts/maps/MtPyre_Summit.inc b/data/scripts/maps/MtPyre_Summit.inc index e60c40cae..8720375ae 100644 --- a/data/scripts/maps/MtPyre_Summit.inc +++ b/data/scripts/maps/MtPyre_Summit.inc @@ -43,10 +43,10 @@ MtPyre_Summit_EventScript_15D4E1:: @ 815D4E1 .endif closebutton fadescreen 1 - disappear 2 - disappear 4 - disappear 5 - disappear 6 + removeobject 2 + removeobject 4 + removeobject 5 + removeobject 6 setflag 916 setflag 917 fadescreen 0 @@ -286,7 +286,7 @@ MtPyre_Summit_EventScript_15D6F2:: @ 815D6F2 call_if 1, MtPyre_Summit_EventScript_15D78A compare 0x8008, 2 call_if 1, MtPyre_Summit_EventScript_15D795 - disappear 2 + removeobject 2 setvar 0x40b9, 3 releaseall end diff --git a/data/scripts/maps/NewMauville_Inside.inc b/data/scripts/maps/NewMauville_Inside.inc index ef016f261..0627fc53b 100644 --- a/data/scripts/maps/NewMauville_Inside.inc +++ b/data/scripts/maps/NewMauville_Inside.inc @@ -14,7 +14,7 @@ NewMauville_Inside_MapScript1_15E56F:: @ 815E56F end NewMauville_Inside_EventScript_15E58F:: @ 815E58F - disappear LAST_TALKED + removeobject LAST_TALKED return NewMauville_Inside_MapScript1_15E593:: @ 815E593 diff --git a/data/scripts/maps/OldaleTown.inc b/data/scripts/maps/OldaleTown.inc index 0ece240c6..412261ce1 100644 --- a/data/scripts/maps/OldaleTown.inc +++ b/data/scripts/maps/OldaleTown.inc @@ -277,7 +277,7 @@ OldaleTown_EventScript_14DFC6:: @ 814DFC6 closebutton applymovement 4, OldaleTown_Movement_14DFE5 waitmovement 0 - disappear 4 + removeobject 4 setvar 0x40c7, 2 setflag 979 releaseall diff --git a/data/scripts/maps/PetalburgCity_Gym.inc b/data/scripts/maps/PetalburgCity_Gym.inc index 1eff4d6c4..3ac7b85fc 100644 --- a/data/scripts/maps/PetalburgCity_Gym.inc +++ b/data/scripts/maps/PetalburgCity_Gym.inc @@ -69,7 +69,7 @@ PetalburgCity_Gym_MapScript2_154553:: @ 8154553 .2byte 0 PetalburgCity_Gym_EventScript_15455D:: @ 815455D - spriteface 255, 2 + turnobject 255, 2 end PetalburgCity_Gym_MapScript2_154562:: @ 8154562 @@ -85,7 +85,7 @@ PetalburgCity_Gym_EventScript_15456C:: @ 815456C applymovement 10, PetalburgCity_Gym_Movement_1545B4 waitmovement 0 playse 9 - disappear 10 + removeobject 10 setflag 726 delay 30 applymovement 255, PetalburgCity_Gym_Movement_1A0841 @@ -142,7 +142,7 @@ PetalburgCity_Gym_EventScript_15465E:: @ 815465E end PetalburgCity_Gym_EventScript_154669:: @ 8154669 - reappear 10 + addobject 10 playse 8 compare 0x8008, 0 call_if 1, PetalburgCity_Gym_EventScript_1547EE @@ -204,7 +204,7 @@ PetalburgCity_Gym_EventScript_154669:: @ 8154669 call_if 1, PetalburgCity_Gym_EventScript_154860 compare 0x8008, 3 call_if 1, PetalburgCity_Gym_EventScript_154872 - disappear 10 + removeobject 10 setflag 728 setvar 0x4085, 1 setvar 0x4057, 2 diff --git a/data/scripts/maps/PetalburgWoods.inc b/data/scripts/maps/PetalburgWoods.inc index 48eb53a50..4dececafa 100644 --- a/data/scripts/maps/PetalburgWoods.inc +++ b/data/scripts/maps/PetalburgWoods.inc @@ -86,7 +86,7 @@ PetalburgWoods_EventScript_15CDFA:: @ 815CDFA closebutton applymovement 3, PetalburgWoods_Movement_15CEB7 waitmovement 0 - disappear 3 + removeobject 3 applymovement 255, PetalburgWoods_Movement_1A0845 waitmovement 0 msgbox PetalburgWoods_Text_19507E, 4 @@ -110,7 +110,7 @@ PetalburgWoods_EventScript_15CE4D:: @ 815CE4D return PetalburgWoods_EventScript_15CE69:: @ 815CE69 - disappear 4 + removeobject 4 setvar 0x4098, 1 releaseall end diff --git a/data/scripts/maps/Route101.inc b/data/scripts/maps/Route101.inc index 35fbaf744..35c2d4117 100644 --- a/data/scripts/maps/Route101.inc +++ b/data/scripts/maps/Route101.inc @@ -21,8 +21,8 @@ Route101_EventScript_14E948:: @ 814E948 playbgm 410, 1 msgbox Route101_Text_16D10E, 4 closebutton - movesprite 2, 0, 15 - movesprite 4, 0, 16 + setobjectxy 2, 0, 15 + setobjectxy 4, 0, 16 applymovement 255, Route101_Movement_14EA2C applymovement 2, Route101_Movement_14EA50 applymovement 4, Route101_Movement_14EA1F @@ -220,8 +220,8 @@ Route101_EventScript_14EA7F:: @ 814EA7F setflag 2048 setflag 82 fadescreen 1 - disappear 4 - movesprite 255, 6, 13 + removeobject 4 + setobjectxy 255, 6, 13 applymovement 255, Route101_Movement_1A083F waitmovement 0 special ScrSpecial_ChooseStarter diff --git a/data/scripts/maps/Route103.inc b/data/scripts/maps/Route103.inc index b46545050..e5cf156a1 100644 --- a/data/scripts/maps/Route103.inc +++ b/data/scripts/maps/Route103.inc @@ -116,7 +116,7 @@ Route103_EventScript_14ED29:: @ 814ED29 end Route103_EventScript_14ED46:: @ 814ED46 - disappear 2 + removeobject 2 setvar 0x4062, 1 setvar 0x4084, 4 clearflag 889 diff --git a/data/scripts/maps/Route104.inc b/data/scripts/maps/Route104.inc index c954ac972..8abb7354a 100644 --- a/data/scripts/maps/Route104.inc +++ b/data/scripts/maps/Route104.inc @@ -128,10 +128,10 @@ Route104_EventScript_14EFD5:: @ 814EFD5 spritelevelup 255, 0, 19, 0 applymovement 8, Route104_Movement_14F16C waitmovement 0 - disappear 8 + removeobject 8 applymovement 255, Route104_Movement_14F162 waitmovement 0 - spriteinvisible 255, 0, 19 + hideobject 255, 0, 19 call Route104_EventScript_1A02E7 applymovement 7, Route104_Movement_14F09F applymovement 255, Route104_Movement_14F09F @@ -139,20 +139,20 @@ Route104_EventScript_14EFD5:: @ 814EFD5 applymovement 255, Route104_Movement_14F166 waitmovement 0 call Route104_EventScript_1A02EF - spritevisible 255, 0, 11 + showobject 255, 0, 11 applymovement 255, Route104_Movement_14F168 waitmovement 0 movespriteperm 2, 12, 8 - reappear 2 + addobject 2 spritelevelup 2, 0, 11, 0 clearflag 740 applymovement 2, Route104_Movement_14F16F waitmovement 0 - reappear 4 + addobject 4 clearflag 743 call Route104_EventScript_1A02EF setflag 742 - spriteinvisible 7, 0, 19 + hideobject 7, 0, 19 copyvar 0x4096, 0x8008 restorespritelevel 255, 0, 19 restorespritelevel 2, 0, 11 diff --git a/data/scripts/maps/Route109.inc b/data/scripts/maps/Route109.inc index 45ff1d3ed..7b13fef72 100644 --- a/data/scripts/maps/Route109.inc +++ b/data/scripts/maps/Route109.inc @@ -7,7 +7,7 @@ Route109_EventScript_14F4D3:: @ 814F4D3 spritelevelup 255, 0, 24, 0 applymovement 2, Route109_Movement_14F67B waitmovement 0 - disappear 2 + removeobject 2 switch FACING case 1, Route109_EventScript_14F518 case 3, Route109_EventScript_14F538 @@ -33,25 +33,25 @@ Route109_EventScript_14F538:: @ 814F538 end Route109_EventScript_14F548:: @ 814F548 - spriteinvisible 255, 0, 24 + hideobject 255, 0, 24 call Route109_EventScript_1A02E7 applymovement 1, Route109_Movement_14F5BF applymovement 255, Route109_Movement_14F5BF waitmovement 0 call Route109_EventScript_1A02EF - spritevisible 255, 0, 11 + showobject 255, 0, 11 applymovement 255, Route109_Movement_14F670 waitmovement 0 - reappear 4 + addobject 4 clearflag 743 movespriteperm 2, 12, 8 - reappear 2 + addobject 2 spritelevelup 2, 0, 11, 0 applymovement 2, Route109_Movement_14F67D waitmovement 0 clearflag 740 setflag 744 - spriteinvisible 1, 0, 24 + hideobject 1, 0, 24 msgbox Route109_Text_16B4B5, 4 closebutton copyvar 0x4096, 0x8008 diff --git a/data/scripts/maps/Route110.inc b/data/scripts/maps/Route110.inc index 56d4ff196..194816c36 100644 --- a/data/scripts/maps/Route110.inc +++ b/data/scripts/maps/Route110.inc @@ -433,8 +433,8 @@ Route110_EventScript_14FEB2:: @ 814FEB2 call_if 1, Route110_EventScript_14FF66 spritebehave 28, 10 spritebehave 29, 10 - disappear 28 - reappear 29 + removeobject 28 + addobject 29 delay 45 compare 0x8008, 1 call_if 1, Route110_EventScript_14FF35 @@ -442,7 +442,7 @@ Route110_EventScript_14FEB2:: @ 814FEB2 call_if 1, Route110_EventScript_14FF40 compare 0x8008, 3 call_if 1, Route110_EventScript_14FF4B - disappear 29 + removeobject 29 setvar 0x4069, 1 savebgm 0 fadedefaultbgm diff --git a/data/scripts/maps/Route110_TrickHouseEnd.inc b/data/scripts/maps/Route110_TrickHouseEnd.inc index f99869648..0445496d2 100644 --- a/data/scripts/maps/Route110_TrickHouseEnd.inc +++ b/data/scripts/maps/Route110_TrickHouseEnd.inc @@ -21,9 +21,9 @@ Route110_TrickHouseEnd_MapScript2_161965:: @ 8161965 .2byte 0 Route110_TrickHouseEnd_EventScript_16196F:: @ 816196F - reappear 1 - spritevisible 1, 29, 1 - spriteface 1, 4 + addobject 1 + showobject 1, 29, 1 + turnobject 1, 4 end Route110_TrickHouseEnd_MapScript2_16197C:: @ 816197C @@ -185,7 +185,7 @@ Route110_TrickHouseEnd_EventScript_161C2E:: @ 8161C2E playse 178 applymovement 1, Route110_TrickHouseEnd_Movement_16131E waitmovement 0 - disappear 1 + removeobject 1 addvar 0x4044, 1 return @@ -223,7 +223,7 @@ Route110_TrickHouseEnd_EventScript_161C95:: @ 8161C95 Route110_TrickHouseEnd_EventScript_161CA0:: @ 8161CA0 lockall - spriteface 1, 3 + turnobject 1, 3 playse 21 applymovement 1, Route110_TrickHouseEnd_Movement_1A0833 waitmovement 0 @@ -238,7 +238,7 @@ Route110_TrickHouseEnd_EventScript_161CA0:: @ 8161CA0 applymovement 255, Route110_TrickHouseEnd_Movement_161CE8 waitmovement 0 delay 4 - spriteface 1, 4 + turnobject 1, 4 releaseall end diff --git a/data/scripts/maps/Route110_TrickHouseEntrance.inc b/data/scripts/maps/Route110_TrickHouseEntrance.inc index 129cc7d6a..677ce93fa 100644 --- a/data/scripts/maps/Route110_TrickHouseEntrance.inc +++ b/data/scripts/maps/Route110_TrickHouseEntrance.inc @@ -138,15 +138,15 @@ Route110_TrickHouseEntrance_MapScript2_1610B2:: @ 81610B2 .2byte 0 Route110_TrickHouseEntrance_EventScript_1610F4:: @ 81610F4 - reappear 1 - spritevisible 1, 29, 0 - spriteface 1, 4 - spriteface 255, 3 + addobject 1 + showobject 1, 29, 0 + turnobject 1, 4 + turnobject 255, 3 end Route110_TrickHouseEntrance_EventScript_161105:: @ 8161105 - reappear 1 - spriteinvisible 1, 29, 0 + addobject 1 + hideobject 1, 29, 0 switch 0x4044 case 0, Route110_TrickHouseEntrance_EventScript_16116B case 1, Route110_TrickHouseEntrance_EventScript_161173 @@ -159,51 +159,51 @@ Route110_TrickHouseEntrance_EventScript_161105:: @ 8161105 end Route110_TrickHouseEntrance_EventScript_16116B:: @ 816116B - movesprite 1, 6, 3 + setobjectxy 1, 6, 3 end Route110_TrickHouseEntrance_EventScript_161173:: @ 8161173 - movesprite 1, 11, 5 + setobjectxy 1, 11, 5 end Route110_TrickHouseEntrance_EventScript_16117B:: @ 816117B - movesprite 1, 11, 1 + setobjectxy 1, 11, 1 end Route110_TrickHouseEntrance_EventScript_161183:: @ 8161183 - movesprite 1, 3, 1 + setobjectxy 1, 3, 1 end Route110_TrickHouseEntrance_EventScript_16118B:: @ 816118B - movesprite 1, 0, 5 + setobjectxy 1, 0, 5 end Route110_TrickHouseEntrance_EventScript_161193:: @ 8161193 - movesprite 1, 9, 1 + setobjectxy 1, 9, 1 end Route110_TrickHouseEntrance_EventScript_16119B:: @ 816119B - movesprite 1, 8, 1 + setobjectxy 1, 8, 1 end Route110_TrickHouseEntrance_EventScript_1611A3:: @ 81611A3 - movesprite 1, 4, 4 + setobjectxy 1, 4, 4 end Route110_TrickHouseEntrance_EventScript_1611AB:: @ 81611AB - disappear 1 + removeobject 1 end Route110_TrickHouseEntrance_EventScript_1611AF:: @ 81611AF - reappear 1 - movesprite 1, 5, 2 - spriteface 1, 2 + addobject 1 + setobjectxy 1, 5, 2 + turnobject 1, 2 end Route110_TrickHouseEntrance_EventScript_1611BE:: @ 81611BE - reappear 1 - movesprite 1, 5, 2 - spriteface 1, 1 + addobject 1 + setobjectxy 1, 5, 2 + turnobject 1, 1 end Route110_TrickHouseEntrance_MapScript2_1611CD:: @ 81611CD @@ -223,7 +223,7 @@ Route110_TrickHouseEntrance_EventScript_1611D7:: @ 81611D7 playse 178 applymovement 1, Route110_TrickHouseEntrance_Movement_16131E waitmovement 0 - disappear 1 + removeobject 1 setvar 0x40a7, 1 setvar 0x40a6, 0 releaseall @@ -472,7 +472,7 @@ Route110_TrickHouseEntrance_EventScript_161551:: @ 8161551 playse 178 applymovement 1, Route110_TrickHouseEntrance_Movement_16131E waitmovement 0 - disappear 1 + removeobject 1 setvar 0x40c1, 0 setvar 0x40a7, 5 releaseall diff --git a/data/scripts/maps/Route111.inc b/data/scripts/maps/Route111.inc index 617509938..879735ece 100644 --- a/data/scripts/maps/Route111.inc +++ b/data/scripts/maps/Route111.inc @@ -58,11 +58,11 @@ Route111_EventScript_150023:: @ 8150023 closebutton setflag 963 setflag 964 - disappear 34 + removeobject 34 delay 30 applymovement 35, Route111_Movement_1500AF waitmovement 0 - disappear 35 + removeobject 35 releaseall end @@ -80,11 +80,11 @@ Route111_EventScript_150069:: @ 8150069 closebutton setflag 964 setflag 963 - disappear 35 + removeobject 35 delay 30 applymovement 34, Route111_Movement_1500AF waitmovement 0 - disappear 34 + removeobject 34 releaseall end @@ -254,12 +254,12 @@ Route111_EventScript_1501F3:: @ 81501F3 closebutton applymovement 1, Route111_Movement_150356 waitmovement 0 - disappear 1 + removeobject 1 call Route111_EventScript_15034F applymovement 255, Route111_Movement_15035B waitmovement 0 call Route111_EventScript_150348 - reappear 2 + addobject 2 applymovement 2, Route111_Movement_150359 waitmovement 0 call Route111_EventScript_15034F @@ -272,12 +272,12 @@ Route111_EventScript_1501F3:: @ 81501F3 closebutton applymovement 2, Route111_Movement_150356 waitmovement 0 - disappear 2 + removeobject 2 call Route111_EventScript_15034F applymovement 255, Route111_Movement_15035B waitmovement 0 call Route111_EventScript_150348 - reappear 3 + addobject 3 applymovement 3, Route111_Movement_150359 waitmovement 0 call Route111_EventScript_15034F @@ -290,12 +290,12 @@ Route111_EventScript_1501F3:: @ 81501F3 closebutton applymovement 3, Route111_Movement_150356 waitmovement 0 - disappear 3 + removeobject 3 call Route111_EventScript_15034F applymovement 255, Route111_Movement_15035B waitmovement 0 call Route111_EventScript_150348 - reappear 4 + addobject 4 applymovement 4, Route111_Movement_150359 waitmovement 0 call Route111_EventScript_15034F @@ -308,7 +308,7 @@ Route111_EventScript_1501F3:: @ 81501F3 call Route111_EventScript_150348 applymovement 4, Route111_Movement_150356 waitmovement 0 - disappear 4 + removeobject 4 call Route111_EventScript_15034F release end diff --git a/data/scripts/maps/Route116.inc b/data/scripts/maps/Route116.inc index 5a328f198..ca3895e1a 100644 --- a/data/scripts/maps/Route116.inc +++ b/data/scripts/maps/Route116.inc @@ -56,7 +56,7 @@ Route116_EventScript_150A94:: @ 8150A94 call_if 1, Route116_EventScript_150AEE compare FACING, 4 call_if 1, Route116_EventScript_150AF9 - disappear LAST_TALKED + removeobject LAST_TALKED clearflag 949 setflag 256 release @@ -189,7 +189,7 @@ Route116_EventScript_150C03:: @ 8150C03 call_if 1, Route116_EventScript_150C37 compare FACING, 4 call_if 1, Route116_EventScript_150C42 - disappear LAST_TALKED + removeobject LAST_TALKED release end diff --git a/data/scripts/maps/Route118.inc b/data/scripts/maps/Route118.inc index 86e5f9045..8427395a6 100644 --- a/data/scripts/maps/Route118.inc +++ b/data/scripts/maps/Route118.inc @@ -90,7 +90,7 @@ Route118_EventScript_151004:: @ 8151004 compare 0x8008, 2 call_if 1, Route118_EventScript_15105E setvar 0x4071, 1 - disappear 19 + removeobject 19 releaseall end diff --git a/data/scripts/maps/Route119.inc b/data/scripts/maps/Route119.inc index fff294ca9..d825cb96e 100644 --- a/data/scripts/maps/Route119.inc +++ b/data/scripts/maps/Route119.inc @@ -16,11 +16,11 @@ Route119_EventScript_15117C:: @ 815117C return Route119_EventScript_151193:: @ 8151193 - disappear 35 + removeobject 35 return Route119_EventScript_151197:: @ 8151197 - disappear 36 + removeobject 36 return Route119_MapScript1_15119B:: @ 815119B @@ -50,7 +50,7 @@ Route119_EventScript_1511D0:: @ 81511D0 Route119_EventScript_1511DB:: @ 81511DB lockall - reappear 25 + addobject 25 checkgender compare RESULT, 0 call_if 1, Route119_EventScript_151254 @@ -68,8 +68,8 @@ Route119_EventScript_1511DB:: @ 81511DB call_if 1, Route119_EventScript_1513D2 compare 0x4001, 2 call_if 1, Route119_EventScript_1513E1 - disappear 25 - reappear 16 + removeobject 25 + addobject 16 delay 30 checkgender compare RESULT, 0 @@ -158,14 +158,14 @@ Route119_EventScript_151362:: @ 8151362 call_if 1, Route119_EventScript_1513D2 compare 0x4001, 2 call_if 1, Route119_EventScript_1513E1 - disappear 16 - reappear 25 + removeobject 16 + addobject 25 delay 30 compare 0x4001, 1 call_if 1, Route119_EventScript_1513BC compare 0x4001, 2 call_if 1, Route119_EventScript_1513C7 - disappear 25 + removeobject 25 setvar 0x4072, 1 savebgm 0 fadedefaultbgm diff --git a/data/scripts/maps/Route119_WeatherInstitute_2F.inc b/data/scripts/maps/Route119_WeatherInstitute_2F.inc index 5f9cf9888..37b6d07a9 100644 --- a/data/scripts/maps/Route119_WeatherInstitute_2F.inc +++ b/data/scripts/maps/Route119_WeatherInstitute_2F.inc @@ -43,9 +43,9 @@ Route119_WeatherInstitute_2F_EventScript_163D45:: @ 8163D45 fadedefaultbgm fadescreen 1 setflag 890 - disappear 1 - disappear 2 - disappear 3 + removeobject 1 + removeobject 2 + removeobject 3 fadescreen 0 applymovement 5, Route119_WeatherInstitute_2F_Movement_163DC8 waitmovement 0 diff --git a/data/scripts/maps/Route120.inc b/data/scripts/maps/Route120.inc index cb8ebb2cc..b6bb60ddd 100644 --- a/data/scripts/maps/Route120.inc +++ b/data/scripts/maps/Route120.inc @@ -25,28 +25,28 @@ Route120_EventScript_151628:: @ 8151628 return Route120_EventScript_15166B:: @ 815166B - disappear 30 - disappear 36 + removeobject 30 + removeobject 36 return Route120_EventScript_151672:: @ 8151672 - disappear 37 + removeobject 37 return Route120_EventScript_151676:: @ 8151676 - disappear 38 + removeobject 38 return Route120_EventScript_15167A:: @ 815167A - disappear 39 + removeobject 39 return Route120_EventScript_15167E:: @ 815167E - disappear 41 + removeobject 41 return Route120_EventScript_151682:: @ 8151682 - disappear 40 + removeobject 40 return Route120_MapScript1_151686:: @ 8151686 @@ -248,7 +248,7 @@ Route120_EventScript_151908:: @ 8151908 setanimation 0, 1 doanimation 30 delay 15 - disappear 31 + removeobject 31 checkanimation 30 setmaptile 13, 15, 663, 0 setmaptile 12, 16, 671, 0 diff --git a/data/scripts/maps/Route121.inc b/data/scripts/maps/Route121.inc index efaf251b1..43be91266 100644 --- a/data/scripts/maps/Route121.inc +++ b/data/scripts/maps/Route121.inc @@ -26,9 +26,9 @@ Route121_EventScript_151B25:: @ 8151B25 applymovement 13, Route121_Movement_151B60 applymovement 14, Route121_Movement_151B69 waitmovement 0 - disappear 12 - disappear 13 - disappear 14 + removeobject 12 + removeobject 13 + removeobject 14 setvar 0x4074, 1 releaseall end diff --git a/data/scripts/maps/Route128.inc b/data/scripts/maps/Route128.inc index 158313a1b..f19dc6662 100644 --- a/data/scripts/maps/Route128.inc +++ b/data/scripts/maps/Route128.inc @@ -49,13 +49,13 @@ Route128_EventScript_15213F:: @ 815213F applymovement 5, Route128_Movement_152296 applymovement 4, Route128_Movement_152283 waitmovement 0 - disappear 5 - disappear 4 + removeobject 5 + removeobject 4 delay 100 setanimation 0, 1 doanimation 30 checkanimation 30 - reappear 3 + addobject 3 applymovement 3, Route128_Movement_15226F waitmovement 0 applymovement 255, Route128_Movement_1A0843 @@ -80,7 +80,7 @@ Route128_EventScript_15213F:: @ 815213F setanimation 0, 1 doanimation 30 delay 15 - disappear 3 + removeobject 3 checkanimation 30 setvar 0x407b, 2 releaseall diff --git a/data/scripts/maps/RustboroCity.inc b/data/scripts/maps/RustboroCity.inc index dcbb75886..d2469dca7 100644 --- a/data/scripts/maps/RustboroCity.inc +++ b/data/scripts/maps/RustboroCity.inc @@ -165,18 +165,18 @@ RustboroCity_EventScript_14C4DD:: @ 814C4DD RustboroCity_EventScript_14C4F4:: @ 814C4F4 msgbox RustboroCity_Text_166E65, 4 closebutton - reappear 10 - reappear 9 + addobject 10 + addobject 9 applymovement 10, RustboroCity_Movement_14C5C2 waitmovement 0 - disappear 10 + removeobject 10 applymovement 9, RustboroCity_Movement_14C5D3 waitmovement 0 msgbox RustboroCity_Text_166E7E, 4 closebutton applymovement 9, RustboroCity_Movement_14C5DB waitmovement 0 - disappear 9 + removeobject 9 movespriteperm 9, 30, 10 clearflag 732 setflag 142 diff --git a/data/scripts/maps/RustboroCity_DevonCorp_3F.inc b/data/scripts/maps/RustboroCity_DevonCorp_3F.inc index 88f1c377a..6458ec5ca 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_3F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_3F.inc @@ -19,7 +19,7 @@ RustboroCity_DevonCorp_3F_MapScript2_157739:: @ 8157739 .2byte 0 RustboroCity_DevonCorp_3F_EventScript_157743:: @ 8157743 - spriteface 255, 4 + turnobject 255, 4 end RustboroCity_DevonCorp_3F_MapScript2_157748:: @ 8157748 diff --git a/data/scripts/maps/RusturfTunnel.inc b/data/scripts/maps/RusturfTunnel.inc index 81bfcd27d..0cfb66351 100644 --- a/data/scripts/maps/RusturfTunnel.inc +++ b/data/scripts/maps/RusturfTunnel.inc @@ -318,9 +318,9 @@ RusturfTunnel_EventScript_15C9EA:: @ 815C9EA applymovement 255, RusturfTunnel_Movement_15CA99 applymovement 6, RusturfTunnel_Movement_15CAA2 waitmovement 0 - disappear 6 + removeobject 6 delay 50 - reappear 5 + addobject 5 applymovement 5, RusturfTunnel_Movement_15CAAC waitmovement 0 applymovement 255, RusturfTunnel_Movement_15CA9F @@ -339,8 +339,8 @@ RusturfTunnel_EventScript_15C9EA:: @ 815C9EA applymovement 5, RusturfTunnel_Movement_15CAB4 applymovement 7, RusturfTunnel_Movement_15CAC3 waitmovement 0 - disappear 5 - disappear 7 + removeobject 5 + removeobject 7 clearflag 142 setflag 143 setvar 0x405a, 4 diff --git a/data/scripts/maps/SeafloorCavern_Room9.inc b/data/scripts/maps/SeafloorCavern_Room9.inc index 087c1caf7..e600611be 100644 --- a/data/scripts/maps/SeafloorCavern_Room9.inc +++ b/data/scripts/maps/SeafloorCavern_Room9.inc @@ -28,7 +28,7 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA msgbox SeafloorCavern_Room9_Text_1B4850, 4 .endif closebutton - reappear 0x8004 + addobject 0x8004 applymovement 255, SeafloorCavern_Room9_Movement_1A083F waitmovement 0 applymovement 0x8004, SeafloorCavern_Room9_Movement_15DD36 @@ -96,8 +96,8 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA applymovement 255, SeafloorCavern_Room9_Movement_1A0841 waitmovement 0 delay 150 - disappear 7 - reappear 1 + removeobject 7 + addobject 1 waitstate delay 60 applymovement 1, SeafloorCavern_Room9_Movement_15DD4C @@ -110,7 +110,7 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA waitstate applymovement 1, SeafloorCavern_Room9_Movement_15DD57 waitmovement 0 - disappear 1 + removeobject 1 delay 4 setvar 0x8004, 2 setvar 0x8005, 2 @@ -153,9 +153,9 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA msgbox SeafloorCavern_Room9_Text_1B4C79, 4 .endif closebutton - reappear 0x8005 - reappear 0x8006 - reappear 0x8007 + addobject 0x8005 + addobject 0x8006 + addobject 0x8007 applymovement 0x8007, SeafloorCavern_Room9_Movement_15DD63 applymovement 0x8006, SeafloorCavern_Room9_Movement_15DD63 applymovement 0x8005, SeafloorCavern_Room9_Movement_15DD5A diff --git a/data/scripts/maps/SkyPillar_Top.inc b/data/scripts/maps/SkyPillar_Top.inc index 9a8a57e3f..f5ee60d6d 100644 --- a/data/scripts/maps/SkyPillar_Top.inc +++ b/data/scripts/maps/SkyPillar_Top.inc @@ -8,7 +8,7 @@ SkyPillar_Top_MapScript1_15F308:: @ 815F308 end SkyPillar_Top_EventScript_15F312:: @ 815F312 - disappear LAST_TALKED + removeobject LAST_TALKED return SkyPillar_Top_EventScript_15F316:: @ 815F316 diff --git a/data/scripts/maps/SlateportCity.inc b/data/scripts/maps/SlateportCity.inc index aba9ee235..1c9fc342f 100644 --- a/data/scripts/maps/SlateportCity.inc +++ b/data/scripts/maps/SlateportCity.inc @@ -502,8 +502,8 @@ SlateportCity_EventScript_14BEBC:: @ 814BEBC applymovement 10, SlateportCity_Movement_14BFDD applymovement 9, SlateportCity_Movement_14BFEA waitmovement 0 - disappear 10 - disappear 9 + removeobject 10 + removeobject 9 msgbox SlateportCity_Text_16558D, 4 applymovement 11, SlateportCity_Movement_1A0841 waitmovement 0 @@ -532,7 +532,7 @@ SlateportCity_EventScript_14BEBC:: @ 814BEBC applymovement 11, SlateportCity_Movement_14BFFB applymovement 255, SlateportCity_Movement_14C008 waitmovement 0 - disappear 11 + removeobject 11 clearflag 841 clearflag 848 clearflag 845 diff --git a/data/scripts/maps/SlateportCity_Harbor.inc b/data/scripts/maps/SlateportCity_Harbor.inc index 184586d94..50f4926e4 100644 --- a/data/scripts/maps/SlateportCity_Harbor.inc +++ b/data/scripts/maps/SlateportCity_Harbor.inc @@ -59,9 +59,9 @@ SlateportCity_Harbor_EventScript_155FD5:: @ 8155FD5 applymovement 7, SlateportCity_Harbor_Movement_15609B applymovement 8, SlateportCity_Harbor_Movement_1560A5 waitmovement 0 - disappear 6 - disappear 7 - disappear 8 + removeobject 6 + removeobject 7 + removeobject 8 setvar 0x40a0, 2 compare 0x8008, 0 call_if 1, SlateportCity_Harbor_EventScript_15605C @@ -222,13 +222,13 @@ SlateportCity_Harbor_EventScript_156196:: @ 8156196 applymovement LAST_TALKED, SlateportCity_Harbor_Movement_1A0841 waitmovement 0 delay 30 - spriteinvisible LAST_TALKED, 9, 8 + hideobject LAST_TALKED, 9, 8 compare FACING, 2 call_if 1, SlateportCity_Harbor_EventScript_1561EF compare FACING, 4 call_if 1, SlateportCity_Harbor_EventScript_1561E4 delay 30 - spriteinvisible 255, 0, 0 + hideobject 255, 0, 0 setvar 0x8004, 5 call SlateportCity_Harbor_EventScript_1A040E return diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc index 7fe5865a4..32a5c2013 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc @@ -181,7 +181,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155C98:: @ 8155C98 waitmovement 0 setflag 965 playse 9 - disappear 13 + removeobject 13 release end @@ -190,7 +190,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155CAD:: @ 8155CAD waitmovement 0 setflag 965 playse 9 - disappear 13 + removeobject 13 release end diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc index c1398e579..5f64b3941 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc @@ -12,10 +12,10 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 msgbox SlateportCity_OceanicMuseum_2F_Text_17ECFD, 4 closebutton playbgm BGM_EVIL_TEAM, 1 - reappear 3 + addobject 3 applymovement 3, SlateportCity_OceanicMuseum_2F_Movement_155EB4 waitmovement 0 - reappear 4 + addobject 4 applymovement 4, SlateportCity_OceanicMuseum_2F_Movement_155EC3 waitmovement 0 applymovement 3, SlateportCity_OceanicMuseum_2F_Movement_155EB8 @@ -55,7 +55,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 msgbox SlateportCity_OceanicMuseum_2F_Text_17EEEA, 4 closebutton delay 35 - reappear 2 + addobject 2 applymovement 2, SlateportCity_OceanicMuseum_2F_Movement_155EA8 applymovement 4, SlateportCity_OceanicMuseum_2F_Movement_155ECE waitmovement 0 @@ -69,9 +69,9 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 .endif closebutton fadescreen 1 - disappear 2 - disappear 3 - disappear 4 + removeobject 2 + removeobject 3 + removeobject 4 fadescreen 0 delay 30 setflag 883 @@ -85,7 +85,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 applymovement 1, SlateportCity_OceanicMuseum_2F_Movement_155E98 waitmovement 0 playse 9 - disappear 1 + removeobject 1 setflag 900 setflag 149 clearflag 947 diff --git a/data/scripts/maps/SootopolisCity.inc b/data/scripts/maps/SootopolisCity.inc index 936b859e5..90d2bcc5e 100644 --- a/data/scripts/maps/SootopolisCity.inc +++ b/data/scripts/maps/SootopolisCity.inc @@ -464,7 +464,7 @@ SootopolisCity_EventScript_14D4AD:: @ 814D4AD setanimation 0, 1 doanimation 30 delay 15 - disappear LAST_TALKED + removeobject LAST_TALKED checkanimation 30 release end diff --git a/data/scripts/maps/SouthernIsland_Exterior.inc b/data/scripts/maps/SouthernIsland_Exterior.inc index 358e2277c..77c163c47 100644 --- a/data/scripts/maps/SouthernIsland_Exterior.inc +++ b/data/scripts/maps/SouthernIsland_Exterior.inc @@ -17,7 +17,7 @@ SouthernIsland_Exterior_EventScript_160AE0:: @ 8160AE0 applymovement LAST_TALKED, SouthernIsland_Exterior_Movement_1A0845 waitmovement 0 delay 30 - spriteinvisible 1, 26, 9 + hideobject 1, 26, 9 setvar 0x8004, 2 call SouthernIsland_Exterior_EventScript_1A047C warp LilycoveCity_Harbor, 255, 8, 11 diff --git a/data/scripts/maps/SouthernIsland_Interior.inc b/data/scripts/maps/SouthernIsland_Interior.inc index 37af5e140..f4ec0ab2f 100644 --- a/data/scripts/maps/SouthernIsland_Interior.inc +++ b/data/scripts/maps/SouthernIsland_Interior.inc @@ -9,7 +9,7 @@ SouthernIsland_Interior_MapScript1_160B5E:: @ 8160B5E end SouthernIsland_Interior_EventScript_160B68:: @ 8160B68 - disappear 2 + removeobject 2 return SouthernIsland_Interior_MapScript1_160B6C:: @ 8160B6C @@ -57,7 +57,7 @@ SouthernIsland_Interior_EventScript_160BA7:: @ 8160BA7 pokecry SPECIES_LATIAS_OR_LATIOS, 0 delay 30 waitpokecry - reappear 2 + addobject 2 delay 30 applymovement 127, SouthernIsland_Interior_Movement_160C16 applymovement 2, SouthernIsland_Interior_Movement_160C22 diff --git a/data/scripts/maps/UnknownMap_25_34.inc b/data/scripts/maps/UnknownMap_25_34.inc index 994f37b63..0c621d237 100644 --- a/data/scripts/maps/UnknownMap_25_34.inc +++ b/data/scripts/maps/UnknownMap_25_34.inc @@ -68,7 +68,7 @@ LinkContestRoom1_EventScript_15F61A:: @ 815F61A end LinkContestRoom1_EventScript_15F625:: @ 815F625 - spriteinvisible 255, 0, 9 + hideobject 255, 0, 9 call LinkContestRoom1_EventScript_15F919 end diff --git a/data/scripts/maps/VictoryRoad_1F.inc b/data/scripts/maps/VictoryRoad_1F.inc index a0173e720..2ed660a5f 100644 --- a/data/scripts/maps/VictoryRoad_1F.inc +++ b/data/scripts/maps/VictoryRoad_1F.inc @@ -13,7 +13,7 @@ VictoryRoad_1F_EventScript_15DE93:: @ 815DE93 VictoryRoad_1F_EventScript_15DE97:: @ 815DE97 lockall - reappear 4 + addobject 4 applymovement 4, VictoryRoad_1F_Movement_15DF07 waitmovement 0 goto VictoryRoad_1F_EventScript_15DED3 @@ -21,7 +21,7 @@ VictoryRoad_1F_EventScript_15DE97:: @ 815DE97 VictoryRoad_1F_EventScript_15DEAB:: @ 815DEAB lockall - reappear 4 + addobject 4 applymovement 4, VictoryRoad_1F_Movement_15DF13 waitmovement 0 goto VictoryRoad_1F_EventScript_15DED3 @@ -29,7 +29,7 @@ VictoryRoad_1F_EventScript_15DEAB:: @ 815DEAB VictoryRoad_1F_EventScript_15DEBF:: @ 815DEBF lockall - reappear 4 + addobject 4 applymovement 4, VictoryRoad_1F_Movement_15DF1E waitmovement 0 goto VictoryRoad_1F_EventScript_15DED3 diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index 432ba8f65..a821fd62d 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -74,13 +74,13 @@ LittlerootTown_MaysHouse_2F_EventScript_1B69EB:: @ 81B69EB compare RESULT, 1 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6A61 playse 9 - disappear 0x8008 + removeobject 0x8008 releaseall end LittlerootTown_BrendansHouse_2F_EventScript_1B6A31:: @ 81B6A31 setvar 0x8008, 14 - reappear 0x8008 + addobject 0x8008 applymovement 0x8008, LittlerootTown_BrendansHouse_2F_Movement_1B6AA2 waitmovement 0 applymovement 255, LittlerootTown_BrendansHouse_2F_Movement_1A0843 @@ -93,7 +93,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_1B6A31:: @ 81B6A31 LittlerootTown_BrendansHouse_2F_EventScript_1B6A61:: @ 81B6A61 setvar 0x8008, 14 - reappear 0x8008 + addobject 0x8008 applymovement 0x8008, LittlerootTown_BrendansHouse_2F_Movement_1B6AAD waitmovement 0 applymovement 255, LittlerootTown_BrendansHouse_2F_Movement_1A083F @@ -397,7 +397,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6CDE:: @ 81B6CDE compare 0x8008, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6E0B playse 8 - disappear 0x8009 + removeobject 0x8009 setflag 291 setvar 0x4082, 4 setvar 0x408c, 4 diff --git a/data/scripts/pokeblocks.inc b/data/scripts/pokeblocks.inc index dde0d0400..9f9b21807 100644 --- a/data/scripts/pokeblocks.inc +++ b/data/scripts/pokeblocks.inc @@ -272,10 +272,10 @@ FallarborTown_ContestLobby_EventScript_1B790F:: @ 81B790F FallarborTown_ContestLobby_EventScript_1B791D:: @ 81B791D setvar 0x8004, 0 fadescreen 1 - disappear 240 - disappear 239 - disappear 238 - disappear 237 + removeobject 240 + removeobject 239 + removeobject 238 + removeobject 237 special sub_804E538 waitstate releaseall diff --git a/data/scripts/secret_power_tm.inc b/data/scripts/secret_power_tm.inc index 2c1524e5b..d9ebe56a3 100644 --- a/data/scripts/secret_power_tm.inc +++ b/data/scripts/secret_power_tm.inc @@ -22,7 +22,7 @@ Route111_EventScript_1A3877:: @ 81A3877 call_if 1, Route111_EventScript_1A38C3 compare FACING, 2 call_if 1, Route111_EventScript_1A38CE - disappear LAST_TALKED + removeobject LAST_TALKED release end diff --git a/src/scrcmd.c b/src/scrcmd.c index d44fa53e2..233f04f37 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1011,9 +1011,9 @@ bool8 ScrCmd_waitmovexy(struct ScriptContext *ctx) bool8 ScrCmd_disappear(struct ScriptContext *ctx) { - u16 objectId = VarGet(ScriptReadHalfword(ctx)); + u16 localId = VarGet(ScriptReadHalfword(ctx)); - RemoveFieldObjectByLocalIdAndMap(objectId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + RemoveFieldObjectByLocalIdAndMap(localId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); return FALSE; } -- cgit v1.2.3 From 676ffb73cad2a5ec4173a09d525fda68dd2bd0f7 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 30 Sep 2017 15:38:46 -0500 Subject: stuff... I don't remember --- asm/macros/event.inc | 88 +++++++++++++++++++-------------------- data-de/event_scripts.s | 94 +++++++++++++++++++++--------------------- data/event_scripts.s | 94 +++++++++++++++++++++--------------------- data/scripts/gabby_and_ty.inc | 2 +- data/scripts/maps/Route111.inc | 6 +-- 5 files changed, 142 insertions(+), 142 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 29b715e7f..22ea4aaed 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -621,58 +621,58 @@ @ If the Trainer flag for Trainer index is not set, this command does absolutely nothing. .macro trainerbattle type, trainer, word, pointer1, pointer2, pointer3, pointer4 - .byte 0x5c - .byte \type - .2byte \trainer - .2byte \word - .if \type == 0 - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .elseif \type == 1 - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .4byte \pointer3 @ event script - .elseif \type == 2 - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .4byte \pointer3 @ event script - .elseif \type == 3 - .4byte \pointer1 @ text - .elseif \type == 4 - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .4byte \pointer3 @ text - .elseif \type == 5 - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .elseif \type == 6 - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .4byte \pointer3 @ text - .4byte \pointer4 @ event script - .elseif \type == 7 - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .4byte \pointer3 @ text - .elseif \type == 8 - .4byte \pointer1 @ text - .4byte \pointer2 @ text - .4byte \pointer3 @ text - .4byte \pointer4 @ event script - .endif + .byte 0x5c + .byte \type + .2byte \trainer + .2byte \word + .if \type == 0 + .4byte \pointer1 @ text + .4byte \pointer2 @ text + .elseif \type == 1 + .4byte \pointer1 @ text + .4byte \pointer2 @ text + .4byte \pointer3 @ event script + .elseif \type == 2 + .4byte \pointer1 @ text + .4byte \pointer2 @ text + .4byte \pointer3 @ event script + .elseif \type == 3 + .4byte \pointer1 @ text + .elseif \type == 4 + .4byte \pointer1 @ text + .4byte \pointer2 @ text + .4byte \pointer3 @ text + .elseif \type == 5 + .4byte \pointer1 @ text + .4byte \pointer2 @ text + .elseif \type == 6 + .4byte \pointer1 @ text + .4byte \pointer2 @ text + .4byte \pointer3 @ text + .4byte \pointer4 @ event script + .elseif \type == 7 + .4byte \pointer1 @ text + .4byte \pointer2 @ text + .4byte \pointer3 @ text + .elseif \type == 8 + .4byte \pointer1 @ text + .4byte \pointer2 @ text + .4byte \pointer3 @ text + .4byte \pointer4 @ event script + .endif .endm @ Starts a trainer battle using the battle information stored in RAM (usually by trainerbattle, which actually calls this command behind-the-scenes), and blocks script execution until the battle finishes. - .macro reptrainerbattle + .macro battlebegin .byte 0x5d .endm - .macro endtrainerbattle + .macro ontrainerbattleend .byte 0x5e .endm - .macro endtrainerbattle2 + .macro ontrainerbattleendgoto .byte 0x5f .endm @@ -683,13 +683,13 @@ .endm @ Sets Flag (trainer + 0x500). (I didn't make a mistake. The command names actually are backwards.) - .macro cleartrainerflag trainer + .macro settrainerflag trainer .byte 0x61 .2byte \trainer .endm @ Clears Flag (trainer + 0x500). (I didn't make a mistake. The command names actually are backwards.) - .macro settrainerflag trainer + .macro cleartrainerflag trainer .byte 0x62 .2byte \trainer .endm diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index 1ec043aa0..465fc1536 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -949,7 +949,7 @@ gUnknown_0819F818:: @ 819F818 goto EventScript_19F8F2 EventScript_19F83F: - endtrainerbattle + ontrainerbattleend gUnknown_0819F840:: @ 819F840 lock @@ -973,14 +973,14 @@ EventScript_19F870: end EventScript_19F877: - endtrainerbattle + ontrainerbattleend gUnknown_0819F878:: @ 819F878 applymovement LAST_TALKED, Movement_19F8F0 waitmovement 0 special PlayTrainerEncounterMusic - reptrainerbattle - endtrainerbattle + battlebegin + ontrainerbattleend gUnknown_0819F887:: @ 819F887 call EventScript_19F8E5 @@ -998,7 +998,7 @@ gUnknown_0819F887:: @ 819F887 end EventScript_19F8AD: - endtrainerbattle + ontrainerbattleend gUnknown_0819F8AE:: @ 819F8AE specialvar RESULT, ScrSpecial_GetTrainerEyeRematchFlag @@ -1018,7 +1018,7 @@ gUnknown_0819F8AE:: @ 819F8AE end EventScript_19F8DD: - endtrainerbattle + ontrainerbattleend EventScript_19F8DE: special ScrSpecial_ShowTrainerNonBattlingSpeech @@ -1040,7 +1040,7 @@ EventScript_19F8F2: special ScrSpecial_ShowTrainerIntroSpeech waittext waitbutton - reptrainerbattle + battlebegin specialvar RESULT, ScrSpecial_GetTrainerBattleMode compare RESULT, 0 goto_if_eq EventScript_19F934 @@ -1058,7 +1058,7 @@ EventScript_19F934: end EventScript_19F936: - endtrainerbattle2 + ontrainerbattleendgoto Std_6:: message 0x0 @@ -1945,66 +1945,66 @@ SootopolisCity_Gym_1F_EventScript_1A01C0:: @ 81A01C0 end DewfordTown_Gym_EventScript_1A021E:: @ 81A021E - cleartrainerflag OPPONENT_JOSH - cleartrainerflag OPPONENT_TOMMY + settrainerflag OPPONENT_JOSH + settrainerflag OPPONENT_TOMMY return DewfordTown_Gym_EventScript_1A0225:: @ 81A0225 - cleartrainerflag OPPONENT_HIDEKI - cleartrainerflag OPPONENT_TESSA - cleartrainerflag OPPONENT_LAURA + settrainerflag OPPONENT_HIDEKI + settrainerflag OPPONENT_TESSA + settrainerflag OPPONENT_LAURA return DewfordTown_Gym_EventScript_1A022F:: @ 81A022F - cleartrainerflag OPPONENT_KIRK - cleartrainerflag OPPONENT_SHAWN - cleartrainerflag OPPONENT_BEN - cleartrainerflag OPPONENT_VIVIAN + settrainerflag OPPONENT_KIRK + settrainerflag OPPONENT_SHAWN + settrainerflag OPPONENT_BEN + settrainerflag OPPONENT_VIVIAN return DewfordTown_Gym_EventScript_1A023C:: @ 81A023C - cleartrainerflag OPPONENT_COLE - cleartrainerflag OPPONENT_AXLE - cleartrainerflag OPPONENT_ANDY - cleartrainerflag OPPONENT_ZANE - cleartrainerflag OPPONENT_SADIE + settrainerflag OPPONENT_COLE + settrainerflag OPPONENT_AXLE + settrainerflag OPPONENT_ANDY + settrainerflag OPPONENT_ZANE + settrainerflag OPPONENT_SADIE return DewfordTown_Gym_EventScript_1A024C:: @ 81A024C - cleartrainerflag OPPONENT_RANDALL - cleartrainerflag OPPONENT_PARKER - cleartrainerflag OPPONENT_GEORGE - cleartrainerflag OPPONENT_BERKE - cleartrainerflag OPPONENT_MARY - cleartrainerflag OPPONENT_LORI - cleartrainerflag OPPONENT_JODY + settrainerflag OPPONENT_RANDALL + settrainerflag OPPONENT_PARKER + settrainerflag OPPONENT_GEORGE + settrainerflag OPPONENT_BERKE + settrainerflag OPPONENT_MARY + settrainerflag OPPONENT_LORI + settrainerflag OPPONENT_JODY return DewfordTown_Gym_EventScript_1A0262:: @ 81A0262 - cleartrainerflag OPPONENT_JARED - cleartrainerflag OPPONENT_TERRELL - cleartrainerflag OPPONENT_KYLEE - cleartrainerflag OPPONENT_WILL + settrainerflag OPPONENT_JARED + settrainerflag OPPONENT_TERRELL + settrainerflag OPPONENT_KYLEE + settrainerflag OPPONENT_WILL return DewfordTown_Gym_EventScript_1A026F:: @ 81A026F - cleartrainerflag OPPONENT_PRESTON - cleartrainerflag OPPONENT_VIRGIL - cleartrainerflag OPPONENT_FRITZ - cleartrainerflag OPPONENT_HANNAH - cleartrainerflag OPPONENT_SAMANTHA - cleartrainerflag OPPONENT_MAURA + settrainerflag OPPONENT_PRESTON + settrainerflag OPPONENT_VIRGIL + settrainerflag OPPONENT_FRITZ + settrainerflag OPPONENT_HANNAH + settrainerflag OPPONENT_SAMANTHA + settrainerflag OPPONENT_MAURA return DewfordTown_Gym_EventScript_1A0282:: @ 81A0282 - cleartrainerflag OPPONENT_ANDREA - cleartrainerflag OPPONENT_CRISSY - cleartrainerflag OPPONENT_BRIANNA_2 - cleartrainerflag OPPONENT_CONNIE - cleartrainerflag OPPONENT_BRIDGET - cleartrainerflag OPPONENT_OLIVIA - cleartrainerflag OPPONENT_TIFFANY - cleartrainerflag OPPONENT_MARISSA + settrainerflag OPPONENT_ANDREA + settrainerflag OPPONENT_CRISSY + settrainerflag OPPONENT_BRIANNA_2 + settrainerflag OPPONENT_CONNIE + settrainerflag OPPONENT_BRIDGET + settrainerflag OPPONENT_OLIVIA + settrainerflag OPPONENT_TIFFANY + settrainerflag OPPONENT_MARISSA return DewfordTown_Gym_EventScript_1A029B:: @ 81A029B diff --git a/data/event_scripts.s b/data/event_scripts.s index 32cb8d233..1359199d3 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -943,7 +943,7 @@ gUnknown_0819F818:: @ 819F818 goto EventScript_19F8F2 EventScript_19F83F: - endtrainerbattle + ontrainerbattleend gUnknown_0819F840:: @ 819F840 lock @@ -967,14 +967,14 @@ EventScript_19F870: end EventScript_19F877: - endtrainerbattle + ontrainerbattleend gUnknown_0819F878:: @ 819F878 applymovement LAST_TALKED, Movement_19F8F0 waitmovement 0 special PlayTrainerEncounterMusic - reptrainerbattle - endtrainerbattle + battlebegin + ontrainerbattleend gUnknown_0819F887:: @ 819F887 call EventScript_19F8E5 @@ -992,7 +992,7 @@ gUnknown_0819F887:: @ 819F887 end EventScript_19F8AD: - endtrainerbattle + ontrainerbattleend gUnknown_0819F8AE:: @ 819F8AE specialvar RESULT, ScrSpecial_GetTrainerEyeRematchFlag @@ -1012,7 +1012,7 @@ gUnknown_0819F8AE:: @ 819F8AE end EventScript_19F8DD: - endtrainerbattle + ontrainerbattleend EventScript_19F8DE: special ScrSpecial_ShowTrainerNonBattlingSpeech @@ -1034,7 +1034,7 @@ EventScript_19F8F2: special ScrSpecial_ShowTrainerIntroSpeech waittext waitbutton - reptrainerbattle + battlebegin specialvar RESULT, ScrSpecial_GetTrainerBattleMode compare RESULT, 0 goto_if_eq EventScript_19F934 @@ -1052,7 +1052,7 @@ EventScript_19F934: end EventScript_19F936: - endtrainerbattle2 + ontrainerbattleendgoto Std_6:: message 0x0 @@ -1939,66 +1939,66 @@ SootopolisCity_Gym_1F_EventScript_1A01C0:: @ 81A01C0 end DewfordTown_Gym_EventScript_1A021E:: @ 81A021E - cleartrainerflag OPPONENT_JOSH - cleartrainerflag OPPONENT_TOMMY + settrainerflag OPPONENT_JOSH + settrainerflag OPPONENT_TOMMY return DewfordTown_Gym_EventScript_1A0225:: @ 81A0225 - cleartrainerflag OPPONENT_HIDEKI - cleartrainerflag OPPONENT_TESSA - cleartrainerflag OPPONENT_LAURA + settrainerflag OPPONENT_HIDEKI + settrainerflag OPPONENT_TESSA + settrainerflag OPPONENT_LAURA return DewfordTown_Gym_EventScript_1A022F:: @ 81A022F - cleartrainerflag OPPONENT_KIRK - cleartrainerflag OPPONENT_SHAWN - cleartrainerflag OPPONENT_BEN - cleartrainerflag OPPONENT_VIVIAN + settrainerflag OPPONENT_KIRK + settrainerflag OPPONENT_SHAWN + settrainerflag OPPONENT_BEN + settrainerflag OPPONENT_VIVIAN return DewfordTown_Gym_EventScript_1A023C:: @ 81A023C - cleartrainerflag OPPONENT_COLE - cleartrainerflag OPPONENT_AXLE - cleartrainerflag OPPONENT_ANDY - cleartrainerflag OPPONENT_ZANE - cleartrainerflag OPPONENT_SADIE + settrainerflag OPPONENT_COLE + settrainerflag OPPONENT_AXLE + settrainerflag OPPONENT_ANDY + settrainerflag OPPONENT_ZANE + settrainerflag OPPONENT_SADIE return DewfordTown_Gym_EventScript_1A024C:: @ 81A024C - cleartrainerflag OPPONENT_RANDALL - cleartrainerflag OPPONENT_PARKER - cleartrainerflag OPPONENT_GEORGE - cleartrainerflag OPPONENT_BERKE - cleartrainerflag OPPONENT_MARY - cleartrainerflag OPPONENT_LORI - cleartrainerflag OPPONENT_JODY + settrainerflag OPPONENT_RANDALL + settrainerflag OPPONENT_PARKER + settrainerflag OPPONENT_GEORGE + settrainerflag OPPONENT_BERKE + settrainerflag OPPONENT_MARY + settrainerflag OPPONENT_LORI + settrainerflag OPPONENT_JODY return DewfordTown_Gym_EventScript_1A0262:: @ 81A0262 - cleartrainerflag OPPONENT_JARED - cleartrainerflag OPPONENT_TERRELL - cleartrainerflag OPPONENT_KYLEE - cleartrainerflag OPPONENT_WILL + settrainerflag OPPONENT_JARED + settrainerflag OPPONENT_TERRELL + settrainerflag OPPONENT_KYLEE + settrainerflag OPPONENT_WILL return DewfordTown_Gym_EventScript_1A026F:: @ 81A026F - cleartrainerflag OPPONENT_PRESTON - cleartrainerflag OPPONENT_VIRGIL - cleartrainerflag OPPONENT_FRITZ - cleartrainerflag OPPONENT_HANNAH - cleartrainerflag OPPONENT_SAMANTHA - cleartrainerflag OPPONENT_MAURA + settrainerflag OPPONENT_PRESTON + settrainerflag OPPONENT_VIRGIL + settrainerflag OPPONENT_FRITZ + settrainerflag OPPONENT_HANNAH + settrainerflag OPPONENT_SAMANTHA + settrainerflag OPPONENT_MAURA return DewfordTown_Gym_EventScript_1A0282:: @ 81A0282 - cleartrainerflag OPPONENT_ANDREA - cleartrainerflag OPPONENT_CRISSY - cleartrainerflag OPPONENT_BRIANNA_2 - cleartrainerflag OPPONENT_CONNIE - cleartrainerflag OPPONENT_BRIDGET - cleartrainerflag OPPONENT_OLIVIA - cleartrainerflag OPPONENT_TIFFANY - cleartrainerflag OPPONENT_MARISSA + settrainerflag OPPONENT_ANDREA + settrainerflag OPPONENT_CRISSY + settrainerflag OPPONENT_BRIANNA_2 + settrainerflag OPPONENT_CONNIE + settrainerflag OPPONENT_BRIDGET + settrainerflag OPPONENT_OLIVIA + settrainerflag OPPONENT_TIFFANY + settrainerflag OPPONENT_MARISSA return DewfordTown_Gym_EventScript_1A029B:: @ 81A029B diff --git a/data/scripts/gabby_and_ty.inc b/data/scripts/gabby_and_ty.inc index cad2c6a48..214c61142 100644 --- a/data/scripts/gabby_and_ty.inc +++ b/data/scripts/gabby_and_ty.inc @@ -1,7 +1,7 @@ Route111_EventScript_1AE313:: @ 81AE313 Route118_EventScript_1AE313:: @ 81AE313 Route120_EventScript_1AE313:: @ 81AE313 - settrainerflag OPPONENT_GABBY_AND_TY_6 + cleartrainerflag OPPONENT_GABBY_AND_TY_6 specialvar RESULT, GabbyAndTyGetBattleNum switch RESULT case 0, Route111_EventScript_1AE384 diff --git a/data/scripts/maps/Route111.inc b/data/scripts/maps/Route111.inc index 879735ece..de37c68fc 100644 --- a/data/scripts/maps/Route111.inc +++ b/data/scripts/maps/Route111.inc @@ -44,9 +44,9 @@ Route111_EventScript_15000D:: @ 815000D setflag 769 setflag 770 setflag 771 - settrainerflag OPPONENT_VICTOR - settrainerflag OPPONENT_VICTORIA - settrainerflag OPPONENT_VIVI + cleartrainerflag OPPONENT_VICTOR + cleartrainerflag OPPONENT_VICTORIA + cleartrainerflag OPPONENT_VIVI end Route111_EventScript_150023:: @ 8150023 -- cgit v1.2.3 From e2f293d771fe6a5ea8ae3e272db880d048a1e99b Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 30 Sep 2017 16:13:50 -0500 Subject: name some ScrCmd_ functions --- data/script_cmd_table.inc | 398 +++++++++++++++++++++++----------------------- src/scrcmd.c | 12 +- 2 files changed, 205 insertions(+), 205 deletions(-) diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index a68f2ca8d..1ee61e2e7 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -1,203 +1,203 @@ .align 2 gScriptCmdTable:: @ 814AE30 - .4byte ScrCmd_snop - .4byte ScrCmd_snop1 - .4byte ScrCmd_end - .4byte ScrCmd_return - .4byte ScrCmd_call - .4byte ScrCmd_jump - .4byte ScrCmd_jumpif - .4byte ScrCmd_callif - .4byte ScrCmd_jumpstd - .4byte ScrCmd_callstd - .4byte ScrCmd_jumpstdif - .4byte ScrCmd_callstdif - .4byte ScrCmd_jumpram - .4byte ScrCmd_die - .4byte ScrCmd_setbyte - .4byte ScrCmd_loadptr - .4byte ScrCmd_setbufferbyte - .4byte ScrCmd_writebytetooffset - .4byte ScrCmd_loadbytefrompointer - .4byte ScrCmd_setptrbyte - .4byte ScrCmd_copybuffers - .4byte ScrCmd_copybyte - .4byte ScrCmd_setvar - .4byte ScrCmd_addvar - .4byte ScrCmd_subvar - .4byte ScrCmd_copyvar - .4byte ScrCmd_setorcopyvar - .4byte ScrCmd_comparebuffers - .4byte ScrCmd_comparebuffertobyte - .4byte ScrCmd_comparebuffertoptrbyte - .4byte ScrCmd_compareptrbytetobuffer - .4byte ScrCmd_compareptrbytetobyte - .4byte ScrCmd_compareptrbytes - .4byte ScrCmd_compare - .4byte ScrCmd_comparevars - .4byte ScrCmd_callasm - .4byte ScrCmd_jumpasm - .4byte ScrCmd_special - .4byte ScrCmd_specialval - .4byte ScrCmd_waitstate - .4byte ScrCmd_pause - .4byte ScrCmd_setflag - .4byte ScrCmd_clearflag - .4byte ScrCmd_checkflag - .4byte ScrCmd_compareflags - .4byte ScrCmd_checkdailyflags - .4byte ScrCmd_resetvars - .4byte ScrCmd_playsfx - .4byte ScrCmd_checksound - .4byte ScrCmd_fanfare - .4byte ScrCmd_waitfanfare - .4byte ScrCmd_playmusic - .4byte ScrCmd_playmusicbattle - .4byte ScrCmd_fadedefault - .4byte ScrCmd_fademusic - .4byte ScrCmd_fadeout - .4byte ScrCmd_fadein - .4byte ScrCmd_warp - .4byte ScrCmd_warpmuted - .4byte ScrCmd_warpwalk - .4byte ScrCmd_warphole - .4byte ScrCmd_warpteleport - .4byte ScrCmd_warp3 - .4byte ScrCmd_warpplace - .4byte ScrCmd_warp4 - .4byte ScrCmd_warp5 - .4byte ScrCmd_getplayerxy - .4byte ScrCmd_countpokemon - .4byte ScrCmd_additem - .4byte ScrCmd_removeitem - .4byte ScrCmd_checkitemspace - .4byte ScrCmd_checkitem - .4byte ScrCmd_checkitemtype - .4byte ScrCmd_addpcitem - .4byte ScrCmd_checkpcitem - .4byte ScrCmd_adddecor - .4byte ScrCmd_removedecor - .4byte ScrCmd_testdecor - .4byte ScrCmd_checkdecor - .4byte ScrCmd_move - .4byte ScrCmd_movecoords - .4byte ScrCmd_waitmove - .4byte ScrCmd_waitmovexy - .4byte ScrCmd_disappear - .4byte ScrCmd_disappearxy - .4byte ScrCmd_reappear - .4byte ScrCmd_reappearxy - .4byte ScrCmd_movesprite - .4byte ScrCmd_spritevisible - .4byte ScrCmd_spriteinvisible - .4byte ScrCmd_faceplayer - .4byte ScrCmd_spriteface - .4byte ScrCmd_trainerbattle - .4byte ScrCmd_reptrainerbattle - .4byte ScrCmd_endtrainerbattle - .4byte ScrCmd_endtrainerbattle2 - .4byte ScrCmd_checktrainerflag - .4byte ScrCmd_cleartrainerflag - .4byte ScrCmd_settrainerflag - .4byte ScrCmd_movespriteperm - .4byte ScrCmd_moveoffscreen - .4byte ScrCmd_spritebehave - .4byte ScrCmd_waittext - .4byte ScrCmd_message - .4byte ScrCmd_closebutton - .4byte ScrCmd_lockall - .4byte ScrCmd_lock - .4byte ScrCmd_releaseall - .4byte ScrCmd_release - .4byte ScrCmd_waitbutton - .4byte ScrCmd_yesnobox - .4byte ScrCmd_multichoice - .4byte ScrCmd_multichoicedef - .4byte ScrCmd_multichoicerow - .4byte ScrCmd_showbox - .4byte ScrCmd_hidebox - .4byte ScrCmd_clearbox - .4byte ScrCmd_showpokepic - .4byte ScrCmd_hidepokepic - .4byte ScrCmd_showcontestwinner - .4byte ScrCmd_braillemsg - .4byte ScrCmd_givepokemon - .4byte ScrCmd_giveegg - .4byte ScrCmd_setpokemove - .4byte ScrCmd_checkattack - .4byte ScrCmd_bufferpoke - .4byte ScrCmd_bufferfirstpoke - .4byte ScrCmd_bufferpartypoke - .4byte ScrCmd_bufferitem - .4byte ScrCmd_bufferdecor - .4byte ScrCmd_bufferattack - .4byte ScrCmd_buffernum - .4byte ScrCmd_bufferstd - .4byte ScrCmd_buffertext - .4byte ScrCmd_pokemart - .4byte ScrCmd_pokemartdecor - .4byte ScrCmd_pokemartbp - .4byte ScrCmd_pokecasino - .4byte ScrCmd_event_8a - .4byte ScrCmd_choosecontestpkmn - .4byte ScrCmd_startcontest - .4byte ScrCmd_showcontestresults - .4byte ScrCmd_contestlinktransfer - .4byte ScrCmd_random - .4byte ScrCmd_givemoney - .4byte ScrCmd_paymoney - .4byte ScrCmd_checkmoney - .4byte ScrCmd_showmoney - .4byte ScrCmd_hidemoney - .4byte ScrCmd_updatemoney - .4byte ScrCmd_event_96 - .4byte ScrCmd_fadescreen - .4byte ScrCmd_fadescreendelay - .4byte ScrCmd_darken - .4byte ScrCmd_lighten - .4byte ScrCmd_message2 - .4byte ScrCmd_doanimation - .4byte ScrCmd_setanimation - .4byte ScrCmd_checkanimation - .4byte ScrCmd_sethealplace - .4byte ScrCmd_checkgender - .4byte ScrCmd_pokecry - .4byte ScrCmd_setmaptile - .4byte ScrCmd_resetweather - .4byte ScrCmd_setweather - .4byte ScrCmd_doweather - .4byte ScrCmd_tileeffect - .4byte ScrCmd_setmapfooter - .4byte ScrCmd_spritelevelup - .4byte ScrCmd_restorespritelevel - .4byte ScrCmd_createvsprite - .4byte ScrCmd_vspriteface - .4byte ScrCmd_setdooropened - .4byte ScrCmd_setdoorclosed - .4byte ScrCmd_doorchange - .4byte ScrCmd_setdooropened2 - .4byte ScrCmd_setdoorclosed2 - .4byte ScrCmd_event_b1 - .4byte ScrCmd_event_b2 - .4byte ScrCmd_checkcoins - .4byte ScrCmd_givecoins - .4byte ScrCmd_removecoins - .4byte ScrCmd_setwildbattle - .4byte ScrCmd_dowildbattle - .4byte ScrCmd_setvaddress - .4byte ScrCmd_vjump - .4byte ScrCmd_vcall - .4byte ScrCmd_if5 - .4byte ScrCmd_if6 - .4byte ScrCmd_vtext - .4byte ScrCmd_vloadptr - .4byte ScrCmd_vbuffer - .4byte ScrCmd_showcoins - .4byte ScrCmd_hidecoins - .4byte ScrCmd_updatecoins - .4byte ScrCmd_inccounter - .4byte ScrCmd_warp6 - .4byte ScrCmd_waitpokecry + .4byte ScrCmd_nop @ 0x00 + .4byte ScrCmd_nop1 @ 0x01 + .4byte ScrCmd_end @ 0x02 + .4byte ScrCmd_return @ 0x03 + .4byte ScrCmd_call @ 0x04 + .4byte ScrCmd_goto @ 0x05 + .4byte ScrCmd_goto_if @ 0x06 + .4byte ScrCmd_call_if @ 0x07 + .4byte ScrCmd_gotostd @ 0x08 + .4byte ScrCmd_callstd @ 0x09 + .4byte ScrCmd_jumpstdif @ 0x0A + .4byte ScrCmd_callstdif @ 0x0B + .4byte ScrCmd_jumpram @ 0x0C + .4byte ScrCmd_die @ 0x0D + .4byte ScrCmd_setbyte @ 0x0E + .4byte ScrCmd_loadptr @ 0x0F + .4byte ScrCmd_setbufferbyte @ 0x10 + .4byte ScrCmd_writebytetooffset @ 0x11 + .4byte ScrCmd_loadbytefrompointer @ 0x12 + .4byte ScrCmd_setptrbyte @ 0x13 + .4byte ScrCmd_copybuffers @ 0x14 + .4byte ScrCmd_copybyte @ 0x15 + .4byte ScrCmd_setvar @ 0x16 + .4byte ScrCmd_addvar @ 0x17 + .4byte ScrCmd_subvar @ 0x18 + .4byte ScrCmd_copyvar @ 0x19 + .4byte ScrCmd_setorcopyvar @ 0x1A + .4byte ScrCmd_comparebuffers @ 0x1B + .4byte ScrCmd_comparebuffertobyte @ 0x1C + .4byte ScrCmd_comparebuffertoptrbyte @ 0x1D + .4byte ScrCmd_compareptrbytetobuffer @ 0x1E + .4byte ScrCmd_compareptrbytetobyte @ 0x1F + .4byte ScrCmd_compareptrbytes @ 0x20 + .4byte ScrCmd_compare @ 0x21 + .4byte ScrCmd_comparevars @ 0x22 + .4byte ScrCmd_callasm @ 0x23 + .4byte ScrCmd_jumpasm @ 0x24 + .4byte ScrCmd_special @ 0x25 + .4byte ScrCmd_specialval @ 0x26 + .4byte ScrCmd_waitstate @ 0x27 + .4byte ScrCmd_pause @ 0x28 + .4byte ScrCmd_setflag @ 0x29 + .4byte ScrCmd_clearflag @ 0x2A + .4byte ScrCmd_checkflag @ 0x2B + .4byte ScrCmd_compareflags @ 0x2C + .4byte ScrCmd_checkdailyflags @ 0x2D + .4byte ScrCmd_resetvars @ 0x2E + .4byte ScrCmd_playsfx @ 0x2F + .4byte ScrCmd_checksound @ 0x30 + .4byte ScrCmd_fanfare @ 0x31 + .4byte ScrCmd_waitfanfare @ 0x32 + .4byte ScrCmd_playmusic @ 0x33 + .4byte ScrCmd_playmusicbattle @ 0x34 + .4byte ScrCmd_fadedefault @ 0x35 + .4byte ScrCmd_fademusic @ 0x36 + .4byte ScrCmd_fadeout @ 0x37 + .4byte ScrCmd_fadein @ 0x38 + .4byte ScrCmd_warp @ 0x39 + .4byte ScrCmd_warpmuted @ 0x3A + .4byte ScrCmd_warpwalk @ 0x3B + .4byte ScrCmd_warphole @ 0x3C + .4byte ScrCmd_warpteleport @ 0x3D + .4byte ScrCmd_warp3 @ 0x3E + .4byte ScrCmd_warpplace @ 0x3F + .4byte ScrCmd_warp4 @ 0x40 + .4byte ScrCmd_warp5 @ 0x41 + .4byte ScrCmd_getplayerxy @ 0x42 + .4byte ScrCmd_countpokemon @ 0x43 + .4byte ScrCmd_additem @ 0x44 + .4byte ScrCmd_removeitem @ 0x45 + .4byte ScrCmd_checkitemspace @ 0x46 + .4byte ScrCmd_checkitem @ 0x47 + .4byte ScrCmd_checkitemtype @ 0x48 + .4byte ScrCmd_addpcitem @ 0x49 + .4byte ScrCmd_checkpcitem @ 0x4A + .4byte ScrCmd_adddecor @ 0x4B + .4byte ScrCmd_removedecor @ 0x4C + .4byte ScrCmd_testdecor @ 0x4D + .4byte ScrCmd_checkdecor @ 0x4E + .4byte ScrCmd_move @ 0x4F + .4byte ScrCmd_movecoords @ 0x50 + .4byte ScrCmd_waitmove @ 0x51 + .4byte ScrCmd_waitmovexy @ 0x52 + .4byte ScrCmd_disappear @ 0x53 + .4byte ScrCmd_disappearxy @ 0x54 + .4byte ScrCmd_reappear @ 0x55 + .4byte ScrCmd_reappearxy @ 0x56 + .4byte ScrCmd_movesprite @ 0x57 + .4byte ScrCmd_spritevisible @ 0x58 + .4byte ScrCmd_spriteinvisible @ 0x59 + .4byte ScrCmd_faceplayer @ 0x5A + .4byte ScrCmd_spriteface @ 0x5B + .4byte ScrCmd_trainerbattle @ 0x5C + .4byte ScrCmd_reptrainerbattle @ 0x5D + .4byte ScrCmd_endtrainerbattle @ 0x5E + .4byte ScrCmd_endtrainerbattle2 @ 0x5F + .4byte ScrCmd_checktrainerflag @ 0x60 + .4byte ScrCmd_cleartrainerflag @ 0x61 + .4byte ScrCmd_settrainerflag @ 0x62 + .4byte ScrCmd_movespriteperm @ 0x63 + .4byte ScrCmd_moveoffscreen @ 0x64 + .4byte ScrCmd_spritebehave @ 0x65 + .4byte ScrCmd_waittext @ 0x66 + .4byte ScrCmd_message @ 0x67 + .4byte ScrCmd_closebutton @ 0x68 + .4byte ScrCmd_lockall @ 0x69 + .4byte ScrCmd_lock @ 0x6A + .4byte ScrCmd_releaseall @ 0x6B + .4byte ScrCmd_release @ 0x6C + .4byte ScrCmd_waitbutton @ 0x6D + .4byte ScrCmd_yesnobox @ 0x6E + .4byte ScrCmd_multichoice @ 0x6F + .4byte ScrCmd_multichoicedef @ 0x70 + .4byte ScrCmd_multichoicerow @ 0x71 + .4byte ScrCmd_showbox @ 0x72 + .4byte ScrCmd_hidebox @ 0x73 + .4byte ScrCmd_clearbox @ 0x74 + .4byte ScrCmd_showpokepic @ 0x75 + .4byte ScrCmd_hidepokepic @ 0x76 + .4byte ScrCmd_showcontestwinner @ 0x77 + .4byte ScrCmd_braillemsg @ 0x78 + .4byte ScrCmd_givepokemon @ 0x79 + .4byte ScrCmd_giveegg @ 0x7A + .4byte ScrCmd_setpokemove @ 0x7B + .4byte ScrCmd_checkattack @ 0x7C + .4byte ScrCmd_bufferpoke @ 0x7D + .4byte ScrCmd_bufferfirstpoke @ 0x7E + .4byte ScrCmd_bufferpartypoke @ 0x7F + .4byte ScrCmd_bufferitem @ 0x80 + .4byte ScrCmd_bufferdecor @ 0x81 + .4byte ScrCmd_bufferattack @ 0x82 + .4byte ScrCmd_buffernum @ 0x83 + .4byte ScrCmd_bufferstd @ 0x84 + .4byte ScrCmd_buffertext @ 0x85 + .4byte ScrCmd_pokemart @ 0x86 + .4byte ScrCmd_pokemartdecor @ 0x87 + .4byte ScrCmd_pokemartbp @ 0x88 + .4byte ScrCmd_pokecasino @ 0x89 + .4byte ScrCmd_event_8a @ 0x8A + .4byte ScrCmd_choosecontestpkmn @ 0x8B + .4byte ScrCmd_startcontest @ 0x8C + .4byte ScrCmd_showcontestresults @ 0x8D + .4byte ScrCmd_contestlinktransfer @ 0x8E + .4byte ScrCmd_random @ 0x8F + .4byte ScrCmd_givemoney @ 0x90 + .4byte ScrCmd_paymoney @ 0x91 + .4byte ScrCmd_checkmoney @ 0x92 + .4byte ScrCmd_showmoney @ 0x93 + .4byte ScrCmd_hidemoney @ 0x94 + .4byte ScrCmd_updatemoney @ 0x95 + .4byte ScrCmd_event_96 @ 0x96 + .4byte ScrCmd_fadescreen @ 0x97 + .4byte ScrCmd_fadescreendelay @ 0x98 + .4byte ScrCmd_darken @ 0x99 + .4byte ScrCmd_lighten @ 0x9A + .4byte ScrCmd_message2 @ 0x9B + .4byte ScrCmd_doanimation @ 0x9C + .4byte ScrCmd_setanimation @ 0x9D + .4byte ScrCmd_checkanimation @ 0x9E + .4byte ScrCmd_sethealplace @ 0x9F + .4byte ScrCmd_checkgender @ 0xA0 + .4byte ScrCmd_pokecry @ 0xA1 + .4byte ScrCmd_setmaptile @ 0xA2 + .4byte ScrCmd_resetweather @ 0xA3 + .4byte ScrCmd_setweather @ 0xA4 + .4byte ScrCmd_doweather @ 0xA5 + .4byte ScrCmd_tileeffect @ 0xA6 + .4byte ScrCmd_setmapfooter @ 0xA7 + .4byte ScrCmd_spritelevelup @ 0xA8 + .4byte ScrCmd_restorespritelevel @ 0xA9 + .4byte ScrCmd_createvsprite @ 0xAA + .4byte ScrCmd_vspriteface @ 0xAB + .4byte ScrCmd_setdooropened @ 0xAC + .4byte ScrCmd_setdoorclosed @ 0xAD + .4byte ScrCmd_doorchange @ 0xAE + .4byte ScrCmd_setdooropened2 @ 0xAF + .4byte ScrCmd_setdoorclosed2 @ 0xB0 + .4byte ScrCmd_event_b1 @ 0xB1 + .4byte ScrCmd_event_b2 @ 0xB2 + .4byte ScrCmd_checkcoins @ 0xB3 + .4byte ScrCmd_givecoins @ 0xB4 + .4byte ScrCmd_removecoins @ 0xB5 + .4byte ScrCmd_setwildbattle @ 0xB6 + .4byte ScrCmd_dowildbattle @ 0xB7 + .4byte ScrCmd_setvaddress @ 0xB8 + .4byte ScrCmd_vjump @ 0xB9 + .4byte ScrCmd_vcall @ 0xBA + .4byte ScrCmd_if5 @ 0xBB + .4byte ScrCmd_if6 @ 0xBC + .4byte ScrCmd_vtext @ 0xBD + .4byte ScrCmd_vloadptr @ 0xBE + .4byte ScrCmd_vbuffer @ 0xBF + .4byte ScrCmd_showcoins @ 0xC0 + .4byte ScrCmd_hidecoins @ 0xC1 + .4byte ScrCmd_updatecoins @ 0xC2 + .4byte ScrCmd_inccounter @ 0xC3 + .4byte ScrCmd_warp6 @ 0xC4 + .4byte ScrCmd_waitpokecry @ 0xC5 gScriptCmdTableEnd:: - .4byte ScrCmd_snop + .4byte ScrCmd_nop diff --git a/src/scrcmd.c b/src/scrcmd.c index 233f04f37..e4b0f73af 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -91,12 +91,12 @@ static u8 * const sScriptStringVars[] = gStringVar3, }; -bool8 ScrCmd_snop(struct ScriptContext *ctx) +bool8 ScrCmd_nop(struct ScriptContext *ctx) { return FALSE; } -bool8 ScrCmd_snop1(struct ScriptContext *ctx) +bool8 ScrCmd_nop1(struct ScriptContext *ctx) { return FALSE; } @@ -145,7 +145,7 @@ bool8 ScrCmd_waitstate(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_jump(struct ScriptContext *ctx) +bool8 ScrCmd_goto(struct ScriptContext *ctx) { u8 *ptr = (u8 *)ScriptReadWord(ctx); @@ -167,7 +167,7 @@ bool8 ScrCmd_call(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_jumpif(struct ScriptContext *ctx) +bool8 ScrCmd_goto_if(struct ScriptContext *ctx) { u8 condition = ScriptReadByte(ctx); u8 *ptr = (u8 *)ScriptReadWord(ctx); @@ -177,7 +177,7 @@ bool8 ScrCmd_jumpif(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_callif(struct ScriptContext *ctx) +bool8 ScrCmd_call_if(struct ScriptContext *ctx) { u8 condition = ScriptReadByte(ctx); u8 *ptr = (u8 *)ScriptReadWord(ctx); @@ -232,7 +232,7 @@ bool8 ScrCmd_if6(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_jumpstd(struct ScriptContext *ctx) +bool8 ScrCmd_gotostd(struct ScriptContext *ctx) { u8 index = ScriptReadByte(ctx); u8 **ptr = &gStdScripts[index]; -- cgit v1.2.3 From c0c4ab681c4413cf534c7e7e6eb8c56edaf4e7ec Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 30 Sep 2017 16:25:36 -0500 Subject: update --- data/script_cmd_table.inc | 20 ++++++++++---------- src/scrcmd.c | 20 ++++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 1ee61e2e7..a3d96c0a1 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -10,17 +10,17 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_call_if @ 0x07 .4byte ScrCmd_gotostd @ 0x08 .4byte ScrCmd_callstd @ 0x09 - .4byte ScrCmd_jumpstdif @ 0x0A - .4byte ScrCmd_callstdif @ 0x0B - .4byte ScrCmd_jumpram @ 0x0C - .4byte ScrCmd_die @ 0x0D - .4byte ScrCmd_setbyte @ 0x0E - .4byte ScrCmd_loadptr @ 0x0F - .4byte ScrCmd_setbufferbyte @ 0x10 - .4byte ScrCmd_writebytetooffset @ 0x11 - .4byte ScrCmd_loadbytefrompointer @ 0x12 + .4byte ScrCmd_gotostd_if @ 0x0A + .4byte ScrCmd_callstd_if @ 0x0B + .4byte ScrCmd_gotoram @ 0x0C + .4byte ScrCmd_killscript @ 0x0D + .4byte ScrCmd_setmestatus @ 0x0E + .4byte ScrCmd_loadword @ 0x0F + .4byte ScrCmd_loadbyte @ 0x10 + .4byte ScrCmd_writebytetoaddr @ 0x11 + .4byte ScrCmd_loadbytefromaddr @ 0x12 .4byte ScrCmd_setptrbyte @ 0x13 - .4byte ScrCmd_copybuffers @ 0x14 + .4byte ScrCmd_copylocal @ 0x14 .4byte ScrCmd_copybyte @ 0x15 .4byte ScrCmd_setvar @ 0x16 .4byte ScrCmd_addvar @ 0x17 diff --git a/src/scrcmd.c b/src/scrcmd.c index e4b0f73af..df85bdc1c 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -252,7 +252,7 @@ bool8 ScrCmd_callstd(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_jumpstdif(struct ScriptContext *ctx) +bool8 ScrCmd_gotostd_if(struct ScriptContext *ctx) { u8 condition = ScriptReadByte(ctx); u8 index = ScriptReadByte(ctx); @@ -266,7 +266,7 @@ bool8 ScrCmd_jumpstdif(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_callstdif(struct ScriptContext *ctx) +bool8 ScrCmd_callstd_if(struct ScriptContext *ctx) { u8 condition = ScriptReadByte(ctx); u8 index = ScriptReadByte(ctx); @@ -280,20 +280,20 @@ bool8 ScrCmd_callstdif(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_jumpram(struct ScriptContext *ctx) +bool8 ScrCmd_gotoram(struct ScriptContext *ctx) { ScriptJump(ctx, (u8 *)gUnknown_0202E8AC); return FALSE; } -bool8 ScrCmd_die(struct ScriptContext *ctx) +bool8 ScrCmd_killscript(struct ScriptContext *ctx) { ClearRamScript(); StopScript(ctx); return TRUE; } -bool8 ScrCmd_setbyte(struct ScriptContext *ctx) +bool8 ScrCmd_setmestatus(struct ScriptContext *ctx) { u8 value = ScriptReadByte(ctx); @@ -301,7 +301,7 @@ bool8 ScrCmd_setbyte(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_loadptr(struct ScriptContext *ctx) +bool8 ScrCmd_loadword(struct ScriptContext *ctx) { u8 index = ScriptReadByte(ctx); @@ -309,7 +309,7 @@ bool8 ScrCmd_loadptr(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_loadbytefrompointer(struct ScriptContext *ctx) +bool8 ScrCmd_loadbytefromaddr(struct ScriptContext *ctx) { u8 index = ScriptReadByte(ctx); @@ -317,7 +317,7 @@ bool8 ScrCmd_loadbytefrompointer(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_writebytetooffset(struct ScriptContext *ctx) +bool8 ScrCmd_writebytetoaddr(struct ScriptContext *ctx) { u8 value = ScriptReadByte(ctx); @@ -325,7 +325,7 @@ bool8 ScrCmd_writebytetooffset(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_setbufferbyte(struct ScriptContext *ctx) +bool8 ScrCmd_loadbyte(struct ScriptContext *ctx) { u8 index = ScriptReadByte(ctx); @@ -341,7 +341,7 @@ bool8 ScrCmd_setptrbyte(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_copybuffers(struct ScriptContext *ctx) +bool8 ScrCmd_copylocal(struct ScriptContext *ctx) { u8 destIndex = ScriptReadByte(ctx); u8 srcIndex = ScriptReadByte(ctx); -- cgit v1.2.3 From 0f0f7856f135317f98de81675c98aa46564b59ee Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 30 Sep 2017 16:41:50 -0500 Subject: update --- asm/macros/event.inc | 5 +-- data/script_cmd_table.inc | 96 +++++++++++++++++++++++------------------------ src/scrcmd.c | 96 +++++++++++++++++++++++------------------------ 3 files changed, 97 insertions(+), 100 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 22ea4aaed..489e7c275 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -227,12 +227,9 @@ .endm @ Generic compare macro which attempts to deduce argument types based on their values - @ Any negative values are considered local variable indentifiers @ Any values between 0x4000 to 0x4FFF and 0x8000 to 0x8FFF are considered event variable identifiers .macro compare arg1, arg2 - .if (\arg1 < 0) && (\arg2 >= 0 && \arg2 < 0xFF) - compare_local_to_imm -\arg1, \arg2 - .elseif ((\arg1 >> 12) == 4 || (\arg1 >> 12) == 8) && ((\arg2 >> 12) == 4 || (\arg2 >> 12) == 8) + .if ((\arg1 >> 12) == 4 || (\arg1 >> 12) == 8) && ((\arg2 >> 12) == 4 || (\arg2 >> 12) == 8) compare_var_to_var \arg1, \arg2 .elseif ((\arg1 >> 12) == 4 || (\arg1 >> 12) == 8) && (\arg2 >= 0 && \arg2 <= 0xFFFF) compare_var_to_imm \arg1, \arg2 diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index a3d96c0a1..4295c0b63 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -27,45 +27,45 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_subvar @ 0x18 .4byte ScrCmd_copyvar @ 0x19 .4byte ScrCmd_setorcopyvar @ 0x1A - .4byte ScrCmd_comparebuffers @ 0x1B - .4byte ScrCmd_comparebuffertobyte @ 0x1C - .4byte ScrCmd_comparebuffertoptrbyte @ 0x1D - .4byte ScrCmd_compareptrbytetobuffer @ 0x1E - .4byte ScrCmd_compareptrbytetobyte @ 0x1F - .4byte ScrCmd_compareptrbytes @ 0x20 - .4byte ScrCmd_compare @ 0x21 - .4byte ScrCmd_comparevars @ 0x22 - .4byte ScrCmd_callasm @ 0x23 - .4byte ScrCmd_jumpasm @ 0x24 + .4byte ScrCmd_compare_local_to_local @ 0x1B + .4byte ScrCmd_compare_local_to_imm @ 0x1C + .4byte ScrCmd_compare_local_to_addr @ 0x1D + .4byte ScrCmd_compare_addr_to_local @ 0x1E + .4byte ScrCmd_compare_addr_to_imm @ 0x1F + .4byte ScrCmd_compare_addr_to_addr @ 0x20 + .4byte ScrCmd_compare_var_to_imm @ 0x21 + .4byte ScrCmd_compare_var_to_var @ 0x22 + .4byte ScrCmd_callnative @ 0x23 + .4byte ScrCmd_gotonative @ 0x24 .4byte ScrCmd_special @ 0x25 - .4byte ScrCmd_specialval @ 0x26 + .4byte ScrCmd_specialvar @ 0x26 .4byte ScrCmd_waitstate @ 0x27 - .4byte ScrCmd_pause @ 0x28 + .4byte ScrCmd_delay @ 0x28 .4byte ScrCmd_setflag @ 0x29 .4byte ScrCmd_clearflag @ 0x2A .4byte ScrCmd_checkflag @ 0x2B - .4byte ScrCmd_compareflags @ 0x2C - .4byte ScrCmd_checkdailyflags @ 0x2D - .4byte ScrCmd_resetvars @ 0x2E - .4byte ScrCmd_playsfx @ 0x2F - .4byte ScrCmd_checksound @ 0x30 - .4byte ScrCmd_fanfare @ 0x31 + .4byte ScrCmd_initclock @ 0x2C + .4byte ScrCmd_dodailyevents @ 0x2D + .4byte ScrCmd_gettime @ 0x2E + .4byte ScrCmd_playse @ 0x2F + .4byte ScrCmd_waitse @ 0x30 + .4byte ScrCmd_playfanfare @ 0x31 .4byte ScrCmd_waitfanfare @ 0x32 - .4byte ScrCmd_playmusic @ 0x33 - .4byte ScrCmd_playmusicbattle @ 0x34 - .4byte ScrCmd_fadedefault @ 0x35 - .4byte ScrCmd_fademusic @ 0x36 - .4byte ScrCmd_fadeout @ 0x37 - .4byte ScrCmd_fadein @ 0x38 + .4byte ScrCmd_playbgm @ 0x33 + .4byte ScrCmd_savebgm @ 0x34 + .4byte ScrCmd_fadedefaultbgm @ 0x35 + .4byte ScrCmd_fadenewbgm @ 0x36 + .4byte ScrCmd_fadeoutbgm @ 0x37 + .4byte ScrCmd_fadeinbgm @ 0x38 .4byte ScrCmd_warp @ 0x39 - .4byte ScrCmd_warpmuted @ 0x3A - .4byte ScrCmd_warpwalk @ 0x3B + .4byte ScrCmd_warpsilent @ 0x3A + .4byte ScrCmd_warpdoor @ 0x3B .4byte ScrCmd_warphole @ 0x3C .4byte ScrCmd_warpteleport @ 0x3D - .4byte ScrCmd_warp3 @ 0x3E - .4byte ScrCmd_warpplace @ 0x3F - .4byte ScrCmd_warp4 @ 0x40 - .4byte ScrCmd_warp5 @ 0x41 + .4byte ScrCmd_setwarp @ 0x3E + .4byte ScrCmd_setdynamicwarp @ 0x3F + .4byte ScrCmd_setdivewarp @ 0x40 + .4byte ScrCmd_setholewarp @ 0x41 .4byte ScrCmd_getplayerxy @ 0x42 .4byte ScrCmd_countpokemon @ 0x43 .4byte ScrCmd_additem @ 0x44 @@ -77,28 +77,28 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_checkpcitem @ 0x4A .4byte ScrCmd_adddecor @ 0x4B .4byte ScrCmd_removedecor @ 0x4C - .4byte ScrCmd_testdecor @ 0x4D + .4byte ScrCmd_hasdecor @ 0x4D .4byte ScrCmd_checkdecor @ 0x4E - .4byte ScrCmd_move @ 0x4F - .4byte ScrCmd_movecoords @ 0x50 - .4byte ScrCmd_waitmove @ 0x51 - .4byte ScrCmd_waitmovexy @ 0x52 - .4byte ScrCmd_disappear @ 0x53 - .4byte ScrCmd_disappearxy @ 0x54 - .4byte ScrCmd_reappear @ 0x55 - .4byte ScrCmd_reappearxy @ 0x56 - .4byte ScrCmd_movesprite @ 0x57 - .4byte ScrCmd_spritevisible @ 0x58 - .4byte ScrCmd_spriteinvisible @ 0x59 + .4byte ScrCmd_applymovement @ 0x4F + .4byte ScrCmd_applymovement_at @ 0x50 + .4byte ScrCmd_waitmovement @ 0x51 + .4byte ScrCmd_waitmovement_at @ 0x52 + .4byte ScrCmd_removeobject @ 0x53 + .4byte ScrCmd_removeobject_at @ 0x54 + .4byte ScrCmd_addobject @ 0x55 + .4byte ScrCmd_addobject_at @ 0x56 + .4byte ScrCmd_setobjectxy @ 0x57 + .4byte ScrCmd_showobject @ 0x58 + .4byte ScrCmd_hideobject @ 0x59 .4byte ScrCmd_faceplayer @ 0x5A - .4byte ScrCmd_spriteface @ 0x5B + .4byte ScrCmd_turnobject @ 0x5B .4byte ScrCmd_trainerbattle @ 0x5C - .4byte ScrCmd_reptrainerbattle @ 0x5D - .4byte ScrCmd_endtrainerbattle @ 0x5E - .4byte ScrCmd_endtrainerbattle2 @ 0x5F + .4byte ScrCmd_battlebegin @ 0x5D + .4byte ScrCmd_ontrainerbattleend @ 0x5E + .4byte ScrCmd_ontrainerbattleendgoto @ 0x5F .4byte ScrCmd_checktrainerflag @ 0x60 - .4byte ScrCmd_cleartrainerflag @ 0x61 - .4byte ScrCmd_settrainerflag @ 0x62 + .4byte ScrCmd_settrainerflag @ 0x61 + .4byte ScrCmd_cleartrainerflag @ 0x62 .4byte ScrCmd_movespriteperm @ 0x63 .4byte ScrCmd_moveoffscreen @ 0x64 .4byte ScrCmd_spritebehave @ 0x65 diff --git a/src/scrcmd.c b/src/scrcmd.c index df85bdc1c..f2a2da881 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -107,7 +107,7 @@ bool8 ScrCmd_end(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_jumpasm(struct ScriptContext *ctx) +bool8 ScrCmd_gotonative(struct ScriptContext *ctx) { bool8 (*addr)(void) = (bool8 (*)(void))ScriptReadWord(ctx); @@ -123,7 +123,7 @@ bool8 ScrCmd_special(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_specialval(struct ScriptContext *ctx) +bool8 ScrCmd_specialvar(struct ScriptContext *ctx) { u16 *var = GetVarPointer(ScriptReadHalfword(ctx)); @@ -131,7 +131,7 @@ bool8 ScrCmd_specialval(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_callasm(struct ScriptContext *ctx) +bool8 ScrCmd_callnative(struct ScriptContext *ctx) { NativeFunc func = (NativeFunc)ScriptReadWord(ctx); @@ -388,7 +388,7 @@ u8 compare_012(u16 a1, u16 a2) } // comparelocaltolocal -bool8 ScrCmd_comparebuffers(struct ScriptContext *ctx) +bool8 ScrCmd_compare_local_to_local(struct ScriptContext *ctx) { u8 value1 = ctx->data[ScriptReadByte(ctx)]; u8 value2 = ctx->data[ScriptReadByte(ctx)]; @@ -398,7 +398,7 @@ bool8 ScrCmd_comparebuffers(struct ScriptContext *ctx) } // comparelocaltoimm -bool8 ScrCmd_comparebuffertobyte(struct ScriptContext *ctx) +bool8 ScrCmd_compare_local_to_imm(struct ScriptContext *ctx) { u8 value1 = ctx->data[ScriptReadByte(ctx)]; u8 value2 = ScriptReadByte(ctx); @@ -407,7 +407,7 @@ bool8 ScrCmd_comparebuffertobyte(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_comparebuffertoptrbyte(struct ScriptContext *ctx) +bool8 ScrCmd_compare_local_to_addr(struct ScriptContext *ctx) { u8 value1 = ctx->data[ScriptReadByte(ctx)]; u8 value2 = *(u8 *)ScriptReadWord(ctx); @@ -416,7 +416,7 @@ bool8 ScrCmd_comparebuffertoptrbyte(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_compareptrbytetobuffer(struct ScriptContext *ctx) +bool8 ScrCmd_compare_addr_to_local(struct ScriptContext *ctx) { u8 value1 = *(u8 *)ScriptReadWord(ctx); u8 value2 = ctx->data[ScriptReadByte(ctx)]; @@ -425,7 +425,7 @@ bool8 ScrCmd_compareptrbytetobuffer(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_compareptrbytetobyte(struct ScriptContext *ctx) +bool8 ScrCmd_compare_addr_to_imm(struct ScriptContext *ctx) { u8 value1 = *(u8 *)ScriptReadWord(ctx); u8 value2 = ScriptReadByte(ctx); @@ -434,7 +434,7 @@ bool8 ScrCmd_compareptrbytetobyte(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_compareptrbytes(struct ScriptContext *ctx) +bool8 ScrCmd_compare_addr_to_addr(struct ScriptContext *ctx) { u8 value1 = *(u8 *)ScriptReadWord(ctx); u8 value2 = *(u8 *)ScriptReadWord(ctx); @@ -443,7 +443,7 @@ bool8 ScrCmd_compareptrbytes(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_compare(struct ScriptContext *ctx) +bool8 ScrCmd_compare_var_to_imm(struct ScriptContext *ctx) { u16 value1 = *GetVarPointer(ScriptReadHalfword(ctx)); u16 value2 = ScriptReadHalfword(ctx); @@ -452,7 +452,7 @@ bool8 ScrCmd_compare(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_comparevars(struct ScriptContext *ctx) +bool8 ScrCmd_compare_var_to_var(struct ScriptContext *ctx) { u16 *ptr1 = GetVarPointer(ScriptReadHalfword(ctx)); u16 *ptr2 = GetVarPointer(ScriptReadHalfword(ctx)); @@ -569,7 +569,7 @@ bool8 ScrCmd_checkdecor(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_testdecor(struct ScriptContext *ctx) +bool8 ScrCmd_hasdecor(struct ScriptContext *ctx) { u32 decorId = VarGet(ScriptReadHalfword(ctx)); @@ -651,14 +651,14 @@ bool8 s28_pause_asm() return FALSE; } -bool8 ScrCmd_pause(struct ScriptContext *ctx) +bool8 ScrCmd_delay(struct ScriptContext *ctx) { sPauseCounter = ScriptReadHalfword(ctx); SetupNativeScript(ctx, s28_pause_asm); return TRUE; } -bool8 ScrCmd_compareflags(struct ScriptContext *ctx) +bool8 ScrCmd_initclock(struct ScriptContext *ctx) { u8 hour = VarGet(ScriptReadHalfword(ctx)); u8 minute = VarGet(ScriptReadHalfword(ctx)); @@ -667,13 +667,13 @@ bool8 ScrCmd_compareflags(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_checkdailyflags(struct ScriptContext *ctx) +bool8 ScrCmd_dodailyevents(struct ScriptContext *ctx) { DoTimeBasedEvents(); return FALSE; } -bool8 ScrCmd_resetvars(struct ScriptContext *ctx) +bool8 ScrCmd_gettime(struct ScriptContext *ctx) { RtcCalcLocalTime(); gSpecialVar_0x8000 = gLocalTime.hours; @@ -730,7 +730,7 @@ bool8 ScrCmd_warp(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_warpmuted(struct ScriptContext *ctx) +bool8 ScrCmd_warpsilent(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); @@ -744,7 +744,7 @@ bool8 ScrCmd_warpmuted(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_warpwalk(struct ScriptContext *ctx) +bool8 ScrCmd_warpdoor(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); @@ -789,7 +789,7 @@ bool8 ScrCmd_warpteleport(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_warp3(struct ScriptContext *ctx) +bool8 ScrCmd_setwarp(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); @@ -801,7 +801,7 @@ bool8 ScrCmd_warp3(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_warpplace(struct ScriptContext *ctx) +bool8 ScrCmd_setdynamicwarp(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); @@ -813,7 +813,7 @@ bool8 ScrCmd_warpplace(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_warp4(struct ScriptContext *ctx) +bool8 ScrCmd_setdivewarp(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); @@ -825,7 +825,7 @@ bool8 ScrCmd_warp4(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_warp5(struct ScriptContext *ctx) +bool8 ScrCmd_setholewarp(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); @@ -865,7 +865,7 @@ bool8 ScrCmd_countpokemon(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_playsfx(struct ScriptContext *ctx) +bool8 ScrCmd_playse(struct ScriptContext *ctx) { PlaySE(ScriptReadHalfword(ctx)); return FALSE; @@ -879,13 +879,13 @@ static bool8 WaitForSoundEffectFinish() return FALSE; } -bool8 ScrCmd_checksound(struct ScriptContext *ctx) +bool8 ScrCmd_waitse(struct ScriptContext *ctx) { SetupNativeScript(ctx, WaitForSoundEffectFinish); return TRUE; } -bool8 ScrCmd_fanfare(struct ScriptContext *ctx) +bool8 ScrCmd_playfanfare(struct ScriptContext *ctx) { PlayFanfare(ScriptReadHalfword(ctx)); return FALSE; @@ -902,7 +902,7 @@ bool8 ScrCmd_waitfanfare(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_playmusic(struct ScriptContext *ctx) +bool8 ScrCmd_playbgm(struct ScriptContext *ctx) { u16 songId = ScriptReadHalfword(ctx); bool8 val = ScriptReadByte(ctx); @@ -913,25 +913,25 @@ bool8 ScrCmd_playmusic(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_playmusicbattle(struct ScriptContext *ctx) +bool8 ScrCmd_savebgm(struct ScriptContext *ctx) { Overworld_SetSavedMusic(ScriptReadHalfword(ctx)); return FALSE; } -bool8 ScrCmd_fadedefault(struct ScriptContext *ctx) +bool8 ScrCmd_fadedefaultbgm(struct ScriptContext *ctx) { Overworld_ChangeMusicToDefault(); return FALSE; } -bool8 ScrCmd_fademusic(struct ScriptContext *ctx) +bool8 ScrCmd_fadenewbgm(struct ScriptContext *ctx) { Overworld_ChangeMusicTo(ScriptReadHalfword(ctx)); return FALSE; } -bool8 ScrCmd_fadeout(struct ScriptContext *ctx) +bool8 ScrCmd_fadeoutbgm(struct ScriptContext *ctx) { u8 speed = ScriptReadByte(ctx); @@ -943,7 +943,7 @@ bool8 ScrCmd_fadeout(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_fadein(struct ScriptContext *ctx) +bool8 ScrCmd_fadeinbgm(struct ScriptContext *ctx) { u8 speed = ScriptReadByte(ctx); @@ -954,7 +954,7 @@ bool8 ScrCmd_fadein(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_move(struct ScriptContext *ctx) +bool8 ScrCmd_applymovement(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); void *movementScript = (void *)ScriptReadWord(ctx); @@ -964,7 +964,7 @@ bool8 ScrCmd_move(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_movecoords(struct ScriptContext *ctx) +bool8 ScrCmd_applymovement_at(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); void *movementScript = (void *)ScriptReadWord(ctx); @@ -981,7 +981,7 @@ static bool8 WaitForMovementFinish(void) return ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapId, sMovingNpcMapBank); } -bool8 ScrCmd_waitmove(struct ScriptContext *ctx) +bool8 ScrCmd_waitmovement(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); @@ -993,7 +993,7 @@ bool8 ScrCmd_waitmove(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_waitmovexy(struct ScriptContext *ctx) +bool8 ScrCmd_waitmovement_at(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 mapBank; @@ -1009,7 +1009,7 @@ bool8 ScrCmd_waitmovexy(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_disappear(struct ScriptContext *ctx) +bool8 ScrCmd_removeobject(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); @@ -1017,7 +1017,7 @@ bool8 ScrCmd_disappear(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_disappearxy(struct ScriptContext *ctx) +bool8 ScrCmd_removeobject_at(struct ScriptContext *ctx) { u16 objectId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); @@ -1027,7 +1027,7 @@ bool8 ScrCmd_disappearxy(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_reappear(struct ScriptContext *ctx) +bool8 ScrCmd_addobject(struct ScriptContext *ctx) { u16 objectId = VarGet(ScriptReadHalfword(ctx)); @@ -1035,7 +1035,7 @@ bool8 ScrCmd_reappear(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_reappearxy(struct ScriptContext *ctx) +bool8 ScrCmd_addobject_at(struct ScriptContext *ctx) { u16 objectId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); @@ -1045,7 +1045,7 @@ bool8 ScrCmd_reappearxy(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_movesprite(struct ScriptContext *ctx) +bool8 ScrCmd_setobjectxy(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u16 x = VarGet(ScriptReadHalfword(ctx)); @@ -1073,7 +1073,7 @@ bool8 ScrCmd_moveoffscreen(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_spritevisible(struct ScriptContext *ctx) +bool8 ScrCmd_showobject(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); @@ -1083,7 +1083,7 @@ bool8 ScrCmd_spritevisible(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_spriteinvisible(struct ScriptContext *ctx) +bool8 ScrCmd_hideobject(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); @@ -1124,7 +1124,7 @@ bool8 ScrCmd_faceplayer(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_spriteface(struct ScriptContext *ctx) +bool8 ScrCmd_turnobject(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 direction = ScriptReadByte(ctx); @@ -1692,19 +1692,19 @@ bool8 ScrCmd_trainerbattle(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_reptrainerbattle(struct ScriptContext *ctx) +bool8 ScrCmd_battlebegin(struct ScriptContext *ctx) { BattleSetup_StartTrainerBattle(); return TRUE; } -bool8 ScrCmd_endtrainerbattle(struct ScriptContext *ctx) +bool8 ScrCmd_ontrainerbattleend(struct ScriptContext *ctx) { ctx->scriptPtr = BattleSetup_GetScriptAddrAfterBattle(); return FALSE; } -bool8 ScrCmd_endtrainerbattle2(struct ScriptContext *ctx) +bool8 ScrCmd_ontrainerbattleendgoto(struct ScriptContext *ctx) { ctx->scriptPtr = BattleSetup_GetTrainerPostBattleScript(); return FALSE; @@ -1718,7 +1718,7 @@ bool8 ScrCmd_checktrainerflag(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_cleartrainerflag(struct ScriptContext *ctx) +bool8 ScrCmd_settrainerflag(struct ScriptContext *ctx) { u16 index = VarGet(ScriptReadHalfword(ctx)); @@ -1726,7 +1726,7 @@ bool8 ScrCmd_cleartrainerflag(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_settrainerflag(struct ScriptContext *ctx) +bool8 ScrCmd_cleartrainerflag(struct ScriptContext *ctx) { u16 index = VarGet(ScriptReadHalfword(ctx)); -- cgit v1.2.3 From e926119b726839bc687c503db3680899906aad0d Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 30 Sep 2017 17:04:25 -0500 Subject: update --- asm/macros/event.inc | 30 ++--- data-de/event_scripts.s | 136 ++++++++++----------- data-de/field_move_scripts.inc | 24 ++-- data/event_scripts.s | 136 ++++++++++----------- data/field_move_scripts.inc | 24 ++-- data/script_cmd_table.inc | 30 ++--- data/scripts/berry_tree.inc | 28 ++--- data/scripts/cable_club.inc | 92 +++++++------- data/scripts/contest_hall.inc | 40 +++--- data/scripts/day_care.inc | 4 +- data/scripts/magma_chimney.inc | 8 +- data/scripts/maps/AncientTomb.inc | 4 +- data/scripts/maps/AquaHideout_B2F.inc | 2 +- data/scripts/maps/BattleTower_BattleRoom.inc | 8 +- data/scripts/maps/BattleTower_Lobby.inc | 42 +++---- data/scripts/maps/BattleTower_Outside.inc | 8 +- data/scripts/maps/CaveOfOrigin_B4F.inc | 4 +- data/scripts/maps/DesertRuins.inc | 4 +- data/scripts/maps/DewfordTown.inc | 20 +-- data/scripts/maps/DewfordTown_Gym.inc | 2 +- data/scripts/maps/DewfordTown_Hall.inc | 4 +- data/scripts/maps/DewfordTown_PokemonCenter_1F.inc | 2 +- data/scripts/maps/EverGrandeCity_ChampionsRoom.inc | 8 +- data/scripts/maps/EverGrandeCity_HallOfFame.inc | 4 +- .../maps/EverGrandeCity_PokemonCenter_1F.inc | 2 +- data/scripts/maps/EverGrandeCity_PokemonLeague.inc | 22 ++-- data/scripts/maps/FallarborTown_ContestLobby.inc | 6 +- data/scripts/maps/FallarborTown_Mart.inc | 2 +- .../maps/FallarborTown_PokemonCenter_1F.inc | 4 +- data/scripts/maps/FortreeCity.inc | 2 +- data/scripts/maps/FortreeCity_DecorationShop.inc | 4 +- data/scripts/maps/FortreeCity_Gym.inc | 2 +- data/scripts/maps/FortreeCity_House4.inc | 2 +- data/scripts/maps/FortreeCity_Mart.inc | 2 +- data/scripts/maps/FortreeCity_PokemonCenter_1F.inc | 2 +- data/scripts/maps/GraniteCave_StevensRoom.inc | 2 +- data/scripts/maps/IslandCave.inc | 2 +- data/scripts/maps/LavaridgeTown.inc | 18 +-- data/scripts/maps/LavaridgeTown_Gym_1F.inc | 12 +- data/scripts/maps/LavaridgeTown_HerbShop.inc | 2 +- data/scripts/maps/LavaridgeTown_Mart.inc | 2 +- .../maps/LavaridgeTown_PokemonCenter_1F.inc | 2 +- data/scripts/maps/LilycoveCity.inc | 2 +- data/scripts/maps/LilycoveCity_ContestLobby.inc | 56 ++++----- .../scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc | 8 +- .../scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc | 2 +- .../maps/LilycoveCity_DepartmentStoreElevator.inc | 6 +- .../maps/LilycoveCity_DepartmentStoreRooftop.inc | 6 +- .../maps/LilycoveCity_DepartmentStore_1F.inc | 2 +- .../maps/LilycoveCity_DepartmentStore_2F.inc | 4 +- .../maps/LilycoveCity_DepartmentStore_3F.inc | 4 +- .../maps/LilycoveCity_DepartmentStore_4F.inc | 4 +- .../maps/LilycoveCity_DepartmentStore_5F.inc | 8 +- data/scripts/maps/LilycoveCity_Harbor.inc | 12 +- data/scripts/maps/LilycoveCity_House3.inc | 6 +- .../maps/LilycoveCity_LilycoveMuseum_1F.inc | 2 +- .../maps/LilycoveCity_LilycoveMuseum_2F.inc | 14 +-- .../scripts/maps/LilycoveCity_PokemonCenter_1F.inc | 2 +- .../maps/LilycoveCity_PokemonTrainerFanClub.inc | 16 +-- data/scripts/maps/LittlerootTown.inc | 32 ++--- .../maps/LittlerootTown_BrendansHouse_1F.inc | 14 +-- .../maps/LittlerootTown_BrendansHouse_2F.inc | 4 +- data/scripts/maps/LittlerootTown_MaysHouse_1F.inc | 14 +-- data/scripts/maps/LittlerootTown_MaysHouse_2F.inc | 8 +- .../maps/LittlerootTown_ProfessorBirchsLab.inc | 4 +- data/scripts/maps/MauvilleCity.inc | 10 +- data/scripts/maps/MauvilleCity_BikeShop.inc | 18 +-- data/scripts/maps/MauvilleCity_GameCorner.inc | 16 +-- data/scripts/maps/MauvilleCity_Gym.inc | 2 +- data/scripts/maps/MauvilleCity_Mart.inc | 2 +- .../scripts/maps/MauvilleCity_PokemonCenter_1F.inc | 2 +- data/scripts/maps/MeteorFalls_1F_1R.inc | 12 +- data/scripts/maps/MossdeepCity_GameCorner_1F.inc | 14 +-- data/scripts/maps/MossdeepCity_GameCorner_B1F.inc | 8 +- data/scripts/maps/MossdeepCity_Gym.inc | 2 +- data/scripts/maps/MossdeepCity_House2.inc | 2 +- data/scripts/maps/MossdeepCity_Mart.inc | 2 +- .../scripts/maps/MossdeepCity_PokemonCenter_1F.inc | 2 +- data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc | 4 +- data/scripts/maps/MossdeepCity_StevensHouse.inc | 10 +- data/scripts/maps/MtChimney_CableCarStation.inc | 10 +- data/scripts/maps/MtPyre_Summit.inc | 6 +- data/scripts/maps/OldaleTown.inc | 16 +-- data/scripts/maps/OldaleTown_Mart.inc | 2 +- data/scripts/maps/OldaleTown_PokemonCenter_1F.inc | 2 +- .../maps/PacifidlogTown_PokemonCenter_1F.inc | 2 +- data/scripts/maps/PetalburgCity.inc | 10 +- data/scripts/maps/PetalburgCity_Gym.inc | 18 +-- data/scripts/maps/PetalburgCity_Mart.inc | 2 +- .../maps/PetalburgCity_PokemonCenter_1F.inc | 2 +- data/scripts/maps/PetalburgWoods.inc | 18 +-- data/scripts/maps/Route101.inc | 10 +- data/scripts/maps/Route103.inc | 2 +- data/scripts/maps/Route104.inc | 4 +- data/scripts/maps/Route104_MrBrineysHouse.inc | 12 +- .../maps/Route104_PrettyPetalFlowerShop.inc | 4 +- data/scripts/maps/Route104_Prototype.inc | 2 +- data/scripts/maps/Route109.inc | 16 +-- data/scripts/maps/Route110.inc | 12 +- .../Route110_SeasideCyclingRoadNorthEntrance.inc | 2 +- .../Route110_SeasideCyclingRoadSouthEntrance.inc | 2 +- data/scripts/maps/Route110_TrickHouseEnd.inc | 20 +-- data/scripts/maps/Route110_TrickHouseEntrance.inc | 16 +-- data/scripts/maps/Route110_TrickHousePuzzle5.inc | 4 +- data/scripts/maps/Route111.inc | 14 +-- data/scripts/maps/Route111_OldLadysRestStop.inc | 2 +- .../maps/Route111_WinstrateFamilysHouse.inc | 2 +- data/scripts/maps/Route112_CableCarStation.inc | 10 +- data/scripts/maps/Route113_GlassWorkshop.inc | 8 +- data/scripts/maps/Route116.inc | 8 +- data/scripts/maps/Route117.inc | 2 +- data/scripts/maps/Route118.inc | 2 +- data/scripts/maps/Route119.inc | 14 +-- data/scripts/maps/Route119_WeatherInstitute_1F.inc | 6 +- data/scripts/maps/Route119_WeatherInstitute_2F.inc | 16 +-- data/scripts/maps/Route120.inc | 8 +- data/scripts/maps/Route121.inc | 2 +- data/scripts/maps/Route121_SafariZoneEntrance.inc | 6 +- .../maps/Route124_DivingTreasureHuntersHouse.inc | 2 +- data/scripts/maps/Route128.inc | 12 +- data/scripts/maps/RustboroCity.inc | 30 ++--- data/scripts/maps/RustboroCity_DevonCorp_1F.inc | 4 +- data/scripts/maps/RustboroCity_DevonCorp_2F.inc | 12 +- data/scripts/maps/RustboroCity_DevonCorp_3F.inc | 18 +-- data/scripts/maps/RustboroCity_Gym.inc | 2 +- data/scripts/maps/RustboroCity_Mart.inc | 2 +- .../scripts/maps/RustboroCity_PokemonCenter_1F.inc | 2 +- data/scripts/maps/RustboroCity_PokemonSchool.inc | 8 +- data/scripts/maps/RusturfTunnel.inc | 28 ++--- data/scripts/maps/SSTidalRooms.inc | 2 +- data/scripts/maps/SafariZone_Southeast.inc | 6 +- data/scripts/maps/SeafloorCavern_Room9.inc | 10 +- data/scripts/maps/SealedChamber_InnerRoom.inc | 16 +-- data/scripts/maps/SealedChamber_OuterRoom.inc | 24 ++-- data/scripts/maps/SlateportCity.inc | 60 ++++----- data/scripts/maps/SlateportCity_ContestLobby.inc | 6 +- data/scripts/maps/SlateportCity_Harbor.inc | 26 ++-- data/scripts/maps/SlateportCity_Mart.inc | 2 +- .../maps/SlateportCity_OceanicMuseum_1F.inc | 6 +- .../maps/SlateportCity_OceanicMuseum_2F.inc | 14 +-- .../maps/SlateportCity_PokemonCenter_1F.inc | 2 +- .../maps/SlateportCity_SternsShipyard_1F.inc | 4 +- data/scripts/maps/SootopolisCity.inc | 34 +++--- data/scripts/maps/SootopolisCity_Gym_1F.inc | 2 +- data/scripts/maps/SootopolisCity_House8.inc | 4 +- data/scripts/maps/SootopolisCity_Mart.inc | 2 +- .../maps/SootopolisCity_PokemonCenter_1F.inc | 2 +- data/scripts/maps/SouthernIsland_Exterior.inc | 2 +- data/scripts/maps/Underwater_SealedChamber.inc | 2 +- data/scripts/maps/VerdanturfTown_ContestLobby.inc | 6 +- data/scripts/maps/VerdanturfTown_Mart.inc | 2 +- .../maps/VerdanturfTown_PokemonCenter_1F.inc | 2 +- data/scripts/maps/VictoryRoad_1F.inc | 2 +- data/scripts/mauville_man.inc | 20 +-- data/scripts/mystery_event_club.inc | 6 +- data/scripts/players_house.inc | 24 ++-- data/scripts/pokeblocks.inc | 2 +- data/scripts/safari_zone.inc | 8 +- data/scripts/secret_power_tm.inc | 2 +- data/scripts/tv.inc | 6 +- src/scrcmd.c | 30 ++--- 161 files changed, 920 insertions(+), 920 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 489e7c275..f7b6930fb 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -691,26 +691,26 @@ .2byte \trainer .endm - .macro movespriteperm word1, word2, word3 + .macro setobjectxyperm word1, word2, word3 .byte 0x63 .2byte \word1 .2byte \word2 .2byte \word3 .endm - .macro moveoffscreen word + .macro moveobjectoffscreen word .byte 0x64 .2byte \word .endm - .macro spritebehave word, byte + .macro setobjectmovementtype word, byte .byte 0x65 .2byte \word .byte \byte .endm @ If a standard message box (or its text) is being drawn on-screen, this command blocks script execution until the box and its text have been fully drawn. - .macro waittext + .macro waitmessage .byte 0x66 .endm @@ -721,7 +721,7 @@ .endm @ Holds the current message box open until the player presses a key. The message box is then closed. - .macro closebutton + .macro closemessage .byte 0x68 .endm @@ -767,7 +767,7 @@ .endm @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. Lists of options are predefined and the one to be used is specified with list. The default argument determines the initial position of the cursor when the box is first opened; it is zero-indexed, and if it is too large, it is treated as 0x00. If B is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button. - .macro multichoicedef X, Y, list, default, B + .macro multichoicedefault X, Y, list, default, B .byte 0x70 .byte \X .byte \Y @@ -777,7 +777,7 @@ .endm @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. Lists of options are predefined and the one to be used is specified with list. The per_row argument determines how many list items will be shown on a single row of the box. - .macro multichoicerow X, Y, list, per_row, B + .macro multichoicegrid X, Y, list, per_row, B .byte 0x71 .byte \X .byte \Y @@ -786,7 +786,7 @@ .byte \B .endm - .macro showbox byte1, byte2, byte3, byte4 + .macro drawbox byte1, byte2, byte3, byte4 .byte 0x72 .byte \byte1 .byte \byte2 @@ -794,7 +794,7 @@ .byte \byte4 .endm - .macro hidebox byte1, byte2, byte3, byte4 + .macro erasebox byte1, byte2, byte3, byte4 .byte 0x73 .byte \byte1 .byte \byte2 @@ -802,7 +802,7 @@ .byte \byte4 .endm - .macro clearbox byte1, byte2, byte3, byte4 + .macro drawboxtext byte1, byte2, byte3, byte4 .byte 0x74 .byte \byte1 .byte \byte2 @@ -811,7 +811,7 @@ .endm @ Displays a box containing the front sprite for the specified (species) Pokmon species. - .macro showpokepic species, X, Y + .macro drawpokepic species, X, Y .byte 0x75 .2byte \species .byte \X @@ -819,12 +819,12 @@ .endm @ Hides all boxes displayed with showpokepic. - .macro hidepokepic + .macro erasepokepic .byte 0x76 .endm @ In FireRed, this command is a nop. (The argument is discarded.) - .macro showcontestwinner a + .macro drawcontestwinner a .byte 0x77 .byte \a .endm @@ -836,7 +836,7 @@ .endm @ Gives the player one of the specified (species) Pokmon at level level holding item. The unknown arguments should all be zeroes. - .macro givepokemon species, level, item, unknown1, unknown2, unknown3 + .macro givepoke species, level, item, unknown1, unknown2, unknown3 .byte 0x79 .2byte \species .byte \level @@ -859,7 +859,7 @@ .endm @ Checks if at least one Pokmon in the player's party knows the specified (index) attack. If so, variable 0x800D (LASTRESULT) is set to the (zero-indexed) slot number of the Pokmon that knows the move. If not, LASTRESULT is set to 0x0006. - .macro checkattack index + .macro checkpokemove index .byte 0x7c .2byte \index .endm diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index 465fc1536..70daa8548 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -390,7 +390,7 @@ gUnknown_0815F36C:: @ 815F36C message UnknownString_81A3A72 doanimation 61 waitstate - waittext + waitmessage waitbutton playse 5 goto EventScript_15F384 @@ -398,7 +398,7 @@ gUnknown_0815F36C:: @ 815F36C EventScript_15F384: message UnknownString_81A3A87 - waittext + waitmessage checkflag 268 goto_if_eq EventScript_15F3A0 goto EventScript_15F3E2 @@ -432,7 +432,7 @@ EventScript_15F419: msgbox UnknownString_81A38FB, 5 compare RESULT, 0 goto_if_eq EventScript_15F384 - closebutton + closemessage special SecretBasePC_PackUp releaseall end @@ -451,7 +451,7 @@ gUnknown_0815F43A:: @ 815F43A playse 2 doanimation 61 waitstate - waittext + waitmessage waitbutton playse 5 goto EventScript_15F452 @@ -459,7 +459,7 @@ gUnknown_0815F43A:: @ 815F43A EventScript_15F452: message UnknownString_81A3A87 - waittext + waitmessage multichoice 0, 0, 7, 0 switch RESULT case 0, EventScript_15F4A1 @@ -503,19 +503,19 @@ EventScript_15F4E0: EventScript_15F503: msgbox UnknownString_81A39C0, 3 special sub_80C683C - closebutton + closemessage releaseall end EventScript_15F511: message UnknownString_81A3AA2 - waittext + waitmessage goto EventScript_15F452 end EventScript_15F51D: special sub_80C683C - closebutton + closemessage releaseall end @@ -891,7 +891,7 @@ Std_2: lock faceplayer message 0x0 - waittext + waitmessage waitbutton release return @@ -899,20 +899,20 @@ Std_2: Std_3: lockall message 0x0 - waittext + waitmessage waitbutton releaseall return Std_4: message 0x0 - waittext + waitmessage waitbutton return Std_5: message 0x0 - waittext + waitmessage yesnobox 20, 8 return @@ -967,7 +967,7 @@ gUnknown_0819F840:: @ 819F840 EventScript_19F870: special ScrSpecial_ShowTrainerNonBattlingSpeech - waittext + waitmessage waitbutton release end @@ -990,7 +990,7 @@ gUnknown_0819F887:: @ 819F887 special PlayTrainerEncounterMusic special sub_8082524 special ScrSpecial_ShowTrainerIntroSpeech - waittext + waitmessage waitbutton special ScrSpecial_StartTrainerEyeRematch waitstate @@ -1010,7 +1010,7 @@ gUnknown_0819F8AE:: @ 819F8AE special PlayTrainerEncounterMusic special sub_8082524 special ScrSpecial_ShowTrainerIntroSpeech - waittext + waitmessage waitbutton special ScrSpecial_StartTrainerEyeRematch waitstate @@ -1022,7 +1022,7 @@ EventScript_19F8DD: EventScript_19F8DE: special ScrSpecial_ShowTrainerNonBattlingSpeech - waittext + waitmessage waitbutton release end @@ -1038,7 +1038,7 @@ Movement_19F8F0:: EventScript_19F8F2: special ScrSpecial_ShowTrainerIntroSpeech - waittext + waitmessage waitbutton battlebegin specialvar RESULT, ScrSpecial_GetTrainerBattleMode @@ -1062,7 +1062,7 @@ EventScript_19F936: Std_6:: message 0x0 - waittext + waitmessage waitbutton release return @@ -1448,7 +1448,7 @@ VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C inccounter GAME_STAT_USED_POKECENTER message gText_NurseJoy_OkayIllTakeYourPokemon - waittext + waitmessage applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A083F waitmovement 0 doanimation 25 @@ -1463,16 +1463,16 @@ OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C OldaleTown_PokemonCenter_1F_EventScript_19FDB0:: @ 819FDB0 message gText_NurseJoy_ThankYouForWaiting - waittext + waitmessage applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_19FDF4 waitmovement 0 message gText_NurseJoy_WeHopeToSeeYouAgain - waittext + waitmessage return OldaleTown_PokemonCenter_1F_EventScript_19FDC7:: @ 819FDC7 message gText_NurseJoy_WeHopeToSeeYouAgain - waittext + waitmessage return OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE @@ -1485,7 +1485,7 @@ OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE OldaleTown_PokemonCenter_1F_EventScript_19FDEA:: @ 819FDEA message gText_NurseJoy_Pokerus - waittext + waitmessage setflag 273 return @@ -1552,7 +1552,7 @@ GetItem_HandlePocket_Berries: Std_ObtainItem_Success: @ 819FEB7 message Message_ObtainedItem waitfanfare - waittext + waitmessage msgbox Message_PutAwayItem setvar RESULT, 1 return @@ -1587,7 +1587,7 @@ Std_ObtainDecoration_Success: @ 819FF03 playfanfare 0x172 message Message_ObtainedDecoration waitfanfare - waittext + waitmessage msgbox Message_TransferredToPC setvar RESULT, 1 return @@ -1616,7 +1616,7 @@ Std_FindItem_Success: @ 819FF52 removeobject LAST_TALKED message Message_FoundOneItem waitfanfare - waittext + waitmessage msgbox Message_PutAwayItem return @@ -1643,7 +1643,7 @@ HiddenItemScript:: @ 819FF7B HiddenItemScript_Success: message Message_FoundOneItem waitfanfare - waittext + waitmessage msgbox Message_PutAwayItem special SetFlagInVar releaseall @@ -1672,7 +1672,7 @@ UnusedMixRecordsScript_Yes: @ 819FFFA faceplayer UnusedMixRecordsScript_Done: @ 81A0000 message UnusedMixRecordsSeeYouAgainText - waittext + waitmessage waitbutton release end @@ -1688,7 +1688,7 @@ gUnknown_081A0009:: @ 81A0009 EventScript_1A0023: message gPCText_WhichPCShouldBeAccessed - waittext + waitmessage special ScrSpecial_CreatePCMenu waitstate goto EventScript_1A0033 @@ -1816,7 +1816,7 @@ Route109_EventScript_1A010C:: @ 81A010C return UseSurfScript:: @ 81A0117 - checkattack MOVE_SURF + checkpokemove MOVE_SURF compare RESULT, 6 goto_if_eq UseSurfScript_NoMon bufferpartypoke 0, RESULT @@ -2203,7 +2203,7 @@ Route101_EventScript_1A039B:: @ 81A039B Route101_EventScript_1A03A5:: @ 81A03A5 copyvar 0x8004, 0x8009 special ShowPokedexRatingMessage - waittext + waitmessage waitbutton return @@ -2445,7 +2445,7 @@ Route119_EventScript_1A05AE:: @ 81A05AE Route119_EventScript_1A05C3:: @ 81A05C3 msgbox Route119_Text_171BF6, 4 - closebutton + closemessage applymovement LAST_TALKED, Route119_Movement_1A0839 waitmovement 0 applymovement LAST_TALKED, Route119_Movement_1A0662 @@ -2545,7 +2545,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_1A067F:: @ 81A067F bufferitem 0, 0x8004 playfanfare 372 message FallarborTown_House1_Text_1A1498 - waittext + waitmessage waitfanfare removeitem 0x8004, 1 return @@ -3270,7 +3270,7 @@ gUnknown_081A14B8:: @ 81A14B8 EventScript_1A14CA:: message UnknownString_81A1141 - waittext + waitmessage waitbutton special sub_8081924 waitstate @@ -3620,7 +3620,7 @@ gUnknown_081A2C51:: @ 81A2C51 special sub_80BB63C compare RESULT, 1 goto_if_eq EventScript_1A2E45 - checkattack MOVE_SECRET_POWER + checkpokemove MOVE_SECRET_POWER setanimation 0, RESULT bufferattack 1, MOVE_SECRET_POWER compare 0x8007, 1 @@ -3646,7 +3646,7 @@ EventScript_1A2CB0: compare RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 - closebutton + closemessage doanimation 11 waitstate goto EventScript_1A2CFA @@ -3677,7 +3677,7 @@ EventScript_1A2D08: compare RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 - closebutton + closemessage doanimation 26 waitstate goto EventScript_1A2D52 @@ -3708,7 +3708,7 @@ EventScript_1A2D60: compare RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 - closebutton + closemessage doanimation 27 waitstate goto EventScript_1A2DAA @@ -3731,7 +3731,7 @@ EventScript_1A2DAA: end EventScript_1A2DB8: - closebutton + closemessage playse 9 setvar 0x4097, 0 setflag 173 @@ -3751,13 +3751,13 @@ SecretBase_RedCave1_EventScript_1A2DDE:: @ 81A2DDE msgbox SecretBase_RedCave1_Text_198F89, 5 compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A2E08 - closebutton + closemessage playse 9 special sub_80BC440 end SecretBase_RedCave1_EventScript_1A2E08:: @ 81A2E08 - closebutton + closemessage setflag 96 special sub_80BBC78 waitstate @@ -3789,7 +3789,7 @@ EventScript_1A2E38: end EventScript_1A2E45: - checkattack MOVE_SECRET_POWER + checkpokemove MOVE_SECRET_POWER compare RESULT, 6 goto_if_eq EventScript_1A2EF7 setanimation 0, RESULT @@ -3804,7 +3804,7 @@ EventScript_1A2E45: goto_if_eq EventScript_1A2F3A fadescreen 1 special sub_80BC50C - closebutton + closemessage fadescreen 0 msgbox UnknownString_81A3CC9, 5 compare RESULT, 0 @@ -3812,8 +3812,8 @@ EventScript_1A2E45: bufferpartypoke 0, 0x8004 bufferattack 1, MOVE_SECRET_POWER msgbox UsedCutRockSmashText, 4 - closebutton - closebutton + closemessage + closemessage compare 0x8007, 1 goto_if_eq gUnknown_081A2CE6 compare 0x8007, 2 @@ -3845,7 +3845,7 @@ EventScript_1A2EF7:: end EventScript_1A2F3A:: - closebutton + closemessage releaseall end @@ -3968,7 +3968,7 @@ SecretBase_RedCave1_EventScript_1A3032:: @ 81A3032 call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A308F - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1B83, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -3980,7 +3980,7 @@ SecretBase_RedCave1_EventScript_1A3086:: @ 81A3086 SecretBase_RedCave1_EventScript_1A308F:: @ 81A308F setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1B97, 2 end @@ -4003,7 +4003,7 @@ SecretBase_RedCave1_EventScript_1A30AE:: @ 81A30AE call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A310B - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1F04, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4015,7 +4015,7 @@ SecretBase_RedCave1_EventScript_1A3102:: @ 81A3102 SecretBase_RedCave1_EventScript_1A310B:: @ 81A310B setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1F2E, 2 end @@ -4038,7 +4038,7 @@ SecretBase_RedCave1_EventScript_1A312A:: @ 81A312A call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3187 - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2220, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4050,7 +4050,7 @@ SecretBase_RedCave1_EventScript_1A317E:: @ 81A317E SecretBase_RedCave1_EventScript_1A3187:: @ 81A3187 setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2230, 2 end @@ -4073,7 +4073,7 @@ SecretBase_RedCave1_EventScript_1A31A6:: @ 81A31A6 call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3203 - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A256F, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4085,7 +4085,7 @@ SecretBase_RedCave1_EventScript_1A31FA:: @ 81A31FA SecretBase_RedCave1_EventScript_1A3203:: @ 81A3203 setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A258A, 2 end @@ -4108,7 +4108,7 @@ SecretBase_RedCave1_EventScript_1A3222:: @ 81A3222 call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A327F - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A28D7, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4120,7 +4120,7 @@ SecretBase_RedCave1_EventScript_1A3276:: @ 81A3276 SecretBase_RedCave1_EventScript_1A327F:: @ 81A327F setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A28F4, 2 end @@ -4143,7 +4143,7 @@ SecretBase_RedCave1_EventScript_1A329E:: @ 81A329E call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A32FB - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1D48, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4155,7 +4155,7 @@ SecretBase_RedCave1_EventScript_1A32F2:: @ 81A32F2 SecretBase_RedCave1_EventScript_1A32FB:: @ 81A32FB setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1D59, 2 end @@ -4178,7 +4178,7 @@ SecretBase_RedCave1_EventScript_1A331A:: @ 81A331A call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3377 - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2095, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4190,7 +4190,7 @@ SecretBase_RedCave1_EventScript_1A336E:: @ 81A336E SecretBase_RedCave1_EventScript_1A3377:: @ 81A3377 setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A20AE, 2 end @@ -4213,7 +4213,7 @@ SecretBase_RedCave1_EventScript_1A3396:: @ 81A3396 call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A33F3 - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2405, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4225,7 +4225,7 @@ SecretBase_RedCave1_EventScript_1A33EA:: @ 81A33EA SecretBase_RedCave1_EventScript_1A33F3:: @ 81A33F3 setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2420, 2 end @@ -4248,7 +4248,7 @@ SecretBase_RedCave1_EventScript_1A3412:: @ 81A3412 call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A346F - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2710, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4260,7 +4260,7 @@ SecretBase_RedCave1_EventScript_1A3466:: @ 81A3466 SecretBase_RedCave1_EventScript_1A346F:: @ 81A346F setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2736, 2 end @@ -4283,7 +4283,7 @@ SecretBase_RedCave1_EventScript_1A348E:: @ 81A348E call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A34EB - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2AE2, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4295,7 +4295,7 @@ SecretBase_RedCave1_EventScript_1A34E2:: @ 81A34E2 SecretBase_RedCave1_EventScript_1A34EB:: @ 81A34EB setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2AFB, 2 end @@ -4703,7 +4703,7 @@ BattleTower_Lobby_EventScript_1AE1FF:: @ 81AE1FF BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 message BattleTower_Lobby_Text_1A7823 - waittext + waitmessage multichoice 19, 8, 45, 1 copyvar 0x8008, RESULT compare RESULT, 0 @@ -4951,7 +4951,7 @@ gUnknown_081C6C02:: @ 81C6C02 lockall braillemsg Underwater_SealedChamber_Braille_1C533D waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end diff --git a/data-de/field_move_scripts.inc b/data-de/field_move_scripts.inc index d218d834d..c2f933fe4 100644 --- a/data-de/field_move_scripts.inc +++ b/data-de/field_move_scripts.inc @@ -2,7 +2,7 @@ S_CuttableTree:: @ 81B0DCC lockall checkflag 2055 goto_if 0, CannotUseCut - checkattack MOVE_CUT + checkpokemove MOVE_CUT compare RESULT, 6 goto_if_eq CannotUseCut setanimation 0, RESULT @@ -12,7 +12,7 @@ S_CuttableTree:: @ 81B0DCC compare RESULT, 0 goto_if_eq Cut_ChoseNo msgbox UsedCutRockSmashText, 4 - closebutton + closemessage doanimation 2 waitstate goto DoTreeCutMovement @@ -42,7 +42,7 @@ CannotUseCut: @ 81B0E32 end Cut_ChoseNo: @ 81B0E3C - closebutton + closemessage releaseall end @@ -63,7 +63,7 @@ S_BreakableRock:: @ 81B0EB7 lockall checkflag 2057 goto_if 0, CannotUseRockSmash - checkattack MOVE_ROCK_SMASH + checkpokemove MOVE_ROCK_SMASH compare RESULT, 6 goto_if_eq CannotUseRockSmash setanimation 0, RESULT @@ -73,7 +73,7 @@ S_BreakableRock:: @ 81B0EB7 compare RESULT, 0 goto_if_eq RockSmash_ChoseNo msgbox UsedCutRockSmashText, 4 - closebutton + closemessage doanimation 37 waitstate goto DoRockSmashMovement @@ -114,7 +114,7 @@ CannotUseRockSmash: @ 81B0F3E end RockSmash_ChoseNo: @ 81B0F48 - closebutton + closemessage releaseall end @@ -132,14 +132,14 @@ S_PushableBoulder:: @ 81B0FCB goto_if 0, CannotUseStrength checkflag 2089 goto_if_eq AlreadyUsedStrength - checkattack 70 + checkpokemove 70 compare RESULT, 6 goto_if_eq CannotUseStrength setanimation 0, RESULT msgbox UseStrengthPromptText, 5 compare RESULT, 0 goto_if_eq Strength_ChoseNo - closebutton + closemessage doanimation 40 waitstate goto UsedStrength @@ -169,7 +169,7 @@ AlreadyUsedStrength: @ 81B1030 end Strength_ChoseNo: @ 81B103A - closebutton + closemessage releaseall end @@ -193,7 +193,7 @@ AlreadyUsedStrengthText: @ 81B1127 S_UseWaterfall:: @ 81B115A lockall - checkattack MOVE_WATERFALL + checkpokemove MOVE_WATERFALL compare RESULT, 6 goto_if_eq Waterfall_NoMonKnows bufferpartypoke 0, RESULT @@ -226,7 +226,7 @@ UsedWaterfallText: @ 81B120D UseDiveScript:: @ 81B1220 lockall - checkattack MOVE_DIVE + checkpokemove MOVE_DIVE compare RESULT, 6 goto_if_eq CannotUseDive bufferpartypoke 0, RESULT @@ -249,7 +249,7 @@ Dive_Done: @ 81B1267 S_UseDiveUnderwater:: @ 81B1269 lockall - checkattack MOVE_DIVE + checkpokemove MOVE_DIVE compare RESULT, 6 goto_if_eq UnderwaterCannotUseDive bufferpartypoke 0, RESULT diff --git a/data/event_scripts.s b/data/event_scripts.s index 1359199d3..01120b194 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -390,7 +390,7 @@ gUnknown_0815F36C:: @ 815F36C message UnknownString_81A3A72 doanimation 61 waitstate - waittext + waitmessage waitbutton playse 5 goto EventScript_15F384 @@ -398,7 +398,7 @@ gUnknown_0815F36C:: @ 815F36C EventScript_15F384: message UnknownString_81A3A87 - waittext + waitmessage checkflag 268 goto_if_eq EventScript_15F3A0 goto EventScript_15F3E2 @@ -432,7 +432,7 @@ EventScript_15F419: msgbox UnknownString_81A38FB, 5 compare RESULT, 0 goto_if_eq EventScript_15F384 - closebutton + closemessage special SecretBasePC_PackUp releaseall end @@ -451,7 +451,7 @@ gUnknown_0815F43A:: @ 815F43A playse 2 doanimation 61 waitstate - waittext + waitmessage waitbutton playse 5 goto EventScript_15F452 @@ -459,7 +459,7 @@ gUnknown_0815F43A:: @ 815F43A EventScript_15F452: message UnknownString_81A3A87 - waittext + waitmessage multichoice 0, 0, 7, 0 switch RESULT case 0, EventScript_15F4A1 @@ -503,19 +503,19 @@ EventScript_15F4E0: EventScript_15F503: msgbox UnknownString_81A39C0, 3 special sub_80C683C - closebutton + closemessage releaseall end EventScript_15F511: message UnknownString_81A3AA2 - waittext + waitmessage goto EventScript_15F452 end EventScript_15F51D: special sub_80C683C - closebutton + closemessage releaseall end @@ -890,7 +890,7 @@ Std_2: lock faceplayer message 0x0 - waittext + waitmessage waitbutton release return @@ -898,20 +898,20 @@ Std_2: Std_3: lockall message 0x0 - waittext + waitmessage waitbutton releaseall return Std_4: message 0x0 - waittext + waitmessage waitbutton return Std_5: message 0x0 - waittext + waitmessage yesnobox 20, 8 return @@ -961,7 +961,7 @@ gUnknown_0819F840:: @ 819F840 EventScript_19F870: special ScrSpecial_ShowTrainerNonBattlingSpeech - waittext + waitmessage waitbutton release end @@ -984,7 +984,7 @@ gUnknown_0819F887:: @ 819F887 special PlayTrainerEncounterMusic special sub_8082524 special ScrSpecial_ShowTrainerIntroSpeech - waittext + waitmessage waitbutton special ScrSpecial_StartTrainerEyeRematch waitstate @@ -1004,7 +1004,7 @@ gUnknown_0819F8AE:: @ 819F8AE special PlayTrainerEncounterMusic special sub_8082524 special ScrSpecial_ShowTrainerIntroSpeech - waittext + waitmessage waitbutton special ScrSpecial_StartTrainerEyeRematch waitstate @@ -1016,7 +1016,7 @@ EventScript_19F8DD: EventScript_19F8DE: special ScrSpecial_ShowTrainerNonBattlingSpeech - waittext + waitmessage waitbutton release end @@ -1032,7 +1032,7 @@ Movement_19F8F0:: EventScript_19F8F2: special ScrSpecial_ShowTrainerIntroSpeech - waittext + waitmessage waitbutton battlebegin specialvar RESULT, ScrSpecial_GetTrainerBattleMode @@ -1056,7 +1056,7 @@ EventScript_19F936: Std_6:: message 0x0 - waittext + waitmessage waitbutton release return @@ -1442,7 +1442,7 @@ VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B do_heal_party:: @ 819FD7C inccounter GAME_STAT_USED_POKECENTER message gText_NurseJoy_OkayIllTakeYourPokemon - waittext + waitmessage applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A083F waitmovement 0 doanimation 25 @@ -1457,16 +1457,16 @@ do_heal_party:: @ 819FD7C OldaleTown_PokemonCenter_1F_EventScript_19FDB0:: @ 819FDB0 message gText_NurseJoy_ThankYouForWaiting - waittext + waitmessage applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_19FDF4 waitmovement 0 message gText_NurseJoy_WeHopeToSeeYouAgain - waittext + waitmessage return dont_heal_party:: @ 819FDC7 message gText_NurseJoy_WeHopeToSeeYouAgain - waittext + waitmessage return OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE @@ -1479,7 +1479,7 @@ OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE OldaleTown_PokemonCenter_1F_EventScript_19FDEA:: @ 819FDEA message gText_NurseJoy_Pokerus - waittext + waitmessage setflag 273 return @@ -1546,7 +1546,7 @@ GetItem_HandlePocket_Berries: Std_ObtainItem_Success: @ 819FEB7 message Message_ObtainedItem waitfanfare - waittext + waitmessage msgbox Message_PutAwayItem setvar RESULT, 1 return @@ -1581,7 +1581,7 @@ Std_ObtainDecoration_Success: @ 819FF03 playfanfare 0x172 message Message_ObtainedDecoration waitfanfare - waittext + waitmessage msgbox Message_TransferredToPC setvar RESULT, 1 return @@ -1610,7 +1610,7 @@ Std_FindItem_Success: @ 819FF52 removeobject LAST_TALKED message Message_FoundOneItem waitfanfare - waittext + waitmessage msgbox Message_PutAwayItem return @@ -1637,7 +1637,7 @@ HiddenItemScript:: @ 819FF7B HiddenItemScript_Success: message Message_FoundOneItem waitfanfare - waittext + waitmessage msgbox Message_PutAwayItem special SetFlagInVar releaseall @@ -1666,7 +1666,7 @@ UnusedMixRecordsScript_Yes: @ 819FFFA faceplayer UnusedMixRecordsScript_Done: @ 81A0000 message UnusedMixRecordsSeeYouAgainText - waittext + waitmessage waitbutton release end @@ -1682,7 +1682,7 @@ gUnknown_081A0009:: @ 81A0009 EventScript_1A0023: message gPCText_WhichPCShouldBeAccessed - waittext + waitmessage special ScrSpecial_CreatePCMenu waitstate goto EventScript_1A0033 @@ -1810,7 +1810,7 @@ Route109_EventScript_1A010C:: @ 81A010C return UseSurfScript:: @ 81A0117 - checkattack MOVE_SURF + checkpokemove MOVE_SURF compare RESULT, 6 goto_if_eq UseSurfScript_NoMon bufferpartypoke 0, RESULT @@ -2197,7 +2197,7 @@ Route101_EventScript_1A039B:: @ 81A039B Route101_EventScript_1A03A5:: @ 81A03A5 copyvar 0x8004, 0x8009 special ShowPokedexRatingMessage - waittext + waitmessage waitbutton return @@ -2439,7 +2439,7 @@ Route119_EventScript_1A05AE:: @ 81A05AE Route119_EventScript_1A05C3:: @ 81A05C3 msgbox Route119_Text_171BF6, 4 - closebutton + closemessage applymovement LAST_TALKED, Route119_Movement_1A0839 waitmovement 0 applymovement LAST_TALKED, Route119_Movement_1A0662 @@ -2539,7 +2539,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_1A067F:: @ 81A067F bufferitem 0, 0x8004 playfanfare 372 message FallarborTown_House1_Text_1A1498 - waittext + waitmessage waitfanfare removeitem 0x8004, 1 return @@ -3260,7 +3260,7 @@ gUnknown_081A14B8:: @ 81A14B8 EventScript_1A14CA:: message UnknownString_81A1141 - waittext + waitmessage waitbutton special sub_8081924 waitstate @@ -3599,7 +3599,7 @@ gUnknown_081A2C51:: @ 81A2C51 special sub_80BB63C compare RESULT, 1 goto_if_eq EventScript_1A2E45 - checkattack MOVE_SECRET_POWER + checkpokemove MOVE_SECRET_POWER setanimation 0, RESULT bufferattack 1, MOVE_SECRET_POWER compare 0x8007, 1 @@ -3625,7 +3625,7 @@ EventScript_1A2CB0: compare RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 - closebutton + closemessage doanimation 11 waitstate goto EventScript_1A2CFA @@ -3656,7 +3656,7 @@ EventScript_1A2D08: compare RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 - closebutton + closemessage doanimation 26 waitstate goto EventScript_1A2D52 @@ -3687,7 +3687,7 @@ EventScript_1A2D60: compare RESULT, 0 goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 - closebutton + closemessage doanimation 27 waitstate goto EventScript_1A2DAA @@ -3710,7 +3710,7 @@ EventScript_1A2DAA: end EventScript_1A2DB8: - closebutton + closemessage playse 9 setvar 0x4097, 0 setflag 173 @@ -3730,13 +3730,13 @@ SecretBase_RedCave1_EventScript_1A2DDE:: @ 81A2DDE msgbox SecretBase_RedCave1_Text_198F89, 5 compare RESULT, 1 goto_if_eq SecretBase_RedCave1_EventScript_1A2E08 - closebutton + closemessage playse 9 special sub_80BC440 end SecretBase_RedCave1_EventScript_1A2E08:: @ 81A2E08 - closebutton + closemessage setflag 96 special sub_80BBC78 waitstate @@ -3768,7 +3768,7 @@ EventScript_1A2E38: end EventScript_1A2E45: - checkattack MOVE_SECRET_POWER + checkpokemove MOVE_SECRET_POWER compare RESULT, 6 goto_if_eq EventScript_1A2EF7 setanimation 0, RESULT @@ -3783,7 +3783,7 @@ EventScript_1A2E45: goto_if_eq EventScript_1A2F3A fadescreen 1 special sub_80BC50C - closebutton + closemessage fadescreen 0 msgbox UnknownString_81A3CC9, 5 compare RESULT, 0 @@ -3791,8 +3791,8 @@ EventScript_1A2E45: bufferpartypoke 0, 0x8004 bufferattack 1, MOVE_SECRET_POWER msgbox UsedCutRockSmashText, 4 - closebutton - closebutton + closemessage + closemessage compare 0x8007, 1 goto_if_eq gUnknown_081A2CE6 compare 0x8007, 2 @@ -3824,7 +3824,7 @@ EventScript_1A2EF7:: end EventScript_1A2F3A:: - closebutton + closemessage releaseall end @@ -3947,7 +3947,7 @@ SecretBase_RedCave1_EventScript_1A3032:: @ 81A3032 call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A308F - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1B83, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -3959,7 +3959,7 @@ SecretBase_RedCave1_EventScript_1A3086:: @ 81A3086 SecretBase_RedCave1_EventScript_1A308F:: @ 81A308F setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1B97, 2 end @@ -3982,7 +3982,7 @@ SecretBase_RedCave1_EventScript_1A30AE:: @ 81A30AE call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A310B - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1F04, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -3994,7 +3994,7 @@ SecretBase_RedCave1_EventScript_1A3102:: @ 81A3102 SecretBase_RedCave1_EventScript_1A310B:: @ 81A310B setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1F2E, 2 end @@ -4017,7 +4017,7 @@ SecretBase_RedCave1_EventScript_1A312A:: @ 81A312A call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3187 - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2220, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4029,7 +4029,7 @@ SecretBase_RedCave1_EventScript_1A317E:: @ 81A317E SecretBase_RedCave1_EventScript_1A3187:: @ 81A3187 setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2230, 2 end @@ -4052,7 +4052,7 @@ SecretBase_RedCave1_EventScript_1A31A6:: @ 81A31A6 call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3203 - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A256F, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4064,7 +4064,7 @@ SecretBase_RedCave1_EventScript_1A31FA:: @ 81A31FA SecretBase_RedCave1_EventScript_1A3203:: @ 81A3203 setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A258A, 2 end @@ -4087,7 +4087,7 @@ SecretBase_RedCave1_EventScript_1A3222:: @ 81A3222 call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A327F - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A28D7, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4099,7 +4099,7 @@ SecretBase_RedCave1_EventScript_1A3276:: @ 81A3276 SecretBase_RedCave1_EventScript_1A327F:: @ 81A327F setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A28F4, 2 end @@ -4122,7 +4122,7 @@ SecretBase_RedCave1_EventScript_1A329E:: @ 81A329E call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A32FB - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1D48, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4134,7 +4134,7 @@ SecretBase_RedCave1_EventScript_1A32F2:: @ 81A32F2 SecretBase_RedCave1_EventScript_1A32FB:: @ 81A32FB setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A1D59, 2 end @@ -4157,7 +4157,7 @@ SecretBase_RedCave1_EventScript_1A331A:: @ 81A331A call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A3377 - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2095, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4169,7 +4169,7 @@ SecretBase_RedCave1_EventScript_1A336E:: @ 81A336E SecretBase_RedCave1_EventScript_1A3377:: @ 81A3377 setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A20AE, 2 end @@ -4192,7 +4192,7 @@ SecretBase_RedCave1_EventScript_1A3396:: @ 81A3396 call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A33F3 - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2405, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4204,7 +4204,7 @@ SecretBase_RedCave1_EventScript_1A33EA:: @ 81A33EA SecretBase_RedCave1_EventScript_1A33F3:: @ 81A33F3 setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2420, 2 end @@ -4227,7 +4227,7 @@ SecretBase_RedCave1_EventScript_1A3412:: @ 81A3412 call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A346F - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2710, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4239,7 +4239,7 @@ SecretBase_RedCave1_EventScript_1A3466:: @ 81A3466 SecretBase_RedCave1_EventScript_1A346F:: @ 81A346F setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2736, 2 end @@ -4262,7 +4262,7 @@ SecretBase_RedCave1_EventScript_1A348E:: @ 81A348E call S_DoSaveDialog compare RESULT, 0 goto_if_eq SecretBase_RedCave1_EventScript_1A34EB - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2AE2, 4 goto SecretBase_RedCave1_EventScript_1A350A end @@ -4274,7 +4274,7 @@ SecretBase_RedCave1_EventScript_1A34E2:: @ 81A34E2 SecretBase_RedCave1_EventScript_1A34EB:: @ 81A34EB setvar RESULT, 0 special sub_80BCE4C - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 msgbox SecretBase_RedCave1_Text_1A2AFB, 2 end @@ -4671,7 +4671,7 @@ BattleTower_Lobby_EventScript_1AE1FF:: @ 81AE1FF BattleTower_Lobby_EventScript_1AE241:: @ 81AE241 message BattleTower_Lobby_Text_1A7823 - waittext + waitmessage multichoice 19, 8, 45, 1 copyvar 0x8008, RESULT compare RESULT, 0 @@ -4919,7 +4919,7 @@ gUnknown_081C6C02:: @ 81C6C02 lockall braillemsg Underwater_SealedChamber_Braille_1C533D waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end diff --git a/data/field_move_scripts.inc b/data/field_move_scripts.inc index 592dd7003..94f6b356c 100644 --- a/data/field_move_scripts.inc +++ b/data/field_move_scripts.inc @@ -2,7 +2,7 @@ S_CuttableTree:: @ 81B0DCC lockall checkflag 2055 goto_if 0, CannotUseCut - checkattack MOVE_CUT + checkpokemove MOVE_CUT compare RESULT, 6 goto_if_eq CannotUseCut setanimation 0, RESULT @@ -12,7 +12,7 @@ S_CuttableTree:: @ 81B0DCC compare RESULT, 0 goto_if_eq Cut_ChoseNo msgbox UsedCutRockSmashText, 4 - closebutton + closemessage doanimation 2 waitstate goto DoTreeCutMovement @@ -42,7 +42,7 @@ CannotUseCut: @ 81B0E32 end Cut_ChoseNo: @ 81B0E3C - closebutton + closemessage releaseall end @@ -60,7 +60,7 @@ S_BreakableRock:: @ 81B0EB7 lockall checkflag 2057 goto_if 0, CannotUseRockSmash - checkattack MOVE_ROCK_SMASH + checkpokemove MOVE_ROCK_SMASH compare RESULT, 6 goto_if_eq CannotUseRockSmash setanimation 0, RESULT @@ -70,7 +70,7 @@ S_BreakableRock:: @ 81B0EB7 compare RESULT, 0 goto_if_eq RockSmash_ChoseNo msgbox UsedCutRockSmashText, 4 - closebutton + closemessage doanimation 37 waitstate goto DoRockSmashMovement @@ -111,7 +111,7 @@ CannotUseRockSmash: @ 81B0F3E end RockSmash_ChoseNo: @ 81B0F48 - closebutton + closemessage releaseall end @@ -129,14 +129,14 @@ S_PushableBoulder:: @ 81B0FCB goto_if 0, CannotUseStrength checkflag 2089 goto_if_eq AlreadyUsedStrength - checkattack 70 + checkpokemove 70 compare RESULT, 6 goto_if_eq CannotUseStrength setanimation 0, RESULT msgbox UseStrengthPromptText, 5 compare RESULT, 0 goto_if_eq Strength_ChoseNo - closebutton + closemessage doanimation 40 waitstate goto UsedStrength @@ -166,7 +166,7 @@ AlreadyUsedStrength: @ 81B1030 end Strength_ChoseNo: @ 81B103A - closebutton + closemessage releaseall end @@ -190,7 +190,7 @@ AlreadyUsedStrengthText: @ 81B1127 S_UseWaterfall:: @ 81B115A lockall - checkattack MOVE_WATERFALL + checkpokemove MOVE_WATERFALL compare RESULT, 6 goto_if_eq Waterfall_NoMonKnows bufferpartypoke 0, RESULT @@ -223,7 +223,7 @@ UsedWaterfallText: @ 81B120D UseDiveScript:: @ 81B1220 lockall - checkattack MOVE_DIVE + checkpokemove MOVE_DIVE compare RESULT, 6 goto_if_eq CannotUseDive bufferpartypoke 0, RESULT @@ -246,7 +246,7 @@ Dive_Done: @ 81B1267 S_UseDiveUnderwater:: @ 81B1269 lockall - checkattack MOVE_DIVE + checkpokemove MOVE_DIVE compare RESULT, 6 goto_if_eq UnderwaterCannotUseDive bufferpartypoke 0, RESULT diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 4295c0b63..1262e259a 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -99,12 +99,12 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_checktrainerflag @ 0x60 .4byte ScrCmd_settrainerflag @ 0x61 .4byte ScrCmd_cleartrainerflag @ 0x62 - .4byte ScrCmd_movespriteperm @ 0x63 - .4byte ScrCmd_moveoffscreen @ 0x64 - .4byte ScrCmd_spritebehave @ 0x65 - .4byte ScrCmd_waittext @ 0x66 + .4byte ScrCmd_setobjectxyperm @ 0x63 + .4byte ScrCmd_moveobjectoffscreen @ 0x64 + .4byte ScrCmd_setobjectmovementtype @ 0x65 + .4byte ScrCmd_waitmessage @ 0x66 .4byte ScrCmd_message @ 0x67 - .4byte ScrCmd_closebutton @ 0x68 + .4byte ScrCmd_closemessage @ 0x68 .4byte ScrCmd_lockall @ 0x69 .4byte ScrCmd_lock @ 0x6A .4byte ScrCmd_releaseall @ 0x6B @@ -112,19 +112,19 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_waitbutton @ 0x6D .4byte ScrCmd_yesnobox @ 0x6E .4byte ScrCmd_multichoice @ 0x6F - .4byte ScrCmd_multichoicedef @ 0x70 - .4byte ScrCmd_multichoicerow @ 0x71 - .4byte ScrCmd_showbox @ 0x72 - .4byte ScrCmd_hidebox @ 0x73 - .4byte ScrCmd_clearbox @ 0x74 - .4byte ScrCmd_showpokepic @ 0x75 - .4byte ScrCmd_hidepokepic @ 0x76 - .4byte ScrCmd_showcontestwinner @ 0x77 + .4byte ScrCmd_multichoicedefault @ 0x70 + .4byte ScrCmd_multichoicegrid @ 0x71 + .4byte ScrCmd_drawbox @ 0x72 + .4byte ScrCmd_erasebox @ 0x73 + .4byte ScrCmd_drawboxtext @ 0x74 + .4byte ScrCmd_drawpokepic @ 0x75 + .4byte ScrCmd_erasepokepic @ 0x76 + .4byte ScrCmd_drawcontestwinner @ 0x77 .4byte ScrCmd_braillemsg @ 0x78 - .4byte ScrCmd_givepokemon @ 0x79 + .4byte ScrCmd_givepoke @ 0x79 .4byte ScrCmd_giveegg @ 0x7A .4byte ScrCmd_setpokemove @ 0x7B - .4byte ScrCmd_checkattack @ 0x7C + .4byte ScrCmd_checkpokemove @ 0x7C .4byte ScrCmd_bufferpoke @ 0x7D .4byte ScrCmd_bufferfirstpoke @ 0x7E .4byte ScrCmd_bufferpartypoke @ 0x7F diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc index 0ed7749bc..79e1de13b 100644 --- a/data/scripts/berry_tree.inc +++ b/data/scripts/berry_tree.inc @@ -13,7 +13,7 @@ S_BerryTree:: @ 81A14DD Route102_EventScript_1A1533:: @ 81A1533 lockall message Route102_Text_1A1946 - waittext + waitmessage waitbutton releaseall end @@ -25,7 +25,7 @@ Route102_EventScript_1A153D:: @ 81A153D compare RESULT, 1 goto_if_eq Route102_EventScript_1A1558 message Route102_Text_1A16B6 - waittext + waitmessage waitbutton release end @@ -40,7 +40,7 @@ Route102_EventScript_1A1558:: @ 81A1558 Route102_EventScript_1A1577:: @ 81A1577 fadescreen 1 - closebutton + closemessage special sub_80B4EE4 waitstate compare ITEM_ID, 0 @@ -55,21 +55,21 @@ Route102_EventScript_1A1593:: @ 81A1593 Route102_EventScript_1A1595:: @ 81A1595 lockall message Route102_Text_1A172C - waittext + waitmessage waitbutton goto Route102_EventScript_1A165F Route102_EventScript_1A15A2:: @ 81A15A2 lockall message Route102_Text_1A174B - waittext + waitmessage waitbutton goto Route102_EventScript_1A165F Route102_EventScript_1A15AF:: @ 81A15AF lockall message Route102_Text_1A175C - waittext + waitmessage waitbutton goto Route102_EventScript_1A165F @@ -77,7 +77,7 @@ Route102_EventScript_1A15BC:: @ 81A15BC call Route102_EventScript_1A15CE lockall message Route102_Text_1A177D - waittext + waitmessage waitbutton goto Route102_EventScript_1A165F @@ -114,25 +114,25 @@ Route102_EventScript_1A161D:: @ 81A161D special FieldObjectInteractionRemoveBerryTree message Route102_Text_1A17FD playfanfare 387 - waittext + waitmessage waitfanfare waitbutton message Route102_Text_1A181A - waittext + waitmessage waitbutton release end Route102_EventScript_1A1642:: @ 81A1642 message Route102_Text_1A1881 - waittext + waitmessage waitbutton release end Route102_EventScript_1A164B:: @ 81A164B message Route102_Text_1A18C5 - waittext + waitmessage waitbutton release end @@ -164,12 +164,12 @@ gUnknown_081A168F:: @ 81A168F Route102_EventScript_1A1693:: @ 81A1693 message Route102_Text_1A1912 - waittext + waitmessage special FieldObjectInteractionWaterBerryTree special DoWateringBerryTreeAnim waitstate message Route102_Text_1A1925 - waittext + waitmessage waitbutton releaseall end @@ -178,6 +178,6 @@ Route102_EventScript_1A16A9:: @ 81A16A9 special FieldObjectInteractionPlantBerryTree inccounter GAME_STAT_PLANTED_BERRIES message Route102_Text_1A16FB - waittext + waitmessage waitbutton return diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index 078d6444f..33df12c8c 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -121,7 +121,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3E17:: @ 81A3E17 call OldaleTown_PokemonCenter_2F_EventScript_1A3E30 setmaptile 8, 3, 605, 1 special DrawWholeMapView - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -135,10 +135,10 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3E30:: @ 81A3E30 applymovement 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4356 waitmovement 0 message OldaleTown_PokemonCenter_2F_Text_1A4E50 - waittext + waitmessage playse 21 message OldaleTown_PokemonCenter_2F_Text_1A4E79 - waittext + waitmessage applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A4358 waitmovement 0 applymovement 0x8007, OldaleTown_PokemonCenter_2F_Movement_1A4354 @@ -156,7 +156,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3E8D:: @ 81A3E8D call OldaleTown_PokemonCenter_2F_EventScript_1A3DDA setmaptile 5, 3, 605, 1 special DrawWholeMapView - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -180,7 +180,7 @@ VerdanturfTown_PokemonCenter_2F_EventScript_1A3EA6:: @ 81A3EA6 lock faceplayer message OldaleTown_PokemonCenter_2F_Text_1A4510 - waittext + waitmessage OldaleTown_PokemonCenter_2F_EventScript_1A3EBC:: @ 81A3EBC multichoice 17, 6, 17, 0 @@ -198,7 +198,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3EF2:: @ 81A3EF2 compare 0x8004, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 message OldaleTown_PokemonCenter_2F_Text_1A490C - waittext + waitmessage special sub_808347C waitstate compare RESULT, 1 @@ -220,13 +220,13 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3F5E:: @ 81A3F5E special LoadPlayerBag copyvar 0x4087, 0x8004 message2 OldaleTown_PokemonCenter_2F_Text_1A4A22 - waittext + waitmessage setmaptile 5, 3, 514, 0 special DrawWholeMapView delay 60 applymovement LAST_TALKED, OldaleTown_PokemonCenter_2F_Movement_1A4356 waitmovement 0 - closebutton + closemessage applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435B waitmovement 0 setdooropened 5, 1 @@ -254,15 +254,15 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3FCD:: @ 81A3FCD OldaleTown_PokemonCenter_2F_EventScript_1A3FDD:: @ 81A3FDD message OldaleTown_PokemonCenter_2F_Text_1A4696 - waittext + waitmessage waitbutton message OldaleTown_PokemonCenter_2F_Text_1A4826 - waittext + waitmessage goto OldaleTown_PokemonCenter_2F_EventScript_1A3EBC OldaleTown_PokemonCenter_2F_EventScript_1A3FEF:: @ 81A3FEF message OldaleTown_PokemonCenter_2F_Text_1A4840 - waittext + waitmessage multichoice 0, 0, 18, 0 switch RESULT case 0, OldaleTown_PokemonCenter_2F_EventScript_1A4062 @@ -288,7 +288,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4042:: @ 81A4042 OldaleTown_PokemonCenter_2F_EventScript_1A4056:: @ 81A4056 message OldaleTown_PokemonCenter_2F_Text_1A486A - waittext + waitmessage waitbutton goto OldaleTown_PokemonCenter_2F_EventScript_1A3FEF @@ -306,28 +306,28 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4068:: @ 81A4068 OldaleTown_PokemonCenter_2F_EventScript_1A4093:: @ 81A4093 special CloseLink message OldaleTown_PokemonCenter_2F_Text_1A4C03 - waittext + waitmessage waitbutton goto OldaleTown_PokemonCenter_2F_EventScript_1A40C0 OldaleTown_PokemonCenter_2F_EventScript_1A40A2:: @ 81A40A2 special CloseLink message OldaleTown_PokemonCenter_2F_Text_1A4BCC - waittext + waitmessage waitbutton goto OldaleTown_PokemonCenter_2F_EventScript_1A40C0 OldaleTown_PokemonCenter_2F_EventScript_1A40B1:: @ 81A40B1 special CloseLink message OldaleTown_PokemonCenter_2F_Text_1A4B95 - waittext + waitmessage waitbutton goto OldaleTown_PokemonCenter_2F_EventScript_1A40C0 OldaleTown_PokemonCenter_2F_EventScript_1A40C0:: @ 81A40C0 special CloseLink message OldaleTown_PokemonCenter_2F_Text_1A4C38 - waittext + waitmessage waitbutton release end @@ -365,7 +365,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A40FA:: @ 81A40FA compare RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 message OldaleTown_PokemonCenter_2F_Text_1A490C - waittext + waitmessage special sub_80834E4 waitstate compare RESULT, 1 @@ -385,13 +385,13 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4166:: @ 81A4166 setvar 0x8004, 3 copyvar 0x4087, 0x8004 message2 OldaleTown_PokemonCenter_2F_Text_1A4A22 - waittext + waitmessage setmaptile 8, 3, 514, 0 special DrawWholeMapView delay 60 applymovement LAST_TALKED, OldaleTown_PokemonCenter_2F_Movement_1A4356 waitmovement 0 - closebutton + closemessage applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435B waitmovement 0 setdooropened 8, 1 @@ -416,14 +416,14 @@ OldaleTown_PokemonCenter_2F_EventScript_1A41BB:: @ 81A41BB OldaleTown_PokemonCenter_2F_EventScript_1A41E1:: @ 81A41E1 message OldaleTown_PokemonCenter_2F_Text_1A48A3 - waittext + waitmessage waitbutton setvar RESULT, 0 return OldaleTown_PokemonCenter_2F_EventScript_1A41EE:: @ 81A41EE message OldaleTown_PokemonCenter_2F_Text_1A48DD - waittext + waitmessage waitbutton setvar RESULT, 0 return @@ -459,7 +459,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4229:: @ 81A4229 compare RESULT, 0 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A4319 message OldaleTown_PokemonCenter_2F_Text_1A490C - waittext + waitmessage special sub_808350C waitstate special sub_80835D8 @@ -483,13 +483,13 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4294:: @ 81A4294 setvar 0x8004, 4 copyvar 0x4087, 0x8004 message2 OldaleTown_PokemonCenter_2F_Text_1A4A22 - waittext + waitmessage setmaptile 11, 3, 514, 0 special DrawWholeMapView delay 60 applymovement LAST_TALKED, OldaleTown_PokemonCenter_2F_Movement_1A4356 waitmovement 0 - closebutton + closemessage applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435B waitmovement 0 setdooropened 11, 1 @@ -505,7 +505,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4294:: @ 81A4294 OldaleTown_PokemonCenter_2F_EventScript_1A42E9:: @ 81A42E9 special CloseLink message OldaleTown_PokemonCenter_2F_Text_1A4AC8 - waittext + waitmessage waitbutton release end @@ -513,7 +513,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A42E9:: @ 81A42E9 OldaleTown_PokemonCenter_2F_EventScript_1A42F5:: @ 81A42F5 special CloseLink message OldaleTown_PokemonCenter_2F_Text_1A4A85 - waittext + waitmessage waitbutton release end @@ -521,7 +521,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A42F5:: @ 81A42F5 OldaleTown_PokemonCenter_2F_EventScript_1A4301:: @ 81A4301 special CloseLink message OldaleTown_PokemonCenter_2F_Text_1A4A30 - waittext + waitmessage waitbutton release end @@ -529,7 +529,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4301:: @ 81A4301 OldaleTown_PokemonCenter_2F_EventScript_1A430D:: @ 81A430D special CloseLink message OldaleTown_PokemonCenter_2F_Text_1A4B1D - waittext + waitmessage waitbutton release end @@ -537,7 +537,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A430D:: @ 81A430D OldaleTown_PokemonCenter_2F_EventScript_1A4319:: @ 81A4319 special CloseLink message OldaleTown_PokemonCenter_2F_Text_1A4B59 - waittext + waitmessage waitbutton release end @@ -551,7 +551,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4325:: @ 81A4325 OldaleTown_PokemonCenter_2F_EventScript_1A432D:: @ 81A432D special CloseLink message OldaleTown_PokemonCenter_2F_Text_1A4B6C - waittext + waitmessage waitbutton release end @@ -599,7 +599,7 @@ gUnknown_081A4363:: @ 81A4363 lockall special ShowLinkBattleRecords waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -721,14 +721,14 @@ RecordCorner_EventScript_1A4457:: @ 81A4457 RecordCorner_EventScript_1A446C:: @ 81A446C bufferitem 1, 0x4001 message RecordCorner_Text_1A4E3B - waittext + waitmessage waitbutton releaseall end TradeRoom_ReadTrainerCard1:: @ 81A4479 message CableClub_LookAtTrainerCard1 - waittext + waitmessage waitbutton fadescreen 1 special sub_8083BDC @@ -737,7 +737,7 @@ TradeRoom_ReadTrainerCard1:: @ 81A4479 TradeRoom_ReadTrainerCard2:: @ 81A4487 message CableClub_LookAtTrainerCard2 - waittext + waitmessage waitbutton fadescreen 1 special sub_8083BDC @@ -746,27 +746,27 @@ TradeRoom_ReadTrainerCard2:: @ 81A4487 TradeRoom_TooBusyToNotice:: @ 81A4495 message CableClub_TooBusyToNotice - waittext + waitmessage waitbutton - closebutton + closemessage end SingleBattleColosseum_EventScript_1A449E:: @ 81A449E special sub_8064EAC message SingleBattleColosseum_Text_1A4D7E - waittext + waitmessage waitbutton special sub_8064ED4 - closebutton + closemessage end TradeCenter_EventScript_1A44AD:: @ 81A44AD special sub_8064EAC message TradeCenter_Text_1A4DAB - waittext + waitmessage waitbutton special sub_8064ED4 - closebutton + closemessage end RecordCorner_EventScript_1A44BC:: @ 81A44BC @@ -774,31 +774,31 @@ RecordCorner_EventScript_1A44BC:: @ 81A44BC goto_if 5, RecordCorner_EventScript_1A44D6 special sub_8064EAC message RecordCorner_Text_1A4DD7 - waittext + waitmessage waitbutton special sub_8064ED4 - closebutton + closemessage end RecordCorner_EventScript_1A44D6:: @ 81A44D6 special sub_8064EAC message RecordCorner_Text_1A4DF7 - waittext + waitmessage waitbutton special sub_8064ED4 - closebutton + closemessage end TradeRoom_PromptToCancelLink:: @ 81A44E5 msgbox TradeRoom_WillLinkBeTerminated, 5 compare RESULT, 1 goto_if_eq TradeRoom_TerminateLink - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 end TradeRoom_TerminateLink:: @ 81A44FE message2 TradeRoom_TerminatingLink - waittext + waitmessage special sub_80839D0 end diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index 10314c462..16e5a6282 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -66,7 +66,7 @@ FallarborTown_ContestLobby_EventScript_1A4F67:: @ 81A4F67 compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1A4F86 setvar 0x408a, 0 - closebutton + closemessage release end @@ -76,7 +76,7 @@ FallarborTown_ContestLobby_EventScript_1A4F86:: @ 81A4F86 FallarborTown_ContestLobby_EventScript_1A4F8F:: @ 81A4F8F message FallarborTown_ContestLobby_Text_1A5E46 - waittext + waitmessage multichoice 0, 0, 2, 0 switch RESULT case 0, FallarborTown_ContestLobby_EventScript_1A5097 @@ -87,7 +87,7 @@ FallarborTown_ContestLobby_EventScript_1A4F8F:: @ 81A4F8F FallarborTown_ContestLobby_EventScript_1A4FCC:: @ 81A4FCC message FallarborTown_ContestLobby_Text_1A5E7C - waittext + waitmessage multichoice 0, 0, 3, 0 switch RESULT case 0, FallarborTown_ContestLobby_EventScript_1A5014 @@ -137,7 +137,7 @@ FallarborTown_ContestLobby_EventScript_1A5048:: @ 81A5048 FallarborTown_ContestLobby_EventScript_1A5097:: @ 81A5097 message FallarborTown_ContestLobby_Text_1A6623 - waittext + waitmessage multichoice 0, 0, 4, 0 switch RESULT case 5, FallarborTown_ContestLobby_EventScript_1A503E @@ -180,7 +180,7 @@ FallarborTown_ContestLobby_EventScript_1A512E:: @ 81A512E FallarborTown_ContestLobby_EventScript_1A513D:: @ 81A513D msgbox FallarborTown_ContestLobby_Text_1A67C1, 4 - closebutton + closemessage releaseall setvar 0x4086, 1 return @@ -277,7 +277,7 @@ LinkContestRoom1_EventScript_1A525F:: @ 81A525F LinkContestRoom1_EventScript_1A5273:: @ 81A5273 message2 LinkContestRoom1_Text_1A6976 - waittext + waitmessage return LinkContestRoom1_EventScript_1A527A:: @ 81A527A @@ -360,19 +360,19 @@ LinkContestRoom1_EventScript_1A535E:: @ 81A535E compare 0x4088, 5 goto_if_eq LinkContestRoom1_EventScript_1A5370 message LinkContestRoom1_Text_1A6A04 - waittext + waitmessage return LinkContestRoom1_EventScript_1A5370:: @ 81A5370 message2 LinkContestRoom1_Text_1A6A04 - waittext + waitmessage return LinkContestRoom1_EventScript_1A5377:: @ 81A5377 call LinkContestRoom1_EventScript_1A53B3 call LinkContestRoom1_EventScript_1A53CE playse 223 - waittext + waitmessage call LinkContestRoom1_EventScript_1A5A90 applymovement 1, LinkContestRoom1_Movement_1A5D9F waitmovement 0 @@ -392,7 +392,7 @@ LinkContestRoom1_EventScript_1A53B3:: @ 81A53B3 LinkContestRoom1_EventScript_1A53C7:: @ 81A53C7 message2 LinkContestRoom1_Text_1A6A1F - waittext + waitmessage return LinkContestRoom1_EventScript_1A53CE:: @ 81A53CE @@ -722,7 +722,7 @@ LinkContestRoom1_EventScript_1A587F:: @ 81A587F return LinkContestRoom1_EventScript_1A5880:: @ 81A5880 - closebutton + closemessage release removeobject 13 special sub_80C5164 @@ -766,7 +766,7 @@ LinkContestRoom1_EventScript_1A58EE:: @ 81A58EE applymovement 1, LinkContestRoom1_Movement_1A5DA3 waitmovement 0 call LinkContestRoom1_EventScript_1A5930 - waittext + waitmessage applymovement 1, LinkContestRoom1_Movement_1A5D91 applymovement 2, LinkContestRoom1_Movement_1A5D95 waitmovement 0 @@ -800,7 +800,7 @@ LinkContestRoom1_EventScript_1A594A:: @ 81A594A call LinkContestRoom1_EventScript_1A59DE applymovement 1, LinkContestRoom1_Movement_1A5D8F waitmovement 0 - closebutton + closemessage releaseall setvar 0x4009, 1 showcontestresults @@ -816,7 +816,7 @@ LinkContestRoom1_EventScript_1A5984:: @ 81A5984 LinkContestRoom1_EventScript_1A5998:: @ 81A5998 message2 LinkContestRoom1_Text_1A6C06 - waittext + waitmessage delay 30 return @@ -828,7 +828,7 @@ LinkContestRoom1_EventScript_1A59A2:: @ 81A59A2 LinkContestRoom1_EventScript_1A59B6:: @ 81A59B6 message2 LinkContestRoom1_Text_1A6C21 - waittext + waitmessage delay 30 return @@ -840,7 +840,7 @@ LinkContestRoom1_EventScript_1A59C0:: @ 81A59C0 LinkContestRoom1_EventScript_1A59D4:: @ 81A59D4 message2 LinkContestRoom1_Text_1A6C9D - waittext + waitmessage delay 30 return @@ -852,7 +852,7 @@ LinkContestRoom1_EventScript_1A59DE:: @ 81A59DE LinkContestRoom1_EventScript_1A59F2:: @ 81A59F2 message2 LinkContestRoom1_Text_1A6D16 - waittext + waitmessage delay 30 return @@ -902,7 +902,7 @@ LinkContestRoom1_EventScript_1A5A75:: @ 81A5A75 LinkContestRoom1_EventScript_1A5A89:: @ 81A5A89 message2 LinkContestRoom1_Text_1A6D3C - waittext + waitmessage return LinkContestRoom1_EventScript_1A5A90:: @ 81A5A90 @@ -999,7 +999,7 @@ LinkContestRoom1_EventScript_1A5BAB:: @ 81A5BAB checkflag 2 goto_if_eq LinkContestRoom1_EventScript_1A5BF6 msgbox LinkContestRoom1_Text_1A6DC5, 3 - waittext + waitmessage call LinkContestRoom1_EventScript_1A5C7F call LinkContestRoom1_EventScript_1A5CE5 playse 223 @@ -1055,7 +1055,7 @@ LinkContestRoom1_EventScript_1A5C4C:: @ 81A5C4C special sub_80C4CF8 compare 0x8004, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C64 - closebutton + closemessage return LinkContestRoom1_EventScript_1A5C64:: @ 81A5C64 diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc index 62a2d6224..23e61063c 100644 --- a/data/scripts/day_care.inc +++ b/data/scripts/day_care.inc @@ -38,7 +38,7 @@ Route117_EventScript_1B22B2:: @ 81B22B2 message Route117_Text_1B27A2 playfanfare 367 waitfanfare - waittext + waitmessage waitbutton msgbox Route117_Text_1B27CD, 4 special sp0B8_daycare @@ -69,7 +69,7 @@ Route117_EventScript_1B22FE:: @ 81B22FE msgbox Route117_Text_1B2897, 4 special sp0B9_daycare_relationship_comment special ShowFieldMessageStringVar4 - waittext + waitmessage waitbutton setvar 0x8004, 0 call Route117_EventScript_1B22CD diff --git a/data/scripts/magma_chimney.inc b/data/scripts/magma_chimney.inc index 998da7380..f13b319f4 100644 --- a/data/scripts/magma_chimney.inc +++ b/data/scripts/magma_chimney.inc @@ -5,7 +5,7 @@ MtChimney_EventScript_1B2C95:: @ 81B2C95 call_if 0, MtChimney_EventScript_1B2CB9 checkflag 219 call_if 1, MtChimney_EventScript_1B2CC2 - closebutton + closemessage applymovement 1, MtChimney_Movement_1A083D waitmovement 0 setflag 219 @@ -57,7 +57,7 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB .else msgbox MtChimney_Text_1B3A90, 4 .endif - closebutton + closemessage delay 30 fadescreen 1 removeobject 2 @@ -65,7 +65,7 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB removeobject 22 setflag 926 fadescreen 0 - movespriteperm 1, 10, 12 + setobjectxyperm 1, 10, 12 addobject 1 compare FACING, 4 call_if 1, MtChimney_EventScript_1B2D7D @@ -78,7 +78,7 @@ MtChimney_EventScript_1B2CCB:: @ 81B2CCB .else msgbox MtChimney_Text_1B3FFE, 4 .endif - closebutton + closemessage compare FACING, 4 call_if 1, MtChimney_EventScript_1B2D93 compare FACING, 2 diff --git a/data/scripts/maps/AncientTomb.inc b/data/scripts/maps/AncientTomb.inc index 5a0b4014a..0e9a82f4c 100644 --- a/data/scripts/maps/AncientTomb.inc +++ b/data/scripts/maps/AncientTomb.inc @@ -37,7 +37,7 @@ AncientTomb_EventScript_15F021:: @ 815F021 goto_if_eq AncientTomb_EventScript_15F038 braillemsg AncientTomb_Braille_1C552E waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -50,7 +50,7 @@ AncientTomb_EventScript_15F042:: @ 815F042 lockall braillemsg AncientTomb_Braille_1C552E waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end diff --git a/data/scripts/maps/AquaHideout_B2F.inc b/data/scripts/maps/AquaHideout_B2F.inc index 9fd81f121..230d0e2db 100644 --- a/data/scripts/maps/AquaHideout_B2F.inc +++ b/data/scripts/maps/AquaHideout_B2F.inc @@ -47,7 +47,7 @@ AquaHideout_B2F_EventScript_15D8FD:: @ 815D8FD applymovement 0x8008, AquaHideout_B2F_Movement_1A0839 waitmovement 0 msgbox AquaHideout_B2F_Text_197162, 4 - closebutton + closemessage .ifdef SAPPHIRE applymovement 0x8008, Movement_1A083F .else diff --git a/data/scripts/maps/BattleTower_BattleRoom.inc b/data/scripts/maps/BattleTower_BattleRoom.inc index 3223deba4..3f1aad4a0 100644 --- a/data/scripts/maps/BattleTower_BattleRoom.inc +++ b/data/scripts/maps/BattleTower_BattleRoom.inc @@ -18,8 +18,8 @@ BattleTower_BattleRoom_EventScript_1608FA:: @ 81608FA waitmovement 0 special sub_8135474 msgbox 0x20234cc, 4 - waittext - closebutton + waitmessage + closemessage special ScrSpecial_HealPlayerParty setvar 0x8004, 0 setvar 0x8005, 0 @@ -80,7 +80,7 @@ BattleTower_BattleRoom_EventScript_160A0E:: @ 8160A0E case 127, BattleTower_BattleRoom_EventScript_1609B2 BattleTower_BattleRoom_EventScript_160A3C:: @ 8160A3C - closebutton + closemessage applymovement 255, BattleTower_BattleRoom_Movement_160ABE waitmovement 0 applymovement 2, BattleTower_BattleRoom_Movement_160AD0 @@ -109,7 +109,7 @@ BattleTower_BattleRoom_EventScript_160A94:: @ 8160A94 special sub_8135BA0 message BattleTower_BattleRoom_Text_1C6CE1 delay 60 - waittext + waitmessage playse 55 waitse msgbox BattleTower_BattleRoom_Text_1C6D05, 4 diff --git a/data/scripts/maps/BattleTower_Lobby.inc b/data/scripts/maps/BattleTower_Lobby.inc index 61ac04810..555e32d81 100644 --- a/data/scripts/maps/BattleTower_Lobby.inc +++ b/data/scripts/maps/BattleTower_Lobby.inc @@ -65,7 +65,7 @@ BattleTower_Lobby_EventScript_160330:: @ 8160330 lock faceplayer msgbox BattleTower_Lobby_Text_19A3FD, 4 - closebutton + closemessage setvar 0x4000, 5 release end @@ -74,7 +74,7 @@ BattleTower_Lobby_EventScript_160342:: @ 8160342 lock faceplayer message BattleTower_Lobby_Text_19A487 - waittext + waitmessage setvar 0x8004, 0 special sub_81358A4 compare RESULT, 6 @@ -83,7 +83,7 @@ BattleTower_Lobby_EventScript_160342:: @ 8160342 compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_16037D message BattleTower_Lobby_Text_19A6BE - waittext + waitmessage playfanfare 370 waitfanfare msgbox BattleTower_Lobby_Text_19A719, 4 @@ -94,7 +94,7 @@ BattleTower_Lobby_EventScript_16037D:: @ 816037D compare RESULT, 1 goto_if_eq BattleTower_Lobby_EventScript_1603AD message BattleTower_Lobby_Text_19A589 - waittext + waitmessage setvar 0x8004, 13 special sub_8135668 special sub_8135D84 @@ -108,12 +108,12 @@ BattleTower_Lobby_EventScript_1603AD:: @ 81603AD setvar 0x8005, 3 special sub_8135668 message BattleTower_Lobby_Text_19A4BB - waittext + waitmessage special sub_8135DEC switch RESULT case 0, BattleTower_Lobby_EventScript_160408 message BattleTower_Lobby_Text_19A506 - waittext + waitmessage playfanfare 370 waitfanfare setvar 0x8004, 9 @@ -124,15 +124,15 @@ BattleTower_Lobby_EventScript_1603AD:: @ 81603AD BattleTower_Lobby_EventScript_1603F8:: @ 81603F8 msgbox BattleTower_Lobby_Text_199FA9, 4 - closebutton + closemessage setvar 0x4000, 5 release end BattleTower_Lobby_EventScript_160408:: @ 8160408 msgbox BattleTower_Lobby_Text_19A520, 4 - waittext - closebutton + waitmessage + closemessage setvar 0x4000, 5 release end @@ -141,9 +141,9 @@ BattleTower_Lobby_EventScript_160419:: @ 8160419 lock faceplayer message BattleTower_Lobby_Text_19A571 - waittext + waitmessage message BattleTower_Lobby_Text_19A589 - waittext + waitmessage setvar 0x8004, 13 special sub_8135668 setvar 0x8004, 0 @@ -151,7 +151,7 @@ BattleTower_Lobby_EventScript_160419:: @ 8160419 playse 55 waitse msgbox BattleTower_Lobby_Text_199FA9, 4 - closebutton + closemessage setvar 0x4000, 5 release end @@ -161,9 +161,9 @@ BattleTower_Lobby_EventScript_16044B:: @ 816044B faceplayer setvar 0x40bc, 1 message BattleTower_Lobby_Text_19A5B1 - waittext + waitmessage message BattleTower_Lobby_Text_19A5CE - waittext + waitmessage setvar 0x8004, 1 special sub_8135BA0 playse 55 @@ -175,7 +175,7 @@ BattleTower_Lobby_EventScript_16044B:: @ 816044B special SavePlayerParty special sub_8135A14 msgbox BattleTower_Lobby_Text_19A0A8, 4 - closebutton + closemessage call BattleTower_Lobby_EventScript_160664 warp BattleTower_Elevator, 255, 1, 6 setvar 0x4000, 0 @@ -193,7 +193,7 @@ BattleTower_Lobby_EventScript_16049E:: @ 816049E BattleTower_Lobby_EventScript_1604BE:: @ 81604BE message BattleTower_Lobby_Text_199F79 - waittext + waitmessage multichoice 15, 6, 23, 0 switch RESULT case 0, BattleTower_Lobby_EventScript_1604FA @@ -203,7 +203,7 @@ BattleTower_Lobby_EventScript_1604BE:: @ 81604BE BattleTower_Lobby_EventScript_1604FA:: @ 81604FA message BattleTower_Lobby_Text_19A024 - waittext + waitmessage multichoice 18, 6, 24, 0 switch RESULT case 2, BattleTower_Lobby_EventScript_160652 @@ -240,11 +240,11 @@ BattleTower_Lobby_EventScript_160587:: @ 8160587 setvar 0x8005, 0 special sub_8135668 special LoadPlayerParty - closebutton + closemessage delay 2 call S_DoSaveDialog setvar 0x4000, 5 - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_160642 inccounter GAME_STAT_ENTERED_BATTLE_TOWER @@ -252,7 +252,7 @@ BattleTower_Lobby_EventScript_160587:: @ 8160587 special sub_8135A14 setvar 0x40bc, 1 msgbox BattleTower_Lobby_Text_19A0A8, 4 - closebutton + closemessage call BattleTower_Lobby_EventScript_160664 warp BattleTower_Elevator, 255, 1, 6 setvar 0x4000, 0 @@ -380,7 +380,7 @@ BattleTower_Lobby_EventScript_160727:: @ 8160727 lockall special ShowBattleTowerRecords waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end diff --git a/data/scripts/maps/BattleTower_Outside.inc b/data/scripts/maps/BattleTower_Outside.inc index 53e693f71..95c5a9d77 100644 --- a/data/scripts/maps/BattleTower_Outside.inc +++ b/data/scripts/maps/BattleTower_Outside.inc @@ -16,12 +16,12 @@ BattleTower_Outside_EventScript_160168:: @ 8160168 compare RESULT, 0 goto_if_eq BattleTower_Outside_EventScript_1601C6 message BattleTower_Outside_Text_199D9D - waittext + waitmessage goto BattleTower_Outside_EventScript_16018E end BattleTower_Outside_EventScript_16018E:: @ 816018E - multichoicedef 21, 6, 53, 2, 0 + multichoicedefault 21, 6, 53, 2, 0 switch RESULT case 0, BattleTower_Outside_EventScript_1601D0 case 1, BattleTower_Outside_EventScript_1601FB @@ -58,12 +58,12 @@ BattleTower_Outside_EventScript_1601FB:: @ 81601FB BattleTower_Outside_EventScript_160226:: @ 8160226 message BattleTower_Outside_Text_199E7A - waittext + waitmessage goto BattleTower_Outside_EventScript_16018E end BattleTower_Outside_EventScript_160232:: @ 8160232 - closebutton + closemessage applymovement LAST_TALKED, BattleTower_Outside_Movement_1A0845 waitmovement 0 delay 30 diff --git a/data/scripts/maps/CaveOfOrigin_B4F.inc b/data/scripts/maps/CaveOfOrigin_B4F.inc index 3b2e7802d..503b9f1a8 100644 --- a/data/scripts/maps/CaveOfOrigin_B4F.inc +++ b/data/scripts/maps/CaveOfOrigin_B4F.inc @@ -32,7 +32,7 @@ CaveOfOrigin_B4F_EventScript_15DDD7:: @ 815DDD7 .else msgbox CaveOfOrigin_B4F_Text_1B4FE4, 4 .endif - closebutton + closemessage setweather 0 doweather special WaitWeather @@ -87,7 +87,7 @@ CaveOfOrigin_B4F_EventScript_15DE73:: @ 815DE73 .else msgbox CaveOfOrigin_B4F_Text_1B5009, 4 .endif - closebutton + closemessage return CaveOfOrigin_B4F_Movement_15DE7D:: @ 815DE7D diff --git a/data/scripts/maps/DesertRuins.inc b/data/scripts/maps/DesertRuins.inc index b549cf127..6b8bb5cdb 100644 --- a/data/scripts/maps/DesertRuins.inc +++ b/data/scripts/maps/DesertRuins.inc @@ -37,7 +37,7 @@ DesertRuins_EventScript_15CB56:: @ 815CB56 goto_if_eq DesertRuins_EventScript_15CB6D braillemsg DesertRuins_Braille_1C54C8 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -50,7 +50,7 @@ DesertRuins_EventScript_15CB77:: @ 815CB77 lockall braillemsg DesertRuins_Braille_1C54C8 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end diff --git a/data/scripts/maps/DewfordTown.inc b/data/scripts/maps/DewfordTown.inc index c8f20f4ac..480a408e3 100644 --- a/data/scripts/maps/DewfordTown.inc +++ b/data/scripts/maps/DewfordTown.inc @@ -12,8 +12,8 @@ DewfordTown_EventScript_14E002:: @ 814E002 checkflag 189 goto_if 0, DewfordTown_EventScript_14E076 message DewfordTown_Text_16B522 - waittext - multichoicedef 21, 6, 0, 2, 0 + waitmessage + multichoicedefault 21, 6, 0, 2, 0 switch RESULT case 0, DewfordTown_EventScript_14E04B case 1, DewfordTown_EventScript_14E05B @@ -23,21 +23,21 @@ DewfordTown_EventScript_14E002:: @ 814E002 DewfordTown_EventScript_14E04B:: @ 814E04B msgbox DewfordTown_Text_16B57D, 4 - closebutton + closemessage goto DewfordTown_EventScript_14E151 release end DewfordTown_EventScript_14E05B:: @ 814E05B msgbox DewfordTown_Text_16B5D2, 4 - closebutton + closemessage goto DewfordTown_EventScript_14E1D8 release end DewfordTown_EventScript_14E06B:: @ 814E06B msgbox DewfordTown_Text_16B627, 4 - closebutton + closemessage release end @@ -51,7 +51,7 @@ DewfordTown_EventScript_14E076:: @ 814E076 DewfordTown_EventScript_14E093:: @ 814E093 msgbox DewfordTown_Text_16B417, 4 - closebutton + closemessage goto DewfordTown_EventScript_14E151 end @@ -98,7 +98,7 @@ DewfordTown_EventScript_14E111:: @ 814E111 DewfordTown_EventScript_14E11B:: @ 814E11B message DewfordTown_Text_16B84E - waittext + waitmessage multichoice 20, 8, 50, 1 compare RESULT, 0 goto_if_eq DewfordTown_EventScript_14E13D @@ -166,7 +166,7 @@ DewfordTown_EventScript_14E1D8:: @ 814E1D8 showobject 255, 0, 24 applymovement 255, DewfordTown_Movement_14E409 waitmovement 0 - movespriteperm 2, 21, 26 + setobjectxyperm 2, 21, 26 addobject 2 spritelevelup 2, 0, 24, 0 applymovement 2, DewfordTown_Movement_14E410 @@ -180,11 +180,11 @@ DewfordTown_EventScript_14E1D8:: @ 814E1D8 call_if 0, DewfordTown_EventScript_14E281 checkflag 149 call_if 1, DewfordTown_EventScript_14E28A - closebutton + closemessage copyvar 0x4096, 0x8008 restorespritelevel 255, 0, 11 restorespritelevel 2, 0, 24 - moveoffscreen 2 + moveobjectoffscreen 2 release end diff --git a/data/scripts/maps/DewfordTown_Gym.inc b/data/scripts/maps/DewfordTown_Gym.inc index 034bca1bc..296d2ed2d 100644 --- a/data/scripts/maps/DewfordTown_Gym.inc +++ b/data/scripts/maps/DewfordTown_Gym.inc @@ -109,7 +109,7 @@ DewfordTown_Gym_EventScript_153152:: @ 8153152 DewfordTown_Gym_EventScript_153177:: @ 8153177 call DewfordTown_Gym_EventScript_153117 message DewfordTown_Gym_Text_1752BB - waittext + waitmessage call DewfordTown_Gym_EventScript_1A02C5 msgbox DewfordTown_Gym_Text_1752E6, 4 setflag 1204 diff --git a/data/scripts/maps/DewfordTown_Hall.inc b/data/scripts/maps/DewfordTown_Hall.inc index 78b5f5044..ea4016147 100644 --- a/data/scripts/maps/DewfordTown_Hall.inc +++ b/data/scripts/maps/DewfordTown_Hall.inc @@ -52,7 +52,7 @@ DewfordTown_Hall_EventScript_15330A:: @ 815330A faceplayer call DewfordTown_Hall_EventScript_1A0102 msgbox DewfordTown_Hall_Text_17570D, 4 - closebutton + closemessage applymovement 4, DewfordTown_Hall_Movement_1A0841 waitmovement 0 release @@ -63,7 +63,7 @@ DewfordTown_Hall_EventScript_153326:: @ 8153326 faceplayer call DewfordTown_Hall_EventScript_1A0102 msgbox DewfordTown_Hall_Text_17574C, 4 - closebutton + closemessage applymovement 5, DewfordTown_Hall_Movement_1A0841 waitmovement 0 release diff --git a/data/scripts/maps/DewfordTown_PokemonCenter_1F.inc b/data/scripts/maps/DewfordTown_PokemonCenter_1F.inc index 96c198ae5..70e75492e 100644 --- a/data/scripts/maps/DewfordTown_PokemonCenter_1F.inc +++ b/data/scripts/maps/DewfordTown_PokemonCenter_1F.inc @@ -10,7 +10,7 @@ DewfordTown_PokemonCenter_1F_MapScript1_15301A:: @ 815301A DewfordTown_PokemonCenter_1F_EventScript_153023:: @ 8153023 setvar 0x800b, 1 call DewfordTown_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end diff --git a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc index adfbca1bf..febd6a521 100644 --- a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc +++ b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc @@ -50,7 +50,7 @@ EverGrandeCity_ChampionsRoom_EventScript_15B821:: @ 815B821 setmaptile 6, 2, 839, 0 special DrawWholeMapView msgbox EverGrandeCity_ChampionsRoom_Text_1910FE, 4 - closebutton + closemessage playse 8 checkgender compare RESULT, 0 @@ -101,7 +101,7 @@ EverGrandeCity_ChampionsRoom_EventScript_15B8BB:: @ 815B8BB end EverGrandeCity_ChampionsRoom_EventScript_15B8F0:: @ 815B8F0 - closebutton + closemessage addobject 3 applymovement 3, EverGrandeCity_ChampionsRoom_Movement_15BA03 waitmovement 0 @@ -116,7 +116,7 @@ EverGrandeCity_ChampionsRoom_EventScript_15B8F0:: @ 815B8F0 applymovement 1, EverGrandeCity_ChampionsRoom_Movement_1A0845 waitmovement 0 msgbox EverGrandeCity_ChampionsRoom_Text_191512, 4 - closebutton + closemessage delay 30 applymovement 1, EverGrandeCity_ChampionsRoom_Movement_15B9FB applymovement 255, EverGrandeCity_ChampionsRoom_Movement_15B9DD @@ -132,7 +132,7 @@ EverGrandeCity_ChampionsRoom_EventScript_15B8F0:: @ 815B8F0 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B9AB compare RESULT, 1 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B9B4 - closebutton + closemessage applymovement 1, EverGrandeCity_ChampionsRoom_Movement_15B9FF applymovement 255, EverGrandeCity_ChampionsRoom_Movement_15B9E0 waitmovement 0 diff --git a/data/scripts/maps/EverGrandeCity_HallOfFame.inc b/data/scripts/maps/EverGrandeCity_HallOfFame.inc index 523a337cc..b53319abe 100644 --- a/data/scripts/maps/EverGrandeCity_HallOfFame.inc +++ b/data/scripts/maps/EverGrandeCity_HallOfFame.inc @@ -24,7 +24,7 @@ EverGrandeCity_HallOfFame_EventScript_15BBA8:: @ 815BBA8 applymovement 255, EverGrandeCity_HallOfFame_Movement_1A083F waitmovement 0 msgbox EverGrandeCity_HallOfFame_Text_191841, 4 - closebutton + closemessage applymovement 1, EverGrandeCity_HallOfFame_Movement_15BC60 applymovement 255, EverGrandeCity_HallOfFame_Movement_15BC60 waitmovement 0 @@ -33,7 +33,7 @@ EverGrandeCity_HallOfFame_EventScript_15BBA8:: @ 815BBA8 applymovement 255, EverGrandeCity_HallOfFame_Movement_1A083F waitmovement 0 msgbox EverGrandeCity_HallOfFame_Text_1918D7, 4 - closebutton + closemessage applymovement 1, EverGrandeCity_HallOfFame_Movement_1A0841 applymovement 255, EverGrandeCity_HallOfFame_Movement_1A0841 waitmovement 0 diff --git a/data/scripts/maps/EverGrandeCity_PokemonCenter_1F.inc b/data/scripts/maps/EverGrandeCity_PokemonCenter_1F.inc index 7c0b8b0a4..57262b211 100644 --- a/data/scripts/maps/EverGrandeCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/EverGrandeCity_PokemonCenter_1F.inc @@ -10,7 +10,7 @@ EverGrandeCity_PokemonCenter_1F_EventScript_15BC70:: @ 815BC70 SootopolisCity_PokemonCenter_1F_EventScript_15BC70:: @ 815BC70 setvar 0x800b, 1 call SootopolisCity_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end diff --git a/data/scripts/maps/EverGrandeCity_PokemonLeague.inc b/data/scripts/maps/EverGrandeCity_PokemonLeague.inc index f15f05904..acbdac899 100644 --- a/data/scripts/maps/EverGrandeCity_PokemonLeague.inc +++ b/data/scripts/maps/EverGrandeCity_PokemonLeague.inc @@ -10,14 +10,14 @@ EverGrandeCity_PokemonLeague_MapScript1_15BA7B:: @ 815BA7B end EverGrandeCity_PokemonLeague_EventScript_15BA8B:: @ 815BA8B - movespriteperm 3, 9, 2 - movespriteperm 4, 10, 2 + setobjectxyperm 3, 9, 2 + setobjectxyperm 4, 10, 2 return EverGrandeCity_PokemonLeague_EventScript_15BA9A:: @ 815BA9A setvar 0x800b, 1 call EverGrandeCity_PokemonLeague_EventScript_19FD5B - waittext + waitmessage waitbutton release end @@ -26,7 +26,7 @@ EverGrandeCity_PokemonLeague_EventScript_15BAA8:: @ 815BAA8 lock faceplayer message EverGrandeCity_PokemonLeague_Text_1A0BE4 - waittext + waitmessage pokemart EverGrandeCity_PokemonLeague_Items msgbox EverGrandeCity_PokemonLeague_Text_1A0C02, 4 release @@ -55,22 +55,22 @@ EverGrandeCity_PokemonLeague_EventScript_15BAD2:: @ 815BAD2 compare 0x4000, 8 call_if 3, EverGrandeCity_PokemonLeague_EventScript_15BB3F message EverGrandeCity_PokemonLeague_Text_1916FD - waittext + waitmessage delay 75 checkflag 2060 goto_if 0, EverGrandeCity_PokemonLeague_EventScript_15BB4A - closebutton + closemessage applymovement 3, EverGrandeCity_PokemonLeague_Movement_15BB7E applymovement 4, EverGrandeCity_PokemonLeague_Movement_15BB81 waitmovement 0 delay 10 playfanfare 369 message EverGrandeCity_PokemonLeague_Text_191804 - waittext + waitmessage waitfanfare - closebutton - moveoffscreen 3 - moveoffscreen 4 + closemessage + moveobjectoffscreen 3 + moveobjectoffscreen 4 setflag 263 releaseall end @@ -95,7 +95,7 @@ EverGrandeCity_PokemonLeague_EventScript_15BB57:: @ 815BB57 applymovement LAST_TALKED, EverGrandeCity_PokemonLeague_Movement_1A0839 waitmovement 0 msgbox EverGrandeCity_PokemonLeague_Text_191804, 4 - closebutton + closemessage applymovement LAST_TALKED, EverGrandeCity_PokemonLeague_Movement_1A083D waitmovement 0 releaseall diff --git a/data/scripts/maps/FallarborTown_ContestLobby.inc b/data/scripts/maps/FallarborTown_ContestLobby.inc index a629acaf9..c4c590b53 100644 --- a/data/scripts/maps/FallarborTown_ContestLobby.inc +++ b/data/scripts/maps/FallarborTown_ContestLobby.inc @@ -38,7 +38,7 @@ FallarborTown_ContestLobby_EventScript_1539F8:: @ 81539F8 applymovement 255, FallarborTown_ContestLobby_Movement_153A7A waitmovement 0 msgbox FallarborTown_ContestLobby_Text_1A6832, 4 - closebutton + closemessage applymovement 1, FallarborTown_ContestLobby_Movement_153A83 applymovement 255, FallarborTown_ContestLobby_Movement_153A70 waitmovement 0 @@ -108,7 +108,7 @@ FallarborTown_ContestLobby_EventScript_153AB2:: @ 8153AB2 FallarborTown_ContestLobby_EventScript_153ABB:: @ 8153ABB lockall fadescreen 1 - showcontestwinner 2 + drawcontestwinner 2 releaseall end @@ -116,6 +116,6 @@ FallarborTown_ContestLobby_EventScript_153AC2:: @ 8153AC2 lockall special ShowBerryBlenderRecordWindow waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end diff --git a/data/scripts/maps/FallarborTown_Mart.inc b/data/scripts/maps/FallarborTown_Mart.inc index 05a3704fe..0cf842ddf 100644 --- a/data/scripts/maps/FallarborTown_Mart.inc +++ b/data/scripts/maps/FallarborTown_Mart.inc @@ -5,7 +5,7 @@ FallarborTown_Mart_EventScript_153967:: @ 8153967 lock faceplayer message FallarborTown_Mart_Text_1A0BE4 - waittext + waitmessage pokemart FallarborTown_Mart_Items msgbox FallarborTown_Mart_Text_1A0C02, 4 release diff --git a/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc b/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc index 3b33c5a41..5b1f1c948 100644 --- a/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc +++ b/data/scripts/maps/FallarborTown_PokemonCenter_1F.inc @@ -10,7 +10,7 @@ FallarborTown_PokemonCenter_1F_MapScript1_153AF9:: @ 8153AF9 FallarborTown_PokemonCenter_1F_EventScript_153B02:: @ 8153B02 setvar 0x800b, 1 call FallarborTown_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end @@ -27,7 +27,7 @@ FallarborTown_PokemonCenter_1F_EventScript_153B22:: @ 8153B22 lock faceplayer msgbox FallarborTown_PokemonCenter_1F_Text_1774D4, 4 - closebutton + closemessage switch FACING case 2, FallarborTown_PokemonCenter_1F_EventScript_153B49 case 3, FallarborTown_PokemonCenter_1F_EventScript_153B59 diff --git a/data/scripts/maps/FortreeCity.inc b/data/scripts/maps/FortreeCity.inc index a7c548b1f..3cddff4f9 100644 --- a/data/scripts/maps/FortreeCity.inc +++ b/data/scripts/maps/FortreeCity.inc @@ -72,7 +72,7 @@ FortreeCity_EventScript_14C9CF:: @ 814C9CF FortreeCity_EventScript_14C9E4:: @ 814C9E4 msgbox FortreeCity_Text_1678CB, 4 - closebutton + closemessage applymovement LAST_TALKED, FortreeCity_Movement_1A0662 waitmovement 0 waitse diff --git a/data/scripts/maps/FortreeCity_DecorationShop.inc b/data/scripts/maps/FortreeCity_DecorationShop.inc index c9d9fdd4e..fca20b866 100644 --- a/data/scripts/maps/FortreeCity_DecorationShop.inc +++ b/data/scripts/maps/FortreeCity_DecorationShop.inc @@ -13,7 +13,7 @@ FortreeCity_DecorationShop_EventScript_15826A:: @ 815826A lock faceplayer message FortreeCity_DecorationShop_Text_1A0BE4 - waittext + waitmessage pokemartdecor FortreeCity_DecorationShop_Decorations1 msgbox FortreeCity_DecorationShop_Text_1A0C02, 4 release @@ -37,7 +37,7 @@ FortreeCity_DecorationShop_EventScript_158298:: @ 8158298 lock faceplayer message FortreeCity_DecorationShop_Text_1A0BE4 - waittext + waitmessage pokemartdecor FortreeCity_DecorationShop_Decorations2 msgbox FortreeCity_DecorationShop_Text_1A0C02, 4 release diff --git a/data/scripts/maps/FortreeCity_Gym.inc b/data/scripts/maps/FortreeCity_Gym.inc index 8744141cb..7309be0bb 100644 --- a/data/scripts/maps/FortreeCity_Gym.inc +++ b/data/scripts/maps/FortreeCity_Gym.inc @@ -25,7 +25,7 @@ FortreeCity_Gym_EventScript_157EF0:: @ 8157EF0 FortreeCity_Gym_EventScript_157F15:: @ 8157F15 message FortreeCity_Gym_Text_185E48 - waittext + waitmessage call FortreeCity_Gym_EventScript_1A02C5 msgbox FortreeCity_Gym_Text_185E73, 4 setflag 1225 diff --git a/data/scripts/maps/FortreeCity_House4.inc b/data/scripts/maps/FortreeCity_House4.inc index f90c080f8..fdd30022f 100644 --- a/data/scripts/maps/FortreeCity_House4.inc +++ b/data/scripts/maps/FortreeCity_House4.inc @@ -14,7 +14,7 @@ FortreeCity_House4_EventScript_158188:: @ 8158188 checkflag 222 goto_if_eq FortreeCity_House4_EventScript_1581C2 msgbox FortreeCity_House4_Text_186835, 4 - closebutton + closemessage setflag 222 clearflag 934 applymovement 3, FortreeCity_House4_Movement_158218 diff --git a/data/scripts/maps/FortreeCity_Mart.inc b/data/scripts/maps/FortreeCity_Mart.inc index 9e5f34ff9..076f702af 100644 --- a/data/scripts/maps/FortreeCity_Mart.inc +++ b/data/scripts/maps/FortreeCity_Mart.inc @@ -5,7 +5,7 @@ FortreeCity_Mart_EventScript_158067:: @ 8158067 lock faceplayer message FortreeCity_Mart_Text_1A0BE4 - waittext + waitmessage pokemart FortreeCity_Mart_Items msgbox FortreeCity_Mart_Text_1A0C02, 4 release diff --git a/data/scripts/maps/FortreeCity_PokemonCenter_1F.inc b/data/scripts/maps/FortreeCity_PokemonCenter_1F.inc index 148324abf..5268cbeed 100644 --- a/data/scripts/maps/FortreeCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/FortreeCity_PokemonCenter_1F.inc @@ -9,7 +9,7 @@ FortreeCity_PokemonCenter_1F_MapScript1_158017:: @ 8158017 FortreeCity_PokemonCenter_1F_EventScript_15801B:: @ 815801B setvar 0x800b, 1 call FortreeCity_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end diff --git a/data/scripts/maps/GraniteCave_StevensRoom.inc b/data/scripts/maps/GraniteCave_StevensRoom.inc index 9afe54091..070276e58 100644 --- a/data/scripts/maps/GraniteCave_StevensRoom.inc +++ b/data/scripts/maps/GraniteCave_StevensRoom.inc @@ -13,7 +13,7 @@ GraniteCave_StevensRoom_EventScript_15CBFA:: @ 815CBFA compare RESULT, 0 call_if 1, GraniteCave_StevensRoom_EventScript_15CC83 msgbox GraniteCave_StevensRoom_Text_194C8D, 4 - closebutton + closemessage compare FACING, 2 call_if 1, GraniteCave_StevensRoom_EventScript_15CC6D compare FACING, 1 diff --git a/data/scripts/maps/IslandCave.inc b/data/scripts/maps/IslandCave.inc index b59500625..ed230477c 100644 --- a/data/scripts/maps/IslandCave.inc +++ b/data/scripts/maps/IslandCave.inc @@ -70,7 +70,7 @@ IslandCave_EventScript_15EF7C:: @ 815EF7C IslandCave_EventScript_15EF95:: @ 815EF95 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end diff --git a/data/scripts/maps/LavaridgeTown.inc b/data/scripts/maps/LavaridgeTown.inc index afad309a9..e0d54d0e7 100644 --- a/data/scripts/maps/LavaridgeTown.inc +++ b/data/scripts/maps/LavaridgeTown.inc @@ -14,8 +14,8 @@ LavaridgeTown_MapScript1_14E4AE:: @ 814E4AE end LavaridgeTown_EventScript_14E4D0:: @ 814E4D0 - movespriteperm 8, 11, 9 - movespriteperm 7, 11, 9 + setobjectxyperm 8, 11, 9 + setobjectxyperm 7, 11, 9 return LavaridgeTown_EventScript_14E4DF:: @ 814E4DF @@ -98,7 +98,7 @@ LavaridgeTown_EventScript_14E5D0:: @ 814E5D0 end LavaridgeTown_EventScript_14E5F5:: @ 814E5F5 - closebutton + closemessage compare 0x8008, 1 call_if 1, LavaridgeTown_EventScript_14E646 compare 0x8008, 0 @@ -124,7 +124,7 @@ LavaridgeTown_EventScript_14E644:: @ 814E644 end LavaridgeTown_EventScript_14E646:: @ 814E646 - movespriteperm 7, 6, 16 + setobjectxyperm 7, 6, 16 return LavaridgeTown_EventScript_14E64E:: @ 814E64E @@ -139,19 +139,19 @@ LavaridgeTown_EventScript_14E64E:: @ 814E64E return LavaridgeTown_EventScript_14E67B:: @ 814E67B - spritebehave 7, 8 + setobjectmovementtype 7, 8 return LavaridgeTown_EventScript_14E680:: @ 814E680 - spritebehave 7, 7 + setobjectmovementtype 7, 7 return LavaridgeTown_EventScript_14E685:: @ 814E685 - spritebehave 7, 10 + setobjectmovementtype 7, 10 return LavaridgeTown_EventScript_14E68A:: @ 814E68A - spritebehave 7, 9 + setobjectmovementtype 7, 9 return LavaridgeTown_EventScript_14E68F:: @ 814E68F @@ -285,7 +285,7 @@ LavaridgeTown_EventScript_14E75A:: @ 814E75A playfanfare 370 message LavaridgeTown_Text_16C2EA waitfanfare - waittext + waitmessage giveegg 360 release end diff --git a/data/scripts/maps/LavaridgeTown_Gym_1F.inc b/data/scripts/maps/LavaridgeTown_Gym_1F.inc index e22d4471f..2edffe9f0 100644 --- a/data/scripts/maps/LavaridgeTown_Gym_1F.inc +++ b/data/scripts/maps/LavaridgeTown_Gym_1F.inc @@ -43,27 +43,27 @@ LavaridgeTown_Gym_1F_EventScript_1536FE:: @ 81536FE LavaridgeTown_Gym_1F_EventScript_1536FF:: @ 81536FF checktrainerflag OPPONENT_COLE goto_if_eq LavaridgeTown_Gym_1F_EventScript_15370C - spritebehave 2, 63 + setobjectmovementtype 2, 63 LavaridgeTown_Gym_1F_EventScript_15370C:: @ 815370C checktrainerflag OPPONENT_ZANE goto_if_eq LavaridgeTown_Gym_1F_EventScript_153719 - spritebehave 3, 63 + setobjectmovementtype 3, 63 LavaridgeTown_Gym_1F_EventScript_153719:: @ 8153719 checktrainerflag OPPONENT_AXLE goto_if_eq LavaridgeTown_Gym_1F_EventScript_153726 - spritebehave 4, 63 + setobjectmovementtype 4, 63 LavaridgeTown_Gym_1F_EventScript_153726:: @ 8153726 checktrainerflag OPPONENT_SADIE goto_if_eq LavaridgeTown_Gym_1F_EventScript_153733 - spritebehave 5, 63 + setobjectmovementtype 5, 63 LavaridgeTown_Gym_1F_EventScript_153733:: @ 8153733 checktrainerflag OPPONENT_ANDY goto_if_eq LavaridgeTown_Gym_1F_EventScript_153740 - spritebehave 7, 63 + setobjectmovementtype 7, 63 LavaridgeTown_Gym_1F_EventScript_153740:: @ 8153740 return @@ -78,7 +78,7 @@ LavaridgeTown_Gym_1F_EventScript_153741:: @ 8153741 LavaridgeTown_Gym_1F_EventScript_153766:: @ 8153766 message LavaridgeTown_Gym_1F_Text_176A62 - waittext + waitmessage call LavaridgeTown_Gym_1F_EventScript_1A02C5 msgbox LavaridgeTown_Gym_1F_Text_176A8C, 4 setflag 1213 diff --git a/data/scripts/maps/LavaridgeTown_HerbShop.inc b/data/scripts/maps/LavaridgeTown_HerbShop.inc index c924684bc..5ec6731d4 100644 --- a/data/scripts/maps/LavaridgeTown_HerbShop.inc +++ b/data/scripts/maps/LavaridgeTown_HerbShop.inc @@ -5,7 +5,7 @@ LavaridgeTown_HerbShop_EventScript_153629:: @ 8153629 lock faceplayer message LavaridgeTown_HerbShop_Text_17615C - waittext + waitmessage pokemart LavaridgeTown_HerbShop_Items msgbox LavaridgeTown_HerbShop_Text_1A0C02, 4 release diff --git a/data/scripts/maps/LavaridgeTown_Mart.inc b/data/scripts/maps/LavaridgeTown_Mart.inc index 4f28e16b0..99b567e06 100644 --- a/data/scripts/maps/LavaridgeTown_Mart.inc +++ b/data/scripts/maps/LavaridgeTown_Mart.inc @@ -5,7 +5,7 @@ LavaridgeTown_Mart_EventScript_1538CB:: @ 81538CB lock faceplayer message LavaridgeTown_Mart_Text_1A0BE4 - waittext + waitmessage pokemart LavaridgeTown_Mart_Items msgbox LavaridgeTown_Mart_Text_1A0C02, 4 release diff --git a/data/scripts/maps/LavaridgeTown_PokemonCenter_1F.inc b/data/scripts/maps/LavaridgeTown_PokemonCenter_1F.inc index c0762bcc3..9d0f31059 100644 --- a/data/scripts/maps/LavaridgeTown_PokemonCenter_1F.inc +++ b/data/scripts/maps/LavaridgeTown_PokemonCenter_1F.inc @@ -10,7 +10,7 @@ LavaridgeTown_PokemonCenter_1F_MapScript1_153912:: @ 8153912 LavaridgeTown_PokemonCenter_1F_EventScript_15391B:: @ 815391B setvar 0x800b, 1 call LavaridgeTown_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end diff --git a/data/scripts/maps/LilycoveCity.inc b/data/scripts/maps/LilycoveCity.inc index af353e824..76976543c 100644 --- a/data/scripts/maps/LilycoveCity.inc +++ b/data/scripts/maps/LilycoveCity.inc @@ -411,7 +411,7 @@ LilycoveCity_EventScript_14CF62:: @ 814CF62 return LilycoveCity_EventScript_14CF6B:: @ 814CF6B - closebutton + closemessage applymovement LAST_TALKED, LilycoveCity_Movement_1A0845 waitmovement 0 delay 50 diff --git a/data/scripts/maps/LilycoveCity_ContestLobby.inc b/data/scripts/maps/LilycoveCity_ContestLobby.inc index 7746eac01..09f2e88ea 100644 --- a/data/scripts/maps/LilycoveCity_ContestLobby.inc +++ b/data/scripts/maps/LilycoveCity_ContestLobby.inc @@ -28,7 +28,7 @@ LilycoveCity_ContestLobby_EventScript_158898:: @ 8158898 msgbox LilycoveCity_ContestLobby_Text_18890F, 4 lockall fadescreen 1 - showcontestwinner 0 + drawcontestwinner 0 lockall msgbox LilycoveCity_ContestLobby_Text_1889FD, 5 compare RESULT, 1 @@ -40,7 +40,7 @@ LilycoveCity_ContestLobby_EventScript_158898:: @ 8158898 LilycoveCity_ContestLobby_EventScript_1588DE:: @ 81588DE msgbox LilycoveCity_ContestLobby_Text_188AE8, 4 - closebutton + closemessage special sub_80C4CEC setvar 0x4099, 0 specialvar RESULT, GiveMonArtistRibbon @@ -59,7 +59,7 @@ LilycoveCity_ContestLobby_EventScript_158918:: @ 8158918 compare RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_1588DE msgbox LilycoveCity_ContestLobby_Text_188CBD, 4 - closebutton + closemessage applymovement 4, LilycoveCity_ContestLobby_Movement_158A43 waitmovement 0 setvar 0x4099, 0 @@ -83,7 +83,7 @@ LilycoveCity_ContestLobby_EventScript_158948:: @ 8158948 waitfanfare msgbox LilycoveCity_ContestLobby_Text_188C19, 4 msgbox LilycoveCity_ContestLobby_Text_188C32, 4 - closebutton + closemessage return LilycoveCity_ContestLobby_EventScript_158994:: @ 8158994 @@ -203,7 +203,7 @@ LilycoveCity_ContestLobby_EventScript_158A6A:: @ 8158A6A msgbox LilycoveCity_ContestLobby_Text_18890F, 4 lockall fadescreen 1 - showcontestwinner 0 + drawcontestwinner 0 msgbox LilycoveCity_ContestLobby_Text_1889FD, 5 compare RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_158AAE @@ -213,7 +213,7 @@ LilycoveCity_ContestLobby_EventScript_158A6A:: @ 8158A6A LilycoveCity_ContestLobby_EventScript_158AAE:: @ 8158AAE msgbox LilycoveCity_ContestLobby_Text_188AE8, 4 - closebutton + closemessage special sub_80C4CEC setvar 0x4099, 0 specialvar RESULT, GiveMonArtistRibbon @@ -232,7 +232,7 @@ LilycoveCity_ContestLobby_EventScript_158AE8:: @ 8158AE8 compare RESULT, 1 goto_if_eq LilycoveCity_ContestLobby_EventScript_158AAE msgbox LilycoveCity_ContestLobby_Text_188CBD, 4 - closebutton + closemessage applymovement 11, LilycoveCity_ContestLobby_Movement_158B6D waitmovement 0 setvar 0x4099, 0 @@ -256,7 +256,7 @@ LilycoveCity_ContestLobby_EventScript_158B18:: @ 8158B18 waitfanfare msgbox LilycoveCity_ContestLobby_Text_188C19, 4 msgbox LilycoveCity_ContestLobby_Text_188C32, 4 - closebutton + closemessage return LilycoveCity_ContestLobby_Movement_158B64:: @ 8158B64 @@ -310,14 +310,14 @@ LilycoveCity_ContestLobby_EventScript_158B85:: @ 8158B85 checkflag 2 goto_if_eq LilycoveCity_ContestLobby_EventScript_158BAE message LilycoveCity_ContestLobby_Text_18848C - waittext + waitmessage setflag 2 goto LilycoveCity_ContestLobby_EventScript_158BF0 end LilycoveCity_ContestLobby_EventScript_158BAE:: @ 8158BAE message LilycoveCity_ContestLobby_Text_188584 - waittext + waitmessage goto LilycoveCity_ContestLobby_EventScript_158BF0 end @@ -331,7 +331,7 @@ LilycoveCity_ContestLobby_EventScript_158BC4:: @ 8158BC4 compare RESULT, 0 goto_if_eq LilycoveCity_ContestLobby_EventScript_158C35 call S_DoSaveDialog - hidebox 0, 0, 15, 9 + erasebox 0, 0, 15, 9 compare RESULT, 0 goto_if_eq LilycoveCity_ContestLobby_EventScript_158C35 setflag 3 @@ -394,7 +394,7 @@ LilycoveCity_ContestLobby_EventScript_158CB2:: @ 8158CB2 LilycoveCity_ContestLobby_EventScript_158CC0:: @ 8158CC0 copyvar 0x8008, 0x8004 message LilycoveCity_ContestLobby_Text_1A67A3 - waittext + waitmessage yesnobox 20, 8 switch RESULT case 0, LilycoveCity_ContestLobby_EventScript_158C42 @@ -405,7 +405,7 @@ LilycoveCity_ContestLobby_EventScript_158CEA:: @ 8158CEA checkflag 3 call_if 0, LilycoveCity_ContestLobby_EventScript_158BC4 message LilycoveCity_ContestLobby_Text_1886DC - waittext + waitmessage multichoice 0, 0, 4, 0 switch RESULT case 5, LilycoveCity_ContestLobby_EventScript_158C35 @@ -416,7 +416,7 @@ LilycoveCity_ContestLobby_EventScript_158CEA:: @ 8158CEA LilycoveCity_ContestLobby_EventScript_158D24:: @ 8158D24 message LilycoveCity_ContestLobby_Text_1887C7 - waittext + waitmessage copyvar 0x8004, RESULT special sub_808363C waitstate @@ -427,7 +427,7 @@ LilycoveCity_ContestLobby_EventScript_158D24:: @ 8158D24 compare RESULT, 6 goto_if_eq LilycoveCity_ContestLobby_EventScript_158DB2 message2 LilycoveCity_ContestLobby_Text_18872A - waittext + waitmessage contestlinktransfer switch 0x8004 case 0, LilycoveCity_ContestLobby_EventScript_158DD1 @@ -443,7 +443,7 @@ LilycoveCity_ContestLobby_EventScript_158D82:: @ 8158D82 LilycoveCity_ContestLobby_EventScript_158D90:: @ 8158D90 special CloseLink msgbox LilycoveCity_ContestLobby_Text_18878D, 4 - closebutton + closemessage releaseall clearflag 3 end @@ -451,7 +451,7 @@ LilycoveCity_ContestLobby_EventScript_158D90:: @ 8158D90 LilycoveCity_ContestLobby_EventScript_158DA1:: @ 8158DA1 special CloseLink msgbox LilycoveCity_ContestLobby_Text_1887F4, 4 - closebutton + closemessage releaseall clearflag 3 end @@ -459,7 +459,7 @@ LilycoveCity_ContestLobby_EventScript_158DA1:: @ 8158DA1 LilycoveCity_ContestLobby_EventScript_158DB2:: @ 8158DB2 special CloseLink msgbox LilycoveCity_ContestLobby_Text_18881F, 4 - closebutton + closemessage releaseall clearflag 3 end @@ -474,7 +474,7 @@ LilycoveCity_ContestLobby_EventScript_158DD1:: @ 8158DD1 addvar 0x8004, 1 buffernum 1, 32772 message2 LilycoveCity_ContestLobby_Text_188845 - waittext + waitmessage addvar 0x8004, 65535 goto LilycoveCity_ContestLobby_EventScript_158DEE end @@ -491,9 +491,9 @@ LilycoveCity_ContestLobby_EventScript_158DEE:: @ 8158DEE LilycoveCity_ContestLobby_EventScript_158E0B:: @ 8158E0B lockall message2 LilycoveCity_ContestLobby_Text_1888C6 - waittext + waitmessage delay 20 - closebutton + closemessage applymovement 2, LilycoveCity_ContestLobby_Movement_158E9C waitmovement 0 playse 71 @@ -512,9 +512,9 @@ LilycoveCity_ContestLobby_EventScript_158E0B:: @ 8158E0B applymovement 255, LilycoveCity_ContestLobby_Movement_158E99 waitmovement 0 message2 LilycoveCity_ContestLobby_Text_1A6832 - waittext + waitmessage delay 20 - closebutton + closemessage applymovement 2, LilycoveCity_ContestLobby_Movement_158EA4 applymovement 255, LilycoveCity_ContestLobby_Movement_158E8E waitmovement 0 @@ -651,7 +651,7 @@ LilycoveCity_ContestLobby_EventScript_158F86:: @ 8158F86 applymovement 255, LilycoveCity_ContestLobby_Movement_159008 waitmovement 0 msgbox LilycoveCity_ContestLobby_Text_1A6832, 4 - closebutton + closemessage applymovement 1, LilycoveCity_ContestLobby_Movement_159013 applymovement 255, LilycoveCity_ContestLobby_Movement_158FFE waitmovement 0 @@ -735,21 +735,21 @@ LilycoveCity_ContestLobby_EventScript_15905D:: @ 815905D LilycoveCity_ContestLobby_EventScript_159066:: @ 8159066 lockall fadescreen 1 - showcontestwinner 6 + drawcontestwinner 6 releaseall end LilycoveCity_ContestLobby_EventScript_15906D:: @ 815906D lockall fadescreen 1 - showcontestwinner 7 + drawcontestwinner 7 releaseall end LilycoveCity_ContestLobby_EventScript_159074:: @ 8159074 lockall fadescreen 1 - showcontestwinner 8 + drawcontestwinner 8 releaseall end @@ -766,6 +766,6 @@ SlateportCity_ContestLobby_EventScript_15908D:: @ 815908D lockall special ShowBerryBlenderRecordWindow waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end diff --git a/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc b/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc index f6fb499a3..7b602b2c7 100644 --- a/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc +++ b/data/scripts/maps/LilycoveCity_CoveLilyMotel_1F.inc @@ -11,7 +11,7 @@ LilycoveCity_CoveLilyMotel_1F_EventScript_1582C5:: @ 81582C5 applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0839 waitmovement 0 msgbox LilycoveCity_CoveLilyMotel_1F_Text_186C2B, 4 - closebutton + closemessage applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A083D waitmovement 0 releaseall @@ -22,7 +22,7 @@ LilycoveCity_CoveLilyMotel_1F_EventScript_1582FF:: @ 81582FF applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0839 waitmovement 0 msgbox LilycoveCity_CoveLilyMotel_1F_Text_186D7F, 4 - closebutton + closemessage applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A083D waitmovement 0 releaseall @@ -33,7 +33,7 @@ LilycoveCity_CoveLilyMotel_1F_EventScript_158326:: @ 8158326 applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A0839 waitmovement 0 msgbox LilycoveCity_CoveLilyMotel_1F_Text_186F09, 4 - closebutton + closemessage applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_1A083D waitmovement 0 releaseall @@ -49,7 +49,7 @@ LilycoveCity_CoveLilyMotel_1F_EventScript_15834D:: @ 815834D applymovement 255, LilycoveCity_CoveLilyMotel_1F_Movement_1A0845 waitmovement 0 msgbox LilycoveCity_CoveLilyMotel_1F_Text_186CA6, 4 - closebutton + closemessage applymovement 255, LilycoveCity_CoveLilyMotel_1F_Movement_158395 applymovement 1, LilycoveCity_CoveLilyMotel_1F_Movement_15839A waitmovement 0 diff --git a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc index 0a51aff26..fd9ea8a58 100644 --- a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc +++ b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc @@ -27,7 +27,7 @@ LilycoveCity_CoveLilyMotel_2F_EventScript_1583D0:: @ 81583D0 LilycoveCity_CoveLilyMotel_2F_EventScript_1583DD:: @ 81583DD message LilycoveCity_CoveLilyMotel_2F_Text_18708F - waittext + waitmessage call LilycoveCity_CoveLilyMotel_2F_EventScript_1A02C5 special ScrSpecial_ShowDiploma waitstate diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc index 43f110577..9d04d2e33 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreElevator.inc @@ -9,7 +9,7 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A39C:: @ 815A39C copyvar 0x8005, 0x4043 special sub_810E944 message LilycoveCity_DepartmentStoreElevator_Text_1A0EF6 - waittext + waitmessage multichoice 0, 0, 57, 0 switch RESULT case 0, LilycoveCity_DepartmentStoreElevator_EventScript_15A402 @@ -66,12 +66,12 @@ LilycoveCity_DepartmentStoreElevator_EventScript_15A48E:: @ 815A48E end LilycoveCity_DepartmentStoreElevator_EventScript_15A4B1:: @ 815A4B1 - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 release end LilycoveCity_DepartmentStoreElevator_EventScript_15A4B8:: @ 815A4B8 - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 applymovement LAST_TALKED, LilycoveCity_DepartmentStoreElevator_Movement_1A0845 waitmovement 0 special sub_810EBEC diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc index b01d74129..02f5ca3ca 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc @@ -22,7 +22,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A167:: @ 815A167 lock faceplayer message LilycoveCity_DepartmentStoreRooftop_Text_1A0BE4 - waittext + waitmessage pokemartdecor LilycoveCity_DepartmentStoreRooftop_Decorations msgbox LilycoveCity_DepartmentStoreRooftop_Text_1A0C02, 4 release @@ -70,7 +70,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A1C4:: @ 815A1C4 LilycoveCity_DepartmentStoreRooftop_EventScript_15A1CD:: @ 815A1CD lockall message LilycoveCity_DepartmentStoreRooftop_Text_18C72B - waittext + waitmessage showmoney 0, 0 nop goto LilycoveCity_DepartmentStoreRooftop_EventScript_15A1DE @@ -182,7 +182,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 LilycoveCity_DepartmentStoreRooftop_EventScript_15A36E:: @ 815A36E message LilycoveCity_DepartmentStoreRooftop_Text_18C72B - waittext + waitmessage goto LilycoveCity_DepartmentStoreRooftop_EventScript_15A1DE end diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc index 311dac1ab..2b39ea557 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc @@ -18,7 +18,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_159D5E:: @ 8159D5E goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E56 setflag 2250 message LilycoveCity_DepartmentStore_1F_Text_1C4CC6 - waittext + waitmessage special RetrieveLotteryNumber copyvar 0x8008, RESULT special sub_810F9AC diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_2F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_2F.inc index e54883714..25e981628 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_2F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_2F.inc @@ -17,7 +17,7 @@ LilycoveCity_DepartmentStore_2F_EventScript_159F2A:: @ 8159F2A lock faceplayer message LilycoveCity_DepartmentStore_2F_Text_1A0BE4 - waittext + waitmessage pokemart LilycoveCity_DepartmentStore_2F_Items1 msgbox LilycoveCity_DepartmentStore_2F_Text_1A0C02, 4 release @@ -44,7 +44,7 @@ LilycoveCity_DepartmentStore_2F_EventScript_159F5E:: @ 8159F5E lock faceplayer message LilycoveCity_DepartmentStore_2F_Text_1A0BE4 - waittext + waitmessage pokemart LilycoveCity_DepartmentStore_2F_Items2 msgbox LilycoveCity_DepartmentStore_2F_Text_1A0C02, 4 release diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_3F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_3F.inc index e669cef7f..1f55f5018 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_3F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_3F.inc @@ -5,7 +5,7 @@ LilycoveCity_DepartmentStore_3F_EventScript_159F91:: @ 8159F91 lock faceplayer message LilycoveCity_DepartmentStore_3F_Text_1A0BE4 - waittext + waitmessage pokemart LilycoveCity_DepartmentStore_3F_Items1 msgbox LilycoveCity_DepartmentStore_3F_Text_1A0C02, 4 release @@ -27,7 +27,7 @@ LilycoveCity_DepartmentStore_3F_EventScript_159FB8:: @ 8159FB8 lock faceplayer message LilycoveCity_DepartmentStore_3F_Text_1A0BE4 - waittext + waitmessage pokemart LilycoveCity_DepartmentStore_3F_Items2 msgbox LilycoveCity_DepartmentStore_3F_Text_1A0C02, 4 release diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_4F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_4F.inc index 994b3b63f..d922d9181 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_4F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_4F.inc @@ -17,7 +17,7 @@ LilycoveCity_DepartmentStore_4F_EventScript_15A019:: @ 815A019 lock faceplayer message LilycoveCity_DepartmentStore_4F_Text_1A0BE4 - waittext + waitmessage pokemart LilycoveCity_DepartmentStore_4F_Items1 msgbox LilycoveCity_DepartmentStore_4F_Text_1A0C02, 4 release @@ -37,7 +37,7 @@ LilycoveCity_DepartmentStore_4F_EventScript_15A03C:: @ 815A03C lock faceplayer message LilycoveCity_DepartmentStore_4F_Text_1A0BE4 - waittext + waitmessage pokemart LilycoveCity_DepartmentStore_4F_Items2 msgbox LilycoveCity_DepartmentStore_4F_Text_1A0C02, 4 release diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_5F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_5F.inc index 0bef8866a..835a0f48d 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_5F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_5F.inc @@ -5,7 +5,7 @@ LilycoveCity_DepartmentStore_5F_EventScript_15A061:: @ 815A061 lock faceplayer message LilycoveCity_DepartmentStore_5F_Text_1A0BE4 - waittext + waitmessage pokemartbp LilycoveCity_DepartmentStore_5F_Items1 msgbox LilycoveCity_DepartmentStore_5F_Text_1A0C02, 4 release @@ -33,7 +33,7 @@ LilycoveCity_DepartmentStore_5F_EventScript_15A094:: @ 815A094 lock faceplayer message LilycoveCity_DepartmentStore_5F_Text_1A0BE4 - waittext + waitmessage pokemartbp LilycoveCity_DepartmentStore_5F_Items2 msgbox LilycoveCity_DepartmentStore_5F_Text_1A0C02, 4 release @@ -58,7 +58,7 @@ LilycoveCity_DepartmentStore_5F_EventScript_15A0C2:: @ 815A0C2 lock faceplayer message LilycoveCity_DepartmentStore_5F_Text_1A0BE4 - waittext + waitmessage pokemartbp LilycoveCity_DepartmentStore_5F_Items3 msgbox LilycoveCity_DepartmentStore_5F_Text_1A0C02, 4 release @@ -83,7 +83,7 @@ LilycoveCity_DepartmentStore_5F_EventScript_15A0F2:: @ 815A0F2 lock faceplayer message LilycoveCity_DepartmentStore_5F_Text_1A0BE4 - waittext + waitmessage pokemartbp LilycoveCity_DepartmentStore_5F_Items4 msgbox LilycoveCity_DepartmentStore_5F_Text_1A0C02, 4 release diff --git a/data/scripts/maps/LilycoveCity_Harbor.inc b/data/scripts/maps/LilycoveCity_Harbor.inc index cbcac6f6e..1fc172d8c 100644 --- a/data/scripts/maps/LilycoveCity_Harbor.inc +++ b/data/scripts/maps/LilycoveCity_Harbor.inc @@ -28,12 +28,12 @@ LilycoveCity_Harbor_EventScript_1598CD:: @ 81598CD compare RESULT, 0 goto_if_eq LilycoveCity_Harbor_EventScript_159929 message LilycoveCity_Harbor_Text_18B406 - waittext + waitmessage goto LilycoveCity_Harbor_EventScript_1598F1 end LilycoveCity_Harbor_EventScript_1598F1:: @ 81598F1 - multichoicedef 18, 6, 56, 2, 0 + multichoicedefault 18, 6, 56, 2, 0 switch RESULT case 0, LilycoveCity_Harbor_EventScript_159933 case 1, LilycoveCity_Harbor_EventScript_15995B @@ -69,13 +69,13 @@ LilycoveCity_Harbor_EventScript_15995B:: @ 815995B LilycoveCity_Harbor_EventScript_15997E:: @ 815997E message LilycoveCity_Harbor_Text_18B4E2 - waittext + waitmessage goto LilycoveCity_Harbor_EventScript_1598F1 end LilycoveCity_Harbor_EventScript_15998A:: @ 815998A msgbox LilycoveCity_Harbor_Text_18B4B3, 4 - closebutton + closemessage applymovement LAST_TALKED, LilycoveCity_Harbor_Movement_1A0841 waitmovement 0 delay 30 @@ -113,7 +113,7 @@ LilycoveCity_Harbor_EventScript_1599EE:: @ 81599EE checkflag 2131 goto_if 0, LilycoveCity_Harbor_EventScript_1598BA msgbox LilycoveCity_Harbor_Text_1C50F2, 4 - closebutton + closemessage applymovement LAST_TALKED, LilycoveCity_Harbor_Movement_1A0841 waitmovement 0 delay 30 @@ -124,7 +124,7 @@ LilycoveCity_Harbor_EventScript_1599EE:: @ 81599EE applymovement 4, LilycoveCity_Harbor_Movement_1A0839 waitmovement 0 msgbox LilycoveCity_Harbor_Text_1C5120, 4 - closebutton + closemessage applymovement 4, LilycoveCity_Harbor_Movement_1A0841 waitmovement 0 delay 30 diff --git a/data/scripts/maps/LilycoveCity_House3.inc b/data/scripts/maps/LilycoveCity_House3.inc index fa5a30862..f700eed9d 100644 --- a/data/scripts/maps/LilycoveCity_House3.inc +++ b/data/scripts/maps/LilycoveCity_House3.inc @@ -14,7 +14,7 @@ LilycoveCity_House3_EventScript_159BF3:: @ 8159BF3 compare RESULT, 0 goto_if_eq LilycoveCity_House3_EventScript_159C1D msgbox LilycoveCity_House3_Text_18BA2B, 4 - closebutton + closemessage applymovement LAST_TALKED, LilycoveCity_House3_Movement_1A083D waitmovement 0 release @@ -22,7 +22,7 @@ LilycoveCity_House3_EventScript_159BF3:: @ 8159BF3 LilycoveCity_House3_EventScript_159C1D:: @ 8159C1D msgbox LilycoveCity_House3_Text_18B9DC, 4 - closebutton + closemessage applymovement LAST_TALKED, LilycoveCity_House3_Movement_1A083D waitmovement 0 release @@ -32,7 +32,7 @@ LilycoveCity_House3_EventScript_159C32:: @ 8159C32 lock faceplayer msgbox LilycoveCity_House3_Text_18BD64, 4 - closebutton + closemessage applymovement LAST_TALKED, LilycoveCity_House3_Movement_1A083D waitmovement 0 release diff --git a/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc b/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc index 548c80a96..06e82d5f8 100644 --- a/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc +++ b/data/scripts/maps/LilycoveCity_LilycoveMuseum_1F.inc @@ -9,7 +9,7 @@ LilycoveCity_LilycoveMuseum_1F_EventScript_158425:: @ 8158425 lockall applymovement 2, LilycoveCity_LilycoveMuseum_1F_Movement_1A0839 message LilycoveCity_LilycoveMuseum_1F_Text_1873B9 - waittext + waitmessage multichoice 20, 8, 16, 1 compare RESULT, 0 goto_if_eq LilycoveCity_LilycoveMuseum_1F_EventScript_158458 diff --git a/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc b/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc index f63068d74..a4599f14a 100644 --- a/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc +++ b/data/scripts/maps/LilycoveCity_LilycoveMuseum_2F.inc @@ -128,14 +128,14 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_15875C:: @ 815875C compare RESULT, 0 goto_if_eq LilycoveCity_LilycoveMuseum_2F_EventScript_158783 setflag 236 - closebutton + closemessage releaseall end LilycoveCity_LilycoveMuseum_2F_EventScript_158783:: @ 8158783 call LilycoveCity_LilycoveMuseum_2F_EventScript_1A02B8 msgbox LilycoveCity_LilycoveMuseum_2F_Text_188166, 4 - closebutton + closemessage releaseall end @@ -198,34 +198,34 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_158817:: @ 8158817 LilycoveCity_LilycoveMuseum_2F_EventScript_158820:: @ 8158820 msgbox LilycoveCity_LilycoveMuseum_2F_Text_18831A, 3 fadescreen 1 - showcontestwinner 9 + drawcontestwinner 9 releaseall end LilycoveCity_LilycoveMuseum_2F_EventScript_15882E:: @ 815882E msgbox LilycoveCity_LilycoveMuseum_2F_Text_18831A, 3 fadescreen 1 - showcontestwinner 10 + drawcontestwinner 10 releaseall end LilycoveCity_LilycoveMuseum_2F_EventScript_15883C:: @ 815883C msgbox LilycoveCity_LilycoveMuseum_2F_Text_18831A, 3 fadescreen 1 - showcontestwinner 11 + drawcontestwinner 11 releaseall end LilycoveCity_LilycoveMuseum_2F_EventScript_15884A:: @ 815884A msgbox LilycoveCity_LilycoveMuseum_2F_Text_18831A, 3 fadescreen 1 - showcontestwinner 12 + drawcontestwinner 12 releaseall end LilycoveCity_LilycoveMuseum_2F_EventScript_158858:: @ 8158858 msgbox LilycoveCity_LilycoveMuseum_2F_Text_18831A, 3 fadescreen 1 - showcontestwinner 13 + drawcontestwinner 13 releaseall end diff --git a/data/scripts/maps/LilycoveCity_PokemonCenter_1F.inc b/data/scripts/maps/LilycoveCity_PokemonCenter_1F.inc index b398076fa..20b5c5f13 100644 --- a/data/scripts/maps/LilycoveCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/LilycoveCity_PokemonCenter_1F.inc @@ -9,7 +9,7 @@ LilycoveCity_PokemonCenter_1F_MapScript1_15932D:: @ 815932D LilycoveCity_PokemonCenter_1F_EventScript_159331:: @ 8159331 setvar 0x800b, 1 call LilycoveCity_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end diff --git a/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc b/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc index 4d6401502..13217b340 100644 --- a/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc +++ b/data/scripts/maps/LilycoveCity_PokemonTrainerFanClub.inc @@ -104,35 +104,35 @@ LilycoveCity_PokemonTrainerFanClub_EventScript_159429:: @ 8159429 end LilycoveCity_PokemonTrainerFanClub_EventScript_1594D5:: @ 81594D5 - movespriteperm 1, 7, 5 + setobjectxyperm 1, 7, 5 return LilycoveCity_PokemonTrainerFanClub_EventScript_1594DD:: @ 81594DD - movespriteperm 3, 3, 4 + setobjectxyperm 3, 3, 4 return LilycoveCity_PokemonTrainerFanClub_EventScript_1594E5:: @ 81594E5 - movespriteperm 4, 7, 2 + setobjectxyperm 4, 7, 2 return LilycoveCity_PokemonTrainerFanClub_EventScript_1594ED:: @ 81594ED - movespriteperm 5, 5, 5 + setobjectxyperm 5, 5, 5 return LilycoveCity_PokemonTrainerFanClub_EventScript_1594F5:: @ 81594F5 - movespriteperm 6, 5, 2 + setobjectxyperm 6, 5, 2 return LilycoveCity_PokemonTrainerFanClub_EventScript_1594FD:: @ 81594FD - movespriteperm 2, 8, 4 + setobjectxyperm 2, 8, 4 return LilycoveCity_PokemonTrainerFanClub_EventScript_159505:: @ 8159505 - movespriteperm 7, 3, 3 + setobjectxyperm 7, 3, 3 return LilycoveCity_PokemonTrainerFanClub_EventScript_15950D:: @ 815950D - movespriteperm 8, 8, 3 + setobjectxyperm 8, 8, 3 return LilycoveCity_PokemonTrainerFanClub_EventScript_159515:: @ 8159515 diff --git a/data/scripts/maps/LittlerootTown.inc b/data/scripts/maps/LittlerootTown.inc index 06508fd02..095862fd6 100644 --- a/data/scripts/maps/LittlerootTown.inc +++ b/data/scripts/maps/LittlerootTown.inc @@ -36,24 +36,24 @@ LittlerootTown_EventScript_14D570:: @ 814D570 return LittlerootTown_EventScript_14D57B:: @ 814D57B - movespriteperm 4, 14, 8 + setobjectxyperm 4, 14, 8 return LittlerootTown_EventScript_14D583:: @ 814D583 compare 0x4050, 0 goto_if_eq LittlerootTown_EventScript_14D59A - movespriteperm 1, 10, 1 - spritebehave 1, 7 + setobjectxyperm 1, 10, 1 + setobjectmovementtype 1, 7 return LittlerootTown_EventScript_14D59A:: @ 814D59A - movespriteperm 1, 7, 2 - spritebehave 1, 8 + setobjectxyperm 1, 7, 2 + setobjectmovementtype 1, 8 return LittlerootTown_EventScript_14D5A6:: @ 814D5A6 clearflag 752 - spritebehave 4, 8 + setobjectmovementtype 4, 8 checkgender compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D5C5 @@ -62,11 +62,11 @@ LittlerootTown_EventScript_14D5A6:: @ 814D5A6 return LittlerootTown_EventScript_14D5C5:: @ 814D5C5 - movespriteperm 4, 5, 9 + setobjectxyperm 4, 5, 9 return LittlerootTown_EventScript_14D5CD:: @ 814D5CD - movespriteperm 4, 14, 9 + setobjectxyperm 4, 14, 9 return LittlerootTown_MapScript2_14D5D5:: @ 814D5D5 @@ -113,7 +113,7 @@ LittlerootTown_EventScript_14D62B:: @ 814D62B applymovement 4, LittlerootTown_Movement_14D6AE waitmovement 0 msgbox LittlerootTown_Text_16A7C9, 4 - closebutton + closemessage applymovement 4, LittlerootTown_Movement_14D6B1 applymovement 255, LittlerootTown_Movement_14D6B8 waitmovement 0 @@ -199,7 +199,7 @@ LittlerootTown_EventScript_14D6DF:: @ 814D6DF LittlerootTown_EventScript_14D708:: @ 814D708 msgbox LittlerootTown_Text_16AD82, 4 - closebutton + closemessage applymovement 1, LittlerootTown_Movement_1A083D waitmovement 0 setvar 0x4050, 2 @@ -229,12 +229,12 @@ LittlerootTown_EventScript_14D739:: @ 814D739 LittlerootTown_EventScript_14D755:: @ 814D755 msgbox LittlerootTown_Text_16ACEB, 4 - closebutton + closemessage applymovement 1, LittlerootTown_Movement_14D787 applymovement 255, LittlerootTown_Movement_14D793 waitmovement 0 msgbox LittlerootTown_Text_16AD3C, 4 - closebutton + closemessage return LittlerootTown_Movement_14D779:: @ 814D779 @@ -316,7 +316,7 @@ LittlerootTown_EventScript_14D7C7:: @ 814D7C7 applymovement 255, LittlerootTown_Movement_1A083F waitmovement 0 msgbox LittlerootTown_Text_16AD82, 4 - closebutton + closemessage applymovement 1, LittlerootTown_Movement_1A083D waitmovement 0 setvar 0x4050, 2 @@ -417,7 +417,7 @@ LittlerootTown_EventScript_14D8B6:: @ 814D8B6 compare RESULT, 1 call_if 1, LittlerootTown_EventScript_14D931 msgbox LittlerootTown_Text_16A8EE, 4 - closebutton + closemessage checkgender compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D952 @@ -871,10 +871,10 @@ LittlerootTown_EventScript_14DD38:: @ 814DD38 playfanfare 370 message LittlerootTown_Text_16AA32 waitfanfare - waittext + waitmessage setflag 274 msgbox LittlerootTown_Text_16AA5C, 4 msgbox LittlerootTown_Text_16AB10, 4 - closebutton + closemessage delay 30 return diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc index e878d7e2e..30b2d6eef 100644 --- a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc @@ -36,18 +36,18 @@ LittlerootTown_BrendansHouse_1F_MapScript1_15268A:: @ 815268A end LittlerootTown_BrendansHouse_1F_EventScript_1526AC:: @ 81526AC - movespriteperm 1, 8, 4 - spritebehave 1, 7 + setobjectxyperm 1, 8, 4 + setobjectmovementtype 1, 7 return LittlerootTown_BrendansHouse_1F_EventScript_1526B8:: @ 81526B8 - movespriteperm 1, 4, 5 - spritebehave 1, 7 + setobjectxyperm 1, 4, 5 + setobjectmovementtype 1, 7 return LittlerootTown_BrendansHouse_1F_EventScript_1526C4:: @ 81526C4 - movespriteperm 1, 9, 8 - spritebehave 1, 7 + setobjectxyperm 1, 9, 8 + setobjectmovementtype 1, 7 return LittlerootTown_BrendansHouse_1F_MapScript2_1526D0:: @ 81526D0 @@ -61,7 +61,7 @@ LittlerootTown_BrendansHouse_1F_MapScript2_1526D0:: @ 81526D0 LittlerootTown_BrendansHouse_1F_EventScript_1526FA:: @ 81526FA lockall msgbox LittlerootTown_BrendansHouse_1F_Text_172574, 4 - closebutton + closemessage applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_152720 applymovement 1, LittlerootTown_BrendansHouse_1F_Movement_152720 waitmovement 0 diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc index 3b39fe2ed..1f4b301c0 100644 --- a/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc +++ b/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc @@ -13,8 +13,8 @@ LittlerootTown_BrendansHouse_2F_MapScript1_1527AF:: @ 81527AF end LittlerootTown_BrendansHouse_2F_EventScript_1527CE:: @ 81527CE - movespriteperm 1, 1, 2 - spritebehave 1, 7 + setobjectxyperm 1, 1, 2 + setobjectmovementtype 1, 7 return LittlerootTown_BrendansHouse_2F_MapScript2_1527DA:: @ 81527DA diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc index 9b5a372fa..45eb481e4 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc @@ -36,18 +36,18 @@ LittlerootTown_MaysHouse_1F_MapScript1_1528C8:: @ 81528C8 end LittlerootTown_MaysHouse_1F_EventScript_1528EA:: @ 81528EA - movespriteperm 1, 2, 4 - spritebehave 1, 7 + setobjectxyperm 1, 2, 4 + setobjectmovementtype 1, 7 return LittlerootTown_MaysHouse_1F_EventScript_1528F6:: @ 81528F6 - movespriteperm 1, 6, 5 - spritebehave 1, 7 + setobjectxyperm 1, 6, 5 + setobjectmovementtype 1, 7 return LittlerootTown_MaysHouse_1F_EventScript_152902:: @ 8152902 - movespriteperm 1, 1, 8 - spritebehave 1, 7 + setobjectxyperm 1, 1, 8 + setobjectmovementtype 1, 7 return LittlerootTown_MaysHouse_1F_MapScript2_15290E:: @ 815290E @@ -61,7 +61,7 @@ LittlerootTown_MaysHouse_1F_MapScript2_15290E:: @ 815290E LittlerootTown_MaysHouse_1F_EventScript_152938:: @ 8152938 lockall msgbox LittlerootTown_MaysHouse_1F_Text_172574, 4 - closebutton + closemessage applymovement 255, LittlerootTown_MaysHouse_1F_Movement_15295E applymovement 1, LittlerootTown_MaysHouse_1F_Movement_15295E waitmovement 0 diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc index 84fb4e69b..b35ee81a9 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc @@ -13,8 +13,8 @@ LittlerootTown_MaysHouse_2F_MapScript1_152A5B:: @ 8152A5B end LittlerootTown_MaysHouse_2F_EventScript_152A7A:: @ 8152A7A - movespriteperm 1, 7, 2 - spritebehave 1, 7 + setobjectxyperm 1, 7, 2 + setobjectmovementtype 1, 7 return LittlerootTown_MaysHouse_2F_MapScript2_152A86:: @ 8152A86 @@ -56,7 +56,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_152AD4:: @ 8152AD4 applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0835 waitmovement 0 msgbox LittlerootTown_BrendansHouse_2F_Text_1733AF, 4 - closebutton + closemessage compare FACING, 4 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B29 compare FACING, 2 @@ -90,7 +90,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_152B4A:: @ 8152B4A applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0835 waitmovement 0 msgbox LittlerootTown_BrendansHouse_2F_Text_1735FC, 4 - closebutton + closemessage compare FACING, 4 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152B9F compare FACING, 2 diff --git a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc index 7e3386d7a..7c6886209 100644 --- a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc +++ b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc @@ -26,7 +26,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152CBE:: @ 8152CBE lockall bufferfirstpoke 0 message LittlerootTown_ProfessorBirchsLab_Text_173D94 - waittext + waitmessage playfanfare 370 waitfanfare msgbox LittlerootTown_ProfessorBirchsLab_Text_173EF8, 5 @@ -158,7 +158,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152E6D:: @ 8152E6D playfanfare 370 message LittlerootTown_ProfessorBirchsLab_Text_17422F waitfanfare - waittext + waitmessage setflag 2049 return diff --git a/data/scripts/maps/MauvilleCity.inc b/data/scripts/maps/MauvilleCity.inc index da406e2f7..5c93aa252 100644 --- a/data/scripts/maps/MauvilleCity.inc +++ b/data/scripts/maps/MauvilleCity.inc @@ -70,7 +70,7 @@ MauvilleCity_EventScript_14C0C4:: @ 814C0C4 checkflag 284 goto_if_eq MauvilleCity_EventScript_14C0E4 msgbox MauvilleCity_Text_165B76, 4 - closebutton + closemessage applymovement 7, MauvilleCity_Movement_1A083D waitmovement 0 release @@ -78,7 +78,7 @@ MauvilleCity_EventScript_14C0C4:: @ 814C0C4 MauvilleCity_EventScript_14C0E4:: @ 814C0E4 msgbox MauvilleCity_Text_165E45, 4 - closebutton + closemessage applymovement 7, MauvilleCity_Movement_1A083D waitmovement 0 release @@ -109,7 +109,7 @@ MauvilleCity_EventScript_14C154:: @ 814C154 call_if 1, MauvilleCity_EventScript_14C23C compare RESULT, 0 goto_if_eq MauvilleCity_EventScript_14C285 - closebutton + closemessage switch FACING case 2, MauvilleCity_EventScript_14C187 case 4, MauvilleCity_EventScript_14C1D9 @@ -127,7 +127,7 @@ MauvilleCity_EventScript_14C187:: @ 814C187 applymovement 255, MauvilleCity_Movement_1A0845 waitmovement 0 msgbox MauvilleCity_Text_1660FA, 4 - closebutton + closemessage applymovement 6, MauvilleCity_Movement_14C2B6 applymovement 7, MauvilleCity_Movement_14C2DF waitmovement 0 @@ -146,7 +146,7 @@ MauvilleCity_EventScript_14C1D9:: @ 814C1D9 applymovement 255, MauvilleCity_Movement_1A0845 waitmovement 0 msgbox MauvilleCity_Text_1660FA, 4 - closebutton + closemessage applymovement 6, MauvilleCity_Movement_14C2C1 applymovement 7, MauvilleCity_Movement_14C2E8 waitmovement 0 diff --git a/data/scripts/maps/MauvilleCity_BikeShop.inc b/data/scripts/maps/MauvilleCity_BikeShop.inc index 0b577885e..8c0ce9590 100644 --- a/data/scripts/maps/MauvilleCity_BikeShop.inc +++ b/data/scripts/maps/MauvilleCity_BikeShop.inc @@ -26,7 +26,7 @@ MauvilleCity_BikeShop_EventScript_1567D1:: @ 81567D1 MauvilleCity_BikeShop_EventScript_1567F0:: @ 81567F0 message MauvilleCity_BikeShop_Text_1810B1 - waittext + waitmessage multichoice 21, 8, 12, 1 switch RESULT case 0, MauvilleCity_BikeShop_EventScript_15682D @@ -109,7 +109,7 @@ MauvilleCity_BikeShop_EventScript_15690B:: @ 815690B MauvilleCity_BikeShop_EventScript_156914:: @ 8156914 message MauvilleCity_BikeShop_Text_1815EA - waittext + waitmessage goto MauvilleCity_BikeShop_EventScript_156920 end @@ -125,19 +125,19 @@ MauvilleCity_BikeShop_EventScript_156920:: @ 8156920 MauvilleCity_BikeShop_EventScript_156962:: @ 8156962 message MauvilleCity_BikeShop_Text_18162C - waittext + waitmessage goto MauvilleCity_BikeShop_EventScript_156920 end MauvilleCity_BikeShop_EventScript_15696E:: @ 815696E message MauvilleCity_BikeShop_Text_1816F5 - waittext + waitmessage goto MauvilleCity_BikeShop_EventScript_156920 end MauvilleCity_BikeShop_EventScript_15697A:: @ 815697A message MauvilleCity_BikeShop_Text_1817BF - waittext + waitmessage goto MauvilleCity_BikeShop_EventScript_156920 end @@ -147,7 +147,7 @@ MauvilleCity_BikeShop_EventScript_156986:: @ 8156986 MauvilleCity_BikeShop_EventScript_156988:: @ 8156988 message MauvilleCity_BikeShop_Text_181892 - waittext + waitmessage goto MauvilleCity_BikeShop_EventScript_156994 end @@ -163,19 +163,19 @@ MauvilleCity_BikeShop_EventScript_156994:: @ 8156994 MauvilleCity_BikeShop_EventScript_1569D6:: @ 81569D6 message MauvilleCity_BikeShop_Text_1818D4 - waittext + waitmessage goto MauvilleCity_BikeShop_EventScript_156994 end MauvilleCity_BikeShop_EventScript_1569E2:: @ 81569E2 message MauvilleCity_BikeShop_Text_18199A - waittext + waitmessage goto MauvilleCity_BikeShop_EventScript_156994 end MauvilleCity_BikeShop_EventScript_1569EE:: @ 81569EE message MauvilleCity_BikeShop_Text_181A3D - waittext + waitmessage goto MauvilleCity_BikeShop_EventScript_156994 end diff --git a/data/scripts/maps/MauvilleCity_GameCorner.inc b/data/scripts/maps/MauvilleCity_GameCorner.inc index 6e9b11947..6952ca4e1 100644 --- a/data/scripts/maps/MauvilleCity_GameCorner.inc +++ b/data/scripts/maps/MauvilleCity_GameCorner.inc @@ -9,14 +9,14 @@ MauvilleCity_GameCorner_EventScript_156A34:: @ 8156A34 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156B32 message MauvilleCity_GameCorner_Text_181CB4 - waittext + waitmessage showmoney 0, 0 nop showcoins 0, 5 goto MauvilleCity_GameCorner_EventScript_156A60 MauvilleCity_GameCorner_EventScript_156A60:: @ 8156A60 - multichoicedef 15, 0, 49, 0, 0 + multichoicedefault 15, 0, 49, 0, 0 switch RESULT case 0, MauvilleCity_GameCorner_EventScript_156AAE case 1, MauvilleCity_GameCorner_EventScript_156AF0 @@ -24,7 +24,7 @@ MauvilleCity_GameCorner_EventScript_156A60:: @ 8156A60 end @ 8156A87 - multichoicedef 15, 0, 49, 1, 0 + multichoicedefault 15, 0, 49, 1, 0 switch RESULT case 0, MauvilleCity_GameCorner_EventScript_156AAE case 1, MauvilleCity_GameCorner_EventScript_156AF0 @@ -107,14 +107,14 @@ MauvilleCity_GameCorner_EventScript_156B6C:: @ 8156B6C MauvilleCity_GameCorner_EventScript_156B88:: @ 8156B88 message MauvilleCity_GameCorner_Text_181E17 - waittext + waitmessage showcoins 0, 0 setvar 0x4001, 0 goto MauvilleCity_GameCorner_EventScript_156BA6 MauvilleCity_GameCorner_EventScript_156B9B:: @ 8156B9B message MauvilleCity_GameCorner_Text_181E17 - waittext + waitmessage goto MauvilleCity_GameCorner_EventScript_156BA6 MauvilleCity_GameCorner_EventScript_156BA6:: @ 8156BA6 @@ -228,14 +228,14 @@ MauvilleCity_GameCorner_EventScript_156D1A:: @ 8156D1A MauvilleCity_GameCorner_EventScript_156D36:: @ 8156D36 message MauvilleCity_GameCorner_Text_181E17 - waittext + waitmessage showcoins 0, 0 setvar 0x4001, 0 goto MauvilleCity_GameCorner_EventScript_156D54 MauvilleCity_GameCorner_EventScript_156D49:: @ 8156D49 message MauvilleCity_GameCorner_Text_181E17 - waittext + waitmessage goto MauvilleCity_GameCorner_EventScript_156D54 MauvilleCity_GameCorner_EventScript_156D54:: @ 8156D54 @@ -499,7 +499,7 @@ MauvilleCity_GameCorner_EventScript_1570F8:: @ 81570F8 end MauvilleCity_GameCorner_EventScript_157108:: @ 8157108 - closebutton + closemessage applymovement LAST_TALKED, MauvilleCity_GameCorner_Movement_1A083D waitmovement 0 release diff --git a/data/scripts/maps/MauvilleCity_Gym.inc b/data/scripts/maps/MauvilleCity_Gym.inc index e5791d521..5221add7a 100644 --- a/data/scripts/maps/MauvilleCity_Gym.inc +++ b/data/scripts/maps/MauvilleCity_Gym.inc @@ -79,7 +79,7 @@ MauvilleCity_Gym_EventScript_1565AB:: @ 81565AB MauvilleCity_Gym_EventScript_1565DB:: @ 81565DB message MauvilleCity_Gym_Text_180DAF - waittext + waitmessage call MauvilleCity_Gym_EventScript_1A02C5 msgbox MauvilleCity_Gym_Text_180DDA, 4 setflag 1208 diff --git a/data/scripts/maps/MauvilleCity_Mart.inc b/data/scripts/maps/MauvilleCity_Mart.inc index fac5906ad..0dd66eddf 100644 --- a/data/scripts/maps/MauvilleCity_Mart.inc +++ b/data/scripts/maps/MauvilleCity_Mart.inc @@ -5,7 +5,7 @@ MauvilleCity_Mart_EventScript_1573BE:: @ 81573BE lock faceplayer message MauvilleCity_Mart_Text_1A0BE4 - waittext + waitmessage pokemart MauvilleCity_Mart_Items msgbox MauvilleCity_Mart_Text_1A0C02, 4 release diff --git a/data/scripts/maps/MauvilleCity_PokemonCenter_1F.inc b/data/scripts/maps/MauvilleCity_PokemonCenter_1F.inc index 0e9ba15ef..7122b8c3c 100644 --- a/data/scripts/maps/MauvilleCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/MauvilleCity_PokemonCenter_1F.inc @@ -15,7 +15,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_157365:: @ 8157365 MauvilleCity_PokemonCenter_1F_EventScript_157369:: @ 8157369 setvar 0x800b, 1 call MauvilleCity_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end diff --git a/data/scripts/maps/MeteorFalls_1F_1R.inc b/data/scripts/maps/MeteorFalls_1F_1R.inc index c7aa8fb10..06abbc8f6 100644 --- a/data/scripts/maps/MeteorFalls_1F_1R.inc +++ b/data/scripts/maps/MeteorFalls_1F_1R.inc @@ -14,7 +14,7 @@ MeteorFalls_1F_1R_EventScript_15C49C:: @ 815C49C applymovement 5, MeteorFalls_1F_1R_Movement_1A0845 waitmovement 0 msgbox MeteorFalls_1F_1R_Text_193237, 4 - closebutton + closemessage applymovement 5, MeteorFalls_1F_1R_Movement_1A0841 applymovement 6, MeteorFalls_1F_1R_Movement_1A0841 waitmovement 0 @@ -24,11 +24,11 @@ MeteorFalls_1F_1R_EventScript_15C49C:: @ 815C49C applymovement 5, MeteorFalls_1F_1R_Movement_1A0835 waitmovement 0 msgbox MeteorFalls_1F_1R_Text_193268, 4 - closebutton + closemessage applymovement 5, MeteorFalls_1F_1R_Movement_15C5EE waitmovement 0 msgbox MeteorFalls_1F_1R_Text_1932C5, 4 - closebutton + closemessage applymovement 255, MeteorFalls_1F_1R_Movement_1A083F applymovement 5, MeteorFalls_1F_1R_Movement_1A083F applymovement 6, MeteorFalls_1F_1R_Movement_1A083F @@ -44,7 +44,7 @@ MeteorFalls_1F_1R_EventScript_15C49C:: @ 815C49C applymovement 6, MeteorFalls_1F_1R_Movement_1A083F waitmovement 0 msgbox MeteorFalls_1F_1R_Text_193320, 4 - closebutton + closemessage applymovement 255, MeteorFalls_1F_1R_Movement_15C64F applymovement 5, MeteorFalls_1F_1R_Movement_15C5F1 applymovement 6, MeteorFalls_1F_1R_Movement_15C5FC @@ -58,7 +58,7 @@ MeteorFalls_1F_1R_EventScript_15C49C:: @ 815C49C .else msgbox MeteorFalls_1F_1R_Text_193584, 4 .endif - closebutton + closemessage applymovement 8, MeteorFalls_1F_1R_Movement_15C639 applymovement 9, MeteorFalls_1F_1R_Movement_15C64A waitmovement 0 @@ -69,7 +69,7 @@ MeteorFalls_1F_1R_EventScript_15C49C:: @ 815C49C applymovement 7, MeteorFalls_1F_1R_Movement_1A083F waitmovement 0 msgbox MeteorFalls_1F_1R_Text_1937AA, 4 - closebutton + closemessage applymovement 7, MeteorFalls_1F_1R_Movement_15C61F applymovement 8, MeteorFalls_1F_1R_Movement_15C62E applymovement 9, MeteorFalls_1F_1R_Movement_15C63E diff --git a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc index 7861d0c4d..66ad747f9 100644 --- a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc +++ b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc @@ -25,13 +25,13 @@ MossdeepCity_GameCorner_1F_MapScript1_15AC84:: @ 815AC84 MossdeepCity_GameCorner_1F_EventScript_15AC9E:: @ 815AC9E setvar 0x4001, 1 - movespriteperm 1, 3, 2 - spritebehave 1, 8 + setobjectxyperm 1, 3, 2 + setobjectmovementtype 1, 8 return MossdeepCity_GameCorner_1F_EventScript_15ACAF:: @ 815ACAF - movespriteperm 1, 2, 2 - spritebehave 1, 10 + setobjectxyperm 1, 2, 2 + setobjectmovementtype 1, 10 return MossdeepCity_GameCorner_1F_MapScript2_15ACBB:: @ 815ACBB @@ -46,7 +46,7 @@ MossdeepCity_GameCorner_1F_EventScript_15ACD5:: @ 815ACD5 waitmovement 0 applymovement 1, MossdeepCity_GameCorner_1F_Movement_15AD3F waitmovement 0 - moveoffscreen 1 + moveobjectoffscreen 1 applymovement 255, MossdeepCity_GameCorner_1F_Movement_1A0841 waitmovement 0 compare 0x40c0, 1 @@ -106,11 +106,11 @@ MossdeepCity_GameCorner_1F_EventScript_15AD59:: @ 815AD59 call S_DoSaveDialog compare RESULT, 0 goto_if_eq MossdeepCity_GameCorner_1F_EventScript_15ADE8 - hidebox 0, 0, 15, 10 + erasebox 0, 0, 15, 10 special SavePlayerParty special ReducePlayerPartyToThree msgbox MossdeepCity_GameCorner_1F_Text_18E777, 4 - closebutton + closemessage compare FACING, 2 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AE04 compare FACING, 4 diff --git a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc index 46b9dcfea..886c64d29 100644 --- a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc +++ b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc @@ -17,7 +17,7 @@ MossdeepCity_GameCorner_B1F_EventScript_15AE6E:: @ 815AE6E waitmovement 0 special sub_81360C0 msgbox 0x20234cc, 4 - closebutton + closemessage setvar 0x8004, 2 setvar 0x8005, 0 special sub_813556C @@ -28,7 +28,7 @@ MossdeepCity_GameCorner_B1F_EventScript_15AE6E:: @ 815AE6E call_if 1, MossdeepCity_GameCorner_B1F_EventScript_15AEE3 compare RESULT, 2 call_if 1, MossdeepCity_GameCorner_B1F_EventScript_15AEEE - closebutton + closemessage special ScrSpecial_HealPlayerParty applymovement 255, MossdeepCity_GameCorner_B1F_Movement_15AEFF waitmovement 0 @@ -47,14 +47,14 @@ MossdeepCity_GameCorner_B1F_EventScript_15AED5:: @ 815AED5 MossdeepCity_GameCorner_B1F_EventScript_15AEE3:: @ 815AEE3 setvar 0x40c0, 1 special ShowFieldMessageStringVar4 - waittext + waitmessage waitbutton return MossdeepCity_GameCorner_B1F_EventScript_15AEEE:: @ 815AEEE setvar 0x40c0, 2 special ShowFieldMessageStringVar4 - waittext + waitmessage waitbutton return diff --git a/data/scripts/maps/MossdeepCity_Gym.inc b/data/scripts/maps/MossdeepCity_Gym.inc index 4365ba74a..944860f2d 100644 --- a/data/scripts/maps/MossdeepCity_Gym.inc +++ b/data/scripts/maps/MossdeepCity_Gym.inc @@ -58,7 +58,7 @@ MossdeepCity_Gym_EventScript_15A56B:: @ 815A56B MossdeepCity_Gym_EventScript_15A594:: @ 815A594 message MossdeepCity_Gym_Text_18D0F9 - waittext + waitmessage call MossdeepCity_Gym_EventScript_1A02C5 msgbox MossdeepCity_Gym_Text_18D128, 4 setflag 1229 diff --git a/data/scripts/maps/MossdeepCity_House2.inc b/data/scripts/maps/MossdeepCity_House2.inc index c34eb9391..b1954a6cf 100644 --- a/data/scripts/maps/MossdeepCity_House2.inc +++ b/data/scripts/maps/MossdeepCity_House2.inc @@ -16,7 +16,7 @@ MossdeepCity_House2_EventScript_15A87B:: @ 815A87B pokecry SPECIES_WINGULL, 0 msgbox MossdeepCity_House2_Text_18D61E, 4 waitpokecry - closebutton + closemessage setflag 224 clearflag 933 compare FACING, 2 diff --git a/data/scripts/maps/MossdeepCity_Mart.inc b/data/scripts/maps/MossdeepCity_Mart.inc index d1e861b99..ce5845c81 100644 --- a/data/scripts/maps/MossdeepCity_Mart.inc +++ b/data/scripts/maps/MossdeepCity_Mart.inc @@ -5,7 +5,7 @@ MossdeepCity_Mart_EventScript_15A926:: @ 815A926 lock faceplayer message MossdeepCity_Mart_Text_1A0BE4 - waittext + waitmessage pokemart MossdeepCity_Mart_Items msgbox MossdeepCity_Mart_Text_1A0C02, 4 release diff --git a/data/scripts/maps/MossdeepCity_PokemonCenter_1F.inc b/data/scripts/maps/MossdeepCity_PokemonCenter_1F.inc index 988608ffd..4ed3ea57e 100644 --- a/data/scripts/maps/MossdeepCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/MossdeepCity_PokemonCenter_1F.inc @@ -9,7 +9,7 @@ MossdeepCity_PokemonCenter_1F_MapScript1_15A8D6:: @ 815A8D6 MossdeepCity_PokemonCenter_1F_EventScript_15A8DA:: @ 815A8DA setvar 0x800b, 1 call MossdeepCity_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end diff --git a/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc b/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc index a407bd5b9..acd499966 100644 --- a/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc +++ b/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc @@ -11,7 +11,7 @@ MossdeepCity_SpaceCenter_1F_EventScript_15AB8B:: @ 815AB8B call_if 1, MossdeepCity_SpaceCenter_1F_EventScript_15ABBA compare RESULT, 1 call_if 4, MossdeepCity_SpaceCenter_1F_EventScript_15ABC3 - closebutton + closemessage applymovement LAST_TALKED, MossdeepCity_SpaceCenter_1F_Movement_1A083D waitmovement 0 release @@ -56,7 +56,7 @@ MossdeepCity_SpaceCenter_1F_EventScript_15AC1F:: @ 815AC1F lock faceplayer msgbox MossdeepCity_SpaceCenter_1F_Text_18E427, 4 - closebutton + closemessage applymovement LAST_TALKED, MossdeepCity_SpaceCenter_1F_Movement_1A083D waitmovement 0 release diff --git a/data/scripts/maps/MossdeepCity_StevensHouse.inc b/data/scripts/maps/MossdeepCity_StevensHouse.inc index 8648487c9..6905b31b3 100644 --- a/data/scripts/maps/MossdeepCity_StevensHouse.inc +++ b/data/scripts/maps/MossdeepCity_StevensHouse.inc @@ -19,8 +19,8 @@ MossdeepCity_StevensHouse_MapScript1_15A9E9:: @ 815A9E9 end MossdeepCity_StevensHouse_EventScript_15A9F5:: @ 815A9F5 - movespriteperm 1, 6, 5 - spritebehave 1, 7 + setobjectxyperm 1, 6, 5 + setobjectmovementtype 1, 7 return MossdeepCity_StevensHouse_MapScript2_15AA01:: @ 815AA01 @@ -43,7 +43,7 @@ MossdeepCity_StevensHouse_EventScript_15AA0B:: @ 815AA0B setflag 123 setflag 302 msgbox MossdeepCity_StevensHouse_Text_18DB22, 4 - closebutton + closemessage delay 20 applymovement 1, MossdeepCity_StevensHouse_Movement_15AA76 waitmovement 0 @@ -82,8 +82,8 @@ MossdeepCity_StevensHouse_EventScript_15AA7C:: @ 815AA7C playfanfare 370 message MossdeepCity_StevensHouse_Text_18DD61 waitfanfare - waittext - givepokemon SPECIES_BELDUM, 5, ITEM_NONE, 0x0, 0x0, 0 + waitmessage + givepoke SPECIES_BELDUM, 5, ITEM_NONE, 0x0, 0x0, 0 bufferpoke 1, SPECIES_BELDUM msgbox MossdeepCity_StevensHouse_Text_1A1102, 5 compare RESULT, 1 diff --git a/data/scripts/maps/MtChimney_CableCarStation.inc b/data/scripts/maps/MtChimney_CableCarStation.inc index 8a66f75ee..2b4de8344 100644 --- a/data/scripts/maps/MtChimney_CableCarStation.inc +++ b/data/scripts/maps/MtChimney_CableCarStation.inc @@ -9,8 +9,8 @@ MtChimney_CableCarStation_MapScript1_15C105:: @ 815C105 end MtChimney_CableCarStation_EventScript_15C111:: @ 815C111 - movespriteperm 1, 5, 4 - spritebehave 1, 10 + setobjectxyperm 1, 5, 4 + setobjectmovementtype 1, 10 return MtChimney_CableCarStation_MapScript2_15C11D:: @ 815C11D @@ -23,8 +23,8 @@ MtChimney_CableCarStation_EventScript_15C127:: @ 815C127 applymovement 1, MtChimney_CableCarStation_Movement_15C1AA waitmovement 0 setvar 0x40a3, 0 - movespriteperm 1, 6, 7 - spritebehave 1, 8 + setobjectxyperm 1, 6, 7 + setobjectmovementtype 1, 8 releaseall end @@ -40,7 +40,7 @@ MtChimney_CableCarStation_EventScript_15C14B:: @ 815C14B MtChimney_CableCarStation_EventScript_15C16C:: @ 815C16C msgbox MtChimney_CableCarStation_Text_1925A9, 4 - closebutton + closemessage applymovement 1, MtChimney_CableCarStation_Movement_15C1A5 applymovement 255, MtChimney_CableCarStation_Movement_15C1AF waitmovement 0 diff --git a/data/scripts/maps/MtPyre_Summit.inc b/data/scripts/maps/MtPyre_Summit.inc index 8720375ae..533fb6e90 100644 --- a/data/scripts/maps/MtPyre_Summit.inc +++ b/data/scripts/maps/MtPyre_Summit.inc @@ -41,7 +41,7 @@ MtPyre_Summit_EventScript_15D4E1:: @ 815D4E1 .else msgbox MtPyre_Summit_Text_1B5EEC, 4 .endif - closebutton + closemessage fadescreen 1 removeobject 2 removeobject 4 @@ -198,7 +198,7 @@ MtPyre_Summit_EventScript_15D64A:: @ 815D64A MtPyre_Summit_EventScript_15D669:: @ 815D669 setvar 0x8004, ITEM_RED_OR_BLUE_ORB call MtPyre_Summit_EventScript_1A067F - closebutton + closemessage applymovement LAST_TALKED, MtPyre_Summit_Movement_1A0841 waitmovement 0 delay 40 @@ -279,7 +279,7 @@ MtPyre_Summit_EventScript_15D6F2:: @ 815D6F2 .else msgbox MtPyre_Summit_Text_1B6848, 4 .endif - closebutton + closemessage compare 0x8008, 0 call_if 1, MtPyre_Summit_EventScript_15D77F compare 0x8008, 1 diff --git a/data/scripts/maps/OldaleTown.inc b/data/scripts/maps/OldaleTown.inc index 412261ce1..2d84a6f92 100644 --- a/data/scripts/maps/OldaleTown.inc +++ b/data/scripts/maps/OldaleTown.inc @@ -18,13 +18,13 @@ OldaleTown_EventScript_14DD8C:: @ 814DD8C return OldaleTown_EventScript_14DD92:: @ 814DD92 - movespriteperm 3, 1, 11 - spritebehave 3, 9 + setobjectxyperm 3, 1, 11 + setobjectmovementtype 3, 9 return OldaleTown_EventScript_14DD9E:: @ 814DD9E - movespriteperm 2, 13, 14 - spritebehave 2, 8 + setobjectxyperm 2, 13, 14 + setobjectmovementtype 2, 8 return OldaleTown_EventScript_14DDAA:: @ 814DDAA @@ -45,7 +45,7 @@ OldaleTown_EventScript_14DDBC:: @ 814DDBC setflag 1 playbgm 420, 0 msgbox OldaleTown_Text_16AEF2, 4 - closebutton + closemessage switch FACING case 1, OldaleTown_EventScript_14DE07 case 2, OldaleTown_EventScript_14DE1E @@ -198,7 +198,7 @@ OldaleTown_EventScript_14DEDF:: @ 814DEDF checkflag 116 goto_if_eq OldaleTown_EventScript_14DF26 msgbox OldaleTown_Text_16B0CC, 4 - closebutton + closemessage applymovement 3, OldaleTown_Movement_1A083D waitmovement 0 release @@ -210,7 +210,7 @@ OldaleTown_EventScript_14DEFF:: @ 814DEFF applymovement 3, OldaleTown_Movement_14DFEF waitmovement 0 msgbox OldaleTown_Text_16B045, 4 - closebutton + closemessage applymovement 3, OldaleTown_Movement_14DFF5 waitmovement 0 releaseall @@ -274,7 +274,7 @@ OldaleTown_EventScript_14DFB8:: @ 814DFB8 end OldaleTown_EventScript_14DFC6:: @ 814DFC6 - closebutton + closemessage applymovement 4, OldaleTown_Movement_14DFE5 waitmovement 0 removeobject 4 diff --git a/data/scripts/maps/OldaleTown_Mart.inc b/data/scripts/maps/OldaleTown_Mart.inc index 77d7eee4d..b9698b58f 100644 --- a/data/scripts/maps/OldaleTown_Mart.inc +++ b/data/scripts/maps/OldaleTown_Mart.inc @@ -5,7 +5,7 @@ OldaleTown_Mart_EventScript_152F79:: @ 8152F79 lock faceplayer message OldaleTown_Mart_Text_1A0BE4 - waittext + waitmessage checkflag 116 goto_if_eq OldaleTown_Mart_EventScript_152FA8 pokemart OldaleTown_Mart_Items1 diff --git a/data/scripts/maps/OldaleTown_PokemonCenter_1F.inc b/data/scripts/maps/OldaleTown_PokemonCenter_1F.inc index 6d2fe54f0..494f109fe 100644 --- a/data/scripts/maps/OldaleTown_PokemonCenter_1F.inc +++ b/data/scripts/maps/OldaleTown_PokemonCenter_1F.inc @@ -10,7 +10,7 @@ OldaleTown_PokemonCenter_1F_MapScript1_152F0E:: @ 8152F0E OldaleTown_PokemonCenter_1F_EventScript_152F17:: @ 8152F17 setvar 0x800b, 1 call OldaleTown_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end diff --git a/data/scripts/maps/PacifidlogTown_PokemonCenter_1F.inc b/data/scripts/maps/PacifidlogTown_PokemonCenter_1F.inc index 973f80a55..64dd5008c 100644 --- a/data/scripts/maps/PacifidlogTown_PokemonCenter_1F.inc +++ b/data/scripts/maps/PacifidlogTown_PokemonCenter_1F.inc @@ -9,7 +9,7 @@ PacifidlogTown_PokemonCenter_1F_MapScript1_154105:: @ 8154105 @ 8154109 setvar 0x800b, 1 call VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end diff --git a/data/scripts/maps/PetalburgCity.inc b/data/scripts/maps/PetalburgCity.inc index 8b7d4f313..1c2711b83 100644 --- a/data/scripts/maps/PetalburgCity.inc +++ b/data/scripts/maps/PetalburgCity.inc @@ -12,7 +12,7 @@ PetalburgCity_MapScript1_14B717:: @ 814B717 end PetalburgCity_EventScript_14B731:: @ 814B731 - movespriteperm 9, 5, 11 + setobjectxyperm 9, 5, 11 return PetalburgCity_EventScript_14B739:: @ 814B739 @@ -38,7 +38,7 @@ PetalburgCity_EventScript_14B747:: @ 814B747 applymovement 2, PetalburgCity_Movement_1A083F, 0, 0 waitmovement 0, 0, 2 msgbox PetalburgCity_Text_16D408, 4 - closebutton + closemessage clearflag 0x4000 setvar 0x4057, 3 fadedefaultbgm @@ -54,7 +54,7 @@ PetalburgCity_EventScript_14B7AC:: @ 814B7AC lock faceplayer msgbox PetalburgCity_Text_164490, 4 - closebutton + closemessage applymovement 3, PetalburgCity_Movement_1A083D waitmovement 0 release @@ -196,7 +196,7 @@ PetalburgCity_EventScript_14B866:: @ 814B866 compare 0x8008, 3 call_if 1, PetalburgCity_EventScript_14B950 msgbox PetalburgCity_Text_16438A, 4 - closebutton + closemessage compare 0x8008, 0 call_if 1, PetalburgCity_EventScript_14B965 compare 0x8008, 1 @@ -210,7 +210,7 @@ PetalburgCity_EventScript_14B866:: @ 814B866 applymovement 255, PetalburgCity_Movement_1A0843 waitmovement 0 msgbox PetalburgCity_Text_164449, 4 - closebutton + closemessage applymovement 9, PetalburgCity_Movement_14B9F4 waitmovement 0 fadedefaultbgm diff --git a/data/scripts/maps/PetalburgCity_Gym.inc b/data/scripts/maps/PetalburgCity_Gym.inc index 3ac7b85fc..b2d104894 100644 --- a/data/scripts/maps/PetalburgCity_Gym.inc +++ b/data/scripts/maps/PetalburgCity_Gym.inc @@ -53,15 +53,15 @@ PetalburgCity_Gym_MapScript1_15451B:: @ 815451B end PetalburgCity_Gym_EventScript_15453B:: @ 815453B - movespriteperm 10, 5, 108 + setobjectxyperm 10, 5, 108 return PetalburgCity_Gym_EventScript_154543:: @ 8154543 - movespriteperm 1, 4, 107 + setobjectxyperm 1, 4, 107 return PetalburgCity_Gym_EventScript_15454B:: @ 815454B - movespriteperm 1, 4, 107 + setobjectxyperm 1, 4, 107 return PetalburgCity_Gym_MapScript2_154553:: @ 8154553 @@ -80,7 +80,7 @@ PetalburgCity_Gym_EventScript_15456C:: @ 815456C lockall msgbox PetalburgCity_Gym_Text_17A196, 4 msgbox PetalburgCity_Gym_Text_17A1B0, 4 - closebutton + closemessage applymovement 255, PetalburgCity_Gym_Movement_1A0845 applymovement 10, PetalburgCity_Gym_Movement_1545B4 waitmovement 0 @@ -113,7 +113,7 @@ PetalburgCity_Gym_EventScript_1545B9:: @ 81545B9 case 6, PetalburgCity_Gym_EventScript_1549D6 case 7, PetalburgCity_Gym_EventScript_15493D msgbox PetalburgCity_Gym_Text_179DF6, 4 - closebutton + closemessage switch FACING case 1, PetalburgCity_Gym_EventScript_15463D case 2, PetalburgCity_Gym_EventScript_154648 @@ -193,7 +193,7 @@ PetalburgCity_Gym_EventScript_154669:: @ 8154669 compare 0x8008, 3 call_if 1, PetalburgCity_Gym_EventScript_1548F1 msgbox PetalburgCity_Gym_Text_17A171, 4 - closebutton + closemessage setflag 0x4001 playbgm 420, 0 compare 0x8008, 0 @@ -394,7 +394,7 @@ PetalburgCity_Gym_EventScript_1549D6:: @ 81549D6 msgbox PetalburgCity_Gym_Text_17A653, 4 trainerbattle 3, OPPONENT_NORMAN, 0, PetalburgCity_Gym_Text_17A77A message PetalburgCity_Gym_Text_17A7DD - waittext + waitmessage call PetalburgCity_Gym_EventScript_1A02C5 msgbox PetalburgCity_Gym_Text_17A805, 4 setflag 1217 @@ -418,7 +418,7 @@ PetalburgCity_Gym_EventScript_154A2C:: @ 8154A2C setflag 169 msgbox PetalburgCity_Gym_Text_17A8CF, 4 msgbox PetalburgCity_Gym_Text_17A976, 4 - closebutton + closemessage compare FACING, 2 call_if 1, PetalburgCity_Gym_EventScript_154ABC compare FACING, 1 @@ -604,7 +604,7 @@ PetalburgCity_Gym_EventScript_154B73:: @ 8154B73 end PetalburgCity_Gym_EventScript_154BA8:: @ 8154BA8 - closebutton + closemessage delay 30 warpdoor PetalburgCity_Gym, 255, 32776, 32777 waitstate diff --git a/data/scripts/maps/PetalburgCity_Mart.inc b/data/scripts/maps/PetalburgCity_Mart.inc index ab7bb822a..e4186eaae 100644 --- a/data/scripts/maps/PetalburgCity_Mart.inc +++ b/data/scripts/maps/PetalburgCity_Mart.inc @@ -5,7 +5,7 @@ PetalburgCity_Mart_EventScript_1552B0:: @ 81552B0 lock faceplayer message PetalburgCity_Mart_Text_1A0BE4 - waittext + waitmessage checkflag 296 goto_if_eq PetalburgCity_Mart_EventScript_1552EA pokemart PetalburgCity_Mart_Items1 diff --git a/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc b/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc index a70035fef..e2013a1d6 100644 --- a/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/PetalburgCity_PokemonCenter_1F.inc @@ -10,7 +10,7 @@ PetalburgCity_PokemonCenter_1F_MapScript1_15520A:: @ 815520A PetalburgCity_PokemonCenter_1F_EventScript_155213:: @ 8155213 setvar 0x800b, 1 call PetalburgCity_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end diff --git a/data/scripts/maps/PetalburgWoods.inc b/data/scripts/maps/PetalburgWoods.inc index 4dececafa..0b0c72f70 100644 --- a/data/scripts/maps/PetalburgWoods.inc +++ b/data/scripts/maps/PetalburgWoods.inc @@ -12,18 +12,18 @@ PetalburgWoods_EventScript_15CCA8:: @ 815CCA8 applymovement 4, PetalburgWoods_Movement_15CE89 waitmovement 0 msgbox PetalburgWoods_Text_194D92, 4 - closebutton + closemessage playbgm BGM_EVIL_TEAM, 0 applymovement 3, PetalburgWoods_Movement_15CEC3 waitmovement 0 msgbox PetalburgWoods_Text_194DED, 4 - closebutton + closemessage applymovement 3, PetalburgWoods_Movement_15CEB0 waitmovement 0 applymovement 4, PetalburgWoods_Movement_1A0841 waitmovement 0 msgbox PetalburgWoods_Text_194E6B, 4 - closebutton + closemessage applymovement 4, PetalburgWoods_Movement_15CE9E waitmovement 0 msgbox PetalburgWoods_Text_194E9A, 4 @@ -47,18 +47,18 @@ PetalburgWoods_EventScript_15CD42:: @ 815CD42 applymovement 255, PetalburgWoods_Movement_1A083F waitmovement 0 msgbox PetalburgWoods_Text_194D92, 4 - closebutton + closemessage playbgm BGM_EVIL_TEAM, 0 applymovement 3, PetalburgWoods_Movement_15CEC3 waitmovement 0 msgbox PetalburgWoods_Text_194DED, 4 - closebutton + closemessage applymovement 3, PetalburgWoods_Movement_15CEBF waitmovement 0 applymovement 4, PetalburgWoods_Movement_1A0841 waitmovement 0 msgbox PetalburgWoods_Text_194E6B, 4 - closebutton + closemessage applymovement 4, PetalburgWoods_Movement_15CEA4 waitmovement 0 msgbox PetalburgWoods_Text_194E9A, 4 @@ -78,12 +78,12 @@ PetalburgWoods_EventScript_15CDE6:: @ 815CDE6 applymovement 4, PetalburgWoods_Movement_15CE73 waitmovement 0 msgbox PetalburgWoods_Text_194D71, 4 - closebutton + closemessage return PetalburgWoods_EventScript_15CDFA:: @ 815CDFA msgbox PetalburgWoods_Text_194FA4, 4 - closebutton + closemessage applymovement 3, PetalburgWoods_Movement_15CEB7 waitmovement 0 removeobject 3 @@ -106,7 +106,7 @@ PetalburgWoods_EventScript_15CE4D:: @ 815CE4D applymovement 4, PetalburgWoods_Movement_15CEA8 waitmovement 0 msgbox PetalburgWoods_Text_195153, 4 - closebutton + closemessage return PetalburgWoods_EventScript_15CE69:: @ 815CE69 diff --git a/data/scripts/maps/Route101.inc b/data/scripts/maps/Route101.inc index 35c2d4117..2fe80e098 100644 --- a/data/scripts/maps/Route101.inc +++ b/data/scripts/maps/Route101.inc @@ -20,7 +20,7 @@ Route101_EventScript_14E948:: @ 814E948 lockall playbgm 410, 1 msgbox Route101_Text_16D10E, 4 - closebutton + closemessage setobjectxy 2, 0, 15 setobjectxy 4, 0, 16 applymovement 255, Route101_Movement_14EA2C @@ -36,7 +36,7 @@ Route101_EventScript_14E948:: @ 814E948 applymovement 2, Route101_Movement_14EA58 waitmovement 0 msgbox Route101_Text_16D119, 4 - closebutton + closemessage setvar 0x4060, 2 releaseall end @@ -44,7 +44,7 @@ Route101_EventScript_14E948:: @ 814E948 Route101_EventScript_14E9B8:: @ 814E9B8 lockall msgbox Route101_Text_16D15E, 4 - closebutton + closemessage applymovement 255, Route101_Movement_14E9FA waitmovement 0 releaseall @@ -53,7 +53,7 @@ Route101_EventScript_14E9B8:: @ 814E9B8 Route101_EventScript_14E9CE:: @ 814E9CE lockall msgbox Route101_Text_16D15E, 4 - closebutton + closemessage applymovement 255, Route101_Movement_14E9FC waitmovement 0 releaseall @@ -62,7 +62,7 @@ Route101_EventScript_14E9CE:: @ 814E9CE Route101_EventScript_14E9E4:: @ 814E9E4 lockall msgbox Route101_Text_16D15E, 4 - closebutton + closemessage applymovement 255, Route101_Movement_14E9FE waitmovement 0 releaseall diff --git a/data/scripts/maps/Route103.inc b/data/scripts/maps/Route103.inc index e5cf156a1..c9ebf9511 100644 --- a/data/scripts/maps/Route103.inc +++ b/data/scripts/maps/Route103.inc @@ -89,7 +89,7 @@ Route103_EventScript_14ECCB:: @ 814ECCB end Route103_EventScript_14ECD9:: @ 814ECD9 - closebutton + closemessage switch FACING case 1, Route103_EventScript_14ED29 case 2, Route103_EventScript_14ED0C diff --git a/data/scripts/maps/Route104.inc b/data/scripts/maps/Route104.inc index 8abb7354a..b1e3d94ac 100644 --- a/data/scripts/maps/Route104.inc +++ b/data/scripts/maps/Route104.inc @@ -142,7 +142,7 @@ Route104_EventScript_14EFD5:: @ 814EFD5 showobject 255, 0, 11 applymovement 255, Route104_Movement_14F168 waitmovement 0 - movespriteperm 2, 12, 8 + setobjectxyperm 2, 12, 8 addobject 2 spritelevelup 2, 0, 11, 0 clearflag 740 @@ -156,7 +156,7 @@ Route104_EventScript_14EFD5:: @ 814EFD5 copyvar 0x4096, 0x8008 restorespritelevel 255, 0, 19 restorespritelevel 2, 0, 11 - moveoffscreen 2 + moveobjectoffscreen 2 setvar 0x408e, 0 checkflag 189 goto_if 0, Route104_EventScript_14F08B diff --git a/data/scripts/maps/Route104_MrBrineysHouse.inc b/data/scripts/maps/Route104_MrBrineysHouse.inc index cc3dad35a..d388d1c7a 100644 --- a/data/scripts/maps/Route104_MrBrineysHouse.inc +++ b/data/scripts/maps/Route104_MrBrineysHouse.inc @@ -15,10 +15,10 @@ Route104_MrBrineysHouse_EventScript_15BCD0:: @ 815BCD0 return Route104_MrBrineysHouse_EventScript_15BCD4:: @ 815BCD4 - movespriteperm 1, 9, 3 - spritebehave 1, 50 - movespriteperm 2, 9, 6 - spritebehave 2, 51 + setobjectxyperm 1, 9, 3 + setobjectmovementtype 1, 50 + setobjectxyperm 2, 9, 6 + setobjectmovementtype 2, 51 return Route104_MrBrineysHouse_EventScript_15BCEB:: @ 815BCEB @@ -44,8 +44,8 @@ Route104_MrBrineysHouse_EventScript_15BD0E:: @ 815BD0E Route104_MrBrineysHouse_EventScript_15BD32:: @ 815BD32 message Route104_MrBrineysHouse_Text_191E80 - waittext - multichoicedef 21, 8, 14, 1, 0 + waitmessage + multichoicedefault 21, 8, 14, 1, 0 switch RESULT case 0, Route104_MrBrineysHouse_EventScript_15BDAB case 1, Route104_MrBrineysHouse_EventScript_15BDA1 diff --git a/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc b/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc index 876af8650..4c5becf88 100644 --- a/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc +++ b/data/scripts/maps/Route104_PrettyPetalFlowerShop.inc @@ -12,7 +12,7 @@ Route104_PrettyPetalFlowerShop_MapScript1_15BDEA:: @ 815BDEA end Route104_PrettyPetalFlowerShop_EventScript_15BE03:: @ 815BE03 - movespriteperm 1, 4, 6 + setobjectxyperm 1, 4, 6 end Route104_PrettyPetalFlowerShop_EventScript_15BE0B:: @ 815BE0B @@ -51,7 +51,7 @@ Route104_PrettyPetalFlowerShop_EventScript_15BE73:: @ 815BE73 Route104_PrettyPetalFlowerShop_EventScript_15BE7C:: @ 815BE7C message Route104_PrettyPetalFlowerShop_Text_1A0C42 - waittext + waitmessage pokemartbp Route104_PrettyPetalFlowerShop_Items msgbox Route104_PrettyPetalFlowerShop_Text_1A0C02, 4 release diff --git a/data/scripts/maps/Route104_Prototype.inc b/data/scripts/maps/Route104_Prototype.inc index 6103d19ac..3c218747a 100644 --- a/data/scripts/maps/Route104_Prototype.inc +++ b/data/scripts/maps/Route104_Prototype.inc @@ -56,7 +56,7 @@ Route104_Prototype_EventScript_160CF1:: @ 8160CF1 end Route104_Prototype_EventScript_160CFB:: @ 8160CFB - closebutton + closemessage delay 60 fadescreen 1 delay 60 diff --git a/data/scripts/maps/Route109.inc b/data/scripts/maps/Route109.inc index 7b13fef72..be296d403 100644 --- a/data/scripts/maps/Route109.inc +++ b/data/scripts/maps/Route109.inc @@ -44,7 +44,7 @@ Route109_EventScript_14F548:: @ 814F548 waitmovement 0 addobject 4 clearflag 743 - movespriteperm 2, 12, 8 + setobjectxyperm 2, 12, 8 addobject 2 spritelevelup 2, 0, 11, 0 applymovement 2, Route109_Movement_14F67D @@ -53,11 +53,11 @@ Route109_EventScript_14F548:: @ 814F548 setflag 744 hideobject 1, 0, 24 msgbox Route109_Text_16B4B5, 4 - closebutton + closemessage copyvar 0x4096, 0x8008 restorespritelevel 255, 0, 24 restorespritelevel 2, 0, 11 - moveoffscreen 2 + moveobjectoffscreen 2 release end @@ -286,8 +286,8 @@ Route109_EventScript_14F691:: @ 814F691 Route109_EventScript_14F6AF:: @ 814F6AF message Route109_Text_16E26A - waittext - multichoicedef 21, 8, 14, 1, 0 + waitmessage + multichoicedefault 21, 8, 14, 1, 0 switch RESULT case 0, Route109_EventScript_14F6E2 case 1, Route109_EventScript_14F6FB @@ -296,7 +296,7 @@ Route109_EventScript_14F6AF:: @ 814F6AF Route109_EventScript_14F6E2:: @ 814F6E2 msgbox Route109_Text_16E159, 4 - closebutton + closemessage goto Route109_EventScript_14F4D3 end @@ -318,7 +318,7 @@ Route109_EventScript_14F70E:: @ 814F70E lock faceplayer msgbox Route109_Text_16E405, 4 - closebutton + closemessage applymovement LAST_TALKED, Route109_Movement_1A083D waitmovement 0 release @@ -334,7 +334,7 @@ Route109_EventScript_14F725:: @ 814F725 giveitem ITEM_SOFT_SAND compare RESULT, 0 goto_if_eq Route109_EventScript_1A029B - closebutton + closemessage applymovement LAST_TALKED, Route109_Movement_1A083D waitmovement 0 setflag 280 diff --git a/data/scripts/maps/Route110.inc b/data/scripts/maps/Route110.inc index 194816c36..afbfebcc2 100644 --- a/data/scripts/maps/Route110.inc +++ b/data/scripts/maps/Route110.inc @@ -424,15 +424,15 @@ Route110_EventScript_14FEA5:: @ 814FEA5 return Route110_EventScript_14FEB2:: @ 814FEB2 - closebutton + closemessage compare 0x8008, 1 call_if 1, Route110_EventScript_14FF56 compare 0x8008, 2 call_if 1, Route110_EventScript_14FF5E compare 0x8008, 3 call_if 1, Route110_EventScript_14FF66 - spritebehave 28, 10 - spritebehave 29, 10 + setobjectmovementtype 28, 10 + setobjectmovementtype 29, 10 removeobject 28 addobject 29 delay 45 @@ -480,15 +480,15 @@ Route110_EventScript_14FF4B:: @ 814FF4B return Route110_EventScript_14FF56:: @ 814FF56 - movespriteperm 29, 33, 55 + setobjectxyperm 29, 33, 55 return Route110_EventScript_14FF5E:: @ 814FF5E - movespriteperm 29, 34, 55 + setobjectxyperm 29, 34, 55 return Route110_EventScript_14FF66:: @ 814FF66 - movespriteperm 29, 35, 55 + setobjectxyperm 29, 35, 55 return Route110_Movement_14FF6E:: @ 814FF6E diff --git a/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc b/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc index a7db7e0ee..c60bc366e 100644 --- a/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc +++ b/data/scripts/maps/Route110_SeasideCyclingRoadNorthEntrance.inc @@ -41,7 +41,7 @@ Route110_SeasideCyclingRoadNorthEntrance_EventScript_16351D:: @ 816351D Route110_SeasideCyclingRoadNorthEntrance_EventScript_163523:: @ 8163523 @ You don't have a bike! msgbox Route110_SeasideCyclingRoadNorthEntrance_Text_19E3AD, 4 - closebutton + closemessage applymovement 255, Route110_SeasideCyclingRoadNorthEntrance_Movement_163538 waitmovement 0 releaseall diff --git a/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc b/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc index 1cb046a99..cf18a8e36 100644 --- a/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc +++ b/data/scripts/maps/Route110_SeasideCyclingRoadSouthEntrance.inc @@ -20,7 +20,7 @@ Route110_SeasideCyclingRoadSouthEntrance_EventScript_16348B:: @ 816348B Route110_SeasideCyclingRoadSouthEntrance_EventScript_1634A6:: @ 81634A6 msgbox Route110_SeasideCyclingRoadSouthEntrance_Text_19E3AD, 4 - closebutton + closemessage applymovement 255, Route110_SeasideCyclingRoadSouthEntrance_Movement_1634BB waitmovement 0 releaseall diff --git a/data/scripts/maps/Route110_TrickHouseEnd.inc b/data/scripts/maps/Route110_TrickHouseEnd.inc index 0445496d2..12309207c 100644 --- a/data/scripts/maps/Route110_TrickHouseEnd.inc +++ b/data/scripts/maps/Route110_TrickHouseEnd.inc @@ -64,7 +64,7 @@ Route110_TrickHouseEnd_EventScript_161A0B:: @ 8161A0B compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 - closebutton + closemessage call Route110_TrickHouseEnd_EventScript_161C2E release end @@ -77,7 +77,7 @@ Route110_TrickHouseEnd_EventScript_161A47:: @ 8161A47 compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 - closebutton + closemessage call Route110_TrickHouseEnd_EventScript_161C2E release end @@ -90,7 +90,7 @@ Route110_TrickHouseEnd_EventScript_161A83:: @ 8161A83 compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 - closebutton + closemessage call Route110_TrickHouseEnd_EventScript_161C2E release end @@ -103,7 +103,7 @@ Route110_TrickHouseEnd_EventScript_161ABF:: @ 8161ABF compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 - closebutton + closemessage call Route110_TrickHouseEnd_EventScript_161C2E release end @@ -116,7 +116,7 @@ Route110_TrickHouseEnd_EventScript_161AFB:: @ 8161AFB compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 - closebutton + closemessage call Route110_TrickHouseEnd_EventScript_161C2E release end @@ -129,7 +129,7 @@ Route110_TrickHouseEnd_EventScript_161B37:: @ 8161B37 compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 - closebutton + closemessage call Route110_TrickHouseEnd_EventScript_161C2E release end @@ -142,14 +142,14 @@ Route110_TrickHouseEnd_EventScript_161B73:: @ 8161B73 compare RESULT, 0 call_if 1, Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 - closebutton + closemessage call Route110_TrickHouseEnd_EventScript_161C2E release end Route110_TrickHouseEnd_EventScript_161BAF:: @ 8161BAF msgbox Route110_TrickHouseEnd_Text_19C5AF, 4 - closebutton + closemessage compare FACING, 1 call_if 1, Route110_TrickHouseEnd_EventScript_161C74 compare FACING, 2 @@ -160,7 +160,7 @@ Route110_TrickHouseEnd_EventScript_161BAF:: @ 8161BAF call_if 1, Route110_TrickHouseEnd_EventScript_161C95 delay 30 msgbox Route110_TrickHouseEnd_Text_19C602, 4 - closebutton + closemessage applymovement 1, Route110_TrickHouseEnd_Movement_1A0839 waitmovement 0 delay 30 @@ -234,7 +234,7 @@ Route110_TrickHouseEnd_EventScript_161CA0:: @ 8161CA0 applymovement 255, Route110_TrickHouseEnd_Movement_1A0845 waitmovement 0 msgbox Route110_TrickHouseEnd_Text_19CA8B, 4 - closebutton + closemessage applymovement 255, Route110_TrickHouseEnd_Movement_161CE8 waitmovement 0 delay 4 diff --git a/data/scripts/maps/Route110_TrickHouseEntrance.inc b/data/scripts/maps/Route110_TrickHouseEntrance.inc index 677ce93fa..cf192345c 100644 --- a/data/scripts/maps/Route110_TrickHouseEntrance.inc +++ b/data/scripts/maps/Route110_TrickHouseEntrance.inc @@ -106,8 +106,8 @@ Route110_TrickHouseEntrance_EventScript_161088:: @ 8161088 return Route110_TrickHouseEntrance_EventScript_16108E:: @ 816108E - movespriteperm 1, 5, 2 - spritebehave 1, 4 + setobjectxyperm 1, 5, 2 + setobjectmovementtype 1, 4 end Route110_TrickHouseEntrance_EventScript_16109A:: @ 816109A @@ -216,7 +216,7 @@ Route110_TrickHouseEntrance_EventScript_1611D7:: @ 81611D7 compare 0x4044, 0 call_if 1, Route110_TrickHouseEntrance_EventScript_161327 msgbox Route110_TrickHouseEntrance_Text_19BD82, 4 - closebutton + closemessage delay 20 applymovement 1, Route110_TrickHouseEntrance_Movement_161315 waitmovement 0 @@ -264,7 +264,7 @@ Route110_TrickHouseEntrance_EventScript_16124D:: @ 816124D call_if 1, Route110_TrickHouseEntrance_EventScript_161303 compare 0x4044, 7 call_if 1, Route110_TrickHouseEntrance_EventScript_16130C - closebutton + closemessage setvar 0x40a6, 1 warp Route110_TrickHouseEntrance, 255, 6, 2 waitstate @@ -333,7 +333,7 @@ Route110_TrickHouseEntrance_EventScript_161327:: @ 8161327 Route110_TrickHouseEntrance_EventScript_161330:: @ 8161330 msgbox Route110_TrickHouseEntrance_Text_19BF19, 4 - closebutton + closemessage applymovement 1, Route110_TrickHouseEntrance_Movement_1A0839 waitmovement 0 playse 21 @@ -464,7 +464,7 @@ Route110_TrickHouseEntrance_EventScript_161518:: @ 8161518 Route110_TrickHouseEntrance_EventScript_161551:: @ 8161551 msgbox Route110_TrickHouseEntrance_Text_19C17E, 4 - closebutton + closemessage applymovement 1, Route110_TrickHouseEntrance_Movement_16309F waitmovement 0 applymovement 1, Route110_TrickHouseEntrance_Movement_161315 @@ -494,7 +494,7 @@ Route110_TrickHouseEntrance_EventScript_1615BD:: @ 81615BD Route110_TrickHouseEntrance_EventScript_1615C7:: @ 81615C7 msgbox Route110_TrickHouseEntrance_Text_19BE7D, 5 - closebutton + closemessage compare RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_1615DD releaseall @@ -717,7 +717,7 @@ Route110_TrickHousePuzzle8_EventScript_16189C:: @ 816189C playfanfare 370 message Route110_TrickHousePuzzle1_Text_19C1B8 waitfanfare - waittext + waitmessage msgbox Route110_TrickHousePuzzle1_Text_19C1CB, 4 releaseall end diff --git a/data/scripts/maps/Route110_TrickHousePuzzle5.inc b/data/scripts/maps/Route110_TrickHousePuzzle5.inc index dc3f9f725..222a71138 100644 --- a/data/scripts/maps/Route110_TrickHousePuzzle5.inc +++ b/data/scripts/maps/Route110_TrickHousePuzzle5.inc @@ -398,9 +398,9 @@ Route110_TrickHousePuzzle5_EventScript_162D90:: @ 8162D90 applymovement 5, Route110_TrickHousePuzzle5_Movement_16309F msgbox Route110_TrickHousePuzzle5_Text_19D5ED, 4 waitmovement 0 - closebutton + closemessage msgbox Route110_TrickHousePuzzle5_Text_19D615, 4 - closebutton + closemessage warp Route110_TrickHousePuzzle5, 255, 0, 21 waitstate releaseall diff --git a/data/scripts/maps/Route111.inc b/data/scripts/maps/Route111.inc index de37c68fc..ec13ca3a3 100644 --- a/data/scripts/maps/Route111.inc +++ b/data/scripts/maps/Route111.inc @@ -55,7 +55,7 @@ Route111_EventScript_150023:: @ 8150023 compare RESULT, 0 goto_if_eq Route111_EventScript_15005F giveitem ITEM_ROOT_FOSSIL - closebutton + closemessage setflag 963 setflag 964 removeobject 34 @@ -77,7 +77,7 @@ Route111_EventScript_150069:: @ 8150069 compare RESULT, 0 goto_if_eq Route111_EventScript_1500A5 giveitem ITEM_CLAW_FOSSIL - closebutton + closemessage setflag 964 setflag 963 removeobject 35 @@ -172,7 +172,7 @@ Route111_EventScript_15013A:: @ 815013A Route111_EventScript_150151:: @ 8150151 msgbox Route111_Text_1A0F93, 4 - closebutton + closemessage compare 0x8004, 0 call_if 1, Route111_EventScript_150188 compare 0x8004, 1 @@ -251,7 +251,7 @@ Route111_EventScript_1501F3:: @ 81501F3 waitmovement 0 call Route111_EventScript_150348 msgbox Route111_Text_16F7FF, 4 - closebutton + closemessage applymovement 1, Route111_Movement_150356 waitmovement 0 removeobject 1 @@ -269,7 +269,7 @@ Route111_EventScript_1501F3:: @ 81501F3 waitmovement 0 call Route111_EventScript_150348 msgbox Route111_Text_16F8D5, 4 - closebutton + closemessage applymovement 2, Route111_Movement_150356 waitmovement 0 removeobject 2 @@ -287,7 +287,7 @@ Route111_EventScript_1501F3:: @ 81501F3 waitmovement 0 call Route111_EventScript_150348 msgbox Route111_Text_16F96C, 4 - closebutton + closemessage applymovement 3, Route111_Movement_150356 waitmovement 0 removeobject 3 @@ -302,7 +302,7 @@ Route111_EventScript_1501F3:: @ 81501F3 msgbox Route111_Text_16F991, 4 trainerbattle 3, OPPONENT_VICKY, 0, Route111_Text_16F9EC msgbox Route111_Text_16FA22, 4 - closebutton + closemessage applymovement 4, Route111_Movement_1A0841 waitmovement 0 call Route111_EventScript_150348 diff --git a/data/scripts/maps/Route111_OldLadysRestStop.inc b/data/scripts/maps/Route111_OldLadysRestStop.inc index a33b436dc..5576a44ff 100644 --- a/data/scripts/maps/Route111_OldLadysRestStop.inc +++ b/data/scripts/maps/Route111_OldLadysRestStop.inc @@ -18,7 +18,7 @@ Route111_OldLadysRestStop_EventScript_15BFDB:: @ 815BFDB Route111_OldLadysRestStop_EventScript_15BFFC:: @ 815BFFC msgbox Route111_OldLadysRestStop_Text_192423, 4 - closebutton + closemessage call Route111_OldLadysRestStop_EventScript_1A02CA msgbox Route111_OldLadysRestStop_Text_19244D, 5 compare RESULT, 1 diff --git a/data/scripts/maps/Route111_WinstrateFamilysHouse.inc b/data/scripts/maps/Route111_WinstrateFamilysHouse.inc index ea70af41f..d9a94ce75 100644 --- a/data/scripts/maps/Route111_WinstrateFamilysHouse.inc +++ b/data/scripts/maps/Route111_WinstrateFamilysHouse.inc @@ -53,7 +53,7 @@ Route111_WinstrateFamilysHouse_EventScript_15BFB6:: @ 815BFB6 end Route111_WinstrateFamilysHouse_EventScript_15BFC4:: @ 815BFC4 - closebutton + closemessage applymovement 0x8008, Route111_WinstrateFamilysHouse_Movement_1A083D waitmovement 0 release diff --git a/data/scripts/maps/Route112_CableCarStation.inc b/data/scripts/maps/Route112_CableCarStation.inc index 5254b7beb..f8e91eb09 100644 --- a/data/scripts/maps/Route112_CableCarStation.inc +++ b/data/scripts/maps/Route112_CableCarStation.inc @@ -10,8 +10,8 @@ Route112_CableCarStation_MapScript1_15C03E:: @ 815C03E end Route112_CableCarStation_EventScript_15C052:: @ 815C052 - movespriteperm 1, 7, 4 - spritebehave 1, 9 + setobjectxyperm 1, 7, 4 + setobjectmovementtype 1, 9 return Route112_CableCarStation_MapScript2_15C05E:: @ 815C05E @@ -24,8 +24,8 @@ Route112_CableCarStation_EventScript_15C068:: @ 815C068 applymovement 1, Route112_CableCarStation_Movement_15C0EB waitmovement 0 setvar 0x40a3, 0 - movespriteperm 1, 6, 7 - spritebehave 1, 8 + setobjectxyperm 1, 6, 7 + setobjectmovementtype 1, 8 releaseall end @@ -41,7 +41,7 @@ Route112_CableCarStation_EventScript_15C08C:: @ 815C08C Route112_CableCarStation_EventScript_15C0AD:: @ 815C0AD msgbox Route112_CableCarStation_Text_1925A9, 4 - closebutton + closemessage applymovement 1, Route112_CableCarStation_Movement_15C0E6 applymovement 255, Route112_CableCarStation_Movement_15C0F0 waitmovement 0 diff --git a/data/scripts/maps/Route113_GlassWorkshop.inc b/data/scripts/maps/Route113_GlassWorkshop.inc index 48c2965fd..39b484c8a 100644 --- a/data/scripts/maps/Route113_GlassWorkshop.inc +++ b/data/scripts/maps/Route113_GlassWorkshop.inc @@ -41,7 +41,7 @@ Route113_GlassWorkshop_EventScript_1635B5:: @ 81635B5 compare 0x4048, 250 goto_if 0, Route113_GlassWorkshop_EventScript_163818 message Route113_GlassWorkshop_Text_19E757 - waittext + waitmessage goto Route113_GlassWorkshop_EventScript_1635EE end @@ -183,19 +183,19 @@ Route113_GlassWorkshop_EventScript_163830:: @ 8163830 subvar 0x800a, 16456 buffernum 1, 32778 message Route113_GlassWorkshop_Text_19E890 - waittext + waitmessage goto Route113_GlassWorkshop_EventScript_1635EE end Route113_GlassWorkshop_EventScript_163845:: @ 8163845 message Route113_GlassWorkshop_Text_19E802 - waittext + waitmessage goto Route113_GlassWorkshop_EventScript_1635EE end Route113_GlassWorkshop_EventScript_163851:: @ 8163851 msgbox Route113_GlassWorkshop_Text_19E827, 4 - closebutton + closemessage fadescreen 1 playse 5 delay 30 diff --git a/data/scripts/maps/Route116.inc b/data/scripts/maps/Route116.inc index ca3895e1a..beb01e083 100644 --- a/data/scripts/maps/Route116.inc +++ b/data/scripts/maps/Route116.inc @@ -8,7 +8,7 @@ Route116_MapScript1_150A37:: @ 8150A37 end Route116_EventScript_150A41:: @ 8150A41 - movespriteperm 21, 41, 10 + setobjectxyperm 21, 41, 10 return Route116_EventScript_150A49:: @ 8150A49 @@ -47,7 +47,7 @@ Route116_EventScript_150A94:: @ 8150A94 compare RESULT, 0 goto_if_eq Route116_EventScript_150B12 msgbox Route116_Text_1707B8, 4 - closebutton + closemessage compare FACING, 2 call_if 1, Route116_EventScript_150AEE compare FACING, 1 @@ -159,7 +159,7 @@ Route116_EventScript_150B8F:: @ 8150B8F Route116_EventScript_150BBB:: @ 8150BBB msgbox Route116_Text_1709B7, 4 - closebutton + closemessage goto Route116_EventScript_150C03 end @@ -175,7 +175,7 @@ Route116_EventScript_150BCA:: @ 8150BCA Route116_EventScript_150BF4:: @ 8150BF4 msgbox Route116_Text_17094D, 4 - closebutton + closemessage goto Route116_EventScript_150C03 end diff --git a/data/scripts/maps/Route117.inc b/data/scripts/maps/Route117.inc index 6ba9519eb..40affd3fd 100644 --- a/data/scripts/maps/Route117.inc +++ b/data/scripts/maps/Route117.inc @@ -9,7 +9,7 @@ Route117_MapScript1_150D40:: @ 8150D40 Route117_EventScript_150D46:: @ 8150D46 checkflag 134 goto_if 0, Route117_EventScript_150D56 - movespriteperm 3, 47, 6 + setobjectxyperm 3, 47, 6 Route117_EventScript_150D56:: @ 8150D56 return diff --git a/data/scripts/maps/Route118.inc b/data/scripts/maps/Route118.inc index 8427395a6..b96346f15 100644 --- a/data/scripts/maps/Route118.inc +++ b/data/scripts/maps/Route118.inc @@ -82,7 +82,7 @@ Route118_EventScript_151004:: @ 8151004 waitmovement 0 delay 30 msgbox Route118_Text_170D66, 4 - closebutton + closemessage compare 0x8008, 0 call_if 1, Route118_EventScript_151048 compare 0x8008, 1 diff --git a/data/scripts/maps/Route119.inc b/data/scripts/maps/Route119.inc index d825cb96e..7d5acea77 100644 --- a/data/scripts/maps/Route119.inc +++ b/data/scripts/maps/Route119.inc @@ -153,7 +153,7 @@ Route119_EventScript_151352:: @ 8151352 return Route119_EventScript_151362:: @ 8151362 - closebutton + closemessage compare 0x4001, 1 call_if 1, Route119_EventScript_1513D2 compare 0x4001, 2 @@ -193,13 +193,13 @@ Route119_EventScript_1513C7:: @ 81513C7 return Route119_EventScript_1513D2:: @ 81513D2 - movespriteperm 16, 25, 32 - movespriteperm 25, 25, 32 + setobjectxyperm 16, 25, 32 + setobjectxyperm 25, 25, 32 return Route119_EventScript_1513E1:: @ 81513E1 - movespriteperm 16, 26, 32 - movespriteperm 25, 26, 32 + setobjectxyperm 16, 26, 32 + setobjectxyperm 25, 26, 32 return Route119_Movement_1513F0:: @ 81513F0 @@ -354,7 +354,7 @@ Route119_EventScript_1515C5:: @ 81515C5 lock faceplayer msgbox Route119_Text_171520, 4 - closebutton + closemessage applymovement LAST_TALKED, Route119_Movement_1A083D waitmovement 0 release @@ -364,7 +364,7 @@ Route119_EventScript_1515DC:: @ 81515DC lock faceplayer msgbox Route119_Text_17157C, 4 - closebutton + closemessage applymovement LAST_TALKED, Route119_Movement_1A083D waitmovement 0 release diff --git a/data/scripts/maps/Route119_WeatherInstitute_1F.inc b/data/scripts/maps/Route119_WeatherInstitute_1F.inc index 762a6c299..3dc9672e3 100644 --- a/data/scripts/maps/Route119_WeatherInstitute_1F.inc +++ b/data/scripts/maps/Route119_WeatherInstitute_1F.inc @@ -9,8 +9,8 @@ Route119_WeatherInstitute_1F_MapScript1_163C30:: @ 8163C30 end Route119_WeatherInstitute_1F_EventScript_163C41:: @ 8163C41 - movespriteperm 5, 0, 5 - spritebehave 5, 10 + setobjectxyperm 5, 0, 5 + setobjectmovementtype 5, 10 return Route119_WeatherInstitute_1F_EventScript_163C4D:: @ 8163C4D @@ -39,7 +39,7 @@ Route119_WeatherInstitute_1F_EventScript_163C7A:: @ 8163C7A Route119_WeatherInstitute_1F_EventScript_163C83:: @ 8163C83 lockall msgbox Route119_WeatherInstitute_1F_Text_19EE8B, 4 - closebutton + closemessage call Route119_WeatherInstitute_1F_EventScript_1A02CA releaseall end diff --git a/data/scripts/maps/Route119_WeatherInstitute_2F.inc b/data/scripts/maps/Route119_WeatherInstitute_2F.inc index 37b6d07a9..ac64904a2 100644 --- a/data/scripts/maps/Route119_WeatherInstitute_2F.inc +++ b/data/scripts/maps/Route119_WeatherInstitute_2F.inc @@ -11,13 +11,13 @@ Route119_WeatherInstitute_2F_MapScript1_163CC8:: @ 8163CC8 end Route119_WeatherInstitute_2F_EventScript_163CE4:: @ 8163CE4 - movespriteperm 5, 1, 6 - spritebehave 5, 10 + setobjectxyperm 5, 1, 6 + setobjectmovementtype 5, 10 return Route119_WeatherInstitute_2F_EventScript_163CF0:: @ 8163CF0 - movespriteperm 5, 4, 6 - spritebehave 5, 10 + setobjectxyperm 5, 4, 6 + setobjectmovementtype 5, 10 return Route119_WeatherInstitute_2F_EventScript_163CFC:: @ 8163CFC @@ -37,7 +37,7 @@ Route119_WeatherInstitute_2F_EventScript_163D2A:: @ 8163D2A Route119_WeatherInstitute_2F_EventScript_163D45:: @ 8163D45 msgbox Route119_WeatherInstitute_2F_Text_19F11B, 4 - closebutton + closemessage setvar 0x40b3, 1 clearflag 893 fadedefaultbgm @@ -49,7 +49,7 @@ Route119_WeatherInstitute_2F_EventScript_163D45:: @ 8163D45 fadescreen 0 applymovement 5, Route119_WeatherInstitute_2F_Movement_163DC8 waitmovement 0 - moveoffscreen 5 + moveobjectoffscreen 5 goto Route119_WeatherInstitute_2F_EventScript_163D7A end @@ -61,8 +61,8 @@ Route119_WeatherInstitute_2F_EventScript_163D7A:: @ 8163D7A playfanfare 370 message Route119_WeatherInstitute_2F_Text_19F267 waitfanfare - waittext - givepokemon SPECIES_CASTFORM, 25, ITEM_MYSTIC_WATER, 0x0, 0x0, 0 + waitmessage + givepoke SPECIES_CASTFORM, 25, ITEM_MYSTIC_WATER, 0x0, 0x0, 0 setflag 151 msgbox Route119_WeatherInstitute_2F_Text_19F27D, 4 release diff --git a/data/scripts/maps/Route120.inc b/data/scripts/maps/Route120.inc index b6bb60ddd..d5807ae94 100644 --- a/data/scripts/maps/Route120.inc +++ b/data/scripts/maps/Route120.inc @@ -71,7 +71,7 @@ Route120_EventScript_1516B5:: @ 81516B5 return Route120_EventScript_1516DA:: @ 81516DA - spritebehave 36, 10 + setobjectmovementtype 36, 10 return Route120_MapScript1_1516DF:: @ 81516DF @@ -207,7 +207,7 @@ Route120_EventScript_151884:: @ 8151884 Route120_EventScript_15189D:: @ 815189D msgbox Route120_Text_1719A0, 4 - closebutton + closemessage compare FACING, 2 call_if 1, Route120_EventScript_15197F compare FACING, 3 @@ -216,7 +216,7 @@ Route120_EventScript_15189D:: @ 815189D waitmovement 0 delay 20 msgbox Route120_Text_1719D4, 4 - closebutton + closemessage applymovement 30, Route120_Movement_1A0843 waitmovement 0 applymovement 30, Route120_Movement_1A0662 @@ -241,7 +241,7 @@ Route120_EventScript_151908:: @ 8151908 giveitem ITEM_DEVON_SCOPE setflag 285 msgbox Route120_Text_171B0E, 4 - closebutton + closemessage applymovement 31, Route120_Movement_1A0845 waitmovement 0 delay 50 diff --git a/data/scripts/maps/Route121.inc b/data/scripts/maps/Route121.inc index 43be91266..39443d2f9 100644 --- a/data/scripts/maps/Route121.inc +++ b/data/scripts/maps/Route121.inc @@ -21,7 +21,7 @@ Route121_EventScript_151B1C:: @ 8151B1C Route121_EventScript_151B25:: @ 8151B25 lockall msgbox Route121_Text_171C8F, 4 - closebutton + closemessage applymovement 12, Route121_Movement_151B57 applymovement 13, Route121_Movement_151B60 applymovement 14, Route121_Movement_151B69 diff --git a/data/scripts/maps/Route121_SafariZoneEntrance.inc b/data/scripts/maps/Route121_SafariZoneEntrance.inc index 5fdb749f3..c9439ee5f 100644 --- a/data/scripts/maps/Route121_SafariZoneEntrance.inc +++ b/data/scripts/maps/Route121_SafariZoneEntrance.inc @@ -74,9 +74,9 @@ Route121_SafariZoneEntrance_EventScript_15C3B3:: @ 815C3B3 playfanfare 370 message Route121_SafariZoneEntrance_Text_1C3910 waitfanfare - waittext + waitmessage msgbox Route121_SafariZoneEntrance_Text_1C392D, 4 - closebutton + closemessage hidemoney 0, 0 applymovement 255, Route121_SafariZoneEntrance_Movement_15C47E waitmovement 0 @@ -111,7 +111,7 @@ Route121_SafariZoneEntrance_EventScript_15C45E:: @ 815C45E end Route121_SafariZoneEntrance_EventScript_15C46C:: @ 815C46C - closebutton + closemessage hidemoney 0, 0 applymovement 255, Route121_SafariZoneEntrance_Movement_15C47C waitmovement 0 diff --git a/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc b/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc index b3e91e43c..543736e80 100644 --- a/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc +++ b/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc @@ -67,7 +67,7 @@ Route124_DivingTreasureHuntersHouse_EventScript_163EA2:: @ 8163EA2 Route124_DivingTreasureHuntersHouse_EventScript_163EB0:: @ 8163EB0 message Route124_DivingTreasureHuntersHouse_Text_19F5C5 - waittext + waitmessage switch 0x4001 case 1, Route124_DivingTreasureHuntersHouse_EventScript_163F61 case 2, Route124_DivingTreasureHuntersHouse_EventScript_163F87 diff --git a/data/scripts/maps/Route128.inc b/data/scripts/maps/Route128.inc index f19dc6662..3b2c99591 100644 --- a/data/scripts/maps/Route128.inc +++ b/data/scripts/maps/Route128.inc @@ -26,25 +26,25 @@ Route128_EventScript_15213F:: @ 815213F applymovement 4, Route128_Movement_152279 waitmovement 0 msgbox Route128_Text_171F35, 4 - closebutton + closemessage applymovement 5, Route128_Movement_152293 waitmovement 0 applymovement 4, Route128_Movement_1A0841 waitmovement 0 msgbox Route128_Text_171F4B, 4 - closebutton + closemessage applymovement 5, Route128_Movement_1522A1 waitmovement 0 applymovement 255, Route128_Movement_1A0841 waitmovement 0 msgbox Route128_Text_172008, 4 - closebutton + closemessage applymovement 4, Route128_Movement_15227E applymovement 255, Route128_Movement_1A083F applymovement 5, Route128_Movement_152290 waitmovement 0 msgbox Route128_Text_17210B, 4 - closebutton + closemessage delay 40 applymovement 5, Route128_Movement_152296 applymovement 4, Route128_Movement_152283 @@ -61,7 +61,7 @@ Route128_EventScript_15213F:: @ 815213F applymovement 255, Route128_Movement_1A0843 waitmovement 0 msgbox Route128_Text_172181, 4 - closebutton + closemessage applymovement 3, Route128_Movement_15226D applymovement 255, Route128_Movement_1A0841 waitmovement 0 @@ -73,7 +73,7 @@ Route128_EventScript_15213F:: @ 815213F applymovement 3, Route128_Movement_1A0845 waitmovement 0 msgbox Route128_Text_1723BE, 4 - closebutton + closemessage applymovement 3, Route128_Movement_1A0845 waitmovement 0 delay 50 diff --git a/data/scripts/maps/RustboroCity.inc b/data/scripts/maps/RustboroCity.inc index d2469dca7..955726d89 100644 --- a/data/scripts/maps/RustboroCity.inc +++ b/data/scripts/maps/RustboroCity.inc @@ -124,47 +124,47 @@ RustboroCity_EventScript_14C475:: @ 814C475 RustboroCity_EventScript_14C481:: @ 814C481 lockall - movespriteperm 9, 14, 21 - spritebehave 9, 10 + setobjectxyperm 9, 14, 21 + setobjectmovementtype 9, 10 setvar 0x8004, 0 goto RustboroCity_EventScript_14C4F4 end RustboroCity_EventScript_14C498:: @ 814C498 lockall - movespriteperm 9, 14, 21 - spritebehave 9, 10 + setobjectxyperm 9, 14, 21 + setobjectmovementtype 9, 10 setvar 0x8004, 1 goto RustboroCity_EventScript_14C4F4 end RustboroCity_EventScript_14C4AF:: @ 814C4AF lockall - movespriteperm 9, 14, 21 - spritebehave 9, 10 + setobjectxyperm 9, 14, 21 + setobjectmovementtype 9, 10 setvar 0x8004, 2 goto RustboroCity_EventScript_14C4F4 end RustboroCity_EventScript_14C4C6:: @ 814C4C6 lockall - movespriteperm 9, 14, 21 - spritebehave 9, 10 + setobjectxyperm 9, 14, 21 + setobjectmovementtype 9, 10 setvar 0x8004, 3 goto RustboroCity_EventScript_14C4F4 end RustboroCity_EventScript_14C4DD:: @ 814C4DD lockall - movespriteperm 9, 14, 21 - spritebehave 9, 10 + setobjectxyperm 9, 14, 21 + setobjectmovementtype 9, 10 setvar 0x8004, 4 goto RustboroCity_EventScript_14C4F4 end RustboroCity_EventScript_14C4F4:: @ 814C4F4 msgbox RustboroCity_Text_166E65, 4 - closebutton + closemessage addobject 10 addobject 9 applymovement 10, RustboroCity_Movement_14C5C2 @@ -173,11 +173,11 @@ RustboroCity_EventScript_14C4F4:: @ 814C4F4 applymovement 9, RustboroCity_Movement_14C5D3 waitmovement 0 msgbox RustboroCity_Text_166E7E, 4 - closebutton + closemessage applymovement 9, RustboroCity_Movement_14C5DB waitmovement 0 removeobject 9 - movespriteperm 9, 30, 10 + setobjectxyperm 9, 30, 10 clearflag 732 setflag 142 setvar 0x405a, 2 @@ -373,7 +373,7 @@ RustboroCity_EventScript_14C650:: @ 814C650 call_if 1, RustboroCity_EventScript_14C715 setflag 159 setvar 0x405a, 3 - moveoffscreen 9 + moveobjectoffscreen 9 msgbox RustboroCity_Text_166EA5, 4 releaseall end @@ -472,7 +472,7 @@ RustboroCity_EventScript_14C77D:: @ 814C77D compare RESULT, 0 call_if 1, RustboroCity_EventScript_14C7F5 msgbox RustboroCity_Text_16707F, 4 - closebutton + closemessage setflag 144 setflag 732 setvar 0x405a, 5 diff --git a/data/scripts/maps/RustboroCity_DevonCorp_1F.inc b/data/scripts/maps/RustboroCity_DevonCorp_1F.inc index f5fb02c93..48d8aaf9f 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_1F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_1F.inc @@ -8,8 +8,8 @@ RustboroCity_DevonCorp_1F_MapScript1_15740C:: @ 815740C end RustboroCity_DevonCorp_1F_EventScript_157416:: @ 8157416 - movespriteperm 2, 14, 2 - spritebehave 2, 8 + setobjectxyperm 2, 14, 2 + setobjectmovementtype 2, 8 return RustboroCity_DevonCorp_1F_EventScript_157422:: @ 8157422 diff --git a/data/scripts/maps/RustboroCity_DevonCorp_2F.inc b/data/scripts/maps/RustboroCity_DevonCorp_2F.inc index e7c966c08..784ef8087 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_2F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_2F.inc @@ -79,7 +79,7 @@ RustboroCity_DevonCorp_2F_EventScript_157564:: @ 8157564 end RustboroCity_DevonCorp_2F_EventScript_1575A6:: @ 81575A6 - closebutton + closemessage playse 21 applymovement 5, RustboroCity_DevonCorp_2F_Movement_1A0833 waitmovement 0 @@ -97,7 +97,7 @@ RustboroCity_DevonCorp_2F_EventScript_1575A6:: @ 81575A6 end RustboroCity_DevonCorp_2F_EventScript_1575EE:: @ 81575EE - closebutton + closemessage playse 21 applymovement 5, RustboroCity_DevonCorp_2F_Movement_1A0833 waitmovement 0 @@ -143,8 +143,8 @@ RustboroCity_DevonCorp_2F_EventScript_157661:: @ 8157661 playfanfare 370 message RustboroCity_DevonCorp_2F_Text_18319E waitfanfare - waittext - givepokemon SPECIES_LILEEP, 20, ITEM_NONE, 0x0, 0x0, 0 + waitmessage + givepoke SPECIES_LILEEP, 20, ITEM_NONE, 0x0, 0x0, 0 msgbox RustboroCity_DevonCorp_2F_Text_1A1102, 5 compare RESULT, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1A0678 @@ -163,8 +163,8 @@ RustboroCity_DevonCorp_2F_EventScript_1576B4:: @ 81576B4 playfanfare 370 message RustboroCity_DevonCorp_2F_Text_18319E waitfanfare - waittext - givepokemon SPECIES_ANORITH, 20, ITEM_NONE, 0x0, 0x0, 0 + waitmessage + givepoke SPECIES_ANORITH, 20, ITEM_NONE, 0x0, 0x0, 0 msgbox RustboroCity_DevonCorp_2F_Text_1A1102, 5 compare RESULT, 1 call_if 1, RustboroCity_DevonCorp_2F_EventScript_1A0678 diff --git a/data/scripts/maps/RustboroCity_DevonCorp_3F.inc b/data/scripts/maps/RustboroCity_DevonCorp_3F.inc index 6458ec5ca..6f0152e60 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_3F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_3F.inc @@ -10,8 +10,8 @@ RustboroCity_DevonCorp_3F_MapScript1_157721:: @ 8157721 end RustboroCity_DevonCorp_3F_EventScript_15772D:: @ 815772D - movespriteperm 2, 3, 2 - spritebehave 2, 9 + setobjectxyperm 2, 3, 2 + setobjectmovementtype 2, 9 return RustboroCity_DevonCorp_3F_MapScript2_157739:: @ 8157739 @@ -29,20 +29,20 @@ RustboroCity_DevonCorp_3F_MapScript2_157748:: @ 8157748 RustboroCity_DevonCorp_3F_EventScript_157752:: @ 8157752 lockall msgbox RustboroCity_DevonCorp_3F_Text_18374C, 4 - closebutton + closemessage applymovement 2, RustboroCity_DevonCorp_3F_Movement_157815 waitmovement 0 delay 80 applymovement 2, RustboroCity_DevonCorp_3F_Movement_15781E waitmovement 0 msgbox RustboroCity_DevonCorp_3F_Text_183903, 4 - closebutton + closemessage playbgm 420, 0 applymovement 2, RustboroCity_DevonCorp_3F_Movement_157803 applymovement 255, RustboroCity_DevonCorp_3F_Movement_157827 waitmovement 0 msgbox RustboroCity_DevonCorp_3F_Text_18394A, 4 - closebutton + closemessage fadedefaultbgm applymovement 2, RustboroCity_DevonCorp_3F_Movement_157812 applymovement 255, RustboroCity_DevonCorp_3F_Movement_157835 @@ -53,7 +53,7 @@ RustboroCity_DevonCorp_3F_EventScript_157752:: @ 8157752 playfanfare 370 message RustboroCity_DevonCorp_3F_Text_183422 waitfanfare - waittext + waitmessage setflag 2050 setflag 188 msgbox RustboroCity_DevonCorp_3F_Text_183439, 4 @@ -151,7 +151,7 @@ RustboroCity_DevonCorp_3F_EventScript_15783B:: @ 815783B checkflag 189 goto_if_eq RustboroCity_DevonCorp_3F_EventScript_157864 msgbox RustboroCity_DevonCorp_3F_Text_18351E, 4 - closebutton + closemessage applymovement LAST_TALKED, RustboroCity_DevonCorp_3F_Movement_1A083D waitmovement 0 release @@ -164,7 +164,7 @@ RustboroCity_DevonCorp_3F_EventScript_157864:: @ 8157864 goto_if_eq RustboroCity_DevonCorp_3F_EventScript_1A029B setflag 272 msgbox RustboroCity_DevonCorp_3F_Text_1835B3, 4 - closebutton + closemessage applymovement LAST_TALKED, RustboroCity_DevonCorp_3F_Movement_1A083D waitmovement 0 release @@ -172,7 +172,7 @@ RustboroCity_DevonCorp_3F_EventScript_157864:: @ 8157864 RustboroCity_DevonCorp_3F_EventScript_15789B:: @ 815789B msgbox RustboroCity_DevonCorp_3F_Text_18368D, 4 - closebutton + closemessage applymovement LAST_TALKED, RustboroCity_DevonCorp_3F_Movement_1A083D waitmovement 0 release diff --git a/data/scripts/maps/RustboroCity_Gym.inc b/data/scripts/maps/RustboroCity_Gym.inc index 6bb33b4dc..b1bbfb8d8 100644 --- a/data/scripts/maps/RustboroCity_Gym.inc +++ b/data/scripts/maps/RustboroCity_Gym.inc @@ -11,7 +11,7 @@ RustboroCity_Gym_EventScript_1578D9:: @ 81578D9 RustboroCity_Gym_EventScript_1578FE:: @ 81578FE message RustboroCity_Gym_Text_1840AB - waittext + waitmessage call RustboroCity_Gym_EventScript_1A02C5 msgbox RustboroCity_Gym_Text_1840D5, 4 setflag 1201 diff --git a/data/scripts/maps/RustboroCity_Mart.inc b/data/scripts/maps/RustboroCity_Mart.inc index 7ee528ade..cb722a6af 100644 --- a/data/scripts/maps/RustboroCity_Mart.inc +++ b/data/scripts/maps/RustboroCity_Mart.inc @@ -5,7 +5,7 @@ RustboroCity_Mart_EventScript_157BD4:: @ 8157BD4 lock faceplayer message RustboroCity_Mart_Text_1A0BE4 - waittext + waitmessage checkflag 287 goto_if 0, RustboroCity_Mart_EventScript_157BEF checkflag 287 diff --git a/data/scripts/maps/RustboroCity_PokemonCenter_1F.inc b/data/scripts/maps/RustboroCity_PokemonCenter_1F.inc index 896e8e220..53b481832 100644 --- a/data/scripts/maps/RustboroCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/RustboroCity_PokemonCenter_1F.inc @@ -10,7 +10,7 @@ RustboroCity_PokemonCenter_1F_MapScript1_157B7F:: @ 8157B7F RustboroCity_PokemonCenter_1F_EventScript_157B88:: @ 8157B88 setvar 0x800b, 1 call RustboroCity_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end diff --git a/data/scripts/maps/RustboroCity_PokemonSchool.inc b/data/scripts/maps/RustboroCity_PokemonSchool.inc index 156b437a0..73b364f5e 100644 --- a/data/scripts/maps/RustboroCity_PokemonSchool.inc +++ b/data/scripts/maps/RustboroCity_PokemonSchool.inc @@ -9,8 +9,8 @@ RustboroCity_PokemonSchool_EventScript_1579E2:: @ 81579E2 RustboroCity_PokemonSchool_EventScript_1579F1:: @ 81579F1 message RustboroCity_PokemonSchool_Text_184368 - waittext - multichoicerow 8, 1, 13, 3, 0 + waitmessage + multichoicegrid 8, 1, 13, 3, 0 switch RESULT case 0, RustboroCity_PokemonSchool_EventScript_157A50 case 1, RustboroCity_PokemonSchool_EventScript_157A5E @@ -87,7 +87,7 @@ RustboroCity_PokemonSchool_EventScript_157ACE:: @ 8157ACE giveitem ITEM_QUICK_CLAW compare RESULT, 0 goto_if_eq RustboroCity_PokemonSchool_EventScript_1A029B - closebutton + closemessage applymovement LAST_TALKED, RustboroCity_PokemonSchool_Movement_1A0845 waitmovement 0 setflag 275 @@ -106,7 +106,7 @@ RustboroCity_PokemonSchool_EventScript_157B29:: @ 8157B29 RustboroCity_PokemonSchool_EventScript_157B34:: @ 8157B34 msgbox RustboroCity_PokemonSchool_Text_184737, 4 - closebutton + closemessage applymovement LAST_TALKED, RustboroCity_PokemonSchool_Movement_1A0845 waitmovement 0 release diff --git a/data/scripts/maps/RusturfTunnel.inc b/data/scripts/maps/RusturfTunnel.inc index 0cfb66351..b11304607 100644 --- a/data/scripts/maps/RusturfTunnel.inc +++ b/data/scripts/maps/RusturfTunnel.inc @@ -15,15 +15,15 @@ RusturfTunnel_MapScript1_15C762:: @ 815C762 end RusturfTunnel_EventScript_15C773:: @ 815C773 - movespriteperm 7, 13, 4 - movespriteperm 6, 13, 5 + setobjectxyperm 7, 13, 4 + setobjectxyperm 6, 13, 5 return RusturfTunnel_EventScript_15C782:: @ 815C782 lock faceplayer msgbox RusturfTunnel_Text_194766, 4 - closebutton + closemessage applymovement LAST_TALKED, RusturfTunnel_Movement_1A083D waitmovement 0 release @@ -36,7 +36,7 @@ RusturfTunnel_EventScript_15C799:: @ 815C799 goto_if_eq RusturfTunnel_EventScript_15C7BC setflag 1 msgbox RusturfTunnel_Text_1944C5, 4 - closebutton + closemessage applymovement LAST_TALKED, RusturfTunnel_Movement_1A083D waitmovement 0 release @@ -44,7 +44,7 @@ RusturfTunnel_EventScript_15C799:: @ 815C799 RusturfTunnel_EventScript_15C7BC:: @ 815C7BC msgbox RusturfTunnel_Text_1945B2, 4 - closebutton + closemessage applymovement LAST_TALKED, RusturfTunnel_Movement_1A083D waitmovement 0 release @@ -67,7 +67,7 @@ RusturfTunnel_EventScript_15C7D1:: @ 815C7D1 giveitem ITEM_HM04 setflag 106 msgbox RusturfTunnel_Text_194693, 4 - closebutton + closemessage compare 0x4001, 1 call_if 1, RusturfTunnel_EventScript_15C880 compare 0x4001, 2 @@ -75,7 +75,7 @@ RusturfTunnel_EventScript_15C7D1:: @ 815C7D1 compare 0x4001, 3 call_if 1, RusturfTunnel_EventScript_15C8AE msgbox RusturfTunnel_Text_194706, 4 - closebutton + closemessage compare 0x4001, 1 call_if 1, RusturfTunnel_EventScript_15C8F7 compare 0x4001, 2 @@ -124,7 +124,7 @@ RusturfTunnel_EventScript_15C8EA:: @ 815C8EA return RusturfTunnel_EventScript_15C8EB:: @ 815C8EB - closebutton + closemessage applymovement 1, RusturfTunnel_Movement_15C98D waitmovement 0 return @@ -280,12 +280,12 @@ RusturfTunnel_EventScript_15C9A5:: @ 815C9A5 RusturfTunnel_EventScript_15C9AB:: @ 815C9AB lockall msgbox RusturfTunnel_Text_194159, 4 - closebutton + closemessage applymovement 6, RusturfTunnel_Movement_15C9D3 applymovement 7, RusturfTunnel_Movement_15C9D3 waitmovement 0 - moveoffscreen 6 - moveoffscreen 7 + moveobjectoffscreen 6 + moveobjectoffscreen 7 setvar 0x409a, 3 releaseall end @@ -314,7 +314,7 @@ RusturfTunnel_EventScript_15C9EA:: @ 815C9EA trainerbattle 3, OPPONENT_RUSTURF_TUNNEL_GRUNT, 0, RusturfTunnel_Text_194243 msgbox RusturfTunnel_Text_194274, 4 giveitem ITEM_DEVON_GOODS - closebutton + closemessage applymovement 255, RusturfTunnel_Movement_15CA99 applymovement 6, RusturfTunnel_Movement_15CAA2 waitmovement 0 @@ -330,12 +330,12 @@ RusturfTunnel_EventScript_15C9EA:: @ 815C9EA applymovement 5, RusturfTunnel_Movement_1A0839 waitmovement 0 message RusturfTunnel_Text_19434F - waittext + waitmessage waitse pokecry SPECIES_WINGULL, 0 waitbutton waitpokecry - closebutton + closemessage applymovement 5, RusturfTunnel_Movement_15CAB4 applymovement 7, RusturfTunnel_Movement_15CAC3 waitmovement 0 diff --git a/data/scripts/maps/SSTidalRooms.inc b/data/scripts/maps/SSTidalRooms.inc index aa84b6b48..c7cd4447d 100644 --- a/data/scripts/maps/SSTidalRooms.inc +++ b/data/scripts/maps/SSTidalRooms.inc @@ -23,7 +23,7 @@ SSTidalRooms_EventScript_15FF3D:: @ 815FF3D SSTidalRooms_EventScript_15FF47:: @ 815FF47 lockall msgbox SSTidalRooms_Text_19956B, 4 - closebutton + closemessage call SSTidalRooms_EventScript_1A02CA call SSTidalRooms_EventScript_15FD64 releaseall diff --git a/data/scripts/maps/SafariZone_Southeast.inc b/data/scripts/maps/SafariZone_Southeast.inc index 0632a2dda..06a400810 100644 --- a/data/scripts/maps/SafariZone_Southeast.inc +++ b/data/scripts/maps/SafariZone_Southeast.inc @@ -14,7 +14,7 @@ SafariZone_Southeast_EventScript_16004B:: @ 816004B waitmovement 0 applymovement 1, SafariZone_Southeast_Movement_160089 waitmovement 0 - movespriteperm 1, 32, 34 + setobjectxyperm 1, 32, 34 setvar 0x40a4, 0 releaseall end @@ -25,7 +25,7 @@ SafariZone_Southeast_MapScript1_160073:: @ 8160073 end SafariZone_Southeast_EventScript_16007F:: @ 816007F - movespriteperm 1, 31, 34 + setobjectxyperm 1, 31, 34 return SafariZone_Southeast_Movement_160087:: @ 8160087 @@ -69,7 +69,7 @@ SafariZone_Southeast_EventScript_1600D1:: @ 81600D1 SafariZone_Southeast_EventScript_1600E0:: @ 81600E0 msgbox SafariZone_Southeast_Text_1C3ACA, 4 - closebutton + closemessage switch FACING case 2, SafariZone_Southeast_EventScript_160105 case 4, SafariZone_Southeast_EventScript_16011F diff --git a/data/scripts/maps/SeafloorCavern_Room9.inc b/data/scripts/maps/SeafloorCavern_Room9.inc index e600611be..ee404404e 100644 --- a/data/scripts/maps/SeafloorCavern_Room9.inc +++ b/data/scripts/maps/SeafloorCavern_Room9.inc @@ -27,7 +27,7 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA .else msgbox SeafloorCavern_Room9_Text_1B4850, 4 .endif - closebutton + closemessage addobject 0x8004 applymovement 255, SeafloorCavern_Room9_Movement_1A083F waitmovement 0 @@ -134,7 +134,7 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA .else msgbox SeafloorCavern_Room9_Text_1B4ADB, 4 .endif - closebutton + closemessage applymovement 0x8004, SeafloorCavern_Room9_Movement_15DD41 waitmovement 0 .ifdef SAPPHIRE @@ -142,7 +142,7 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA .else msgbox SeafloorCavern_Room9_Text_1B4B11, 4 .endif - closebutton + closemessage playse 3 delay 20 applymovement 0x8004, SeafloorCavern_Room9_Movement_1A0845 @@ -152,7 +152,7 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA .else msgbox SeafloorCavern_Room9_Text_1B4C79, 4 .endif - closebutton + closemessage addobject 0x8005 addobject 0x8006 addobject 0x8007 @@ -182,7 +182,7 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA .else msgbox SeafloorCavern_Room9_Text_1B4E37, 4 .endif - closebutton + closemessage applymovement 0x8005, SeafloorCavern_Room9_Movement_15DD60 applymovement 0x8004, SeafloorCavern_Room9_Movement_15DD46 waitmovement 0 diff --git a/data/scripts/maps/SealedChamber_InnerRoom.inc b/data/scripts/maps/SealedChamber_InnerRoom.inc index 70821d183..027c1c363 100644 --- a/data/scripts/maps/SealedChamber_InnerRoom.inc +++ b/data/scripts/maps/SealedChamber_InnerRoom.inc @@ -5,7 +5,7 @@ SealedChamber_InnerRoom_EventScript_15F1E8:: @ 815F1E8 lockall braillemsg SealedChamber_InnerRoom_Braille_1C53C1 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 checkflag 228 goto_if_eq SealedChamber_InnerRoom_EventScript_15F247 specialvar RESULT, CheckRelicanthWailord @@ -29,7 +29,7 @@ SealedChamber_InnerRoom_EventScript_15F1E8:: @ 815F1E8 playse 8 delay 40 msgbox SealedChamber_InnerRoom_Text_1A138B, 4 - closebutton + closemessage fadeinbgm 0 setflag 228 releaseall @@ -43,7 +43,7 @@ SealedChamber_InnerRoom_EventScript_15F249:: @ 815F249 lockall braillemsg SealedChamber_InnerRoom_Braille_1C53F2 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -51,7 +51,7 @@ SealedChamber_InnerRoom_EventScript_15F257:: @ 815F257 lockall braillemsg SealedChamber_InnerRoom_Braille_1C5414 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -59,7 +59,7 @@ SealedChamber_InnerRoom_EventScript_15F265:: @ 815F265 lockall braillemsg SealedChamber_InnerRoom_Braille_1C5435 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -67,7 +67,7 @@ SealedChamber_InnerRoom_EventScript_15F273:: @ 815F273 lockall braillemsg SealedChamber_InnerRoom_Braille_1C545C waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -75,7 +75,7 @@ SealedChamber_InnerRoom_EventScript_15F281:: @ 815F281 lockall braillemsg SealedChamber_InnerRoom_Braille_1C5470 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -83,6 +83,6 @@ SealedChamber_InnerRoom_EventScript_15F28F:: @ 815F28F lockall braillemsg SealedChamber_InnerRoom_Braille_1C549B waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end diff --git a/data/scripts/maps/SealedChamber_OuterRoom.inc b/data/scripts/maps/SealedChamber_OuterRoom.inc index 091c0e8a4..638fc2a85 100644 --- a/data/scripts/maps/SealedChamber_OuterRoom.inc +++ b/data/scripts/maps/SealedChamber_OuterRoom.inc @@ -31,7 +31,7 @@ SealedChamber_OuterRoom_EventScript_15F12C:: @ 815F12C lockall braillemsg SealedChamber_OuterRoom_Braille_1C534F waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -39,7 +39,7 @@ SealedChamber_OuterRoom_EventScript_15F13A:: @ 815F13A lockall braillemsg SealedChamber_OuterRoom_Braille_1C5359 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -47,7 +47,7 @@ SealedChamber_OuterRoom_EventScript_15F148:: @ 815F148 lockall braillemsg SealedChamber_OuterRoom_Braille_1C5363 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -55,7 +55,7 @@ SealedChamber_OuterRoom_EventScript_15F156:: @ 815F156 lockall braillemsg SealedChamber_OuterRoom_Braille_1C536D waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -63,7 +63,7 @@ SealedChamber_OuterRoom_EventScript_15F164:: @ 815F164 lockall braillemsg SealedChamber_OuterRoom_Braille_1C5377 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -71,7 +71,7 @@ SealedChamber_OuterRoom_EventScript_15F172:: @ 815F172 lockall braillemsg SealedChamber_OuterRoom_Braille_1C5381 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -79,7 +79,7 @@ SealedChamber_OuterRoom_EventScript_15F180:: @ 815F180 lockall braillemsg SealedChamber_OuterRoom_Braille_1C538B waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -87,7 +87,7 @@ SealedChamber_OuterRoom_EventScript_15F18E:: @ 815F18E lockall braillemsg SealedChamber_OuterRoom_Braille_1C5396 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -95,7 +95,7 @@ SealedChamber_OuterRoom_EventScript_15F19C:: @ 815F19C lockall braillemsg SealedChamber_OuterRoom_Braille_1C539E waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -103,7 +103,7 @@ SealedChamber_OuterRoom_EventScript_15F1AA:: @ 815F1AA lockall braillemsg SealedChamber_OuterRoom_Braille_1C53A9 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -113,7 +113,7 @@ SealedChamber_OuterRoom_EventScript_15F1B8:: @ 815F1B8 goto_if_eq SealedChamber_OuterRoom_EventScript_15F1CF braillemsg SealedChamber_OuterRoom_Braille_1C53B1 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end @@ -126,6 +126,6 @@ SealedChamber_OuterRoom_EventScript_15F1D9:: @ 815F1D9 lockall braillemsg SealedChamber_OuterRoom_Braille_1C53B1 waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end diff --git a/data/scripts/maps/SlateportCity.inc b/data/scripts/maps/SlateportCity.inc index 1c9fc342f..dcd550549 100644 --- a/data/scripts/maps/SlateportCity.inc +++ b/data/scripts/maps/SlateportCity.inc @@ -23,27 +23,27 @@ SlateportCity_EventScript_14BA5C:: @ 814BA5C return SlateportCity_EventScript_14BA68:: @ 814BA68 - movespriteperm 11, 28, 13 - movespriteperm 7, 25, 13 - movespriteperm 3, 25, 14 - movespriteperm 6, 27, 16 - movespriteperm 8, 28, 16 - movespriteperm 1, 29, 16 - movespriteperm 2, 31, 14 - spritebehave 11, 8 - spritebehave 7, 18 - spritebehave 3, 16 - spritebehave 6, 7 - spritebehave 8, 7 - spritebehave 1, 7 - spritebehave 2, 9 + setobjectxyperm 11, 28, 13 + setobjectxyperm 7, 25, 13 + setobjectxyperm 3, 25, 14 + setobjectxyperm 6, 27, 16 + setobjectxyperm 8, 28, 16 + setobjectxyperm 1, 29, 16 + setobjectxyperm 2, 31, 14 + setobjectmovementtype 11, 8 + setobjectmovementtype 7, 18 + setobjectmovementtype 3, 16 + setobjectmovementtype 6, 7 + setobjectmovementtype 8, 7 + setobjectmovementtype 1, 7 + setobjectmovementtype 2, 9 return SlateportCity_EventScript_14BAB6:: @ 814BAB6 lock faceplayer message SlateportCity_Text_164642 - waittext + waitmessage pokemart SlateportCity_Items1 msgbox SlateportCity_Text_1A0C02, 4 release @@ -76,7 +76,7 @@ SlateportCity_EventScript_14BAE0:: @ 814BAE0 playfanfare 370 message SlateportCity_Text_1646DD waitfanfare - waittext + waitmessage msgbox SlateportCity_Text_1646FC, 4 special GivLeadMonEffortRibbon release @@ -307,7 +307,7 @@ SlateportCity_EventScript_14BD3A:: @ 814BD3A lock faceplayer msgbox SlateportCity_Text_164C64, 4 - closebutton + closemessage applymovement 5, SlateportCity_Movement_1A083D waitmovement 0 release @@ -317,7 +317,7 @@ SlateportCity_EventScript_14BD51:: @ 814BD51 lock faceplayer msgbox SlateportCity_Text_164C9F, 4 - closebutton + closemessage applymovement 19, SlateportCity_Movement_1A083D waitmovement 0 release @@ -327,7 +327,7 @@ SlateportCity_EventScript_14BD68:: @ 814BD68 lock faceplayer msgbox SlateportCity_Text_164CE8, 4 - closebutton + closemessage applymovement 20, SlateportCity_Movement_1A083D waitmovement 0 release @@ -337,7 +337,7 @@ SlateportCity_EventScript_14BD7F:: @ 814BD7F lock faceplayer msgbox SlateportCity_Text_164D2B, 4 - closebutton + closemessage applymovement 27, SlateportCity_Movement_1A083D waitmovement 0 release @@ -347,7 +347,7 @@ SlateportCity_EventScript_14BD96:: @ 814BD96 lock faceplayer msgbox SlateportCity_Text_164D92, 4 - closebutton + closemessage applymovement 28, SlateportCity_Movement_1A083D waitmovement 0 release @@ -357,7 +357,7 @@ SlateportCity_EventScript_14BDAD:: @ 814BDAD lock faceplayer msgbox SlateportCity_Text_164DD5, 4 - closebutton + closemessage applymovement 29, SlateportCity_Movement_1A083D waitmovement 0 release @@ -367,7 +367,7 @@ SlateportCity_EventScript_14BDC4:: @ 814BDC4 lock faceplayer msgbox SlateportCity_Text_164DF4, 4 - closebutton + closemessage applymovement 30, SlateportCity_Movement_1A083D waitmovement 0 release @@ -377,7 +377,7 @@ SlateportCity_EventScript_14BDDB:: @ 814BDDB lock faceplayer msgbox SlateportCity_Text_164E46, 4 - closebutton + closemessage applymovement 31, SlateportCity_Movement_1A083D waitmovement 0 release @@ -387,7 +387,7 @@ SlateportCity_EventScript_14BDF2:: @ 814BDF2 lock faceplayer message SlateportCity_Text_1A0BE4 - waittext + waitmessage pokemartdecor SlateportCity_Decorations1 msgbox SlateportCity_Text_1A0C02, 4 release @@ -413,7 +413,7 @@ SlateportCity_EventScript_14BE20:: @ 814BE20 checkflag 96 goto_if 0, SlateportCity_EventScript_14BE16 message SlateportCity_Text_1A0BE4 - waittext + waitmessage pokemartdecor SlateportCity_Decorations2 msgbox SlateportCity_Text_1A0C02, 4 release @@ -445,7 +445,7 @@ SlateportCity_Decorations2:: @ 814BE40 checkflag 96 goto_if 0, SlateportCity_EventScript_14BE16 message SlateportCity_Text_1A0BE4 - waittext + waitmessage pokemartdecor SlateportCity_Decorations3 msgbox SlateportCity_Text_1A0C02, 4 release @@ -472,7 +472,7 @@ SlateportCity_EventScript_14BE9A:: @ 814BE9A lock faceplayer message SlateportCity_Text_1A0BE4 - waittext + waitmessage pokemart SlateportCity_Items2 msgbox SlateportCity_Text_1A0C02, 4 release @@ -490,7 +490,7 @@ SlateportCity_EventScript_14BEBC:: @ 814BEBC lockall msgbox SlateportCity_Text_165498, 4 msgbox SlateportCity_Text_1654E0, 4 - closebutton + closemessage applymovement 10, SlateportCity_Movement_1A0843 waitmovement 0 delay 10 @@ -528,7 +528,7 @@ SlateportCity_EventScript_14BEBC:: @ 814BEBC applymovement 11, SlateportCity_Movement_1A0839 waitmovement 0 msgbox SlateportCity_Text_16583A, 4 - closebutton + closemessage applymovement 11, SlateportCity_Movement_14BFFB applymovement 255, SlateportCity_Movement_14C008 waitmovement 0 diff --git a/data/scripts/maps/SlateportCity_ContestLobby.inc b/data/scripts/maps/SlateportCity_ContestLobby.inc index c43b64288..cb4632d77 100644 --- a/data/scripts/maps/SlateportCity_ContestLobby.inc +++ b/data/scripts/maps/SlateportCity_ContestLobby.inc @@ -38,7 +38,7 @@ SlateportCity_ContestLobby_EventScript_155448:: @ 8155448 applymovement 255, SlateportCity_ContestLobby_Movement_1554CA waitmovement 0 msgbox SlateportCity_ContestLobby_Text_1A6832, 4 - closebutton + closemessage applymovement 1, SlateportCity_ContestLobby_Movement_1554D3 applymovement 255, SlateportCity_ContestLobby_Movement_1554C0 waitmovement 0 @@ -118,7 +118,7 @@ SlateportCity_ContestLobby_EventScript_155526:: @ 8155526 SlateportCity_ContestLobby_EventScript_15552F:: @ 815552F lockall fadescreen 1 - showcontestwinner 3 + drawcontestwinner 3 releaseall end @@ -130,6 +130,6 @@ SlateportCity_ContestLobby_EventScript_155536:: @ 8155536 lockall special ShowBerryBlenderRecordWindow waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end diff --git a/data/scripts/maps/SlateportCity_Harbor.inc b/data/scripts/maps/SlateportCity_Harbor.inc index 50f4926e4..6d2471d99 100644 --- a/data/scripts/maps/SlateportCity_Harbor.inc +++ b/data/scripts/maps/SlateportCity_Harbor.inc @@ -17,8 +17,8 @@ SlateportCity_Harbor_EventScript_155F85:: @ 8155F85 SlateportCity_Harbor_EventScript_155F89:: @ 8155F89 savebgm BGM_EVIL_TEAM - movespriteperm 4, 12, 13 - spritebehave 4, 9 + setobjectxyperm 4, 12, 13 + setobjectmovementtype 4, 9 setflag 905 return @@ -54,7 +54,7 @@ SlateportCity_Harbor_EventScript_155FD5:: @ 8155FD5 applymovement 255, SlateportCity_Harbor_Movement_1A0841 waitmovement 0 msgbox SlateportCity_Harbor_Text_17FD7D, 4 - closebutton + closemessage applymovement 6, SlateportCity_Harbor_Movement_15609B applymovement 7, SlateportCity_Harbor_Movement_15609B applymovement 8, SlateportCity_Harbor_Movement_1560A5 @@ -72,11 +72,11 @@ SlateportCity_Harbor_EventScript_155FD5:: @ 8155FD5 compare 0x8008, 3 call_if 1, SlateportCity_Harbor_EventScript_156086 msgbox SlateportCity_Harbor_Text_17FE60, 4 - closebutton + closemessage setflag 821 setflag 822 - moveoffscreen 4 - spritebehave 4, 10 + moveobjectoffscreen 4 + setobjectmovementtype 4, 10 releaseall end @@ -171,12 +171,12 @@ SlateportCity_Harbor_EventScript_1560D9:: @ 81560D9 compare RESULT, 0 goto_if_eq SlateportCity_Harbor_EventScript_156135 message SlateportCity_Harbor_Text_17FB0A - waittext + waitmessage goto SlateportCity_Harbor_EventScript_1560FD end SlateportCity_Harbor_EventScript_1560FD:: @ 81560FD - multichoicedef 18, 6, 52, 2, 0 + multichoicedefault 18, 6, 52, 2, 0 switch RESULT case 0, SlateportCity_Harbor_EventScript_15613F case 1, SlateportCity_Harbor_EventScript_156167 @@ -212,13 +212,13 @@ SlateportCity_Harbor_EventScript_156167:: @ 8156167 SlateportCity_Harbor_EventScript_15618A:: @ 815618A message SlateportCity_Harbor_Text_17FBE5 - waittext + waitmessage goto SlateportCity_Harbor_EventScript_1560FD end SlateportCity_Harbor_EventScript_156196:: @ 8156196 msgbox SlateportCity_Harbor_Text_17FBB6, 4 - closebutton + closemessage applymovement LAST_TALKED, SlateportCity_Harbor_Movement_1A0841 waitmovement 0 delay 30 @@ -277,7 +277,7 @@ SlateportCity_Harbor_EventScript_156211:: @ 8156211 compare 0x40a0, 2 goto_if_eq SlateportCity_Harbor_EventScript_15624E msgbox SlateportCity_Harbor_Text_17FD1C, 4 - closebutton + closemessage applymovement LAST_TALKED, SlateportCity_Harbor_Movement_1A083D waitmovement 0 release @@ -318,7 +318,7 @@ SlateportCity_Harbor_EventScript_15629D:: @ 815629D SlateportCity_Harbor_EventScript_1562A7:: @ 81562A7 message SlateportCity_Harbor_Text_18028B - waittext + waitmessage goto SlateportCity_Harbor_EventScript_1562B3 end @@ -364,7 +364,7 @@ SlateportCity_Harbor_EventScript_15636A:: @ 815636A SlateportCity_Harbor_EventScript_156374:: @ 8156374 message SlateportCity_Harbor_Text_180447 - waittext + waitmessage goto SlateportCity_Harbor_EventScript_1562B3 end diff --git a/data/scripts/maps/SlateportCity_Mart.inc b/data/scripts/maps/SlateportCity_Mart.inc index 730afe6d4..39a1d5ba2 100644 --- a/data/scripts/maps/SlateportCity_Mart.inc +++ b/data/scripts/maps/SlateportCity_Mart.inc @@ -5,7 +5,7 @@ SlateportCity_Mart_EventScript_156411:: @ 8156411 lock faceplayer message SlateportCity_Mart_Text_1A0BE4 - waittext + waitmessage pokemart SlateportCity_Mart_Items msgbox SlateportCity_Mart_Text_1A0C02, 4 release diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc index 32a5c2013..f1da0c5a3 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc @@ -36,7 +36,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B06:: @ 8155B06 msgbox SlateportCity_OceanicMuseum_1F_Text_17E18D, 5 compare RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155B2D - closebutton + closemessage hidemoney 0, 0 applymovement 255, SlateportCity_OceanicMuseum_1F_Movement_155B8D waitmovement 0 @@ -60,7 +60,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B5A:: @ 8155B5A checkflag 149 goto_if 0, SlateportCity_OceanicMuseum_1F_EventScript_155B7B msgbox SlateportCity_OceanicMuseum_1F_Text_17E1F5, 4 - closebutton + closemessage hidemoney 0, 0 applymovement 255, SlateportCity_OceanicMuseum_1F_Movement_155B8D waitmovement 0 @@ -169,7 +169,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155C3A:: @ 8155C3A goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155CC2 setflag 269 msgbox SlateportCity_OceanicMuseum_1F_Text_17E606, 4 - closebutton + closemessage compare FACING, 2 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155C98 compare FACING, 2 diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc index 5f64b3941..e379c633d 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_2F.inc @@ -10,7 +10,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 lock faceplayer msgbox SlateportCity_OceanicMuseum_2F_Text_17ECFD, 4 - closebutton + closemessage playbgm BGM_EVIL_TEAM, 1 addobject 3 applymovement 3, SlateportCity_OceanicMuseum_2F_Movement_155EB4 @@ -30,7 +30,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 call_if 5, SlateportCity_OceanicMuseum_2F_EventScript_155E6D msgbox SlateportCity_OceanicMuseum_2F_Text_17EDD7, 4 msgbox SlateportCity_OceanicMuseum_2F_Text_17EE01, 4 - closebutton + closemessage applymovement 4, SlateportCity_OceanicMuseum_2F_Movement_155EB2 waitmovement 0 compare FACING, 1 @@ -39,7 +39,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 call_if 1, SlateportCity_OceanicMuseum_2F_EventScript_155E83 trainerbattle 3, OPPONENT_MUSEUM_2F_GRUNT_1, 0, SlateportCity_OceanicMuseum_2F_Text_17EE4E msgbox SlateportCity_OceanicMuseum_2F_Text_17EE66, 4 - closebutton + closemessage applymovement 4, SlateportCity_OceanicMuseum_2F_Movement_155EBF waitmovement 0 applymovement 3, SlateportCity_OceanicMuseum_2F_Movement_155EB2 @@ -53,7 +53,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 applymovement 4, SlateportCity_OceanicMuseum_2F_Movement_1A0841 waitmovement 0 msgbox SlateportCity_OceanicMuseum_2F_Text_17EEEA, 4 - closebutton + closemessage delay 35 addobject 2 applymovement 2, SlateportCity_OceanicMuseum_2F_Movement_155EA8 @@ -67,7 +67,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 .else msgbox SlateportCity_OceanicMuseum_2F_Text_17F17E, 4 .endif - closebutton + closemessage fadescreen 1 removeobject 2 removeobject 3 @@ -81,7 +81,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155CE6:: @ 8155CE6 setvar 0x8004, 269 call SlateportCity_OceanicMuseum_2F_EventScript_1A067F msgbox SlateportCity_OceanicMuseum_2F_Text_17F433, 4 - closebutton + closemessage applymovement 1, SlateportCity_OceanicMuseum_2F_Movement_155E98 waitmovement 0 playse 9 @@ -265,7 +265,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_155F46:: @ 8155F46 lock faceplayer msgbox SlateportCity_OceanicMuseum_2F_Text_17F53B, 4 - closebutton + closemessage applymovement LAST_TALKED, SlateportCity_OceanicMuseum_2F_Movement_1A083D waitmovement 0 release diff --git a/data/scripts/maps/SlateportCity_PokemonCenter_1F.inc b/data/scripts/maps/SlateportCity_PokemonCenter_1F.inc index c550a6850..9aa326f70 100644 --- a/data/scripts/maps/SlateportCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/SlateportCity_PokemonCenter_1F.inc @@ -10,7 +10,7 @@ SlateportCity_PokemonCenter_1F_MapScript1_1563C5:: @ 81563C5 SlateportCity_PokemonCenter_1F_EventScript_1563CE:: @ 81563CE setvar 0x800b, 1 call SlateportCity_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end diff --git a/data/scripts/maps/SlateportCity_SternsShipyard_1F.inc b/data/scripts/maps/SlateportCity_SternsShipyard_1F.inc index 3c988d084..9fe7f1f1a 100644 --- a/data/scripts/maps/SlateportCity_SternsShipyard_1F.inc +++ b/data/scripts/maps/SlateportCity_SternsShipyard_1F.inc @@ -15,7 +15,7 @@ SlateportCity_SternsShipyard_1F_EventScript_155336:: @ 8155336 applymovement 1, SlateportCity_SternsShipyard_1F_Movement_1A0839 waitmovement 0 msgbox SlateportCity_SternsShipyard_1F_Text_17C1EC, 4 - closebutton + closemessage applymovement 1, SlateportCity_SternsShipyard_1F_Movement_1A083D waitmovement 0 setflag 148 @@ -41,7 +41,7 @@ SlateportCity_SternsShipyard_1F_EventScript_1553B0:: @ 81553B0 applymovement 1, SlateportCity_SternsShipyard_1F_Movement_1A0839 waitmovement 0 msgbox SlateportCity_SternsShipyard_1F_Text_17C2F2, 4 - closebutton + closemessage applymovement 1, SlateportCity_SternsShipyard_1F_Movement_1A083D waitmovement 0 releaseall diff --git a/data/scripts/maps/SootopolisCity.inc b/data/scripts/maps/SootopolisCity.inc index 90d2bcc5e..a1ecffbd2 100644 --- a/data/scripts/maps/SootopolisCity.inc +++ b/data/scripts/maps/SootopolisCity.inc @@ -12,7 +12,7 @@ SootopolisCity_MapScript1_14D08D:: @ 814D08D end SootopolisCity_EventScript_14D0A0:: @ 814D0A0 - movespriteperm 3, 31, 18 + setobjectxyperm 3, 31, 18 setmaptile 31, 32, 592, 1 return @@ -43,22 +43,22 @@ SootopolisCity_MapScript1_14D10D:: @ 814D10D SootopolisCity_EventScript_14D123:: @ 814D123 call SootopolisCity_EventScript_1A02C1 - movespriteperm 1, 29, 19 - movespriteperm 2, 33, 19 + setobjectxyperm 1, 29, 19 + setobjectxyperm 2, 33, 19 compare 0x405e, 1 call_if 1, SootopolisCity_EventScript_14D142 return SootopolisCity_EventScript_14D142:: @ 814D142 - movespriteperm 10, 29, 6 - spritebehave 10, 10 - movespriteperm 5, 30, 6 - spritebehave 5, 9 + setobjectxyperm 10, 29, 6 + setobjectmovementtype 10, 10 + setobjectxyperm 5, 30, 6 + setobjectmovementtype 5, 9 return SootopolisCity_EventScript_14D159:: @ 814D159 - movespriteperm 10, 31, 33 - spritebehave 10, 8 + setobjectxyperm 10, 31, 33 + setobjectmovementtype 10, 8 return SootopolisCity_MapScript1_14D165:: @ 814D165 @@ -228,7 +228,7 @@ SootopolisCity_EventScript_14D308:: @ 814D308 .else msgbox SootopolisCity_Text_169E0F, 4 .endif - closebutton + closemessage applymovement 10, SootopolisCity_Movement_14D417 applymovement 255, SootopolisCity_Movement_14D440 waitmovement 10 @@ -247,7 +247,7 @@ SootopolisCity_EventScript_14D308:: @ 814D308 .else msgbox SootopolisCity_Text_169F3C, 4 .endif - closebutton + closemessage delay 30 applymovement 5, SootopolisCity_Movement_14D46A applymovement 10, SootopolisCity_Movement_14D41D @@ -264,7 +264,7 @@ SootopolisCity_EventScript_14D308:: @ 814D308 .else msgbox SootopolisCity_Text_169F6B, 4 .endif - closebutton + closemessage delay 30 applymovement 5, SootopolisCity_Movement_14D47C applymovement 255, SootopolisCity_Movement_14D457 @@ -284,10 +284,10 @@ SootopolisCity_EventScript_14D308:: @ 814D308 .else msgbox SootopolisCity_Text_16A13E, 4 .endif - moveoffscreen 5 - spritebehave 5, 9 - moveoffscreen 10 - spritebehave 10, 10 + moveobjectoffscreen 5 + setobjectmovementtype 5, 9 + moveobjectoffscreen 10 + setobjectmovementtype 10, 10 setvar 0x405e, 2 releaseall end @@ -457,7 +457,7 @@ SootopolisCity_EventScript_14D498:: @ 814D498 SootopolisCity_EventScript_14D4AD:: @ 814D4AD msgbox SootopolisCity_Text_16A33E, 4 - closebutton + closemessage applymovement LAST_TALKED, SootopolisCity_Movement_1A0845 waitmovement 0 delay 50 diff --git a/data/scripts/maps/SootopolisCity_Gym_1F.inc b/data/scripts/maps/SootopolisCity_Gym_1F.inc index bd0af12be..51b67ee4b 100644 --- a/data/scripts/maps/SootopolisCity_Gym_1F.inc +++ b/data/scripts/maps/SootopolisCity_Gym_1F.inc @@ -97,7 +97,7 @@ SootopolisCity_Gym_1F_EventScript_15AFFF:: @ 815AFFF SootopolisCity_Gym_1F_EventScript_15B02D:: @ 815B02D message SootopolisCity_Gym_1F_Text_18F342 - waittext + waitmessage call SootopolisCity_Gym_1F_EventScript_1A02C5 msgbox SootopolisCity_Gym_1F_Text_18F36B, 4 setflag 1236 diff --git a/data/scripts/maps/SootopolisCity_House8.inc b/data/scripts/maps/SootopolisCity_House8.inc index 662117741..df536004e 100644 --- a/data/scripts/maps/SootopolisCity_House8.inc +++ b/data/scripts/maps/SootopolisCity_House8.inc @@ -41,7 +41,7 @@ SootopolisCity_House8_EventScript_15B466:: @ 815B466 giveitem ITEM_ELIXIR compare RESULT, 0 goto_if_eq SootopolisCity_House8_EventScript_15B488 - closebutton + closemessage release end @@ -90,7 +90,7 @@ SootopolisCity_House8_EventScript_15B4F7:: @ 815B4F7 giveitem ITEM_ELIXIR compare RESULT, 0 goto_if_eq SootopolisCity_House8_EventScript_15B519 - closebutton + closemessage release end diff --git a/data/scripts/maps/SootopolisCity_Mart.inc b/data/scripts/maps/SootopolisCity_Mart.inc index 6cfb2ff79..b88347002 100644 --- a/data/scripts/maps/SootopolisCity_Mart.inc +++ b/data/scripts/maps/SootopolisCity_Mart.inc @@ -5,7 +5,7 @@ SootopolisCity_Mart_EventScript_15B21B:: @ 815B21B lock faceplayer message SootopolisCity_Mart_Text_1A0BE4 - waittext + waitmessage pokemart SootopolisCity_Mart_Items msgbox SootopolisCity_Mart_Text_1A0C02, 4 release diff --git a/data/scripts/maps/SootopolisCity_PokemonCenter_1F.inc b/data/scripts/maps/SootopolisCity_PokemonCenter_1F.inc index 00c9d3310..cb09d8856 100644 --- a/data/scripts/maps/SootopolisCity_PokemonCenter_1F.inc +++ b/data/scripts/maps/SootopolisCity_PokemonCenter_1F.inc @@ -9,7 +9,7 @@ SootopolisCity_PokemonCenter_1F_MapScript1_15B196:: @ 815B196 @ 815B19A setvar 0x800B, 1 call VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end diff --git a/data/scripts/maps/SouthernIsland_Exterior.inc b/data/scripts/maps/SouthernIsland_Exterior.inc index 77c163c47..3c6426024 100644 --- a/data/scripts/maps/SouthernIsland_Exterior.inc +++ b/data/scripts/maps/SouthernIsland_Exterior.inc @@ -13,7 +13,7 @@ SouthernIsland_Exterior_EventScript_160AE0:: @ 8160AE0 compare RESULT, 0 goto_if_eq SouthernIsland_Exterior_EventScript_160B25 msgbox SouthernIsland_Exterior_Text_1C5281, 4 - closebutton + closemessage applymovement LAST_TALKED, SouthernIsland_Exterior_Movement_1A0845 waitmovement 0 delay 30 diff --git a/data/scripts/maps/Underwater_SealedChamber.inc b/data/scripts/maps/Underwater_SealedChamber.inc index 5bbe8e3b6..edc8229a7 100644 --- a/data/scripts/maps/Underwater_SealedChamber.inc +++ b/data/scripts/maps/Underwater_SealedChamber.inc @@ -22,6 +22,6 @@ Underwater_SealedChamber_EventScript_15F0B8:: @ 815F0B8 lockall braillemsg Underwater_SealedChamber_Braille_1C533D waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end diff --git a/data/scripts/maps/VerdanturfTown_ContestLobby.inc b/data/scripts/maps/VerdanturfTown_ContestLobby.inc index 5d7c6de18..8462892e6 100644 --- a/data/scripts/maps/VerdanturfTown_ContestLobby.inc +++ b/data/scripts/maps/VerdanturfTown_ContestLobby.inc @@ -38,7 +38,7 @@ VerdanturfTown_ContestLobby_EventScript_153DA1:: @ 8153DA1 applymovement 255, VerdanturfTown_ContestLobby_Movement_153E23 waitmovement 0 msgbox VerdanturfTown_ContestLobby_Text_1A6832, 4 - closebutton + closemessage applymovement 1, VerdanturfTown_ContestLobby_Movement_153E2C applymovement 255, VerdanturfTown_ContestLobby_Movement_153E19 waitmovement 0 @@ -90,7 +90,7 @@ VerdanturfTown_ContestLobby_Movement_153E35:: @ 8153E35 VerdanturfTown_ContestLobby_EventScript_153E37:: @ 8153E37 lockall fadescreen 1 - showcontestwinner 1 + drawcontestwinner 1 releaseall end @@ -124,6 +124,6 @@ VerdanturfTown_ContestLobby_EventScript_153E89:: @ 8153E89 lockall special ShowBerryBlenderRecordWindow waitbutton - hidebox 0, 0, 29, 19 + erasebox 0, 0, 29, 19 releaseall end diff --git a/data/scripts/maps/VerdanturfTown_Mart.inc b/data/scripts/maps/VerdanturfTown_Mart.inc index 4227dc8b1..db72de227 100644 --- a/data/scripts/maps/VerdanturfTown_Mart.inc +++ b/data/scripts/maps/VerdanturfTown_Mart.inc @@ -5,7 +5,7 @@ VerdanturfTown_Mart_EventScript_153EBC:: @ 8153EBC lock faceplayer message VerdanturfTown_Mart_Text_1A0BE4 - waittext + waitmessage pokemart VerdanturfTown_Mart_Items msgbox VerdanturfTown_Mart_Text_1A0C02, 4 release diff --git a/data/scripts/maps/VerdanturfTown_PokemonCenter_1F.inc b/data/scripts/maps/VerdanturfTown_PokemonCenter_1F.inc index e0fee3fb8..a0b1f87de 100644 --- a/data/scripts/maps/VerdanturfTown_PokemonCenter_1F.inc +++ b/data/scripts/maps/VerdanturfTown_PokemonCenter_1F.inc @@ -11,7 +11,7 @@ PacifidlogTown_PokemonCenter_1F_EventScript_153F18:: @ 8153F18 VerdanturfTown_PokemonCenter_1F_EventScript_153F18:: @ 8153F18 setvar 0x800b, 1 call VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B - waittext + waitmessage waitbutton release end diff --git a/data/scripts/maps/VictoryRoad_1F.inc b/data/scripts/maps/VictoryRoad_1F.inc index 2ed660a5f..fe775d793 100644 --- a/data/scripts/maps/VictoryRoad_1F.inc +++ b/data/scripts/maps/VictoryRoad_1F.inc @@ -42,7 +42,7 @@ VictoryRoad_1F_EventScript_15DED3:: @ 815DED3 trainerbattle 3, OPPONENT_WALLY_1, 0, VictoryRoad_1F_Text_197943 msgbox VictoryRoad_1F_Text_197967, 4 clearflag 858 - moveoffscreen 4 + moveobjectoffscreen 4 setflag 126 setvar 0x40c3, 1 releaseall diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index 215fb3948..402afae23 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -131,7 +131,7 @@ SpeakToTrader: compare RESULT, TRUE goto_if_eq already_traded message gTextTrader_MenuPrompt - waittext + waitmessage goto do_trader_menu_get end @@ -165,13 +165,13 @@ cancelled_get_menu: rare_item_cant_trade_away: message gTextTrader_ICantTradeThatOneAway - waittext + waitmessage goto do_trader_menu_get end dont_want_item: message gTextTrader_MenuPrompt - waittext + waitmessage goto do_trader_menu_get end @@ -232,14 +232,14 @@ SpeakToStoryteller: goto_if_eq no_stories_recorded choose_story: message gTextStoryteller_WhichTale - waittext + waitmessage special ScrSpecial_StorytellerStoryListMenu waitstate compare RESULT, FALSE goto_if_eq cancel_story_menu setvar 0x8008, 1 special ScrSpecial_StorytellerDisplayStory - waittext + waitmessage waitbutton specialvar RESULT, ScrSpecial_StorytellerUpdateStat compare RESULT, FALSE @@ -272,25 +272,25 @@ prompt_record_story: compare RESULT, TRUE goto_if_eq stat_update msgbox gTextStoryteller_ImNotSatisfied, 4 - closebutton + closemessage release end stat_update: msgbox gTextStoryteller_BirthOfANewLegend, 4 - closebutton + closemessage release end dont_hear_story: msgbox gTextStoryteller_OhIFeelStifled, 4 - closebutton + closemessage release end cant_record_story: msgbox gTextStoryteller_WishMorePeopleWould, 4 - closebutton + closemessage release end @@ -335,7 +335,7 @@ also_i_was_thinking: tell_giddy_tale: special ScrSpecial_GenerateGiddyLine special ShowFieldMessageStringVar4 - waittext + waitmessage yesnobox 20, 8 compare RESULT, 1 goto_if_eq tell_another_giddy_tale diff --git a/data/scripts/mystery_event_club.inc b/data/scripts/mystery_event_club.inc index 7f29be0d8..df097fc19 100644 --- a/data/scripts/mystery_event_club.inc +++ b/data/scripts/mystery_event_club.inc @@ -24,7 +24,7 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1B6C:: @ 81B1B6C PetalburgCity_PokemonCenter_1F_EventScript_1B1B7A:: @ 81B1B7A msgbox PetalburgCity_PokemonCenter_1F_Text_1B1F7B, 4 - closebutton + closemessage setvar 0x8004, 0 call PetalburgCity_PokemonCenter_1F_EventScript_1A00F3 lock @@ -45,7 +45,7 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1BB1:: @ 81B1BB1 PetalburgCity_PokemonCenter_1F_EventScript_1B1BBB:: @ 81B1BBB setvar 0x8004, 0 special sub_80EB7C4 - waittext + waitmessage delay 80 msgbox PetalburgCity_PokemonCenter_1F_Text_1B2137, 4 release @@ -78,7 +78,7 @@ PetalburgCity_PokemonCenter_1F_EventScript_1B1C28:: @ 81B1C28 PetalburgCity_PokemonCenter_1F_EventScript_1B1C36:: @ 81B1C36 msgbox PetalburgCity_PokemonCenter_1F_Text_1B207F, 4 - closebutton + closemessage setvar 0x8004, 0 call PetalburgCity_PokemonCenter_1F_EventScript_1A00F3 lock diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index a821fd62d..01fc63f20 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -13,7 +13,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6956:: @ 81B6956 compare 0x8005, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B69AA msgbox LittlerootTown_BrendansHouse_1F_Text_172453, 4 - closebutton + closemessage setvar 0x4092, 4 applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1B69B5 applymovement 0x8004, LittlerootTown_BrendansHouse_1F_Movement_1A0841 @@ -38,7 +38,7 @@ LittlerootTown_BrendansHouse_1F_Movement_1B69B5:: @ 81B69B5 LittlerootTown_BrendansHouse_1F_EventScript_1B69B7:: @ 81B69B7 LittlerootTown_MaysHouse_1F_EventScript_1B69B7:: @ 81B69B7 msgbox LittlerootTown_BrendansHouse_1F_Text_172531, 4 - closebutton + closemessage applymovement 0x8004, LittlerootTown_BrendansHouse_1F_Movement_1A0841 applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1B6CDC waitmovement 0 @@ -86,7 +86,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_1B6A31:: @ 81B6A31 applymovement 255, LittlerootTown_BrendansHouse_2F_Movement_1A0843 waitmovement 0 msgbox LittlerootTown_BrendansHouse_2F_Text_172E4C, 4 - closebutton + closemessage applymovement 0x8008, LittlerootTown_BrendansHouse_2F_Movement_1B6AA9 waitmovement 0 return @@ -99,7 +99,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_1B6A61:: @ 81B6A61 applymovement 255, LittlerootTown_BrendansHouse_2F_Movement_1A083F waitmovement 0 msgbox LittlerootTown_BrendansHouse_2F_Text_172E4C, 4 - closebutton + closemessage applymovement 0x8008, LittlerootTown_BrendansHouse_2F_Movement_1B6AB4 waitmovement 0 return @@ -162,7 +162,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6ABF:: @ 81B6ABF waitmovement 0 playbgm 453, 0 msgbox LittlerootTown_BrendansHouse_1F_Text_1725C9, 4 - closebutton + closemessage applymovement 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1B6BDB waitmovement 0 applymovement 255, LittlerootTown_BrendansHouse_1F_Movement_1B6CD2 @@ -172,7 +172,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6ABF:: @ 81B6ABF waitmovement 0 msgbox LittlerootTown_BrendansHouse_1F_Text_1725FE, 4 msgbox LittlerootTown_BrendansHouse_1F_Text_172644, 4 - closebutton + closemessage setvar 0x4001, 1 applymovement 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1B6BE1 waitmovement 0 @@ -187,7 +187,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6B2E:: @ 81B6B2E waitmovement 0 playbgm 453, 0 msgbox LittlerootTown_MaysHouse_1F_Text_1725C9, 4 - closebutton + closemessage applymovement 0x8005, LittlerootTown_MaysHouse_1F_Movement_1B6BDE waitmovement 0 applymovement 255, LittlerootTown_MaysHouse_1F_Movement_1B6CDA @@ -197,7 +197,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6B2E:: @ 81B6B2E waitmovement 0 msgbox LittlerootTown_MaysHouse_1F_Text_1725FE, 4 msgbox LittlerootTown_MaysHouse_1F_Text_172644, 4 - closebutton + closemessage setvar 0x4001, 1 applymovement 0x8005, LittlerootTown_MaysHouse_1F_Movement_1B6BE5 waitmovement 0 @@ -212,7 +212,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6B9D:: @ 81B6B9D applymovement 0x8005, LittlerootTown_BrendansHouse_1F_Movement_1A0835 waitmovement 0 msgbox LittlerootTown_BrendansHouse_1F_Text_1725A3, 4 - closebutton + closemessage return LittlerootTown_BrendansHouse_1F_EventScript_1B6BBE:: @ 81B6BBE @@ -296,7 +296,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6C80:: @ 81B6C80 end LittlerootTown_BrendansHouse_1F_EventScript_1B6C8A:: @ 81B6C8A - closebutton + closemessage call LittlerootTown_BrendansHouse_1F_EventScript_1A02CA inccounter GAME_STAT_RESTED_AT_HOME msgbox LittlerootTown_BrendansHouse_1F_Text_17276B, 4 @@ -385,13 +385,13 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6CDE:: @ 81B6CDE msgbox LittlerootTown_BrendansHouse_1F_Text_17298B, 4 giveitem ITEM_SS_TICKET msgbox LittlerootTown_BrendansHouse_1F_Text_172A7D, 4 - closebutton + closemessage compare 0x8008, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DE3 compare 0x8008, 1 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DEE msgbox LittlerootTown_BrendansHouse_1F_Text_172B5E, 4 - closebutton + closemessage compare 0x8008, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DF9 compare 0x8008, 1 diff --git a/data/scripts/pokeblocks.inc b/data/scripts/pokeblocks.inc index 9f9b21807..6fe754097 100644 --- a/data/scripts/pokeblocks.inc +++ b/data/scripts/pokeblocks.inc @@ -239,7 +239,7 @@ FallarborTown_ContestLobby_EventScript_1B78A1:: @ 81B78A1 compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_1B7936 message FallarborTown_ContestLobby_Text_1B7304 - waittext + waitmessage special sub_8083614 waitstate compare RESULT, 1 diff --git a/data/scripts/safari_zone.inc b/data/scripts/safari_zone.inc index b7c4d1a43..d0283f072 100644 --- a/data/scripts/safari_zone.inc +++ b/data/scripts/safari_zone.inc @@ -26,7 +26,7 @@ gUnknown_081C3448:: @ 81C3448 lockall playse 73 message UnknownString_81C34E4 - waittext + waitmessage waitbutton releaseall goto EventScript_1C341B @@ -35,7 +35,7 @@ gUnknown_081C3459:: @ 81C3459 lockall playse 73 message UnknownString_81C3514 - waittext + waitmessage waitbutton releaseall goto EventScript_1C341B @@ -61,14 +61,14 @@ EventScript_1C348E: EventScript_1C34A0: message UnknownString_81C35A9 - waittext + waitmessage waitbutton releaseall end EventScript_1C34A9: message UnknownString_81C3583 - waittext + waitmessage waitbutton releaseall end diff --git a/data/scripts/secret_power_tm.inc b/data/scripts/secret_power_tm.inc index d9ebe56a3..f3c03a853 100644 --- a/data/scripts/secret_power_tm.inc +++ b/data/scripts/secret_power_tm.inc @@ -13,7 +13,7 @@ Route111_EventScript_1A3877:: @ 81A3877 compare RESULT, 0 goto_if_eq Route111_EventScript_1A38D9 msgbox Route111_Text_1A35C5, 4 - closebutton + closemessage setflag 96 clearflag 948 compare FACING, 3 diff --git a/data/scripts/tv.inc b/data/scripts/tv.inc index 41e55929d..621d5d4f0 100644 --- a/data/scripts/tv.inc +++ b/data/scripts/tv.inc @@ -57,7 +57,7 @@ EventScript_1A6F0B: EventScript_1A6F21: special DoTVShow - waittext + waitmessage waitbutton compare RESULT, 1 goto_if 5, EventScript_1A6F21 @@ -80,14 +80,14 @@ EventScript_1A6F50: special sub_80BECE8 compare RESULT, 0 goto_if_eq EventScript_1A6EBB - waittext + waitmessage waitbutton goto EventScript_1A6F37 end EventScript_1A6F66: special DoTVShowInSearchOfTrainers - waittext + waitmessage waitbutton compare RESULT, 0 goto_if_eq EventScript_1A6F66 diff --git a/src/scrcmd.c b/src/scrcmd.c index f2a2da881..35264d5e2 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1055,7 +1055,7 @@ bool8 ScrCmd_setobjectxy(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_movespriteperm(struct ScriptContext *ctx) +bool8 ScrCmd_setobjectxyperm(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u16 x = VarGet(ScriptReadHalfword(ctx)); @@ -1065,7 +1065,7 @@ bool8 ScrCmd_movespriteperm(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_moveoffscreen(struct ScriptContext *ctx) +bool8 ScrCmd_moveobjectoffscreen(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); @@ -1133,7 +1133,7 @@ bool8 ScrCmd_turnobject(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_spritebehave(struct ScriptContext *ctx) +bool8 ScrCmd_setobjectmovementtype(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 movementType = ScriptReadByte(ctx); @@ -1246,13 +1246,13 @@ bool8 ScrCmd_message2(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_waittext(struct ScriptContext *ctx) +bool8 ScrCmd_waitmessage(struct ScriptContext *ctx) { SetupNativeScript(ctx, IsFieldMessageBoxHidden); return TRUE; } -bool8 ScrCmd_closebutton(struct ScriptContext *ctx) +bool8 ScrCmd_closemessage(struct ScriptContext *ctx) { HideFieldMessageBox(); return FALSE; @@ -1307,7 +1307,7 @@ bool8 ScrCmd_multichoice(struct ScriptContext *ctx) } } -bool8 ScrCmd_multichoicedef(struct ScriptContext *ctx) +bool8 ScrCmd_multichoicedefault(struct ScriptContext *ctx) { u8 left = ScriptReadByte(ctx); u8 top = ScriptReadByte(ctx); @@ -1326,7 +1326,7 @@ bool8 ScrCmd_multichoicedef(struct ScriptContext *ctx) } } -bool8 ScrCmd_showbox(struct ScriptContext *ctx) +bool8 ScrCmd_drawbox(struct ScriptContext *ctx) { u8 left = ScriptReadByte(ctx); u8 top = ScriptReadByte(ctx); @@ -1337,7 +1337,7 @@ bool8 ScrCmd_showbox(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_multichoicerow(struct ScriptContext *ctx) +bool8 ScrCmd_multichoicegrid(struct ScriptContext *ctx) { u8 left = ScriptReadByte(ctx); u8 top = ScriptReadByte(ctx); @@ -1356,7 +1356,7 @@ bool8 ScrCmd_multichoicerow(struct ScriptContext *ctx) } } -bool8 ScrCmd_hidebox(struct ScriptContext *ctx) +bool8 ScrCmd_erasebox(struct ScriptContext *ctx) { u8 left = ScriptReadByte(ctx); u8 top = ScriptReadByte(ctx); @@ -1368,7 +1368,7 @@ bool8 ScrCmd_hidebox(struct ScriptContext *ctx) } // unused -bool8 ScrCmd_clearbox(struct ScriptContext *ctx) +bool8 ScrCmd_drawboxtext(struct ScriptContext *ctx) { u8 left = ScriptReadByte(ctx); u8 top = ScriptReadByte(ctx); @@ -1386,7 +1386,7 @@ bool8 ScrCmd_clearbox(struct ScriptContext *ctx) } } -bool8 ScrCmd_showpokepic(struct ScriptContext *ctx) +bool8 ScrCmd_drawpokepic(struct ScriptContext *ctx) { u16 species = VarGet(ScriptReadHalfword(ctx)); u8 x = ScriptReadByte(ctx); @@ -1396,7 +1396,7 @@ bool8 ScrCmd_showpokepic(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_hidepokepic(struct ScriptContext *ctx) +bool8 ScrCmd_erasepokepic(struct ScriptContext *ctx) { bool8 (*func)(void) = ScriptMenu_GetPicboxWaitFunc(); @@ -1406,7 +1406,7 @@ bool8 ScrCmd_hidepokepic(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx) +bool8 ScrCmd_drawcontestwinner(struct ScriptContext *ctx) { u8 v1 = ScriptReadByte(ctx); @@ -1545,7 +1545,7 @@ bool8 ScrCmd_vbuffer(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_givepokemon(struct ScriptContext *ctx) +bool8 ScrCmd_givepoke(struct ScriptContext *ctx) { u16 species = VarGet(ScriptReadHalfword(ctx)); u8 level = ScriptReadByte(ctx); @@ -1576,7 +1576,7 @@ bool8 ScrCmd_setpokemove(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_checkattack(struct ScriptContext *ctx) +bool8 ScrCmd_checkpokemove(struct ScriptContext *ctx) { u8 i; u16 moveId = ScriptReadHalfword(ctx); -- cgit v1.2.3 From 37b891cbd49780d63fe2295add70bf003c59de48 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 30 Sep 2017 16:48:30 -0700 Subject: Add missing extern to included texts --- include/trade.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/trade.h b/include/trade.h index a44388506..f950aca53 100644 --- a/include/trade.h +++ b/include/trade.h @@ -14,9 +14,9 @@ struct SomeTradeStruct extern struct SomeTradeStruct* gUnknown_03004828; -const u8 gOtherText_MaleSymbol3[1]; -const u8 gOtherText_FemaleSymbol3[1]; -const u8 gOtherText_GenderlessSymbol[1]; +extern const u8 gOtherText_MaleSymbol3[1]; +extern const u8 gOtherText_FemaleSymbol3[1]; +extern const u8 gOtherText_GenderlessSymbol[1]; void sub_804E22C(void); -- cgit v1.2.3 From bc993e8e2a49aa00e7d1f825bbd8f803d4563922 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 30 Sep 2017 19:50:32 -0500 Subject: clean up sound_check_menu.c --- src/sound_check_menu.c | 2361 ++++++++++++++++++++++-------------------------- 1 file changed, 1080 insertions(+), 1281 deletions(-) diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index d97ae6d86..438d8bd76 100644 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -92,1062 +92,258 @@ void sub_80BB25C(u8); void sub_80BB3B4(u8); void sub_80BB494(void); -static const u8 gDebugText_SoundCheckJap[] = _("サウンドチェック"); -static const u8 gDebugText_BGM[] = _("BGM"); -static const u8 gDebugText_SE[] = _("SE "); -static const u8 gDebugText_ABDesc[] = _("A‥さいせい B‥おわり"); -static const u8 gDebugText_UpDown[] = _("L‥UP R‥DOWN"); -static const u8 gDebugText_DriverTest[] = _("R‥DRIVER-TEST"); +void sub_80BA0A8(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} -// ideally this should be a multi Coords8 struct, but it wont match when its treated like a struct. -static const u8 gUnknown_083D0300[] = { 1, 1, 1, 3, 1, 5, 1, 7, 1, 9, 1, 11, 1, 13, 1, 15, 1, 17 }; +void sub_80BA0C0(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + + if (gUnknown_020387B0 != 0) + { + m4aSoundMain(); + m4aSoundMain(); + m4aSoundMain(); + } +} -static const u8 gDebugText_BBack[] = _("Bぼたんで もどる"); -static const u8 gDebugText_APlay[] = _("Aぼたんで さいせい"); -static const u8 gDebugText_Voice[] = _("VOICE‥‥‥‥"); -static const u8 gDebugText_Volume[] = _("VOLUME‥‥‥"); -static const u8 gDebugText_Panpot[] = _("PANPOT‥‥‥"); -static const u8 gDebugText_Pitch[] = _("PITCH‥‥‥‥"); -static const u8 gDebugText_Length[] = _("LENGTH‥‥‥"); -static const u8 gDebugText_Release[] = _("RELEASE‥‥"); -static const u8 gDebugText_Progress[] = _("PROGRESS‥"); -static const u8 gDebugText_Chorus[] = _("CHORUS‥‥‥"); -static const u8 gDebugText_Priority[] = _("PRIORITY‥"); -static const u8 gDebugText_Playing[] = _("さいせいちゆう‥"); // 再生中 (playing) -static const u8 gDebugText_Reverse[] = _("はんてん‥‥‥‥"); // 反転 (reverse) -static const u8 gDebugText_Stereo[] = _("すてれお‥‥‥‥"); // stereo - -// also ideally should be a MinMax struct, but any attempt to make this into a struct causes it to not match due to the weird multi dim access. -static const int gUnknown_083D039C[16] = +// unused +void CB2_StartSoundCheckMenu(void) { - 0, 387, - 0, 127, - -127, 127, - -128, 32639, - 0, 65535, - 0, 255, - 0, 65535, - -64, 63 -}; + u8 taskId; -static const u8 gUnknown_083D03DC[] = _("▶"); -static const u8 gUnknown_083D03DE[] = _(" "); + SetVBlankCallback(NULL); + REG_DISPCNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT, PLTT_SIZE); + ResetPaletteFade(); + ResetTasks(); + ResetSpriteData(); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + REG_WIN0H = WIN_RANGE(0, 0); + REG_WIN0V = WIN_RANGE(0, 0); + REG_WIN1H = WIN_RANGE(0, 0); + REG_WIN1V = WIN_RANGE(0, 0); + REG_WININ = 0x1111; + REG_WINOUT = 0x31; + REG_BLDCNT = 0xE1; + REG_BLDALPHA = 0; + REG_BLDY = 7; + REG_IE = 1; // could be a typo of REG_IME + REG_IE |= 1; + REG_DISPSTAT |= 8; + SetVBlankCallback(sub_80BA0C0); + SetMainCallback2(sub_80BA0A8); + REG_DISPCNT = 0x7140; + taskId = CreateTask(sub_80BA258, 0); + gTasks[taskId].WINDOW_SELECTED = BGM_WINDOW; + gTasks[taskId].BGM_INDEX = 0; + gTasks[taskId].SE_INDEX = 0; + gTasks[taskId].UNK_DATA3 = 0; + gUnknown_020387B0 = 0; + gTasks[taskId].UNK_DATA3 = 0; // why? + m4aSoundInit(); +} -// why not just use Powers of ten from string_util? -static const int gUnknown_083D03E0[6] = +// Task_InitSoundCheckMenu +void sub_80BA258(u8 taskId) { - 1, - 10, - 100, - 1000, - 10000, - 100000 -}; + u8 soundcheckStr[] = _("サウンドチェック"); + u8 bgmStr[] = _("BGM"); + u8 seStr[] = _("SE "); + u8 abDescStr[] = _("A‥さいせい B‥おわり"); + u8 upDownStr[] = _("L‥UP R‥DOWN"); + u8 driverStr[] = _("R‥DRIVER-TEST"); + + if (!gPaletteFade.active) + { + MenuDrawTextWindow(0x2, 0, 0x1B, 0x3); + MenuDrawTextWindow(0x2, 0x5, 0x1B, 0xA); + MenuDrawTextWindow(0x2, 0xC, 0x1B, 0x11); + MenuPrint(soundcheckStr, 4, 1); + MenuPrint(abDescStr, 14, 1); + MenuPrint(bgmStr, 4, 6); + MenuPrint(upDownStr, 14, 6); + MenuPrint(seStr, 4, 13); + MenuPrint(upDownStr, 14, 13); + MenuPrint(driverStr, 14, 18); + gTasks[taskId].FUNC = sub_80BA384; + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(1, 31); + } +} -static const s8 gUnknown_083D03F8[5] = { 0x3F, 0x00, 0xC0, 0x7F, 0x80 }; +// ideally this should be a multi Coords8 struct, but it wont match when its treated like a struct. +static const u8 gUnknown_083D0300[] = { 1, 1, 1, 3, 1, 5, 1, 7, 1, 9, 1, 11, 1, 13, 1, 15, 1, 17 }; -static const u8 gOtherText_SE[] = _("SE"); -static const u8 gOtherText_Pan[] = _("PAN"); -static const u8 gOtherText_LR[] = _(" LR"); -static const u8 gOtherText_RL[] = _(" RL"); +extern const u8 *const gBGMNames[]; +extern const u8 *const gSENames[]; -// bgm names -static const u8 BGMName_STOP[] = _("STOP"); -static const u8 BGMName_TETSUJI[] = _("TETSUJI"); -static const u8 BGMName_FIELD13[] = _("FIELD13"); -static const u8 BGMName_KACHI22[] = _("KACHI22"); -static const u8 BGMName_KACHI2[] = _("KACHI2"); -static const u8 BGMName_KACHI3[] = _("KACHI3"); -static const u8 BGMName_KACHI5[] = _("KACHI5"); -static const u8 BGMName_PCC[] = _("PCC"); -static const u8 BGMName_NIBI[] = _("NIBI"); -static const u8 BGMName_SUIKUN[] = _("SUIKUN"); -static const u8 BGMName_DOORO1[] = _("DOORO1"); -static const u8 BGMName_DOORO_X1[] = _("DOORO-X1"); -static const u8 BGMName_DOORO_X3[] = _("DOORO-X3"); -static const u8 BGMName_MACHI_S2[] = _("MACHI-S2"); -static const u8 BGMName_MACHI_S4[] = _("MACHI-S4"); -static const u8 BGMName_GIM[] = _("GIM"); -static const u8 BGMName_NAMINORI[] = _("NAMINORI"); -static const u8 BGMName_DAN01[] = _("DAN01"); -static const u8 BGMName_FANFA1[] = _("FANFA1"); -static const u8 BGMName_ME_ASA[] = _("ME-ASA"); -static const u8 BGMName_ME_BACHI[] = _("ME-BACHI"); -static const u8 BGMName_FANFA4[] = _("FANFA4"); -static const u8 BGMName_FANFA5[] = _("FANFA5"); -static const u8 BGMName_ME_WAZA[] = _("ME-WAZA"); -static const u8 BGMName_BIJYUTU[] = _("BIJYUTU"); -static const u8 BGMName_DOORO_X4[] = _("DOORO-X4"); -static const u8 BGMName_FUNE_KAN[] = _("FUNE-KAN"); -static const u8 BGMName_ME_SHINKA[] = _("ME-SHINKA"); -static const u8 BGMName_SHINKA[] = _("SHINKA"); -static const u8 BGMName_ME_WASURE[] = _("ME-WASURE"); -static const u8 BGMName_SYOUJOEYE[] = _("SYOUJOEYE"); -static const u8 BGMName_BOYEYE[] = _("BOYEYE"); -static const u8 BGMName_DAN02[] = _("DAN02"); -static const u8 BGMName_MACHI_S3[] = _("MACHI-S3"); -static const u8 BGMName_ODAMAKI[] = _("ODAMAKI"); -static const u8 BGMName_B_TOWER[] = _("B-TOWER"); -static const u8 BGMName_SWIMEYE[] = _("SWIMEYE"); -static const u8 BGMName_DAN03[] = _("DAN03"); -static const u8 BGMName_ME_KINOMI[] = _("ME-KINOMI"); -static const u8 BGMName_ME_TAMA[] = _("ME-TAMA"); -static const u8 BGMName_ME_B_BIG[] = _("ME-B-BIG"); -static const u8 BGMName_ME_B_SMALL[] = _("ME-B-SMALL"); -static const u8 BGMName_ME_ZANNEN[] = _("ME-ZANNEN"); -static const u8 BGMName_BD_TIME[] = _("BD-TIME"); -static const u8 BGMName_TEST1[] = _("TEST1"); -static const u8 BGMName_TEST2[] = _("TEST2"); -static const u8 BGMName_TEST3[] = _("TEST3"); -static const u8 BGMName_TEST4[] = _("TEST4"); -static const u8 BGMName_TEST[] = _("TEST"); -static const u8 BGMName_GOMACHI0[] = _("GOMACHI0"); -static const u8 BGMName_GOTOWN[] = _("GOTOWN"); -static const u8 BGMName_POKECEN[] = _("POKECEN"); -static const u8 BGMName_NEXTROAD[] = _("NEXTROAD"); -static const u8 BGMName_GRANROAD[] = _("GRANROAD"); -static const u8 BGMName_CYCLING[] = _("CYCLING"); -static const u8 BGMName_FRIENDLY[] = _("FRIENDLY"); -static const u8 BGMName_MISHIRO[] = _("MISHIRO"); -static const u8 BGMName_TOZAN[] = _("TOZAN"); -static const u8 BGMName_GIRLEYE[] = _("GIRLEYE"); -static const u8 BGMName_MINAMO[] = _("MINAMO"); -static const u8 BGMName_ASHROAD[] = _("ASHROAD"); -static const u8 BGMName_EVENT0[] = _("EVENT0"); -static const u8 BGMName_DEEPDEEP[] = _("DEEPDEEP"); -static const u8 BGMName_KACHI1[] = _("KACHI1"); -static const u8 BGMName_TITLE3[] = _("TITLE3"); -static const u8 BGMName_DEMO1[] = _("DEMO1"); -static const u8 BGMName_GIRL_SUP[] = _("GIRL-SUP"); -static const u8 BGMName_HAGESHII[] = _("HAGESHII"); -static const u8 BGMName_KAKKOII[] = _("KAKKOII"); -static const u8 BGMName_KAZANBAI[] = _("KAZANBAI"); -static const u8 BGMName_AQA_0[] = _("AQA-0"); -static const u8 BGMName_TSURETEK[] = _("TSURETEK"); -static const u8 BGMName_BOY_SUP[] = _("BOY-SUP"); -static const u8 BGMName_RAINBOW[] = _("RAINBOW"); -static const u8 BGMName_AYASII[] = _("AYASII"); -static const u8 BGMName_KACHI4[] = _("KACHI4"); -static const u8 BGMName_ROPEWAY[] = _("ROPEWAY"); -static const u8 BGMName_CASINO[] = _("CASINO"); -static const u8 BGMName_HIGHTOWN[] = _("HIGHTOWN"); -static const u8 BGMName_SAFARI[] = _("SAFARI"); -static const u8 BGMName_C_ROAD[] = _("C-ROAD"); -static const u8 BGMName_AJITO[] = _("AJITO"); -static const u8 BGMName_M_BOAT[] = _("M-BOAT"); -static const u8 BGMName_M_DUNGON[] = _("M-DUNGON"); -static const u8 BGMName_FINECITY[] = _("FINECITY"); -static const u8 BGMName_MACHUPI[] = _("MACHUPI"); -static const u8 BGMName_P_SCHOOL[] = _("P-SCHOOL"); -static const u8 BGMName_DENDOU[] = _("DENDOU"); -static const u8 BGMName_TONEKUSA[] = _("TONEKUSA"); -static const u8 BGMName_MABOROSI[] = _("MABOROSI"); -static const u8 BGMName_CON_FAN[] = _("CON-FAN"); -static const u8 BGMName_CONTEST0[] = _("CONTEST0"); -static const u8 BGMName_MGM0[] = _("MGM0"); -static const u8 BGMName_T_BATTLE[] = _("T-BATTLE"); -static const u8 BGMName_OOAME[] = _("OOAME"); -static const u8 BGMName_HIDERI[] = _("HIDERI"); -static const u8 BGMName_RUNECITY[] = _("RUNECITY"); -static const u8 BGMName_CON_K[] = _("CON-K"); -static const u8 BGMName_EIKOU_R[] = _("EIKOU-R"); -static const u8 BGMName_KARAKURI[] = _("KARAKURI"); -static const u8 BGMName_HUTAGO[] = _("HUTAGO"); -static const u8 BGMName_SITENNOU[] = _("SITENNOU"); -static const u8 BGMName_YAMA_EYE[] = _("YAMA-EYE"); -static const u8 BGMName_CONLOBBY[] = _("CONLOBBY"); -static const u8 BGMName_INTER_V[] = _("INTER-V"); -static const u8 BGMName_DAIGO[] = _("DAIGO"); -static const u8 BGMName_THANKFOR[] = _("THANKFOR"); -static const u8 BGMName_END[] = _("END"); -static const u8 BGMName_BATTLE27[] = _("BATTLE27"); -static const u8 BGMName_BATTLE31[] = _("BATTLE31"); -static const u8 BGMName_BATTLE20[] = _("BATTLE20"); -static const u8 BGMName_BATTLE32[] = _("BATTLE32"); -static const u8 BGMName_BATTLE33[] = _("BATTLE33"); -static const u8 BGMName_BATTLE36[] = _("BATTLE36"); -static const u8 BGMName_BATTLE34[] = _("BATTLE34"); -static const u8 BGMName_BATTLE35[] = _("BATTLE35"); -static const u8 BGMName_BATTLE38[] = _("BATTLE38"); -static const u8 BGMName_BATTLE30[] = _("BATTLE30"); +void sub_80BA384(u8 taskId) // Task_HandleDrawingSoundCheckMenuText +{ + sub_80BA6B8(gTasks[taskId].WINDOW_SELECTED); + sub_80BA700(gTasks[taskId].BGM_INDEX + BGM_STOP, 7, 8); // print by BGM index + sub_80BA79C(gBGMNames[gTasks[taskId].BGM_INDEX], 11, 8); + sub_80BA700(gTasks[taskId].SE_INDEX, 7, 15); + sub_80BA79C(gSENames[gTasks[taskId].SE_INDEX], 11, 15); + gTasks[taskId].FUNC = sub_80BA65C; +} -static const u8 *const gBGMNames[] = +#ifdef NONMATCHING +bool8 sub_80BA400(u8 taskId) // Task_ProcessSoundCheckMenuInput { - BGMName_STOP, - BGMName_TETSUJI, - BGMName_FIELD13, - BGMName_KACHI22, - BGMName_KACHI2, - BGMName_KACHI3, - BGMName_KACHI5, - BGMName_PCC, - BGMName_NIBI, - BGMName_SUIKUN, - BGMName_DOORO1, - BGMName_DOORO_X1, - BGMName_DOORO_X3, - BGMName_MACHI_S2, - BGMName_MACHI_S4, - BGMName_GIM, - BGMName_NAMINORI, - BGMName_DAN01, - BGMName_FANFA1, - BGMName_ME_ASA, - BGMName_ME_BACHI, - BGMName_FANFA4, - BGMName_FANFA5, - BGMName_ME_WAZA, - BGMName_BIJYUTU, - BGMName_DOORO_X4, - BGMName_FUNE_KAN, - BGMName_ME_SHINKA, - BGMName_SHINKA, - BGMName_ME_WASURE, - BGMName_SYOUJOEYE, - BGMName_BOYEYE, - BGMName_DAN02, - BGMName_MACHI_S3, - BGMName_ODAMAKI, - BGMName_B_TOWER, - BGMName_SWIMEYE, - BGMName_DAN03, - BGMName_ME_KINOMI, - BGMName_ME_TAMA, - BGMName_ME_B_BIG, - BGMName_ME_B_SMALL, - BGMName_ME_ZANNEN, - BGMName_BD_TIME, - BGMName_TEST1, - BGMName_TEST2, - BGMName_TEST3, - BGMName_TEST4, - BGMName_TEST, - BGMName_GOMACHI0, - BGMName_GOTOWN, - BGMName_POKECEN, - BGMName_NEXTROAD, - BGMName_GRANROAD, - BGMName_CYCLING, - BGMName_FRIENDLY, - BGMName_MISHIRO, - BGMName_TOZAN, - BGMName_GIRLEYE, - BGMName_MINAMO, - BGMName_ASHROAD, - BGMName_EVENT0, - BGMName_DEEPDEEP, - BGMName_KACHI1, - BGMName_TITLE3, - BGMName_DEMO1, - BGMName_GIRL_SUP, - BGMName_HAGESHII, - BGMName_KAKKOII, - BGMName_KAZANBAI, - BGMName_AQA_0, - BGMName_TSURETEK, - BGMName_BOY_SUP, - BGMName_RAINBOW, - BGMName_AYASII, - BGMName_KACHI4, - BGMName_ROPEWAY, - BGMName_CASINO, - BGMName_HIGHTOWN, - BGMName_SAFARI, - BGMName_C_ROAD, - BGMName_AJITO, - BGMName_M_BOAT, - BGMName_M_DUNGON, - BGMName_FINECITY, - BGMName_MACHUPI, - BGMName_P_SCHOOL, - BGMName_DENDOU, - BGMName_TONEKUSA, - BGMName_MABOROSI, - BGMName_CON_FAN, - BGMName_CONTEST0, - BGMName_MGM0, - BGMName_T_BATTLE, - BGMName_OOAME, - BGMName_HIDERI, - BGMName_RUNECITY, - BGMName_CON_K, - BGMName_EIKOU_R, - BGMName_KARAKURI, - BGMName_HUTAGO, - BGMName_SITENNOU, - BGMName_YAMA_EYE, - BGMName_CONLOBBY, - BGMName_INTER_V, - BGMName_DAIGO, - BGMName_THANKFOR, - BGMName_END, - BGMName_BATTLE27, - BGMName_BATTLE31, - BGMName_BATTLE20, - BGMName_BATTLE32, - BGMName_BATTLE33, - BGMName_BATTLE36, - BGMName_BATTLE34, - BGMName_BATTLE35, - BGMName_BATTLE38, - BGMName_BATTLE30 -}; - -// SE names -static const u8 SEName_STOP[] = _("STOP"); -static const u8 SEName_KAIFUKU[] = _("KAIFUKU"); -static const u8 SEName_PC_LOGON[] = _("PC-LOGON"); -static const u8 SEName_PC_OFF[] = _("PC-OFF"); -static const u8 SEName_PC_ON[] = _("PC-ON"); -static const u8 SEName_SELECT[] = _("SELECT"); -static const u8 SEName_WIN_OPEN[] = _("WIN-OPEN"); -static const u8 SEName_WALL_HIT[] = _("WALL-HIT"); -static const u8 SEName_DOOR[] = _("DOOR"); -static const u8 SEName_KAIDAN[] = _("KAIDAN"); -static const u8 SEName_DANSA[] = _("DANSA"); -static const u8 SEName_JITENSYA[] = _("JITENSYA"); -static const u8 SEName_KOUKA_L[] = _("KOUKA-L"); -static const u8 SEName_KOUKA_M[] = _("KOUKA-M"); -static const u8 SEName_KOUKA_H[] = _("KOUKA-H"); -static const u8 SEName_BOWA2[] = _("BOWA2"); -static const u8 SEName_POKE_DEAD[] = _("POKE-DEAD"); -static const u8 SEName_NIGERU[] = _("NIGERU"); -static const u8 SEName_JIDO_DOA[] = _("JIDO-DOA"); -static const u8 SEName_NAMINORI[] = _("NAMINORI"); -static const u8 SEName_BAN[] = _("BAN"); -static const u8 SEName_PIN[] = _("PIN"); -static const u8 SEName_BOO[] = _("BOO"); -static const u8 SEName_BOWA[] = _("BOWA"); -static const u8 SEName_JYUNI[] = _("JYUNI"); -static const u8 SEName_A[] = _("A"); -static const u8 SEName_I[] = _("I"); -static const u8 SEName_U[] = _("U"); -static const u8 SEName_E[] = _("E"); -static const u8 SEName_O[] = _("O"); -static const u8 SEName_N[] = _("N"); -static const u8 SEName_SEIKAI[] = _("SEIKAI"); -static const u8 SEName_HAZURE[] = _("HAZURE"); -static const u8 SEName_EXP[] = _("EXP"); -static const u8 SEName_JITE_PYOKO[] = _("JITE-PYOKO"); -static const u8 SEName_MU_PACHI[] = _("MU-PACHI"); -static const u8 SEName_TK_KASYA[] = _("TK-KASYA"); -static const u8 SEName_FU_ZAKU[] = _("FU-ZAKU"); -static const u8 SEName_FU_ZAKU2[] = _("FU-ZAKU2"); -static const u8 SEName_FU_ZUZUZU[] = _("FU-ZUZUZU"); -static const u8 SEName_RU_GASHIN[] = _("RU-GASHIN"); -static const u8 SEName_RU_GASYAN[] = _("RU-GASYAN"); -static const u8 SEName_RU_BARI[] = _("RU-BARI"); -static const u8 SEName_RU_HYUU[] = _("RU-HYUU"); -static const u8 SEName_KI_GASYAN[] = _("KI-GASYAN"); -static const u8 SEName_TK_WARPIN[] = _("TK-WARPIN"); -static const u8 SEName_TK_WARPOUT[] = _("TK-WARPOUT"); -static const u8 SEName_TU_SAA[] = _("TU-SAA"); -static const u8 SEName_HI_TURUN[] = _("HI-TURUN"); -static const u8 SEName_TRACK_MOVE[] = _("TRACK-MOVE"); -static const u8 SEName_TRACK_STOP[] = _("TRACK-STOP"); -static const u8 SEName_TRACK_HAIK[] = _("TRACK-HAIK"); -static const u8 SEName_TRACK_DOOR[] = _("TRACK-DOOR"); -static const u8 SEName_MOTER[] = _("MOTER"); -static const u8 SEName_CARD[] = _("CARD"); -static const u8 SEName_SAVE[] = _("SAVE"); -static const u8 SEName_KON[] = _("KON"); -static const u8 SEName_KON2[] = _("KON2"); -static const u8 SEName_KON3[] = _("KON3"); -static const u8 SEName_KON4[] = _("KON4"); -static const u8 SEName_SUIKOMU[] = _("SUIKOMU"); -static const u8 SEName_NAGERU[] = _("NAGERU"); -static const u8 SEName_TOY_C[] = _("TOY-C"); -static const u8 SEName_TOY_D[] = _("TOY-D"); -static const u8 SEName_TOY_E[] = _("TOY-E"); -static const u8 SEName_TOY_F[] = _("TOY-F"); -static const u8 SEName_TOY_G[] = _("TOY-G"); -static const u8 SEName_TOY_A[] = _("TOY-A"); -static const u8 SEName_TOY_B[] = _("TOY-B"); -static const u8 SEName_TOY_C1[] = _("TOY-C1"); -static const u8 SEName_MIZU[] = _("MIZU"); -static const u8 SEName_HASHI[] = _("HASHI"); -static const u8 SEName_DAUGI[] = _("DAUGI"); -static const u8 SEName_PINPON[] = _("PINPON"); -static const u8 SEName_FUUSEN1[] = _("FUUSEN1"); -static const u8 SEName_FUUSEN2[] = _("FUUSEN2"); -static const u8 SEName_FUUSEN3[] = _("FUUSEN3"); -static const u8 SEName_TOY_KABE[] = _("TOY-KABE"); -static const u8 SEName_TOY_DANGO[] = _("TOY-DANGO"); -static const u8 SEName_DOKU[] = _("DOKU"); -static const u8 SEName_ESUKA[] = _("ESUKA"); -static const u8 SEName_T_AME[] = _("T-AME"); -static const u8 SEName_T_AME_E[] = _("T-AME-E"); -static const u8 SEName_T_OOAME[] = _("T-OOAME"); -static const u8 SEName_T_OOAME_E[] = _("T-OOAME-E"); -static const u8 SEName_T_KOAME[] = _("T-KOAME"); -static const u8 SEName_T_KOAME_E[] = _("T-KOAME-E"); -static const u8 SEName_T_KAMI[] = _("T-KAMI"); -static const u8 SEName_T_KAMI2[] = _("T-KAMI2"); -static const u8 SEName_ELEBETA[] = _("ELEBETA"); -static const u8 SEName_HINSI[] = _("HINSI"); -static const u8 SEName_EXPMAX[] = _("EXPMAX"); -static const u8 SEName_TAMAKORO[] = _("TAMAKORO"); -static const u8 SEName_TAMAKORO_E[] = _("TAMAKORO-E"); -static const u8 SEName_BASABASA[] = _("BASABASA"); -static const u8 SEName_REGI[] = _("REGI"); -static const u8 SEName_C_GAJI[] = _("C-GAJI"); -static const u8 SEName_C_MAKU_U[] = _("C-MAKU-U"); -static const u8 SEName_C_MAKU_D[] = _("C-MAKU-D"); -static const u8 SEName_C_PASI[] = _("C-PASI"); -static const u8 SEName_C_SYU[] = _("C-SYU"); -static const u8 SEName_C_PIKON[] = _("C-PIKON"); -static const u8 SEName_REAPOKE[] = _("REAPOKE"); -static const u8 SEName_OP_BASYU[] = _("OP-BASYU"); -static const u8 SEName_BT_START[] = _("BT-START"); -static const u8 SEName_DENDOU[] = _("DENDOU"); -static const u8 SEName_JIHANKI[] = _("JIHANKI"); -static const u8 SEName_TAMA[] = _("TAMA"); -static const u8 SEName_Z_SCROLL[] = _("Z-SCROLL"); -static const u8 SEName_Z_PAGE[] = _("Z-PAGE"); -static const u8 SEName_PN_ON[] = _("PN-ON"); -static const u8 SEName_PN_OFF[] = _("PN-OFF"); -static const u8 SEName_Z_SEARCH[] = _("Z-SEARCH"); -static const u8 SEName_TAMAGO[] = _("TAMAGO"); -static const u8 SEName_TB_START[] = _("TB-START"); -static const u8 SEName_TB_KON[] = _("TB-KON"); -static const u8 SEName_TB_KARA[] = _("TB-KARA"); -static const u8 SEName_BIDORO[] = _("BIDORO"); -static const u8 SEName_W085[] = _("W085"); -static const u8 SEName_W085B[] = _("W085B"); -static const u8 SEName_W231[] = _("W231"); -static const u8 SEName_W171[] = _("W171"); -static const u8 SEName_W233[] = _("W233"); -static const u8 SEName_W233B[] = _("W233B"); -static const u8 SEName_W145[] = _("W145"); -static const u8 SEName_W145B[] = _("W145B"); -static const u8 SEName_W145C[] = _("W145C"); -static const u8 SEName_W240[] = _("W240"); -static const u8 SEName_W015[] = _("W015"); -static const u8 SEName_W081[] = _("W081"); -static const u8 SEName_W081B[] = _("W081B"); -static const u8 SEName_W088[] = _("W088"); -static const u8 SEName_W016[] = _("W016"); -static const u8 SEName_W016B[] = _("W016B"); -static const u8 SEName_W003[] = _("W003"); -static const u8 SEName_W104[] = _("W104"); -static const u8 SEName_W013[] = _("W013"); -static const u8 SEName_W196[] = _("W196"); -static const u8 SEName_W086[] = _("W086"); -static const u8 SEName_W004[] = _("W004"); -static const u8 SEName_W025[] = _("W025"); -static const u8 SEName_W025B[] = _("W025B"); -static const u8 SEName_W152[] = _("W152"); -static const u8 SEName_W026[] = _("W026"); -static const u8 SEName_W172[] = _("W172"); -static const u8 SEName_W172B[] = _("W172B"); -static const u8 SEName_W053[] = _("W053"); -static const u8 SEName_W007[] = _("W007"); -static const u8 SEName_W092[] = _("W092"); -static const u8 SEName_W221[] = _("W221"); -static const u8 SEName_W221B[] = _("W221B"); -static const u8 SEName_W052[] = _("W052"); -static const u8 SEName_W036[] = _("W036"); -static const u8 SEName_W059[] = _("W059"); -static const u8 SEName_W059B[] = _("W059B"); -static const u8 SEName_W010[] = _("W010"); -static const u8 SEName_W011[] = _("W011"); -static const u8 SEName_W017[] = _("W017"); -static const u8 SEName_W019[] = _("W019"); -static const u8 SEName_W028[] = _("W028"); -static const u8 SEName_W013B[] = _("W013B"); -static const u8 SEName_W044[] = _("W044"); -static const u8 SEName_W029[] = _("W029"); -static const u8 SEName_W057[] = _("W057"); -static const u8 SEName_W056[] = _("W056"); -static const u8 SEName_W250[] = _("W250"); -static const u8 SEName_W030[] = _("W030"); -static const u8 SEName_W039[] = _("W039"); -static const u8 SEName_W054[] = _("W054"); -static const u8 SEName_W077[] = _("W077"); -static const u8 SEName_W020[] = _("W020"); -static const u8 SEName_W082[] = _("W082"); -static const u8 SEName_W047[] = _("W047"); -static const u8 SEName_W195[] = _("W195"); -static const u8 SEName_W006[] = _("W006"); -static const u8 SEName_W091[] = _("W091"); -static const u8 SEName_W146[] = _("W146"); -static const u8 SEName_W120[] = _("W120"); -static const u8 SEName_W153[] = _("W153"); -static const u8 SEName_W071B[] = _("W071B"); -static const u8 SEName_W071[] = _("W071"); -static const u8 SEName_W103[] = _("W103"); -static const u8 SEName_W062[] = _("W062"); -static const u8 SEName_W062B[] = _("W062B"); -static const u8 SEName_W048[] = _("W048"); -static const u8 SEName_W187[] = _("W187"); -static const u8 SEName_W118[] = _("W118"); -static const u8 SEName_W155[] = _("W155"); -static const u8 SEName_W122[] = _("W122"); -static const u8 SEName_W060[] = _("W060"); -static const u8 SEName_W185[] = _("W185"); -static const u8 SEName_W014[] = _("W014"); -static const u8 SEName_W043[] = _("W043"); -static const u8 SEName_W207[] = _("W207"); -static const u8 SEName_W207B[] = _("W207B"); -static const u8 SEName_W215[] = _("W215"); -static const u8 SEName_W109[] = _("W109"); -static const u8 SEName_W173[] = _("W173"); -static const u8 SEName_W280[] = _("W280"); -static const u8 SEName_W202[] = _("W202"); -static const u8 SEName_W060B[] = _("W060B"); -static const u8 SEName_W076[] = _("W076"); -static const u8 SEName_W080[] = _("W080"); -static const u8 SEName_W100[] = _("W100"); -static const u8 SEName_W107[] = _("W107"); -static const u8 SEName_W166[] = _("W166"); -static const u8 SEName_W129[] = _("W129"); -static const u8 SEName_W115[] = _("W115"); -static const u8 SEName_W112[] = _("W112"); -static const u8 SEName_W197[] = _("W197"); -static const u8 SEName_W199[] = _("W199"); -static const u8 SEName_W236[] = _("W236"); -static const u8 SEName_W204[] = _("W204"); -static const u8 SEName_W268[] = _("W268"); -static const u8 SEName_W070[] = _("W070"); -static const u8 SEName_W063[] = _("W063"); -static const u8 SEName_W127[] = _("W127"); -static const u8 SEName_W179[] = _("W179"); -static const u8 SEName_W151[] = _("W151"); -static const u8 SEName_W201[] = _("W201"); -static const u8 SEName_W161[] = _("W161"); -static const u8 SEName_W161B[] = _("W161B"); -static const u8 SEName_W227[] = _("W227"); -static const u8 SEName_W227B[] = _("W227B"); -static const u8 SEName_W226[] = _("W226"); -static const u8 SEName_W208[] = _("W208"); -static const u8 SEName_W213[] = _("W213"); -static const u8 SEName_W213B[] = _("W213B"); -static const u8 SEName_W234[] = _("W234"); -static const u8 SEName_W260[] = _("W260"); -static const u8 SEName_W328[] = _("W328"); -static const u8 SEName_W320[] = _("W320"); -static const u8 SEName_W255[] = _("W255"); -static const u8 SEName_W291[] = _("W291"); -static const u8 SEName_W089[] = _("W089"); -static const u8 SEName_W239[] = _("W239"); -static const u8 SEName_W230[] = _("W230"); -static const u8 SEName_W281[] = _("W281"); -static const u8 SEName_W327[] = _("W327"); -static const u8 SEName_W287[] = _("W287"); -static const u8 SEName_W257[] = _("W257"); -static const u8 SEName_W253[] = _("W253"); -static const u8 SEName_W258[] = _("W258"); -static const u8 SEName_W322[] = _("W322"); -static const u8 SEName_W298[] = _("W298"); -static const u8 SEName_W287B[] = _("W287B"); -static const u8 SEName_W114[] = _("W114"); -static const u8 SEName_W063B[] = _("W063B"); - -static const u8 *const gSENames[] = -{ - SEName_STOP, - SEName_KAIFUKU, - SEName_PC_LOGON, - SEName_PC_OFF, - SEName_PC_ON, - SEName_SELECT, - SEName_WIN_OPEN, - SEName_WALL_HIT, - SEName_DOOR, - SEName_KAIDAN, - SEName_DANSA, - SEName_JITENSYA, - SEName_KOUKA_L, - SEName_KOUKA_M, - SEName_KOUKA_H, - SEName_BOWA2, - SEName_POKE_DEAD, - SEName_NIGERU, - SEName_JIDO_DOA, - SEName_NAMINORI, - SEName_BAN, - SEName_PIN, - SEName_BOO, - SEName_BOWA, - SEName_JYUNI, - SEName_A, - SEName_I, - SEName_U, - SEName_E, - SEName_O, - SEName_N, - SEName_SEIKAI, - SEName_HAZURE, - SEName_EXP, - SEName_JITE_PYOKO, - SEName_MU_PACHI, - SEName_TK_KASYA, - SEName_FU_ZAKU, - SEName_FU_ZAKU2, - SEName_FU_ZUZUZU, - SEName_RU_GASHIN, - SEName_RU_GASYAN, - SEName_RU_BARI, - SEName_RU_HYUU, - SEName_KI_GASYAN, - SEName_TK_WARPIN, - SEName_TK_WARPOUT, - SEName_TU_SAA, - SEName_HI_TURUN, - SEName_TRACK_MOVE, - SEName_TRACK_STOP, - SEName_TRACK_HAIK, - SEName_TRACK_DOOR, - SEName_MOTER, - SEName_CARD, - SEName_SAVE, - SEName_KON, - SEName_KON2, - SEName_KON3, - SEName_KON4, - SEName_SUIKOMU, - SEName_NAGERU, - SEName_TOY_C, - SEName_TOY_D, - SEName_TOY_E, - SEName_TOY_F, - SEName_TOY_G, - SEName_TOY_A, - SEName_TOY_B, - SEName_TOY_C1, - SEName_MIZU, - SEName_HASHI, - SEName_DAUGI, - SEName_PINPON, - SEName_FUUSEN1, - SEName_FUUSEN2, - SEName_FUUSEN3, - SEName_TOY_KABE, - SEName_TOY_DANGO, - SEName_DOKU, - SEName_ESUKA, - SEName_T_AME, - SEName_T_AME_E, - SEName_T_OOAME, - SEName_T_OOAME_E, - SEName_T_KOAME, - SEName_T_KOAME_E, - SEName_T_KAMI, - SEName_T_KAMI2, - SEName_ELEBETA, - SEName_HINSI, - SEName_EXPMAX, - SEName_TAMAKORO, - SEName_TAMAKORO_E, - SEName_BASABASA, - SEName_REGI, - SEName_C_GAJI, - SEName_C_MAKU_U, - SEName_C_MAKU_D, - SEName_C_PASI, - SEName_C_SYU, - SEName_C_PIKON, - SEName_REAPOKE, - SEName_OP_BASYU, - SEName_BT_START, - SEName_DENDOU, - SEName_JIHANKI, - SEName_TAMA, - SEName_Z_SCROLL, - SEName_Z_PAGE, - SEName_PN_ON, - SEName_PN_OFF, - SEName_Z_SEARCH, - SEName_TAMAGO, - SEName_TB_START, - SEName_TB_KON, - SEName_TB_KARA, - SEName_BIDORO, - SEName_W085, - SEName_W085B, - SEName_W231, - SEName_W171, - SEName_W233, - SEName_W233B, - SEName_W145, - SEName_W145B, - SEName_W145C, - SEName_W240, - SEName_W015, - SEName_W081, - SEName_W081B, - SEName_W088, - SEName_W016, - SEName_W016B, - SEName_W003, - SEName_W104, - SEName_W013, - SEName_W196, - SEName_W086, - SEName_W004, - SEName_W025, - SEName_W025B, - SEName_W152, - SEName_W026, - SEName_W172, - SEName_W172B, - SEName_W053, - SEName_W007, - SEName_W092, - SEName_W221, - SEName_W221B, - SEName_W052, - SEName_W036, - SEName_W059, - SEName_W059B, - SEName_W010, - SEName_W011, - SEName_W017, - SEName_W019, - SEName_W028, - SEName_W013B, - SEName_W044, - SEName_W029, - SEName_W057, - SEName_W056, - SEName_W250, - SEName_W030, - SEName_W039, - SEName_W054, - SEName_W077, - SEName_W020, - SEName_W082, - SEName_W047, - SEName_W195, - SEName_W006, - SEName_W091, - SEName_W146, - SEName_W120, - SEName_W153, - SEName_W071B, - SEName_W071, - SEName_W103, - SEName_W062, - SEName_W062B, - SEName_W048, - SEName_W187, - SEName_W118, - SEName_W155, - SEName_W122, - SEName_W060, - SEName_W185, - SEName_W014, - SEName_W043, - SEName_W207, - SEName_W207B, - SEName_W215, - SEName_W109, - SEName_W173, - SEName_W280, - SEName_W202, - SEName_W060B, - SEName_W076, - SEName_W080, - SEName_W100, - SEName_W107, - SEName_W166, - SEName_W129, - SEName_W115, - SEName_W112, - SEName_W197, - SEName_W199, - SEName_W236, - SEName_W204, - SEName_W268, - SEName_W070, - SEName_W063, - SEName_W127, - SEName_W179, - SEName_W151, - SEName_W201, - SEName_W161, - SEName_W161B, - SEName_W227, - SEName_W227B, - SEName_W226, - SEName_W208, - SEName_W213, - SEName_W213B, - SEName_W234, - SEName_W260, - SEName_W328, - SEName_W320, - SEName_W255, - SEName_W291, - SEName_W089, - SEName_W239, - SEName_W230, - SEName_W281, - SEName_W327, - SEName_W287, - SEName_W257, - SEName_W253, - SEName_W258, - SEName_W322, - SEName_W298, - SEName_W287B, - SEName_W114, - SEName_W063B -}; - -void sub_80BA0A8(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_80BA0C0(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - - if(gUnknown_020387B0 != 0) - { - m4aSoundMain(); - m4aSoundMain(); - m4aSoundMain(); - } -} - -// unused -void CB2_StartSoundCheckMenu(void) -{ - u8 taskId; - - SetVBlankCallback(NULL); - REG_DISPCNT = 0; - REG_BG2CNT = 0; - REG_BG1CNT = 0; - REG_BG0CNT = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - DmaFill16(3, 0, VRAM, VRAM_SIZE); - DmaFill32(3, 0, OAM, OAM_SIZE); - DmaFill16(3, 0, PLTT, PLTT_SIZE); - ResetPaletteFade(); - ResetTasks(); - ResetSpriteData(); - SetUpWindowConfig(&gWindowConfig_81E6C3C); - InitMenuWindow(&gWindowConfig_81E6CE4); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - REG_WIN0H = WIN_RANGE(0, 0); - REG_WIN0V = WIN_RANGE(0, 0); - REG_WIN1H = WIN_RANGE(0, 0); - REG_WIN1V = WIN_RANGE(0, 0); - REG_WININ = 0x1111; - REG_WINOUT = 0x31; - REG_BLDCNT = 0xE1; - REG_BLDALPHA = 0; - REG_BLDY = 7; - REG_IE = 1; // could be a typo of REG_IME - REG_IE |= 1; - REG_DISPSTAT |= 8; - SetVBlankCallback(sub_80BA0C0); - SetMainCallback2(sub_80BA0A8); - REG_DISPCNT = 0x7140; - taskId = CreateTask(sub_80BA258, 0); - TASK.WINDOW_SELECTED = BGM_WINDOW; - TASK.BGM_INDEX = 0; - TASK.SE_INDEX = 0; - TASK.UNK_DATA3 = 0; - gUnknown_020387B0 = 0; - TASK.UNK_DATA3 = 0; // why? - m4aSoundInit(); -} - -// Task_InitSoundCheckMenu -void sub_80BA258(u8 taskId) -{ - u8 soundcheckStr[sizeof(gDebugText_SoundCheckJap)]; - u8 bgmStr[sizeof(gDebugText_BGM)]; - u8 seStr[sizeof(gDebugText_SE)]; - u8 abDescStr[sizeof(gDebugText_ABDesc)]; - u8 upDownStr[sizeof(gDebugText_UpDown)]; - u8 driverStr[sizeof(gDebugText_DriverTest)]; - - memcpy(soundcheckStr, gDebugText_SoundCheckJap, sizeof(gDebugText_SoundCheckJap)); - memcpy(bgmStr, gDebugText_BGM, sizeof(gDebugText_BGM)); - memcpy(seStr, gDebugText_SE, sizeof(gDebugText_SE)); - memcpy(abDescStr, gDebugText_ABDesc, sizeof(gDebugText_ABDesc)); - memcpy(upDownStr, gDebugText_UpDown, sizeof(gDebugText_UpDown)); - memcpy(driverStr, gDebugText_DriverTest, sizeof(gDebugText_DriverTest)); - - if(!gPaletteFade.active) - { - MenuDrawTextWindow(0x2, 0, 0x1B, 0x3); - MenuDrawTextWindow(0x2, 0x5, 0x1B, 0xA); - MenuDrawTextWindow(0x2, 0xC, 0x1B, 0x11); - MenuPrint(soundcheckStr, 4, 1); - MenuPrint(abDescStr, 14, 1); - MenuPrint(bgmStr, 4, 6); - MenuPrint(upDownStr, 14, 6); - MenuPrint(seStr, 4, 13); - MenuPrint(upDownStr, 14, 13); - MenuPrint(driverStr, 14, 18); - TASK.FUNC = sub_80BA384; - REG_WIN0H = WIN_RANGE(17, 223); - REG_WIN0V = WIN_RANGE(1, 31); - } -} - -void sub_80BA384(u8 taskId) // Task_HandleDrawingSoundCheckMenuText -{ - sub_80BA6B8(TASK.WINDOW_SELECTED); - sub_80BA700(TASK.BGM_INDEX + BGM_STOP, 7, 8); // print by BGM index - sub_80BA79C(gBGMNames[TASK.BGM_INDEX], 11, 8); - sub_80BA700(TASK.SE_INDEX, 7, 15); - sub_80BA79C(gSENames[TASK.SE_INDEX], 11, 15); - TASK.FUNC = sub_80BA65C; -} - -#ifdef NONMATCHING -bool8 sub_80BA400(u8 taskId) // Task_ProcessSoundCheckMenuInput -{ - if(gMain.newKeys & R_BUTTON) // driver test + if (gMain.newKeys & R_BUTTON) // driver test { - TASK.FUNC = sub_80BA800; + gTasks[taskId].FUNC = sub_80BA800; return FALSE; } - if(gMain.newKeys & L_BUTTON) + if (gMain.newKeys & L_BUTTON) { - TASK.FUNC = sub_80BAF84; + gTasks[taskId].FUNC = sub_80BAF84; return FALSE; } - if(gMain.newKeys & START_BUTTON) + if (gMain.newKeys & START_BUTTON) { - TASK.FUNC = sub_80BB25C; + gTasks[taskId].FUNC = sub_80BB25C; return FALSE; } - if(gMain.newKeys & A_BUTTON) // both these cases insist on non reuses of certain data variables and cause the function to not match. + if (gMain.newKeys & A_BUTTON) // both these cases insist on non reuses of certain data variables and cause the function to not match. { - if(TASK.WINDOW_SELECTED != 0) // is playing? + if (gTasks[taskId].WINDOW_SELECTED != 0) // is playing? { - if(TASK.UNK_DATA4 != 0) + if (gTasks[taskId].UNK_DATA4 != 0) { - if(TASK.SE_INDEX != 0) // why are you insiting on a non signed halfword? + if (gTasks[taskId].SE_INDEX != 0) // why are you insiting on a non signed halfword? { - m4aSongNumStop(TASK.UNK_DATA4); + m4aSongNumStop(gTasks[taskId].UNK_DATA4); } else { - m4aSongNumStop(TASK.SE_INDEX); - TASK.UNK_DATA4 = TASK.SE_INDEX; + m4aSongNumStop(gTasks[taskId].SE_INDEX); + gTasks[taskId].UNK_DATA4 = gTasks[taskId].SE_INDEX; return FALSE; } } - else if(TASK.SE_INDEX == 0) // _080BA4BA + else if (gTasks[taskId].SE_INDEX == 0) // _080BA4BA { return FALSE; } // _080BA4C4 - m4aSongNumStart(TASK.SE_INDEX); - TASK.UNK_DATA4 = TASK.SE_INDEX; + m4aSongNumStart(gTasks[taskId].SE_INDEX); + gTasks[taskId].UNK_DATA4 = gTasks[taskId].SE_INDEX; return FALSE; } else // _080BA4D0 { - if(TASK.UNK_DATA3 != 0) + if (gTasks[taskId].UNK_DATA3 != 0) { - if(TASK.BGM_INDEX != 0) + if (gTasks[taskId].BGM_INDEX != 0) { - m4aSongNumStop(TASK.UNK_DATA3 + BGM_STOP); + m4aSongNumStop(gTasks[taskId].UNK_DATA3 + BGM_STOP); } else // _080BA500 { - m4aSongNumStop(TASK.UNK_DATA3 + BGM_STOP); - TASK.UNK_DATA3 = TASK.BGM_INDEX; + m4aSongNumStop(gTasks[taskId].UNK_DATA3 + BGM_STOP); + gTasks[taskId].UNK_DATA3 = gTasks[taskId].BGM_INDEX; return FALSE; } } - else if(TASK.BGM_INDEX == 0) // _080BA514 + else if (gTasks[taskId].BGM_INDEX == 0) // _080BA514 return FALSE; - m4aSongNumStart(TASK.BGM_INDEX + BGM_STOP); - TASK.UNK_DATA3 = TASK.BGM_INDEX; + m4aSongNumStart(gTasks[taskId].BGM_INDEX + BGM_STOP); + gTasks[taskId].UNK_DATA3 = gTasks[taskId].BGM_INDEX; } return FALSE; } - if(gMain.newKeys & B_BUTTON) + if (gMain.newKeys & B_BUTTON) { m4aSongNumStart(5); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - TASK.FUNC = sub_80BA68C; + gTasks[taskId].FUNC = sub_80BA68C; return FALSE; } - if(gMain.newAndRepeatedKeys & DPAD_UP) + if (gMain.newAndRepeatedKeys & DPAD_UP) { - TASK.data[8] ^= A_BUTTON; // huh? + gTasks[taskId].data[8] ^= A_BUTTON; // huh? return TRUE; } - if(gMain.newAndRepeatedKeys & DPAD_DOWN) + if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - TASK.data[8] ^= A_BUTTON; // huh? + gTasks[taskId].data[8] ^= A_BUTTON; // huh? return TRUE; } else { u16 keys = gMain.newAndRepeatedKeys & DPAD_RIGHT; - if(keys) + if (keys) { - if(TASK.WINDOW_SELECTED != 0) + if (gTasks[taskId].WINDOW_SELECTED != 0) { - if(TASK.SE_INDEX > 0) + if (gTasks[taskId].SE_INDEX > 0) { - TASK.SE_INDEX--; + gTasks[taskId].SE_INDEX--; } else { - TASK.SE_INDEX = 0xF7; + gTasks[taskId].SE_INDEX = 0xF7; } } - else if(TASK.BGM_INDEX > 0) + else if (gTasks[taskId].BGM_INDEX > 0) { - TASK.BGM_INDEX--; + gTasks[taskId].BGM_INDEX--; } else { - TASK.BGM_INDEX = 0x75; + gTasks[taskId].BGM_INDEX = 0x75; } return TRUE; } - if(gMain.newAndRepeatedKeys & DPAD_LEFT) + if (gMain.newAndRepeatedKeys & DPAD_LEFT) { - if(TASK.WINDOW_SELECTED != 0) + if (gTasks[taskId].WINDOW_SELECTED != 0) { - if(TASK.SE_INDEX < 0xF7) + if (gTasks[taskId].SE_INDEX < 0xF7) { - TASK.SE_INDEX++; + gTasks[taskId].SE_INDEX++; } else { - TASK.SE_INDEX = keys; // ?? + gTasks[taskId].SE_INDEX = keys; // ?? } } - else if(TASK.BGM_INDEX < 0x75) + else if (gTasks[taskId].BGM_INDEX < 0x75) { - TASK.BGM_INDEX++; + gTasks[taskId].BGM_INDEX++; return TRUE; } else { - TASK.BGM_INDEX = TASK.SE_INDEX; + gTasks[taskId].BGM_INDEX = gTasks[taskId].SE_INDEX; return TRUE; } return TRUE; } - if(gMain.heldKeys & SELECT_BUTTON) + if (gMain.heldKeys & SELECT_BUTTON) { gUnknown_020387B0 = A_BUTTON; return FALSE; @@ -1480,13 +676,13 @@ _080BA658: .4byte gUnknown_020387B0\n\ void sub_80BA65C(u8 taskId) { - if(sub_80BA400(taskId) != FALSE) - TASK.FUNC = sub_80BA384; + if (sub_80BA400(taskId) != FALSE) + gTasks[taskId].FUNC = sub_80BA384; } void sub_80BA68C(u8 taskId) { - if(!gPaletteFade.active) + if (!gPaletteFade.active) { DestroyTask(taskId); SetMainCallback2(CB2_InitTitleScreen); @@ -1495,17 +691,17 @@ void sub_80BA68C(u8 taskId) void sub_80BA6B8(u8 windowType) { - switch(windowType) + switch (windowType) { - case BGM_WINDOW: - default: - REG_WIN1H = WIN_RANGE(17, 223); - REG_WIN1V = WIN_RANGE(41, 87); - break; - case SE_WINDOW: - REG_WIN1H = WIN_RANGE(17, 223); - REG_WIN1V = WIN_RANGE(97, 143); - break; + case BGM_WINDOW: + default: + REG_WIN1H = WIN_RANGE(17, 223); + REG_WIN1V = WIN_RANGE(41, 87); + break; + case SE_WINDOW: + REG_WIN1H = WIN_RANGE(17, 223); + REG_WIN1V = WIN_RANGE(97, 143); + break; } } @@ -1516,7 +712,7 @@ void sub_80BA700(u16 soundIndex, u16 x, u16 y) // PrintSoundNumber ? bool8 someBool; u8 divisorValue; - for(i = 0; i < 3; i++) + for (i = 0; i < 3; i++) str[i] = 0; // initialize array str[3] = CHAR_ELLIPSIS; @@ -1524,14 +720,14 @@ void sub_80BA700(u16 soundIndex, u16 x, u16 y) // PrintSoundNumber ? someBool = FALSE; divisorValue = soundIndex / 100; - if(divisorValue) + if (divisorValue) { str[0] = divisorValue + CHAR_0; someBool = TRUE; } divisorValue = (soundIndex % 100) / 10; - if(divisorValue || someBool != FALSE) + if (divisorValue || someBool != FALSE) str[1] = divisorValue + CHAR_0; str[2] = ((soundIndex % 100) % 10) + CHAR_0; @@ -1543,12 +739,12 @@ void sub_80BA79C(const u8 *const string, u16 x, u16 y) u8 i; u8 str[11]; - for(i = 0; i < 11; i++) + for (i = 0; i < 11; i++) str[i] = 0; // format string. str[10] = EOS; // the above for loop formats the last element of the array unnecessarily. - for(i = 0; string[i] != EOS && i < 10; i++) + for (i = 0; string[i] != EOS && i < 10; i++) str[i] = string[i]; MenuPrint(str, x, y); @@ -1556,35 +752,21 @@ void sub_80BA79C(const u8 *const string, u16 x, u16 y) void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu { - u8 bbackStr[sizeof(gDebugText_BBack)]; - u8 aplayStr[sizeof(gDebugText_APlay)]; - u8 voiceStr[sizeof(gDebugText_Voice)]; - u8 volumeStr[sizeof(gDebugText_Volume)]; - u8 panpotStr[sizeof(gDebugText_Panpot)]; - u8 pitchStr[sizeof(gDebugText_Pitch)]; - u8 lengthStr[sizeof(gDebugText_Length)]; - u8 releaseStr[sizeof(gDebugText_Release)]; - u8 progressStr[sizeof(gDebugText_Progress)]; - u8 chorusStr[sizeof(gDebugText_Chorus)]; - u8 priorityStr[sizeof(gDebugText_Priority)]; - u8 playingStr[sizeof(gDebugText_Playing)]; - u8 reverseStr[sizeof(gDebugText_Reverse)]; - u8 stereoStr[sizeof(gDebugText_Stereo)]; - - memcpy(bbackStr, gDebugText_BBack, sizeof(gDebugText_BBack)); - memcpy(aplayStr, gDebugText_APlay, sizeof(gDebugText_APlay)); - memcpy(voiceStr, gDebugText_Voice, sizeof(gDebugText_Voice)); - memcpy(volumeStr, gDebugText_Volume, sizeof(gDebugText_Volume)); - memcpy(panpotStr, gDebugText_Panpot, sizeof(gDebugText_Panpot)); - memcpy(pitchStr, gDebugText_Pitch, sizeof(gDebugText_Pitch)); - memcpy(lengthStr, gDebugText_Length, sizeof(gDebugText_Length)); - memcpy(releaseStr, gDebugText_Release, sizeof(gDebugText_Release)); - memcpy(progressStr, gDebugText_Progress, sizeof(gDebugText_Progress)); - memcpy(chorusStr, gDebugText_Chorus, sizeof(gDebugText_Chorus)); - memcpy(priorityStr, gDebugText_Priority, sizeof(gDebugText_Priority)); - memcpy(playingStr, gDebugText_Playing, sizeof(gDebugText_Playing)); - memcpy(reverseStr, gDebugText_Reverse, sizeof(gDebugText_Reverse)); - memcpy(stereoStr, gDebugText_Stereo, sizeof(gDebugText_Stereo)); + + u8 bbackStr[] = _("Bぼたんで もどる"); + u8 aplayStr[] = _("Aぼたんで さいせい"); + u8 voiceStr[] = _("VOICE‥‥‥‥"); + u8 volumeStr[] = _("VOLUME‥‥‥"); + u8 panpotStr[] = _("PANPOT‥‥‥"); + u8 pitchStr[] = _("PITCH‥‥‥‥"); + u8 lengthStr[] = _("LENGTH‥‥‥"); + u8 releaseStr[] = _("RELEASE‥‥"); + u8 progressStr[] = _("PROGRESS‥"); + u8 chorusStr[] = _("CHORUS‥‥‥"); + u8 priorityStr[] = _("PRIORITY‥"); + u8 playingStr[] = _("さいせいちゆう‥"); // 再生中 (playing) + u8 reverseStr[] = _("はんてん‥‥‥‥"); // 反転 (reverse) + u8 stereoStr[] = _("すてれお‥‥‥‥"); // stereo REG_DISPCNT = 0x3140; MenuDrawTextWindow(0, 0, 0x1D, 0x13); @@ -1621,21 +803,23 @@ void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu gUnknown_020387B4[CRY_TEST_PRIORITY] = 2; sub_80BAD5C(); sub_80BAE10(0, 0); - TASK.FUNC = sub_80BAA48; + gTasks[taskId].FUNC = sub_80BAA48; } + + void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput { - if(gMain.newKeys & B_BUTTON) + if (gMain.newKeys & B_BUTTON) { REG_DISPCNT = 0x7140; REG_WIN0H = WIN_RANGE(17, 223); REG_WIN0V = WIN_RANGE(1, 31); MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - TASK.FUNC = sub_80BA258; + gTasks[taskId].FUNC = sub_80BA258; return; } - if(gMain.newAndRepeatedKeys & DPAD_UP) // _080BAAA8 + if (gMain.newAndRepeatedKeys & DPAD_UP) // _080BAAA8 { u8 backupVar = gUnknown_020387B3; if(--gUnknown_020387B3 < 0) @@ -1644,7 +828,7 @@ void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput sub_80BAE10(backupVar, gUnknown_020387B3); return; } - if(gMain.newAndRepeatedKeys & DPAD_DOWN) // _080BAAD0 + if (gMain.newAndRepeatedKeys & DPAD_DOWN) // _080BAAD0 { u8 backupVar = gUnknown_020387B3; if(++gUnknown_020387B3 > 8) @@ -1653,44 +837,44 @@ void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput sub_80BAE10(backupVar, gUnknown_020387B3); return; } - if(gMain.newKeys & START_BUTTON) // _080BAAF8 + if (gMain.newKeys & START_BUTTON) // _080BAAF8 { gUnknown_020387D8 ^= 1; sub_80BAD5C(); return; } - if(gMain.newKeys & SELECT_BUTTON) // _080BAB14 + if (gMain.newKeys & SELECT_BUTTON) // _080BAB14 { gUnknown_020387D9 ^= 1; sub_80BAD5C(); SetPokemonCryStereo(gUnknown_020387D9); return; } - if(gMain.newAndRepeatedKeys & R_BUTTON) // _080BAB38 + if (gMain.newAndRepeatedKeys & R_BUTTON) // _080BAB38 { sub_80BACDC(10); sub_80BAD5C(); return; } - if(gMain.newAndRepeatedKeys & L_BUTTON) // _080BAB46 + if (gMain.newAndRepeatedKeys & L_BUTTON) // _080BAB46 { sub_80BACDC(-10); sub_80BAD5C(); return; } - if(gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BAB56 + if (gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BAB56 { sub_80BACDC(-1); sub_80BAD5C(); return; } - if(gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BAB64 + if (gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BAB64 { sub_80BACDC(1); sub_80BAD5C(); return; } - if(gMain.newKeys & A_BUTTON) // _080BAB78 + if (gMain.newKeys & A_BUTTON) // _080BAB78 { u8 divide, remaining; @@ -1706,41 +890,41 @@ void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput remaining = gUnknown_020387B4[CRY_TEST_UNK0] % 128; divide = gUnknown_020387B4[CRY_TEST_UNK0] / 128; - switch(divide) + switch (divide) { - case 0: - if(gUnknown_020387D8) - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84537C0[remaining]); - else - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452590[remaining]); - break; - case 1: - if(gUnknown_020387D8) - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453DC0[remaining]); - else - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452B90[remaining]); - break; - case 2: - if(gUnknown_020387D8) - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84543C0[remaining]); - else - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453190[remaining]); - break; - case 3: - if(gUnknown_020387D8) - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84549C0[remaining]); - else - gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453790[remaining]); - break; + case 0: + if (gUnknown_020387D8) + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84537C0[remaining]); + else + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452590[remaining]); + break; + case 1: + if (gUnknown_020387D8) + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453DC0[remaining]); + else + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452B90[remaining]); + break; + case 2: + if (gUnknown_020387D8) + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84543C0[remaining]); + else + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453190[remaining]); + break; + case 3: + if (gUnknown_020387D8) + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84549C0[remaining]); + else + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453790[remaining]); + break; } } // _080BACA2 - if(gUnknown_03005D30 != NULL) + if (gUnknown_03005D30 != NULL) { gUnknown_020387B1 = IsPokemonCryPlaying(gUnknown_03005D30); - if(gUnknown_020387B1 != gUnknown_020387B2) + if (gUnknown_020387B1 != gUnknown_020387B2) sub_80BAD5C(); gUnknown_020387B2 = gUnknown_020387B1; @@ -1749,15 +933,25 @@ void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput void sub_80BACDC(s8 var) { - int minMaxArray[ARRAY_COUNT(gUnknown_083D039C)]; + // also ideally should be a MinMax struct, but any attempt to make this into a struct causes it to not match due to the weird multi dim access. + int minMaxArray[16] = + { + 0, 387, + 0, 127, + -127, 127, + -128, 32639, + 0, 65535, + 0, 255, + 0, 65535, + -64, 63 + }; - memcpy(minMaxArray, gUnknown_083D039C, sizeof(gUnknown_083D039C)); gUnknown_020387B4[gUnknown_020387B3] += var; - if(gUnknown_020387B4[gUnknown_020387B3] > minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)]) + if (gUnknown_020387B4[gUnknown_020387B3] > minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)]) gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MIN)]; - if(gUnknown_020387B4[gUnknown_020387B3] < minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MIN)]) + if (gUnknown_020387B4[gUnknown_020387B3] < minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MIN)]) gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)]; } @@ -1779,206 +973,69 @@ void sub_80BAD5C(void) void sub_80BAE10(u8 var1, u8 var2) { - u8 str1[sizeof(gUnknown_083D03DC)]; - u8 str2[sizeof(gUnknown_083D03DE)]; - - memcpy(str1, gUnknown_083D03DC, sizeof(gUnknown_083D03DC)); - memcpy(str2, gUnknown_083D03DE, sizeof(gUnknown_083D03DE)); + u8 str1[] = _("▶"); + u8 str2[] = _(" "); MenuPrint(str2, gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 1)]); MenuPrint(str1, gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 1)]); } -/*void sub_80BAE78(int var1, u16 var2, u16 var3, u8 var4) +void sub_80BAE78(int n, u16 x, u16 y, u8 digits) { - u32 powers[6]; - u8 str[8]; - u8 i; - u8 someVar, someVar2; - - memcpy(powers, gUnknown_083D03E0, sizeof(powers); - - for(i = 0; i < var4; i++) - str[i] = 0; - - str[var4 + 1] = CHAR_0; - someVar = 0; - - if(var1 < 0) // make absolute value? wtf + int powersOfTen[6] = { - var1 = -var1; // just use abs? - someVar = 1; - } + 1, + 10, + 100, + 1000, + 10000, + 100000 + }; + u8 str[8]; + s8 i; + s8 negative; + s8 someVar2; - // _080BAED6 - someVar2 = 0; - if(var4 == 1) - someVar2 = 1; + for (i = 0; i <= digits; i++) + str[i] = CHAR_SPACE; + str[digits + 1] = EOS; - // _080BAEE2 - for(;;) + negative = FALSE; + if (n < 0) { - + n = -n; + negative = TRUE; } -}*/ -// no. -__attribute__((naked)) -void sub_80BAE78(int var1, u16 var2, u16 var3, u8 var4) -{ - 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\ - mov r8, r0\n\ - lsls r1, 16\n\ - lsrs r6, r1, 16\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - lsls r3, 24\n\ - lsrs r7, r3, 24\n\ - mov r1, sp\n\ - ldr r0, _080BAF80 @ =gUnknown_083D03E0\n\ - ldm r0!, {r3-r5}\n\ - stm r1!, {r3-r5}\n\ - ldm r0!, {r3-r5}\n\ - stm r1!, {r3-r5}\n\ - movs r5, 0\n\ - add r0, sp, 0x18\n\ - mov r9, r0\n\ - cmp r5, r7\n\ - bgt _080BAEC0\n\ - mov r4, r9\n\ - movs r3, 0\n\ -_080BAEAC:\n\ - lsls r0, r5, 24\n\ - asrs r0, 24\n\ - adds r1, r4, r0\n\ - strb r3, [r1]\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - asrs r0, 24\n\ - cmp r0, r7\n\ - ble _080BAEAC\n\ -_080BAEC0:\n\ - adds r0, r7, 0x1\n\ - add r0, r9\n\ - movs r1, 0xFF\n\ - strb r1, [r0]\n\ - movs r1, 0\n\ - mov r3, r8\n\ - cmp r3, 0\n\ - bge _080BAED6\n\ - negs r3, r3\n\ - mov r8, r3\n\ - movs r1, 0x1\n\ -_080BAED6:\n\ - movs r4, 0\n\ - mov r10, r4\n\ - cmp r7, 0x1\n\ - bne _080BAEE2\n\ - movs r5, 0x1\n\ - mov r10, r5\n\ -_080BAEE2:\n\ - subs r0, r7, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - lsls r0, r5, 24\n\ - lsls r6, 24\n\ - str r6, [sp, 0x24]\n\ - lsls r2, 24\n\ - str r2, [sp, 0x28]\n\ - cmp r0, 0\n\ - blt _080BAF62\n\ - str r1, [sp, 0x20]\n\ -_080BAEF8:\n\ - asrs r6, r0, 24\n\ - lsls r0, r6, 2\n\ - add r0, sp\n\ - ldr r1, [r0]\n\ - mov r0, r8\n\ - bl __divsi3\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - cmp r0, 0\n\ - bne _080BAF1A\n\ - mov r0, r10\n\ - cmp r0, 0\n\ - bne _080BAF1A\n\ - lsls r4, r5, 24\n\ - cmp r6, 0\n\ - bne _080BAF46\n\ -_080BAF1A:\n\ - lsls r4, r5, 24\n\ - ldr r3, [sp, 0x20]\n\ - cmp r3, 0\n\ - beq _080BAF34\n\ - mov r5, r10\n\ - cmp r5, 0\n\ - bne _080BAF34\n\ - asrs r0, r4, 24\n\ - subs r0, r7, r0\n\ - subs r0, 0x1\n\ - add r0, r9\n\ - movs r1, 0xAE\n\ - strb r1, [r0]\n\ -_080BAF34:\n\ - asrs r1, r4, 24\n\ - subs r1, r7, r1\n\ - add r1, r9\n\ - lsls r0, r2, 24\n\ - asrs r0, 24\n\ - subs r0, 0x5F\n\ - strb r0, [r1]\n\ - movs r0, 0x1\n\ - mov r10, r0\n\ -_080BAF46:\n\ - asrs r4, 24\n\ - lsls r0, r4, 2\n\ - add r0, sp\n\ - ldr r1, [r0]\n\ - mov r0, r8\n\ - bl __modsi3\n\ - mov r8, r0\n\ - subs r4, 0x1\n\ - lsls r4, 24\n\ - lsrs r5, r4, 24\n\ - lsls r0, r5, 24\n\ - cmp r0, 0\n\ - bge _080BAEF8\n\ -_080BAF62:\n\ - ldr r3, [sp, 0x24]\n\ - lsrs r1, r3, 24\n\ - ldr r4, [sp, 0x28]\n\ - lsrs r2, r4, 24\n\ - mov r0, r9\n\ - bl MenuPrint\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 {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080BAF80: .4byte gUnknown_083D03E0\n\ - .syntax divided"); + if (digits == 1) + someVar2 = TRUE; + else + someVar2 = FALSE; + + for (i = digits - 1; i >= 0; i--) + { + s8 d = n / powersOfTen[i]; + + if (d != 0 || someVar2 || i == 0) + { + if (negative && !someVar2) + str[digits - i - 1] = CHAR_HYPHEN; + str[digits - i] = CHAR_0 + d; + someVar2 = TRUE; + } + n %= powersOfTen[i]; + } + + MenuPrint(str, x, y); } +static const s8 gUnknown_083D03F8[5] = { 0x3F, 0x00, 0xC0, 0x7F, 0x80 }; + void sub_80BAF84(u8 taskId) { - u8 seStr[sizeof(gOtherText_SE)]; - u8 panStr[sizeof(gOtherText_Pan)]; - u8 playingStr[sizeof(gDebugText_Playing)]; - - memcpy(seStr, gOtherText_SE, sizeof(gOtherText_SE)); - memcpy(panStr, gOtherText_Pan, sizeof(gOtherText_Pan)); - memcpy(playingStr, gDebugText_Playing, sizeof(gDebugText_Playing)); + u8 seStr[] = _("SE"); + u8 panStr[] = _("PAN"); + u8 playingStr[] = _("さいせいちゆう‥"); REG_DISPCNT = 0x3140; MenuDrawTextWindow(0, 0, 0x1D, 0x13); @@ -1993,54 +1050,54 @@ void sub_80BAF84(u8 taskId) gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; gUnknown_020387B4[CRY_TEST_RELEASE] = 0; sub_80BB1D4(); - TASK.FUNC = sub_80BB038; + gTasks[taskId].FUNC = sub_80BB038; } void sub_80BB038(u8 taskId) { sub_80BB1D4(); - if(gUnknown_020387B4[CRY_TEST_PROGRESS]) + if (gUnknown_020387B4[CRY_TEST_PROGRESS]) { - if(gUnknown_020387B4[CRY_TEST_RELEASE]) + if (gUnknown_020387B4[CRY_TEST_RELEASE]) { gUnknown_020387B4[CRY_TEST_RELEASE]--; } else // _080BB05C { s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]; - if(panpot != -128) + if (panpot != -128) { - if(panpot == 0x7F) + if (panpot == 0x7F) { gUnknown_020387B4[CRY_TEST_CHORUS] += 2; - if(gUnknown_020387B4[CRY_TEST_CHORUS] < 0x3F) + if (gUnknown_020387B4[CRY_TEST_CHORUS] < 0x3F) SE12PanpotControl(gUnknown_020387B4[CRY_TEST_CHORUS]); } } else // _080BB08C { gUnknown_020387B4[CRY_TEST_CHORUS] -= 2; - if(gUnknown_020387B4[CRY_TEST_CHORUS] > -0x40) + if (gUnknown_020387B4[CRY_TEST_CHORUS] > -0x40) SE12PanpotControl(gUnknown_020387B4[CRY_TEST_CHORUS]); } } } // _080BB0A2 - if(gMain.newKeys & B_BUTTON) + if (gMain.newKeys & B_BUTTON) { REG_DISPCNT = 0x7140; REG_WIN0H = WIN_RANGE(17, 223); REG_WIN0V = WIN_RANGE(1, 31); MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - TASK.FUNC = sub_80BA258; + gTasks[taskId].FUNC = sub_80BA258; return; } - if(gMain.newKeys & A_BUTTON) // _080BB104 + if (gMain.newKeys & A_BUTTON) // _080BB104 { s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]; - if(panpot != -128) + if (panpot != -128) { - if(panpot == 0x7F) + if (panpot == 0x7F) { PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], -0x40); gUnknown_020387B4[CRY_TEST_CHORUS] = -0x40; @@ -2062,56 +1119,798 @@ void sub_80BB038(u8 taskId) gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; return; } - if(gMain.newKeys & L_BUTTON) // _080BB15E + if (gMain.newKeys & L_BUTTON) // _080BB15E { gUnknown_020387B4[CRY_TEST_PANPOT]++; - if(gUnknown_020387B4[CRY_TEST_PANPOT] > 4) + if (gUnknown_020387B4[CRY_TEST_PANPOT] > 4) gUnknown_020387B4[CRY_TEST_PANPOT] = 0; } - if(gMain.newKeys & R_BUTTON) // _080BB176 + if (gMain.newKeys & R_BUTTON) // _080BB176 { gUnknown_020387B4[CRY_TEST_PANPOT]--; - if(gUnknown_020387B4[CRY_TEST_PANPOT] < 0) + if (gUnknown_020387B4[CRY_TEST_PANPOT] < 0) gUnknown_020387B4[CRY_TEST_PANPOT] = 4; } - if(gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BB192 + if (gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BB192 { gUnknown_020387B4[CRY_TEST_UNK0]++; - if(gUnknown_020387B4[CRY_TEST_UNK0] > 0xF7) + if (gUnknown_020387B4[CRY_TEST_UNK0] > 0xF7) gUnknown_020387B4[CRY_TEST_UNK0] = 0; } - else if(gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BB1B0 + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BB1B0 { gUnknown_020387B4[CRY_TEST_UNK0]--; - if(gUnknown_020387B4[CRY_TEST_UNK0] < 0) + if (gUnknown_020387B4[CRY_TEST_UNK0] < 0) gUnknown_020387B4[CRY_TEST_UNK0] = 0xF7; } } void sub_80BB1D4(void) { - u8 lrStr[sizeof(gOtherText_LR)]; - u8 rlStr[sizeof(gOtherText_RL)]; + u8 lrStr[] = _(" LR"); + u8 rlStr[] = _(" RL"); + + sub_80BAE78(gUnknown_020387B4[CRY_TEST_UNK0], 7, 2, 3); + + switch (gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]) + { + case 0x7F: + MenuPrint(lrStr, 7, 4); + break; + case -0x80: + MenuPrint(rlStr, 7, 4); + break; + default: + sub_80BAE78(gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]], 7, 4, 3); + break; + } + sub_80BAE78(IsSEPlaying(), 12, 8, 1); +} + +// bgm names +static const u8 BGMName_STOP[] = _("STOP"); +static const u8 BGMName_TETSUJI[] = _("TETSUJI"); +static const u8 BGMName_FIELD13[] = _("FIELD13"); +static const u8 BGMName_KACHI22[] = _("KACHI22"); +static const u8 BGMName_KACHI2[] = _("KACHI2"); +static const u8 BGMName_KACHI3[] = _("KACHI3"); +static const u8 BGMName_KACHI5[] = _("KACHI5"); +static const u8 BGMName_PCC[] = _("PCC"); +static const u8 BGMName_NIBI[] = _("NIBI"); +static const u8 BGMName_SUIKUN[] = _("SUIKUN"); +static const u8 BGMName_DOORO1[] = _("DOORO1"); +static const u8 BGMName_DOORO_X1[] = _("DOORO-X1"); +static const u8 BGMName_DOORO_X3[] = _("DOORO-X3"); +static const u8 BGMName_MACHI_S2[] = _("MACHI-S2"); +static const u8 BGMName_MACHI_S4[] = _("MACHI-S4"); +static const u8 BGMName_GIM[] = _("GIM"); +static const u8 BGMName_NAMINORI[] = _("NAMINORI"); +static const u8 BGMName_DAN01[] = _("DAN01"); +static const u8 BGMName_FANFA1[] = _("FANFA1"); +static const u8 BGMName_ME_ASA[] = _("ME-ASA"); +static const u8 BGMName_ME_BACHI[] = _("ME-BACHI"); +static const u8 BGMName_FANFA4[] = _("FANFA4"); +static const u8 BGMName_FANFA5[] = _("FANFA5"); +static const u8 BGMName_ME_WAZA[] = _("ME-WAZA"); +static const u8 BGMName_BIJYUTU[] = _("BIJYUTU"); +static const u8 BGMName_DOORO_X4[] = _("DOORO-X4"); +static const u8 BGMName_FUNE_KAN[] = _("FUNE-KAN"); +static const u8 BGMName_ME_SHINKA[] = _("ME-SHINKA"); +static const u8 BGMName_SHINKA[] = _("SHINKA"); +static const u8 BGMName_ME_WASURE[] = _("ME-WASURE"); +static const u8 BGMName_SYOUJOEYE[] = _("SYOUJOEYE"); +static const u8 BGMName_BOYEYE[] = _("BOYEYE"); +static const u8 BGMName_DAN02[] = _("DAN02"); +static const u8 BGMName_MACHI_S3[] = _("MACHI-S3"); +static const u8 BGMName_ODAMAKI[] = _("ODAMAKI"); +static const u8 BGMName_B_TOWER[] = _("B-TOWER"); +static const u8 BGMName_SWIMEYE[] = _("SWIMEYE"); +static const u8 BGMName_DAN03[] = _("DAN03"); +static const u8 BGMName_ME_KINOMI[] = _("ME-KINOMI"); +static const u8 BGMName_ME_TAMA[] = _("ME-TAMA"); +static const u8 BGMName_ME_B_BIG[] = _("ME-B-BIG"); +static const u8 BGMName_ME_B_SMALL[] = _("ME-B-SMALL"); +static const u8 BGMName_ME_ZANNEN[] = _("ME-ZANNEN"); +static const u8 BGMName_BD_TIME[] = _("BD-TIME"); +static const u8 BGMName_TEST1[] = _("TEST1"); +static const u8 BGMName_TEST2[] = _("TEST2"); +static const u8 BGMName_TEST3[] = _("TEST3"); +static const u8 BGMName_TEST4[] = _("TEST4"); +static const u8 BGMName_TEST[] = _("TEST"); +static const u8 BGMName_GOMACHI0[] = _("GOMACHI0"); +static const u8 BGMName_GOTOWN[] = _("GOTOWN"); +static const u8 BGMName_POKECEN[] = _("POKECEN"); +static const u8 BGMName_NEXTROAD[] = _("NEXTROAD"); +static const u8 BGMName_GRANROAD[] = _("GRANROAD"); +static const u8 BGMName_CYCLING[] = _("CYCLING"); +static const u8 BGMName_FRIENDLY[] = _("FRIENDLY"); +static const u8 BGMName_MISHIRO[] = _("MISHIRO"); +static const u8 BGMName_TOZAN[] = _("TOZAN"); +static const u8 BGMName_GIRLEYE[] = _("GIRLEYE"); +static const u8 BGMName_MINAMO[] = _("MINAMO"); +static const u8 BGMName_ASHROAD[] = _("ASHROAD"); +static const u8 BGMName_EVENT0[] = _("EVENT0"); +static const u8 BGMName_DEEPDEEP[] = _("DEEPDEEP"); +static const u8 BGMName_KACHI1[] = _("KACHI1"); +static const u8 BGMName_TITLE3[] = _("TITLE3"); +static const u8 BGMName_DEMO1[] = _("DEMO1"); +static const u8 BGMName_GIRL_SUP[] = _("GIRL-SUP"); +static const u8 BGMName_HAGESHII[] = _("HAGESHII"); +static const u8 BGMName_KAKKOII[] = _("KAKKOII"); +static const u8 BGMName_KAZANBAI[] = _("KAZANBAI"); +static const u8 BGMName_AQA_0[] = _("AQA-0"); +static const u8 BGMName_TSURETEK[] = _("TSURETEK"); +static const u8 BGMName_BOY_SUP[] = _("BOY-SUP"); +static const u8 BGMName_RAINBOW[] = _("RAINBOW"); +static const u8 BGMName_AYASII[] = _("AYASII"); +static const u8 BGMName_KACHI4[] = _("KACHI4"); +static const u8 BGMName_ROPEWAY[] = _("ROPEWAY"); +static const u8 BGMName_CASINO[] = _("CASINO"); +static const u8 BGMName_HIGHTOWN[] = _("HIGHTOWN"); +static const u8 BGMName_SAFARI[] = _("SAFARI"); +static const u8 BGMName_C_ROAD[] = _("C-ROAD"); +static const u8 BGMName_AJITO[] = _("AJITO"); +static const u8 BGMName_M_BOAT[] = _("M-BOAT"); +static const u8 BGMName_M_DUNGON[] = _("M-DUNGON"); +static const u8 BGMName_FINECITY[] = _("FINECITY"); +static const u8 BGMName_MACHUPI[] = _("MACHUPI"); +static const u8 BGMName_P_SCHOOL[] = _("P-SCHOOL"); +static const u8 BGMName_DENDOU[] = _("DENDOU"); +static const u8 BGMName_TONEKUSA[] = _("TONEKUSA"); +static const u8 BGMName_MABOROSI[] = _("MABOROSI"); +static const u8 BGMName_CON_FAN[] = _("CON-FAN"); +static const u8 BGMName_CONTEST0[] = _("CONTEST0"); +static const u8 BGMName_MGM0[] = _("MGM0"); +static const u8 BGMName_T_BATTLE[] = _("T-BATTLE"); +static const u8 BGMName_OOAME[] = _("OOAME"); +static const u8 BGMName_HIDERI[] = _("HIDERI"); +static const u8 BGMName_RUNECITY[] = _("RUNECITY"); +static const u8 BGMName_CON_K[] = _("CON-K"); +static const u8 BGMName_EIKOU_R[] = _("EIKOU-R"); +static const u8 BGMName_KARAKURI[] = _("KARAKURI"); +static const u8 BGMName_HUTAGO[] = _("HUTAGO"); +static const u8 BGMName_SITENNOU[] = _("SITENNOU"); +static const u8 BGMName_YAMA_EYE[] = _("YAMA-EYE"); +static const u8 BGMName_CONLOBBY[] = _("CONLOBBY"); +static const u8 BGMName_INTER_V[] = _("INTER-V"); +static const u8 BGMName_DAIGO[] = _("DAIGO"); +static const u8 BGMName_THANKFOR[] = _("THANKFOR"); +static const u8 BGMName_END[] = _("END"); +static const u8 BGMName_BATTLE27[] = _("BATTLE27"); +static const u8 BGMName_BATTLE31[] = _("BATTLE31"); +static const u8 BGMName_BATTLE20[] = _("BATTLE20"); +static const u8 BGMName_BATTLE32[] = _("BATTLE32"); +static const u8 BGMName_BATTLE33[] = _("BATTLE33"); +static const u8 BGMName_BATTLE36[] = _("BATTLE36"); +static const u8 BGMName_BATTLE34[] = _("BATTLE34"); +static const u8 BGMName_BATTLE35[] = _("BATTLE35"); +static const u8 BGMName_BATTLE38[] = _("BATTLE38"); +static const u8 BGMName_BATTLE30[] = _("BATTLE30"); + +static const u8 *const gBGMNames[] = +{ + BGMName_STOP, + BGMName_TETSUJI, + BGMName_FIELD13, + BGMName_KACHI22, + BGMName_KACHI2, + BGMName_KACHI3, + BGMName_KACHI5, + BGMName_PCC, + BGMName_NIBI, + BGMName_SUIKUN, + BGMName_DOORO1, + BGMName_DOORO_X1, + BGMName_DOORO_X3, + BGMName_MACHI_S2, + BGMName_MACHI_S4, + BGMName_GIM, + BGMName_NAMINORI, + BGMName_DAN01, + BGMName_FANFA1, + BGMName_ME_ASA, + BGMName_ME_BACHI, + BGMName_FANFA4, + BGMName_FANFA5, + BGMName_ME_WAZA, + BGMName_BIJYUTU, + BGMName_DOORO_X4, + BGMName_FUNE_KAN, + BGMName_ME_SHINKA, + BGMName_SHINKA, + BGMName_ME_WASURE, + BGMName_SYOUJOEYE, + BGMName_BOYEYE, + BGMName_DAN02, + BGMName_MACHI_S3, + BGMName_ODAMAKI, + BGMName_B_TOWER, + BGMName_SWIMEYE, + BGMName_DAN03, + BGMName_ME_KINOMI, + BGMName_ME_TAMA, + BGMName_ME_B_BIG, + BGMName_ME_B_SMALL, + BGMName_ME_ZANNEN, + BGMName_BD_TIME, + BGMName_TEST1, + BGMName_TEST2, + BGMName_TEST3, + BGMName_TEST4, + BGMName_TEST, + BGMName_GOMACHI0, + BGMName_GOTOWN, + BGMName_POKECEN, + BGMName_NEXTROAD, + BGMName_GRANROAD, + BGMName_CYCLING, + BGMName_FRIENDLY, + BGMName_MISHIRO, + BGMName_TOZAN, + BGMName_GIRLEYE, + BGMName_MINAMO, + BGMName_ASHROAD, + BGMName_EVENT0, + BGMName_DEEPDEEP, + BGMName_KACHI1, + BGMName_TITLE3, + BGMName_DEMO1, + BGMName_GIRL_SUP, + BGMName_HAGESHII, + BGMName_KAKKOII, + BGMName_KAZANBAI, + BGMName_AQA_0, + BGMName_TSURETEK, + BGMName_BOY_SUP, + BGMName_RAINBOW, + BGMName_AYASII, + BGMName_KACHI4, + BGMName_ROPEWAY, + BGMName_CASINO, + BGMName_HIGHTOWN, + BGMName_SAFARI, + BGMName_C_ROAD, + BGMName_AJITO, + BGMName_M_BOAT, + BGMName_M_DUNGON, + BGMName_FINECITY, + BGMName_MACHUPI, + BGMName_P_SCHOOL, + BGMName_DENDOU, + BGMName_TONEKUSA, + BGMName_MABOROSI, + BGMName_CON_FAN, + BGMName_CONTEST0, + BGMName_MGM0, + BGMName_T_BATTLE, + BGMName_OOAME, + BGMName_HIDERI, + BGMName_RUNECITY, + BGMName_CON_K, + BGMName_EIKOU_R, + BGMName_KARAKURI, + BGMName_HUTAGO, + BGMName_SITENNOU, + BGMName_YAMA_EYE, + BGMName_CONLOBBY, + BGMName_INTER_V, + BGMName_DAIGO, + BGMName_THANKFOR, + BGMName_END, + BGMName_BATTLE27, + BGMName_BATTLE31, + BGMName_BATTLE20, + BGMName_BATTLE32, + BGMName_BATTLE33, + BGMName_BATTLE36, + BGMName_BATTLE34, + BGMName_BATTLE35, + BGMName_BATTLE38, + BGMName_BATTLE30 +}; - memcpy(lrStr, gOtherText_LR, sizeof(lrStr)); - memcpy(rlStr, gOtherText_RL, sizeof(rlStr)); +// SE names +static const u8 SEName_STOP[] = _("STOP"); +static const u8 SEName_KAIFUKU[] = _("KAIFUKU"); +static const u8 SEName_PC_LOGON[] = _("PC-LOGON"); +static const u8 SEName_PC_OFF[] = _("PC-OFF"); +static const u8 SEName_PC_ON[] = _("PC-ON"); +static const u8 SEName_SELECT[] = _("SELECT"); +static const u8 SEName_WIN_OPEN[] = _("WIN-OPEN"); +static const u8 SEName_WALL_HIT[] = _("WALL-HIT"); +static const u8 SEName_DOOR[] = _("DOOR"); +static const u8 SEName_KAIDAN[] = _("KAIDAN"); +static const u8 SEName_DANSA[] = _("DANSA"); +static const u8 SEName_JITENSYA[] = _("JITENSYA"); +static const u8 SEName_KOUKA_L[] = _("KOUKA-L"); +static const u8 SEName_KOUKA_M[] = _("KOUKA-M"); +static const u8 SEName_KOUKA_H[] = _("KOUKA-H"); +static const u8 SEName_BOWA2[] = _("BOWA2"); +static const u8 SEName_POKE_DEAD[] = _("POKE-DEAD"); +static const u8 SEName_NIGERU[] = _("NIGERU"); +static const u8 SEName_JIDO_DOA[] = _("JIDO-DOA"); +static const u8 SEName_NAMINORI[] = _("NAMINORI"); +static const u8 SEName_BAN[] = _("BAN"); +static const u8 SEName_PIN[] = _("PIN"); +static const u8 SEName_BOO[] = _("BOO"); +static const u8 SEName_BOWA[] = _("BOWA"); +static const u8 SEName_JYUNI[] = _("JYUNI"); +static const u8 SEName_A[] = _("A"); +static const u8 SEName_I[] = _("I"); +static const u8 SEName_U[] = _("U"); +static const u8 SEName_E[] = _("E"); +static const u8 SEName_O[] = _("O"); +static const u8 SEName_N[] = _("N"); +static const u8 SEName_SEIKAI[] = _("SEIKAI"); +static const u8 SEName_HAZURE[] = _("HAZURE"); +static const u8 SEName_EXP[] = _("EXP"); +static const u8 SEName_JITE_PYOKO[] = _("JITE-PYOKO"); +static const u8 SEName_MU_PACHI[] = _("MU-PACHI"); +static const u8 SEName_TK_KASYA[] = _("TK-KASYA"); +static const u8 SEName_FU_ZAKU[] = _("FU-ZAKU"); +static const u8 SEName_FU_ZAKU2[] = _("FU-ZAKU2"); +static const u8 SEName_FU_ZUZUZU[] = _("FU-ZUZUZU"); +static const u8 SEName_RU_GASHIN[] = _("RU-GASHIN"); +static const u8 SEName_RU_GASYAN[] = _("RU-GASYAN"); +static const u8 SEName_RU_BARI[] = _("RU-BARI"); +static const u8 SEName_RU_HYUU[] = _("RU-HYUU"); +static const u8 SEName_KI_GASYAN[] = _("KI-GASYAN"); +static const u8 SEName_TK_WARPIN[] = _("TK-WARPIN"); +static const u8 SEName_TK_WARPOUT[] = _("TK-WARPOUT"); +static const u8 SEName_TU_SAA[] = _("TU-SAA"); +static const u8 SEName_HI_TURUN[] = _("HI-TURUN"); +static const u8 SEName_TRACK_MOVE[] = _("TRACK-MOVE"); +static const u8 SEName_TRACK_STOP[] = _("TRACK-STOP"); +static const u8 SEName_TRACK_HAIK[] = _("TRACK-HAIK"); +static const u8 SEName_TRACK_DOOR[] = _("TRACK-DOOR"); +static const u8 SEName_MOTER[] = _("MOTER"); +static const u8 SEName_CARD[] = _("CARD"); +static const u8 SEName_SAVE[] = _("SAVE"); +static const u8 SEName_KON[] = _("KON"); +static const u8 SEName_KON2[] = _("KON2"); +static const u8 SEName_KON3[] = _("KON3"); +static const u8 SEName_KON4[] = _("KON4"); +static const u8 SEName_SUIKOMU[] = _("SUIKOMU"); +static const u8 SEName_NAGERU[] = _("NAGERU"); +static const u8 SEName_TOY_C[] = _("TOY-C"); +static const u8 SEName_TOY_D[] = _("TOY-D"); +static const u8 SEName_TOY_E[] = _("TOY-E"); +static const u8 SEName_TOY_F[] = _("TOY-F"); +static const u8 SEName_TOY_G[] = _("TOY-G"); +static const u8 SEName_TOY_A[] = _("TOY-A"); +static const u8 SEName_TOY_B[] = _("TOY-B"); +static const u8 SEName_TOY_C1[] = _("TOY-C1"); +static const u8 SEName_MIZU[] = _("MIZU"); +static const u8 SEName_HASHI[] = _("HASHI"); +static const u8 SEName_DAUGI[] = _("DAUGI"); +static const u8 SEName_PINPON[] = _("PINPON"); +static const u8 SEName_FUUSEN1[] = _("FUUSEN1"); +static const u8 SEName_FUUSEN2[] = _("FUUSEN2"); +static const u8 SEName_FUUSEN3[] = _("FUUSEN3"); +static const u8 SEName_TOY_KABE[] = _("TOY-KABE"); +static const u8 SEName_TOY_DANGO[] = _("TOY-DANGO"); +static const u8 SEName_DOKU[] = _("DOKU"); +static const u8 SEName_ESUKA[] = _("ESUKA"); +static const u8 SEName_T_AME[] = _("T-AME"); +static const u8 SEName_T_AME_E[] = _("T-AME-E"); +static const u8 SEName_T_OOAME[] = _("T-OOAME"); +static const u8 SEName_T_OOAME_E[] = _("T-OOAME-E"); +static const u8 SEName_T_KOAME[] = _("T-KOAME"); +static const u8 SEName_T_KOAME_E[] = _("T-KOAME-E"); +static const u8 SEName_T_KAMI[] = _("T-KAMI"); +static const u8 SEName_T_KAMI2[] = _("T-KAMI2"); +static const u8 SEName_ELEBETA[] = _("ELEBETA"); +static const u8 SEName_HINSI[] = _("HINSI"); +static const u8 SEName_EXPMAX[] = _("EXPMAX"); +static const u8 SEName_TAMAKORO[] = _("TAMAKORO"); +static const u8 SEName_TAMAKORO_E[] = _("TAMAKORO-E"); +static const u8 SEName_BASABASA[] = _("BASABASA"); +static const u8 SEName_REGI[] = _("REGI"); +static const u8 SEName_C_GAJI[] = _("C-GAJI"); +static const u8 SEName_C_MAKU_U[] = _("C-MAKU-U"); +static const u8 SEName_C_MAKU_D[] = _("C-MAKU-D"); +static const u8 SEName_C_PASI[] = _("C-PASI"); +static const u8 SEName_C_SYU[] = _("C-SYU"); +static const u8 SEName_C_PIKON[] = _("C-PIKON"); +static const u8 SEName_REAPOKE[] = _("REAPOKE"); +static const u8 SEName_OP_BASYU[] = _("OP-BASYU"); +static const u8 SEName_BT_START[] = _("BT-START"); +static const u8 SEName_DENDOU[] = _("DENDOU"); +static const u8 SEName_JIHANKI[] = _("JIHANKI"); +static const u8 SEName_TAMA[] = _("TAMA"); +static const u8 SEName_Z_SCROLL[] = _("Z-SCROLL"); +static const u8 SEName_Z_PAGE[] = _("Z-PAGE"); +static const u8 SEName_PN_ON[] = _("PN-ON"); +static const u8 SEName_PN_OFF[] = _("PN-OFF"); +static const u8 SEName_Z_SEARCH[] = _("Z-SEARCH"); +static const u8 SEName_TAMAGO[] = _("TAMAGO"); +static const u8 SEName_TB_START[] = _("TB-START"); +static const u8 SEName_TB_KON[] = _("TB-KON"); +static const u8 SEName_TB_KARA[] = _("TB-KARA"); +static const u8 SEName_BIDORO[] = _("BIDORO"); +static const u8 SEName_W085[] = _("W085"); +static const u8 SEName_W085B[] = _("W085B"); +static const u8 SEName_W231[] = _("W231"); +static const u8 SEName_W171[] = _("W171"); +static const u8 SEName_W233[] = _("W233"); +static const u8 SEName_W233B[] = _("W233B"); +static const u8 SEName_W145[] = _("W145"); +static const u8 SEName_W145B[] = _("W145B"); +static const u8 SEName_W145C[] = _("W145C"); +static const u8 SEName_W240[] = _("W240"); +static const u8 SEName_W015[] = _("W015"); +static const u8 SEName_W081[] = _("W081"); +static const u8 SEName_W081B[] = _("W081B"); +static const u8 SEName_W088[] = _("W088"); +static const u8 SEName_W016[] = _("W016"); +static const u8 SEName_W016B[] = _("W016B"); +static const u8 SEName_W003[] = _("W003"); +static const u8 SEName_W104[] = _("W104"); +static const u8 SEName_W013[] = _("W013"); +static const u8 SEName_W196[] = _("W196"); +static const u8 SEName_W086[] = _("W086"); +static const u8 SEName_W004[] = _("W004"); +static const u8 SEName_W025[] = _("W025"); +static const u8 SEName_W025B[] = _("W025B"); +static const u8 SEName_W152[] = _("W152"); +static const u8 SEName_W026[] = _("W026"); +static const u8 SEName_W172[] = _("W172"); +static const u8 SEName_W172B[] = _("W172B"); +static const u8 SEName_W053[] = _("W053"); +static const u8 SEName_W007[] = _("W007"); +static const u8 SEName_W092[] = _("W092"); +static const u8 SEName_W221[] = _("W221"); +static const u8 SEName_W221B[] = _("W221B"); +static const u8 SEName_W052[] = _("W052"); +static const u8 SEName_W036[] = _("W036"); +static const u8 SEName_W059[] = _("W059"); +static const u8 SEName_W059B[] = _("W059B"); +static const u8 SEName_W010[] = _("W010"); +static const u8 SEName_W011[] = _("W011"); +static const u8 SEName_W017[] = _("W017"); +static const u8 SEName_W019[] = _("W019"); +static const u8 SEName_W028[] = _("W028"); +static const u8 SEName_W013B[] = _("W013B"); +static const u8 SEName_W044[] = _("W044"); +static const u8 SEName_W029[] = _("W029"); +static const u8 SEName_W057[] = _("W057"); +static const u8 SEName_W056[] = _("W056"); +static const u8 SEName_W250[] = _("W250"); +static const u8 SEName_W030[] = _("W030"); +static const u8 SEName_W039[] = _("W039"); +static const u8 SEName_W054[] = _("W054"); +static const u8 SEName_W077[] = _("W077"); +static const u8 SEName_W020[] = _("W020"); +static const u8 SEName_W082[] = _("W082"); +static const u8 SEName_W047[] = _("W047"); +static const u8 SEName_W195[] = _("W195"); +static const u8 SEName_W006[] = _("W006"); +static const u8 SEName_W091[] = _("W091"); +static const u8 SEName_W146[] = _("W146"); +static const u8 SEName_W120[] = _("W120"); +static const u8 SEName_W153[] = _("W153"); +static const u8 SEName_W071B[] = _("W071B"); +static const u8 SEName_W071[] = _("W071"); +static const u8 SEName_W103[] = _("W103"); +static const u8 SEName_W062[] = _("W062"); +static const u8 SEName_W062B[] = _("W062B"); +static const u8 SEName_W048[] = _("W048"); +static const u8 SEName_W187[] = _("W187"); +static const u8 SEName_W118[] = _("W118"); +static const u8 SEName_W155[] = _("W155"); +static const u8 SEName_W122[] = _("W122"); +static const u8 SEName_W060[] = _("W060"); +static const u8 SEName_W185[] = _("W185"); +static const u8 SEName_W014[] = _("W014"); +static const u8 SEName_W043[] = _("W043"); +static const u8 SEName_W207[] = _("W207"); +static const u8 SEName_W207B[] = _("W207B"); +static const u8 SEName_W215[] = _("W215"); +static const u8 SEName_W109[] = _("W109"); +static const u8 SEName_W173[] = _("W173"); +static const u8 SEName_W280[] = _("W280"); +static const u8 SEName_W202[] = _("W202"); +static const u8 SEName_W060B[] = _("W060B"); +static const u8 SEName_W076[] = _("W076"); +static const u8 SEName_W080[] = _("W080"); +static const u8 SEName_W100[] = _("W100"); +static const u8 SEName_W107[] = _("W107"); +static const u8 SEName_W166[] = _("W166"); +static const u8 SEName_W129[] = _("W129"); +static const u8 SEName_W115[] = _("W115"); +static const u8 SEName_W112[] = _("W112"); +static const u8 SEName_W197[] = _("W197"); +static const u8 SEName_W199[] = _("W199"); +static const u8 SEName_W236[] = _("W236"); +static const u8 SEName_W204[] = _("W204"); +static const u8 SEName_W268[] = _("W268"); +static const u8 SEName_W070[] = _("W070"); +static const u8 SEName_W063[] = _("W063"); +static const u8 SEName_W127[] = _("W127"); +static const u8 SEName_W179[] = _("W179"); +static const u8 SEName_W151[] = _("W151"); +static const u8 SEName_W201[] = _("W201"); +static const u8 SEName_W161[] = _("W161"); +static const u8 SEName_W161B[] = _("W161B"); +static const u8 SEName_W227[] = _("W227"); +static const u8 SEName_W227B[] = _("W227B"); +static const u8 SEName_W226[] = _("W226"); +static const u8 SEName_W208[] = _("W208"); +static const u8 SEName_W213[] = _("W213"); +static const u8 SEName_W213B[] = _("W213B"); +static const u8 SEName_W234[] = _("W234"); +static const u8 SEName_W260[] = _("W260"); +static const u8 SEName_W328[] = _("W328"); +static const u8 SEName_W320[] = _("W320"); +static const u8 SEName_W255[] = _("W255"); +static const u8 SEName_W291[] = _("W291"); +static const u8 SEName_W089[] = _("W089"); +static const u8 SEName_W239[] = _("W239"); +static const u8 SEName_W230[] = _("W230"); +static const u8 SEName_W281[] = _("W281"); +static const u8 SEName_W327[] = _("W327"); +static const u8 SEName_W287[] = _("W287"); +static const u8 SEName_W257[] = _("W257"); +static const u8 SEName_W253[] = _("W253"); +static const u8 SEName_W258[] = _("W258"); +static const u8 SEName_W322[] = _("W322"); +static const u8 SEName_W298[] = _("W298"); +static const u8 SEName_W287B[] = _("W287B"); +static const u8 SEName_W114[] = _("W114"); +static const u8 SEName_W063B[] = _("W063B"); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_UNK0], 7, 2, 3); +static const u8 *const gSENames[] = +{ + SEName_STOP, + SEName_KAIFUKU, + SEName_PC_LOGON, + SEName_PC_OFF, + SEName_PC_ON, + SEName_SELECT, + SEName_WIN_OPEN, + SEName_WALL_HIT, + SEName_DOOR, + SEName_KAIDAN, + SEName_DANSA, + SEName_JITENSYA, + SEName_KOUKA_L, + SEName_KOUKA_M, + SEName_KOUKA_H, + SEName_BOWA2, + SEName_POKE_DEAD, + SEName_NIGERU, + SEName_JIDO_DOA, + SEName_NAMINORI, + SEName_BAN, + SEName_PIN, + SEName_BOO, + SEName_BOWA, + SEName_JYUNI, + SEName_A, + SEName_I, + SEName_U, + SEName_E, + SEName_O, + SEName_N, + SEName_SEIKAI, + SEName_HAZURE, + SEName_EXP, + SEName_JITE_PYOKO, + SEName_MU_PACHI, + SEName_TK_KASYA, + SEName_FU_ZAKU, + SEName_FU_ZAKU2, + SEName_FU_ZUZUZU, + SEName_RU_GASHIN, + SEName_RU_GASYAN, + SEName_RU_BARI, + SEName_RU_HYUU, + SEName_KI_GASYAN, + SEName_TK_WARPIN, + SEName_TK_WARPOUT, + SEName_TU_SAA, + SEName_HI_TURUN, + SEName_TRACK_MOVE, + SEName_TRACK_STOP, + SEName_TRACK_HAIK, + SEName_TRACK_DOOR, + SEName_MOTER, + SEName_CARD, + SEName_SAVE, + SEName_KON, + SEName_KON2, + SEName_KON3, + SEName_KON4, + SEName_SUIKOMU, + SEName_NAGERU, + SEName_TOY_C, + SEName_TOY_D, + SEName_TOY_E, + SEName_TOY_F, + SEName_TOY_G, + SEName_TOY_A, + SEName_TOY_B, + SEName_TOY_C1, + SEName_MIZU, + SEName_HASHI, + SEName_DAUGI, + SEName_PINPON, + SEName_FUUSEN1, + SEName_FUUSEN2, + SEName_FUUSEN3, + SEName_TOY_KABE, + SEName_TOY_DANGO, + SEName_DOKU, + SEName_ESUKA, + SEName_T_AME, + SEName_T_AME_E, + SEName_T_OOAME, + SEName_T_OOAME_E, + SEName_T_KOAME, + SEName_T_KOAME_E, + SEName_T_KAMI, + SEName_T_KAMI2, + SEName_ELEBETA, + SEName_HINSI, + SEName_EXPMAX, + SEName_TAMAKORO, + SEName_TAMAKORO_E, + SEName_BASABASA, + SEName_REGI, + SEName_C_GAJI, + SEName_C_MAKU_U, + SEName_C_MAKU_D, + SEName_C_PASI, + SEName_C_SYU, + SEName_C_PIKON, + SEName_REAPOKE, + SEName_OP_BASYU, + SEName_BT_START, + SEName_DENDOU, + SEName_JIHANKI, + SEName_TAMA, + SEName_Z_SCROLL, + SEName_Z_PAGE, + SEName_PN_ON, + SEName_PN_OFF, + SEName_Z_SEARCH, + SEName_TAMAGO, + SEName_TB_START, + SEName_TB_KON, + SEName_TB_KARA, + SEName_BIDORO, + SEName_W085, + SEName_W085B, + SEName_W231, + SEName_W171, + SEName_W233, + SEName_W233B, + SEName_W145, + SEName_W145B, + SEName_W145C, + SEName_W240, + SEName_W015, + SEName_W081, + SEName_W081B, + SEName_W088, + SEName_W016, + SEName_W016B, + SEName_W003, + SEName_W104, + SEName_W013, + SEName_W196, + SEName_W086, + SEName_W004, + SEName_W025, + SEName_W025B, + SEName_W152, + SEName_W026, + SEName_W172, + SEName_W172B, + SEName_W053, + SEName_W007, + SEName_W092, + SEName_W221, + SEName_W221B, + SEName_W052, + SEName_W036, + SEName_W059, + SEName_W059B, + SEName_W010, + SEName_W011, + SEName_W017, + SEName_W019, + SEName_W028, + SEName_W013B, + SEName_W044, + SEName_W029, + SEName_W057, + SEName_W056, + SEName_W250, + SEName_W030, + SEName_W039, + SEName_W054, + SEName_W077, + SEName_W020, + SEName_W082, + SEName_W047, + SEName_W195, + SEName_W006, + SEName_W091, + SEName_W146, + SEName_W120, + SEName_W153, + SEName_W071B, + SEName_W071, + SEName_W103, + SEName_W062, + SEName_W062B, + SEName_W048, + SEName_W187, + SEName_W118, + SEName_W155, + SEName_W122, + SEName_W060, + SEName_W185, + SEName_W014, + SEName_W043, + SEName_W207, + SEName_W207B, + SEName_W215, + SEName_W109, + SEName_W173, + SEName_W280, + SEName_W202, + SEName_W060B, + SEName_W076, + SEName_W080, + SEName_W100, + SEName_W107, + SEName_W166, + SEName_W129, + SEName_W115, + SEName_W112, + SEName_W197, + SEName_W199, + SEName_W236, + SEName_W204, + SEName_W268, + SEName_W070, + SEName_W063, + SEName_W127, + SEName_W179, + SEName_W151, + SEName_W201, + SEName_W161, + SEName_W161B, + SEName_W227, + SEName_W227B, + SEName_W226, + SEName_W208, + SEName_W213, + SEName_W213B, + SEName_W234, + SEName_W260, + SEName_W328, + SEName_W320, + SEName_W255, + SEName_W291, + SEName_W089, + SEName_W239, + SEName_W230, + SEName_W281, + SEName_W327, + SEName_W287, + SEName_W257, + SEName_W253, + SEName_W258, + SEName_W322, + SEName_W298, + SEName_W287B, + SEName_W114, + SEName_W063B +}; - switch(gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]) - { - case 0x7F: - MenuPrint(lrStr, 7, 4); - break; - case -0x80: - MenuPrint(rlStr, 7, 4); - break; - default: - sub_80BAE78(gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]], 7, 4, 3); - break; - } - sub_80BAE78(IsSEPlaying(), 12, 8, 1); -} void sub_80BB25C(u8 taskId) { @@ -2133,7 +1932,7 @@ void sub_80BB25C(u8 taskId) zero = 0; // wtf? gUnknown_03005E98 = 0; - while(sub_8119E3C(&cryStruct, 3) == FALSE); + while (sub_8119E3C(&cryStruct, 3) == FALSE); cryStruct2.unk0 = 0; cryStruct2.unk2 = 15; @@ -2144,7 +1943,7 @@ void sub_80BB25C(u8 taskId) zero = 0; // wtf? gUnknown_03005E98 = 0; - while(ShowPokedexCryScreen(&cryStruct2, 2) == FALSE); + while (ShowPokedexCryScreen(&cryStruct2, 2) == FALSE); MenuDrawTextWindow(0, 16, 5, 19); sub_80BB494(); @@ -2155,40 +1954,40 @@ void sub_80BB25C(u8 taskId) REG_BG3CNT = 0x1D03; REG_DISPCNT = 0x1d40; m4aMPlayFadeOutTemporarily(&gMPlay_BGM, 2); - TASK.FUNC = sub_80BB3B4; + gTasks[taskId].FUNC = sub_80BB3B4; } void sub_80BB3B4(u8 taskId) { sub_8119F88(3); - if(gMain.newKeys & A_BUTTON) + if (gMain.newKeys & A_BUTTON) { sub_811A050(gUnknown_03005D34); } - if(gMain.newKeys & R_BUTTON) + if (gMain.newKeys & R_BUTTON) { StopCryAndClearCrySongs(); } - if(gMain.newAndRepeatedKeys & DPAD_UP) + if (gMain.newAndRepeatedKeys & DPAD_UP) { if(--gUnknown_03005D34 == 0) gUnknown_03005D34 = 384; // total species sub_80BB494(); } - if(gMain.newAndRepeatedKeys & DPAD_DOWN) + if (gMain.newAndRepeatedKeys & DPAD_DOWN) { if(++gUnknown_03005D34 > 384) gUnknown_03005D34 = 1; sub_80BB494(); } - if(gMain.newKeys & B_BUTTON) + if (gMain.newKeys & B_BUTTON) { REG_DISPCNT = 0x7140; REG_WIN0H = WIN_RANGE(17, 223); REG_WIN0V = WIN_RANGE(1, 31); MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - TASK.FUNC = sub_80BA258; + gTasks[taskId].FUNC = sub_80BA258; DestroyCryMeterNeedleSprite(); } } -- cgit v1.2.3 From 9933411754d7d7e6d9fee310979956eb43e78e07 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 30 Sep 2017 20:59:36 -0400 Subject: fix egregious strings.c error on build --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 0ba9cdee9..f6c20a681 100644 --- a/Makefile +++ b/Makefile @@ -113,7 +113,8 @@ $1_ASM_OBJS := $$(ASM_SRCS:%.s=build/$1/%.o) $1_DATA_ASM_OBJS := $$(DATA_ASM_SRCS:%.s=build/$1/%.o) ifeq ($$(NODEP),) -build/$1/src/%.o: c_dep = $$(shell $$(SCANINC) src/**/$$(*F).c) +build/$1/src/%.o: c_path = $$(*D)/$$(*F).c +build/$1/src/%.o: c_dep = $$(shell $$(SCANINC) $$(wildcard $$(c_path:build/$1/=))) build/$1/asm/%.o: asm_dep = $$(shell $$(SCANINC) asm/$$(*F).s) build/$1/data/%.o: asm_dep = $$(shell $$(SCANINC) data/$$(*F).s) endif -- cgit v1.2.3 From 85f505cc083bae5196f4292b2c1621fa06f14e84 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 30 Sep 2017 20:03:09 -0500 Subject: use X-macro for sound list --- src/sound_check_menu.c | 1121 +++++++++++++++++------------------------------- 1 file changed, 385 insertions(+), 736 deletions(-) diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index 438d8bd76..3cc25baf1 100644 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -1167,750 +1167,399 @@ void sub_80BB1D4(void) sub_80BAE78(IsSEPlaying(), 12, 8, 1); } -// bgm names -static const u8 BGMName_STOP[] = _("STOP"); -static const u8 BGMName_TETSUJI[] = _("TETSUJI"); -static const u8 BGMName_FIELD13[] = _("FIELD13"); -static const u8 BGMName_KACHI22[] = _("KACHI22"); -static const u8 BGMName_KACHI2[] = _("KACHI2"); -static const u8 BGMName_KACHI3[] = _("KACHI3"); -static const u8 BGMName_KACHI5[] = _("KACHI5"); -static const u8 BGMName_PCC[] = _("PCC"); -static const u8 BGMName_NIBI[] = _("NIBI"); -static const u8 BGMName_SUIKUN[] = _("SUIKUN"); -static const u8 BGMName_DOORO1[] = _("DOORO1"); -static const u8 BGMName_DOORO_X1[] = _("DOORO-X1"); -static const u8 BGMName_DOORO_X3[] = _("DOORO-X3"); -static const u8 BGMName_MACHI_S2[] = _("MACHI-S2"); -static const u8 BGMName_MACHI_S4[] = _("MACHI-S4"); -static const u8 BGMName_GIM[] = _("GIM"); -static const u8 BGMName_NAMINORI[] = _("NAMINORI"); -static const u8 BGMName_DAN01[] = _("DAN01"); -static const u8 BGMName_FANFA1[] = _("FANFA1"); -static const u8 BGMName_ME_ASA[] = _("ME-ASA"); -static const u8 BGMName_ME_BACHI[] = _("ME-BACHI"); -static const u8 BGMName_FANFA4[] = _("FANFA4"); -static const u8 BGMName_FANFA5[] = _("FANFA5"); -static const u8 BGMName_ME_WAZA[] = _("ME-WAZA"); -static const u8 BGMName_BIJYUTU[] = _("BIJYUTU"); -static const u8 BGMName_DOORO_X4[] = _("DOORO-X4"); -static const u8 BGMName_FUNE_KAN[] = _("FUNE-KAN"); -static const u8 BGMName_ME_SHINKA[] = _("ME-SHINKA"); -static const u8 BGMName_SHINKA[] = _("SHINKA"); -static const u8 BGMName_ME_WASURE[] = _("ME-WASURE"); -static const u8 BGMName_SYOUJOEYE[] = _("SYOUJOEYE"); -static const u8 BGMName_BOYEYE[] = _("BOYEYE"); -static const u8 BGMName_DAN02[] = _("DAN02"); -static const u8 BGMName_MACHI_S3[] = _("MACHI-S3"); -static const u8 BGMName_ODAMAKI[] = _("ODAMAKI"); -static const u8 BGMName_B_TOWER[] = _("B-TOWER"); -static const u8 BGMName_SWIMEYE[] = _("SWIMEYE"); -static const u8 BGMName_DAN03[] = _("DAN03"); -static const u8 BGMName_ME_KINOMI[] = _("ME-KINOMI"); -static const u8 BGMName_ME_TAMA[] = _("ME-TAMA"); -static const u8 BGMName_ME_B_BIG[] = _("ME-B-BIG"); -static const u8 BGMName_ME_B_SMALL[] = _("ME-B-SMALL"); -static const u8 BGMName_ME_ZANNEN[] = _("ME-ZANNEN"); -static const u8 BGMName_BD_TIME[] = _("BD-TIME"); -static const u8 BGMName_TEST1[] = _("TEST1"); -static const u8 BGMName_TEST2[] = _("TEST2"); -static const u8 BGMName_TEST3[] = _("TEST3"); -static const u8 BGMName_TEST4[] = _("TEST4"); -static const u8 BGMName_TEST[] = _("TEST"); -static const u8 BGMName_GOMACHI0[] = _("GOMACHI0"); -static const u8 BGMName_GOTOWN[] = _("GOTOWN"); -static const u8 BGMName_POKECEN[] = _("POKECEN"); -static const u8 BGMName_NEXTROAD[] = _("NEXTROAD"); -static const u8 BGMName_GRANROAD[] = _("GRANROAD"); -static const u8 BGMName_CYCLING[] = _("CYCLING"); -static const u8 BGMName_FRIENDLY[] = _("FRIENDLY"); -static const u8 BGMName_MISHIRO[] = _("MISHIRO"); -static const u8 BGMName_TOZAN[] = _("TOZAN"); -static const u8 BGMName_GIRLEYE[] = _("GIRLEYE"); -static const u8 BGMName_MINAMO[] = _("MINAMO"); -static const u8 BGMName_ASHROAD[] = _("ASHROAD"); -static const u8 BGMName_EVENT0[] = _("EVENT0"); -static const u8 BGMName_DEEPDEEP[] = _("DEEPDEEP"); -static const u8 BGMName_KACHI1[] = _("KACHI1"); -static const u8 BGMName_TITLE3[] = _("TITLE3"); -static const u8 BGMName_DEMO1[] = _("DEMO1"); -static const u8 BGMName_GIRL_SUP[] = _("GIRL-SUP"); -static const u8 BGMName_HAGESHII[] = _("HAGESHII"); -static const u8 BGMName_KAKKOII[] = _("KAKKOII"); -static const u8 BGMName_KAZANBAI[] = _("KAZANBAI"); -static const u8 BGMName_AQA_0[] = _("AQA-0"); -static const u8 BGMName_TSURETEK[] = _("TSURETEK"); -static const u8 BGMName_BOY_SUP[] = _("BOY-SUP"); -static const u8 BGMName_RAINBOW[] = _("RAINBOW"); -static const u8 BGMName_AYASII[] = _("AYASII"); -static const u8 BGMName_KACHI4[] = _("KACHI4"); -static const u8 BGMName_ROPEWAY[] = _("ROPEWAY"); -static const u8 BGMName_CASINO[] = _("CASINO"); -static const u8 BGMName_HIGHTOWN[] = _("HIGHTOWN"); -static const u8 BGMName_SAFARI[] = _("SAFARI"); -static const u8 BGMName_C_ROAD[] = _("C-ROAD"); -static const u8 BGMName_AJITO[] = _("AJITO"); -static const u8 BGMName_M_BOAT[] = _("M-BOAT"); -static const u8 BGMName_M_DUNGON[] = _("M-DUNGON"); -static const u8 BGMName_FINECITY[] = _("FINECITY"); -static const u8 BGMName_MACHUPI[] = _("MACHUPI"); -static const u8 BGMName_P_SCHOOL[] = _("P-SCHOOL"); -static const u8 BGMName_DENDOU[] = _("DENDOU"); -static const u8 BGMName_TONEKUSA[] = _("TONEKUSA"); -static const u8 BGMName_MABOROSI[] = _("MABOROSI"); -static const u8 BGMName_CON_FAN[] = _("CON-FAN"); -static const u8 BGMName_CONTEST0[] = _("CONTEST0"); -static const u8 BGMName_MGM0[] = _("MGM0"); -static const u8 BGMName_T_BATTLE[] = _("T-BATTLE"); -static const u8 BGMName_OOAME[] = _("OOAME"); -static const u8 BGMName_HIDERI[] = _("HIDERI"); -static const u8 BGMName_RUNECITY[] = _("RUNECITY"); -static const u8 BGMName_CON_K[] = _("CON-K"); -static const u8 BGMName_EIKOU_R[] = _("EIKOU-R"); -static const u8 BGMName_KARAKURI[] = _("KARAKURI"); -static const u8 BGMName_HUTAGO[] = _("HUTAGO"); -static const u8 BGMName_SITENNOU[] = _("SITENNOU"); -static const u8 BGMName_YAMA_EYE[] = _("YAMA-EYE"); -static const u8 BGMName_CONLOBBY[] = _("CONLOBBY"); -static const u8 BGMName_INTER_V[] = _("INTER-V"); -static const u8 BGMName_DAIGO[] = _("DAIGO"); -static const u8 BGMName_THANKFOR[] = _("THANKFOR"); -static const u8 BGMName_END[] = _("END"); -static const u8 BGMName_BATTLE27[] = _("BATTLE27"); -static const u8 BGMName_BATTLE31[] = _("BATTLE31"); -static const u8 BGMName_BATTLE20[] = _("BATTLE20"); -static const u8 BGMName_BATTLE32[] = _("BATTLE32"); -static const u8 BGMName_BATTLE33[] = _("BATTLE33"); -static const u8 BGMName_BATTLE36[] = _("BATTLE36"); -static const u8 BGMName_BATTLE34[] = _("BATTLE34"); -static const u8 BGMName_BATTLE35[] = _("BATTLE35"); -static const u8 BGMName_BATTLE38[] = _("BATTLE38"); -static const u8 BGMName_BATTLE30[] = _("BATTLE30"); - +#define SOUND_LIST_BGM \ + X(BGM_STOP, "STOP") \ + X(BGM_TETSUJI, "TETSUJI") \ + X(BGM_FIELD13, "FIELD13") \ + X(BGM_KACHI22, "KACHI22") \ + X(BGM_KACHI2, "KACHI2") \ + X(BGM_KACHI3, "KACHI3") \ + X(BGM_KACHI5, "KACHI5") \ + X(BGM_PCC, "PCC") \ + X(BGM_NIBI, "NIBI") \ + X(BGM_SUIKUN, "SUIKUN") \ + X(BGM_DOORO1, "DOORO1") \ + X(BGM_DOORO_X1, "DOORO-X1") \ + X(BGM_DOORO_X3, "DOORO-X3") \ + X(BGM_MACHI_S2, "MACHI-S2") \ + X(BGM_MACHI_S4, "MACHI-S4") \ + X(BGM_GIM, "GIM") \ + X(BGM_NAMINORI, "NAMINORI") \ + X(BGM_DAN01, "DAN01") \ + X(BGM_FANFA1, "FANFA1") \ + X(BGM_ME_ASA, "ME-ASA") \ + X(BGM_ME_BACHI, "ME-BACHI") \ + X(BGM_FANFA4, "FANFA4") \ + X(BGM_FANFA5, "FANFA5") \ + X(BGM_ME_WAZA, "ME-WAZA") \ + X(BGM_BIJYUTU, "BIJYUTU") \ + X(BGM_DOORO_X4, "DOORO-X4") \ + X(BGM_FUNE_KAN, "FUNE-KAN") \ + X(BGM_ME_SHINKA, "ME-SHINKA") \ + X(BGM_SHINKA, "SHINKA") \ + X(BGM_ME_WASURE, "ME-WASURE") \ + X(BGM_SYOUJOEYE, "SYOUJOEYE") \ + X(BGM_BOYEYE, "BOYEYE") \ + X(BGM_DAN02, "DAN02") \ + X(BGM_MACHI_S3, "MACHI-S3") \ + X(BGM_ODAMAKI, "ODAMAKI") \ + X(BGM_B_TOWER, "B-TOWER") \ + X(BGM_SWIMEYE, "SWIMEYE") \ + X(BGM_DAN03, "DAN03") \ + X(BGM_ME_KINOMI, "ME-KINOMI") \ + X(BGM_ME_TAMA, "ME-TAMA") \ + X(BGM_ME_B_BIG, "ME-B-BIG") \ + X(BGM_ME_B_SMALL, "ME-B-SMALL") \ + X(BGM_ME_ZANNEN, "ME-ZANNEN") \ + X(BGM_BD_TIME, "BD-TIME") \ + X(BGM_TEST1, "TEST1") \ + X(BGM_TEST2, "TEST2") \ + X(BGM_TEST3, "TEST3") \ + X(BGM_TEST4, "TEST4") \ + X(BGM_TEST, "TEST") \ + X(BGM_GOMACHI0, "GOMACHI0") \ + X(BGM_GOTOWN, "GOTOWN") \ + X(BGM_POKECEN, "POKECEN") \ + X(BGM_NEXTROAD, "NEXTROAD") \ + X(BGM_GRANROAD, "GRANROAD") \ + X(BGM_CYCLING, "CYCLING") \ + X(BGM_FRIENDLY, "FRIENDLY") \ + X(BGM_MISHIRO, "MISHIRO") \ + X(BGM_TOZAN, "TOZAN") \ + X(BGM_GIRLEYE, "GIRLEYE") \ + X(BGM_MINAMO, "MINAMO") \ + X(BGM_ASHROAD, "ASHROAD") \ + X(BGM_EVENT0, "EVENT0") \ + X(BGM_DEEPDEEP, "DEEPDEEP") \ + X(BGM_KACHI1, "KACHI1") \ + X(BGM_TITLE3, "TITLE3") \ + X(BGM_DEMO1, "DEMO1") \ + X(BGM_GIRL_SUP, "GIRL-SUP") \ + X(BGM_HAGESHII, "HAGESHII") \ + X(BGM_KAKKOII, "KAKKOII") \ + X(BGM_KAZANBAI, "KAZANBAI") \ + X(BGM_AQA_0, "AQA-0") \ + X(BGM_TSURETEK, "TSURETEK") \ + X(BGM_BOY_SUP, "BOY-SUP") \ + X(BGM_RAINBOW, "RAINBOW") \ + X(BGM_AYASII, "AYASII") \ + X(BGM_KACHI4, "KACHI4") \ + X(BGM_ROPEWAY, "ROPEWAY") \ + X(BGM_CASINO, "CASINO") \ + X(BGM_HIGHTOWN, "HIGHTOWN") \ + X(BGM_SAFARI, "SAFARI") \ + X(BGM_C_ROAD, "C-ROAD") \ + X(BGM_AJITO, "AJITO") \ + X(BGM_M_BOAT, "M-BOAT") \ + X(BGM_M_DUNGON, "M-DUNGON") \ + X(BGM_FINECITY, "FINECITY") \ + X(BGM_MACHUPI, "MACHUPI") \ + X(BGM_P_SCHOOL, "P-SCHOOL") \ + X(BGM_DENDOU, "DENDOU") \ + X(BGM_TONEKUSA, "TONEKUSA") \ + X(BGM_MABOROSI, "MABOROSI") \ + X(BGM_CON_FAN, "CON-FAN") \ + X(BGM_CONTEST0, "CONTEST0") \ + X(BGM_MGM0, "MGM0") \ + X(BGM_T_BATTLE, "T-BATTLE") \ + X(BGM_OOAME, "OOAME") \ + X(BGM_HIDERI, "HIDERI") \ + X(BGM_RUNECITY, "RUNECITY") \ + X(BGM_CON_K, "CON-K") \ + X(BGM_EIKOU_R, "EIKOU-R") \ + X(BGM_KARAKURI, "KARAKURI") \ + X(BGM_HUTAGO, "HUTAGO") \ + X(BGM_SITENNOU, "SITENNOU") \ + X(BGM_YAMA_EYE, "YAMA-EYE") \ + X(BGM_CONLOBBY, "CONLOBBY") \ + X(BGM_INTER_V, "INTER-V") \ + X(BGM_DAIGO, "DAIGO") \ + X(BGM_THANKFOR, "THANKFOR") \ + X(BGM_END, "END") \ + X(BGM_BATTLE27, "BATTLE27") \ + X(BGM_BATTLE31, "BATTLE31") \ + X(BGM_BATTLE20, "BATTLE20") \ + X(BGM_BATTLE32, "BATTLE32") \ + X(BGM_BATTLE33, "BATTLE33") \ + X(BGM_BATTLE36, "BATTLE36") \ + X(BGM_BATTLE34, "BATTLE34") \ + X(BGM_BATTLE35, "BATTLE35") \ + X(BGM_BATTLE38, "BATTLE38") \ + X(BGM_BATTLE30, "BATTLE30") + +#define SOUND_LIST_SE \ + X(SE_STOP, "STOP") \ + X(SE_KAIFUKU, "KAIFUKU") \ + X(SE_PC_LOGON, "PC-LOGON") \ + X(SE_PC_OFF, "PC-OFF") \ + X(SE_PC_ON, "PC-ON") \ + X(SE_SELECT, "SELECT") \ + X(SE_WIN_OPEN, "WIN-OPEN") \ + X(SE_WALL_HIT, "WALL-HIT") \ + X(SE_DOOR, "DOOR") \ + X(SE_KAIDAN, "KAIDAN") \ + X(SE_DANSA, "DANSA") \ + X(SE_JITENSYA, "JITENSYA") \ + X(SE_KOUKA_L, "KOUKA-L") \ + X(SE_KOUKA_M, "KOUKA-M") \ + X(SE_KOUKA_H, "KOUKA-H") \ + X(SE_BOWA2, "BOWA2") \ + X(SE_POKE_DEAD, "POKE-DEAD") \ + X(SE_NIGERU, "NIGERU") \ + X(SE_JIDO_DOA, "JIDO-DOA") \ + X(SE_NAMINORI, "NAMINORI") \ + X(SE_BAN, "BAN") \ + X(SE_PIN, "PIN") \ + X(SE_BOO, "BOO") \ + X(SE_BOWA, "BOWA") \ + X(SE_JYUNI, "JYUNI") \ + X(SE_A, "A") \ + X(SE_I, "I") \ + X(SE_U, "U") \ + X(SE_E, "E") \ + X(SE_O, "O") \ + X(SE_N, "N") \ + X(SE_SEIKAI, "SEIKAI") \ + X(SE_HAZURE, "HAZURE") \ + X(SE_EXP, "EXP") \ + X(SE_JITE_PYOKO, "JITE-PYOKO") \ + X(SE_MU_PACHI, "MU-PACHI") \ + X(SE_TK_KASYA, "TK-KASYA") \ + X(SE_FU_ZAKU, "FU-ZAKU") \ + X(SE_FU_ZAKU2, "FU-ZAKU2") \ + X(SE_FU_ZUZUZU, "FU-ZUZUZU") \ + X(SE_RU_GASHIN, "RU-GASHIN") \ + X(SE_RU_GASYAN, "RU-GASYAN") \ + X(SE_RU_BARI, "RU-BARI") \ + X(SE_RU_HYUU, "RU-HYUU") \ + X(SE_KI_GASYAN, "KI-GASYAN") \ + X(SE_TK_WARPIN, "TK-WARPIN") \ + X(SE_TK_WARPOUT, "TK-WARPOUT") \ + X(SE_TU_SAA, "TU-SAA") \ + X(SE_HI_TURUN, "HI-TURUN") \ + X(SE_TRACK_MOVE, "TRACK-MOVE") \ + X(SE_TRACK_STOP, "TRACK-STOP") \ + X(SE_TRACK_HAIK, "TRACK-HAIK") \ + X(SE_TRACK_DOOR, "TRACK-DOOR") \ + X(SE_MOTER, "MOTER") \ + X(SE_CARD, "CARD") \ + X(SE_SAVE, "SAVE") \ + X(SE_KON, "KON") \ + X(SE_KON2, "KON2") \ + X(SE_KON3, "KON3") \ + X(SE_KON4, "KON4") \ + X(SE_SUIKOMU, "SUIKOMU") \ + X(SE_NAGERU, "NAGERU") \ + X(SE_TOY_C, "TOY-C") \ + X(SE_TOY_D, "TOY-D") \ + X(SE_TOY_E, "TOY-E") \ + X(SE_TOY_F, "TOY-F") \ + X(SE_TOY_G, "TOY-G") \ + X(SE_TOY_A, "TOY-A") \ + X(SE_TOY_B, "TOY-B") \ + X(SE_TOY_C1, "TOY-C1") \ + X(SE_MIZU, "MIZU") \ + X(SE_HASHI, "HASHI") \ + X(SE_DAUGI, "DAUGI") \ + X(SE_PINPON, "PINPON") \ + X(SE_FUUSEN1, "FUUSEN1") \ + X(SE_FUUSEN2, "FUUSEN2") \ + X(SE_FUUSEN3, "FUUSEN3") \ + X(SE_TOY_KABE, "TOY-KABE") \ + X(SE_TOY_DANGO, "TOY-DANGO") \ + X(SE_DOKU, "DOKU") \ + X(SE_ESUKA, "ESUKA") \ + X(SE_T_AME, "T-AME") \ + X(SE_T_AME_E, "T-AME-E") \ + X(SE_T_OOAME, "T-OOAME") \ + X(SE_T_OOAME_E, "T-OOAME-E") \ + X(SE_T_KOAME, "T-KOAME") \ + X(SE_T_KOAME_E, "T-KOAME-E") \ + X(SE_T_KAMI, "T-KAMI") \ + X(SE_T_KAMI2, "T-KAMI2") \ + X(SE_ELEBETA, "ELEBETA") \ + X(SE_HINSI, "HINSI") \ + X(SE_EXPMAX, "EXPMAX") \ + X(SE_TAMAKORO, "TAMAKORO") \ + X(SE_TAMAKORO_E, "TAMAKORO-E") \ + X(SE_BASABASA, "BASABASA") \ + X(SE_REGI, "REGI") \ + X(SE_C_GAJI, "C-GAJI") \ + X(SE_C_MAKU_U, "C-MAKU-U") \ + X(SE_C_MAKU_D, "C-MAKU-D") \ + X(SE_C_PASI, "C-PASI") \ + X(SE_C_SYU, "C-SYU") \ + X(SE_C_PIKON, "C-PIKON") \ + X(SE_REAPOKE, "REAPOKE") \ + X(SE_OP_BASYU, "OP-BASYU") \ + X(SE_BT_START, "BT-START") \ + X(SE_DENDOU, "DENDOU") \ + X(SE_JIHANKI, "JIHANKI") \ + X(SE_TAMA, "TAMA") \ + X(SE_Z_SCROLL, "Z-SCROLL") \ + X(SE_Z_PAGE, "Z-PAGE") \ + X(SE_PN_ON, "PN-ON") \ + X(SE_PN_OFF, "PN-OFF") \ + X(SE_Z_SEARCH, "Z-SEARCH") \ + X(SE_TAMAGO, "TAMAGO") \ + X(SE_TB_START, "TB-START") \ + X(SE_TB_KON, "TB-KON") \ + X(SE_TB_KARA, "TB-KARA") \ + X(SE_BIDORO, "BIDORO") \ + X(SE_W085, "W085") \ + X(SE_W085B, "W085B") \ + X(SE_W231, "W231") \ + X(SE_W171, "W171") \ + X(SE_W233, "W233") \ + X(SE_W233B, "W233B") \ + X(SE_W145, "W145") \ + X(SE_W145B, "W145B") \ + X(SE_W145C, "W145C") \ + X(SE_W240, "W240") \ + X(SE_W015, "W015") \ + X(SE_W081, "W081") \ + X(SE_W081B, "W081B") \ + X(SE_W088, "W088") \ + X(SE_W016, "W016") \ + X(SE_W016B, "W016B") \ + X(SE_W003, "W003") \ + X(SE_W104, "W104") \ + X(SE_W013, "W013") \ + X(SE_W196, "W196") \ + X(SE_W086, "W086") \ + X(SE_W004, "W004") \ + X(SE_W025, "W025") \ + X(SE_W025B, "W025B") \ + X(SE_W152, "W152") \ + X(SE_W026, "W026") \ + X(SE_W172, "W172") \ + X(SE_W172B, "W172B") \ + X(SE_W053, "W053") \ + X(SE_W007, "W007") \ + X(SE_W092, "W092") \ + X(SE_W221, "W221") \ + X(SE_W221B, "W221B") \ + X(SE_W052, "W052") \ + X(SE_W036, "W036") \ + X(SE_W059, "W059") \ + X(SE_W059B, "W059B") \ + X(SE_W010, "W010") \ + X(SE_W011, "W011") \ + X(SE_W017, "W017") \ + X(SE_W019, "W019") \ + X(SE_W028, "W028") \ + X(SE_W013B, "W013B") \ + X(SE_W044, "W044") \ + X(SE_W029, "W029") \ + X(SE_W057, "W057") \ + X(SE_W056, "W056") \ + X(SE_W250, "W250") \ + X(SE_W030, "W030") \ + X(SE_W039, "W039") \ + X(SE_W054, "W054") \ + X(SE_W077, "W077") \ + X(SE_W020, "W020") \ + X(SE_W082, "W082") \ + X(SE_W047, "W047") \ + X(SE_W195, "W195") \ + X(SE_W006, "W006") \ + X(SE_W091, "W091") \ + X(SE_W146, "W146") \ + X(SE_W120, "W120") \ + X(SE_W153, "W153") \ + X(SE_W071B, "W071B") \ + X(SE_W071, "W071") \ + X(SE_W103, "W103") \ + X(SE_W062, "W062") \ + X(SE_W062B, "W062B") \ + X(SE_W048, "W048") \ + X(SE_W187, "W187") \ + X(SE_W118, "W118") \ + X(SE_W155, "W155") \ + X(SE_W122, "W122") \ + X(SE_W060, "W060") \ + X(SE_W185, "W185") \ + X(SE_W014, "W014") \ + X(SE_W043, "W043") \ + X(SE_W207, "W207") \ + X(SE_W207B, "W207B") \ + X(SE_W215, "W215") \ + X(SE_W109, "W109") \ + X(SE_W173, "W173") \ + X(SE_W280, "W280") \ + X(SE_W202, "W202") \ + X(SE_W060B, "W060B") \ + X(SE_W076, "W076") \ + X(SE_W080, "W080") \ + X(SE_W100, "W100") \ + X(SE_W107, "W107") \ + X(SE_W166, "W166") \ + X(SE_W129, "W129") \ + X(SE_W115, "W115") \ + X(SE_W112, "W112") \ + X(SE_W197, "W197") \ + X(SE_W199, "W199") \ + X(SE_W236, "W236") \ + X(SE_W204, "W204") \ + X(SE_W268, "W268") \ + X(SE_W070, "W070") \ + X(SE_W063, "W063") \ + X(SE_W127, "W127") \ + X(SE_W179, "W179") \ + X(SE_W151, "W151") \ + X(SE_W201, "W201") \ + X(SE_W161, "W161") \ + X(SE_W161B, "W161B") \ + X(SE_W227, "W227") \ + X(SE_W227B, "W227B") \ + X(SE_W226, "W226") \ + X(SE_W208, "W208") \ + X(SE_W213, "W213") \ + X(SE_W213B, "W213B") \ + X(SE_W234, "W234") \ + X(SE_W260, "W260") \ + X(SE_W328, "W328") \ + X(SE_W320, "W320") \ + X(SE_W255, "W255") \ + X(SE_W291, "W291") \ + X(SE_W089, "W089") \ + X(SE_W239, "W239") \ + X(SE_W230, "W230") \ + X(SE_W281, "W281") \ + X(SE_W327, "W327") \ + X(SE_W287, "W287") \ + X(SE_W257, "W257") \ + X(SE_W253, "W253") \ + X(SE_W258, "W258") \ + X(SE_W322, "W322") \ + X(SE_W298, "W298") \ + X(SE_W287B, "W287B") \ + X(SE_W114, "W114") \ + X(SE_W063B, "W063B") + +// Create BGM list +#define X(songId, name) static const u8 sBGMName_##songId[] = _(name); +SOUND_LIST_BGM +#undef X + +#define X(songId, name) sBGMName_##songId, static const u8 *const gBGMNames[] = { - BGMName_STOP, - BGMName_TETSUJI, - BGMName_FIELD13, - BGMName_KACHI22, - BGMName_KACHI2, - BGMName_KACHI3, - BGMName_KACHI5, - BGMName_PCC, - BGMName_NIBI, - BGMName_SUIKUN, - BGMName_DOORO1, - BGMName_DOORO_X1, - BGMName_DOORO_X3, - BGMName_MACHI_S2, - BGMName_MACHI_S4, - BGMName_GIM, - BGMName_NAMINORI, - BGMName_DAN01, - BGMName_FANFA1, - BGMName_ME_ASA, - BGMName_ME_BACHI, - BGMName_FANFA4, - BGMName_FANFA5, - BGMName_ME_WAZA, - BGMName_BIJYUTU, - BGMName_DOORO_X4, - BGMName_FUNE_KAN, - BGMName_ME_SHINKA, - BGMName_SHINKA, - BGMName_ME_WASURE, - BGMName_SYOUJOEYE, - BGMName_BOYEYE, - BGMName_DAN02, - BGMName_MACHI_S3, - BGMName_ODAMAKI, - BGMName_B_TOWER, - BGMName_SWIMEYE, - BGMName_DAN03, - BGMName_ME_KINOMI, - BGMName_ME_TAMA, - BGMName_ME_B_BIG, - BGMName_ME_B_SMALL, - BGMName_ME_ZANNEN, - BGMName_BD_TIME, - BGMName_TEST1, - BGMName_TEST2, - BGMName_TEST3, - BGMName_TEST4, - BGMName_TEST, - BGMName_GOMACHI0, - BGMName_GOTOWN, - BGMName_POKECEN, - BGMName_NEXTROAD, - BGMName_GRANROAD, - BGMName_CYCLING, - BGMName_FRIENDLY, - BGMName_MISHIRO, - BGMName_TOZAN, - BGMName_GIRLEYE, - BGMName_MINAMO, - BGMName_ASHROAD, - BGMName_EVENT0, - BGMName_DEEPDEEP, - BGMName_KACHI1, - BGMName_TITLE3, - BGMName_DEMO1, - BGMName_GIRL_SUP, - BGMName_HAGESHII, - BGMName_KAKKOII, - BGMName_KAZANBAI, - BGMName_AQA_0, - BGMName_TSURETEK, - BGMName_BOY_SUP, - BGMName_RAINBOW, - BGMName_AYASII, - BGMName_KACHI4, - BGMName_ROPEWAY, - BGMName_CASINO, - BGMName_HIGHTOWN, - BGMName_SAFARI, - BGMName_C_ROAD, - BGMName_AJITO, - BGMName_M_BOAT, - BGMName_M_DUNGON, - BGMName_FINECITY, - BGMName_MACHUPI, - BGMName_P_SCHOOL, - BGMName_DENDOU, - BGMName_TONEKUSA, - BGMName_MABOROSI, - BGMName_CON_FAN, - BGMName_CONTEST0, - BGMName_MGM0, - BGMName_T_BATTLE, - BGMName_OOAME, - BGMName_HIDERI, - BGMName_RUNECITY, - BGMName_CON_K, - BGMName_EIKOU_R, - BGMName_KARAKURI, - BGMName_HUTAGO, - BGMName_SITENNOU, - BGMName_YAMA_EYE, - BGMName_CONLOBBY, - BGMName_INTER_V, - BGMName_DAIGO, - BGMName_THANKFOR, - BGMName_END, - BGMName_BATTLE27, - BGMName_BATTLE31, - BGMName_BATTLE20, - BGMName_BATTLE32, - BGMName_BATTLE33, - BGMName_BATTLE36, - BGMName_BATTLE34, - BGMName_BATTLE35, - BGMName_BATTLE38, - BGMName_BATTLE30 +SOUND_LIST_BGM }; +#undef X -// SE names -static const u8 SEName_STOP[] = _("STOP"); -static const u8 SEName_KAIFUKU[] = _("KAIFUKU"); -static const u8 SEName_PC_LOGON[] = _("PC-LOGON"); -static const u8 SEName_PC_OFF[] = _("PC-OFF"); -static const u8 SEName_PC_ON[] = _("PC-ON"); -static const u8 SEName_SELECT[] = _("SELECT"); -static const u8 SEName_WIN_OPEN[] = _("WIN-OPEN"); -static const u8 SEName_WALL_HIT[] = _("WALL-HIT"); -static const u8 SEName_DOOR[] = _("DOOR"); -static const u8 SEName_KAIDAN[] = _("KAIDAN"); -static const u8 SEName_DANSA[] = _("DANSA"); -static const u8 SEName_JITENSYA[] = _("JITENSYA"); -static const u8 SEName_KOUKA_L[] = _("KOUKA-L"); -static const u8 SEName_KOUKA_M[] = _("KOUKA-M"); -static const u8 SEName_KOUKA_H[] = _("KOUKA-H"); -static const u8 SEName_BOWA2[] = _("BOWA2"); -static const u8 SEName_POKE_DEAD[] = _("POKE-DEAD"); -static const u8 SEName_NIGERU[] = _("NIGERU"); -static const u8 SEName_JIDO_DOA[] = _("JIDO-DOA"); -static const u8 SEName_NAMINORI[] = _("NAMINORI"); -static const u8 SEName_BAN[] = _("BAN"); -static const u8 SEName_PIN[] = _("PIN"); -static const u8 SEName_BOO[] = _("BOO"); -static const u8 SEName_BOWA[] = _("BOWA"); -static const u8 SEName_JYUNI[] = _("JYUNI"); -static const u8 SEName_A[] = _("A"); -static const u8 SEName_I[] = _("I"); -static const u8 SEName_U[] = _("U"); -static const u8 SEName_E[] = _("E"); -static const u8 SEName_O[] = _("O"); -static const u8 SEName_N[] = _("N"); -static const u8 SEName_SEIKAI[] = _("SEIKAI"); -static const u8 SEName_HAZURE[] = _("HAZURE"); -static const u8 SEName_EXP[] = _("EXP"); -static const u8 SEName_JITE_PYOKO[] = _("JITE-PYOKO"); -static const u8 SEName_MU_PACHI[] = _("MU-PACHI"); -static const u8 SEName_TK_KASYA[] = _("TK-KASYA"); -static const u8 SEName_FU_ZAKU[] = _("FU-ZAKU"); -static const u8 SEName_FU_ZAKU2[] = _("FU-ZAKU2"); -static const u8 SEName_FU_ZUZUZU[] = _("FU-ZUZUZU"); -static const u8 SEName_RU_GASHIN[] = _("RU-GASHIN"); -static const u8 SEName_RU_GASYAN[] = _("RU-GASYAN"); -static const u8 SEName_RU_BARI[] = _("RU-BARI"); -static const u8 SEName_RU_HYUU[] = _("RU-HYUU"); -static const u8 SEName_KI_GASYAN[] = _("KI-GASYAN"); -static const u8 SEName_TK_WARPIN[] = _("TK-WARPIN"); -static const u8 SEName_TK_WARPOUT[] = _("TK-WARPOUT"); -static const u8 SEName_TU_SAA[] = _("TU-SAA"); -static const u8 SEName_HI_TURUN[] = _("HI-TURUN"); -static const u8 SEName_TRACK_MOVE[] = _("TRACK-MOVE"); -static const u8 SEName_TRACK_STOP[] = _("TRACK-STOP"); -static const u8 SEName_TRACK_HAIK[] = _("TRACK-HAIK"); -static const u8 SEName_TRACK_DOOR[] = _("TRACK-DOOR"); -static const u8 SEName_MOTER[] = _("MOTER"); -static const u8 SEName_CARD[] = _("CARD"); -static const u8 SEName_SAVE[] = _("SAVE"); -static const u8 SEName_KON[] = _("KON"); -static const u8 SEName_KON2[] = _("KON2"); -static const u8 SEName_KON3[] = _("KON3"); -static const u8 SEName_KON4[] = _("KON4"); -static const u8 SEName_SUIKOMU[] = _("SUIKOMU"); -static const u8 SEName_NAGERU[] = _("NAGERU"); -static const u8 SEName_TOY_C[] = _("TOY-C"); -static const u8 SEName_TOY_D[] = _("TOY-D"); -static const u8 SEName_TOY_E[] = _("TOY-E"); -static const u8 SEName_TOY_F[] = _("TOY-F"); -static const u8 SEName_TOY_G[] = _("TOY-G"); -static const u8 SEName_TOY_A[] = _("TOY-A"); -static const u8 SEName_TOY_B[] = _("TOY-B"); -static const u8 SEName_TOY_C1[] = _("TOY-C1"); -static const u8 SEName_MIZU[] = _("MIZU"); -static const u8 SEName_HASHI[] = _("HASHI"); -static const u8 SEName_DAUGI[] = _("DAUGI"); -static const u8 SEName_PINPON[] = _("PINPON"); -static const u8 SEName_FUUSEN1[] = _("FUUSEN1"); -static const u8 SEName_FUUSEN2[] = _("FUUSEN2"); -static const u8 SEName_FUUSEN3[] = _("FUUSEN3"); -static const u8 SEName_TOY_KABE[] = _("TOY-KABE"); -static const u8 SEName_TOY_DANGO[] = _("TOY-DANGO"); -static const u8 SEName_DOKU[] = _("DOKU"); -static const u8 SEName_ESUKA[] = _("ESUKA"); -static const u8 SEName_T_AME[] = _("T-AME"); -static const u8 SEName_T_AME_E[] = _("T-AME-E"); -static const u8 SEName_T_OOAME[] = _("T-OOAME"); -static const u8 SEName_T_OOAME_E[] = _("T-OOAME-E"); -static const u8 SEName_T_KOAME[] = _("T-KOAME"); -static const u8 SEName_T_KOAME_E[] = _("T-KOAME-E"); -static const u8 SEName_T_KAMI[] = _("T-KAMI"); -static const u8 SEName_T_KAMI2[] = _("T-KAMI2"); -static const u8 SEName_ELEBETA[] = _("ELEBETA"); -static const u8 SEName_HINSI[] = _("HINSI"); -static const u8 SEName_EXPMAX[] = _("EXPMAX"); -static const u8 SEName_TAMAKORO[] = _("TAMAKORO"); -static const u8 SEName_TAMAKORO_E[] = _("TAMAKORO-E"); -static const u8 SEName_BASABASA[] = _("BASABASA"); -static const u8 SEName_REGI[] = _("REGI"); -static const u8 SEName_C_GAJI[] = _("C-GAJI"); -static const u8 SEName_C_MAKU_U[] = _("C-MAKU-U"); -static const u8 SEName_C_MAKU_D[] = _("C-MAKU-D"); -static const u8 SEName_C_PASI[] = _("C-PASI"); -static const u8 SEName_C_SYU[] = _("C-SYU"); -static const u8 SEName_C_PIKON[] = _("C-PIKON"); -static const u8 SEName_REAPOKE[] = _("REAPOKE"); -static const u8 SEName_OP_BASYU[] = _("OP-BASYU"); -static const u8 SEName_BT_START[] = _("BT-START"); -static const u8 SEName_DENDOU[] = _("DENDOU"); -static const u8 SEName_JIHANKI[] = _("JIHANKI"); -static const u8 SEName_TAMA[] = _("TAMA"); -static const u8 SEName_Z_SCROLL[] = _("Z-SCROLL"); -static const u8 SEName_Z_PAGE[] = _("Z-PAGE"); -static const u8 SEName_PN_ON[] = _("PN-ON"); -static const u8 SEName_PN_OFF[] = _("PN-OFF"); -static const u8 SEName_Z_SEARCH[] = _("Z-SEARCH"); -static const u8 SEName_TAMAGO[] = _("TAMAGO"); -static const u8 SEName_TB_START[] = _("TB-START"); -static const u8 SEName_TB_KON[] = _("TB-KON"); -static const u8 SEName_TB_KARA[] = _("TB-KARA"); -static const u8 SEName_BIDORO[] = _("BIDORO"); -static const u8 SEName_W085[] = _("W085"); -static const u8 SEName_W085B[] = _("W085B"); -static const u8 SEName_W231[] = _("W231"); -static const u8 SEName_W171[] = _("W171"); -static const u8 SEName_W233[] = _("W233"); -static const u8 SEName_W233B[] = _("W233B"); -static const u8 SEName_W145[] = _("W145"); -static const u8 SEName_W145B[] = _("W145B"); -static const u8 SEName_W145C[] = _("W145C"); -static const u8 SEName_W240[] = _("W240"); -static const u8 SEName_W015[] = _("W015"); -static const u8 SEName_W081[] = _("W081"); -static const u8 SEName_W081B[] = _("W081B"); -static const u8 SEName_W088[] = _("W088"); -static const u8 SEName_W016[] = _("W016"); -static const u8 SEName_W016B[] = _("W016B"); -static const u8 SEName_W003[] = _("W003"); -static const u8 SEName_W104[] = _("W104"); -static const u8 SEName_W013[] = _("W013"); -static const u8 SEName_W196[] = _("W196"); -static const u8 SEName_W086[] = _("W086"); -static const u8 SEName_W004[] = _("W004"); -static const u8 SEName_W025[] = _("W025"); -static const u8 SEName_W025B[] = _("W025B"); -static const u8 SEName_W152[] = _("W152"); -static const u8 SEName_W026[] = _("W026"); -static const u8 SEName_W172[] = _("W172"); -static const u8 SEName_W172B[] = _("W172B"); -static const u8 SEName_W053[] = _("W053"); -static const u8 SEName_W007[] = _("W007"); -static const u8 SEName_W092[] = _("W092"); -static const u8 SEName_W221[] = _("W221"); -static const u8 SEName_W221B[] = _("W221B"); -static const u8 SEName_W052[] = _("W052"); -static const u8 SEName_W036[] = _("W036"); -static const u8 SEName_W059[] = _("W059"); -static const u8 SEName_W059B[] = _("W059B"); -static const u8 SEName_W010[] = _("W010"); -static const u8 SEName_W011[] = _("W011"); -static const u8 SEName_W017[] = _("W017"); -static const u8 SEName_W019[] = _("W019"); -static const u8 SEName_W028[] = _("W028"); -static const u8 SEName_W013B[] = _("W013B"); -static const u8 SEName_W044[] = _("W044"); -static const u8 SEName_W029[] = _("W029"); -static const u8 SEName_W057[] = _("W057"); -static const u8 SEName_W056[] = _("W056"); -static const u8 SEName_W250[] = _("W250"); -static const u8 SEName_W030[] = _("W030"); -static const u8 SEName_W039[] = _("W039"); -static const u8 SEName_W054[] = _("W054"); -static const u8 SEName_W077[] = _("W077"); -static const u8 SEName_W020[] = _("W020"); -static const u8 SEName_W082[] = _("W082"); -static const u8 SEName_W047[] = _("W047"); -static const u8 SEName_W195[] = _("W195"); -static const u8 SEName_W006[] = _("W006"); -static const u8 SEName_W091[] = _("W091"); -static const u8 SEName_W146[] = _("W146"); -static const u8 SEName_W120[] = _("W120"); -static const u8 SEName_W153[] = _("W153"); -static const u8 SEName_W071B[] = _("W071B"); -static const u8 SEName_W071[] = _("W071"); -static const u8 SEName_W103[] = _("W103"); -static const u8 SEName_W062[] = _("W062"); -static const u8 SEName_W062B[] = _("W062B"); -static const u8 SEName_W048[] = _("W048"); -static const u8 SEName_W187[] = _("W187"); -static const u8 SEName_W118[] = _("W118"); -static const u8 SEName_W155[] = _("W155"); -static const u8 SEName_W122[] = _("W122"); -static const u8 SEName_W060[] = _("W060"); -static const u8 SEName_W185[] = _("W185"); -static const u8 SEName_W014[] = _("W014"); -static const u8 SEName_W043[] = _("W043"); -static const u8 SEName_W207[] = _("W207"); -static const u8 SEName_W207B[] = _("W207B"); -static const u8 SEName_W215[] = _("W215"); -static const u8 SEName_W109[] = _("W109"); -static const u8 SEName_W173[] = _("W173"); -static const u8 SEName_W280[] = _("W280"); -static const u8 SEName_W202[] = _("W202"); -static const u8 SEName_W060B[] = _("W060B"); -static const u8 SEName_W076[] = _("W076"); -static const u8 SEName_W080[] = _("W080"); -static const u8 SEName_W100[] = _("W100"); -static const u8 SEName_W107[] = _("W107"); -static const u8 SEName_W166[] = _("W166"); -static const u8 SEName_W129[] = _("W129"); -static const u8 SEName_W115[] = _("W115"); -static const u8 SEName_W112[] = _("W112"); -static const u8 SEName_W197[] = _("W197"); -static const u8 SEName_W199[] = _("W199"); -static const u8 SEName_W236[] = _("W236"); -static const u8 SEName_W204[] = _("W204"); -static const u8 SEName_W268[] = _("W268"); -static const u8 SEName_W070[] = _("W070"); -static const u8 SEName_W063[] = _("W063"); -static const u8 SEName_W127[] = _("W127"); -static const u8 SEName_W179[] = _("W179"); -static const u8 SEName_W151[] = _("W151"); -static const u8 SEName_W201[] = _("W201"); -static const u8 SEName_W161[] = _("W161"); -static const u8 SEName_W161B[] = _("W161B"); -static const u8 SEName_W227[] = _("W227"); -static const u8 SEName_W227B[] = _("W227B"); -static const u8 SEName_W226[] = _("W226"); -static const u8 SEName_W208[] = _("W208"); -static const u8 SEName_W213[] = _("W213"); -static const u8 SEName_W213B[] = _("W213B"); -static const u8 SEName_W234[] = _("W234"); -static const u8 SEName_W260[] = _("W260"); -static const u8 SEName_W328[] = _("W328"); -static const u8 SEName_W320[] = _("W320"); -static const u8 SEName_W255[] = _("W255"); -static const u8 SEName_W291[] = _("W291"); -static const u8 SEName_W089[] = _("W089"); -static const u8 SEName_W239[] = _("W239"); -static const u8 SEName_W230[] = _("W230"); -static const u8 SEName_W281[] = _("W281"); -static const u8 SEName_W327[] = _("W327"); -static const u8 SEName_W287[] = _("W287"); -static const u8 SEName_W257[] = _("W257"); -static const u8 SEName_W253[] = _("W253"); -static const u8 SEName_W258[] = _("W258"); -static const u8 SEName_W322[] = _("W322"); -static const u8 SEName_W298[] = _("W298"); -static const u8 SEName_W287B[] = _("W287B"); -static const u8 SEName_W114[] = _("W114"); -static const u8 SEName_W063B[] = _("W063B"); +// Create SE list +#define X(songId, name) static const u8 sSEName_##songId[] = _(name); +SOUND_LIST_SE +#undef X +#define X(songId, name) sSEName_##songId, static const u8 *const gSENames[] = { - SEName_STOP, - SEName_KAIFUKU, - SEName_PC_LOGON, - SEName_PC_OFF, - SEName_PC_ON, - SEName_SELECT, - SEName_WIN_OPEN, - SEName_WALL_HIT, - SEName_DOOR, - SEName_KAIDAN, - SEName_DANSA, - SEName_JITENSYA, - SEName_KOUKA_L, - SEName_KOUKA_M, - SEName_KOUKA_H, - SEName_BOWA2, - SEName_POKE_DEAD, - SEName_NIGERU, - SEName_JIDO_DOA, - SEName_NAMINORI, - SEName_BAN, - SEName_PIN, - SEName_BOO, - SEName_BOWA, - SEName_JYUNI, - SEName_A, - SEName_I, - SEName_U, - SEName_E, - SEName_O, - SEName_N, - SEName_SEIKAI, - SEName_HAZURE, - SEName_EXP, - SEName_JITE_PYOKO, - SEName_MU_PACHI, - SEName_TK_KASYA, - SEName_FU_ZAKU, - SEName_FU_ZAKU2, - SEName_FU_ZUZUZU, - SEName_RU_GASHIN, - SEName_RU_GASYAN, - SEName_RU_BARI, - SEName_RU_HYUU, - SEName_KI_GASYAN, - SEName_TK_WARPIN, - SEName_TK_WARPOUT, - SEName_TU_SAA, - SEName_HI_TURUN, - SEName_TRACK_MOVE, - SEName_TRACK_STOP, - SEName_TRACK_HAIK, - SEName_TRACK_DOOR, - SEName_MOTER, - SEName_CARD, - SEName_SAVE, - SEName_KON, - SEName_KON2, - SEName_KON3, - SEName_KON4, - SEName_SUIKOMU, - SEName_NAGERU, - SEName_TOY_C, - SEName_TOY_D, - SEName_TOY_E, - SEName_TOY_F, - SEName_TOY_G, - SEName_TOY_A, - SEName_TOY_B, - SEName_TOY_C1, - SEName_MIZU, - SEName_HASHI, - SEName_DAUGI, - SEName_PINPON, - SEName_FUUSEN1, - SEName_FUUSEN2, - SEName_FUUSEN3, - SEName_TOY_KABE, - SEName_TOY_DANGO, - SEName_DOKU, - SEName_ESUKA, - SEName_T_AME, - SEName_T_AME_E, - SEName_T_OOAME, - SEName_T_OOAME_E, - SEName_T_KOAME, - SEName_T_KOAME_E, - SEName_T_KAMI, - SEName_T_KAMI2, - SEName_ELEBETA, - SEName_HINSI, - SEName_EXPMAX, - SEName_TAMAKORO, - SEName_TAMAKORO_E, - SEName_BASABASA, - SEName_REGI, - SEName_C_GAJI, - SEName_C_MAKU_U, - SEName_C_MAKU_D, - SEName_C_PASI, - SEName_C_SYU, - SEName_C_PIKON, - SEName_REAPOKE, - SEName_OP_BASYU, - SEName_BT_START, - SEName_DENDOU, - SEName_JIHANKI, - SEName_TAMA, - SEName_Z_SCROLL, - SEName_Z_PAGE, - SEName_PN_ON, - SEName_PN_OFF, - SEName_Z_SEARCH, - SEName_TAMAGO, - SEName_TB_START, - SEName_TB_KON, - SEName_TB_KARA, - SEName_BIDORO, - SEName_W085, - SEName_W085B, - SEName_W231, - SEName_W171, - SEName_W233, - SEName_W233B, - SEName_W145, - SEName_W145B, - SEName_W145C, - SEName_W240, - SEName_W015, - SEName_W081, - SEName_W081B, - SEName_W088, - SEName_W016, - SEName_W016B, - SEName_W003, - SEName_W104, - SEName_W013, - SEName_W196, - SEName_W086, - SEName_W004, - SEName_W025, - SEName_W025B, - SEName_W152, - SEName_W026, - SEName_W172, - SEName_W172B, - SEName_W053, - SEName_W007, - SEName_W092, - SEName_W221, - SEName_W221B, - SEName_W052, - SEName_W036, - SEName_W059, - SEName_W059B, - SEName_W010, - SEName_W011, - SEName_W017, - SEName_W019, - SEName_W028, - SEName_W013B, - SEName_W044, - SEName_W029, - SEName_W057, - SEName_W056, - SEName_W250, - SEName_W030, - SEName_W039, - SEName_W054, - SEName_W077, - SEName_W020, - SEName_W082, - SEName_W047, - SEName_W195, - SEName_W006, - SEName_W091, - SEName_W146, - SEName_W120, - SEName_W153, - SEName_W071B, - SEName_W071, - SEName_W103, - SEName_W062, - SEName_W062B, - SEName_W048, - SEName_W187, - SEName_W118, - SEName_W155, - SEName_W122, - SEName_W060, - SEName_W185, - SEName_W014, - SEName_W043, - SEName_W207, - SEName_W207B, - SEName_W215, - SEName_W109, - SEName_W173, - SEName_W280, - SEName_W202, - SEName_W060B, - SEName_W076, - SEName_W080, - SEName_W100, - SEName_W107, - SEName_W166, - SEName_W129, - SEName_W115, - SEName_W112, - SEName_W197, - SEName_W199, - SEName_W236, - SEName_W204, - SEName_W268, - SEName_W070, - SEName_W063, - SEName_W127, - SEName_W179, - SEName_W151, - SEName_W201, - SEName_W161, - SEName_W161B, - SEName_W227, - SEName_W227B, - SEName_W226, - SEName_W208, - SEName_W213, - SEName_W213B, - SEName_W234, - SEName_W260, - SEName_W328, - SEName_W320, - SEName_W255, - SEName_W291, - SEName_W089, - SEName_W239, - SEName_W230, - SEName_W281, - SEName_W327, - SEName_W287, - SEName_W257, - SEName_W253, - SEName_W258, - SEName_W322, - SEName_W298, - SEName_W287B, - SEName_W114, - SEName_W063B +SOUND_LIST_SE }; - +#undef X void sub_80BB25C(u8 taskId) { -- cgit v1.2.3 From ef73a4cf1a022f993c4d13ed6cd00704d6fb7221 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 30 Sep 2017 21:07:50 -0400 Subject: move misc/ files up one dir. --- Makefile | 2 +- common_syms/misc/rom3.txt | 1 - common_syms/rom3.txt | 1 + ld_script.txt | 20 +- src/de_rom_8040FE0.c | 272 +++++ src/misc/de_rom_8040FE0.c | 272 ----- src/misc/rom3.c | 1168 ------------------ src/misc/rom6.c | 202 ---- src/misc/rom_800D42C.c | 118 -- src/misc/rom_8077ABC.c | 2055 -------------------------------- src/misc/script_pokemon_util_80C4BF0.c | 714 ----------- src/misc/script_pokemon_util_80F99CC.c | 444 ------- src/misc/unknown_task.c | 248 ---- src/misc/unused_8124F94.c | 126 -- src/rom3.c | 1168 ++++++++++++++++++ src/rom6.c | 202 ++++ src/rom_800D42C.c | 118 ++ src/rom_8077ABC.c | 2055 ++++++++++++++++++++++++++++++++ src/script_pokemon_util_80C4BF0.c | 714 +++++++++++ src/script_pokemon_util_80F99CC.c | 444 +++++++ src/unknown_task.c | 248 ++++ src/unused_8124F94.c | 126 ++ sym_bss.txt | 10 +- sym_common.txt | 6 +- sym_ewram.txt | 6 +- 25 files changed, 5370 insertions(+), 5370 deletions(-) delete mode 100644 common_syms/misc/rom3.txt create mode 100644 common_syms/rom3.txt create mode 100644 src/de_rom_8040FE0.c delete mode 100644 src/misc/de_rom_8040FE0.c delete mode 100644 src/misc/rom3.c delete mode 100644 src/misc/rom6.c delete mode 100644 src/misc/rom_800D42C.c delete mode 100644 src/misc/rom_8077ABC.c delete mode 100644 src/misc/script_pokemon_util_80C4BF0.c delete mode 100644 src/misc/script_pokemon_util_80F99CC.c delete mode 100644 src/misc/unknown_task.c delete mode 100644 src/misc/unused_8124F94.c create mode 100644 src/rom3.c create mode 100644 src/rom6.c create mode 100644 src/rom_800D42C.c create mode 100644 src/rom_8077ABC.c create mode 100644 src/script_pokemon_util_80C4BF0.c create mode 100644 src/script_pokemon_util_80F99CC.c create mode 100644 src/unknown_task.c create mode 100644 src/unused_8124F94.c diff --git a/Makefile b/Makefile index f6c20a681..5ef851b1c 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ VERSIONS := ruby sapphire ruby_rev1 sapphire_rev1 ruby_rev2 sapphire_rev2 ruby_d $(VERSIONS) $(VERSIONS:%=compare_%) -$(shell mkdir -p build/ $(VERSIONS:%=build/%/{,asm,data,src{,/battle,/field,/debug,/misc,/scene,/pokemon,/engine,/libs}})) +$(shell mkdir -p build/ $(VERSIONS:%=build/%/{,asm,data,src{,/battle,/field,/debug,/scene,/pokemon,/engine,/libs}})) C_SRCS := $(wildcard src/*/*.c) $(wildcard src/*.c) ASM_SRCS := $(wildcard asm/*.s) diff --git a/common_syms/misc/rom3.txt b/common_syms/misc/rom3.txt deleted file mode 100644 index 06a965ff6..000000000 --- a/common_syms/misc/rom3.txt +++ /dev/null @@ -1 +0,0 @@ -gBattleBuffersTransferData diff --git a/common_syms/rom3.txt b/common_syms/rom3.txt new file mode 100644 index 000000000..06a965ff6 --- /dev/null +++ b/common_syms/rom3.txt @@ -0,0 +1 @@ +gBattleBuffersTransferData diff --git a/ld_script.txt b/ld_script.txt index 118ced0ea..975be5f8e 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -46,10 +46,10 @@ SECTIONS { src/engine/link.o(.text); src/engine/rtc.o(.text); src/engine/main_menu.o(.text); - src/misc/rom3.o(.text); + src/rom3.o(.text); src/engine/decompress.o(.text); asm/battle_1.o(.text); - src/misc/rom_800D42C.o(.text); + src/rom_800D42C.o(.text); asm/battle_1.o(.text_800DC24); src/battle/battle_2.o(.text); asm/battle_2.o(.text); @@ -65,7 +65,7 @@ SECTIONS { src/pokemon/pokemon_2.o(.text); asm/pokemon_item_effect.o(.text); src/pokemon/pokemon_3.o(.text); - src/misc/de_rom_8040FE0.o(.text); + src/de_rom_8040FE0.o(.text); src/engine/trig.o(.text); src/engine/rng.o(.text); src/engine/util.o(.text); @@ -113,7 +113,7 @@ SECTIONS { src/engine/palette.o(.text); src/engine/sound.o(.text); src/battle/battle_anim.o(.text); - src/misc/rom_8077ABC.o(.text); + src/rom_8077ABC.o(.text); src/engine/task.o(.text); src/battle/reshow_battle_screen.o(.text); src/battle/battle_anim_807B69C.o(.text); @@ -128,7 +128,7 @@ SECTIONS { src/field/trainer_see.o(.text); src/field/wild_encounter.o(.text); src/field/field_effect.o(.text); - src/misc/unknown_task.o(.text); + src/unknown_task.o(.text); src/pokemon/pokemon_menu.o(.text); src/engine/option_menu.o(.text); src/pokemon/pokedex.o(.text); @@ -163,7 +163,7 @@ SECTIONS { asm/secret_base.o(.text_80BC1D0); src/field/tv.o(.text); asm/contest_link_80C2020.o(.text); - src/misc/script_pokemon_util_80C4BF0.o(.text); + src/script_pokemon_util_80C4BF0.o(.text); src/field/field_poison.o(.text); src/pokemon/pokemon_size_record.o(.text); asm/fldeff_80C5CD4.o(.text); @@ -184,7 +184,7 @@ SECTIONS { src/field/mauville_man.o(.text); src/pokemon/mail.o(.text); src/field/menu_helpers.o(.text); - src/misc/script_pokemon_util_80F99CC.o(.text); + src/script_pokemon_util_80F99CC.o(.text); src/field/dewford_trend.o(.text); src/field/heal_location.o(.text); src/field/region_map.o(.text); @@ -200,7 +200,7 @@ SECTIONS { src/field/trader.o(.text); src/field/starter_choose.o(.text); src/field/wallclock.o(.text); - src/misc/rom6.o(.text); + src/rom6.o(.text); src/field/pokeblock.o(.text); src/field/fldeff_flash.o(.text); src/battle/post_battle_event_funcs.o(.text); @@ -225,7 +225,7 @@ SECTIONS { asm/cable_car.o(.text); asm/roulette_util.o(.text); asm/cable_car_util.o(.text); - src/misc/unused_8124F94.o(.text); + src/unused_8124F94.o(.text); src/engine/save.o(.text); src/engine/mystery_event_script.o(.text); src/field/field_effect_helpers.o(.text); @@ -362,7 +362,7 @@ SECTIONS { src/engine/sound.o(.rodata); data/battle_anim.o(.rodata); src/battle/battle_anim.o(.rodata); - src/misc/rom_8077ABC.o(.rodata); + src/rom_8077ABC.o(.rodata); data/map_events.o(.rodata); data/data_8393054.o(.rodata); src/engine/task.o(.rodata); diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c new file mode 100644 index 000000000..eebcc1437 --- /dev/null +++ b/src/de_rom_8040FE0.c @@ -0,0 +1,272 @@ +#include "global.h" +#include "battle.h" + +#if GERMAN + +enum { + TRAINER_CLASS_NAME_LEADER = 25, + TRAINER_CLASS_NAME_SCHOOL_KID = 26, + TRAINER_CLASS_NAME_EXPERT = 30, + TRAINER_CLASS_NAME_POKEMON_TRAINER_3 = 46, +}; + +enum { + TRAINER_CLASS_LEADER_F = 26, + TRAINER_CLASS_ELITE_FOUR_F = 25, + TRAINER_CLASS_SCHOOL_KID_F = 30, + TRAINER_CLASS_BIRD_KEEPER = 46, + TRAINER_CLASS_MAY_1 = 61, + TRAINER_CLASS_MAY_2 = 62, + TRAINER_CLASS_MAY_3 = 63, +}; + +extern struct SecretBaseRecord gSecretBaseRecord; + +extern u8 gTrainerClassNames[][13]; +extern struct Trainer gTrainers[]; + +u8 *de_sub_8040FE0(u8 gender) { + if (gender) + { + gender++; + + } + + gender = TRAINER_CLASS_NAME_SCHOOL_KID; + return gTrainerClassNames[gender]; +} + +u8 *de_sub_8040FF4(u8 gender) { + if (gender) { + gender++; + } + + gender = TRAINER_CLASS_NAME_POKEMON_TRAINER_3; + return gTrainerClassNames[gender]; +} + +u8 *de_sub_804100C(u8 gender) { + if (gender) { + gender++; + } + + gender = TRAINER_CLASS_NAME_LEADER; + return gTrainerClassNames[gender]; +} + +#ifdef NONMATCHING + +u8 de_sub_81364AC(void); +u8 get_trainer_class_name_index(void); +u8 de_sub_81364F8(void); +u8 sub_8135FD8(void); + +u8 *de_sub_8041024(s32 arg0, u32 arg1) { + u8 nameIndex, trainerClass, gender; + struct Trainer *trainer; + u8 local2; + + switch (arg0) + { + case 0x400: + nameIndex = GetSecretBaseTrainerNameIndex(); + gender = gSecretBaseRecord.gender; + if (nameIndex == TRAINER_CLASS_NAME_SCHOOL_KID) + { + return de_sub_8040FE0(gender); + } + + return gTrainerClassNames[nameIndex]; + + case 0x100: + trainerClass = de_sub_81364AC(); + nameIndex = get_trainer_class_name_index(); + if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F) + { + return de_sub_8040FE0(FEMALE); + } + if (trainerClass == TRAINER_CLASS_MAY_1 || trainerClass == TRAINER_CLASS_MAY_2 || trainerClass == TRAINER_CLASS_MAY_3) + { + return de_sub_8040FF4(FEMALE); + } + + return gTrainerClassNames[nameIndex]; + + case 0x800: + trainerClass = de_sub_81364F8(); + nameIndex = sub_8135FD8(); + if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F) + { + return de_sub_8040FE0(FEMALE); + } + if (trainerClass == TRAINER_CLASS_MAY_1 || trainerClass == TRAINER_CLASS_MAY_2 || trainerClass == TRAINER_CLASS_MAY_3) + { + return de_sub_8040FF4(FEMALE); + } + + return gTrainerClassNames[nameIndex]; + + default: + trainer = &gTrainers[arg1]; + trainerClass = trainer->trainerClass; + local2 = sub_803FC58(arg1); + + if (trainerClass == TRAINER_CLASS_LEADER_F) + { + return de_sub_8040FE0(local2); + } + + if (trainerClass == TRAINER_CLASS_BIRD_KEEPER && local2 == FEMALE) + { + return de_sub_8040FF4(FEMALE); + } + + if (trainerClass == TRAINER_CLASS_ELITE_FOUR_F) + { + if (gTrainers[arg1].doubleBattle == TRUE) + { + return de_sub_804100C(FEMALE); + } + else + { + return de_sub_804100C(MALE); + } + } + + + return gTrainerClassNames[trainerClass]; + } +} +#else + +__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\ +_08041040:\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\ +_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\ +_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\ +_08041086:\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\ +_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\ +_080410B8:\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\ +_080410CC:\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\ +_080410EA:\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\ +_08041102:\n\ + pop {r4-r6}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_08041108: .4byte gTrainerClassNames\n\ + .syntax divided\n"); +} +#endif + +u32 de_sub_804110C(u32 arg0, u32 arg1) { + return arg1; +} + +#endif diff --git a/src/misc/de_rom_8040FE0.c b/src/misc/de_rom_8040FE0.c deleted file mode 100644 index eebcc1437..000000000 --- a/src/misc/de_rom_8040FE0.c +++ /dev/null @@ -1,272 +0,0 @@ -#include "global.h" -#include "battle.h" - -#if GERMAN - -enum { - TRAINER_CLASS_NAME_LEADER = 25, - TRAINER_CLASS_NAME_SCHOOL_KID = 26, - TRAINER_CLASS_NAME_EXPERT = 30, - TRAINER_CLASS_NAME_POKEMON_TRAINER_3 = 46, -}; - -enum { - TRAINER_CLASS_LEADER_F = 26, - TRAINER_CLASS_ELITE_FOUR_F = 25, - TRAINER_CLASS_SCHOOL_KID_F = 30, - TRAINER_CLASS_BIRD_KEEPER = 46, - TRAINER_CLASS_MAY_1 = 61, - TRAINER_CLASS_MAY_2 = 62, - TRAINER_CLASS_MAY_3 = 63, -}; - -extern struct SecretBaseRecord gSecretBaseRecord; - -extern u8 gTrainerClassNames[][13]; -extern struct Trainer gTrainers[]; - -u8 *de_sub_8040FE0(u8 gender) { - if (gender) - { - gender++; - - } - - gender = TRAINER_CLASS_NAME_SCHOOL_KID; - return gTrainerClassNames[gender]; -} - -u8 *de_sub_8040FF4(u8 gender) { - if (gender) { - gender++; - } - - gender = TRAINER_CLASS_NAME_POKEMON_TRAINER_3; - return gTrainerClassNames[gender]; -} - -u8 *de_sub_804100C(u8 gender) { - if (gender) { - gender++; - } - - gender = TRAINER_CLASS_NAME_LEADER; - return gTrainerClassNames[gender]; -} - -#ifdef NONMATCHING - -u8 de_sub_81364AC(void); -u8 get_trainer_class_name_index(void); -u8 de_sub_81364F8(void); -u8 sub_8135FD8(void); - -u8 *de_sub_8041024(s32 arg0, u32 arg1) { - u8 nameIndex, trainerClass, gender; - struct Trainer *trainer; - u8 local2; - - switch (arg0) - { - case 0x400: - nameIndex = GetSecretBaseTrainerNameIndex(); - gender = gSecretBaseRecord.gender; - if (nameIndex == TRAINER_CLASS_NAME_SCHOOL_KID) - { - return de_sub_8040FE0(gender); - } - - return gTrainerClassNames[nameIndex]; - - case 0x100: - trainerClass = de_sub_81364AC(); - nameIndex = get_trainer_class_name_index(); - if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F) - { - return de_sub_8040FE0(FEMALE); - } - if (trainerClass == TRAINER_CLASS_MAY_1 || trainerClass == TRAINER_CLASS_MAY_2 || trainerClass == TRAINER_CLASS_MAY_3) - { - return de_sub_8040FF4(FEMALE); - } - - return gTrainerClassNames[nameIndex]; - - case 0x800: - trainerClass = de_sub_81364F8(); - nameIndex = sub_8135FD8(); - if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F) - { - return de_sub_8040FE0(FEMALE); - } - if (trainerClass == TRAINER_CLASS_MAY_1 || trainerClass == TRAINER_CLASS_MAY_2 || trainerClass == TRAINER_CLASS_MAY_3) - { - return de_sub_8040FF4(FEMALE); - } - - return gTrainerClassNames[nameIndex]; - - default: - trainer = &gTrainers[arg1]; - trainerClass = trainer->trainerClass; - local2 = sub_803FC58(arg1); - - if (trainerClass == TRAINER_CLASS_LEADER_F) - { - return de_sub_8040FE0(local2); - } - - if (trainerClass == TRAINER_CLASS_BIRD_KEEPER && local2 == FEMALE) - { - return de_sub_8040FF4(FEMALE); - } - - if (trainerClass == TRAINER_CLASS_ELITE_FOUR_F) - { - if (gTrainers[arg1].doubleBattle == TRUE) - { - return de_sub_804100C(FEMALE); - } - else - { - return de_sub_804100C(MALE); - } - } - - - return gTrainerClassNames[trainerClass]; - } -} -#else - -__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\ -_08041040:\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\ -_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\ -_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\ -_08041086:\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\ -_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\ -_080410B8:\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\ -_080410CC:\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\ -_080410EA:\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\ -_08041102:\n\ - pop {r4-r6}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_08041108: .4byte gTrainerClassNames\n\ - .syntax divided\n"); -} -#endif - -u32 de_sub_804110C(u32 arg0, u32 arg1) { - return arg1; -} - -#endif diff --git a/src/misc/rom3.c b/src/misc/rom3.c deleted file mode 100644 index 3f4860ecc..000000000 --- a/src/misc/rom3.c +++ /dev/null @@ -1,1168 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_811DA74.h" -#include "battle_ai.h" -#include "battle_anim.h" -#include "battle_anim_81258BC.h" -#include "battle_anim_8137220.h" -#include "cable_club.h" -#include "items.h" -#include "link.h" -#include "pokemon.h" -#include "rom3.h" -#include "rom_8094928.h" -#include "species.h" -#include "task.h" -#include "util.h" -#include "battle_message.h" -#include "data2.h" - -extern u8 unk_2000000[]; - -#define EWRAM_14000 ((u8 *)(unk_2000000 + 0x14000)) -#define EWRAM_15000 ((u8 *)(unk_2000000 + 0x15000)) - -extern u16 gBattleTypeFlags; -extern u16 gBattleWeather; -extern struct BattlePokemon gBattleMons[]; - -static EWRAM_DATA u8 gUnknown_020238C4 = 0; -static EWRAM_DATA u8 gUnknown_020238C5 = 0; -static EWRAM_DATA u8 gUnknown_020238C6 = 0; - -extern u32 gUnknown_020239FC; -extern u8 gBattleBufferA[][0x200]; -extern u8 gBattleBufferB[][0x200]; -extern u8 gActiveBank; -extern u32 gBattleExecBuffer; -extern u8 gNoOfAllBanks; -extern u16 gBattlePartyID[]; -extern u8 gBanksBySide[]; -extern u16 gCurrentMove; -extern u16 gUnknown_02024BE8; -extern u16 gLastUsedItem; -extern u8 gLastUsedAbility; -extern u8 gBankAttacker; -extern u8 gBankTarget; -extern u8 gEffectBank; -extern u8 gStringBank; -extern u8 gAbsentBankFlags; -extern u8 gMultiHitCounter; -extern u8 gUnknown_02024C78; -extern u8 gBattleOutcome; -extern u8 gActionSelectionCursor[]; -extern u8 gMoveSelectionCursor[]; -extern u8 gBattleTextBuff1[]; -extern u8 gBattleTextBuff2[]; -extern u8 gBattleTextBuff3[]; -extern void (*gBattleMainFunc)(void); -extern void (*gBattleBankFunc[])(void); - -u8 gBattleBuffersTransferData[0x170]; - -void sub_800B858(void) -{ - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - OpenLink(); - CreateTask(sub_8083C50, 0); - sub_800BF28(); - } -} - -void setup_poochyena_battle(void) -{ - s32 i; - - gBattleMainFunc = nullsub_41; - for (i = 0; i < 4; i++) - { - gBattleBankFunc[i] = nullsub_91; - gBanksBySide[i] = 0xFF; - gActionSelectionCursor[i] = 0; - gMoveSelectionCursor[i] = 0; - } - sub_800B858(); - gBattleExecBuffer = 0; - battle_anim_clear_some_data(); - ClearBattleMonForms(); - BattleAI_HandleItemUseBeforeAISetup(); - if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) - { - ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], SPECIES_POOCHYENA, 2, 32, 0, 0, 0, 0); - i = ITEM_NONE; - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&i); - } - gUnknown_020239FC = 0; - gUnknown_02024C78 = 0; -} - -void sub_800B950(void) -{ - s32 i; - - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - sub_800BA78(); - else - sub_800B9A8(); - sub_800BD54(); - if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - for (i = 0; i < gNoOfAllBanks; i++) - sub_8094978(i, 0); - } -} - -void sub_800B9A8(void) -{ - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - { - gBattleMainFunc = sub_8010800; - if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) - gBattleBankFunc[0] = SetBankFuncToSafariBufferRunCommand; - else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) - gBattleBankFunc[0] = SetBankFuncToWallyBufferRunCommand; - else - gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[0] = 0; - gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand; - gBanksBySide[1] = 1; - gNoOfAllBanks = 2; - } - else - { - gBattleMainFunc = sub_8010800; - gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[0] = 0; - gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand; - gBanksBySide[1] = 1; - gBattleBankFunc[2] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[2] = 2; - gBattleBankFunc[3] = SetBankFuncToOpponentBufferRunCommand; - gBanksBySide[3] = 3; - gNoOfAllBanks = 4; - } -} - -void sub_800BA78(void) -{ - u8 multiplayerId; - int i; - - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - { - if (gBattleTypeFlags & BATTLE_TYPE_WILD) - { - gBattleMainFunc = sub_8010800; - gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[0] = 0; - gBattleBankFunc[1] = SetBankFuncToLinkOpponentBufferRunCommand; - gBanksBySide[1] = 1; - gNoOfAllBanks = 2; - } - else - { - gBattleBankFunc[1] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[1] = 0; - gBattleBankFunc[0] = SetBankFuncToLinkOpponentBufferRunCommand; - gBanksBySide[0] = 1; - gNoOfAllBanks = 2; - } - return; - } - if ((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) == BATTLE_TYPE_DOUBLE) - { - if (gBattleTypeFlags & BATTLE_TYPE_WILD) - { - gBattleMainFunc = sub_8010800; - gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[0] = 0; - gBattleBankFunc[1] = SetBankFuncToLinkOpponentBufferRunCommand; - gBanksBySide[1] = 1; - gBattleBankFunc[2] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[2] = 2; - gBattleBankFunc[3] = SetBankFuncToLinkOpponentBufferRunCommand; - gBanksBySide[3] = 3; - gNoOfAllBanks = 4; - } - else - { - gBattleBankFunc[1] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[1] = 0; - gBattleBankFunc[0] = SetBankFuncToLinkOpponentBufferRunCommand; - gBanksBySide[0] = 1; - gBattleBankFunc[3] = SetBankFuncToPlayerBufferRunCommand; - gBanksBySide[3] = 2; - gBattleBankFunc[2] = SetBankFuncToLinkOpponentBufferRunCommand; - gBanksBySide[2] = 3; - gNoOfAllBanks = 4; - - } - return; - } - multiplayerId = GetMultiplayerId(); - if (gBattleTypeFlags & BATTLE_TYPE_WILD) - gBattleMainFunc = sub_8010800; - for (i = 0; i < 4; i++) - { - switch (gLinkPlayers[i].lp_field_18) - { - case 0: - case 3: - sub_8094978(gLinkPlayers[i].lp_field_18, 0); - break; - case 1: - case 2: - sub_8094978(gLinkPlayers[i].lp_field_18, 1); - break; - } - - if (i == multiplayerId) - { - gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToPlayerBufferRunCommand; - switch (gLinkPlayers[i].lp_field_18) - { - case 0: - case 3: - gBanksBySide[gLinkPlayers[i].lp_field_18] = 0; - gBattlePartyID[gLinkPlayers[i].lp_field_18] = 0; - break; - case 1: - case 2: - gBanksBySide[gLinkPlayers[i].lp_field_18] = 2; - gBattlePartyID[gLinkPlayers[i].lp_field_18] = 3; - break; - } - } - else - { - if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[multiplayerId].lp_field_18 & 1)) - || ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[multiplayerId].lp_field_18 & 1))) - { - gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToLinkPartnerBufferRunCommand; - switch (gLinkPlayers[i].lp_field_18) - { - case 0: - case 3: - gBanksBySide[gLinkPlayers[i].lp_field_18] = 0; - gBattlePartyID[gLinkPlayers[i].lp_field_18] = 0; - break; - case 1: - case 2: - gBanksBySide[gLinkPlayers[i].lp_field_18] = 2; - gBattlePartyID[gLinkPlayers[i].lp_field_18] = 3; - break; - } - } - else - { - gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToLinkOpponentBufferRunCommand; - switch (gLinkPlayers[i].lp_field_18) - { - case 0: - case 3: - gBanksBySide[gLinkPlayers[i].lp_field_18] = 1; - gBattlePartyID[gLinkPlayers[i].lp_field_18] = 0; - break; - case 1: - case 2: - gBanksBySide[gLinkPlayers[i].lp_field_18] = 3; - gBattlePartyID[gLinkPlayers[i].lp_field_18] = 3; - break; - } - } - } - } - gNoOfAllBanks = 4; -} - -void sub_800BD54(void) -{ - int i; - int j; - - if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - for (i = 0; i < gNoOfAllBanks; i++) - { - for (j = 0; j < 6; j++) - { - if (i < 2) - { - if (!(gBanksBySide[i] & 1)) - { - if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != 0 - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG - && GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) == 0) - { - gBattlePartyID[i] = j; - break; - } - } - else - { - if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG - && GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) == 0) - { - gBattlePartyID[i] = j; - break; - } - } - } - else - { - if (!(gBanksBySide[i] & 1)) - { - if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES) != 0 //Probably a typo by Game Freak. The rest use SPECIES2 - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG - && GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) == 0 - && gBattlePartyID[i - 2] != j) - { - gBattlePartyID[i] = j; - break; - } - } - else - { - if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG - && GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) == 0 - && gBattlePartyID[i - 2] != j) - { - gBattlePartyID[i] = j; - break; - } - } - } - } - } - } -} - -void PrepareBufferDataTransfer(u8 a, u8 *data, u16 size) -{ - int i; - - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - PrepareBufferDataTransferLink(a, size, data); - } - else - { - switch (a) - { - case 0: - for (i = 0; i < size; i++) - { - gBattleBufferA[gActiveBank][i] = *data; - data++; - } - break; - case 1: - for (i = 0; i < size; i++) - { - gBattleBufferB[gActiveBank][i] = *data; - data++; - } - break; - } - } -} - -void sub_800BF28(void) -{ - gUnknown_020238C4 = CreateTask(sub_800C1A8, 0); - gTasks[gUnknown_020238C4].data[11] = 0; - gTasks[gUnknown_020238C4].data[12] = 0; - gTasks[gUnknown_020238C4].data[13] = 0; - gTasks[gUnknown_020238C4].data[14] = 0; - gTasks[gUnknown_020238C4].data[15] = 0; - gUnknown_020238C5 = CreateTask(sub_800C47C, 0); - gTasks[gUnknown_020238C5].data[12] = 0; - gTasks[gUnknown_020238C5].data[13] = 0; - gTasks[gUnknown_020238C5].data[14] = 0; - gTasks[gUnknown_020238C5].data[15] = 0; - gUnknown_020238C6 = 0; - CpuFill16(0, EWRAM_14000, 0x2000); -} - -void PrepareBufferDataTransferLink(u8 a, u16 size, u8 *data) -{ - s32 r9; - int i; - - r9 = size - size % 4 + 4; - if (gTasks[gUnknown_020238C4].data[14] + r9 + 9 > 0x1000) - { - gTasks[gUnknown_020238C4].data[12] = gTasks[gUnknown_020238C4].data[14]; - gTasks[gUnknown_020238C4].data[14] = 0; - } - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14000] = a; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14001] = gActiveBank; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14002] = gBankAttacker; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14003] = gBankTarget; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14004] = r9; - 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 < 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; -} - -void sub_800C1A8(u8 taskId) -{ - u16 var; - - switch (gTasks[taskId].data[11]) - { - case 0: - gTasks[taskId].data[10] = 100; - gTasks[taskId].data[11]++; - break; - case 1: - gTasks[taskId].data[10]--; - if (gTasks[taskId].data[10] == 0) - gTasks[taskId].data[11]++; - break; - case 2: - GetLinkPlayerCount_2(); - if (IsLinkMaster()) - { - sub_8007F4C(); - gTasks[taskId].data[11]++; - break; - } - gTasks[taskId].data[11]++; - break; - case 3: - if (gTasks[taskId].data[15] != gTasks[taskId].data[14]) - { - if (gTasks[taskId].data[13] == 0) - { - if (gTasks[taskId].data[15] > gTasks[taskId].data[14] - && gTasks[taskId].data[15] == gTasks[taskId].data[12]) - { - gTasks[taskId].data[12] = 0; - gTasks[taskId].data[15] = 0; - } - var = (unk_2000000[gTasks[taskId].data[15] + 0x14004] | (unk_2000000[gTasks[taskId].data[15] + 0x14005] << 8)) + 8; - SendBlock(bitmask_all_link_players_but_self(), &unk_2000000[gTasks[taskId].data[15] + 0x14000], var); - gTasks[taskId].data[11]++; - } - else - { - gTasks[taskId].data[13]--; - break; - } - } - break; - case 4: - if (sub_8007ECC()) - { - var = unk_2000000[gTasks[taskId].data[15] + 0x14004] | (unk_2000000[gTasks[taskId].data[15] + 0x14005] << 8); - gTasks[taskId].data[13] = 1; - gTasks[taskId].data[15] = gTasks[taskId].data[15] + var + 8; - gTasks[taskId].data[11] = 3; - } - break; - case 5: - gTasks[taskId].data[13]--; - if (gTasks[taskId].data[13] == 0) - { - gTasks[taskId].data[13] = 1; - gTasks[taskId].data[11] = 3; - } - break; - } -} - -//fix me -void sub_800C35C(void) -{ - u8 i; //r4 - s32 j; //r2 - u16 r6; //r6 - u8 *recvBuffer; //r3 - u8 *dest; //r5 - u8 *src; //r4 - - if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & 0x20) && gLinkPlayers[0].linkType == 0x2211) - { - for (i = 0; i < GetLinkPlayerCount(); i++) - { - if (GetBlockReceivedStatus() & gBitTable[i]) - { - ResetBlockReceivedFlag(i); - recvBuffer = (u8 *)&gBlockRecvBuffer[i]; -#ifndef NONMATCHING - asm(""); - recvBuffer = (u8 *)&gBlockRecvBuffer[i]; -#endif - r6 = gBlockRecvBuffer[i][2]; - if (gTasks[gUnknown_020238C5].data[14] + 9 + r6 > 0x1000) - { - gTasks[gUnknown_020238C5].data[12] = gTasks[gUnknown_020238C5].data[14]; - gTasks[gUnknown_020238C5].data[14] = 0; - } - //_0800C402 - dest = EWRAM_15000 + gTasks[gUnknown_020238C5].data[14]; - src = recvBuffer; - for (j = 0; j < r6 + 8; j++) - dest[j] = src[j]; - gTasks[gUnknown_020238C5].data[14] = gTasks[gUnknown_020238C5].data[14] + r6 + 8; - } - //_0800C446 - } - } -} - -void sub_800C47C(u8 taskId) -{ - u16 r7; - u8 r4; - u8 r2; - - if (gTasks[taskId].data[15] != gTasks[taskId].data[14]) - { - if (gTasks[taskId].data[15] > gTasks[taskId].data[14] - && gTasks[taskId].data[15] == gTasks[taskId].data[12]) - { - gTasks[taskId].data[12] = 0; - gTasks[taskId].data[15] = 0; - } - r4 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 1]; - r7 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 4] | (unk_2000000[0x15000 + gTasks[taskId].data[15] + 5] << 8); - switch (unk_2000000[0x15000 + gTasks[taskId].data[15] + 0]) - { - case 0: - if (gBattleExecBuffer & gBitTable[r4]) - return; - memcpy(gBattleBufferA[r4], &unk_2000000[0x15000 + gTasks[taskId].data[15] + 8], r7); - sub_80155A4(r4); - if (!(gBattleTypeFlags & BATTLE_TYPE_WILD)) - { - gBankAttacker = unk_2000000[0x15000 + gTasks[taskId].data[15] + 2]; - gBankTarget = unk_2000000[0x15000 + gTasks[taskId].data[15] + 3]; - gAbsentBankFlags = unk_2000000[0x15000 + gTasks[taskId].data[15] + 6]; - gEffectBank = unk_2000000[0x15000 + gTasks[taskId].data[15] + 7]; - } - break; - case 1: - memcpy(gBattleBufferB[r4], &unk_2000000[0x15000 + gTasks[taskId].data[15] + 8], r7); - break; - case 2: - r2 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 8]; - gBattleExecBuffer &= ~(gBitTable[r4] << (r2 * 4)); - break; - } - gTasks[taskId].data[15] = gTasks[taskId].data[15] + r7 + 8; - } -} - -void EmitGetAttributes(u8 a, u8 b, u8 c) -{ - gBattleBuffersTransferData[0] = 0; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = 0; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void Emitcmd1(u8 a, u8 b, u8 c) -{ - gBattleBuffersTransferData[0] = 1; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = 0; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, void *e) -{ - int i; - - gBattleBuffersTransferData[0] = 2; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - for (i = 0; i < d; i++) - gBattleBuffersTransferData[3 + i] = *(u8*)(e++); - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, d + 3); -} - -void Emitcmd3(u8 a, u8 b, u8 c, u8 *d) -{ - int i; - - gBattleBuffersTransferData[0] = 3; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - for (i = 0; i < c; i++) - gBattleBuffersTransferData[3 + i] = *(d++); - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, c + 3); -} - -void EmitLoadPokeSprite(u8 a) -{ - gBattleBuffersTransferData[0] = 4; - gBattleBuffersTransferData[1] = 4; - gBattleBuffersTransferData[2] = 4; - gBattleBuffersTransferData[3] = 4; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitSendOutPoke(u8 a, u8 b, u8 c) -{ - gBattleBuffersTransferData[0] = 5; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = 5; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitReturnPokeToBall(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 6; - gBattleBuffersTransferData[1] = b; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); -} - -void EmitTrainerThrow(u8 a) -{ - gBattleBuffersTransferData[0] = 7; - gBattleBuffersTransferData[1] = 7; - gBattleBuffersTransferData[2] = 7; - gBattleBuffersTransferData[3] = 7; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitTrainerSlide(u8 a) -{ - gBattleBuffersTransferData[0] = 8; - gBattleBuffersTransferData[1] = 8; - gBattleBuffersTransferData[2] = 8; - gBattleBuffersTransferData[3] = 8; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitTrainerSlideBack(u8 a) -{ - gBattleBuffersTransferData[0] = 9; - gBattleBuffersTransferData[1] = 9; - gBattleBuffersTransferData[2] = 9; - gBattleBuffersTransferData[3] = 9; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void Emitcmd10(u8 a) -{ - gBattleBuffersTransferData[0] = 10; - gBattleBuffersTransferData[1] = 10; - gBattleBuffersTransferData[2] = 10; - gBattleBuffersTransferData[3] = 10; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void Emitcmd11(u8 a) -{ - gBattleBuffersTransferData[0] = 11; - gBattleBuffersTransferData[1] = 11; - gBattleBuffersTransferData[2] = 11; - gBattleBuffersTransferData[3] = 11; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void Emitcmd12(u8 a) -{ - gBattleBuffersTransferData[0] = 12; - gBattleBuffersTransferData[1] = 12; - gBattleBuffersTransferData[2] = 12; - gBattleBuffersTransferData[3] = 12; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitBallThrow(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 13; - gBattleBuffersTransferData[1] = b; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); -} - -void EmitPuase(u8 a, u8 b, u8 *c) -{ - int i; - - gBattleBuffersTransferData[0] = 14; - gBattleBuffersTransferData[1] = b; - for (i = 0; i < b * 3; i++) - gBattleBuffersTransferData[2 + i] = *(c++); - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b * 3 + 2); -} - -void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStruct *g) -{ - gBattleBuffersTransferData[0] = 15; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; - gBattleBuffersTransferData[3] = c; - gBattleBuffersTransferData[4] = d; - gBattleBuffersTransferData[5] = (d & 0xFF00) >> 8; - gBattleBuffersTransferData[6] = e; - gBattleBuffersTransferData[7] = (e & 0x0000FF00) >> 8; - gBattleBuffersTransferData[8] = (e & 0x00FF0000) >> 16; - gBattleBuffersTransferData[9] = (e & 0xFF000000) >> 24; - gBattleBuffersTransferData[10] = f; - gBattleBuffersTransferData[11] = gMultiHitCounter; - if (AbilityBattleEffects(14, 0, 13, 0, 0) == 0 && AbilityBattleEffects(14, 0, 0x4D, 0, 0) == 0) - { - gBattleBuffersTransferData[12] = gBattleWeather; - gBattleBuffersTransferData[13] = (gBattleWeather & 0xFF00) >> 8; - } - else - { - gBattleBuffersTransferData[12] = 0; - gBattleBuffersTransferData[13] = 0; - } - gBattleBuffersTransferData[14] = 0; - gBattleBuffersTransferData[15] = 0; - memcpy(&gBattleBuffersTransferData[16], g, sizeof(*g)); - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 0x2C); -} - -void EmitPrintString(u8 a, u16 stringID) -{ - s32 i; - struct StringInfoBattle* stringInfo; - - gBattleBuffersTransferData[0] = 16; - gBattleBuffersTransferData[1] = gBattleOutcome; - 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; - - 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 EmitPrintStringPlayerOnly(u8 a, u16 stringID) -{ - 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) -{ - gBattleBuffersTransferData[0] = 18; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void Emitcmd19(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 19; - gBattleBuffersTransferData[1] = b; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); -} - -void Emitcmd20(u8 a, u8 b, u8 c, u8 *d) -{ - u32 i; - - gBattleBuffersTransferData[0] = 20; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = 0; - for (i = 0; i < 20; i++) - gBattleBuffersTransferData[4 + i] = d[i]; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 24); -} - -void EmitOpenBag(u8 a, u8 *b) -{ - int i; - - gBattleBuffersTransferData[0] = 21; - for (i = 0; i < 3; i++) - gBattleBuffersTransferData[1 + i] = b[i]; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e) -{ - int i; - - gBattleBuffersTransferData[0] = 22; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = d; - for (i = 0; i < 3; i++) - gBattleBuffersTransferData[4 + i] = e[i]; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 8); //but only 7 bytes were written -} - -void Emitcmd23(u8 a) -{ - gBattleBuffersTransferData[0] = 23; - gBattleBuffersTransferData[1] = 23; - gBattleBuffersTransferData[2] = 23; - gBattleBuffersTransferData[3] = 23; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -// FIXME: I think this function is supposed to take s16 as its second argument, -// but battle_4.c expects u16 -void EmitHealthBarUpdate(u8 a, u16 b) -{ - gBattleBuffersTransferData[0] = 24; - gBattleBuffersTransferData[1] = 0; - gBattleBuffersTransferData[2] = (s16)b; - gBattleBuffersTransferData[3] = ((s16)b & 0xFF00) >> 8; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -// FIXME: I think this function is supposed to take s16 as its third argument, -// but battle_4.c expects u16 -void EmitExpBarUpdate(u8 a, u8 b, u16 c) -{ - gBattleBuffersTransferData[0] = 25; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (s16)c; - gBattleBuffersTransferData[3] = ((s16)c & 0xFF00) >> 8; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitStatusIconUpdate(u8 a, u32 b, u32 c) -{ - gBattleBuffersTransferData[0] = 26; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0x0000FF00) >> 8; - gBattleBuffersTransferData[3] = (b & 0x00FF0000) >> 16; - gBattleBuffersTransferData[4] = (b & 0xFF000000) >> 24; - gBattleBuffersTransferData[5] = c; - gBattleBuffersTransferData[6] = (c & 0x0000FF00) >> 8; - gBattleBuffersTransferData[7] = (c & 0x00FF0000) >> 16; - gBattleBuffersTransferData[8] = (c & 0xFF000000) >> 24; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 9); -} - -void EmitStatusAnimation(u8 a, u8 b, u32 c) -{ - gBattleBuffersTransferData[0] = 27; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = (c & 0x0000FF00) >> 8; - gBattleBuffersTransferData[4] = (c & 0x00FF0000) >> 16; - gBattleBuffersTransferData[5] = (c & 0xFF000000) >> 24; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 6); -} - -void EmitStatusXor(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 28; - gBattleBuffersTransferData[1] = b; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); -} - -void Emitcmd29(u8 a, u16 b, u8 *c) -{ - int i; - - gBattleBuffersTransferData[0] = 29; - gBattleBuffersTransferData[1] = 29; - gBattleBuffersTransferData[2] = b; - gBattleBuffersTransferData[3] = (b & 0xFF00) >> 8; - for (i = 0; i < b; i++) - gBattleBuffersTransferData[4 + i] = *(c++); - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 4); -} - -void EmitDMATransfer(u8 a, u32 b, u16 c, u8 *d) -{ - int i; - - gBattleBuffersTransferData[0] = 30; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0x0000FF00) >> 8; - gBattleBuffersTransferData[3] = (b & 0x00FF0000) >> 16; - gBattleBuffersTransferData[4] = (b & 0xFF000000) >> 24; - gBattleBuffersTransferData[5] = c; - gBattleBuffersTransferData[6] = (c & 0xFF00) >> 8; - for (i = 0; i < c; i++) - gBattleBuffersTransferData[7 + i] = *(d++); - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, c + 7); -} - -void Emitcmd31(u8 a, u16 b, u8 *c) -{ - int i; - - gBattleBuffersTransferData[0] = 31; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; - for (i = 0; i < b; i++) - gBattleBuffersTransferData[3 + i] = *(c++); - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 3); -} - -void Emitcmd32(u8 a, u16 b, u8 *c) -{ - int i; - - gBattleBuffersTransferData[0] = 32; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; - for (i = 0; i < b; i++) - gBattleBuffersTransferData[3 + i] = *(c++); - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 3); -} - -void Emitcmd33(u8 a, u8 b, u16 c) -{ - gBattleBuffersTransferData[0] = 33; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void Emitcmd34(u8 a, u8 b, u8 *c) -{ - int i; - - gBattleBuffersTransferData[0] = 34; - gBattleBuffersTransferData[1] = b; - for (i = 0; i < 3; i++) - gBattleBuffersTransferData[2 + i] = c[i]; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 5); -} - -void Emitcmd35(u8 a, u16 b) -{ - gBattleBuffersTransferData[0] = 35; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; - gBattleBuffersTransferData[3] = 0; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void Emitcmd36(u8 a, u16 b) -{ - gBattleBuffersTransferData[0] = 36; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; - gBattleBuffersTransferData[3] = 0; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void Emitcmd37(u8 a) -{ - gBattleBuffersTransferData[0] = 37; - gBattleBuffersTransferData[1] = 37; - gBattleBuffersTransferData[2] = 37; - gBattleBuffersTransferData[3] = 37; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void Emitcmd38(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 38; - gBattleBuffersTransferData[1] = b; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); -} - -void Emitcmd39(u8 a) -{ - gBattleBuffersTransferData[0] = 39; - gBattleBuffersTransferData[1] = 39; - gBattleBuffersTransferData[2] = 39; - gBattleBuffersTransferData[3] = 39; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void Emitcmd40(u8 a) -{ - gBattleBuffersTransferData[0] = 40; - gBattleBuffersTransferData[1] = 40; - gBattleBuffersTransferData[2] = 40; - gBattleBuffersTransferData[3] = 40; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitHitAnimation(u8 a) -{ - gBattleBuffersTransferData[0] = 41; - gBattleBuffersTransferData[1] = 41; - gBattleBuffersTransferData[2] = 41; - gBattleBuffersTransferData[3] = 41; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void Emitcmd42(u8 a) -{ - gBattleBuffersTransferData[0] = 42; - gBattleBuffersTransferData[1] = 42; - gBattleBuffersTransferData[2] = 42; - gBattleBuffersTransferData[3] = 42; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitEffectivenessSound(u8 a, u16 b) -{ - gBattleBuffersTransferData[0] = 43; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; - gBattleBuffersTransferData[3] = 0; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void Emitcmd44(u8 a, u16 b) -{ - gBattleBuffersTransferData[0] = 44; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; - gBattleBuffersTransferData[3] = 0; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitFaintingCry(u8 a) -{ - gBattleBuffersTransferData[0] = 45; - gBattleBuffersTransferData[1] = 45; - gBattleBuffersTransferData[2] = 45; - gBattleBuffersTransferData[3] = 45; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitIntroSlide(u8 a, u8 battleTerrain) -{ - gBattleBuffersTransferData[0] = 46; - gBattleBuffersTransferData[1] = battleTerrain; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); -} - -void EmitTrainerBallThrow(u8 a) -{ - gBattleBuffersTransferData[0] = 47; - gBattleBuffersTransferData[1] = 47; - gBattleBuffersTransferData[2] = 47; - gBattleBuffersTransferData[3] = 47; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void Emitcmd48(u8 a, u8 *b, u8 c) -{ - int i; - - gBattleBuffersTransferData[0] = 48; - gBattleBuffersTransferData[1] = c & 0x7F; - gBattleBuffersTransferData[2] = (c & 0x80) >> 7; - gBattleBuffersTransferData[3] = 48; - for (i = 0; i < 48; i++) - gBattleBuffersTransferData[4 + i] = b[i]; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 52); -} - -void Emitcmd49(u8 a) -{ - gBattleBuffersTransferData[0] = 49; - gBattleBuffersTransferData[1] = 49; - gBattleBuffersTransferData[2] = 49; - gBattleBuffersTransferData[3] = 49; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void Emitcmd50(u8 a) -{ - gBattleBuffersTransferData[0] = 50; - gBattleBuffersTransferData[1] = 50; - gBattleBuffersTransferData[2] = 50; - gBattleBuffersTransferData[3] = 50; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitSpriteInvisibility(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 51; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = 51; - gBattleBuffersTransferData[3] = 51; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitBattleAnimation(u8 a, u8 b, u16 c) -{ - gBattleBuffersTransferData[0] = 52; - gBattleBuffersTransferData[1] = b; - gBattleBuffersTransferData[2] = c; - gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); -} - -void EmitLinkStandbyMsg(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 53; - gBattleBuffersTransferData[1] = b; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); -} - -void EmitResetActionMoveSelection(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 54; - gBattleBuffersTransferData[1] = b; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); -} - -void Emitcmd55(u8 a, u8 b) -{ - gBattleBuffersTransferData[0] = 55; - gBattleBuffersTransferData[1] = b; - PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); -} diff --git a/src/misc/rom6.c b/src/misc/rom6.c deleted file mode 100644 index 3a5071034..000000000 --- a/src/misc/rom6.c +++ /dev/null @@ -1,202 +0,0 @@ -#include "global.h" -#include "rom6.h" -#include "braille_puzzles.h" -#include "field_effect.h" -#include "field_map_obj.h" -#include "field_player_avatar.h" -#include "item_use.h" -#include "pokemon_menu.h" -#include "overworld.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "task.h" - -extern u16 gScriptLastTalked; -extern void (*gFieldCallback)(void); -extern u8 gLastFieldPokeMenuOpened; -extern void (*gUnknown_03005CE4)(void); -extern u8 S_UseRockSmash[]; - -EWRAM_DATA struct MapPosition gUnknown_0203923C = {0}; - -static void task08_080C9820(u8); -static void sub_810B3DC(u8); -static void sub_810B428(u8); -static void sub_810B4CC(u8); -static void sub_810B53C(void); -static void sub_810B58C(void); -static void sub_810B5D8(void); -static void sub_810B634(void); - -bool8 npc_before_player_of_type(u8 a) -{ - u8 mapObjId; - - GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203923C.x, &gUnknown_0203923C.y); - gUnknown_0203923C.height = PlayerGetZCoord(); - mapObjId = GetFieldObjectIdByXYZ(gUnknown_0203923C.x, gUnknown_0203923C.y, gUnknown_0203923C.height); - if (gMapObjects[mapObjId].graphicsId != a) - { - return FALSE; - } - else - { - gScriptLastTalked = gMapObjects[mapObjId].localId; - return TRUE; - } -} - -u8 oei_task_add(void) -{ - GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203923C.x, &gUnknown_0203923C.y); - return CreateTask(task08_080C9820, 8); -} - -static void task08_080C9820(u8 taskId) -{ - u8 mapObjId; - - ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; - mapObjId = gPlayerAvatar.mapObjectId; - if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(&gMapObjects[mapObjId]) - || FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId])) - { - if (gMapHeader.mapType == MAP_TYPE_UNDERWATER) - { - FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - gTasks[taskId].func = sub_810B428; - } - else - { - sub_8059BF4(); - FieldObjectSetSpecialAnim(&gMapObjects[mapObjId], 0x39); - gTasks[taskId].func = sub_810B3DC; - } - } -} - -static void sub_810B3DC(u8 taskId) -{ - if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[gPlayerAvatar.mapObjectId]) == TRUE) - { - FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - gTasks[taskId].func = sub_810B428; - } -} - -static void sub_810B428(u8 taskId) -{ - if (!FieldEffectActiveListContains(6)) - { - 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], gFieldEffectArguments[2]); - FieldEffectActiveListRemove(6); - gTasks[taskId].func = sub_810B4CC; - } -} - -static void sub_810B4CC(u8 taskId) -{ - void (*func)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]); - - func(); - gPlayerAvatar.unk6 = 0; - DestroyTask(taskId); -} - -bool8 SetUpFieldMove_RockSmash(void) -{ - if (npc_before_player_of_type(0x56) == TRUE) - { - gFieldCallback = FieldCallback_Teleport; - gUnknown_03005CE4 = sub_810B53C; - return TRUE; - } - else - { - return FALSE; - } -} - -static void sub_810B53C(void) -{ - gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; - ScriptContext1_SetupScript(S_UseRockSmash); -} - -int FldEff_RockSmash(void) -{ - u8 taskId = oei_task_add(); - - gTasks[taskId].data[8] = (u32)sub_810B58C >> 16; - gTasks[taskId].data[9] = (u32)sub_810B58C; - IncrementGameStat(0x13); - return 0; -} - -static void sub_810B58C(void) -{ - PlaySE(SE_W088); - FieldEffectActiveListRemove(FLDEFF_USE_ROCK_SMASH); - EnableBothScriptContexts(); -} - -int SetUpFieldMove_Dig(void) -{ - if (CanUseEscapeRopeOnCurrMap() == TRUE) - { - gFieldCallback = FieldCallback_Teleport; - gUnknown_03005CE4 = sub_810B5D8; - return TRUE; - } - else - { - return FALSE; - } -} - -static void sub_810B5D8(void) -{ - sub_8053014(); - FieldEffectStart(FLDEFF_USE_DIG); - gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; -} - -int FldEff_UseDig(void) -{ - u8 taskId = oei_task_add(); - - gTasks[taskId].data[8] = (u32)sub_810B634 >> 16; - gTasks[taskId].data[9] = (u32)sub_810B634; - if (!ShouldDoBrailleDigEffect()) - SetPlayerAvatarTransitionFlags(1); - return 0; -} - -static void sub_810B634(void) -{ - u8 taskId; - - FieldEffectActiveListRemove(FLDEFF_USE_DIG); - if (ShouldDoBrailleDigEffect()) - { - DoBrailleDigEffect(); - } - else - { - taskId = CreateTask(task08_080A1C44, 8); - gTasks[taskId].data[0] = 0; - } -} diff --git a/src/misc/rom_800D42C.c b/src/misc/rom_800D42C.c deleted file mode 100644 index f51779e65..000000000 --- a/src/misc/rom_800D42C.c +++ /dev/null @@ -1,118 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "link.h" -#include "text.h" - -extern u16 gBattleTypeFlags; -extern u8 gBattleOutcome; - -extern struct Window gUnknown_03004210; - -extern u8 BattleText_Win[]; -extern u8 BattleText_Loss[]; -extern u8 BattleText_Tie[]; - -#if ENGLISH -#define LEFT_MESSAGE_X 6 -#define RIGHT_MESSAGE_X 21 -#define TILE_OFFSET_LOSS 168 -#elif GERMAN -#define LEFT_MESSAGE_X 5 -#define RIGHT_MESSAGE_X 20 -#define TILE_OFFSET_LOSS 172 -#endif -#define TILE_OFFSET_WIN 160 -#define CENTER_MESSAGE_X 13 -#define MESSAGE_Y 2 - -#define PRINT_MESSAGE(text, tileDataStartOffset, x) \ -{ \ - InitWindow(&gUnknown_03004210, text, tileDataStartOffset, x, MESSAGE_Y); \ - sub_8002F44(&gUnknown_03004210); \ -} - -#define PRINT_MESSAGE_LEFT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, LEFT_MESSAGE_X) -#define PRINT_MESSAGE_RIGHT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, RIGHT_MESSAGE_X) - -void PrintLinkBattleWinLossTie(void) -{ - - if (gBattleOutcome == 3) - { - PRINT_MESSAGE(BattleText_Tie, TILE_OFFSET_WIN, CENTER_MESSAGE_X); - return; - } - - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - // Double battle? - - if (gBattleOutcome == 1) - { - - // lp_field_18 = player position? - switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18) - { - case 0: - case 2: - PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); - return; - - case 1: - case 3: - PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN) - PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS) - return; - } - } - else - { - - switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18) - { - case 1: - case 3: - PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); - return; - - case 0: - case 2: - PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); - return; - } - } - - return; - } - - - if (gBattleOutcome == 1) - { - if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0) - { - PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); - } - else - { - PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); - } - } - else - { - if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0) - { - PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); - } - else - { - PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); - PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); - } - } -} diff --git a/src/misc/rom_8077ABC.c b/src/misc/rom_8077ABC.c deleted file mode 100644 index 172233e6d..000000000 --- a/src/misc/rom_8077ABC.c +++ /dev/null @@ -1,2055 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "battle.h" -#include "battle_anim.h" -#include "blend_palette.h" -#include "data2.h" -#include "decompress.h" -#include "palette.h" -#include "pokemon_icon.h" -#include "species.h" -#include "sprite.h" -#include "task.h" -#include "trig.h" -#include "util.h" - -#define GET_UNOWN_LETTER(personality) ((\ - (((personality & 0x03000000) >> 24) << 6) \ - | (((personality & 0x00030000) >> 16) << 4) \ - | (((personality & 0x00000300) >> 8) << 2) \ - | (((personality & 0x00000003) >> 0) << 0) \ -) % 28) - -#define IS_DOUBLE_BATTLE() ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? TRUE : FALSE) - -#define NUM_BATTLE_SLOTS 4 - -#define gBattleMonPartyPositions gBattlePartyID -#define gCastformElevations gUnknownCastformData_0837F5A8 -#define gCastformBackSpriteYCoords gUnknown_0837F5AC -#define gTransformPersonalities gPID_perBank -#define gBattleMonSprites gObjectBankIDs - - -struct Struct_unk_2019348 { - u16 field_0; - u16 field_2; - u8 field_4; - u32 field_8; - u32 field_c; - u32 field_10; -}; - -struct TransformStatus { - u16 unknown; - u16 species; -}; - -struct Struct_gUnknown_0837F578 { - u8 field_0; - u8 field_1; -}; - -struct OamMatrix { - s16 a; - s16 b; - s16 c; - s16 d; -}; - -struct Struct_2017810 { - u8 filler_0[6]; - u8 field_6; - u8 filler_7[5]; -}; - -struct Color { - u16 r:5; - u16 g:5; - u16 b:5; -}; - -struct Struct_sub_8078914 { - u8 *field_0; - u8 *field_4; - u8 field_8; -}; - -struct BGCnt { - u16 priority:2; - u16 charBase:2; - u16 unused:2; - u16 mosaic:1; - u16 colorMode:1; - u16 screenBase:5; - u16 overflow:1; - u16 size:2; -}; - -#define BG1CNT (*(volatile struct BGCnt*)REG_ADDR_BG1CNT) -#define BG2CNT (*(volatile struct BGCnt*)REG_ADDR_BG2CNT) -#define BG3CNT (*(volatile struct BGCnt*)REG_ADDR_BG3CNT) - -extern struct OamData gOamData_837DF9C[]; -extern const union AnimCmd *const gDummySpriteAnimTable[]; -extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; - -extern struct Struct_unk_2019348 unk_2019348; -extern struct TransformStatus gTransformStatuses[]; -extern u16 gBattleMonPartyPositions[]; -extern u16 gBattleTypeFlags; -extern u32 gTransformPersonalities[NUM_BATTLE_SLOTS]; -extern u8 gBattleMonForms[NUM_BATTLE_SLOTS]; -extern u16 gUnknown_0202F7CA[]; -extern u8 gBattleMonSprites[NUM_BATTLE_SLOTS]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; -extern s16 gBattleAnimArgs[8]; -extern u8 gBanksBySide[NUM_BATTLE_SLOTS]; -extern u8 gNoOfAllBanks; // gNumBattleMons? -extern struct OamMatrix gOamMatrices[]; -extern struct Struct_2017810 unk_2017810[]; -extern u8 gHappinessMoveAnim; - -EWRAM_DATA union AffineAnimCmd *gUnknown_0202F7D4 = NULL; -EWRAM_DATA u32 filler_0202F7D8[3] = {0}; - -const struct Struct_gUnknown_0837F578 gUnknown_0837F578[][4] = { - { - { 72, 80 }, - { 176, 40 }, - { 48, 40 }, - { 112, 80 }, - }, - { - { 32, 80 }, - { 200, 40 }, - { 90, 88 }, - { 152, 32 }, - }, -}; - -// One entry for each of the four Castform forms. -// Coords are probably front pic coords or back pic coords, but this data does not seem to be -// used during battle, party summary, or pokedex screens. -const struct MonCoords gCastformFrontSpriteCoords[] = { - { 0x44, 17 }, // NORMAL - { 0x66, 9 }, // SUN - { 0x46, 9 }, // RAIN - { 0x86, 8 }, // HAIL -}; - -const u8 gCastformElevations[] = { - 13, // NORMAL - 14, // SUN - 13, // RAIN - 13, // HAIL -}; - -// Y position of the backsprite for each of the four Castform forms. -const u8 gCastformBackSpriteYCoords[] = { - 0, // NORMAL - 0, // SUN - 0, // RAIN - 0, // HAIL -}; - -const struct SpriteTemplate gSpriteTemplate_837F5B0[] = { - { - .tileTag = 55125, - .paletteTag = 55125, - .oam = gOamData_837DF9C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, { - .tileTag = 55126, - .paletteTag = 55126, - .oam = gOamData_837DF9C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - } -}; - -const struct SpriteSheet gUnknown_0837F5E0[] = { - { gMiscBlank_Gfx, 0x800, 55125, }, - { gMiscBlank_Gfx, 0x800, 55126, }, -}; - - -u8 sub_8077ABC(u8 slot, u8 a2) { - u8 var; - u16 species; - struct TransformStatus *transform; - - if (IsContest()) { - if (a2 == 3 && slot == 3) { - a2 = 1; - } - } - switch (a2) { - case 0: - case 2: - var = gUnknown_0837F578[IS_DOUBLE_BATTLE()][GetBankIdentity(slot)].field_0; - break; - case 1: - var = gUnknown_0837F578[IS_DOUBLE_BATTLE()][GetBankIdentity(slot)].field_1; - break; - case 3: - case 4: - default: - if (IsContest()) { - if (unk_2019348.field_4 & 1) { - species = unk_2019348.field_2; - } else { - species = unk_2019348.field_0; - } - } else { - if (GetBankSide(slot)) { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); - } else { - species = transform->species; - } - } else { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); - } else { - species = transform->species; - } - } - } - if (a2 == 3) { - var = sub_8077E44(slot, species, 1); - } else { - var = sub_8077E44(slot, species, 0); - } - break; - } - return var; -} - -u8 sub_8077BFC(u8 slot, u16 species) { - u16 letter; - u32 personality; - struct TransformStatus *transform; - u8 ret; - u16 var; - - if (!GetBankSide(slot) || IsContest()) { - if (species == SPECIES_UNOWN) { - if (IsContest()) { - if (unk_2019348.field_4 & 1) { - personality = unk_2019348.field_10; - } else { - personality = unk_2019348.field_8; - } - } else { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - personality = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); - } else { - personality = gTransformPersonalities[slot]; - } - } - letter = GET_UNOWN_LETTER(personality); - if (!letter) { - var = species; - } else { - var = letter + SPECIES_UNOWN_B - 1; - } - ret = gMonBackPicCoords[var].y_offset; - } else if (species == SPECIES_CASTFORM) { - ret = gCastformBackSpriteYCoords[gBattleMonForms[slot]]; - } else if (species > NUM_SPECIES) { - ret = gMonBackPicCoords[0].y_offset; - } else { - ret = gMonBackPicCoords[species].y_offset; - } - } else { - if (species == SPECIES_UNOWN) { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - personality = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); - } else { - personality = gTransformPersonalities[slot]; - } - letter = GET_UNOWN_LETTER(personality); - if (!letter) { - var = species; - } else { - var = letter + SPECIES_UNOWN_B - 1; - } - ret = gMonFrontPicCoords[var].y_offset; - } else if (species == SPECIES_CASTFORM) { - ret = gCastformFrontSpriteCoords[gBattleMonForms[slot]].y_offset; - } else if (species > NUM_SPECIES) { - ret = gMonFrontPicCoords[0].y_offset; - } else { - ret = gMonFrontPicCoords[species].y_offset; - } - } - return ret; -} - -u8 sub_8077DD8(u8 slot, u16 species) { - u8 ret = 0; - if (GetBankSide(slot) == 1) { - if (!IsContest()) { - if (species == SPECIES_CASTFORM) { - ret = gCastformElevations[gBattleMonForms[slot]]; - } else if (species > NUM_SPECIES) { - ret = gEnemyMonElevation[0]; - } else { - ret = gEnemyMonElevation[species]; - } - } - } - return ret; -} - -u8 sub_8077E44(u8 slot, u16 species, u8 a3) { - u16 offset; - u8 y; - if (GetBankSide(slot) == 0 || IsContest()) { - offset = sub_8077BFC(slot, species); - } else { - offset = sub_8077BFC(slot, species); - offset -= sub_8077DD8(slot, species); - } - y = offset + gUnknown_0837F578[IS_DOUBLE_BATTLE()][GetBankIdentity(slot)].field_1; - if (a3) { - if (GetBankSide(slot) == 0) { - y += 8; - } - if (y > 104) y = 104; - } - return y; -} - -u8 sub_8077EE4(u8 slot, u8 a2) { - u16 species; - struct TransformStatus *transform; - if (a2 == 3 || a2 == 4) { - if (IsContest()) { - if (unk_2019348.field_4 & 1) { - species = unk_2019348.field_2; - } else { - species = unk_2019348.field_0; - } - } else { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - species = gUnknown_0202F7CA[slot]; - } else { - species = transform->species; - } - } - if (a2 == 3) { - return sub_8077E44(slot, species, 1); - } else { - return sub_8077E44(slot, species, 0); - } - } else { - return sub_8077ABC(slot, a2); - } -} - -u8 sub_8077F68(u8 slot) { - return sub_8077ABC(slot, 4); -} - -u8 sub_8077F7C(u8 slot) { - u16 var; - if (GetBankSide(slot)) { - var = sub_8077ABC(slot, 1) + 16; - } else { - var = sub_8077ABC(slot, 1) + 17; - } - return var; -} - -u8 sub_8077FC0(u8 slot) { - u16 var; - u8 r6; - struct TransformStatus *transform; - r6 = sub_8077ABC(slot, 1); - if (!IsContest()) { - if (GetBankSide(slot)) { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - var = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); - } else { - var = transform->species; - } - } else { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - var = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); - } else { - var = transform->species; - } - } - if (GetBankSide(slot)) { - r6 -= sub_8077DD8(slot, var); - } - } - return r6; -} - -u8 GetAnimBankSpriteId(u8 whichBank) { - u8 *sprites; - if (whichBank == ANIM_BANK_ATK) { - if (AnimBankSpriteExists(gBattleAnimBankAttacker)) { - sprites = gBattleMonSprites; - return sprites[gBattleAnimBankAttacker]; - } else { - return 0xff; - } - } else if (whichBank == ANIM_BANK_DEF) { - if (AnimBankSpriteExists(gBattleAnimBankTarget)) { - sprites = gBattleMonSprites; - return sprites[gBattleAnimBankTarget]; - } else { - return 0xff; - } - } else if (whichBank == ANIM_BANK_ATK_PARTNER) { - if (!IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) { - return 0xff; - } else { - return gBattleMonSprites[gBattleAnimBankAttacker ^ 2]; - } - } else { - if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) { - return gBattleMonSprites[gBattleAnimBankTarget ^ 2]; - } else { - return 0xff; - } - } -} - -void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*callback)(struct Sprite*)) { - sprite->data6 = (u32)(callback) & 0xffff; - sprite->data7 = (u32)(callback) >> 16; -} - -void SetCallbackToStoredInData6(struct Sprite *sprite) { - u32 callback = (u16)sprite->data6 | (sprite->data7 << 16); - sprite->callback = (void (*)(struct Sprite *))callback; -} - -void sub_8078114(struct Sprite *sprite) { - if (sprite->data3) { - sprite->pos2.x = Sin(sprite->data0, sprite->data1); - sprite->pos2.y = Cos(sprite->data0, sprite->data1); - sprite->data0 += sprite->data2; - if (sprite->data0 >= 0x100) { - sprite->data0 -= 0x100; - } else if (sprite->data0 < 0) { - sprite->data0 += 0x100; - } - sprite->data3--; - } else { - SetCallbackToStoredInData6(sprite); - } -} - -void sub_8078174(struct Sprite *sprite) { - if (sprite->data3) { - sprite->pos2.x = Sin(sprite->data0, (sprite->data5 >> 8) + sprite->data1); - sprite->pos2.y = Cos(sprite->data0, (sprite->data5 >> 8) + sprite->data1); - sprite->data0 += sprite->data2; - sprite->data5 += sprite->data4; - if (sprite->data0 >= 0x100) { - sprite->data0 -= 0x100; - } else if (sprite->data0 < 0) { - sprite->data0 += 0x100; - } - sprite->data3--; - } else { - SetCallbackToStoredInData6(sprite); - } -} - -void unref_sub_80781F0(struct Sprite *sprite) { - if (sprite->data3) { - sprite->pos2.x = Sin(sprite->data0, sprite->data1); - sprite->pos2.y = Cos(sprite->data4, sprite->data1); - sprite->data0 += sprite->data2; - sprite->data4 += sprite->data5; - if (sprite->data0 >= 0x100) { - sprite->data0 -= 0x100; - } else if (sprite->data0 < 0) { - sprite->data0 += 0x100; - } - if (sprite->data4 >= 0x100) { - sprite->data4 -= 0x100; - } else if (sprite->data4 < 0) { - sprite->data4 += 0x100; - } - sprite->data3--; - } else { - SetCallbackToStoredInData6(sprite); - } -} - -void sub_8078278(struct Sprite *sprite) { - if (sprite->data3) { - sprite->pos2.x = Sin(sprite->data0, sprite->data1); - sprite->pos2.y = Cos(sprite->data0, sprite->data4); - sprite->data0 += sprite->data2; - if (sprite->data0 >= 0x100) { - sprite->data0 -= 0x100; - } else if (sprite->data0 < 0) { - sprite->data0 += 0x100; - } - sprite->data3--; - } else { - SetCallbackToStoredInData6(sprite); - } -} - -void sub_80782D8(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - } else { - SetCallbackToStoredInData6(sprite); - } -} - -void sub_80782F8(struct Sprite *sprite) { - sub_8078314(sprite); - sprite->callback = sub_8078364; - sprite->callback(sprite); -} - -void sub_8078314(struct Sprite *sprite) { - s16 old; - int v1; - if (sprite->data1 > sprite->data2) { - sprite->data0 = -sprite->data0; - } - v1 = sprite->data2 - sprite->data1; - old = sprite->data0; - sprite->data0 = abs(v1 / sprite->data0); - sprite->data2 = (sprite->data4 - sprite->data3) / sprite->data0; - sprite->data1 = old; -} - -void sub_8078364(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->pos2.x += sprite->data1; - sprite->pos2.y += sprite->data2; - } else { - SetCallbackToStoredInData6(sprite); - } -} - -void sub_8078394(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->data3 += sprite->data1; - sprite->data4 += sprite->data2; - sprite->pos2.x = sprite->data3 >> 8; - sprite->pos2.y = sprite->data4 >> 8; - } else { - SetCallbackToStoredInData6(sprite); - } -} - -void sub_80783D0(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->data3 += sprite->data1; - sprite->data4 += sprite->data2; - sprite->pos2.x = sprite->data3 >> 8; - sprite->pos2.y = sprite->data4 >> 8; - } else { - SetCallbackToStoredInData6(sprite); - } - UpdateMonIconFrame(sprite); -} - -void unref_sub_8078414(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x + sprite->pos2.x; - sprite->data3 = sprite->pos1.y + sprite->pos2.y; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3); - sprite->callback = sub_80782F8; -} - -void sub_8078458(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - gSprites[sprite->data3].pos2.x += sprite->data1; - gSprites[sprite->data3].pos2.y += sprite->data2; - } else { - SetCallbackToStoredInData6(sprite); - } -} - -void sub_80784A8(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->data3 += sprite->data1; - sprite->data4 += sprite->data2; - gSprites[sprite->data5].pos2.x = sprite->data3 >> 8; - gSprites[sprite->data5].pos2.y = sprite->data4 >> 8; - } else { - SetCallbackToStoredInData6(sprite); - } -} - -void sub_8078504(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->pos2.x = sprite->data2 >> 8; - sprite->data2 += sprite->data1; - sprite->pos2.y = sprite->data4 >> 8; - sprite->data4 += sprite->data3; - if (sprite->data0 % sprite->data5 == 0) { - if (sprite->data5) { - sprite->invisible ^= 1; - } - } - } else { - SetCallbackToStoredInData6(sprite); - } -} - -void move_anim_8074EE0(struct Sprite *sprite) { - FreeSpriteOamMatrix(sprite); - move_anim_8072740(sprite); -} - -void unref_sub_8078588(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x + sprite->pos2.x; - sprite->data3 = sprite->pos1.y + sprite->pos2.y; - sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->callback = sub_80782F8; -} - -void unref_sub_80785CC(struct Sprite *sprite) { - ResetPaletteStructByUid(sprite->data5); - move_anim_8074EE0(sprite); -} - -void sub_80785E4(struct Sprite *sprite) { - if (sprite->affineAnimEnded) { - SetCallbackToStoredInData6(sprite); - } -} - -void sub_8078600(struct Sprite *sprite) { - if (sprite->animEnded) { - SetCallbackToStoredInData6(sprite); - } -} - -void sub_807861C(struct Sprite *sprite) { - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - move_anim_8072740(sprite); -} - -void sub_8078634(u8 task) { - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - DestroyAnimVisualTask(task); -} - -void sub_8078650(struct Sprite *sprite) { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); -} - -void sub_807867C(struct Sprite *sprite, s16 a2) { - u16 v1 = sub_8077ABC(gBattleAnimBankAttacker, 0); - u16 v2 = sub_8077ABC(gBattleAnimBankTarget, 0); - if (v1 > v2) { - sprite->pos1.x -= a2; - } else if (v1 < v2) { - sprite->pos1.x += a2; - } else { - if (GetBankSide(gBattleAnimBankAttacker)) { - sprite->pos1.x -= a2; - } else { - sprite->pos1.x += a2; - } - } -} - -void sub_80786EC(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data6 = 0x8000 / sprite->data0; - sprite->data7 = 0; -} - -bool8 sub_8078718(struct Sprite *sprite) { - if (sub_8078B5C(sprite)) { - return TRUE; - } - sprite->data7 += sprite->data6; - sprite->pos2.y += Sin((u8)(sprite->data7 >> 8), sprite->data5); - return FALSE; -} - -void oamt_add_pos2_onto_pos1(struct Sprite *sprite) { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; -} - -void sub_8078764(struct Sprite *sprite, u8 a2) { - if (!a2) { - sprite->pos1.x = sub_8077EE4(gBattleAnimBankTarget, 0); - sprite->pos1.y = sub_8077EE4(gBattleAnimBankTarget, 1); - } - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; -} - -void sub_80787B0(struct Sprite *sprite, u8 a2) { - if (!a2) { - sprite->pos1.x = sub_8077EE4(gBattleAnimBankAttacker, 0); - sprite->pos1.y = sub_8077EE4(gBattleAnimBankAttacker, 1); - } else { - sprite->pos1.x = sub_8077EE4(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077EE4(gBattleAnimBankAttacker, 3); - } - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; -} - -u8 GetBankSide(u8 slot) { - return gBanksBySide[slot] & 1; -} - -u8 GetBankIdentity(u8 slot) { - return gBanksBySide[slot]; -} - -u8 GetBankByPlayerAI(u8 slot) { - u8 i; - for (i = 0; i < gNoOfAllBanks; i++) { - if (gBanksBySide[i] == slot) { - break; - } - } - return i; -} - -bool8 AnimBankSpriteExists(u8 slot) { - if (IsContest()) { - if (gBattleAnimBankAttacker == slot) { - return TRUE; - } - if (gBattleAnimBankTarget == slot) { - return TRUE; - } - return FALSE; - } else { - if (gBanksBySide[slot] == 0xff) { - return FALSE; - } - if (GetBankSide(slot)) { - if (GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_HP) != 0) { - return TRUE; - } - } else { - if (GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_HP) != 0) { - return TRUE; - } - } - return FALSE; - } -} - -bool8 IsDoubleBattle() { - return IS_DOUBLE_BATTLE(); -} - -void sub_8078914(struct Struct_sub_8078914 *unk) { - if (IsContest()) { - unk->field_0 = (u8 *)0x6008000; - unk->field_4 = (u8 *)0x600f000; - unk->field_8 = 0xe; - } else { - unk->field_0 = (u8 *)0x6004000; - unk->field_4 = (u8 *)0x600e000; - unk->field_8 = 0x8; - } -} - -void sub_8078954(struct Struct_sub_8078914 *unk) { - if (IsContest()) { - unk->field_0 = (u8 *)0x6008000; - unk->field_4 = (u8 *)0x600f000; - unk->field_8 = 0xe; - } else if (GetBankIdentity_permutated(gBattleAnimBankAttacker) == 1) { - unk->field_0 = (u8 *)0x6004000; - unk->field_4 = (u8 *)0x600e000; - unk->field_8 = 0x8; - } else { - unk->field_0 = (u8 *)0x6006000; - unk->field_4 = (u8 *)0x600f000; - unk->field_8 = 0x9; - } -} - -u8 sub_80789BC() { - if (IsContest()) { - return 1; - } - return 2; -} - -void sub_80789D4(bool8 a1) { - if (!a1) { - BG3CNT.size = 0; - BG3CNT.overflow = 1; - } else if (IsContest()) { - BG3CNT.size = 0; - BG3CNT.overflow = 1; - } else { - BG3CNT.size = 1; - BG3CNT.overflow = 0; - } -} - -void sub_8078A34(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - sub_8078A5C(sprite); - sprite->callback = sub_80783D0; - sprite->callback(sprite); -} - -void sub_8078A5C(struct Sprite *sprite) { - s16 x = (sprite->data2 - sprite->data1) << 8; - s16 y = (sprite->data4 - sprite->data3) << 8; - sprite->data1 = x / sprite->data0; - sprite->data2 = y / sprite->data0; - sprite->data4 = 0; - sprite->data3 = 0; -} - -void obj_translate_based_on_private_1_2_3_4(struct Sprite *sprite) { - int x = sprite->data2 - sprite->data1; - int y = sprite->data4 - sprite->data3; - bool8 r8 = x < 0; - bool8 r9 = y < 0; - u16 x2 = abs(x) << 8; - u16 y2 = abs(y) << 8; - x2 = x2 / sprite->data0; - y2 = y2 / sprite->data0; - if (r8) { - x2 |= 1; - } else { - x2 &= ~1; - } - if (r9) { - y2 |= 1; - } else { - y2 &= ~1; - } - sprite->data1 = x2; - sprite->data2 = y2; - sprite->data4 = 0; - sprite->data3 = 0; -} - -void sub_8078B34(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->callback = sub_8078BB8; - sprite->callback(sprite); -} - -bool8 sub_8078B5C(struct Sprite *sprite) { - u16 v1, v2, x, y; - if (!sprite->data0) { - return TRUE; - } - v1 = sprite->data1; - v2 = sprite->data2; - x = sprite->data3; - y = sprite->data4; - x += v1; - y += v2; - if (v1 & 1) { - sprite->pos2.x = -(x >> 8); - } else { - sprite->pos2.x = x >> 8; - } - if (v2 & 1) { - sprite->pos2.y = -(y >> 8); - } else { - sprite->pos2.y = y >> 8; - } - sprite->data3 = x; - sprite->data4 = y; - sprite->data0--; - return FALSE; -} - -void sub_8078BB8(struct Sprite *sprite) { - if (sub_8078B5C(sprite)) { - SetCallbackToStoredInData6(sprite); - } -} - -void sub_8078BD4(struct Sprite *sprite) { - int v1 = abs(sprite->data2 - sprite->data1) << 8; - sprite->data0 = v1 / sprite->data0; - obj_translate_based_on_private_1_2_3_4(sprite); -} - -void sub_8078C00(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - sub_8078BD4(sprite); - sprite->callback = sub_8078BB8; - sprite->callback(sprite); -} - -void sub_8078C28(struct Sprite *sprite) { - int x = sprite->data2 - sprite->data1; - int y = sprite->data4 - sprite->data3; - bool8 x_sign = x < 0; - bool8 y_sign = y < 0; - u16 x2 = abs(x) << 4; - u16 y2 = abs(y) << 4; - x2 /= sprite->data0; - y2 /= sprite->data0; - if (x_sign) { - x2 |= 1; - } else { - x2 &= ~1; - } - if (y_sign) { - y2 |= 1; - } else { - y2 &= ~1; - } - sprite->data1 = x2; - sprite->data2 = y2; - sprite->data4 = 0; - sprite->data3 = 0; -} - -void sub_8078CC0(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - sub_8078C28(sprite); - sprite->callback = sub_8078D44; - sprite->callback(sprite); -} - -bool8 sub_8078CE8(struct Sprite *sprite) { - u16 v1, v2, x, y; - if (!sprite->data0) { - return TRUE; - } - v1 = sprite->data1; - v2 = sprite->data2; - x = sprite->data3; - y = sprite->data4; - x += v1; - y += v2; - if (v1 & 1) { - sprite->pos2.x = -(x >> 4); - } else { - sprite->pos2.x = x >> 4; - } - if (v2 & 1) { - sprite->pos2.y = -(y >> 4); - } else { - sprite->pos2.y = y >> 4; - } - sprite->data3 = x; - sprite->data4 = y; - sprite->data0--; - return FALSE; -} - -void sub_8078D44(struct Sprite *sprite) { - if (sub_8078CE8(sprite)) { - SetCallbackToStoredInData6(sprite); - } -} - -void sub_8078D60(struct Sprite *sprite) { - int v1 = abs(sprite->data2 - sprite->data1) << 4; - sprite->data0 = v1 / sprite->data0; - sub_8078C28(sprite); -} - -void sub_8078D8C(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - sub_8078D60(sprite); - sprite->callback = sub_8078D44; - sprite->callback(sprite); -} - -void obj_id_set_rotscale(u8 sprite, s16 xScale, s16 yScale, u16 rotation) { - int i; - struct ObjAffineSrcData src; - struct OamMatrix matrix; - src.xScale = xScale; - src.yScale = yScale; - src.rotation = rotation; - if (sub_8078E38()) { - src.xScale = -src.xScale; - } - i = gSprites[sprite].oam.matrixNum; - ObjAffineSet(&src, &matrix, 1, 2); - gOamMatrices[i].a = matrix.a; - gOamMatrices[i].b = matrix.b; - gOamMatrices[i].c = matrix.c; - gOamMatrices[i].d = matrix.d; -} - -bool8 sub_8078E38() { - if (IsContest()) { - if (gSprites[GetAnimBankSpriteId(0)].data2 == 0xc9 /* XXX SPECIES_UNOWN? */) { - return FALSE; - } - return TRUE; - } - return FALSE; -} - -void sub_8078E70(u8 sprite, u8 a2) { - struct Struct_2017810 *unk; - u8 r7 = gSprites[sprite].data0; - if (IsContest() || IsAnimBankSpriteVisible(r7)) { - gSprites[sprite].invisible = FALSE; - } - gSprites[sprite].oam.objMode = a2; - gSprites[sprite].affineAnimPaused = TRUE; - if (!IsContest() && !gSprites[sprite].oam.affineMode) { - unk = &unk_2017810[r7]; - gSprites[sprite].oam.matrixNum = unk->field_6; - } - gSprites[sprite].oam.affineMode = 3; - CalcCenterToCornerVec(&gSprites[sprite], gSprites[sprite].oam.shape, gSprites[sprite].oam.size, gSprites[sprite].oam.affineMode); -} - -void sub_8078F40(u8 sprite) { - obj_id_set_rotscale(sprite, 0x100, 0x100, 0); - gSprites[sprite].oam.affineMode = 1; - gSprites[sprite].oam.objMode = 0; - gSprites[sprite].affineAnimPaused = FALSE; - CalcCenterToCornerVec(&gSprites[sprite], gSprites[sprite].oam.shape, gSprites[sprite].oam.size, gSprites[sprite].oam.affineMode); -} - -void sub_8078F9C(u8 sprite) { - u16 matrix = gSprites[sprite].oam.matrixNum; - s16 c = gOamMatrices[matrix].c; - if (c < 0) { - c = -c; - } - gSprites[sprite].pos2.y = c >> 3; -} - -// related to obj_id_set_rotscale -void sub_8078FDC(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation) { - int i; - struct ObjAffineSrcData src; - struct OamMatrix matrix; - if (sprite->oam.affineMode & 1) { - sprite->affineAnimPaused = TRUE; - if (a2) { - CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); - } - src.xScale = xScale; - src.yScale = yScale; - src.rotation = rotation; - if (sub_8078E38()) { - src.xScale = -src.xScale; - } - i = sprite->oam.matrixNum; - ObjAffineSet(&src, &matrix, 1, 2); - gOamMatrices[i].a = matrix.a; - gOamMatrices[i].b = matrix.b; - gOamMatrices[i].c = matrix.c; - gOamMatrices[i].d = matrix.d; - } -} - -void sub_8079098(struct Sprite *sprite) { - sub_8078FDC(sprite, TRUE, 0x100, 0x100, 0); - sprite->affineAnimPaused = FALSE; - CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); -} - -static u16 ArcTan2_(s16 a, s16 b) { - return ArcTan2(a, b); -} - -u16 sub_80790F0(s16 a, s16 b) { - u16 var = ArcTan2_(a, b); - return -var; -} - -void sub_8079108(u16 a1, bool8 a2) { - int i; - struct Color *c; - struct Color *c2; - u16 average; - - a1 *= 0x10; - - if (!a2) { - for (i = 0; i < 0x10; i++) { - c = (struct Color *)&gPlttBufferUnfaded[a1 + i]; - average = c->r + c->g + c->b; - average /= 3; - - c2 = (struct Color *)&gPlttBufferFaded[a1 + i]; - c2->r = average; - c2->g = average; - c2->b = average; - } - } else { - CpuCopy32(&gPlttBufferUnfaded[a1], &gPlttBufferFaded[a1], 0x20); - } -} - -u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) { - u32 var = 0; - u32 shift; - if (a1) { - if (!IsContest()) { - var = 0xe; - } else { - var = 1 << sub_80789BC(); - } - } - if (a2) { - shift = gBattleAnimBankAttacker + 16; - var |= 1 << shift; - } - if (a3) { - shift = gBattleAnimBankTarget + 16; - var |= 1 << shift; - } - if (a4) { - if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) { - shift = (gBattleAnimBankAttacker ^ 2) + 16; - var |= 1 << shift; - } - } - if (a5) { - if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) { - shift = (gBattleAnimBankTarget ^ 2) + 16; - var |= 1 << shift; - } - } - if (a6) { - if (!IsContest()) { - var |= 0x100; - } else { - var |= 0x4000; - } - } - if (a7) { - if (!IsContest()) { - var |= 0x200; - } - } - return var; -} - -u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4) { - u32 var = 0; - u32 shift; - if (IsContest()) { - if (a1) { - var |= 1 << 18; - return var; - } - } else { - if (a1) { - if (IsAnimBankSpriteVisible(GetBankByPlayerAI(0))) { - var |= 1 << (GetBankByPlayerAI(0) + 16); - } - } - if (a2) { - if (IsAnimBankSpriteVisible(GetBankByPlayerAI(2))) { - shift = GetBankByPlayerAI(2) + 16; - var |= 1 << shift; - } - } - if (a3) { - if (IsAnimBankSpriteVisible(GetBankByPlayerAI(1))) { - shift = GetBankByPlayerAI(1) + 16; - var |= 1 << shift; - } - } - if (a4) { - if (IsAnimBankSpriteVisible(GetBankByPlayerAI(3))) { - shift = GetBankByPlayerAI(3) + 16; - var |= 1 << shift; - } - } - } - return var; -} - -u8 sub_80793A8(u8 a1) { - return a1; -} - -u8 unref_sub_80793B0(u8 a1) { - return GetBankByPlayerAI(a1); -} - -void sub_80793C4(struct Sprite *sprite) { - bool8 var; - if (!sprite->data0) { - if (!gBattleAnimArgs[3]) { - var = TRUE; - } else { - var = FALSE; - } - if (!gBattleAnimArgs[2]) { - sub_80787B0(sprite, var); - } else { - sub_8078764(sprite, var); - } - sprite->data0++; - - } else if (sprite->animEnded || sprite->affineAnimEnded) { - move_anim_8074EE0(sprite); - } -} - -void sub_807941C(struct Sprite *sprite) { - bool8 v1; - u8 v2; - if (!(gBattleAnimArgs[5] & 0xff00)) { - v1 = TRUE; - } else { - v1 = FALSE; - } - if (!(gBattleAnimArgs[5] & 0xff)) { - v2 = 3; - } else { - v2 = 1; - } - sub_80787B0(sprite, v1); - if (GetBankSide(gBattleAnimBankAttacker)) { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, v2) + gBattleAnimArgs[3]; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); -} - -void sub_80794A8(struct Sprite *sprite) { - sub_80787B0(sprite, 1); - if (GetBankSide(gBattleAnimBankAttacker)) { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; - sprite->data5 = gBattleAnimArgs[5]; - sub_80786EC(sprite); - sprite->callback = sub_8079518; -} - -void sub_8079518(struct Sprite *sprite) { - if (sub_8078718(sprite)) { - move_anim_8072740(sprite); - } -} - -void sub_8079534(struct Sprite *sprite) { - u8 r4, slot, r7; - if (!gBattleAnimArgs[6]) { - r4 = 1; - r7 = 3; - } else { - r4 = 0; - r7 = 1; - } - if (!gBattleAnimArgs[5]) { - sub_80787B0(sprite, r4); - slot = gBattleAnimBankAttacker; - } else { - sub_8078764(sprite, r4); - slot = gBattleAnimBankTarget; - } - if (GetBankSide(gBattleAnimBankAttacker)) { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - sub_8078764(sprite, r4); - sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = sub_8077ABC(slot, 2) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(slot, r7) + gBattleAnimArgs[3]; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); -} - -s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1) { - u16 i; - u8 sprite = GetAnimBankSpriteId(a1); - if (sprite != 0xff) { - for (i = 0; i < 0x40; i++) { - if (gSprites[i].inUse) { - continue; - } - gSprites[i] = gSprites[sprite]; - gSprites[i].oam.objMode = 1; - gSprites[i].invisible = FALSE; - return i; - } - } - return -1; -} - -void obj_delete_but_dont_free_vram(struct Sprite *sprite) { - sprite->usingSheet = TRUE; - DestroySprite(sprite); -} - -void sub_8079670(u8 task) { - s16 v1 = 0; - s16 v2 = 0; - if (gBattleAnimArgs[2] > gBattleAnimArgs[0]) { - v2 = 1; - } - if (gBattleAnimArgs[2] < gBattleAnimArgs[0]) { - v2 = -1; - } - if (gBattleAnimArgs[3] > gBattleAnimArgs[1]) { - v1 = 1; - } - if (gBattleAnimArgs[3] < gBattleAnimArgs[1]) { - v1 = -1; - } - gTasks[task].data[0] = 0; - gTasks[task].data[1] = gBattleAnimArgs[4]; - gTasks[task].data[2] = 0; - gTasks[task].data[3] = gBattleAnimArgs[0]; - gTasks[task].data[4] = gBattleAnimArgs[1]; - gTasks[task].data[5] = v2; - gTasks[task].data[6] = v1; - gTasks[task].data[7] = gBattleAnimArgs[2]; - gTasks[task].data[8] = gBattleAnimArgs[3]; - REG_BLDALPHA = (gBattleAnimArgs[1] << 8) | gBattleAnimArgs[0]; - gTasks[task].func = sub_80796F8; -} - -void sub_80796F8(u8 taskId) { - struct Task *task = &gTasks[taskId]; - if (++task->data[0] > task->data[1]) { - task->data[0] = 0; - if (++task->data[2] & 1) { - if (task->data[3] != task->data[7]) { - task->data[3] += task->data[5]; - } - } else { - if (task->data[4] != task->data[8]) { - task->data[4] += task->data[6]; - } - } - REG_BLDALPHA = (task->data[4] << 8) | task->data[3]; - if (task->data[3] == task->data[7] && task->data[4] == task->data[8]) { - DestroyAnimVisualTask(taskId); - return; - } - } -} - -void sub_8079790(u8 task) { - u8 sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]); - if (sprite == 0xff) { - DestroyAnimVisualTask(task); - return; - } - gTasks[task].data[0] = (gSprites[sprite].oam.paletteNum * 0x10) + 0x101; - sub_80797EC(&gTasks[task]); -} - -void sub_80797EC(struct Task *task) { - task->data[1] = gBattleAnimArgs[1]; - task->data[2] = 0; - task->data[3] = gBattleAnimArgs[2]; - task->data[4] = 0; - task->data[5] = gBattleAnimArgs[3]; - task->data[6] = 0; - task->data[7] = gBattleAnimArgs[4]; - task->func = sub_8079814; -} - -void sub_8079814(u8 taskId) { - struct Task *task = &gTasks[taskId]; - if (++task->data[4] >= task->data[5]) { - task->data[4] = 0; - if (!task->data[6]) { - task->data[2]++; - BlendPalette(task->data[0], 0xf, task->data[2], task->data[1]); - if (task->data[2] == task->data[3]) { - task->data[6] = 1; - } - } else { - task->data[2]--; - BlendPalette(task->data[0], 0xf, task->data[2], task->data[1]); - if (!task->data[2]) { - if (--task->data[7]) { - task->data[4] = 0; - task->data[6] = 0; - } else { - DestroyAnimVisualTask(taskId); - return; - } - } - } - } -} - -void sub_80798AC(u8 task) { - u8 palette = IndexOfSpritePaletteTag(gBattleAnimArgs[0]); - if (palette == 0xff) { - DestroyAnimVisualTask(task); - return; - } - gTasks[task].data[0] = (palette * 0x10) + 0x101; - sub_80797EC(&gTasks[task]); -} - -void sub_80798F4(struct Task *task, u8 a2, void *a3) { - task->data[7] = 0; - task->data[8] = 0; - task->data[9] = 0; - task->data[15] = a2; - task->data[10] = 0x100; - task->data[11] = 0x100; - task->data[12] = 0; - sub_8079BF4(&task->data[13], &task->data[14], a3); - sub_8078E70(a2, 0); -} - -bool8 sub_807992C(struct Task *task) { - gUnknown_0202F7D4 = sub_8079BFC(task->data[13], task->data[14]) + (task->data[7] << 3); - switch (gUnknown_0202F7D4->type) { - default: - if (!gUnknown_0202F7D4->frame.duration) { - task->data[10] = gUnknown_0202F7D4->frame.xScale; - task->data[11] = gUnknown_0202F7D4->frame.yScale; - task->data[12] = gUnknown_0202F7D4->frame.rotation; - task->data[7]++; - gUnknown_0202F7D4++; - } - task->data[10] += gUnknown_0202F7D4->frame.xScale; - task->data[11] += gUnknown_0202F7D4->frame.yScale; - task->data[12] += gUnknown_0202F7D4->frame.rotation; - obj_id_set_rotscale(task->data[15], task->data[10], task->data[11], task->data[12]); - sub_8079A64(task->data[15]); - if (++task->data[8] >= gUnknown_0202F7D4->frame.duration) { - task->data[8] = 0; - task->data[7]++; - } - break; - - case AFFINEANIMCMDTYPE_JUMP: - task->data[7] = gUnknown_0202F7D4->jump.target; - break; - - case AFFINEANIMCMDTYPE_LOOP: - if (gUnknown_0202F7D4->loop.count) { - if (task->data[9]) { - if (!--task->data[9]) { - task->data[7]++; - break; - } - } else { - task->data[9] = gUnknown_0202F7D4->loop.count; - } - if (!task->data[7]) { - break; - } - for (;;) { - task->data[7]--; - gUnknown_0202F7D4--; - if (gUnknown_0202F7D4->type == AFFINEANIMCMDTYPE_LOOP) { - task->data[7]++; - return TRUE; - } - if (!task->data[7]) { - return TRUE; - } - } - } - task->data[7]++; - break; - - case 0x7fff: - gSprites[task->data[15]].pos2.y = 0; - sub_8078F40(task->data[15]); - return FALSE; - } - - return TRUE; -} - -void sub_8079A64(u8 sprite) { - int var = 0x40 - sub_8079B10(sprite) * 2; - u16 matrix = gSprites[sprite].oam.matrixNum; - int var2 = (var << 8) / gOamMatrices[matrix].d; - if (var2 > 0x80) { - var2 = 0x80; - } - gSprites[sprite].pos2.y = (var - var2) / 2; -} - -void sub_8079AB8(u8 sprite, u8 sprite2) { - int var = 0x40 - sub_8079B10(sprite2) * 2; - u16 matrix = gSprites[sprite].oam.matrixNum; - int var2 = (var << 8) / gOamMatrices[matrix].d; - if (var2 > 0x80) { - var2 = 0x80; - } - gSprites[sprite].pos2.y = (var - var2) / 2; -} - -u16 sub_8079B10(u8 sprite) { - struct TransformStatus *transform; - u8 slot = gSprites[sprite].data0; - u16 species; - u16 i; - for (i = 0; i < (sizeof(gBattleMonSprites) / sizeof(u8)); i++) { - if (gBattleMonSprites[i] == sprite) { - if (IsContest()) { - species = unk_2019348.field_0; - return gMonBackPicCoords[species].y_offset; - } else { - if (!GetBankSide(i)) { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[i]], MON_DATA_SPECIES); - } else { - species = transform->species; - } - return gMonBackPicCoords[species].y_offset; - } else { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[i]], MON_DATA_SPECIES); - } else { - species = transform->species; - } - return gMonFrontPicCoords[species].y_offset; - } - } - } - } - return 0x40; -} - -void sub_8079BF4(s16 *bottom, s16 *top, void *ptr) { - *bottom = ((intptr_t) ptr) & 0xffff; - *top = (((intptr_t) ptr) >> 16) & 0xffff; -} - -void *sub_8079BFC(s16 bottom, s16 top) { - return (void *)((u16)bottom | ((u16)top << 16)); -} - - -// possible new file - -void sub_8079C08(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7) { - task->data[8] = a7; - task->data[15] = a2; - task->data[9] = a3; - task->data[10] = a4; - task->data[13] = a5; - task->data[14] = a6; - task->data[11] = (a5 - a3) / a7; - task->data[12] = (a6 - a4) / a7; -} - -u8 sub_8079C74(struct Task *task) { - if (!task->data[8]) { - return 0; - } - if (--task->data[8]) { - task->data[9] += task->data[11]; - task->data[10] += task->data[12]; - } else { - task->data[9] = task->data[13]; - task->data[10] = task->data[14]; - } - obj_id_set_rotscale(task->data[15], task->data[9], task->data[10], 0); - if (task->data[8]) { - sub_8079A64(task->data[15]); - } else { - gSprites[task->data[15]].pos2.y = 0; - } - return task->data[8]; -} - -void sub_8079CEC(u8 task) { - u16 v1; - if (gHappinessMoveAnim <= 30) { - v1 = 0; - } else if (gHappinessMoveAnim <= 100) { - v1 = 1; - } else if (gHappinessMoveAnim <= 200) { - v1 = 2; - } else { - v1 = 3; - } - gBattleAnimArgs[7] = v1; - DestroyAnimVisualTask(task); -} - -void unref_sub_8079D20(u8 priority) { - if (IsAnimBankSpriteVisible(gBattleAnimBankTarget)) { - gSprites[gBattleMonSprites[gBattleAnimBankTarget]].oam.priority = priority; - } - if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker)) { - gSprites[gBattleMonSprites[gBattleAnimBankAttacker]].oam.priority = priority; - } - if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) { - gSprites[gBattleMonSprites[gBattleAnimBankTarget ^ 2]].oam.priority = priority; - } - if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) { - gSprites[gBattleMonSprites[gBattleAnimBankAttacker ^ 2]].oam.priority = priority; - } -} - -void sub_8079E24() { - int i; - for (i = 0; i < gNoOfAllBanks; i++) { - if (IsAnimBankSpriteVisible(i)) { - gSprites[gBattleMonSprites[i]].subpriority = sub_8079E90(i); - gSprites[gBattleMonSprites[i]].oam.priority = 2; - } - } -} - -u8 sub_8079E90(u8 slot) { - u8 status; - u8 ret; - if (IsContest()) { - if (slot == 2) { - return 30; - } else { - return 40; - } - } else { - status = GetBankIdentity(slot); - if (status == 0) { - ret = 30; - } else if (status == 2) { - ret = 20; - } else if (status == 1) { - ret = 40; - } else { - ret = 50; - } - } - return ret; -} - -u8 sub_8079ED4(u8 slot) { - u8 status = GetBankIdentity(slot); - if (IsContest()) { - return 2; - } - if (status == 0 || status == 3) { - return BG2CNT.priority; - } else { - return BG1CNT.priority; - } -} - -u8 GetBankIdentity_permutated(u8 slot) { - u8 status; - if (!IsContest()) { - status = GetBankIdentity(slot); - if (status == 0 || status == 3) { - return 2; - } else { - return 1; - } - } - return 1; -} - -u8 sub_8079F44(u16 species, u8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7, u32 a8) { - void *src; - void *dest; - int size; - - u8 sprite; - u16 sheet = LoadSpriteSheet(&gUnknown_0837F5E0[a3]); - u16 palette = AllocSpritePalette(gSpriteTemplate_837F5B0[a3].paletteTag); - if (!isBackpic) { - LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(species, a8, a7), (palette * 0x10) + 0x100, 0x20); - LoadSpecialPokePic( - &gMonFrontPicTable[species], - gMonFrontPicCoords[species].coords, - gMonFrontPicCoords[species].y_offset, - 0x2000000, - (void *)0x2000000, - species, - a7, - 1 - ); - } else { - LoadCompressedPalette( - GetMonSpritePalFromOtIdPersonality(species, a8, a7), (palette * 0x10) + 0x100, 0x20); - LoadSpecialPokePic( - &gMonBackPicTable[species], - gMonBackPicCoords[species].coords, - gMonBackPicCoords[species].y_offset, - 0x2000000, - (void *)0x2000000, - species, - a7, - 0 - ); - } - - src = (void *)0x2000000; - dest = (void *)(0x6010000 + (sheet * 0x20)); - size = 0x800; - DmaCopy32(3, src, dest, size); - - if (!isBackpic) { - sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonFrontPicCoords[species].y_offset, a6); - } else { - sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonBackPicCoords[species].y_offset, a6); - } - if (IsContest()) { - gSprites[sprite].affineAnims = &gSpriteAffineAnimTable_81E7C18; - StartSpriteAffineAnim(&gSprites[sprite], 0); - } - return sprite; -} - -void sub_807A0F4(struct Sprite *sprite) { - DestroySpriteAndFreeResources(sprite); -} - -int sub_807A100(u8 slot, u8 a2) { - u16 species; - u32 personality; - u16 letter; - u16 var; - int ret; - const struct MonCoords *coords; - struct TransformStatus *transform; - if (IsContest()) { - if (unk_2019348.field_4 & 1) { - species = unk_2019348.field_2; - personality = unk_2019348.field_10; - } else { - species = unk_2019348.field_0; - personality = unk_2019348.field_8; - } - if (species == SPECIES_UNOWN) { - letter = GET_UNOWN_LETTER(personality); - if (!letter) { - var = SPECIES_UNOWN; - } else { - var = letter + SPECIES_UNOWN_B - 1; - } - coords = &gMonBackPicCoords[var]; - } else if (species == SPECIES_CASTFORM) { - coords = &gCastformFrontSpriteCoords[gBattleMonForms[slot]]; - } else if (species <= SPECIES_EGG) { - coords = &gMonBackPicCoords[species]; - } else { - coords = &gMonBackPicCoords[0]; - } - } else { - if (!GetBankSide(slot)) { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); - personality = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); - } else { - species = transform->species; - personality = gTransformPersonalities[slot]; - } - if (species == SPECIES_UNOWN) { - letter = GET_UNOWN_LETTER(personality); - if (!letter) { - var = SPECIES_UNOWN; - } else { - var = letter + SPECIES_UNOWN_B - 1; - } - coords = &gMonBackPicCoords[var]; - } else if (species > SPECIES_EGG) { - coords = &gMonBackPicCoords[0]; - } else { - coords = &gMonBackPicCoords[species]; - } - } else { - transform = &gTransformStatuses[slot]; - if (!transform->species) { - species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); - personality = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); - } else { - species = transform->species; - personality = gTransformPersonalities[slot]; - } - if (species == SPECIES_UNOWN) { - letter = GET_UNOWN_LETTER(personality); - if (!letter) { - var = SPECIES_UNOWN; - } else { - var = letter + SPECIES_UNOWN_B - 1; - } - coords = &gMonFrontPicCoords[var]; - } else if (species == SPECIES_CASTFORM) { - coords = &gCastformFrontSpriteCoords[gBattleMonForms[slot]]; - } else if (species > SPECIES_EGG) { - coords = &gMonFrontPicCoords[0]; - } else { - coords = &gMonFrontPicCoords[species]; - } - } - } - - switch (a2) { - case 0: - return (coords->coords & 0xf) * 8; - case 1: - return (coords->coords >> 4) * 8; - case 4: - return sub_8077ABC(slot, 2) - ((coords->coords >> 4) * 4); - case 5: - return sub_8077ABC(slot, 2) + ((coords->coords >> 4) * 4); - case 2: - return sub_8077ABC(slot, 3) - ((coords->coords & 0xf) * 4); - case 3: - return sub_8077ABC(slot, 3) + ((coords->coords & 0xf) * 4); - case 6: - ret = sub_8077ABC(slot, 1) + 0x1f; - return ret - coords->y_offset; - default: - return 0; - } -} - -void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4) { - u8 v1, v2; - s16 v3, v4; - s16 v5, v6; - if (!a2) { - v1 = 0; - v2 = 1; - } else { - v1 = 2; - v2 = 3; - } - v3 = sub_8077ABC(slot, v1); - v4 = sub_8077ABC(slot, v2); - if (IsDoubleBattle() && !IsContest()) { - v5 = sub_8077ABC(slot ^ 2, v1); - v6 = sub_8077ABC(slot ^ 2, v2); - } else { - v5 = v3; - v6 = v4; - } - *a3 = (v3 + v5) / 2; - *a4 = (v4 + v6) / 2; -} - -u8 sub_807A4A0(int a1, u8 sprite, int a3) { - u8 new_sprite = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); - gSprites[new_sprite] = gSprites[sprite]; - gSprites[new_sprite].usingSheet = TRUE; - gSprites[new_sprite].oam.priority = 0; - gSprites[new_sprite].oam.objMode = 2; - gSprites[new_sprite].oam.tileNum = gSprites[sprite].oam.tileNum; - gSprites[new_sprite].callback = SpriteCallbackDummy; - return new_sprite; -} - -void sub_807A544(struct Sprite *sprite) { - sub_8078650(sprite); - if (GetBankSide(gBattleAnimBankAttacker)) { - sprite->pos1.x -= gBattleAnimArgs[0]; - gBattleAnimArgs[3] = -gBattleAnimArgs[3]; - sprite->hFlip = TRUE; - } else { - sprite->pos1.x += gBattleAnimArgs[0]; - } - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gBattleAnimArgs[3]; - sprite->data3 = gBattleAnimArgs[4]; - sprite->data5 = gBattleAnimArgs[5]; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); - sprite->callback = sub_8078504; -} - -void sub_807A5C4(struct Sprite *sprite) { - if (GetBankSide(gBattleAnimBankAttacker)) { - sprite->pos1.x -= gBattleAnimArgs[0]; - gBattleAnimArgs[3] *= -1; - } else { - sprite->pos1.x += gBattleAnimArgs[0]; - } - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gBattleAnimArgs[3]; - sprite->data3 = gBattleAnimArgs[4]; - sprite->data5 = gBattleAnimArgs[5]; - StartSpriteAnim(sprite, gBattleAnimArgs[6]); - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); - sprite->callback = sub_8078504; -} - -void sub_807A63C(struct Sprite *sprite) { - sub_8078650(sprite); - if (GetBankSide(gBattleAnimBankAttacker)) { - sprite->pos1.x -= gBattleAnimArgs[0]; - } else { - sprite->pos1.x += gBattleAnimArgs[0]; - } - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->callback = sub_8078600; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); -} - -void sub_807A69C(u8 taskId) { - u16 src; - u16 dest; - struct Task *task = &gTasks[taskId]; - task->data[0] = GetAnimBankSpriteId(0); - task->data[1] = (GetBankSide(gBattleAnimBankAttacker)) ? -8 : 8; - task->data[2] = 0; - task->data[3] = 0; - gSprites[task->data[0]].pos2.x -= task->data[0]; - task->data[4] = AllocSpritePalette(10097); - task->data[5] = 0; - - dest = (task->data[4] + 0x10) * 0x10; - src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10; - task->data[6] = sub_8079E90(gBattleAnimBankAttacker); - if (task->data[6] == 20 || task->data[6] == 40) { - task->data[6] = 2; - } else { - task->data[6] = 3; - } - CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], 0x20); - BlendPalette(dest, 0x10, gBattleAnimArgs[1], gBattleAnimArgs[0]); - task->func = sub_807A784; -} - -void sub_807A784(u8 taskId) { - struct Task *task = &gTasks[taskId]; - switch (task->data[2]) { - case 0: - sub_807A850(task, taskId); - gSprites[task->data[0]].pos2.x += task->data[1]; - if (++task->data[3] == 5) { - task->data[3]--; - task->data[2]++; - } - break; - case 1: - sub_807A850(task, taskId); - gSprites[task->data[0]].pos2.x -= task->data[1]; - if (--task->data[3] == 0) { - gSprites[task->data[0]].pos2.x = 0; - task->data[2]++; - } - break; - case 2: - if (!task->data[5]) { - FreeSpritePaletteByTag(10097); - DestroyAnimVisualTask(taskId); - } - break; - } -} - -void sub_807A850(struct Task *task, u8 taskId) { - s16 sprite = duplicate_obj_of_side_rel2move_in_transparent_mode(0); - if (sprite >= 0) { - gSprites[sprite].oam.priority = task->data[6]; - gSprites[sprite].oam.paletteNum = task->data[4]; - gSprites[sprite].data0 = 8; - gSprites[sprite].data1 = taskId; - gSprites[sprite].data2 = sprite; - gSprites[sprite].pos2.x = gSprites[task->data[0]].pos2.x; - gSprites[sprite].callback = sub_807A8D4; - task->data[5]++; - } -} - -void sub_807A8D4(struct Sprite *sprite) { - if (--sprite->data0 == 0) { - gTasks[sprite->data1].data[5]--; - obj_delete_but_dont_free_vram(sprite); - } -} - -void sub_807A908(struct Sprite *sprite) { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - if (!GetBankSide(gBattleAnimBankAttacker)) { - sprite->data0 = 5; - } else { - sprite->data0 = -10; - } - sprite->data1 = -40; - sprite->callback = sub_807A960; -} - -void sub_807A960(struct Sprite *sprite) { - sprite->data2 += sprite->data0; - sprite->data3 += sprite->data1; - sprite->pos2.x = sprite->data2 / 10; - sprite->pos2.y = sprite->data3 / 10; - if (sprite->data1 < -20) { - sprite->data1++; - } - if ((sprite->pos1.y + sprite->pos2.y) < -32) { - move_anim_8072740(sprite); - } -} - -void sub_807A9BC(struct Sprite *sprite) { - int x; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data2 = sprite->pos1.x + gBattleAnimArgs[4]; - sprite->data4 = sprite->pos1.y + gBattleAnimArgs[5]; - if (!GetBankSide(gBattleAnimBankTarget)) { - x = (u16)gBattleAnimArgs[4] + 30; - sprite->pos1.x += x; - sprite->pos1.y = gBattleAnimArgs[5] - 20; - } else { - x = (u16)gBattleAnimArgs[4] - 30; - sprite->pos1.x += x; - sprite->pos1.y = gBattleAnimArgs[5] - 80; - } - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); -} diff --git a/src/misc/script_pokemon_util_80C4BF0.c b/src/misc/script_pokemon_util_80C4BF0.c deleted file mode 100644 index f98293a90..000000000 --- a/src/misc/script_pokemon_util_80C4BF0.c +++ /dev/null @@ -1,714 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "berry.h" -#include "choose_party.h" -#include "contest.h" -#include "contest_link_80C2020.h" -#include "contest_painting.h" -#include "data2.h" -#include "daycare.h" -#include "debug.h" -#include "decompress.h" -#include "event_data.h" -#include "items.h" -#include "link.h" -#include "load_save.h" -#include "main.h" -#include "menu.h" -#include "pokedex.h" -#include "pokemon.h" -#include "rng.h" -#include "overworld.h" -#include "script_pokemon_80C4.h" -#include "species.h" -#include "task.h" - -#define CONTEST_ENTRY_PIC_LEFT 10 -#define CONTEST_ENTRY_PIC_TOP 3 - -extern struct SpriteTemplate gUnknown_02024E8C; - -extern u8 gContestPlayerMonIndex; -extern u8 gIsLinkContest; -extern u8 gPlayerPartyCount; -extern u8 gSelectedOrderFromParty[]; - -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; -extern u16 gSpecialVar_0x8006; - -extern u16 gScriptContestCategory; -extern u16 gScriptContestRank; -extern u16 gScriptResult; - -extern u32 gUnknown_03005D28; - -extern u8 gUnknown_02038694; -extern u8 gUnknown_0203856C; -extern u8 gUnknown_02038690[]; -extern u16 gUnknown_02038678[]; - -void sub_80C4BF0(void) -{ - gSaveBlock1.vars[0x10] = gContestMons[0].unk16; - gSaveBlock1.vars[0x11] = gContestMons[1].unk16; - gSaveBlock1.vars[0x12] = gContestMons[2].unk16; -} - -void sub_80C4C28(void) -{ - u16 var; - u8 specialVar = gSpecialVar_0x8005; - - switch(specialVar) - { - case 0: - var = 3; - break; - case 1: - var = 4; - break; - case 2: - var = 5; - break; - default: - var = 100; - break; - } - gSpecialVar_0x8004 = var; -} - -void sub_80C4C64(void) -{ - sub_80C46EC(); - sub_80C4740(); - sub_80C48F4(); -} - -void sub_80C4C78(void) -{ - u16 var; - u16 returnVar; - - switch(gScriptContestCategory) - { - case 0: - var = 8; - break; - case 1: - var = 9; - break; - case 2: - var = 10; - break; - case 3: - var = 11; - break; - case 4: - default: - var = 12; - break; - } - - returnVar = gSaveBlock1.sbStruct.unkSB2.sb1_2EFC_struct2[var].var; - - if(returnVar == 0) - gSpecialVar_0x8004 = returnVar; - else - gSpecialVar_0x8004 = 1; -} - -void sub_80C4CEC(void) -{ - sub_80B2A7C(0xFF); -} - -void sub_80C4CF8(void) -{ - if(!gUnknown_02038690[gContestPlayerMonIndex] - && gScriptContestRank == 3 - && (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800) - { - gSpecialVar_0x8004 = 1; - } - else - { - gSpecialVar_0x8004 = 0; - } -} - -u8 sub_80C4D50(void) -{ - u8 retVar = 0; - int i; - - for (i = 0; i < 5; i++) - if (gSaveBlock1.sbStruct.unkSB2.sb1_2EFC_struct2[i + 8].var) - retVar++; - - return retVar; -} - -// nope. too hard -__attribute__((naked)) -void sub_80C4D80(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\ - ldr r0, _080C4EA0 @ =gUnknown_02038670\n\ - mov r12, r0\n\ - ldr r1, _080C4EA4 @ =gSpecialVar_0x8006\n\ - mov r8, r1\n\ - ldr r2, _080C4EA8 @ =gStringVar1\n\ - mov r9, r2\n\ - mov r2, r12\n\ - mov r1, sp\n\ - movs r6, 0x3\n\ -_080C4D9E:\n\ - ldrh r0, [r2]\n\ - strh r0, [r1]\n\ - adds r2, 0x2\n\ - adds r1, 0x2\n\ - subs r6, 0x1\n\ - cmp r6, 0\n\ - bge _080C4D9E\n\ - movs r6, 0\n\ -_080C4DAE:\n\ - movs r1, 0x3\n\ - cmp r1, r6\n\ - ble _080C4DD8\n\ -_080C4DB4:\n\ - subs r4, r1, 0x1\n\ - lsls r0, r4, 1\n\ - mov r5, sp\n\ - adds r3, r5, r0\n\ - lsls r0, r1, 1\n\ - adds r2, r5, r0\n\ - ldrh r5, [r3]\n\ - movs r7, 0\n\ - ldrsh r1, [r3, r7]\n\ - movs r7, 0\n\ - ldrsh r0, [r2, r7]\n\ - cmp r1, r0\n\ - bge _080C4DD2\n\ - strh r5, [r2]\n\ - strh r0, [r3]\n\ -_080C4DD2:\n\ - adds r1, r4, 0\n\ - cmp r1, r6\n\ - bgt _080C4DB4\n\ -_080C4DD8:\n\ - adds r6, 0x1\n\ - cmp r6, 0x2\n\ - ble _080C4DAE\n\ - mov r2, r8\n\ - ldrh r0, [r2]\n\ - lsls r0, 1\n\ - add r0, sp\n\ - ldrh r0, [r0]\n\ - movs r2, 0\n\ - movs r7, 0\n\ - movs r6, 0\n\ - lsls r0, 16\n\ - asrs r4, r0, 16\n\ - adds r3, r0, 0\n\ - mov r1, sp\n\ -_080C4DF6:\n\ - movs r5, 0\n\ - ldrsh r0, [r1, r5]\n\ - cmp r0, r4\n\ - bne _080C4E12\n\ - lsls r0, r2, 24\n\ - movs r2, 0x80\n\ - lsls r2, 17\n\ - adds r0, r2\n\ - lsrs r2, r0, 24\n\ - mov r5, r8\n\ - ldrh r5, [r5]\n\ - cmp r6, r5\n\ - bne _080C4E12\n\ - adds r7, r2, 0\n\ -_080C4E12:\n\ - adds r1, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - ble _080C4DF6\n\ - movs r6, 0\n\ - mov r0, sp\n\ - movs r1, 0\n\ - ldrsh r0, [r0, r1]\n\ - asrs r1, r3, 16\n\ - lsls r2, 24\n\ - mov r10, r2\n\ - cmp r0, r1\n\ - beq _080C4E40\n\ - adds r2, r1, 0\n\ - mov r1, sp\n\ -_080C4E30:\n\ - adds r1, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - bgt _080C4E40\n\ - movs r4, 0\n\ - ldrsh r0, [r1, r4]\n\ - cmp r0, r2\n\ - bne _080C4E30\n\ -_080C4E40:\n\ - lsls r0, r6, 24\n\ - lsrs r4, r0, 24\n\ - adds r2, r7, 0\n\ - movs r6, 0\n\ - asrs r5, r3, 16\n\ - mov r8, r5\n\ - mov r1, r12\n\ - movs r5, 0\n\ - ldrsh r0, [r1, r5]\n\ - cmp r8, r0\n\ - bne _080C4E60\n\ - cmp r7, 0x1\n\ - beq _080C4E78\n\ -_080C4E5A:\n\ - subs r0, r2, 0x1\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ -_080C4E60:\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - bgt _080C4E78\n\ - lsls r0, r6, 1\n\ - add r0, r12\n\ - asrs r1, r3, 16\n\ - movs r5, 0\n\ - ldrsh r0, [r0, r5]\n\ - cmp r1, r0\n\ - bne _080C4E60\n\ - cmp r2, 0x1\n\ - bne _080C4E5A\n\ -_080C4E78:\n\ - lsls r1, r6, 24\n\ - lsrs r1, 24\n\ - mov r0, r9\n\ - bl sub_80C4698\n\ - ldr r0, _080C4EAC @ =gIsLinkContest\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080C4EB8\n\ - ldr r0, _080C4EB0 @ =gStringVar2\n\ - lsls r1, r6, 3\n\ - subs r1, r6\n\ - lsls r1, 2\n\ - ldr r2, _080C4EB4 @ =gLinkPlayers + 0x8\n\ - adds r1, r2\n\ - bl sub_80C4674\n\ - b _080C4EC4\n\ - .align 2, 0\n\ -_080C4EA0: .4byte gUnknown_02038670\n\ -_080C4EA4: .4byte gSpecialVar_0x8006\n\ -_080C4EA8: .4byte gStringVar1\n\ -_080C4EAC: .4byte gIsLinkContest\n\ -_080C4EB0: .4byte gStringVar2\n\ -_080C4EB4: .4byte gLinkPlayers + 0x8\n\ -_080C4EB8:\n\ - ldr r0, _080C4ED8 @ =gStringVar2\n\ - lsls r1, r6, 6\n\ - ldr r2, _080C4EDC @ =gUnknown_0203857D\n\ - adds r1, r2\n\ - bl sub_80C4674\n\ -_080C4EC4:\n\ - mov r1, r10\n\ - asrs r0, r1, 24\n\ - cmp r0, 0x1\n\ - beq _080C4ED0\n\ - cmp r7, r0\n\ - bne _080C4EE4\n\ -_080C4ED0:\n\ - ldr r0, _080C4EE0 @ =gSpecialVar_0x8006\n\ - strh r4, [r0]\n\ - b _080C4EEA\n\ - .align 2, 0\n\ -_080C4ED8: .4byte gStringVar2\n\ -_080C4EDC: .4byte gUnknown_0203857D\n\ -_080C4EE0: .4byte gSpecialVar_0x8006\n\ -_080C4EE4:\n\ - ldr r1, _080C4EFC @ =gSpecialVar_0x8006\n\ - adds r0, r4, 0x4\n\ - strh r0, [r1]\n\ -_080C4EEA:\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\ -_080C4EFC: .4byte gSpecialVar_0x8006\n\ - .syntax divided"); -} - -void ShowContestWinnerCleanup(void) -{ - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); -} - -void ShowContestWinner(void) -{ - if(gUnknown_0203856C) - { - sub_80AAF30(); - BATTLE_STRUCT->unk15DDF = 1; - BATTLE_STRUCT->unk15DDE = sub_80B2C4C(254, 0); - sub_80B2A7C(3); - gUnknown_0203856C = 0; - } - SetMainCallback2(CB2_ContestPainting); - gMain.savedCallback = ShowContestWinnerCleanup; -} - -void sub_80C4F70(void) -{ - VarSet(0x4010, gContestMons[0].unk16); - VarSet(0x4011, gContestMons[1].unk16); - VarSet(0x4012, gContestMons[2].unk16); - VarSet(0x4013, gContestMons[3].unk16); -} - -bool8 GiveMonArtistRibbon(void) -{ - u8 ribbon = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_ARTIST_RIBBON); - - if(ribbon == FALSE - && gUnknown_02038690[gContestPlayerMonIndex] == 0 - && gScriptContestRank == 3 - && (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800) - { - ribbon = TRUE; - SetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_ARTIST_RIBBON, &ribbon); - return TRUE; - } - else - { - return FALSE; - } -} - -u8 sub_80C5044(void) -{ - return gUnknown_0203856C; -} - -void ShowContestEntryMonPic(void) -{ - const struct CompressedSpritePalette *palette; - u32 var1, var2; - u16 species; - u8 spriteId; - u8 taskId; - - if(FindTaskIdByFunc(sub_80C5190) == 0xFF) - { - u8 left = CONTEST_ENTRY_PIC_LEFT; - u8 top = CONTEST_ENTRY_PIC_TOP; - - MenuDrawTextWindow(left, top, 19, 13); - species = gContestMons[gSpecialVar_0x8006].species; - var1 = gContestMons[gSpecialVar_0x8006].unk38; // v2 - var2 = gContestMons[gSpecialVar_0x8006].unk3C; // v3 - taskId = CreateTask(sub_80C5190, 0x50); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = species; - HandleLoadSpecialPokePic( - &gMonFrontPicTable[species], - gMonFrontPicCoords[species].coords, - gMonFrontPicCoords[species].y_offset, - (u32)gUnknown_081FAF4C[0], - gUnknown_081FAF4C[1], - species, - var1); - palette = GetMonSpritePalStructFromOtIdPersonality(species, var2, var1); - LoadCompressedObjectPalette(palette); - GetMonSpriteTemplate_803C56C(species, 1); - gUnknown_02024E8C.paletteTag = palette->tag; - spriteId = CreateSprite(&gUnknown_02024E8C, 0x78, 0x40, 0); - gTasks[taskId].data[2] = spriteId; - gTasks[taskId].data[3] = left; - gTasks[taskId].data[4] = top; - gSprites[spriteId].callback = SpriteCallbackDummy; - gSprites[spriteId].oam.priority = 0; - } -} - -void sub_80C5164(void) -{ - u8 taskId = FindTaskIdByFunc(sub_80C5190); - - if(taskId != 0xFF) - gTasks[taskId].data[0]++; -} - -void sub_80C5190(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - struct Sprite *sprite; - - switch(task->data[0]) - { - case 2: - sprite = &gSprites[task->data[2]]; - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); - - if(sprite->oam.affineMode) - FreeOamMatrix(sprite->oam.matrixNum); - - DestroySprite(sprite); - task->data[0]++; - break; - case 0: - task->data[0]++; - break; - case 3: - MenuZeroFillWindowRect(task->data[3], task->data[4], task->data[3] + 9, task->data[4] + 10); - DestroyTask(taskId); - break; - case 1: - default: - break; - } -} - -void ScriptGetMultiplayerId(void) -{ - if(gIsLinkContest & 1) - gScriptResult = GetMultiplayerId(); - else - gScriptResult = 4; -} - -void ScriptRandom(void) -{ - u16 random; - u16 *scriptPtr; - - if(gIsLinkContest & 1) - { - gUnknown_03005D28 = 1103515245 * gUnknown_03005D28 + 24691; - random = gUnknown_03005D28 >> 16; - scriptPtr = &gScriptResult; - } - else - { - scriptPtr = &gScriptResult; - random = Random(); - } - *scriptPtr = random % *scriptPtr; -} - -void ScrSpecial_HealPlayerParty(void) -{ - u8 i, j; - u8 ppBonuses; - u8 arg[4]; - - // restore HP. - for(i = 0; i < gPlayerPartyCount; i++) - { - u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); - arg[0] = maxHP; - arg[1] = maxHP >> 8; - SetMonData(&gPlayerParty[i], MON_DATA_HP, arg); - ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES); - - // restore PP. - for(j = 0; j < 4; j++) - { - arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j); - SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg); - } - - // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData. - arg[0] = 0; - arg[1] = 0; - arg[2] = 0; - arg[3] = 0; - SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg); - } -} - -u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3) -{ - u16 nationalDexNum; - int sentToPc; - u8 heldItem[2]; - struct Pokemon mon; - - 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); - nationalDexNum = SpeciesToNationalPokedexNum(species); - - switch(sentToPc) - { - case 0: - case 1: - GetSetPokedexFlag(nationalDexNum, 2); - GetSetPokedexFlag(nationalDexNum, 3); - break; - } - return sentToPc; -} - -u8 ScriptGiveEgg(u16 species) -{ - struct Pokemon mon; - u8 isEgg; - - sub_8042044(&mon, species, 1); - isEgg = TRUE; - SetMonData(&mon, MON_DATA_IS_EGG, &isEgg); - - return GiveMonToPlayer(&mon); -} - -void CheckForAlivePartyMons(void) -{ - u8 var = sub_803DAA0(); - - switch(var) - { - case 1: - gScriptResult = var; - break; - case 0: - gScriptResult = var; - break; - case 2: - gScriptResult = var; - break; - } -} - -bool8 CheckPartyMonHasHeldItem(u16 item) -{ - int i; - - for(i = 0; i < 6; i++) - { - u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - if(species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item) - return TRUE; - } - return FALSE; -} - -bool8 GetNameOfEnigmaBerryInPlayerParty(void) -{ - bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY); - - if(hasItem == TRUE) - GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1); - - return hasItem; -} - -void CreateScriptedWildMon(u16 species, u8 level, u16 item) -{ - u8 heldItem[2]; - - ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], species, level, 0x20, 0, 0, 0, 0); - - if(item) - { - heldItem[0] = item; - heldItem[1] = item >> 8; - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem); - } -} - -void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot) -{ - if(monIndex > 6) - monIndex = gPlayerPartyCount - 1; - - SetMonMoveSlot(&gPlayerParty[monIndex], move, slot); -} - -void sub_80C5568(void) -{ - gMain.savedCallback = sub_80C5580; - sub_8121E10(); -} - -void sub_80C5580(void) -{ - u8 var = gSelectedOrderFromParty[0]; - - switch(var) - { - case 0: - gScriptResult = 0; - break; - default: - gScriptResult = 1; - break; - } - - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); -} - -void ChooseBattleTowerPlayerParty(void) -{ - gMain.savedCallback = SetBattleTowerPlayerParty; - sub_8121E34(); -} - -void SetBattleTowerPlayerParty(void) -{ - u8 var = gSelectedOrderFromParty[0]; - - switch(var) - { - case 0: // player quit battle tower? - LoadPlayerParty(); - gScriptResult = 0; - break; - default: // load battle tower. - ReducePlayerPartyToThree(); - gScriptResult = 1; - break; - } - - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); -} - -void ReducePlayerPartyToThree(void) -{ - struct Pokemon party[3]; - int i; - - CpuFill32(0, party, sizeof party); - - // copy the selected pokemon according to the order. - for(i = 0; i < 3; i++) - if(gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop - party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal - - // delete the last 3 pokemon - CpuFill32(0, gPlayerParty, sizeof gPlayerParty); - - // overwrite the first 3 with the order copied to. - for(i = 0; i < 3; i++) - gPlayerParty[i] = party[i]; - - CalculatePlayerPartyCount(); -} diff --git a/src/misc/script_pokemon_util_80F99CC.c b/src/misc/script_pokemon_util_80F99CC.c deleted file mode 100644 index f930df8e2..000000000 --- a/src/misc/script_pokemon_util_80F99CC.c +++ /dev/null @@ -1,444 +0,0 @@ -#include "global.h" -#include "battle_party_menu.h" -#include "choose_party.h" -#include "contest.h" -#include "data2.h" -#include "party_menu.h" -#include "field_fadetransition.h" -#include "palette.h" -#include "party_menu.h" -#include "pokemon.h" -#include "pokemon_summary_screen.h" -#include "overworld.h" -#include "script.h" -#include "script_pokemon_80F9.h" -#include "songs.h" -#include "sound.h" -#include "string_util.h" -#include "task.h" -#include "text.h" - -extern u8 gPlayerPartyCount; -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; -extern u8 gUnknown_02038694; -extern u16 gScriptResult; - -extern void (*gFieldCallback)(void); - -void sub_80F99CC(void) -{ - u8 taskId; - - ScriptContext2_Enable(); - taskId = CreateTask((void *)sub_80F9A8C, 0xA); - gTasks[taskId].data[0] = 2; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); -} - -void sub_80F9A0C(void) -{ - u8 taskId; - - ScriptContext2_Enable(); - taskId = CreateTask((void *)sub_80F9A8C, 0xA); - gTasks[taskId].data[0] = 3; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); -} - -void sub_80F9A4C(void) -{ - u8 taskId; - - ScriptContext2_Enable(); - taskId = CreateTask((void *)sub_80F9A8C, 0xA); - gTasks[taskId].data[0] = 7; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); -} - -void sub_80F9A8C(u8 taskId) -{ - if (!gPaletteFade.active) - { - gPaletteFade.bufferTransferDisabled = 1; - OpenPartyMenu((u8) gTasks[taskId].data[0], 0); - DestroyTask(taskId); - } -} - -bool8 sub_80F9ACC(void) -{ - switch (EWRAM_1B000.unk264) - { - case 0: - if (EWRAM_1B000.unk266 < gPlayerPartyCount) - { - TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); - EWRAM_1B000.unk266++; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; - } - break; - case 1: - LoadHeldItemIconGraphics(); - EWRAM_1B000.unk264++; - break; - case 2: - CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); - EWRAM_1B000.unk264++; - break; - case 3: - if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1) - { - EWRAM_1B000.unk266++; - break; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; - break; - } - case 4: - PartyMenuPrintMonsLevelOrStatus(); - EWRAM_1B000.unk264++; - break; - case 5: - PrintPartyMenuMonNicknames(); - EWRAM_1B000.unk264++; - break; - case 6: - sub_80F9C00(); - EWRAM_1B000.unk264++; - break; - case 7: // the only case that can return true. - if (sub_806B58C(EWRAM_1B000.unk266) != 1) - { - EWRAM_1B000.unk266++; - break; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264 = 0; - return TRUE; - } - } - return FALSE; -} - -void sub_80F9C00(void) -{ - u8 i; - - for (i = 0; i < gPlayerPartyCount; i++) - { - switch (sub_80AE47C(&gPlayerParty[i])) - { - case 0: - case 3: - case 4: - sub_806BC3C(i, 0x7E); - break; - case 1: - case 2: - sub_806BC3C(i, 0x70); - break; - } - } -} - -void sub_80F9C6C(u8 var) -{ - if (!gPaletteFade.active) - { - switch (sub_806BD80(var)) - { - case 1: - PlaySE(SE_SELECT); - gUnknown_02038694 = sub_806CA38(var); - gSpecialVar_0x8004 = gUnknown_02038694; - sub_8123138(var); - break; - case 2: - PlaySE(SE_SELECT); - gUnknown_02038694 = 0xFF; - gSpecialVar_0x8004 = 0xFF; - sub_8123138(var); - break; - } - } -} - -bool8 sub_80F9CE8(void) // this is the same function as sub_80F9ACC except case 6 calls a different function. why -{ - switch (EWRAM_1B000.unk264) - { - case 0: - if (EWRAM_1B000.unk266 < gPlayerPartyCount) - { - TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); - EWRAM_1B000.unk266++; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; - } - break; - case 1: - LoadHeldItemIconGraphics(); - EWRAM_1B000.unk264++; - break; - case 2: - CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); - EWRAM_1B000.unk264++; - break; - case 3: - if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1) - { - EWRAM_1B000.unk266++; - break; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264++; - break; - } - case 4: - PartyMenuPrintMonsLevelOrStatus(); - EWRAM_1B000.unk264++; - break; - case 5: - PrintPartyMenuMonNicknames(); - EWRAM_1B000.unk264++; - break; - case 6: - sub_80F9E1C(); - EWRAM_1B000.unk264++; - break; - case 7: // the only case that can return true. - if (sub_806B58C(EWRAM_1B000.unk266) != 1) - { - EWRAM_1B000.unk266++; - break; - } - else - { - EWRAM_1B000.unk266 = 0; - EWRAM_1B000.unk264 = 0; - return TRUE; - } - } - return FALSE; -} - -void sub_80F9E1C(void) -{ - u8 i; - - for (i = 0; i < gPlayerPartyCount; i++) - { - if (!sub_8040574(&gPlayerParty[i])) - sub_806BC3C(i, 0x9A); - else - sub_806BC3C(i, 0x8C); - } -} - -void sub_80F9E64(u8 var) -{ - if (!gPaletteFade.active) - { - switch (sub_806BD80(var)) - { - case 1: - PlaySE(SE_SELECT); - gSpecialVar_0x8004 = sub_806CA38(var); - gSpecialVar_0x8005 = sub_8040574(&gPlayerParty[gSpecialVar_0x8004]); - sub_8123138(var); - break; - case 2: - PlaySE(SE_SELECT); - gSpecialVar_0x8004 = 0xFF; - sub_8123138(var); - } - } -} - -void sub_80F9EEC(void) -{ - sub_809D9F0(&gPlayerParty[0], gSpecialVar_0x8004, gPlayerPartyCount - 1, c2_exit_to_overworld_2_switch, 0); - unk_2018000.unk8 = 3; - gFieldCallback = sub_8080990; -} - -void ScrSpecial_CountPokemonMoves(void) // count pokemon moves -{ - u8 i; - - gScriptResult = 0; - - for (i = 0; i < 4; i++) // checks MOVE1-MOVE4 - if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_MOVE1 + i)) - gScriptResult++; -} - -void ScrSpecial_GetPokemonNicknameAndMoveName(void) -{ - struct Pokemon *pkmn = &gPlayerParty[gSpecialVar_0x8004]; - u16 data = GetMonData(pkmn, MON_DATA_MOVE1 + gSpecialVar_0x8005); - - GetMonNickname(pkmn, gStringVar1); - StringCopy(gStringVar2, gMoveNames[data]); -} - -// no. hard -__attribute__((naked)) -void sub_80F9FDC(struct Pokemon *party, u8 var, u8 var2) -{ - 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, 0x20\n\ - mov r8, r0\n\ - adds r5, r1, 0\n\ - adds r4, r2, 0\n\ - lsls r5, 24\n\ - lsrs r5, 24\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - adds r0, r5, 0\n\ - adds r0, 0xD\n\ - str r0, [sp, 0x8]\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x8]\n\ - bl GetMonData\n\ - mov r1, sp\n\ - adds r1, 0x2\n\ - str r1, [sp, 0x14]\n\ - strh r0, [r1]\n\ - adds r3, r4, 0\n\ - adds r3, 0xD\n\ - str r3, [sp, 0xC]\n\ - mov r0, r8\n\ - adds r1, r3, 0\n\ - bl GetMonData\n\ - mov r1, sp\n\ - strh r0, [r1]\n\ - adds r7, r5, 0\n\ - adds r7, 0x11\n\ - str r7, [sp, 0x10]\n\ - mov r0, r8\n\ - adds r1, r7, 0\n\ - bl GetMonData\n\ - mov r1, sp\n\ - adds r1, 0x5\n\ - str r1, [sp, 0x18]\n\ - strb r0, [r1]\n\ - adds r3, r4, 0\n\ - adds r3, 0x11\n\ - str r3, [sp, 0x1C]\n\ - mov r0, r8\n\ - adds r1, r3, 0\n\ - bl GetMonData\n\ - add r7, sp, 0x4\n\ - mov r10, r7\n\ - strb r0, [r7]\n\ - mov r0, r8\n\ - movs r1, 0x15\n\ - bl GetMonData\n\ - mov r6, sp\n\ - adds r6, 0x6\n\ - strb r0, [r6]\n\ - ldr r1, _080FA0D8 @ =gUnknown_08208238\n\ - adds r0, r5, r1\n\ - ldrb r0, [r0]\n\ - mov r9, r0\n\ - ldrb r0, [r6]\n\ - adds r2, r0, 0\n\ - mov r3, r9\n\ - ands r2, r3\n\ - lsls r5, 1\n\ - asrs r2, r5\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - adds r1, r4, r1\n\ - ldrb r3, [r1]\n\ - adds r1, r0, 0\n\ - ands r1, r3\n\ - lsls r4, 1\n\ - asrs r1, r4\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r7, r9\n\ - bics r0, r7\n\ - strb r0, [r6]\n\ - ldrb r0, [r6]\n\ - bics r0, r3\n\ - strb r0, [r6]\n\ - lsls r2, r4\n\ - lsls r1, r5\n\ - adds r2, r1\n\ - ldrb r0, [r6]\n\ - orrs r0, r2\n\ - strb r0, [r6]\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x8]\n\ - mov r2, sp\n\ - bl SetMonData\n\ - mov r0, r8\n\ - ldr r1, [sp, 0xC]\n\ - ldr r2, [sp, 0x14]\n\ - bl SetMonData\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x10]\n\ - mov r2, r10\n\ - bl SetMonData\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x1C]\n\ - ldr r2, [sp, 0x18]\n\ - bl SetMonData\n\ - mov r0, r8\n\ - movs r1, 0x15\n\ - adds r2, r6, 0\n\ - bl SetMonData\n\ - add sp, 0x20\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\ -_080FA0D8: .4byte gUnknown_08208238\n\ - .syntax divided"); -} - -void sub_80FA0DC(void) -{ - u16 i; - - SetMonMoveSlot(&gPlayerParty[gSpecialVar_0x8004], 0, gSpecialVar_0x8005); - RemoveMonPPBonus(&gPlayerParty[gSpecialVar_0x8004], gSpecialVar_0x8005); - - for (i = gSpecialVar_0x8005; i < 3; i++) - sub_80F9FDC(&gPlayerParty[gSpecialVar_0x8004], i, i + 1); -} - -void sub_80FA148(void) -{ - struct Pokemon *party = &gPlayerParty[gSpecialVar_0x8004]; - gScriptResult = 0; - - if (GetMonData(party, MON_DATA_IS_EGG)) - gScriptResult = 1; -} diff --git a/src/misc/unknown_task.c b/src/misc/unknown_task.c deleted file mode 100644 index 5ec7fa6bc..000000000 --- a/src/misc/unknown_task.c +++ /dev/null @@ -1,248 +0,0 @@ -#include "global.h" -#include "data2.h" -#include "task.h" -#include "trig.h" -#include "unknown_task.h" - -struct UnknownStruct1 -{ - void *src[2]; - volatile void *dest; - u32 unkC; - void (*unk10)(void); - u8 srcBank; - u8 unk15; - u8 unk16; - u8 unk17; - u8 taskId; - u8 filler19[0x7]; -}; - -static void sub_80896F4(void); -static void sub_8089714(void); - -extern u16 gUnknown_030041B0; -extern u16 gUnknown_030041B4; -extern u16 gUnknown_030041B8; -extern u16 gUnknown_03004280; -extern u16 gUnknown_03004288; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; -extern u16 gUnknown_030042C0; - -extern u8 gUnknown_0202FFA4; - -extern struct UnknownStruct1 gUnknown_03004DC0; - -extern u16 gUnknown_03004DE0[][0x3C0]; - -void remove_some_task(void) -{ - gUnknown_03004DC0.unk15 = 0; - DmaStop(0); - if (gUnknown_03004DC0.taskId != 0xFF) - { - DestroyTask(gUnknown_03004DC0.taskId); - gUnknown_03004DC0.taskId = 0xFF; - } -} - -void dp12_8087EA4(void) -{ - CpuFill16(0, gUnknown_03004DE0, 0x780 * 2); - gUnknown_03004DC0.src[0] = 0; - gUnknown_03004DC0.src[1] = 0; - gUnknown_03004DC0.dest = 0; - gUnknown_03004DC0.unkC = 0; - gUnknown_03004DC0.srcBank = 0; - gUnknown_03004DC0.unk15 = 0; - gUnknown_03004DC0.unk16 = 0; - gUnknown_03004DC0.unk17 = 0; - gUnknown_03004DC0.taskId = 0xFF; -} - -void sub_80895F8(struct UnknownTaskStruct unk) -{ - if (unk.control == (((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1)) - { - gUnknown_03004DC0.src[0] = &gUnknown_03004DE0[0][1]; - gUnknown_03004DC0.src[1] = &gUnknown_03004DE0[1][1]; - gUnknown_03004DC0.unk10 = sub_80896F4; - } - else - { - gUnknown_03004DC0.src[0] = &gUnknown_03004DE0[0][2]; - gUnknown_03004DC0.src[1] = &gUnknown_03004DE0[1][2]; - gUnknown_03004DC0.unk10 = sub_8089714; - } - - gUnknown_03004DC0.unkC = unk.control; - gUnknown_03004DC0.dest = unk.dest; - gUnknown_03004DC0.unk15 = unk.unk8; - gUnknown_03004DC0.unk16 = unk.unk9; - gUnknown_03004DC0.unk17 = unk.unk9; -} - -void sub_8089668(void) -{ - if (gUnknown_03004DC0.unk15) - { - if (gUnknown_03004DC0.unk15 == 3) - { - gUnknown_03004DC0.unk15 = 0; - DmaStop(0); - gUnknown_0202FFA4 = 1; - } - else - { - DmaStop(0); - DmaSet(0, gUnknown_03004DC0.src[gUnknown_03004DC0.srcBank], gUnknown_03004DC0.dest, gUnknown_03004DC0.unkC); - gUnknown_03004DC0.unk10(); - gUnknown_03004DC0.srcBank ^= 1; - } - } -} - -static void sub_80896F4(void) -{ - u16 *dest = (u16 *)gUnknown_03004DC0.dest; - u16 *src = (u16 *)&gUnknown_03004DE0[gUnknown_03004DC0.srcBank]; - *dest = *src; -} - -static void sub_8089714(void) -{ - u32 *dest = (u32 *)gUnknown_03004DC0.dest; - u32 *src = (u32 *)&gUnknown_03004DE0[gUnknown_03004DC0.srcBank]; - *dest = *src; -} - -static void task00_for_dp12(u8 taskId) -{ - int value = 0; - - if (gUnknown_0202FFA4) - { - DestroyTask(taskId); - gUnknown_03004DC0.taskId = 0xFF; - } - else - { - if (gTasks[taskId].data[7]) - { - switch (gTasks[taskId].data[6]) - { - case 0x0: - value = gUnknown_030042A4; - break; - case 0x2: - value = gUnknown_030042A0; - break; - case 0x4: - value = gUnknown_030042C0; - break; - case 0x6: - value = gUnknown_030041B4; - break; - case 0x8: - value = gUnknown_03004288; - break; - case 0xA: - value = gUnknown_03004280; - break; - case 0xC: - value = gUnknown_030041B0; - break; - case 0xE: - value = gUnknown_030041B8; - break; - } - } - if (gTasks[taskId].data[4]) - { - int i; - int offset; - gTasks[taskId].data[4]--; - offset = gTasks[taskId].data[3] + 320; - for (i = gTasks[taskId].data[0]; i < gTasks[taskId].data[1]; i++) - { - gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = gUnknown_03004DE0[0][offset] + value; - offset++; - } - } - else - { - int i; - int offset; - gTasks[taskId].data[4] = gTasks[taskId].data[5]; - offset = gTasks[taskId].data[3] + 320; - for (i = gTasks[taskId].data[0]; i < gTasks[taskId].data[1]; i++) - { - gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = gUnknown_03004DE0[0][offset] + value; - offset++; - } - gTasks[taskId].data[3]++; - if (gTasks[taskId].data[3] == gTasks[taskId].data[2]) - { - gTasks[taskId].data[3] = 0; - } - } - } -} - -static void sub_80898FC(u16 *a1, u8 a2, u8 a3, u8 a4) -{ - u16 i = 0; - u8 offset = 0; - - while (i < 0x100) - { - a1[i] = (gSineTable[offset] * a3) / 256; - offset += a2; - i++; - } -} - -u8 sub_8089944(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) -{ - int i; - int offset; - struct UnknownTaskStruct unk; - u8 taskId; - - dp12_8087EA4(); - - unk.dest = (void *)(REG_ADDR_BG0HOFS + a6); - unk.control = ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1; - unk.unk8 = 1; - unk.unk9 = 0; - - sub_80895F8(unk); - - taskId = CreateTask(task00_for_dp12, 0); - - gTasks[taskId].data[0] = a1; - gTasks[taskId].data[1] = a2; - gTasks[taskId].data[2] = 256 / a3; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = a5; - gTasks[taskId].data[5] = a5; - gTasks[taskId].data[6] = a6; - gTasks[taskId].data[7] = a7; - - gUnknown_03004DC0.taskId = taskId; - gUnknown_0202FFA4 = 0; - - sub_80898FC(&gUnknown_03004DE0[0][320], a3, a4, a2 - a1); - - offset = 320; - - for (i = a1; i < a2; i++) - { - gUnknown_03004DE0[0][i] = gUnknown_03004DE0[0][offset]; - gUnknown_03004DE0[1][i] = gUnknown_03004DE0[0][offset]; - offset++; - } - - return taskId; -} diff --git a/src/misc/unused_8124F94.c b/src/misc/unused_8124F94.c deleted file mode 100644 index 5f76fa92e..000000000 --- a/src/misc/unused_8124F94.c +++ /dev/null @@ -1,126 +0,0 @@ -#include "global.h" -#include "decompress.h" -#include "palette.h" - -struct UnknownStruct2 -{ - void *src; - u8 unk4; - u8 unk5; - u8 unk6; - u16 unk8; -}; - -struct UnknownStruct3 -{ - u16 *paletteSrc; - u8 unk4; - u8 paletteCount; -}; - -struct UnknownStruct1 -{ - u8 paletteNum; - u8 unk1; - u16 unk2; - u8 *dest; - struct UnknownStruct3 unk8[16]; - struct UnknownStruct2 unk88[32]; -}; - -void unref_sub_8124F94(struct UnknownStruct1 *a) -{ - a->unk1 = 0; - a->paletteNum = 0; - a->unk2 = 0; - a->dest = (void *)VRAM; - DmaFill16(3, 0, a->unk8, sizeof(a->unk8)); - DmaFill16(3, 0, a->unk88, sizeof(a->unk88)); -} - -u8 unref_sub_8124FD8(struct UnknownStruct1 *a, const struct UnknownStruct2 *b) -{ - while (1) - { - s32 r6; - s32 temp; - - // Couldn't get it to match any other way - if (a->unk1 < 32 && b->src == NULL) - return 0; - if (a->unk1 >= 32) - break; - - a->unk88[a->unk1].src = b->src; - a->unk88[a->unk1].unk6 = b->unk6; - a->unk88[a->unk1].unk4 = b->unk4; - a->unk88[a->unk1].unk5 = b->unk5; - r6 = b->unk4 * b->unk5; - if (a->unk2 + r6 > 0x400) - return 2; - if (b->unk8 == 0) - { - DmaCopy16(3, b->src, a->dest + a->unk2 * 64, r6 * 32); - } - else - { - LZDecompressWram(b->src, a->dest + a->unk2 * 64); - } - a->unk88[a->unk1].unk8 = a->unk2; - temp = r6 + a->unk2; - a->unk2 = temp; - a->unk1++; - b++; - } - return 1; -} - -u8 unref_sub_81250A4(struct UnknownStruct1 *a, struct UnknownStruct3 *b) -{ - while (1) - { - // Couldn't get it to match any other way - if (a->paletteNum < 16 && b->paletteSrc == NULL) - return 0; - if (a->paletteNum >= 16) - break; - - a->unk8[a->paletteNum].paletteSrc = b->paletteSrc; - a->unk8[a->paletteNum].unk4 = b->unk4; - if (b->paletteCount == 0) - { - LoadPalette(b->paletteSrc, a->paletteNum * 16, 32); - } - else - { - u16 palette[16]; - - LZDecompressWram(b->paletteSrc, palette); - LoadPalette(palette, a->paletteNum * 16, 32); - } - a->unk8[a->paletteNum].paletteCount = a->paletteNum; - a->paletteNum = a->paletteNum + 1; - b++; - } - return 1; -} - -u8 unref_sub_8125118(struct UnknownStruct1 *a, struct UnknownStruct3 *b) -{ - u16 palettes[16][16] = {0}; - u8 r7 = b->paletteCount; - u8 i; - - LZDecompressWram(b->paletteSrc, palettes); - for (i = a->paletteNum; i < r7; i++) - { - if (a->paletteNum + i >= 16) - return 1; - a->unk8[i].paletteSrc = b->paletteSrc; - a->unk8[i].unk4 = b->unk4 + i; - a->unk8[i].paletteCount = a->paletteNum; - LoadPalette(palettes[i], a->paletteNum * 16, sizeof(palettes[i])); - a->paletteNum++; - } - return 0; -} diff --git a/src/rom3.c b/src/rom3.c new file mode 100644 index 000000000..3f4860ecc --- /dev/null +++ b/src/rom3.c @@ -0,0 +1,1168 @@ +#include "global.h" +#include "battle.h" +#include "battle_811DA74.h" +#include "battle_ai.h" +#include "battle_anim.h" +#include "battle_anim_81258BC.h" +#include "battle_anim_8137220.h" +#include "cable_club.h" +#include "items.h" +#include "link.h" +#include "pokemon.h" +#include "rom3.h" +#include "rom_8094928.h" +#include "species.h" +#include "task.h" +#include "util.h" +#include "battle_message.h" +#include "data2.h" + +extern u8 unk_2000000[]; + +#define EWRAM_14000 ((u8 *)(unk_2000000 + 0x14000)) +#define EWRAM_15000 ((u8 *)(unk_2000000 + 0x15000)) + +extern u16 gBattleTypeFlags; +extern u16 gBattleWeather; +extern struct BattlePokemon gBattleMons[]; + +static EWRAM_DATA u8 gUnknown_020238C4 = 0; +static EWRAM_DATA u8 gUnknown_020238C5 = 0; +static EWRAM_DATA u8 gUnknown_020238C6 = 0; + +extern u32 gUnknown_020239FC; +extern u8 gBattleBufferA[][0x200]; +extern u8 gBattleBufferB[][0x200]; +extern u8 gActiveBank; +extern u32 gBattleExecBuffer; +extern u8 gNoOfAllBanks; +extern u16 gBattlePartyID[]; +extern u8 gBanksBySide[]; +extern u16 gCurrentMove; +extern u16 gUnknown_02024BE8; +extern u16 gLastUsedItem; +extern u8 gLastUsedAbility; +extern u8 gBankAttacker; +extern u8 gBankTarget; +extern u8 gEffectBank; +extern u8 gStringBank; +extern u8 gAbsentBankFlags; +extern u8 gMultiHitCounter; +extern u8 gUnknown_02024C78; +extern u8 gBattleOutcome; +extern u8 gActionSelectionCursor[]; +extern u8 gMoveSelectionCursor[]; +extern u8 gBattleTextBuff1[]; +extern u8 gBattleTextBuff2[]; +extern u8 gBattleTextBuff3[]; +extern void (*gBattleMainFunc)(void); +extern void (*gBattleBankFunc[])(void); + +u8 gBattleBuffersTransferData[0x170]; + +void sub_800B858(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + OpenLink(); + CreateTask(sub_8083C50, 0); + sub_800BF28(); + } +} + +void setup_poochyena_battle(void) +{ + s32 i; + + gBattleMainFunc = nullsub_41; + for (i = 0; i < 4; i++) + { + gBattleBankFunc[i] = nullsub_91; + gBanksBySide[i] = 0xFF; + gActionSelectionCursor[i] = 0; + gMoveSelectionCursor[i] = 0; + } + sub_800B858(); + gBattleExecBuffer = 0; + battle_anim_clear_some_data(); + ClearBattleMonForms(); + BattleAI_HandleItemUseBeforeAISetup(); + if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) + { + ZeroEnemyPartyMons(); + CreateMon(&gEnemyParty[0], SPECIES_POOCHYENA, 2, 32, 0, 0, 0, 0); + i = ITEM_NONE; + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&i); + } + gUnknown_020239FC = 0; + gUnknown_02024C78 = 0; +} + +void sub_800B950(void) +{ + s32 i; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + sub_800BA78(); + else + sub_800B9A8(); + sub_800BD54(); + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + for (i = 0; i < gNoOfAllBanks; i++) + sub_8094978(i, 0); + } +} + +void sub_800B9A8(void) +{ + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + gBattleMainFunc = sub_8010800; + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + gBattleBankFunc[0] = SetBankFuncToSafariBufferRunCommand; + else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) + gBattleBankFunc[0] = SetBankFuncToWallyBufferRunCommand; + else + gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[0] = 0; + gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand; + gBanksBySide[1] = 1; + gNoOfAllBanks = 2; + } + else + { + gBattleMainFunc = sub_8010800; + gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[0] = 0; + gBattleBankFunc[1] = SetBankFuncToOpponentBufferRunCommand; + gBanksBySide[1] = 1; + gBattleBankFunc[2] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[2] = 2; + gBattleBankFunc[3] = SetBankFuncToOpponentBufferRunCommand; + gBanksBySide[3] = 3; + gNoOfAllBanks = 4; + } +} + +void sub_800BA78(void) +{ + u8 multiplayerId; + int i; + + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + if (gBattleTypeFlags & BATTLE_TYPE_WILD) + { + gBattleMainFunc = sub_8010800; + gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[0] = 0; + gBattleBankFunc[1] = SetBankFuncToLinkOpponentBufferRunCommand; + gBanksBySide[1] = 1; + gNoOfAllBanks = 2; + } + else + { + gBattleBankFunc[1] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[1] = 0; + gBattleBankFunc[0] = SetBankFuncToLinkOpponentBufferRunCommand; + gBanksBySide[0] = 1; + gNoOfAllBanks = 2; + } + return; + } + if ((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) == BATTLE_TYPE_DOUBLE) + { + if (gBattleTypeFlags & BATTLE_TYPE_WILD) + { + gBattleMainFunc = sub_8010800; + gBattleBankFunc[0] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[0] = 0; + gBattleBankFunc[1] = SetBankFuncToLinkOpponentBufferRunCommand; + gBanksBySide[1] = 1; + gBattleBankFunc[2] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[2] = 2; + gBattleBankFunc[3] = SetBankFuncToLinkOpponentBufferRunCommand; + gBanksBySide[3] = 3; + gNoOfAllBanks = 4; + } + else + { + gBattleBankFunc[1] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[1] = 0; + gBattleBankFunc[0] = SetBankFuncToLinkOpponentBufferRunCommand; + gBanksBySide[0] = 1; + gBattleBankFunc[3] = SetBankFuncToPlayerBufferRunCommand; + gBanksBySide[3] = 2; + gBattleBankFunc[2] = SetBankFuncToLinkOpponentBufferRunCommand; + gBanksBySide[2] = 3; + gNoOfAllBanks = 4; + + } + return; + } + multiplayerId = GetMultiplayerId(); + if (gBattleTypeFlags & BATTLE_TYPE_WILD) + gBattleMainFunc = sub_8010800; + for (i = 0; i < 4; i++) + { + switch (gLinkPlayers[i].lp_field_18) + { + case 0: + case 3: + sub_8094978(gLinkPlayers[i].lp_field_18, 0); + break; + case 1: + case 2: + sub_8094978(gLinkPlayers[i].lp_field_18, 1); + break; + } + + if (i == multiplayerId) + { + gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToPlayerBufferRunCommand; + switch (gLinkPlayers[i].lp_field_18) + { + case 0: + case 3: + gBanksBySide[gLinkPlayers[i].lp_field_18] = 0; + gBattlePartyID[gLinkPlayers[i].lp_field_18] = 0; + break; + case 1: + case 2: + gBanksBySide[gLinkPlayers[i].lp_field_18] = 2; + gBattlePartyID[gLinkPlayers[i].lp_field_18] = 3; + break; + } + } + else + { + if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[multiplayerId].lp_field_18 & 1)) + || ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[multiplayerId].lp_field_18 & 1))) + { + gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToLinkPartnerBufferRunCommand; + switch (gLinkPlayers[i].lp_field_18) + { + case 0: + case 3: + gBanksBySide[gLinkPlayers[i].lp_field_18] = 0; + gBattlePartyID[gLinkPlayers[i].lp_field_18] = 0; + break; + case 1: + case 2: + gBanksBySide[gLinkPlayers[i].lp_field_18] = 2; + gBattlePartyID[gLinkPlayers[i].lp_field_18] = 3; + break; + } + } + else + { + gBattleBankFunc[gLinkPlayers[i].lp_field_18] = SetBankFuncToLinkOpponentBufferRunCommand; + switch (gLinkPlayers[i].lp_field_18) + { + case 0: + case 3: + gBanksBySide[gLinkPlayers[i].lp_field_18] = 1; + gBattlePartyID[gLinkPlayers[i].lp_field_18] = 0; + break; + case 1: + case 2: + gBanksBySide[gLinkPlayers[i].lp_field_18] = 3; + gBattlePartyID[gLinkPlayers[i].lp_field_18] = 3; + break; + } + } + } + } + gNoOfAllBanks = 4; +} + +void sub_800BD54(void) +{ + int i; + int j; + + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + for (i = 0; i < gNoOfAllBanks; i++) + { + for (j = 0; j < 6; j++) + { + if (i < 2) + { + if (!(gBanksBySide[i] & 1)) + { + if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != 0 + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) == 0) + { + gBattlePartyID[i] = j; + break; + } + } + else + { + if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != 0 + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) == 0) + { + gBattlePartyID[i] = j; + break; + } + } + } + else + { + if (!(gBanksBySide[i] & 1)) + { + if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES) != 0 //Probably a typo by Game Freak. The rest use SPECIES2 + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) == 0 + && gBattlePartyID[i - 2] != j) + { + gBattlePartyID[i] = j; + break; + } + } + else + { + if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != 0 + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) == 0 + && gBattlePartyID[i - 2] != j) + { + gBattlePartyID[i] = j; + break; + } + } + } + } + } + } +} + +void PrepareBufferDataTransfer(u8 a, u8 *data, u16 size) +{ + int i; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + PrepareBufferDataTransferLink(a, size, data); + } + else + { + switch (a) + { + case 0: + for (i = 0; i < size; i++) + { + gBattleBufferA[gActiveBank][i] = *data; + data++; + } + break; + case 1: + for (i = 0; i < size; i++) + { + gBattleBufferB[gActiveBank][i] = *data; + data++; + } + break; + } + } +} + +void sub_800BF28(void) +{ + gUnknown_020238C4 = CreateTask(sub_800C1A8, 0); + gTasks[gUnknown_020238C4].data[11] = 0; + gTasks[gUnknown_020238C4].data[12] = 0; + gTasks[gUnknown_020238C4].data[13] = 0; + gTasks[gUnknown_020238C4].data[14] = 0; + gTasks[gUnknown_020238C4].data[15] = 0; + gUnknown_020238C5 = CreateTask(sub_800C47C, 0); + gTasks[gUnknown_020238C5].data[12] = 0; + gTasks[gUnknown_020238C5].data[13] = 0; + gTasks[gUnknown_020238C5].data[14] = 0; + gTasks[gUnknown_020238C5].data[15] = 0; + gUnknown_020238C6 = 0; + CpuFill16(0, EWRAM_14000, 0x2000); +} + +void PrepareBufferDataTransferLink(u8 a, u16 size, u8 *data) +{ + s32 r9; + int i; + + r9 = size - size % 4 + 4; + if (gTasks[gUnknown_020238C4].data[14] + r9 + 9 > 0x1000) + { + gTasks[gUnknown_020238C4].data[12] = gTasks[gUnknown_020238C4].data[14]; + gTasks[gUnknown_020238C4].data[14] = 0; + } + unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14000] = a; + unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14001] = gActiveBank; + unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14002] = gBankAttacker; + unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14003] = gBankTarget; + unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14004] = r9; + 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 < 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; +} + +void sub_800C1A8(u8 taskId) +{ + u16 var; + + switch (gTasks[taskId].data[11]) + { + case 0: + gTasks[taskId].data[10] = 100; + gTasks[taskId].data[11]++; + break; + case 1: + gTasks[taskId].data[10]--; + if (gTasks[taskId].data[10] == 0) + gTasks[taskId].data[11]++; + break; + case 2: + GetLinkPlayerCount_2(); + if (IsLinkMaster()) + { + sub_8007F4C(); + gTasks[taskId].data[11]++; + break; + } + gTasks[taskId].data[11]++; + break; + case 3: + if (gTasks[taskId].data[15] != gTasks[taskId].data[14]) + { + if (gTasks[taskId].data[13] == 0) + { + if (gTasks[taskId].data[15] > gTasks[taskId].data[14] + && gTasks[taskId].data[15] == gTasks[taskId].data[12]) + { + gTasks[taskId].data[12] = 0; + gTasks[taskId].data[15] = 0; + } + var = (unk_2000000[gTasks[taskId].data[15] + 0x14004] | (unk_2000000[gTasks[taskId].data[15] + 0x14005] << 8)) + 8; + SendBlock(bitmask_all_link_players_but_self(), &unk_2000000[gTasks[taskId].data[15] + 0x14000], var); + gTasks[taskId].data[11]++; + } + else + { + gTasks[taskId].data[13]--; + break; + } + } + break; + case 4: + if (sub_8007ECC()) + { + var = unk_2000000[gTasks[taskId].data[15] + 0x14004] | (unk_2000000[gTasks[taskId].data[15] + 0x14005] << 8); + gTasks[taskId].data[13] = 1; + gTasks[taskId].data[15] = gTasks[taskId].data[15] + var + 8; + gTasks[taskId].data[11] = 3; + } + break; + case 5: + gTasks[taskId].data[13]--; + if (gTasks[taskId].data[13] == 0) + { + gTasks[taskId].data[13] = 1; + gTasks[taskId].data[11] = 3; + } + break; + } +} + +//fix me +void sub_800C35C(void) +{ + u8 i; //r4 + s32 j; //r2 + u16 r6; //r6 + u8 *recvBuffer; //r3 + u8 *dest; //r5 + u8 *src; //r4 + + if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & 0x20) && gLinkPlayers[0].linkType == 0x2211) + { + for (i = 0; i < GetLinkPlayerCount(); i++) + { + if (GetBlockReceivedStatus() & gBitTable[i]) + { + ResetBlockReceivedFlag(i); + recvBuffer = (u8 *)&gBlockRecvBuffer[i]; +#ifndef NONMATCHING + asm(""); + recvBuffer = (u8 *)&gBlockRecvBuffer[i]; +#endif + r6 = gBlockRecvBuffer[i][2]; + if (gTasks[gUnknown_020238C5].data[14] + 9 + r6 > 0x1000) + { + gTasks[gUnknown_020238C5].data[12] = gTasks[gUnknown_020238C5].data[14]; + gTasks[gUnknown_020238C5].data[14] = 0; + } + //_0800C402 + dest = EWRAM_15000 + gTasks[gUnknown_020238C5].data[14]; + src = recvBuffer; + for (j = 0; j < r6 + 8; j++) + dest[j] = src[j]; + gTasks[gUnknown_020238C5].data[14] = gTasks[gUnknown_020238C5].data[14] + r6 + 8; + } + //_0800C446 + } + } +} + +void sub_800C47C(u8 taskId) +{ + u16 r7; + u8 r4; + u8 r2; + + if (gTasks[taskId].data[15] != gTasks[taskId].data[14]) + { + if (gTasks[taskId].data[15] > gTasks[taskId].data[14] + && gTasks[taskId].data[15] == gTasks[taskId].data[12]) + { + gTasks[taskId].data[12] = 0; + gTasks[taskId].data[15] = 0; + } + r4 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 1]; + r7 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 4] | (unk_2000000[0x15000 + gTasks[taskId].data[15] + 5] << 8); + switch (unk_2000000[0x15000 + gTasks[taskId].data[15] + 0]) + { + case 0: + if (gBattleExecBuffer & gBitTable[r4]) + return; + memcpy(gBattleBufferA[r4], &unk_2000000[0x15000 + gTasks[taskId].data[15] + 8], r7); + sub_80155A4(r4); + if (!(gBattleTypeFlags & BATTLE_TYPE_WILD)) + { + gBankAttacker = unk_2000000[0x15000 + gTasks[taskId].data[15] + 2]; + gBankTarget = unk_2000000[0x15000 + gTasks[taskId].data[15] + 3]; + gAbsentBankFlags = unk_2000000[0x15000 + gTasks[taskId].data[15] + 6]; + gEffectBank = unk_2000000[0x15000 + gTasks[taskId].data[15] + 7]; + } + break; + case 1: + memcpy(gBattleBufferB[r4], &unk_2000000[0x15000 + gTasks[taskId].data[15] + 8], r7); + break; + case 2: + r2 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 8]; + gBattleExecBuffer &= ~(gBitTable[r4] << (r2 * 4)); + break; + } + gTasks[taskId].data[15] = gTasks[taskId].data[15] + r7 + 8; + } +} + +void EmitGetAttributes(u8 a, u8 b, u8 c) +{ + gBattleBuffersTransferData[0] = 0; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = 0; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void Emitcmd1(u8 a, u8 b, u8 c) +{ + gBattleBuffersTransferData[0] = 1; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = 0; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, void *e) +{ + int i; + + gBattleBuffersTransferData[0] = 2; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + for (i = 0; i < d; i++) + gBattleBuffersTransferData[3 + i] = *(u8*)(e++); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, d + 3); +} + +void Emitcmd3(u8 a, u8 b, u8 c, u8 *d) +{ + int i; + + gBattleBuffersTransferData[0] = 3; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + for (i = 0; i < c; i++) + gBattleBuffersTransferData[3 + i] = *(d++); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, c + 3); +} + +void EmitLoadPokeSprite(u8 a) +{ + gBattleBuffersTransferData[0] = 4; + gBattleBuffersTransferData[1] = 4; + gBattleBuffersTransferData[2] = 4; + gBattleBuffersTransferData[3] = 4; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitSendOutPoke(u8 a, u8 b, u8 c) +{ + gBattleBuffersTransferData[0] = 5; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = 5; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitReturnPokeToBall(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 6; + gBattleBuffersTransferData[1] = b; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); +} + +void EmitTrainerThrow(u8 a) +{ + gBattleBuffersTransferData[0] = 7; + gBattleBuffersTransferData[1] = 7; + gBattleBuffersTransferData[2] = 7; + gBattleBuffersTransferData[3] = 7; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitTrainerSlide(u8 a) +{ + gBattleBuffersTransferData[0] = 8; + gBattleBuffersTransferData[1] = 8; + gBattleBuffersTransferData[2] = 8; + gBattleBuffersTransferData[3] = 8; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitTrainerSlideBack(u8 a) +{ + gBattleBuffersTransferData[0] = 9; + gBattleBuffersTransferData[1] = 9; + gBattleBuffersTransferData[2] = 9; + gBattleBuffersTransferData[3] = 9; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void Emitcmd10(u8 a) +{ + gBattleBuffersTransferData[0] = 10; + gBattleBuffersTransferData[1] = 10; + gBattleBuffersTransferData[2] = 10; + gBattleBuffersTransferData[3] = 10; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void Emitcmd11(u8 a) +{ + gBattleBuffersTransferData[0] = 11; + gBattleBuffersTransferData[1] = 11; + gBattleBuffersTransferData[2] = 11; + gBattleBuffersTransferData[3] = 11; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void Emitcmd12(u8 a) +{ + gBattleBuffersTransferData[0] = 12; + gBattleBuffersTransferData[1] = 12; + gBattleBuffersTransferData[2] = 12; + gBattleBuffersTransferData[3] = 12; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitBallThrow(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 13; + gBattleBuffersTransferData[1] = b; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); +} + +void EmitPuase(u8 a, u8 b, u8 *c) +{ + int i; + + gBattleBuffersTransferData[0] = 14; + gBattleBuffersTransferData[1] = b; + for (i = 0; i < b * 3; i++) + gBattleBuffersTransferData[2 + i] = *(c++); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b * 3 + 2); +} + +void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStruct *g) +{ + gBattleBuffersTransferData[0] = 15; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + gBattleBuffersTransferData[3] = c; + gBattleBuffersTransferData[4] = d; + gBattleBuffersTransferData[5] = (d & 0xFF00) >> 8; + gBattleBuffersTransferData[6] = e; + gBattleBuffersTransferData[7] = (e & 0x0000FF00) >> 8; + gBattleBuffersTransferData[8] = (e & 0x00FF0000) >> 16; + gBattleBuffersTransferData[9] = (e & 0xFF000000) >> 24; + gBattleBuffersTransferData[10] = f; + gBattleBuffersTransferData[11] = gMultiHitCounter; + if (AbilityBattleEffects(14, 0, 13, 0, 0) == 0 && AbilityBattleEffects(14, 0, 0x4D, 0, 0) == 0) + { + gBattleBuffersTransferData[12] = gBattleWeather; + gBattleBuffersTransferData[13] = (gBattleWeather & 0xFF00) >> 8; + } + else + { + gBattleBuffersTransferData[12] = 0; + gBattleBuffersTransferData[13] = 0; + } + gBattleBuffersTransferData[14] = 0; + gBattleBuffersTransferData[15] = 0; + memcpy(&gBattleBuffersTransferData[16], g, sizeof(*g)); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 0x2C); +} + +void EmitPrintString(u8 a, u16 stringID) +{ + s32 i; + struct StringInfoBattle* stringInfo; + + gBattleBuffersTransferData[0] = 16; + gBattleBuffersTransferData[1] = gBattleOutcome; + 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; + + 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 EmitPrintStringPlayerOnly(u8 a, u16 stringID) +{ + 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) +{ + gBattleBuffersTransferData[0] = 18; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void Emitcmd19(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 19; + gBattleBuffersTransferData[1] = b; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); +} + +void Emitcmd20(u8 a, u8 b, u8 c, u8 *d) +{ + u32 i; + + gBattleBuffersTransferData[0] = 20; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = 0; + for (i = 0; i < 20; i++) + gBattleBuffersTransferData[4 + i] = d[i]; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 24); +} + +void EmitOpenBag(u8 a, u8 *b) +{ + int i; + + gBattleBuffersTransferData[0] = 21; + for (i = 0; i < 3; i++) + gBattleBuffersTransferData[1 + i] = b[i]; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e) +{ + int i; + + gBattleBuffersTransferData[0] = 22; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = d; + for (i = 0; i < 3; i++) + gBattleBuffersTransferData[4 + i] = e[i]; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 8); //but only 7 bytes were written +} + +void Emitcmd23(u8 a) +{ + gBattleBuffersTransferData[0] = 23; + gBattleBuffersTransferData[1] = 23; + gBattleBuffersTransferData[2] = 23; + gBattleBuffersTransferData[3] = 23; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +// FIXME: I think this function is supposed to take s16 as its second argument, +// but battle_4.c expects u16 +void EmitHealthBarUpdate(u8 a, u16 b) +{ + gBattleBuffersTransferData[0] = 24; + gBattleBuffersTransferData[1] = 0; + gBattleBuffersTransferData[2] = (s16)b; + gBattleBuffersTransferData[3] = ((s16)b & 0xFF00) >> 8; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +// FIXME: I think this function is supposed to take s16 as its third argument, +// but battle_4.c expects u16 +void EmitExpBarUpdate(u8 a, u8 b, u16 c) +{ + gBattleBuffersTransferData[0] = 25; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (s16)c; + gBattleBuffersTransferData[3] = ((s16)c & 0xFF00) >> 8; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitStatusIconUpdate(u8 a, u32 b, u32 c) +{ + gBattleBuffersTransferData[0] = 26; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0x0000FF00) >> 8; + gBattleBuffersTransferData[3] = (b & 0x00FF0000) >> 16; + gBattleBuffersTransferData[4] = (b & 0xFF000000) >> 24; + gBattleBuffersTransferData[5] = c; + gBattleBuffersTransferData[6] = (c & 0x0000FF00) >> 8; + gBattleBuffersTransferData[7] = (c & 0x00FF0000) >> 16; + gBattleBuffersTransferData[8] = (c & 0xFF000000) >> 24; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 9); +} + +void EmitStatusAnimation(u8 a, u8 b, u32 c) +{ + gBattleBuffersTransferData[0] = 27; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = (c & 0x0000FF00) >> 8; + gBattleBuffersTransferData[4] = (c & 0x00FF0000) >> 16; + gBattleBuffersTransferData[5] = (c & 0xFF000000) >> 24; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 6); +} + +void EmitStatusXor(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 28; + gBattleBuffersTransferData[1] = b; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); +} + +void Emitcmd29(u8 a, u16 b, u8 *c) +{ + int i; + + gBattleBuffersTransferData[0] = 29; + gBattleBuffersTransferData[1] = 29; + gBattleBuffersTransferData[2] = b; + gBattleBuffersTransferData[3] = (b & 0xFF00) >> 8; + for (i = 0; i < b; i++) + gBattleBuffersTransferData[4 + i] = *(c++); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 4); +} + +void EmitDMATransfer(u8 a, u32 b, u16 c, u8 *d) +{ + int i; + + gBattleBuffersTransferData[0] = 30; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0x0000FF00) >> 8; + gBattleBuffersTransferData[3] = (b & 0x00FF0000) >> 16; + gBattleBuffersTransferData[4] = (b & 0xFF000000) >> 24; + gBattleBuffersTransferData[5] = c; + gBattleBuffersTransferData[6] = (c & 0xFF00) >> 8; + for (i = 0; i < c; i++) + gBattleBuffersTransferData[7 + i] = *(d++); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, c + 7); +} + +void Emitcmd31(u8 a, u16 b, u8 *c) +{ + int i; + + gBattleBuffersTransferData[0] = 31; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + for (i = 0; i < b; i++) + gBattleBuffersTransferData[3 + i] = *(c++); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 3); +} + +void Emitcmd32(u8 a, u16 b, u8 *c) +{ + int i; + + gBattleBuffersTransferData[0] = 32; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + for (i = 0; i < b; i++) + gBattleBuffersTransferData[3 + i] = *(c++); + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 3); +} + +void Emitcmd33(u8 a, u8 b, u16 c) +{ + gBattleBuffersTransferData[0] = 33; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void Emitcmd34(u8 a, u8 b, u8 *c) +{ + int i; + + gBattleBuffersTransferData[0] = 34; + gBattleBuffersTransferData[1] = b; + for (i = 0; i < 3; i++) + gBattleBuffersTransferData[2 + i] = c[i]; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 5); +} + +void Emitcmd35(u8 a, u16 b) +{ + gBattleBuffersTransferData[0] = 35; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + gBattleBuffersTransferData[3] = 0; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void Emitcmd36(u8 a, u16 b) +{ + gBattleBuffersTransferData[0] = 36; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + gBattleBuffersTransferData[3] = 0; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void Emitcmd37(u8 a) +{ + gBattleBuffersTransferData[0] = 37; + gBattleBuffersTransferData[1] = 37; + gBattleBuffersTransferData[2] = 37; + gBattleBuffersTransferData[3] = 37; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void Emitcmd38(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 38; + gBattleBuffersTransferData[1] = b; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); +} + +void Emitcmd39(u8 a) +{ + gBattleBuffersTransferData[0] = 39; + gBattleBuffersTransferData[1] = 39; + gBattleBuffersTransferData[2] = 39; + gBattleBuffersTransferData[3] = 39; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void Emitcmd40(u8 a) +{ + gBattleBuffersTransferData[0] = 40; + gBattleBuffersTransferData[1] = 40; + gBattleBuffersTransferData[2] = 40; + gBattleBuffersTransferData[3] = 40; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitHitAnimation(u8 a) +{ + gBattleBuffersTransferData[0] = 41; + gBattleBuffersTransferData[1] = 41; + gBattleBuffersTransferData[2] = 41; + gBattleBuffersTransferData[3] = 41; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void Emitcmd42(u8 a) +{ + gBattleBuffersTransferData[0] = 42; + gBattleBuffersTransferData[1] = 42; + gBattleBuffersTransferData[2] = 42; + gBattleBuffersTransferData[3] = 42; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitEffectivenessSound(u8 a, u16 b) +{ + gBattleBuffersTransferData[0] = 43; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + gBattleBuffersTransferData[3] = 0; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void Emitcmd44(u8 a, u16 b) +{ + gBattleBuffersTransferData[0] = 44; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + gBattleBuffersTransferData[3] = 0; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitFaintingCry(u8 a) +{ + gBattleBuffersTransferData[0] = 45; + gBattleBuffersTransferData[1] = 45; + gBattleBuffersTransferData[2] = 45; + gBattleBuffersTransferData[3] = 45; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitIntroSlide(u8 a, u8 battleTerrain) +{ + gBattleBuffersTransferData[0] = 46; + gBattleBuffersTransferData[1] = battleTerrain; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); +} + +void EmitTrainerBallThrow(u8 a) +{ + gBattleBuffersTransferData[0] = 47; + gBattleBuffersTransferData[1] = 47; + gBattleBuffersTransferData[2] = 47; + gBattleBuffersTransferData[3] = 47; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void Emitcmd48(u8 a, u8 *b, u8 c) +{ + int i; + + gBattleBuffersTransferData[0] = 48; + gBattleBuffersTransferData[1] = c & 0x7F; + gBattleBuffersTransferData[2] = (c & 0x80) >> 7; + gBattleBuffersTransferData[3] = 48; + for (i = 0; i < 48; i++) + gBattleBuffersTransferData[4 + i] = b[i]; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 52); +} + +void Emitcmd49(u8 a) +{ + gBattleBuffersTransferData[0] = 49; + gBattleBuffersTransferData[1] = 49; + gBattleBuffersTransferData[2] = 49; + gBattleBuffersTransferData[3] = 49; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void Emitcmd50(u8 a) +{ + gBattleBuffersTransferData[0] = 50; + gBattleBuffersTransferData[1] = 50; + gBattleBuffersTransferData[2] = 50; + gBattleBuffersTransferData[3] = 50; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitSpriteInvisibility(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 51; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = 51; + gBattleBuffersTransferData[3] = 51; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitBattleAnimation(u8 a, u8 b, u16 c) +{ + gBattleBuffersTransferData[0] = 52; + gBattleBuffersTransferData[1] = b; + gBattleBuffersTransferData[2] = c; + gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); +} + +void EmitLinkStandbyMsg(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 53; + gBattleBuffersTransferData[1] = b; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); +} + +void EmitResetActionMoveSelection(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 54; + gBattleBuffersTransferData[1] = b; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); +} + +void Emitcmd55(u8 a, u8 b) +{ + gBattleBuffersTransferData[0] = 55; + gBattleBuffersTransferData[1] = b; + PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2); +} diff --git a/src/rom6.c b/src/rom6.c new file mode 100644 index 000000000..3a5071034 --- /dev/null +++ b/src/rom6.c @@ -0,0 +1,202 @@ +#include "global.h" +#include "rom6.h" +#include "braille_puzzles.h" +#include "field_effect.h" +#include "field_map_obj.h" +#include "field_player_avatar.h" +#include "item_use.h" +#include "pokemon_menu.h" +#include "overworld.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" + +extern u16 gScriptLastTalked; +extern void (*gFieldCallback)(void); +extern u8 gLastFieldPokeMenuOpened; +extern void (*gUnknown_03005CE4)(void); +extern u8 S_UseRockSmash[]; + +EWRAM_DATA struct MapPosition gUnknown_0203923C = {0}; + +static void task08_080C9820(u8); +static void sub_810B3DC(u8); +static void sub_810B428(u8); +static void sub_810B4CC(u8); +static void sub_810B53C(void); +static void sub_810B58C(void); +static void sub_810B5D8(void); +static void sub_810B634(void); + +bool8 npc_before_player_of_type(u8 a) +{ + u8 mapObjId; + + GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203923C.x, &gUnknown_0203923C.y); + gUnknown_0203923C.height = PlayerGetZCoord(); + mapObjId = GetFieldObjectIdByXYZ(gUnknown_0203923C.x, gUnknown_0203923C.y, gUnknown_0203923C.height); + if (gMapObjects[mapObjId].graphicsId != a) + { + return FALSE; + } + else + { + gScriptLastTalked = gMapObjects[mapObjId].localId; + return TRUE; + } +} + +u8 oei_task_add(void) +{ + GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203923C.x, &gUnknown_0203923C.y); + return CreateTask(task08_080C9820, 8); +} + +static void task08_080C9820(u8 taskId) +{ + u8 mapObjId; + + ScriptContext2_Enable(); + gPlayerAvatar.unk6 = 1; + mapObjId = gPlayerAvatar.mapObjectId; + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(&gMapObjects[mapObjId]) + || FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId])) + { + if (gMapHeader.mapType == MAP_TYPE_UNDERWATER) + { + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + gTasks[taskId].func = sub_810B428; + } + else + { + sub_8059BF4(); + FieldObjectSetSpecialAnim(&gMapObjects[mapObjId], 0x39); + gTasks[taskId].func = sub_810B3DC; + } + } +} + +static void sub_810B3DC(u8 taskId) +{ + if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[gPlayerAvatar.mapObjectId]) == TRUE) + { + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + gTasks[taskId].func = sub_810B428; + } +} + +static void sub_810B428(u8 taskId) +{ + if (!FieldEffectActiveListContains(6)) + { + 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], gFieldEffectArguments[2]); + FieldEffectActiveListRemove(6); + gTasks[taskId].func = sub_810B4CC; + } +} + +static void sub_810B4CC(u8 taskId) +{ + void (*func)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]); + + func(); + gPlayerAvatar.unk6 = 0; + DestroyTask(taskId); +} + +bool8 SetUpFieldMove_RockSmash(void) +{ + if (npc_before_player_of_type(0x56) == TRUE) + { + gFieldCallback = FieldCallback_Teleport; + gUnknown_03005CE4 = sub_810B53C; + return TRUE; + } + else + { + return FALSE; + } +} + +static void sub_810B53C(void) +{ + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; + ScriptContext1_SetupScript(S_UseRockSmash); +} + +int FldEff_RockSmash(void) +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (u32)sub_810B58C >> 16; + gTasks[taskId].data[9] = (u32)sub_810B58C; + IncrementGameStat(0x13); + return 0; +} + +static void sub_810B58C(void) +{ + PlaySE(SE_W088); + FieldEffectActiveListRemove(FLDEFF_USE_ROCK_SMASH); + EnableBothScriptContexts(); +} + +int SetUpFieldMove_Dig(void) +{ + if (CanUseEscapeRopeOnCurrMap() == TRUE) + { + gFieldCallback = FieldCallback_Teleport; + gUnknown_03005CE4 = sub_810B5D8; + return TRUE; + } + else + { + return FALSE; + } +} + +static void sub_810B5D8(void) +{ + sub_8053014(); + FieldEffectStart(FLDEFF_USE_DIG); + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; +} + +int FldEff_UseDig(void) +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (u32)sub_810B634 >> 16; + gTasks[taskId].data[9] = (u32)sub_810B634; + if (!ShouldDoBrailleDigEffect()) + SetPlayerAvatarTransitionFlags(1); + return 0; +} + +static void sub_810B634(void) +{ + u8 taskId; + + FieldEffectActiveListRemove(FLDEFF_USE_DIG); + if (ShouldDoBrailleDigEffect()) + { + DoBrailleDigEffect(); + } + else + { + taskId = CreateTask(task08_080A1C44, 8); + gTasks[taskId].data[0] = 0; + } +} diff --git a/src/rom_800D42C.c b/src/rom_800D42C.c new file mode 100644 index 000000000..f51779e65 --- /dev/null +++ b/src/rom_800D42C.c @@ -0,0 +1,118 @@ +#include "global.h" +#include "battle.h" +#include "link.h" +#include "text.h" + +extern u16 gBattleTypeFlags; +extern u8 gBattleOutcome; + +extern struct Window gUnknown_03004210; + +extern u8 BattleText_Win[]; +extern u8 BattleText_Loss[]; +extern u8 BattleText_Tie[]; + +#if ENGLISH +#define LEFT_MESSAGE_X 6 +#define RIGHT_MESSAGE_X 21 +#define TILE_OFFSET_LOSS 168 +#elif GERMAN +#define LEFT_MESSAGE_X 5 +#define RIGHT_MESSAGE_X 20 +#define TILE_OFFSET_LOSS 172 +#endif +#define TILE_OFFSET_WIN 160 +#define CENTER_MESSAGE_X 13 +#define MESSAGE_Y 2 + +#define PRINT_MESSAGE(text, tileDataStartOffset, x) \ +{ \ + InitWindow(&gUnknown_03004210, text, tileDataStartOffset, x, MESSAGE_Y); \ + sub_8002F44(&gUnknown_03004210); \ +} + +#define PRINT_MESSAGE_LEFT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, LEFT_MESSAGE_X) +#define PRINT_MESSAGE_RIGHT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, RIGHT_MESSAGE_X) + +void PrintLinkBattleWinLossTie(void) +{ + + if (gBattleOutcome == 3) + { + PRINT_MESSAGE(BattleText_Tie, TILE_OFFSET_WIN, CENTER_MESSAGE_X); + return; + } + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + // Double battle? + + if (gBattleOutcome == 1) + { + + // lp_field_18 = player position? + switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18) + { + case 0: + case 2: + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); + return; + + case 1: + case 3: + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN) + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS) + return; + } + } + else + { + + switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18) + { + case 1: + case 3: + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); + return; + + case 0: + case 2: + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); + return; + } + } + + return; + } + + + if (gBattleOutcome == 1) + { + if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0) + { + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); + } + else + { + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); + } + } + else + { + if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0) + { + PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); + } + else + { + PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); + PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); + } + } +} diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c new file mode 100644 index 000000000..172233e6d --- /dev/null +++ b/src/rom_8077ABC.c @@ -0,0 +1,2055 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "battle.h" +#include "battle_anim.h" +#include "blend_palette.h" +#include "data2.h" +#include "decompress.h" +#include "palette.h" +#include "pokemon_icon.h" +#include "species.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "util.h" + +#define GET_UNOWN_LETTER(personality) ((\ + (((personality & 0x03000000) >> 24) << 6) \ + | (((personality & 0x00030000) >> 16) << 4) \ + | (((personality & 0x00000300) >> 8) << 2) \ + | (((personality & 0x00000003) >> 0) << 0) \ +) % 28) + +#define IS_DOUBLE_BATTLE() ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? TRUE : FALSE) + +#define NUM_BATTLE_SLOTS 4 + +#define gBattleMonPartyPositions gBattlePartyID +#define gCastformElevations gUnknownCastformData_0837F5A8 +#define gCastformBackSpriteYCoords gUnknown_0837F5AC +#define gTransformPersonalities gPID_perBank +#define gBattleMonSprites gObjectBankIDs + + +struct Struct_unk_2019348 { + u16 field_0; + u16 field_2; + u8 field_4; + u32 field_8; + u32 field_c; + u32 field_10; +}; + +struct TransformStatus { + u16 unknown; + u16 species; +}; + +struct Struct_gUnknown_0837F578 { + u8 field_0; + u8 field_1; +}; + +struct OamMatrix { + s16 a; + s16 b; + s16 c; + s16 d; +}; + +struct Struct_2017810 { + u8 filler_0[6]; + u8 field_6; + u8 filler_7[5]; +}; + +struct Color { + u16 r:5; + u16 g:5; + u16 b:5; +}; + +struct Struct_sub_8078914 { + u8 *field_0; + u8 *field_4; + u8 field_8; +}; + +struct BGCnt { + u16 priority:2; + u16 charBase:2; + u16 unused:2; + u16 mosaic:1; + u16 colorMode:1; + u16 screenBase:5; + u16 overflow:1; + u16 size:2; +}; + +#define BG1CNT (*(volatile struct BGCnt*)REG_ADDR_BG1CNT) +#define BG2CNT (*(volatile struct BGCnt*)REG_ADDR_BG2CNT) +#define BG3CNT (*(volatile struct BGCnt*)REG_ADDR_BG3CNT) + +extern struct OamData gOamData_837DF9C[]; +extern const union AnimCmd *const gDummySpriteAnimTable[]; +extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; + +extern struct Struct_unk_2019348 unk_2019348; +extern struct TransformStatus gTransformStatuses[]; +extern u16 gBattleMonPartyPositions[]; +extern u16 gBattleTypeFlags; +extern u32 gTransformPersonalities[NUM_BATTLE_SLOTS]; +extern u8 gBattleMonForms[NUM_BATTLE_SLOTS]; +extern u16 gUnknown_0202F7CA[]; +extern u8 gBattleMonSprites[NUM_BATTLE_SLOTS]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; +extern s16 gBattleAnimArgs[8]; +extern u8 gBanksBySide[NUM_BATTLE_SLOTS]; +extern u8 gNoOfAllBanks; // gNumBattleMons? +extern struct OamMatrix gOamMatrices[]; +extern struct Struct_2017810 unk_2017810[]; +extern u8 gHappinessMoveAnim; + +EWRAM_DATA union AffineAnimCmd *gUnknown_0202F7D4 = NULL; +EWRAM_DATA u32 filler_0202F7D8[3] = {0}; + +const struct Struct_gUnknown_0837F578 gUnknown_0837F578[][4] = { + { + { 72, 80 }, + { 176, 40 }, + { 48, 40 }, + { 112, 80 }, + }, + { + { 32, 80 }, + { 200, 40 }, + { 90, 88 }, + { 152, 32 }, + }, +}; + +// One entry for each of the four Castform forms. +// Coords are probably front pic coords or back pic coords, but this data does not seem to be +// used during battle, party summary, or pokedex screens. +const struct MonCoords gCastformFrontSpriteCoords[] = { + { 0x44, 17 }, // NORMAL + { 0x66, 9 }, // SUN + { 0x46, 9 }, // RAIN + { 0x86, 8 }, // HAIL +}; + +const u8 gCastformElevations[] = { + 13, // NORMAL + 14, // SUN + 13, // RAIN + 13, // HAIL +}; + +// Y position of the backsprite for each of the four Castform forms. +const u8 gCastformBackSpriteYCoords[] = { + 0, // NORMAL + 0, // SUN + 0, // RAIN + 0, // HAIL +}; + +const struct SpriteTemplate gSpriteTemplate_837F5B0[] = { + { + .tileTag = 55125, + .paletteTag = 55125, + .oam = gOamData_837DF9C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, { + .tileTag = 55126, + .paletteTag = 55126, + .oam = gOamData_837DF9C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + } +}; + +const struct SpriteSheet gUnknown_0837F5E0[] = { + { gMiscBlank_Gfx, 0x800, 55125, }, + { gMiscBlank_Gfx, 0x800, 55126, }, +}; + + +u8 sub_8077ABC(u8 slot, u8 a2) { + u8 var; + u16 species; + struct TransformStatus *transform; + + if (IsContest()) { + if (a2 == 3 && slot == 3) { + a2 = 1; + } + } + switch (a2) { + case 0: + case 2: + var = gUnknown_0837F578[IS_DOUBLE_BATTLE()][GetBankIdentity(slot)].field_0; + break; + case 1: + var = gUnknown_0837F578[IS_DOUBLE_BATTLE()][GetBankIdentity(slot)].field_1; + break; + case 3: + case 4: + default: + if (IsContest()) { + if (unk_2019348.field_4 & 1) { + species = unk_2019348.field_2; + } else { + species = unk_2019348.field_0; + } + } else { + if (GetBankSide(slot)) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + } else { + species = transform->species; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + } else { + species = transform->species; + } + } + } + if (a2 == 3) { + var = sub_8077E44(slot, species, 1); + } else { + var = sub_8077E44(slot, species, 0); + } + break; + } + return var; +} + +u8 sub_8077BFC(u8 slot, u16 species) { + u16 letter; + u32 personality; + struct TransformStatus *transform; + u8 ret; + u16 var; + + if (!GetBankSide(slot) || IsContest()) { + if (species == SPECIES_UNOWN) { + if (IsContest()) { + if (unk_2019348.field_4 & 1) { + personality = unk_2019348.field_10; + } else { + personality = unk_2019348.field_8; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + personality = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); + } else { + personality = gTransformPersonalities[slot]; + } + } + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = species; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + ret = gMonBackPicCoords[var].y_offset; + } else if (species == SPECIES_CASTFORM) { + ret = gCastformBackSpriteYCoords[gBattleMonForms[slot]]; + } else if (species > NUM_SPECIES) { + ret = gMonBackPicCoords[0].y_offset; + } else { + ret = gMonBackPicCoords[species].y_offset; + } + } else { + if (species == SPECIES_UNOWN) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + personality = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); + } else { + personality = gTransformPersonalities[slot]; + } + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = species; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + ret = gMonFrontPicCoords[var].y_offset; + } else if (species == SPECIES_CASTFORM) { + ret = gCastformFrontSpriteCoords[gBattleMonForms[slot]].y_offset; + } else if (species > NUM_SPECIES) { + ret = gMonFrontPicCoords[0].y_offset; + } else { + ret = gMonFrontPicCoords[species].y_offset; + } + } + return ret; +} + +u8 sub_8077DD8(u8 slot, u16 species) { + u8 ret = 0; + if (GetBankSide(slot) == 1) { + if (!IsContest()) { + if (species == SPECIES_CASTFORM) { + ret = gCastformElevations[gBattleMonForms[slot]]; + } else if (species > NUM_SPECIES) { + ret = gEnemyMonElevation[0]; + } else { + ret = gEnemyMonElevation[species]; + } + } + } + return ret; +} + +u8 sub_8077E44(u8 slot, u16 species, u8 a3) { + u16 offset; + u8 y; + if (GetBankSide(slot) == 0 || IsContest()) { + offset = sub_8077BFC(slot, species); + } else { + offset = sub_8077BFC(slot, species); + offset -= sub_8077DD8(slot, species); + } + y = offset + gUnknown_0837F578[IS_DOUBLE_BATTLE()][GetBankIdentity(slot)].field_1; + if (a3) { + if (GetBankSide(slot) == 0) { + y += 8; + } + if (y > 104) y = 104; + } + return y; +} + +u8 sub_8077EE4(u8 slot, u8 a2) { + u16 species; + struct TransformStatus *transform; + if (a2 == 3 || a2 == 4) { + if (IsContest()) { + if (unk_2019348.field_4 & 1) { + species = unk_2019348.field_2; + } else { + species = unk_2019348.field_0; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = gUnknown_0202F7CA[slot]; + } else { + species = transform->species; + } + } + if (a2 == 3) { + return sub_8077E44(slot, species, 1); + } else { + return sub_8077E44(slot, species, 0); + } + } else { + return sub_8077ABC(slot, a2); + } +} + +u8 sub_8077F68(u8 slot) { + return sub_8077ABC(slot, 4); +} + +u8 sub_8077F7C(u8 slot) { + u16 var; + if (GetBankSide(slot)) { + var = sub_8077ABC(slot, 1) + 16; + } else { + var = sub_8077ABC(slot, 1) + 17; + } + return var; +} + +u8 sub_8077FC0(u8 slot) { + u16 var; + u8 r6; + struct TransformStatus *transform; + r6 = sub_8077ABC(slot, 1); + if (!IsContest()) { + if (GetBankSide(slot)) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + var = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + } else { + var = transform->species; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + var = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + } else { + var = transform->species; + } + } + if (GetBankSide(slot)) { + r6 -= sub_8077DD8(slot, var); + } + } + return r6; +} + +u8 GetAnimBankSpriteId(u8 whichBank) { + u8 *sprites; + if (whichBank == ANIM_BANK_ATK) { + if (AnimBankSpriteExists(gBattleAnimBankAttacker)) { + sprites = gBattleMonSprites; + return sprites[gBattleAnimBankAttacker]; + } else { + return 0xff; + } + } else if (whichBank == ANIM_BANK_DEF) { + if (AnimBankSpriteExists(gBattleAnimBankTarget)) { + sprites = gBattleMonSprites; + return sprites[gBattleAnimBankTarget]; + } else { + return 0xff; + } + } else if (whichBank == ANIM_BANK_ATK_PARTNER) { + if (!IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) { + return 0xff; + } else { + return gBattleMonSprites[gBattleAnimBankAttacker ^ 2]; + } + } else { + if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) { + return gBattleMonSprites[gBattleAnimBankTarget ^ 2]; + } else { + return 0xff; + } + } +} + +void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*callback)(struct Sprite*)) { + sprite->data6 = (u32)(callback) & 0xffff; + sprite->data7 = (u32)(callback) >> 16; +} + +void SetCallbackToStoredInData6(struct Sprite *sprite) { + u32 callback = (u16)sprite->data6 | (sprite->data7 << 16); + sprite->callback = (void (*)(struct Sprite *))callback; +} + +void sub_8078114(struct Sprite *sprite) { + if (sprite->data3) { + sprite->pos2.x = Sin(sprite->data0, sprite->data1); + sprite->pos2.y = Cos(sprite->data0, sprite->data1); + sprite->data0 += sprite->data2; + if (sprite->data0 >= 0x100) { + sprite->data0 -= 0x100; + } else if (sprite->data0 < 0) { + sprite->data0 += 0x100; + } + sprite->data3--; + } else { + SetCallbackToStoredInData6(sprite); + } +} + +void sub_8078174(struct Sprite *sprite) { + if (sprite->data3) { + sprite->pos2.x = Sin(sprite->data0, (sprite->data5 >> 8) + sprite->data1); + sprite->pos2.y = Cos(sprite->data0, (sprite->data5 >> 8) + sprite->data1); + sprite->data0 += sprite->data2; + sprite->data5 += sprite->data4; + if (sprite->data0 >= 0x100) { + sprite->data0 -= 0x100; + } else if (sprite->data0 < 0) { + sprite->data0 += 0x100; + } + sprite->data3--; + } else { + SetCallbackToStoredInData6(sprite); + } +} + +void unref_sub_80781F0(struct Sprite *sprite) { + if (sprite->data3) { + sprite->pos2.x = Sin(sprite->data0, sprite->data1); + sprite->pos2.y = Cos(sprite->data4, sprite->data1); + sprite->data0 += sprite->data2; + sprite->data4 += sprite->data5; + if (sprite->data0 >= 0x100) { + sprite->data0 -= 0x100; + } else if (sprite->data0 < 0) { + sprite->data0 += 0x100; + } + if (sprite->data4 >= 0x100) { + sprite->data4 -= 0x100; + } else if (sprite->data4 < 0) { + sprite->data4 += 0x100; + } + sprite->data3--; + } else { + SetCallbackToStoredInData6(sprite); + } +} + +void sub_8078278(struct Sprite *sprite) { + if (sprite->data3) { + sprite->pos2.x = Sin(sprite->data0, sprite->data1); + sprite->pos2.y = Cos(sprite->data0, sprite->data4); + sprite->data0 += sprite->data2; + if (sprite->data0 >= 0x100) { + sprite->data0 -= 0x100; + } else if (sprite->data0 < 0) { + sprite->data0 += 0x100; + } + sprite->data3--; + } else { + SetCallbackToStoredInData6(sprite); + } +} + +void sub_80782D8(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + } else { + SetCallbackToStoredInData6(sprite); + } +} + +void sub_80782F8(struct Sprite *sprite) { + sub_8078314(sprite); + sprite->callback = sub_8078364; + sprite->callback(sprite); +} + +void sub_8078314(struct Sprite *sprite) { + s16 old; + int v1; + if (sprite->data1 > sprite->data2) { + sprite->data0 = -sprite->data0; + } + v1 = sprite->data2 - sprite->data1; + old = sprite->data0; + sprite->data0 = abs(v1 / sprite->data0); + sprite->data2 = (sprite->data4 - sprite->data3) / sprite->data0; + sprite->data1 = old; +} + +void sub_8078364(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->pos2.x += sprite->data1; + sprite->pos2.y += sprite->data2; + } else { + SetCallbackToStoredInData6(sprite); + } +} + +void sub_8078394(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->data3 += sprite->data1; + sprite->data4 += sprite->data2; + sprite->pos2.x = sprite->data3 >> 8; + sprite->pos2.y = sprite->data4 >> 8; + } else { + SetCallbackToStoredInData6(sprite); + } +} + +void sub_80783D0(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->data3 += sprite->data1; + sprite->data4 += sprite->data2; + sprite->pos2.x = sprite->data3 >> 8; + sprite->pos2.y = sprite->data4 >> 8; + } else { + SetCallbackToStoredInData6(sprite); + } + UpdateMonIconFrame(sprite); +} + +void unref_sub_8078414(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x + sprite->pos2.x; + sprite->data3 = sprite->pos1.y + sprite->pos2.y; + sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3); + sprite->callback = sub_80782F8; +} + +void sub_8078458(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + gSprites[sprite->data3].pos2.x += sprite->data1; + gSprites[sprite->data3].pos2.y += sprite->data2; + } else { + SetCallbackToStoredInData6(sprite); + } +} + +void sub_80784A8(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->data3 += sprite->data1; + sprite->data4 += sprite->data2; + gSprites[sprite->data5].pos2.x = sprite->data3 >> 8; + gSprites[sprite->data5].pos2.y = sprite->data4 >> 8; + } else { + SetCallbackToStoredInData6(sprite); + } +} + +void sub_8078504(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->pos2.x = sprite->data2 >> 8; + sprite->data2 += sprite->data1; + sprite->pos2.y = sprite->data4 >> 8; + sprite->data4 += sprite->data3; + if (sprite->data0 % sprite->data5 == 0) { + if (sprite->data5) { + sprite->invisible ^= 1; + } + } + } else { + SetCallbackToStoredInData6(sprite); + } +} + +void move_anim_8074EE0(struct Sprite *sprite) { + FreeSpriteOamMatrix(sprite); + move_anim_8072740(sprite); +} + +void unref_sub_8078588(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x + sprite->pos2.x; + sprite->data3 = sprite->pos1.y + sprite->pos2.y; + sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->callback = sub_80782F8; +} + +void unref_sub_80785CC(struct Sprite *sprite) { + ResetPaletteStructByUid(sprite->data5); + move_anim_8074EE0(sprite); +} + +void sub_80785E4(struct Sprite *sprite) { + if (sprite->affineAnimEnded) { + SetCallbackToStoredInData6(sprite); + } +} + +void sub_8078600(struct Sprite *sprite) { + if (sprite->animEnded) { + SetCallbackToStoredInData6(sprite); + } +} + +void sub_807861C(struct Sprite *sprite) { + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + move_anim_8072740(sprite); +} + +void sub_8078634(u8 task) { + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimVisualTask(task); +} + +void sub_8078650(struct Sprite *sprite) { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); +} + +void sub_807867C(struct Sprite *sprite, s16 a2) { + u16 v1 = sub_8077ABC(gBattleAnimBankAttacker, 0); + u16 v2 = sub_8077ABC(gBattleAnimBankTarget, 0); + if (v1 > v2) { + sprite->pos1.x -= a2; + } else if (v1 < v2) { + sprite->pos1.x += a2; + } else { + if (GetBankSide(gBattleAnimBankAttacker)) { + sprite->pos1.x -= a2; + } else { + sprite->pos1.x += a2; + } + } +} + +void sub_80786EC(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data6 = 0x8000 / sprite->data0; + sprite->data7 = 0; +} + +bool8 sub_8078718(struct Sprite *sprite) { + if (sub_8078B5C(sprite)) { + return TRUE; + } + sprite->data7 += sprite->data6; + sprite->pos2.y += Sin((u8)(sprite->data7 >> 8), sprite->data5); + return FALSE; +} + +void oamt_add_pos2_onto_pos1(struct Sprite *sprite) { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; +} + +void sub_8078764(struct Sprite *sprite, u8 a2) { + if (!a2) { + sprite->pos1.x = sub_8077EE4(gBattleAnimBankTarget, 0); + sprite->pos1.y = sub_8077EE4(gBattleAnimBankTarget, 1); + } + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; +} + +void sub_80787B0(struct Sprite *sprite, u8 a2) { + if (!a2) { + sprite->pos1.x = sub_8077EE4(gBattleAnimBankAttacker, 0); + sprite->pos1.y = sub_8077EE4(gBattleAnimBankAttacker, 1); + } else { + sprite->pos1.x = sub_8077EE4(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077EE4(gBattleAnimBankAttacker, 3); + } + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; +} + +u8 GetBankSide(u8 slot) { + return gBanksBySide[slot] & 1; +} + +u8 GetBankIdentity(u8 slot) { + return gBanksBySide[slot]; +} + +u8 GetBankByPlayerAI(u8 slot) { + u8 i; + for (i = 0; i < gNoOfAllBanks; i++) { + if (gBanksBySide[i] == slot) { + break; + } + } + return i; +} + +bool8 AnimBankSpriteExists(u8 slot) { + if (IsContest()) { + if (gBattleAnimBankAttacker == slot) { + return TRUE; + } + if (gBattleAnimBankTarget == slot) { + return TRUE; + } + return FALSE; + } else { + if (gBanksBySide[slot] == 0xff) { + return FALSE; + } + if (GetBankSide(slot)) { + if (GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_HP) != 0) { + return TRUE; + } + } else { + if (GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_HP) != 0) { + return TRUE; + } + } + return FALSE; + } +} + +bool8 IsDoubleBattle() { + return IS_DOUBLE_BATTLE(); +} + +void sub_8078914(struct Struct_sub_8078914 *unk) { + if (IsContest()) { + unk->field_0 = (u8 *)0x6008000; + unk->field_4 = (u8 *)0x600f000; + unk->field_8 = 0xe; + } else { + unk->field_0 = (u8 *)0x6004000; + unk->field_4 = (u8 *)0x600e000; + unk->field_8 = 0x8; + } +} + +void sub_8078954(struct Struct_sub_8078914 *unk) { + if (IsContest()) { + unk->field_0 = (u8 *)0x6008000; + unk->field_4 = (u8 *)0x600f000; + unk->field_8 = 0xe; + } else if (GetBankIdentity_permutated(gBattleAnimBankAttacker) == 1) { + unk->field_0 = (u8 *)0x6004000; + unk->field_4 = (u8 *)0x600e000; + unk->field_8 = 0x8; + } else { + unk->field_0 = (u8 *)0x6006000; + unk->field_4 = (u8 *)0x600f000; + unk->field_8 = 0x9; + } +} + +u8 sub_80789BC() { + if (IsContest()) { + return 1; + } + return 2; +} + +void sub_80789D4(bool8 a1) { + if (!a1) { + BG3CNT.size = 0; + BG3CNT.overflow = 1; + } else if (IsContest()) { + BG3CNT.size = 0; + BG3CNT.overflow = 1; + } else { + BG3CNT.size = 1; + BG3CNT.overflow = 0; + } +} + +void sub_8078A34(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + sub_8078A5C(sprite); + sprite->callback = sub_80783D0; + sprite->callback(sprite); +} + +void sub_8078A5C(struct Sprite *sprite) { + s16 x = (sprite->data2 - sprite->data1) << 8; + s16 y = (sprite->data4 - sprite->data3) << 8; + sprite->data1 = x / sprite->data0; + sprite->data2 = y / sprite->data0; + sprite->data4 = 0; + sprite->data3 = 0; +} + +void obj_translate_based_on_private_1_2_3_4(struct Sprite *sprite) { + int x = sprite->data2 - sprite->data1; + int y = sprite->data4 - sprite->data3; + bool8 r8 = x < 0; + bool8 r9 = y < 0; + u16 x2 = abs(x) << 8; + u16 y2 = abs(y) << 8; + x2 = x2 / sprite->data0; + y2 = y2 / sprite->data0; + if (r8) { + x2 |= 1; + } else { + x2 &= ~1; + } + if (r9) { + y2 |= 1; + } else { + y2 &= ~1; + } + sprite->data1 = x2; + sprite->data2 = y2; + sprite->data4 = 0; + sprite->data3 = 0; +} + +void sub_8078B34(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->callback = sub_8078BB8; + sprite->callback(sprite); +} + +bool8 sub_8078B5C(struct Sprite *sprite) { + u16 v1, v2, x, y; + if (!sprite->data0) { + return TRUE; + } + v1 = sprite->data1; + v2 = sprite->data2; + x = sprite->data3; + y = sprite->data4; + x += v1; + y += v2; + if (v1 & 1) { + sprite->pos2.x = -(x >> 8); + } else { + sprite->pos2.x = x >> 8; + } + if (v2 & 1) { + sprite->pos2.y = -(y >> 8); + } else { + sprite->pos2.y = y >> 8; + } + sprite->data3 = x; + sprite->data4 = y; + sprite->data0--; + return FALSE; +} + +void sub_8078BB8(struct Sprite *sprite) { + if (sub_8078B5C(sprite)) { + SetCallbackToStoredInData6(sprite); + } +} + +void sub_8078BD4(struct Sprite *sprite) { + int v1 = abs(sprite->data2 - sprite->data1) << 8; + sprite->data0 = v1 / sprite->data0; + obj_translate_based_on_private_1_2_3_4(sprite); +} + +void sub_8078C00(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + sub_8078BD4(sprite); + sprite->callback = sub_8078BB8; + sprite->callback(sprite); +} + +void sub_8078C28(struct Sprite *sprite) { + int x = sprite->data2 - sprite->data1; + int y = sprite->data4 - sprite->data3; + bool8 x_sign = x < 0; + bool8 y_sign = y < 0; + u16 x2 = abs(x) << 4; + u16 y2 = abs(y) << 4; + x2 /= sprite->data0; + y2 /= sprite->data0; + if (x_sign) { + x2 |= 1; + } else { + x2 &= ~1; + } + if (y_sign) { + y2 |= 1; + } else { + y2 &= ~1; + } + sprite->data1 = x2; + sprite->data2 = y2; + sprite->data4 = 0; + sprite->data3 = 0; +} + +void sub_8078CC0(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + sub_8078C28(sprite); + sprite->callback = sub_8078D44; + sprite->callback(sprite); +} + +bool8 sub_8078CE8(struct Sprite *sprite) { + u16 v1, v2, x, y; + if (!sprite->data0) { + return TRUE; + } + v1 = sprite->data1; + v2 = sprite->data2; + x = sprite->data3; + y = sprite->data4; + x += v1; + y += v2; + if (v1 & 1) { + sprite->pos2.x = -(x >> 4); + } else { + sprite->pos2.x = x >> 4; + } + if (v2 & 1) { + sprite->pos2.y = -(y >> 4); + } else { + sprite->pos2.y = y >> 4; + } + sprite->data3 = x; + sprite->data4 = y; + sprite->data0--; + return FALSE; +} + +void sub_8078D44(struct Sprite *sprite) { + if (sub_8078CE8(sprite)) { + SetCallbackToStoredInData6(sprite); + } +} + +void sub_8078D60(struct Sprite *sprite) { + int v1 = abs(sprite->data2 - sprite->data1) << 4; + sprite->data0 = v1 / sprite->data0; + sub_8078C28(sprite); +} + +void sub_8078D8C(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + sub_8078D60(sprite); + sprite->callback = sub_8078D44; + sprite->callback(sprite); +} + +void obj_id_set_rotscale(u8 sprite, s16 xScale, s16 yScale, u16 rotation) { + int i; + struct ObjAffineSrcData src; + struct OamMatrix matrix; + src.xScale = xScale; + src.yScale = yScale; + src.rotation = rotation; + if (sub_8078E38()) { + src.xScale = -src.xScale; + } + i = gSprites[sprite].oam.matrixNum; + ObjAffineSet(&src, &matrix, 1, 2); + gOamMatrices[i].a = matrix.a; + gOamMatrices[i].b = matrix.b; + gOamMatrices[i].c = matrix.c; + gOamMatrices[i].d = matrix.d; +} + +bool8 sub_8078E38() { + if (IsContest()) { + if (gSprites[GetAnimBankSpriteId(0)].data2 == 0xc9 /* XXX SPECIES_UNOWN? */) { + return FALSE; + } + return TRUE; + } + return FALSE; +} + +void sub_8078E70(u8 sprite, u8 a2) { + struct Struct_2017810 *unk; + u8 r7 = gSprites[sprite].data0; + if (IsContest() || IsAnimBankSpriteVisible(r7)) { + gSprites[sprite].invisible = FALSE; + } + gSprites[sprite].oam.objMode = a2; + gSprites[sprite].affineAnimPaused = TRUE; + if (!IsContest() && !gSprites[sprite].oam.affineMode) { + unk = &unk_2017810[r7]; + gSprites[sprite].oam.matrixNum = unk->field_6; + } + gSprites[sprite].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[sprite], gSprites[sprite].oam.shape, gSprites[sprite].oam.size, gSprites[sprite].oam.affineMode); +} + +void sub_8078F40(u8 sprite) { + obj_id_set_rotscale(sprite, 0x100, 0x100, 0); + gSprites[sprite].oam.affineMode = 1; + gSprites[sprite].oam.objMode = 0; + gSprites[sprite].affineAnimPaused = FALSE; + CalcCenterToCornerVec(&gSprites[sprite], gSprites[sprite].oam.shape, gSprites[sprite].oam.size, gSprites[sprite].oam.affineMode); +} + +void sub_8078F9C(u8 sprite) { + u16 matrix = gSprites[sprite].oam.matrixNum; + s16 c = gOamMatrices[matrix].c; + if (c < 0) { + c = -c; + } + gSprites[sprite].pos2.y = c >> 3; +} + +// related to obj_id_set_rotscale +void sub_8078FDC(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation) { + int i; + struct ObjAffineSrcData src; + struct OamMatrix matrix; + if (sprite->oam.affineMode & 1) { + sprite->affineAnimPaused = TRUE; + if (a2) { + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); + } + src.xScale = xScale; + src.yScale = yScale; + src.rotation = rotation; + if (sub_8078E38()) { + src.xScale = -src.xScale; + } + i = sprite->oam.matrixNum; + ObjAffineSet(&src, &matrix, 1, 2); + gOamMatrices[i].a = matrix.a; + gOamMatrices[i].b = matrix.b; + gOamMatrices[i].c = matrix.c; + gOamMatrices[i].d = matrix.d; + } +} + +void sub_8079098(struct Sprite *sprite) { + sub_8078FDC(sprite, TRUE, 0x100, 0x100, 0); + sprite->affineAnimPaused = FALSE; + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); +} + +static u16 ArcTan2_(s16 a, s16 b) { + return ArcTan2(a, b); +} + +u16 sub_80790F0(s16 a, s16 b) { + u16 var = ArcTan2_(a, b); + return -var; +} + +void sub_8079108(u16 a1, bool8 a2) { + int i; + struct Color *c; + struct Color *c2; + u16 average; + + a1 *= 0x10; + + if (!a2) { + for (i = 0; i < 0x10; i++) { + c = (struct Color *)&gPlttBufferUnfaded[a1 + i]; + average = c->r + c->g + c->b; + average /= 3; + + c2 = (struct Color *)&gPlttBufferFaded[a1 + i]; + c2->r = average; + c2->g = average; + c2->b = average; + } + } else { + CpuCopy32(&gPlttBufferUnfaded[a1], &gPlttBufferFaded[a1], 0x20); + } +} + +u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) { + u32 var = 0; + u32 shift; + if (a1) { + if (!IsContest()) { + var = 0xe; + } else { + var = 1 << sub_80789BC(); + } + } + if (a2) { + shift = gBattleAnimBankAttacker + 16; + var |= 1 << shift; + } + if (a3) { + shift = gBattleAnimBankTarget + 16; + var |= 1 << shift; + } + if (a4) { + if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) { + shift = (gBattleAnimBankAttacker ^ 2) + 16; + var |= 1 << shift; + } + } + if (a5) { + if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) { + shift = (gBattleAnimBankTarget ^ 2) + 16; + var |= 1 << shift; + } + } + if (a6) { + if (!IsContest()) { + var |= 0x100; + } else { + var |= 0x4000; + } + } + if (a7) { + if (!IsContest()) { + var |= 0x200; + } + } + return var; +} + +u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4) { + u32 var = 0; + u32 shift; + if (IsContest()) { + if (a1) { + var |= 1 << 18; + return var; + } + } else { + if (a1) { + if (IsAnimBankSpriteVisible(GetBankByPlayerAI(0))) { + var |= 1 << (GetBankByPlayerAI(0) + 16); + } + } + if (a2) { + if (IsAnimBankSpriteVisible(GetBankByPlayerAI(2))) { + shift = GetBankByPlayerAI(2) + 16; + var |= 1 << shift; + } + } + if (a3) { + if (IsAnimBankSpriteVisible(GetBankByPlayerAI(1))) { + shift = GetBankByPlayerAI(1) + 16; + var |= 1 << shift; + } + } + if (a4) { + if (IsAnimBankSpriteVisible(GetBankByPlayerAI(3))) { + shift = GetBankByPlayerAI(3) + 16; + var |= 1 << shift; + } + } + } + return var; +} + +u8 sub_80793A8(u8 a1) { + return a1; +} + +u8 unref_sub_80793B0(u8 a1) { + return GetBankByPlayerAI(a1); +} + +void sub_80793C4(struct Sprite *sprite) { + bool8 var; + if (!sprite->data0) { + if (!gBattleAnimArgs[3]) { + var = TRUE; + } else { + var = FALSE; + } + if (!gBattleAnimArgs[2]) { + sub_80787B0(sprite, var); + } else { + sub_8078764(sprite, var); + } + sprite->data0++; + + } else if (sprite->animEnded || sprite->affineAnimEnded) { + move_anim_8074EE0(sprite); + } +} + +void sub_807941C(struct Sprite *sprite) { + bool8 v1; + u8 v2; + if (!(gBattleAnimArgs[5] & 0xff00)) { + v1 = TRUE; + } else { + v1 = FALSE; + } + if (!(gBattleAnimArgs[5] & 0xff)) { + v2 = 3; + } else { + v2 = 1; + } + sub_80787B0(sprite, v1); + if (GetBankSide(gBattleAnimBankAttacker)) { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + sprite->data0 = gBattleAnimArgs[4]; + sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, v2) + gBattleAnimArgs[3]; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData6(sprite, move_anim_8072740); +} + +void sub_80794A8(struct Sprite *sprite) { + sub_80787B0(sprite, 1); + if (GetBankSide(gBattleAnimBankAttacker)) { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + sprite->data0 = gBattleAnimArgs[4]; + sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; + sprite->data5 = gBattleAnimArgs[5]; + sub_80786EC(sprite); + sprite->callback = sub_8079518; +} + +void sub_8079518(struct Sprite *sprite) { + if (sub_8078718(sprite)) { + move_anim_8072740(sprite); + } +} + +void sub_8079534(struct Sprite *sprite) { + u8 r4, slot, r7; + if (!gBattleAnimArgs[6]) { + r4 = 1; + r7 = 3; + } else { + r4 = 0; + r7 = 1; + } + if (!gBattleAnimArgs[5]) { + sub_80787B0(sprite, r4); + slot = gBattleAnimBankAttacker; + } else { + sub_8078764(sprite, r4); + slot = gBattleAnimBankTarget; + } + if (GetBankSide(gBattleAnimBankAttacker)) { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + sub_8078764(sprite, r4); + sprite->data0 = gBattleAnimArgs[4]; + sprite->data2 = sub_8077ABC(slot, 2) + gBattleAnimArgs[2]; + sprite->data4 = sub_8077ABC(slot, r7) + gBattleAnimArgs[3]; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData6(sprite, move_anim_8072740); +} + +s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1) { + u16 i; + u8 sprite = GetAnimBankSpriteId(a1); + if (sprite != 0xff) { + for (i = 0; i < 0x40; i++) { + if (gSprites[i].inUse) { + continue; + } + gSprites[i] = gSprites[sprite]; + gSprites[i].oam.objMode = 1; + gSprites[i].invisible = FALSE; + return i; + } + } + return -1; +} + +void obj_delete_but_dont_free_vram(struct Sprite *sprite) { + sprite->usingSheet = TRUE; + DestroySprite(sprite); +} + +void sub_8079670(u8 task) { + s16 v1 = 0; + s16 v2 = 0; + if (gBattleAnimArgs[2] > gBattleAnimArgs[0]) { + v2 = 1; + } + if (gBattleAnimArgs[2] < gBattleAnimArgs[0]) { + v2 = -1; + } + if (gBattleAnimArgs[3] > gBattleAnimArgs[1]) { + v1 = 1; + } + if (gBattleAnimArgs[3] < gBattleAnimArgs[1]) { + v1 = -1; + } + gTasks[task].data[0] = 0; + gTasks[task].data[1] = gBattleAnimArgs[4]; + gTasks[task].data[2] = 0; + gTasks[task].data[3] = gBattleAnimArgs[0]; + gTasks[task].data[4] = gBattleAnimArgs[1]; + gTasks[task].data[5] = v2; + gTasks[task].data[6] = v1; + gTasks[task].data[7] = gBattleAnimArgs[2]; + gTasks[task].data[8] = gBattleAnimArgs[3]; + REG_BLDALPHA = (gBattleAnimArgs[1] << 8) | gBattleAnimArgs[0]; + gTasks[task].func = sub_80796F8; +} + +void sub_80796F8(u8 taskId) { + struct Task *task = &gTasks[taskId]; + if (++task->data[0] > task->data[1]) { + task->data[0] = 0; + if (++task->data[2] & 1) { + if (task->data[3] != task->data[7]) { + task->data[3] += task->data[5]; + } + } else { + if (task->data[4] != task->data[8]) { + task->data[4] += task->data[6]; + } + } + REG_BLDALPHA = (task->data[4] << 8) | task->data[3]; + if (task->data[3] == task->data[7] && task->data[4] == task->data[8]) { + DestroyAnimVisualTask(taskId); + return; + } + } +} + +void sub_8079790(u8 task) { + u8 sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]); + if (sprite == 0xff) { + DestroyAnimVisualTask(task); + return; + } + gTasks[task].data[0] = (gSprites[sprite].oam.paletteNum * 0x10) + 0x101; + sub_80797EC(&gTasks[task]); +} + +void sub_80797EC(struct Task *task) { + task->data[1] = gBattleAnimArgs[1]; + task->data[2] = 0; + task->data[3] = gBattleAnimArgs[2]; + task->data[4] = 0; + task->data[5] = gBattleAnimArgs[3]; + task->data[6] = 0; + task->data[7] = gBattleAnimArgs[4]; + task->func = sub_8079814; +} + +void sub_8079814(u8 taskId) { + struct Task *task = &gTasks[taskId]; + if (++task->data[4] >= task->data[5]) { + task->data[4] = 0; + if (!task->data[6]) { + task->data[2]++; + BlendPalette(task->data[0], 0xf, task->data[2], task->data[1]); + if (task->data[2] == task->data[3]) { + task->data[6] = 1; + } + } else { + task->data[2]--; + BlendPalette(task->data[0], 0xf, task->data[2], task->data[1]); + if (!task->data[2]) { + if (--task->data[7]) { + task->data[4] = 0; + task->data[6] = 0; + } else { + DestroyAnimVisualTask(taskId); + return; + } + } + } + } +} + +void sub_80798AC(u8 task) { + u8 palette = IndexOfSpritePaletteTag(gBattleAnimArgs[0]); + if (palette == 0xff) { + DestroyAnimVisualTask(task); + return; + } + gTasks[task].data[0] = (palette * 0x10) + 0x101; + sub_80797EC(&gTasks[task]); +} + +void sub_80798F4(struct Task *task, u8 a2, void *a3) { + task->data[7] = 0; + task->data[8] = 0; + task->data[9] = 0; + task->data[15] = a2; + task->data[10] = 0x100; + task->data[11] = 0x100; + task->data[12] = 0; + sub_8079BF4(&task->data[13], &task->data[14], a3); + sub_8078E70(a2, 0); +} + +bool8 sub_807992C(struct Task *task) { + gUnknown_0202F7D4 = sub_8079BFC(task->data[13], task->data[14]) + (task->data[7] << 3); + switch (gUnknown_0202F7D4->type) { + default: + if (!gUnknown_0202F7D4->frame.duration) { + task->data[10] = gUnknown_0202F7D4->frame.xScale; + task->data[11] = gUnknown_0202F7D4->frame.yScale; + task->data[12] = gUnknown_0202F7D4->frame.rotation; + task->data[7]++; + gUnknown_0202F7D4++; + } + task->data[10] += gUnknown_0202F7D4->frame.xScale; + task->data[11] += gUnknown_0202F7D4->frame.yScale; + task->data[12] += gUnknown_0202F7D4->frame.rotation; + obj_id_set_rotscale(task->data[15], task->data[10], task->data[11], task->data[12]); + sub_8079A64(task->data[15]); + if (++task->data[8] >= gUnknown_0202F7D4->frame.duration) { + task->data[8] = 0; + task->data[7]++; + } + break; + + case AFFINEANIMCMDTYPE_JUMP: + task->data[7] = gUnknown_0202F7D4->jump.target; + break; + + case AFFINEANIMCMDTYPE_LOOP: + if (gUnknown_0202F7D4->loop.count) { + if (task->data[9]) { + if (!--task->data[9]) { + task->data[7]++; + break; + } + } else { + task->data[9] = gUnknown_0202F7D4->loop.count; + } + if (!task->data[7]) { + break; + } + for (;;) { + task->data[7]--; + gUnknown_0202F7D4--; + if (gUnknown_0202F7D4->type == AFFINEANIMCMDTYPE_LOOP) { + task->data[7]++; + return TRUE; + } + if (!task->data[7]) { + return TRUE; + } + } + } + task->data[7]++; + break; + + case 0x7fff: + gSprites[task->data[15]].pos2.y = 0; + sub_8078F40(task->data[15]); + return FALSE; + } + + return TRUE; +} + +void sub_8079A64(u8 sprite) { + int var = 0x40 - sub_8079B10(sprite) * 2; + u16 matrix = gSprites[sprite].oam.matrixNum; + int var2 = (var << 8) / gOamMatrices[matrix].d; + if (var2 > 0x80) { + var2 = 0x80; + } + gSprites[sprite].pos2.y = (var - var2) / 2; +} + +void sub_8079AB8(u8 sprite, u8 sprite2) { + int var = 0x40 - sub_8079B10(sprite2) * 2; + u16 matrix = gSprites[sprite].oam.matrixNum; + int var2 = (var << 8) / gOamMatrices[matrix].d; + if (var2 > 0x80) { + var2 = 0x80; + } + gSprites[sprite].pos2.y = (var - var2) / 2; +} + +u16 sub_8079B10(u8 sprite) { + struct TransformStatus *transform; + u8 slot = gSprites[sprite].data0; + u16 species; + u16 i; + for (i = 0; i < (sizeof(gBattleMonSprites) / sizeof(u8)); i++) { + if (gBattleMonSprites[i] == sprite) { + if (IsContest()) { + species = unk_2019348.field_0; + return gMonBackPicCoords[species].y_offset; + } else { + if (!GetBankSide(i)) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[i]], MON_DATA_SPECIES); + } else { + species = transform->species; + } + return gMonBackPicCoords[species].y_offset; + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[i]], MON_DATA_SPECIES); + } else { + species = transform->species; + } + return gMonFrontPicCoords[species].y_offset; + } + } + } + } + return 0x40; +} + +void sub_8079BF4(s16 *bottom, s16 *top, void *ptr) { + *bottom = ((intptr_t) ptr) & 0xffff; + *top = (((intptr_t) ptr) >> 16) & 0xffff; +} + +void *sub_8079BFC(s16 bottom, s16 top) { + return (void *)((u16)bottom | ((u16)top << 16)); +} + + +// possible new file + +void sub_8079C08(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7) { + task->data[8] = a7; + task->data[15] = a2; + task->data[9] = a3; + task->data[10] = a4; + task->data[13] = a5; + task->data[14] = a6; + task->data[11] = (a5 - a3) / a7; + task->data[12] = (a6 - a4) / a7; +} + +u8 sub_8079C74(struct Task *task) { + if (!task->data[8]) { + return 0; + } + if (--task->data[8]) { + task->data[9] += task->data[11]; + task->data[10] += task->data[12]; + } else { + task->data[9] = task->data[13]; + task->data[10] = task->data[14]; + } + obj_id_set_rotscale(task->data[15], task->data[9], task->data[10], 0); + if (task->data[8]) { + sub_8079A64(task->data[15]); + } else { + gSprites[task->data[15]].pos2.y = 0; + } + return task->data[8]; +} + +void sub_8079CEC(u8 task) { + u16 v1; + if (gHappinessMoveAnim <= 30) { + v1 = 0; + } else if (gHappinessMoveAnim <= 100) { + v1 = 1; + } else if (gHappinessMoveAnim <= 200) { + v1 = 2; + } else { + v1 = 3; + } + gBattleAnimArgs[7] = v1; + DestroyAnimVisualTask(task); +} + +void unref_sub_8079D20(u8 priority) { + if (IsAnimBankSpriteVisible(gBattleAnimBankTarget)) { + gSprites[gBattleMonSprites[gBattleAnimBankTarget]].oam.priority = priority; + } + if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker)) { + gSprites[gBattleMonSprites[gBattleAnimBankAttacker]].oam.priority = priority; + } + if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) { + gSprites[gBattleMonSprites[gBattleAnimBankTarget ^ 2]].oam.priority = priority; + } + if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) { + gSprites[gBattleMonSprites[gBattleAnimBankAttacker ^ 2]].oam.priority = priority; + } +} + +void sub_8079E24() { + int i; + for (i = 0; i < gNoOfAllBanks; i++) { + if (IsAnimBankSpriteVisible(i)) { + gSprites[gBattleMonSprites[i]].subpriority = sub_8079E90(i); + gSprites[gBattleMonSprites[i]].oam.priority = 2; + } + } +} + +u8 sub_8079E90(u8 slot) { + u8 status; + u8 ret; + if (IsContest()) { + if (slot == 2) { + return 30; + } else { + return 40; + } + } else { + status = GetBankIdentity(slot); + if (status == 0) { + ret = 30; + } else if (status == 2) { + ret = 20; + } else if (status == 1) { + ret = 40; + } else { + ret = 50; + } + } + return ret; +} + +u8 sub_8079ED4(u8 slot) { + u8 status = GetBankIdentity(slot); + if (IsContest()) { + return 2; + } + if (status == 0 || status == 3) { + return BG2CNT.priority; + } else { + return BG1CNT.priority; + } +} + +u8 GetBankIdentity_permutated(u8 slot) { + u8 status; + if (!IsContest()) { + status = GetBankIdentity(slot); + if (status == 0 || status == 3) { + return 2; + } else { + return 1; + } + } + return 1; +} + +u8 sub_8079F44(u16 species, u8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7, u32 a8) { + void *src; + void *dest; + int size; + + u8 sprite; + u16 sheet = LoadSpriteSheet(&gUnknown_0837F5E0[a3]); + u16 palette = AllocSpritePalette(gSpriteTemplate_837F5B0[a3].paletteTag); + if (!isBackpic) { + LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(species, a8, a7), (palette * 0x10) + 0x100, 0x20); + LoadSpecialPokePic( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].coords, + gMonFrontPicCoords[species].y_offset, + 0x2000000, + (void *)0x2000000, + species, + a7, + 1 + ); + } else { + LoadCompressedPalette( + GetMonSpritePalFromOtIdPersonality(species, a8, a7), (palette * 0x10) + 0x100, 0x20); + LoadSpecialPokePic( + &gMonBackPicTable[species], + gMonBackPicCoords[species].coords, + gMonBackPicCoords[species].y_offset, + 0x2000000, + (void *)0x2000000, + species, + a7, + 0 + ); + } + + src = (void *)0x2000000; + dest = (void *)(0x6010000 + (sheet * 0x20)); + size = 0x800; + DmaCopy32(3, src, dest, size); + + if (!isBackpic) { + sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonFrontPicCoords[species].y_offset, a6); + } else { + sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonBackPicCoords[species].y_offset, a6); + } + if (IsContest()) { + gSprites[sprite].affineAnims = &gSpriteAffineAnimTable_81E7C18; + StartSpriteAffineAnim(&gSprites[sprite], 0); + } + return sprite; +} + +void sub_807A0F4(struct Sprite *sprite) { + DestroySpriteAndFreeResources(sprite); +} + +int sub_807A100(u8 slot, u8 a2) { + u16 species; + u32 personality; + u16 letter; + u16 var; + int ret; + const struct MonCoords *coords; + struct TransformStatus *transform; + if (IsContest()) { + if (unk_2019348.field_4 & 1) { + species = unk_2019348.field_2; + personality = unk_2019348.field_10; + } else { + species = unk_2019348.field_0; + personality = unk_2019348.field_8; + } + if (species == SPECIES_UNOWN) { + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = SPECIES_UNOWN; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + coords = &gMonBackPicCoords[var]; + } else if (species == SPECIES_CASTFORM) { + coords = &gCastformFrontSpriteCoords[gBattleMonForms[slot]]; + } else if (species <= SPECIES_EGG) { + coords = &gMonBackPicCoords[species]; + } else { + coords = &gMonBackPicCoords[0]; + } + } else { + if (!GetBankSide(slot)) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + personality = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); + } else { + species = transform->species; + personality = gTransformPersonalities[slot]; + } + if (species == SPECIES_UNOWN) { + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = SPECIES_UNOWN; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + coords = &gMonBackPicCoords[var]; + } else if (species > SPECIES_EGG) { + coords = &gMonBackPicCoords[0]; + } else { + coords = &gMonBackPicCoords[species]; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + personality = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); + } else { + species = transform->species; + personality = gTransformPersonalities[slot]; + } + if (species == SPECIES_UNOWN) { + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = SPECIES_UNOWN; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + coords = &gMonFrontPicCoords[var]; + } else if (species == SPECIES_CASTFORM) { + coords = &gCastformFrontSpriteCoords[gBattleMonForms[slot]]; + } else if (species > SPECIES_EGG) { + coords = &gMonFrontPicCoords[0]; + } else { + coords = &gMonFrontPicCoords[species]; + } + } + } + + switch (a2) { + case 0: + return (coords->coords & 0xf) * 8; + case 1: + return (coords->coords >> 4) * 8; + case 4: + return sub_8077ABC(slot, 2) - ((coords->coords >> 4) * 4); + case 5: + return sub_8077ABC(slot, 2) + ((coords->coords >> 4) * 4); + case 2: + return sub_8077ABC(slot, 3) - ((coords->coords & 0xf) * 4); + case 3: + return sub_8077ABC(slot, 3) + ((coords->coords & 0xf) * 4); + case 6: + ret = sub_8077ABC(slot, 1) + 0x1f; + return ret - coords->y_offset; + default: + return 0; + } +} + +void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4) { + u8 v1, v2; + s16 v3, v4; + s16 v5, v6; + if (!a2) { + v1 = 0; + v2 = 1; + } else { + v1 = 2; + v2 = 3; + } + v3 = sub_8077ABC(slot, v1); + v4 = sub_8077ABC(slot, v2); + if (IsDoubleBattle() && !IsContest()) { + v5 = sub_8077ABC(slot ^ 2, v1); + v6 = sub_8077ABC(slot ^ 2, v2); + } else { + v5 = v3; + v6 = v4; + } + *a3 = (v3 + v5) / 2; + *a4 = (v4 + v6) / 2; +} + +u8 sub_807A4A0(int a1, u8 sprite, int a3) { + u8 new_sprite = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + gSprites[new_sprite] = gSprites[sprite]; + gSprites[new_sprite].usingSheet = TRUE; + gSprites[new_sprite].oam.priority = 0; + gSprites[new_sprite].oam.objMode = 2; + gSprites[new_sprite].oam.tileNum = gSprites[sprite].oam.tileNum; + gSprites[new_sprite].callback = SpriteCallbackDummy; + return new_sprite; +} + +void sub_807A544(struct Sprite *sprite) { + sub_8078650(sprite); + if (GetBankSide(gBattleAnimBankAttacker)) { + sprite->pos1.x -= gBattleAnimArgs[0]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + sprite->hFlip = TRUE; + } else { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data0 = gBattleAnimArgs[2]; + sprite->data1 = gBattleAnimArgs[3]; + sprite->data3 = gBattleAnimArgs[4]; + sprite->data5 = gBattleAnimArgs[5]; + StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + sprite->callback = sub_8078504; +} + +void sub_807A5C4(struct Sprite *sprite) { + if (GetBankSide(gBattleAnimBankAttacker)) { + sprite->pos1.x -= gBattleAnimArgs[0]; + gBattleAnimArgs[3] *= -1; + } else { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data0 = gBattleAnimArgs[2]; + sprite->data1 = gBattleAnimArgs[3]; + sprite->data3 = gBattleAnimArgs[4]; + sprite->data5 = gBattleAnimArgs[5]; + StartSpriteAnim(sprite, gBattleAnimArgs[6]); + StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + sprite->callback = sub_8078504; +} + +void sub_807A63C(struct Sprite *sprite) { + sub_8078650(sprite); + if (GetBankSide(gBattleAnimBankAttacker)) { + sprite->pos1.x -= gBattleAnimArgs[0]; + } else { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->callback = sub_8078600; + StoreSpriteCallbackInData6(sprite, move_anim_8072740); +} + +void sub_807A69C(u8 taskId) { + u16 src; + u16 dest; + struct Task *task = &gTasks[taskId]; + task->data[0] = GetAnimBankSpriteId(0); + task->data[1] = (GetBankSide(gBattleAnimBankAttacker)) ? -8 : 8; + task->data[2] = 0; + task->data[3] = 0; + gSprites[task->data[0]].pos2.x -= task->data[0]; + task->data[4] = AllocSpritePalette(10097); + task->data[5] = 0; + + dest = (task->data[4] + 0x10) * 0x10; + src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10; + task->data[6] = sub_8079E90(gBattleAnimBankAttacker); + if (task->data[6] == 20 || task->data[6] == 40) { + task->data[6] = 2; + } else { + task->data[6] = 3; + } + CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], 0x20); + BlendPalette(dest, 0x10, gBattleAnimArgs[1], gBattleAnimArgs[0]); + task->func = sub_807A784; +} + +void sub_807A784(u8 taskId) { + struct Task *task = &gTasks[taskId]; + switch (task->data[2]) { + case 0: + sub_807A850(task, taskId); + gSprites[task->data[0]].pos2.x += task->data[1]; + if (++task->data[3] == 5) { + task->data[3]--; + task->data[2]++; + } + break; + case 1: + sub_807A850(task, taskId); + gSprites[task->data[0]].pos2.x -= task->data[1]; + if (--task->data[3] == 0) { + gSprites[task->data[0]].pos2.x = 0; + task->data[2]++; + } + break; + case 2: + if (!task->data[5]) { + FreeSpritePaletteByTag(10097); + DestroyAnimVisualTask(taskId); + } + break; + } +} + +void sub_807A850(struct Task *task, u8 taskId) { + s16 sprite = duplicate_obj_of_side_rel2move_in_transparent_mode(0); + if (sprite >= 0) { + gSprites[sprite].oam.priority = task->data[6]; + gSprites[sprite].oam.paletteNum = task->data[4]; + gSprites[sprite].data0 = 8; + gSprites[sprite].data1 = taskId; + gSprites[sprite].data2 = sprite; + gSprites[sprite].pos2.x = gSprites[task->data[0]].pos2.x; + gSprites[sprite].callback = sub_807A8D4; + task->data[5]++; + } +} + +void sub_807A8D4(struct Sprite *sprite) { + if (--sprite->data0 == 0) { + gTasks[sprite->data1].data[5]--; + obj_delete_but_dont_free_vram(sprite); + } +} + +void sub_807A908(struct Sprite *sprite) { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + if (!GetBankSide(gBattleAnimBankAttacker)) { + sprite->data0 = 5; + } else { + sprite->data0 = -10; + } + sprite->data1 = -40; + sprite->callback = sub_807A960; +} + +void sub_807A960(struct Sprite *sprite) { + sprite->data2 += sprite->data0; + sprite->data3 += sprite->data1; + sprite->pos2.x = sprite->data2 / 10; + sprite->pos2.y = sprite->data3 / 10; + if (sprite->data1 < -20) { + sprite->data1++; + } + if ((sprite->pos1.y + sprite->pos2.y) < -32) { + move_anim_8072740(sprite); + } +} + +void sub_807A9BC(struct Sprite *sprite) { + int x; + sprite->data0 = gBattleAnimArgs[2]; + sprite->data2 = sprite->pos1.x + gBattleAnimArgs[4]; + sprite->data4 = sprite->pos1.y + gBattleAnimArgs[5]; + if (!GetBankSide(gBattleAnimBankTarget)) { + x = (u16)gBattleAnimArgs[4] + 30; + sprite->pos1.x += x; + sprite->pos1.y = gBattleAnimArgs[5] - 20; + } else { + x = (u16)gBattleAnimArgs[4] - 30; + sprite->pos1.x += x; + sprite->pos1.y = gBattleAnimArgs[5] - 80; + } + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData6(sprite, move_anim_8072740); +} diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c new file mode 100644 index 000000000..f98293a90 --- /dev/null +++ b/src/script_pokemon_util_80C4BF0.c @@ -0,0 +1,714 @@ +#include "global.h" +#include "battle.h" +#include "berry.h" +#include "choose_party.h" +#include "contest.h" +#include "contest_link_80C2020.h" +#include "contest_painting.h" +#include "data2.h" +#include "daycare.h" +#include "debug.h" +#include "decompress.h" +#include "event_data.h" +#include "items.h" +#include "link.h" +#include "load_save.h" +#include "main.h" +#include "menu.h" +#include "pokedex.h" +#include "pokemon.h" +#include "rng.h" +#include "overworld.h" +#include "script_pokemon_80C4.h" +#include "species.h" +#include "task.h" + +#define CONTEST_ENTRY_PIC_LEFT 10 +#define CONTEST_ENTRY_PIC_TOP 3 + +extern struct SpriteTemplate gUnknown_02024E8C; + +extern u8 gContestPlayerMonIndex; +extern u8 gIsLinkContest; +extern u8 gPlayerPartyCount; +extern u8 gSelectedOrderFromParty[]; + +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u16 gSpecialVar_0x8006; + +extern u16 gScriptContestCategory; +extern u16 gScriptContestRank; +extern u16 gScriptResult; + +extern u32 gUnknown_03005D28; + +extern u8 gUnknown_02038694; +extern u8 gUnknown_0203856C; +extern u8 gUnknown_02038690[]; +extern u16 gUnknown_02038678[]; + +void sub_80C4BF0(void) +{ + gSaveBlock1.vars[0x10] = gContestMons[0].unk16; + gSaveBlock1.vars[0x11] = gContestMons[1].unk16; + gSaveBlock1.vars[0x12] = gContestMons[2].unk16; +} + +void sub_80C4C28(void) +{ + u16 var; + u8 specialVar = gSpecialVar_0x8005; + + switch(specialVar) + { + case 0: + var = 3; + break; + case 1: + var = 4; + break; + case 2: + var = 5; + break; + default: + var = 100; + break; + } + gSpecialVar_0x8004 = var; +} + +void sub_80C4C64(void) +{ + sub_80C46EC(); + sub_80C4740(); + sub_80C48F4(); +} + +void sub_80C4C78(void) +{ + u16 var; + u16 returnVar; + + switch(gScriptContestCategory) + { + case 0: + var = 8; + break; + case 1: + var = 9; + break; + case 2: + var = 10; + break; + case 3: + var = 11; + break; + case 4: + default: + var = 12; + break; + } + + returnVar = gSaveBlock1.sbStruct.unkSB2.sb1_2EFC_struct2[var].var; + + if(returnVar == 0) + gSpecialVar_0x8004 = returnVar; + else + gSpecialVar_0x8004 = 1; +} + +void sub_80C4CEC(void) +{ + sub_80B2A7C(0xFF); +} + +void sub_80C4CF8(void) +{ + if(!gUnknown_02038690[gContestPlayerMonIndex] + && gScriptContestRank == 3 + && (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800) + { + gSpecialVar_0x8004 = 1; + } + else + { + gSpecialVar_0x8004 = 0; + } +} + +u8 sub_80C4D50(void) +{ + u8 retVar = 0; + int i; + + for (i = 0; i < 5; i++) + if (gSaveBlock1.sbStruct.unkSB2.sb1_2EFC_struct2[i + 8].var) + retVar++; + + return retVar; +} + +// nope. too hard +__attribute__((naked)) +void sub_80C4D80(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\ + ldr r0, _080C4EA0 @ =gUnknown_02038670\n\ + mov r12, r0\n\ + ldr r1, _080C4EA4 @ =gSpecialVar_0x8006\n\ + mov r8, r1\n\ + ldr r2, _080C4EA8 @ =gStringVar1\n\ + mov r9, r2\n\ + mov r2, r12\n\ + mov r1, sp\n\ + movs r6, 0x3\n\ +_080C4D9E:\n\ + ldrh r0, [r2]\n\ + strh r0, [r1]\n\ + adds r2, 0x2\n\ + adds r1, 0x2\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080C4D9E\n\ + movs r6, 0\n\ +_080C4DAE:\n\ + movs r1, 0x3\n\ + cmp r1, r6\n\ + ble _080C4DD8\n\ +_080C4DB4:\n\ + subs r4, r1, 0x1\n\ + lsls r0, r4, 1\n\ + mov r5, sp\n\ + adds r3, r5, r0\n\ + lsls r0, r1, 1\n\ + adds r2, r5, r0\n\ + ldrh r5, [r3]\n\ + movs r7, 0\n\ + ldrsh r1, [r3, r7]\n\ + movs r7, 0\n\ + ldrsh r0, [r2, r7]\n\ + cmp r1, r0\n\ + bge _080C4DD2\n\ + strh r5, [r2]\n\ + strh r0, [r3]\n\ +_080C4DD2:\n\ + adds r1, r4, 0\n\ + cmp r1, r6\n\ + bgt _080C4DB4\n\ +_080C4DD8:\n\ + adds r6, 0x1\n\ + cmp r6, 0x2\n\ + ble _080C4DAE\n\ + mov r2, r8\n\ + ldrh r0, [r2]\n\ + lsls r0, 1\n\ + add r0, sp\n\ + ldrh r0, [r0]\n\ + movs r2, 0\n\ + movs r7, 0\n\ + movs r6, 0\n\ + lsls r0, 16\n\ + asrs r4, r0, 16\n\ + adds r3, r0, 0\n\ + mov r1, sp\n\ +_080C4DF6:\n\ + movs r5, 0\n\ + ldrsh r0, [r1, r5]\n\ + cmp r0, r4\n\ + bne _080C4E12\n\ + lsls r0, r2, 24\n\ + movs r2, 0x80\n\ + lsls r2, 17\n\ + adds r0, r2\n\ + lsrs r2, r0, 24\n\ + mov r5, r8\n\ + ldrh r5, [r5]\n\ + cmp r6, r5\n\ + bne _080C4E12\n\ + adds r7, r2, 0\n\ +_080C4E12:\n\ + adds r1, 0x2\n\ + adds r6, 0x1\n\ + cmp r6, 0x3\n\ + ble _080C4DF6\n\ + movs r6, 0\n\ + mov r0, sp\n\ + movs r1, 0\n\ + ldrsh r0, [r0, r1]\n\ + asrs r1, r3, 16\n\ + lsls r2, 24\n\ + mov r10, r2\n\ + cmp r0, r1\n\ + beq _080C4E40\n\ + adds r2, r1, 0\n\ + mov r1, sp\n\ +_080C4E30:\n\ + adds r1, 0x2\n\ + adds r6, 0x1\n\ + cmp r6, 0x3\n\ + bgt _080C4E40\n\ + movs r4, 0\n\ + ldrsh r0, [r1, r4]\n\ + cmp r0, r2\n\ + bne _080C4E30\n\ +_080C4E40:\n\ + lsls r0, r6, 24\n\ + lsrs r4, r0, 24\n\ + adds r2, r7, 0\n\ + movs r6, 0\n\ + asrs r5, r3, 16\n\ + mov r8, r5\n\ + mov r1, r12\n\ + movs r5, 0\n\ + ldrsh r0, [r1, r5]\n\ + cmp r8, r0\n\ + bne _080C4E60\n\ + cmp r7, 0x1\n\ + beq _080C4E78\n\ +_080C4E5A:\n\ + subs r0, r2, 0x1\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ +_080C4E60:\n\ + adds r6, 0x1\n\ + cmp r6, 0x3\n\ + bgt _080C4E78\n\ + lsls r0, r6, 1\n\ + add r0, r12\n\ + asrs r1, r3, 16\n\ + movs r5, 0\n\ + ldrsh r0, [r0, r5]\n\ + cmp r1, r0\n\ + bne _080C4E60\n\ + cmp r2, 0x1\n\ + bne _080C4E5A\n\ +_080C4E78:\n\ + lsls r1, r6, 24\n\ + lsrs r1, 24\n\ + mov r0, r9\n\ + bl sub_80C4698\n\ + ldr r0, _080C4EAC @ =gIsLinkContest\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080C4EB8\n\ + ldr r0, _080C4EB0 @ =gStringVar2\n\ + lsls r1, r6, 3\n\ + subs r1, r6\n\ + lsls r1, 2\n\ + ldr r2, _080C4EB4 @ =gLinkPlayers + 0x8\n\ + adds r1, r2\n\ + bl sub_80C4674\n\ + b _080C4EC4\n\ + .align 2, 0\n\ +_080C4EA0: .4byte gUnknown_02038670\n\ +_080C4EA4: .4byte gSpecialVar_0x8006\n\ +_080C4EA8: .4byte gStringVar1\n\ +_080C4EAC: .4byte gIsLinkContest\n\ +_080C4EB0: .4byte gStringVar2\n\ +_080C4EB4: .4byte gLinkPlayers + 0x8\n\ +_080C4EB8:\n\ + ldr r0, _080C4ED8 @ =gStringVar2\n\ + lsls r1, r6, 6\n\ + ldr r2, _080C4EDC @ =gUnknown_0203857D\n\ + adds r1, r2\n\ + bl sub_80C4674\n\ +_080C4EC4:\n\ + mov r1, r10\n\ + asrs r0, r1, 24\n\ + cmp r0, 0x1\n\ + beq _080C4ED0\n\ + cmp r7, r0\n\ + bne _080C4EE4\n\ +_080C4ED0:\n\ + ldr r0, _080C4EE0 @ =gSpecialVar_0x8006\n\ + strh r4, [r0]\n\ + b _080C4EEA\n\ + .align 2, 0\n\ +_080C4ED8: .4byte gStringVar2\n\ +_080C4EDC: .4byte gUnknown_0203857D\n\ +_080C4EE0: .4byte gSpecialVar_0x8006\n\ +_080C4EE4:\n\ + ldr r1, _080C4EFC @ =gSpecialVar_0x8006\n\ + adds r0, r4, 0x4\n\ + strh r0, [r1]\n\ +_080C4EEA:\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\ +_080C4EFC: .4byte gSpecialVar_0x8006\n\ + .syntax divided"); +} + +void ShowContestWinnerCleanup(void) +{ + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void ShowContestWinner(void) +{ + if(gUnknown_0203856C) + { + sub_80AAF30(); + BATTLE_STRUCT->unk15DDF = 1; + BATTLE_STRUCT->unk15DDE = sub_80B2C4C(254, 0); + sub_80B2A7C(3); + gUnknown_0203856C = 0; + } + SetMainCallback2(CB2_ContestPainting); + gMain.savedCallback = ShowContestWinnerCleanup; +} + +void sub_80C4F70(void) +{ + VarSet(0x4010, gContestMons[0].unk16); + VarSet(0x4011, gContestMons[1].unk16); + VarSet(0x4012, gContestMons[2].unk16); + VarSet(0x4013, gContestMons[3].unk16); +} + +bool8 GiveMonArtistRibbon(void) +{ + u8 ribbon = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_ARTIST_RIBBON); + + if(ribbon == FALSE + && gUnknown_02038690[gContestPlayerMonIndex] == 0 + && gScriptContestRank == 3 + && (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800) + { + ribbon = TRUE; + SetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_ARTIST_RIBBON, &ribbon); + return TRUE; + } + else + { + return FALSE; + } +} + +u8 sub_80C5044(void) +{ + return gUnknown_0203856C; +} + +void ShowContestEntryMonPic(void) +{ + const struct CompressedSpritePalette *palette; + u32 var1, var2; + u16 species; + u8 spriteId; + u8 taskId; + + if(FindTaskIdByFunc(sub_80C5190) == 0xFF) + { + u8 left = CONTEST_ENTRY_PIC_LEFT; + u8 top = CONTEST_ENTRY_PIC_TOP; + + MenuDrawTextWindow(left, top, 19, 13); + species = gContestMons[gSpecialVar_0x8006].species; + var1 = gContestMons[gSpecialVar_0x8006].unk38; // v2 + var2 = gContestMons[gSpecialVar_0x8006].unk3C; // v3 + taskId = CreateTask(sub_80C5190, 0x50); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = species; + HandleLoadSpecialPokePic( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].coords, + gMonFrontPicCoords[species].y_offset, + (u32)gUnknown_081FAF4C[0], + gUnknown_081FAF4C[1], + species, + var1); + palette = GetMonSpritePalStructFromOtIdPersonality(species, var2, var1); + LoadCompressedObjectPalette(palette); + GetMonSpriteTemplate_803C56C(species, 1); + gUnknown_02024E8C.paletteTag = palette->tag; + spriteId = CreateSprite(&gUnknown_02024E8C, 0x78, 0x40, 0); + gTasks[taskId].data[2] = spriteId; + gTasks[taskId].data[3] = left; + gTasks[taskId].data[4] = top; + gSprites[spriteId].callback = SpriteCallbackDummy; + gSprites[spriteId].oam.priority = 0; + } +} + +void sub_80C5164(void) +{ + u8 taskId = FindTaskIdByFunc(sub_80C5190); + + if(taskId != 0xFF) + gTasks[taskId].data[0]++; +} + +void sub_80C5190(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + struct Sprite *sprite; + + switch(task->data[0]) + { + case 2: + sprite = &gSprites[task->data[2]]; + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); + + if(sprite->oam.affineMode) + FreeOamMatrix(sprite->oam.matrixNum); + + DestroySprite(sprite); + task->data[0]++; + break; + case 0: + task->data[0]++; + break; + case 3: + MenuZeroFillWindowRect(task->data[3], task->data[4], task->data[3] + 9, task->data[4] + 10); + DestroyTask(taskId); + break; + case 1: + default: + break; + } +} + +void ScriptGetMultiplayerId(void) +{ + if(gIsLinkContest & 1) + gScriptResult = GetMultiplayerId(); + else + gScriptResult = 4; +} + +void ScriptRandom(void) +{ + u16 random; + u16 *scriptPtr; + + if(gIsLinkContest & 1) + { + gUnknown_03005D28 = 1103515245 * gUnknown_03005D28 + 24691; + random = gUnknown_03005D28 >> 16; + scriptPtr = &gScriptResult; + } + else + { + scriptPtr = &gScriptResult; + random = Random(); + } + *scriptPtr = random % *scriptPtr; +} + +void ScrSpecial_HealPlayerParty(void) +{ + u8 i, j; + u8 ppBonuses; + u8 arg[4]; + + // restore HP. + for(i = 0; i < gPlayerPartyCount; i++) + { + u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + arg[0] = maxHP; + arg[1] = maxHP >> 8; + SetMonData(&gPlayerParty[i], MON_DATA_HP, arg); + ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES); + + // restore PP. + for(j = 0; j < 4; j++) + { + arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j); + SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg); + } + + // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData. + arg[0] = 0; + arg[1] = 0; + arg[2] = 0; + arg[3] = 0; + SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg); + } +} + +u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3) +{ + u16 nationalDexNum; + int sentToPc; + u8 heldItem[2]; + struct Pokemon mon; + + 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); + nationalDexNum = SpeciesToNationalPokedexNum(species); + + switch(sentToPc) + { + case 0: + case 1: + GetSetPokedexFlag(nationalDexNum, 2); + GetSetPokedexFlag(nationalDexNum, 3); + break; + } + return sentToPc; +} + +u8 ScriptGiveEgg(u16 species) +{ + struct Pokemon mon; + u8 isEgg; + + sub_8042044(&mon, species, 1); + isEgg = TRUE; + SetMonData(&mon, MON_DATA_IS_EGG, &isEgg); + + return GiveMonToPlayer(&mon); +} + +void CheckForAlivePartyMons(void) +{ + u8 var = sub_803DAA0(); + + switch(var) + { + case 1: + gScriptResult = var; + break; + case 0: + gScriptResult = var; + break; + case 2: + gScriptResult = var; + break; + } +} + +bool8 CheckPartyMonHasHeldItem(u16 item) +{ + int i; + + for(i = 0; i < 6; i++) + { + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + if(species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item) + return TRUE; + } + return FALSE; +} + +bool8 GetNameOfEnigmaBerryInPlayerParty(void) +{ + bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY); + + if(hasItem == TRUE) + GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1); + + return hasItem; +} + +void CreateScriptedWildMon(u16 species, u8 level, u16 item) +{ + u8 heldItem[2]; + + ZeroEnemyPartyMons(); + CreateMon(&gEnemyParty[0], species, level, 0x20, 0, 0, 0, 0); + + if(item) + { + heldItem[0] = item; + heldItem[1] = item >> 8; + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem); + } +} + +void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot) +{ + if(monIndex > 6) + monIndex = gPlayerPartyCount - 1; + + SetMonMoveSlot(&gPlayerParty[monIndex], move, slot); +} + +void sub_80C5568(void) +{ + gMain.savedCallback = sub_80C5580; + sub_8121E10(); +} + +void sub_80C5580(void) +{ + u8 var = gSelectedOrderFromParty[0]; + + switch(var) + { + case 0: + gScriptResult = 0; + break; + default: + gScriptResult = 1; + break; + } + + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void ChooseBattleTowerPlayerParty(void) +{ + gMain.savedCallback = SetBattleTowerPlayerParty; + sub_8121E34(); +} + +void SetBattleTowerPlayerParty(void) +{ + u8 var = gSelectedOrderFromParty[0]; + + switch(var) + { + case 0: // player quit battle tower? + LoadPlayerParty(); + gScriptResult = 0; + break; + default: // load battle tower. + ReducePlayerPartyToThree(); + gScriptResult = 1; + break; + } + + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void ReducePlayerPartyToThree(void) +{ + struct Pokemon party[3]; + int i; + + CpuFill32(0, party, sizeof party); + + // copy the selected pokemon according to the order. + for(i = 0; i < 3; i++) + if(gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop + party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal + + // delete the last 3 pokemon + CpuFill32(0, gPlayerParty, sizeof gPlayerParty); + + // overwrite the first 3 with the order copied to. + for(i = 0; i < 3; i++) + gPlayerParty[i] = party[i]; + + CalculatePlayerPartyCount(); +} diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c new file mode 100644 index 000000000..f930df8e2 --- /dev/null +++ b/src/script_pokemon_util_80F99CC.c @@ -0,0 +1,444 @@ +#include "global.h" +#include "battle_party_menu.h" +#include "choose_party.h" +#include "contest.h" +#include "data2.h" +#include "party_menu.h" +#include "field_fadetransition.h" +#include "palette.h" +#include "party_menu.h" +#include "pokemon.h" +#include "pokemon_summary_screen.h" +#include "overworld.h" +#include "script.h" +#include "script_pokemon_80F9.h" +#include "songs.h" +#include "sound.h" +#include "string_util.h" +#include "task.h" +#include "text.h" + +extern u8 gPlayerPartyCount; +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u8 gUnknown_02038694; +extern u16 gScriptResult; + +extern void (*gFieldCallback)(void); + +void sub_80F99CC(void) +{ + u8 taskId; + + ScriptContext2_Enable(); + taskId = CreateTask((void *)sub_80F9A8C, 0xA); + gTasks[taskId].data[0] = 2; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); +} + +void sub_80F9A0C(void) +{ + u8 taskId; + + ScriptContext2_Enable(); + taskId = CreateTask((void *)sub_80F9A8C, 0xA); + gTasks[taskId].data[0] = 3; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); +} + +void sub_80F9A4C(void) +{ + u8 taskId; + + ScriptContext2_Enable(); + taskId = CreateTask((void *)sub_80F9A8C, 0xA); + gTasks[taskId].data[0] = 7; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); +} + +void sub_80F9A8C(u8 taskId) +{ + if (!gPaletteFade.active) + { + gPaletteFade.bufferTransferDisabled = 1; + OpenPartyMenu((u8) gTasks[taskId].data[0], 0); + DestroyTask(taskId); + } +} + +bool8 sub_80F9ACC(void) +{ + switch (EWRAM_1B000.unk264) + { + case 0: + if (EWRAM_1B000.unk266 < gPlayerPartyCount) + { + TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); + EWRAM_1B000.unk266++; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + break; + case 1: + LoadHeldItemIconGraphics(); + EWRAM_1B000.unk264++; + break; + case 2: + CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); + EWRAM_1B000.unk264++; + break; + case 3: + if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1) + { + EWRAM_1B000.unk266++; + break; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + break; + } + case 4: + PartyMenuPrintMonsLevelOrStatus(); + EWRAM_1B000.unk264++; + break; + case 5: + PrintPartyMenuMonNicknames(); + EWRAM_1B000.unk264++; + break; + case 6: + sub_80F9C00(); + EWRAM_1B000.unk264++; + break; + case 7: // the only case that can return true. + if (sub_806B58C(EWRAM_1B000.unk266) != 1) + { + EWRAM_1B000.unk266++; + break; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264 = 0; + return TRUE; + } + } + return FALSE; +} + +void sub_80F9C00(void) +{ + u8 i; + + for (i = 0; i < gPlayerPartyCount; i++) + { + switch (sub_80AE47C(&gPlayerParty[i])) + { + case 0: + case 3: + case 4: + sub_806BC3C(i, 0x7E); + break; + case 1: + case 2: + sub_806BC3C(i, 0x70); + break; + } + } +} + +void sub_80F9C6C(u8 var) +{ + if (!gPaletteFade.active) + { + switch (sub_806BD80(var)) + { + case 1: + PlaySE(SE_SELECT); + gUnknown_02038694 = sub_806CA38(var); + gSpecialVar_0x8004 = gUnknown_02038694; + sub_8123138(var); + break; + case 2: + PlaySE(SE_SELECT); + gUnknown_02038694 = 0xFF; + gSpecialVar_0x8004 = 0xFF; + sub_8123138(var); + break; + } + } +} + +bool8 sub_80F9CE8(void) // this is the same function as sub_80F9ACC except case 6 calls a different function. why +{ + switch (EWRAM_1B000.unk264) + { + case 0: + if (EWRAM_1B000.unk266 < gPlayerPartyCount) + { + TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); + EWRAM_1B000.unk266++; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + } + break; + case 1: + LoadHeldItemIconGraphics(); + EWRAM_1B000.unk264++; + break; + case 2: + CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260); + EWRAM_1B000.unk264++; + break; + case 3: + if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1) + { + EWRAM_1B000.unk266++; + break; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264++; + break; + } + case 4: + PartyMenuPrintMonsLevelOrStatus(); + EWRAM_1B000.unk264++; + break; + case 5: + PrintPartyMenuMonNicknames(); + EWRAM_1B000.unk264++; + break; + case 6: + sub_80F9E1C(); + EWRAM_1B000.unk264++; + break; + case 7: // the only case that can return true. + if (sub_806B58C(EWRAM_1B000.unk266) != 1) + { + EWRAM_1B000.unk266++; + break; + } + else + { + EWRAM_1B000.unk266 = 0; + EWRAM_1B000.unk264 = 0; + return TRUE; + } + } + return FALSE; +} + +void sub_80F9E1C(void) +{ + u8 i; + + for (i = 0; i < gPlayerPartyCount; i++) + { + if (!sub_8040574(&gPlayerParty[i])) + sub_806BC3C(i, 0x9A); + else + sub_806BC3C(i, 0x8C); + } +} + +void sub_80F9E64(u8 var) +{ + if (!gPaletteFade.active) + { + switch (sub_806BD80(var)) + { + case 1: + PlaySE(SE_SELECT); + gSpecialVar_0x8004 = sub_806CA38(var); + gSpecialVar_0x8005 = sub_8040574(&gPlayerParty[gSpecialVar_0x8004]); + sub_8123138(var); + break; + case 2: + PlaySE(SE_SELECT); + gSpecialVar_0x8004 = 0xFF; + sub_8123138(var); + } + } +} + +void sub_80F9EEC(void) +{ + sub_809D9F0(&gPlayerParty[0], gSpecialVar_0x8004, gPlayerPartyCount - 1, c2_exit_to_overworld_2_switch, 0); + unk_2018000.unk8 = 3; + gFieldCallback = sub_8080990; +} + +void ScrSpecial_CountPokemonMoves(void) // count pokemon moves +{ + u8 i; + + gScriptResult = 0; + + for (i = 0; i < 4; i++) // checks MOVE1-MOVE4 + if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_MOVE1 + i)) + gScriptResult++; +} + +void ScrSpecial_GetPokemonNicknameAndMoveName(void) +{ + struct Pokemon *pkmn = &gPlayerParty[gSpecialVar_0x8004]; + u16 data = GetMonData(pkmn, MON_DATA_MOVE1 + gSpecialVar_0x8005); + + GetMonNickname(pkmn, gStringVar1); + StringCopy(gStringVar2, gMoveNames[data]); +} + +// no. hard +__attribute__((naked)) +void sub_80F9FDC(struct Pokemon *party, u8 var, u8 var2) +{ + 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, 0x20\n\ + mov r8, r0\n\ + adds r5, r1, 0\n\ + adds r4, r2, 0\n\ + lsls r5, 24\n\ + lsrs r5, 24\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r0, r5, 0\n\ + adds r0, 0xD\n\ + str r0, [sp, 0x8]\n\ + mov r0, r8\n\ + ldr r1, [sp, 0x8]\n\ + bl GetMonData\n\ + mov r1, sp\n\ + adds r1, 0x2\n\ + str r1, [sp, 0x14]\n\ + strh r0, [r1]\n\ + adds r3, r4, 0\n\ + adds r3, 0xD\n\ + str r3, [sp, 0xC]\n\ + mov r0, r8\n\ + adds r1, r3, 0\n\ + bl GetMonData\n\ + mov r1, sp\n\ + strh r0, [r1]\n\ + adds r7, r5, 0\n\ + adds r7, 0x11\n\ + str r7, [sp, 0x10]\n\ + mov r0, r8\n\ + adds r1, r7, 0\n\ + bl GetMonData\n\ + mov r1, sp\n\ + adds r1, 0x5\n\ + str r1, [sp, 0x18]\n\ + strb r0, [r1]\n\ + adds r3, r4, 0\n\ + adds r3, 0x11\n\ + str r3, [sp, 0x1C]\n\ + mov r0, r8\n\ + adds r1, r3, 0\n\ + bl GetMonData\n\ + add r7, sp, 0x4\n\ + mov r10, r7\n\ + strb r0, [r7]\n\ + mov r0, r8\n\ + movs r1, 0x15\n\ + bl GetMonData\n\ + mov r6, sp\n\ + adds r6, 0x6\n\ + strb r0, [r6]\n\ + ldr r1, _080FA0D8 @ =gUnknown_08208238\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + mov r9, r0\n\ + ldrb r0, [r6]\n\ + adds r2, r0, 0\n\ + mov r3, r9\n\ + ands r2, r3\n\ + lsls r5, 1\n\ + asrs r2, r5\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + adds r1, r4, r1\n\ + ldrb r3, [r1]\n\ + adds r1, r0, 0\n\ + ands r1, r3\n\ + lsls r4, 1\n\ + asrs r1, r4\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r7, r9\n\ + bics r0, r7\n\ + strb r0, [r6]\n\ + ldrb r0, [r6]\n\ + bics r0, r3\n\ + strb r0, [r6]\n\ + lsls r2, r4\n\ + lsls r1, r5\n\ + adds r2, r1\n\ + ldrb r0, [r6]\n\ + orrs r0, r2\n\ + strb r0, [r6]\n\ + mov r0, r8\n\ + ldr r1, [sp, 0x8]\n\ + mov r2, sp\n\ + bl SetMonData\n\ + mov r0, r8\n\ + ldr r1, [sp, 0xC]\n\ + ldr r2, [sp, 0x14]\n\ + bl SetMonData\n\ + mov r0, r8\n\ + ldr r1, [sp, 0x10]\n\ + mov r2, r10\n\ + bl SetMonData\n\ + mov r0, r8\n\ + ldr r1, [sp, 0x1C]\n\ + ldr r2, [sp, 0x18]\n\ + bl SetMonData\n\ + mov r0, r8\n\ + movs r1, 0x15\n\ + adds r2, r6, 0\n\ + bl SetMonData\n\ + add sp, 0x20\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\ +_080FA0D8: .4byte gUnknown_08208238\n\ + .syntax divided"); +} + +void sub_80FA0DC(void) +{ + u16 i; + + SetMonMoveSlot(&gPlayerParty[gSpecialVar_0x8004], 0, gSpecialVar_0x8005); + RemoveMonPPBonus(&gPlayerParty[gSpecialVar_0x8004], gSpecialVar_0x8005); + + for (i = gSpecialVar_0x8005; i < 3; i++) + sub_80F9FDC(&gPlayerParty[gSpecialVar_0x8004], i, i + 1); +} + +void sub_80FA148(void) +{ + struct Pokemon *party = &gPlayerParty[gSpecialVar_0x8004]; + gScriptResult = 0; + + if (GetMonData(party, MON_DATA_IS_EGG)) + gScriptResult = 1; +} diff --git a/src/unknown_task.c b/src/unknown_task.c new file mode 100644 index 000000000..5ec7fa6bc --- /dev/null +++ b/src/unknown_task.c @@ -0,0 +1,248 @@ +#include "global.h" +#include "data2.h" +#include "task.h" +#include "trig.h" +#include "unknown_task.h" + +struct UnknownStruct1 +{ + void *src[2]; + volatile void *dest; + u32 unkC; + void (*unk10)(void); + u8 srcBank; + u8 unk15; + u8 unk16; + u8 unk17; + u8 taskId; + u8 filler19[0x7]; +}; + +static void sub_80896F4(void); +static void sub_8089714(void); + +extern u16 gUnknown_030041B0; +extern u16 gUnknown_030041B4; +extern u16 gUnknown_030041B8; +extern u16 gUnknown_03004280; +extern u16 gUnknown_03004288; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; +extern u16 gUnknown_030042C0; + +extern u8 gUnknown_0202FFA4; + +extern struct UnknownStruct1 gUnknown_03004DC0; + +extern u16 gUnknown_03004DE0[][0x3C0]; + +void remove_some_task(void) +{ + gUnknown_03004DC0.unk15 = 0; + DmaStop(0); + if (gUnknown_03004DC0.taskId != 0xFF) + { + DestroyTask(gUnknown_03004DC0.taskId); + gUnknown_03004DC0.taskId = 0xFF; + } +} + +void dp12_8087EA4(void) +{ + CpuFill16(0, gUnknown_03004DE0, 0x780 * 2); + gUnknown_03004DC0.src[0] = 0; + gUnknown_03004DC0.src[1] = 0; + gUnknown_03004DC0.dest = 0; + gUnknown_03004DC0.unkC = 0; + gUnknown_03004DC0.srcBank = 0; + gUnknown_03004DC0.unk15 = 0; + gUnknown_03004DC0.unk16 = 0; + gUnknown_03004DC0.unk17 = 0; + gUnknown_03004DC0.taskId = 0xFF; +} + +void sub_80895F8(struct UnknownTaskStruct unk) +{ + if (unk.control == (((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1)) + { + gUnknown_03004DC0.src[0] = &gUnknown_03004DE0[0][1]; + gUnknown_03004DC0.src[1] = &gUnknown_03004DE0[1][1]; + gUnknown_03004DC0.unk10 = sub_80896F4; + } + else + { + gUnknown_03004DC0.src[0] = &gUnknown_03004DE0[0][2]; + gUnknown_03004DC0.src[1] = &gUnknown_03004DE0[1][2]; + gUnknown_03004DC0.unk10 = sub_8089714; + } + + gUnknown_03004DC0.unkC = unk.control; + gUnknown_03004DC0.dest = unk.dest; + gUnknown_03004DC0.unk15 = unk.unk8; + gUnknown_03004DC0.unk16 = unk.unk9; + gUnknown_03004DC0.unk17 = unk.unk9; +} + +void sub_8089668(void) +{ + if (gUnknown_03004DC0.unk15) + { + if (gUnknown_03004DC0.unk15 == 3) + { + gUnknown_03004DC0.unk15 = 0; + DmaStop(0); + gUnknown_0202FFA4 = 1; + } + else + { + DmaStop(0); + DmaSet(0, gUnknown_03004DC0.src[gUnknown_03004DC0.srcBank], gUnknown_03004DC0.dest, gUnknown_03004DC0.unkC); + gUnknown_03004DC0.unk10(); + gUnknown_03004DC0.srcBank ^= 1; + } + } +} + +static void sub_80896F4(void) +{ + u16 *dest = (u16 *)gUnknown_03004DC0.dest; + u16 *src = (u16 *)&gUnknown_03004DE0[gUnknown_03004DC0.srcBank]; + *dest = *src; +} + +static void sub_8089714(void) +{ + u32 *dest = (u32 *)gUnknown_03004DC0.dest; + u32 *src = (u32 *)&gUnknown_03004DE0[gUnknown_03004DC0.srcBank]; + *dest = *src; +} + +static void task00_for_dp12(u8 taskId) +{ + int value = 0; + + if (gUnknown_0202FFA4) + { + DestroyTask(taskId); + gUnknown_03004DC0.taskId = 0xFF; + } + else + { + if (gTasks[taskId].data[7]) + { + switch (gTasks[taskId].data[6]) + { + case 0x0: + value = gUnknown_030042A4; + break; + case 0x2: + value = gUnknown_030042A0; + break; + case 0x4: + value = gUnknown_030042C0; + break; + case 0x6: + value = gUnknown_030041B4; + break; + case 0x8: + value = gUnknown_03004288; + break; + case 0xA: + value = gUnknown_03004280; + break; + case 0xC: + value = gUnknown_030041B0; + break; + case 0xE: + value = gUnknown_030041B8; + break; + } + } + if (gTasks[taskId].data[4]) + { + int i; + int offset; + gTasks[taskId].data[4]--; + offset = gTasks[taskId].data[3] + 320; + for (i = gTasks[taskId].data[0]; i < gTasks[taskId].data[1]; i++) + { + gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = gUnknown_03004DE0[0][offset] + value; + offset++; + } + } + else + { + int i; + int offset; + gTasks[taskId].data[4] = gTasks[taskId].data[5]; + offset = gTasks[taskId].data[3] + 320; + for (i = gTasks[taskId].data[0]; i < gTasks[taskId].data[1]; i++) + { + gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = gUnknown_03004DE0[0][offset] + value; + offset++; + } + gTasks[taskId].data[3]++; + if (gTasks[taskId].data[3] == gTasks[taskId].data[2]) + { + gTasks[taskId].data[3] = 0; + } + } + } +} + +static void sub_80898FC(u16 *a1, u8 a2, u8 a3, u8 a4) +{ + u16 i = 0; + u8 offset = 0; + + while (i < 0x100) + { + a1[i] = (gSineTable[offset] * a3) / 256; + offset += a2; + i++; + } +} + +u8 sub_8089944(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) +{ + int i; + int offset; + struct UnknownTaskStruct unk; + u8 taskId; + + dp12_8087EA4(); + + unk.dest = (void *)(REG_ADDR_BG0HOFS + a6); + unk.control = ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1; + unk.unk8 = 1; + unk.unk9 = 0; + + sub_80895F8(unk); + + taskId = CreateTask(task00_for_dp12, 0); + + gTasks[taskId].data[0] = a1; + gTasks[taskId].data[1] = a2; + gTasks[taskId].data[2] = 256 / a3; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = a5; + gTasks[taskId].data[5] = a5; + gTasks[taskId].data[6] = a6; + gTasks[taskId].data[7] = a7; + + gUnknown_03004DC0.taskId = taskId; + gUnknown_0202FFA4 = 0; + + sub_80898FC(&gUnknown_03004DE0[0][320], a3, a4, a2 - a1); + + offset = 320; + + for (i = a1; i < a2; i++) + { + gUnknown_03004DE0[0][i] = gUnknown_03004DE0[0][offset]; + gUnknown_03004DE0[1][i] = gUnknown_03004DE0[0][offset]; + offset++; + } + + return taskId; +} diff --git a/src/unused_8124F94.c b/src/unused_8124F94.c new file mode 100644 index 000000000..5f76fa92e --- /dev/null +++ b/src/unused_8124F94.c @@ -0,0 +1,126 @@ +#include "global.h" +#include "decompress.h" +#include "palette.h" + +struct UnknownStruct2 +{ + void *src; + u8 unk4; + u8 unk5; + u8 unk6; + u16 unk8; +}; + +struct UnknownStruct3 +{ + u16 *paletteSrc; + u8 unk4; + u8 paletteCount; +}; + +struct UnknownStruct1 +{ + u8 paletteNum; + u8 unk1; + u16 unk2; + u8 *dest; + struct UnknownStruct3 unk8[16]; + struct UnknownStruct2 unk88[32]; +}; + +void unref_sub_8124F94(struct UnknownStruct1 *a) +{ + a->unk1 = 0; + a->paletteNum = 0; + a->unk2 = 0; + a->dest = (void *)VRAM; + DmaFill16(3, 0, a->unk8, sizeof(a->unk8)); + DmaFill16(3, 0, a->unk88, sizeof(a->unk88)); +} + +u8 unref_sub_8124FD8(struct UnknownStruct1 *a, const struct UnknownStruct2 *b) +{ + while (1) + { + s32 r6; + s32 temp; + + // Couldn't get it to match any other way + if (a->unk1 < 32 && b->src == NULL) + return 0; + if (a->unk1 >= 32) + break; + + a->unk88[a->unk1].src = b->src; + a->unk88[a->unk1].unk6 = b->unk6; + a->unk88[a->unk1].unk4 = b->unk4; + a->unk88[a->unk1].unk5 = b->unk5; + r6 = b->unk4 * b->unk5; + if (a->unk2 + r6 > 0x400) + return 2; + if (b->unk8 == 0) + { + DmaCopy16(3, b->src, a->dest + a->unk2 * 64, r6 * 32); + } + else + { + LZDecompressWram(b->src, a->dest + a->unk2 * 64); + } + a->unk88[a->unk1].unk8 = a->unk2; + temp = r6 + a->unk2; + a->unk2 = temp; + a->unk1++; + b++; + } + return 1; +} + +u8 unref_sub_81250A4(struct UnknownStruct1 *a, struct UnknownStruct3 *b) +{ + while (1) + { + // Couldn't get it to match any other way + if (a->paletteNum < 16 && b->paletteSrc == NULL) + return 0; + if (a->paletteNum >= 16) + break; + + a->unk8[a->paletteNum].paletteSrc = b->paletteSrc; + a->unk8[a->paletteNum].unk4 = b->unk4; + if (b->paletteCount == 0) + { + LoadPalette(b->paletteSrc, a->paletteNum * 16, 32); + } + else + { + u16 palette[16]; + + LZDecompressWram(b->paletteSrc, palette); + LoadPalette(palette, a->paletteNum * 16, 32); + } + a->unk8[a->paletteNum].paletteCount = a->paletteNum; + a->paletteNum = a->paletteNum + 1; + b++; + } + return 1; +} + +u8 unref_sub_8125118(struct UnknownStruct1 *a, struct UnknownStruct3 *b) +{ + u16 palettes[16][16] = {0}; + u8 r7 = b->paletteCount; + u8 i; + + LZDecompressWram(b->paletteSrc, palettes); + for (i = a->paletteNum; i < r7; i++) + { + if (a->paletteNum + i >= 16) + return 1; + a->unk8[i].paletteSrc = b->paletteSrc; + a->unk8[i].unk4 = b->unk4 + i; + a->unk8[i].paletteCount = a->paletteNum; + LoadPalette(palettes[i], a->paletteNum * 16, sizeof(palettes[i])); + a->paletteNum++; + } + return 0; +} diff --git a/sym_bss.txt b/sym_bss.txt index c1348d8b2..4f6d9c95b 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -5,7 +5,7 @@ .include "src/engine/link.o" .include "src/engine/rtc.o" .include "src/field/daycare.o" - .include "src/engine/trade.o" + .include "src/engine/trade.o" .include "src/scene/berry_blender.o" .include "src/engine/play_time.o" .include "src/field/overworld.o" @@ -24,15 +24,15 @@ .include "src/field/shop.o" .include "src/engine/record_mixing.o" .include "src/field/tv.o" - .include "src/battle/battle_anim_80CA710.o" - .include "src/field/easy_chat.o" - .include "src/field/pokenav.o" + .include "src/battle/battle_anim_80CA710.o" + .include "src/field/easy_chat.o" + .include "src/field/pokenav.o" .include "src/field/mauville_man.o" .include "src/field/menu_helpers.o" .include "src/scene/contest_painting.o" .include "src/field/pokeblock.o" .include "src/field/field_specials.o" - .include "src/pokemon/learn_move.o" + .include "src/pokemon/learn_move.o" .include "src/field/player_pc.o" .include "asm/m4a_1.o" .include "src/libs/agb_flash.o" diff --git a/sym_common.txt b/sym_common.txt index 414d03e0f..207f47f51 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -3,7 +3,7 @@ .include "engine/string_util.o" .include "engine/link.o" .include "engine/rtc.o" - .include "misc/rom3.o" + .include "rom3.o" @ battle @@ -160,7 +160,7 @@ gUnknown_03005560: @ 3005560 gUnknown_030056A0: @ 30056A0 .space 0x640 - .include "pokemon/pokemon_menu.o" + .include "pokemon/pokemon_menu.o" .include "pokemon/pokedex.o" @ pokemon_summary_screen @@ -237,7 +237,7 @@ gUnknown_03005E0C: @ 3005E0C .space 0x4 .include "scene/contest_painting.o" - .include "scene/evolution_scene.o" + .include "scene/evolution_scene.o" @ pokedex_cry_screen diff --git a/sym_ewram.txt b/sym_ewram.txt index f7352cd1d..e5cda29a9 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -6,7 +6,7 @@ .space 0x2E8 .include "src/engine/link.o" - .include "src/misc/rom3.o" + .include "src/rom3.o" @ battle @@ -344,7 +344,7 @@ gUnknown_0202E8FA: @ 202E8FA .include "src/engine/palette.o" .include "src/engine/sound.o" .include "src/battle/battle_anim.o" - .include "src/misc/rom_8077ABC.o" + .include "src/rom_8077ABC.o" .include "src/scene/title_screen.o" @ field_weather @@ -549,7 +549,7 @@ gUnknown_020388B4: @ 20388B4 .include "src/field/region_map.o" .include "src/field/decoration.o" .include "src/battle/battle_ai.o" - .include "src/misc/rom6.o" + .include "src/rom6.o" .include "src/field/pokeblock.o" .include "src/field/field_specials.o" -- cgit v1.2.3 From 70c45eb2616195eb47b8bc67d03a1589cd6c56e6 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 30 Sep 2017 21:26:05 -0400 Subject: remove unnecessary leftover from swiss safari decompile. --- src/battle/battle_anim_81258BC.c | 50 ---------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 src/battle/battle_anim_81258BC.c diff --git a/src/battle/battle_anim_81258BC.c b/src/battle/battle_anim_81258BC.c deleted file mode 100644 index 5bdbb4946..000000000 --- a/src/battle/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 -- cgit v1.2.3 From bdc9f5880e65e0b39d486feffc1c8131fe54edb4 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 30 Sep 2017 22:16:17 -0500 Subject: fix last nonmatching function and various improvements --- src/sound_check_menu.c | 655 ++++++++++++------------------------------------- 1 file changed, 158 insertions(+), 497 deletions(-) diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index 3cc25baf1..e8f98838c 100644 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -12,9 +12,9 @@ #include "pokedex_cry_screen.h" // local task defines -#define WINDOW_SELECTED data[0] -#define BGM_INDEX data[1] -#define SE_INDEX data[2] +#define tWindowSelected data[0] +#define tBgmIndex data[1] +#define tSeIndex data[2] #define UNK_DATA3 data[3] #define UNK_DATA4 data[4] // data 5-7 are not used @@ -72,19 +72,19 @@ struct MusicPlayerInfo *gUnknown_03005D30; extern struct MusicPlayerInfo gMPlay_BGM; -void sub_80BA258(u8); +void Task_InitSoundCheckMenu(u8); void sub_80BA384(u8); void sub_80BA65C(u8); void sub_80BA68C(u8); -void sub_80BA6B8(u8); -void sub_80BA700(u16, u16, u16); +void HighlightSelectedWindow(u8); +void PrintSoundNumber(u16, u16, u16); void sub_80BA79C(const u8 *const, u16, u16); -void sub_80BA800(u8); +void Task_DrawDriverTestMenu(u8); void sub_80BAA48(u8); void sub_80BACDC(s8); void sub_80BAD5C(void); void sub_80BAE10(u8, u8); -void sub_80BAE78(int, u16, u16, u8); +void PrintSignedNumber(int, u16, u16, u8); void sub_80BAF84(u8); void sub_80BB038(u8); void sub_80BB1D4(void); @@ -92,7 +92,7 @@ void sub_80BB25C(u8); void sub_80BB3B4(u8); void sub_80BB494(void); -void sub_80BA0A8(void) +void CB2_SoundCheckMenu(void) { RunTasks(); AnimateSprites(); @@ -100,7 +100,7 @@ void sub_80BA0A8(void) UpdatePaletteFade(); } -void sub_80BA0C0(void) +void VBlankCB_SoundCheckMenu(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -151,21 +151,20 @@ void CB2_StartSoundCheckMenu(void) REG_IE = 1; // could be a typo of REG_IME REG_IE |= 1; REG_DISPSTAT |= 8; - SetVBlankCallback(sub_80BA0C0); - SetMainCallback2(sub_80BA0A8); + SetVBlankCallback(VBlankCB_SoundCheckMenu); + SetMainCallback2(CB2_SoundCheckMenu); REG_DISPCNT = 0x7140; - taskId = CreateTask(sub_80BA258, 0); - gTasks[taskId].WINDOW_SELECTED = BGM_WINDOW; - gTasks[taskId].BGM_INDEX = 0; - gTasks[taskId].SE_INDEX = 0; + taskId = CreateTask(Task_InitSoundCheckMenu, 0); + gTasks[taskId].tWindowSelected = BGM_WINDOW; + gTasks[taskId].tBgmIndex = 0; + gTasks[taskId].tSeIndex = 0; gTasks[taskId].UNK_DATA3 = 0; gUnknown_020387B0 = 0; gTasks[taskId].UNK_DATA3 = 0; // why? m4aSoundInit(); } -// Task_InitSoundCheckMenu -void sub_80BA258(u8 taskId) +void Task_InitSoundCheckMenu(u8 taskId) { u8 soundcheckStr[] = _("サウンドチェック"); u8 bgmStr[] = _("BGM"); @@ -176,9 +175,9 @@ void sub_80BA258(u8 taskId) if (!gPaletteFade.active) { - MenuDrawTextWindow(0x2, 0, 0x1B, 0x3); - MenuDrawTextWindow(0x2, 0x5, 0x1B, 0xA); - MenuDrawTextWindow(0x2, 0xC, 0x1B, 0x11); + MenuDrawTextWindow(2, 0, 27, 3); + MenuDrawTextWindow(2, 5, 27, 10); + MenuDrawTextWindow(2, 12, 27, 17); MenuPrint(soundcheckStr, 4, 1); MenuPrint(abDescStr, 14, 1); MenuPrint(bgmStr, 4, 6); @@ -186,7 +185,7 @@ void sub_80BA258(u8 taskId) MenuPrint(seStr, 4, 13); MenuPrint(upDownStr, 14, 13); MenuPrint(driverStr, 14, 18); - gTasks[taskId].FUNC = sub_80BA384; + gTasks[taskId].func = sub_80BA384; REG_WIN0H = WIN_RANGE(17, 223); REG_WIN0V = WIN_RANGE(1, 31); } @@ -200,484 +199,145 @@ extern const u8 *const gSENames[]; void sub_80BA384(u8 taskId) // Task_HandleDrawingSoundCheckMenuText { - sub_80BA6B8(gTasks[taskId].WINDOW_SELECTED); - sub_80BA700(gTasks[taskId].BGM_INDEX + BGM_STOP, 7, 8); // print by BGM index - sub_80BA79C(gBGMNames[gTasks[taskId].BGM_INDEX], 11, 8); - sub_80BA700(gTasks[taskId].SE_INDEX, 7, 15); - sub_80BA79C(gSENames[gTasks[taskId].SE_INDEX], 11, 15); - gTasks[taskId].FUNC = sub_80BA65C; + HighlightSelectedWindow(gTasks[taskId].tWindowSelected); + PrintSoundNumber(gTasks[taskId].tBgmIndex + BGM_STOP, 7, 8); // print by BGM index + sub_80BA79C(gBGMNames[gTasks[taskId].tBgmIndex], 11, 8); + PrintSoundNumber(gTasks[taskId].tSeIndex, 7, 15); + sub_80BA79C(gSENames[gTasks[taskId].tSeIndex], 11, 15); + gTasks[taskId].func = sub_80BA65C; } -#ifdef NONMATCHING -bool8 sub_80BA400(u8 taskId) // Task_ProcessSoundCheckMenuInput +bool8 Task_ProcessSoundCheckMenuInput(u8 taskId) { if (gMain.newKeys & R_BUTTON) // driver test { - gTasks[taskId].FUNC = sub_80BA800; - return FALSE; + gTasks[taskId].func = Task_DrawDriverTestMenu; } - if (gMain.newKeys & L_BUTTON) + else if (gMain.newKeys & L_BUTTON) { - gTasks[taskId].FUNC = sub_80BAF84; - return FALSE; + gTasks[taskId].func = sub_80BAF84; } - if (gMain.newKeys & START_BUTTON) + else if (gMain.newKeys & START_BUTTON) { - gTasks[taskId].FUNC = sub_80BB25C; - return FALSE; + gTasks[taskId].func = sub_80BB25C; } - if (gMain.newKeys & A_BUTTON) // both these cases insist on non reuses of certain data variables and cause the function to not match. + else if (gMain.newKeys & A_BUTTON) { - if (gTasks[taskId].WINDOW_SELECTED != 0) // is playing? + if (gTasks[taskId].tWindowSelected != 0) // is playing? { - if (gTasks[taskId].UNK_DATA4 != 0) + if (gTasks[taskId].data[4] != 0) { - if (gTasks[taskId].SE_INDEX != 0) // why are you insiting on a non signed halfword? + if (gTasks[taskId].data[2] != 0) { - m4aSongNumStop(gTasks[taskId].UNK_DATA4); + m4aSongNumStop(gTasks[taskId].data[4]); + m4aSongNumStart(gTasks[taskId].data[2]); + gTasks[taskId].data[4] = gTasks[taskId].data[2]; } else { - m4aSongNumStop(gTasks[taskId].SE_INDEX); - gTasks[taskId].UNK_DATA4 = gTasks[taskId].SE_INDEX; - return FALSE; + m4aSongNumStop(gTasks[taskId].data[4]); + gTasks[taskId].data[4] = 0; } } - else if (gTasks[taskId].SE_INDEX == 0) // _080BA4BA + else { - return FALSE; + if (gTasks[taskId].data[2] != 0) + { + m4aSongNumStart(gTasks[taskId].data[2]); + gTasks[taskId].data[4] = gTasks[taskId].data[2]; + } } - // _080BA4C4 - m4aSongNumStart(gTasks[taskId].SE_INDEX); - gTasks[taskId].UNK_DATA4 = gTasks[taskId].SE_INDEX; - return FALSE; } - else // _080BA4D0 + else { - if (gTasks[taskId].UNK_DATA3 != 0) + if (gTasks[taskId].data[3] != 0) { - if (gTasks[taskId].BGM_INDEX != 0) + if (gTasks[taskId].tBgmIndex != 0) { - m4aSongNumStop(gTasks[taskId].UNK_DATA3 + BGM_STOP); + m4aSongNumStop(gTasks[taskId].data[3] + BGM_STOP); + m4aSongNumStart(gTasks[taskId].tBgmIndex + BGM_STOP); + gTasks[taskId].data[3] = gTasks[taskId].tBgmIndex; } - else // _080BA500 + else { - m4aSongNumStop(gTasks[taskId].UNK_DATA3 + BGM_STOP); - gTasks[taskId].UNK_DATA3 = gTasks[taskId].BGM_INDEX; - return FALSE; + m4aSongNumStop(gTasks[taskId].data[3] + BGM_STOP); + gTasks[taskId].data[3] = 0; } } - else if (gTasks[taskId].BGM_INDEX == 0) // _080BA514 - return FALSE; - - m4aSongNumStart(gTasks[taskId].BGM_INDEX + BGM_STOP); - gTasks[taskId].UNK_DATA3 = gTasks[taskId].BGM_INDEX; + else if (gTasks[taskId].tBgmIndex != 0) + { + m4aSongNumStart(gTasks[taskId].tBgmIndex + BGM_STOP); + gTasks[taskId].data[3] = gTasks[taskId].tBgmIndex; + } } - return FALSE; } - if (gMain.newKeys & B_BUTTON) + else if (gMain.newKeys & B_BUTTON) { - m4aSongNumStart(5); + m4aSongNumStart(SE_SELECT); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].FUNC = sub_80BA68C; - return FALSE; + gTasks[taskId].func = sub_80BA68C; } - if (gMain.newAndRepeatedKeys & DPAD_UP) + else if (gMain.newAndRepeatedKeys & DPAD_UP) { - gTasks[taskId].data[8] ^= A_BUTTON; // huh? + gTasks[taskId].tWindowSelected ^= 1; return TRUE; } - if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - gTasks[taskId].data[8] ^= A_BUTTON; // huh? + gTasks[taskId].tWindowSelected ^= 1; return TRUE; } - else + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { - u16 keys = gMain.newAndRepeatedKeys & DPAD_RIGHT; - if (keys) - { - if (gTasks[taskId].WINDOW_SELECTED != 0) + if (gTasks[taskId].tWindowSelected != 0) { - if (gTasks[taskId].SE_INDEX > 0) - { - gTasks[taskId].SE_INDEX--; - } + if (gTasks[taskId].tSeIndex > 0) + gTasks[taskId].tSeIndex--; else - { - gTasks[taskId].SE_INDEX = 0xF7; - } - } - else if (gTasks[taskId].BGM_INDEX > 0) - { - gTasks[taskId].BGM_INDEX--; + gTasks[taskId].tSeIndex = 0xF7; } else { - gTasks[taskId].BGM_INDEX = 0x75; + if (gTasks[taskId].tBgmIndex > 0) + gTasks[taskId].tBgmIndex--; + else + gTasks[taskId].tBgmIndex = 0x75; } return TRUE; } - if (gMain.newAndRepeatedKeys & DPAD_LEFT) + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { - if (gTasks[taskId].WINDOW_SELECTED != 0) + if (gTasks[taskId].tWindowSelected != 0) { - if (gTasks[taskId].SE_INDEX < 0xF7) - { - gTasks[taskId].SE_INDEX++; - } + if (gTasks[taskId].tSeIndex < 0xF7) + gTasks[taskId].tSeIndex++; else - { - gTasks[taskId].SE_INDEX = keys; // ?? - } - } - else if (gTasks[taskId].BGM_INDEX < 0x75) - { - gTasks[taskId].BGM_INDEX++; - return TRUE; + gTasks[taskId].tSeIndex = 0; } else { - gTasks[taskId].BGM_INDEX = gTasks[taskId].SE_INDEX; - return TRUE; + if (gTasks[taskId].tBgmIndex < 0x75) + gTasks[taskId].tBgmIndex++; + else + gTasks[taskId].tBgmIndex = 0; } return TRUE; } - if (gMain.heldKeys & SELECT_BUTTON) + else if (gMain.heldKeys & SELECT_BUTTON) { - gUnknown_020387B0 = A_BUTTON; - return FALSE; + gUnknown_020387B0 = 1; } else { - gUnknown_020387B0 = (gMain.heldKeys & SELECT_BUTTON); - return FALSE; - } + gUnknown_020387B0 = 0; } + return FALSE; } -#else -__attribute__((naked)) -bool8 sub_80BA400(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - sub sp, 0x4\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - ldr r2, _080BA428 @ =gMain\n\ - ldrh r1, [r2, 0x2E]\n\ - movs r0, 0x80\n\ - lsls r0, 1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080BA434\n\ - ldr r0, _080BA42C @ =gTasks\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldr r0, _080BA430 @ =sub_80BA800\n\ - str r0, [r1]\n\ - b _080BA64C\n\ - .align 2, 0\n\ -_080BA428: .4byte gMain\n\ -_080BA42C: .4byte gTasks\n\ -_080BA430: .4byte sub_80BA800\n\ -_080BA434:\n\ - movs r0, 0x80\n\ - lsls r0, 2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080BA458\n\ - ldr r0, _080BA450 @ =gTasks\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldr r0, _080BA454 @ =sub_80BAF84\n\ - str r0, [r1]\n\ - b _080BA64C\n\ - .align 2, 0\n\ -_080BA450: .4byte gTasks\n\ -_080BA454: .4byte sub_80BAF84\n\ -_080BA458:\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080BA478\n\ - ldr r0, _080BA470 @ =gTasks\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldr r0, _080BA474 @ =sub_80BB25C\n\ - str r0, [r1]\n\ - b _080BA64C\n\ - .align 2, 0\n\ -_080BA470: .4byte gTasks\n\ -_080BA474: .4byte sub_80BB25C\n\ -_080BA478:\n\ - movs r6, 0x1\n\ - movs r5, 0x1\n\ - ands r5, r1\n\ - cmp r5, 0\n\ - beq _080BA538\n\ - ldr r0, _080BA4AC @ =gTasks\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 3\n\ - adds r5, r1, r0\n\ - movs r1, 0x8\n\ - ldrsh r0, [r5, r1]\n\ - cmp r0, 0\n\ - beq _080BA4D0\n\ - movs r2, 0x10\n\ - ldrsh r0, [r5, r2]\n\ - cmp r0, 0\n\ - beq _080BA4BA\n\ - movs r3, 0xC\n\ - ldrsh r4, [r5, r3]\n\ - cmp r4, 0\n\ - beq _080BA4B0\n\ - ldrh r0, [r5, 0x10]\n\ - bl m4aSongNumStop\n\ - b _080BA4C4\n\ - .align 2, 0\n\ -_080BA4AC: .4byte gTasks\n\ -_080BA4B0:\n\ - ldrh r0, [r5, 0x10]\n\ - bl m4aSongNumStop\n\ - strh r4, [r5, 0x10]\n\ - b _080BA64C\n\ -_080BA4BA:\n\ - movs r4, 0xC\n\ - ldrsh r0, [r5, r4]\n\ - cmp r0, 0\n\ - bne _080BA4C4\n\ - b _080BA64C\n\ -_080BA4C4:\n\ - ldrh r0, [r5, 0xC]\n\ - bl m4aSongNumStart\n\ - ldrh r0, [r5, 0xC]\n\ - strh r0, [r5, 0x10]\n\ - b _080BA64C\n\ -_080BA4D0:\n\ - ldrh r1, [r5, 0xE]\n\ - movs r2, 0xE\n\ - ldrsh r0, [r5, r2]\n\ - cmp r0, 0\n\ - beq _080BA514\n\ - movs r3, 0xA\n\ - ldrsh r4, [r5, r3]\n\ - cmp r4, 0\n\ - beq _080BA500\n\ - ldr r0, _080BA4FC @ =0x0000015d\n\ - adds r4, r0, 0\n\ - adds r0, r1, r4\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - bl m4aSongNumStop\n\ - ldrh r1, [r5, 0xA]\n\ - adds r4, r1\n\ - lsls r4, 16\n\ - lsrs r4, 16\n\ - adds r0, r4, 0\n\ - b _080BA528\n\ - .align 2, 0\n\ -_080BA4FC: .4byte 0x0000015d\n\ -_080BA500:\n\ - ldr r2, _080BA510 @ =0x0000015d\n\ - adds r0, r1, r2\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - bl m4aSongNumStop\n\ - strh r4, [r5, 0xE]\n\ - b _080BA64C\n\ - .align 2, 0\n\ -_080BA510: .4byte 0x0000015d\n\ -_080BA514:\n\ - ldrh r1, [r5, 0xA]\n\ - movs r3, 0xA\n\ - ldrsh r0, [r5, r3]\n\ - cmp r0, 0\n\ - bne _080BA520\n\ - b _080BA64C\n\ -_080BA520:\n\ - ldr r4, _080BA534 @ =0x0000015d\n\ - adds r0, r1, r4\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ -_080BA528:\n\ - bl m4aSongNumStart\n\ - ldrh r0, [r5, 0xA]\n\ - strh r0, [r5, 0xE]\n\ - b _080BA64C\n\ - .align 2, 0\n\ -_080BA534: .4byte 0x0000015d\n\ -_080BA538:\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080BA570\n\ - movs r0, 0x5\n\ - bl m4aSongNumStart\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - str r5, [sp]\n\ - movs r1, 0\n\ - movs r2, 0\n\ - movs r3, 0x10\n\ - bl BeginNormalPaletteFade\n\ - ldr r1, _080BA568 @ =gTasks\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldr r1, _080BA56C @ =sub_80BA68C\n\ - str r1, [r0]\n\ - b _080BA64C\n\ - .align 2, 0\n\ -_080BA568: .4byte gTasks\n\ -_080BA56C: .4byte sub_80BA68C\n\ -_080BA570:\n\ - ldrh r1, [r2, 0x30]\n\ - movs r0, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080BA582\n\ - movs r0, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080BA59C\n\ -_080BA582:\n\ - ldr r0, _080BA598 @ =gTasks\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldrh r0, [r1, 0x8]\n\ - eors r0, r6\n\ - strh r0, [r1, 0x8]\n\ -_080BA592:\n\ - movs r0, 0x1\n\ - b _080BA64E\n\ - .align 2, 0\n\ -_080BA598: .4byte gTasks\n\ -_080BA59C:\n\ - movs r0, 0x10\n\ - ands r0, r1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, 0\n\ - beq _080BA5EA\n\ - ldr r0, _080BA5CC @ =gTasks\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - movs r2, 0x8\n\ - ldrsh r0, [r1, r2]\n\ - cmp r0, 0\n\ - beq _080BA5D6\n\ - ldrh r2, [r1, 0xC]\n\ - movs r3, 0xC\n\ - ldrsh r0, [r1, r3]\n\ - cmp r0, 0\n\ - ble _080BA5D0\n\ - subs r0, r2, 0x1\n\ - strh r0, [r1, 0xC]\n\ - b _080BA592\n\ - .align 2, 0\n\ -_080BA5CC: .4byte gTasks\n\ -_080BA5D0:\n\ - movs r0, 0xF7\n\ - strh r0, [r1, 0xC]\n\ - b _080BA592\n\ -_080BA5D6:\n\ - ldrh r2, [r1, 0xA]\n\ - movs r4, 0xA\n\ - ldrsh r0, [r1, r4]\n\ - cmp r0, 0\n\ - ble _080BA5E4\n\ - subs r0, r2, 0x1\n\ - b _080BA5E6\n\ -_080BA5E4:\n\ - movs r0, 0x75\n\ -_080BA5E6:\n\ - strh r0, [r1, 0xA]\n\ - b _080BA592\n\ -_080BA5EA:\n\ - movs r0, 0x20\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080BA630\n\ - ldr r1, _080BA614 @ =gTasks\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - adds r1, r0, r1\n\ - movs r0, 0x8\n\ - ldrsh r2, [r1, r0]\n\ - cmp r2, 0\n\ - beq _080BA61C\n\ - ldrh r2, [r1, 0xC]\n\ - movs r4, 0xC\n\ - ldrsh r0, [r1, r4]\n\ - cmp r0, 0xF6\n\ - bgt _080BA618\n\ - adds r0, r2, 0x1\n\ - strh r0, [r1, 0xC]\n\ - b _080BA592\n\ - .align 2, 0\n\ -_080BA614: .4byte gTasks\n\ -_080BA618:\n\ - strh r3, [r1, 0xC]\n\ - b _080BA592\n\ -_080BA61C:\n\ - ldrh r3, [r1, 0xA]\n\ - movs r4, 0xA\n\ - ldrsh r0, [r1, r4]\n\ - cmp r0, 0x74\n\ - bgt _080BA62C\n\ - adds r0, r3, 0x1\n\ - strh r0, [r1, 0xA]\n\ - b _080BA592\n\ -_080BA62C:\n\ - strh r2, [r1, 0xA]\n\ - b _080BA592\n\ -_080BA630:\n\ - ldrh r1, [r2, 0x2C]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - lsls r0, 16\n\ - lsrs r1, r0, 16\n\ - cmp r1, 0\n\ - beq _080BA648\n\ - ldr r0, _080BA644 @ =gUnknown_020387B0\n\ - strb r6, [r0]\n\ - b _080BA64C\n\ - .align 2, 0\n\ -_080BA644: .4byte gUnknown_020387B0\n\ -_080BA648:\n\ - ldr r0, _080BA658 @ =gUnknown_020387B0\n\ - strb r1, [r0]\n\ -_080BA64C:\n\ - movs r0, 0\n\ -_080BA64E:\n\ - add sp, 0x4\n\ - pop {r4-r6}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_080BA658: .4byte gUnknown_020387B0\n\ - .syntax divided"); -} -#endif void sub_80BA65C(u8 taskId) { - if (sub_80BA400(taskId) != FALSE) - gTasks[taskId].FUNC = sub_80BA384; + if (Task_ProcessSoundCheckMenuInput(taskId) != FALSE) + gTasks[taskId].func = sub_80BA384; } void sub_80BA68C(u8 taskId) @@ -689,7 +349,7 @@ void sub_80BA68C(u8 taskId) } } -void sub_80BA6B8(u8 windowType) +void HighlightSelectedWindow(u8 windowType) { switch (windowType) { @@ -705,7 +365,7 @@ void sub_80BA6B8(u8 windowType) } } -void sub_80BA700(u16 soundIndex, u16 x, u16 y) // PrintSoundNumber ? +void PrintSoundNumber(u16 soundIndex, u16 x, u16 y) // PrintSoundNumber ? { u8 i; u8 str[5]; @@ -727,7 +387,7 @@ void sub_80BA700(u16 soundIndex, u16 x, u16 y) // PrintSoundNumber ? } divisorValue = (soundIndex % 100) / 10; - if (divisorValue || someBool != FALSE) + if (divisorValue || someBool) str[1] = divisorValue + CHAR_0; str[2] = ((soundIndex % 100) % 10) + CHAR_0; @@ -739,7 +399,7 @@ void sub_80BA79C(const u8 *const string, u16 x, u16 y) u8 i; u8 str[11]; - for (i = 0; i < 11; i++) + for (i = 0; i <= 10; i++) str[i] = 0; // format string. str[10] = EOS; // the above for loop formats the last element of the array unnecessarily. @@ -750,9 +410,8 @@ void sub_80BA79C(const u8 *const string, u16 x, u16 y) MenuPrint(str, x, y); } -void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu +void Task_DrawDriverTestMenu(u8 taskId) // Task_DrawDriverTestMenu { - u8 bbackStr[] = _("Bぼたんで もどる"); u8 aplayStr[] = _("Aぼたんで さいせい"); u8 voiceStr[] = _("VOICE‥‥‥‥"); @@ -769,23 +428,23 @@ void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu u8 stereoStr[] = _("すてれお‥‥‥‥"); // stereo REG_DISPCNT = 0x3140; - MenuDrawTextWindow(0, 0, 0x1D, 0x13); - MenuPrint(bbackStr, 0x13, 0x4); - MenuPrint(aplayStr, 0x13, 0x2); - MenuPrint(voiceStr, 0x2, 0x1); - MenuPrint(volumeStr, 0x2, 0x3); - MenuPrint(panpotStr, 0x2, 0x5); - MenuPrint(pitchStr, 0x2, 0x7); - MenuPrint(lengthStr, 0x2, 0x9); - MenuPrint(releaseStr, 0x2, 0xB); - MenuPrint(progressStr, 0x2, 0xD); - MenuPrint(chorusStr, 0x2, 0xF); - MenuPrint(priorityStr, 0x2, 0x11); - MenuPrint(playingStr, 0x13, 0x10); - MenuPrint(reverseStr, 0x13, 0xE); - MenuPrint(stereoStr, 0x13, 0xC); - REG_WIN0H = WIN_RANGE(0, 240); - REG_WIN0V = WIN_RANGE(0, 160); + MenuDrawTextWindow(0, 0, 29, 19); + MenuPrint(bbackStr, 19, 4); + MenuPrint(aplayStr, 19, 2); + MenuPrint(voiceStr, 2, 1); + MenuPrint(volumeStr, 2, 3); + MenuPrint(panpotStr, 2, 5); + MenuPrint(pitchStr, 2, 7); + MenuPrint(lengthStr, 2, 9); + MenuPrint(releaseStr, 2, 11); + MenuPrint(progressStr, 2, 13); + MenuPrint(chorusStr, 2, 15); + MenuPrint(priorityStr, 2, 17); + MenuPrint(playingStr, 19, 16); + MenuPrint(reverseStr, 19, 14); + MenuPrint(stereoStr, 19, 12); + REG_WIN0H = WIN_RANGE(0, DISPLAY_WIDTH); + REG_WIN0V = WIN_RANGE(0, DISPLAY_HEIGHT); gUnknown_020387B3 = 0; gUnknown_020387B1 = 0; gUnknown_020387B2 = 0; @@ -803,7 +462,7 @@ void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu gUnknown_020387B4[CRY_TEST_PRIORITY] = 2; sub_80BAD5C(); sub_80BAE10(0, 0); - gTasks[taskId].FUNC = sub_80BAA48; + gTasks[taskId].func = sub_80BAA48; } @@ -815,8 +474,8 @@ void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput REG_DISPCNT = 0x7140; REG_WIN0H = WIN_RANGE(17, 223); REG_WIN0V = WIN_RANGE(1, 31); - MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - gTasks[taskId].FUNC = sub_80BA258; + MenuZeroFillWindowRect(0, 0, 29, 19); + gTasks[taskId].func = Task_InitSoundCheckMenu; return; } if (gMain.newAndRepeatedKeys & DPAD_UP) // _080BAAA8 @@ -957,18 +616,18 @@ void sub_80BACDC(s8 var) void sub_80BAD5C(void) { - sub_80BAE78(gUnknown_020387B4[CRY_TEST_UNK0] + 1, 0xB, 0x1, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_VOLUME], 0xB, 0x3, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_PANPOT], 0xB, 0x5, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_PITCH], 0xB, 0x7, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_LENGTH], 0xB, 0x9, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_RELEASE], 0xB, 0xB, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_PROGRESS], 0xB, 0xD, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_CHORUS], 0xB, 0xF, 0x5); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_PRIORITY], 0xB, 0x11, 0x5); - sub_80BAE78(gUnknown_020387B1, 0x1B, 0x10, 0x1); - sub_80BAE78(gUnknown_020387D8, 0x1B, 0xE, 0x1); - sub_80BAE78(gUnknown_020387D9, 0x1B, 0xC, 0x1); + PrintSignedNumber(gUnknown_020387B4[CRY_TEST_UNK0] + 1, 11, 1, 5); + PrintSignedNumber(gUnknown_020387B4[CRY_TEST_VOLUME], 11, 3, 5); + PrintSignedNumber(gUnknown_020387B4[CRY_TEST_PANPOT], 11, 5, 5); + PrintSignedNumber(gUnknown_020387B4[CRY_TEST_PITCH], 11, 7, 5); + PrintSignedNumber(gUnknown_020387B4[CRY_TEST_LENGTH], 11, 9, 5); + PrintSignedNumber(gUnknown_020387B4[CRY_TEST_RELEASE], 11, 11, 5); + PrintSignedNumber(gUnknown_020387B4[CRY_TEST_PROGRESS], 11, 13, 5); + PrintSignedNumber(gUnknown_020387B4[CRY_TEST_CHORUS], 11, 15, 5); + PrintSignedNumber(gUnknown_020387B4[CRY_TEST_PRIORITY], 11, 17, 5); + PrintSignedNumber(gUnknown_020387B1, 27, 16, 1); + PrintSignedNumber(gUnknown_020387D8, 27, 14, 1); + PrintSignedNumber(gUnknown_020387D9, 27, 12, 1); } void sub_80BAE10(u8 var1, u8 var2) @@ -980,7 +639,7 @@ void sub_80BAE10(u8 var1, u8 var2) MenuPrint(str1, gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 1)]); } -void sub_80BAE78(int n, u16 x, u16 y, u8 digits) +void PrintSignedNumber(int n, u16 x, u16 y, u8 digits) { int powersOfTen[6] = { @@ -1038,19 +697,19 @@ void sub_80BAF84(u8 taskId) u8 playingStr[] = _("さいせいちゆう‥"); REG_DISPCNT = 0x3140; - MenuDrawTextWindow(0, 0, 0x1D, 0x13); + MenuDrawTextWindow(0, 0, 29, 19); MenuPrint(seStr, 3, 2); MenuPrint(panStr, 3, 4); MenuPrint(playingStr, 3, 8); - REG_WIN0H = WIN_RANGE(0, 240); - REG_WIN0V = WIN_RANGE(0, 160); + REG_WIN0H = WIN_RANGE(0, DISPLAY_WIDTH); + REG_WIN0V = WIN_RANGE(0, DISPLAY_HEIGHT); gUnknown_020387B4[CRY_TEST_UNK0] = 1; gUnknown_020387B4[CRY_TEST_PANPOT] = 0; gUnknown_020387B4[CRY_TEST_CHORUS] = 0; gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; gUnknown_020387B4[CRY_TEST_RELEASE] = 0; sub_80BB1D4(); - gTasks[taskId].FUNC = sub_80BB038; + gTasks[taskId].func = sub_80BB038; } void sub_80BB038(u8 taskId) @@ -1067,17 +726,17 @@ void sub_80BB038(u8 taskId) s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]; if (panpot != -128) { - if (panpot == 0x7F) + if (panpot == 127) { gUnknown_020387B4[CRY_TEST_CHORUS] += 2; - if (gUnknown_020387B4[CRY_TEST_CHORUS] < 0x3F) + if (gUnknown_020387B4[CRY_TEST_CHORUS] < 63) SE12PanpotControl(gUnknown_020387B4[CRY_TEST_CHORUS]); } } else // _080BB08C { gUnknown_020387B4[CRY_TEST_CHORUS] -= 2; - if (gUnknown_020387B4[CRY_TEST_CHORUS] > -0x40) + if (gUnknown_020387B4[CRY_TEST_CHORUS] > -64) SE12PanpotControl(gUnknown_020387B4[CRY_TEST_CHORUS]); } } @@ -1088,8 +747,8 @@ void sub_80BB038(u8 taskId) REG_DISPCNT = 0x7140; REG_WIN0H = WIN_RANGE(17, 223); REG_WIN0V = WIN_RANGE(1, 31); - MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - gTasks[taskId].FUNC = sub_80BA258; + MenuZeroFillWindowRect(0, 0, 29, 19); + gTasks[taskId].func = Task_InitSoundCheckMenu; return; } if (gMain.newKeys & A_BUTTON) // _080BB104 @@ -1097,21 +756,21 @@ void sub_80BB038(u8 taskId) s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]; if (panpot != -128) { - if (panpot == 0x7F) + if (panpot == 127) { - PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], -0x40); - gUnknown_020387B4[CRY_TEST_CHORUS] = -0x40; + PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], -64); + gUnknown_020387B4[CRY_TEST_CHORUS] = -64; gUnknown_020387B4[CRY_TEST_PROGRESS] = 1; - gUnknown_020387B4[CRY_TEST_RELEASE] = 0x1E; + gUnknown_020387B4[CRY_TEST_RELEASE] = 30; return; } } else // _080BB140 { - PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], 0x3F); - gUnknown_020387B4[CRY_TEST_CHORUS] = 0x3F; + PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], 63); + gUnknown_020387B4[CRY_TEST_CHORUS] = 63; gUnknown_020387B4[CRY_TEST_PROGRESS] = 1; - gUnknown_020387B4[CRY_TEST_RELEASE] = 0x1E; + gUnknown_020387B4[CRY_TEST_RELEASE] = 30; return; } // _080BB154 @@ -1150,7 +809,7 @@ void sub_80BB1D4(void) u8 lrStr[] = _(" LR"); u8 rlStr[] = _(" RL"); - sub_80BAE78(gUnknown_020387B4[CRY_TEST_UNK0], 7, 2, 3); + PrintSignedNumber(gUnknown_020387B4[CRY_TEST_UNK0], 7, 2, 3); switch (gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]) { @@ -1161,10 +820,10 @@ void sub_80BB1D4(void) MenuPrint(rlStr, 7, 4); break; default: - sub_80BAE78(gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]], 7, 4, 3); + PrintSignedNumber(gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]], 7, 4, 3); break; } - sub_80BAE78(IsSEPlaying(), 12, 8, 1); + PrintSignedNumber(IsSEPlaying(), 12, 8, 1); } #define SOUND_LIST_BGM \ @@ -1581,7 +1240,8 @@ void sub_80BB25C(u8 taskId) zero = 0; // wtf? gUnknown_03005E98 = 0; - while (sub_8119E3C(&cryStruct, 3) == FALSE); + while (sub_8119E3C(&cryStruct, 3) == FALSE) + ; cryStruct2.unk0 = 0; cryStruct2.unk2 = 15; @@ -1592,7 +1252,8 @@ void sub_80BB25C(u8 taskId) zero = 0; // wtf? gUnknown_03005E98 = 0; - while (ShowPokedexCryScreen(&cryStruct2, 2) == FALSE); + while (ShowPokedexCryScreen(&cryStruct2, 2) == FALSE) + ; MenuDrawTextWindow(0, 16, 5, 19); sub_80BB494(); @@ -1603,7 +1264,7 @@ void sub_80BB25C(u8 taskId) REG_BG3CNT = 0x1D03; REG_DISPCNT = 0x1d40; m4aMPlayFadeOutTemporarily(&gMPlay_BGM, 2); - gTasks[taskId].FUNC = sub_80BB3B4; + gTasks[taskId].func = sub_80BB3B4; } void sub_80BB3B4(u8 taskId) @@ -1635,13 +1296,13 @@ void sub_80BB3B4(u8 taskId) REG_DISPCNT = 0x7140; REG_WIN0H = WIN_RANGE(17, 223); REG_WIN0V = WIN_RANGE(1, 31); - MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - gTasks[taskId].FUNC = sub_80BA258; + MenuZeroFillWindowRect(0, 0, 29, 19); + gTasks[taskId].func = Task_InitSoundCheckMenu; DestroyCryMeterNeedleSprite(); } } void sub_80BB494(void) { - sub_80BAE78(gUnknown_03005D34, 1, 17, 3); + PrintSignedNumber(gUnknown_03005D34, 1, 17, 3); } -- cgit v1.2.3 From 30bc88f6572c435ff49b62f16c3734c12f75f7f0 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 30 Sep 2017 23:57:37 -0500 Subject: more labeling --- common_syms/sound_check_menu.txt | 1 + src/sound_check_menu.c | 304 +++++++++++++++++++-------------------- sym_common.txt | 5 - 3 files changed, 149 insertions(+), 161 deletions(-) diff --git a/common_syms/sound_check_menu.txt b/common_syms/sound_check_menu.txt index ba350ad8e..e9e3032e6 100644 --- a/common_syms/sound_check_menu.txt +++ b/common_syms/sound_check_menu.txt @@ -1 +1,2 @@ gUnknown_03005D30 +gSoundTestCryNum diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index e8f98838c..14261b75e 100644 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -15,10 +15,6 @@ #define tWindowSelected data[0] #define tBgmIndex data[1] #define tSeIndex data[2] -#define UNK_DATA3 data[3] -#define UNK_DATA4 data[4] -// data 5-7 are not used -// i dont have a define for data 8 yet because its used in a nonmatching and I can't be sure yet its actually used. // window selections enum @@ -30,7 +26,7 @@ enum // driver test cry enums enum { - CRY_TEST_UNK0, + CRY_TEST_VOICE, CRY_TEST_VOLUME, CRY_TEST_PANPOT, CRY_TEST_PITCH, @@ -60,12 +56,12 @@ extern struct ToneData voicegroup_8453790[]; static EWRAM_DATA u8 gUnknown_020387B0 = 0; static EWRAM_DATA u8 gUnknown_020387B1 = 0; static EWRAM_DATA u8 gUnknown_020387B2 = 0; -static EWRAM_DATA s8 gUnknown_020387B3 = 0; -static EWRAM_DATA int gUnknown_020387B4[9] = {0}; +static EWRAM_DATA s8 sDriverTestSelection = 0; +static EWRAM_DATA int sSoundTestParams[9] = {0}; static EWRAM_DATA u8 gUnknown_020387D8 = 0; static EWRAM_DATA u8 gUnknown_020387D9 = 0; -extern u16 gUnknown_03005D34; +u16 gSoundTestCryNum; extern u8 gUnknown_03005E98; struct MusicPlayerInfo *gUnknown_03005D30; @@ -80,17 +76,17 @@ void HighlightSelectedWindow(u8); void PrintSoundNumber(u16, u16, u16); void sub_80BA79C(const u8 *const, u16, u16); void Task_DrawDriverTestMenu(u8); -void sub_80BAA48(u8); -void sub_80BACDC(s8); -void sub_80BAD5C(void); +void Task_ProcessDriverTestInput(u8); +void AdjustSelectedDriverParam(s8); +void PrintDriverTestMenuText(void); void sub_80BAE10(u8, u8); void PrintSignedNumber(int, u16, u16, u8); void sub_80BAF84(u8); void sub_80BB038(u8); void sub_80BB1D4(void); -void sub_80BB25C(u8); -void sub_80BB3B4(u8); -void sub_80BB494(void); +void Task_InitCryTest(u8); +void Task_ProcessCryTestInput(u8); +void PrintCryNumber(void); void CB2_SoundCheckMenu(void) { @@ -158,9 +154,9 @@ void CB2_StartSoundCheckMenu(void) gTasks[taskId].tWindowSelected = BGM_WINDOW; gTasks[taskId].tBgmIndex = 0; gTasks[taskId].tSeIndex = 0; - gTasks[taskId].UNK_DATA3 = 0; + gTasks[taskId].data[3] = 0; gUnknown_020387B0 = 0; - gTasks[taskId].UNK_DATA3 = 0; // why? + gTasks[taskId].data[3] = 0; // why? m4aSoundInit(); } @@ -219,7 +215,7 @@ bool8 Task_ProcessSoundCheckMenuInput(u8 taskId) } else if (gMain.newKeys & START_BUTTON) { - gTasks[taskId].func = sub_80BB25C; + gTasks[taskId].func = Task_InitCryTest; } else if (gMain.newKeys & A_BUTTON) { @@ -227,11 +223,11 @@ bool8 Task_ProcessSoundCheckMenuInput(u8 taskId) { if (gTasks[taskId].data[4] != 0) { - if (gTasks[taskId].data[2] != 0) + if (gTasks[taskId].tSeIndex != 0) { m4aSongNumStop(gTasks[taskId].data[4]); - m4aSongNumStart(gTasks[taskId].data[2]); - gTasks[taskId].data[4] = gTasks[taskId].data[2]; + m4aSongNumStart(gTasks[taskId].tSeIndex); + gTasks[taskId].data[4] = gTasks[taskId].tSeIndex; } else { @@ -239,13 +235,10 @@ bool8 Task_ProcessSoundCheckMenuInput(u8 taskId) gTasks[taskId].data[4] = 0; } } - else + else if (gTasks[taskId].tSeIndex != 0) { - if (gTasks[taskId].data[2] != 0) - { - m4aSongNumStart(gTasks[taskId].data[2]); - gTasks[taskId].data[4] = gTasks[taskId].data[2]; - } + m4aSongNumStart(gTasks[taskId].tSeIndex); + gTasks[taskId].data[4] = gTasks[taskId].tSeIndex; } } else @@ -294,14 +287,14 @@ bool8 Task_ProcessSoundCheckMenuInput(u8 taskId) if (gTasks[taskId].tSeIndex > 0) gTasks[taskId].tSeIndex--; else - gTasks[taskId].tSeIndex = 0xF7; + gTasks[taskId].tSeIndex = 247; } else { if (gTasks[taskId].tBgmIndex > 0) gTasks[taskId].tBgmIndex--; else - gTasks[taskId].tBgmIndex = 0x75; + gTasks[taskId].tBgmIndex = 117; } return TRUE; } @@ -309,14 +302,14 @@ bool8 Task_ProcessSoundCheckMenuInput(u8 taskId) { if (gTasks[taskId].tWindowSelected != 0) { - if (gTasks[taskId].tSeIndex < 0xF7) + if (gTasks[taskId].tSeIndex < 247) gTasks[taskId].tSeIndex++; else gTasks[taskId].tSeIndex = 0; } else { - if (gTasks[taskId].tBgmIndex < 0x75) + if (gTasks[taskId].tBgmIndex < 117) gTasks[taskId].tBgmIndex++; else gTasks[taskId].tBgmIndex = 0; @@ -445,29 +438,27 @@ void Task_DrawDriverTestMenu(u8 taskId) // Task_DrawDriverTestMenu MenuPrint(stereoStr, 19, 12); REG_WIN0H = WIN_RANGE(0, DISPLAY_WIDTH); REG_WIN0V = WIN_RANGE(0, DISPLAY_HEIGHT); - gUnknown_020387B3 = 0; + sDriverTestSelection = 0; gUnknown_020387B1 = 0; gUnknown_020387B2 = 0; gUnknown_03005D30 = NULL; gUnknown_020387D8 = 0; gUnknown_020387D9 = 1; - gUnknown_020387B4[CRY_TEST_UNK0] = 0; - gUnknown_020387B4[CRY_TEST_VOLUME] = 0x78; - gUnknown_020387B4[CRY_TEST_PANPOT] = 0; - gUnknown_020387B4[CRY_TEST_PITCH] = 0x3C00; - gUnknown_020387B4[CRY_TEST_LENGTH] = 0xB4; - gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; - gUnknown_020387B4[CRY_TEST_RELEASE] = 0; - gUnknown_020387B4[CRY_TEST_CHORUS] = 0; - gUnknown_020387B4[CRY_TEST_PRIORITY] = 2; - sub_80BAD5C(); + sSoundTestParams[CRY_TEST_VOICE] = 0; + sSoundTestParams[CRY_TEST_VOLUME] = 120; + sSoundTestParams[CRY_TEST_PANPOT] = 0; + sSoundTestParams[CRY_TEST_PITCH] = 15360; + sSoundTestParams[CRY_TEST_LENGTH] = 180; + sSoundTestParams[CRY_TEST_PROGRESS] = 0; + sSoundTestParams[CRY_TEST_RELEASE] = 0; + sSoundTestParams[CRY_TEST_CHORUS] = 0; + sSoundTestParams[CRY_TEST_PRIORITY] = 2; + PrintDriverTestMenuText(); sub_80BAE10(0, 0); - gTasks[taskId].func = sub_80BAA48; + gTasks[taskId].func = Task_ProcessDriverTestInput; } - - -void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput +void Task_ProcessDriverTestInput(u8 taskId) { if (gMain.newKeys & B_BUTTON) { @@ -480,74 +471,74 @@ void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput } if (gMain.newAndRepeatedKeys & DPAD_UP) // _080BAAA8 { - u8 backupVar = gUnknown_020387B3; - if(--gUnknown_020387B3 < 0) - gUnknown_020387B3 = 8; + u8 old = sDriverTestSelection; - sub_80BAE10(backupVar, gUnknown_020387B3); + if(--sDriverTestSelection < 0) + sDriverTestSelection = 8; + sub_80BAE10(old, sDriverTestSelection); return; } if (gMain.newAndRepeatedKeys & DPAD_DOWN) // _080BAAD0 { - u8 backupVar = gUnknown_020387B3; - if(++gUnknown_020387B3 > 8) - gUnknown_020387B3 = 0; + u8 old = sDriverTestSelection; - sub_80BAE10(backupVar, gUnknown_020387B3); + if(++sDriverTestSelection > 8) + sDriverTestSelection = 0; + sub_80BAE10(old, sDriverTestSelection); return; } if (gMain.newKeys & START_BUTTON) // _080BAAF8 { gUnknown_020387D8 ^= 1; - sub_80BAD5C(); + PrintDriverTestMenuText(); return; } if (gMain.newKeys & SELECT_BUTTON) // _080BAB14 { gUnknown_020387D9 ^= 1; - sub_80BAD5C(); + PrintDriverTestMenuText(); SetPokemonCryStereo(gUnknown_020387D9); return; } if (gMain.newAndRepeatedKeys & R_BUTTON) // _080BAB38 { - sub_80BACDC(10); - sub_80BAD5C(); + AdjustSelectedDriverParam(10); + PrintDriverTestMenuText(); return; } if (gMain.newAndRepeatedKeys & L_BUTTON) // _080BAB46 { - sub_80BACDC(-10); - sub_80BAD5C(); + AdjustSelectedDriverParam(-10); + PrintDriverTestMenuText(); return; } if (gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BAB56 { - sub_80BACDC(-1); - sub_80BAD5C(); + AdjustSelectedDriverParam(-1); + PrintDriverTestMenuText(); return; } if (gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BAB64 { - sub_80BACDC(1); - sub_80BAD5C(); + AdjustSelectedDriverParam(1); + PrintDriverTestMenuText(); return; } if (gMain.newKeys & A_BUTTON) // _080BAB78 { u8 divide, remaining; - SetPokemonCryVolume(gUnknown_020387B4[CRY_TEST_VOLUME]); - SetPokemonCryPanpot(gUnknown_020387B4[CRY_TEST_PANPOT]); - SetPokemonCryPitch(gUnknown_020387B4[CRY_TEST_PITCH]); - SetPokemonCryLength(gUnknown_020387B4[CRY_TEST_LENGTH]); - SetPokemonCryProgress(gUnknown_020387B4[CRY_TEST_PROGRESS]); - SetPokemonCryRelease(gUnknown_020387B4[CRY_TEST_RELEASE]); - SetPokemonCryChorus(gUnknown_020387B4[CRY_TEST_CHORUS]); - SetPokemonCryPriority(gUnknown_020387B4[CRY_TEST_PRIORITY]); + SetPokemonCryVolume(sSoundTestParams[CRY_TEST_VOLUME]); + SetPokemonCryPanpot(sSoundTestParams[CRY_TEST_PANPOT]); + SetPokemonCryPitch(sSoundTestParams[CRY_TEST_PITCH]); + SetPokemonCryLength(sSoundTestParams[CRY_TEST_LENGTH]); + SetPokemonCryProgress(sSoundTestParams[CRY_TEST_PROGRESS]); + SetPokemonCryRelease(sSoundTestParams[CRY_TEST_RELEASE]); + SetPokemonCryChorus(sSoundTestParams[CRY_TEST_CHORUS]); + SetPokemonCryPriority(sSoundTestParams[CRY_TEST_PRIORITY]); - remaining = gUnknown_020387B4[CRY_TEST_UNK0] % 128; - divide = gUnknown_020387B4[CRY_TEST_UNK0] / 128; + remaining = sSoundTestParams[CRY_TEST_VOICE] % 128; + divide = sSoundTestParams[CRY_TEST_VOICE] / 128; switch (divide) { @@ -584,47 +575,48 @@ void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput gUnknown_020387B1 = IsPokemonCryPlaying(gUnknown_03005D30); if (gUnknown_020387B1 != gUnknown_020387B2) - sub_80BAD5C(); + PrintDriverTestMenuText(); gUnknown_020387B2 = gUnknown_020387B1; } } -void sub_80BACDC(s8 var) +void AdjustSelectedDriverParam(s8 delta) { // also ideally should be a MinMax struct, but any attempt to make this into a struct causes it to not match due to the weird multi dim access. - int minMaxArray[16] = + int paramRanges[] = { - 0, 387, - 0, 127, - -127, 127, - -128, 32639, - 0, 65535, - 0, 255, - 0, 65535, - -64, 63 + 0, 387, // Voice + 0, 127, // Volume + -127, 127, // Panpot + -128, 32639, // Pitch + 0, 65535, // Length + 0, 255, // Release + 0, 65535, // Progress + -64, 63 // Chorus + // Priority??? Why is it missing? }; - gUnknown_020387B4[gUnknown_020387B3] += var; + sSoundTestParams[sDriverTestSelection] += delta; - if (gUnknown_020387B4[gUnknown_020387B3] > minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)]) - gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MIN)]; + if (sSoundTestParams[sDriverTestSelection] > paramRanges[MULTI_DIM_ARR(sDriverTestSelection, B_16, MAX)]) + sSoundTestParams[sDriverTestSelection] = paramRanges[MULTI_DIM_ARR(sDriverTestSelection, B_16, MIN)]; - if (gUnknown_020387B4[gUnknown_020387B3] < minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MIN)]) - gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)]; + if (sSoundTestParams[sDriverTestSelection] < paramRanges[MULTI_DIM_ARR(sDriverTestSelection, B_16, MIN)]) + sSoundTestParams[sDriverTestSelection] = paramRanges[MULTI_DIM_ARR(sDriverTestSelection, B_16, MAX)]; } -void sub_80BAD5C(void) +void PrintDriverTestMenuText(void) { - PrintSignedNumber(gUnknown_020387B4[CRY_TEST_UNK0] + 1, 11, 1, 5); - PrintSignedNumber(gUnknown_020387B4[CRY_TEST_VOLUME], 11, 3, 5); - PrintSignedNumber(gUnknown_020387B4[CRY_TEST_PANPOT], 11, 5, 5); - PrintSignedNumber(gUnknown_020387B4[CRY_TEST_PITCH], 11, 7, 5); - PrintSignedNumber(gUnknown_020387B4[CRY_TEST_LENGTH], 11, 9, 5); - PrintSignedNumber(gUnknown_020387B4[CRY_TEST_RELEASE], 11, 11, 5); - PrintSignedNumber(gUnknown_020387B4[CRY_TEST_PROGRESS], 11, 13, 5); - PrintSignedNumber(gUnknown_020387B4[CRY_TEST_CHORUS], 11, 15, 5); - PrintSignedNumber(gUnknown_020387B4[CRY_TEST_PRIORITY], 11, 17, 5); + PrintSignedNumber(sSoundTestParams[CRY_TEST_VOICE] + 1, 11, 1, 5); + PrintSignedNumber(sSoundTestParams[CRY_TEST_VOLUME], 11, 3, 5); + PrintSignedNumber(sSoundTestParams[CRY_TEST_PANPOT], 11, 5, 5); + PrintSignedNumber(sSoundTestParams[CRY_TEST_PITCH], 11, 7, 5); + PrintSignedNumber(sSoundTestParams[CRY_TEST_LENGTH], 11, 9, 5); + PrintSignedNumber(sSoundTestParams[CRY_TEST_RELEASE], 11, 11, 5); + PrintSignedNumber(sSoundTestParams[CRY_TEST_PROGRESS], 11, 13, 5); + PrintSignedNumber(sSoundTestParams[CRY_TEST_CHORUS], 11, 15, 5); + PrintSignedNumber(sSoundTestParams[CRY_TEST_PRIORITY], 11, 17, 5); PrintSignedNumber(gUnknown_020387B1, 27, 16, 1); PrintSignedNumber(gUnknown_020387D8, 27, 14, 1); PrintSignedNumber(gUnknown_020387D9, 27, 12, 1); @@ -703,11 +695,11 @@ void sub_80BAF84(u8 taskId) MenuPrint(playingStr, 3, 8); REG_WIN0H = WIN_RANGE(0, DISPLAY_WIDTH); REG_WIN0V = WIN_RANGE(0, DISPLAY_HEIGHT); - gUnknown_020387B4[CRY_TEST_UNK0] = 1; - gUnknown_020387B4[CRY_TEST_PANPOT] = 0; - gUnknown_020387B4[CRY_TEST_CHORUS] = 0; - gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; - gUnknown_020387B4[CRY_TEST_RELEASE] = 0; + sSoundTestParams[CRY_TEST_VOICE] = 1; + sSoundTestParams[CRY_TEST_PANPOT] = 0; + sSoundTestParams[CRY_TEST_CHORUS] = 0; + sSoundTestParams[CRY_TEST_PROGRESS] = 0; + sSoundTestParams[CRY_TEST_RELEASE] = 0; sub_80BB1D4(); gTasks[taskId].func = sub_80BB038; } @@ -715,29 +707,29 @@ void sub_80BAF84(u8 taskId) void sub_80BB038(u8 taskId) { sub_80BB1D4(); - if (gUnknown_020387B4[CRY_TEST_PROGRESS]) + if (sSoundTestParams[CRY_TEST_PROGRESS]) { - if (gUnknown_020387B4[CRY_TEST_RELEASE]) + if (sSoundTestParams[CRY_TEST_RELEASE]) { - gUnknown_020387B4[CRY_TEST_RELEASE]--; + sSoundTestParams[CRY_TEST_RELEASE]--; } else // _080BB05C { - s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]; + s8 panpot = gUnknown_083D03F8[sSoundTestParams[CRY_TEST_PANPOT]]; if (panpot != -128) { if (panpot == 127) { - gUnknown_020387B4[CRY_TEST_CHORUS] += 2; - if (gUnknown_020387B4[CRY_TEST_CHORUS] < 63) - SE12PanpotControl(gUnknown_020387B4[CRY_TEST_CHORUS]); + sSoundTestParams[CRY_TEST_CHORUS] += 2; + if (sSoundTestParams[CRY_TEST_CHORUS] < 63) + SE12PanpotControl(sSoundTestParams[CRY_TEST_CHORUS]); } } else // _080BB08C { - gUnknown_020387B4[CRY_TEST_CHORUS] -= 2; - if (gUnknown_020387B4[CRY_TEST_CHORUS] > -64) - SE12PanpotControl(gUnknown_020387B4[CRY_TEST_CHORUS]); + sSoundTestParams[CRY_TEST_CHORUS] -= 2; + if (sSoundTestParams[CRY_TEST_CHORUS] > -64) + SE12PanpotControl(sSoundTestParams[CRY_TEST_CHORUS]); } } } @@ -753,54 +745,54 @@ void sub_80BB038(u8 taskId) } if (gMain.newKeys & A_BUTTON) // _080BB104 { - s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]; + s8 panpot = gUnknown_083D03F8[sSoundTestParams[CRY_TEST_PANPOT]]; if (panpot != -128) { if (panpot == 127) { - PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], -64); - gUnknown_020387B4[CRY_TEST_CHORUS] = -64; - gUnknown_020387B4[CRY_TEST_PROGRESS] = 1; - gUnknown_020387B4[CRY_TEST_RELEASE] = 30; + PlaySE12WithPanning(sSoundTestParams[CRY_TEST_VOICE], -64); + sSoundTestParams[CRY_TEST_CHORUS] = -64; + sSoundTestParams[CRY_TEST_PROGRESS] = 1; + sSoundTestParams[CRY_TEST_RELEASE] = 30; return; } } else // _080BB140 { - PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], 63); - gUnknown_020387B4[CRY_TEST_CHORUS] = 63; - gUnknown_020387B4[CRY_TEST_PROGRESS] = 1; - gUnknown_020387B4[CRY_TEST_RELEASE] = 30; + PlaySE12WithPanning(sSoundTestParams[CRY_TEST_VOICE], 63); + sSoundTestParams[CRY_TEST_CHORUS] = 63; + sSoundTestParams[CRY_TEST_PROGRESS] = 1; + sSoundTestParams[CRY_TEST_RELEASE] = 30; return; } // _080BB154 - PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], panpot); - gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; + PlaySE12WithPanning(sSoundTestParams[CRY_TEST_VOICE], panpot); + sSoundTestParams[CRY_TEST_PROGRESS] = 0; return; } if (gMain.newKeys & L_BUTTON) // _080BB15E { - gUnknown_020387B4[CRY_TEST_PANPOT]++; - if (gUnknown_020387B4[CRY_TEST_PANPOT] > 4) - gUnknown_020387B4[CRY_TEST_PANPOT] = 0; + sSoundTestParams[CRY_TEST_PANPOT]++; + if (sSoundTestParams[CRY_TEST_PANPOT] > 4) + sSoundTestParams[CRY_TEST_PANPOT] = 0; } if (gMain.newKeys & R_BUTTON) // _080BB176 { - gUnknown_020387B4[CRY_TEST_PANPOT]--; - if (gUnknown_020387B4[CRY_TEST_PANPOT] < 0) - gUnknown_020387B4[CRY_TEST_PANPOT] = 4; + sSoundTestParams[CRY_TEST_PANPOT]--; + if (sSoundTestParams[CRY_TEST_PANPOT] < 0) + sSoundTestParams[CRY_TEST_PANPOT] = 4; } if (gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BB192 { - gUnknown_020387B4[CRY_TEST_UNK0]++; - if (gUnknown_020387B4[CRY_TEST_UNK0] > 0xF7) - gUnknown_020387B4[CRY_TEST_UNK0] = 0; + sSoundTestParams[CRY_TEST_VOICE]++; + if (sSoundTestParams[CRY_TEST_VOICE] > 247) + sSoundTestParams[CRY_TEST_VOICE] = 0; } else if (gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BB1B0 { - gUnknown_020387B4[CRY_TEST_UNK0]--; - if (gUnknown_020387B4[CRY_TEST_UNK0] < 0) - gUnknown_020387B4[CRY_TEST_UNK0] = 0xF7; + sSoundTestParams[CRY_TEST_VOICE]--; + if (sSoundTestParams[CRY_TEST_VOICE] < 0) + sSoundTestParams[CRY_TEST_VOICE] = 247; } } @@ -809,18 +801,18 @@ void sub_80BB1D4(void) u8 lrStr[] = _(" LR"); u8 rlStr[] = _(" RL"); - PrintSignedNumber(gUnknown_020387B4[CRY_TEST_UNK0], 7, 2, 3); + PrintSignedNumber(sSoundTestParams[CRY_TEST_VOICE], 7, 2, 3); - switch (gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]) + switch (gUnknown_083D03F8[sSoundTestParams[CRY_TEST_PANPOT]]) { - case 0x7F: + case 127: MenuPrint(lrStr, 7, 4); break; - case -0x80: + case -128: MenuPrint(rlStr, 7, 4); break; default: - PrintSignedNumber(gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]], 7, 4, 3); + PrintSignedNumber(gUnknown_083D03F8[sSoundTestParams[CRY_TEST_PANPOT]], 7, 4, 3); break; } PrintSignedNumber(IsSEPlaying(), 12, 8, 1); @@ -1220,14 +1212,14 @@ SOUND_LIST_SE }; #undef X -void sub_80BB25C(u8 taskId) +void Task_InitCryTest(u8 taskId) { struct CryRelatedStruct cryStruct, cryStruct2; u8 zero; SetUpWindowConfig(&gWindowConfig_81E6C3C); InitMenuWindow(&gWindowConfig_81E6CE4); - gUnknown_03005D34 = 1; + gSoundTestCryNum = 1; ResetSpriteData(); FreeAllSpritePalettes(); @@ -1256,7 +1248,7 @@ void sub_80BB25C(u8 taskId) ; MenuDrawTextWindow(0, 16, 5, 19); - sub_80BB494(); + PrintCryNumber(); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); REG_BG2HOFS = 0; REG_BG2VOFS = 0; @@ -1264,16 +1256,16 @@ void sub_80BB25C(u8 taskId) REG_BG3CNT = 0x1D03; REG_DISPCNT = 0x1d40; m4aMPlayFadeOutTemporarily(&gMPlay_BGM, 2); - gTasks[taskId].func = sub_80BB3B4; + gTasks[taskId].func = Task_ProcessCryTestInput; } -void sub_80BB3B4(u8 taskId) +void Task_ProcessCryTestInput(u8 taskId) { sub_8119F88(3); if (gMain.newKeys & A_BUTTON) { - sub_811A050(gUnknown_03005D34); + sub_811A050(gSoundTestCryNum); } if (gMain.newKeys & R_BUTTON) { @@ -1281,15 +1273,15 @@ void sub_80BB3B4(u8 taskId) } if (gMain.newAndRepeatedKeys & DPAD_UP) { - if(--gUnknown_03005D34 == 0) - gUnknown_03005D34 = 384; // total species - sub_80BB494(); + if(--gSoundTestCryNum == 0) + gSoundTestCryNum = 384; // total species + PrintCryNumber(); } if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - if(++gUnknown_03005D34 > 384) - gUnknown_03005D34 = 1; - sub_80BB494(); + if(++gSoundTestCryNum > 384) + gSoundTestCryNum = 1; + PrintCryNumber(); } if (gMain.newKeys & B_BUTTON) { @@ -1302,7 +1294,7 @@ void sub_80BB3B4(u8 taskId) } } -void sub_80BB494(void) +void PrintCryNumber(void) { - PrintSignedNumber(gUnknown_03005D34, 1, 17, 3); + PrintSignedNumber(gSoundTestCryNum, 1, 17, 3); } diff --git a/sym_common.txt b/sym_common.txt index d9da3ec3b..1bb009174 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -189,11 +189,6 @@ gUnknown_03005D28: @ 3005D28 .include "record_mixing.o" .include "sound_check_menu.o" - - .align 2 -gUnknown_03005D34: @ 3005D34 - .space 0x4 - .include "tv.o" .space 0x64 @ unused variable? -- cgit v1.2.3 From 6ca1e8747d0278eb5a8e5d7f5ec74801a3e1aded Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 1 Oct 2017 11:51:50 -0500 Subject: fix more command names --- asm/macros/event.inc | 24 +-- data-de/event_scripts.s | 204 ++++++++++----------- data-de/field_move_scripts.inc | 14 +- data/event_scripts.s | 204 ++++++++++----------- data/field_move_scripts.inc | 14 +- data/script_cmd_table.inc | 24 +-- data/scripts/berry_tree.inc | 8 +- data/scripts/cable_club.inc | 2 +- data/scripts/contest_hall.inc | 10 +- data/scripts/maps/AncientTomb.inc | 4 +- data/scripts/maps/BattleTower_Lobby.inc | 2 +- data/scripts/maps/DesertRuins.inc | 4 +- data/scripts/maps/FortreeCity_House1.inc | 4 +- data/scripts/maps/IslandCave.inc | 4 +- data/scripts/maps/LilycoveCity_ContestLobby.inc | 2 +- .../maps/LilycoveCity_DepartmentStoreRooftop.inc | 14 +- .../maps/LilycoveCity_DepartmentStore_1F.inc | 2 +- .../maps/LittlerootTown_ProfessorBirchsLab.inc | 2 +- data/scripts/maps/MauvilleCity_GameCorner.inc | 52 +++--- data/scripts/maps/MossdeepCity_House1.inc | 2 +- data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc | 2 +- data/scripts/maps/MossdeepCity_StevensHouse.inc | 2 +- data/scripts/maps/PacifidlogTown_House2.inc | 2 +- data/scripts/maps/PacifidlogTown_House3.inc | 4 +- data/scripts/maps/Route113_GlassWorkshop.inc | 32 ++-- .../maps/Route124_DivingTreasureHuntersHouse.inc | 4 +- data/scripts/maps/RustboroCity_DevonCorp_2F.inc | 8 +- data/scripts/maps/RustboroCity_House1.inc | 2 +- data/scripts/maps/SealedChamber_InnerRoom.inc | 14 +- data/scripts/maps/SealedChamber_OuterRoom.inc | 24 +-- data/scripts/maps/SlateportCity.inc | 2 +- data/scripts/maps/SlateportCity_PokemonFanClub.inc | 2 +- data/scripts/maps/SootopolisCity_House6.inc | 2 +- data/scripts/maps/Underwater_SealedChamber.inc | 2 +- src/field/scrcmd.c | 24 +-- 35 files changed, 361 insertions(+), 361 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index f7b6930fb..bad196e93 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -830,7 +830,7 @@ .endm @ Displays the string at pointer as braille text in a standard message box. The string must be formatted to use braille characters. - .macro braillemsg text + .macro braillemessage text .byte 0x78 .4byte \text .endm @@ -865,62 +865,62 @@ .endm @ Writes the name of the Pokmon at index species to the specified buffer. - .macro bufferpoke out, species + .macro getspeciesname out, species .byte 0x7d .byte \out .2byte \species .endm @ Writes the name of the first Pokmon in the player's party to the specified buffer. - .macro bufferfirstpoke out + .macro getfirstpartypokename out .byte 0x7e .byte \out .endm @ Writes the name of the Pokmon in slot slot (zero-indexed) of the player's party to the specified buffer. If an empty or invalid slot is specified, ten spaces ("") are written to the buffer. - .macro bufferpartypoke out, slot + .macro getpartypokename out, slot .byte 0x7f .byte \out .2byte \slot .endm @ Writes the name of the item at index item to the specified buffer. If the specified index is larger than the number of items in the game (0x176), the name of item 0 ("????????") is buffered instead. - .macro bufferitem out, item + .macro getitemname out, item .byte 0x80 .byte \out .2byte \item .endm @ In FireRed, this command is a nop. (The first argument is discarded immediately. The second argument is read, but not used for anything.) - .macro bufferdecor a, b + .macro getdecorname a, b .byte 0x81 .byte \a .2byte \b .endm @ Writes the name of the attack at index attack to the specified buffer. - .macro bufferattack out, attack + .macro getmovename out, attack .byte 0x82 .byte \out .2byte \attack .endm @ Converts the value of input to a decimal string, and writes that string to the specified buffer. - .macro buffernum out, input + .macro getnumberstring out, input .byte 0x83 .byte \out .2byte \input .endm @ Writes the standard string identified by index to the specified buffer. Specifying an invalid standard string (e.x. 0x2B) can and usually will cause data corruption (I've observed destruction of the stored player name and crashes when entering/exiting certain menu screens). - .macro bufferstd out, index + .macro getstdstring out, index .byte 0x84 .byte \out .2byte \index .endm @ Copies the string at offset to the specified buffer. - .macro buffertext out, offset + .macro getstring out, offset .byte 0x85 .byte \out .4byte \offset @@ -944,13 +944,13 @@ .4byte \products .endm - .macro pokecasino word + .macro playslotmachine word .byte 0x89 .2byte \word .endm @ In FireRed, this command is a nop. - .macro event_8a byte1, byte2, byte3 + .macro plantberrytree byte1, byte2, byte3 .byte 0x8a .byte \byte1, \byte2, \byte3 .endm diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index 70daa8548..3ceecaa84 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -1068,86 +1068,86 @@ Std_6:: return Event_ResetBerryTrees: @ 19F940 - event_8a 2, 7, 5 - event_8a 1, 3, 5 - event_8a 11, 7, 5 - event_8a 13, 3, 5 - event_8a 4, 7, 5 - event_8a 76, 1, 5 - event_8a 8, 1, 5 - event_8a 10, 6, 5 - event_8a 25, 20, 5 - event_8a 26, 2, 5 - event_8a 66, 2, 5 - event_8a 67, 20, 5 - event_8a 69, 22, 5 - event_8a 70, 22, 5 - event_8a 71, 22, 5 - event_8a 55, 17, 5 - event_8a 56, 17, 5 - event_8a 5, 1, 5 - event_8a 6, 6, 5 - event_8a 7, 1, 5 - event_8a 16, 18, 5 - event_8a 17, 18, 5 - event_8a 18, 18, 5 - event_8a 29, 19, 5 - event_8a 28, 19, 5 - event_8a 27, 19, 5 - event_8a 24, 4, 5 - event_8a 23, 3, 5 - event_8a 22, 3, 5 - event_8a 21, 4, 5 - event_8a 19, 16, 5 - event_8a 20, 16, 5 - event_8a 80, 7, 5 - event_8a 81, 7, 5 - event_8a 77, 8, 5 - event_8a 78, 8, 5 - event_8a 68, 8, 5 - event_8a 31, 10, 5 - event_8a 33, 10, 5 - event_8a 34, 21, 5 - event_8a 35, 21, 5 - event_8a 36, 21, 5 - event_8a 83, 24, 5 - event_8a 84, 24, 5 - event_8a 85, 10, 5 - event_8a 86, 6, 5 - event_8a 37, 5, 5 - event_8a 38, 5, 5 - event_8a 39, 5, 5 - event_8a 40, 3, 5 - event_8a 41, 3, 5 - event_8a 42, 3, 5 - event_8a 46, 19, 5 - event_8a 45, 20, 5 - event_8a 44, 18, 5 - event_8a 43, 16, 5 - event_8a 47, 8, 5 - event_8a 48, 5, 5 - event_8a 49, 4, 5 - event_8a 50, 2, 5 - event_8a 52, 18, 5 - event_8a 53, 18, 5 - event_8a 62, 6, 5 - event_8a 64, 6, 5 - event_8a 58, 21, 5 - event_8a 59, 21, 5 - event_8a 60, 25, 5 - event_8a 61, 25, 5 - event_8a 79, 23, 5 - event_8a 14, 23, 5 - event_8a 15, 21, 5 - event_8a 30, 21, 5 - event_8a 65, 25, 5 - event_8a 72, 25, 5 - event_8a 73, 23, 5 - event_8a 74, 23, 5 - event_8a 87, 3, 5 - event_8a 88, 10, 5 - event_8a 89, 4, 5 - event_8a 82, 36, 5 + plantberrytree 2, 7, 5 + plantberrytree 1, 3, 5 + plantberrytree 11, 7, 5 + plantberrytree 13, 3, 5 + plantberrytree 4, 7, 5 + plantberrytree 76, 1, 5 + plantberrytree 8, 1, 5 + plantberrytree 10, 6, 5 + plantberrytree 25, 20, 5 + plantberrytree 26, 2, 5 + plantberrytree 66, 2, 5 + plantberrytree 67, 20, 5 + plantberrytree 69, 22, 5 + plantberrytree 70, 22, 5 + plantberrytree 71, 22, 5 + plantberrytree 55, 17, 5 + plantberrytree 56, 17, 5 + plantberrytree 5, 1, 5 + plantberrytree 6, 6, 5 + plantberrytree 7, 1, 5 + plantberrytree 16, 18, 5 + plantberrytree 17, 18, 5 + plantberrytree 18, 18, 5 + plantberrytree 29, 19, 5 + plantberrytree 28, 19, 5 + plantberrytree 27, 19, 5 + plantberrytree 24, 4, 5 + plantberrytree 23, 3, 5 + plantberrytree 22, 3, 5 + plantberrytree 21, 4, 5 + plantberrytree 19, 16, 5 + plantberrytree 20, 16, 5 + plantberrytree 80, 7, 5 + plantberrytree 81, 7, 5 + plantberrytree 77, 8, 5 + plantberrytree 78, 8, 5 + plantberrytree 68, 8, 5 + plantberrytree 31, 10, 5 + plantberrytree 33, 10, 5 + plantberrytree 34, 21, 5 + plantberrytree 35, 21, 5 + plantberrytree 36, 21, 5 + plantberrytree 83, 24, 5 + plantberrytree 84, 24, 5 + plantberrytree 85, 10, 5 + plantberrytree 86, 6, 5 + plantberrytree 37, 5, 5 + plantberrytree 38, 5, 5 + plantberrytree 39, 5, 5 + plantberrytree 40, 3, 5 + plantberrytree 41, 3, 5 + plantberrytree 42, 3, 5 + plantberrytree 46, 19, 5 + plantberrytree 45, 20, 5 + plantberrytree 44, 18, 5 + plantberrytree 43, 16, 5 + plantberrytree 47, 8, 5 + plantberrytree 48, 5, 5 + plantberrytree 49, 4, 5 + plantberrytree 50, 2, 5 + plantberrytree 52, 18, 5 + plantberrytree 53, 18, 5 + plantberrytree 62, 6, 5 + plantberrytree 64, 6, 5 + plantberrytree 58, 21, 5 + plantberrytree 59, 21, 5 + plantberrytree 60, 25, 5 + plantberrytree 61, 25, 5 + plantberrytree 79, 23, 5 + plantberrytree 14, 23, 5 + plantberrytree 15, 21, 5 + plantberrytree 30, 21, 5 + plantberrytree 65, 25, 5 + plantberrytree 72, 25, 5 + plantberrytree 73, 23, 5 + plantberrytree 74, 23, 5 + plantberrytree 87, 3, 5 + plantberrytree 88, 10, 5 + plantberrytree 89, 4, 5 + plantberrytree 82, 36, 5 return gUnknown_0819FA81:: @ 819FA81 @@ -1501,7 +1501,7 @@ Std_ObtainItem: @ 819FDF7 return Std_ObtainItem_: @ 819FE07 - bufferitem 1, 0x8000 + getitemname 1, 0x8000 checkitemtype 0x8000 call GetItem_HandlePocket compare 0x8007, 0x1 @@ -1520,31 +1520,31 @@ GetItem_HandlePocket: end GetItem_HandlePocket_Items: - bufferstd 2, 0xE + getstdstring 2, 0xE compare 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_KeyItems: - bufferstd 2, 0xF + getstdstring 2, 0xF compare 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_PokeBalls: - bufferstd 2, 0x10 + getstdstring 2, 0x10 compare 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_TMsHMs: - bufferstd 2, 0x11 + getstdstring 2, 0x11 compare 0x8007, 1 call_if 1, PlayGetTMHMFanfare return GetItem_HandlePocket_Berries: - bufferstd 2, 0x12 + getstdstring 2, 0x12 compare 0x8007, 1 call_if 1, PlayGetItemFanfare return @@ -1576,7 +1576,7 @@ Std_ObtainDecoration: @ 819FEDA return Std_ObtainDecoration_: @ 819FEE8 - bufferdecor 1, 0x8000 + getdecorname 1, 0x8000 compare 0x8007, 1 call_if 1, Std_ObtainDecoration_Success compare 0x8007, 0 @@ -1602,7 +1602,7 @@ Std_FindItem: @ 819FF21 waitse additem 0x8000, 0x8001 copyvar 0x8007, RESULT - bufferitem 1, 0x8000 + getitemname 1, 0x8000 checkitemtype 0x8000 call GetItem_HandlePocket compare 0x8007, 1 @@ -1631,7 +1631,7 @@ HiddenItemScript:: @ 819FF7B waitse additem 0x8005, 1 copyvar 0x8007, RESULT - bufferitem 0x1, 0x8005 + getitemname 0x1, 0x8005 checkitemtype 0x8005 call GetItem_HandlePocket compare 0x8007, 1 @@ -1819,7 +1819,7 @@ UseSurfScript:: @ 81A0117 checkpokemove MOVE_SURF compare RESULT, 6 goto_if_eq UseSurfScript_NoMon - bufferpartypoke 0, RESULT + getpartypokename 0, RESULT setanimation 0, RESULT lockall msgbox UseSurfPromptText, 5 @@ -2214,8 +2214,8 @@ Route101_EventScript_1A03B0:: @ 81A03B0 copyvar 0x8008, 0x8005 copyvar 0x8009, 0x8006 copyvar 0x800a, RESULT - buffernum 0, 0x8008 - buffernum 1, 0x8009 + getnumberstring 0, 0x8008 + getnumberstring 1, 0x8009 msgbox Route101_Text_1C44DC, 4 call Route101_EventScript_1A03A5 compare 0x800a, 0 @@ -2224,8 +2224,8 @@ Route101_EventScript_1A03B0:: @ 81A03B0 specialvar RESULT, ScriptGetPokedexInfo copyvar 0x8008, 0x8005 copyvar 0x8009, 0x8006 - buffernum 0, 0x8008 - buffernum 1, 0x8009 + getnumberstring 0, 0x8008 + getnumberstring 1, 0x8009 msgbox Route101_Text_1C4B05, 4 return @@ -2542,7 +2542,7 @@ FallarborTown_House1_EventScript_1A067F:: @ 81A067F GraniteCave_StevensRoom_EventScript_1A067F:: @ 81A067F MtPyre_Summit_EventScript_1A067F:: @ 81A067F SlateportCity_OceanicMuseum_2F_EventScript_1A067F:: @ 81A067F - bufferitem 0, 0x8004 + getitemname 0, 0x8004 playfanfare 372 message FallarborTown_House1_Text_1A1498 waitmessage @@ -3622,7 +3622,7 @@ gUnknown_081A2C51:: @ 81A2C51 goto_if_eq EventScript_1A2E45 checkpokemove MOVE_SECRET_POWER setanimation 0, RESULT - bufferattack 1, MOVE_SECRET_POWER + getmovename 1, MOVE_SECRET_POWER compare 0x8007, 1 goto_if_eq EventScript_1A2CB0 compare 0x8007, 2 @@ -3641,7 +3641,7 @@ EventScript_1A2CB0: lockall compare RESULT, 6 goto_if_eq EventScript_1A2CF1 - bufferpartypoke 0, RESULT + getpartypokename 0, RESULT msgbox UnknownString_8198F34, 5 compare RESULT, 0 goto_if_eq EventScript_1A2F3A @@ -3672,7 +3672,7 @@ EventScript_1A2D08: lockall compare RESULT, 6 goto_if_eq EventScript_1A2D49 - bufferpartypoke 0, RESULT + getpartypokename 0, RESULT msgbox UnknownString_81A197B, 5 compare RESULT, 0 goto_if_eq EventScript_1A2F3A @@ -3703,7 +3703,7 @@ EventScript_1A2D60: lockall compare RESULT, 6 goto_if_eq EventScript_1A2DA1 - bufferpartypoke 0, RESULT + getpartypokename 0, RESULT msgbox UnknownString_81A1A4B, 5 compare RESULT, 0 goto_if_eq EventScript_1A2F3A @@ -3809,8 +3809,8 @@ EventScript_1A2E45: msgbox UnknownString_81A3CC9, 5 compare RESULT, 0 goto_if_eq EventScript_1A2F3A - bufferpartypoke 0, 0x8004 - bufferattack 1, MOVE_SECRET_POWER + getpartypokename 0, 0x8004 + getmovename 1, MOVE_SECRET_POWER msgbox UsedCutRockSmashText, 4 closemessage closemessage @@ -4949,7 +4949,7 @@ gUnknown_081C6C02:: @ 81C6C02 @ 81C6C1D lockall - braillemsg Underwater_SealedChamber_Braille_1C533D + braillemessage Underwater_SealedChamber_Braille_1C533D waitbutton erasebox 0, 0, 29, 19 releaseall diff --git a/data-de/field_move_scripts.inc b/data-de/field_move_scripts.inc index c2f933fe4..fb8decc67 100644 --- a/data-de/field_move_scripts.inc +++ b/data-de/field_move_scripts.inc @@ -6,8 +6,8 @@ S_CuttableTree:: @ 81B0DCC compare RESULT, 6 goto_if_eq CannotUseCut setanimation 0, RESULT - bufferpartypoke 0, RESULT - bufferattack 1, MOVE_CUT + getpartypokename 0, RESULT + getmovename 1, MOVE_CUT msgbox UseCutPromptText, 5 compare RESULT, 0 goto_if_eq Cut_ChoseNo @@ -67,8 +67,8 @@ S_BreakableRock:: @ 81B0EB7 compare RESULT, 6 goto_if_eq CannotUseRockSmash setanimation 0, RESULT - bufferpartypoke 0, RESULT - bufferattack 1, MOVE_ROCK_SMASH + getpartypokename 0, RESULT + getmovename 1, MOVE_ROCK_SMASH msgbox UseRockSmashPromptText, 5 compare RESULT, 0 goto_if_eq RockSmash_ChoseNo @@ -196,7 +196,7 @@ S_UseWaterfall:: @ 81B115A checkpokemove MOVE_WATERFALL compare RESULT, 6 goto_if_eq Waterfall_NoMonKnows - bufferpartypoke 0, RESULT + getpartypokename 0, RESULT setanimation 0, RESULT msgbox UseWaterfallPromptText, 5 compare RESULT, 0 @@ -229,7 +229,7 @@ UseDiveScript:: @ 81B1220 checkpokemove MOVE_DIVE compare RESULT, 6 goto_if_eq CannotUseDive - bufferpartypoke 0, RESULT + getpartypokename 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UseDivePromptText, 5 @@ -252,7 +252,7 @@ S_UseDiveUnderwater:: @ 81B1269 checkpokemove MOVE_DIVE compare RESULT, 6 goto_if_eq UnderwaterCannotUseDive - bufferpartypoke 0, RESULT + getpartypokename 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UnderwaterUseDivePromptText, 5 diff --git a/data/event_scripts.s b/data/event_scripts.s index 01120b194..fddae04a9 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1062,86 +1062,86 @@ Std_6:: return Event_ResetBerryTrees: @ 19F940 - event_8a 2, 7, 5 - event_8a 1, 3, 5 - event_8a 11, 7, 5 - event_8a 13, 3, 5 - event_8a 4, 7, 5 - event_8a 76, 1, 5 - event_8a 8, 1, 5 - event_8a 10, 6, 5 - event_8a 25, 20, 5 - event_8a 26, 2, 5 - event_8a 66, 2, 5 - event_8a 67, 20, 5 - event_8a 69, 22, 5 - event_8a 70, 22, 5 - event_8a 71, 22, 5 - event_8a 55, 17, 5 - event_8a 56, 17, 5 - event_8a 5, 1, 5 - event_8a 6, 6, 5 - event_8a 7, 1, 5 - event_8a 16, 18, 5 - event_8a 17, 18, 5 - event_8a 18, 18, 5 - event_8a 29, 19, 5 - event_8a 28, 19, 5 - event_8a 27, 19, 5 - event_8a 24, 4, 5 - event_8a 23, 3, 5 - event_8a 22, 3, 5 - event_8a 21, 4, 5 - event_8a 19, 16, 5 - event_8a 20, 16, 5 - event_8a 80, 7, 5 - event_8a 81, 7, 5 - event_8a 77, 8, 5 - event_8a 78, 8, 5 - event_8a 68, 8, 5 - event_8a 31, 10, 5 - event_8a 33, 10, 5 - event_8a 34, 21, 5 - event_8a 35, 21, 5 - event_8a 36, 21, 5 - event_8a 83, 24, 5 - event_8a 84, 24, 5 - event_8a 85, 10, 5 - event_8a 86, 6, 5 - event_8a 37, 5, 5 - event_8a 38, 5, 5 - event_8a 39, 5, 5 - event_8a 40, 3, 5 - event_8a 41, 3, 5 - event_8a 42, 3, 5 - event_8a 46, 19, 5 - event_8a 45, 20, 5 - event_8a 44, 18, 5 - event_8a 43, 16, 5 - event_8a 47, 8, 5 - event_8a 48, 5, 5 - event_8a 49, 4, 5 - event_8a 50, 2, 5 - event_8a 52, 18, 5 - event_8a 53, 18, 5 - event_8a 62, 6, 5 - event_8a 64, 6, 5 - event_8a 58, 21, 5 - event_8a 59, 21, 5 - event_8a 60, 25, 5 - event_8a 61, 25, 5 - event_8a 79, 23, 5 - event_8a 14, 23, 5 - event_8a 15, 21, 5 - event_8a 30, 21, 5 - event_8a 65, 25, 5 - event_8a 72, 25, 5 - event_8a 73, 23, 5 - event_8a 74, 23, 5 - event_8a 87, 3, 5 - event_8a 88, 10, 5 - event_8a 89, 4, 5 - event_8a 82, 36, 5 + plantberrytree 2, 7, 5 + plantberrytree 1, 3, 5 + plantberrytree 11, 7, 5 + plantberrytree 13, 3, 5 + plantberrytree 4, 7, 5 + plantberrytree 76, 1, 5 + plantberrytree 8, 1, 5 + plantberrytree 10, 6, 5 + plantberrytree 25, 20, 5 + plantberrytree 26, 2, 5 + plantberrytree 66, 2, 5 + plantberrytree 67, 20, 5 + plantberrytree 69, 22, 5 + plantberrytree 70, 22, 5 + plantberrytree 71, 22, 5 + plantberrytree 55, 17, 5 + plantberrytree 56, 17, 5 + plantberrytree 5, 1, 5 + plantberrytree 6, 6, 5 + plantberrytree 7, 1, 5 + plantberrytree 16, 18, 5 + plantberrytree 17, 18, 5 + plantberrytree 18, 18, 5 + plantberrytree 29, 19, 5 + plantberrytree 28, 19, 5 + plantberrytree 27, 19, 5 + plantberrytree 24, 4, 5 + plantberrytree 23, 3, 5 + plantberrytree 22, 3, 5 + plantberrytree 21, 4, 5 + plantberrytree 19, 16, 5 + plantberrytree 20, 16, 5 + plantberrytree 80, 7, 5 + plantberrytree 81, 7, 5 + plantberrytree 77, 8, 5 + plantberrytree 78, 8, 5 + plantberrytree 68, 8, 5 + plantberrytree 31, 10, 5 + plantberrytree 33, 10, 5 + plantberrytree 34, 21, 5 + plantberrytree 35, 21, 5 + plantberrytree 36, 21, 5 + plantberrytree 83, 24, 5 + plantberrytree 84, 24, 5 + plantberrytree 85, 10, 5 + plantberrytree 86, 6, 5 + plantberrytree 37, 5, 5 + plantberrytree 38, 5, 5 + plantberrytree 39, 5, 5 + plantberrytree 40, 3, 5 + plantberrytree 41, 3, 5 + plantberrytree 42, 3, 5 + plantberrytree 46, 19, 5 + plantberrytree 45, 20, 5 + plantberrytree 44, 18, 5 + plantberrytree 43, 16, 5 + plantberrytree 47, 8, 5 + plantberrytree 48, 5, 5 + plantberrytree 49, 4, 5 + plantberrytree 50, 2, 5 + plantberrytree 52, 18, 5 + plantberrytree 53, 18, 5 + plantberrytree 62, 6, 5 + plantberrytree 64, 6, 5 + plantberrytree 58, 21, 5 + plantberrytree 59, 21, 5 + plantberrytree 60, 25, 5 + plantberrytree 61, 25, 5 + plantberrytree 79, 23, 5 + plantberrytree 14, 23, 5 + plantberrytree 15, 21, 5 + plantberrytree 30, 21, 5 + plantberrytree 65, 25, 5 + plantberrytree 72, 25, 5 + plantberrytree 73, 23, 5 + plantberrytree 74, 23, 5 + plantberrytree 87, 3, 5 + plantberrytree 88, 10, 5 + plantberrytree 89, 4, 5 + plantberrytree 82, 36, 5 return gUnknown_0819FA81:: @ 819FA81 @@ -1495,7 +1495,7 @@ Std_ObtainItem: @ 819FDF7 return Std_ObtainItem_: @ 819FE07 - bufferitem 1, 0x8000 + getitemname 1, 0x8000 checkitemtype 0x8000 call GetItem_HandlePocket compare 0x8007, 0x1 @@ -1514,31 +1514,31 @@ GetItem_HandlePocket: end GetItem_HandlePocket_Items: - bufferstd 2, 0xE + getstdstring 2, 0xE compare 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_KeyItems: - bufferstd 2, 0xF + getstdstring 2, 0xF compare 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_PokeBalls: - bufferstd 2, 0x10 + getstdstring 2, 0x10 compare 0x8007, 1 call_if 1, PlayGetItemFanfare return GetItem_HandlePocket_TMsHMs: - bufferstd 2, 0x11 + getstdstring 2, 0x11 compare 0x8007, 1 call_if 1, PlayGetTMHMFanfare return GetItem_HandlePocket_Berries: - bufferstd 2, 0x12 + getstdstring 2, 0x12 compare 0x8007, 1 call_if 1, PlayGetItemFanfare return @@ -1570,7 +1570,7 @@ Std_ObtainDecoration: @ 819FEDA return Std_ObtainDecoration_: @ 819FEE8 - bufferdecor 1, 0x8000 + getdecorname 1, 0x8000 compare 0x8007, 1 call_if 1, Std_ObtainDecoration_Success compare 0x8007, 0 @@ -1596,7 +1596,7 @@ Std_FindItem: @ 819FF21 waitse additem 0x8000, 0x8001 copyvar 0x8007, RESULT - bufferitem 1, 0x8000 + getitemname 1, 0x8000 checkitemtype 0x8000 call GetItem_HandlePocket compare 0x8007, 1 @@ -1625,7 +1625,7 @@ HiddenItemScript:: @ 819FF7B waitse additem 0x8005, 1 copyvar 0x8007, RESULT - bufferitem 0x1, 0x8005 + getitemname 0x1, 0x8005 checkitemtype 0x8005 call GetItem_HandlePocket compare 0x8007, 1 @@ -1813,7 +1813,7 @@ UseSurfScript:: @ 81A0117 checkpokemove MOVE_SURF compare RESULT, 6 goto_if_eq UseSurfScript_NoMon - bufferpartypoke 0, RESULT + getpartypokename 0, RESULT setanimation 0, RESULT lockall msgbox UseSurfPromptText, 5 @@ -2208,8 +2208,8 @@ Route101_EventScript_1A03B0:: @ 81A03B0 copyvar 0x8008, 0x8005 copyvar 0x8009, 0x8006 copyvar 0x800a, RESULT - buffernum 0, 0x8008 - buffernum 1, 0x8009 + getnumberstring 0, 0x8008 + getnumberstring 1, 0x8009 msgbox Route101_Text_1C44DC, 4 call Route101_EventScript_1A03A5 compare 0x800a, 0 @@ -2218,8 +2218,8 @@ Route101_EventScript_1A03B0:: @ 81A03B0 specialvar RESULT, ScriptGetPokedexInfo copyvar 0x8008, 0x8005 copyvar 0x8009, 0x8006 - buffernum 0, 0x8008 - buffernum 1, 0x8009 + getnumberstring 0, 0x8008 + getnumberstring 1, 0x8009 msgbox Route101_Text_1C4B05, 4 return @@ -2536,7 +2536,7 @@ FallarborTown_House1_EventScript_1A067F:: @ 81A067F GraniteCave_StevensRoom_EventScript_1A067F:: @ 81A067F MtPyre_Summit_EventScript_1A067F:: @ 81A067F SlateportCity_OceanicMuseum_2F_EventScript_1A067F:: @ 81A067F - bufferitem 0, 0x8004 + getitemname 0, 0x8004 playfanfare 372 message FallarborTown_House1_Text_1A1498 waitmessage @@ -3601,7 +3601,7 @@ gUnknown_081A2C51:: @ 81A2C51 goto_if_eq EventScript_1A2E45 checkpokemove MOVE_SECRET_POWER setanimation 0, RESULT - bufferattack 1, MOVE_SECRET_POWER + getmovename 1, MOVE_SECRET_POWER compare 0x8007, 1 goto_if_eq EventScript_1A2CB0 compare 0x8007, 2 @@ -3620,7 +3620,7 @@ EventScript_1A2CB0: lockall compare RESULT, 6 goto_if_eq EventScript_1A2CF1 - bufferpartypoke 0, RESULT + getpartypokename 0, RESULT msgbox UnknownString_8198F34, 5 compare RESULT, 0 goto_if_eq EventScript_1A2F3A @@ -3651,7 +3651,7 @@ EventScript_1A2D08: lockall compare RESULT, 6 goto_if_eq EventScript_1A2D49 - bufferpartypoke 0, RESULT + getpartypokename 0, RESULT msgbox UnknownString_81A197B, 5 compare RESULT, 0 goto_if_eq EventScript_1A2F3A @@ -3682,7 +3682,7 @@ EventScript_1A2D60: lockall compare RESULT, 6 goto_if_eq EventScript_1A2DA1 - bufferpartypoke 0, RESULT + getpartypokename 0, RESULT msgbox UnknownString_81A1A4B, 5 compare RESULT, 0 goto_if_eq EventScript_1A2F3A @@ -3788,8 +3788,8 @@ EventScript_1A2E45: msgbox UnknownString_81A3CC9, 5 compare RESULT, 0 goto_if_eq EventScript_1A2F3A - bufferpartypoke 0, 0x8004 - bufferattack 1, MOVE_SECRET_POWER + getpartypokename 0, 0x8004 + getmovename 1, MOVE_SECRET_POWER msgbox UsedCutRockSmashText, 4 closemessage closemessage @@ -4917,7 +4917,7 @@ gUnknown_081C6C02:: @ 81C6C02 @ 81C6C1D lockall - braillemsg Underwater_SealedChamber_Braille_1C533D + braillemessage Underwater_SealedChamber_Braille_1C533D waitbutton erasebox 0, 0, 29, 19 releaseall diff --git a/data/field_move_scripts.inc b/data/field_move_scripts.inc index 94f6b356c..a3fbce103 100644 --- a/data/field_move_scripts.inc +++ b/data/field_move_scripts.inc @@ -6,8 +6,8 @@ S_CuttableTree:: @ 81B0DCC compare RESULT, 6 goto_if_eq CannotUseCut setanimation 0, RESULT - bufferpartypoke 0, RESULT - bufferattack 1, MOVE_CUT + getpartypokename 0, RESULT + getmovename 1, MOVE_CUT msgbox UseCutPromptText, 5 compare RESULT, 0 goto_if_eq Cut_ChoseNo @@ -64,8 +64,8 @@ S_BreakableRock:: @ 81B0EB7 compare RESULT, 6 goto_if_eq CannotUseRockSmash setanimation 0, RESULT - bufferpartypoke 0, RESULT - bufferattack 1, MOVE_ROCK_SMASH + getpartypokename 0, RESULT + getmovename 1, MOVE_ROCK_SMASH msgbox UseRockSmashPromptText, 5 compare RESULT, 0 goto_if_eq RockSmash_ChoseNo @@ -193,7 +193,7 @@ S_UseWaterfall:: @ 81B115A checkpokemove MOVE_WATERFALL compare RESULT, 6 goto_if_eq Waterfall_NoMonKnows - bufferpartypoke 0, RESULT + getpartypokename 0, RESULT setanimation 0, RESULT msgbox UseWaterfallPromptText, 5 compare RESULT, 0 @@ -226,7 +226,7 @@ UseDiveScript:: @ 81B1220 checkpokemove MOVE_DIVE compare RESULT, 6 goto_if_eq CannotUseDive - bufferpartypoke 0, RESULT + getpartypokename 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UseDivePromptText, 5 @@ -249,7 +249,7 @@ S_UseDiveUnderwater:: @ 81B1269 checkpokemove MOVE_DIVE compare RESULT, 6 goto_if_eq UnderwaterCannotUseDive - bufferpartypoke 0, RESULT + getpartypokename 0, RESULT setanimation 0, RESULT setanimation 1, 1 msgbox UnderwaterUseDivePromptText, 5 diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 1262e259a..38a4a8f3f 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -120,25 +120,25 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_drawpokepic @ 0x75 .4byte ScrCmd_erasepokepic @ 0x76 .4byte ScrCmd_drawcontestwinner @ 0x77 - .4byte ScrCmd_braillemsg @ 0x78 + .4byte ScrCmd_braillemessage @ 0x78 .4byte ScrCmd_givepoke @ 0x79 .4byte ScrCmd_giveegg @ 0x7A .4byte ScrCmd_setpokemove @ 0x7B .4byte ScrCmd_checkpokemove @ 0x7C - .4byte ScrCmd_bufferpoke @ 0x7D - .4byte ScrCmd_bufferfirstpoke @ 0x7E - .4byte ScrCmd_bufferpartypoke @ 0x7F - .4byte ScrCmd_bufferitem @ 0x80 - .4byte ScrCmd_bufferdecor @ 0x81 - .4byte ScrCmd_bufferattack @ 0x82 - .4byte ScrCmd_buffernum @ 0x83 - .4byte ScrCmd_bufferstd @ 0x84 - .4byte ScrCmd_buffertext @ 0x85 + .4byte ScrCmd_getspeciesname @ 0x7D + .4byte ScrCmd_getfirstpartypokename @ 0x7E + .4byte ScrCmd_getpartypokename @ 0x7F + .4byte ScrCmd_getitemname @ 0x80 + .4byte ScrCmd_getdecorname @ 0x81 + .4byte ScrCmd_getmovename @ 0x82 + .4byte ScrCmd_getnumberstring @ 0x83 + .4byte ScrCmd_getstdstring @ 0x84 + .4byte ScrCmd_getstring @ 0x85 .4byte ScrCmd_pokemart @ 0x86 .4byte ScrCmd_pokemartdecor @ 0x87 .4byte ScrCmd_pokemartbp @ 0x88 - .4byte ScrCmd_pokecasino @ 0x89 - .4byte ScrCmd_event_8a @ 0x8A + .4byte ScrCmd_playslotmachine @ 0x89 + .4byte ScrCmd_plantberrytree @ 0x8A .4byte ScrCmd_choosecontestpkmn @ 0x8B .4byte ScrCmd_startcontest @ 0x8C .4byte ScrCmd_showcontestresults @ 0x8D diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc index 79e1de13b..344c2c18a 100644 --- a/data/scripts/berry_tree.inc +++ b/data/scripts/berry_tree.inc @@ -86,19 +86,19 @@ Route102_EventScript_1A15CE:: @ 81A15CE goto_if_eq Route102_EventScript_1A15F2 compare 0x8005, 4 goto_if_eq Route102_EventScript_1A15EB - buffertext 1, Route102_Text_1A17B7 + getstring 1, Route102_Text_1A17B7 return Route102_EventScript_1A15EB:: @ 81A15EB - buffertext 1, Route102_Text_1A179F + getstring 1, Route102_Text_1A179F return Route102_EventScript_1A15F2:: @ 81A15F2 - buffertext 1, Route102_Text_1A17B0 + getstring 1, Route102_Text_1A17B0 return Route102_EventScript_1A15F9:: @ 81A15F9 - buffernum 1, 0x8006 + getnumberstring 1, 0x8006 lock faceplayer msgbox Route102_Text_1A17C0, 5 diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index 33df12c8c..63209e77b 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -719,7 +719,7 @@ RecordCorner_EventScript_1A4457:: @ 81A4457 end RecordCorner_EventScript_1A446C:: @ 81A446C - bufferitem 1, 0x4001 + getitemname 1, 0x4001 message RecordCorner_Text_1A4E3B waitmessage waitbutton diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index 16e5a6282..56499fced 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -11,7 +11,7 @@ VerdanturfTown_ContestLobby_EventScript_1A4E92:: @ 81A4E92 goto_if 5, FallarborTown_ContestLobby_EventScript_1A4F4E checkflag 1 goto_if_eq FallarborTown_ContestLobby_EventScript_1A4F8F - bufferstd 0, 0x800b + getstdstring 0, 0x800b msgbox FallarborTown_ContestLobby_Text_1A5DFC, 4 checkitem ITEM_CONTEST_PASS, 1 compare RESULT, 0 @@ -260,8 +260,8 @@ LinkContestRoom1_EventScript_1A523F:: @ 81A523F return LinkContestRoom1_EventScript_1A5245:: @ 81A5245 - bufferstd 1, 0x8008 - bufferstd 2, 0x8009 + getstdstring 1, 0x8008 + getstdstring 2, 0x8009 call LinkContestRoom1_EventScript_1A525F lockall applymovement 1, LinkContestRoom1_Movement_1A5D87 @@ -339,7 +339,7 @@ LinkContestRoom1_EventScript_1A5311:: @ 81A5311 LinkContestRoom1_EventScript_1A5323:: @ 81A5323 special sub_80C4C64 addvar 0x8006, 1 - buffernum 1, 0x8006 + getnumberstring 1, 0x8006 lockall applymovement 0x800b, LinkContestRoom1_Movement_1A5D9C waitmovement 0 @@ -885,7 +885,7 @@ LinkContestRoom1_EventScript_1A5A49:: @ 81A5A49 special sub_80C47F0 special sub_80C4858 addvar 0x8005, 1 - buffernum 1, 0x8005 + getnumberstring 1, 0x8005 addvar 0x8005, -1 call LinkContestRoom1_EventScript_1A5A75 applymovement 0x4003, LinkContestRoom1_Movement_1A5D99 diff --git a/data/scripts/maps/AncientTomb.inc b/data/scripts/maps/AncientTomb.inc index 0e9a82f4c..6f6499b26 100644 --- a/data/scripts/maps/AncientTomb.inc +++ b/data/scripts/maps/AncientTomb.inc @@ -35,7 +35,7 @@ AncientTomb_EventScript_15F021:: @ 815F021 lockall checkflag 2130 goto_if_eq AncientTomb_EventScript_15F038 - braillemsg AncientTomb_Braille_1C552E + braillemessage AncientTomb_Braille_1C552E waitbutton erasebox 0, 0, 29, 19 releaseall @@ -48,7 +48,7 @@ AncientTomb_EventScript_15F038:: @ 815F038 AncientTomb_EventScript_15F042:: @ 815F042 lockall - braillemsg AncientTomb_Braille_1C552E + braillemessage AncientTomb_Braille_1C552E waitbutton erasebox 0, 0, 29, 19 releaseall diff --git a/data/scripts/maps/BattleTower_Lobby.inc b/data/scripts/maps/BattleTower_Lobby.inc index 555e32d81..5bb74d35b 100644 --- a/data/scripts/maps/BattleTower_Lobby.inc +++ b/data/scripts/maps/BattleTower_Lobby.inc @@ -416,7 +416,7 @@ BattleTower_Lobby_EventScript_160773:: @ 8160773 end BattleTower_Lobby_EventScript_1607AF:: @ 81607AF - bufferdecor 1, 0x8008 + getdecorname 1, 0x8008 msgbox BattleTower_Lobby_Text_1A0CEF, 4 msgbox BattleTower_Lobby_Text_19ABED, 4 release diff --git a/data/scripts/maps/DesertRuins.inc b/data/scripts/maps/DesertRuins.inc index 6b8bb5cdb..93cbb8fe8 100644 --- a/data/scripts/maps/DesertRuins.inc +++ b/data/scripts/maps/DesertRuins.inc @@ -35,7 +35,7 @@ DesertRuins_EventScript_15CB56:: @ 815CB56 lockall checkflag 2128 goto_if_eq DesertRuins_EventScript_15CB6D - braillemsg DesertRuins_Braille_1C54C8 + braillemessage DesertRuins_Braille_1C54C8 waitbutton erasebox 0, 0, 29, 19 releaseall @@ -48,7 +48,7 @@ DesertRuins_EventScript_15CB6D:: @ 815CB6D DesertRuins_EventScript_15CB77:: @ 815CB77 lockall - braillemsg DesertRuins_Braille_1C54C8 + braillemessage DesertRuins_Braille_1C54C8 waitbutton erasebox 0, 0, 29, 19 releaseall diff --git a/data/scripts/maps/FortreeCity_House1.inc b/data/scripts/maps/FortreeCity_House1.inc index 3809e1f01..3fb0f7745 100644 --- a/data/scripts/maps/FortreeCity_House1.inc +++ b/data/scripts/maps/FortreeCity_House1.inc @@ -28,7 +28,7 @@ FortreeCity_House1_EventScript_157E13:: @ 8157E13 special sub_804DB68 special sub_804E174 waitstate - bufferpoke 0, 0x8009 + getspeciesname 0, 0x8009 msgbox FortreeCity_House1_Text_1856F7, 4 setflag 155 release @@ -40,7 +40,7 @@ FortreeCity_House1_EventScript_157E95:: @ 8157E95 end FortreeCity_House1_EventScript_157E9F:: @ 8157E9F - bufferpoke 0, 0x8009 + getspeciesname 0, 0x8009 msgbox FortreeCity_House1_Text_185737, 4 release end diff --git a/data/scripts/maps/IslandCave.inc b/data/scripts/maps/IslandCave.inc index ed230477c..55bd4103c 100644 --- a/data/scripts/maps/IslandCave.inc +++ b/data/scripts/maps/IslandCave.inc @@ -47,7 +47,7 @@ IslandCave_EventScript_15EF59:: @ 815EF59 lockall checkflag 2129 goto_if_eq IslandCave_EventScript_15EF72 - braillemsg IslandCave_Braille_1C54FC + braillemessage IslandCave_Braille_1C54FC special DoBrailleWait waitstate goto IslandCave_EventScript_15EF95 @@ -60,7 +60,7 @@ IslandCave_EventScript_15EF72:: @ 815EF72 IslandCave_EventScript_15EF7C:: @ 815EF7C lockall - braillemsg IslandCave_Braille_1C54FC + braillemessage IslandCave_Braille_1C54FC checkflag 2129 goto_if_eq IslandCave_EventScript_15EF95 special DoBrailleWait diff --git a/data/scripts/maps/LilycoveCity_ContestLobby.inc b/data/scripts/maps/LilycoveCity_ContestLobby.inc index 09f2e88ea..2bd95eace 100644 --- a/data/scripts/maps/LilycoveCity_ContestLobby.inc +++ b/data/scripts/maps/LilycoveCity_ContestLobby.inc @@ -472,7 +472,7 @@ LilycoveCity_ContestLobby_EventScript_158DC3:: @ 8158DC3 LilycoveCity_ContestLobby_EventScript_158DD1:: @ 8158DD1 special sub_80C496C addvar 0x8004, 1 - buffernum 1, 32772 + getnumberstring 1, 32772 message2 LilycoveCity_ContestLobby_Text_188845 waitmessage addvar 0x8004, 65535 diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc index 02f5ca3ca..03d64bbd1 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc @@ -146,12 +146,12 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A260 updatemoney 0, 0 nop - bufferitem 0, 0x4000 + getitemname 0, 0x4000 playse 106 msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C75F, 4 additem 0x4000, 1 - bufferitem 1, 0x4000 - bufferstd 2, 14 + getitemname 1, 0x4000 + getstdstring 2, 14 msgbox LilycoveCity_DepartmentStoreRooftop_Text_1A0C8C, 4 random 64 compare RESULT, 0 @@ -162,8 +162,8 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 playse 106 msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C780, 4 additem 0x4000, 1 - bufferitem 1, 0x4000 - bufferstd 2, 14 + getitemname 1, 0x4000 + getstdstring 2, 14 msgbox LilycoveCity_DepartmentStoreRooftop_Text_1A0C8C, 4 random 64 compare RESULT, 0 @@ -174,8 +174,8 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 playse 106 msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C780, 4 additem 0x4000, 1 - bufferitem 1, 0x4000 - bufferstd 2, 14 + getitemname 1, 0x4000 + getstdstring 2, 14 msgbox LilycoveCity_DepartmentStoreRooftop_Text_1A0C8C, 4 goto LilycoveCity_DepartmentStoreRooftop_EventScript_15A36E end diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc index 2b39ea557..80fda6d59 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc @@ -40,7 +40,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_159D5E:: @ 8159D5E call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E3A compare 0x8006, 1 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E43 - bufferitem 0, 0x8005 + getitemname 0, 0x8005 compare 0x8004, 1 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E78 compare 0x8004, 2 diff --git a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc index 7c6886209..d7aab95a6 100644 --- a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc +++ b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc @@ -24,7 +24,7 @@ LittlerootTown_ProfessorBirchsLab_MapScript2_152CAC:: @ 8152CAC LittlerootTown_ProfessorBirchsLab_EventScript_152CBE:: @ 8152CBE lockall - bufferfirstpoke 0 + getfirstpartypokename 0 message LittlerootTown_ProfessorBirchsLab_Text_173D94 waitmessage playfanfare 370 diff --git a/data/scripts/maps/MauvilleCity_GameCorner.inc b/data/scripts/maps/MauvilleCity_GameCorner.inc index 6952ca4e1..0a853b2fc 100644 --- a/data/scripts/maps/MauvilleCity_GameCorner.inc +++ b/data/scripts/maps/MauvilleCity_GameCorner.inc @@ -129,17 +129,17 @@ MauvilleCity_GameCorner_EventScript_156BA6:: @ 8156BA6 MauvilleCity_GameCorner_EventScript_156BE2:: @ 8156BE2 setvar 0x4001, 1 - bufferdecor 0, 88 + getdecorname 0, 88 goto MauvilleCity_GameCorner_EventScript_156C0C MauvilleCity_GameCorner_EventScript_156BF0:: @ 8156BF0 setvar 0x4001, 2 - bufferdecor 0, 89 + getdecorname 0, 89 goto MauvilleCity_GameCorner_EventScript_156C0C MauvilleCity_GameCorner_EventScript_156BFE:: @ 8156BFE setvar 0x4001, 3 - bufferdecor 0, 90 + getdecorname 0, 90 goto MauvilleCity_GameCorner_EventScript_156C0C MauvilleCity_GameCorner_EventScript_156C0C:: @ 8156C0C @@ -156,7 +156,7 @@ MauvilleCity_GameCorner_EventScript_156C46:: @ 8156C46 checkcoins 16386 compare 0x4002, 1000 goto_if 0, MauvilleCity_GameCorner_EventScript_156CF4 - bufferdecor 1, 88 + getdecorname 1, 88 checkdecor 88 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 @@ -172,7 +172,7 @@ MauvilleCity_GameCorner_EventScript_156C80:: @ 8156C80 checkcoins 16386 compare 0x4002, 1000 goto_if 0, MauvilleCity_GameCorner_EventScript_156CF4 - bufferdecor 1, 89 + getdecorname 1, 89 checkdecor 89 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 @@ -188,7 +188,7 @@ MauvilleCity_GameCorner_EventScript_156CBA:: @ 8156CBA checkcoins 16386 compare 0x4002, 1000 goto_if 0, MauvilleCity_GameCorner_EventScript_156CF4 - bufferdecor 1, 90 + getdecorname 1, 90 checkdecor 90 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 @@ -252,27 +252,27 @@ MauvilleCity_GameCorner_EventScript_156D54:: @ 8156D54 MauvilleCity_GameCorner_EventScript_156DA6:: @ 8156DA6 setvar 0x4001, 1 - bufferitem 0, ITEM_TM32 + getitemname 0, ITEM_TM32 goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DB4:: @ 8156DB4 setvar 0x4001, 2 - bufferitem 0, ITEM_TM29 + getitemname 0, ITEM_TM29 goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DC2:: @ 8156DC2 setvar 0x4001, 3 - bufferitem 0, ITEM_TM35 + getitemname 0, ITEM_TM35 goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DD0:: @ 8156DD0 setvar 0x4001, 4 - bufferitem 0, ITEM_TM24 + getitemname 0, ITEM_TM24 goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DDE:: @ 8156DDE setvar 0x4001, 5 - bufferitem 0, ITEM_TM13 + getitemname 0, ITEM_TM13 goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DEC:: @ 8156DEC @@ -401,7 +401,7 @@ MauvilleCity_GameCorner_EventScript_156F96:: @ 8156F96 end MauvilleCity_GameCorner_EventScript_156FDB:: @ 8156FDB - bufferdecor 1, 88 + getdecorname 1, 88 checkdecor 88 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_157059 @@ -412,7 +412,7 @@ MauvilleCity_GameCorner_EventScript_156FDB:: @ 8156FDB end MauvilleCity_GameCorner_EventScript_157005:: @ 8157005 - bufferdecor 1, 89 + getdecorname 1, 89 checkdecor 89 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_157059 @@ -423,7 +423,7 @@ MauvilleCity_GameCorner_EventScript_157005:: @ 8157005 end MauvilleCity_GameCorner_EventScript_15702F:: @ 815702F - bufferdecor 1, 90 + getdecorname 1, 90 checkdecor 90 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_157059 @@ -526,7 +526,7 @@ MauvilleCity_GameCorner_EventScript_157135:: @ 8157135 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 0 specialvar RESULT, sub_810F424 - pokecasino RESULT + playslotmachine RESULT releaseall end @@ -537,7 +537,7 @@ MauvilleCity_GameCorner_EventScript_157155:: @ 8157155 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 1 specialvar RESULT, sub_810F424 - pokecasino RESULT + playslotmachine RESULT releaseall end @@ -548,7 +548,7 @@ MauvilleCity_GameCorner_EventScript_157175:: @ 8157175 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 2 specialvar RESULT, sub_810F424 - pokecasino RESULT + playslotmachine RESULT releaseall end @@ -559,7 +559,7 @@ MauvilleCity_GameCorner_EventScript_157195:: @ 8157195 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 3 specialvar RESULT, sub_810F424 - pokecasino RESULT + playslotmachine RESULT releaseall end @@ -570,7 +570,7 @@ MauvilleCity_GameCorner_EventScript_1571B5:: @ 81571B5 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 4 specialvar RESULT, sub_810F424 - pokecasino RESULT + playslotmachine RESULT releaseall end @@ -581,7 +581,7 @@ MauvilleCity_GameCorner_EventScript_1571D5:: @ 81571D5 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 5 specialvar RESULT, sub_810F424 - pokecasino RESULT + playslotmachine RESULT releaseall end @@ -592,7 +592,7 @@ MauvilleCity_GameCorner_EventScript_1571F5:: @ 81571F5 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 6 specialvar RESULT, sub_810F424 - pokecasino RESULT + playslotmachine RESULT releaseall end @@ -603,7 +603,7 @@ MauvilleCity_GameCorner_EventScript_157215:: @ 8157215 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 7 specialvar RESULT, sub_810F424 - pokecasino RESULT + playslotmachine RESULT releaseall end @@ -614,7 +614,7 @@ MauvilleCity_GameCorner_EventScript_157235:: @ 8157235 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 8 specialvar RESULT, sub_810F424 - pokecasino RESULT + playslotmachine RESULT releaseall end @@ -625,7 +625,7 @@ MauvilleCity_GameCorner_EventScript_157255:: @ 8157255 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 9 specialvar RESULT, sub_810F424 - pokecasino RESULT + playslotmachine RESULT releaseall end @@ -636,7 +636,7 @@ MauvilleCity_GameCorner_EventScript_157275:: @ 8157275 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 10 specialvar RESULT, sub_810F424 - pokecasino RESULT + playslotmachine RESULT releaseall end @@ -647,7 +647,7 @@ MauvilleCity_GameCorner_EventScript_157295:: @ 8157295 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 11 specialvar RESULT, sub_810F424 - pokecasino RESULT + playslotmachine RESULT releaseall end diff --git a/data/scripts/maps/MossdeepCity_House1.inc b/data/scripts/maps/MossdeepCity_House1.inc index 6098cc617..62edffc8b 100644 --- a/data/scripts/maps/MossdeepCity_House1.inc +++ b/data/scripts/maps/MossdeepCity_House1.inc @@ -4,7 +4,7 @@ MossdeepCity_House1_MapScripts:: @ 815A82E MossdeepCity_House1_EventScript_15A82F:: @ 815A82F lock faceplayer - bufferfirstpoke 0 + getfirstpartypokename 0 msgbox MossdeepCity_House1_Text_18D465, 4 specialvar RESULT, GetPokeblockNameByMonNature compare RESULT, 0 diff --git a/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc b/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc index acd499966..260cb4b6e 100644 --- a/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc +++ b/data/scripts/maps/MossdeepCity_SpaceCenter_1F.inc @@ -6,7 +6,7 @@ MossdeepCity_SpaceCenter_1F_EventScript_15AB8B:: @ 815AB8B faceplayer dodailyevents specialvar RESULT, GetWeekCount - buffernum 0, RESULT + getnumberstring 0, RESULT compare RESULT, 0 call_if 1, MossdeepCity_SpaceCenter_1F_EventScript_15ABBA compare RESULT, 1 diff --git a/data/scripts/maps/MossdeepCity_StevensHouse.inc b/data/scripts/maps/MossdeepCity_StevensHouse.inc index 6905b31b3..8bf899780 100644 --- a/data/scripts/maps/MossdeepCity_StevensHouse.inc +++ b/data/scripts/maps/MossdeepCity_StevensHouse.inc @@ -84,7 +84,7 @@ MossdeepCity_StevensHouse_EventScript_15AA7C:: @ 815AA7C waitfanfare waitmessage givepoke SPECIES_BELDUM, 5, ITEM_NONE, 0x0, 0x0, 0 - bufferpoke 1, SPECIES_BELDUM + getspeciesname 1, SPECIES_BELDUM msgbox MossdeepCity_StevensHouse_Text_1A1102, 5 compare RESULT, 1 call_if 1, MossdeepCity_StevensHouse_EventScript_1A0678 diff --git a/data/scripts/maps/PacifidlogTown_House2.inc b/data/scripts/maps/PacifidlogTown_House2.inc index cef40ecd3..f3a198a08 100644 --- a/data/scripts/maps/PacifidlogTown_House2.inc +++ b/data/scripts/maps/PacifidlogTown_House2.inc @@ -72,7 +72,7 @@ PacifidlogTown_House2_EventScript_154225:: @ 8154225 PacifidlogTown_House2_EventScript_154254:: @ 8154254 specialvar RESULT, sub_810F908 - buffernum 0, RESULT + getnumberstring 0, RESULT msgbox PacifidlogTown_House2_Text_1792F2, 4 release end diff --git a/data/scripts/maps/PacifidlogTown_House3.inc b/data/scripts/maps/PacifidlogTown_House3.inc index 1edd445fc..28b9dbd80 100644 --- a/data/scripts/maps/PacifidlogTown_House3.inc +++ b/data/scripts/maps/PacifidlogTown_House3.inc @@ -28,7 +28,7 @@ PacifidlogTown_House3_EventScript_15429E:: @ 815429E special sub_804DB68 special sub_804E174 waitstate - bufferpoke 0, 0x8009 + getspeciesname 0, 0x8009 msgbox PacifidlogTown_House3_Text_1794C4, 4 setflag 154 release @@ -40,7 +40,7 @@ PacifidlogTown_House3_EventScript_154320:: @ 8154320 end PacifidlogTown_House3_EventScript_15432A:: @ 815432A - bufferpoke 0, 0x8009 + getspeciesname 0, 0x8009 msgbox PacifidlogTown_House3_Text_1794DF, 4 release end diff --git a/data/scripts/maps/Route113_GlassWorkshop.inc b/data/scripts/maps/Route113_GlassWorkshop.inc index 39b484c8a..d0b608339 100644 --- a/data/scripts/maps/Route113_GlassWorkshop.inc +++ b/data/scripts/maps/Route113_GlassWorkshop.inc @@ -68,7 +68,7 @@ Route113_GlassWorkshop_EventScript_1635EE:: @ 81635EE Route113_GlassWorkshop_EventScript_163660:: @ 8163660 setvar 0x8008, 39 - bufferitem 0, 0x8008 + getitemname 0, 0x8008 setvar 0x800a, 250 compare 0x4048, 250 goto_if 0, Route113_GlassWorkshop_EventScript_163830 @@ -82,7 +82,7 @@ Route113_GlassWorkshop_EventScript_163660:: @ 8163660 Route113_GlassWorkshop_EventScript_16369C:: @ 816369C setvar 0x8008, 40 - bufferitem 0, 0x8008 + getitemname 0, 0x8008 setvar 0x800a, 500 compare 0x4048, 500 goto_if 0, Route113_GlassWorkshop_EventScript_163830 @@ -96,7 +96,7 @@ Route113_GlassWorkshop_EventScript_16369C:: @ 816369C Route113_GlassWorkshop_EventScript_1636D8:: @ 81636D8 setvar 0x8008, 41 - bufferitem 0, 0x8008 + getitemname 0, 0x8008 setvar 0x800a, 500 compare 0x4048, 500 goto_if 0, Route113_GlassWorkshop_EventScript_163830 @@ -110,7 +110,7 @@ Route113_GlassWorkshop_EventScript_1636D8:: @ 81636D8 Route113_GlassWorkshop_EventScript_163714:: @ 8163714 setvar 0x8008, 43 - bufferitem 0, 0x8008 + getitemname 0, 0x8008 setvar 0x800a, 1000 compare 0x4048, 1000 goto_if 0, Route113_GlassWorkshop_EventScript_163830 @@ -124,7 +124,7 @@ Route113_GlassWorkshop_EventScript_163714:: @ 8163714 Route113_GlassWorkshop_EventScript_163750:: @ 8163750 setvar 0x8008, 42 - bufferitem 0, 0x8008 + getitemname 0, 0x8008 setvar 0x800a, 1000 compare 0x4048, 1000 goto_if 0, Route113_GlassWorkshop_EventScript_163830 @@ -139,7 +139,7 @@ Route113_GlassWorkshop_EventScript_163750:: @ 8163750 Route113_GlassWorkshop_EventScript_16378C:: @ 816378C setvar 0x8009, 1 setvar 0x8008, 13 - bufferdecor 0, 0x8008 + getdecorname 0, 0x8008 setvar 0x800a, 6000 compare 0x4048, 6000 goto_if 0, Route113_GlassWorkshop_EventScript_163830 @@ -154,7 +154,7 @@ Route113_GlassWorkshop_EventScript_16378C:: @ 816378C Route113_GlassWorkshop_EventScript_1637CD:: @ 81637CD setvar 0x8009, 1 setvar 0x8008, 6 - bufferdecor 0, 0x8008 + getdecorname 0, 0x8008 setvar 0x800a, 8000 compare 0x4048, 8000 goto_if 0, Route113_GlassWorkshop_EventScript_163830 @@ -174,14 +174,14 @@ Route113_GlassWorkshop_EventScript_16380E:: @ 816380E Route113_GlassWorkshop_EventScript_163818:: @ 8163818 setvar 0x800a, 250 subvar 0x800a, 16456 - buffernum 0, 32778 + getnumberstring 0, 32778 msgbox Route113_GlassWorkshop_Text_19E697, 4 release end Route113_GlassWorkshop_EventScript_163830:: @ 8163830 subvar 0x800a, 16456 - buffernum 1, 32778 + getnumberstring 1, 32778 message Route113_GlassWorkshop_Text_19E890 waitmessage goto Route113_GlassWorkshop_EventScript_1635EE @@ -247,49 +247,49 @@ Route113_GlassWorkshop_EventScript_1638D2:: @ 81638D2 Route113_GlassWorkshop_EventScript_163925:: @ 8163925 setvar 0x8009, 0 setvar 0x8008, 39 - bufferitem 0, 0x8008 + getitemname 0, 0x8008 goto Route113_GlassWorkshop_EventScript_1639B1 end Route113_GlassWorkshop_EventScript_163939:: @ 8163939 setvar 0x8009, 0 setvar 0x8008, 40 - bufferitem 0, 0x8008 + getitemname 0, 0x8008 goto Route113_GlassWorkshop_EventScript_1639B1 end Route113_GlassWorkshop_EventScript_16394D:: @ 816394D setvar 0x8009, 0 setvar 0x8008, 41 - bufferitem 0, 0x8008 + getitemname 0, 0x8008 goto Route113_GlassWorkshop_EventScript_1639B1 end Route113_GlassWorkshop_EventScript_163961:: @ 8163961 setvar 0x8009, 0 setvar 0x8008, 43 - bufferitem 0, 0x8008 + getitemname 0, 0x8008 goto Route113_GlassWorkshop_EventScript_1639B1 end Route113_GlassWorkshop_EventScript_163975:: @ 8163975 setvar 0x8009, 0 setvar 0x8008, 42 - bufferitem 0, 0x8008 + getitemname 0, 0x8008 goto Route113_GlassWorkshop_EventScript_1639B1 end Route113_GlassWorkshop_EventScript_163989:: @ 8163989 setvar 0x8009, 1 setvar 0x8008, 13 - bufferdecor 0, 13 + getdecorname 0, 13 goto Route113_GlassWorkshop_EventScript_1639B1 end Route113_GlassWorkshop_EventScript_16399D:: @ 816399D setvar 0x8009, 1 setvar 0x8008, 6 - bufferdecor 0, 6 + getdecorname 0, 6 goto Route113_GlassWorkshop_EventScript_1639B1 end diff --git a/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc b/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc index 543736e80..7421e94e0 100644 --- a/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc +++ b/data/scripts/maps/Route124_DivingTreasureHuntersHouse.inc @@ -244,8 +244,8 @@ Route124_DivingTreasureHuntersHouse_EventScript_164283:: @ 8164283 goto Route124_DivingTreasureHuntersHouse_EventScript_164292 Route124_DivingTreasureHuntersHouse_EventScript_164292:: @ 8164292 - bufferitem 0, 0x8008 - bufferitem 1, 0x8009 + getitemname 0, 0x8008 + getitemname 1, 0x8009 msgbox Route124_DivingTreasureHuntersHouse_Text_19F5E0, 5 compare RESULT, 0 goto_if_eq Route124_DivingTreasureHuntersHouse_EventScript_16431F diff --git a/data/scripts/maps/RustboroCity_DevonCorp_2F.inc b/data/scripts/maps/RustboroCity_DevonCorp_2F.inc index 784ef8087..f40c1b87b 100644 --- a/data/scripts/maps/RustboroCity_DevonCorp_2F.inc +++ b/data/scripts/maps/RustboroCity_DevonCorp_2F.inc @@ -88,7 +88,7 @@ RustboroCity_DevonCorp_2F_EventScript_1575A6:: @ 81575A6 msgbox RustboroCity_DevonCorp_2F_Text_182F35, 5 compare RESULT, 0 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157636 - bufferitem 0, ITEM_ROOT_FOSSIL + getitemname 0, ITEM_ROOT_FOSSIL msgbox RustboroCity_DevonCorp_2F_Text_183023, 4 removeitem ITEM_ROOT_FOSSIL, 1 setvar 0x40c4, 1 @@ -106,7 +106,7 @@ RustboroCity_DevonCorp_2F_EventScript_1575EE:: @ 81575EE msgbox RustboroCity_DevonCorp_2F_Text_182F35, 5 compare RESULT, 0 goto_if_eq RustboroCity_DevonCorp_2F_EventScript_157636 - bufferitem 0, ITEM_CLAW_FOSSIL + getitemname 0, ITEM_CLAW_FOSSIL msgbox RustboroCity_DevonCorp_2F_Text_183023, 4 removeitem ITEM_CLAW_FOSSIL, 1 setvar 0x40c4, 1 @@ -132,7 +132,7 @@ RustboroCity_DevonCorp_2F_EventScript_15764A:: @ 815764A end RustboroCity_DevonCorp_2F_EventScript_157661:: @ 8157661 - bufferpoke 1, SPECIES_LILEEP + getspeciesname 1, SPECIES_LILEEP msgbox RustboroCity_DevonCorp_2F_Text_183124, 4 countpokemon compare RESULT, 6 @@ -152,7 +152,7 @@ RustboroCity_DevonCorp_2F_EventScript_157661:: @ 8157661 end RustboroCity_DevonCorp_2F_EventScript_1576B4:: @ 81576B4 - bufferpoke 1, SPECIES_ANORITH + getspeciesname 1, SPECIES_ANORITH msgbox RustboroCity_DevonCorp_2F_Text_183124, 4 countpokemon compare RESULT, 6 diff --git a/data/scripts/maps/RustboroCity_House1.inc b/data/scripts/maps/RustboroCity_House1.inc index a344738a8..b983617e0 100644 --- a/data/scripts/maps/RustboroCity_House1.inc +++ b/data/scripts/maps/RustboroCity_House1.inc @@ -39,7 +39,7 @@ RustboroCity_House1_EventScript_157CFB:: @ 8157CFB end RustboroCity_House1_EventScript_157D05:: @ 8157D05 - bufferpoke 0, 0x8009 + getspeciesname 0, 0x8009 msgbox RustboroCity_House1_Text_184F8F, 4 release end diff --git a/data/scripts/maps/SealedChamber_InnerRoom.inc b/data/scripts/maps/SealedChamber_InnerRoom.inc index 027c1c363..526ada367 100644 --- a/data/scripts/maps/SealedChamber_InnerRoom.inc +++ b/data/scripts/maps/SealedChamber_InnerRoom.inc @@ -3,7 +3,7 @@ SealedChamber_InnerRoom_MapScripts:: @ 815F1E7 SealedChamber_InnerRoom_EventScript_15F1E8:: @ 815F1E8 lockall - braillemsg SealedChamber_InnerRoom_Braille_1C53C1 + braillemessage SealedChamber_InnerRoom_Braille_1C53C1 waitbutton erasebox 0, 0, 29, 19 checkflag 228 @@ -41,7 +41,7 @@ SealedChamber_InnerRoom_EventScript_15F247:: @ 815F247 SealedChamber_InnerRoom_EventScript_15F249:: @ 815F249 lockall - braillemsg SealedChamber_InnerRoom_Braille_1C53F2 + braillemessage SealedChamber_InnerRoom_Braille_1C53F2 waitbutton erasebox 0, 0, 29, 19 releaseall @@ -49,7 +49,7 @@ SealedChamber_InnerRoom_EventScript_15F249:: @ 815F249 SealedChamber_InnerRoom_EventScript_15F257:: @ 815F257 lockall - braillemsg SealedChamber_InnerRoom_Braille_1C5414 + braillemessage SealedChamber_InnerRoom_Braille_1C5414 waitbutton erasebox 0, 0, 29, 19 releaseall @@ -57,7 +57,7 @@ SealedChamber_InnerRoom_EventScript_15F257:: @ 815F257 SealedChamber_InnerRoom_EventScript_15F265:: @ 815F265 lockall - braillemsg SealedChamber_InnerRoom_Braille_1C5435 + braillemessage SealedChamber_InnerRoom_Braille_1C5435 waitbutton erasebox 0, 0, 29, 19 releaseall @@ -65,7 +65,7 @@ SealedChamber_InnerRoom_EventScript_15F265:: @ 815F265 SealedChamber_InnerRoom_EventScript_15F273:: @ 815F273 lockall - braillemsg SealedChamber_InnerRoom_Braille_1C545C + braillemessage SealedChamber_InnerRoom_Braille_1C545C waitbutton erasebox 0, 0, 29, 19 releaseall @@ -73,7 +73,7 @@ SealedChamber_InnerRoom_EventScript_15F273:: @ 815F273 SealedChamber_InnerRoom_EventScript_15F281:: @ 815F281 lockall - braillemsg SealedChamber_InnerRoom_Braille_1C5470 + braillemessage SealedChamber_InnerRoom_Braille_1C5470 waitbutton erasebox 0, 0, 29, 19 releaseall @@ -81,7 +81,7 @@ SealedChamber_InnerRoom_EventScript_15F281:: @ 815F281 SealedChamber_InnerRoom_EventScript_15F28F:: @ 815F28F lockall - braillemsg SealedChamber_InnerRoom_Braille_1C549B + braillemessage SealedChamber_InnerRoom_Braille_1C549B waitbutton erasebox 0, 0, 29, 19 releaseall diff --git a/data/scripts/maps/SealedChamber_OuterRoom.inc b/data/scripts/maps/SealedChamber_OuterRoom.inc index 638fc2a85..39542559b 100644 --- a/data/scripts/maps/SealedChamber_OuterRoom.inc +++ b/data/scripts/maps/SealedChamber_OuterRoom.inc @@ -29,7 +29,7 @@ SealedChamber_OuterRoom_EventScript_15F0F5:: @ 815F0F5 SealedChamber_OuterRoom_EventScript_15F12C:: @ 815F12C lockall - braillemsg SealedChamber_OuterRoom_Braille_1C534F + braillemessage SealedChamber_OuterRoom_Braille_1C534F waitbutton erasebox 0, 0, 29, 19 releaseall @@ -37,7 +37,7 @@ SealedChamber_OuterRoom_EventScript_15F12C:: @ 815F12C SealedChamber_OuterRoom_EventScript_15F13A:: @ 815F13A lockall - braillemsg SealedChamber_OuterRoom_Braille_1C5359 + braillemessage SealedChamber_OuterRoom_Braille_1C5359 waitbutton erasebox 0, 0, 29, 19 releaseall @@ -45,7 +45,7 @@ SealedChamber_OuterRoom_EventScript_15F13A:: @ 815F13A SealedChamber_OuterRoom_EventScript_15F148:: @ 815F148 lockall - braillemsg SealedChamber_OuterRoom_Braille_1C5363 + braillemessage SealedChamber_OuterRoom_Braille_1C5363 waitbutton erasebox 0, 0, 29, 19 releaseall @@ -53,7 +53,7 @@ SealedChamber_OuterRoom_EventScript_15F148:: @ 815F148 SealedChamber_OuterRoom_EventScript_15F156:: @ 815F156 lockall - braillemsg SealedChamber_OuterRoom_Braille_1C536D + braillemessage SealedChamber_OuterRoom_Braille_1C536D waitbutton erasebox 0, 0, 29, 19 releaseall @@ -61,7 +61,7 @@ SealedChamber_OuterRoom_EventScript_15F156:: @ 815F156 SealedChamber_OuterRoom_EventScript_15F164:: @ 815F164 lockall - braillemsg SealedChamber_OuterRoom_Braille_1C5377 + braillemessage SealedChamber_OuterRoom_Braille_1C5377 waitbutton erasebox 0, 0, 29, 19 releaseall @@ -69,7 +69,7 @@ SealedChamber_OuterRoom_EventScript_15F164:: @ 815F164 SealedChamber_OuterRoom_EventScript_15F172:: @ 815F172 lockall - braillemsg SealedChamber_OuterRoom_Braille_1C5381 + braillemessage SealedChamber_OuterRoom_Braille_1C5381 waitbutton erasebox 0, 0, 29, 19 releaseall @@ -77,7 +77,7 @@ SealedChamber_OuterRoom_EventScript_15F172:: @ 815F172 SealedChamber_OuterRoom_EventScript_15F180:: @ 815F180 lockall - braillemsg SealedChamber_OuterRoom_Braille_1C538B + braillemessage SealedChamber_OuterRoom_Braille_1C538B waitbutton erasebox 0, 0, 29, 19 releaseall @@ -85,7 +85,7 @@ SealedChamber_OuterRoom_EventScript_15F180:: @ 815F180 SealedChamber_OuterRoom_EventScript_15F18E:: @ 815F18E lockall - braillemsg SealedChamber_OuterRoom_Braille_1C5396 + braillemessage SealedChamber_OuterRoom_Braille_1C5396 waitbutton erasebox 0, 0, 29, 19 releaseall @@ -93,7 +93,7 @@ SealedChamber_OuterRoom_EventScript_15F18E:: @ 815F18E SealedChamber_OuterRoom_EventScript_15F19C:: @ 815F19C lockall - braillemsg SealedChamber_OuterRoom_Braille_1C539E + braillemessage SealedChamber_OuterRoom_Braille_1C539E waitbutton erasebox 0, 0, 29, 19 releaseall @@ -101,7 +101,7 @@ SealedChamber_OuterRoom_EventScript_15F19C:: @ 815F19C SealedChamber_OuterRoom_EventScript_15F1AA:: @ 815F1AA lockall - braillemsg SealedChamber_OuterRoom_Braille_1C53A9 + braillemessage SealedChamber_OuterRoom_Braille_1C53A9 waitbutton erasebox 0, 0, 29, 19 releaseall @@ -111,7 +111,7 @@ SealedChamber_OuterRoom_EventScript_15F1B8:: @ 815F1B8 lockall checkflag 2127 goto_if_eq SealedChamber_OuterRoom_EventScript_15F1CF - braillemsg SealedChamber_OuterRoom_Braille_1C53B1 + braillemessage SealedChamber_OuterRoom_Braille_1C53B1 waitbutton erasebox 0, 0, 29, 19 releaseall @@ -124,7 +124,7 @@ SealedChamber_OuterRoom_EventScript_15F1CF:: @ 815F1CF SealedChamber_OuterRoom_EventScript_15F1D9:: @ 815F1D9 lockall - braillemsg SealedChamber_OuterRoom_Braille_1C53B1 + braillemessage SealedChamber_OuterRoom_Braille_1C53B1 waitbutton erasebox 0, 0, 29, 19 releaseall diff --git a/data/scripts/maps/SlateportCity.inc b/data/scripts/maps/SlateportCity.inc index dcd550549..bea1455a7 100644 --- a/data/scripts/maps/SlateportCity.inc +++ b/data/scripts/maps/SlateportCity.inc @@ -64,7 +64,7 @@ SlateportCity_Items1:: @ 814BAD0 SlateportCity_EventScript_14BAE0:: @ 814BAE0 lock faceplayer - bufferfirstpoke 0 + getfirstpartypokename 0 msgbox SlateportCity_Text_164682, 4 specialvar RESULT, LeadMonHasEffortRibbon compare RESULT, 1 diff --git a/data/scripts/maps/SlateportCity_PokemonFanClub.inc b/data/scripts/maps/SlateportCity_PokemonFanClub.inc index cd71d8d51..fa66113b1 100644 --- a/data/scripts/maps/SlateportCity_PokemonFanClub.inc +++ b/data/scripts/maps/SlateportCity_PokemonFanClub.inc @@ -59,7 +59,7 @@ SlateportCity_PokemonFanClub_EventScript_155808:: @ 8155808 call_if 0, SlateportCity_PokemonFanClub_EventScript_1559B9 checkflag 200 call_if 0, SlateportCity_PokemonFanClub_EventScript_1559A2 - bufferfirstpoke 0 + getfirstpartypokename 0 switch 0x4001 case 0, SlateportCity_PokemonFanClub_EventScript_155899 case 1, SlateportCity_PokemonFanClub_EventScript_1558A3 diff --git a/data/scripts/maps/SootopolisCity_House6.inc b/data/scripts/maps/SootopolisCity_House6.inc index 1e1b53956..a0fdc5ca4 100644 --- a/data/scripts/maps/SootopolisCity_House6.inc +++ b/data/scripts/maps/SootopolisCity_House6.inc @@ -28,7 +28,7 @@ SootopolisCity_House6_EventScript_15B3CD:: @ 815B3CD end SootopolisCity_House6_EventScript_15B3D7:: @ 815B3D7 - bufferdecor 1, 117 + getdecorname 1, 117 msgbox SootopolisCity_House6_Text_1A0CEF, 4 msgbox SootopolisCity_House6_Text_18FF28, 4 release diff --git a/data/scripts/maps/Underwater_SealedChamber.inc b/data/scripts/maps/Underwater_SealedChamber.inc index edc8229a7..836ad86e2 100644 --- a/data/scripts/maps/Underwater_SealedChamber.inc +++ b/data/scripts/maps/Underwater_SealedChamber.inc @@ -20,7 +20,7 @@ Underwater_SealedChamber_EventScript_15F0AF:: @ 815F0AF Underwater_SealedChamber_EventScript_15F0B8:: @ 815F0B8 lockall - braillemsg Underwater_SealedChamber_Braille_1C533D + braillemessage Underwater_SealedChamber_Braille_1C533D waitbutton erasebox 0, 0, 29, 19 releaseall diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c index 35264d5e2..219dab818 100644 --- a/src/field/scrcmd.c +++ b/src/field/scrcmd.c @@ -1417,7 +1417,7 @@ bool8 ScrCmd_drawcontestwinner(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_braillemsg(struct ScriptContext *ctx) +bool8 ScrCmd_braillemessage(struct ScriptContext *ctx) { u8 *ptr = (u8 *)ScriptReadWord(ctx); @@ -1441,7 +1441,7 @@ bool8 ScrCmd_vtext(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_bufferpoke(struct ScriptContext *ctx) +bool8 ScrCmd_getspeciesname(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 species = VarGet(ScriptReadHalfword(ctx)); @@ -1450,7 +1450,7 @@ bool8 ScrCmd_bufferpoke(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_bufferfirstpoke(struct ScriptContext *ctx) +bool8 ScrCmd_getfirstpartypokename(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); @@ -1461,7 +1461,7 @@ bool8 ScrCmd_bufferfirstpoke(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_bufferpartypoke(struct ScriptContext *ctx) +bool8 ScrCmd_getpartypokename(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); @@ -1471,7 +1471,7 @@ bool8 ScrCmd_bufferpartypoke(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_bufferitem(struct ScriptContext *ctx) +bool8 ScrCmd_getitemname(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 itemId = VarGet(ScriptReadHalfword(ctx)); @@ -1480,7 +1480,7 @@ bool8 ScrCmd_bufferitem(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_bufferdecor(struct ScriptContext *ctx) +bool8 ScrCmd_getdecorname(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 decorId = VarGet(ScriptReadHalfword(ctx)); @@ -1489,7 +1489,7 @@ bool8 ScrCmd_bufferdecor(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_bufferattack(struct ScriptContext *ctx) +bool8 ScrCmd_getmovename(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 moveId = VarGet(ScriptReadHalfword(ctx)); @@ -1498,7 +1498,7 @@ bool8 ScrCmd_bufferattack(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_buffernum(struct ScriptContext *ctx) +bool8 ScrCmd_getnumberstring(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 v1 = VarGet(ScriptReadHalfword(ctx)); @@ -1508,7 +1508,7 @@ bool8 ScrCmd_buffernum(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_bufferstd(struct ScriptContext *ctx) +bool8 ScrCmd_getstdstring(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 index = VarGet(ScriptReadHalfword(ctx)); @@ -1517,7 +1517,7 @@ bool8 ScrCmd_bufferstd(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_buffertext(struct ScriptContext *ctx) +bool8 ScrCmd_getstring(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u8 *text = (u8 *)ScriptReadWord(ctx); @@ -1778,7 +1778,7 @@ bool8 ScrCmd_pokemartbp(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_pokecasino(struct ScriptContext *ctx) +bool8 ScrCmd_playslotmachine(struct ScriptContext *ctx) { u8 v2 = VarGet(ScriptReadHalfword(ctx)); @@ -1787,7 +1787,7 @@ bool8 ScrCmd_pokecasino(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_event_8a(struct ScriptContext *ctx) +bool8 ScrCmd_plantberrytree(struct ScriptContext *ctx) { u8 treeId = ScriptReadByte(ctx); u8 berry = ScriptReadByte(ctx); -- cgit v1.2.3 From 639493e0ee82d173e58d9a791b37ab08106e16fa Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 1 Oct 2017 12:07:22 -0500 Subject: fix more command names --- asm/macros/event.inc | 12 ++++++------ data-de/event_scripts.s | 6 +++--- data/event_scripts.s | 6 +++--- data/script_cmd_table.inc | 12 ++++++------ data/scripts/maps/DewfordTown_Gym.inc | 10 +++++----- .../maps/LilycoveCity_DepartmentStoreRooftop.inc | 16 ++++++++-------- data/scripts/maps/MauvilleCity_GameCorner.inc | 20 ++++++++++---------- data/scripts/maps/MtChimney.inc | 14 +++++++------- data/scripts/maps/Route109_SeashoreHouse.inc | 14 +++++++------- data/scripts/maps/Route121_SafariZoneEntrance.inc | 10 +++++----- data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc | 14 +++++++------- src/field/scrcmd.c | 12 ++++++------ 12 files changed, 73 insertions(+), 73 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index bad196e93..c313bf44f 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -989,7 +989,7 @@ .endm @ If check is 0x00, this command subtracts value from the player's money. - .macro paymoney value, check + .macro takemoney value, check .byte 0x91 .4byte \value .byte \check @@ -1003,28 +1003,28 @@ .endm @ Spawns a secondary box showing how much money the player has. - .macro showmoney X, Y + .macro showmoneybox X, Y .byte 0x93 .byte \X .byte \Y .endm @ Hides the secondary box spawned by showmoney. - .macro hidemoney X, Y + .macro hidemoneybox X, Y .byte 0x94 .byte \X .byte \Y .endm @ Updates the secondary box spawned by showmoney. (What does it do with its arguments?) - .macro updatemoney X, Y + .macro updatemoneybox X, Y .byte 0x95 .byte \X .byte \Y .endm @ In FireRed, this command is a nop. - .macro event_96 word + .macro getpricereduction word .byte 0x96 .2byte \word .endm @@ -1041,7 +1041,7 @@ .byte \byte2 .endm - .macro darken word + .macro setdarklevel word .byte 0x99 .2byte \word .endm diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index 3ceecaa84..d7045722f 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -4796,7 +4796,7 @@ BattleTower_Lobby_EventScript_1AE30F:: @ 81AE30F gUnknown_081B694A:: @ 81B694A lighten 1 - darken 1 + setdarklevel 1 end .include "data/scripts/players_house.inc" @@ -4825,7 +4825,7 @@ MauvilleCity_GameCorner_EventScript_1C407E:: @ 81C407E compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 0 - event_96 2 + getpricereduction 2 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 @@ -4837,7 +4837,7 @@ MauvilleCity_GameCorner_EventScript_1C40AC:: @ 81C40AC compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 1 - event_96 2 + getpricereduction 2 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 diff --git a/data/event_scripts.s b/data/event_scripts.s index fddae04a9..1ceb9a7c0 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -4764,7 +4764,7 @@ BattleTower_Lobby_EventScript_1AE30F:: @ 81AE30F gUnknown_081B694A:: @ 81B694A lighten 1 - darken 1 + setdarklevel 1 end .include "data/scripts/players_house.inc" @@ -4793,7 +4793,7 @@ MauvilleCity_GameCorner_EventScript_1C407E:: @ 81C407E compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 0 - event_96 2 + getpricereduction 2 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 @@ -4805,7 +4805,7 @@ MauvilleCity_GameCorner_EventScript_1C40AC:: @ 81C40AC compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1572B5 setvar 0x8004, 1 - event_96 2 + getpricereduction 2 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_1C40DA addvar 0x8004, 128 diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 38a4a8f3f..414c2df52 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -145,15 +145,15 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_contestlinktransfer @ 0x8E .4byte ScrCmd_random @ 0x8F .4byte ScrCmd_givemoney @ 0x90 - .4byte ScrCmd_paymoney @ 0x91 + .4byte ScrCmd_takemoney @ 0x91 .4byte ScrCmd_checkmoney @ 0x92 - .4byte ScrCmd_showmoney @ 0x93 - .4byte ScrCmd_hidemoney @ 0x94 - .4byte ScrCmd_updatemoney @ 0x95 - .4byte ScrCmd_event_96 @ 0x96 + .4byte ScrCmd_showmoneybox @ 0x93 + .4byte ScrCmd_hidemoneybox @ 0x94 + .4byte ScrCmd_updatemoneybox @ 0x95 + .4byte ScrCmd_getpricereduction @ 0x96 .4byte ScrCmd_fadescreen @ 0x97 .4byte ScrCmd_fadescreendelay @ 0x98 - .4byte ScrCmd_darken @ 0x99 + .4byte ScrCmd_setdarklevel @ 0x99 .4byte ScrCmd_lighten @ 0x9A .4byte ScrCmd_message2 @ 0x9B .4byte ScrCmd_doanimation @ 0x9C diff --git a/data/scripts/maps/DewfordTown_Gym.inc b/data/scripts/maps/DewfordTown_Gym.inc index 296d2ed2d..65556c739 100644 --- a/data/scripts/maps/DewfordTown_Gym.inc +++ b/data/scripts/maps/DewfordTown_Gym.inc @@ -20,23 +20,23 @@ DewfordTown_Gym_EventScript_153071:: @ 8153071 goto DewfordTown_Gym_EventScript_1530AE DewfordTown_Gym_EventScript_1530AA:: @ 81530AA - darken 0 + setdarklevel 0 return DewfordTown_Gym_EventScript_1530AE:: @ 81530AE - darken 1 + setdarklevel 1 return DewfordTown_Gym_EventScript_1530B2:: @ 81530B2 - darken 2 + setdarklevel 2 return DewfordTown_Gym_EventScript_1530B6:: @ 81530B6 - darken 3 + setdarklevel 3 return DewfordTown_Gym_EventScript_1530BA:: @ 81530BA - darken 4 + setdarklevel 4 return DewfordTown_Gym_EventScript_1530BE:: @ 81530BE diff --git a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc index 03d64bbd1..29914a9b5 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStoreRooftop.inc @@ -3,7 +3,7 @@ LilycoveCity_DepartmentStoreRooftop_MapScripts:: @ 815A13F .byte 0 LilycoveCity_DepartmentStoreRooftop_MapScript1_15A145:: @ 815A145 - event_96 3 + getpricereduction 3 compare RESULT, 1 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A15F compare RESULT, 0 @@ -51,7 +51,7 @@ LilycoveCity_DepartmentStoreRooftop_Decorations:: @ 815A180 LilycoveCity_DepartmentStoreRooftop_EventScript_15A1A0:: @ 815A1A0 lock faceplayer - event_96 3 + getpricereduction 3 compare RESULT, 1 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A1BA msgbox LilycoveCity_DepartmentStoreRooftop_Text_18C61F, 4 @@ -71,7 +71,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A1CD:: @ 815A1CD lockall message LilycoveCity_DepartmentStoreRooftop_Text_18C72B waitmessage - showmoney 0, 0 + showmoneybox 0, 0 nop goto LilycoveCity_DepartmentStoreRooftop_EventScript_15A1DE end @@ -115,15 +115,15 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A24B:: @ 815A24B return LilycoveCity_DepartmentStoreRooftop_EventScript_15A252:: @ 815A252 - paymoney 0xc8, 0 + takemoney 0xc8, 0 return LilycoveCity_DepartmentStoreRooftop_EventScript_15A259:: @ 815A259 - paymoney 0x12c, 0 + takemoney 0x12c, 0 return LilycoveCity_DepartmentStoreRooftop_EventScript_15A260:: @ 815A260 - paymoney 0x15e, 0 + takemoney 0x15e, 0 return LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 @@ -144,7 +144,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A267:: @ 815A267 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A259 compare 0x4001, 2 call_if 1, LilycoveCity_DepartmentStoreRooftop_EventScript_15A260 - updatemoney 0, 0 + updatemoneybox 0, 0 nop getitemname 0, 0x4000 playse 106 @@ -197,6 +197,6 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_15A388:: @ 815A388 end LilycoveCity_DepartmentStoreRooftop_EventScript_15A396:: @ 815A396 - hidemoney 0, 0 + hidemoneybox 0, 0 releaseall end diff --git a/data/scripts/maps/MauvilleCity_GameCorner.inc b/data/scripts/maps/MauvilleCity_GameCorner.inc index 0a853b2fc..8d98f03a8 100644 --- a/data/scripts/maps/MauvilleCity_GameCorner.inc +++ b/data/scripts/maps/MauvilleCity_GameCorner.inc @@ -10,7 +10,7 @@ MauvilleCity_GameCorner_EventScript_156A34:: @ 8156A34 goto_if_eq MauvilleCity_GameCorner_EventScript_156B32 message MauvilleCity_GameCorner_Text_181CB4 waitmessage - showmoney 0, 0 + showmoneybox 0, 0 nop showcoins 0, 5 goto MauvilleCity_GameCorner_EventScript_156A60 @@ -39,13 +39,13 @@ MauvilleCity_GameCorner_EventScript_156AAE:: @ 8156AAE compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156B3C givecoins 50 - paymoney 0x3e8, 0 - updatemoney 0, 0 + takemoney 0x3e8, 0 + updatemoneybox 0, 0 nop updatecoins 0, 5 playse 95 msgbox MauvilleCity_GameCorner_Text_181CFE, 4 - hidemoney 0, 0 + hidemoneybox 0, 0 hidecoins 0, 5 release end @@ -58,13 +58,13 @@ MauvilleCity_GameCorner_EventScript_156AF0:: @ 8156AF0 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156B3C givecoins 500 - paymoney 0x2710, 0 - updatemoney 0, 0 + takemoney 0x2710, 0 + updatemoneybox 0, 0 nop updatecoins 0, 5 playse 95 msgbox MauvilleCity_GameCorner_Text_181CFE, 4 - hidemoney 0, 0 + hidemoneybox 0, 0 hidecoins 0, 5 release end @@ -76,21 +76,21 @@ MauvilleCity_GameCorner_EventScript_156B32:: @ 8156B32 MauvilleCity_GameCorner_EventScript_156B3C:: @ 8156B3C msgbox MauvilleCity_GameCorner_Text_181D28, 4 - hidemoney 0, 0 + hidemoneybox 0, 0 hidecoins 0, 5 release end MauvilleCity_GameCorner_EventScript_156B4C:: @ 8156B4C msgbox MauvilleCity_GameCorner_Text_181D73, 4 - hidemoney 0, 0 + hidemoneybox 0, 0 hidecoins 0, 5 release end MauvilleCity_GameCorner_EventScript_156B5C:: @ 8156B5C msgbox MauvilleCity_GameCorner_Text_181D57, 4 - hidemoney 0, 0 + hidemoneybox 0, 0 hidecoins 0, 5 release end diff --git a/data/scripts/maps/MtChimney.inc b/data/scripts/maps/MtChimney.inc index d206f927e..a8eec9a32 100644 --- a/data/scripts/maps/MtChimney.inc +++ b/data/scripts/maps/MtChimney.inc @@ -15,7 +15,7 @@ MtChimney_MapScript1_15CF92:: @ 815CF92 MtChimney_EventScript_15CF95:: @ 815CF95 lock faceplayer - showmoney 0, 0 + showmoneybox 0, 0 nop msgbox MtChimney_Text_195760, 5 compare RESULT, 0 @@ -30,31 +30,31 @@ MtChimney_EventScript_15CF95:: @ 815CF95 giveitem ITEM_LAVA_COOKIE compare RESULT, 0 goto_if_eq MtChimney_EventScript_15CFF3 - hidemoney 0, 0 + hidemoneybox 0, 0 release end MtChimney_EventScript_15CFF3:: @ 815CFF3 msgbox MtChimney_Text_1A0CC2, 4 - hidemoney 0, 0 + hidemoneybox 0, 0 release end MtChimney_EventScript_15D000:: @ 815D000 - paymoney 0xc8, 0 - updatemoney 0, 0 + takemoney 0xc8, 0 + updatemoneybox 0, 0 nop return MtChimney_EventScript_15D00B:: @ 815D00B msgbox MtChimney_Text_1957F7, 4 - hidemoney 0, 0 + hidemoneybox 0, 0 release end MtChimney_EventScript_15D018:: @ 815D018 msgbox MtChimney_Text_1957BA, 4 - hidemoney 0, 0 + hidemoneybox 0, 0 release end diff --git a/data/scripts/maps/Route109_SeashoreHouse.inc b/data/scripts/maps/Route109_SeashoreHouse.inc index 789ee3e56..4d8d363aa 100644 --- a/data/scripts/maps/Route109_SeashoreHouse.inc +++ b/data/scripts/maps/Route109_SeashoreHouse.inc @@ -40,13 +40,13 @@ Route109_SeashoreHouse_EventScript_160E2C:: @ 8160E2C end Route109_SeashoreHouse_EventScript_160E36:: @ 8160E36 - showmoney 0, 0 + showmoneybox 0, 0 nop msgbox Route109_SeashoreHouse_Text_19B702, 5 compare RESULT, 1 goto_if_eq Route109_SeashoreHouse_EventScript_160E5A msgbox Route109_SeashoreHouse_Text_19B773, 4 - hidemoney 0, 0 + hidemoneybox 0, 0 release end @@ -58,23 +58,23 @@ Route109_SeashoreHouse_EventScript_160E5A:: @ 8160E5A compare RESULT, 0 goto_if_eq Route109_SeashoreHouse_EventScript_160EAB msgbox Route109_SeashoreHouse_Text_19B74C, 4 - paymoney 0x12c, 0 - updatemoney 0, 0 + takemoney 0x12c, 0 + updatemoneybox 0, 0 nop giveitem ITEM_SODA_POP - hidemoney 0, 0 + hidemoneybox 0, 0 release end Route109_SeashoreHouse_EventScript_160E9E:: @ 8160E9E msgbox Route109_SeashoreHouse_Text_19B759, 4 - hidemoney 0, 0 + hidemoneybox 0, 0 release end Route109_SeashoreHouse_EventScript_160EAB:: @ 8160EAB msgbox Route109_SeashoreHouse_Text_1A0CC2, 4 - hidemoney 0, 0 + hidemoneybox 0, 0 release end diff --git a/data/scripts/maps/Route121_SafariZoneEntrance.inc b/data/scripts/maps/Route121_SafariZoneEntrance.inc index c9439ee5f..9649271f4 100644 --- a/data/scripts/maps/Route121_SafariZoneEntrance.inc +++ b/data/scripts/maps/Route121_SafariZoneEntrance.inc @@ -49,7 +49,7 @@ Route121_SafariZoneEntrance_EventScript_15C383:: @ 815C383 lockall applymovement 255, Route121_SafariZoneEntrance_Movement_1A0841 waitmovement 0 - showmoney 0, 0 + showmoneybox 0, 0 nop msgbox Route121_SafariZoneEntrance_Text_1C3832, 5 compare RESULT, 1 @@ -67,8 +67,8 @@ Route121_SafariZoneEntrance_EventScript_15C3B3:: @ 815C3B3 compare RESULT, 0 goto_if_eq Route121_SafariZoneEntrance_EventScript_15C45E msgbox Route121_SafariZoneEntrance_Text_1C38D9, 4 - paymoney 0x1f4, 0 - updatemoney 0, 0 + takemoney 0x1f4, 0 + updatemoneybox 0, 0 nop msgbox Route121_SafariZoneEntrance_Text_1C38F4, 4 playfanfare 370 @@ -77,7 +77,7 @@ Route121_SafariZoneEntrance_EventScript_15C3B3:: @ 815C3B3 waitmessage msgbox Route121_SafariZoneEntrance_Text_1C392D, 4 closemessage - hidemoney 0, 0 + hidemoneybox 0, 0 applymovement 255, Route121_SafariZoneEntrance_Movement_15C47E waitmovement 0 special EnterSafariMode @@ -112,7 +112,7 @@ Route121_SafariZoneEntrance_EventScript_15C45E:: @ 815C45E Route121_SafariZoneEntrance_EventScript_15C46C:: @ 815C46C closemessage - hidemoney 0, 0 + hidemoneybox 0, 0 applymovement 255, Route121_SafariZoneEntrance_Movement_15C47C waitmovement 0 releaseall diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc index f1da0c5a3..1ee8ff39b 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc @@ -31,13 +31,13 @@ SlateportCity_OceanicMuseum_1F_EventScript_155AF5:: @ 8155AF5 end SlateportCity_OceanicMuseum_1F_EventScript_155B06:: @ 8155B06 - showmoney 0, 0 + showmoneybox 0, 0 nop msgbox SlateportCity_OceanicMuseum_1F_Text_17E18D, 5 compare RESULT, 1 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155B2D closemessage - hidemoney 0, 0 + hidemoneybox 0, 0 applymovement 255, SlateportCity_OceanicMuseum_1F_Movement_155B8D waitmovement 0 releaseall @@ -47,12 +47,12 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B2D:: @ 8155B2D checkmoney 0x32, 0 compare RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155B5A - paymoney 0x32, 0 - updatemoney 0, 0 + takemoney 0x32, 0 + updatemoneybox 0, 0 nop msgbox SlateportCity_OceanicMuseum_1F_Text_17E1DE, 4 setvar 0x40aa, 1 - hidemoney 0, 0 + hidemoneybox 0, 0 releaseall end @@ -61,7 +61,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B5A:: @ 8155B5A goto_if 0, SlateportCity_OceanicMuseum_1F_EventScript_155B7B msgbox SlateportCity_OceanicMuseum_1F_Text_17E1F5, 4 closemessage - hidemoney 0, 0 + hidemoneybox 0, 0 applymovement 255, SlateportCity_OceanicMuseum_1F_Movement_155B8D waitmovement 0 releaseall @@ -70,7 +70,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155B5A:: @ 8155B5A SlateportCity_OceanicMuseum_1F_EventScript_155B7B:: @ 8155B7B msgbox SlateportCity_OceanicMuseum_1F_Text_17E22D, 4 setvar 0x40aa, 1 - hidemoney 0, 0 + hidemoneybox 0, 0 releaseall end diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c index 219dab818..5bb4e31c7 100644 --- a/src/field/scrcmd.c +++ b/src/field/scrcmd.c @@ -608,7 +608,7 @@ bool8 ScrCmd_lighten(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_darken(struct ScriptContext *ctx) +bool8 ScrCmd_setdarklevel(struct ScriptContext *ctx) { u16 flashLevel = VarGet(ScriptReadHalfword(ctx)); @@ -1608,7 +1608,7 @@ bool8 ScrCmd_givemoney(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_paymoney(struct ScriptContext *ctx) +bool8 ScrCmd_takemoney(struct ScriptContext *ctx) { u32 amount = ScriptReadWord(ctx); u8 ignore = ScriptReadByte(ctx); @@ -1628,7 +1628,7 @@ bool8 ScrCmd_checkmoney(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_showmoney(struct ScriptContext *ctx) +bool8 ScrCmd_showmoneybox(struct ScriptContext *ctx) { u8 x = ScriptReadByte(ctx); u8 y = ScriptReadByte(ctx); @@ -1639,7 +1639,7 @@ bool8 ScrCmd_showmoney(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_hidemoney(struct ScriptContext *ctx) +bool8 ScrCmd_hidemoneybox(struct ScriptContext *ctx) { u8 x = ScriptReadByte(ctx); u8 y = ScriptReadByte(ctx); @@ -1648,7 +1648,7 @@ bool8 ScrCmd_hidemoney(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_updatemoney(struct ScriptContext *ctx) +bool8 ScrCmd_updatemoneybox(struct ScriptContext *ctx) { u8 x = ScriptReadByte(ctx); u8 y = ScriptReadByte(ctx); @@ -1800,7 +1800,7 @@ bool8 ScrCmd_plantberrytree(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_event_96(struct ScriptContext *ctx) +bool8 ScrCmd_getpricereduction(struct ScriptContext *ctx) { u16 value = VarGet(ScriptReadHalfword(ctx)); -- cgit v1.2.3 From 89092b609a9af15a35b0151442e9881aeab28708 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 1 Oct 2017 12:21:52 -0500 Subject: fix more command names --- asm/macros/event.inc | 14 ++-- data-de/event_scripts.s | 44 +++++------ data-de/field_move_scripts.inc | 34 ++++----- data/event_scripts.s | 44 +++++------ data/field_move_scripts.inc | 34 ++++----- data/script_cmd_table.inc | 14 ++-- data/scripts/cable_club.inc | 8 +- data/scripts/contest_hall.inc | 20 ++--- data/scripts/day_care.inc | 4 +- .../maps/AbandonedShip_HiddenFloorRooms.inc | 88 +++++++++++----------- data/scripts/maps/AncientTomb.inc | 2 +- data/scripts/maps/CaveOfOrigin_B4F.inc | 12 +-- data/scripts/maps/DesertRuins.inc | 2 +- data/scripts/maps/DewfordTown_Gym.inc | 8 +- data/scripts/maps/DewfordTown_House1.inc | 2 +- data/scripts/maps/EverGrandeCity_ChampionsRoom.inc | 6 +- data/scripts/maps/EverGrandeCity_HallOfFame.inc | 6 +- data/scripts/maps/FallarborTown.inc | 2 +- data/scripts/maps/FallarborTown_Mart.inc | 2 +- data/scripts/maps/FortreeCity.inc | 2 +- data/scripts/maps/FortreeCity_House1.inc | 2 +- data/scripts/maps/FortreeCity_House4.inc | 2 +- data/scripts/maps/FortreeCity_House5.inc | 2 +- data/scripts/maps/InsideOfTruck.inc | 2 +- data/scripts/maps/IslandCave.inc | 2 +- data/scripts/maps/LavaridgeTown.inc | 8 +- data/scripts/maps/LavaridgeTown_House.inc | 2 +- data/scripts/maps/LilycoveCity.inc | 8 +- data/scripts/maps/LilycoveCity_ContestLobby.inc | 8 +- .../maps/LilycoveCity_DepartmentStore_1F.inc | 2 +- data/scripts/maps/LilycoveCity_House1.inc | 2 +- data/scripts/maps/LittlerootTown.inc | 16 ++-- .../maps/LittlerootTown_BrendansHouse_1F.inc | 2 +- .../maps/LittlerootTown_BrendansHouse_2F.inc | 6 +- data/scripts/maps/LittlerootTown_MaysHouse_1F.inc | 4 +- data/scripts/maps/LittlerootTown_MaysHouse_2F.inc | 8 +- .../maps/LittlerootTown_ProfessorBirchsLab.inc | 4 +- data/scripts/maps/MossdeepCity_House2.inc | 2 +- data/scripts/maps/MossdeepCity_House4.inc | 2 +- data/scripts/maps/NewMauville_Inside.inc | 6 +- data/scripts/maps/OldaleTown.inc | 2 +- data/scripts/maps/PacifidlogTown_House2.inc | 4 +- data/scripts/maps/Route103.inc | 2 +- data/scripts/maps/Route104_MrBrineysHouse.inc | 2 +- data/scripts/maps/Route109.inc | 2 +- data/scripts/maps/Route110.inc | 4 +- data/scripts/maps/Route110_TrickHouseEntrance.inc | 10 +-- data/scripts/maps/Route114.inc | 2 +- data/scripts/maps/Route119.inc | 4 +- data/scripts/maps/Route119_House.inc | 2 +- data/scripts/maps/Route120.inc | 8 +- data/scripts/maps/Route128.inc | 12 +-- data/scripts/maps/RustboroCity.inc | 4 +- data/scripts/maps/RustboroCity_Flat2_1F.inc | 2 +- data/scripts/maps/RustboroCity_House3.inc | 2 +- data/scripts/maps/RusturfTunnel.inc | 4 +- data/scripts/maps/SSTidalCorridor.inc | 2 +- data/scripts/maps/SeafloorCavern_Room9.inc | 10 +-- data/scripts/maps/SkyPillar_Top.inc | 2 +- data/scripts/maps/SlateportCity_PokemonFanClub.inc | 6 +- data/scripts/maps/SootopolisCity.inc | 6 +- data/scripts/maps/SootopolisCity_House1.inc | 2 +- data/scripts/maps/SootopolisCity_House4.inc | 2 +- data/scripts/maps/SouthernIsland_Interior.inc | 4 +- data/scripts/maps/UnknownMap_25_34.inc | 2 +- .../maps/VerdanturfTown_FriendshipRatersHouse.inc | 2 +- data/scripts/players_house.inc | 8 +- src/field/scrcmd.c | 14 ++-- 68 files changed, 282 insertions(+), 282 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index c313bf44f..ffd1b9f07 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1046,31 +1046,31 @@ .2byte \word .endm - .macro lighten byte + .macro animdarklevel byte .byte 0x9a .byte \byte .endm - .macro message2 pointer + .macro messageautoscroll pointer .byte 0x9b .4byte \pointer .endm @ Executes the specified field move animation. - .macro doanimation animation + .macro dofieldeffect animation .byte 0x9c .2byte \animation .endm @ Tells the game which party Pokmon to use for the next field move animation. - .macro setanimation animation, slot + .macro setfieldeffect animation, slot .byte 0x9d .byte \animation .2byte \slot .endm @ Blocks script execution until all playing field move animations complete. - .macro checkanimation animation + .macro waitfieldeffect animation .byte 0x9e .2byte \animation .endm @@ -1082,12 +1082,12 @@ .endm @ Checks the player's gender. If male, then 0x0000 is stored in variable 0x800D (LASTRESULT). If female, then 0x0001 is stored in LASTRESULT. - .macro checkgender + .macro checkplayergender .byte 0xa0 .endm @ Plays the specified (species) Pokmon's cry. You can use waitcry to block script execution until the sound finishes. - .macro pokecry species, effect + .macro playpokecry species, effect .byte 0xa1 .2byte \species .2byte \effect diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index d7045722f..d29d69f0b 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -388,7 +388,7 @@ gUnknown_0815F36C:: @ 815F36C lockall playse 2 message UnknownString_81A3A72 - doanimation 61 + dofieldeffect 61 waitstate waitmessage waitbutton @@ -449,7 +449,7 @@ gUnknown_0815F43A:: @ 815F43A lockall message UnknownString_81A3A72 playse 2 - doanimation 61 + dofieldeffect 61 waitstate waitmessage waitbutton @@ -520,7 +520,7 @@ EventScript_15F51D: end gUnknown_0815F523:: @ 815F523 - doanimation 52 + dofieldeffect 52 waitstate end @@ -1451,8 +1451,8 @@ OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C waitmessage applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A083F waitmovement 0 - doanimation 25 - checkanimation 25 + dofieldeffect 25 + waitfieldeffect 25 applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A0845 waitmovement 0 special ScrSpecial_HealPlayerParty @@ -1820,13 +1820,13 @@ UseSurfScript:: @ 81A0117 compare RESULT, 6 goto_if_eq UseSurfScript_NoMon getpartypokename 0, RESULT - setanimation 0, RESULT + setfieldeffect 0, RESULT lockall msgbox UseSurfPromptText, 5 compare RESULT, 0 goto_if_eq UseSurfScript_No msgbox UsedSurfText, 4 - doanimation 9 + dofieldeffect 9 UseSurfScript_No: @ 81A014C releaseall UseSurfScript_NoMon: @ 81A014D @@ -1841,7 +1841,7 @@ Route103_EventScript_1A014E:: @ 81A014E Route110_EventScript_1A014E:: @ 81A014E Route119_EventScript_1A014E:: @ 81A014E RustboroCity_EventScript_1A014E:: @ 81A014E - checkgender + checkplayergender compare RESULT, 0 goto_if_eq RustboroCity_EventScript_1A0166 compare RESULT, 1 @@ -1859,7 +1859,7 @@ RustboroCity_EventScript_1A016C:: @ 81A016C LavaridgeTown_EventScript_1A0172:: @ 81A0172 Route110_EventScript_1A0172:: @ 81A0172 Route119_EventScript_1A0172:: @ 81A0172 - checkgender + checkplayergender compare RESULT, 0 goto_if_eq LavaridgeTown_EventScript_1A018A compare RESULT, 1 @@ -2297,7 +2297,7 @@ SouthernIsland_Exterior_EventScript_1A047C:: @ 81A047C CaveOfOrigin_B4F_EventScript_1A04A0:: @ 81A04A0 lockall waitse - pokecry SPECIES_GROUDON_OR_KYOGRE, 2 + playpokecry SPECIES_GROUDON_OR_KYOGRE, 2 waitpokecry setvar 0x4005, 1 releaseall @@ -2352,7 +2352,7 @@ MagmaHideout_B1F_EventScript_1A04FD:: @ 81A04FD faceplayer setwildbattle SPECIES_ELECTRODE, 30, ITEM_NONE waitse - pokecry SPECIES_ELECTRODE, 2 + playpokecry SPECIES_ELECTRODE, 2 delay 40 waitpokecry setflag 977 @@ -2368,7 +2368,7 @@ MagmaHideout_B1F_EventScript_1A051B:: @ 81A051B faceplayer setwildbattle SPECIES_ELECTRODE, 30, ITEM_NONE waitse - pokecry SPECIES_ELECTRODE, 2 + playpokecry SPECIES_ELECTRODE, 2 delay 40 waitpokecry setflag 978 @@ -2451,7 +2451,7 @@ Route119_EventScript_1A05C3:: @ 81A05C3 applymovement LAST_TALKED, Route119_Movement_1A0662 waitmovement 0 waitse - pokecry SPECIES_KECLEON, 2 + playpokecry SPECIES_KECLEON, 2 delay 40 waitpokecry setwildbattle SPECIES_KECLEON, 30, ITEM_NONE @@ -3621,7 +3621,7 @@ gUnknown_081A2C51:: @ 81A2C51 compare RESULT, 1 goto_if_eq EventScript_1A2E45 checkpokemove MOVE_SECRET_POWER - setanimation 0, RESULT + setfieldeffect 0, RESULT getmovename 1, MOVE_SECRET_POWER compare 0x8007, 1 goto_if_eq EventScript_1A2CB0 @@ -3647,14 +3647,14 @@ EventScript_1A2CB0: goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closemessage - doanimation 11 + dofieldeffect 11 waitstate goto EventScript_1A2CFA end gUnknown_081A2CE6:: @ 81A2CE6 lockall - doanimation 11 + dofieldeffect 11 waitstate goto EventScript_1A2CFA end @@ -3678,14 +3678,14 @@ EventScript_1A2D08: goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closemessage - doanimation 26 + dofieldeffect 26 waitstate goto EventScript_1A2D52 end gUnknown_081A2D3E:: @ 81A2D3E lockall - doanimation 26 + dofieldeffect 26 waitstate goto EventScript_1A2D52 end @@ -3709,14 +3709,14 @@ EventScript_1A2D60: goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closemessage - doanimation 27 + dofieldeffect 27 waitstate goto EventScript_1A2DAA end gUnknown_081A2D96:: @ 81A2D96 lockall - doanimation 27 + dofieldeffect 27 waitstate goto EventScript_1A2DAA end @@ -3792,7 +3792,7 @@ EventScript_1A2E45: checkpokemove MOVE_SECRET_POWER compare RESULT, 6 goto_if_eq EventScript_1A2EF7 - setanimation 0, RESULT + setfieldeffect 0, RESULT setorcopyvar 0x8004, RESULT lockall special GetSecretBaseNearbyMapName @@ -4795,7 +4795,7 @@ BattleTower_Lobby_EventScript_1AE30F:: @ 81AE30F .include "data/text/magma_summit.inc" gUnknown_081B694A:: @ 81B694A - lighten 1 + animdarklevel 1 setdarklevel 1 end diff --git a/data-de/field_move_scripts.inc b/data-de/field_move_scripts.inc index fb8decc67..497408299 100644 --- a/data-de/field_move_scripts.inc +++ b/data-de/field_move_scripts.inc @@ -5,7 +5,7 @@ S_CuttableTree:: @ 81B0DCC checkpokemove MOVE_CUT compare RESULT, 6 goto_if_eq CannotUseCut - setanimation 0, RESULT + setfieldeffect 0, RESULT getpartypokename 0, RESULT getmovename 1, MOVE_CUT msgbox UseCutPromptText, 5 @@ -13,14 +13,14 @@ S_CuttableTree:: @ 81B0DCC goto_if_eq Cut_ChoseNo msgbox UsedCutRockSmashText, 4 closemessage - doanimation 2 + dofieldeffect 2 waitstate goto DoTreeCutMovement end S_UseCut:: @ 81B0E16 lockall - doanimation 2 + dofieldeffect 2 waitstate goto DoTreeCutMovement end @@ -66,7 +66,7 @@ S_BreakableRock:: @ 81B0EB7 checkpokemove MOVE_ROCK_SMASH compare RESULT, 6 goto_if_eq CannotUseRockSmash - setanimation 0, RESULT + setfieldeffect 0, RESULT getpartypokename 0, RESULT getmovename 1, MOVE_ROCK_SMASH msgbox UseRockSmashPromptText, 5 @@ -74,14 +74,14 @@ S_BreakableRock:: @ 81B0EB7 goto_if_eq RockSmash_ChoseNo msgbox UsedCutRockSmashText, 4 closemessage - doanimation 37 + dofieldeffect 37 waitstate goto DoRockSmashMovement end S_UseRockSmash:: @ 81B0F01 lockall - doanimation 37 + dofieldeffect 37 waitstate goto DoRockSmashMovement end @@ -135,19 +135,19 @@ S_PushableBoulder:: @ 81B0FCB checkpokemove 70 compare RESULT, 6 goto_if_eq CannotUseStrength - setanimation 0, RESULT + setfieldeffect 0, RESULT msgbox UseStrengthPromptText, 5 compare RESULT, 0 goto_if_eq Strength_ChoseNo closemessage - doanimation 40 + dofieldeffect 40 waitstate goto UsedStrength end S_UseStrength:: @ 81B100E lockall - doanimation 40 + dofieldeffect 40 waitstate goto UsedStrength end @@ -197,12 +197,12 @@ S_UseWaterfall:: @ 81B115A compare RESULT, 6 goto_if_eq Waterfall_NoMonKnows getpartypokename 0, RESULT - setanimation 0, RESULT + setfieldeffect 0, RESULT msgbox UseWaterfallPromptText, 5 compare RESULT, 0 goto_if_eq Waterfall_Done msgbox UsedWaterfallText, 4 - doanimation 43 + dofieldeffect 43 goto Waterfall_Done S_CannotUseWaterfall:: @ 81B1194 @@ -230,13 +230,13 @@ UseDiveScript:: @ 81B1220 compare RESULT, 6 goto_if_eq CannotUseDive getpartypokename 0, RESULT - setanimation 0, RESULT - setanimation 1, 1 + setfieldeffect 0, RESULT + setfieldeffect 1, 1 msgbox UseDivePromptText, 5 compare RESULT, 0 goto_if_eq Dive_Done msgbox UsedDiveText, 4 - doanimation 44 + dofieldeffect 44 goto Dive_Done lockall @@ -253,13 +253,13 @@ S_UseDiveUnderwater:: @ 81B1269 compare RESULT, 6 goto_if_eq UnderwaterCannotUseDive getpartypokename 0, RESULT - setanimation 0, RESULT - setanimation 1, 1 + setfieldeffect 0, RESULT + setfieldeffect 1, 1 msgbox UnderwaterUseDivePromptText, 5 compare RESULT, 0 goto_if_eq UnderwaterDive_Done msgbox UsedDiveText, 4 - doanimation 44 + dofieldeffect 44 goto UnderwaterDive_Done UnderwaterCannotUseDive: @ 81B12A7 diff --git a/data/event_scripts.s b/data/event_scripts.s index 1ceb9a7c0..eb29c159d 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -388,7 +388,7 @@ gUnknown_0815F36C:: @ 815F36C lockall playse 2 message UnknownString_81A3A72 - doanimation 61 + dofieldeffect 61 waitstate waitmessage waitbutton @@ -449,7 +449,7 @@ gUnknown_0815F43A:: @ 815F43A lockall message UnknownString_81A3A72 playse 2 - doanimation 61 + dofieldeffect 61 waitstate waitmessage waitbutton @@ -520,7 +520,7 @@ EventScript_15F51D: end gUnknown_0815F523:: @ 815F523 - doanimation 52 + dofieldeffect 52 waitstate end @@ -1445,8 +1445,8 @@ do_heal_party:: @ 819FD7C waitmessage applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A083F waitmovement 0 - doanimation 25 - checkanimation 25 + dofieldeffect 25 + waitfieldeffect 25 applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A0845 waitmovement 0 special ScrSpecial_HealPlayerParty @@ -1814,13 +1814,13 @@ UseSurfScript:: @ 81A0117 compare RESULT, 6 goto_if_eq UseSurfScript_NoMon getpartypokename 0, RESULT - setanimation 0, RESULT + setfieldeffect 0, RESULT lockall msgbox UseSurfPromptText, 5 compare RESULT, 0 goto_if_eq UseSurfScript_No msgbox UsedSurfText, 4 - doanimation 9 + dofieldeffect 9 UseSurfScript_No: @ 81A014C releaseall UseSurfScript_NoMon: @ 81A014D @@ -1835,7 +1835,7 @@ Route103_EventScript_1A014E:: @ 81A014E Route110_EventScript_1A014E:: @ 81A014E Route119_EventScript_1A014E:: @ 81A014E RustboroCity_EventScript_1A014E:: @ 81A014E - checkgender + checkplayergender compare RESULT, 0 goto_if_eq RustboroCity_EventScript_1A0166 compare RESULT, 1 @@ -1853,7 +1853,7 @@ RustboroCity_EventScript_1A016C:: @ 81A016C LavaridgeTown_EventScript_1A0172:: @ 81A0172 Route110_EventScript_1A0172:: @ 81A0172 Route119_EventScript_1A0172:: @ 81A0172 - checkgender + checkplayergender compare RESULT, 0 goto_if_eq LavaridgeTown_EventScript_1A018A compare RESULT, 1 @@ -2291,7 +2291,7 @@ SouthernIsland_Exterior_EventScript_1A047C:: @ 81A047C CaveOfOrigin_B4F_EventScript_1A04A0:: @ 81A04A0 lockall waitse - pokecry SPECIES_GROUDON_OR_KYOGRE, 2 + playpokecry SPECIES_GROUDON_OR_KYOGRE, 2 waitpokecry setvar 0x4005, 1 releaseall @@ -2346,7 +2346,7 @@ MagmaHideout_B1F_EventScript_1A04FD:: @ 81A04FD faceplayer setwildbattle SPECIES_ELECTRODE, 30, ITEM_NONE waitse - pokecry SPECIES_ELECTRODE, 2 + playpokecry SPECIES_ELECTRODE, 2 delay 40 waitpokecry setflag 977 @@ -2362,7 +2362,7 @@ MagmaHideout_B1F_EventScript_1A051B:: @ 81A051B faceplayer setwildbattle SPECIES_ELECTRODE, 30, ITEM_NONE waitse - pokecry SPECIES_ELECTRODE, 2 + playpokecry SPECIES_ELECTRODE, 2 delay 40 waitpokecry setflag 978 @@ -2445,7 +2445,7 @@ Route119_EventScript_1A05C3:: @ 81A05C3 applymovement LAST_TALKED, Route119_Movement_1A0662 waitmovement 0 waitse - pokecry SPECIES_KECLEON, 2 + playpokecry SPECIES_KECLEON, 2 delay 40 waitpokecry setwildbattle SPECIES_KECLEON, 30, ITEM_NONE @@ -3600,7 +3600,7 @@ gUnknown_081A2C51:: @ 81A2C51 compare RESULT, 1 goto_if_eq EventScript_1A2E45 checkpokemove MOVE_SECRET_POWER - setanimation 0, RESULT + setfieldeffect 0, RESULT getmovename 1, MOVE_SECRET_POWER compare 0x8007, 1 goto_if_eq EventScript_1A2CB0 @@ -3626,14 +3626,14 @@ EventScript_1A2CB0: goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closemessage - doanimation 11 + dofieldeffect 11 waitstate goto EventScript_1A2CFA end gUnknown_081A2CE6:: @ 81A2CE6 lockall - doanimation 11 + dofieldeffect 11 waitstate goto EventScript_1A2CFA end @@ -3657,14 +3657,14 @@ EventScript_1A2D08: goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closemessage - doanimation 26 + dofieldeffect 26 waitstate goto EventScript_1A2D52 end gUnknown_081A2D3E:: @ 81A2D3E lockall - doanimation 26 + dofieldeffect 26 waitstate goto EventScript_1A2D52 end @@ -3688,14 +3688,14 @@ EventScript_1A2D60: goto_if_eq EventScript_1A2F3A msgbox UsedCutRockSmashText, 4 closemessage - doanimation 27 + dofieldeffect 27 waitstate goto EventScript_1A2DAA end gUnknown_081A2D96:: @ 81A2D96 lockall - doanimation 27 + dofieldeffect 27 waitstate goto EventScript_1A2DAA end @@ -3771,7 +3771,7 @@ EventScript_1A2E45: checkpokemove MOVE_SECRET_POWER compare RESULT, 6 goto_if_eq EventScript_1A2EF7 - setanimation 0, RESULT + setfieldeffect 0, RESULT setorcopyvar 0x8004, RESULT lockall special GetSecretBaseNearbyMapName @@ -4763,7 +4763,7 @@ BattleTower_Lobby_EventScript_1AE30F:: @ 81AE30F .include "data/text/magma_summit.inc" gUnknown_081B694A:: @ 81B694A - lighten 1 + animdarklevel 1 setdarklevel 1 end diff --git a/data/field_move_scripts.inc b/data/field_move_scripts.inc index a3fbce103..c36f95460 100644 --- a/data/field_move_scripts.inc +++ b/data/field_move_scripts.inc @@ -5,7 +5,7 @@ S_CuttableTree:: @ 81B0DCC checkpokemove MOVE_CUT compare RESULT, 6 goto_if_eq CannotUseCut - setanimation 0, RESULT + setfieldeffect 0, RESULT getpartypokename 0, RESULT getmovename 1, MOVE_CUT msgbox UseCutPromptText, 5 @@ -13,14 +13,14 @@ S_CuttableTree:: @ 81B0DCC goto_if_eq Cut_ChoseNo msgbox UsedCutRockSmashText, 4 closemessage - doanimation 2 + dofieldeffect 2 waitstate goto DoTreeCutMovement end S_UseCut:: @ 81B0E16 lockall - doanimation 2 + dofieldeffect 2 waitstate goto DoTreeCutMovement end @@ -63,7 +63,7 @@ S_BreakableRock:: @ 81B0EB7 checkpokemove MOVE_ROCK_SMASH compare RESULT, 6 goto_if_eq CannotUseRockSmash - setanimation 0, RESULT + setfieldeffect 0, RESULT getpartypokename 0, RESULT getmovename 1, MOVE_ROCK_SMASH msgbox UseRockSmashPromptText, 5 @@ -71,14 +71,14 @@ S_BreakableRock:: @ 81B0EB7 goto_if_eq RockSmash_ChoseNo msgbox UsedCutRockSmashText, 4 closemessage - doanimation 37 + dofieldeffect 37 waitstate goto DoRockSmashMovement end S_UseRockSmash:: @ 81B0F01 lockall - doanimation 37 + dofieldeffect 37 waitstate goto DoRockSmashMovement end @@ -132,19 +132,19 @@ S_PushableBoulder:: @ 81B0FCB checkpokemove 70 compare RESULT, 6 goto_if_eq CannotUseStrength - setanimation 0, RESULT + setfieldeffect 0, RESULT msgbox UseStrengthPromptText, 5 compare RESULT, 0 goto_if_eq Strength_ChoseNo closemessage - doanimation 40 + dofieldeffect 40 waitstate goto UsedStrength end S_UseStrength:: @ 81B100E lockall - doanimation 40 + dofieldeffect 40 waitstate goto UsedStrength end @@ -194,12 +194,12 @@ S_UseWaterfall:: @ 81B115A compare RESULT, 6 goto_if_eq Waterfall_NoMonKnows getpartypokename 0, RESULT - setanimation 0, RESULT + setfieldeffect 0, RESULT msgbox UseWaterfallPromptText, 5 compare RESULT, 0 goto_if_eq Waterfall_Done msgbox UsedWaterfallText, 4 - doanimation 43 + dofieldeffect 43 goto Waterfall_Done S_CannotUseWaterfall:: @ 81B1194 @@ -227,13 +227,13 @@ UseDiveScript:: @ 81B1220 compare RESULT, 6 goto_if_eq CannotUseDive getpartypokename 0, RESULT - setanimation 0, RESULT - setanimation 1, 1 + setfieldeffect 0, RESULT + setfieldeffect 1, 1 msgbox UseDivePromptText, 5 compare RESULT, 0 goto_if_eq Dive_Done msgbox UsedDiveText, 4 - doanimation 44 + dofieldeffect 44 goto Dive_Done lockall @@ -250,13 +250,13 @@ S_UseDiveUnderwater:: @ 81B1269 compare RESULT, 6 goto_if_eq UnderwaterCannotUseDive getpartypokename 0, RESULT - setanimation 0, RESULT - setanimation 1, 1 + setfieldeffect 0, RESULT + setfieldeffect 1, 1 msgbox UnderwaterUseDivePromptText, 5 compare RESULT, 0 goto_if_eq UnderwaterDive_Done msgbox UsedDiveText, 4 - doanimation 44 + dofieldeffect 44 goto UnderwaterDive_Done UnderwaterCannotUseDive: @ 81B12A7 diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 414c2df52..a72341143 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -154,14 +154,14 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_fadescreen @ 0x97 .4byte ScrCmd_fadescreendelay @ 0x98 .4byte ScrCmd_setdarklevel @ 0x99 - .4byte ScrCmd_lighten @ 0x9A - .4byte ScrCmd_message2 @ 0x9B - .4byte ScrCmd_doanimation @ 0x9C - .4byte ScrCmd_setanimation @ 0x9D - .4byte ScrCmd_checkanimation @ 0x9E + .4byte ScrCmd_animdarklevel @ 0x9A + .4byte ScrCmd_messageautoscroll @ 0x9B + .4byte ScrCmd_dofieldeffect @ 0x9C + .4byte ScrCmd_setfieldeffect @ 0x9D + .4byte ScrCmd_waitfieldeffect @ 0x9E .4byte ScrCmd_sethealplace @ 0x9F - .4byte ScrCmd_checkgender @ 0xA0 - .4byte ScrCmd_pokecry @ 0xA1 + .4byte ScrCmd_checkplayergender @ 0xA0 + .4byte ScrCmd_playpokecry @ 0xA1 .4byte ScrCmd_setmaptile @ 0xA2 .4byte ScrCmd_resetweather @ 0xA3 .4byte ScrCmd_setweather @ 0xA4 diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index 63209e77b..009dc8dff 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -219,7 +219,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3F5E:: @ 81A3F5E special SavePlayerParty special LoadPlayerBag copyvar 0x4087, 0x8004 - message2 OldaleTown_PokemonCenter_2F_Text_1A4A22 + messageautoscroll OldaleTown_PokemonCenter_2F_Text_1A4A22 waitmessage setmaptile 5, 3, 514, 0 special DrawWholeMapView @@ -384,7 +384,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A40FA:: @ 81A40FA OldaleTown_PokemonCenter_2F_EventScript_1A4166:: @ 81A4166 setvar 0x8004, 3 copyvar 0x4087, 0x8004 - message2 OldaleTown_PokemonCenter_2F_Text_1A4A22 + messageautoscroll OldaleTown_PokemonCenter_2F_Text_1A4A22 waitmessage setmaptile 8, 3, 514, 0 special DrawWholeMapView @@ -482,7 +482,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4229:: @ 81A4229 OldaleTown_PokemonCenter_2F_EventScript_1A4294:: @ 81A4294 setvar 0x8004, 4 copyvar 0x4087, 0x8004 - message2 OldaleTown_PokemonCenter_2F_Text_1A4A22 + messageautoscroll OldaleTown_PokemonCenter_2F_Text_1A4A22 waitmessage setmaptile 11, 3, 514, 0 special DrawWholeMapView @@ -797,7 +797,7 @@ TradeRoom_PromptToCancelLink:: @ 81A44E5 end TradeRoom_TerminateLink:: @ 81A44FE - message2 TradeRoom_TerminatingLink + messageautoscroll TradeRoom_TerminatingLink waitmessage special sub_80839D0 end diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index 56499fced..6209a8e6d 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -276,7 +276,7 @@ LinkContestRoom1_EventScript_1A525F:: @ 81A525F return LinkContestRoom1_EventScript_1A5273:: @ 81A5273 - message2 LinkContestRoom1_Text_1A6976 + messageautoscroll LinkContestRoom1_Text_1A6976 waitmessage return @@ -364,7 +364,7 @@ LinkContestRoom1_EventScript_1A535E:: @ 81A535E return LinkContestRoom1_EventScript_1A5370:: @ 81A5370 - message2 LinkContestRoom1_Text_1A6A04 + messageautoscroll LinkContestRoom1_Text_1A6A04 waitmessage return @@ -391,7 +391,7 @@ LinkContestRoom1_EventScript_1A53B3:: @ 81A53B3 return LinkContestRoom1_EventScript_1A53C7:: @ 81A53C7 - message2 LinkContestRoom1_Text_1A6A1F + messageautoscroll LinkContestRoom1_Text_1A6A1F waitmessage return @@ -402,7 +402,7 @@ LinkContestRoom1_EventScript_1A53CE:: @ 81A53CE return LinkContestRoom1_EventScript_1A53DF:: @ 81A53DF - message2 LinkContestRoom1_Text_1A6AE1 + messageautoscroll LinkContestRoom1_Text_1A6AE1 return LinkContestRoom1_EventScript_1A53E5:: @ 81A53E5 @@ -788,7 +788,7 @@ LinkContestRoom1_EventScript_1A5930:: @ 81A5930 return LinkContestRoom1_EventScript_1A5944:: @ 81A5944 - message2 LinkContestRoom1_Text_1A6AF5 + messageautoscroll LinkContestRoom1_Text_1A6AF5 return LinkContestRoom1_EventScript_1A594A:: @ 81A594A @@ -815,7 +815,7 @@ LinkContestRoom1_EventScript_1A5984:: @ 81A5984 return LinkContestRoom1_EventScript_1A5998:: @ 81A5998 - message2 LinkContestRoom1_Text_1A6C06 + messageautoscroll LinkContestRoom1_Text_1A6C06 waitmessage delay 30 return @@ -827,7 +827,7 @@ LinkContestRoom1_EventScript_1A59A2:: @ 81A59A2 return LinkContestRoom1_EventScript_1A59B6:: @ 81A59B6 - message2 LinkContestRoom1_Text_1A6C21 + messageautoscroll LinkContestRoom1_Text_1A6C21 waitmessage delay 30 return @@ -839,7 +839,7 @@ LinkContestRoom1_EventScript_1A59C0:: @ 81A59C0 return LinkContestRoom1_EventScript_1A59D4:: @ 81A59D4 - message2 LinkContestRoom1_Text_1A6C9D + messageautoscroll LinkContestRoom1_Text_1A6C9D waitmessage delay 30 return @@ -851,7 +851,7 @@ LinkContestRoom1_EventScript_1A59DE:: @ 81A59DE return LinkContestRoom1_EventScript_1A59F2:: @ 81A59F2 - message2 LinkContestRoom1_Text_1A6D16 + messageautoscroll LinkContestRoom1_Text_1A6D16 waitmessage delay 30 return @@ -901,7 +901,7 @@ LinkContestRoom1_EventScript_1A5A75:: @ 81A5A75 return LinkContestRoom1_EventScript_1A5A89:: @ 81A5A89 - message2 LinkContestRoom1_Text_1A6D3C + messageautoscroll LinkContestRoom1_Text_1A6D3C waitmessage return diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc index 23e61063c..43084cc96 100644 --- a/data/scripts/day_care.inc +++ b/data/scripts/day_care.inc @@ -110,7 +110,7 @@ Route117_PokemonDayCare_EventScript_1B236C:: @ 81B236C goto_if_eq Route117_PokemonDayCare_EventScript_1B23FD specialvar 0x8005, sub_8042328 waitse - pokecry 0x8005, 0 + playpokecry 0x8005, 0 msgbox Route117_PokemonDayCare_Text_1B296E, 4 waitpokecry special Daycare_SendPokemon_Special @@ -211,7 +211,7 @@ Route117_PokemonDayCare_EventScript_1B24DE:: @ 81B24DE playse 95 msgbox Route117_PokemonDayCare_Text_1B2B75, 4 waitse - pokecry RESULT, 0 + playpokecry RESULT, 0 msgbox Route117_PokemonDayCare_Text_1B2B93, 4 waitpokecry specialvar RESULT, sp0B6_daycare diff --git a/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc b/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc index cc9074e35..eb5c1dccd 100644 --- a/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc +++ b/data/scripts/maps/AbandonedShip_HiddenFloorRooms.inc @@ -39,14 +39,14 @@ AbandonedShip_HiddenFloorRooms_EventScript_15ED95:: @ 815ED95 AbandonedShip_HiddenFloorRooms_EventScript_15ED9B:: @ 815ED9B delay 20 - setanimation 0, 10 - setanimation 1, 10 - setanimation 2, 0 - doanimation 54 + setfieldeffect 0, 10 + setfieldeffect 1, 10 + setfieldeffect 2, 0 + dofieldeffect 54 specialvar RESULT, sub_810F4D4 compare RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE8B - checkanimation 54 + waitfieldeffect 54 delay 10 end @@ -60,7 +60,7 @@ AbandonedShip_HiddenFloorRooms_EventScript_15EDC5:: @ 815EDC5 delay 20 compare RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE6B - checkanimation 54 + waitfieldeffect 54 delay 10 end @@ -69,39 +69,39 @@ AbandonedShip_HiddenFloorRooms_EventScript_15EDEA:: @ 815EDEA AbandonedShip_HiddenFloorRooms_EventScript_15EDEB:: @ 815EDEB delay 20 - setanimation 0, 8 - setanimation 1, 5 - setanimation 2, 0 - doanimation 54 - setanimation 0, 11 - setanimation 1, 3 - setanimation 2, 0 - doanimation 54 + setfieldeffect 0, 8 + setfieldeffect 1, 5 + setfieldeffect 2, 0 + dofieldeffect 54 + setfieldeffect 0, 11 + setfieldeffect 1, 3 + setfieldeffect 2, 0 + dofieldeffect 54 specialvar RESULT, sub_810F4FC compare RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE9B - checkanimation 54 + waitfieldeffect 54 delay 10 end AbandonedShip_HiddenFloorRooms_EventScript_15EE23:: @ 815EE23 delay 20 - setanimation 0, 16 - setanimation 1, 3 - setanimation 2, 0 - doanimation 54 - setanimation 0, 25 - setanimation 1, 2 - setanimation 2, 0 - doanimation 54 - setanimation 0, 24 - setanimation 1, 6 - setanimation 2, 0 - doanimation 54 + setfieldeffect 0, 16 + setfieldeffect 1, 3 + setfieldeffect 2, 0 + dofieldeffect 54 + setfieldeffect 0, 25 + setfieldeffect 1, 2 + setfieldeffect 2, 0 + dofieldeffect 54 + setfieldeffect 0, 24 + setfieldeffect 1, 6 + setfieldeffect 2, 0 + dofieldeffect 54 specialvar RESULT, sub_810F4B0 compare RESULT, 0 call_if 1, AbandonedShip_HiddenFloorRooms_EventScript_15EE7B - checkanimation 54 + waitfieldeffect 54 delay 10 end @@ -109,31 +109,31 @@ AbandonedShip_HiddenFloorRooms_EventScript_15EE6A:: @ 815EE6A end AbandonedShip_HiddenFloorRooms_EventScript_15EE6B:: @ 815EE6B - setanimation 0, 42 - setanimation 1, 10 - setanimation 2, 0 - doanimation 54 + setfieldeffect 0, 42 + setfieldeffect 1, 10 + setfieldeffect 2, 0 + dofieldeffect 54 return AbandonedShip_HiddenFloorRooms_EventScript_15EE7B:: @ 815EE7B - setanimation 0, 20 - setanimation 1, 5 - setanimation 2, 0 - doanimation 54 + setfieldeffect 0, 20 + setfieldeffect 1, 5 + setfieldeffect 2, 0 + dofieldeffect 54 return AbandonedShip_HiddenFloorRooms_EventScript_15EE8B:: @ 815EE8B - setanimation 0, 1 - setanimation 1, 12 - setanimation 2, 0 - doanimation 54 + setfieldeffect 0, 1 + setfieldeffect 1, 12 + setfieldeffect 2, 0 + dofieldeffect 54 return AbandonedShip_HiddenFloorRooms_EventScript_15EE9B:: @ 815EE9B - setanimation 0, 1 - setanimation 1, 2 - setanimation 2, 0 - doanimation 54 + setfieldeffect 0, 1 + setfieldeffect 1, 2 + setfieldeffect 2, 0 + dofieldeffect 54 return AbandonedShip_HiddenFloorRooms_EventScript_15EEAB:: @ 815EEAB diff --git a/data/scripts/maps/AncientTomb.inc b/data/scripts/maps/AncientTomb.inc index 6f6499b26..188691e73 100644 --- a/data/scripts/maps/AncientTomb.inc +++ b/data/scripts/maps/AncientTomb.inc @@ -58,7 +58,7 @@ AncientTomb_EventScript_15F050:: @ 815F050 lock faceplayer waitse - pokecry SPECIES_REGISTEEL, 2 + playpokecry SPECIES_REGISTEEL, 2 delay 40 waitpokecry setwildbattle SPECIES_REGISTEEL, 40, ITEM_NONE diff --git a/data/scripts/maps/CaveOfOrigin_B4F.inc b/data/scripts/maps/CaveOfOrigin_B4F.inc index 503b9f1a8..e8270030b 100644 --- a/data/scripts/maps/CaveOfOrigin_B4F.inc +++ b/data/scripts/maps/CaveOfOrigin_B4F.inc @@ -38,11 +38,11 @@ CaveOfOrigin_B4F_EventScript_15DDD7:: @ 815DDD7 special WaitWeather waitstate playse 209 - setanimation 0, 9 - setanimation 1, 13 - setanimation 2, 0 - doanimation 54 - checkanimation 54 + setfieldeffect 0, 9 + setfieldeffect 1, 13 + setfieldeffect 2, 0 + dofieldeffect 54 + waitfieldeffect 54 .ifdef SAPPHIRE setvar RESULT, 3 .else @@ -58,7 +58,7 @@ CaveOfOrigin_B4F_EventScript_15DDD7:: @ 815DDD7 delay 60 setwildbattle SPECIES_GROUDON_OR_KYOGRE, 45, ITEM_NONE waitse - pokecry SPECIES_GROUDON_OR_KYOGRE, 2 + playpokecry SPECIES_GROUDON_OR_KYOGRE, 2 delay 40 waitpokecry setflag 2145 diff --git a/data/scripts/maps/DesertRuins.inc b/data/scripts/maps/DesertRuins.inc index 93cbb8fe8..9f6f7b388 100644 --- a/data/scripts/maps/DesertRuins.inc +++ b/data/scripts/maps/DesertRuins.inc @@ -58,7 +58,7 @@ DesertRuins_EventScript_15CB85:: @ 815CB85 lock faceplayer waitse - pokecry SPECIES_REGIROCK, 2 + playpokecry SPECIES_REGIROCK, 2 delay 40 waitpokecry setwildbattle SPECIES_REGIROCK, 40, ITEM_NONE diff --git a/data/scripts/maps/DewfordTown_Gym.inc b/data/scripts/maps/DewfordTown_Gym.inc index 65556c739..92776afb1 100644 --- a/data/scripts/maps/DewfordTown_Gym.inc +++ b/data/scripts/maps/DewfordTown_Gym.inc @@ -57,25 +57,25 @@ DewfordTown_Gym_EventScript_1530F5:: @ 81530F5 DewfordTown_Gym_EventScript_1530F6:: @ 81530F6 playse 35 - lighten 3 + animdarklevel 3 call DewfordTown_Gym_EventScript_153071 return DewfordTown_Gym_EventScript_153101:: @ 8153101 playse 35 - lighten 2 + animdarklevel 2 call DewfordTown_Gym_EventScript_153071 return DewfordTown_Gym_EventScript_15310C:: @ 815310C playse 35 - lighten 1 + animdarklevel 1 call DewfordTown_Gym_EventScript_153071 return DewfordTown_Gym_EventScript_153117:: @ 8153117 playse 35 - lighten 0 + animdarklevel 0 call DewfordTown_Gym_EventScript_153071 return diff --git a/data/scripts/maps/DewfordTown_House1.inc b/data/scripts/maps/DewfordTown_House1.inc index 321e376bd..e8897b974 100644 --- a/data/scripts/maps/DewfordTown_House1.inc +++ b/data/scripts/maps/DewfordTown_House1.inc @@ -13,7 +13,7 @@ DewfordTown_House1_EventScript_153001:: @ 8153001 lock faceplayer waitse - pokecry SPECIES_ZIGZAGOON, 0 + playpokecry SPECIES_ZIGZAGOON, 0 msgbox DewfordTown_House1_Text_174CC8, 4 waitpokecry release diff --git a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc index febd6a521..90df9ab4e 100644 --- a/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc +++ b/data/scripts/maps/EverGrandeCity_ChampionsRoom.inc @@ -52,14 +52,14 @@ EverGrandeCity_ChampionsRoom_EventScript_15B821:: @ 815B821 msgbox EverGrandeCity_ChampionsRoom_Text_1910FE, 4 closemessage playse 8 - checkgender + checkplayergender compare RESULT, 0 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B87C compare RESULT, 1 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B881 addobject 2 call EverGrandeCity_ChampionsRoom_EventScript_15B9BD - checkgender + checkplayergender compare RESULT, 0 goto_if_eq EverGrandeCity_ChampionsRoom_EventScript_15B886 compare RESULT, 1 @@ -127,7 +127,7 @@ EverGrandeCity_ChampionsRoom_EventScript_15B8F0:: @ 815B8F0 applymovement 255, EverGrandeCity_ChampionsRoom_Movement_1A0845 waitmovement 0 msgbox EverGrandeCity_ChampionsRoom_Text_191546, 4 - checkgender + checkplayergender compare RESULT, 0 call_if 1, EverGrandeCity_ChampionsRoom_EventScript_15B9AB compare RESULT, 1 diff --git a/data/scripts/maps/EverGrandeCity_HallOfFame.inc b/data/scripts/maps/EverGrandeCity_HallOfFame.inc index b53319abe..d9baaee89 100644 --- a/data/scripts/maps/EverGrandeCity_HallOfFame.inc +++ b/data/scripts/maps/EverGrandeCity_HallOfFame.inc @@ -38,12 +38,12 @@ EverGrandeCity_HallOfFame_EventScript_15BBA8:: @ 815BBA8 applymovement 255, EverGrandeCity_HallOfFame_Movement_1A0841 waitmovement 0 delay 20 - doanimation 62 - checkanimation 62 + dofieldeffect 62 + waitfieldeffect 62 delay 40 setvar 0x4001, 1 call EverGrandeCity_HallOfFame_EventScript_19FC13 - checkgender + checkplayergender compare RESULT, 0 goto_if_eq EverGrandeCity_HallOfFame_EventScript_15BC41 compare RESULT, 1 diff --git a/data/scripts/maps/FallarborTown.inc b/data/scripts/maps/FallarborTown.inc index d6d4ffd3b..13c8a9f2e 100644 --- a/data/scripts/maps/FallarborTown.inc +++ b/data/scripts/maps/FallarborTown.inc @@ -35,7 +35,7 @@ FallarborTown_EventScript_14E826:: @ 814E826 lock faceplayer waitse - pokecry SPECIES_AZURILL, 0 + playpokecry SPECIES_AZURILL, 0 msgbox FallarborTown_Text_16C92C, 4 waitpokecry release diff --git a/data/scripts/maps/FallarborTown_Mart.inc b/data/scripts/maps/FallarborTown_Mart.inc index 0cf842ddf..e6f715697 100644 --- a/data/scripts/maps/FallarborTown_Mart.inc +++ b/data/scripts/maps/FallarborTown_Mart.inc @@ -41,7 +41,7 @@ FallarborTown_Mart_EventScript_1539AE:: @ 81539AE lock faceplayer waitse - pokecry SPECIES_SKITTY, 0 + playpokecry SPECIES_SKITTY, 0 msgbox FallarborTown_Mart_Text_1770D3, 4 waitpokecry release diff --git a/data/scripts/maps/FortreeCity.inc b/data/scripts/maps/FortreeCity.inc index 3cddff4f9..6ea89dcb7 100644 --- a/data/scripts/maps/FortreeCity.inc +++ b/data/scripts/maps/FortreeCity.inc @@ -76,7 +76,7 @@ FortreeCity_EventScript_14C9E4:: @ 814C9E4 applymovement LAST_TALKED, FortreeCity_Movement_1A0662 waitmovement 0 waitse - pokecry SPECIES_KECLEON, 2 + playpokecry SPECIES_KECLEON, 2 delay 40 waitpokecry applymovement LAST_TALKED, FortreeCity_Movement_14CA13 diff --git a/data/scripts/maps/FortreeCity_House1.inc b/data/scripts/maps/FortreeCity_House1.inc index 3fb0f7745..7b7ef0b2e 100644 --- a/data/scripts/maps/FortreeCity_House1.inc +++ b/data/scripts/maps/FortreeCity_House1.inc @@ -58,7 +58,7 @@ FortreeCity_House1_EventScript_157EC0:: @ 8157EC0 lock faceplayer waitse - pokecry SPECIES_ZIGZAGOON, 0 + playpokecry SPECIES_ZIGZAGOON, 0 msgbox FortreeCity_House1_Text_185888, 4 waitpokecry release diff --git a/data/scripts/maps/FortreeCity_House4.inc b/data/scripts/maps/FortreeCity_House4.inc index fdd30022f..b261e14fb 100644 --- a/data/scripts/maps/FortreeCity_House4.inc +++ b/data/scripts/maps/FortreeCity_House4.inc @@ -60,7 +60,7 @@ FortreeCity_House4_EventScript_15821E:: @ 815821E lock faceplayer waitse - pokecry SPECIES_WINGULL, 0 + playpokecry SPECIES_WINGULL, 0 msgbox FortreeCity_House4_Text_18695C, 4 waitpokecry release diff --git a/data/scripts/maps/FortreeCity_House5.inc b/data/scripts/maps/FortreeCity_House5.inc index 59f80917e..fe10b53b0 100644 --- a/data/scripts/maps/FortreeCity_House5.inc +++ b/data/scripts/maps/FortreeCity_House5.inc @@ -13,7 +13,7 @@ FortreeCity_House5_EventScript_158244:: @ 8158244 lock faceplayer waitse - pokecry SPECIES_ZIGZAGOON, 0 + playpokecry SPECIES_ZIGZAGOON, 0 msgbox FortreeCity_House5_Text_186A4F, 4 waitpokecry release diff --git a/data/scripts/maps/InsideOfTruck.inc b/data/scripts/maps/InsideOfTruck.inc index 7a13cbe78..fc2930aa5 100644 --- a/data/scripts/maps/InsideOfTruck.inc +++ b/data/scripts/maps/InsideOfTruck.inc @@ -16,7 +16,7 @@ InsideOfTruck_MapScript1_15FC26:: @ 815FC26 InsideOfTruck_EventScript_15FC29:: @ 815FC29 lockall setflag 0x4000 - checkgender + checkplayergender compare RESULT, 0 goto_if_eq InsideOfTruck_EventScript_15FC45 compare RESULT, 1 diff --git a/data/scripts/maps/IslandCave.inc b/data/scripts/maps/IslandCave.inc index 55bd4103c..75399bde8 100644 --- a/data/scripts/maps/IslandCave.inc +++ b/data/scripts/maps/IslandCave.inc @@ -78,7 +78,7 @@ IslandCave_EventScript_15EF9D:: @ 815EF9D lock faceplayer waitse - pokecry SPECIES_REGICE, 2 + playpokecry SPECIES_REGICE, 2 delay 40 waitpokecry setwildbattle SPECIES_REGICE, 40, ITEM_NONE diff --git a/data/scripts/maps/LavaridgeTown.inc b/data/scripts/maps/LavaridgeTown.inc index e0d54d0e7..5a4981f09 100644 --- a/data/scripts/maps/LavaridgeTown.inc +++ b/data/scripts/maps/LavaridgeTown.inc @@ -43,14 +43,14 @@ LavaridgeTown_EventScript_14E4ED:: @ 814E4ED waitmovement 0 applymovement 8, LavaridgeTown_Movement_1A0835 waitmovement 0 - checkgender + checkplayergender compare RESULT, 0 call_if 1, LavaridgeTown_EventScript_14E56B compare RESULT, 1 call_if 1, LavaridgeTown_EventScript_14E570 compare 0x8008, 1 call_if 1, LavaridgeTown_EventScript_14E68F - checkgender + checkplayergender compare RESULT, 0 goto_if_eq LavaridgeTown_EventScript_14E5AB compare RESULT, 1 @@ -69,12 +69,12 @@ LavaridgeTown_EventScript_14E575:: @ 814E575 lock faceplayer setvar 0x8008, 0 - checkgender + checkplayergender compare RESULT, 0 call_if 1, LavaridgeTown_EventScript_14E56B compare RESULT, 1 call_if 1, LavaridgeTown_EventScript_14E570 - checkgender + checkplayergender compare RESULT, 0 goto_if_eq LavaridgeTown_EventScript_14E5AB compare RESULT, 1 diff --git a/data/scripts/maps/LavaridgeTown_House.inc b/data/scripts/maps/LavaridgeTown_House.inc index dd5a9cc2b..c75cb9e4b 100644 --- a/data/scripts/maps/LavaridgeTown_House.inc +++ b/data/scripts/maps/LavaridgeTown_House.inc @@ -9,7 +9,7 @@ LavaridgeTown_House_EventScript_1538B7:: @ 81538B7 lock faceplayer waitse - pokecry SPECIES_ZIGZAGOON, 0 + playpokecry SPECIES_ZIGZAGOON, 0 msgbox LavaridgeTown_House_Text_176D94, 4 waitpokecry release diff --git a/data/scripts/maps/LilycoveCity.inc b/data/scripts/maps/LilycoveCity.inc index 76976543c..cf8e2e07d 100644 --- a/data/scripts/maps/LilycoveCity.inc +++ b/data/scripts/maps/LilycoveCity.inc @@ -247,7 +247,7 @@ LilycoveCity_EventScript_14CD3D:: @ 814CD3D LilycoveCity_EventScript_14CD46:: @ 814CD46 lock faceplayer - checkgender + checkplayergender compare RESULT, 0 goto_if_eq LilycoveCity_EventScript_14CD60 compare RESULT, 1 @@ -415,11 +415,11 @@ LilycoveCity_EventScript_14CF6B:: @ 814CF6B applymovement LAST_TALKED, LilycoveCity_Movement_1A0845 waitmovement 0 delay 50 - setanimation 0, 1 - doanimation 30 + setfieldeffect 0, 1 + dofieldeffect 30 delay 15 removeobject LAST_TALKED - checkanimation 30 + waitfieldeffect 30 savebgm 0 fadedefaultbgm setflag 292 diff --git a/data/scripts/maps/LilycoveCity_ContestLobby.inc b/data/scripts/maps/LilycoveCity_ContestLobby.inc index 2bd95eace..0b8d520ee 100644 --- a/data/scripts/maps/LilycoveCity_ContestLobby.inc +++ b/data/scripts/maps/LilycoveCity_ContestLobby.inc @@ -426,7 +426,7 @@ LilycoveCity_ContestLobby_EventScript_158D24:: @ 8158D24 goto_if_eq LilycoveCity_ContestLobby_EventScript_158DA1 compare RESULT, 6 goto_if_eq LilycoveCity_ContestLobby_EventScript_158DB2 - message2 LilycoveCity_ContestLobby_Text_18872A + messageautoscroll LilycoveCity_ContestLobby_Text_18872A waitmessage contestlinktransfer switch 0x8004 @@ -473,7 +473,7 @@ LilycoveCity_ContestLobby_EventScript_158DD1:: @ 8158DD1 special sub_80C496C addvar 0x8004, 1 getnumberstring 1, 32772 - message2 LilycoveCity_ContestLobby_Text_188845 + messageautoscroll LilycoveCity_ContestLobby_Text_188845 waitmessage addvar 0x8004, 65535 goto LilycoveCity_ContestLobby_EventScript_158DEE @@ -490,7 +490,7 @@ LilycoveCity_ContestLobby_EventScript_158DEE:: @ 8158DEE LilycoveCity_ContestLobby_EventScript_158E0B:: @ 8158E0B lockall - message2 LilycoveCity_ContestLobby_Text_1888C6 + messageautoscroll LilycoveCity_ContestLobby_Text_1888C6 waitmessage delay 20 closemessage @@ -511,7 +511,7 @@ LilycoveCity_ContestLobby_EventScript_158E0B:: @ 8158E0B waitmovement 0 applymovement 255, LilycoveCity_ContestLobby_Movement_158E99 waitmovement 0 - message2 LilycoveCity_ContestLobby_Text_1A6832 + messageautoscroll LilycoveCity_ContestLobby_Text_1A6832 waitmessage delay 20 closemessage diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc index 80fda6d59..a4e6af419 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc @@ -134,7 +134,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_159EF2:: @ 8159EF2 lock faceplayer waitse - pokecry SPECIES_AZUMARILL, 0 + playpokecry SPECIES_AZUMARILL, 0 msgbox LilycoveCity_DepartmentStore_1F_Text_18C0C3, 4 waitpokecry release diff --git a/data/scripts/maps/LilycoveCity_House1.inc b/data/scripts/maps/LilycoveCity_House1.inc index 6440f6d3d..4defe37b8 100644 --- a/data/scripts/maps/LilycoveCity_House1.inc +++ b/data/scripts/maps/LilycoveCity_House1.inc @@ -9,7 +9,7 @@ LilycoveCity_House1_EventScript_159B8F:: @ 8159B8F lock faceplayer waitse - pokecry SPECIES_KECLEON, 0 + playpokecry SPECIES_KECLEON, 0 msgbox LilycoveCity_House1_Text_18B82B, 4 waitpokecry release diff --git a/data/scripts/maps/LittlerootTown.inc b/data/scripts/maps/LittlerootTown.inc index 095862fd6..af1d0cc1e 100644 --- a/data/scripts/maps/LittlerootTown.inc +++ b/data/scripts/maps/LittlerootTown.inc @@ -54,7 +54,7 @@ LittlerootTown_EventScript_14D59A:: @ 814D59A LittlerootTown_EventScript_14D5A6:: @ 814D5A6 clearflag 752 setobjectmovementtype 4, 8 - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D5C5 compare RESULT, 1 @@ -333,7 +333,7 @@ LittlerootTown_EventScript_14D7FF:: @ 814D7FF LittlerootTown_EventScript_14D808:: @ 814D808 lockall - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D822 compare RESULT, 1 @@ -351,7 +351,7 @@ LittlerootTown_EventScript_14D82B:: @ 814D82B LittlerootTown_EventScript_14D834:: @ 814D834 lockall - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D84E compare RESULT, 1 @@ -406,25 +406,25 @@ LittlerootTown_EventScript_14D8AA:: @ 814D8AA end LittlerootTown_EventScript_14D8B6:: @ 814D8B6 - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D93C compare RESULT, 1 call_if 1, LittlerootTown_EventScript_14D947 - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D926 compare RESULT, 1 call_if 1, LittlerootTown_EventScript_14D931 msgbox LittlerootTown_Text_16A8EE, 4 closemessage - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D952 compare RESULT, 1 call_if 1, LittlerootTown_EventScript_14D995 call LittlerootTown_EventScript_14DD38 - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14DAAA compare RESULT, 1 @@ -841,7 +841,7 @@ LittlerootTown_Movement_14DCE0:: @ 814DCE0 LittlerootTown_EventScript_14DCE2:: @ 814DCE2 lock faceplayer - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_EventScript_14D926 compare RESULT, 1 diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc index 30b2d6eef..04256cacb 100644 --- a/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_BrendansHouse_1F.inc @@ -17,7 +17,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_152660:: @ 8152660 return LittlerootTown_BrendansHouse_1F_EventScript_152673:: @ 8152673 - checkgender + checkplayergender compare RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_1F_EventScript_152680 return diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc index 1f4b301c0..8ff7f8b81 100644 --- a/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc +++ b/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc @@ -22,14 +22,14 @@ LittlerootTown_BrendansHouse_2F_MapScript2_1527DA:: @ 81527DA .2byte 0 LittlerootTown_BrendansHouse_2F_EventScript_1527E4:: @ 81527E4 - checkgender + checkplayergender compare RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_1A2F68 end @ 81527F1 lockall - checkgender + checkplayergender compare RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_15280A compare RESULT, 1 @@ -50,7 +50,7 @@ gUnknown_0815281E:: @ 815281E LittlerootTown_BrendansHouse_2F_EventScript_15281E:: @ 815281E lockall - checkgender + checkplayergender compare RESULT, 0 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_152837 compare RESULT, 1 diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc index 45eb481e4..14c7f5d8a 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_1F.inc @@ -17,7 +17,7 @@ LittlerootTown_MaysHouse_1F_EventScript_15289E:: @ 815289E return LittlerootTown_MaysHouse_1F_EventScript_1528B1:: @ 81528B1 - checkgender + checkplayergender compare RESULT, 1 goto_if_eq LittlerootTown_MaysHouse_1F_EventScript_1528BE return @@ -116,7 +116,7 @@ LittlerootTown_MaysHouse_1F_Movement_1529C0:: @ 81529C0 @ 81529C7 lockall - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_MaysHouse_1F_EventScript_1529E1 compare RESULT, 1 diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc index b35ee81a9..68bdf0fcb 100644 --- a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc +++ b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc @@ -22,7 +22,7 @@ LittlerootTown_MaysHouse_2F_MapScript2_152A86:: @ 8152A86 .2byte 0 LittlerootTown_MaysHouse_2F_EventScript_152A90:: @ 8152A90 - checkgender + checkplayergender compare RESULT, 1 goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_1A2F68 end @@ -32,7 +32,7 @@ LittlerootTown_MaysHouse_2F_EventScript_152A9D:: @ 8152A9D lockall checkflag 292 goto_if_eq LittlerootTown_BrendansHouse_2F_EventScript_152BB5 - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152AD4 compare RESULT, 1 @@ -112,7 +112,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_152BAA:: @ 8152BAA LittlerootTown_BrendansHouse_2F_EventScript_152BB5:: @ 8152BB5 applymovement LAST_TALKED, LittlerootTown_BrendansHouse_2F_Movement_1A0839 waitmovement 0 - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_152BDB compare RESULT, 1 @@ -193,7 +193,7 @@ gUnknown_08152C39:: @ 8152C39 LittlerootTown_MaysHouse_2F_EventScript_152C39:: @ 8152C39 lockall - checkgender + checkplayergender compare RESULT, 0 goto_if_eq LittlerootTown_MaysHouse_2F_EventScript_152C52 compare RESULT, 1 diff --git a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc index d7aab95a6..e7ccd73f6 100644 --- a/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc +++ b/data/scripts/maps/LittlerootTown_ProfessorBirchsLab.inc @@ -123,7 +123,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152DBA:: @ 8152DBA waitmovement 0 applymovement 255, LittlerootTown_ProfessorBirchsLab_Movement_1A0843 waitmovement 0 - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152E13 compare RESULT, 1 @@ -187,7 +187,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_152E9A:: @ 8152E9A LittlerootTown_ProfessorBirchsLab_EventScript_152EA3:: @ 8152EA3 lock faceplayer - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_ProfessorBirchsLab_EventScript_152EBE compare RESULT, 1 diff --git a/data/scripts/maps/MossdeepCity_House2.inc b/data/scripts/maps/MossdeepCity_House2.inc index b1954a6cf..f7f66b843 100644 --- a/data/scripts/maps/MossdeepCity_House2.inc +++ b/data/scripts/maps/MossdeepCity_House2.inc @@ -13,7 +13,7 @@ MossdeepCity_House2_EventScript_15A87B:: @ 815A87B lock faceplayer waitse - pokecry SPECIES_WINGULL, 0 + playpokecry SPECIES_WINGULL, 0 msgbox MossdeepCity_House2_Text_18D61E, 4 waitpokecry closemessage diff --git a/data/scripts/maps/MossdeepCity_House4.inc b/data/scripts/maps/MossdeepCity_House4.inc index 205f10313..fd173899d 100644 --- a/data/scripts/maps/MossdeepCity_House4.inc +++ b/data/scripts/maps/MossdeepCity_House4.inc @@ -35,7 +35,7 @@ MossdeepCity_House4_EventScript_15AB77:: @ 815AB77 lock faceplayer waitse - pokecry SPECIES_SKITTY, 0 + playpokecry SPECIES_SKITTY, 0 msgbox MossdeepCity_House4_Text_18E1E1, 4 waitpokecry release diff --git a/data/scripts/maps/NewMauville_Inside.inc b/data/scripts/maps/NewMauville_Inside.inc index 0627fc53b..2d2a46ab4 100644 --- a/data/scripts/maps/NewMauville_Inside.inc +++ b/data/scripts/maps/NewMauville_Inside.inc @@ -166,7 +166,7 @@ NewMauville_Inside_EventScript_15E900:: @ 815E900 faceplayer setwildbattle SPECIES_VOLTORB, 25, ITEM_NONE waitse - pokecry SPECIES_VOLTORB, 2 + playpokecry SPECIES_VOLTORB, 2 delay 40 waitpokecry setflag 974 @@ -181,7 +181,7 @@ NewMauville_Inside_EventScript_15E91E:: @ 815E91E faceplayer setwildbattle SPECIES_VOLTORB, 25, ITEM_NONE waitse - pokecry SPECIES_VOLTORB, 2 + playpokecry SPECIES_VOLTORB, 2 delay 40 waitpokecry setflag 975 @@ -196,7 +196,7 @@ NewMauville_Inside_EventScript_15E93C:: @ 815E93C faceplayer setwildbattle SPECIES_VOLTORB, 25, ITEM_NONE waitse - pokecry SPECIES_VOLTORB, 2 + playpokecry SPECIES_VOLTORB, 2 delay 40 waitpokecry setflag 976 diff --git a/data/scripts/maps/OldaleTown.inc b/data/scripts/maps/OldaleTown.inc index 2d84a6f92..e80df2cd2 100644 --- a/data/scripts/maps/OldaleTown.inc +++ b/data/scripts/maps/OldaleTown.inc @@ -256,7 +256,7 @@ OldaleTown_EventScript_14DF77:: @ 814DF77 end OldaleTown_EventScript_14DF92:: @ 814DF92 - checkgender + checkplayergender compare RESULT, 0 goto_if_eq OldaleTown_EventScript_14DFAA compare RESULT, 1 diff --git a/data/scripts/maps/PacifidlogTown_House2.inc b/data/scripts/maps/PacifidlogTown_House2.inc index f3a198a08..e04a8caae 100644 --- a/data/scripts/maps/PacifidlogTown_House2.inc +++ b/data/scripts/maps/PacifidlogTown_House2.inc @@ -81,7 +81,7 @@ PacifidlogTown_House2_EventScript_154267:: @ 8154267 lock faceplayer waitse - pokecry SPECIES_AZURILL, 0 + playpokecry SPECIES_AZURILL, 0 msgbox PacifidlogTown_House2_Text_17938B, 4 waitpokecry msgbox PacifidlogTown_House2_Text_17939B, 4 @@ -92,7 +92,7 @@ PacifidlogTown_House2_EventScript_154282:: @ 8154282 lock faceplayer waitse - pokecry SPECIES_AZURILL, 2 + playpokecry SPECIES_AZURILL, 2 msgbox PacifidlogTown_House2_Text_1793CC, 4 waitpokecry msgbox PacifidlogTown_House2_Text_1793DD, 4 diff --git a/data/scripts/maps/Route103.inc b/data/scripts/maps/Route103.inc index c9ebf9511..ff0ccce30 100644 --- a/data/scripts/maps/Route103.inc +++ b/data/scripts/maps/Route103.inc @@ -9,7 +9,7 @@ Route103_MapScript1_14EB87:: @ 814EB87 Route103_EventScript_14EB92:: @ 814EB92 lockall - checkgender + checkplayergender compare RESULT, 0 goto_if_eq Route103_EventScript_14EBAB compare RESULT, 1 diff --git a/data/scripts/maps/Route104_MrBrineysHouse.inc b/data/scripts/maps/Route104_MrBrineysHouse.inc index d388d1c7a..f24e92cd4 100644 --- a/data/scripts/maps/Route104_MrBrineysHouse.inc +++ b/data/scripts/maps/Route104_MrBrineysHouse.inc @@ -92,7 +92,7 @@ Route104_MrBrineysHouse_EventScript_15BDD1:: @ 815BDD1 lock faceplayer waitse - pokecry SPECIES_WINGULL, 0 + playpokecry SPECIES_WINGULL, 0 msgbox Route104_MrBrineysHouse_Text_191FB9, 4 waitpokecry release diff --git a/data/scripts/maps/Route109.inc b/data/scripts/maps/Route109.inc index be296d403..501ca5e0e 100644 --- a/data/scripts/maps/Route109.inc +++ b/data/scripts/maps/Route109.inc @@ -360,7 +360,7 @@ Route109_EventScript_14F788:: @ 814F788 lock faceplayer waitse - pokecry SPECIES_ZIGZAGOON, 0 + playpokecry SPECIES_ZIGZAGOON, 0 msgbox Route109_Text_16E5CA, 4 waitpokecry release diff --git a/data/scripts/maps/Route110.inc b/data/scripts/maps/Route110.inc index afbfebcc2..146be5959 100644 --- a/data/scripts/maps/Route110.inc +++ b/data/scripts/maps/Route110.inc @@ -325,7 +325,7 @@ Route110_EventScript_14FD29:: @ 814FD29 Route110_EventScript_14FD34:: @ 814FD34 lockall - checkgender + checkplayergender compare RESULT, 0 call_if 1, Route110_EventScript_14FDA7 compare RESULT, 1 @@ -343,7 +343,7 @@ Route110_EventScript_14FD34:: @ 814FD34 call_if 1, Route110_EventScript_14FF1F compare 0x8008, 3 call_if 1, Route110_EventScript_14FF2A - checkgender + checkplayergender compare RESULT, 0 goto_if_eq Route110_EventScript_14FDB1 compare RESULT, 1 diff --git a/data/scripts/maps/Route110_TrickHouseEntrance.inc b/data/scripts/maps/Route110_TrickHouseEntrance.inc index cf192345c..568ba2af6 100644 --- a/data/scripts/maps/Route110_TrickHouseEntrance.inc +++ b/data/scripts/maps/Route110_TrickHouseEntrance.inc @@ -757,10 +757,10 @@ Route110_TrickHouseEntrance_EventScript_16190B:: @ 816190B return Route110_TrickHouseEntrance_EventScript_161920:: @ 8161920 - setanimation 0, 32772 - setanimation 1, 32773 - setanimation 2, 32774 - doanimation 54 - checkanimation 54 + setfieldeffect 0, 32772 + setfieldeffect 1, 32773 + setfieldeffect 2, 32774 + dofieldeffect 54 + waitfieldeffect 54 delay 10 return diff --git a/data/scripts/maps/Route114.inc b/data/scripts/maps/Route114.inc index 95d321e0b..0730db23a 100644 --- a/data/scripts/maps/Route114.inc +++ b/data/scripts/maps/Route114.inc @@ -47,7 +47,7 @@ Route114_EventScript_1507C3:: @ 81507C3 lock faceplayer waitse - pokecry SPECIES_POOCHYENA, 2 + playpokecry SPECIES_POOCHYENA, 2 msgbox Route114_Text_1701F9, 4 waitpokecry release diff --git a/data/scripts/maps/Route119.inc b/data/scripts/maps/Route119.inc index 7d5acea77..2179a7e18 100644 --- a/data/scripts/maps/Route119.inc +++ b/data/scripts/maps/Route119.inc @@ -51,7 +51,7 @@ Route119_EventScript_1511D0:: @ 81511D0 Route119_EventScript_1511DB:: @ 81511DB lockall addobject 25 - checkgender + checkplayergender compare RESULT, 0 call_if 1, Route119_EventScript_151254 compare RESULT, 1 @@ -71,7 +71,7 @@ Route119_EventScript_1511DB:: @ 81511DB removeobject 25 addobject 16 delay 30 - checkgender + checkplayergender compare RESULT, 0 goto_if_eq Route119_EventScript_15125E compare RESULT, 1 diff --git a/data/scripts/maps/Route119_House.inc b/data/scripts/maps/Route119_House.inc index ea963dee0..42cc89068 100644 --- a/data/scripts/maps/Route119_House.inc +++ b/data/scripts/maps/Route119_House.inc @@ -9,7 +9,7 @@ Route119_House_EventScript_163DE7:: @ 8163DE7 lock faceplayer waitse - pokecry SPECIES_WINGULL, 0 + playpokecry SPECIES_WINGULL, 0 msgbox Route119_House_Text_19F406, 4 waitpokecry release diff --git a/data/scripts/maps/Route120.inc b/data/scripts/maps/Route120.inc index d5807ae94..868d00324 100644 --- a/data/scripts/maps/Route120.inc +++ b/data/scripts/maps/Route120.inc @@ -222,7 +222,7 @@ Route120_EventScript_15189D:: @ 815189D applymovement 30, Route120_Movement_1A0662 waitmovement 0 waitse - pokecry SPECIES_KECLEON, 2 + playpokecry SPECIES_KECLEON, 2 delay 40 waitpokecry setwildbattle SPECIES_KECLEON, 30, ITEM_NONE @@ -245,11 +245,11 @@ Route120_EventScript_151908:: @ 8151908 applymovement 31, Route120_Movement_1A0845 waitmovement 0 delay 50 - setanimation 0, 1 - doanimation 30 + setfieldeffect 0, 1 + dofieldeffect 30 delay 15 removeobject 31 - checkanimation 30 + waitfieldeffect 30 setmaptile 13, 15, 663, 0 setmaptile 12, 16, 671, 0 setmaptile 12, 17, 161, 0 diff --git a/data/scripts/maps/Route128.inc b/data/scripts/maps/Route128.inc index 3b2c99591..615662fc1 100644 --- a/data/scripts/maps/Route128.inc +++ b/data/scripts/maps/Route128.inc @@ -52,9 +52,9 @@ Route128_EventScript_15213F:: @ 815213F removeobject 5 removeobject 4 delay 100 - setanimation 0, 1 - doanimation 30 - checkanimation 30 + setfieldeffect 0, 1 + dofieldeffect 30 + waitfieldeffect 30 addobject 3 applymovement 3, Route128_Movement_15226F waitmovement 0 @@ -77,11 +77,11 @@ Route128_EventScript_15213F:: @ 815213F applymovement 3, Route128_Movement_1A0845 waitmovement 0 delay 50 - setanimation 0, 1 - doanimation 30 + setfieldeffect 0, 1 + dofieldeffect 30 delay 15 removeobject 3 - checkanimation 30 + waitfieldeffect 30 setvar 0x407b, 2 releaseall end diff --git a/data/scripts/maps/RustboroCity.inc b/data/scripts/maps/RustboroCity.inc index 955726d89..916eb8108 100644 --- a/data/scripts/maps/RustboroCity.inc +++ b/data/scripts/maps/RustboroCity.inc @@ -551,7 +551,7 @@ RustboroCity_EventScript_14C8DA:: @ 814C8DA faceplayer checkflag 288 goto_if_eq RustboroCity_EventScript_14C917 - checkgender + checkplayergender compare RESULT, 0 goto_if_eq RustboroCity_EventScript_14C8FD compare RESULT, 1 @@ -571,7 +571,7 @@ RustboroCity_EventScript_14C90A:: @ 814C90A end RustboroCity_EventScript_14C917:: @ 814C917 - checkgender + checkplayergender compare RESULT, 0 goto_if_eq RustboroCity_EventScript_14C92F compare RESULT, 1 diff --git a/data/scripts/maps/RustboroCity_Flat2_1F.inc b/data/scripts/maps/RustboroCity_Flat2_1F.inc index f22f6cc90..b6b8b41b1 100644 --- a/data/scripts/maps/RustboroCity_Flat2_1F.inc +++ b/data/scripts/maps/RustboroCity_Flat2_1F.inc @@ -9,7 +9,7 @@ RustboroCity_Flat2_1F_EventScript_157D83:: @ 8157D83 lock faceplayer waitse - pokecry SPECIES_SKITTY, 0 + playpokecry SPECIES_SKITTY, 0 msgbox RustboroCity_Flat2_1F_Text_185410, 4 waitpokecry release diff --git a/data/scripts/maps/RustboroCity_House3.inc b/data/scripts/maps/RustboroCity_House3.inc index b219563be..a5088175e 100644 --- a/data/scripts/maps/RustboroCity_House3.inc +++ b/data/scripts/maps/RustboroCity_House3.inc @@ -13,7 +13,7 @@ RustboroCity_House3_EventScript_157DFF:: @ 8157DFF lock faceplayer waitse - pokecry SPECIES_PIKACHU, 0 + playpokecry SPECIES_PIKACHU, 0 msgbox RustboroCity_House3_Text_18567D, 4 waitpokecry release diff --git a/data/scripts/maps/RusturfTunnel.inc b/data/scripts/maps/RusturfTunnel.inc index b11304607..28f6f0ad4 100644 --- a/data/scripts/maps/RusturfTunnel.inc +++ b/data/scripts/maps/RusturfTunnel.inc @@ -300,7 +300,7 @@ RusturfTunnel_EventScript_15C9D7:: @ 815C9D7 lock faceplayer waitse - pokecry SPECIES_WINGULL, 0 + playpokecry SPECIES_WINGULL, 0 msgbox RusturfTunnel_Text_194188, 4 waitpokecry release @@ -332,7 +332,7 @@ RusturfTunnel_EventScript_15C9EA:: @ 815C9EA message RusturfTunnel_Text_19434F waitmessage waitse - pokecry SPECIES_WINGULL, 0 + playpokecry SPECIES_WINGULL, 0 waitbutton waitpokecry closemessage diff --git a/data/scripts/maps/SSTidalCorridor.inc b/data/scripts/maps/SSTidalCorridor.inc index 3edfdd7bb..2c55a9443 100644 --- a/data/scripts/maps/SSTidalCorridor.inc +++ b/data/scripts/maps/SSTidalCorridor.inc @@ -88,7 +88,7 @@ SSTidalCorridor_EventScript_15FD9F:: @ 815FD9F lock faceplayer waitse - pokecry SPECIES_WINGULL, 0 + playpokecry SPECIES_WINGULL, 0 msgbox SSTidalCorridor_Text_199388, 4 waitpokecry release diff --git a/data/scripts/maps/SeafloorCavern_Room9.inc b/data/scripts/maps/SeafloorCavern_Room9.inc index ee404404e..19ac9a036 100644 --- a/data/scripts/maps/SeafloorCavern_Room9.inc +++ b/data/scripts/maps/SeafloorCavern_Room9.inc @@ -79,11 +79,11 @@ SeafloorCavern_Room9_EventScript_15DAFA:: @ 815DAFA setvar RESULT, 0 .endif playse 209 - setanimation 0, 16 - setanimation 1, 42 - setanimation 2, 0 - doanimation 54 - checkanimation 54 + setfieldeffect 0, 16 + setfieldeffect 1, 42 + setfieldeffect 2, 0 + dofieldeffect 54 + waitfieldeffect 54 .ifdef SAPPHIRE setvar RESULT, 0 .else diff --git a/data/scripts/maps/SkyPillar_Top.inc b/data/scripts/maps/SkyPillar_Top.inc index f5ee60d6d..1dee6e9c4 100644 --- a/data/scripts/maps/SkyPillar_Top.inc +++ b/data/scripts/maps/SkyPillar_Top.inc @@ -16,7 +16,7 @@ SkyPillar_Top_EventScript_15F316:: @ 815F316 faceplayer setwildbattle SPECIES_RAYQUAZA, 70, ITEM_NONE waitse - pokecry SPECIES_RAYQUAZA, 2 + playpokecry SPECIES_RAYQUAZA, 2 delay 40 waitpokecry setflag 773 diff --git a/data/scripts/maps/SlateportCity_PokemonFanClub.inc b/data/scripts/maps/SlateportCity_PokemonFanClub.inc index fa66113b1..4195ad43a 100644 --- a/data/scripts/maps/SlateportCity_PokemonFanClub.inc +++ b/data/scripts/maps/SlateportCity_PokemonFanClub.inc @@ -236,7 +236,7 @@ SlateportCity_PokemonFanClub_EventScript_155A91:: @ 8155A91 lock faceplayer waitse - pokecry SPECIES_SKITTY, 0 + playpokecry SPECIES_SKITTY, 0 msgbox SlateportCity_PokemonFanClub_Text_17E14E, 4 waitpokecry release @@ -246,7 +246,7 @@ SlateportCity_PokemonFanClub_EventScript_155AA4:: @ 8155AA4 lock faceplayer waitse - pokecry SPECIES_ZIGZAGOON, 0 + playpokecry SPECIES_ZIGZAGOON, 0 msgbox SlateportCity_PokemonFanClub_Text_17E164, 4 waitpokecry release @@ -256,7 +256,7 @@ SlateportCity_PokemonFanClub_EventScript_155AB7:: @ 8155AB7 lock faceplayer waitse - pokecry SPECIES_AZUMARILL, 0 + playpokecry SPECIES_AZUMARILL, 0 msgbox SlateportCity_PokemonFanClub_Text_17E178, 4 waitpokecry release diff --git a/data/scripts/maps/SootopolisCity.inc b/data/scripts/maps/SootopolisCity.inc index a1ecffbd2..bddc5965d 100644 --- a/data/scripts/maps/SootopolisCity.inc +++ b/data/scripts/maps/SootopolisCity.inc @@ -461,10 +461,10 @@ SootopolisCity_EventScript_14D4AD:: @ 814D4AD applymovement LAST_TALKED, SootopolisCity_Movement_1A0845 waitmovement 0 delay 50 - setanimation 0, 1 - doanimation 30 + setfieldeffect 0, 1 + dofieldeffect 30 delay 15 removeobject LAST_TALKED - checkanimation 30 + waitfieldeffect 30 release end diff --git a/data/scripts/maps/SootopolisCity_House1.inc b/data/scripts/maps/SootopolisCity_House1.inc index ccfec8036..4877d6d6e 100644 --- a/data/scripts/maps/SootopolisCity_House1.inc +++ b/data/scripts/maps/SootopolisCity_House1.inc @@ -22,7 +22,7 @@ SootopolisCity_House1_EventScript_15B2D1:: @ 815B2D1 lock faceplayer waitse - pokecry SPECIES_KECLEON, 0 + playpokecry SPECIES_KECLEON, 0 msgbox SootopolisCity_House1_Text_18FA50, 4 waitpokecry release diff --git a/data/scripts/maps/SootopolisCity_House4.inc b/data/scripts/maps/SootopolisCity_House4.inc index ac9a641d6..c192a0340 100644 --- a/data/scripts/maps/SootopolisCity_House4.inc +++ b/data/scripts/maps/SootopolisCity_House4.inc @@ -13,7 +13,7 @@ SootopolisCity_House4_EventScript_15B35F:: @ 815B35F lock faceplayer waitse - pokecry SPECIES_AZUMARILL, 0 + playpokecry SPECIES_AZUMARILL, 0 msgbox SootopolisCity_House4_Text_18FDD8, 4 waitpokecry release diff --git a/data/scripts/maps/SouthernIsland_Interior.inc b/data/scripts/maps/SouthernIsland_Interior.inc index f4ec0ab2f..bcb316f96 100644 --- a/data/scripts/maps/SouthernIsland_Interior.inc +++ b/data/scripts/maps/SouthernIsland_Interior.inc @@ -22,7 +22,7 @@ SouthernIsland_Interior_MapScript1_160B6C:: @ 8160B6C end SouthernIsland_Interior_EventScript_160B77:: @ 8160B77 - checkgender + checkplayergender compare RESULT, 0 goto_if_eq SouthernIsland_Interior_EventScript_160B8F compare RESULT, 1 @@ -54,7 +54,7 @@ SouthernIsland_Interior_EventScript_160BA7:: @ 8160BA7 waitmovement 0 delay 50 waitse - pokecry SPECIES_LATIAS_OR_LATIOS, 0 + playpokecry SPECIES_LATIAS_OR_LATIOS, 0 delay 30 waitpokecry addobject 2 diff --git a/data/scripts/maps/UnknownMap_25_34.inc b/data/scripts/maps/UnknownMap_25_34.inc index 0c621d237..6b7854dc9 100644 --- a/data/scripts/maps/UnknownMap_25_34.inc +++ b/data/scripts/maps/UnknownMap_25_34.inc @@ -413,7 +413,7 @@ FallarborTown_ContestLobby_EventScript_15FBDB:: @ 815FBDB LilycoveCity_ContestLobby_EventScript_15FBDB:: @ 815FBDB SlateportCity_ContestLobby_EventScript_15FBDB:: @ 815FBDB VerdanturfTown_ContestLobby_EventScript_15FBDB:: @ 815FBDB - checkgender + checkplayergender compare RESULT, 0 goto_if_eq FallarborTown_ContestLobby_EventScript_15FBF3 compare RESULT, 1 diff --git a/data/scripts/maps/VerdanturfTown_FriendshipRatersHouse.inc b/data/scripts/maps/VerdanturfTown_FriendshipRatersHouse.inc index 0dcad8f62..1cfa785d3 100644 --- a/data/scripts/maps/VerdanturfTown_FriendshipRatersHouse.inc +++ b/data/scripts/maps/VerdanturfTown_FriendshipRatersHouse.inc @@ -56,7 +56,7 @@ VerdanturfTown_FriendshipRatersHouse_EventScript_1540D9:: @ 81540D9 lock faceplayer waitse - pokecry SPECIES_PIKACHU, 0 + playpokecry SPECIES_PIKACHU, 0 msgbox VerdanturfTown_FriendshipRatersHouse_Text_178CFD, 4 waitpokecry release diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index 01fc63f20..7e42fffb4 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -68,7 +68,7 @@ LittlerootTown_MaysHouse_2F_EventScript_1B69EB:: @ 81B69EB setflag 81 setflag 754 setflag 755 - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_BrendansHouse_2F_EventScript_1B6A31 compare RESULT, 1 @@ -313,7 +313,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6CA6:: @ 81B6CA6 lock faceplayer waitse - pokecry SPECIES_MACHOKE, 0 + playpokecry SPECIES_MACHOKE, 0 msgbox LittlerootTown_BrendansHouse_1F_Text_17281D, 4 waitpokecry release @@ -324,7 +324,7 @@ LittlerootTown_MaysHouse_1F_EventScript_1B6CB9:: @ 81B6CB9 lock faceplayer waitse - pokecry SPECIES_MACHOKE, 0 + playpokecry SPECIES_MACHOKE, 0 msgbox LittlerootTown_BrendansHouse_1F_Text_172831, 4 waitpokecry release @@ -361,7 +361,7 @@ LittlerootTown_BrendansHouse_1F_Movement_1B6CDC:: @ 81B6CDC LittlerootTown_BrendansHouse_1F_EventScript_1B6CDE:: @ 81B6CDE LittlerootTown_MaysHouse_1F_EventScript_1B6CDE:: @ 81B6CDE lockall - checkgender + checkplayergender compare RESULT, 0 call_if 1, LittlerootTown_BrendansHouse_1F_EventScript_1B6DAD compare RESULT, 1 diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c index 5bb4e31c7..dd80a2f42 100644 --- a/src/field/scrcmd.c +++ b/src/field/scrcmd.c @@ -601,7 +601,7 @@ bool8 ScrCmd_inccounter(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_lighten(struct ScriptContext *ctx) +bool8 ScrCmd_animdarklevel(struct ScriptContext *ctx) { sub_8081594(ScriptReadByte(ctx)); ScriptContext1_Stop(); @@ -1236,7 +1236,7 @@ bool8 ScrCmd_message(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_message2(struct ScriptContext *ctx) +bool8 ScrCmd_messageautoscroll(struct ScriptContext *ctx) { u8 *msg = (u8 *)ScriptReadWord(ctx); @@ -1836,7 +1836,7 @@ bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_doanimation(struct ScriptContext *ctx) +bool8 ScrCmd_dofieldeffect(struct ScriptContext *ctx) { u16 effectId = VarGet(ScriptReadHalfword(ctx)); @@ -1845,7 +1845,7 @@ bool8 ScrCmd_doanimation(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_setanimation(struct ScriptContext *ctx) +bool8 ScrCmd_setfieldeffect(struct ScriptContext *ctx) { u8 argNum = ScriptReadByte(ctx); @@ -1861,7 +1861,7 @@ static bool8 sub_8067B48() return FALSE; } -bool8 ScrCmd_checkanimation(struct ScriptContext *ctx) +bool8 ScrCmd_waitfieldeffect(struct ScriptContext *ctx) { sFieldEffectScriptId = VarGet(ScriptReadHalfword(ctx)); SetupNativeScript(ctx, sub_8067B48); @@ -1876,13 +1876,13 @@ bool8 ScrCmd_sethealplace(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_checkgender(struct ScriptContext *ctx) +bool8 ScrCmd_checkplayergender(struct ScriptContext *ctx) { gScriptResult = gSaveBlock2.playerGender; return FALSE; } -bool8 ScrCmd_pokecry(struct ScriptContext *ctx) +bool8 ScrCmd_playpokecry(struct ScriptContext *ctx) { u16 species = VarGet(ScriptReadHalfword(ctx)); u16 mode = VarGet(ScriptReadHalfword(ctx)); -- cgit v1.2.3 From 6c9249af37b380ee5f5b00ed24013bfc46bf1bae Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 1 Oct 2017 12:32:19 -0500 Subject: fix more command names --- asm/macros/event.inc | 20 ++-- data/script_cmd_table.inc | 20 ++-- data/scripts/cable_club.inc | 24 ++-- data/scripts/contest_hall.inc | 124 ++++++++++----------- data/scripts/maps/BattleTower_Lobby.inc | 8 +- data/scripts/maps/CaveOfOrigin_B4F.inc | 4 +- data/scripts/maps/DewfordTown.inc | 16 +-- data/scripts/maps/LavaridgeTown.inc | 8 +- data/scripts/maps/LittlerootTown.inc | 88 +++++++-------- data/scripts/maps/Route104.inc | 10 +- data/scripts/maps/Route109.inc | 10 +- data/scripts/maps/Route111.inc | 8 +- data/scripts/maps/Route130.inc | 4 +- data/scripts/maps/Route131.inc | 2 +- data/scripts/maps/SeafloorCavern_Room9.inc | 4 +- .../scripts/maps/ShoalCave_LowTideEntranceRoom.inc | 4 +- data/scripts/maps/ShoalCave_LowTideInnerRoom.inc | 4 +- data/scripts/maps/UnknownMap_25_34.inc | 116 +++++++++---------- src/field/scrcmd.c | 20 ++-- 19 files changed, 247 insertions(+), 247 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index ffd1b9f07..992d4b9f9 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1124,12 +1124,12 @@ .byte \subroutine .endm - .macro setmapfooter word + .macro setmaplayoutindex word .byte 0xa7 .2byte \word .endm - .macro spritelevelup word, byte1, byte2, byte3 + .macro setobjectpriority word, byte1, byte2, byte3 .byte 0xa8 .2byte \word .byte \byte1 @@ -1137,14 +1137,14 @@ .byte \byte3 .endm - .macro restorespritelevel word, byte1, byte2 + .macro resetobjectpriority word, byte1, byte2 .byte 0xa9 .2byte \word .byte \byte1 .byte \byte2 .endm - .macro createvsprite byte1, byte2, word1, word2, byte3, byte4 + .macro createvobject byte1, byte2, word1, word2, byte3, byte4 .byte 0xaa .byte \byte1 .byte \byte2 @@ -1154,40 +1154,40 @@ .byte \byte4 .endm - .macro vspriteface byte1, byte2 + .macro turnvobject byte1, byte2 .byte 0xab .byte \byte1 .byte \byte2 .endm @ Queues the opening of the door tile at (X, Y) with an animation. - .macro setdooropened X, Y + .macro opendoor X, Y .byte 0xac .2byte \X .2byte \Y .endm @ Queues the closing of the door tile at (X, Y) with an animation. - .macro setdoorclosed X, Y + .macro closedoor X, Y .byte 0xad .2byte \X .2byte \Y .endm @ Executes the state changes queued with setdooropened, setdoorclosed, setdooropened2, and setdoorclosed2. - .macro doorchange + .macro waitdooranim .byte 0xae .endm @ Queues the opening of the door tile at (X, Y) without an animation. - .macro setdooropened2 X, Y + .macro setdooropen X, Y .byte 0xaf .2byte \X .2byte \Y .endm @ Queues the closing of the door tile at (X, Y) without an animation. - .macro setdoorclosed2 X, Y + .macro setdoorclosed X, Y .byte 0xb0 .2byte \X .2byte \Y diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index a72341143..463d91201 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -167,16 +167,16 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_setweather @ 0xA4 .4byte ScrCmd_doweather @ 0xA5 .4byte ScrCmd_tileeffect @ 0xA6 - .4byte ScrCmd_setmapfooter @ 0xA7 - .4byte ScrCmd_spritelevelup @ 0xA8 - .4byte ScrCmd_restorespritelevel @ 0xA9 - .4byte ScrCmd_createvsprite @ 0xAA - .4byte ScrCmd_vspriteface @ 0xAB - .4byte ScrCmd_setdooropened @ 0xAC - .4byte ScrCmd_setdoorclosed @ 0xAD - .4byte ScrCmd_doorchange @ 0xAE - .4byte ScrCmd_setdooropened2 @ 0xAF - .4byte ScrCmd_setdoorclosed2 @ 0xB0 + .4byte ScrCmd_setmaplayoutindex @ 0xA7 + .4byte ScrCmd_setobjectpriority @ 0xA8 + .4byte ScrCmd_resetobjectpriority @ 0xA9 + .4byte ScrCmd_createvobject @ 0xAA + .4byte ScrCmd_turnvobject @ 0xAB + .4byte ScrCmd_opendoor @ 0xAC + .4byte ScrCmd_closedoor @ 0xAD + .4byte ScrCmd_waitdooranim @ 0xAE + .4byte ScrCmd_setdooropen @ 0xAF + .4byte ScrCmd_setdoorclosed @ 0xB0 .4byte ScrCmd_event_b1 @ 0xB1 .4byte ScrCmd_event_b2 @ 0xB2 .4byte ScrCmd_checkcoins @ 0xB3 diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index 009dc8dff..9f44e131b 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -229,13 +229,13 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3F5E:: @ 81A3F5E closemessage applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435B waitmovement 0 - setdooropened 5, 1 - doorchange + opendoor 5, 1 + waitdooranim applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435F waitmovement 0 hideobject 255, 0, 0 - setdoorclosed 5, 1 - doorchange + closedoor 5, 1 + waitdooranim release compare 0x8004, 5 goto_if_eq OldaleTown_PokemonCenter_2F_EventScript_1A3FCD @@ -394,13 +394,13 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4166:: @ 81A4166 closemessage applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435B waitmovement 0 - setdooropened 8, 1 - doorchange + opendoor 8, 1 + waitdooranim applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435F waitmovement 0 hideobject 255, 0, 0 - setdoorclosed 8, 1 - doorchange + closedoor 8, 1 + waitdooranim release goto OldaleTown_PokemonCenter_2F_EventScript_1A4325 @@ -492,13 +492,13 @@ OldaleTown_PokemonCenter_2F_EventScript_1A4294:: @ 81A4294 closemessage applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435B waitmovement 0 - setdooropened 11, 1 - doorchange + opendoor 11, 1 + waitdooranim applymovement 255, OldaleTown_PokemonCenter_2F_Movement_1A435F waitmovement 0 hideobject 255, 0, 0 - setdoorclosed 11, 1 - doorchange + closedoor 11, 1 + waitdooranim release goto OldaleTown_PokemonCenter_2F_EventScript_1A4325 diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index 6209a8e6d..bad45e486 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -924,71 +924,71 @@ LinkContestRoom1_EventScript_1A5A90:: @ 81A5A90 return LinkContestRoom1_EventScript_1A5AE4:: @ 81A5AE4 - vspriteface 0, 1 - vspriteface 2, 1 - vspriteface 4, 4 - vspriteface 6, 1 - vspriteface 8, 1 - vspriteface 10, 1 - vspriteface 12, 1 - vspriteface 14, 1 - vspriteface 16, 1 - vspriteface 18, 1 - vspriteface 20, 4 - vspriteface 22, 4 - vspriteface 25, 4 - vspriteface 27, 3 - vspriteface 28, 4 + turnvobject 0, 1 + turnvobject 2, 1 + turnvobject 4, 4 + turnvobject 6, 1 + turnvobject 8, 1 + turnvobject 10, 1 + turnvobject 12, 1 + turnvobject 14, 1 + turnvobject 16, 1 + turnvobject 18, 1 + turnvobject 20, 4 + turnvobject 22, 4 + turnvobject 25, 4 + turnvobject 27, 3 + turnvobject 28, 4 delay 10 - vspriteface 0, 4 - vspriteface 2, 4 - vspriteface 4, 4 - vspriteface 6, 4 - vspriteface 8, 4 - vspriteface 10, 3 - vspriteface 12, 3 - vspriteface 14, 3 - vspriteface 16, 3 - vspriteface 18, 3 - vspriteface 20, 1 - vspriteface 22, 1 - vspriteface 25, 2 - vspriteface 27, 2 - vspriteface 28, 2 + turnvobject 0, 4 + turnvobject 2, 4 + turnvobject 4, 4 + turnvobject 6, 4 + turnvobject 8, 4 + turnvobject 10, 3 + turnvobject 12, 3 + turnvobject 14, 3 + turnvobject 16, 3 + turnvobject 18, 3 + turnvobject 20, 1 + turnvobject 22, 1 + turnvobject 25, 2 + turnvobject 27, 2 + turnvobject 28, 2 delay 10 - vspriteface 1, 2 - vspriteface 3, 2 - vspriteface 5, 2 - vspriteface 7, 2 - vspriteface 9, 4 - vspriteface 11, 2 - vspriteface 15, 2 - vspriteface 13, 2 - vspriteface 17, 2 - vspriteface 19, 2 - vspriteface 21, 3 - vspriteface 23, 3 - vspriteface 24, 3 - vspriteface 26, 4 - vspriteface 29, 3 - vspriteface 30, 3 + turnvobject 1, 2 + turnvobject 3, 2 + turnvobject 5, 2 + turnvobject 7, 2 + turnvobject 9, 4 + turnvobject 11, 2 + turnvobject 15, 2 + turnvobject 13, 2 + turnvobject 17, 2 + turnvobject 19, 2 + turnvobject 21, 3 + turnvobject 23, 3 + turnvobject 24, 3 + turnvobject 26, 4 + turnvobject 29, 3 + turnvobject 30, 3 delay 10 - vspriteface 1, 4 - vspriteface 3, 4 - vspriteface 5, 4 - vspriteface 7, 4 - vspriteface 9, 4 - vspriteface 11, 3 - vspriteface 15, 3 - vspriteface 13, 3 - vspriteface 17, 3 - vspriteface 19, 3 - vspriteface 21, 1 - vspriteface 23, 1 - vspriteface 24, 1 - vspriteface 26, 2 - vspriteface 29, 2 - vspriteface 30, 2 + turnvobject 1, 4 + turnvobject 3, 4 + turnvobject 5, 4 + turnvobject 7, 4 + turnvobject 9, 4 + turnvobject 11, 3 + turnvobject 15, 3 + turnvobject 13, 3 + turnvobject 17, 3 + turnvobject 19, 3 + turnvobject 21, 1 + turnvobject 23, 1 + turnvobject 24, 1 + turnvobject 26, 2 + turnvobject 29, 2 + turnvobject 30, 2 delay 10 return diff --git a/data/scripts/maps/BattleTower_Lobby.inc b/data/scripts/maps/BattleTower_Lobby.inc index 5bb74d35b..b92ec258e 100644 --- a/data/scripts/maps/BattleTower_Lobby.inc +++ b/data/scripts/maps/BattleTower_Lobby.inc @@ -296,13 +296,13 @@ BattleTower_Lobby_EventScript_160664:: @ 8160664 applymovement 1, BattleTower_Lobby_Movement_160693 applymovement 255, BattleTower_Lobby_Movement_160693 waitmovement 0 - setdooropened 6, 1 - doorchange + opendoor 6, 1 + waitdooranim applymovement 1, BattleTower_Lobby_Movement_160697 applymovement 255, BattleTower_Lobby_Movement_16069A waitmovement 0 - setdoorclosed 6, 1 - doorchange + closedoor 6, 1 + waitdooranim return BattleTower_Lobby_Movement_160693:: @ 8160693 diff --git a/data/scripts/maps/CaveOfOrigin_B4F.inc b/data/scripts/maps/CaveOfOrigin_B4F.inc index e8270030b..c6c3cd45e 100644 --- a/data/scripts/maps/CaveOfOrigin_B4F.inc +++ b/data/scripts/maps/CaveOfOrigin_B4F.inc @@ -14,9 +14,9 @@ CaveOfOrigin_B4F_EventScript_15DDC1:: @ 815DDC1 CaveOfOrigin_B4F_MapScript1_15DDC5:: @ 815DDC5 .ifdef SAPPHIRE - setmapfooter 163 + setmaplayoutindex 163 .else - setmapfooter 313 + setmaplayoutindex 313 .endif call CaveOfOrigin_B4F_EventScript_1A01B5 checkflag 113 diff --git a/data/scripts/maps/DewfordTown.inc b/data/scripts/maps/DewfordTown.inc index 480a408e3..bdb7ca51a 100644 --- a/data/scripts/maps/DewfordTown.inc +++ b/data/scripts/maps/DewfordTown.inc @@ -118,8 +118,8 @@ DewfordTown_EventScript_14E147:: @ 814E147 DewfordTown_EventScript_14E151:: @ 814E151 call DewfordTown_EventScript_1A010C - spritelevelup 2, 0, 11, 0 - spritelevelup 255, 0, 11, 0 + setobjectpriority 2, 0, 11, 0 + setobjectpriority 255, 0, 11, 0 applymovement 2, DewfordTown_Movement_14E40E waitmovement 0 removeobject 2 @@ -141,7 +141,7 @@ DewfordTown_EventScript_14E151:: @ 814E151 setflag 743 hideobject 4, 0, 11 setvar 0x408e, 2 - restorespritelevel 255, 0, 11 + resetobjectpriority 255, 0, 11 warp Route104_MrBrineysHouse, 255, 5, 4 copyvar 0x4096, 0x8008 waitstate @@ -150,8 +150,8 @@ DewfordTown_EventScript_14E151:: @ 814E151 DewfordTown_EventScript_14E1D8:: @ 814E1D8 call DewfordTown_EventScript_1A010C - spritelevelup 2, 0, 11, 0 - spritelevelup 255, 0, 11, 1 + setobjectpriority 2, 0, 11, 0 + setobjectpriority 255, 0, 11, 1 applymovement 2, DewfordTown_Movement_14E40E waitmovement 0 removeobject 2 @@ -168,7 +168,7 @@ DewfordTown_EventScript_14E1D8:: @ 814E1D8 waitmovement 0 setobjectxyperm 2, 21, 26 addobject 2 - spritelevelup 2, 0, 24, 0 + setobjectpriority 2, 0, 24, 0 applymovement 2, DewfordTown_Movement_14E410 waitmovement 0 clearflag 741 @@ -182,8 +182,8 @@ DewfordTown_EventScript_14E1D8:: @ 814E1D8 call_if 1, DewfordTown_EventScript_14E28A closemessage copyvar 0x4096, 0x8008 - restorespritelevel 255, 0, 11 - restorespritelevel 2, 0, 24 + resetobjectpriority 255, 0, 11 + resetobjectpriority 2, 0, 24 moveobjectoffscreen 2 release end diff --git a/data/scripts/maps/LavaridgeTown.inc b/data/scripts/maps/LavaridgeTown.inc index 5a4981f09..85f323063 100644 --- a/data/scripts/maps/LavaridgeTown.inc +++ b/data/scripts/maps/LavaridgeTown.inc @@ -29,13 +29,13 @@ LavaridgeTown_MapScript2_14E4E3:: @ 814E4E3 LavaridgeTown_EventScript_14E4ED:: @ 814E4ED lockall setvar 0x8008, 1 - setdooropened 12, 15 - doorchange + opendoor 12, 15 + waitdooranim addobject 8 applymovement 8, LavaridgeTown_Movement_14E70E waitmovement 0 - setdoorclosed 12, 15 - doorchange + closedoor 12, 15 + waitdooranim applymovement 8, LavaridgeTown_Movement_1A083F waitmovement 0 applymovement 255, LavaridgeTown_Movement_1A0843 diff --git a/data/scripts/maps/LittlerootTown.inc b/data/scripts/maps/LittlerootTown.inc index af1d0cc1e..220aeead7 100644 --- a/data/scripts/maps/LittlerootTown.inc +++ b/data/scripts/maps/LittlerootTown.inc @@ -102,13 +102,13 @@ LittlerootTown_EventScript_14D62B:: @ 814D62B playse 10 applymovement 255, LittlerootTown_Movement_14D6C0 waitmovement 0 - setdooropened 0x8004, 0x8005 - doorchange + opendoor 0x8004, 0x8005 + waitdooranim addobject 4 applymovement 4, LittlerootTown_Movement_14D6AC waitmovement 0 - setdoorclosed 0x8004, 0x8005 - doorchange + closedoor 0x8004, 0x8005 + waitdooranim delay 10 applymovement 4, LittlerootTown_Movement_14D6AE waitmovement 0 @@ -117,16 +117,16 @@ LittlerootTown_EventScript_14D62B:: @ 814D62B applymovement 4, LittlerootTown_Movement_14D6B1 applymovement 255, LittlerootTown_Movement_14D6B8 waitmovement 0 - setdooropened 0x8004, 0x8005 - doorchange + opendoor 0x8004, 0x8005 + waitdooranim applymovement 4, LittlerootTown_Movement_14D6B5 applymovement 255, LittlerootTown_Movement_14D6BD waitmovement 0 setflag 752 setvar 0x4092, 3 hideobject 255, 0, 0 - setdoorclosed 0x8004, 0x8005 - doorchange + closedoor 0x8004, 0x8005 + waitdooranim clearflag 868 clearflag 0x4000 return @@ -595,97 +595,97 @@ LittlerootTown_EventScript_14DB3B:: @ 814DB3B LittlerootTown_EventScript_14DB46:: @ 814DB46 applymovement 4, LittlerootTown_Movement_14DCB4 waitmovement 0 - setdooropened 0x8009, 0x800a - doorchange + opendoor 0x8009, 0x800a + waitdooranim applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 hideobject 4, 0, 9 - setdoorclosed 0x8009, 0x800a - doorchange + closedoor 0x8009, 0x800a + waitdooranim return LittlerootTown_EventScript_14DB6C:: @ 814DB6C applymovement 4, LittlerootTown_Movement_14DCBA waitmovement 0 - setdooropened 0x8009, 0x800a - doorchange + opendoor 0x8009, 0x800a + waitdooranim applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 hideobject 4, 0, 9 - setdoorclosed 0x8009, 0x800a - doorchange + closedoor 0x8009, 0x800a + waitdooranim return LittlerootTown_EventScript_14DB92:: @ 814DB92 applymovement 4, LittlerootTown_Movement_14DCC1 waitmovement 0 - setdooropened 0x8009, 0x800a - doorchange + opendoor 0x8009, 0x800a + waitdooranim applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 hideobject 4, 0, 9 - setdoorclosed 0x8009, 0x800a - doorchange + closedoor 0x8009, 0x800a + waitdooranim return LittlerootTown_EventScript_14DBB8:: @ 814DBB8 applymovement 4, LittlerootTown_Movement_14DCC5 waitmovement 0 - setdooropened 0x8009, 0x800a - doorchange + opendoor 0x8009, 0x800a + waitdooranim applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 hideobject 4, 0, 9 - setdoorclosed 0x8009, 0x800a - doorchange + closedoor 0x8009, 0x800a + waitdooranim return LittlerootTown_EventScript_14DBDE:: @ 814DBDE applymovement 4, LittlerootTown_Movement_14DCCA waitmovement 0 - setdooropened 0x8009, 0x800a - doorchange + opendoor 0x8009, 0x800a + waitdooranim applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 hideobject 4, 0, 9 - setdoorclosed 0x8009, 0x800a - doorchange + closedoor 0x8009, 0x800a + waitdooranim return LittlerootTown_EventScript_14DC04:: @ 814DC04 applymovement 4, LittlerootTown_Movement_14DCCF waitmovement 0 - setdooropened 0x8009, 0x800a - doorchange + opendoor 0x8009, 0x800a + waitdooranim applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 hideobject 4, 0, 9 - setdoorclosed 0x8009, 0x800a - doorchange + closedoor 0x8009, 0x800a + waitdooranim return LittlerootTown_EventScript_14DC2A:: @ 814DC2A applymovement 4, LittlerootTown_Movement_14DCD3 waitmovement 0 - setdooropened 0x8009, 0x800a - doorchange + opendoor 0x8009, 0x800a + waitdooranim applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 hideobject 4, 0, 9 - setdoorclosed 0x8009, 0x800a - doorchange + closedoor 0x8009, 0x800a + waitdooranim return LittlerootTown_EventScript_14DC50:: @ 814DC50 applymovement 4, LittlerootTown_Movement_14DCDA waitmovement 0 - setdooropened 0x8009, 0x800a - doorchange + opendoor 0x8009, 0x800a + waitdooranim applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 hideobject 4, 0, 9 - setdoorclosed 0x8009, 0x800a - doorchange + closedoor 0x8009, 0x800a + waitdooranim return LittlerootTown_Movement_14DC76:: @ 814DC76 @@ -849,13 +849,13 @@ LittlerootTown_EventScript_14DCE2:: @ 814DCE2 call LittlerootTown_EventScript_14DD38 applymovement 4, LittlerootTown_Movement_1A0841 waitmovement 0 - setdooropened 0x8009, 0x800a - doorchange + opendoor 0x8009, 0x800a + waitdooranim applymovement 4, LittlerootTown_Movement_14DCE0 waitmovement 0 hideobject 4, 0, 9 - setdoorclosed 0x8009, 0x800a - doorchange + closedoor 0x8009, 0x800a + waitdooranim goto LittlerootTown_EventScript_14DD2B end diff --git a/data/scripts/maps/Route104.inc b/data/scripts/maps/Route104.inc index b1e3d94ac..651f2afb4 100644 --- a/data/scripts/maps/Route104.inc +++ b/data/scripts/maps/Route104.inc @@ -124,8 +124,8 @@ Route104_EventScript_14EFCC:: @ 814EFCC end Route104_EventScript_14EFD5:: @ 814EFD5 - spritelevelup 8, 0, 19, 0 - spritelevelup 255, 0, 19, 0 + setobjectpriority 8, 0, 19, 0 + setobjectpriority 255, 0, 19, 0 applymovement 8, Route104_Movement_14F16C waitmovement 0 removeobject 8 @@ -144,7 +144,7 @@ Route104_EventScript_14EFD5:: @ 814EFD5 waitmovement 0 setobjectxyperm 2, 12, 8 addobject 2 - spritelevelup 2, 0, 11, 0 + setobjectpriority 2, 0, 11, 0 clearflag 740 applymovement 2, Route104_Movement_14F16F waitmovement 0 @@ -154,8 +154,8 @@ Route104_EventScript_14EFD5:: @ 814EFD5 setflag 742 hideobject 7, 0, 19 copyvar 0x4096, 0x8008 - restorespritelevel 255, 0, 19 - restorespritelevel 2, 0, 11 + resetobjectpriority 255, 0, 19 + resetobjectpriority 2, 0, 11 moveobjectoffscreen 2 setvar 0x408e, 0 checkflag 189 diff --git a/data/scripts/maps/Route109.inc b/data/scripts/maps/Route109.inc index 501ca5e0e..9f0ef8c8d 100644 --- a/data/scripts/maps/Route109.inc +++ b/data/scripts/maps/Route109.inc @@ -3,8 +3,8 @@ Route109_MapScripts:: @ 814F4D2 Route109_EventScript_14F4D3:: @ 814F4D3 call Route109_EventScript_1A010C - spritelevelup 2, 0, 24, 0 - spritelevelup 255, 0, 24, 0 + setobjectpriority 2, 0, 24, 0 + setobjectpriority 255, 0, 24, 0 applymovement 2, Route109_Movement_14F67B waitmovement 0 removeobject 2 @@ -46,7 +46,7 @@ Route109_EventScript_14F548:: @ 814F548 clearflag 743 setobjectxyperm 2, 12, 8 addobject 2 - spritelevelup 2, 0, 11, 0 + setobjectpriority 2, 0, 11, 0 applymovement 2, Route109_Movement_14F67D waitmovement 0 clearflag 740 @@ -55,8 +55,8 @@ Route109_EventScript_14F548:: @ 814F548 msgbox Route109_Text_16B4B5, 4 closemessage copyvar 0x4096, 0x8008 - restorespritelevel 255, 0, 24 - restorespritelevel 2, 0, 11 + resetobjectpriority 255, 0, 24 + resetobjectpriority 2, 0, 11 moveobjectoffscreen 2 release end diff --git a/data/scripts/maps/Route111.inc b/data/scripts/maps/Route111.inc index ec13ca3a3..545e62921 100644 --- a/data/scripts/maps/Route111.inc +++ b/data/scripts/maps/Route111.inc @@ -314,13 +314,13 @@ Route111_EventScript_1501F3:: @ 81501F3 end Route111_EventScript_150348:: @ 8150348 - setdooropened 13, 113 - doorchange + opendoor 13, 113 + waitdooranim return Route111_EventScript_15034F:: @ 815034F - setdoorclosed 13, 113 - doorchange + closedoor 13, 113 + waitdooranim return Route111_Movement_150356:: @ 8150356 diff --git a/data/scripts/maps/Route130.inc b/data/scripts/maps/Route130.inc index 7c3c575dc..69da29471 100644 --- a/data/scripts/maps/Route130.inc +++ b/data/scripts/maps/Route130.inc @@ -22,11 +22,11 @@ Route130_MapScript1_1523C8:: @ 81523C8 setflag 30 setflag 31 setflag 32 - setmapfooter 264 + setmaplayoutindex 264 end Route130_EventScript_15240C:: @ 815240C - setmapfooter 46 + setmaplayoutindex 46 end Route130_EventScript_152410:: @ 8152410 diff --git a/data/scripts/maps/Route131.inc b/data/scripts/maps/Route131.inc index 124788a17..50ad4222b 100644 --- a/data/scripts/maps/Route131.inc +++ b/data/scripts/maps/Route131.inc @@ -8,7 +8,7 @@ Route131_MapScript1_152444:: @ 8152444 end Route131_EventScript_15244E:: @ 815244E - setmapfooter 320 + setmaplayoutindex 320 return Route131_EventScript_152452:: @ 8152452 diff --git a/data/scripts/maps/SeafloorCavern_Room9.inc b/data/scripts/maps/SeafloorCavern_Room9.inc index 19ac9a036..eb3d108a6 100644 --- a/data/scripts/maps/SeafloorCavern_Room9.inc +++ b/data/scripts/maps/SeafloorCavern_Room9.inc @@ -6,9 +6,9 @@ SeafloorCavern_Room9_MapScript1_15DAEC:: @ 815DAEC call SeafloorCavern_Room9_EventScript_1A0196 call SeafloorCavern_Room9_EventScript_1A01B5 .ifdef SAPPHIRE - setmapfooter 157 + setmaplayoutindex 157 .else - setmapfooter 327 + setmaplayoutindex 327 .endif end diff --git a/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc b/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc index 983ab69d9..52d430db5 100644 --- a/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideEntranceRoom.inc @@ -9,11 +9,11 @@ ShoalCave_LowTideEntranceRoom_MapScript1_15E05D:: @ 815E05D goto ShoalCave_LowTideEntranceRoom_EventScript_15E072 ShoalCave_LowTideEntranceRoom_EventScript_15E06E:: @ 815E06E - setmapfooter 169 + setmaplayoutindex 169 end ShoalCave_LowTideEntranceRoom_EventScript_15E072:: @ 815E072 - setmapfooter 165 + setmaplayoutindex 165 end ShoalCave_LowTideEntranceRoom_EventScript_15E076:: @ 815E076 diff --git a/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc b/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc index 05fc6a315..ada997023 100644 --- a/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc +++ b/data/scripts/maps/ShoalCave_LowTideInnerRoom.inc @@ -9,11 +9,11 @@ ShoalCave_LowTideInnerRoom_MapScript1_15E19D:: @ 815E19D goto ShoalCave_LowTideInnerRoom_EventScript_15E1AF ShoalCave_LowTideInnerRoom_EventScript_15E1AB:: @ 815E1AB - setmapfooter 170 + setmaplayoutindex 170 end ShoalCave_LowTideInnerRoom_EventScript_15E1AF:: @ 815E1AF - setmapfooter 166 + setmaplayoutindex 166 end ShoalCave_LowTideInnerRoom_MapScript1_15E1B3:: @ 815E1B3 diff --git a/data/scripts/maps/UnknownMap_25_34.inc b/data/scripts/maps/UnknownMap_25_34.inc index 6b7854dc9..a3a1f711c 100644 --- a/data/scripts/maps/UnknownMap_25_34.inc +++ b/data/scripts/maps/UnknownMap_25_34.inc @@ -302,73 +302,73 @@ LinkContestRoom1_EventScript_15F919:: @ 815F919 return LinkContestRoom1_EventScript_15F956:: @ 815F956 - createvsprite 5, 20, 3, 2, 3, 1 - createvsprite 46, 24, 11, 2, 3, 1 + createvobject 5, 20, 3, 2, 3, 1 + createvobject 46, 24, 11, 2, 3, 1 return LinkContestRoom1_EventScript_15F969:: @ 815F969 - createvsprite 45, 0, 2, 3, 3, 4 - createvsprite 66, 1, 2, 4, 3, 4 - createvsprite 55, 2, 2, 7, 3, 4 - createvsprite 46, 3, 2, 8, 3, 4 - createvsprite 5, 10, 12, 3, 3, 3 - createvsprite 20, 11, 12, 4, 3, 3 - createvsprite 24, 12, 12, 7, 3, 3 - createvsprite 12, 13, 12, 8, 3, 3 - createvsprite 47, 20, 3, 2, 3, 1 - createvsprite 46, 24, 11, 2, 3, 1 + createvobject 45, 0, 2, 3, 3, 4 + createvobject 66, 1, 2, 4, 3, 4 + createvobject 55, 2, 2, 7, 3, 4 + createvobject 46, 3, 2, 8, 3, 4 + createvobject 5, 10, 12, 3, 3, 3 + createvobject 20, 11, 12, 4, 3, 3 + createvobject 24, 12, 12, 7, 3, 3 + createvobject 12, 13, 12, 8, 3, 3 + createvobject 47, 20, 3, 2, 3, 1 + createvobject 46, 24, 11, 2, 3, 1 return LinkContestRoom1_EventScript_15F9C4:: @ 815F9C4 - createvsprite 45, 0, 2, 3, 3, 4 - createvsprite 66, 1, 2, 4, 3, 4 - createvsprite 55, 2, 2, 7, 3, 4 - createvsprite 48, 3, 2, 8, 3, 4 - createvsprite 5, 10, 12, 3, 3, 3 - createvsprite 20, 11, 12, 4, 3, 3 - createvsprite 24, 12, 12, 7, 3, 3 - createvsprite 45, 13, 12, 8, 3, 3 - createvsprite 22, 20, 3, 2, 3, 1 - createvsprite 23, 20, 6, 2, 3, 1 - createvsprite 34, 20, 7, 2, 3, 1 - createvsprite 46, 24, 8, 2, 3, 1 - createvsprite 48, 24, 11, 2, 3, 1 - createvsprite 11, 25, 3, 9, 3, 2 - createvsprite 35, 26, 4, 9, 3, 2 - createvsprite 17, 27, 5, 9, 3, 2 - createvsprite 41, 28, 9, 9, 3, 2 - createvsprite 38, 29, 10, 9, 3, 2 - createvsprite 83, 30, 11, 9, 3, 2 + createvobject 45, 0, 2, 3, 3, 4 + createvobject 66, 1, 2, 4, 3, 4 + createvobject 55, 2, 2, 7, 3, 4 + createvobject 48, 3, 2, 8, 3, 4 + createvobject 5, 10, 12, 3, 3, 3 + createvobject 20, 11, 12, 4, 3, 3 + createvobject 24, 12, 12, 7, 3, 3 + createvobject 45, 13, 12, 8, 3, 3 + createvobject 22, 20, 3, 2, 3, 1 + createvobject 23, 20, 6, 2, 3, 1 + createvobject 34, 20, 7, 2, 3, 1 + createvobject 46, 24, 8, 2, 3, 1 + createvobject 48, 24, 11, 2, 3, 1 + createvobject 11, 25, 3, 9, 3, 2 + createvobject 35, 26, 4, 9, 3, 2 + createvobject 17, 27, 5, 9, 3, 2 + createvobject 41, 28, 9, 9, 3, 2 + createvobject 38, 29, 10, 9, 3, 2 + createvobject 83, 30, 11, 9, 3, 2 return LinkContestRoom1_EventScript_15FA70:: @ 815FA70 - createvsprite 45, 0, 2, 3, 3, 4 - createvsprite 66, 1, 2, 4, 3, 4 - createvsprite 55, 2, 2, 7, 3, 4 - createvsprite 12, 3, 2, 8, 3, 4 - createvsprite 39, 4, 1, 3, 3, 4 - createvsprite 34, 6, 1, 5, 3, 4 - createvsprite 26, 7, 1, 6, 3, 4 - createvsprite 48, 9, 1, 8, 3, 4 - createvsprite 5, 10, 12, 3, 3, 3 - createvsprite 20, 11, 12, 4, 3, 3 - createvsprite 24, 12, 12, 7, 3, 3 - createvsprite 45, 13, 12, 8, 3, 3 - createvsprite 50, 14, 13, 3, 3, 3 - createvsprite 52, 15, 13, 4, 3, 3 - createvsprite 65, 17, 13, 6, 3, 3 - createvsprite 83, 18, 13, 7, 3, 3 - createvsprite 116, 19, 13, 8, 3, 3 - createvsprite 25, 20, 3, 2, 3, 1 - createvsprite 31, 21, 6, 2, 3, 1 - createvsprite 33, 22, 7, 2, 3, 1 - createvsprite 46, 24, 11, 2, 3, 1 - createvsprite 49, 25, 3, 9, 3, 2 - createvsprite 35, 26, 4, 9, 3, 2 - createvsprite 48, 27, 5, 9, 3, 2 - createvsprite 41, 28, 9, 9, 3, 2 - createvsprite 38, 29, 10, 9, 3, 2 - createvsprite 83, 30, 11, 9, 3, 2 + createvobject 45, 0, 2, 3, 3, 4 + createvobject 66, 1, 2, 4, 3, 4 + createvobject 55, 2, 2, 7, 3, 4 + createvobject 12, 3, 2, 8, 3, 4 + createvobject 39, 4, 1, 3, 3, 4 + createvobject 34, 6, 1, 5, 3, 4 + createvobject 26, 7, 1, 6, 3, 4 + createvobject 48, 9, 1, 8, 3, 4 + createvobject 5, 10, 12, 3, 3, 3 + createvobject 20, 11, 12, 4, 3, 3 + createvobject 24, 12, 12, 7, 3, 3 + createvobject 45, 13, 12, 8, 3, 3 + createvobject 50, 14, 13, 3, 3, 3 + createvobject 52, 15, 13, 4, 3, 3 + createvobject 65, 17, 13, 6, 3, 3 + createvobject 83, 18, 13, 7, 3, 3 + createvobject 116, 19, 13, 8, 3, 3 + createvobject 25, 20, 3, 2, 3, 1 + createvobject 31, 21, 6, 2, 3, 1 + createvobject 33, 22, 7, 2, 3, 1 + createvobject 46, 24, 11, 2, 3, 1 + createvobject 49, 25, 3, 9, 3, 2 + createvobject 35, 26, 4, 9, 3, 2 + createvobject 48, 27, 5, 9, 3, 2 + createvobject 41, 28, 9, 9, 3, 2 + createvobject 38, 29, 10, 9, 3, 2 + createvobject 83, 30, 11, 9, 3, 2 return LinkContestRoom1_EventScript_15FB64:: @ 815FB64 diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c index dd80a2f42..90b986a1f 100644 --- a/src/field/scrcmd.c +++ b/src/field/scrcmd.c @@ -708,7 +708,7 @@ bool8 ScrCmd_tileeffect(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_setmapfooter(struct ScriptContext *ctx) +bool8 ScrCmd_setmaplayoutindex(struct ScriptContext *ctx) { u16 value = VarGet(ScriptReadHalfword(ctx)); @@ -1093,7 +1093,7 @@ bool8 ScrCmd_hideobject(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_spritelevelup(struct ScriptContext *ctx) +bool8 ScrCmd_setobjectpriority(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); @@ -1104,7 +1104,7 @@ bool8 ScrCmd_spritelevelup(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_restorespritelevel(struct ScriptContext *ctx) +bool8 ScrCmd_resetobjectpriority(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); @@ -1142,7 +1142,7 @@ bool8 ScrCmd_setobjectmovementtype(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_createvsprite(struct ScriptContext *ctx) +bool8 ScrCmd_createvobject(struct ScriptContext *ctx) { u8 graphicsId = ScriptReadByte(ctx); u8 v2 = ScriptReadByte(ctx); @@ -1155,7 +1155,7 @@ bool8 ScrCmd_createvsprite(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_vspriteface(struct ScriptContext *ctx) +bool8 ScrCmd_turnvobject(struct ScriptContext *ctx) { u8 v1 = ScriptReadByte(ctx); u8 direction = ScriptReadByte(ctx); @@ -1913,7 +1913,7 @@ bool8 ScrCmd_setmaptile(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_setdooropened(struct ScriptContext *ctx) +bool8 ScrCmd_opendoor(struct ScriptContext *ctx) { u16 x = VarGet(ScriptReadHalfword(ctx)); u16 y = VarGet(ScriptReadHalfword(ctx)); @@ -1925,7 +1925,7 @@ bool8 ScrCmd_setdooropened(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_setdoorclosed(struct ScriptContext *ctx) +bool8 ScrCmd_closedoor(struct ScriptContext *ctx) { u16 x = VarGet(ScriptReadHalfword(ctx)); u16 y = VarGet(ScriptReadHalfword(ctx)); @@ -1944,13 +1944,13 @@ static bool8 IsDoorAnimationStopped() return FALSE; } -bool8 ScrCmd_doorchange(struct ScriptContext *ctx) +bool8 ScrCmd_waitdooranim(struct ScriptContext *ctx) { SetupNativeScript(ctx, IsDoorAnimationStopped); return TRUE; } -bool8 ScrCmd_setdooropened2(struct ScriptContext *ctx) +bool8 ScrCmd_setdooropen(struct ScriptContext *ctx) { u16 x = VarGet(ScriptReadHalfword(ctx)); u16 y = VarGet(ScriptReadHalfword(ctx)); @@ -1961,7 +1961,7 @@ bool8 ScrCmd_setdooropened2(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_setdoorclosed2(struct ScriptContext *ctx) +bool8 ScrCmd_setdoorclosed(struct ScriptContext *ctx) { u16 x = VarGet(ScriptReadHalfword(ctx)); u16 y = VarGet(ScriptReadHalfword(ctx)); -- cgit v1.2.3 From 3505da56b15432062be0b49fc9d212b12f0bea15 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 1 Oct 2017 12:40:07 -0500 Subject: fix more command names --- asm/macros/event.inc | 26 +++++----- data-de/event_scripts.s | 4 +- data/event_scripts.s | 4 +- data/script_cmd_table.inc | 26 +++++----- data/scripts/berry_tree.inc | 2 +- data/scripts/contest_hall.inc | 8 ++-- data/scripts/day_care.inc | 2 +- data/scripts/maps/BattleTower_Lobby.inc | 2 +- data/scripts/maps/DewfordTown.inc | 2 +- data/scripts/maps/LavaridgeTown.inc | 2 +- data/scripts/maps/LilycoveCity_ContestLobby.inc | 4 +- .../maps/LilycoveCity_DepartmentStore_1F.inc | 2 +- data/scripts/maps/LilycoveCity_Harbor.inc | 2 +- data/scripts/maps/MauvilleCity_BikeShop.inc | 4 +- data/scripts/maps/MauvilleCity_GameCorner.inc | 56 +++++++++++----------- data/scripts/maps/MtChimney_CableCarStation.inc | 2 +- data/scripts/maps/Route112_CableCarStation.inc | 4 +- data/scripts/maps/SeafloorCavern_Entrance.inc | 2 +- data/scripts/maps/SealedChamber_OuterRoom.inc | 2 +- data/scripts/maps/SlateportCity_Harbor.inc | 2 +- data/scripts/maps/UnknownMap_25_34.inc | 8 ++-- data/scripts/players_house.inc | 4 +- data/scripts/tv.inc | 2 +- src/field/scrcmd.c | 26 +++++----- 24 files changed, 99 insertions(+), 99 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 992d4b9f9..f306c6e23 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1194,12 +1194,12 @@ .endm @ In FireRed, this command is a nop. - .macro event_b1 + .macro addelevmenuitem .byte 0xb1 .endm @ In FireRed, this command is a nop. - .macro event_b2 + .macro showelevmenu .byte 0xb2 .endm @@ -1213,7 +1213,7 @@ .2byte \word .endm - .macro removecoins word + .macro takecoins word .byte 0xb5 .2byte \word .endm @@ -1237,7 +1237,7 @@ .2byte \word .endm - .macro vjump pointer + .macro vgoto pointer .byte 0xb9 .4byte \pointer .endm @@ -1247,19 +1247,19 @@ .4byte \pointer .endm - .macro if5 byte, pointer + .macro vgoto_if byte, pointer .byte 0xbb .byte \byte .4byte \pointer .endm - .macro if6 byte, pointer + .macro vcall_if byte, pointer .byte 0xbc .byte \byte .4byte \pointer .endm - .macro vtext pointer + .macro vmessage pointer .byte 0xbd .4byte \pointer .endm @@ -1269,41 +1269,41 @@ .4byte \pointer .endm - .macro vbuffer byte, pointer + .macro vgetstring byte, pointer .byte 0xbf .byte \byte .4byte \pointer .endm @ Spawns a secondary box showing how many Coins the player has. - .macro showcoins X, Y + .macro showcoinsbox X, Y .byte 0xc0 .byte \X .byte \Y .endm @ Hides the secondary box spawned by showcoins. It doesn't appear to use its arguments, but they are still required. - .macro hidecoins X, Y + .macro hidecoinsbox X, Y .byte 0xc1 .byte \X .byte \Y .endm @ Updates the secondary box spawned by showcoins. (What does it do with its arguments?) - .macro updatecoins X, Y + .macro updatecoinsbox X, Y .byte 0xc2 .byte \X .byte \Y .endm @ Increases the value of the specified hidden variable by 1. The hidden variable's value will not be allowed to exceed 0x00FFFFFF. - .macro inccounter a + .macro incrementgamestat a .byte 0xc3 .byte \a .endm @ Clone of warp... Except that it doesn't appear to have any effect when used in some of FireRed's default level scripts. (If it did, Berry Forest would be impossible to enter...) - .macro warp6 map, warp, X, Y + .macro setescapewarp map, warp, X, Y .byte 0xc4 map \map .byte \warp diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s index d29d69f0b..677aa9f21 100644 --- a/data-de/event_scripts.s +++ b/data-de/event_scripts.s @@ -1446,7 +1446,7 @@ VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B end OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C - inccounter GAME_STAT_USED_POKECENTER + incrementgamestat GAME_STAT_USED_POKECENTER message gText_NurseJoy_OkayIllTakeYourPokemon waitmessage applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A083F @@ -4406,7 +4406,7 @@ FallarborTown_ContestLobby_EventScript_1ADE46:: @ 81ADE46 SlateportCity_OceanicMuseum_1F_EventScript_1ADE46:: @ 81ADE46 SlateportCity_PokemonFanClub_EventScript_1ADE46:: @ 81ADE46 special sub_80BDE48 - inccounter GAME_STAT_GOT_INTERVIEWED + incrementgamestat GAME_STAT_GOT_INTERVIEWED release end diff --git a/data/event_scripts.s b/data/event_scripts.s index eb29c159d..854b52c9e 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1440,7 +1440,7 @@ VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B end do_heal_party:: @ 819FD7C - inccounter GAME_STAT_USED_POKECENTER + incrementgamestat GAME_STAT_USED_POKECENTER message gText_NurseJoy_OkayIllTakeYourPokemon waitmessage applymovement 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A083F @@ -4374,7 +4374,7 @@ FallarborTown_ContestLobby_EventScript_1ADE46:: @ 81ADE46 SlateportCity_OceanicMuseum_1F_EventScript_1ADE46:: @ 81ADE46 SlateportCity_PokemonFanClub_EventScript_1ADE46:: @ 81ADE46 special sub_80BDE48 - inccounter GAME_STAT_GOT_INTERVIEWED + incrementgamestat GAME_STAT_GOT_INTERVIEWED release end diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 463d91201..dd002fb1a 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -177,26 +177,26 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_waitdooranim @ 0xAE .4byte ScrCmd_setdooropen @ 0xAF .4byte ScrCmd_setdoorclosed @ 0xB0 - .4byte ScrCmd_event_b1 @ 0xB1 - .4byte ScrCmd_event_b2 @ 0xB2 + .4byte ScrCmd_addelevmenuitem @ 0xB1 + .4byte ScrCmd_showelevmenu @ 0xB2 .4byte ScrCmd_checkcoins @ 0xB3 .4byte ScrCmd_givecoins @ 0xB4 - .4byte ScrCmd_removecoins @ 0xB5 + .4byte ScrCmd_takecoins @ 0xB5 .4byte ScrCmd_setwildbattle @ 0xB6 .4byte ScrCmd_dowildbattle @ 0xB7 .4byte ScrCmd_setvaddress @ 0xB8 - .4byte ScrCmd_vjump @ 0xB9 + .4byte ScrCmd_vgoto @ 0xB9 .4byte ScrCmd_vcall @ 0xBA - .4byte ScrCmd_if5 @ 0xBB - .4byte ScrCmd_if6 @ 0xBC - .4byte ScrCmd_vtext @ 0xBD + .4byte ScrCmd_vgoto_if @ 0xBB + .4byte ScrCmd_vcall_if @ 0xBC + .4byte ScrCmd_vmessage @ 0xBD .4byte ScrCmd_vloadptr @ 0xBE - .4byte ScrCmd_vbuffer @ 0xBF - .4byte ScrCmd_showcoins @ 0xC0 - .4byte ScrCmd_hidecoins @ 0xC1 - .4byte ScrCmd_updatecoins @ 0xC2 - .4byte ScrCmd_inccounter @ 0xC3 - .4byte ScrCmd_warp6 @ 0xC4 + .4byte ScrCmd_vgetstring @ 0xBF + .4byte ScrCmd_showcoinsbox @ 0xC0 + .4byte ScrCmd_hidecoinsbox @ 0xC1 + .4byte ScrCmd_updatecoinsbox @ 0xC2 + .4byte ScrCmd_incrementgamestat @ 0xC3 + .4byte ScrCmd_setescapewarp @ 0xC4 .4byte ScrCmd_waitpokecry @ 0xC5 gScriptCmdTableEnd:: diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc index 344c2c18a..9e219a339 100644 --- a/data/scripts/berry_tree.inc +++ b/data/scripts/berry_tree.inc @@ -176,7 +176,7 @@ Route102_EventScript_1A1693:: @ 81A1693 Route102_EventScript_1A16A9:: @ 81A16A9 special FieldObjectInteractionPlantBerryTree - inccounter GAME_STAT_PLANTED_BERRIES + incrementgamestat GAME_STAT_PLANTED_BERRIES message Route102_Text_1A16FB waitmessage waitbutton diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index bad45e486..1b5c29fee 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -1012,7 +1012,7 @@ LinkContestRoom1_EventScript_1A5BAB:: @ 81A5BAB return LinkContestRoom1_EventScript_1A5BF6:: @ 81A5BF6 - inccounter GAME_STAT_WON_CONTEST + incrementgamestat GAME_STAT_WON_CONTEST msgbox LinkContestRoom1_Text_1A6DF1, 3 delay 90 special sub_80C4CF8 @@ -1070,7 +1070,7 @@ LinkContestRoom1_EventScript_1A5C6A:: @ 81A5C6A return LinkContestRoom1_EventScript_1A5C7C:: @ 81A5C7C - inccounter GAME_STAT_WON_LINK_CONTEST + incrementgamestat GAME_STAT_WON_LINK_CONTEST return LinkContestRoom1_EventScript_1A5C7F:: @ 81A5C7F @@ -1119,7 +1119,7 @@ LinkContestRoom1_EventScript_1A5CE5:: @ 81A5CE5 LinkContestRoom1_EventScript_1A5CFC:: @ 81A5CFC compare 0x4088, 2 call_if 1, LinkContestRoom1_EventScript_1A5C42 - inccounter GAME_STAT_WON_CONTEST + incrementgamestat GAME_STAT_WON_CONTEST specialvar RESULT, sub_80C4440 compare RESULT, 0 goto_if_eq LinkContestRoom1_EventScript_1A5D5B @@ -1142,7 +1142,7 @@ LinkContestRoom1_EventScript_1A5D3B:: @ 81A5D3B LinkContestRoom1_EventScript_1A5D5B:: @ 81A5D5B special sub_80C44C0 - inccounter GAME_STAT_RECEIVED_RIBBONS + incrementgamestat GAME_STAT_RECEIVED_RIBBONS setflag 2107 lockall msgbox LinkContestRoom1_Text_1A6D6A, 4 diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc index 43084cc96..f8151b86a 100644 --- a/data/scripts/day_care.inc +++ b/data/scripts/day_care.inc @@ -114,7 +114,7 @@ Route117_PokemonDayCare_EventScript_1B236C:: @ 81B236C msgbox Route117_PokemonDayCare_Text_1B296E, 4 waitpokecry special Daycare_SendPokemon_Special - inccounter GAME_STAT_USED_DAYCARE + incrementgamestat GAME_STAT_USED_DAYCARE specialvar RESULT, sp0B6_daycare compare RESULT, 2 goto_if_eq Route117_PokemonDayCare_EventScript_1B23DA diff --git a/data/scripts/maps/BattleTower_Lobby.inc b/data/scripts/maps/BattleTower_Lobby.inc index b92ec258e..3227df991 100644 --- a/data/scripts/maps/BattleTower_Lobby.inc +++ b/data/scripts/maps/BattleTower_Lobby.inc @@ -247,7 +247,7 @@ BattleTower_Lobby_EventScript_160587:: @ 8160587 erasebox 0, 0, 15, 10 compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_160642 - inccounter GAME_STAT_ENTERED_BATTLE_TOWER + incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER special SavePlayerParty special sub_8135A14 setvar 0x40bc, 1 diff --git a/data/scripts/maps/DewfordTown.inc b/data/scripts/maps/DewfordTown.inc index bdb7ca51a..aa3584741 100644 --- a/data/scripts/maps/DewfordTown.inc +++ b/data/scripts/maps/DewfordTown.inc @@ -623,7 +623,7 @@ DewfordTown_EventScript_14E443:: @ 814E443 end DewfordTown_EventScript_14E46E:: @ 814E46E - inccounter GAME_STAT_STARTED_TRENDS + incrementgamestat GAME_STAT_STARTED_TRENDS compare 0x8004, 0 goto_if_eq DewfordTown_EventScript_14E48F msgbox DewfordTown_Text_16BB44, 4 diff --git a/data/scripts/maps/LavaridgeTown.inc b/data/scripts/maps/LavaridgeTown.inc index 85f323063..5192176a7 100644 --- a/data/scripts/maps/LavaridgeTown.inc +++ b/data/scripts/maps/LavaridgeTown.inc @@ -242,7 +242,7 @@ LavaridgeTown_EventScript_14E710:: @ 814E710 end LavaridgeTown_EventScript_14E721:: @ 814E721 - inccounter GAME_STAT_ENTERED_HOT_SPRINGS + incrementgamestat GAME_STAT_ENTERED_HOT_SPRINGS end LavaridgeTown_EventScript_14E724:: @ 814E724 diff --git a/data/scripts/maps/LilycoveCity_ContestLobby.inc b/data/scripts/maps/LilycoveCity_ContestLobby.inc index 0b8d520ee..a8c32a4fe 100644 --- a/data/scripts/maps/LilycoveCity_ContestLobby.inc +++ b/data/scripts/maps/LilycoveCity_ContestLobby.inc @@ -68,7 +68,7 @@ LilycoveCity_ContestLobby_EventScript_158918:: @ 8158918 end LilycoveCity_ContestLobby_EventScript_158948:: @ 8158948 - inccounter GAME_STAT_RECEIVED_RIBBONS + incrementgamestat GAME_STAT_RECEIVED_RIBBONS special sub_80C4858 applymovement 4, LilycoveCity_ContestLobby_Movement_158A4E waitmovement 0 @@ -241,7 +241,7 @@ LilycoveCity_ContestLobby_EventScript_158AE8:: @ 8158AE8 end LilycoveCity_ContestLobby_EventScript_158B18:: @ 8158B18 - inccounter GAME_STAT_RECEIVED_RIBBONS + incrementgamestat GAME_STAT_RECEIVED_RIBBONS special sub_80C4858 applymovement 11, LilycoveCity_ContestLobby_Movement_158B78 waitmovement 0 diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc index a4e6af419..7acd29523 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_1F.inc @@ -35,7 +35,7 @@ LilycoveCity_DepartmentStore_1F_EventScript_159D5E:: @ 8159D5E waitmovement 0 compare 0x8004, 0 goto_if_eq LilycoveCity_DepartmentStore_1F_EventScript_159E60 - inccounter GAME_STAT_WON_POKEMON_LOTTERY + incrementgamestat GAME_STAT_WON_POKEMON_LOTTERY compare 0x8006, 0 call_if 1, LilycoveCity_DepartmentStore_1F_EventScript_159E3A compare 0x8006, 1 diff --git a/data/scripts/maps/LilycoveCity_Harbor.inc b/data/scripts/maps/LilycoveCity_Harbor.inc index 1fc172d8c..7e14db994 100644 --- a/data/scripts/maps/LilycoveCity_Harbor.inc +++ b/data/scripts/maps/LilycoveCity_Harbor.inc @@ -3,7 +3,7 @@ LilycoveCity_Harbor_MapScripts:: @ 8159893 .byte 0 LilycoveCity_Harbor_MapScript1_159899:: @ 8159899 - warp6 LilycoveCity, 255, 12, 33 + setescapewarp LilycoveCity, 255, 12, 33 end LilycoveCity_Harbor_EventScript_1598A2:: @ 81598A2 diff --git a/data/scripts/maps/MauvilleCity_BikeShop.inc b/data/scripts/maps/MauvilleCity_BikeShop.inc index 8c0ce9590..a93ff5170 100644 --- a/data/scripts/maps/MauvilleCity_BikeShop.inc +++ b/data/scripts/maps/MauvilleCity_BikeShop.inc @@ -88,7 +88,7 @@ MauvilleCity_BikeShop_EventScript_1568BF:: @ 81568BF end MauvilleCity_BikeShop_EventScript_1568C9:: @ 81568C9 - inccounter GAME_STAT_TRADED_BIKES + incrementgamestat GAME_STAT_TRADED_BIKES msgbox MauvilleCity_BikeShop_Text_181439, 4 removeitem ITEM_ACRO_BIKE, 1 giveitem ITEM_MACH_BIKE @@ -96,7 +96,7 @@ MauvilleCity_BikeShop_EventScript_1568C9:: @ 81568C9 end MauvilleCity_BikeShop_EventScript_1568EA:: @ 81568EA - inccounter GAME_STAT_TRADED_BIKES + incrementgamestat GAME_STAT_TRADED_BIKES msgbox MauvilleCity_BikeShop_Text_181408, 4 removeitem ITEM_MACH_BIKE, 1 giveitem ITEM_ACRO_BIKE diff --git a/data/scripts/maps/MauvilleCity_GameCorner.inc b/data/scripts/maps/MauvilleCity_GameCorner.inc index 8d98f03a8..2e0231287 100644 --- a/data/scripts/maps/MauvilleCity_GameCorner.inc +++ b/data/scripts/maps/MauvilleCity_GameCorner.inc @@ -12,7 +12,7 @@ MauvilleCity_GameCorner_EventScript_156A34:: @ 8156A34 waitmessage showmoneybox 0, 0 nop - showcoins 0, 5 + showcoinsbox 0, 5 goto MauvilleCity_GameCorner_EventScript_156A60 MauvilleCity_GameCorner_EventScript_156A60:: @ 8156A60 @@ -42,11 +42,11 @@ MauvilleCity_GameCorner_EventScript_156AAE:: @ 8156AAE takemoney 0x3e8, 0 updatemoneybox 0, 0 nop - updatecoins 0, 5 + updatecoinsbox 0, 5 playse 95 msgbox MauvilleCity_GameCorner_Text_181CFE, 4 hidemoneybox 0, 0 - hidecoins 0, 5 + hidecoinsbox 0, 5 release end @@ -61,11 +61,11 @@ MauvilleCity_GameCorner_EventScript_156AF0:: @ 8156AF0 takemoney 0x2710, 0 updatemoneybox 0, 0 nop - updatecoins 0, 5 + updatecoinsbox 0, 5 playse 95 msgbox MauvilleCity_GameCorner_Text_181CFE, 4 hidemoneybox 0, 0 - hidecoins 0, 5 + hidecoinsbox 0, 5 release end @@ -77,21 +77,21 @@ MauvilleCity_GameCorner_EventScript_156B32:: @ 8156B32 MauvilleCity_GameCorner_EventScript_156B3C:: @ 8156B3C msgbox MauvilleCity_GameCorner_Text_181D28, 4 hidemoneybox 0, 0 - hidecoins 0, 5 + hidecoinsbox 0, 5 release end MauvilleCity_GameCorner_EventScript_156B4C:: @ 8156B4C msgbox MauvilleCity_GameCorner_Text_181D73, 4 hidemoneybox 0, 0 - hidecoins 0, 5 + hidecoinsbox 0, 5 release end MauvilleCity_GameCorner_EventScript_156B5C:: @ 8156B5C msgbox MauvilleCity_GameCorner_Text_181D57, 4 hidemoneybox 0, 0 - hidecoins 0, 5 + hidecoinsbox 0, 5 release end @@ -108,7 +108,7 @@ MauvilleCity_GameCorner_EventScript_156B6C:: @ 8156B6C MauvilleCity_GameCorner_EventScript_156B88:: @ 8156B88 message MauvilleCity_GameCorner_Text_181E17 waitmessage - showcoins 0, 0 + showcoinsbox 0, 0 setvar 0x4001, 0 goto MauvilleCity_GameCorner_EventScript_156BA6 @@ -160,9 +160,9 @@ MauvilleCity_GameCorner_EventScript_156C46:: @ 8156C46 checkdecor 88 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 - removecoins 1000 + takecoins 1000 adddecor 88 - updatecoins 0, 0 + updatecoinsbox 0, 0 playse 95 msgbox MauvilleCity_GameCorner_Text_181E49, 4 goto MauvilleCity_GameCorner_EventScript_156B9B @@ -176,9 +176,9 @@ MauvilleCity_GameCorner_EventScript_156C80:: @ 8156C80 checkdecor 89 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 - removecoins 1000 + takecoins 1000 adddecor 89 - updatecoins 0, 0 + updatecoinsbox 0, 0 playse 95 msgbox MauvilleCity_GameCorner_Text_181E49, 4 goto MauvilleCity_GameCorner_EventScript_156B9B @@ -192,9 +192,9 @@ MauvilleCity_GameCorner_EventScript_156CBA:: @ 8156CBA checkdecor 90 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156D02 - removecoins 1000 + takecoins 1000 adddecor 90 - updatecoins 0, 0 + updatecoinsbox 0, 0 playse 95 msgbox MauvilleCity_GameCorner_Text_181E49, 4 goto MauvilleCity_GameCorner_EventScript_156B9B @@ -212,7 +212,7 @@ MauvilleCity_GameCorner_EventScript_156D02:: @ 8156D02 MauvilleCity_GameCorner_EventScript_156D0D:: @ 8156D0D msgbox MauvilleCity_GameCorner_Text_181EC2, 4 - hidecoins 0, 0 + hidecoinsbox 0, 0 release end @@ -229,7 +229,7 @@ MauvilleCity_GameCorner_EventScript_156D1A:: @ 8156D1A MauvilleCity_GameCorner_EventScript_156D36:: @ 8156D36 message MauvilleCity_GameCorner_Text_181E17 waitmessage - showcoins 0, 0 + showcoinsbox 0, 0 setvar 0x4001, 0 goto MauvilleCity_GameCorner_EventScript_156D54 @@ -294,9 +294,9 @@ MauvilleCity_GameCorner_EventScript_156E3C:: @ 8156E3C checkitemspace ITEM_TM32, 1 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C - removecoins 1500 + takecoins 1500 additem ITEM_TM32, 1 - updatecoins 0, 0 + updatecoinsbox 0, 0 playse 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 goto MauvilleCity_GameCorner_EventScript_156D49 @@ -309,9 +309,9 @@ MauvilleCity_GameCorner_EventScript_156E76:: @ 8156E76 checkitemspace ITEM_TM29, 1 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C - removecoins 3500 + takecoins 3500 additem ITEM_TM29, 1 - updatecoins 0, 0 + updatecoinsbox 0, 0 playse 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 goto MauvilleCity_GameCorner_EventScript_156D49 @@ -324,9 +324,9 @@ MauvilleCity_GameCorner_EventScript_156EB0:: @ 8156EB0 checkitemspace ITEM_TM35, 1 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C - removecoins 4000 + takecoins 4000 additem ITEM_TM35, 1 - updatecoins 0, 0 + updatecoinsbox 0, 0 playse 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 goto MauvilleCity_GameCorner_EventScript_156D49 @@ -339,9 +339,9 @@ MauvilleCity_GameCorner_EventScript_156EEA:: @ 8156EEA checkitemspace ITEM_TM24, 1 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C - removecoins 4000 + takecoins 4000 additem ITEM_TM24, 1 - updatecoins 0, 0 + updatecoinsbox 0, 0 playse 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 goto MauvilleCity_GameCorner_EventScript_156D49 @@ -354,9 +354,9 @@ MauvilleCity_GameCorner_EventScript_156F24:: @ 8156F24 checkitemspace ITEM_TM13, 1 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C - removecoins 4000 + takecoins 4000 additem ITEM_TM13, 1 - updatecoins 0, 0 + updatecoinsbox 0, 0 playse 95 msgbox MauvilleCity_GameCorner_Text_181F08, 4 goto MauvilleCity_GameCorner_EventScript_156D49 @@ -374,7 +374,7 @@ MauvilleCity_GameCorner_EventScript_156F6C:: @ 8156F6C MauvilleCity_GameCorner_EventScript_156F77:: @ 8156F77 msgbox MauvilleCity_GameCorner_Text_181EC2, 4 - hidecoins 0, 0 + hidecoinsbox 0, 0 release end diff --git a/data/scripts/maps/MtChimney_CableCarStation.inc b/data/scripts/maps/MtChimney_CableCarStation.inc index 2b4de8344..9d99eb5fb 100644 --- a/data/scripts/maps/MtChimney_CableCarStation.inc +++ b/data/scripts/maps/MtChimney_CableCarStation.inc @@ -46,7 +46,7 @@ MtChimney_CableCarStation_EventScript_15C16C:: @ 815C16C waitmovement 0 setvar 0x8004, 1 setvar 0x40a3, 2 - inccounter GAME_STAT_RODE_CABLE_CAR + incrementgamestat GAME_STAT_RODE_CABLE_CAR special CableCarWarp special sub_8123218 waitstate diff --git a/data/scripts/maps/Route112_CableCarStation.inc b/data/scripts/maps/Route112_CableCarStation.inc index f8e91eb09..22534aa77 100644 --- a/data/scripts/maps/Route112_CableCarStation.inc +++ b/data/scripts/maps/Route112_CableCarStation.inc @@ -4,7 +4,7 @@ Route112_CableCarStation_MapScripts:: @ 815C033 .byte 0 Route112_CableCarStation_MapScript1_15C03E:: @ 815C03E - warp6 Route112, 255, 28, 28 + setescapewarp Route112, 255, 28, 28 compare 0x40a3, 2 call_if 1, Route112_CableCarStation_EventScript_15C052 end @@ -47,7 +47,7 @@ Route112_CableCarStation_EventScript_15C0AD:: @ 815C0AD waitmovement 0 setvar 0x8004, 0 setvar 0x40a3, 1 - inccounter GAME_STAT_RODE_CABLE_CAR + incrementgamestat GAME_STAT_RODE_CABLE_CAR special CableCarWarp special sub_8123218 waitstate diff --git a/data/scripts/maps/SeafloorCavern_Entrance.inc b/data/scripts/maps/SeafloorCavern_Entrance.inc index 787ac6605..7ea46d9b0 100644 --- a/data/scripts/maps/SeafloorCavern_Entrance.inc +++ b/data/scripts/maps/SeafloorCavern_Entrance.inc @@ -4,5 +4,5 @@ SeafloorCavern_Entrance_MapScripts:: @ 815DA4A SeafloorCavern_Entrance_MapScript1_15DA50:: @ 815DA50 setdivewarp Underwater_SeafloorCavern, 255, 6, 5 - warp6 Underwater_SeafloorCavern, 255, 6, 5 + setescapewarp Underwater_SeafloorCavern, 255, 6, 5 end diff --git a/data/scripts/maps/SealedChamber_OuterRoom.inc b/data/scripts/maps/SealedChamber_OuterRoom.inc index 39542559b..f16a88802 100644 --- a/data/scripts/maps/SealedChamber_OuterRoom.inc +++ b/data/scripts/maps/SealedChamber_OuterRoom.inc @@ -6,7 +6,7 @@ SealedChamber_OuterRoom_MapScripts:: @ 815F0C6 SealedChamber_OuterRoom_MapScript1_15F0D6:: @ 815F0D6 setdivewarp Underwater_SealedChamber, 255, 12, 44 - warp6 Underwater_SealedChamber, 255, 12, 44 + setescapewarp Underwater_SealedChamber, 255, 12, 44 end SealedChamber_OuterRoom_MapScript1_15F0E7:: @ 815F0E7 diff --git a/data/scripts/maps/SlateportCity_Harbor.inc b/data/scripts/maps/SlateportCity_Harbor.inc index 6d2471d99..f145c4a3d 100644 --- a/data/scripts/maps/SlateportCity_Harbor.inc +++ b/data/scripts/maps/SlateportCity_Harbor.inc @@ -3,7 +3,7 @@ SlateportCity_Harbor_MapScripts:: @ 8155F5D .byte 0 SlateportCity_Harbor_MapScript1_155F63:: @ 8155F63 - warp6 SlateportCity, 255, 28, 13 + setescapewarp SlateportCity, 255, 28, 13 setvar 0x4001, 0 compare 0x40a0, 1 call_if 1, SlateportCity_Harbor_EventScript_155F89 diff --git a/data/scripts/maps/UnknownMap_25_34.inc b/data/scripts/maps/UnknownMap_25_34.inc index a3a1f711c..34d0bb70b 100644 --- a/data/scripts/maps/UnknownMap_25_34.inc +++ b/data/scripts/maps/UnknownMap_25_34.inc @@ -381,25 +381,25 @@ LinkContestRoom1_EventScript_15FB64:: @ 815FB64 return LinkContestRoom1_EventScript_15FBA1:: @ 815FBA1 - inccounter GAME_STAT_ENTERED_CONTEST + incrementgamestat GAME_STAT_ENTERED_CONTEST warp VerdanturfTown_ContestLobby, 255, 5, 4 waitstate end LinkContestRoom1_EventScript_15FBAD:: @ 815FBAD - inccounter GAME_STAT_ENTERED_CONTEST + incrementgamestat GAME_STAT_ENTERED_CONTEST warp FallarborTown_ContestLobby, 255, 5, 4 waitstate end LinkContestRoom1_EventScript_15FBB9:: @ 815FBB9 - inccounter GAME_STAT_ENTERED_CONTEST + incrementgamestat GAME_STAT_ENTERED_CONTEST warp SlateportCity_ContestLobby, 255, 5, 4 waitstate end LinkContestRoom1_EventScript_15FBC5:: @ 815FBC5 - inccounter GAME_STAT_ENTERED_CONTEST + incrementgamestat GAME_STAT_ENTERED_CONTEST warp LilycoveCity_ContestLobby, 255, 6, 4 waitstate end diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index 7e42fffb4..69a4dc3e9 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -105,7 +105,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_1B6A61:: @ 81B6A61 return LittlerootTown_BrendansHouse_2F_EventScript_1B6A91:: @ 81B6A91 - inccounter GAME_STAT_CHECKED_CLOCK + incrementgamestat GAME_STAT_CHECKED_CLOCK fadescreen 1 special ScrSpecial_ViewWallClock waitstate @@ -298,7 +298,7 @@ LittlerootTown_BrendansHouse_1F_EventScript_1B6C80:: @ 81B6C80 LittlerootTown_BrendansHouse_1F_EventScript_1B6C8A:: @ 81B6C8A closemessage call LittlerootTown_BrendansHouse_1F_EventScript_1A02CA - inccounter GAME_STAT_RESTED_AT_HOME + incrementgamestat GAME_STAT_RESTED_AT_HOME msgbox LittlerootTown_BrendansHouse_1F_Text_17276B, 4 release end diff --git a/data/scripts/tv.inc b/data/scripts/tv.inc index 621d5d4f0..425f42a85 100644 --- a/data/scripts/tv.inc +++ b/data/scripts/tv.inc @@ -1,6 +1,6 @@ Event_TV:: @ 81A6E72 lockall - inccounter GAME_STAT_WATCHED_TV + incrementgamestat GAME_STAT_WATCHED_TV special sub_80C2014 specialvar RESULT, CheckForBigMovieOrEmergencyNewsOnTV compare RESULT, 2 diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c index 90b986a1f..b64b17951 100644 --- a/src/field/scrcmd.c +++ b/src/field/scrcmd.c @@ -196,7 +196,7 @@ bool8 ScrCmd_setvaddress(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_vjump(struct ScriptContext *ctx) +bool8 ScrCmd_vgoto(struct ScriptContext *ctx) { u32 addr = ScriptReadWord(ctx); @@ -212,7 +212,7 @@ bool8 ScrCmd_vcall(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_if5(struct ScriptContext *ctx) +bool8 ScrCmd_vgoto_if(struct ScriptContext *ctx) { u8 condition = ScriptReadByte(ctx); u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0); @@ -222,7 +222,7 @@ bool8 ScrCmd_if5(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_if6(struct ScriptContext *ctx) +bool8 ScrCmd_vcall_if(struct ScriptContext *ctx) { u8 condition = ScriptReadByte(ctx); u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0); @@ -595,7 +595,7 @@ bool8 ScrCmd_checkflag(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_inccounter(struct ScriptContext *ctx) +bool8 ScrCmd_incrementgamestat(struct ScriptContext *ctx) { IncrementGameStat(ScriptReadByte(ctx)); return FALSE; @@ -837,7 +837,7 @@ bool8 ScrCmd_setholewarp(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_warp6(struct ScriptContext *ctx) +bool8 ScrCmd_setescapewarp(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); @@ -1433,7 +1433,7 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_vtext(struct ScriptContext *ctx) +bool8 ScrCmd_vmessage(struct ScriptContext *ctx) { u32 v1 = ScriptReadWord(ctx); @@ -1534,7 +1534,7 @@ bool8 ScrCmd_vloadptr(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_vbuffer(struct ScriptContext *ctx) +bool8 ScrCmd_vgetstring(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u32 addr = ScriptReadWord(ctx); @@ -1659,7 +1659,7 @@ bool8 ScrCmd_updatemoneybox(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_showcoins(struct ScriptContext *ctx) +bool8 ScrCmd_showcoinsbox(struct ScriptContext *ctx) { u8 x = ScriptReadByte(ctx); u8 y = ScriptReadByte(ctx); @@ -1668,7 +1668,7 @@ bool8 ScrCmd_showcoins(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_hidecoins(struct ScriptContext *ctx) +bool8 ScrCmd_hidecoinsbox(struct ScriptContext *ctx) { u8 x = ScriptReadByte(ctx); u8 y = ScriptReadByte(ctx); @@ -1677,7 +1677,7 @@ bool8 ScrCmd_hidecoins(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_updatecoins(struct ScriptContext *ctx) +bool8 ScrCmd_updatecoinsbox(struct ScriptContext *ctx) { u8 x = ScriptReadByte(ctx); u8 y = ScriptReadByte(ctx); @@ -1972,7 +1972,7 @@ bool8 ScrCmd_setdoorclosed(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_event_b1(struct ScriptContext *ctx) +bool8 ScrCmd_addelevmenuitem(struct ScriptContext *ctx) { u8 v3 = ScriptReadByte(ctx); u16 v5 = VarGet(ScriptReadHalfword(ctx)); @@ -1983,7 +1983,7 @@ bool8 ScrCmd_event_b1(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_event_b2(struct ScriptContext *ctx) +bool8 ScrCmd_showelevmenu(struct ScriptContext *ctx) { ScriptShowElevatorMenu(); ScriptContext1_Stop(); @@ -2008,7 +2008,7 @@ bool8 ScrCmd_givecoins(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_removecoins(struct ScriptContext *ctx) +bool8 ScrCmd_takecoins(struct ScriptContext *ctx) { u16 coins = VarGet(ScriptReadHalfword(ctx)); -- cgit v1.2.3 From dc802ea2bee0c4a8d8c99abc6918dae2679a4227 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 1 Oct 2017 13:02:25 -0500 Subject: setmestatus -> setmysteryeventstatus --- asm/macros/event.inc | 2 +- data/script_cmd_table.inc | 2 +- src/field/scrcmd.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index f306c6e23..04ab2f001 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -81,7 +81,7 @@ .endm @ Sets mystery event status - .macro setmestatus value + .macro setmysteryeventstatus value .byte 0x0e .byte \value .endm diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index dd002fb1a..3f89949a1 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -14,7 +14,7 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_callstd_if @ 0x0B .4byte ScrCmd_gotoram @ 0x0C .4byte ScrCmd_killscript @ 0x0D - .4byte ScrCmd_setmestatus @ 0x0E + .4byte ScrCmd_setmysteryeventstatus @ 0x0E .4byte ScrCmd_loadword @ 0x0F .4byte ScrCmd_loadbyte @ 0x10 .4byte ScrCmd_writebytetoaddr @ 0x11 diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c index b64b17951..68511ecb7 100644 --- a/src/field/scrcmd.c +++ b/src/field/scrcmd.c @@ -293,7 +293,7 @@ bool8 ScrCmd_killscript(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_setmestatus(struct ScriptContext *ctx) +bool8 ScrCmd_setmysteryeventstatus(struct ScriptContext *ctx) { u8 value = ScriptReadByte(ctx); -- cgit v1.2.3 From ac8f084ec5b95f067369c5162985a5a7a13b3ba4 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 1 Oct 2017 13:22:34 -0500 Subject: imm -> value --- asm/macros/event.inc | 8 +- data/script_cmd_table.inc | 220 +++++++++++++++++++++++----------------------- src/field/scrcmd.c | 6 +- 3 files changed, 117 insertions(+), 117 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 04ab2f001..7c9aec649 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -178,7 +178,7 @@ .endm @ Compares the least-significant byte of the value of script bank a to a fixed byte value (b). - .macro compare_local_to_imm a, b + .macro compare_local_to_value a, b .byte 0x1c .byte \a .byte \b @@ -199,7 +199,7 @@ .endm @ Compares the byte located at offset a to a fixed byte value (b). - .macro compare_addr_to_imm a, b + .macro compare_addr_to_value a, b .byte 0x1f .4byte \a .byte \b @@ -213,7 +213,7 @@ .endm @ Compares the value of `var` to a fixed word value (b). - .macro compare_var_to_imm var, value + .macro compare_var_to_value var, value .byte 0x21 .2byte \var .2byte \value @@ -232,7 +232,7 @@ .if ((\arg1 >> 12) == 4 || (\arg1 >> 12) == 8) && ((\arg2 >> 12) == 4 || (\arg2 >> 12) == 8) compare_var_to_var \arg1, \arg2 .elseif ((\arg1 >> 12) == 4 || (\arg1 >> 12) == 8) && (\arg2 >= 0 && \arg2 <= 0xFFFF) - compare_var_to_imm \arg1, \arg2 + compare_var_to_value \arg1, \arg2 .else .error "Invalid arguments for 'compare'" .endif diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 3f89949a1..17b872d7c 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -10,33 +10,33 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_call_if @ 0x07 .4byte ScrCmd_gotostd @ 0x08 .4byte ScrCmd_callstd @ 0x09 - .4byte ScrCmd_gotostd_if @ 0x0A - .4byte ScrCmd_callstd_if @ 0x0B + .4byte ScrCmd_gotostd_if @ 0x0A + .4byte ScrCmd_callstd_if @ 0x0B .4byte ScrCmd_gotoram @ 0x0C - .4byte ScrCmd_killscript @ 0x0D - .4byte ScrCmd_setmysteryeventstatus @ 0x0E - .4byte ScrCmd_loadword @ 0x0F - .4byte ScrCmd_loadbyte @ 0x10 - .4byte ScrCmd_writebytetoaddr @ 0x11 - .4byte ScrCmd_loadbytefromaddr @ 0x12 + .4byte ScrCmd_killscript @ 0x0D + .4byte ScrCmd_setmysteryeventstatus @ 0x0E + .4byte ScrCmd_loadword @ 0x0F + .4byte ScrCmd_loadbyte @ 0x10 + .4byte ScrCmd_writebytetoaddr @ 0x11 + .4byte ScrCmd_loadbytefromaddr @ 0x12 .4byte ScrCmd_setptrbyte @ 0x13 - .4byte ScrCmd_copylocal @ 0x14 + .4byte ScrCmd_copylocal @ 0x14 .4byte ScrCmd_copybyte @ 0x15 .4byte ScrCmd_setvar @ 0x16 .4byte ScrCmd_addvar @ 0x17 .4byte ScrCmd_subvar @ 0x18 .4byte ScrCmd_copyvar @ 0x19 .4byte ScrCmd_setorcopyvar @ 0x1A - .4byte ScrCmd_compare_local_to_local @ 0x1B - .4byte ScrCmd_compare_local_to_imm @ 0x1C - .4byte ScrCmd_compare_local_to_addr @ 0x1D - .4byte ScrCmd_compare_addr_to_local @ 0x1E - .4byte ScrCmd_compare_addr_to_imm @ 0x1F - .4byte ScrCmd_compare_addr_to_addr @ 0x20 - .4byte ScrCmd_compare_var_to_imm @ 0x21 - .4byte ScrCmd_compare_var_to_var @ 0x22 - .4byte ScrCmd_callnative @ 0x23 - .4byte ScrCmd_gotonative @ 0x24 + .4byte ScrCmd_compare_local_to_local @ 0x1B + .4byte ScrCmd_compare_local_to_value @ 0x1C + .4byte ScrCmd_compare_local_to_addr @ 0x1D + .4byte ScrCmd_compare_addr_to_local @ 0x1E + .4byte ScrCmd_compare_addr_to_value @ 0x1F + .4byte ScrCmd_compare_addr_to_addr @ 0x20 + .4byte ScrCmd_compare_var_to_value @ 0x21 + .4byte ScrCmd_compare_var_to_var @ 0x22 + .4byte ScrCmd_callnative @ 0x23 + .4byte ScrCmd_gotonative @ 0x24 .4byte ScrCmd_special @ 0x25 .4byte ScrCmd_specialvar @ 0x26 .4byte ScrCmd_waitstate @ 0x27 @@ -44,28 +44,28 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_setflag @ 0x29 .4byte ScrCmd_clearflag @ 0x2A .4byte ScrCmd_checkflag @ 0x2B - .4byte ScrCmd_initclock @ 0x2C - .4byte ScrCmd_dodailyevents @ 0x2D - .4byte ScrCmd_gettime @ 0x2E - .4byte ScrCmd_playse @ 0x2F - .4byte ScrCmd_waitse @ 0x30 - .4byte ScrCmd_playfanfare @ 0x31 + .4byte ScrCmd_initclock @ 0x2C + .4byte ScrCmd_dodailyevents @ 0x2D + .4byte ScrCmd_gettime @ 0x2E + .4byte ScrCmd_playse @ 0x2F + .4byte ScrCmd_waitse @ 0x30 + .4byte ScrCmd_playfanfare @ 0x31 .4byte ScrCmd_waitfanfare @ 0x32 - .4byte ScrCmd_playbgm @ 0x33 - .4byte ScrCmd_savebgm @ 0x34 - .4byte ScrCmd_fadedefaultbgm @ 0x35 - .4byte ScrCmd_fadenewbgm @ 0x36 - .4byte ScrCmd_fadeoutbgm @ 0x37 - .4byte ScrCmd_fadeinbgm @ 0x38 + .4byte ScrCmd_playbgm @ 0x33 + .4byte ScrCmd_savebgm @ 0x34 + .4byte ScrCmd_fadedefaultbgm @ 0x35 + .4byte ScrCmd_fadenewbgm @ 0x36 + .4byte ScrCmd_fadeoutbgm @ 0x37 + .4byte ScrCmd_fadeinbgm @ 0x38 .4byte ScrCmd_warp @ 0x39 - .4byte ScrCmd_warpsilent @ 0x3A + .4byte ScrCmd_warpsilent @ 0x3A .4byte ScrCmd_warpdoor @ 0x3B .4byte ScrCmd_warphole @ 0x3C .4byte ScrCmd_warpteleport @ 0x3D - .4byte ScrCmd_setwarp @ 0x3E - .4byte ScrCmd_setdynamicwarp @ 0x3F - .4byte ScrCmd_setdivewarp @ 0x40 - .4byte ScrCmd_setholewarp @ 0x41 + .4byte ScrCmd_setwarp @ 0x3E + .4byte ScrCmd_setdynamicwarp @ 0x3F + .4byte ScrCmd_setdivewarp @ 0x40 + .4byte ScrCmd_setholewarp @ 0x41 .4byte ScrCmd_getplayerxy @ 0x42 .4byte ScrCmd_countpokemon @ 0x43 .4byte ScrCmd_additem @ 0x44 @@ -77,34 +77,34 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_checkpcitem @ 0x4A .4byte ScrCmd_adddecor @ 0x4B .4byte ScrCmd_removedecor @ 0x4C - .4byte ScrCmd_hasdecor @ 0x4D + .4byte ScrCmd_hasdecor @ 0x4D .4byte ScrCmd_checkdecor @ 0x4E - .4byte ScrCmd_applymovement @ 0x4F - .4byte ScrCmd_applymovement_at @ 0x50 - .4byte ScrCmd_waitmovement @ 0x51 - .4byte ScrCmd_waitmovement_at @ 0x52 - .4byte ScrCmd_removeobject @ 0x53 - .4byte ScrCmd_removeobject_at @ 0x54 - .4byte ScrCmd_addobject @ 0x55 - .4byte ScrCmd_addobject_at @ 0x56 - .4byte ScrCmd_setobjectxy @ 0x57 - .4byte ScrCmd_showobject @ 0x58 - .4byte ScrCmd_hideobject @ 0x59 + .4byte ScrCmd_applymovement @ 0x4F + .4byte ScrCmd_applymovement_at @ 0x50 + .4byte ScrCmd_waitmovement @ 0x51 + .4byte ScrCmd_waitmovement_at @ 0x52 + .4byte ScrCmd_removeobject @ 0x53 + .4byte ScrCmd_removeobject_at @ 0x54 + .4byte ScrCmd_addobject @ 0x55 + .4byte ScrCmd_addobject_at @ 0x56 + .4byte ScrCmd_setobjectxy @ 0x57 + .4byte ScrCmd_showobject @ 0x58 + .4byte ScrCmd_hideobject @ 0x59 .4byte ScrCmd_faceplayer @ 0x5A .4byte ScrCmd_turnobject @ 0x5B .4byte ScrCmd_trainerbattle @ 0x5C - .4byte ScrCmd_battlebegin @ 0x5D - .4byte ScrCmd_ontrainerbattleend @ 0x5E - .4byte ScrCmd_ontrainerbattleendgoto @ 0x5F + .4byte ScrCmd_battlebegin @ 0x5D + .4byte ScrCmd_ontrainerbattleend @ 0x5E + .4byte ScrCmd_ontrainerbattleendgoto @ 0x5F .4byte ScrCmd_checktrainerflag @ 0x60 - .4byte ScrCmd_settrainerflag @ 0x61 - .4byte ScrCmd_cleartrainerflag @ 0x62 - .4byte ScrCmd_setobjectxyperm @ 0x63 - .4byte ScrCmd_moveobjectoffscreen @ 0x64 - .4byte ScrCmd_setobjectmovementtype @ 0x65 - .4byte ScrCmd_waitmessage @ 0x66 + .4byte ScrCmd_settrainerflag @ 0x61 + .4byte ScrCmd_cleartrainerflag @ 0x62 + .4byte ScrCmd_setobjectxyperm @ 0x63 + .4byte ScrCmd_moveobjectoffscreen @ 0x64 + .4byte ScrCmd_setobjectmovementtype @ 0x65 + .4byte ScrCmd_waitmessage @ 0x66 .4byte ScrCmd_message @ 0x67 - .4byte ScrCmd_closemessage @ 0x68 + .4byte ScrCmd_closemessage @ 0x68 .4byte ScrCmd_lockall @ 0x69 .4byte ScrCmd_lock @ 0x6A .4byte ScrCmd_releaseall @ 0x6B @@ -112,91 +112,91 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_waitbutton @ 0x6D .4byte ScrCmd_yesnobox @ 0x6E .4byte ScrCmd_multichoice @ 0x6F - .4byte ScrCmd_multichoicedefault @ 0x70 - .4byte ScrCmd_multichoicegrid @ 0x71 + .4byte ScrCmd_multichoicedefault @ 0x70 + .4byte ScrCmd_multichoicegrid @ 0x71 .4byte ScrCmd_drawbox @ 0x72 - .4byte ScrCmd_erasebox @ 0x73 - .4byte ScrCmd_drawboxtext @ 0x74 + .4byte ScrCmd_erasebox @ 0x73 + .4byte ScrCmd_drawboxtext @ 0x74 .4byte ScrCmd_drawpokepic @ 0x75 - .4byte ScrCmd_erasepokepic @ 0x76 + .4byte ScrCmd_erasepokepic @ 0x76 .4byte ScrCmd_drawcontestwinner @ 0x77 - .4byte ScrCmd_braillemessage @ 0x78 - .4byte ScrCmd_givepoke @ 0x79 + .4byte ScrCmd_braillemessage @ 0x78 + .4byte ScrCmd_givepoke @ 0x79 .4byte ScrCmd_giveegg @ 0x7A .4byte ScrCmd_setpokemove @ 0x7B - .4byte ScrCmd_checkpokemove @ 0x7C - .4byte ScrCmd_getspeciesname @ 0x7D - .4byte ScrCmd_getfirstpartypokename @ 0x7E - .4byte ScrCmd_getpartypokename @ 0x7F - .4byte ScrCmd_getitemname @ 0x80 - .4byte ScrCmd_getdecorname @ 0x81 - .4byte ScrCmd_getmovename @ 0x82 - .4byte ScrCmd_getnumberstring @ 0x83 - .4byte ScrCmd_getstdstring @ 0x84 - .4byte ScrCmd_getstring @ 0x85 + .4byte ScrCmd_checkpokemove @ 0x7C + .4byte ScrCmd_getspeciesname @ 0x7D + .4byte ScrCmd_getfirstpartypokename @ 0x7E + .4byte ScrCmd_getpartypokename @ 0x7F + .4byte ScrCmd_getitemname @ 0x80 + .4byte ScrCmd_getdecorname @ 0x81 + .4byte ScrCmd_getmovename @ 0x82 + .4byte ScrCmd_getnumberstring @ 0x83 + .4byte ScrCmd_getstdstring @ 0x84 + .4byte ScrCmd_getstring @ 0x85 .4byte ScrCmd_pokemart @ 0x86 .4byte ScrCmd_pokemartdecor @ 0x87 .4byte ScrCmd_pokemartbp @ 0x88 - .4byte ScrCmd_playslotmachine @ 0x89 - .4byte ScrCmd_plantberrytree @ 0x8A + .4byte ScrCmd_playslotmachine @ 0x89 + .4byte ScrCmd_plantberrytree @ 0x8A .4byte ScrCmd_choosecontestpkmn @ 0x8B .4byte ScrCmd_startcontest @ 0x8C .4byte ScrCmd_showcontestresults @ 0x8D .4byte ScrCmd_contestlinktransfer @ 0x8E .4byte ScrCmd_random @ 0x8F .4byte ScrCmd_givemoney @ 0x90 - .4byte ScrCmd_takemoney @ 0x91 + .4byte ScrCmd_takemoney @ 0x91 .4byte ScrCmd_checkmoney @ 0x92 - .4byte ScrCmd_showmoneybox @ 0x93 - .4byte ScrCmd_hidemoneybox @ 0x94 - .4byte ScrCmd_updatemoneybox @ 0x95 - .4byte ScrCmd_getpricereduction @ 0x96 + .4byte ScrCmd_showmoneybox @ 0x93 + .4byte ScrCmd_hidemoneybox @ 0x94 + .4byte ScrCmd_updatemoneybox @ 0x95 + .4byte ScrCmd_getpricereduction @ 0x96 .4byte ScrCmd_fadescreen @ 0x97 .4byte ScrCmd_fadescreendelay @ 0x98 - .4byte ScrCmd_setdarklevel @ 0x99 - .4byte ScrCmd_animdarklevel @ 0x9A - .4byte ScrCmd_messageautoscroll @ 0x9B - .4byte ScrCmd_dofieldeffect @ 0x9C - .4byte ScrCmd_setfieldeffect @ 0x9D - .4byte ScrCmd_waitfieldeffect @ 0x9E + .4byte ScrCmd_setdarklevel @ 0x99 + .4byte ScrCmd_animdarklevel @ 0x9A + .4byte ScrCmd_messageautoscroll @ 0x9B + .4byte ScrCmd_dofieldeffect @ 0x9C + .4byte ScrCmd_setfieldeffect @ 0x9D + .4byte ScrCmd_waitfieldeffect @ 0x9E .4byte ScrCmd_sethealplace @ 0x9F - .4byte ScrCmd_checkplayergender @ 0xA0 - .4byte ScrCmd_playpokecry @ 0xA1 + .4byte ScrCmd_checkplayergender @ 0xA0 + .4byte ScrCmd_playpokecry @ 0xA1 .4byte ScrCmd_setmaptile @ 0xA2 .4byte ScrCmd_resetweather @ 0xA3 .4byte ScrCmd_setweather @ 0xA4 .4byte ScrCmd_doweather @ 0xA5 .4byte ScrCmd_tileeffect @ 0xA6 - .4byte ScrCmd_setmaplayoutindex @ 0xA7 - .4byte ScrCmd_setobjectpriority @ 0xA8 - .4byte ScrCmd_resetobjectpriority @ 0xA9 + .4byte ScrCmd_setmaplayoutindex @ 0xA7 + .4byte ScrCmd_setobjectpriority @ 0xA8 + .4byte ScrCmd_resetobjectpriority @ 0xA9 .4byte ScrCmd_createvobject @ 0xAA .4byte ScrCmd_turnvobject @ 0xAB - .4byte ScrCmd_opendoor @ 0xAC - .4byte ScrCmd_closedoor @ 0xAD - .4byte ScrCmd_waitdooranim @ 0xAE - .4byte ScrCmd_setdooropen @ 0xAF - .4byte ScrCmd_setdoorclosed @ 0xB0 - .4byte ScrCmd_addelevmenuitem @ 0xB1 - .4byte ScrCmd_showelevmenu @ 0xB2 + .4byte ScrCmd_opendoor @ 0xAC + .4byte ScrCmd_closedoor @ 0xAD + .4byte ScrCmd_waitdooranim @ 0xAE + .4byte ScrCmd_setdooropen @ 0xAF + .4byte ScrCmd_setdoorclosed @ 0xB0 + .4byte ScrCmd_addelevmenuitem @ 0xB1 + .4byte ScrCmd_showelevmenu @ 0xB2 .4byte ScrCmd_checkcoins @ 0xB3 .4byte ScrCmd_givecoins @ 0xB4 - .4byte ScrCmd_takecoins @ 0xB5 + .4byte ScrCmd_takecoins @ 0xB5 .4byte ScrCmd_setwildbattle @ 0xB6 .4byte ScrCmd_dowildbattle @ 0xB7 .4byte ScrCmd_setvaddress @ 0xB8 .4byte ScrCmd_vgoto @ 0xB9 .4byte ScrCmd_vcall @ 0xBA - .4byte ScrCmd_vgoto_if @ 0xBB - .4byte ScrCmd_vcall_if @ 0xBC - .4byte ScrCmd_vmessage @ 0xBD + .4byte ScrCmd_vgoto_if @ 0xBB + .4byte ScrCmd_vcall_if @ 0xBC + .4byte ScrCmd_vmessage @ 0xBD .4byte ScrCmd_vloadptr @ 0xBE - .4byte ScrCmd_vgetstring @ 0xBF - .4byte ScrCmd_showcoinsbox @ 0xC0 - .4byte ScrCmd_hidecoinsbox @ 0xC1 - .4byte ScrCmd_updatecoinsbox @ 0xC2 - .4byte ScrCmd_incrementgamestat @ 0xC3 - .4byte ScrCmd_setescapewarp @ 0xC4 + .4byte ScrCmd_vgetstring @ 0xBF + .4byte ScrCmd_showcoinsbox @ 0xC0 + .4byte ScrCmd_hidecoinsbox @ 0xC1 + .4byte ScrCmd_updatecoinsbox @ 0xC2 + .4byte ScrCmd_incrementgamestat @ 0xC3 + .4byte ScrCmd_setescapewarp @ 0xC4 .4byte ScrCmd_waitpokecry @ 0xC5 gScriptCmdTableEnd:: diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c index 68511ecb7..ec8e17d34 100644 --- a/src/field/scrcmd.c +++ b/src/field/scrcmd.c @@ -398,7 +398,7 @@ bool8 ScrCmd_compare_local_to_local(struct ScriptContext *ctx) } // comparelocaltoimm -bool8 ScrCmd_compare_local_to_imm(struct ScriptContext *ctx) +bool8 ScrCmd_compare_local_to_value(struct ScriptContext *ctx) { u8 value1 = ctx->data[ScriptReadByte(ctx)]; u8 value2 = ScriptReadByte(ctx); @@ -425,7 +425,7 @@ bool8 ScrCmd_compare_addr_to_local(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_compare_addr_to_imm(struct ScriptContext *ctx) +bool8 ScrCmd_compare_addr_to_value(struct ScriptContext *ctx) { u8 value1 = *(u8 *)ScriptReadWord(ctx); u8 value2 = ScriptReadByte(ctx); @@ -443,7 +443,7 @@ bool8 ScrCmd_compare_addr_to_addr(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_compare_var_to_imm(struct ScriptContext *ctx) +bool8 ScrCmd_compare_var_to_value(struct ScriptContext *ctx) { u16 value1 = *GetVarPointer(ScriptReadHalfword(ctx)); u16 value2 = ScriptReadHalfword(ctx); -- cgit v1.2.3 From 7e3c396c43542fa442a8caad34434f9db25b06e8 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 1 Oct 2017 14:04:53 -0500 Subject: fix switch macro --- asm/macros/event.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 7c9aec649..afcd2a6f8 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1496,7 +1496,7 @@ .endm .macro case condition, dest - compare_var_to_imm 0x8000, \condition + compare_var_to_value 0x8000, \condition goto_if_eq \dest .endm -- cgit v1.2.3 From ab3c40fbf6dd7e32d63ef8146edea900d10681d6 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 1 Oct 2017 14:39:25 -0500 Subject: vloadptr -> vloadword --- asm/macros/event.inc | 2 +- data/script_cmd_table.inc | 2 +- src/field/scrcmd.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index afcd2a6f8..960b300b7 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1264,7 +1264,7 @@ .4byte \pointer .endm - .macro vloadptr pointer + .macro vloadword pointer .byte 0xbe .4byte \pointer .endm diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 17b872d7c..b6b7401f3 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -190,7 +190,7 @@ gScriptCmdTable:: @ 814AE30 .4byte ScrCmd_vgoto_if @ 0xBB .4byte ScrCmd_vcall_if @ 0xBC .4byte ScrCmd_vmessage @ 0xBD - .4byte ScrCmd_vloadptr @ 0xBE + .4byte ScrCmd_vloadword @ 0xBE .4byte ScrCmd_vgetstring @ 0xBF .4byte ScrCmd_showcoinsbox @ 0xC0 .4byte ScrCmd_hidecoinsbox @ 0xC1 diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c index ec8e17d34..28584d4d0 100644 --- a/src/field/scrcmd.c +++ b/src/field/scrcmd.c @@ -1526,7 +1526,7 @@ bool8 ScrCmd_getstring(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_vloadptr(struct ScriptContext *ctx) +bool8 ScrCmd_vloadword(struct ScriptContext *ctx) { u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0); -- cgit v1.2.3 From 50dc4f429d4aa68e0365adc71d17e43a0dd7b843 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 1 Oct 2017 14:58:26 -0500 Subject: add asmdiff.sh comparison script --- asmdiff.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 asmdiff.sh diff --git a/asmdiff.sh b/asmdiff.sh new file mode 100644 index 000000000..a4b465b6e --- /dev/null +++ b/asmdiff.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb" +OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" +$OBJDUMP $OPTIONS baserom.gba > baserom.dump +$OBJDUMP $OPTIONS pokeruby.gba > pokeruby.dump +diff baserom.dump pokeruby.dump -- cgit v1.2.3